diff --git a/.clang-format b/.clang-format index 8c5619f35..3c68a1a7a 100644 --- a/.clang-format +++ b/.clang-format @@ -54,7 +54,6 @@ IncludeCategories: IndentCaseLabels: false IndentWidth: 4 IndentWrappedFunctionNames: false -InsertNewlineAtEOF: true KeepEmptyLinesAtTheStartOfBlocks: true MacroBlockBegin: '' MacroBlockEnd: '' @@ -82,7 +81,7 @@ SpacesInContainerLiterals: true SpacesInCStyleCastParentheses: false SpacesInParentheses: false SpacesInSquareBrackets: false -Standard: c++17 +Standard: Cpp11 TabWidth: 4 UseTab: Never ... diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 225c67f61..6de956328 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -15,7 +15,6 @@ These are just guidelines, not rules. Use your best judgment, and feel free to p * [Bug reports](#bug-reports) * [Discuss with the team](#discuss-with-the-team) * [Your first code contribution](#your-first-code-contribution) - * [Using AI](#using-ai) * [Pull requests](#pull-requests) * [Translations](#translations) @@ -39,7 +38,7 @@ We will accept contributions of good code that we can use from anyone. - “contributions”: This means just about anything you wish to contribute to the project, as long as it is good code we can use. The easier you make it for us to accept your contribution, the happier we are, but if it’s good enough, we will do a reasonable amount of work to use it. - “of good code”: This means that we will accept contributions that work well and efficiently, that fit in with the goals of the project, that match the project’s coding style, and that do not impose an undue maintenance workload on us going forward. This does not mean just program code, either, but documentation and artistic works as appropriate to the project. - “that we can use”: This means that your contribution must be given freely and irrevocably, that you must have the right to contribute it for our unrestricted use, and that your contribution is made under a license that is compatible with the license the project has chosen and that permits us to include, distribute, and modify your work without restriction. - - “from anyone”: This means exactly that. We don’t care about anything but your code. We don’t care about your race, religion, national origin, biological gender, perceived gender, sexual orientation, lifestyle, political viewpoint, or anything extraneous like that. We will neither reject your contribution nor grant it preferential treatment on any basis except the code itself. We do, however, reserve the right to limit your access to our community if you violate our [Code of Conduct](../CODE-OF-CONDUCT.md). + - “from anyone”: This means exactly that. We don’t care about anything but your code. We don’t care about your race, religion, national origin, biological gender, perceived gender, sexual orientation, lifestyle, political viewpoint, or anything extraneous like that. We will neither reject your contribution nor grant it preferential treatment on any basis except the code itself. We do, however, reserve the right to tell you to go away if you behave too obnoxiously toward us. #### If Your Contribution Is Rejected @@ -75,10 +74,6 @@ Unsure where to begin contributing to KeePassXC? You can start by looking throug Both issue lists are sorted by total number of comments. While not perfect, looking at the number of comments on an issue can give a general idea of how much an impact a given change will have. -### Using AI - -Generative AI is fast becoming a first-party feature in most development environments, including GitHub itself. If you use Generative AI to write the vast majority of your submission (e.g., agent-based or vibe coding) then you **must document your use of AI** in your pull request. Please include the service you used and/or model that generated the code. All code submissions go through a rigourous review process regardless of the development workflow used. - ### Pull requests Along with our desire to hear your feedback and suggestions, we're also interested in accepting direct assistance in the form of code. diff --git a/.github/ISSUE_TEMPLATE/bug-report.md b/.github/ISSUE_TEMPLATE/bug-report.md new file mode 100644 index 000000000..a4a3ae2cd --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug-report.md @@ -0,0 +1,39 @@ +--- +name: Bug Report +about: provide information about a problem +title: +labels: bug +assignees: '' + +--- +## Overview +[TIP]: # ( DO NOT include screenshots of your actual database! ) +[NOTE]: # ( Give a BRIEF summary about your problem ) + + +## Steps to Reproduce +[NOTE]: # ( Provide a simple set of steps to reproduce this bug. ) +1. +2. +3. + +## Expected Behavior +[NOTE]: # ( Tell us what you expected to happen ) + + +## Actual Behavior +[NOTE]: # ( Tell us what actually happens ) + + +## Context +[NOTE]: # ( Give us any additional information you may have. ) + + +[NOTE]: # ( Paste debug info from Help → About here ) +KeePassXC - VERSION +Revision: REVISION + +[NOTE]: # ( Pick choices based on your environment ) +Operating System: Windows/Linux/macOS +Desktop Env: Gnome/KDE/XFCE/Mate/Cinnamon +Windowing System: X11/Wayland \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml deleted file mode 100644 index 557f4a4d9..000000000 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ /dev/null @@ -1,83 +0,0 @@ -name: Bug Report -description: Provide information about a problem you are experiencing. -type: Bug - -body: - - type: checkboxes - attributes: - label: Have you searched for an existing issue? - description: | - Use the issue search box to see if one already exists for the bug you encountered. - Also take a moment to review our pinned issues. - options: - - label: Yes, I tried searching and reviewed the pinned issues - required: true - - - type: textarea - id: summary - attributes: - label: Brief Summary - description: | - Provide an overview of the problem, include any information that may help us triage this issue. - Provide screenshots if possible, but do NOT show sensitive data (use View -> Allow Screen Capture). - validations: - required: true - - - type: textarea - id: steps - attributes: - label: Steps to Reproduce - description: Provide a simple set of steps to reproduce this bug. - placeholder: | - 1. - 2. - 3. - validations: - required: true - - - type: textarea - id: expected_vs_actual - attributes: - label: Expected Versus Actual Behavior - description: Tell us what you expected to happen and what actually happened. - - - type: textarea - id: debug_info - attributes: - label: KeePassXC Debug Information - placeholder: "Paste the output of: Help -> About -> Debug Info" - render: Text - - - type: dropdown - id: os - attributes: - label: Operating System - description: Select your operating system. - options: - - Windows - - Linux - - macOS - - Other (BSD, Haiku, etc) - - - type: dropdown - id: desktop_env - attributes: - label: Linux Desktop Environment - description: If on Linux, please select your desktop environment. - options: - - Gnome - - KDE - - XFCE - - Mate / Cinnamon - - Sway - - i3 - - Other - - - type: dropdown - id: window_system - attributes: - label: Linux Windowing System - description: If on Linux, please select your windowing system. - options: - - X11 - - Wayland diff --git a/.github/ISSUE_TEMPLATE/feature-request.md b/.github/ISSUE_TEMPLATE/feature-request.md new file mode 100644 index 000000000..d213b4fa3 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature-request.md @@ -0,0 +1,19 @@ +--- +name: Feature Request +about: tell us about a new feature you want +title: +labels: new feature +assignees: '' + +--- +## Summary +[TIP]: # ( DO NOT include screenshots of your actual database! ) +[NOTE]: # ( Provide a brief overview of what the new feature is all about ) + + +## Examples +[NOTE]: # ( Show us a picture or mock-up of your proposal ) + + +## Context +[NOTE]: # ( Why does this feature matter to you? What unique circumstances do you have? ) diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml deleted file mode 100644 index 90f543440..000000000 --- a/.github/ISSUE_TEMPLATE/feature_request.yml +++ /dev/null @@ -1,34 +0,0 @@ -name: Feature Request -description: Tell us about a new feature you want. -type: Feature - -body: - - type: checkboxes - attributes: - label: Have you searched for an existing feature request? - description: Use the issue search box to see if one already exists for the feature you want. - options: - - label: Yes, I tried searching - required: true - - - type: textarea - id: summary - attributes: - label: Brief Summary - description: | - Provide an overview of the feature you are interested in adding. - Provide screenshots if possible, but do NOT show sensitive data (use View -> Allow Screen Capture). - validations: - required: true - - - type: textarea - id: example - attributes: - label: Example - description: Provide an example of how this feature would be used. - - - type: textarea - id: context - attributes: - label: Context - description: Why does this feature matter to you? What unique circumstances do you have? diff --git a/.github/ISSUE_TEMPLATE/prerelease_bug_report.yml b/.github/ISSUE_TEMPLATE/prerelease_bug_report.yml deleted file mode 100644 index 10c5d855c..000000000 --- a/.github/ISSUE_TEMPLATE/prerelease_bug_report.yml +++ /dev/null @@ -1,85 +0,0 @@ -name: Pre-Release Bug Report -description: Report an issue with pre-release code (e.g. snapshot builds). -type: Bug -labels: PRE-RELEASE BUG -assignees: droidmonkey - -body: - - type: checkboxes - attributes: - label: Have you searched for an existing issue? - description: | - Use the issue search box to see if one already exists for the bug you encountered. - Also take a moment to review our pinned issues. - options: - - label: Yes, I tried searching and reviewed the pinned issues - required: true - - - type: textarea - id: summary - attributes: - label: Brief Summary - description: | - Provide an overview of the problem, include any information that may help us triage this issue. - Provide screenshots if possible, but do NOT show sensitive data (use View -> Allow Screen Capture). - validations: - required: true - - - type: textarea - id: steps - attributes: - label: Steps to Reproduce - description: Provide a simple set of steps to reproduce this bug. - placeholder: | - 1. - 2. - 3. - validations: - required: true - - - type: textarea - id: expected_vs_actual - attributes: - label: Expected Versus Actual Behavior - description: Tell us what you expected to happen and what actually happened. - - - type: textarea - id: debug_info - attributes: - label: KeePassXC Debug Information - placeholder: "Paste the output of: Help -> About -> Debug Info" - render: Text - - - type: dropdown - id: os - attributes: - label: Operating System - description: Select your operating system. - options: - - Windows - - Linux - - macOS - - Other (BSD, Haiku, etc) - - - type: dropdown - id: desktop_env - attributes: - label: Linux Desktop Environment - description: If on Linux, please select your desktop environment. - options: - - Gnome - - KDE - - XFCE - - Mate / Cinnamon - - Sway - - i3 - - Other - - - type: dropdown - id: window_system - attributes: - label: Linux Windowing System - description: If on Linux, please select your windowing system. - options: - - X11 - - Wayland diff --git a/.github/ISSUE_TEMPLATE/release-preview-bug-report.md b/.github/ISSUE_TEMPLATE/release-preview-bug-report.md new file mode 100644 index 000000000..b2fbf65ff --- /dev/null +++ b/.github/ISSUE_TEMPLATE/release-preview-bug-report.md @@ -0,0 +1,39 @@ +--- +name: Release Preview Bug report +about: report a bug with a release preview (e.g., 2.6.0-beta1) +title: +labels: PRE-RELEASE BUG +assignees: droidmonkey + +--- +## Overview +[TIP]: # ( DO NOT include screenshots of your actual database! ) +[NOTE]: # ( Give a BRIEF summary about your problem ) + + +## Steps to Reproduce +[NOTE]: # ( Provide a simple set of steps to reproduce this bug. ) +1. +2. +3. + +## Expected Behavior +[NOTE]: # ( Tell us what you expected to happen ) + + +## Actual Behavior +[NOTE]: # ( Tell us what actually happens ) + + +## Context +[NOTE]: # ( Give us any additional information you may have. ) + + +[NOTE]: # ( Paste debug info from Help → About here ) +KeePassXC - VERSION +Revision: REVISION + +[NOTE]: # ( Pick choices based on your environment ) +Operating System: Windows/Linux/macOS +Desktop Env: Gnome/KDE/XFCE/Mate/Cinnamon +Windowing System: X11/Wayland \ No newline at end of file diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 5e039d00b..e75bbcd60 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,16 +1,15 @@ -[NOTE]: # ( Describe your changes in detail. Explain large or complex code modifications. ) -[NOTE]: # ( If it fixes an open issue, please add "Fixes #XXX". ) -[NOTE]: # ( If you used Generative AI to write the majority of your code, you must state this. ) +[NOTE]: # ( Describe your changes in detail, why is this change required? ) +[NOTE]: # ( Explain large or complex code modifications. ) +[NOTE]: # ( If it fixes an open issue, please add "Fixes #XXX" ) ## Screenshots -[NOTE]: # ( Do not include screenshots of your actual database! ) -[TIP]: # ( Use View -> Allow Screen Capture ) +[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 include helpful comments. ) +[TIP]: # ( We expect new code to be covered by unit tests and documented with doc blocks! ) ## Type of change diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md deleted file mode 100644 index 0eb7156bf..000000000 --- a/.github/copilot-instructions.md +++ /dev/null @@ -1,38 +0,0 @@ -This is a C++ based repository that uses Qt5 as a primary support and GUI library. This repository is for a password manager application that stores passwords -and other highly sensitive information. The data format that passwords are stored is called KDBX which is a mixed binary and XML format that is fully encrypted -at rest. This format is unpacked into a series of data structures: Database, Groups, and Entries. Please follow these guidelines when contributing: - -## Code Standards - -### Required Before Each Commit -- Run `cmake --build . --target format` before committing any changes to ensure proper code formatting -- This will run clang-format to ensure all code conforms to the style guide -- From the checkout directory, also run `./release-tool i18n lupdate` to update translation files - -### Development Flow -- Setup Build Folder: `mkdir build; cd build` -- Configure: `cmake -G Ninja -DWITH_XC_ALL=ON -DWITH_GUI_TESTS=ON ..` -- Build: `cmake --build . -- -j $(nproc)` -- Test: `ctest` - -## Repository Structure -- `docs/topics`: Documentation written in asciidoctor syntax -- `src/`: Main source code files are under this subdirectory -- `src/autotype`: Code that emulates a virtual keyboard to type into interfaces -- `src/browser`: Interface with the KeePassXC Browser Extension using a JSON-based protocol -- `src/cli`: Command Line Interface code -- `src/core`: Contains files that define the data model and other shared code structures -- `src/format`: Code for import/export and reading/writing of KDBX databases -- `src/fdosecrets`: freedesktop.org Secret Service interface code -- `src/quickunlock`: Quick unlock interfaces for various platforms -- `src/sshagent`: SSH Agent interface code to load private keys from the database into ssh-agent -- `tests/`: Test source code files -- `tests/gui`: GUI test source code files - -## Key Guidelines -1. Follow C++20 and Qt5 best practices and idiomatic patterns -2. Maintain existing code structure and organization -3. Prefer not to edit cryptographic handling code or other sensitive parts of the code base -4. Write unit tests for new functionality using QTest scaffolding -5. Suggest changes to the `docs/topics` folder when appropriate -6. Unless the change is simple, don't actually make edits to .ui files, just suggest the changes needed diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml deleted file mode 100644 index 80af12490..000000000 --- a/.github/workflows/codeql.yml +++ /dev/null @@ -1,70 +0,0 @@ -name: "CodeQL" - -on: - push: - branches: [ 'develop', 'release/2.7.x' ] - pull_request: - # The branches below must be a subset of the branches above - branches: [ 'develop' ] - schedule: - - cron: '5 16 * * 3' - -jobs: - analyze: - name: Analyze - runs-on: ${{ (matrix.language == 'swift' && 'macos-latest') || 'ubuntu-latest' }} - timeout-minutes: ${{ (matrix.language == 'swift' && 120) || 360 }} - permissions: - actions: read - contents: read - security-events: write - - strategy: - fail-fast: false - matrix: - language: [ 'cpp' ] - # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ] - # Use only 'java' to analyze code written in Java, Kotlin or both - # Use only 'javascript' to analyze code written in JavaScript, TypeScript or both - # Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support - - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - - if: matrix.language == 'cpp' - name: Install dependencies - run: | - sudo apt update - sudo apt install build-essential cmake g++ - sudo apt install qtbase5-dev qtbase5-private-dev qttools5-dev qttools5-dev-tools libqt5svg5-dev libargon2-dev libkeyutils-dev libminizip-dev libbotan-2-dev libqrencode-dev zlib1g-dev asciidoctor libreadline-dev libpcsclite-dev libusb-1.0-0-dev libxi-dev libxtst-dev libqt5x11extras5-dev - - # Initializes the CodeQL tools for scanning. - - name: Initialize CodeQL - uses: github/codeql-action/init@v3 - with: - languages: ${{ matrix.language }} - # If you wish to specify custom queries, you can do so here or in a config file. - # By default, queries listed here will override any specified in a config file. - # Prefix the list here with "+" to use these queries and those in the config file. - - # For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs - queries: security-and-quality - - - if: matrix.language == 'cpp' - name: Build C++ - run: | - mkdir build && cd build - cmake -DWITH_XC_ALL=ON -DWITH_TESTS=OFF .. - make -j $(nproc) - - # Autobuild attempts to build any compiled languages (C/C++, C#, Go, Java, or Swift). - # If this step fails, then you should remove it and run the build manually (see below) - - if: matrix.language != 'cpp' - name: Autobuild - uses: github/codeql-action/autobuild@v3 - - - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v3 - with: - category: "/language:${{matrix.language}}" diff --git a/.github/workflows/copilot-setup-steps.yml b/.github/workflows/copilot-setup-steps.yml deleted file mode 100644 index cfd6b46e7..000000000 --- a/.github/workflows/copilot-setup-steps.yml +++ /dev/null @@ -1,29 +0,0 @@ -name: "Copilot Setup Steps" - -# Setup the environment for Copilot agents to run in -on: - workflow_dispatch: - push: - paths: - - .github/workflows/copilot-setup-steps.yml - pull_request: - paths: - - .github/workflows/copilot-setup-steps.yml - -jobs: - copilot-setup-steps: - runs-on: ubuntu-latest - - # Needed to clone the repository - permissions: - contents: read - - # Install dependencies - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Install dependencies - run: | - sudo apt update - sudo apt install --no-install-recommends build-essential cmake g++ ninja-build qtbase5-dev qtbase5-private-dev qttools5-dev qttools5-dev-tools libqt5svg5-dev libargon2-dev libkeyutils-dev libminizip-dev libbotan-2-dev libqrencode-dev zlib1g-dev asciidoctor libreadline-dev libpcsclite-dev libusb-1.0-0-dev libxi-dev libxtst-dev libqt5x11extras5-dev diff --git a/.gitignore b/.gitignore index d3ee55d43..9ab62e190 100644 --- a/.gitignore +++ b/.gitignore @@ -24,10 +24,5 @@ desktop.ini # MSVC Files CMakeSettings.json CMakePresets.json -CMakeUserPresets.json .vs/ -out/ - -# vcpkg -vcpkg_installed*/ - +out/ \ No newline at end of file diff --git a/.tx/config b/.tx/config index 82aefce42..83910523a 100644 --- a/.tx/config +++ b/.tx/config @@ -1,19 +1,17 @@ [main] -host = https://www.transifex.com +host = https://app.transifex.com [o:keepassxc:p:keepassxc:r:share-translations-keepassxc-en-ts--develop] -file_filter = share/translations/keepassxc_.ts -source_file = share/translations/keepassxc_en.ts -source_lang = en -type = QT -replace_edited_strings = false -keep_translations = false +file_filter = share/translations/keepassxc_.ts +source_file = share/translations/keepassxc_en.ts +type = QT +minimum_perc = 0 +resource_name = keepassxc_en.ts (develop) [o:keepassxc:p:keepassxc:r:share-translations-keepassxc-en-ts--master] -file_filter = share/translations/keepassxc_.ts -source_file = share/translations/keepassxc_en.ts -source_lang = en -type = QT -replace_edited_strings = false -keep_translations = false +file_filter = share/translations/keepassxc_.ts +source_file = share/translations/keepassxc_en.ts +type = QT +minimum_perc = 0 +resource_name = keepassxc_en.ts (2.7.x stable) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4a7bb20d0..7798819f5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,192 +1,5 @@ # Changelog -## 2.8.0 (Pending) -* Placeholder for future release notes - -## 2.7.10 (2025-03-02) - -### Changes -* Allow adjusting application font size [#11567] -* Add Proton Pass importer [#11197] -* Support KeePass2 TOTP settings [#11229] -* Add New/Preview Entry Attachments dialog and functionality [#11637, #11699, #11650] -* Add database name, color, and icon options for unlock view [#10819, #11725] -* Show entry background color as column [#6798] -* Use icons for password strength [#9844] -* Add "Group Full Path" column in entry view [#10278] -* Passphrase "MIXED case" Type [#11255] -* Allow deleting extension plugin data from Browser Statistics [#11218] -* Add --minimized option to keepassxc [#11693] -* Implement T-CONV and T-REPLACE-RX entry placeholders [#11453] -* Option to disable opening browser when URL field double-clicked [#11332] -* Overhaul action states and add icons to toolbar [#11047] -* Show character count in password generator dialog [#10940] -* Add ability to expire entries from context menu [#8731] -* Add copy field shortcuts to Auto-Type select dialog [#11518] -* Passkeys: Add support for selecting group on creation [#11260] -* Browser: Refactor Access Control Dialog [#9607] -* Browser: Add support for URL wildcards and exact URL [#9835, #11752] -* Browser: Allow groups to restrict by browser integration key [#9852] -* CLI: Add `-d` dry-run shortcut to merge command [#11192] -* CLI: HTML export [#11590] -* macOS: Add option to disable database lock when switching user [#9707] -* SSH Agent: Implement feature to clear all identities [#10649] - -### Fixes -* Major enhancements to documentation [#11745, #10875] -* Various UI and style fixes [#11535, #11672, #11511, #11445, #11426, #11273, #11455, #11321, #11594, #11539, #11351, #11354, #10748, #11602, #11303, #11291, #10091, #9417] -* Various improvements to tags [#11676, #11652, #11625] -* Reset splitter sizes on database unlock [#11014] -* Remember sort order in Auto-type popup dialog [#9508] -* Fix database password clearing when modifying key file / hardware key [#11001] -* Fix issues with reloading and handling of externally modified db file [#10612] -* Support passkeys with Bitwarden import [#11401] -* Fix various quirks with CSV import [#11787] -* Show Auto-Type select dialog even if window title is empty [#11603] -* Refactor hardware key code to avoid deadlock [#11703, #10872] -* Show a clear error if hardware key is found slots are not configured [#11609] -* Fix signal/slot disconnect when opening import wizard [#11039] -* Fix setting window title as modified [#11542] -* Fix assert hit when viewing entry history [#11413] -* Fix multiple crashes on Linux [#11513] -* Fix backup file path time substitution [#10834] -* Prevent long-running threads from deadlocking the program with only 1 CPU [#11155] -* Hide the menubar when menus lose focus (if toggled off) [#11355, #11605] -* CLI: Restore the original codepage on windows [#11470] -* Passkeys: Various fixes [#10934, #10951] -* Browser: Fix cancel with database unlock dialog [#11435] -* Browser: Resolve references in Access Confirm dialog [#11055] -* SSH Agent: Add timeout to streams to prevent deadlock [#11290] -* macOS: Replace legacy code for screen recording permissions [#11428] -* macOS: Implement Secure Input Mode [#11623] -* macOS: Fix showing ambigious name in settings [#11373] -* macOS: Fix copy-to-clipboard shortcut in entry preview widget [#10966] -* Linux: Prevent multiple lock requests [#11306] -* Snap: Prevent need for snap helper script to configure browser extension [#10924] -* Windows: Detect outdated VC Redist with MSI installer [#11469] -* Windows: Additional exclusion fields for clipboard [#11521] - -## 2.7.9 (2024-06-19) - -### Changes -* Passkeys: Ability to easily remove a passkey from an entry [#10777] -* Snap: Use new desktop portal for native messaging integration [#10906] - -### Fixes -* Improve entry placeholder/reference feature [#10846] -* Improve CSV importing when title field isn't specified [#10843] -* Improve encrypted Bitwarden importing [#10800] -* Improve database settings UX [#10821] -* Improve handling of clipboard actions from entry preview [#10810] -* Improve group/entry view resize behavior and set sensible defaults [#10641] -* Passkeys: Fix incorrect username fill [#10874] -* Passkeys: Return additional data to the extension [#10857] -* Fix password clear timer inconsistency on unlock view [#10708] -* Fix portability check [#10760] -* Fix page overflow on HTML exports [#10735] -* Fix broken builds when using system provided zxcvbn [#10717] -* Fix copy password button when text is selected [#10853] -* Fix tab ordering on application settings pages [#10907] -* SSH Agent: Fix broken decrypt button [#10638] -* Windows: Fix ALT Auto-Type modifier [#10795] -* Windows: Fix wrong DACL memory size allocation [#10712] -* macOS: Fix monospace font sizing [#10739] -* Flatpak: Fix configuration settings off-by-one error [#10688] -* BSD: Fix compiling with libusb implementation [#10736] - -## 2.7.8 (2024-05-05) - -### Changes -- Add hotkey for showing search help [#10591] -- Add hotkey for group switching (Ctrl+Shift+PgUp/PgDown) [#10625] -- Add per-database auto-save delay setting [#9100] -- Add setting to hide menubar [#10341] -- Improve Bitwarden 1PUX import and support organization collections [#10499] -- Show advanced settings checkbox only for settings that have them [#6513] -- Remove obsolete setting for requiring repeated password entry [#9722] -- Passkeys: Allow registering Passkeys to existing entries [#10408] -- Passkeys: Show warning about data being unencrypted before Passkey export [#10411] -- Passkeys: Support NFC and USB transports [#10402] -- Passkeys: Pass extension JSON data to browser [#10615] -- SSH Agent: Do not use entries from recycle bin [#10518] -- Linux: Change hotkey sequence used for {CLEARFIELD} Auto-Type [#10008] -- Windows: Improve DACL memory access protection [#10618] - -### Fixes -- Fix crash when deleting history items [#10451] -- Fix crash on screen lock or computer sleep [#10458] -- Fix search field not being focused after unlock [#10459] -- Fix loss of window focus when Auto-Type needs to unlock a database [#10555] -- Fix inconsistent TOTP visibility on unlock [#10009] -- Fix CSV import skipping over single-name groups [#10575] -- Fix key file folder being remembered even if disabled in settings [#10636] -- Fix issues with entry editing and database locking [#10667] -- Fix key file text when provided on command line [#10642] -- Fix issues with hardware key auto detection [#10663] -- Do not override monospace font size [#10282] -- Perform group sort only when group view is in focus [#10202] -- Do not show decimals for attachment sizes in Bytes [#10595] -- Prevent merging of global custom data when merging databases [#10452] -- Fix minor translation issues [#10635] -- Passkeys: Fix StrongBox incompatibility [#10420] -- Passkeys: Set RP ID to effective domain if unset instead of returning an error [#10384] -- Passkeys: Various UI fixes and improvements [#10427, #10608, #10609] -- AppImage: Fix URL opening [#10624] -- Flatpak: Fix application autostart [#10563] -- Linux/macOS: Fix button sizes on modal alert popups [#10500] -- Linux: Fix clipboard clear on Wayland [#10500] -- Windows: Preserve file-hidden attribute [#10343] - -## 2.7.7 (2024-03-09) - -### Changes -- Support USB Hotplug for Hardware Key interface [#10092] -- Support 1PUX and Bitwarden import [#9815] -- Browser: Add support for PassKeys [#8825, #9987, #10318] -- Build System: Move to vcpkg manifest mode [#10088] - -### Fixes -- Fix multiple TOTP issues [#9874] -- Fix focus loss on save when the editor is not visible anymore [#10075] -- Fix visual when removing entry from history [#9947] -- Fix first entry is not selected when a search is performed [#9868] -- Prevent scrollbars on entry drag/drop [#9747] -- Prevent duplicate characters in "Also choose from" field of password generator [#9803] -- Security: Prevent byte-by-byte and attachment inference side channel attacks [#10266] -- Browser: Fix raising Update Entry messagebox [#9853] -- Browser: Fix bugs when returning credentials [#9136] -- Browser: Fix crash on database open from browser [#9939] -- Browser: Fix support for referenced URL fields [#8788] -- MacOS: Fix crash when changing highlight/accent color [#10348] -- MacOS: Fix TouchID appearing even though lid is closed [#10092] -- Windows: Fix terminating KeePassXC processes with MSI installer [#9822] -- FdoSecrets: Fix database merge crash when enabled [#10136] - -## 2.7.6 (2023-08-15) - -### Changes -- Significant improvement to visual when drag/drop entries [#9698] -- Automatically prompt for Quick Unlock when showing unlock dialog [#9697] -- Improve colorful lock icon and fix file MIME icon on KDE [#9632] -- Ability to search by entry UUID [#9571] -- Add challenge-response support for NitroKey 3 [#9631] -- Auto-Type: Disable entry level Auto-Type when disabled at group/entry [#9672] -- Browser: Show warning when adding duplicate URL's to entry [#9588][#9635] -- Browser: Improve error message when proxy cannot be found [#9385] - -### Fixes -- Fix crash on exit on macOS [#9620] -- Fix crash on search if entry doesn't have a group [#9633] -- Fix several issues with Quick Unlock [#9697] -- Enable save button when not auto-saving non-data changes [#9634] -- Several UI/UX fixes [#9647] -- Move toolbar back to top of window when disabling movement [#9699] -- Browser: Fix closing password generator dialog with X button [#9636] -- Browser: Fix handling of expired credentials [#9595] -- Windows: Prevent white flicker when launching application [#9637] -- Linux: Fix warning message about allow screencapture [#9638] -- FdoSecrets: Fix access confirmation dialog showing even when disabled [#9690] - ## 2.7.5 (2023-05-14) ### Changes @@ -241,7 +54,7 @@ - Browser: Revert code causing connection problems [#8665] - Browser: Fix socket file symbolic link on Linux [#8656] - Flatpak: Fix launching browser proxy service [#8680] -- SSH Agent: Fix pageant support on Windows [#8619] +- SSH Agent: Fix paegent support on Windows [#8619] ## 2.7.3 (2022-10-23) @@ -1124,7 +937,7 @@ - Compare window title to entry URLs #556 - Implemented inline error messages #162 - Ignore group expansion and other minor changes when making database "dirty" #464 -- Updated license and copyright information on source files #632 +- Updated license and copyright information on souce files #632 - Added contributors list to about dialog #629 ## 2.1.4 (2017-04-09) diff --git a/CMakeLists.txt b/CMakeLists.txt index e7183f169..d7ef38ef1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -14,7 +14,7 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -cmake_minimum_required(VERSION 3.10.0) +cmake_minimum_required(VERSION 3.3.0) project(KeePassXC) set(APP_ID "org.keepassxc.${PROJECT_NAME}") @@ -53,7 +53,6 @@ set(WITH_XC_ALL OFF CACHE BOOL "Build in all available plugins") option(WITH_XC_AUTOTYPE "Include Auto-Type." ON) option(WITH_XC_NETWORKING "Include networking code (e.g. for downloading website icons)." OFF) option(WITH_XC_BROWSER "Include browser integration with keepassxc-browser." OFF) -option(WITH_XC_BROWSER_PASSKEYS "Passkeys support for browser integration." OFF) option(WITH_XC_YUBIKEY "Include YubiKey support." OFF) option(WITH_XC_SSHAGENT "Include SSH agent support." OFF) option(WITH_XC_KEESHARE "Sharing integration with KeeShare" OFF) @@ -99,7 +98,6 @@ if(WITH_XC_ALL) set(WITH_XC_AUTOTYPE ON) set(WITH_XC_NETWORKING ON) set(WITH_XC_BROWSER ON) - set(WITH_XC_BROWSER_PASSKEYS ON) set(WITH_XC_YUBIKEY ON) set(WITH_XC_SSHAGENT ON) set(WITH_XC_KEESHARE ON) @@ -120,8 +118,8 @@ if(UNIX AND NOT APPLE AND NOT WITH_XC_X11) endif() set(KEEPASSXC_VERSION_MAJOR "2") -set(KEEPASSXC_VERSION_MINOR "8") -set(KEEPASSXC_VERSION_PATCH "0") +set(KEEPASSXC_VERSION_MINOR "7") +set(KEEPASSXC_VERSION_PATCH "5") set(KEEPASSXC_VERSION "${KEEPASSXC_VERSION_MAJOR}.${KEEPASSXC_VERSION_MINOR}.${KEEPASSXC_VERSION_PATCH}") set(OVERRIDE_VERSION "" CACHE STRING "Override the KeePassXC Version for Snapshot builds") @@ -310,7 +308,7 @@ if(CMAKE_BUILD_TYPE_LOWER STREQUAL "debug") check_add_gcc_compiler_flag("-Wshadow-compatible-local") check_add_gcc_compiler_flag("-Wshadow-local") add_gcc_compiler_flags("-Werror") - # This is needed since compiling against Botan3 requires compiling against C++20 + # This is needed since compiling aginst Botan3 requires compiling against C++20 if(WITH_XC_BOTAN3) add_gcc_compiler_cxxflags("-Wno-error=deprecated-enum-enum-conversion -Wno-error=deprecated") endif() @@ -395,7 +393,7 @@ if (MSVC) if(MSVC_TOOLSET_VERSION LESS 141) message(FATAL_ERROR "Only Microsoft Visual Studio 17 and newer are supported!") endif() - add_compile_options(/permissive- /utf-8 /MP) + add_compile_options(/permissive- /utf-8) if(IS_DEBUG_BUILD) add_compile_options(/Zf) if(MSVC_TOOLSET_VERSION GREATER 141) @@ -467,7 +465,7 @@ if(WITH_COVERAGE) append_coverage_compiler_flags() set(COVERAGE_EXCLUDES - "'^(.+/)?thirdparty/.*'" + "'^(.+/)?(thirdparty|zxcvbn)/.*'" "'^(.+/)?main\\.cpp$$'" "'^(.+/)?cli/keepassxc-cli\\.cpp$$'" "'^(.+/)?proxy/keepassxc-proxy\\.cpp$$'") @@ -512,8 +510,8 @@ else() find_package(Qt5 COMPONENTS ${QT_COMPONENTS} REQUIRED) endif() -if(Qt5Core_VERSION VERSION_LESS "5.12.0") - message(FATAL_ERROR "Qt version 5.12.0 or higher is required") +if(Qt5Core_VERSION VERSION_LESS "5.2.0") + message(FATAL_ERROR "Qt version 5.2.0 or higher is required") endif() get_filename_component(Qt5_PREFIX ${Qt5_DIR}/../../.. REALPATH) @@ -561,18 +559,9 @@ if(ZLIB_VERSION_STRING VERSION_LESS "1.2.0") endif() include_directories(SYSTEM ${ZLIB_INCLUDE_DIR}) -# Find Minizip -find_package(Minizip REQUIRED) - if(WITH_XC_YUBIKEY) find_package(PCSC REQUIRED) include_directories(SYSTEM ${PCSC_INCLUDE_DIRS}) - - if(UNIX AND NOT APPLE) - find_library(LIBUSB_LIBRARIES NAMES usb-1.0 REQUIRED) - find_path(LIBUSB_INCLUDE_DIR NAMES libusb.h PATH_SUFFIXES "libusb-1.0" "libusb" REQUIRED) - include_directories(SYSTEM ${LIBUSB_INCLUDE_DIR}) - endif() endif() if(UNIX) @@ -607,12 +596,6 @@ endif() include_directories(SYSTEM ${ZLIB_INCLUDE_DIR}) -find_library(ZXCVBN_LIBRARIES zxcvbn) -if(NOT ZXCVBN_LIBRARIES) - add_subdirectory(src/thirdparty/zxcvbn) - set(ZXCVBN_LIBRARIES zxcvbn) -endif(NOT ZXCVBN_LIBRARIES) - add_subdirectory(src) add_subdirectory(share) if(WITH_TESTS) diff --git a/COPYING b/COPYING index a00aaf28c..04d4376f0 100644 --- a/COPYING +++ b/COPYING @@ -1,5 +1,5 @@ KeePassXC - http://www.keepassxc.org/ -Copyright (C) 2016-2023 KeePassXC Team +Copyright (C) 2016-2020 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 @@ -137,27 +137,22 @@ Files: share/icons/badges/2_Expired.svg share/icons/database/C46_Help.svg share/icons/database/C53_Apply.svg share/icons/database/C61_Services.svg - share/icons/application/scalable/actions/proton.svg Copyright: 2022 KeePassXC Team License: MIT Files: share/icons/application/scalable/actions/application-exit.svg - share/icons/application/scalable/actions/arrow-collapse-down.svg share/icons/application/scalable/actions/attributes-copy.svg share/icons/application/scalable/actions/auto-type.svg - share/icons/application/scalable/actions/bitwarden.svg share/icons/application/scalable/actions/bugreport.svg share/icons/application/scalable/actions/chevron-double-down.svg share/icons/application/scalable/actions/chevron-double-right.svg share/icons/application/scalable/actions/clipboard-text.svg share/icons/application/scalable/actions/configure.svg - share/icons/application/scalable/actions/csv.svg share/icons/application/scalable/actions/database-change-key.svg share/icons/application/scalable/actions/database-lock.svg share/icons/application/scalable/actions/database-lock-all.svg share/icons/application/scalable/actions/database-merge.svg share/icons/application/scalable/actions/database-search.svg - share/icons/application/scalable/actions/database-settings.svg share/icons/application/scalable/actions/dialog-close.svg share/icons/application/scalable/actions/dialog-ok.svg share/icons/application/scalable/actions/document-close.svg @@ -178,7 +173,6 @@ Files: share/icons/application/scalable/actions/application-exit.svg share/icons/application/scalable/actions/entry-delete.svg share/icons/application/scalable/actions/entry-restore.svg share/icons/application/scalable/actions/entry-edit.svg - share/icons/application/scalable/actions/entry-expire.svg share/icons/application/scalable/actions/entry-new.svg share/icons/application/scalable/actions/favicon-download.svg share/icons/application/scalable/actions/fingerprint.svg @@ -198,16 +192,13 @@ Files: share/icons/application/scalable/actions/application-exit.svg share/icons/application/scalable/actions/move-up.svg share/icons/application/scalable/actions/object-locked.svg share/icons/application/scalable/actions/object-unlocked.svg - share/icons/application/scalable/actions/onepassword.svg share/icons/application/scalable/actions/paperclip.svg share/icons/application/scalable/actions/password-copy.svg - share/icons/application/scalable/actions/passkey.svg share/icons/application/scalable/actions/password-generator.svg share/icons/application/scalable/actions/password-show-off.svg share/icons/application/scalable/actions/password-show-on.svg share/icons/application/scalable/actions/qrcode.svg share/icons/application/scalable/actions/refresh.svg - share/icons/application/scalable/actions/remote-sync.svg share/icons/application/scalable/actions/reports.svg share/icons/application/scalable/actions/reports-exclude.svg share/icons/application/scalable/actions/sort-alphabetical-ascending.svg @@ -223,14 +214,12 @@ Files: share/icons/application/scalable/actions/application-exit.svg share/icons/application/scalable/actions/totp-copy.svg share/icons/application/scalable/actions/totp-copy-password.svg share/icons/application/scalable/actions/totp-edit.svg - share/icons/application/scalable/actions/totp-invalid.svg share/icons/application/scalable/actions/trash.svg share/icons/application/scalable/actions/url-copy.svg share/icons/application/scalable/actions/user-guide.svg share/icons/application/scalable/actions/username-copy.svg share/icons/application/scalable/actions/view-history.svg share/icons/application/scalable/actions/web.svg - share/icons/application/scalable/actions/yubikey-refresh.svg share/icons/application/scalable/apps/internet-web-browser.svg share/icons/application/scalable/apps/keepassxc.svg share/icons/application/scalable/apps/keepassxc-dark.svg @@ -245,12 +234,9 @@ Files: share/icons/application/scalable/actions/application-exit.svg share/icons/application/scalable/status/dialog-information.svg share/icons/application/scalable/status/dialog-warning.svg share/icons/application/scalable/status/security-high.svg - share/icons/application/scalable/actions/lock-open-alert.svg - share/icons/application/scalable/actions/lock-open.svg - share/icons/application/scalable/actions/lock.svg -Copyright: 2023 Pictogrammers -License: Apache-2.0 -Comment: Some icons are modified to fit KeePassXC design (https://pictogrammers.com/library/mdi/) +Copyright: 2019 Austin Andrews +License: SIL OPEN FONT LICENSE Version 1.1 +Comment: Taken from Material Design icon set (https://github.com/templarian/MaterialDesign/) Files: src/streams/qtiocompressor.* src/streams/QtIOCompressor @@ -258,7 +244,7 @@ Files: src/streams/qtiocompressor.* Copyright: 2009-2012, Nokia Corporation and/or its subsidiary(-ies) License: LGPL-2.1 or GPL-3 -Files: src/thirdparty/zxcvbn/zxcvbn.* +Files: src/zxcvbn/zxcvbn.* Copyright: 2015-2017, Tony Evans License: MIT diff --git a/INSTALL.md b/INSTALL.md index e83f064c0..17bcdae9f 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -6,21 +6,34 @@ For more information, see also the [_Building KeePassXC_](https://github.com/kee The [QuickStart Guide](https://keepassxc.org/docs/KeePassXC_GettingStarted.html) gets you started using KeePassXC on your Windows, macOS, or Linux computer using pre-compiled binaries from the [downloads page](https://keepassxc.org/download). -Toolchain and Build Dependencies -================================ +Build Dependencies +================== -The following build tools must exist within your PATH: +The following tools must exist within your PATH: -* cmake (>= 3.10.0) -* make (>= 4.2) or ninja (>= 1.10) -* g++ (>= 4.9) or clang++ (>= 6.0) +* make +* cmake (>= 3.3.0) +* g++ (>= 4.7) or clang++ (>= 6.0) * asciidoctor (>= 2.0) -* Besides a working C++ toolchain, KeePassXC also has a number of direct build and runtime dependencies. For detailed information about how to install them, please refer to the GitHub wiki: +The following libraries are required: -* [Set up Build Environment on Linux](https://github.com/keepassxreboot/keepassxc/wiki/Set-up-Build-Environment-on-Linux) -* [Set up Build Environment on Windows](https://github.com/keepassxreboot/keepassxc/wiki/Set-up-Build-Environment-on-Windows) -* [Set up Build Environment on macOS](https://github.com/keepassxreboot/keepassxc/wiki/Set-up-Build-Environment-on-macOS) +* Qt 5 (>= 5.9.5): qtbase5, qtbase5-private, libqt5svg5, qttools5, qt5-image-formats-plugins +* botan (>= 2.12) +* libargon2 +* zlib +* minizip +* readline (for completion in cli) +* qtx11extras, libxi, and libxtst (for auto-type on X11) +* qrencode +* libusb-1.0, pcsc-lite (for Yubikey support on Linux) + +Prepare the Building Environment +================================ + +* [Building Environment on Linux](https://github.com/keepassxreboot/keepassxc/wiki/Set-up-Build-Environment-on-Linux) +* [Building Environment on Windows](https://github.com/keepassxreboot/keepassxc/wiki/Set-up-Build-Environment-on-Windows) +* [Building Environment on MacOS](https://github.com/keepassxreboot/keepassxc/wiki/Set-up-Build-Environment-on-macOS) Build Steps =========== @@ -50,7 +63,7 @@ To compile from source, open a **Terminal (Linux/MacOS)**, the **MSVC Tools Comm git checkout latest ``` -2. Navigate to the directory where you have downloaded KeePassXC and run: +2. Navigate to the directory where you have downloaded KeePassXC and type these commands: ``` mkdir build @@ -58,37 +71,40 @@ To compile from source, open a **Terminal (Linux/MacOS)**, the **MSVC Tools Comm cmake -DWITH_XC_ALL=ON .. make ``` - -If you have `vcpkg` installed, add `-DCMAKE_TOOLCHAIN_FILE=${VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake` to the `cmake` command to automatically download and install all required build and runtime dependencies locally to your build directory before compiling KeePassXC. Using `vcpkg` is the preferred way to install dependencies on macOS and required on Windows if using the MSVC toolchain. -For more detailed build instructions for each platform, please refer to the [GitHub wiki](https://github.com/keepassxreboot/keepassxc/wiki/Building-KeePassXC). - -Note: These steps place the compiled KeePassXC binary inside the `./build/src/` directory (`src/KeePassXC.app/Contents/MacOS` on macOS). +Note: These steps place the compiled KeePassXC binary inside the `./build/src/` directory. ## MacOS Build Notes -If you installed Qt@5 via Homebrew and CMake fails to find your Qt installation, you can specify it manually by adding the following parameter: +If you installed Qt5 via Homebrew, you should be able to compile KeePassXC without any changes. If CMake fails to find your Qt installation, you can specify it manually by adding the following parameter: -`-DCMAKE_PREFIX_PATH=$(brew --prefix qt@5)/lib/cmake` +`-DCMAKE_PREFIX_PATH=$(brew --prefix qt5)/lib/cmake` + +(or whatever your Qt installation path is) When building with ASAN support on macOS, you need to use `export ASAN_OPTIONS=detect_leaks=0` before running the tests (LSAN is no supported on macOS). ## Windows Build Notes +For detailed build steps see the [Windows Build Instructions](https://github.com/keepassxreboot/keepassxc/wiki/Building-KeePassXC#windows). + +If you are using MSVC, you may have to specify your Vcpkg toolchain by adding the following CMake parameter: `-DCMAKE_TOOLCHAIN_FILE=C:\vcpkg\scripts\buildsystems\vcpkg.cmake` + If you are using MSYS2, you have to add ```-G "MSYS Makefiles"``` at the beginning of the cmake command. CMake Configuration Options ========================== -## Recommended CMake Build Parameters +## Common Parameters ``` +-DCMAKE_INSTALL_PREFIX=$(brew --prefix) -DCMAKE_VERBOSE_MAKEFILE=ON -DCMAKE_BUILD_TYPE= -DWITH_GUI_TESTS=ON ``` -## Additional CMake Parameters +## KeePassXC Parameters KeePassXC comes with a variety of build options that can turn on/off features. Most notably, we allow you to build the application with all TCP/IP networking code disabled. Please note that we still require and link against Qt5's network library in order to use local named pipes on all operating systems. Each of these build options are supplied at the time of calling cmake: @@ -96,7 +112,6 @@ KeePassXC comes with a variety of build options that can turn on/off features. M -DWITH_XC_AUTOTYPE=[ON|OFF] Enable/Disable Auto-Type (default: ON) -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_BROWSER_PASSKEYS=[ON|OFF] Enable/Disable Passkeys support for browser integration (default: OFF) -DWITH_XC_NETWORKING=[ON|OFF] Enable/Disable Networking support (e.g., favicon downloading) (default: OFF) -DWITH_XC_SSHAGENT=[ON|OFF] Enable/Disable SSHAgent support (default: OFF) -DWITH_XC_FDOSECRETS=[ON|OFF] (Linux Only) Enable/Disable Freedesktop.org Secrets Service support (default:OFF) diff --git a/README.md b/README.md index 9648e6dd0..0142a698b 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,4 @@ -# KeePassXC -[![OpenSSF Best Practices](https://bestpractices.coreinfrastructure.org/projects/6326/badge)](https://bestpractices.coreinfrastructure.org/projects/6326) +# 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) [![GitHub release](https://img.shields.io/github/release/keepassxreboot/keepassxc)](https://github.com/keepassxreboot/keepassxc/releases/) @@ -22,13 +21,12 @@ KeePassXC has numerous features for novice and power users alike. Our goal is to * Password generator * Auto-Type passwords into applications * Browser integration with Google Chrome, Mozilla Firefox, Microsoft Edge, Chromium, Vivaldi, Brave, and Tor-Browser -* Support for passkeys using the browser integration * Entry icon download -* Import databases from CSV, 1Password, Bitwarden, Proton Pass, and KeePass1 formats +* Import databases from CSV, 1Password, and KeePass1 formats ### Advanced * Database reports (password health, HIBP, and statistics) -* Database export to CSV, XML, and HTML formats +* Database export to CSV and HTML formats * TOTP storage and generation * Field references between entries * File attachments and custom attributes @@ -56,10 +54,6 @@ You may directly contribute your own code by submitting a pull request. Please r Contributors are required to adhere to the project's [Code of Conduct](CODE-OF-CONDUCT.md). -## Generative AI - -Generative AI is fast becoming a first-party feature in most development environments, including GitHub itself. If the majority of a code submission is made using Generative AI (e.g., agent-based or vibe coding) then **we will document that in the pull request.** All code submissions go through a rigourous review process regardless of the development workflow or submitter. - ## License KeePassXC code is licensed under GPL-2 or GPL-3. Additional licensing for third-party files is detailed in [COPYING](./COPYING). diff --git a/SECURITY.md b/SECURITY.md deleted file mode 100644 index 8f07bece0..000000000 --- a/SECURITY.md +++ /dev/null @@ -1,46 +0,0 @@ -### Reporting Security Issues - -The KeePassXC team takes security vulnerabilities very seriously and appreciates your responsible disclosure efforts. We will make every effort to acknowledge your contributions and handle them promptly. - -To report a security issue, please use one of the following methods: - -- **GitHub Security Advisory:** Use the ["Report a Vulnerability"](https://github.com/keepassxreboot/keepassxc/security/advisories/new) tab on our GitHub repository. -- **Private Matrix Message:** Contact any of the following KeePassXC team members privately (also encrypted): - - [@droidmonkey_kpxc](https://matrix.to/#/@droidmonkey_kpxc:matrix.org) - - [@varjolintu](https://matrix.to/#/@varjolintu:matrix.org) - - [@phoerious](https://matrix.to/#/@phoerious:matrix.org) -- **Send an Email:** Send your report to team@keepassxc.org. We recommend encrypting the email if possible. - -Please **DO NOT** use public channels (e.g., GitHub issues, Matrix chat channels) for initial reporting of bona fide security vulnerabilities. - -Once you report a security issue, our team will respond with the next steps. After our initial reply, we will keep you informed of the progress towards a fix and full announcement. We may ask for additional information or guidance during this process. If we disagree that your report constitutes a genuine security vulnerability, we will inform you and close the report. Your report may be turned into an issue for further tracking. - -If you discover vulnerabilities in third-party modules used by KeePassXC, please report them to the maintainers of the respective modules. If the vulnerability impacts KeePassXC directly, we encourage you to notify us using the above methods. We will validate if the vulnerability is exploitable from KeePassXC code; please note that not all vulnerabilities are actually exploitable and do not constitute an immediate concern for the KeePassXC application. - -### Example Security Vulnerabilities - -When reporting, please ensure the issue falls under what can be considered a genuine security vulnerability for KeePassXC. Some examples include: - -- Unauthorized access to sensitive user data (e.g., passwords). -- Remote code execution or escalation of privileges. -- Bypassing authentication or encryption mechanisms. -- Broken or improperly implemented encryption methods. - -### Counter Examples - -The following issues are **not** considered security vulnerabilities: - -- Bugs caused by locally modifying the application (e.g., injecting DLLs, altering code). -- Crashes or misbehavior resulting from normal use (report this as a normal issue). -- Vulnerabilities found in third-party modules (should be reported to the module’s maintainers). - -### CVE Reporting Policy - -Please **DO NOT** submit a report to a Common Vulnerabilities and Exposures (CVE) Numbering Authority (CNA) before confirming the security vulnerability with the KeePassXC team. If we do not respond to your report within 30 days, this restriction no longer applies. - - -### Other Communication - -For other inquiries (e.g., developer questions, user questions), please use the public channels on Matrix: -- **User's Channel:** [#keepassxc:mozilla.org](https://matrix.to/#/#keepassxc:mozilla.org) -- **Developer's Channel:** [#keepassxc-dev:mozilla.org](https://matrix.to/#/#keepassxc-dev:mozilla.org) diff --git a/cmake/CLangFormat.cmake b/cmake/CLangFormat.cmake index 9ddc4edb2..b2df97d4d 100644 --- a/cmake/CLangFormat.cmake +++ b/cmake/CLangFormat.cmake @@ -16,8 +16,9 @@ set(EXCLUDED_DIRS # third-party directories src/thirdparty + src/zxcvbn # objective-c directories - src/quickunlock/touchid + src/touchid src/autotype/mac src/gui/osutils/macutils) diff --git a/cmake/FindBotan.cmake b/cmake/FindBotan.cmake index 94d9df98a..38fed2b07 100644 --- a/cmake/FindBotan.cmake +++ b/cmake/FindBotan.cmake @@ -13,7 +13,7 @@ include(FindPackageHandleStandardArgs) set(BOTAN_VERSIONS botan-3 botan-2) set(BOTAN_NAMES botan-3 botan-2 botan) -set(BOTAN_NAMES_DEBUG botand-3 botand-2 botand botan botan-3) +set(BOTAN_NAMES_DEBUG botand-3 botand-2 botand botan) find_path( BOTAN_INCLUDE_DIR diff --git a/cmake/FindPCSC.cmake b/cmake/FindPCSC.cmake index d37b269df..ae3265fff 100644 --- a/cmake/FindPCSC.cmake +++ b/cmake/FindPCSC.cmake @@ -21,38 +21,16 @@ endif() if(NOT PCSC_FOUND) # Search for PC/SC headers on Mac and Windows - - # Additional search paths for Windows if not running in Visual Studio environment - if (WIN32) - # Resolve the ambiguity of using two names for one architechture - if(CMAKE_SYSTEM_PROCESSOR STREQUAL "AMD64" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "x64") - set(ARCH_DIR "x64") - else() - set(ARCH_DIR "${CMAKE_SYSTEM_PROCESSOR}") - endif() - - # Locate Windows SDK Paths - if (CMAKE_WINDOWS_KITS_10_DIR) - set(WINSDKROOTC_INCLUDE "${CMAKE_WINDOWS_KITS_10_DIR}/Include/${CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION}/um") - set(WINSDKROOTC_LIB "${CMAKE_WINDOWS_KITS_10_DIR}/LIB/${CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION}/um/${ARCH_DIR}") - else() - set(WINSDKROOTC_INCLUDE "$ENV{ProgramFiles\(x86\)}/Windows Kits/10/Include/${CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION}/um") - set(WINSDKROOTC_LIB "$ENV{ProgramFiles\(x86\)}/Windows Kits/10/LIB/${CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION}/um/${ARCH_DIR}") - endif() - endif() - find_path(PCSC_INCLUDE_DIRS winscard.h HINTS - ${CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES} - /usr/include/PCSC - ${WINSDKROOTC_INCLUDE} + ${CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES} + /usr/include/PCSC PATH_SUFFIXES PCSC) # MAC library is PCSC, Windows library is WinSCard find_library(PCSC_LIBRARIES NAMES pcsclite libpcsclite WinSCard PCSC HINTS - ${CMAKE_C_IMPLICIT_LINK_DIRECTORIES} - ${WINSDKROOTC_LIB}) + ${CMAKE_C_IMPLICIT_LINK_DIRECTORIES}) endif() include(FindPackageHandleStandardArgs) diff --git a/cmake/FindQREncode.cmake b/cmake/FindQREncode.cmake index fdd98278c..69850edf5 100644 --- a/cmake/FindQREncode.cmake +++ b/cmake/FindQREncode.cmake @@ -15,12 +15,12 @@ find_path(QRENCODE_INCLUDE_DIR NAMES qrencode.h) -if(WIN32 AND MSVC) - find_library(QRENCODE_LIBRARY_RELEASE qrencode) - find_library(QRENCODE_LIBRARY_DEBUG qrencoded) - set(QRENCODE_LIBRARY optimized ${QRENCODE_LIBRARY_RELEASE} debug ${QRENCODE_LIBRARY_DEBUG}) +if (VCPKG_INSTALLED_DIR) + find_library(QRENCODE_LIBRARY_RELEASE qrencode) + find_library(QRENCODE_LIBRARY_DEBUG qrencoded) + set(QRENCODE_LIBRARY optimized ${QRENCODE_LIBRARY_RELEASE} debug ${QRENCODE_LIBRARY_DEBUG}) else() - find_library(QRENCODE_LIBRARY qrencode) + find_library(QRENCODE_LIBRARY qrencode) endif() mark_as_advanced(QRENCODE_LIBRARY QRENCODE_INCLUDE_DIR) diff --git a/cmake/KPXCMacDeployHelpers.cmake b/cmake/KPXCMacDeployHelpers.cmake index f86067cbc..d22051d32 100644 --- a/cmake/KPXCMacDeployHelpers.cmake +++ b/cmake/KPXCMacDeployHelpers.cmake @@ -1,5 +1,5 @@ # Running macdeployqt on a POST_BUILD copied binaries is pointless when using CPack because -# the copied binaries will be overridden by the corresponding install(TARGETS) commands. +# the copied binaries will be overriden by the corresponding install(TARGETS) commands. # That's why we run macdeployqt using install(CODE) on the already installed binaries. # The precondition is that all install(TARGETS) calls have to be called before this function is # called. diff --git a/codecov.yaml b/codecov.yaml index 96ac133ef..d92656b6f 100644 --- a/codecov.yaml +++ b/codecov.yaml @@ -1,27 +1,8 @@ -codecov: - require_ci_to_pass: false coverage: range: 60..80 round: nearest precision: 2 - status: - project: - default: - target: auto - threshold: 0.5% - paths: - - "src" - patch: - default: - target: 50% - threshold: 0% - informational: true - paths: - - "src" fixes: - "*/src/::" -ignore: - - "src/gui/styles/**" - - "src/thirdparty/**" comment: require_changes: true diff --git a/utils/fuzz-testing/README.md b/docs/FuzzTest.md similarity index 91% rename from utils/fuzz-testing/README.md rename to docs/FuzzTest.md index 9f2c1fc27..cb73fbd27 100644 --- a/utils/fuzz-testing/README.md +++ b/docs/FuzzTest.md @@ -27,7 +27,7 @@ A special "instrumented build" is used that allows the fuzzer to look into the p $ CXX=afl-g++ AFL_HARDEN=1 cmake -DWITH_XC_ALL=ON .. $ make -In the source code, special behavior for fuzz testing can be implemented with `#ifdef __AFL_COMPILER`. For example, in fuzz builds, the KeePassXC CLI takes the database password from environment variable `KEEPASSXC_AFL_PASSWORD` to allow non-interactive operation. +In the source code, special behavior for fuzz testing can be implemented with `#ifdef __AFL_COMPILER`. For example, in fuzz builds, the KeePassXC CLI takes the database password from environment variable `KEYPASSXC_AFL_PASSWORD` to allow non-interactive operation. ## Prepare Fuzzer Input @@ -35,18 +35,18 @@ To get the fuzzer started, we provide empty password database files (the passwor $ cd buildafl $ mkdir -p findings/testcases - $ cp ../utils/fuzz-testing/empty*.kdbx findings/testcases + $ cp ../share/empty*.kdbx findings/testcases The fuzzer works by running KeePassXC with variations of this input, mutated in ways that make the program crash or hang. ## Run The Fuzzer $ cd buildafl - $ KEEPASSXC_AFL_PASSWORD=secret afl-fuzz -i findings/testcases -o findings -m 2000 -t 1000 src/cli/keepassxc-cli ls @@ + $ KEYPASSXC_AFL_PASSWORD=secret afl-fuzz -i findings/testcases -o findings -m 2000 -t 1000 src/cli/keepassxc-cli ls @@ This fuzz-tests the `ls` command of the KeePassXC CLI, which loads and decrypts a database file and then lists its contents. The parameters mean: -* `KEEPASSXC_AFL_PASSWORD=secret`: In fuzz test builds, the KeePassXC CLI takes the database password from this environment variable. +* `KEYPASSXC_AFL_PASSWORD=secret`: In fuzz test builds, the KeePassXC CLI takes the database password from this environment variable. * `-i findings/testcases`: The directory which contains the initial fuzzer input. * `-o findings`: The directory in which to store fuzzer results. * `-m 2000`: Fuzzer memory (in megabytes). Adjust as required if the fuzzer fails to start up. diff --git a/docs/GettingStarted.adoc b/docs/GettingStarted.adoc index 08d331ba0..5135e09e2 100644 --- a/docs/GettingStarted.adoc +++ b/docs/GettingStarted.adoc @@ -7,7 +7,6 @@ KeePassXC Team :imagesdir: images :stylesheet: styles/dark.css :toc: left -:experimental: ifdef::backend-pdf[] :title-page: :title-logo-image: {imagesdir}/kpxc_logo.png @@ -27,8 +26,8 @@ include::topics/DownloadInstall.adoc[tags=*;!advanced] include::topics/UserInterface.adoc[tags=*;!advanced] -include::topics/DatabaseOperations.adoc[tags=*;!advanced] - include::topics/PasswordGenerator.adoc[tags=*;!advanced] -include::topics/BrowserIntegration.adoc[tags=*;!advanced] +include::topics/DatabaseOperations.adoc[tags=*;!advanced] + +include::topics/BrowserPlugin.adoc[tags=*;!advanced] diff --git a/docs/UserGuide.adoc b/docs/UserGuide.adoc index ec13940ca..4000f5641 100644 --- a/docs/UserGuide.adoc +++ b/docs/UserGuide.adoc @@ -6,8 +6,6 @@ KeePassXC Team :imagesdir: images :stylesheet: styles/dark.css :toc: left -:sectanchors: -:experimental: ifdef::backend-pdf[] :title-page: :title-logo-image: {imagesdir}/kpxc_logo.png @@ -25,18 +23,16 @@ include::topics/UserInterface.adoc[tags=*] include::topics/DatabaseOperations.adoc[tags=*] -include::topics/PasswordGenerator.adoc[tags=*] - include::topics/ImportExport.adoc[tags=*] -include::topics/KeeShare.adoc[tags=*] +include::topics/PasswordGenerator.adoc[tags=*] -include::topics/BrowserIntegration.adoc[tags=*] - -include::topics/Passkeys.adoc[tags=*] +include::topics/BrowserPlugin.adoc[tags=*] include::topics/AutoType.adoc[tags=*] +include::topics/KeeShare.adoc[tags=*] + include::topics/SSHAgent.adoc[tags=*] include::topics/Reference.adoc[tags=*] diff --git a/docs/images/autoopen.png b/docs/images/autoopen.png index 3bc9ac85d..a825accc2 100644 Binary files a/docs/images/autoopen.png and b/docs/images/autoopen.png differ diff --git a/docs/images/autoopen_ifdevice.png b/docs/images/autoopen_ifdevice.png index 0bfb756f5..96af037fc 100644 Binary files a/docs/images/autoopen_ifdevice.png and b/docs/images/autoopen_ifdevice.png differ diff --git a/docs/images/autotype_entry_sequences.png b/docs/images/autotype_entry_sequences.png index 5c9581519..36b38348c 100644 Binary files a/docs/images/autotype_entry_sequences.png and b/docs/images/autotype_entry_sequences.png differ diff --git a/docs/images/autotype_entrylevel.png b/docs/images/autotype_entrylevel.png index ea4e5a2cb..0c9479912 100644 Binary files a/docs/images/autotype_entrylevel.png and b/docs/images/autotype_entrylevel.png differ diff --git a/docs/images/autotype_selection_dialog.png b/docs/images/autotype_selection_dialog.png index f7304513b..ce94f6cfa 100644 Binary files a/docs/images/autotype_selection_dialog.png and b/docs/images/autotype_selection_dialog.png differ diff --git a/docs/images/autotype_selection_dialog_search.png b/docs/images/autotype_selection_dialog_search.png index 078a9c36f..96d0fbeec 100644 Binary files a/docs/images/autotype_selection_dialog_search.png and b/docs/images/autotype_selection_dialog_search.png differ diff --git a/docs/images/autotype_selection_dialog_type_menu.png b/docs/images/autotype_selection_dialog_type_menu.png index bf99ce627..08fb0f9ee 100644 Binary files a/docs/images/autotype_selection_dialog_type_menu.png and b/docs/images/autotype_selection_dialog_type_menu.png differ diff --git a/docs/images/autotype_settings.png b/docs/images/autotype_settings.png index dd70000c8..624185a23 100644 Binary files a/docs/images/autotype_settings.png and b/docs/images/autotype_settings.png differ diff --git a/docs/images/browser_advanced_settings.png b/docs/images/browser_advanced_settings.png index 60c6a8762..9f4a8bd2f 100644 Binary files a/docs/images/browser_advanced_settings.png and b/docs/images/browser_advanced_settings.png differ diff --git a/docs/images/browser_confirm_access_dialog.png b/docs/images/browser_confirm_access_dialog.png index 5bdd84502..0e268e4ff 100644 Binary files a/docs/images/browser_confirm_access_dialog.png and b/docs/images/browser_confirm_access_dialog.png differ diff --git a/docs/images/browser_custom_browser_configuration.png b/docs/images/browser_custom_browser_configuration.png deleted file mode 100644 index 257c571f1..000000000 Binary files a/docs/images/browser_custom_browser_configuration.png and /dev/null differ diff --git a/docs/images/browser_database_settings.png b/docs/images/browser_database_settings.png index 2e4e28fd3..e8fb7d59e 100644 Binary files a/docs/images/browser_database_settings.png and b/docs/images/browser_database_settings.png differ diff --git a/docs/images/browser_entry_settings.png b/docs/images/browser_entry_settings.png index 3545f2bfa..0a2b4dd71 100644 Binary files a/docs/images/browser_entry_settings.png and b/docs/images/browser_entry_settings.png differ diff --git a/docs/images/browser_extension_association.png b/docs/images/browser_extension_association.png index 3c3ef0ae9..1a2368eb0 100644 Binary files a/docs/images/browser_extension_association.png and b/docs/images/browser_extension_association.png differ diff --git a/docs/images/browser_extension_connect.png b/docs/images/browser_extension_connect.png index 39caca0ad..74674745f 100644 Binary files a/docs/images/browser_extension_connect.png and b/docs/images/browser_extension_connect.png differ diff --git a/docs/images/browser_extension_icons.png b/docs/images/browser_extension_icons.png index f8430265e..bd2ba77ef 100644 Binary files a/docs/images/browser_extension_icons.png and b/docs/images/browser_extension_icons.png differ diff --git a/docs/images/browser_extension_reload.png b/docs/images/browser_extension_reload.png index 178c19ff0..e3272582f 100644 Binary files a/docs/images/browser_extension_reload.png and b/docs/images/browser_extension_reload.png differ diff --git a/docs/images/browser_fill_credentials.png b/docs/images/browser_fill_credentials.png index 6be94ee2b..5766f4a84 100644 Binary files a/docs/images/browser_fill_credentials.png and b/docs/images/browser_fill_credentials.png differ diff --git a/docs/images/browser_group_settings.png b/docs/images/browser_group_settings.png index 57794492d..c9dc5bd60 100644 Binary files a/docs/images/browser_group_settings.png and b/docs/images/browser_group_settings.png differ diff --git a/docs/images/browser_settings.png b/docs/images/browser_settings.png index a8dd708a0..aa14eb4ce 100644 Binary files a/docs/images/browser_settings.png and b/docs/images/browser_settings.png differ diff --git a/docs/images/browser_statistics.png b/docs/images/browser_statistics.png index 1417aeaa9..5321ff8da 100644 Binary files a/docs/images/browser_statistics.png and b/docs/images/browser_statistics.png differ diff --git a/docs/images/clone_entry.png b/docs/images/clone_entry.png index e01b38e0b..bd3145fb9 100644 Binary files a/docs/images/clone_entry.png and b/docs/images/clone_entry.png differ diff --git a/docs/images/clone_entry_dialog.png b/docs/images/clone_entry_dialog.png index c4df4c575..8fd9d49c5 100644 Binary files a/docs/images/clone_entry_dialog.png and b/docs/images/clone_entry_dialog.png differ diff --git a/docs/images/clone_entry_references.png b/docs/images/clone_entry_references.png index ce4321c0c..99e16d6a4 100644 Binary files a/docs/images/clone_entry_references.png and b/docs/images/clone_entry_references.png differ diff --git a/docs/images/compact_mode_comparison.png b/docs/images/compact_mode_comparison.png index ec37cfd9d..dbc4a31d1 100644 Binary files a/docs/images/compact_mode_comparison.png and b/docs/images/compact_mode_comparison.png differ diff --git a/docs/images/csv_import.png b/docs/images/csv_import.png index cddd2c4e0..7867d0043 100644 Binary files a/docs/images/csv_import.png and b/docs/images/csv_import.png differ diff --git a/docs/images/database_maintenance.png b/docs/images/database_maintenance.png index 4f994373d..4c3f2b4e0 100644 Binary files a/docs/images/database_maintenance.png and b/docs/images/database_maintenance.png differ diff --git a/docs/images/database_security.png b/docs/images/database_security.png index 3ecf5fc3a..f2d8b0586 100644 Binary files a/docs/images/database_security.png and b/docs/images/database_security.png differ diff --git a/docs/images/database_security_credentials.png b/docs/images/database_security_credentials.png index 2ae903f5c..bc947fbc6 100644 Binary files a/docs/images/database_security_credentials.png and b/docs/images/database_security_credentials.png differ diff --git a/docs/images/database_security_encryption.png b/docs/images/database_security_encryption.png index aa2721421..86f0f9996 100644 Binary files a/docs/images/database_security_encryption.png and b/docs/images/database_security_encryption.png differ diff --git a/docs/images/database_security_encryption_advanced.png b/docs/images/database_security_encryption_advanced.png index 617c61fd6..cb68078e2 100644 Binary files a/docs/images/database_security_encryption_advanced.png and b/docs/images/database_security_encryption_advanced.png differ diff --git a/docs/images/database_settings.png b/docs/images/database_settings.png index adf2b48e2..26a352590 100644 Binary files a/docs/images/database_settings.png and b/docs/images/database_settings.png differ diff --git a/docs/images/database_view.png b/docs/images/database_view.png index 77b655741..3d5dc4b3b 100644 Binary files a/docs/images/database_view.png and b/docs/images/database_view.png differ diff --git a/docs/images/edit_entry.png b/docs/images/edit_entry.png index ad5b14652..8672a22b5 100644 Binary files a/docs/images/edit_entry.png and b/docs/images/edit_entry.png differ diff --git a/docs/images/edit_entry_attachments.png b/docs/images/edit_entry_attachments.png index fea995b52..42bef27da 100644 Binary files a/docs/images/edit_entry_attachments.png and b/docs/images/edit_entry_attachments.png differ diff --git a/docs/images/edit_entry_attributes.png b/docs/images/edit_entry_attributes.png index 2a48669fb..047c4fd68 100644 Binary files a/docs/images/edit_entry_attributes.png and b/docs/images/edit_entry_attributes.png differ diff --git a/docs/images/edit_entry_colors.png b/docs/images/edit_entry_colors.png index c2eff3969..0c9482a82 100644 Binary files a/docs/images/edit_entry_colors.png and b/docs/images/edit_entry_colors.png differ diff --git a/docs/images/edit_entry_history.png b/docs/images/edit_entry_history.png index e4856642b..9a6c1cbb4 100644 Binary files a/docs/images/edit_entry_history.png and b/docs/images/edit_entry_history.png differ diff --git a/docs/images/edit_entry_icons.png b/docs/images/edit_entry_icons.png index 7b2f0fae5..1cc46cdec 100644 Binary files a/docs/images/edit_entry_icons.png and b/docs/images/edit_entry_icons.png differ diff --git a/docs/images/edit_entry_properties.png b/docs/images/edit_entry_properties.png index a50c21ff0..c781192ae 100644 Binary files a/docs/images/edit_entry_properties.png and b/docs/images/edit_entry_properties.png differ diff --git a/docs/images/export_database.png b/docs/images/export_database.png index fd423ccee..aa46f0865 100644 Binary files a/docs/images/export_database.png and b/docs/images/export_database.png differ diff --git a/docs/images/import_wizard.png b/docs/images/import_wizard.png deleted file mode 100644 index bba4cdd94..000000000 Binary files a/docs/images/import_wizard.png and /dev/null differ diff --git a/docs/images/install_wizard_1.png b/docs/images/install_wizard_1.png index a3b49c541..a466f834b 100644 Binary files a/docs/images/install_wizard_1.png and b/docs/images/install_wizard_1.png differ diff --git a/docs/images/install_wizard_2.png b/docs/images/install_wizard_2.png index f3ca19e16..b7c9c0712 100644 Binary files a/docs/images/install_wizard_2.png and b/docs/images/install_wizard_2.png differ diff --git a/docs/images/keeshare_application_settings.png b/docs/images/keeshare_application_settings.png index 5d22e85b6..c3bb7f26c 100644 Binary files a/docs/images/keeshare_application_settings.png and b/docs/images/keeshare_application_settings.png differ diff --git a/docs/images/keeshare_group_settings.png b/docs/images/keeshare_group_settings.png index 8f9fa2175..51febf41f 100644 Binary files a/docs/images/keeshare_group_settings.png and b/docs/images/keeshare_group_settings.png differ diff --git a/docs/images/keeshare_shared_group.png b/docs/images/keeshare_shared_group.png index ef6886aa0..4d23aca89 100644 Binary files a/docs/images/keeshare_shared_group.png and b/docs/images/keeshare_shared_group.png differ diff --git a/docs/images/kpxc_logo.png b/docs/images/kpxc_logo.png index 8803335f1..9af29eb30 100644 Binary files a/docs/images/kpxc_logo.png and b/docs/images/kpxc_logo.png differ diff --git a/docs/images/linux_store.png b/docs/images/linux_store.png index aab68a0b3..7c63ca7be 100644 Binary files a/docs/images/linux_store.png and b/docs/images/linux_store.png differ diff --git a/docs/images/macos_install.png b/docs/images/macos_install.png index 5bd105170..f72222786 100644 Binary files a/docs/images/macos_install.png and b/docs/images/macos_install.png differ diff --git a/docs/images/main_interface.png b/docs/images/main_interface.png index 32f43cad6..088a05aaa 100644 Binary files a/docs/images/main_interface.png and b/docs/images/main_interface.png differ diff --git a/docs/images/new_db_wizard_1.png b/docs/images/new_db_wizard_1.png index ea3cdc669..360033543 100644 Binary files a/docs/images/new_db_wizard_1.png and b/docs/images/new_db_wizard_1.png differ diff --git a/docs/images/new_db_wizard_2.png b/docs/images/new_db_wizard_2.png index 98331ad13..3c384e1d5 100644 Binary files a/docs/images/new_db_wizard_2.png and b/docs/images/new_db_wizard_2.png differ diff --git a/docs/images/new_db_wizard_3.png b/docs/images/new_db_wizard_3.png index fe8acd65c..e6ac46769 100644 Binary files a/docs/images/new_db_wizard_3.png and b/docs/images/new_db_wizard_3.png differ diff --git a/docs/images/open_database.png b/docs/images/open_database.png index 0c4391856..ca94c5cc8 100644 Binary files a/docs/images/open_database.png and b/docs/images/open_database.png differ diff --git a/docs/images/passkeys_all_passkeys.png b/docs/images/passkeys_all_passkeys.png deleted file mode 100644 index b61551e02..000000000 Binary files a/docs/images/passkeys_all_passkeys.png and /dev/null differ diff --git a/docs/images/passkeys_authentication_dialog.png b/docs/images/passkeys_authentication_dialog.png deleted file mode 100644 index ab5f1ee1d..000000000 Binary files a/docs/images/passkeys_authentication_dialog.png and /dev/null differ diff --git a/docs/images/passkeys_enable_from_extension.png b/docs/images/passkeys_enable_from_extension.png deleted file mode 100644 index b0744c8cf..000000000 Binary files a/docs/images/passkeys_enable_from_extension.png and /dev/null differ diff --git a/docs/images/passkeys_export_dialog.png b/docs/images/passkeys_export_dialog.png deleted file mode 100644 index 3e7fd36c3..000000000 Binary files a/docs/images/passkeys_export_dialog.png and /dev/null differ diff --git a/docs/images/passkeys_github_1.png b/docs/images/passkeys_github_1.png deleted file mode 100644 index 1bd0e731d..000000000 Binary files a/docs/images/passkeys_github_1.png and /dev/null differ diff --git a/docs/images/passkeys_github_2.png b/docs/images/passkeys_github_2.png deleted file mode 100644 index 553e1c4c1..000000000 Binary files a/docs/images/passkeys_github_2.png and /dev/null differ diff --git a/docs/images/passkeys_github_3.png b/docs/images/passkeys_github_3.png deleted file mode 100644 index dff08f198..000000000 Binary files a/docs/images/passkeys_github_3.png and /dev/null differ diff --git a/docs/images/passkeys_github_4.png b/docs/images/passkeys_github_4.png deleted file mode 100644 index 82c31eaad..000000000 Binary files a/docs/images/passkeys_github_4.png and /dev/null differ diff --git a/docs/images/passkeys_github_5.png b/docs/images/passkeys_github_5.png deleted file mode 100644 index 305ed7f5f..000000000 Binary files a/docs/images/passkeys_github_5.png and /dev/null differ diff --git a/docs/images/passkeys_import_dialog.png b/docs/images/passkeys_import_dialog.png deleted file mode 100644 index 58b07fc45..000000000 Binary files a/docs/images/passkeys_import_dialog.png and /dev/null differ diff --git a/docs/images/passkeys_import_passkey_to_entry.png b/docs/images/passkeys_import_passkey_to_entry.png deleted file mode 100644 index abc106edc..000000000 Binary files a/docs/images/passkeys_import_passkey_to_entry.png and /dev/null differ diff --git a/docs/images/passkeys_register_dialog.png b/docs/images/passkeys_register_dialog.png deleted file mode 100644 index 5750522b9..000000000 Binary files a/docs/images/passkeys_register_dialog.png and /dev/null differ diff --git a/docs/images/passkeys_update_dialog.png b/docs/images/passkeys_update_dialog.png deleted file mode 100644 index 5657a8b87..000000000 Binary files a/docs/images/passkeys_update_dialog.png and /dev/null differ diff --git a/docs/images/passphrase_generator.png b/docs/images/passphrase_generator.png index abe7f73a4..b8180b323 100644 Binary files a/docs/images/passphrase_generator.png and b/docs/images/passphrase_generator.png differ diff --git a/docs/images/password_generator.png b/docs/images/password_generator.png index 7299629e0..230d656af 100644 Binary files a/docs/images/password_generator.png and b/docs/images/password_generator.png differ diff --git a/docs/images/password_generator_advanced.png b/docs/images/password_generator_advanced.png index 0e534e02d..f32754e57 100644 Binary files a/docs/images/password_generator_advanced.png and b/docs/images/password_generator_advanced.png differ diff --git a/docs/images/quick_unlock.png b/docs/images/quick_unlock.png index bc47c6480..7c878a567 100644 Binary files a/docs/images/quick_unlock.png and b/docs/images/quick_unlock.png differ diff --git a/docs/images/quick_unlock_windows_hello.png b/docs/images/quick_unlock_windows_hello.png index 935ff305d..59ec70057 100644 Binary files a/docs/images/quick_unlock_windows_hello.png and b/docs/images/quick_unlock_windows_hello.png differ diff --git a/docs/images/save_database_backup.png b/docs/images/save_database_backup.png index b59122642..ad543b4c3 100644 Binary files a/docs/images/save_database_backup.png and b/docs/images/save_database_backup.png differ diff --git a/docs/images/save_options.png b/docs/images/save_options.png index 55c3e640f..cf16c92e8 100644 Binary files a/docs/images/save_options.png and b/docs/images/save_options.png differ diff --git a/docs/images/sshagent_application_settings.png b/docs/images/sshagent_application_settings.png index 8ac594c11..7f07ee49b 100644 Binary files a/docs/images/sshagent_application_settings.png and b/docs/images/sshagent_application_settings.png differ diff --git a/docs/images/sshagent_context_menu.png b/docs/images/sshagent_context_menu.png index d2743f6e9..8bd280fde 100644 Binary files a/docs/images/sshagent_context_menu.png and b/docs/images/sshagent_context_menu.png differ diff --git a/docs/images/sshagent_entry_settings.png b/docs/images/sshagent_entry_settings.png index d2a405cbd..263f55822 100644 Binary files a/docs/images/sshagent_entry_settings.png and b/docs/images/sshagent_entry_settings.png differ diff --git a/docs/images/sshagent_puttygen.png b/docs/images/sshagent_puttygen.png index c463cc084..ee68842b3 100644 Binary files a/docs/images/sshagent_puttygen.png and b/docs/images/sshagent_puttygen.png differ diff --git a/docs/images/sync_remote_settings.png b/docs/images/sync_remote_settings.png deleted file mode 100644 index 1d5c006b3..000000000 Binary files a/docs/images/sync_remote_settings.png and /dev/null differ diff --git a/docs/images/theme_comparison.png b/docs/images/theme_comparison.png index bc344c019..408bb892c 100644 Binary files a/docs/images/theme_comparison.png and b/docs/images/theme_comparison.png differ diff --git a/docs/images/theme_selection.png b/docs/images/theme_selection.png index 3f87719d3..2b087a84e 100644 Binary files a/docs/images/theme_selection.png and b/docs/images/theme_selection.png differ diff --git a/docs/images/toolbar.png b/docs/images/toolbar.png index 742379983..9ae4049ab 100644 Binary files a/docs/images/toolbar.png and b/docs/images/toolbar.png differ diff --git a/docs/images/totp_code_example.png b/docs/images/totp_code_example.png index 81b251977..cf6084bda 100644 Binary files a/docs/images/totp_code_example.png and b/docs/images/totp_code_example.png differ diff --git a/docs/images/totp_setup.png b/docs/images/totp_setup.png index c8027b654..2c975889e 100644 Binary files a/docs/images/totp_setup.png and b/docs/images/totp_setup.png differ diff --git a/docs/images/totp_usage_examples.png b/docs/images/totp_usage_examples.png index 60ef63bd5..25c358567 100644 Binary files a/docs/images/totp_usage_examples.png and b/docs/images/totp_usage_examples.png differ diff --git a/docs/images/uac_dialog.png b/docs/images/uac_dialog.png index 5838d6f7c..1477626c2 100644 Binary files a/docs/images/uac_dialog.png and b/docs/images/uac_dialog.png differ diff --git a/docs/images/unlock_database.png b/docs/images/unlock_database.png index e8a5c19d2..5cd3c37d8 100644 Binary files a/docs/images/unlock_database.png and b/docs/images/unlock_database.png differ diff --git a/docs/images/welcome_screen.png b/docs/images/welcome_screen.png index a00ae400f..0b4695f0f 100644 Binary files a/docs/images/welcome_screen.png and b/docs/images/welcome_screen.png differ diff --git a/docs/man/keepassxc.1.adoc b/docs/man/keepassxc.1.adoc index b82a97b03..16e10de9c 100644 --- a/docs/man/keepassxc.1.adoc +++ b/docs/man/keepassxc.1.adoc @@ -28,38 +28,26 @@ keepassxc - a modern open-source password manager *keepassxc* [_options_] [_filename(s)_] == DESCRIPTION -*KeePassXC* is a free/open-source password manager or safe which helps you to manage your passwords securely. -The complete database is always encrypted with the industry-standard AES (also known as Rijndael) encryption algorithm using a 256-bit key. +*KeePassXC* is a free/open-source password manager or safe which helps you to manage your passwords in a secure way. +The complete database is always encrypted with the industry-standard AES (alias Rijndael) encryption algorithm using a 256 bit key. KeePassXC uses a database format that is compatible with KeePass Password Safe. -Your database works offline and requires no internet connection. +Your wallet works offline and requires no Internet connection. == OPTIONS *-h*, *--help*:: Displays this help. -*--help-all*:: - Displays help including Qt specific options. - *-v*, *--version*:: Displays version information. *--config* <__config__>:: Path to a custom config file. -*--localconfig* <__localconfig__>:: - Path to a custom local config file. - -*--lock*:: - Locks all open databases. - *--keyfile* <__keyfile__>:: Key file of the database. *--pw-stdin*:: - Reads password of the database from stdin. - -*--minimized*:: - Starts KeePassXC minimized to the system tray. + Read password of the database from stdin. *--debug-info*:: Displays debugging information. diff --git a/docs/styles/dark.css b/docs/styles/dark.css index 4295629f4..8f7bd67b6 100644 --- a/docs/styles/dark.css +++ b/docs/styles/dark.css @@ -180,7 +180,7 @@ body.toc2.toc-right{padding-left:0;padding-right:20em}} .sect1{padding-bottom:1.25em}} .sect1:last-child{padding-bottom:0} .sect1+.sect1{border-top:1px solid #efefed} -#content h1>a.anchor,h2>a.anchor,h3>a.anchor,#toctitle>a.anchor,.sidebarblock>.content>.title>a.anchor,h4>a.anchor,h5>a.anchor,h6>a.anchor{position:absolute;z-index:1001;width:2.0ex;margin-left:-1.8ex;margin-top:0.08ex;display:block;text-decoration:none!important;visibility:hidden;text-align:center;font-weight:400} +#content h1>a.anchor,h2>a.anchor,h3>a.anchor,#toctitle>a.anchor,.sidebarblock>.content>.title>a.anchor,h4>a.anchor,h5>a.anchor,h6>a.anchor{position:absolute;z-index:1001;width:1.5ex;margin-left:-1.5ex;display:block;text-decoration:none!important;visibility:hidden;text-align:center;font-weight:400} #content h1>a.anchor::before,h2>a.anchor::before,h3>a.anchor::before,#toctitle>a.anchor::before,.sidebarblock>.content>.title>a.anchor::before,h4>a.anchor::before,h5>a.anchor::before,h6>a.anchor::before{content:"\00A7";font-size:.85em;display:block;padding-top:.1em} #content h1:hover>a.anchor,#content h1>a.anchor:hover,h2:hover>a.anchor,h2>a.anchor:hover,h3:hover>a.anchor,#toctitle:hover>a.anchor,.sidebarblock>.content>.title:hover>a.anchor,h3>a.anchor:hover,#toctitle>a.anchor:hover,.sidebarblock>.content>.title>a.anchor:hover,h4:hover>a.anchor,h4>a.anchor:hover,h5:hover>a.anchor,h5>a.anchor:hover,h6:hover>a.anchor,h6>a.anchor:hover{visibility:visible} #content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none} diff --git a/docs/topics/.sharedheader b/docs/topics/.sharedheader index 7a72b03a7..c639a39be 100644 --- a/docs/topics/.sharedheader +++ b/docs/topics/.sharedheader @@ -4,4 +4,3 @@ KeePassXC Team :stylesheet: ../styles/dark.css :icons: font :toc: left -:experimental: diff --git a/docs/topics/AutoType.adoc b/docs/topics/AutoType.adoc index f4bab1262..04c5e7b96 100644 --- a/docs/topics/AutoType.adoc +++ b/docs/topics/AutoType.adoc @@ -24,20 +24,20 @@ You can also set the time to remember the last used entry between presses of the === Configure Auto-Type Sequences Each entry in your database can have multiple Auto-Type sequences associated with various window titles. Simulated key presses can be sent to any other currently open window of your choice (web browser windows, login dialogs boxes, and so on). When the Global Auto-Type hotkey is pressed, KeePassXC will search your database for entries matching the current selected window title. -NOTE: The default Auto-Type sequence is `{USERNAME}{TAB}{PASSWORD}{ENTER}`. This means that it first types the username of the selected entry, then presses the kbd:[Tab] key, then types the password of the entry and finally presses the kbd:[Enter] key. +NOTE: The default Auto-Type sequence is `{USERNAME}{TAB}{PASSWORD}{ENTER}`. This means that it first types the username of the selected entry, then presses the `Tab` key, then types the password of the entry and finally presses the `Enter` key. TIP: To change the default Auto-Type sequence for all entries of your database, edit the root (top-most) group of your database and set a specific sequence. Child groups and entries will inherit this sequence by default. To configure Auto-Type sequences for your entries, perform the following steps: -1. Navigate to the entries list and open the desired entry for editing. Click the _Auto-Type_ item from the left-hand menu bar *(1)*. Press the kbd:[+] button *(2)* to add a new sequence entry. Select the desired window using the drop-down menu, or simply type a window title in the box *(3)*. +1. Navigate to the entries list and open the desired entry for editing. Click the _Auto-Type_ item from the left-hand menu bar *(1)*. Press the `+` button *(2)* to add a new sequence entry. Select the desired window using the drop-down menu, or simply type a window title in the box *(3)*. + TIP: You can use an asterisk (`\*`) to match any value (e.g., when a window title contains a dynamic filename or website name). Set the window title to `*` to match all windows. Leave the window title blank to offer additional default Auto-Type sequences, such as custom attributes. + .Auto-Type entry sequences image::autotype_entry_sequences.png[] -2. _(Optional)_ Define a custom Auto-Type sequence for each window title match by selecting the _Use specific sequence for this association_ checkbox. Sequence action codes and field placeholders are detailed in the following table. Beyond the most important ones detailed below, there are additional action codes and placeholders available: <> and <>. Action codes and placeholders are not case sensitive. +2. _(Optional)_ Define a custom Auto-Type sequence for each window title match by selecting the _Use specific sequence for this association_ checkbox. Sequence action codes and field placeholders are detailed in the following table. Beyond the most important ones detailed below, there are additional action codes and placeholders available: xref:UserGuide.adoc#_auto_type_actions[Auto-Type Actions Reference] and xref:UserGuide.adoc#_entry_placeholders[Entry Placeholders Reference]. Action codes and placeholders are not case sensitive. + [grid=rows, frame=none, width=90%] |=== @@ -60,7 +60,7 @@ image::autotype_entry_sequences.png[] |Press the corresponding keyboard key |{UP}, {DOWN}, {LEFT}, {RIGHT} |Press the corresponding arrow key -|{LEFTBRACE}, {RIGHTBRACE} |Press kbd:[{] or kbd:[}], respectively +|{LEFTBRACE}, {RIGHTBRACE} |Press `{` or `}`, respectively |{<KEY> X} |Repeat <KEY> X times (e.g., {SPACE 5} inserts five spaces) |{DELAY=X} |Set delay between key presses to X milliseconds |{DELAY X} |Pause typing for X milliseconds @@ -89,7 +89,7 @@ When you press the global Auto-Type hotkey, KeePassXC searches all unlocked data .Auto-Type sequence selection image::autotype_selection_dialog.png[,70%] -Perform the selected Auto-Type sequence by double clicking the desired row or pressing kbd:[Enter]. Press the up and down arrows to navigate the list. Sequences can be filtered through the text edit field. +Perform the selected Auto-Type sequence by double clicking the desired row or pressing _Enter_. Press the up and down arrows to navigate the list. Sequences can be filtered through the text edit field. .Auto-Type search database image::autotype_selection_dialog_search.png[,70%] @@ -104,7 +104,7 @@ The option to type just the username, password, or current TOTP value is availab TIP: On Windows, you will see an option to use a virtual keyboard in this sub-menu. This is an experimental feature that allows you to type into virtual machines by simulating actual keyboard presses. Some international keyboards may be unsupported due to limitations in the Windows API. === Performing Entry-Level Auto-Type -You can quickly activate the default Auto-Type sequence for a particular entry using Entry-Level Auto-Type. For this operation, the KeePassXC window will be minimized and the Auto-Type sequence occurs in the previously selected window. You can perform Entry-Level Auto-Type from the toolbar icon *(A)*, entry context menu *(B)*, or by pressing kbd:[Ctrl+Shift+V]. +You can quickly activate the default Auto-Type sequence for a particular entry using Entry-Level Auto-Type. For this operation, the KeePassXC window will be minimized and the Auto-Type sequence occurs in the previously selected window. You can perform Entry-Level Auto-Type from the toolbar icon *(A)*, entry context menu *(B)*, or by pressing `Ctrl+Shift+V`. WARNING: Be careful when using Entry-Level Auto-Type as you can inadvertently type into the wrong window. For example, a chat window or email. diff --git a/docs/topics/BrowserIntegration.adoc b/docs/topics/BrowserPlugin.adoc similarity index 68% rename from docs/topics/BrowserIntegration.adoc rename to docs/topics/BrowserPlugin.adoc index c1650fa4b..f36767492 100644 --- a/docs/topics/BrowserIntegration.adoc +++ b/docs/topics/BrowserPlugin.adoc @@ -1,201 +1,158 @@ -= KeePassXC – Browser Plugin -include::.sharedheader[] -:imagesdir: ../images - -// tag::content[] -== Browser Integration -The KeePassXC-Browser extension is installed within your web browser so that you can automatically pull usernames and passwords from KeePassXC and populate them directly into website fields. It is a very useful and secure extension that enhances your productivity while using KeePassXC. With this extension, you do not need to manually copy the data from your KeePassXC database and paste it into the website fields. - -The KeePassXC-Browser extension is available on the following web browsers: - -* Google Chrome, Vivaldi, and Brave -* Mozilla Firefox and Tor-Browser -* Microsoft Edge -* Chromium - -NOTE: On Linux, Flatpak and Snap based browsers are generally not supported. Ubuntu's Firefox Snap is currently the only known exception. - -=== Install the Browser Extension -You can download the KeePassXC-Browser extension from your web browser. To download the KeePassXC-Browser extension, perform the following steps: - -1. Click the link corresponding to your browser: - * https://chromewebstore.google.com/detail/keepassxc-browser/oboonakemofpalcgghocfoadofidjkkk[Chrome, Chromium, Vivaldi, and Brave] - * https://addons.mozilla.org/en-US/firefox/addon/keepassxc-browser[Mozilla Firefox and Tor-Browser] - * https://microsoftedge.microsoft.com/addons/detail/keepassxcbrowser/pdffhmdngciaglkoonimfcmckehcpafo[Microsoft Edge] - -2. Click the button to install/add the extension to the browser. Accept any confirmation dialogs. - -TIP: For the most up-to-date troubleshooting advice on all platforms, please read our https://github.com/keepassxreboot/keepassxc-browser/wiki/Troubleshooting-guide[Troubleshooting Guide]. - -// tag::advanced[] -NOTE: When Microsoft Edge is installed as a managed application, system administrators are required to deploy a custom native messaging configuration. Instructions for this are found in the advanced section below. -// end::advanced[] - -=== Configure KeePassXC-Browser -To start using KeePassXC-Browser, you must configure it so that it can communicate with the KeePassXC application on your desktop. - -To configure KeePassXC-Browser, perform the following steps: - -1. Open the KeePassXC application on your desktop and navigate to Tools > Settings. - -2. Click the Browser Integration option on the left-hand side *(1)*. The following screen appears: -+ -.Browser Settings -image::browser_settings.png[] - -3. Click the _Enable browser integration_ checkbox *(2)*. Then select the browsers for which you have downloaded the KeePassXC-Browser extension *(3)* and click *OK*. - -4. Ensure your database is unlocked, then open (or restart) your browser. - -5. Click the KeePassXC-Browser extension icon *(A)* in your browser (see figure below). A pop-up window appears. -+ -.Connect Extension to KeePassXC -image::browser_extension_connect.png[,80%] - -6. Click the _Connect_ button *(B)* in the pop-up window to complete integrating the KeePassXC-Browser extension with your KeePassXC desktop application. - -7. You are now prompted to enter a unique name to identify the connection between this browser and your database. Enter a unique name in the field (e.g., firefox-laptop) and click the _Save and allow access_ button. -+ -.Extension Association Dialog -image::browser_extension_association.png[,80%] - -WARNING: If you reuse a connection name in a database, the previous browser connection will be overwritten and prevent access. - -=== Using the Browser Extension -The KeePassXC-Browser extension lets you automatically populate the entries from your KeePassXC database into the fields on websites you visit. To do so, perform the following steps: - -1. Open your KeePassXC desktop application and unlock your database. - -2. Open your web browser. The KeePassXC-Browser extension icon in your browser window will change based on its connection state. The figure below shows the different states. -+ -*(A)* KeePassXC is not running or is disconnected. + -*(B)* KeePassXC is running, but KeePassXC Browser Extension is not connected to the current database. + -*\(C)* Connected to KeePassXC, but database is locked. + -*(D)* Connected to KeePassXC and ready to use. If the icon is shown with a number, it indicates the number of credentials found for the current site. -+ -.Extension Icon States -image::browser_extension_icons.png[,70%] - -3. If the KeePassXC desktop application is not connected with the KeePassXC-Browser extension, click the extension icon in your web browser and click _Reload_ from the pop-up window as shown in the following screen. -+ -.Reload Extension Connection -image::browser_extension_reload.png[,80%] - -4. Open the URL for which you want to use with your database. If you have previously created an entry in your database then the KeePassXC-Browser Confirm Access dialog may appear: -+ -.Confirm Access Dialog -image::browser_confirm_access_dialog.png[,80%] - -5. Ensure the credentials you want to use are checked, then click *(A)* Remember _(optional)_, then click _Allow Selected_ *(B)*. - -6. In your website, the KeePassXC icon will appear in the username field of the login form *(A)*. Click the icon to populate the field with your stored credentials. If you have more than one credential for this website, a dropdown will appear to choose the one to use. -+ -.Fill Credentials -image::browser_fill_credentials.png[,80%] - -=== Generate Passwords -The KeePassXC-Browser Extension also lets you generate passwords directly in your browser. -This feature can be used for websites with existing credentials as well as for new websites. -You can then choose to update/add the credentials to your KeePassXC database directly from the Browser. - -1. Ensure your database is unlocked and configured to use the Browser extension as shown above. - -2. Right click on a password field and from the KeePassXC sub-menu choose _Show Password Generator_. The standard KeePassXC password generator will appear. - -3. Configure the password generation options and click _Apply Password_ when done. The generated password will be filled into the previously selected field. - -4. When you have successfully submitted the password on the website, a popup will appear asking you to either update an existing entry or add a new one. - -// tag::advanced[] -=== Browser statistics -You can see a cross-section of all browser-related settings applied to entries within a database through the Browser Statistics report. To access these, use the _Database_ -> _Database reports..._ menu option then click on _Browser Statistics_ on the left-hand menu. From here you can see all entries with URLs applied to them, explicitly allowed and denied URLs, and any entries with custom browser settings. - -.Browser statistics -image::browser_statistics.png[] - -=== Advanced Usage -You can configure unique browser integration behavior for each entry. This allows you to add multiple URLs to an entry, hide an entry from the browser integration, and more. To access these settings, open an entry for editing then click on _Browser Integration_ option in the left-hand menu *(1)*. - -After opening the settings you can add any number of additional URLs by clicking the _Add_ button *(2)* and typing the URL in the list to the left *(3)*. - -Additional URLs also supports wildcards (with KeePassXC 2.7.10 and later). You can use URLs like: ----- -https://*.example.com -https://example.com/*/path -https://sub.*.example.com/path/* ----- - -.Entry browser settings -image::browser_entry_settings.png[] - -To set options for all entries within a group, edit the group and go to the browser integration section *(1)*. Here you can explicitly disable access to all entries under a group hierarchy to the browser extension. You can set other useful options for groups of entries as well. - -.Group browser settings -image::browser_group_settings.png[] - -Database-wide operations are available in the database settings. To access these use the _Database_ -> _Database settings..._ menu option. Click on _Browser Integration_ on the left-hand menu. From here you can disconnect all browsers, convert legacy KeePass-HTTP settings, reset all entry-level settings, and refresh the database root group ID (useful when making copies of your database file). - -.Database browser settings -image::browser_database_settings.png[] - -Finally, advanced application-wide settings are available in the Browser Integration tab of the application settings. - -WARNING: We do not recommend changing any of these settings as they may break the browser integration plugin. - -.Advanced browser settings -image::browser_advanced_settings.png[] - -=== Advanced Setup -==== Custom Browser option -It is possible to enable support for a custom browser (e.g. LibreWolf, WaterFox, Arc, beta and nightly browsers, etc.) using this feature. -This feature is only available for Linux and macOS. - -.Custom browser configuration -image::browser_custom_browser_configuration.png[] - -The native messaging script file needed for the custom browser depends on the browser type. For Firefox based browsers like Librefox the _Browser type_ must be _Firefox_. For Arc, Opera, etc. the type must be set to _Chromium_. - -_Config location_ must have the exact path for the browser's _native-messaging-hosts_ folder. If you are unsure, refer to our https://github.com/keepassxreboot/keepassxc-browser/wiki/Troubleshooting-guide#1-after-enabling-browser-integration-and-support-for-your-browser[Troubleshooting Guide] for listing of the most common paths, and a few ways for finding a path when it's not known. - -When a Custom Browser has been successfully set, KeePassXC will automatically write the needed native messaging script file to the folder. - -If you wish to support multiple custom browsers, you can copy the native messaging script files manually to the _native-messaging-hosts_ folder from other browsers. - -==== Managed Microsoft Edge on Windows -1. Deploy *org.keepassxc.keepassxc_browser_edge.json* to, for example, `C:\ProgramData\KeePassXC\` on all managed platforms. -+ ----- -{ - "allowed_origins": [ - "chrome-extension://pdffhmdngciaglkoonimfcmckehcpafo/" - ], - "description": "KeePassXC integration with native messaging support", - "name": "org.keepassxc.keepassxc_browser", - "path": "C:\\Program Files\\KeePassXC\\keepassxc-proxy.exe", - "type": "stdio" -} ----- - -2. Configure GPO options (see https://learn.microsoft.com/en-us/deployedge/microsoft-edge-policies#native-messaging[Microsoft Edge Native Messaging Policies] for more information.): -+ ----- -Windows Registry Editor Version 5.00 -[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Edge\NativeMessagingHosts\org.keepassxc.keepassxc_browser] -@="C:\ProgramData\KeepassXC\org.keepassxc.keepassxc_browser_edge.json" - -[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Edge] -"NativeMessagingUserLevelHosts"=dword:00000000 - -[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Edge\ExtensionInstallAllowlist] -"1"="pdffhmdngciaglkoonimfcmckehcpafo" - -[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Edge\NativeMessagingAllowlist] -"1"="org.keepassxc.keepassxc_browser" ----- - -==== Managed Microsoft Edge on macOS -1. Deploy *org.keepassxc.keepassxc_browser_edge.json* to `/Library/Microsoft/Edge/NativeMessagingHosts`. - -2. You may need to configure Edge to allowlist the extension and native messaging host. See https://learn.microsoft.com/en-us/deployedge/microsoft-edge-policies#native-messaging[Microsoft Edge Native Messaging Policies] for more information. -// end::advanced[] -// end::content[] += KeePassXC – Browser Plugin +include::.sharedheader[] +:imagesdir: ../images + +// tag::content[] +== Setup Browser Integration +The KeePassXC-Browser extension is installed within your web browser so that you can automatically pull usernames and passwords from KeePassXC and populate them directly into website fields. It is a very useful and secure extension that enhances your productivity while using KeePassXC. With this extension, you do not need to manually copy the data from your KeePassXC database and paste it into the website fields. + +The KeePassXC-Browser extension is available on the following web browsers: + +* Google Chrome, Vivaldi, and Brave +* Mozilla Firefox and Tor-Browser +* Microsoft Edge +* Chromium + +=== Install the Browser Extension +You can download the KeePassXC-Browser extension from your web browser. To download the KeePassXC-Browser extension, perform the following steps: + +1. Click the link corresponding to your browser: + * https://chrome.google.com/webstore/detail/keepassxc-browser/oboonakemofpalcgghocfoadofidjkkk[Chrome, Chromium, Vivaldi, and Brave] + * https://addons.mozilla.org/en-US/firefox/addon/keepassxc-browser[Mozilla Firefox and Tor-Browser] + * https://microsoftedge.microsoft.com/addons/detail/keepassxcbrowser/pdffhmdngciaglkoonimfcmckehcpafo[Microsoft Edge] + +2. Click the button to install/add the extension to the browser. Accept any confirmation dialogs. + +TIP: For the most up-to-date troubleshooting advice on all platforms, please read our https://github.com/keepassxreboot/keepassxc-browser/wiki/Troubleshooting-guide[Troubleshooting Guide]. + +// tag::advanced[] +NOTE: When Microsoft Edge is installed as a managed application, system administrators are required to deploy a custom native messaging configuration. Instructions for this are found in the advanced section below. +// end::advanced[] + +=== Configure KeePassXC-Browser +To start using KeePassXC-Browser, you must configure it so that it can communicate with the KeePassXC application on your desktop. + +To configure KeePassXC-Browser, perform the following steps: + +1. Open the KeePassXC application on your desktop and navigate to Tools > Settings. + +2. Click the Browser Integration option on the left-hand side *(1)*. The following screen appears: ++ +.Browser Settings +image::browser_settings.png[] + +3. Click the _Enable browser integration_ checkbox *(2)*. Then select the browsers for which you have downloaded the KeePassXC-Browser extension *(3)* and click *OK*. + +4. Ensure your database is unlocked, then open (or restart) your browser. + +5. Click the KeePassXC-Browser extension icon *(A)* in your browser (see figure below). A pop-up window appears. ++ +.Connect Extension to KeePassXC +image::browser_extension_connect.png[,80%] + +6. Click the _Connect_ button *(B)* in the pop-up window to complete integrating the KeePassXC-Browser extension with your KeePassXC desktop application. + +7. You are now prompted to enter a unique name to identify the connection between this browser and your database. Enter a unique name in the field (e.g., firefox-laptop) and click the _Save and allow access_ button. ++ +.Extension Association Dialog +image::browser_extension_association.png[,80%] + +WARNING: If you reuse a connection name in a database, the previous browser connection will be overwritten and prevent access. + +=== Using the Browser Extension +The KeePassXC-Browser extension lets you automatically populate the entries from your KeePassXC database into the fields on websites you visit. To do so, perform the following steps: + +1. Open your KeePassXC desktop application and unlock your database. + +2. Open your web browser. The KeePassXC-Browser extension icon in your browser window will change based on its connection state. The figure below shows the different states. ++ +*(A)* KeePassXC is not running or is disconnected + +*(B)* Connected to KeePassXC, but database is locked + +*\(C)* Connected to KeePassXC and ready to use ++ +.Extension Icon States +image::browser_extension_icons.png[,70%] + +3. If the KeePassXC desktop application is not connected with the KeePassXC-Browser extension, click the extension icon in your web browser and click _Reload_ from the pop-up window as shown in the following screen. ++ +.Reload Extension Connection +image::browser_extension_reload.png[,80%] + +4. Open the URL for which you want to use with your database. If you have previously created an entry in your database then the KeePassXC-Browser Confirm Access dialog may appear: ++ +.Confirm Access Dialog +image::browser_confirm_access_dialog.png[,80%] + +5. Ensure the credentials you want to use are checked, then click *(A)* Remember _(optional)_, then click _Allow Selected_ *(B)*. + +6. In your website, the KeePassXC icon will appear in the username field of the login form *(A)*. Click the icon to populate the field with your stored credentials. If you have more than one credential for this website, a dropdown will appear to choose the one to use. ++ +.Fill Credentials +image::browser_fill_credentials.png[,80%] + +// tag::advanced[] +=== Browser statistics +You can see a cross-section of all browser-related settings applied to entries within a database through the Browser Statistics report. To access these, use the _Database_ -> _Database reports..._ menu option then click on _Browser Statistics_ on the left-hand menu. From here you can see all entries with URLs applied to them, explicitly allowed and denied URLs, and any entries with custom browser settings. + +.Browser statistics +image::browser_statistics.png[] + +=== Advanced Usage +You can configure unique browser integration behavior for each entry. This allows you to add multiple URLs to an entry, hide an entry from the browser integration, and more. To access these settings, open an entry for editing then click on _Browser Integration_ option in the left-hand menu *(1)*. + +After opening the settings you can add any number of additional URLs by clicking the _Add_ button *(2)* and typing the URL in the list to the left *(3)*. + +.Entry browser settings +image::browser_entry_settings.png[] + +To set options for all entries within a group, edit the group and go to the browser integration section *(1)*. Here you can explicitly disable access to all entries under a group hierarchy to the browser extension. You can set other useful options for groups of entries as well. + +.Group browser settings +image::browser_group_settings.png[] + +Database-wide operations are available in the database settings. To access these use the _Database_ -> _Database settings..._ menu option. Click on _Browser Integration_ on the left-hand menu. From here you can disconnect all browsers, convert legacy KeePass-HTTP settings, reset all entry-level settings, and refresh the database root group ID (useful when making copies of your database file). + +.Database browser settings +image::browser_database_settings.png[] + +Finally, advanced application-wide settings are available in the Browser Integration tab of the application settings. + +WARNING: We do not recommend changing any of these settings as they may break the browser integration plugin. + +.Advanced browser settings +image::browser_advanced_settings.png[] + +=== Advanced Setup +==== Managed Microsoft Edge on Windows +1. Deploy *org.keepassxc.keepassxc_browser_edge.json* to, for example, `C:\ProgramData\KeepassXC` on all managed platforms. ++ +---- +{ + "allowed_origins": [ + "chrome-extension://pdffhmdngciaglkoonimfcmckehcpafo/" + ], + "description": "KeePassXC integration with native messaging support", + "name": "org.keepassxc.keepassxc_browser", + "path": "C:\\Program Files\\KeePassXC\\keepassxc-proxy.exe", + "type": "stdio" +} +---- + +2. Configure GPO options (registry result): ++ +---- +Windows Registry Editor Version 5.00 +[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Edge\NativeMessagingHosts\org.keepassxc.keepassxc_browser] +@="C:\ProgramData\KeepassXC\org.keepassxc.keepassxc_browser_edge.json" + +[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Edge] +"NativeMessagingUserLevelHosts"=dword:00000000 + +[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Edge\ExtensionInstallAllowlist] +"1"="pdffhmdngciaglkoonimfcmckehcpafo" + +[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Edge\NativeMessagingAllowlist] +"1"="org.keepassxc.keepassxc_browser" +---- +// end::advanced[] +// end::content[] diff --git a/docs/topics/DatabaseOperations.adoc b/docs/topics/DatabaseOperations.adoc index c6a7fb4fc..b3098fc9a 100644 --- a/docs/topics/DatabaseOperations.adoc +++ b/docs/topics/DatabaseOperations.adoc @@ -36,13 +36,6 @@ NOTE: Keep this password for your database safe. Either memorize it or note it d 5. Click Done. You will be prompted to select a location to save your database file. The database file is saved on to your computer with the default `.kdbx` extension. You can store your database wherever you wish, it is fully encrypted at all times preventing unauthorized access. -=== Storing Your Database -The database file that you create might contain highly sensitive data and must be stored in a very secure way. You must make sure that the database is always protected with a strong and long password. The database file that is protected with a strong and long password is secure and encrypted while stored on your computer or cloud storage service. - -Make sure that you or someone else does not accidentally delete the database file. Deletion of the database file will result in the total loss of all your information (including all your passwords!) and a lot of inconvenience to manually retrieve your logins for various web applications. Do not share the credentials to access your database file with anyone unless you absolutely trust them (spouse, child, etc.). - -TIP: You can safely store your database file in the cloud (OneDrive, Dropbox, Google Drive, Nextcloud, Syncthing, etc.). The database file is always fully encrypted; unencrypted data is never written to disk and is never accessible to your cloud storage provider. We recommend using a storage service that keeps automatic backups (version history) of your database file in the event of corruption or accidental deletion. - === Opening an Existing Database To open an existing database, perform the following steps: @@ -58,11 +51,9 @@ image::unlock_database.png[] 3. Enter the password for your database. -4. _(Optional)_ Click *I have a key file (A)* if you have one as an additional authentication factor for your database. +4. _(Optional)_ Browse for the Key File if you have chosen it as an additional authentication factor while creating the database. Refer to the KeePassXC User Guide for more information on setting a Key File as an additional authentication factor. -5. _(Optional)_ Plug in your configured YubiKey or OnlyKey to use it as an additional authentication factor. If you don't see it listed, press the refresh button *(B)*. - -6. Click *OK*. The database opens and the following screen is displayed: +5. Click *OK*. The database opens and the following screen is displayed: + .Unlocked database image::database_view.png[] @@ -70,29 +61,40 @@ image::database_view.png[] === Quick Unlock On Windows and macOS, subject to hardware availability, your credentials can be securely stored to enable subsequent unlocking of your database through biometric authentication. This is enabled by default on Windows using _Windows Hello_ and on macOS using _Touch ID or Apple Watch_ services. You can disable this feature in the Application Settings under the Security section. -NOTE: On Windows, you will be prompted to authenticate to Windows Hello after unlocking your database with full credentials. This is required to setup Quick Unlock. If you cancel this prompt then Quick Unlock will not be enabled and your database will continue to unlock. +NOTE: On Windows you will be prompted to authenticate to Windows Hello on the initial database unlock. This is required to access the hardware certificate store that encrypts your credentials. .Windows Hello example image::quick_unlock_windows_hello.png[] -When your database is locked, you will see the following unlock dialog. Simply press kbd:[Enter] or click on _Unlock Database_ to initiate the biometric authentication process. If you are using a hardware key (e.g. Yubikey), it must be connected to your computer to complete the unlock. +When your database is locked, you will see the following unlock dialog. Simply press _Enter_ or click on _Unlock Database_ to initiate the biometric authentication process. If you are using a hardware key (e.g. Yubikey), it must be connected to your computer to complete the unlock. .Quick Unlock image::quick_unlock.png[] // tag::advanced[] -NOTE: By default, KeePassXC will show entries that are expired or will be expiring within 3 days after unlocking the database. This feature allows you to change your passwords before they expire and be aware of passwords that are no longer valid. You can disable or change this feature in the Application Settings. +=== Expired Entries +By default, KeePassXC will show entries that are expired or will be expiring within 3 days after unlocking the database. This feature allows you to change your passwords before they expire and be aware of passwords that are no longer valid. You can disable or change this feature in the Application Settings. +=== Advanced Save Options +There are three ways that KeePassXC can handle database files. This behavior is set in the Application Settings under _File Operations_. + +1. _(Default)_ *Safe saves* create a temporary database file alongside the existing one and atomically move it into place when all writing is complete. This prevents database corruption in the case of application crashes, loss of power, or other interruptions. + +2. *Temporary file saves* create a database in the temporary files folder. This database is then moved into place overtop of the existing file. Although rare, interruptions in this move process could leave your database in an unknown state. This option is useful for overcoming poorly behaved cloud sync tools. + +3. *Direct-write saves* write directly to the existing database file. This is an unsafe operation since any interruption can leave your entire database inaccessible. We only recommend using this option when interfacing with Linux GVFS services (e.g. Google Cloud on Gnome) and other types of storage services that host a virtual drive system. + +In addition to these save options, KeePassXC can create a backup of your existing database file just prior to saving. This backup will be saved at the path specified in the *Backup destination* field. This path can be absolute or relative. The latter will be resolved according to the databases path. It is possible to specify a custom naming scheme with placeholders. See xref:UserGuide.adoc#_backup_path_placeholders[Backup Path Placeholders] for available placeholders and examples. + +image::save_options.png[] // end::advanced[] -=== Entry Handling -Entries in KeePassXC are the fundamental units where all your sensitive information is stored. Each entry can contain various fields such as usernames, passwords, URLs, attachments, and notes. You can create, edit, clone, and delete entries as needed. Additionally, KeePassXC supports advanced features like TOTP for two-factor authentication, custom attributes, and entry history to track changes over time. Proper management of entries ensures that your data is organized, secure, and easily accessible when needed. -==== Adding an Entry +=== Adding an Entry All the details such as usernames, passwords, URLs, attachments, notes, and so on are stored in database entries. You can create as many entries as you want in the database. To add an entry, perform the following step: -1. Navigate to Entries > New Entry (or press kbd:[Ctrl+N]). The following screen appears: +1. Navigate to Entries > New Entry (Or, press Ctrl+N). The following screen appears: + .Adding a new entry image::edit_entry.png[] @@ -110,18 +112,18 @@ image::edit_entry.png[] 5. Click *OK* to add the entry to your database. -==== Editing an Entry +=== Editing an Entry To edit the details in an entry, perform the following steps: 1. Select the entry you want to edit. -2. Press kbd:[Enter], click the edit toolbar icon, or right-click and select Edit Entry from the menu. +2. Press `Enter`, click the edit toolbar icon, or right-click and select Edit Entry from the menu. 3. Make the desired changes. 4. Click *OK*. -==== Adding TOTP to an Entry +=== Adding TOTP to an Entry Timed One-Time Passwords (TOTP) are a popular choice for two-factor authentication methods. These codes are typically six digits long and change every 30 seconds. They are derived from a shared secret value and the current time. Once set up, KeePassXC can calculate TOTP codes like any authenticator app, such as Google Authenticator. The codes can be used with copy/paste, browser extension, and Auto-Type. TIP: Your computer time must be synchronized with an internet time source to generate valid TOTP codes, https://www.nist.gov/pml/time-and-frequency-division/time-distribution/internet-time-service-its[read more here]. @@ -143,34 +145,24 @@ After an entry is configured with TOTP, you will see a clock icon in that entry' .TOTP Usage image::totp_usage_examples.png[] -==== Entry Icons -You can select an icon to be displayed with each entry for easy identification. KeePassXC comes with a set of default icons that you can use or you can use your own custom icons. If you defined a URL with an entry, you can also download the favorite icon for that particular website. - -NOTE: To delete a custom icon, go to <> where you can purge unused icons and delete one or more icons at a time. - -.Entry icon selection -image::edit_entry_icons.png[] - -TIP: Each KeePass application has different default icons. If you use a mobile app or KeePass2, be aware that the default icons may not be exactly correspond to the KeePassXC icons. - -==== Deleting an Entry +=== Deleting an Entry To delete an entry, perform the following steps: -1. Select the entry you want to delete and press the kbd:[Del] button on your keyboard. +1. Select the entry you want to delete and press the `Delete` button on your keyboard. 2. You will be prompted to move the entry to the Recycle Bin (if enabled). + NOTE: You can disable the recycle bin within the Database Settings. If the recycle bin is disabled then deleted entries will be permanently removed from the database. -3. To permanently delete the entry, navigate to the Recycle Bin, select the entry you want to delete and press the kbd:[Del] button on your keyboard. +3. To permanently delete the entry, navigate to the Recycle Bin, select the entry you want to delete and press the `Delete` button on your keyboard. // tag::advanced[] -==== Clone an Entry +=== Clone an Entry Creating a clone of an entry provides you a ready-to-use template for creating new entries with similar details of a master entry. To create a clone of an existing entry, perform the following steps: -1. Right-click on the entry for which you want to create a clone and select _Clone Entry_. Alternatively, select the desired entry and press kbd:[Ctrl+K]. +1. Right-click on the entry for which you want to create a clone and select _Clone Entry_. Alternatively, select the desired entry and press `Ctrl+K`. + .Clone entry from context menu image::clone_entry.png[] @@ -188,73 +180,12 @@ image::clone_entry_dialog.png[,50%] .References in a cloned entry image::clone_entry_references.png[] -4. You can create your own references using the <> +4. You can create your own references using the xref:UserGuide.adoc#_entry_cross_reference[Entry Reference Syntax] -==== Entry URL Handling -KeePassXC can handle URLs in various ways. Standard URLs will be opened in your default browser. URLs that start with schemas handled by your Operating System will launch the associated application, for example `ftp://` or `ssh://`. You can also use the following URL schemas to perform specific actions: +== Searching the Database +KeePassXC provides an enhanced and granular search features the enables you to search for specific entries in the databases using the different modifiers, wild card characters, and logical operators. -|=== -|Schema | Example | Description - -|cmd:// -|`cmd://ssh {USERNAME}@example.com -p 2222` -|Launches the specified command line executable with the specified arguments. The executable must be present on your PATH or an absolute path must be specified. - -|kdbx:// -|`kdbx://~/dbs/passwords.kdbx` -|Opens the specified database file. Set the entry's username to the keyfile path (if required) and password to the database password. The database will open in a new tab. - -|=== - -=== Advanced Entry Handling -KeePassXC offers several advanced options for managing your database entries. Additional Attributes allow you to store extra information required by some applications and websites. Attachments enable you to attach files to entries, stored as encrypted binaries, which can be previewed directly in the application (text and images). Icons can be selected or downloaded for easy identification of entries. The Properties section lets you view basic properties such as creation, modification, and last accessed times, and retrieve an entry's UUID for references. KeePassXC also maintains a history of changes to entries, allowing you to view, restore, or delete previous versions of an entry. - -==== Additional Attributes -A lot of applications and web sites now require providing additional information when you create accounts. The additional information is used to block hackers if any suspicious activity is detected. In addition, the additional information you provide can be used to reset passwords if you forget them. You can also store arbitrary information here that can be copied to the clipboard or Auto-Typed using the `{S:}` action code. - -To protect an attribute from being displayed by default, activate the _Protect_ checkbox *(A)*. To show the contents of the attribute while keeping it protected, press the _Reveal_ button *(B)*. - -.Additional attributes example -image::edit_entry_attributes.png[] - -==== Attachments -You can attach files to any entry in your database by pressing the _Add_ button *(A)*. These files are added to the database and stored as encrypted binaries. You can open, save, or delete attachments from this interface *(B)*. - -NOTE: When you try to open the attached file, KeePassXC extracts the attachment to a temporary file and opens it using the default application associated with the file type. After finishing viewing or editing the file, you can choose between importing or discarding the changes that you made to the temporary file. KeePassXC securely deletes the temporary file by overwriting it. - -.Attachments interface -image::edit_entry_attachments.png[] - -==== Foreground and Background Color -You can change the foreground *(A)* and/or background *(B)* color that this entry will use in the entry lists. Click the corresponding box to open the color picker dialog. - -.Color picker dialog -image::edit_entry_colors.png[] - -==== Properties -KeePassXC lets you view the basic properties such as date and time of creation, modification, and when last accessed. This is also where you can retrieve an entry's UUID for use in references. - -.Entry properties view -image::edit_entry_properties.png[] - -==== History -KeePassXC maintains a history of changes you make to your entries. Each time you change an entry, KeePassXC automatically creates a backup copy of the current, non-modified entry before saving the new values. You can view the changes you made previously, restore, and delete the history of changes you made. The age of the history item, the changes that were made, and the entry's size are shown in the table view. - - * Show: Display this history item for review, a read-only copy of the entry will be shown. - * Restore: Reinstate the selected history item as the active entry details. - * Delete: Delete the selected history item. - * Delete All: Delete the entire history for this entry. - -.Entry history view -image::edit_entry_history.png[] - -NOTE: Restoring an old history item will store the current entry settings as a new history item. - -// end::advanced[] -=== Search -KeePassXC provides a robust search that enables you to find specific entries in the databases using different modifiers, wild card characters, and logical operators. By default, search considers the following fields when matching your query: Title, Username, URL, Tags, and Notes. To include other fields and/or narrow your search to specific fields, you can use the search syntax described below. - -==== Modifiers and Fields +=== Modifiers and Fields [grid=rows, frame=none, width=70%] |=== |Modifier |Description @@ -270,15 +201,14 @@ The following fields can be searched along with their abbreviated name in parent * Title (t) * Username (u) * Password (p, pw) -* URL (url) +* URL * Notes (n) * Attribute names and values (attr) * Attachment (attach) * Group (g) -* Tags (tag) * Entry State (is:expired, is:weak) -==== Wild Card Characters and Logical Operators +=== Wild Card Characters and Logical Operators [grid=rows, frame=none, width=70%] |=== |Wild Card Character |Description @@ -288,7 +218,7 @@ The following fields can be searched along with their abbreviated name in parent |\| |Logical OR |=== -==== Sample Search Queries +=== Sample Search Queries The following tables lists a few samples search queries for your reference: |=== @@ -306,39 +236,63 @@ The following tables lists a few samples search queries for your reference: |`+attr:mystring123` |Searches all additional attributes for any name OR value equal to mystring123. -|`+tag:personal` -| Search exactly for the 'personal' tag and do not include tags such as 'my personal'. - |`is:expired is:weak` |Searches for all expired entries with weak passwords. |=== -// tag::advanced[] -=== Merging Databases -KeePassXC allows you to merge entries from one database into another through the _Database_ -> _Merge From Database_ menu item. When merging, entries from the specified database will be imported into your currently open database. The merge process compares entries based on their unique identifiers (UUIDs) and modified timestamp. When an entry UUID matches, no matter which group it is in, the most recently modified version will be made the current and the previous version will be placed into the entry's history. Any new entries and/or groups will be added to the open database. This feature is useful for consolidating multiple databases or synchronizing databases from conflict files in a cloud storage system. +== Advanced Entry Options +=== Additional Attributes +A lot of applications and web sites now require providing additional information when you create accounts. The additional information is used to block hackers if any suspicious activity is detected. In addition, the additional information you provide can be used to reset passwords if you forget them. You can also store arbitrary information here that can be copied to the clipboard or Auto-Typed using the `{S:}` action code. -NOTE: When you delete entries, a record of that deletion (the entry UUID) is stored to prevent that entry from reappearing from a merge operation. An existing entry that has the same UUID as a deleted item will be removed from the database without prompt. +To protect an attribute from being displayed by default, activate the _Protect_ checkbox *(A)*. To show the contents of the attribute while keeping it protected, press the _Reveal_ button *(B)*. -=== Advanced Save Options -There are three ways that KeePassXC can handle database files. This behavior is set in the Application Settings under _File Operations_. +.Additional attributes example +image::edit_entry_attributes.png[] -1. _(Default)_ *Safe saves* create a temporary database file alongside the existing one and atomically move it into place when all writing is complete. This prevents database corruption in the case of application crashes, loss of power, or other interruptions. +=== Attachments +You can attach files to any entry in your database by pressing the _Add_ button *(A)*. These files are added to the database and stored as encrypted binaries. You can open, save, or delete attachments from this interface *(B)*. -2. *Temporary file saves* create a database in the temporary files folder. This database is then moved into place overtop of the existing file. Although rare, interruptions in this move process could leave your database in an unknown state. This option is useful for overcoming poorly behaved cloud sync tools. +NOTE: When you try to open the attached file, KeePassXC extracts the attachment to a temporary file and opens it using the default application associated with the file type. After finishing viewing or editing the file, you can choose between importing or discarding the changes that you made to the temporary file. KeePassXC securely deletes the temporary file by overwriting it. -3. *Direct-write saves* write directly to the existing database file. This is an unsafe operation since any interruption can leave your entire database inaccessible. We only recommend using this option when interfacing with Linux GVFS services (e.g. Google Cloud on Gnome) and other types of storage services that host a virtual drive system. +.Attachments interface +image::edit_entry_attachments.png[] -=== Database Backup Options -In addition to these save options, KeePassXC can create a backup of your existing database file just prior to saving. This backup will be saved at the path specified in the *Backup destination* field. This path can be absolute or relative. The latter will be resolved according to the databases path. It is possible to specify a custom naming scheme with placeholders. See <> for available placeholders and examples. +=== Foreground and Background Color +You can change the foreground *(A)* and/or background *(B)* color that this entry will use in the entry lists. Click the corresponding box to open the color picker dialog. -image::save_options.png[] +.Color picker dialog +image::edit_entry_colors.png[] -Alternatively, backups can be created on-demand using the _Database_ -> _Save Database Backup..._ menu feature. +=== Icons +You can select an icon to be displayed with each entry for easy identification. KeePassXC comes with a set of default icons that you can use or you can use your own custom icons. If you defined a URL with an entry, you can also download the favorite icon for that particular website. -.Saving a database backup -image::save_database_backup.png[,40%] +NOTE: To delete a custom icon, go to xref:UserGuide.adoc#_database_maintenance[Database Maintenance] where you can purge unused icons and delete one or more icons at a time. -=== Automatic Database Opening +.Entry icon selection +image::edit_entry_icons.png[] + +TIP: Each KeePass application has different default icons. If you use a mobile app or KeePass2, be aware that the default icons may not be exactly correspond to the KeePassXC icons. + +=== Properties +KeePassXC lets you view the basic properties such as date and time of creation, modification, and when last accessed. This is also where you can retrieve an entry's UUID for use in references. + +.Entry properties view +image::edit_entry_properties.png[] + +=== History +KeePassXC maintains a history of changes you make to your entries. Each time you change an entry, KeePassXC automatically creates a backup copy of the current, non-modified entry before saving the new values. You can view the changes you made previously, restore, and delete the history of changes you made. The age of the history item, the changes that were made, and the entry's size are shown in the table view. + + * Show: Display this history item for review, a read-only copy of the entry will be shown. + * Restore: Reinstate the selected history item as the active entry details. + * Delete: Delete the selected history item. + * Delete All: Delete the entire history for this entry. + +.Entry history view +image::edit_entry_history.png[] + +NOTE: Restoring an old history item will store the current entry settings as a new history item. + +== Automatic Database Opening You can setup one or more databases to open automatically when you unlock a single database. This is done by *(1)* defining a special group named `AutoOpen` with *(2)* entries that contain the file path and credentials for each database that should be opened. There is no limit to the number of databases that can be opened. TIP: Case matters with auto open, the group name must be exactly `AutoOpen` and it must be a child of the root group. @@ -375,12 +329,10 @@ image::database_settings.png[] * *Database name:* This is the default identifier for your database and is shown in the tab bar and title bar (when active). You can change this name as desired. * *Database description:* Provide some meaningful description for your database. * *Default username:* Provide a default username for all new entries that you create in this database. - * *Public Databse Metadata:* Here you can set a public (unencrypted) name, icon, and color for your database. This is used on the database unlock screen to help distinguish multiple databases from each other. * *Max history items:* This is the maximum number of history items that are stored for each entry. When you set this to 0, no history will be saved. Set this value to a low value to prevent the database from getting too large (we recommend no more than 10). * *Max. history size:* When the history of an entry gets above this size, it is truncated. For example, this happens when entries have large attachments. Set this value small to prevent the database from getting too large (we recommend 6 MiB). * *Use recycle bin:* Select this check-box if you want deleted entries to move to the recycle bin instead of being permanently removed. The recycle bin will be created if it does not already exist after your first deletion. To delete entries permanently, you must empty the recycle bin manually. * *Enable compression:* KeePassXC databases can be compressed before being encrypted. Compression reduces the size of the database and does not have any appreciable affect on speed. It is recommended to always save databases with compression. - * *Autosave delay:* Customize the automatic database save operation by delaying it for a set time since the last change. By default, this option is disabled for fast saving, but can be useful for large databases to avoid delays after each change. 3. Click the Security button in the left-hand menu bar to change your database credentials and change encryption settings. + @@ -412,27 +364,42 @@ The following key derivation functions are supported: * Argon2 (KDBX 4 – recommended): KDBX 4, the Argon2 key derivation function can be used for transforming the composite master key (as protection against dictionary attacks). The main advantage of Argon2 over AES-KDF is that it provides a better resistance against GPU/ASIC attacks (due to being a memory-hard function). The number of iterations scales linearly with the required time. By increasing the memory parameter, GPU/ASIC attacks become harder and the required time increases. The parallelism parameter can be used to specify how many threads should be used. We recommend using Argon2id to prevent against timing-based attacks. Argon2d offers maximum compatibility with other KeePass-based apps, the default settings provide sufficient protection against any known attacks. -=== Database Maintenance +== Database Maintenance KeePassXC offers some maintenance features that can be applied to clean up your database. Navigate to _Database_ -> _Database settings_ then click on _Maintenance_ on the left hand panel. The following screen appears. On this screen you can delete multiple icons at once and purge any unused icons in your database. image::database_maintenance.png[] -== Remote database support -KeePassXC provides support for syncing database files that reside in a remote location. If you can download/upload the database file via a commandline tool (e.g. rsync, ssh, scp etc.) KeePassXC offers easy to use functionality to sync the remote database. +=== Creating a YubiKey backup +It is advisable to have a backup replica YubiKey In case your main YubiKey gets damaged, lost, or stolen. The same HMAC key will need to be written to both keys. To do this you can either use the YubiKey Personalization Tool GUI or the ykpersonalize CLI tool. The steps for the CLI tool are shown: -=== Sync with remote database -Open the remote sync settings via _Database > Database Settings… > Remote_ to create commands to sync a local database or a temporary local copy of a remote database. +1. Create a 20 byte HMAC key: ++ +``` +dd status=none if=/dev/random bs=20 count=1 | xxd -p -c 40 +``` -Define a name for your sync command and specify a download *(A)* as well as an upload command *(B)*. The command and/or input need a `{TEMP_DATABASE}` placeholder specified where the remote database is temporarily stored. Do not forget to save the command settings with the save button *\(C)*. Remote settings are added as menu entries below the _Remote Sync…_ menu for quick access. +2. Write the HMAC key to slot 2 _(Set through the first switch. Out of the box the YubiKey OTP resides in slot 1)_: ++ +``` +ykpersonalize -2 -a -ochal-resp -ochal-hmac -ohmac-lt64 -oserial-api-visible -oallow-update +``` -WARNING: If your download or upload command require a password prompt, the command will most likely not succeed. In case of an SSH connection (e.g. sftp), it is recommended to use <> so that no password prompt is needed. - -.Remote sync settings -image::sync_remote_settings.png[] - -Select the remote sync command from the _Database > Remote Sync…_ menu to start the syncing process and a progress bar will show up in the lower right corner. - -WARNING: In case the remote database is changed by another user/process after the downloading command finishes and before uploading again, those changes will be overwritten. Syncing is not an atomic operation. +You will be asked to enter the HMAC key you created earlier, copy/paste they key output in the first step. Repeat step 2 for your second YubiKey using the same HMAC key from before. We recommend storing your HMAC key in a safe place (e.g., printed on paper) in case you need to recreate another key. +== Command Line Tool +KeePassXC comes with the command line tool *keepassxc-cli* to access, view, and manipulate your database directly from a terminal window. The tool is documented through a separate man page, which can be shown using `man keepassxc-cli`, or through the on-demand help using `keepassxc-cli [command] -h`. An online version of the man page is https://github.com/keepassxreboot/keepassxc/blob/master/docs/man/keepassxc-cli.1.adoc[available on GitHub]. // end::advanced[] + +== Storing a Database File +The database file that you create might contain highly sensitive data and must be stored in a very secure way. You must make sure that the database is always protected with a strong and long password. The database file that is protected with a strong and long password is secure and encrypted while stored on your computer or cloud storage service. + +Make sure that you or someone else does not accidentally delete the database file. Deletion of the database file will result in the total loss of all your information (including all your passwords!) and a lot of inconvenience to manually retrieve your logins for various web applications. Do not share the credentials to access your database file with anyone unless you absolutely trust them (spouse, child, etc.). + +TIP: You can safely store your database file in the cloud (OneDrive, Dropbox, Google Drive, Nextcloud, Syncthing, etc.). The database file is always fully encrypted; unencrypted data is never written to disk and is never accessible to your cloud storage provider. We recommend using a storage service that keeps automatic backups (version history) of your database file in the event of corruption or accidental deletion. + +== Backing up a Database File +It is a good practice to create copies of your database file and store the copies of your database on a different computer, smart phone, or cloud storage space such a Google Drive or Microsoft OneDrive. Backups can be created automatically by selecting the _Backup database file before saving_ option in the application settings. Additionally, you can create a backup on-demand using the _Database_ -> _Save Database Backup..._ menu feature. + +.Saving a database backup +image::save_database_backup.png[,40%] // end::content[] diff --git a/docs/topics/Disclaimers.adoc b/docs/topics/Disclaimers.adoc index 419778ace..a8e9be57c 100644 --- a/docs/topics/Disclaimers.adoc +++ b/docs/topics/Disclaimers.adoc @@ -21,3 +21,12 @@ Special, incidental or consequential damages arising out of the use or inability Limited to loss of data or data being rendered inaccurate or losses sustained by you or third parties or a failure of The program to operate with any other programs), even if such holder or other party has been advised of the possibility Of such damages. + +== Contact Us + +We are committed to continually improve KeePassXC through customer experience and your feedback is important to us. +Please send us your feedback or comments to team@keepassxc.org. +To report issues, visit: https://github.com/keepassxreboot/keepassxc. + +Thank You, + +Team KeePassXC diff --git a/docs/topics/DownloadInstall.adoc b/docs/topics/DownloadInstall.adoc index ed24e3c79..f5a967ec5 100644 --- a/docs/topics/DownloadInstall.adoc +++ b/docs/topics/DownloadInstall.adoc @@ -38,7 +38,7 @@ To install KeePassXC on Microsoft Windows, perform the following steps: .Install wizard image::install_wizard_1.png[,80%] -2. Click Next and follow the simple instructions on the KeePassXC Setup Wizard to complete the installation. You will have the option to choose your install location, add a desktop shortcut, and launch on startup. +2. Click Next and follow the simple instructions on the KeepPassXC Setup Wizard to complete the installation. You will have the option to choose your install location, add a desktop shortcut, and launch on startup. + .Install wizard (cont) image::install_wizard_2.png[,80%] @@ -59,7 +59,7 @@ image::linux_store.png[] The Snap and Flatpak options are sandboxed applications (more secure). The Native option is installed with the operating system files. Read more about the limitations of these options here: https://keepassxc.org/docs/#faq-appsnap-yubikey[KeePassXC Snap FAQ] -NOTE: KeePassXC stores a configuration file in `~/.local/state` to remember window position, recent files, and other local settings. If you mount this folder to a tmpdisk you will lose settings after reboot. +NOTE: KeePassXC stores a configuration file in `~/.cache` to remember window position, recent files, and other local settings. If you mount this folder to a tmpdisk you will lose settings after reboot. === macOS To install the KeePassXC app on macOS, double click on the downloaded DMG file and use the click and drag option as shown: diff --git a/docs/topics/ImportExport.adoc b/docs/topics/ImportExport.adoc index 4dcce0a25..dad5d98bb 100644 --- a/docs/topics/ImportExport.adoc +++ b/docs/topics/ImportExport.adoc @@ -3,102 +3,60 @@ include::.sharedheader[] :imagesdir: ../images // tag::content[] -== Importing Databases +== Importing External Databases KeePassXC allows you to import external databases from the following options: -* Comma Separated Values (.csv) -* 1Password Export (.1pux) -* 1Password Vault (.opvault) -* Bitwarden (.json) -* Proton Pass (.json) -* KeePass 1 Database (.kdb) -* Remote database (.kdbx) - -To import any of these files, start KeePassXC and either click the `Import File` button on the welcome screen or use the menu Database > Import... to launch the Import Wizard. - -.Import Wizard -image::import_wizard.png[] - -For each of the import options, you will be prompted to select the file to import and then provide credentials to unlock the file, if necessary. You can then choose to import the file into a new database or into an existing database that is already unlocked in KeePassXC. +* Comma-Separated Values (CSV) file +* 1Password OPVault +* KeePass 1 Database === Importing CSV File -WARNING: A CSV file is unencrypted and you should securely delete this file after successfully importing it into KeePassXC. +If you have been saving your URLs, usernames, passwords, and so on in a CSV file, you can migrate all that information from the CSV file to KeePassXC and start using KeePassXC to maintain your data. -1. Follow the steps above and click `Continue`. The CSV import wizard will appear. +To open the CSV file, perform the following steps: -2. On this dialog you can choose the various options for properly importing the data. Analyze the output in the preview at the bottom to determine the correct import settings. You may need to re-map the column associations to match the data in your CSV file. +1. Open KeePassXC. + +2. Click Import from CSV button on the welcome screen or use the menu Database > Import > CSV File. + +3. Navigate to the location of the your CSV file on your computer and open the file. The new database wizard will appear. Follow the steps of creating a new database in Chapter 1. + +4. After saving your new database file, the CSV import wizard will appear. On this dialog you can choose the various options for properly importing the data. You may need to select the _First line has field names_ checkbox before starting. Analyze the output in the preview at the bottom to determine the correct import settings. + .CSV Import Wizard image::csv_import.png[] -3. Click `Done` to complete the import. If you chose to create a new database, the New Database dialog will appear. Otherwise your entries will be nested under the group you chose for the existing database. - -=== Importing from Other Applications -KeePassXC allows you to import databases from various applications including 1Password (1PUX and OPVault), Bitwarden, and Proton Pass. Each import option involves selecting the file, providing necessary credentials (if required), and choosing to import into a new or existing database. Note that CSV, 1Password Export, Bitwarden, and Proton Pass files are unencrypted and should be securely deleted after import. - -==== 1Password Export -WARNING: A 1Password Export file is unencrypted and you should securely delete this file after successfully importing it into KeePassXC. - -1. Open the Import Wizard as shown above. Select the 1Password Export option. - -2. Click `Continue` to unlock and preview the import. Click `Done` to complete the import. - -==== 1Password OPVault -NOTE: You must have 1Password version 7 or 8 to export your data to an OPVault. If you are using a newer version of 1Password, you should use the 1Password Export (1PUX) format instead. +Your CSV file gets imported to KeePassXC and the data is converted to the KeePassXC format for further usage and maintenance. The new database file is saved on to your computer with the default `.kdbx` extension. +=== Importing 1Password OPVault Save your 1Password Vault locally to create an OPVault directory. Please see 1Password instructions on how to do this. Once an OPVault is created, perform the following steps: -1. Open the Import Wizard as shown above. Select the 1Password Vault option. +1. Open KeePassXC. -2. Enter the password for your vault and click `Continue` to unlock and preview the import. Click `Done` to complete the import. +2. Use the menu Database > Import > 1Password Vault. Select the OPVault to import. -==== Bitwarden -WARNING: A Bitwarden Export file may be unencrypted and you should securely delete this file after successfully importing it into KeePassXC. - -1. Open the Import Wizard as shown above. Select the Bitwarden option. - -2. Optionally provide a password to decrypt the Bitwarden export file. You should only need to do this if you have chosen the encrypted json export option within Bitwarden. - -3. Click `Continue` to unlock and preview the import. Click `Done` to complete the import. - -==== Proton Pass -WARNING: A Proton Pass Export file is unencrypted and you should securely delete this file after successfully importing it into KeePassXC. - -1. Open the Import Wizard as shown above. Select the Proton Pass option. - -2. Click `Continue` to preview the import. Click `Done` to complete the import. +3. Enter the password for your OPVault to unlock and import. === Importing KeePass 1 Database -KeePass 1 database is an older format of the database created using a legacy version of KeePass. KeePassXC lets your import this older format of the database and you can seamlessly start using this database in your new KeePassXC application. +KeePass 1 database is an older format of the database created using legacy version of KeePass. KeePassXC lets your import this older format of the database and you can seamlessly start using this database in your new KeePassXC application. To import a KeePass 1 database file in KeePassXC, perform the following steps: -1. Open the Import Wizard as shown above. Select the KeePass1 Database option. +1. Open KeePassXC. -2. Enter the password for your database and optionally provide a key file if it was configured for your KeePass1 database. +2. Click Import from KeePass 1 button on the welcome screen or use the menu Database > Import > KeePass 1 Database. -3. Click `Continue` to unlock and preview the import. Click `Done` to complete the import. +3. Navigate to the location of the your legacy KeePass 1 database file (`.kdb`) on your computer and open the file. You are prompted for the password and the Key file for your `.kdb` file. -=== Importing Remote Database -Database files that are stored in a remote location can be imported or opened with KeePassXC if you provide a command to download the file from the remote location. +4. Enter the password for your old `.kdb` file and click *OK*. You are prompted for provide a name for the new database format that KeePassXC recognizes. -To import (or temporarily open) a remote database file in KeePassXC, perform the following steps: +5. Provide a name for the new database format, select a folder on your computer to save the file, and click Save. -1. Open the Import Wizard as shown above. Select the Remote Database option. - -2. Enter a command to download the remote database. If necessary, enter input that needs to be passed to the command. The command and/or input need a `{TEMP_DATABASE}` placeholder specified where the remote database is temporarily stored. - -3. Enter the password for your database and optionally provide a key file. - -4. Click `Continue` to unlock and preview the import. Click `Done` to complete the import. - -Opening without importing a remote database is possible by selecting Temporary Database in the Import Into section of the wizard. +6. The data from the `.kdb` file gets imported and converted to the new format, which is compatible with KeePassXC. You can now start using the new database file (`.kdbx`) in KeePassXC. == Exporting Databases KeePassXC supports multiple ways to export your database for transfer to another program or to print out and archive. -WARNING: These exports do not contain all the information in your database due to various limitations in the export format. For example, the CSV export does not support attachments, advanced attributes, Auto-Type settings, or custom icons. The XML export does not support attachments. The HTML export is mainly for printing and does not support attachments and some custom data fields. - WARNING: Exporting your database will result in all of your passwords and sensitive information being stored in an unencrypted format. We do not recommend saving your exported database for long periods of time as that can cause a compromise of sensitive information. .Database export menu diff --git a/docs/topics/KeeShare.adoc b/docs/topics/KeeShare.adoc index 882e7f017..75769bdb4 100644 --- a/docs/topics/KeeShare.adoc +++ b/docs/topics/KeeShare.adoc @@ -16,7 +16,7 @@ To use sharing, you need to enable it for the application. .KeeShare Application Settings image::keeshare_application_settings.png[] -=== Setup a Shared Group +=== Sharing Credentials If you checked _Allow export_ in the Sharing settings you can now share a group of passwords. Sharing is always defined on a particular group. If you enable sharing on a group, every entry under this group, and its children, are shared. If you enable sharing on the root node, **every password** inside your database gets shared! NOTE: KeeShare does not synchronize group structure after the initial share is created. At this time, KeeShare operates at the entry level; shared entries moved outside of a shared group are still synchronized. diff --git a/docs/topics/KeyboardShortcuts.adoc b/docs/topics/KeyboardShortcuts.adoc index b968b9813..8d8ab6ca0 100644 --- a/docs/topics/KeyboardShortcuts.adoc +++ b/docs/topics/KeyboardShortcuts.adoc @@ -3,62 +3,47 @@ include::.sharedheader[] :imagesdir: ../images // tag::content[] -NOTE: On macOS please substitute kbd:[Ctrl] with kbd:[Cmd] (AKA kbd:[⌘]). +NOTE: On macOS please substitute `Ctrl` with `Cmd` (aka `⌘`). [grid=rows, frame=none, width=75%] |=== -|Action | Keyboard Shortcut +|Action | Keyboard Shortcut -|Settings | kbd:[Ctrl + ,] -|Open Database | kbd:[Ctrl + O] -|Save Database | kbd:[Ctrl + S] -|Save Database As | kbd:[Ctrl + Shift + S] -|New Database | kbd:[Ctrl + Shift + N] -|Close Database | kbd:[Ctrl + W] + -_or_ + -kbd:[Ctrl + F4] -|Lock Current Database | kbd:[Ctrl + L] -|Lock All Databases | kbd:[Ctrl + Shift + L] -|Database Settings | kbd:[Ctrl + Shift + ,] -|Database Reports | kbd:[Ctrl + Shift + R] -|Quit | kbd:[Ctrl + Q] -|New Entry | kbd:[Ctrl + N] -|Edit Entry | kbd:[Enter] + -_or_ + -kbd:[Ctrl + E] -|Delete Entry | kbd:[Del] -|Clone Entry | kbd:[Ctrl + D] -|Copy Username | kbd:[Ctrl + B] -|Copy Password | kbd:[Ctrl + C] -|Copy URL | kbd:[Ctrl + U] -|Open URL | kbd:[Ctrl + Shift + U] -|Copy TOTP | kbd:[Ctrl + T] -|Copy Password and TOTP | kbd:[Ctrl + Y] -|Show TOTP | kbd:[Ctrl + Shift + T] -|Trigger AutoType | kbd:[Ctrl + Shift + V] -|Add key to SSH Agent | kbd:[Ctrl + H] -|Remove key from SSH Agent | kbd:[Ctrl + Shift + H] -|Move entry up (if unsorted) | kbd:[Ctrl + Alt + Up] -|Move entry down (if unsorted) | kbd:[Ctrl + Alt + Down] -|Sort Groups A-Z | kbd:[Ctrl + Down] -|Sort Groups Z-A | kbd:[Ctrl + Up] -|Minimize Window | kbd:[Ctrl + M] -|Hide Window | kbd:[Ctrl + Shift + M] -|Select Next Database Tab | kbd:[Ctrl + Tab] + -_or_ + -kbd:[Ctrl + PgDn] -|Select Previous Database Tab | kbd:[Ctrl + Shift + Tab] + -_or_ + -kbd:[Ctrl + PgUp] -|Select the nth database | kbd:[Ctrl + <n>], where kbd:[<n>] is the number of the database tab -|Toggle Passwords Hidden | kbd:[Ctrl + Shift + C] -|Toggle Usernames Hidden | kbd:[Ctrl + Shift + B] -|Focus Groups (edit if focused) | kbd:[F1] -|Focus Entries (edit if focused) | kbd:[F2] -|Focus Search | kbd:[F3] + -_or_ + -kbd:[Ctrl + F] -|Clear Search | kbd:[Esc] -|Show Keyboard Shortcuts | kbd:[Ctrl + /] +|Settings | Ctrl + , +|Open Database | Ctrl + O +|Save Database | Ctrl + S +|Save Database As | Ctrl + Shift + S +|New Database | Ctrl + Shift + N +|Close Database | Ctrl + W ; Ctrl + F4 +|Lock All Databases | Ctrl + L +|Database Settings | Ctrl + Shift + , +|Database Reports | Ctrl + Shift + R +|Quit | Ctrl + Q +|New Entry | Ctrl + N +|Edit Entry | Enter ; Ctrl + E +|Delete Entry | Delete +|Clone Entry | Ctrl + K +|Copy Username | Ctrl + B +|Copy Password | Ctrl + C +|Copy URL | Ctrl + U +|Open URL | Ctrl + Shift + U +|Copy TOTP | Ctrl + T +|Copy Password and TOTP | Ctrl + Y +|Show TOTP | Ctrl + Shift + T +|Trigger AutoType | Ctrl + Shift + V +|Add key to SSH Agent | Ctrl + H +|Remove key from SSH Agent | Ctrl + Shift + H +|Minimize Window | Ctrl + M +|Hide Window | Ctrl + Shift + M +|Select Next Database Tab | Ctrl + Tab ; Ctrl + PageDn +|Select Previous Database Tab | Ctrl + Shift + Tab ; Ctrl + PageUp +|Select the nth database | Ctrl + n, where n is the number of the database tab +|Toggle Passwords Hidden | Ctrl + Shift + C +|Toggle Usernames Hidden | Ctrl + Shift + B +|Focus Groups (edit if focused) | F1 +|Focus Entries (edit if focused) | F2 +|Focus Search | F3 ; Ctrl + F +|Clear Search | Escape +|Show Keyboard Shortcuts | Ctrl + / |=== // end::content[] diff --git a/docs/topics/Passkeys.adoc b/docs/topics/Passkeys.adoc deleted file mode 100644 index bfb472024..000000000 --- a/docs/topics/Passkeys.adoc +++ /dev/null @@ -1,104 +0,0 @@ -= KeePassXC – Passkeys -include::.sharedheader[] -:imagesdir: ../images - -// tag::content[] -== Passkeys - -Passkeys are a secure way for replacing passwords that is supported by all major browser vendors and an increasing number of websites. For more information on what passkeys are and how they work, please go to the FIDO Alliance's documentation: https://fidoalliance.org/passkeys/ - -=== Browser Passkey Support - -KeePassXC supports passkeys directly through the Browser Integration service. Passkeys are only supported with the use of the KeePassXC Browser Extension and a properly connected database. To enable passkey support on the extension, you must check the _Enable Passkeys_ option in the extension settings page. - -.Enable Passkey Support in the KeePassXC Browser Extension -image::passkeys_enable_from_extension.png[,75%] - -Optionally, you can disable falling back to the built-in passkey support from your browser and operating system. If left enabled, the extension will show the default passkey dialogs if KeePassXC cannot handle the request or the request is canceled. - -=== Create a New Passkey - -Creating a new passkey and authenticating with it is a simple process. This workflow will be demonstrated using GitHub as an example site. Please note that GitHub allows two use cases for passkeys, one for 2FA only and the other for replacement of username and password entirely. We will be configuring the latter use case in this example. - -After navigating to GitHub's _Settings_ -> _Password and authentication_, there is a separate section shown for passkeys. - -.GitHub's Passkey Registration -image::passkeys_github_1.png[] - -After clicking the _Add a passkey_ button, the user is redirected to another page showing the actual configuration option. - -.Configure Passwordless Authentication -image::passkeys_github_2.png[,50%] - -Clicking the _Add passkey_ button now shows the following popup dialog for the user, asking confirmation for creating a new passkey. - -.Passkey Registration Confirmation Dialog -image::passkeys_register_dialog.png[,30%] - -After the passkey has been registered, a new entry is created to the database under _KeePassXC-Browser Passwords_ with _(passkey)_ added to the entry title. The entry holds additional attributes that are used for authenticating the passkey. - -After registration, GitHub will ask a name for the passkey. This is only relevant for the server. - -.GitHub's Passkey Nickname -image::passkeys_github_3.png[,50%] - -Now the passkey should be shown on the GitHub's passkey section. - -.Registered Passkeys on GitHub -image::passkeys_github_4.png[] - -=== Login With a Passkey - -The passkey created in the previous section can now be used to login to GitHub. Instead of logging in with normal credentials, choose _Sign in with a passkey_ at the bottom of GitHub's login page. - -.GitHub's login page with a Passkey option -image::passkeys_github_5.png[,50%] - -After clicking the button, KeePassXC-Browser detects the passkeys authentication and KeePassXC shows the following dialog for confirmation. - -.Passkey authentication confirmation dialog -image::passkeys_authentication_dialog.png[,50%] - -After confirmation user is now authenticated and logged into GitHub. - -// tag::advanced[] -=== Advanced Usage - -==== Multiple Passkeys for a Site - -Multiple passkeys can be created for a single site. When registering a new passkey with a different username, KeePassXC shows an option to register a new passkey or update the previous one. Updating a passkey will override the existing entry, so this option should be only used when actually needed. - -.Passkey authentication confirmation dialog -image::passkeys_update_dialog.png[,50%] - -==== Exporting Passkeys - -All passkeys in a database can be viewed and accessed from the _Database_ -> _Passkeys..._ menu item. The page shows both _Import_ and _Export_ buttons for passkeys. - -.Passkeys Overview -image::passkeys_all_passkeys.png[] - -After selecting one or more entries, the following dialog is shown. One or multiple passkeys can be selected for export from the previously selected list of entries. - -.Passkeys Export Dialog -image::passkeys_export_dialog.png[,65%] - -Exported passkeys are stored in JSON format using the `.passkey` file extension. The file includes all relevant information for importing a passkey to another database or saving a backup. - -WARNING: The exported passkey file is unencrypted and should be securely stored. - -==== Importing Passkeys - -An exported passkey can be imported directly to a database or to an entry. To import directly, use the _Database_ -> _Import Passkey_ menu item. -When right-clicking an entry, a separate menu item for _Import Passkey_ is shown. This is useful if user wants to import a previously created passkey to an existing entry. - -.Import Passkey to an Entry -image::passkeys_import_passkey_to_entry.png[,50%] - -After selecting a passkey file to import, a separate dialog is shown where you can select which database, group, and entry to target. By default, the group is set to _Imported Passkeys_. The default action is to create a new entry that contains the imported passkey. - -.Passkey import dialog -image::passkeys_import_dialog.png[,65%] - -// end::advanced[] -// end::content[] diff --git a/docs/topics/PasswordGenerator.adoc b/docs/topics/PasswordGenerator.adoc index b36b2ed9a..a1f1915e9 100644 --- a/docs/topics/PasswordGenerator.adoc +++ b/docs/topics/PasswordGenerator.adoc @@ -19,8 +19,9 @@ image::password_generator.png[] 3. Select the length of the desired password by dragging the Length slider. 4. Select the character-sets that you want to include in your password. -5. Use the regenerate button (kbd:[Ctrl + R]) to make a new password using the chosen options. -6. Use the clipboard button (kbd:[Ctrl + C]) to copy the generated password to the clipboard. +5. Use the regenerate button (Ctrl + R) to make a new password using the chosen options. +6. Use the clipboard button (Ctrl + C) to copy the generated password to the clipboard. +// tag::advanced[] 7. Click the Advanced button to specify additional conditions for your desired password. + .Advanced Password Generator Options @@ -39,6 +40,7 @@ Word Count slider. 3. In the Word Separator field, enter a character, word, number, or space that you want to use as a separator between the words in your passphrase. 4. _(Optional)_ You can choose a word case between lower, upper, and title case options. 5. _(Optional)_ You can also load your own custom word lists. Click the plus sign button to the right of the wordlist selection dialog to choose a custom word list. You can download alternative lists from the https://www.eff.org/deeplinks/2016/07/new-wordlists-random-passphrases[EFF's Website] or from https://github.com/redacted/XKCD-password-generator#additional-languages[GitHub]. -6. Click the Regenerate button (kbd:[Ctrl + R]) to generate a new random passphrase. -7. Click the Clipboard button (kbd:[Ctrl + C]) to copy the passphrase to the clipboard. +6. Click the Regenerate button (Ctrl + R) to generate a new random passphrase. +7. Click the Clipboard button (Ctrl + C) to copy the passphrase to the clipboard. +// end::advanced[] // end::content[] diff --git a/docs/topics/Reference.adoc b/docs/topics/Reference.adoc index b677efb6b..4171ed9a5 100644 --- a/docs/topics/Reference.adoc +++ b/docs/topics/Reference.adoc @@ -18,8 +18,6 @@ This section contains full details on advanced features available in KeePassXC. |{NOTES} |Notes |{TOTP} |Current TOTP value (if configured) |{S:<ATTRIBUTE_NAME>} |Value for the given attribute (case sensitive) -|{T-CONV:/<PLACEHOLDER>/<METHOD>/} |Text conversion for resolved placeholder (eg, {USERNAME}) using the following methods: UPPER, LOWER, BASE64, HEX, URI, URI-DEC -|{T-REPLACE-RX:/<PLACEHOLDER>/<REGEX>/<REPLACE>/} |Use a regular expression to find and replace data from a resolved placeholder (eg, {USERNAME}). Refer to match groups using $1, $2, etc. |{URL:RMVSCM} |URL without scheme (e.g., https) |{URL:WITHOUTSCHEME} |URL without scheme |{URL:SCM} |URL Scheme @@ -77,8 +75,8 @@ Examples: + |Press the corresponding keyboard key |{UP}, {DOWN}, {LEFT}, {RIGHT} |Press the corresponding arrow key -|{F1}, {F2}, ..., {F16} |Press kbd:[F1], kbd:[F2], etc. -|{LEFTBRACE}, {RIGHTBRACE} |Press kbd:[{] or kbd:[}], respectively +|{F1}, {F2}, ..., {F16} |Press F1, F2, etc. +|{LEFTBRACE}, {RIGHTBRACE} |Press `{` or `}`, respectively |{<KEY> X} |Repeat <KEY> X times (e.g., {SPACE 5} inserts five spaces) |{DELAY=X} |Set delay between key presses to X milliseconds |{DELAY X} |Pause typing for X milliseconds @@ -90,10 +88,10 @@ Examples: + |=== |Modifier |Description -|+ |kbd:[Shift] -|^ |kbd:[Ctrl] -|% |kbd:[Alt] -|# |kbd:[Win]/kbd:[Cmd] +|+ |SHIFT +|^ |CTRL +|% |ALT +|# |WIN/CMD |=== *Text Conversions:* @@ -126,21 +124,5 @@ Use regular expressions to find and replace data from a resolved placeholder. Re `C:\Backups\MyDatabase\01-05-2022.kdbx` |=== -=== Creating a YubiKey backup -It is advisable to have a backup replica YubiKey In case your main YubiKey gets damaged, lost, or stolen. The same HMAC key will need to be written to both keys. To do this you can either use the YubiKey Personalization Tool GUI or the ykpersonalize CLI tool. The steps for the CLI tool are shown: - -1. Create a 20 byte HMAC key: -+ -``` -dd status=none if=/dev/random bs=20 count=1 | xxd -p -c 40 -``` - -2. Write the HMAC key to slot 2 _(Set through the first switch. Out of the box the YubiKey OTP resides in slot 1)_: -+ -``` -ykpersonalize -2 -a -ochal-resp -ochal-hmac -ohmac-lt64 -oserial-api-visible -oallow-update -``` - -You will be asked to enter the HMAC key you created earlier, copy/paste they key output in the first step. Repeat step 2 for your second YubiKey using the same HMAC key from before. We recommend storing your HMAC key in a safe place (e.g., printed on paper) in case you need to recreate another key. // end::content[] diff --git a/docs/topics/SSHAgent.adoc b/docs/topics/SSHAgent.adoc index 8b385c64c..5539e0e67 100644 --- a/docs/topics/SSHAgent.adoc +++ b/docs/topics/SSHAgent.adoc @@ -3,12 +3,12 @@ include::.sharedheader[] :imagesdir: ../images // tag::content[] -== SSH Agent Integration +== SSH Agent integration SSH (Secure Shell) is a widely used remote secure shell protocol and is considered an industry standard for secure remote access to UNIX-like systems including Linux, BSDs, macOS and more recently even Windows received native support. SSH supports multiple types of authentication and the most widely used ones are either interactive keyboard input with a password or a public-key cryptography pair of keys. KeePassXC SSH Agent integration is built to manage SSH keys in a secure manner by either storing them completely within your KeePassXC database or by having only the decryption key of a key file that is stored elsewhere. SSH Agent integration _does not_ provide an agent itself but works as a client for any agent implementation that is OpenSSH compatible. -=== OpenSSH Agent on Linux +=== OpenSSH agent on Linux If you are using a modern desktop Linux distribution it is very likely the OpenSSH agent is already configured and running when you have logged in to a graphical desktop session. This should be true for distributions like Debian, Ubuntu (including Kubuntu, Xubuntu and Lubuntu), Linux Mint, Fedora, ElementaryOS and Manjaro. @@ -32,10 +32,10 @@ WARNING: _GNOME Keyring_ prior to release 3.27.92 had its own custom implementat It does not support any constraints you may want to configure for an added key. If you are running a modern distribution the custom agent has been removed and replaced with the stock OpenSSH agent which is feature complete. -=== OpenSSH Agent on macOS +=== OpenSSH agent on macOS Apple has made OpenSSH an integrated part of macOS with automatic agent startup when it is first used. No further configuration is needed. -=== OpenSSH Agent and Pageant on Windows +=== OpenSSH agent and Pageant on Windows The SSH Agent integration on Windows supports both _PuTTY Pageant_ and _OpenSSH for Windows 10_. Since Pageant is currently still the most widely used implementation and is easily installable on any version of Windows, it is the default on KeePassXC. However, Microsoft includes a native OpenSSH client implementation with Windows 10 since autumn 2018 that can be used instead. If you would like to self-manage your OpenSSH version you can use the builds offered via their official https://github.com/powershell/Win32-OpenSSH[GitHub repository]. @@ -61,7 +61,7 @@ Alternatively, you can use a _Windows PowerShell_ running as _Administrator_ to KeePassXC and other compatible tools can now use the Windows OpenSSH agent. To use it with KeePassXC, update the settings explained in <>. -=== Setup SSH Agent Integration +=== Setting up SSH Agent integration By default the SSH Agent integration plugin is disabled. To enable integration, follow the steps below to access the settings: @@ -78,10 +78,10 @@ On Windows, you have the option to select _Pageant_ and/or _OpenSSH for Windows_ If the value of _SSH_AUTH_SOCK_ is empty it means the agent is not properly configured and KeePassXC will be unable to connect to it unless you provide a static override path to the socket. -=== Generating an SSH Key +=== Generating a key to use with KeePassXC KeePassXC only supports keys in the _OpenSSH_ format. On Windows, _PuTTYgen_ saves keys in its own format by default and you will need to convert them to OpenSSH format before being used. In this guide we are going to generate a standard RSA key in the default size. -==== Generating a key on Linux or macOS +==== Generating a key on Linux or macOS with _ssh-keygen_ Open a terminal window and type the following command to generate a key: $ ssh-keygen -o -f keepassxc -C johndoe@example @@ -116,13 +116,13 @@ With KeePassXC you only need the first file listed. ==== Generating a key on Windows On Windows you can generate key pairs with _PuTTYgen_ and with _ssh-keygen_, depending on whether you installed PuTTY and your Windows version. -===== Using PuTTYgen +===== Using _PuTTYgen_ Please read the manual on how to use _PuTTYgen_ for details on generate a key: https://the.earth.li/~sgtatham/putty/0.74/htmldoc/Chapter8.html#pubkey-puttygen. Once generated, you must save the key in the new OpenSSH format, see image below. .Generating a key with _PuTTYgen_ image::sshagent_puttygen.png[,70%] -===== Using ssh-keygen +===== Using _ssh-keygen_ Open _Command Prompt_ or _Windows PowerShell_ and type the following command to generate a key: PS C:\Users\user> ssh-keygen.exe -o -f keepassxc -C johndoe@example @@ -159,7 +159,7 @@ Now we can see two files were generated: With KeePassXC you only need the first file listed. -=== Adding SSH Key to an Entry +=== Configuring an entry to use SSH Agent The last step is to setup an entry to contain the SSH Agent settings and key file you generated. 1. Create a new entry, or open an existing entry in edit mode. diff --git a/docs/topics/UserInterface.adoc b/docs/topics/UserInterface.adoc index 66a06fafb..b60b28a66 100644 --- a/docs/topics/UserInterface.adoc +++ b/docs/topics/UserInterface.adoc @@ -12,11 +12,11 @@ image::main_interface.png[] *(A) Groups* – Organize your entries into discrete groups to bring order to all of your sensitive information. Groups can be nested under each other to create a hierarchy. Settings from parent groups get applied to their children. You can hide this panel on the View menu. -*(B) Searches and Tags* – Dynamic groups of entries that can be quickly displayed with one click. Any number of custom tags can be added when editing an entry. This panel also includes useful pre-defined and custom saved searches, such as finding expired and weak passwords. +*(B) Tags* – Dynamic groups of entries that can be quickly displayed with one click. Any number of custom tags can be added when editing an entry. This panel also includes useful pre-defined searches, such as finding expired and weak passwords. -*\(C) Entries* – Entries contain all the information for a website or application you are storing in KeePassXC. This view shows all the entries in the selected group. Each column can be resized, reordered, and shown or hidden based on your preference. Right-click the header row to see all available options. +*\(C) Entries* – Entries contain all the information you want to store for a website or application you are storing in KeePassXC. This view shows all the entries in the selected group. Each column can be resized, reordered, and shown or hidden based on your preference. Right-click the header row to see all available options. -*(D) Preview* – Shows a preview of the selected group or entry. You can interact with most information stored in an entry from here without opening the entry for editing. You can temporarily hide this preview using the down-arrow button on the right hand side or completely disable it from the View menu. +*(D) Preview* – Shows a preview of the selected group or entry. You can temporarily hide this preview using the close button on the right hand side or completely disabled in the application settings. TIP: You can enable double-click copying of entry username and password in the Application Security Settings. This is turned off by default starting with version 2.7.0. @@ -29,17 +29,13 @@ image::toolbar.png[] *(A) Database* – Open Database, Save Database, Lock Database + *(B) Entries* – Create Entry, Edit Entry, Delete Selected Entries + *\(C) Entry Data* – Copy Username, Copy Password, Copy URL, Perform Auto-Type + -*(D) Tools* – Database Settings, Reports, Password Generator, Application Settings + +*(D) Tools* – Password Generator, Application Settings + *(E) Search* -=== Screenshot Security -By default, KeePassXC prevents recordings and screenshots of the application window on Windows and macOS. This prevents inadvertent spillage of information during meetings and disallows other applications to capture the window contents. If you would like to enable screen capture temporarily, navigate to _View_ menu and select _Allow Screen Capture_. Alternatively, you can start the application with the `--allow-screencapture` command line flag. +=== Application Settings +Users can configure KeePassXC to their personal tastes with a wide variety of general and security settings that apply to the whole application. These settings are accessible from _Tools_ -> _Settings_ or the cog wheel icon from the toolbar. Settings include: startup options, file management, entry management, user interface, language, security timeouts, and convenience. - -=== View Options -You can customize the appearance of KeePassXC to your liking. The following options are available in the _View_ menu: - -==== Themes +==== Setting the Theme KeePassXC ships with light and dark themes specifically designed to meet accessibility standards. In most cases, the appropriate theme for your system will be determined automatically, but you can always set a specific theme by using the _View_ menu. When a new theme is selected you will be prompted to restart KeePassXC to apply the theme immediately. .Setting the theme @@ -51,8 +47,8 @@ For users with smaller screens or those who desire seeing more entries at once, .Compact mode comparison image::compact_mode_comparison.png[] -=== Application Settings -Users can configure KeePassXC to their personal tastes with a wide variety of general and security settings that apply to the whole application. These settings are accessible from _Tools_ -> _Settings_ or the cog wheel icon from the toolbar. Settings include: startup options, file management, entry management, user interface, language, security controls, and integration settings (Auto-Type, Browser, etc). +=== Screenshot Security +By default, KeePassXC prevents recordings and screenshots of the application window on Windows and macOS. This prevents inadvertent spillage of information during meetings and disallows other applications to capture the window contents. If you would like to enable screen capture, you must start the application with the `--allow-screencapture` command line flag. === Keyboard Shortcuts include::KeyboardShortcuts.adoc[tag=content, leveloffset=+1] @@ -81,7 +77,6 @@ Arguments: filename(s) filenames of the password databases to open (*.kdbx) ---- -=== Environment Variables Additionally, the following environment variables may be useful when running the application: [grid=rows, frame=none, width=75%] @@ -91,22 +86,10 @@ Additionally, the following environment variables may be useful when running the |KPXC_CONFIG | Override default path to roaming configuration file |KPXC_CONFIG_LOCAL | Override default path to local configuration file |KPXC_INITIAL_DIR | Override initial location picking for databases -|SSH_AUTH_SOCK | Path of the unix file socket that the agent uses for communication with other processes (SSH Agent) +|SSH_AUTH_SOCKET | Path of the unix file socket that the agent uses for communication with other processes (SSH Agent) |QT_SCALE_FACTOR [numeric] | Defines a global scale factor for the whole application, including point-sized fonts. |QT_SCREEN_SCALE_FACTORS [list] | Specifies scale factors for each screen. See https://doc.qt.io/qt-5/highdpi.html#high-dpi-support-in-qt |QT_SCALE_FACTOR_ROUNDING_POLICY | Control device pixel ratio rounding to the nearest integer. See https://doc.qt.io/qt-5/highdpi.html#high-dpi-support-in-qt |=== - -=== Installer Options -The following options can be set when running the Windows Installer MSI in an unattended installation: - -* *LAUNCHAPPONEXIT* – Launch KeePassXC after install (default ON) -* *AUTOSTARTPROGRAM* – KeePassXC will auto-start on login (default ON) -* *INSTALLDESKTOPSHORTCUT* – A desktop icon will be installed (default OFF) - -Example: `msiexec.exe /q /i KeePassXC-Y.Y.Y-WinZZ.msi AUTOSTARTPROGRAM=0` - -== Command Line Tool -KeePassXC comes with the command line tool *keepassxc-cli* to access, view, and manipulate your database directly from a terminal window. The tool is documented through a separate man page, which can be shown using `man keepassxc-cli`, or through the on-demand help using `keepassxc-cli [command] -h`. An online version of the man page is https://github.com/keepassxreboot/keepassxc/blob/latest/docs/man/keepassxc-cli.1.adoc[available on GitHub]. // end::advanced[] // end::content[] diff --git a/docs/topics/Welcome.adoc b/docs/topics/Welcome.adoc index 65de19a5f..ec44b6e53 100644 --- a/docs/topics/Welcome.adoc +++ b/docs/topics/Welcome.adoc @@ -26,13 +26,12 @@ KeePassXC has numerous features for novice and power users alike. This guide wil ** Password generator ** Auto-Type passwords into applications ** Browser integration with Google Chrome, Mozilla Firefox, Microsoft Edge, Chromium, Vivaldi, Brave, and Tor-Browser - ** Support for passkeys using the browser integration ** Entry icon download - ** Import databases from CSV, 1Password, Bitwarden, Proton Pass, and KeePass1 formats + ** Import databases from CSV, 1Password, and KeePass1 formats * Advanced Features ** Database reports (password health, HIBP, and statistics) - ** Database export to CSV, XML, and HTML formats + ** Database export to CSV and HTML formats ** TOTP storage and generation ** Field references between entries ** File attachments and custom attributes @@ -44,18 +43,6 @@ KeePassXC has numerous features for novice and power users alike. This guide wil ** SSH Agent ** FreeDesktop.org Secret Service (replace Gnome keyring, etc.) ** Additional encryption choices: Twofish and ChaCha20 - -== Contact Us - -We are committed to continually improve KeePassXC through customer experience and your feedback is important to us. -Please report any bugs you encounter at our https://github.com/keepassxreboot/keepassxc/issues[GitHub issue tracker]. - -We are also https://matrix.to/#/#keepassxc-community:mozilla.org[available on Matrix] for real-time feedback and -discussions. See our https://keepassxc.org/team/#contact[contact page] for further options. - -Thank You, + -Team KeePassXC - // end::content[] // tag::advanced[] // end::advanced[] diff --git a/release-tool b/release-tool index 43f058000..0f43ec632 100755 --- a/release-tool +++ b/release-tool @@ -1445,7 +1445,7 @@ i18n() { elif [ "$cmd" == "tx-pull" ]; then logInfo "Pulling updated translations from Transifex..." - tx pull -af --minimum-perc=60 -r "$resource" $@ + tx pull -af --minimum-perc=45 --parallel -r "$resource" $@ fi } diff --git a/release-tool.ps1 b/release-tool.ps1 index c9db231f6..b0023cabf 100644 --- a/release-tool.ps1 +++ b/release-tool.ps1 @@ -19,7 +19,7 @@ The following are descriptions of certain parameters: -Compiler Compiler to use (example: g++, clang, msbuild) -MakeOptions Options to pass to the make program -SignBuild Perform platform specific App Signing before packaging - -SignCert Specify the App Signing Certificate + -SignKey Specify the App Signing Key/Identity -TimeStamp Explicitly set the timestamp server to use for appsign -SourceBranch Source branch to merge from (default: 'release/$Version') -TargetBranch Target branch to merge to (default: master) @@ -65,7 +65,7 @@ param( [string] $MakeOptions, [Parameter(ParameterSetName = "build")] [Parameter(ParameterSetName = "sign")] - [X509Certificate] $SignCert, + [string] $SignKey, [Parameter(ParameterSetName = "build")] [Parameter(ParameterSetName = "sign")] [string] $Timestamp = "http://timestamp.sectigo.com", @@ -103,7 +103,10 @@ function Test-RequiredPrograms { Get-Command tx | Out-Null Get-Command lupdate | Out-Null } - if ($Sign) { + if ($Sign -or $SignBuild) { + if ($SignKey.Length) { + Get-Command signtool | Out-Null + } Get-Command gpg | Out-Null } } @@ -138,8 +141,7 @@ function Test-WorkingTreeClean { function Invoke-VSToolchain([String] $Toolchain, [String] $Path, [String] $Arch) { # Find Visual Studio installations - $vs = Get-CimInstance MSFT_VSInstance -Namespace root/cimv2/vs - + $vs = Get-CimInstance MSFT_VSInstance if ($vs.count -eq 0) { $err = "No Visual Studio installations found, download one from https://visualstudio.com/downloads." $err = "$err`nIf Visual Studio is installed, you may need to repair the install then restart." @@ -195,43 +197,20 @@ function Invoke-Cmd([string] $command, [string[]] $options = @(), [switch] $mask Write-Host #insert newline after command output } -function Find-SignCert() { - $certs = Get-ChildItem Cert:\CurrentUser\My -codesign - if ($certs.Count -eq 0) { - throw "No code signing certificate found in User certificate store" - } elseif ($certs.Count -gt 1) { - # Ask the user which to use - $i = 0 - foreach ($_ in $certs) { - $i = $i + 1 - $i.ToString() + ") $($_.Thumbprint) - $($_.NotAfter)" | Write-Host - } - $i = Read-Host -Prompt "Which certificate do you want to use?" - $i = [Convert]::ToInt32($i, 10) - 1 - if ($i -lt 0 -or $i -ge $certs.count) { - throw "Invalid selection made" - } - return $certs[$i] - } else { - Write-Host "Found signing certificate: $($certs[0].Subject) ($($certs[0].Thumbprint))" -ForegroundColor Cyan - Write-Host - return $certs[0] +function Invoke-SignFiles([string[]] $files, [string] $key, [string] $time) { + if (!(Test-Path -Path "$key" -PathType leaf)) { + throw "Appsign key file was not found! ($key)" } -} - -function Invoke-SignFiles([string[]] $files, [X509Certificate] $cert, [string] $time) { if ($files.Length -eq 0) { return } - Write-Host "Signing files using $($cert.Subject) ($($cert.Thumbprint))" -ForegroundColor Cyan - + Write-Host "Signing files using $key" -ForegroundColor Cyan + $KeyPassword = Read-Host "Key password: " -MaskInput + foreach ($_ in $files) { - $sig = Get-AuthenticodeSignature -FilePath "$_" -ErrorAction SilentlyContinue - if ($sig.Status -ne "Valid") { - Write-Host "Signing file '$_'" - $tmp = Set-AuthenticodeSignature -Certificate $cert -FilePath "$_" -TimestampServer "$Timestamp" -HashAlgorithm "SHA256" - } + Write-Host "Signing file '$_' using Microsoft signtool..." + Invoke-Cmd "signtool" "sign -f `"$key`" -p `"$KeyPassword`" -d `"KeePassXC`" -td sha256 -fd sha256 -tr `"$time`" `"$_`"" -maskargs } } @@ -308,7 +287,7 @@ if ($Merge) { "-extensions c,cpp,h,js,mm,qrc,ui -no-obsolete ./src -ts share/translations/keepassxc_en.ts" Write-Host "Pulling updated translations from Transifex..." - Invoke-Cmd "tx" "pull -af --minimum-perc=60 -r keepassxc.share-translations-keepassxc-en-ts--develop" + Invoke-Cmd "tx" "pull -af --minimum-perc=60 --parallel -r keepassxc.share-translations-keepassxc-en-ts--develop" # Only commit if there are changes $changes = & git status --porcelain @@ -351,10 +330,6 @@ if ($Merge) { # Find Visual Studio and establish build environment Invoke-VSToolchain $VSToolChain $SourceDir -Arch "amd64" - if ($SignBuild -and !$SignCert) { - $SignCert = Find-SignCert - } - Test-RequiredPrograms if ($Snapshot) { @@ -406,14 +381,8 @@ if ($Merge) { Invoke-Cmd "cmake" "--build . --config Release -- $MakeOptions" if ($SignBuild) { - $VcpkgDir = $BuildDir + "\vcpkg_installed\" - if (Test-Path $VcpkgDir) { - $files = Get-ChildItem $VcpkgDir -Filter "*.dll" -Recurse -File | - Where-Object {$_.FullName -notlike "$VcpkgDir*debug\*" -and $_.FullName -notlike "$VcpkgDir*tools\*"} | - ForEach-Object {$_.FullName} - } - $files += Get-ChildItem "$BuildDir\src" -Include "*keepassxc*.exe", "*keepassxc*.dll" -Recurse -File | ForEach-Object { $_.FullName } - Invoke-SignFiles $files $SignCert $Timestamp + $files = Get-ChildItem "$BuildDir\src" -Include "*keepassxc*.exe", "*keepassxc*.dll" -Recurse -File | ForEach-Object { $_.FullName } + Invoke-SignFiles $files $SignKey $Timestamp } Write-Host "Create deployment packages..." -ForegroundColor Cyan @@ -426,7 +395,7 @@ if ($Merge) { # Sign MSI files using AppSign key $files = Get-ChildItem $OutDir -Include "*.msi" -Name - Invoke-SignFiles $files $SignCert $Timestamp + Invoke-SignFiles $files $SignKey $Timestamp # Sign all output files using the GPG key then hash them $files = Get-ChildItem $OutDir -Include "*.msi", "*.zip" -Name @@ -437,12 +406,13 @@ if ($Merge) { Invoke-Command {git checkout $OrigBranch} Set-Location "$OrigDir" } elseif ($Sign) { - Test-RequiredPrograms - - if (!$SignCert) { - $SignCert = Find-SignCert + if (Test-Path $SignKey) { + # Need to include path to signtool program + Invoke-VSToolchain $VSToolChain $SourceDir -Arch "amd64" } + Test-RequiredPrograms + # Resolve wildcard paths $ResolvedFiles = @() foreach ($_ in $SignFiles) { @@ -450,216 +420,179 @@ if ($Merge) { } $AppSignFiles = $ResolvedFiles.Where({ $_ -match "\.(msi|exe|dll)$" }) - Invoke-SignFiles $AppSignFiles $SignCert $Timestamp + Invoke-SignFiles $AppSignFiles $SignKey $Timestamp $GpgSignFiles = $ResolvedFiles.Where({ $_ -match "\.(msi|zip|gz|xz|dmg|appimage)$" }) Invoke-GpgSignFiles $GpgSignFiles $GpgKey } # SIG # Begin signature block -# MIImVAYJKoZIhvcNAQcCoIImRTCCJkECAQExDzANBglghkgBZQMEAgEFADB5Bgor +# MIIfXAYJKoZIhvcNAQcCoIIfTTCCH0kCAQExDzANBglghkgBZQMEAgEFADB5Bgor # BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG -# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCCRMgDV7DQ6PzRo -# 3ULpsxL1VU2JvIFnZPXlxq/hkfU2Y6CCH2owggYUMIID/KADAgECAhB6I67aU2mW -# D5HIPlz0x+M/MA0GCSqGSIb3DQEBDAUAMFcxCzAJBgNVBAYTAkdCMRgwFgYDVQQK -# Ew9TZWN0aWdvIExpbWl0ZWQxLjAsBgNVBAMTJVNlY3RpZ28gUHVibGljIFRpbWUg -# U3RhbXBpbmcgUm9vdCBSNDYwHhcNMjEwMzIyMDAwMDAwWhcNMzYwMzIxMjM1OTU5 -# WjBVMQswCQYDVQQGEwJHQjEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMSwwKgYD -# VQQDEyNTZWN0aWdvIFB1YmxpYyBUaW1lIFN0YW1waW5nIENBIFIzNjCCAaIwDQYJ -# KoZIhvcNAQEBBQADggGPADCCAYoCggGBAM2Y2ENBq26CK+z2M34mNOSJjNPvIhKA -# VD7vJq+MDoGD46IiM+b83+3ecLvBhStSVjeYXIjfa3ajoW3cS3ElcJzkyZlBnwDE -# JuHlzpbN4kMH2qRBVrjrGJgSlzzUqcGQBaCxpectRGhhnOSwcjPMI3G0hedv2eNm -# GiUbD12OeORN0ADzdpsQ4dDi6M4YhoGE9cbY11XxM2AVZn0GiOUC9+XE0wI7CQKf -# OUfigLDn7i/WeyxZ43XLj5GVo7LDBExSLnh+va8WxTlA+uBvq1KO8RSHUQLgzb1g -# bL9Ihgzxmkdp2ZWNuLc+XyEmJNbD2OIIq/fWlwBp6KNL19zpHsODLIsgZ+WZ1AzC -# s1HEK6VWrxmnKyJJg2Lv23DlEdZlQSGdF+z+Gyn9/CRezKe7WNyxRf4e4bwUtrYE -# 2F5Q+05yDD68clwnweckKtxRaF0VzN/w76kOLIaFVhf5sMM/caEZLtOYqYadtn03 -# 4ykSFaZuIBU9uCSrKRKTPJhWvXk4CllgrwIDAQABo4IBXDCCAVgwHwYDVR0jBBgw -# FoAU9ndq3T/9ARP/FqFsggIv0Ao9FCUwHQYDVR0OBBYEFF9Y7UwxeqJhQo1SgLqz -# YZcZojKbMA4GA1UdDwEB/wQEAwIBhjASBgNVHRMBAf8ECDAGAQH/AgEAMBMGA1Ud -# JQQMMAoGCCsGAQUFBwMIMBEGA1UdIAQKMAgwBgYEVR0gADBMBgNVHR8ERTBDMEGg -# P6A9hjtodHRwOi8vY3JsLnNlY3RpZ28uY29tL1NlY3RpZ29QdWJsaWNUaW1lU3Rh -# bXBpbmdSb290UjQ2LmNybDB8BggrBgEFBQcBAQRwMG4wRwYIKwYBBQUHMAKGO2h0 -# dHA6Ly9jcnQuc2VjdGlnby5jb20vU2VjdGlnb1B1YmxpY1RpbWVTdGFtcGluZ1Jv -# b3RSNDYucDdjMCMGCCsGAQUFBzABhhdodHRwOi8vb2NzcC5zZWN0aWdvLmNvbTAN -# BgkqhkiG9w0BAQwFAAOCAgEAEtd7IK0ONVgMnoEdJVj9TC1ndK/HYiYh9lVUacah -# RoZ2W2hfiEOyQExnHk1jkvpIJzAMxmEc6ZvIyHI5UkPCbXKspioYMdbOnBWQUn73 -# 3qMooBfIghpR/klUqNxx6/fDXqY0hSU1OSkkSivt51UlmJElUICZYBodzD3M/SFj -# eCP59anwxs6hwj1mfvzG+b1coYGnqsSz2wSKr+nDO+Db8qNcTbJZRAiSazr7KyUJ -# Go1c+MScGfG5QHV+bps8BX5Oyv9Ct36Y4Il6ajTqV2ifikkVtB3RNBUgwu/mSiSU -# ice/Jp/q8BMk/gN8+0rNIE+QqU63JoVMCMPY2752LmESsRVVoypJVt8/N3qQ1c6F -# ibbcRabo3azZkcIdWGVSAdoLgAIxEKBeNh9AQO1gQrnh1TA8ldXuJzPSuALOz1Uj -# b0PCyNVkWk7hkhVHfcvBfI8NtgWQupiaAeNHe0pWSGH2opXZYKYG4Lbukg7HpNi/ -# KqJhue2Keak6qH9A8CeEOB7Eob0Zf+fU+CCQaL0cJqlmnx9HCDxF+3BLbUufrV64 -# EbTI40zqegPZdA+sXCmbcZy6okx/SjwsusWRItFA3DE8MORZeFb6BmzBtqKJ7l93 -# 9bbKBy2jvxcJI98Va95Q5JnlKor3m0E7xpMeYRriWklUPsetMSf2NvUQa/E5vVye -# fQIwggYaMIIEAqADAgECAhBiHW0MUgGeO5B5FSCJIRwKMA0GCSqGSIb3DQEBDAUA -# MFYxCzAJBgNVBAYTAkdCMRgwFgYDVQQKEw9TZWN0aWdvIExpbWl0ZWQxLTArBgNV -# BAMTJFNlY3RpZ28gUHVibGljIENvZGUgU2lnbmluZyBSb290IFI0NjAeFw0yMTAz -# MjIwMDAwMDBaFw0zNjAzMjEyMzU5NTlaMFQxCzAJBgNVBAYTAkdCMRgwFgYDVQQK -# Ew9TZWN0aWdvIExpbWl0ZWQxKzApBgNVBAMTIlNlY3RpZ28gUHVibGljIENvZGUg -# U2lnbmluZyBDQSBSMzYwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQCb -# K51T+jU/jmAGQ2rAz/V/9shTUxjIztNsfvxYB5UXeWUzCxEeAEZGbEN4QMgCsJLZ -# UKhWThj/yPqy0iSZhXkZ6Pg2A2NVDgFigOMYzB2OKhdqfWGVoYW3haT29PSTahYk -# wmMv0b/83nbeECbiMXhSOtbam+/36F09fy1tsB8je/RV0mIk8XL/tfCK6cPuYHE2 -# 15wzrK0h1SWHTxPbPuYkRdkP05ZwmRmTnAO5/arnY83jeNzhP06ShdnRqtZlV59+ -# 8yv+KIhE5ILMqgOZYAENHNX9SJDm+qxp4VqpB3MV/h53yl41aHU5pledi9lCBbH9 -# JeIkNFICiVHNkRmq4TpxtwfvjsUedyz8rNyfQJy/aOs5b4s+ac7IH60B+Ja7TVM+ -# EKv1WuTGwcLmoU3FpOFMbmPj8pz44MPZ1f9+YEQIQty/NQd/2yGgW+ufflcZ/ZE9 -# o1M7a5Jnqf2i2/uMSWymR8r2oQBMdlyh2n5HirY4jKnFH/9gRvd+QOfdRrJZb1sC -# AwEAAaOCAWQwggFgMB8GA1UdIwQYMBaAFDLrkpr/NZZILyhAQnAgNpFcF4XmMB0G -# A1UdDgQWBBQPKssghyi47G9IritUpimqF6TNDDAOBgNVHQ8BAf8EBAMCAYYwEgYD -# VR0TAQH/BAgwBgEB/wIBADATBgNVHSUEDDAKBggrBgEFBQcDAzAbBgNVHSAEFDAS -# MAYGBFUdIAAwCAYGZ4EMAQQBMEsGA1UdHwREMEIwQKA+oDyGOmh0dHA6Ly9jcmwu -# c2VjdGlnby5jb20vU2VjdGlnb1B1YmxpY0NvZGVTaWduaW5nUm9vdFI0Ni5jcmww -# ewYIKwYBBQUHAQEEbzBtMEYGCCsGAQUFBzAChjpodHRwOi8vY3J0LnNlY3RpZ28u -# Y29tL1NlY3RpZ29QdWJsaWNDb2RlU2lnbmluZ1Jvb3RSNDYucDdjMCMGCCsGAQUF -# BzABhhdodHRwOi8vb2NzcC5zZWN0aWdvLmNvbTANBgkqhkiG9w0BAQwFAAOCAgEA -# Bv+C4XdjNm57oRUgmxP/BP6YdURhw1aVcdGRP4Wh60BAscjW4HL9hcpkOTz5jUug -# 2oeunbYAowbFC2AKK+cMcXIBD0ZdOaWTsyNyBBsMLHqafvIhrCymlaS98+QpoBCy -# KppP0OcxYEdU0hpsaqBBIZOtBajjcw5+w/KeFvPYfLF/ldYpmlG+vd0xqlqd099i -# ChnyIMvY5HexjO2AmtsbpVn0OhNcWbWDRF/3sBp6fWXhz7DcML4iTAWS+MVXeNLj -# 1lJziVKEoroGs9Mlizg0bUMbOalOhOfCipnx8CaLZeVme5yELg09Jlo8BMe80jO3 -# 7PU8ejfkP9/uPak7VLwELKxAMcJszkyeiaerlphwoKx1uHRzNyE6bxuSKcutisqm -# KL5OTunAvtONEoteSiabkPVSZ2z76mKnzAfZxCl/3dq3dUNw4rg3sTCggkHSRqTq -# lLMS7gjrhTqBmzu1L90Y1KWN/Y5JKdGvspbOrTfOXyXvmPL6E52z1NZJ6ctuMFBQ -# ZH3pwWvqURR8AgQdULUvrxjUYbHHj95Ejza63zdrEcxWLDX6xWls/GDnVNueKjWU -# H3fTv1Y8Wdho698YADR7TNx8X8z2Bev6SivBBOHY+uqiirZtg0y9ShQoPzmCcn63 -# Syatatvx157YK9hlcPmVoa1oDE5/L9Uo2bC5a4CH2RwwggZJMIIEsaADAgECAhAG -# Qz/MzOQzqJLMF7dGpYxlMA0GCSqGSIb3DQEBDAUAMFQxCzAJBgNVBAYTAkdCMRgw -# FgYDVQQKEw9TZWN0aWdvIExpbWl0ZWQxKzApBgNVBAMTIlNlY3RpZ28gUHVibGlj -# IENvZGUgU2lnbmluZyBDQSBSMzYwHhcNMjQwMjIzMDAwMDAwWhcNMjcwMjIyMjM1 -# OTU5WjBgMQswCQYDVQQGEwJVUzERMA8GA1UECAwIVmlyZ2luaWExHjAcBgNVBAoM -# FURyb2lkTW9ua2V5IEFwcHMsIExMQzEeMBwGA1UEAwwVRHJvaWRNb25rZXkgQXBw -# cywgTExDMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuJtEjRyetghx -# 6Abi1cpMT88uT6nIcTe3AyUvdSkjCtUM8Gat0YJfqTxokb9dBzJa7j8YWOUU1Yc4 -# EDXoYYtVRE+1UkdPAcXNMf2hNXGI45iZVwhBPQZBU4QfKltzYqrjAZgDvxeYd68q -# ImjzUfrCY3uZHwEIuCewmNMPpEgbdjuSXDyBAKKBtaO2iqyaJpqcC39QnDKlXMic -# DPqqH5fI7wK7Lg9f4BwOsaO4P68I3pOv7L/6E5GR9+hTj6txhxFz/yCbDxN1PUvD -# sGaXjMmVeP2M95fkwOFwut5yBESDIwAGEWUFsTJ32hSmE74+xG6rVqtueayV7U9c -# GURznSk9ZlTUqQOW9Z4K+pu29gTZ9zVWlONIsQR7QXfGKZWF+Xik6rTujSRTTsK7 -# QNMYzBI6b9v0nD2pEWuGZDXIO5o5N2HzXEFlwxCFY483yWSObHNBp9PFtiDueqv+ -# 8vrN+lsirZlDFCxI6hW+F8oYp3XxHdSqxsMRTqbO6dUjH2Tyd0G5fbyT8Rid7DbP -# 6p/apzIrdFOM0kdcKLmppYBp7BInTdjbWJYhtuORIUZQbUOSM71vYCUHj7xkckiY -# YmkUf0XH8xx8jqgVWseBW63gCEowhCEYxaWt0QGyXJ6UrlV4WTUCWzxm45I5OQoo -# fymUvdutKgr9bR3nJ5yS/c+E3KnqJhkCAwEAAaOCAYkwggGFMB8GA1UdIwQYMBaA -# FA8qyyCHKLjsb0iuK1SmKaoXpM0MMB0GA1UdDgQWBBQta729krTac3CUndU0S0Dd -# DscjHTAOBgNVHQ8BAf8EBAMCB4AwDAYDVR0TAQH/BAIwADATBgNVHSUEDDAKBggr -# BgEFBQcDAzBKBgNVHSAEQzBBMDUGDCsGAQQBsjEBAgEDAjAlMCMGCCsGAQUFBwIB -# FhdodHRwczovL3NlY3RpZ28uY29tL0NQUzAIBgZngQwBBAEwSQYDVR0fBEIwQDA+ -# oDygOoY4aHR0cDovL2NybC5zZWN0aWdvLmNvbS9TZWN0aWdvUHVibGljQ29kZVNp -# Z25pbmdDQVIzNi5jcmwweQYIKwYBBQUHAQEEbTBrMEQGCCsGAQUFBzAChjhodHRw -# Oi8vY3J0LnNlY3RpZ28uY29tL1NlY3RpZ29QdWJsaWNDb2RlU2lnbmluZ0NBUjM2 -# LmNydDAjBggrBgEFBQcwAYYXaHR0cDovL29jc3Auc2VjdGlnby5jb20wDQYJKoZI -# hvcNAQEMBQADggGBAJSy5YPCbh9ZsuDCKgDuzOWZzNza4/FrA+kT7EitDezYN3S/ -# P0EVc0tPbgYAKfNqY+ihAMyjZHdgybfBWhGzUTDo+HEipcnZ2pgwPadsw23jJ8MN -# 1tdms9iKDakIQ2MVsB7cGFRU8QjLovkPdZkyLcjuYbkiZRoNoKlhmrOOf6n1oCwX -# VJ9ONJijc+Lr3+4EIqZ39ET2+uI9Wg9Bfd9XrDZfYFEcRJjNzRpCtHb26aIzV/Xi -# MWasHRPaII34SzD0BmaPbsLeGW1UGvW3tQcgVNdT/uajegmShVb+c5J5ktRSJ0cq -# yxmTAYaeMuA6IxG1f6kui1SAFQs2lzlGyEgxgiNGo7cHHN2KidhrBL3U2bGr9Tkd -# p3gmV+Gj3esCdQzJE4aqmUZvIvHpkrair4qbLFZRNozAZJn2SIeQa5u2U0ZmvcAr -# 1C7S3JVLP3t9LKE0mlFkV9pbIU97ND3iH3tO0Zb3SvCK/XjO1PZVb8EXsi67wbfM -# SWAwi2CETDonb7+gBjCCBl0wggTFoAMCAQICEDpSaiyEzlXmHWX8zBLY6YkwDQYJ -# KoZIhvcNAQEMBQAwVTELMAkGA1UEBhMCR0IxGDAWBgNVBAoTD1NlY3RpZ28gTGlt -# aXRlZDEsMCoGA1UEAxMjU2VjdGlnbyBQdWJsaWMgVGltZSBTdGFtcGluZyBDQSBS -# MzYwHhcNMjQwMTE1MDAwMDAwWhcNMzUwNDE0MjM1OTU5WjBuMQswCQYDVQQGEwJH -# QjETMBEGA1UECBMKTWFuY2hlc3RlcjEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVk -# MTAwLgYDVQQDEydTZWN0aWdvIFB1YmxpYyBUaW1lIFN0YW1waW5nIFNpZ25lciBS -# MzUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCN0Wf0wUibvf04STpN -# YYGbw9jcRaVhBDaNBp7jmJaA9dQZW5ighrXGNMYjK7Dey5RIHMqLIbT9z9if753m -# YbojJrKWO4ZP0N5dBT2TwZZaPb8E+hqaDZ8Vy2c+x1NiEwbEzTrPX4W3QFq/zJvD -# DbWKL99qLL42GJQzX3n5wWo60KklfFn+Wb22mOZWYSqkCVGl8aYuE12SqIS4MVO4 -# PUaxXeO+4+48YpQlNqbc/ndTgszRQLF4MjxDPjRDD1M9qvpLTZcTGVzxfViyIToR -# NxPP6DUiZDU6oXARrGwyP9aglPXwYbkqI2dLuf9fiIzBugCDciOly8TPDgBkJmjA -# fILNiGcVEzg+40xUdhxNcaC+6r0juPiR7bzXHh7v/3RnlZuT3ZGstxLfmE7fRMAF -# wbHdDz5gtHLqjSTXDiNF58IxPtvmZPG2rlc+Yq+2B8+5pY+QZn+1vEifI0MDtiA6 -# BxxQuOnj4PnqDaK7NEKwtD1pzoA3jJFuoJiwbatwhDkg1PIjYnMDbDW+wAc9FtRN -# 6pUsO405jaBgigoFZCw9hWjLNqgFVTo7lMb5rVjJ9aSBVVL2dcqzyFW2LdWk5Xdp -# 65oeeOALod7YIIMv1pbqC15R7QCYLxcK1bCl4/HpBbdE5mjy9JR70BHuYx27n4XN -# OZbwrXcG3wZf9gEUk7stbPAoBQIDAQABo4IBjjCCAYowHwYDVR0jBBgwFoAUX1jt -# TDF6omFCjVKAurNhlxmiMpswHQYDVR0OBBYEFGjvpDJJabZSOB3qQzks9BRqngyF -# MA4GA1UdDwEB/wQEAwIGwDAMBgNVHRMBAf8EAjAAMBYGA1UdJQEB/wQMMAoGCCsG -# AQUFBwMIMEoGA1UdIARDMEEwNQYMKwYBBAGyMQECAQMIMCUwIwYIKwYBBQUHAgEW -# F2h0dHBzOi8vc2VjdGlnby5jb20vQ1BTMAgGBmeBDAEEAjBKBgNVHR8EQzBBMD+g -# PaA7hjlodHRwOi8vY3JsLnNlY3RpZ28uY29tL1NlY3RpZ29QdWJsaWNUaW1lU3Rh -# bXBpbmdDQVIzNi5jcmwwegYIKwYBBQUHAQEEbjBsMEUGCCsGAQUFBzAChjlodHRw -# Oi8vY3J0LnNlY3RpZ28uY29tL1NlY3RpZ29QdWJsaWNUaW1lU3RhbXBpbmdDQVIz -# Ni5jcnQwIwYIKwYBBQUHMAGGF2h0dHA6Ly9vY3NwLnNlY3RpZ28uY29tMA0GCSqG -# SIb3DQEBDAUAA4IBgQCw3C7J+k82TIov9slP1e8YTx+fDsa//hJ62Y6SMr2E89rv -# 82y/n8we5W6z5pfBEWozlW7nWp+sdPCdUTFw/YQcqvshH6b9Rvs9qZp5Z+V7nHwP -# TH8yzKwgKzTTG1I1XEXLAK9fHnmXpaDeVeI8K6Lw3iznWZdLQe3zl+Rejdq5l2jU -# 7iUfMkthfhFmi+VVYPkR/BXpV7Ub1QyyWebqkjSHJHRmv3lBYbQyk08/S7TlIeOr -# 9iQ+UN57fJg4QI0yqdn6PyiehS1nSgLwKRs46T8A6hXiSn/pCXaASnds0LsM5OVo -# KYfbgOOlWCvKfwUySWoSgrhncihSBXxH2pAuDV2vr8GOCEaePZc0Dy6O1rYnKjGm -# qm/IRNkJghSMizr1iIOPN+23futBXAhmx8Ji/4NTmyH9K0UvXHiuA2Pa3wZxxR9r -# 9XeIUVb2V8glZay+2ULlc445CzCvVSZV01ZB6bgvCuUuBx079gCcepjnZDCcEuIC -# 5Se4F6yFaZ8RvmiJ4hgwggaCMIIEaqADAgECAhA2wrC9fBs656Oz3TbLyXVoMA0G -# CSqGSIb3DQEBDAUAMIGIMQswCQYDVQQGEwJVUzETMBEGA1UECBMKTmV3IEplcnNl -# eTEUMBIGA1UEBxMLSmVyc2V5IENpdHkxHjAcBgNVBAoTFVRoZSBVU0VSVFJVU1Qg -# TmV0d29yazEuMCwGA1UEAxMlVVNFUlRydXN0IFJTQSBDZXJ0aWZpY2F0aW9uIEF1 -# dGhvcml0eTAeFw0yMTAzMjIwMDAwMDBaFw0zODAxMTgyMzU5NTlaMFcxCzAJBgNV -# BAYTAkdCMRgwFgYDVQQKEw9TZWN0aWdvIExpbWl0ZWQxLjAsBgNVBAMTJVNlY3Rp -# Z28gUHVibGljIFRpbWUgU3RhbXBpbmcgUm9vdCBSNDYwggIiMA0GCSqGSIb3DQEB -# AQUAA4ICDwAwggIKAoICAQCIndi5RWedHd3ouSaBmlRUwHxJBZvMWhUP2ZQQRLRB -# QIF3FJmp1OR2LMgIU14g0JIlL6VXWKmdbmKGRDILRxEtZdQnOh2qmcxGzjqemIk8 -# et8sE6J+N+Gl1cnZocew8eCAawKLu4TRrCoqCAT8uRjDeypoGJrruH/drCio28aq -# IVEn45NZiZQI7YYBex48eL78lQ0BrHeSmqy1uXe9xN04aG0pKG9ki+PC6VEfzutu -# 6Q3IcZZfm00r9YAEp/4aeiLhyaKxLuhKKaAdQjRaf/h6U13jQEV1JnUTCm511n5a -# vv4N+jSVwd+Wb8UMOs4netapq5Q/yGyiQOgjsP/JRUj0MAT9YrcmXcLgsrAimfWY -# 3MzKm1HCxcquinTqbs1Q0d2VMMQyi9cAgMYC9jKc+3mW62/yVl4jnDcw6ULJsBkO -# krcPLUwqj7poS0T2+2JMzPP+jZ1h90/QpZnBkhdtixMiWDVgh60KmLmzXiqJc6lG -# wqoUqpq/1HVHm+Pc2B6+wCy/GwCcjw5rmzajLbmqGygEgaj/OLoanEWP6Y52Hfle -# f3XLvYnhEY4kSirMQhtberRvaI+5YsD3XVxHGBjlIli5u+NrLedIxsE88WzKXqZj -# j9Zi5ybJL2WjeXuOTbswB7XjkZbErg7ebeAQUQiS/uRGZ58NHs57ZPUfECcgJC+v -# 2wIDAQABo4IBFjCCARIwHwYDVR0jBBgwFoAUU3m/WqorSs9UgOHYm8Cd8rIDZssw -# HQYDVR0OBBYEFPZ3at0//QET/xahbIICL9AKPRQlMA4GA1UdDwEB/wQEAwIBhjAP -# BgNVHRMBAf8EBTADAQH/MBMGA1UdJQQMMAoGCCsGAQUFBwMIMBEGA1UdIAQKMAgw -# BgYEVR0gADBQBgNVHR8ESTBHMEWgQ6BBhj9odHRwOi8vY3JsLnVzZXJ0cnVzdC5j -# b20vVVNFUlRydXN0UlNBQ2VydGlmaWNhdGlvbkF1dGhvcml0eS5jcmwwNQYIKwYB -# BQUHAQEEKTAnMCUGCCsGAQUFBzABhhlodHRwOi8vb2NzcC51c2VydHJ1c3QuY29t -# MA0GCSqGSIb3DQEBDAUAA4ICAQAOvmVB7WhEuOWhxdQRh+S3OyWM637ayBeR7djx -# Q8SihTnLf2sABFoB0DFR6JfWS0snf6WDG2gtCGflwVvcYXZJJlFfym1Doi+4PfDP -# 8s0cqlDmdfyGOwMtGGzJ4iImyaz3IBae91g50QyrVbrUoT0mUGQHbRcF57olpfHh -# QEStz5i6hJvVLFV/ueQ21SM99zG4W2tB1ExGL98idX8ChsTwbD/zIExAopoe3l6J -# rzJtPxj8V9rocAnLP2C8Q5wXVVZcbw4x4ztXLsGzqZIiRh5i111TW7HV1AtsQa6v -# Xy633vCAbAOIaKcLAo/IU7sClyZUk62XD0VUnHD+YvVNvIGezjM6CRpcWed/ODip -# tK+evDKPU2K6synimYBaNH49v9Ih24+eYXNtI38byt5kIvh+8aW88WThRpv8lUJK -# aPn37+YHYafob9Rg7LyTrSYpyZoBmwRWSE4W6iPjB7wJjJpH29308ZkpKKdpkiS9 -# WNsf/eeUtvRrtIEiSJHN899L1P4l6zKVsdrUu1FX1T/ubSrsxrYJD+3f3aKg6yxd -# bugot06YwGXXiy5UUGZvOu3lXlxA+fC13dQ5OlL2gIb5lmF6Ii8+CQOYDwXM+yd9 -# dbmocQsHjcRPsccUd5E9FiswEqORvz8g3s+jR3SFCgXhN4wz7NgAnOgpCdUo4uDy -# llU9PzGCBkAwggY8AgEBMGgwVDELMAkGA1UEBhMCR0IxGDAWBgNVBAoTD1NlY3Rp -# Z28gTGltaXRlZDErMCkGA1UEAxMiU2VjdGlnbyBQdWJsaWMgQ29kZSBTaWduaW5n -# IENBIFIzNgIQBkM/zMzkM6iSzBe3RqWMZTANBglghkgBZQMEAgEFAKCBhDAYBgor -# BgEEAYI3AgEMMQowCKACgAChAoAAMBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEE -# MBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3AgEVMC8GCSqGSIb3DQEJBDEiBCCw -# CjBOFSrHIl5SZxVeFP1D+IfXa4B5pNieNHIkm0/SqTANBgkqhkiG9w0BAQEFAASC -# AgAgFK2xkUz0aie9HSo0e4qyDk83CNX9G/GR7+DObTay5l7OYVZIdB2kOZIS8UbH -# 4gMSsjplIVObVyf1DjGGCctq4bFDABL7wpwqm7P3tEjs2d/HK2Yxoe1c8YFTYMJJ -# Vc6Q9l/nZA7ZC/SCH1NyEgK+w3vQ6SARudN8/ZgFVa1P3DdwOADmLD774v3bOUKq -# XKDOySeYD7bkCekPv6yx6DnrWBBsYIKFRv2Yv4duThki4CC1FMgEVTmdBDJIP3R8 -# 1BgXjPvVxYX3aQ9emC3KluyNr/BEPZiVdwBjXCE60n7g/Y8qNgqY0ZaImSpl9MFx -# VkrxE7iNfBcBE8xVCghyDahs1BxyEeEdQk+QlLD1Cv3KGODlyWjgncDAX7fnkC6l -# M7KUttjXGi9uQG3g2dUCX+744wPhRg+DBfch2Em70I0kYsPY6ETyrQogZdi6QzKO -# Hlf/hUW0o9HCc6BrTSL4y8G0mlKVCgUpMOjlrip88bvW05ZUX20arGKxGg1uxFIA -# r7wvQyFn+RvNc0kqWt/xgwp3HAc80ABPCYumLqGwucBWisiMt4P2s+fkLpYJdC/n -# pS/3fRoepfGmv8J1WAIjGiO7e12aDrTQqNP+2RUzkNpy2eRQDL+3VUFQOQqEfkVL -# Y6wpN6nB7olNULhPUlwZChf49v/h+XUxhgHozWN576qoyqGCAyIwggMeBgkqhkiG -# 9w0BCQYxggMPMIIDCwIBATBpMFUxCzAJBgNVBAYTAkdCMRgwFgYDVQQKEw9TZWN0 -# aWdvIExpbWl0ZWQxLDAqBgNVBAMTI1NlY3RpZ28gUHVibGljIFRpbWUgU3RhbXBp -# bmcgQ0EgUjM2AhA6UmoshM5V5h1l/MwS2OmJMA0GCWCGSAFlAwQCAgUAoHkwGAYJ -# KoZIhvcNAQkDMQsGCSqGSIb3DQEHATAcBgkqhkiG9w0BCQUxDxcNMjQwOTE0MDMy -# MTU1WjA/BgkqhkiG9w0BCQQxMgQwwrUMFcAva5866cdprEw/weWm4EfoAA4SCloN -# B50191F7ps9XQIxGfsz+g0vQxzxfMA0GCSqGSIb3DQEBAQUABIICAC3qVFmWQWkL -# kn/AYJPZ3B7Yvwq0P7SqcHO9w5FiV5wsznH6xfvkTzXssQLhKaZdqypnHCTNth8D -# 7mgr6zZYh5CgQQ3SSG2q0xVzs3wanJmZ4g6I7bVeGMLv47tFnCed9G3aP5cywDBn -# vMOiwZnQR1WwM8T6qE4sAb4lKXUYDbIVB1DMRAF3j2rQMAN9e9jF6Ok+ZyQqpBSl -# ve2vBR0TgFXeyidwiz6O2I1FWc1OzwMchbJTANbQqWRKuiQ6gm0Bj/S8dalBb77I -# jxS0Tn7kRH1Sr50ZfWRSxj7H7afsQOKbDHxhWFhctvQfbrmbNj+gHcm9j/rSPpU7 -# zj5OvgKyYQnjiLjCnGBTmSML2ZwvXhPv2XkFQ2yL2nYWTRqLjARdcP62kSrkQxEa -# DLAZ7mcndE+HZVMllBGVI9/H5hkE7jINBU4gNvyqQQqF3xTatJMldyrXCQ6R9wfN -# LsdyFB177vZXLrS1EymCzq1COpbrw3oa/LXP+1hZFhoaOYy00LUnCU5Zjd8UFWIh -# FDj3Z7O/Xz3P8BR4t7PGqUu3x8UbxcsGDH0w0e3pvPmxXiBZlspjNieg073YNKxU -# Yuj0b3cX/cpYH0M0Ne/tXuHwbZthwwll3vytT7Aa+oglejolDQjRc8Gv5KW0dUK3 -# LmVw9eforeFUrTExSEc/0jf29BmZz9do +# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCCyL72KYcPC3xiu +# XNxyDy0dxda/uihakmlcLUtXbyvnkaCCGSAwggU6MIIEIqADAgECAhBYotctjMD9 +# icz/IeDU7cdKMA0GCSqGSIb3DQEBCwUAMHwxCzAJBgNVBAYTAkdCMRswGQYDVQQI +# ExJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAOBgNVBAcTB1NhbGZvcmQxGDAWBgNVBAoT +# D1NlY3RpZ28gTGltaXRlZDEkMCIGA1UEAxMbU2VjdGlnbyBSU0EgQ29kZSBTaWdu +# aW5nIENBMB4XDTIxMDMxNTAwMDAwMFoXDTI0MDMxNDIzNTk1OVowgaExCzAJBgNV +# BAYTAlVTMQ4wDAYDVQQRDAUyMjMxNTERMA8GA1UECAwIVmlyZ2luaWExEjAQBgNV +# BAcMCUZyYW5jb25pYTEbMBkGA1UECQwSNjY1MyBBdWRyZXkgS2F5IEN0MR4wHAYD +# VQQKDBVEcm9pZE1vbmtleSBBcHBzLCBMTEMxHjAcBgNVBAMMFURyb2lkTW9ua2V5 +# IEFwcHMsIExMQzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALAH0v/7 +# XOVxc5Auhi92tgBZL0Hm6L7sT1xcKfrBwHg12ZpFs0zeR1ZzyduM44d45y3aNXNW +# 7+klHVJqAj5XVHUF/OB/O5bnljKIeupdAZ8v3GGokBZK91BGKe+WRn5ZjdDGc6HN +# xCT4FMth1TCrTg7eMy/u+cfp+4ur8dcSyAM5tkLsTIoS1VtZWjiepjS1RO+Ile9E +# j+wUM3wO9Qt5/BlYi8XsbXU0V4oi3bj6EMLO9UEq0SfsM2YUY7UIkAHtLPiMV7BX +# gw/WC+IwB8ZtIGpq/JEME4bt51pJVvVmrjzbKgc0Cz6akhArZIa9QooAkrbAINvO +# Cm+7mx/PBK2lzSECAwEAAaOCAZAwggGMMB8GA1UdIwQYMBaAFA7hOqhTOjHVir7B +# u61nGgOFrTQOMB0GA1UdDgQWBBTu7ZZnt+omJoze71KXMDAYGGhYfTAOBgNVHQ8B +# Af8EBAMCB4AwDAYDVR0TAQH/BAIwADATBgNVHSUEDDAKBggrBgEFBQcDAzARBglg +# hkgBhvhCAQEEBAMCBBAwSgYDVR0gBEMwQTA1BgwrBgEEAbIxAQIBAwIwJTAjBggr +# BgEFBQcCARYXaHR0cHM6Ly9zZWN0aWdvLmNvbS9DUFMwCAYGZ4EMAQQBMEMGA1Ud +# HwQ8MDowOKA2oDSGMmh0dHA6Ly9jcmwuc2VjdGlnby5jb20vU2VjdGlnb1JTQUNv +# ZGVTaWduaW5nQ0EuY3JsMHMGCCsGAQUFBwEBBGcwZTA+BggrBgEFBQcwAoYyaHR0 +# cDovL2NydC5zZWN0aWdvLmNvbS9TZWN0aWdvUlNBQ29kZVNpZ25pbmdDQS5jcnQw +# IwYIKwYBBQUHMAGGF2h0dHA6Ly9vY3NwLnNlY3RpZ28uY29tMA0GCSqGSIb3DQEB +# CwUAA4IBAQAPbD9O3krI9tfYz6FZXCCqkqbjaeTpo3Ye9Kn4paWsHa37OIv7UhFf +# CrtLRXunZ7Vkry5cvMGNQNUaMFy6CHmEYb3kwZWW3EImuv9uTUd7rYvszBXF8flv +# kysT+8L9wdxLEQHUBnBnFgqMM99HzVuINVyH75d4qa9TF9PhcajsxwmpPgr9NwvC +# KNJv8BaxdH6vYFcQCqCygbfuST99s8qKaknTuHF39E1hWkTfcT3fMJDVONzW0/cN +# ourxylLqMZRjk007NGCnaYZwYfKW/pD/F/jmo28eKoVVy129j2h/RAWODl5gOvis +# sNr6aSz1/Ul3xoNYpyx8IGeWiFMoh99tMIIF9TCCA92gAwIBAgIQHaJIMG+bJhjQ +# guCWfTPTajANBgkqhkiG9w0BAQwFADCBiDELMAkGA1UEBhMCVVMxEzARBgNVBAgT +# Ck5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVUaGUg +# VVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlm +# aWNhdGlvbiBBdXRob3JpdHkwHhcNMTgxMTAyMDAwMDAwWhcNMzAxMjMxMjM1OTU5 +# WjB8MQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAw +# DgYDVQQHEwdTYWxmb3JkMRgwFgYDVQQKEw9TZWN0aWdvIExpbWl0ZWQxJDAiBgNV +# BAMTG1NlY3RpZ28gUlNBIENvZGUgU2lnbmluZyBDQTCCASIwDQYJKoZIhvcNAQEB +# BQADggEPADCCAQoCggEBAIYijTKFehifSfCWL2MIHi3cfJ8Uz+MmtiVmKUCGVEZ0 +# MWLFEO2yhyemmcuVMMBW9aR1xqkOUGKlUZEQauBLYq798PgYrKf/7i4zIPoMGYmo +# bHutAMNhodxpZW0fbieW15dRhqb0J+V8aouVHltg1X7XFpKcAC9o95ftanK+ODtj +# 3o+/bkxBXRIgCFnoOc2P0tbPBrRXBbZOoT5Xax+YvMRi1hsLjcdmG0qfnYHEckC1 +# 4l/vC0X/o84Xpi1VsLewvFRqnbyNVlPG8Lp5UEks9wO5/i9lNfIi6iwHr0bZ+UYc +# 3Ix8cSjz/qfGFN1VkW6KEQ3fBiSVfQ+noXw62oY1YdMCAwEAAaOCAWQwggFgMB8G +# A1UdIwQYMBaAFFN5v1qqK0rPVIDh2JvAnfKyA2bLMB0GA1UdDgQWBBQO4TqoUzox +# 1Yq+wbutZxoDha00DjAOBgNVHQ8BAf8EBAMCAYYwEgYDVR0TAQH/BAgwBgEB/wIB +# ADAdBgNVHSUEFjAUBggrBgEFBQcDAwYIKwYBBQUHAwgwEQYDVR0gBAowCDAGBgRV +# HSAAMFAGA1UdHwRJMEcwRaBDoEGGP2h0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9V +# U0VSVHJ1c3RSU0FDZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDB2BggrBgEFBQcB +# AQRqMGgwPwYIKwYBBQUHMAKGM2h0dHA6Ly9jcnQudXNlcnRydXN0LmNvbS9VU0VS +# VHJ1c3RSU0FBZGRUcnVzdENBLmNydDAlBggrBgEFBQcwAYYZaHR0cDovL29jc3Au +# dXNlcnRydXN0LmNvbTANBgkqhkiG9w0BAQwFAAOCAgEATWNQ7Uc0SmGk295qKoyb +# 8QAAHh1iezrXMsL2s+Bjs/thAIiaG20QBwRPvrjqiXgi6w9G7PNGXkBGiRL0C3da +# nCpBOvzW9Ovn9xWVM8Ohgyi33i/klPeFM4MtSkBIv5rCT0qxjyT0s4E307dksKYj +# alloUkJf/wTr4XRleQj1qZPea3FAmZa6ePG5yOLDCBaxq2NayBWAbXReSnV+pbjD +# bLXP30p5h1zHQE1jNfYw08+1Cg4LBH+gS667o6XQhACTPlNdNKUANWlsvp8gJRAN +# GftQkGG+OY96jk32nw4e/gdREmaDJhlIlc5KycF/8zoFm/lv34h/wCOe0h5DekUx +# wZxNqfBZslkZ6GqNKQQCd3xLS81wvjqyVVp4Pry7bwMQJXcVNIr5NsxDkuS6T/Fi +# kyglVyn7URnHoSVAaoRXxrKdsbwcCtp8Z359LukoTBh+xHsxQXGaSynsCz1XUNLK +# 3f2eBVHlRHjdAd6xdZgNVCT98E7j4viDvXK6yz067vBeF5Jobchh+abxKgoLpbn0 +# nu6YMgWFnuv5gynTxix9vTp3Los3QqBqgu07SqqUEKThDfgXxbZaeTMYkuO1dfih +# 6Y4KJR7kHvGfWocj/5+kUZ77OYARzdu1xKeogG/lU9Tg46LC0lsa+jImLWpXcBw8 +# pFguo/NbSwfcMlnzh6cabVgwggbsMIIE1KADAgECAhAwD2+s3WaYdHypRjaneC25 +# MA0GCSqGSIb3DQEBDAUAMIGIMQswCQYDVQQGEwJVUzETMBEGA1UECBMKTmV3IEpl +# cnNleTEUMBIGA1UEBxMLSmVyc2V5IENpdHkxHjAcBgNVBAoTFVRoZSBVU0VSVFJV +# U1QgTmV0d29yazEuMCwGA1UEAxMlVVNFUlRydXN0IFJTQSBDZXJ0aWZpY2F0aW9u +# IEF1dGhvcml0eTAeFw0xOTA1MDIwMDAwMDBaFw0zODAxMTgyMzU5NTlaMH0xCzAJ +# BgNVBAYTAkdCMRswGQYDVQQIExJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAOBgNVBAcT +# B1NhbGZvcmQxGDAWBgNVBAoTD1NlY3RpZ28gTGltaXRlZDElMCMGA1UEAxMcU2Vj +# dGlnbyBSU0EgVGltZSBTdGFtcGluZyBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIP +# ADCCAgoCggIBAMgbAa/ZLH6ImX0BmD8gkL2cgCFUk7nPoD5T77NawHbWGgSlzkeD +# tevEzEk0y/NFZbn5p2QWJgn71TJSeS7JY8ITm7aGPwEFkmZvIavVcRB5h/RGKs3E +# Wsnb111JTXJWD9zJ41OYOioe/M5YSdO/8zm7uaQjQqzQFcN/nqJc1zjxFrJw06PE +# 37PFcqwuCnf8DZRSt/wflXMkPQEovA8NT7ORAY5unSd1VdEXOzQhe5cBlK9/gM/R +# EQpXhMl/VuC9RpyCvpSdv7QgsGB+uE31DT/b0OqFjIpWcdEtlEzIjDzTFKKcvSb/ +# 01Mgx2Bpm1gKVPQF5/0xrPnIhRfHuCkZpCkvRuPd25Ffnz82Pg4wZytGtzWvlr7a +# TGDMqLufDRTUGMQwmHSCIc9iVrUhcxIe/arKCFiHd6QV6xlV/9A5VC0m7kUaOm/N +# 14Tw1/AoxU9kgwLU++Le8bwCKPRt2ieKBtKWh97oaw7wW33pdmmTIBxKlyx3GSuT +# lZicl57rjsF4VsZEJd8GEpoGLZ8DXv2DolNnyrH6jaFkyYiSWcuoRsDJ8qb/fVfb +# Enb6ikEk1Bv8cqUUotStQxykSYtBORQDHin6G6UirqXDTYLQjdprt9v3GEBXc/Bx +# o/tKfUU2wfeNgvq5yQ1TgH36tjlYMu9vGFCJ10+dM70atZ2h3pVBeqeDAgMBAAGj +# ggFaMIIBVjAfBgNVHSMEGDAWgBRTeb9aqitKz1SA4dibwJ3ysgNmyzAdBgNVHQ4E +# FgQUGqH4YRkgD8NBd0UojtE1XwYSBFUwDgYDVR0PAQH/BAQDAgGGMBIGA1UdEwEB +# /wQIMAYBAf8CAQAwEwYDVR0lBAwwCgYIKwYBBQUHAwgwEQYDVR0gBAowCDAGBgRV +# HSAAMFAGA1UdHwRJMEcwRaBDoEGGP2h0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9V +# U0VSVHJ1c3RSU0FDZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDB2BggrBgEFBQcB +# AQRqMGgwPwYIKwYBBQUHMAKGM2h0dHA6Ly9jcnQudXNlcnRydXN0LmNvbS9VU0VS +# VHJ1c3RSU0FBZGRUcnVzdENBLmNydDAlBggrBgEFBQcwAYYZaHR0cDovL29jc3Au +# dXNlcnRydXN0LmNvbTANBgkqhkiG9w0BAQwFAAOCAgEAbVSBpTNdFuG1U4GRdd8D +# ejILLSWEEbKw2yp9KgX1vDsn9FqguUlZkClsYcu1UNviffmfAO9Aw63T4uRW+VhB +# z/FC5RB9/7B0H4/GXAn5M17qoBwmWFzztBEP1dXD4rzVWHi/SHbhRGdtj7BDEA+N +# 5Pk4Yr8TAcWFo0zFzLJTMJWk1vSWVgi4zVx/AZa+clJqO0I3fBZ4OZOTlJux3LJt +# QW1nzclvkD1/RXLBGyPWwlWEZuSzxWYG9vPWS16toytCiiGS/qhvWiVwYoFzY16g +# u9jc10rTPa+DBjgSHSSHLeT8AtY+dwS8BDa153fLnC6NIxi5o8JHHfBd1qFzVwVo +# mqfJN2Udvuq82EKDQwWli6YJ/9GhlKZOqj0J9QVst9JkWtgqIsJLnfE5XkzeSD2b +# NJaaCV+O/fexUpHOP4n2HKG1qXUfcb9bQ11lPVCBbqvw0NP8srMftpmWJvQ8eYtc +# ZMzN7iea5aDADHKHwW5NWtMe6vBE5jJvHOsXTpTDeGUgOw9Bqh/poUGd/rG4oGUq +# NODeqPk85sEwu8CgYyz8XBYAqNDEf+oRnR4GxqZtMl20OAkrSQeq/eww2vGnL8+3 +# /frQo4TZJ577AWZ3uVYQ4SBuxq6x+ba6yDVdM3aO8XwgDCp3rrWiAoa6Ke60WgCx +# jKvj+QrJVF3UuWp0nr1Irpgwggb1MIIE3aADAgECAhA5TCXhfKBtJ6hl4jvZHSLU +# MA0GCSqGSIb3DQEBDAUAMH0xCzAJBgNVBAYTAkdCMRswGQYDVQQIExJHcmVhdGVy +# IE1hbmNoZXN0ZXIxEDAOBgNVBAcTB1NhbGZvcmQxGDAWBgNVBAoTD1NlY3RpZ28g +# TGltaXRlZDElMCMGA1UEAxMcU2VjdGlnbyBSU0EgVGltZSBTdGFtcGluZyBDQTAe +# Fw0yMzA1MDMwMDAwMDBaFw0zNDA4MDIyMzU5NTlaMGoxCzAJBgNVBAYTAkdCMRMw +# EQYDVQQIEwpNYW5jaGVzdGVyMRgwFgYDVQQKEw9TZWN0aWdvIExpbWl0ZWQxLDAq +# BgNVBAMMI1NlY3RpZ28gUlNBIFRpbWUgU3RhbXBpbmcgU2lnbmVyICM0MIICIjAN +# BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEApJMoUkvPJ4d2pCkcmTjA5w7U0Rzs +# aMsBZOSKzXewcWWCvJ/8i7u7lZj7JRGOWogJZhEUWLK6Ilvm9jLxXS3AeqIO4OBW +# ZO2h5YEgciBkQWzHwwj6831d7yGawn7XLMO6EZge/NMgCEKzX79/iFgyqzCz2Ix6 +# lkoZE1ys/Oer6RwWLrCwOJVKz4VQq2cDJaG7OOkPb6lampEoEzW5H/M94STIa7GZ +# 6A3vu03lPYxUA5HQ/C3PVTM4egkcB9Ei4GOGp7790oNzEhSbmkwJRr00vOFLUHty +# 4Fv9GbsfPGoZe267LUQqvjxMzKyKBJPGV4agczYrgZf6G5t+iIfYUnmJ/m53N9e7 +# UJ/6GCVPE/JefKmxIFopq6NCh3fg9EwCSN1YpVOmo6DtGZZlFSnF7TMwJeaWg4Ga +# 9mBmkFgHgM1Cdaz7tJHQxd0BQGq2qBDu9o16t551r9OlSxihDJ9XsF4lR5F0zXUS +# 0Zxv5F4Nm+x1Ju7+0/WSL1KF6NpEUSqizADKh2ZDoxsA76K1lp1irScL8htKycOU +# QjeIIISoh67DuiNye/hU7/hrJ7CF9adDhdgrOXTbWncC0aT69c2cPcwfrlHQe2zY +# HS0RQlNxdMLlNaotUhLZJc/w09CRQxLXMn2YbON3Qcj/HyRU726txj5Ve/Fchzpk +# 8WBLBU/vuS/sCRMCAwEAAaOCAYIwggF+MB8GA1UdIwQYMBaAFBqh+GEZIA/DQXdF +# KI7RNV8GEgRVMB0GA1UdDgQWBBQDDzHIkSqTvWPz0V1NpDQP0pUBGDAOBgNVHQ8B +# Af8EBAMCBsAwDAYDVR0TAQH/BAIwADAWBgNVHSUBAf8EDDAKBggrBgEFBQcDCDBK +# BgNVHSAEQzBBMDUGDCsGAQQBsjEBAgEDCDAlMCMGCCsGAQUFBwIBFhdodHRwczov +# L3NlY3RpZ28uY29tL0NQUzAIBgZngQwBBAIwRAYDVR0fBD0wOzA5oDegNYYzaHR0 +# cDovL2NybC5zZWN0aWdvLmNvbS9TZWN0aWdvUlNBVGltZVN0YW1waW5nQ0EuY3Js +# MHQGCCsGAQUFBwEBBGgwZjA/BggrBgEFBQcwAoYzaHR0cDovL2NydC5zZWN0aWdv +# LmNvbS9TZWN0aWdvUlNBVGltZVN0YW1waW5nQ0EuY3J0MCMGCCsGAQUFBzABhhdo +# dHRwOi8vb2NzcC5zZWN0aWdvLmNvbTANBgkqhkiG9w0BAQwFAAOCAgEATJtlWPrg +# ec/vFcMybd4zket3WOLrvctKPHXefpRtwyLHBJXfZWlhEwz2DJ71iSBewYfHAyTK +# x6XwJt/4+DFlDeDrbVFXpoyEUghGHCrC3vLaikXzvvf2LsR+7fjtaL96VkjpYeWa +# OXe8vrqRZIh1/12FFjQn0inL/+0t2v++kwzsbaINzMPxbr0hkRojAFKtl9RieCqE +# eajXPawhj3DDJHk6l/ENo6NbU9irALpY+zWAT18ocWwZXsKDcpCu4MbY8pn76rSS +# ZXwHfDVEHa1YGGti+95sxAqpbNMhRnDcL411TCPCQdB6ljvDS93NkiZ0dlw3oJok +# nk5fTtOPD+UTT1lEZUtDZM9I+GdnuU2/zA2xOjDQoT1IrXpl5Ozf4AHwsypKOazB +# pPmpfTXQMkCgsRkqGCGyyH0FcRpLJzaq4Jgcg3Xnx35LhEPNQ/uQl3YqEqxAwXBb +# mQpA+oBtlGF7yG65yGdnJFxQjQEg3gf3AdT4LhHNnYPl+MolHEQ9J+WwhkcqCxuE +# dn17aE+Nt/cTtO2gLe5zD9kQup2ZLHzXdR+PEMSU5n4k5ZVKiIwn1oVmHfmuZHaR +# 6Ej+yFUK7SnDH944psAU+zI9+KmDYjbIw74Ahxyr+kpCHIkD3PVcfHDZXXhO7p9e +# IOYJanwrCKNI9RX8BE/fzSEceuX1jhrUuUAxggWSMIIFjgIBATCBkDB8MQswCQYD +# VQQGEwJHQjEbMBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdT +# YWxmb3JkMRgwFgYDVQQKEw9TZWN0aWdvIExpbWl0ZWQxJDAiBgNVBAMTG1NlY3Rp +# Z28gUlNBIENvZGUgU2lnbmluZyBDQQIQWKLXLYzA/YnM/yHg1O3HSjANBglghkgB +# ZQMEAgEFAKCBhDAYBgorBgEEAYI3AgEMMQowCKACgAChAoAAMBkGCSqGSIb3DQEJ +# AzEMBgorBgEEAYI3AgEEMBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3AgEVMC8G +# CSqGSIb3DQEJBDEiBCAqTz6Ip2LLYNFN5K1JJDf7b5f7S+xfp3YvZbz/pRmklTAN +# BgkqhkiG9w0BAQEFAASCAQAKN1cBYbsh7MV3GuUP/EmgN1E/SnQt8ZmqO7kinpF3 +# xIaoeAAUWBD8tBHJHGEMyykgkkDaDexoxIiOFfTCbVI1PasUxuvuA/I+8ReVSRjH +# E8+iT9Gh2IL1O2a0Wzjk7Xf0YeGK1rj635N9bhQeO7U8mBOZxe87kez5wj9e9jjM +# VK3dU69ymf6QHfilkQjPhIYBgdIwcwhXJZDZuh6TJFHzdsxigYoKY9LCEKDS1YkX +# ucGpn3xZ0DGg7RESFNF+Uhw/8NbaLH+pJomvgchJeCesmaQjUB7YC6dPofYFGS1Q +# CkdWSEZIUNYPr9uovh1lxsGrUSmu85boJigDrL6BkbQjoYIDSzCCA0cGCSqGSIb3 +# DQEJBjGCAzgwggM0AgEBMIGRMH0xCzAJBgNVBAYTAkdCMRswGQYDVQQIExJHcmVh +# dGVyIE1hbmNoZXN0ZXIxEDAOBgNVBAcTB1NhbGZvcmQxGDAWBgNVBAoTD1NlY3Rp +# Z28gTGltaXRlZDElMCMGA1UEAxMcU2VjdGlnbyBSU0EgVGltZSBTdGFtcGluZyBD +# QQIQOUwl4XygbSeoZeI72R0i1DANBglghkgBZQMEAgIFAKB5MBgGCSqGSIb3DQEJ +# AzELBgkqhkiG9w0BBwEwHAYJKoZIhvcNAQkFMQ8XDTIzMDUxNDE1NDEwNFowPwYJ +# KoZIhvcNAQkEMTIEMKBb5TFeMuv1qxZqrDJfQEEWakbNGIkGSDjYiTjHu6rQDjE+ +# wn2WhvQ9S7rrqkZ4TzANBgkqhkiG9w0BAQEFAASCAgAcsBPpVC80NuqHDGOCHCx3 +# gjzmKUKAT1CjGBPiTzU95fCC/PkP/OdKa2GsivTG3mmvjLRSIOhl4wehz1rn3ikf +# 0T9/wKfDrUNbuUPoa+vxMQgFXas1d0Lkz0UxUr5LjJL2JBwt5KFpDysKDwENo7kz +# /FRuhr2b3TsOc/9SIcIpl44VUyD1Rr+3XS1NG+AWPNGjLLmLXX/WIPBvn3V7fVj7 +# QKON02nMgascYzIkpIfxNZgpRXBVOnigAAjuBEQvlI82gnupxLY8H/Ax2SNIVMJq +# EElnBN4bWAw96ULiQCrU/5xHsX8qelCTW3HQ8njT1qwiBD5UT/BREdNzJ4bzAJHD +# MW0hmuAUMbLiI2QAzNr7rOCBK5jD9HB0524LsstEWpX/8U9nxiSaNDDqaW34PGTa +# 6Pniz9Hl12NO9CFeV2BhNSeHk8VqG211zQaK05yfgHHvCdASTDlHGF+EnE8ZwlC7 +# d8wQ4niLVzgm3I+De+IcMWXjhrYycnfnIuABGnuHB+y8h5w5KdAJiQ+1ycGvR1d+ +# Lu8m70USIGpP6galNcxXwmxViey4HRXwesMiQ9NMquOlw+Te6JE7FWqXkSkbj54G +# NvwPxrLgAJv/0ovBnCD38buVRjwKtFMk3x/GreiAaOnm9lpCcw9P09KtcZQ0sxBk +# 4SaGAirPFtpy1bmHiDh/4Q== # SIG # End signature block diff --git a/share/CMakeLists.txt b/share/CMakeLists.txt index f120fc6e2..90f7e6e68 100644 --- a/share/CMakeLists.txt +++ b/share/CMakeLists.txt @@ -58,12 +58,7 @@ if(UNIX AND NOT APPLE AND NOT HAIKU) EXCLUDE PATTERN "actions" EXCLUDE PATTERN "categories" EXCLUDE) endif(KEEPASSXC_DIST_FLATPAK) configure_file(linux/${APP_ID}.desktop.in ${CMAKE_CURRENT_BINARY_DIR}/linux/${APP_ID}.desktop @ONLY) - configure_file(linux/${APP_ID}.policy.in ${CMAKE_CURRENT_BINARY_DIR}/linux/${APP_ID}.policy @ONLY) - install(FILES ${CMAKE_CURRENT_BINARY_DIR}/linux/${APP_ID}.desktop DESTINATION ${CMAKE_INSTALL_DATADIR}/applications) - if("${CMAKE_SYSTEM}" MATCHES "Linux") - install(FILES ${CMAKE_CURRENT_BINARY_DIR}/linux/${APP_ID}.policy DESTINATION ${CMAKE_INSTALL_DATADIR}/polkit-1/actions) - endif() install(FILES linux/${APP_ID}.appdata.xml DESTINATION ${CMAKE_INSTALL_DATADIR}/metainfo) endif(UNIX AND NOT APPLE AND NOT HAIKU) diff --git a/share/branding/keepassxc-icon.ai b/share/branding/keepassxc-icon.ai index 47283e03e..350362858 100644 --- a/share/branding/keepassxc-icon.ai +++ b/share/branding/keepassxc-icon.ai @@ -1,7 +1,7 @@ %PDF-1.6 % -1 0 obj <>/OCGs[29 0 R 30 0 R 31 0 R 32 0 R 33 0 R 34 0 R 35 0 R 36 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream +1 0 obj <>/OCGs[29 0 R 30 0 R 31 0 R 32 0 R 33 0 R 34 0 R 35 0 R 36 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream - + - Adobe Illustrator 27.8 (Windows) - 2023-08-14T23:38:54+02:00 - 2023-08-14T23:38:54+02:00 - 2023-08-14T23:38:54+02:00 + Adobe Illustrator 27.2 (Windows) + 2023-04-23T23:16:27+02:00 + 2023-04-23T23:16:27+02:00 + 2023-04-23T23:16:27+02:00 124 256 JPEG - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAB8AwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4qxHz3+Zvl3yesMF16 l9rN3/vDo1mvqXMpOyniPsqW25H6KkUxViKn8+PNP7+S7s/JOnSA8LaKNby94np6jPVQf9UofbAq 3/lVnmUfDP8AmVrX1w048ZvTWuwH7rma/fgQuOi/nn5cAl0rzFa+arWOpOn6nAIJWHgsyHkW92kA /VhSyDyV+bema7qJ0DWLOXy95pjHxaVebCWne3lIUSbb0oD4VArhtWeYq7FXYqlnmPzLoflvSpdV 1q7SzsotjI/VmNSERRVnY02VRXFXmi+evzX86/H5N0qLy7oMn91rWrjlcSr15xQDkoqOlQwP82Kt t+WfniZvrGs/mTqnquSStmFsowx7BUfjT2CjFWx5D/NjSwZ/L/5gS3tR8Ntq0KzowrUAzH1WHzVc VRGnfnBrGh38WlfmVpA0aSZgltrlqTJp0pNftElmi6d2P+VxGKvUopYpoklidZIpFDRyKQysrCoI I2IIxVdirEvzN89r5P8ALv1qCH63rF7ILTR7EbmW5k2Wqj4iq9Wp12HUjFWE6Po+neQdNn83ebZv 0r501T47iduLSeoy/wC89v2REGzMNqe3FcqyZBAWWEpCIss+8qa1Jrfl6y1SRFje6Qu0aElVoxHG p60pQ4cU+KIKYSsWwPW/yQi1DzHcahHqAisbyZri4iKcpVaRi0gRq8d2O1envmNk0fFK72apYbNv SpmjstPdkosdtESvLoBGu1fuzM5BuebA+V/za8vGC6T9H+YrEepBNGf31vIPsyxOOLNHypyXt8+L ZThzCY82GPIJe9P/AMqvOeq3/wBe8qeZqL5r0CiXD12urfYR3K13NdufzB/aoLw2PQcVQ2qalY6X p1zqV/KILKziea4lboqIOTHbrsOmKvGdBsH8+X7/AJiedgIfLdnzby5o1waQRQKf96Z1rxZnp36/ 6oUYqzPyN59t/Nd5qy2kPo2WntElsW/vJFfnV2X9kHh8I+/2VQv5hflv/im4try3uhbXcCeiwkUs jR1LDpuCCxxVPvKHlqDy3ocOmRSGZlJkmmIpykf7RA7DsMVY1f8AnTy5qvmnVfInmC2ie1cxxW0j 7xymSFHMbfySB2PBh38G6qpX5Uvb/wDLfzdb+TtRna48o607f4bu5SWa2nJH+iMT+ySQB7kHu1FX sOKvJXU+aPz0unn/AHmm+SrSOO2jrVfrt4odpKdK8ar80GAq8/8AzF16bXfMtzLz5WlqzW9mtfhC IaFx/rsOXyoO2abU5uKfkHByzssi/Kv8wbXR4v0HqzGOzZy1ndUJEbOd0cD9kncHsevtfpNQB6S2 YctbF7Tmzcp5f+av5h20FpdeXNLYyX0wMN/OKhYUI+JAf2nYGm3Qe+YWq1AiOEc2jNkoUHlvlvVb vRNYttStSfUgcFk6B0OzofZhtmuhkMZWHFjKjb1H8wJoNG81eUPzAszSB5007UpFrR7O7UlGYD+Q Fm+fHN4De46uwBewZJLy7885bnUofLnkq3ZkHmbUFW8daV+qWhWSYdOxZG/2OKse/OnWBbW9h5V0 8CCziiSWeJNl4J8EEVB2XhWn+rirCPIHm2bynrovGjM1lOvpXsK/aKVqGWu3JTuPHcd8VfR+k6tY atp0Oo6fKJ7O4BMUgBFaEqRQgEEMCDiqX6z5ie1uDYafCt1qAUPIHcxwwq32TK4DGp7Ioqe/Eb4q 8a1r8sNXlubvVZ9bhmvJ3e4l5W7RLzYlj8YlfiK9PhxVkGoXI89/lbqGnXlV8z6HELkrX956tuC0 c0bbcvWRWWo7k9MVZh/ysOX/AJUz/jKv+nfo7lyotPrv9xXj9nj9Y/DtiqR/lmAPMv5jTLveHWZV IpvwTn6W1Pc5E9UPKzbkqCdzTrnNcTrGobatxHt+2v68nGW6Q+iNAubma71tZpGdYNQMcAP7Ef1a BuI9uTE50GOVk+/9AdjE83kH5leVbjTPMM168qywapJJcRGoDqSashWtfh5Ch6ZqtbjMZX0LiZ4k G+9iqW/tmEZND0P8wwT+RETSH97GloYa7GqzKq0Hf4c3unP7uLsMf0h7dmS2PKvN4V/z48oLKfhj 068eBTQfvCkob5/CMVYT+aMTyed9SLA0HoBPl6EZ/XXFWHvae2FXsv5bzXUOm+VrRJGW2lttVeaI fZZku4+BP+rzanzwKk6eeNIgbUJ5ZudzJeXTuoNSQszJGK7DaJEUewwJedjzxq126Xd1qfOK5dGk sKx8EWVgOCqoDfu+Xz23woT7yXrtuPPmlcHpHdmezu+XwhoZYXahJ8JI1IwBK717v/oWL0qn0vr/ AKfGm3p/XPUpXw9Xf54UM60enl787PMOlyj07bzPbQ6lYEnZpYQVlUf5Rb1G+Q+WDqrEPM2gvpet XVoVpGHLwHsYmNUp8ht885rUwOOZDrskeGVJZBbf6RFt+2v68qjLdgHuWgLS61s/zagx/wCneEZ0 mHnL+t+gOxhzPveWfmCLW481XTwTSTlaRy+p0R02Mcf+Svy61+eabXTHiGjbh5z6kksdLmvLuG1g XlNM4RB7k03zEiDIgDmWoCzTN/zLtY7tvKPkG0JL393C1wEpyFnaL+8Zh8qsP9U508I8IA7nZgUK ev5Yl5b+cldH13yd5xoBb6XfPZ38ndYL1Qpc+yBW+k4ql35q6Gf0hb6tEKw3KCKVh09RPskn/KTp 8sVYA1p7YqyfU3lh8q+VYI2KJdLqNvPxNCYzOsjJUdm9OjeIqMx9VMxxkhtwRBmAW7SO3CgFFAAo BQds54ku4Add8CDTpiFLG9ajhNlcAopHpsaEDsK5djkQQ1TApkvFP+hWOHH4a8ad/wDjsUzoL9N+ TqK3egfmr5N1DW9NtNX0IiPzPoEhu9Mb/fg2Mlud6fvAopXuKbAnJEISjT7/AET8yPLy3VuRaa3Z 1jubVz+8gl6NHIvXgxX4Wp+PIZiarTDLH+kGrJj4h5sO1DSdQ0q6Ed5AYnU1RiKq1O6t0Izn8mKW M1IU4MomJ3ei6b560M6RNfTBbe7U1uLVAA8spFAU/m5Bep6d9s3mLXYzAyOx6hzI5o1bzucXetat PNBbFp7qRpPRiBanI1/2zmlmZZZkgblwzcpbM003TdI8k6TP5g1+ZI5o02GxKVB/dx/zyP02/VU5 udHo/C9Uvq+5zMOLh3PNv8sND1PVtWu/zC16Iw3mpRiHRbJt/q9j1Vt/2pP1VP7VBsAG96XhVLPM 3l6w8xaBfaJfgm1vojG5HVWryR190cBh7jFXmnkvVJFSf8tfOdE1jT0EdjOxot5ar/cywserKF+d BvuGoqlXmHyhqWjyMzIZ7OvwXKDan+WP2TiqC1PXLaTy7pemSQhbmzvGa3npUmOSKZnWvUfER8/o zG1n90fx1b9P9YQsV3Qdc0NO0Bamu6jriApKTatODaXH/GN/+InLIjdrmdmWf+utf7L/ALvOb/8A h+Dqur3jLGLAfOH5XfXtU/xJ5Wvf0D5oUHnOg/0e5B343MYBrU0+Kh9w21AQqQzfmB5p0WE2vnzy lO0K0D6lpyLdWj70DMpJCfS9f8nIyjYoiwgi0IfzM/JE1d+KSdTEbWYGvYUC8d8x/wApi/msPCj3 Iq2/Mx71GtfIXlO81CQngLloVtbMGhozSdPoYr88vhAR+kAMwAOSZaH+WGratqcWvfmHdx6leQ/F ZaLCP9Bt67/Ep/vG/DbcttSYCXpeFXYq7FWN+d/IOheb7FIb9WgvbY87DUoKLcQONwUf+WvVen00 IVYUupfmv5PP1XWdLPm3SI/hi1XT/wDevgK/3sHxMzUHh83OKsO8/fmF5C1LRVk0+3fT9btp1m+q 3FsYJHAVkeMtGHQNSSu57ZVmx8cTFnjnwm2G6X5l1DU5BDp2k3V7OQSIraOSZqDqaIhOa38jNzPz QTZofOzD/lFNW/6Q7j/qlj+Rmv5oIO50b8wL1WtoPK2pxtKOIeS2nUAHY7uiKPpOTjopAsJagF7L /wAq51j/AJUd/g/4f0v6Hq+nzHH1/rX1z0uf2ftfBXp703zZcO1OJe703JIdirsVdirsVdirsVdi rsVdirsVdirsVdirsVdirsVQ2panp2mWUt/qNzFZ2UC8prmd1jjQeLMxAGKvKL3/AJyP0m9vZLDy N5e1LzhdRfbltYmhthXxkZHcD3aMDwriqwfmD/zkNKhuIvy2gS32PpyX8IlpQV+EyI3/AAmKrR/z kPe6LMkXn3yXqnluJiFF+g+tW1T3L8YvuXkcVeo+XPNHl7zLpqanoV/FqFk+wlhNeJ/ldTRkb/JY A4qmmKuxV2KuxV5n5s/5yC8h6HfnSdPNx5j1uvAafpMf1gh/5WkB4V7EIWI7jFUnT8zvz21I+ppP 5ZG3t96DUL2OKQgUpVZfqxB9qfqxVa/51fmXoY5+bfy2vobNN573TZRdKig0qVVWT75RirN/Iv5s eRvO6EaFqAa9ReUunTj0rlB3/dt9oDuUJHvirL8VdiqWeZfMek+W9CvNb1eYQafYxmSZ+pPZUUd2 ZiFUdzirwq30u8/MyKT8wfzOujo35c2NZtH0AyPEskQNFnnK0ZuYNFK/E5Pw8VpyCvZfy81Py3qn lCw1Dy1YjT9EnEn1K2WJIaJHK0XLglQOfDl47774VfP/AJt1T/nKu289Xemac9/PaSXTDTrq3s4G svQZz6Jab0jGgCU5eo1R3wK+jpmktPKzvrarqEttZFtSUIvCdo4qy0RqJRyDQHbCrwv/AAvYyWf/ ACtD8ibsQTxgnVfLQDCGcJ8TwG3r8EgB2jGx2MZBpyCvX/y0/MPSfPnleHWrEejMD6OoWTGr29wo BeM+I3qrdx4GowqyrFXYq8I8w+YfMv5veZbzyj5RvG0zyRpjCPzB5gjBDXLAkPBA4NCpH39T8NAy rLvyjP5VWd3q/l7yHbJI2iLAmq6qoDmaSYyAKbgnnKQYWJ4/AP2cVYt+f9/+eum6zY3PkV7ubQpb cJNb6fax3MqXSuxZnAjkl4shWh+zsendVnH5Mn8w38kxT+fZWk1q4meWKOWOOKWK2KqI0lWNUHKo Zt/i3ocVYZ5u8qflv5982atpejXB8ufmZoL+rFfQD0JJW4rIkp9M0mX4xyYfvF+XVVOvyl/MzWr/ AFO98jedoha+dtHrVwOMd7brSk8fQFqfEaChHxDuAq9TxV4j+aMcnn782tA/LgMToWlR/przGq/t 02iibv0ZV/56V7DFXjn/ADkj+ZkvmHzVJ5Y0x/S8t+X3NtHBF8MctzF8EjlRRaRmsaeABI+1gV6f /wA4pfmXpl15bXyRfTrDqunvJJpqOaevbyMZWVCerxuzVX+WlOhoq+gsKvLv+cgfzM0zyj5JvrBJ 1bXtZgktbC1U1dUlHCSdh+yqKTxJ6tQeNFXyp+UH5l3/AJB8322opI7aTcMsOr2gJ4yQE0L8R1eK vJPu6E4FfRNykX5f/ntpupaeyp5W/MVDFcxp/dLfihSRe37x5FI/13wq9zxV5l/zkH5s1DQ/IZ0/ SCTrfmO4TSbBU+3+/qJCvvw+AHsWBxV5j+ceuQ/lX+W2j/lp5cl9LU9QgMur30VVkMbGkr1FDW4k DKPBF4+GBWB/841/mTp3k3znNbavMLfR9bjW3muG2SKeNiYJJD2X4mUntyqdgcVfayOrqHQhlYAq wNQQehBwqxPzv+Z/lbyfJb2uoPNd6veitjo1hEbi8m7fBGtKAkUBYivbFXyb5m8sfnXL5xvfP8Xl 3VLC7ku2voJYomaSBa1RSq1aiRgK1V6dcCvTvOmvDzh+XehfnB5fMdv5v8pSRnVII92CB+E0TqPi 4cj6ihv91s3jir3P/GWk/wCB/wDGPL/cX+j/ANJ9RX0/S9Xj/rfs08cKvLvy5uGP5mfm95llXnc2 Ekdrb8jU8LaOUFenQi3jpir49mllmleaVi8sjF5HbclmNST8zgV0M0sMqSwu0csZDRyISrKw3BBG 4IxV+hflDzZca7qfmWzlgSFdC1I6fE6EkyKIY5ObV6GslNsKvij87LXWrf8ANPzL+lopIpZr6eW1 9Wvx2rSN9XdCSaqY6Up8u1MCsIxV9Medb64u/wDnGbyR5gc/6do11ZvBJX4qWzS26jlQ9Qin6MVf TmFXjf5nRnU/z1/LLSJRW3tze6gATsZIY/VU0od1NsKfwxV8+/8AOSWoz3v5x66sh+C0+r28K1rR Et42P3uzN9OBXmOKvrr/AJx385X0HlvyZ5ZaMTQ6nDq07XLsxeMWdwAiKOnE+p9GFU8/I22s9Q0X VPzU1mkmr+YZ7qb6zIObWthayNClvHQEhVEJrTqAPDFWK+U/+csl1nzxaaNc6IltpGo3S2lrdiYm ZDK4SJ5FK8SCSOQFKV6mm4VN/wA0vLlr5e8622oacot9M8+wXmheYrJPhikuZrdzbXPEAgScz8TU 8T1ZjhVin6cu/wDoTitT6tfqPqV39P8ASVPDp6fwUwKzDyRBDpv56/mN5Xuxxh8xW0GpW56c04kS ha963Tf8DhV8i65pF3outX+kXg43Wn3EttOO3OJyhI9jTbAqBxV94/lX/wApH+YX/gQP/wBQsOFX zb/zlDrPmO8/MubT9We2+qadGBpUVsyvxgm+Ksx+2JWpVlbptTY8iFeQAEmg64q+pPzE0Saw/Kn8 tPy2KldV1m9s1uLc1BUAcrgNQ9EmuV6+GKvpDCrxn86nGh/mV+W3m1/htIb6XTL2Y1ARbsKiknwC NKT8sVeH/wDOUvl6fTPzXu78oRbazBBdQN+zVIxBIPnyiqfngV5Dir2vyjH5iutL/LDS/L+oNpV/ qp1mybUIwDJDA90rTPHuKMI0NKEHwIO+Kvqjyx5H0Xy55Nh8o2JlfS4YpoQ0zBpWFw7vISyhRUtI 3QYVYTpn/OMn5WabqVpqNtBeC5spo7iAtcsRziYOtRTcVGKso/M78urTzzoUdjJeT6ffWchutMvb duJjuAjIpcUqy/FuBQ++KvEvq9r/ANCf/U+B+tfWvQ67fWP0vStelOO2BWdfnxomraRqGifmloEJ m1Lyu3DVLdRvNpzk86kV2Tm4O2wct+zhV57+eP5dWnnnSIPzU8iD69FdwK2sWcQrKfTUL6oQV/eR gcJV67V8cCvm/FX3n+XWr+Sv0DrvnfTtWD6TrV0+p6g9xxj+pusSJJDIAfhKBB1612qCMKvirz9q 1jrPnjX9WsHeSy1DULm5tnlHFjHNKzrUHpsdhgV6d/zj/wDlBJqt9H538zKLLyno9buKS4oiXLwV bl8X+6YivJ2Oxpx/moq9X/Lr6z+Zf5qXn5kTxunlnQlfTvK8cgI9V6FZLih9nY/NlFaocKvccVYf +bPkSPzx5F1DQgVW8YCfTpW6JcxfFHU9g26MfAnFXkRsE/Ov8s/0Ffstl+ZXlFmhljufhcyR/u3L jrwnCAOafDIPDqFfMeraTqWkalcabqds9pf2rmO4t5RRlYf57EbHFXs/5M61pF/rn5Y6fBI41TRb 3VYryBlovp3UbTRSK3etGX2I+VVX2FhV2KuxV8y/+uvf9vr/ALu2KvpmSOOSNo5FDxuCrowqCDsQ QeoOKvDtV8ieefyv1q58xfltCdW8sXbGbVfJ7Maox6vaAVPTYcQWGwo46KsXvoP+cb/zNnee7nfy X5odj9bilK2ZMvf1PUDWznl4FXPfAq2H/nGHS/qFxDY/mSqaHdMktzbpCjRSelUoZCt2sbFeRoSu 2KqcHkr/AJxr/Ltvruv66PNWqQfElhGyXCFx2+rwVQH2nk44qyMaZ+YX5yNBBe2kvk38s4uJWxHw Xl8ifYHGg4psKfDwHUc9iFXuOj6PpujaXa6Vplutrp9nGsVtAnRUX57k9yTuTucKozFXYq8s/Mz8 pdTv9ai87eRr39D+drUAOa8be9jX/dc4pTkQAKtsRs3YhVgmsedvy283yJoH5y+XpPK/mq2UImoF JEQ7/ainQMwQmpAflH/lHAqQ2/kz8vvy388eU/NWjeZ49X8vS6g0N5N6sExtQ8DpG8jwGnGsnxHi KUxV9Lx+bPK0iLJHrNi6MKqy3MJBB7ghsKrv8UeWf+rvZf8ASRF/zViqH1Dzx5N06zlvLzW7GK3h UvI5uIjsBWgAYknwA3OKvB/0fqH/AEKp9Z+qy8frn6T9Pj+8+qfpL1fV4+Hp/H/q79MVfSeKuxVj 3mX8vfJHmc8te0W0v5aUFxJGBMBSlBKvGQD/AGWKsMf/AJxj/JppOY0aVFrX0xeXXH5byFvxxVk/ lr8pvy38tTLPo3l+1t7lKGO5dTPMpH8ss5kdfoOKstxV2KuxV2KuxVAazoGh63aGz1jT7fUbU1/c 3MSSqCe4Dg0PuMVYBff842fk3dymX9BGBiSWEFzcopr/AJHqcR9AGKojTv8AnHn8nbFSI/LsUzH7 T3Es8xP/ACMkYD6BiqM/5Ub+Un/Ur2X/AALf81YqqQfkn+U8EyTR+VrAvGeSh4+a1HirllP0jFWZ +jD6Poemvo8eHpUHHjSnHj0pTtiq/FXYq6oGKtchirdRirsVdirsVdirsVdirXIYq7kMVbxV2Kux V2KrS3hiq3FVwXbFVuKrgxHXFV2KuxV2KtFqYqtNcVcFririKHFXAkYqvBrirsVaY9sVco74qtYb 4q6uKuG+KriK4q0p7YquxVxNBiq1RU4q5hirWKtYqvA2ocVW9Diq/FVp3bFV2KuIqMVWYquUCmKt 4qsOzYqvxVa+Ktr0xVvFVhG5xV3TFXUPXFXHce4xVdX4cVaP2sVXYq49MVWHtiq5a0xVvFVrdcVX YqtfFVw6DFXYqtPfFWj1xVsttirQxVdT4aYq0w74q2pqMVbPTFVhxVcvTFWyaDFVq7nFV2KtMKjF WlPbFV2KrT+1iq3FXYq7FVTtirsVWEEHFVwYd8VaoteuKt8gMVW7k4qvAoMVdirsVWsvcYq4N44q 2aEGmKrMVdirsVVO2KuxV2KtFRirXA4q3wxVumKuxV2KuxV2KtFQcVa4kYq3xGKu4jFXcRireKux V2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVbyJ6DbxO2Kt8j4D78VQsmraZFdLaS3cCXbE BbdpUEhLfZAQnlv2xVFcj4D78Va5Hw29jiq4EEVGKuxV2KtFt6AVP4Yq7kfAffiqjdX9paKHup4r dWNFaV1QE+ALUxVUjmSWNZI2V43AZHU1Ug7ggjriq7kfAff/AGYq4MD8/DFW8VUbiQAon853+gVx VIvN/nHTvK+kHULxJJ5JJFgsrKAcp7i4k2SKJe7H9WKsOj8p+YfNk3qee9WktorhPVi8oabOYII4 agUuZUIluCDx5GoUN9nbI2hKL/yx+WeneZofLS+RRcGYxrHeBeQZZBUuGYliEqeTFtqHKZZanw0W BnRqk6l/Lk+XpUl8iazLoV65ZotHuZXudNuSvxOrQSl3UkDd4zVR0y9myDyR56/TwutO1K1Ol+Zt LITVNMc1pX7M0Lftwv2Pb7iSllcUn70r4iv8MVVsVU7iURQvIf2RXFUPcXdtaWstzcyrDb26NLPP IQqIiDkzsx2AAFScVeYDWvNX5ggXlnqknk/yFJKtva6gvGLVNTaRxGjQPIKW0cjkCMgc28N9lUk/ Mbyj+Vf5faXbaneeTbnzO15KYrm9lllupFcDkGmeZ24896cVAxVOrH8rfJMvl628z6Ml/wDl9ez2 63Ty29y9uYVIDAXMEjPAVHV1KjbrTsqmnl7zr5j0bzBb+UfPnpNe3tf0F5jt19K01Dj/ALqdOkNz 34D4W/Z7clXoIkoyn3ofpxVXxVB3xpLCfc/qOKvMDqEGo+dNf82X49bTPJqNpukQnp9cZFe6koek lWSIHwyvJMRBJ6MZGhbDvKHn24svOsus61I0seoIYLqQAn0lLBkKr14oVAoO3ic1mHU+u5dXEhl9 Vl7zb3MFzBHcW8izQSqHilQhlZSKggjqM2wNua8U/NbzxBqmqWNtolwWi0xzMb2IkBpzQL6bDqEA +0Otc1uqzgkCPRxM2SzQTPUNeM+iaH+ZEQ4alok6WOvCMU9aymdY50IFK0LrKgOynMzBl44gt+Of ELevWzVuf9j/ABy9sRuKobU/94Zv9U4q84/MxZPMWteXPIKOVs9ZmkvddKmh/R9hxkaI03AnlZEq PfFXz5+cH5v6hffmXafooqug+T76P9EWKfDC8tnIvKVgNjVo+KeCdOpqFfV/kfz35c86aHFq+h3I miYAXFudpoJCKmKVP2WH3HqCRvhV5x/zkh+amiaD5S1DytbzrP5h1eH6u1shqYLeUfvJJqfZ5Rkh F6mtemKvP/yS16b8wvJOr/lrrNwzahp8Av8AyzqDH97A8LAR0f7X7mVk4034My1oBgV7x+W/me48 zeS9I1e7X076ZPTvkoBS5gkMM+w6VkjY0wqzPFUDqRo8J9z+o4q8dgjMvkjzvGm7r5lvGnUChobi Jlrtv8JU5iay/CLVm+ksBez9s0Yk4D278uWnGn+k8jNFFbWYijLEqtYatxB2FT1pm90srj8A5+I7 PHdZ0fTrLVrq106ZriyhcpDKwoSB1HvQ7V79c0+YgSIBsOHMAHZktlEIPyg82vNtA6lEr0LlVAp7 1Zc2HZ9mJ97kafkXsugLcLBbpctzuUgRZ2rWrgAMa9982TkpxiqF1T/eCb/VOKvOoyV/P2zeU0jm 8sXEVvUHeVL+J3A9+GKviC9guIL24guQRcxSOk4ateasQ1a++BX0F/zi1dXUTW8MUzxw3GrulxGr FVkVdMuHUOAaMAyhhXviqV/85a6RoNr55ttQtb1pNZ1C3VtR08rVYkiAjhkD/wCWFI4+1e+KpN/z i3Dcyfm7ZPECY4bW6e4p0CGIoK/7NlxV9D/kqWbQNSlB5W1xrupy2bD7JiN2wBX25K2FXqWKpdq5 p6J9z+o4q83m+r6D53vINQAXy75zRIzLsqQ6lGnp8Cei/WIxUN3YZCcQQQeRQRbGPMHli60e9aCd SYiSYJwPhdf6+IzmtRhlilR5OuyQMS9E8o3GmWfl86k92vorDClwCKem0KcOJ7knsKfLNzpJxGPi vahflTmYiOG3mtppmo61qRVAbi8uWLyuelWNWdj0A3zSxE8s9tyXCAMiyfWLC2urnSvy/sCJre1k j1DzPMv2RFGwkjhfp8U8gG1eQUV6Z0WDEIRER0+92EI8Ip6XpbVuG/1f45ezTTFULqn+8E3+qcVe afmRDqFjJo/nTTIWuLzytO81zapu02nXCenexoOhcIA617rirw38/Pyz5XTfmP5UpqPlTXgLy4lt wW+rzSbyO46hJGqxJ+y9Vam1Qqef84nDSru6mtnv0g1PT7w6hDYMtXnie0ltWKEkfYMtTSv41xVh f/ORXmn/ABT+aFxBpt5+k7CxWKy09IByUScR6yx8R8ZMxO4rXttTFXovkDynf/lT5HuNTuogfzF8 3BbDy/pexlh57jmOwQkSzV2XiqmhxV7N5F8vQeW/L2k6FC3NbGJI3k3+OQnlLJv/ADyMzfThVmmK pfrMbG3WQAn0zUgeHTFWN6rpunavp02n6hCtzZ3K8ZYm6EdQQRuCDuCNwcVYzGfOWgwnT7i0Xzf5 dUUiMjImoxIo2D+pSO4oOhFGOVyxgiiLCCLQZ1nycwq/lHzDGSeTW4s5ypZagbrIU+XxZjfkcXd9 rX4Me5Gw6p5rv4TZ+WdFXyvYSbS6nqARrmnQ+nbIW+MdjI1MyMeKMBURTOMQOSd+XfL2naDZvb2f OSSdzNd3czc5p5m+1JI56sfuy1kynRUYl5f2T8I+jriqa4qo3kXq20kf8wIxVjgkO4OzA0YeBGKs Jfy15l8rXl1f+RZLeTT71zLqHlS+qtm7t9t7WRQTbu/daFD36DFWJ6lpn5az3n1zVvyv1/SNYBPq yaGjSQ1dSGCPYzpGQQTU+mPxxVH+W4tL0Zgfy5/LOax1EjiNZ8xEW4h5ftfHJcXTr4qnHFWVeWvK E9pqkvmPzDfHWfNNzH6T3rLwht4a1+r2kW4jjB6n7TdT1xVmemq0l2tOi/E3yxVP8VaZQwIO4PXF UruNBjdi0MhiqalRQj8cVUP8PT/8tB+4Yq7/AA9P/wAtB/4EYq7/AA9P/wAtB/4EYqqQ+XwGrNMz r/LQD9WKptHGkaBEFFHQYquxV2Kpfe6PDcN6isY5O7L3+YxVB/4em/5aD9wxV3+Hp/8AloP/AAIx V3+Hp/8AloP/AAIxVcnl+So53BI7gAf0xVNLWzhto+EY+ZPU4qrYq//Z + /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAB8AwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4qxHz3+Zvl3yesMF16 l9rN3/vDo1mvqXMpOyniPsqW25H6KkUxViKn8+PNP7+S7s/JOnSA8LaKNby94np6jPVQf9UofbAq 3/lVnmUfDP8AmVrX1w048ZvTWuwH7rma/fgQuOi/nn5cAl0rzFa+arWOpOn6nAIJWHgsyHkW92kA /VhSyDyV+bema7qJ0DWLOXy95pjHxaVebCWne3lIUSbb0oD4VArhtWeYq7FXYqlnmPzLoflvSpdV 1q7SzsotjI/VmNSERRVnY02VRXFXmq+efzX86/H5O0uHy7oMn91rWrjncSr15xQDkoqOlQwP82Kt n8s/O8zmfWfzI1T1HJJFnxsowx7BUfjT2CjFXDyH+a+lgz+X/wAwJr2o+C21aFbhGFagGY+qw+ar iqI07839Y0K/i0r8ytIGjPMwjttctSZNOlY1+0SWaLp3Y+LcRir1KKWKaJJYnWSKRQ0cikMrKwqC CNiCMVXYqxL8zfPa+T/Lv1qCH63rF7ILTR7EbmW5k2Wqj4iq9Wp12HUjFWE6Po+neQdNn83ebZv0 r501T47iduLSeoy/7z2/ZEQbMw2p7cVyrJkEBZYSkIiyz7yprUmt+XrLVJEWN7pC7RoSVWjEcanr SlDhxT4ogphKxbA9b/JCLUPMdxqEeoCKxvJmuLiIpylVpGLSBGrx3Y7V6e+Y2TR8UrvZqlhs29Km aOy092Six20RK8ugEa7V+7MzkG55sD5X/Nry8YLpP0f5isR6kE0Z/fW8g+zLE44s0fKnJe3z4tlO HMJjzYY8gl70/wDyq856rf8A17yp5movmvQKJcPXa6t9hHcrXc125/MH9qgvDY9BxVDapqVjpenX OpX8ogsrOJ5riVuiog5Mduuw6Yq8a0DT5PPuoP8AmH51Ai8u2nM+W9FnP7iKBT/vTMteLO9O/X/V C4qzfyZ52g8zXepi2h9KzsWiS3Lf3jh+dXYfsg8dh/mFUF5//Lr/ABPcW95b3QtruBPRYSLyRo6l h03BBY4qnvlLy3D5d0SHTY5DMykvNKRTlI32iB2HYYqx+/8ANnl7VfMeqeSdetopLSQxxQO+8cpe JHMbfyuHY8WHfwPVVJvKl7f/AJb+brfydqM7XHlHWnb/AA5dyks1rOSP9EYn9kkgL7kHu1FXsGKv JXU+aPz0unn/AHmm+SrSOO2jrVfrt4odpKdK8ar80GAq8/8AzF16bXfMtzLz5WlqzW9mtfhCIaFx /rsOXyoO2abU5uKfkHByzssi/Kv8wbXR4v0HqzGOzZy1ndUJEbOd0cD9kncHsevtfpNQB6S2Yctb F7Tmzcp5f+av5h20FpdeXNLYyX0wMN/OKhYUI+JAf2nYGm3Qe+YWq1AiOEc2jNkoUHlvlvVbvRNY ttStSfUgcFk6B0OzofZhtmuhkMZWHFjKjb1H8wJoNG81eUPzAszSB5007UpFrR7O7UlGYD+QFm+f HN4De46uwBewZJLy7885bnUovLnkq3ZkHmbUFW8dSK/VLQrJMOnYsrf7HFUo/NzVVtoLHyxYAQ2c MSSTRJsvBfhhjoOy8K0/1cVYf5I80S+WNa+tlDLZzL6V3Ev2ilahlr+0p6fdhV7/AKXqljqlhDf2 MomtZwTHIARWhKnY0IIIIOBUPrOtwadHxFJLt1LQwkkA9gWYA8Vril4fq3le6ku7i/uL8S3c8jTS t6ZUc2PI0+JqCvTG1pmGuWr+dvyku0uPj1jTFaWOUfb+s2g5qyn+aSPav+VihkX/ACsOX/lTP+Mq /wCnfo7lyotPrv8AcV4/Z4/WPw7Yqkf5ZgDzL+Y0y73h1mVSKb8E5+ltT3ORPVDys25Kgnc065zX E6xqG2rcR7ftr+vJxlukPojQLm5mu9bWaRnWDUDHAD+xH9WgbiPbkxOdBjlZPv8A0B2MTzeQfmV5 VuNM8wzXryrLBqkklxEagOpJqyFa1+HkKHpmq1uMxlfQuJniQb72Kpb+2YRk0PQ/zDBP5ERNIf3s aWhhrsarMqrQd/hze6c/u4uwx/SHt2ZLY8q83hX/AD48oLKfhj068eBTQfvGSUN8/hGKsV/MiN38 5ahyrQeiE+XoJ/GuKsVa3wq9a/L+a5hsPLNqkhW3lt9UeWIfZZkuk4E/Lm334FSXzX5gRPMF8kj1 eJ/TVfAKKAYEsKuNT1BpGmkmYoT8UZ+zxJ7D2w0hmH5R6oJta1LTya2stoZpQelY3VP1SnAEsb9e 7/6Fi9Kp9L6/6fGm3p/XPUpXw9Xf54UM60enl787PMOlyj07bzPbQ6lYEnZpYQVlUf5Rb1G+Q+WD qrEPM2gvpetXVoVpGHLwHsYmNUp8ht885rUwOOZDrskeGVJZBbf6RFt+2v68qjLdgHuWgLS61s/z agx/6d4RnSYecv636A7GHM+95Z+YItbjzVdPBNJOVpHL6nRHTYxx/wCSvy61+eabXTHiGjbh5z6k ksdLmvLuG1gXlNM4RB7k03zEiDIgDmWoCzTN/wAy7WO7byj5BtCS9/dwtcBKchZ2i/vGYfKrD/VO dPCPCAO52YFCnr+WJeXfnJXR9d8necaAW+l3z2d/J3WC9UIXPsgVvpOKoT8ztGIv4NUjFYblBHIw 6c0+ySf8penyxVgrW3tirM47m4sfK2jT27mOZba/RXGxAku4VND2NDmNrJmOIkc2/TxEpgFKLYof ibcnck9c5WVu8DV2UoaYxSUjvZ5rZXmt5GhmRSUkQ8WBp4jMvFIgghoyAEPRf8GP/wBC/wD6CqfU /R/16lN+fq/X/T+fL4c6Xi9N+TpK3pOfzV8m6hrem2mr6ERH5n0CQ3emN/vwbGS3O9P3gUUr3FNg TkiGKUaff6J+ZHl5bq3ItNbs6x3Nq5/eQS9GjkXrwYr8LU/HkMxNVphlj/SDVkx8Q82HahpOoaVd CO8gMTqaoxFVandW6EZz+TFLGakKcGUTE7vRdN89aGdImvpgtvdqa3FqgAeWUigKfzcgvU9O+2bz FrsZgZHY9Q5kc0at53OLvWtWnmgti091I0noxAtTka/7ZzSzMssyQNy4ZuUtmaabpukeSdJn8wa/ Mkc0abDYlKg/u4/55H6bfqqc3Oj0fheqX1fc5mHFw7nm3+WGh6nq2rXf5ha9EYbzUoxDotk2/wBX seqtv+1J+qp/aoNgA3vS8KpZ5m8vWHmLQL7RL8E2t9EY3I6q1eSOvujgMPcYq818larKiz/lt5yo ms6egjsZ2NEvLVf7mWFj1ZQPnQb7hqKoDX/Keo6TIzMhmtK/BcoNqf5Y/ZOKW5Nesj5Pl0uaJVu7 cj6pNSpZHmV3WvUHv709sxNd/dH4fe36X+8H46Mfiu6DrnOGLuQWpruo64iKkpPqc4NvLv8Ast+r MiA3a5HZ9E1/50iv/as/7F86L+D4Ol/i+Kd5YwYD5w/K769qn+JPK17+gfNCg850H+j3IO/G5jAN amnxUPuG2oCFSGb8wPNOiwm18+eUp2hWgfUtORbq0fegZlJIT6Xr/k5GUbFEWEEWhD+Zn5ImrvxS TqYjazA17CgXjvmP+UxfzWHhR7kVbfmY96jWvkLyneahITwFy0K2tmDQ0ZpOn0MV+eXwgI/SAGYA HJMtD/LDVtW1OLXvzDu49SvIfistFhH+g29d/iU/3jfhtuW2pMBL0vCrsVdirG/O/kHQvN1ikN+r QXtsedhqUFFuIHG4KP8Ay16r0+mhCrCl1L81/J5+q6zpZ826RH8MWq6f/vXwFf72D4mZqDw+bnFU h8yfmL+Weq6PcQhW0bVmAMX1q0dGDqQxV/REnXocqzY+OJi2Yp8MgWAWOsahfzrb6Vay6nK1SEtI ZpTQd6BQaZq/yEnO/ORZnbflz+ZVzAsp0tIOYBCSzRK9CK7qHanyO+P5CS/nItH8n/zEvJFgmgtr aFyBJM0ysFHc0Usx+gZZHRSBYy1Qe8foxP0N+i+Z4fV/q3qU3pw4cqeObPh2pwL3tGZJDsVdirsV dirsVdirsVdirsVdirsVdirsVdirsVdiqG1LU9O0yylv9RuYrOygXlNczuscaDxZmIAxV5Re/wDO R+k3t7JYeRvL2pecLqL7ctrE0NsK+MjI7ge7RgeFcVWD8wf+chpUNxF+W0CW+x9OS/hEtKCvwmRG /wCExVaP+ch73RZki8++S9U8txMQov0H1q2qe5fjF9y8jir1Hy55o8veZdNTU9Cv4tQsn2EsJrxP 8rqaMjf5LAHFU0xV2KuxV2KvM/Nn/OQXkPQ786Tp5uPMet14DT9Jj+sEP/K0gPCvYhCxHcYqk6fm d+e2pH1NJ/LI29vvQahexxSEClKrL9WIPtT9WKrX/Or8y9DHPzb+W19DZpvPe6bKLpUUGlSqqyff KMVZv5F/NjyN53QjQtQDXqLyl06celcoO/7tvtAdyhI98VZfirsVSzzL5j0ny3oV5rerzCDT7GMy TP1J7KijuzMQqjucVeFW+l3n5mRSfmD+Z10dG/LmxrNo+gGR4lkiBos85WjNzBopX4nJ+HitOQV7 L+Xmp+W9U8oWGoeWrEafok4k+pWyxJDRI5Wi5cEqBz4cvHfffCr5/wDNuqf85V23nq70zTnv57SS 6YaddW9nA1l6DOfRLTekY0ASnL1GqO+BX0dM0lp5Wd9bVdQltrItqShF4TtHFWWiNRKOQaA7YVeF /wCF7GSz/wCVofkTdiCeME6r5aAYQzhPieA29fgkAO0Y2OxjINOQV6/+Wn5h6T588rw61Yj0ZgfR 1CyY1e3uFALxnxG9VbuPA1GFWVYq7FXhHmHzD5l/N7zLeeUfKN42meSNMYR+YPMEYIa5YEh4IHBo VI+/qfhoGVZd+UZ/Kqzu9X8veQ7ZJG0RYE1XVVAczSTGQBTcE85SDCxPH4B+zirFvz/v/wA9dN1m xufIr3c2hS24Sa30+1juZUuldizOBHJLxZCtD9nY9O6rOPyZP5hv5Jin8+ytJrVxM8sUcsccUsVs VURpKsaoOVQzb/FvQ4qwzzd5U/Lfz75s1bS9GuD5c/MzQX9WK+gHoSStxWRJT6ZpMvxjkw/eL8uq qdflL+ZmtX+p3vkbztELXzto9auBxjvbdaUnj6AtT4jQUI+IdwFXqeKvEfzRjk8/fm1oH5cBidC0 qP8ATXmNV/bptFE3foyr/wA9K9hirxz/AJyR/MyXzD5qk8saY/peW/L7m2jgi+GOW5i+CRyootIz WNPAAkfawK9P/wCcUvzL0y68tr5Ivp1h1XT3kk01HNPXt5GMrKhPV43Zqr/LSnQ0VfQWFXl3/OQP 5maZ5R8k31gk6tr2swSWthaqauqSjhJOw/ZVFJ4k9WoPGir5U/KD8y7/AMg+b7bUUkdtJuGWHV7Q E8ZICaF+I6vFXkn3dCcCvom5SL8v/wA9tN1LT2VPK35ioYrmNP7pb8UKSL2/ePIpH+u+FXueKvMv +cg/NmoaH5DOn6QSdb8x3CaTYKn2/wB/USFffh8APYsDirzH849ch/Kv8ttH/LTy5L6Wp6hAZdXv oqrIY2NJXqKGtxIGUeCLx8MCsD/5xr/MnTvJvnOa21eYW+j63GtvNcNskU8bEwSSHsvxMpPblU7A 4q+1kdXUOhDKwBVgagg9CDhVifnf8z/K3k+S3tdQea71e9FbHRrCI3F5N2+CNaUBIoCxFe2Kvk3z N5Y/OuXzje+f4vLuqWF3JdtfQSxRM0kC1qilVq1EjAVqr064FenedNeHnD8u9C/ODy+Y7fzf5Skj OqQR7sED8JonUfFw5H1FDf7rZvHFXuf+MtJ/wP8A4x5f7i/0f+k+or6fperx/wBb9mnjhV5d+XNw x/Mz83vMsq87mwkjtbfkanhbRygr06EW8dMVfHs0ss0rzSsXlkYvI7bksxqSfmcCuhmlhlSWF2jl jIaORCVZWG4II3BGKv0L8oebLjXdT8y2csCQroWpHT4nQkmRRDHJzavQ1kpthV8UfnZa61b/AJp+ Zf0tFJFLNfTy2vq1+O1aRvq7oSTVTHSlPl2pgVhGKvpjzrfXF3/zjN5I8wOf9O0a6s3gkr8VLZpb dRyoeoRT9GKvpzCrxv8AM6M6n+ev5ZaRKK29ub3UACdjJDH6qmlDupthT+GKvn3/AJyS1Ge9/OPX VkPwWn1e3hWtaIlvGx+92ZvpwK8xxV9df847+cr6Dy35M8stGJodTh1adrl2YvGLO4ARFHTifU+j CqefkbbWeoaLqn5qazSTV/MM91N9ZkHNrWwtZGhS3joCQqiE1p1AHhirFfKf/OWS6z54tNGudES2 0jUbpbS1uxMTMhlcJE8ileJBJHIClK9TTcKm/wCaXly18vedbbUNOUW+mefYLzQvMVknwxSXM1u5 trniAQJOZ+JqeJ6sxwqxT9OXf/QnFan1a/UfUrv6f6Sp4dPT+CmBWYeSIIdN/PX8xvK92OMPmK2g 1K3PTmnEiULXvW6b/gcKvkXXNIu9F1q/0i8HG60+4ltpx25xOUJHsabYFQOKvvH8q/8AlI/zC/8A Agf/AKhYcKvm3/nKHWfMd5+Zc2n6s9t9U06MDSorZlfjBN8VZj9sStSrK3Tamx5EK8gAJNB1xV9S fmJok1h+VP5aflsVK6rrN7ZrcW5qCoA5XAah6JNcr18MVfSGFXjP51OND/Mr8tvNr/DaQ30umXsx qAi3YVFJPgEaUn5Yq8P/AOcpfL0+mfmvd35Qi21mCC6gb9mqRiCQfPlFU/PAryHFXtflGPzFdaX+ WGl+X9QbSr/VTrNk2oRgGSGB7pWmePcUYRoaUIPgQd8VfVHljyPovlzybD5RsTK+lwxTQhpmDSsL h3eQllCipaRugwqwnTP+cZPys03UrTUbaC8FzZTR3EBa5YjnEwdaim4qMVZR+Z35dWnnnQo7GS8n 0++s5DdaZe27cTHcBGRS4pVl+LcCh98VeJfV7X/oT/6nwP1r616HXb6x+l6Vr0px2wKzr8+NE1bS NQ0T80tAhM2peV24apbqN5tOcnnUiuyc3B22Dlv2cKvPfzx/Lq0886RB+ankQfXoruBW1iziFZT6 ahfVCCv7yMDhKvXavjgV834q+8/y61fyV+gdd876dqwfSdaun1PUHuOMf1N1iRJIZAD8JQIOvWu1 QRhV8VeftWsdZ88a/q1g7yWWoahc3Ns8o4sY5pWdag9NjsMCvTv+cf8A8oJNVvo/O/mZRZeU9Hrd xSXFES5eCrcvi/3TEV5Ox2NOP81FXq/5dfWfzL/NS8/MieN08s6Er6d5XjkBHqvQrJcUPs7H5sor VDhV7jirD/zZ8iR+ePIuoaECq3jAT6dK3RLmL4o6nsG3Rj4E4q8iNgn51/ln+gr9lsvzK8os0Msd z8LmSP8AduXHXhOEAc0+GQeHUK+Y9W0nUtI1K403U7Z7S/tXMdxbyijKw/z2I2OKvZ/yZ1rSL/XP yx0+CRxqmi3uqxXkDLRfTuo2mikVu9aMvsR8qqvsLCrsVdir5l/9de/7fX/d2xV9MyRxyRtHIoeN wVdGFQQdiCD1BxV4dqvkTzz+V+tXPmL8toTq3li7Yzar5PZjVGPV7QCp6bDiCw2FHHRVi99B/wA4 3/mbO893O/kvzQ7H63FKVsyZe/qeoGtnPLwKue+BVsP/ADjDpf1C4hsfzJVNDumSW5t0hRopPSqU MhW7WNivI0JXbFVODyV/zjX+XbfXdf10eatUg+JLCNkuELjt9XgqgPtPJxxVkY0z8wvzkaCC9tJf Jv5ZxcStiPgvL5E+wONBxTYU+HgOo57EKvcdH0fTdG0u10rTLdbXT7ONYraBOiovz3J7kncnc4VR mKuxV5Z+Zn5S6nf61F528jXv6H87WoAc14297Gv+65xSnIgAVbYjZuxCrBNY87flt5vkTQPzl8vS eV/NVsoRNQKSIh3+1FOgZghNSA/KP/KOBUht/Jn5fflv548p+atG8zx6v5el1Bobyb1YJjah4HSN 5HgNONZPiPEUpir6Xj82eVpEWSPWbF0YVVluYSCD3BDYVXf4o8s/9Xey/wCkiL/mrFUPqHnjybp1 nLeXmt2MVvCpeRzcRHYCtAAxJPgBucVeD/o/UP8AoVT6z9Vl4/XP0n6fH959U/SXq+rx8PT+P/V3 6Yq+k8VdirHvMv5e+SPM55a9otpfy0oLiSMCYClKCVeMgH+yxVhj/wDOMf5NNJzGjSota+mLy64/ LeQt+OKsn8tflN+W/lqZZ9G8v2tvcpQx3LqZ5lI/llnMjr9BxVluKuxV2KuxV2KoDWdA0PW7Q2es afb6jamv7m5iSVQT3AcGh9xirAL7/nGz8m7uUy/oIwMSSwgublFNf8j1OI+gDFURp3/OPP5O2KkR +XYpmP2nuJZ5if8AkZIwH0DFUZ/yo38pP+pXsv8AgW/5qxVUg/JP8p4Jkmj8rWBeM8lDx81qPFXL KfpGKsz9GH0fQ9NfR48PSoOPGlOPHpSnbFV+KuxV1QMVa5DFW6jFXYq7FXYq7FXYq7FWuQxV3IYq 3irsVdirsVWlvDFVuKrgu2KrcVXBiOuKrsVdirsVaLUxVaa4q4LXFXEUOKuBIxVeDXFXYq0x7Yq5 R3xVaw3xV1cVcN8VXEVxVpT2xVdiriaDFVqipxVzDFWsVaxVeBtQ4qt6HFV+KrTu2KrsVcRUYqsx VcoFMVbxVYdmxVfiq18VbXpireKrCNzirumKuoeuKuO49xiq6vw4q0ftYquxVx6YqsPbFVy1pire KrW64quxVa+Krh0GKuxVae+KtHrirZbbFWhiq6nw0xVph3xVtTUYq2emKrDiq5emKtk0GKrV3OKr sVaYVGKtKe2KrsVWn9rFVuKuxV2KqnbFXYqsIIOKrgw74q1Ra9cVb5AYqt3JxVeBQYq7FXYqtZe4 xVwbxxVs0INMVWYq7FXYqqdsVdirsVaKjFWuBxVvhirdMVdirsVdirsVaKg4q1xIxVviMVdxGKu4 jFW8VdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdiq3kT0G3idsVb5HwH34qhZNW0yK6W0 lu4Eu2IC27SoJCW+yAhPLftiqK5HwH34q1yPht7HFVwIIqMVdirsVaLb0AqfwxV3I+A+/FVG6v7S 0UPdTxW6saK0rqgJ8AWpiqpHMksayRsrxuAyOpqpB3BBHXFV3I+A+/8AsxVwYH5+GKt4qo3EgBRP 5zv9AriqReb/ADjp3lfSDqF4kk8kkiwWVlAOU9xcSbJFEvdj+rFWHR+U/MPmyb1PPerSW0Vwnqxe UNNnMEEcNQKXMqES3BB48jUKG+ztkbQlF/5Y/LPTvM0PlpfIouDMY1jvAvIMsgqXDMSxCVPJi21D lMstT4aLAzo1SdS/lyfL0qS+RNZl0K9cs0Wj3Mr3Om3JX4nVoJS7qSBu8Zqo6ZezZB5I89fp4XWn alanS/M2lkJqmmOa0r9maFv24X7Ht9xJSyuKT96V8RX+GKq2KqdxKIoXkP7IriqHuLu2tLWW5uZV ht7dGlnnkIVERByZ2Y7AACpOKvMBrXmr8wQLyz1STyf5CklW3tdQXjFqmptI4jRoHkFLaORyBGQO beG+yqSfmN5R/Kv8vtLttTvPJtz5na8lMVzeyyy3UiuByDTPM7cee9OKgYqnVj+VvkmXy9beZ9GS /wDy+vZ7dbp5be5e3MKkBgLmCRngKjq6lRt1p2VTTy9518x6N5gt/KPnz0mvb2v6C8x26+laahx/ 3U6dIbnvwHwt+z25KvQRJRlPvQ/TiqviqDvjSWE+5/UcVeYHUINR86a/5svx62meTUbTdIhPT64y K91JQ9JKskQPhleSYiCT0YyNC2HeUPPtxZedZdZ1qRpY9QQwXUgBPpKWDIVXrxQqBQdvE5rMOp9d y6uJDL6rL3m3uYLmCO4t5FmglUPFKhDKykVBBHUZtgbc14p+a3niDVNUsbbRLgtFpjmY3sRIDTmg X02HUIB9oda5rdVnBIEejiZslmgmeoa8Z9E0P8yIhw1LRJ0sdeEYp61lM6xzoQKVoXWVAdlOZmDL xxBb8c+IW9etmrc/7H+OXtiNxVDan/vDN/qnFXnH5mLJ5i1ry55BRytnrM0l7rpU0P6PsOMjRGm4 E8rIlR74q+fPzg/N/UL78y7T9FFV0HyffR/oixT4YXls5F5SsBsatHxTwTp1NQr6v8j+e/LnnTQ4 tX0O5E0TAC4tztNBIRUxSp+yw+49QSN8KvOP+ckPzU0TQfKWoeVredZ/MOrw/V2tkNTBbyj95JNT 7PKMkIvU1r0xV5/+SWvTfmF5J1f8tdZuGbUNPgF/5Z1Bj+9geFgI6P8Aa/cysnGm/BmWtAMCvePy 38z3HmbyXpGr3a+nfTJ6d8lAKXMEhhn2HSskbGmFWZ4qgdSNHhPuf1HFXjsEZl8ked403dfMt406 gUNDcRMtdt/hKnMTWX4Ras30lgL2ftmjEnAe3fly040/0nkZoorazEUZYlVrDVuIOwqetM3ullcf gHPxHZ47rOj6dZatdWunTNcWULlIZWFCQOo96HavfrmnzECRANhw5gA7MlsohB+UHm15toHUoleh cqoFPerLmw7PsxPvcjT8i9l0BbhYLdLludykCLO1a1cABjXvvmyclOMVQuqf7wTf6pxV51GSv5+2 bymkc3li4it6g7ypfxO4HvwxV8QXsFxBe3EFyCLmKR0nDVrzViGrX3wK+gv+cWrq6ia3himeOG41 d0uI1Yqsirplw6hwDRgGUMK98VSv/nLXSNBtfPNtqFretJrOoW6tqOnlarEkQEcMgf8AywpHH2r3 xVJv+cW4bmT83bJ4gTHDa3T3FOgQxFBX/ZsuKvof8lSzaBqUoPK2uNd1OWzYfZMRu2AK+3JWwq9S xVLtXNPRPuf1HFXm831fQfO95BqAC+XfOaJGZdlSHUo09PgT0X6xGKhu7DITiCCDyKCLYx5g8sXW j3rQTqTESTBOB8Lr/XxGc1qMMsUqPJ12SBiXonlG40yz8vnUnu19FYYUuART02hThxPck9hT5Zud JOIx8V7UL8qczERw281tNM1HWtSKoDcXlyxeVz0qxqzsegG+aWInlntuS4QBkWT6xYW11c6V+X9g RNb2skeoeZ5l+yIo2EkcL9PinkA2ryCivTOiwYhCIiOn3uwhHhFPS9Latw3+r/HL2aaYqhdU/wB4 Jv8AVOKvNPzIh1Cxk0fzppkLXF55Wnea5tU3abTrhPTvY0HQuEAda91xV4b+fn5Z8rpvzH8qU1Hy prwF5cS24LfV5pN5HcdQkjVYk/ZeqtTaoVPP+cThpV3dTWz36Qanp94dQhsGWrzxPaS2rFCSPsGW ppX8a4qwv/nIrzT/AIp/NC4g028/SdhYrFZaekA5KJOI9ZY+I+MmYncVr22pir0XyB5Tv/yp8j3G p3UQP5i+bgth5f0vYyw89xzHYISJZq7LxVTQ4q9m8i+XoPLfl7SdChbmtjEkbyb/AByE8pZN/wCe Rmb6cKs0xVL9ZjY26yAE+makDw6YqxvVdN07V9Om0/UIVubO5XjLE3QjqCCNwQdwRuDirGYz5y0G E6fcWi+b/LqikRkZE1GJFGwf1KR3FB0IoxyuWMEURYQRaDOs+TmFX8o+YYyTya3FnOVLLUDdZCny +LMb8ji7vta/Bj3I2HVPNd/CbPyzoq+V7CTaXU9QCNc06H07ZC3xjsZGpmRjxRgKiKZxiByTvy75 e07QbN7ez5ySTuZru7mbnNPM32pJHPVj92WsmU6KjEvL+yfhH0dcVTXFVG8i9W2kj/mBGKscEh3B 2YGjDwIxVhL+WvMvla8ur/yLJbyafeuZdQ8qX1Vs3dvtvayKCbd37rQoe/QYqxPUtM/LWe8+uat+ V+v6RrAJ9WTQ0aSGrqQwR7GdIyCCan0x+OKo/wAtxaXozA/lz+Wc1jqJHEaz5iItxDy/a+OS4unX xVOOKsq8teUJ7TVJfMfmG+Os+abmP0nvWXhDbw1r9XtItxHGD1P2m6nrirM9NVpLtadF+Jvliqf4 q0yhgQdweuKpXcaDG7FoZDFU1KihH44qof4en/5aD9wxV3+Hp/8AloP/AAIxV3+Hp/8AloP/AAIx VUh8vgNWaZnX+WgH6sVTaONI0CIKKOgxVdirsVS+90eG4b1FYxyd2Xv8xiqD/wAPTf8ALQfuGKu/ w9P/AMtB/wCBGKu/w9P/AMtB/wCBGKrk8vyVHO4JHcAD+mKppa2cNtHwjHzJ6nFVbFX/2Q== @@ -110,15 +110,15 @@ AIRobin Document - xmp.did:d74b68e3-299e-3d42-84a6-fb7353bfd658 - uuid:8ca93482-ba60-4213-8393-bfa8062707e5 + xmp.did:bfdcef36-eb0b-8e4f-9178-799e611ce565 + uuid:39cdd496-195d-4976-b5fe-84cb32dbfc68 xmp.did:2520a7c9-03a3-1044-b2dc-89724d81ad50 proof:pdf - uuid:979eccb3-da43-4d82-8b4b-67c29f55eeea - xmp.did:f1663097-f590-6c4b-81b4-e504359f1e0d + xmp.iid:dd146089-e895-8d4b-9d51-85173442cff9 + xmp.did:dd146089-e895-8d4b-9d51-85173442cff9 xmp.did:2520a7c9-03a3-1044-b2dc-89724d81ad50 - default + proof:pdf @@ -131,9 +131,9 @@ saved - xmp.iid:d74b68e3-299e-3d42-84a6-fb7353bfd658 - 2023-08-14T23:29:13+02:00 - Adobe Illustrator 27.8 (Windows) + xmp.iid:bfdcef36-eb0b-8e4f-9178-799e611ce565 + 2023-04-23T22:20:48+02:00 + Adobe Illustrator 27.2 (Windows) / @@ -164,23 +164,23 @@ -endstream endobj 3 0 obj <> endobj 5 0 obj <>/ExtGState<>/Properties<>/Shading<>/XObject<>>>/TrimBox[0.0 0.0 128.0 128.0]/Type/Page/PieceInfo<>>> endobj 23 0 obj <>/ExtGState<>/Properties<>/Shading<>/XObject<>>>/TrimBox[0.0 0.0 128.0 128.0]/Type/Page/PieceInfo<>>> endobj 24 0 obj <>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 128.0 128.0]/Type/Page/PieceInfo<>>> endobj 25 0 obj <>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 128.0 128.0]/Type/Page/PieceInfo<>>> endobj 26 0 obj <>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 128.0 128.0]/Type/Page/PieceInfo<>>> endobj 27 0 obj <>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 128.0 128.0]/Type/Page/PieceInfo<>>> endobj 28 0 obj <>/ExtGState<>/ProcSet[/PDF/ImageC/ImageI]/Properties<>/Shading<>/XObject<>>>/TrimBox[0.0 0.0 128.0 128.0]/Type/Page/PieceInfo<>>> endobj 38 0 obj <>/ExtGState<>/ProcSet[/PDF/ImageC/ImageI]/Properties<>/Shading<>/XObject<>>>/TrimBox[0.0 0.0 128.0 128.0]/Type/Page/PieceInfo<>>> endobj 106 0 obj <>stream +endstream endobj 3 0 obj <> endobj 5 0 obj <>/ExtGState<>/Properties<>/Shading<>/XObject<>>>/TrimBox[0.0 0.0 128.0 128.0]/Type/Page/PieceInfo<>>> endobj 23 0 obj <>/ExtGState<>/Properties<>/Shading<>/XObject<>>>/TrimBox[0.0 0.0 128.0 128.0]/Type/Page/PieceInfo<>>> endobj 24 0 obj <>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 128.0 128.0]/Type/Page/PieceInfo<>>> endobj 25 0 obj <>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 128.0 128.0]/Type/Page/PieceInfo<>>> endobj 26 0 obj <>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 128.0 128.0]/Type/Page/PieceInfo<>>> endobj 27 0 obj <>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 128.0 128.0]/Type/Page/PieceInfo<>>> endobj 28 0 obj <>/ExtGState<>/ProcSet[/PDF/ImageC/ImageI]/Properties<>/Shading<>/XObject<>>>/TrimBox[0.0 0.0 128.0 128.0]/Type/Page/PieceInfo<>>> endobj 38 0 obj <>/ExtGState<>/ProcSet[/PDF/ImageC/ImageI]/Properties<>/Shading<>/XObject<>>>/TrimBox[0.0 0.0 128.0 128.0]/Type/Page/PieceInfo<>>> endobj 105 0 obj <>stream HVn0}W2WJAHTPPm-?g8VOsΌG;~Յo^h7FxQNbȅRJ֐Ods8db&X==ÃokDu MAYKlM +~3,X4Q㆗-iEI-AW|ȡexHx9jؒm[ N`8{U?JmT,2z`c)w`tt:eאmЛ[=r/ou6 ?wm糿|m>ws;7 $>hC&ݯez|#((R<2W(НC!50~15LRk`c3 Q@T05zno:Q,wνӧ&7R;z^nPbĎؾRN)- IgmΉ9 3Îg -+/1 ++/1 -endstream endobj 107 0 obj <> endobj 9 0 obj <> endobj 11 0 obj <> endobj 12 0 obj <>stream +endstream endobj 106 0 obj <> endobj 9 0 obj <> endobj 11 0 obj <> endobj 12 0 obj <>stream %!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 24.0 -%%AI8_CreatorVersion: 27.8.1 +%%AI8_CreatorVersion: 27.2.0 %%For: (janek) () %%Title: (keepassxc-icon.ai) -%%CreationDate: 8/14/2023 11:38 PM +%%CreationDate: 4/23/2023 11:16 PM %%Canvassize: 16383 %%BoundingBox: -88 -236 188 337 %%HiResBoundingBox: -88 -235.889763779498 188 336.110236220502 %%DocumentProcessColors: Cyan Magenta Yellow Black %AI5_FileFormat 14.0 -%AI12_BuildNumber: 268 +%AI12_BuildNumber: 339 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%RGBProcessColor: 0.382499992847443 0.600000023841858 0.191249996423721 (Branding Primary) @@ -189,9 +189,9 @@ endstream endobj 107 0 obj <> endobj %%+ 0.988235294818878 0.988235294818878 0.988235294818878 (R=252 G=252 B=252) %%+ 0.178956523537636 0.419999986886978 0.149739146232605 (R=46 G=107 B=38) %%+ 0 0 0 ([Registration]) -%AI3_Cropmarks: 60 208.110236220502 188 336.110236220502 +%AI3_Cropmarks: -88 -87.889763779498 40 40.110236220502 %AI3_TemplateBox: 50.5 49.610236220502 50.5 49.610236220502 -%AI3_TileBox: -161.600006103516 -136.789757675982 409.600006103516 681.010230116986 +%AI3_TileBox: -309.600006103516 -432.789757675982 261.600006103516 385.010230116986 %AI3_DocumentPreview: None %AI5_ArtSize: 14400 14400 %AI5_RulerUnits: 6 @@ -201,9 +201,9 @@ endstream endobj 107 0 obj <> endobj %AI5_TargetResolution: 800 %AI5_NumLayers: 8 %AI17_Begin_Content_if_version_gt:24 4 -%AI10_OpenToVie: -423.465748926613 333.510683876831 3.26889526208565 0 8196.74813662337 8201.58266374714 3147 1902 18 0 0 6 181 0 0 0 1 1 0 1 1 0 1 +%AI10_OpenToVie: -443 352.110236220502 3.18 0 8190.61006289308 8191.04402515723 3147 1901 18 0 0 6 181 0 0 0 1 1 0 1 1 0 1 %AI17_Alternate_Content -%AI9_OpenToView: -423.465748926613 333.510683876831 3.26889526208565 3147 1902 18 0 0 6 181 0 0 0 1 1 0 1 1 0 1 +%AI9_OpenToView: -443 352.110236220502 3.18 3147 1901 18 0 0 6 181 0 0 0 1 1 0 1 1 0 1 %AI17_End_Versioned_Content %AI5_OpenViewLayers: 77777777 %AI17_Begin_Content_if_version_gt:24 4 @@ -225,351 +225,388 @@ endstream endobj 107 0 obj <> endobj %%EndComments endstream endobj 13 0 obj <>stream -%AI24_ZStandard_Data(/Xt^ -DP{\t]!`qzd7#.&F9G]sWBM  o5>l/X~Ͽlo-o6.f/oaw3v96mm{=7jq~qw~Şո/<,r _{ٍ{?g-zj-6}ƚY{{{眭7ۯunA.f5/,"(Z~3ly__ ?؁v_X_؆|ߟt. ~~z~u=.zֻ`ym09Ɨ_{awa]z{{szg[76[{ƶ羭g8|7vۯzWk7cv3ck1g/_{{;k~xnߙ[|rߗ_{9{y{{olϸ۹s1wwwf|3g7brۭ߆{O]E,ZQ =sC z`/(~}?=e~> ЃsݵÎ{}{w^0_;=/5yv`7A uO@<׽}a+ ׿?~a:ޅp{^y^艞o}}~g b0 /@:°޿e0rv ,s|/rm{쯷^a׽}Erc_rs _g ^wuV{0~_1xc;B{/,@;[{lW[3}lΜ0Zcsk?us6_w{1g3ޭ~9/bO X_7;Zԡ=Zg|s喋V[mo}7{=5߷q7k-[7}ꏹ٬km{Ykw[ko;o.ۮygv뎹{:ۯο{=g<̻l߼y/ El/Ι!㞻޻w_{ngw/ Awx׻Nw=eO{ mfsyy矻e/WcuZou]{uӟ4C-jwz7}wo;cyoy{ysy旋;vnC jOwkZk:`/wgwm1?A0Yg|Ï=9X3.la{׻'vbv!}^uw.l.wwv(w?twaw텩h072kofwƳ7l{_{[fk/ƽ띭vor6F[=A0EІ7auCЇ?B/0C+^YE/~=A1E~]/̅e[,{ -h?~mnm^k\Ņ g6fDd$KӘjN/,"Wu4K嚎Z(i5&$kL2BY+#ײRt:~$VzB:dt4EI6AeiL2I6YKd!3e%2D(TIʵDԔ@2STiGP p=v&>i'&&>d)zYj?'ÄUJ*Ru M,EfgJ\z:9j2?#pa\2fVBM4%Tד\tva g{:c}^9n*Sͨo۳%[0g*S5~:He~4)P64[bF:w}ޜgxr3{Ǜәl9~ Ј2Mt|rϔ\^3oY7gv3oZ쳞3<_;6bc.g7{}圳|9뾹2֖ C!$Y #{u1fENh=DYHooQSrj-e*鰒t|;IPϿ4DH fZAkڍ6y & @r6c{-w=Vgy|-;/&dȇQt qBӉʼn%td6^֭6pdr1{l3yg_O ${xgˮk 2/lqzvfgݯ۠#m9|o}[f*O6$gjͲ]{ i2:u%A$j\qF=ÐQeqIIҪ`2˖7—lW)*f)6.LUM/ 5MRIFOv ~JUBm0lŘglys[%Ͷ]X9f@ -S,>7 ,Na FhHO E4;<j-T4M M45iZ" &2>+phh +aJ >{ Fh6Ѱ!lMӴDӴ4$M6MLE4MRM.!Ei ۅ9$ h1Ѵ "Z"Q˿"0`6وTsy6ps&#F^BMFCTdH? _No@(R2!2OiB=*%=KGL%Rhd,a-O+ze(DHIc7҄@JJ%HzrTr5.c U(:nL$2eimlx(vLhp>PwJo$ӎd&gn)u-$meKZ0K_gS$˵iܽD.&YڲIk|SO쳼ͬMY{-Gݖd'-{_&WN"m-ϼ[>,&Oj˿d!-9ZRbu5&d-bmt-˯I_'̹ Ioª*\7w3~JP]KS -BWPf"iLJe*tHX~%L3ZU,SVJ@YJHu,1+swS4I㚢,$#6[m6w{{{キє1cc͗߻/^quΘk7cqX_us1Xw9owVޜ5>cD` qJq %%Q+Bn1ˋӄpࣾjj a, pEE(B+L*2 *w(ӥP Sy8PHa&NMxLa!"AX.A<* aaF86?qBuۅi7!'RCA>k}`Ul :Ē.>8]. &.y0\.6&!98X.9q1@tFN@!EHBnJ!p& 9GeI9p*'Ò+vȂ̎%BctLP2Ţz8iU 3F?C-1TJQ +q{$ºcpޓATHI%<,PNbL(#t(UI QBHPhnnۛ2夣/AbbRq -jh&zq0((ɇ]&%ҋLopVIR+*$ ɀD@ %0`$A&".AFFU"⧈'պ$eD S@ F;^ YtDBZ"XZ.MCe^lC!pM :-Րl d`t+qneSXlۅӬ,Hu<'f. !`Vv#`F rO@cu2/ж@F -4W>R.,3+|g|8X(Ep8$Hdlva+cjq؃‐HIqx<9c+Q4i0+mc!*mє14I9HZe?`hfÅ!$*R -# $,=Vv!mB9XFۨu-KG{8ZkhQH!6zP|84=4A@cHd1ж [K%Bh-~-{n.%@!ZYXY#zj%M,$N+,Z"TD>B>l\&ZB` -ѰۅI4yx@B {pbR`0x^LC -0(LW) -07 J}_p|<̃x 25)L"4HvHu, Ka cab6=<]GaYOΌDHÝT&4$k$<I8 &I "HG8hDNȩ9YH3 >%BC8ST*i3EB7p?4AC  %3H+!3H> `lo4v5hA^?/[ j||1ssʑpQ}, -J"oqX-BɁj9 jAa5Jxxs%>J|dP^ kdV -;iL!2Ƥ _1I$ƤJDpUccQEq+"jQҐËb n*~@k4"pE13a/T ?2"D: a ģA4#NS pAo)舖EĤ8LRHxő8&*,&3`/J(>Lf0ccMbE GC9[@p0P#.wU"  -`?Qf\a,  *P(<4< Hv m"*tᾓJ.4$<$<,RI"n"$(۹%Ӷ-H0'{aDc#"""Hxa{{rܓFEDere0B+EN%҄LEx ] V"@@8@*ԋJEC&A9Aɜ e4&d75`:AdsiK3:AǮ +J:d( Z J* I$@8@Jval,'c"d((R- -J<  -J8G(9@"P8+(9p`Hjfݨ=X}4ۅe7Vf 5M$RfkvaA>r!:*&Z @zV ;CGA;R{x5ttwB2(/OI!s M[9B 2]%G4h D{0*"T"v :2q?LRYJGJI0A8d. ҽJD ^.#+M>m;T7A$ae:p|+Ť ( 4siApZ$ QZ@p^lH'Ct'.ZJp4t.$^@ y0ƿqw,BE&rʰb`BfP4 Ba(/a,M "d7]kV+44)$QhV(V  }l` &@2#*= %hrg2DVAZՊJTFnZAVhs 5-b H_,ł7# "] %\FeaXHva+Aq6~*"CI & ^hH *˭hVǘÁOI&=, iiX%Btۅ -!T$$:.aT%cSxpd\/d%,i# H_lǛiH%HSUr15;C<ƫtd"XhG6)Lܫqr4 b>y1:[d`:`@-\b cM>m棈7`( 9,+͢FVa0h E{J!wÕ(ڧPb" -Md*j1Q @?7-h h \i+NӇJbAqc -6 F'>5P E -]XEH4+iT6D6T",nPʠYH u6h`"D (B3m߻DQ\FKŇ!2: y_2=@%0va8tI)S(RB&T4WLp(]TN - -2X` -,XJ!w0 XJx*Ӣh cTE @hE3H8AILZe5Ph. { ;QMH vQ&:H -B{7 }^ b w &P.B -P:P.l@>lY"O4sӉLhfD$`  9mVH2VBB,.@, $1(c 1CՐ3j6WFAʩuZdL W^R&I%(SSI` |w(2QH&A ٠c0mw:s?Pa'VԸ]ԅt"e@}ifS1D~z^{ְ9uc*)m*Ye ߩ`@]qa@u(]F;qGغ{yiHZS҄c5/ cGDpPqBnyf&iX 1cݨ-3Ȁl6Du>c ]^p>3QC &<TVS<ùcPgpw5FJ?ɴFeDx N8>FCn;s aKN֔֐9N!L"Q-1찮9$yqbR[&# -diHkN6Mx H,SDDܱITI= smr?ޖN8(R\}A6Fk̯Oa[ī6 -+{|Ka"p TC[  LH4ETTN'C0>q0:zڇqKuPHن/(~2$ʒMLg1dׅ$t&i'I_c":Y>*wBAԊ 2A{Sm/m *HiۏHhzE8w:&`qm{3inAɚ!^715opQղZWZUo/̙/L# +/3o;3Ed)\<~1 ?ނ -/ -z?w -1Ԕ$s?u.lI:8Q5t^b ֿ0B9^+ ;ǜP!w"c,߅O8T HxPНTW7.˜!stw-e+W p!B)VWM3T|^X6:ղ G Uz}E8i0ġxGY۹(Bμ>Vq56?yQytjS6ycďnC(ss+xsKمhx8&o,s r+z )nMo<ٞ=Vjlyyekc|G}3In)P8P#BF.AI8jڒ-"ފ5vOͫD&SoA=M2HLF25<^UYfq3scfL3g&IMKiK7@rY" -ai|.qgwkŭ0M#&}wA5g'}O2$h՗yiQ2u חDTEE& !]fl%,}|gzor"@5H;Y"uVMΰJ+ON j\y}~2'`(?5>Skn=W%8,#,)jn'OAr eZe`(5 aj:*j|%qg&O]fD3όM} 6>i:epTCZѲ> -ʁfCGN -Lp@P)__~"iSa)]Fev0XBz;{gx1,.2}B80⮙P3?96]&OY%?TjaaaSq|Jـ@{F$ED# {CP0V2)aDU$`)ЖSRup8 -8=_ 2N 8R_[Xh~ں3&iQO-} BLTspWm~Cr -֋U|\)Y_eA;]-VwqEHp}븊pڹ%~[~ hg(e X6mAʶ/~|N/a\QO4shpC(ǫvD&+3Z܋*EH\+P'C&IrŶ -4ߌP Lk~[޷XY$ώg1Qީ?"I(}ba:ױ}ߞ&ꢉɗgow0·Rrܣ!yS !#$ $ i:S -e&PZ|nPom-g] 4BT2iqCb,q.62LcM@؃,wݯ\iq5rO2 .,,ioxsr"cTˮ@o`A0lϸpƳ32Tj@۫i W}3}'S?'cⓤ]ˠqFꙓd/޺)#|rP5z@䡪'A!eA|a"We> ٖsa) ߊ|CJ5*) -,o>&vT~93C #_ߖ` 01F4p6QhD'm2BYj8Aځ.tɦc!½Hȡg!\G -gOn^n -:B6/ׂW_DtsQ5S9UUՙ H >^Rjx1, X%E88V6XqV/>Ɩ~WԞ6Rף7}ȉ3()yIRB3dGu5+ -G[59LFۀj‘f\[(j0bR 'E2@Cn{Օ~465fdW9cA 672y;'FjBp)lE@spI!ۑTn`ҵL+ Ui/Cq3kJJ8|2R8h?02Wk5ٟW8')"G gO;PƓoc9:=ˆ6| z0Sjg ÿQlwd4xX_HrvQrlĴS+h eBv -nSՐ #TyjV>9Y@FLBT??EúKfMPmNe4T`zetF]`xǭ <-;3sOy^b);h[$ڔS$Ol<(:JB/BZ{M jk l"'N,dព^S'Efu&qny(NCku8 j~kBf-w`W p<VdƕLr-HF:IFG{٘|bX|yK @h"~ ƠJc l" -S0;9376]Yĺ @j&b;sπTQ^ψ)@@`ts>f -mJ#KU;I6  Ш&Xt5p"̶OՄVQiI17 7 ->Rf)J!!у1tg=~(e6?Cҗ>GM=zÒ"S(̏?kr*:h+~K̟=X9bF9>Ca,\k80KB>( G^7+T 5[>o;PL M"{|+x\uRn'Pq}̆,yP&[r -b^t9'#c.f6p#8) -NSW jxYҺ =JS fI@QJ[〲 M -ąe0fQs*h2??o`x5HJ سDxU{Mv㦏R?mӘj|&z)1:V (d)GYvs hozʺ7E 3H.fp3%fUsl~w MzD-EJ쏑?4  c/'"ЁO1D(̣mb$x@Kvv -AW1!x [bUBY9eHWѭe Jmd^N(f Q2 O-22sWp]4:V .M @yЈBN -eQ?Rpj-udJ]`րtA-N;%iqTJT=ٖ;>Km4µfQ:àZz"q׎'`؆Q!2&lh 8C ,ٿZ?Fҟc4|<'c@]RwYqE!U{} '//*wy2%$aVdr-)PT*bY4Do+Z(~q`B=%}3S7[)H1x(2CްoݘԶՁB;ÐNsǝŧ x؂g=o <󣴧ȖaH%Ӟj7ӵ[:*HGt6KsW Ԅ dhw|KSJ|rK!< 'o%H娷 o7;x+a"it+Y@ihi<Ѣ@$sU:Q#|h!F.i\Sز TI?dlqRT_U4[YO}_T:'൧#K&53v`#0sKګJ0aEZ -T_e`]{5*:o7K(".mv+nIg!B{v2~m=lIL`0:nd2/fc@ Ol/dxiPf=tõlbYG+8l$; f|jY$fmު:"r#$mWrg˓L͠b✲O .Zλ!n n,~YB)J8lo4N>s+SZ1BKo `˚/"asCm<7k"2{HןJ5S.+A@-jP܃|{T<7HfxZ?H@ t&.RN'bG8c-8ѓ'v-Y :B`1RQGG%nvco@I-6-i/K[D|Ȧ"?s=}EwA[~SSKh$Ӥu-pMF/-J0~G$-#~lzs8OfpF{W}xф;I2#keW`K+*/zJtwmRKP5(c9 %,Bmݵ!ɝcPϯ٫]@W eo_J#D1h$qfmUzUe^&iVzA{ MܢkD _yF?$ɫd9P"Ə6:$vzpw LuM-N1yFR`e6a -'ήꜞT׵~q0q#umTun| xMQe6K/&:u~@P_Om*2-7ҋM*TX2UE;%h ֌a::˴#7MHN _7?i_hzaRiNp5m>M:S<포F+&0~nE;e9x TD"mʫ';[/ -W_\ƃ zZ~)>9T*f8}z\* ^rA:щ(DflK]@v^!2(Qdp, 8>A-XQ}پW~${ԫzťXh|pxIDwE]Gj^Ke娰&e$vq G4CREuCw˞{'v+wR{ܴ1}ޯ؟ r_jqM˰*i $^ EMOVaA]ox}q?˨y5\7J?._4K`ASB)(PFS'%HkdE1鲃AVˡx1|GA #nw4Hϥ -P$tq.řƿSzEtyկW\]@U9->fpίy+h*uIN4: -&2nY0%X`\Kp?Q*baD:@0-Dt.w-.C3Czh -@܌ﻫ/Ŗ~!VޯtmD wŎ6_n4-NdVvhwDjcaY@ zM1;`Jxsu#2*q%FjMmiLQp!z``և~#F#iѷu%.&ϸH?Lۤ>)2H#Hf[/F25+ދ$تw_dw9%GRh9j]U ]7 7dJ#;b/f"%kA@NjQ`'r!P7EXa"tg+P?At/ wւnw 贉ėSF_BiĞ*z)7s>nL^' jОGp> Ѿ!!oD.'#i-u;>Wqj]G1uE8='&'yѩ؟+gz}c}Ϗޛ_(ꠑ%|{:!swa~_p \)g5'=> -(g yNb0 RߝLy7rfb~PDk^ƌL-=^e*qYrǶ9ֽ][`- a.<\eĢHn5w1[6_8#;ʏ72c =pe@}js„FۣBQz?LݷŒs4J?!h˩3 Vf8n'_3nv2eQB)RR6ccS1yeiZyj4)F~-@e,eG1]tM65Ԟj -'iM0M2WCr QhRI7_B:ܿ9%^ .@ @{rj]RUcTz\gR 6ؘrSeɳriO_q;e^2 ˑ -bvK\r8Vx0A1ŏMwe`jR˄g&E# zM)V%G4 e*:P3ģpr(b MU3aXif?S:.Tٞ^%ڔ -UKM3+!Ĩh8qNI_e6WѨx%7pl-P|eRFÙU]#ѯQdACA$ʱ _ݍ+l_&ETVLa>7hkB -J>K77ěqQ$WqD$ åT UABb*ȳbX -6J >_aJΧCuvxC>V7l)xEWH}gLT4jR_ױ?ujrI~ohLZmNbIk .a -D^#bJLXq7?$kHcF`t!iI+DzIi#?sWE{.7a$4\VvIeT@>@J 31c2Vߒ'0?G\s -+7~Zّ `JoM|'Eqmf(E.J1GA_=DAliJpmJ?#G@ͽh=7-d iT2T&6\_ey`Gw-Vݥ1ņ:,*gݵZeu8%YA+Rvh$<ʱ2h|ESj +M YW֨J"NW+v -*/P30GP0|?Oڸݼ$oyo`}CQn0vr>N뎛*OTgj͵)?-%KuM+$8/kXEfVS 8pbgɜhՄۚ}8X4W*l5 Z"X`A1?zF? F+P@#<.U$"u=sSO,3~D0 -!~&@ڽ&]d$۠E%ȋt]ܔJ3dS=`G6K\RJٯ{]$9jʍt[ a_DnK>,~ڲ: \ijiGL&\H,GTm Vo m## 1dCFi,!vJb.XY7{vS3Rws* :)}}q"-({bm]q؛\H\ E\4ҕmWPS9`è 4vȠ)i#egd9ᖏ.\alؚk-&1?-YIq!,+Ug^g!~1ȿiTnA+a -zF<!ͬآ<&6"̑{@A(nѓ*v`GXw"F.-;Y(!!v{pL̑((8c>ܧ %T@zDl4=JX9?:ͳ-ع2"B"8FY? ځ!"DQ Ye8E5g.:^s)9߬Ȃ DfipJfZqaK,X弗h()^c佑ӊMyrM' aA`zGXMX|"D8LUUL%±a:URbCZH@BQGt#0fe4¹ l% -PT^KHKA\ŭI85:n1̷ڤ/epq_{+-LҒmts*%ihs cmƭ':at3f('a{V|f1#% ss6ڳAi)3w -iЯJ43%N|zh-qan ;!Z;:I*PG%9d*r -4t|wf3(r} lu4Q3Px(سWmBǍMpxM (9~o -b׏`Kԭ)D./:d ܎=Ff~u8\l E"U/ހ(X!2Vz%v6nF>XO9dW'J;БY{B ae2L/xG g o}Q{`so/ Vr(٪Q"0#t*$Y7J 6(O%PF T8D=^Yx{X6 c`ڮ# @>>O$(1/y:9]`@Hz͠d|,4 [mSWVM!KSˌ^iڤ= FTK)Oc.뀊}SyZd,|Kz0hI]nP8Hb`1}q^FRnkGBRh>{~gWǹN6SV@IMR vH Msl[T_NЕ4!z*}->+ w]HGh,B` cJ&V+D|R;C}ƺ4u^Rv^BhPT-ҼwBY*Gq*.=?ZgE f//j^7*o|Y>6pa&y&Cv"m]d<2 9%:HeY+e%'C R5`pG&9`p>.հ&a ̅qC[z a#˴Z\=}n}/'7J2nlZᦩwelыT -*qU:0%9H H@qa]W5wJI۶mKD@J}*B4К% -߸:J;S -u͎E]bɎ"]A#;0;Bv`~]~nr|ԕ6ZK>t>C2R^L8^ԿJG6Sa m6 ތ;_tk[(xI FzB.l4,MRUX=G [ NX+#`6iPN'|yl::঵?z?v``H;v# o%'̥ń0!9 &Jh=]P 8j"pJЇn-4 ;È?U)LؚvQ^/ +C(ZoNؿ\:=Aq3dXvt(׼&r-*WXQ\]d@2`D6mjs($΢4yXE ևh#8Os~ɸOo%$@"Ԝ^O蝈{Kb/,ɼױO|R,гq.;RP8 Pj='m%;<,߭v;k}Bǖ0t9Zxm/ dCAQ=/VT } X|vʍE;kb=p@q=pӒ ֺbR)niE}N dH l,KvTlf&(DȎ"N䘐 mJ XXNne;88-u>n4}_ CHwn9(:lnݍxƚ&%x,fm&Ob{'s2rg]mzR94va0Cuɫ0cÚL#*XX*6 -m!Ƴi퇔dEP="F86oZFyfF L L*š\JrF3 `X)P<7V3Dڣ| -Ƙ@hT& [=[y߶oI rTV禝̆ԟ/:S '1`i_ؠDZVQUCKݦ s#4\UbL`FQsQsUNȹ JL`b*fI"oUYU_G8*"2/"ZF4$GyCSډ(_~]D;"XJ˛դ?B;rJ7y ݼJ) --xG";&޹{I1%h%Ғ0"gTD?};gR`+ψ 3'؁4^ZEdJ< K%Q(B{% -H k*;zNnS%;E->GVxuj΃G%{'*,WlNNh&'d֣`vcu4yH?t({QU+RHɤŢ;d* 䪂T$94Г@ɺCDѣo:'fS KQx_?BǗ -3$.` rѨZHܔ&Hxv3spǾ<4C)E7HV$xUp)t;,fXBRMcpf龁e,Įq3$1qe;oNcdyh](fNfV/AzFJ 6N0^H0* k@,׋A/kK#Tj`H/;dj x/I"Nui?ch-HoNP!%3̈6eW/B)OǚZ[ۚK{Dj)cdң^UD^I58CK]LmEsavEe] -zOSD WȎgQ@#X...,{p>T !`$KڟxOk+d;Xy7?gЁRAGMԵ,g؇2)+g5M/ qJ.T'/;y" *\!Q*Mծlh]_HX~v\odbFeI@4v5 yH Ѱƕ c,j  EQFmA8%UJ˞c"/ -]!Էƒ -eJSzoDً8oćMFITzoX*qؐѢqbɮ'̎%hDQD9Ype]?SY,bX;n!_WE0dwWaV94lШaL6c^t9K@юyqEst"boLPr?5_S_C o# 򡅵uV{>6,Hqڗ1C:PJ*m܌%;fe #ZZ\]Tr -y#IL~kiJS" AV,;L.;<]ŒXcCPCw /r #v/ncDҴDÐqBf8JT "ajp%%ѧȇ576[>0ԏ,Mkw>Vc;=%)X1Br|>Zط~7D"4CgWp*5XږeVa N_ASW㥎Ce:_U/EJc"U䩁TY$IdM5Y$Y88z7[`;bM.IM!oZ0I4ݡzj)TSN]igFUR@5 -m tq]-v9ǺNS(XEeK#aRMw8+}%}~pdU=NO_FUL5MyԔy?'8b KCBB=y@6ɚ'*˒h?1KnCߔiM4RρdӦ!D ,=*QY$%DW5 Qt?LYC*FfCtP  -(P @A -(P @A -(P @AۣqDOD+i@ WB("M$ ޠ=S̀^EqNcN-̝ zYmRВ(~+S%UYJ-Z @]הLA GNIw z5Ehe][%GmD"1lvҍ~ 76NFkHAK)⏼nI TzbGq&I@j@GU(X<H]̼:?YT1ܕGeIpBA[5Tb:R=R\jUz&VDUɿȪ~NFFn]X~Sw:G $O~Tem)r96>KNr]od/}۸۸D8/vEcQS>_M YdEPYݡskKxPPS!{WA0-pu,167$7 -/)n;h/zS|ޜf?3"O鯬,2-*K^8-9KГVYo:/Pb}A 9{ 4Vl(q]F/',"6hXZx VZGWYm\rQhXMh#6u,"_φ$[ҐʒPRY2xؐʒ"~#_aHL!:PpGI>R?E9*K82dpʒshfPwQYWPUaS -Mu0$;2-~bGNw\m?G4xʒG-*KzydCKʒ'2+8'_d6u!!{@ݼމsCo'%XXVfZI㢴%ヿ@Vsˇ_z1hF|^OR=Ƴ@4F[_KKY!fҏg#op3O~a&A%ht"qLv\.6+R䇠h',mqwA]Ȃ.+]]]6:/P\Ž!6.jRFҿ}2¿:bd -_4kKI⌺)h;ᴱ=eQ :+#j$ !wFFZ;h:ދ Bޭ}oj2PW@~ Y~U2 y5; ]\/0"\Jg\jo[ ԇYa-5Q@xI>,J˹ n>`lw3:c =BkJM-C7Bn6eluG c-gQ;]uqz`ܧS;v*]XHd<^~18ptR+z^;o$#p3owLfs>7!*tGwSes6 ^JApt1H!=r4= $Q|^߰E yT=on7lo0 7qP+ {m, 7ox7ܠMj@O\/\i奶{v˥ ȃ;E΋'#j(=}s u]~0KI^WE2Gj*9`صY bXQC=V]1m`Sr ?QL]m9RQBc |*I8 !(>Ddg5ԓň"@A8"zB5y8GԳȾ1`7Uh="R4ƛLDF5 HBnġhE|cK f+YQ"60m\C40Qc:IF|<&K]̿ڔvJp;p fVe p$ f4z7KQF%) 6Dw[_C -hY:7o0&+頶șP1sPCY"Ǽ_n449c{bJq/2#n`lKjK輚MWsɫQ~Cּnc 7.=|5guXz5E_vGKUhl"L{^fI9Ԙ׼ Pcnd0/oj1?z@l>nGgimSY5$+( I nTo>}tQW^a T墁KrQtm;SmKB`uVɽ[w_ZF|Xjş8,- -P=AxH:-3WW+C8j&W$wf,-RSѬc:2ҳ-w -U3]҉دeB`)B1;#|b٥_ip~?<|ui3fڮ_>i{3h0bECYz,js,Ul-dr{M~x*^=5VJ㐤Ul8Wbl/hAfou jxҶ׷πqČ֛,l!7Cw ^ݶB; f -mW H$`UK&bD>.8rnCT}?3QJ'n%M;RCDIZ)(Jx3:C;3Ⱦ&6l&0b~JfDz */D3iY1dXCk=87/YJy_)sX wR2bWԖx?mm\(H[> JJ8JP챎Ѷ\+;" -K8"l=$M= -s7Vב& }>b"m}Qúk:R$o[Xe7z԰JK/( A rk;+AњSxXĘUlz5̎eN&QɾjFi;竧$ 3s_)G$W}J0ȀG4hX? $$CȒoG€̯m 6Na9^]oc?D$xͭ5ІO΅< 610ݧ"\8OW1Fyz9Ԕ@;vtBdіI򋃳@ucW- fG$z)$+qV( b6PsLjF#Ϟ_q+yʼ@7613 }H48$Lr{ *M*ݣ;U~Ψs7aʪ*'g?b(ml+{{͑ -w+@ʈC8)+'e~v(|G\>25g֑ːhuQɴLΜv*?ZX{MG T+AbWXV4f5ה%4P& U:kd9zN{,o$~k!)PٗŶRȤYV!yH氨-gDgAd ~Bbل+xP.]'$;Ss'+~0>%(䞁N$(jƁ%/ #!H -$1;ͽP)^ =ai.92Mgp]4:E&myX- 7RtH%„&ZWxz6PNO!eq8olVV5q/LBb"k-d{[AEʉ ċ5/vwe*wŕv -'(HE0ͨFv⻶[}K4f%ة ZPjT-"v *岰WK2Sa9nu3ӻ $4_FgQ-W:߁8׿9 X` |¼G(n i#ܜX6äH+D?Z,׍NI5AS2*eh]ZvIj! R5Z@BJ+r0"QBr%ʾ|H#ZzS[B? /%9Ti@6q`>ڀf4XCFBG؛S7ӵh7U~.lEuFkG fn ,{b3F ZAdDΧS\94]bP#nCsP6/q ANW1h1(+7]%V -NJrI z-sC%d0Jy&L0{d-7e@[h-9THbH5ɯoUͭOu#D|Z= N-ѴV=W|&d;4mN ' قj2_?׃d Fp.!!3$aIjJlه(cF3`(PRTy@ -q0 :821%)xyh޵cWg9 4F_!=UJlq#Ǔx -}x{ߖu@AnaxNz noRt#amlhS."W2(ͭ=L su]7xeKo'O]JKK[ځfYُȯ^`*9:MhY234IWTw& 4QA<5`A(Amd83!B,9^wR~u:UP9W I˹v߷E^yxA4\Y@`6@RSbE@}]4Ɵ^9$7T,n$ŲT2b('V+D'YFdJybD*4^$ǒܔT68!|NpO) n{8w&P x*b]L%w *jJv|r֤'&tnV~Yu']K[Lu5ZŧV!+Wŗgu :OUm15:'=a#ʁN<t%OrkCjY;Q6U#:ɻv(7^LW]җhb0lwKVQ!٣pqS@(B_9A=77) - UzbGU9LYR7t\V 3͗uDL 6Mc#iԗSq nZ<@yBz*]GN"+$s3q!׊xkA4[kb5_靏O4\*GNniŽ ЂՑuŠIrQShE2xܩYm z*R;Ȓv#g#dYOͰx+46ezsM0*DHB  KXRZ -cvcJ+Q>` /)0P^:ON$`zj?eɮqwbZ7 H(#,]PxL$bٟM;uS~8! M.'' ٩WsZy`ulؠ?Z\Lt ջbvz(6'Gr N؅-HaH£S`co(ۓ!c75̘3H(j_֬5@",tc@GCe?hB%y|+p {y6ӌܰl7ј-+gNA~~mW QD&E31-Vv@4) fLAJD^3 !d41AʺS Zbْ}`hRE,E‹I]n~kʕӚϱ?52UvKO7Bg%$ݡCkJnxVܤz'&j Ǭ.5 XBr IIkD?f"8VIT}mMQbηf6KܽK{N['Ğ#n:9֪ aD(gPhJ O Jݽ7+ QGdK%LJ՟;؏bM"*q5i yBH5# c#T`ad|<02N!%!vTh8}=w\l -@ݡ\S[aj٠xz!9:LEwM1B0|gϋ]vF2 ->jܮfI#C\w䞂q{x-fKhQV|6˱` -XOH =Y3Ef.2[eG&2BVG9jlqcЊ:LaNX.p/ 2J%Ӭ1ƪX{tuhWhUPJT8%RUNQO T$Fi疢R)")Hb{K @A!8!8!@ AueB|Z] $X8!v5rA^^)e}͑^aEd_4!eaJpp bi(vlH"g ヂ? ?vP \hoՇE$##PrJVqIiiCubCP1j]F)iaXleUb(XQx%E'D3UFUKOl+&"\i0׍P^>|@(*Lb%̐t2JÐ ;BZ C~O, ͤYH.*0 ;%-piY -<*m8.Pn03333333333333S,GI,c6#&ahN$OWZ)zrU%<]}c}߷,7Kz\y(뺲,ۺ۶mۚfIa4 m;D4ʮ:Hϗ}`牢hPi)hYiB(,M4O4Mǰa B=?@ CQD 8di$I(ahYE=mq]}W(dv] <C1<˲TUiu]yyBBA 6ceYV0hˊ뺰Yv=?*|h@**`@"?)  I|(` χ"i -@?ISAC?fS5-ǰۮjBmdg4ID3$0TW}cy%g*<{(c[۲±L6b`&G~ݒ[`6Dں/h8HDubXt]#<_D:hہ+3M3p7EoG"E͒|B)7Y_!:EH2yDf9":.0l.y$w8Dp,3]׶BqߏCpۮizUI 3M׶}?y? *zm^,v]wR}a뺶mV, ,,zzw؞?3Mtm0n۲J DBi(ڶ0 q,,˲,q캪H  O߹`ոqHDw0˪25K -c0Gca_CLϹTMe^4H- {~e<~5(hz1K$@q|G$Nz$"cal\X|M+dW&A;h !C~,Hts܎Bj L -FCv0v=ǰ'I3UeV,P&uQ?첪L3hAgx|UMODgV, Cωtzb,Mym]4 EM1zօ㙖h6}w]L&۲j5KC!i^'ߍ5 o \ɦE؞/8v D8U(Hc{ D2_7CQC݆Ǯ^$Y+7'V i4f.KbVW6f/(?(XJo˚@Q4K(A7K&}ԁXu}#.i*sh8$&~[i{87_"u*0蕞X$izUg7o&>Az&3U}ii4 0 -&kՅeڎH(zł #픉,G&m{dB{ޠ$wi&I1@hXD6@<( bAB" B! L ?ءC e`KH+0Bqf* -b@ZbH#DFzb>p zR 0\tXBh8]!hDE *oŠLw8Z!bNϷ' -#<)HX.64_bI|fy#`m;P%|~*!QE !Hde*H:X 7#Sѩ+&¢Y ؽ!« A2E$VfBJ]VRY8ZwΠ' ٘E0!^}9p.}g )|{am1XF-~!Yb1YX&V$tx.$%\h ҇60 ONSM AđA/`4VQMSߎ}EYh ]9J [:C SHU@ڴM0qF'f@ O>00 -V!xu-~l' G7ٻ xh@Cmp`{+8 !8aRX]=1L=bS(mE!k 0rExQ"%8cA@ x$D#P0A#R{P؂jD[BHħ*g פVad\ -f.bD \@Y+Kfz -q}2C/V)?VP:Cy(i) ;w͘ \c dI\sđ" B*֏eltDP/T(xW6Xw 8,EP GGISe@ =7YDAF1,9)pT<0M` z8~"0 Zq!!5$8"To™B` F F - -D~:Ā)AAqQ`P`\LRpY`VB7D0094 d<@KxxrB!ςLG4q ?7& B@CˁĻ@Q \v1BsA@ł"HJAa@̄6, ;4]+Tr@e5`aO:!2ȫF@͋N- F8#B\&P*dHL@P!D{ @.1gTT U9bU>V3qTX} &UNJg -"&1p< j@Od< .̂ B6zphgT#PkA>#0|BQ/F TG` K@ȅp{m A&\m؆H.0DPT07W|GXJ&tM!'p,8Y `w1R/`H`?@ہx-F^'>H 3лaB j?3/ ll`I p6I Nչ0=|y!!`VG -J w^@ *8ho&oqE@2M@!p%-8)ߤ㽎 p>7fBȀ 7 H" Nh -PWsT`1Hk ~ 3 @JZ@yf B@@hCJfpxO@m1+L`Z6*h0MAoNדZQva&e? ]E@w3 +pxF/Y3л8aw~@x%[ %X_ &3iT@4w4% x#v@ -WHAl,do :w%K?]  Ƙ }HWrQ$[e@~`?2-6P.Anֿn=m} -{`4$" t T'.vF8( f|_"藠[fHX=~qF@aNAOf0 }:`R1Q ^JI`v -( >9 `&5g y^-!p3 &=Q~@Qs673p8{R=ǾOJ mB -230P`0 [^0-"9 01@`3YT|/t@0x.QB\'޿~bP9!V4L'{-w?f@Ia[xH{]G9x ptkᡲ -Xh8`abiJ?O@n%r#(/М {3q3\ -cW} {uP !175(yލj1nk($__bKL}(k ?4&0Ctۃ·m=*sa(yޚԐR;,w(1#_~ZAG\ -{ qM{n{`AP= sx%27A$#xA΄I$yM,l#] -.'`QPb{Ѽ9 ݹ!9ܞbSP#9>8ЭO s !bSݝ9?8Zc򩡝\rf:[y3p -1y" sy9A/HG"( ?G*'y'C [>JƂt"\v}1V4 wca?rDAh=8'9 ( 1B!Bm8ESP1ąAr"!m@Q ' APGG@P=; -Y4&*qP#OFfe eO蒐]aAOAûV0ՊÃiH'={`$_XD@.!\TLȈ%ӳ0j Ͽg :T@!3-ts :Q?ӢǿJu2 -~gTf?94S)6x7yE™O4IP&~0?5ޞ߸w"վ.y~ӗӻMF?FN8Kq$׶("\PuzvzA0T">7mɢi^ԔO33u.0nO^a}FU&(5Q4 %,@ )C|qv>1P?Ca*{grPX(V~ց]9)ih(`AhpPyAC&dB@.1HT0l鴹tv.*Ҽ}_ij1,Ҏ}͙Jc-9 -iG|y^Hx3лwLȅF2Ӻ"}1z~΄h&$8 `m5JWzt3dHa7ɯ0HDj - 5.1!N]wn3N>43TlĸQJ$ !W!W1JX  ÔQ1b`WD冊 *4PB0*00Uk@P Z`!!KÃRaqK ,,0`qA0` -!@`6t<.( !"CG"F4BHi6X*d! BD ,812b ,(ЁD##A - -%F0(Plt (a>hx  |\*D4J@GHXp QB$'d.X,%{P, t`AA %,쀙PP -hX D|X,H .ZXpxbr:6|``b -PZ0!bb丠C&(.pdRPJHDt(AR9a# -)1"E(),6%%-|X:RD"E墜d(1  8wz>Zպ&&Yl],"=c)~IMdB(_= ;"u"]pug_e⦥Zm7f{̴c25CaB=&PLzxOE7hz4[<,.eE"m$o[WO~ZvoL?ٝbSOZCd+\VK}?35m ][JynA.+_7jUa9<ӞM݃h-W_t k]FIIokvozr&rB&I+_F|)L.%RRB+%YGE4{h rQrY5䲒͛ϡA.3VT:JjW':lWwTxE[=}흮%ḤΟ-5:/{"G=ݕD,D,ړrY=s tW伺Ϭh,S\;M4!]mSFybQ "Cƍ5J2.hڲZ%n6WbOu Y>Fvt+ãi&hfjimW4}rO4lԐ -DqCk&$BLIsyʽQLϵO^["#U42=uLcdXzeD<ƥ[Nsk:WJHj˫6ZCˊ͏^W'cF1vwvάD롣R)ޝ~+Myp 1wG'(b2y0euucǀ\@hiX -BLj(e-w|%RݔLvCZ]((&#"ṹ9UۮCKz'FiNz76pϔ~c{.}fwk] NIGUvRӳ))4H)UmǴxp뵷'u)|t\GVUqQ~L/J,Mh}R!ZA0H)e 0 - Eap -@L6lV>2$H  1B""9(Ԫ$΁Im~3k_` _Gr)c"/V:c>v`$;t76Bl.G lAY˰}iʮ_Y "īA~]#Wb=AU%(d%㍩-3Cq,\4'cWz9E;"/^iˑ=<.B6%Po}l.*ľ6Q8eݩWG%W91{0S{}RE=S(. -uv}]a=e:w[;p"uR_1 D%sb39.w`O*%Q݈uzT9>>0q/J=ѽ%hHf6e|wAIhexd!wA\Oww=(CK8x)N;z5c/I;7 HXY=3* ݔm` -y}QHDZL*{Y k.\wK `%`.9/_?!`[y -EhĄV=fjfL40G]!Eqѽa-Ժ'Crգ1ub/$Y2n9t>IETO,^q=O_W܀ +NuYtPk =0LJX_Oh8? Xrs+uU8uUFȐ&rOѤrY05;':@L)tU@}Nwr 8j|$X'aITzīXfɽ]ŋCнF LdԙÚ怭{<GJxtVB2؄T;m Y&*u^!0CGxV&(ÚKL%EKZ9M+Ɩo!=HTb+Û(Iv;w7wE)V$ ATKx1NDbO~EC_LS }J)富%O-}#%K .q N'-9@d?Nˋbq&!|Ƀ)hm0Q?|)76%b) @ -%&]?ϱƎU -!UVNA8OҐس4,;;YޯϏִS؎HRdTGm WfK.aD{aү $V1m&7fҗKiZ>u(Wko, ȯ'a] Bfd _``#P58t -pX:N>D *nyDN7k<"Äp$\M[H' >tU#: 4Հ>Bh тt0L"f^$ -+7* 8hV3i!8 8/36wn^)pF; 4tSVa#p5'*dCIӿ}2pX7'k_se8sIJx"!e=˵͈y%c~]Ԉ񕷤oƷ'I~¬8rl(4iC-#opdT[Ǟh4vgc(࠽z$AЫ!Nu2H52A?83/e!`ۅWഄgG¾aforjB:b &<8@DԢ+$mzOdxp>kG !vK>R -}c<,,%FWYqCX8Y&ja@Fdt!3- vXA嵒 Y?5z8XiLnzy_{yW\Wna7:^༹6 ^^]5ʵm+BWws0H]\G7 XҭG"nq3;qrkֶ0[^Y[}ֶAX`gXY~Ԯ9E^ -]SYyȚuqVVM5',+K#YY  )0R ڊfk "-)`Q0֫+ue"}ꪋU,+ -V>VtN$e)ۀOR]F+0}jʪʽUu`eBU5BúĶ[Uj,;TT`8`)NORQ3MO :>yGUPQIF5bTty95ݞ- FM03t{ ׄpU0p(%LI)}#%-H:JFtP -+L@# èhgg(F+`Fէ*m(Z4E(76YTIE y eFLGU=AOP;-m:hh9陶IIlzuzJP~ z(b#' p(5747lKNy&g{+ǸST3i223tXpjJfbWc#<:7ibnij49MԟiPu%3XP9&-/JOY%N%HLqҽČic^$üD/.̴MR61)+O/- BF-<,+-c.<@ʲ2 -ȑEJ^MN %͵)KeUl2 HJI JJ e%4ȑ{>IQ7q|\6>&4),'%8l'yQrDJ$% JF%'UlLR1LGX=>֛$숄l$!c/n!?Bb !oGG:!%Q -93 -yccc'&#EWt(c| rt GF1LұQEv422_ŌRrYg\ - -@>p?(~-)Z>!Q96 a&``RG]_ӣ$XDi00F/?P1X -藱Ơ!q ŀ^603z@?MJE>ʠMԷ= @lZ}|}/>?.=ȂI1wxlyyTswAi';A yx8%M7ǎ-3@OシN K(xw4p&L`%vvf:n]XQ;leSI.n47׶0.(/]nN@sq(XTѲN4|ٹxusHgpq,2,| PGpPq|7kl[jlDoo8M߇0/ݛf*y3 8')(Sg:Rt9Xjm:1^<,6 ki4 L:`ghPS4 0 -TFvͭiD)iv;mavf;6zQX\PK`{39h<vA-`5cS+-pct KhN (F"$/ @ZȐmtT:acA+7I&VD[:v?i@rD. a -(llyڇr3ghf; #.# } `D C -|ac,hKL6%F*K lv}u{u€! ;dT4UQ1. --(B; - -0Dq( -|%Vc RbPkH [v"XX^a 𷾏2u,VG, -SU6UV1]UM(PO%շ @& -@C1 SMqҲJJȁ%@ 䶸-pbJj[ (-uzZ59-#-9 -~P'`x@Ub")i-D M"x1c}A''& nke#*9'?RHb{z -Y@Se\92BIɩҖ2ęB>`DPe!fCB AXFS9LC(a P[gfQJ20]0fChIDD%^ ,UIR|h -{ z|wz08ĤP(hwʩDAW2,O?ɧzzi=Ϣ?Qatty`h -U @{f O`^ "PA|@[l lY+!P.P? --!ȹ7n|%3MGǀ^1hhAD3dĂ23#}zq::^ lQiA| tL[sF3_  *RG<B01\^>}x87BY~`\|`hvc7<=BHsRZ¼$x+8D,9.DHZ!65KB/ -➰JD@h;F ȗli= =I& Ssـ) HyTzNN**.-K0$"~%.i"scCy9xob.LJCBNƗ@p~EIHF֖A孀3\*)ZV jAIaaPЂ!@W?$6`rt@>NW0zdX?:@"`*+FFFT:L9L9L9L9L9L9L?9|\H!WR- q`1 ^PX$eJ475o6(-S-eC]_qu5K1jYb/!@@tRsYuP(YCGTf $ER™fg_U&EGTn]38˹T&?T ?zG\@dR FAJrk'v6࠮Fb$Ӱ$+:Q 2Ȁ -P tp={}'-Œy -kPb6KXU|ց6nbYF %9. #3[؍\d$"iL=Hlե`"*oke(5P/j -[ADre CҌZߩ{dlr}/@x  V4}NY -/P?j&0Q9j#"F,ỶLͥӐ= j*DQ#E"ɡT"HK#K nU4KȣO8?6\S]SQT'9>2RP(W  `Q  LP^@ H -WèXP^.`l~4*U]h@~u\YI iJ#1%&Lrr"aܼgKB4V<)qP[A;: XU1S`q iEkTCP"Ear;V̵EJJ]T1% 2QMʔڬF_b31NkFx[etD@H,]T')HR4jMD<58x{ 0jL08l7oӠ . vUZlNwrmkt-ӌg - TYQUf# J$Wg yQĎXLgVE{P9VtfF'Πko -ޠnP\EF)"f/U{jf"攍ejf>6=f>F -tRV j hp[CS@g A -@ T0p 0 C4 -Pt,pB0 `59(A$Qa&”3ZŔayOF(p S2"ipXU=LCV`c$.3%UÌqk SͧA\%혣i1&T$M{08S.$Հjq: ^?,BQdsƪ@l0ok8LA(҄j_A7gDjwIie85UAؠ)>PRjLF (j^"XC$ Nx#b16 r(F5HK(6]VaXuPd{2oy>Nq]!gi !2$&_f{&A.ECxG\5sBg  5QӢ!f^´Vl*C!>np%MPnP CD=͆BIõ+C [1>4zEaADdXu$86ً`5;0-qQ2LP( ~"-X`*a Ĉ -Ը(sby$Q]M|+=jƒk2$TȪ^AjbDT`h׹IO:lěBKěf !uƻԈ"5OL=l09 ZQdjk7B;X"%N(<>^MV!2d y9 -uepĞK4zW\ Q eFQȣCQA(LD53ajӪ Ȭ&wTv@!Bۜ8sZp$g,-;U:2Av`тGI;>RZ>Pj v&>t@B{Da5LiB3e5ITi@y --W*178#D& |5'QCdDӇd&DH uԻSwKȘ( -,`6# -VeIUM^LԄ:Bv5"^Fb1Q.6 - b$9el!CAO7sTHF)t>} $ZO6 Iؐ'"*퀪aam\3PD50z0ʔƴ= 1miX%z:Yܚ&6zԉ6DE6ğmjX*{xc*\-R0GMmqqYH8X%QTDT05QĺU֎ ۵NJ/DsST#AX"h{Zi0"l4x)7U*kI[7n n -aD^GVb G`Q;B5`LH|Wfՙ(S9:= ,>Ɉ!iq )Q름XWEڈpD̅.a*7R6r'BcMpūB2vgpc5c^#G dvtSL#] -/Q"/છ2Gfyh~*"AI¶%Z5Ra 4TtP}.ƚdbbb%۪}\VǢ!av!rIe1֪@3PBUK_^:ȨK,spB=K=O 5L_G*rO|aR!4{B*̓AoFhB"s4&*Q>D -?ݓN&jCNd z\grPIͦ2?X> QQG3`Y~\7d! 5/>,} QlE(b[jSC6QCm*rj7Vct(拘zylvx<)Oq6L}iBlw$^GZxNYb$Bq柋#X7f#:Z@&$FnyZh&b]? -t /Ũ -USY0烙 -iĜ TL< -59|FPJB>E*gaJSox'ݩ䉻#%" ]4F\d՛Bj7DQ"y44J\QBx c?d<2 be2R 0 A(Ajf [D 賲IY%QG]*<6M]@ ;6ow+uOdjt-k3gz\M]z^agi?܃aNul MO^!KuH*Rƒ0sGU5f _\ -y Vvf~3g(E q2}UK#lFi7y)CJ.]?#QCrz (:ξ*0;0@H`]lLǬEF %UCIKT#ynKQ Iz\FCSmp& E,dvKq8S9S2II83ywI?Uc1 -g[%8:L`f|OX=Df-K%gJ[Dw8ĕ^t:1rl;x%:38xۨ:Lt"T m^zN M+`p(.kUy< -?t8@wPc1pOl -tkjfK/JW Z -@B!ځaSAĻRs>n7WJ&*)Vr.|&>4icvAi_NЈ4H -Um?x=/sQ9Cy<^`JRriN# 9t1._QAʿ谇Km:}B_0QϠI팛Ԁ$nد%6Y:;3t;t{2(o^|ssd?L*ğ)?$ڀUӽSG|p`Gr7/YPF}xmCsxa.YmSh (}yHo1;'&EjtHüë+!|pGˠf-9G7ؤSm0XWJa{| y e)2odtY>stream -j@yE®%C% -Jrde'+HHD~j -=FvsIe](r.ڨHNN[AtO #OZy[o`YI7`& &bH1ME/P8W \E9zJMܴMm0"qS@f+0%#YJ[i$^S+7j2r WRl"D 34\O~qs \pMhFh;&z}Zѱj"~w9;i.C9,٤{Ed ʲR5D'96̩P|bısb;sRwc\H*y}L75toFAspٚWe"2n\Gs-d^161nݳ'z8ÁXR;{EM{ufJ\= FyNz$9ŔD$wY%mU^N`QZ_9b& <@Xꡦr[:d5VOoҩ&H$]L%>I)SKF"Mk˥y pʄomWWc'Ilaiђ $Q4=+=DX:!ZωF0I4kt;ƙd+Qw"Z+8>s꤂DXli8X8W gV7#Fu -b_CHL /i$*K6®QG<=Nj]c%5x`,i",ŴDI/2 :rh+ݒ$|+*m3I懹 l?-JIA -2 OnjQ77sb3ܝ4LVv_1 usN}dD|ȁPiis3#l^U5?4;B -:A|ѭ&^V^BH0 C8J=q)8AT6+KWS64RūK^;:`q/9>)i0਍>j:iJ=_$##/-D %HЩF~1z)}! @@2tu!\?ua nh6҃, bLVtIr#޺N1XofQz*YnD u?X&$RDTA)i3(8<@H F/'#AǛ>qA\"y:pw+yYS7H!)HcxjÚ@<`b.Dc llo3 tcy),ꨏp0TK ){|FP(>n(QjnA2%!q/-(m*s:/ fح|2W$1ykS#TIi7HNj6@MГfC+ѨVaT-.-/2UjVbrTm+j_s5"1y>۠=?{+n= ATnrk Mp& nIbnt%smU%@m4 T^;Dk`f63 >P ԴvשJAiҧ6`q`B_8b`'yR! `[[TqHp4m۾#E |@stJM ng捐*s<363{Αe!aAkPp?^cO=zBjII,~]Uxi MIoN48٪#esgbҐ1yJj v(TH'rfemܣGd>ȋT* (~-uw.\<3<951'`RK̃yCƐIZهR,f{b=l*FAi!j}ԆѬl_pѨC. "N(GGOϷ6 -QNIs='R1+,jg)>B83*19-b ¡P؎zXuTժ.p.2cЌBÖ8h;\24I(vw`号 y[*@Y'* 7E2UOg"mzTԉ[ |"]3[gCYAE/p*+\~5 $"6(IZAQuR 76/b񼺏j ʉ]] wƖxrLYQ) ]~_q-iŀfCV=SŗѢ7:芻ưxM =KQ>lA8PSQ9_ -&;G`dh%Ws3H~/BiXÕ4|M8љ[D ҄9v$-E'lat9}W|K3n*n4P@UNp&btRpPP}\g#dk5( ;U%q`8S|PrT잭D<åNKC2--6,v$ OZcXK>,T3ibnd $R>{ޝ(AY8!Vu( -V8<-@@Pb]1Čw {PJǙea%?`M@ *ф k] *+rFÓkCy)d8-Y$1MO@GG-i :u@bkEeQ-,0SI tlnVs!RojGu2vOU1&@) T.D<"DWD?/b9bxI*e ˀ|پy+eGA@ƽ PH+ -Ke5[{AXQktyuq#Hi0o5?{NCs5$e{~Ɲ4fh*+%8 W얹V/i1=f@ kAe5gEǥ̳g0RA *YDRIB45_0(r:〆ٛ^3c u+3H? Ե\S^+S|a/Ut h \]Xmg_ "0T:r&`7u8 #3l;HEc'F% |\nvV iF- )M]e췀{@>tU p# 5'xOhL|X6bS[7k)Q[? L  }@J[j t[]Zf0v_c} a+Yj 1H瞢T)Hy YHA|]5 å9X!iGPTǞ$dCo5+S^M@ L2Ju7)E@[0',y`i/!lq򒲆Tlb5B[i#B[0v;?Kp a?}wجDfX"`F)eEUS߰@Qgq_ }_&!e|W J -%J* -X$ | 0XN 08rd0^R+&inܘW k>@O,& Yoj|&w0@`IV -@%ً -PP0wh$jVVk|hRf,N֞rb'W(*=0.[FXWkt^C1!o#<,hi:mLD3b@T)!a)qa/ P] ħtׂX,3uU}_:JcݿGeDyE%b,uwqިῦRi.H)uʂCW\ @XOT} LR* Ѿ -<+"`cǺ5# k0;{8F U2)`6a($Ɛb.\f pm9{Uaˣvwb_rz ``HJI:qMb3H,Ы>^%׊aUez -8}U@^J'⇺AC0NT&%@h,m7|cL&Wۋ1)Y1VUl֤keplh-OdeԆNNatϴIIL, ќ%"i#Cɺp֊Ěl7>aJJ+(W,,@t)` 6=*YX {+aq=3YXp u"]abN,:W?`nwӦ*~A -DWGz WhgA6V>B>6l.>M.n3Q"PaaM܍7e -Q92`ΐo,ˑF*t -,XǢ-ڿ=xV`>p03^;2}%g^ǎW{G)X |c t*`R)y.,rR*a^y`ׂn -(Z0cv`-X dGv@SncXf4T ^d UI:a L S$Z=[ii_S TL+8H1ޙ#h7$2+p?#q00"uRiq -''+5 RdJ3:mb"W M%wCp: < pC*4ƒHlx*kӉ\Q0b‹TGhQۗrpҋNH8m(kboo#?MD&?E(AܜxVx"Zk78h0^Hq2n˧tN9SPQ`q-$G59ga&y2eayC,4)f rPoFLAq/`!3TZ2* #086N,35HӸ^8¥3/P$e!ڻxВ.+j̚ -3R}xhqDt٢M|~U=-"Os1uwBM ="%{xĊ1# CL8DB,.ZN "t(zibEXxr09O&&m|(- Wd9YCDܔH(f4*`TCC 2)99㑰dLID%TaD cI-DQS#ۓ\ǘţⵡƃk,fndА:E%k =&L'nWjEFTY@LpE5jZU7eVGĐB.BERcʉ56)r:j_u$vUa(hrb94Ȇ^ 2&Uצ*p6|Q[Ji|42/O.ц[UD$%a( BLHOQua@q! ״sD%H9|DXb(al*6'Lи @<=_xP3ykL `Exq*5 KV\NJU,M-P:&2Tq9 ?HK -dr}jmdRP\2]5*-E3yND fNPw) %l&M4J'"*ǩB1&ɟLfH4L -&``"u$d$Yͺ3< *8քB:K.FcCVBp ӈI͎*ۧ(V {OxMSh&k`U1B4|0.ˁݘVYٲGxSa^Q>awu*#m(;$FP - KoVP.hOo@R2ڽJ lFN<Ϳ4gި+BL94LEH4PkD׬`HbZC!A6{EoR -DP8$H4#VT8!:QL[0xja<$I T] :<|v*RҘM#ёF|؊F>MDʠG>j%tx@$@Qb>Ok'?C,:"W h"jY+W0ސH" .aN# -)}8F *Ș<` NzÚW m*EGr.1: -&&`ٰHjtW13"硺*=T:_tA:w)KS!j-Q\Ix {w,2u3d"L|U.p@ &` *2.@  * p\ -> 4 -< 0L@7>u:\>dG%EBr9pQӣB%"3N9Ի!Ng>cZŀUM47hK\(b9j>6TU4+g^$ /L#6*VJJ- ^) &s9C jdo]Fb!֚Pl6`6pu/2PмH_\i /[7@,عzf#&PKݲ*Va2N{[j Q̍5FUщqi , -kWYi2baRNPL4 j/ⴄ(3/٠GDB2@q=f5pXlV.3G"id pb U?RQtqT]tx"؀Z}\,NJyd)/z*hqi3 Ȍ4p M*316G dEK( 7?yLN 0ְIm> ً*n1W܍蛘 m6_ΔN` -&Iv]DlZ *Vpj"6P(DD}ӕUA'a{W:7,!oN$ 3V\Q&W^,yTKб3 ^c;d5vFGN/S+Aq5 aB Sab{WaPKyOxc]0y7˜?6>{jWjbFw$XY葡? ĸ4 %xN̰7<]0:Y0b &JP;afu<)#o9c#(A2hT8uTs%aQcDj"Xv4t: pHjۏ=Τ$ ~ aCFz^5s ck4┰_#G*-e=1=ۜHFWn9|6 x.$ohn}k&:lR&$کw42ln&he~1cCpC, v\5`cy|$$U^G'vz_!B,Z-\($yzwxnktKH?*-/}c;z7E5TXMǡ:zR7n쾯'B.)d쩙Rk} L2?9x*S+_Պpz,EOƑ+q2Un MOZ#Cx0G<ޯװ]18srxX -ˏ^K;C ^iK -38pQ#+ DZ/<^ixMןxmu |n>^iI^F(\SY 35ot^=NuO鞾] z>t~!^2@L:~FF2ֵתu2u<5< e9^lc?:j\shQ w'yV!yӪԧ( -8TjGK^M94pz9ϣr_T\{G>+=]\a>:v{q2V2oXAw3?Cs"I!M{'Ir]nYu'(c\\o4)r/{J'=Sl\A .U%T7?Qt\_Kxv62?[밠8;!͚1Y޷&q+vt.ޚ~f7=~,hIsו"S a02?34;5.U7|>>޵JnpM5~nŽLѶt謶oAo-\fydwqWcT(Wkm=ebE.@(qƩqA5֚Pt\ovg[A}q`VIƦm-$A2 ?d><6([ˠ-Y+ܪ?&gHjqN+#&^̤ 1[3+I)puЅ˫J\$HkR~e\#Gl/iuGNziTܜeC]Zi'R?ZBj'B_mېr:u*uYrط77۝t%kɀB6 -0hW-b K9k GBȘ~JeiPzҽfR**k>9 Xz Bs1Ǹ퐇~tL}C'-+n\: 2h1SKr%ؼtRǥt&Kex|[I-M;X41 xɰΗ2(WMz[{I8i& ͦ^Ӏl_¤ё -^B9|@g&0. 9V{Zd=U CJA*vM=&v;V>BgĤͲ tPdԱɁB;,RL:( nū̸LzX3飊8L:K ՙ t ~Yo v -D -]+ehIW?z5 -tH7klTNqV4(-L!+e߽-d%<{;a]VhkZ2ǩW]YU0i#KyHQG3@[&Flyp_hɈ4)vĆnn=s&~'+8Ci}щr3j3V7,m#lOyFljtZ{ W@~o־!#bsRf`@sΧxuM/ZCA[38_΋Fc39?T@bA -YpzhmM"r0X8g!24[x#|OQ͉؟vɏ=Aӹ;U j5(*Q1Y8&^a6A:c@xMacL"uX6Avh. ʄ O@ؼ hluW6nF[c5 HI&HRFyۯQ--'4 -Ϥ3urB*V A9-GӔ*a*ۅ #5jbe«V6c ̘ F뙤sqO3{* ԋonI,O׸I7V4p^;z$($S5LG;gF5svD!sx)WB>m֧2֣/iJ7Bdx$"ʒ4;ƼHoZtNcBA2.nQe*Ţ#a$Dji+6tw -ݨ!`- ƯUjqͣfb׻%PZƃ7h0){¿W>#R%q5uSv[a$U"Alqqd 3k,:y% szf~hcħ`0!WωY ~JJ&Cd֝O V6͗[ge@EҾ_dy28&IRtC# )B|AiY.E*p-UmX!l:k͜K ܻHe`[:CMDs3l˫ӑUX'(;يvzL z]\C-u֨~fOzktWȥ 쀈|$Ddg1o"G6|#-xݻ YV? 푇?O -m9QU=)BCOY<O=4_Ką.C pD0O+ ԍ`2!$Mu0+r: :Z.oz[g3([;PK35Xdf,3ATt"vLqW`PJGk4Pgy}vseP& 9w?ZnT?580=2(W}ShV^܂E#w(W蜶lF X}g"K)Eq$c7<*҄;ahJoO]8HE|Z" 0l:vCgQxR76#OSTT̴E>ԍm"չ!6i쐼_'PZF+f*_=E>ϜGTH"˼aB!P įp 9Iaԅ >;X*Ypsؙʕq^*T@t"ʠL;F ʬ{p ,& ŞVZYWƒ_G #APKJ# #傞+;9wf@L`ߙ*]#UEH{v5Eu23Hf]s sV'f%k E[GZB`^%<ˋdCS؃QzISC](냢G$)ZdTΑi9BߢF5Kk)(LJâ GNm5mDiH 4'#+ʹX fo?F|˰&%{>^&ZO2 Bj}VN2G墝ɴ (9c:!2!xR30v&M`2 $=gaG%j`Zrx# TY1iTZP;6xgR筺 y1W1t(kQ`bVCޔ6_}8"gT(pΛ ^D X\FtX0>]\Nوy㒳^ b&/QZ[dl W"`&6Jde^bsfFCIƐ#!mp!g(0b Mx=ۖJ!OW`YfP𲩱 4O5jst!Y"`PsɥlprV"T+v+HAw|r+V%@A6(% F' - p'gW.O"sQ*`TDnV!%\|y^Y0ճ X+B Zs>K5N]\Tr͂ᛊT}sq!ټ Duɨʅ^< }D r>/ExtGState<>>>/Subtype/Form>>stream +%AI24_ZStandard_Data(/X|l .D(N )5v +ݥ|P%nOB z 6Ϳ1cm[;gk[ޯ~5rl{q-o{~n[˯==ア>/wu:_?~{;yٌ۟o잰bo . 0qYĢ C08 f~?O^1?C1ؿu; ;݆] ?uy}:~`vp }_D.:{ ׿}0 +.@:°_Xu.;Y^lw]3\ qmO߰}/wW}yaϝ}/\sλڇ-7?/E{s6\oo>{z7{kos|cqk̹sߵz_=]؅9o/r"چ_wak1w{.;͹_{|9ֹ{۾=~s/llno_s/[g?|g~mֶ>0{f ?/ς`5AvЃ@0?s< =  ==ѻ߅Yk/lz߿zco˭n>~7_=߾syu:slogw-c=sjkn~Ez/{ؿ{=w,ߠx-k1wß|w}=²?}a;xxkjkqs/ߜxcՙY՜Vkq:[{[ݽ]cfkn9lƻ?o=gEkzgQ:Ԡu\;=o1rq۝jo}|w~ƞ[w~7f~|b=[1x{~9u{/;k1ckwg~^e5ln1|{7[gcolۛyr-w;񅁡9<"vs}w{{`حߞ>ߟ>h.wzyׁ]؉io{!6ߌs:3=s/bjZ뭹kN{ӟuEm[ovmp;r3\9s?8s5rq}wxmwAN5[kV.:|!;1s00ow1kq߅m[=az׳N.ww݅m.v%9.L0mF[fxv3ywvww _|Ÿw>_Φh˴~ 8̡w]_bh+b1Z"/v'~"((ޯ^1b^~׻~W|Wg=omk 0f& x die^ŲWf\RK%Jj:IZnM:΅P&!Yc*ZZBYJZG&:d)zYLUE9,GO:JOB)0;Sr],r-,5%A,$8UH0I22MQ*G.IPgYS,IAZLd2E)\z:9n2A#pa\2fV2BM4%Tד\tvag{:c}^9n*ͨo۳%[0g*5:He4PF4[bF:w}xr3{Ǜәl9hĻm92O㙒o3]oY}ߍ֖=^}f3ᝳ%Ðu8ILc̊0:$Fg"Q>è)I`Z +~mJ6$*Fh&o!ͱ"QiaԵ<Rl5XuhM&OT! H?flϗ ;9%wg{b:ۜ:0ʜUU:Xh*8ѲD f6˺ l[3ܿ{՜x=7m2ACwzx`q{ "Y7Ŝ"hWruGhSR ki +t\X2s$eXҎ:;4kHMKeLfu[&}&-Qd M +-e,} HgRXӱ4Ǭ\ϑPWG1qאiDN6HOWQg),E^Z +R!:6뉊+Zk:@yBOMY)BFe +"SU2eZ_NwE@eJ-ϭ}wr}4I㚢a$#c1c?81c7s5c1cxcqj5gl;c1z{}ooލoת>3?3ΦŴ,r11G2RU5.kWRUHFйoo{v޿wDz;EQS_}vMvrdU+吱Pl=ISiӍDV!i'4Je +BMɕ\tZXO{&LQI#K=t>Kg&)#DՒLQlmzLkf{-͒4H eX((#Qc ul%U2e)eٽ"[JH:J4I̱zT):"d(4'ғd'9Y&iZ; -.YD@,B" @=~(dod+PeT䪎 E2WL6hiEYid]uhV$kdeӉ1饨1dڱӑ@2L6o{RBV[u6hi\}}r^:wH$[[6iMo*[ʦݖnK֖۽үI[k +Uzo$̻bIҒ%{-Z3֘Dg_ҵh/&M4UBOa~9#\o!0ɒGR[Nt-?iKzkrr%GqI[b&m->?.AC%\KI=z-άm*h* +dPlXY@Ã)QҚv%Ǔ=Yi:Yۭ-ߒc?hSǎ%m.ujJ Sa1\^ۏ|{r~(. +D@3 Vfk<ͬZQ[ildH6\1ןu$E:~2 +ίVz)JU=fws3g5V̳lA]: *Ibt:C*o|[f6o󝷿ur6<P+=N ׫;^ȟ߻q8.sx{޾}~coj9չݠ$a@΃"AaـAZlDww,*aK`4Yj JHSeP^v%H^v/֞kz7\N0Bx$HVR=.S" ۙ $ՇHfw0UĂiiZL'dFE .Y̔يٛ n,!F "DRD6%KLLt JuTq R-E^X%HSߥ#W%/pE. гs04 5g6 D.t#eKB$%MB?7!Av"w ye!Ki E*'Zc Vӭd'2UӴTFXV҄ɹdX%Lu$ Mh<.$m$4T!'Z\X%-s 44PgKFP'rara)͜cnZ}}8l~q׶vqz˹k=|9;1zyחcly߅qDz]/}a{^/w||w~ܭx[wk_?c}ޜ6ov㬵ݷ=g=gow{ws6g3~rwwtxa_ܻ a1@zop-(~~}wazy1ysÞcn'`0{5^߿9_E:^=e/kz 끝}]yuy ;j/,} 0/ gOB~k㏿͙<;[⟹_{-gm][93qƹc{mqs:҄~2TJ~2N 6Q*RZ9;s3 K((b  +2 +Е^J'Ņ'G g-VP*hے0=CX`, U;P22X+ +ESq <0 +]LVPd) UU#dQ:" N |j L `"MФdB2`@UitUCD/5&) $2H Pi!ABt)HNX\]8ZrAIEFF8=Lziq +-X8-VxB $AvaBȰHJ 4aʝzI +b*4&OTH*@>pA(}Te!GS +|.L< F8>Gt ,HE>0<`:ރCTH.%V24P2^Xf0`] +丅PUX蠩16ӗ/ݗ' +ܷ]<ƳRx0T/5B0 +CI®s:je:жH{wp,\J5`E5 kAS*d4b ")@BN)*(1;t P! H n>M@J" QN0/H %zx! q)A&,dRMM]3ѱDw)&!31I|jpࡋ'rƛLxT2EYJ[pymvCNTdU^&AHЏ^`)zۅ(F>9p|!1 G"hHd0́j8"OOeaEJ&CB F;U4$BZ XZ<D=tiiaPy8h+Q6eH`V}uDS'c:ijv(L ?DPhۅ FFh H{pBZّ44 Eѣu-KGs8kC2@6>Bm4p4=4H-$d2Zxhۅf=`4-~-n,%<ZYXY#z5j%I,$N),BTѼE: mD@CR}H<)x4if4GIiG#C4"hhc&ZFDkTL$ MӴ5Ai_j5 VC\C+P x`g P,6'z +uV@WQ.v^z'my`zۅA8&8-#á;9$:]bI!<܉UהSPx)@5* rU.l5<:L5C: K@ +'&z>!`P~RX PP=Lۅ-(P+%2*&ʻf>BUXdva +h%SC@\N"{M 4M#4Ji V`EӴCr:@59=H4@ +lFɬRϢ8Ł֣@+2)Q 7 ŠOP dxydkb: *N`EhyHO E4;8j)T4M +m454qvaMN 44MkD4Mceߕ0 =N"@4MdTiZivai i&wi逦iÐ`MӴ g Mk@&^H4@,!Z G,z9h@B@=)(| 3 m%~+4Tѳ2̾e]Lإ>&iBW& efMJę UhRtIԸ*33%ָZKGB12Wu=2đPTӔc Her%T[5)ʙRIFZ)c 0 %<&RJ`U9KeJʱԊr+45HSY8:'N n1ofc Qɩ3%TJTVb@Rf"D{]"Tn=O'hSJK\bqɑ昒1r*4qy2Y%3%ZXք.L:_E,UeXJgdsԔX(a}3+ͱ*OAந2K'T'ip:д]D?[RTv+4QR1Y/l pY1uf@ KXQL*ӒJ)=Ug+Sj+3D* LTfdlmF32#K53䙵P)U,+>@ 8A@ NL2I1["IB` + fB!`P)EzJlLHh_PE+4 +<U +FMes9\LZZ6IB0LhXP:J%8p ۅ9H@qخ&M.B&16qAAp%rd@N I$Ep($63RQC×Y6oƀ0`4VѶM^AMJ + jV @N@)Q1Jͬ_JW=D -BohZ HpsHW*agT#`A:L-}<`즡$E98JlۅI&~0 ( ^ +(Zh$d4vdBPD(.׹:hrJg[ W\M^8й p0$)o`p+g#fz6 +@B@!\X |-v4TZ*s X$"7t]5}@4mh*C8TEsHU4`>U?Y΢6b8-J" TZV# 2ʤ: TÅbR5lvaӱ"Kǀ/F.}'SQIP$"$"J⾓UI*)m2\s(b@eC#@IJD:b@dPdPdPdP@Dl~AjwZqO6""D2 '3 z #Kb#H.Xۅ0~ʅ p0l]HB_ +zs\-7 +6'4Ij.; ?ő8dP)$*$ }/梕<4mE\,ć xA#9T iFa\ ɠ8  62l)"^@l=4wQ4`(t *awwQ'F+y8Pu>2>IDۅy$P0;V`@%*2qq0.LbpJ/Z6`.ZThjԥe1,pzl&QHDH&d"#q C^t]98 $ }gbE!C Im˧Q'nWM#Z| ]Ga`E0P|*R + MAnfnvATꇶPZޓV)`p&PX^r*(R M S=ߓo0ޓGC4`l."́*rf5%PȠ_ /g.4cg ($*Z CaejX>ʆ2H0 +]>1G8.*ag(EV4]X+\x)0Cb0#$$26@6\*.kj%g"X.D67b=rx٬ۅܑr1& =VWCҀU` +P堁 B.lPp,gQ +qQ Ee Vkt 0U]6&˸l`w&0l] AO)ҐS!Z[p*pg( ut>L(eײ(\2(:`G $8c#݁:FH848TA 2@bP.^H" _ ý<@Q(b# +L9F))AP$I3͖H*r"AJII(Aȓ!B!0 C`  +egRD4RDB.*"8(90 + H9RٰV=J BŸw>E)LuhD:={JG`-ckkvΖC@u:})crJIG jx|Z4<9A =G-+_CRjd&AW(IMi4@0ppg0u.J*:d<hlY]Z4 K0.ΰQRaOѧ#:SN^G +|؍l.joTVru0]mƝ0WMIyo2*:n*xJWwu]tN)p(Ad^ܢa"5|BB " *eϗcMaMy3[C<ȸ1=^5\V5A '!S2n!b" 4(\嗚ː LřI:C(s1~i`Fn6:>BBܮk8jtACh`P_S:U" ?wd^閭bceluHP)oQ.% bt?N@ +c.l@BL!@ D% @f&|ߦ˷ +fo\)0}G-M-YZ]E_J aOӟ)r]ɀȝ܎m +&O`B9Y ljr$޻9C@ ՠɚIwt`@ &Yl;eb;qYgFpL )ߤLJ9\$uߋg$%S% g"o\+ĩ҃ X(gkHwsD$o07kY`9/y27u s}wpu}Pc٨m'c1AKD]cGӧU$}Is4jl7Hcog7gDo djg ߭a0 5n0o |s_Ll[bx"N!@ǎuٽ%5a%`|E6dyh鍄u%}uAr@QܚiP ul +TC縴੤ +_"ZMG}igdF eAF~]$2{ R',%3UcmjZe8ίa ʼnv bm\/|' +QK{EaW=q #'R,Z" <"[6wdNKOx8s[o͠hćI*9[\ wG'Aز^;v򡂗є.T]2T#h{F,d@)H8gnFk)]jEu\fV`-)OQ\!p|X+fX"|MJ:h|TdM"9CV@>t +$f}_?y%z6J,R;FB4QGE-^I _dJW 0/~% =Q+ .)GME'jn032)]b 1_JZ :u~rYjHVUd_5`}[Oi%M/x f %&i'l^. +fꪣhhT&B>]P[lugo]ԣyTD+,o}~V"ᐶAFGL~(Wj+qFvc;,h({mn3Kʆ7~)~--3sSׄO@CϫɥOx_6BE +##_$ l3 )\~1v'`a&Daʢ,@W}&OػH8\֘"MZ2~;byv;%jԥ&ͮ&yO9Bb|EvYݶWzM߹0"JƄaX%"I8Ґ1plԐTQh&d]YC$OX lyF}acF5 +zҷI6k>ۗf!kl+j狯jKȄߒ5RifǕ҂I%qG ӱ;3mȉpk\b25*f(YO^ gMmJ}x-%'v$seccr KZXr~ƫr6';R\Ѷfv +`bE5 ](:jRWWA0MLrӡw=P.RL%; ꛬ UcfwLz;(:Ӕja0wlH~3ƄH_Hc@ U"A=<T*.qw} uЦ|͎ͭ(Kbvܪf`vZhIZg<y[UB +I ߊ Ck#"pPt$7:(i6a`ܣ&\JuyfԔ% taL:/Uރ\/ F9@[Nl:No;%%|צб9ejmQTx}ӂki8W,׷|8ȟ;oS'4'2 _h=4z3q1;i 4Ĕ&;(ijﭶQ& bqQ6Ļqap0/ b62^ +C&O[}Gcl ɄWħ@M"&0¯dqntB ] 4='VS{Y5l7؛Z5 2ANMv L]Gص;kAڿ\&g^Xo˝H>!˧::1-!ʢy8?dP &\ՏN&)6I;zK|tTJըԊ3,΍LGthq :1jqBH^t^@Ph%]QyH:&d\ӻQAP&~Д)`Hm/nk9N$xJGSu/ѫeיpсK, EН`VyvchI?srsw\4:T\Rjt'鸱_r`Fa5f7;a(R6`Z;spicS~CNեD$\RfNO=LA) ۛ 7zњ?Q- L ^.,"{ggrkBv9c k?$z,N +gVsSLV[ym6cgk% >4y0满]3>M23VȥA{7Go 2=,` }M6¾0 +朏׬5K@+cg;tڶ8hÉmT* b11e+h] xA QoUiH ՅȺ;UN_B:VߤD M(O]/A@rKӯX'G0&pz8 +zkd 3^ +5)Iwl8'O|DE$1(L=6 z6|]}rzL@c=a]<\~yx?gX72G~:׮xy7rqJ(~ABk{|-7ǰ3Z + a}gp{tJ،p w5sƀPS +k&/@+Y{~Q"@ʃD^qP<$2 JW S٩V>XLْSJ5;$􀍹x/oNPZ0LT%H-IVi MZ'aWa R|GK B[8|Wr{} յzzE_g=džf7J@G!L\x4cTJ<~Kė?ȃ 6@v3wt#qWHɻ3gii)+DIPn/Y dt5yxS1zW4ڣOrb73`q?.ãi78UJƚ@իNWUtC7P & +9@~R1yiMI;d_&}TjWD"OHdU64!-{R@8p> ف{Bu?c64-_u7N,]>f(Ymd3~ +>w#E\폵h_!i +U=ɀ2 pH'> ~S {f(7p`d+Oߦ)-bCP9؜VI?=hEH.a֜:S{? ?5(q +N w*gΪ~}h}%:*@J{oD^M +mJIlP'4!%h f$0!OAdH850sL"[<:s{~ ]ed e'AE1:HY5m4zfqx +8 $VhҨ@?\Bo|>vs\ZK )S4|_:W.k,k)]^y~q-cHVa?6d|Y:٦͊F Qqf +r%&:Ca٢-]LW_ɒ0˜w0u꺆wLvZڂ1R9}a,o(yR(Sn](5Q!9K" +9Q2$ EjEy+k1I_T u!F؀wg*äԕ&M懚\CP #c_qr*9ǃy_A>$~W@q&q jT3ﰯ:Pke|'evvkH99,&9G8 !plm]ě•FS3xFǗ#sV!KѿpWn%PJ֠r;°n/(Fk`*MɣPތ*{j;EN"F/~-fU"G¡7T|(q\tyfILzm@aZAMDqa(?8ъE4KyZF +?m?'~ +5@ ȫW3&2xJ!ӻO.z2Mab~X]Y12fPȉ+D>l>8bB=kkp$Ӻ)4pZrw\ ye*xh +G#iVń|~u +5+6Q-iNѲL F¬H@5xU=ǔcq>M8h:A7Deg?wːRFQ'Gڕ3 `ܨkR?u:X"++7ߗ* iR | Ag'<[(8ccx +[Irq'ZcvN~~/\Dϋʈ Dŷs;n0b=H ?v홧ݲ̒ X]TZ?[U D@~:|E#CDw }A@ܓ8Dj.+8b`NޜZq22_6q"2ً[>dG&f 4 +Qr y5#f?t$}(h+]$Uo)]*G?eY߀<}DbJ)/fL#34+*yH+:PűC6 $f9k6d=9G矴kHAqUzh0=$4*E% )$ $Cbϧ6\Cz?BRo^x9CXk h֎CEv =ilOxKѥAWEzc7/Bo$Tu7#It*T?Yg8:dlO +֪@i&6^Mj x=RɌj&!,;ypsKO\f|Ȧ~鑄/1 G_L5DzGs}*ҢW㙽0H_i T nO^ԚWLހ|5H|_L'y/ O$BNCαI$o4y6󺷥,3O+CbLia`Es0GfU*4~I +k*"' 57W]V| RiV炚7_5I_uA3`5# 5SOrr3p98/_3 ŖmCEL$}BdiWH,8놅޵0%$]4p\t.S&HB^E&p#W}_H"/ Pl4Tգ[D@";" nG5ꓨR5b77\#:bCJ>jWV̐_(=!Cdrjݘ 5uBGCk|*/NA(1(bb+{Ys7"6GLO>#xpq|x,>2<*j2^#}=f^ڣA5[E'gSCzc# uԊQKl&A +UVZU:4s݄X^nUSZ"mi-:~OӍC,erHpPѵN:uQ#0 =9-Dȥk7c@ p?6u8Yג +!uQzFOʫE*K2Pj07fMБGPAkT^ v OԖo[*+> O?6('Jhߚ\%aI v|#*q߉º6$jC#“ѪnLjZ(O³HfUT +0d>kc2b؏Gh@g9fgllqPMm_= S2CjS9g°׀&>L-.;M.<a`̬&~*Dؼo, +TP_ ъNʾ3wzcd. +1d|陀Fׂ7R̴4^EۯqYJ$!߽ wX1ƧĩpVM5a$-T\)w5+tw0U6&͌~O9!vr)|\SmۤeHs K~sUz>dȊC?,R~Utѓq 7:QQG܋JVV62R(*/L}j#QzhZUNETxŖ޶Q^\\]R$Lo`]xР" xwVhi~/8H>>#KKoBB7-EԩL8]0^){q@ c`bM 踗?'\>iK}D~Z'fN#MR^oU9qhʀ_YV郔x3<Ǎtշ9lW:N|Jx6>$mrdJ|4<> z2 +k#9:E/ +lth/:yS˾I7S/T&7RMO/jl4߾Žt{X n ^vX5LOzqN&D8/dѽ:8jmB7GrJfAQHQA +/vWP/5;eL] N|T-)g ipϤ18^ ;c#vn`^{eKKf6Y TaD{X[8 +gtTz$}+JfJl]&W8 KAmJiLo\IE^#f#c I}}1dHCY zBj\'FРE;iA2LZĞï_ȻF.n\-@iF0 +(8aMD +1#sBEnY…u kx.K)Y'?_{8Vyw +L!Ecd1mQCaInNofMx$!լ2f<$,_tè=SFg'Jfz]޳,Š-Ly4~1"*lI6ybi=* JwV,郖d}Pd TDKik2*?e +B.LWG%0 ie.e# @x7]IAf瑱nZ8h,;E)P懿sZQ'%U0KGl<?=56""eu` zQZlmu!0ŽB; .R'צiW$.OsF ,P +m*,B,/]A˞rd +]Q(1N`3ϱ *z$ 5n +գ^I6@J&wC9J> u#G,^zu(kRL'-2QMsgT 7qwG3sM0x8=6p"myݛrIڼ RKXm(X92j!MFT)~>`(A ɍ  zXqp"Pܹ}PQ%Sʭ\ {D} +qJNPmBzrԕUK/%nh 1)c)v'Qj ĎPMjā|y@T9\ʺ>^9ê܏xaRvad9O~ 1L)֮˖׵c6y~kƟl1Kηoc#~[>bYoȈSP k)(BX)~AUZųTfJ[pr4訛[L3Mz x@ r7A8*cE$!k*Ӫϡ&0Zpޣjq,}RAO +VG0E!cz) +}'-%k@VNTw,'yz«Aҕtb(%@BB_vvuʆVfB'{bHHhD[aicT~|Db2h{-*Q8VG& ם(Q0@֨`t# L,Mt%JZvfHEz~{$b2K[,!Zd& ̊-2? I:W~H- \R)yuIGn(ҩ@ˀ~Ц'"M.Hu{|;};ـ3l 4Ԑ-494&2VG]E (c#F1*$v,vl<9G_/Lˣ"Ƨ͖tM#[&fVZ=rʤx]lB,zf45`}/1rHQ)[]VeDܧǽDlWi W).oغwqn\O͆ 4QXs_)N#j}h1$:ާ$ +FmY}ghdPÒMWOt3;'˦A3?/1?qڪ7vn}bN~*Ivz9Ot; B\J-~sSri.: RbKN>A=e+ԡ!Se1 bejHE6*'Ƞf򷚥/]_`M5pʺ;Lj~ޚ@?R,ۃH,)HhkcC1i(Cƅ ;~FU* +d+4|^ TgeF,+MR? D+,M m%dA4 O^)Hܙe~},2@ǥQ$mFeZKC_0sOP).µ6c6b9-CH#JCWk}ƮB㗖| n* +@PCE2%ye&@{80aiA21r/~t/{Cا@,a5[U*Ā]|$0DGh'**xZ ,H +@ S ,o񑭩JHi*w&/7Q͌tKfe|Z5[мc씺eP +f48?iGygk Jc`䮔q +$0H`!PxGT*lbHs@S._\o6cf C~,2Ama,<1dv>ψf<2J IϏb,5hsHva{0yW@/8E{ީT +O}&ٌD$P܃1 ny}Ebp,z7,̇ ,?w:U}J.Brm[Ia-XHhl4Ʈ.t5.C#MgDqn{/77T DTW5ٟh}(Lטd](mQA|fB[N-ĵUɪ$ADK\+B%JR"#'`L$n*IH|dGmFZ!ͨpd̀FN7 52g*/yg@#T@@[MxX&-: g0_Tw$a>D\Oi@U|uK~#cܗn RϏd KgBn1犩^zA}VvAz|.OiqXJ#޿Z^a!P|w+w~X?/OU-l /.K`ȉ "ʨ50Rpsxp2>JW@S)29󧴣vvbMzܪ,_I$>#'50y~|1X%U~[v;z4A+uKTN-AGXIEOZTTE`H&M4kA*!2jQDȬw8Ji(7V\dK?t>O~V& h/X0ؤKڭ\"SOUS/UD) e.=Nl8Sof^8'낈9C1W`6t HxۃIɝ5o`tD4%J…)tҫձmScөn ~brL{!?MEo.k~v+]\E\1+t Rfd쒈熽ce^jԈS3P%A2pA²cB0bA8܋7HgomH +| P2V]snV/<7tzHX>ɉz/Ua%uXj$41aBlօM#g5amsLCo2 8v)e [)VywjNt:6imP{ݛ:c+ٽyB/2N3ա+7Ѝq14f/xď[.eZ`U:-IQMO#:0){|ը+J db^6S_$ :9waę^Fi>xXP͎UDtuFmBZ!]+ћNs2TP?fE"?$GqoQ2J A2# t׋ArebVNd2z@TCoX\ +SۊI89ȑzO=_Snt0먱"°P*,(\s>cKgYJ:&{`7\laI~ڌfNY2~#~dE n)ڢ`NbEMIlBFRJ +L] >B|l$)S6WeQ~L`Sk:q:LTjk_@< L`o09%y& -*JdٟS,X1N?W`?)U,C*k(7BDw`-F~IU̫[xj4 +@/jݜPH rvT q]@U>3R]*E_^RyLGRR"i)3dTQԠ*+ ({ +{|ᒸ¼)+*VWFZr!US\uxCh9|(l,{\ecTǁoCa/F9wUG (}(4X%G֬T{[]2prgL܌Yd"-,\%󴺈<_Eʬ"R>!y5O,|j̹y ;YDRCE'vfHeVD>.B<]fu=W ;l<*6|xuPHf1AM/x5֤u:-" ☤hT7"bhNNq]y}Ll&.IV/3 N~m+ilT^x5Dz\g#U̪I@ {{\W>t%p9O m0ibㆁco"mf. rA XXVpǒgB2L'&*qkӄ?"yޏؤ_,̈rQ7H1MÁ$ UTiq1 >1KȧmK,)/&k8~ G'~q4~ :W2^*Q=JE#|zluc<p{̓oz6;:l6VCk,RYnE2$!+q5F`{ͦʹ1QLH Mąp9A D̮D&8g'ׅfU>DbV'? +d| f<'H? VRmouP;|`MV}0`ue7eV]#rPYغ_G4qeam#l-H??g[n+v{Kdkf> A 1T®wqaAוʤhBRk7!2)?>:C*"^Eo Slv2İmGuo񼡶4jV}p9*̤K²R.o6ϺCeN;!E,Qo(o +wq^憌U=`R, [" Yc5S5k8nl7MVhq7ߡ<ç n\n)e' /Ĥfz3U==fUܝT{y!q{\G &(c9U_Km0/Q){叓[Cf?FFnbT#]?gmJȔhkB jo! f 6=]܇K#ܘR%n]לUN4'+EMHIwJQaT,{Ьp.( `?%X;A`_3iH#sDIa"@y\'VFo^dz1PGF9DeැAl`) +В[0 +fYc I MT8Qr<;"'( `9e#}2N P$RPUC +~Z="J;HdXgTYi0xqrEk`'g;<HU ^ʇ&p qb|IkDb{A>gKt^2MfihazY%ʸҝ]V UE/Vlߨ|Yɔ6 @@ @@ @@8u +E? UZS xWtQ8 G4{RG?GqEV˹@r]ʂ^Oqk4eP. +f4B40ԫ~$+jiʢ `f Dj+bS>MY0V6iBɸ⹮RAp] +\Gc<@\g򸎱4TfMdHZIf]Vs"r0*TL@6SI@KU@Gz.=&=|D傪bOi0yQ%X*jP{A0z wF?$)k?R46ЄbuyetH8`ad7  &YmK<2ɬY{yؐ<}`M*_6F]R8wHaf#[B:bBn`PTǀYX$tPP:~ S*$ɤ B@*ƤtF@(P:N"& DpP`0a aJ{Л<`nC^Mgw:u{/؛QܦzunDٕa 7Ыulz<7`M P}蔾0^],QBKGjbnEwkl>FMb1r7I$^f 7"++S,<;΅W:ݞu"|\Hu%"#RLwS.{;eaӌCY +İ!,ID5d#4d뿱-%UYz QE5~u[jOLsZ" wvZ}&x/Rk>2uwQ(qѤ&ww +9%-\:A"4AtKK*f mq-%NW h_4s-Unz"G t(Nc (tlh`ӻ;:)87)ؽDW*ƽLνU`8 +iޞ{qhCʹ7Djf{4;8Ww:\!pmxuqHԆpĨK0# 0su`L!‚M_XG-6SorzL[.HSXN@n(Wl5LHQ%@J;F_-;!ցXEPHxgi$)NiImLqUU%#SR>>4|O"1׻ˈNE0(E=dRAҌD%mJQoƊTaU'tZRS l + +m=坝N`e>eOh3e05'[kJ H.8‡?!9&8s +5 +C8 Ya )]/f{&zg K7#6$bD#gƍqtEeΔ\#I<~`#ȭ6/QR P#n_/#^xgp-&5xu[ L7y-D?sOJZoU,d_}pBټ}[xRN7DZlpv +Q)[d+d-Di!>^KD" 8x,? &J~]yu,2_""ƤRᚅng\9y&I} 杲>eAARx/KOY+҆ɾ2=LyԧcY]V5w]idL߈>TrNΉ0(u8Y't~Z>8{UB*ODy6H;%Y1݃'kaٗ%٠Wׁ~"e+<>(TU+Ma,O[{.e0#Be# xN% &oM/o %wۜ̕۱,ʚдa֍|gC uX#X2hsƭ{ n#:Eб?Q+*F_gPeO Yf#W\= #*ۙTݛ߱^Md#l-^H =g&fDSŧ+_iƽ/Ȍ|:$4h gdobX" w F|5h=TnQ(d؝y7l~LK +?mI/3ғ1r8 rbv$>Eof==0HIAA}WQMkjbґV2wL9pF=Xr7|u`ٵQ9\qE";_"NEճξY|7=S%C61?SL6Ʈ:Rjnn2\kuN?0#IJш{fD6,\'"*vpQ\ 9v$%XA`@zLڧ_vKE|i %37+dfq<ޓ0\9cBY7|OySuўF5 nE˿~-NlW1f|0:,+'|F8Ssxؔ=TPr֝DMkr3zE00b8!A0T$+`JRV όdN\kz~J%p[wh/Y.0(lAW@ġ_a;zHAH\' =7'4yHjF0sj!2.%ly]ČUӿ/RE!jQ,c.v~'>cyWXy+]n"E55DfyN b;8Cd!dȕHpQ @qPD"Xco_c +E.PXH pƱFb*:R Uᔰ=0\u9 ,g;P^`jLDJ;d655(변Q&|W4w a63[_"8W2,pO١4^aC vMM_. B_Bbohiv5.)XOhmqLޛ9LNs^i(< ''7l>a`1e7mq|JWp fҽ!C xl߼9Zh 6|@˴2l0Uŋ9ޱ7.xrG1|PųU"{GD\7D.Lr}#IZCdG Cvd16Tqx7r[׀z}P%1=w~Or rotKEBȯªZVJS1o=7y E10O^!Cq "mӐfS(y}YzTr/k_r +of6H~G-7~?ɔp<}LT+KnzoH$mJ G Pff~ϲɗt3&w/{! ??ҷ -AD +Nn\[ʛ|@e ^#6㶂wⅳ+mw3RN,pg1哿5(ߙḾNv天cvU__*8F!X8317A=M% +4 2r(d3%H8/͖dG?C46NCuI)D8^_QX%g U^8Sr]e!Um#]-KÝM/74;e!)5P(ek8mQvn%۵P.Pۣ=0 2my$rdl}p:+ ™o2eZʞĆĠI,TXKx +ed anҮWl*CDT1j䠒ԍ:1LHܪ7Z(̷vj#,[7.mNɗT$9 yTnIZ\?ܼHŚkS 펫lÛM29rQ?'@UyV0K #^&ah t+!wNӚodro@14! u&Ư*]?Woe-XE!&Na@&L Ķ8rޘOŇBFbF?3G+TZOB}ËS(ΪD+dGU{jG 0R  ̭hX;o9ªeTPQ *r5"l aͿ`g}Jο&c^_`J ο,ޟ$7 R`Mhhѓ4ٍ{R Oei<o|cy`3"Gn$,F=1>2ɢ8X4o t9D_[Xv}CE̓*!ˏig|R:FݖNLs̐- 5| z|QZHy y{ P +h~5QtdPyLɢ(2y) %p|Ѕ#"Fkͫ__%P0BZBd+؞C,0cz<e!,MEpѢ[gwr…=>䕌R_̮A#VkyEI%O}w4T{$ eE\Udt$ޞTh䓑)){M\r4mT e`J<jYi F"(r2zQ-cs83 L  pЋCC`k5o)gʬst +g3Uey5|~=o>a52o21lNV瀗Par9ILz')ʦ~lu[JwhW|YzϾx@uD9=;CXJwWֹ͢qwPw.tǝXNW@[:\5T|l s&rP`ke(ۑ'?@'TL1q|XwzGq&qS4q7r/!,xkYo"5,\ӚZdv[VrBLNL8|rNm`.&|";xgČ8Ha W*SHAQU<>BL@GR3 uBi׿\,7QRTݵ3v7AS>*eD[ E"K11Bj7E_$BO!QGCx#̲vPx\7 "1Gv)X_hܬekqN'z4eo$ +W jpc=.v!dj .|EeKYLq4ݳTF +:PGR> ӧHr*TFgH2luD$s aaǶRqCbKE@,s"%;]2foعT-«̵\. +Qgu&5vS\gle9j=1=C20 FA8Ӎr+?ban -F66r0af\ H:"Yx9o.5Jj|~.ZJ#qt;8jQ\ vqMjzMBjo3(JZ 'iU& nkbps**$q +=6ʶ#qyַ怽Ubr֓@Xu|4a7A5uÐM%ذ=ژ6!LFvQu!dI+ Q_CРÙz 3 Gt+k6aޔX{śrog%"vA+4b} +ɓ("£NSd(i+Qh"n1o JRvl RPn>.0 _\D>>\rXg޲C;o)x8sYdm~+ +9c#i5E'hѵo/!i(7[ 7:r WbIa}3X~IM /)+8ԊQ8lr}TGz`Sh~IQcŅ#V́M{`qD0qvMxQ8jNS~8)Mp VThaTX|A''cjLʶͤvBa11ҤַXTqӤNcR WۘTWRhRp;λ`43!Dt55D 90Z }ؓ3X5|p#S#(ӳL=¦ .#9xATZY3=4$MZyLà# b|Dll<ȳZ&]9B6Ѩ)drȢ }%Z.iȍT}"$ϬC2 b᩹Bz?!ELF_qs RݖNix,Y~F?c VSgafP>1Qlw.5/d8qQ\~c:_@t9t3-`*(A}r p3ds2lİNJܟcv)|2n*wTXY5#DKwu +n83aCjID=6z<GpBy4&/~@k6SJupԻH"D`] ѤU0,!~̡xUڔ5:MaN{~ ` *ߚ[K5Ya'X{vUhWj5Vjq*إ-ܢi??-H64S-MR'MҴBl*Z>ʿ!:XNr" Jk8f:Qh-`Jҭ$K&̽ h= B;0` &&t=3߃}~y0gg&P +L90mb\T + L: '''# A $ +c/t8 X:5}Z]s_p@a5yiF_j~KJ5}QH8}+dr h4OAFN  Ǝ l!|Pa`ڐ̅6Y [D9W1hx.&16U'((nMC*VUX$h)pJ,YΰjI$\bPh_&"`S~#Cfbf9i,A{OEq>L}~L5k! $v`f* + +np1PEt03333333333333S!J_i?+[S TWZ4K2$y$+˲l,˲M4m+KDQ4MSueWUUUu0u! +PDqXy) +M˲Ahp]yIeYsaieYa؅8$!<öq(8%9ev!reu]yߧP(@Cq0 7ocy eU g2 a .,ox3 F2}Jd 5=93.-=ޮm}X,&H"Rn \X#! + yH&I1@hX6@ <( bAB!B!D[d0W_i`š8C)( ypE-A Я₠x5 +:_~d +!/b@o*TcPFb`X% A 6p ~e~,D}+8q寰cA>bZMBx/[`@j6~T"SL5>zu`gNȖ<| (#X Cp@l. w?f mXn.=–8b Gh {COD>a,Ieԗ3EWYWAQ !qH@3oeT?T<t'.X4 +kGu sCLH.,(̊%$\ " ; "" q4.PXENZ)+`V%\!؅*bЂu@:1s!KSS`x'0 򬀽 +JhdfЊöT +LkQ@ +0g|[: +p%Afτp}#LРF]=)]`'L}d\݄AhA~X!CH #aH2TDP&!6lX)3@]hV7At[% hY +*8|AaLDPA~* +=(vA@ˍ@,d@cD +?(x vAK5#ȖOqܬ O B`P5kH +`pF:;AHa@1_AAs t.-Ab-!Ky+O"!a& +$ȸ,%\3Ha/o{,>P7%A [UL @ VEX Z"H/ V YAt@ N@7B@`g ڹ{ +69FSħ&N0H]P"+X32 ud? %{hC8k@g8` ?EH`:-$) +`j2ϛQ (D3T$c3_ p S50@ pV iPw ᗿ;9O8<CP5Е~ HF!`(b`TQԉ`s6@@:nIF1xv.\`{ΙsWh2Hyэ\ #yWyAk}ox |k,x/ +D!yuEv@F-fKl|%;4;(Kh,(жB #pO0^xg@|^^zY#]@@Lz͠BP: 4_qM'p5쮀b`1U$ S@먡?e% Ҽ/à|xX<fC} ;0H  VOJ^70c`"r(Ա:@8c}H#W:@Ng]bP@@"H)*p5@'&/`|<`%3@)%#}%FW()=Jύ:@ u }T) bsb :T뷊?=@z@π?\'өQXО-b>g$,< ~ri?`p؀ Yd?Ώ~~N*BN\[69@vH2 +`}Aɇ *`@> +&,g c< 4lAuoh?:oO`yM\`#VtrPGA>j#,?`\ ]am=ǫ^͍?U(hC*XN`DƨB|~PP3DN#n`x +>wfzjdv8>}x\"Hj`[wA_U ȘmiD=A.}EPQr2` r#h蒐[aa_= HOA#K<8<tKO߿(B8 t  B !tN|pqU~|p\>s&){ࠓ'u`PLq/0OD<Dd?@AdPf-Ϳw{8WnF'Wn(⦭}fxN]/x5|E:D }<FMG}Jӵ`Uos]Nf+q2lIg&g- |Gޛ)4u( %+@ )C|qv>1P?~ޙ6 +Ueu )+``ٓ iëЄGrDsQ4fDB.4؏ilĽܬsFD3"HJUdӑ|vFk + 5.yq;S}(7 W et*_ _j*^6 |+g4ȐPÆ "caU00a`0V3\!# 1nrC TB aFc?)!W!W1JX  ÔQ1b`w/>ax|tX8,@, :@Bp\txXtdpa  8ÀH`>8. C:,84p@6|XPC B8DDi4X80hؐ@|bf%L81sFD:D9912!b  <؝:,@pã xh  +# @$"*X61T X0xX,{P, pP9A&KG=I @K +YECRILJ(&C %HPP*ఀ҂E$ 0Aq$ HAQQÈ(&(X:@R(Pa‘2!PDBLPRR@\H8(p('TL )|HqrBbМXq%DDrBDEK +Z`@ :XRHHh"łE{B.+VKTs3%][obB՚͆3R间DF2"30#Z)ҕ +WwU-nZvsm%Oce jpPUɄgT̬\t/:+ZLrbKYh[5:ۣՓӏDv=ԓt?L>DI2iLAe)X{Cˊ.{JFO|xC5QZOC.+M֯tS;D---WrdVt:srѨ}uK/kfOJ crQbd$9)1Ah`PyaBF$$ŋ48KvhVN ^44 B wm;_*D;h7J{gϘʺvnt4ߩK7sSRx5ђlYdfOsƗ&kaeA2uNZh֘ + MDۡM;+K휦_f/fC.)͒U/"u11LRIzҦUeʓνoIw +"~M)VNmOnM*\Jo!4:~u֫N*\Vl嚒nJGfG?ZO-Ry-U'^yzz{G{Os6ݝlhjfhds&mn~'QV2ɇIY{iUG{2oq(-mέ3Y^-^{5k:wFV]%ViA-Sjsʣ]oNkVr s=[.1E:emtnyyd<$b!R=s1*3Wek&m*߈0o3\, +ZdhԸq +*Jjˆ?jT_ͧv%J! +ɈHxnnNoն+ҽɳQwM$3^K߱yWcSQT{,xJ.i7R4eJ2;dU[15+zI]J#&хUUw\{Ԭ{m=.J, d59BJbj[ 0e"ax +BN:dR<0$HBA !@Ę2wI&>& V5%P ` ޽rM6ZͶ-JNn(VV,+<B7 8h'$o`C~w"W\H] +_Ie:Gj3Rڂ()Q eUN{\FVWQx/z)@X̊SqQ#$!#"bZCaڄ: O`os̕vIZ'+N86dOѯ, \>}?"ґar}Dr扦8RׅG{p>.w)ԾfWa1C'ώoD STxl쌃9j1ҐuaD[bx&S8lXdȊVC=/#V+?D=H'w ^D9.*5D:c$޽R}@dwЎ<Oq@L +吙@P z)cΥNBHIn }Ч`Nw.ҟLy͈ \2^OwϞ ~S4}[r+O)}K 5 ˞ByV}qo2 3xMA҂b ] 55)[ +CW>2+*Jh@NCJ3<΢>(G#ˁVa%?g瑬 s/e)1_WN̍1o)!uFä̒TJ-߮ōȮ,q>nvj@:E2}YA IkNLĒS$tES/ ?ކ _!C,"uW0>ތ|qLMz1uaV,ZWxPkŕf* Ȝߘ!7Q࿉T~h ep3gh~1gCQ4dϭ-&nw14N edngH.d6#8ap +$0!Uzutqjy{t +ŅQ +`|X]S7&g^c;&kbdH60C +|@RI1#Itϵ!(PbG7(@[aah2SU6WVvj˶  u8j$Sd#wfoJ Jf. \ت< ;)R:4*jLΊO`k.W狦N_ȾMQe +fnm956H8Iȹ/I;c|qN~[ƂTJvn!/JJbl2xˣ,%;j6odH8NWdv'(GR݆ ooI:b*tf٪|N?St ^h,%'w@AF{7eBUܢY<ӚJ맦/>>݋Mby + rtAɫ(̈5!TG([2]LK QQ`'۴>J03qvz KR +H>L%asK*Qr##< B $[~?`; +3p ^b;4$ +"@cMpORcbf/8uϤ7&P7UQ\A _i땸b-RܽyU +[U};WB s։UcAK)qEC%#3~pM?q!(%nQd%[2%x4Y&h%}5%/]!/Sx8f+0j;Z9:')^gDv,ӢN۝Lʏc +XR5ߘsɍu|][h >i/7Bδ"$[ k,@HRq+dwք")2:_2,wo%&XCf6!pTFEXFc-_,B`)MݕR`T",!:2eE2Ѐj2*Thߦ7̥Ae`~uO:6S?1 O*9"CZDrA M,;Y߬\+p|9>$7>uÇΉC1!K[|?+)t7LWB㛍iH0Ur-7$~t@p@h5tW0n"p0_%5`m&yH + 8L]Rxl(<>dxZSh $^#,v<dT'}Z(xJ 'mB> }A +ugz;"?ց)Z + as?įq0RnDcba*.vbz @((K"7?;Z N_0#:*Ovxsw{E. /MdM//Z|W W*ɛH ͕+իK^rmu *Z` 9ap9= PW)-.[\..Hn-(X}k bm6]k fkK@cgsf[Z:@jk4{YPEpFmOz4Ee>E@E%*)JՀ8w ҴH54jh}(rKMHO35EZ@~`4-%2%=2'$7JZ:1()B1H6@IP=QPPFΧ-TmhqRDA(0mBD_IEJEUC +J=|-^A?{ *lP"T:fls3OiQGilztz68< ඃT` ~Bfb$Қ M5ONMPfI|B^rv~iZCULqjHǐDC\1H@B62`8 8Dcckd82ť =qd\dŸfl]73>Dkh""#}EX!#HDED+&'VDc=Qx:<`^_,@$g􁀃W9E??o.$4@ޞ6oo"Ӂ~+樮_(,;@8&@Yb +`# I`i"P𩃀<zrvݛxGyxQ Չ #^! Qs#TLuv ScSqO@ޞNpW  G{@dѹI tٱtnvw:nhq; +[0\\nnx@N\ԞOtt=42ul]6><ʳKkɫKɠR.#G1A@r2F؎ %`p< : d-HA?%^vm!ҚOḵf@F2 SMp mkkhjHPZ6d!noL-4Lsp3MiiCXen&4 [ a` jisM @( b +)4 zaDh#ౖT] x# +#:iDfߠ"m *`vv&iK>ryI[] f\@ Ge7 ;CF*٘( V0H-k䅽9 6\Z2+,`` XFf"1Mͅ@DӘz ٪K9DdUPPʮQj$VJT +ˬL$Wf! B0T@a Ct}4w)\`Ecp^ۇU JXĪB3Dপ2RP(W'00$3B4l0J (/~9[< TP{c gYǵPyJg#1%&Lrr"aܼgKB4V<)q;-VЎN3VULhLX N(O^:2ȴzɌ~, +Ib,bTRꢢ)pƈ1(I2oWxf5"C; N|"W剳rb"RX-N.S?ҝMUU7  &@1`^BݠWρdsWA>. \[]4**\-x6jm'y;S J $WgyQĎXLgVEkP9VtfF'Πk?pX^?(rH=ϣ97ejflf>FR>ؿVo,Kn՞@B pp.Ae8hXd@ ^-ЁH L4 w^DD{$p,@ ,P*`6,#E4$8 +V> ҄rT2`FK23IB"90hZŪx&ˡ`C%[TIs`pb g0cf$d_ݎ9H1 Z%mZƙ*&t^?,BQ|QD"4*z=q2HEP }ua+9KĠ RÿKJL|PzTA7R$E! S25&VEC/^"XC$SY'b<PF6 r(F5HK(.+0P(=ֈIC8ͮqQɪdK>2L0Ijq ¨P謆`!oEc~cSP<)˒b#\u`L#J1fyXQQIdY@QҕGpل8$@ ,;]Du=񘐣F(^b؉ +dW0`'"#f3ʼn0-Y#jByf +!!ŔB ZϰϿQ02:h' 4ITfR/= \MQ +Dl3f +qMԴhY;0=0`Me(g~[RބZh%Bi6J=b"1l/ҴȰ:;u$86KՂN&L|$lup\ 2p`L`فU8?;PĈfeV 3`I Cb@%cꝆ1RR m԰l ḥTݘ +Ը(sby$Q\|&S$4c^ޫH$䔱t#1l)FP `N!Zګsssό~!?^QϛJ*E$Y>Nh%qz p I|"r +4o3皟 "yQQD4=hK:/.FЩ4ք,5qDVٌɫa@{xc$\-R0Bͦ6иfb +IPſH$h*"*:tԄnյvLfޮE/mtžPJ! &҅ EE bTky`DبiR>UkI[7n A@"#+#0F(vSa"AYu&J|*6GǷgⓌf +nJuU{M\M["yy!5l *xbh/4W +/(4k!c){{*<9_ZS}=F2T dvtSL#]\s@pMH#`hd4Na $a[Nbi) +0R*MZAߪ &٧z +V-? )֘K*;AմV1U74pXЉDF]b8]O6L dR/?"Va{ + :0O.C ъ@zPD)tO:> 97nsC%5`,6D>G^)Leu[p|ܐh$>hça$D%}oMqD HL>_4ʩXAҡ/b2祲T>0W:N+b3K%j>Bc%u2̊#ⵌ3\Q͡(E*gaJSox'ݩ;r#Ia̷O"2Yśډ1 Dd10{z2 +K' s9I/#j2 +q{yN H,3g' a.>ir".6@Rz4(녇FsZoXW_{hWY$y>R?f6w()ޟH +=@ya(;Şo[$٫{E d DX݉?%;+p]^@ xY{cvIvzi3 ^l6~ TI*W*̜+āV:f_b ϑ@u$8N&{fqOm80Py/3g߾HIxx'хOsﵱXɝ1XpJZ7!|g%XGca;i7an1M$Ԏ;1˿0Ɉ0C޶,4Az2dhpq+ Rg6`T}HOy|,$O848N[#Ft~{~oyX(~ F9s5 +~J*."5'THO=AbouLkɊE-bJV>-hr.K9bƣkhgr!*OږEk-Qpm].>A[Ƈ^|Tr%gCy˘Y7{3osx.P]<2"H^k";_o><"n-4upC8"?-6 l8Eӆ Mn *&UhS:WJ+Q)'Ij86 +sEن﹣bY&nszȺlv8$X _zHނH:*lT TB +ha">Wb" ;R7lĚ1}f@4ʮ8+mδ`Gs`GI`{90H/\B&L #讀0j: +pUdwhq |lS5,QfJIYCՌ` ^*6;:*!G "q>ۓ"Ha1144FP73>F!P5*՚WI[;ڿV+z7x,U\ZAjQEƀs &4[(H^P&&zl4$xYvLD|,DvADko&na븵Q"y''ͫjCI?*2xc'xCB}R&z/aLjq{V88mu$@B.)o7f0æoѵzО遽hЀS STtfdk63د 7N: q'kc%_D+cTTyJ*Bj:!BMJsFSY:0Bq8%zȱ~;nZ?J6u? Cj1`fhkSc ">5D Ӕq0?K^M7h|iߊ}r0EṂJ^"( +endstream endobj 14 0 obj <>stream +QdؗCw\^›_%Y$,4N> my?>4(vΡihtH +yɘ)I UJ.{q7z^V.LI +Q[ +?c bb l&/QU6E"^^k^wzIȴ1[4}`[:jܑ8,,aYpд0ebT})1q.InV_GvNbuaH0 ["_ﯨJ]޲H4'}TedL  +]8tOTȀH$9EFzFx::wR"|EL4+*b uVen+ÐlY&>TFcrC'fɿQU^?IBN~xcڳ}rq6q|)U$oE#=cH_O7BL u tuLSvG,lV!KOVrUK +yiS:6Q3=YҖ<4`/9Bx/)t 2 0KsWk/s, zQ`:d~-45VM!$Սf1S D$Iy .̅]s0XF%N 2pԫZ P,VL2K8 q1QE &-KW%FӻO}00;Tv? xh E@ -Z>eQMS2@(Vs]/dNASsNr-dHp_09!?Li@Q$p d =Ik q|^UAHl:LXfttD*4'ݠ& bxJX c6Xh=jdU?=6 $a`v5n V<6Hقc f)vlyocj Wa*[24M <ıt׶AYñc7x>F^:$nJ466 +$YQiRPiJc-:ɣQJՠ)t. @UgTvEBEZNӡπ$oiޅ>,OPwB "̀'j Lw4S' 6P4΢h0 :Xp#̸ +,@np, p8z@N7 L$8 $0iP"y֙s)O E1;d7:ozQBʺ/x?a4gjH&_%D1Ԁ$Rg&>Sq +e^Y"hr.&t,qDU=L3(ߎƘhߦ\mc0-KӘiŠx^䓬"FV#G&@5ClXhY@W/RdL@պ]efֵ01sC3$2)^ vaC:=`b@Z(>Vv! p~ŋ7VēQ! ]30{q# .h7ˡDK%7D\rX1YibnYYMhU j88^ L ZZcU/Z02Q]!9Nw G  T5d:xUJMq /#je@:\ySy x6D B_˯;U@v)-xpN +Z](Y'bvEp7 ew~*%9Z<05= >(VM:]g h% BUN&AvGcpXSeԗ|Y>׫Hrx{zr_S-g5ČWT {8;A c:p̀4ab;;Ucw=߃x2>ZQ#W T[* +`?J ˩Dck5d=N٧ گ:Lcqԗ(`9i KQ8Ak):(MɧG!I#>.9+)25h83N;o@qr,*yѩ}I`|7 D!I=i}GG ĊZ«ņUlTR &!b / ,½ 3f Ly9ej’%l},j!J +4V‚90-njX!Q Sg(+7P./Ʈs#6DC[o@T:k>;!@\W'9?F +ݴ%"e=%9 D`J% С Z '?wJ +JUha9(* ;yx5btf :@HQf>&Ũa4)K9eiϓ(E)7nˊmkϷXa)#_߇W!b1U^ZAnV_LtjEd:WH8ǟKze1()Q3~0Xo$1"Aشgܗq݌Oɋ'VJ  %HvI_\o*ZvHEe>Tho!i=D^]J[IKܪ%@G?°B"!Ȣ o*N)cbS@O:bD- uOhQ`w4~eh;zxI@#0+bb? +G,.Xi%52+D/n ÷/4*=Q杂 :JbB`E_5Qv__6I M Zo~>޳iAwz !.gb(-]/C׽oW`Z ŚAh?~4D6u+nL+2W*I Xrn.x44+$ ^-x@U,9Lr[30)vm4|A7Jq[O< #ň̀қM EObkOO.Y63Yn9;"wQ e 4w~fS |VL)H@dOT.lN. + tCҔ|@*``o-B_yBMb {/y8 7>n*, QL#Xy4SB+\$ EȐ 1$g׃sg%iîD$pE- *sL4(%# QpcJ8uK͜t+7e 7{#>^/"''~gƕpE4$bK#k}oH[L`Ĭsiк1Y=d!L|ʞ,@\z>:dA{U2 mX`O^;^ ,mX S?7Y`tFul nX@gxNW4gmo-(C-H < DQR+ʄq t0'1 kK-@LN0X$לULedRrPh>*ƭdYDM8BˊfagUͩ@BZp8-1r d)& Ib # PYdPc ;,`@ Pp^ mO42i +[=T3++vMlǪV_'Uy:?7>Z_#ZdܔȴRmO;bNtƒ+x|"xʁ@} ~ x)Hc%%6iߩ* d-ZO&T767 !,T XDXUYRQn, )V:CNmrǬm,йWw"*c `{o>[*b?Ԃ#c*0T` 삂W`[6\ +NUnle+d5B'mK$nbC Ʈ/mbwqBTղtEF1@+߿oX|Xeh@xUJ(KJ}HdӄCl#V$uFHbr ,+tjm)2dg C65}ËQuLœpHcƌ&J(t2`Y։{TG#{BTYŃL +!֙%m:d$ *A"OǒRTN퐴\ĉ=f k, ;wq-40owGM3U(cQ*N@,  Ѐlޡ)k[U_6h!h%85"T:,5 Q Q 5 +Yu$vU5g7DPbyeS9޾sA$XE>"l6CL28rB$rY +I:I\5U  +EWu gqbaQ7}9- ZCѰ6D<N#ypDZ/trT8art&Ž{T7aOB&%^>YLGĉFɁFDv`f}UbA]* mS849YWtœ B"3N=jM(.z>*A8lv`ND-q +kM>3@XtWc ]uV U<( g@+%9+B# j'P%*Z^ N&2+]| HKy2fjvD`.:J>wH9 E(H%b"%ăͤ)W<Q)Lq|͜(@&nH|N}b:H‹ uڞxCVӕdKE +PCg&H%OJ}- +5< * +>XU& 9eu!~ 5c=\5a#)q +> MV?ŷ!;}*QH*/ +Axy!^> ;`Pgh,Z}cދGs2g i.e,.ˁ:7U'aY ;"gBTTm&i*ьvWyeDQKȈ!:ĈSNPє|f{ n$YfCL2ʟs4F]؂CS$1D'Y.BhV4U|DD$(: ϰxWQ_ "_cPZp@h !`@E|h 84 +f@( R3m%0{E>L/1K<z)FAEIVE#+qDE|yq>|3`8JL3 #Kh&%"ͿZp<x=d|e"(1Pbg8$~x(m'+kL8 2QL P 73fb'>4b7#9MjYPQ-6抻čfh9_84KL`GEWQX[T"61MGx +QN+ )kEg\25>DB<K 9jɕ)RɈ|*Ԃ( Zd30 $(:$shFl->H06"Cb +m(cP)e 0yG\!_w37Wr2 =ݟ %jtn1'+-6nغgėn '@lDƛ~LQ`KLNA$;@HT n{Fm<$:I/rFC=l=Y=FZEҾrM$Ь2$hA\'= _ZAF\ HR>\L74gOYU ζ,$#Q_ç? {hZF#Y5Vzh?EwLu'~$c<IAMg j1G+HL]ǻ+It`DD|D$LEЖ0CIՇ++ J;U1z$@zB<}Q󂦒F!Ly?y?ٯRie~S`=;BfX#y?><~8P XKe~.Ke#]*W9p4mr0JwB |I/AF 0p,nhRVX}QLK.u;x2یj!Xtm! "g2Ļh,HK ¬u0H"W&QDY'H8рNH>hM{@#%֌A\vN[cN):nO5S^ SA6řcݪߘ l`G܁ZC!qML3pBvdSm1pvoc!VATDXMFk"e1} >0Et{؁QbN+'dD2}O^>~ZkSVR MdT-i" Q7(ΛJPfy \/yFEWHژy@gn50Ǹ.txJ@ +\~h \ەä(f~?y$w܁y4Ķ}!xX"F% ~jY)%Í8fa䗴sڝd  +^y*4;PsdD +;uHEІcup\yEq`.1(&3? 2غxMG 47t jUzC : O*?.d$/h_ j`?mnb7@B́ofBL1c| dg|sP-n0Rrt̐76 (r ts9Gm8:1I4${dc?:.#18&o٘I@MɁMʁ4/Y2n*")2NMq;ǁL%VQt184'E +@ +02xocCBˆYwCMTNRV~Q@Lgf47l9(ld#v}8{t1kpU6cN-Q@MŰU!dG00"j[u!4"B@hŒ/zÁ SDb:) ܟ'`z+YfV +s +rby8=g8aZe\ +1jJ ^{]@Z6{쏜~"$gvbWD"o7@Z")`sX'm00di7vtV͹,gUy2\XfPxSHi-i|(Ia-`i5%Ɨ^͘$m5 (dBf"\s+eFĴ ?>PVO/ dV$dd#e@BPu GH`" @y +%<+J.ESh]3Șeϒ^/Vf3 +>zUt=!) q2ŘNKC c + +0QپuHbiuL1N/PXΣSLAKYFO0GiOݱx8J ZUHf'qbp`cQB,ek(e>\TZՠ?ϒ+fvPpt޴A0)XRZ3𴳯ZB_B;Mi") +Zĉ;OQ)DƜMg3WՀEOhMU±VP +&12c02m˖ C֪]O]50syGTS:Qk. @B}2GD(3oh')(#fON-C(O{~4E<<G\:aI俠~V1dς*#`>2 .ܬ0% +/$4.>ïq| OœEo'V@Us{LOB|.|1Bs:]jB + 5'P$Ο(Y seov`ZD&CJ OCw?nSjmWG@ Ptn(Q`>>LZ$HXpCu.\Hq_-ۘD<+C=M$:qQ/m f\Diu@x$ڦ,ЅRqπ=[\CuS`}"5j>| cpTBmÕ.KD\uPrNQHC`l)\5GH͕]3sa"β4aMݜHRJ'H}CƑ`%}L2[09_g>b6U4`{b 2Ԉ`9f<}r7p:q,! Ō/[{s&+w',#bؖ{rU{/Fu~Z^<8Ni`a +zVGoWNM7A%F @@/HE$·3JʏI^]A<P7 ?euH{k Mj +,!FNL]ƒ`R0vȷxo&=-cq&q_\ Crcz=el24-Vc2HM0iDKԞt*,JpyLe&^J/,r ^) s8aX͈yW(~rN/ 2Ag-P`X<}zXzXOG7؇i'JWcr@qM"x*ԣk]*,N4<ƇcڼHām*qp+lN8- &ZY2J&s.B^jl{ c>r}(6O]T;U>xЩ "DB{;Ry*-5Ssʱb04w9#ul054׉P,x閧$)#"Eq/! HƃlJd<ڔ_n4~2fA74&: +6kjvf XD{HY$BgR-/VaE& +](+kx".wEWF\^z,C@ŘT۪D 7Ev;gP1Yuݖw =5U/-rḥf!-OBPηt#NȦLw9,2< J +5Ox2L`&uQ@Eڐ-hV//Ebm Wc\A!F&aB\ %-)r@ +endstream endobj 107 0 obj <>/ExtGState<>>>/Subtype/Form>>stream /CS0 CS 0.725 0.725 0.725 SCN 0.106 w 10 M 0 j 0 J []0 d /Perceptual ri @@ -588,7 +625,7 @@ h S Q -endstream endobj 109 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +endstream endobj 108 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream q 64 107.549 m 40.102 107.549 20.659 88.013 20.659 64 c @@ -609,13 +646,14 @@ q BX /Sh0 sh EX Q Q -endstream endobj 105 0 obj <>stream -HMA?i$fB^֛Wgzl}ͭ>K`w]z΃Zv-m} K;^dwzZ_jOw:?c=O/X,%?%f};A֗i+)ǿXPz@''< yS@'< Ou -@: OyS@'<) Oy -@': NyS@P<) Ou -S@:) OuS@P':)NuS@P:) Ou -@P:)Nu -S@P:)Nu +endstream endobj 104 0 obj <>stream +H FA6,cwF*|נM?p+g\kztaLﺘ6=碦o;K>} n`wLo#_3f|`[jGMﴵs0=< '4G`zhz3=H?iLO5}g(8  y@y@'< Oy@P< Oy +@': Ny@:)NyS@':)Nu +@P< Ny +@P':)NuS@P':)Nu +@P:) Ou +S@P<)Nu +S@P:)Nu S@P:)Nu S@P:)Nu S@P:)Nu @@ -631,7 +669,6 @@ H S@P:)Nu S@P:)Nu S@P:)Nu -S@P:}p j@EAg!LԚ9U+hO~oLP:)Nu S@P:)Nu S@P:)Nu S@P:)Nu @@ -645,13 +682,15 @@ H S@P:)Nu S@P:)Nu S@P:)Nu -S@P:}Wv:)Nu -S@ @ Mu -S@@[S@PؘP:=hؕPP'PP' n @Q@H`3 -{ Ľ66r؄(@;x'l$Ľ(@+;",$ - -@: $# @98 ,$PRN@+9% ,$" @K83,$p' ;= Hή@u=]n$p;W > D5psH&50nz_6=o_GDM/7?r闤LdL4L~֦}5_Q4LmdzMn #i}_\pGz;S1=Թ{s\f74=ɘ~?PpH~ -endstream endobj 84 0 obj [/Indexed 41 0 R 1 116 0 R] endobj 115 0 obj <>/Filter/FlateDecode/Height 502/Intent/Perceptual/Length 10070/Name/X/Subtype/Image/Type/XObject/Width 514>>stream +S@P:)Nu +S@P:)$;)Nu +S@i +H`o +S@@ؚPP:) G P:=6:=:=6:=Yvl +؍@Q@ H`'( $Ľ&PF;(`o ( $<Ľw@X(`a TVuT +XaH`M %tl +XH`9 rBX)H`!' Uq^X™(` ;9 H.(@wvEkm]$pC ۹: HV&}ۘ @0qkz^!lM5}(W{LӓLY22 /:~mmLg0=ՖO}\%ӣmdM/4=;˚>H[gSL5Msoh1(GpH~ +endstream endobj 83 0 obj [/Indexed 41 0 R 1 115 0 R] endobj 114 0 obj <>/Filter/FlateDecode/Height 502/Intent/Perceptual/Length 9936/Name/X/Subtype/Image/Type/XObject/Width 514>>stream H엉BIguhPi]uuvv_g3ϣئj2ޠ2ߊƥ4PuyہRfWunkFvnF)j4\ݦz6opUҵ$Ly{4}f#y 6?Oۘn;o|[@|}4/PPpa3cp!G?j" B <gu[/O8ғUǁP E d~c~<T(B3P?Y}A8 A@^gyV3?8` "nI;~}Yi` - $~|Y(Zj ` Xr Q>y/s,V%jAh  @@ -678,47 +717,111 @@ DV |f: X1aɎW@֠N !?%3; pF2ƠA"Nnr;_(E@NH<"/g`T5S@{a@61u`G@`T!==B`BK ]z ;@;#`OB;X^M3;; u)q C NAŕ6]8뀺k !{\Yw^KPfNt ! #(5P[M{B\"! vD0(PP|1@[0ށ(MI|1&%@OG\Y]"f  @: ~j ;pO(0vN}ox܎"ez <w_A p G/:1^1`/A逺_hڕ{;Cx=V@1ʆ/ <@nF TG'P"`\BlfG5CSp R|N#itKӣ}ނH|R ܁G1>GI|B؂UI #;~^,0~!pYBڂ@%;p5) tz5r@GJ@w%Ƭ(h Vpw%%;P#0^yTBπG8K )%[Pj@9W7' s p Qv`= Sϥ<~@? ++S~FnASt lS s2fn6 i) P8:7" /<螜K7i`g܂eU8?; PJ`Ԁ}j V΀_qj xp -CقfS?!N^<~}Q !\ ^p`L =6-(<پ 8{#>?3}^@􇀙_>ϼf -f 3 Ap/13)XJLɗNAOxx -`L {8,5 xS^ٶSp\@p -Lħ7=yn VF@|줆 3Y{27Vcw NE;C} 7?h -^!pMj106 |?8<9K>p -&+04)Cn{2cQ9>Scp.>[1B3$.cp:_SE1pM9z\`[.F]s | s1,% A_@1)`l <K #SVYZF_(`"`Nͭrmgw}xQ NA+G/`sm%%+c0^ڪ{ǧI)q {͝j -X0B%ݝZyks=:aph<' ӹL@n?KDg"` -81;.p{{*`)" _,<-pyn$o˫J2/OOFUZ_f%`mvl3HV^.m CzP!@=CzP!@=CzP!@=CzP!@=CzP!@=CzP!@=CzP!@=CzP!@=CzP!@=CzP!@=CzP!@=CzP!@=CzP!@=CzP!@=ް엇Z"IguGG QrN&:[Qt?Cy"}/Vjv?x?>$b?>Fx߻r1wJ"gB;[k?WWWV$H(H Ѓ@=H Ѓ@=H Ѓ@=H Ѓ@=H Ѓ@=H Ѓ@=H Ѓ@=H Ѓ@=H Ѓ@=H Ѓ@=H Ѓ@=H Ѓ@=H Ѓ@=H Ѓ@=H Ѓ@=H Ѓ@=H Ѓ@=H Ѓ@=H Ѓ@=H Ѓ@=H Ѓ@=H Ѓ@=H Ѓ@=H Ѓ@=H Ѓ@=H Ѓ@=H,X"u+k $ŋNQ-rT<89W7=${ăN. B -jAM,{חfZ*d3xp藀' pIxx KC+#$/(n($`Q  m `;Mu4B0DF;'?XE'P)i,kDLP :HE@[p# ؜r8NNd:/UMBA 趛J1NX*?,v]7$`Q" \u I@&`e - -N$O !g>>:K' +5F@,;j - /F@Q+sD' %e 1"EX5ݫB$ XV4TtZjˤ# 55IZI@,)Ow=2[uI@8gLP -(8>%P*d3x4|FEp/-X' SJz wIfRgh4 ~d&K hb  LJnY1H }y -o9AH2" "F_:JF3`sp8 -b Vc`X.?5b - @.XBt P"ijSY_W ҀpDg=|@EVA!#ejS`M/NCdDXlƶ: Ep:lQ<`**HE`xk@j)SOOT@ E]L\$U0W"нXn`DRD  (H 89:1jo28tDDD`ѱNقRDT>4TAG±x2-h{k`iq-^MZDΉ̬^"@k =O{PՀtAD`QQKlAFȹe ,<4-8h8{P=b26<)-H5 i4"@k@@te9!@RfՀOj:{Z "<pM<^K@Հu=(k@~^_h5Kg!_t k #,& =\&@, -< XP0P'dI%Q{ѸxI'@x`:AJc J-LlЎ" '`(NP'`-8̗h[GMD`q:ujeθ.k`(k`9cjC\&8pk@`<5`=N@\_huh#y2+x~T'O0#2ط{O x&'眀,91v<%N@UX;l -*\.h:D=z:c%zP 5rD SPzXG@$92?R@%950:G` =@U`ORX$`ƖaE^ /:@-450 AM=%<@N@c^G@I*%vHh*!&J%OAP'@sAu T=T@ D x $OqP2􀘄9*z8lr<ήXa&l6(2/]P puY{!r68## -pt]DOxyHt T<^G@ARlbj 6`w>Ly== lP 7lk -`@-P>p!@sT47z@x*z@ 7Ȁx %. ;i`p'@KL^ dl0@1pv~-}TPx"@u!2#PI 8apx -Ax'! |%{ /f~LIؠ&{?w@O: 0[; -AI30LKI  $z!{A h >|yX0B #hU7` >95Unp~{@ ߄vxH(W\_]vFbfytIll\KT.0 @ Tyw?;|2hY܁< _,WjRU 4 Wxמ_{(%6C0@mnBl'iy82 0)Aw?kꀕR!<: EO3"@ @*2ҩ @pķi/:T -̤^mV'!'R* &Q @bǏ -J"<A#prz$M@6A@``* 'nED&c`! VH@K PPHܪ5ӳGvgw nuR .kl܀CXCk(6j [AHLg~]_p  -p PQ } -M+| MU@="n{Dh3:2o -l}Fl] -=Z_<VE@ iDh1~8 v¯{X`h|RmA5ރ| **I =H*4?`/+n/ FM׀} -޾98E "d240Gߤg;,7K  -1`@5{@E%Ѐ e>./)5}gm^*lw-)9AnՀ} -1fPɆF {O?`_{` خ -<oDp|vPQR8MOWA@@ (T:Gw/?}'o -PU-k>s::I` Z`PP%f8$G{ٷ?؅#kzdx -y@(,'8odO-?%7)msҁ(]hl=OV 2O -V 7 X@ ݆f3'zc7<Dk`ʁ ,p @<4/$Ie$@Mm -D h4A2xA??T5 s@E lhLJG|G_(6P VA逊%q`02~y_D @T -2X.A<0F|; ~^Ts 0T $@т[z̄Wat{}~o\@́r QoX`*0/[I'}~u{#t x{%]@ `&< üXN*ql7~AJ|yF|N 7~2aKO8e&Ѕ,-5嘜Gp>yS `@C9 .\ ݆S_7%^t /$@6O;?_"؁Jn4]\rI5<>_gp$ {.(|o>/#d@sgb/owX@ *9_Njz{!L:PW!륧WGL90 X5ʗm% E`~!GjD ԀD?O?3p I, uOQ p:i ;LI \(Bi}?KPZp2eB3A ??`JM`A.„`X+?ZiPsǐΧj‚ 8d5DFL?:}ʌ$BsĶm(l̍gg0s#-s̙{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzZ -endstream endobj 41 0 obj [/ICCBased 117 0 R] endobj 116 0 obj <>stream +CقfS?!N^<~}Q>'$$4ӛqwľ4Hw쵾K>foK@/%@h5jek)xr7 9CP1O? k +&)1T)B3) d=|C`.32&)Poon3]=c@ +Mu +T{R@ LA(CAvvǠq +|`wy <)h綀Y<39u +h} +:{ + +oCA%`01 AkP@y:sk +2wXBJ@cpe x +AGڄֵq +#D*/Vj{ +Xlr +Je#1ƒlT5׷8vV.2R@xB!RgR+s)8>( >!'۳ S{}YG +XEpp#< ot~;(L mo"`gW ptn/^hN""OR(`5 x~Jl*JpJ +jCiN\PB6S? +@У(= +@У(= +@У(= +@У(= +@У(= +@У(= +@У(= +@У(= +@У(= +@У(= +@У(= +@У(= +@У(= +@У(= +@У(= +@У(= +@У(= +@У(= +@У(= +@У(= +@У(= +@У(= +@У(= +@У(= +@У(= +@У(= +@У(= +@У(= +@У(= +@У(= +@У(= +@У(= +@У(= +@У(= +@У(= +@У(= +@У(= +@У(= +@У(= +@У(= +@У(= +@У(= +@У(= +@У(= +@У(= +@У(= +@У(= +@У(= +@У(= +@У(= +@У(= +@У(= +@У(= +@У(= +@У(= +@od:[(UB n+|6Oə+ٹhv" d %S|Ro)`e xzyn*|&EYl[†k!ۣs)w^LJ3 ؐ_%~Q@9Cx{iյ /Hϯ])oNfg _srU zt)u_fZ*dxc@)d:[(Uͭ2#ݬWJl*^)[ WET h-#^͚ [K[c L])PgRX$|&`h{e:ۖp4&+&U+@׭F\e#D*#4ZJ} P@p)) tZ`BmS99 ( {-%@c=6)!=1[ ,?cpR_־c`w<NzSs +} + @1 9!n4k + Xv x!xS`r=>83q +PژE0z + ,O|<3` {j +F)(π!8))(@C` Pf5#`$ 4|X2Jz7d3 g'o?w@^ o  ~bd 0Sh,{@C 3x0l@8r܃o@oAXV foL'==!@'nnig!@PCo@>o-ӧg?q  D do)7-Dv't~΀5P~7ق$g;V/3`}6ԿlA.ei>o=OY@ںnix~7@jnA {X'07'S|g `Iyjޟ@H‘Ѩ'ށWqOV lk7`<JOXL| [0W@ҏ ,20TK;pK[ Z[0[si>o!`=T2/W[0? #̴w :@yws >;O@zSف ݃]ӧ xOdUO8x@< ,,yV I l?=j zCKP={'@'0@y y g`U' #|)w|~(G@AR!0t@R<? 8=Ŝ|{[pg $9g 9ߵ%?0ƠyBPO 1=,G@ !`Q=?`LX@^w@U_?˅/#BBH|" +DđD eYIztW;1;;37>>uj\`kI {@8*cU-/;X !`zRL@eP7uG/\*`mP@e`44v]woS#!-u{@F +TFQ K@o0bBAVrM0 +3o-!eP h"Pt*@ +Z/a$5pp!/Bz*Pvmd5pdZOyAD20 /\}2%wE@ *"{ uWxt!NAϕ HJ1bU@ǫ6*_#Kc {eP'al TK,JXI=-_ \Y D**o@`%P0XB@TiF 8*1-x|H @i(t*p @`CP).m#zJ l)c +툀\o]c 0Pbzo' #gɔVnv<Oޞ_X*@?a(?J`p Mh9\ *06 +~go^ -p; %U>rN^IpaU b^䏆rrx@;[`G@"8{p(}6Ac C` +>Wα_` g(%RxU0Aoog +@W`Z`7m +r@1H |C +6KL. m 2Mpe`07O7%B``8% +ģI2@c@W3@}!P +'ݹ)@#6BM@1@mPA(G-8@6U͇ZCX[G2c@V0 A 9(L:</o@;0郴 8 Q Fp 8z"#?S$xhLu &U9 A ` +s$Z<c}؏F@'5 l6JC; `}78  (,`" =  |v_~? V0YZnԁȀ@ ` ( = 7 {CRp@b^@(0 A-j>p`U7("eB: +=f A@ P@0BET>$.ޓW2 A8 +Kp hp ,4~qT'?gaNn[Hp &Aadl<، +`GV@;&0vcZ1 H8Sz#'a>7@:`7K(@`T8kv|uo? (! VA@)@0 0K26X͇>@] @@@(@`XE60 |H6e`*H PCp\Gx# PϘ@$$0yqT \̇5C3%U "0F'} 19@}@CYHr Gxl8O֓H~7y  €8®<^zD?@r  :(` 'tLOmӟd |/  % Ib{2?/?h 0>"FAyy W~ +7 |2 P +pEV2 |꾳_@TfA( 04pqTOF+'}j}jgA ( ) ~O}3Ȁ BAk2=0_VAQJǕ'Pa?p9FA@@7{oσPA1` +=f/YH` x0?9@( ՜(\_c%s_;YmA!h^qޛMh AJaUcoS9_T( ʆ6>rTaPb?J!OZZj@B_I`]7-ZnQVLIm7ީkƩp@JӵcQ~0)6j>{յ=SS=ڒwS +endstream endobj 41 0 obj [/ICCBased 116 0 R] endobj 115 0 obj <>stream -endstream endobj 117 0 obj <>stream +endstream endobj 116 0 obj <>stream HyTSwoɞc [5laQIBHADED2mtFOE.c}08׎8GNg9w߽'0 ֠Jb  2y.-;!KZ ^i"L0- @8(r;q7Ly&Qq4j|9 V)gB0iW8#8wթ8_٥ʨQQj@&A)/g>'Kt;\ ӥ$պFZUn(4T%)뫔0C&Zi8bxEB;Pӓ̹A om?W= @@ -727,8 +830,8 @@ H N')].uJr  wG xR^[oƜchg`>b$*~ :Eb~,m,-ݖ,Y¬*6X[ݱF=3뭷Y~dó ti zf6~`{v.Ng#{}}jc1X6fm;'_9 r:8q:˜O:ϸ8uJqnv=MmR 4 n3ܣkGݯz=[==<=GTB(/S,]6*-W:#7*e^YDY}UjAyT`#D="b{ų+ʯ:!kJ4Gmt}uC%K7YVfFY .=b?SƕƩȺy چ k5%4m7lqlioZlG+Zz͹mzy]?uuw|"űNwW&e֥ﺱ*|j5kyݭǯg^ykEklD_p߶7Dmo꿻1ml{Mś nLl<9O[$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! -zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Km -endstream endobj 112 0 obj <> endobj 114 0 obj <> endobj 118 0 obj <> endobj 119 0 obj <> endobj 113 0 obj <> endobj 120 0 obj <> endobj 121 0 obj <>/Shading<>>>/Subtype/Form>>stream +zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Km +endstream endobj 111 0 obj <> endobj 113 0 obj <> endobj 117 0 obj <> endobj 118 0 obj <> endobj 112 0 obj <> endobj 119 0 obj <> endobj 120 0 obj <>/Shading<>>>/Subtype/Form>>stream q 0 g /Perceptual ri @@ -736,14 +839,14 @@ q 0 -87.0974426 -87.0974426 -0 63.9997368 107.5486832 cm BX /Sh0 sh EX Q -endstream endobj 122 0 obj <> endobj 123 0 obj <> endobj 124 0 obj <> endobj 125 0 obj <> endobj 42 0 obj <> endobj 111 0 obj <> endobj 91 0 obj <> endobj 126 0 obj <> endobj 127 0 obj <> endobj 29 0 obj <> endobj 30 0 obj <> endobj 31 0 obj <> endobj 32 0 obj <> endobj 33 0 obj <> endobj 34 0 obj <> endobj 35 0 obj <> endobj 36 0 obj <> endobj 142 0 obj [/View/Design] endobj 143 0 obj <>>> endobj 140 0 obj [/View/Design] endobj 141 0 obj <>>> endobj 138 0 obj [/View/Design] endobj 139 0 obj <>>> endobj 136 0 obj [/View/Design] endobj 137 0 obj <>>> endobj 134 0 obj [/View/Design] endobj 135 0 obj <>>> endobj 132 0 obj [/View/Design] endobj 133 0 obj <>>> endobj 130 0 obj [/View/Design] endobj 131 0 obj <>>> endobj 128 0 obj [/View/Design] endobj 129 0 obj <>>> endobj 88 0 obj <> endobj 89 0 obj <> endobj 90 0 obj <> endobj 110 0 obj [/ICCBased 117 0 R] endobj 82 0 obj <>stream +endstream endobj 121 0 obj <> endobj 122 0 obj <> endobj 123 0 obj <> endobj 124 0 obj <> endobj 42 0 obj <> endobj 110 0 obj <> endobj 90 0 obj <> endobj 125 0 obj <> endobj 126 0 obj <> endobj 29 0 obj <> endobj 30 0 obj <> endobj 31 0 obj <> endobj 32 0 obj <> endobj 33 0 obj <> endobj 34 0 obj <> endobj 35 0 obj <> endobj 36 0 obj <> endobj 141 0 obj [/View/Design] endobj 142 0 obj <>>> endobj 139 0 obj [/View/Design] endobj 140 0 obj <>>> endobj 137 0 obj [/View/Design] endobj 138 0 obj <>>> endobj 135 0 obj [/View/Design] endobj 136 0 obj <>>> endobj 133 0 obj [/View/Design] endobj 134 0 obj <>>> endobj 131 0 obj [/View/Design] endobj 132 0 obj <>>> endobj 129 0 obj [/View/Design] endobj 130 0 obj <>>> endobj 127 0 obj [/View/Design] endobj 128 0 obj <>>> endobj 87 0 obj <> endobj 88 0 obj <> endobj 89 0 obj <> endobj 109 0 obj [/ICCBased 116 0 R] endobj 81 0 obj <>stream HWn7WV\#@P (EN?d79H뱋WsV>>|¿S۲m(O??_z};}3귯`wFslvb3:2&Q^{*Xi<KINeڱ+|v:?n'ۓX]Rs:c:Me i| ,`:o+w;B셩u;aXxap֍o౮=\-R}cәw_T1&6:ѻ/t`jz{Tfz5Ɖ-Lh4 F2>zUtɱ!kq0"#nHodadV(]6ny3邞 Np), E A+^u)l@@ "%$|i4-ίVVNoQ6ĥ A#uu'xLlmlyNJX^wOa._ƹ6PwOupfÀEAGB}X+&dO>, -`1o6hi1v wrɽtלk/:׳HK{;,қ,dPJRHG@-F3b Rl;:Q$g0xF%3;]Ȋ2(f0$$cзЭrp[>%GXwE=RbhNPh0%ea.fqbzQ#S/g"C_D(f$a>\A@+OЊD Mp` r!R;;al, V9wr(0dpvXp8%5> endobj 93 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +Guwu-į8EH3zL * # /:#mCziLpd2)hzK8I9R}:}:ϿH)VxEϷ4m}`Cn +endstream endobj 82 0 obj <> endobj 92 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream q 64 20.434 m 40.092 20.434 20.642 39.978 20.642 64 c @@ -764,7 +867,7 @@ q BX /Sh0 sh EX Q Q -endstream endobj 94 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +endstream endobj 93 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream q 64 20.434 m 40.092 20.434 20.642 39.978 20.642 64 c @@ -785,7 +888,7 @@ q BX /Sh0 sh EX Q Q -endstream endobj 95 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +endstream endobj 94 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream q 84.937 98.025 m 84.945 97.989 84.951 97.953 84.959 97.917 c @@ -818,7 +921,7 @@ q BX /Sh0 sh EX Q Q -endstream endobj 96 0 obj <>/ExtGState<>>>/Subtype/Form>>stream +endstream endobj 95 0 obj <>/ExtGState<>>>/Subtype/Form>>stream /CS0 cs 0.058 0.058 0.052 scn /Perceptual ri /GS0 gs @@ -854,7 +957,7 @@ q 1 0 0 1 58.6104 96.2867 cm f Q -endstream endobj 97 0 obj <>/ExtGState<>>>/Subtype/Form>>stream +endstream endobj 96 0 obj <>/ExtGState<>>>/Subtype/Form>>stream /CS0 CS 0.058 0.058 0.052 SCN 0.035 w 10 M 0 j 0 J []0 d /Perceptual ri @@ -875,7 +978,7 @@ h S Q -endstream endobj 98 0 obj <>/ExtGState<>>>/Subtype/Form>>stream +endstream endobj 97 0 obj <>/ExtGState<>>>/Subtype/Form>>stream /CS0 CS 0.725 0.725 0.725 SCN 0.106 w 10 M 0 j 0 J []0 d /Perceptual ri @@ -894,7 +997,7 @@ h S Q -endstream endobj 99 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +endstream endobj 98 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream q 64 107.549 m 40.102 107.549 20.659 88.013 20.659 64 c @@ -915,7 +1018,7 @@ q BX /Sh0 sh EX Q Q -endstream endobj 100 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +endstream endobj 99 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream q 64 107.483 m 40.023 107.483 20.517 87.977 20.517 64 c @@ -931,7 +1034,7 @@ q BX /Sh0 sh EX Q Q -endstream endobj 101 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +endstream endobj 100 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream q 64 103.84 m 42.042 103.84 24.177 85.968 24.177 64 c @@ -952,7 +1055,7 @@ q BX /Sh0 sh EX Q Q -endstream endobj 102 0 obj <>/ExtGState<>>>/Subtype/Form>>stream +endstream endobj 101 0 obj <>/ExtGState<>>>/Subtype/Form>>stream /CS0 cs 0.058 0.058 0.052 scn /Perceptual ri /GS0 gs @@ -965,7 +1068,7 @@ q 1 0 0 1 63.9999 103.6069 cm f Q -endstream endobj 103 0 obj <>/ExtGState<>>>/Subtype/Form>>stream +endstream endobj 102 0 obj <>/ExtGState<>>>/Subtype/Form>>stream /CS0 cs 0.058 0.058 0.052 scn /Perceptual ri /GS0 gs @@ -983,7 +1086,7 @@ q 1 0 0 1 63.9999 106.569 cm f Q -endstream endobj 104 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +endstream endobj 103 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream q 64 100.528 m 57.456 100.528 52.133 95.204 52.133 88.661 c @@ -999,7 +1102,7 @@ q BX /Sh0 sh EX Q Q -endstream endobj 167 0 obj <> endobj 168 0 obj <> endobj 169 0 obj <> endobj 170 0 obj <> endobj 166 0 obj <> endobj 165 0 obj <> endobj 162 0 obj <> endobj 164 0 obj <> endobj 171 0 obj <> endobj 172 0 obj <> endobj 173 0 obj <> endobj 174 0 obj <> endobj 163 0 obj <> endobj 175 0 obj <> endobj 176 0 obj <>/Shading<>>>/Subtype/Form>>stream +endstream endobj 166 0 obj <> endobj 167 0 obj <> endobj 168 0 obj <> endobj 169 0 obj <> endobj 165 0 obj <> endobj 164 0 obj <> endobj 161 0 obj <> endobj 163 0 obj <> endobj 170 0 obj <> endobj 171 0 obj <> endobj 172 0 obj <> endobj 173 0 obj <> endobj 162 0 obj <> endobj 174 0 obj <> endobj 175 0 obj <>/Shading<>>>/Subtype/Form>>stream q 0 g /Perceptual ri @@ -1007,7 +1110,7 @@ q 43.5819511 0 0 -43.3738098 63.3764191 64.8112564 cm BX /Sh0 sh EX Q -endstream endobj 177 0 obj <> endobj 178 0 obj <> endobj 179 0 obj <> endobj 180 0 obj <> endobj 181 0 obj <> endobj 182 0 obj <> endobj 159 0 obj <> endobj 161 0 obj <> endobj 183 0 obj <> endobj 184 0 obj <> endobj 160 0 obj <> endobj 185 0 obj <> endobj 186 0 obj <>/Shading<>>>/Subtype/Form>>stream +endstream endobj 176 0 obj <> endobj 177 0 obj <> endobj 178 0 obj <> endobj 179 0 obj <> endobj 180 0 obj <> endobj 181 0 obj <> endobj 158 0 obj <> endobj 160 0 obj <> endobj 182 0 obj <> endobj 183 0 obj <> endobj 159 0 obj <> endobj 184 0 obj <> endobj 185 0 obj <>/Shading<>>>/Subtype/Form>>stream q 0 g /Perceptual ri @@ -1015,7 +1118,7 @@ q 52.3910713 0 0 -52.1408577 61.26651 71.6794434 cm BX /Sh0 sh EX Q -endstream endobj 187 0 obj <> endobj 188 0 obj <> endobj 189 0 obj <> endobj 190 0 obj <> endobj 157 0 obj <> endobj 158 0 obj <> endobj 191 0 obj <> endobj 192 0 obj <>/Shading<>>>/Subtype/Form>>stream +endstream endobj 186 0 obj <> endobj 187 0 obj <> endobj 188 0 obj <> endobj 189 0 obj <> endobj 156 0 obj <> endobj 157 0 obj <> endobj 190 0 obj <> endobj 191 0 obj <>/Shading<>>>/Subtype/Form>>stream q 0 g /Perceptual ri @@ -1023,7 +1126,7 @@ q 0 -87.0974426 -87.0974426 -0 63.9998055 107.5486679 cm BX /Sh0 sh EX Q -endstream endobj 193 0 obj <> endobj 156 0 obj <> endobj 155 0 obj <> endobj 154 0 obj <> endobj 151 0 obj <> endobj 153 0 obj <> endobj 194 0 obj <> endobj 195 0 obj <> endobj 196 0 obj <> endobj 152 0 obj <> endobj 197 0 obj <> endobj 198 0 obj <>/Shading<>>>/Subtype/Form>>stream +endstream endobj 192 0 obj <> endobj 155 0 obj <> endobj 154 0 obj <> endobj 153 0 obj <> endobj 150 0 obj <> endobj 152 0 obj <> endobj 193 0 obj <> endobj 194 0 obj <> endobj 195 0 obj <> endobj 151 0 obj <> endobj 196 0 obj <> endobj 197 0 obj <>/Shading<>>>/Subtype/Form>>stream q 0 g /Perceptual ri @@ -1031,7 +1134,7 @@ q 23.1531162 0 0 -38.4417267 63.9400253 81.7712097 cm BX /Sh0 sh EX Q -endstream endobj 199 0 obj <> endobj 200 0 obj <> endobj 201 0 obj <> endobj 202 0 obj <> endobj 148 0 obj <> endobj 150 0 obj <> endobj 203 0 obj <> endobj 204 0 obj <> endobj 149 0 obj <> endobj 205 0 obj <> endobj 206 0 obj <>/Shading<>>>/Subtype/Form>>stream +endstream endobj 198 0 obj <> endobj 199 0 obj <> endobj 200 0 obj <> endobj 201 0 obj <> endobj 147 0 obj <> endobj 149 0 obj <> endobj 202 0 obj <> endobj 203 0 obj <> endobj 148 0 obj <> endobj 204 0 obj <> endobj 205 0 obj <>/Shading<>>>/Subtype/Form>>stream q 0 g /Perceptual ri @@ -1039,7 +1142,7 @@ q 0 -58.6434212 -58.6434212 -0 63.9998055 76.269043 cm BX /Sh0 sh EX Q -endstream endobj 207 0 obj <> endobj 208 0 obj <> endobj 209 0 obj <> endobj 145 0 obj <> endobj 147 0 obj <> endobj 210 0 obj <> endobj 211 0 obj <> endobj 212 0 obj <> endobj 146 0 obj <> endobj 213 0 obj <> endobj 214 0 obj <>/Shading<>>>/Subtype/Form>>stream +endstream endobj 206 0 obj <> endobj 207 0 obj <> endobj 208 0 obj <> endobj 144 0 obj <> endobj 146 0 obj <> endobj 209 0 obj <> endobj 210 0 obj <> endobj 211 0 obj <> endobj 145 0 obj <> endobj 212 0 obj <> endobj 213 0 obj <>/Shading<>>>/Subtype/Form>>stream q 0 g /Perceptual ri @@ -1047,26 +1150,25 @@ q 45.7043571 0 0 -45.7043953 64.1565933 60.7857552 cm BX /Sh0 sh EX Q -endstream endobj 215 0 obj <> endobj 216 0 obj <> endobj 217 0 obj <> endobj 218 0 obj <> endobj 219 0 obj <> endobj 49 0 obj <> endobj 50 0 obj <> endobj 92 0 obj <> endobj 222 0 obj <> endobj 223 0 obj <> endobj 224 0 obj <> endobj 221 0 obj <> endobj 225 0 obj <> endobj 220 0 obj <> endobj 226 0 obj <> endobj 85 0 obj <> endobj 86 0 obj <> endobj 46 0 obj <> endobj 47 0 obj <> endobj 48 0 obj <> endobj 87 0 obj <> endobj 43 0 obj <> endobj 44 0 obj <> endobj 45 0 obj <> endobj 144 0 obj [/ICCBased 117 0 R] endobj 80 0 obj <>stream +endstream endobj 214 0 obj <> endobj 215 0 obj <> endobj 216 0 obj <> endobj 217 0 obj <> endobj 218 0 obj <> endobj 49 0 obj <> endobj 50 0 obj <> endobj 91 0 obj <> endobj 221 0 obj <> endobj 222 0 obj <> endobj 223 0 obj <> endobj 220 0 obj <> endobj 224 0 obj <> endobj 219 0 obj <> endobj 225 0 obj <> endobj 84 0 obj <> endobj 85 0 obj <> endobj 46 0 obj <> endobj 47 0 obj <> endobj 48 0 obj <> endobj 86 0 obj <> endobj 43 0 obj <> endobj 44 0 obj <> endobj 45 0 obj <> endobj 143 0 obj [/ICCBased 116 0 R] endobj 79 0 obj <>stream HlUn1 +Ckݢ z M580C@F#D/t Xi׺>`-/nt-:^~ h|k*zaui -endstream endobj 81 0 obj <> endobj 227 0 obj [/ICCBased 117 0 R] endobj 78 0 obj <>stream -HdTˎ0 +fDJkӢE ݤv90hCه/G:<#}xᝒ{JNHmM}9=;"g +g>?xs8|sx#G2$5tka?egq'/fR*5\Z&N(31@$euD5vqndpLF-}%N SUR1BIXKzBf*rfJ{QTJ^б}@f>{mԼi &~.V8Rs>S )F EWk5dq Ҽc8`- yQ_7]yoi͡Y!(s58&v_8v237ujcMiv i(dU&:;^(ߘ"hJ #\ \p_m3㱻gx>,[S) j= -endstream endobj 79 0 obj <> endobj 228 0 obj [/ICCBased 117 0 R] endobj 76 0 obj <>stream +*7L'HՏ8pA2?c5w"NVF#D/t Xi׺>`-/nt-:^~ h|k*zaui +endstream endobj 80 0 obj <> endobj 226 0 obj [/ICCBased 116 0 R] endobj 77 0 obj <>stream +HdTˎ0 +fDJkӢE ݤv90hCه/G:<#}xᝒ{JNHmM}9=;"g +g>?xs8|sx#G2$5tka?egq'/fR*5\Z&N(31@$euD5vqndpLF-}%N SUR1BIXKzBf*rfJ{QTJ^б}@f>{mԼi &~.V8Rs>S )F EWk5dq Ҽc8`- yQ_7]yoi͡Y!(s58&v_8v237ujcMiv i(dU&:;^(ߘ"hJ #\ \p_m3㱻gx>,[S)  0j= +endstream endobj 78 0 obj <> endobj 227 0 obj [/ICCBased 116 0 R] endobj 75 0 obj <>stream HlVێ6 }WERl>M> {(Yw&CQ巧pÇOaAGRz$#I?^÷5[)+??^r-?52f חi/RM J% t[YuF)+J*\2 b&$,g̤&*-O; \i[v,\O]?/'kk Q܎L!^sXOd$HDwc-ۂ0KmA!~jۄC)2<:$ln2 w%Mn$6l!aۑRX:7V5F\dRGH<S{&E yfp,U ọ0:Fz8"JȶBwW #Men o; (c})*"|۱!P{."ĩW߆L;6EfE Cވ=zAj(HT7uZjzj9&ii.\J@_vBBG2rr7 3x9@ҡVqXt5jOާ>*23Xm< ͈>0eP蜍R0~܍ZTKho={ 3t@'=SsfxL%4>{zL#sPy鵀I)JmжևjLφf#XAJmW{wE@0 LR+\ brG9e '6uÿeBgɇy&E/TN{!fX&pczzhos@fsQd{c#)."LC׶ mήO}("˙Yt˂ji wfm XQUS)#H)ass -H"1DyؚFe8Du Qn%.RـLg?Ο5PnIlj~3JLj-F_Q47.W=~GR9,1 -endstream endobj 77 0 obj <> endobj 229 0 obj [/ICCBased 117 0 R] endobj 74 0 obj <>stream +H"1DyؚFe8Du Qn%.RـLg?Ο5PnIlj~3JLj-F_Q47.W=~GR9, 01 +endstream endobj 76 0 obj <> endobj 228 0 obj [/ICCBased 116 0 R] endobj 73 0 obj <>stream HlTˎ0 +E}mZh=\bE7iCb'E[3cHQhx8DL=T=gj8} 4^(pmT憯O?^ϰuqrXXR YC] 6=~7NB?w"WgܫKܴcո㞖%F7)dP% ((.sIk4K)vyˊl~tcMyܕKH$ڄ!p,[$.RL4*hI7j`+'{qp( %=dYOj{S,*)&ԆN`"DB,@NB#{ ϝ15@[Mj>iD jLucA#V9Nnkm3p}Un5NqZkr'!7&n*Jǀ f36 i栲A{Sp_ֶ61&goQtmL*fS -b' .ꈩMSB{c}Wsr;2 -endstream endobj 75 0 obj <> endobj 230 0 obj [/ICCBased 117 0 R] endobj 59 0 obj <>stream +b' .ꈩMSB{c}Wsr;`2 +endstream endobj 74 0 obj <> endobj 229 0 obj [/ICCBased 116 0 R] endobj 59 0 obj <>stream HWێ7 },.٤}i.Ry-E8i7P 6<Cj|>;Y>|ǡZU| *VŦ{aK&s;|b:.]Xd|i2.%k=9|l\ͽONμZ_ɌndόSx6ջx:@_=E^]8nBxD -9%lYb):)5td%dbLn,کEnWq4EޭSٍkEg<]8դ( W+ Ygb]DQUD?.TX[m%F[<6%.!Ygg<M/*fG bgY6h3ȚM7eR 8ih#oE^gӓaD*yNyM [X땰gL&D +nsR3W PΏjOj1^Qudӛz8$e/!\R`@|[>+@XXzTIlȺYI UP0{6YS*d=WtLSƀMU;GOq/*命Gxp/MV5Q"q(m;VM iH2AIp ZGw]1@ tʮzb]qY\>OnɝYY<(oSeq BkHQ%i p K (V# Z=Ɯgl-HD)Y3X=``^ňAQ`<+0^&Ar>ʄ׆I3GH ʕ"IV16"'hsqU.k"9_&JA6(\;n#o,F+!X$D[D];dlKmWv՟;:#Mя%3_0xMkklprqd' C9 -GɹC OC ~/+YmFn~4|XiI -endstream endobj 60 0 obj <> endobj 52 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +9%lYb):)5td%dbLn,کEnWq4EޭSٍkEg<]8դ( W+ Ygb]DQUD?.TX[m%F[<6%.!Ygg<M/*fG bgY6h3ȚM7eR 8ih#oE^gӓaD*yNyM [X땰gL&D +nsR3W PΏjOj1^Qudӛz8$e/!\R`@|[>+@XXzTIlȺYI UP0{6YS*d=WtLSƀMU;GOq/*命Gxp/MV5Q"q(m;VM iH2AIp ZGw]1@ tʮzb]qY\>OnɝYY<(oSeq BkHQ%i p K (V# Z=Ɯgl-HD)Y3X=``^ňAQ`<+0^&Ar>ʄ׆I3GH ʕ"IV16"'hsqU.k"9_&JA6(\;n#o,F+!X$D[D];dlKmWv՟;:#Mя%3_0xMk')T5"8YR|ΩP?녾U3q/\{Ym2WGc~G>, 0 +endstream endobj 60 0 obj <> endobj 52 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream q 64 124.876 m 30.432 124.876 3.124 97.567 3.124 64 c @@ -1082,7 +1184,7 @@ q BX /Sh0 sh EX Q Q -endstream endobj 53 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +endstream endobj 53 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream q 64 119.776 m 33.258 119.776 8.248 94.755 8.248 64 c @@ -1103,7 +1205,7 @@ q BX /Sh0 sh EX Q Q -endstream endobj 69 0 obj <>/ExtGState<>>>/Subtype/Form>>stream +endstream endobj 68 0 obj <>/ExtGState<>>>/Subtype/Form>>stream /CS0 cs 0.988 0.988 0.988 scn /Perceptual ri /GS0 gs @@ -1119,7 +1221,7 @@ q 1 0 0 1 81.2522 80.7289 cm f Q -endstream endobj 54 0 obj <>/ExtGState<>>>/Subtype/Form>>stream +endstream endobj 54 0 obj <>/ExtGState<>>>/Subtype/Form>>stream /CS0 cs 0.058 0.058 0.052 scn /Perceptual ri /GS0 gs @@ -1132,7 +1234,7 @@ q 1 0 0 1 63.9999 119.4496 cm f Q -endstream endobj 55 0 obj <>/ExtGState<>>>/Subtype/Form>>stream +endstream endobj 55 0 obj <>/ExtGState<>>>/Subtype/Form>>stream /CS0 cs 0.058 0.058 0.052 scn /Perceptual ri /GS0 gs @@ -1150,7 +1252,7 @@ q 1 0 0 1 64 123.5966 cm f Q -endstream endobj 70 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +endstream endobj 69 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream q 64 115.139 m 54.839 115.139 47.386 107.686 47.386 98.525 c @@ -1166,7 +1268,7 @@ q BX /Sh0 sh EX Q Q -endstream endobj 57 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +endstream endobj 57 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream q 93.313 111.636 m 93.323 111.584 93.332 111.534 93.342 111.483 c @@ -1199,7 +1301,7 @@ q BX /Sh0 sh EX Q Q -endstream endobj 58 0 obj <>/ExtGState<>>>/Subtype/Form>>stream +endstream endobj 58 0 obj <>/ExtGState<>>>/Subtype/Form>>stream /CS0 cs 0.058 0.058 0.052 scn /Perceptual ri /GS0 gs @@ -1235,74 +1337,58 @@ q 1 0 0 1 56.4546 109.2014 cm f Q -endstream endobj 71 0 obj <>/ExtGState<>>>/Subtype/Form>>stream -/CS0 cs 0.22 0.22 0.22 scn -/Perceptual ri -/GS0 gs -q 1 0 0 1 92.2746 69.1907 cm -0 0 m --0.002 0 l -h -6.394 -11.422 m -6.394 -6.345 l -6.439 -2.933 3.489 0.029 0.057 -0.003 c --0.037 -0.001 l --1.657 -0.047 -3.3 -0.628 -4.594 -1.595 c --4.936 -1.916 l --5.083 -2.061 -5.162 -2.169 -5.244 -2.274 c --5.365 -2.419 l --5.444 -2.525 -5.565 -2.735 -5.655 -2.887 c --5.983 -3.5 -6.163 -4.2 -6.171 -4.907 c --6.176 -5.032 l --6.176 -11.422 l -h --22.368 -63.529 m --22.837 -63.533 -23.414 -63.476 -23.939 -63.39 c --28.319 -62.725 -31.774 -58.615 -31.703 -54.195 c --31.703 -54.195 -31.703 -22.834 y --31.703 -17.807 -28.323 -13.358 -23.6 -11.852 c --23.6 -6.431 l --23.6 1.937 -18.868 9.656 -11.547 13.232 c --5.654 16.152 1.364 16.917 7.613 14.767 c -8.519 14.454 9.426 14.09 10.288 13.677 c -18.442 9.77 23.692 1.408 23.674 -7.624 c -23.674 -7.624 23.674 -11.854 y -26.69 -12.804 29.348 -15.126 30.685 -18.003 c -31.049 -18.781 31.341 -19.649 31.522 -20.482 c -31.582 -20.764 31.626 -21.036 31.663 -21.31 c -31.748 -21.833 31.771 -22.305 31.777 -22.834 c -31.777 -22.834 31.777 -54.195 y -31.777 -59.342 27.59 -63.529 22.443 -63.529 c -h -f -Q - -endstream endobj 72 0 obj <>/ExtGState<>>>/Subtype/Form>>stream +endstream endobj 70 0 obj <>/ExtGState<>>>/Subtype/Form>>stream /CS0 cs 0.058 0.058 0.052 scn /Perceptual ri /GS0 gs -q 1 0 0 1 118.8371 52.9832 cm +q 1 0 0 1 99.0575 55.0528 cm 0 0 m -0.109 -6.655 0.375 -27.216 -0.111 -34.362 c --0.38 -38.325 -3.337 -41.347 -7.304 -41.555 c --17.684 -42.099 -45.945 -41.765 -54.571 -41.648 c --53.02 -42.963 -51.528 -44.058 -49.121 -44.058 c --4.987 -44.058 l --1.015 -44.058 2.206 -40.838 2.206 -36.865 c -2.206 -5.978 l -2.206 -4.02 1.546 -2.064 0 0 c +0 6.927 l +0 12.935 -6.685 17.671 -13.434 13.549 c +-15.273 12.426 -16.38 10.416 -16.38 8.277 c +-16.38 0 l +h +-30.327 -46.829 m +-34.3 -46.829 -37.52 -43.642 -37.52 -39.71 c +-37.52 -9.144 l +-37.52 -4.572 -34.02 -0.693 -29.54 0 c +-29.54 6.844 l +-29.54 14.176 -25.448 21.012 -18.791 24.23 c +-2.764 31.976 13.02 20.666 13.02 5.68 c +13.02 0 l +17.5 -0.693 21 -4.572 21 -9.144 c +21 -39.71 l +21 -43.642 17.78 -46.829 13.807 -46.829 c +h f Q -endstream endobj 73 0 obj <>/ExtGState<>>>/Subtype/Form>>stream -/CS0 cs 0.22 0.22 0.22 scn +endstream endobj 71 0 obj <>/ExtGState<>>>/Subtype/Form>>stream +/CS0 cs 0.058 0.058 0.052 scn /Perceptual ri /GS0 gs -q 1 0 0 1 70.4654 58.589 cm +q 1 0 0 1 117.837 53.9833 cm +0 0 m +0.109 -6.655 0.375 -26.216 -0.111 -33.362 c +-0.38 -37.325 -3.337 -40.347 -7.304 -40.555 c +-17.684 -41.099 -46.13 -40.765 -54.755 -40.648 c +-53.667 -43.238 -51.107 -45.058 -48.121 -45.058 c +-3.987 -45.058 l +-0.015 -45.058 3.206 -41.838 3.206 -37.865 c +3.206 -6.978 l +3.206 -4.223 1.955 -1.723 0 0 c +f +Q + +endstream endobj 72 0 obj <>/ExtGState<>>>/Subtype/Form>>stream +/CS0 cs 0.058 0.058 0.052 scn +/Perceptual ri +/GS0 gs +q 1 0 0 1 70.5029 58.589 cm 0 0 m 0 -2.344 l -13.198 -2.344 l -13.198 1.093 l +13.16 -2.344 l +13.16 1.093 l h f Q @@ -1316,7 +1402,7 @@ h f Q -endstream endobj 246 0 obj <> endobj 245 0 obj <> endobj 244 0 obj <> endobj 243 0 obj <> endobj 241 0 obj <> endobj 242 0 obj <> endobj 247 0 obj <> endobj 248 0 obj <>/Shading<>>>/Subtype/Form>>stream +endstream endobj 245 0 obj <> endobj 244 0 obj <> endobj 243 0 obj <> endobj 242 0 obj <> endobj 240 0 obj <> endobj 241 0 obj <> endobj 246 0 obj <> endobj 247 0 obj <>/Shading<>>>/Subtype/Form>>stream q 0 g /Perceptual ri @@ -1324,7 +1410,7 @@ q 32.4143639 0 0 -53.8184166 63.9161148 88.879715 cm BX /Sh0 sh EX Q -endstream endobj 249 0 obj <> endobj 239 0 obj <> endobj 240 0 obj <> endobj 250 0 obj <> endobj 251 0 obj <> endobj 238 0 obj <> endobj 237 0 obj <> endobj 236 0 obj <> endobj 234 0 obj <> endobj 235 0 obj <> endobj 252 0 obj <> endobj 253 0 obj <>/Shading<>>>/Subtype/Form>>stream +endstream endobj 248 0 obj <> endobj 238 0 obj <> endobj 239 0 obj <> endobj 249 0 obj <> endobj 250 0 obj <> endobj 237 0 obj <> endobj 236 0 obj <> endobj 235 0 obj <> endobj 233 0 obj <> endobj 234 0 obj <> endobj 251 0 obj <> endobj 252 0 obj <>/Shading<>>>/Subtype/Form>>stream q 0 g /Perceptual ri @@ -1332,7 +1418,7 @@ q 61.0147362 0 0 -60.7233353 63.1270676 65.1357803 cm BX /Sh0 sh EX Q -endstream endobj 254 0 obj <> endobj 232 0 obj <> endobj 233 0 obj <> endobj 255 0 obj <> endobj 256 0 obj <>/Shading<>>>/Subtype/Form>>stream +endstream endobj 253 0 obj <> endobj 231 0 obj <> endobj 232 0 obj <> endobj 254 0 obj <> endobj 255 0 obj <>/Shading<>>>/Subtype/Form>>stream q 0 g /Perceptual ri @@ -1340,10 +1426,10 @@ q 73.347496 0 0 -72.9972 60.1731949 74.751236 cm BX /Sh0 sh EX Q -endstream endobj 257 0 obj <> endobj 65 0 obj <> endobj 66 0 obj <> endobj 67 0 obj <> endobj 68 0 obj <> endobj 261 0 obj <> endobj 262 0 obj <> endobj 260 0 obj <> endobj 263 0 obj <> endobj 259 0 obj <> endobj 258 0 obj <> endobj 264 0 obj <> endobj 61 0 obj <> endobj 62 0 obj <> endobj 63 0 obj <> endobj 64 0 obj <> endobj 231 0 obj [/ICCBased 117 0 R] endobj 39 0 obj <>stream +endstream endobj 256 0 obj <> endobj 64 0 obj <> endobj 65 0 obj <> endobj 66 0 obj <> endobj 67 0 obj <> endobj 260 0 obj <> endobj 261 0 obj <> endobj 259 0 obj <> endobj 262 0 obj <> endobj 258 0 obj <> endobj 257 0 obj <> endobj 263 0 obj <> endobj 61 0 obj <> endobj 62 0 obj <> endobj 63 0 obj <> endobj 230 0 obj [/ICCBased 116 0 R] endobj 39 0 obj <>stream HVn\7 }_0D-qҾ$hh^Q8h )bwxx<˽9|g}Ur*w*VkU6Gb7MpL޶d3ԏ6H2Bwl#LgrY{]̞qQ2Z!|{a? j"fA W.\]YzIbż~;B rΉkNȉd|~2>9]M>^o斞ټ_Ln?3ͪlG O1y'c ʋWyug=+Išr0߻)YN JXs YHjpw{ec4^>5Drch+,;t*.Mď Zp)>( NAꎠ5'xln3:loęr:mn;7wa: -endstream endobj 40 0 obj <> endobj 56 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream +1wq/*Wf>ec4^>5Drch+,;t*.Mď Zp)>( NAꎠ5'xln3:loęr:mn;7wa&: +endstream endobj 40 0 obj <> endobj 56 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream q 64 115.139 m 54.839 115.139 47.386 107.686 47.386 98.525 c @@ -1359,23 +1445,23 @@ q BX /Sh0 sh EX Q Q -endstream endobj 266 0 obj <> endobj 51 0 obj <> endobj 267 0 obj <> endobj 265 0 obj [/ICCBased 117 0 R] endobj 37 0 obj [36 0 R 35 0 R 34 0 R 33 0 R 32 0 R 31 0 R 30 0 R 29 0 R] endobj 268 0 obj <> endobj xref -0 269 +endstream endobj 265 0 obj <> endobj 51 0 obj <> endobj 266 0 obj <> endobj 264 0 obj [/ICCBased 116 0 R] endobj 37 0 obj [36 0 R 35 0 R 34 0 R 33 0 R 32 0 R 31 0 R 30 0 R 29 0 R] endobj 267 0 obj <> endobj xref +0 268 0000000004 65535 f 0000000016 00000 n 0000000245 00000 n -0000023840 00000 n +0000023780 00000 n 0000000000 00000 f -0000023940 00000 n +0000023880 00000 n 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f -0000029615 00000 n +0000029533 00000 n 0000000000 00000 f -0000029688 00000 n -0000029862 00000 n -0000032629 00000 n -0000098218 00000 n +0000029606 00000 n +0000029780 00000 n +0000032496 00000 n +0000098085 00000 n 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f @@ -1384,254 +1470,253 @@ endstream endobj 266 0 obj <> endobj 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f -0000024596 00000 n -0000025365 00000 n -0000025822 00000 n -0000026279 00000 n -0000026736 00000 n -0000027193 00000 n -0000131674 00000 n -0000131761 00000 n -0000131837 00000 n -0000131931 00000 n -0000132018 00000 n -0000132106 00000 n -0000132187 00000 n -0000132264 00000 n -0000174039 00000 n -0000028043 00000 n -0000172126 00000 n -0000173074 00000 n -0000127117 00000 n -0000131150 00000 n -0000154049 00000 n -0000154173 00000 n -0000154296 00000 n -0000153550 00000 n -0000153674 00000 n -0000153799 00000 n -0000152070 00000 n -0000152214 00000 n -0000173729 00000 n -0000159514 00000 n -0000160024 00000 n -0000161250 00000 n -0000161724 00000 n -0000173137 00000 n -0000162881 00000 n -0000163871 00000 n -0000158163 00000 n -0000159451 00000 n -0000171595 00000 n +0000024536 00000 n +0000025293 00000 n +0000025750 00000 n +0000026207 00000 n +0000026664 00000 n +0000027121 00000 n +0000130120 00000 n +0000130207 00000 n +0000130283 00000 n +0000130377 00000 n +0000130464 00000 n +0000130552 00000 n +0000130633 00000 n +0000130710 00000 n 0000171718 00000 n -0000171841 00000 n -0000171966 00000 n -0000170224 00000 n -0000170376 00000 n -0000170528 00000 n -0000170680 00000 n -0000160675 00000 n -0000162353 00000 n -0000165085 00000 n -0000166403 00000 n -0000167007 00000 n -0000157413 00000 n -0000158063 00000 n -0000156155 00000 n -0000157313 00000 n -0000155467 00000 n -0000156055 00000 n -0000154456 00000 n -0000155367 00000 n -0000133664 00000 n -0000134774 00000 n -0000116760 00000 n -0000153310 00000 n -0000153437 00000 n -0000153924 00000 n -0000133278 00000 n -0000133390 00000 n -0000133504 00000 n -0000131327 00000 n -0000152366 00000 n -0000134837 00000 n -0000135537 00000 n -0000136238 00000 n -0000137213 00000 n -0000138418 00000 n -0000139090 00000 n -0000139644 00000 n -0000140348 00000 n -0000140869 00000 n -0000141530 00000 n -0000142003 00000 n -0000142633 00000 n -0000114941 00000 n -0000028645 00000 n -0000029551 00000 n -0000113686 00000 n -0000114241 00000 n -0000133627 00000 n -0000131263 00000 n -0000129868 00000 n -0000130265 00000 n -0000129932 00000 n -0000116804 00000 n -0000127153 00000 n -0000127209 00000 n -0000130077 00000 n -0000130174 00000 n -0000130382 00000 n -0000130437 00000 n -0000130751 00000 n -0000130829 00000 n -0000130978 00000 n -0000131075 00000 n -0000131471 00000 n -0000131568 00000 n -0000133160 00000 n -0000133192 00000 n -0000133042 00000 n -0000133074 00000 n -0000132924 00000 n -0000132956 00000 n -0000132806 00000 n -0000132838 00000 n -0000132688 00000 n -0000132720 00000 n -0000132570 00000 n -0000132602 00000 n -0000132452 00000 n -0000132484 00000 n -0000132334 00000 n -0000132366 00000 n -0000154419 00000 n -0000150478 00000 n -0000151055 00000 n -0000150542 00000 n -0000149274 00000 n -0000149671 00000 n -0000149338 00000 n -0000147790 00000 n -0000148358 00000 n -0000147854 00000 n -0000147726 00000 n -0000147662 00000 n -0000147598 00000 n -0000146970 00000 n -0000147034 00000 n -0000145600 00000 n -0000146059 00000 n -0000145664 00000 n -0000143718 00000 n -0000144484 00000 n -0000143782 00000 n -0000143654 00000 n -0000143590 00000 n -0000143156 00000 n -0000143220 00000 n -0000143373 00000 n -0000143470 00000 n -0000143935 00000 n -0000144106 00000 n -0000144233 00000 n -0000144357 00000 n -0000144601 00000 n -0000144656 00000 n -0000144966 00000 n -0000145044 00000 n -0000145201 00000 n -0000145372 00000 n -0000145447 00000 n -0000145525 00000 n -0000145817 00000 n -0000145938 00000 n -0000146176 00000 n -0000146231 00000 n -0000146539 00000 n -0000146617 00000 n -0000146774 00000 n -0000146895 00000 n -0000147151 00000 n -0000147206 00000 n -0000147520 00000 n -0000148007 00000 n -0000148128 00000 n -0000148237 00000 n -0000148475 00000 n -0000148530 00000 n -0000148840 00000 n -0000148918 00000 n -0000149075 00000 n -0000149196 00000 n -0000149483 00000 n -0000149580 00000 n -0000149788 00000 n -0000149843 00000 n -0000150154 00000 n -0000150232 00000 n -0000150381 00000 n -0000150695 00000 n -0000150843 00000 n -0000150949 00000 n -0000151172 00000 n -0000151227 00000 n -0000151537 00000 n -0000151615 00000 n -0000151772 00000 n -0000151920 00000 n -0000151995 00000 n -0000153089 00000 n -0000152872 00000 n -0000152518 00000 n -0000152639 00000 n -0000152757 00000 n -0000152969 00000 n -0000153186 00000 n -0000155430 00000 n -0000156118 00000 n -0000157376 00000 n -0000158126 00000 n -0000172089 00000 n -0000169605 00000 n -0000169669 00000 n -0000168981 00000 n -0000169045 00000 n -0000168917 00000 n -0000168853 00000 n -0000168789 00000 n -0000168354 00000 n -0000168418 00000 n -0000167731 00000 n -0000167795 00000 n -0000167667 00000 n -0000167603 00000 n -0000167539 00000 n +0000027970 00000 n +0000169814 00000 n +0000170753 00000 n +0000125572 00000 n +0000129596 00000 n +0000152485 00000 n +0000152609 00000 n +0000152732 00000 n +0000151986 00000 n +0000152110 00000 n +0000152235 00000 n +0000150506 00000 n +0000150650 00000 n +0000171408 00000 n +0000157906 00000 n +0000158416 00000 n +0000159642 00000 n +0000160116 00000 n +0000170816 00000 n +0000161273 00000 n +0000162263 00000 n +0000156565 00000 n +0000157843 00000 n +0000169412 00000 n +0000169529 00000 n +0000169654 00000 n +0000168030 00000 n +0000168182 00000 n +0000168334 00000 n +0000168486 00000 n +0000159067 00000 n +0000160745 00000 n +0000163477 00000 n +0000164208 00000 n +0000164812 00000 n +0000155824 00000 n +0000156465 00000 n +0000154573 00000 n +0000155724 00000 n +0000153894 00000 n +0000154473 00000 n +0000152892 00000 n +0000153794 00000 n +0000132110 00000 n +0000133211 00000 n +0000115350 00000 n +0000151746 00000 n +0000151873 00000 n +0000152360 00000 n +0000131724 00000 n +0000131836 00000 n +0000131950 00000 n +0000129773 00000 n +0000150802 00000 n +0000133274 00000 n +0000133974 00000 n +0000134675 00000 n +0000135650 00000 n +0000136855 00000 n +0000137527 00000 n +0000138081 00000 n +0000138785 00000 n +0000139305 00000 n +0000139966 00000 n +0000140439 00000 n +0000141069 00000 n +0000113583 00000 n +0000028572 00000 n +0000029469 00000 n +0000112328 00000 n +0000112883 00000 n +0000132073 00000 n +0000129709 00000 n +0000128314 00000 n +0000128711 00000 n +0000128378 00000 n +0000115394 00000 n +0000125608 00000 n +0000125664 00000 n +0000128523 00000 n +0000128620 00000 n +0000128828 00000 n +0000128883 00000 n +0000129197 00000 n +0000129275 00000 n +0000129424 00000 n +0000129521 00000 n +0000129917 00000 n +0000130014 00000 n +0000131606 00000 n +0000131638 00000 n +0000131488 00000 n +0000131520 00000 n +0000131370 00000 n +0000131402 00000 n +0000131252 00000 n +0000131284 00000 n +0000131134 00000 n +0000131166 00000 n +0000131016 00000 n +0000131048 00000 n +0000130898 00000 n +0000130930 00000 n +0000130780 00000 n +0000130812 00000 n +0000152855 00000 n +0000148914 00000 n +0000149491 00000 n +0000148978 00000 n +0000147710 00000 n +0000148107 00000 n +0000147774 00000 n +0000146226 00000 n +0000146794 00000 n +0000146290 00000 n +0000146162 00000 n +0000146098 00000 n +0000146034 00000 n +0000145406 00000 n +0000145470 00000 n +0000144036 00000 n +0000144495 00000 n +0000144100 00000 n +0000142154 00000 n +0000142920 00000 n +0000142218 00000 n +0000142090 00000 n +0000142026 00000 n +0000141592 00000 n +0000141656 00000 n +0000141809 00000 n +0000141906 00000 n +0000142371 00000 n +0000142542 00000 n +0000142669 00000 n +0000142793 00000 n +0000143037 00000 n +0000143092 00000 n +0000143402 00000 n +0000143480 00000 n +0000143637 00000 n +0000143808 00000 n +0000143883 00000 n +0000143961 00000 n +0000144253 00000 n +0000144374 00000 n +0000144612 00000 n +0000144667 00000 n +0000144975 00000 n +0000145053 00000 n +0000145210 00000 n +0000145331 00000 n +0000145587 00000 n +0000145642 00000 n +0000145956 00000 n +0000146443 00000 n +0000146564 00000 n +0000146673 00000 n +0000146911 00000 n +0000146966 00000 n +0000147276 00000 n +0000147354 00000 n +0000147511 00000 n +0000147632 00000 n +0000147919 00000 n +0000148016 00000 n +0000148224 00000 n +0000148279 00000 n +0000148590 00000 n +0000148668 00000 n +0000148817 00000 n +0000149131 00000 n +0000149279 00000 n +0000149385 00000 n +0000149608 00000 n +0000149663 00000 n +0000149973 00000 n +0000150051 00000 n +0000150208 00000 n +0000150356 00000 n +0000150431 00000 n +0000151525 00000 n +0000151308 00000 n +0000150954 00000 n +0000151075 00000 n +0000151193 00000 n +0000151405 00000 n +0000151622 00000 n +0000153857 00000 n +0000154536 00000 n +0000155787 00000 n +0000156528 00000 n +0000169777 00000 n +0000167411 00000 n 0000167475 00000 n -0000167912 00000 n -0000167967 00000 n -0000168276 00000 n -0000168571 00000 n -0000168668 00000 n -0000169162 00000 n -0000169217 00000 n -0000169527 00000 n -0000169786 00000 n -0000169841 00000 n -0000170146 00000 n -0000171379 00000 n -0000171258 00000 n -0000171040 00000 n -0000170832 00000 n -0000170929 00000 n -0000171137 00000 n -0000171476 00000 n -0000174002 00000 n -0000173665 00000 n -0000173881 00000 n -0000174113 00000 n +0000166787 00000 n +0000166851 00000 n +0000166723 00000 n +0000166659 00000 n +0000166595 00000 n +0000166160 00000 n +0000166224 00000 n +0000165537 00000 n +0000165601 00000 n +0000165473 00000 n +0000165409 00000 n +0000165345 00000 n +0000165281 00000 n +0000165718 00000 n +0000165773 00000 n +0000166082 00000 n +0000166377 00000 n +0000166474 00000 n +0000166968 00000 n +0000167023 00000 n +0000167333 00000 n +0000167592 00000 n +0000167647 00000 n +0000167952 00000 n +0000169194 00000 n +0000169073 00000 n +0000168856 00000 n +0000168638 00000 n +0000168735 00000 n +0000168953 00000 n +0000169291 00000 n +0000171681 00000 n +0000171344 00000 n +0000171560 00000 n +0000171792 00000 n trailer -<]>> +<]>> startxref -174306 +171985 %%EOF diff --git a/share/branding/png/keepassxc-128x128.png b/share/branding/png/keepassxc-128x128.png index 88f358de7..21399a7f5 100644 Binary files a/share/branding/png/keepassxc-128x128.png and b/share/branding/png/keepassxc-128x128.png differ diff --git a/share/branding/png/keepassxc-256x256.png b/share/branding/png/keepassxc-256x256.png index 335639784..ca2deb9b0 100644 Binary files a/share/branding/png/keepassxc-256x256.png and b/share/branding/png/keepassxc-256x256.png differ diff --git a/share/branding/png/keepassxc-512x512.png b/share/branding/png/keepassxc-512x512.png index 4a2d14c95..27238638b 100644 Binary files a/share/branding/png/keepassxc-512x512.png and b/share/branding/png/keepassxc-512x512.png differ diff --git a/share/branding/png/keepassxc-64x64.png b/share/branding/png/keepassxc-64x64.png index bf6fdb81c..ecf3e78d6 100644 Binary files a/share/branding/png/keepassxc-64x64.png and b/share/branding/png/keepassxc-64x64.png differ diff --git a/share/branding/png/keepassxc-locked-128x128.png b/share/branding/png/keepassxc-locked-128x128.png deleted file mode 100644 index 7677d5d9e..000000000 Binary files a/share/branding/png/keepassxc-locked-128x128.png and /dev/null differ diff --git a/share/branding/png/keepassxc-locked-256x256.png b/share/branding/png/keepassxc-locked-256x256.png deleted file mode 100644 index 749bbb186..000000000 Binary files a/share/branding/png/keepassxc-locked-256x256.png and /dev/null differ diff --git a/share/branding/png/keepassxc-locked-512x512.png b/share/branding/png/keepassxc-locked-512x512.png deleted file mode 100644 index 85b75de52..000000000 Binary files a/share/branding/png/keepassxc-locked-512x512.png and /dev/null differ diff --git a/share/branding/png/keepassxc-locked-64x64.png b/share/branding/png/keepassxc-locked-64x64.png deleted file mode 100644 index 2621def2e..000000000 Binary files a/share/branding/png/keepassxc-locked-64x64.png and /dev/null differ diff --git a/share/branding/png/keepassxc-monochrome-dark-128x128.png b/share/branding/png/keepassxc-monochrome-dark-128x128.png index 4e67b878f..2f1512051 100644 Binary files a/share/branding/png/keepassxc-monochrome-dark-128x128.png and b/share/branding/png/keepassxc-monochrome-dark-128x128.png differ diff --git a/share/branding/png/keepassxc-monochrome-dark-256x256.png b/share/branding/png/keepassxc-monochrome-dark-256x256.png index c4a078505..9475751ea 100644 Binary files a/share/branding/png/keepassxc-monochrome-dark-256x256.png and b/share/branding/png/keepassxc-monochrome-dark-256x256.png differ diff --git a/share/branding/png/keepassxc-monochrome-dark-512x512.png b/share/branding/png/keepassxc-monochrome-dark-512x512.png index fea1174ef..0c9b17044 100644 Binary files a/share/branding/png/keepassxc-monochrome-dark-512x512.png and b/share/branding/png/keepassxc-monochrome-dark-512x512.png differ diff --git a/share/branding/png/keepassxc-monochrome-dark-64x64.png b/share/branding/png/keepassxc-monochrome-dark-64x64.png index a723fc647..7807c5ce2 100644 Binary files a/share/branding/png/keepassxc-monochrome-dark-64x64.png and b/share/branding/png/keepassxc-monochrome-dark-64x64.png differ diff --git a/share/branding/png/keepassxc-monochrome-dark-locked-128x128.png b/share/branding/png/keepassxc-monochrome-dark-locked-128x128.png deleted file mode 100644 index c22815b5b..000000000 Binary files a/share/branding/png/keepassxc-monochrome-dark-locked-128x128.png and /dev/null differ diff --git a/share/branding/png/keepassxc-monochrome-dark-locked-256x256.png b/share/branding/png/keepassxc-monochrome-dark-locked-256x256.png deleted file mode 100644 index c4525b651..000000000 Binary files a/share/branding/png/keepassxc-monochrome-dark-locked-256x256.png and /dev/null differ diff --git a/share/branding/png/keepassxc-monochrome-dark-locked-512x512.png b/share/branding/png/keepassxc-monochrome-dark-locked-512x512.png deleted file mode 100644 index 323dbede8..000000000 Binary files a/share/branding/png/keepassxc-monochrome-dark-locked-512x512.png and /dev/null differ diff --git a/share/branding/png/keepassxc-monochrome-dark-locked-64x64.png b/share/branding/png/keepassxc-monochrome-dark-locked-64x64.png deleted file mode 100644 index 04c1246f4..000000000 Binary files a/share/branding/png/keepassxc-monochrome-dark-locked-64x64.png and /dev/null differ diff --git a/share/branding/png/keepassxc-monochrome-light-128x128.png b/share/branding/png/keepassxc-monochrome-light-128x128.png deleted file mode 100644 index c5ac3c42c..000000000 Binary files a/share/branding/png/keepassxc-monochrome-light-128x128.png and /dev/null differ diff --git a/share/branding/png/keepassxc-monochrome-light-256x256.png b/share/branding/png/keepassxc-monochrome-light-256x256.png deleted file mode 100644 index 7140833d7..000000000 Binary files a/share/branding/png/keepassxc-monochrome-light-256x256.png and /dev/null differ diff --git a/share/branding/png/keepassxc-monochrome-light-512x512.png b/share/branding/png/keepassxc-monochrome-light-512x512.png deleted file mode 100644 index 1abc22225..000000000 Binary files a/share/branding/png/keepassxc-monochrome-light-512x512.png and /dev/null differ diff --git a/share/branding/png/keepassxc-monochrome-light-64x64.png b/share/branding/png/keepassxc-monochrome-light-64x64.png deleted file mode 100644 index 9755f0982..000000000 Binary files a/share/branding/png/keepassxc-monochrome-light-64x64.png and /dev/null differ diff --git a/share/branding/png/keepassxc-monochrome-light-locked-128x128.png b/share/branding/png/keepassxc-monochrome-light-locked-128x128.png deleted file mode 100644 index 3ea3e6e04..000000000 Binary files a/share/branding/png/keepassxc-monochrome-light-locked-128x128.png and /dev/null differ diff --git a/share/branding/png/keepassxc-monochrome-light-locked-256x256.png b/share/branding/png/keepassxc-monochrome-light-locked-256x256.png deleted file mode 100644 index 9f6004f53..000000000 Binary files a/share/branding/png/keepassxc-monochrome-light-locked-256x256.png and /dev/null differ diff --git a/share/branding/png/keepassxc-monochrome-light-locked-512x512.png b/share/branding/png/keepassxc-monochrome-light-locked-512x512.png deleted file mode 100644 index 486a3b3ef..000000000 Binary files a/share/branding/png/keepassxc-monochrome-light-locked-512x512.png and /dev/null differ diff --git a/share/branding/png/keepassxc-monochrome-light-locked-64x64.png b/share/branding/png/keepassxc-monochrome-light-locked-64x64.png deleted file mode 100644 index dcd4ad40d..000000000 Binary files a/share/branding/png/keepassxc-monochrome-light-locked-64x64.png and /dev/null differ diff --git a/share/branding/png/macos-128x128.png b/share/branding/png/macos-128x128.png index 02d22c1b6..8b63462ba 100644 Binary files a/share/branding/png/macos-128x128.png and b/share/branding/png/macos-128x128.png differ diff --git a/share/branding/png/macos-256x256.png b/share/branding/png/macos-256x256.png index 1726dab67..573211965 100644 Binary files a/share/branding/png/macos-256x256.png and b/share/branding/png/macos-256x256.png differ diff --git a/share/branding/png/macos-512x512.png b/share/branding/png/macos-512x512.png index dfe4f6f0f..4e22a2eb1 100644 Binary files a/share/branding/png/macos-512x512.png and b/share/branding/png/macos-512x512.png differ diff --git a/share/branding/png/macos-64x64.png b/share/branding/png/macos-64x64.png index b76ccc951..e9471a1c0 100644 Binary files a/share/branding/png/macos-64x64.png and b/share/branding/png/macos-64x64.png differ diff --git a/share/branding/png/macos-monochrome-dark-128x128.png b/share/branding/png/macos-monochrome-dark-128x128.png index dd30e51c8..983cc9fde 100644 Binary files a/share/branding/png/macos-monochrome-dark-128x128.png and b/share/branding/png/macos-monochrome-dark-128x128.png differ diff --git a/share/branding/png/macos-monochrome-dark-256x256.png b/share/branding/png/macos-monochrome-dark-256x256.png index d769b171a..94be6bce5 100644 Binary files a/share/branding/png/macos-monochrome-dark-256x256.png and b/share/branding/png/macos-monochrome-dark-256x256.png differ diff --git a/share/branding/png/macos-monochrome-dark-512x512.png b/share/branding/png/macos-monochrome-dark-512x512.png index b849f199f..66a2a6857 100644 Binary files a/share/branding/png/macos-monochrome-dark-512x512.png and b/share/branding/png/macos-monochrome-dark-512x512.png differ diff --git a/share/branding/png/macos-monochrome-dark-64x64.png b/share/branding/png/macos-monochrome-dark-64x64.png index 9811284c2..18fffee21 100644 Binary files a/share/branding/png/macos-monochrome-dark-64x64.png and b/share/branding/png/macos-monochrome-dark-64x64.png differ diff --git a/share/branding/scalable/keepassxc-monochrome-dark.svg b/share/branding/scalable/keepassxc-monochrome-dark.svg index 51e107088..233198814 100644 --- a/share/branding/scalable/keepassxc-monochrome-dark.svg +++ b/share/branding/scalable/keepassxc-monochrome-dark.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/share/branding/scalable/keepassxc-monochrome-light.svg b/share/branding/scalable/keepassxc-monochrome-light.svg deleted file mode 100644 index 35c886cd7..000000000 --- a/share/branding/scalable/keepassxc-monochrome-light.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/share/branding/scalable/keepassxc.svg b/share/branding/scalable/keepassxc.svg index aad6c5a16..be761a38b 100644 --- a/share/branding/scalable/keepassxc.svg +++ b/share/branding/scalable/keepassxc.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/share/branding/scalable/macos-monochrome-dark.svg b/share/branding/scalable/macos-monochrome-dark.svg index 2d8e45a1f..b6a33ae82 100644 --- a/share/branding/scalable/macos-monochrome-dark.svg +++ b/share/branding/scalable/macos-monochrome-dark.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/share/branding/scalable/macos.svg b/share/branding/scalable/macos.svg index f1d48eebc..77290fd1c 100644 --- a/share/branding/scalable/macos.svg +++ b/share/branding/scalable/macos.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/share/demo.kdbx b/share/demo.kdbx index 0d47152db..b1a37e99f 100644 Binary files a/share/demo.kdbx and b/share/demo.kdbx differ diff --git a/share/demo.key b/share/demo.key new file mode 100644 index 000000000..d97c5eada --- /dev/null +++ b/share/demo.key @@ -0,0 +1 @@ +secret diff --git a/share/demo.old.kdbx b/share/demo.old.kdbx new file mode 100644 index 000000000..14c034ff8 Binary files /dev/null and b/share/demo.old.kdbx differ diff --git a/share/demo_readme.md b/share/demo_readme.md deleted file mode 100644 index 4553adaf3..000000000 --- a/share/demo_readme.md +++ /dev/null @@ -1,3 +0,0 @@ -This is a demo database to showcase some of the features of KeePassXC - -The password to unlock demo.kdbx is: secret diff --git a/utils/fuzz-testing/empty3.kdbx b/share/empty3.kdbx similarity index 100% rename from utils/fuzz-testing/empty3.kdbx rename to share/empty3.kdbx diff --git a/utils/fuzz-testing/empty4.kdbx b/share/empty4.kdbx similarity index 100% rename from utils/fuzz-testing/empty4.kdbx rename to share/empty4.kdbx diff --git a/share/icons/application/256x256/apps/keepassxc.png b/share/icons/application/256x256/apps/keepassxc.png index 335639784..ca2deb9b0 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/scalable/actions/arrow-collapse-down.svg b/share/icons/application/scalable/actions/arrow-collapse-down.svg deleted file mode 100644 index 27cfc42f2..000000000 --- a/share/icons/application/scalable/actions/arrow-collapse-down.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/share/icons/application/scalable/actions/bitwarden.svg b/share/icons/application/scalable/actions/bitwarden.svg deleted file mode 100644 index 9d22e9adc..000000000 --- a/share/icons/application/scalable/actions/bitwarden.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/share/icons/application/scalable/actions/csv.svg b/share/icons/application/scalable/actions/csv.svg deleted file mode 100644 index e76afb0a8..000000000 --- a/share/icons/application/scalable/actions/csv.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/share/icons/application/scalable/actions/database-settings.svg b/share/icons/application/scalable/actions/database-settings.svg deleted file mode 100644 index 7bd0b9cab..000000000 --- a/share/icons/application/scalable/actions/database-settings.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/share/icons/application/scalable/actions/entry-delete.svg b/share/icons/application/scalable/actions/entry-delete.svg index f052113af..66ae96f1b 100644 --- a/share/icons/application/scalable/actions/entry-delete.svg +++ b/share/icons/application/scalable/actions/entry-delete.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/share/icons/application/scalable/actions/entry-expire.svg b/share/icons/application/scalable/actions/entry-expire.svg deleted file mode 100644 index a0a9ad53b..000000000 --- a/share/icons/application/scalable/actions/entry-expire.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/share/icons/application/scalable/actions/lock-open-alert.svg b/share/icons/application/scalable/actions/lock-open-alert.svg deleted file mode 100644 index 348537f09..000000000 --- a/share/icons/application/scalable/actions/lock-open-alert.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/share/icons/application/scalable/actions/lock-open.svg b/share/icons/application/scalable/actions/lock-open.svg deleted file mode 100644 index ffe75da95..000000000 --- a/share/icons/application/scalable/actions/lock-open.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/share/icons/application/scalable/actions/lock.svg b/share/icons/application/scalable/actions/lock.svg deleted file mode 100644 index 5c0eb3f66..000000000 --- a/share/icons/application/scalable/actions/lock.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/share/icons/application/scalable/actions/onepassword.svg b/share/icons/application/scalable/actions/onepassword.svg deleted file mode 100644 index b43237abc..000000000 --- a/share/icons/application/scalable/actions/onepassword.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/share/icons/application/scalable/actions/passkey.svg b/share/icons/application/scalable/actions/passkey.svg deleted file mode 100644 index c1345f1f2..000000000 --- a/share/icons/application/scalable/actions/passkey.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/share/icons/application/scalable/actions/proton.svg b/share/icons/application/scalable/actions/proton.svg deleted file mode 100644 index 89515ddec..000000000 --- a/share/icons/application/scalable/actions/proton.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/share/icons/application/scalable/actions/remote-sync.svg b/share/icons/application/scalable/actions/remote-sync.svg deleted file mode 100644 index 77b691b1d..000000000 --- a/share/icons/application/scalable/actions/remote-sync.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/share/icons/application/scalable/actions/reports.svg b/share/icons/application/scalable/actions/reports.svg index 545352534..3d62971d2 100644 --- a/share/icons/application/scalable/actions/reports.svg +++ b/share/icons/application/scalable/actions/reports.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/share/icons/application/scalable/actions/totp-invalid.svg b/share/icons/application/scalable/actions/totp-invalid.svg deleted file mode 100644 index c4146ab84..000000000 --- a/share/icons/application/scalable/actions/totp-invalid.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/share/icons/application/scalable/actions/yubikey-refresh.svg b/share/icons/application/scalable/actions/yubikey-refresh.svg deleted file mode 100644 index 4e51f88a1..000000000 --- a/share/icons/application/scalable/actions/yubikey-refresh.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/share/icons/application/scalable/apps/keepassxc-locked.svg b/share/icons/application/scalable/apps/keepassxc-locked.svg index a838d8ad4..16c218648 100644 --- a/share/icons/application/scalable/apps/keepassxc-locked.svg +++ b/share/icons/application/scalable/apps/keepassxc-locked.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/share/icons/application/scalable/apps/keepassxc-monochrome-dark-locked.svg b/share/icons/application/scalable/apps/keepassxc-monochrome-dark-locked.svg index e3d392c07..872b5fad5 100644 --- a/share/icons/application/scalable/apps/keepassxc-monochrome-dark-locked.svg +++ b/share/icons/application/scalable/apps/keepassxc-monochrome-dark-locked.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/share/icons/application/scalable/apps/keepassxc-monochrome-dark.svg b/share/icons/application/scalable/apps/keepassxc-monochrome-dark.svg index 51e107088..233198814 100644 --- a/share/icons/application/scalable/apps/keepassxc-monochrome-dark.svg +++ b/share/icons/application/scalable/apps/keepassxc-monochrome-dark.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/share/icons/application/scalable/apps/keepassxc-monochrome-light-locked.svg b/share/icons/application/scalable/apps/keepassxc-monochrome-light-locked.svg index 8b2a3fad4..c8c4f991e 100644 --- a/share/icons/application/scalable/apps/keepassxc-monochrome-light-locked.svg +++ b/share/icons/application/scalable/apps/keepassxc-monochrome-light-locked.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/share/icons/application/scalable/apps/keepassxc-monochrome-light.svg b/share/icons/application/scalable/apps/keepassxc-monochrome-light.svg index 35c886cd7..65474c9f6 100644 --- a/share/icons/application/scalable/apps/keepassxc-monochrome-light.svg +++ b/share/icons/application/scalable/apps/keepassxc-monochrome-light.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/share/icons/application/scalable/apps/keepassxc.svg b/share/icons/application/scalable/apps/keepassxc.svg index aad6c5a16..bb957bc4d 100644 --- a/share/icons/application/scalable/apps/keepassxc.svg +++ b/share/icons/application/scalable/apps/keepassxc.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/share/icons/application/scalable/mimetypes/application-x-keepassxc.svg b/share/icons/application/scalable/mimetypes/application-x-keepassxc.svg index f846a4e46..433331616 100644 --- a/share/icons/application/scalable/mimetypes/application-x-keepassxc.svg +++ b/share/icons/application/scalable/mimetypes/application-x-keepassxc.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/share/icons/icons.qrc b/share/icons/icons.qrc index 3e82e172d..4982e3b0e 100644 --- a/share/icons/icons.qrc +++ b/share/icons/icons.qrc @@ -6,22 +6,18 @@ application/256x256/apps/keepassxc.png application/scalable/actions/application-exit.svg - application/scalable/actions/arrow-collapse-down.svg application/scalable/actions/attributes-copy.svg application/scalable/actions/auto-type.svg - application/scalable/actions/bitwarden.svg application/scalable/actions/bugreport.svg application/scalable/actions/chevron-double-down.svg application/scalable/actions/chevron-double-right.svg application/scalable/actions/clipboard-text.svg application/scalable/actions/configure.svg - application/scalable/actions/csv.svg application/scalable/actions/database-change-key.svg application/scalable/actions/database-lock.svg application/scalable/actions/database-lock-all.svg application/scalable/actions/database-merge.svg application/scalable/actions/database-search.svg - application/scalable/actions/database-settings.svg application/scalable/actions/dialog-close.svg application/scalable/actions/dialog-ok.svg application/scalable/actions/document-close.svg @@ -40,7 +36,6 @@ application/scalable/actions/edit-clear-locationbar-rtl.svg application/scalable/actions/entry-clone.svg application/scalable/actions/entry-delete.svg - application/scalable/actions/entry-expire.svg application/scalable/actions/entry-restore.svg application/scalable/actions/entry-edit.svg application/scalable/actions/entry-new.svg @@ -58,25 +53,18 @@ application/scalable/actions/hibp.svg application/scalable/actions/lock-question.svg application/scalable/actions/keyboard-shortcuts.svg - application/scalable/actions/lock.svg - application/scalable/actions/lock-open.svg - application/scalable/actions/lock-open-alert.svg application/scalable/actions/message-close.svg application/scalable/actions/move-down.svg application/scalable/actions/move-up.svg application/scalable/actions/object-locked.svg application/scalable/actions/object-unlocked.svg - application/scalable/actions/onepassword.svg application/scalable/actions/paperclip.svg - application/scalable/actions/passkey.svg application/scalable/actions/password-copy.svg application/scalable/actions/password-generator.svg application/scalable/actions/password-show-off.svg application/scalable/actions/password-show-on.svg - application/scalable/actions/proton.svg application/scalable/actions/qrcode.svg application/scalable/actions/refresh.svg - application/scalable/actions/remote-sync.svg application/scalable/actions/reports.svg application/scalable/actions/reports-exclude.svg application/scalable/actions/sort-alphabetical-ascending.svg @@ -92,14 +80,12 @@ application/scalable/actions/totp-copy.svg application/scalable/actions/totp-copy-password.svg application/scalable/actions/totp-edit.svg - application/scalable/actions/totp-invalid.svg application/scalable/actions/trash.svg application/scalable/actions/url-copy.svg application/scalable/actions/user-guide.svg application/scalable/actions/username-copy.svg application/scalable/actions/view-history.svg application/scalable/actions/web.svg - application/scalable/actions/yubikey-refresh.svg application/scalable/apps/freedesktop.svg application/scalable/apps/internet-web-browser.svg application/scalable/apps/keepassxc.svg diff --git a/share/linux/org.keepassxc.KeePassXC.appdata.xml b/share/linux/org.keepassxc.KeePassXC.appdata.xml index a38728f5e..0f0b1940a 100644 --- a/share/linux/org.keepassxc.KeePassXC.appdata.xml +++ b/share/linux/org.keepassxc.KeePassXC.appdata.xml @@ -5,6 +5,9 @@ KeePassXC CC-BY-3.0 GPL-3.0+ + + application/x-keepass2 + Community-driven port of the Windows application “KeePass Password Safe” Von der Community entwickelter Port der Windows Anwendung “KeePass Password Safe” KeePassXC Team @@ -34,215 +37,28 @@ - https://keepassxc.org/assets/img/screenshots/database_view.png + https://keepassxc.org/images/screenshots/thumbs/welcome_screen.png + Create, Import or Open Databases + + + https://keepassxc.org/images/screenshots/thumbs/database_view.png Organize with Groups and Entries - https://keepassxc.org/assets/img/screenshots/unlock_database.png - Unlock database + https://keepassxc.org/images/screenshots/thumbs/edit_entry.png + Database Entry - https://keepassxc.org/assets/img/screenshots/edit_entry_icons.png + https://keepassxc.org/images/screenshots/thumbs/edit_entry_icons.png Icon Selection for Entry - https://keepassxc.org/assets/img/screenshots/password_generator_advanced.png + https://keepassxc.org/images/screenshots/thumbs/password_generator_advanced.png Password Generator - - -
    -
  • Placeholder for future release notes
  • -
-
-
- - -
    -
  • Allow adjusting application font size [#11567]
  • -
  • Add Proton Pass importer [#11197]
  • -
  • Support KeePass2 TOTP settings [#11229]
  • -
  • Add New/Preview Entry Attachments dialog and functionality [#11637, #11699, #11650]
  • -
  • Add database name, color, and icon options for unlock view [#10819, #11725]
  • -
  • Show entry background color as column [#6798]
  • -
  • Use icons for password strength [#9844]
  • -
  • Add "Group Full Path" column in entry view [#10278]
  • -
  • Passphrase "MIXED case" Type [#11255]
  • -
  • Allow deleting extension plugin data from Browser Statistics [#11218]
  • -
  • Add --minimized option to keepassxc [#11693]
  • -
  • Implement T-CONV and T-REPLACE-RX entry placeholders [#11453]
  • -
  • Option to disable opening browser when URL field double-clicked [#11332]
  • -
  • Overhaul action states and add icons to toolbar [#11047]
  • -
  • Show character count in password generator dialog [#10940]
  • -
  • Add ability to expire entries from context menu [#8731]
  • -
  • Add copy field shortcuts to Auto-Type select dialog [#11518]
  • -
  • Passkeys: Add support for selecting group on creation [#11260]
  • -
  • Browser: Refactor Access Control Dialog [#9607]
  • -
  • Browser: Add support for URL wildcards and exact URL [#9835, #11752]
  • -
  • Browser: Allow groups to restrict by browser integration key [#9852]
  • -
  • CLI: Add `-d` dry-run shortcut to merge command [#11192]
  • -
  • CLI: HTML export [#11590]
  • -
  • macOS: Add option to disable database lock when switching user [#9707]
  • -
  • SSH Agent: Implement feature to clear all identities [#10649]
  • -
  • Major enhancements to documentation [#11745, #10875]
  • -
  • Various UI and style fixes [#11535, #11672, #11511, #11445, #11426, #11273, #11455, #11321, #11594, #11539, #11351, #11354, #10748, #11602, #11303, #11291, #10091, #9417]
  • -
  • Various improvements to tags [#11676, #11652, #11625]
  • -
  • Reset splitter sizes on database unlock [#11014]
  • -
  • Remember sort order in Auto-type popup dialog [#9508]
  • -
  • Fix database password clearing when modifying key file / hardware key [#11001]
  • -
  • Fix issues with reloading and handling of externally modified db file [#10612]
  • -
  • Support passkeys with Bitwarden import [#11401]
  • -
  • Fix various quirks with CSV import [#11787]
  • -
  • Show Auto-Type select dialog even if window title is empty [#11603]
  • -
  • Refactor hardware key code to avoid deadlock [#11703, #10872]
  • -
  • Show a clear error if hardware key is found slots are not configured [#11609]
  • -
  • Fix signal/slot disconnect when opening import wizard [#11039]
  • -
  • Fix setting window title as modified [#11542]
  • -
  • Fix assert hit when viewing entry history [#11413]
  • -
  • Fix multiple crashes on Linux [#11513]
  • -
  • Fix backup file path time substitution [#10834]
  • -
  • Prevent long-running threads from deadlocking the program with only 1 CPU [#11155]
  • -
  • Hide the menubar when menus lose focus (if toggled off) [#11355, #11605]
  • -
  • CLI: Restore the original codepage on windows [#11470]
  • -
  • Passkeys: Various fixes [#10934, #10951]
  • -
  • Browser: Fix cancel with database unlock dialog [#11435]
  • -
  • Browser: Resolve references in Access Confirm dialog [#11055]
  • -
  • SSH Agent: Add timeout to streams to prevent deadlock [#11290]
  • -
  • macOS: Replace legacy code for screen recording permissions [#11428]
  • -
  • macOS: Implement Secure Input Mode [#11623]
  • -
  • macOS: Fix showing ambigious name in settings [#11373]
  • -
  • macOS: Fix copy-to-clipboard shortcut in entry preview widget [#10966]
  • -
  • Linux: Prevent multiple lock requests [#11306]
  • -
  • Snap: Prevent need for snap helper script to configure browser extension [#10924]
  • -
  • Windows: Detect outdated VC Redist with MSI installer [#11469]
  • -
  • Windows: Additional exclusion fields for clipboard [#11521]
  • -
-
-
- - -
    -
  • Passkeys: Ability to easily remove a passkey from an entry [#10777]
  • -
  • Snap: Use new desktop portal for native messaging integration [#10906]
  • -
  • Improve entry placeholder/reference feature [#10846]
  • -
  • Improve CSV importing when title field isn't specified [#10843]
  • -
  • Improve encrypted Bitwarden importing [#10800]
  • -
  • Improve database settings UX [#10821]
  • -
  • Improve handling of clipboard actions from entry preview [#10810]
  • -
  • Improve group/entry view resize behavior and set sensible defaults [#10641]
  • -
  • Passkeys: Fix incorrect username fill [#10874]
  • -
  • Passkeys: Return additional data to the extension [#10857]
  • -
  • Fix password clear timer inconsistency on unlock view [#10708]
  • -
  • Fix portability check [#10760]
  • -
  • Fix page overflow on HTML exports [#10735]
  • -
  • Fix broken builds when using system provided zxcvbn [#10717]
  • -
  • Fix copy password button when text is selected [#10853]
  • -
  • Fix tab ordering on application settings pages [#10907]
  • -
  • SSH Agent: Fix broken decrypt button [#10638]
  • -
  • Windows: Fix ALT Auto-Type modifier [#10795]
  • -
  • Windows: Fix wrong DACL memory size allocation [#10712]
  • -
  • macOS: Fix monospace font sizing [#10739]
  • -
  • Flatpak: Fix configuration settings off-by-one error [#10688]
  • -
  • BSD: Fix compiling with libusb implementation [#10736]
  • -
-
-
- - -
    -
  • Add hotkey for showing search help [#10591]
  • -
  • Add hotkey for group switching (Ctrl+Shift+PgUp/PgDown) [#10625]
  • -
  • Add per-database auto-save delay setting [#9100]
  • -
  • Add setting to hide menubar [#10341]
  • -
  • Improve Bitwarden 1PUX import and support organization collections [#10499]
  • -
  • Show advanced settings checkbox only for settings that have them [#6513]
  • -
  • Remove obsolete setting for requiring repeated password entry [#9722]
  • -
  • Passkeys: Allow registering Passkeys to existing entries [#10408]
  • -
  • Passkeys: Show warning about data being unencrypted before Passkey export [#10411]
  • -
  • Passkeys: Support NFC and USB transports [#10402]
  • -
  • Passkeys: Pass extension JSON data to browser [#10615]
  • -
  • SSH Agent: Do not use entries from recycle bin [#10518]
  • -
  • Linux: Change hotkey sequence used for {CLEARFIELD} Auto-Type [#10008]
  • -
  • Windows: Improve DACL memory access protection [#10618]
  • -
  • Fix crash when deleting history items [#10451]
  • -
  • Fix crash on screen lock or computer sleep [#10458]
  • -
  • Fix search field not being focused after unlock [#10459]
  • -
  • Fix loss of window focus when Auto-Type needs to unlock a database [#10555]
  • -
  • Fix inconsistent TOTP visibility on unlock [#10009]
  • -
  • Fix CSV import skipping over single-name groups [#10575]
  • -
  • Fix key file folder being remembered even if disabled in settings [#10636]
  • -
  • Fix issues with entry editing and database locking [#10667]
  • -
  • Fix key file text when provided on command line [#10642]
  • -
  • Fix issues with hardware key auto detection [#10663]
  • -
  • Do not override monospace font size [#10282]
  • -
  • Perform group sort only when group view is in focus [#10202]
  • -
  • Do not show decimals for attachment sizes in Bytes [#10595]
  • -
  • Prevent merging of global custom data when merging databases [#10452]
  • -
  • Fix minor translation issues [#10635]
  • -
  • Passkeys: Fix StrongBox incompatibility [#10420]
  • -
  • Passkeys: Set RP ID to effective domain if unset instead of returning an error [#10384]
  • -
  • Passkeys: Various UI fixes and improvements [#10427, #10608, #10609]
  • -
  • AppImage: Fix URL opening [#10624]
  • -
  • Flatpak: Fix application autostart [#10563]
  • -
  • Linux/macOS: Fix button sizes on modal alert popups [#10500]
  • -
  • Linux: Fix clipboard clear on Wayland [#10500]
  • -
  • Windows: Preserve file-hidden attribute [#10343]
  • -
-
-
- - -
    -
  • Support USB Hotplug for Hardware Key interface [#10092]
  • -
  • Support 1PUX and Bitwarden import [#9815]
  • -
  • Browser: Add support for PassKeys [#8825, #9987, #10318]
  • -
  • Build System: Move to vcpkg manifest mode [#10088]
  • -
  • Fix multiple TOTP issues [#9874]
  • -
  • Fix focus loss on save when the editor is not visible anymore [#10075]
  • -
  • Fix visual when removing entry from history [#9947]
  • -
  • Fix first entry is not selected when a search is performed [#9868]
  • -
  • Prevent scrollbars on entry drag/drop [#9747]
  • -
  • Prevent duplicate characters in "Also choose from" field of password generator [#9803]
  • -
  • Security: Prevent byte-by-byte and attachment inference side channel attacks [#10266]
  • -
  • Browser: Fix raising Update Entry messagebox [#9853]
  • -
  • Browser: Fix bugs when returning credentials [#9136]
  • -
  • Browser: Fix crash on database open from browser [#9939]
  • -
  • Browser: Fix support for referenced URL fields [#8788]
  • -
  • MacOS: Fix crash when changing highlight/accent color [#10348]
  • -
  • MacOS: Fix TouchID appearing even though lid is closed [#10092]
  • -
  • Windows: Fix terminating KeePassXC processes with MSI installer [#9822]
  • -
  • FdoSecrets: Fix database merge crash when enabled [#10136]
  • -
-
-
- - -
    -
  • Significant improvement to visual when drag/drop entries [#9698]
  • -
  • Automatically prompt for Quick Unlock when showing unlock dialog [#9697]
  • -
  • Improve colorful lock icon [#9632]
  • -
  • Ability to search by entry UUID [#9571]
  • -
  • Add challenge-response support for NitroKey 3 [#9631]
  • -
  • Auto-Type: Disable entry level Auto-Type when disabled at group/entry [#9672]
  • -
  • Browser: Show warning when adding duplicate URL's to entry [#9588][#9635]
  • -
  • Browser: Improve error message when proxy cannot be found [#9385]
  • -
  • Fix crash on exit on macOS [#9620]
  • -
  • Fix crash on search if entry doesn't have a group [#9633]
  • -
  • Fix several issues with Quick Unlock [#9697]
  • -
  • Enable save button when not auto-saving non-data changes [#9634]
  • -
  • Several UI/UX fixes [#9647]
  • -
  • Move toolbar back to top of window when disabling movement [#9699]
  • -
  • Browser: Fix closing password generator dialog with X button [#9636]
  • -
  • Browser: Fix handling of expired credentials [#9595]
  • -
  • Windows: Prevent white flicker when launching application [#9637]
  • -
  • Linux: Fix warning message about allow screencapture [#9638]
  • -
  • FdoSecrets: Fix access confirmation dialog showing even when disabled [#9690]
  • -
-
-
    @@ -292,7 +108,7 @@
  • Browser: Revert code causing connection problems [#8665]
  • Browser: Fix socket file symbolic link on Linux [#8656]
  • Flatpak: Fix launching browser proxy service [#8680]
  • -
  • SSH Agent: Fix pageant support on Windows [#8619]
  • +
  • SSH Agent: Fix paegent support on Windows [#8619]
@@ -1162,7 +978,7 @@
  • Compare window title to entry URLs [#556]
  • Implemented inline error messages [#162]
  • Ignore group expansion and other minor changes when making database "dirty" [#464]
  • -
  • Updated license and copyright information on source files [#632]
  • +
  • Updated license and copyright information on souce files [#632]
  • Added contributors list to about dialog [#629]
  • diff --git a/share/linux/org.keepassxc.KeePassXC.desktop.in b/share/linux/org.keepassxc.KeePassXC.desktop.in index c022b03f4..bf633727a 100644 --- a/share/linux/org.keepassxc.KeePassXC.desktop.in +++ b/share/linux/org.keepassxc.KeePassXC.desktop.in @@ -47,5 +47,3 @@ Categories=Utility;Security;Qt; MimeType=application/x-keepass2; SingleMainWindow=true X-GNOME-SingleWindow=true -Keywords=security;privacy;password-manager;yubikey;password;keepass; -Keywords[de]=sicherheit;privatsphäre;passwort-manager;yubikey;passwort;keepass; diff --git a/share/linux/org.keepassxc.KeePassXC.policy.in b/share/linux/org.keepassxc.KeePassXC.policy.in deleted file mode 100644 index e5b837e0c..000000000 --- a/share/linux/org.keepassxc.KeePassXC.policy.in +++ /dev/null @@ -1,18 +0,0 @@ - - - - KeePassXC Developers - - @APP_ICON_NAME@ - - - Quick Unlock for a KeePassXC Database - Authentication is required to unlock a KeePassXC Database - - no - auth_self - - - diff --git a/share/macosx/keepassxc.iconset/icon_128x128.png b/share/macosx/keepassxc.iconset/icon_128x128.png old mode 100644 new mode 100755 index 0b36d35d1..c3a100896 Binary files a/share/macosx/keepassxc.iconset/icon_128x128.png and b/share/macosx/keepassxc.iconset/icon_128x128.png differ diff --git a/share/macosx/keepassxc.iconset/icon_128x128@2x.png b/share/macosx/keepassxc.iconset/icon_128x128@2x.png old mode 100644 new mode 100755 index 71c955e2a..fcb76bba5 Binary files a/share/macosx/keepassxc.iconset/icon_128x128@2x.png and b/share/macosx/keepassxc.iconset/icon_128x128@2x.png differ diff --git a/share/macosx/keepassxc.iconset/icon_16x16.png b/share/macosx/keepassxc.iconset/icon_16x16.png old mode 100644 new mode 100755 index 5b2799217..7e447eba2 Binary files a/share/macosx/keepassxc.iconset/icon_16x16.png and b/share/macosx/keepassxc.iconset/icon_16x16.png differ diff --git a/share/macosx/keepassxc.iconset/icon_16x16@2x.png b/share/macosx/keepassxc.iconset/icon_16x16@2x.png old mode 100644 new mode 100755 index 62c6bbb9b..c9f07549a Binary files a/share/macosx/keepassxc.iconset/icon_16x16@2x.png and b/share/macosx/keepassxc.iconset/icon_16x16@2x.png differ diff --git a/share/macosx/keepassxc.iconset/icon_256x256.png b/share/macosx/keepassxc.iconset/icon_256x256.png old mode 100644 new mode 100755 index 71c955e2a..fcb76bba5 Binary files a/share/macosx/keepassxc.iconset/icon_256x256.png and b/share/macosx/keepassxc.iconset/icon_256x256.png differ diff --git a/share/macosx/keepassxc.iconset/icon_256x256@2x.png b/share/macosx/keepassxc.iconset/icon_256x256@2x.png old mode 100644 new mode 100755 index e846e3090..05247a860 Binary files a/share/macosx/keepassxc.iconset/icon_256x256@2x.png and b/share/macosx/keepassxc.iconset/icon_256x256@2x.png differ diff --git a/share/macosx/keepassxc.iconset/icon_32x32.png b/share/macosx/keepassxc.iconset/icon_32x32.png old mode 100644 new mode 100755 index 62c6bbb9b..c9f07549a Binary files a/share/macosx/keepassxc.iconset/icon_32x32.png and b/share/macosx/keepassxc.iconset/icon_32x32.png differ diff --git a/share/macosx/keepassxc.iconset/icon_32x32@2x.png b/share/macosx/keepassxc.iconset/icon_32x32@2x.png old mode 100644 new mode 100755 index fd1bdb037..9aaacca18 Binary files a/share/macosx/keepassxc.iconset/icon_32x32@2x.png and b/share/macosx/keepassxc.iconset/icon_32x32@2x.png differ diff --git a/share/macosx/keepassxc.iconset/icon_512x512.png b/share/macosx/keepassxc.iconset/icon_512x512.png old mode 100644 new mode 100755 index e846e3090..05247a860 Binary files a/share/macosx/keepassxc.iconset/icon_512x512.png and b/share/macosx/keepassxc.iconset/icon_512x512.png differ diff --git a/share/macosx/keepassxc.iconset/icon_512x512@2x.png b/share/macosx/keepassxc.iconset/icon_512x512@2x.png old mode 100644 new mode 100755 index 56bdc6726..0b19e8452 Binary files a/share/macosx/keepassxc.iconset/icon_512x512@2x.png and b/share/macosx/keepassxc.iconset/icon_512x512@2x.png differ diff --git a/share/translations/keepassxc_ar.ts b/share/translations/keepassxc_ar.ts index 741ca960c..1bd56f500 100644 --- a/share/translations/keepassxc_ar.ts +++ b/share/translations/keepassxc_ar.ts @@ -3,11 +3,11 @@ AboutDialog About KeePassXC - حول KeePassXC + حَول KeePassXC About - حول + حَول Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> @@ -58,7 +58,7 @@ <html><head/><body><p><span style=" font-weight:600;">%1 </span>is requesting access to the following entries:</p></body></html> - <html><head/><body><p><span style=" font-weight:600;">٪ 1 </span>يطلب الوصول إلى الإدخالات التالية:</p></body></html> + Name @@ -66,7 +66,7 @@ PID - هوية العملية + Executable @@ -77,12 +77,12 @@ سطر الأوامر - Details - تفاصيل + Your decision for above entries will be remembered for the duration the requesting client is running. + سيتم تذكر قرارك للإدخالات أعلاه طوال مدة تشغيل البرنمج الطالب. - Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. - سيتم حفظ خيارك طيلة مدة عمل الكلينت و + Details + تفاصيل Remember @@ -93,12 +93,8 @@ السماح بالمُحدد - Deny All && Future - رفض جميع الخيارات لان و مستقبل - - - Allow All && &Future - قبول جميع الخيارات لان و مستقبلا + Deny All + منع الكل @@ -116,16 +112,12 @@ Use Pageant - استخدم الݐاجانت + Use OpenSSH استخدم OpenSSH - - Use both agents - استخدم العميلين معا - SSH_AUTH_SOCK override تجاوز SSH_AUTH_SOCK @@ -144,7 +136,7 @@ SSH_SK_PROVIDER override - تجاوز SSH_SK_PROVIDER + No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. @@ -169,10 +161,6 @@ Security الأمان - - This setting cannot be enabled when minimize on unlock is enabled. - لا يمكن تمكين هذا الإعداد عندما يكون التصغير عند إلغاء القفل مفعلا. - Access error for config file %1 خطأ في الوصول إلى ملف الإعداد %1 @@ -217,50 +205,18 @@ You must restart the application to set the new language. Would you like to restart now? يجب إعادة تشغيل التطبيق لتعيين اللغة الجديدة. هل تريد إعادة التشغيل الآن ؟ + + Reset Settings? + إعادة تعيّين الإعدادات؟ + + + Are you sure you want to reset all general and security settings to default? + هل أنت متأكد من رغبتك في إعادة تعيّين كافة الإعدادات العامة وإعدادات الأمن إلى وضعها الافتراضي؟ + Select backup storage directory اختر مجلد النسخ الاحتياطي - - Confirm Reset - أكّد إعادة التعيين - - - Are you sure you want to reset all settings to default? - هل أنت متأكد أنك تريد إعادة تعيين كافة الإعدادات إلى الوضع الافتراضي؟ - - - Import KeePassXC Settings - استورد إعدادات KeePassXC - - - Failed to import settings from %1, not a valid settings file. - فشل استيراد الإعدادات من %1، ملف إعدادات غير صالح. - - - Export KeePassXC Settings - صدّر إعدادات KeePassXC - - - Small - - - - Normal - - - - Medium - - - - Large - - - - Custom - - ApplicationSettingsWidgetGeneral @@ -292,10 +248,6 @@ Remember previously used databases تذكُر قاعدة البيانات المستخدمة أخيراً - - recent files - أحدث الملفات: - Load previously open databases on startup عند بدء التشغيل إعادة فتح قواعد البيانات التي مفتوحة سابقاً @@ -312,6 +264,25 @@ Include beta releases when checking for updates ضمّن النسخ التجريبية عند البحث عن التحديثات + + On database unlock, show entries that + + + + have expired + On database unlock, show entries that... + + + + days + On database unlock, show entries that will expire within %1 days + + + + will expire within + On database unlock, show entries that... + + File Management إدارة الملفات @@ -322,11 +293,11 @@ Automatically save when locking database - الحفظ تلقائيا عند قفل قاعدة البيانات + Automatically save non-data changes when locking database - حفظ التغييرات غير البيانيا تلقائيا عند قفل قاعدة البيانات + Automatically reload the database when modified externally @@ -336,21 +307,33 @@ Backup database file before saving إحتفظ بنسخة من ملف قاعدة البيانات قبل الحفظ + + Backup destination + + + + Specifies the database backup file location. Occurrences of "{DB_FILENAME}" are replaced with the filename of the saved database without extension. {TIME:<format>} is replaced with the backup time, see https://doc.qt.io/qt-5/qdatetime.html#toString. <format> defaults to format string "dd_MM_yyyy_hh-mm-ss". + + {DB_FILENAME}.old.kdbx - {DB_FILENAME}.old.kdbx + + + + Choose... + Use alternative saving method (may solve problems with Dropbox, Google Drive, GVFS, etc.) - استخدم طريقة حفظ بديلة (قد تحل مشاكل Dropbox و Google Drive و GVFS وما إلى ذلك) + Temporary file moved into place - تم نقل الملف المؤقت إلى مكانه + Directly write to database file (dangerous) - الكتابة مباشرة إلى ملف قاعدة البيانات (خطير) + Entry Management @@ -417,13 +400,9 @@ Toolbar button style: نمط أزرار شريط الأدوات - - Show passwords in color - إظهار كلمات المرور بالألوان - Use monospaced font for notes - استخدام خط أحادي المسافة للملاحظات + Minimize instead of app exit @@ -435,11 +414,11 @@ Tray icon type - نوع أيقونة الدرج + Tray icon type: - نوع أيقونة الدرج: + Hide window to system tray when minimized @@ -447,7 +426,7 @@ Reset settings to default… - إعادة تعيين الإعدادات إلى الوضع الافتراضي ... + Auto-Type @@ -467,7 +446,7 @@ Hide expired entries from Auto-Type - إخفاء الإدخالات منتهية الصلاحية من الكتابة التلقائية + Re-lock previously locked database after performing Auto-Type @@ -475,11 +454,11 @@ Auto-Type start delay: - تأخير بدء الكتابة التلقائية: + Global Auto-Type shortcut: - اختصار الكتابة التلقائية: + Auto-type start delay milliseconds @@ -492,7 +471,7 @@ Auto-Type typing delay: - تأخير الكتابة التلقائية: + Global auto-type shortcut @@ -507,73 +486,6 @@ Remember last typed entry for: - - On database unlock, show entries that will expire within - عند فتح قاعدة البيانات، اعرض الإدخالات التي ستنتهي صلاحيتها خلال - - - On database unlock, show entries that will expire within - عند فتح قاعدة البيانات، اعرض الإدخالات التي ستنتهي صلاحيتها خلال - - - days - number of days warning for password expiration - لأيام - - - Destination format: - تنسيق الوجهة: - - - <html><head/><body><p><span style=" font-weight:600;">{DB_FILENAME}</span> is replaced with the filename of the saved database without extension</p><p><span style=" font-weight:600;">{TIME:&lt;format&gt;}</span> is replaced with the specified time format (default: dd_MM_yyyy_hh-mm-ss)</p><p>See the User Guide for more details</p></body></html> - - - - Choose folder... - اختر المجلد... - - - - - Show confirmation before moving entries to recycle bin - أظهِر التأكيد قبل نقل الإدخالات إلى سلة المهملات - - - Copy data on double clicking field in entry view - انسخ البيانات عند النقر المزدوج على الحقل في عرض الإدخال - - - Show toolbar - أظهِر شريط الأدوات - - - Show the menu bar by pressing the Alt key - - - - Show menubar - أظهِر شريط القائمة - - - Import settings… - استورد الإعدادات… - - - Export settings… - إعدادات التصدير… - - - Open browser on double clicking URL field in entry view - افتح المتصفح عن طريق النقر المزدوج على حقل عنوان URL في عرض الإدخال - - - Font size: - - - - Font size selection - - ApplicationSettingsWidgetSecurity @@ -617,7 +529,7 @@ Enable database quick unlock (Touch ID / Windows Hello) - تمكين إلغاء القفل السريع لقاعدة البيانات (Touch ID / Windows Hello) + Lock databases when session is locked or lid is closed @@ -627,18 +539,34 @@ Lock databases after minimizing the window قفل قواعد البيانات عند تصغير النافذة + + Require password repeat when it is visible + يلزم تكرار كلمة المرور عندما تكون مرئية + Hide passwords when editing them إخفاء كلمات المرور عند تعديلها Use placeholder for empty password fields - استخدام عنصر نيابة لحقول كلمة المرور الفارغة + Hide passwords in the entry preview panel اخفي كلمات السر في لوحة إستعراض المدخلات + + Hide entry notes by default + إخفاء مُدخل الملاحظات إفتراضيًا + + + Move entries to recycle bin without confirmation + + + + Enable double click to copy the username/password entry columns + + Privacy الخصوصية @@ -647,32 +575,16 @@ Use DuckDuckGo service to download website icons استعمل خدمة DuckDuckGo لتنزيل أيقونات مواقع الإنترنت - - Hide TOTP in the entry preview panel - إخفاء TOTP في لوحة المعاينة - - - Lock databases when switching user - اقفل قواعد البيانات عند تبديل المستخدم - - - Lock Options - خيارات القفل - - - Hide notes in the entry preview panel - اخفِ الملاحظات في لوحة معاينة الإدخال - AutoType The requested Auto-Type sequence cannot be used due to an error: - لا يمكن استخدام تسلسل الكتابة التلقائية المطلوب بسبب خطأ: + Auto-Type Error - خطأ في الكتابة التلقائية + Permission Required @@ -685,35 +597,44 @@ KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. - KEEPASSXC يتطلب إذن إمكانية الوصول ومسجل الشاشة من أجل إجراء الكتابة التلقائية العالمية. تسجيل الشاشة ضروري لاستخدام عنوان النافذة للعثور على الإدخالات. إذا كنت قد منحت الإذن بالفعل، فقد تضطر إلى إعادة تشغيل KeePassXC. + Invalid entry provided - إدخال غير صالح + Bracket imbalance detected, found extra { or } - تم اكتشاف اختلال توازن القوس ، تم العثور على { أو } إضافي + Too many repetitions detected, max is %1: %2 - تم اكتشاف عدد كبير جدا من التكرارات ، والحد الأقصى هو ٪1: ٪2 + Very slow key press detected, max is %1: %2 - تم اكتشاف ضغط بطيء جدا على المفتاح ، والحد الأقصى هو ٪1: ٪2 + Very long delay detected, max is %1: %2 - تم اكتشاف تأخير طويل جدا ، والحد الأقصى هو ٪1: ٪2 + - Entry does not have attribute for PICKCHARS: %1 - لا يحتوي الإدخال على سمة ل PICKCHARS: ٪1 + Invalid conversion type: %1 + + + + Invalid conversion syntax: %1 + + + + Invalid regular expression syntax %1 +%2 + Invalid placeholder: %1 - عنصر النيابة غير صالح: ٪1 + @@ -756,21 +677,21 @@ AutoTypePlatformX11 + + Trying to send invalid keysym. + + Sequence aborted: Caps Lock is on - تم إحباط التسلسل: Caps Lock قيد التشغيل + Sequence aborted: Modifier keys held by user - تم إحباط السلسلة: مفاتيح التعديل يحتفظ بها المستخدم + Unable to get valid keycode for key: - غير قادر على الحصول على رمز مفتاح صالح للمفتاح: - - - Trying to send invalid keyboard symbol. - محاولة إرسال رمز لوحة المفاتيح غير صالح. + @@ -781,7 +702,7 @@ Double click a row to perform Auto-Type or find an entry using the search: - انقر نقرا مزدوجا فوق صَفٍ لإجراء الكتابة التلقائية أو البحث عن إدخال باستخدام البحث: + <p>You can use advanced search queries to find any entry in your open databases. The following shortcuts are useful:<br/> @@ -790,11 +711,11 @@ Ctrl+1 - Type username<br/> Ctrl+2 - Type password<br/> Ctrl+3 - Type TOTP<br/> Ctrl+4 - Use Virtual Keyboard (Windows Only)</p> - <p>يمكنك استخدام استعلامات البحث المتقدم للعثور على أي إدخال في قواعد البيانات المفتوحة. الاختصارات التالية مفيدة:<br/>Ctrl + F - تبديل البحث في قاعدة البيانات<br/>Ctrl+1 - اكتب اسم المستخدم<br/>Ctrl+2 - اكتب كلمة المرور<br/>Ctrl+3 - اكتب TOTP<br/>Ctrl+4 - استخدام لوحة المفاتيح الافتراضية (Windows فقط)</p> + Search all open databases - بحث جميع قواعد البيانات المفتوحة + Search… @@ -802,7 +723,7 @@ Ctrl+4 - Use Virtual Keyboard (Windows Only)</p> Type Sequence - سلسلة النوع + Cancel @@ -810,46 +731,46 @@ Ctrl+4 - Use Virtual Keyboard (Windows Only)</p> Type {USERNAME} - كتابة {USERNAME} + Type {PASSWORD} - كتابة {PASSWORD} + Type {TOTP} - كتابة {TOTP} + Copy Username - نسخ اسم المستخدم + Copy Password - نسخ كلمة المرور + Copy TOTP - نسخ TOTP + Use Virtual Keyboard - استخدام لوحة المفاتيح الافتراضية + BrowserAccessControlDialog KeePassXC - Browser Access Request - KEEPASSXC - طلب الوصول إلى المتصفح + %1 is requesting access to the following entries: - ٪ 1 يطلب الوصول إلى الإدخالات التالية: + Remember access to checked entries - تذكر الوصول إلى الإدخالات المحددة + Remember @@ -857,7 +778,7 @@ Ctrl+4 - Use Virtual Keyboard (Windows Only)</p> Allow access to entries - السماح بالوصول إلى الإدخالات + Allow Selected @@ -869,15 +790,15 @@ Ctrl+4 - Use Virtual Keyboard (Windows Only)</p> Disable for this site - تعطيل لهذا الموقع - - - Undo - تراجع + BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + متصفح KeePassXC إحفظ المدخلات + Ok تمام @@ -892,79 +813,22 @@ Please select the correct database for saving credentials. لديك العديد من قواعد البيانات مفتوحة الرجاء إختيار قاعدة البيانات الصحيحة لحفظ المسوغات - - KeePassXC - Select Database - KeePassXC - تحديد قاعدة البيانات - - - - BrowserPasskeysConfirmationDialog - - Cancel - ألغأ - - - Update - حدّث - - - Authenticate - استَوثِق - - - Register new - سجلّ جديد - - - Register - سجّل - - - Timeout in <b>%n</b> seconds... - - - - Relying Party: %1 - - - - Username: %1 - اسم المستخدم: %1 - - - KeePassXC - Passkey credentials - - - - Add to existing entry - أضِف إلى الإدخال الموجود - - - Existing passkey found. -Do you want to register a new passkey for: - - - - Select the existing passkey and press Update to replace it. - - - - Authenticate passkey credentials for: - - - - Do you want to register a passkey for: - - BrowserService + + KeePassXC: Create a new group + + A request for creating a new group "%1" has been received. Do you want to create this group? - تم استلام طلب لإنشاء مجموعة جديدة "٪ 1". -هل تريد إنشاء هذه المجموعة؟ + + + + KeePassXC: New key association request + KeePassXC: طلب مصادقة مفتاح جديد You have received an association request for the following database: @@ -972,86 +836,83 @@ Do you want to create this group? Give the connection a unique name or ID, for example: chrome-laptop. - لقد تلقيت طلب اقتران لقاعدة البيانات التالية: -%1 - -أدخل اسما فريدا أو معرفا فريدا للاتصال، على سبيل المثال: -كروم لابتوب. + 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? مفتاح التشفير المشترك مع إسم "%1" موجود بالفعل. هل تريد الكتابة عليه؟ + + KeePassXC: Update Entry + KeePassXC: تحديث المُدخل + Do you want to update the information in %1 - %2? هل تريد تحديث المعلومات في %1 - %2؟ + + KeePassXC: Delete entry + + A request for deleting entry "%1" has been received. Do you want to delete the entry? - تم استلام طلب حذف الإدخال "٪1". -هل تريد حذف الإدخال؟ - - - %1 (Passkey) - KeePassXC - Create a new group - KeePassXC - أنشِئ مجموعة جديدة - - - Disable - تعطيل - - - KeePassXC - Overwrite existing key? + Converting attributes to custom data… - KeePassXC - Update Entry - KeePassXC - حدّث الإدخال + Abort + إجهاض - KeePassXC - Delete entry - KeePassXC - احذف الإدخال - - - KeePassXC - New key association request + KeePassXC: Converted KeePassHTTP attributes - Passkey + 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! - KeePassXC - Passkey credentials + The active database does not contain an entry with KeePassHTTP attributes. - Register a new passkey to this entry: + Don't show this warning again + لا تُظهر هذا التحذير مرة أخرى + + + KeePassXC: Legacy browser integration settings detected - KeePassXC - Update passkey + 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? - - Entry already has a passkey. -Do you want to overwrite the passkey in %1 - %2? - - - - Register - سجّل - BrowserSettingsWidget @@ -1065,60 +926,64 @@ Do you want to overwrite the passkey in %1 - %2? Enable browser integration - تفعيل تكامل المتصفح + General العام + + Browsers installed as snaps are currently not supported. + + Enable integration for these browsers: تفعيل التكامل لهذه المتصفحات: Vivaldi - Vivaldi + &Edge - و Edge + Firefox - Firefox + Tor Browser - متصفح Tor + Brave - Brave + Google Chrome - Google Chrome + Chromium - Chromium + Show a notification when credentials are requested Credentials mean login data requested via browser extension - إظهار لإشعار عند طلب بيانات الاعتماد + Request to unlock the database if it is locked - طلب إلغاء قفل قاعدة البيانات إذا كانت مقفلة + Only entries with the same scheme (http://, https://, …) are returned. - يتم إرجاع الإدخالات التي لها نفس المخطط فقط (//:http:// ، https ، ...). + Match URL scheme (e.g., https://example.com) - طابق مخطط العنوان URL (على سبيل المثال، https://example.com) + Only returns the best matches for a specific URL instead of all entries for the whole domain. @@ -1126,24 +991,24 @@ Do you want to overwrite the passkey in %1 - %2? Return only best-matching credentials - إرجاع بيانات الاعتماد الأفضل تطابقً فقط + Returns expired credentials. String [expired] is added to the title. - إرجاع بيانات الاعتماد منتهية الصلاحية. إضافة [منتهية الصلاحية] إلى العنوان. + Allow returning expired credentials - السماح بإرجاع بيانات الاعتماد منتهية الصلاحية + All databases connected to the extension will return matching credentials. - ستعرض جميع قواعد البيانات المتصلة بالملحق بيانات اعتماد مطابقة. + Search in all opened databases for matching credentials Credentials mean login data requested via browser extension - البحث في جميع قواعد البيانات المفتوحة عن بيانات الاعتماد المطابقة + Advanced @@ -1152,17 +1017,17 @@ Do you want to overwrite the passkey in %1 - %2? 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 - لا تسأل أبدا قبل تحديث بيانات الاعتماد + Do not ask permission for HTTP Basic Auth An extra HTTP Basic Auth setting - لا تطلب الإذن عندما تكون المصادقة HTTP Basic Auth + Automatically creating or updating string fields is not supported. @@ -1170,15 +1035,15 @@ Do you want to overwrite the passkey in %1 - %2? Return advanced string fields which start with "KPH: " - إرجاع حقول السلسلة المتقدمة التي تبدأ ب "KPH:" + Don't display the popup suggesting migration of legacy KeePassHTTP settings. - لا تعرض النافذة المنبثقة التي تقترح ترحيل إعدادات KeePassHTTP القديمة. + Do not prompt for KeePassHTTP settings migration. - لا تطالب بترحيل إعدادات KeePassHTTP. + Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. @@ -1186,7 +1051,7 @@ Do you want to overwrite the passkey in %1 - %2? Update native messaging manifest files at startup - تحديث ملفات بيان المراسلة الأصلية عند بدء التشغيل + Use a custom proxy location if you installed a proxy manually. @@ -1195,24 +1060,24 @@ Do you want to overwrite the passkey in %1 - %2? Use a custom proxy location: Meant is the proxy for KeePassXC-Browser - استخدام موقع وكيل مخصص: + Custom proxy location field - حقل موقع الوكيل المخصص + Browser for custom proxy file - متصفح لملف الوكيل المخصص + Browse… Button for opening file dialog - تصفح... + Use a custom browser configuration location: - استخدم موقع تكوين مخصص للمتصفح: + Browser type: @@ -1224,23 +1089,43 @@ Do you want to overwrite the passkey in %1 - %2? Config Location: - موقع التكوين: + Custom browser location field - حقل موقع المستعرض المخصص + Browse for custom browser path - استعرض بحثا عن مسار مستعرض مخصص + Custom extension ID: - هوية امتداد خاصة: + Custom extension ID - هوية امتداد خاصة + + + + Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 + + + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 + + + + Please see special instructions for browser extension use below + + + + <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. + + + + <b>Warning:</b> The following options can be dangerous! + <b>تحذير:</b> قد تكون الخيارات التالية خطيرة! Executable Files @@ -1256,46 +1141,6 @@ Do you want to overwrite the passkey in %1 - %2? Select native messaging host folder location - حدد موقع مجلد لإستاضفة الأصلي للمراسلة - - - Allow keepassxc-proxy to list all entries with their title, URL and UUID in connected databases. - - - - Allow limited access to all entries in connected databases (ignores site access restrictions) - - - - <b>Warning:</b> Only adjust these settings if necessary. - <b>تحذير:</b> اضبط هذه الإعدادات فقط إذا لزم الأمر. - - - The custom proxy location does not exist. - موقع الوكيل المخصص غير موجود. - - - <b>Error:</b> The custom proxy location does not exist. Correct this in the advanced settings tab. - <b>خطأ:</b> موقع الوكيل المخصص غير موجود. قم بتصحيح ذلك في خانة الإعدادات المتقدمة. - - - <b>Error:</b> The installed proxy executable is missing from the expected location: %1<br/>Please set a custom proxy location in the advanced settings or reinstall the application. - <b>خطأ:</b> الملف التنفيذي للپروكسي المثبت مفقود من الموقع المتوقع: ٪1<br/>يرجى تعيين موقع پروكسي مخصص في الإعدادات المتقدمة أو إعادة تثبيت التطبيق. - - - Allows using insecure http://localhost with passkeys for testing purposes. - - - - Allow using localhost with passkeys - - - - KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. - يلزم وجود KeePassXC-Browser لكي يعمل تكامل المتصفح. <br />نزله لـ %1 و %2 و %3. - - - Browsers installed using Snap or Flatpak are not supported with exception to Firefox installed using Snap. @@ -1303,7 +1148,7 @@ Do you want to overwrite the passkey in %1 - %2? CloneDialog Clone Entry Options - خيارات إستنساخ المُدخل + Append ' - Clone' to title @@ -1320,13 +1165,21 @@ Do you want to overwrite the passkey in %1 - %2? CsvImportWidget + + Import CSV fields + إستيراد مُدخلات CSV + + + filename + اسم الملف + size, rows, columns الحجم، الصفوف، الأعمدة Column Association - اقتران العمود + Password @@ -1354,7 +1207,7 @@ Do you want to overwrite the passkey in %1 - %2? TOTP - باسورد مؤقت + Created @@ -1382,7 +1235,7 @@ Do you want to overwrite the passkey in %1 - %2? Text qualification - مأهيلاة النص + Fields are separated by @@ -1390,7 +1243,7 @@ Do you want to overwrite the passkey in %1 - %2? Field separation - فاصلاة الحقل + Comments start with @@ -1398,15 +1251,15 @@ Do you want to overwrite the passkey in %1 - %2? Header lines skipped - تم تخطي خطوط الأولية + Number of header lines to discard - عدد أسطر الأولية المراد تجاهلها + First line has field names - يحتوي السطر الأول على أسماء الحقول + Consider '\' an escape character @@ -1418,52 +1271,59 @@ Do you want to overwrite the passkey in %1 - %2? CSV import preview - معاينة استيراد CSV + Not Present - غير موجود + Column %1 - العمود ٪1 + + + + Imported from CSV file + مُستورد من ملف CSV + + + Original data: + البيانات الأصلية: + + + Error(s) detected in CSV file! + [%n more message(s) skipped] - [تم تخطي المزيد من الرسائل ٪n][تم تخطي المزيد من الرسائل ٪n][تم تخطي المزيد من الرسائل ٪n][تم تخطي المزيد من الرسائل ٪n][تم تخطي المزيد من الرسائل ٪n][تم تخطي المزيد من الرسائل ٪n] + - Failed to parse CSV file: %1 - فشل تحليل ملف CSV: %1 + Error + خطأ - Imported from CSV file: %1 - مُستورد من CSV ملف: %1 - - - No Title Selected + CSV import: writer has errors: +%1 - - No title column was selected, entries will be hard to tell apart. -Are you sure you want to import? - - - - Tags - وسوم - CsvParserModel + + %1, %2, %3 + file info: bytes, rows, columns + + + + %n byte(s) + + %n row(s) - CSV row count - ٪n صف (صف)٪n صف (صف)٪n صف (صف)٪n صف (صف)٪n صف (صف)٪n صف (صفوف) + %n column(s) - CSV column count %n عمود%n عمود%n عمود%n عمود%n عمود%n عمود @@ -1476,67 +1336,58 @@ Are you sure you want to import? File %1 does not exist. - الملف ٪1 غير موجود. + Unable to open file %1. - غير قادر على فتح الملف ٪1. + Error while reading the database: %1 - خطأ أثناء قراءة قاعدة البيانات: ٪1 + Could not save, database does not point to a valid file. - تعذر الحفظ ، لا تشير قاعدة البيانات إلى ملف صالح. + Database save is already in progress. - حفظ قاعدة البيانات قيد التقدم بالفعل. + Could not save, database has not been initialized! - تعذر الحفظ ، لم تتم تهيئة قاعدة البيانات! + Database file has unmerged changes. - يحتوي ملف قاعدة البيانات على تغييرات غير مدمجة. + %1 Backup database located at %2 - %1 -قاعدة البيانات الاحتياطية موجودة في ٪ 2 + Key not transformed. This is a bug, please report it to the developers. - لم يتم تحويل المفتاح. هذا خطأ ، يرجى إبلاغ المطورين به. + Recycle Bin سلة المهملات - - Database file read error. - - - - No file path was provided. - - DatabaseOpenDialog Unlock Database - KeePassXC - افتح قاعدة البيانات - KeePassXC + DatabaseOpenWidget Unlock KeePassXC Database - افتح قاعدة بيانات KeePassXC + Enter Password: @@ -1544,27 +1395,64 @@ Backup database located at %2 Password field - حقل كلمة المرور + + + + Enter Additional Credentials (if any): + + + + Key File: + ملف المفتاح: + + + <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information…</p> + + + + Key file help + Hardware key slot selection - اختيار فتحة مفتاح الأجهزة + + + + Hardware Key: + + + + <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +<p>Click for more information…</p> + + + + Hardware key help + Key file to unlock the database - ملف المفتاح لفتح قاعدة البيانات + Browse for key file - استعرض بحثا عن ملف المفتاح + Browse… - تصفح... + + + + Refresh hardware tokens + + + + Refresh + تحديث Unlock Database - افتح قاعدة البيانات + Cancel @@ -1572,15 +1460,15 @@ Backup database located at %2 Unlock - افتح + Please present or touch your YubiKey to continue… - يرجى تقديم أو لمس YubiKey الخاص بك للمتابعة ... + Database Version Mismatch - عدم تطابق إصدار قاعدة البيانات + The database you are trying to open was most likely @@ -1590,51 +1478,50 @@ You can try to open it anyway, but it may be incomplete and saving any changes may incur data loss. We recommend you update your KeePassXC installation. - كانت قاعدة البيانات التي تحاول فتحها على الأرجح -تم إنشاؤه بواسطة إصدار أحدث من KeePassXC. - -يمكنك محاولة فتحه على أي حال ، لكنه قد يكون غير مكتمل -وحفظ أي تغييرات قد يؤدي إلى فقدان البيانات. - -نوصيك بتحديث تثبيت KeePassXC الخاص بك. + Open database anyway - فتح قاعدة البيانات على أي حال + Database unlock canceled. - تم إلغاء إلغاء قفل قاعدة البيانات. + Unlock failed and no password given - فشل إلغاء القفل ولم يتم إعطاء كلمة مرور + Unlocking the database failed and you did not enter a password. Do you want to retry with an "empty" password instead? To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. - فشل إلغاء تأمين قاعدة البيانات ولم تقم بإدخال كلمة مرور. -هل تريد إعادة المحاولة باستخدام كلمة مرور "فارغة" بدلا من ذلك؟ - -لمنع ظهور هذا الخطأ ، يجب عليك الانتقال إلى "إعدادات قاعدة البيانات / الأمان" وإعادة تعيين كلمة المرور الخاصة بك. + Retry with empty password - أعد المحاولة بكلمة مرور فارغة + + + + Failed to authenticate with Windows Hello + + + + Failed to authenticate with Touch ID + Failed to open key file: %1 - فشل فتح ملف مفتاح: ٪1 + Old key file format - تنسيق ملف المفتاح قديم + You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database &gt; Database Security &gt; Change Key File.</strong><br> - أنت تستخدم تنسيق ملف مفتاح قديم قد يقوم به KEEPASSXC<br>توقف عن الدعم في المستقبل.<br><br>يرجى التفكير في إنشاء ملف مفتاح جديد بالانتقال إلى:<br><strong>قاعدة البيانات &gt; أمان قاعدة البيانات &gt; تغيير ملف المفتاح.</strong><br> + Don't show this warning again @@ -1654,71 +1541,23 @@ To prevent this error from appearing, you must go to "Database Settings / S Cannot use database file as key file - لا يمكن استخدام ملف قاعدة البيانات كملف مفتاح + - authenticate to access the database - المصادقة للوصول إلى قاعدة البيانات + You cannot use your database file as a key file. +If you do not have a key file, please leave the field empty. + - Failed to authenticate with Quick Unlock: %1 - فشل المصادقة مع Windows Hello: %1 + Detecting hardware keys… + - Select Key File: - حدّد ملف المفتاح: + No hardware keys detected + - <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!</p> - <p>بالإضافة إلى كلمة المرور، يمكنك استخدام ملف سري لتعزيز أمان قاعدة بياناتك. يمكن توليد هذا الملف في إعدادات أمان قاعدة بياناتك.</p><p>هذا <strong>ليس</strong> ملف قاعدة بيانات *.kdbx الخاص بك! - - - Use hardware key [Serial: %1] - استخدم مفتاح حماية عتادي [الرقم التسلسلي: %1] - - - Use hardware key - استخدم مفتاح الأجهزة - - - Your database file is NOT a key file! -If you don't have a key file or don't know what that is, you don't have to select one. - ملف قاعدة البيانات الخاص بك ليس key file! -إذا لم يكن لديك ملف مفتاح أو لا تعرف ما هو، فلا داعي لتحديد واحد. - - - KeePassXC database file selected - حدّدت ملف قاعدة بيانات KeePassXC - - - The file you selected looks like a database file. -A database file is NOT a key file! - -Are you sure you want to continue with this file?. - يبدو أن الملف الذي حددته هو ملف قاعدة بيانات. - -ملف قاعدة البيانات ليس key file! - -هل أنت متأكد من أنك تريد الاستمرار بهذا الملف؟ - - - No hardware keys found. - لم يتم العثور على مفتاح حماية عتادي. - - - Refresh Hardware Keys - أنعش مفاتيح الحماية العتادي - - - Click to add a key file. - انقر لإضافة ملف مفتاح. - - - <a href="#" style="text-decoration: underline">I have a key file</a> - <a href="#" style="text-decoration: underline">لدي ملف مفتاح</a> - - - Hardware keys found, but no slots are configured. + Select hardware key… @@ -1731,6 +1570,10 @@ Are you sure you want to continue with this file?. DatabaseSettingsDialog + + Advanced Settings + + General العام @@ -1741,11 +1584,11 @@ Are you sure you want to continue with this file?. Database Credentials - بيانات اعتماد قاعدة البيانات + Encryption Settings - إعدادات التشفير + Browser Integration @@ -1753,22 +1596,6 @@ Are you sure you want to continue with this file?. Maintenance - صيانة - - - KeeShare - KeeShare - - - Secret Service Integration - - - - Remote Sync - - - - Database Settings: %1 @@ -1776,31 +1603,39 @@ Are you sure you want to continue with this file?. DatabaseSettingsWidgetBrowser KeePassXC-Browser settings - إعدادات متصفح KEEPASSXC + - Disconnect all browsers - افصل جميع المتصفحات + Convert KeePassHTTP data + - Forget all site-specific settings on entries - نسيان جميع الإعدادات الخاصة بالموقع على الإدخالات + Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data + Refresh database root group ID - تحديث المجموعة الجذر لقاعدة البيانات + + + + Disconnect all browsers + + + + Forget all site-specific settings on entries + Stored keys - المفاتيح المخزنة + Stored browser keys - مفاتيح المتصفح المخزنة + Remove selected key - إزالة المفتاح المحدد + Remove @@ -1808,13 +1643,12 @@ Are you sure you want to continue with this file?. Delete the selected key? - حذف المفتاح المحدد؟ + Do you really want to delete the selected key? This may prevent connection to the browser plugin. - هل تريد حقا حذف المفتاح المحدد؟ -قد يمنع هذا الاتصال بالمكون الإضافي للمتصفح. + Key @@ -1830,27 +1664,33 @@ This may prevent connection to the browser plugin. Enable Browser Integration to access these settings. - قم بتمكين تكامل المتصفح للوصول إلى هذه الإعدادات. + Do you really want to disconnect all browsers? This may prevent connection to the browser plugin. - هل تريد حقا فصل جميع المتصفحات؟ -قد يمنع هذا الاتصال بالمكون الإضافي للمتصفح. + + + + KeePassXC: No keys found + KeePassXC: لم يُعثر على أية مفاتيح No shared encryption keys found in KeePassXC settings. - لم يتم العثور على مفاتيح تشفير مشتركة في إعدادات KeePassXC. + + + + KeePassXC: Removed keys from database + KeePassXC: حُذِفت المفاتيح من قاعدة البيانات Successfully removed %n encryption key(s) from KeePassXC settings. - تمت إزالة مفتاح (مفاتيح) التشفير ٪n بنجاح من إعدادات كي باس إكس سي.تمت إزالة مفتاح (مفاتيح) التشفير ٪n بنجاح من إعدادات كي باس إكس سي.تمت إزالة مفتاح (مفاتيح) التشفير ٪n بنجاح من إعدادات كي باس إكس سي.تمت إزالة مفتاح (مفاتيح) التشفير ٪n بنجاح من إعدادات كي باس إكس سي.تمت إزالة مفتاح (مفاتيح) التشفير ٪n بنجاح من إعدادات كي باس إكس سي.تمت إزالة مفتاح (مفاتيح) التشفير ٪n بنجاح من إعدادات KeePassXC. + Do you really want forget all site-specific settings on every entry? Permissions to access entries will be revoked. - هل تريد حقا نسيان جميع الإعدادات الخاصة بالموقع في كل إدخال؟ -سيتم إبطال إذن الوصول إلى الإدخالات. + Removing stored permissions… @@ -1860,42 +1700,38 @@ Permissions to access entries will be revoked. Abort إجهاض + + KeePassXC: Removed permissions + KeePassXC: حُذفت الصلاحيات + Successfully removed permissions from %n entry(s). - تمت إزالة الأذونات بنجاح من إدخال/إدخالات٪ n.تمت إزالة الأذونات بنجاح من إدخال/إدخالات٪ n.تمت إزالة الأذونات بنجاح من إدخال/إدخالات٪ 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 + + + + Do you really want to convert all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + + Refresh database ID - تحديث معرف قاعدة البيانات + Do you really want refresh the database ID? This is only necessary if your database is a copy of another and the browser extension cannot connect. - هل تريد حقًا تحديث معرّف قاعدة البيانات؟ -يعد هذا ضروريًا فقط إذا كانت قاعدة بياناتك نسخة من أخرى ولا يمكن توصيل ملحق المتصفح. - - - Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data - تحويل سمات KeePassHTTP القديمة إلى بيانات مخصصة متوافقة مع KeePassXC-Browser - - - No keys found - لم يتم العثور على مفاتيح - - - Removed keys from database - - - - Removed permissions - - - - No entry with permissions found! @@ -1903,31 +1739,29 @@ This is only necessary if your database is a copy of another and the browser ext DatabaseSettingsWidgetDatabaseKey Add additional protection… - إضافة حماية إضافية... + 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? - تحذير! لم تقم بتعيين كلمة مرور. لا ينصح بشدة استخدام قاعدة بيانات بدون كلمة مرور! - -هل أنت متأكد من أنك تريد المتابعة بدون كلمة مرور؟ + Continue without password - المتابعة بدون كلمة مرور + No encryption key added - لم تتم إضافة مفتاح تشفير + You must add at least one encryption key to secure your database! - يجب عليك إضافة مفتاح تشفير واحد على الأقل لتأمين قاعدة البيانات الخاصة بك! + Unknown error @@ -1935,50 +1769,46 @@ Are you sure you want to continue without a password? Failed to change database credentials - فشل تغيير بيانات اعتماد قاعدة البيانات - - - Weak password - كلمة المرور ضعيفة - - - This is a weak password! For better protection of your secrets, you should choose a stronger password. - هذه كلمة مرور ضعيفة! لحماية أسرارك بشكل أفضل، يجب عليك اختيار كلمة مرور أقوى. - - - The provided password does not meet the minimum quality requirement. - كلمة المرور المقدمة لا تلبي الحد الأدنى من متطلبات الجودة. + DatabaseSettingsWidgetEncryption Decryption Time: - وقت فك التشفير: + + + + Change existing decryption time + + + + Change + Decryption time in seconds - وقت فك التشفير بالثواني + Higher values offer more protection, but opening the database will take longer. - توفر القيم الأعلى مزيدا من الحماية ، لكن فتح قاعدة البيانات سيستغرق وقتا أطول. + Database format: - صيغة قاعدة البيانات: + Database format - تنسيق قاعدة البيانات + Format cannot be changed: Your database uses KDBX 4 features - لا يمكن تغيير التنسيق: تستخدم قاعدة البيانات ميزات KDBX 4 + Unless you need to open your database with other programs, always use the latest format. - ما لم تكن بحاجة إلى فتح قاعدة البيانات الخاصة بك مع برامج أخرى ، استخدم دائما أحدث تنسيق. + Encryption Algorithm: @@ -1986,7 +1816,7 @@ Are you sure you want to continue without a password? Encryption algorithm - خوارزمية التشفير + AES: 256 Bit (default) @@ -2002,7 +1832,7 @@ Are you sure you want to continue without a password? Key derivation function - دالة اشتقاق المفتاح + Transform rounds: @@ -2010,7 +1840,7 @@ Are you sure you want to continue without a password? Transform rounds - تحويل الجولات + Memory Usage: @@ -2018,7 +1848,7 @@ Are you sure you want to continue without a password? Memory usage - إستعمال الذاكرة لإفتراضية + Parallelism: @@ -2026,15 +1856,20 @@ Are you sure you want to continue without a password? Parallelism - التوازي + KDBX 4 (recommended) - KDBX 4 (مستحسن) + KDBX 3 - KDBX 3 + + + + unchanged + Database decryption time is unchanged + Number of rounds too high @@ -2045,9 +1880,7 @@ Are you sure you want to continue without a password? You are using a very high number of key transform rounds with Argon2. If you keep this number, your database may take hours, days, or even longer to open. - أنت تستخدم عددا كبيرا جدا من جولات تحويل المفاتيح مع Argon2. - -إذا احتفظت بهذا الرقم ، فقد يستغرق فتح قاعدة البيانات ساعات أو أياما أو حتى وقتا أطول. + Understood, keep number @@ -2066,9 +1899,7 @@ If you keep this number, your database may take hours, days, or even longer to o You are using a very low number of key transform rounds with AES-KDF. If you keep this number, your database will not be protected from brute force attacks. - أنت تستخدم عددا منخفضا جدا من جولات تحويل المفاتيح مع AES-KDF. - -إذا احتفظت بهذا الرقم ، فلن تكون قاعدة البيانات الخاصة بك محمية من هجمات القوة الغاشمة. + KDF unchanged @@ -2081,50 +1912,38 @@ If you keep this number, your database will not be protected from brute force at MiB Abbreviation for Mebibytes (KDF settings) - مبيبايتمبيبايتمبيبايتمبيبايتمبيبايتمبيبايت + thread(s) Threads for parallel execution (KDF settings) - مؤشر الترابط مؤشر ترابط مؤشرات ترابط مؤشرات ترابط مؤشر الترابط مؤشرات الترابط - - - Encryption Settings: - إعدادات التعمية - - - Basic - أساسي - - - Advanced - متقدم + DatabaseSettingsWidgetFdoSecrets Exposed Entries - الإدخالات المكشوفة + Don't expose this database - لا تكشف قاعدة البيانات هذه + Expose entries under this group: - إعرض الإدخالات ضمن هذه المجموعة: + Enable Secret Service to access these settings. - قم بتمكين الخدمة السرية للوصول إلى هذه الإعدادات. + DatabaseSettingsWidgetGeneral Database Metadata - البيانات الوصفية لقاعدة البيانات + Database name: @@ -2132,7 +1951,7 @@ If you keep this number, your database will not be protected from brute force at Database name field - حقل اسم قاعدة البيانات + Database description: @@ -2140,7 +1959,7 @@ If you keep this number, your database will not be protected from brute force at Database description field - حقل الوصف في قاعدة البيانات + Default username: @@ -2148,7 +1967,7 @@ If you keep this number, your database will not be protected from brute force at Default username field - حقل اسم المستخدم الافتراضي + History Settings @@ -2156,11 +1975,19 @@ If you keep this number, your database will not be protected from brute force at Maximum number of history items per entry - الحد الأقصى لعدد عناصر المحفوظات لكل إدخال + + + + Max. history items: + أقصى عدد للسجلات: Maximum size of history per entry - الحد الأقصى لحجم السجل لكل إدخال + + + + Max. history size: + أقصى حجم للسجلات: MiB @@ -2176,7 +2003,7 @@ If you keep this number, your database will not be protected from brute force at Enable compression (recommended) - تمكين الضغط (مستحسن) + Delete Recycle Bin @@ -2185,121 +2012,18 @@ If you keep this number, your database will not be protected from brute force at Do you want to delete the current recycle bin and all its contents? This action is not reversible. - هل تريد حذف سلة المحذوفات الحالية وجميع محتوياتها؟ -هذا الإجراء لا يمكن عكسه. + (old) - (قديم) - - - When saving this setting or editing an entry -the oldest history items of an entry will be -removed such that only the specified amount -of entries remain at most. - عند حفظ هذا الإعداد أو تحرير إدخال -ستكون أقدم عناصر التاريخ في الإدخال -تمت إزالته بحيث يكون الحجم المحدد فقط -من الإدخالات تبقى على الأكثر. - - - Limit the amount of history items per entry to: - حدد مقدار عناصر المحفوظات لكل إدخال بما يلي: - - - When saving this setting or editing an entry -the oldest history items of an entry will be -removed such that the remaining history items -add up to the specified amount at most. - عند حفظ هذا الإعداد أو تحرير إدخال -ستكون أقدم عناصر التاريخ في الإدخال -تمت إزالته بحيث تكون عناصر المحفوظات المتبقية -أضف ما يصل إلى الحجم المحدد على الأكثر. - - - Limit the total size of history items per entry to: - حدد الحجم الإجمالي لعناصر المحفوظات لكل إدخال إلى: - - - Move entries to a recycle bin group -instead of deleting them from the database. -Entries deleted from the recycle bin are -removed from the database. - نقل الإدخالات إلى مجموعة سلة المحذوفات -بدلا من حذفها من قاعدة البيانات. -الإدخالات المحذوفة من سلة المحذوفات هي -تمت إزالته من قاعدة البيانات. - - - Autosave delay since last change - - Autosave delay - - - - Autosave delay since last change in minutes - - - - min - دقيقة - - - Autosave delay since last change checkbox - - - - Public Database Metadata - بيانات الوصفية لقاعدة البيانات العامة - - - Warning: the following settings are not encrypted. - تحذير: الإعدادات التالية غير مُعمَّاة. - - - Display name: - اسم العرض: - - - Publically visible display name used on the unlock dialog - اسم العرض المرئي للعامة المستخدم في مربع حوار إلغاء القفل - - - Database public display name - اسم العرض العام لقاعدة البيانات - - - Display color: - لون العرض: - - - Publically visible color used on the unlock dialog - - - - Database public display color chooser - أداة اختيار لون العرض العام لقاعدة البيانات - - - Clear - مسح - - - Display icon: - أيقونة العرض: - - - Select Database Icon - حدد أيقونة قاعدة البيانات - DatabaseSettingsWidgetKeeShare Sharing - المشاركة + Breadcrumb @@ -2307,15 +2031,15 @@ removed from the database. Type - نوع + Path - مسار + Last Signer - آخر مُوَقّع + Certificates @@ -2324,26 +2048,26 @@ removed from the database. > Breadcrumb separator - > + DatabaseSettingsWidgetMaintenance Manage Custom Icons - إدارة الأيقونات المخصصة + Delete selected icon(s) - حذف الرمز (الرموز) المحددة + Delete all custom icons not in use by any entry or group - حذف جميع الأيقونات المخصصة غير المستخدمة من قبل أي مُدخل أو مجموعة + Purge unused icons - إزالة الأيقونات غير المستخدمة + Confirm Deletion @@ -2351,178 +2075,54 @@ removed from the database. At least one of the selected icons is currently in use by at least one entry or group. The icons of all affected entries and groups will be replaced by the default icon. Are you sure you want to delete icons that are currently in use? - واحد على الأقل من الرموز المحددة قيد الاستخدام حاليا بواسطة إدخال أو مجموعة واحدة على الأقل. سيتم استبدال أيقونات جميع الإدخالات والمجموعات المتأثرة بالرمز الافتراضي. هل تريد بالتأكيد حذف الرموز المستخدمة حاليا؟ + Custom Icons Are In Use - الرموز المخصصة قيد الاستخدام + All custom icons are in use by at least one entry or group. - جميع الرموز المخصصة قيد الاستخدام بواسطة إدخال أو مجموعة واحدة على الأقل. + Purged Unused Icons - إزالة الأيقونات غير المستخدمة + Purged %n icon(s) from the database. - إزالة ٪n رمز (رموز) من قاعدة البيانات.إزالة ٪n رمز (رموز) من قاعدة البيانات.إزالة ٪n رمز (رموز) من قاعدة البيانات.إزالة ٪n رمز (رموز) من قاعدة البيانات.إزالة ٪n رمز (رموز) من قاعدة البيانات.إزالة ٪n رمز (رموز) من قاعدة البيانات. + DatabaseSettingsWidgetMetaDataSimple Database Name: - اسم قاعدة البيانات: + Database name field - حقل اسم قاعدة البيانات + Description: - الوصف: + Database description field - حقل الوصف في قاعدة البيانات - - - - DatabaseSettingsWidgetRemote - - Sync Commands - - Remove - إزالة - - - Command Settings - - - - Name - الاسم - - - Save - احفظ - - - Download - نزل - - - Command: - - - - Download command field - - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - - - - Input: - - - - Download input field - - - - Upload - ارفع - - - Upload command field - - - - e.g.: "sftp user@hostname" or "scp {TEMP_DATABASE} user@hostname:DatabaseOnRemote.kdbx" - - - - Upload input field - - - - Name cannot be empty. - - - - Test - - - - Download command cannot be empty. - - - - Download failed with error: %1 - - - - Download finished, but file %1 could not be found. - - - - Download successful. - - - - Save Remote Settings - - - - You have unsaved changes. Do you want to save them? - - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - - - - e.g.: -put {TEMP_DATABASE} DatabaseOnRemote.kdbx -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - - - - Timeout: - - - - seconds - ثواني - DatabaseTabWidget Database creation error - خطأ في إنشاء قاعدة البيانات + The created database has no key or KDF, refusing to save it. This is definitely a bug, please report it to the developers. - قاعدة البيانات التي تم إنشاؤها لا تحتوي على مفتاح أو KDF، ترفض حفظها. -هذا خطأ بالتأكيد، يرجى إبلاغ المطورين. + KeePass 2 Database @@ -2538,16 +2138,32 @@ This is definitely a bug, please report it to the developers. Failed to open %1. It either does not exist or is not accessible. - فشل في فتح %1. إما أنه غير موجود أو لا يمكن الوصول إليه. + CSV file ملف CSV + + Select CSV file + + Merge database دمج قاعدة بيانات + + KeePass 1 database + قاعدة بيانات KeePass 1 + + + Open KeePass 1 database + فتح قاعدة بيانات KeePass 1 + + + Open OPVault + + Export database to CSV file تصدير قاعدة البيانات إلى ملف CSV @@ -2558,60 +2174,52 @@ This is definitely a bug, please report it to the developers. Writing the HTML file failed. - فشلت كتابة ملف HTML. - - - Export database to XML file - تصدير قاعدة البيانات إلى ملف XML - - - XML file - ملف XML - - - Writing the XML file failed - فشلت كتابة ملف XML + Export Confirmation - تأكيد التصدير + You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? - أنت على وشك تصدير قاعدة بياناتك إلى ملف غير مشفر. سيؤدي ذلك إلى ترك كلمات مرورك ومعلوماتك الحساسة عرضة للخطر! هل أنت متأكد أنك تريد الاستمرار؟ + + + + New Database + + + + %1 [New Database] + Database tab name modifier + %1 [Locked] Database tab name modifier - %1 [Locked] - - - %1 [Temporary] - Database tab name modifier DatabaseWidget - Searches and Tags - البحوث و الوسوم + Database Tags + Searching… - جاري البحث... + Shared group… - مجموعة مشتركة… + Confirm Auto-Type - تأكيد النوع التلقائي + Perform Auto-Type into the previously active window? - إجراء الكتابة التلقائية في النافذة النشطة سابقا؟ + Execute command? @@ -2627,7 +2235,7 @@ This is definitely a bug, please report it to the developers. Delete group - حذف المجموعة + Do you really want to delete the group "%1" for good? @@ -2635,19 +2243,15 @@ This is definitely a bug, please report it to the developers. Move group to recycle bin? - هل تريد نقل المجموعة إلى سلة المحذوفات؟ + Do you really want to move the group "%1" to the recycle bin? - هل تريد حقًا نقل المجموعة "%1" إلى سلة المحذوفات؟ + Expired entries - إدخالات منتهية الصلاحية - - - Entries expiring within %1 day(s) - المُدخلات التي ستنتهي صلاحيتها في %1 أيامالمُدخلات التي ستنتهي صلاحيتها في %1 يومالمُدخلات التي ستنتهي صلاحيتها في %1 أيامالمُدخلات التي ستنتهي صلاحيتها في %1 أيامالمُدخلات التي ستنتهي صلاحيتها في %1 يومالمُدخلات التي ستنتهي صلاحيتها في %1 يوم + No current database. @@ -2659,11 +2263,11 @@ This is definitely a bug, please report it to the developers. Successfully merged the database files. - تم دمج ملفات قاعدة البيانات بنجاح. + Database was not modified by merge operation. - لم يتم تعديل قاعدة البيانات من خلال عملية الدمج. + Search Results (%1) @@ -2673,25 +2277,13 @@ This is definitely a bug, please report it to the developers. No Results لا يوجد نتائج - - Save - احفظ - - - Enter a unique name or overwrite an existing search from the list: - أدخل اسما فريدا أو اكتب فوق بحثا موجودا مسبقا من القائمة: - - - Save Search - حفظ البحث - Lock Database? - تأمين قاعدة البيانات؟ + You are editing an entry. Discard changes and lock anyway? - أنت تقوم بتحرير إدخال. تجاهل التغييرات وقفل على أي حال؟ + "%1" was modified. @@ -2702,8 +2294,7 @@ Save changes? Database was modified. Save changes? - تم تعديل قاعدة البيانات. -حفظ التغييرات؟ + Save changes? @@ -2713,6 +2304,25 @@ Save changes? 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? + تم تغيير ملف قاعدة البيانات ولديك تغييرات لم يتم حفظها. +هل تريد دمج التغييرات؟ + + + Could not open the new database file while attempting to autoreload. +Error: %1 + + Disable safe saves? هل تريد تعطيل الحفظ الآمن؟ @@ -2725,7 +2335,7 @@ Disable safe saves and try again? Writing the database failed: %1 - فشلت كتابة قاعدة البيانات: %1 + Passwords @@ -2741,7 +2351,7 @@ Disable safe saves and try again? Save database backup - حفظ النسخة الاحتياطية لقاعدة البيانات + Empty recycle bin? @@ -2753,96 +2363,11 @@ Disable safe saves and try again? Could not find database file: %1 - تعذر العثور على ملف قاعدة البيانات: %1 - - - New Database - قاعدة بيانات جديدة - - - %1 [New Database] - Database tab name modifier - %1 [قاعدة بيانات جديدة] - - - Remote Sync did not contain any download or upload commands. - - Remote sync '%1' completed successfully! - - - - Remote sync '%1' failed: %2 - - - - Error while saving database %1: %2 - - - - Downloading... - - - - Uploading... - - - - Syncing... - - - - Remove passkey from entry - أزِل passkey من الإدخال - - - Do you want to remove the passkey from this entry? - - - - The database file "%1" was modified externally - - - - Do you want to load the changes? - - - - Reload database - - - - Reloading database… - - - - Reload canceled - - - - Reload successful - - - - Reload pending user action… - - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes<br>Ignore the changes on disk until save<br>Discard unsaved changes - - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes then save<br>Overwrite the changes on disk<br>Discard unsaved changes - - - - Database file overwritten. - - - - Database file on disk cannot be unlocked with current credentials.<br>Enter new credentials and/or present hardware key to continue. - + + Entries expiring within %1 day(s) + @@ -2869,15 +2394,15 @@ Disable safe saves and try again? <empty URL> - <empty URL> + Confirm Removal - تأكيد الإزالة + Are you sure you want to remove this URL? - هل أنت متاكد من إزالة هذا الرابط؟ + Properties @@ -2895,6 +2420,10 @@ Disable safe saves and try again? n/a n/a + + (encrypted) + (مُعمّى) + Select private key إختر المفتاح السري @@ -2913,37 +2442,32 @@ Disable safe saves and try again? Some Browser Integration settings are overridden by group settings. - يتم تجاوز بعض إعدادات تكامل المتصفح بواسطة إعدادات المجموعة. + Invalid Entry - إدخال غير صالح + An external merge operation has invalidated this entry. Unfortunately, any changes made have been lost. - لقد أبطلت عملية دمج خارجية هذا الإدخال. -لسوء الحظ، تم فقدان أي تغييرات تم إجراؤها. + Auto-Type Validation Error - خطأ في التحقق من النوع التلقائي + An error occurred while validating the custom Auto-Type sequence: %1 Would you like to correct it? - حدث خطأ أثناء التحقق من صحة تسلسل الكتابة التلقائية المخصص: -%1 -هل ترغب في تصحيح ذلك؟ + An error occurred while validating the Auto-Type sequence for "%1": %2 Would you like to correct it? - حدث خطأ أثناء التحقق من صحة تسلسل الكتابة التلقائية المخصص: -%2 -هل ترغب في تصحيح ذلك؟ + Entry updated successfully. @@ -2951,11 +2475,11 @@ Would you like to correct it? Unsaved Changes - التغييرات غير المحفوظة + Would you like to save changes to this entry? - هل ترغب في حفظ التغييرات على هذا الإدخال؟ + New attribute @@ -2963,7 +2487,7 @@ Would you like to correct it? New attribute %1 - خاصية جديدة ٪1 + Are you sure you want to remove this attribute? @@ -2975,15 +2499,15 @@ Would you like to correct it? [PROTECTED] Press Reveal to view or edit - [محمية] اضغط على كشف للعرض أو التحرير + Hide - إخفاء + - - %n hour(s) - ٪1 ساعةساعةساعتين٪1 ساعات٪1 ساعة٪1 ساعة + + Tomorrow + غدا %n week(s) @@ -2995,11 +2519,7 @@ Would you like to correct it? %n year(s) - ٪n سنةسنةسنتين٪n سنوات٪n سنة٪n سنة - - - Failed to decrypt SSH key, ensure password is correct. - فشل فك تعمية مفتاح SSH، تأكد من صحة كلمة المرور. + @@ -3010,15 +2530,15 @@ Would you like to correct it? Attribute selection - اختيار الصفات + Attribute value - قيمة الصفات + Add a new attribute - إضافة صفة جديدة + Add @@ -3026,7 +2546,7 @@ Would you like to correct it? Remove selected attribute - حذف الصفة المُحددة + Remove @@ -3034,7 +2554,7 @@ Would you like to correct it? Edit attribute name - تحرير اسم الصفة + Edit Name @@ -3042,7 +2562,7 @@ Would you like to correct it? Toggle attribute protection - تبديل حماية الصفة + Protect @@ -3050,7 +2570,7 @@ Would you like to correct it? Show a protected attribute - إظهار صفة محمية + Reveal @@ -3062,11 +2582,11 @@ Would you like to correct it? If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements. - إذا تم تحديده، فلن يظهر الإدخال في تقارير مثل Health Check وHIBP حتى لو لم يكن مطابقًا لمتطلبات الجودة. + Exclude from database reports - استبعاد من تقارير قاعدة البيانات + Foreground Color: @@ -3074,7 +2594,7 @@ Would you like to correct it? Foreground color selection - اختيار اللون الأمامي + Background Color: @@ -3082,7 +2602,7 @@ Would you like to correct it? Background color selection - اختيار لون الخلفية + @@ -3093,19 +2613,19 @@ Would you like to correct it? Inherit default Auto-Type sequence from the group - ورث تسلسل الطباعة التلقائية الإفتراضي من &المجموعة + Use custom Auto-Type sequence: - استخدم تسلسل الكتابة التلقائية المخصص: + Custom Auto-Type sequence - تسلسل الكتابة التلقائية المخصص: + Open Auto-Type help webpage - افتح صفحة ويب تعليمات الكتابة التلقائية + Window Associations @@ -3113,25 +2633,15 @@ Would you like to correct it? Existing window associations - جمعيات النافذة الموجودة + Add new window association - إضافة ارتباط نافذة جديدة - - - + - Add item - + + Remove selected window association - إزالة ارتباط النافذة المحددة - - - - - Remove item - - + Window title: @@ -3139,15 +2649,15 @@ Would you like to correct it? You can use an asterisk (*) to match everything - يمكنك استخدام علامة النجمة (*) لمطابقة كل شيء + Set the window association title - تعيين عنوان ارتباط النافذة + You can use an asterisk to match everything - يمكنك استخدام العلامة النجمية لمطابقة كل شيء + Use a specific sequence for this association: @@ -3155,30 +2665,56 @@ Would you like to correct it? Custom Auto-Type sequence for this window - تسلسل الكتابة التلقائية المخصص لهذه النافذة + + + + + + Add item + + + + + - + Remove item + - EditEntryWidgetBrowser + + These settings affect to the entry's behaviour with the browser extension. + + General العام Hide this entry from the browser extension - إخفاء هذا الإدخال من امتداد المتصفح + Skip Auto-Submit for this entry - تخطي الإرسال التلقائي لهذا الإدخال + + + + Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. + Use this entry only with HTTP Basic Auth - استخدم هذا الإدخال فقط مع مصادقة HTTP البدائية + + + + Do not send this setting to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. + Do not use this entry with HTTP Basic Auth - لا تستخدم هذا الإدخال مع مصادقة HTTP البدائية + + + + Additional URL's + Add @@ -3190,22 +2726,6 @@ Would you like to correct it? Edit - تعديل - - - These settings affect the entry's behaviour with the browser extension. - - - - Additional URLs - عناوين URL الإضافية - - - Only send this entry to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. - - - - Do not send this entry to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. @@ -3213,11 +2733,11 @@ Would you like to correct it? EditEntryWidgetHistory Entry history selection - اختيار سجل الإدخال + Show entry at selected history state - إظهار الإدخال في حالة السجل المحددة + Show @@ -3225,7 +2745,7 @@ Would you like to correct it? Restore entry to selected history state - استعادة الإدخال إلى حالة السجل المحددة + Restore @@ -3233,7 +2753,7 @@ Would you like to correct it? Delete selected history state - حذف حالة السجل المحددة + Delete @@ -3241,7 +2761,7 @@ Would you like to correct it? Delete all history - حذف كل السجل + Delete all @@ -3252,87 +2772,91 @@ Would you like to correct it? EditEntryWidgetMain Edit Entry - تعديل الإدخالالة + Notes field - حقل الملاحظات + + + + Toggle the checkbox to reveal the notes section. + إختر مربع الإختيار لإستكشاف قسم الملاحظات. Username field - حقل اسم المستخدم + + + + Toggle notes visible + + + + Notes: + ملاحظات: Expiration field - حقل انتهاء الصلاحية + Expiration Presets - خيارات انتهاء الصلاحية مُعدة مسبقا + Expiration presets - خيارات انتهاء الصلاحية مُعدة مسبقا + Presets المسبقة + + Password: + كلمه السر: + + + URL: + رابط: + Url field - حقل Url + Download favicon for URL - تحميل رمز المفضلة للرابط + + + + Title: + العنوان: Title field - حقل العنوان + + + + Username: + اسم المستخدم: Password field - حقل كلمة المرور + Toggle expiration - تفعيل انتهاء الصلاحية + + + + Expires: + + + + Tags: + Tags list - قائمة الوسوم - - - &Username: - &اسم المستخدم: - - - &Title: - &العنوان: - - - &Password: - &كلمة المرور - - - UR&L: - UR&L: - - - &Notes: - &ملاحظات: - - - Toggle notes visibility - تبديل رؤية الملاحظات - - - T&ags: - الو&سوم: - - - &Expires: - تنتهي الصلاحية: + @@ -3373,13 +2897,26 @@ Would you like to correct it? Private key المفتاح السري + + External file + ملف خارجي + + + Browser for key file + + + + Browse… + Button for opening file dialog + + Attachment إرفاق External key file - ملف المفتاح الخارجي + Add to agent @@ -3389,26 +2926,9 @@ Would you like to correct it? Remove from agent حذف من الوكيل - - External file - ملف خارجي - - - Browser for key file - متصفح للملف الرئيسي - - - Browse… - Button for opening file dialog - تصفح... - - - Generate - توليد - Select attachment file - حدد الملف المرفق + Require user confirmation when this key is used @@ -3424,16 +2944,12 @@ Would you like to correct it? Remove key from agent after specified seconds - قم بإزالة المفتاح من الوكيل بعد ثوانٍ محددة + seconds ثواني - - Clear agent - - EditGroupWidget @@ -3445,6 +2961,10 @@ Would you like to correct it? Icon أيقونة + + Browser Integration + تكامل المتصفح + Properties خصائص @@ -3459,11 +2979,7 @@ Would you like to correct it? Group has unsaved changes - تحتوي المجموعة على تغييرات غير محفوظة - - - Browser Integration - تكامل المتصفح + Enable @@ -3481,55 +2997,43 @@ Would you like to correct it? EditGroupWidgetBrowser - These settings affect to the group's behaviour with the browser extension. - تؤثر هذه الإعدادات على سلوك المجموعة مع امتداد المتصفح. - - - Hide entries from browser extension: - إخفاء الإدخالات من ملحق المتصفح: - - - Hide entries from browser extension toggle for this and sub groups - إخفاء الإدخالات من تبديل ملحق المتصفح لهذه المجموعات الفرعية - - - Skip Auto-Submit for entries: - تخطي الإرسال التلقائي للإدخالات: - - - Skip Auto-Submit toggle for this and sub groups - تخطي تبديل الإرسال التلقائي لهذه المجموعة والمجموعات الفرعية - - - Use entries only with HTTP Basic Auth: - استخدم المٌدخلات فقط مع مصادقة HTTP البدائية: - - - Only HTTP Auth toggle for this and sub groups - فقط تبديل استيثاق HTTP لهذه المجموعة والمجموعات الفرعية - - - Do not use entries with HTTP Basic Auth: - لا تستخدم المُدخلات مع مصادقة HTTP البدائية: - - - Do not use HTTP Auth toggle for this and sub groups - لا تستخدم تبديل استيثاق HTTP لهذه والمجموعات الفرعية - - - Omit WWW subdomain from matching: - حذف المجال الفرعي WWW من المطابقة: - - - Omit WWW subdomain from matching toggle for this and sub groups - إستبعد الجزء الفرعي WWW من تبديل التطابق لهذه والمجموعات الفرعية - - - Restrict matching to given browser key: + Edit Group - Restrict matching to given browser key toggle for this and sub groups + These settings affect to the group's behaviour with the browser extension. + + + + Hide entries from browser extension: + + + + Hide entries from browser extension toggle for this and sub groups + + + + Skip Auto-Submit for entries: + + + + Skip Auto-Submit toggle for this and sub groups + + + + Use entries only with HTTP Basic Auth: + + + + Only HTTP Auth toggle for this and sub groups + + + + Do not use entries with HTTP Basic Auth: + + + + Do not use HTTP Auth toggle for this and sub groups @@ -3537,11 +3041,11 @@ Would you like to correct it? EditGroupWidgetKeeShare Sharing mode field - مجال وضع المشاركة + Password field - حقل كلمة المرور + Type: @@ -3553,23 +3057,23 @@ Would you like to correct it? Path: - مسار: + Path to share file field - مسار لمشاركة حقل الملف + Browse for share file - تصفح بحثًا عن ملف المشاركة + Browse… - تصفح... + Clear fields - مسح الحقول + Clear @@ -3585,101 +3089,100 @@ Would you like to correct it? Export - تصدير + Synchronize - مزامنة + Your KeePassXC version does not support sharing this container type. Supported extensions are: %1. - إصدار KeePassXC الخاص بك لا يدعم مشاركة هذا النوع من الحاوية. -الامتداد المدعومة هي: %1. + %1 is already being exported by this database. - يتم تصدير %1 بالفعل بواسطة قاعدة البيانات هذه. + %1 is already being imported by this database. - يتم بالفعل استيراد %1 بواسطة قاعدة البيانات هذه. + %1 is being imported and exported by different groups in this database. - يتم استيراد %1 وتصديره بواسطة مجموعات مختلفة في قاعدة البيانات هذه. + KeeShare is currently disabled. You can enable import/export in the application settings. KeeShare is a proper noun - KeeShare معطل حاليا. يمكنك تفعيل الاستيراد/التصدير في إعدادات التطبيق. + Database export is currently disabled by application settings. - تصدير قاعدة البيانات حاليًا مٌعطل من خلال إعدادات التطبيق. + Database import is currently disabled by application settings. - استيراد قاعدة البيانات حاليًا مٌعطل من خلال إعدادات التطبيق. + KeeShare container - حاوية KeeShare + KeeShare signed container - حاوية موقعة من KeeShare + Select import source - حدد مصدر الاستيراد + Select export target - حدد هدف التصدير + Select import/export file - حدد ملف الاستيراد/التصدير + EditGroupWidgetMain Edit Group - تحرير المجموعة + Toggle expiration - تفعيل انتهاء الصلاحية + Expires: - انتهاء الصلاحية + Name field - اسم الحقل + Expiration field - حقل انتهاء الصلاحية + Use default Auto-Type sequence of parent group - استخدم تسلسل الكتابة التلقائية الافتراضي للمجموعة الأصلية + Auto-Type: - الكتابة التلقائية + Search: - بحث: + Auto-Type toggle for this and sub groups - تبديل النوع التلقائي لهذه المجموعات والمجموعات الفرعية + Notes: @@ -3687,50 +3190,50 @@ Supported extensions are: %1. Default auto-type sequence field - حقل تسلسل الكتابة التلقائية الافتراضي + Notes field - حقل الملاحظات + Name: - الاسم: + Set default Auto-Type sequence - تعيين تسلسل الكتابة التلقائية الافتراضي + Search toggle for this and sub groups - تبديل البحث عن هذه والمجموعات الفرعية + EditWidgetIcons Use default icon - استخدام الأيقونة الإفتراضية + Use custom icon - استخدام أيقونة خاصة + Choose icon… - اختر أيقونة... + Set the URL to use to search for a favicon - تعيين رابط لاستخدامه للبحث عن رمز المفضلة + Favicon URL - رابط رمز المفضلة + Download favicon for URL - تحميل رمز المفضلة للرابط + Download favicon @@ -3738,35 +3241,39 @@ Supported extensions are: %1. Apply selected icon to subgroups and entries - تطبيق الأيقونة المحدد على المجموعات الفرعية والإدخالات + Apply icon to… - تطبيق الأيقونة على... + Apply to this group only - طبِّق على هذه المجموعة فقط + Also apply to child groups - تنطبق أيضًا على المجموعات الفرعية + Also apply to child entries - تنطبق أيضًا على الإدخالات الفرعية + Also apply to all children - تنطبق أيضًا على جميع الفروع + Unable to fetch favicon. تعذر جلب رمز المفضلة. + + You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security + + Existing icon selected. - تم تحديد أيقونة موجودة. + Images @@ -3778,27 +3285,23 @@ Supported extensions are: %1. Select Image(s) - حدد صورة + Successfully loaded %1 of %n icon(s) - تم تحميل ٪1 أيقونة من ٪n أيقونات بنجاحتم تحميل أيقونة من ٪n أيقونات بنجاحتم تحميل أيقونتين من ٪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: - فشلت الأيقونات التالية:فشلت الأيقونة التالية:فشلت الأيقونات التالية:فشلت الأيقونات التالية:فشلت الأيقونات التالية:فشلت الأيقونات التالية: - - - You can enable the DuckDuckGo website icon service under Application Settings -> Security - يمكنك تفعيل خدمة أيقونة موقع DuckDuckGo ضمن إعدادات التطبيق -> الأمان + @@ -3809,7 +3312,7 @@ Supported extensions are: %1. Datetime created - تاريخ الإنشاء + Modified: @@ -3817,7 +3320,7 @@ Supported extensions are: %1. Datetime modified - عدلت التاريخ والوقت + Accessed: @@ -3825,7 +3328,7 @@ Supported extensions are: %1. Datetime accessed - تاريخ الوصول + Uuid: @@ -3833,7 +3336,7 @@ Supported extensions are: %1. Unique ID - معرف فريد + Plugin Data @@ -3841,11 +3344,11 @@ Supported extensions are: %1. Plugin data - بيانات الملحق + Remove selected plugin data - إزالة بيانات الملحق المختار + Remove @@ -3874,46 +3377,13 @@ This may cause the affected plugins to malfunction. Entry %1 - Clone - %1 - استنساخ - - - Passkey - - Invalid conversion type: %1 - نوع تحويل غير صالح: %1 - - - Invalid conversion syntax: %1 - هيئة التحويل غير صالحة: %1 - - - Invalid regular expression syntax %1 -%2 - هيئة التعبير غير صالحة %1 -%2 - EntryAttachments Cannot open file "%1" - لا يمكن فتح الملف "%1" - - - - EntryAttachmentsDialog - - Form - النموذج - - - File name - - - - File contents... @@ -3940,7 +3410,7 @@ This may cause the affected plugins to malfunction. Add new attachment - إضافة مرفق جديد + Add @@ -3948,15 +3418,23 @@ This may cause the affected plugins to malfunction. Remove selected attachment - إزالة المرفق المحدد + Remove إزالة + + Rename selected attachment + + + + Rename + + Open selected attachment - فتح المرفق المحدد + Open @@ -3964,7 +3442,7 @@ This may cause the affected plugins to malfunction. Save selected attachment to disk - حفظ المرفق المحدد على القرص + Save @@ -3976,7 +3454,7 @@ This may cause the affected plugins to malfunction. Confirm remove - تأكيد الإزالة + Are you sure you want to remove %n attachment(s)? @@ -4021,70 +3499,46 @@ This may cause the affected plugins to malfunction. Unable to open file(s): %1 - تعذر فتح الملفات: -%1تعذر فتح الملفات: -%1تعذر فتح الملفات: -%1تعذر فتح الملفات: -%1تعذر فتح الملفات: -%1تعذر فتح الملفات: -%1 + Confirm Overwrite Attachment - تأكيد الكتابة فوق المرفق + + + + Attachment "%1" already exists. +Would you like to overwrite the existing attachment? + Confirm Attachment - تأكيد المرفق + %1 is a big file (%2 MB). Your database may get very large and reduce performance. Are you sure to add this file? - %1 هو ملف كبير الحجم (%2 ميجابايت). -قد تصبح قاعدة البيانات الخاصة بك كبيرة جدًا وتقلل من الأداء. - -هل أنت متأكد من إضافة هذا الملف؟ + Attachment modified - عدّلت المرفق + The attachment '%1' was modified. Do you want to save the changes to your database? - تم تعديل المرفق '%1'. -هل تريد حفظ التغييرات في قاعدة بياناتك؟ + Saving attachment failed - فشل حفظ المرفق + Saving updated attachment failed. Error: %1 - فشل حفظ المرفق المحدث. -الخطأ: %1 - - - Attachment "%1" already exists. -Would you like to overwrite the existing attachment? - المرفق "%1" موجود بالفعل. -هل ترغب في الكتابة فوق المرفق الموجود؟ - - - New - - Preview - معاينة - - - Failed to preview an attachment: Attachment not found - فشل معاينة المرفق: لم يتم العثور على المرفق - EntryAttributesModel @@ -4097,7 +3551,7 @@ Would you like to overwrite the existing attachment? EntryHistoryModel Current (%1) - الحالي (%1) + Last modified @@ -4105,11 +3559,11 @@ Would you like to overwrite the existing attachment? Age - العمر + Difference - الفرق + Size @@ -4137,7 +3591,7 @@ Would you like to overwrite the existing attachment? Custom Attributes - سمات خاصة + Icon @@ -4145,7 +3599,7 @@ Would you like to overwrite the existing attachment? Color - اللون + Expiration @@ -4153,11 +3607,11 @@ Would you like to overwrite the existing attachment? TOTP - باسورد مؤقت + Custom Data - البيانات المخصصة + Attachments @@ -4167,10 +3621,6 @@ Would you like to overwrite the existing attachment? Auto-Type نمط تلقائي - - Tags - وسوم - EntryModel @@ -4233,58 +3683,50 @@ Would you like to overwrite the existing attachment? Group name - اسم المجموعة - - - Entry title - عنوان الإدخال - - - Password Strength - قوة كلمة المرور - - - Entry notes - ملاحظات الإدخال - - - Entry expires at - تنتهي صلاحية الإدخال في - - - Creation date - تاريخ الإنشاء - - - Last modification date - تاريخ آخر تعديل - - - Last access date - تاريخ الوصول الأخير - - - Attached files - الملفات المرفقة - - - Entry size - حجم الإدخال - - - Has attachments - لديه مرفقات - - - Has TOTP - لديه TOTP - - - Background Color - Group Path + Entry title + + + + Password Strength + + + + Entry notes + + + + Entry expires at + + + + Creation date + + + + Last modification date + + + + Last access date + + + + Attached files + + + + Entry size + + + + Has attachments + + + + Has TOTP @@ -4292,7 +3734,7 @@ Would you like to overwrite the existing attachment? EntryPreviewWidget Display current TOTP value - اظهر قيمة TOTP الحالية + Close @@ -4307,8 +3749,8 @@ Would you like to overwrite the existing attachment? كلمه السر - URL - رابط + Notes + ملاحظات Expiration @@ -4316,19 +3758,19 @@ Would you like to overwrite the existing attachment? Tags - وسوم + Tags list - قائمة الوسوم + Username اسم المستخدم - Notes - ملاحظات + URL + رابط Advanced @@ -4348,7 +3790,7 @@ Would you like to overwrite the existing attachment? Default Sequence - التسلسل الإفتراضي + Window @@ -4364,7 +3806,7 @@ Would you like to overwrite the existing attachment? Share - مشاركة + Search @@ -4378,10 +3820,6 @@ Would you like to overwrite the existing attachment? Never أبدًا - - Double click to copy value - انقر نقرا مزدوجا لنسخ القيمة - Enabled مُفعل @@ -4390,20 +3828,12 @@ Would you like to overwrite the existing attachment? Disabled مُعطل - - Double click to copy to clipboard - انقر نقرا مزدوجا للنسخ إلى الحافظة - EntryURLModel Invalid URL - URL غير صالح - - - Duplicate URL - URL مكرر + @@ -4420,112 +3850,107 @@ Would you like to overwrite the existing attachment? Reset to defaults إعادة التعيين إلى الإعدادات الافتراضية - - + %1 entry(s)... - + %1 مُدخل+ %1 مُدخل+ %1 مُدخلات+ %1 مُدخلات+ %1 مُدخل+ %1 مُدخل - ExportDialog Export options - خيارات التصدير + Sort entries by... - فرز الإدخالات حسب... + You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! - أنت على وشك تصدير قاعدة بياناتك إلى ملف غير مشفر. -سيؤدي هذا إلى ترك كلمات المرور ومعلوماتك الحساسة عرضة للخطر! + database order - ترتيب قاعدة البيانات + name (ascending) - الاسم (تصاعدياً) + name (descending) - الاسم (تنازلياً) + unknown - غير معلوم + Export database to HTML file - تصدير قاعدة البيانات إلى ملف HTML + HTML file - ملف HTML + FdoSecrets::DBusMgr Failed to deliver message - فشل تسليم الرسالة + Failed to send reply on DBus - فشل إرسال الرد على DBus + Unknown Unknown PID - مجهول + Unknown Unknown executable path - مجهول + <i>PID: %1, Executable: %2</i> <i>PID: 1234, Executable: /path/to/exe</i> - <i>PID: %1, Executable: %2</i> + Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. - خدمة سرية أخرى قيد التشغيل (%1).<br/>يرجى إيقافها / إزالتها قبل إعادة تمكين تكامل الخدمة السرية. + Failed to register DBus service at %1.<br/> - فشل تسجيل خدمة DBus في %1.<br/> + Failed to register service on DBus at path '%1' - فشل تسجيل الخدمة على DBus في المسار '%1' + Failed to register database on DBus under the name '%1' - فشل تسجيل قاعدة البيانات على DBus تحت اسم '%1' + Failed to register session on DBus at path '%1' - فشل تسجيل الجلسة على DBus في المسار '%1' + Failed to register item on DBus at path '%1' - فشل تسجيل العنصر على DBus في المسار '%1' + Failed to register prompt object on DBus at path '%1' - فشل تسجيل كائن الإشعار على DBus في المسار '%1' + FdoSecrets::Item Entry "%1" from database "%2" was used by %3 - تم استخدام الإدخال "%1" من قاعدة البيانات "%2" بواسطة %3 + @@ -4533,14 +3958,14 @@ This will leave your passwords and sensitive information vulnerable! %n Entry(s) was used by %1 %1 is the name of an application - ٪n مُدخل تم استخدامه من قبل ٪1٪n مُدخل تم استخدامه من قبل ٪1٪n مُدخل تم استخدامه من قبل ٪1٪n مُدخلات تم استخدامها من قبل ٪1٪n مُدخل تم استخدامه من قبل ٪1٪n مُدخل تم استخدامه من قبل ٪1 + FdoSecrets::SettingsClientModel Unknown - مجهول + Non-existing/inaccessible executable path. Please double-check the client is legit. @@ -4551,18 +3976,18 @@ This will leave your passwords and sensitive information vulnerable! FdoSecrets::SettingsDatabaseModel Unlock to show - افتح للعرض + None - لا شيء + FdoSecrets::UnlockPrompt %1 (PID: %2) - رقم(هوية) العملية + @@ -4577,25 +4002,25 @@ This will leave your passwords and sensitive information vulnerable! [empty] group has no children - [فارغ] + %1 - Clone - %1 - استنساخ + HibpDownloader Online password validation failed - فشل التحقق من صحة كلمة المرور عبر الإنترنت + IconDownloaderDialog Download Favicons - تنزيل Favicons + Cancel @@ -4604,8 +4029,7 @@ This will leave your passwords and sensitive information vulnerable! Having trouble downloading icons? You can enable the DuckDuckGo website icon service in the security section of the application settings. - تواجه مشكلة في تنزيل الأيقونات؟ -يمكنك تفعيل خدمة أيقونة موقع DuckDuckGo في قسم الأمان في إعدادات التطبيق. + Close @@ -4617,15 +4041,15 @@ You can enable the DuckDuckGo website icon service in the security section of th Status - الحالة + Please wait, processing entry list… - يرجى الانتظار ، معالجة قائمة الإدخالات ... + Downloading… - يتم التحميل... + Ok @@ -4633,201 +4057,14 @@ You can enable the DuckDuckGo website icon service in the security section of th Already Exists - موجود بالفعل + Download Failed - فشل التنزيل + Downloading favicons (%1/%2)… - جارِ تنزيل favicons (%1/%2)… - - - - ImportWizard - - Import Wizard - استورد المساعد - - - - ImportWizardPageReview - - WizardPage - - - - Entry count: %1 - - - - Group - المجموعة - - - Title - العنوان - - - Username - اسم المستخدم - - - Password - كلمة المرور - - - Url - عنوان Url - - - Could not load key file. - - - - Could not open remote database. Password or key file may be incorrect. - - - - - ImportWizardPageSelect - - Form - النموذج - - - Import File Selection - استيراد اختيار الملف - - - Password: - كلمة المرور: - - - Key File: - ملف مفتاح: - - - Browse… - تصفح... - - - Import Into: - استيراد إلى: - - - New Database - قاعدة بيانات جديدة - - - No unlocked databases available - لا تتوفر قواعد بيانات مفتوحة - - - Existing Database: - - - - Import File: - استورد ملف: - - - Comma Separated Values (.csv) - - - - 1Password Export (.1pux) - تصدير 1Password (.1pux) - - - 1Password Vault (.opvault) - 1Password مخزن (.opvault) - - - Bitwarden (.json) - - - - KeePass 1 Database (.kdb) - - - - Open OPVault - فتح OPVault - - - Select import file - حدد ملف الاستيراد - - - All files - كل الملفات - - - Key files - ملفات المفتاح - - - Select key file - إختر ملف المفتاح - - - Comma Separated Values - - - - 1Password Export - صدّر 1Password - - - Bitwarden JSON Export - تصدير JSON من Bitwarden - - - 1Password Vault - مخزن 1Password - - - KeePass1 Database - - - - Proton Pass (.json) - - - - Proton Pass JSON Export - تصدير JSON إلى Proton Pass - - - Temporary Database - - - - Command: - - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - - - - Input: - - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last commend `exit` has to be sent - - - - - Remote Database (.kdbx) @@ -4846,25 +4083,24 @@ The command has to exit. In case of `sftp` as last commend `exit` has to be sent Kdbx3Reader Missing database headers - رؤوس قاعدة البيانات مفقودة + Unable to calculate database key - غير قادر على حساب مفتاح قاعدة البيانات + Unable to issue challenge-response: %1 - غير قادر على إصدار استجابة الارتياب: %1 + Invalid credentials were provided, please try again. If this reoccurs, then your database file may be corrupt. - تم تقديم بيانات اعتماد غير صالحة، يرجى المحاولة مرة أخرى. -في حالة تكرار ذلك، قد يكون ملف قاعدة البيانات الخاص بك تالفا. + Header doesn't match hash - الرأس لا يتطابق مع التجزئة + Invalid header id size @@ -4872,11 +4108,11 @@ If this reoccurs, then your database file may be corrupt. Invalid header field length: field %1 - طول حقل الترويسة غير صالحة: الحقل %1 + Invalid header data length: field %1, %2 expected, %3 found - طول بيانات الترويسة غير صالحة: الحقل %1، %2 متوقع، تم العثور على %3 + @@ -4888,11 +4124,11 @@ If this reoccurs, then your database file may be corrupt. Unable to issue challenge-response: %1 - غير قادر على إصدار استجابة الارتياب: %1 + Unable to calculate database key - غير قادر على حساب مفتاح قاعدة البيانات + @@ -4903,7 +4139,7 @@ If this reoccurs, then your database file may be corrupt. Unable to calculate database key: %1 - غير قادر على حساب مفتاح قاعدة البيانات: %1 + Invalid header checksum size @@ -4916,12 +4152,11 @@ If this reoccurs, then your database file may be corrupt. Invalid credentials were provided, please try again. If this reoccurs, then your database file may be corrupt. - تم تقديم بيانات اعتماد غير صالحة، يرجى المحاولة مرة أخرى. -في حالة تكرار ذلك، قد يكون ملف قاعدة البيانات الخاص بك تالفا. + (HMAC mismatch) - (عدم تطابق HMAC) + Unknown cipher @@ -4933,11 +4168,11 @@ If this reoccurs, then your database file may be corrupt. Invalid header field length: field %1 - طول حقل الترويسة غير صالحة: الحقل %1 + Invalid header data length: field %1, %2 expected, %3 found - طول بيانات الترويسة غير صالحة: الحقل %1، %2 متوقع، تم العثور على %3 + Failed to open buffer for KDF parameters in header @@ -4957,11 +4192,11 @@ If this reoccurs, then your database file may be corrupt. Invalid inner header field length: field %1 - طول حقل الترويسة الداخلي غير صالح: الحقل %1 + Invalid inner header data length: field %1, %2 expected, %3 found - طول بيانات الترويسة الداخلي غير صالحة: الحقل %1، %2 متوقع، تم العثور على %3 + Invalid inner header binary size @@ -5041,7 +4276,7 @@ If this reoccurs, then your database file may be corrupt. Unable to calculate database key: %1 - غير قادر على حساب مفتاح قاعدة البيانات: %1 + Failed to serialize KDF parameters variant map @@ -5053,11 +4288,11 @@ If this reoccurs, then your database file may be corrupt. KdbxReader Invalid cipher uuid length: %1 (length=%2) - طول معرف التشفير غير صالح: %1 (length=%2) + Unable to parse UUID: %1 - غير قادر على تحليل UUID: %1 + Unsupported cipher @@ -5097,18 +4332,14 @@ If this reoccurs, then your database file may be corrupt. Failed to read database file. - فشل في قراءة ملف قاعدة البيانات. + 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. - الملف المحدد عبارة عن قاعدة بيانات KeePass 1 قديمة (.kdb). - -يمكنك استيرادها بالنقر فوق قاعدة البيانات > "استيراد قاعدة بيانات KeePass 1…'. - -هذه عملية انتقال في اتجاه واحد. لن تتمكن من فتح قاعدة البيانات المستوردة باستخدام إصدار KeePassX 0.4 القديم. + Not a KeePass database. @@ -5245,15 +4476,15 @@ Line %2, column %3 KeeAgentSettings Invalid KeeAgent settings file structure. - بنية ملف إعدادات KeeAgent غير صالحة. + Private key is an attachment but no attachments provided. - المفتاح الخاص هو مرفق ولكن لم يتم توفير أي مرفقات. + Private key is empty - المفتاح الخاص فارغ + File too large to be a private key @@ -5264,6 +4495,17 @@ Line %2, column %3 تعذر فتح المفتاح السري + + KeePass1OpenWidget + + Import KeePass1 Database + + + + Unable to open the database. + فتح قاعدة البيانات غير ممكن. + + KeePass1Reader @@ -5317,17 +4559,16 @@ Line %2, column %3 Unable to calculate database key - غير قادر على حساب مفتاح قاعدة البيانات + unable to seek to content position - غير قادر على البحث عن موضع المحتوى + Invalid credentials were provided, please try again. If this reoccurs, then your database file may be corrupt. - تم تقديم بيانات اعتماد غير صالحة، يرجى المحاولة مرة أخرى. -في حالة تكرار ذلك، قد يكون ملف قاعدة البيانات الخاص بك تالفا. + Key transformation failed @@ -5430,43 +4671,43 @@ If this reoccurs, then your database file may be corrupt. Inactive share %1 - المشاركة غير نشطة %1 + Imported from %1 - تم الاستيراد من ٪1 + Exported to %1 - تم التصدير إلى ٪1 + Synchronized with %1 - متزامن مع ٪1 + Import is disabled in settings - الاستيراد معطل في الإعدادات + Export is disabled in settings - التصدير معطل في الإعدادات + Inactive share - المشاركة غير نشطة + Imported from - مستورد من + Exported to - تصدير إلى + Synchronized with - متزامن مع + @@ -5492,7 +4733,7 @@ If this reoccurs, then your database file may be corrupt. KeyFileEditWidget Generate a new key file - توليد ملف مفتاح جديد + Generate @@ -5500,49 +4741,48 @@ If this reoccurs, then your database file may be corrupt. Generate a new key file or choose an existing one to protect your database. - ولّد ملف مفتاح جديد أو اختيار ملف موجود لحماية قاعدة بياناتك. + Note: Do NOT use a file that may change as that will prevent you from unlocking your database. - ملاحظة: لا تستخدم ملفًا قد يتغير، حيث سيمنعك ذلك من فتح قاعدة بياناتك. + Browse for key file - استعرض بحثا عن ملف المفتاح + Browse… - تصفح... + Old key file format - تنسيق ملف المفتاح قديم + You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. - لقد قمت بتحديد ملف مفتاح بتنسيق قديم قد يتوقف KeePassXC<br> عن دعمه في المستقبل.<br><br>يُرجى التفكير في إنشاء ملف مفتاح جديد بدلاً من ذلك. + Error loading the key file '%1' Message: %2 - خطأ في تحميل ملف المفتاح '%1' -الرسالة: %2 + Key File - ملف مفتاح + Add Key File - إضافة ملف مفتاح + Change Key File - تغيير ملف المفتاح + Remove Key File - إزالة ملف المفتاح + Key File set, click to change or remove @@ -5550,7 +4790,7 @@ Message: %2 <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> + Key files @@ -5562,15 +4802,15 @@ Message: %2 Create Key File… - أنشئ ملف المفتاح... + Error creating key file - خطأ في إنشاء ملف المفتاح + Unable to create key file: %1 - غير قادر على إنشاء ملف المفتاح: %1 + Select a key file @@ -5578,28 +4818,27 @@ Message: %2 Invalid Key File - ملف المفتاح غير صالح + You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. - لا يمكنك استخدام قاعدة البيانات الحالية كkeyfile خاص بها. يُرجى اختيار ملف مختلف أو إنشاء ملف مفتاح جديد. + Suspicious Key File - ملف مفتاح مشبوه + The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. Are you sure you want to continue with this file? - يبدو ملف المفتاح المختار كملف قاعدة بيانات كلمة المرور. يجب أن يكون ملف المفتاح ملفًا ثابتًا لا يتغير أبدًا وإلا ستفقد الوصول إلى قاعدة بياناتك إلى الأبد. -هل أنت متأكد أنك تريد الاستمرار في هذا الملف؟ + MacUtils Invalid key code - رمز المفتاح غير صالح + Global shortcut already registered to %1 @@ -5618,11 +4857,15 @@ Are you sure you want to continue with this file? &Recent Databases - قواعد البيانات المفتوحة مؤخرًا + + + + &Import + &Export - &تصدير + &Help @@ -5630,19 +4873,15 @@ Are you sure you want to continue with this file? &Entries - &الإدخالات + Copy Att&ribute - نسخ الصف&ة + TOTP - باسورد مؤقت - - - Tags - وسوم + &Groups @@ -5654,11 +4893,11 @@ Are you sure you want to continue with this file? View - عرض + Theme - السِمة + &Quit @@ -5670,63 +4909,83 @@ Are you sure you want to continue with this file? &Check for Updates - &تحقق من وجود تحديثات + &Open Database… - &فتح قاعدة بيانات… + &Save Database - &حفظ قاعدة البيانات + &Close Database - إغلاق قاعدة البيانات + &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 + &Delete Entry… - &حذف المُدخل... + &New Group… - &مجموعة جديدة… + + + + Add a new group + &Edit Group… - &تعديل المجموعة... + &Delete Group… - &احذف المجموعة… + Download All &Favicons… - تحميل جميع أيقونات المواقع… + Sort &A-Z - فرز من الألف إلى الياء + Sort &Z-A - فرز من الياء إلى الألف + Sa&ve Database As… @@ -5734,35 +4993,59 @@ Are you sure you want to continue with this file? Database &Security… - أمن &قاعدة البيانات… + Database &Reports… - قاعدة البيانات والتقارير… + + + + Statistics, health check, etc. + &Database Settings… - &إعدادات قاعدة البيانات… + + + + Database settings + إعدادات قاعدة البيانات &Clone Entry… - &إستنساخ المُدخل... + Move u&p + + Move entry one step up + + Move do&wn + + Move entry one step down + + Copy &Username - نسخ &اسم المستخدم + + + + Copy username to clipboard + نسخ اسم المستخدم إلى الحافظة Copy &Password - نسخ كلمة المرور + + + + Copy password to clipboard + نسخ كلمة المرور إلى الحافظة &Settings @@ -5770,59 +5053,83 @@ Are you sure you want to continue with this file? &Password Generator - &مولد كلمات السر + Perform &Auto-Type - الأداء والكتابة التلقائية + Download &Favicon - نزّل &أيقونة + Open &URL - افتح &الرابط + &Lock Database - &قفل قاعدة البيانات + Lock &All Databases - قفل جميع قواعد البيانات + &Title &العنوان - Copy &URL - نسخ الرابط + Copy title to clipboard + نسخ العنوان إلى الحافظة + + + &URL + &رابط + + + Copy URL to clipboard + نسخ الرابط إلى الحافظة &Notes &الملاحظات + + Copy notes to clipboard + نسخ الملاحظات إلى الحافظة + &CSV File… - ملف CSV… + &HTML File… - ملف &HTML… + KeePass 1 Database… + + Import a KeePass 1 database + + 1Password Vault… - مخزن 1Password… + + + + Import a 1Password Vault + CSV File… - ملف CSV… + + + + Import a CSV file + Show TOTP @@ -5830,103 +5137,99 @@ Are you sure you want to continue with this file? Show QR Code - أظهِر رمز QR + Set up TOTP… - نصب TOTP… + Copy &TOTP نسخ &TOTP - - Copy Password and TOTP - نسخ كلمة المرور و TOTP - E&mpty recycle bin إفراغ سلة المهملات &Donate - &تبرَّع + Report a &Bug - الإبلاغ عن علَّة + &Getting Started - &ابدء + Open Getting Started Guide - افتح دليل البدء + &Online Help - &مساعدة عبر الإنترنت + + + + Go to online documentation + &User Guide - &دليل المستخدم + Open User Guide - افتح دليل المستخدم + &Keyboard Shortcuts - &إختصارات لوحة المفاتيح + Save Database Backup… - احفظ النسخة الاحتياطية لقاعدة البيانات... + Add key to SSH Agent - أضِف مفتاح إلى عميل SSH + Remove key from SSH Agent - أزِل المفتاح من SSH Agent + Compact Mode - الوضع المضغوط + Automatic - تلقائي + Light - فاتحة + Dark - داكنة + Classic (Platform-native) - - Show Menubar - أظهِر شريط القائمة - Show Toolbar - أظهِر شريط الأدوات + Show Preview Panel - أظهِر لوحة المعاينة + Always on Top - دائما في الأعلى + Hide Usernames @@ -5938,11 +5241,7 @@ Are you sure you want to continue with this file? Clone Group... - &إستنساخ المجموعة... - - - &XML File… - &ملف XML... + Clear history @@ -5960,9 +5259,7 @@ Are you sure you want to continue with this file? 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. -هناك خطر كبير للفساد، احتفظ بنسخة احتياطية من قواعد بياناتك. -هذا الإصدار ليس مخصصًا للاستخدام الإنتاجي. + NOTE: You are using a pre-release version of KeePassXC. @@ -5970,12 +5267,13 @@ Expect some bugs and minor issues, this version is meant for testing purposes. - No Tags - لا وسوم + 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. + Restore Entry(s) - استعد الإدخالاتاستعد الإدخالاتاستعد الإدخالاتاستعد الإدخالاتاستعد الإدخالاتاستعد الإدخالات + Settings @@ -5983,15 +5281,15 @@ Expect some bugs and minor issues, this version is meant for testing purposes. 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. - يمكنك دائمًا التحقق من التحديثات يدويًا من قائمة التطبيق. + Toggle window @@ -6001,328 +5299,16 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Quit KeePassXC إغلاق KeePassXC - - %1 Entry(s) - %1 إدخالإدخالإدخالين%1 إدخالات%1 إدخال%1 إدخال - Please present or touch your YubiKey to continue… - يرجى تقديم أو لمس YubiKey الخاص بك للمتابعة ... + Restart Application? - إعادة تشغيل التطبيق؟ + You must restart the application to apply this setting. Would you like to restart now? - يجب عليك إعادة تشغيل التطبيق لتطبيق هذا الإعداد. هل ترغب في إعادة تشغيل الآن؟ - - - Allow Screen Capture - اسمح بالتقاط الشاشة - - - 1Password 1PUX... - 1Password 1PUX... - - - Import a 1Password 1PUX file - استورد ملف 1Password 1PUX - - - Import… - استورد… - - - Passkeys… - - - - Import Passkey - استورِد Passkey - - - Remote S&ync… - - - - Quit Application - أنهِ التطبيق - - - Open About Dialog - - - - Open Database - افتح قاعدة بيانات - - - Create Database - - - - Merge From Database - - - - Create Entry - - - - Edit Entry - تعديل الإدخال - - - Delete Entry - - - - Create Group - - - - Edit Group - تحرير المجموعة - - - Delete Group - - - - Download All Favicons - - - - Sort Groups A-Z - - - - Sort Groups Z-A - - - - Save Database As - - - - Show Database Security - - - - Show Database Reports - - - - Show Database Settings - - - - Show Passkeys - - - - Clone Entry - - - - Move Entry Up - - - - Move Entry Down - - - - Copy Username - نسخ اسم المستخدم - - - Copy Password - نسخ كلمة المرور - - - Show Application Settings - - - - Show Password Generator - - - - Remove Passkey From Entry - - - - Perform Auto-Type: {USERNAME} - - - - Perform Auto-Type: {USERNAME}{ENTER} - - - - Perform Auto-Type: {PASSWORD} - - - - Perform Auto-Type: {PASSWORD}{ENTER} - - - - Perform Auto-Type: {TOTP} - - - - Copy Title - - - - Copy URL - - - - Copy Notes - - - - Export to CSV - - - - Export to HTML - - - - Import KeePass1 Database - استيراد قاعدة بيانات KeePass1 - - - Import 1Password Vault - - - - Import CSV File - - - - Show TOTP QR Code - - - - Set up TOTP - - - - Empty Recycle Bin - إفراغ سلة المهملات - - - Open Donation Website - - - - Open Bug Report - - - - Open Online Documentation - - - - Open Keyboard Shortcuts Guide - - - - Save Database Backup - - - - SSH Agent: Add Key - - - - SSH Agent: Remove Key - - - - Toggle Compact Mode - - - - Set Theme: Automatic - - - - Set Theme: Light - - - - Set Theme: Dark - - - - Set Theme: Classic - - - - Toggle Show Menubar - بدّل إظهار شريط القائمة - - - Toggle Show Toolbar - - - - Toggle Show Preview Panel - - - - Toggle Always on Top - - - - Toggle Hide Usernames - - - - Toggle Hide Passwords - - - - Export to XML - - - - Toggle Allow Screen Capture - - - - Show Group Panel - - - - Toggle Show Group Panel - - - - Setup Remote Sync… - - - - Password Generator - مولد كلمة السر - - - E&xpire Entry… - - - - Clear SSH Agent - - - - Clear all identities in ssh-agent @@ -6334,7 +5320,7 @@ Expect some bugs and minor issues, this version is meant for testing purposes. Edit database settings - تعديل إعدادات قاعدة البيانات + Unlock database @@ -6342,7 +5328,7 @@ Expect some bugs and minor issues, this version is meant for testing purposes. Unlock database to show more information - افتح قاعدة البيانات لإظهار المزيد من المعلومات + Lock database @@ -6359,14 +5345,6 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Disconnect this application - - Reset - صفّر - - - Reset any remembered decisions for this application - صفّر أي قرارات تم تذكرها لهذا التطبيق - Merger @@ -6382,6 +5360,26 @@ Expect some bugs and minor issues, this version is meant for testing purposes.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] @@ -6392,7 +5390,7 @@ Expect some bugs and minor issues, this version is meant for testing purposes. Deleting child %1 [%2] - جارِ حذف فرع %1 [%2] + Deleting orphan %1 [%2] @@ -6404,7 +5402,7 @@ Expect some bugs and minor issues, this version is meant for testing purposes. Adding missing icon %1 - إضافة أيقونة مفقودة ٪1 + Removed custom data %1 [%2] @@ -6435,33 +5433,41 @@ Expect some bugs and minor issues, this version is meant for testing purposes. Encryption 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 + NewDatabaseWizardPageDatabaseKey Database Credentials - بيانات اعتماد قاعدة البيانات + A set of credentials known only to you that protects your database. - مجموعة من بيانات الاعتماد المعروفة لك فقط والتي تحمي قاعدة البيانات الخاصة بك. + NewDatabaseWizardPageEncryption Encryption Settings - إعدادات التشفير + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. - يمكنك هنا ضبط إعدادات تعمية قاعدة البيانات. لا تقلق، يمكنك تغييرها لاحقًا في إعدادات قاعدة البيانات. + @@ -6472,25 +5478,6 @@ Expect some bugs and minor issues, this version is meant for testing purposes. Please fill in the display name and an optional description for your new database: - يُرجى ملء اسم العرض والوصف الاختياري لقاعدة البيانات الجديدة الخاصة بك: - - - - NewEntryAttachmentsDialog - - Attachment name cannot be empty - - - - Attachment with the same name already exists - - - - Save attachment - احفظ المرفق - - - New entry attachment @@ -6498,7 +5485,7 @@ Expect some bugs and minor issues, this version is meant for testing purposes.NixUtils Password Manager - مدير كلمة المرور + Global shortcut already registered to %1 @@ -6513,7 +5500,7 @@ Expect some bugs and minor issues, this version is meant for testing purposes.OpData01 Invalid OpData01, does not contain header - OpData01 غير صالح، ولا يحتوي على ترويسة + Unable to read all IV bytes, wanted 16 but got %1 @@ -6533,30 +5520,38 @@ Expect some bugs and minor issues, this version is meant for testing purposes. Unable to process clearText in place - غير قادر على معالجة النص الواضح في مكانه + Expected %1 bytes of clear-text, found %2 - من المتوقع وجود %1 بايت من النص العادي، وتم العثور على %2 + + + + + OpVaultOpenWidget + + Read Database did not produce an instance +%1 + OpVaultReader Directory .opvault must exist - يجب أن يكون المجلد .opvault موجودا + Directory .opvault must be readable - يجب أن يكون المجلد .opvault قابل للقراءة + Directory .opvault/default must exist - يجب أن يكون المجلد .opvault/default موجودا + Directory .opvault/default must be readable - يجب أن يكون المجلد opvault/default. قابل للقراءة + Unable to decode masterKey: %1 @@ -6613,10 +5608,6 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Unknown cipher: %1 تشفير غير معروف: %1 - - AES-256/GCM is currently not supported - - Passphrase is required to decrypt this key عبارة المرور مطلوبة لفك تشفير المفتاح @@ -6639,7 +5630,7 @@ Expect some bugs and minor issues, this version is meant for testing purposes. Decryption failed: %1 - فشل فك التعمية: %1 + Decryption failed, wrong passphrase? @@ -6681,179 +5672,27 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Unexpected EOF when writing private key نهاية الملف غير معروفة عند قراءة المفتاح الخاص - - (encrypted) - (مُعمّى) - - OpenSSHKeyGenDialog + PasswordEdit - SSH Key Generator + Passwords do not match - Type - نوع - - - Bits + Passwords match so far - Comment - تعليق - - - - PasskeyExportDialog - - KeePassXC - Passkey Export - KeePassXC - تصدير Passkey - - - Filenames will be generated with title and .passkey file extension. + Toggle Password (%1) - Export entries - تصدير الإدخالات - - - Export Selected - تصدير المحدد - - - Cancel - ألغأ - - - Export to folder - صدّر إلى مجلد - - - Export the following passkey entries. - تصدير إدخالات passkey التالية. - - - - PasskeyExporter - - KeePassXC: Passkey Export - KeePassXC: تصدير Passkey - - - File "%1.passkey" already exists. -Do you want to overwrite it? - + Generate Password (%1) - Cannot open file - لا يمكن فتح الملف - - - Cannot open file "%1" for writing. - لا يمكن فتح الملف "%1" للكتابة. - - - Cannot write to file - لا يمكن الكتابة إلى الملف - - - - PasskeyImportDialog - - KeePassXC - Passkey Import - - - - Username: %1 - اسم المستخدم: %1 - - - Group - المجموعة - - - Database - - - - Import Passkey - استورِد Passkey - - - Import - إستيراد - - - Cancel - ألغأ - - - Entry - مُدخلة - - - Create new entry - - - - Relying Party: %1 - - - - Import the following passkey: - - - - Import the following passkey to this entry: - - - - Default passkeys group (Imported Passkeys) - - - - - PasskeyImporter - - Passkey file - - - - All files - كل الملفات - - - Cannot open file - لا يمكن فتح الملف - - - Cannot open file "%1" for reading. - لا يمكن فتح الملف "%1" للقراءة. - - - Open passkey file - فتح ملف مفتاح المرور - - - Cannot import passkey - - - - Cannot import passkey file "%1". Data is missing. - - - - Cannot import passkey file "%1". -The following data is missing: -%2 - - - - Cannot import passkey file "%1". Private key is missing or malformed. + Warning: Caps Lock enabled! @@ -6865,15 +5704,15 @@ The following data is missing: Password field - حقل كلمة المرور + Confirm password: - تأكيد كلمة المرور: + Repeat password field - حقل تكرار كلمة المرور + Password @@ -6881,34 +5720,34 @@ The following data is missing: Add Password - أضِف كلمة المرور + Change Password - تغيير كلمة المرور + Remove Password - إزالة كلمة المرور + Password set, click to change or remove - تم تعيين كلمة المرور، انقر للتغيير أو الإزالة + <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. - كلمة المرور غير مطابقة. + PasswordGeneratorWidget Generate Password - ولّد كلمة مرور + strength @@ -6921,7 +5760,7 @@ The following data is missing: Generated password - كلمة المرور المولّدة + %p% @@ -6929,7 +5768,7 @@ The following data is missing: Regenerate password - إعادة توليد كلمة المرور + Copy password @@ -6945,7 +5784,7 @@ The following data is missing: Password length - طول كلمة المرور + Switch to advanced mode @@ -6965,19 +5804,19 @@ The following data is missing: Quotes - علامات اقتباس + Punctuation - علامات الترقيم + Dashes and Slashes - الشرطات والشرطة المائلة + Upper-case letters - أحرف الكبيرة + Numbers @@ -6985,11 +5824,11 @@ The following data is missing: Lower-case letters - أحرف صغيرة + Math Symbols - رموز الرياضيات + Extended ASCII @@ -6997,35 +5836,35 @@ The following data is missing: Braces - أقواس + Do not include: - لا تشمل: + Additional characters to use for the generated password - مِحرَفات إضافية لاستخدامها لكلمة المرور الموَلّدة + Additional characters - أحرف إضافية + Add non-hex letters to "do not include" list - إضافة الأحرف الغير سداسية عشرية إلى قائمة "لا تشمل" + Hex Passwords - كلمات المرور السداسية + Hex - أحرف سداسية عشرية + Character set to exclude from generated password - مجموعة مِحرَفات لاستبعادها من كلمة المرور الموَلّدة + Excluded characters @@ -7033,7 +5872,11 @@ The following data is missing: Also choose from: - اختر أيضا من: + + + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + Exclude look-alike characters @@ -7059,9 +5902,13 @@ The following data is missing: Word Count: عدد الكلمات: + + Character Count: + + Word Case: - حالة أحرف الكلمات: + Delete selected wordlist @@ -7069,7 +5916,11 @@ The following data is missing: Add custom wordlist - إضافة قائمة كلمات مخصصة + + + + character + Close @@ -7081,23 +5932,23 @@ The following data is missing: Apply Password - طبّق كلمة المرور + Regenerate password (%1) - إعادة توليد كلمة المرور (%1) + lower case - صغيرة + UPPER CASE - كبيرة + Title Case - تكبير الحرف الأول + (SYSTEM) @@ -7107,30 +5958,6 @@ The following data is missing: Entropy: %1 bit Entropy: %1 bit - - Password Quality: %1 - جودة كلمة المرور: %1 - - - Poor - Password quality - ضعيف جدا - - - Weak - Password quality - ضعيفة - - - Good - Password quality - جيدة - - - Excellent - Password quality - ممتازة - Confirm Delete Wordlist @@ -7177,47 +6004,8 @@ Do you want to overwrite it? محارف خاصة - passwordLength - طول كلمة المرور - - - Characters: %1 - - - - MIXED case - - - - Excluded characters: "0", "1", "l", "I", "O", "|", "﹒", "B", "8", "G", "6" - - - - - PasswordWidget - - Passwords do not match - كلمة المرور غير مطابقة - - - Passwords match so far - كلمات المرور متطابقة حتى الآن - - - Toggle Password (%1) - عرض كلمة المرور (٪1) - - - Generate Password (%1) - ولد - - - Warning: Caps Lock enabled! - تحذير: Caps Lock مُفعّل! - - - Quality: %1 - الجودة: %1 + Password Quality: %1 + جودة كلمة المرور: %1 Poor @@ -7239,10 +6027,6 @@ Do you want to overwrite it? Password quality ممتازة - - Toggle password visibility using Control + H. Open the password generator using Control + G. - - PickcharsDialog @@ -7259,26 +6043,11 @@ Do you want to overwrite it? - - PreviewEntryAttachmentsDialog - - Preview entry attachment - معاينة إدخال المرفق - - - No preview available - لا يوجد معاينة متاحة - - - Image format not supported - - - QMessageBox Overwrite - الكتابة فوقه + Delete @@ -7286,11 +6055,11 @@ Do you want to overwrite it? Move - تحريك + Empty - تفريغ + Remove @@ -7298,7 +6067,7 @@ Do you want to overwrite it? Skip - تخطي + Disable @@ -7306,15 +6075,11 @@ Do you want to overwrite it? Merge - دمج + Continue - استمرار - - - Continue with weak password - تابع بكلمة مرور ضعيفة + @@ -7341,7 +6106,7 @@ Do you want to overwrite it? Message encryption failed. - فشل تعمية الرسالة. + KeePassXC association failed, try again @@ -7373,7 +6138,7 @@ Do you want to overwrite it? Cannot create new group - لا يمكن إنشاء مجموعة جديدة + No valid UUID provided @@ -7413,7 +6178,7 @@ Do you want to overwrite it? Notes for the entry. - ملاحظات للإدخال. + Notes @@ -7437,7 +6202,7 @@ Do you want to overwrite it? Cannot generate a password and prompt at the same time. - لا يمكن توليد كلمة مرور والمطالبة في نفس الوقت. + Could not create entry with path %1. @@ -7445,7 +6210,7 @@ Do you want to overwrite it? Enter password for new entry: - أدخل كلمة المرور للمُدخل الجديد: + Writing the database failed %1. @@ -7453,11 +6218,11 @@ Do you want to overwrite it? Successfully added entry %1. - تمت إضافة الإدخال ٪1 بنجاح. + Adds a new group to a database. - يضيف مجموعة جديدة إلى قاعدة البيانات. + Path of the group to add. @@ -7465,11 +6230,11 @@ Do you want to overwrite it? Group %1 already exists! - المجموعة ٪1 موجودة بالفعل! + Group %1 not found. - لم يتم العثور على المجموعة ٪1. + Successfully added group %1. @@ -7477,7 +6242,7 @@ Do you want to overwrite it? Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. - تحقق مما إذا كان قد تم تسريب أي كلمات مرور علنًا. يجب أن يكون FILENAME هو مسار ملف يسرد تجزئات SHA-1 لكلمات المرور المسربة بتنسيق HIBP، كما هو متاح من https://haveibeenpwned.com/Passwords. + FILENAME @@ -7489,23 +6254,23 @@ Do you want to overwrite it? okon-cli - okon-cli + Analyze passwords for weaknesses and problems. - تحليل كلمات المرور بحثا عن نقاط الضعف والمشاكل. + Cannot find HIBP file: %1 - لا يمكن العثور على ملف HIBP؜: ٪1 + Evaluating database entries using okon… - تقييم إدخالات قاعدة البيانات باستخدام okon ... + Failed to open HIBP file %1: %2 - فشل فتح ملف HIBP؜ ٪1: ٪2 + Evaluating database entries against HIBP file, this will take a while… @@ -7513,15 +6278,15 @@ Do you want to overwrite it? Password for '%1' has been leaked %2 time(s)! - تم تسريب كلمة مرور لـ'%1' ٪2 مرة!تم تسريب كلمة مرور لـ'%1' مرة واحدة!تم تسريب كلمة مرور لـ'%1' مرتين!تم تسريب كلمة مرور لـ'%1' ٪2 مرات!تم تسريب كلمة مرور لـ'%1' ٪2 مرة!تم تسريب كلمة مرور لـ'%1' ٪2 مرة! + Password for '%1' has been leaked! - تم تسريب كلمة مرور لـ'%1'! + Export an attachment of an entry. - تصدير مرفق إدخال. + Path of the entry with the target attachment. @@ -7529,31 +6294,31 @@ Do you want to overwrite it? Name of the attachment to be exported. - اسم المرفق المراد تصديره. + Path to which the attachment should be exported. - المسار الذي يجب تصدير المرفق إليه. + Could not find entry with path %1. - تعذر العثور على إدخال مع المسار ٪1. + Could not find attachment with name %1. - تعذر العثور على مرفق بالاسم ٪1. + No export target given. Please use '--stdout' or specify an 'export-file'. - لم يتم إعطاء هدف للتصدير. الرجاء استخدام '--stdout' أو تحديد 'export-file'. + Could not open output file %1. - تعذر فتح ملف الإخراج ٪ 1. + Successfully exported attachment %1 of entry %2 to %3. - تم تصدير المرفق ٪1 من الإدخال ٪2 إلى ٪3 بنجاح. + Overwrite existing attachments. @@ -7561,39 +6326,39 @@ Do you want to overwrite it? Imports an attachment to an entry. - يستورد مرفق إلى إدخال. + Path of the entry. - مسار الإدخال. + Name of the attachment to be added. - اسم المرفق المراد إضافته. + Path of the attachment to be imported. - مسار المرفق المراد استيراده. + Attachment %1 already exists for entry %2. - المرفق ٪1 موجود بالفعل للإدخال ٪2. + Could not open attachment file %1. - تعذر فتح ملف المرفق ٪ 1. + Successfully imported attachment %1 as %2 to entry %3. - تم استيراد المرفق ٪1 كـ ٪2 إلى الإدخال ٪3 بنجاح. + Remove an attachment of an entry. - إزالة مرفق إدخال. + Name of the attachment to be removed. - اسم المرفق المراد إزالته. + Successfully removed attachment %1 from entry %2. @@ -7602,11 +6367,11 @@ Do you want to overwrite it? Copy the given attribute to the clipboard. Defaults to "password" if not specified. Don't translate "password", it refers to the attribute. - انسخ الصفة المحددة إلى الحافظة. الإعدادات الافتراضية هي "كلمة المرور" إذا لم يتم تحديدها. + Copy the current TOTP to the clipboard (equivalent to "-a totp"). - انسخ TOTP الحالي إلى الحافظة (أي ما يعادل "-a totp"). + Must match only one entry, otherwise a list of possible matches is shown. @@ -7614,7 +6379,7 @@ Do you want to overwrite it? Copy an entry's attribute to the clipboard. - انسخ سمة الإدخال إلى الحافظة. + Path of the entry to clip. @@ -7623,7 +6388,7 @@ Do you want to overwrite it? Timeout before clearing the clipboard (default is %1 seconds, set to 0 for unlimited). - انتهت المهلة قبل مسح الحافظة (الافتراضي هو %1 ثانية، وتم ضبطه على 0 لعدد غير محدود). + Invalid timeout value %1. @@ -7643,43 +6408,43 @@ Do you want to overwrite it? ERROR: Please specify one of --attribute or --totp, not both. - خطأ: يُرجى تحديد أحد --attribute أو --totp، وليس كليهما. + Entry with path %1 has no TOTP set up. - الإدخال ذو المسار %1 ليس له إعداد TOTP. + ERROR: attribute %1 is ambiguous, it matches %2. - خطأ: الصفة %1 غامضة، وهي تطابق %2. + Attribute "%1" not found. - لم يتم العثور على صفة "%1". + Entry's "%1" attribute copied to the clipboard! - نسخت صفة الإدخال "%1" إلى الحافظة! + Clearing the clipboard in %1 second(s)... - مسح الحافظة في ٪1 ثانية...مسح الحافظة في ٪1 ثانية...مسح الحافظة في ٪1 ثانيتين...مسح الحافظة في ٪1 ثوان...مسح الحافظة في ٪1 ثانية...مسح الحافظة في ٪1 ثانية... + Clipboard cleared! - تم مسح الحافظة! + Close the currently opened database. - أغلق قاعدة البيانات المفتوحة حاليا. + Display this help. - عرض هذه المساعدة. + Silence password prompt and other secondary outputs. - إسكات كلمة المرور والمخرجات الثانوية الأخرى. + Key file of the database. @@ -7691,7 +6456,7 @@ Do you want to overwrite it? Deactivate password key for the database. - إلغاء تنشيط مفتاح كلمة المرور لقاعدة البيانات. + Yubikey slot and optional serial used to access the database (e.g., 1:7370001). @@ -7709,13 +6474,9 @@ Do you want to overwrite it? Too many arguments provided. - - Path of the database. - مسار قاعدة البيانات. - Target decryption time in MS for the database. - وقت فك التشفير المستهدف بالميجا بايت لقاعدة البيانات. + time @@ -7727,23 +6488,27 @@ Do you want to overwrite it? Set a password for the database. - عيّن كلمة مرور لقاعدة البيانات. + Create a new database. - إنشاء قاعدة بيانات جديدة. + + + + Path of the database. + مسار قاعدة البيانات. Invalid decryption time %1. - وقت فك التعمية غير صالح ٪1. + Target decryption time must be between %1 and %2. - يجب أن يكون وقت فك التعمية المستهدف بين %1 و%2. + Failed to set database password. - فشل في تعيين كلمة مرور قاعدة البيانات. + Loading the key file failed @@ -7763,7 +6528,7 @@ Do you want to overwrite it? error while setting database key derivation settings. - خطأ أثناء تعيين إعدادات اشتقاق مفتاح قاعدة البيانات. + File %1 already exists. @@ -7771,162 +6536,10 @@ Do you want to overwrite it? Failed to save the database: %1. - فشل حفظ قاعدة البيانات: %1. + Successfully created new database. - تم إنشاء قاعدة بيانات جديدة بنجاح. - - - Unset the password for the database. - ألغِ تعيين كلمة المرور لقاعدة البيانات. - - - Unset the key file for the database. - - - - Edit a database. - حرّر قاعدة بيانات. - - - Cannot use %1 and %2 at the same time. - - - - Could not change the database key. - تعذر تغيير مفتاح قاعدة البيانات. - - - Database was not modified. - لم يتم تعديل قاعدة البيانات. - - - Writing the database failed: %1 - فشلت كتابة قاعدة البيانات: %1 - - - Successfully edited the database. - تم تحرير قاعدة البيانات بنجاح. - - - Cannot remove password: The database does not have a password. - لا يمكن إزالة كلمة المرور: لا تحتوي قاعدة البيانات على كلمة مرور. - - - Cannot remove file key: The database does not have a file key. - - - - Loading the new key file failed: %1 - - - - Found unexpected Key type %1 - - - - Cannot remove all the keys from a database. - - - - Show a database's information. - - - - UUID: - - - - Name: - الاسم: - - - Description: - الوصف: - - - Cipher: - - - - KDF: - - - - Recycle bin is enabled. - سلة المهملات مُفعّلة. - - - Recycle bin is not enabled. - سلة المهملات غير مُفعّلة. - - - Location - - - - Database created - - - - Last saved - آخر حفظ - - - Unsaved changes - التغييرات غير المحفوظة - - - yes - نعم - - - no - لا - - - Number of groups - - - - Number of entries - عدد الإدخالات - - - Number of expired entries - عدد المدخلات منتهية الصلاحية - - - Unique passwords - كلمات مرور فريدة - - - Non-unique passwords - كلمات مرور غير فريدة - - - Maximum password reuse - الحد الأقصى لإعادة استخدام كلمة المرور - - - Number of short passwords - عدد كلمات المرور القصيرة - - - Number of weak passwords - عدد كلمات المرور الضعيفة - - - Entries excluded from reports - الإدخالات المستبعدة من التقارير - - - Average password length - متوسط ​​طول كلمة المرور - - - %1 characters @@ -7950,7 +6563,11 @@ Do you want to overwrite it? Invalid word count %1 - عدد كلمات غير صالح ٪1 + + + + The word list is too small (< 1000 items) + Title for the entry. @@ -7974,11 +6591,15 @@ Do you want to overwrite it? Enter new password for entry: - أدخل كلمة مرور جديدة للمُدخل: + + + + Writing the database failed: %1 + Successfully edited entry %1. - تم حذف تعديل الإدخالة ٪1 بنجاح. + Perform advanced analysis on the password. @@ -8090,19 +6711,23 @@ Do you want to overwrite it? *** Password length (%1) != sum of length of parts (%2) *** - *** طول كلمة المرور (%1) != مجموع طول الأجزاء (%2) *** + Exit interactive mode. + + Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. + + Exports the content of a database to standard output in the specified format. - يقوم بتصدير محتوى قاعدة البيانات إلى إخراج قياسي بالتنسيق المحدد. + Unable to export database to XML: %1 - غير قادر على تصدير قاعدة البيانات إلى XML: ‏%1 + Unsupported format %1 @@ -8110,7 +6735,7 @@ Do you want to overwrite it? Length of the generated password - طول كلمة المرور التي ولّدتها + length @@ -8122,7 +6747,7 @@ Do you want to overwrite it? Use uppercase characters - استخدام الأحرف الكبيرة + Use numbers @@ -8162,15 +6787,15 @@ Do you want to overwrite it? Invalid password length %1 - طول كلمة المرور %1 غير صالح + Invalid password generator after applying all options - مولّد كلمة المرور غير صالح بعد تطبيق جميع الخيارات + Display command help. - عرض تعليمات الأمر. + Available commands: @@ -8182,11 +6807,11 @@ Do you want to overwrite it? Path of the XML database export. - مسار تصدير قاعدة بيانات XML. + Path of the new database. - مسار قاعدة البيانات الجديدة. + Unable to import XML database: %1 @@ -8196,6 +6821,106 @@ Do you want to overwrite it? Successfully imported database. + + Show a database's information. + + + + UUID: + + + + Name: + الاسم: + + + Description: + الوصف: + + + Cipher: + + + + KDF: + + + + Recycle bin is enabled. + + + + Recycle bin is not enabled. + + + + Location + + + + Database created + + + + Last saved + + + + Unsaved changes + + + + yes + + + + no + + + + Number of groups + + + + Number of entries + + + + Number of expired entries + + + + Unique passwords + + + + Non-unique passwords + + + + Maximum password reuse + + + + Number of short passwords + + + + Number of weak passwords + + + + Entries excluded from reports + + + + Average password length + + + + %1 characters + + Unknown command %1 @@ -8216,7 +6941,7 @@ Available commands: Displays debugging information. - يعرض معلومات التصحيح. + Invalid command %1. @@ -8252,7 +6977,7 @@ Available commands: Deactivate password key for the database to merge from. - قم بإلغاء تنشيط مفتاح كلمة المرور لقاعدة البيانات المراد الدمج منها. + Only print the changes detected by the merge operation. @@ -8277,12 +7002,11 @@ Available commands: Error reading merge file: %1 - خطأ في قراءة ملف الدمج: -%1 + Unable to save database to file : %1 - غير قادر على حفظ قاعدة البيانات في الملف : %1 + Successfully merged %1 into %2. @@ -8290,11 +7014,11 @@ Available commands: Database was not modified by merge operation. - لم يتم تعديل قاعدة البيانات من خلال عملية الدمج. + Moves an entry to a new group. - ينقل مُدخل إلى مجموعة جديدة. + Path of the entry to move. @@ -8318,7 +7042,7 @@ Available commands: Open a database. - افتح قاعدة البيانات. + Path of the entry to remove. @@ -8326,7 +7050,7 @@ Available commands: Unable to save database to file: %1 - غير قادر على حفظ قاعدة البيانات في الملف: %1 + Successfully recycled entry %1. @@ -8334,7 +7058,7 @@ Available commands: Successfully deleted entry %1. - تم حذف المُدخل ٪1 بنجاح. + Path of the group to remove. @@ -8342,7 +7066,7 @@ Available commands: Cannot remove root group from database. - لا يمكن إزالة المجموعة الجذرية من قاعدة البيانات. + Successfully recycled group %1. @@ -8350,7 +7074,7 @@ Available commands: Successfully deleted group %1. - حذفت المجموعة %1 بنجاح. + Find entries quickly. @@ -8362,15 +7086,11 @@ Available commands: Show the entry's current TOTP. - أظهِر TOTP الحالي للمدخل. + Show the protected attributes in clear text. - أظهِر الصفات المحمية بنص واضح. - - - Show all the attributes of the entry. - إظهار جميع سمات الإدخال. + Show the attachments of the entry. @@ -8394,7 +7114,7 @@ Available commands: ERROR: unknown attribute %1. - خطأ: الصفة %1 غير معروفة. + No attachments present. @@ -8406,19 +7126,19 @@ Available commands: Failed to open database file %1: not found - فشل فتح ملف قاعدة البيانات %1: غير موجود + Failed to open database file %1: not a plain file - فشل فتح ملف قاعدة البيانات %1: ليس ملفًا عاديًا + Failed to open database file %1: not readable - فشل فتح ملف قاعدة البيانات %1: غير قابل للقراءة + Enter password to unlock %1: - أدخل كلمة المرور لإلغاء قفل ٪1: + Failed to load key file %1: %2 @@ -8429,10 +7149,7 @@ Available commands: stop supporting in the future. Please consider generating a new key file. - تحذير: أنت تستخدم تنسيق ملف مفتاح قديم قد يتوقف KeePassXC -عن دعمة في المستقبل. - -يُرجى النظر في إنشاء ملف مفتاح جديد. + Invalid YubiKey slot %1 @@ -8443,28 +7160,28 @@ Please consider generating a new key file. - Please present or touch your YubiKey to continue. - يرجى تقديم أو لمس YubiKey الخاص بك للمتابعة + Please present or touch your YubiKey to continue… + Enter password to encrypt database (optional): - أدخل كلمة المرور لتعمية قاعدة البيانات (اختياري): + Do you want to create a database with an empty password? [y/N]: - هل تريد إنشاء قاعدة بيانات بكلمة مرور فارغة؟ [y/N]: + Repeat password: - اعِد كلمة المرور: + Error: Passwords do not match. - خطأ: كلمات المرور غير متطابقة. + No program defined for clipboard manipulation - لم يُعرّف أي برنامج لمعالجة الحافظة + All clipping programs failed. Tried %1 @@ -8473,11 +7190,11 @@ Please consider generating a new key file. Creating KeyFile %1 failed: %2 - فشل إنشاء KeyFile %1: %2 + Loading KeyFile %1 failed: %2 - فشل تحميل KeyFile %1: %2 + HIBP file, line %1: parse error @@ -8493,7 +7210,7 @@ Please consider generating a new key file. Error: okon process did not finish - خطأ: لم تنتهي عملية okon + Failed to load okon processed database: %1 @@ -8501,15 +7218,15 @@ Please consider generating a new key file. Very weak password - كلمة المرور ضعيفة جدًا + Password entropy is %1 bits - احتمال كلمة المرور هي %1 بت + Weak password - كلمة المرور ضعيفة + Used in %1/%2 @@ -8517,31 +7234,31 @@ Please consider generating a new key file. Password is used %1 time(s) - استخدُمت كلمة المرور %1 مرةاستخدُمت كلمة المرور مرةاستخدُمت كلمة المرور مرتاناستخدُمت كلمة المرور %1 مراتاستخدُمت كلمة المرور %1 مرةاستخدُمت كلمة المرور %1 مرة + Password has expired - انتهت صلاحية كلمة المرور + Password expiry was %1 - انتهاء صلاحية كلمة المرور كان %1 + Password expires on %1 - تنتهي صلاحية كلمة المرور في ٪1 + Password is about to expire - ستنتهي صلاحية كلمة المرور + Password expires in %1 day(s) - تنتهي صلاحية كلمة المرور في ٪1 يوم (أيام)تنتهي صلاحية كلمة المرور في ٪1 يوم (أيام)تنتهي صلاحية كلمة المرور في ٪1 يوم (أيام)تنتهي صلاحية كلمة المرور في ٪1 يوم (أيام)تنتهي صلاحية كلمة المرور في ٪1 يوم (أيام)تنتهي صلاحية كلمة المرور في %1 يوم/أيام + Password will expire soon - ستنتهي صلاحية كلمة المرور قريبا + Version %1 @@ -8585,15 +7302,15 @@ Kernel: %3 %4 KeeShare - KeeShare + YubiKey - YubiKey + Quick Unlock - فتح سريع + Secret Service Integration @@ -8601,7 +7318,7 @@ Kernel: %3 %4 None - لا شيء + Enabled extensions: @@ -8613,7 +7330,7 @@ Kernel: %3 %4 about %1 month(s) - حوالي ٪1 شهرحوالي ٪1 شهر (أشهر)حوالي شهرينحوالي ٪1 أشهرحوالي ٪1 شهرحوالي ٪1 شهر + %1 week(s) @@ -8625,14 +7342,14 @@ Kernel: %3 %4 %1 hour(s) - ٪1 ساعةساعةساعتين٪1 ساعات٪1 ساعة٪1 ساعة + %1 minute(s) - Botan library must be at least %1, found %2.%3.%4 + Botan library must be at least 2.11.x, found %1.%2.%3 @@ -8645,7 +7362,7 @@ Kernel: %3 %4 Argon2%1 (%2 rounds, %3 KB) - Argon2%1 (%2 جولات، %3 ك.بايت) + SymmetricCipher::init: Invalid cipher mode. @@ -8683,6 +7400,18 @@ Kernel: %3 %4 file empty ملف فارغ + + malformed string + سلسلة غير صحيحة + + + missing closing quote + إغلاق الإقتباس مفقود + + + %1: (row, col) %2,%3 + + AES 256-bit @@ -8697,11 +7426,11 @@ Kernel: %3 %4 Argon2d (KDBX 4 – recommended) - Argon2d (KDBX 4 – موصى به) + Argon2id (KDBX 4) - Argon2id (KDBX 4) + AES-KDF (KDBX 4) @@ -8721,7 +7450,7 @@ Kernel: %3 %4 Clearing the clipboard in %1 second(s)… - مسح الحافظة في ٪1 ثانية…مسح الحافظة في ٪1 ثانية…مسح الحافظة في ٪1 ثانيتين…مسح الحافظة في ٪1 ثوان…مسح الحافظة في ٪1 ثانية…مسح الحافظة في ٪1 ثانية… + Group @@ -8741,7 +7470,7 @@ Kernel: %3 %4 TOTP - باسورد مؤقت + Icon @@ -8762,16 +7491,16 @@ Kernel: %3 %4 %1 ms milliseconds - %1 مل.ثانية%1 مل.ثانية%1 مل.ثانية%1 مل.ثانية%1 مل.ثانية%1 مل.ثانية + %1 s seconds - %1 ثانيةثانية واحدةثانيتان%1 ثواني%1 ثانية%1 ثانية + Do you really want to delete the entry "%1" for good? - هل تريد حقًا حذف الإدخال "%1" بشكل دائم؟ + Do you really want to delete %n entry(s) for good? @@ -8783,15 +7512,15 @@ Kernel: %3 %4 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 إدخالاً إلى سلة المهملات؟ + Move entry(s) to recycle bin? - انقل الإدخالات إلى سلة المهملات؟انقل الإدخال إلى سلة المهملات؟انقل الإدخالات إلى سلة المهملات؟انقل الإدخالات إلى سلة المهملات؟انقل الإدخالات إلى سلة المهملات؟انقل الإدخالات إلى سلة المهملات؟ + Replace references to entry? @@ -8803,7 +7532,7 @@ Kernel: %3 %4 User name - اسم المستخدم + Browser Statistics @@ -8811,7 +7540,7 @@ Kernel: %3 %4 Health Check - فحص الصحة + HIBP @@ -8851,7 +7580,7 @@ Kernel: %3 %4 lock all open databases - قفل جميع قواعد البيانات المفتوحة + key file of the database @@ -8861,18 +7590,22 @@ Kernel: %3 %4 read password of the database from stdin قراءة كلمة سر قاعدة البيانات من الدخل القياسي "stdin" + + allow app screen recordering and screenshots + + + + Locked databases. + + Database failed to lock. - فشل قفل قاعدة البيانات. + Another instance of KeePassXC is already running. نسخة أخرى من KeePassXC قيد التشغيل. - - KeePassXC is not running. No open database to lock - KeePassXC لا يعمل. لا توجد قاعدة بيانات مفتوحة لقفلها - Fatal error while testing the cryptographic functions. خطأ فادح أثناء اختبار وظائف التشفير. @@ -8881,14 +7614,18 @@ Kernel: %3 %4 KeePassXC - Error KeePassXC - خطأ + + Warning: Failed to prevent screenshots on a top level window! + + Database password: - كلمة مرور قاعدة البيانات: + Invalid Settings TOTP - إعدادات غير صالحة + Invalid Key @@ -8903,313 +7640,6 @@ Kernel: %3 %4 Failed to sign challenge using Windows Hello. - - Warning: Failed to block screenshot capture on a top-level window. - تحذير: فشل حظر التقاط لقطة الشاشة في نافذة المستوى الأعلى. - - - Invalid Cipher - - - - Invalid KDF - KDF غير صالح - - - Access to all entries is denied - - - - allow screenshots and app recording (Windows/macOS) - السماح بلقطات الشاشة وتسجيل التطبيق (Windows/macOS) - - - Set the key file for the database. -This option is deprecated, use --set-key-file instead. - - - - Databases have been locked. - لقد قُفلت قواعد البيانات. - - - Attestation not supported - - - - Credential is excluded - - - - Passkeys request canceled - أُلغِيَ طلب Passkeys - - - Invalid user verification - - - - Empty public key - المفتاح العام فارغ - - - Invalid URL provided - عنوان URL المقدم غير صالح - - - Passkeys - - - - AES initialization failed - - - - AES encrypt failed - - - - Failed to store in Linux Keyring - - - - Polkit returned an error: %1 - - - - Could not locate key in keyring - - - - Could not read key in keyring - - - - AES decrypt failed - - - - No Polkit authentication agent was available - - - - Polkit authorization failed - - - - No Quick Unlock provider is available - - - - Failed to init KeePassXC crypto. - - - - Failed to encrypt key data. - فشل في تعمية البيانات الرئيسية. - - - Failed to get Windows Hello credential. - - - - Failed to decrypt key data. - فشل فك تعمية البيانات الرئيسية. - - - Origin is empty or not allowed - - - - Effective domain is not a valid domain - - - - Origin and RP ID do not match - - - - No supported algorithms were provided - - - - Wait for timer to expire - انتظر حتى انتهاء الوقت - - - Challenge is shorter than required minimum length - - - - user.id does not match the required length - - - - Favorite - Tag for favorite entries - المفضلة - - - File does not exist. - - - - Cannot open file: %1 - لا يمكن فتح الملف: %1 - - - Cannot parse file: %1 at position %2 - - - - Failed to decrypt json file: %1 - فشل فك تعمية ملف json: ‏%1 - - - Invalid encKeyValidation field - - - - Invalid cipher list within encKeyValidation field - - - - Wrong password - كلمة مرور خاطئة - - - Invalid encrypted data field - حقل بيانات مُعمَّاة غير صالحة - - - Invalid cipher list within encrypted data field - قائمة تعمية غير صالحة ضمن حقل البيانات المُعمَّاة - - - Cannot initialize cipher - - - - Cannot decrypt data - لا يمكن فك تعمية البيانات - - - Bitwarden Import - استورد Bitwarden - - - Archived - Tag for archived entries - مؤرشف - - - Invalid 1PUX file format: Not a valid ZIP file. - - - - Invalid 1PUX file format: Missing export.data - تنسيق ملف 1PUX غير صالح: بيانات التصدير مفقودة - - - 1Password Import - استورد 1Password - - - Enter Shortcut - - - - Action - - - - Shortcuts - - - - Unknown passkeys error - - - - Invalid KDF iterations, cannot decrypt json file - تكرارات KDF غير صالحة، لا يمكن فك تشفير ملف json - - - Unsupported format, ensure your Bitwarden export is password-protected - التنسيق غير مدعوم، تأكد من أن تصدير Bitwarden الخاص بك محمي بكلمة مرور - - - Only PBKDF and Argon2 are supported, cannot decrypt json file - يتم دعم PBKDF وArgon2 فقط، ولا يمكن فك تعمية ملف json - - - Reset Shortcuts - - - - Double click an action to change its shortcut - - - - Filter... - - - - Shortcut Conflict - - - - Shortcut %1 conflicts with '%2'. Overwrite shortcut? - - - - Cannot generate valid passphrases because the wordlist is too short - - - - Encrypted files are not supported. - لا يتم دعم الملفات المشفرة. - - - Proton Pass Import - استورد Proton Pass - - - Delete plugin data? - حذف بيانات الإضافة؟ - - - Delete plugin data from Entry(s)? - - - - Passkey - - - - Format to use when exporting. Available choices are 'xml', 'csv' or 'html'. Defaults to 'xml'. - - - - start minimized to the system tray - - - - malformed string, possible unescaped delimiter - - - - missing closing delimiter - - - - %1, row: %2, column: %3 - - - - Tags - وسوم - QtIOCompressor @@ -9245,54 +7675,35 @@ This option is deprecated, use --set-key-file instead. خطأ zlib داخلي: - - RemoteHandler - - Command `%1` did not finish in time. Process was killed. - - - - Failed to upload merged database. Command `%1` did not finish in time. Process was killed. - - - - Invalid download parameters provided. - - - - Command `%1` failed to download database. - - - - Invalid database pointer or upload parameters provided. - - - - Command `%1` exited with status code: %2 - - - - Failed to upload merged database. Command `%1` exited with status code: %2 - - - ReportsWidgetBrowserStatistics + + Exclude expired entries from the report + + + + Show only entries which have URL set + + + + Show only entries which have browser settings in custom data + + Double-click entries to edit. - انقر الإدخالات نقرا مزدوجا لتحريرها. + List of entry URLs - قائمة روابط URL الإدخالات + Entry has no URLs set - لم يتم تعيين روابط URL للإدخال + Allowed URLs - روابط URL المسموح بها + Entry has no Browser Integration settings @@ -9300,15 +7711,15 @@ This option is deprecated, use --set-key-file instead. Denied URLs - روابط URL المرفوضة + (Excluded) - (مستبعد) + This entry is being excluded from reports - تم استبعاد هذا الإدخال من التقارير + Please wait, browser statistics is being calculated… @@ -9316,7 +7727,7 @@ This option is deprecated, use --set-key-file instead. No entries with a URL, or none has browser extension settings saved. - لا توجد إدخالات تحتوي على عنوان URL، أو لم يُحفظ إعدادات امتداد المتصفح. + Title @@ -9324,70 +7735,61 @@ This option is deprecated, use --set-key-file instead. Path - مسار + URLs - روابط URL + Edit Entry… - تعديل الإدخالة… + Delete Entry(s)… - حذف الإدخال…حذف الإدخال…حذف الإدخالان…حذف الإدخالات…حذف الإدخالات…حذف الإدخالات… + Exclude from reports - استبعاد من التقارير - - - Expire Entry(s)… - - - - Only show entries that have a URL - أظهر الإدخالات التي لها عنوان URL فقط - - - Only show entries that have been explicitly allowed or denied - أظهِر فقط الإدخالات التي تم السماح بها أو رفضها بشكل صريح - - - Show expired entries - أظهِر الإدخالات منتهية الصلاحية - - - (Expired) - (منتهي) - - - Delete plugin data from Entry(s)… - + ReportsWidgetHealthcheck - Show expired entries - أظهِر الإدخالات منتهية الصلاحية + Exclude expired entries from the report + - (Expired) - (منتهي) + Also show entries that have been excluded from reports + Hover over reason to show additional details. Double-click entries to edit. - تحوم فوق السبب لعرض تفاصيل إضافية. قم بالنقر المزدوج على الإدخالات للتعديل. + + + + Bad + Password quality + سيئ Bad — password must be changed - سيئ - يجب تغيير كلمة المرور + + + + Poor + Password quality + ضعيف جدا Poor — password should be changed - ضعيف - يجب تغيير كلمة المرور + + + + Weak + Password quality + ضعيفة Weak — consider changing the password @@ -9395,11 +7797,11 @@ This option is deprecated, use --set-key-file instead. (Excluded) - (مستبعد) + This entry is being excluded from reports - تم استبعاد هذا الإدخال من التقارير + Please wait, health data is being calculated… @@ -9415,7 +7817,7 @@ This option is deprecated, use --set-key-file instead. Path - مسار + Score @@ -9427,30 +7829,22 @@ This option is deprecated, use --set-key-file instead. Edit Entry… - تعديل الإدخالة… + Delete Entry(s)… - حذف الإدخال…حذف الإدخال…حذف الإدخالان…حذف الإدخالات…حذف الإدخالات…حذف الإدخالات… - - - Exclude from reports - استبعاد من التقارير - - - Expire Entry(s)… - Show entries that have been excluded from reports - أظهِر الإدخالات التي تم استبعادها من التقارير + Exclude from reports + ReportsWidgetHibp CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. - تنبيه: يتطلب هذا التقرير إرسال معلومات إلى خدمة Have I Been Pwned عبر الإنترنت (https://haveibeenpwned.com). إذا تابعت، فسيتم تجزئة كلمات مرور قاعدة بياناتك بطريقة مُعمَّاة وسيتم إرسال الأحرف الخمسة الأولى من هذه التجزئة بشكل آمن إلى هذه الخدمة. تظل قاعدة بياناتك آمنة ولا يمكن إعادة تشكيلها من هذه المعلومات. ومع ذلك، سيتم عرض عدد كلمات المرور التي ترسلها وعنوان IP الخاص بك لهذه الخدمة. + Perform Online Analysis @@ -9458,15 +7852,15 @@ This option is deprecated, use --set-key-file instead. Also show entries that have been excluded from reports - أظهِر أيضًا الإدخالات التي تم استبعادها من التقارير + This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. - لا يحتوي هذا الإصدار من KeePassXC على وظائف الشبكة. يلزم الاتصال بالشبكة للتحقق من كلمات مرورك في قواعد بيانات Have I Been Pwned. + Congratulations, no exposed passwords! - تهانينا، لا توجد كلمات مرور مكشوفة! + Title @@ -9474,54 +7868,54 @@ This option is deprecated, use --set-key-file instead. Path - مسار + Password exposed… - كلمة المرور مُسرّبة… + (Excluded) - (مستبعد) + This entry is being excluded from reports - تم استبعاد هذا الإدخال من التقارير + once Password exposure amount - مرة + up to 10 times Password exposure amount - حتى 10 مرات + up to 100 times Password exposure amount - حتى 100 مرة + up to 1000 times Password exposure amount - حتى 1000 مرة + up to 10,000 times Password exposure amount - حتى 10,000 مرة + up to 100,000 times Password exposure amount - حتى 100,000 مرة + up to a million times Password exposure amount - حتى مليون مرة + millions of times @@ -9530,85 +7924,14 @@ This option is deprecated, use --set-key-file instead. Edit Entry… - تعديل الإدخالة… + Delete Entry(s)… - حذف الإدخال…حذف الإدخال…حذف الإدخالان…حذف الإدخالات…حذف الإدخالات…حذف الإدخالات… + Exclude from reports - استبعاد من التقارير - - - Expire Entry(s)… - - - - - ReportsWidgetPasskeys - - Export - تصدير - - - Import - إستيراد - - - List of entry URLs - قائمة روابط URL الإدخالات - - - Title - العنوان - - - Path - مسار - - - Username - اسم المستخدم - - - URLs - روابط URL - - - Edit Entry… - تعديل الإدخال… - - - Delete Entry(s)… - حذف الإدخال…حذف الإدخال…حذف الإدخالان…حذف الإدخالات…حذف الإدخالات…حذف الإدخالات… - - - Relying Party - - - - Show expired entries - أظهِر الإدخالات منتهية الصلاحية - - - (Expired) - (منتهي) - - - Export Confirmation - تأكيد التصدير - - - The passkey file will be vulnerable to theft and unauthorized use, if left unsecured. Are you sure you want to continue? - - - - Please wait, list of entries with passkeys is being updated… - الرجاء الانتظار، جارٍ تحديث قائمة الإدخالات التي تحتوي على مفاتيح المرور... - - - No entries with passkeys. @@ -9616,7 +7939,7 @@ This option is deprecated, use --set-key-file instead. ReportsWidgetStatistics Hover over lines with error icons for further information. - مرّر فوق الخطوط التي تحتوي على أيقونات الأخطاء للحصول على مزيد من المعلومات. + Name @@ -9632,11 +7955,11 @@ This option is deprecated, use --set-key-file instead. Database name - اسم قاعدة البيانات + Description - الوصف + Location @@ -9648,23 +7971,23 @@ This option is deprecated, use --set-key-file instead. Last saved - آخر حفظ + Unsaved changes - التغييرات غير المحفوظة + yes - نعم + no - لا + The database was modified, but the changes have not yet been saved to disk. - عدلّت قاعدة البيانات، ولكن لم تُحفظ التغييرات على القرص بعد. + Number of groups @@ -9672,63 +7995,63 @@ This option is deprecated, use --set-key-file instead. Number of entries - عدد الإدخالات + Number of expired entries - عدد المدخلات منتهية الصلاحية + The database contains entries that have expired. - تحتوي قاعدة البيانات على إدخالات منتهية الصلاحية. + Unique passwords - كلمات مرور فريدة + Non-unique passwords - كلمات مرور غير فريدة + More than 10% of passwords are reused. Use unique passwords when possible. - يتم إعادة استخدام أكثر من 10% من كلمات المرور. استخدم كلمات مرور فريدة عندما يكون ذلك ممكنًا. + Maximum password reuse - الحد الأقصى لإعادة استخدام كلمة المرور + Some passwords are used more than three times. Use unique passwords when possible. - يتم استخدام بعض كلمات المرور أكثر من ثلاث مرات. استخدم كلمات مرور فريدة عندما يكون ذلك ممكنًا. + Number of short passwords - عدد كلمات المرور القصيرة + Recommended minimum password length is at least 8 characters. - الحد الأدنى الموصى به لطول كلمة المرور هو 8 أحرف على الأقل. + Number of weak passwords - عدد كلمات المرور الضعيفة + Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. - نوصي باستخدام كلمات مرور طويلة وعشوائية بتقييم "جيد" أو "ممتاز". + Entries excluded from reports - الإدخالات المستبعدة من التقارير + Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. - باستثناء الإدخالات من التقارير، مثال: نظرًا لأنه من المعروف أن كلمات المرور الخاصة بهم سيئة، فهذا لا يمثل مشكلة بالضرورة ولكن يجب عليك مراقبتهم. + Average password length - متوسط ​​طول كلمة المرور + %1 characters @@ -9736,22 +8059,22 @@ This option is deprecated, use --set-key-file instead. Average password length is less than ten characters. Longer passwords provide more security. - متوسط ​​طول كلمة المرور أقل من عشرة أحرف. توفر كلمات المرور الأطول مزيدًا من الأمان. + SSHAgent Agent connection failed. - فشل اتصال العميل. + Agent protocol error. - خطأ في بروتوكول العميل. + No agent running, cannot add identity. - لا يوجد عميل قيد التشغيل، ولا يمكن إضافة هوية. + Key identity ownership conflict. Refusing to add. @@ -9759,7 +8082,7 @@ This option is deprecated, use --set-key-file instead. Agent refused this identity. Possible reasons include: - رفض العميل هذه الهوية. تشمل الأسباب المحتملة ما يلي: + The key has already been added. @@ -9767,30 +8090,22 @@ This option is deprecated, use --set-key-file instead. Restricted lifetime is not supported by the agent (check options). - لا يدعم العميل مدة الحياة المقيدة (حدد الخيارات). - - - A confirmation request is not supported by the agent (check options). - طلب التأكيد غير مدعوم من قبل الوكيل (حدد الخيارات). - - - Security keys are not supported by the agent or the security key provider is unavailable. - مفاتيح الأمان غير مدعومة من قبل الوكيل أو أن موفر مفتاح الأمان غير متوفر. - - - No agent running, cannot remove identity. - لا يوجد عميل قيد التشغيل، ولا يمكن إزالة الهوية. - - - No agent running, cannot list identities. - لا يوجد عميل قيد التشغيل، ولا يمكن إدراج الهويات. - - - Failed to remove all SSH identities from agent. - All SSH identities removed from agent. + A confirmation request is not supported by the agent (check options). + + + + Security keys are not supported by the agent or the security key provider is unavailable. + + + + No agent running, cannot remove identity. + + + + No agent running, cannot list identities. @@ -9798,55 +8113,55 @@ This option is deprecated, use --set-key-file instead. SearchHelpWidget Search Help - تعليمات البحث + Search terms are as follows: [modifiers][field:]["]term["] - مصطلحات البحث هي كما يلي: [المتغيرات] [الحقل: ] ["] مصطلح ["] + Every search term must match (ie, logical AND) - يجب أن يتطابق كل مصطلح بحث (أي، AND منطقية) + Modifiers - المعدّلات + exclude term from results - استبعاد مصطلح من النتائج + match term exactly - طابق مصطلح بالضبط + use regex in term - استخدم تعبير نمطي في المصطلح + Fields - الحقول + Term Wildcards - أحرف بدل المصطلح + match anything - طابق أي شيء + match one - طابق واحد + logical OR - OR المنطقية + Examples - أمثلة + @@ -9857,20 +8172,16 @@ This option is deprecated, use --set-key-file instead. Search Help - تعليمات البحث - - - Save Search - حفظ البحث + Search (%1)… Search placeholder text, %1 is the keyboard shortcut - بحث (%1)... + Case sensitive - حساس لحالة الأحرف + Limit search to selected group @@ -9885,7 +8196,7 @@ This option is deprecated, use --set-key-file instead. PID - هوية العملية + DBus Address @@ -9893,14 +8204,14 @@ This option is deprecated, use --set-key-file instead. Manage - أدِر + SettingsDatabaseModel File Name - اسم الملف + Group @@ -9908,14 +8219,14 @@ This option is deprecated, use --set-key-file instead. Manage - أدِر + SettingsWidgetFdoSecrets Options - خيارات + Enable KeepassXC Freedesktop.org Secret Service integration @@ -9927,23 +8238,39 @@ This option is deprecated, use --set-key-file instead. Show notification when passwords are retrieved by clients - أظهِر الإشعارات عند استرداد كلمات المرور من قبل العملاء + <html><head/><body><p>If enabled, any attempt to read a password must be confirmed. Otherwise, clients can read passwords without confirmation when the database is unlocked.</p><p>This option only covers the access to the password of an entry. Clients can always enumerate the items of exposed databases and query their attributes.</p></body></html> - <html><head/><body><p> في حالة التفعيل، يجب تأكيد أي محاولة لقراءة كلمة المرور. وبخلاف ذلك، يمكن للعملاء قراءة كلمات المرور دون تأكيد عند إلغاء قفل قاعدة البيانات.</p><p> يُغطي هذا الخيار فقط الوصول إلى كلمة المرور الخاصة بالإدخال. يمكن للعملاء دائمًا تعداد عناصر قواعد البيانات المكشوفة والاستعلام عن صفاتها. enable" dir="ltr" contenteditable="false" data-copy-tag="" data-index="5" data-position="2" data-type="end" title="</p>" data-tag="p" data-translatable="{TX-PL-TRANSLATABLE}" spellcheck="false">5enable" dir="ltr" contenteditable="false" data-copy-tag="" data-index="3" data-position="2" data-type="end" title="</body>" data-tag="body" data-translatable="{TX-PL-TRANSLATABLE}" spellcheck="false">3enable" dir="ltr" contenteditable="false" data-copy-tag="" data-index="1" data-position="2" data-type="end" title="</html>" data-tag="html" data-translatable="{TX-PL-TRANSLATABLE}" spellcheck="false">1 + Confirm when passwords are retrieved by clients - تأكيد متى يتم استرداد كلمات المرور من قبل العملاء + + + + <html><head/><body><p><span style=" + font-family:'-apple-system','BlinkMacSystemFont','Segoe UI','Helvetica','Arial','sans-serif','Apple Color + Emoji','Segoe UI Emoji'; font-size:14px; color:#24292e; background-color:#ffffff;">This setting does + not override disabling recycle bin prompts</span></p></body></html> + + Confirm when clients request entry deletion + + <html><head/><body><p>This improves compatibility with certain applications + which search for password without unlocking the database first.</p><p>But enabling this may also + crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a + different value set in applications.)</p></body></html> + + + Prompt to unlock database before searching - المطالبة بإلغاء قفل قاعدة البيانات قبل البحث + Exposed database groups: @@ -9951,7 +8278,7 @@ This option is deprecated, use --set-key-file instead. Authorization - التفويض + These applications are currently connected: @@ -9959,26 +8286,18 @@ This option is deprecated, use --set-key-file instead. <b>Warning:</b> - <b>تحذير:</b> - - - Save current changes to activate the plugin and enable editing of this section. - حفظ التغييرات الحالية لتفعيل المكوّن الإضافي وتفعيل تعديل هذا القسم. - - - <html><head/><body><p>This setting does not override disabling recycle bin prompts </p></body></html> - <html><head/><body><p>This improves compatibility with certain applications which search for password without unlocking the database first.</p><p>But enabling this may also crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a different value set in applications.) </p></body></html> - <html><head/><body><p>يؤدي ذلك إلى تحسين التوافق مع بعض التطبيقات التي تبحث عن كلمة المرور دون فتح قاعدة البيانات أولاً. </p><p> لكن تمكين هذا قد يؤدي أيضًا إلى تعطل العميل إذا تعذر إلغاء قفل قاعدة البيانات خلال مهلة معينة. (عادةً 25 ثانية، ولكن قد يتم تعيين قيمة مختلفة في التطبيقات.) </p></body></html> + Save current changes to activate the plugin and enable editing of this section. + SettingsWidgetKeeShare Active - نشط + Allow KeeShare imports @@ -9986,31 +8305,31 @@ This option is deprecated, use --set-key-file instead. Allow import - السماح بالاستيراد + Allow KeeShare exports - اسمح بتصدير KeeShare + Allow export - السماح بالتصدير + Only show warnings and errors - إظهار التحذيرات والأخطاء فقط + Own certificate - شهادة خاصة + Signer: - المُوقّع + Generate new certificate - ولّد شهادة جديدة + Generate @@ -10018,11 +8337,11 @@ This option is deprecated, use --set-key-file instead. Fingerprint: - البصمة: + Signer name field - حقل اسم المُوقّع + Fingerprint @@ -10033,14 +8352,14 @@ This option is deprecated, use --set-key-file instead. ShareExport Could not write export container. - لم يتمكن من كتابة حاوية التصدير. + ShareImport Successful import - نجح الاستيراد + @@ -10055,7 +8374,7 @@ This option is deprecated, use --set-key-file instead. Imported from %1 - تم الاستيراد من ٪1 + Multiple import source path to %1 in %2 @@ -10063,56 +8382,33 @@ This option is deprecated, use --set-key-file instead. Conflicting export target path %1 in %2 - مسار هدف التصدير المتعارض %1 في %2 + Export to %1 failed (%2) - فشل التصدير إلى %1 (%2) + Export to %1 successful (%2) - صُدّر إلى %1 بنجاح (%2) + Export to %1 - صدّر إلى %1 + TagModel - Clear Search - إمسح البحث - - - All Entries - كل الإدخالات + All + Expired - منتهية الصلاحية + Weak Passwords - كلمات مرور ضعيفة - - - - TagView - - Remove Search - - - - Remove Tag - - - - Confirm Remove Tag - - - - Remove tag "%1" from all entries in this database? @@ -10128,7 +8424,7 @@ This option is deprecated, use --set-key-file instead. Expires in <b>%n</b> second(s) - تنتهي صلاحيته في <b>٪n</b> ثانية (ثوان)تنتهي صلاحيته في <b>٪n</b> ثانية (ثوان)تنتهي صلاحيته في <b>٪n</b> ثانية (ثوان)تنتهي صلاحيته في <b>٪n</b> ثانية (ثوان)تنتهي صلاحيته في <b>٪n</b> ثانية (ثوان)تنتهي صلاحيته في <b>%n</b> ثانية/ثواني + @@ -10140,15 +8436,15 @@ This option is deprecated, use --set-key-file instead. 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 ثواني. + @@ -10159,7 +8455,7 @@ This option is deprecated, use --set-key-file instead. Secret Key: - المفتاح السري: + Secret key must be in Base32 format @@ -10171,7 +8467,7 @@ This option is deprecated, use --set-key-file instead. Default settings (RFC 6238) - الإعدادات الافتراضية (RFC 6238) + Steam® settings @@ -10212,7 +8508,7 @@ This option is deprecated, use --set-key-file instead. Invalid TOTP Secret - سر TOTP غير صالح + You have entered an invalid secret key. The key must be in Base32 format. @@ -10221,29 +8517,29 @@ Example: JBSWY3DPEHPK3PXP Confirm Remove TOTP Settings - أكّد إزالة إعدادات TOTP + Are you sure you want to delete TOTP settings for this entry? - هل أنت متأكد أنك تريد حذف إعدادات TOTP لهذا الإدخال؟ + URLEdit Invalid URL - URL غير صالح + UpdateCheckDialog Checking for updates - جارِ التحقق من وجود تحديثات + Checking for updates… - جارِ التحقق من وجود تحديثات… + Close @@ -10251,19 +8547,19 @@ Example: JBSWY3DPEHPK3PXP Software Update - تحديث النظام + An error occurred when trying to retrieve update information, please try again later. - حدث خطأ أثناء محاولة استرداد معلومات التحديث، يرجى المحاولة مرة أخرى لاحقًا. + <strong>A new version is available.</strong><br/>KeePassXC %1 can be <a href="https://keepassxc.org/download/">downloaded here</a>. - <strong>تتوفر نسخة جديدة.</strong><br/>KeePassXC %1 يمكن <a href="https://keepassxc.org/download/">تنزيلها هنا</a>. + You have the latest version of KeePassXC - لديك أحدث إصدار من KeePassXC + @@ -10272,36 +8568,44 @@ Example: JBSWY3DPEHPK3PXP Start storing your passwords securely in a KeePassXC database إبدأ بتخزين كلمات مرورك بأمان في قاعدة بيانات KeePassXC + + Create new database + أنشىء قاعدة بيانات جديدة + + + Open existing database + فتح قاعدة بيانات حالية + + + Import from KeePass 1 + استيراد من KeePass 1 + + + Import from 1Password + + + + Import from CSV + استيراد من CSV + Recent databases المفتوحة مؤخرًا Open a recent database - فتح قاعدة بيانات مفتوحة مؤخرًا + Welcome to KeePassXC %1 مرحبا بك في KeePassXC %1 - - Create Database - - - - Open Database - افتح قاعدة بيانات - - - Import File - استورد الملف - WinUtils Invalid key code - رمز المفتاح غير صالح + Global shortcut already registered to %1 @@ -10312,30 +8616,61 @@ Example: JBSWY3DPEHPK3PXP + + WindowsHello + + Failed to init KeePassXC crypto. + + + + Failed to encrypt key data. + + + + Failed to get Windows Hello credential. + + + + Failed to decrypt key data. + + + YubiKey + + %1 No interface, slot %2 + + General: - عام: + Could not find interface for hardware key with serial number %1. Please connect it to continue. - لم نتمكن من العثور على واجهة لمفتاح حماية عتادي بالرقم التسلسلي %1. يرجى توصيله للمتابعة. + YubiKeyEditWidget + + Refresh hardware tokens + + + + Refresh + تحديث + Hardware key slot selection - اختيار فتحة مفتاح الأجهزة + Could not find any hardware keys! - تعذر العثور على أي مفاتيح الأجهزة! + Selected hardware key slot does not support challenge-response! - فتحة مفتاح الحماية العتادية المُحددة لا تدعم ميزة التحدي والاستجابة! + Challenge-Response @@ -10358,69 +8693,69 @@ Example: JBSWY3DPEHPK3PXP - Detecting hardware keys… - الكشف عن مفاتيح الأجهزة... - - - No hardware keys detected - يم يتم الكشف عن أي مفتاح الأجهزة - - - Refresh hardware keys - أنعش مفاتيح الحماية العتادية - - - <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed with <a href="https://keepassxc.org/docs/#faq-yubikey-howto">Challenge-Response</a>.</p> + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> - Hardware keys found, but no slots are configured + Detecting hardware keys… + + + + No hardware keys detected + + + + + YubiKeyInterface + + %1 Invalid slot specified - %2 YubiKeyInterfacePCSC + + (PCSC) %1 [%2] Challenge-Response - Slot %3 + + The YubiKey PCSC interface has not been initialized. + + Hardware key is currently in use. + + Could not find or access hardware key with serial number %1. Please present it to continue. - تعذر العثور على مفتاح حماية عتادي الذي يحمل الرقم التسلسلي %1 أو الوصول إليه. يرجى تقديمه للمتابعة. + Hardware key is locked or timed out. Unlock or re-present it to continue. - مفتاح حماية عتادي مُقفل أو انتهت مهلته. قم بإلغاء قفله أو إعادة تقديمه للمتابعة. + Hardware key was not found or is not configured. - لم يتم العثور على مفتاح حماية عتادي أو لم يتم تكوينه. + Failed to complete a challenge-response, the PCSC error code was: %1 - - (NFC) %1 [%2] - Slot %3, %4 - YubiKey display fields - - - - Press - USB Challenge-Response Key interaction request - اضغط - - - Passive - USB Challenge-Response Key no interaction required - سلبي - YubiKeyInterfaceUSB Unknown - مجهول + + + + (USB) %1 [%2] Configured Slot - %3 + + + + (USB) %1 [%2] Challenge-Response - Slot %3 - %4 + Press @@ -10436,31 +8771,25 @@ Example: JBSWY3DPEHPK3PXP The YubiKey USB interface has not been initialized. + + Hardware key is currently in use. + + Could not find hardware key with serial number %1. Please plug it in to continue. - لم نتمكن من العثور على مفتاح حماية عتادي بالرقم التسلسلي %1. يرجى توصيله للمتابعة. + Hardware key timed out waiting for user interaction. - انتهت مهلة مفتاح حماية عتادي في انتظار تفاعل المستخدم. + A USB error occurred when accessing the hardware key: %1 - حدث خطأ USB عند الوصول إلى المفتاح الحماية العتادي: %1 + Failed to complete a challenge-response, the specific error was: %1 - - %1 [%2] - Slot %3 - YubiKey NEO display fields - - - - %1 [%2] - Slot %3, %4 - YubiKey display fields - - \ No newline at end of file diff --git a/share/translations/keepassxc_bg.ts b/share/translations/keepassxc_bg.ts index 87173aecc..f3bbfbb57 100644 --- a/share/translations/keepassxc_bg.ts +++ b/share/translations/keepassxc_bg.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. @@ -19,11 +19,11 @@ Project Maintainers: - Екип: + Поддръжка на проекта: Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. - Специални благодарности от екипа на KeePassXC към debfx за създаването на оригиналния KeePassX. + Специални благодарности от екипа на KeePassXC отидете на debfx за създаването на оригиналния KeePassX. Contributors @@ -31,7 +31,7 @@ <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> - <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">Вижте сътрудниците в GitHub</a> + <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">Вижте сътрудниците чрез GitHub</a> Debug Info @@ -39,7 +39,7 @@ Include the following information whenever you report a bug: - Когато съобщавате за дефект включвайте следната информация: + Включвайте следната информация, когато докладвате за дефект Copy to clipboard @@ -80,39 +80,39 @@ Details Подробности - - Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. - Решението ви ще бъде запомнено докато изискващият клиент и KeePassXC работят. - Remember - Запомняне + Запомни Allow Selected - Разрешаване избраните + Разреши избраните + + + Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. + Вашето решение ще бъде запомнено докато изискващият клиент и KeePassXC работят. Deny All && Future - &Забраняване на всички и за в бъдеще + Забрани всичкиl && бъдещите Allow All && &Future - &Разрешаване на всички и за в бъдеще + Разреши всички && бъдещите AccessControlDialog::DenyButton Deny for this program - Забраняване за приложението + Забрани за тази програма AgentSettingsWidget Enable SSH Agent integration - Включване на съчетаване с агент на SSH + Включване на интеграция на SSH Agent Use Pageant @@ -122,17 +122,13 @@ Use OpenSSH Използване на OpenSSH - - Use both agents - Използване и на двата агента - SSH_AUTH_SOCK override - Презаписване на SSH_AUTH_SOCK + SSH_AUTH_SOCK презаписване SSH_AUTH_SOCK value - Стойност на SSH_AUTH_SOCK + SSH_AUTH_SOCK стойност (empty) @@ -144,15 +140,19 @@ SSH_SK_PROVIDER override - Презаписване на SSH_SK_PROVIDER + налагане на SSH_SK_PROVIDER No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. - Не е достъпен сокет на агент на SSH. Уверете, че съществува променлива на средата SSH_AUTH_SOCK или я презапишете. + Няма SSH Agent сокет. Уверете, че съществува променлива на средата SSH_AUTH_SOCK или я презапишете. SSH Agent connection is working! - Има връзка с агента на SSH! + SSH Agent връзката работи! + + + Use both agents + Използване и на двата агента @@ -169,17 +169,13 @@ Security Сигурност - - This setting cannot be enabled when minimize on unlock is enabled. - Настройката не може да бъде включена докато друга настройка - скриване на прозореца при отключване е включена. - Access error for config file %1 - Грешка при достъп до файла с настройките %1 + Грешка при достъп на конфигурационния файл %1 Icon only - Само пиктограма + Само икона Text only @@ -187,11 +183,11 @@ Text beside icon - Текст до пиктограмите + Текст до иконата Text under icon - Текст под пиктограмите + Текст под икона Follow style @@ -203,63 +199,35 @@ Monochrome (light) - Едноцветен (светлъл) + Монохромен(светлъл) Monochrome (dark) - Едноцветен (тъмен) + Монохромен(тъмен) Colorful - Цветен + Цветни You must restart the application to set the new language. Would you like to restart now? - За да настроите нов език, приложението трябва да рестартира. Желаете ли приложението да рестартира сега? + Трябва да рестартирате приложението, за да настроите нов език. Желаете ли да рестартирате сега? + + + Reset Settings? + Да се нулират настройките? + + + Are you sure you want to reset all general and security settings to default? + Наистина ли искате да нулирате стойностите по подразбиране на всички общи настройки и настройки за защита? Select backup storage directory - Изберете папка, в която да бъдат за запазвани резервните копия + Изберете папка за съхранение на резервни копия - Confirm Reset - Потвърждаване на нулиране - - - Are you sure you want to reset all settings to default? - Желаете ли всички настройки да бъдат нулирани? - - - Import KeePassXC Settings - Внасяне на настройки на KeePassXC - - - Failed to import settings from %1, not a valid settings file. - Грешка при внасяне на настройки от %1: не е приемлив файл с настройки. - - - Export KeePassXC Settings - Изнасяне на настройки на KeePassXC - - - Small - Малък - - - Normal - Стандартен - - - Medium - Среден - - - Large - Голям - - - Custom - Потребителски + This setting cannot be enabled when minimize on unlock is enabled. + Настройката не може да бъде включена докато друга настройка - скриване при отключване е включена. @@ -274,43 +242,58 @@ Start only a single instance of KeePassXC - Поддържане на един екземпляр на KeePassXC + Започнете само една инстанция на KeePassXC Automatically launch KeePassXC at system startup - Стартиране на KeePassXC заедно със системата + Автоматично стартиране на KeePassXC при стартиране на системата Minimize window at application startup - Скриване на прозореца при отваряне на приложението + Минимизиране на прозореца при стартиране на приложението Minimize window after unlocking database - Скриване на прозореца при отключване на хранилище + Скриване на прозореца при отключване на хранилището Remember previously used databases - Запомняне на последно използваните - - - recent files - хранилища + Запаметяване на предишни използвани бази данни Load previously open databases on startup - Зареждане на отворените хранилища при стартиране + Зареждане на последно отворената бази данни при стартиране Remember database key files and security dongles - Запомняне на файловете с ключ и преносимите защитни устройства за хранилищата + Запомни файл-ключовете и защитните устройства Check for updates at application startup once per week - Седмична проверка за обновяване при стартиране на приложението + Проверка за актуализации при стартиране на приложението веднъж седмично Include beta releases when checking for updates - При проверка за обновяване да се проверяват и бета изданията + Включване на бета версии при проверка за актуализации + + + On database unlock, show entries that + При отключване на базата с данни, покажи записи които + + + have expired + On database unlock, show entries that... + изтекоха + + + days + On database unlock, show entries that will expire within %1 days + дни + + + will expire within + On database unlock, show entries that... + ще изтече след File Management @@ -318,39 +301,51 @@ Automatically save after every change - Автоматично запазване след всяка промяна + Автоматично записване след всяка промяна Automatically save when locking database - Автоматично запазване при заключване на хранилището + Запази автоматично при заключване на базата данни Automatically save non-data changes when locking database - Автоматично запазване на промени, които не са свързани с данни, при заключване на хранилището + При заключване на базата данни, запази автоматично промените, които не засягат данните. Automatically reload the database when modified externally - Автоматично презареждане на хранилището, ако е променено от друго приложение + Автоматично презареждане на базата данни при външно модифициране Backup database file before saving - Резервно копие на хранилището преди запазване + Архивиране на файла с базата данни преди записване + + + Backup destination + Път към резервно копие + + + Specifies the database backup file location. Occurrences of "{DB_FILENAME}" are replaced with the filename of the saved database without extension. {TIME:<format>} is replaced with the backup time, see https://doc.qt.io/qt-5/qdatetime.html#toString. <format> defaults to format string "dd_MM_yyyy_hh-mm-ss". + Указва местонахождението на файла, съдържащ резервното копие на базата данни. Случайте като "{DB_FILENAME}" се заменят с името на файла на съхранената база данни без разширение в края. {TIME:<format>} се заменя с времето на създаване на копието, повече на https://doc.qt.io/qt-5/qdatetime.html#toString. <format> връща формата на низа по подразбиране: "dd_MM_yyyy_hh-mm-ss". {DB_FILENAME}.old.kdbx {DB_FILENAME}.old.kdbx + + Choose... + Избиране... + Use alternative saving method (may solve problems with Dropbox, Google Drive, GVFS, etc.) - Използване на алтернативен метод за запазване (при проблеми с Dropbox, Google Drive, GVFS, и т.н.) + Използване на алтернативния метод за съхраняване (при проблеми с услугите Dropbox, Google Drive, GVFS, и т.н.) Temporary file moved into place - Временният файл е преместен на мястото си + Временният файл бе преместен в Directly write to database file (dangerous) - Директно писане във файла на хранилището (опасно) + Директно писане в файла с базата данни (опасно) Entry Management @@ -358,7 +353,7 @@ Use group icon on entry creation - Новите записи получават пиктограмата на групата + Използване на груповата икона при създаване на запис Minimize when opening a URL @@ -366,7 +361,7 @@ Hide window when copying to clipboard - Скриване на прозореца при копиране + Скриване на прозореца при копиране в клипборда Minimize @@ -378,16 +373,16 @@ Favicon download timeout: - Изчакване при изтегляне на пиктограми: + Таймаут за изтегляне на фавикон: Website icon download timeout in seconds - Изчакване при изтегляне на пиктограмата на страницата, в секунди + Таймаут на изтеглянето на иконата на уеб сайта в секунди sec Seconds - сек + сек User Interface @@ -399,7 +394,7 @@ Movable toolbar - Преместваема лента с инструменти + Преместваща се лента с инструменти Language selection @@ -411,19 +406,15 @@ (restart program to activate) - (необходим рестарт) + (рестартиране програма за активиране) Toolbar button style: Стил на бутоните от лентата с инструменти: - - Show passwords in color - Показване на паролите в цвят - Use monospaced font for notes - Използване на равноширок шрифт за бележките + Използване на еднопространствен шрифт за бележките Minimize instead of app exit @@ -431,15 +422,15 @@ Show a system tray icon - Показване на пиктограма в системния панел + Показване на икона в системния панел Tray icon type - Вид на пиктограмата в системния панел + Тип иконата в системната лента Tray icon type: - Вид на пиктограмата в системния панел: + Тип иконата в системната лента: Hide window to system tray when minimized @@ -447,149 +438,92 @@ Reset settings to default… - Нулиране на настройките... + Нулиране на настройките по подразбиране... Auto-Type - Автоматично въвеждане + Auto-Type Use entry title to match windows for global Auto-Type - Заглавието на записа да съвпада с прозореца при автоматично въвеждане + Използвайте заглавието на записа, за да съответствате на прозорците за глобалния Auto-Type Use entry URL to match windows for global Auto-Type - Адресът на записа да съвпада с прозореца при автоматично въвеждане + Използвайте URL на записа, за да съответствате на прозорците за глобалния Auto-Type Always ask before performing Auto-Type - Винаги да пита преди автоматично въвеждане + Винаги питай преди да извършиш Auto-Type Hide expired entries from Auto-Type - Скриване на записите с изтекла давност при автоматично въвеждане + Скрий изтекли записи от автоматично попълване Re-lock previously locked database after performing Auto-Type - Повторно заключване на преди това заключено хранилище след автоматично въвеждане + Повторно заключване на предварително заключена база данни след извършване на Auto-Type Auto-Type start delay: - Изчакване преди автоматично въвеждане: + Забавяне на Auto-Type включването: Global Auto-Type shortcut: - Клавишна комбинация за автоматично въвеждане: + Глобален Auto-Type пряк път: Auto-type start delay milliseconds - Изчакване преди автоматично въвеждане, милисекунди + Забавяне на auto-type старта милисекунди ms Milliseconds - мс + ms Auto-Type typing delay: - Изчакване преди автоматично въвеждане: + Забавяне на auto-type въвеждането: Global auto-type shortcut - Клавишна комбинация за автоматично въвеждане + Глобален пряк път за auto-type Auto-type character typing delay milliseconds - Изчакване преди въвеждане на знак, милисекунди + Забавяне на auto-type въвеждане на знаци милисекунди Remember last typed entry for: - Запомняне на последния въведен запис за: + Запомни последно въведения запис за: - On database unlock, show entries that will expire within - При отключване на хранилище се показват записите, с изтичаща валидност след + recent files + последни файлове - On database unlock, show entries that will expire within - При отключване на хранилище се показват записите, с изтичаща валидност след - - - days - number of days warning for password expiration - дни - - - Destination format: - Целеви формат: - - - <html><head/><body><p><span style=" font-weight:600;">{DB_FILENAME}</span> is replaced with the filename of the saved database without extension</p><p><span style=" font-weight:600;">{TIME:&lt;format&gt;}</span> is replaced with the specified time format (default: dd_MM_yyyy_hh-mm-ss)</p><p>See the User Guide for more details</p></body></html> - <html><head/><body><p><span style=" font-weight:600;">{DB_FILENAME}</span> се заменя с името на файла на хранилището, но без разширението</p><p><span style=" font-weight:600;">{TIME:&lt;format&gt;}</span> се заменя с избрания формат на датата (стандартно: dd_MM_yyyy_hh-mm-ss)</p><p>За подробности прочетете ръководството на потребителя</p></body></html> - - - Choose folder... - Избиране на папка… - - - Show confirmation before moving entries to recycle bin - Потвърждаване при преместване на записи в кошчето - - - Copy data on double clicking field in entry view - Копиране на данните при двойно щракване върху поле в изгледа за въвеждане - - - Show toolbar - Лентата с инструменти - - - Show the menu bar by pressing the Alt key - При натискане на клавиш Alt се показва лентата с менюто - - - Show menubar - Лента с менюто - - - Import settings… - Внасяне на настройки… - - - Export settings… - Изнасяне на настройки… - - - Open browser on double clicking URL field in entry view - Отваряне на мрежовия четец при двойно щракване върху интернет адрес в изгледа за въвеждане - - - Font size: - Размер на шрифта - - - Font size selection - Списък с размери на шрифта + Show passwords in color + Показване на паролите с цвят ApplicationSettingsWidgetSecurity Timeouts - Времена на изчакване + Таймаути Database lock timeout seconds - Изчакване преди заключване на хранилище, секунди + Секунди за заключване на базата данни sec Seconds - сек + сек Clear clipboard after - Изчистване междинна памет след + Изчистване на клипборда след Clear search query after @@ -598,15 +532,15 @@ min Minutes - мин + мин Clipboard clear seconds - Изчистване на междинна памет, секунди + Изчистване на клипборда секунди Lock databases after inactivity of - Заключване на хранилищата след бездействие от + Заключване на бази данни след бездействие от Convenience @@ -614,27 +548,43 @@ Enable database quick unlock (Touch ID / Windows Hello) - Бързо отключване на хранилище (Touch ID / Windows Hello) + Бързо отключване на база данни (Touch ID / Windows Hello) Lock databases when session is locked or lid is closed - Заключване на хранилищата при заключена сесия или затваряне на капака + Заключване на базите данни при заключена сесия или затваряне на капака Lock databases after minimizing the window - Заключи на хранилищата след минимизиране на прозореца + Заключи базите данни след минимизиране на прозореца + + + Require password repeat when it is visible + Изискване на парола, когато е видима Hide passwords when editing them - Скриване на паролите при променянето им + Скриване на пароли при редактирането им Use placeholder for empty password fields - Използване на заместител за празните полета за парола + Използване на контейнер за празни полета за парола Hide passwords in the entry preview panel - Скриване на паролите в панела за преглед на запис + Скриване на паролите в панела за преглед на записи + + + Hide entry notes by default + Скриване на бележките по подразбиране + + + Move entries to recycle bin without confirmation + Преместване на записите в кошчето без потвърждаване + + + Enable double click to copy the username/password entry columns + Двойно щракване за копиране на потребителско име/парола от колоните Privacy @@ -642,75 +592,77 @@ Use DuckDuckGo service to download website icons - Пиктограмите да се изтеглят през услугата на DuckDuckGo + Използвайте DuckDuckGo за изтегляне на иконите на уебсайта Hide TOTP in the entry preview panel - Скриване на TOTP в панела за преглед на запис - - - Lock databases when switching user - Заключване на хранилищата при смяна на потребител - - - Lock Options - Настройки на заключване - - - Hide notes in the entry preview panel - Скриване на бележката в панела за преглед на запис + Скриване на TOTP в панела за преглед на записи AutoType The requested Auto-Type sequence cannot be used due to an error: - Заявената последователност за автоматично въвеждане не може да бъде използвана поради грешка: + Поисканата последователност за Auto-Type не може да бъде използвана поради възникнала грешка: Auto-Type Error - Грешка при автоматично въвеждане + Auto-Type грешка Permission Required - Необходими са права за достъп + Нужно е разрешение KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. - За да извършва основно ниво на автоматично въвеждане KeePassXC изисква разрешението за достъпност. Ако вече сте го дали, може да се наложи да рестартирате KeePassXC. + KeePassXC изисква разрешение за достъпност, за да се извърши базово ниво на Auto-Type. Ако вече сте дали разрешение, може да се наложи да рестартирате KeePassXC. KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. - За да извършва глобално автоматично въвеждане KeePassXC изисква разрешението за достъпност и записване на екрана. За да се намират записи като се използва заглавието на прозореца е необходимо записване на екрана. Ако вече сте го дали, може да се наложи да рестартирате KeePassXC. + KeePassXC изисква разрешението Accessibility and Screen Recorder, за да се извърши глобален Auto-Type. За да намерите записи, е необходимо да използвате заглавието на прозореца. Ако вече сте дали разрешение, може да се наложи да рестартирате KeePassXC. Invalid entry provided - Недопустим запис + Неправилен запис Bracket imbalance detected, found extra { or } - Несъответстващ брой фигурни скоби, има излишни { или } + Засечена е прекомерна употреба на скоби, въвели сте излишни [ или ] Too many repetitions detected, max is %1: %2 - Открито е несъответстващо количество повторения, допускат се %1: %2 + Засечено е несъответстващо количество повторения, допускат се не повече от %1: %2 Very slow key press detected, max is %1: %2 - Открито е твърде бавно натискане на клавиш, максимум %1: %2 + Засечено е твърде бавно натискане на клавиш, допуска се не повече от %1: %2 Very long delay detected, max is %1: %2 - Открито е продължително изчакване, максимум %1: %2 + Засечено е дълго забавяне, допуска се не повече от %1: %2 + + + Invalid conversion type: %1 + Недопустим тип на преобразуване: %1 + + + Invalid conversion syntax: %1 + Недопустим синтаксис на преобразуване: %1 + + + Invalid regular expression syntax %1 +%2 + Недопустим синтаксис на редовното изражение %1 +%2 + + + Invalid placeholder: %1 + Неправилен временен елемент: %1 Entry does not have attribute for PICKCHARS: %1 Записът няма атрибут за PICKCHARS: %1 - - Invalid placeholder: %1 - Неправилен заместител: %1 - AutoTypeAssociationsModel @@ -728,7 +680,7 @@ Default sequence - Подразбирана последователност + Последователност по подразбиране @@ -743,7 +695,7 @@ Username - Потребител + Портебител Sequence @@ -752,32 +704,32 @@ AutoTypePlatformX11 + + Trying to send invalid keysym. + Опит за изпращане на неправилен символ + Sequence aborted: Caps Lock is on - Прекъсната поредица: режим Caps Lock е включен + Поредицата бе прекъсната: режим Caps Lock е включен Sequence aborted: Modifier keys held by user - Поредицата е прекъсната: задържани клавиши-модификатори от потребителя + Поредицата бе прекъсната: задържани клавиши-модификатори от потребителя Unable to get valid keycode for key: Неуспешно получаване на правилен код за клавишите: - - Trying to send invalid keyboard symbol. - Опит за изпращане на неприемлив символ от клавиатурата. - AutoTypeSelectDialog Auto-Type - KeePassXC - Автоматично въвеждане - KeePassXC + Auto-Type - KeePassXC Double click a row to perform Auto-Type or find an entry using the search: - Щракнете двукратно върху ред, за автоматично въвеждане или намерете запис, като използвате търсачката: + Щракнете двукратно върху ред, за да изпълните функцията Auto-Type или намерете запис, като използвате търсачката: <p>You can use advanced search queries to find any entry in your open databases. The following shortcuts are useful:<br/> @@ -786,8 +738,8 @@ Ctrl+1 - Type username<br/> Ctrl+2 - Type password<br/> Ctrl+3 - Type TOTP<br/> Ctrl+4 - Use Virtual Keyboard (Windows Only)</p> - <p>За да намерите определен запис в отворените хранилища, може да използвате разширени заявки за търсене. Следните клавишни комбинации ще ви бъдат полезни:<br/> -Ctrl+F - Превключва търсенето<br/> + <p>За да намерите даден запис в отворените банки от данни, можете да използвате разширени заявки за търсене. Следните бързи клавиши са полезни:<br/> +Ctrl+F - Превключване на търсенето<br/> Ctrl+1 - Въвеждане на потребителско име<br/> Ctrl+2 - Въвеждане на парола<br/> Ctrl+3 - Въвеждане на TOTP<br/> @@ -795,15 +747,15 @@ Ctrl+4 - Използване на виртуална клавиатура (са Search all open databases - Търсене във всички отворени хранилища + Търсене във всички отворени бази данни Search… - Търсене… + Търсене... Type Sequence - Въведете последователност + Въведете Поредица Cancel @@ -823,11 +775,11 @@ Ctrl+4 - Използване на виртуална клавиатура (са Copy Username - Копиране на потребителско име + Копирай потребителското име Copy Password - Копиране на парола + Копиране на паролата Copy TOTP @@ -842,7 +794,7 @@ Ctrl+4 - Използване на виртуална клавиатура (са BrowserAccessControlDialog KeePassXC - Browser Access Request - KeePassXC - заявка за достъп от мрежов четец + KeePassXC - заявка за достъп до браузъра %1 is requesting access to the following entries: @@ -850,38 +802,38 @@ Ctrl+4 - Използване на виртуална клавиатура (са Remember access to checked entries - Запомняне на достъпа до избраните записи + Запомни достъпа до избраните записи Remember - Запомняне + Запомни Allow access to entries - Разрешаване на достъп до записите + Разреши достъп до записите Allow Selected - Разрешаване избраните + Разреши избраните Deny All - Забраняване всички + Забрани всички Disable for this site - Изключване за тази страница - - - Undo - Отменяне + Изключи за този сайт BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + KeePassXC-Browser запази запис + Ok - Добре + OK Cancel @@ -890,172 +842,119 @@ Ctrl+4 - Използване на виртуална клавиатура (са You have multiple databases open. Please select the correct database for saving credentials. - Отворени са няколко хранилища. -Изберете в кое от тях да бъде запазена тази самоличност. - - - KeePassXC - Select Database - KeePassXC - Избиране на хранилище - - - - BrowserPasskeysConfirmationDialog - - Cancel - Отказ - - - Update - Обновяване - - - Authenticate - Удостоверяване - - - Register new - Регистриране на нов - - - Register - Регистриране - - - Timeout in <b>%n</b> seconds... - Изтича след <b>%n</b> секунда…Изтича след <b>%n</b> секунди… - - - Relying Party: %1 - Зависеща страна: %1 - - - Username: %1 - Потребителско име: %1 - - - KeePassXC - Passkey credentials - KeePassXC - Самоличност на Passkey - - - Add to existing entry - Добавяне към запис - - - Existing passkey found. -Do you want to register a new passkey for: - Съществува друг passkey. -Желаете ли да регистрирате нов passkey за: - - - Select the existing passkey and press Update to replace it. - Изберете съществуващ passkey и изберете „Обновяване“, за да бъде заменен. - - - Authenticate passkey credentials for: - Удостоверяване на самоличността на passkey за: - - - Do you want to register a passkey for: - Желаете ли да регистрирате passkey за: + Имате отворени няколко бази данни. +Изберете правилната база данни за записване на идентификационни данни. BrowserService + + KeePassXC: Create a new group + KeePassXC: Създаване на нова група + A request for creating a new group "%1" has been received. Do you want to create this group? - Получена е заявка за създаване на групата „%1“. -Желаете ли групата да бъде създадена? + Заявка за създаване на нова група "%1" е получена. +Желаете ли да създадете тази група? + + KeePassXC: New key association request + KeePassXC: Искане за нова асоциация на ключове + You have received an association request for the following database: %1 Give the connection a unique name or ID, for example: chrome-laptop. - Получили сте заявка за свързване със следното хранилище: + Получили сте заявка за асоцииране за следната база данни: %1 -Дайте на връзката уникално име или идентификатор, например: +Дайте на връзката уникално име или ID, например: chrome-laptop. 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? - Съществува споделен ключ за шифроване с име „%1“. -Желаете ли да бъде презаписан? + Вече съществува споделен шифроващ ключ с име "%1". +Искате ли да го презапишете? + + + KeePassXC: Update Entry + KeePassXC: Актуализация на записа Do you want to update the information in %1 - %2? - Желаете ли да информацията в %1 - %2 да бъде обновена? + Желаете ли да актуализирате информацията в %1 -%2? + + + KeePassXC: Delete entry + KeePassXC: Изтрий записа A request for deleting entry "%1" has been received. Do you want to delete the entry? - Получена е заявка за премахване на записа „%1“. -Желаете ли записът да бъде премахнат? + Получено запитване за изтриване на запис "%1". +Изтриване на записа? - %1 (Passkey) - %1 (Passkey) + Converting attributes to custom data… + Конвертиране на атрибути към потребителски данни... - KeePassXC - Create a new group - KeePassXC - Създаване на група + Abort + Отказ - Disable - Изключване + KeePassXC: Converted KeePassHTTP attributes + KeePassXC: Конвертиране на KeePassHTTP атрибути - KeePassXC - Overwrite existing key? - KeePassXC - Презаписване на ключ? + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + Успешно преобразувани атрибути от %1 запис(и). +Преместени са %2 ключа в персонализираните данни. + + + Successfully moved %n keys to custom data. + Успешно преместени %n ключове в потребителски данни.Успешно преместени %n ключове в персонализираните данни. - KeePassXC - Update Entry - KeePassXC - Обновяване на запис + KeePassXC: No entry with KeePassHTTP attributes found! + KeePassXC: Няма записи с намерени KeePassHTTP атрибути! - KeePassXC - Delete entry - KeePassXC - Премахване на запис + The active database does not contain an entry with KeePassHTTP attributes. + Активната база данни не съдържа запис с KeePassHTTP атрибути. - KeePassXC - New key association request - KeePassXC - Заявка за обвързване с нов ключ + Don't show this warning again + Не показвай това предупреждение отново - Passkey - Passkey + KeePassXC: Legacy browser integration settings detected + KeePassXC: Открити са остарели интеграционни настройки на браузъра - KeePassXC - Passkey credentials - KeePassXC - Самоличност на Passkey - - - Register a new passkey to this entry: - Регистриране на нов passkey за този запис: - - - KeePassXC - Update passkey - KeePassXC - Обновяване на passkey - - - Entry already has a passkey. -Do you want to overwrite the passkey in %1 - %2? - Записът има passkey. -Желаете ли този passkey да бъде презаписан в %1 - %2? - - - Register - Регистриране + 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? + Вашите настройки за KeePassXC-Browser трябва да бъдат преместени в настройките на базата данни. +Това е необходимо, за да се поддържа текущите връзки на браузъра. +Искате ли да мигрирате съществуващите настройки сега? @@ -1066,19 +965,23 @@ Do you want to overwrite the passkey in %1 - %2? This is required for accessing your databases with KeePassXC-Browser - Това е необходимо за достъп до хранилищата от KeePassXC-Browser + Това е необходимо за достъп до вашите бази данни с KeePassXC-Browser Enable browser integration - Разрешаване на съчетаване с мрежови четци + Разрешаване на интеграцията на браузъра General Основни + + Browsers installed as snaps are currently not supported. + Браузъри инсталирани като snap пакети не са поддържани + Enable integration for these browsers: - Съчетаване с мрежови четци: + Включване на интегрирането на тези браузъри: Vivaldi @@ -1094,7 +997,7 @@ Do you want to overwrite the passkey in %1 - %2? Tor Browser - Четецът Тор + Tor Browser Brave @@ -1111,11 +1014,11 @@ Do you want to overwrite the passkey in %1 - %2? Show a notification when credentials are requested Credentials mean login data requested via browser extension - Известие при заявка за самоличност + Показвай известие при поискване на идентификационни данни Request to unlock the database if it is locked - Искане за отключване на хранилището, ако е заключено + Искане за отключване на базата данни, ако е заключена Only entries with the same scheme (http://, https://, …) are returned. @@ -1123,55 +1026,55 @@ Do you want to overwrite the passkey in %1 - %2? Match URL scheme (e.g., https://example.com) - Проверяване за съвпадение на протоколи за адреса (https://example.com) + Проверяване за съвпадание на протоколи за URL-адрес (https://example.com)) Only returns the best matches for a specific URL instead of all entries for the whole domain. - Връща най-добрите съвпадения за дадения адрес вместо всички записи за целия домейн. + Връща само най-добрите съвпадения за конкретен URL адрес вместо всички записи за целия домейн. Return only best-matching credentials - Връща самоличността с най-доброто съвпадение + Връща само идентификационните данни с най-добро съвпадение Returns expired credentials. String [expired] is added to the title. - Връща самоличност с изтекла давност. Към заглавието е добавен низът „(изтекла давност)“. + Връща невалидни идентификационни данни. Низ [изтекъл] се добавя към заглавието. Allow returning expired credentials - Връщане и на записи с изтекла давност + Позволяване на връщане на изтекли идентификационни данни All databases connected to the extension will return matching credentials. - Всички хранилища, свързани към разширението, ще връщат съвпадащи самоличности. + Всички бази данни, свързани с разширението, ще върнат съвпадащи идентификационни данни. Search in all opened databases for matching credentials 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 - Без питане преди променяне на самоличности + Никога не питай преди актуализиране на идентификационни данни Do not ask permission for HTTP Basic Auth An extra HTTP Basic Auth setting - Без питане за разрешение за HTTP Basic Auth + Не искай разрешение за HTTP Basic Auth Automatically creating or updating string fields is not supported. - Автоматичното създаване или обновяване на низови полета не се поддържа. + Автоматично създаване или актуализиране на низови полета не се поддържа. Return advanced string fields which start with "KPH: " @@ -1179,36 +1082,36 @@ Do you want to overwrite the passkey in %1 - %2? Don't display the popup suggesting migration of legacy KeePassHTTP settings. - Без изскачащ прозорец, предполагащ миграция на остарели настройки на KeePassHTTP. + Не показвайте изскачащ прозорец, който предполага миграция на остарели настройки на KeePassHTTP. Do not prompt for KeePassHTTP settings migration. - Без миграция на настройки на KeePassHTTP. + Не питай за миграция на KeePassHTTP настройки. Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. - При стартиране обновява пътя до изпълнимия файл на KeePassXC или keepassxc-proxy с пътя до скриптовете за присъщи съобщения. + Update native messaging manifest files at startup - При стартиране обновява файловете с манифеста за присъщи съобщения + Use a custom proxy location if you installed a proxy manually. - Задайте местоположение на прокси сървър по избор, ако сте го инсталирали ръчно. + Използвайте на персоналзирана локация на проксито, ако сте инсталирали проксито ръчно. Use a custom proxy location: Meant is the proxy for KeePassXC-Browser - Местоположение на прокси сървър по избор: + Използване на друго прокси местоположение: Custom proxy location field - Поле за местоположение на прокси сървър по избор + Поле за персонализирано прокси местоположение Browser for custom proxy file - Избор на файл за прокси сървър + Избор на файл с персонализиран прокси Browse… @@ -1217,35 +1120,55 @@ Do you want to overwrite the passkey in %1 - %2? Use a custom browser configuration location: - Местоположение на настройките на мрежовия четец: + Използване на персонализирано местоположение за конфигуриране на браузъра: Browser type: - Вид мрежов четец: + Тип на браузъра: Toolbar button style - Стил на бутоните в лентата с инструменти + Стил на бутоните от лентата с инструменти Config Location: - Местоположение на настройките: + Местоположение на конфигурацията: Custom browser location field - Поле за местоположение на мрежовия четец: + Поле за персонализирано местоположение на браузъра Browse for custom browser path - Избор на местоположение на мрежовия четец + Избор на персонализиран път към браузъра Custom extension ID: - Идентификатор на разширение: + Персонализирано ID номер на разширение: Custom extension ID - Идентификатор на разширение + Персонализирано ID номер на разширение: + + + Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 + Поради изолирането при snap пакетите, трябва да изпълните скрипт, за да разрешите интеграцията на браузъра.<br />Можете да получите този скрипт от %1 + + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 + KeePassXC-Browser е необходим, за да работи интеграцията с браузъра.<br />Изтеглете го тук за %1 и %2 и %3. %4 + + + Please see special instructions for browser extension use below + Моля, вижте специалните инструкции за използване на разширението на браузъра по-долу + + + <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. + <b>Грешка:</b> Не може да бъде намерено потребителското местоположението на прокси сървъра!<br/>Интеграцията с браузъра НЯМА ДА РАБОТИ без прокси приложението. + + + <b>Warning:</b> The following options can be dangerous! + <b>Предупреждение:</b> Следните опции могат да бъдат опасни! Executable Files @@ -1257,62 +1180,22 @@ Do you want to overwrite the passkey in %1 - %2? Select custom proxy location - Избор на местоположение на прокси сървър по избор + Избор на потребитерско местоположение на прокси сървър Select native messaging host folder location - Избиране на папката на домакина на присъщите съобщения - - - Allow keepassxc-proxy to list all entries with their title, URL and UUID in connected databases. - Разрешаване на keepassxc-proxy достъп до списъка на всички записи с тяхното заглавие, адрес и идентификатор от свързаните хранилища. - - - Allow limited access to all entries in connected databases (ignores site access restrictions) - Разрешаване на ограничен достъп до всички записи от свързаните хранилища (пренебрегва ограниченията за достъп до страниците) - - - <b>Warning:</b> Only adjust these settings if necessary. - <b>Внимание:</b> Променяйте тези настройки само при необходимост. - - - The custom proxy location does not exist. - Местоположението на прокси сървъра по избор не съществува. - - - <b>Error:</b> The custom proxy location does not exist. Correct this in the advanced settings tab. - <b>Грешка:</b> Местоположението на прокси сървъра по избор не съществува. Направете промени в раздела за разширени настройки. - - - <b>Error:</b> The installed proxy executable is missing from the expected location: %1<br/>Please set a custom proxy location in the advanced settings or reinstall the application. - <b>Грешка:</b> Инсталираният изпълним файл на прокси сървъра липсва на очакваното местоположение: %1<br/>Задайте местоположение на прокси сървъра по избор в разширените настройки или преинсталирайте приложението. - - - Allows using insecure http://localhost with passkeys for testing purposes. - Позволява използване на незащитения адрес http://localhost с passkeys с цел изпитания - - - Allow using localhost with passkeys - Използване на passkeys през localhost - - - KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. - Разширението KeePassXC-Browser е необходимо, за да работи съчетаването с мрежовия четец.<br />Изтеглете за %1 и %2 и %3. - - - Browsers installed using Snap or Flatpak are not supported with exception to Firefox installed using Snap. - Не се поддържат мрежови четци, инсталирани от Снап или Флатпак, с изключение на Firefox, инсталиран от Снап. + CloneDialog Clone Entry Options - Настройки за дублиране на запис + Append ' - Clone' to title - Добавяне на „ - копие“ към заглавието + Добавяне на ' - Clone' към заглавието Replace username and password with references @@ -1325,13 +1208,21 @@ Do you want to overwrite the passkey in %1 - %2? CsvImportWidget + + Import CSV fields + Импортиране на полета в CSV + + + filename + име + size, rows, columns размер, редове, колони Column Association - Свързани колони + Асоциация на колоната Password @@ -1339,7 +1230,7 @@ Do you want to overwrite the passkey in %1 - %2? Username - Потребител + Портебител Title @@ -1351,11 +1242,11 @@ Do you want to overwrite the passkey in %1 - %2? URL - Адрес + Url Notes - Бележка + Бележки TOTP @@ -1363,15 +1254,15 @@ Do you want to overwrite the passkey in %1 - %2? Created - Създадено + Създаден Last Modified - Последна промяна + Последно променена Icon - Пиктограма + Икона Encoding @@ -1383,11 +1274,11 @@ Do you want to overwrite the passkey in %1 - %2? Text is qualified by - Текстът е класиран от + Текстът съответства на Text qualification - Класиране на текста + Fields are separated by @@ -1403,11 +1294,11 @@ Do you want to overwrite the passkey in %1 - %2? Header lines skipped - Прескочени са редове на заглавката + Прескочени хедър редове Number of header lines to discard - Брой на редовете в заглавката, които да бъдат отхвърлени + Брой на редовете с хедъри за отхвърляне First line has field names @@ -1415,7 +1306,7 @@ Do you want to overwrite the passkey in %1 - %2? Consider '\' an escape character - Символът „\“ е изключваща последователност + Приеми за '\' символ за край Preview @@ -1423,7 +1314,7 @@ Do you want to overwrite the passkey in %1 - %2? CSV import preview - Преглед на внесеното от файл с разделители + Визуализация на импортирането от CSV Not Present @@ -1433,43 +1324,50 @@ Do you want to overwrite the passkey in %1 - %2? Column %1 Колона %1 + + Imported from CSV file + Импортиран от CSV файл + + + Original data: + Оригинални данни: + + + Error(s) detected in CSV file! + Грешки, открити в CSV файл! + [%n more message(s) skipped] - [друго %n съобщение пропуснато][други %n съобщения пропуснати] + [%n повече съобщения пропуснати][още %n съобщения са пропуснати] - Failed to parse CSV file: %1 - Грешка при разбора на файл с разделители: %1 + Error + Грешка - Imported from CSV file: %1 - Внесено от файл с разделители: %1 - - - No Title Selected - Не е избрано заглавие - - - No title column was selected, entries will be hard to tell apart. -Are you sure you want to import? - Не е избрана колона за заглавие, следователно записите ще бъдат трудни за разграничаване. -Желаете ли внасянето да бъде извършено? - - - Tags - Етикети + CSV import: writer has errors: +%1 + CSV импортиране: при писане изникна грешка грешки: +%1 CsvParserModel + + %1, %2, %3 + file info: bytes, rows, columns + %1, %2, %3 + + + %n byte(s) + %n байта(ите)%n байт(а) + %n row(s) - CSV row count %n ред(а)%n ред(а) %n column(s) - CSV column count %n колона(и)%n колона(и) @@ -1490,59 +1388,51 @@ Are you sure you want to import? Error while reading the database: %1 - Грешка при четене на хранилището: %1 + Грешка при четене на базата данни: %1 Could not save, database does not point to a valid file. - Хранилището не може да бъде запазено. Не сочи към действителен файл. + Не може да се запише, базата данни не сочи към валиден файл. Database save is already in progress. - Хранилището в момента се запазва. + Записването на базата данни вече е в ход. Could not save, database has not been initialized! - Хранилището не може да бъде запазено. Не е подготвено! + Не може да се запише, базата данни не е инициализирана! Database file has unmerged changes. - Файлът на хранилището има неслети промени. + Файлът с базата данни има неслети промени %1 Backup database located at %2 %1 -Резервно копие на хранилището се намира на %2 +Резервана база данни се намира на %2 Key not transformed. This is a bug, please report it to the developers. - Ключът не е трансформиран. Това е дефект, докладвайте го на разработчиците. + Recycle Bin Кошче - - Database file read error. - Грешка при четене на файла на хранилището. - - - No file path was provided. - Не е зададен път до файл. - DatabaseOpenDialog Unlock Database - KeePassXC - Отключване на хранилище - KeePassXC + Отключване на база данни - KeePassXC DatabaseOpenWidget Unlock KeePassXC Database - Отключване на хранилище на KeePassXC + Отключване на KeePassXC базата данни Enter Password: @@ -1552,25 +1442,53 @@ Backup database located at %2 Password field Поле за парола + + Enter Additional Credentials (if any): + Въведете допълнителни идентификационни данни (ако има такива): + + + Key File: + Файл-ключ: + + + Key file help + Помощ за файл-ключове + Hardware key slot selection - Избор на позиция за хардуерен ключ + Избор на слот на хардуерен ключ + + + Hardware Key: + Хардуерен ключ: + + + Hardware key help + Помощ за хардуерен ключ Key file to unlock the database - Файл с ключ за отключване на хранилището + Файл-ключ за отключване на базата данни Browse for key file - Избор на файл с ключ + Избор на файл-ключ Browse… Избор… + + Refresh hardware tokens + Обновяване на хардуерни токени + + + Refresh + Обновяване + Unlock Database - Отключване на хранилище + Отключване на хранилището Cancel @@ -1582,11 +1500,11 @@ Backup database located at %2 Please present or touch your YubiKey to continue… - За да продължите добавете или докоснете своя YubiKey… + Моля добавете или натиснете върху своя YubiKey, за да продължите... Database Version Mismatch - Несъответствие в изданието на хранилището + Несъвпадение на версията на базата данни The database you are trying to open was most likely @@ -1596,15 +1514,15 @@ You can try to open it anyway, but it may be incomplete and saving any changes may incur data loss. We recommend you update your KeePassXC installation. - Хранилището, което се опитвате да отворите, най-вероятно е създадено с по-ново издание на KeePassXC. + Базата данни, която се опитвате да отворите, най-вероятно е създадена с по-нова версия на KeePassXC. -Може все пак да опитате да го отворите, но е възможно да бъде непълно и запазването на направените промени може да доведе до загуба на данни. +Може все пак да опитате да я отворите, но тя може да бъде непълна и запазването на впоследствие направените промени може да доведе до загуба на данни. Препоръчително е да обновите KeePassXC. Open database anyway - Отваряне въпреки това + Отваряне на хранилището въпреки това Database unlock canceled. @@ -1612,37 +1530,41 @@ We recommend you update your KeePassXC installation. Unlock failed and no password given - Грешка при отключване и не дадена парола + Грешка при отключване и не е върната парола Unlocking the database failed and you did not enter a password. Do you want to retry with an "empty" password instead? To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. - Отключването на хранилището е неуспешно и не сте въвели парола. -Искате ли повторен опит с „празна“ парола? + Отключването на базата данни е неуспешно и не сте въвели парола. +Искате ли вместо това да опитате отново с "празна" парола? -За да предотвратите появата на тази грешка, отворете „Настройки на хранилище / Сигурност“ и нулирате паролата. +За да предотвратите появата на тази грешка, трябва да отидете на "Настройки на базата данни / сигурност" и да нулирате паролата си. Retry with empty password - Нов опит с празна парола + Опитай отново с празна парола + + + Failed to authenticate with Touch ID + Failed to open key file: %1 - Грешка при отваряне на файл с ключ: %1 + Грешка при отваряне на файл-ключ: %1 Old key file format - Стар формат на файла с ключ + Стар файлов формат на ключа You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database &gt; Database Security &gt; Change Key File.</strong><br> - Използвате стар формат на файла с ключ, който KeePassXC може <br>да спре да поддържа в бъдеще.<br><br>Вземете предвид възможността да създадете нов файл с ключ от:<br><strong>Хранилище &gt; Защита на данните &gt; Промяна на файл с ключ.</strong><br> + Използвате стар формат на файл-ключ, който KeePassXC може <br>да спре да поддържа в бъдеще.<br><br>Създайте нов ключ, от:<br><strong>Хранилище &gt; Защита на данните &gt; Промяна на файл-ключ.</strong><br> Don't show this warning again - Спиране на това предупреждение + Не показвай това предупреждение отново All files @@ -1650,77 +1572,50 @@ To prevent this error from appearing, you must go to "Database Settings / S Key files - Файлове с ключ + Файл-ключове Select key file - Избор на файл с ключ + Избор на файл-ключ Cannot use database file as key file - Файл на хранилище не може да бъде използван като файл с ключ. + Не може да се използва файлът с базата данни като файл-ключ + + + You cannot use your database file as a key file. +If you do not have a key file, please leave the field empty. + Не можете да използвате файла с базата данни като файл-ключ. +Ако нямате файл-ключ, оставете полето празно. + + + Detecting hardware keys… + Откриване на хардуерни ключове... + + + No hardware keys detected + Не са открити хардуерни ключове + + + Select hardware key… + Избор на хардуерен ключ... + + + <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information…</p> + <p>В допълнение към паролата, можете да използвате таен файл за подобряване на защитата на хранилището. Този файл може да бъде генериран в настройките за защита на хранилището.</p><p>Това <strong>не</strong> е файл на *.kdbx с хранилище!<br>Ако нямате файл-ключ, оставете това поле празно.</p><p>Щракнете за подробности…</p> + + + <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +<p>Click for more information…</p> + authenticate to access the database - удостоверяване за получаване достъп до хранилището + удостовреряване за получаване достъп до базата данни - Failed to authenticate with Quick Unlock: %1 - Неуспешно удостоверяване чрез Quick Unlock: %1 - - - Select Key File: - Изберете файл с ключ: - - - <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!</p> - <p>В допълнение към паролата, можете да използвате таен файл за подобряване на защитата на хранилището. Този файл може да бъде създаден в настройките за защита на хранилището.</p><p>Това <strong>не</strong> е файл на *.kdbx с хранилище!</p> - - - Use hardware key [Serial: %1] - Използване на хардуерен ключ [Сериен № %1] - - - Use hardware key - Използване на хардуерен ключ - - - Your database file is NOT a key file! -If you don't have a key file or don't know what that is, you don't have to select one. - Хранилището НЕ Е файл с ключ! -Ако не разполагате с файл с ключ или не знаете какво е това, оставете полето празно. - - - KeePassXC database file selected - Избрано е хранилище на KeePassXC - - - The file you selected looks like a database file. -A database file is NOT a key file! - -Are you sure you want to continue with this file?. - Избраният файл прилича на файл на хранилище. -Хранилището НЕ Е файл с ключ! - - - No hardware keys found. - Не са открити хардуерни ключове. - - - Refresh Hardware Keys - Презареждане на хардуерните ключове - - - Click to add a key file. - За да добавите файл с ключ щракнете тук. - - - <a href="#" style="text-decoration: underline">I have a key file</a> - <a href="#" style="text-decoration: underline">Имам файл с ключ</a> - - - Hardware keys found, but no slots are configured. - Открити са хардуерни ключове, но без настроени слотове. + Failed to authenticate with Windows Hello: %1 + Неуспешно удостоверяване чрез Windows Hello: %1 @@ -1732,6 +1627,10 @@ Are you sure you want to continue with this file?. DatabaseSettingsDialog + + Advanced Settings + Разширени настройки + General Основни @@ -1742,54 +1641,46 @@ Are you sure you want to continue with this file?. Database Credentials - Достъп до хранилището + Идентификационни данни на база данни Encryption Settings - Настройки на шифроването + Настройки на шифроване Browser Integration - Съчетаване с мрежов четец + Интеграция на браузъра Maintenance Профилактика - - KeeShare - KeeShare - - - Secret Service Integration - Съчетаване с Услуга за тайни - - - Remote Sync - Отдалечено синхронизиране - - - Database Settings: %1 - Настройки на хранилището: %1 - DatabaseSettingsWidgetBrowser KeePassXC-Browser settings - Настройки на KeePassXC-Browser + KeePassXC-Browser настройки - Disconnect all browsers - Изключване от всички мрежови четци + Convert KeePassHTTP data + Преобразуване на KeePassHTTP данни - Forget all site-specific settings on entries - Премахване на специфичните за страници настройки от записите + Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data + Преобразуване на стари KeePassHTTP свойствa в съвместими с KeePassXC-Browser такива Refresh database root group ID - Нов идентификатор на кореновата група + Обновяване на IDна главната група на базата данни + + + Disconnect all browsers + Разедини всички браузъри + + + Forget all site-specific settings on entries + Забравете всички настройки за конкретни сайтове на записите Stored keys @@ -1797,7 +1688,7 @@ Are you sure you want to continue with this file?. Stored browser keys - Запазени ключове на мрежовия четец + Съхранените ключове на браузъра Remove selected key @@ -1814,8 +1705,8 @@ Are you sure you want to continue with this file?. Do you really want to delete the selected key? This may prevent connection to the browser plugin. - Желаете ли избраният ключ да бъде премахнат? -Може да попречи на свързването с разширението на мрежовия четец. + Наистина ли искате да изтриете избрания ключ? +Това може да попречи на свързването с приставката на браузъра. Key @@ -1831,96 +1722,101 @@ This may prevent connection to the browser plugin. Enable Browser Integration to access these settings. - Съчетаване с мрежови четци за достъп до настройките. + Разрешаване на интеграция с браузъри за достъп до тези настройки. Do you really want to disconnect all browsers? This may prevent connection to the browser plugin. - Желаете ли да изключите от всички мрежови четци? -Може да попречи на свързване с разширението на четеца. + Наистина ли искате да разедините всички браузъри? +Това може да попречи на свързването с приставката в браузъра. + + + KeePassXC: No keys found + KeePassXC: Не са намерени ключове No shared encryption keys found in KeePassXC settings. Не са намерени споделени ключове за криптиране в настройките на KeePassXC. + + KeePassXC: Removed keys from database + KeePassXC: Премахнати ключове от базата данни + Successfully removed %n encryption key(s) from KeePassXC settings. - Успешно е отстранен %n шифроващ ключ от настройките на KeePassXC.Успешно са отстранени %n шифроващи ключа от настройките на KeePassXC. + Успешно отстранен %n шифроващ ключ от настройките на KeePassXC.Успешно отстранен %n ключ(а) за шифроване от настройките на KeePassXC. Do you really want forget all site-specific settings on every entry? Permissions to access entries will be revoked. - Наистина ли искате да бъдат забравени всички специфични настройки за сайтовете за всички записи? -Правата за достъп до записите ще бъдат отнети. + Наистина ли искате да се забравят всички настройки за конкретния сайт за всеки запис? +Разрешенията за достъп до записите ще бъдат отменени. Removing stored permissions… - Премахване на запазените права за достъп… + Премахване на съхранените разрешения... Abort Отказ + + KeePassXC: Removed permissions + KeePassXC: Премахнати разрешения + Successfully removed permissions from %n entry(s). - Премахнати са правата за достъп от %n запис.Премахнати са правата за достъп от %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 convert all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + Refresh database ID - Обновяване на идентификатора на хранилището + Обновяване на ID на база данни Do you really want refresh the database ID? This is only necessary if your database is a copy of another and the browser extension cannot connect. - Желаете ли идентификаторът на хранилището да бъде обновен? -Това е необходимо само, ако хранилището е копие разширението на браузъра не може да се свърже. - - - Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data - Преобразуване на изведени от употреба атрибути на KeePassHTTP в съвместими с KeePassXC-Browser - - - No keys found - Не са намерени ключове - - - Removed keys from database - Премахнати ключове от хранилището - - - Removed permissions - Оттеглени права - - - No entry with permissions found! - Не е намерен запис с права! + Наистина ли искате да обновите ID-то на базата данни? +Това е необходимо само, ако вашата база данни е копие на друга и разширението на браузъра не може да се свърже. DatabaseSettingsWidgetDatabaseKey Add additional protection… - Добавяне на допълнителна защита… + 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? - ВНИМАНИЕ! Не сте задали парола. Използването на хранилище без парола е силно непрепоръчително! + Предупреждение! Не сте задали парола. Използването на база данни без парола е силно обезсърчено! -Желаете ли да продължите без парола? +Наистина ли искате да продължите без парола? Continue without password - Напред без парола + Продължи без парола No encryption key added @@ -1928,54 +1824,50 @@ Are you sure you want to continue without a password? You must add at least one encryption key to secure your database! - За да защитите хранилището, трябва да добавите най-малко един шифроващ ключ! + Трябва да добавите поне един шифроващ ключ, за да защитите вашата база данни! Unknown error - Неочаквана грешка + Неизвестна грешка Failed to change database credentials - Грешка при промяна на данните за удостоверяване на достъп до хранилището - - - Weak password - Слаба парола - - - This is a weak password! For better protection of your secrets, you should choose a stronger password. - Това е слаба парола! За по-добра защита на вашите тайни, трябва да изберете по-силна парола. - - - The provided password does not meet the minimum quality requirement. - Паролата не отговаря на минималните изисквания за качество. + Неуспешна промяна на идентификационните данни на базата данни DatabaseSettingsWidgetEncryption Decryption Time: - Време за разшифроване: + Време за дешифриране: + + + Change existing decryption time + Промяна на времето за дешифриране + + + Change + Промяна Decryption time in seconds - Време за разшифроване в секунди + Време за дешифриране в секунди Higher values offer more protection, but opening the database will take longer. - По-големите стойности предлагат по-добра защита, но отварянето на хранилището отнема повече време. + По-високите стойности предлагат по-голяма защита, но отварянето на базата данни ще отнеме повече време. Database format: - Формат на хранилището: + Формат на базата данни: Database format - Формат на хранилището + Формат на базата данни Format cannot be changed: Your database uses KDBX 4 features - Форматът не може да бъде променен: хранилището използва възможностите на KDBX 4 + Форматът не може да бъде променен: хранилището използва възможности на KDBX 4 Unless you need to open your database with other programs, always use the latest format. @@ -1999,7 +1891,7 @@ Are you sure you want to continue without a password? Key Derivation Function: - Функция за извличане на ключ: + Функция за формиране на ключа Key derivation function @@ -2007,27 +1899,27 @@ Are you sure you want to continue without a password? Transform rounds: - Брой преобразувания: + Рунда за трансформиране: Transform rounds - Брой преобразувания + Трансформиционни рунда Memory Usage: - Използвана памет: + Използване на паметта: Memory usage - Използвана памет + Използване на паметта Parallelism: - Паралелно изпълнение: + Паралелизъм: Parallelism - Паралелно изпълнение + Паралелизъм KDBX 4 (recommended) @@ -2037,22 +1929,27 @@ Are you sure you want to continue without a password? KDBX 3 KDBX 3 + + 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, days, or even longer to open. - Използвате твърде много преобразувания на ключове с Argon2. + Използвате твърде голям брой кръгове за преобразуване на ключове с Argon2. -Ако запазите този брой, отварянето на хранилището може да отнеме часове, дни или дори по-дълго. +Ако оставите този брой, отварянето на хранилището може да отнеме часове, дни или дори повече време. Understood, keep number - Разбирам, без промяна на стойнстта + Разбирам, остави стойнстта Cancel @@ -2061,87 +1958,73 @@ If you keep this number, your database may take hours, days, or even longer to o 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 will not be protected from brute force attacks. - Използвате твърде малко преобразувания на ключове с 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) - нишка нишки - - - Encryption Settings: - Настройки на шифроването: - - - Basic - Основни - - - Advanced - Разширени + резба(и)нишка(и) DatabaseSettingsWidgetFdoSecrets Exposed Entries - Изложени записи + Разкрити записи Don't expose this database - Това хранилище да не бъде излагано + Не разкривай тази база данни Expose entries under this group: - Излагане на записите от тази група: + Разкрий записите в тази група: Enable Secret Service to access these settings. - За да получите достъп до тези настройки включете Услугата за тайни. + За получаване достъп до тези настройки включвете Secret Service. DatabaseSettingsWidgetGeneral Database Metadata - Описателни данни на хранилището + Описателни данни за хранилището Database name: - Име на хранилището: + Име на базата данни: Database name field - Поле за име на хранилището + Поле за име на база данни Database description: - Описание на хранилището: + Описание на базата данни: Database description field - Поле за описание на хранилището + Поле за описание на базата данни Default username: @@ -2157,15 +2040,15 @@ If you keep this number, your database will not be protected from brute force at Maximum number of history items per entry - Максимален брой елементи в хронологията на запис + Максимален брой елементи от историята за запис Maximum size of history per entry - Максимален размер на хронологията на запис + Максимален размер на историята за запис MiB - МиБ + Мб Use recycle bin @@ -2173,11 +2056,11 @@ If you keep this number, your database will not be protected from brute force at Additional Database Settings - Разширени настройки на хранилището + Допълнителни настройки на базата данни Enable compression (recommended) - Компресиране (препоръчително) + Разрешаване на компресирането (препоръчително) Delete Recycle Bin @@ -2186,8 +2069,8 @@ If you keep this number, your database will not be protected from brute force at Do you want to delete the current recycle bin and all its contents? This action is not reversible. - Желаете ли кошчето и цялото му съдържание да бъде премахнато? -Действието е необратимо. + Искате ли да изтриете текущото кошче и цялото му съдържание? +Това действие е необратимо. (old) @@ -2198,100 +2081,29 @@ This action is not reversible. the oldest history items of an entry will be removed such that only the specified amount of entries remain at most. - При запазване на настройката или при промяна на запис -най-старите елементи от хронологията на записа ще бъдат -премахнати така, че да останат определения брой записи. + Limit the amount of history items per entry to: - Ограничаване на елементите от хронологията на всеки запис до: + When saving this setting or editing an entry the oldest history items of an entry will be removed such that the remaining history items add up to the specified amount at most. - При запазване на настройката или при промяна на запис -най-старите елементи от хронологията на записа ще бъдат -премахнати така, че да останат определения брой записи. + Limit the total size of history items per entry to: - Ограничаване на елементите от хронологията на всеки запис до: + Move entries to a recycle bin group instead of deleting them from the database. Entries deleted from the recycle bin are removed from the database. - Преместване на записите в групата -на кошчето вместо да бъдат премахвани -от хранилището. Записите, премахнати от -кошчето, биват премахнати от хранилището. - - - Autosave delay since last change - Изчакване на автоматично запазване след промяна - - - Autosave delay - Изчакване на автоматично запазване - - - Autosave delay since last change in minutes - Изчакване на автоматично запазване след промяна в минути - - - min - мин - - - Autosave delay since last change checkbox - Отметка на изчакването на автоматичното запазване след промяна - - - Public Database Metadata - Публични описателни данни на хранилището - - - Warning: the following settings are not encrypted. - Внимание: следните настройки не са шифровани. - - - Display name: - Име: - - - Publically visible display name used on the unlock dialog - Общодостъпно име, използвано в диалога за отключване - - - Database public display name - Публично име на хранилището - - - Display color: - Цвят: - - - Publically visible color used on the unlock dialog - Общодостъпен цвят, използван в диалога за отключване - - - Database public display color chooser - Контрол за избор на цвят на хранилището - - - Clear - Изчистване - - - Display icon: - Пиктограма: - - - Select Database Icon - Избор на пиктограма на хранилището + @@ -2302,11 +2114,11 @@ removed from the database. Breadcrumb - Пътека + Type - Вид + Тип Path @@ -2330,54 +2142,54 @@ removed from the database. DatabaseSettingsWidgetMaintenance Manage Custom Icons - Управление на потребителски пиктограми + Delete selected icon(s) - Премахване на избраните пиктограми + Delete all custom icons not in use by any entry or group - Премахва всички неизползвани потребителски пиктограми + Purge unused icons - Изчистване на неизползвани пиктограми + Изчистване на неизползвани икони Confirm Deletion - Потвърждаване на изтриване + Потвърждение на действието At least one of the selected icons is currently in use by at least one entry or group. The icons of all affected entries and groups will be replaced by the default icon. Are you sure you want to delete icons that are currently in use? - Най-малко една от избраните пиктограми се използва от най-малко един запис или група. Пиктограмите на всички засегнати записи или групи ще бъдат заменени с тази по подразбиране. Сигурни ли сте, че желаете пиктограмите, които в момента се използват да бъдат премахнати? + Custom Icons Are In Use - Потребителските пиктограми се използват + Използват се потребителски икони All custom icons are in use by at least one entry or group. - Всички потребителски пиктограми се използват от най-малко един запис или група. + Потребителските икони се използват от поне един запис или група. Purged Unused Icons - Неизползваните пиктограми са изчистени + Изчистени неизползвани икони Purged %n icon(s) from the database. - От хранилището е изчистена %n пиктограма.От хранилището са изчистени %n пиктограми. + DatabaseSettingsWidgetMetaDataSimple Database Name: - Име на хранилището: + Име на базата данни: Database name field - Поле за име на хранилището + Поле за име на база данни Description: @@ -2385,158 +2197,23 @@ removed from the database. Database description field - Поле за описание на хранилището - - - - DatabaseSettingsWidgetRemote - - Sync Commands - Команди за извършване на синхронизиране - - - Remove - Премахване - - - Command Settings - Настройки на команда - - - Name - Име - - - Save - Запазване - - - Download - Изтегляне - - - Command: - Команда: - - - Download command field - Поле за командата за изтегляне - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - напр.: „sftp user@hostname“ или „scp user@hostname:отдалечено-хранилище.kdbx {TEMP_DATABASE}“ - - - Input: - Въвеждане: - - - Download input field - Поле за въвеждане при изтегляне - - - Upload - Качване - - - Upload command field - Поле за командата за качване - - - e.g.: "sftp user@hostname" or "scp {TEMP_DATABASE} user@hostname:DatabaseOnRemote.kdbx" - напр.: „sftp user@hostname“ или „scp {TEMP_DATABASE} user@hostname:отдалечено-хранилище.kdbx“ - - - Upload input field - Поле за въвеждане при качване - - - Name cannot be empty. - Името не трябва да бъде празно. - - - Test - Проверяване - - - Download command cannot be empty. - Командата за изтегляне не трябва да бъде празна. - - - Download failed with error: %1 - Грешка при изтегляне: %1 - - - Download finished, but file %1 could not be found. - Изтеглянето приключи, но файлът %1 не може да бъде намерен. - - - Download successful. - Изтеглянето е успешно. - - - Save Remote Settings - Запазване на отдалечени настройки - - - You have unsaved changes. Do you want to save them? - Има незапазени промени. Желаете ли да бъдат запазени? - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - напр.: -get отдалечено-хранилище.kdbx {TEMP_DATABASE} -exit ---- -Низът {TEMP_DATABASE} се използва за заместител на временното местоположение на хранилището -Командата трябва да завърши. В случая на `sftp` последната изпратена команда трябва да бъде `exit` - - - e.g.: -put {TEMP_DATABASE} DatabaseOnRemote.kdbx -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - напр.: -put {TEMP_DATABASE} отдалечено-хранилище.kdbx -exit ---- -Низът {TEMP_DATABASE} се използва за заместител на временното местоположение на хранилището -Командата трябва да завърши. В случая на `sftp` последната изпратена команда трябва да бъде `exit` - - - - Timeout: - Време на изчакване: - - - seconds - секунди + Поле за описание на базата данни DatabaseTabWidget 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. - Създаденото хранилище няма ключ или ФИК и няма да бъде запазено. -Това определено е дефект, съобщете на разработчиците. + KeePass 2 Database - Хранилище на KeePass 2 + KeePass 2 база данни All files @@ -2544,7 +2221,7 @@ This is definitely a bug, please report it to the developers. Open database - Отваряне на хранилище + Отваряне на база данни Failed to open %1. It either does not exist or is not accessible. @@ -2552,61 +2229,77 @@ This is definitely a bug, please report it to the developers. CSV file - Файл с разделители + CSV файл + + + Select CSV file + Изберете CSV файл Merge database - Сливане на хранилище + Сливане на база данни + + + KeePass 1 database + KeePass 1 база данни + + + Open KeePass 1 database + Отвораряне на KeePass 1 база данни + + + Open OPVault + Отвори OPVault Export database to CSV file - Изнасяне на хранилището във файл с разделители + Експортиране на база данни в CSV файл Writing the CSV file failed. - Грешка при записване на файла с разделители. + Записът на CSV файла е неуспешен. Writing the HTML file failed. - Грешка при записване на HTML файла. - - - Export database to XML file - Изнасяне на хранилището в XML файл - - - XML file - XML файл - - - Writing the XML file failed - Грешка при записване на XML файла + Записът на HTML файл е неуспешен. Export Confirmation - Потвърждаване + Потвърждение на експортирането You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? - На път сте да изнесете хранилището в нешифрован файл. Това ще направи вашите пароли и чувствителна информация уязвими! Желаете ли да продължите? + Ще експортирате вашата база данни в нешифрован файл. Това ще направи вашите пароли и чувствителна информация уязвими! Наистина ли искате да продължите? + + + New Database + Нова база данни + + + %1 [New Database] + Database tab name modifier + %1 [Нова база данни] %1 [Locked] Database tab name modifier - %1 [Заключено] + %1 [Заключен] - %1 [Temporary] - Database tab name modifier - %1 [Временно] + Export database to XML file + Изнасяне в XML + + + XML file + Файл на XML + + + Writing the XML file failed + Запазването на файла на XML е неуспешно. DatabaseWidget - - Searches and Tags - Търсене и етикети - Searching… Търсене… @@ -2617,23 +2310,23 @@ This is definitely a bug, please report it to the developers. Confirm Auto-Type - Потвърждаване на автоматично въвеждане + Perform Auto-Type into the previously active window? - Да бъде ли изпълнено автоматично въвеждане в предишния активен прозорец? + Execute command? - Изпълняване на командата? + Да се изпълни командата? 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 @@ -2641,7 +2334,7 @@ This is definitely a bug, please report it to the developers. Do you really want to delete the group "%1" for good? - Желаете ли групата „%1“ да бъде безвъзвратно премахната? + Наистина ли искате да изтриете групата "%1" за добро? Move group to recycle bin? @@ -2649,31 +2342,27 @@ This is definitely a bug, please report it to the developers. Do you really want to move the group "%1" to the recycle bin? - Желаете ли групата „%1“ да бъде преместена в кошчето? + Наистина ли искате да преместите групата "%1" в кошчето? Expired entries Записи с изтичаща давност - - Entries expiring within %1 day(s) - Записи с изтичаща давност след %1 денЗаписи с изтичаща давност след %1 дни - No current database. - Няма текущо хранилище. + Няма текуща база данни. No source database, nothing to do. - Няма изходно хранилище. + Няма база данни източник, нищо за правене. Successfully merged the database files. - Файловете на хранилището са успешно сляти. + Успешно слети файловете на базата данни. Database was not modified by merge operation. - Хранилището не е променяно от сливане. + Базата данни не е модифицирана от операция по сливане. Search Results (%1) @@ -2683,46 +2372,54 @@ This is definitely a bug, please report it to the developers. No Results Няма резултати - - Save - Запазване - - - Enter a unique name or overwrite an existing search from the list: - Въведете друго име или презапишете съществуващо търсене от списъка: - - - Save Search - Запазване на търсенето - Lock Database? - Заключване на хранилището? + Заключване на базата данни? You are editing an entry. Discard changes and lock anyway? - Променяте запис. Отхвърляне на промените и заключване въпреки това? + Редактирате запис. Отхвърляне на промените и заключване въпреки това? "%1" was modified. Save changes? - Хранилището „%1“ е променено. -Да бъдат ли запазени промените? + "%1" е променен. +Да се запишат ли промените? Database was modified. Save changes? - Хранилището е променено. -Да бъдат ли запазени промените? + Базата данни е променена. +Да се запишат ли промените? Save changes? - Да бъдат ли запазени промените? + Да се запишат ли промените? 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? + Файлът с базата данни е променен и имате незаписани промени. +Искате ли да обедините вашите промени? + + + Could not open the new database file while attempting to autoreload. +Error: %1 + Не можа да се отвори новия файл с базата данни при опит за автоматично презареждане. +Грешка: %1 + Disable safe saves? Забраняване на безопасно запазване? @@ -2730,12 +2427,12 @@ Save changes? 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 няколко пъти не успя да запази хранилището. Вероятна причина е услугата за синхронизиране на файлове, която е заключила файла за писане. -Забраняване на безопасното запазване и повторен опит? + KeePassXC не успя да запази базата данни няколко пъти. Това вероятно се дължи на услугите за синхронизация на файлове, които заключват записа на файла. +Забраняване на безопасното запазване и опитайте отново? Writing the database failed: %1 - Грешка при писане в хранилището: %1 + Грешка при запис на базата данни: %1 Passwords @@ -2743,15 +2440,15 @@ Disable safe saves and try again? Save database as - Запазване на данните като + Записване на база данни като KeePass 2 Database - Хранилище на KeePass 2 + KeePass 2 база данни Save database backup - Запазване на резервно копие на данните + Записване на резервно копие на базата данни Empty recycle bin? @@ -2759,100 +2456,31 @@ Disable safe saves and try again? Are you sure you want to permanently delete everything from your recycle bin? - Желаете ли всичко от кошчето да бъде безвъзвратно премахнато? + Наистина ли искате да изтриете завинаги всичко от кошчето? Could not find database file: %1 - Файлът с хранилището не може да бъде намерен: %1 + Файлът с базата данни не може да бъде намерен: %1 + + + Entries expiring within %1 day(s) + - New Database - Ново хранилище + Searches and Tags + Търсене и етикети - %1 [New Database] - Database tab name modifier - %1 [Ново хранилище] + Enter a unique name or overwrite an existing search from the list: + Въведете друго име или презапишете съществуващо търсене от списъка: - Remote Sync did not contain any download or upload commands. - Отдалеченото синхронизиране не съдържа команди за изтегляне или качване. + Save + Запазване - Remote sync '%1' completed successfully! - Отдалеченото синхронизиране „%1“ завърши! - - - Remote sync '%1' failed: %2 - Отдалеченото синхронизиране „%1“ завърши с грешка: %2 - - - Error while saving database %1: %2 - Грешка при запазване на хранилището %1: %2 - - - Downloading... - Изтегляне... - - - Uploading... - Качване… - - - Syncing... - Синхронизиране… - - - Remove passkey from entry - Премахване на passkey от запис - - - Do you want to remove the passkey from this entry? - Желаете ли този passkey да бъде премахнат от записа? - - - The database file "%1" was modified externally - Файлът на хранилището „%1“ е променен от друго приложение - - - Do you want to load the changes? - Желаете ли промените да бъдат заредени? - - - Reload database - Презареждане на хранилището - - - Reloading database… - Презареждане на хранилището… - - - Reload canceled - Презареждането е прекъснато - - - Reload successful - Успешно презаредено - - - Reload pending user action… - Презареждането изчаква действие от потребителя… - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes<br>Ignore the changes on disk until save<br>Discard unsaved changes - Файлът на хранилището „%1“ е променен от друго приложение<br>Как желаете да продължите?<br><br>Сливане на промените<br>Пренебрегване на промените на диска до запазване<br>Отказ от незапазените промени - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes then save<br>Overwrite the changes on disk<br>Discard unsaved changes - Файлът на хранилището „%1“ е променен от друго приложение<br>Как желаете да продължите?<br><br>Сливане на промените<br>Презаписване на промените на диска<br>Отказ от незапазените промени - - - Database file overwritten. - Файлът на хранилището е презаписан. - - - Database file on disk cannot be unlocked with current credentials.<br>Enter new credentials and/or present hardware key to continue. - Файлът на хранилището не може да бъде отключено с текущите данни за отключване.<br>За да продължите въведете данните за отключване и/или включете хардуерен ключ. + Save Search + Запазване на търсенето @@ -2863,19 +2491,19 @@ Disable safe saves and try again? Advanced - Разширени + Допълнителни Icon - Пиктограма + Икона Auto-Type - Автоматично въвеждане + Auto-Type Browser Integration - Съчетаване с мрежови четци + Интеграция на браузъра <empty URL> @@ -2887,7 +2515,7 @@ Disable safe saves and try again? Are you sure you want to remove this URL? - Желаете ли адресът да бъде премахнат? + Наистина ли искате да премахнете този URL? Properties @@ -2895,15 +2523,19 @@ Disable safe saves and try again? History - Хронология + История SSH Agent - Агент на SSH + SSH Agent n/a - липсва + n/a + + + (encrypted) + (шифровано) Select private key @@ -2911,7 +2543,7 @@ Disable safe saves and try again? Entry history - Хронология на записа + История на записа Add entry @@ -2919,53 +2551,49 @@ Disable safe saves and try again? Edit entry - Променяне на запис + Редактиране на запис Some Browser Integration settings are overridden by group settings. - Някои настройки на съчетаването с мрежовия четец са презаписани от настройки на групата. + Invalid Entry - Неприемлив запис + Невалиден запис An external merge operation has invalidated this entry. Unfortunately, any changes made have been lost. - Външна операция на сливане е анулирала записа. -За съжаление, всички промени са загубени. + Външна операция за обединяване е анулирала този запис. +За съжаление, всички направени промени са загубени. Auto-Type Validation Error - Грешка при потвърждаване на автоматично въвеждане + An error occurred while validating the custom Auto-Type sequence: %1 Would you like to correct it? - Грешка при потвърждаване на потребителската последователност за автоматично въвеждане: -%1 -Желаете ли грешката да бъде отстранена? + An error occurred while validating the Auto-Type sequence for "%1": %2 Would you like to correct it? - Грешка при потвърждаване на последователността за автоматично въвеждане на „%1“: -%2 -Желаете ли грешката да бъде отстранена? + Entry updated successfully. - Записът е обновен. + Записът е актуализиран успешно. Unsaved Changes - Незапазени промени + Незаписани промени Would you like to save changes to this entry? - Желаете ли промените на записа да бъдат запазени? + Желаете ли да запишете промените в този запис? New attribute @@ -2977,7 +2605,7 @@ Would you like to correct it? Are you sure you want to remove this attribute? - Желаете ли атрибутът да бъде премахнат? + Наистина ли искате да премахнете този атрибут? Reveal @@ -2985,31 +2613,27 @@ Would you like to correct it? [PROTECTED] Press Reveal to view or edit - [ЗАЩИТЕНО] Натиснете „Показване“, за да видите или промените + [ЗАЩИТЕНО] Натиснете "Показане", за да видите или редактирате Hide Скриване - - %n hour(s) - %n час%n часа - %n week(s) - %n седмица%n седмици + %n седмица(а)%n седмица(и) %n month(s) - %n месец%n месеца + %n месец(а)%n месец(а) %n year(s) - %n година%n години + %n година(а)%n година(е) - - Failed to decrypt SSH key, ensure password is correct. - Грешка при разшифроване на ключа на SSH, уверете се, че паролата е вярна. + + %n hour(s) + @@ -3028,15 +2652,15 @@ Would you like to correct it? Add a new attribute - Добавяне на атрибут + Добавяне на нов атрибут Add - Добавяне + Добавите Remove selected attribute - Премахване на избрания атрибут + Премахни избрания атрибут Remove @@ -3044,19 +2668,19 @@ Would you like to correct it? Edit attribute name - Промяна на името на атрибут + Редактиране на име на атрибут Edit Name - Променяне на името + Редактиране на името Toggle attribute protection - Превключване на защитата на атрибут + Превключване на защита на атрибути Protect - Защитен атрибут + Защити Show a protected attribute @@ -3068,27 +2692,27 @@ Would you like to correct it? Attachments - Прикачени файлове + Приложения If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements. - Ако е отметнато, записът няма да присъства в отчети като Проверка на състоянието и HIBP, дори и да не отговаря на изискванията за качество. + Exclude from database reports - Изключване от отчетите на хранилището + Изключване от отчетите на базата данни Foreground Color: - Цвят текста: + Цвят преден план: Foreground color selection - Избор на цвят за текста + Избор на цвят за преден план Background Color: - Цвят на фона: + Цвят заден план: Background color selection @@ -3099,49 +2723,39 @@ Would you like to correct it? EditEntryWidgetAutoType Enable Auto-Type for this entry - Включване на автоматичното въвеждане за записа + Разреши Auto-Type за този запис Inherit default Auto-Type sequence from the group - Наследяване на подразбираната последователност за автоматично въвеждане от групата + Наследена последователност Auto-Type по подразбиране от групата Use custom Auto-Type sequence: - Използване на следната последователност за автоматично въвеждане: + Използвана персонализирана Auto-Type последователност Custom Auto-Type sequence - Потребителска последователност за автоматично въвеждане + Персонализирана Auto-Type последователност Open Auto-Type help webpage - Отваря страницата с помощ за автоматично въвеждане + Отваряне на уеб страницата за помощ за Auto-Type Window Associations - Обвързване с прозорци + Асоциация на прозореца Existing window associations - Съществуващи връзки с прозорци + Съществуващи асоциации с прозорци Add new window association - Добавя връзка с прозорец - - - + - Add item - + + Добавяне на нова асоциация с прозорец Remove selected window association - Премахва избраната връзка с прозорец - - - - - Remove item - - + Премахване на избраната асоциация с прозорец Window title: @@ -3149,50 +2763,76 @@ Would you like to correct it? You can use an asterisk (*) to match everything - Звездичката (*) съвпада със заглавията на всички прозорци + Можете да използвате звездичка (*), за да съответства на всичко Set the window association title - Задава заглавието на връзката с прозорец + Задаване на заглавието на асоциацията с прозорец You can use an asterisk to match everything - Звездичката съвпада със заглавията на всички прозорци + Можете да използвате звездичка, за да съответства на всичко Use a specific sequence for this association: - Използване на следната последователност за тази връзка: + Използвайте конкретна последователност за тази асоциация: Custom Auto-Type sequence for this window - Потребителска последователност за автоматично въвеждане за този прозорец + Персонализирана Auto-Type последователност + + + + + Add item + + + + + - + Remove item + - EditEntryWidgetBrowser + + These settings affect to the entry's behaviour with the browser extension. + Тези настройки порменят поведението на записа с разширението за браузър. + General Основни Hide this entry from the browser extension - Скриване на елемента от разширението на мрежовия четец + Скриване на този елемент от разширението на браузъра Skip Auto-Submit for this entry - Без автоматично изпращане на формуляр с този запис + Пропускане на автоматично подаване за този запис + + + Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. + Изпращане само на тази настройка към браузъра за HTTP Auth диалози. Ако е включено, нормалните форми за влизане няма да покажат този запис за селекция. Use this entry only with HTTP Basic Auth - Използване на записа само с HTTP Basic Auth + Използвай този запис само с HTTP Basic Auth + + + Do not send this setting to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. + Не изпращай тази настройка към браузъра за HTTP Auth прозорци. При активиране, HTTP Auth прозорците няма да покажат този запис за избор. Do not use this entry with HTTP Basic Auth - Без използване на записа с HTTP Basic Auth + Не използвай този запис с HTTP Basic Auth + + + Additional URL's + Допълнителни URL-и Add - Добавяне + Добавите Remove @@ -3200,34 +2840,18 @@ Would you like to correct it? Edit - Променяне - - - These settings affect the entry's behaviour with the browser extension. - Тези настройки променят поведението на записа спрямо разширението на мрежовия четец. - - - Additional URLs - Допълнителни адреси - - - Only send this entry to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. - Изпраща към мрежовия четец този запис само при диалози за HTTP Auth. Ако е отметнато, този запис няма да е достъпен за обикновените формуляри за вход. - - - Do not send this entry to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. - Не изпраща към мрежовия четец този запис при диалози за HTTP Auth. Ако е отметнато, този запис няма да е достъпен за диалозите за HTTP Auth. + Редактиране EditEntryWidgetHistory Entry history selection - Избиране на предишно състояние на запис + Избор на записи от хронологията Show entry at selected history state - Показва записа в избраното състояние + Показване на запис в избраното състояние от хронологията Show @@ -3235,7 +2859,7 @@ Would you like to correct it? Restore entry to selected history state - Възстановява записа в избраното състояние + Възстановяване на записа в избраното състояние от хронологията Restore @@ -3243,30 +2867,30 @@ Would you like to correct it? Delete selected history state - Премахва избраното състояние + Изтриване на избраното състояние от хронологията Delete - Премахване + Триене Delete all history - Премахва цялата хронология + Изтриване на цялата хронология Delete all - Премахване на всичко + Триене на всичко EditEntryWidgetMain Edit Entry - Променяне на запис + Редактиране на запис Notes field - Поле за бележка + Поле за бележки Username field @@ -3274,27 +2898,27 @@ Would you like to correct it? Expiration field - Поле за давност + Поле за изтичане на срока Expiration Presets - Предварителни настройки за давност + Предварителни настройки за изтичане на срока Expiration presets - Предварителни настройки за давност + Предварителни настройки за изтичане на срока Presets - Предварителни настройки + Предваритерни настройки Url field - Поле за адрес + Поле за URL Download favicon for URL - Изтегля пиктограма за адреса + Изтегляне на favicon за URL Title field @@ -3306,7 +2930,7 @@ Would you like to correct it? Toggle expiration - Превключва давността + Превключване на изтичането на срока Tags list @@ -3314,7 +2938,7 @@ Would you like to correct it? &Username: - &Потребител: + Портеб&ител: &Title: @@ -3330,11 +2954,11 @@ Would you like to correct it? &Notes: - &Бележка: + &Бележки: Toggle notes visibility - Превключва видимостта на бележката + Превключване на видимостта на бележките T&ags: @@ -3342,18 +2966,18 @@ Would you like to correct it? &Expires: - &Изтичаща давност: + &Давност: EditEntryWidgetSSHAgent Form - Формуляр + Форма Remove key from agent when database is closed/locked - Премахване на ключа от агента при затваряне/заключване на хранилището + Премахване на ключа от агента при затваряне/заключване на базата данни Comment @@ -3361,11 +2985,11 @@ Would you like to correct it? Add key to agent when database is opened/unlocked - Добавяне на ключ към агента при отваряне/отключване на хранилището + Добавяне на ключ към агента при отваряне/отключване на базата данни Decrypt - Разшифроване + Заклеймявам Fingerprint @@ -3373,7 +2997,7 @@ Would you like to correct it? Copy to clipboard - Копиране + Копиране в клипборда Public key @@ -3383,13 +3007,27 @@ Would you like to correct it? Private key Частен ключ + + External file + Външен файл + + + Browser for key file + Избор на файл-ключ + + + + Browse… + Button for opening file dialog + Избор… + Attachment - Прикачен файл + Приложение External key file - Външен файл с ключ + Външен файл-ключ Add to agent @@ -3399,50 +3037,29 @@ Would you like to correct it? Remove from agent Премахване от агента - - External file - Външен файл - - - Browser for key file - Избор на файл с ключ - - - Browse… - Button for opening file dialog - Избор… - - - Generate - Създаване - Select attachment file - Избиране на прикачен файл + Избор на прикачен файл Require user confirmation when this key is used - Потвърждаване от потребителя при използване на ключа + Изискване на потвърждение от потребителя при използване на този ключ n/a - липсва + n/a Remove key from agent after - Премахване на ключа от агента след + Премахване на ключ след Remove key from agent after specified seconds - Премахване на ключа от агента след указания брой секунди + Премахване на ключа от агента след указани секунди seconds - секунди - - - Clear agent - Изчистване на агента + секунди @@ -3453,7 +3070,11 @@ Would you like to correct it? Icon - Пиктограма + Икона + + + Browser Integration + Интеграция на браузъра Properties @@ -3465,89 +3086,77 @@ Would you like to correct it? Edit group - Променяне на група + Редактиране на група Group has unsaved changes Групата има незапазени промени - - Browser Integration - Съчетаване с мрежов четец - Enable - Включено + Включване Disable - Изключено + Изключване Inherit from parent group (%1) - Наследява се от родителската група (%1) + Наследяване от родителската група (% 1) EditGroupWidgetBrowser These settings affect to the group's behaviour with the browser extension. - Тези настройки променят поведението на групата спрямо разширението на мрежовия четец. + Hide entries from browser extension: - Скриване на записи от разширението на четеца: + Hide entries from browser extension toggle for this and sub groups - Превключвател за скриване на записи от разширението на мрежовия четец за групата и нейните подгрупи + Skip Auto-Submit for entries: - Без автоматично изпращане на формуляри: + Skip Auto-Submit toggle for this and sub groups - Превключвател за изключване на автоматичното изпращане на формуляри за групата и нейните подгрупи + Use entries only with HTTP Basic Auth: - Използване на записите само с HTTP Basic Auth: + Only HTTP Auth toggle for this and sub groups - Превключвател за използване на записите само при HTTP Auth за групата и нейните подгрупи + Do not use entries with HTTP Basic Auth: - Без използване на записите с HTTP Basic Auth: + Do not use HTTP Auth toggle for this and sub groups - Превключвател за изключване на използването на записите само при HTTP Auth за групата и нейните подгрупи + Omit WWW subdomain from matching: - Пропускане на WWW при търсене на съвпадение: + Пропускане на поддомейна WWW при съпоставяне: Omit WWW subdomain from matching toggle for this and sub groups - Превключвател за пропускане на поддомейна WWW при търсене на съвпадения в групата и нейните подгрупи - - - Restrict matching to given browser key: - Огранич. на съвпаден. до определен ключ на четец: - - - Restrict matching to given browser key toggle for this and sub groups - Превключвател за ограничаване на съвпаденията до определен ключ на мрежов четец в групата и нейните подгрупи + Превключване на пропускането на поддомейна WWW при съпоставяне за тази група и подгрупите EditGroupWidgetKeeShare Sharing mode field - Поле за вида на споделянето + Споделне на поле за режим Password field @@ -3555,7 +3164,7 @@ Would you like to correct it? Type: - Вид: + Тип: Password: @@ -3567,11 +3176,11 @@ Would you like to correct it? Path to share file field - Поле за път за споделяне на файл + Път до споделяне на общи ресурси Browse for share file - Избор на файл, който да бъде споделен + Избор на споделен файл Browse… @@ -3579,23 +3188,23 @@ Would you like to correct it? Clear fields - Изчистване на полетата + Изчисти полетата Clear - Изчистване + Почисти Inactive - Изключен + Неактивен Import - Внасяне + Импортиране Export - Изнасяне + Експортиране Synchronize @@ -3604,68 +3213,68 @@ Would you like to correct it? Your KeePassXC version does not support sharing this container type. Supported extensions are: %1. - Това издание на KeePassXC не поддържа споделяне на този вид контейнери. + Вашата KeePassXC версия не поддържа споделянето на този тип контейнер. Поддържаните разширения са: %1. %1 is already being exported by this database. - Пътят „%1“ вече е изнесен от това хранилище. + %1 вече се експортира от тази база данни. %1 is already being imported by this database. - Пътят „%1“ вече е внесен в това хранилище. + %1 вече е импортиран от тази база данни. %1 is being imported and exported by different groups in this database. - Пътят „%1“ се внася и изнася от различни групи в това хранилище. + %1 се импортира и експортира от различни групи в тази база данни. KeeShare is currently disabled. You can enable import/export in the application settings. KeeShare is a proper noun - Работата на KeeShare в момента е изключена. Можете да включите внасяне/изнасяне от настройките на приложението. + KeeShare е изключено в момента. Можете да разрешите импортиране/експортиране в настройките на приложението. Database export is currently disabled by application settings. - Изнасянето на данни в момента е изключено от настройките на приложението. + Експортирането на база данни в момента е изключено от настройките на приложението. Database import is currently disabled by application settings. - Изнасянето на данни в момента е изключено от настройките на приложението. + Импортирането на база данни в момента е изключено от настройките на приложението. KeeShare container - Контейнер на KeeShare + KeeShare signed container - Подписан контейнер от KeeShare + KeeShare подписан контейнер Select import source - Избор на източник при внасяне + Избор на източник за импортиране Select export target - Избор на цел при изнасяне + Изберете целта за експортиране Select import/export file - Избор на файл за внасяне/изнасяне + Изберете файл за импортиране/експортиране EditGroupWidgetMain Edit Group - Променяне на група + Редактиране на група Toggle expiration - Превключване на давността + Превключване на изтичането на срока Expires: - Изтичаща давност: + Изтича: Name field @@ -3673,15 +3282,15 @@ Supported extensions are: %1. Expiration field - Поле за давност + Поле за изтичане на срока Use default Auto-Type sequence of parent group - Използване на подразбираната последователност за автоматично въвеждане на родителската група + Използвай Auto-Type последователността по подразбиране на родителската група Auto-Type: - Автоматично въвеждане: + Auto-Type: Search: @@ -3689,19 +3298,19 @@ Supported extensions are: %1. Auto-Type toggle for this and sub groups - Превключвател за автоматичното въвеждане за групата и нейните подгрупи + Превключване на Auto-Type за тази и подгрупите ѝ Notes: - Бележка: + Бележки: Default auto-type sequence field - Поле за последователността за автоматично въвеждане + Поле за auto-type последователност по подразбиране Notes field - Поле бележка + Поле бележки Name: @@ -3709,22 +3318,22 @@ Supported extensions are: %1. Set default Auto-Type sequence - Задаване на подразбирана последователност за автоматично въвеждане + Задаване на Auto-Type последователност по подразбиране Search toggle for this and sub groups - Превключвател за търсенето за групата и нейните подгрупи + Превключване на търсенето за тази група и подгрупите ѝ EditWidgetIcons Use default icon - Използване на подразбирана пиктограма + Използване на иконата по подразбиране Use custom icon - Използване на пиктограма по избор + Използване на икона по избор Choose icon… @@ -3732,51 +3341,55 @@ Supported extensions are: %1. Set the URL to use to search for a favicon - Задава адреса, на който да бъде търсена пиктограма. + Favicon URL - Адрес на пиктограма + Адрес на пиктограмата Download favicon for URL - Изтегляне на пиктограма за адрес + Изтегляне на фавикон за URL Download favicon - Изтегляне на пиктограма + Изтегляне на favicon Apply selected icon to subgroups and entries - Прилагане на избраната пиктограма към подгрупи и записи + Прилагане на избраната икона към подгрупи и записи Apply icon to… - Прилагане на пиктограма към… + Apply to this group only - Прилагане само към тази група + Приложи само към тази група Also apply to child groups - Прилагане и към подгрупите + Прилага се и за детски групи Also apply to child entries - Прилагане и към дъщерните записи + Also apply to all children - Прилагане и към дъщерни елементи + Прилага се и за всички деца Unable to fetch favicon. - Грешка при изтегляне на пиктограмата. + Не може да се изтегли favicon. + + + You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security + Можете да активирате услугата за икона на DuckDuckGo в Инструменти -> Настройки -> Сигурност Existing icon selected. - Избрана е съществуваща пиктограма. + Избрана е съществуваща икона. Images @@ -3792,30 +3405,26 @@ Supported extensions are: %1. 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: - Грешка със следната пиктограма:Грешка със следните пиктограми: - - - You can enable the DuckDuckGo website icon service under Application Settings -> Security - Можете да включите услугата за пиктограми на DuckDuckGo от настройки на приложението -> Сигурност + Следната икона е проблемна:Следните икони са проблемни: EditWidgetProperties Created: - Създаване: + Създаден: Datetime created @@ -3823,39 +3432,39 @@ Supported extensions are: %1. Modified: - Промяна: + Модифициран: Datetime modified - Дата и час на последна промяна + Дата и час на промяна Accessed: - Достъп: + Достъпeн: Datetime accessed - Дата и час на последен достъп + Дата и час на достъп Uuid: - Идентификатор: + Uuid: Unique ID - Уникален идентификатор + Уникален ID Plugin Data - Данни от разширението + Данни за приставката Plugin data - Данни от разширението + Данни за приставката Remove selected plugin data - Премахване на избраните данни от разширението + Премахване на избраните данни за приставката Remove @@ -3863,13 +3472,13 @@ Supported extensions are: %1. Delete plugin data? - Изтриване на данни от разширението? + Изтриване на данни от приставката? Do you really want to delete the selected plugin data? This may cause the affected plugins to malfunction. - Желаете ли избраните данни от разширението да бъдат премахнати? -Може да доведе до неизправност на засегнатите разширения. + Наистина ли искате да изтриете избраните данни за приставката? +Това може да доведе до неизправност на засегнатите приставки. Key @@ -3884,25 +3493,7 @@ This may cause the affected plugins to malfunction. Entry %1 - Clone - %1 - копие - - - Passkey - Passkey - - - Invalid conversion type: %1 - Неправилен тип на преобразуване: %1 - - - Invalid conversion syntax: %1 - Неправилен синтаксис на преобразуване: %1 - - - Invalid regular expression syntax %1 -%2 - Неправилен синтаксис на регулярен израз %1 -%2 + %1 - Клониране @@ -3912,21 +3503,6 @@ This may cause the affected plugins to malfunction. Файлът „%1“ не може да бъде отворен - - EntryAttachmentsDialog - - Form - Формуляр - - - File name - Име на файл - - - File contents... - Съдържание… - - EntryAttachmentsModel @@ -3942,19 +3518,19 @@ This may cause the affected plugins to malfunction. EntryAttachmentsWidget Form - Формуляр + Форма Attachments - Прикачени файлове + Приложения Add new attachment - Добавяне на прикачен файл + Добавяне на нов прикачен файл Add - Добавяне + Добавите Remove selected attachment @@ -3964,21 +3540,29 @@ This may cause the affected plugins to malfunction. Remove Премахване + + Rename selected attachment + Преименуване на избрания прикачен файл + + + Rename + Преименуване + Open selected attachment Отваряне на избрания прикачен файл Open - Отваряне + Отвори Save selected attachment to disk - Запазване на избрания прикачен файл + Записване на избрания прикачен файл на диска Save - Запазване + Запази Select files @@ -3986,58 +3570,63 @@ This may cause the affected plugins to malfunction. Confirm remove - Потвърждаване на премахване + Потвърдете премахването Are you sure you want to remove %n attachment(s)? - Желаете ли %n прикачен фай да бъде премахнат?Желаете ли %n прикачени файла да бъдат премахнати? + Наистина ли искате да премахнете %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“ да бъде презаписан с прикачения? + Наистина ли искате да заместите съществуващия файл "%1" с прикачения? Confirm overwrite - Потвърждаване на презаписване + Потвърждаване на презаписването Unable to save attachments: %1 - Прикачените файлове не могат да бъдат запазени: + Не може да се запишат прикачените файлове: %1 Unable to open attachment: %1 - Прикаченият файл не може да бъде отворен: + Не може да се отворят прикаченте файл: %1 Unable to open attachments: %1 - Прикачените файлове не могат да бъдат отворени: + Не може да се отворят прикачените файлове: %1 Unable to open file(s): %1 - Файл не може да бъде отворен: -%1Файлове не могат да бъдат отворени: + Не може да се отворят файлове: +%1Не може да се отворят файлове: %1 Confirm Overwrite Attachment - Потвърждаване на презаписване на прикачен файл + + + + Attachment "%1" already exists. +Would you like to overwrite the existing attachment? + Confirm Attachment @@ -4048,49 +3637,28 @@ This may cause the affected plugins to malfunction. Your database may get very large and reduce performance. Are you sure to add this file? - Файлът %1 е голям (%2 МБ). -Хранилището може да стане твърде голямо и това да повлияе неблагоприятно върху бързодействието. + %1 е голям файл (%2 МБ). +Вашата база данни може да стане много голяма и да се намали производителността. -Желаете ли да файлът да бъде добавен? +Наистина ли искате да добавите файла? Attachment modified - Променен прикачен файл + The attachment '%1' was modified. Do you want to save the changes to your database? - Прикаченият файл „%1“ е променен. -Желаете ли промените да бъдат запазени в хранилището? + Saving attachment failed - Грешка при запазване на прикачен файл + Saving updated attachment failed. Error: %1 - Грешка при запазване на обновения прикачен файл. -%1 - - - Attachment "%1" already exists. -Would you like to overwrite the existing attachment? - Прикаченият файл „%1“ вече съществува. -Желаете ли -Желаете ли съществуващият прикачен файл да бъде презаписан? - - - New - Добавяне - - - Preview - Преглед - - - Failed to preview an attachment: Attachment not found - Грешка: прикачен файл не е намерен + @@ -4104,7 +3672,7 @@ Would you like to overwrite the existing attachment? EntryHistoryModel Current (%1) - В момента (%1) + Last modified @@ -4116,7 +3684,7 @@ Would you like to overwrite the existing attachment? Difference - Различия + Size @@ -4128,7 +3696,7 @@ Would you like to overwrite the existing attachment? Username - Потребител + Портебител Password @@ -4136,19 +3704,19 @@ Would you like to overwrite the existing attachment? URL - Адрес + Url Notes - Бележка + Бележки Custom Attributes - Потребителски атрибути + Icon - Пиктограма + Икона Color @@ -4156,7 +3724,7 @@ Would you like to overwrite the existing attachment? Expiration - Изтичаща давност + Изтичане TOTP @@ -4168,11 +3736,11 @@ Would you like to overwrite the existing attachment? Attachments - Прикачени файлове + Приложения Auto-Type - Автоматично въвеждане + Auto-Type Tags @@ -4200,7 +3768,7 @@ Would you like to overwrite the existing attachment? Username - Потребител + Портебител Password @@ -4208,31 +3776,31 @@ Would you like to overwrite the existing attachment? URL - Адрес + Url Notes - Бележка + Бележки Expires - Изтичаща давност + Изтича Created - Създаване + Създаден Modified - Промяна + Променен Accessed - Достъп + Достъпен Attachments - Прикачени файлове + Приложения Size @@ -4240,7 +3808,7 @@ Would you like to overwrite the existing attachment? Group name - Име на групата + Име на група Entry title @@ -4252,11 +3820,11 @@ Would you like to overwrite the existing attachment? Entry notes - Бележка на записа + Бележки на записа Entry expires at - Записът е с давност до + Записа изтича на Creation date @@ -4286,20 +3854,12 @@ Would you like to overwrite the existing attachment? Has TOTP Има TOTP - - Background Color - Цвят на фона - - - Group Path - Път на групата - EntryPreviewWidget Display current TOTP value - Показва текущата стойност на TOTP + Показване на текущата стойност на TOTP Close @@ -4314,12 +3874,12 @@ Would you like to overwrite the existing attachment? Парола - URL - Адрес + Notes + Бележки Expiration - Изтичаща давност + Изтичане Tags @@ -4331,19 +3891,19 @@ Would you like to overwrite the existing attachment? Username - Потребител + Портебител - Notes - Бележка + URL + Url Advanced - Разширени + Допълнителни Attachments - Прикачени файлове + Приложения Attributes @@ -4355,7 +3915,7 @@ Would you like to overwrite the existing attachment? Default Sequence - Подразбирана последователност + Последователност по подразбиране Window @@ -4371,24 +3931,20 @@ Would you like to overwrite the existing attachment? Share - Споделяне + Сподели Search - Търсене + Търси Clear - Изчистване + Почисти Never Никога - - Double click to copy value - За да копирате стойността, щракнете два пъти - Enabled Включено @@ -4398,19 +3954,15 @@ Would you like to overwrite the existing attachment? Изключено - Double click to copy to clipboard - За да копирате стойността, щракнете два пъти + Double click to copy value + За да копирате стойността, щракнете два пъти. EntryURLModel Invalid URL - Недействителен адрес - - - Duplicate URL - Дублиран адрес + Невалиден URL @@ -4427,31 +3979,26 @@ Would you like to overwrite the existing attachment? Reset to defaults Нулиране на настройките към подразбиращите се - - + %1 entry(s)... - + %1 запис…+ %1 записа… - ExportDialog Export options - Настройки за изнасяне + Настройки за извличане Sort entries by... - Подреждане на записите по… + Подреждане на записите по... You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! - На път сте да изнесете хранилището в нешифрован файл. Това ще направи вашите пароли и чувствителна информация уязвими! - + database order - реда в базата данни + name (ascending) @@ -4463,26 +4010,26 @@ This will leave your passwords and sensitive information vulnerable! unknown - неизвестно + Export database to HTML file - Изнасяне на данни в HTML + Експортиране на база данни в HTML файл HTML file - Файл на HTML + HTML файл FdoSecrets::DBusMgr Failed to deliver message - Съобщението не е доставено + Failed to send reply on DBus - Отговорът по DBus не е изпратен + Unknown @@ -4501,38 +4048,38 @@ This will leave your passwords and sensitive information vulnerable! Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. - В момента работи друга услуга за тайни (%1).<br/>Спрете я или я премахнете преди да включите отново съчетаването с Услуга за тайни. + Изпълнява се друг Secret Service (%1).<br/>Спрете или премахнете, преди да активирате повторно интегрирането на Secret Service. Failed to register DBus service at %1.<br/> - Грешка при регистриране на услугата DBus за %1.<br/> + Неуспешно регистриране на услугата DBus на % 1.<br/> Failed to register service on DBus at path '%1' - Грешка при регистриране на услуга в DBus на пътя „%1“ + Failed to register database on DBus under the name '%1' - Грешка при регистриране на хранилище на DBus под името „%1“ + Failed to register session on DBus at path '%1' - Грешка при регистриране на сеанса в DBus на пътя „%1“ + Failed to register item on DBus at path '%1' - Грешка при регистриране на елемента в DBus на пътя „%1“ + Failed to register prompt object on DBus at path '%1' - Грешка при регистриране на обекта за запитване в DBus на пътя „%1“ + FdoSecrets::Item Entry "%1" from database "%2" was used by %3 - Записът „%1“ от хранилището „%2“ е използван от %3 + Запис "%1" от база данни "%2" е използван от %3 @@ -4540,7 +4087,7 @@ This will leave your passwords and sensitive information vulnerable! %n Entry(s) was used by %1 %1 is the name of an application - %n запис е използван от %1%n записа са използвани от %1 + %n Запис(и) е(са) използван(и) от %1%n Запис(а) е(са) използван(и) от %1 @@ -4558,7 +4105,7 @@ This will leave your passwords and sensitive information vulnerable! FdoSecrets::SettingsDatabaseModel Unlock to show - За да видите съдържанието отключете хранилището + Отключване за показване None @@ -4569,14 +4116,14 @@ This will leave your passwords and sensitive information vulnerable! FdoSecrets::UnlockPrompt %1 (PID: %2) - %1 (PID: %2) + FdoSecretsPlugin <b>Fdo Secret Service:</b> %1 - <b>Услуга за тайни на Fdo:</b> %1 + <b>Fdo Secret Service:</b> %1 @@ -4588,21 +4135,21 @@ This will leave your passwords and sensitive information vulnerable! %1 - Clone - %1 - копие + %1 - Клониране HibpDownloader Online password validation failed - Грешка при отдалечено потвърждаване на паролата + Неуспешна онлайн проверка паролата IconDownloaderDialog Download Favicons - Изтегляне на пиктограми + Изтегляне на Favicons Cancel @@ -4611,8 +4158,8 @@ This will leave your passwords and sensitive information vulnerable! Having trouble downloading icons? You can enable the DuckDuckGo website icon service in the security section of the application settings. - Има ли трудности с изтеглянето на пиктограми? -Можете да включите услугата за пиктограми на DuckDuckGo от настройки на приложението -> Сигурност. + Имате проблеми с изтеглянето на икони? +Можете да активирате услугата за икони на duckDuckGo в раздела за защита на настройките на приложението. Close @@ -4620,23 +4167,23 @@ You can enable the DuckDuckGo website icon service in the security section of th URL - Адрес + Url Status - Състояние + Статут Please wait, processing entry list… - Изчакайте, записите се обработват… + Моля, изчакайте, списъкът с записи се обработва... Downloading… - Изтегляне… + Изтегляне... Ok - Добре + OK Already Exists @@ -4644,203 +4191,11 @@ You can enable the DuckDuckGo website icon service in the security section of th Download Failed - Грешка при изтегляне + Неуспешно изтегляне Downloading favicons (%1/%2)… - Изтегляне на пиктограми (%1/%2)… - - - - ImportWizard - - Import Wizard - Помощник при внасяне - - - - ImportWizardPageReview - - WizardPage - СтраницаОтПомощника - - - Entry count: %1 - Брой записи: %1 - - - Group - Група - - - Title - Заглавие - - - Username - Потребител - - - Password - Парола - - - Url - Адрес - - - Could not load key file. - Грешка при зареждане на файл с ключ. - - - Could not open remote database. Password or key file may be incorrect. - Грешка при отваряне на отдалечено хранилище. Паролата или файлът с ключ вероятно са грешни. - - - - ImportWizardPageSelect - - Form - Формуляр - - - Import File Selection - Внасяне - избор на файл - - - Password: - Парола: - - - Key File: - Файл с ключ: - - - Browse… - Избор… - - - Import Into: - Внасяне в: - - - New Database - Ново хранилище - - - No unlocked databases available - Няма отключени хранилища - - - Existing Database: - Съществуващо хранилище: - - - Import File: - Файл: - - - Comma Separated Values (.csv) - Файл с разделители (.csv) - - - 1Password Export (.1pux) - Изнесен файл от 1Password (.1pux) - - - 1Password Vault (.opvault) - Хранилище на 1Password (.opvault) - - - Bitwarden (.json) - Bitwarden (.json) - - - KeePass 1 Database (.kdb) - Хранилище на KeePass 1 (.kdb) - - - Open OPVault - Отваряне на OPVault - - - Select import file - Избор на файл при внасяне - - - All files - Всички файлове - - - Key files - Файлове с ключ - - - Select key file - Избор на файл с ключ - - - Comma Separated Values - Файл с разделители - - - 1Password Export - Изнесен файл от 1Password - - - Bitwarden JSON Export - Изнесен файл с JSON от Bitwarden - - - 1Password Vault - Хранилище на 1Password - - - KeePass1 Database - Хранилище на KeePass 1 - - - Proton Pass (.json) - Proton Pass (.json) - - - Proton Pass JSON Export - Изнесен JSON от Proton Pass - - - Temporary Database - Временно хранилище - - - Command: - Команда: - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - напр.: „sftp user@hostname“ или „scp user@hostname:отдалечено-хранилище.kdbx {TEMP_DATABASE}“ - - - Input: - Въвеждане: - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last commend `exit` has to be sent - - напр.: -get отдалечено-хранилище.kdbx {TEMP_DATABASE} -exit ---- -Низът {TEMP_DATABASE} се използва за заместител на временното местоположение на хранилището -Командата трябва да завърши. В случая на `sftp` последната изпратена команда трябва да бъде `exit` - - - Remote Database (.kdbx) - Отдалечено хранилище (.kdbx) + Изтегляне на икони (%1/%2)… @@ -4851,44 +4206,44 @@ exit Close message - Затваря съобщението + Съобщение при затаряне Kdbx3Reader Missing database headers - Липсващи заглавки на хранилище + Липсващи заглавки на хранилището Unable to calculate database key - Ключът на хранилището не може да бъде изчислен + Не може да се изчисли ключът на базата данни Unable to issue challenge-response: %1 - Грешка при създаване на предизвикване-отговор: %1 + Грешка при издаването на challenge-response: %1 Invalid credentials were provided, please try again. If this reoccurs, then your database file may be corrupt. - Предоставени са неприемливи данни за удостоверяване на достъп, опитайте отново. -Ако се повтори хранилището може да е повредено. + Предоставени са невалидни идентификационни данни, опитайте отново. +Ако това се повтори вероятно базата данни е повредена. Header doesn't match hash - Заглавката не съвпада с отпечатъка + Хедърът не съвпада с хеша Invalid header id size - Неприемлив размер на заглавката за идентификатор + Невалиден размер на id хедъра Invalid header field length: field %1 - Неприемлива дължина на полето за заглавка: поле %1 + Недействителна дължина на полета за заглавка: поле %1 Invalid header data length: field %1, %2 expected, %3 found - Неприемлива дължина на полето за заглавка: поле %1, очаквано %2, намерено %3 + @@ -4896,180 +4251,180 @@ If this reoccurs, then your database file may be corrupt. Invalid symmetric cipher IV size. IV = Initialization Vector for symmetric cipher - Неприемлив размер на ИВ на симетричния шифър. + Невалиден размер на IV за симетричния шифър. Unable to issue challenge-response: %1 - Грешка при създаване на предизвикване-отговор: %1 + Грешка при издаването на challenge-response: %1 Unable to calculate database key - Ключът на хранилището не може да бъде изчислен + Не може да се изчисли ключът на базата данни Kdbx4Reader missing database headers - липсващи заглавки на хранилище + липсващи хедъри на базата данни Unable to calculate database key: %1 - Ключът на хранилището не може да бъде изчислен: %1 + Грешка при изчисляване на ключа на базата данни: %1 Invalid header checksum size - Неприемлив размер на контролна сума на заглавка + Невалиден размер на контролната сума на хедъра Header SHA256 mismatch - Разлики в отпечатък с SHA256 на заглавка + Sha256 несъответствие на хедъра Invalid credentials were provided, please try again. If this reoccurs, then your database file may be corrupt. - Предоставени са неприемливи данни за удостоверяване на достъп, опитайте отново. -Ако се повтори хранилището може да е повредено. + Предоставени са невалидни идентификационни данни, опитайте отново. +Ако това се повтори вероятно базата данни е повредена. (HMAC mismatch) - (разлики в HMAC) + (HMAC несъответствие) Unknown cipher - Неизвестен шифър + Неизвестно шифър Invalid header id size - Неприемлив размер на заглавката за идентификатор + Невалиден размер на id хедъра Invalid header field length: field %1 - Неприемлива дължина на поле на заглавка: поле %1 + Недействителна дължина на полета за заглавка: поле %1 Invalid header data length: field %1, %2 expected, %3 found - Неприемлива дължина на полето за заглавка: поле %1, очаквано %2, намерено %3 + 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 файл. + Остарели полета на хедъри намерени в KDBX4 файл. Invalid inner header id size - Неприемлив размер на идентификатор на вътрешна заглавка + Невалиден размер на вътрешния id хедъра Invalid inner header field length: field %1 - Неприемлива дължина на полето на вътрешна заглавка: поле %1 + Invalid inner header data length: field %1, %2 expected, %3 found - Неприемлива дължина на полето на вътрешна заглавка: поле %1, очаквано %2, намерено %3 + Invalid inner header binary size - Неприемлив двоичен размер на вътрешна заглавка + Невалиден размер на binary хедъра Unsupported KeePass variant map version. Translation: variant map = data structure for storing meta data - Неподдържано издание на списък с варианти на KeePass. + Неподдържана версия на 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 на запис от списък с варианти + Невалидна дължина на Int32 в структурата с метаданни Invalid variant map UInt32 entry value length Translation: variant map = data structure for storing meta data - Неприемлива дължина на стойност от вид UInt32 на запис от списък с варианти + Невалидна дължина на UInt32 в структурата с метаданни Invalid variant map Int64 entry value length Translation: variant map = data structure for storing meta data - Неприемлива дължина на стойност от вид Int64 на запис от списък с варианти + Невалидна дължина на Int64 в структурата с метаданни Invalid variant map UInt64 entry value length Translation: variant map = data structure for storing meta data - Неприемлива дължина на стойност от вид UInt64 на запис от списък с варианти + Невалидна дължина на 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 database key: %1 - Ключът на хранилището не може да бъде изчислен: %1 + Грешка при изчисляване на ключа на базата данни: %1 Failed to serialize KDF parameters variant map Translation comment: variant map = data structure for storing meta data - Неуспешно представяне на списък с варианти на параметри на ФИК + Неуспешно сериализиране на KDF параметърите в структурата с метаданни KdbxReader Invalid cipher uuid length: %1 (length=%2) - Неприемлива дължина на идентификатор на шифър: %1 (дължина=%2) + Невалидна дължина на uuid не шифъра: %1 (дължина=%2) Unable to parse UUID: %1 - Грешка при разбор на идентификатор: %1 + Грешка при анализ на UUID: %1 Unsupported cipher @@ -5077,7 +4432,7 @@ If this reoccurs, then your database file may be corrupt. Invalid compression flags length - Неприемлива дължина на флагове за компресиране + Невалидна дължина на флаговете за компресиране Unsupported compression algorithm @@ -5085,23 +4440,23 @@ If this reoccurs, then your database file may be corrupt. Invalid master seed size - Неприемлив размер на основно семе + Невалиден размер на главния seed Invalid transform seed size - Неприемлив размер на трансформиращото семе + Невалиден размер на seed за трансформиране Invalid transform rounds size - Неприемлив брой преобразувания + Невалиден размер на рундовете за преобразуване Invalid start bytes size - Неприемлив брой на началните байтове + Невалиден размер на стартовите байтове Invalid random stream id size - Неприемлив размер на идентификатор на случаен поток + Невалиден произволен размер на идентификатора на случайния поток Invalid inner random stream cipher @@ -5109,7 +4464,7 @@ If this reoccurs, then your database file may be corrupt. Failed to read database file. - Грешка при четене на файл с хранилище. + Грешка при четене на файл с база данни. The selected file is an old KeePass 1 database (.kdb). @@ -5123,150 +4478,150 @@ This is a one-way migration. You won't be able to open the imported databas Not a KeePass database. - Не е хранилище на KeePass. + Не е KeePass база данни. Unsupported KeePass 2 database version. - Неподдържано издание на хранилище на KeePass 2. + Неподдържана версия на KeePass 2 базата данни. KdbxXmlReader XML parsing failure: %1 - Грешка при разбор на XML: %1 + Грешка при xml анализ: %1 No root group - Липсва коренова група + Без коренова група XML error: %1 Line %2, column %3 - Грешка в XML: + XML грешка: %1 Ред %2, колона %3 Missing icon uuid or data - Липсва идентификатор или данни за пиктограмата + Липса на uuid или данни за иконата Missing custom data key or value - Липсва потребителски ключ за данни или стойност + Липсващ персонализиран ключ за данни или стойност Multiple group elements - Множество елементи за група + Множество елементи на група Null group uuid - Идентификатор на група е Null + Uuid на група Null Invalid group icon number - Неприемлив идентификатор на пиктограма на групата + Невалиден номер на икона за група Invalid EnableAutoType value - Неприемлива стойност на полето EnableAutoType + Невалидна EnableAutoType стойност Invalid EnableSearching value - Неприемлива стойност на полето EnableSearching + Невалидна EnableSearching стойност No group uuid found - Не е намерен идентификатор на група + Не е намерен uuid на групата Null DeleteObject uuid - Идентификатор на DeleteObject е Null + Uuid DeleteObject Null Missing DeletedObject uuid or time - Идентификатор или време на DeleteObject е Null + Липсва DeletedObject uuid или време Null entry uuid - Идентификатор на запис е Null + Uuid на запис Null Invalid entry icon number - Невалиден номер на пиктограма на запис + Невалиден номер на иконата на записа History element in history entry - Елемент за хронология в запис на хронология + Елемент от хронологията в хронологически запис No entry uuid found - Записът няма идентификатор + Не е намерен uuid на записа History element with different uuid - Елемент от хронологията с различен идентификатор + Хронологически елемент с различен uuid Duplicate custom attribute found - Намерени повтарящи се потребителски атрибути + Намерени повтарящи се персонализирани атрибути Entry string key or value missing - Липсват ключ или стойност на записа като низове. + Липсващ низов ключ или стойност на записа Entry binary key or value missing - Липсват ключ или стойност на записа като двоични стойности. + Липсващ двоичен ключ или стойност на запис Auto-type association window or sequence missing - Липсва връзка с прозорец или последователност за автоматично въвеждане + Липсва асоциазия с прозорец или последователност за Auto-Type Invalid bool value - Неприемлива булева стойност + Невалидна бинарна стойност Invalid date time value - Неприемлива стойност за дата и час + Невалидна стойност за дата и час Invalid color value - Неприемлива стойност на цвят + Невалидна стойност за цвета Invalid color rgb part - RGB частта от цвета е неприемлива + Невалидна rgb част за цвят Invalid number value - Неприемлива числова стойност + Невалидна числова стойност Invalid uuid value - Неприемлива стойност на идентификатор + Невалидна uuid стойност Unable to decompress binary Translator meant is a binary data inside an entry - Двоичната стойност не може да бъде разкомпресирана + Не може да се декомпресира двоичените данни KeeAgentSettings Invalid KeeAgent settings file structure. - Неприемлива структура на файла с настройки на KeeAgent. + Невалидна структура на файла с KeeAgent настройки. Private key is an attachment but no attachments provided. - Частният ключ трябва да е прикачен, но прикачени файлове няма. + Личният ключ е прикачен, но няма прикачени файлове. Private key is empty - Частният ключ е празен + Личният ключ е празен File too large to be a private key @@ -5274,18 +4629,29 @@ Line %2, column %3 Failed to open private key - Грешка при отваряне на частен ключ + Неуспешно отваряне на частния ключ + + + + KeePass1OpenWidget + + Import KeePass1 Database + Импортиране на KeePass1 база данни + + + Unable to open the database. + Базата данни не може да се отвори. KeePass1Reader Unable to read keyfile. - Файлът с ключ не може да бъде прочетен. + Файл-ключа не може да бъде прочетен. Not a KeePass database. - Не е хранилище на KeePass. + Не е KeePass база данни. Unsupported encryption algorithm. @@ -5293,36 +4659,36 @@ Line %2, column %3 Unsupported KeePass database version. - Неподдържано издание на хранилище на KeePass. + Неподдържана версия на KeePass базата данни. 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 - Неприемлив размер на трансформиращото семе + Невалиден размер на seed за трансформиране Invalid number of transform rounds - Неприемлив брой преобразувания + Невалиден брой преобразуващи рундове Unable to construct group tree - Не може да бъде изградена дървовидна структура на групите + Не може да се изгради дърво на групите Root @@ -5330,167 +4696,167 @@ Line %2, column %3 Unable to calculate database key - Ключът на хранилището не може да бъде изчислен + Не може да се изчисли ключът на базата данни unable to seek to content position - не може да бъде намерена определена позиция в съдържание + не може да се намери позиция за съдържанието Invalid credentials were provided, please try again. If this reoccurs, then your database file may be 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 - Неприемливо поле за вид на запис + Невалиден тип на полето на записа KeeShare Invalid sharing reference - Неприемливо споделяне на референция + Невалидна препратка за споделяне Inactive share %1 - Неактивно споделяне %1 + Неактивено споделяне %1 Imported from %1 - Внесено от „%1“ + Импортиран от %1 Exported to %1 - Изнесено в „%1“ + Експортиран в %1 Synchronized with %1 - Синхронизирано с „%1“ + Синхронизирано с %1 Import is disabled in settings - Внасянето е забранено от настройките + Импортирането е забранено в настройките Export is disabled in settings - Изнасянето е забранено от настройките + Експортирането е забранено в настройките Inactive share - Неактивно споделяне + Неактивено споделяне Imported from - Внесено от + Импортирани от Exported to - Изнесено в + Експортирани в Synchronized with - Синхронизирано с + Синхронизирани с KeyComponentWidget Key Component - Компонент към ключа + Компонент на ключа Key Component Description - Описание на компонент към ключа + Описание на компонента към ключа Cancel @@ -5505,23 +4871,23 @@ If this reoccurs, then your database file may be corrupt. KeyFileEditWidget Generate a new key file - Създаване на файл с ключ + Генериране на нов файл-ключ Generate - Създаване + Генериране Generate a new key file or choose an existing one to protect your database. - Създайте нов или изберете съществуващ файл с ключ, който да защити хранилището. + Note: Do NOT use a file that may change as that will prevent you from unlocking your database. - Забележка: НЕ използвайте файл, който може да бъде променен, защото ще бъде невъзможно да отключите хранилището! + Забележка: НЕ използвайте файл, който може да бъде променен, защото това ще бъде невъзможно да отключите хранилището! Browse for key file - Избиране на файл с ключ + Избор на файл-ключ Browse… @@ -5529,45 +4895,47 @@ If this reoccurs, then your database file may be corrupt. Old key file format - Стар формат на файл с ключ + Стар файлов формат на ключа You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. - Избрали сте файл с ключ в остарял формат, който KeePass XC <br>може да спре да поддържа в бъдеще.<br><br>Вземете предвид възможността да създадете нов файл с ключ. + Използвате остарял файлов формат на ключа, който KeePass XC може да спре да поддържа в бъдеще. + +Помислете за генериране на нов ключ файл. Error loading the key file '%1' Message: %2 - Грешка при зареждане на файла с ключа „%1“ + Грешка при зареждане на файл-ключа "%1" Съобщение: %2 Key File - Файл с ключ + Файл-ключ Add Key File - Добавяне на файл с ключ + Добавяне на файл-ключ Change Key File - Променяне на файл с ключ + Смяна на файл-ключ Remove Key File - Премахване на файл с ключ + Премахване на файл-ключ Key File set, click to change or remove - Зададен е файл с ключ, щракнете за да го промените или премахнете + Файл-ключ е зададен, натиснете, за да го смените или премахнете <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> + Key files - Файлове с ключ + Файл-ключове All files @@ -5575,68 +4943,71 @@ Message: %2 Create Key File… - Създаване на файл с ключ… + Създаване на файл-ключ... Error creating key file - Грешка при създаване на файл с ключ + Грешка при създаване на файл-ключ Unable to create key file: %1 - Не може да бъде създаден файл с ключ: %1 + Не може да се създаде ключ-файл: %1 Select a key file - Избиране на файл с ключ + Избор на файл-ключ Invalid Key File - Неприемлив файл с ключ + Невалиден файл-ключ You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. - Файлът на текущото хранилище не може да бъде използван за файл с ключ. -Изберете друг файл или създайте файл с ключ. + Не можете да използвате текущата база данни като собствен файл-ключ. Изберете друг файл или създайте нов файл-ключ. Suspicious Key File - Подозрителен файл с ключ + Подозрителен файл-ключ The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. Are you sure you want to continue with this file? - Избраният файл прилича на хранилище. Файлът с ключ трябва да бъде статичен файл, който никога не се променя в противен случай ще загубите достъп до хранилището. -Желаете ли да използвате този файл? + Избраният файл-ключ изглежда като файл с база данни. Файл-ключът трябва да е статичен файл, който никога не се променя или ще загубите достъпа до вашата база данни завинаги. +Наистина ли искате да продължите с този файл? MacUtils Invalid key code - Неприемлив код на клавиш + Неправилен ключ Global shortcut already registered to %1 - Тази клавишна комбинация се използва за %1 + Could not register global shortcut - Грешка при задаване на клавишна комбинация + Неуспешно задаване на общ бърз клавиш. MainWindow &Database - &Хранилища + & База данни &Recent Databases - &Последно използвани хранилища + &Скорошни бази данни + + + &Import + &Импортиране &Export - &Изнасяне + &Експортиране &Help @@ -5648,16 +5019,12 @@ Are you sure you want to continue with this file? Copy Att&ribute - Копиране на атрибут + Копиране на атрибута TOTP TOTP - - Tags - Етикети - &Groups &Групи @@ -5684,55 +5051,75 @@ Are you sure you want to continue with this file? &Check for Updates - П&роверка за обновяване + &Проверка за актуализации &Open Database… - &Отваряне на хранилище + &Отваряне на база данни &Save Database - &Запазване на хранилището + &Записване на базата данни &Close Database - За&тваряне на хранилището + &Затвори базата данни &New Database… - Ново &хранилище… + &Нова база данни... + + + Create a new database + Създаване на нова база данни &Merge From Database… - &Сливане от хранилище… + &Сливане от база данни... + + + Merge from another KDBX database + Сливане от друга KDBX база данни &New Entry… - Нов &запис… + &Нов запис... + + + Add a new entry + Добавяне на нов запис &Edit Entry… - П&роменяне на запис… + &Редактиране на запис... + + + View or edit entry + Преглед или редактиране на запис &Delete Entry… - &Премахване на запис… + &Изтриване на запис... &New Group… - &Нова група… + &Нова група... + + + Add a new group + Добавяне на нова група &Edit Group… - П&роменяне на група… + &Редактиране на група... &Delete Group… - &Премахване на група… + &Изтриване на група... Download All &Favicons… - Изтегляне на всички &пиктограми… + Изтегляне на всички &favicons... Sort &A-Z @@ -5744,39 +5131,63 @@ Are you sure you want to continue with this file? Sa&ve Database As… - З&апазване на хранилище като… + Запазване на база данни като... Database &Security… - &Сигурност на хранилището… + База данни &Защита... Database &Reports… &Отчети за хранилището… + + Statistics, health check, etc. + Статистика, проверка на здравето и др. + &Database Settings… - &Настройки на хранилището… + &Настройки на базата данни... + + + Database settings + Настройки на базата данни &Clone Entry… - &Дублиране на записа… + &Клониране на запис... Move u&p Преместване нагоре + + Move entry one step up + Преместване на записа една стъпка нагоре + Move do&wn Преместване надолу + + Move entry one step down + Преместване на запис с една стъпка надолу + Copy &Username - Копиране на п&отребителя + Копиране на &Username + + + Copy username to clipboard + Копиране на потребителско име в клипборда Copy &Password - Копиране на &паролата + Копиране на &Паролата + + + Copy password to clipboard + Копиране на парола в клипборда &Settings @@ -5784,59 +5195,79 @@ Are you sure you want to continue with this file? &Password Generator - &Създаване на парола + &Генератор на парола Perform &Auto-Type - &Автоматично въвеждане + Изпълнение на &Auto-Type Download &Favicon - Изтегляне на &пиктограма + Изтегляне &Фавикон Open &URL - Отваряне на &адрес + Отваряне на &URL &Lock Database - &Заключване на хранилището + &Заключване на базата данни Lock &All Databases - Заключване на &всички хранилища + &Заключване на всички бази данни &Title &Заглавие - Copy &URL - Копиране на &адреса + Copy title to clipboard + Копиране на заглавие в клипборда + + + Copy URL to clipboard + Копиране на URL в клипборда &Notes - &Бележка + &Бележки + + + Copy notes to clipboard + Копиране на бележки в клипборда &CSV File… - &Файл с разделители… + &CSV файл... &HTML File… - &HTML файл… + &HTML файл... KeePass 1 Database… - Хранилище на KeePass 1… + KeePass 1 база данни... + + + Import a KeePass 1 database + Импортиране на KeePass 1 база данни 1Password Vault… - Хранилище на 1Password… + 1Password Vault… + + + Import a 1Password Vault + Импортиране на 1Password Vault CSV File… - Файл с разделители… + CSV файл... + + + Import a CSV file + Импортиране на CSV файл Show TOTP @@ -5844,31 +5275,27 @@ Are you sure you want to continue with this file? Show QR Code - Показване на код за QR + Показване на QR код Set up TOTP… - Настройване на TOTP… + Настройване на TOTP... Copy &TOTP Копиране на &TOTP - - Copy Password and TOTP - Копиране на паролата и TOTP - E&mpty recycle bin Изпразване на кошчето &Donate - &Даряване + &Дарете Report a &Bug - Съобщаване за &дефект + Съобщаване на грешка &Getting Started @@ -5876,11 +5303,15 @@ Are you sure you want to continue with this file? Open Getting Started Guide - Отваря ръководството „Първи стъпки“ + Отваряне на ръководството "Първи стъпки" &Online Help - &Помощ + &Онлайн помощ + + + Go to online documentation + Към онлайн документацията &User Guide @@ -5888,7 +5319,7 @@ Are you sure you want to continue with this file? Open User Guide - Отваря ръководството за потребителя + Отваряне на ръководството за потребителя &Keyboard Shortcuts @@ -5896,15 +5327,15 @@ Are you sure you want to continue with this file? Save Database Backup… - Резервно копие на хранилището… + Резервно копие на данните… Add key to SSH Agent - Добавяне на ключ към агент на SSH + Добавяне на ключ към SSH Agent Remove key from SSH Agent - Премахване на ключ от агент на SSH + Премахване на ключ от SSH Agent Compact Mode @@ -5912,7 +5343,7 @@ Are you sure you want to continue with this file? Automatic - Автоматична + Автоматично Light @@ -5924,23 +5355,19 @@ Are you sure you want to continue with this file? Classic (Platform-native) - Класическа (от платформата) - - - Show Menubar - Лента с менюто + Класически (от платформата) Show Toolbar - Лентата с инструменти + Покажи лентата с инструменти Show Preview Panel - Панел за преглед + Показване на панела за визуализация Always on Top - Винаги най-отгоре + Винаги отгоре Hide Usernames @@ -5952,45 +5379,39 @@ Are you sure you want to continue with this file? Clone Group... - Дублиране на групата… - - - &XML File… - &Файл с XML… + Дублиране на групата... Clear history - Изчистване на хронология + Изчистване на историята Access error for config file %1 - Грешка при достъп до файла с настройките %1 + Грешка при достъп на конфигурационния файл %1 Don't show again for this version - Пропускане на това издание + Не показвай повече за тази версия 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. -Съществува висок риск от загуба на информация, поддържайте резервни копия на хранилищата. -Изданието не е предназначено за ежедневна употреба. + NOTE: You are using a pre-release version of KeePassXC. Expect some bugs and minor issues, this version is meant for testing purposes. - ЗАБЕЛЕЖКА: Използвате предварително издание на KeePassXC! -Очаквайте дефекти и несъществени проблеми, изданието е предназначено за изпитателни цели. + - No Tags - Липсват етикети + 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. + Restore Entry(s) - Възстановяване на записВъзстановяване на записи + Settings @@ -5998,15 +5419,15 @@ Expect some bugs and minor issues, this version is meant for testing purposes. Check for updates on startup? - Проверка за обновяване при стартиране? + Проверка за актуализации при стартиране? Would you like KeePassXC to check for updates on startup? - Желаете ли KeePassXC да проверява за обновяване при стартиране? + Искате ли KeePassXC да проверите за актуализации при стартиране? You can always check for updates manually from the application menu. - Винаги можете да направите ръчна проверка за обновяване от менюто на приложението. + Винаги можете да проверите за актуализации ръчно от менюто на приложението. Toggle window @@ -6016,13 +5437,9 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Quit KeePassXC Изход от KeePassXC - - %1 Entry(s) - %1 запис%1 записа - Please present or touch your YubiKey to continue… - За да продължите, поставете или докоснете хардуерният ключ… + Моля добавете или натиснете върху своя YubiKey, за да продължите... Restart Application? @@ -6030,334 +5447,58 @@ Expect some bugs and minor issues, this version is meant for testing purposes. You must restart the application to apply this setting. Would you like to restart now? - За да бъдат приложени настройките, приложението трябва да рестартира. Желаете ли да рестартира сега? + Трябва да рестартирате приложението, за да приложите тази настройка. Желаете ли да рестартирате сега? + + + Tags + Етикети + + + No Tags + Липсват етикети + + + %1 Entry(s) + %1 запис%1 записа + + + Copy Password and TOTP + Копиране на паролата и TOTP + + + &XML File… + &Файл на XML… + + + XML File… + Файл на XML… + + + Copy &URL + Копиране на &адреса Allow Screen Capture - Разрешаване на екранни снимки - - - 1Password 1PUX... - 1PUX от 1Password… - - - Import a 1Password 1PUX file - Внасяне на 1PUX файл от 1Password - - - Import… - Внасяне… - - - Passkeys… - Passkeys… - - - Import Passkey - Внасяне на Passkey - - - Remote S&ync… - Отдалечено &синхронизиране… - - - Quit Application - Излиза от приложението - - - Open About Dialog - Отваря диалогът „Относно“ - - - Open Database - Отваря хранилище - - - Create Database - Създава хранилище - - - Merge From Database - Слива от хранилище - - - Create Entry - Създава запис - - - Edit Entry - Променя запис - - - Delete Entry - Премахва запис - - - Create Group - Създава група - - - Edit Group - Променя група - - - Delete Group - Премахва група - - - Download All Favicons - Изтегля всички пиктограми - - - Sort Groups A-Z - Сортира групите А–Я - - - Sort Groups Z-A - Сортира групите Я–А - - - Save Database As - Запазва хранилището като - - - Show Database Security - Показва настройките за сигурност на хранилището - - - Show Database Reports - Показва отчети за хранилището - - - Show Database Settings - Показва настройките на хранилището - - - Show Passkeys - Показва ключове за достъп - - - Clone Entry - Дублира запис - - - Move Entry Up - Премества запис нагоре - - - Move Entry Down - Премества запис надолу - - - Copy Username - Копира потребителското име - - - Copy Password - Копира паролата - - - Show Application Settings - Показва настройките на приложението - - - Show Password Generator - Показва екрана за създаване на пароли - - - Remove Passkey From Entry - Премахване на passkey от запис - - - Perform Auto-Type: {USERNAME} - Извършва автоматично въвеждане: {USERNAME} - - - Perform Auto-Type: {USERNAME}{ENTER} - Извършва автоматично въвеждане: {USERNAME}{ENTER} - - - Perform Auto-Type: {PASSWORD} - Извършва автоматично въвеждане: {PASSWORD} - - - Perform Auto-Type: {PASSWORD}{ENTER} - Извършва автоматично въвеждане: {PASSWORD}{ENTER} - - - Perform Auto-Type: {TOTP} - Извършва автоматично въвеждане: {TOTP} - - - Copy Title - Копира заглавието - - - Copy URL - Копира адреса - - - Copy Notes - Копира бележката - - - Export to CSV - Изнася във файл с разделители - - - Export to HTML - Изнася във файл с HTML - - - Import KeePass1 Database - Внася хранилище на KeePass1. - - - Import 1Password Vault - Внася хранилище на 1Password - - - Import CSV File - Внася от файл с разделители - - - Show TOTP QR Code - Показва кода за QR - - - Set up TOTP - Настройва TOTP - - - Empty Recycle Bin - Изпразва кошчето - - - Open Donation Website - Отваря страницата за даряване - - - Open Bug Report - Отваря формуляра за съобщаване на дефект - - - Open Online Documentation - Отваря страницата с документацията - - - Open Keyboard Shortcuts Guide - Отваря ръководството за клавишни комбинации - - - Save Database Backup - Запазва резервно копие на хранилището - - - SSH Agent: Add Key - Агент на SSH: добавя ключ - - - SSH Agent: Remove Key - Агент на SSH: премахва ключ - - - Toggle Compact Mode - Превключва компактния режим - - - Set Theme: Automatic - Задава тема: автоматична - - - Set Theme: Light - Задава тема: светла - - - Set Theme: Dark - Задава тема: тъмна - - - Set Theme: Classic - Задава тема: класическа - - - Toggle Show Menubar - Превключва лентата с менюто - - - Toggle Show Toolbar - Превключва лентата с инструменти - - - Toggle Show Preview Panel - Превключва панела за преглед - - - Toggle Always on Top - Превключва състоянието "най-отгоре“ на приложението - - - Toggle Hide Usernames - Превключва скриването на потребителските имена - - - Toggle Hide Passwords - Превключва скриването на паролите - - - Export to XML - Изнася във файл с XML - - - Toggle Allow Screen Capture - Превключва разрешението за правене на екранни снимки - - - Show Group Panel - Показване на панела „Група“ - - - Toggle Show Group Panel - Превключване на панела „Група“ - - - Setup Remote Sync… - Настройка на отдалеч. синхронизиране… - - - Password Generator - Създаване на парола - - - E&xpire Entry… - Прекратяване на &давността… - - - Clear SSH Agent - Изчистване на агента на SSH - - - Clear all identities in ssh-agent - Изчистване на самоличностите в ssh-agent + Разрешаване на снимки на екрана ManageDatabase Database settings - Настройки на хранилището + Настройки на базата данни Edit database settings - Променя настройките на хранилището + Редактиране на настройките на базата данни Unlock database - Отключване на хранилище + Отключване на базата данни Unlock database to show more information - За подробности отключете хранилището + Отключване на базата данни за показване на повече информация Lock database @@ -6368,11 +5509,11 @@ Expect some bugs and minor issues, this version is meant for testing purposes.ManageSession Disconnect - Прекъсване на връзката + Disconnect this application - Прекъсва връзката с това приложение + Reset @@ -6380,7 +5521,7 @@ Expect some bugs and minor issues, this version is meant for testing purposes. Reset any remembered decisions for this application - Нулира запазените разрешения в това приложение + Нулиране на запазените разрешения за приложението @@ -6391,35 +5532,55 @@ Expect some bugs and minor issues, this version is meant for testing purposes. Relocating %1 [%2] - Преместване на %1 [%2] + Преместване на % 1 [%2] Overwriting %1 [%2] Презаписване %1 [%2] + + older entry merged from database "%1" + по-стари записи, обединени от база данни "%1" + + + Adding backup for older target %1 [%2] + Добавяне на резервно копие за старата цел %1 [%2] + + + Adding backup for older source %1 [%2] + + + + 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] Синхронизиране от по-новия източник %1 [%2] Synchronizing from older source %1 [%2] - Синхронизиране от по-стария източник %1 [%2] + Синхронизиране от по-стария източник %1 [% 2] Deleting child %1 [%2] - Премахване на наследник %1 [%2] + Deleting orphan %1 [%2] - Премахване на сирак %1 [%2] + Changed deleted objects - Промяна на премахнати обекти + Adding missing icon %1 - Добавяне на липсваща пиктограма %1 + Добавяне на липсваща икона %1 Removed custom data %1 [%2] @@ -6434,7 +5595,7 @@ Expect some bugs and minor issues, this version is meant for testing purposes.NewDatabaseWizard Create a new KeePassXC database… - Създаване на хранилище на KeePassXC… + Root @@ -6446,132 +5607,130 @@ Expect some bugs and minor issues, this version is meant for testing purposes.NewDatabaseWizardPage WizardPage - СтраницаОтПомощника + Encryption 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 + Опростени настройки NewDatabaseWizardPageDatabaseKey Database Credentials - Достъп до хранилището + Идентификационни данни на база данни A set of credentials known only to you that protects your database. - Набор от данни за идентификация известни само на вас, служещи за защита на хранилището. + Набор от идентификационни данни, известни само за вас, които защитават вашата база данни. NewDatabaseWizardPageEncryption Encryption Settings - Настройки на шифроването + Настройки на шифроване Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. - Тук можете да настроите шифроването на хранилището. Но не се притеснявайте, можете да направите промени и по-късно в настройките на хранилището. + Тук можете да коригирате настройките за шифроване на база данни. Не се притеснявайте, можете да ги промените по-късно в настройките на базата данни. NewDatabaseWizardPageMetaData General Database Information - Обща информация за хранилището + Обща информация за база данни Please fill in the display name and an optional description for your new database: - Въведете име и незадължително описание на новото хранилище: - - - - NewEntryAttachmentsDialog - - Attachment name cannot be empty - Името на прикачения файл не може да е празно - - - Attachment with the same name already exists - Прикачен файл със същото име вече съществува - - - Save attachment - Запазване - - - New entry attachment - Прикачен файл към нов запис + Моля, попълнете име и незадължително описание за новата си база данни: NixUtils Password Manager - Управление на пароли + Мениджър на пароли Global shortcut already registered to %1 - Тази клавишна комбинация се използва за %1 + Could not register global shortcut - Грешка при задаване на клавишна комбинация + Неуспешно задаване на общ бърз клавиш. OpData01 Invalid OpData01, does not contain header - Неприемлив OpData01, не съдържа заглавка + Невалиден OpData01, не съдържа хедър Unable to read all IV bytes, wanted 16 but got %1 - Грешка при прочитане на ИВ, необходими са 16 байта, получени %1 + Не може да се прочетат всички IV байта, нужни са 16, но имам %1 Unable to init cipher for opdata01: %1 - Грешка при подготвяне на шифъра за opdata01: %1 + Не може да се инициализира шифъра за opdata01: %1 Unable to read all HMAC signature bytes - Грешка при прочитане на подпис с HMAC + Не може да се прочетат всички байтове на HMAC подписа Malformed OpData01 due to a failed HMAC - Неправилен OpData01 поради грешен HMAC + Неправилно оформен OpData01 поради грешен HMAC Unable to process clearText in place - Съдържанието на clearText не може да бъде обработено на място. + Не може да се извърши обработката на текста на място Expected %1 bytes of clear-text, found %2 - Очаквани %1 байта чист текст, получени %2 + Очаквано %1 байта текст, намерени %2 + + + + OpVaultOpenWidget + + Read Database did not produce an instance +%1 + Четене на база данни не е генерирана инстанция +%1 OpVaultReader Directory .opvault must exist - Папката „.opvault“ трябва да съществува + Директорията .opvault трябва да съществува Directory .opvault must be readable - Папката „.opvault“ трябва да е четима + Директорията .opvault трябва да бъде четима Directory .opvault/default must exist - Папката „.opvault/default“ трябва да съществува + Директория .opvault/default трябва да съществува Directory .opvault/default must be readable - Папката „.opvault/default“ трябва да е четима + Директория .opvault/default трябва да е четима Unable to decode masterKey: %1 @@ -6579,14 +5738,14 @@ Expect some bugs and minor issues, this version is meant for testing purposes. Unable to derive master key: %1 - Грешка при извличане на основен ключ: %1 + OpenSSHKey Invalid key file, expecting an OpenSSH key - Недействителен файл с ключ, очакван е ключ на OpenSSH + Невалиден файл с ключа, очаква се openSSH ключ PEM boundary mismatch @@ -6594,43 +5753,39 @@ Expect some bugs and minor issues, this version is meant for testing purposes. Base64 decoding failed - Грешка при декодиране на Base64 + 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 - Файл с ключ е повреден, грешка при прочитане на частен ключ + Повреден файл с ключа, четенето на частен ключ е неуспешно Unsupported key type: %1 - Неподдържан вид на ключ: %1 + Неподдържан тип ключ: %1 No private key payload to decrypt - Няма данни, които да бъдат разшифровани с частен ключ + Unknown cipher: %1 - Неизвестен шифър: %1 - - - AES-256/GCM is currently not supported - Стандартът AES-256/GCM в момента не се поддържа + Неизвестно шифър: %1 Passphrase is required to decrypt this key @@ -6638,242 +5793,67 @@ Expect some bugs and minor issues, this version is meant for testing purposes. Key derivation failed: %1 - Грешка при извличане на ключ: %1 + Cipher IV is too short for MD5 kdf - ИВ на шифъра е твърде кратък за ФИК с MD5 + Шифъровачното IV е твърде кратък за MD5 kdf Unknown KDF: %1 - Неизвестна ФИК: %1 + Неизвестен KDF: %1 Failed to initialize cipher: %1 - Грешка при подготовка на шифър: %1 + Decryption failed: %1 - Грешка при разшифроване: %1 + Decryption failed, wrong passphrase? - Грешка при разшифроване, грешна фраза за достъп? + Неуспешено дешифриране, грешна фраза за достъп? Unexpected EOF while reading key - Неочакван край на файл при четене на ключ + Unsupported key part - Неподдържана част с ключ + Unexpected EOF while reading public key - Неочакван край на файл при четене на публичен ключ + Неочакван EOF при четене на публичения ключ Unknown key type: %1 - Неизвестен вид ключ: %1 + Неизвестен тип ключ: %1 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 при запис на частния ключ - (encrypted) - (шифровано) - - - - OpenSSHKeyGenDialog - - SSH Key Generator - Създаване на ключове за SSH - - - Type - Вид - - - Bits - Битове - - - Comment - Коментар - - - - PasskeyExportDialog - - KeePassXC - Passkey Export - KeePassXC - Изнасяне на Passkey - - - Filenames will be generated with title and .passkey file extension. - Имената на файловете ще бъдат създадени от заглавието и .passkey като разширение. - - - Export entries - Изнасяне на записи - - - Export Selected - Изнасяне на избраните - - - Cancel - Отказ - - - Export to folder - Изнасяне в папка - - - Export the following passkey entries. - Изнасяне на следните записи на passkey. - - - - PasskeyExporter - - KeePassXC: Passkey Export - KeePassXC: Изнасяне на Passkey - - - File "%1.passkey" already exists. -Do you want to overwrite it? - - Файлът „%1.passkey“ съществува. -Желаете ли да бъде презаписан? - - - - Cannot open file - Файлът не може да бъде отворен - - - Cannot open file "%1" for writing. - Файлът „%1“ не може да бъде отворен за запис. - - - Cannot write to file - Грешка при запис във файл - - - - PasskeyImportDialog - - KeePassXC - Passkey Import - KeePassXC - Внасяне на Passkey - - - Username: %1 - Потребителско име: %1 - - - Group - Група - - - Database - Хранилище - - - Import Passkey - Внасяне на Passkey - - - Import - Внасяне - - - Cancel - Отказ - - - Entry - Запис - - - Create new entry - Създаване на запис - - - Relying Party: %1 - Зависеща страна: %1 - - - Import the following passkey: - Внасяне на следния passkey: - - - Import the following passkey to this entry: - Внасяне на следния passkey в този запис: - - - Default passkeys group (Imported Passkeys) - Подразбирана група за passkeys (Внесени passkeys) - - - - PasskeyImporter - - Passkey file - Файл с Passkey - - - All files - Всички файлове - - - Cannot open file - Файлът не може да бъде отворен - - - Cannot open file "%1" for reading. - Файлът „%1“ не може да бъде отворен за четене. - - - Open passkey file - Отваряне на файл с passkey - - - Cannot import passkey - Грешка при внасяне на passkey - - - Cannot import passkey file "%1". Data is missing. - Грешка при внасяне на файл с passkey „%1“. Липсват данни. - - - Cannot import passkey file "%1". -The following data is missing: -%2 - Грешка при внасяне на файл с passkey „%1“. -Следните данни липсват: -%2 - - - Cannot import passkey file "%1". Private key is missing or malformed. - Грешка при внасяне на файл с passkey „%1“. Липсва / повреден частен ключ + AES-256/GCM is currently not supported + Стандартът AES-256/GCM в момента не се поддържа @@ -6892,7 +5872,7 @@ The following data is missing: Repeat password field - Поле повтаряне на паролата + Поле повтаряне на парола Password @@ -6912,11 +5892,11 @@ The following data is missing: Password set, click to change or remove - Зададена е парола, щракнете, за да я промените или премахнете + Паролата е зададена, натиснете, за да я промените или премахнете <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> + <p>Паролата е основният метод за защита на вашата база данни.</p><p>Добрите пароли са дълги и уникални. KeePassXC може да генерира такава за вас.</p> Passwords do not match. @@ -6927,7 +5907,7 @@ The following data is missing: PasswordGeneratorWidget Generate Password - Създаване на парола + Генериране на парола strength @@ -6940,7 +5920,7 @@ The following data is missing: Generated password - Създадена парола + Генерирана парола %p% @@ -6948,7 +5928,7 @@ The following data is missing: Regenerate password - Повторно създаване на парола + Регенериране на парола Copy password @@ -6972,11 +5952,11 @@ The following data is missing: Advanced - Разширени + Допълнителни Character Types - Групи знаци + Типове знаци Special characters @@ -7000,7 +5980,7 @@ The following data is missing: Numbers - Цифри + Числа Lower-case letters @@ -7020,11 +6000,11 @@ The following data is missing: Do not include: - Да не се включват: + Не включвайте: Additional characters to use for the generated password - Допълнителни знаци, които да бъдат използвани при създаване на паролата + Допълнителни знаци за използване за генерираната парола Additional characters @@ -7032,19 +6012,19 @@ The following data is missing: Add non-hex letters to "do not include" list - Добавяне на не-шестнадесетични знаци към списъка "да не не включват" + Добавяне на не-шестнадесетични букви към списъка "не включвай" Hex Passwords - Шестнадесетична парола + Шеснайсетична парола Hex - Шестнадесетични + Шестнадесетичен Character set to exclude from generated password - Набор от знаци, които да не присъстват в паролата + Набор от знаци за изключване от генерираната парола Excluded characters @@ -7052,15 +6032,15 @@ The following data is missing: Also choose from: - Допълнителни знаци: + Също изберете от: Exclude look-alike characters - Изключване на еднакво изглеждащите знаци + Изключване на подобни знаци Pick characters from every group - Най-малко по един символ от всяка група + Избиране на символи от всяка група Passphrase @@ -7078,18 +6058,26 @@ The following data is missing: Word Count: Брой думи: + + Character Count: + Брой знаци: + Word Case: Регистър на думите: Delete selected wordlist - Премахване на списъка с думи + Изтриване на списъка с думи Add custom wordlist Добавяне на потребителски списък с думи + + character + Знак + Close Затваряне @@ -7104,63 +6092,39 @@ The following data is missing: Regenerate password (%1) - Повторно създаване на парола (%1) + Регенериране на паролата (%1) lower case - долен регистър + мали букви UPPER CASE - ГОРЕН РЕГИСТЪР + ГЛАВНИ БУКВИ Title Case - Всяка Дума + Title Case (SYSTEM) - (СИСТЕМЕН) + (SYSTEM) Entropy: %1 bit Ентропия: %1 бита - - Password Quality: %1 - Качество на паролата: %1 - - - Poor - Password quality - Лошо - - - Weak - Password quality - Слабо - - - Good - Password quality - Добро - - - Excellent - Password quality - Отлично - Confirm Delete Wordlist - Потвърждаване на премахване на списък с думи + Do you really want to delete the wordlist "%1"? - Желаете ли списъкът с думи „%1“ да бъде премахнат? + Failed to delete wordlist - Грешка при премахване на списък с думи + Wordlists @@ -7172,7 +6136,7 @@ The following data is missing: Select Custom Wordlist - Избор на потребителски списък с думи + Overwrite Wordlist? @@ -7181,12 +6145,11 @@ The following data is missing: Wordlist "%1" already exists as a custom wordlist. Do you want to overwrite it? - Списъкът с думи „%1“ съществува като потребителски списък. -Желаете ли да бъде презаписан? + Failed to add wordlist - Грешка при добавяне на списък с думи + Logograms @@ -7197,52 +6160,13 @@ Do you want to overwrite it? Специални знаци - passwordLength - passwordLength - - - Characters: %1 - Знаци: %1 - - - MIXED case - Смесване на регистри - - - Excluded characters: "0", "1", "l", "I", "O", "|", "﹒", "B", "8", "G", "6" - Изключени знаци: "0", "1", "l", "I", "O", "|", "﹒", "B", "8", "G", "6" - - - - PasswordWidget - - Passwords do not match - Паролите не съвпадат - - - Passwords match so far - Паролите за момента съвпадат - - - Toggle Password (%1) - Превключване видимостта на паролата (%1) - - - Generate Password (%1) - Създаване на парола (%1) - - - Warning: Caps Lock enabled! - Внимание: Caps Lock е включен! - - - Quality: %1 - Качество: %1 + Password Quality: %1 + Качество на паролата : %1 Poor Password quality - Лошо + Слабо Weak @@ -7260,57 +6184,93 @@ Do you want to overwrite it? Отлично - Toggle password visibility using Control + H. Open the password generator using Control + G. - Превключете видимостта на паролата с Control + H. Създавайте пароли с Control + G. + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + Изключени знаци: "0", "1", "l", "I", "O", "|", "﹒" + + + + PasswordWidget + + Passwords do not match + Паролите не съвпадат + + + Passwords match so far + Паролите съвпадат досега + + + Toggle Password (%1) + Превключване на парола (%1) + + + Generate Password (%1) + Генериране на парола (%1) + + + Warning: Caps Lock enabled! + Предупреждение: Caps Lock активиран! + + + Quality: %1 + Качество: %1 + + + Poor + Password quality + Слабо + + + Weak + Password quality + Слабо + + + Good + Password quality + Добро + + + Excellent + Password quality + Отлично + + + Toggle password visibilty using Control + H. Open the password generator using Control + G. + Превключете видимостта на паролата с Control + H. Отворете генератора на пароли с помощта на Control + G. PickcharsDialog KeePassXC - Pick Characters - KeePassXC - Избор на знаци + Select characters to type, navigate with arrow keys, Ctrl + S submits. - Изберете знаци, които да бъдат въведени, придвижвайте се със стрелките, Ctrl+S изпраща. + Press &Tab between characters - Натиснете &Табулатор между знаците - - - - PreviewEntryAttachmentsDialog - - Preview entry attachment - Преглед на прикачен файл към запис - - - No preview available - Не е възможен преглед - - - Image format not supported - Този вид изображения не се поддържат + QMessageBox Overwrite - Презаписване + Презапиши Delete - Премахване + Триене Move - Преместване + Премести Empty - Изпразване + Изпразни Remove @@ -7326,26 +6286,22 @@ Do you want to overwrite it? Merge - Сливане + Слей Continue - Напред - - - Continue with weak password - Напред със слаба парола + Продължи QObject Database not opened - Хранилището не е отключено + Базата данни не е отворена Database hash not available - Не е наличен отпечатък от хранилището + Няма хеш на база данни Client public key not received @@ -7353,7 +6309,7 @@ Do you want to overwrite it? Cannot decrypt message - Съобщението не може да бъде разшифровано + Съобщението не може да се дешифрира Action cancelled or denied @@ -7365,7 +6321,7 @@ Do you want to overwrite it? KeePassXC association failed, try again - KeePassXC не се свърза, опитайте отново. + KeePassXC асоциацията е неуспешна, опитайте отново Encryption key is not recognized @@ -7381,7 +6337,7 @@ Do you want to overwrite it? No URL provided - Не е предоставен адрес + Не е предоставен URL No logins found @@ -7393,51 +6349,51 @@ Do you want to overwrite it? Cannot create new group - Нова група не може да бъде създадена + Не може да се създаде нова група No valid UUID provided - Не е предоставен действителен идентификатор + Unknown error - Неочаквана грешка + Неизвестна грешка Browser Integration - Съчетаване с мрежов четец + Интеграция на браузъра Browser Plugin Failure - Грешка в разширение на мрежовия четец + Неуспех в браузърния плъгин Could not save the native messaging script file for %1. - Файла със скрипта за присъщите съобщения за %1 не е запазен. + Username for the entry. - Потребителско име на записа. + Потребителско име за записа. username - потребителско име + потребитерско име URL for the entry. - Адрес на записа. + URL за записа. URL - Адрес + Url Notes for the entry. - Бележка към записа. + Бележки за записа. Notes - Бележка + Бележки Prompt for the entry's password. @@ -7445,23 +6401,23 @@ Do you want to overwrite it? Generate a password for the entry. - Създаване на парола за записа. + Генериране на парола за записа. Add a new entry to a database. - Добавяне на запис към хранилище. + Добавяне на нов запис към база данни. Path of the entry to add. - Път на записа, който да бъде добавен. + Път на записа за добавяне. Cannot generate a password and prompt at the same time. - Не може да бъде създавана парола и да бъде извеждано запитване за парола едновременно. + Could not create entry with path %1. - Запис с път %1 не може да бъде създаден. + Не може да се създаде запис с път %1. Enter password for new entry: @@ -7469,23 +6425,23 @@ Do you want to overwrite it? Writing the database failed %1. - Грешка при запис на хранилището: %1 + Грешка при запис на базата данни: %1 Successfully added entry %1. - Записът %1 е добавен. + Успешно добавен запис %1. Adds a new group to a database. - Добавя нова група към хранилище. + Добавя нова група към база данни. Path of the group to add. - Път, където да бъде добавена групата. + Пътят на групата за добавяне. Group %1 already exists! - Групата %1 съществува! + Групата %1 вече съществува! Group %1 not found. @@ -7493,11 +6449,11 @@ Do you want to overwrite it? Successfully added group %1. - Групата %1 е добавена. + Успешно добавена група %1. Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. - Проверете дали има пароли, които са публично разкрити. FILENAME трябва да бъде пътят към файл, който съдържа отпечатъци с SHA-1 на разкритите пароли във формата на HIBP, както е наличен на https://haveibeenpwned.com/Passwords. + Проверете дали има публичен достъп до пароли. FILENAME трябва да бъде пътя на файл, който включва SHA-1 хешове на пароли, пропускани в HIBP формат, както е налично от https://haveibeenpwned.com/Passwords. FILENAME @@ -7505,75 +6461,75 @@ Do you want to overwrite it? Path to okon-cli to search a formatted HIBP file - Път, в който okon-cli да търси за файл във формата на HIBP + okon-cli - okon-cli + Analyze passwords for weaknesses and problems. - Проверява пароли за слабости и проблеми. + Анализирай паролите за слабости и проблеми. Cannot find HIBP file: %1 - Файлът на HIBP не може да бъде намерен: %1 + Evaluating database entries using okon… - Оценяване на записите в хранилището посредством okon… + Failed to open HIBP file %1: %2 - Грешка при отваряне на файла на HIBP %1: %2 + Грешка при отваряне на ФАЙЛА %1: %2 Evaluating database entries against HIBP file, this will take a while… - Оценяване на записите в хранилището спрямо файл на HIBP. Ще отнеме известно време… + Password for '%1' has been leaked %2 time(s)! - Паролата за „%1“ е разкрита %2 път!Паролата за „%1“ е разкрита %2 пъти! + Паролата за '%1' е изтекла %2 път!Паролата за '%1' е изтекла %2 пъти! Password for '%1' has been leaked! - Паролата за „%1“ е разкрита! + Паролата за '%1' е изтекла! Export an attachment of an entry. - Изнасяне на прикачен файл към запис. + Path of the entry with the target attachment. - Път към записа с прикачен файл. + Name of the attachment to be exported. - Име на прикаченият файл, който да бъде изнесен. + Path to which the attachment should be exported. - Пътят, където прикаченият файл да бъде изнесен. + Пътят, където прикаченият файл да бъде записан. Could not find entry with path %1. - Запис с път %1 не може да бъде намерен. + Не може да се намери запис с път %1. Could not find attachment with name %1. - Прикачен файл с име %1 не може да бъде намерен. + Невъзможно откриване на прикачен файл с името %1. No export target given. Please use '--stdout' or specify an 'export-file'. - Не е указана цел за изнасян. Използвайте '--stdout' или посочете 'export-file'. + Не е указана цел за износ. Моля, използвайте команда '--stdout' или посочете 'export-file'. Could not open output file %1. - Файлът %1 не може да бъде отворен за запис. + Невъзможно отваряне на файла %1 за записване. Successfully exported attachment %1 of entry %2 to %3. - Прикаченият файл %1 е изнесен от запис %2 в %3 + Прикаченият файл %1 е успешно изнесен от запис %2 в %3 Overwrite existing attachments. @@ -7581,27 +6537,27 @@ Do you want to overwrite it? Imports an attachment to an entry. - Внася прикачен файл в избран запис. + Внася прикачения файл в избран запис. Path of the entry. - Път към записа. + Пътят към записа. Name of the attachment to be added. - Име на прикачен файл, който да бъде добавен. + Името на прикачения файл, който да бъде добавен. Path of the attachment to be imported. - Път към прикачен файл, който да бъде внесен. + Пътят към прикачения файл, който да бъде внесен. Attachment %1 already exists for entry %2. - Прикаченият файл %1 вече е добавен в запис %2. + Прикаченият файл %1 вече е добавен в запис %2 Could not open attachment file %1. - Прикаченият файлът %1 не може да бъде отворен. + Невъзможно отваряне на прикачения файл %1. Successfully imported attachment %1 as %2 to entry %3. @@ -7613,49 +6569,49 @@ Do you want to overwrite it? Name of the attachment to be removed. - Име на прикачен файл, който да бъде премахнат. + Името на прикачения файл, който да бъде премахнат. Successfully removed attachment %1 from entry %2. - Прикаченият файл %1 от запис %2 е премахнат успешно. + Прикачения файл %1 от запис %2 бе премахнат успешно. Copy the given attribute to the clipboard. Defaults to "password" if not specified. Don't translate "password", it refers to the attribute. - Копиране на даден атрибут в междинната памет. Ако не е зададен използва "password". + Копирайте дадения атрибут в клипборда. По подразбиране е "password", ако не е зададен. Copy the current TOTP to the clipboard (equivalent to "-a totp"). - Копиране на текущия код за TOTP в междинната памет (същото като "-a totp"). + Копирай текущия TOTP в клипборда (еквивалентно на "-a totp"). Must match only one entry, otherwise a list of possible matches is shown. - Трябва да съвпада само с един запис, в противен случай се показва списък със съвпаденията. + Трябва да съвпада само с един запис, в противен случай се показва списък с вероятните съвпадения. Copy an entry's attribute to the clipboard. - Копиране на атрибут на записа. + Копиране на атрибут на записа в клипборда. Path of the entry to clip. clip = copy to clipboard - Път към записа, който да бъде копиран. + Копиране на пътя към записа. Timeout before clearing the clipboard (default is %1 seconds, set to 0 for unlimited). - Изчакване преди междинната памет да бъде изчистена (по подразбиране - %1 секунди, 0 премахва ограничението). + Периодът от време, преди паметта на клипборда да бъде изчистена (по подразбиране е %1 секунди, задайте на 0 за премахване на ограничението) Invalid timeout value %1. - Неприемлива стойност на изчакване %1. + Невалидна стойност на таймаут %1. Multiple entries matching: - Съвпада повече от един запис: + Няколко записа, които съвпадат: Using matching entry: %1 - Съвпадащ запис: %1 + Entry %1 not found. @@ -7663,7 +6619,7 @@ Do you want to overwrite it? ERROR: Please specify one of --attribute or --totp, not both. - ГРЕШКА: Посочете --attribute, --totp или и двете. + ГРЕШКА: Моля, посочете --attribute, --totp или и двете. Entry with path %1 has no TOTP set up. @@ -7671,39 +6627,39 @@ Do you want to overwrite it? ERROR: attribute %1 is ambiguous, it matches %2. - Грешка: атрибутът %1 е двусмислен, съвпада с %2. + Грешка: атрибут %1 е двусмислен, съвпада с %2. Attribute "%1" not found. - Атрибутът „%1“ не е намерен. + Не е намерен атрибут "%1". Entry's "%1" attribute copied to the clipboard! - Атрибутът на записа „%1“ е копиран! + Атрибутът на записа "%1" е копиран в клипборда! Clearing the clipboard in %1 second(s)... - Изчистване на междинната памет след %1 секунда…Изчистване на междинната памет след %1 секунди… + Изчистване на клипборда след %1 секунда...Изчистване на клипборда след %1 секунди... Clipboard cleared! - Междинната памет е изчистена! + Клипборда е изчистен! Close the currently opened database. - Затваряне на отвореното хранилище. + Затворяне на текущо отворената база данни. Display this help. - Показване на помощта. + Покажи тази помощ. Silence password prompt and other secondary outputs. - Без запитване за парола и други извеждания с нисък приоритет. + Заглуши промпта за паролата и други воторостепенни изходи. Key file of the database. - Файлът с ключ на хранилището. + Файл-ключа на базата данни. path @@ -7711,79 +6667,79 @@ Do you want to overwrite it? Deactivate password key for the database. - Без използване на парола за хранилището. + Деактивиране на парола за базата данни. Yubikey slot and optional serial used to access the database (e.g., 1:7370001). - Позиция на YubiKey и по желание сериен номер за достъп до хранилището (напр. 1:7370001). + slot[:serial] - позиция[:сериен-номер] + Missing positional argument(s). - Липсват подредени аргументи. + Too many arguments provided. - Подадени са твърде много аргументи. - - - Path of the database. - Път до хранилището. + Target decryption time in MS for the database. - Целево време за разшифроване на хранилището в милисекунди. + Целево време за дешифриране на базата в MS. time - време + Време Set the key file for the database. - Задаване на файл с ключ за хранилището. + Задаване на файл-ключа за базата данни. Set a password for the database. - Задаване на парола за хранилището. + Задайте парола за базата данни. Create a new database. - Създаване на ново хранилище. + Създаване на нова база данни. + + + Path of the database. + Път на базата данни. Invalid decryption time %1. - Неприемливо време за разшифроване %1. + Невалидно време за дешифриране %1. Target decryption time must be between %1 and %2. - Целевото време за разшифроване трябва да бъде между %1 и %2. + Целевото реме за дешифриране трябва да бъде между %1 и %2. Failed to set database password. - Грешка при задаване на парола за хранилището. + Неуспешно задаване на парола за базата данни. Loading the key file failed - Грешка при зареждане на файл с ключ + Зареждането на файл-ключа е неуспешно No key is set. Aborting database creation. - Не е зададен ключ. Прекратяване на създаването на хранилище. + Не е зададен ключ. Прекратяване на създаването на база данни. Benchmarking key derivation function for %1ms delay. - Измерване на производителността на функцията за извличане на ключове при закъснение от %1 мс. + Setting %1 rounds for key derivation function. - Задаване на %1 извиквания за функцията за извличане на ключове. + error while setting database key derivation settings. - грешка при задаване на настройки за извличане на ключ на хранилище. + File %1 already exists. @@ -7791,71 +6747,297 @@ Do you want to overwrite it? Failed to save the database: %1. - Грешка при запазване на хранилището: %1. + Грешка при записване на базата данни: %1. Successfully created new database. - Създадено е ново хранилище. + Успешно създадена нова база данни. - Unset the password for the database. - Премахване на парола от хранилище. + Word count for the diceware passphrase. + - Unset the key file for the database. - Премахване на файл с ключ от хранилище. + count + CLI parameter + брой - Edit a database. - Променяне на хранилище. + Wordlist for the diceware generator. +[Default: EFF English] + - Cannot use %1 and %2 at the same time. - „%1“ и „%2“ не могат да бъдат използвани едновременно. + Generate a new random diceware passphrase. + - Could not change the database key. - Ключът за хранилището не може да бъде сменен. + Invalid word count %1 + Невалиден брой думи %1 - Database was not modified. - Хранилището не е променено. + The word list is too small (< 1000 items) + Списъкът с думи е твърде малък (< 1000 елемента) + + + Title for the entry. + Заглавие на записа. + + + title + заглавие + + + Edit an entry. + Редактиране на запис. + + + Path of the entry to edit. + Път към записа за редактиране. + + + Not changing any field for entry %1. + Без провени в полетата за записа %1. + + + Enter new password for entry: + Въведете нова парола за записа: Writing the database failed: %1 - Грешка при записване на хранилището: %1 + Грешка при запис на базата данни: %1 - Successfully edited the database. - Хранилището е променено. + Successfully edited entry %1. + Успешно редактиран запис %1. - Cannot remove password: The database does not have a password. - Паролата не може да бъде премахната: хранилището няма парола. + Perform advanced analysis on the password. + Извършване на разширен анализ на паролата. - Cannot remove file key: The database does not have a file key. - Файлът с ключ не може да бъде премахнат: хранилището няма файл с ключ. + Password for which to estimate the entropy. + Парола за която да се оцени ентропията. - Loading the new key file failed: %1 - Грешка при зареждане на новия файл с ключ: %1 + Estimate the entropy of a password. + Оцени ентропията на паролата. - Found unexpected Key type %1 - Намерен е неочакван вид на ключа %1 + Length %1 + Дължина %1 - Cannot remove all the keys from a database. - Не трябва да бъдат премахвани всички ключове от хранилище. + Entropy %1 + Ентропия %1 + + + Log10 %1 + Логаритъм10 %1 + + + Multi-word extra bits %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) *** + + + Exit interactive mode. + Излизане от интерактивния режим. + + + Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. + Формат при експортиране. Наличните възможности са "xml" и "csv". По подразбиране е "xml". + + + Exports the content of a database to standard output in the specified format. + Експортира съдържанието на база данни в стандартен изход в указания формат. + + + Unable to export database to XML: %1 + Не може да се експортира база данни в XML: %1 + + + Unsupported format %1 + Неподдържан формат %1 + + + Length of the generated password + Дължина на генерираната парола + + + length + Дължина + + + Use lowercase characters + Използване на малки букви + + + Use uppercase characters + Използване на главни букви + + + Use numbers + Използване на номера + + + Use special characters + Използване на специални знаци + + + Use extended ASCII + Използвай разширен ASCII + + + Exclude character set + Изключване на набор от знаци + + + chars + Символи + + + Use custom character set + Използване на потребителски набор от символи + + + Exclude similar looking characters + Изключване на подобни знаци + + + Include characters from every selected group + Включване на знаци от всяка избрана група + + + Generate a new random password. + Генерирайте нова случайна парола. + + + Invalid password length %1 + Невалидна дължина на паролата %1 + + + Invalid password generator after applying all options + Невалиден генератор на пароли след прилагане на всички опции + + + Display command help. + Показване на помощ за командна. + + + Available commands: + Налични команди: + + + Import the contents of an XML database. + Импортиране на съдържанието на XML база данни. + + + Path of the XML database export. + Път на експортирането на XML база данни. + + + Path of the new database. + Път към новата база данни. + + + Unable to import XML database: %1 + Не може да се импортира XML база данни:% 1 + + + Successfully imported database. + Успешно импортирана база данни. Show a database's information. - Показване на подробности за хранилище. + Показване на информация за базата данни. UUID: - Идентификатор: + UUID: Name: @@ -7871,11 +7053,11 @@ Do you want to overwrite it? KDF: - ФИК: + KDF: Recycle bin is enabled. - Кошчето е включено. + Кошчето е включено(. Recycle bin is not enabled. @@ -7887,19 +7069,19 @@ Do you want to overwrite it? Database created - Хранилището е създадено + Базата данни бе създадена Last saved - Последно запазване + Последно записан Unsaved changes - Незапазени промени + Незаписани промени yes - да + Да no @@ -7915,7 +7097,7 @@ Do you want to overwrite it? Number of expired entries - Брой записи с изтекла давност + Брой изтекли записи Unique passwords @@ -7927,7 +7109,7 @@ Do you want to overwrite it? Maximum password reuse - Най-преизползвана парола + Максимална преизползване на парола Number of short passwords @@ -7935,7 +7117,7 @@ Do you want to overwrite it? Number of weak passwords - Брой слаби пароли + Брой на слабите пароли Entries excluded from reports @@ -7949,273 +7131,6 @@ Do you want to overwrite it? %1 characters %1 знака - - Word count for the diceware passphrase. - Брой думи при създаване на фраза за достъп - - - count - CLI parameter - брой - - - Wordlist for the diceware generator. -[Default: EFF English] - Списък с думи при създаване на фраза за достъп -[Подразбиран: EFF English] - - - Generate a new random diceware passphrase. - Създаване на произволна фраза за достъп. - - - Invalid word count %1 - Неприемлив брой думи %1 - - - Title for the entry. - Заглавие на записа. - - - title - заглавие - - - Edit an entry. - Променяне на запис. - - - Path of the entry to edit. - Път към записа, който да бъде променян. - - - Not changing any field for entry %1. - Без променяне на полетата на записа %1. - - - Enter new password for entry: - Въведете нова парола за записа: - - - Successfully edited entry %1. - Записът %1 е променен. - - - Perform advanced analysis on the password. - Извършване на разширен анализ на паролата. - - - Password for which to estimate the entropy. - Паролата, на която да бъде оценена ентропията. - - - Estimate the entropy of a password. - Оценяване на ентропията на паролата. - - - 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) *** - - - Exit interactive mode. - Излизане от интерактивен режим. - - - Exports the content of a database to standard output in the specified format. - Изнася съдържанието на хранилището към стандартния изход в указания формат. - - - Unable to export database to XML: %1 - Грешка при изнасяне на хранилище в XML: %1 - - - Unsupported format %1 - Неподдържан формат %1 - - - Length of the generated password - Дължина на създаваната парола - - - length - дължина - - - Use lowercase characters - Използване на букви от долен регистър - - - Use uppercase characters - Използване на букви от горен регистър - - - Use numbers - Използване на цифри - - - Use special characters - Използване на специални знаци - - - Use extended ASCII - Използване на разширен ASCII - - - Exclude character set - Изключване на набор от знаци - - - chars - символи - - - Use custom character set - Използване на потребителски набор от символи - - - Exclude similar looking characters - Изключване на знаците, които изглеждат еднакво - - - Include characters from every selected group - Използване на символи от всяка избрана група - - - Generate a new random password. - Създаване на случайна парола. - - - Invalid password length %1 - Неприемлива дължина на паролата %1 - - - Invalid password generator after applying all options - Не може да бъде създадена парола с избраните стойности. - - - Display command help. - Показване на помощ за команда. - - - Available commands: - Налични команди: - - - Import the contents of an XML database. - Внасяне на съдържание от хранилище в XML. - - - Path of the XML database export. - Път, в който да бъде изнесено хранилище в XML. - - - Path of the new database. - Път към новото хранилище. - - - Unable to import XML database: %1 - Грешка при внасяне на хранилище в XML формат: %1 - - - Successfully imported database. - Хранилището е внесено. - Unknown command %1 Неизвестна команда %1 @@ -8225,10 +7140,7 @@ Do you want to overwrite it? Available commands: - - -Налични команди: - + Налични команди: Name of the command to execute. @@ -8240,7 +7152,7 @@ Available commands: Invalid command %1. - Недействителна команда %1. + Невалидна команда %1. Recursively list the elements of the group. @@ -8248,51 +7160,51 @@ Available commands: Flattens the output to single lines. - Съкращава изхода до единични редове. + Изравнява изхода към единични редове. List database entries. - Изброява записите в хранилището. + Списък на записите в базата данни. Path of the group to list. Default is / - Път до групата, която да бъде изброена. По подразбиране е / + Път на групата за показване. По подразбиране е / Cannot find group %1. - Групата %1 не може да бъде намерена. + Не може да се намери групата %1. Use the same credentials for both database files. - Използване на едно удостоверяване на достъпа за двете хранилища. + Използвайте едни и същи идентификационни данни за двата файла с бази данни. Key file of the database to merge from. - Файлът с ключ на хранилището, от което да бъде сливано. + Файл-ключа на базата данни за сливане. Deactivate password key for the database to merge from. - Без използване на парола за хранилището, от което да бъде сливано. + Изключване на използваната парола-ключ за обединяването на базите данни . Only print the changes detected by the merge operation. - Отпечатване само на промените, открити от действието сливане. + Изкарай само промените, открити от операцията за сливане. Yubikey slot for the second database. - Позиция на YubiKey за второто хранилище. + Yubikey слот за втората база данни. slot - позиция + слот Merge two databases. - Сливане на две хранилища. + Сливане на две бази данни. Path of the database to merge from. - Път до хранилището, от което да бъде сливано. + Път до базата данни, от която да се слее. Error reading merge file: @@ -8302,7 +7214,7 @@ Available commands: Unable to save database to file : %1 - Хранилището не може да бъде запазено във файл: %1 + Базата данни не може да бъде записана във файл: %1 Successfully merged %1 into %2. @@ -8310,7 +7222,7 @@ Available commands: Database was not modified by merge operation. - Хранилище не е променяно при сливането. + Базата данни не е модифицирана от операция по сливане. Moves an entry to a new group. @@ -8318,11 +7230,11 @@ Available commands: Path of the entry to move. - Път към записа, който да бъде преместен. + Път на записа за местене. Path of the destination group. - Път към целевата група. + Път на целевата група. Could not find group with path %1. @@ -8338,39 +7250,39 @@ Available commands: Open a database. - Отваряне на хранилище. + Отворете база данни. Path of the entry to remove. - Път към записа, който да бъде премахнат. + Път на записа за премахване. Unable to save database to file: %1 - Хранилището не може да бъде запазено във файл: %1 + Базата данни не може да бъде записана във файл: % 1 Successfully recycled entry %1. - Записът %1 е преместен в кошчето. + Успешно изтриване на запис%1. Successfully deleted entry %1. - Записът %1 е премахнат. + Успешно изтрит елемент %1. Path of the group to remove. - Път към групата, която да бъде премахната. + Пътят на групата за премахване. Cannot remove root group from database. - Кореновата група на хранилището не може да бъде премахната. + Не може да се премахне главната група от базата данни. Successfully recycled group %1. - Групата %1 е преместена в кошчето. + Успешно изтрита група% 1. Successfully deleted group %1. - Групата %1 е премахната. + Успешно изтрита група %1. Find entries quickly. @@ -8388,17 +7300,13 @@ Available commands: Show the protected attributes in clear text. Показване на защитените атрибути в чист текст. - - Show all the attributes of the entry. - Показване на всички атрибути на записа. - Show the attachments of the entry. - Показване на прикачените файлове към записа. + 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 @@ -8410,7 +7318,7 @@ Available commands: Name of the entry to show. - Име на записа, който да бъде показан. + Име на записа за показване. ERROR: unknown attribute %1. @@ -8426,15 +7334,15 @@ Available commands: Failed to open database file %1: not found - Грешка при отваряне на хранилището %1: не е намерено + Грешка при отваряне на файла %1: не е намерен Failed to open database file %1: not a plain file - Грешка при отваряне на хранилището %1: не е текстов файл + Грешка при отваряне на файла %1 на база данни: не е текстов файл Failed to open database file %1: not readable - Грешка при отваряне на хранилището %1: няма права за четене + Грешка при отваряне на файла %1: не е четим Enter password to unlock %1: @@ -8442,36 +7350,32 @@ Available commands: Failed to load key file %1: %2 - Грешка при зареждане на файл с ключ %1: %2 + Грешка при зареждане на файла-ключ %1: %2 WARNING: You are using an old key file format which KeePassXC may stop supporting in the future. Please consider generating a new key file. - ВНИМАНИЕ: Използвате стар формат на файла с ключ, който KeePassXC може да спре да поддържа в бъдеще. + Използвате остарял файлов формат на ключа, който KeePass XC може да спре да поддържа в бъдеще. -Вземете предвид възможността да създадете нов файл с ключ. +Помислете за генериране на нов ключ файл. Invalid YubiKey slot %1 - Неприемлива позиция %1 на YubiKey + Невалиден YubiKey слот %1 Invalid YubiKey serial %1 - Неприемлив сериен номер на YubiKey %1 - - - Please present or touch your YubiKey to continue. - За да продължите, добавете или докоснете своя YubiKey. + Невалиден YubiKey сериен номер %1 Enter password to encrypt database (optional): - Въведете парола, която да шифрова хранилището (по желание): + Въведете парола за шифроване на база данни (незадължително): Do you want to create a database with an empty password? [y/N]: - Желаете ли хранилището да бъде създадено с празна парола? [y/N]: + Искате ли да създадете база данни с празна парола? [y/N]: Repeat password: @@ -8483,25 +7387,24 @@ Please consider generating a new key file. No program defined for clipboard manipulation - Не е избрано приложение, което да управлява междинната памет + Няма програма, дефинирана за манипулация на клипборда All clipping programs failed. Tried %1 - Грешка с всички приложения за междинна памет. Използвани са %1 - + Creating KeyFile %1 failed: %2 - Грешка при създаване на файл с ключ %1: %2 + Грешка при създаване на KeyFile %1: %2 Loading KeyFile %1 failed: %2 - Грешка при зареждане на файл с ключ %1: %2 + Грешка при зареждане на KeyFile %1: %2 HIBP file, line %1: parse error - Файл HIBP, ред %1: грешка при разбор + Файл HIBP, ред %1: грешка при парсване To use okon, you must provide a post-processed file (e.g. file.okon) @@ -8513,11 +7416,11 @@ Please consider generating a new key file. Error: okon process did not finish - Грешка: търсенето чрез okon не е завършило + Грешка: търсенето чрез okon не успя да завърши Failed to load okon processed database: %1 - Грешка при зареждане на обработеното с okon хранилище: %1 + Неуспешно зареждане на база данни чрез okon: %1 Very weak password @@ -8533,43 +7436,43 @@ Please consider generating a new key file. Used in %1/%2 - Използвана в %1/%2 + Използвани в %1/%2 Password is used %1 time(s) - Паролата е преизползвана %1 пътПаролата е преизползвана %1 пъти + Паролата е използвана %1 път(и)Паролата е използвана %1 път(и) Password has expired - Паролата е с изтекла давност + Паролата е изтекъла Password expiry was %1 - Давността на паролата е била до %1 + Изтичането на паролата беше на %1 Password expires on %1 - Давността на паролата изтича на %1 + Паролата изтича на %1 Password is about to expire - Давността на паролата изтича + Паролата скоро ще изтече Password expires in %1 day(s) - Давността на паролата изтича след %1 денДавността на паролата изтича след %1 дена + Password will expire soon - Давността на паролата изтича + Паролата ще изтече скоро Version %1 - Издание %1 + Версия %1 Build Type: %1 - Вид на компилацията: %1 + Тип на компилацията: %1 Revision: %1 @@ -8597,11 +7500,11 @@ Kernel: %3 %4 Auto-Type - Автоматично въвеждане + Auto-Type SSH Agent - Агент на SSH + SSH Agent KeeShare @@ -8617,7 +7520,7 @@ Kernel: %3 %4 Secret Service Integration - Съчетаване с Услуга за тайни + Secret Service интеграция None @@ -8629,27 +7532,27 @@ Kernel: %3 %4 over %1 year(s) - повече от %1 годинаповече от %1 години + about %1 month(s) - около %1 месецоколо %1 месеца + %1 week(s) - %1 седмица%1 седмици + %1 day(s) - %1 ден%1 дена + %1 hour(s) - %1 час%1 часа + %1 minute(s) - %1 минута%1 минути + Botan library must be at least %1, found %2.%3.%4 @@ -8661,35 +7564,35 @@ Kernel: %3 %4 AES (%1 rounds) - AES (%1 преобразувания) + AES (% 1 рунда) Argon2%1 (%2 rounds, %3 KB) - Argon2%1 (%2 преобразувания, %3 КБ) + SymmetricCipher::init: Invalid cipher mode. - SymmetricCipher::init: Неприемлив режим на шифър. + SymmetricCipher::init: Invalid IV size of %1 for %2. - SymmetricCipher::init: Неприемлив размер на ИВ от %1 за %2. + Cipher not initialized prior to use. - Шифър не е подготвен преди използване. + Cannot process 0 length data. - Данни с дължина 0 не могат да бъдат обработвани. + unknown executable (DBus address %1) - неизвестен изпълним файл (адрес по DBus %1) + %1 (invalid executable path) - %1 (неприемлив път към изпълним файл) + NULL device @@ -8697,31 +7600,43 @@ Kernel: %3 %4 error reading from device - грешка при четене от устройство + грешка при четене от устройството file empty празен файл + + malformed string + неправилен низ + + + missing closing quote + липсваща затваряща кавичка + + + %1: (row, col) %2,%3 + %1: (ред, колона) %2,%3 + AES 256-bit - AES 256 разряден + AES 256-битов Twofish 256-bit - Twofish 256 разряден + Twofish 256-битов ChaCha20 256-bit - ChaCha20 256 разряден + ChaCha20 256 разряда Argon2d (KDBX 4 – recommended) - Argon2d (KDBX 4 – препоръчано) + Argon2id (KDBX 4) - Argon2id (KDBX 4) + AES-KDF (KDBX 4) @@ -8733,15 +7648,15 @@ Kernel: %3 %4 Existing single-instance lock file is invalid. Launching new instance. - Съществуващият заключващ файл за единичен екземпляр е недействителен. Стартиране на нов екземпляр. + The lock file could not be created. Single-instance mode disabled. - Грешка при създаване на файл за заключване. Режимът на единичен екземпляр е изключен. + Clearing the clipboard in %1 second(s)… - Изчистване на междинната памет след %1 секунда…Изчистване на междинната памет след %1 секунди… + Group @@ -8753,7 +7668,7 @@ Kernel: %3 %4 Username - Потребител + Портебител Password @@ -8765,24 +7680,24 @@ Kernel: %3 %4 Icon - Пиктограма + Икона Last Modified - Последна промяна + Последно променена Created - Създаване + Създаден Benchmark %1 delay - Производителност при забавяне от %1 + Бенчмарк %1 закъснение %1 ms milliseconds - %1 мс%1 мс + % 1 ms%1 ms %1 s @@ -8791,35 +7706,35 @@ Kernel: %3 %4 Do you really want to delete the entry "%1" for good? - Желаете ли записът „%1“ да бъде премахнат завинаги? + Наистина ли искате да изтриете записа "%1" за добро? Do you really want to delete %n entry(s) for good? - Желаете ли %n запис да бъде премахнат завинаги?Желаете ли %n записа да бъдат премахнати завинаги? + Delete entry(s)? - Премахване на запис?Премахване на записи? + Do you really want to move entry "%1" to the recycle bin? - Желаете ли записът „%1“ да бъде преместен в кошчето? + Наистина ли искате да преместите запис "%1" в кошчето? Do you really want to move %n entry(s) to the recycle bin? - Желаете ли %n запис да бъде преместен в кошчето?Желаете ли %n записа да бъдат преместени в кошчето? + Move entry(s) to recycle bin? - Преместване на запис в кошчето?Преместване на записи в кошчето? + 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 референции. Желаете ли тези референции да бъдат заменени със стойности, записът да бъде пропуснат или въпреки това да бъде премахнат? + User name @@ -8827,7 +7742,7 @@ Kernel: %3 %4 Browser Statistics - Статистика от мрежовия четец + Health Check @@ -8843,31 +7758,31 @@ Kernel: %3 %4 Unsupported key file version: %1 - Неподдържано издание на файл с ключ: %1 + Неподдържан тип ключ: %1 Checksum mismatch! Key file may be corrupt. - Несъвпадаща контролна сума! Файлът с ключа навярно е повреден. + Несъвпадаща контролна сума! Файл-ключът навярно е повреден. Unexpected key file data! Key file may be corrupt. - Неочаквани данни от файл с ключ! Файлът с ключа навярно е повреден. + Неочаквани данни от файл-ключ! Файл-ключът навярно е повреден. KeePassXC - cross-platform password manager - KeePassXC - Управление на пароли + KeePassXC - крос-платформен мениджър на пароли filenames of the password databases to open (*.kdbx) - файлове или хранилища за пароли (*.kdbx) + файловите имена на базите данни с пароли за отваряне (*.kdbx) path to a custom config file - път към потребителски файл с настройки + път към потребителския конфигурационен файл path to a custom local config file - път към местен потребителски файл с настройки + lock all open databases @@ -8875,27 +7790,31 @@ Kernel: %3 %4 key file of the database - файл с ключ на хранилище + файл-ключа на базата данни read password of the database from stdin - вземане на паролата за хранилището от стандартния вход + прочетете паролата на базата данни от stdin + + + allow app screen recordering and screenshots + + + + Locked databases. + Базите данни бяха заключени. Database failed to lock. - Неуспешно заключване на хранилище. + Неуспешно заключване на базите данни. Another instance of KeePassXC is already running. - Друга екземпляр на KeePassXC вече работи. - - - KeePassXC is not running. No open database to lock - KeePassXC не работи. Няма отключено хранилище, което да бъде заключено + Друга инстанция на KeePassXC вече работи. Fatal error while testing the cryptographic functions. - Фатална грешка при проверяване на криптографските функции. + Фатална грешка при тестване на криптографските функции. KeePassXC - Error @@ -8903,25 +7822,25 @@ Kernel: %3 %4 Database password: - Парола за хранилище: + Парола за базата данни: Invalid Settings TOTP - Неприемливи настройки + Невалидни настройки Invalid Key TOTP - Неприемлив ключ + Невалиден ключ Failed to create Windows Hello credential. - Грешка при създаване на самоличност с Windows Hello. + Failed to sign challenge using Windows Hello. - Грешка при подписване на предизвикателство, чрез Windows Hello. + Warning: Failed to block screenshot capture on a top-level window. @@ -8933,314 +7852,83 @@ Kernel: %3 %4 Invalid KDF - Недействителна ФИК + Недействителен KDF - Access to all entries is denied - Достъпът до всички записи е отказан + Please present or touch your YubiKey to continue. + - allow screenshots and app recording (Windows/macOS) - разрешаване на екранни снимки и запис на приложения (Windows/macOS) + Show all the attributes of the entry. + Всички атрибути на записа. + + + Edit a database. + + + + Could not change the database key. + + + + Database was not modified. + + + + Successfully edited the database. + + + + Loading the new key file failed: %1 + + + + Unset the password for the database. + + + + Unset the key file for the database. + + + + Cannot use %1 and %2 at the same time. + + + + Cannot remove all the keys from a database. + + + + Cannot remove password: The database does not have a password. + + + + Cannot remove file key: The database does not have a file key. + + + + Found unexpected Key type %1 + Set the key file for the database. -This option is deprecated, use --set-key-file instead. - Задава файл с ключ за хранилището. -Тази настройка е изведена от употреба, вместо нея използвайте „--set-key-file“. +This options is deprecated, use --set-key-file instead. + - Databases have been locked. - Хранилището е заключено. - - - Attestation not supported - Не се поддържа атестация - - - Credential is excluded - Самоличността е пропусната - - - Passkeys request canceled - Заявката за Passkey е отказана - - - Invalid user verification - Неприемливо потвърждаване на потребител - - - Empty public key - Празен публичен ключ - - - Invalid URL provided - Предоставен е неприемлив адрес - - - Passkeys - Passkeys - - - AES initialization failed - Грешка при подготвяне на AES - - - AES encrypt failed - Грешка при шифроване с AES - - - Failed to store in Linux Keyring - Грешка при запазване в ключодържател на Линукс - - - Polkit returned an error: %1 - Polkit върна грешка: %1 - - - Could not locate key in keyring - Ключ не може да бъде намерен в ключодържател - - - Could not read key in keyring - Ключ не може да бъде прочетен в ключодържателя - - - AES decrypt failed - Грешка при разшифроване с AES - - - No Polkit authentication agent was available - Не е наличен удостоверяващ агент на Polkit - - - Polkit authorization failed - Грешка при удостоверяване с Polkit - - - No Quick Unlock provider is available - Не е наличен доставчик на бързо отключване - - - Failed to init KeePassXC crypto. - Грешка при подготвяне на шифър на KeePassXC. - - - Failed to encrypt key data. - Грешка при шифроване на данните на ключа. - - - Failed to get Windows Hello credential. - Грешка при получаване на самоличност от Windows Hello. - - - Failed to decrypt key data. - Неуспешно дешифриране на данните на ключа. - - - Origin is empty or not allowed - Източникът е празен или забранен - - - Effective domain is not a valid domain - Ефективният домейн не е приемлив домейн - - - Origin and RP ID do not match - Източникът и RP ID не съвпадат - - - No supported algorithms were provided - Не са предоставени поддържани алгоритми - - - Wait for timer to expire - Изчакайте отброяването да приключи - - - Challenge is shorter than required minimum length - Предизвикването е по-късо от изискваната минимална дължина - - - user.id does not match the required length - user.id не отговаря на изискваната дължина - - - Favorite - Tag for favorite entries - Избрани - - - File does not exist. - Файлът не съществува. - - - Cannot open file: %1 - Файлът не може да бъде отворен: %1 - - - Cannot parse file: %1 at position %2 - Грешка при разбор на файл: %1 на позиция %2 - - - Failed to decrypt json file: %1 - Грешка при разшифроване на файл с JSON: %1 - - - Invalid encKeyValidation field - Полето encKeyValidation е неприемливо - - - Invalid cipher list within encKeyValidation field - Полето encKeyValidation съдържа неприемлив списък с шифри. - - - Wrong password - Грешна парола - - - Invalid encrypted data field - Шифрованата стойност на полето data е неприемлива - - - Invalid cipher list within encrypted data field - Криптираните шифри в полето data са неприемливи - - - Cannot initialize cipher - Грешка при подготовка на шифър - - - Cannot decrypt data - Данните не могат да бъдат разшифровани - - - Bitwarden Import - Внасяне от Bitwarden - - - Archived - Tag for archived entries - Архивни - - - Invalid 1PUX file format: Not a valid ZIP file. - Форматът на файла 1PUX е неприемлив: недействителен ZIP. - - - Invalid 1PUX file format: Missing export.data - Форматът на файла 1PUX е неприемлив: липсва export.data - - - 1Password Import - Внасяне от 1Password - - - Enter Shortcut - Въведете клавишна комбинация - - - Action - Действие - - - Shortcuts - Клавишни комбинации - - - Unknown passkeys error - Неочаквана грешка на passkey - - - Invalid KDF iterations, cannot decrypt json file - Неподдържан брой преобразувания с ФИК, файлът с JSON не може да бъде разшифрован - - - Unsupported format, ensure your Bitwarden export is password-protected - Неподдържан формат, уверете се, че изнесеното от Bitwarden е защитено с парола - - - Only PBKDF and Argon2 are supported, cannot decrypt json file - Поддържат се само PBKDF и Argon2, файлът с JSON не може да бъде разшифрован - - - Reset Shortcuts - Нулиране на клавишни комбинации - - - Double click an action to change its shortcut - За да промените клавишната комбинация щракнете двукратно върху желаното действие. - - - Filter... - Филтър… - - - Shortcut Conflict - Конфликт на клавишни комбинации - - - Shortcut %1 conflicts with '%2'. Overwrite shortcut? - Комбинацията %1 е в конфликт с „%2“. Презаписване на клавишната комбинация? - - - Cannot generate valid passphrases because the wordlist is too short - Не може да бъде създадена приемлива парола, защото списъкът с думи е твърде кратък. - - - Encrypted files are not supported. - Не се поддържат шифровани файлове. - - - Proton Pass Import - Внасяне от Proton Pass - - - Delete plugin data? - Изтриване на данни от разширението? - - - Delete plugin data from Entry(s)? - Премахване на информация от добавката от запис?Премахване на информация от добавката от записи? - - - Passkey - Passkey - - - Format to use when exporting. Available choices are 'xml', 'csv' or 'html'. Defaults to 'xml'. - Формат при изнасяне. Възможностите са „xml“, „csv“ и „html“ . По подразбиране е „xml“. - - - start minimized to the system tray - стартиране скрито в областта за известия - - - malformed string, possible unescaped delimiter - не добре форматиран низ вероятно има разделител без избягващ знак - - - missing closing delimiter - липсващ затварящ разделител - - - %1, row: %2, column: %3 - %1, ред: %2, колона: %3 - - - Tags - Етикети + KeePassXC is not running. No open database to lock + KeePassXC не работи. Няма отворено хранилище, което да бъде зключено QtIOCompressor Internal zlib error when compressing: - Вътрешна грешка на zlib при компресиране: + Вътрешна zlib грешка при компресиране: Error writing to underlying device: - Грешка при записване на основното устройство: + Грешка при писане към основното устройство: Error opening underlying device: @@ -9248,68 +7936,49 @@ This option is deprecated, use --set-key-file instead. Error reading data from underlying device: - Грешка при прочитане на данни от основното устройство: + Грешка при прочитане на данни от основното устройство Internal zlib error when decompressing: - Вътрешна zlib грешка при разкомпресиране: + Вътрешна zlib грешка при декомпресиране: QtIOCompressor::open The gzip format not supported in this version of zlib. - Форматът gzip не се поддържа това издание на zlib. + Форматът gzip не се поддържа в тази версия на zlib. Internal zlib error: Вътрешна грешка на zlib: - - RemoteHandler - - Command `%1` did not finish in time. Process was killed. - Командата `%1` не завърши навреме. Процесът ѝ е спрян. - - - Failed to upload merged database. Command `%1` did not finish in time. Process was killed. - Грешка при качване на слятото хранилище. Командата `%1` не завърши навреме. Процесът ѝ е спрян. - - - Invalid download parameters provided. - Подадени са недействителни параметри за изтеглянето. - - - Command `%1` failed to download database. - Командата `%1` успя да изтегли хранилище. - - - Invalid database pointer or upload parameters provided. - Недействителен указател към хранилище или подадени недействителни параметри за качването. - - - Command `%1` exited with status code: %2 - Командата `%1` завърши с код на състоянието: %2 - - - Failed to upload merged database. Command `%1` exited with status code: %2 - Грешка при качване на слятото хранилище. Командата `%1` завърши с код на състоянието: %2 - - ReportsWidgetBrowserStatistics + + Exclude expired entries from the report + Докладът да не съдържа записи с изтекла давност + + + Show only entries which have URL set + + + + Show only entries which have browser settings in custom data + + Double-click entries to edit. - За да промените запис, щракнете двукратно върху него. + List of entry URLs - Списък с адресите от всички записи + Списък с URL адреси на записите Entry has no URLs set - Записът няма въведени адреси + Записът няма задени URL адреси Allowed URLs @@ -9317,7 +7986,7 @@ This option is deprecated, use --set-key-file instead. Entry has no Browser Integration settings - Записът няма настройка за съчетаване с мрежов четец + Denied URLs @@ -9329,15 +7998,15 @@ This option is deprecated, use --set-key-file instead. This entry is being excluded from reports - Записът е изключен от отчетите + Това вписване е изключено от отчетите Please wait, browser statistics is being calculated… - Изчакайте, изчислява се статистиката от мрежовия четец… + No entries with a URL, or none has browser extension settings saved. - Липсват записи с адрес или няма такива със запазени настройки за разширението на мрежовия четец. + Title @@ -9353,62 +8022,53 @@ This option is deprecated, use --set-key-file instead. Edit Entry… - Променяне на запис… + Delete Entry(s)… - Премахване на запис?Премахване на записи? + Exclude from reports Изключване от отчети - - Expire Entry(s)… - Прекратяване на давносттаПрекратяване на давността - - - Only show entries that have a URL - Показване само на записи с адреси - - - Only show entries that have been explicitly allowed or denied - Показване само на записи, които изрично са разрешени или забранени - - - Show expired entries - Показване на записи с изтекла давност - - - (Expired) - (изтекла давност) - - - Delete plugin data from Entry(s)… - Премахване на информация от добавката от запис…Премахване на информация от добавката от записи… - ReportsWidgetHealthcheck - Show expired entries - Показване на записи с изтекла давност + Exclude expired entries from the report + Докладът да не съдържа записи с изтекла давност - (Expired) - (изтекла давност) + Also show entries that have been excluded from reports + Показване и на изключените от отетите записи Hover over reason to show additional details. Double-click entries to edit. - За подробности, задръжте показалеца на мишката върху причината. За да промените запис, щракнете двукратно върху него. + Задръжте курсора на мишката върху причината, за да се покажат допълнителни подробности. Щракнете двукратно върху записите, за да редактирате. + + + Bad + Password quality + Лош Bad — password must be changed - Много лоша — паролата трябва да бъде променена + Лош — паролата трябва да бъде променена + + + Poor + Password quality + Слабо Poor — password should be changed - Лоша — добре е паролата да бъде променена + Лошо — паролата добре да се смени + + + Weak + Password quality + Слабо Weak — consider changing the password @@ -9420,15 +8080,15 @@ This option is deprecated, use --set-key-file instead. This entry is being excluded from reports - Този запис е изключен от отчетите + Това вписване е изключено от отчетите Please wait, health data is being calculated… - Изчакайте, извършва се проверка на състоянието… + Congratulations, everything is healthy! - Поздравления, всичко е наред! + Поздравления, всичко е зраво! Title @@ -9448,46 +8108,38 @@ This option is deprecated, use --set-key-file instead. Edit Entry… - Променяне на запис… + Delete Entry(s)… - Премахване на запис?Премахване на записи? + Exclude from reports Изключване от отчети - - Expire Entry(s)… - Прекратяване на давносттаПрекратяване на давността - - - Show entries that have been excluded from reports - Показване и на изключените от отчети записи - ReportsWidgetHibp CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. - ВНИМАНИЕ: Докладът изисква изпращане на информация до услугата Have I Been Pwned (https://haveibeenpwned.com). Ако продължите, от криптографските отпечатъци на паролите в хранилището ще бъдат взети първите пет знака и ще бъдат изпратени защитено към услугата. Хранилището остава защитено и информацията в него не може да бъде възстановена от отпечатъците. Въпреки това, броя на паролите, които изпращате, и вашият адрес по IP ще бъдат изпратени към услугата. + ВНИМАНИЕ: Този доклад изисква изпращане на информация до услугата Have I Been Pwned (https://haveibeenpwned.com). Ако продължите, паролите от базата данни ще бъдат хеширани по криптографски начин и първите пет знака от тези хешове ще бъдат изпратени защитено на тази услуга. Вашата база данни остава защитена и не може да бъде възстановена от тази информация. Въпреки това, броят на паролите, които изпращате, и вашият IP адрес ще бъдат пратени на тази услуга. Perform Online Analysis - Извършване на отдалечен анализ + Извършване на онлайн анализ Also show entries that have been excluded from reports - Показване и на изключените от отчети записи + Показване и на изключените от отетите записи This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. - Тази компилация на KeePassXC не разполага с мрежов достъп. Той е необходим за проверка на паролите в хранилището на Have I Been Pwned. + Тази компилация на KeePassXC не разполага с мрежови функции. Те са необходими за проверка на паролите в Have I Been Pwned базата данни. Congratulations, no exposed passwords! - Поздравления, няма изложени пароли! + Поздравления, няма разкрити пароли! Title @@ -9499,7 +8151,7 @@ This option is deprecated, use --set-key-file instead. Password exposed… - Парола е изложена… + Парола е разкрита... (Excluded) @@ -9507,7 +8159,7 @@ This option is deprecated, use --set-key-file instead. This entry is being excluded from reports - Този запис е изключен от отчетите + Това вписване е изключено от отчетите once @@ -9551,93 +8203,22 @@ This option is deprecated, use --set-key-file instead. Edit Entry… - Променяне на запис… + Delete Entry(s)… - Премахване на запис?Премахване на записи? + Exclude from reports Изключване от отчети - - Expire Entry(s)… - Прекратяване на давносттаПрекратяване на давността - - - - ReportsWidgetPasskeys - - Export - Изнасяне - - - Import - Внасяне - - - List of entry URLs - Списък с адресите от всички записи - - - Title - Заглавие - - - Path - Път - - - Username - Потребител - - - URLs - Адреси - - - Edit Entry… - Променяне на запис… - - - Delete Entry(s)… - Премахване на запис?Премахване на записи? - - - Relying Party - Зависеща страна - - - Show expired entries - Показване на записи с изтекла давност - - - (Expired) - (изтекла давност) - - - Export Confirmation - Потвърждаване - - - The passkey file will be vulnerable to theft and unauthorized use, if left unsecured. Are you sure you want to continue? - Ако остане незащитен, файлът с passkey може да стане обект на кражба или неправомерен достъп. Желаете ли да продължите? - - - Please wait, list of entries with passkeys is being updated… - Изчакайте, списъкът със записи с passkeys се обновява… - - - No entries with passkeys. - Липсват записи с passkeys. - ReportsWidgetStatistics Hover over lines with error icons for further information. - За подробности, задръжте показалеца на мишката върху редовете с пиктограми за грешка. + Задръжте курсора на мишката върху редове с икони за грешки за допълнителна информация. Name @@ -9649,11 +8230,11 @@ This option is deprecated, use --set-key-file instead. Please wait, database statistics are being calculated… - Изчакайте, изчислява се статистиката на хранилището… + Database name - Име на хранилището + Име на базата данни Description @@ -9665,19 +8246,19 @@ This option is deprecated, use --set-key-file instead. Database created - Дата на създаване + Базата данни бе създадена Last saved - Последно запазване + Последно записан Unsaved changes - Незапазени промени + Незаписани промени yes - да + Да no @@ -9685,7 +8266,7 @@ This option is deprecated, use --set-key-file instead. The database was modified, but the changes have not yet been saved to disk. - Хранилището е променено, но промените още не са записани на диска. + Базата данни е променена, но промените още не са записани на диска. Number of groups @@ -9697,11 +8278,11 @@ This option is deprecated, use --set-key-file instead. Number of expired entries - Брой записи с изтекла давност + Брой изтекли записи The database contains entries that have expired. - Хранилището има записи с изтекла давност. + Базата данни съдържа изтекли записи. Unique passwords @@ -9709,11 +8290,11 @@ This option is deprecated, use --set-key-file instead. Non-unique passwords - Преизползвани пароли + Неуникални пароли More than 10% of passwords are reused. Use unique passwords when possible. - Повече от 10% от паролите са преизползвани. По възможност, използвайте уникални пароли. + Повече от 10% от паролите се преизползват. Използвайте уникални пароли, когато е възможно. Maximum password reuse @@ -9721,7 +8302,7 @@ This option is deprecated, use --set-key-file instead. Some passwords are used more than three times. Use unique passwords when possible. - Някои пароли се преизползват повече от три пъти. По възможност, използвайте уникални пароли. + Някои пароли се преизползват от три пъти. Използвайте уникални пароли, когато е възможно. Number of short passwords @@ -9733,11 +8314,11 @@ This option is deprecated, use --set-key-file instead. Number of weak passwords - Брой слаби пароли + Брой на слабите пароли Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. - Препоръчваме ви да използвате дълги, произволни пароли с оценка „добра“ или „отлична“. + Препоръчваме използването на дълги, произволни пароли с оценка на "добро" или "отлично". Entries excluded from reports @@ -9772,11 +8353,11 @@ This option is deprecated, use --set-key-file instead. No agent running, cannot add identity. - Няма работещ агент, самоличността не може да бъде добавена. + Не се изпълнява агент, не може да добави самоличност. Key identity ownership conflict. Refusing to add. - Конфликт на собствеността на идентичност на ключа. Отказ за добавяне. + Agent refused this identity. Possible reasons include: @@ -9796,38 +8377,30 @@ This option is deprecated, use --set-key-file instead. Security keys are not supported by the agent or the security key provider is unavailable. - Агентът не поддържа ключове за сигурност или доставчикът на ключове за сигурност е недостъпен. + No agent running, cannot remove identity. - Няма работещ агент, самоличността не може да бъде премахната. + Няма работещ агент, не може да премахне самоличността. No agent running, cannot list identities. - Няма работещ агент, самоличностите не могат да бъдат изброени. - - - Failed to remove all SSH identities from agent. - Грешка при изчистване на самоличностите от ssh-agent. - - - All SSH identities removed from agent. - Самоличностите са изчистени от агента на SSH. + Няма изпълняващ се агент, не може да се покажат самоличностите. SearchHelpWidget Search Help - Помощ при търсене + Търсенете помощ Search terms are as follows: [modifiers][field:]["]term["] - Заявката при търсене има следните елементи: [модификатор][поле:]["]условие["] + Думи за търсене са следните: [modifiers][field:]["]term["] Every search term must match (ie, logical AND) - Всички елементи трябва да съвпадат (т.е. логическо И) + Всеки дума за търсене трябва да съответства (т.е. логическо И) Modifiers @@ -9835,15 +8408,15 @@ This option is deprecated, use --set-key-file instead. exclude term from results - изключва условието от резултатите + изключване на термин от резултатите match term exactly - точно съвпадение на условието + точен съвпадение на думата use regex in term - условието е регулярен израз + използвайте регулярен израз за търсене Fields @@ -9851,15 +8424,15 @@ This option is deprecated, use --set-key-file instead. Term Wildcards - Шаблони + Шаблон match anything - съвпада с всичко + съвпадение на всичко match one - съвпада с едно + съвпадение един logical OR @@ -9878,24 +8451,24 @@ This option is deprecated, use --set-key-file instead. Search Help - Помощ при търсене - - - Save Search - Запазване на търсенето + Търсенете помощ Search (%1)… Search placeholder text, %1 is the keyboard shortcut - Търсене (%1)… + Case sensitive - Съвпадение на регистъра + Чувствитерен регистър Limit search to selected group - Търсене само в избраната група + Ограничаване на търсенето до избрана група + + + Save Search + Запазване на търсенето @@ -9910,7 +8483,7 @@ This option is deprecated, use --set-key-file instead. DBus Address - Адрес на DBus + Manage @@ -9936,11 +8509,11 @@ This option is deprecated, use --set-key-file instead. SettingsWidgetFdoSecrets Options - Настройки + Опции Enable KeepassXC Freedesktop.org Secret Service integration - Съчетаване с Услугата за тайни на Freedesktop.org + Включване на Freedesktop.org Secret Service интеграция General @@ -9948,51 +8521,59 @@ This option is deprecated, use --set-key-file instead. Show notification when passwords are retrieved by clients - Показване на известие при достъп на клиенти до паролите + <html><head/><body><p>If enabled, any attempt to read a password must be confirmed. Otherwise, clients can read passwords without confirmation when the database is unlocked.</p><p>This option only covers the access to the password of an entry. Clients can always enumerate the items of exposed databases and query their attributes.</p></body></html> - <html><head/><body><p>Ако е отметнато, всеки опит за четене на парола трябва да бъде потвърден. В противен случай, при отключено хранилище, клиентите могат да четат паролите без потвърждение.</p><p>Тази възможност включва само достъпа до паролата на записите. Клиентите винаги могат да правят заявки към достъпните хранилища и техните атрибути.</p></body></html> + Confirm when passwords are retrieved by clients - Потвърждаване при достъп на клиенти до паролите + + + + <html><head/><body><p><span style=" + font-family:'-apple-system','BlinkMacSystemFont','Segoe UI','Helvetica','Arial','sans-serif','Apple Color + Emoji','Segoe UI Emoji'; font-size:14px; color:#24292e; background-color:#ffffff;">This setting does + not override disabling recycle bin prompts</span></p></body></html> + + Confirm when clients request entry deletion - Потвърждаване при заявено от клиенти премахване на запис + + + + <html><head/><body><p>This improves compatibility with certain applications + which search for password without unlocking the database first.</p><p>But enabling this may also + crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a + different value set in applications.)</p></body></html> + + Prompt to unlock database before searching - Искане за отключване на хранилище преди търсене + Exposed database groups: - Изложени групи: + Authorization - Упълномощаване + Разрешение These applications are currently connected: - Следните приложения са свързани в момента: + Тези приложения са свързани в момента: <b>Warning:</b> - <b>Внимание:</b> + <b>Предупреждение:</b> Save current changes to activate the plugin and enable editing of this section. - За да включите разширението и да можете да променяте тази секция, запазете текущите промени. - - - <html><head/><body><p>This setting does not override disabling recycle bin prompts </p></body></html> - <html><head/><body><p>Тази настройка не променя настройката, изключваща запитванията от кошчето </p></body></html> - - - <html><head/><body><p>This improves compatibility with certain applications which search for password without unlocking the database first.</p><p>But enabling this may also crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a different value set in applications.) </p></body></html> - <html><head/><body><p>Подобрява съвместимостта с някои приложения, които търсят парола без предварително отключване на хранилището.</p><p>Ако е отметнато обаче може да причини срив на клиента, ако хранилището не може да бъде отключено в определен интервал от време (обикновено 25 секунди, но стойността може да е различна за различните приложения).</p></body></html> + Запишете текущите промени, за да активирате приставката и да разрешите редактирането на тази секция. @@ -10003,23 +8584,23 @@ This option is deprecated, use --set-key-file instead. Allow KeeShare imports - Разрешаване на внасяне с KeeShare + Разреши KeeShare импортирането Allow import - Разрешаване на внасяне + Разреши импортиране Allow KeeShare exports - Разрешаване на изнасяне с KeeShare + Разреши KeeShare експортирането Allow export - Разрешаване на изнасяне + Разреши експортиране Only show warnings and errors - Показване само на предупреждения и грешки + Показвай само предупреждения и грешки Own certificate @@ -10031,15 +8612,15 @@ This option is deprecated, use --set-key-file instead. Generate new certificate - Създаване на нов сертификат + Генериране на нов сертификат Generate - Създаване + Генериране Fingerprint: - Отпечатък: + Пръстов отпечатък: Signer name field @@ -10054,61 +8635,53 @@ This option is deprecated, use --set-key-file instead. ShareExport Could not write export container. - Грешка при писане в контейнер за изнасяне. + ShareImport Successful import - Внасянето е успешно + ShareObserver Import from %1 failed (%2) - Внасянето в %1 е неуспешно (%2) + Импортирането от %1 е неуспешно (%2) Import from %1 successful (%2) - Внасянето в %1 е успешно (%2) + Импортиране от %1 успешно (%2) Imported from %1 - Внесено от %1 + Импортиран от %1 Multiple import source path to %1 in %2 - Много пътища за внасяне на %1 в %2 + Conflicting export target path %1 in %2 - Конфликтна цел на пътища за изнасяне на %1 в %2 + Export to %1 failed (%2) - Изнасянето в %1 е неуспешно (%2) + Експортирането в %1 е неуспешно (%2) Export to %1 successful (%2) - Изнасянето в %1 е успешно (%2) + Експортиране в %1 успешно (%2) Export to %1 - Изнасяне в %1 + Експортиране в %1 TagModel - - Clear Search - Изчистване на търсенето - - - All Entries - Всички записи - Expired Изтекла давност @@ -10117,6 +8690,14 @@ This option is deprecated, use --set-key-file instead. Weak Passwords Слаби пароли + + All Entries + Всички записи + + + Clear Search + Изчистване на търсенето + TagView @@ -10130,11 +8711,11 @@ This option is deprecated, use --set-key-file instead. Confirm Remove Tag - Потвърждаване на премахване на етикет + Потвърждаване на премахването на етикета Remove tag "%1" from all entries in this database? - Премахване на етикета „%1“ от всички записи в хранилището? + Премахване на етикет „%1“ от всички записи? @@ -10149,7 +8730,7 @@ This option is deprecated, use --set-key-file instead. Expires in <b>%n</b> second(s) - Давността изтича след <b>%n</b> секундаДавността изтича след <b>%n</b> секунди + Изтича след <b>%n</b> секундаИзтича след <b>%n</b> секунди @@ -10161,11 +8742,11 @@ This option is deprecated, use --set-key-file instead. NOTE: These TOTP settings are custom and may not work with other authenticators. TOTP QR code dialog warning - Забележка: тези настройки на TOTP са потребителски и може да не работят с други удостоверители. + Забележка: тези TOTP настройки са по избор и може да не работи с други удостоверители. There was an error creating the QR code. - Грешка при създаване на кода за QR. + Възникна грешка при създаването на QR кода. Closing in %1 seconds. @@ -10184,11 +8765,11 @@ This option is deprecated, use --set-key-file instead. Secret key must be in Base32 format - Тайният ключ трябва да бъде във формат Base32 + Таен ключ трябва да е в Base32 Secret key field - Поле на таен ключ + Поле на секретен ключ Default settings (RFC 6238) @@ -10212,16 +8793,16 @@ This option is deprecated, use --set-key-file instead. Time step: - Стъпка: + Времва стъпка: Time step field - Поле за стъпка в секунди + Поле за времева стъпка sec Seconds - сек + сек Code size: @@ -10229,7 +8810,7 @@ This option is deprecated, use --set-key-file instead. digits - цифри + цифри Invalid TOTP Secret @@ -10238,30 +8819,30 @@ This option is deprecated, use --set-key-file instead. You have entered an invalid secret key. The key must be in Base32 format. Example: JBSWY3DPEHPK3PXP - Въвели сте неприемлив таен ключ. Ключът трябва да е във формат Base32. + Въвели сте невалиден секретен ключ. Ключът трябва да е във формат Base32. Пример: JBSWY3DPEHPK3PXP Confirm Remove TOTP Settings - Потвърдете премахването на настройки за TOTP + Потвърдете премахването на TOTP настройките Are you sure you want to delete TOTP settings for this entry? - Желаете ли настройките за TOTP за този запис да бъдат премахнати? + Наистина ли искате да изтриете настройките на TOTP за този запис? URLEdit Invalid URL - Недействителен адрес + Невалиден URL UpdateCheckDialog Checking for updates - Проверка за обновяване + Проверка за актуализации Checking for updates… @@ -10273,15 +8854,15 @@ Example: JBSWY3DPEHPK3PXP Software Update - Обновяване на софтуер + Софтуерно актуализиране An error occurred when trying to retrieve update information, please try again later. - Възникна грешка при получаване на информацията за обновяване, опитайте отново по-късно. + <strong>A new version is available.</strong><br/>KeePassXC %1 can be <a href="https://keepassxc.org/download/">downloaded here</a>. - <strong>Налично е ново издание.</strong><br/>KeePassXC %1 може да бъде <a href="https://keepassxc.org/download/">изтеглен от тук</a>. + You have the latest version of KeePassXC @@ -10292,61 +8873,100 @@ Example: JBSWY3DPEHPK3PXP WelcomeWidget Start storing your passwords securely in a KeePassXC database - Дръжте паролите си защитени в хранилище на KeePassXC + Започнете да съхранявате паролите си сигурно в KeePassXC базата данни + + + Create new database + Създаване на нова база данни + + + Open existing database + Отваряне на съществуващата база данни + + + Import from KeePass 1 + Внос от KeePass 1 + + + Import from 1Password + Импортиране от 1Password + + + Import from CSV + Импортиране от CSV Recent databases - Последно използвани хранилища + Скорошни бази данни Open a recent database - Отваряне на последно използвано хранилище + Отваряне на скорошна база данни Welcome to KeePassXC %1 Добре дошли в KeePassXC %1 - - Create Database - Създава хранилище - - - Open Database - Отваря хранилище - - - Import File - Внасяне от файл - WinUtils Invalid key code - Неприемлив код на клавиш + Неправилен ключ Global shortcut already registered to %1 - Тази клавишна комбинация се използва за %1 + Could not register global shortcut - Грешка при задаване на клавишна комбинация + Неуспешно задаване на общ бърз клавиш. + + + + WindowsHello + + Failed to init KeePassXC crypto. + + + + Failed to encrypt key data. + Неуспешно шифриране на данните на ключа. + + + Failed to get Windows Hello credential. + Неуспешно получаване на потребителски данни за Windows Hello + + + Failed to decrypt key data. + Неуспешно дешифриране на данните на ключа. YubiKey + + %1 No interface, slot %2 + + General: Основни: Could not find interface for hardware key with serial number %1. Please connect it to continue. - Не е намерен интерфейс за хардуерен ключ със сериен номер %1. За да продължите го вържете. + YubiKeyEditWidget + + Refresh hardware tokens + Обновяване на хардуерни токени + + + Refresh + Обновяване + Hardware key slot selection Избор на слот на хардуерен ключ @@ -10357,27 +8977,31 @@ Example: JBSWY3DPEHPK3PXP Selected hardware key slot does not support challenge-response! - Избраната позиция за хардуерен ключ не поддържа предизвикване-отговор! + Избраният слот на хардуерния ключ не поддържа challenge-response! Challenge-Response - Предизвикване-отговор + Add Challenge-Response - Добавяне на предизвикване-отговор + Change Challenge-Response - Променяне на предизвикване-отговор + Remove Challenge-Response - Премахване на предизвикване-отговор + Challenge-Response set, click to change or remove - Зададено е предизвикване-отговор, щракнете за промяна или премахване + + + + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + <p>Ако разполагате с<a href="https://www.yubico.com/">YubiKey</a> или <a href="https://onlykey.io">OnlyKey</a>ключ, може да го използвате като допълнително ниво на защита.</p><p>За това, едно от местата трябва да е зададено като <a href="https://www.yubico.com/products/services-software/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> Detecting hardware keys… @@ -10387,55 +9011,43 @@ Example: JBSWY3DPEHPK3PXP No hardware keys detected Не са открити хардуерни ключове + + + YubiKeyInterface - Refresh hardware keys - Презареждане на хардуерните ключове - - - <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed with <a href="https://keepassxc.org/docs/#faq-yubikey-howto">Challenge-Response</a>.</p> - <p>Ако разполагате със защитно устройство като <a href="https://www.yubico.com/">YubiKey</a> или <a href="https://onlykey.io">OnlyKey</a>, можете да го използвате като допълнителна защита.</p><p>За целта, една от позициите на ключа трябва да е настроена като <a href="https://keepassxc.org/docs/#faq-yubikey-howto">Предизвикване-отговор</a>.</p> - - - Hardware keys found, but no slots are configured - Открити са хардуерни ключове, но без настроени слотове. + %1 Invalid slot specified - %2 + %1 Невалиден слот -% 2 YubiKeyInterfacePCSC + + (PCSC) %1 [%2] Challenge-Response - Slot %3 + + The YubiKey PCSC interface has not been initialized. - Интерфейсът за PCSC на YubiKey не е подготвен. + YubiKey PCSC интерфейсът не е зареден. + + + Hardware key is currently in use. + Хардуерният ключ в момента се използва. Could not find or access hardware key with serial number %1. Please present it to continue. - Не е намерен хардуерен или няма достъп до ключ със сериен № %1. За да продължите добавете ключа. + Не е намерен хардуерен ключ за достъп със сериен номер %1. Моля, въведете го, за да продължите. Hardware key is locked or timed out. Unlock or re-present it to continue. - Хардуерният ключ е заключен или времето за изчакване е изтекло. За да продължите го отключете или го добавете повторно. + Hardware key was not found or is not configured. - Хардуерният ключ не е намерен или не е настроен. + Failed to complete a challenge-response, the PCSC error code was: %1 - Грешка при завършване на предизвикване-отговор, кодът за грешка на PCSC е: %1 - - - (NFC) %1 [%2] - Slot %3, %4 - YubiKey display fields - (NFC) %1 [%2] - Позиция %3, %4 - - - Press - USB Challenge-Response Key interaction request - Натиснете - - - Passive - USB Challenge-Response Key no interaction required - Пасивно + @@ -10444,6 +9056,14 @@ Example: JBSWY3DPEHPK3PXP Unknown Неизвестен + + (USB) %1 [%2] Configured Slot - %3 + + + + (USB) %1 [%2] Challenge-Response - Slot %3 - %4 + + Press USB Challenge-Response Key interaction request @@ -10452,37 +9072,31 @@ Example: JBSWY3DPEHPK3PXP Passive USB Challenge-Response Key no interaction required - Пасивно + Пасивни The YubiKey USB interface has not been initialized. - Интерфейсът за USB на YubiKey не е подготвен. + YubiKey интерфейсът не е зареден. + + + Hardware key is currently in use. + Хардуерният ключ в момента се използва. Could not find hardware key with serial number %1. Please plug it in to continue. - Хардуерен ключ със сериен № %1 не е намерен. За да продължите добавете ключа. + Не може да се намери хардуерен ключ със сериен номер %1. Включете го, за да продължите. Hardware key timed out waiting for user interaction. - Времето за изчакване на потребителско действие с хардуерен ключ е изтекло. + Времето за изчакване на потребителя с хардуерния ключ изтече. A USB error occurred when accessing the hardware key: %1 - Грешка с USB при достъпване на хардуерен ключ: %1 + Грешка с USB при изискване на достъп до хардуерния ключ:: %1 Failed to complete a challenge-response, the specific error was: %1 - Грешка при завършване на предизвикване-отговор, точната грешка е: %1 - - - %1 [%2] - Slot %3 - YubiKey NEO display fields - %1 [%2] - Позиция %3 - - - %1 [%2] - Slot %3, %4 - YubiKey display fields - %1 [%2] - Позиция %3, %4 + \ No newline at end of file diff --git a/share/translations/keepassxc_ca.ts b/share/translations/keepassxc_ca.ts index 8d2a094c2..99519a99e 100644 --- a/share/translations/keepassxc_ca.ts +++ b/share/translations/keepassxc_ca.ts @@ -11,7 +11,7 @@ Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> - Reporteu errors a: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> + Informeu d'errors 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. @@ -50,7 +50,7 @@ AccessControlDialog KeePassXC - Access Request - + KeePassXC - Sol·licitud d'accés Non-existing/inaccessible executable path. Please double-check the client is legit. @@ -78,7 +78,7 @@ Details - + Detalls Remember @@ -94,18 +94,18 @@ Deny All && Future - + Denegar-ho tot & Futur Allow All && &Future - + Permet-ho tot & Futur AccessControlDialog::DenyButton Deny for this program - + Denega per a aquest programa @@ -116,7 +116,7 @@ Use Pageant - + Usa Pageant Use OpenSSH @@ -124,7 +124,7 @@ SSH_AUTH_SOCK override - + SSH_AUTH_SOCK override SSH_AUTH_SOCK value @@ -140,7 +140,7 @@ SSH_SK_PROVIDER override - + SSH_SK_PROVIDER override No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. @@ -150,12 +150,16 @@ SSH Agent connection is working! + + Use both agents + Usa ambdós agents + ApplicationSettingsWidget Application Settings - Configuració de l'aplicació + Paràmetres de l'aplicació General @@ -221,6 +225,10 @@ Select backup storage directory + + This setting cannot be enabled when minimize on unlock is enabled. + + ApplicationSettingsWidgetGeneral @@ -270,12 +278,12 @@ On database unlock, show entries that - + Al desbloquejar la base de dades, mostra les entrades que have expired On database unlock, show entries that... - + ha caducat days @@ -406,7 +414,7 @@ Use monospaced font for notes - Usa lletra monoespaiada per a les notes + Fer servir fonts monoespaiada per les notes Minimize instead of app exit @@ -489,6 +497,14 @@ Remember last typed entry for: + + recent files + fitxers recents + + + Show passwords in color + + ApplicationSettingsWidgetSecurity @@ -587,7 +603,7 @@ Auto-Type Error - + Error de tecleig automàtic Permission Required @@ -603,7 +619,7 @@ Invalid entry provided - + Entrada proporcionada no vàlida Bracket imbalance detected, found extra { or } @@ -638,6 +654,10 @@ Invalid placeholder: %1 + + Entry does not have attribute for PICKCHARS: %1 + + AutoTypeAssociationsModel @@ -685,7 +705,7 @@ Sequence aborted: Caps Lock is on - + Seqüència avortada: el bloqueig de majúscules està activat Sequence aborted: Modifier keys held by user @@ -717,11 +737,11 @@ Ctrl+4 - Use Virtual Keyboard (Windows Only)</p> Search all open databases - + Cerca totes les bases de dades obertes Search… - + Cerca... Type Sequence @@ -745,19 +765,19 @@ Ctrl+4 - Use Virtual Keyboard (Windows Only)</p> Copy Username - + Copia el nom d'usuari Copy Password - + Copia la contrasenya Copy TOTP - + Copia TOTP Use Virtual Keyboard - + Utilitza el teclat virtual @@ -784,11 +804,11 @@ Ctrl+4 - Use Virtual Keyboard (Windows Only)</p> Allow Selected - Permet els seleccionats + Permet la selecció Deny All - Denega-ho tot + Denegar tot Disable for this site @@ -1075,7 +1095,7 @@ Would you like to migrate your existing settings now? Browse… Button for opening file dialog - + Explora... Use a custom browser configuration location: @@ -1409,10 +1429,6 @@ Còpia de seguretat de la base de dades situada a %2 Key File: Fitxer clau: - - <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information…</p> - - Key file help @@ -1425,18 +1441,13 @@ Còpia de seguretat de la base de dades situada a %2 Hardware Key: Motxilla: - - <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> -<p>Click for more information…</p> - - Hardware key help Ajuda de la motxilla Key file to unlock the database - + Fitxer clau per desbloquejar la base de dades Browse for key file @@ -1444,7 +1455,7 @@ Còpia de seguretat de la base de dades situada a %2 Browse… - + Explora... Refresh hardware tokens @@ -1456,7 +1467,7 @@ Còpia de seguretat de la base de dades situada a %2 Unlock Database - + Desbloqueja la base de dades Cancel @@ -1464,7 +1475,7 @@ Còpia de seguretat de la base de dades situada a %2 Unlock - + Desbloqueja Please present or touch your YubiKey to continue… @@ -1490,7 +1501,7 @@ We recommend you update your KeePassXC installation. Database unlock canceled. - + Desbloqueig de la base de dades cancel·lat. Unlock failed and no password given @@ -1564,6 +1575,15 @@ If you do not have a key file, please leave the field empty. Select hardware key… + + <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information…</p> + + + + <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +<p>Click for more information…</p> + + DatabaseSettingWidgetMetaData @@ -1588,7 +1608,7 @@ If you do not have a key file, please leave the field empty. Database Credentials - + Credencials de la base de dades Encryption Settings @@ -1643,7 +1663,7 @@ If you do not have a key file, please leave the field empty. Remove - Suprimeix + Suprimiu Delete the selected key? @@ -2203,13 +2223,21 @@ This is definitely a bug, please report it to the developers. Database tab name modifier %1 [bloquejat] + + Export database to XML file + + + + XML file + + + + Writing the XML file failed + + DatabaseWidget - - Database Tags - - Searching… @@ -2256,7 +2284,7 @@ This is definitely a bug, please report it to the developers. Expired entries - + Entrades caducades No current database. @@ -2376,6 +2404,22 @@ Voleu deshabilitar el desat segur i provar-ho un altre cop? Entries expiring within %1 day(s) + + Searches and Tags + + + + Enter a unique name or overwrite an existing search from the list: + + + + Save + Desa + + + Save Search + + EditEntryWidget @@ -2512,10 +2556,6 @@ Would you like to correct it? Hide Oculta - - Tomorrow - Demà - %n week(s) % n setmana/es%n setmana/es @@ -2528,6 +2568,10 @@ Would you like to correct it? %n year(s) % n any/s%n any/s + + %n hour(s) + + EditEntryWidgetAdvanced @@ -2915,7 +2959,7 @@ Would you like to correct it? Browse… Button for opening file dialog - + Explora... Attachment @@ -3043,6 +3087,14 @@ Would you like to correct it? Do not use HTTP Auth toggle for this and sub groups + + Omit WWW subdomain from matching: + + + + Omit WWW subdomain from matching toggle for this and sub groups + + EditGroupWidgetKeeShare @@ -3076,7 +3128,7 @@ Would you like to correct it? Browse… - + Explora... Clear fields @@ -3624,6 +3676,10 @@ Error: %1 Auto-Type Compleció automàtica + + Tags + + EntryModel @@ -3730,14 +3786,14 @@ Error: %1 Has TOTP - + Disposa de TOTP EntryPreviewWidget Display current TOTP value - + Mostra el valor actual de TOTP Close @@ -3831,6 +3887,10 @@ Error: %1 Disabled Inhabilitat + + Double click to copy value + + EntryURLModel @@ -4748,7 +4808,7 @@ If this reoccurs, then your database file may be corrupt. Note: Do NOT use a file that may change as that will prevent you from unlocking your database. - + Nota: NO utilitzeu un fitxer que pugui canviar, ja que us impedirà desbloquejar la base de dades. Browse for key file @@ -4756,7 +4816,7 @@ If this reoccurs, then your database file may be corrupt. Browse… - + Explora... Old key file format @@ -5000,7 +5060,7 @@ Are you sure you want to continue with this file? Database &Reports… - + Informes de la base de dades Statistics, health check, etc. @@ -5072,11 +5132,11 @@ Are you sure you want to continue with this file? &Lock Database - + B&loqueja la base de dades Lock &All Databases - + Bloqueja totes les bases de dades &Title @@ -5140,11 +5200,11 @@ Are you sure you want to continue with this file? Show QR Code - + Mostra el codi QR Set up TOTP… - + Configura el TOTP... Copy &TOTP @@ -5192,7 +5252,7 @@ Are you sure you want to continue with this file? Save Database Backup… - + Desa una còpia de seguretat... Add key to SSH Agent @@ -5216,11 +5276,11 @@ Are you sure you want to continue with this file? Dark - + Fosc Classic (Platform-native) - + Clàssic (natiu de la plataforma) Show Toolbar @@ -5314,6 +5374,30 @@ We recommend you use the AppImage available on our downloads page. You must restart the application to apply this setting. Would you like to restart now? + + Tags + + + + No Tags + + + + %1 Entry(s) + + + + Copy Password and TOTP + Copia la contrasenya i el TOTP + + + &XML File… + + + + XML File… + + ManageDatabase @@ -5463,7 +5547,7 @@ We recommend you use the AppImage available on our downloads page. NewDatabaseWizardPageDatabaseKey Database Credentials - + Credencials de la base de dades A set of credentials known only to you that protects your database. @@ -5684,29 +5768,6 @@ We recommend you use the AppImage available on our downloads page. - - PasswordEdit - - Passwords do not match - - - - Passwords match so far - - - - Toggle Password (%1) - - - - Generate Password (%1) - - - - Warning: Caps Lock enabled! - - - PasswordEditWidget @@ -5885,10 +5946,6 @@ We recommend you use the AppImage available on our downloads page. Also choose from: - - Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" - - Exclude look-alike characters Excloure caràcters d'aspecte semblant @@ -6038,6 +6095,57 @@ Do you want to overwrite it? Password quality Excel·lent + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + + + + + PasswordWidget + + Passwords do not match + + + + Passwords match so far + + + + Toggle Password (%1) + + + + Generate Password (%1) + + + + Warning: Caps Lock enabled! + + + + Quality: %1 + + + + Poor + Password quality + Pobre + + + Weak + Password quality + Feble + + + Good + Password quality + Bona + + + Excellent + Password quality + Excel·lent + PickcharsDialog @@ -6382,7 +6490,7 @@ Do you want to overwrite it? Copy the current TOTP to the clipboard (equivalent to "-a totp"). - + Copia el TOTP actual al porta-retalls (equivalent a "-a totp"). Must match only one entry, otherwise a list of possible matches is shown. @@ -6419,11 +6527,11 @@ Do you want to overwrite it? ERROR: Please specify one of --attribute or --totp, not both. - + ERROR: Especifiqueu un, --atribut o --totp, no tots dos. Entry with path %1 has no TOTP set up. - + L'entrada amb la ruta %1 no té configurat TOTP. ERROR: attribute %1 is ambiguous, it matches %2. @@ -7095,7 +7203,7 @@ Available commands: Show the entry's current TOTP. - + Mostra el TOTP actual de l'entrada. Show the protected attributes in clear text. @@ -7168,10 +7276,6 @@ Please consider generating a new key file. Invalid YubiKey serial %1 - - Please present or touch your YubiKey to continue… - - Enter password to encrypt database (optional): @@ -7319,7 +7423,7 @@ Nucli: %3 %4 Quick Unlock - + Desbloqueig ràpid Secret Service Integration @@ -7545,11 +7649,11 @@ Nucli: %3 %4 Browser Statistics - + Estadístiques del navegador Health Check - + Informe de salut HIBP @@ -7557,7 +7661,7 @@ Nucli: %3 %4 Statistics - + Estadístiques Unsupported key file version: %1 @@ -7589,7 +7693,7 @@ Nucli: %3 %4 lock all open databases - + bloqueja totes les bases de dades obertes key file of the database @@ -7605,11 +7709,11 @@ Nucli: %3 %4 Locked databases. - + Bases de dades bloquejades. Database failed to lock. - + La base de dades no s'ha pogut bloquejar. Another instance of KeePassXC is already running. @@ -7649,6 +7753,67 @@ Nucli: %3 %4 Failed to sign challenge using Windows Hello. + + Please present or touch your YubiKey to continue. + + + + Show all the attributes of the entry. + + + + Edit a database. + + + + Could not change the database key. + + + + Database was not modified. + + + + Successfully edited the database. + + + + Loading the new key file failed: %1 + + + + Unset the password for the database. + + + + Unset the key file for the database. + + + + Cannot use %1 and %2 at the same time. + + + + Cannot remove all the keys from a database. + + + + Cannot remove password: The database does not have a password. + + + + Cannot remove file key: The database does not have a file key. + + + + Found unexpected Key type %1 + + + + Set the key file for the database. +This options is deprecated, use --set-key-file instead. + + QtIOCompressor @@ -8196,6 +8361,10 @@ Nucli: %3 %4 Limit search to selected group Limitar la cerca al grup seleccionat + + Save Search + + SettingsClientModel @@ -8408,16 +8577,39 @@ Nucli: %3 %4 TagModel - - All - - Expired - + Caducades Weak Passwords + Contrasenyes febles + + + All Entries + + + + Clear Search + + + + + TagView + + Remove Search + + + + Remove Tag + + + + Confirm Remove Tag + + + + Remove tag "%1" from all entries in this database? @@ -8449,7 +8641,7 @@ Nucli: %3 %4 There was an error creating the QR code. - + Hi hagut un error creant el codi QR Closing in %1 seconds. @@ -8517,7 +8709,7 @@ Nucli: %3 %4 Invalid TOTP Secret - + Secret de TOTP no vàlid You have entered an invalid secret key. The key must be in Base32 format. @@ -8526,7 +8718,7 @@ Example: JBSWY3DPEHPK3PXP Confirm Remove TOTP Settings - + Confirma l'eliminació de la configuració de TOTP Are you sure you want to delete TOTP settings for this entry? diff --git a/share/translations/keepassxc_cs.ts b/share/translations/keepassxc_cs.ts index a594c8eb2..2a4e41840 100644 --- a/share/translations/keepassxc_cs.ts +++ b/share/translations/keepassxc_cs.ts @@ -80,10 +80,6 @@ Details Podrobnosti - - Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. - Vaše rozhodnutí bude zapamatováno po dobu chodu jak požadujícího klienta A KeePassXC. - Remember Zapamatovat @@ -92,6 +88,10 @@ Allow Selected Povolit vybrané + + Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. + Vaše rozhodnutí bude zapamatováno po dobu chodu jak požadujícího klienta A KeePassXC. + Deny All && Future Zamítnout vše a jakékoli budoucí @@ -122,10 +122,6 @@ Use OpenSSH Použít OpenSSH - - Use both agents - Použít oba agenty - SSH_AUTH_SOCK override přepsání SSH_AUTH_SOCK @@ -154,6 +150,10 @@ SSH Agent connection is working! Spojení s SSH agentem funguje! + + Use both agents + Použít oba agenty + ApplicationSettingsWidget @@ -169,10 +169,6 @@ Security Zabezpečení - - This setting cannot be enabled when minimize on unlock is enabled. - Nastavení nemůže být povoleno, pokud je povoleno minimalizování okna při odemčení databáze. - Access error for config file %1 Chyba přístupu k souboru s nastaveními %1 @@ -217,48 +213,20 @@ You must restart the application to set the new language. Would you like to restart now? Aby se změna jazyka projevila, je třeba aplikaci restartovat. Chcete to provést nyní? + + Reset Settings? + Vrátit nastavení do výchozích hodnot? + + + Are you sure you want to reset all general and security settings to default? + Opravdu chcete vrátit veškerá obecná nastavení a nastavení zabezpečení do výchozích hodnot? + Select backup storage directory Vybrat složku pro ukládání záloh - Confirm Reset - - - - Are you sure you want to reset all settings to default? - - - - Import KeePassXC Settings - - - - Failed to import settings from %1, not a valid settings file. - - - - Export KeePassXC Settings - - - - Small - - - - Normal - - - - Medium - - - - Large - - - - Custom + This setting cannot be enabled when minimize on unlock is enabled. @@ -292,10 +260,6 @@ Remember previously used databases Pamatovat si minule použité databáze - - recent files - nedávné soubory - Load previously open databases on startup Při spuštění načíst minule otevřené databáze @@ -312,6 +276,25 @@ Include beta releases when checking for updates Při zjišťování případných aktualizací brát v potaz i vývojové testovací verze + + On database unlock, show entries that + Při odemknutí databáze zobrazovat položky kterým + + + have expired + On database unlock, show entries that... + platnost skončila + + + days + On database unlock, show entries that will expire within %1 days + dnů + + + will expire within + On database unlock, show entries that... + skončí platnost za + File Management Správa souboru @@ -336,13 +319,25 @@ Backup database file before saving Před uložením zazálohovat databázový soubor + + Backup destination + Cíl zálohy + + + Specifies the database backup file location. Occurrences of "{DB_FILENAME}" are replaced with the filename of the saved database without extension. {TIME:<format>} is replaced with the backup time, see https://doc.qt.io/qt-5/qdatetime.html#toString. <format> defaults to format string "dd_MM_yyyy_hh-mm-ss". + + {DB_FILENAME}.old.kdbx {NAZEV_SOUBOR_S_DB}.stare.kdbx + + Choose... + Zvolit + Use alternative saving method (may solve problems with Dropbox, Google Drive, GVFS, etc.) - Použít alternativní metodu ukládání (může vyřešit problémy s se službami Dropbox, Google Drive, vrstvami typu GVFS, atp.) + Použít alternativní metodu ukládání (může vyřešit problémy s se službami Dropbox, Google Drive, vrstvami typu GVFS, atd.) Temporary file moved into place @@ -417,10 +412,6 @@ Toolbar button style: Styl tlačítek na liště nástrojů: - - Show passwords in color - Zobrazit hesla barevně - Use monospaced font for notes Pro poznámky použít písmo se všemi znaky stejně širokými @@ -507,68 +498,11 @@ Pamatovat si naposledy zadanou položku po dobu: - On database unlock, show entries that will expire within + recent files - On database unlock, show entries that will expire within - - - - days - number of days warning for password expiration - dnů - - - Destination format: - - - - <html><head/><body><p><span style=" font-weight:600;">{DB_FILENAME}</span> is replaced with the filename of the saved database without extension</p><p><span style=" font-weight:600;">{TIME:&lt;format&gt;}</span> is replaced with the specified time format (default: dd_MM_yyyy_hh-mm-ss)</p><p>See the User Guide for more details</p></body></html> - - - - Choose folder... - - - - Show confirmation before moving entries to recycle bin - - - - Copy data on double clicking field in entry view - - - - Show toolbar - Zobrazovat lištu nástrojů - - - Show the menu bar by pressing the Alt key - - - - Show menubar - - - - Import settings… - - - - Export settings… - - - - Open browser on double clicking URL field in entry view - - - - Font size: - - - - Font size selection + Show passwords in color @@ -624,6 +558,10 @@ Lock databases after minimizing the window Při minimalizaci okna uzamknout databáze + + Require password repeat when it is visible + Vyžadovat zopakování zadání hesla, i když je viditelné, + Hide passwords when editing them Skrývat hesla při jejich upravování @@ -636,6 +574,18 @@ 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 + + + Move entries to recycle bin without confirmation + Přesunout záznamy do Koše? + + + Enable double click to copy the username/password entry columns + Zapnout kopírování dvojklikem na sloupce s uživatelským jménem / heslem + Privacy Soukromí @@ -646,18 +596,6 @@ Hide TOTP in the entry preview panel - Skrýt TOTP v panelu náhledu položky - - - Lock databases when switching user - - - - Lock Options - - - - Hide notes in the entry preview panel @@ -704,13 +642,27 @@ Zjištěna velmi dlouhá prodleva, nejdelší umožněná je %1: %2 - Entry does not have attribute for PICKCHARS: %1 - Záznam nemá atribut pro PICKCHARS: %1 + Invalid conversion type: %1 + Neplatný typ převodu: %1 + + + Invalid conversion syntax: %1 + Neplatná syntaxe převodu: %1 + + + Invalid regular expression syntax %1 +%2 + Neplatná forma zápisu regulárního výrahu %1 +%2 Invalid placeholder: %1 Neplatná výplň: %1 + + Entry does not have attribute for PICKCHARS: %1 + Záznam nemá atribut pro PICKCHARS: %1 + AutoTypeAssociationsModel @@ -752,6 +704,10 @@ AutoTypePlatformX11 + + Trying to send invalid keysym. + Pokus o odeslání neplatného symbolu klávesy. + Sequence aborted: Caps Lock is on Posloupnost přerušena: je zapnutý Caps Lock @@ -764,10 +720,6 @@ Unable to get valid keycode for key: Nedaří se získat platný kód klávesy pro klávesu: - - Trying to send invalid keyboard symbol. - Pokus o odeslání neplatného symbolu. - AutoTypeSelectDialog @@ -867,13 +819,13 @@ Ctrl+4 - Use Virtual Keyboard (Windows Only)</p> Disable for this site Vypnout pro tuto stránku - - Undo - - BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + KeePassXC-Browser Uložit položku + Ok Ok @@ -888,74 +840,13 @@ 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. - - KeePassXC - Select Database - - - - - BrowserPasskeysConfirmationDialog - - Cancel - Zrušit - - - Update - - - - Authenticate - Ověřit - - - Register new - Zaregistrovat nové - - - Register - Registrovat - - - Timeout in <b>%n</b> seconds... - Časový limit v <b>%n</b> sekundách...Časový limit v <b>%n</b> sekundách...Časový limit v <b>%n</b> sekundách...Časový limit vyprší za <b>%n</b> sekundy... - - - Relying Party: %1 - - - - Username: %1 - Uživatelské jméno: %1 - - - KeePassXC - Passkey credentials - - - - Add to existing entry - - - - Existing passkey found. -Do you want to register a new passkey for: - Byl nalezen existující přístupový klíč. -Chcete uložit nový přístupový klíč pro: - - - Select the existing passkey and press Update to replace it. - Vyberte existující přístupový klíč a stisknutím Aktualizovat jej nahraďte. - - - Authenticate passkey credentials for: - - - - Do you want to register a passkey for: - Chcete uložit přístupový klíč pro: - BrowserService + + KeePassXC: Create a new group + KeePassXC: vytvořit novou skupinu + A request for creating a new group "%1" has been received. Do you want to create this group? @@ -964,6 +855,10 @@ Do you want to create this group? Chcete tuto skupinu vytvořit? + + KeePassXC: New key association request + KeePassXC: Nový požadavek na přiřazení klíče + You have received an association request for the following database: %1 @@ -980,16 +875,28 @@ chrome-laptop. Save and allow access Uložit a umožnit přístup + + KeePassXC: Overwrite existing key? + KeePassXC: Přepsat stávající klíč? + A shared encryption key with the name "%1" already exists. Do you want to overwrite it? Sdílený šifrovací klíč nazvaný „%1“ už existuje. Přejete si ho přepsat? + + KeePassXC: Update Entry + KeePassXC: Aktualizovat záznam + Do you want to update the information in %1 - %2? Chcete aktualizovat údaj v %1 – %2? + + KeePassXC: Delete entry + KeePassXC: Smazat položku + A request for deleting entry "%1" has been received. Do you want to delete the entry? @@ -999,58 +906,50 @@ Opravdu chcete tuto položku smazat? - %1 (Passkey) - + Converting attributes to custom data… + Převádění atributů na uživatelsky určená data… - KeePassXC - Create a new group - KeePassXC - Vytvořit novou skupinu - + Abort + Přerušit - Disable - Vypnout + KeePassXC: Converted KeePassHTTP attributes + KeePassXC: Převedené KeePassHTTP atributy - KeePassXC - Overwrite existing key? - + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + Úspěšně převedeny atributy z %1 položek. +Přesunuto %2 klíčů do uživatelsky určených dat. + + + Successfully moved %n keys to custom data. + %n klíč úspěšně přesunut do uživatelsky určených dat.%n klíče úspěšně přesunuty do uživatelsky určených dat.%n klíčů úspěšně přesunuto do uživatelsky určených dat.%n klíčy úspěšně přesunuty do uživatelsky určených dat. - KeePassXC - Update Entry - + KeePassXC: No entry with KeePassHTTP attributes found! + KeePassXC: Nenalezena žádná položka, která má KeePassHTTP atributy! - KeePassXC - Delete entry - + The active database does not contain an entry with KeePassHTTP attributes. + Právě otevřená databáze neobsahuje žádnou položku s atributy KeePassHTTP. - KeePassXC - New key association request - + Don't show this warning again + Toto varování znovu nezobrazovat - Passkey - + KeePassXC: Legacy browser integration settings detected + KeePassXC: zjištěna nastavení starého napojení na webový prohlížeč - KeePassXC - Passkey credentials - - - - Register a new passkey to this entry: - - - - KeePassXC - Update passkey - - - - Entry already has a passkey. -Do you want to overwrite the passkey in %1 - %2? - - - - Register - Registrovat + 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? + Vaše nastavení KeePassXC-Browser je třeba přesunout do nastavení databáze. +Toto je nezbytné pro zachování vašich stávajících spojení prohlížeče. +Chcete přenést vaše stávající nastavení nyní? @@ -1071,6 +970,10 @@ Do you want to overwrite the passkey in %1 - %2? General Obecné + + Browsers installed as snaps are currently not supported. + Prohlížeče, nainstalované formou snap balíčků, zatím nejsou podporované. + Enable integration for these browsers: Zapnout propojení pro tyto prohlížeče: @@ -1242,6 +1145,26 @@ Do you want to overwrite the passkey in %1 - %2? Custom extension ID Identif. uživatelsky určeného rozšíření + + Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 + Z důvodu, že software ze Snap balíčku je provozován v ohraničeném prostředí, je třeba spustit skript, který zapíná napojení na webový prohlížeč. <br />Tento skript je možné získat z %1 + + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 + Aby fungovalo napojení na prohlížeč, je třeba KeePassXC. <br /> Stáhnete ho pro %1 a %2 a %3. %4 + + + Please see special instructions for browser extension use below + Níže si přečtěte konkrétní pokyny pro rozšíření do webového prohlížeče + + + <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. + <b>Chyba:</b> Uživatelsky určené umístění proxy nenalezeno! <br/>Napojení na prohlížeč NEBUDE bez proxy FUNGOVAT. + + + <b>Warning:</b> The following options can be dangerous! + <b>Varování:</b> Následující předvolby mohou být nebezpečné! + Executable Files Spustitelné soubory @@ -1258,46 +1181,6 @@ Do you want to overwrite the passkey in %1 - %2? Select native messaging host folder location Vyberte umístění složky hostitele nativních zpráv - - Allow keepassxc-proxy to list all entries with their title, URL and UUID in connected databases. - - - - Allow limited access to all entries in connected databases (ignores site access restrictions) - - - - <b>Warning:</b> Only adjust these settings if necessary. - - - - The custom proxy location does not exist. - - - - <b>Error:</b> The custom proxy location does not exist. Correct this in the advanced settings tab. - - - - <b>Error:</b> The installed proxy executable is missing from the expected location: %1<br/>Please set a custom proxy location in the advanced settings or reinstall the application. - - - - Allows using insecure http://localhost with passkeys for testing purposes. - - - - Allow using localhost with passkeys - - - - KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. - - - - Browsers installed using Snap or Flatpak are not supported with exception to Firefox installed using Snap. - - CloneDialog @@ -1320,6 +1203,14 @@ Do you want to overwrite the passkey in %1 - %2? CsvImportWidget + + Import CSV fields + Importovat CSV kolonky + + + filename + název souboru + size, rows, columns velikost, řádky, sloupce @@ -1428,42 +1319,50 @@ Do you want to overwrite the passkey in %1 - %2? Column %1 Sloupec %1 + + Imported from CSV file + Importováno z CSV souboru + + + Original data: + Původní data: + + + Error(s) detected in CSV file! + V CSV soubory byly zjištěny chyby! + [%n more message(s) skipped] [%n další zpráva přeskočena][%n další zprávy přeskočeny][%n dalších zpráv přeskočeno][%n další zprávy přeskočeny] - Failed to parse CSV file: %1 - + Error + Chyba - Imported from CSV file: %1 - - - - No Title Selected - - - - No title column was selected, entries will be hard to tell apart. -Are you sure you want to import? - - - - Tags - Štítky + CSV import: writer has errors: +%1 + CSV import: chyby zápisu: +%1 CsvParserModel + + %1, %2, %3 + file info: bytes, rows, columns + %1, %2, %3 + + + %n byte(s) + %n bajt%n bajty%n bajtů%n bajty + %n row(s) - CSV row count %n řádek%n řádky%n řádků%n řádky %n column(s) - CSV column count %n sloupec%n sloupce%n sloupců%n sloupce @@ -1516,14 +1415,6 @@ Záložní databáze se nachází v %2 Recycle Bin Koš - - Database file read error. - - - - No file path was provided. - - DatabaseOpenDialog @@ -1546,10 +1437,30 @@ Záložní databáze se nachází v %2 Password field Kolonka pro heslo + + Enter Additional Credentials (if any): + Zadejte další přihlašovací údaje (pokud jsou): + + + Key File: + Soubor s klíčem: + + + Key file help + Nápověda k souboru s klíčem + Hardware key slot selection Výběr slotu v hardwarovém klíči + + Hardware Key: + Hardwarový klíč: + + + Hardware key help + Nápověda k hardwarovému klíči + Key file to unlock the database Soubor s klíčem k odemknutí databáze @@ -1562,6 +1473,14 @@ Záložní databáze se nachází v %2 Browse… Procházet… + + Refresh hardware tokens + Znovu načíst hardwarová bezpečnostní zařízení + + + Refresh + Načíst znovu + Unlock Database Odemknout databázi @@ -1622,6 +1541,10 @@ Abyste tomu, aby se tato chyba objevovala, je třeba přejít do „Nastavení d Retry with empty password Zkusit znovu bez hesla + + Failed to authenticate with Touch ID + Nepodařilo se ověřit se prostřednictvím Touch ID + Failed to open key file: %1 Nepodařilo se otevřít soubor s klíčem: %1 @@ -1632,7 +1555,7 @@ Abyste tomu, aby se tato chyba objevovala, je třeba přejít do „Nastavení d You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database &gt; Database Security &gt; Change Key File.</strong><br> - Používáte starý formát souboru s klíčem, který může KeePassXC<br>přestat v budoucnu podporovat.<br><br>Zvažte prosím vytvoření nového souboru s klíčem v nabídce:<br><strong>Databáze &gt; Zabezpečení databáze &gt; Změnit soubor s klíčem.</strong><br> + Don't show this warning again @@ -1654,68 +1577,39 @@ Abyste tomu, aby se tato chyba objevovala, je třeba přejít do „Nastavení d Cannot use database file as key file Soubor s databází není možné použít pro účely souboru s klíčem (mění se) + + You cannot use your database file as a key file. +If you do not have a key file, please leave the field empty. + Soubor s databází není možné použít pro účely souboru s klíčem (bude se měnit). +Pokud nemáte žádný soubor, který by se zaručeně neměnil (a byl tedy vhodný jako klíč), tuto kolonku nevyplňujte. + + + Detecting hardware keys… + Zjišťování hardwarových klíčů… + + + No hardware keys detected + Nenalezeny žádné hardwarové klíče + + + Select hardware key… + Vyberte hardwarový klíč… + + + <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information…</p> + + + + <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +<p>Click for more information…</p> + + authenticate to access the database - pro přístup k databázi se autentizujte - - - Failed to authenticate with Quick Unlock: %1 - Select Key File: - Vyberte soubor klíče: - - - <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!</p> - - - - Use hardware key [Serial: %1] - Použít hardwarový klíč [Serial: %1] - - - Use hardware key - Použít hardwarový klíč - - - Your database file is NOT a key file! -If you don't have a key file or don't know what that is, you don't have to select one. - Váš databázový soubor NENÍ klíčový soubor! -Pokud nemáte klíčový soubor nebo nevíte, co to je, nemusíte ho vybrat. - - - KeePassXC database file selected - Vybraný databázový soubor KeePassXC - - - The file you selected looks like a database file. -A database file is NOT a key file! - -Are you sure you want to continue with this file?. - Soubor, který jste vybrali, vypadá jako databázový soubor. -Databázový soubor NENÍ klíčový soubor! - -Opravdu chcete pokračovat s tímto souborem?. - - - No hardware keys found. - Nebyly nalezeny žádné hardwarové klíče. - - - Refresh Hardware Keys - Aktualizace hardwarových klíčů - - - Click to add a key file. - - - - <a href="#" style="text-decoration: underline">I have a key file</a> - <a href="#" style="text-decoration: underline">Mám klíčový soubor</a> - - - Hardware keys found, but no slots are configured. + Failed to authenticate with Windows Hello: %1 @@ -1728,6 +1622,10 @@ Opravdu chcete pokračovat s tímto souborem?. DatabaseSettingsDialog + + Advanced Settings + Pokročilá nastavení + General Obecné @@ -1752,22 +1650,6 @@ Opravdu chcete pokračovat s tímto souborem?. Maintenance Údržba - - KeeShare - KeeShare - - - Secret Service Integration - Zapnout napojení na Secret Service - - - Remote Sync - - - - Database Settings: %1 - - DatabaseSettingsWidgetBrowser @@ -1775,6 +1657,18 @@ Opravdu chcete pokračovat s tímto souborem?. KeePassXC-Browser settings Nastavení pro KeePassXC-Browser + + Convert KeePassHTTP data + Převést KeePassHTTP data + + + Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data + Převést původní KeePassHTTP atributy do kompatibilních uživatelsky určených dat v KeePassXC-Browser + + + Refresh database root group ID + Znovu vytvořit identifikátor kořenové skupiny databáze + Disconnect all browsers Odpojit veškeré prohlížeče @@ -1783,10 +1677,6 @@ Opravdu chcete pokračovat s tímto souborem?. Forget all site-specific settings on entries Zapomenout v položkách veškerá nastavení specifická pro daný web - - Refresh database root group ID - Znovu vytvořit identifikátor kořenové skupiny databáze - Stored keys Uložené klíče @@ -1835,10 +1725,18 @@ This may prevent connection to the browser plugin. Opravdu chcete odpojit všechny prohlížeče? To může zabránit spojení se zásuvným modulem prohlížeče. + + KeePassXC: No keys found + KeePassXC: Nebyly nalezeny žádné klíče + No shared encryption keys found in KeePassXC settings. V nastavení KeePassXC nenalezeny žádné sdílené šifrovací klíče. + + KeePassXC: Removed keys from database + KeePassXC: Klíče odebrány z databáze + Successfully removed %n encryption key(s) from KeePassXC settings. Z nastavení KeePassXC úspěšně odebrán %n šifrovací klíč.Z nastavení KeePassXC úspěšně odebrány %n šifrovací klíče.Z nastavení KeePassXC úspěšně odebráno %n šifrovacích klíčů.Z nastavení KeePassXC úspěšně odebrány %n šifrovací klíče. @@ -1857,14 +1755,31 @@ Oprávnění pro přístup k položkám budou odvolána. 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 convert all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + + Refresh database ID Znovu vytvořit identifikátor databáze @@ -1875,26 +1790,6 @@ This is only necessary if your database is a copy of another and the browser ext Opravdu chcete znovu vytvořit identifikátor databáze? Toto je nutné pouze v případě, že vaše databáze je kopií jiné a nefunguje propojení s rozšířením prohlížeče. - - Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data - Převést původní KeePassHTTP atributy do kompatibilních uživatelsky určených dat v KeePassXC-Browser - - - No keys found - Nebyly nalezeny žádné klíče - - - Removed keys from database - Odstraněné klíče z databáze - - - Removed permissions - - - - No entry with permissions found! - Nebyl nalezen žádný záznam s oprávnění! - DatabaseSettingsWidgetDatabaseKey @@ -1934,18 +1829,6 @@ Opravdu chcete pokračovat bez hesla? Failed to change database credentials Nepodařilo se změnit přihlašovací údaje do databáze - - Weak password - Slabé heslo - - - This is a weak password! For better protection of your secrets, you should choose a stronger password. - - - - The provided password does not meet the minimum quality requirement. - - DatabaseSettingsWidgetEncryption @@ -1953,6 +1836,14 @@ Opravdu chcete pokračovat bez hesla? Decryption Time: Doba, kterou rozšifrování trvalo: + + Change existing decryption time + Změnit existující čas rozšifrování + + + Change + Změnit + Decryption time in seconds Doba rozšifrování (v sekundách) @@ -2033,6 +1924,11 @@ Opravdu chcete pokračovat bez hesla? KDBX 3 KDBX 3 + + unchanged + Database decryption time is unchanged + nezměněno + Number of rounds too high Key transformation rounds @@ -2085,18 +1981,6 @@ Pokud tento počet ponecháte, vaše databáze nebude chráněna před útoky zk Threads for parallel execution (KDF settings) vláknovláknavlákenvlákna - - Encryption Settings: - - - - Basic - Základní - - - Advanced - Pokročilé - DatabaseSettingsWidgetFdoSecrets @@ -2153,7 +2037,7 @@ Pokud tento počet ponecháte, vaše databáze nebude chráněna před útoky zk Maximum number of history items per entry - Nejvyšší umožněný počet položek historie pro jednotlivé záznamy + Nejvyšší umožněný počet historických záznamů pro jednotlivé záznamy Maximum size of history per entry @@ -2198,7 +2082,7 @@ of entries remain at most. Limit the amount of history items per entry to: - Omezit počet historických položek záznamu na: + When saving this setting or editing an entry @@ -2209,7 +2093,7 @@ add up to the specified amount at most. Limit the total size of history items per entry to: - Omezit celkovou velikost historických položek záznamu na: + Move entries to a recycle bin group @@ -2218,70 +2102,6 @@ Entries deleted from the recycle bin are removed from the database. - - Autosave delay since last change - - - - Autosave delay - - - - Autosave delay since last change in minutes - - - - min - min - - - Autosave delay since last change checkbox - - - - Public Database Metadata - - - - Warning: the following settings are not encrypted. - - - - Display name: - - - - Publically visible display name used on the unlock dialog - - - - Database public display name - - - - Display color: - - - - Publically visible color used on the unlock dialog - - - - Database public display color chooser - - - - Clear - Vyčistit - - - Display icon: - - - - Select Database Icon - - DatabaseSettingsWidgetKeeShare @@ -2355,7 +2175,7 @@ removed from the database. Purged %n icon(s) from the database. - %n ikona odstraněna z databáze.%n ikony odstraněny z databáze.%n ikon odstraněno z databáze.%n ikony odstraněny z databáze. + @@ -2377,129 +2197,6 @@ removed from the database. Kolonka popis databáze - - DatabaseSettingsWidgetRemote - - Sync Commands - - - - Remove - Odebrat - - - Command Settings - - - - Name - Název - - - Save - Uložit - - - Download - - - - Command: - - - - Download command field - - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - - - - Input: - - - - Download input field - - - - Upload - - - - Upload command field - - - - e.g.: "sftp user@hostname" or "scp {TEMP_DATABASE} user@hostname:DatabaseOnRemote.kdbx" - - - - Upload input field - - - - Name cannot be empty. - - - - Test - - - - Download command cannot be empty. - - - - Download failed with error: %1 - - - - Download finished, but file %1 could not be found. - - - - Download successful. - - - - Save Remote Settings - - - - You have unsaved changes. Do you want to save them? - - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - - - - e.g.: -put {TEMP_DATABASE} DatabaseOnRemote.kdbx -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - - - - Timeout: - - - - seconds - sekund - - DatabaseTabWidget @@ -2532,10 +2229,26 @@ Toto je nepochybně chyba, nahlaste ji prosím vývojářům. CSV file CSV soubor + + Select CSV file + Vyberte CSV soubor + Merge database Sloučit databáze + + KeePass 1 database + Databáze ve formátu KeePass verze 1 + + + Open KeePass 1 database + Otevřít databázi ve formátu KeePass verze 1 + + + Open OPVault + Otevřít OPVault + Export database to CSV file Exportovat databázi do CSV souboru @@ -2548,6 +2261,28 @@ Toto je nepochybně chyba, nahlaste ji prosím vývojářům. Writing the HTML file failed. Zápis do HTML souboru se nezdařil. + + Export Confirmation + Potvrzení exportu + + + You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? + Chystáte se exportovat svou databázi do nešifrovaného souboru. To zanechá vaše hesla a citlivé informace zranitelné. Opravdu to chcete? + + + New Database + Nová databáze + + + %1 [New Database] + Database tab name modifier + %1 [nová databáze] + + + %1 [Locked] + Database tab name modifier + %1 [uzamčeno] + Export database to XML file Exportovat databázi do XML souboru @@ -2560,31 +2295,9 @@ Toto je nepochybně chyba, nahlaste ji prosím vývojářům. Writing the XML file failed Zápis do XML souboru se nezdařil. - - Export Confirmation - Potvrzení exportu - - - You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? - Chystáte se exportovat svou databázi do nešifrovaného souboru. To zanechá vaše hesla a citlivé informace zranitelné. Opravdu to chcete? - - - %1 [Locked] - Database tab name modifier - %1 [uzamčeno] - - - %1 [Temporary] - Database tab name modifier - - DatabaseWidget - - Searches and Tags - Hledání a štítky - Searching… Vyhledávání @@ -2633,10 +2346,6 @@ Toto je nepochybně chyba, nahlaste ji prosím vývojářům. Expired entries Položky kterým skončila platnost - - Entries expiring within %1 day(s) - Záznamy, kterým platnost skončí v rámci %1 dneZáznamy, kterým platnost skončí v rámci %1 dnůZáznamy, kterým platnost skončí v rámci %1 dníZáznamy, kterým platnost skončí v rámci %1 dne/í - No current database. Žádná nedávná databáze. @@ -2661,18 +2370,6 @@ Toto je nepochybně chyba, nahlaste ji prosím vývojářům. No Results Nic nenalezeno - - Save - Uložit - - - Enter a unique name or overwrite an existing search from the list: - - - - Save Search - Uložit hledání - Lock Database? Uzamknout databázi? @@ -2701,6 +2398,26 @@ Uložit změny? File has changed Soubor byl změněn + + The database file has changed. Do you want to load the changes? + Soubor s databází byl změněn. Načíst změny? + + + Merge Request + Požadavek na sloučení + + + The database file has changed and you have unsaved changes. +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 zahrnout? + + + 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 + Disable safe saves? Vypnout bezpečná ukládání? @@ -2743,94 +2460,25 @@ Vypnout bezpečné ukládání a zkusit to znovu? Could not find database file: %1 Nedaří se nalézt soubor s databází: %1 - - New Database - Nová databáze + + Entries expiring within %1 day(s) + Položky kterým platnost skončí v rámci %1 dnePoložky kterým platnost skončí v rámci %1 dnůPoložky kterým platnost skončí v rámci %1 dnůPoložky kterým platnost skončí v rámci %1 dnů - %1 [New Database] - Database tab name modifier - %1 [nová databáze] + Searches and Tags + Vyhledávání a štítky - Remote Sync did not contain any download or upload commands. + Enter a unique name or overwrite an existing search from the list: - Remote sync '%1' completed successfully! - + Save + Uložit - Remote sync '%1' failed: %2 - - - - Error while saving database %1: %2 - - - - Downloading... - Stahování… - - - Uploading... - - - - Syncing... - - - - Remove passkey from entry - - - - Do you want to remove the passkey from this entry? - - - - The database file "%1" was modified externally - - - - Do you want to load the changes? - - - - Reload database - - - - Reloading database… - - - - Reload canceled - - - - Reload successful - - - - Reload pending user action… - - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes<br>Ignore the changes on disk until save<br>Discard unsaved changes - - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes then save<br>Overwrite the changes on disk<br>Discard unsaved changes - - - - Database file overwritten. - - - - Database file on disk cannot be unlocked with current credentials.<br>Enter new credentials and/or present hardware key to continue. - + Save Search + Uložit hledání @@ -2883,6 +2531,10 @@ Vypnout bezpečné ukládání a zkusit to znovu? n/a neaplikovatelné + + (encrypted) + (šifrováno) + Select private key Vybrat soukromou část klíče @@ -2929,9 +2581,7 @@ Chcete to opravit? An error occurred while validating the Auto-Type sequence for "%1": %2 Would you like to correct it? - Došlo k chybě při ověřování posloupnosti automatického vyplňování pro "%1": -%2 -Chcete ji opravit? + Entry updated successfully. @@ -2969,10 +2619,6 @@ Chcete ji opravit? Hide Skrýt - - %n hour(s) - %n hodina%n hodiny%n hodin%n hodiny - %n week(s) %n týden%n týdny%n týdnů%n týdny @@ -2985,9 +2631,9 @@ Chcete ji opravit? %n year(s) %n rok%n roky%n let%n roky - - Failed to decrypt SSH key, ensure password is correct. - + + %n hour(s) + %n hodina%n hodiny%n hodin%n hodiny @@ -3107,20 +2753,10 @@ Chcete ji opravit? Add new window association Přidat nové přiřazení k oknu - - + - Add item - + - Remove selected window association Odebrat označené přiřazení k oknu - - - - Remove item - - - Window title: Titulek okna: @@ -3145,9 +2781,23 @@ Chcete ji opravit? Custom Auto-Type sequence for this window Uživatelsky určená posloupnost automatického vyplňování pro toto okno + + + + Add item + + + + + - + Remove item + - + EditEntryWidgetBrowser + + These settings affect to the entry's behaviour with the browser extension. + Tato nastavení ovlivní chování záznamu pro rozšíření pro webový prohlížeč. + General Obecné @@ -3160,14 +2810,26 @@ Chcete ji opravit? Skip Auto-Submit for this entry Přeskočit automatické odeslání pro tento záznam + + Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. + Toto nastavení posílat do prohlížeče pouze pro dialogy HTTP Auth. Pokud je zapnuto, běžné přihlašovací formuláře nezobrazí tuto položku pro výběr. + Use this entry only with HTTP Basic Auth Tuto položku použít pouze ve spojení se základním HTTP ověřováním se + + Do not send this setting to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. + + Do not use this entry with HTTP Basic Auth Tuto položku nepoužívat ve spojení se základním HTTP ověřováním se + + Additional URL's + Další URL adresy + Add Přidat @@ -3180,22 +2842,6 @@ Chcete ji opravit? Edit Upravit - - These settings affect the entry's behaviour with the browser extension. - - - - Additional URLs - - - - Only send this entry to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. - - - - Do not send this entry to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. - - EditEntryWidgetHistory @@ -3240,7 +2886,7 @@ Chcete ji opravit? EditEntryWidgetMain Edit Entry - Upravit záznam + Upravit položku Notes field @@ -3292,35 +2938,35 @@ Chcete ji opravit? &Username: - &Uživatelské jméno: + &Title: - &Titulek: + &Password: - &Heslo: + UR&L: - UR&L adresa: + &Notes: - &Poznámky: + Toggle notes visibility - Zobraz./nezobrazovat poznámky + T&ags: - Š&títky: + &Expires: - &Platnost skončí: + @@ -3361,6 +3007,19 @@ Chcete ji opravit? Private key Soukromá část klíče + + External file + Vnější soubor + + + Browser for key file + Nalistovat soubor s klíčem + + + Browse… + Button for opening file dialog + Procházet… + Attachment Příloha @@ -3377,23 +3036,6 @@ Chcete ji opravit? Remove from agent Odebrat z agenta - - External file - Vnější soubor - - - Browser for key file - Nalistovat soubor s klíčem - - - Browse… - Button for opening file dialog - Procházet… - - - Generate - Tvoř - Select attachment file Vybrat soubor, který přiložit @@ -3418,10 +3060,6 @@ Chcete ji opravit? seconds sekund - - Clear agent - - EditGroupWidget @@ -3433,6 +3071,10 @@ Chcete ji opravit? Icon Ikona + + Browser Integration + Napojení webového prohlížeče + Properties Vlastnosti @@ -3449,10 +3091,6 @@ Chcete ji opravit? Group has unsaved changes Ve skupině jsou neuložené změny - - Browser Integration - Napojení na webový prohlížeč - Enable Zapnout @@ -3512,14 +3150,6 @@ Chcete ji opravit? Omit WWW subdomain from matching toggle for this and sub groups - - Restrict matching to given browser key: - - - - Restrict matching to given browser key toggle for this and sub groups - - EditGroupWidgetKeeShare @@ -3752,6 +3382,10 @@ Podporovaná rozšíření jsou: %1. Unable to fetch favicon. Ikonu webu (favicon) se nedaří stáhnout. + + You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security + Používání služby DuckDuckGo pro stahování ikon webových stránek je možné zapnout v Nástroje → Nastavení → Zabezpečení + Existing icon selected. Vybrána existující ikona. @@ -3784,10 +3418,6 @@ Podporovaná rozšíření jsou: %1. 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: - - You can enable the DuckDuckGo website icon service under Application Settings -> Security - - EditWidgetProperties @@ -3864,24 +3494,6 @@ Dotčený zásuvný modul to může rozbít. %1 - Clone %1 – klon - - Passkey - - - - Invalid conversion type: %1 - Neplatný typ převodu: %1 - - - Invalid conversion syntax: %1 - Neplatná syntaxe převodu: %1 - - - Invalid regular expression syntax %1 -%2 - Neplatná forma zápisu regulárního výrahu %1 -%2 - EntryAttachments @@ -3890,21 +3502,6 @@ Dotčený zásuvný modul to může rozbít. Soubor „%1 se nedaří otevřít. - - EntryAttachmentsDialog - - Form - Formulář - - - File name - - - - File contents... - - - EntryAttachmentsModel @@ -3942,6 +3539,14 @@ Dotčený zásuvný modul to může rozbít. Remove Odebrat + + Rename selected attachment + Přejmenovat označenou přílohu + + + Rename + Přejmenovat + Open selected attachment Otevřít označenou přílohu @@ -4019,6 +3624,12 @@ Dotčený zásuvný modul to může rozbít. Confirm Overwrite Attachment Potvrdit přepsání přílohy + + Attachment "%1" already exists. +Would you like to overwrite the existing attachment? + Příloha „%1“ už existuje. +Chcete stávající přílohu přepsat? + Confirm Attachment Potvrdit přílohu @@ -4053,24 +3664,6 @@ Error: %1 Ukládání aktualizované přílohy se nezdařilo. Chyba: %1 - - Attachment "%1" already exists. -Would you like to overwrite the existing attachment? - Příloha „%1“ už existuje. -Chcete stávající přílohu přepsat? - - - New - - - - Preview - Náhled - - - Failed to preview an attachment: Attachment not found - - EntryAttributesModel @@ -4265,14 +3858,6 @@ Chcete stávající přílohu přepsat? Has TOTP Má TOTP heslo - - Background Color - - - - Group Path - - EntryPreviewWidget @@ -4293,8 +3878,8 @@ Chcete stávající přílohu přepsat? Heslo - URL - URL adresa + Notes + Poznámky Expiration @@ -4313,8 +3898,8 @@ Chcete stávající přílohu přepsat? Uživatelské jméno - Notes - Poznámky + URL + URL adresa Advanced @@ -4364,10 +3949,6 @@ Chcete stávající přílohu přepsat? Never Nikdy - - Double click to copy value - Hodnotu zkopírujete dvojklikem - Enabled Zapnuto @@ -4377,8 +3958,8 @@ Chcete stávající přílohu přepsat? Vypnuto - Double click to copy to clipboard - + Double click to copy value + Hodnotu zkopírujete dvojklikem @@ -4387,10 +3968,6 @@ Chcete stávající přílohu přepsat? Invalid URL Neplatné URL - - Duplicate URL - - EntryView @@ -4406,10 +3983,6 @@ Chcete stávající přílohu přepsat? Reset to defaults Vrátit na výchozí - - + %1 entry(s)... - - ExportDialog @@ -4425,9 +3998,7 @@ Chcete stávající přílohu přepsat? You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! - Chystáte se exportovat vaši databázi do nešifrovaného souboru. -Vaše hesla a citlivé údaje tak budou zranitelné! - + database order @@ -4631,193 +4202,6 @@ Můžete zapnout službu pro stahování ikon z DuckDuckGo v sekci zabezpečení Stahování ikon webů (%1/%2)… - - ImportWizard - - Import Wizard - - - - - ImportWizardPageReview - - WizardPage - Stránka průvodce - - - Entry count: %1 - - - - Group - Skupina - - - Title - Titulek - - - Username - Uživatelské jméno - - - Password - Heslo - - - Url - - - - Could not load key file. - - - - Could not open remote database. Password or key file may be incorrect. - - - - - ImportWizardPageSelect - - Form - Formulář - - - Import File Selection - - - - Password: - Heslo: - - - Key File: - Soubor s klíčem: - - - Browse… - Procházet… - - - Import Into: - - - - New Database - Nová databáze - - - No unlocked databases available - - - - Existing Database: - - - - Import File: - - - - Comma Separated Values (.csv) - - - - 1Password Export (.1pux) - - - - 1Password Vault (.opvault) - - - - Bitwarden (.json) - - - - KeePass 1 Database (.kdb) - - - - Open OPVault - Otevřít OPVault - - - Select import file - - - - All files - Veškeré soubory - - - Key files - Soubory s klíči - - - Select key file - Vyberte soubor s klíčem - - - Comma Separated Values - - - - 1Password Export - - - - Bitwarden JSON Export - - - - 1Password Vault - - - - KeePass1 Database - - - - Proton Pass (.json) - - - - Proton Pass JSON Export - - - - Temporary Database - - - - Command: - - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - - - - Input: - - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last commend `exit` has to be sent - - - - - Remote Database (.kdbx) - - - KMessageWidget @@ -4962,17 +4346,17 @@ Pokud se toto opakuje, pak je možné, že je váš soubor s databází poškoze Invalid variant map entry name length Translation: variant map = data structure for storing meta data - Neplatná délka názvu záznamu mapy varianty + Neplatná délka názvu položky mapy varianty Invalid variant map entry name data Translation: variant map = data structure for storing meta data - Neplatná data názvu záznamu mapy varianty + Neplatná data názvu položky mapy varianty Invalid variant map entry value length Translation: variant map = data structure for storing meta data - Neplatná délka hodnoty záznamu mapy varianty + Neplatná délka hodnoty položky mapy varianty Invalid variant map entry value data @@ -4992,22 +4376,22 @@ Pokud se toto opakuje, pak je možné, že je váš soubor s databází poškoze Invalid variant map UInt32 entry value length Translation: variant map = data structure for storing meta data - Neplatná délka 32 bitové kladné celočíselné hodnoty záznamu varianty + Neplatná délka 32 bitové kladné celočíselné hodnoty položky varianty Invalid variant map Int64 entry value length Translation: variant map = data structure for storing meta data - Neplatná délka 64 bitové celočíselné hodnoty záznamu varianty + Neplatná délka 64 bitové celočíselné hodnoty položky varianty Invalid variant map UInt64 entry value length Translation: variant map = data structure for storing meta data - Neplatná délka 64 bitové kladné celočíselné hodnoty záznamu varianty + Neplatná délka 64 bitové kladné celočíselné hodnoty položky varianty Invalid variant map entry type Translation: variant map = data structure for storing meta data - Neplatný typ záznamu mapy varianty + Neplatný typ položky mapy varianty Invalid variant map field type size @@ -5091,10 +4475,7 @@ Pokud se toto opakuje, pak je možné, že je váš soubor s databází poškoze 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. - Zvolený soubor je databáze ve starém formátu KeePass 1 (.kdb). - -Můžete ho importovat kliknutím na Databáze > 'Importovat databázi ve formátu KeePass 1…'. -Jedná se o jednosměrný převod. Databázi, vzniklou z importu, nepůjde otevřít ve staré verzi KeePassX 0.4. + Not a KeePass database. @@ -5165,7 +4546,7 @@ Line %2, column %3 Null entry uuid - Prázdný neopakující se identifikátor záznamu + Prázdný neopakující se identifikátor Invalid entry icon number @@ -5177,7 +4558,7 @@ Line %2, column %3 No entry uuid found - Nenalezen žádný neopakující se identifikátor záznamu + Nebyl nalezen žádný neopakující se identifikátor položky History element with different uuid @@ -5189,11 +4570,11 @@ Line %2, column %3 Entry string key or value missing - Chybí klíč nebo hodnota řetězce záznamu + Chybí klíč nebo hodnota řetězce položky Entry binary key or value missing - Chybí binární klíč nebo hodnota daného záznamu + Chybí binární klíč nebo hodnota položky Auto-type association window or sequence missing @@ -5252,6 +4633,17 @@ Line %2, column %3 Nepodařilo se otevřít soukromou část klíče + + KeePass1OpenWidget + + Import KeePass1 Database + Importovat databázi ve formátu KeePass1 + + + Unable to open the database. + Databázi se nedaří otevřít. + + KeePass1Reader @@ -5608,6 +5000,10 @@ Opravdu chcete tento soubor použít? &Recent Databases &Nedávno otevřené databáze + + &Import + &Importovat + &Export &Export @@ -5628,10 +5024,6 @@ Opravdu chcete tento soubor použít? TOTP TOTP - - Tags - Štítky - &Groups Skupiny @@ -5676,18 +5068,34 @@ Opravdu chcete tento soubor použít? &New Database… &Nová databáze… + + Create a new database + Vytvořit novou databázi + &Merge From Database… &Sloučit z databáze… + + Merge from another KDBX database + Sloučit z jiné KDBX databáze + &New Entry… &Nový záznam… + + Add a new entry + Přidat nový záznam + &Edit Entry… &Upravit záznam… + + View or edit entry + Zobrazit nebo upravit položku + &Delete Entry… Smazat záznam… @@ -5696,6 +5104,10 @@ Opravdu chcete tento soubor použít? &New Group… &Nová skupina… + + Add a new group + Přidat novou skupinu + &Edit Group… Upravit skupinu… @@ -5728,10 +5140,18 @@ Opravdu chcete tento soubor použít? Database &Reports… Hlášení o &databázi… + + Statistics, health check, etc. + Statistiky, kontrola stavu atd. + &Database Settings… Nastavení &databáze… + + Database settings + Nastavení databáze + &Clone Entry… Klonovat záznam… @@ -5740,18 +5160,34 @@ Opravdu chcete tento soubor použít? Move u&p &Přesunout nahoru + + Move entry one step up + Přesunout položku o pozici výše + Move do&wn Přesunout dolů + + Move entry one step down + Přesunout položku o pozici níže + Copy &Username Zkopírovat &uživatelské jméno + + Copy username to clipboard + Zkopírovat uživatelské jméno do schránky + Copy &Password Zko&pírovat heslo + + Copy password to clipboard + Zkopírovat heslo do schránky + &Settings Na&stavení @@ -5785,13 +5221,21 @@ Opravdu chcete tento soubor použít? &Titulek - Copy &URL - Zkopírovat &URL adresu + Copy title to clipboard + Zkopírovat titulek do schránky + + + Copy URL to clipboard + Zkopírovat URL adresu do schránky &Notes Poz&námky + + Copy notes to clipboard + Zkopírovat poznámky do schránky + &CSV File… &CSV soubor… @@ -5804,14 +5248,26 @@ Opravdu chcete tento soubor použít? KeePass 1 Database… Databáze ve formátu KeePass verze 1… + + Import a KeePass 1 database + Importovat databázi aplikace KeePass verze 1 + 1Password Vault… 1Password trezor… + + Import a 1Password Vault + Importovat 1Password trezor + CSV File… CSV soubor… + + Import a CSV file + Importovat CSV soubor + Show TOTP Zobrazit na času založené jednorázové heslo (TOTP) @@ -5828,10 +5284,6 @@ Opravdu chcete tento soubor použít? Copy &TOTP Zkopírovat &TOTP - - Copy Password and TOTP - Zkopírovat heslo a TOTP - E&mpty recycle bin &Vysypat koš @@ -5856,6 +5308,10 @@ Opravdu chcete tento soubor použít? &Online Help Náp&ověda na webu + + Go to online documentation + Přejít na dokumentaci na webu + &User Guide &Uživatelská příručka @@ -5900,10 +5356,6 @@ Opravdu chcete tento soubor použít? Classic (Platform-native) Klasické (nativní pro danou platformu) - - Show Menubar - - Show Toolbar Zobrazovat lištu nástrojů @@ -5928,10 +5380,6 @@ Opravdu chcete tento soubor použít? Clone Group... Klonovat skupinu - - &XML File… - &XML soubor… - Clear history Vyčistit historii @@ -5959,8 +5407,10 @@ Expect some bugs and minor issues, this version is meant for testing purposes. - No Tags - Bez štítků + 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. Restore Entry(s) @@ -5990,10 +5440,6 @@ Očekávejte chyby a drobné problémy, tato verze je určena pouze pro účely Quit KeePassXC Ukončit KeePassXC - - %1 Entry(s) - %1 záznam%1 záznamy%1 záznamů%1 záznam(ů) - Please present or touch your YubiKey to continue… Pokud chcete pokračovat, připojte váš YubiKey nebo dotkněte se tlačítka na něm… @@ -6006,312 +5452,36 @@ Očekávejte chyby a drobné problémy, tato verze je určena pouze pro účely You must restart the application to apply this setting. Would you like to restart now? Chcete-li toto nastavení použít, musíte restartovat aplikaci. Chcete nyní restartovat? + + Tags + Štítky + + + No Tags + + + + %1 Entry(s) + + + + Copy Password and TOTP + Zkopírovat heslo a TOTP + + + &XML File… + &XML soubor… + + + XML File… + XML soubor… + + + Copy &URL + + Allow Screen Capture - Povolit snímky obrazovky - - - 1Password 1PUX... - - - - Import a 1Password 1PUX file - - - - Import… - - - - Passkeys… - - - - Import Passkey - - - - Remote S&ync… - - - - Quit Application - - - - Open About Dialog - - - - Open Database - Otevřít databázi - - - Create Database - Vytvořit databázi - - - Merge From Database - - - - Create Entry - - - - Edit Entry - Upravit položku - - - Delete Entry - - - - Create Group - - - - Edit Group - Upravit skupinu - - - Delete Group - - - - Download All Favicons - - - - Sort Groups A-Z - - - - Sort Groups Z-A - - - - Save Database As - - - - Show Database Security - - - - Show Database Reports - - - - Show Database Settings - - - - Show Passkeys - - - - Clone Entry - - - - Move Entry Up - - - - Move Entry Down - - - - Copy Username - Zkopírovat uživatelské jméno - - - Copy Password - Zkopírovat heslo - - - Show Application Settings - - - - Show Password Generator - - - - Remove Passkey From Entry - - - - Perform Auto-Type: {USERNAME} - - - - Perform Auto-Type: {USERNAME}{ENTER} - - - - Perform Auto-Type: {PASSWORD} - - - - Perform Auto-Type: {PASSWORD}{ENTER} - - - - Perform Auto-Type: {TOTP} - - - - Copy Title - - - - Copy URL - - - - Copy Notes - - - - Export to CSV - - - - Export to HTML - - - - Import KeePass1 Database - Importovat databázi ve formátu KeePass1 - - - Import 1Password Vault - - - - Import CSV File - - - - Show TOTP QR Code - - - - Set up TOTP - Nastavit TOTP - - - Empty Recycle Bin - - - - Open Donation Website - - - - Open Bug Report - - - - Open Online Documentation - - - - Open Keyboard Shortcuts Guide - - - - Save Database Backup - - - - SSH Agent: Add Key - - - - SSH Agent: Remove Key - - - - Toggle Compact Mode - - - - Set Theme: Automatic - - - - Set Theme: Light - - - - Set Theme: Dark - - - - Set Theme: Classic - - - - Toggle Show Menubar - - - - Toggle Show Toolbar - - - - Toggle Show Preview Panel - - - - Toggle Always on Top - - - - Toggle Hide Usernames - - - - Toggle Hide Passwords - - - - Export to XML - - - - Toggle Allow Screen Capture - - - - Show Group Panel - - - - Toggle Show Group Panel - - - - Setup Remote Sync… - - - - Password Generator - Vytváření hesel - - - E&xpire Entry… - - - - Clear SSH Agent - - - - Clear all identities in ssh-agent @@ -6371,6 +5541,26 @@ Očekávejte chyby a drobné problémy, tato verze je určena pouze pro účely Overwriting %1 [%2] Přepisování %1 [%2] + + older entry merged from database "%1" + starší položka sloučena z databáze „%1“ + + + Adding backup for older target %1 [%2] + Přidávání zálohy pro starší cíl %1 [%2] + + + Adding backup for older source %1 [%2] + Přidávání zálohy pro starší zdroj %1 [%2] + + + Reapplying older target entry on top of newer source %1 [%2] + Znovu se uplatňují původní zdrojové položky nad novějším zdrojem %1 [%2] + + + Reapplying older source entry on top of newer target %1 [%2] + Znovu se uplatňují původní zdrojové položky nad novějším cílem %1 [%2] + Synchronizing from newer source %1 [%2] Synchronizace z novějšího zdroje %1 [%2] @@ -6430,6 +5620,14 @@ Očekávejte chyby a drobné problémy, tato verze je určena pouze pro účely Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. Zde je možné přizpůsobit nastavení šifrování databáze. Nemějte obavy, kdykoli je možné je později změnit v nastavení databáze. + + Advanced Settings + Pokročilá nastavení + + + Simple Settings + Základní nastavení + NewDatabaseWizardPageDatabaseKey @@ -6464,25 +5662,6 @@ Očekávejte chyby a drobné problémy, tato verze je určena pouze pro účely Vyplňte zobrazovaný název a volitelný popis nové databáze: - - NewEntryAttachmentsDialog - - Attachment name cannot be empty - - - - Attachment with the same name already exists - - - - Save attachment - Uložit přílohu - - - New entry attachment - - - NixUtils @@ -6529,6 +5708,15 @@ Očekávejte chyby a drobné problémy, tato verze je určena pouze pro účely Očekáváno %1 bajtů v neformátovaném textu, nalezeno %2 + + OpVaultOpenWidget + + Read Database did not produce an instance +%1 + Čtení databáze nevytvořilo instanci +%1 + + OpVaultReader @@ -6602,10 +5790,6 @@ Očekávejte chyby a drobné problémy, tato verze je určena pouze pro účely Unknown cipher: %1 Neznámá šifra: %1 - - AES-256/GCM is currently not supported - AES-256/GCM není v současné době podporován - Passphrase is required to decrypt this key Pro rozšifrování tohoto klíče je třeba zadat heslovou frázi @@ -6671,178 +5855,7 @@ Očekávejte chyby a drobné problémy, tato verze je určena pouze pro účely Neočekávaný konec souboru při zápisu soukromé části klíče - (encrypted) - (šifrováno) - - - - OpenSSHKeyGenDialog - - SSH Key Generator - Generátor SSH klíče - - - Type - Typ - - - Bits - - - - Comment - Komentář - - - - PasskeyExportDialog - - KeePassXC - Passkey Export - - - - Filenames will be generated with title and .passkey file extension. - - - - Export entries - - - - Export Selected - - - - Cancel - Zrušit - - - Export to folder - - - - Export the following passkey entries. - - - - - PasskeyExporter - - KeePassXC: Passkey Export - - - - File "%1.passkey" already exists. -Do you want to overwrite it? - - - - - Cannot open file - - - - Cannot open file "%1" for writing. - - - - Cannot write to file - - - - - PasskeyImportDialog - - KeePassXC - Passkey Import - - - - Username: %1 - Uživatelské jméno: %1 - - - Group - Skupina - - - Database - Databáze - - - Import Passkey - - - - Import - Importovat - - - Cancel - Zrušit - - - Entry - Záznam - - - Create new entry - - - - Relying Party: %1 - - - - Import the following passkey: - - - - Import the following passkey to this entry: - - - - Default passkeys group (Imported Passkeys) - - - - - PasskeyImporter - - Passkey file - - - - All files - Veškeré soubory - - - Cannot open file - - - - Cannot open file "%1" for reading. - - - - Open passkey file - - - - Cannot import passkey - - - - Cannot import passkey file "%1". Data is missing. - - - - Cannot import passkey file "%1". -The following data is missing: -%2 - - - - Cannot import passkey file "%1". Private key is missing or malformed. + AES-256/GCM is currently not supported @@ -7048,6 +6061,10 @@ The following data is missing: Word Count: Počet slov: + + Character Count: + Počet znaků: + Word Case: Velikost písmen: @@ -7060,6 +6077,10 @@ The following data is missing: Add custom wordlist Přidat uživatelsky určený seznam slov + + character + znak + Close Zavřít @@ -7096,30 +6117,6 @@ The following data is missing: 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á - Confirm Delete Wordlist Potvrdit smazání seznamu slov @@ -7167,20 +6164,32 @@ Chcete ho přepsat? Zvláštní znaky - passwordLength - + Password Quality: %1 + Kvalita hesla: %1 - Characters: %1 - + Poor + Password quality + Velmi slabá - MIXED case - + Weak + Password quality + Slabá - Excluded characters: "0", "1", "l", "I", "O", "|", "﹒", "B", "8", "G", "6" - + Good + Password quality + Dobrá + + + Excellent + Password quality + Výborná + + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + Vynechané znaky: „0“, „1“, „l“, „I“, „O“, „|“, „ . “ @@ -7230,7 +6239,7 @@ Chcete ho přepsat? Výborná - Toggle password visibility using Control + H. Open the password generator using Control + G. + Toggle password visibilty using Control + H. Open the password generator using Control + G. @@ -7249,21 +6258,6 @@ Chcete ho přepsat? Mezi znaky stisknout &tabulátor - - PreviewEntryAttachmentsDialog - - Preview entry attachment - - - - No preview available - - - - Image format not supported - - - QMessageBox @@ -7302,10 +6296,6 @@ Chcete ho přepsat? Continue Pokračovat - - Continue with weak password - - QObject @@ -7395,7 +6385,7 @@ Chcete ho přepsat? URL for the entry. - URL adresa pro záznam. + URL adresa pro položku. URL @@ -7507,7 +6497,7 @@ Chcete ho přepsat? Password for '%1' has been leaked! - Otisk z hesla pro „%1“ je znám! + Otisk z hesla pro „%1“ je veřejně znám! Export an attachment of an entry. @@ -7699,10 +6689,6 @@ Chcete ho přepsat? Too many arguments provided. Zadáno příliš mnoho argumentů. - - Path of the database. - Umístění databáze. - Target decryption time in MS for the database. Cílový čas rozšifrování (v ms) pro databázi. @@ -7723,6 +6709,10 @@ Chcete ho přepsat? Create a new database. Vytvořit novou databázi. + + Path of the database. + Umístění databáze. + Invalid decryption time %1. Neplatný čas rozšifrování %1. @@ -7767,158 +6757,6 @@ Chcete ho přepsat? Successfully created new database. Nová databáze úspěšně vytvořena. - - Unset the password for the database. - Zrušit heslo databáze. - - - Unset the key file for the database. - Zrušit soubor s klíčem pro databázi. - - - Edit a database. - Upravit databázi. - - - Cannot use %1 and %2 at the same time. - Není možné použít %1 a %2 najednou. - - - Could not change the database key. - Nepodařilo se změnit klíč databáze. - - - Database was not modified. - Databáze nebyla upravena. - - - Writing the database failed: %1 - Zápis do databáze se nezdařil: %1 - - - Successfully edited the database. - Databáze úspěšně upravena. - - - Cannot remove password: The database does not have a password. - Není možné odstranit heslo: databáze nemá heslo nastaveno. - - - Cannot remove file key: The database does not have a file key. - Není možné odstranit soubor s klíčem: databáze nemá soubor s klíčem nastaven. - - - Loading the new key file failed: %1 - Načítání nového souboru s klíčem se nezdařilo: %1 - - - Found unexpected Key type %1 - - - - Cannot remove all the keys from a database. - Z databáze není možné odebrat všechny klíče. - - - Show a database's information. - Zobrazit informace o databázi. - - - UUID: - UUID: - - - Name: - Název: - - - Description: - Popis: - - - Cipher: - Šifra: - - - KDF: - KDF: - - - Recycle bin is enabled. - Koš je zapnutý. - - - Recycle bin is not enabled. - Koš není zapnut. - - - Location - Umístění - - - Database created - Databáze vytvořena - - - Last saved - Naposledy uloženo - - - Unsaved changes - Neuložené změny - - - yes - ano - - - no - ne - - - Number of groups - Počet skupin - - - Number of entries - Počet položek - - - Number of expired entries - Počet záznamů, kterým skončila platnost - - - Unique passwords - Hesel, která se neopakují - - - Non-unique passwords - Hesel, které se opakují - - - Maximum password reuse - Kolikrát nejvýše je možné opakovat použití hesla - - - Number of short passwords - Počet krátkých hesel - - - Number of weak passwords - Počet slabých hesel - - - Entries excluded from reports - Položky vynechané z přehledů - - - Average password length - Průměrná délka hesla - - - %1 characters - %1 znaků - Word count for the diceware passphrase. Počet slov pro diceware heslovou frázi. @@ -7942,9 +6780,13 @@ Chcete ho přepsat? Invalid word count %1 Neplatný počet slov %1 + + The word list is too small (< 1000 items) + Seznam slov je příliš krátký (< 1000 položek) + Title for the entry. - Titulek pro záznam. + Titulek pro položku. title @@ -7952,11 +6794,11 @@ Chcete ho přepsat? Edit an entry. - Upravit záznam. + Upravit položku. Path of the entry to edit. - Popis umístění záznamu, který upravit. + Popis umístění položky kterou upravit. Not changing any field for entry %1. @@ -7966,6 +6808,10 @@ Chcete ho přepsat? 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. @@ -8086,6 +6932,10 @@ Chcete ho přepsat? Exit interactive mode. Opustit interaktivní režim. + + Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. + Formát který použít pro export. Možnosti jsou „xml“ nebo „csv“. Výchozí je „xml“. + Exports the content of a database to standard output in the specified format. Exportuje obsah databáze na standardní výstup v zadaném formátu. @@ -8186,6 +7036,106 @@ Chcete ho přepsat? Successfully imported database. Úspěšně naimportovaná databáze. + + Show a database's information. + Zobrazit informace o databázi. + + + UUID: + UUID: + + + Name: + Název: + + + Description: + Popis: + + + Cipher: + Šifra: + + + KDF: + KDF: + + + Recycle bin is enabled. + Koš je zapnutý. + + + Recycle bin is not enabled. + Koš není zapnut. + + + Location + Umístění + + + Database created + Databáze vytvořena + + + Last saved + Naposledy uloženo + + + Unsaved changes + Neuložené změny + + + yes + ano + + + no + ne + + + Number of groups + Počet skupin + + + Number of entries + Počet položek + + + Number of expired entries + Počet záznamů, kterým skončila platnost + + + Unique passwords + Hesel, která se neopakují + + + Non-unique passwords + Hesel, které se opakují + + + Maximum password reuse + Kolikrát nejvýše je možné opakovat použití hesla + + + Number of short passwords + Počet krátkých hesel + + + Number of weak passwords + Počet slabých hesel + + + Entries excluded from reports + Položky vynechané z přehledů + + + Average password length + Průměrná délka hesla + + + %1 characters + %1 znaků + Unknown command %1 Neznámý příkaz %1 @@ -8358,10 +7308,6 @@ Příkazy k dispozici: Show the protected attributes in clear text. Zobrazit chráněné atributy v čitelném textu. - - Show all the attributes of the entry. - Zobrazit všechny atributy záznamu. - Show the attachments of the entry. Zobrazit přílohy položky. @@ -8376,7 +7322,7 @@ Příkazy k dispozici: Show an entry's information. - Zobrazit informace o záznamu. + Zobrazit informace o položce. Name of the entry to show. @@ -8432,10 +7378,6 @@ Zvažte prosím vytvoření nového souboru s klíčem. Invalid YubiKey serial %1 Neplatné sériové číslo %1 YubiKey - - Please present or touch your YubiKey to continue. - Pokud chcete pokračovat, připojte váš YubiKey nebo dotkněte se tlačítka na něm. - Enter password to encrypt database (optional): Zadejte heslo pro zašifrování databáze (volitelné): @@ -8527,7 +7469,7 @@ Zvažte prosím vytvoření nového souboru s klíčem. Password expires in %1 day(s) - Platnost hesla skončí za %1 denPlatnost hesla skončí za %1 dnyPlatnost hesla skončí za %1 dníPlatnost hesla skončí za %1 den/dní + Platnost hesla skončí za %1 denPlatnost hesla skončí za %1 dnyPlatnost hesla skončí za %1 dnůPlatnost hesla skončí za %1 dny Password will expire soon @@ -8601,15 +7543,15 @@ Jádro systému: %3 %4 over %1 year(s) - přes %1 rokpřes %1 rokypřes %1 letpřes %1 roky/let + více než %1 rokvíce než %1 rokyvíce než %1 letvíce než %1 roky about %1 month(s) - přibližně %1 měsícpřibližně %1 měsícepřibližně %1 měsícůpřibližně %1 měsíce/ů + přibližně %1 měsícpřibližně %1 měsícepřibližně %1 měsícůpřibližně %1 měsíce %1 week(s) - %1 týden%1 týdny%n týdnů%1 týdny + %1 týden%1 týdny%1 týdnů%1 týdny %1 day(s) @@ -8625,7 +7567,7 @@ Jádro systému: %3 %4 Botan library must be at least %1, found %2.%3.%4 - Je třeba, aby knihovna botan byla alespoň ve verzi %1, byla nalezena verze %2.%3.%4 + Cryptographic libraries: @@ -8675,6 +7617,18 @@ Jádro systému: %3 %4 file empty soubor je prázdný + + malformed string + špatně formovaný řetězec + + + missing closing quote + chybějící uzavírací uvozovka + + + %1: (row, col) %2,%3 + %1: (řádek, sloupec) %2,%3 + AES 256-bit AES 256-bit @@ -8713,7 +7667,7 @@ Jádro systému: %3 %4 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 sekund(u/y)… + 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… Group @@ -8767,7 +7721,7 @@ Jádro systému: %3 %4 Do you really want to delete %n entry(s) for good? - Opravdu chcete %n položku nevratně smazat?Opravdu chcete %n položky nevratně smazat?Opravdu chcete %n položek nevratně smazat?Opravdu chcete %n položek nevratně smazat? + Delete entry(s)? @@ -8779,11 +7733,11 @@ Jádro systému: %3 %4 Do you really want to move %n entry(s) to the recycle bin? - Opravdu chcete přesunout %n záznam do Koše?Opravdu chcete přesunout %n záznamy do Koše?Opravdu chcete přesunout %n záznamů do Koše?Opravdu chcete přesunout %n záznam(y) do Koše? + Move entry(s) to recycle bin? - Přesunout záznam do Koše?Přesunout záznamy do Koše?Přesunout záznamy do Koše?Přesunout záznamy do Koše? + Přesunout záznam do koše?Přesunout záznamy do koše?Přesunout záznamy do koše?Přesunout záznamy do koše? Replace references to entry? @@ -8791,7 +7745,7 @@ Jádro systému: %3 %4 Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? - Záznam "%1" má %2 odkaz. Chcete odkaz přepsat, přeskočit záznam, nebo smazat i tak?Záznam "%1" má %2 odkazy. Chcete odkazy přepsat, přeskočit záznam, nebo smazat i tak?Záznam "%1" má %2 odkazů. Chcete odkazy přepsat, přeskočit záznam, nebo smazat i tak?Záznam "%1" má %2 odkaz(y). Chcete odkaz(y) přepsat, přeskočit záznam, nebo smazat i tak? + User name @@ -8819,7 +7773,7 @@ Jádro systému: %3 %4 Checksum mismatch! Key file may be corrupt. - Kontrolní součet se neshoduje! Soubor s klíčem může být poškozený. + Kontrolní součet se neshoduje! Soubor s klíčem může být poškozen. Unexpected key file data! Key file may be corrupt. @@ -8853,6 +7807,14 @@ Jádro systému: %3 %4 read password of the database from stdin načíst heslo k databázi ze standardního vstupu + + allow app screen recordering and screenshots + umožnit přeskupování obrazovky aplikace a pořizování snímků obrazovky + + + Locked databases. + Uzamčené databáze. + Database failed to lock. Databázi se nepodařilo uzamknout. @@ -8861,10 +7823,6 @@ Jádro systému: %3 %4 Another instance of KeePassXC is already running. Již je spuštěná jiná instance KeePassXC. - - KeePassXC is not running. No open database to lock - KeePassXC není spuštěn. Není k dispozici otevřená databáze k uzamčení - Fatal error while testing the cryptographic functions. Při zkoušení šifrovacích funkcí byl zjištěn fatální nedostatek. @@ -8897,311 +7855,81 @@ Jádro systému: %3 %4 Warning: Failed to block screenshot capture on a top-level window. - Varování: Nepodařilo se zablokovat snímky obrazovky na nejvrchnějším okně. - - - Invalid Cipher - Neplatná šifra - - - Invalid KDF - Neplatná funkce pro odvození klíče - - - Access to all entries is denied - allow screenshots and app recording (Windows/macOS) + Invalid Cipher + + + + Invalid KDF + + + + Please present or touch your YubiKey to continue. + Pokud chcete pokračovat, připojte váš YubiKey nebo dotkněte se tlačítka na něm. + + + Show all the attributes of the entry. + + + + Edit a database. + Upravit databázi. + + + Could not change the database key. + Nepodařilo se změnit klíč databáze. + + + Database was not modified. + Databáze nebyla upravena. + + + Successfully edited the database. + Databáze úspěšně upravena. + + + Loading the new key file failed: %1 + + + + Unset the password for the database. + Zrušit heslo databáze. + + + Unset the key file for the database. + Zrušit soubor s klíčem pro databázi. + + + Cannot use %1 and %2 at the same time. + + + + Cannot remove all the keys from a database. + + + + Cannot remove password: The database does not have a password. + + + + Cannot remove file key: The database does not have a file key. + + + + Found unexpected Key type %1 Set the key file for the database. -This option is deprecated, use --set-key-file instead. +This options is deprecated, use --set-key-file instead. - Databases have been locked. + KeePassXC is not running. No open database to lock - - Attestation not supported - - - - Credential is excluded - - - - Passkeys request canceled - - - - Invalid user verification - - - - Empty public key - - - - Invalid URL provided - - - - Passkeys - - - - AES initialization failed - - - - AES encrypt failed - - - - Failed to store in Linux Keyring - - - - Polkit returned an error: %1 - - - - Could not locate key in keyring - - - - Could not read key in keyring - - - - AES decrypt failed - - - - No Polkit authentication agent was available - - - - Polkit authorization failed - - - - No Quick Unlock provider is available - - - - Failed to init KeePassXC crypto. - Nepodařilo se inicializovat KeePassXC kryptografii - - - Failed to encrypt key data. - Nepodařilo se zašifrovat data klíče. - - - Failed to get Windows Hello credential. - Nepodařilo se získat Windows Hello přihlašovací údaje. - - - Failed to decrypt key data. - Nepodařilo se rozšifrovat data klíče. - - - Origin is empty or not allowed - - - - Effective domain is not a valid domain - - - - Origin and RP ID do not match - - - - No supported algorithms were provided - - - - Wait for timer to expire - - - - Challenge is shorter than required minimum length - - - - user.id does not match the required length - - - - Favorite - Tag for favorite entries - - - - File does not exist. - - - - Cannot open file: %1 - - - - Cannot parse file: %1 at position %2 - - - - Failed to decrypt json file: %1 - - - - Invalid encKeyValidation field - - - - Invalid cipher list within encKeyValidation field - - - - Wrong password - - - - Invalid encrypted data field - - - - Invalid cipher list within encrypted data field - - - - Cannot initialize cipher - - - - Cannot decrypt data - - - - Bitwarden Import - - - - Archived - Tag for archived entries - - - - Invalid 1PUX file format: Not a valid ZIP file. - - - - Invalid 1PUX file format: Missing export.data - - - - 1Password Import - - - - Enter Shortcut - - - - Action - - - - Shortcuts - - - - Unknown passkeys error - - - - Invalid KDF iterations, cannot decrypt json file - - - - Unsupported format, ensure your Bitwarden export is password-protected - - - - Only PBKDF and Argon2 are supported, cannot decrypt json file - - - - Reset Shortcuts - - - - Double click an action to change its shortcut - - - - Filter... - - - - Shortcut Conflict - - - - Shortcut %1 conflicts with '%2'. Overwrite shortcut? - - - - Cannot generate valid passphrases because the wordlist is too short - - - - Encrypted files are not supported. - - - - Proton Pass Import - - - - Delete plugin data? - Smazat data zásuvného modulu? - - - Delete plugin data from Entry(s)? - - - - Passkey - - - - Format to use when exporting. Available choices are 'xml', 'csv' or 'html'. Defaults to 'xml'. - - - - start minimized to the system tray - - - - malformed string, possible unescaped delimiter - - - - missing closing delimiter - - - - %1, row: %2, column: %3 - - - - Tags - Štítky - QtIOCompressor @@ -9237,39 +7965,20 @@ This option is deprecated, use --set-key-file instead. Vnitřní chyba v knihovně zlib: - - RemoteHandler - - Command `%1` did not finish in time. Process was killed. - - - - Failed to upload merged database. Command `%1` did not finish in time. Process was killed. - - - - Invalid download parameters provided. - - - - Command `%1` failed to download database. - - - - Invalid database pointer or upload parameters provided. - - - - Command `%1` exited with status code: %2 - - - - Failed to upload merged database. Command `%1` exited with status code: %2 - - - ReportsWidgetBrowserStatistics + + Exclude expired entries from the report + Vynechat z výkazu položky, kterým skončila platnost + + + Show only entries which have URL set + Zobrazit pouze položky, které mají vyplněnou URL + + + Show only entries which have browser settings in custom data + Zobrazit pouze ty položky, které mají v uživatelsky určených datech nastavení pro webový prohlížeč + Double-click entries to edit. Položky upravíte dvojklikem na ně. @@ -9328,59 +8037,50 @@ This option is deprecated, use --set-key-file instead. Delete Entry(s)… - Smazat záznam…Smazat záznamy…Smazat záznamy…Smazat záznamy… + Smazat položkuSmazat položkySmazat položkySmazat položky Exclude from reports Vynechat z přehledů - - Expire Entry(s)… - - - - Only show entries that have a URL - - - - Only show entries that have been explicitly allowed or denied - - - - Show expired entries - - - - (Expired) - (Platnost vypršela) - - - Delete plugin data from Entry(s)… - - ReportsWidgetHealthcheck - Show expired entries - + Exclude expired entries from the report + Vynechat z výkazu položky, kterým skončila platnost - (Expired) - (Platnost vypršela) + Also show entries that have been excluded from reports + Také zobrazit položky, které byly vynechány z přehledů Hover over reason to show additional details. Double-click entries to edit. Najeďte ukazatelem myši a zobrazí se další podrobnosti. Položky upravíte dvojklikem. + + Bad + Password quality + Špatné + Bad — password must be changed Špatné — heslo je nutné změnit + + Poor + Password quality + Velmi slabá + Poor — password should be changed Slabé — heslo by se mělo změnit + + Weak + Password quality + Slabá + Weak — consider changing the password Slabé — zvažte změnu hesla @@ -9419,7 +8119,7 @@ This option is deprecated, use --set-key-file instead. Edit Entry… - Upravit záznam… + Upravit položku… Delete Entry(s)… @@ -9429,14 +8129,6 @@ This option is deprecated, use --set-key-file instead. Exclude from reports Vynechat z přehledů - - Expire Entry(s)… - - - - Show entries that have been excluded from reports - - ReportsWidgetHibp @@ -9522,87 +8214,16 @@ This option is deprecated, use --set-key-file instead. Edit Entry… - Upravit záznam… + Upravit položku… Delete Entry(s)… - Smazat záznam…Smazat záznamy…Smazat záznamy…Smazat záznamy… + Smazat položku…Smazat položky…Smazat položky…Smazat položky… Exclude from reports Vynechat z přehledů - - Expire Entry(s)… - - - - - ReportsWidgetPasskeys - - Export - Export - - - Import - Importovat - - - List of entry URLs - Seznam URL adres položky - - - Title - Titulek - - - Path - Popis umístění - - - Username - Uživatelské jméno - - - URLs - URL adresy - - - Edit Entry… - Upravit záznam… - - - Delete Entry(s)… - Smazat záznam…Smazat záznamy…Smazat záznamy…Smazat záznamy… - - - Relying Party - Předávající strana - - - Show expired entries - - - - (Expired) - (Platnost vypršela) - - - Export Confirmation - Potvrzení exportu - - - The passkey file will be vulnerable to theft and unauthorized use, if left unsecured. Are you sure you want to continue? - Soubor přístupového klíče bude zranitelný vůči krádeži a neoprávněnému použití, pokud zůstane nezabezpečený. Jste si jistý, že chcete pokračovat? - - - Please wait, list of entries with passkeys is being updated… - Čekejte prosím, seznam záznamů s přístupovými klíči se aktualizuje... - - - No entries with passkeys. - Žádné záznamy s přístupovými klíči. - ReportsWidgetStatistics @@ -9777,14 +8398,6 @@ This option is deprecated, use --set-key-file instead. No agent running, cannot list identities. Není spuštěný žádný agent, není proto možné vypsat identity - - Failed to remove all SSH identities from agent. - - - - All SSH identities removed from agent. - - SearchHelpWidget @@ -9851,10 +8464,6 @@ This option is deprecated, use --set-key-file instead. Search Help Nápověda ke hledání - - Save Search - Uložit hledání - Search (%1)… Search placeholder text, %1 is the keyboard shortcut @@ -9868,6 +8477,10 @@ This option is deprecated, use --set-key-file instead. Limit search to selected group Omezit hledání na označenou skupinu + + Save Search + Uložit hledání + SettingsClientModel @@ -9929,10 +8542,30 @@ This option is deprecated, use --set-key-file instead. Confirm when passwords are retrieved by clients Potvrzovat když mají být hesla použita klienty + + <html><head/><body><p><span style=" + font-family:'-apple-system','BlinkMacSystemFont','Segoe UI','Helvetica','Arial','sans-serif','Apple Color + Emoji','Segoe UI Emoji'; font-size:14px; color:#24292e; background-color:#ffffff;">This setting does + not override disabling recycle bin prompts</span></p></body></html> + + <html><head/><body><p><span style=" + font-family:'-apple-system','BlinkMacSystemFont','Segoe UI','Helvetica','Arial','sans-serif','Apple Color + Emoji','Segoe UI Emoji'; font-size:14px; color:#24292e; background-color:#ffffff;">Toto nastavení nepřebije + vypnutí výzev ohledně koše</span></p></body></html> + + Confirm when clients request entry deletion Potvrzovat, když si klienti vyžádají smazání položky + + <html><head/><body><p>This improves compatibility with certain applications + which search for password without unlocking the database first.</p><p>But enabling this may also + crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a + different value set in applications.)</p></body></html> + + + Prompt to unlock database before searching Před zahájením hledání se dotázat na odemknutí databáze @@ -9957,14 +8590,6 @@ This option is deprecated, use --set-key-file instead. Save current changes to activate the plugin and enable editing of this section. Aby byl zásuvný modul aktivován a zapnuto upravování této sekce, uložte stávající změny. - - <html><head/><body><p>This setting does not override disabling recycle bin prompts </p></body></html> - <html><head/><body><p>Toto nastavení nezmění deaktivace výzev koše </p></body></html> - - - <html><head/><body><p>This improves compatibility with certain applications which search for password without unlocking the database first.</p><p>But enabling this may also crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a different value set in applications.) </p></body></html> - <html><head/><body><p>Toto zlepšuje kompatibilitu s určitými aplikacemi, které hledají heslo bez předchozího odemknutí databáze.</p><p> Povolením může také dojít k chybě klienta, pokud databázi nelze odemknout během určitého časového limitu. (Obvykle 25s, ale hodnota může být jinak nastavená v aplikacích.) </p></body></html> - SettingsWidgetKeeShare @@ -10072,14 +8697,6 @@ This option is deprecated, use --set-key-file instead. TagModel - - Clear Search - Vyčistit hledání - - - All Entries - Všechny záznamy - Expired Platnost skončila @@ -10088,6 +8705,14 @@ This option is deprecated, use --set-key-file instead. Weak Passwords Slabá hesla + + All Entries + Všechny záznamy + + + Clear Search + Vyčistit hledání + TagView @@ -10097,7 +8722,7 @@ This option is deprecated, use --set-key-file instead. Remove Tag - Smazat štítek + Odebrat štítek Confirm Remove Tag @@ -10105,7 +8730,7 @@ This option is deprecated, use --set-key-file instead. Remove tag "%1" from all entries in this database? - Smazat štítek "%1" ze všech záznamů v databázi? + @@ -10265,6 +8890,26 @@ Příklad: JBSWY3DPEHPK3PXP Start storing your passwords securely in a KeePassXC database Začněte uchovávat svá hesla bezpečně v KeePassXC databázi + + Create new database + Vytvořit novou databázi + + + Open existing database + Otevřít existující databázi + + + Import from KeePass 1 + Importovat z KeePass 1 + + + Import from 1Password + Importovat z 1Password + + + Import from CSV + Importovat z CSV + Recent databases Nedávno otevřené databáze @@ -10277,18 +8922,6 @@ Příklad: JBSWY3DPEHPK3PXP Welcome to KeePassXC %1 Vítejte v KeePassXC %1 - - Create Database - Vytvořit databázi - - - Open Database - Otevřít databázi - - - Import File - Importovat soubor - WinUtils @@ -10305,8 +8938,31 @@ Příklad: JBSWY3DPEHPK3PXP Nedaří se zaregistrovat globální zkratku + + WindowsHello + + Failed to init KeePassXC crypto. + Nepodařilo se inicializovat KeePassXC kryptografii + + + Failed to encrypt key data. + Nepodařilo se zašifrovat data klíče. + + + Failed to get Windows Hello credential. + Nepodařilo se získat Windows Hello přihlašovací údaje. + + + Failed to decrypt key data. + Nepodařilo se rozšifrovat data klíče. + + YubiKey + + %1 No interface, slot %2 + %1 žádné rozhraní, slot %2 + General: Obecné: @@ -10318,6 +8974,14 @@ Příklad: JBSWY3DPEHPK3PXP YubiKeyEditWidget + + Refresh hardware tokens + Znovu načíst hardwarová bezpečnostní zařízení + + + Refresh + Načíst znovu + Hardware key slot selection Výběr slotu v hardwarovém klíči @@ -10350,6 +9014,10 @@ Příklad: JBSWY3DPEHPK3PXP Challenge-Response set, click to change or remove Výzva-odpověď nastavena, kliknutím změníte či odeberete + + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + + Detecting hardware keys… Zjišťování hardwarových klíčů… @@ -10358,25 +9026,28 @@ Příklad: JBSWY3DPEHPK3PXP No hardware keys detected Nenalezeny žádné hardwarové klíče + + + YubiKeyInterface - Refresh hardware keys - Znovu načíst hardwarové klíče - - - <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed with <a href="https://keepassxc.org/docs/#faq-yubikey-howto">Challenge-Response</a>.</p> - - - - Hardware keys found, but no slots are configured - + %1 Invalid slot specified - %2 + zadán neplatný %1 slot – %2 YubiKeyInterfacePCSC + + (PCSC) %1 [%2] Challenge-Response - Slot %3 + (PSCS) %1 [%2] Výzva-odpověď – Slot %3 + The YubiKey PCSC interface has not been initialized. PSCS rozhraní YubiKey nebylo inicializováno. + + Hardware key is currently in use. + Hardwarový klíč je nyní využíván něčím jiným. + Could not find or access hardware key with serial number %1. Please present it to continue. Nepodařilo se nalézt nebo přistoupit k hardwarovému klíči se sériovým číslem %1. Připojte ho, aby bylo možné pokračovat. @@ -10393,21 +9064,6 @@ Příklad: JBSWY3DPEHPK3PXP Failed to complete a challenge-response, the PCSC error code was: %1 Nepodařilo se dokončit výzvu-odpověď – PCSC chyba byla: %1 - - (NFC) %1 [%2] - Slot %3, %4 - YubiKey display fields - - - - Press - USB Challenge-Response Key interaction request - Stisknout - - - Passive - USB Challenge-Response Key no interaction required - Pasivní - YubiKeyInterfaceUSB @@ -10415,6 +9071,14 @@ Příklad: JBSWY3DPEHPK3PXP Unknown Neznámý + + (USB) %1 [%2] Configured Slot - %3 + (USB) %1 [%2] Nastavených slotů – %3 + + + (USB) %1 [%2] Challenge-Response - Slot %3 - %4 + (USB) %1 [%2] Výzva-odpověď – Slot %3 – %4 + Press USB Challenge-Response Key interaction request @@ -10429,6 +9093,10 @@ Příklad: JBSWY3DPEHPK3PXP The YubiKey USB interface has not been initialized. USB rozhraní YubiKey nebylo inicializováno. + + Hardware key is currently in use. + Hardwarový klíč je nyní využíván něčím jiným. + Could not find hardware key with serial number %1. Please plug it in to continue. Nepodařilo se nalézt hardwarový klíč se sériovým číslem %1. Připojte ho, aby bylo možné pokračovat. @@ -10445,15 +9113,5 @@ Příklad: JBSWY3DPEHPK3PXP Failed to complete a challenge-response, the specific error was: %1 Nepodařilo se dokončit výzvu-odpověď – konkrétní chyba byla: %1 - - %1 [%2] - Slot %3 - YubiKey NEO display fields - - - - %1 [%2] - Slot %3, %4 - YubiKey display fields - - \ No newline at end of file diff --git a/share/translations/keepassxc_da.ts b/share/translations/keepassxc_da.ts index 49728c468..b0cf2bd43 100644 --- a/share/translations/keepassxc_da.ts +++ b/share/translations/keepassxc_da.ts @@ -80,10 +80,6 @@ Details Detaljer - - Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. - Din beslutning vil blive husket, så længe både den anmodende klient OG KeePassXC kører. - Remember Husk @@ -92,9 +88,13 @@ Allow Selected Tillad valgte + + Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. + Din beslutning vil blive husket, så længe både den anmodende klient OG KeePassXC kører. + Deny All && Future - Afvis alle && Fremtid + Afvis Alle && Fremtid Allow All && &Future @@ -122,10 +122,6 @@ Use OpenSSH Brug OpenSSH - - Use both agents - Brug begge agenter - SSH_AUTH_SOCK override SSH_AUTH_SOCK-overstyring @@ -154,6 +150,10 @@ SSH Agent connection is working! SSH-agent-forbindelsen virker! + + Use both agents + Brug begge agenter + ApplicationSettingsWidget @@ -169,10 +169,6 @@ Security Sikkerhed - - This setting cannot be enabled when minimize on unlock is enabled. - Denne indstilling kan ikke aktiveres, når minimere ved oplåsning er aktiveret. - Access error for config file %1 Adgangsfejl for konfigurationsfil %1 @@ -215,7 +211,7 @@ You must restart the application to set the new language. Would you like to restart now? - Du skal genstarte applikationen for at tage det nye sprog i brug. Vil du genstarte nu? + Du skal genstarte applikationen for at skifte til et nyt sprog. Vil du genstarte nu? Reset Settings? @@ -229,6 +225,10 @@ Select backup storage directory Vælg mappe til lagring af sikkerhedskopier + + This setting cannot be enabled when minimize on unlock is enabled. + Denne indstilling kan ikke aktiveres, når minimere ved oplåsning er aktiveret. + ApplicationSettingsWidgetGeneral @@ -246,7 +246,7 @@ Automatically launch KeePassXC at system startup - Start KeePassXC automatisk ved opstart af system + Start KeePassXC automatisk ved system start Minimize window at application startup @@ -254,16 +254,12 @@ Minimize window after unlocking database - Minimer vinduet efter databasen er låst op + Minimer vindue efter oplåsning af database Remember previously used databases Husk tidligere anvendte databaser - - recent files - seneste filer - Load previously open databases on startup Indlæs tidligere anvendte databaser ved opstart @@ -309,11 +305,11 @@ Automatically save when locking database - Gem automatisk når databasen låses + Gem automatisk, når du låser databasen Automatically save non-data changes when locking database - Gem automatisk ikke-dataændringer når databasen låses + Gem automatisk ændringer, der ikke vedrører data, når du låser databasen Automatically reload the database when modified externally @@ -361,11 +357,11 @@ Minimize when opening a URL - Minimer ved åbning af en URL + Minimer når du åbner en URL Hide window when copying to clipboard - Skjul vindue ved kopiering til udklipsholder + Skjul vinduet, når der kopieres til udklipsholder Minimize @@ -373,15 +369,15 @@ Drop to background - Fald i baggrund + Sæt til baggrund Favicon download timeout: - Favicon-download timeout: + Timeout for download af favicon: Website icon download timeout in seconds - Websted-ikon download timeout i sekunder + Timeout for download af websideikon i sekunder sec @@ -390,11 +386,11 @@ User Interface - Brugerflade + Brugergrænseflade Toolbar button style - Knapstil på værktøjslinje + Knapstil på værktøjslinjen Movable toolbar @@ -402,7 +398,7 @@ Language selection - Sprogvalg + Valg af sprog Language: @@ -414,15 +410,11 @@ Toolbar button style: - Knapstil på værktøjslinje: - - - Show passwords in color - Vis farvede adgangskoder + Værktøjslinje knap stil Use monospaced font for notes - Brug monospatieret skrifttype til noter + Brug monospacet skrifttype for noter Minimize instead of app exit @@ -438,7 +430,7 @@ Tray icon type: - Bakkeikontype: + Bakkeicontype Hide window to system tray when minimized @@ -482,7 +474,7 @@ Auto-type start delay milliseconds - Startforsinkelse for autoskriv i millisekunder + Forsinkelse af auto-skriv start i millisekunder ms @@ -491,7 +483,7 @@ Auto-Type typing delay: - Skriveforsinkelse for autoskriv: + Forsinkelse for autoskriv: Global auto-type shortcut @@ -499,12 +491,20 @@ Auto-type character typing delay milliseconds - Skriveforsinkelse for autoskriv i millisekunder + Forsinkelse af auto-skrivning i millisekunder Remember last typed entry for: Gem sidste indtastede post for: + + recent files + seneste filer + + + Show passwords in color + Vis farvede adgangskoder + ApplicationSettingsWidgetSecurity @@ -560,15 +560,15 @@ Require password repeat when it is visible - Kræv adgangskodegentagelse når den er synlig + Kræv gentagelse af adgangskode, når den er synlig Hide passwords when editing them - Skjul adgangskoder når de redigeres + Skjul adgangskoder, når du redigerer dem Use placeholder for empty password fields - Brug pladsholder til tomme adgangskodefelter + Brug pladsholder for tomme adgangskodefelter Hide passwords in the entry preview panel @@ -615,7 +615,7 @@ KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. - KeePassXC kræver tilgængelighedstilladelse for at udføre autoskrift på startniveau. Hvis du allerede har givet tilladelse, er du måske nødt til at genstarte KeePassXC. + KeePassXC kræver adgangstilladelse til Tilgængelighed for at kunne udføre autoskrivning. Hvis du allerede har givet tilladelse, skal du muligvis genstarte KeePassXC. KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. @@ -641,10 +641,6 @@ Very long delay detected, max is %1: %2 Meget lang forsinkelse registreret, maks. er %1: %2 - - Entry does not have attribute for PICKCHARS: %1 - - Invalid conversion type: %1 Ugyldig konverteringstype: %1 @@ -663,6 +659,10 @@ Invalid placeholder: %1 Ugyldig pladsholder: %1 + + Entry does not have attribute for PICKCHARS: %1 + + AutoTypeAssociationsModel @@ -818,19 +818,19 @@ Ctrl+4 - Brug virtuelt tastatur (kun Windows)</p> Deny All - Afvis alle + Nægt alle Disable for this site Deaktiver for dette websted - - Undo - - BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + KeePassXC-Browser gem post + Ok Ok @@ -845,62 +845,6 @@ Please select the correct database for saving credentials. Du har flere databaser åbne. Venligst vælg den korrekte database for at gemme loginoplysninger. - - KeePassXC - Select Database - - - - - BrowserPasskeysConfirmationDialog - - KeePassXC: Passkey credentials - - - - Cancel - Annuller - - - Update - - - - Authenticate - - - - Register new - - - - Register - - - - Timeout in <b>%n</b> seconds... - - - - Do you want to register Passkey for: - - - - %1 (%2) - - - - Existing Passkey found. -Do you want to register a new Passkey for: - - - - Select the existing Passkey and press Update to replace it. - - - - Authenticate Passkey credentials for: - - BrowserService @@ -965,8 +909,50 @@ Do you want to delete the entry? - %1 (Passkey) - + Converting attributes to custom data… + Konverterer attributter til tilpasset data … + + + Abort + Afbryd + + + KeePassXC: Converted KeePassHTTP attributes + KeePassXC: Konverterede KeePassHTTP-attributter + + + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + Det lykkedes at konvertere attributter fra %1 post(er). +Flyttede %2 nøgler til tilpasset data. + + + Successfully moved %n keys to custom data. + Det lykkedes at flytte %n nøgle til tilpasset data.Det lykkedes at flytte %n nøgler til tilpasset data. + + + KeePassXC: No entry with KeePassHTTP attributes found! + KeePassXC: Fandt ingen post med KeePassHTTP-attributter! + + + The active database does not contain an entry with KeePassHTTP attributes. + Den aktive database indeholder ikke en post med KeePassHTTP-attributter. + + + Don't show this warning again + Vis ikke denne advarsel igen + + + KeePassXC: Legacy browser integration settings detected + KeePassXC: Forældede indstillinger for browser-integration registreret + + + 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? + Dine indstillinger for KeePassXC-Browser skal flyttes ind i databaseindstillingerne. +Det er nødvendigt for at vedligeholde dine nuværende browserforbindelser. +Vil du migrere dine eksisterende indstillinger nu? @@ -981,7 +967,7 @@ Do you want to delete the entry? Enable browser integration - Aktivér browser-integration + Aktiver browser-integration General @@ -1026,11 +1012,11 @@ Do you want to delete the entry? Show a notification when credentials are requested Credentials mean login data requested via browser extension - Vis en notifikation når der anmodes om loginoplysninger + Vis en meddelelse, når der anmodes om legitimationsoplysninger Request to unlock the database if it is locked - Anmod om at låse op for databasen, hvis den er låst + Anmod om at låse databasen op, hvis den er låst Only entries with the same scheme (http://, https://, …) are returned. @@ -1046,15 +1032,15 @@ Do you want to delete the entry? Return only best-matching credentials - Returnér kun de bedst matchende loginoplysninger + Returnerer kun de bedst matchende legitimationsoplysninger Returns expired credentials. String [expired] is added to the title. - Returnerer udløbne loginoplysninger. Strengen [expired] tilføjes til titlen. + Returnerer udløbne legitimationsoplysninger. Strengen [udløbet] tilføjes til titlen. Allow returning expired credentials - Tillad returnering af udløbne loginoplysninger + Tillad returnering af udløbne legitimationsoplysninger All databases connected to the extension will return matching credentials. @@ -1063,7 +1049,7 @@ Do you want to delete the entry? Search in all opened databases for matching credentials Credentials mean login data requested via browser extension - Søg i alle åbne databaser for matchende loginoplysninger + Søg i alle åbne databaser for matchende legitimationsoplysninger Advanced @@ -1140,7 +1126,7 @@ Do you want to delete the entry? Toolbar button style - Knapstil på værktøjslinje + Knapstil på værktøjslinjen Config Location: @@ -1174,6 +1160,14 @@ Do you want to delete the entry? Please see special instructions for browser extension use below Venligst se vigtige instruktioner for brug af browser tilføjelsen nedenfor + + <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. + + + + <b>Warning:</b> The following options can be dangerous! + <b>Advarsel:</b> Følgende indstillinger kan være farlige! + Executable Files Eksekverbare filer @@ -1190,30 +1184,6 @@ Do you want to delete the entry? Select native messaging host folder location - - Allow keepassxc-proxy to list all entries with their title, URL and UUID in connected databases. - - - - Allow limited access to all entries in connected databases (ignores site access restrictions) - - - - <b>Warning:</b> Only adjust these settings if necessary. - - - - The custom proxy location does not exist. - - - - <b>Error:</b> The custom proxy location does not exist. Correct this in the advanced settings tab. - - - - <b>Error:</b> The installed proxy executable is missing from the expected location: %1<br/>Please set a custom proxy location in the advanced settings or reinstall the application. - - CloneDialog @@ -1420,11 +1390,11 @@ Do you want to delete the entry? Could not save, database does not point to a valid file. - Kunne ikke gemme, database peger ikke på en gyldig fil. + Kunne ikke gemme, databasen peger ikke på en gyldig fil. Database save is already in progress. - Database er allerede ved at blive gemt. + Databasen er allerede ved at blive gemt. Could not save, database has not been initialized! @@ -1459,7 +1429,7 @@ Backup database located at %2 DatabaseOpenWidget Unlock KeePassXC Database - Lås op for KeePassXC Database + Lås KeePassXC-database op Enter Password: @@ -1471,16 +1441,12 @@ Backup database located at %2 Enter Additional Credentials (if any): - Angiv yderligere loginoplysninger (hvis de findes): + Angiv yderligere legitimationsoplysninger (hvis de findes): Key File: Nøglefil: - - <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information…</p> - <p>Ud over en adgangskode kan du bruge en hemmelig fil til at øge din databases sikkerhed. Denne fil kan genereres i din databases sikkerhedsindstillinger.</p><p>Dette er <strong>ikke</strong> din *.kdbx databasefil!<br>Hvis du ikke har en nøglefil, skal du lade dette felt være tomt.</p><p>Klik for flere oplysninger…</p> - Key file help @@ -1493,12 +1459,6 @@ Backup database located at %2 Hardware Key: Sikkerhedsnøgle: - - <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> -<p>Click for more information…</p> - <p>Du kan bruge en hardware-sikkerhedsnøgle, f.eks. en <strong>YubiKey</strong> eller <strong>OnlyKey</strong> med slots, der er konfigureret til HMAC-SHA1.</p> -<p>Klik for yderligere oplysninger…</p> - Hardware key help Hjælp til sikkerhedsnøgle @@ -1577,7 +1537,11 @@ For at forhindre, at denne fejl vises, skal du gå til "Databaseindstilling Retry with empty password - Prøv igen med tom adgangskode + Forsøg igen med tom adgangskode + + + Failed to authenticate with Touch ID + Failed to open key file: %1 @@ -1585,7 +1549,7 @@ For at forhindre, at denne fejl vises, skal du gå til "Databaseindstilling Old key file format - Gammelt nøglefilformat + Gammelt nøglefilsformat You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database &gt; Database Security &gt; Change Key File.</strong><br> @@ -1629,12 +1593,22 @@ Hvis du ikke har en nøglefil, bedes du lade feltet være tomt. Select hardware key… Vælg sikkerhedsnøgle... + + <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information…</p> + <p>Ud over en adgangskode kan du bruge en hemmelig fil til at øge din databases sikkerhed. Denne fil kan genereres i din databases sikkerhedsindstillinger.</p><p>Dette er <strong>ikke</strong> din *.kdbx databasefil!<br>Hvis du ikke har en nøglefil, skal du lade dette felt være tomt.</p><p>Klik for flere oplysninger…</p> + + + <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +<p>Click for more information…</p> + <p>Du kan bruge en hardware-sikkerhedsnøgle, f.eks. en <strong>YubiKey</strong> eller <strong>OnlyKey</strong> med slots, der er konfigureret til HMAC-SHA1.</p> +<p>Klik for yderligere oplysninger…</p> + authenticate to access the database - Failed to authenticate with Quick Unlock: %1 + Failed to authenticate with Windows Hello: %1 @@ -1647,6 +1621,10 @@ Hvis du ikke har en nøglefil, bedes du lade feltet være tomt. DatabaseSettingsDialog + + Advanced Settings + Avancerede indstillinger + General Generelt @@ -1678,6 +1656,18 @@ Hvis du ikke har en nøglefil, bedes du lade feltet være tomt. KeePassXC-Browser settings KeePassXC-Browserindstillinger + + Convert KeePassHTTP data + + + + Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data + + + + Refresh database root group ID + + Disconnect all browsers Afbryd forbindelse til alle browsere @@ -1686,10 +1676,6 @@ Hvis du ikke har en nøglefil, bedes du lade feltet være tomt. Forget all site-specific settings on entries Glem alle stedspecifikke indstillinger på posterne - - Refresh database root group ID - - Stored keys Gemte nøgler @@ -1730,7 +1716,7 @@ Det kan forhindre forbindelse til browserpluginet. Enable Browser Integration to access these settings. - Aktivér Browser-integration for at tilgå disse indstillinger. + Aktivér browser-integration for at tilgå disse indstillinger. Do you really want to disconnect all browsers? @@ -1784,6 +1770,16 @@ Tilladelser til at tilgå poster tilbagekaldes. 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 + Flyt KeePassHTTP-attributter til tilpasset data + + + Do you really want to convert all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + Ønsker du virkelig at konvertere alle gamle browser-integrationsdata til den nyeste standard? +Dette er nødvendigt for at bevare kompatibiliteten med browser-plugin'et. + Refresh database ID Genopfrisk database-ID @@ -1839,6 +1835,14 @@ Er du sikker på, du vil fortsætte uden en adgangskode? Decryption Time: Krypteringstid: + + Change existing decryption time + + + + Change + Skift + Decryption time in seconds @@ -1919,6 +1923,11 @@ Er du sikker på, du vil fortsætte uden en adgangskode? KDBX 3 + + unchanged + Database decryption time is unchanged + uændret + Number of rounds too high Key transformation rounds @@ -1967,18 +1976,6 @@ If you keep this number, your database will not be protected from brute force at Threads for parallel execution (KDF settings) tråd tråde - - Encryption Settings: - - - - Basic - - - - Advanced - Avanceret - DatabaseSettingsWidgetFdoSecrets @@ -2099,26 +2096,6 @@ Entries deleted from the recycle bin are removed from the database. - - Autosave delay since last change - - - - Autosave delay - - - - Autosave delay since last change in minutes - - - - min - min - - - Autosave delay since last change checkbox - - DatabaseSettingsWidgetKeeShare @@ -2278,18 +2255,6 @@ Det er helt sikkert en fejl. Rapportér det venligst til udviklerne.Writing the HTML file failed. - - Export database to XML file - Eksporter database til XML-fil - - - XML file - XML-fil - - - Writing the XML file failed - Skrivning af XML-filen mislykkedes - Export Confirmation @@ -2312,13 +2277,21 @@ Det er helt sikkert en fejl. Rapportér det venligst til udviklerne.Database tab name modifier %1 [Låst] + + Export database to XML file + Eksporter database til XML-fil + + + XML file + XML-fil + + + Writing the XML file failed + Skrivning af XML-filen mislykkedes + DatabaseWidget - - Searches and Tags - Søgninger og etiketter - Searching… Søger… @@ -2367,10 +2340,6 @@ Det er helt sikkert en fejl. Rapportér det venligst til udviklerne.Expired entries Udløbne poster - - Entries expiring within %1 day(s) - - No current database. Ingen database valgt. @@ -2395,18 +2364,6 @@ Det er helt sikkert en fejl. Rapportér det venligst til udviklerne.No Results Ingen resultater - - Save - Gem - - - Enter a unique name or overwrite an existing search from the list: - - - - Save Search - Gem søgning - Lock Database? Lås database? @@ -2483,7 +2440,7 @@ Så sikre gem fra og prøv igen? Save database backup - Gem sikkerhedskopi af database + Gem database-backup Empty recycle bin? @@ -2497,6 +2454,26 @@ Så sikre gem fra og prøv igen? Could not find database file: %1 Kunne ikke finde databasefil: %1 + + Entries expiring within %1 day(s) + Posteringer, der udløber inden for %1 dagPosteringer, der udløber inden for %1 dage + + + Searches and Tags + Søgninger og etiketter + + + Enter a unique name or overwrite an existing search from the list: + + + + Save + Gem + + + Save Search + Gem søgning + EditEntryWidget @@ -2607,7 +2584,7 @@ Would you like to correct it? Would you like to save changes to this entry? - Ønsker du at gemme ændringer til denne post? + Ønsker du at gemme ændringer for denne post? New attribute @@ -2633,10 +2610,6 @@ Would you like to correct it? Hide - - %n hour(s) - %n time%n timer - %n week(s) %n uge%n uger @@ -2649,6 +2622,10 @@ Would you like to correct it? %n year(s) %n år%n år + + %n hour(s) + %n time%n timer + EditEntryWidgetAdvanced @@ -2767,20 +2744,10 @@ Would you like to correct it? Add new window association - - + - Add item - + - Remove selected window association - - - - Remove item - - - Window title: Vinduestitel: @@ -2805,6 +2772,16 @@ Would you like to correct it? Custom Auto-Type sequence for this window + + + + Add item + + + + + - + Remove item + - + EditEntryWidgetBrowser @@ -3021,6 +2998,19 @@ Would you like to correct it? Private key Privat nøgle + + External file + Ekstern fil + + + Browser for key file + Find nøglefil + + + Browse… + Button for opening file dialog + Gennemse… + Attachment Vedhæftning @@ -3037,23 +3027,6 @@ Would you like to correct it? Remove from agent Fjern fra agent - - External file - Ekstern fil - - - Browser for key file - Find nøglefil - - - Browse… - Button for opening file dialog - Gennemse… - - - Generate - Generér - Select attachment file Vælg vedhæftningsfil @@ -3089,6 +3062,10 @@ Would you like to correct it? Icon Ikon + + Browser Integration + Browser-integration + Properties Egenskaber @@ -3105,10 +3082,6 @@ Would you like to correct it? Group has unsaved changes Gruppe har ændringer, som ikke er gemt - - Browser Integration - Browser-integration - Enable Aktivér @@ -3472,7 +3445,7 @@ Supported extensions are: %1. Plugin Data - Plugin-data + Plugindata Plugin data @@ -3868,10 +3841,6 @@ Error: %1 Has TOTP Har TOTP - - Background Color - - EntryPreviewWidget @@ -3892,8 +3861,8 @@ Error: %1 Adgangskode - URL - URL + Notes + Bemærkninger Expiration @@ -3912,8 +3881,8 @@ Error: %1 Brugernavn - Notes - Bemærkninger + URL + URL Advanced @@ -3963,10 +3932,6 @@ Error: %1 Never Aldrig - - Double click to copy value - Dobbeltklik for at kopiere værdi - Enabled Aktiveret @@ -3976,8 +3941,8 @@ Error: %1 Deaktiveret - Double click to copy to clipboard - + Double click to copy value + Dobbeltklik for at kopiere værdi @@ -3986,10 +3951,6 @@ Error: %1 Invalid URL - - Duplicate URL - - EntryView @@ -4005,10 +3966,6 @@ Error: %1 Reset to defaults Nulstil til standardindstillinger - - + %1 entry(s)... - - ExportDialog @@ -4255,7 +4212,7 @@ You can enable the DuckDuckGo website icon service in the security section of th Invalid credentials were provided, please try again. If this reoccurs, then your database file may be corrupt. - Der blev angivet ugyldige loginoplysninger, prøv igen. + Der blev angivet ugyldige legitimationsoplysninger, prøv igen. Hvis dette gentager sig, kan din databasefil være beskadiget. @@ -4312,7 +4269,7 @@ Hvis dette gentager sig, kan din databasefil være beskadiget. Invalid credentials were provided, please try again. If this reoccurs, then your database file may be corrupt. - Der blev angivet ugyldige loginoplysninger, prøv igen. + Der blev angivet ugyldige legitimationsoplysninger, prøv igen. Hvis dette gentager sig, kan din databasefil være beskadiget. @@ -4734,7 +4691,7 @@ Linje %2, kolonne %3 Invalid credentials were provided, please try again. If this reoccurs, then your database file may be corrupt. - Der blev angivet ugyldige loginoplysninger, prøv igen. + Der blev angivet ugyldige legitimationsoplysninger, prøv igen. Hvis dette gentager sig, kan din databasefil være beskadiget. @@ -5045,16 +5002,12 @@ Are you sure you want to continue with this file? Copy Att&ribute - Kopiér att&ribut + &Kopier attribut TOTP TOTP - - Tags - Etiketter - &Groups &Grupper @@ -5081,11 +5034,11 @@ Are you sure you want to continue with this file? &Check for Updates - &Kontroller for opdateringer + &Kontrollér, om der er opdateringer &Open Database… - &Åbn database... + &Åbn database… &Save Database @@ -5097,7 +5050,7 @@ Are you sure you want to continue with this file? &New Database… - &Ny database... + &Ny database… Create a new database @@ -5105,7 +5058,7 @@ Are you sure you want to continue with this file? &Merge From Database… - &Flet fra database... + &Sammenlæg fra database… Merge from another KDBX database @@ -5141,15 +5094,15 @@ Are you sure you want to continue with this file? &Edit Group… - &Rediger gruppe... + &Rediger gruppe… &Delete Group… - &Slet gruppe... + &Slet gruppe… Download All &Favicons… - Download alle &favicons... + Download alle &faviconer… Sort &A-Z @@ -5213,7 +5166,7 @@ Are you sure you want to continue with this file? Copy &Password - Kopiér &Adgangskode + Kopiér &adgangskode Copy password to clipboard @@ -5255,10 +5208,6 @@ Are you sure you want to continue with this file? Copy title to clipboard Kopiér titel til udklipsholder - - Copy &URL - - Copy URL to clipboard Kopiér URL til udklipsholder @@ -5319,10 +5268,6 @@ Are you sure you want to continue with this file? Copy &TOTP Kopiér &TOTP - - Copy Password and TOTP - Kopier adgangskode og TOTP - E&mpty recycle bin &Tøm papirkurven @@ -5333,7 +5278,7 @@ Are you sure you want to continue with this file? Report a &Bug - Rapportér en &fejl + Anmeld en &fejl &Getting Started @@ -5345,7 +5290,7 @@ Are you sure you want to continue with this file? &Online Help - Online hjælp + &Online hjælp Go to online documentation @@ -5393,15 +5338,15 @@ Are you sure you want to continue with this file? Classic (Platform-native) - Klassisk + Klassisk (platformens indbyggede) Show Toolbar - Vis værktøjsbjælke + Vis værktøjslinje Show Preview Panel - Vis forhåndsvisningspanel + Vis panel til forhåndsvisning Always on Top @@ -5419,14 +5364,6 @@ Are you sure you want to continue with this file? Clone Group... Klon gruppe... - - &XML File… - &XML-fil… - - - XML File… - XML-fil… - Clear history Ryd historik @@ -5455,10 +5392,6 @@ Expect some bugs and minor issues, this version is meant for testing purposes. - - No Tags - Ingen etiketter - Restore Entry(s) @@ -5487,10 +5420,6 @@ We recommend you use the AppImage available on our downloads page. Quit KeePassXC Luk KeePassXC - - %1 Entry(s) - %1 post%1 poster - Please present or touch your YubiKey to continue… @@ -5503,22 +5432,38 @@ We recommend you use the AppImage available on our downloads page. You must restart the application to apply this setting. Would you like to restart now? + + Tags + Etiketter + + + No Tags + Ingen etiketter + + + %1 Entry(s) + %1 post%1 poster + + + Copy Password and TOTP + Kopier adgangskode og TOTP + + + &XML File… + &XML-fil… + + + XML File… + XML-fil… + + + Copy &URL + + Allow Screen Capture - - Passkeys… - - - - Passkeys - - - - Import Passkey - - ManageDatabase @@ -5536,7 +5481,7 @@ We recommend you use the AppImage available on our downloads page. Unlock database to show more information - Lås database op for at vise mere information + Lås databasen op for at vise flere oplysninger Lock database @@ -5655,6 +5600,14 @@ We recommend you use the AppImage available on our downloads page. Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. Her kan du justere databasens krypteringsindstillinger. Bare rolig, du kan ændre dem senere i databaseindstillingerne. + + Advanced Settings + Avancerede indstillinger + + + Simple Settings + Simple indstillinger + NewDatabaseWizardPageDatabaseKey @@ -5816,10 +5769,6 @@ We recommend you use the AppImage available on our downloads page. Unknown cipher: %1 Ukendt ciffer: %1 - - AES-256/GCM is currently not supported - - Passphrase is required to decrypt this key Adgangssætning er nødvendig for at dekryptere denne nøgle @@ -5884,169 +5833,8 @@ We recommend you use the AppImage available on our downloads page. Unexpected EOF when writing private key Privat nøgle sluttede uventet under skrivning - - - OpenSSHKeyGenDialog - SSH Key Generator - - - - Type - Type - - - Bits - - - - Comment - Kommentar - - - - PasskeyExportDialog - - KeePassXC - Passkey Export - - - - Export the following Passkey entries. - - - - Filenames will be generated with title and .passkey file extension. - - - - Export entries - - - - Export Selected - - - - Cancel - Annuller - - - Export to folder - - - - - PasskeyExporter - - KeePassXC: Passkey Export - - - - File "%1.passkey" already exists. -Do you want to overwrite it? - - - - - Cannot open file - - - - Cannot open file "%1" for writing. - - - - Cannot write to file - - - - - PasskeyImportDialog - - KeePassXC - Passkey Import - - - - Do you want to import the Passkey? - - - - URL: %1 - - - - Username: %1 - - - - Use default group (Imported Passkeys) - - - - Group - Gruppe - - - Database - Database - - - Select Database - - - - Import Passkey - - - - Import - Importér - - - Cancel - Annuller - - - Database: %1 - - - - Group: - - - - - PasskeyImporter - - Passkey file - - - - All files - Alle filer - - - Open Passkey file - - - - Cannot open file - - - - Cannot open file "%1" for reading. - - - - Cannot import Passkey - - - - Cannot import Passkey file "%1". Data is missing. - - - - Cannot import Passkey file "%1". Private key is missing or malformed. + AES-256/GCM is currently not supported @@ -6126,7 +5914,7 @@ Do you want to overwrite it? Copy password - Kopiér kodeord + Kopiér adgangskode Password @@ -6228,10 +6016,6 @@ Do you want to overwrite it? Also choose from: Vælg også fra: - - Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" - Udeluk tegnene: "0", "1", "l", "I", "O", "|", "﹒" - Exclude look-alike characters Udeluk tegn som ligner hinanden @@ -6312,30 +6096,6 @@ Do you want to overwrite it? Entropy: %1 bit Entropi: %1 bit - - Password Quality: %1 - Kvaliteten af adgangskoden: %1 - - - Poor - Password quality - Dårlig - - - Weak - Password quality - Svag - - - Good - Password quality - God - - - Excellent - Password quality - Fremragende - Confirm Delete Wordlist @@ -6381,6 +6141,34 @@ Do you want to overwrite it? Special Characters Specialtegn + + Password Quality: %1 + Kvaliteten af adgangskoden: %1 + + + Poor + Password quality + Dårlig + + + Weak + Password quality + Svag + + + Good + Password quality + God + + + Excellent + Password quality + Fremragende + + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + Udeluk tegnene: "0", "1", "l", "I", "O", "|", "﹒" + PasswordWidget @@ -6879,10 +6667,6 @@ Do you want to overwrite it? Too many arguments provided. - - Path of the database. - Sti til databasen. - Target decryption time in MS for the database. @@ -6891,12 +6675,6 @@ Do you want to overwrite it? time - - Set the key file for the database. -This options is deprecated, use --set-key-file instead. - Indstil nøglefilen for databasen. -Denne indstilling er forældet, brug i stedet --set-key-file. - Set the key file for the database. @@ -6909,6 +6687,10 @@ Denne indstilling er forældet, brug i stedet --set-key-file. Create a new database. Opret en ny database. + + Path of the database. + Sti til databasen. + Invalid decryption time %1. @@ -6953,158 +6735,6 @@ Denne indstilling er forældet, brug i stedet --set-key-file. Successfully created new database. Oprettelse af ny database lykkedes. - - Unset the password for the database. - Fjern adgangskoden til databasen. - - - Unset the key file for the database. - Fjern nøglefilen for databasen. - - - Edit a database. - Redigér en database. - - - Cannot use %1 and %2 at the same time. - Kan ikke bruge %1 og %2 på samme tid. - - - Could not change the database key. - Kunne ikke ændre databasenøglen. - - - Database was not modified. - Databasen blev ikke ændret. - - - Writing the database failed: %1 - Skrivning af databasen mislykkedes: %1 - - - Successfully edited the database. - Databasen blev redigeret. - - - Cannot remove password: The database does not have a password. - Kan ikke fjerne adgangskode: Databasen har ikke en adgangskode. - - - Cannot remove file key: The database does not have a file key. - Kan ikke fjerne filnøgle: Databasen har ikke en filnøgle. - - - Loading the new key file failed: %1 - Indlæsning af den nye nøglefil mislykkedes: %1 - - - Found unexpected Key type %1 - Der er fundet en uventet nøgletype %1 - - - Cannot remove all the keys from a database. - Kan ikke fjerne alle nøgler fra en database. - - - Show a database's information. - - - - UUID: - - - - Name: - - - - Description: - Beskrivelse: - - - Cipher: - - - - KDF: - - - - Recycle bin is enabled. - Papirkurv er aktiveret. - - - Recycle bin is not enabled. - - - - Location - - - - Database created - - - - Last saved - Sidst gemt - - - Unsaved changes - Ikke-gemte ændringer - - - yes - - - - no - nej - - - Number of groups - - - - Number of entries - - - - Number of expired entries - Antal udløbne poster - - - Unique passwords - - - - Non-unique passwords - - - - Maximum password reuse - Maksimalt genbrug af adgangskoder - - - Number of short passwords - - - - Number of weak passwords - Antal svage adgangskoder - - - Entries excluded from reports - - - - Average password length - - - - %1 characters - - Word count for the diceware passphrase. Ordtælling for diceware-adgangssætning. @@ -7156,6 +6786,10 @@ Denne indstilling er forældet, brug i stedet --set-key-file. Enter new password for entry: Indtast ny adgangskode for posten: + + Writing the database failed: %1 + Skrivning af databasen mislykkedes: %1 + Successfully edited entry %1. Det lykkedes at redigere posten %1. @@ -7380,6 +7014,106 @@ Denne indstilling er forældet, brug i stedet --set-key-file. Successfully imported database. + + Show a database's information. + + + + UUID: + + + + Name: + + + + Description: + Beskrivelse: + + + Cipher: + + + + KDF: + + + + Recycle bin is enabled. + Papirkurv er aktiveret. + + + Recycle bin is not enabled. + + + + Location + + + + Database created + + + + Last saved + Sidst gemt + + + Unsaved changes + Ikke-gemte ændringer + + + yes + + + + no + nej + + + Number of groups + + + + Number of entries + + + + Number of expired entries + Antal udløbne poster + + + Unique passwords + + + + Non-unique passwords + + + + Maximum password reuse + Maksimalt genbrug af adgangskoder + + + Number of short passwords + + + + Number of weak passwords + Antal svage adgangskoder + + + Entries excluded from reports + + + + Average password length + + + + %1 characters + + Unknown command %1 @@ -7478,7 +7212,7 @@ Tilgængelige kommandoer: Moves an entry to a new group. - Flyt en post til en ny gruppe + Flytter en post til en ny gruppe. Path of the entry to move. @@ -7552,10 +7286,6 @@ Tilgængelige kommandoer: Show the protected attributes in clear text. - - Show all the attributes of the entry. - Vis alle attributterne for posten. - Show the attachments of the entry. @@ -7602,7 +7332,7 @@ Tilgængelige kommandoer: Enter password to unlock %1: - Indtast adgangskode for at låse op for %1: + Indtast adgangskode for at låse %1 op: Failed to load key file %1: %2 @@ -7623,10 +7353,6 @@ Please consider generating a new key file. Invalid YubiKey serial %1 - - Please present or touch your YubiKey to continue. - Præsenter eller rør din YubiKey for at fortsætte. - Enter password to encrypt database (optional): Indtast adgangskode for at kryptere database (valgfrit): @@ -7972,7 +7698,7 @@ Kerne: %3 %4 Delete entry(s)? - + Slet post?Slet poster? Do you really want to move entry "%1" to the recycle bin? @@ -8054,6 +7780,10 @@ Kerne: %3 %4 read password of the database from stdin læs adgangskode til databasen fra stdin + + allow app screen recordering and screenshots + + Locked databases. Låste databaser. @@ -8066,10 +7796,6 @@ Kerne: %3 %4 Another instance of KeePassXC is already running. En anden instans af KeePassXC kører allerede. - - KeePassXC is not running. No open database to lock - - Fatal error while testing the cryptographic functions. Fatal fejl ved test af kryptografiske funktioner. @@ -8113,71 +7839,69 @@ Kerne: %3 %4 - Access to all entries is denied - + Please present or touch your YubiKey to continue. + Præsenter eller rør din YubiKey for at fortsætte. - allow screenshots and app recording (Windows/macOS) - + Show all the attributes of the entry. + Vis alle attributterne for posten. - AES initialization failed - + Edit a database. + Redigér en database. - AES encrypt failed - + Could not change the database key. + Kunne ikke ændre databasenøglen. - Failed to store in Linux Keyring - + Database was not modified. + Databasen blev ikke ændret. - Could not locate key in keyring - + Successfully edited the database. + Databasen blev redigeret. - Could not read key in keyring - + Loading the new key file failed: %1 + Indlæsning af den nye nøglefil mislykkedes: %1 - AES decrypt failed - + Unset the password for the database. + Fjern adgangskoden til databasen. - No Polkit authentication agent was available - + Unset the key file for the database. + Fjern nøglefilen for databasen. - Polkit authorization failed - + Cannot use %1 and %2 at the same time. + Kan ikke bruge %1 og %2 på samme tid. - No Quick Unlock provider is available - + Cannot remove all the keys from a database. + Kan ikke fjerne alle nøgler fra en database. - Polkit returned an error: %1 - + Cannot remove password: The database does not have a password. + Kan ikke fjerne adgangskode: Databasen har ikke en adgangskode. - Failed to init KeePassXC crypto. - + Cannot remove file key: The database does not have a file key. + Kan ikke fjerne filnøgle: Databasen har ikke en filnøgle. - Failed to encrypt key data. - + Found unexpected Key type %1 + Der er fundet en uventet nøgletype %1 - Failed to get Windows Hello credential. - + Set the key file for the database. +This options is deprecated, use --set-key-file instead. + Indstil nøglefilen for databasen. +Denne indstilling er forældet, brug i stedet --set-key-file. - Failed to decrypt key data. - - - - Passkeys + KeePassXC is not running. No open database to lock @@ -8217,6 +7941,18 @@ Kerne: %3 %4 ReportsWidgetBrowserStatistics + + Exclude expired entries from the report + + + + Show only entries which have URL set + + + + Show only entries which have browser settings in custom data + + Double-click entries to edit. @@ -8281,25 +8017,17 @@ Kerne: %3 %4 Exclude from reports - - Only show entries that have a URL - - - - Only show entries that have been explicitly allowed or denied - - - - Show expired entries - - - - (Expired) - - ReportsWidgetHealthcheck + + Exclude expired entries from the report + + + + Also show entries that have been excluded from reports + + Hover over reason to show additional details. Double-click entries to edit. @@ -8369,24 +8097,12 @@ Kerne: %3 %4 Delete Entry(s)… - + Slet post…Slet poster… Exclude from reports - - Show expired entries - - - - Show entries that have been excluded from reports - - - - (Expired) - - ReportsWidgetHibp @@ -8483,65 +8199,6 @@ Kerne: %3 %4 - - ReportsWidgetPasskeys - - Export - Eksportér - - - Import - Importér - - - List of entry URLs - - - - Please wait, list of entries with Passkeys is being updated… - - - - No entries with Passkeys. - - - - Title - Titel - - - Path - Sti - - - Username - Brugernavn - - - URLs - - - - Edit Entry… - Rediger post… - - - Delete Entry(s)… - Slet post…Slet poster… - - - Relying Party - - - - Show expired entries - - - - (Expired) - - - ReportsWidgetStatistics @@ -8781,10 +8438,6 @@ Kerne: %3 %4 Search Help Søg i hjælp - - Save Search - Gem søgning - Search (%1)… Search placeholder text, %1 is the keyboard shortcut @@ -8798,6 +8451,10 @@ Kerne: %3 %4 Limit search to selected group Begræns søgning til den valgte gruppe + + Save Search + Gem søgning + SettingsClientModel @@ -9014,14 +8671,6 @@ Kerne: %3 %4 TagModel - - Clear Search - Ryd søgning - - - All Entries - Alle poster - Expired Udløbet @@ -9030,6 +8679,14 @@ Kerne: %3 %4 Weak Passwords Svage adgangskoder + + All Entries + Alle poster + + + Clear Search + Ryd søgning + TagView @@ -9232,7 +8889,7 @@ Example: JBSWY3DPEHPK3PXP Open a recent database - Åbn en af de seneste databaser + Åbn en nylig database Welcome to KeePassXC %1 @@ -9254,6 +8911,25 @@ Example: JBSWY3DPEHPK3PXP + + WindowsHello + + Failed to init KeePassXC crypto. + + + + Failed to encrypt key data. + + + + Failed to get Windows Hello credential. + + + + Failed to decrypt key data. + + + YubiKey @@ -9392,11 +9068,11 @@ Example: JBSWY3DPEHPK3PXP Hardware key is currently in use. - Sikkerhedsnøgle er i øjeblikket i brug. + Sikkerhedsnøgle er i øjeblikket i brug Could not find hardware key with serial number %1. Please plug it in to continue. - Kunne ikke finde sikkerhedsnøglen med serienummer %1. Sæt den i for at fortsætte. + Kunne ikke finde sikkerhedsnøglen med serienummer %1. Sæt den venligst i for at fortsætte. Hardware key timed out waiting for user interaction. diff --git a/share/translations/keepassxc_de.ts b/share/translations/keepassxc_de.ts index 6e31310e3..c6d3c9484 100644 --- a/share/translations/keepassxc_de.ts +++ b/share/translations/keepassxc_de.ts @@ -54,11 +54,12 @@ Non-existing/inaccessible executable path. Please double-check the client is legit. - Nicht vorhandener/unerreichbarer ausführbarer Pfad. Bitte überprüfen Sie, ob der Client wirklich korrekt ist. + Ausführbare Datei ist nicht vorhandener oder nicht zugänglich. Bitte prüfen Sie, ob der Client wirklich korrekt ist. <html><head/><body><p><span style=" font-weight:600;">%1 </span>is requesting access to the following entries:</p></body></html> - <html><head/><body><p><span style=" font-weight:600;">%1 </span>fordert Zugriff auf die folgenden Einträge: </p></body></html> + <html><head/><body><p><span style=" font-weight:600;">%1 </span>fordert Zugriff auf die folgenden Einträge an: +</p></body></html> @@ -81,10 +82,6 @@ Details Details - - Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. - Ihre Entscheidung wird so lange gespeichert, wie sowohl der anfragende Client als auch KeePassXC ausgeführt werden. - Remember Merken @@ -93,6 +90,10 @@ Allow Selected Auswahl erlauben + + Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. + Ihre Entscheidung wird so lange gemerkt, wie sowohl der anfragende Client als auch KeePassXC laufen. + Deny All && Future Alle verweigern && Zukünftige @@ -123,10 +124,6 @@ Use OpenSSH OpenSSH verwenden - - Use both agents - Beide Agents verwenden - SSH_AUTH_SOCK override SSH_AUTH_SOCK-Überschreibung @@ -155,6 +152,10 @@ SSH Agent connection is working! SSH-Agent-Verbindung funktioniert! + + Use both agents + Beide Agents verwenden + ApplicationSettingsWidget @@ -170,10 +171,6 @@ Security Sicherheit - - This setting cannot be enabled when minimize on unlock is enabled. - Diese Einstellung kann nicht aktiviert werden, wenn Minimieren beim Entsperren aktiviert ist. - Access error for config file %1 Zugriffsfehler bei Konfigurationsdatei %1 @@ -218,49 +215,21 @@ You must restart the application to set the new language. Would you like to restart now? Zum Ändern der Sprache müssen Sie die Anwendung neu starten. Möchten Sie jetzt neu starten? + + Reset Settings? + Einstellungen zurücksetzen? + + + Are you sure you want to reset all general and security settings to default? + Wollen Sie alle Einstellungen (allgemein und Sicherheit) auf die Voreinstellung zurücksetzen? + Select backup storage directory Verzeichnis für die Datensicherung auswählen - Confirm Reset - Zurücksetzen bestätigen - - - Are you sure you want to reset all settings to default? - Sind Sie sicher, dass Sie alle Einstellungen auf die Standardwerte zurücksetzen wollen? - - - Import KeePassXC Settings - KeePassXC-Einstellungen importieren - - - Failed to import settings from %1, not a valid settings file. - Fehler beim Importieren von Einstellungen aus %1, keine gültige Einstellungsdatei. - - - Export KeePassXC Settings - KeePassXC-Einstellungen exportieren - - - Small - Klein - - - Normal - Normal - - - Medium - Medium - - - Large - Groß - - - Custom - Benutzerdefiniert + This setting cannot be enabled when minimize on unlock is enabled. + Diese Einstellung kann nicht aktiviert werden, wenn Minimieren beim Entsperren aktiviert ist. @@ -287,15 +256,11 @@ Minimize window after unlocking database - Fenster nach Entsperren der Datenbank minimieren + Nach Entsperren der Datenbank Fenster minimieren Remember previously used databases - Zuletzt verwendete Datenbanken merken: - - - recent files - aktuelle Dateien + Zuletzt verwendete Datenbanken merken Load previously open databases on startup @@ -307,11 +272,30 @@ Check for updates at application startup once per week - Beim Programmstart wöchentlich auf Updates prüfen + Bei Programmstart wöchentlich auf Updates prüfen Include beta releases when checking for updates - Betaversionen bei Update-Prüfung einbeziehen + Bei Update-Prüfung Beta-Versionen einbeziehen + + + On database unlock, show entries that + Beim Entsperren der Datenbank Einträge anzeigen, die + + + have expired + On database unlock, show entries that... + abgelaufen sind + + + days + On database unlock, show entries that will expire within %1 days + Tagen + + + will expire within + On database unlock, show entries that... + ablaufen innerhalb von File Management @@ -327,7 +311,7 @@ Automatically save non-data changes when locking database - Metadaten beim Sperren der Datenbank automatisch speichern + Beim Sperren der Datenbank Metadaten automatisch speichern Automatically reload the database when modified externally @@ -337,17 +321,29 @@ Backup database file before saving Vor dem Speichern Backup der Datenbank erstellen + + Backup destination + Sicherungsziel + + + Specifies the database backup file location. Occurrences of "{DB_FILENAME}" are replaced with the filename of the saved database without extension. {TIME:<format>} is replaced with the backup time, see https://doc.qt.io/qt-5/qdatetime.html#toString. <format> defaults to format string "dd_MM_yyyy_hh-mm-ss". + Gibt den Speicherort der Datenbank-Sicherungsdatei an. "{DB_FILENAME}" wird durch den Dateinamen der gesicherten Datenbank (ohne Erweiterung) ersetzt. {TIME:<format>} wird durch die Sicherungstermin ersetzt (siehe https://doc.qt.io/qt-5/qdatetime.html#toString). <format>Standardmäßig wird "dd_MM_yyyy_hh-mm-ss" verwendet. + {DB_FILENAME}.old.kdbx {DB_FILENAME}.alt.kdbx + + Choose... + Auswählen … + Use alternative saving method (may solve problems with Dropbox, Google Drive, GVFS, etc.) - Alternative Speichermethode verwenden (kann Probleme mit Dropbox, Google Drive, GVFS usw. lösen) + Alternative Speichermethode verwenden (kann Probleme von Dropbox, Google Drive, GVFS usw. lösen) Temporary file moved into place - Temporäre Datei an ihren Platz verschieben + Temporärdatei verschoben Directly write to database file (dangerous) @@ -363,11 +359,11 @@ Minimize when opening a URL - Fenster nach Öffnen einer URL minimieren + Nach Öffnen einer URL Fenster minimieren Hide window when copying to clipboard - Fenster nach Kopieren in Zwischenablage verstecken + Nach Kopieren in Zwischenablage Fenster verstecken Minimize @@ -383,7 +379,7 @@ Website icon download timeout in seconds - Timeout beim Herunterladen von Webseitensymbolen in Sekunden + Timeout beim Herunterladen von Webseiten-Icons in Sekunden sec @@ -396,7 +392,7 @@ Toolbar button style - Design der Symbolleistenschaltflächen + Design der Symbolleisten-Buttons Movable toolbar @@ -416,11 +412,7 @@ Toolbar button style: - Design der Symbolleistenschaltflächen: - - - Show passwords in color - Passwörter farbig anzeigen + Design der Symbolleisten-Buttons: Use monospaced font for notes @@ -448,7 +440,7 @@ Reset settings to default… - Einstellungen auf Voreinstellung zurücksetzen… + Einstellungen auf Voreinstellung zurücksetzen … Auto-Type @@ -468,7 +460,7 @@ Hide expired entries from Auto-Type - Abgelaufene Einträge bei Auto-Type verstecken + Abgelaufene Einträge bei Auto-Type ausblenden Re-lock previously locked database after performing Auto-Type @@ -508,69 +500,12 @@ Zuletzt eingegebenen Eintrag merken für: - On database unlock, show entries that will expire within - Beim Entsperren der Datenbank Einträge anzeigen, die ablaufen in: + recent files + aktuelle Dateien - On database unlock, show entries that will expire within - Beim Entsperren der Datenbank Einträge anzeigen, die ablaufen in: - - - days - number of days warning for password expiration - Tagen - - - Destination format: - Zielformat: - - - <html><head/><body><p><span style=" font-weight:600;">{DB_FILENAME}</span> is replaced with the filename of the saved database without extension</p><p><span style=" font-weight:600;">{TIME:&lt;format&gt;}</span> is replaced with the specified time format (default: dd_MM_yyyy_hh-mm-ss)</p><p>See the User Guide for more details</p></body></html> - <html><head/><body><p><span style=" font-weight:600;">{DB_FILENAME}</span> wird durch den Dateinamen der gespeicherten Datenbank ohne Erweiterung ersetzt</p><p><span style=" font-weight:600;">{TIME:&lt;format&gt;}</span> wird durch das angegebene Zeitformat ersetzt (Standard: dd_MM_yyyy_hh-mm-ss)</p><p>Weitere Einzelheiten finden Sie im Benutzerhandbuch</p></body></html> - - - Choose folder... - Ordner auswählen… - - - Show confirmation before moving entries to recycle bin - Bestätigung vor dem Verschieben von Einträgen in den Papierkorb anzeigen - - - Copy data on double clicking field in entry view - Daten beim Doppelklick auf ein Feld in der Eintragsansicht kopieren - - - Show toolbar - Symbolleiste anzeigen - - - Show the menu bar by pressing the Alt key - Menüleiste durch Drücken der Alt-Taste anzeigen - - - Show menubar - Menüleiste anzeigen - - - Import settings… - Einstellungen importieren… - - - Export settings… - Einstellungen exportieren… - - - Open browser on double clicking URL field in entry view - Browser bei Doppelklick auf das URL-Feld in der Eintragsansicht öffnen - - - Font size: - Schriftgröße: - - - Font size selection - Auswahl der Schriftgröße + Show passwords in color + Passwörter farbig anzeigen @@ -581,7 +516,7 @@ Database lock timeout seconds - Timeout zum Sperren der Datenbank (Sekunden) + Sekunden bis zum Sperren der Datenbank sec @@ -603,7 +538,7 @@ Clipboard clear seconds - Zwischenablage löschen nach … Sekunden + Sekunden bis zum Löschen der Zwischenablage Lock databases after inactivity of @@ -625,9 +560,13 @@ Lock databases after minimizing the window Datenbanken sperren beim Minimieren des Fensters + + Require password repeat when it is visible + Passwort-Wiederholung erforderlich bei sichtbarem Passwort + Hide passwords when editing them - Passwörter beim Bearbeiten verstecken + Passwörter beim Bearbeiten ausblenden Use placeholder for empty password fields @@ -637,29 +576,29 @@ Hide passwords in the entry preview panel Passwörter im Eintrags-Vorschau-Panel verstecken + + Hide entry notes by default + Eintrags-Notizen standardmäßig verstecken + + + Move entries to recycle bin without confirmation + Einträge ohne Bestätigung in den Papierkorb verschieben + + + Enable double click to copy the username/password entry columns + Benutzername/Passwort per Doppelklick kopieren + Privacy Datenschutz Use DuckDuckGo service to download website icons - DuckDuckGo zum Herunterladen von Webseitensymbolen verwenden + DuckDuckGo zum Herunterladen von Webseiten-Symbolen verwenden Hide TOTP in the entry preview panel - TOTP in der Eintragsvorschau verstecken - - - Lock databases when switching user - Datenbanken beim Benutzerwechsel sperren - - - Lock Options - Optionen sperren - - - Hide notes in the entry preview panel - Notizen in der Eintragsvorschau verstecken + TOTP in der Eintragsvorschau ausblenden @@ -682,7 +621,7 @@ KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. - KeePassXC benötigt die Berechtigungen für Barrierefreiheit und Bildschirmaufzeichnung, um globales Auto-Type durchzuführen. Die Bildschirmaufzeichnung ist notwendig, um Einträge über den Fenstertitel zu finden. Falls Sie die Berechtigung bereits erteilt haben, starten Sie KeePasXC bitte neu. + KeePassXC benötigt die Berechtigungen für Barrierefreiheit und Bildschirmaufzeichnung, um globalen Auto-Type durchzuführen. Die Bildschirmaufzeichnung ist notwendig, um Einträge über den Fenstertitel zu finden. Falls Sie die Berechtigung bereits erteilt haben, starten Sie KeePasXC bitte neu. Invalid entry provided @@ -705,13 +644,27 @@ Sehr lange Verzögerung, max. %1: %2 - Entry does not have attribute for PICKCHARS: %1 - Eintrag hat kein Attribut für PICKCHARS: %1 + Invalid conversion type: %1 + Ungültiger Konvertierungstyp: %1 + + + Invalid conversion syntax: %1 + Ungültige Konvertierungs-Syntax: %1 + + + Invalid regular expression syntax %1 +%2 + Ungültige Syntax des regulären Ausdrucks %1 +%2 Invalid placeholder: %1 Ungültiger Platzhalter: %1 + + Entry does not have attribute for PICKCHARS: %1 + Eintrag hat kein Attribut für PICKCHARS: %1 + AutoTypeAssociationsModel @@ -753,6 +706,10 @@ AutoTypePlatformX11 + + Trying to send invalid keysym. + Versuche, ungültiges Tastensymbol zu senden. + Sequence aborted: Caps Lock is on Sequenz wird abgebrochen: Die Feststelltaste ist eingeschaltet @@ -765,10 +722,6 @@ Unable to get valid keycode for key: Kein gültiger Tastencode für Taste: - - Trying to send invalid keyboard symbol. - Es wurde versucht, ein ungültiges Tastatursymbol zu senden. - AutoTypeSelectDialog @@ -789,9 +742,9 @@ Ctrl+3 - Type TOTP<br/> Ctrl+4 - Use Virtual Keyboard (Windows Only)</p> <p>Sie können erweiterte Suchbegriffe verwenden, um Einträge in Ihrer Datenbank zu finden. Die folgenden Tastenkürzel können hilfreich sein:<br/> Strg+F - Datenbanksuche aktivieren/deaktivieren<br/> -Strg+1 - Benutzernamen tippen<br/> -Strg+2 - Passwort tippen<br/> -Strg+3 - TOTP tippen<br/> +Strg+1 - Benutzernamen eingeben<br/> +Strg+2 - Passwort eingeben<br/> +Strg+3 - TOTP eingeben<br/> Strg+4 - Virtuelle Tastatur verwenden (nur Windows)</p> @@ -800,7 +753,7 @@ Strg+4 - Virtuelle Tastatur verwenden (nur Windows)</p> Search… - Suchen… + Suchen … Type Sequence @@ -812,19 +765,19 @@ Strg+4 - Virtuelle Tastatur verwenden (nur Windows)</p> Type {USERNAME} - {USERNAME} tippen + Tippe {USERNAME} Type {PASSWORD} - {PASSWORD} tippen + Tippe {PASSWORD} Type {TOTP} - {TOTP} tippen + Tippe {TOTP} Copy Username - Benutzernamen kopieren + Benutzername kopieren Copy Password @@ -873,13 +826,13 @@ Strg+4 - Virtuelle Tastatur verwenden (nur Windows)</p> Disable for this site Für diese Seite deaktivieren - - Undo - Rückgängig - BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + KeePassXC-Browser Eintrag speichern + Ok Ok @@ -894,74 +847,13 @@ Please select the correct database for saving credentials. Sie haben mehrere Datenbanken geöffnet. Bitte wählen Sie die richtige Datenbank zum Speichern der Anmeldedaten. - - KeePassXC - Select Database - KeePassXC - Datenbank auswählen - - - - BrowserPasskeysConfirmationDialog - - Cancel - Abbrechen - - - Update - Update - - - Authenticate - Authentifizieren - - - Register new - Neu registrieren - - - Register - Registrieren - - - Timeout in <b>%n</b> seconds... - Timeout in <b>%n</b> Sekunde…Timeout in <b>%n</b> Sekunden… - - - Relying Party: %1 - Verlässliche Gegenseite: %1 - - - Username: %1 - Benutzername: %1 - - - KeePassXC - Passkey credentials - KeePassXC - Passkey-Anmeldedaten - - - Add to existing entry - Einem bestehenden Eintrag hinzufügen - - - Existing passkey found. -Do you want to register a new passkey for: - Vorhandenen Passkey gefunden. -Möchten Sie einen neuen Passkey registrieren für: - - - Select the existing passkey and press Update to replace it. - Wählen Sie den vorhandenen Passkey aus und drücken Sie Update, um ihn zu ersetzen. - - - Authenticate passkey credentials for: - Passkey-Anmeldedaten authentifizieren für: - - - Do you want to register a passkey for: - Möchten Sie ein Passkey registrieren für: - BrowserService + + KeePassXC: Create a new group + KeePassXC: Neue Gruppe erstellen + A request for creating a new group "%1" has been received. Do you want to create this group? @@ -970,6 +862,10 @@ Do you want to create this group? Möchten Sie diese Gruppe erstellen? + + KeePassXC: New key association request + KeePassXC: Neue Schlüsselverbindungsanfrage + You have received an association request for the following database: %1 @@ -979,83 +875,87 @@ chrome-laptop. Verbindungsanfrage erhalten für folgende Datenbank: %1 -Geben Sie der Verbindung einen eindeutigen Namen, z. B. „chrome-laptop“. +Geben Sie der Verbindung einen eindeutigen Namen, z. B. "chrome-laptop". Save and allow access Speichern und Zugriff erlauben + + KeePassXC: Overwrite existing key? + KeePassXC: Bestehenden Schlüssel überschreiben? + A shared encryption key with the name "%1" already exists. Do you want to overwrite it? Ein geteilter Schlüssel mit dem Namen „%1“ existiert bereits. Möchten Sie ihn überschreiben? + + KeePassXC: Update Entry + KeePassXC: Eintrag aktualisiert + Do you want to update the information in %1 - %2? Möchten Sie die Informationen in %1 - %2 aktualisieren? + + KeePassXC: Delete entry + KeePassXC: Eintrag löschen + A request for deleting entry "%1" has been received. Do you want to delete the entry? - Anfrage zum Löschen des Eintrags „%1“ erhalten. + Anfrage zum Löschen des Eintrags "%1" erhalten. Möchten Sie den Eintrag löschen? - %1 (Passkey) - %1 (Passkey) + Converting attributes to custom data… + Eigenschaften werden in Plugin-Daten umgewandelt ... - KeePassXC - Create a new group - KeePassXC - Neue Gruppe erstellen + Abort + Abbrechen - Disable - Deaktivieren + KeePassXC: Converted KeePassHTTP attributes + KeepassXC: KeePassHTTP-Eigenschaften wurden umgewandelt - KeePassXC - Overwrite existing key? - KeePassXC - Bestehenden Schlüssel überschreiben? + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + Eigenschaften von %1 Einträgen wurden erfolgreich umgewandelt. +%2 Schlüssel in die Plugin-Daten verschoben. + + + Successfully moved %n keys to custom data. + %1 Einträge wurden erfolgreich umgewandelt%n Schlüssel wurden erfolgreich in die Plugin-Daten verschoben. - KeePassXC - Update Entry - KeePassXC - Eintrag aktualisieren + KeePassXC: No entry with KeePassHTTP attributes found! + KeePassXC: Kein Eintrag mit KeePassHTTP-Eigenschaften gefunden! - KeePassXC - Delete entry - KeePassXC - Eintrag löschen + The active database does not contain an entry with KeePassHTTP attributes. + Die aktive Datenbank enthält keinen Eintrag mit KeePassHTTP-Eigenschaften. - KeePassXC - New key association request - KeePassXC - Neue Anforderung einer Schlüsselzuordnung + Don't show this warning again + Diese Warnung nicht wieder anzeigen - Passkey - Passkey + KeePassXC: Legacy browser integration settings detected + KeePassXC: Veraltete Einstellungen für Browser-Integration gefunden - KeePassXC - Passkey credentials - KeePassXC - Passkey-Anmeldedaten - - - Register a new passkey to this entry: - Registrieren Sie einen neuen Passkey für diesen Eintrag: - - - KeePassXC - Update passkey - KeePassXC - Passkey aktualisieren - - - Entry already has a passkey. -Do you want to overwrite the passkey in %1 - %2? - Eintrag hat bereits einen Passkey. -Möchten Sie den Passkey in %1 - %2 überschreiben? - - - Register - Registrieren + 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? + Ihre KeePassXC-Browser-Einstellungen müssen in die Datenbankeinstellungen verschoben werden. +Dies ist notwendig, um Ihre aktuellen Browserverbindungen aufrechtzuerhalten. +Möchten Sie Ihre bestehenden Einstellungen jetzt migrieren? @@ -1076,6 +976,10 @@ Möchten Sie den Passkey in %1 - %2 überschreiben? General Allgemein + + Browsers installed as snaps are currently not supported. + Browser, die als Snaps installiert sind, werden derzeit nicht unterstützt. + Enable integration for these browsers: Integration für diese Browser aktivieren: @@ -1115,11 +1019,11 @@ Möchten Sie den Passkey in %1 - %2 überschreiben? Request to unlock the database if it is locked - Entsperrung anfragen, wenn die Datenbank gesperrt ist + Entsperren anfragen, wenn die Datenbank gesperrt ist Only entries with the same scheme (http://, https://, …) are returned. - Es werden nur Einträge mit dem gleichen Schema (http://, https:// …) zurückgegeben. + Es werden nur Einträge mit dem gleichen Schema (http://, https://, …) zurückgegeben. Match URL scheme (e.g., https://example.com) @@ -1127,15 +1031,15 @@ Möchten Sie den Passkey in %1 - %2 überschreiben? Only returns the best matches for a specific URL instead of all entries for the whole domain. - Nur die am besten passenden Einträge für eine URL anzeigen, statt alle Einträge der ganzen Domain. + Nur die am besten passenden Einträge für eine URL anzeigen (statt aller Einträge der gesamten Domain) Return only best-matching credentials - Nur am besten passende Anmeldedaten zurückliefern + Nur am besten passende Anmeldedaten zurückgeben Returns expired credentials. String [expired] is added to the title. - Abgelaufene Anmeldedaten zurückgeben. An den Titel wird [abgelaufen] angehängt. + Abgelaufene Anmeldedaten zurückgeben. "Abgelaufen" wird an den Titel angehängt. Allow returning expired credentials @@ -1157,17 +1061,17 @@ Möchten Sie den Passkey in %1 - %2 überschreiben? Never ask before accessing credentials Credentials mean login data requested via browser extension - Niemals vor dem Zugriff auf Anmeldeinformationen fragen + Niemals fragen, bevor auf Anmeldedaten zugegriffen wird Never ask before updating credentials Credentials mean login data requested via browser extension - Niemals vor der Aktualisierung der Anmeldedaten fragen + Niemals fragen, bevor Anmeldedaten aktualisiert werden Do not ask permission for HTTP Basic Auth An extra HTTP Basic Auth setting - Nicht nach Berechtigung für HTTP-Basisauthentifizierung fragen + Nicht nach Berechtigung für "HTTP Basic Auth" fragen Automatically creating or updating string fields is not supported. @@ -1175,11 +1079,11 @@ Möchten Sie den Passkey in %1 - %2 überschreiben? Return advanced string fields which start with "KPH: " - Auch erweiterte Attribute anzeigen, die mit „KPH: “ beginnen + Auch erweiterte Attribute anzeigen, die mit "KPH: " beginnen Don't display the popup suggesting migration of legacy KeePassHTTP settings. - Kein Pop-up-Fenster anzeigen, das die Migration der alten KeePassHTTP-Einstellungen vorschlägt. + Kein Popup zeigen, das die Migration von älteren KeePassHTTP-Einstellungen vorschlägt. Do not prompt for KeePassHTTP settings migration. @@ -1200,7 +1104,7 @@ Möchten Sie den Passkey in %1 - %2 überschreiben? Use a custom proxy location: Meant is the proxy for KeePassXC-Browser - Benutzerdefinierten Proxy-Pfad verwenden + Benutzerdefinierten Proxy-Pfad verwenden: Custom proxy location field @@ -1213,11 +1117,11 @@ Möchten Sie den Passkey in %1 - %2 überschreiben? Browse… Button for opening file dialog - Durchsuchen… + Durchsuchen … Use a custom browser configuration location: - Benutzerdefinierten Browser-Konfigurationspfad verwenden: + Benutzerdefinierten Browser-Konfigurations-Pfad verwenden: Browser type: @@ -1225,19 +1129,19 @@ Möchten Sie den Passkey in %1 - %2 überschreiben? Toolbar button style - Design der Symbolleistenschaltflächen + Design der Symbolleisten-Buttons Config Location: - Konfigurationspfad: + Konfigurations-Pfad: Custom browser location field - Feld für benutzerdefinierten Browserpfad + Feld für benutzerdefinierten Browser-Pfad Browse for custom browser path - Nach benutzerdefiniertem Browserpfad suchen + Nach benutzerdefiniertem Browser-Pfad suchen Custom extension ID: @@ -1247,6 +1151,26 @@ Möchten Sie den Passkey in %1 - %2 überschreiben? Custom extension ID Benutzerdefinierte Erweiterungs-ID + + Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 + Aufgrund von Snap-Sandboxing müssen Sie ein Skript ausführen, um die Browser-Integration zu aktivieren.<br />Sie erhalten dieses Skript hier: %1 + + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 + Für die Browserintegration wird KeePassXC-Browser benötigt. <br />Laden Sie es für %1 und %2 und %3 herunter. %4 + + + Please see special instructions for browser extension use below + Bitte beachten Sie die untenstehenden speziellen Anweisungen für die Verwendung der Browser-Erweiterung + + + <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. + <b>Fehler:</b> Benutzerdefinierter Proxy-Pfad nicht gefunden!<br/>Ohne Proxy-Anwendung wird die Browser-Integration nicht funktionieren. + + + <b>Warning:</b> The following options can be dangerous! + <b>Warnung:</b> Die folgenden Einstellungen können gefährlich sein! + Executable Files Ausführbare Dateien @@ -1261,47 +1185,7 @@ Möchten Sie den Passkey in %1 - %2 überschreiben? Select native messaging host folder location - Ordnerpfad für Native-Messaging-Host auswählen - - - Allow keepassxc-proxy to list all entries with their title, URL and UUID in connected databases. - Erlauben Sie KeePassXC-Proxy, alle Einträge mit Titel, URL und UUID in verbundenen Datenbanken aufzulisten. - - - Allow limited access to all entries in connected databases (ignores site access restrictions) - Eingeschränkten Zugriff auf alle Einträge in verbundenen Datenbanken zulassen (ignoriert Zugriffsbeschränkungen für Internetseiten) - - - <b>Warning:</b> Only adjust these settings if necessary. - <b>Warnung:</b> Diese Einstellungen sollten nur bei Bedarf angepasst werden. - - - The custom proxy location does not exist. - Der benutzerdefinierte Proxy-Pfad ist nicht vorhanden. - - - <b>Error:</b> The custom proxy location does not exist. Correct this in the advanced settings tab. - <b>Fehler:</b> Der benutzerdefinierte Proxy-Pfad ist nicht vorhanden. Korrigieren Sie dies auf dem Tab „Fortgeschritten“. - - - <b>Error:</b> The installed proxy executable is missing from the expected location: %1<br/>Please set a custom proxy location in the advanced settings or reinstall the application. - <b>Fehler:</b> Die installierte ausführbare Proxy-Datei fehlt am erwarteten Speicherort: %1<br/>Bitte legen Sie in den erweiterten Einstellungen einen benutzerdefinierten Proxy-Pfad fest oder installieren Sie die Anwendung neu. - - - Allows using insecure http://localhost with passkeys for testing purposes. - Nutzung von unsicheren http://localhost mit Passkeys zu Testzwecken zulassen. - - - Allow using localhost with passkeys - Nutzung von localhost mit Passkeys zulassen - - - KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. - KeePassXC-Browser wird für die Browserintegration benötigt. <br />Laden Sie ihn für %1 und %2 und %3 herunter. - - - Browsers installed using Snap or Flatpak are not supported with exception to Firefox installed using Snap. - Mit Snap oder Flatpak installierte Browser werden nicht unterstützt, mit Ausnahme von Firefox, der mit Snap installiert wurde. + Ordner-Pfad für Native-Messaging-Host auswählen @@ -1325,13 +1209,21 @@ Möchten Sie den Passkey in %1 - %2 überschreiben? CsvImportWidget + + Import CSV fields + CSV-Felder importieren + + + filename + Dateiname + size, rows, columns Größe, Zeilen, Spalten Column Association - Spaltenzuordnung + Spalten-Zuordnung Password @@ -1367,7 +1259,7 @@ Möchten Sie den Passkey in %1 - %2 überschreiben? Last Modified - Zuletzt bearbeitet + Zuletzt geändert Icon @@ -1415,7 +1307,7 @@ Möchten Sie den Passkey in %1 - %2 überschreiben? Consider '\' an escape character - „\“ als Maskierungszeichen behandeln + „\“ als Maskierungs-Zeichen behandeln Preview @@ -1433,44 +1325,50 @@ Möchten Sie den Passkey in %1 - %2 überschreiben? Column %1 Spalte %1 + + Imported from CSV file + Aus CSV-Datei importiert + + + Original data: + Original-Daten: + + + Error(s) detected in CSV file! + Fehler in CSV-Datei gefunden! + [%n more message(s) skipped] [zusätzlich %n Nachricht(en) übersprungen][%n weitere Nachricht(en) übersprungen] - Failed to parse CSV file: %1 - CSV-Datei konnte nicht verarbeitet werden: %1 + Error + Fehler - Imported from CSV file: %1 - Aus CSV-Datei: %1 importiert - - - No Title Selected - Kein Titel ausgewählt - - - No title column was selected, entries will be hard to tell apart. -Are you sure you want to import? - Es wurde keine Titelspalte ausgewählt, sodass die Einträge schwer zu unterscheiden sind. -Sind Sie sicher, dass Sie importieren möchten? - - - Tags - Tags + CSV import: writer has errors: +%1 + CSV-Import: Fehler beim Schreiben: %1 CsvParserModel + + %1, %2, %3 + file info: bytes, rows, columns + %1, %2, %3 + + + %n byte(s) + %n Byte(s)%n Byte(s) + %n row(s) - CSV row count - %n Zeile%n Zeilen + %n Zeile(n)%n Zeile(n) %n column(s) - CSV column count - %n Spalte%n Spalten + %n Spalte%n Spalte(n) @@ -1494,15 +1392,15 @@ Sind Sie sicher, dass Sie importieren möchten? Could not save, database does not point to a valid file. - Kann nicht abspeichern, Datenbank verweist nicht auf eine gültige Datei. + Kann nicht abspeichern, Datenbank verweist auf keine gültige Datei. Database save is already in progress. - Speichern der Datenbank wird bereits ausgeführt. + Die Datenbank wird bereits gespeichert. Could not save, database has not been initialized! - Kann nicht abspeichern, die Datenbank wurde nicht initialisiert! + Kann nicht abspeichern, die Datenbank ist nicht initialisiert worden! Database file has unmerged changes. @@ -1516,20 +1414,12 @@ Sicherungskopie der Datenbank ist in %2 Key not transformed. This is a bug, please report it to the developers. - Schlüssel nicht umgewandelt. Dies ist ein Fehler, bitte melden Sie ihn den Entwicklern. + Schlüssel nicht umgewandelt. Dies ist ein Programmfehler, bitte benachrichtigen Sie die Entwickler. Recycle Bin Papierkorb - - Database file read error. - Fehler beim Lesen der Datenbankdatei. - - - No file path was provided. - Es wurde kein Dateipfad angegeben. - DatabaseOpenDialog @@ -1550,12 +1440,32 @@ Sicherungskopie der Datenbank ist in %2 Password field - Passwortfeld + Passwort-Feld + + + Enter Additional Credentials (if any): + Zusätzliche Anmeldedaten eingeben (falls vorhanden): + + + Key File: + Schlüsseldatei: + + + Key file help + Hilfe zur Schlüsseldatei Hardware key slot selection Auswahl des Hardwareschlüssel-Slots + + Hardware Key: + Hardwareschlüssel: + + + Hardware key help + Hilfe zu Hardwareschlüsseln + Key file to unlock the database Schlüsseldatei zum Entsperren der Datenbank @@ -1566,7 +1476,15 @@ Sicherungskopie der Datenbank ist in %2 Browse… - Durchsuchen… + Durchsuchen … + + + Refresh hardware tokens + Hardware-Token aktualisieren + + + Refresh + Neu laden Unlock Database @@ -1582,7 +1500,7 @@ Sicherungskopie der Datenbank ist in %2 Please present or touch your YubiKey to continue… - Bitte halten oder berühren Sie Ihren YubiKey, um fortzufahren… + Bitte YubiKey vorhalten oder berühren, um fortzufahren … Database Version Mismatch @@ -1596,13 +1514,13 @@ You can try to open it anyway, but it may be incomplete and saving any changes may incur data loss. We recommend you update your KeePassXC installation. - Die Datenbank, die Sie öffnen wollen, wurde höchstwahrscheinlich + Die Datenbank, die Sie öffnen wollen, wurde wahrscheinlich mit einer neueren Version von KeePassXC erstellt. -Sie können trotzdem versuchen, sie zu öffnen, aber sie könnte unvollständig sein -und das Speichern von Änderungen kann zu Datenverlusten führen. +Sie können trotzdem versuchen, sie zu öffnen, aber sie könnte unvollständig sein, +und das Speichern von Änderungen kann zu Datenverlust führen. -Wir empfehlen Ihnen, Ihre KeePassXC-Installation zu aktualisieren. +Wir empfehlen, ein Update von KeePassXC zu installieren. Open database anyway @@ -1610,7 +1528,7 @@ Wir empfehlen Ihnen, Ihre KeePassXC-Installation zu aktualisieren. Database unlock canceled. - Datenbankentsperrung abgebrochen. + Entsperren der Datenbank abgebrochen. Unlock failed and no password given @@ -1621,14 +1539,18 @@ Wir empfehlen Ihnen, Ihre KeePassXC-Installation zu aktualisieren. Do you want to retry with an "empty" password instead? To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. - Das Entsperren der Datenbank ist fehlgeschlagen und Sie haben kein Passwort eingegeben. -Möchten Sie es stattdessen mit einem „leeren“ Passwort versuchen? + Das Entsperren der Datenbank ist fehlgeschlagen, und Sie haben kein Passwort eingegeben. +Möchten Sie es stattdessen mit einem "leeren" Passwort versuchen? -Um diesen Fehler zu vermeiden, müssen Sie zu „Datenbankeinstellungen → Sicherheit“ gehen und Ihr Passwort zurücksetzen. +Um zu verhindern, dass dieser Fehler auftritt, müssen Sie zu "Datenbankeinstellungen > Sicherheit" gehen und Ihr Passwort zurücksetzen. Retry with empty password - Mit leerem Passwort wiederholen + Mit leerem Passwort versuchen + + + Failed to authenticate with Touch ID + Authentifizierung mit Touch ID fehlgeschlagen Failed to open key file: %1 @@ -1636,11 +1558,11 @@ Um diesen Fehler zu vermeiden, müssen Sie zu „Datenbankeinstellungen → Sich Old key file format - Altes Schlüsseldateiformat + Schlüsseldatei im alten Format You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database &gt; Database Security &gt; Change Key File.</strong><br> - Sie verwenden ein altes Schlüsseldateiformat, das KeePassXC in Zukunft<br>möglicherweise nicht mehr unterstützen wird.<br><br>Bitte überlegen Sie, eine neue Schlüsseldatei zu erzeugen, indem Sie zu<br><strong>Datenbank &gt; Datenbanksicherheit &gt; Schlüsseldatei ändern</strong><br> gehen. + Sie verwenden ein altes Schlüsseldateiformat, das KeePassXC in Zukunft möglicherweise<br> nicht mehr unterstützen wird.<br><br>Sie können hier eine neue Schlüsseldatei erzeugen:<br><strong>Datenbank &gt; Datenbank-Sicherheit &gt; Schlüsseldatei ändern.<br> Don't show this warning again @@ -1662,69 +1584,41 @@ Um diesen Fehler zu vermeiden, müssen Sie zu „Datenbankeinstellungen → Sich Cannot use database file as key file Datenbankdatei kann nicht als Schlüsseldatei verwendet werden + + You cannot use your database file as a key file. +If you do not have a key file, please leave the field empty. + Sie können Ihre Datenbank nicht als Schlüsseldatei verwenden. +Wenn Sie keine Schlüsseldatei haben, lassen Sie das Feld leer. + + + Detecting hardware keys… + Suche Hardwareschlüssel … + + + No hardware keys detected + Keine Hardwareschlüssel gefunden + + + Select hardware key… + Hardwareschlüssel auswählen … + + + <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information…</p> + <p>Zusätzlich zu einem Passwort können Sie eine geheime Datei verwenden, um die Sicherheit Ihrer Datenbank zu erhöhen. Sie können diese Datei in den Sicherheitseinstellungen Ihrer Datenbank erzeugen.</p></p>Dies ist <strong>nicht</strong> Ihre *.kdbx-Datenbankdatei!<br>Wenn Sie keine Schlüsseldatei haben, lassen Sie dieses Feld leer.</p><p>Klicken Sie für weitere Informationen …</p> + + + <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +<p>Click for more information…</p> + <p>Sie können einen Hardware-Sicherheitsschlüssel wie z. B. <strong>YubiKey</strong> oder <strong>OnlyKey</strong> mit für HMAC-SHA1 konfigurierten Slots verwenden.</p> +<p>Klicken Sie für weitere Informationen ...</p> + authenticate to access the database zum Zugriff auf die Datenbank authentifizieren - Failed to authenticate with Quick Unlock: %1 - Authentifizierung mit Quick Unlock fehlgeschlagen: %1 - - - Select Key File: - Schlüsseldatei auswählen: - - - <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!</p> - <p>Zusätzlich zu einem Passwort können Sie eine geheime Datei verwenden, um die Sicherheit Ihrer Datenbank zu erhöhen. Diese Datei kann in den Sicherheitseinstellungen Ihrer Datenbank erzeugt werden.</p><p>Dies ist <strong>nicht</strong> Ihre *.kdbx-Datenbankdatei!</p> - - - Use hardware key [Serial: %1] - Hardwareschlüssel verwenden [Seriennummer: %1] - - - Use hardware key - Hardwareschlüssel verwenden - - - Your database file is NOT a key file! -If you don't have a key file or don't know what that is, you don't have to select one. - Ihre Datenbankdatei ist KEINE Schlüsseldatei! -Wenn Sie keine Schlüsseldatei haben oder nicht wissen, was das ist, müssen Sie keine auswählen. - - - KeePassXC database file selected - KeePassXC-Datenbankdatei ausgewählt - - - The file you selected looks like a database file. -A database file is NOT a key file! - -Are you sure you want to continue with this file?. - Die von Ihnen ausgewählte Datei sieht aus wie eine Datenbankdatei. -Eine Datenbankdatei ist KEINE Schlüsseldatei! - -Sind Sie sicher, dass Sie mit dieser Datei fortfahren wollen? - - - No hardware keys found. - Keine Hardwareschlüssel gefunden. - - - Refresh Hardware Keys - Hardwareschlüssel aktualisieren - - - Click to add a key file. - Durch Anklicken können Sie eine Schlüsseldatei hinzufügen. - - - <a href="#" style="text-decoration: underline">I have a key file</a> - <a href="#" style="text-decoration: underline">Ich habe eine Schlüsseldatei</a> - - - Hardware keys found, but no slots are configured. - Hardwareschlüssel gefunden, es sind aber keine Slots konfiguriert. + Failed to authenticate with Windows Hello: %1 + Authentifizierung mit Windows Hello fehlgeschlagen: %1 @@ -1736,6 +1630,10 @@ Sind Sie sicher, dass Sie mit dieser Datei fortfahren wollen? DatabaseSettingsDialog + + Advanced Settings + Fortgeschrittene Einstellungen + General Allgemein @@ -1760,22 +1658,6 @@ Sind Sie sicher, dass Sie mit dieser Datei fortfahren wollen? Maintenance Wartung - - KeeShare - KeeShare - - - Secret Service Integration - Secret-Service-Integration - - - Remote Sync - Fernsynchronisierung - - - Database Settings: %1 - Datenbankeinstellungen: %1 - DatabaseSettingsWidgetBrowser @@ -1783,6 +1665,18 @@ Sind Sie sicher, dass Sie mit dieser Datei fortfahren wollen? KeePassXC-Browser settings KeePassXC-Browser-Einstellungen + + Convert KeePassHTTP data + KeePassHTTP-Daten konvertieren + + + Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data + Veraltete KeePassHTTP-Eigenschaften in KeePassXC-Browser-kompatible Plugin-Daten konvertieren + + + Refresh database root group ID + ID der Datenbank-Root-Gruppe erneuern + Disconnect all browsers Alle Browserverbindungen entfernen @@ -1791,17 +1685,13 @@ Sind Sie sicher, dass Sie mit dieser Datei fortfahren wollen? Forget all site-specific settings on entries Alle auf Internetseiten bezogenen Einstellungen löschen - - Refresh database root group ID - ID der Datenbank-Root-Gruppe erneuern - Stored keys Gespeicherte Schlüssel Stored browser keys - Gespeicherte Browserschlüssel + Gespeicherte Browser-Schlüssel Remove selected key @@ -1843,10 +1733,18 @@ This may prevent connection to the browser plugin. Möchten Sie wirklich alle Browserverbindungen entfernen? Das wird die Verbindung zum Browser-Plugin verhindern. + + KeePassXC: No keys found + KeePassXC: Keine Schlüssel gefunden + No shared encryption keys found in KeePassXC settings. Keine geteilten Schlüssel in den KeePassXC-Einstellungen gefunden. + + KeePassXC: Removed keys from database + KeePassXC: Schlüssel aus der Datenbank entfernt + Successfully removed %n encryption key(s) from KeePassXC settings. %n Schlüssel erfolgreich aus KeePassXC-Einstellungen entfernt.%n Schlüssel erfolgreich aus KeePassXC-Einstellungen entfernt. @@ -1865,14 +1763,32 @@ Zugriffserlaubnisse zu allen Einträgen werden gelöscht. 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.Berechtigungen aus %n Einträgen erfolgreich entfernt. + + 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-Eigenschaften in die Plugin-Daten verschieben + + + Do you really want to convert all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + Wollen Sie wirklich alle alten Daten der Browser-Integration auf den neuesten Standard umstellen? +Das ist notwendig, um die Kompatibilität mit dem Browser-Plugin zu erhalten. + Refresh database ID Datenbank-ID erneuern @@ -1881,34 +1797,14 @@ Zugriffserlaubnisse zu allen Einträgen werden gelöscht. Do you really want refresh the database ID? This is only necessary if your database is a copy of another and the browser extension cannot connect. Wollen Sie wirklich die Datenbank-ID erneuern? -Dies ist nur nötig, wenn Ihre Datenbank eine Kopie einer anderen ist und die Browser-Erweiterung sich nicht verbinden kann. - - - Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data - Veraltete KeePassHTTP-Eigenschaften in KeePassXC-Browser-kompatible Plugin-Daten konvertieren - - - No keys found - Keine Schlüssel gefunden - - - Removed keys from database - Schlüssel aus der Datenbank entfernt - - - Removed permissions - Berechtigungen entfernt - - - No entry with permissions found! - Kein Eintrag mit Berechtigungen gefunden! +Das ist nur notwendig, wenn Ihre Datenbank eine Kopie einer anderen ist und die Browser-Erweiterung sich nicht verbinden kann. DatabaseSettingsWidgetDatabaseKey Add additional protection… - Zusätzlichen Schutz hinzufügen… + Zusätzlichen Schutz hinzufügen ... No password set @@ -1918,7 +1814,7 @@ Dies ist nur nötig, wenn Ihre Datenbank eine Kopie einer anderen ist und die Br 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! Sie haben kein Passwort festgelegt. Es wird dringend davon abgeraten, eine Datenbank ohne Passwort zu benutzen! + WARNUNG! Sie haben kein Passwort festgelegt. Es wird streng davon abgeraten, eine Datenbank ohne Passwort zu benutzen! Wollen Sie wirklich ohne Passwort fortfahren? @@ -1942,18 +1838,6 @@ Wollen Sie wirklich ohne Passwort fortfahren? Failed to change database credentials Fehler beim Ändern der Datenbank-Anmeldedaten - - Weak password - Schwaches Passwort - - - This is a weak password! For better protection of your secrets, you should choose a stronger password. - Dies ist ein schwaches Passwort! Um Ihre Geheimnisse besser zu schützen, sollten Sie ein stärkeres Passwort wählen. - - - The provided password does not meet the minimum quality requirement. - Das übermittelte Passwort entspricht nicht den Mindestanforderungen. - DatabaseSettingsWidgetEncryption @@ -1961,6 +1845,14 @@ Wollen Sie wirklich ohne Passwort fortfahren? Decryption Time: Zeit zum Entschlüsseln: + + Change existing decryption time + Vorhandene Entschlüsselungszeit ändern + + + Change + Ändern + Decryption time in seconds Entschlüsselungszeit in Sekunden @@ -2023,7 +1915,7 @@ Wollen Sie wirklich ohne Passwort fortfahren? Memory usage - Speicherverbrauch + Speicherbelegung Parallelism: @@ -2041,6 +1933,11 @@ Wollen Sie wirklich ohne Passwort fortfahren? KDBX 3 KDBX 3 + + unchanged + Database decryption time is unchanged + unverändert + Number of rounds too high Key transformation rounds @@ -2093,18 +1990,6 @@ Wenn Sie diese Zahl beibehalten, ist Ihre Datenbank nicht vor Brute-Force-Angrif Threads for parallel execution (KDF settings) Thread(s)Thread(s) - - Encryption Settings: - Verschlüsselungseinstellungen: - - - Basic - Allgemein - - - Advanced - Fortgeschritten - DatabaseSettingsWidgetFdoSecrets @@ -2153,7 +2038,7 @@ Wenn Sie diese Zahl beibehalten, ist Ihre Datenbank nicht vor Brute-Force-Angrif Default username field - Standard-Benutzernamensfeld + Standard-Benutzernamen-Feld History Settings @@ -2161,7 +2046,7 @@ Wenn Sie diese Zahl beibehalten, ist Ihre Datenbank nicht vor Brute-Force-Angrif Maximum number of history items per entry - Maximale Anzahl von Verlaufselementen pro Eintrag + Maximale Anzahl von Verlaufs-Elementen pro Eintrag Maximum size of history per entry @@ -2195,7 +2080,7 @@ Das kann nicht rückgängig gemacht werden. (old) - (alt) + (alt) When saving this setting or editing an entry @@ -2235,70 +2120,6 @@ anstatt sie aus der Datenbank zu löschen. Aus dem Papierkorb gelöschte Einträge werden aus der Datenbank entfernt. - - Autosave delay since last change - Verzögerung beim automatischen Speichern seit der letzten Änderung - - - Autosave delay - Verzögerung beim automatischen Speichern - - - Autosave delay since last change in minutes - Verzögerung beim automatischen Speichern seit der letzten Änderung in Minuten - - - min - min - - - Autosave delay since last change checkbox - Verzögerung beim automatischen Speichern seit der letzten Änderung (Checkbox) - - - Public Database Metadata - Öffentliche Datenbank-Metadaten - - - Warning: the following settings are not encrypted. - Warnung: Die folgenden Einstellungen sind nicht verschlüsselt. - - - Display name: - Anzeigename: - - - Publically visible display name used on the unlock dialog - Öffentlich sichtbarer Anzeigename, der im Entsperrdialog verwendet wird - - - Database public display name - Öffentlicher Anzeigename der Datenbank - - - Display color: - Anzeigefarbe: - - - Publically visible color used on the unlock dialog - Öffentlich sichtbare Farbe, die im Entsperrdialog verwendet wird - - - Database public display color chooser - Öffentliche Anzeigefarbwahl der Datenbank - - - Clear - Löschen - - - Display icon: - Anzeigesymbol: - - - Select Database Icon - Datenbanksymbol auswählen - DatabaseSettingsWidgetKeeShare @@ -2336,19 +2157,19 @@ aus der Datenbank entfernt. DatabaseSettingsWidgetMaintenance Manage Custom Icons - Benutzerdefinierte Symbole verwalten + Benutzerdefinierte Icons verwalten Delete selected icon(s) - Ausgewählte Symbole löschen + Ausgewählte Icons löschen Delete all custom icons not in use by any entry or group - Alle benutzerdefinierten Symbole löschen, die nicht von einem Eintrag oder einer Gruppe verwendet werden + Alle benutzerdefinierten Icons löschen, die nirgendwo verwendet werden Purge unused icons - Unbenutzte Symbole löschen + Unbenutzte Icons löschen Confirm Deletion @@ -2356,23 +2177,23 @@ aus der Datenbank entfernt. At least one of the selected icons is currently in use by at least one entry or group. The icons of all affected entries and groups will be replaced by the default icon. Are you sure you want to delete icons that are currently in use? - Mindestens eines der ausgewählten Symbole wird derzeit von mindestens einem Eintrag oder einer Gruppe verwendet. Die Symbole aller betroffenen Einträge und Gruppen werden durch das Standardsymbol ersetzt. Sind Sie sicher, dass Sie die derzeit verwendeten Symbole löschen möchten? + Mindestens eines der ausgewählten Icons wird derzeit von mindestens einem Eintrag oder einer Gruppe verwendet. Die Icons aller betroffenen Einträge und Gruppen werden durch das Standard-Icon ersetzt. Sind Sie sicher, dass Sie Icons löschen möchten, die noch in Verwendung sind? Custom Icons Are In Use - Benutzerdefinierte Symbole sind in Verwendung + Benutzerdefinierte Icons sind in Verwendung All custom icons are in use by at least one entry or group. - Alle benutzerdefinierten Symbole werden von mindestens einem Eintrag oder einer Gruppe verwendet. + Alle benutzerdefinierten Icons werden von mindestens einem Eintrag oder einer Gruppe verwendet. Purged Unused Icons - Unbenutzte Symbole löschen + Unbenutzte Icons löschen Purged %n icon(s) from the database. - Es wurde %n Symbol aus der Datenbank gelöscht.Es wurden %n Symbole aus der Datenbank gelöscht. + Es wurde %n Symbol aus der Datenbank gelöscht.%n Icon(s) gelöscht. @@ -2394,141 +2215,6 @@ aus der Datenbank entfernt. Beschreibungsfeld der Datenbank - - DatabaseSettingsWidgetRemote - - Sync Commands - Synchronisierungsbefehle - - - Remove - Entfernen - - - Command Settings - Befehlseinstellungen - - - Name - Name - - - Save - Speichern - - - Download - Herunterladen - - - Command: - Befehl: - - - Download command field - Feld für den Download-Befehl - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - z. B.: „sftp user@hostname“ or „scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}“ - - - Input: - Eingabe: - - - Download input field - Eingabefeld für den Download - - - Upload - Hochladen - - - Upload command field - Feld für den Upload-Befehl - - - e.g.: "sftp user@hostname" or "scp {TEMP_DATABASE} user@hostname:DatabaseOnRemote.kdbx" - z. B.: „sftp user@hostname“ oder „scp {TEMP_DATABASE} user@hostname:DatabaseOnRemote.kdbx“ - - - Upload input field - Eingabefeld für den Upload - - - Name cannot be empty. - Der Name darf nicht leer sein. - - - Test - Test - - - Download command cannot be empty. - Der Download-Befehl darf nicht leer sein. - - - Download failed with error: %1 - Herunterladen fehlgeschlagen mit Fehler: %1 - - - Download finished, but file %1 could not be found. - Herunterladen beendet, aber Datei %1 konnte nicht gefunden werden. - - - Download successful. - Herunterladen erfolgreich. - - - Save Remote Settings - Ferneinstellungen speichern - - - You have unsaved changes. Do you want to save them? - Sie haben ungespeicherte Änderungen. Möchten Sie sie speichern? - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - z. B.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} wird als Platzhalter verwendet, um die Datenbank an einem temporären Ort zu speichern -Der Befehl muss beendet werden. Im Falle von `sftp` muss als letzter Befehl `exit` gesendet werden - - - - e.g.: -put {TEMP_DATABASE} DatabaseOnRemote.kdbx -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - z. B.: -put {TEMP_DATABASE} DatabaseOnRemote.kdbx -exit ---- -{TEMP_DATABASE} wird als Platzhalter verwendet, um die Datenbank an einem temporären Ort zu speichern -Der Befehl muss beendet werden. Im Falle von `sftp` muss als letzter Befehl `exit` gesendet werden - - - - Timeout: - Timeout: - - - seconds - Sekunden - - DatabaseTabWidget @@ -2561,10 +2247,26 @@ Das ist definitiv ein Programmfehler, bitte benachrichtigen Sie die Entwickler.< CSV file CSV-Datei + + Select CSV file + CSV-Datei auswählen + Merge database Datenbank zusammenführen + + KeePass 1 database + KeePass 1-Datenbank + + + Open KeePass 1 database + KeePass 1-Datenbank öffnen + + + Open OPVault + OPVault öffnen + Export database to CSV file Datenbank als CSV-Datei exportieren @@ -2577,9 +2279,31 @@ Das ist definitiv ein Programmfehler, bitte benachrichtigen Sie die Entwickler.< Writing the HTML file failed. Fehler beim Schreiben der HTML-Datei. + + Export Confirmation + Export bestätigen + + + You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? + Ihre Datenbank wird in eine unverschlüsselte Datei exportiert. Dadurch werden Ihre Passwörter und anderen Daten anfällig! Wollen Sie wirklich fortfahren? + + + New Database + Neue Datenbank + + + %1 [New Database] + Database tab name modifier + %1 [Neue Datenbank] + + + %1 [Locked] + Database tab name modifier + %1 [Gesperrt] + Export database to XML file - Datenbank als XML-Datei exportieren + Datenbank in XML-Datei exportieren XML file @@ -2589,38 +2313,16 @@ Das ist definitiv ein Programmfehler, bitte benachrichtigen Sie die Entwickler.< Writing the XML file failed Fehler beim Schreiben der XML-Datei. - - Export Confirmation - Export bestätigen - - - You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? - Ihre Datenbank wird in eine unverschlüsselte Datei exportiert. Dadurch werden Ihre Passwörter und anderen Daten anfällig! Wollen Sie wirklich fortfahren? - - - %1 [Locked] - Database tab name modifier - %1 [Gesperrt] - - - %1 [Temporary] - Database tab name modifier - %1 [Temporär] - DatabaseWidget - - Searches and Tags - Suchen und Tags - Searching… - Suche… + Suche … Shared group… - Gemeinsam genutzte Gruppe… + Gemeinsam genutzte Gruppe ... Confirm Auto-Type @@ -2662,10 +2364,6 @@ Das ist definitiv ein Programmfehler, bitte benachrichtigen Sie die Entwickler.< Expired entries Abgelaufene Einträge - - Entries expiring within %1 day(s) - Einträge, die innerhalb von %1 Tag ablaufenEinträge, die innerhalb von %1 Tagen ablaufen - No current database. Keine aktuelle Datenbank. @@ -2690,18 +2388,6 @@ Das ist definitiv ein Programmfehler, bitte benachrichtigen Sie die Entwickler.< No Results Keine Ergebnisse - - Save - Speichern - - - Enter a unique name or overwrite an existing search from the list: - Geben Sie einen eindeutigen Namen ein oder überschreiben Sie eine bestehende Suche aus der Liste: - - - Save Search - Suche speichern - Lock Database? Datenbank sperren? @@ -2731,6 +2417,26 @@ Save changes? File has changed Datei hat sich geändert + + The database file has changed. Do you want to load the changes? + Die Datenbank wurde verändert. Änderungen laden? + + + Merge Request + Anfrage zum Zusammenführen + + + The database file has changed and you have unsaved changes. +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. +Error: %1 + Datenbank konnte während der automatischen Aktualisierung nicht geöffnet werden. +Fehler: %1 + Disable safe saves? Sicheres Speichern deaktivieren? @@ -2759,7 +2465,7 @@ Sicheres Speichern deaktivieren und erneut versuchen? Save database backup - Sicherungskopie der Datenbank speichern + Datenbank-Backup speichern Empty recycle bin? @@ -2771,96 +2477,27 @@ Sicheres Speichern deaktivieren und erneut versuchen? Could not find database file: %1 - Datenbankdatei konnte nicht gefunden werden: %1 + Datenbank-Datei nicht gefunden: %1 + + + Entries expiring within %1 day(s) + Einträge, die innerhalb von %1 Tag ablaufen.Einträge, die innerhalb von %1 Tagen ablaufen. - New Database - Neue Datenbank + Searches and Tags + Suchen und Tags - %1 [New Database] - Database tab name modifier - %1 [Neue Datenbank] + Enter a unique name or overwrite an existing search from the list: + Geben Sie einen eindeutigen Namen ein oder überschreiben Sie eine bestehende Suche aus der Liste: - Remote Sync did not contain any download or upload commands. - Fernsynchronisierung enthielt keine Download- oder Upload-Befehle. + Save + Speichern - Remote sync '%1' completed successfully! - Fernsynchronisierung '%1' erfolgreich abgeschlossen! - - - Remote sync '%1' failed: %2 - Fernsynchronisierung '%1' fehlgeschlagen: %2 - - - Error while saving database %1: %2 - Fehler beim Speichern der Datenbank %1: %2 - - - Downloading... - Herunterladen… - - - Uploading... - Hochladen… - - - Syncing... - Synchronisieren… - - - Remove passkey from entry - Passkey aus Eintrag entfernen - - - Do you want to remove the passkey from this entry? - Möchten Sie den Passkey aus diesem Eintrag entfernen? - - - The database file "%1" was modified externally - Die Datenbankdatei „%1“ wurde extern geändert - - - Do you want to load the changes? - Möchten Sie die Änderungen laden? - - - Reload database - Datenbank neu laden - - - Reloading database… - Datenbank wird neu geladen… - - - Reload canceled - Neuladen abgebrochen - - - Reload successful - Neuladen erfolgreich abgeschlossen - - - Reload pending user action… - Anstehende Benutzeraktion neu laden… - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes<br>Ignore the changes on disk until save<br>Discard unsaved changes - Die Datenbankdatei „%1“ wurde extern geändert.<br>Wie möchten Sie vorgehen?<br><br>Alle Änderungen zusammenführen<br>Änderungen auf der Festplatte bis zum Speichern ignorieren<br>Nicht gespeicherte Änderungen verwerfen - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes then save<br>Overwrite the changes on disk<br>Discard unsaved changes - Die Datenbankdatei „%1“ wurde extern geändert.<br>Wie möchten Sie vorgehen?<br><br>Alle Änderungen zusammenführen und dann speichern<br>Änderungen auf der Festplatte überschreiben<br>Nicht gespeicherte Änderungen verwerfen - - - Database file overwritten. - Datenbankdatei überschrieben. - - - Database file on disk cannot be unlocked with current credentials.<br>Enter new credentials and/or present hardware key to continue. - Die Datenbankdatei auf der Festplatte kann mit den aktuellen Anmeldedaten nicht entsperrt werden. Geben Sie neue Zugangsdaten ein und/oder benutzen Sie den Hardwareschlüssel, um fortzufahren. + Save Search + Suche speichern @@ -2913,6 +2550,10 @@ Sicheres Speichern deaktivieren und erneut versuchen? n/a - + + (encrypted) + (verschlüsselt) + Select private key Privaten Schlüssel auswählen @@ -2931,7 +2572,7 @@ Sicheres Speichern deaktivieren und erneut versuchen? Some Browser Integration settings are overridden by group settings. - Einige Einstellungen der Browser-Integration werden von den Gruppeneinstellungen überschrieben. + Manche Browser-Integrations-Einstellungen werden von den Gruppen-Einstellungen überschrieben. Invalid Entry @@ -2959,7 +2600,7 @@ Korrigieren? An error occurred while validating the Auto-Type sequence for "%1": %2 Would you like to correct it? - Bei der Validierung der Auto-Type-Sequenz für „%1“ ist ein Fehler aufgetreten: + Bei der Validierung der Auto-Type-Sequenz für "%1" ist ein Fehler aufgetreten: %2 Korrigieren? @@ -2973,7 +2614,7 @@ Korrigieren? Would you like to save changes to this entry? - Möchten Sie Änderungen an diesem Eintrag speichern? + Möchten Sie die Änderungen an diesem Eintrag speichern? New attribute @@ -2999,10 +2640,6 @@ Korrigieren? Hide Verstecken - - %n hour(s) - %n Stunde%n Stunden - %n week(s) %n Woche%n Woche(n) @@ -3015,9 +2652,9 @@ Korrigieren? %n year(s) %n Jahre%n Jahr(e) - - Failed to decrypt SSH key, ensure password is correct. - Entschlüsselung des SSH-Schlüssels fehlgeschlagen. Stellen Sie sicher, dass das Passwort korrekt ist. + + %n hour(s) + %n Stunde%n Stunden @@ -3084,7 +2721,7 @@ Korrigieren? Exclude from database reports - Von Datenbankberichten ausschließen + Aus Datenbank-Berichten ausschließen Foreground Color: @@ -3092,7 +2729,7 @@ Korrigieren? Foreground color selection - Auswahl der Vordergrundfarbe + Vordergrundfarbe auswählen Background Color: @@ -3100,7 +2737,7 @@ Korrigieren? Background color selection - Auswahl der Hintergrundfarbe + Hintergrundfarbe auswählen @@ -3111,7 +2748,7 @@ Korrigieren? Inherit default Auto-Type sequence from the group - Standard-Auto-Type-Sequenz von der Gruppe erben + Standard-Auto-Type-Sequenz von der Gruppe übernehmen Use custom Auto-Type sequence: @@ -3131,25 +2768,15 @@ Korrigieren? Existing window associations - Bestehende Fensterzuordnungen + Bestehende Fenster-Zuordnungen Add new window association - Neue Fensterzuordnung hinzufügen - - - + - Add item - + + Neue Fenster-Zuordnung hinzufügen Remove selected window association - Ausgewählte Fensterzuordnung entfernen - - - - - Remove item - - + Ausgewählte Fenster-Zuordnung entfernen Window title: @@ -3161,7 +2788,7 @@ Korrigieren? Set the window association title - Titel der Fensterzuordnung festlegen + Titel der Fenster-Zuordnung festlegen You can use an asterisk to match everything @@ -3175,28 +2802,54 @@ Korrigieren? Custom Auto-Type sequence for this window Benutzerdefinierte Auto-Type-Sequenz für dieses Fenster + + + + Add item + + + + + - + Remove item + - + EditEntryWidgetBrowser + + These settings affect to the entry's behaviour with the browser extension. + Diese Einstellungen beeinflussen das Verhalten des Eintrags mit der Browser-Erweiterung. + General Allgemein Hide this entry from the browser extension - Diesen Eintrag vor der Browsererweiterung verstecken + Diesen Eintrag aus der Browser-Erweiterung ausblenden Skip Auto-Submit for this entry Auto-Submit für diesen Eintrag überspringen + + Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. + Diese Einstellung nur zum Browser für HTTP-Auth-Dialoge senden. Wenn aktiv, werden normale Login-Formulare diesen Eintrag nicht zur Auswahl anbieten. + Use this entry only with HTTP Basic Auth - Diesen Eintrag nur mit HTTP-Basisauthentifizierung verwenden + Diesen Eintrag nur mit "HTTP Basic Auth" verwenden + + + Do not send this setting to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. + Diese Einstellung nicht an den Browser für HTTP-Auth-Dialoge senden. Wenn aktiviert, wird dieser Eintrag in HTTP-Auth-Dialogen nicht zur Auswahl angezeigt. Do not use this entry with HTTP Basic Auth - Diesen Eintrag nicht mit HTTP-Basisauthentifizierung verwenden + Diesen Eintrag nicht mit HTTP-Basic-Auth verwenden + + + Additional URL's + Zusätzliche URLs Add @@ -3210,32 +2863,16 @@ Korrigieren? Edit Bearbeiten - - These settings affect the entry's behaviour with the browser extension. - Diese Einstellungen beeinflussen das Verhalten des Eintrags mit der Browser-Erweiterung. - - - Additional URLs - Zusätzliche URLs - - - Only send this entry to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. - Sendet diesen Eintrag nur bei HTTP-Auth-Dialogen an den Browser. Wenn aktiviert, wird dieser Eintrag in normalen Anmeldeformularen nicht zur Auswahl angezeigt. - - - Do not send this entry to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. - Diesen Eintrag nicht an den Browser für HTTP-Auth-Dialoge senden. Wenn aktiviert, zeigen HTTP-Auth-Dialoge diesen Eintrag nicht zur Auswahl an. - EditEntryWidgetHistory Entry history selection - Auswahl des Eintragsverlaufs + Eintrags-Verlauf auswählen Show entry at selected history state - Eintrag im ausgewählten Verlaufsstatus anzeigen + Eintrag zum ausgewählten Verlaufszustand anzeigen Show @@ -3243,7 +2880,7 @@ Korrigieren? Restore entry to selected history state - Eintrag auf ausgewählten Verlaufsstatus zurücksetzen + Eintrag aus ausgewähltem Verlaufszustand wiederherstellen Restore @@ -3251,7 +2888,7 @@ Korrigieren? Delete selected history state - Ausgewählten Verlaufsstatus löschen + Ausgewählten Verlaufszustand löschen Delete @@ -3274,23 +2911,23 @@ Korrigieren? Notes field - Notizfeld + Feld für Notizen Username field - Benutzernamensfeld + Feld für Benutzername Expiration field - Ablaufdatums-Feld + Feld für Ablaufdatum Expiration Presets - Ablaufdatums-Vorgaben + Vorgaben für Ablaufdatum Expiration presets - Ablaufdatums-Vorgaben + Vorgaben für Ablaufdatum Presets @@ -3310,7 +2947,7 @@ Korrigieren? Password field - Passwortfeld + Passwort-Feld Toggle expiration @@ -3391,6 +3028,19 @@ Korrigieren? Private key Privater Schlüssel + + External file + Externe Datei + + + Browser for key file + Browser für die Schlüsseldatei + + + Browse… + Button for opening file dialog + Durchsuchen ... + Attachment Anhang @@ -3407,23 +3057,6 @@ Korrigieren? Remove from agent Vom Agenten entfernen - - External file - Externe Datei - - - Browser for key file - Browser für die Schlüsseldatei - - - Browse… - Button for opening file dialog - Durchsuchen… - - - Generate - Erzeugen - Select attachment file Anhang auswählen @@ -3442,16 +3075,12 @@ Korrigieren? Remove key from agent after specified seconds - Schlüssel vom Agenten nach angegebenen Sekunden entfernen + Schlüssel nach angegebener Zeit vom Agenten entfernen seconds Sekunden - - Clear agent - Agent löschen - EditGroupWidget @@ -3463,6 +3092,10 @@ Korrigieren? Icon Symbol + + Browser Integration + Browser-Integration + Properties Eigenschaften @@ -3479,10 +3112,6 @@ Korrigieren? Group has unsaved changes Gruppe enthält ungespeicherte Änderungen - - Browser Integration - Browser-Integration - Enable Aktivieren @@ -3504,11 +3133,11 @@ Korrigieren? Hide entries from browser extension: - Einträge der Browser-Erweiterung verstecken: + Einträge aus Browser-Erweiterung ausblenden: Hide entries from browser extension toggle for this and sub groups - Einträge der Browser-Erweiterung für diese und Untergruppen umschalten + Einträge vor dem Browser-Erweiterungs-Schalter für diese und Untergruppen ausblenden Skip Auto-Submit for entries: @@ -3516,11 +3145,11 @@ Korrigieren? Skip Auto-Submit toggle for this and sub groups - Auto-Submit für diese Gruppe und Untergruppen überspringen + Auto-Submit-Schalter für diese und Untergruppen überspringen Use entries only with HTTP Basic Auth: - Diese Einträge nur mit HTTP-Basisauthentifizierung verwenden: + Diese Einträge nur mit "HTTP Basic Auth" verwenden: Only HTTP Auth toggle for this and sub groups @@ -3528,11 +3157,11 @@ Korrigieren? Do not use entries with HTTP Basic Auth: - Diese Einträge nicht mit HTTP-Basisauthentifizierung verwenden: + Diese Einträge nicht mit HTTP-Basic-Auth verwenden: Do not use HTTP Auth toggle for this and sub groups - HTTP-Authentifizierungs-Schalter nicht für diese und Untergruppen verwenden + Den HTTP-Authentifizierungs-Schalter nicht für diese und Untergruppen verwenden Omit WWW subdomain from matching: @@ -3542,14 +3171,6 @@ Korrigieren? Omit WWW subdomain from matching toggle for this and sub groups WWW-Subdomain aus dem entsprechenden Abgleich für diese und die Untergruppen weglassen - - Restrict matching to given browser key: - Einschränkung des Abgleichs auf den angegebenen Browserschlüssel: - - - Restrict matching to given browser key toggle for this and sub groups - Einschränkung des Abgleichs auf bestimmte Browserschlüssel-Schalter für diese und Untergruppen - EditGroupWidgetKeeShare @@ -3559,7 +3180,7 @@ Korrigieren? Password field - Passwortfeld + Passwort-Feld Type: @@ -3575,15 +3196,15 @@ Korrigieren? Path to share file field - Feld für Pfad der Freigabedatei + Feld für Pfad der Freigabe-Datei Browse for share file - Nach Freigabedatei durchsuchen + Nach Freigabe-Datei durchsuchen Browse… - Durchsuchen… + Durchsuchen ... Clear fields @@ -3630,7 +3251,7 @@ Unterstützte Erweiterungen sind: %1. KeeShare is currently disabled. You can enable import/export in the application settings. KeeShare is a proper noun - KeeShare ist derzeit deaktiviert. Sie können den Import/Export in den Anwendungseinstellungen aktivieren. + KeeShare is derzeit deaktiviert. Sie können den Import/Export in den Anwendungseinstellungen aktivieren. Database export is currently disabled by application settings. @@ -3709,7 +3330,7 @@ Unterstützte Erweiterungen sind: %1. Notes field - Notizfeld + Feld für Notizen Name: @@ -3728,15 +3349,15 @@ Unterstützte Erweiterungen sind: %1. EditWidgetIcons Use default icon - Standardsymbol verwenden + Standard-Icon verwenden Use custom icon - Benutzerdefiniertes Symbol verwenden + Benutzerdefiniertes Icon verwenden Choose icon… - Symbol auswählen… + Icon auswählen… Set the URL to use to search for a favicon @@ -3756,11 +3377,11 @@ Unterstützte Erweiterungen sind: %1. Apply selected icon to subgroups and entries - Ausgewähltes Symbol auf Untergruppen und Einträge anwenden + Ausgewähltes Icon für Untergruppen und Einträge verwenden Apply icon to… - Symbol verwenden für… + Icon verwenden für ... Apply to this group only @@ -3782,6 +3403,10 @@ Unterstützte Erweiterungen sind: %1. Unable to fetch favicon. Kann Favicon nicht herunterladen. + + You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security + Sie können den DuckDuckGo-Webseitensymbol-Dienst unter Werkzeuge -> Einstellungen -> Sicherheit aktivieren + Existing icon selected. Bestehendes Symbol ausgewählt. @@ -3814,10 +3439,6 @@ Unterstützte Erweiterungen sind: %1. The following icon(s) failed: Das Laden der folgenden Symbole ist fehlgeschlagen:Das Laden der folgenden Symbole ist fehlgeschlagen: - - You can enable the DuckDuckGo website icon service under Application Settings -> Security - Sie können den DuckDuckGo-Webseitensymbol-Dienst unter „Anwendungseinstellungen → Sicherheit“ aktivieren - EditWidgetProperties @@ -3827,7 +3448,7 @@ Unterstützte Erweiterungen sind: %1. Datetime created - Erstellungszeitpunkt + Erstellungs-Zeitpunkt Modified: @@ -3835,7 +3456,7 @@ Unterstützte Erweiterungen sind: %1. Datetime modified - Änderungszeitpunkt + Änderungs-Zeitpunkt Accessed: @@ -3843,7 +3464,7 @@ Unterstützte Erweiterungen sind: %1. Datetime accessed - Zugriffszeitpunkt + Zugriffs-Zeitpunkt Uuid: @@ -3894,45 +3515,12 @@ Das kann dazu führen, dass die betroffenen Plugins nicht mehr richtig funktioni %1 - Clone %1 - Klon - - Passkey - Passkey - - - Invalid conversion type: %1 - Ungültiger Konvertierungstyp: %1 - - - Invalid conversion syntax: %1 - Ungültige Konvertierungssyntax: %1 - - - Invalid regular expression syntax %1 -%2 - Ungültige Syntax des regulären Ausdrucks %1 -%2 - EntryAttachments Cannot open file "%1" - Datei „%1“ kann nicht geöffnet werden - - - - EntryAttachmentsDialog - - Form - Formular - - - File name - Dateiname - - - File contents... - Dateiinhalt… + Kann Datei "%1" nicht öffnen @@ -3972,6 +3560,14 @@ Das kann dazu führen, dass die betroffenen Plugins nicht mehr richtig funktioni Remove Entfernen + + Rename selected attachment + Ausgewählten Anhang umbenennen + + + Rename + Umbenennen + Open selected attachment Ausgewählten Anhang öffnen @@ -4047,6 +3643,12 @@ Das kann dazu führen, dass die betroffenen Plugins nicht mehr richtig funktioni Confirm Overwrite Attachment Anhang überschreiben? + + Attachment "%1" already exists. +Would you like to overwrite the existing attachment? + Anhang "%1" existiert bereits. +Existierenden Anhang überschreiben? + Confirm Attachment Anhang bestätigen @@ -4057,7 +3659,7 @@ Your database may get very large and reduce performance. Are you sure to add this file? %1 ist eine große Datei (%2 MB). -Ihre Datenbank könnte sehr groß werden und die Leistung könnte sich verschlechtern. +Ihre Datenbank könnte sehr groß und langsam werden. Wollen Sie diese Datei wirklich hinzufügen? @@ -4081,24 +3683,6 @@ Error: %1 Speichern des aktualisierten Anhangs ist fehlgeschlagen. Fehler: %1 - - Attachment "%1" already exists. -Would you like to overwrite the existing attachment? - Anhang „%1“ existiert bereits. -Existierenden Anhang überschreiben? - - - New - Neu - - - Preview - Vorschau - - - Failed to preview an attachment: Attachment not found - Vorschau eines Anhangs konnte nicht angezeigt werden: Anhang nicht gefunden - EntryAttributesModel @@ -4293,14 +3877,6 @@ Existierenden Anhang überschreiben? Has TOTP Hat TOTP - - Background Color - Hintergrundfarbe - - - Group Path - Gruppenpfad - EntryPreviewWidget @@ -4321,8 +3897,8 @@ Existierenden Anhang überschreiben? Passwort - URL - URL + Notes + Notizen Expiration @@ -4341,8 +3917,8 @@ Existierenden Anhang überschreiben? Benutzername - Notes - Notizen + URL + URL Advanced @@ -4392,10 +3968,6 @@ Existierenden Anhang überschreiben? Never Nie - - Double click to copy value - Zum Kopieren des Wertes doppelklicken - Enabled Aktiviert @@ -4405,8 +3977,8 @@ Existierenden Anhang überschreiben? Deaktiviert - Double click to copy to clipboard - Zum Kopieren in die Zwischenablage doppelklicken + Double click to copy value + Zum Kopieren des Wertes doppelklicken @@ -4415,10 +3987,6 @@ Existierenden Anhang überschreiben? Invalid URL Ungültige URL - - Duplicate URL - URL duplizieren - EntryView @@ -4434,10 +4002,6 @@ Existierenden Anhang überschreiben? Reset to defaults Auf Voreinstellung zurücksetzen - - + %1 entry(s)... - + %1 Eintrag…+ %1 Einträge… - ExportDialog @@ -4447,7 +4011,7 @@ Existierenden Anhang überschreiben? Sort entries by... - Einträge sortieren nach… + Einträge sortieren nach ... You are about to export your database to an unencrypted file. @@ -4474,7 +4038,7 @@ Dadurch sind Ihre Kennwörter und sensiblen Informationen ungeschützt! Export database to HTML file - Datenbank als HTML-Datei exportieren + Datenbank in HTML-Datei exportieren HTML file @@ -4539,7 +4103,7 @@ Dadurch sind Ihre Kennwörter und sensiblen Informationen ungeschützt!FdoSecrets::Item Entry "%1" from database "%2" was used by %3 - Eintrag „%1“ aus Datenbank „%2“ wurde von %3 verwendet + Eintrag "%1" aus Datenbank "%2" wurde von %3 verwendet @@ -4565,7 +4129,7 @@ Dadurch sind Ihre Kennwörter und sensiblen Informationen ungeschützt!FdoSecrets::SettingsDatabaseModel Unlock to show - Entsperren, um anzuzeigen + Entsperren zum Anzeigen None @@ -4618,8 +4182,8 @@ Dadurch sind Ihre Kennwörter und sensiblen Informationen ungeschützt! Having trouble downloading icons? You can enable the DuckDuckGo website icon service in the security section of the application settings. - Probleme beim Herunterladen der Symbole? -Sie können den DuckDuckGo-Dienst unter „Anwendungseinstellungen → Sicherheit“ aktivieren. + Probleme beim Herunterladen der Icons? +Sie können den DuckDuckGo-Dienst im Abschnitt "Sicherheit" der Anwendungseinstellungen aktivieren. Close @@ -4635,11 +4199,11 @@ Sie können den DuckDuckGo-Dienst unter „Anwendungseinstellungen → Sicherhei Please wait, processing entry list… - Bitte warten Sie, Eintragsliste wird verarbeitet… + Bitte warten, Eintragsliste wird verarbeitet ... Downloading… - Herunterladen… + Herunterladen ... Ok @@ -4655,200 +4219,7 @@ Sie können den DuckDuckGo-Dienst unter „Anwendungseinstellungen → Sicherhei Downloading favicons (%1/%2)… - Favicons (%1/%2) werden heruntergeladen… - - - - ImportWizard - - Import Wizard - Assistent für den Import - - - - ImportWizardPageReview - - WizardPage - Assistent - - - Entry count: %1 - Anzahl der Einträge: %1 - - - Group - Gruppe - - - Title - Titel - - - Username - Benutzername - - - Password - Passwort - - - Url - URL - - - Could not load key file. - Schlüsseldatei konnte nicht geladen werden. - - - Could not open remote database. Password or key file may be incorrect. - Ferndatenbank konnte nicht geöffnet werden. Das Passwort oder die Schlüsseldatei ist möglicherweise falsch. - - - - ImportWizardPageSelect - - Form - Formular - - - Import File Selection - Auswahl der Importdatei - - - Password: - Passwort: - - - Key File: - Schlüsseldatei: - - - Browse… - Durchsuchen… - - - Import Into: - Importieren in: - - - New Database - Neue Datenbank - - - No unlocked databases available - Keine entsperrten Datenbanken verfügbar - - - Existing Database: - Existierende Datenbank: - - - Import File: - Importdatei: - - - Comma Separated Values (.csv) - Kommagetrennte Werte (.csv) - - - 1Password Export (.1pux) - 1Password exportieren (.1pux) - - - 1Password Vault (.opvault) - 1Password-Tresor (.opvault) - - - Bitwarden (.json) - Bitwarden (.json) - - - KeePass 1 Database (.kdb) - KeePass 1-Datenbank (.kdb) - - - Open OPVault - OPVault öffnen - - - Select import file - Importdatei auswählen - - - All files - Alle Dateien - - - Key files - Schlüsseldateien - - - Select key file - Schlüsseldatei auswählen - - - Comma Separated Values - Kommagetrennte Werte - - - 1Password Export - 1Password exportieren - - - Bitwarden JSON Export - Bitwarden JSON exportieren - - - 1Password Vault - 1Password-Tresor - - - KeePass1 Database - KeePass 1-Datenbank - - - Proton Pass (.json) - Proton Pass (.json) - - - Proton Pass JSON Export - Proton Pass JSON exportieren - - - Temporary Database - Temporäre Datenbank - - - Command: - Befehl: - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - z. B.: „sftp user@hostname“ oder „scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}“ - - - Input: - Eingabe: - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last commend `exit` has to be sent - - z. B.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} wird als Platzhalter verwendet, um die Datenbank an einem temporären Ort zu speichern -Der Befehl muss beendet werden. Im Falle von `sftp` muss als letzter Befehl `exit` gesendet werden - - - - Remote Database (.kdbx) - Ferndatenbank (.kdbx) + Favicons (%1/%2) werden heruntergeladen ... @@ -4870,7 +4241,7 @@ Der Befehl muss beendet werden. Im Falle von `sftp` muss als letzter Befehl `exi Unable to calculate database key - Berechnung des Datenbankschlüssels gescheitert + Berechnung des Datenbankschlüssels fehlgeschlagen Unable to issue challenge-response: %1 @@ -4880,7 +4251,7 @@ Der Befehl muss beendet werden. Im Falle von `sftp` muss als letzter Befehl `exi Invalid credentials were provided, please try again. If this reoccurs, then your database file may be corrupt. Ungültige Anmeldedaten, bitte versuchen Sie es noch einmal. -Falls dies wiederholt passiert, dann könnte Ihre Datenbank beschädigt sein. +Falls dies wiederholt passiert, könnte Ihre Datenbank beschädigt sein. Header doesn't match hash @@ -4892,11 +4263,11 @@ Falls dies wiederholt passiert, dann könnte Ihre Datenbank beschädigt sein.
    Invalid header field length: field %1 - Ungültige Headerfeldlänge: Feld %1 + Ungültige Header-Feldlänge: Feld %1 Invalid header data length: field %1, %2 expected, %3 found - Ungültige Headerfeldlänge: %1, %2 erwartet, %3 gefunden + Ungültige Header-Feldlänge: %1, %2 erwartet, %3 gefunden @@ -4912,7 +4283,7 @@ Falls dies wiederholt passiert, dann könnte Ihre Datenbank beschädigt sein. Unable to calculate database key - Berechnung des Datenbankschlüssels gescheitert + Berechnung des Datenbankschlüssels fehlgeschlagen @@ -4923,7 +4294,7 @@ Falls dies wiederholt passiert, dann könnte Ihre Datenbank beschädigt sein. Unable to calculate database key: %1 - Berechnung des Datenbankschlüssels gescheitert: %1 + Berechnung des Datenbankschlüssels fehlgeschlagen: %1 Invalid header checksum size @@ -4937,7 +4308,7 @@ Falls dies wiederholt passiert, dann könnte Ihre Datenbank beschädigt sein.Invalid credentials were provided, please try again. If this reoccurs, then your database file may be corrupt. Ungültige Anmeldedaten, bitte versuchen Sie es noch einmal. -Falls dies wiederholt passiert, dann könnte Ihre Datenbank beschädigt sein. +Falls dies wiederholt passiert, könnte Ihre Datenbank beschädigt sein. (HMAC mismatch) @@ -4953,11 +4324,11 @@ Falls dies wiederholt passiert, dann könnte Ihre Datenbank beschädigt sein. Invalid header field length: field %1 - Ungültige Headerfeldlänge: Feld %1 + Ungültige Header-Feldlänge: Feld %1 Invalid header data length: field %1, %2 expected, %3 found - Ungültige Headerfeldlänge: %1, %2 erwartet, %3 gefunden + Ungültige Header-Datenlänge: %1, %2 erwartet, %3 gefunden Failed to open buffer for KDF parameters in header @@ -4977,11 +4348,11 @@ Falls dies wiederholt passiert, dann könnte Ihre Datenbank beschädigt sein. Invalid inner header field length: field %1 - Ungültige Inner-Headerfeldlänge: Feld %1 + Ungültige Inner-Header-Feldlänge: Feld %1 Invalid inner header data length: field %1, %2 expected, %3 found - Ungültige Inner-Headerfeldlänge: Feld %1, %2 gefunden, %3 erwartet + Ungültige Inner-Header-Datenlänge: Feld %1, %2 erwartet, %3 gefunden Invalid inner header binary size @@ -5061,7 +4432,7 @@ Falls dies wiederholt passiert, dann könnte Ihre Datenbank beschädigt sein. Unable to calculate database key: %1 - Berechnung des Datenbankschlüssels gescheitert: %1 + Berechnung des Datenbankschlüssels fehlgeschlagen: %1 Failed to serialize KDF parameters variant map @@ -5126,7 +4497,7 @@ 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. Die ausgewählte Datei ist eine alte KeePass 1-Datenbank (.kdb). -Sie können sie importieren, indem Sie auf „Datenbank → Importieren → KeePass 1-Datenbank“ klicken. +Sie können sie importieren, indem Sie auf "Datenbank -> KeePass 1-Datenbank" klicken. Diese Migration ist nur in eine Richtung möglich. Sie werden die importierte Datenbank nicht mit der alten KeePassX 0.4-Version öffnen können. @@ -5278,13 +4649,24 @@ Zeile %2, Spalte %3 File too large to be a private key - Datei zu groß, um ein privater Schlüssel zu sein + Datei zu groß für einen privaten Schlüssel Failed to open private key Fehler beim Öffnen des privaten Schlüssels + + KeePass1OpenWidget + + Import KeePass1 Database + KeePass1-Datenbank importieren + + + Unable to open the database. + Fehler beim Öffnen der Datenbank. + + KeePass1Reader @@ -5338,7 +4720,7 @@ Zeile %2, Spalte %3 Unable to calculate database key - Berechnung des Datenbankschlüssels gescheitert + Berechnung des Datenbankschlüssels fehlgeschlagen unable to seek to content position @@ -5348,7 +4730,7 @@ Zeile %2, Spalte %3 Invalid credentials were provided, please try again. If this reoccurs, then your database file may be corrupt. Ungültige Anmeldedaten, bitte versuchen Sie es noch einmal. -Falls dies wiederholt passiert, dann könnte Ihre Datenbank beschädigt sein. +Falls dies wiederholt passiert, könnte Ihre Datenbank beschädigt sein. Key transformation failed @@ -5384,7 +4766,7 @@ Falls dies wiederholt passiert, dann könnte Ihre Datenbank beschädigt sein. Incorrect group expiry time field size - Falsche Feldgröße für Gruppen-Verfallszeit + Falsche Feldgröße für Gruppen-Ablaufzeit Incorrect group icon field size @@ -5447,7 +4829,7 @@ Falls dies wiederholt passiert, dann könnte Ihre Datenbank beschädigt sein.KeeShare Invalid sharing reference - Ungültige Freigabereferenz + Ungültige Freigabe-Referenz Inactive share %1 @@ -5533,11 +4915,11 @@ Falls dies wiederholt passiert, dann könnte Ihre Datenbank beschädigt sein. Browse… - Durchsuchen… + Durchsuchen ... Old key file format - Altes Schlüsseldateiformat + Schlüsseldateiformat im alten Format You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. @@ -5559,7 +4941,7 @@ Message: %2 Change Key File - Schlüsseldatei ändern + Schlüsseldatei bearbeiten Remove Key File @@ -5567,7 +4949,7 @@ Message: %2 Key File set, click to change or remove - Schlüsseldatei festgelegt, zum Ändern oder Entfernen anklicken + Schlüsseldatei festgelegt, klicken zum Ändern oder Entfernen <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> @@ -5583,7 +4965,7 @@ Message: %2 Create Key File… - Schlüsseldatei erzeugen… + Schlüsseldatei erzeugen Error creating key file @@ -5612,7 +4994,7 @@ Message: %2 The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. Are you sure you want to continue with this file? - Die gewählte Schlüsseldatei sieht aus wie eine Passwortdatenbank. Eine Schlüsseldatei darf sich niemals ändern, sonst verlieren Sie für immer den Zugriff auf Ihre Datenbank. + Die gewählte Schlüsseldatei sieht aus wie eine Passwort-Datenbank. Eine Schlüsseldatei darf sich niemals ändern, sonst verlieren Sie für immer den Zugriff auf Ihre Datenbank. Wollen Sie wirklich mit dieser Datei fortfahren? @@ -5628,7 +5010,7 @@ Wollen Sie wirklich mit dieser Datei fortfahren? Could not register global shortcut - Globales Tastenkürzel konnte nicht registriert werden + Globales Tastaturkürzel konnte nicht registriert werden @@ -5641,9 +5023,13 @@ Wollen Sie wirklich mit dieser Datei fortfahren? &Recent Databases &Zuletzt verwendete Datenbanken + + &Import + Importieren + &Export - &Exportieren + &Export &Help @@ -5661,10 +5047,6 @@ Wollen Sie wirklich mit dieser Datei fortfahren? TOTP TOTP - - Tags - Tags - &Groups &Gruppen @@ -5695,7 +5077,7 @@ Wollen Sie wirklich mit dieser Datei fortfahren? &Open Database… - Datenbank &öffnen… + Datenbank &öffnen … &Save Database @@ -5707,39 +5089,59 @@ Wollen Sie wirklich mit dieser Datei fortfahren? &New Database… - &Neue Datenbank… + &Neue Datenbank … + + + Create a new database + Neue Datenbank erstellen &Merge From Database… - Mit Datenbank &zusammenführen… + Mit Datenbank &zusammenführen … + + + Merge from another KDBX database + Mit einer anderen KDBX-Datenbank zusammenführen &New Entry… - &Neuer Eintrag… + &Neuer Eintrag … + + + Add a new entry + Neuen Eintrag hinzufügen &Edit Entry… - Eintrag &bearbeiten… + Eintrag &bearbeiten … + + + View or edit entry + Eintrag anzeigen oder bearbeiten &Delete Entry… - Eintrag &löschen… + Eintrag &löschen … &New Group… - &Neue Gruppe… + &Neue Gruppe … + + + Add a new group + Neue Gruppe hinzufügen &Edit Group… - Gruppe &bearbeiten… + Gruppe &bearbeiten … &Delete Group… - Gruppe &löschen… + Gruppe &löschen … Download All &Favicons… - Alle &Favicons herunterladen… + Alle &Favicons herunterladen … Sort &A-Z @@ -5751,40 +5153,64 @@ Wollen Sie wirklich mit dieser Datei fortfahren? Sa&ve Database As… - Datenbank s&peichern als… + Datenbank s&peichern als … Database &Security… - Datenbank&sicherheit… + Datenbank-&Sicherheit … Database &Reports… - Datenbank&berichte… + Datenbank-&Berichte … + + + Statistics, health check, etc. + Statistiken, Gesundheitscheck usw. &Database Settings… - &Datenbankeinstellungen… + &Datenbank-Einstellungen … + + + Database settings + Datenbank-Einstellungen &Clone Entry… - Eintrag &klonen… + Eintrag &klonen … Move u&p Nach &oben verschieben + + Move entry one step up + Eintrag einen Schritt nach oben verschieben + Move do&wn Nach &unten verschieben + + Move entry one step down + Eintrag einen Schritt nach unten verschieben + Copy &Username - &Benutzernamen kopieren + &Benutzername kopieren + + + Copy username to clipboard + Benutzername in Zwischenablage kopieren Copy &Password Passwort kopieren + + Copy password to clipboard + Passwort in die Zwischenablage kopieren + &Settings &Einstellungen @@ -5818,32 +5244,52 @@ Wollen Sie wirklich mit dieser Datei fortfahren? &Titel - Copy &URL - &URL kopieren + Copy title to clipboard + Titel in Zwischenablage kopieren + + + Copy URL to clipboard + URL in Zwischenablage kopieren &Notes &Notizen + + Copy notes to clipboard + Notizen in Zwischenablage kopieren + &CSV File… - &CSV-Datei… + &CSV-Datei … &HTML File… - &HTML-Datei… + &HTML-Datei … KeePass 1 Database… - KeePass 1-Datenbank… + KeePass 1-Datenbank … + + + Import a KeePass 1 database + KeePass 1-Datenbank importieren 1Password Vault… - 1Password-Tresor… + 1Password-Tresor … + + + Import a 1Password Vault + 1Password-Tresor importieren CSV File… - CSV-Datei… + CSV-Datei … + + + Import a CSV file + CSV-Datei importieren Show TOTP @@ -5855,16 +5301,12 @@ Wollen Sie wirklich mit dieser Datei fortfahren? Set up TOTP… - TOTP einrichten… + TOTP einrichten … Copy &TOTP &TOTP kopieren - - Copy Password and TOTP - Passwort und TOTP kopieren - E&mpty recycle bin Papierkorb l&eeren @@ -5889,6 +5331,10 @@ Wollen Sie wirklich mit dieser Datei fortfahren? &Online Help &Online-Hilfe + + Go to online documentation + Online-Dokumentation aufrufen + &User Guide &Benutzerhandbuch @@ -5899,11 +5345,11 @@ Wollen Sie wirklich mit dieser Datei fortfahren? &Keyboard Shortcuts - &Tastenkürzel + &Tastenkombinationen Save Database Backup… - Sicherungskopie der Datenbank speichern… + Datenbank-Backup speichern Add key to SSH Agent @@ -5915,7 +5361,7 @@ Wollen Sie wirklich mit dieser Datei fortfahren? Compact Mode - Kompaktmodus + Kompakter Modus Automatic @@ -5933,10 +5379,6 @@ Wollen Sie wirklich mit dieser Datei fortfahren? Classic (Platform-native) Klassisch (Plattform-nativ) - - Show Menubar - Menüleiste anzeigen - Show Toolbar Symbolleiste anzeigen @@ -5951,19 +5393,15 @@ Wollen Sie wirklich mit dieser Datei fortfahren? Hide Usernames - Benutzernamen verstecken + Benutzernamen ausblenden Hide Passwords - Passwörter verstecken + Passwörter ausblenden Clone Group... - Gruppe klonen… - - - &XML File… - &XML-Datei… + Gruppe klonen … Clear history @@ -5992,8 +5430,10 @@ Expect some bugs and minor issues, this version is meant for testing purposes. - No Tags - Keine Tags + 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: Ihre Qt-Version kann zum Absturz von KeePassXC mit einer Bildschirmtastatur führen. +Wir empfehlen Ihnen, das AppImage zu verwenden, das auf unserer Download-Seite verfügbar ist. Restore Entry(s) @@ -6023,329 +5463,49 @@ Rechnen Sie mit Fehlern und kleineren Problemen. Diese Version ist für Testzwec Quit KeePassXC KeePassXC beenden + + Please present or touch your YubiKey to continue… + Bitte YubiKey vorhalten oder berühren, um fortzufahren … + + + Restart Application? + Anwendung neustarten? + + + You must restart the application to apply this setting. Would you like to restart now? + Sie müssen die Anwendung neustarten, um diese Einstellung anzuwenden. Möchten Sie jetzt neustarten? + + + Tags + Tags + + + No Tags + Keine Tags + %1 Entry(s) %1 Eintrag%1 Einträge - Please present or touch your YubiKey to continue… - Bitte halten oder berühren Sie Ihren YubiKey, um fortzufahren… + Copy Password and TOTP + Passwort und TOTP kopieren - Restart Application? - Anwendung neu starten? + &XML File… + &XML-Datei… - You must restart the application to apply this setting. Would you like to restart now? - Sie müssen die Anwendung neu starten, um diese Einstellung anzuwenden. Möchten Sie jetzt neu starten? + XML File… + XML-Datei… + + + Copy &URL + &URL kopieren Allow Screen Capture - Bildschirmaufnahmen erlauben - - - 1Password 1PUX... - 1Password 1PUX… - - - Import a 1Password 1PUX file - Importieren einer 1Password 1PUX-Datei - - - Import… - Importieren… - - - Passkeys… - Passkeys… - - - Import Passkey - Passkey importieren - - - Remote S&ync… - Ferns&ynchronisierung… - - - Quit Application - Anwendung beenden - - - Open About Dialog - Über-Dialog öffnen - - - Open Database - Datenbank öffnen - - - Create Database - Datenbank erstellen - - - Merge From Database - Mit Datenbank zusammenführen - - - Create Entry - Eintrag erstellen - - - Edit Entry - Eintrag bearbeiten - - - Delete Entry - Eintrag löschen - - - Create Group - Gruppe erstellen - - - Edit Group - Gruppe bearbeiten - - - Delete Group - Gruppe löschen - - - Download All Favicons - Alle Favicons herunterladen - - - Sort Groups A-Z - Gruppen sortieren A-Z - - - Sort Groups Z-A - Gruppen sortieren Z-A - - - Save Database As - Datenbank speichern als - - - Show Database Security - Datenbanksicherheit anzeigen - - - Show Database Reports - Datenbankberichte anzeigen - - - Show Database Settings - Datenbankeinstellungen anzeigen - - - Show Passkeys - Passkeys anzeigen - - - Clone Entry - Eintrag klonen - - - Move Entry Up - Eintrag nach oben verschieben - - - Move Entry Down - Eintrag nach unten verschieben - - - Copy Username - Benutzernamen kopieren - - - Copy Password - Passwort kopieren - - - Show Application Settings - Anwendungseinstellungen anzeigen - - - Show Password Generator - Passwortgenerator anzeigen - - - Remove Passkey From Entry - Passkey aus Eintrag entfernen - - - Perform Auto-Type: {USERNAME} - Auto-Type ausführen: {BENUTZERNAME} - - - Perform Auto-Type: {USERNAME}{ENTER} - Auto-Type ausführen: {BENUTZERNAME}{ENTER} - - - Perform Auto-Type: {PASSWORD} - Auto-Type ausführen: {PASSWORT} - - - Perform Auto-Type: {PASSWORD}{ENTER} - Auto-Type ausführen: {PASSWORT}{ENTER} - - - Perform Auto-Type: {TOTP} - Auto-Type ausführen: {TOTP} - - - Copy Title - Titel kopieren - - - Copy URL - URL kopieren - - - Copy Notes - Notizen kopieren - - - Export to CSV - Als CSV exportieren - - - Export to HTML - Als HTML exportieren - - - Import KeePass1 Database - KeePass1-Datenbank importieren - - - Import 1Password Vault - 1Passwort-Tresor importieren - - - Import CSV File - CSV-Datei importieren - - - Show TOTP QR Code - TOTP-QR-Code anzeigen - - - Set up TOTP - TOTP einrichten - - - Empty Recycle Bin - Papierkorb leeren - - - Open Donation Website - Spenden-Webseite öffnen - - - Open Bug Report - Fehlerbericht erstellen - - - Open Online Documentation - Online-Dokumentation öffnen - - - Open Keyboard Shortcuts Guide - Anleitung für Tastaturkürzel öffnen - - - Save Database Backup - Sicherungskopie der Datenbank speichern - - - SSH Agent: Add Key - SSH-Agent: Schlüssel hinzufügen - - - SSH Agent: Remove Key - SSH-Agent: Schlüssel entfernen - - - Toggle Compact Mode - Kompaktmodus umschalten - - - Set Theme: Automatic - Design festlegen: automatisch - - - Set Theme: Light - Design festlegen: hell - - - Set Theme: Dark - Design festlegen: dunkel - - - Set Theme: Classic - Design festlegen: klassisch - - - Toggle Show Menubar - 'Menüleiste anzeigen' umschalten - - - Toggle Show Toolbar - 'Symbolleiste anzeigen' umschalten - - - Toggle Show Preview Panel - 'Vorschaupanel anzeigen' umschalten - - - Toggle Always on Top - 'Immer im Vordergrund' umschalten - - - Toggle Hide Usernames - 'Benutzernamen verstecken' umschalten - - - Toggle Hide Passwords - 'Passwörter verstecken' umschalten - - - Export to XML - Als XML exportieren - - - Toggle Allow Screen Capture - 'Bildschirmaufnahme zulassen' umschalten - - - Show Group Panel - Gruppenpanel anzeigen - - - Toggle Show Group Panel - 'Gruppenpanel anzeigen' umschalten - - - Setup Remote Sync… - Fernsynchronisierung einrichten… - - - Password Generator - Passwortgenerator - - - E&xpire Entry… - Abge&laufener Eintrag… - - - Clear SSH Agent - SSH-Agent löschen - - - Clear all identities in ssh-agent - Alle Identitäten im SSH-Agent löschen + Bildschirmaufnahmen zulassen @@ -6356,7 +5516,7 @@ Rechnen Sie mit Fehlern und kleineren Problemen. Diese Version ist für Testzwec Edit database settings - Datenbankeinstellungen bearbeiten + Datenbank-Einstellungen bearbeiten Unlock database @@ -6387,7 +5547,7 @@ Rechnen Sie mit Fehlern und kleineren Problemen. Diese Version ist für Testzwec Reset any remembered decisions for this application - Zurücksetzen aller bereits getroffenen Entscheidungen für diese Anwendung + Zurücksetzen aller bereits gemerkten Entscheidungen für diese Anwendung @@ -6404,6 +5564,26 @@ Rechnen Sie mit Fehlern und kleineren Problemen. Diese Version ist für Testzwec Overwriting %1 [%2] Überschreibe %1 [%2] + + older entry merged from database "%1" + älterer Eintrag aus Datenbank "%1" zusammengeführt + + + Adding backup for older target %1 [%2] + Backup für älteres Ziel %1 wird hinzugefügt [%2] + + + Adding backup for older source %1 [%2] + Backup für ältere Quelle %1 wird hinzugefügt [%2] + + + Reapplying older target entry on top of newer source %1 [%2] + Älterer Zieleintrag wird auf neueren Quelleintrag angewendet %1 [%2] + + + Reapplying older source entry on top of newer target %1 [%2] + Älterer Quelleintrag wird auf neueren Zieleintrag angewendet %1 [%2] + Synchronizing from newer source %1 [%2] Synchronisiere von neuerer Quelle %1 [%2] @@ -6441,7 +5621,7 @@ Rechnen Sie mit Fehlern und kleineren Problemen. Diese Version ist für Testzwec NewDatabaseWizard Create a new KeePassXC database… - Neue KeePassXC-Datenbank erstellen… + Neue KeePassXC-Datenbank erstellen … Root @@ -6463,6 +5643,14 @@ Rechnen Sie mit Fehlern und kleineren Problemen. Diese Version ist für Testzwec Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. Hier werden die Details der Verschlüsselung eingestellt. Sie können diese Details auch später in den Datenbank-Einstellungen ändern. + + Advanced Settings + Fortgeschrittene Einstellungen + + + Simple Settings + Grundeinstellungen + NewDatabaseWizardPageDatabaseKey @@ -6497,25 +5685,6 @@ Rechnen Sie mit Fehlern und kleineren Problemen. Diese Version ist für Testzwec Bitte geben Sie den Namen und (optional) eine Beschreibung der neuen Datenbank ein: - - NewEntryAttachmentsDialog - - Attachment name cannot be empty - Name des Anhangs darf nicht leer sein - - - Attachment with the same name already exists - Anhang mit demselben Namen existiert bereits - - - Save attachment - Anhang speichern - - - New entry attachment - Neuer Eintragsanhang - - NixUtils @@ -6528,7 +5697,7 @@ Rechnen Sie mit Fehlern und kleineren Problemen. Diese Version ist für Testzwec Could not register global shortcut - Globales Tastenkürzel konnte nicht registriert werden + Globales Tastaturkürzel konnte nicht registriert werden @@ -6543,7 +5712,7 @@ Rechnen Sie mit Fehlern und kleineren Problemen. Diese Version ist für Testzwec Unable to init cipher for opdata01: %1 - Kann Verschlüsselung für opdata01 nicht initialisieren: %1 + Kann Cipher für opdata01 nicht initialisieren: %1 Unable to read all HMAC signature bytes @@ -6562,6 +5731,15 @@ Rechnen Sie mit Fehlern und kleineren Problemen. Diese Version ist für Testzwec %1 Bytes Klartext erwartet, %2 gefunden + + OpVaultOpenWidget + + Read Database did not produce an instance +%1 + Gelesene Datenbank ergab keine Instanz +%1 + + OpVaultReader @@ -6635,10 +5813,6 @@ Rechnen Sie mit Fehlern und kleineren Problemen. Diese Version ist für Testzwec Unknown cipher: %1 Unbekannter Verschlüsselungsalgorithmus: %1 - - AES-256/GCM is currently not supported - AES-256/GCM wird momentan nicht unterstützt - Passphrase is required to decrypt this key Passphrase zum Entschlüsseln des Schlüssels benötigt @@ -6657,7 +5831,7 @@ Rechnen Sie mit Fehlern und kleineren Problemen. Diese Version ist für Testzwec Failed to initialize cipher: %1 - Initialisierung der Verschlüsselung fehlgeschlagen: %1 + Initialisierung der Chiffre fehlgeschlagen: %1 Decryption failed: %1 @@ -6704,183 +5878,8 @@ Rechnen Sie mit Fehlern und kleineren Problemen. Diese Version ist für Testzwec Unerwartetes Dateiende beim Schreiben des privaten Schlüssels - (encrypted) - (verschlüsselt) - - - - OpenSSHKeyGenDialog - - SSH Key Generator - SSH-Schlüsselgenerator - - - Type - Typ - - - Bits - Bits - - - Comment - Kommentar - - - - PasskeyExportDialog - - KeePassXC - Passkey Export - KeePassXC - Passkey-Export - - - Filenames will be generated with title and .passkey file extension. - Dateinamen werden mit dem Titel und der Dateierweiterung .passkey generiert. - - - Export entries - Einträge exportieren - - - Export Selected - Auswahl exportieren - - - Cancel - Abbrechen - - - Export to folder - In Ordner exportieren - - - Export the following passkey entries. - Die folgenden Passkey-Einträge exportieren. - - - - PasskeyExporter - - KeePassXC: Passkey Export - KeePassXC: Passkey-Export - - - File "%1.passkey" already exists. -Do you want to overwrite it? - - Datei „%1.passkey“ existiert bereits. -Möchten Sie sie überschreiben? - - - - Cannot open file - Datei kann nicht geöffnet werden - - - Cannot open file "%1" for writing. - Datei „%1“ kann nicht zum Schreiben geöffnet werden. - - - Cannot write to file - Datei kann nicht geschrieben werden - - - - PasskeyImportDialog - - KeePassXC - Passkey Import - KeePassXC - Passkey-Import - - - Username: %1 - Benutzername: %1 - - - Group - Gruppe - - - Database - Datenbank - - - Import Passkey - Passkey importieren - - - Import - Importieren - - - Cancel - Abbrechen - - - Entry - Eintrag - - - Create new entry - Neuen Eintrag erstellen - - - Relying Party: %1 - Verlässliche Gegenseite: %1 - - - Import the following passkey: - Den folgenden Passkey importieren: - - - Import the following passkey to this entry: - Den folgenden Passkey in diesen Eintrag importieren: - - - Default passkeys group (Imported Passkeys) - Standard-Passkeys-Gruppe (importierte Passkeys) - - - - PasskeyImporter - - Passkey file - Passkey-Datei - - - All files - Alle Dateien - - - Cannot open file - Datei kann nicht geöffnet werden - - - Cannot open file "%1" for reading. - Datei „%1“ kann nicht zum Lesen geöffnet werden. - - - Open passkey file - Passkey-Datei öffnen - - - Cannot import passkey - Passkey kann nicht importiert werden - - - Cannot import passkey file "%1". Data is missing. - Passkey-Datei „%1“ kann nicht importiert werden. Es fehlen Daten. - - - Cannot import passkey file "%1". -The following data is missing: -%2 - Passkey-Datei „%1“ kann nicht importiert werden. -Die folgenden Daten fehlen: -%2 - - - Cannot import passkey file "%1". Private key is missing or malformed. - Passkey-Datei „%1“ kann nicht importiert werden. Privater Schlüssel fehlt oder ist beschädigt. + AES-256/GCM is currently not supported + AES-256/GCM wird momentan nicht unterstützt @@ -6891,7 +5890,7 @@ Die folgenden Daten fehlen: Password field - Passwortfeld + Passwort-Feld Confirm password: @@ -6911,7 +5910,7 @@ Die folgenden Daten fehlen: Change Password - Passwort ändern + Passwort bearbeiten Remove Password @@ -6999,7 +5998,7 @@ Die folgenden Daten fehlen: Dashes and Slashes - Bindestriche und Schrägstriche + Binde- und Schrägstriche Upper-case letters @@ -7083,7 +6082,11 @@ Die folgenden Daten fehlen: Word Count: - Wortanzahl: + Wort-Anzahl + + + Character Count: + Zeichenanzahl: Word Case: @@ -7097,6 +6100,10 @@ Die folgenden Daten fehlen: Add custom wordlist Benutzerdefinierte Wortliste hinzufügen + + character + Zeichen + Close Schließen @@ -7133,37 +6140,13 @@ Die folgenden Daten fehlen: Entropy: %1 bit Entropie: %1 bit - - Password Quality: %1 - Passwort-Qualität: %1 - - - Poor - Password quality - Schlecht - - - Weak - Password quality - Schwach - - - Good - Password quality - Gut - - - Excellent - Password quality - Ausgezeichnet - Confirm Delete Wordlist Löschen der Wortliste bestätigen Do you really want to delete the wordlist "%1"? - Wollen Sie die Wortliste „%1“ wirklich löschen? + Wollen Sie die Wortliste "%1" wirklich löschen? Failed to delete wordlist @@ -7188,7 +6171,7 @@ Die folgenden Daten fehlen: Wordlist "%1" already exists as a custom wordlist. Do you want to overwrite it? - Die Wortliste „%1“ existiert bereits als benutzerdefinierte Wortliste. + Die Wortliste "%1" existiert bereits als benutzerdefinierte Wortliste. Möchten Sie diese überschreiben? @@ -7204,20 +6187,32 @@ Möchten Sie diese überschreiben? Sonderzeichen - passwordLength - Passwortlänge + Password Quality: %1 + Passwort-Qualität: %1 - Characters: %1 - Zeichen: %1 + Poor + Password quality + Schlecht - MIXED case - Groß- und Kleinbuchstaben + Weak + Password quality + Schwach - Excluded characters: "0", "1", "l", "I", "O", "|", "﹒", "B", "8", "G", "6" - Ausgeschlossene Zeichen: „0“, „1“, „l“, „I“, „O“, „|“, „﹒“, „B“, „8“, „G“, „6“ + Good + Password quality + Gut + + + Excellent + Password quality + Ausgezeichnet + + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + Ausgeschlossene Zeichen: "0", "1", "l", "I", "O", "|", "﹒" @@ -7267,7 +6262,7 @@ Möchten Sie diese überschreiben? Ausgezeichnet - Toggle password visibility using Control + H. Open the password generator using Control + G. + Toggle password visibilty using Control + H. Open the password generator using Control + G. Sichtbarkeit des Passworts mit Strg+H umschalten. Passwortgenerator mit Strg+G öffnen. @@ -7279,28 +6274,13 @@ Möchten Sie diese überschreiben? Select characters to type, navigate with arrow keys, Ctrl + S submits. - Zu tippende Zeichen auswählen, mit Pfeiltasten navigieren, Strg+S bestätigt die Eingabe. + Zu tippende Zeichen auswählen, mit Pfeiltasten navigieren, Strg + S sendet. Press &Tab between characters Taste &Tab zwischen Zeichen drücken - - PreviewEntryAttachmentsDialog - - Preview entry attachment - Vorschau des Eintragsanhangs - - - No preview available - Keine Vorschau verfügbar - - - Image format not supported - Bildformat wird nicht unterstützt - - QMessageBox @@ -7339,10 +6319,6 @@ Möchten Sie diese überschreiben? Continue Fortsetzen - - Continue with weak password - Weiter mit schwachem Passwort - QObject @@ -7504,7 +6480,7 @@ Möchten Sie diese überschreiben? Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. - Überprüfen Sie, ob Passwörter öffentlich bekannt geworden sind. FILENAME muss der Pfad zu der Datei sein, die SHA-1-Hashes der Passwörter im HIBP-Format enthält, wie sie unter https://haveibeenpwned.com/Passwords zu finden sind. + Überprüfen, ob irgenwelche Passwörter in öffentlichen Datenlecks vorkommen. DATEINAME muss der der Pfad der Datei sein, die SHA-1-Hashes der Passwörter im HIBP-Format enthält, wie zu finden unter https://haveibeenpwned.com/Passwords. FILENAME @@ -7528,7 +6504,7 @@ Möchten Sie diese überschreiben? Evaluating database entries using okon… - Auswerten von Datenbankeinträgen mit okon… + Auswerten von Datenbankeinträgen mit okon ... Failed to open HIBP file %1: %2 @@ -7536,11 +6512,11 @@ Möchten Sie diese überschreiben? Evaluating database entries against HIBP file, this will take a while… - Datenbankeinträge gegen HIBP-Datei auswerten, das dauert eine Weile… + Datenbankeinträge gegen HIBP-Datei auswerten, das dauert eine Weile ... Password for '%1' has been leaked %2 time(s)! - Passwort für '%1' wurde einmal in Datenlecks gefunden!Passwort für '%1' wurde %2-mal in Datenlecks gefunden! + Passwort für '%1' wurde %2 Mal in Datenlecks gefunden!Passwort für '%1' wurde %2 Mal in Datenlecks gefunden! Password for '%1' has been leaked! @@ -7629,11 +6605,11 @@ Möchten Sie diese überschreiben? Copy the given attribute to the clipboard. Defaults to "password" if not specified. Don't translate "password", it refers to the attribute. - Angegebene Eigenschaft in die Zwischenablage kopieren. Voreinstellung ist „Passwort“. + Angegebene Eigenschaft in die Zwischenablage kopieren. Voreinstellung ist "Passwort". Copy the current TOTP to the clipboard (equivalent to "-a totp"). - Aktuelles TOTP in die Zwischenablage kopieren (äquivalent zu „-a totp“). + Aktuelles TOTP in die Zwischenablage kopieren (äquivalent zu "-a totp"). Must match only one entry, otherwise a list of possible matches is shown. @@ -7678,15 +6654,15 @@ Möchten Sie diese überschreiben? ERROR: attribute %1 is ambiguous, it matches %2. - FEHLER: Eigenschaft %1 ist uneindeutig, es passt zu %2. + FEHLER: Eigenschaft %1 ist uneindeutig, passt auf %2. Attribute "%1" not found. - Eigenschaft „%1“ nicht gefunden. + Eigenschaft "%1" nicht gefunden. Entry's "%1" attribute copied to the clipboard! - Eigenschaft „%1“ des Eintrags wurde in die Zwischenablage kopiert! + Eigenschaft "%1" des Eintrags wurde in die Zwischenablage kopiert! Clearing the clipboard in %1 second(s)... @@ -7718,11 +6694,11 @@ Möchten Sie diese überschreiben? Deactivate password key for the database. - Passwortschlüssel für die Datenbank deaktivieren. + Passwort-Schlüssel für die Datenbank deaktivieren. Yubikey slot and optional serial used to access the database (e.g., 1:7370001). - YubiKey-Slot und optional Seriennummer zum Zugriff auf die Datenbank (z. B. 1:7370001). + Yubikey-Slot und optional Seriennummer zum Zugriff auf die Datenbank (z.B. 1:7370001). slot[:serial] @@ -7736,13 +6712,9 @@ Möchten Sie diese überschreiben? Too many arguments provided. Zu viele Argumente angegeben. - - Path of the database. - Pfad der Datenbank. - Target decryption time in MS for the database. - Ziel-Entschlüsselungszeit in ms für die Datenbank. + Ziel-Entschlüsselungsdauer für die Datenbank in ms. time @@ -7760,13 +6732,17 @@ Möchten Sie diese überschreiben? Create a new database. Neue Datenbank erstellen. + + Path of the database. + Pfad der Datenbank. + Invalid decryption time %1. - Ungültige Entschlüsselungszeit %1. + Ungültige Entschlüsselungsdauer %1. Target decryption time must be between %1 and %2. - Ziel-Entschlüsselungszeit muss zwischen %1 und %2 sein. + Ziel-Entschlüsselungsdauer muss zwischen %1 und %2 sein. Failed to set database password. @@ -7782,7 +6758,7 @@ Möchten Sie diese überschreiben? Benchmarking key derivation function for %1ms delay. - Schlüssel-Ableitungsfunktion für %1 ms Verzögerung messen. + Messe Schlüssel-Ableitungsfunktion für %1 ms Verzögerung. Setting %1 rounds for key derivation function. @@ -7804,158 +6780,6 @@ Möchten Sie diese überschreiben? Successfully created new database. Datenbank erfolgreich erstellt. - - Unset the password for the database. - Löscht das Passwort für die Datenbank. - - - Unset the key file for the database. - Löscht die Schlüsseldatei für die Datenbank. - - - Edit a database. - Eine Datenbank bearbeiten. - - - Cannot use %1 and %2 at the same time. - %1 und %2 können nicht gleichzeitig verwendet werden. - - - Could not change the database key. - Datenbankschlüssel konnte nicht geändert werden. - - - Database was not modified. - Datenbank wurde nicht geändert. - - - Writing the database failed: %1 - Schreiben der Datenbank fehlgeschlagen: %1 - - - Successfully edited the database. - Datenbank wurde erfolgreich bearbeitet. - - - Cannot remove password: The database does not have a password. - Passwort kann nicht entfernt werden: Die Datenbank hat kein Passwort. - - - Cannot remove file key: The database does not have a file key. - Der Dateischlüssel kann nicht entfernt werden: Die Datenbank hat keinen Dateischlüssel. - - - Loading the new key file failed: %1 - Laden der neuen Schlüsseldatei fehlgeschlagen: %1 - - - Found unexpected Key type %1 - Unerwarteter Schlüsseltyp %1 gefunden - - - Cannot remove all the keys from a database. - Es können nicht alle Schlüssel aus einer Datenbank entfernt werden. - - - Show a database's information. - Datenbankinformationen anzeigen. - - - UUID: - UUID: - - - Name: - Name: - - - Description: - Beschreibung: - - - Cipher: - Verschlüsselungsalgorithmus: - - - KDF: - KDF: - - - Recycle bin is enabled. - Papierkorb ist aktiviert. - - - Recycle bin is not enabled. - Papierkorb ist nicht aktiviert. - - - Location - Speicherort - - - Database created - Datenbank erstellt - - - Last saved - Zuletzt gespeichert - - - Unsaved changes - Ungespeicherte Änderungen - - - yes - ja - - - no - nein - - - Number of groups - Anzahl der Gruppen - - - Number of entries - Anzahl der Einträge - - - Number of expired entries - Anzahl der abgelaufenen Einträge - - - Unique passwords - Eindeutige Passwörter - - - Non-unique passwords - Nicht eindeutige Passwörter - - - Maximum password reuse - Maximale Wiederverwendung eines Passworts - - - Number of short passwords - Anzahl der kurzen Passwörter - - - Number of weak passwords - Anzahl der schwachen Passwörter - - - Entries excluded from reports - Von Berichten ausgeschlossene Einträge - - - Average password length - Durchschnittliche Passwortlänge - - - %1 characters - %1 Zeichen - Word count for the diceware passphrase. Wortanzahl für die Diceware-Passphrase. @@ -7979,6 +6803,10 @@ Möchten Sie diese überschreiben? Invalid word count %1 Ungültige Wortanzahl %1 + + The word list is too small (< 1000 items) + Die Wortliste ist zu kurz (< 1000 Einträge) + Title for the entry. Titel für diesen Eintrag. @@ -8003,6 +6831,10 @@ Möchten Sie diese überschreiben? 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. @@ -8109,7 +6941,7 @@ Möchten Sie diese überschreiben? Type: Unknown (%1) - Typ: unbekannt (%1) + Typ: Unbekannt (%1) Entropy %1 (%2) @@ -8121,7 +6953,11 @@ Möchten Sie diese überschreiben? Exit interactive mode. - Interaktiven Modus beenden. + Interaktiven Modus verlassen. + + + Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. + Zu benutzendes Format für den Export. Verfügbare Optionen sind 'xml' oder 'csv'. Standard ist 'xml'. Exports the content of a database to standard output in the specified format. @@ -8129,7 +6965,7 @@ Möchten Sie diese überschreiben? Unable to export database to XML: %1 - Fehler beim Exportieren der Datenbank als XML: %1 + Fehler beim Exportieren der Datenbank nach XML: %1 Unsupported format %1 @@ -8209,7 +7045,7 @@ Möchten Sie diese überschreiben? Path of the XML database export. - Pfad des XML-Datenbankexports. + Pfad des XML-Datenbank-Exports. Path of the new database. @@ -8223,6 +7059,106 @@ Möchten Sie diese überschreiben? Successfully imported database. Datenbank erfolgreich importiert. + + Show a database's information. + Datenbankinformationen anzeigen. + + + UUID: + UUID: + + + Name: + Name: + + + Description: + Beschreibung: + + + Cipher: + Verschlüsselungsalgorithmus: + + + KDF: + KDF: + + + Recycle bin is enabled. + Papierkorb ist aktiviert. + + + Recycle bin is not enabled. + Papierkorb ist nicht aktiviert. + + + Location + Speicherort + + + Database created + Datenbank erstellt + + + Last saved + Zuletzt gespeichert + + + Unsaved changes + Ungespeicherte Änderungen + + + yes + ja + + + no + nein + + + Number of groups + Anzahl der Gruppen + + + Number of entries + Anzahl der Einträge + + + Number of expired entries + Anzahl der abgelaufenen Einträge + + + Unique passwords + Eindeutige Passwörter + + + Non-unique passwords + Nicht eindeutige Passwörter + + + Maximum password reuse + Maximale Wiederverwendung eines Passworts + + + Number of short passwords + Anzahl der kurzen Passwörter + + + Number of weak passwords + Anzahl der schwachen Passwörter + + + Entries excluded from reports + Von Berichten ausgeschlossene Einträge + + + Average password length + Durchschnittliche Passwortlänge + + + %1 characters + %1 Zeichen + Unknown command %1 Unbekannter Befehl %1 @@ -8279,7 +7215,7 @@ Verfügbare Kommandos: Deactivate password key for the database to merge from. - Passwortschlüssel für die Quelldatenbank der Zusammenführung deaktivieren. + Passwort-Schlüssel für die Quell-Datenbank der Zusammenführung deaktivieren. Only print the changes detected by the merge operation. @@ -8287,7 +7223,7 @@ Verfügbare Kommandos: Yubikey slot for the second database. - YubiKey-Slot für die zweite Datenbank. + Yubikey-Slot für die zweite Datenbank. slot @@ -8395,10 +7331,6 @@ Verfügbare Kommandos: Show the protected attributes in clear text. Geschützte Eigenschaften im Klartext anzeigen. - - Show all the attributes of the entry. - Alle Eigenschaften des Eintrags anzeigen. - Show the attachments of the entry. Anhänge des Eintrags anzeigen. @@ -8433,15 +7365,15 @@ Verfügbare Kommandos: Failed to open database file %1: not found - Fehler beim Öffnen der Datenbankdatei %1: Nicht gefunden + Fehler beim Öffnen der Datenbank-Datei %1: Nicht gefunden Failed to open database file %1: not a plain file - Fehler beim Öffnen der Datenbankdatei %1: Keine normale Datei + Fehler beim Öffnen der Datenbank-Datei %1: Keine normale Datei Failed to open database file %1: not readable - Fehler beim Öffnen der Datenbankdatei %1: Nicht lesbar + Fehler beim Öffnen der Datenbank-Datei %1: Nicht lesbar Enter password to unlock %1: @@ -8469,10 +7401,6 @@ Bitte erwägen Sie, eine neue Schlüsseldatei zu erzeugen. Invalid YubiKey serial %1 Ungültige YubiKey-Seriennummer %1 - - Please present or touch your YubiKey to continue. - Bitte halten oder berühren Sie Ihren YubiKey, um fortzufahren. - Enter password to encrypt database (optional): Passwort eingeben, um Datenbank zu verschlüsseln (optional): @@ -8553,7 +7481,7 @@ Bitte erwägen Sie, eine neue Schlüsseldatei zu erzeugen. Password expiry was %1 - Passwortablauf war %1 + Passwort-Ablauf war %1 Password expires on %1 @@ -8565,7 +7493,7 @@ Bitte erwägen Sie, eine neue Schlüsseldatei zu erzeugen. Password expires in %1 day(s) - Passwort läuft in %1 Tag abPasswort läuft in %1 Tagen ab + Passwort läuft in %1 Tag abPasswort läuft in %1 Tag(en) ab Password will expire soon @@ -8637,27 +7565,27 @@ Kernel: %3 %4 over %1 year(s) - über %1 Jahrüber %1 Jahre + über %1 Jahrüber %1 Jahr(e) about %1 month(s) - ca. %1 Monatca. %1 Monate + ca. %1 Monatca. %1 Monat(e) %1 week(s) - %1 Woche%1 Wochen + %1 Woche%1 Woche(n) %1 day(s) - %1 Tag%1 Tage + %1 Tag%1 Tag(e) %1 hour(s) - %1 Stunde%1 Stunden + %1 Stunde%1 Stunde(n) %1 minute(s) - %1 Minute%1 Minuten + %1 Minute%1 Minute(n) Botan library must be at least %1, found %2.%3.%4 @@ -8711,13 +7639,25 @@ Kernel: %3 %4 file empty Datei leer + + malformed string + Ungültige Zeichenfolge + + + missing closing quote + Schließendes Anführungszeichen fehlt + + + %1: (row, col) %2,%3 + %1: (Zeile, Spalte) %2,%3 + AES 256-bit - AES 256-Bit + AES 256-bit Twofish 256-bit - Twofish 256-Bit + Twofish 256-bit ChaCha20 256-bit @@ -8749,7 +7689,7 @@ Kernel: %3 %4 Clearing the clipboard in %1 second(s)… - Zwischenablage wird in %1 Sekunde gelöscht…Zwischenablage wird in %1 Sekunden gelöscht… + Zwischenablage wird in %1 Sekunde gelöscht…Zwischenablage wird in %1 Sekunden gelöscht … Group @@ -8811,7 +7751,7 @@ Kernel: %3 %4 Do you really want to move entry "%1" to the recycle bin? - Wollen Sie den Eintrag „%1“ wirklich in den Papierkorb verschieben? + Wollen Sie den Eintrag "%1" wirklich in den Papierkorb verschieben? Do you really want to move %n entry(s) to the recycle bin? @@ -8827,7 +7767,7 @@ Kernel: %3 %4 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. Möchten Sie die Referenz mit Werten überschreiben, diesen Eintrag überspringen oder trotzdem löschen?Eintrag „%1“ hat %2 Referenzen. Möchten Sie die Referenzen mit Werten überschreiben, diesen Eintrag überspringen oder trotzdem löschen? + Eintrag "%1" hat %2 Referenz. Möchten Sie die Referenz mit Werten überschreiben, diesen Eintrag überspringen oder trotzdem löschen?Eintrag "%1" hat %2 Referenzen. Möchten Sie die Referenzen mit Werten überschreiben, diesen Eintrag überspringen oder trotzdem löschen? User name @@ -8851,7 +7791,7 @@ Kernel: %3 %4 Unsupported key file version: %1 - Nicht unterstützte Schlüsseldateiversion: %1 + Nicht unterstützte Version der Schlüsseldatei: %1 Checksum mismatch! Key file may be corrupt. @@ -8889,6 +7829,14 @@ Kernel: %3 %4 read password of the database from stdin Passwort der Datenbank von stdin lesen + + allow app screen recordering and screenshots + Bildschirmaufnahmen und Screenshots zulassen. + + + Locked databases. + Gesperrte Datenbanken. + Database failed to lock. Datenbank kann nicht gesperrt werden. @@ -8897,10 +7845,6 @@ Kernel: %3 %4 Another instance of KeePassXC is already running. Eine andere KeePassXC-Instanz läuft bereits. - - KeePassXC is not running. No open database to lock - KeePassXC läuft im Moment nicht. Keine offene Datenbank zum Sperren - Fatal error while testing the cryptographic functions. Kritischer Fehler beim Testen der kryptografischen Funktionen. @@ -8944,300 +7888,70 @@ Kernel: %3 %4 Ungültige KDF - Access to all entries is denied - Zugriff auf alle Einträge wird verweigert + Please present or touch your YubiKey to continue. + Bitte halten oder berühren Sie Ihren YubiKey, um fortzufahren. - allow screenshots and app recording (Windows/macOS) - Bildschirmfotos und App-Aufnahmen erlauben (Windows/macOS) + Show all the attributes of the entry. + Alle Eigenschaften des Eintrags anzeigen. + + + Edit a database. + Eine Datenbank bearbeiten. + + + Could not change the database key. + Datenbankschlüssel konnte nicht geändert werden. + + + Database was not modified. + Datenbank wurde nicht geändert. + + + Successfully edited the database. + Datenbank wurde erfolgreich bearbeitet. + + + Loading the new key file failed: %1 + Laden der neuen Schlüsseldatei fehlgeschlagen: %1 + + + Unset the password for the database. + Löscht das Passwort für die Datenbank. + + + Unset the key file for the database. + Löscht die Schlüsseldatei für die Datenbank. + + + Cannot use %1 and %2 at the same time. + %1 und %2 können nicht gleichzeitig verwendet werden. + + + Cannot remove all the keys from a database. + Es können nicht alle Schlüssel aus einer Datenbank entfernt werden. + + + Cannot remove password: The database does not have a password. + Passwort kann nicht entfernt werden: Die Datenbank hat kein Passwort. + + + Cannot remove file key: The database does not have a file key. + Der Dateischlüssel kann nicht entfernt werden: Die Datenbank hat keinen Dateischlüssel. + + + Found unexpected Key type %1 + Unerwarteter Schlüsseltyp %1 gefunden Set the key file for the database. -This option is deprecated, use --set-key-file instead. +This options is deprecated, use --set-key-file instead. Legt die Schlüsseldatei für die Datenbank fest. Diese Option ist veraltet, verwenden Sie stattdessen --set-key-file. - Databases have been locked. - Datenbanken wurden gesperrt. - - - Attestation not supported - Beglaubigung nicht unterstützt - - - Credential is excluded - Anmeldedaten sind ausgeschlossen - - - Passkeys request canceled - Anfrage für Passkeys abgebrochen - - - Invalid user verification - Ungültige Benutzerverifikation - - - Empty public key - Leerer öffentlicher Schlüssel - - - Invalid URL provided - Ungültige URL angegeben - - - Passkeys - Passkeys - - - AES initialization failed - AES-Initialisierung fehlgeschlagen - - - AES encrypt failed - AES-Verschlüsselung fehlgeschlagen - - - Failed to store in Linux Keyring - Speichern im Linux-Schlüsselbund fehlgeschlagen - - - Polkit returned an error: %1 - Polkit hat einen Fehler zurückgegeben: %1 - - - Could not locate key in keyring - Schlüssel im Schlüsselbund konnte nicht gefunden werden - - - Could not read key in keyring - Schlüssel im Schlüsselbund konnte nicht gelesen werden - - - AES decrypt failed - AES-Entschlüsselung fehlgeschlagen - - - No Polkit authentication agent was available - Es war kein Polkit-Authentifizierungsagent verfügbar - - - Polkit authorization failed - Polkit-Autorisierung fehlgeschlagen - - - No Quick Unlock provider is available - Es ist kein Quick Unlock-Anbieter verfügbar - - - Failed to init KeePassXC crypto. - KeePassXC-Krypto konnte nicht gestartet werden. - - - Failed to encrypt key data. - Verschlüsselung der Schlüsseldaten fehlgeschlagen. - - - Failed to get Windows Hello credential. - Windows Hello-Anmeldedaten konnten nicht abgerufen werden. - - - Failed to decrypt key data. - Entschlüsselung der Schlüsseldaten fehlgeschlagen. - - - Origin is empty or not allowed - Ursprung ist leer oder nicht erlaubt - - - Effective domain is not a valid domain - Tatsächliche Domain ist keine gültige Domain - - - Origin and RP ID do not match - Ursprung und RP-ID stimmen nicht überein - - - No supported algorithms were provided - Keine unterstützten Algorithmen wurden bereitgestellt - - - Wait for timer to expire - Warten, bis der Timer abgelaufen ist - - - Challenge is shorter than required minimum length - Challenge ist kürzer als die erforderliche Mindestlänge - - - user.id does not match the required length - user.id entspricht nicht der erforderlichen Länge - - - Favorite - Tag for favorite entries - Favorit - - - File does not exist. - Datei existiert nicht. - - - Cannot open file: %1 - Datei kann nicht geöffnet werden: %1 - - - Cannot parse file: %1 at position %2 - Datei kann nicht verarbeitet werden: %1 an Position %2 - - - Failed to decrypt json file: %1 - JSON-Datei konnte nicht entschlüsselt werden: %1 - - - Invalid encKeyValidation field - Ungültiges encKeyValidation-Feld - - - Invalid cipher list within encKeyValidation field - Ungültige Verschlüsselungsliste im Feld encKeyValidation - - - Wrong password - Falsches Passwort - - - Invalid encrypted data field - Ungültiges verschlüsseltes Datenfeld - - - Invalid cipher list within encrypted data field - Ungültige Verschlüsselungsliste im verschlüsselten Datenfeld - - - Cannot initialize cipher - Kann Verschlüsselungsalgorithmus nicht initialisieren - - - Cannot decrypt data - Daten können nicht entschlüsselt werden - - - Bitwarden Import - Bitwarden importieren - - - Archived - Tag for archived entries - Archiviert - - - Invalid 1PUX file format: Not a valid ZIP file. - Ungültiges 1PUX-Dateiformat: keine gültige ZIP-Datei. - - - Invalid 1PUX file format: Missing export.data - Ungültiges 1PUX-Dateiformat: fehlende export.data - - - 1Password Import - 1Password importieren - - - Enter Shortcut - Tastenkürzel eingeben - - - Action - Aktion - - - Shortcuts - Tastenkürzel - - - Unknown passkeys error - Unbekannter Passkey-Fehler - - - Invalid KDF iterations, cannot decrypt json file - Ungültige KDF-Iterationen, JSON-Datei kann nicht entschlüsselt werden. - - - Unsupported format, ensure your Bitwarden export is password-protected - Nicht unterstütztes Format, stellen Sie sicher, dass Ihr Bitwarden-Export passwortgeschützt ist. - - - Only PBKDF and Argon2 are supported, cannot decrypt json file - Nur PBKDF und Argon2 werden unterstützt, JSON-Datei kann nicht entschlüsselt werden. - - - Reset Shortcuts - Tastenkürzel zurücksetzen - - - Double click an action to change its shortcut - Doppelklick auf eine Aktion, um das Tastenkürzel zu ändern - - - Filter... - Filtern… - - - Shortcut Conflict - Tastenkürzelkonflikt - - - Shortcut %1 conflicts with '%2'. Overwrite shortcut? - Tastenkürzel %1 steht im Konflikt mit '%2'. Tastenkürzel überschreiben? - - - Cannot generate valid passphrases because the wordlist is too short - Es können keine gültigen Passphrasen erzeugt werden, da die Wortliste zu kurz ist - - - Encrypted files are not supported. - Verschlüsselte Dateien werden nicht unterstützt. - - - Proton Pass Import - Proton Pass importieren - - - Delete plugin data? - Plugin-Daten löschen? - - - Delete plugin data from Entry(s)? - Plugin-Daten aus Eintrag löschen?Plugin-Daten aus Einträgen löschen? - - - Passkey - Passkey - - - Format to use when exporting. Available choices are 'xml', 'csv' or 'html'. Defaults to 'xml'. - Für den Export zu verwendendes Format. Zur Auswahl stehen „xml“, „csv“ oder „html“. Standard ist „xml“. - - - start minimized to the system tray - Minimiert in der Taskleiste starten - - - malformed string, possible unescaped delimiter - - - - missing closing delimiter - - - - %1, row: %2, column: %3 - - - - Tags - Tags + KeePassXC is not running. No open database to lock + KeePassXC läuft im Moment nicht. Keine offene Datenbank zum Sperren @@ -9274,39 +7988,20 @@ Diese Option ist veraltet, verwenden Sie stattdessen --set-key-file.Interner Fehler in zlib: - - RemoteHandler - - Command `%1` did not finish in time. Process was killed. - Der Befehl `%1` wurde nicht rechtzeitig beendet. Der Prozess wurde beendet. - - - Failed to upload merged database. Command `%1` did not finish in time. Process was killed. - Das Hochladen der zusammengeführten Datenbank ist fehlgeschlagen. Der Befehl `%1` wurde nicht rechtzeitig beendet. Prozess wurde beendet. - - - Invalid download parameters provided. - Ungültige Download-Parameter angegeben. - - - Command `%1` failed to download database. - Der Befehl `%1` ist beim Herunterladen der Datenbank fehlgeschlagen. - - - Invalid database pointer or upload parameters provided. - Ungültiger Datenbankzeiger oder ungültige Upload-Parameter angegeben. - - - Command `%1` exited with status code: %2 - Der Befehl `%1` wurde mit Statuscode beendet: %2 - - - Failed to upload merged database. Command `%1` exited with status code: %2 - Das Hochladen der zusammengeführten Datenbank ist fehlgeschlagen. Der Befehl `%1` wurde mit Statuscode beendet: %2 - - ReportsWidgetBrowserStatistics + + Exclude expired entries from the report + Abgelaufene Einträge aus dem Bericht ausschließen + + + Show only entries which have URL set + Nur Einträge anzeigen, für die eine URL festgelegt wurde + + + Show only entries which have browser settings in custom data + Nur Einträge anzeigen, die Browsereinstellungen in den benutzerdefinierten Daten haben + Double-click entries to edit. Einträge zum Bearbeiten doppelklicken @@ -9341,7 +8036,7 @@ Diese Option ist veraltet, verwenden Sie stattdessen --set-key-file. Please wait, browser statistics is being calculated… - Bitte warten Sie, die Browserstatistik wird berechnet… + Bitte warten Sie, die Browser-Statistik wird gerade berechnet … No entries with a URL, or none has browser extension settings saved. @@ -9361,66 +8056,57 @@ Diese Option ist veraltet, verwenden Sie stattdessen --set-key-file. Edit Entry… - Eintrag bearbeiten… + Eintrag bearbeiten … Delete Entry(s)… - Eintrag löschen…Einträge löschen… + Einträge löschen… Exclude from reports Von Berichten ausschließen - - Expire Entry(s)… - Abgelaufener Eintrag…Abgelaufene Einträge… - - - Only show entries that have a URL - Nur Einträge anzeigen, die eine URL enthalten - - - Only show entries that have been explicitly allowed or denied - Nur Einträge anzeigen, die explizit erlaubt oder verweigert wurden - - - Show expired entries - Abgelaufene Einträge anzeigen - - - (Expired) - (abgelaufen) - - - Delete plugin data from Entry(s)… - Plugin-Daten aus Eintrag löschen…Plugin-Daten aus Einträgen löschen… - ReportsWidgetHealthcheck - Show expired entries - Abgelaufene Einträge anzeigen + Exclude expired entries from the report + Abgelaufene Einträge aus dem Bericht ausschließen - (Expired) - (abgelaufen) + Also show entries that have been excluded from reports + Auch Einträge zeigen, die von Berichten ausgeschlossen wurden Hover over reason to show additional details. Double-click entries to edit. Für weitere Informationen mit der Maus über den Grund fahren. Doppelklick auf Einträge zum Bearbeiten. + + Bad + Password quality + Sehr schlecht + Bad — password must be changed - Sehr schlecht — Passwort muss geändert werden + Sehr schlecht —Passwort muss geändert werden + + + Poor + Password quality + Schlecht Poor — password should be changed Schlecht — Passwort sollte geändert werden + + Weak + Password quality + Schwach + Weak — consider changing the password - Schwach — Passwortänderung sollte erwogen werden + Schwach — Passwortänderung sollte erwägt werden (Excluded) @@ -9432,7 +8118,7 @@ Diese Option ist veraltet, verwenden Sie stattdessen --set-key-file. Please wait, health data is being calculated… - Bitte warten Sie, der Gesundheitszustand wird berechnet… + Bitte warten, der Gesundheitszustand wird berechnet ... Congratulations, everything is healthy! @@ -9456,7 +8142,7 @@ Diese Option ist veraltet, verwenden Sie stattdessen --set-key-file. Edit Entry… - Eintrag bearbeiten… + Eintrag bearbeiten … Delete Entry(s)… @@ -9466,20 +8152,12 @@ Diese Option ist veraltet, verwenden Sie stattdessen --set-key-file.Exclude from reports Von Berichten ausschließen - - Expire Entry(s)… - Abgelaufener Eintrag…Abgelaufene Einträge… - - - Show entries that have been excluded from reports - Einträge anzeigen, die von Berichten ausgeschlossen wurden - ReportsWidgetHibp CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. - ACHTUNG: Dieser Bericht erfordert das Senden von Informationen an den Onlinedienst „Have I Been Pwned“ (https://haveibeenpwned.com). Wenn Sie fortfahren, werden Ihre Datenbank-Passwörter kryptografisch gehasht, und die ersten fünf Zeichen dieser Hashes werden sicher an diesen Dienst gesendet. Ihre Datenbank bleibt sicher und kann nicht aus diesen Informationen rekonstruiert werden. Die Anzahl der von Ihnen gesendeten Passwörter und Ihre IP-Adresse werden jedoch an diesen Dienst weitergegeben. + ACHTUNG: Dieser Bericht erfordert, dass Informationen an den "Have I Been Pwned"-Onlinedienst (https://haveibeenpwned.com) gesendet werden. Wenn Sie fortfahren, werden Ihre Datenbank-Passwörter kryptografisch gehasht, und die ersten fünf Zeichen dieser Hashes werden sicher an diesen Dienst übertragen. Ihre Datenbank bleibt sicher und kann nicht aus diesen Informationen rekonstruiert werden. Jedoch werden die Anzahl der gesendeten Passwörter und Ihre IP-Adresse dem Dienst offengelegt. Perform Online Analysis @@ -9491,7 +8169,7 @@ Diese Option ist veraltet, verwenden Sie stattdessen --set-key-file. This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. - Dieser Build von KeePassXC hat keine Netzwerkfunktionalität. Diese ist erforderlich, um Ihre Passwörter gegen die Datenbanken von Have I Been Pwned zu überprüfen. + Diese Version von KeePassXC hat keine Netzwerkfunktionalität. Die ist aber erforderlich, um Ihre Passwörter gegen die Datenbanken von Have I Been Pwned zu überprüfen. Congratulations, no exposed passwords! @@ -9507,7 +8185,7 @@ Diese Option ist veraltet, verwenden Sie stattdessen --set-key-file. Password exposed… - Passwort offengelegt… + Passwort offengelegt … (Excluded) @@ -9559,87 +8237,16 @@ Diese Option ist veraltet, verwenden Sie stattdessen --set-key-file. Edit Entry… - Eintrag bearbeiten… + Eintrag bearbeiten ... Delete Entry(s)… - Eintrag löschen…Einträge löschen… + Eintrag löschen...Einträge löschen ... Exclude from reports Von Berichten ausschließen - - Expire Entry(s)… - Abgelaufener Eintrag…Abgelaufene Einträge… - - - - ReportsWidgetPasskeys - - Export - Exportieren… - - - Import - Importieren… - - - List of entry URLs - Liste der Eintrags-URLs - - - Title - Titel - - - Path - Pfad - - - Username - Benutzername - - - URLs - URLs - - - Edit Entry… - Eintrag bearbeiten… - - - Delete Entry(s)… - Eintrag löschen…Einträge löschen… - - - Relying Party - Verlässliche Gegenseite - - - Show expired entries - Abgelaufene Einträge anzeigen - - - (Expired) - (abgelaufen) - - - Export Confirmation - Export bestätigen - - - The passkey file will be vulnerable to theft and unauthorized use, if left unsecured. Are you sure you want to continue? - Die Passkey-Datei ist anfällig für Diebstahl und unbefugte Nutzung, wenn sie nicht gesichert ist. Sind Sie sicher, dass Sie fortfahren möchten? - - - Please wait, list of entries with passkeys is being updated… - Bitte warten Sie, die Liste der Einträge mit Passkeys wird gerade aktualisiert… - - - No entries with passkeys. - Keine Einträge mit Passkeys. - ReportsWidgetStatistics @@ -9657,7 +8264,7 @@ Diese Option ist veraltet, verwenden Sie stattdessen --set-key-file. Please wait, database statistics are being calculated… - Bitte warten Sie, die Datenbankstatistik wird berechnet… + Bitte warten Sie, die Datenbankstatistik wird berechnet ... Database name @@ -9713,15 +8320,15 @@ Diese Option ist veraltet, verwenden Sie stattdessen --set-key-file. Unique passwords - Einzigartige Passwörter + Eindeutige Passwörter Non-unique passwords - Nicht einzigartige Passwörter + Nicht eindeutige Passwörter More than 10% of passwords are reused. Use unique passwords when possible. - Mehr als 10 % der Passwörter werden wiederverwendet. Verwenden Sie nach Möglichkeit einzigartige Passwörter. + Mehr als 10 % der Passwörter werden wiederverwendet. Verwenden Sie nach Möglichkeit eindeutige Passwörter. Maximum password reuse @@ -9729,7 +8336,7 @@ Diese Option ist veraltet, verwenden Sie stattdessen --set-key-file. Some passwords are used more than three times. Use unique passwords when possible. - Einige Passwörter werden mehr als dreimal verwendet. Verwenden Sie nach Möglichkeit einzigartige Passwörter. + Einige Passwörter werden mehr als dreimal verwendet. Verwenden Sie nach Möglichkeit eindeutige Passwörter. Number of short passwords @@ -9745,7 +8352,7 @@ Diese Option ist veraltet, verwenden Sie stattdessen --set-key-file. Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. - Die Verwendung langer, zufällig erzeugter Passwörter mit der Bewertung „gut“ oder „hervorragend“ wird empfohlen. + Wir empfehlen die Verwendung langer, zufällig erzeugter Passwörter mit der Bewertung "gut" oder "hervorragend". Entries excluded from reports @@ -9753,7 +8360,7 @@ Diese Option ist veraltet, verwenden Sie stattdessen --set-key-file. Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. - Das Ausschließen von Einträgen aus Berichten, z. B., weil sie bekannterweise schlechte Passwörter haben, ist nicht unbedingt ein Problem, aber Sie sollten ein Auge auf sie haben. + Das Ausschließen von Einträgen aus Berichten, z. B. weil sie bekannterweise schlechte Passwörter haben, ist nicht unbedingt ein Problem, aber Sie sollten ein Auge darauf haben. Average password length @@ -9784,7 +8391,7 @@ Diese Option ist veraltet, verwenden Sie stattdessen --set-key-file. Key identity ownership conflict. Refusing to add. - Konflikt bei der Schlüsselidentität. Hinzufügen verweigern. + Konflikt beim Schlüssel-Identitäts-Besitz. Füge nicht hinzu. Agent refused this identity. Possible reasons include: @@ -9812,15 +8419,7 @@ Diese Option ist veraltet, verwenden Sie stattdessen --set-key-file. No agent running, cannot list identities. - Kein Agent ausgeführt, kann keine Identitäten auflisten. - - - Failed to remove all SSH identities from agent. - Das Entfernen aller SSH-Identitäten vom Agent ist fehlgeschlagen. - - - All SSH identities removed from agent. - Alle SSH-Identitäten wurden vom Agent entfernt. + Agent läuft nicht, kann keine Identitäten auflisten. @@ -9863,7 +8462,7 @@ Diese Option ist veraltet, verwenden Sie stattdessen --set-key-file. match anything - zu allem passen + Entspreche irgendwas match one @@ -9888,14 +8487,10 @@ Diese Option ist veraltet, verwenden Sie stattdessen --set-key-file.Search Help Hilfe durchsuchen - - Save Search - Suche speichern - Search (%1)… Search placeholder text, %1 is the keyboard shortcut - Suchen (%1)… + Suchen (%1) … Case sensitive @@ -9905,6 +8500,10 @@ Diese Option ist veraltet, verwenden Sie stattdessen --set-key-file.Limit search to selected group Suche auf ausgewählte Gruppe beschränken + + Save Search + Suche speichern + SettingsClientModel @@ -9948,7 +8547,7 @@ Diese Option ist veraltet, verwenden Sie stattdessen --set-key-file. Enable KeepassXC Freedesktop.org Secret Service integration - KeepassXC-Freedesktop.org-Secret-Service-Integration aktivieren + Integration von KeepassXC in Freedesktop.org Secret Service aktivieren General @@ -9960,16 +8559,40 @@ Diese Option ist veraltet, verwenden Sie stattdessen --set-key-file. <html><head/><body><p>If enabled, any attempt to read a password must be confirmed. Otherwise, clients can read passwords without confirmation when the database is unlocked.</p><p>This option only covers the access to the password of an entry. Clients can always enumerate the items of exposed databases and query their attributes.</p></body></html> - <html><head/><body><p>Wenn aktiviert, muss jeder Versuch, ein Passwort zu lesen, bestätigt werden. Anderenfalls können Clients Passwörter ohne Bestätigung lesen, wenn die Datenbank entsperrt ist.</p><p>Diese Option deckt nur den Zugriff auf das Passwort eines Eintrags ab. Clients können immer die Einträge der freigegebenen Datenbanken und deren Attribute abfragen.</p></body></html> + <html><head/><body><p>Wenn aktiviert, muss jeder Versuch, ein Passwort zu lesen, bestätigt werden. Andernfalls können Clients Passwörter ohne Bestätigung lesen, wenn die Datenbank entsperrt ist.</p><p>Diese Option deckt nur den Zugriff auf das Passwort eines Eintrags ab. Clients können immer die Einträge der freigegebenen Datenbanken und deren Attribute abfragen.</p></body></html> Confirm when passwords are retrieved by clients Bestätigen, wenn Passwörter abgerufen werden + + <html><head/><body><p><span style=" + font-family:'-apple-system','BlinkMacSystemFont','Segoe UI','Helvetica','Arial','sans-serif','Apple Color + Emoji','Segoe UI Emoji'; font-size:14px; color:#24292e; background-color:#ffffff;">This setting does + not override disabling recycle bin prompts</span></p></body></html> + + <html><head/><body><p><span style=" + font-family:'-apple-system','BlinkMacSystemFont','Segoe UI','Helvetica','Arial','sans-serif','Apple Color + Emoji','Segoe UI Emoji'; font-size:14px; color:#24292e; background-color:#ffffff;">Diese Einstellung + überschreibt nicht die Deaktivierung der Papierkorb-Hinweise</span></p></body></html> + + Confirm when clients request entry deletion Bestätigen, wenn Clients das Löschen von Einträgen anfordern + + <html><head/><body><p>This improves compatibility with certain applications + which search for password without unlocking the database first.</p><p>But enabling this may also + crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a + different value set in applications.)</p></body></html> + + <html><head/><body><p>Dies verbessert Kompatibilität mit bestimmten Anwendungen, + die nach einem Passwort suchen, ohne vorher die Datenbank zu entsperren.Dabei + kann allerdings der Client abstürzen, wenn die Datenbank nach einer bestimmten Zeit nicht entsperrt wurde (normalerweise 25 Sekunden, + aber ein anderer Wert kann in den Anwendungen gesetzt sein).</p></body></html> + + Prompt to unlock database before searching Entsperrung der Datenbank vor der Suche anfordern @@ -9980,7 +8603,7 @@ Diese Option ist veraltet, verwenden Sie stattdessen --set-key-file. Authorization - Authorisierung + Autorisierung These applications are currently connected: @@ -9992,15 +8615,7 @@ Diese Option ist veraltet, verwenden Sie stattdessen --set-key-file. Save current changes to activate the plugin and enable editing of this section. - Speichern Sie die aktuellen Änderungen, um das Plugin und das Anpassen dieses Abschnitts zu aktivieren. - - - <html><head/><body><p>This setting does not override disabling recycle bin prompts </p></body></html> - <html><head/><body><p>Diese Einstellung hat keinen Einfluss auf die Deaktivierung der Hinweise für den Papierkorb </p></body></html> - - - <html><head/><body><p>This improves compatibility with certain applications which search for password without unlocking the database first.</p><p>But enabling this may also crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a different value set in applications.) </p></body></html> - <html><head/><body><p>Dies verbessert die Kompatibilität mit bestimmten Anwendungen, die nach dem Passwort suchen, ohne die Datenbank vorher zu entsperren.</p><p>Die Aktivierung dieser Option kann jedoch auch zum Absturz des Clients führen, wenn die Datenbank nicht innerhalb einer bestimmten Zeitspanne entsperrt werden kann. (In der Regel 25 s, kann aber auch ein anderer Wert sein, der in den Anwendungen eingestellt ist.) </p></body></html> + Aktuellen Änderungen speichern, um das Plugin zu aktivieren und Änderungen in diesem Abschnitt zu ermöglichen. @@ -10051,7 +8666,7 @@ Diese Option ist veraltet, verwenden Sie stattdessen --set-key-file. Signer name field - Feld für Unterzeichnernamen + Unterzeichner-Namensfeld Fingerprint @@ -10109,14 +8724,6 @@ Diese Option ist veraltet, verwenden Sie stattdessen --set-key-file. TagModel - - Clear Search - Suche löschen - - - All Entries - Alle Einträge - Expired Abgelaufen @@ -10125,6 +8732,14 @@ Diese Option ist veraltet, verwenden Sie stattdessen --set-key-file.Weak Passwords Schwache Passwörter + + All Entries + Alle Einträge + + + Clear Search + Suche löschen + TagView @@ -10169,11 +8784,11 @@ Diese Option ist veraltet, verwenden Sie stattdessen --set-key-file. 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. + Anmerkung: Diese TOTP-Einstellungen funktionieren möglicherweise nicht mit anderen Authentifikatoren. There was an error creating the QR code. - QR-Code konnte nicht erstellt werden. + QR-Code konnte nicht erzeugt werden. Closing in %1 seconds. @@ -10237,7 +8852,7 @@ Diese Option ist veraltet, verwenden Sie stattdessen --set-key-file. digits - Ziffern + Ziffern Invalid TOTP Secret @@ -10246,8 +8861,7 @@ Diese Option ist veraltet, verwenden Sie stattdessen --set-key-file. You have entered an invalid secret key. The key must be in Base32 format. Example: JBSWY3DPEHPK3PXP - Sie haben einen ungültigen geheimen Schlüssel angegeben. Der Schlüssel muss im Base32-Format sein. -Beispiel: JBSWY3DPEHPK3PXP + Sie haben einen ungültigen geheimen Schlüssel angegeben. Der Schlüssel muss im Base32-Format sein. Beispiel: JBSWY3DPEHPK3PXP Confirm Remove TOTP Settings @@ -10273,7 +8887,7 @@ Beispiel: JBSWY3DPEHPK3PXP Checking for updates… - Nach Updates suchen… + Nach Updates suchen ... Close @@ -10289,11 +8903,11 @@ Beispiel: JBSWY3DPEHPK3PXP <strong>A new version is available.</strong><br/>KeePassXC %1 can be <a href="https://keepassxc.org/download/">downloaded here</a>. - <strong>Eine neue Version ist verfügbar.</strong><br/>KeePassXC %1 kann <a href="https://keepassxc.org/download/">hier heruntergeladen</a> werden. + <strong>Eine neue Version ist verfügbar.</strong><br/>KeePassXC %1 kann <a href="https://keepassxc.org/download/">hier heruntergeladen werden</a>. You have the latest version of KeePassXC - Sie haben die neueste Version von KeePassXC. + Sie haben die neueste Version von KeePassXC @@ -10302,6 +8916,26 @@ Beispiel: JBSWY3DPEHPK3PXP Start storing your passwords securely in a KeePassXC database Speichern Sie Ihre Passwörter sicher in einer KeePassXC-Datenbank + + Create new database + Neue Datenbank erstellen + + + Open existing database + Existierende Datenbank öffnen + + + Import from KeePass 1 + Aus KeePass 1 importieren + + + Import from 1Password + Von 1Password importieren + + + Import from CSV + Aus CSV importieren + Recent databases Zuletzt verwendete Datenbanken @@ -10314,18 +8948,6 @@ Beispiel: JBSWY3DPEHPK3PXP Welcome to KeePassXC %1 Willkommen bei KeePassXC %1 - - Create Database - Datenbank erstellen - - - Open Database - Datenbank öffnen - - - Import File - Datei importieren - WinUtils @@ -10339,11 +8961,34 @@ Beispiel: JBSWY3DPEHPK3PXP Could not register global shortcut - Globales Tastenkürzel konnte nicht registriert werden + Globales Tastaturkürzel konnte nicht registriert werden + + + + WindowsHello + + Failed to init KeePassXC crypto. + KeePassXC-Krypto konnte nicht gestartet werden. + + + Failed to encrypt key data. + Verschlüsselung der Schlüsseldaten fehlgeschlagen. + + + Failed to get Windows Hello credential. + Windows Hello-Anmeldedaten konnten nicht abgerufen werden. + + + Failed to decrypt key data. + Entschlüsselung der Schlüsseldaten fehlgeschlagen. YubiKey + + %1 No interface, slot %2 + %1 Keine Schnitstelle, Slot %2 + General: Allgemein: @@ -10355,6 +9000,14 @@ Beispiel: JBSWY3DPEHPK3PXP YubiKeyEditWidget + + Refresh hardware tokens + Hardware-Token aktualisieren + + + Refresh + Neu laden + Hardware key slot selection Auswahl des Hardwareschlüssel-Slots @@ -10365,7 +9018,7 @@ Beispiel: JBSWY3DPEHPK3PXP Selected hardware key slot does not support challenge-response! - Ausgewählter Hardwareschlüssel-Slot unterstützt nicht Challenge-Response! + Ausgewählter Hardwareschlüssel-Slot unterstützt Challenge-Response nicht! Challenge-Response @@ -10385,35 +9038,42 @@ Beispiel: JBSWY3DPEHPK3PXP Challenge-Response set, click to change or remove - Challenge-Response festgelegt, zum Ändern oder Entfernen anklicken + Challenge-Response eingestellt, zum Ändern oder Entfernen anklicken + + + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + <p>Wenn Sie einen <a href="https://www.yubico.com/">YubiKey</a> oder <a href="https://onlykey.io">OnlyKey</a> besitzen, können verwenden, um die Sicherheit zu verbessern.</p><p>Dazu muss einer seiner Slots als <a href="https://www.yubico.com/products/services-software/challenge-response/">HMAC-SHA1 Challenge-Response</a> programmiert sein.</p> Detecting hardware keys… - Hardwareschlüssel werden erkannt… + Hardwareschlüssel werden gesucht … No hardware keys detected - Keine Hardwareschlüssel erkannt + Keine Hardwareschlüssel gefunden + + + YubiKeyInterface - Refresh hardware keys - Hardwareschlüssel aktualisieren - - - <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed with <a href="https://keepassxc.org/docs/#faq-yubikey-howto">Challenge-Response</a>.</p> - <p>Wenn Sie einen <a href="https://www.yubico.com/">YubiKey</a> oder <a href="https://onlykey.io">OnlyKey</a> besitzen, können Sie ihn für zusätzliche Sicherheit verwenden.</p><p>Dazu muss einer seiner Slots als <a href="https://keepassxc.org/docs/#faq-yubikey-howto">Challenge-Response</a> programmiert sein.</p> - - - Hardware keys found, but no slots are configured - Hardwareschlüssel gefunden, es sind aber keine Slots konfiguriert + %1 Invalid slot specified - %2 + %1 Ungültiger Slot angegeben - %2 YubiKeyInterfacePCSC + + (PCSC) %1 [%2] Challenge-Response - Slot %3 + (PCSC) %1 [%2] Challenge-Response - Slot %3 + The YubiKey PCSC interface has not been initialized. Die YubiKey PCSC-Schnittstelle ist nicht initialisiert worden. + + Hardware key is currently in use. + Der Hardwareschlüssel wird schon verwendet. + Could not find or access hardware key with serial number %1. Please present it to continue. Konnte den Hardwareschlüssel mit Seriennummer %1 nicht finden oder darauf zugreifen. Zum Fortfahren bitte vorzeigen. @@ -10424,16 +9084,26 @@ Beispiel: JBSWY3DPEHPK3PXP Hardware key was not found or is not configured. - Hardwareschlüssel wurde nicht gefunden oder wurde nicht konfiguriert. + Hardwareschlüssel wurde nicht gefunden oder ist nicht konfiguriert. Failed to complete a challenge-response, the PCSC error code was: %1 Challenge-Response konnte nicht abgeschlossen werden, der PCSC-Fehlercode war: %1 + + + YubiKeyInterfaceUSB - (NFC) %1 [%2] - Slot %3, %4 - YubiKey display fields - (NFC) %1 [%2] - Slot %3, %4 + Unknown + Unbekannt + + + (USB) %1 [%2] Configured Slot - %3 + (USB) %1 [%2] Konfigurierter Slot - %3 + + + (USB) %1 [%2] Challenge-Response - Slot %3 - %4 + (USB) %1 [%2] Challenge-Response - Slot %3 - %4 Press @@ -10445,26 +9115,13 @@ Beispiel: JBSWY3DPEHPK3PXP USB Challenge-Response Key no interaction required Passiv - - - YubiKeyInterfaceUSB - - Unknown - Unbekannt - - - Press - USB Challenge-Response Key interaction request - Aktiver Button - - - Passive - USB Challenge-Response Key no interaction required - Passiv - The YubiKey USB interface has not been initialized. - Die YubiKey USB-Schnittstelle ist nicht initialisiert worden. + Die YubiKey USB-Schnittstelle wurde nicht initialisiert. + + + Hardware key is currently in use. + Der Hardwareschlüssel wird schon verwendet. Could not find hardware key with serial number %1. Please plug it in to continue. @@ -10482,15 +9139,5 @@ Beispiel: JBSWY3DPEHPK3PXP Failed to complete a challenge-response, the specific error was: %1 Abschluss von Challenge-Response ist fehlgeschlagen, der spezifische Fehler war: %1 - - %1 [%2] - Slot %3 - YubiKey NEO display fields - %1 [%2] - Slot %3 - - - %1 [%2] - Slot %3, %4 - YubiKey display fields - %1 [%2] - Slot %3, %4 - \ No newline at end of file diff --git a/share/translations/keepassxc_el.ts b/share/translations/keepassxc_el.ts index bc7e202a5..07aca6d2c 100644 --- a/share/translations/keepassxc_el.ts +++ b/share/translations/keepassxc_el.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 @@ Project Maintainers: - Συντηρητές Project: + Υποστήριξη έργου: Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. @@ -39,7 +39,7 @@ Include the following information whenever you report a bug: - Συμπεριλάβετε τις ακόλουθες πληροφορίες όποτε που αναφέρετε ένα σφάλμα: + Συμπεριλάβετε τις ακόλουθες πληροφορίες όποτε αναφέρετε κάποιο σφάλμα: Copy to clipboard @@ -54,7 +54,7 @@ Non-existing/inaccessible executable path. Please double-check the client is legit. - Μη υπάρχουσα/απρόσιτη εκτελέσιμη διαδρομή. Ελέγξτε ξανά ότι ο client είναι σωστός. + Μη υπάρχουσα/απρόσιτη εκτελέσιμη διαδρομή. Ελέγξτε ξανά ότι το πρόγραμμα-πελάτη είναι σωστό. <html><head/><body><p><span style=" font-weight:600;">%1 </span>is requesting access to the following entries:</p></body></html> @@ -80,18 +80,18 @@ Details Λεπτομέριες - - Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. - Η απόφασή σας θα απομνημονευθεί για όσο διάστημα εκτελείται ο αιτών πελάτης ΚΑΙ το KeePassXC. - Remember - Θυμηθείτε + Θυμάται Allow Selected Επιτρέπονται τα Επιλεγμένα + + Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. + Η απόφασή σας θα απομνημονευθεί για όσο διάστημα εκτελείται ο αιτών πελάτης ΚΑΙ το KeePassXC. + Deny All && Future Άρνηση Όλων && Μελλοντικά @@ -122,10 +122,6 @@ Use OpenSSH Χρησιμοποιήστε OpenSSH - - Use both agents - Χρησιμοποιήστε και τους δύο agents - SSH_AUTH_SOCK override SSH_AUTH_SOCK υπερισχύουσα @@ -154,6 +150,10 @@ SSH Agent connection is working! Η σύνδεση SSH Agent λειτουργεί! + + Use both agents + Χρησιμοποιήστε και τους δύο agents + ApplicationSettingsWidget @@ -169,21 +169,17 @@ Security Ασφάλεια - - This setting cannot be enabled when minimize on unlock is enabled. - Αυτή η ρύθμιση δεν μπορεί να ενεργοποιηθεί όταν είναι ενεργοποιημένη η ελαχιστοποίηση κατά το ξεκλείδωμα - Access error for config file %1 - Σφάλμα πρόσβασης για το αρχείο config %1 + Σφάλματος πρόσβασης για αρχείο ρυθμίσεων %1 Icon only - Εικονίδιο μόνο + Μόνον εικονίδιο Text only - Κείμενο μόνο + Μόνον κείμενο Text beside icon @@ -195,7 +191,7 @@ Follow style - Ακολουθήστε το στυλ + Ακολούθα το στυλ Monochrome @@ -217,49 +213,21 @@ You must restart the application to set the new language. Would you like to restart now? Πρέπει να επανεκκινήσετε την εφαρμογή για να οριστεί η νέα γλώσσα. Θέλετε να κάνετε επανεκκίνηση τώρα; + + Reset Settings? + Επαναφορά Ρυθμίσεων; + + + Are you sure you want to reset all general and security settings to default? + Είστε βέβαιοι ότι θέλετε να επαναφέρετε όλες τις ρυθμίσεις στις προεπιλογές; + Select backup storage directory Επιλογή καταλόγου αποθήκευσης αντιγράφων ασφαλείας - Confirm Reset - - - - Are you sure you want to reset all settings to default? - - - - Import KeePassXC Settings - - - - Failed to import settings from %1, not a valid settings file. - - - - Export KeePassXC Settings - - - - Small - - - - Normal - - - - Medium - - - - Large - - - - Custom - + This setting cannot be enabled when minimize on unlock is enabled. + Αυτή η ρύθμιση δεν μπορεί να ενεργοποιηθεί όταν είναι ενεργοποιημένη η ελαχιστοποίηση κατά το ξεκλείδωμα @@ -270,11 +238,11 @@ Startup - Εκκίνηση + Startup Start only a single instance of KeePassXC - Εκκίνηση μόνο μιας διεργασίας KeePassXC + Εκκίνηση μόνον μιας περίπτωσης KeePassXC Automatically launch KeePassXC at system startup @@ -282,7 +250,7 @@ Minimize window at application startup - Ελαχιστοποίηση παραθύρου κατά την εκκίνηση της εφαρμογής + Ελαχιστοποίηση παραθύρου κατά την εκκίνηση Minimize window after unlocking database @@ -292,10 +260,6 @@ Remember previously used databases Θυμηθείτε προηγούμενες χρησιμοποιημένες βάσεις δεδομένων - - recent files - πρόσφατα αρχεία - Load previously open databases on startup Φόρτωση προηγούμενων ανοιχτών βάσεων δεδομένων κατά την εκκίνηση @@ -312,6 +276,25 @@ Include beta releases when checking for updates Συμπεριλάβετε εκδόσεις beta κατά τον έλεγχο για ενημερώσεις + + On database unlock, show entries that + Στο ξεκλείδωμα της βάσης δεδομένων, εμφανίστε τις καταχωρήσεις που + + + have expired + On database unlock, show entries that... + έχουν λήξει + + + days + On database unlock, show entries that will expire within %1 days + ημέρες + + + will expire within + On database unlock, show entries that... + θα λήξουν εντός + File Management Διαχείριση αρχείων @@ -330,16 +313,28 @@ Automatically reload the database when modified externally - Αυτόματη επαναφόρτωση της βάσης δεδομένων όταν τροποποιείται εξωτερικά + Αυτόματη επαναφόρτωση βάσης σε περίπτωση εξωτερικής τροποποίησης Backup database file before saving - Δημιουργία αντίγραφου ασφαλείας του αρχείου της βάσης δεδομένων πριν την αποθήκευση + Δημιουργήστε αντίγραφα ασφαλείας της βάσης δεδομένων πριν αποθηκεύσετε + + + Backup destination + Προορισμός αντιγράφων ασφαλείας + + + Specifies the database backup file location. Occurrences of "{DB_FILENAME}" are replaced with the filename of the saved database without extension. {TIME:<format>} is replaced with the backup time, see https://doc.qt.io/qt-5/qdatetime.html#toString. <format> defaults to format string "dd_MM_yyyy_hh-mm-ss". + Καθορίζει τη θέση του αρχείου αντιγράφων ασφαλείας της βάσης δεδομένων. Οι εμφανίσεις του "{ΒΔ_ΟΝΟΜΑ ΑΡΧΕΙΟΥ}" αντικαθίστανται με το όνομα αρχείου της αποθηκευμένης βάσης δεδομένων χωρίς επέκταση. {ΩΡΑ:<format>} αντικαθίσταται με το χρόνο δημιουργίας αντιγράφων ασφαλείας, ανατρέξτε https://doc.qt.io/qt-5/qdatetime.html#toString. <format> Προεπιλογές για τη μορφοποίηση συμβολοσειράς "dd_MM_yyyy_hh mm-ss". {DB_FILENAME}.old.kdbx {ΒΔ_ΟΝΟΜΑ ΑΡΧΕΙΟΥ}.old.kdbx + + Choose... + Επιλογή... + Use alternative saving method (may solve problems with Dropbox, Google Drive, GVFS, etc.) Χρήση εναλλακτικής μεθόδου αποθήκευσης (μπορεί να επιλύσει προβλήματα με το Dropbox, το Google Drive, GVFS κ.λπ.) @@ -354,11 +349,11 @@ Entry Management - Διαχείριση Καταχώρησης + Διαχείριση Καταχωρήσεων Use group icon on entry creation - Χρησιμοποίηση εικονιδίου ομάδας κατά τη δημιουργία καταχώρησης + Χρησιμοποίηση εικονιδίου ομάδας κατα την δημιουργία καταχώρησης Minimize when opening a URL @@ -399,7 +394,7 @@ Movable toolbar - Μετακινούμενη γραμμή εργαλείων + Μετακινούμενη εργαλειοθήκη Language selection @@ -417,21 +412,17 @@ Toolbar button style: Στυλ κουμπιών γραμμής εργαλείων: - - Show passwords in color - Εμφάνιση κωδικών πρόσβασης με χρώμα - Use monospaced font for notes - Χρησιμοποιήστε τη monospaced γραμματοσειρά για σημειώσεις + Χρησιμοποιήστε μονόπλευρη γραμματοσειρά για σημειώσεις Minimize instead of app exit - Ελαχιστοποίηση αντί για έξοδο από την εφαρμογή + Ελλαχιστοποίηση αντί για έξοδος από την εφαρμογή Show a system tray icon - Εμφάνιση εικονιδίου στη περιοχή ειδοποιήσεων + Δείχνουν ένα εικονίδιο του δίσκου συστήματος Tray icon type @@ -439,11 +430,11 @@ Tray icon type: - Τύπος εικονιδίου περιοχής ειδοποιήσεων: + Τύπος εικονιδίου στη περιοχή ειδοποιήσεων: Hide window to system tray when minimized - Απόκρυψη του παραθύρου στην περιοχή ειδοποιήσεων όταν γίνεται ελαχιστοποίηση + Απόκρυψη του παραθύρου στην περιοχή συστήματος όταν γίνεται ελλαχιστοποίηση Reset settings to default… @@ -451,19 +442,19 @@ Auto-Type - Αυτόματη Πληκτρολόγηση + Αυτόματη-Πληκτρολόγηση Use entry title to match windows for global Auto-Type - Χρησιμοποιήστε τον τίτλο καταχώρησης για να ταιριάξετε τα παράθυρα για την καθολική Αυτόματη Πληκτρολόγηση + Να γίνεται χρήση του τίτλου για το ταίριασμα των παραθύρων της λειτουργίας Αυτόματης-Πληκτρολόγησης Use entry URL to match windows for global Auto-Type - Χρησιμοποιήστε το URL καταχώρησης για να ταιριάξετε τα παράθυρα για την καθολική Αυτόματη Πληκτρολόγηση + Να γίνεται χρήση του URL της καταχώρησης για το ταίριασμα των παραθύρων λειτουργίας Αυτόματης-Πληκτρολόγησης Always ask before performing Auto-Type - Πάντα ερώτηση πριν την εκτέλεση της Αυτόματης Πληκτρολόγησης + Πάντα ερώτηση για την εκτέλεση της Αυτόματης-Πληκτρολόγησης Hide expired entries from Auto-Type @@ -479,11 +470,11 @@ Global Auto-Type shortcut: - Συντόμευση καθολικής Αυτόματης Πληκτρολόγησης: + Συντόμευση Καθολικής Αυτόματης Πληκτρολόγησης Auto-type start delay milliseconds - Καθυστέρηση έναρξης αυτόματης πληκτρολόγησης χιλιοστά του δευτερολέπτου + Καθυστέρηση έναρξης αυτόματης πληκτρολόγησης σε χιλιοστά του δευτερολέπτου ms @@ -496,80 +487,23 @@ Global auto-type shortcut - Συντόμευση καθολικής Αυτόματης Πληκτρολόγησης + Συντόμευση καθολικής Αυτόματης-Πληκτρολόγησης Auto-type character typing delay milliseconds - Καθυστέρηση πληκτρολόγησης χαρακτήρων αυτόματης πληκτρολόγησης χιλιοστά του δευτερολέπτου + Αυτόματη Πληκτρολόγηση καθυστέρηση πληκτρολόγησης χαρακτήρων χιλιοστά του δευτερολέπτου Remember last typed entry for: Να θυμάστε την τελευταία πληκτρολογημένη καταχώρηση για: - On database unlock, show entries that will expire within - + recent files + πρόσφατα αρχεία - On database unlock, show entries that will expire within - - - - days - number of days warning for password expiration - ημέρες - - - Destination format: - - - - <html><head/><body><p><span style=" font-weight:600;">{DB_FILENAME}</span> is replaced with the filename of the saved database without extension</p><p><span style=" font-weight:600;">{TIME:&lt;format&gt;}</span> is replaced with the specified time format (default: dd_MM_yyyy_hh-mm-ss)</p><p>See the User Guide for more details</p></body></html> - - - - Choose folder... - - - - Show confirmation before moving entries to recycle bin - - - - Copy data on double clicking field in entry view - - - - Show toolbar - Εμφάνιση γραμμής εργαλείων - - - Show the menu bar by pressing the Alt key - - - - Show menubar - - - - Import settings… - - - - Export settings… - - - - Open browser on double clicking URL field in entry view - - - - Font size: - - - - Font size selection - + Show passwords in color + Εμφάνιση κωδικών πρόσβασης με χρώμα @@ -598,15 +532,15 @@ min Minutes - λεπτά + min Clipboard clear seconds - Καθαρισμός προχείρου δευτερόλεπτα + Καθαρισμός προχείρου σε δευτερόλεπτα Lock databases after inactivity of - Κλείδωμα βάσεων δεδομένων μετά από αδράνεια + Κλείδωμα βάσης δεδομένων μετα απο ανενεργεία Convenience @@ -618,11 +552,15 @@ Lock databases when session is locked or lid is closed - Κλείδωμα βάσεων δεδομένων όταν η συνεδρία είναι κλειδωμένη ή το καπάκι της οθόνης είναι κλειστό + Κλείδωμα βάσεων δεδομένων κατά το κλείδωμα της συνεδρίας ή την αναδίπλωση της οθόνης Lock databases after minimizing the window - Κλείδωμα βάσεων δεδομένων μετά την ελαχιστοποίηση του παραθύρου + Κλείδωμα της βάσης δεδομένων μετά την ελαχιστοποίηση του παραθύρου + + + Require password repeat when it is visible + Απαιτείται επανάληψη κωδικού πρόσβασης όταν είναι ορατός Hide passwords when editing them @@ -634,7 +572,19 @@ Hide passwords in the entry preview panel - Απόκρυψη κωδικών πρόσβασης στο πάνελ προεπισκόπησης καταχώρησης + Απόκρυψη των κωδικών στο πλαίσιο προεπισκόπισης καταχωρήσεων + + + Hide entry notes by default + Να αποκρύπτονται εξ ορισμού οι σημειώσεις καταχωρήσεων + + + Move entries to recycle bin without confirmation + Μετακίνηση καταχωρήσεων στον Κάδο Ανακύκλωσης χωρίς επιβεβαίωση + + + Enable double click to copy the username/password entry columns + Ενεργοποίηση διπλού κλικ για αντιγραφή των στηλών εισαγωγής ονόματος χρήστη/κωδικού πρόσβασης Privacy @@ -642,24 +592,12 @@ Use DuckDuckGo service to download website icons - Χρησιμοποιήστε την υπηρεσία DuckDuckGo για λήψη εικονιδίων ιστότοπων + Χρησιμοποιήστε την υπηρεσία DuckDuckGo για λήψη εικονιδίων ιστότοπου Hide TOTP in the entry preview panel Απόκρυψη TOTP στον πίνακα προεπισκόπησης καταχώρησης - - Lock databases when switching user - - - - Lock Options - - - - Hide notes in the entry preview panel - - AutoType @@ -704,13 +642,27 @@ Εντοπίστηκε πολύ μεγάλη καθυστέρηση, το μέγιστο είναι %1: %2 - Entry does not have attribute for PICKCHARS: %1 - Η καταχώρηση δεν έχει χαρακτηριστικό για PICKCHARS: %1 + Invalid conversion type: %1 + Μη έγκυρος τύπος μετατροπής: %1 + + + Invalid conversion syntax: %1 + Μη έγκυρη σύνταξη μετατροπής: %1 + + + Invalid regular expression syntax %1 +%2 + Μη έγκυρη σύνταξη κανονικής έκφρασης % 1 +%2 Invalid placeholder: %1 Μη έγκυρο σύμβολο υποκατάστασης: %1 + + Entry does not have attribute for PICKCHARS: %1 + Η καταχώρηση δεν έχει χαρακτηριστικό για PICKCHARS: %1 + AutoTypeAssociationsModel @@ -735,7 +687,7 @@ AutoTypeMatchModel Group - Ομάδα + Όμαδα Title @@ -752,6 +704,10 @@ AutoTypePlatformX11 + + Trying to send invalid keysym. + Προσπάθεια αποστολής μη έγκυρων keysym. + Sequence aborted: Caps Lock is on Η ακολουθία ματαιώθηκε: Το Caps Lock είναι ενεργοποιμένο @@ -764,16 +720,12 @@ Unable to get valid keycode for key: Δεν είναι δυνατή η λήψη έγκυρου κωδικού για το κλειδί: - - Trying to send invalid keyboard symbol. - - AutoTypeSelectDialog Auto-Type - KeePassXC - Αυτόματη Πληκτρολόγηση - KeePassXC + Auto-Type - KeePassXC Double click a row to perform Auto-Type or find an entry using the search: @@ -850,11 +802,11 @@ Ctrl+4 - Χρήση εικονικού πληκτρολογίου (μόνο γι Remember access to checked entries - Θυμήσου την πρόσβαση σε επιλεγμένες καταχωρήσεις + Θυμηθείτε την πρόσβαση σε επιλεγμένες καταχωρήσεις Remember - Θυμάται + Θυμηθείτε Allow access to entries @@ -872,16 +824,16 @@ Ctrl+4 - Χρήση εικονικού πληκτρολογίου (μόνο γι Disable for this site Απενεργοποίηση για αυτόν τον ιστότοπο - - Undo - Αναίρεση - BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + KeePassXC-Browser Αποθήκευση καταχώρησης + Ok - Ok + ΟΚ Cancel @@ -890,76 +842,16 @@ Ctrl+4 - Χρήση εικονικού πληκτρολογίου (μόνο γι You have multiple databases open. Please select the correct database for saving credentials. - Έχετε ανοιχτές πολλές βάσεις δεδομένων -Παρακαλώ επιλέξτε την σωστή βάση δεδομένων για την αποθήκευση διαπιστευτηρίων. - - - KeePassXC - Select Database - KeePassXC - Επιλέξτε Βάση δεδομένων - - - - BrowserPasskeysConfirmationDialog - - Cancel - Άκυρο - - - Update - Ενημέρωση - - - Authenticate - Επαλήθευση - - - Register new - Καταχώρηση νέου - - - Register - Καταχώρηση - - - Timeout in <b>%n</b> seconds... - Λήξη χρονικού ορίου σε <b>%n</b> δευτερόλεπτο...Λήξη χρονικού ορίου σε <b>%n</b> δευτερόλεπτα... - - - Relying Party: %1 - Στηριζόμενο Party: %1 - - - Username: %1 - Όνομα χρήστη: %1 - - - KeePassXC - Passkey credentials - KeePassXC - Διαπιστευτήρια Passkey - - - Add to existing entry - - - - Existing passkey found. -Do you want to register a new passkey for: - - - - Select the existing passkey and press Update to replace it. - - - - Authenticate passkey credentials for: - - - - Do you want to register a passkey for: - + Έχετε ανοικτές πολλές βάσεις δεδομένων +Παρακαλώ επιλέξτε την σωστή βάση για την αποθήκευση των διαπιστευτηρίων. BrowserService + + KeePassXC: Create a new group + KeePassXC: Δημιουργήστε μια νέα ομάδα + A request for creating a new group "%1" has been received. Do you want to create this group? @@ -968,6 +860,10 @@ Do you want to create this group? Θέλετε να δημιουργήσετε αυτήν την ομάδα; + + KeePassXC: New key association request + KeePassXC: Nέα αίτηση συσχέτισης κλειδιού + You have received an association request for the following database: %1 @@ -984,16 +880,28 @@ chrome-laptop. 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? Υπάρχει ήδη κοινόχρηστο κλειδί κρυπτογράφησης με το όνομα "% 1". Θέλετε να το αντικαταστήσετε; + + KeePassXC: Update Entry + KeePassXC: Ενημέρωση Καταχώρησης + Do you want to update the information in %1 - %2? Θέλετε να ενημερώσετε τις πληροφορίες στο %1 - %2; + + KeePassXC: Delete entry + KeePassXC: Διαγραφή καταχώρησης + A request for deleting entry "%1" has been received. Do you want to delete the entry? @@ -1003,57 +911,50 @@ Do you want to delete the entry? - %1 (Passkey) - %1 (Passkey) + Converting attributes to custom data… + Μετατροπή χαρακτηριστικών σε προσαρμοσμένα δεδομένα... - KeePassXC - Create a new group - KeePassXC - Δημιουργήστε μια νέα ομάδα + Abort + Διακοπή - Disable - Απενεργοποίηση + KeePassXC: Converted KeePassHTTP attributes + KeePassXC: Μεταποιημένα χαρακτηριστικά KeePassHTTP - KeePassXC - Overwrite existing key? - KeePassXC - Αντικατάσταση υπάρχοντος κλειδιού; + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + Επιτυχής μετατροπή χαρακτηριστικών από %1 καταχώρηση(εις). +Μετακινήθηκαν %2 κλειδιά σε προσαρμοσμένα δεδομένα. + + + Successfully moved %n keys to custom data. + Η μετακίνηση των πλήκτρων %n με επιτυχία σε προσαρμοσμένα δεδομένα.Επιτυχής μετακίνηση των %n κλειδιών στα προσαρμοσμένα δεδομένα. - KeePassXC - Update Entry - KeePassXC - Ενημέρωση Καταχώρησης + KeePassXC: No entry with KeePassHTTP attributes found! + KeePassXC: Δεν βρέθηκε καταχώρηση με ιδιότητες KeePassHTTP! - KeePassXC - Delete entry - KeePassXC - Διαγραφή καταχώρησης + The active database does not contain an entry with KeePassHTTP attributes. + Η ενεργή βάση δεδομένων δεν περιέχει καταχώρηση με χαρακτηριστικά KeePassHTTP. - KeePassXC - New key association request - KeePassXC - Αίτημα συσχέτισης νέου κλειδιού + Don't show this warning again + Να μην εμφανιστεί ξανά αυτή η προειδοποίηση - Passkey - Passkey + KeePassXC: Legacy browser integration settings detected + KeePassXC: Ανιχνεύθηκαν ρυθμίσεις παλιού λογισμικού ενσωμάτωσης με το φυλλομετρητή σας - KeePassXC - Passkey credentials - KeePassXC - Διαπιστευτήρια Passkey - - - Register a new passkey to this entry: - - - - KeePassXC - Update passkey - - - - Entry already has a passkey. -Do you want to overwrite the passkey in %1 - %2? - - - - Register - Καταχώρηση + 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? + Οι ρυθμίσεις του KeePassXC - Browser πρέπει να μεταφερθούν στις ρυθμίσεις της βάσης δεδομένων. +Αυτό είναι απαραίτητο για τη διατήρηση των τρεχουσών συνδέσεών σας στο πρόγραμμα περιήγησης. +Θέλετε να μετεγκαταστήσετε τις υπάρχουσες ρυθμίσεις σας τώρα; @@ -1064,19 +965,23 @@ Do you want to overwrite the passkey in %1 - %2? This is required for accessing your databases with KeePassXC-Browser - Αυτό απαιτείται για την πρόσβαση στις βάσεις δεδομένων σας με το KeePassXC-Browser + Αυτό απαιτείται για να έχετε πρόσβαση στις βάσεις δεδομένων με το KeePassXC-Browser Enable browser integration - Ενεργοποίηση ενσωμάτωσης προγράμματος περιήγησης + Ενεργοποίηση ενοποίησης προγράμματος περιήγησης General Γενικά + + Browsers installed as snaps are currently not supported. + Προς το παρόν δεν υποστηρίζονται προγράμματα περιήγησης που έχουν εγκατασταθεί ως snaps. + Enable integration for these browsers: - Ενεργοποίηση της ενσωμάτωσης για αυτά τα προγράμματα περιήγησης: + Ενεργοποίηση της ενσωμάτωσης με τους ακόλουθους περιηγητές: Vivaldi @@ -1125,7 +1030,7 @@ Do you want to overwrite the passkey in %1 - %2? Only returns the best matches for a specific URL instead of all entries for the whole domain. - Επιστρέφει μόνο τις καλύτερες αντιστοιχίσεις για ένα συγκεκριμένο URL αντί για όλες τις καταχωρίσεις για ολόκληρο το domain. + Εμφανίζει μόνον όσα ταιριάζουν καλύτερα με ένα συγκεκριμένο URL, παρά όλες τις καταχωρήσεις για ολόκληρο το domain. Return only best-matching credentials @@ -1150,7 +1055,7 @@ Do you want to overwrite the passkey in %1 - %2? Advanced - Για Προχωρημένους + Για προχωρημένους Never ask before accessing credentials @@ -1169,7 +1074,7 @@ Do you want to overwrite the passkey in %1 - %2? Automatically creating or updating string fields is not supported. - Η αυτόματη δημιουργία ή ενημέρωση των πεδίων strings δεν υποστηρίζεται. + Η αυτόματη δημιουργία ή ενημέρωση των πεδίων αλφαριθμητικών δεν υποστηρίζεται. Return advanced string fields which start with "KPH: " @@ -1181,11 +1086,11 @@ Do you want to overwrite the passkey in %1 - %2? Do not prompt for KeePassHTTP settings migration. - Να μην γίνεται προτροπή για μετεγκατάσταση ρυθμίσεων KeePassHTTP. + Να μην γίνεται προτροπή για μετεγκατάσταση ρυθμίσεων KeePassHTTP.  Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. - Ενημερώνει αυτόματα το KeePassXC ή τη διαδρομή keepassxc-proxy binary σε έμφυτα σενάρια μηνυμάτων κατά την εκκίνηση. + Ενημερώνει αυτόματα το KeePassXC ή τη διαδρομή keepassxc-proxy binary σε έμφυτα scripts μηνυμάτων κατά την εκκίνηση. Update native messaging manifest files at startup @@ -1215,7 +1120,7 @@ Do you want to overwrite the passkey in %1 - %2? Use a custom browser configuration location: - Χρήση προσαρμοσμένης τοποθεσίας config προγράμματος περιήγησης: + Χρησιμοποιήστε μια προσαρμοσμένη τοποθεσία διαμόρφωσης προγράμματος περιήγησης: Browser type: @@ -1227,7 +1132,7 @@ Do you want to overwrite the passkey in %1 - %2? Config Location: - Τοποθεσία Config: + Τοποθεσία Διαμόρφωσης: Custom browser location field @@ -1245,13 +1150,33 @@ Do you want to overwrite the passkey in %1 - %2? Custom extension ID Αναγνωριστικό προσαρμοσμένης επέκτασης + + Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 + Λόγω του Snap sandboxing, πρέπει να εκτελέσετε ένα σενάριο για να ενεργοποιήσετε την ενσωμάτωση του προγράμματος περιήγησης.<br />Μπορείτε να αποκτήσετε αυτό το σενάριο από το %1 + + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 + Απαιτείται το KeePassXC-Browser για να λειτουργήσει η ενσωμάτωση του προγράμματος περιήγησης. <br />Κατεβάστε το για %1 και %2 και %3. %4 + + + Please see special instructions for browser extension use below + Παρακαλώ δείτε ειδικές οδηγές για την χρήση επέκτασης φυλλομετρητή παρακάτω: + + + <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. + <b>Σφάλμα:</b> Δεν είναι δυνατή η εύρεση της προσαρμοσμένης τοποθεσίας διακομιστή μεσολάβησης!<br/>Η ενσωμάτωση του προγράμματος περιήγησης ΔΕΝ θα λειτουργήσει χωρίς την εφαρμογή διακομιστή μεσολάβησης. + + + <b>Warning:</b> The following options can be dangerous! + <b>Προειδοποίηση:</b> Οι ακόλουθες επιλογές μπορεί να είναι επικίνδυνες! + Executable Files - Εκτελέσιμα Αρχεία + Εκτελέσιμα αρχεία All Files - Όλα τα Αρχεία + Όλα τα αρχεία Select custom proxy location @@ -1261,46 +1186,6 @@ Do you want to overwrite the passkey in %1 - %2? Select native messaging host folder location Επιλέξτε τοποθεσία φακέλου φιλοξενίας έμφυτων μηνυμάτων - - Allow keepassxc-proxy to list all entries with their title, URL and UUID in connected databases. - Επιτρέψτε στο keepassxc-proxy να παραθέτει όλες τις καταχωρήσεις με τον τίτλο, τη διεύθυνση URL και το UUID σε συνδεδεμένες βάσεις δεδομένων. - - - Allow limited access to all entries in connected databases (ignores site access restrictions) - Να επιτρέπεται περιορισμένη πρόσβαση σε όλες τις καταχωρήσεις σε συνδεδεμένες βάσεις δεδομένων (αγνοεί τους περιορισμούς πρόσβασης στον ιστότοπο) - - - <b>Warning:</b> Only adjust these settings if necessary. - <b>Προειδοποίηση:</b> Προσαρμόστε αυτές τις ρυθμίσεις μόνο εάν είναι απαραίτητο. - - - The custom proxy location does not exist. - Η προσαρμοσμένη τοποθεσία διακομιστή μεσολάβησης δεν υπάρχει. - - - <b>Error:</b> The custom proxy location does not exist. Correct this in the advanced settings tab. - <b>Σφάλμα:</b> Η προσαρμοσμένη τοποθεσία διακομιστή μεσολάβησης δεν υπάρχει. Διορθώστε το στην καρτέλα ρυθμίσεων για προχωρημένους. - - - <b>Error:</b> The installed proxy executable is missing from the expected location: %1<br/>Please set a custom proxy location in the advanced settings or reinstall the application. - <b>Σφάλμα:</b> Το εγκατεστημένο εκτελέσιμο αρχείο διακομιστή μεσολάβησης λείπει από την αναμενόμενη τοποθεσία: %1<br/>Ορίστε μια προσαρμοσμένη τοποθεσία διακομιστή μεσολάβησης στις ρυθμίσεις για προχωρημένους ή εγκαταστήστε ξανά την εφαρμογή. - - - Allows using insecure http://localhost with passkeys for testing purposes. - - - - Allow using localhost with passkeys - - - - KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. - - - - Browsers installed using Snap or Flatpak are not supported with exception to Firefox installed using Snap. - - CloneDialog @@ -1323,6 +1208,14 @@ Do you want to overwrite the passkey in %1 - %2? CsvImportWidget + + Import CSV fields + Εισαγωγή πεδίων CSV + + + filename + όνομα αρχείου + size, rows, columns μέγεθος, γραμμές, στήλες @@ -1333,7 +1226,7 @@ Do you want to overwrite the passkey in %1 - %2? Password - Κωδικός πρόσβασης + Κωδικός Username @@ -1345,7 +1238,7 @@ Do you want to overwrite the passkey in %1 - %2? Group - Ομάδα + Όμαδα URL @@ -1377,11 +1270,11 @@ Do you want to overwrite the passkey in %1 - %2? Codec - Κωδικοποιητής + Codec Text is qualified by - Το κείμενο πληροί τις προϋποθέσεις από + Το κείμενο χαρακτηρίζεται από Text qualification @@ -1413,7 +1306,7 @@ Do you want to overwrite the passkey in %1 - %2? Consider '\' an escape character - Θεωρήστε το '\' χαρακτήρα διαφυγής + Θεώρησε το '\' χαρακτήρα διαφυγής Preview @@ -1425,48 +1318,56 @@ Do you want to overwrite the passkey in %1 - %2? Not Present - Δεν είναι παρών + Απών Column %1 Στήλη %1 + + Imported from CSV file + Εισήχθη από αρχείο CSV + + + Original data: + Αρχικά δεδομένα: + + + Error(s) detected in CSV file! + Εντοπίστηκαν σφάλμα(τα) στο αρχείο CSV! + [%n more message(s) skipped] [%n ακόμη μήνυμα(τα) παραλείφθηκε][%n ακόμη μηνύμα(τα) παραλείφθηκαν] - Failed to parse CSV file: %1 - Απέτυχε η ανάλυση του αρχείου CSV: %1 + Error + Σφάλμα - Imported from CSV file: %1 - Εισήχθη από αρχείο CSV: %1 - - - No Title Selected - - - - No title column was selected, entries will be hard to tell apart. -Are you sure you want to import? - - - - Tags - Ετικέτες + CSV import: writer has errors: +%1 + Εισαγωγή CSV: ο συγγραφέας έχει λάθη: +%1 CsvParserModel + + %1, %2, %3 + file info: bytes, rows, columns + %1, %2, %3 + + + %n byte(s) + %n byte(s)%n byte(s) + %n row(s) - CSV row count %n σειρά(ες)%n σειρά(ες) %n column(s) - CSV column count %n στήλη(ες)%n στήλη(ες) @@ -1475,7 +1376,7 @@ Are you sure you want to import? Passwords Root group name - Κωδικοί πρόσβασης + Κωδικοί File %1 does not exist. @@ -1517,15 +1418,7 @@ Backup database located at %2 Recycle Bin - Κάδος Ανακύκλωσης - - - Database file read error. - - - - No file path was provided. - + Καλάθι ανακύκλωσης @@ -1549,10 +1442,30 @@ Backup database located at %2 Password field Πεδίο κωδικού πρόσβασης + + Enter Additional Credentials (if any): + Εισαγάγετε Πρόσθετα Διαπιστευτήρια (εάν υπάρχουν): + + + Key File: + Αρχείο κλειδί: + + + Key file help + Βοήθεια για το αρχείο κλειδί + Hardware key slot selection Επιλογή υποδοχής hardware κλειδιού + + Hardware Key: + Hardware Κλειδί: + + + Hardware key help + Βοήθεια hardware κλειδιού + Key file to unlock the database Αρχείο κλειδί για ξεκλείδωμα της βάσης δεδομένων @@ -1565,6 +1478,14 @@ Backup database located at %2 Browse… Αναζήτηση... + + Refresh hardware tokens + Ανανέωση hardware tokens + + + Refresh + Ανανέωση + Unlock Database Ξεκλείδωμα Βάσης δεδομένων @@ -1619,13 +1540,17 @@ Do you want to retry with an "empty" password instead? To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. Το ξεκλείδωμα της βάσης δεδομένων απέτυχε και δεν εισαγάγατε κωδικό πρόσβασης. -Θέλετε αντί αυτού να ξαναδοκιμάσετε με έναν "κενό" κωδικό πρόσβασης; +Θέλετε αντί αυτού να προσπαθήσετε ξανά με έναν "κενό" κωδικό πρόσβασης; Για να αποτρέψετε την εμφάνιση αυτού του σφάλματος, πρέπει να μεταβείτε στην ενότητα "Ρυθμίσεις Βάσης Δεδομένων / Ασφάλεια" και να επαναφέρετε τον κωδικό πρόσβασής σας. Retry with empty password - Ξαναδοκιμάστε με κενό κωδικό πρόσβασης + Δοκιμάστε ξανά με κενό κωδικό πρόσβασης + + + Failed to authenticate with Touch ID + Απέτυχε ο έλεγχος ταυτότητας με το Touch ID Failed to open key file: %1 @@ -1659,80 +1584,56 @@ To prevent this error from appearing, you must go to "Database Settings / S Cannot use database file as key file Δεν είναι δυνατή η χρήση του αρχείου βάσης δεδομένων ως αρχείο κλειδί + + You cannot use your database file as a key file. +If you do not have a key file, please leave the field empty. + Δεν μπορείτε να χρησιμοποιήσετε το αρχείο βάσης δεδομένων ως αρχείο κλειδί. +Εάν δεν έχετε ένα αρχείο κλειδί, αφήστε το πεδίο κενό. + + + Detecting hardware keys… + Εντοπισμός hardware κλειδιών... + + + No hardware keys detected + Δεν εντοπίστηκαν hardware κλειδιά + + + Select hardware key… + Επιλογή hardware κλειδιού... + + + <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information…</p> + <p>Εκτός από έναν κωδικό πρόσβασης, μπορείτε να χρησιμοποιήσετε ένα μυστικό αρχείο για να βελτιώσετε την ασφάλεια της βάσης δεδομένων σας. Αυτό το αρχείο μπορεί να δημιουργηθεί στις ρυθμίσεις ασφαλείας της βάσης δεδομένων σας.</p><p>Αυτό <strong>δεν</strong> είναι το αρχείο βάσης δεδομένων σας *.kdbx!<br>Εάν δεν έχετε αρχείο κλειδί, αφήστε αυτό το πεδίο κενό.</p><p>Κάντε κλικ για περισσότερες πληροφορίες...</p> + + + <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +<p>Click for more information…</p> + <p>Μπορείτε να χρησιμοποιήσετε ένα hardware κλειδί ασφαλείας, όπως ένα <strong>YubiKey</strong> ή <strong>OnlyKey</strong> με υποδοχές που έχουν ρυθμιστεί για HMAC-SHA1.</p> +<p>Κάντε κλικ για περισσότερες πληροφορίες...</p> + authenticate to access the database έλεγχος ταυτότητας για πρόσβαση στη βάση δεδομένων - Failed to authenticate with Quick Unlock: %1 - Αποτυχία ελέγχου ταυτότητας με το Γρήγορο Ξεκλείδωμα: %1 - - - Select Key File: - Επιλέξτε Κλειδί Αρχείου: - - - <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!</p> - <p>Εκτός από έναν κωδικό πρόσβασης, μπορείτε να χρησιμοποιήσετε ένα μυστικό αρχείο για να βελτιώσετε την ασφάλεια της βάσης δεδομένων σας. Αυτό το αρχείο μπορεί να δημιουργηθεί στις ρυθμίσεις ασφαλείας της βάσης δεδομένων σας.</p> <p>Αυτό <strong>δεν</strong> είναι το αρχείο βάσης δεδομένων *.kdbx!</p> - - - Use hardware key [Serial: %1] - Χρησιμοποιήστε κλειδί υλικού [Serial: %1] - - - Use hardware key - Χρησιμοποιήστε κλειδί υλικού - - - Your database file is NOT a key file! -If you don't have a key file or don't know what that is, you don't have to select one. - Το αρχείο της βάσης δεδομένων σας ΔΕΝ είναι αρχείο κλειδί! -Εάν δεν έχετε αρχείο κλειδί ή δεν ξέρετε τι είναι, δεν χρειάζεται να επιλέξετε ένα. - - - KeePassXC database file selected - Επιλέχθηκε το αρχείο βάσης δεδομένων KeePassXC - - - The file you selected looks like a database file. -A database file is NOT a key file! - -Are you sure you want to continue with this file?. - Το αρχείο που επιλέξατε μοιάζει με αρχείο βάσης δεδομένων. -Ένα αρχείο βάσης δεδομένων ΔΕΝ είναι αρχείο κλειδί! - -Είστε βέβαιοι ότι θέλετε να συνεχίσετε με αυτό το αρχείο;. - - - No hardware keys found. - Δεν βρέθηκαν κλειδιά υλικού. - - - Refresh Hardware Keys - Ανανέωση Κλειδιών Υλικού - - - Click to add a key file. - Κάντε κλικ για να προσθέσετε ένα κλειδί αρχείου. - - - <a href="#" style="text-decoration: underline">I have a key file</a> - <a href="#" style="text-decoration: underline">Έχω ένα αρχείο κλειδί</a> - - - Hardware keys found, but no slots are configured. - + Failed to authenticate with Windows Hello: %1 + Απέτυχε ο έλεγχος ταυτότητας με το Windows Hello: %1 DatabaseSettingWidgetMetaData Passwords - Κωδικοί πρόσβασης + Κωδικοί DatabaseSettingsDialog + + Advanced Settings + Ρυθμίσεις για Προχωρημένους + General Γενικά @@ -1751,28 +1652,12 @@ Are you sure you want to continue with this file?. Browser Integration - Ενσωμάτωση Προγράμματος Περιήγησης + Ενσωμάτωση Περιηγητή Maintenance Συντήρηση - - KeeShare - KeeShare - - - Secret Service Integration - Ενσωμάτωση Secret Service - - - Remote Sync - - - - Database Settings: %1 - - DatabaseSettingsWidgetBrowser @@ -1780,6 +1665,18 @@ Are you sure you want to continue with this file?. KeePassXC-Browser settings Ρυθμίσεις KeePassXC-Browser + + Convert KeePassHTTP data + Μετατροπή δεδομένων KeePassHTTP + + + Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data + Μετατροπή παλαιού τύπου χαρακτηριστικά KeePassHTTP σε προσαρμοσμένα δεδομένα συμβατά με KeePassXC-Browser + + + Refresh database root group ID + Ανανέωση του ριζικού ID ομάδας της βάσης δεδομένων + Disconnect all browsers Αποσύνδεση όλων των προγραμμάτων περιήγησης @@ -1788,10 +1685,6 @@ Are you sure you want to continue with this file?. Forget all site-specific settings on entries Ξεχάστε όλες τις ρυθμίσεις που αφορούν τον ιστότοπο στις καταχωρήσεις - - Refresh database root group ID - Ανανέωση του ριζικού ID ομάδας της βάσης δεδομένων - Stored keys Αποθηκευμένα κλειδιά @@ -1806,7 +1699,7 @@ Are you sure you want to continue with this file?. Remove - Κατάργηση + Αφαίρεση Delete the selected key? @@ -1832,7 +1725,7 @@ This may prevent connection to the browser plugin. Enable Browser Integration to access these settings. - Ενεργοποιήστε την Ενσωμάτωση Προγράμματος Περιήγησης για να αποκτήσετε πρόσβαση σε αυτές τις ρυθμίσεις. + Ενεργοποιήστε την Ενοποίηση Προγράμματος Περιήγησης για να αποκτήσετε πρόσβαση σε αυτές τις ρυθμίσεις. Do you really want to disconnect all browsers? @@ -1840,13 +1733,21 @@ This may prevent connection to the browser plugin. Θέλετε πραγματικά να αποσυνδέσετε όλα τα προγράμματα περιήγησης; Αυτό μπορεί να εμποδίσει τη σύνδεση με το πρόσθετο του προγράμματος περιήγησης. + + KeePassXC: No keys found + KeePassXC: Δε βρεθήκαν κλειδιά + No shared encryption keys found in KeePassXC settings. Δεν βρέθηκαν κοινόχρηστα κλειδιά κρυπτογράφησης στις ρυθμίσεις KeePassXC. + + KeePassXC: Removed keys from database + KeePassXC: Κλειδιά αφαιρέθηκαν από τη βάση + Successfully removed %n encryption key(s) from KeePassXC settings. - Καταργήθηκε με επιτυχία %n κλειδί κρυπτογράφησης από τις ρυθμίσεις KeePassXC.Καταργήθηκαν με επιτυχία %n κλειδιά κρυπτογράφησης από τις ρυθμίσεις KeePassXC. + Καταργήθηκε με επιτυχία %n κλειδί κρυπτογράφησης από τις ρυθμίσεις KeePassXC.Καταργήθηκαν επιτυχώς %n κλειδιά κρυπτογράφησης από τις ρυθμίσεις KeePassXC. Do you really want forget all site-specific settings on every entry? @@ -1860,16 +1761,34 @@ Permissions to access entries will be revoked. 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. Η ενεργή βάση δεδομένων δεν περιέχει καταχώρηση με δικαιώματα. + + Move KeePassHTTP attributes to custom data + Μετακίνηση χαρακτηριστικών KeePassHTTP σε προσαρμοσμένα δεδομένα + + + Do you really want to convert all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + Θέλετε πραγματικά να μετατρέψετε όλα τα δεδομένα ενοποίησης του προγράμματος περιήγησης παλαιού τύπου στα πιο πρόσφατα πρότυπα; +Αυτό είναι απαραίτητο για τη διατήρηση της συμβατότητας με το πρόσθετο του προγράμματος περιήγησης. + Refresh database ID Ανανέωση ID βάσης δεδομένων @@ -1877,29 +1796,9 @@ Permissions to access entries will be revoked. Do you really want refresh the database ID? This is only necessary if your database is a copy of another and the browser extension cannot connect. - Θέλετε πραγματικά να ανανεώσετε το ID βάσης δεδομένων; + Θέλετε πραγματικά να ανανεώσετε το ID της βάσης δεδομένων; Αυτό είναι απαραίτητο μόνο εάν η βάση δεδομένων σας είναι αντίγραφο ενός άλλου και το πρόσθετο του προγράμματος περιήγησης δεν μπορεί να συνδεθεί. - - Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data - Μετατροπή παλαιού τύπου χαρακτηριστικά KeePassHTTP σε προσαρμοσμένα δεδομένα συμβατά με KeePassXC-Browser - - - No keys found - Δεν βρέθηκαν κλειδιά - - - Removed keys from database - Αφαιρέθηκαν τα κλειδιά από τη βάση δεδομένων - - - Removed permissions - Αφαιρέθηκαν άδειες - - - No entry with permissions found! - Δεν βρέθηκε καμία καταχώρηση με δικαιώματα! - DatabaseSettingsWidgetDatabaseKey @@ -1939,18 +1838,6 @@ Are you sure you want to continue without a password? Failed to change database credentials Η αλλαγή των διαπιστευτηρίων βάσης δεδομένων απέτυχε - - Weak password - Αδύναμος κωδικός πρόσβασης - - - This is a weak password! For better protection of your secrets, you should choose a stronger password. - Αυτός είναι ένας αδύναμος κωδικός πρόσβασης! Για καλύτερη προστασία των μυστικών σας, θα πρέπει να επιλέξετε έναν ισχυρότερο κωδικό πρόσβασης. - - - The provided password does not meet the minimum quality requirement. - - DatabaseSettingsWidgetEncryption @@ -1958,6 +1845,14 @@ Are you sure you want to continue without a password? Decryption Time: Χρόνος Αποκρυπτογράφησης: + + Change existing decryption time + Αλλαγή του υπάρχοντος χρόνου αποκρυπτογράφησης + + + Change + Αλλαγή + Decryption time in seconds Χρόνος αποκρυπτογράφησης σε δευτερόλεπτα @@ -1984,7 +1879,7 @@ Are you sure you want to continue without a password? Encryption Algorithm: - Αλγόριθμος Κρυπτογράφησης: + Αλγόριθμος κρυπτογράφησης: Encryption algorithm @@ -2008,7 +1903,7 @@ Are you sure you want to continue without a password? Transform rounds: - Επαναλήψεις Μετασχηματισμού: + Γύροι μετασχηματισμού: Transform rounds @@ -2016,7 +1911,7 @@ Are you sure you want to continue without a password? Memory Usage: - Χρήση Μνήμης: + Χρήση μνήμης: Memory usage @@ -2024,7 +1919,7 @@ Are you sure you want to continue without a password? Parallelism: - Παράλληλα Νήματα: + Παραλληλισμός: Parallelism @@ -2038,10 +1933,15 @@ Are you sure you want to continue without a password? KDBX 3 KDBX 3 + + 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. @@ -2062,7 +1962,7 @@ If you keep this number, your database may take hours, days, or even longer to o Number of rounds too low Key transformation rounds - Ο αριθμός των επαναλήψεων είναι πολύ χαμηλός + Αριθμός γύρων πάρα πολύ χαμηλός You are using a very low number of key transform rounds with AES-KDF. @@ -2083,25 +1983,13 @@ If you keep this number, your database will not be protected from brute force at MiB Abbreviation for Mebibytes (KDF settings) - Mib Mib + MiB MiB thread(s) Threads for parallel execution (KDF settings) νήμα νήματα - - Encryption Settings: - Ρυθμίσεις Κρυπτογράφησης: - - - Basic - Βασικές - - - Advanced - Για προχωρημένους - DatabaseSettingsWidgetFdoSecrets @@ -2119,7 +2007,7 @@ If you keep this number, your database will not be protected from brute force at Enable Secret Service to access these settings. - Ενεργοποιήστε το Secret Service για πρόσβαση σε αυτές τις ρυθμίσεις. + Ενεργοποιήστε τη Μυστική Υπηρεσία για πρόσβαση σε αυτές τις ρυθμίσεις. @@ -2134,7 +2022,7 @@ If you keep this number, your database will not be protected from brute force at Database name field - Πεδίο ονόματος βάσης δεδομένων + Όνομα πεδίου βάσης δεδομένων Database description: @@ -2150,11 +2038,11 @@ If you keep this number, your database will not be protected from brute force at Default username field - Πεδίο προεπιλεγμένου ονόματος χρήστη + Προεπιλεγμένο πεδίο ονόματος χρήστη History Settings - Ρυθμίσεις Ιστορικού + Ρυθμίσεις ιστορικού Maximum number of history items per entry @@ -2174,7 +2062,7 @@ If you keep this number, your database will not be protected from brute force at Additional Database Settings - Πρόσθετες Ρυθμίσεις Βάσης Δεδομένων + Πρόσθετες ρυθμίσεις βάσης δεδομένων Enable compression (recommended) @@ -2188,11 +2076,11 @@ If you keep this number, your database will not be protected from brute force at Do you want to delete the current recycle bin and all its contents? This action is not reversible. Θέλετε να διαγράψετε τον τρέχοντα κάδο ανακύκλωσης και όλα τα περιεχόμενά του; -Αυτή η ενέργεια είναι μη αναστρέψιμη. +Αυτή η ενέργεια δεν είναι αναστρέψιμη. (old) - (παλιό) + (παλιά) When saving this setting or editing an entry @@ -2232,70 +2120,6 @@ removed from the database. Οι καταχωρήσεις που έχουν διαγραφεί από τον κάδο ανακύκλωσης θα έχουν αφαιρεθεί από τη βάση δεδομένων. - - Autosave delay since last change - Καθυστέρηση αυτόματης αποθήκευσης από την τελευταία αλλαγή - - - Autosave delay - Καθυστέρηση αυτόματης αποθήκευσης - - - Autosave delay since last change in minutes - Καθυστέρηση αυτόματης αποθήκευσης από την τελευταία αλλαγή σε λεπτά - - - min - min - - - Autosave delay since last change checkbox - Καθυστέρηση αυτόματης αποθήκευσης από την τελευταία αλλαγή του checkbox - - - Public Database Metadata - - - - Warning: the following settings are not encrypted. - - - - Display name: - - - - Publically visible display name used on the unlock dialog - - - - Database public display name - - - - Display color: - - - - Publically visible color used on the unlock dialog - - - - Database public display color chooser - - - - Clear - Καθαρισμός - - - Display icon: - - - - Select Database Icon - - DatabaseSettingsWidgetKeeShare @@ -2305,7 +2129,7 @@ removed from the database. Breadcrumb - Ίχνη πλοήγησης + Breadcrumb Type @@ -2380,7 +2204,7 @@ removed from the database. Database name field - Πεδίο ονόματος βάσης δεδομένων + Όνομα πεδίου βάσης δεδομένων Description: @@ -2391,129 +2215,6 @@ removed from the database. Πεδίο περιγραφής βάσης δεδομένων - - DatabaseSettingsWidgetRemote - - Sync Commands - - - - Remove - Αφαίρεση - - - Command Settings - - - - Name - Όνομα - - - Save - Αποθήκευση - - - Download - - - - Command: - - - - Download command field - - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - - - - Input: - - - - Download input field - - - - Upload - - - - Upload command field - - - - e.g.: "sftp user@hostname" or "scp {TEMP_DATABASE} user@hostname:DatabaseOnRemote.kdbx" - - - - Upload input field - - - - Name cannot be empty. - - - - Test - - - - Download command cannot be empty. - - - - Download failed with error: %1 - - - - Download finished, but file %1 could not be found. - - - - Download successful. - - - - Save Remote Settings - - - - You have unsaved changes. Do you want to save them? - - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - - - - e.g.: -put {TEMP_DATABASE} DatabaseOnRemote.kdbx -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - - - - Timeout: - - - - seconds - δευτερόλεπτα - - DatabaseTabWidget @@ -2536,32 +2237,70 @@ This is definitely a bug, please report it to the developers. Open database - Άνοιγμα βάσης δεδομένων + Άνοιγμα Βάσης Δεδομένων Failed to open %1. It either does not exist or is not accessible. - Το άνοιγμα του %1 απέτυχε. Είτε δεν υπάρχει είτε δεν είναι προσβάσιμη. + Το άνοιγμα της %1 απέτυχε. Είτε δεν υπάρχει είτε δεν είναι προσβάσιμη. CSV file - Αρχείο CSV + αρχείο CSV + + + Select CSV file + Επιλογή αρχείου CSV Merge database Συγχώνευση βάσης δεδομένων + + KeePass 1 database + Βάση δεδομένων KeePass 1 + + + Open KeePass 1 database + Άνοιγμα βάσης δεδομένων KeePass 1 + + + Open OPVault + Άνοιγμα OPVault + Export database to CSV file Εξαγωγή βάσης δεδομένων σε αρχείο CSV Writing the CSV file failed. - Η εγγραφή του αρχείου CSV απέτυχε. + Γράψιμο στο αρχείο CSV απέτυχε. Writing the HTML file failed. Η εγγραφή του αρχείου HTML απέτυχε. + + Export Confirmation + Επιβεβαίωση Εξαγωγής + + + You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? + Πρόκειται να εξαγάγετε τη βάση δεδομένων σας σε ένα μη κρυπτογραφημένο αρχείο. Αυτό θα αφήσει τους κωδικούς πρόσβασης και τις ευαίσθητες πληροφορίες σας ευάλωτα! Είστε βέβαιοι ότι θέλετε να συνεχίσετε; + + + New Database + Νέα Βάση Δεδομένων + + + %1 [New Database] + Database tab name modifier + %1 [Νέα Βάση Δεδομένων] + + + %1 [Locked] + Database tab name modifier + %1 [Κλειδωμένη] + Export database to XML file Εξαγωγή βάσης δεδομένων σε αρχείο XML @@ -2574,31 +2313,9 @@ This is definitely a bug, please report it to the developers. Writing the XML file failed Η εγγραφή του αρχείου XML απέτυχε - - Export Confirmation - Επιβεβαίωση Εξαγωγής - - - You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? - Πρόκειται να εξαγάγετε τη βάση δεδομένων σας σε ένα μη κρυπτογραφημένο αρχείο. Αυτό θα αφήσει τους κωδικούς πρόσβασης και τις ευαίσθητες πληροφορίες σας ευάλωτα! Είστε βέβαιοι ότι θέλετε να συνεχίσετε; - - - %1 [Locked] - Database tab name modifier - %1 [Κλειδωμένη] - - - %1 [Temporary] - Database tab name modifier - - DatabaseWidget - - Searches and Tags - Αναζητήσεις και Ετικέτες - Searching… Αναζήτηση... @@ -2625,7 +2342,7 @@ This is definitely a bug, please report it to the developers. Remember my choice - Να θυμάσαι την επιλογή μου + Να θυμάσαι αυτή την επιλογή Delete group @@ -2633,7 +2350,7 @@ This is definitely a bug, please report it to the developers. Do you really want to delete the group "%1" for good? - Θέλετε πραγματικά να διαγράψετε την ομάδα "%1" για πάντα; + Θέλετε στα αλήθεια να διαγράψετε την ομάδα "%1" μόνιμα; Move group to recycle bin? @@ -2647,17 +2364,13 @@ This is definitely a bug, please report it to the developers. Expired entries Ληγμένες καταχωρήσεις - - Entries expiring within %1 day(s) - Καταχωρήσεις που λήγουν εντός %1 ημεράς(ών)Καταχωρήσεις που λήγουν εντός %1 ημεράς(ών) - No current database. - Δεν υπάρχει τρέχουσα βάση δεδομένων. + Καμία τρέχουσα βάση δεδομένων. No source database, nothing to do. - Δεν υπάρχει προέλευση βάσης δεδομένων, δεν υπάρχει κάτι να γίνει. + Δεν υπάρχει πηγή προέλευσης βάσης δεδομένων, δεν υπάρχει κάτι να γίνει. Successfully merged the database files. @@ -2673,19 +2386,7 @@ This is definitely a bug, please report it to the developers. No Results - Δεν υπάρχουν Αποτελέσματα - - - Save - Αποθήκευση - - - Enter a unique name or overwrite an existing search from the list: - Εισαγάγετε ένα μοναδικό όνομα ή αντικαταστήστε μια υπάρχουσα αναζήτηση από τη λίστα: - - - Save Search - Αποθήκευση Αναζήτησης + Δεν Υπάρχουν Αποτελέσματα Lock Database? @@ -2693,12 +2394,12 @@ This is definitely a bug, please report it to the developers. You are editing an entry. Discard changes and lock anyway? - Επεξεργάζεστε μια καταχώρηση. Απορρίψτε τις αλλαγές και κλειδώστε όπως και να έχει; + Επεξεργάζεστε μια καταχώρηση. Απορρίψτε τις αλλαγές και κλειδώστε ούτως ή άλλως; "%1" was modified. Save changes? - "%1" έχει τροποποιηθεί. + "%1" έχει τροποποιηθή. Αποθήκευση αλλαγών; @@ -2715,6 +2416,26 @@ Save changes? 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? + Το αρχείο βάσης δεδομένων έχει αλλάξει και έχετε μη αποθηκευμένες αλλαγές. +Θέλετε να συγχωνεύσετε τις αλλαγές σας; + + + Could not open the new database file while attempting to autoreload. +Error: %1 + Δεν ήταν δυνατό το άνοιγμα του νέου αρχείου βάσης δεδομένων κατά την προσπάθεια αυτόματης φόρτωσης. +Σφάλμα: %1 + Disable safe saves? Απενεργοποίηση ασφαλών αποθηκεύσεων; @@ -2731,7 +2452,7 @@ Disable safe saves and try again? Passwords - Κωδικοί πρόσβασης + Κωδικοί Save database as @@ -2751,100 +2472,31 @@ Disable safe saves and try again? Are you sure you want to permanently delete everything from your recycle bin? - Είστε βέβαιοι ότι θέλετε να διαγράψετε οριστικά τα πάντα από τον κάδο ανακύκλωσης; + Είστε σίγουροι ότι θέλετε να διαγράψετε μόνιμα τα πάντα από το κάδο ανακύκλωσής σας; Could not find database file: %1 Δεν ήταν δυνατή η εύρεση του αρχείου βάσης δεδομένων: %1 - - New Database - Νέα Βάση Δεδομένων + + Entries expiring within %1 day(s) + Καταχωρήσεις που λήγουν εντός %1 ημεράς(ών)Καταχωρήσεις που λήγουν εντός %1 ημεράς(ών) - %1 [New Database] - Database tab name modifier - %1 [Νέα Βάση Δεδομένων] + Searches and Tags + Αναζητήσεις και Ετικέτες - Remote Sync did not contain any download or upload commands. - + Enter a unique name or overwrite an existing search from the list: + Εισαγάγετε ένα μοναδικό όνομα ή αντικαταστήστε μια υπάρχουσα αναζήτηση από τη λίστα: - Remote sync '%1' completed successfully! - + Save + Αποθήκευση - Remote sync '%1' failed: %2 - - - - Error while saving database %1: %2 - - - - Downloading... - Λήψη... - - - Uploading... - - - - Syncing... - - - - Remove passkey from entry - - - - Do you want to remove the passkey from this entry? - - - - The database file "%1" was modified externally - - - - Do you want to load the changes? - - - - Reload database - - - - Reloading database… - - - - Reload canceled - - - - Reload successful - - - - Reload pending user action… - - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes<br>Ignore the changes on disk until save<br>Discard unsaved changes - - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes then save<br>Overwrite the changes on disk<br>Discard unsaved changes - - - - Database file overwritten. - - - - Database file on disk cannot be unlocked with current credentials.<br>Enter new credentials and/or present hardware key to continue. - + Save Search + Αποθήκευση Αναζήτησης @@ -2863,7 +2515,7 @@ Disable safe saves and try again? Auto-Type - Αυτόματη Πληκτρολόγηση + Αυτόματη-Γραφή Browser Integration @@ -2891,23 +2543,27 @@ Disable safe saves and try again? SSH Agent - SSH Agent + πράκτορας SSH n/a n/a + + (encrypted) + (κρυπτογραφημένο) + Select private key - Επιλέξτε ιδιωτικό κλειδί + Επιλογή ιδιωτικού κλειδιού Entry history - Ιστορικό καταχώρησης + Ιστορικό καταχωρήσεων Add entry - Προσθήκη καταχώρησης + Πρόσθεση καταχώρησης Edit entry @@ -2919,7 +2575,7 @@ Disable safe saves and try again? Invalid Entry - Μη έγκυρη Καταχώρηση + Μη έγκυρη καταχώρηση An external merge operation has invalidated this entry. @@ -2969,7 +2625,7 @@ Would you like to correct it? Are you sure you want to remove this attribute? - Είστε βέβαιοι ότι θέλετε να καταργήσετε αυτό το χαρακτηριστικό; + Είστε σίγουροι ότι θέλετε να αφαιρέσετε αυτό το χαρακτηριστικό; Reveal @@ -2983,10 +2639,6 @@ Would you like to correct it? Hide Απόκρυψη - - %n hour(s) - %n ώρα(-ες)%n ώρα(-ες) - %n week(s) %n εβδομάδα%n εβδομάδες @@ -2999,9 +2651,9 @@ Would you like to correct it? %n year(s) %n χρόνος%n χρόνια - - Failed to decrypt SSH key, ensure password is correct. - + + %n hour(s) + %n ώρα(-ες)%n ώρα(-ες) @@ -3024,7 +2676,7 @@ Would you like to correct it? Add - Προσθήκη + Πρόσθεση Remove selected attribute @@ -3032,7 +2684,7 @@ Would you like to correct it? Remove - Κατάργηση + Αφαίρεση Edit attribute name @@ -3095,15 +2747,15 @@ Would you like to correct it? Inherit default Auto-Type sequence from the group - Χρησιμοποίηση προεπιλεγμένης ακολουθίας Αυτόματης Πληκτρολόγησης από την ομάδα + Χρησιμοποίηση προεπιλεγμένης ακολουθείας Αυτόματης-Γραφής απο την ομάδα Use custom Auto-Type sequence: - Χρήση προσαρμοσμένης ακολουθίας Αυτόματης Πληκτρολόγησης: + Χρησιμοποίηση προσαρμοσμένης ακολουθείας Αυτόματης Γραφής: Custom Auto-Type sequence - Χρήση προσαρμοσμένης ακολουθίας Αυτόματης Πληκτρολόγησης + Χρήση προσαρμοσμένης ακολουθίας Αυτόματης Πληκτρολόγησης: Open Auto-Type help webpage @@ -3121,20 +2773,10 @@ Would you like to correct it? Add new window association Προσθήκη νέας συσχέτισης παραθύρου - - + - Add item - + - Remove selected window association Κατάργηση επιλεγμένης συσχέτισης παραθύρου - - - - Remove item - - - Window title: Τίτλος Παραθύρου: @@ -3159,9 +2801,23 @@ Would you like to correct it? Custom Auto-Type sequence for this window Προσαρμοσμένη ακολουθία Αυτόματης Πληκτρολόγησης για αυτό το παράθυρο + + + + Add item + + + + + - + Remove item + - + EditEntryWidgetBrowser + + These settings affect to the entry's behaviour with the browser extension. + Αυτές οι ρυθμίσεις επηρεάζουν τη συμπεριφορά της καταχώρησης με την επέκταση του προγράμματος περιήγησης. + General Γενικά @@ -3174,42 +2830,38 @@ Would you like to correct it? Skip Auto-Submit for this entry Παράλειψη Αυτόματης Υποβολής για αυτήν την καταχώρηση + + Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. + Μόνο αποστολή αυτής της ρύθμισης στο πρόγραμμα περιήγησης για παράθυρα διαλόγου HTTP Auth. Εάν ενεργοποιηθεί, οι κανονικές φόρμες σύνδεσης δεν θα εμφανίζουν αυτήν την καταχώρηση για επιλογή. + Use this entry only with HTTP Basic Auth - Χρήση αυτής της καταχώρησης μόνο με HTTP Basic Auth + Χρήση αυτής της καταχώρησης μόνο με HTTPS Basic Auth + + + Do not send this setting to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. + Μην στέλνετε αυτήν τη ρύθμιση στο πρόγραμμα περιήγησης για παράθυρα διαλόγου HTTP Auth. Εάν είναι ενεργοποιημένο, τα παράθυρα διαλόγου HTTP Auth δεν θα εμφανίζουν αυτήν την καταχώρηση για επιλογή. Do not use this entry with HTTP Basic Auth Μην χρησιμοποιείτε αυτήν την καταχώρηση με το HTTP Basic Auth + + Additional URL's + Πρόσθετες διευθύνσεις URL + Add - Προσθήκη + Πρόσθεση Remove - Κατάργηση + Αφαίρεση Edit Επεξεργασία - - These settings affect the entry's behaviour with the browser extension. - - - - Additional URLs - - - - Only send this entry to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. - - - - Do not send this entry to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. - - EditEntryWidgetHistory @@ -3219,7 +2871,7 @@ Would you like to correct it? Show entry at selected history state - Εμφάνιση καταχώρησης στην επιλεγμένη κατάσταση ιστορικού + Εμφάνιση καταχώρησης σε επιλεγμένη κατάσταση ιστορικού Show @@ -3227,7 +2879,7 @@ Would you like to correct it? Restore entry to selected history state - Επαναφορά καταχώρησης στην επιλεγμένη κατάσταση ιστορικού + Επαναφορά καταχώρησης σε επιλεγμένη κατάσταση ιστορικού Restore @@ -3254,7 +2906,7 @@ Would you like to correct it? EditEntryWidgetMain Edit Entry - Επεξεργασία Καταχώρησης + Επεξεργασία καταχώρησης Notes field @@ -3270,7 +2922,7 @@ Would you like to correct it? Expiration Presets - Προεπιλογές Λήξης + Προεπιλογές λήξης Expiration presets @@ -3330,7 +2982,7 @@ Would you like to correct it? T&ags: - T &ags: + T&ags: &Expires: @@ -3345,7 +2997,7 @@ Would you like to correct it? Remove key from agent when database is closed/locked - Κατάργηση κλειδιού από agent όταν η βάση δεδομένων είναι κλειστή/κλειδωμένη + Κατάργηση κλειδιού από παράγοντα όταν η βάση δεδομένων είναι κλειστή/κλειδωμένη Comment @@ -3353,7 +3005,7 @@ Would you like to correct it? Add key to agent when database is opened/unlocked - Προσθήκη κλειδιού στον agent κατά το άνοιγμα/ξεκλείδωμα της βάσης δεδομένων + Προσθήκη κλειδιού για παρακολοθύθηση κατά το άνοιγμα/ξεκλείδωμα της βάσης δεδομένων Decrypt @@ -3375,6 +3027,19 @@ Would you like to correct it? Private key Ιδιωτικό κλειδί + + External file + Εξωτερικό αρχείο + + + Browser for key file + Πρόγραμμα περιήγησης για αρχείο κλειδιού + + + Browse… + Button for opening file dialog + Αναζήτηση... + Attachment Συνημμένο @@ -3391,26 +3056,9 @@ Would you like to correct it? Remove from agent Κατάργηση από agent - - External file - Εξωτερικό αρχείο - - - Browser for key file - Πρόγραμμα περιήγησης για αρχείο κλειδί - - - Browse… - Button for opening file dialog - Αναζήτηση... - - - Generate - Παραγωγή - Select attachment file - Επιλέξτε αρχείο συνημμένου + Επιλογή αρχείου συνημμένου Require user confirmation when this key is used @@ -3422,7 +3070,7 @@ Would you like to correct it? Remove key from agent after - Κατάργηση κλειδιού από agent μετά + Κατάργηση κλειδιού από παράγοντα μετά Remove key from agent after specified seconds @@ -3432,44 +3080,40 @@ Would you like to correct it? seconds δευτερόλεπτα - - Clear agent - - EditGroupWidget Group - Ομάδα + Όμαδα Icon Εικονίδιο + + Browser Integration + Ενσωμάτωση Περιηγητή + Properties Ιδιότητες Add group - Προσθήκη ομάδας + Πρόσθεση Ομάδας Edit group - Επεξεργασία ομάδας + Επεξεργασία Ομάδας Group has unsaved changes Η ομάδα έχει μη αποθηκευμένες αλλαγές - - Browser Integration - Ενσωμάτωση Προγράμματος Περιήγησης - Enable - Ενεργοποίηση + Ενεργοποίηση Disable @@ -3477,7 +3121,7 @@ Would you like to correct it? Inherit from parent group (%1) - Μεταβίβαση από γονική ομάδα (%1) + Κληρονομούν από γονική ομάδα (%1) @@ -3526,14 +3170,6 @@ Would you like to correct it? Omit WWW subdomain from matching toggle for this and sub groups Παραλείψτε τον υποτομέα WWW από την αντιστοίχιση εναλλαγής για αυτήν και τις υποομάδες - - Restrict matching to given browser key: - Περιορίστε την αντιστοίχιση στον δοσμένο κλειδί προγράμματος περιήγησης. - - - Restrict matching to given browser key toggle for this and sub groups - Περιορίστε την αντιστοίχιση στην εναλλαγή του δοσμένου κλειδιού προγράμματος περιήγησης για αυτό και τις υποομάδες. - EditGroupWidgetKeeShare @@ -3551,7 +3187,7 @@ Would you like to correct it? Password: - Κωδικό πρόσβασης: + Κωδικός: Path: @@ -3563,7 +3199,7 @@ Would you like to correct it? Browse for share file - Αναζήτηση για κοινή χρήση αρχείου + Αναζήτηση κοινόχρηστου αρχείου Browse… @@ -3575,7 +3211,7 @@ Would you like to correct it? Clear - Εκκαθάριση + Καθαρισμός Inactive @@ -3634,7 +3270,7 @@ Supported extensions are: %1. Select import source - Επιλογή προέλευσης εισαγωγής + Επιλέξτε πηγή εισαγωγής Select export target @@ -3681,7 +3317,7 @@ Supported extensions are: %1. Auto-Type toggle for this and sub groups - Εναλλαγή Αυτόματης Πληκτρολόγησης για αυτό και δευτερεύουσες ομάδες + Εναλλαγή Αυτόματης Πληκτρολόγησης για αυτήν και τις δευτερεύουσες ομάδες Notes: @@ -3736,7 +3372,7 @@ Supported extensions are: %1. Download favicon - Λήψη favicon + Κατέβασμα favicon Apply selected icon to subgroups and entries @@ -3752,11 +3388,11 @@ Supported extensions are: %1. Also apply to child groups - Επίσης εφαρμογή σε θυγατρικές ομάδες + Εφαρμογή επίσης σε υπομάδες Also apply to child entries - Επίσης εφαρμογή σε θυγατρικές καταχωρήσεις + Εφαρμογή επίσης σε θυγατρικές καταχωρήσεις Also apply to all children @@ -3766,6 +3402,10 @@ Supported extensions are: %1. Unable to fetch favicon. Αδυναμία λήψης favicon. + + You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security + Μπορείτε να ενεργοποιήσετε την υπηρεσία εικονιδίου ιστότοπου DuckDuckGo στην περιοχή Εργαλεία -> Ρυθμίσεις -> Ασφάλεια + Existing icon selected. Επιλέχθηκε το υπάρχον εικονίδιο. @@ -3780,7 +3420,7 @@ Supported extensions are: %1. Select Image(s) - Επιλογή Εικόνας(ων) + Επιλογή εικόνας(ων) Successfully loaded %1 of %n icon(s) @@ -3792,16 +3432,12 @@ Supported extensions are: %1. %n icon(s) already exist in the database - %n εικονίδιο υπάρχουν ήδη στη βάση δεδομένων%n εικονίδια υπάρχει ήδη στη βάση δεδομένων + %n εικονίδιο υπάρχουν ήδη στη βάση δεδομένων%n εικονίδια υπάρχουν ήδη στη βάση δεδομένων The following icon(s) failed: Το ακόλουθο εικονίδιο απέτυχε:Τα ακόλουθα εικονίδια απέτυχαν: - - You can enable the DuckDuckGo website icon service under Application Settings -> Security - Μπορείτε να ενεργοποιήσετε την υπηρεσία εικονιδίων ιστότοπου DuckDuckGo στην περιοχή Ρυθμίσεις εφαρμογής -> Ασφάλεια - EditWidgetProperties @@ -3811,7 +3447,7 @@ Supported extensions are: %1. Datetime created - Ημερομηνία-ώρα δημιουργίας + Ημερομηνία δημιουργίας Modified: @@ -3827,7 +3463,7 @@ Supported extensions are: %1. Datetime accessed - Ημερομηνία-ώρα προσπέλασης + Ημερομηνία-ώρα πρόσβασης Uuid: @@ -3847,11 +3483,11 @@ Supported extensions are: %1. Remove selected plugin data - Κατάργηση επιλεγμένων δεδομένων πρόσθετων + Κατάργηση επιλεγμένων δεδομένων προσθήκης Remove - Κατάργηση + Αφαίρεση Delete plugin data? @@ -3861,7 +3497,7 @@ Supported extensions are: %1. Do you really want to delete the selected plugin data? This may cause the affected plugins to malfunction. Θέλετε πραγματικά να διαγράψετε τα επιλεγμένα δεδομένα πρόσθετου; -Αυτό μπορεί να προκαλέσει δυσλειτουργία στα επηρεασμένα πρόσθετα. +Αυτό μπορεί να προκαλέσει δυσλειτουργία των προσβεβλημένων πρόσθετων. Key @@ -3878,24 +3514,6 @@ This may cause the affected plugins to malfunction. %1 - Clone %1 - Κλώνος - - Passkey - Passkey - - - Invalid conversion type: %1 - Μη έγκυρος τύπος μετατροπής: %1 - - - Invalid conversion syntax: %1 - Μη έγκυρη σύνταξη μετατροπής: %1 - - - Invalid regular expression syntax %1 -%2 - Μη έγκυρη σύνταξη κανονικής έκφρασης % 1 -%2 - EntryAttachments @@ -3904,21 +3522,6 @@ This may cause the affected plugins to malfunction. Δεν είναι δυνατό το άνοιγμα του αρχείου "%1" - - EntryAttachmentsDialog - - Form - Μορφή - - - File name - - - - File contents... - - - EntryAttachmentsModel @@ -3946,7 +3549,7 @@ This may cause the affected plugins to malfunction. Add - Προσθήκη + Πρόσθεση Remove selected attachment @@ -3954,7 +3557,15 @@ This may cause the affected plugins to malfunction. Remove - Κατάργηση + Αφαίρεση + + + Rename selected attachment + Μετονομασία επιλεγμένου συνημμένου + + + Rename + Μετονομασία Open selected attachment @@ -3974,7 +3585,7 @@ This may cause the affected plugins to malfunction. Select files - Επιλέξτε αρχεία + Επιλογή αρχείων Confirm remove @@ -4005,7 +3616,7 @@ This may cause the affected plugins to malfunction. Unable to save attachments: %1 - Δεν είναι δυνατή η αποθήκευση συνημμένων: + Αδυναμία αποθήκευσης συνημμένων: %1 @@ -4017,7 +3628,7 @@ This may cause the affected plugins to malfunction. Unable to open attachments: %1 - Δεν είναι δυνατό το άνοιγμα συνημμένων: + Αδυναμία ανοίγματος συνημμένων: %1 @@ -4031,6 +3642,12 @@ This may cause the affected plugins to malfunction. Confirm Overwrite Attachment Επιβεβαίωση Αντικατάστασης Συνημμένου + + Attachment "%1" already exists. +Would you like to overwrite the existing attachment? + Το συνημμένο "%1" υπάρχει ήδη. +Θέλετε να αντικαταστήσετε το υπάρχον συνημμένο; + Confirm Attachment Επιβεβαίωση Συνημμένου @@ -4065,24 +3682,6 @@ Error: %1 Η αποθήκευση του ενημερωμένου συνημμένου απέτυχε. Σφάλμα: %1 - - Attachment "%1" already exists. -Would you like to overwrite the existing attachment? - Το συνημμένο "%1" υπάρχει ήδη. -Θέλετε να αντικαταστήσετε το υπάρχον συνημμένο; - - - New - - - - Preview - Προεπισκόπηση - - - Failed to preview an attachment: Attachment not found - - EntryAttributesModel @@ -4175,7 +3774,7 @@ Would you like to overwrite the existing attachment? Ref: Reference abbreviation - Αναφορά: + Αναφ: Never @@ -4183,7 +3782,7 @@ Would you like to overwrite the existing attachment? Group - Ομάδα + Όμαδα Title @@ -4195,7 +3794,7 @@ Would you like to overwrite the existing attachment? Password - Κωδικός πρόσβασης + Κωδικός URL @@ -4259,7 +3858,7 @@ Would you like to overwrite the existing attachment? Last access date - Τελευταία ημερομηνία πρόσβασης + Τελευταία ημερομηνία προσπέλασης Attached files @@ -4277,14 +3876,6 @@ Would you like to overwrite the existing attachment? Has TOTP Έχει TOTP - - Background Color - Χρώμα Φόντου - - - Group Path - - EntryPreviewWidget @@ -4302,11 +3893,11 @@ Would you like to overwrite the existing attachment? Password - Κωδικό πρόσβασης + Κωδικός - URL - URL + Notes + Σημειώσεις Expiration @@ -4325,8 +3916,8 @@ Would you like to overwrite the existing attachment? Όνομα χρήστη - Notes - Σημειώσεις + URL + URL Advanced @@ -4346,7 +3937,7 @@ Would you like to overwrite the existing attachment? Default Sequence - Προεπιλεγμένη Ακολουθία + Προεπιλεγμένη ακολουθία Window @@ -4362,7 +3953,7 @@ Would you like to overwrite the existing attachment? Share - Κοινοποίηση + Μοιραστείτε Search @@ -4370,38 +3961,30 @@ Would you like to overwrite the existing attachment? Clear - Εκκαθάριση + Καθαρισμός Never Ποτέ - - Double click to copy value - Κάντε διπλό κλικ για να αντιγράψετε την τιμή - Enabled - Ενεργοποιημένη + Ενεργοποιημένο Disabled Απενεργοποιημένη - Double click to copy to clipboard - Κάντε διπλό κλικ για αντιγραφή στο πρόχειρο + Double click to copy value + Κάντε διπλό κλικ για να αντιγράψετε την τιμή EntryURLModel Invalid URL - Μη έγκυρη διεύθυνση URL - - - Duplicate URL - Διπλότυπο URL + Η διεύθυνση URL δεν είναι έγκυρη @@ -4418,10 +4001,6 @@ Would you like to overwrite the existing attachment? Reset to defaults Επαναφορά στις προεπιλογές - - + %1 entry(s)... - + %1 καταχώριση(εις)...+ %1 καταχώριση(εις)... - ExportDialog @@ -4531,7 +4110,7 @@ This will leave your passwords and sensitive information vulnerable! %n Entry(s) was used by %1 %1 is the name of an application - Η %n Καταχώρηση χρησιμοποιήθηκε από %1Οι %n Καταχωρήσεις χρησιμοποιήθηκαν από %1 + %n Καταχώρηση χρησιμοποιήθηκε από %1%n Καταχωρήσεις χρησιμοποιήθηκαν από %1 @@ -4553,7 +4132,7 @@ This will leave your passwords and sensitive information vulnerable! None - Κανένα + None @@ -4567,7 +4146,7 @@ This will leave your passwords and sensitive information vulnerable! FdoSecretsPlugin <b>Fdo Secret Service:</b> %1 - <b>Fdo Secret Service:</b> %1 + <b>Μυστική Υπηρεσία Fdo:</b> %1 @@ -4627,11 +4206,11 @@ You can enable the DuckDuckGo website icon service in the security section of th Ok - Ok + ΟΚ Already Exists - Υπάρχει ήδη + Υπάρχει Ήδη Download Failed @@ -4642,193 +4221,6 @@ You can enable the DuckDuckGo website icon service in the security section of th Λήψη favicons (%1/%2)... - - ImportWizard - - Import Wizard - Οδηγός Εισαγωγής - - - - ImportWizardPageReview - - WizardPage - Οδηγός Σελίδας - - - Entry count: %1 - - - - Group - Όμαδα - - - Title - Τίτλος - - - Username - Όνομα χρήστη - - - Password - Κωδικός - - - Url - Url - - - Could not load key file. - - - - Could not open remote database. Password or key file may be incorrect. - - - - - ImportWizardPageSelect - - Form - Μορφή - - - Import File Selection - - - - Password: - Κωδικός: - - - Key File: - Αρχείο κλειδί: - - - Browse… - Αναζήτηση... - - - Import Into: - - - - New Database - Νέα Βάση Δεδομένων - - - No unlocked databases available - - - - Existing Database: - - - - Import File: - - - - Comma Separated Values (.csv) - - - - 1Password Export (.1pux) - - - - 1Password Vault (.opvault) - - - - Bitwarden (.json) - - - - KeePass 1 Database (.kdb) - - - - Open OPVault - Άνοιγμα OPVault - - - Select import file - - - - All files - Όλα τα αρχεία - - - Key files - Αρχεία κλειδιά - - - Select key file - Επιλέξτε αρχείο κλειδί - - - Comma Separated Values - - - - 1Password Export - - - - Bitwarden JSON Export - - - - 1Password Vault - - - - KeePass1 Database - - - - Proton Pass (.json) - - - - Proton Pass JSON Export - - - - Temporary Database - - - - Command: - - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - - - - Input: - - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last commend `exit` has to be sent - - - - - Remote Database (.kdbx) - - - KMessageWidget @@ -4837,7 +4229,7 @@ The command has to exit. In case of `sftp` as last commend `exit` has to be sent Close message - Κλείσιμο μηνύματος + Κλείσιμο Μηνύματος @@ -4852,7 +4244,7 @@ The command has to exit. In case of `sftp` as last commend `exit` has to be sent Unable to issue challenge-response: %1 - Δεν είναι δυνατή η έκδοση challenge-response: %1 + Δεν είναι δυνατή η έκδοση Πρόκλησης-Απόκρισης: %1 Invalid credentials were provided, please try again. @@ -4862,11 +4254,11 @@ If this reoccurs, then your database file may be corrupt. Header doesn't match hash - Η κεφαλίδα δεν ταιριάζει με το hash + Η επικεφαλίδα δεν ταιριάζει με το hash Invalid header id size - Το μέγεθος αναγνωριστικού κεφαλίδας δεν είναι έγκυρο + Μη έγκυρο id μέγεθος επικεφαλίδας Invalid header field length: field %1 @@ -4886,7 +4278,7 @@ If this reoccurs, then your database file may be corrupt. Unable to issue challenge-response: %1 - Δεν είναι δυνατή η έκδοση challenge-response: %1 + Δεν είναι δυνατή η έκδοση Πρόκλησης-Απόκρισης: %1 Unable to calculate database key @@ -4897,7 +4289,7 @@ If this reoccurs, then your database file may be corrupt. Kdbx4Reader missing database headers - λείπουν κεφαλίδες βάσης δεδομένων + λείπουν επικεφαλίδες βάσης δεδομένων Unable to calculate database key: %1 @@ -4905,11 +4297,11 @@ If this reoccurs, then your database file may be corrupt. Invalid header checksum size - Το μέγεθος checksum της κεφαλίδας δεν είναι έγκυρο + Το μέγεθος του checksum επικεφαλίδας δεν είναι έγκυρο Header SHA256 mismatch - Αναντιστοιχία κεφαλίδας SHA256 + Αναντιστοιχία επικεφαλίδας SHA256 Invalid credentials were provided, please try again. @@ -4927,7 +4319,7 @@ If this reoccurs, then your database file may be corrupt. Invalid header id size - Το μέγεθος αναγνωριστικού κεφαλίδας δεν είναι έγκυρο + Μη έγκυρο id μέγεθος επικεφαλίδας Invalid header field length: field %1 @@ -4939,7 +4331,7 @@ If this reoccurs, then your database file may be corrupt. Failed to open buffer for KDF parameters in header - Απέτυχε το άνοιγμα του buffer για παραμέτρους KDF στην επικεφαλίδα + Απέτυχε το άνοιγμα του buffer για παραμέτρους KDF στην κεφαλίδα Unsupported key derivation function (KDF) or invalid parameters @@ -4968,47 +4360,47 @@ If this reoccurs, then your database file may be corrupt. Unsupported KeePass variant map version. Translation: variant map = data structure for storing meta data - Μη υποστηριζόμενη έκδοση δομής δεδομένων αποθήκευσης μεταδεδομένων KeePass. + Μη υποστηριζόμενη έκδοση δομής δεδομένων 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 δομής δεδομένων αποθήκευσης μεταδεδομένων + Μη έγκυρο μήκος τιμής καταχώρησης Bool δομής δεδομένων Invalid variant map Int32 entry value length Translation: variant map = data structure for storing meta data - Μη έγκυρο μήκος τιμής καταχώρησης Int32 δομής δεδομένων αποθήκευσης μεταδεδομένων + Μη έγκυρο μήκος τιμής καταχώρησης Int32 δομής δεδομένων Invalid variant map UInt32 entry value length Translation: variant map = data structure for storing meta data - Μη έγκυρο μήκος τιμής καταχώρησης UInt32 δομής δεδομένων αποθήκευσης μεταδεδομένων + Μη έγκυρο μήκος τιμής καταχώρησης UInt32 δομής δεδομένων Invalid variant map Int64 entry value length Translation: variant map = data structure for storing meta data - Μη έγκυρο μήκος τιμής καταχώρησης Int64 δομής δεδομένων αποθήκευσης μεταδεδομένων + Μη έγκυρο μήκος τιμής καταχώρησης Int64 δομής δεδομένων Invalid variant map UInt64 entry value length @@ -5075,7 +4467,7 @@ If this reoccurs, then your database file may be corrupt. Invalid transform seed size - Μη έγκυρο μέγεθος σπόρου μετασχηματισμού + Μη έγκυρο μέγεθος σπόρου μεταχσηματισμού Invalid transform rounds size @@ -5083,7 +4475,7 @@ If this reoccurs, then your database file may be corrupt. Invalid start bytes size - Μη έγκυρο μέγεθος byte έναρξης + Μη έγκυρο μέγεθος bytes έναρξης Invalid random stream id size @@ -5091,11 +4483,11 @@ If this reoccurs, then your database file may be corrupt. Invalid inner random stream cipher - Μη έγκυρο εσωτερικό κρυπτογράφημα τυχαίας ροής + Άκυρο εσωτερικό τυχαίο κρυπτογράφημα ροής Failed to read database file. - Αποτυχία ανάγνωσης αρχείου βάσης δεδομένων. + Η ανάγνωση του αρχείου βάσης δεδομένων απέτυχε. The selected file is an old KeePass 1 database (.kdb). @@ -5109,7 +4501,7 @@ This is a one-way migration. You won't be able to open the imported databas Not a KeePass database. - Δεν είναι μια βάση δεδομένων του KeePass. + Δεν είναι βάση δεδομένων KeePass. Unsupported KeePass 2 database version. @@ -5144,11 +4536,11 @@ Line %2, column %3 Multiple group elements - Πολλαπλά στοιχεία ομάδας + Πολλαπλά ομαδικά στοιχεία Null group uuid - Άκυρο uuid ομάδας + Μηδενική ομάδα uuid Invalid group icon number @@ -5168,7 +4560,7 @@ Line %2, column %3 Null DeleteObject uuid - Άκυρο uuid Διαγραφής Αντικειμένου + Κενό uuid ΔιαγραφήΑντικειμένου Missing DeletedObject uuid or time @@ -5176,7 +4568,7 @@ Line %2, column %3 Null entry uuid - Άκυρο uuid καταχώρησης + Κενή καταχώρηση uuid Invalid entry icon number @@ -5204,7 +4596,7 @@ Line %2, column %3 Entry binary key or value missing - Το δυαδικό κλειδί καταχώρησης λείπει + Λείπει δυαδικό κλειδί ή τιμή καταχώρησης Auto-type association window or sequence missing @@ -5212,15 +4604,15 @@ Line %2, column %3 Invalid bool value - Μη έγκυρη τιμή bool + Η τιμή bool δεν είναι έγκυρη Invalid date time value - Μη έγκυρη τιμή ώρας ημερομηνίας + Η τιμή ημερομηνίας ώρας δεν είναι έγκυρη Invalid color value - Μη έγκυρη τιμή χρώματος + Η τιμή χρώματος δεν είναι έγκυρη Invalid color rgb part @@ -5263,6 +4655,17 @@ Line %2, column %3 Απέτυχε το άνοιγμα ιδιωτικού κλειδιού + + KeePass1OpenWidget + + Import KeePass1 Database + Εισαγωγή Βάσης Δεδομένων KeePass1 + + + Unable to open the database. + Δεν είναι δυνατό να ανοίξει τη βάση δεδομένων. + + KeePass1Reader @@ -5374,7 +4777,7 @@ If this reoccurs, then your database file may be corrupt. Invalid group field type - Μη έγκυρος τύπος πεδίου ομάδας + Ο τύπος πεδίου ομάδας δεν είναι έγκυρος Missing group id or level @@ -5406,7 +4809,7 @@ If this reoccurs, then your database file may be corrupt. Invalid entry creation time field size - Μη έγκυρο μέγεθος πεδίου χρόνου δημιουργίας καταχώρησης + Το μέγεθος του πεδίου χρόνου δημιουργίας καταχώρησης δεν είναι έγκυρο Invalid entry modification time field size @@ -5461,7 +4864,7 @@ If this reoccurs, then your database file may be corrupt. Exported to - Εξαγωγή σε + Εξάγεται σε Synchronized with @@ -5491,11 +4894,11 @@ If this reoccurs, then your database file may be corrupt. KeyFileEditWidget Generate a new key file - Δημιουργία νέου αρχείου κλειδιού + Παραγωγή νέου αρχείου κλειδιού Generate - Δημιουργία + Παραγωγή Generate a new key file or choose an existing one to protect your database. @@ -5524,7 +4927,7 @@ If this reoccurs, then your database file may be corrupt. Error loading the key file '%1' Message: %2 - Σφάλμα κατά τη φόρτωση του αρχείου κλειδιού '%1' + Παρουσιάστηκε σφάλμα κατά τη φόρτωση του αρχείου κλειδιού '%1' Μήνυμα: %2 @@ -5619,6 +5022,10 @@ Are you sure you want to continue with this file? &Recent Databases &Πρόσφατες Βάσεις Δεδομένων + + &Import + &Εισαγωγή + &Export &Εξαγωγή @@ -5633,16 +5040,12 @@ Are you sure you want to continue with this file? Copy Att&ribute - Αντιγραφή Χαρα&κτηριστικών + Αντιγραφή Χαρακτηριστικών TOTP TOTP - - Tags - Ετικέτες - &Groups &Ομάδες @@ -5687,18 +5090,34 @@ Are you sure you want to continue with this file? &New Database… &Νέα Βάση Δεδομένων... + + Create a new database + Δημιουργία νέας βάσης δεδομένων + &Merge From Database… &Συγχώνευση από Βάση Δεδομένων... + + Merge from another KDBX database + Συγχώνευση από άλλη βάση δεδομένων KDBX + &New Entry… &Νέα Καταχώρηση... + + Add a new entry + Προσθήκη νέας καταχώρησης + &Edit Entry… &Επεξεργασία Καταχώρησης... + + View or edit entry + Προβολή ή επεξεργασία καταχώρησης + &Delete Entry… &Διαγραφή Καταχώρησης... @@ -5707,6 +5126,10 @@ Are you sure you want to continue with this file? &New Group… &Νέα Ομάδα... + + Add a new group + Προσθήκη νέας ομάδας + &Edit Group… &Επεξεργασία Ομάδας... @@ -5721,11 +5144,11 @@ Are you sure you want to continue with this file? Sort &A-Z - Ταξινόμηση &Α-Ω + Ταξινόμηση &Α-Ζ Sort &Z-A - Ταξινόμηση &Ω-Α + Ταξινόμηση &Ζ-Α Sa&ve Database As… @@ -5739,10 +5162,18 @@ Are you sure you want to continue with this file? Database &Reports… Αναφορές Βάσης Δεδομένων... + + Statistics, health check, etc. + Στατιστικά στοιχεία, έλεγχος υγείας κ.λπ. + &Database Settings… &Ρυθμίσεις Βάσης Δεδομένων... + + Database settings + Ρυθμίσεις βάσης δεδομένων + &Clone Entry… &Κλωνοποίηση Καταχώρησης... @@ -5751,18 +5182,34 @@ Are you sure you want to continue with this file? Move u&p Μετακίνηση επ&άνω + + Move entry one step up + Μετακίνηση καταχώρησης ένα βήμα προς τα επάνω + Move do&wn Μετακίνηση κά&τω + + Move entry one step down + Μετακίνηση καταχώρησης ένα βήμα προς τα κάτω + Copy &Username Αντιγραφή &Ονόματος χρήστη + + Copy username to clipboard + Αντιγραφή όνομα χρήστη στο πρόχειρο + Copy &Password Αντιγραφή &Κωδικού πρόσβασης + + Copy password to clipboard + Αντιγραφή κωδικού στο πρόχειρο + &Settings &Ρυθμίσεις @@ -5796,13 +5243,21 @@ Are you sure you want to continue with this file? &Τίτλος - Copy &URL - Αντιγραφή &URL + Copy title to clipboard + Αντιγραφή τίτλου στο πρόχειρο + + + Copy URL to clipboard + Αντιγραφή URL στο πρόχειρο &Notes &Σημειώσεις + + Copy notes to clipboard + Αντιγραφή σημειώσεων στο πρόχειρο + &CSV File… &Αρχείο CSV... @@ -5815,14 +5270,26 @@ Are you sure you want to continue with this file? KeePass 1 Database… Βάση δεδομένων KeePass 1... + + Import a KeePass 1 database + Εισαγωγή βάσης δεδομένων KeePass 1 + 1Password Vault… Κρύπτη 1Password... + + Import a 1Password Vault + Εισαγωγή Κρύπτης 1Password + CSV File… Αρχείο CSV... + + Import a CSV file + Εισαγωγή αρχείου CSV + Show TOTP Εμφάνιση TOTP @@ -5839,13 +5306,9 @@ Are you sure you want to continue with this file? Copy &TOTP Αντιγραφή &TOTP - - Copy Password and TOTP - Αντιγραφή Κωδικού πρόσβασης και TOTP - E&mpty recycle bin - Ά&δειασμα κάδου ανακύκλωσης + &Άδειασμα κάδου ανακύκλωσης &Donate @@ -5853,7 +5316,7 @@ Are you sure you want to continue with this file? Report a &Bug - Αναφορά &Σφάλματος + Αναφορά &Προβλήματος &Getting Started @@ -5861,11 +5324,15 @@ Are you sure you want to continue with this file? Open Getting Started Guide - Άνοιγμα Οδηγού Έναρξης + Ανοίξτε τον Οδηγό Έναρξης &Online Help - &Διαδικτυακή Βοήθεια + &Ηλεκτρονική Βοήθεια + + + Go to online documentation + Μεταβείτε στην διαδικτυακά έγγραφα &User Guide @@ -5911,10 +5378,6 @@ Are you sure you want to continue with this file? Classic (Platform-native) Κλασικό (εγγενής-Πλατφόρμα) - - Show Menubar - - Show Toolbar Εμφάνιση Γραμμής Εργαλείων @@ -5939,17 +5402,13 @@ Are you sure you want to continue with this file? Clone Group... Κλωνοποίηση Ομάδας... - - &XML File… - &XML Αρχείο… - Clear history - Εκκαθάριση ιστορικού + Καθαρισμός ιστορικού Access error for config file %1 - Σφάλμα πρόσβασης για το αρχείο config %1 + Σφάλματος πρόσβασης για αρχείο ρυθμίσεων %1 Don't show again for this version @@ -5970,8 +5429,10 @@ Expect some bugs and minor issues, this version is meant for testing purposes. - No Tags - Χωρίς Ετικέτες + 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 που είναι διαθέσιμο στη σελίδα λήψεων. Restore Entry(s) @@ -6001,10 +5462,6 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Quit KeePassXC Κλείσιμο KeePassXC - - %1 Entry(s) - % 1 Καταχώρηση(εις)% 1 Καταχώρηση(εις) - Please present or touch your YubiKey to continue… Παρακαλώ παρουσιάστε ή αγγίξτε το YubiKey για να συνεχίσετε… @@ -6017,314 +5474,38 @@ Expect some bugs and minor issues, this version is meant for testing purposes.You must restart the application to apply this setting. Would you like to restart now? Πρέπει να επανεκκινήσετε την εφαρμογή για να εφαρμόσετε αυτήν τη ρύθμιση. Θέλετε να κάνετε επανεκκίνηση τώρα; + + Tags + Ετικέτες + + + No Tags + Χωρίς Ετικέτες + + + %1 Entry(s) + % 1 Καταχώρηση(εις)% 1 Καταχώρηση(εις) + + + Copy Password and TOTP + Αντιγραφή Κωδικού πρόσβασης και TOTP + + + &XML File… + &XML Αρχείο… + + + XML File… + Αρχείο XML... + + + Copy &URL + Αντιγραφή &URL + Allow Screen Capture Να επιτρέπεται η Καταγραφή Οθόνης - - 1Password 1PUX... - - - - Import a 1Password 1PUX file - - - - Import… - - - - Passkeys… - Passkeys… - - - Import Passkey - Εισαγωγή Passkey - - - Remote S&ync… - - - - Quit Application - Έξοδος Εφαρμογής - - - Open About Dialog - Ανοίξτε το πλαίσιο διαλόγου Σχετικά με - - - Open Database - Άνοιγμα Βάσης Δεδομένων - - - Create Database - Δημιουργία Βάσης Δεδομένων - - - Merge From Database - Συγχώνευση από Βάση Δεδομένων - - - Create Entry - Δημιουργία Καταχώρησης - - - Edit Entry - Επεξεργασία καταχώρησης - - - Delete Entry - Διαγραφή Καταχώρησης - - - Create Group - Δημιουργία Ομάδας - - - Edit Group - Επεξεργασία Ομάδας - - - Delete Group - Διαγραφή Ομάδας - - - Download All Favicons - Λήψη όλων των Favicons - - - Sort Groups A-Z - Ταξινόμηση Ομάδων Α-Ω - - - Sort Groups Z-A - Ταξινόμηση Ομάδων Ω-Α - - - Save Database As - Αποθήκευση Βάσης Δεδομένων ως - - - Show Database Security - Εμφάνιση Ασφάλειας Βάσης Δεδομένων - - - Show Database Reports - Εμφάνιση Αναφορών Βάσης Δεδομένων - - - Show Database Settings - Εμφάνιση Ρυθμίσεων Βάσης Δεδομένων - - - Show Passkeys - Εμφάνιση Passkeys - - - Clone Entry - Κλωνοποίηση Καταχώρησης - - - Move Entry Up - Μετακίνηση Καταχώρησης Πάνω - - - Move Entry Down - Μετακίνηση Καταχώρησης Κάτω - - - Copy Username - Αντιγραφή Ονόματος χρήστη - - - Copy Password - Αντιγραφή Κωδικού πρόσβασης - - - Show Application Settings - Εμφάνιση Ρυθμίσεων Εφαρμογής - - - Show Password Generator - Εμφάνιση Γεννήτριας Κωδικών Πρόσβασης - - - Remove Passkey From Entry - - - - Perform Auto-Type: {USERNAME} - Εκτέλεση Αυτόματης-Πληκτρολόγησης: {USERNAME} - - - Perform Auto-Type: {USERNAME}{ENTER} - Εκτέλεση Αυτόματης-Πληκτρολόγησης: {USERNAME}{ENTER} - - - Perform Auto-Type: {PASSWORD} - Εκτέλεση Αυτόματης-Πληκτρολόγησης: {PASSWORD} - - - Perform Auto-Type: {PASSWORD}{ENTER} - Εκτέλεση Αυτόματης-Πληκτρολόγησης: {PASSWORD}{ENTER} - - - Perform Auto-Type: {TOTP} - Εκτέλεση Αυτόματης-Πληκτρολόγησης: {TOTP} - - - Copy Title - Αντιγραφή Τίτλου - - - Copy URL - Αντιγραφή URL - - - Copy Notes - Αντιγραφή Σημειώσεων - - - Export to CSV - Εξαγωγή σε CSV - - - Export to HTML - Εξαγωγή σε HTML - - - Import KeePass1 Database - Εισαγωγή Βάσης Δεδομένων KeePass1 - - - Import 1Password Vault - Εισαγωγή Κρύπτης 1Password - - - Import CSV File - Εισαγωγή Αρχείου CSV - - - Show TOTP QR Code - Εμφάνιση TOTP QR Code - - - Set up TOTP - Ρύθμιση TOTP - - - Empty Recycle Bin - Άδειασμα Κάδου Ανακύκλωσης - - - Open Donation Website - Ανοίξτε την Ιστοσελίδα Δωρεάς. - - - Open Bug Report - Ανοίξτε την Αναφορά Σφαλμάτων - - - Open Online Documentation - Ανοίξτε την Online Τεκμηρίωση. - - - Open Keyboard Shortcuts Guide - Ανοίξτε τον Οδηγό Συντομεύσεων Πληκτρολογίου - - - Save Database Backup - Αποθήκευση Αντιγράφου Ασφαλείας Βάσης Δεδομένων - - - SSH Agent: Add Key - SSH Agent: Προσθήκη Κλειδιού - - - SSH Agent: Remove Key - SSH Agent: Αφαίρεση Κλειδιού - - - Toggle Compact Mode - Εναλλαγή σε Λειτουργία Συμπαγούς Προβολής - - - Set Theme: Automatic - Εφαρμογή Θέματος: Αυτόματο - - - Set Theme: Light - Ορισμός Θέματος: Φωτεινό - - - Set Theme: Dark - Ορισμός Θέματος: Σκοτεινό - - - Set Theme: Classic - Ορίσμος Θέματος: Κλασικό - - - Toggle Show Menubar - - - - Toggle Show Toolbar - Εναλλαγή Εμφάνισης Εργαλειοθήκης - - - Toggle Show Preview Panel - Εναλλαγή Εμφάνισης Πίνακα Προεπισκόπησης - - - Toggle Always on Top - Εναλλαγή Πάντα σε Πρώτο Πλάνο - - - Toggle Hide Usernames - Εναλλαγή Απόκρυψη Ονομάτων Χρηστών - - - Toggle Hide Passwords - Εναλλαγή Απόκρυψης Κωδικών - - - Export to XML - Εξαγωγή σε XML - - - Toggle Allow Screen Capture - Εναλλαγή Επιτρεπόμενης Καταγραφής Οθόνης - - - Show Group Panel - - - - Toggle Show Group Panel - - - - Setup Remote Sync… - - - - Password Generator - Γεννήτρια Κωδικών - - - E&xpire Entry… - - - - Clear SSH Agent - - - - Clear all identities in ssh-agent - - ManageDatabase @@ -6382,6 +5563,26 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Overwriting %1 [%2] Αντικατάσταση %1 [%2] + + older entry merged from database "%1" + η παλαιότερη καταχώρηση συγχωνεύτηκε από τη βάση δεδομένων "%1" + + + Adding backup for older target %1 [%2] + Προσθήκη αντιγράφου ασφαλείας για παλαιότερο προορισμό %1 [%2] + + + Adding backup for older source %1 [%2] + Προσθήκη αντιγράφου ασφαλείας για παλαιότερη προέλευση %1 [%2] + + + Reapplying older target entry on top of newer source %1 [%2] + Επανεφαρμογή παλαιότερης καταχώρησης προορισμού πάνω από τη νεότερη προέλευση %1 [%2] + + + Reapplying older source entry on top of newer target %1 [%2] + Επανεφαρμογή παλαιότερου προορισμού καταχώρησης πάνω από τη νεότερη προέλευση %1 [%2] + Synchronizing from newer source %1 [%2] Συγχρονισμός από νεότερη προέλευση %1 [%2] @@ -6441,6 +5642,14 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. Εδώ μπορείτε να προσαρμόσετε τις ρυθμίσεις κρυπτογράφησης βάσης δεδομένων. Μην ανησυχείτε, μπορείτε να τις αλλάξετε αργότερα στις ρυθμίσεις της βάσης δεδομένων. + + Advanced Settings + Ρυθμίσεις για Προχωρημένους + + + Simple Settings + Απλές Ρυθμίσεις + NewDatabaseWizardPageDatabaseKey @@ -6475,25 +5684,6 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Συμπληρώστε το εμφανιζόμενο όνομα και μια προαιρετική περιγραφή για τη νέα σας βάση δεδομένων: - - NewEntryAttachmentsDialog - - Attachment name cannot be empty - - - - Attachment with the same name already exists - - - - Save attachment - Αποθήκευση συνημμένου - - - New entry attachment - - - NixUtils @@ -6517,7 +5707,7 @@ Expect some bugs and minor issues, this version is meant for testing purposes. Unable to read all IV bytes, wanted 16 but got %1 - Δεν είναι δυνατή η ανάγνωση όλων των bytes IV, ήθελε 16 αλλά πήρε %1 + Δεν είναι δυνατή η ανάγνωση όλων των byte IV, ήθελε 16 αλλά πήρε %1 Unable to init cipher for opdata01: %1 @@ -6540,6 +5730,15 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Αναμενόταν %1 bytes καθαρού κειμένου, βρέθηκαν %2 + + OpVaultOpenWidget + + Read Database did not produce an instance +%1 + Η ανάγνωση της βάσης δεδομένων δεν παρήγαγε μια παρουσία +%1 + + OpVaultReader @@ -6552,7 +5751,7 @@ Expect some bugs and minor issues, this version is meant for testing purposes. Directory .opvault/default must exist - Ο κατάλογος .opvault/default πρέπει να υπάρχει + Πρέπει να υπάρχει κατάλογος .opvault/προεπιλογή Directory .opvault/default must be readable @@ -6613,10 +5812,6 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Unknown cipher: %1 Άγνωστο κρυπτογράφημα: %1 - - AES-256/GCM is currently not supported - Το AES-256/GCM δεν υποστηρίζεται αυτήν τη στιγμή - Passphrase is required to decrypt this key Απαιτείται φράση πρόσβασης για την αποκρυπτογράφηση αυτού του κλειδιού @@ -6682,188 +5877,15 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Μη αναμενόμενο EOF κατά τη σύνταξη ιδιωτικού κλειδιού - (encrypted) - (κρυπτογραφημένο) - - - - OpenSSHKeyGenDialog - - SSH Key Generator - Γεννήτρια Κλειδιών SSH - - - Type - Τύπος - - - Bits - Bits - - - Comment - Σχόλιο - - - - PasskeyExportDialog - - KeePassXC - Passkey Export - KeePassXC - Εξαγωγή Passkey - - - Filenames will be generated with title and .passkey file extension. - Τα ονόματα αρχείων θα δημιουργηθούν με τίτλο και επέκταση αρχείου .passkey. - - - Export entries - Εξαγωγή καταχωρήσεων - - - Export Selected - Εξαγωγή Επιλεγμένων - - - Cancel - Άκυρο - - - Export to folder - Εξαγωγή σε φάκελο - - - Export the following passkey entries. - - - - - PasskeyExporter - - KeePassXC: Passkey Export - KeePassXC: Εξαγωγή Passkey - - - File "%1.passkey" already exists. -Do you want to overwrite it? - - Το αρχείο "%1.passkey" υπάρχει ήδη. -Θέλετε να το αντικαταστήσετε; - - - - Cannot open file - Δεν είναι δυνατό το άνοιγμα του αρχείου - - - Cannot open file "%1" for writing. - Δεν είναι δυνατό το άνοιγμα του αρχείου "%1" για εγγραφή. - - - Cannot write to file - Δεν είναι δυνατή η εγγραφή στο αρχείο - - - - PasskeyImportDialog - - KeePassXC - Passkey Import - KeePassXC - Εισαγωγή Passkey - - - Username: %1 - Όνομα χρήστη: %1 - - - Group - Όμαδα - - - Database - Βάση Δεδομένων - - - Import Passkey - Εισαγωγή Passkey - - - Import - Εισαγωγή - - - Cancel - Άκυρο - - - Entry - Καταχώρηση - - - Create new entry - Δημιουργία νέας καταχώρησης - - - Relying Party: %1 - Στηριζόμενο Party: %1 - - - Import the following passkey: - - - - Import the following passkey to this entry: - - - - Default passkeys group (Imported Passkeys) - - - - - PasskeyImporter - - Passkey file - Αρχείο Passkey - - - All files - Όλα τα αρχεία - - - Cannot open file - Δεν είναι δυνατό το άνοιγμα του αρχείου - - - Cannot open file "%1" for reading. - Δεν είναι δυνατό το άνοιγμα του αρχείου "%1" για ανάγνωση. - - - Open passkey file - - - - Cannot import passkey - - - - Cannot import passkey file "%1". Data is missing. - - - - Cannot import passkey file "%1". -The following data is missing: -%2 - - - - Cannot import passkey file "%1". Private key is missing or malformed. - + AES-256/GCM is currently not supported + Το AES-256/GCM δεν υποστηρίζεται αυτήν τη στιγμή PasswordEditWidget Enter password: - Εισάγετε τον κωδικό πρόσβασης: + Εισάγετε κωδικό: Password field @@ -6879,7 +5901,7 @@ The following data is missing: Password - Κωδικός πρόσβασης + Κωδικός Add Password @@ -6935,11 +5957,11 @@ The following data is missing: Copy password - Αντιγραφή κωδικού πρόσβασης + Αντιγραφή κωδικού Password - Κωδικός πρόσβασης + Κωδικός &Length: @@ -6959,7 +5981,7 @@ The following data is missing: Character Types - Τύποι Χαρακτήρων + Τύποι χαρακτήρων Special characters @@ -6995,7 +6017,7 @@ The following data is missing: Extended ASCII - Εκτεταμένος ASCII + Extended ASCII Braces @@ -7007,7 +6029,7 @@ The following data is missing: Additional characters to use for the generated password - Πρόσθετοι χαρακτήρες που θα χρησιμοποιηθούν για την δημιουργία κωδικού πρόσβασης + Πρόσθετοι χαρακτήρες που θα χρησιμοποιηθούν για τον κωδικό πρόσβασης που δημιουργήθηκε Additional characters @@ -7039,7 +6061,7 @@ The following data is missing: Exclude look-alike characters - Εξαίρεση παρόμοιων χαρακτήρων + Εξαίρεση χαρακτήρων που μοίαζουν Pick characters from every group @@ -7047,7 +6069,7 @@ The following data is missing: Passphrase - Φράση πρόσβασης + Φράση Κλειδί Word Separator: @@ -7061,9 +6083,13 @@ The following data is missing: Word Count: Αριθμός Λέξεων: + + Character Count: + Αριθμός Χαρακτήρων: + Word Case: - Κουτί Λέξεων: + Περίπτωση Λέξης: Delete selected wordlist @@ -7073,6 +6099,10 @@ The following data is missing: Add custom wordlist Προσθήκη προσαρμοσμένης λίστας λέξεων + + character + χαρακτήρας + Close Κλείσιμο @@ -7091,7 +6121,7 @@ The following data is missing: lower case - πεζά + μικρά UPPER CASE @@ -7109,30 +6139,6 @@ The following data is missing: Entropy: %1 bit Εντροπία: %1 bit - - Password Quality: %1 - Ποιότητα Κωδικού Πρόσβασης: %1 - - - Poor - Password quality - Φτωχός - - - Weak - Password quality - Αδύναμη - - - Good - Password quality - Καλή - - - Excellent - Password quality - Εξαιρετική - Confirm Delete Wordlist Επιβεβαίωση διαγραφής λίστας λέξεων @@ -7180,20 +6186,32 @@ Do you want to overwrite it? Ειδικοί χαρακτήρες - passwordLength - + Password Quality: %1 + Ποιότητα κωδικού: %1 - Characters: %1 - + Poor + Password quality + Φτωχή - MIXED case - + Weak + Password quality + Αδύναμη - Excluded characters: "0", "1", "l", "I", "O", "|", "﹒", "B", "8", "G", "6" - + Good + Password quality + Καλή + + + Excellent + Password quality + Εξαιρετική + + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + Εξαιρούμενοι χαρακτήρες: "0", "1", "l", "I", "O", "|", ".". @@ -7243,8 +6261,8 @@ Do you want to overwrite it? Εξαιρετική - Toggle password visibility using Control + H. Open the password generator using Control + G. - Ενεργοποίηση ορατότητας κωδικού πρόσβασης χρησιμοποιώντας τον συνδυασμό πλήκτρων Control + H. Άνοιγμα της γεννήτριας κωδικών πρόσβασης χρησιμοποιώντας τον συνδυασμό πλήκτρων Control + G. + Toggle password visibilty using Control + H. Open the password generator using Control + G. + Εναλλαγή ορατότητας κωδικού πρόσβασης χρησιμοποιώντας Control + H. Ανοίξτε τη γεννήτρια κωδικών πρόσβασης χρησιμοποιώντας Control + G. @@ -7262,21 +6280,6 @@ Do you want to overwrite it? Πατήστε το πλήκτρο &Τab μεταξύ χαρακτήρων - - PreviewEntryAttachmentsDialog - - Preview entry attachment - - - - No preview available - - - - Image format not supported - - - QMessageBox @@ -7293,11 +6296,11 @@ Do you want to overwrite it? Empty - Κενό + Άδειο Remove - Κατάργηση + Αφαίρεση Skip @@ -7315,10 +6318,6 @@ Do you want to overwrite it? Continue Συνέχεια - - Continue with weak password - Συνέχεια με αδύναμο κωδικό πρόσβασης - QObject @@ -7328,7 +6327,7 @@ Do you want to overwrite it? Database hash not available - To hash της βάσης δεδομένων δεν είναι διαθέσιμο + To hash βάσης δεδομένων δεν είναι διαθέσιμο Client public key not received @@ -7388,7 +6387,7 @@ Do you want to overwrite it? Browser Integration - Ενσωμάτωση Περιηγητή + Ενσωμάτωση Προγράμματος Περιήγησης Browser Plugin Failure @@ -7396,7 +6395,7 @@ Do you want to overwrite it? Could not save the native messaging script file for %1. - Δεν ήταν δυνατή η αποθήκευση του εγγενούς αρχείου script μηνυμάτων για το %1. + Δεν ήταν δυνατή η αποθήκευση του εγγενούς αρχείου script μηνυμάτων για %1. Username for the entry. @@ -7484,7 +6483,7 @@ Do you want to overwrite it? FILENAME - ΟΝΟΜΑ ΑΡΧΕΙΟΥ + ΌΝΟΜΑ ΑΡΧΕΙΟΥ Path to okon-cli to search a formatted HIBP file @@ -7516,7 +6515,7 @@ Do you want to overwrite it? Password for '%1' has been leaked %2 time(s)! - Ο κωδικός πρόσβασης για το '%1' έχει διαρρεύσει %2 φορά!Ο κωδικός πρόσβασης για το '%1' έχει διαρρεύσει %2 φορές! + Ο κωδικός πρόσβασης για το '%1' έχει διαρρεύσει %2 φορά!Ο κωδικός πρόσβασης για '%1' έχει διαρρεύσει %2 φορές! Password for '%1' has been leaked! @@ -7666,7 +6665,7 @@ Do you want to overwrite it? Clearing the clipboard in %1 second(s)... - Εκκαθάριση του προχείρου σε %1 δευτερόλεπτο...Εκκαθάριση του πρόχειρου σε %1 δευτερόλεπτα ... + Εκκαθάριση του πρόχειρου σε %1 δευτερόλεπτο...Εκκαθάριση του πρόχειρου σε %1 δευτερόλεπτα... Clipboard cleared! @@ -7698,11 +6697,11 @@ Do you want to overwrite it? Yubikey slot and optional serial used to access the database (e.g., 1:7370001). - Υποδοχή Yubikey και προαιρετικός σειριακός αριθμός που χρησιμοποιείται για πρόσβαση στη βάση δεδομένων (π.χ. 1:7370001). + Υποδοχή Yubikey και προαιρετική σειριακή συσκευή που χρησιμοποιείται για πρόσβαση στη βάση δεδομένων (π.χ. 1:7370001). slot[:serial] - υποδοχή[:σειριακός αριθμός] + υποδοχή[:σειριακή] Missing positional argument(s). @@ -7712,13 +6711,9 @@ Do you want to overwrite it? Too many arguments provided. Παρέχονται πάρα πολλά επιχειρήματα. - - Path of the database. - Διαδρομή της βάσης δεδομένων. - Target decryption time in MS for the database. - Χρόνος αποκρυπτογράφησης προορισμού σε MS για τη βάση δεδομένων. + Χρόνος αποκρυπτογράφησης προορισμού σε Χιλιοστό του Δευτερολέπτου για τη βάση δεδομένων. time @@ -7736,9 +6731,13 @@ Do you want to overwrite it? Create a new database. Δημιουργία νέας βάσης δεδομένων. + + Path of the database. + Διαδρομή της βάσης δεδομένων. + Invalid decryption time %1. - Μη έγκυρος χρόνος αποκρυπτογράφησης %1. + Ο χρόνος αποκρυπτογράφησης %1 δεν είναι έγκυρος. Target decryption time must be between %1 and %2. @@ -7758,7 +6757,7 @@ Do you want to overwrite it? Benchmarking key derivation function for %1ms delay. - Benchmarking συνάρτησης παραγωγής κλειδιού για καθυστέρηση %1 ms. + Συγκριτική αξιολόγηση συνάρτησης παραγωγής κλειδιού για καθυστέρηση %1ms. Setting %1 rounds for key derivation function. @@ -7766,7 +6765,7 @@ Do you want to overwrite it? error while setting database key derivation settings. - σφάλμα κατά τη ρύθμιση παραμέτρων συνάρτησης παραγωγής κλειδιού βάσης δεδομένων βάσης δεδομένων. + σφάλμα κατά τη ρύθμιση των παραμέτρων κλειδιών βάσης δεδομένων βάσης δεδομένων. File %1 already exists. @@ -7774,163 +6773,11 @@ Do you want to overwrite it? Failed to save the database: %1. - Αποτυχία αποθήκευσης της βάσης δεδομένων: %1 + Αποτυχία αποθήκευσης της βάσης δεδομένων: %1. Successfully created new database. - Επιτυχής δημιουργία βάσης δεδομένων. - - - Unset the password for the database. - Καταργήστε τον κωδικό πρόσβασης για τη βάση δεδομένων. - - - Unset the key file for the database. - Καταργήστε τη ρύθμιση του αρχείου κλειδιού για τη βάση δεδομένων. - - - Edit a database. - Επεξεργαστείτε μια βάση δεδομένων. - - - Cannot use %1 and %2 at the same time. - Δεν είναι δυνατή η ταυτόχρονη χρήση %1 και %2. - - - Could not change the database key. - Δεν ήταν δυνατή η αλλαγή του κλειδιού βάσης δεδομένων. - - - Database was not modified. - Η βάση δεδομένων δεν τροποποιήθηκε. - - - Writing the database failed: %1 - Η εγγραφή της βάσης δεδομένων απέτυχε: %1 - - - Successfully edited the database. - Έγινε επιτυχής επεξεργασία της βάσης δεδομένων. - - - Cannot remove password: The database does not have a password. - Δεν είναι δυνατή η αφαίρεση κωδικού πρόσβασης: Η βάση δεδομένων δεν έχει κωδικό πρόσβασης. - - - Cannot remove file key: The database does not have a file key. - Δεν είναι δυνατή η αφαίρεση του κλειδιού αρχείου: Η βάση δεδομένων δεν διαθέτει κλειδί αρχείου. - - - Loading the new key file failed: %1 - Η φόρτωση του νέου αρχείου κλειδιού απέτυχε: %1 - - - Found unexpected Key type %1 - Βρέθηκε μη αναμενόμενος τύπος κλειδιού %1 - - - Cannot remove all the keys from a database. - Δεν είναι δυνατή η κατάργηση όλων των κλειδιών από μια βάση δεδομένων. - - - Show a database's information. - Εμφάνιση των πληροφοριών μιας βάσης δεδομένων. - - - UUID: - UUID: - - - Name: - Όνομα: - - - Description: - Περιγραφή: - - - Cipher: - Κρυπτογράφημα: - - - KDF: - KDF: - - - Recycle bin is enabled. - Ο Κάδος Ανακύκλωσης είναι ενεργοποιημένος. - - - Recycle bin is not enabled. - Ο Κάδος Ανακύκλωσης δεν είναι ενεργοποιημένος. - - - Location - Τοποθεσία - - - Database created - Δημιουργήθηκε βάση δεδομένων - - - Last saved - Τελευταία αποθήκευση - - - Unsaved changes - Μη αποθηκευμένες αλλαγές - - - yes - ναι - - - no - όχι - - - Number of groups - Αριθμός ομάδων - - - Number of entries - Αριθμός καταχωρήσεων - - - Number of expired entries - Αριθμός καταχωρήσεων που έχουν λήξει - - - Unique passwords - Μοναδικοί κωδικοί πρόσβασης - - - Non-unique passwords - Μη μοναδικοί κωδικοί πρόσβασης - - - Maximum password reuse - Μέγιστη επαναχρησιμοποίηση κωδικού πρόσβασης - - - Number of short passwords - Αριθμός μικρών κωδικών πρόσβασης - - - Number of weak passwords - Αριθμός αδύναμων κωδικών πρόσβασης - - - Entries excluded from reports - Καταχωρήσεις που εξαιρούνται από τις αναφορές - - - Average password length - Μέσο μήκος κωδικού πρόσβασης - - - %1 characters - %1 χαρακτήρες + Η δημιουργία νέας βάσης δεδομένων ολοκληρώθηκε με επιτυχία. Word count for the diceware passphrase. @@ -7949,12 +6796,16 @@ Do you want to overwrite it? Generate a new random diceware passphrase. - Δημιουργήστε μια νέα τυχαία φράση πρόσβασης diceware. + Δημιουργήστε μια νέα τυχαία φράση κλειδί diceware. Invalid word count %1 Μη έγκυρος αριθμός λέξεων %1 + + The word list is too small (< 1000 items) + Η λίστα λέξεων είναι πολύ μικρή (< 1000 στοιχεία) + Title for the entry. Τίτλος για την καταχώρηση. @@ -7965,7 +6816,7 @@ Do you want to overwrite it? Edit an entry. - Επεξεργασία μιας καταχώρησης. + Επεξεργαστείτε μια καταχώρηση. Path of the entry to edit. @@ -7979,6 +6830,10 @@ Do you want to overwrite it? Enter new password for entry: Εισαγάγετε νέο κωδικό πρόσβασης για καταχώρηση: + + Writing the database failed: %1 + Η εγγραφή της βάσης δεδομένων απέτυχε: %1 + Successfully edited entry %1. Η καταχώριση %1 επεξεργάστηκε με επιτυχία. @@ -8099,6 +6954,10 @@ Do you want to overwrite it? Exit interactive mode. Έξοδος από διαδραστική λειτουργία. + + Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. + Μορφή για χρήση κατά την εξαγωγή. Οι διαθέσιμες επιλογές είναι «xml» ή «csv». Προεπιλογή σε "xml". + Exports the content of a database to standard output in the specified format. Εξάγει το περιεχόμενο μιας βάσης δεδομένων σε τυπική έξοδο στην καθορισμένη μορφή. @@ -8153,7 +7012,7 @@ Do you want to overwrite it? Exclude similar looking characters - Εξαίρεση παρόμοιων χαρακτήρων + Εξαίρεση παρόμοιων χαρακτήρων εμφάνισης Include characters from every selected group @@ -8165,7 +7024,7 @@ Do you want to overwrite it? Invalid password length %1 - Το μήκος του κωδικού πρόσβασης %1 δεν είναι έγκυρο + Μη έγκυρο μήκος κωδικού %1 Invalid password generator after applying all options @@ -8199,6 +7058,106 @@ Do you want to overwrite it? Successfully imported database. Επιτυχής εισαγωγή βάσης δεδομένων. + + Show a database's information. + Εμφάνιση των πληροφοριών μιας βάσης δεδομένων. + + + UUID: + UUID: + + + Name: + Όνομα: + + + Description: + Περιγραφή: + + + Cipher: + Κρυπτογράφημα: + + + KDF: + KDF: + + + Recycle bin is enabled. + Ο Κάδος Ανακύκλωσης είναι ενεργοποιημένος. + + + Recycle bin is not enabled. + Ο Κάδος Ανακύκλωσης δεν είναι ενεργοποιημένος. + + + Location + Τοποθεσία + + + Database created + Δημιουργήθηκε βάση δεδομένων + + + Last saved + Τελευταία αποθήκευση + + + Unsaved changes + Μη αποθηκευμένες αλλαγές + + + yes + ναι + + + no + όχι + + + Number of groups + Αριθμός ομάδων + + + Number of entries + Αριθμός καταχωρήσεων + + + Number of expired entries + Αριθμός καταχωρήσεων που έχουν λήξει + + + Unique passwords + Μοναδικοί κωδικοί πρόσβασης + + + Non-unique passwords + Μη μοναδικοί κωδικοί πρόσβασης + + + Maximum password reuse + Μέγιστη επαναχρησιμοποίηση κωδικού πρόσβασης + + + Number of short passwords + Αριθμός μικρών κωδικών πρόσβασης + + + Number of weak passwords + Αριθμός αδύναμων κωδικών πρόσβασης + + + Entries excluded from reports + Καταχωρήσεις που εξαιρούνται από τις αναφορές + + + Average password length + Μέσο μήκος κωδικού πρόσβασης + + + %1 characters + %1 χαρακτήρες + Unknown command %1 Άγνωστη εντολή %1 @@ -8219,7 +7178,7 @@ Available commands: Displays debugging information. - Εμφανίζει πληροφορίες αποσφαλμάτωσης. + Εμφανίζει πληροφορίες debugging. Invalid command %1. @@ -8235,7 +7194,7 @@ Available commands: List database entries. - Λίστα καταχωρίσεων βάσης δεδομένων. + Προβολή καταχωρίσεων βάσης δεδομένων. Path of the group to list. Default is / @@ -8325,7 +7284,7 @@ Available commands: Path of the entry to remove. - Διαδρομή της καταχώρησης για κατάργηση. + Διαδρομή της καταχώρησης προς κατάργηση. Unable to save database to file: %1 @@ -8333,7 +7292,7 @@ Available commands: Successfully recycled entry %1. - Η καταχώρηση %1 ανακυκλώθηκε με επιτυχία. + Η καταχώρηση ανακυκλώθηκε με επιτυχία %1. Successfully deleted entry %1. @@ -8371,10 +7330,6 @@ Available commands: Show the protected attributes in clear text. Εμφάνιση των προστατευμένων χαρακτηριστικών σε καθαρό κείμενο. - - Show all the attributes of the entry. - Εμφάνιση όλων των χαρακτηριστικών της καταχώρησης. - Show the attachments of the entry. Εμφάνιση των συνημμένων της καταχώρησης. @@ -8393,7 +7348,7 @@ Available commands: Name of the entry to show. - Όνομα της καταχώρησης προς εμφάνιση. + Όνομα καταχώρησης προς προβολή. ERROR: unknown attribute %1. @@ -8421,7 +7376,7 @@ Available commands: Enter password to unlock %1: - Εισαγάγετε κωδικό πρόσβασης για να ξεκλείδωμα %1: + Πληκτρολογήστε κωδικό πρόσβασης για να ξεκλειδώσετε το %1: Failed to load key file %1: %2 @@ -8435,7 +7390,7 @@ Please consider generating a new key file. ΠΡΟΕΙΔΟΠΟΙΗΣΗ: Χρησιμοποιείτε μια παλιά μορφή αρχείου κλειδιού, την οποία το KeePassXC μπορεί να σταματήσει να υποστηρίζει στο μέλλον. -Σκεφτείτε το ενδεχόμενο να δημιουργήσετε ένα νέο αρχείο κλειδί. +Εξετάστε το ενδεχόμενο δημιουργίας ενός νέου αρχείου κλειδιού. Invalid YubiKey slot %1 @@ -8445,17 +7400,13 @@ Please consider generating a new key file. Invalid YubiKey serial %1 Μη έγκυρος σειριακός αριθμός YubiKey %1 - - Please present or touch your YubiKey to continue. - Παρακαλώ παρουσιάστε ή αγγίξτε το YubiKey για να συνεχίσετε. - Enter password to encrypt database (optional): Εισαγάγετε κωδικό πρόσβασης για την κρυπτογράφηση της βάσης δεδομένων (προαιρετικά): Do you want to create a database with an empty password? [y/N]: - Θέλετε να δημιουργήσετε μια βάση δεδομένων με κενό κωδικό πρόσβασης; [Ναι/Όχι]: + Θέλετε να δημιουργήσετε μια βάση δεδομένων με κενό κωδικό πρόσβασης; [ν/Ν]: Repeat password: @@ -8472,8 +7423,7 @@ Please consider generating a new key file. All clipping programs failed. Tried %1 - Όλα τα προγράμματα αποκοπής απέτυχαν. Δοκιμάσατε το %1 - + Όλα τα προγράμματα αποκοπής απέτυχαν. Δοκιμάσατε το %1 Creating KeyFile %1 failed: %2 @@ -8553,11 +7503,11 @@ Please consider generating a new key file. Build Type: %1 - Τύπος Κατασκευής: %1 + Τύπος build: %1 Revision: %1 - Διασκευή: %1 + Αναθεώρηση: %1 Distribution: %1 @@ -8565,11 +7515,11 @@ Please consider generating a new key file. Debugging mode is disabled. - Η λειτουργία αποσφαλμάτωσης είναι απενεργοποιημένη. + Η λειτουργία debugging είναι απενεργοποιημένη. Debugging mode is enabled. - Η λειτουργία αποσφαλμάτωσης είναι ενεργοποιημένη. + Η λειτουργία debugging είναι ενεργοποιημένη. Operating system: %1 @@ -8581,11 +7531,11 @@ Kernel: %3 %4 Auto-Type - Αυτόματη Πληκτρολόγηση + Αυτόματη-Γραφή SSH Agent - SSH Agent + πράκτορας SSH KeeShare @@ -8605,7 +7555,7 @@ Kernel: %3 %4 None - Κανένα + None Enabled extensions: @@ -8687,6 +7637,18 @@ Kernel: %3 %4 file empty κενό αρχείο + + malformed string + παραμορφωμένο string + + + missing closing quote + Λείπει το τελείωμα αποσπάσματος + + + %1: (row, col) %2,%3 + %1: (γραμμή, στήλη) %2,%3 + AES 256-bit AES 256-bit @@ -8717,15 +7679,15 @@ Kernel: %3 %4 Existing single-instance lock file is invalid. Launching new instance. - Το υπάρχον αρχείο κλειδώματος μεμονωμένης διεργασίας δεν είναι έγκυρο. Εκκίνηση νέας διεργασία. + Το υπάρχον αρχείο κλειδώματος μεμονωμένης παρουσίας δεν είναι έγκυρο. Εκκίνηση νέας παρουσίας. The lock file could not be created. Single-instance mode disabled. - Δεν ήταν δυνατή η δημιουργία του αρχείου κλειδώματος. Η λειτουργία μεμονωμένης διεργασίας απενεργοποιήθηκε. + Δεν ήταν δυνατή η δημιουργία του αρχείου κλειδώματος. Η λειτουργία μίας παρουσίας απενεργοποιήθηκε. Clearing the clipboard in %1 second(s)… - Εκκαθάριση του πρόχειρου σε %1 δευτερόλεπτοΕκκαθάριση του πρόχειρου σε %1 δευτερόλεπτα + Εκκαθάριση του πρόχειρου σε %1 δευτερόλεπτο…Εκκαθάριση του πρόχειρου σε %1 δευτερόλεπτα… Group @@ -8771,7 +7733,7 @@ Kernel: %3 %4 %1 s seconds - %1 δευτερόλεπτο%1 δευτερόλεπτα + %1 s%1 s Do you really want to delete the entry "%1" for good? @@ -8843,11 +7805,11 @@ Kernel: %3 %4 filenames of the password databases to open (*.kdbx) - ονόματα αρχείων των βάσεων δεδομένων κωδικών πρόσβασης για άνοιγμα (*.kdbx) + ονόματα αρχείων των βάσεων δεδομένων κωδικών προς άνοιγμα (*.kdbx) path to a custom config file - διαδρομή σε προσαρμοσμένο αρχείο config + διαδρομή σε προσαρμοσμένο αρχείο ρυθμίσεων path to a custom local config file @@ -8859,11 +7821,19 @@ Kernel: %3 %4 key file of the database - αρχείο κλειδί της βάσης δεδομένων + Αρχείο κλειδί της βάσεως δεδομένων read password of the database from stdin - διαβάστε τον κωδικό πρόσβασης της βάσης δεδομένων από το stdin + Διάβασμα κωδικού βάσης από το stdin + + + allow app screen recordering and screenshots + Να επιτρέπεται η εγγραφή οθόνης εφαρμογών και τα στιγμιότυπα οθόνης + + + Locked databases. + Κλειδωμένες βάσεις δεδομένων. Database failed to lock. @@ -8873,13 +7843,9 @@ Kernel: %3 %4 Another instance of KeePassXC is already running. Μία άλλη διεργασία του KeePassXC εκτελείται ήδη. - - KeePassXC is not running. No open database to lock - Το KeePassXC δεν εκτελείται. Δεν υπάρχει ανοιχτή βάση δεδομένων για κλείδωμα - Fatal error while testing the cryptographic functions. - Ανεπανόρθωτο σφάλμα κατά τον έλεγχο των κρυπτογραφικών συναρτήσεων. + Ανεπανόρθωτο σφάλμα κατά τον έλεγχο των κρυπτογραφικών λειτουργιών. KeePassXC - Error @@ -8920,299 +7886,70 @@ Kernel: %3 %4 Μη έγκυρο KDF - Access to all entries is denied - Η πρόσβαση σε όλες τις καταχωρήσεις απαγορεύεται + Please present or touch your YubiKey to continue. + Παρακαλώ παρουσιάστε ή αγγίξτε το YubiKey για να συνεχίσετε. - allow screenshots and app recording (Windows/macOS) - να επιτρέπονται στιγμιότυπα οθόνης και εφαρμογές εγγραφής (Windows/macOS) + Show all the attributes of the entry. + Εμφάνιση όλων των χαρακτηριστικών της καταχώρησης. + + + Edit a database. + Επεξεργαστείτε μια βάση δεδομένων. + + + Could not change the database key. + Δεν ήταν δυνατή η αλλαγή του κλειδιού βάσης δεδομένων. + + + Database was not modified. + Η βάση δεδομένων δεν τροποποιήθηκε. + + + Successfully edited the database. + Έγινε επιτυχής επεξεργασία της βάσης δεδομένων. + + + Loading the new key file failed: %1 + Η φόρτωση του νέου αρχείου κλειδιού απέτυχε: %1 + + + Unset the password for the database. + Καταργήστε τον κωδικό πρόσβασης για τη βάση δεδομένων. + + + Unset the key file for the database. + Καταργήστε τη ρύθμιση του αρχείου κλειδιού για τη βάση δεδομένων. + + + Cannot use %1 and %2 at the same time. + Δεν είναι δυνατή η ταυτόχρονη χρήση %1 και %2. + + + Cannot remove all the keys from a database. + Δεν είναι δυνατή η κατάργηση όλων των κλειδιών από μια βάση δεδομένων. + + + Cannot remove password: The database does not have a password. + Δεν είναι δυνατή η αφαίρεση κωδικού πρόσβασης: Η βάση δεδομένων δεν έχει κωδικό πρόσβασης. + + + Cannot remove file key: The database does not have a file key. + Δεν είναι δυνατή η αφαίρεση του κλειδιού αρχείου: Η βάση δεδομένων δεν διαθέτει κλειδί αρχείου. + + + Found unexpected Key type %1 + Βρέθηκε μη αναμενόμενος τύπος κλειδιού %1 Set the key file for the database. -This option is deprecated, use --set-key-file instead. - +This options is deprecated, use --set-key-file instead. + Ορίστε το αρχείο κλειδιού για τη βάση δεδομένων. +Αυτή η επιλογή έχει καταργηθεί, χρησιμοποιήστε τον --ορισμό-αρχειού-κλειδιού. - Databases have been locked. - - - - Attestation not supported - Η πιστοποίηση δεν υποστηρίζεται - - - Credential is excluded - Τα διαπιστευτήρια εξαιρούνται - - - Passkeys request canceled - Το αίτημα Passkeys ακυρώθηκε - - - Invalid user verification - Μη έγκυρη επαλήθευση χρήστη - - - Empty public key - Κενό δημόσιο κλειδί - - - Invalid URL provided - Παρέχεται μη έγκυρη διεύθυνση URL - - - Passkeys - Passkeys - - - AES initialization failed - Η προετοιμασία του AES απέτυχε - - - AES encrypt failed - Η κρυπτογράφηση AES απέτυχε - - - Failed to store in Linux Keyring - Αποτυχία αποθήκευσης στο Linux Keyring - - - Polkit returned an error: %1 - Το Polkit επέστρεψε σφάλμα: %1 - - - Could not locate key in keyring - Δεν ήταν δυνατός ο εντοπισμός κλειδιού στο keyring - - - Could not read key in keyring - Δεν ήταν δυνατή η ανάγνωση του κλειδιού στο keyring - - - AES decrypt failed - Η αποκρυπτογράφηση AES απέτυχε - - - No Polkit authentication agent was available - Δεν υπήρχε διαθέσιμος παράγοντας ελέγχου ταυτότητας Polkit - - - Polkit authorization failed - Η εξουσιοδότηση Polkit απέτυχε - - - No Quick Unlock provider is available - Δεν υπάρχει διαθέσιμη υπηρεσία παροχής Γρήγορου Ξεκλειδώματος - - - Failed to init KeePassXC crypto. - Αποτυχία εκκίνησης κρυπτογράφησης KeePassXC. - - - Failed to encrypt key data. - Αποτυχία κρυπτογράφησης βασικών δεδομένων. - - - Failed to get Windows Hello credential. - Αποτυχία λήψης διαπιστευτηρίων Windows Hello. - - - Failed to decrypt key data. - Αποτυχία αποκρυπτογράφηση βασικών δεδομένων. - - - Origin is empty or not allowed - Η προέλευση είναι κενή ή δεν επιτρέπεται - - - Effective domain is not a valid domain - Ο αποτελεσματικός τομέας δεν είναι έγκυρος τομέας - - - Origin and RP ID do not match - Η προέλευση και το RP ID δεν ταιριάζουν - - - No supported algorithms were provided - Δεν παρέχονται υποστηριζόμενοι αλγόριθμοι - - - Wait for timer to expire - Περιμένετε να λήξει ο χρονοδιακόπτης - - - Challenge is shorter than required minimum length - Η πρόκληση είναι μικρότερη από το απαιτούμενο ελάχιστο μήκος - - - user.id does not match the required length - ο αριθμός ταυτότητας του χρήστη δεν αντιστοιχεί στο απαιτούμενο μήκος - - - Favorite - Tag for favorite entries - - - - File does not exist. - - - - Cannot open file: %1 - - - - Cannot parse file: %1 at position %2 - - - - Failed to decrypt json file: %1 - - - - Invalid encKeyValidation field - - - - Invalid cipher list within encKeyValidation field - - - - Wrong password - - - - Invalid encrypted data field - - - - Invalid cipher list within encrypted data field - - - - Cannot initialize cipher - - - - Cannot decrypt data - - - - Bitwarden Import - - - - Archived - Tag for archived entries - - - - Invalid 1PUX file format: Not a valid ZIP file. - - - - Invalid 1PUX file format: Missing export.data - - - - 1Password Import - - - - Enter Shortcut - Εισάγετε Συντόμευση - - - Action - Ενέργεια - - - Shortcuts - Συντομεύσεις - - - Unknown passkeys error - - - - Invalid KDF iterations, cannot decrypt json file - - - - Unsupported format, ensure your Bitwarden export is password-protected - - - - Only PBKDF and Argon2 are supported, cannot decrypt json file - - - - Reset Shortcuts - Επαναφορά Συντομεύσεων - - - Double click an action to change its shortcut - Κάντε διπλό κλικ σε μια ενέργεια για να αλλάξετε τη συντόμευσή της. - - - Filter... - Φίλτρο... - - - Shortcut Conflict - Διένεξη Συντομεύσεων - - - Shortcut %1 conflicts with '%2'. Overwrite shortcut? - Η συντόμευση %1 έρχεται σε διένεξη με την '%2'. Να αντικατασταθεί η συντόμευση; - - - Cannot generate valid passphrases because the wordlist is too short - - - - Encrypted files are not supported. - - - - Proton Pass Import - - - - Delete plugin data? - Διαγραφή δεδομένων πρόσθετου; - - - Delete plugin data from Entry(s)? - - - - Passkey - Passkey - - - Format to use when exporting. Available choices are 'xml', 'csv' or 'html'. Defaults to 'xml'. - - - - start minimized to the system tray - - - - malformed string, possible unescaped delimiter - - - - missing closing delimiter - - - - %1, row: %2, column: %3 - - - - Tags - Ετικέτες + KeePassXC is not running. No open database to lock + Το KeePassXC δεν εκτελείται. Δεν υπάρχει ανοιχτή βάση δεδομένων για κλείδωμα @@ -9223,11 +7960,11 @@ This option is deprecated, use --set-key-file instead. Error writing to underlying device: - Σφάλμα κατά την εγγραφή σε υποκείμενη συσκευή: + Σφάλμα κατά την εγγραφή για την υποκείμενη συσκευή: Error opening underlying device: - Σφάλμα κατά το άνοιγμα υποκείμενης συσκευής: + Σφάλμα άνοιγμα υποκείμενη συσκευή: Error reading data from underlying device: @@ -9246,42 +7983,23 @@ This option is deprecated, use --set-key-file instead. Internal zlib error: - Εσωτερικό σφάλμα zlib: - - - - RemoteHandler - - Command `%1` did not finish in time. Process was killed. - - - - Failed to upload merged database. Command `%1` did not finish in time. Process was killed. - - - - Invalid download parameters provided. - - - - Command `%1` failed to download database. - - - - Invalid database pointer or upload parameters provided. - - - - Command `%1` exited with status code: %2 - - - - Failed to upload merged database. Command `%1` exited with status code: %2 - + Εσωτερικό σφάλμα zlib: ReportsWidgetBrowserStatistics + + Exclude expired entries from the report + Εξαίρεση ληγμένων καταχωρήσεων από την αναφορά + + + Show only entries which have URL set + Εμφάνιση μόνο καταχωρήσεων που έχουν οριστεί URL + + + Show only entries which have browser settings in custom data + Εμφάνιση μόνο καταχωρήσεων που έχουν ρυθμίσεις προγράμματος περιήγησης σε προσαρμοσμένα δεδομένα + Double-click entries to edit. Κάντε διπλό κλικ στις καταχωρήσεις για επεξεργασία. @@ -9340,59 +8058,50 @@ This option is deprecated, use --set-key-file instead. Delete Entry(s)… - Διαγραφή καταχώρησης;Διαγραφή καταχωρήσεων; + Διαγραφή καταχωρήσεων; Exclude from reports Εξαίρεση από αναφορές - - Expire Entry(s)… - - - - Only show entries that have a URL - Εμφάνιση μόνο καταχωρίσεων που έχουν διεύθυνση URL - - - Only show entries that have been explicitly allowed or denied - Εμφάνιση μόνο καταχωρήσεων που έχουν επιτραπεί ή απορριφθεί ρητά - - - Show expired entries - Εμφάνιση καταχωρήσεων που έχουν λήξει - - - (Expired) - (Εχει λήξει) - - - Delete plugin data from Entry(s)… - - ReportsWidgetHealthcheck - Show expired entries - Εμφάνιση καταχωρήσεων που έχουν λήξει + Exclude expired entries from the report + Εξαίρεση ληγμένων καταχωρήσεων από την αναφορά - (Expired) - (Εχει λήξει) + Also show entries that have been excluded from reports + Εμφάνιση επίσης καταχωρήσεων που έχουν εξαιρεθεί από αναφορές Hover over reason to show additional details. Double-click entries to edit. - Τοποθετήστε το δείκτη του ποντικιού για να εμφανίσετε επιπλέον λεπτομέρειες. Κάντε διπλό κλικ στις καταχωρήσεις για επεξεργασία. + Τοποθετήστε το δείκτη του ποντικιού πάνω από τα εικονίδια για να εμφανίσετε πρόσθετες λεπτομέρειες. Κάντε διπλό κλικ στις καταχωρήσεις για επεξεργασία. + + + Bad + Password quality + Κακό Bad — password must be changed κακός — ο κωδικός πρόσβασης πρέπει να αλλάξει + + Poor + Password quality + Φτωχή + Poor — password should be changed Φτωχός — ο κωδικός πρόσβασης πρέπει να αλλάξει + + Weak + Password quality + Αδύναμη + Weak — consider changing the password Αδύναμος — εξετάστε το ενδεχόμενο αλλαγής του κωδικού πρόσβασης @@ -9441,14 +8150,6 @@ This option is deprecated, use --set-key-file instead. Exclude from reports Εξαίρεση από αναφορές - - Expire Entry(s)… - - - - Show entries that have been excluded from reports - Εμφάνιση καταχωρήσεων που έχουν εξαιρεθεί από τις αναφορές - ReportsWidgetHibp @@ -9466,7 +8167,7 @@ This option is deprecated, use --set-key-file instead. This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. - Αυτή η κατασκευή του KeePassXC δεν έχει λειτουργίες δικτύου. Απαιτείται δικτύωση για να ελέγξετε τους κωδικούς πρόσβασης στη βάση δεδομένων του Have I Been Pwned. + Αυτή η κατασκευή του KeePassXC δεν έχει λειτουργίες δικτύου. Απαιτείται δικτύωση για να ελέγξετε τους κωδικούς πρόσβασής στη βάση δεδομένων του Have I Been Pwned. Congratulations, no exposed passwords! @@ -9544,77 +8245,6 @@ This option is deprecated, use --set-key-file instead. Exclude from reports Εξαίρεση από αναφορές - - Expire Entry(s)… - - - - - ReportsWidgetPasskeys - - Export - Εξαγωγή - - - Import - Εισαγωγή - - - List of entry URLs - Λίστα διευθύνσεων URL καταχώρησης - - - Title - Τίτλος - - - Path - Διαδρομή - - - Username - Όνομα χρήστη - - - URLs - Διευθύνσεις URL - - - Edit Entry… - Επεξεργασία Καταχώρησης... - - - Delete Entry(s)… - Διαγραφή καταχώρησης;Διαγραφή καταχωρήσεων; - - - Relying Party - Στηριζόμενο Party - - - Show expired entries - Εμφάνιση καταχωρήσεων που έχουν λήξει - - - (Expired) - (Εχει λήξει) - - - Export Confirmation - Επιβεβαίωση Εξαγωγής - - - The passkey file will be vulnerable to theft and unauthorized use, if left unsecured. Are you sure you want to continue? - - - - Please wait, list of entries with passkeys is being updated… - - - - No entries with passkeys. - - ReportsWidgetStatistics @@ -9755,7 +8385,7 @@ This option is deprecated, use --set-key-file instead. No agent running, cannot add identity. - Κανένας agent δεν εκτελείται, δεν μπορεί να προσθέσει ταυτότητα. + Δεν εκτελείται agent, δεν είναι δυνατή η προσθήκη ταυτότητας. Key identity ownership conflict. Refusing to add. @@ -9789,14 +8419,6 @@ This option is deprecated, use --set-key-file instead. No agent running, cannot list identities. Κανένας agent δεν εκτελείται, δεν μπορεί να αναφέρει τις ταυτότητες. - - Failed to remove all SSH identities from agent. - - - - All SSH identities removed from agent. - - SearchHelpWidget @@ -9810,7 +8432,7 @@ This option is deprecated, use --set-key-file instead. Every search term must match (ie, logical AND) - Κάθε όρος αναζήτησης πρέπει να ταιριάζει (δηλαδή, logical AND) + Κάθε όρος αναζήτησης πρέπει να ταιριάζει (δηλαδή, λογικό AND) Modifiers @@ -9861,11 +8483,7 @@ This option is deprecated, use --set-key-file instead. Search Help - Βοήθεια αναζήτησης - - - Save Search - Αποθήκευση Αναζήτησης + Βοήθεια Αναζήτησης Search (%1)… @@ -9880,6 +8498,10 @@ This option is deprecated, use --set-key-file instead. Limit search to selected group Περιορισμός αναζήτησης στην επιλεγμένη ομάδα + + Save Search + Αποθήκευση Αναζήτησης + SettingsClientModel @@ -9941,10 +8563,34 @@ This option is deprecated, use --set-key-file instead. Confirm when passwords are retrieved by clients Επιβεβαίωση κατά την ανάκτηση κωδικών πρόσβασης από προγράμματα-πελάτες + + <html><head/><body><p><span style=" + font-family:'-apple-system','BlinkMacSystemFont','Segoe UI','Helvetica','Arial','sans-serif','Apple Color + Emoji','Segoe UI Emoji'; font-size:14px; color:#24292e; background-color:#ffffff;">This setting does + not override disabling recycle bin prompts</span></p></body></html> + + <html><head/><body><p><span style=" + font-family:'-apple-system','BlinkMacSystemFont','Segoe UI','Helvetica','Arial','sans-serif','Apple Color + Emoji','Segoe UI Emoji'; font-size:14px; color:#24292e; background-color:#ffffff;">Αυτή η ρύθμιση δεν + παρακάμπτει την απενεργοποίηση των προτροπών του Κάδου Ανακύκλωσης</span></p></body></html> + + Confirm when clients request entry deletion Επιβεβαίωση όταν τα προγρμμάτα-πελάτες ζητούν διαγραφή καταχώρησης + + <html><head/><body><p>This improves compatibility with certain applications + which search for password without unlocking the database first.</p><p>But enabling this may also + crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a + different value set in applications.)</p></body></html> + + <html><head/><body><p>Αυτό βελτιώνει τη συμβατότητα με ορισμένες εφαρμογές + που αναζητούν πρώτα κωδικό πρόσβασης χωρίς να ξεκλειδώσουν τη βάση δεδομένων.</p><p>Αλλά η ενεργοποίηση αυτού μπορεί επίσης να + crasharει τον client, εάν η βάση δεδομένων δεν μπορεί να ξεκλειδωθεί μέσα σε ένα συγκεκριμένο χρονικό διάστημα. (Συνήθως 25s, αλλά μπορεί να είναι + διαφορετική τιμή που έχει οριστεί σε εφαρμογές.)</p></body></html> + + Prompt to unlock database before searching Προτροπή για ξεκλείδωμα βάσης δεδομένων πριν από την αναζήτηση @@ -9969,14 +8615,6 @@ This option is deprecated, use --set-key-file instead. Save current changes to activate the plugin and enable editing of this section. Αποθηκεύστε τις τρέχουσες αλλαγές για να ενεργοποιήσετε το πρόσθετο και να ενεργοποιήσετε την επεξεργασία αυτής της ενότητας. - - <html><head/><body><p>This setting does not override disabling recycle bin prompts </p></body></html> - - - - <html><head/><body><p>This improves compatibility with certain applications which search for password without unlocking the database first.</p><p>But enabling this may also crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a different value set in applications.) </p></body></html> - - SettingsWidgetKeeShare @@ -10018,7 +8656,7 @@ This option is deprecated, use --set-key-file instead. Generate - Δημιουργία + Παραγωγή Fingerprint: @@ -10084,14 +8722,6 @@ This option is deprecated, use --set-key-file instead. TagModel - - Clear Search - Εκκαθάριση Αναζήτησης - - - All Entries - Όλες οι Καταχωρήσεις - Expired Έχουν λήξει @@ -10100,6 +8730,14 @@ This option is deprecated, use --set-key-file instead. Weak Passwords Αδύναμοι Κωδικοί πρόσβασης + + All Entries + Όλες οι Καταχωρήσεις + + + Clear Search + Εκκαθάριση Αναζήτησης + TagView @@ -10208,7 +8846,7 @@ This option is deprecated, use --set-key-file instead. Code size: - Μέγεθος κωδικού: + Μέγεθος κώδικα: digits @@ -10277,6 +8915,26 @@ Example: JBSWY3DPEHPK3PXP Start storing your passwords securely in a KeePassXC database Ξεκινήστε να αποθηκεύετε τους κωδικούς σας με ασφάλεια σε μία βάση δεδομένων KeePassXC + + Create new database + Δημιουργία νέας βάσης δεδομένων + + + Open existing database + Άνοιγμα υπάρχουσας βάσης δεδομένων + + + Import from KeePass 1 + Εισαγωγή από KeePass 1 + + + Import from 1Password + Εισαγωγή από 1Password + + + Import from CSV + Εισαγωγή από CSV + Recent databases Πρόσφατες βάσεις δεδομένων @@ -10289,18 +8947,6 @@ Example: JBSWY3DPEHPK3PXP Welcome to KeePassXC %1 Καλώς ορίσατε στο KeePassXC %1 - - Create Database - Δημιουργία Βάσης Δεδομένων - - - Open Database - Άνοιγμα Βάσης Δεδομένων - - - Import File - - WinUtils @@ -10317,8 +8963,31 @@ Example: JBSWY3DPEHPK3PXP Δεν ήταν δυνατή η καταχώρηση καθολικής συντόμευσης + + WindowsHello + + Failed to init KeePassXC crypto. + Αποτυχία εκκίνησης κρυπτογράφησης KeePassXC. + + + Failed to encrypt key data. + Αποτυχία κρυπτογράφησης βασικών δεδομένων. + + + Failed to get Windows Hello credential. + Αποτυχία λήψης διαπιστευτηρίων Windows Hello. + + + Failed to decrypt key data. + Αποτυχία αποκρυπτογράφηση βασικών δεδομένων. + + YubiKey + + %1 No interface, slot %2 + %1 Χωρίς διεπαφή, υποδοχή %2 + General: Γενικά: @@ -10330,9 +8999,17 @@ Example: JBSWY3DPEHPK3PXP YubiKeyEditWidget + + Refresh hardware tokens + Ανανέωση hardware tokens + + + Refresh + Ανανέωση + Hardware key slot selection - Επιλογή υποδοχής υλικού κλειδιού + Επιλογή υποδοχής hardware κλειδιού Could not find any hardware keys! @@ -10362,6 +9039,10 @@ Example: JBSWY3DPEHPK3PXP Challenge-Response set, click to change or remove Η Πρόκληση-Απόκριση ορίστηκε, κάντε κλικ για να την αλλάξετε ή να την καταργήσετε + + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + <p>Εάν είστε ιδιοκτήτης ενός <a href="https://www.yubico.com/">YubiKey</a> ή <a href="https://onlykey.io">OnlyKey</a>, μπορείτε να το χρησιμοποιήσετε για πρόσθετη ασφάλεια.</p><p>Το κλειδί απαιτεί μία από τις υποδοχές του να προγραμματιστεί ως <a href="https://www.yubico.com/products/services-software/challenge-response/">HMAC-SHA1 Πρόκληση-Απόκριση</a>.</p> + Detecting hardware keys… Εντοπισμός hardware κλειδιών... @@ -10370,25 +9051,28 @@ Example: JBSWY3DPEHPK3PXP No hardware keys detected Δεν εντοπίστηκαν hardware κλειδιά + + + YubiKeyInterface - Refresh hardware keys - - - - <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed with <a href="https://keepassxc.org/docs/#faq-yubikey-howto">Challenge-Response</a>.</p> - - - - Hardware keys found, but no slots are configured - + %1 Invalid slot specified - %2 + %1 Καθορίστηκε μη έγκυρη υποδοχή - %2 YubiKeyInterfacePCSC + + (PCSC) %1 [%2] Challenge-Response - Slot %3 + (PCSC) %1 [%2] Πρόκληση-Απόκριση - Slot %3 + The YubiKey PCSC interface has not been initialized. Η διεπαφή YubiKey PCSC δεν έχει αρχικοποιηθεί. + + Hardware key is currently in use. + Το hardware κλειδί χρησιμοποιείται αυτήν τη στιγμή. + Could not find or access hardware key with serial number %1. Please present it to continue. Δεν ήταν δυνατή η εύρεση ή η πρόσβαση στο κλειδί υλικού με τον σειριακό αριθμό %1. Παρακαλώ παρουσιάστε το για να συνεχίσετε. @@ -10405,21 +9089,6 @@ Example: JBSWY3DPEHPK3PXP Failed to complete a challenge-response, the PCSC error code was: %1 Αποτυχία ολοκλήρωσης μιας πρόκλησης-απάντησης, ο κωδικός σφάλματος PCSC ήταν: %1 - - (NFC) %1 [%2] - Slot %3, %4 - YubiKey display fields - - - - Press - USB Challenge-Response Key interaction request - Πατήστε - - - Passive - USB Challenge-Response Key no interaction required - Παθητικό - YubiKeyInterfaceUSB @@ -10427,6 +9096,14 @@ Example: JBSWY3DPEHPK3PXP Unknown Άγνωστο + + (USB) %1 [%2] Configured Slot - %3 + (USB) %1 [%2] Διαμορφωμένη Yποδοχή - %3 + + + (USB) %1 [%2] Challenge-Response - Slot %3 - %4 + (USB) %1 [%2] Πρόκληση-Απόκριση - Slot %3 - %4 + Press USB Challenge-Response Key interaction request @@ -10441,6 +9118,10 @@ Example: JBSWY3DPEHPK3PXP The YubiKey USB interface has not been initialized. Η διεπαφή USB YubiKey δεν έχει αρχικοποιηθεί. + + Hardware key is currently in use. + Το hardware κλειδί χρησιμοποιείται αυτήν τη στιγμή. + Could not find hardware key with serial number %1. Please plug it in to continue. Δεν ήταν δυνατή η εύρεση hardware κλειδιού με σειριακό αριθμό %1. Παρακαλώ συνδέστε το για να συνεχίσετε. @@ -10457,15 +9138,5 @@ Example: JBSWY3DPEHPK3PXP Failed to complete a challenge-response, the specific error was: %1 Απέτυχε η ολοκλήρωση ενός challange-response, το συγκεκριμένο σφάλμα ήταν: %1 - - %1 [%2] - Slot %3 - YubiKey NEO display fields - - - - %1 [%2] - Slot %3, %4 - YubiKey display fields - - \ No newline at end of file diff --git a/share/translations/keepassxc_en.ts b/share/translations/keepassxc_en.ts index 16cd879b9..2b244a827 100644 --- a/share/translations/keepassxc_en.ts +++ b/share/translations/keepassxc_en.ts @@ -1,6 +1,6 @@ - + AboutDialog @@ -82,10 +82,6 @@ Details - - Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. - - Remember @@ -94,6 +90,10 @@ Allow Selected + + Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. + + Deny All && Future @@ -124,10 +124,6 @@ Use OpenSSH - - Use both agents - - SSH_AUTH_SOCK override @@ -156,6 +152,10 @@ SSH Agent connection is working! + + Use both agents + + ApplicationSettingsWidget @@ -171,10 +171,6 @@ Security - - This setting cannot be enabled when minimize on unlock is enabled. - - Access error for config file %1 @@ -219,48 +215,20 @@ You must restart the application to set the new language. Would you like to restart now? + + Reset Settings? + + + + Are you sure you want to reset all general and security settings to default? + + Select backup storage directory - Confirm Reset - - - - Are you sure you want to reset all settings to default? - - - - Import KeePassXC Settings - - - - Failed to import settings from %1, not a valid settings file. - - - - Export KeePassXC Settings - - - - Small - - - - Normal - - - - Medium - - - - Large - - - - Custom + This setting cannot be enabled when minimize on unlock is enabled. @@ -294,10 +262,6 @@ Remember previously used databases - - recent files - - Load previously open databases on startup @@ -314,6 +278,25 @@ Include beta releases when checking for updates + + On database unlock, show entries that + + + + have expired + On database unlock, show entries that... + + + + days + On database unlock, show entries that will expire within %1 days + + + + will expire within + On database unlock, show entries that... + + File Management @@ -338,10 +321,22 @@ Backup database file before saving + + Backup destination + + + + Specifies the database backup file location. Occurrences of "{DB_FILENAME}" are replaced with the filename of the saved database without extension. {TIME:<format>} is replaced with the backup time, see https://doc.qt.io/qt-5/qdatetime.html#toString. <format> defaults to format string "dd_MM_yyyy_hh-mm-ss". + + {DB_FILENAME}.old.kdbx + + Choose... + + Use alternative saving method (may solve problems with Dropbox, Google Drive, GVFS, etc.) @@ -419,10 +414,6 @@ Toolbar button style: - - Show passwords in color - - Use monospaced font for notes @@ -509,68 +500,11 @@ - On database unlock, show entries that will expire within + recent files - On database unlock, show entries that will expire within - - - - days - number of days warning for password expiration - - - - Destination format: - - - - <html><head/><body><p><span style=" font-weight:600;">{DB_FILENAME}</span> is replaced with the filename of the saved database without extension</p><p><span style=" font-weight:600;">{TIME:&lt;format&gt;}</span> is replaced with the specified time format (default: dd_MM_yyyy_hh-mm-ss)</p><p>See the User Guide for more details</p></body></html> - - - - Choose folder... - - - - Show confirmation before moving entries to recycle bin - - - - Copy data on double clicking field in entry view - - - - Show toolbar - - - - Show the menu bar by pressing the Alt key - - - - Show menubar - - - - Import settings… - - - - Export settings… - - - - Open browser on double clicking URL field in entry view - - - - Font size: - - - - Font size selection + Show passwords in color @@ -626,6 +560,10 @@ Lock databases after minimizing the window + + Require password repeat when it is visible + + Hide passwords when editing them @@ -638,6 +576,18 @@ Hide passwords in the entry preview panel + + Hide entry notes by default + + + + Move entries to recycle bin without confirmation + + + + Enable double click to copy the username/password entry columns + + Privacy @@ -650,29 +600,6 @@ Hide TOTP in the entry preview panel - - Lock databases when switching user - - - - Lock Options - - - - Hide notes in the entry preview panel - - - - - AttachmentWidget - - Attachment Viewer - - - - Unknown attachment type - - AutoType @@ -717,7 +644,16 @@ - Entry does not have attribute for PICKCHARS: %1 + Invalid conversion type: %1 + + + + Invalid conversion syntax: %1 + + + + Invalid regular expression syntax %1 +%2 @@ -725,7 +661,7 @@ - Entry has invalid TOTP settings + Entry does not have attribute for PICKCHARS: %1 @@ -769,6 +705,10 @@ AutoTypePlatformX11 + + Trying to send invalid keysym. + + Sequence aborted: Caps Lock is on @@ -781,10 +721,6 @@ Unable to get valid keycode for key: - - Trying to send invalid keyboard symbol. - - AutoTypeSelectDialog @@ -884,13 +820,13 @@ Ctrl+4 - Use Virtual Keyboard (Windows Only)</p> Disable for this site - - Undo - - BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + + Ok @@ -904,82 +840,23 @@ Ctrl+4 - Use Virtual Keyboard (Windows Only)</p> Please select the correct database for saving credentials. - - KeePassXC - Select Database - - - - - BrowserPasskeysConfirmationDialog - - Cancel - - - - Update - - - - Authenticate - - - - Register new - - - - Register - - - - Timeout in <b>%n</b> seconds... - - - - - - - Relying Party: %1 - - - - Username: %1 - - - - KeePassXC - Passkey credentials - - - - Add to existing entry - - - - Existing passkey found. -Do you want to register a new passkey for: - - - - Select the existing passkey and press Update to replace it. - - - - Authenticate passkey credentials for: - - - - Do you want to register a passkey for: - - BrowserService + + KeePassXC: Create a new group + + A request for creating a new group "%1" has been received. Do you want to create this group? + + KeePassXC: New key association request + + You have received an association request for the following database: %1 @@ -992,15 +869,27 @@ chrome-laptop. 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? + + KeePassXC: Delete entry + + A request for deleting entry "%1" has been received. Do you want to delete the entry? @@ -1008,56 +897,49 @@ Do you want to delete the entry? - %1 (Passkey) + Converting attributes to custom data… - KeePassXC - Create a new group + Abort - Disable + KeePassXC: Converted KeePassHTTP attributes - KeePassXC - Overwrite existing key? + 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! - KeePassXC - Update Entry + The active database does not contain an entry with KeePassHTTP attributes. - KeePassXC - Delete entry + Don't show this warning again - KeePassXC - New key association request + KeePassXC: Legacy browser integration settings detected - Passkey - - - - KeePassXC - Passkey credentials - - - - Register a new passkey to this entry: - - - - KeePassXC - Update passkey - - - - Entry already has a passkey. -Do you want to overwrite the passkey in %1 - %2? - - - - Register + 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? @@ -1079,6 +961,10 @@ Do you want to overwrite the passkey in %1 - %2? General + + Browsers installed as snaps are currently not supported. + + Enable integration for these browsers: @@ -1250,6 +1136,26 @@ Do you want to overwrite the passkey in %1 - %2? Custom extension ID + + Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 + + + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 + + + + Please see special instructions for browser extension use below + + + + <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. + + + + <b>Warning:</b> The following options can be dangerous! + + Executable Files @@ -1266,46 +1172,6 @@ Do you want to overwrite the passkey in %1 - %2? Select native messaging host folder location - - Allow keepassxc-proxy to list all entries with their title, URL and UUID in connected databases. - - - - Allow limited access to all entries in connected databases (ignores site access restrictions) - - - - <b>Warning:</b> Only adjust these settings if necessary. - - - - The custom proxy location does not exist. - - - - <b>Error:</b> The custom proxy location does not exist. Correct this in the advanced settings tab. - - - - <b>Error:</b> The installed proxy executable is missing from the expected location: %1<br/>Please set a custom proxy location in the advanced settings or reinstall the application. - - - - Allows using insecure http://localhost with passkeys for testing purposes. - - - - Allow using localhost with passkeys - - - - KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. - - - - Browsers installed using Snap or Flatpak are not supported with exception to Firefox installed using Snap. - - CloneDialog @@ -1328,6 +1194,14 @@ Do you want to overwrite the passkey in %1 - %2? CsvImportWidget + + Import CSV fields + + + + filename + + size, rows, columns @@ -1436,6 +1310,18 @@ Do you want to overwrite the passkey in %1 - %2? Column %1 + + Imported from CSV file + + + + Original data: + + + + Error(s) detected in CSV file! + + [%n more message(s) skipped] @@ -1444,32 +1330,31 @@ Do you want to overwrite the passkey in %1 - %2? - Failed to parse CSV file: %1 + Error - Imported from CSV file: %1 - - - - No Title Selected - - - - No title column was selected, entries will be hard to tell apart. -Are you sure you want to import? - - - - Tags + CSV import: writer has errors: +%1 CsvParserModel + + %1, %2, %3 + file info: bytes, rows, columns + + + + %n byte(s) + + + + + %n row(s) - CSV row count @@ -1477,7 +1362,6 @@ Are you sure you want to import? %n column(s) - CSV column count @@ -1532,14 +1416,6 @@ Backup database located at %2 Recycle Bin - - Database file read error. - - - - No file path was provided. - - DatabaseOpenDialog @@ -1562,10 +1438,30 @@ Backup database located at %2 Password field + + Enter Additional Credentials (if any): + + + + Key File: + + + + Key file help + + Hardware key slot selection + + Hardware Key: + + + + Hardware key help + + Key file to unlock the database @@ -1578,6 +1474,14 @@ Backup database located at %2 Browse… + + Refresh hardware tokens + + + + Refresh + + Unlock Database @@ -1631,6 +1535,10 @@ To prevent this error from appearing, you must go to "Database Settings / S Retry with empty password + + Failed to authenticate with Touch ID + + Failed to open key file: %1 @@ -1663,68 +1571,38 @@ To prevent this error from appearing, you must go to "Database Settings / S Cannot use database file as key file + + You cannot use your database file as a key file. +If you do not have a key file, please leave the field empty. + + + + Detecting hardware keys… + + + + No hardware keys detected + + + + Select hardware key… + + + + <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information…</p> + + + + <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +<p>Click for more information…</p> + + authenticate to access the database - Failed to authenticate with Quick Unlock: %1 - - - - Select Key File: - - - - <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!</p> - - - - Use hardware key [Serial: %1] - - - - Use hardware key - - - - Your database file is NOT a key file! -If you don't have a key file or don't know what that is, you don't have to select one. - - - - KeePassXC database file selected - - - - The file you selected looks like a database file. -A database file is NOT a key file! - -Are you sure you want to continue with this file?. - - - - No hardware keys found. - - - - Refresh Hardware Keys - - - - Click to add a key file. - - - - <a href="#" style="text-decoration: underline">I have a key file</a> - - - - Hardware keys found, but no slots are configured. - - - - Press ESC again to close this database + Failed to authenticate with Windows Hello: %1 @@ -1737,6 +1615,10 @@ Are you sure you want to continue with this file?. DatabaseSettingsDialog + + Advanced Settings + + General @@ -1761,22 +1643,6 @@ Are you sure you want to continue with this file?. Maintenance - - KeeShare - - - - Secret Service Integration - - - - Remote Sync - - - - Database Settings: %1 - - DatabaseSettingsWidgetBrowser @@ -1784,6 +1650,18 @@ Are you sure you want to continue with this file?. KeePassXC-Browser settings + + Convert KeePassHTTP data + + + + Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data + + + + Refresh database root group ID + + Disconnect all browsers @@ -1792,10 +1670,6 @@ Are you sure you want to continue with this file?. Forget all site-specific settings on entries - - Refresh database root group ID - - Stored keys @@ -1842,10 +1716,18 @@ This may prevent connection to the browser plugin. 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. @@ -1866,6 +1748,10 @@ Permissions to access entries will be revoked. Abort + + KeePassXC: Removed permissions + + Successfully removed permissions from %n entry(s). @@ -1873,10 +1759,23 @@ Permissions to access entries will be revoked. + + 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 convert all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + + Refresh database ID @@ -1886,26 +1785,6 @@ Permissions to access entries will be revoked. This is only necessary if your database is a copy of another and the browser extension cannot connect. - - Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data - - - - No keys found - - - - Removed keys from database - - - - Removed permissions - - - - No entry with permissions found! - - DatabaseSettingsWidgetDatabaseKey @@ -1943,18 +1822,6 @@ Are you sure you want to continue without a password? Failed to change database credentials - - Weak password - - - - This is a weak password! For better protection of your secrets, you should choose a stronger password. - - - - The provided password does not meet the minimum quality requirement. - - DatabaseSettingsWidgetEncryption @@ -1962,6 +1829,14 @@ Are you sure you want to continue without a password? Decryption Time: + + Change existing decryption time + + + + Change + + Decryption time in seconds @@ -2042,6 +1917,11 @@ Are you sure you want to continue without a password? KDBX 3 + + unchanged + Database decryption time is unchanged + + Number of rounds too high Key transformation rounds @@ -2096,18 +1976,6 @@ If you keep this number, your database will not be protected from brute force at - - Encryption Settings: - - - - Basic - - - - Advanced - - DatabaseSettingsWidgetFdoSecrets @@ -2228,70 +2096,6 @@ Entries deleted from the recycle bin are removed from the database. - - Autosave delay since last change - - - - Autosave delay - - - - Autosave delay since last change in minutes - - - - min - - - - Autosave delay since last change checkbox - - - - Public Database Metadata - - - - Warning: the following settings are not encrypted. - - - - Display name: - - - - Publically visible display name used on the unlock dialog - - - - Database public display name - - - - Display color: - - - - Publically visible color used on the unlock dialog - - - - Database public display color chooser - - - - Clear - - - - Display icon: - - - - Select Database Icon - - DatabaseSettingsWidgetKeeShare @@ -2390,129 +2194,6 @@ removed from the database. - - DatabaseSettingsWidgetRemote - - Sync Commands - - - - Remove - - - - Command Settings - - - - Name - - - - Save - - - - Download - - - - Command: - - - - Download command field - - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - - - - Input: - - - - Download input field - - - - Upload - - - - Upload command field - - - - e.g.: "sftp user@hostname" or "scp {TEMP_DATABASE} user@hostname:DatabaseOnRemote.kdbx" - - - - Upload input field - - - - Name cannot be empty. - - - - Test - - - - Download command cannot be empty. - - - - Download failed with error: %1 - - - - Download finished, but file %1 could not be found. - - - - Download successful. - - - - Save Remote Settings - - - - You have unsaved changes. Do you want to save them? - - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - - - - e.g.: -put {TEMP_DATABASE} DatabaseOnRemote.kdbx -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - - - - Timeout: - - - - seconds - - - DatabaseTabWidget @@ -2544,10 +2225,26 @@ This is definitely a bug, please report it to the developers. CSV file + + Select CSV file + + Merge database + + KeePass 1 database + + + + Open KeePass 1 database + + + + Open OPVault + + Export database to CSV file @@ -2560,6 +2257,28 @@ This is definitely a bug, please report it to the developers. Writing the HTML file failed. + + Export Confirmation + + + + You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? + + + + New Database + + + + %1 [New Database] + Database tab name modifier + + + + %1 [Locked] + Database tab name modifier + + Export database to XML file @@ -2572,31 +2291,9 @@ This is definitely a bug, please report it to the developers. Writing the XML file failed - - Export Confirmation - - - - You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? - - - - %1 [Locked] - Database tab name modifier - - - - %1 [Temporary] - Database tab name modifier - - DatabaseWidget - - Searches and Tags - - Searching… @@ -2645,13 +2342,6 @@ This is definitely a bug, please report it to the developers. Expired entries - - Entries expiring within %1 day(s) - - - - - No current database. @@ -2676,14 +2366,6 @@ This is definitely a bug, please report it to the developers. No Results - - Enter a unique name or overwrite an existing search from the list: - - - - Save Search - - Lock Database? @@ -2710,6 +2392,24 @@ Save changes? 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? + + + + Could not open the new database file while attempting to autoreload. +Error: %1 + + Disable safe saves? @@ -2751,108 +2451,27 @@ Disable safe saves and try again? Could not find database file: %1 + + Entries expiring within %1 day(s) + + + + + - New Database + Searches and Tags - %1 [New Database] - Database tab name modifier - - - - Remote Sync did not contain any download or upload commands. - - - - Remote sync '%1' completed successfully! - - - - Remote sync '%1' failed: %2 - - - - Error while saving database %1: %2 - - - - Downloading... - - - - Uploading... - - - - Syncing... - - - - Remove passkey from entry - - - - Do you want to remove the passkey from this entry? - - - - The database file "%1" was modified externally - - - - Do you want to load the changes? - - - - Reload database - - - - Reloading database… - - - - Reload canceled - - - - Reload successful - - - - Reload pending user action… - - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes<br>Ignore the changes on disk until save<br>Discard unsaved changes - - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes then save<br>Overwrite the changes on disk<br>Discard unsaved changes - - - - Database file overwritten. - - - - Database file on disk cannot be unlocked with current credentials.<br>Enter new credentials and/or present hardware key to continue. - - - - Failed to save backup database: %1 + Enter a unique name or overwrite an existing search from the list: Save - - - EditEntryAttachmentsDialog - Edit: %1 + Save Search @@ -2906,6 +2525,10 @@ Disable safe saves and try again? n/a + + (encrypted) + + Select private key @@ -2987,13 +2610,6 @@ Would you like to correct it? Hide - - %n hour(s) - - - - - %n week(s) @@ -3015,9 +2631,12 @@ Would you like to correct it? - - Failed to decrypt SSH key, ensure password is correct. - + + %n hour(s) + + + + @@ -3137,20 +2756,10 @@ Would you like to correct it? Add new window association - - + - Add item - - Remove selected window association - - - - Remove item - - Window title: @@ -3175,9 +2784,23 @@ Would you like to correct it? Custom Auto-Type sequence for this window + + + + Add item + + + + - + Remove item + + EditEntryWidgetBrowser + + These settings affect to the entry's behaviour with the browser extension. + + General @@ -3190,14 +2813,26 @@ Would you like to correct it? Skip Auto-Submit for this entry + + Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. + + Use this entry only with HTTP Basic Auth + + Do not send this setting to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. + + Do not use this entry with HTTP Basic Auth + + Additional URL's + + Add @@ -3210,22 +2845,6 @@ Would you like to correct it? Edit - - These settings affect the entry's behaviour with the browser extension. - - - - Additional URLs - - - - Only send this entry to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. - - - - Do not send this entry to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. - - EditEntryWidgetHistory @@ -3391,22 +3010,6 @@ Would you like to correct it? Private key - - Attachment - - - - External key file - - - - Add to agent - - - - Remove from agent - - External file @@ -3421,7 +3024,19 @@ Would you like to correct it? - Generate + Attachment + + + + External key file + + + + Add to agent + + + + Remove from agent @@ -3448,10 +3063,6 @@ Would you like to correct it? seconds - - Clear agent - - EditGroupWidget @@ -3463,6 +3074,10 @@ Would you like to correct it? Icon + + Browser Integration + + Properties @@ -3479,10 +3094,6 @@ Would you like to correct it? Group has unsaved changes - - Browser Integration - - Enable @@ -3542,14 +3153,6 @@ Would you like to correct it? Omit WWW subdomain from matching toggle for this and sub groups - - Restrict matching to given browser key: - - - - Restrict matching to given browser key toggle for this and sub groups - - EditGroupWidgetKeeShare @@ -3781,6 +3384,10 @@ Supported extensions are: %1. Unable to fetch favicon. + + You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security + + Existing icon selected. @@ -3822,10 +3429,6 @@ Supported extensions are: %1. - - You can enable the DuckDuckGo website icon service under Application Settings -> Security - - EditWidgetProperties @@ -3901,23 +3504,6 @@ This may cause the affected plugins to malfunction. %1 - Clone - - Passkey - - - - Invalid conversion type: %1 - - - - Invalid conversion syntax: %1 - - - - Invalid regular expression syntax %1 -%2 - - EntryAttachments @@ -3951,6 +3537,10 @@ This may cause the affected plugins to malfunction. Add new attachment + + Add + + Remove selected attachment @@ -3959,6 +3549,14 @@ This may cause the affected plugins to malfunction. Remove + + Rename selected attachment + + + + Rename + + Open selected attachment @@ -3971,6 +3569,10 @@ This may cause the affected plugins to malfunction. Save selected attachment to disk + + Save + + Select files @@ -4030,6 +3632,11 @@ This may cause the affected plugins to malfunction. Confirm Overwrite Attachment + + Attachment "%1" already exists. +Would you like to overwrite the existing attachment? + + Confirm Attachment @@ -4059,35 +3666,6 @@ Do you want to save the changes to your database? Error: %1 - - Attachment "%1" already exists. -Would you like to overwrite the existing attachment? - - - - Preview - - - - Edit - - - - New Text Document - - - - Add file… - - - - Load from Disk… - - - - Save… - - EntryAttributesModel @@ -4282,14 +3860,6 @@ Would you like to overwrite the existing attachment? Has TOTP - - Background Color - - - - Group Path - - EntryPreviewWidget @@ -4310,7 +3880,7 @@ Would you like to overwrite the existing attachment? - URL + Notes @@ -4330,7 +3900,7 @@ Would you like to overwrite the existing attachment? - Notes + URL @@ -4381,10 +3951,6 @@ Would you like to overwrite the existing attachment? Never - - Double click to copy value - - Enabled @@ -4394,7 +3960,7 @@ Would you like to overwrite the existing attachment? - Double click to copy to clipboard + Double click to copy value @@ -4404,10 +3970,6 @@ Would you like to overwrite the existing attachment? Invalid URL - - Duplicate URL - - EntryView @@ -4423,13 +3985,6 @@ Would you like to overwrite the existing attachment? Reset to defaults - - + %1 entry(s)... - - - - - ExportDialog @@ -4651,200 +4206,6 @@ You can enable the DuckDuckGo website icon service in the security section of th - - ImageAttachmentsWidget - - Zoom: - - - - - ImportWizard - - Import Wizard - - - - - ImportWizardPageReview - - WizardPage - - - - Entry count: %1 - - - - Group - - - - Title - - - - Username - - - - Password - - - - Url - - - - Could not load key file. - - - - Could not open remote database. Password or key file may be incorrect. - - - - - ImportWizardPageSelect - - Form - - - - Import File Selection - - - - Password: - - - - Key File: - - - - Browse… - - - - Import Into: - - - - New Database - - - - No unlocked databases available - - - - Existing Database: - - - - Import File: - - - - Comma Separated Values (.csv) - - - - 1Password Export (.1pux) - - - - 1Password Vault (.opvault) - - - - Bitwarden (.json) - - - - KeePass 1 Database (.kdb) - - - - Open OPVault - - - - Select import file - - - - All files - - - - Key files - - - - Select key file - - - - Comma Separated Values - - - - 1Password Export - - - - Bitwarden JSON Export - - - - 1Password Vault - - - - KeePass1 Database - - - - Proton Pass (.json) - - - - Proton Pass JSON Export - - - - Temporary Database - - - - Command: - - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - - - - Input: - - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last commend `exit` has to be sent - - - - - Remote Database (.kdbx) - - - KMessageWidget @@ -5272,6 +4633,17 @@ Line %2, column %3 + + KeePass1OpenWidget + + Import KeePass1 Database + + + + Unable to open the database. + + + KeePass1Reader @@ -5625,6 +4997,10 @@ Are you sure you want to continue with this file? &Recent Databases + + &Import + + &Export @@ -5645,10 +5021,6 @@ Are you sure you want to continue with this file? TOTP - - Tags - - &Groups @@ -5693,18 +5065,34 @@ Are you sure you want to continue with this file? &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 + + &Delete Entry… @@ -5713,6 +5101,10 @@ Are you sure you want to continue with this file? &New Group… + + Add a new group + + &Edit Group… @@ -5745,10 +5137,18 @@ Are you sure you want to continue with this file? Database &Reports… + + Statistics, health check, etc. + + &Database Settings… + + Database settings + + &Clone Entry… @@ -5757,18 +5157,34 @@ Are you sure you want to continue with this file? Move u&p + + Move entry one step up + + Move do&wn + + Move entry one step down + + Copy &Username + + Copy username to clipboard + + Copy &Password + + Copy password to clipboard + + &Settings @@ -5802,13 +5218,21 @@ Are you sure you want to continue with this file? - Copy &URL + Copy title to clipboard + + + + Copy URL to clipboard &Notes + + Copy notes to clipboard + + &CSV File… @@ -5821,14 +5245,26 @@ Are you sure you want to continue with this file? KeePass 1 Database… + + Import a KeePass 1 database + + 1Password Vault… + + Import a 1Password Vault + + CSV File… + + Import a CSV file + + Show TOTP @@ -5845,10 +5281,6 @@ Are you sure you want to continue with this file? Copy &TOTP - - Copy Password and TOTP - - E&mpty recycle bin @@ -5873,6 +5305,10 @@ Are you sure you want to continue with this file? &Online Help + + Go to online documentation + + &User Guide @@ -5917,10 +5353,6 @@ Are you sure you want to continue with this file? Classic (Platform-native) - - Show Menubar - - Show Toolbar @@ -5945,10 +5377,6 @@ Are you sure you want to continue with this file? Clone Group... - - &XML File… - - Clear history @@ -5973,7 +5401,8 @@ Expect some bugs and minor issues, this version is meant for testing purposes. - No Tags + 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. @@ -6007,13 +5436,6 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Quit KeePassXC - - %1 Entry(s) - - - - - Please present or touch your YubiKey to continue… @@ -6026,314 +5448,41 @@ Expect some bugs and minor issues, this version is meant for testing purposes.You must restart the application to apply this setting. Would you like to restart now? + + Tags + + + + No Tags + + + + %1 Entry(s) + + + + + + + Copy Password and TOTP + + + + &XML File… + + + + XML File… + + + + Copy &URL + + Allow Screen Capture - - 1Password 1PUX... - - - - Import a 1Password 1PUX file - - - - Import… - - - - Passkeys… - - - - Import Passkey - - - - Remote S&ync… - - - - Quit Application - - - - Open About Dialog - - - - Open Database - - - - Create Database - - - - Merge From Database - - - - Create Entry - - - - Edit Entry - - - - Delete Entry - - - - Create Group - - - - Edit Group - - - - Delete Group - - - - Download All Favicons - - - - Sort Groups A-Z - - - - Sort Groups Z-A - - - - Save Database As - - - - Show Database Security - - - - Show Database Reports - - - - Show Database Settings - - - - Show Passkeys - - - - Clone Entry - - - - Move Entry Up - - - - Move Entry Down - - - - Copy Username - - - - Copy Password - - - - Show Application Settings - - - - Show Password Generator - - - - Remove Passkey From Entry - - - - Perform Auto-Type: {USERNAME} - - - - Perform Auto-Type: {USERNAME}{ENTER} - - - - Perform Auto-Type: {PASSWORD} - - - - Perform Auto-Type: {PASSWORD}{ENTER} - - - - Perform Auto-Type: {TOTP} - - - - Copy Title - - - - Copy URL - - - - Copy Notes - - - - Export to CSV - - - - Export to HTML - - - - Import KeePass1 Database - - - - Import 1Password Vault - - - - Import CSV File - - - - Show TOTP QR Code - - - - Set up TOTP - - - - Empty Recycle Bin - - - - Open Donation Website - - - - Open Bug Report - - - - Open Online Documentation - - - - Open Keyboard Shortcuts Guide - - - - Save Database Backup - - - - SSH Agent: Add Key - - - - SSH Agent: Remove Key - - - - Toggle Compact Mode - - - - Set Theme: Automatic - - - - Set Theme: Light - - - - Set Theme: Dark - - - - Set Theme: Classic - - - - Toggle Show Menubar - - - - Toggle Show Toolbar - - - - Toggle Show Preview Panel - - - - Toggle Always on Top - - - - Toggle Hide Usernames - - - - Toggle Hide Passwords - - - - Export to XML - - - - Toggle Allow Screen Capture - - - - Show Group Panel - - - - Toggle Show Group Panel - - - - Setup Remote Sync… - - - - Password Generator - - - - E&xpire Entry… - - - - Clear SSH Agent - - - - Clear all identities in ssh-agent - - ManageDatabase @@ -6391,6 +5540,26 @@ Expect some bugs and minor issues, this version is meant for testing purposes.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] @@ -6450,6 +5619,14 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + + Advanced Settings + + + + Simple Settings + + NewDatabaseWizardPageDatabaseKey @@ -6530,6 +5707,14 @@ Expect some bugs and minor issues, this version is meant for testing purposes. + + OpVaultOpenWidget + + Read Database did not produce an instance +%1 + + + OpVaultReader @@ -6603,10 +5788,6 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Unknown cipher: %1 - - AES-256/GCM is currently not supported - - Passphrase is required to decrypt this key @@ -6672,178 +5853,7 @@ Expect some bugs and minor issues, this version is meant for testing purposes. - (encrypted) - - - - - OpenSSHKeyGenDialog - - SSH Key Generator - - - - Type - - - - Bits - - - - Comment - - - - - PasskeyExportDialog - - KeePassXC - Passkey Export - - - - Filenames will be generated with title and .passkey file extension. - - - - Export entries - - - - Export Selected - - - - Cancel - - - - Export to folder - - - - Export the following passkey entries. - - - - - PasskeyExporter - - KeePassXC: Passkey Export - - - - File "%1.passkey" already exists. -Do you want to overwrite it? - - - - - Cannot open file - - - - Cannot open file "%1" for writing. - - - - Cannot write to file - - - - - PasskeyImportDialog - - KeePassXC - Passkey Import - - - - Username: %1 - - - - Group - - - - Database - - - - Import Passkey - - - - Import - - - - Cancel - - - - Entry - - - - Create new entry - - - - Relying Party: %1 - - - - Import the following passkey: - - - - Import the following passkey to this entry: - - - - Default passkeys group (Imported Passkeys) - - - - - PasskeyImporter - - Passkey file - - - - All files - - - - Cannot open file - - - - Cannot open file "%1" for reading. - - - - Open passkey file - - - - Cannot import passkey - - - - Cannot import passkey file "%1". Data is missing. - - - - Cannot import passkey file "%1". -The following data is missing: -%2 - - - - Cannot import passkey file "%1". Private key is missing or malformed. + AES-256/GCM is currently not supported @@ -7049,6 +6059,10 @@ The following data is missing: Word Count: + + Character Count: + + Word Case: @@ -7061,6 +6075,10 @@ The following data is missing: Add custom wordlist + + character + + Close @@ -7098,27 +6116,11 @@ The following data is missing: - Password Quality: %1 + Confirm Delete Wordlist - Poor - Password quality - - - - Weak - Password quality - - - - Good - Password quality - - - - Excellent - Password quality + Do you really want to delete the wordlist "%1"? @@ -7159,31 +6161,31 @@ Do you want to overwrite it? - passwordLength + Password Quality: %1 - Characters: %1 + Poor + Password quality - MIXED case + Weak + Password quality - Excluded characters: "0", "1", "l", "I", "O", "|", "﹒", "B", "8", "G", "6" + Good + Password quality - Warning: the chosen wordlist is smaller than the minimum recommended size! + Excellent + Password quality - Confirm Remove Wordlist - - - - Do you really want to remove the wordlist "%1"? + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" @@ -7234,7 +6236,7 @@ Do you want to overwrite it? - Toggle password visibility using Control + H. Open the password generator using Control + G. + Toggle password visibilty using Control + H. Open the password generator using Control + G. @@ -7253,21 +6255,6 @@ Do you want to overwrite it? - - PreviewEntryAttachmentsDialog - - Form - - - - Preview: %1 - - - - Save… - - - QMessageBox @@ -7306,10 +6293,6 @@ Do you want to overwrite it? Continue - - Continue with weak password - - QObject @@ -7709,10 +6692,6 @@ Do you want to overwrite it? Too many arguments provided. - - Path of the database. - - Target decryption time in MS for the database. @@ -7733,6 +6712,10 @@ Do you want to overwrite it? Create a new database. + + Path of the database. + + Invalid decryption time %1. @@ -7777,158 +6760,6 @@ Do you want to overwrite it? Successfully created new database. - - Unset the password for the database. - - - - Unset the key file for the database. - - - - Edit a database. - - - - Cannot use %1 and %2 at the same time. - - - - Could not change the database key. - - - - Database was not modified. - - - - Writing the database failed: %1 - - - - Successfully edited the database. - - - - Cannot remove password: The database does not have a password. - - - - Cannot remove file key: The database does not have a file key. - - - - Loading the new key file failed: %1 - - - - Found unexpected Key type %1 - - - - Cannot remove all the keys from a database. - - - - Show a database's information. - - - - UUID: - - - - Name: - - - - Description: - - - - Cipher: - - - - KDF: - - - - Recycle bin is enabled. - - - - Recycle bin is not enabled. - - - - Location - - - - Database created - - - - Last saved - - - - Unsaved changes - - - - yes - - - - no - - - - Number of groups - - - - Number of entries - - - - Number of expired entries - - - - Unique passwords - - - - Non-unique passwords - - - - Maximum password reuse - - - - Number of short passwords - - - - Number of weak passwords - - - - Entries excluded from reports - - - - Average password length - - - - %1 characters - - Word count for the diceware passphrase. @@ -7951,6 +6782,10 @@ Do you want to overwrite it? Invalid word count %1 + + The word list is too small (< 1000 items) + + Title for the entry. @@ -7975,6 +6810,10 @@ Do you want to overwrite it? Enter new password for entry: + + Writing the database failed: %1 + + Successfully edited entry %1. @@ -8095,6 +6934,10 @@ Do you want to overwrite it? Exit interactive mode. + + Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. + + Exports the content of a database to standard output in the specified format. @@ -8195,6 +7038,106 @@ Do you want to overwrite it? Successfully imported database. + + Show a database's information. + + + + UUID: + + + + Name: + + + + Description: + + + + Cipher: + + + + KDF: + + + + Recycle bin is enabled. + + + + Recycle bin is not enabled. + + + + Location + + + + Database created + + + + Last saved + + + + Unsaved changes + + + + yes + + + + no + + + + Number of groups + + + + Number of entries + + + + Number of expired entries + + + + Unique passwords + + + + Non-unique passwords + + + + Maximum password reuse + + + + Number of short passwords + + + + Number of weak passwords + + + + Entries excluded from reports + + + + Average password length + + + + %1 characters + + Unknown command %1 @@ -8363,10 +7306,6 @@ Available commands: Show the protected attributes in clear text. - - Show all the attributes of the entry. - - Show the attachments of the entry. @@ -8434,10 +7373,6 @@ Please consider generating a new key file. Invalid YubiKey serial %1 - - Please present or touch your YubiKey to continue. - - Enter password to encrypt database (optional): @@ -8697,6 +7632,18 @@ Kernel: %3 %4 file empty + + malformed string + + + + missing closing quote + + + + %1: (row, col) %2,%3 + + AES 256-bit @@ -8899,6 +7846,14 @@ Kernel: %3 %4 read password of the database from stdin + + allow app screen recordering and screenshots + + + + Locked databases. + + Database failed to lock. @@ -8907,10 +7862,6 @@ Kernel: %3 %4 Another instance of KeePassXC is already running. - - KeePassXC is not running. No open database to lock - - Fatal error while testing the cryptographic functions. @@ -8954,315 +7905,68 @@ Kernel: %3 %4 - Access to all entries is denied + Please present or touch your YubiKey to continue. - allow screenshots and app recording (Windows/macOS) + Show all the attributes of the entry. + + + + Edit a database. + + + + Could not change the database key. + + + + Database was not modified. + + + + Successfully edited the database. + + + + Loading the new key file failed: %1 + + + + Unset the password for the database. + + + + Unset the key file for the database. + + + + Cannot use %1 and %2 at the same time. + + + + Cannot remove all the keys from a database. + + + + Cannot remove password: The database does not have a password. + + + + Cannot remove file key: The database does not have a file key. + + + + Found unexpected Key type %1 Set the key file for the database. -This option is deprecated, use --set-key-file instead. +This options is deprecated, use --set-key-file instead. - Databases have been locked. - - - - Attestation not supported - - - - Credential is excluded - - - - Passkeys request canceled - - - - Invalid user verification - - - - Empty public key - - - - Invalid URL provided - - - - Passkeys - - - - AES initialization failed - - - - AES encrypt failed - - - - Failed to store in Linux Keyring - - - - Polkit returned an error: %1 - - - - Could not locate key in keyring - - - - Could not read key in keyring - - - - AES decrypt failed - - - - No Polkit authentication agent was available - - - - Polkit authorization failed - - - - No Quick Unlock provider is available - - - - Failed to init KeePassXC crypto. - - - - Failed to encrypt key data. - - - - Failed to get Windows Hello credential. - - - - Failed to decrypt key data. - - - - Origin is empty or not allowed - - - - Effective domain is not a valid domain - - - - Origin and RP ID do not match - - - - No supported algorithms were provided - - - - Wait for timer to expire - - - - Challenge is shorter than required minimum length - - - - user.id does not match the required length - - - - Favorite - Tag for favorite entries - - - - File does not exist. - - - - Cannot open file: %1 - - - - Cannot parse file: %1 at position %2 - - - - Failed to decrypt json file: %1 - - - - Invalid encKeyValidation field - - - - Invalid cipher list within encKeyValidation field - - - - Wrong password - - - - Invalid encrypted data field - - - - Invalid cipher list within encrypted data field - - - - Cannot initialize cipher - - - - Cannot decrypt data - - - - Bitwarden Import - - - - Archived - Tag for archived entries - - - - Invalid 1PUX file format: Not a valid ZIP file. - - - - Invalid 1PUX file format: Missing export.data - - - - 1Password Import - - - - Enter Shortcut - - - - Action - - - - Shortcuts - - - - Unknown passkeys error - - - - Invalid KDF iterations, cannot decrypt json file - - - - Unsupported format, ensure your Bitwarden export is password-protected - - - - Only PBKDF and Argon2 are supported, cannot decrypt json file - - - - Reset Shortcuts - - - - Double click an action to change its shortcut - - - - Filter... - - - - Shortcut Conflict - - - - Shortcut %1 conflicts with '%2'. Overwrite shortcut? - - - - Encrypted files are not supported. - - - - Proton Pass Import - - - - Delete plugin data? - - - - Delete plugin data from Entry(s)? - - - - - - - Passkey - - - - Format to use when exporting. Available choices are 'xml', 'csv' or 'html'. Defaults to 'xml'. - - - - start minimized to the system tray - - - - malformed string, possible unescaped delimiter - - - - missing closing delimiter - - - - %1, row: %2, column: %3 - - - - Tags - - - - Warning: the chosen wordlist is smaller than the minimum recommended size! - - - - Invalid Step - TOTP - - - - Invalid Digits - TOTP - - - - Fit + KeePassXC is not running. No open database to lock @@ -9300,39 +8004,20 @@ This option is deprecated, use --set-key-file instead. - - RemoteHandler - - Command `%1` did not finish in time. Process was killed. - - - - Failed to upload merged database. Command `%1` did not finish in time. Process was killed. - - - - Invalid download parameters provided. - - - - Command `%1` failed to download database. - - - - Invalid database pointer or upload parameters provided. - - - - Command `%1` exited with status code: %2 - - - - Failed to upload merged database. Command `%1` exited with status code: %2 - - - ReportsWidgetBrowserStatistics + + Exclude expired entries from the report + + + + Show only entries which have URL set + + + + Show only entries which have browser settings in custom data + + Double-click entries to edit. @@ -9400,59 +8085,44 @@ This option is deprecated, use --set-key-file instead. Exclude from reports - - Expire Entry(s)… - - - - - - - Only show entries that have a URL - - - - Only show entries that have been explicitly allowed or denied - - - - Show expired entries - - - - (Expired) - - - - Delete plugin data from Entry(s)… - - - - - ReportsWidgetHealthcheck - Show expired entries + Exclude expired entries from the report - (Expired) + Also show entries that have been excluded from reports Hover over reason to show additional details. Double-click entries to edit. + + Bad + Password quality + + Bad — password must be changed + + Poor + Password quality + + Poor — password should be changed + + Weak + Password quality + + Weak — consider changing the password @@ -9504,17 +8174,6 @@ This option is deprecated, use --set-key-file instead. Exclude from reports - - Expire Entry(s)… - - - - - - - Show entries that have been excluded from reports - - ReportsWidgetHibp @@ -9613,83 +8272,6 @@ This option is deprecated, use --set-key-file instead. Exclude from reports - - Expire Entry(s)… - - - - - - - - ReportsWidgetPasskeys - - Export - - - - Import - - - - List of entry URLs - - - - Title - - - - Path - - - - Username - - - - URLs - - - - Edit Entry… - - - - Delete Entry(s)… - - - - - - - Relying Party - - - - Show expired entries - - - - (Expired) - - - - Export Confirmation - - - - The passkey file will be vulnerable to theft and unauthorized use, if left unsecured. Are you sure you want to continue? - - - - Please wait, list of entries with passkeys is being updated… - - - - No entries with passkeys. - - ReportsWidgetStatistics @@ -9864,14 +8446,6 @@ This option is deprecated, use --set-key-file instead. No agent running, cannot list identities. - - Failed to remove all SSH identities from agent. - - - - All SSH identities removed from agent. - - SearchHelpWidget @@ -9938,10 +8512,6 @@ This option is deprecated, use --set-key-file instead. Search Help - - Save Search - - Search (%1)… Search placeholder text, %1 is the keyboard shortcut @@ -9956,7 +8526,7 @@ This option is deprecated, use --set-key-file instead. - Press Enter to search + Save Search @@ -10020,10 +8590,26 @@ This option is deprecated, use --set-key-file instead. Confirm when passwords are retrieved by clients + + <html><head/><body><p><span style=" + font-family:'-apple-system','BlinkMacSystemFont','Segoe UI','Helvetica','Arial','sans-serif','Apple Color + Emoji','Segoe UI Emoji'; font-size:14px; color:#24292e; background-color:#ffffff;">This setting does + not override disabling recycle bin prompts</span></p></body></html> + + + Confirm when clients request entry deletion + + <html><head/><body><p>This improves compatibility with certain applications + which search for password without unlocking the database first.</p><p>But enabling this may also + crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a + different value set in applications.)</p></body></html> + + + Prompt to unlock database before searching @@ -10048,14 +8634,6 @@ This option is deprecated, use --set-key-file instead. Save current changes to activate the plugin and enable editing of this section. - - <html><head/><body><p>This setting does not override disabling recycle bin prompts </p></body></html> - - - - <html><head/><body><p>This improves compatibility with certain applications which search for password without unlocking the database first.</p><p>But enabling this may also crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a different value set in applications.) </p></body></html> - - SettingsWidgetKeeShare @@ -10163,14 +8741,6 @@ This option is deprecated, use --set-key-file instead. TagModel - - Clear Search - - - - All Entries - - Expired @@ -10180,7 +8750,11 @@ This option is deprecated, use --set-key-file instead. - TOTP Entries + All Entries + + + + Clear Search @@ -10203,24 +8777,6 @@ This option is deprecated, use --set-key-file instead. - - TextAttachmentsEditWidget - - Preview - - - - - TextAttachmentsPreviewWidget - - Form - - - - Type: - - - TotpDialog @@ -10335,10 +8891,6 @@ Example: JBSWY3DPEHPK3PXP Are you sure you want to delete TOTP settings for this entry? - - Error: secret key is invalid - - URLEdit @@ -10384,6 +8936,26 @@ Example: JBSWY3DPEHPK3PXP Start storing your passwords securely in a KeePassXC database + + Create new database + + + + Open existing database + + + + Import from KeePass 1 + + + + Import from 1Password + + + + Import from CSV + + Recent databases @@ -10396,18 +8968,6 @@ Example: JBSWY3DPEHPK3PXP Welcome to KeePassXC %1 - - Create Database - - - - Open Database - - - - Import File - - WinUtils @@ -10424,8 +8984,31 @@ Example: JBSWY3DPEHPK3PXP + + WindowsHello + + Failed to init KeePassXC crypto. + + + + Failed to encrypt key data. + + + + Failed to get Windows Hello credential. + + + + Failed to decrypt key data. + + + YubiKey + + %1 No interface, slot %2 + + General: @@ -10437,6 +9020,14 @@ Example: JBSWY3DPEHPK3PXP YubiKeyEditWidget + + Refresh hardware tokens + + + + Refresh + + Hardware key slot selection @@ -10469,6 +9060,10 @@ Example: JBSWY3DPEHPK3PXP Challenge-Response set, click to change or remove + + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + + Detecting hardware keys… @@ -10477,25 +9072,28 @@ Example: JBSWY3DPEHPK3PXP No hardware keys detected + + + YubiKeyInterface - Refresh hardware keys - - - - <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed with <a href="https://keepassxc.org/docs/#faq-yubikey-howto">Challenge-Response</a>.</p> - - - - Hardware keys found, but no slots are configured + %1 Invalid slot specified - %2 YubiKeyInterfacePCSC + + (PCSC) %1 [%2] Challenge-Response - Slot %3 + + The YubiKey PCSC interface has not been initialized. + + Hardware key is currently in use. + + Could not find or access hardware key with serial number %1. Please present it to continue. @@ -10512,21 +9110,6 @@ Example: JBSWY3DPEHPK3PXP Failed to complete a challenge-response, the PCSC error code was: %1 - - (NFC) %1 [%2] - Slot %3, %4 - YubiKey display fields - - - - Press - USB Challenge-Response Key interaction request - - - - Passive - USB Challenge-Response Key no interaction required - - YubiKeyInterfaceUSB @@ -10534,6 +9117,14 @@ Example: JBSWY3DPEHPK3PXP Unknown + + (USB) %1 [%2] Configured Slot - %3 + + + + (USB) %1 [%2] Challenge-Response - Slot %3 - %4 + + Press USB Challenge-Response Key interaction request @@ -10548,6 +9139,10 @@ Example: JBSWY3DPEHPK3PXP The YubiKey USB interface has not been initialized. + + Hardware key is currently in use. + + Could not find hardware key with serial number %1. Please plug it in to continue. @@ -10564,15 +9159,5 @@ Example: JBSWY3DPEHPK3PXP Failed to complete a challenge-response, the specific error was: %1 - - %1 [%2] - Slot %3 - YubiKey NEO display fields - - - - %1 [%2] - Slot %3, %4 - YubiKey display fields - - diff --git a/share/translations/keepassxc_en_GB.ts b/share/translations/keepassxc_en_GB.ts index 1bc6cbad6..1e9f0c218 100644 --- a/share/translations/keepassxc_en_GB.ts +++ b/share/translations/keepassxc_en_GB.ts @@ -80,10 +80,6 @@ Details Details - - Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. - Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. - Remember Remember @@ -92,6 +88,10 @@ Allow Selected Allow Selected + + Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. + Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. + Deny All && Future Deny All && Future @@ -122,10 +122,6 @@ Use OpenSSH Use OpenSSH - - Use both agents - Use both agents - SSH_AUTH_SOCK override SSH_AUTH_SOCK override @@ -154,6 +150,10 @@ SSH Agent connection is working! SSH Agent connection is working! + + Use both agents + Use both agents + ApplicationSettingsWidget @@ -169,10 +169,6 @@ Security Security - - This setting cannot be enabled when minimize on unlock is enabled. - This setting cannot be enabled when minimise on unlock is enabled. - Access error for config file %1 Access error for config file %1 @@ -217,49 +213,21 @@ You must restart the application to set the new language. Would you like to restart now? You must restart the application to set the new language. Would you like to restart now? + + Reset Settings? + Reset Settings? + + + Are you sure you want to reset all general and security settings to default? + Are you sure you want to reset all general and security settings to default? + Select backup storage directory Select backup storage directory - Confirm Reset - Confirm Reset - - - Are you sure you want to reset all settings to default? - Are you sure you want to reset all settings to default? - - - Import KeePassXC Settings - Import KeePassXC Settings - - - Failed to import settings from %1, not a valid settings file. - Failed to import settings from %1, not a valid settings file. - - - Export KeePassXC Settings - Export KeePassXC Settings - - - Small - Small - - - Normal - Normal - - - Medium - Medium - - - Large - Large - - - Custom - Custom + This setting cannot be enabled when minimize on unlock is enabled. + @@ -292,10 +260,6 @@ Remember previously used databases Remember previously used databases - - recent files - recent files - Load previously open databases on startup Load previously open databases on startup @@ -312,6 +276,25 @@ Include beta releases when checking for updates Include beta releases when checking for updates + + On database unlock, show entries that + On database unlock, show entries that + + + have expired + On database unlock, show entries that... + have expired + + + days + On database unlock, show entries that will expire within %1 days + days + + + will expire within + On database unlock, show entries that... + will expire within + File Management File Management @@ -336,10 +319,22 @@ Backup database file before saving Backup database file before saving + + Backup destination + Backup destination + + + Specifies the database backup file location. Occurrences of "{DB_FILENAME}" are replaced with the filename of the saved database without extension. {TIME:<format>} is replaced with the backup time, see https://doc.qt.io/qt-5/qdatetime.html#toString. <format> defaults to format string "dd_MM_yyyy_hh-mm-ss". + Specifies the database backup file location. Occurrences of "{DB_FILENAME}" are replaced with the filename of the saved database without extension. {TIME:<format>} is replaced with the backup time, see https://doc.qt.io/qt-5/qdatetime.html#toString. <format> defaults to format string "dd_MM_yyyy_hh-mm-ss". + {DB_FILENAME}.old.kdbx {DB_FILENAME}.old.kdbx + + Choose... + Choose... + Use alternative saving method (may solve problems with Dropbox, Google Drive, GVFS, etc.) Use alternative saving method (may solve problems with Dropbox, Google Drive, GVFS, etc.) @@ -417,10 +412,6 @@ Toolbar button style: Toolbar button style: - - Show passwords in color - Show passwords in colour - Use monospaced font for notes Use monospaced font for notes @@ -507,69 +498,12 @@ Remember last typed entry for: - On database unlock, show entries that will expire within - On database unlock, show entries that will expire within + recent files + - On database unlock, show entries that will expire within - On database unlock, show entries that will expire within - - - days - number of days warning for password expiration - days - - - Destination format: - Destination format: - - - <html><head/><body><p><span style=" font-weight:600;">{DB_FILENAME}</span> is replaced with the filename of the saved database without extension</p><p><span style=" font-weight:600;">{TIME:&lt;format&gt;}</span> is replaced with the specified time format (default: dd_MM_yyyy_hh-mm-ss)</p><p>See the User Guide for more details</p></body></html> - <html><head/><body><p><span style=" font-weight:600;">{DB_FILENAME}</span> is replaced with the filename of the saved database without extension</p><p><span style=" font-weight:600;">{TIME:&lt;format&gt;}</span> is replaced with the specified time format (default: dd_MM_yyyy_hh-mm-ss)</p><p>See the User Guide for more details</p></body></html> - - - Choose folder... - Choose folder... - - - Show confirmation before moving entries to recycle bin - Show confirmation before moving entries to recycle bin - - - Copy data on double clicking field in entry view - Copy data on double clicking field in entry view - - - Show toolbar - Show toolbar - - - Show the menu bar by pressing the Alt key - Show the menu bar by pressing the Alt key - - - Show menubar - Show menubar - - - Import settings… - Import settings… - - - Export settings… - Export settings… - - - Open browser on double clicking URL field in entry view - Open browser on double clicking URL field in entry view - - - Font size: - Font size: - - - Font size selection - Font size selection + Show passwords in color + @@ -624,6 +558,10 @@ Lock databases after minimizing the window Lock databases after minimising the window + + Require password repeat when it is visible + Require password repeat when it is visible + Hide passwords when editing them Hide passwords when editing them @@ -636,6 +574,18 @@ Hide passwords in the entry preview panel Hide passwords in the entry preview panel + + Hide entry notes by default + Hide entry notes by default + + + Move entries to recycle bin without confirmation + Move entries to recycle bin without confirmation + + + Enable double click to copy the username/password entry columns + Enable double click to copy the username/password entry columns + Privacy Privacy @@ -646,19 +596,7 @@ Hide TOTP in the entry preview panel - Hide TOTP in the entry preview panel - - - Lock databases when switching user - Lock databases when switching user - - - Lock Options - Lock Options - - - Hide notes in the entry preview panel - Hide notes in the entry preview panel + @@ -704,13 +642,27 @@ Very long delay detected, max is %1: %2 - Entry does not have attribute for PICKCHARS: %1 - Entry does not have attribute for PICKCHARS: %1 + Invalid conversion type: %1 + Invalid conversion type: %1 + + + Invalid conversion syntax: %1 + Invalid conversion syntax: %1 + + + Invalid regular expression syntax %1 +%2 + Invalid regular expression syntax %1 +%2 Invalid placeholder: %1 Invalid placeholder: %1 + + Entry does not have attribute for PICKCHARS: %1 + + AutoTypeAssociationsModel @@ -752,6 +704,10 @@ AutoTypePlatformX11 + + Trying to send invalid keysym. + Trying to send invalid keysym. + Sequence aborted: Caps Lock is on Sequence aborted: Caps Lock is on @@ -764,10 +720,6 @@ Unable to get valid keycode for key: Unable to get valid keycode for key: - - Trying to send invalid keyboard symbol. - Trying to send invalid keyboard symbol. - AutoTypeSelectDialog @@ -872,13 +824,13 @@ Ctrl+4 - Use Virtual Keyboard (Windows Only)</p> Disable for this site Disable for this site - - Undo - Undo - BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + KeePassXC-Browser Save Entry + Ok Ok @@ -893,74 +845,13 @@ Please select the correct database for saving credentials. You have multiple databases open. Please select the correct database for saving credentials. - - KeePassXC - Select Database - KeePassXC - Select Database - - - - BrowserPasskeysConfirmationDialog - - Cancel - Cancel - - - Update - Update - - - Authenticate - Authenticate - - - Register new - Register new - - - Register - Register - - - Timeout in <b>%n</b> seconds... - Timeout in <b>%n</b> seconds...Timeout in <b>%n</b> seconds... - - - Relying Party: %1 - Relying Party: %1 - - - Username: %1 - Username: %1 - - - KeePassXC - Passkey credentials - KeePassXC - Passkey credentials - - - Add to existing entry - Add to existing entry - - - Existing passkey found. -Do you want to register a new passkey for: - Existing passkey found. -Do you want to register a new passkey for: - - - Select the existing passkey and press Update to replace it. - Select the existing passkey and press Update to replace it. - - - Authenticate passkey credentials for: - Authenticate passkey credentials for: - - - Do you want to register a passkey for: - Do you want to register a passkey for: - BrowserService + + KeePassXC: Create a new group + KeePassXC: Create a new group + A request for creating a new group "%1" has been received. Do you want to create this group? @@ -969,6 +860,10 @@ Do you want to create this group? Do you want to create this group? + + KeePassXC: New key association request + KeePassXC: New key association request + You have received an association request for the following database: %1 @@ -985,16 +880,28 @@ chrome-laptop. 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: Delete entry + KeePassXC: Delete entry + A request for deleting entry "%1" has been received. Do you want to delete the entry? @@ -1004,58 +911,50 @@ Do you want to delete the entry? - %1 (Passkey) - %1 (Passkey) + Converting attributes to custom data… + Converting attributes to custom data… - KeePassXC - Create a new group - KeePassXC - Create a new group + Abort + Abort - Disable - Disable + KeePassXC: Converted KeePassHTTP attributes + KeePassXC: Converted KeePassHTTP attributes - KeePassXC - Overwrite existing key? - KeePassXC - Overwrite existing key? + 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 moved %n keys to custom data. + Successfully moved %n key to custom data.Successfully moved %n keys to custom data. - KeePassXC - Update Entry - KeePassXC - Update Entry + KeePassXC: No entry with KeePassHTTP attributes found! + KeePassXC: No entry with KeePassHTTP attributes found! - KeePassXC - Delete entry - KeePassXC - Delete entry + The active database does not contain an entry with KeePassHTTP attributes. + The active database does not contain an entry with KeePassHTTP attributes. - KeePassXC - New key association request - KeePassXC - New key association request + Don't show this warning again + Don't show this warning again - Passkey - Passkey + KeePassXC: Legacy browser integration settings detected + KeePassXC: Legacy browser integration settings detected - KeePassXC - Passkey credentials - KeePassXC - Passkey credentials - - - Register a new passkey to this entry: - Register a new passkey to this entry: - - - KeePassXC - Update passkey - KeePassXC - Update passkey - - - Entry already has a passkey. -Do you want to overwrite the passkey in %1 - %2? - Entry already has a passkey. -Do you want to overwrite the passkey in %1 - %2? - - - Register - Register + 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? @@ -1076,6 +975,10 @@ Do you want to overwrite the passkey in %1 - %2? General General + + Browsers installed as snaps are currently not supported. + Browsers installed as snaps are currently not supported. + Enable integration for these browsers: Enable integration for these browsers: @@ -1247,6 +1150,26 @@ Do you want to overwrite the passkey in %1 - %2? Custom extension ID Custom extension ID + + 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 + + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 + + + Please see special instructions for browser extension use below + Please see special instructions for browser extension use below + + + <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. + <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. + + + <b>Warning:</b> The following options can be dangerous! + <b>Warning:</b> The following options can be dangerous! + Executable Files Executable Files @@ -1263,46 +1186,6 @@ Do you want to overwrite the passkey in %1 - %2? Select native messaging host folder location Select native messaging host folder location - - Allow keepassxc-proxy to list all entries with their title, URL and UUID in connected databases. - Allow keepassxc-proxy to list all entries with their title, URL and UUID in connected databases. - - - Allow limited access to all entries in connected databases (ignores site access restrictions) - Allow limited access to all entries in connected databases (ignores site access restrictions) - - - <b>Warning:</b> Only adjust these settings if necessary. - <b>Warning:</b> Only adjust these settings if necessary. - - - The custom proxy location does not exist. - The custom proxy location does not exist. - - - <b>Error:</b> The custom proxy location does not exist. Correct this in the advanced settings tab. - <b>Error:</b> The custom proxy location does not exist. Correct this in the advanced settings tab. - - - <b>Error:</b> The installed proxy executable is missing from the expected location: %1<br/>Please set a custom proxy location in the advanced settings or reinstall the application. - <b>Error:</b> The installed proxy executable is missing from the expected location: %1<br/>Please set a custom proxy location in the advanced settings or reinstall the application. - - - Allows using insecure http://localhost with passkeys for testing purposes. - Allows using insecure http://localhost with passkeys for testing purposes. - - - Allow using localhost with passkeys - Allow using localhost with passkeys - - - KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. - KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. - - - Browsers installed using Snap or Flatpak are not supported with exception to Firefox installed using Snap. - - CloneDialog @@ -1325,6 +1208,14 @@ Do you want to overwrite the passkey in %1 - %2? CsvImportWidget + + Import CSV fields + Import CSV fields + + + filename + filename + size, rows, columns size, rows, columns @@ -1433,43 +1324,50 @@ Do you want to overwrite the passkey in %1 - %2? Column %1 Column %1 + + Imported from CSV file + Imported from CSV file + + + Original data: + Original data: + + + Error(s) detected in CSV file! + Error(s) detected in CSV file! + [%n more message(s) skipped] [%n more message skipped][%n more messages skipped] - Failed to parse CSV file: %1 - Failed to parse CSV file: %1 + Error + Error - Imported from CSV file: %1 - Imported from CSV file: %1 - - - No Title Selected - No Title Selected - - - No title column was selected, entries will be hard to tell apart. -Are you sure you want to import? - No title column was selected, entries will be hard to tell apart. -Are you sure you want to import? - - - Tags - Tags + CSV import: writer has errors: +%1 + CSV import: writer has errors: +%1 CsvParserModel + + %1, %2, %3 + file info: bytes, rows, columns + %1, %2, %3 + + + %n byte(s) + %n byte%n bytes + %n row(s) - CSV row count %n row%n rows %n column(s) - CSV column count %n column%n columns @@ -1502,7 +1400,7 @@ Are you sure you want to import? Could not save, database has not been initialized! - Could not save. Database has not been initialised! + Could not save, database has not been initialised! Database file has unmerged changes. @@ -1522,14 +1420,6 @@ Backup database located at %2 Recycle Bin Recycle Bin - - Database file read error. - Database file read error. - - - No file path was provided. - - DatabaseOpenDialog @@ -1552,10 +1442,30 @@ Backup database located at %2 Password field Password field + + Enter Additional Credentials (if any): + Enter Additional Credentials (if any): + + + Key File: + Key File: + + + Key file help + Key file help + Hardware key slot selection Hardware key slot selection + + Hardware Key: + Hardware Key: + + + Hardware key help + Hardware key help + Key file to unlock the database Key file to unlock the database @@ -1568,6 +1478,14 @@ Backup database located at %2 Browse… Browse… + + Refresh hardware tokens + Refresh hardware tokens + + + Refresh + Refresh + Unlock Database Unlock Database @@ -1630,6 +1548,10 @@ To prevent this error from appearing, you must go to "Database Settings / S Retry with empty password Retry with empty password + + Failed to authenticate with Touch ID + Failed to authenticate with Touch ID + Failed to open key file: %1 Failed to open key file: %1 @@ -1662,69 +1584,41 @@ To prevent this error from appearing, you must go to "Database Settings / S Cannot use database file as key file Cannot use database file as key file + + You cannot use your database file as a key file. +If you do not have a key file, please leave the field empty. + You cannot use your database file as a key file. +If you do not have a key file, please leave the field empty. + + + Detecting hardware keys… + Detecting hardware keys… + + + No hardware keys detected + No hardware keys detected + + + Select hardware key… + Select hardware key… + + + <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information…</p> + <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information…</p> + + + <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +<p>Click for more information…</p> + <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +<p>Click for more information…</p> + authenticate to access the database - authenticate to access the database + - Failed to authenticate with Quick Unlock: %1 - Failed to authenticate with Quick Unlock: %1 - - - Select Key File: - Select Key File: - - - <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!</p> - <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!</p> - - - Use hardware key [Serial: %1] - Use hardware key [Serial: %1] - - - Use hardware key - Use hardware key - - - Your database file is NOT a key file! -If you don't have a key file or don't know what that is, you don't have to select one. - Your database file is NOT a key file! -If you don't have a key file or don't know what that is, you don't have to select one. - - - KeePassXC database file selected - KeePassXC database file selected - - - The file you selected looks like a database file. -A database file is NOT a key file! - -Are you sure you want to continue with this file?. - The file you selected looks like a database file. -A database file is NOT a key file! - -Are you sure you want to continue with this file?. - - - No hardware keys found. - No hardware keys found. - - - Refresh Hardware Keys - Refresh Hardware Keys - - - Click to add a key file. - Click to add a key file. - - - <a href="#" style="text-decoration: underline">I have a key file</a> - <a href="#" style="text-decoration: underline">I have a key file</a> - - - Hardware keys found, but no slots are configured. - Hardware keys found, but no slots are configured. + Failed to authenticate with Windows Hello: %1 + @@ -1736,6 +1630,10 @@ Are you sure you want to continue with this file?. DatabaseSettingsDialog + + Advanced Settings + Advanced Settings + General General @@ -1760,22 +1658,6 @@ Are you sure you want to continue with this file?. Maintenance Maintenance - - KeeShare - KeeShare - - - Secret Service Integration - Secret Service Integration - - - Remote Sync - Remote Sync - - - Database Settings: %1 - Database Settings: %1 - DatabaseSettingsWidgetBrowser @@ -1783,6 +1665,18 @@ Are you sure you want to continue with this file?. KeePassXC-Browser settings KeePassXC-Browser settings + + Convert KeePassHTTP data + Convert KeePassHTTP data + + + Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data + Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data + + + Refresh database root group ID + Refresh database root group ID + Disconnect all browsers Disconnect all browsers @@ -1791,10 +1685,6 @@ Are you sure you want to continue with this file?. Forget all site-specific settings on entries Forget all site-specific settings on entries - - Refresh database root group ID - Refresh database root group ID - Stored keys Stored keys @@ -1843,10 +1733,18 @@ This may prevent connection to the browser plugin. Do you really want to disconnect all browsers? This may prevent connection to the browser plugin. + + KeePassXC: No keys found + KeePassXC: No keys found + No shared encryption keys found in KeePassXC settings. No shared encryption keys found in KeePassXC settings. + + KeePassXC: Removed keys from database + KeePassXC: Removed keys from database + Successfully removed %n encryption key(s) from KeePassXC settings. Successfully removed %n encryption key from KeePassXC settings.Successfully removed %n encryption keys from KeePassXC settings. @@ -1865,14 +1763,32 @@ Permissions to access entries will be revoked. 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 convert all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + Do you really want to convert all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + Refresh database ID Refresh database ID @@ -1883,26 +1799,6 @@ This is only necessary if your database is a copy of another and the browser ext Do you really want refresh the database ID? This is only necessary if your database is a copy of another and the browser extension cannot connect. - - Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data - Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data - - - No keys found - No keys found - - - Removed keys from database - Removed keys from database - - - Removed permissions - Removed permissions - - - No entry with permissions found! - No entry with permissions found! - DatabaseSettingsWidgetDatabaseKey @@ -1942,18 +1838,6 @@ Are you sure you want to continue without a password? Failed to change database credentials Failed to change database credentials - - Weak password - Weak password - - - This is a weak password! For better protection of your secrets, you should choose a stronger password. - This is a weak password! For better protection of your secrets, you should choose a stronger password. - - - The provided password does not meet the minimum quality requirement. - The provided password does not meet the minimum quality requirement. - DatabaseSettingsWidgetEncryption @@ -1961,6 +1845,14 @@ Are you sure you want to continue without a password? Decryption Time: Decryption Time: + + Change existing decryption time + Change existing decryption time + + + Change + Change + Decryption time in seconds Decryption time in seconds @@ -2041,6 +1933,11 @@ Are you sure you want to continue without a password? KDBX 3 KDBX 3 + + unchanged + Database decryption time is unchanged + unchanged + Number of rounds too high Key transformation rounds @@ -2093,18 +1990,6 @@ If you keep this number, your database will not be protected from brute force at Threads for parallel execution (KDF settings) thread threads - - Encryption Settings: - Encryption Settings: - - - Basic - Basic - - - Advanced - Advanced - DatabaseSettingsWidgetFdoSecrets @@ -2202,102 +2087,29 @@ This action is not reversible. the oldest history items of an entry will be removed such that only the specified amount of entries remain at most. - When saving this setting or editing an entry -the oldest history items of an entry will be -removed such that only the specified amount -of entries remain at most. + Limit the amount of history items per entry to: - Limit the amount of history items per entry to: + When saving this setting or editing an entry the oldest history items of an entry will be removed such that the remaining history items add up to the specified amount at most. - When saving this setting or editing an entry -the oldest history items of an entry will be -removed such that the remaining history items -add up to the specified amount at most. + Limit the total size of history items per entry to: - Limit the total size of history items per entry to: + Move entries to a recycle bin group instead of deleting them from the database. Entries deleted from the recycle bin are removed from the database. - Move entries to a recycle bin group -instead of deleting them from the database. -Entries deleted from the recycle bin are -removed from the database. - - - Autosave delay since last change - Autosave delay since last change - - - Autosave delay - Autosave delay - - - Autosave delay since last change in minutes - Autosave delay since last change in minutes - - - min - min - - - Autosave delay since last change checkbox - Autosave delay since last change checkbox - - - Public Database Metadata - Public Database Metadata - - - Warning: the following settings are not encrypted. - Warning: the following settings are not encrypted. - - - Display name: - Display name: - - - Publically visible display name used on the unlock dialog - Publically visible display name used on the unlock dialogue - - - Database public display name - Database public display name - - - Display color: - Display colour: - - - Publically visible color used on the unlock dialog - Publically visible colour used on the unlock dialogue - - - Database public display color chooser - Database public display colour chooser - - - Clear - Clear - - - Display icon: - Display icon: - - - Select Database Icon - Select Database Icon + @@ -2394,141 +2206,6 @@ removed from the database. Database description field - - DatabaseSettingsWidgetRemote - - Sync Commands - Sync Commands - - - Remove - Remove - - - Command Settings - Command Settings - - - Name - Name - - - Save - Save - - - Download - Download - - - Command: - Command: - - - Download command field - Download command field - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - - - Input: - Input: - - - Download input field - Download input field - - - Upload - Upload - - - Upload command field - Upload command field - - - e.g.: "sftp user@hostname" or "scp {TEMP_DATABASE} user@hostname:DatabaseOnRemote.kdbx" - e.g.: "sftp user@hostname" or "scp {TEMP_DATABASE} user@hostname:DatabaseOnRemote.kdbx" - - - Upload input field - Upload input field - - - Name cannot be empty. - Name cannot be empty. - - - Test - Test - - - Download command cannot be empty. - Download command cannot be empty. - - - Download failed with error: %1 - Download failed with error: %1 - - - Download finished, but file %1 could not be found. - Download finished, but file %1 could not be found. - - - Download successful. - Download successful. - - - Save Remote Settings - Save Remote Settings - - - You have unsaved changes. Do you want to save them? - You have unsaved changes. Do you want to save them? - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - - - e.g.: -put {TEMP_DATABASE} DatabaseOnRemote.kdbx -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - e.g.: -put {TEMP_DATABASE} DatabaseOnRemote.kdbx -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - - - Timeout: - Timeout: - - - seconds - seconds - - DatabaseTabWidget @@ -2561,10 +2238,26 @@ This is definitely a bug, please report it to the developers. CSV file CSV file + + Select CSV file + Select CSV file + Merge database Merge database + + KeePass 1 database + KeePass 1 database + + + Open KeePass 1 database + Open KeePass 1 database + + + Open OPVault + Open OPVault + Export database to CSV file Export database to CSV file @@ -2577,18 +2270,6 @@ This is definitely a bug, please report it to the developers. Writing the HTML file failed. Writing the HTML file failed. - - Export database to XML file - Export database to XML file - - - XML file - XML file - - - Writing the XML file failed - Writing the XML file failed - Export Confirmation Export Confirmation @@ -2597,23 +2278,35 @@ This is definitely a bug, please report it to the developers. You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? + + New Database + New Database + + + %1 [New Database] + Database tab name modifier + %1 [New Database] + %1 [Locked] Database tab name modifier %1 [Locked] - %1 [Temporary] - Database tab name modifier - %1 [Temporary] + Export database to XML file + + + + XML file + + + + Writing the XML file failed + DatabaseWidget - - Searches and Tags - Searches and Tags - Searching… Searching… @@ -2662,10 +2355,6 @@ This is definitely a bug, please report it to the developers. Expired entries Expired entries - - Entries expiring within %1 day(s) - Entries expiring within %1 dayEntries expiring within %1 days - No current database. No current database. @@ -2690,18 +2379,6 @@ This is definitely a bug, please report it to the developers. No Results No Results - - Save - Save - - - Enter a unique name or overwrite an existing search from the list: - Enter a unique name or overwrite an existing search from the list: - - - Save Search - Save Search - Lock Database? Lock Database? @@ -2730,6 +2407,26 @@ Save changes? 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? + 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. +Error: %1 + Could not open the new database file while attempting to autoreload. +Error: %1 + Disable safe saves? Disable safe saves? @@ -2772,94 +2469,25 @@ Disable safe saves and try again? Could not find database file: %1 Could not find database file: %1 - - New Database - New Database + + Entries expiring within %1 day(s) + Entries expiring within %1 dayEntries expiring within %1 days - %1 [New Database] - Database tab name modifier - %1 [New Database] + Searches and Tags + - Remote Sync did not contain any download or upload commands. - Remote Sync did not contain any download or upload commands. + Enter a unique name or overwrite an existing search from the list: + - Remote sync '%1' completed successfully! - Remote sync '%1' completed successfully! + Save + Save - Remote sync '%1' failed: %2 - Remote sync '%1' failed: %2 - - - Error while saving database %1: %2 - Error while saving database %1: %2 - - - Downloading... - Downloading... - - - Uploading... - Uploading... - - - Syncing... - Syncing... - - - Remove passkey from entry - Remove passkey from entry - - - Do you want to remove the passkey from this entry? - Do you want to remove the passkey from this entry? - - - The database file "%1" was modified externally - The database file "%1" was modified externally - - - Do you want to load the changes? - Do you want to load the changes? - - - Reload database - Reload database - - - Reloading database… - Reloading database… - - - Reload canceled - Reload cancelled - - - Reload successful - Reload successful - - - Reload pending user action… - Reload pending user action… - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes<br>Ignore the changes on disk until save<br>Discard unsaved changes - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes<br>Ignore the changes on disk until save<br>Discard unsaved changes - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes then save<br>Overwrite the changes on disk<br>Discard unsaved changes - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes then save<br>Overwrite the changes on disk<br>Discard unsaved changes - - - Database file overwritten. - Database file overwritten. - - - Database file on disk cannot be unlocked with current credentials.<br>Enter new credentials and/or present hardware key to continue. - Database file on disk cannot be unlocked with current credentials.<br>Enter new credentials and/or present hardware key to continue. + Save Search + @@ -2912,6 +2540,10 @@ Disable safe saves and try again? n/a n/a + + (encrypted) + (encrypted) + Select private key Select private key @@ -2998,10 +2630,6 @@ Would you like to correct it? Hide Hide - - %n hour(s) - %n hour%n hours - %n week(s) %n week%n weeks @@ -3014,9 +2642,9 @@ Would you like to correct it? %n year(s) %n year%n years - - Failed to decrypt SSH key, ensure password is correct. - Failed to decrypt SSH key, ensure password is correct. + + %n hour(s) + %n hour%n hours @@ -3136,20 +2764,10 @@ Would you like to correct it? Add new window association Add new window association - - + - Add item - + - Remove selected window association Remove selected window association - - - - Remove item - - - Window title: Window title: @@ -3174,9 +2792,23 @@ Would you like to correct it? Custom Auto-Type sequence for this window Custom Auto-Type sequence for this window + + + + Add item + + + + + - + Remove item + - + EditEntryWidgetBrowser + + These settings affect to the entry's behaviour with the browser extension. + These settings affect the entry's behaviour with the browser extension. + General General @@ -3189,14 +2821,26 @@ Would you like to correct it? Skip Auto-Submit for this entry Skip Auto-Submit for this entry + + Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. + Only send this setting to the browser for HTTP Auth dialogues. If enabled, normal login forms will not show this entry for selection. + Use this entry only with HTTP Basic Auth Use this entry only with HTTP Basic Auth + + Do not send this setting to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. + Do not send this setting to the browser for HTTP Auth dialogues. If enabled, HTTP Auth dialogues will not show this entry for selection. + Do not use this entry with HTTP Basic Auth Do not use this entry with HTTP Basic Auth + + Additional URL's + Additional URLs + Add Add @@ -3209,22 +2853,6 @@ Would you like to correct it? Edit Edit - - These settings affect the entry's behaviour with the browser extension. - These settings affect the entry's behaviour with the browser extension. - - - Additional URLs - Additional URLs - - - Only send this entry to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. - Only send this entry to the browser for HTTP Auth dialogues. If enabled, normal login forms will not show this entry for selection. - - - Do not send this entry to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. - Do not send this entry to the browser for HTTP Auth dialogues. If enabled, HTTP Auth dialogues will not show this entry for selection. - EditEntryWidgetHistory @@ -3321,35 +2949,35 @@ Would you like to correct it? &Username: - &Username: + &Title: - &Title: + &Password: - &Password: + UR&L: - UR&L: + &Notes: - &Notes: + Toggle notes visibility - Toggle notes visibility + T&ags: - T&ags: + &Expires: - &Expires: + @@ -3390,6 +3018,19 @@ Would you like to correct it? Private key Private key + + External file + External file + + + Browser for key file + Browser for key file + + + Browse… + Button for opening file dialog + Browse… + Attachment Attachment @@ -3406,23 +3047,6 @@ Would you like to correct it? Remove from agent Remove from agent - - External file - External file - - - Browser for key file - Browser for key file - - - Browse… - Button for opening file dialog - Browse… - - - Generate - Generate - Select attachment file Select attachment file @@ -3447,10 +3071,6 @@ Would you like to correct it? seconds seconds - - Clear agent - Clear agent - EditGroupWidget @@ -3462,6 +3082,10 @@ Would you like to correct it? Icon Icon + + Browser Integration + Browser Integration + Properties Properties @@ -3478,10 +3102,6 @@ Would you like to correct it? Group has unsaved changes Group has unsaved changes - - Browser Integration - Browser Integration - Enable Enable @@ -3535,19 +3155,11 @@ Would you like to correct it? Omit WWW subdomain from matching: - Omit WWW subdomain from matching: + Omit WWW subdomain from matching toggle for this and sub groups - Omit WWW subdomain from matching toggle for this and sub groups - - - Restrict matching to given browser key: - Restrict matching to given browser key: - - - Restrict matching to given browser key toggle for this and sub groups - Restrict matching to given browser key toggle for this and sub groups + @@ -3696,7 +3308,7 @@ Supported extensions are: %1. Auto-Type toggle for this and sub groups - Auto-Type toggle for this group and subgroups + Auto-Type toggle for this and subgroups Notes: @@ -3781,6 +3393,10 @@ Supported extensions are: %1. Unable to fetch favicon. Unable to fetch favicon. + + You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security + You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security + Existing icon selected. Existing icon selected. @@ -3813,10 +3429,6 @@ Supported extensions are: %1. The following icon(s) failed: The following icon failed:The following icons failed: - - You can enable the DuckDuckGo website icon service under Application Settings -> Security - You can enable the DuckDuckGo website icon service under Application Settings -> Security - EditWidgetProperties @@ -3893,24 +3505,6 @@ This may cause the affected plugins to malfunction. %1 - Clone %1 - Clone - - Passkey - Passkey - - - Invalid conversion type: %1 - Invalid conversion type: %1 - - - Invalid conversion syntax: %1 - Invalid conversion syntax: %1 - - - Invalid regular expression syntax %1 -%2 - Invalid regular expression syntax %1 -%2 - EntryAttachments @@ -3919,21 +3513,6 @@ This may cause the affected plugins to malfunction. Cannot open file "%1" - - EntryAttachmentsDialog - - Form - Form - - - File name - File name - - - File contents... - File contents... - - EntryAttachmentsModel @@ -3971,6 +3550,14 @@ This may cause the affected plugins to malfunction. Remove Remove + + Rename selected attachment + Rename selected attachment + + + Rename + Rename + Open selected attachment Open selected attachment @@ -4046,6 +3633,12 @@ This may cause the affected plugins to malfunction. Confirm Overwrite Attachment Confirm Overwrite Attachment + + Attachment "%1" already exists. +Would you like to overwrite the existing attachment? + Attachment "%1" already exists. +Would you like to overwrite the existing attachment? + Confirm Attachment Confirm Attachment @@ -4080,24 +3673,6 @@ Error: %1 Saving updated attachment failed. Error: %1 - - Attachment "%1" already exists. -Would you like to overwrite the existing attachment? - Attachment "%1" already exists. -Would you like to overwrite the existing attachment? - - - New - New - - - Preview - Preview - - - Failed to preview an attachment: Attachment not found - Failed to preview an attachment: Attachment not found - EntryAttributesModel @@ -4292,14 +3867,6 @@ Would you like to overwrite the existing attachment? Has TOTP Has TOTP - - Background Color - Background Colour - - - Group Path - Group Path - EntryPreviewWidget @@ -4320,8 +3887,8 @@ Would you like to overwrite the existing attachment? Password - URL - URL + Notes + Notes Expiration @@ -4340,8 +3907,8 @@ Would you like to overwrite the existing attachment? Username - Notes - Notes + URL + URL Advanced @@ -4391,10 +3958,6 @@ Would you like to overwrite the existing attachment? Never Never - - Double click to copy value - Double click to copy value - Enabled Enabled @@ -4404,8 +3967,8 @@ Would you like to overwrite the existing attachment? Disabled - Double click to copy to clipboard - Double click to copy to clipboard + Double click to copy value + @@ -4414,10 +3977,6 @@ Would you like to overwrite the existing attachment? Invalid URL Invalid URL - - Duplicate URL - Duplicate URL - EntryView @@ -4433,10 +3992,6 @@ Would you like to overwrite the existing attachment? Reset to defaults Reset to defaults - - + %1 entry(s)... - + %1 entry...+ %1 entries... - ExportDialog @@ -4658,199 +4213,6 @@ You can enable the DuckDuckGo website icon service in the security section of th Downloading favicons (%1/%2)… - - ImportWizard - - Import Wizard - Import Wizard - - - - ImportWizardPageReview - - WizardPage - WizardPage - - - Entry count: %1 - Entry count: %1 - - - Group - Group - - - Title - Title - - - Username - Username - - - Password - Password - - - Url - URL - - - Could not load key file. - Could not load key file. - - - Could not open remote database. Password or key file may be incorrect. - Could not open remote database. Password or key file may be incorrect. - - - - ImportWizardPageSelect - - Form - Form - - - Import File Selection - Import File Selection - - - Password: - Password: - - - Key File: - Key File: - - - Browse… - Browse… - - - Import Into: - Import Into: - - - New Database - New Database - - - No unlocked databases available - No unlocked databases available - - - Existing Database: - Existing Database: - - - Import File: - Import File: - - - Comma Separated Values (.csv) - Comma Separated Values (.csv) - - - 1Password Export (.1pux) - 1Password Export (.1pux) - - - 1Password Vault (.opvault) - 1Password Vault (.opvault) - - - Bitwarden (.json) - Bitwarden (.json) - - - KeePass 1 Database (.kdb) - KeePass 1 Database (.kdb) - - - Open OPVault - Open OPVault - - - Select import file - Select import file - - - All files - All files - - - Key files - Key files - - - Select key file - Select key file - - - Comma Separated Values - Comma Separated Values - - - 1Password Export - 1Password Export - - - Bitwarden JSON Export - Bitwarden JSON Export - - - 1Password Vault - 1Password Vault - - - KeePass1 Database - KeePass1 Database - - - Proton Pass (.json) - Proton Pass (.json) - - - Proton Pass JSON Export - Proton Pass JSON Export - - - Temporary Database - Temporary Database - - - Command: - Command: - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - - - Input: - Input: - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last commend `exit` has to be sent - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last commend `exit` has to be sent - - - - Remote Database (.kdbx) - Remote Database (.kdbx) - - KMessageWidget @@ -5285,6 +4647,17 @@ Line %2, column %3 Failed to open private key + + KeePass1OpenWidget + + Import KeePass1 Database + Import KeePass1 Database + + + Unable to open the database. + Unable to open the database. + + KeePass1Reader @@ -5641,6 +5014,10 @@ Are you sure you want to continue with this file? &Recent Databases &Recent Databases + + &Import + &Import + &Export &Export @@ -5661,10 +5038,6 @@ Are you sure you want to continue with this file? TOTP TOTP - - Tags - Tags - &Groups &Groups @@ -5709,18 +5082,34 @@ Are you sure you want to continue with this file? &New Database… &New Database… + + Create a new database + Create a new database + &Merge From Database… &Merge From Database… + + Merge from another KDBX database + Merge from another KDBX database + &New Entry… &New Entry… + + Add a new entry + Add a new entry + &Edit Entry… &Edit Entry… + + View or edit entry + View or edit entry + &Delete Entry… &Delete Entry… @@ -5729,6 +5118,10 @@ Are you sure you want to continue with this file? &New Group… &New Group… + + Add a new group + Add a new group + &Edit Group… &Edit Group… @@ -5761,10 +5154,18 @@ Are you sure you want to continue with this file? Database &Reports… Database &Reports… + + Statistics, health check, etc. + Statistics, health check, etc. + &Database Settings… &Database Settings… + + Database settings + Database settings + &Clone Entry… &Clone Entry… @@ -5773,18 +5174,34 @@ Are you sure you want to continue with this file? Move u&p Move u&p + + Move entry one step up + Move entry one step up + Move do&wn Move do&wn + + Move entry one step down + Move entry one step down + Copy &Username Copy &Username + + Copy username to clipboard + Copy username to clipboard + Copy &Password Copy &Password + + Copy password to clipboard + Copy password to clipboard + &Settings &Settings @@ -5818,13 +5235,21 @@ Are you sure you want to continue with this file? &Title - Copy &URL - Copy &URL + Copy title to clipboard + Copy title to clipboard + + + Copy URL to clipboard + Copy URL to clipboard &Notes &Notes + + Copy notes to clipboard + Copy notes to clipboard + &CSV File… &CSV File… @@ -5837,14 +5262,26 @@ Are you sure you want to continue with this file? KeePass 1 Database… KeePass 1 Database… + + Import a KeePass 1 database + Import a KeePass 1 database + 1Password Vault… 1Password Vault… + + Import a 1Password Vault + Import a 1Password Vault + CSV File… CSV File… + + Import a CSV file + Import a CSV file + Show TOTP Show TOTP @@ -5861,10 +5298,6 @@ Are you sure you want to continue with this file? Copy &TOTP Copy &TOTP - - Copy Password and TOTP - Copy Password and TOTP - E&mpty recycle bin E&mpty recycle bin @@ -5889,6 +5322,10 @@ Are you sure you want to continue with this file? &Online Help &Online Help + + Go to online documentation + Go to online documentation + &User Guide &User Guide @@ -5933,10 +5370,6 @@ Are you sure you want to continue with this file? Classic (Platform-native) Classic (Platform-native) - - Show Menubar - Show Menubar - Show Toolbar Show Toolbar @@ -5961,10 +5394,6 @@ Are you sure you want to continue with this file? Clone Group... Clone Group... - - &XML File… - &XML File… - Clear history Clear history @@ -5992,8 +5421,10 @@ Expect some bugs and minor issues, this version is meant for testing purposes. - No Tags - No Tags + 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. Restore Entry(s) @@ -6023,10 +5454,6 @@ Expect some bugs and minor issues; this version is meant for testing purposes.Quit KeePassXC Quit KeePassXC - - %1 Entry(s) - %1 Entry%1 Entries - Please present or touch your YubiKey to continue… Please present or touch your YubiKey to continue… @@ -6039,313 +5466,37 @@ Expect some bugs and minor issues; this version is meant for testing purposes.You must restart the application to apply this setting. Would you like to restart now? You must restart the application to apply this setting. Would you like to restart now? + + Tags + Tags + + + No Tags + + + + %1 Entry(s) + + + + Copy Password and TOTP + + + + &XML File… + + + + XML File… + + + + Copy &URL + + Allow Screen Capture - Allow Screen Capture - - - 1Password 1PUX... - 1Password 1PUX... - - - Import a 1Password 1PUX file - Import a 1Password 1PUX file - - - Import… - Import… - - - Passkeys… - Passkeys… - - - Import Passkey - Import Passkey - - - Remote S&ync… - Remote S&ync… - - - Quit Application - Quit Application - - - Open About Dialog - Open About Dialogue - - - Open Database - Open Database - - - Create Database - Create Database - - - Merge From Database - Merge From Database - - - Create Entry - Create Entry - - - Edit Entry - Edit Entry - - - Delete Entry - Delete Entry - - - Create Group - Create Group - - - Edit Group - Edit Group - - - Delete Group - Delete Group - - - Download All Favicons - Download All Favicons - - - Sort Groups A-Z - Sort Groups A-Z - - - Sort Groups Z-A - Sort Groups Z-A - - - Save Database As - Save Database As - - - Show Database Security - Show Database Security - - - Show Database Reports - Show Database Reports - - - Show Database Settings - Show Database Settings - - - Show Passkeys - Show Passkeys - - - Clone Entry - Clone Entry - - - Move Entry Up - Move Entry Up - - - Move Entry Down - Move Entry Down - - - Copy Username - Copy Username - - - Copy Password - Copy Password - - - Show Application Settings - Show Application Settings - - - Show Password Generator - Show Password Generator - - - Remove Passkey From Entry - Remove Passkey From Entry - - - Perform Auto-Type: {USERNAME} - Perform Auto-Type: {USERNAME} - - - Perform Auto-Type: {USERNAME}{ENTER} - Perform Auto-Type: {USERNAME}{ENTER} - - - Perform Auto-Type: {PASSWORD} - Perform Auto-Type: {PASSWORD} - - - Perform Auto-Type: {PASSWORD}{ENTER} - Perform Auto-Type: {PASSWORD}{ENTER} - - - Perform Auto-Type: {TOTP} - Perform Auto-Type: {TOTP} - - - Copy Title - Copy Title - - - Copy URL - Copy URL - - - Copy Notes - Copy Notes - - - Export to CSV - Export to CSV - - - Export to HTML - Export to HTML - - - Import KeePass1 Database - Import KeePass1 Database - - - Import 1Password Vault - Import 1Password Vault - - - Import CSV File - Import CSV File - - - Show TOTP QR Code - Show TOTP QR Code - - - Set up TOTP - Set up TOTP - - - Empty Recycle Bin - Empty Recycle Bin - - - Open Donation Website - Open Donation Website - - - Open Bug Report - Open Bug Report - - - Open Online Documentation - Open Online Documentation - - - Open Keyboard Shortcuts Guide - Open Keyboard Shortcuts Guide - - - Save Database Backup - Save Database Backup - - - SSH Agent: Add Key - SSH Agent: Add Key - - - SSH Agent: Remove Key - SSH Agent: Remove Key - - - Toggle Compact Mode - Toggle Compact Mode - - - Set Theme: Automatic - Set Theme: Automatic - - - Set Theme: Light - Set Theme: Light - - - Set Theme: Dark - Set Theme: Dark - - - Set Theme: Classic - Set Theme: Classic - - - Toggle Show Menubar - Toggle Show Menubar - - - Toggle Show Toolbar - Toggle Show Toolbar - - - Toggle Show Preview Panel - Toggle Show Preview Panel - - - Toggle Always on Top - Toggle Always on Top - - - Toggle Hide Usernames - Toggle Hide Usernames - - - Toggle Hide Passwords - Toggle Hide Passwords - - - Export to XML - Export to XML - - - Toggle Allow Screen Capture - Toggle Allow Screen Capture - - - Show Group Panel - Show Group Panel - - - Toggle Show Group Panel - Toggle Show Group Panel - - - Setup Remote Sync… - Setup Remote Sync… - - - Password Generator - Password Generator - - - E&xpire Entry… - E&xpire Entry… - - - Clear SSH Agent - Clear SSH Agent - - - Clear all identities in ssh-agent - Clear all identities in ssh-agent + @@ -6404,6 +5555,26 @@ Expect some bugs and minor issues; this version is meant for testing purposes.Overwriting %1 [%2] Overwriting %1 [%2] + + older entry merged from database "%1" + older entry merged from database "%1" + + + Adding backup for older target %1 [%2] + Adding backup for older target %1 [%2] + + + Adding backup for older source %1 [%2] + Adding backup for older source %1 [%2] + + + Reapplying older target entry on top of newer source %1 [%2] + Reapplying older target entry on top of newer source %1 [%2] + + + Reapplying older source entry on top of newer target %1 [%2] + Reapplying older source entry on top of newer target %1 [%2] + Synchronizing from newer source %1 [%2] Synchronising from newer source %1 [%2] @@ -6463,6 +5634,14 @@ Expect some bugs and minor issues; this version is meant for testing purposes.Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. Here you can adjust the database encryption settings. Don't worry; you can change them later in the database settings. + + Advanced Settings + Advanced Settings + + + Simple Settings + Simple Settings + NewDatabaseWizardPageDatabaseKey @@ -6497,25 +5676,6 @@ Expect some bugs and minor issues; this version is meant for testing purposes.Please fill in the display name and an optional description for your new database: - - NewEntryAttachmentsDialog - - Attachment name cannot be empty - Attachment name cannot be empty - - - Attachment with the same name already exists - Attachment with the same name already exists - - - Save attachment - Save attachment - - - New entry attachment - New entry attachment - - NixUtils @@ -6562,6 +5722,15 @@ Expect some bugs and minor issues; this version is meant for testing purposes.Expected %1 bytes of clear-text, found %2 + + OpVaultOpenWidget + + Read Database did not produce an instance +%1 + Read Database did not produce an instance +%1 + + OpVaultReader @@ -6635,10 +5804,6 @@ Expect some bugs and minor issues; this version is meant for testing purposes.Unknown cipher: %1 Unknown cipher: %1 - - AES-256/GCM is currently not supported - AES-256/GCM is currently not supported - Passphrase is required to decrypt this key Passphrase is required to decrypt this key @@ -6704,183 +5869,8 @@ Expect some bugs and minor issues; this version is meant for testing purposes.Unexpected EOF when writing private key - (encrypted) - (encrypted) - - - - OpenSSHKeyGenDialog - - SSH Key Generator - SSH Key Generator - - - Type - Type - - - Bits - Bits - - - Comment - Comment - - - - PasskeyExportDialog - - KeePassXC - Passkey Export - KeePassXC - Passkey Export - - - Filenames will be generated with title and .passkey file extension. - Filenames will be generated with title and .passkey file extension. - - - Export entries - Export entries - - - Export Selected - Export Selected - - - Cancel - Cancel - - - Export to folder - Export to folder - - - Export the following passkey entries. - Export the following passkey entries. - - - - PasskeyExporter - - KeePassXC: Passkey Export - KeePassXC: Passkey Export - - - File "%1.passkey" already exists. -Do you want to overwrite it? - - File "%1.passkey" already exists. -Do you want to overwrite it? - - - - Cannot open file - Cannot open file - - - Cannot open file "%1" for writing. - Cannot open file "%1" for writing. - - - Cannot write to file - Cannot write to file - - - - PasskeyImportDialog - - KeePassXC - Passkey Import - KeePassXC - Passkey Import - - - Username: %1 - Username: %1 - - - Group - Group - - - Database - Database - - - Import Passkey - Import Passkey - - - Import - Import - - - Cancel - Cancel - - - Entry - Entry - - - Create new entry - Create new entry - - - Relying Party: %1 - Relying Party: %1 - - - Import the following passkey: - Import the following passkey: - - - Import the following passkey to this entry: - Import the following passkey to this entry: - - - Default passkeys group (Imported Passkeys) - Default passkeys group (Imported Passkeys) - - - - PasskeyImporter - - Passkey file - Passkey file - - - All files - All files - - - Cannot open file - Cannot open file - - - Cannot open file "%1" for reading. - Cannot open file "%1" for reading. - - - Open passkey file - Open passkey file - - - Cannot import passkey - Cannot import passkey - - - Cannot import passkey file "%1". Data is missing. - Cannot import passkey file "%1". Data is missing. - - - Cannot import passkey file "%1". -The following data is missing: -%2 - Cannot import passkey file "%1". -The following data is missing: -%2 - - - Cannot import passkey file "%1". Private key is missing or malformed. - Cannot import passkey file "%1". Private key is missing or malformed. + AES-256/GCM is currently not supported + @@ -7085,6 +6075,10 @@ The following data is missing: Word Count: Word Count: + + Character Count: + Character Count: + Word Case: Word Case: @@ -7097,6 +6091,10 @@ The following data is missing: Add custom wordlist Add custom wordlist + + character + character + Close Close @@ -7133,30 +6131,6 @@ The following data is missing: Entropy: %1 bit Entropy: %1 bit - - Password Quality: %1 - Password Quality: %1 - - - Poor - Password quality - Poor - - - Weak - Password quality - Weak - - - Good - Password quality - Good - - - Excellent - Password quality - Excellent - Confirm Delete Wordlist Confirm Delete Wordlist @@ -7204,20 +6178,32 @@ Do you want to overwrite it? Special Characters - passwordLength - passwordLength + Password Quality: %1 + Password Quality: %1 - Characters: %1 - Characters: %1 + Poor + Password quality + Poor - MIXED case - MIXED case + Weak + Password quality + Weak - Excluded characters: "0", "1", "l", "I", "O", "|", "﹒", "B", "8", "G", "6" - Excluded characters: "0", "1", "l", "I", "O", "|", "﹒", "B", "8", "G", "6" + Good + Password quality + Good + + + Excellent + Password quality + Excellent + + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" @@ -7244,7 +6230,7 @@ Do you want to overwrite it? Quality: %1 - Quality: %1 + Poor @@ -7267,8 +6253,8 @@ Do you want to overwrite it? Excellent - Toggle password visibility using Control + H. Open the password generator using Control + G. - Toggle password visibility using Control + H. Open the password generator using Control + G. + Toggle password visibilty using Control + H. Open the password generator using Control + G. + @@ -7286,21 +6272,6 @@ Do you want to overwrite it? Press &Tab between characters - - PreviewEntryAttachmentsDialog - - Preview entry attachment - Preview entry attachment - - - No preview available - No preview available - - - Image format not supported - Image format not supported - - QMessageBox @@ -7339,10 +6310,6 @@ Do you want to overwrite it? Continue Continue - - Continue with weak password - Continue with weak password - QObject @@ -7736,10 +6703,6 @@ Do you want to overwrite it? Too many arguments provided. Too many arguments provided. - - Path of the database. - Path of the database. - Target decryption time in MS for the database. Target decryption time in MS for the database. @@ -7760,6 +6723,10 @@ Do you want to overwrite it? Create a new database. Create a new database. + + Path of the database. + Path of the database. + Invalid decryption time %1. Invalid decryption time %1. @@ -7804,158 +6771,6 @@ Do you want to overwrite it? Successfully created new database. Successfully created new database. - - Unset the password for the database. - Unset the password for the database. - - - Unset the key file for the database. - Unset the key file for the database. - - - Edit a database. - Edit a database. - - - Cannot use %1 and %2 at the same time. - Cannot use %1 and %2 at the same time. - - - Could not change the database key. - Could not change the database key. - - - Database was not modified. - Database was not modified. - - - Writing the database failed: %1 - Writing the database failed: %1 - - - Successfully edited the database. - Successfully edited the database. - - - Cannot remove password: The database does not have a password. - Cannot remove password: The database does not have a password. - - - Cannot remove file key: The database does not have a file key. - Cannot remove file key: The database does not have a file key. - - - Loading the new key file failed: %1 - Loading the new key file failed: %1 - - - Found unexpected Key type %1 - Found unexpected Key type %1 - - - Cannot remove all the keys from a database. - Cannot remove all the keys from a database. - - - Show a database's information. - Show a database's information. - - - UUID: - UUID: - - - Name: - Name: - - - Description: - Description: - - - Cipher: - Cipher: - - - KDF: - KDF: - - - Recycle bin is enabled. - Recycle bin is enabled. - - - Recycle bin is not enabled. - Recycle bin is not enabled. - - - Location - Location - - - Database created - Database created - - - Last saved - Last saved - - - Unsaved changes - Unsaved changes - - - yes - yes - - - no - no - - - Number of groups - Number of groups - - - Number of entries - Number of entries - - - Number of expired entries - Number of expired entries - - - Unique passwords - Unique passwords - - - Non-unique passwords - Non-unique passwords - - - Maximum password reuse - Maximum password reuse - - - Number of short passwords - Number of short passwords - - - Number of weak passwords - Number of weak passwords - - - Entries excluded from reports - Entries excluded from reports - - - Average password length - Average password length - - - %1 characters - %1 character(s) - Word count for the diceware passphrase. Word count for the diceware passphrase. @@ -7979,6 +6794,10 @@ Do you want to overwrite it? Invalid word count %1 Invalid word count %1 + + The word list is too small (< 1000 items) + The word list is too small (< 1000 items) + Title for the entry. Title for the entry. @@ -8003,6 +6822,10 @@ Do you want to overwrite it? 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. @@ -8123,6 +6946,10 @@ Do you want to overwrite it? Exit interactive mode. Exit interactive mode. + + Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. + Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. + Exports the content of a database to standard output in the specified format. Exports the content of a database to standard output in the specified format. @@ -8223,6 +7050,106 @@ Do you want to overwrite it? Successfully imported database. Successfully imported database. + + Show a database's information. + Show a database's information. + + + UUID: + UUID: + + + Name: + Name: + + + Description: + Description: + + + Cipher: + Cipher: + + + KDF: + KDF: + + + Recycle bin is enabled. + Recycle bin is enabled. + + + Recycle bin is not enabled. + Recycle bin is not enabled. + + + Location + Location + + + Database created + Database created + + + Last saved + Last saved + + + Unsaved changes + Unsaved changes + + + yes + yes + + + no + no + + + Number of groups + Number of groups + + + Number of entries + Number of entries + + + Number of expired entries + Number of expired entries + + + Unique passwords + Unique passwords + + + Non-unique passwords + Non-unique passwords + + + Maximum password reuse + Maximum password reuse + + + Number of short passwords + Number of short passwords + + + Number of weak passwords + Number of weak passwords + + + Entries excluded from reports + Entries excluded from reports + + + Average password length + Average password length + + + %1 characters + %1 character(s) + Unknown command %1 Unknown command %1 @@ -8395,10 +7322,6 @@ Available commands: Show the protected attributes in clear text. Show the protected attributes in clear text. - - Show all the attributes of the entry. - Show all the attributes of the entry. - Show the attachments of the entry. Show the attachments of the entry. @@ -8469,10 +7392,6 @@ Please consider generating a new key file. Invalid YubiKey serial %1 Invalid YubiKey serial %1 - - Please present or touch your YubiKey to continue. - Please present or touch your YubiKey to continue. - Enter password to encrypt database (optional): Enter password to encrypt database (optional): @@ -8661,7 +7580,7 @@ Kernel: %3 %4 Botan library must be at least %1, found %2.%3.%4 - Botan library must be at least %1, found %2.%3.%4 + Cryptographic libraries: @@ -8711,6 +7630,18 @@ Kernel: %3 %4 file empty file empty + + malformed string + malformed string + + + missing closing quote + missing closing quote + + + %1: (row, col) %2,%3 + %1: (row, col) %2,%3 + AES 256-bit AES 256-bit @@ -8790,12 +7721,12 @@ Kernel: %3 %4 %1 ms milliseconds - %1 ms%1ms + %1ms%1ms %1 s seconds - %1 s%1s + %1s%1s Do you really want to delete the entry "%1" for good? @@ -8889,6 +7820,14 @@ Kernel: %3 %4 read password of the database from stdin read password of the database from stdin + + allow app screen recordering and screenshots + allow app screen recordering and screenshots + + + Locked databases. + Locked databases. + Database failed to lock. Database failed to lock. @@ -8897,10 +7836,6 @@ Kernel: %3 %4 Another instance of KeePassXC is already running. Another instance of KeePassXC is already running. - - KeePassXC is not running. No open database to lock - KeePassXC is not running. No open database to lock - Fatal error while testing the cryptographic functions. Fatal error while testing the cryptographic functions. @@ -8933,312 +7868,81 @@ Kernel: %3 %4 Warning: Failed to block screenshot capture on a top-level window. - Warning: Failed to block screenshot capture on a top-level window. + Invalid Cipher - Invalid Cipher + Invalid KDF - Invalid KDF + - Access to all entries is denied - Access to all entries is denied + Please present or touch your YubiKey to continue. + Please present or touch your YubiKey to continue. - allow screenshots and app recording (Windows/macOS) - allow screenshots and app recording (Windows/macOS) + Show all the attributes of the entry. + + + + Edit a database. + + + + Could not change the database key. + + + + Database was not modified. + + + + Successfully edited the database. + + + + Loading the new key file failed: %1 + + + + Unset the password for the database. + + + + Unset the key file for the database. + + + + Cannot use %1 and %2 at the same time. + + + + Cannot remove all the keys from a database. + + + + Cannot remove password: The database does not have a password. + + + + Cannot remove file key: The database does not have a file key. + + + + Found unexpected Key type %1 + Set the key file for the database. -This option is deprecated, use --set-key-file instead. - Set the key file for the database. -This option is deprecated, use --set-key-file instead. - - - Databases have been locked. - Databases have been locked. - - - Attestation not supported - Attestation not supported - - - Credential is excluded - Credential is excluded - - - Passkeys request canceled - Passkeys request canceled - - - Invalid user verification - Invalid user verification - - - Empty public key - Empty public key - - - Invalid URL provided - Invalid URL provided - - - Passkeys - Passkeys - - - AES initialization failed - AES initialisation failed - - - AES encrypt failed - AES encrypt failed - - - Failed to store in Linux Keyring - Failed to store in Linux Keyring - - - Polkit returned an error: %1 - Polkit returned an error: %1 - - - Could not locate key in keyring - Could not locate key in keyring - - - Could not read key in keyring - Could not read key in keyring - - - AES decrypt failed - AES decrypt failed - - - No Polkit authentication agent was available - No Polkit authentication agent was available - - - Polkit authorization failed - Polkit authorisation failed - - - No Quick Unlock provider is available - No Quick Unlock provider is available - - - Failed to init KeePassXC crypto. - Failed to init KeePassXC crypto. - - - Failed to encrypt key data. - Failed to encrypt key data. - - - Failed to get Windows Hello credential. - Failed to get Windows Hello credential. - - - Failed to decrypt key data. - Failed to decrypt key data. - - - Origin is empty or not allowed - Origin is empty or not allowed - - - Effective domain is not a valid domain - Effective domain is not a valid domain - - - Origin and RP ID do not match - Origin and RP ID do not match - - - No supported algorithms were provided - No supported algorithms were provided - - - Wait for timer to expire - Wait for timer to expire - - - Challenge is shorter than required minimum length - Challenge is shorter than required minimum length - - - user.id does not match the required length - user.id does not match the required length - - - Favorite - Tag for favorite entries - Favourite - - - File does not exist. - File does not exist. - - - Cannot open file: %1 - Cannot open file: %1 - - - Cannot parse file: %1 at position %2 - Cannot parse file: %1 at position %2 - - - Failed to decrypt json file: %1 - Failed to decrypt json file: %1 - - - Invalid encKeyValidation field - Invalid encKeyValidation field - - - Invalid cipher list within encKeyValidation field - Invalid cipher list within encKeyValidation field - - - Wrong password - Wrong password - - - Invalid encrypted data field - Invalid encrypted data field - - - Invalid cipher list within encrypted data field - Invalid cipher list within encrypted data field - - - Cannot initialize cipher - Cannot initialise cipher - - - Cannot decrypt data - Cannot decrypt data - - - Bitwarden Import - Bitwarden Import - - - Archived - Tag for archived entries - Archived - - - Invalid 1PUX file format: Not a valid ZIP file. - Invalid 1PUX file format: Not a valid ZIP file. - - - Invalid 1PUX file format: Missing export.data - Invalid 1PUX file format: Missing export.data - - - 1Password Import - 1Password Import - - - Enter Shortcut - Enter Shortcut - - - Action - Action - - - Shortcuts - Shortcuts - - - Unknown passkeys error - Unknown passkeys error - - - Invalid KDF iterations, cannot decrypt json file - Invalid KDF iterations, cannot decrypt json file - - - Unsupported format, ensure your Bitwarden export is password-protected - Unsupported format, ensure your Bitwarden export is password-protected - - - Only PBKDF and Argon2 are supported, cannot decrypt json file - Only PBKDF and Argon2 are supported, cannot decrypt json file - - - Reset Shortcuts - Reset Shortcuts - - - Double click an action to change its shortcut - Double click an action to change its shortcut - - - Filter... - Filter... - - - Shortcut Conflict - Shortcut Conflict - - - Shortcut %1 conflicts with '%2'. Overwrite shortcut? - Shortcut %1 conflicts with '%2'. Overwrite shortcut? - - - Cannot generate valid passphrases because the wordlist is too short - Cannot generate valid passphrases because the wordlist is too short - - - Encrypted files are not supported. - Encrypted files are not supported. - - - Proton Pass Import - Proton Pass Import - - - Delete plugin data? - Delete plugin data? - - - Delete plugin data from Entry(s)? - Delete plugin data from Entry(s)?Delete plugin data from Entry(s)? - - - Passkey - Passkey - - - Format to use when exporting. Available choices are 'xml', 'csv' or 'html'. Defaults to 'xml'. +This options is deprecated, use --set-key-file instead. - start minimized to the system tray + KeePassXC is not running. No open database to lock - - malformed string, possible unescaped delimiter - - - - missing closing delimiter - - - - %1, row: %2, column: %3 - - - - Tags - Tags - QtIOCompressor @@ -9274,39 +7978,20 @@ This option is deprecated, use --set-key-file instead. Internal zlib error: - - RemoteHandler - - Command `%1` did not finish in time. Process was killed. - Command `%1` did not finish in time. Process was killed. - - - Failed to upload merged database. Command `%1` did not finish in time. Process was killed. - Failed to upload merged database. Command `%1` did not finish in time. Process was killed. - - - Invalid download parameters provided. - Invalid download parameters provided. - - - Command `%1` failed to download database. - Command `%1` failed to download database. - - - Invalid database pointer or upload parameters provided. - Invalid database pointer or upload parameters provided. - - - Command `%1` exited with status code: %2 - Command `%1` exited with status code: %2 - - - Failed to upload merged database. Command `%1` exited with status code: %2 - Failed to upload merged database. Command `%1` exited with status code: %2 - - ReportsWidgetBrowserStatistics + + Exclude expired entries from the report + Exclude expired entries from the report + + + Show only entries which have URL set + Show only entries which have URL set + + + Show only entries which have browser settings in custom data + Show only entries which have browser settings in custom data + Double-click entries to edit. Double-click entries to edit. @@ -9371,53 +8056,44 @@ This option is deprecated, use --set-key-file instead. Exclude from reports Exclude from reports - - Expire Entry(s)… - Expire Entry(s)…Expire Entry(s)… - - - Only show entries that have a URL - Only show entries that have a URL - - - Only show entries that have been explicitly allowed or denied - Only show entries that have been explicitly allowed or denied - - - Show expired entries - Show expired entries - - - (Expired) - (Expired) - - - Delete plugin data from Entry(s)… - Delete plugin data from Entry(s)…Delete plugin data from Entry(s)… - ReportsWidgetHealthcheck - Show expired entries - Show expired entries + Exclude expired entries from the report + Exclude expired entries from the report - (Expired) - (Expired) + Also show entries that have been excluded from reports + Also show entries that have been excluded from reports Hover over reason to show additional details. Double-click entries to edit. Hover over reason to show additional details. Double-click entries to edit. + + Bad + Password quality + Bad + Bad — password must be changed Bad — password must be changed + + Poor + Password quality + Poor + Poor — password should be changed Poor — password should be changed + + Weak + Password quality + Weak + Weak — consider changing the password Weak — consider changing the password @@ -9466,14 +8142,6 @@ This option is deprecated, use --set-key-file instead. Exclude from reports Exclude from reports - - Expire Entry(s)… - Expire Entry(s)…Expire Entry(s)… - - - Show entries that have been excluded from reports - Show entries that have been excluded from reports - ReportsWidgetHibp @@ -9569,77 +8237,6 @@ This option is deprecated, use --set-key-file instead. Exclude from reports Exclude from reports - - Expire Entry(s)… - Expire Entry(s)…Expire Entry(s)… - - - - ReportsWidgetPasskeys - - Export - Export - - - Import - Import - - - List of entry URLs - List of entry URLs - - - Title - Title - - - Path - Path - - - Username - Username - - - URLs - URLs - - - Edit Entry… - Edit Entry… - - - Delete Entry(s)… - Delete Entry…Delete Entries… - - - Relying Party - Relying Party - - - Show expired entries - Show expired entries - - - (Expired) - (Expired) - - - Export Confirmation - Export Confirmation - - - The passkey file will be vulnerable to theft and unauthorized use, if left unsecured. Are you sure you want to continue? - The passkey file will be vulnerable to theft and unauthorized use, if left unsecured. Are you sure you want to continue? - - - Please wait, list of entries with passkeys is being updated… - Please wait, list of entries with passkeys is being updated… - - - No entries with passkeys. - No entries with passkeys. - ReportsWidgetStatistics @@ -9814,14 +8411,6 @@ This option is deprecated, use --set-key-file instead. No agent running, cannot list identities. No agent running. Cannot list identities. - - Failed to remove all SSH identities from agent. - Failed to remove all SSH identities from agent. - - - All SSH identities removed from agent. - All SSH identities removed from agent. - SearchHelpWidget @@ -9888,10 +8477,6 @@ This option is deprecated, use --set-key-file instead. Search Help Search Help - - Save Search - Save Search - Search (%1)… Search placeholder text, %1 is the keyboard shortcut @@ -9905,6 +8490,10 @@ This option is deprecated, use --set-key-file instead. Limit search to selected group Limit search to selected group + + Save Search + + SettingsClientModel @@ -9966,10 +8555,34 @@ This option is deprecated, use --set-key-file instead. Confirm when passwords are retrieved by clients Confirm when passwords are retrieved by clients + + <html><head/><body><p><span style=" + font-family:'-apple-system','BlinkMacSystemFont','Segoe UI','Helvetica','Arial','sans-serif','Apple Color + Emoji','Segoe UI Emoji'; font-size:14px; color:#24292e; background-color:#ffffff;">This setting does + not override disabling recycle bin prompts</span></p></body></html> + + <html><head/><body><p><span style=" + font-family:'-apple-system','BlinkMacSystemFont','Segoe UI','Helvetica','Arial','sans-serif','Apple Color + Emoji','Segoe UI Emoji'; font-size:14px; color:#24292e; background-color:#ffffff;">This setting does + not override disabling recycle bin prompts</span></p></body></html> + + Confirm when clients request entry deletion Confirm when clients request entry deletion + + <html><head/><body><p>This improves compatibility with certain applications + which search for password without unlocking the database first.</p><p>But enabling this may also + crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a + different value set in applications.)</p></body></html> + + <html><head/><body><p>This improves compatibility with certain applications + which search for password without unlocking the database first.</p><p>But enabling this may also + crash the client if the database cannot be unlocked within a certain timeout. (Usually 25s, but may be a + different value set in applications.)</p></body></html> + + Prompt to unlock database before searching Prompt to unlock database before searching @@ -9994,14 +8607,6 @@ This option is deprecated, use --set-key-file instead. Save current changes to activate the plugin and enable editing of this section. Save current changes to activate the plugin and enable editing of this section. - - <html><head/><body><p>This setting does not override disabling recycle bin prompts </p></body></html> - <html><head/><body><p>This setting does not override disabling recycle bin prompts </p></body></html> - - - <html><head/><body><p>This improves compatibility with certain applications which search for password without unlocking the database first.</p><p>But enabling this may also crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a different value set in applications.) </p></body></html> - <html><head/><body><p>This improves compatibility with certain applications which search for password without unlocking the database first.</p><p>But enabling this may also crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a different value set in applications.) </p></body></html> - SettingsWidgetKeeShare @@ -10109,14 +8714,6 @@ This option is deprecated, use --set-key-file instead. TagModel - - Clear Search - Clear Search - - - All Entries - All Entries - Expired Expired @@ -10125,24 +8722,32 @@ This option is deprecated, use --set-key-file instead. Weak Passwords Weak Passwords + + All Entries + + + + Clear Search + + TagView Remove Search - Remove Search + Remove Tag - Remove Tag + Confirm Remove Tag - Confirm Remove Tag + Remove tag "%1" from all entries in this database? - Remove tag "%1" from all entries in this database? + @@ -10302,6 +8907,26 @@ Example: JBSWY3DPEHPK3PXP 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 1Password + Import from 1Password + + + Import from CSV + Import from CSV + Recent databases Recent databases @@ -10314,18 +8939,6 @@ Example: JBSWY3DPEHPK3PXP Welcome to KeePassXC %1 Welcome to KeePassXC %1 - - Create Database - Create Database - - - Open Database - Open Database - - - Import File - Import File - WinUtils @@ -10342,8 +8955,31 @@ Example: JBSWY3DPEHPK3PXP Could not register global shortcut + + WindowsHello + + Failed to init KeePassXC crypto. + Failed to init KeePassXC crypto. + + + Failed to encrypt key data. + Failed to encrypt key data. + + + Failed to get Windows Hello credential. + Failed to get Windows Hello credential. + + + Failed to decrypt key data. + Failed to decrypt key data. + + YubiKey + + %1 No interface, slot %2 + %1 No interface, slot %2 + General: General: @@ -10355,6 +8991,14 @@ Example: JBSWY3DPEHPK3PXP YubiKeyEditWidget + + Refresh hardware tokens + Refresh hardware tokens + + + Refresh + Refresh + Hardware key slot selection Hardware key slot selection @@ -10387,6 +9031,10 @@ Example: JBSWY3DPEHPK3PXP Challenge-Response set, click to change or remove Challenge-Response set, click to change or remove + + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + Detecting hardware keys… Detecting hardware keys… @@ -10395,25 +9043,28 @@ Example: JBSWY3DPEHPK3PXP No hardware keys detected No hardware keys detected + + + YubiKeyInterface - Refresh hardware keys - Refresh hardware keys - - - <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed with <a href="https://keepassxc.org/docs/#faq-yubikey-howto">Challenge-Response</a>.</p> - <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed with <a href="https://keepassxc.org/docs/#faq-yubikey-howto">Challenge-Response</a>.</p> - - - Hardware keys found, but no slots are configured - Hardware keys found, but no slots are configured + %1 Invalid slot specified - %2 + %1 Invalid slot specified - %2 YubiKeyInterfacePCSC + + (PCSC) %1 [%2] Challenge-Response - Slot %3 + (PCSC) %1 [%2] Challenge-Response - Slot %3 + The YubiKey PCSC interface has not been initialized. The YubiKey PCSC interface has not been initialised. + + Hardware key is currently in use. + Hardware key is currently in use. + Could not find or access hardware key with serial number %1. Please present it to continue. Could not find or access hardware key with serial number %1. Please present it to continue. @@ -10430,21 +9081,6 @@ Example: JBSWY3DPEHPK3PXP Failed to complete a challenge-response, the PCSC error code was: %1 Failed to complete a challenge-response. The PCSC error code was: %1 - - (NFC) %1 [%2] - Slot %3, %4 - YubiKey display fields - (NFC) %1 [%2] - Slot %3, %4 - - - Press - USB Challenge-Response Key interaction request - Press - - - Passive - USB Challenge-Response Key no interaction required - Passive - YubiKeyInterfaceUSB @@ -10452,6 +9088,14 @@ Example: JBSWY3DPEHPK3PXP Unknown Unknown + + (USB) %1 [%2] Configured Slot - %3 + (USB) %1 [%2] Configured Slot - %3 + + + (USB) %1 [%2] Challenge-Response - Slot %3 - %4 + (USB) %1 [%2] Challenge-Response - Slot %3 - %4 + Press USB Challenge-Response Key interaction request @@ -10466,6 +9110,10 @@ Example: JBSWY3DPEHPK3PXP The YubiKey USB interface has not been initialized. The YubiKey USB interface has not been initialised. + + Hardware key is currently in use. + Hardware key is currently in use. + Could not find hardware key with serial number %1. Please plug it in to continue. Could not find hardware key with serial number %1. Please plug it in to continue. @@ -10482,15 +9130,5 @@ Example: JBSWY3DPEHPK3PXP Failed to complete a challenge-response, the specific error was: %1 Failed to complete a challenge-response. The specific error was: %1 - - %1 [%2] - Slot %3 - YubiKey NEO display fields - %1 [%2] - Slot %3 - - - %1 [%2] - Slot %3, %4 - YubiKey display fields - %1 [%2] - Slot %3, %4 - \ No newline at end of file diff --git a/share/translations/keepassxc_en_US.ts b/share/translations/keepassxc_en_US.ts index 334f79c29..5e71bb893 100644 --- a/share/translations/keepassxc_en_US.ts +++ b/share/translations/keepassxc_en_US.ts @@ -80,10 +80,6 @@ Details Details - - Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. - Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. - Remember Remember @@ -92,6 +88,10 @@ Allow Selected Allow Selected + + Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. + Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. + Deny All && Future Deny All && Future @@ -122,10 +122,6 @@ Use OpenSSH Use OpenSSH - - Use both agents - Use both agents - SSH_AUTH_SOCK override SSH_AUTH_SOCK override @@ -154,6 +150,10 @@ SSH Agent connection is working! SSH Agent connection is working! + + Use both agents + Use both agents + ApplicationSettingsWidget @@ -169,10 +169,6 @@ Security Security - - This setting cannot be enabled when minimize on unlock is enabled. - This setting cannot be enabled when minimize on unlock is enabled. - Access error for config file %1 Access error for config file %1 @@ -217,49 +213,21 @@ You must restart the application to set the new language. Would you like to restart now? You must restart the application to set the new language. Would you like to restart now? + + Reset Settings? + Reset Settings? + + + Are you sure you want to reset all general and security settings to default? + Are you sure you want to reset all general and security settings to default? + Select backup storage directory Select backup storage directory - Confirm Reset - Confirm Reset - - - Are you sure you want to reset all settings to default? - Are you sure you want to reset all settings to default? - - - Import KeePassXC Settings - Import KeePassXC Settings - - - Failed to import settings from %1, not a valid settings file. - Failed to import settings from %1, not a valid settings file. - - - Export KeePassXC Settings - Export KeePassXC Settings - - - Small - Small - - - Normal - Normal - - - Medium - Medium - - - Large - Large - - - Custom - Custom + This setting cannot be enabled when minimize on unlock is enabled. + This setting cannot be enabled when minimize on unlock is enabled. @@ -292,10 +260,6 @@ Remember previously used databases Remember previously used databases - - recent files - recent files - Load previously open databases on startup Load previously open databases on startup @@ -312,6 +276,25 @@ Include beta releases when checking for updates Include beta releases when checking for updates + + On database unlock, show entries that + On database unlock, show entries that + + + have expired + On database unlock, show entries that... + have expired + + + days + On database unlock, show entries that will expire within %1 days + days + + + will expire within + On database unlock, show entries that... + will expire within + File Management File Management @@ -336,10 +319,22 @@ Backup database file before saving Backup database file before saving + + Backup destination + Backup destination + + + Specifies the database backup file location. Occurrences of "{DB_FILENAME}" are replaced with the filename of the saved database without extension. {TIME:<format>} is replaced with the backup time, see https://doc.qt.io/qt-5/qdatetime.html#toString. <format> defaults to format string "dd_MM_yyyy_hh-mm-ss". + Specifies the database backup file location. Occurrences of "{DB_FILENAME}" are replaced with the filename of the saved database without extension. {TIME:<format>} is replaced with the backup time, see https://doc.qt.io/qt-5/qdatetime.html#toString. <format> defaults to format string "dd_MM_yyyy_hh-mm-ss". + {DB_FILENAME}.old.kdbx {DB_FILENAME}.old.kdbx + + Choose... + Choose... + Use alternative saving method (may solve problems with Dropbox, Google Drive, GVFS, etc.) Use alternative saving method (may solve problems with Dropbox, Google Drive, GVFS, etc.) @@ -417,10 +412,6 @@ Toolbar button style: Toolbar button style: - - Show passwords in color - Show passwords in color - Use monospaced font for notes Use monospaced font for notes @@ -507,69 +498,12 @@ Remember last typed entry for: - On database unlock, show entries that will expire within - On database unlock, show entries that will expire within + recent files + recent files - On database unlock, show entries that will expire within - On database unlock, show entries that will expire within - - - days - number of days warning for password expiration - days - - - Destination format: - Destination format: - - - <html><head/><body><p><span style=" font-weight:600;">{DB_FILENAME}</span> is replaced with the filename of the saved database without extension</p><p><span style=" font-weight:600;">{TIME:&lt;format&gt;}</span> is replaced with the specified time format (default: dd_MM_yyyy_hh-mm-ss)</p><p>See the User Guide for more details</p></body></html> - <html><head/><body><p><span style=" font-weight:600;">{DB_FILENAME}</span> is replaced with the filename of the saved database without extension</p><p><span style=" font-weight:600;">{TIME:&lt;format&gt;}</span> is replaced with the specified time format (default: dd_MM_yyyy_hh-mm-ss)</p><p>See the User Guide for more details</p></body></html> - - - Choose folder... - Choose folder... - - - Show confirmation before moving entries to recycle bin - Show confirmation before moving entries to recycle bin - - - Copy data on double clicking field in entry view - Copy data on double clicking field in entry view - - - Show toolbar - Show toolbar - - - Show the menu bar by pressing the Alt key - Show the menu bar by pressing the Alt key - - - Show menubar - Show menubar - - - Import settings… - Import settings… - - - Export settings… - Export settings… - - - Open browser on double clicking URL field in entry view - Open browser on double clicking URL field in entry view - - - Font size: - Font size: - - - Font size selection - Font size selection + Show passwords in color + Show passwords in color @@ -624,6 +558,10 @@ Lock databases after minimizing the window Lock databases after minimizing the window + + Require password repeat when it is visible + Require password repeat when it is visible + Hide passwords when editing them Hide passwords when editing them @@ -636,6 +574,18 @@ Hide passwords in the entry preview panel Hide passwords in the entry preview panel + + Hide entry notes by default + Hide entry notes by default + + + Move entries to recycle bin without confirmation + Move entries to recycle bin without confirmation + + + Enable double click to copy the username/password entry columns + Enable double click to copy the username/password entry columns + Privacy Privacy @@ -648,18 +598,6 @@ Hide TOTP in the entry preview panel Hide TOTP in the entry preview panel - - Lock databases when switching user - Lock databases when switching user - - - Lock Options - Lock Options - - - Hide notes in the entry preview panel - Hide notes in the entry preview panel - AutoType @@ -704,13 +642,27 @@ Very long delay detected, max is %1: %2 - Entry does not have attribute for PICKCHARS: %1 - Entry does not have attribute for PICKCHARS: %1 + Invalid conversion type: %1 + Invalid conversion type: %1 + + + Invalid conversion syntax: %1 + Invalid conversion syntax: %1 + + + Invalid regular expression syntax %1 +%2 + Invalid regular expression syntax %1 +%2 Invalid placeholder: %1 Invalid placeholder: %1 + + Entry does not have attribute for PICKCHARS: %1 + Entry does not have attribute for PICKCHARS: %1 + AutoTypeAssociationsModel @@ -752,6 +704,10 @@ AutoTypePlatformX11 + + Trying to send invalid keysym. + Trying to send invalid keysym. + Sequence aborted: Caps Lock is on Sequence aborted: Caps Lock is on @@ -764,10 +720,6 @@ Unable to get valid keycode for key: Unable to get valid keycode for key: - - Trying to send invalid keyboard symbol. - Trying to send invalid keyboard symbol. - AutoTypeSelectDialog @@ -872,13 +824,13 @@ Ctrl+4 - Use Virtual Keyboard (Windows Only)</p> Disable for this site Disable for this site - - Undo - Undo - BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + KeePassXC-Browser Save Entry + Ok Ok @@ -893,74 +845,13 @@ Please select the correct database for saving credentials. You have multiple databases open. Please select the correct database for saving credentials. - - KeePassXC - Select Database - KeePassXC - Select Database - - - - BrowserPasskeysConfirmationDialog - - Cancel - Cancel - - - Update - Update - - - Authenticate - Authenticate - - - Register new - Register new - - - Register - Register - - - Timeout in <b>%n</b> seconds... - Timeout in <b>%n</b> second...Timeout in <b>%n</b> seconds... - - - Relying Party: %1 - Relying Party: %1 - - - Username: %1 - Username: %1 - - - KeePassXC - Passkey credentials - KeePassXC - Passkey credentials - - - Add to existing entry - Add to existing entry - - - Existing passkey found. -Do you want to register a new passkey for: - Existing passkey found. -Do you want to register a new passkey for: - - - Select the existing passkey and press Update to replace it. - Select the existing passkey and press Update to replace it. - - - Authenticate passkey credentials for: - Authenticate passkey credentials for: - - - Do you want to register a passkey for: - Do you want to register a passkey for: - BrowserService + + KeePassXC: Create a new group + KeePassXC: Create a new group + A request for creating a new group "%1" has been received. Do you want to create this group? @@ -969,6 +860,10 @@ Do you want to create this group? Do you want to create this group? + + KeePassXC: New key association request + KeePassXC: New key association request + You have received an association request for the following database: %1 @@ -985,16 +880,28 @@ chrome-laptop. 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: Delete entry + KeePassXC: Delete entry + A request for deleting entry "%1" has been received. Do you want to delete the entry? @@ -1004,58 +911,50 @@ Do you want to delete the entry? - %1 (Passkey) - %1 (Passkey) + Converting attributes to custom data… + Converting attributes to custom data… - KeePassXC - Create a new group - KeePassXC - Create a new group + Abort + Abort - Disable - Disable + KeePassXC: Converted KeePassHTTP attributes + KeePassXC: Converted KeePassHTTP attributes - KeePassXC - Overwrite existing key? - KeePassXC - Overwrite existing key? + 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 moved %n keys to custom data. + Successfully moved %n keys to custom data.Successfully moved %n keys to custom data. - KeePassXC - Update Entry - KeePassXC - Update Entry + KeePassXC: No entry with KeePassHTTP attributes found! + KeePassXC: No entry with KeePassHTTP attributes found! - KeePassXC - Delete entry - KeePassXC - Delete entry + The active database does not contain an entry with KeePassHTTP attributes. + The active database does not contain an entry with KeePassHTTP attributes. - KeePassXC - New key association request - KeePassXC - New key association request + Don't show this warning again + Don't show this warning again - Passkey - Passkey + KeePassXC: Legacy browser integration settings detected + KeePassXC: Legacy browser integration settings detected - KeePassXC - Passkey credentials - KeePassXC - Passkey credentials - - - Register a new passkey to this entry: - Register a new passkey to this entry: - - - KeePassXC - Update passkey - KeePassXC - Update passkey - - - Entry already has a passkey. -Do you want to overwrite the passkey in %1 - %2? - Entry already has a passkey. -Do you want to overwrite the passkey in %1 - %2? - - - Register - Register + 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? @@ -1076,6 +975,10 @@ Do you want to overwrite the passkey in %1 - %2? General General + + Browsers installed as snaps are currently not supported. + Browsers installed as snaps are currently not supported. + Enable integration for these browsers: Enable integration for these browsers: @@ -1247,6 +1150,26 @@ Do you want to overwrite the passkey in %1 - %2? Custom extension ID Custom extension ID + + 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 + + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 + + + Please see special instructions for browser extension use below + Please see special instructions for browser extension use below + + + <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. + <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. + + + <b>Warning:</b> The following options can be dangerous! + <b>Warning:</b> The following options can be dangerous! + Executable Files Executable Files @@ -1263,46 +1186,6 @@ Do you want to overwrite the passkey in %1 - %2? Select native messaging host folder location Select native messaging host folder location - - Allow keepassxc-proxy to list all entries with their title, URL and UUID in connected databases. - - - - Allow limited access to all entries in connected databases (ignores site access restrictions) - - - - <b>Warning:</b> Only adjust these settings if necessary. - <b>Warning:</b> Only adjust these settings if necessary. - - - The custom proxy location does not exist. - The custom proxy location does not exist. - - - <b>Error:</b> The custom proxy location does not exist. Correct this in the advanced settings tab. - <b>Error:</b> The custom proxy location does not exist. Correct this in the advanced settings tab. - - - <b>Error:</b> The installed proxy executable is missing from the expected location: %1<br/>Please set a custom proxy location in the advanced settings or reinstall the application. - <b>Error:</b> The installed proxy executable is missing from the expected location: %1<br/>Please set a custom proxy location in the advanced settings or reinstall the application. - - - Allows using insecure http://localhost with passkeys for testing purposes. - Allows using insecure http://localhost with passkeys for testing purposes. - - - Allow using localhost with passkeys - Allow using localhost with passkeys - - - KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. - KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. - - - Browsers installed using Snap or Flatpak are not supported with exception to Firefox installed using Snap. - Browsers installed using Snap or Flatpak are not supported with exception to Firefox installed using Snap. - CloneDialog @@ -1325,6 +1208,14 @@ Do you want to overwrite the passkey in %1 - %2? CsvImportWidget + + Import CSV fields + Import CSV fields + + + filename + filename + size, rows, columns size, rows, columns @@ -1433,43 +1324,50 @@ Do you want to overwrite the passkey in %1 - %2? Column %1 Column %1 + + Imported from CSV file + Imported from CSV file + + + Original data: + Original data: + + + Error(s) detected in CSV file! + Error(s) detected in CSV file! + [%n more message(s) skipped] [%n more message skipped][%n more messages skipped] - Failed to parse CSV file: %1 - Failed to parse CSV file: %1 + Error + Error - Imported from CSV file: %1 - Imported from CSV file: %1 - - - No Title Selected - No Title Selected - - - No title column was selected, entries will be hard to tell apart. -Are you sure you want to import? - No title column was selected, entries will be hard to tell apart. -Are you sure you want to import? - - - Tags - Tags + CSV import: writer has errors: +%1 + CSV import: writer has errors: +%1 CsvParserModel + + %1, %2, %3 + file info: bytes, rows, columns + %1, %2, %3 + + + %n byte(s) + %n byte%n bytes + %n row(s) - CSV row count %n row%n rows %n column(s) - CSV column count %n column%n columns @@ -1522,14 +1420,6 @@ Backup database located at %2 Recycle Bin Recycle Bin - - Database file read error. - Database file read error. - - - No file path was provided. - No file path was provided. - DatabaseOpenDialog @@ -1552,10 +1442,30 @@ Backup database located at %2 Password field Password field + + Enter Additional Credentials (if any): + Enter Additional Credentials (if any): + + + Key File: + Key File: + + + Key file help + Key file help + Hardware key slot selection Hardware key slot selection + + Hardware Key: + Hardware Key: + + + Hardware key help + Hardware key help + Key file to unlock the database Key file to unlock the database @@ -1568,6 +1478,14 @@ Backup database located at %2 Browse… Browse… + + Refresh hardware tokens + Refresh hardware tokens + + + Refresh + Refresh + Unlock Database Unlock Database @@ -1630,6 +1548,10 @@ To prevent this error from appearing, you must go to "Database Settings / S Retry with empty password Retry with empty password + + Failed to authenticate with Touch ID + Failed to authenticate with Touch ID + Failed to open key file: %1 Failed to open key file: %1 @@ -1662,69 +1584,41 @@ To prevent this error from appearing, you must go to "Database Settings / S Cannot use database file as key file Cannot use database file as key file + + You cannot use your database file as a key file. +If you do not have a key file, please leave the field empty. + You cannot use your database file as a key file. +If you do not have a key file, please leave the field empty. + + + Detecting hardware keys… + Detecting hardware keys… + + + No hardware keys detected + No hardware keys detected + + + Select hardware key… + Select hardware key… + + + <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information…</p> + <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information…</p> + + + <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +<p>Click for more information…</p> + <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +<p>Click for more information…</p> + authenticate to access the database authenticate to access the database - Failed to authenticate with Quick Unlock: %1 - - - - Select Key File: - Select Key File: - - - <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!</p> - <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!</p> - - - Use hardware key [Serial: %1] - Use hardware key [Serial: %1] - - - Use hardware key - Use hardware key - - - Your database file is NOT a key file! -If you don't have a key file or don't know what that is, you don't have to select one. - Your database file is NOT a key file! -If you don't have a key file or don't know what that is, you don't have to select one. - - - KeePassXC database file selected - KeePassXC database file selected - - - The file you selected looks like a database file. -A database file is NOT a key file! - -Are you sure you want to continue with this file?. - The file you selected looks like a database file. -A database file is NOT a key file! - -Are you sure you want to continue with this file? - - - No hardware keys found. - No hardware keys found. - - - Refresh Hardware Keys - Refresh Hardware Keys - - - Click to add a key file. - Click to add a key file. - - - <a href="#" style="text-decoration: underline">I have a key file</a> - <a href="#" style="text-decoration: underline">I have a key file</a> - - - Hardware keys found, but no slots are configured. - Hardware keys found, but no slots are configured. + Failed to authenticate with Windows Hello: %1 + Failed to authenticate with Windows Hello: %1 @@ -1736,6 +1630,10 @@ Are you sure you want to continue with this file? DatabaseSettingsDialog + + Advanced Settings + Advanced Settings + General General @@ -1760,22 +1658,6 @@ Are you sure you want to continue with this file? Maintenance Maintenance - - KeeShare - KeeShare - - - Secret Service Integration - Secret Service Integration - - - Remote Sync - - - - Database Settings: %1 - - DatabaseSettingsWidgetBrowser @@ -1783,6 +1665,18 @@ Are you sure you want to continue with this file? KeePassXC-Browser settings KeePassXC-Browser settings + + Convert KeePassHTTP data + Convert KeePassHTTP data + + + Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data + Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data + + + Refresh database root group ID + Refresh database root group ID + Disconnect all browsers Disconnect all browsers @@ -1791,10 +1685,6 @@ Are you sure you want to continue with this file? Forget all site-specific settings on entries Forget all site-specific settings on entries - - Refresh database root group ID - Refresh database root group ID - Stored keys Stored keys @@ -1843,10 +1733,18 @@ This may prevent connection to the browser plugin. Do you really want to disconnect all browsers? This may prevent connection to the browser plugin. + + KeePassXC: No keys found + KeePassXC: No keys found + No shared encryption keys found in KeePassXC settings. No shared encryption keys found in KeePassXC settings. + + KeePassXC: Removed keys from database + KeePassXC: Removed keys from database + Successfully removed %n encryption key(s) from KeePassXC settings. Successfully removed %n encryption key from KeePassXC settings.Successfully removed %n encryption keys from KeePassXC settings. @@ -1865,14 +1763,32 @@ Permissions to access entries will be revoked. 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 convert all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + Do you really want to convert all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + Refresh database ID Refresh database ID @@ -1883,26 +1799,6 @@ This is only necessary if your database is a copy of another and the browser ext Do you really want refresh the database ID? This is only necessary if your database is a copy of another and the browser extension cannot connect. - - Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data - Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data - - - No keys found - No keys found - - - Removed keys from database - Removed keys from database - - - Removed permissions - Removed permissions - - - No entry with permissions found! - No entry with permissions found! - DatabaseSettingsWidgetDatabaseKey @@ -1942,18 +1838,6 @@ Are you sure you want to continue without a password? Failed to change database credentials Failed to change database credentials - - Weak password - Weak password - - - This is a weak password! For better protection of your secrets, you should choose a stronger password. - This is a weak password! For better protection of your secrets, you should choose a stronger password. - - - The provided password does not meet the minimum quality requirement. - The provided password does not meet the minimum quality requirement. - DatabaseSettingsWidgetEncryption @@ -1961,6 +1845,14 @@ Are you sure you want to continue without a password? Decryption Time: Decryption Time: + + Change existing decryption time + Change existing decryption time + + + Change + Change + Decryption time in seconds Decryption time in seconds @@ -2041,6 +1933,11 @@ Are you sure you want to continue without a password? KDBX 3 KDBX 3 + + unchanged + Database decryption time is unchanged + unchanged + Number of rounds too high Key transformation rounds @@ -2093,18 +1990,6 @@ If you keep this number, your database will not be protected from brute force at Threads for parallel execution (KDF settings) thread threads - - Encryption Settings: - Encryption Settings: - - - Basic - Basic - - - Advanced - Advanced - DatabaseSettingsWidgetFdoSecrets @@ -2235,70 +2120,6 @@ instead of deleting them from the database. Entries deleted from the recycle bin are removed from the database. - - Autosave delay since last change - Autosave delay since last change - - - Autosave delay - Autosave delay - - - Autosave delay since last change in minutes - Autosave delay since last change in minutes - - - min - min - - - Autosave delay since last change checkbox - Autosave delay since last change checkbox - - - Public Database Metadata - Public Database Metadata - - - Warning: the following settings are not encrypted. - Warning: the following settings are not encrypted. - - - Display name: - Display name: - - - Publically visible display name used on the unlock dialog - Publically visible display name used on the unlock dialog - - - Database public display name - Database public display name - - - Display color: - Display color: - - - Publically visible color used on the unlock dialog - Publically visible color used on the unlock dialog - - - Database public display color chooser - Database public display color chooser - - - Clear - Clear - - - Display icon: - Display icon: - - - Select Database Icon - Select Database Icon - DatabaseSettingsWidgetKeeShare @@ -2394,129 +2215,6 @@ removed from the database. Database description field - - DatabaseSettingsWidgetRemote - - Sync Commands - - - - Remove - Remove - - - Command Settings - - - - Name - Name - - - Save - Save - - - Download - - - - Command: - - - - Download command field - - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - - - - Input: - - - - Download input field - - - - Upload - - - - Upload command field - - - - e.g.: "sftp user@hostname" or "scp {TEMP_DATABASE} user@hostname:DatabaseOnRemote.kdbx" - - - - Upload input field - - - - Name cannot be empty. - - - - Test - - - - Download command cannot be empty. - - - - Download failed with error: %1 - - - - Download finished, but file %1 could not be found. - - - - Download successful. - - - - Save Remote Settings - - - - You have unsaved changes. Do you want to save them? - - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - - - - e.g.: -put {TEMP_DATABASE} DatabaseOnRemote.kdbx -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - - - - Timeout: - - - - seconds - seconds - - DatabaseTabWidget @@ -2549,10 +2247,26 @@ This is definitely a bug, please report it to the developers. CSV file CSV file + + Select CSV file + Select CSV file + Merge database Merge database + + KeePass 1 database + KeePass 1 database + + + Open KeePass 1 database + Open KeePass 1 database + + + Open OPVault + Open OPVault + Export database to CSV file Export database to CSV file @@ -2565,6 +2279,28 @@ This is definitely a bug, please report it to the developers. Writing the HTML file failed. Writing the HTML file failed. + + Export Confirmation + Export Confirmation + + + You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? + You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? + + + New Database + New Database + + + %1 [New Database] + Database tab name modifier + %1 [New Database] + + + %1 [Locked] + Database tab name modifier + %1 [Locked] + Export database to XML file Export database to XML file @@ -2577,31 +2313,9 @@ This is definitely a bug, please report it to the developers. Writing the XML file failed Writing the XML file failed - - Export Confirmation - Export Confirmation - - - You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? - You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? - - - %1 [Locked] - Database tab name modifier - %1 [Locked] - - - %1 [Temporary] - Database tab name modifier - - DatabaseWidget - - Searches and Tags - Searches and Tags - Searching… Searching… @@ -2650,10 +2364,6 @@ This is definitely a bug, please report it to the developers. Expired entries Expired entries - - Entries expiring within %1 day(s) - Entries expiring within %1 dayEntries expiring within %1 days - No current database. No current database. @@ -2678,18 +2388,6 @@ This is definitely a bug, please report it to the developers. No Results No Results - - Save - Save - - - Enter a unique name or overwrite an existing search from the list: - Enter a unique name or overwrite an existing search from the list: - - - Save Search - Save Search - Lock Database? Lock Database? @@ -2718,6 +2416,26 @@ Save changes? 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? + 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. +Error: %1 + Could not open the new database file while attempting to autoreload. +Error: %1 + Disable safe saves? Disable safe saves? @@ -2760,94 +2478,25 @@ Disable safe saves and try again? Could not find database file: %1 Could not find database file: %1 - - New Database - New Database + + Entries expiring within %1 day(s) + Entries expiring within %1 dayEntries expiring within %1 days - %1 [New Database] - Database tab name modifier - %1 [New Database] + Searches and Tags + Searches and Tags - Remote Sync did not contain any download or upload commands. - + Enter a unique name or overwrite an existing search from the list: + Enter a unique name or overwrite an existing search from the list: - Remote sync '%1' completed successfully! - + Save + Save - Remote sync '%1' failed: %2 - - - - Error while saving database %1: %2 - - - - Downloading... - Downloading... - - - Uploading... - - - - Syncing... - - - - Remove passkey from entry - Remove passkey from entry - - - Do you want to remove the passkey from this entry? - Do you want to remove the passkey from this entry? - - - The database file "%1" was modified externally - The database file "%1" was modified externally - - - Do you want to load the changes? - Do you want to load the changes? - - - Reload database - Reload database - - - Reloading database… - Reloading database… - - - Reload canceled - Reload canceled - - - Reload successful - Reload successful - - - Reload pending user action… - Reload pending user action… - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes<br>Ignore the changes on disk until save<br>Discard unsaved changes - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes<br>Ignore the changes on disk until save<br>Discard unsaved changes - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes then save<br>Overwrite the changes on disk<br>Discard unsaved changes - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes then save<br>Overwrite the changes on disk<br>Discard unsaved changes - - - Database file overwritten. - Database file overwritten. - - - Database file on disk cannot be unlocked with current credentials.<br>Enter new credentials and/or present hardware key to continue. - Database file on disk cannot be unlocked with current credentials.<br>Enter new credentials and/or present hardware key to continue. + Save Search + Save Search @@ -2900,6 +2549,10 @@ Disable safe saves and try again? n/a n/a + + (encrypted) + (encrypted) + Select private key Select private key @@ -2986,10 +2639,6 @@ Would you like to correct it? Hide Hide - - %n hour(s) - %n hour%n hours - %n week(s) %n week%n weeks @@ -3002,9 +2651,9 @@ Would you like to correct it? %n year(s) %n year%n years - - Failed to decrypt SSH key, ensure password is correct. - Failed to decrypt SSH key, ensure password is correct. + + %n hour(s) + %n hour%n hours @@ -3124,20 +2773,10 @@ Would you like to correct it? Add new window association Add new window association - - + - Add item - + - Remove selected window association Remove selected window association - - - - Remove item - - - Window title: Window title: @@ -3162,9 +2801,23 @@ Would you like to correct it? Custom Auto-Type sequence for this window Custom Auto-Type sequence for this window + + + + Add item + + + + + - + Remove item + - + EditEntryWidgetBrowser + + These settings affect to the entry's behaviour with the browser extension. + These settings affect the browser extension’s behavior with regard to this database entry. + General General @@ -3177,14 +2830,26 @@ Would you like to correct it? Skip Auto-Submit for this entry Skip Auto-Submit for this entry + + Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. + Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. + Use this entry only with HTTP Basic Auth Use this entry only with HTTP Basic Auth + + Do not send this setting to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. + Do not send this setting to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. + Do not use this entry with HTTP Basic Auth Do not use this entry with HTTP Basic Auth + + Additional URL's + Additional URLs + Add Add @@ -3197,22 +2862,6 @@ Would you like to correct it? Edit Edit - - These settings affect the entry's behaviour with the browser extension. - These settings affect the entry's behaviour with the browser extension. - - - Additional URLs - Additional URLs - - - Only send this entry to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. - Only send this entry to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. - - - Do not send this entry to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. - Do not send this entry to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. - EditEntryWidgetHistory @@ -3378,6 +3027,19 @@ Would you like to correct it? Private key Private key + + External file + External file + + + Browser for key file + Browser for key file + + + Browse… + Button for opening file dialog + Browse… + Attachment Attachment @@ -3394,23 +3056,6 @@ Would you like to correct it? Remove from agent Remove from agent - - External file - External file - - - Browser for key file - Browse filesystem for key file - - - Browse… - Button for opening file dialog - Browse… - - - Generate - Generate - Select attachment file Select attachment file @@ -3435,10 +3080,6 @@ Would you like to correct it? seconds seconds - - Clear agent - Clear agent - EditGroupWidget @@ -3450,6 +3091,10 @@ Would you like to correct it? Icon Icon + + Browser Integration + Browser Integration + Properties Properties @@ -3466,10 +3111,6 @@ Would you like to correct it? Group has unsaved changes Group has unsaved changes - - Browser Integration - Browser Integration - Enable Enable @@ -3529,14 +3170,6 @@ Would you like to correct it? Omit WWW subdomain from matching toggle for this and sub groups Omit WWW subdomain from matching toggle for this and sub groups - - Restrict matching to given browser key: - - - - Restrict matching to given browser key toggle for this and sub groups - - EditGroupWidgetKeeShare @@ -3769,6 +3402,10 @@ Supported extensions are: %1. Unable to fetch favicon. Unable to fetch favicon. + + You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security + You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security + Existing icon selected. Existing icon selected. @@ -3801,10 +3438,6 @@ Supported extensions are: %1. The following icon(s) failed: The following icon failed:The following icons failed: - - You can enable the DuckDuckGo website icon service under Application Settings -> Security - You can enable the DuckDuckGo website icon service under Application Settings -> Security - EditWidgetProperties @@ -3881,24 +3514,6 @@ This may cause the affected plugins to malfunction. %1 - Clone %1 - Clone - - Passkey - Passkey - - - Invalid conversion type: %1 - Invalid conversion type: %1 - - - Invalid conversion syntax: %1 - Invalid conversion syntax: %1 - - - Invalid regular expression syntax %1 -%2 - Invalid regular expression syntax %1 -%2 - EntryAttachments @@ -3907,21 +3522,6 @@ This may cause the affected plugins to malfunction. Cannot open file "%1" - - EntryAttachmentsDialog - - Form - Form - - - File name - File name - - - File contents... - File contents... - - EntryAttachmentsModel @@ -3959,6 +3559,14 @@ This may cause the affected plugins to malfunction. Remove Remove + + Rename selected attachment + Rename selected attachment + + + Rename + Rename + Open selected attachment Open selected attachment @@ -4034,6 +3642,12 @@ This may cause the affected plugins to malfunction. Confirm Overwrite Attachment Confirm Overwrite Attachment + + Attachment "%1" already exists. +Would you like to overwrite the existing attachment? + Attachment "%1" already exists. +Would you like to overwrite the existing attachment? + Confirm Attachment Confirm Attachment @@ -4068,24 +3682,6 @@ Error: %1 Saving updated attachment failed. Error: %1 - - Attachment "%1" already exists. -Would you like to overwrite the existing attachment? - Attachment "%1" already exists. -Would you like to overwrite the existing attachment? - - - New - New - - - Preview - Preview - - - Failed to preview an attachment: Attachment not found - Failed to preview an attachment: Attachment not found - EntryAttributesModel @@ -4280,14 +3876,6 @@ Would you like to overwrite the existing attachment? Has TOTP Has TOTP - - Background Color - Background Color - - - Group Path - Group Path - EntryPreviewWidget @@ -4308,8 +3896,8 @@ Would you like to overwrite the existing attachment? Password - URL - URL + Notes + Notes Expiration @@ -4328,8 +3916,8 @@ Would you like to overwrite the existing attachment? Username - Notes - Notes + URL + URL Advanced @@ -4379,10 +3967,6 @@ Would you like to overwrite the existing attachment? Never Never - - Double click to copy value - Double click to copy value - Enabled Enabled @@ -4392,8 +3976,8 @@ Would you like to overwrite the existing attachment? Disabled - Double click to copy to clipboard - Double click to copy to clipboard + Double click to copy value + Double click to copy value @@ -4402,10 +3986,6 @@ Would you like to overwrite the existing attachment? Invalid URL Invalid URL - - Duplicate URL - Duplicate URL - EntryView @@ -4421,10 +4001,6 @@ Would you like to overwrite the existing attachment? Reset to defaults Reset to defaults - - + %1 entry(s)... - + %1 entry...+ %1 entries... - ExportDialog @@ -4646,193 +4222,6 @@ You can enable the DuckDuckGo website icon service in the security section of th Downloading favicons (%1/%2)… - - ImportWizard - - Import Wizard - Import Wizard - - - - ImportWizardPageReview - - WizardPage - WizardPage - - - Entry count: %1 - Entry count: %1 - - - Group - Group - - - Title - Title - - - Username - Username - - - Password - Password - - - Url - Url - - - Could not load key file. - - - - Could not open remote database. Password or key file may be incorrect. - - - - - ImportWizardPageSelect - - Form - Form - - - Import File Selection - Import File Selection - - - Password: - Password: - - - Key File: - Key File: - - - Browse… - Browse… - - - Import Into: - Import Into: - - - New Database - New Database - - - No unlocked databases available - No unlocked databases available - - - Existing Database: - Existing Database: - - - Import File: - Import File: - - - Comma Separated Values (.csv) - Comma Separated Values (.csv) - - - 1Password Export (.1pux) - 1Password Export (.1pux) - - - 1Password Vault (.opvault) - 1Password Vault (.opvault) - - - Bitwarden (.json) - Bitwarden (.json) - - - KeePass 1 Database (.kdb) - KeePass 1 Database (.kdb) - - - Open OPVault - Open OPVault - - - Select import file - Select import file - - - All files - All files - - - Key files - Key files - - - Select key file - Select key file - - - Comma Separated Values - Comma Separated Values - - - 1Password Export - 1Password Export - - - Bitwarden JSON Export - Bitwarden JSON Export - - - 1Password Vault - 1Password Vault - - - KeePass1 Database - KeePass1 Database - - - Proton Pass (.json) - Proton Pass (.json) - - - Proton Pass JSON Export - Proton Pass JSON Export - - - Temporary Database - - - - Command: - - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - - - - Input: - - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last commend `exit` has to be sent - - - - - Remote Database (.kdbx) - Remote Database (.kdbx) - - KMessageWidget @@ -5267,6 +4656,17 @@ Line %2, column %3 Failed to open private key + + KeePass1OpenWidget + + Import KeePass1 Database + Import KeePass1 Database + + + Unable to open the database. + Unable to open the database. + + KeePass1Reader @@ -5623,6 +5023,10 @@ Are you sure you want to continue with this file? &Recent Databases &Recent Databases + + &Import + &Import + &Export &Export @@ -5643,10 +5047,6 @@ Are you sure you want to continue with this file? TOTP TOTP - - Tags - Tags - &Groups &Groups @@ -5691,18 +5091,34 @@ Are you sure you want to continue with this file? &New Database… &New Database… + + Create a new database + Create a new database + &Merge From Database… &Merge From Database… + + Merge from another KDBX database + Merge from another KDBX database + &New Entry… &New Entry… + + Add a new entry + Add a new entry + &Edit Entry… &Edit Entry… + + View or edit entry + View or edit entry + &Delete Entry… &Delete Entry… @@ -5711,6 +5127,10 @@ Are you sure you want to continue with this file? &New Group… &New Group… + + Add a new group + Add a new group + &Edit Group… &Edit Group… @@ -5743,10 +5163,18 @@ Are you sure you want to continue with this file? Database &Reports… Database &Reports… + + Statistics, health check, etc. + Statistics, health check, etc. + &Database Settings… &Database Settings… + + Database settings + Database settings + &Clone Entry… &Clone Entry… @@ -5755,18 +5183,34 @@ Are you sure you want to continue with this file? Move u&p Move u&p + + Move entry one step up + Move entry one step up + Move do&wn Move do&wn + + Move entry one step down + Move entry one step down + Copy &Username Copy &Username + + Copy username to clipboard + Copy username to clipboard + Copy &Password Copy &Password + + Copy password to clipboard + Copy password to clipboard + &Settings &Settings @@ -5800,13 +5244,21 @@ Are you sure you want to continue with this file? &Title - Copy &URL - Copy &URL + Copy title to clipboard + Copy title to clipboard + + + Copy URL to clipboard + Copy URL to clipboard &Notes &Notes + + Copy notes to clipboard + Copy notes to clipboard + &CSV File… &CSV File… @@ -5819,14 +5271,26 @@ Are you sure you want to continue with this file? KeePass 1 Database… KeePass 1 Database… + + Import a KeePass 1 database + Import a KeePass 1 database + 1Password Vault… 1Password Vault… + + Import a 1Password Vault + Import a 1Password Vault + CSV File… CSV File… + + Import a CSV file + Import a CSV file + Show TOTP Show TOTP @@ -5843,10 +5307,6 @@ Are you sure you want to continue with this file? Copy &TOTP Copy &TOTP - - Copy Password and TOTP - Copy Password and TOTP - E&mpty recycle bin E&mpty recycle bin @@ -5871,6 +5331,10 @@ Are you sure you want to continue with this file? &Online Help &Online Help + + Go to online documentation + Go to online documentation + &User Guide &User Guide @@ -5915,10 +5379,6 @@ Are you sure you want to continue with this file? Classic (Platform-native) Classic (Platform-native) - - Show Menubar - Show Menubar - Show Toolbar Show Toolbar @@ -5943,10 +5403,6 @@ Are you sure you want to continue with this file? Clone Group... Clone Group... - - &XML File… - &XML File… - Clear history Clear history @@ -5974,8 +5430,10 @@ Expect some bugs and minor issues, this version is meant for testing purposes. - No Tags - No Tags + 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. Restore Entry(s) @@ -6005,10 +5463,6 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Quit KeePassXC Quit KeePassXC - - %1 Entry(s) - %1 Entry%1 Entries - Please present or touch your YubiKey to continue… Please present or touch your YubiKey to continue… @@ -6021,314 +5475,38 @@ Expect some bugs and minor issues, this version is meant for testing purposes.You must restart the application to apply this setting. Would you like to restart now? You must restart the application to apply this setting. Would you like to restart now? + + Tags + Tags + + + No Tags + No Tags + + + %1 Entry(s) + %1 Entry%1 Entries + + + Copy Password and TOTP + Copy Password and TOTP + + + &XML File… + &XML File… + + + XML File… + XML File… + + + Copy &URL + Copy &URL + Allow Screen Capture Allow Screen Capture - - 1Password 1PUX... - 1Password 1PUX... - - - Import a 1Password 1PUX file - Import a 1Password 1PUX file - - - Import… - Import… - - - Passkeys… - Passkeys… - - - Import Passkey - Import Passkey - - - Remote S&ync… - - - - Quit Application - - - - Open About Dialog - - - - Open Database - Open Database - - - Create Database - Create Database - - - Merge From Database - - - - Create Entry - - - - Edit Entry - Edit Entry - - - Delete Entry - - - - Create Group - - - - Edit Group - Edit Group - - - Delete Group - - - - Download All Favicons - - - - Sort Groups A-Z - - - - Sort Groups Z-A - - - - Save Database As - - - - Show Database Security - - - - Show Database Reports - - - - Show Database Settings - - - - Show Passkeys - - - - Clone Entry - - - - Move Entry Up - - - - Move Entry Down - - - - Copy Username - Copy Username - - - Copy Password - Copy Password - - - Show Application Settings - - - - Show Password Generator - - - - Remove Passkey From Entry - Remove Passkey From Entry - - - Perform Auto-Type: {USERNAME} - - - - Perform Auto-Type: {USERNAME}{ENTER} - - - - Perform Auto-Type: {PASSWORD} - - - - Perform Auto-Type: {PASSWORD}{ENTER} - - - - Perform Auto-Type: {TOTP} - - - - Copy Title - - - - Copy URL - - - - Copy Notes - - - - Export to CSV - - - - Export to HTML - - - - Import KeePass1 Database - Import KeePass1 Database - - - Import 1Password Vault - - - - Import CSV File - - - - Show TOTP QR Code - - - - Set up TOTP - - - - Empty Recycle Bin - Empty Recycle Bin - - - Open Donation Website - - - - Open Bug Report - - - - Open Online Documentation - - - - Open Keyboard Shortcuts Guide - - - - Save Database Backup - - - - SSH Agent: Add Key - - - - SSH Agent: Remove Key - - - - Toggle Compact Mode - - - - Set Theme: Automatic - - - - Set Theme: Light - - - - Set Theme: Dark - - - - Set Theme: Classic - - - - Toggle Show Menubar - Toggle Show Menubar - - - Toggle Show Toolbar - - - - Toggle Show Preview Panel - - - - Toggle Always on Top - - - - Toggle Hide Usernames - - - - Toggle Hide Passwords - - - - Export to XML - - - - Toggle Allow Screen Capture - - - - Show Group Panel - Show Group Panel - - - Toggle Show Group Panel - Toggle Show Group Panel - - - Setup Remote Sync… - - - - Password Generator - Password Generator - - - E&xpire Entry… - E&xpire Entry… - - - Clear SSH Agent - Clear SSH Agent - - - Clear all identities in ssh-agent - Clear all identities in ssh-agent - ManageDatabase @@ -6386,6 +5564,26 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Overwriting %1 [%2] Overwriting %1 [%2] + + older entry merged from database "%1" + older entry merged from database "%1" + + + Adding backup for older target %1 [%2] + Adding backup for older target %1 [%2] + + + Adding backup for older source %1 [%2] + Adding backup for older source %1 [%2] + + + Reapplying older target entry on top of newer source %1 [%2] + Reapplying older target entry on top of newer source %1 [%2] + + + Reapplying older source entry on top of newer target %1 [%2] + Reapplying older source entry on top of newer target %1 [%2] + Synchronizing from newer source %1 [%2] Synchronizing from newer source %1 [%2] @@ -6445,6 +5643,14 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + + Advanced Settings + Advanced Settings + + + Simple Settings + Simple Settings + NewDatabaseWizardPageDatabaseKey @@ -6479,25 +5685,6 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Please fill in the display name and an optional description for your new database: - - NewEntryAttachmentsDialog - - Attachment name cannot be empty - Attachment name cannot be empty - - - Attachment with the same name already exists - Attachment with the same name already exists - - - Save attachment - Save attachment - - - New entry attachment - New entry attachment - - NixUtils @@ -6544,6 +5731,15 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Expected %1 bytes of clear-text, found %2 + + OpVaultOpenWidget + + Read Database did not produce an instance +%1 + Read Database did not produce an instance +%1 + + OpVaultReader @@ -6617,10 +5813,6 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Unknown cipher: %1 Unknown cipher: %1 - - AES-256/GCM is currently not supported - AES-256/GCM is currently not supported - Passphrase is required to decrypt this key Passphrase is required to decrypt this key @@ -6686,183 +5878,8 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Unexpected EOF when writing private key - (encrypted) - (encrypted) - - - - OpenSSHKeyGenDialog - - SSH Key Generator - - - - Type - Type - - - Bits - - - - Comment - Comment - - - - PasskeyExportDialog - - KeePassXC - Passkey Export - KeePassXC - Passkey Export - - - Filenames will be generated with title and .passkey file extension. - Filenames will be generated with title and .passkey file extension. - - - Export entries - Export entries - - - Export Selected - Export Selected - - - Cancel - Cancel - - - Export to folder - Export to folder - - - Export the following passkey entries. - Export the following passkey entries. - - - - PasskeyExporter - - KeePassXC: Passkey Export - KeePassXC: Passkey Export - - - File "%1.passkey" already exists. -Do you want to overwrite it? - - File "%1.passkey" already exists. -Do you want to overwrite it? - - - - Cannot open file - Cannot open file - - - Cannot open file "%1" for writing. - Cannot open file "%1" for writing. - - - Cannot write to file - Cannot write to file - - - - PasskeyImportDialog - - KeePassXC - Passkey Import - KeePassXC - Passkey Import - - - Username: %1 - Username: %1 - - - Group - Group - - - Database - Database - - - Import Passkey - Import Passkey - - - Import - Import - - - Cancel - Cancel - - - Entry - Entry - - - Create new entry - Create new entry - - - Relying Party: %1 - Relying Party: %1 - - - Import the following passkey: - Import the following passkey: - - - Import the following passkey to this entry: - Import the following passkey to this entry: - - - Default passkeys group (Imported Passkeys) - Default passkeys group (Imported Passkeys) - - - - PasskeyImporter - - Passkey file - Passkey file - - - All files - All files - - - Cannot open file - Cannot open file - - - Cannot open file "%1" for reading. - Cannot open file "%1" for reading. - - - Open passkey file - Open passkey file - - - Cannot import passkey - Cannot import passkey - - - Cannot import passkey file "%1". Data is missing. - Cannot import passkey file "%1". Data is missing. - - - Cannot import passkey file "%1". -The following data is missing: -%2 - Cannot import passkey file "%1". -The following data is missing: -%2 - - - Cannot import passkey file "%1". Private key is missing or malformed. - Cannot import passkey file "%1". Private key is missing or malformed. + AES-256/GCM is currently not supported + AES-256/GCM is currently not supported @@ -7067,6 +6084,10 @@ The following data is missing: Word Count: Word Count: + + Character Count: + Character Count: + Word Case: Word Case: @@ -7079,6 +6100,10 @@ The following data is missing: Add custom wordlist Add custom wordlist + + character + character + Close Close @@ -7115,30 +6140,6 @@ The following data is missing: Entropy: %1 bit Entropy: %1 bit - - Password Quality: %1 - Password Quality: %1 - - - Poor - Password quality - Poor - - - Weak - Password quality - Weak - - - Good - Password quality - Good - - - Excellent - Password quality - Excellent - Confirm Delete Wordlist Confirm Delete Wordlist @@ -7186,20 +6187,32 @@ Do you want to overwrite it? Special Characters - passwordLength - passwordLength + Password Quality: %1 + Password Quality: %1 - Characters: %1 - Characters: %1 + Poor + Password quality + Poor - MIXED case - MIXED case + Weak + Password quality + Weak - Excluded characters: "0", "1", "l", "I", "O", "|", "﹒", "B", "8", "G", "6" - Excluded characters: "0", "1", "l", "I", "O", "|", "﹒", "B", "8", "G", "6" + Good + Password quality + Good + + + Excellent + Password quality + Excellent + + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" @@ -7249,8 +6262,8 @@ Do you want to overwrite it? Excellent - Toggle password visibility using Control + H. Open the password generator using Control + G. - + Toggle password visibilty using Control + H. Open the password generator using Control + G. + Toggle password visibilty using Control + H. Open the password generator using Control + G. @@ -7268,21 +6281,6 @@ Do you want to overwrite it? Press &Tab between characters - - PreviewEntryAttachmentsDialog - - Preview entry attachment - Preview entry attachment - - - No preview available - No preview available - - - Image format not supported - Image format not supported - - QMessageBox @@ -7321,10 +6319,6 @@ Do you want to overwrite it? Continue Continue - - Continue with weak password - Continue with weak password - QObject @@ -7718,10 +6712,6 @@ Do you want to overwrite it? Too many arguments provided. Too many arguments provided. - - Path of the database. - Path of the database. - Target decryption time in MS for the database. Target decryption time in MS for the database. @@ -7742,6 +6732,10 @@ Do you want to overwrite it? Create a new database. Create a new database. + + Path of the database. + Path of the database. + Invalid decryption time %1. Invalid decryption time %1. @@ -7786,158 +6780,6 @@ Do you want to overwrite it? Successfully created new database. Successfully created new database. - - Unset the password for the database. - Unset the password for the database. - - - Unset the key file for the database. - Unset the key file for the database. - - - Edit a database. - Edit a database. - - - Cannot use %1 and %2 at the same time. - Cannot use %1 and %2 at the same time. - - - Could not change the database key. - Could not change the database key. - - - Database was not modified. - Database was not modified. - - - Writing the database failed: %1 - Writing the database failed: %1 - - - Successfully edited the database. - Successfully edited the database. - - - Cannot remove password: The database does not have a password. - Cannot remove password: The database does not have a password. - - - Cannot remove file key: The database does not have a file key. - Cannot remove file key: The database does not have a file key. - - - Loading the new key file failed: %1 - Loading the new key file failed: %1 - - - Found unexpected Key type %1 - Found unexpected Key type %1 - - - Cannot remove all the keys from a database. - Cannot remove all the keys from a database. - - - Show a database's information. - Show a database's information. - - - UUID: - UUID: - - - Name: - Name: - - - Description: - Description: - - - Cipher: - Cipher: - - - KDF: - KDF: - - - Recycle bin is enabled. - Recycle bin is enabled. - - - Recycle bin is not enabled. - Recycle bin is not enabled. - - - Location - Location - - - Database created - Database created - - - Last saved - Last saved - - - Unsaved changes - Unsaved changes - - - yes - yes - - - no - no - - - Number of groups - Number of groups - - - Number of entries - Number of entries - - - Number of expired entries - Number of expired entries - - - Unique passwords - Unique passwords - - - Non-unique passwords - Non-unique passwords - - - Maximum password reuse - Maximum password reuse - - - Number of short passwords - Number of short passwords - - - Number of weak passwords - Number of weak passwords - - - Entries excluded from reports - Entries excluded from reports - - - Average password length - Average password length - - - %1 characters - %1 characters - Word count for the diceware passphrase. Word count for the diceware passphrase. @@ -7961,6 +6803,10 @@ Do you want to overwrite it? Invalid word count %1 Invalid word count %1 + + The word list is too small (< 1000 items) + The word list is too small (< 1000 items) + Title for the entry. Title for the entry. @@ -7985,6 +6831,10 @@ Do you want to overwrite it? 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. @@ -8105,6 +6955,10 @@ Do you want to overwrite it? Exit interactive mode. Exit interactive mode. + + Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. + Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. + Exports the content of a database to standard output in the specified format. Exports the content of a database to standard output in the specified format. @@ -8205,6 +7059,106 @@ Do you want to overwrite it? Successfully imported database. Successfully imported database. + + Show a database's information. + Show a database's information. + + + UUID: + UUID: + + + Name: + Name: + + + Description: + Description: + + + Cipher: + Cipher: + + + KDF: + KDF: + + + Recycle bin is enabled. + Recycle bin is enabled. + + + Recycle bin is not enabled. + Recycle bin is not enabled. + + + Location + Location + + + Database created + Database created + + + Last saved + Last saved + + + Unsaved changes + Unsaved changes + + + yes + yes + + + no + no + + + Number of groups + Number of groups + + + Number of entries + Number of entries + + + Number of expired entries + Number of expired entries + + + Unique passwords + Unique passwords + + + Non-unique passwords + Non-unique passwords + + + Maximum password reuse + Maximum password reuse + + + Number of short passwords + Number of short passwords + + + Number of weak passwords + Number of weak passwords + + + Entries excluded from reports + Entries excluded from reports + + + Average password length + Average password length + + + %1 characters + %1 characters + Unknown command %1 Unknown command %1 @@ -8377,10 +7331,6 @@ Available commands: Show the protected attributes in clear text. Show the protected attributes in clear text. - - Show all the attributes of the entry. - Show all the attributes of the entry. - Show the attachments of the entry. Show the attachments of the entry. @@ -8451,10 +7401,6 @@ Please consider generating a new key file. Invalid YubiKey serial %1 Invalid YubiKey serial %1 - - Please present or touch your YubiKey to continue. - Please present or touch your YubiKey to continue. - Enter password to encrypt database (optional): Enter password to encrypt database (optional): @@ -8693,6 +7639,18 @@ Kernel: %3 %4 file empty file empty + + malformed string + malformed string + + + missing closing quote + missing closing quote + + + %1: (row, col) %2,%3 + %1: (row, col) %2,%3 + AES 256-bit AES 256-bit @@ -8871,6 +7829,14 @@ Kernel: %3 %4 read password of the database from stdin read password of the database from stdin + + allow app screen recordering and screenshots + allow app screen recordering and screenshots + + + Locked databases. + Databases have been locked. + Database failed to lock. Database failed to lock. @@ -8879,10 +7845,6 @@ Kernel: %3 %4 Another instance of KeePassXC is already running. Another instance of KeePassXC is already running. - - KeePassXC is not running. No open database to lock - KeePassXC is not running. No open database to lock - Fatal error while testing the cryptographic functions. Fatal error while testing the cryptographic functions. @@ -8926,300 +7888,70 @@ Kernel: %3 %4 Invalid KDF - Access to all entries is denied - Access to all entries is denied + Please present or touch your YubiKey to continue. + Please present or touch your YubiKey to continue. - allow screenshots and app recording (Windows/macOS) - allow screenshots and app recording (Windows/macOS) + Show all the attributes of the entry. + Show all the attributes of the entry. + + + Edit a database. + Edit a database. + + + Could not change the database key. + Could not change the database key. + + + Database was not modified. + Database was not modified. + + + Successfully edited the database. + Successfully edited the database. + + + Loading the new key file failed: %1 + Loading the new key file failed: %1 + + + Unset the password for the database. + Unset the password for the database. + + + Unset the key file for the database. + Unset the key file for the database. + + + Cannot use %1 and %2 at the same time. + Cannot use %1 and %2 at the same time. + + + Cannot remove all the keys from a database. + Cannot remove all the keys from a database. + + + Cannot remove password: The database does not have a password. + Cannot remove password: The database does not have a password. + + + Cannot remove file key: The database does not have a file key. + Cannot remove file key: The database does not have a file key. + + + Found unexpected Key type %1 + Found unexpected Key type %1 Set the key file for the database. -This option is deprecated, use --set-key-file instead. +This options is deprecated, use --set-key-file instead. Set the key file for the database. -This option is deprecated, use --set-key-file instead. +This options is deprecated, use --set-key-file instead. - Databases have been locked. - Databases have been locked. - - - Attestation not supported - Attestation not supported - - - Credential is excluded - Credential is excluded - - - Passkeys request canceled - Passkeys request canceled - - - Invalid user verification - Invalid user verification - - - Empty public key - Empty public key - - - Invalid URL provided - Invalid URL provided - - - Passkeys - Passkeys - - - AES initialization failed - - - - AES encrypt failed - - - - Failed to store in Linux Keyring - - - - Polkit returned an error: %1 - - - - Could not locate key in keyring - - - - Could not read key in keyring - - - - AES decrypt failed - - - - No Polkit authentication agent was available - - - - Polkit authorization failed - - - - No Quick Unlock provider is available - - - - Failed to init KeePassXC crypto. - Failed to init KeePassXC crypto. - - - Failed to encrypt key data. - Failed to encrypt key data. - - - Failed to get Windows Hello credential. - Failed to get Windows Hello credential. - - - Failed to decrypt key data. - Failed to decrypt key data. - - - Origin is empty or not allowed - Origin is empty or not allowed - - - Effective domain is not a valid domain - Effective domain is not a valid domain - - - Origin and RP ID do not match - Origin and RP ID do not match - - - No supported algorithms were provided - No supported algorithms were provided - - - Wait for timer to expire - Wait for timer to expire - - - Challenge is shorter than required minimum length - Challenge is shorter than required minimum length - - - user.id does not match the required length - user.id does not match the required length - - - Favorite - Tag for favorite entries - Favorite - - - File does not exist. - File does not exist. - - - Cannot open file: %1 - Cannot open file: %1 - - - Cannot parse file: %1 at position %2 - Cannot parse file: %1 at position %2 - - - Failed to decrypt json file: %1 - Failed to decrypt json file: %1 - - - Invalid encKeyValidation field - Invalid encKeyValidation field - - - Invalid cipher list within encKeyValidation field - Invalid cipher list within encKeyValidation field - - - Wrong password - Wrong password - - - Invalid encrypted data field - Invalid encrypted data field - - - Invalid cipher list within encrypted data field - Invalid cipher list within encrypted data field - - - Cannot initialize cipher - Cannot initialize cipher - - - Cannot decrypt data - Cannot decrypt data - - - Bitwarden Import - Bitwarden Import - - - Archived - Tag for archived entries - Archived - - - Invalid 1PUX file format: Not a valid ZIP file. - Invalid 1PUX file format: Not a valid ZIP file. - - - Invalid 1PUX file format: Missing export.data - Invalid 1PUX file format: Missing export.data - - - 1Password Import - 1Password Import - - - Enter Shortcut - - - - Action - - - - Shortcuts - - - - Unknown passkeys error - Unknown passkeys error - - - Invalid KDF iterations, cannot decrypt json file - Invalid KDF iterations, cannot decrypt json file - - - Unsupported format, ensure your Bitwarden export is password-protected - Unsupported format, ensure your Bitwarden export is password-protected - - - Only PBKDF and Argon2 are supported, cannot decrypt json file - Only PBKDF and Argon2 are supported, cannot decrypt json file - - - Reset Shortcuts - - - - Double click an action to change its shortcut - - - - Filter... - - - - Shortcut Conflict - - - - Shortcut %1 conflicts with '%2'. Overwrite shortcut? - - - - Cannot generate valid passphrases because the wordlist is too short - Cannot generate valid passphrases because the wordlist is too short - - - Encrypted files are not supported. - Encrypted files are not supported. - - - Proton Pass Import - Proton Pass Import - - - Delete plugin data? - Delete plugin data? - - - Delete plugin data from Entry(s)? - Delete plugin data from Entry?Delete plugin data from Entries? - - - Passkey - Passkey - - - Format to use when exporting. Available choices are 'xml', 'csv' or 'html'. Defaults to 'xml'. - Format to use when exporting. Available choices are 'xml', 'csv' or 'html'. Defaults to 'xml'. - - - start minimized to the system tray - start minimized to the system tray - - - malformed string, possible unescaped delimiter - - - - missing closing delimiter - - - - %1, row: %2, column: %3 - - - - Tags - Tags + KeePassXC is not running. No open database to lock + KeePassXC is not running. No open database to lock @@ -9256,39 +7988,20 @@ This option is deprecated, use --set-key-file instead. Internal zlib error: - - RemoteHandler - - Command `%1` did not finish in time. Process was killed. - - - - Failed to upload merged database. Command `%1` did not finish in time. Process was killed. - - - - Invalid download parameters provided. - - - - Command `%1` failed to download database. - - - - Invalid database pointer or upload parameters provided. - - - - Command `%1` exited with status code: %2 - - - - Failed to upload merged database. Command `%1` exited with status code: %2 - - - ReportsWidgetBrowserStatistics + + Exclude expired entries from the report + Exclude expired entries from the report + + + Show only entries which have URL set + Show only entries which have URL set + + + Show only entries which have browser settings in custom data + Show only entries which have browser settings in custom data + Double-click entries to edit. Double-click entries to edit. @@ -9353,53 +8066,44 @@ This option is deprecated, use --set-key-file instead. Exclude from reports Exclude from reports - - Expire Entry(s)… - Expire Entry…Expire Entries… - - - Only show entries that have a URL - Only show entries that have a URL - - - Only show entries that have been explicitly allowed or denied - Only show entries that have been explicitly allowed or denied - - - Show expired entries - Show expired entries - - - (Expired) - (Expired) - - - Delete plugin data from Entry(s)… - Delete plugin data from Entry…Delete plugin data from Entries… - ReportsWidgetHealthcheck - Show expired entries - Show expired entries + Exclude expired entries from the report + Exclude expired entries from the report - (Expired) - (Expired) + Also show entries that have been excluded from reports + Also show entries that have been excluded from reports Hover over reason to show additional details. Double-click entries to edit. Hover over reason to show additional details. Double-click entries to edit. + + Bad + Password quality + Bad + Bad — password must be changed Bad — password must be changed + + Poor + Password quality + Poor + Poor — password should be changed Poor — password should be changed + + Weak + Password quality + Weak + Weak — consider changing the password Weak — consider changing the password @@ -9448,14 +8152,6 @@ This option is deprecated, use --set-key-file instead. Exclude from reports Exclude from reports - - Expire Entry(s)… - Expire Entry…Expire Entries… - - - Show entries that have been excluded from reports - Show entries that have been excluded from reports - ReportsWidgetHibp @@ -9551,77 +8247,6 @@ This option is deprecated, use --set-key-file instead. Exclude from reports Exclude from reports - - Expire Entry(s)… - Expire Entry…Expire Entries… - - - - ReportsWidgetPasskeys - - Export - Export - - - Import - Import - - - List of entry URLs - List of entry URLs - - - Title - Title - - - Path - Path - - - Username - Username - - - URLs - URLs - - - Edit Entry… - Edit Entry… - - - Delete Entry(s)… - Delete Entry…Delete Entries… - - - Relying Party - Relying Party - - - Show expired entries - Show expired entries - - - (Expired) - (Expired) - - - Export Confirmation - Export Confirmation - - - The passkey file will be vulnerable to theft and unauthorized use, if left unsecured. Are you sure you want to continue? - The passkey file will be vulnerable to theft and unauthorized use, if left unsecured. Are you sure you want to continue? - - - Please wait, list of entries with passkeys is being updated… - Please wait, list of entries with passkeys is being updated… - - - No entries with passkeys. - No entries with passkeys. - ReportsWidgetStatistics @@ -9796,14 +8421,6 @@ This option is deprecated, use --set-key-file instead. No agent running, cannot list identities. No agent running, cannot list identities. - - Failed to remove all SSH identities from agent. - Failed to remove all SSH identities from agent. - - - All SSH identities removed from agent. - All SSH identities removed from agent. - SearchHelpWidget @@ -9870,10 +8487,6 @@ This option is deprecated, use --set-key-file instead. Search Help Search Help - - Save Search - Save Search - Search (%1)… Search placeholder text, %1 is the keyboard shortcut @@ -9887,6 +8500,10 @@ This option is deprecated, use --set-key-file instead. Limit search to selected group Limit search to selected group + + Save Search + Save Search + SettingsClientModel @@ -9948,10 +8565,34 @@ This option is deprecated, use --set-key-file instead. Confirm when passwords are retrieved by clients Confirm when passwords are retrieved by clients + + <html><head/><body><p><span style=" + font-family:'-apple-system','BlinkMacSystemFont','Segoe UI','Helvetica','Arial','sans-serif','Apple Color + Emoji','Segoe UI Emoji'; font-size:14px; color:#24292e; background-color:#ffffff;">This setting does + not override disabling recycle bin prompts</span></p></body></html> + + <html><head/><body><p><span style=" + font-family:'-apple-system','BlinkMacSystemFont','Segoe UI','Helvetica','Arial','sans-serif','Apple Color + Emoji','Segoe UI Emoji'; font-size:14px; color:#24292e; background-color:#ffffff;">This setting does + not override disabling recycle bin prompts</span></p></body></html> + + Confirm when clients request entry deletion Confirm when clients request entry deletion + + <html><head/><body><p>This improves compatibility with certain applications + which search for password without unlocking the database first.</p><p>But enabling this may also + crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a + different value set in applications.)</p></body></html> + + <html><head/><body><p>This improves compatibility with certain applications + which search for password without unlocking the database first.</p><p>But enabling this may also + crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a + different value set in applications.)</p></body></html> + + Prompt to unlock database before searching Prompt to unlock database before searching @@ -9976,14 +8617,6 @@ This option is deprecated, use --set-key-file instead. Save current changes to activate the plugin and enable editing of this section. Save current changes to activate the plugin and enable editing of this section. - - <html><head/><body><p>This setting does not override disabling recycle bin prompts </p></body></html> - <html><head/><body><p>This setting does not override disabling recycle bin prompts </p></body></html> - - - <html><head/><body><p>This improves compatibility with certain applications which search for password without unlocking the database first.</p><p>But enabling this may also crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a different value set in applications.) </p></body></html> - <html><head/><body><p>This improves compatibility with certain applications which search for password without unlocking the database first.</p><p>But enabling this may also crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a different value set in applications.) </p></body></html> - SettingsWidgetKeeShare @@ -10091,14 +8724,6 @@ This option is deprecated, use --set-key-file instead. TagModel - - Clear Search - Clear Search - - - All Entries - All Entries - Expired Expired @@ -10107,6 +8732,14 @@ This option is deprecated, use --set-key-file instead. Weak Passwords Weak Passwords + + All Entries + All Entries + + + Clear Search + Clear Search + TagView @@ -10284,6 +8917,26 @@ Example: JBSWY3DPEHPK3PXP 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 1Password + Import from 1Password + + + Import from CSV + Import from CSV + Recent databases Recent databases @@ -10296,18 +8949,6 @@ Example: JBSWY3DPEHPK3PXP Welcome to KeePassXC %1 Welcome to KeePassXC %1 - - Create Database - Create Database - - - Open Database - Open Database - - - Import File - Import File - WinUtils @@ -10324,8 +8965,31 @@ Example: JBSWY3DPEHPK3PXP Could not register global shortcut + + WindowsHello + + Failed to init KeePassXC crypto. + Failed to init KeePassXC crypto. + + + Failed to encrypt key data. + Failed to encrypt key data. + + + Failed to get Windows Hello credential. + Failed to get Windows Hello credential. + + + Failed to decrypt key data. + Failed to decrypt key data. + + YubiKey + + %1 No interface, slot %2 + %1 No interface, slot %2 + General: General: @@ -10337,6 +9001,14 @@ Example: JBSWY3DPEHPK3PXP YubiKeyEditWidget + + Refresh hardware tokens + Refresh hardware tokens + + + Refresh + Refresh + Hardware key slot selection Hardware key slot selection @@ -10369,6 +9041,10 @@ Example: JBSWY3DPEHPK3PXP Challenge-Response set, click to change or remove Challenge-Response set, click to change or remove + + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + Detecting hardware keys… Detecting hardware keys… @@ -10377,25 +9053,28 @@ Example: JBSWY3DPEHPK3PXP No hardware keys detected No hardware keys detected + + + YubiKeyInterface - Refresh hardware keys - Refresh hardware keys - - - <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed with <a href="https://keepassxc.org/docs/#faq-yubikey-howto">Challenge-Response</a>.</p> - <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed with <a href="https://keepassxc.org/docs/#faq-yubikey-howto">Challenge-Response</a>.</p> - - - Hardware keys found, but no slots are configured - Hardware keys found, but no slots are configured + %1 Invalid slot specified - %2 + %1 Invalid slot specified - %2 YubiKeyInterfacePCSC + + (PCSC) %1 [%2] Challenge-Response - Slot %3 + (PCSC) %1 [%2] Challenge-Response - Slot %3 + The YubiKey PCSC interface has not been initialized. The YubiKey PCSC interface has not been initialized. + + Hardware key is currently in use. + Hardware key is currently in use. + Could not find or access hardware key with serial number %1. Please present it to continue. Could not find or access hardware key with serial number %1. Please present it to continue. @@ -10412,21 +9091,6 @@ Example: JBSWY3DPEHPK3PXP Failed to complete a challenge-response, the PCSC error code was: %1 Failed to complete a challenge-response, the PCSC error code was: %1 - - (NFC) %1 [%2] - Slot %3, %4 - YubiKey display fields - (NFC) %1 [%2] - Slot %3, %4 - - - Press - USB Challenge-Response Key interaction request - Press - - - Passive - USB Challenge-Response Key no interaction required - Passive - YubiKeyInterfaceUSB @@ -10434,6 +9098,14 @@ Example: JBSWY3DPEHPK3PXP Unknown Unknown + + (USB) %1 [%2] Configured Slot - %3 + (USB) %1 [%2] Configured Slot - %3 + + + (USB) %1 [%2] Challenge-Response - Slot %3 - %4 + (USB) %1 [%2] Challenge-Response - Slot %3 - %4 + Press USB Challenge-Response Key interaction request @@ -10448,6 +9120,10 @@ Example: JBSWY3DPEHPK3PXP The YubiKey USB interface has not been initialized. The YubiKey USB interface has not been initialized. + + Hardware key is currently in use. + Hardware key is currently in use. + Could not find hardware key with serial number %1. Please plug it in to continue. Could not find hardware key with serial number %1. Please plug it in to continue. @@ -10464,15 +9140,5 @@ Example: JBSWY3DPEHPK3PXP Failed to complete a challenge-response, the specific error was: %1 Failed to complete a challenge-response, the specific error was: %1 - - %1 [%2] - Slot %3 - YubiKey NEO display fields - %1 [%2] - Slot %3 - - - %1 [%2] - Slot %3, %4 - YubiKey display fields - %1 [%2] - Slot %3, %4 - \ No newline at end of file diff --git a/share/translations/keepassxc_es.ts b/share/translations/keepassxc_es.ts index 502575fa3..d62e98a90 100644 --- a/share/translations/keepassxc_es.ts +++ b/share/translations/keepassxc_es.ts @@ -11,11 +11,11 @@ Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> - Informar de errores en: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> + Informe 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. - KeePassXC se distribuye bajo los términos de la Licencia Pública General de GNU (GPL) versión 2 o (a tu elección) versión 3. + KeePassXC se distribuye bajo la Licencia Pública General de GNU (GPL) versión 2 o versión 3 (si así lo prefiere). Project Maintainers: @@ -23,7 +23,7 @@ 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. + Un agradecimiento especial del equipo de KeePassXC a debfx por crear el KeePassX original. Contributors @@ -39,7 +39,7 @@ Include the following information whenever you report a bug: - Incluya la información siguiente cuando informe sobre un error: + Incluya la siguiente información cuando reporte sobre un error: Copy to clipboard @@ -54,7 +54,7 @@ Non-existing/inaccessible executable path. Please double-check the client is legit. - Ruta del ejecutable no existe/inaccesible. Compruebe que el cliente es legítimo. + Ruta del ejecutable no existe o es inaccesible. Compruebe que el cliente es legítimo. <html><head/><body><p><span style=" font-weight:600;">%1 </span>is requesting access to the following entries:</p></body></html> @@ -80,10 +80,6 @@ Details Detalles - - Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. - Su decisión será recordada mientras el cliente solicitante y KeePassXC están en ejecución ambos. - Remember Recordar @@ -92,6 +88,10 @@ Allow Selected Permitir seleccionado + + Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. + Su decisión será recordada mientras el cliente solicitante y KeePassXC están en ejecución ambos. + Deny All && Future Denegar todo y futuro @@ -112,7 +112,7 @@ AgentSettingsWidget Enable SSH Agent integration - Habilitar integración del agente de SSH + Habilitar la integración del Agente de SSH Use Pageant @@ -122,10 +122,6 @@ Use OpenSSH Usar OpenSSH - - Use both agents - Usar ambos agentes - SSH_AUTH_SOCK override Anulación de SSH_AUTH_SOCK @@ -148,12 +144,16 @@ No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. - No hay ningún socket de Agente de SSH disponible. Asegúrese que exista la variable de entorno SSH_AUTH_SOCK o fije una sustitución. + No hay ningún socket de Agente de SSH disponible. Asegúrese de que existe SSH_AUTH_SOCK variable de entorno o establezca una invalidación. SSH Agent connection is working! ¡La conexión del agente de SSH está funcionando! + + Use both agents + Usar ambos agentes + ApplicationSettingsWidget @@ -169,10 +169,6 @@ Security Seguridad - - This setting cannot be enabled when minimize on unlock is enabled. - Esta preferencia no puede ser habilitada cuando está habilitado minimizar al desbloquear. - Access error for config file %1 Error de acceso al archivo de configuración %1 @@ -215,51 +211,23 @@ You must restart the application to set the new language. Would you like to restart now? - Debe reiniciar la aplicación para establecer el nuevo lenguage. ¿Desea reiniciar ahora? + Debe reiniciar la aplicación para establecer el nuevo idioma. ¿Desea reiniciar ahora? + + + Reset Settings? + ¿Reiniciar configuración? + + + Are you sure you want to reset all general and security settings to default? + ¿Está seguro que desea reiniciar la configuración general y de seguridad a sus valores predeterminados? Select backup storage directory Seleccionar la carpeta de copia de seguridad - Confirm Reset - Confirmar Reinicio - - - Are you sure you want to reset all settings to default? - ¿Estás seguro de que quieres restablecer todos los ajustes por defecto? - - - Import KeePassXC Settings - Importar la configuración de KeePassXC - - - Failed to import settings from %1, not a valid settings file. - No se pudo importar la configuración de %1, no es un archivo de configuración válido. - - - Export KeePassXC Settings - Exportar la configuración de KeePassXC - - - Small - Pequeño - - - Normal - normal - - - Medium - mediano - - - Large - largo - - - Custom - Personalizado + This setting cannot be enabled when minimize on unlock is enabled. + Esta preferencia no puede ser habilitada cuando está habilitado minimizar al desbloquear. @@ -278,7 +246,7 @@ Automatically launch KeePassXC at system startup - Iniciar automáticamente KeePassXC al arrancar el sistema + Inicie automáticamente KeePassXC al inicio del sistema Minimize window at application startup @@ -286,16 +254,12 @@ Minimize window after unlocking database - Minimizar la ventana tras desbloquear base de datos. + Minimizar ventana tras desbloquear base de datos. Remember previously used databases Recordar bases de datos usadas anteriormente - - recent files - archivos recientes - Load previously open databases on startup Cargar bases de datos abiertas anteriormente al inicio @@ -312,13 +276,32 @@ Include beta releases when checking for updates Incluir versiones beta al comprobar actualizaciones + + On database unlock, show entries that + Al desbloquear la base de datos, mostrar apuntes que + + + have expired + On database unlock, show entries that... + ha expirado + + + days + On database unlock, show entries that will expire within %1 days + días + + + will expire within + On database unlock, show entries that... + expirarán en + File Management - Gestión de archivos + Administración de archivos Automatically save after every change - Guardar automáticamente tras cada cambio + Guardar automáticamente después de cada cambio Automatically save when locking database @@ -326,7 +309,7 @@ Automatically save non-data changes when locking database - Guardar automaticamente cambios sin datos al bloquear la base de datos + Guardar automáticamente cambios sin datos al bloquear la base de datos Automatically reload the database when modified externally @@ -336,10 +319,22 @@ Backup database file before saving Hacer una copia de seguridad de la base de datos antes de guardar + + Backup destination + Destino de la copia de seguridad + + + Specifies the database backup file location. Occurrences of "{DB_FILENAME}" are replaced with the filename of the saved database without extension. {TIME:<format>} is replaced with the backup time, see https://doc.qt.io/qt-5/qdatetime.html#toString. <format> defaults to format string "dd_MM_yyyy_hh-mm-ss". + Especifica la localización del archivo de la copia de seguridad de la base de datos. Las ocurrencias de «{DB_FILENAME}» son reemplazadas con el nombre de archivo de la base de datos guardada sin la extensión. {TIME:<format>} es reemplazado con la hora de la copia de seguridad, ver https://doc.qt.io/qt-5/qdatetime.html#toString. <format> su cadena de formato por defecto es «dd_MM_yyyy_hh-mm-ss». + {DB_FILENAME}.old.kdbx {DB_FILENAME}.old.kdbx + + Choose... + Seleccionar... + Use alternative saving method (may solve problems with Dropbox, Google Drive, GVFS, etc.) Usar método alternativo de guardado (puede resolver problemas con Dropbox, Google Drive, GVFS, etc.) @@ -354,7 +349,7 @@ Entry Management - Gestión de apunte + Gestión de apuntes Use group icon on entry creation @@ -378,11 +373,11 @@ Favicon download timeout: - Tiempo agotado en la espera de descarga del icono: + Tiempo de espera de descarga de icono: Website icon download timeout in seconds - Tiempo de espera en segundos para descarga del icono del sitio web + Tiempo de espera en segundos de descarga de icono de sitio web sec @@ -417,13 +412,9 @@ Toolbar button style: Estilo de la barra de botones: - - Show passwords in color - Mostrar contraseñas en color - Use monospaced font for notes - Utilizar tipografía mono-espaciadas para notas + Utilizar tipografía mono espaciadas para notas Minimize instead of app exit @@ -439,7 +430,7 @@ Tray icon type: - Estilo de icono de la bandeja: + Estilo de icono de en la barra de tareas: Hide window to system tray when minimized @@ -447,7 +438,7 @@ Reset settings to default… - Restablecer configuración por defecto… + Restaurar configuración predeterminada... Auto-Type @@ -463,7 +454,7 @@ Always ask before performing Auto-Type - Siempre preguntar antes de autoescritura + Siempre solicitar antes de autoescritura Hide expired entries from Auto-Type @@ -471,11 +462,11 @@ Re-lock previously locked database after performing Auto-Type - Volver a bloquear la base de datos tras realizar un autotecleo + Volver a bloquear la base de datos tras realizar una autoescritura Auto-Type start delay: - Retardo del inicio de autoescritura: + Retardo de inicio de autoescritura: Global Auto-Type shortcut: @@ -483,7 +474,7 @@ Auto-type start delay milliseconds - Retardo de inicio del autoescritura en milisegundos + Retardo de inicio de autoescritura en milisegundos ms @@ -492,7 +483,7 @@ Auto-Type typing delay: - Retardo de tecleo de autoescritura + Retardo de escritura de la autoescritura: Global auto-type shortcut @@ -507,69 +498,12 @@ Recordar último apunte para: - On database unlock, show entries that will expire within - Al desbloquear la base de datos, mostrar las entradas que caducarán en un plazo de + recent files + archivos recientes - On database unlock, show entries that will expire within - Al desbloquear la base de datos, mostrar las entradas que caducarán en un plazo de - - - days - number of days warning for password expiration - días - - - Destination format: - Formato de destino: - - - <html><head/><body><p><span style=" font-weight:600;">{DB_FILENAME}</span> is replaced with the filename of the saved database without extension</p><p><span style=" font-weight:600;">{TIME:&lt;format&gt;}</span> is replaced with the specified time format (default: dd_MM_yyyy_hh-mm-ss)</p><p>See the User Guide for more details</p></body></html> - <html><head/><body><p><span style=" font-weight:600;">{DB_FILENAME}</span> se sustituye por el nombre de archivo de la base de datos guardada sin extensión</p><p><span style=" font-weight:600;">{TIME:&lt;format&gt;}</span> se sustituye por el formato de hora especificado (por defecto: dd_MM_yyyy_hh-mm-ss)</p><p>Para más información, consulte la Guía del usuario</p></body></html> - - - Choose folder... - Elegir carpeta... - - - Show confirmation before moving entries to recycle bin - Mostrar confirmación antes de mover entradas a papelera - - - Copy data on double clicking field in entry view - Copiar datos al hacer doble clic en un campo de la vista de entrada - - - Show toolbar - Mostrar barra de herramientas - - - Show the menu bar by pressing the Alt key - Mostrar la barra de menús pulsando la tecla Alt - - - Show menubar - Mostrar barra de menú - - - Import settings… - Importar ajustes.... - - - Export settings… - Exportar ajustes... - - - Open browser on double clicking URL field in entry view - Abrir el navegador al hacer doble clic en el campo URL en la vista de entrada - - - Font size: - Tamaño fuente: - - - Font size selection - Selección de tamaño de fuente + Show passwords in color + Mostrar contraseñas en color @@ -580,20 +514,20 @@ Database lock timeout seconds - Tiempo de espera de cierre de la base de datos + Tiempo de espera de bloqueo de base de datos en segundos sec Seconds - seg + segundos Clear clipboard after - Purgar el portapapeles tras + Vaciar el portapapeles después de Clear search query after - Purgar la consulta de búsqueda tras + Vaciar consulta de búsqueda tras min @@ -602,7 +536,7 @@ Clipboard clear seconds - Segundos para purgar el portapapeles + Vaciar portapapeles en segundos Lock databases after inactivity of @@ -618,24 +552,40 @@ Lock databases when session is locked or lid is closed - Bloquear bases de datos cuando la sesión se bloquee o se cierre el monitor + Bloquear bases de datos cuando la sesión está bloqueada o la pantalla esté cerrada Lock databases after minimizing the window Bloquear bases de datos al minimizar la ventana + + Require password repeat when it is visible + Pedir repetición de la contraseña cuando está visible + Hide passwords when editing them - Ocultar las contraseñas cuando las edite + Ocultar las contraseñas durante la edición de ellas Use placeholder for empty password fields - Emplear contenedor para los campos de contraseña vacíos + Usar marcador de posición para los campos de contraseña vacíos Hide passwords in the entry preview panel Ocultar contraseñas en el apunte del panel de vista previa + + Hide entry notes by default + Ocultar notas del apunte predeterminado + + + Move entries to recycle bin without confirmation + Mover apuntes a la papelera de reciclaje sin confirmación + + + Enable double click to copy the username/password entry columns + Activar doble clic para copiar las columnas de apunte de usuario/contraseña + Privacy Privacidad @@ -648,18 +598,6 @@ Hide TOTP in the entry preview panel Ocultar TOTP en el panel de vista previa de apunte - - Lock databases when switching user - Bloquear bases de datos al cambiar de usuario - - - Lock Options - Opciones de bloqueo - - - Hide notes in the entry preview panel - Ocultar notas en el panel de vista previa de apunte - AutoType @@ -669,7 +607,7 @@ Auto-Type Error - Error de autoescritura + Error de Autoescritura Permission Required @@ -681,7 +619,7 @@ KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. - KeePassXC requiere el permiso accesibilidad y grabación de pantalla para realizar la autotecleo global. La grabación de pantalla es necesario para usar el título de la ventana al encontrar apuntes. Si ya ha concedido este permiso, quizá deba reiniciar KeePassXC. + KeePassXC requiere el permiso accesibilidad y grabación de pantalla para realizar la autoescritura global. La grabación de pantalla es necesario para usar el título de la ventana al encontrar apuntes. Si ya ha concedido este permiso, quizá deba reiniciar KeePassXC. Invalid entry provided @@ -704,13 +642,27 @@ Retraso muy largo detectado, máx es %1: %2 - Entry does not have attribute for PICKCHARS: %1 - El apunte no tiene atributo para PICKCHARS: %1 + Invalid conversion type: %1 + Tipo de conversión no válido: %1 + + + Invalid conversion syntax: %1 + Sintaxis de conversión no válida: %1 + + + Invalid regular expression syntax %1 +%2 + Sintaxis de expresión regular no válida %1 +%2 Invalid placeholder: %1 Marcador inválido: %1 + + Entry does not have attribute for PICKCHARS: %1 + El apunte no tiene atributo para PICKCHARS: %1 + AutoTypeAssociationsModel @@ -728,7 +680,7 @@ Default sequence - Secuencia por defecto + Secuencia predeterminada @@ -752,6 +704,10 @@ AutoTypePlatformX11 + + Trying to send invalid keysym. + Intentando enviar keysym no válido. + Sequence aborted: Caps Lock is on Secuencia abortada: Bloqueo Mayúsculas está activo @@ -764,16 +720,12 @@ Unable to get valid keycode for key: No se puede obtener clave de código válida para la clave: - - Trying to send invalid keyboard symbol. - Intentando enviar símbolos de teclado incorrectos. - AutoTypeSelectDialog Auto-Type - KeePassXC - Auto-teclear - KeePassXC + Autoescritura - KeePassXC Double click a row to perform Auto-Type or find an entry using the search: @@ -787,7 +739,7 @@ Ctrl+2 - Type password<br/> Ctrl+3 - Type TOTP<br/> Ctrl+4 - Use Virtual Keyboard (Windows Only)</p> <p>Puede usar búsquedas de consultas avanzadas para encontrar cualquier apunte en su base de datos abierta. Los siguientes atajos de teclado son útiles:<br/> -Ctrl+F - Conmutar búsqueda de base de datos<br/> +Ctrl+F - Intercambiar búsqueda de base de datos<br/> Ctrl+1 - Escribir nombre de usuario<br/> Ctrl+2 - Escribir contraseña<br/> Ctrl+3 - Escribir TOTP<br/> @@ -872,13 +824,13 @@ Ctrl+4 - Usar teclado virtual (solo Windows)</p> Disable for this site Deshabilitar para este sitio - - Undo - Deshacer - BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + Guardar apunte KeePassXC-Browser + Ok Aceptar @@ -891,76 +843,15 @@ Ctrl+4 - Usar teclado virtual (solo Windows)</p> You have multiple databases open. Please select the correct database for saving credentials. Tiene múltiples bases de datos abiertas. -Seleccione la base de datos correcta para guardar las credenciales. - - - KeePassXC - Select Database - KeePassXC - Seleccionar base de datos - - - - BrowserPasskeysConfirmationDialog - - Cancel - Cancelar - - - Update - Actualizar - - - Authenticate - Autenticar - - - Register new - Registrar ahora - - - Register - Registrar - - - Timeout in <b>%n</b> seconds... - Caduca en <b>%n</b> segundo...Caduca en <b>%n</b> segundos...Caduca en <b>%n</b> segundos... - - - Relying Party: %1 - Parte que confía: %1 - - - Username: %1 - Usuario: %1 - - - KeePassXC - Passkey credentials - KeePassXC - Credenciales passkey - - - Add to existing entry - Añadir a apunte existente - - - Existing passkey found. -Do you want to register a new passkey for: - Passkey existente encontrada. -Desea registrar una nueva passkey para: - - - Select the existing passkey and press Update to replace it. - Seleccione una clave existente y presione Actualiza" para reemplazarla. - - - Authenticate passkey credentials for: - Autenticar credenciales de passkey de acceso para: - - - Do you want to register a passkey for: - Desa registrar una passkey para: +Por favor, debe seleccionar la base de datos correcta para guardar las credenciales. BrowserService + + KeePassXC: Create a new group + KeePassXC: crear un nuevo grupo + A request for creating a new group "%1" has been received. Do you want to create this group? @@ -969,6 +860,10 @@ Do you want to create this group? ¿Desea crear este grupo? + + KeePassXC: New key association request + KeePassXC: solicitud de asociación de nueva clave + You have received an association request for the following database: %1 @@ -978,84 +873,88 @@ chrome-laptop. Ha recibido una solicitud de asociación para la siguiente base de datos: %1 -Asigne a la conexión un nombre único o identificador, por ejemplo: -portatil-chrome. +Asigne a la conexión un nombre único o identificativo, por ejemplo: +portátil-chrome. Save and allow access Guardar y permitir acceso + + KeePassXC: Overwrite existing key? + KeePassXC: ¿Sobrescribir clave existente? + A shared encryption key with the name "%1" already exists. Do you want to overwrite it? - Ya existe una clave compartida con el nombre «%1». -¿Desea sobrescribirlo? + Existe una llave de cifrado con el nombre «%1». +¿Desea sobrescribirla? + + + KeePassXC: Update Entry + KeePassXC: actualizar apunte Do you want to update the information in %1 - %2? ¿Desea actualizar la información en %1 - %2? + + KeePassXC: Delete entry + KeePassXC: Borrar apunte + A request for deleting entry "%1" has been received. Do you want to delete the entry? - Se ha recibido una solicitud para borrar el apunte «%1». + Se ha recibido una solicitud para borrar el apunte "%1". ¿Desea borrar este apunte? - %1 (Passkey) - %1 (Passkey) + Converting attributes to custom data… + Convirtiendo atributos a datos personalizados... - KeePassXC - Create a new group - KeePassXC - Crear un nuevo grupo + Abort + Abortar - Disable - Deshabilitar + KeePassXC: Converted KeePassHTTP attributes + KeePassXC: atributos de KeePassHTTP convertidos - KeePassXC - Overwrite existing key? - KeePassXC - ¿Sobreescribir clave existente? + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + Atributos correctamente convertidos desde %1 apunte(s). +Movidas %2 claves a datos personalizados. + + + Successfully moved %n keys to custom data. + %n claves movidas correctamente a datos personalizados.%n claves(s) movida(s) a datos propios correctamente.%n claves movidas correctamente datos personalizados. - KeePassXC - Update Entry - KeePassXC - Actualizar apunte + KeePassXC: No entry with KeePassHTTP attributes found! + KeePassXC: ¡No se encontró ningún apunte con los atributos KeePassHTTP! - KeePassXC - Delete entry - KeePassXC - Eliminar apunte + The active database does not contain an entry with KeePassHTTP attributes. + La base de datos activa no contiene un apunte con atributos de KeePassHTTP. - KeePassXC - New key association request - KeePassXC - Petición de nueva asociación de clave + Don't show this warning again + No mostrar esta advertencia de nuevo - Passkey - Passkey + KeePassXC: Legacy browser integration settings detected + KeePassXC: detectada configuración de integración con navegador heredada - KeePassXC - Passkey credentials - KeePassXC - Credenciales passkey - - - Register a new passkey to this entry: - Añadir una nueva passkey de acceso para esta entrada: - - - KeePassXC - Update passkey - KeePassXC - Actualizar passkey - - - Entry already has a passkey. -Do you want to overwrite the passkey in %1 - %2? - El apunte ya tiene un passkey. -¿Desea sobreescribirlo con el passkey en %1 - %2? - - - Register - Registrar + 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? + Sus configuraciones de KeePassXC-Browser necesitan moverse a las configuraciones de base de datos. +Es necesario para mantener sus conexiones presentes del navegador. +¿Desea migrar sus configuraciones existentes ahora? @@ -1066,19 +965,23 @@ Do you want to overwrite the passkey in %1 - %2? This is required for accessing your databases with KeePassXC-Browser - Esto es requerido para acceder a sus bases de datos con KeePassXC-Browser + Esto es necesario para acceder a las bases de datos con KeePassXC-Browser Enable browser integration - Activar integración con navegadores + Habilitar integración con navegador General General + + Browsers installed as snaps are currently not supported. + Los navegadores instalados como snaps no están soportados. + Enable integration for these browsers: - Habilitar integración a estos navegadores: + Permitir la integración con estos navegadores: Vivaldi @@ -1111,7 +1014,7 @@ Do you want to overwrite the passkey in %1 - %2? Show a notification when credentials are requested Credentials mean login data requested via browser extension - Mostrar una notificación cuando se requieran las credenciales + Mostrar una notificación cuando las credenciales son requeridas Request to unlock the database if it is locked @@ -1123,11 +1026,11 @@ Do you want to overwrite the passkey in %1 - %2? Match URL scheme (e.g., https://example.com) - Coincidir con el esquema de URL (ej., https://ejemplo.es) + Coincidir con el esquema de URL (ej., https://example.com) Only returns the best matches for a specific URL instead of all entries for the whole domain. - Devolver únicamente los resultados similares para una URL específica en lugar de todos los apuntes para todo el dominio. + Sólo devolver los resultados similares para una URL específica en vez de todas los apuntes para todo el dominio. Return only best-matching credentials @@ -1135,7 +1038,7 @@ Do you want to overwrite the passkey in %1 - %2? Returns expired credentials. String [expired] is added to the title. - Devuelve las credenciales caducadas. La cadena [caducada] es agregada al título. + Devuelve las credenciales expiradas. La cadena [expirada] es añadida al título. Allow returning expired credentials @@ -1148,7 +1051,7 @@ Do you want to overwrite the passkey in %1 - %2? Search in all opened databases for matching credentials Credentials mean login data requested via browser extension - Buscar las credenciales por todas las bases de datos abiertas correspondientes + Buscar en todas las bases de datos abiertas las credenciales correspondientes Advanced @@ -1167,48 +1070,48 @@ Do you want to overwrite the passkey in %1 - %2? Do not ask permission for HTTP Basic Auth An extra HTTP Basic Auth setting - No solicitar permiso para Autenticación básica HTTP + No solicitar permiso para autenticación básica HTTP Automatically creating or updating string fields is not supported. - No se permite crear o actualizar automáticamente campos de caracteres. + No se permite crear o actualizar campos de cadenas automáticamente. Return advanced string fields which start with "KPH: " - Devuelve campos de texto avanzados que comienzan por «KPH: » + Devuelve campos de texto avanzados que comienzan por "KPH:" Don't display the popup suggesting migration of legacy KeePassHTTP settings. - No desplegar la ventana emergente sugiriendo migración de configuraciones de KeePassHTTP heredados. + No permitir ventana emergente sugiriendo migración de configuración antigua de KeePassHTTP. Do not prompt for KeePassHTTP settings migration. - No solicitar configuraciones de migración de KeePassHTTP. + No preguntar por migración de configuración de KeePassHTTP. Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. - Actualizaciones KeePassXC o keepassxc-proxy binario automáticamente para guiones de mensajes nativos en el arranque. + Actualizaciones KeePassXC o keepassxc-proxy binario automáticamente para obtener los mensajes nativos en el arranque. Update native messaging manifest files at startup - Actualizar ficheros de manifiesto de mensajería nativa al arrancar + Actualizar archivo manifiesto de mensajería nativa al iniciar Use a custom proxy location if you installed a proxy manually. - Utiliza una ubicación proxy personalizado si ha instalado manualmante un proxy. + Utilizar un proxy instalado manualmente. Use a custom proxy location: Meant is the proxy for KeePassXC-Browser - Utiliza una ubicación de proxy personalizada: + Usar una ubicación de proxy personalizada: Custom proxy location field - Campo personalizado de ubicación del proxy + Ubicación de campo personalizado proxy Browser for custom proxy file - Explorador para fichero del proxy personalizado + Explorar para archivo personalizado proxy Browse… @@ -1217,7 +1120,7 @@ Do you want to overwrite the passkey in %1 - %2? Use a custom browser configuration location: - Emplear una ubicación de la configuración del explorador proxy personalizado: + Usar una ubicación de proxy personalizada: Browser type: @@ -1225,11 +1128,11 @@ Do you want to overwrite the passkey in %1 - %2? Toolbar button style - Estilo del botón para la barra de herramientas + Estilo de botón de barra de herramientas Config Location: - Ubicación de configuración: + Localización de la configuración: Custom browser location field @@ -1237,7 +1140,7 @@ Do you want to overwrite the passkey in %1 - %2? Browse for custom browser path - Examinar ruta personalizada del navegador + Buscar ruta del navegador personalizada Custom extension ID: @@ -1247,61 +1150,41 @@ Do you want to overwrite the passkey in %1 - %2? Custom extension ID ID de extensión personalizado + + Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 + Debido al modo aislado de Snap, debe ejecutar un código para permitir la integración con el navegador.<br/>Puede obtener este código de %1 + + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 + KeePassXC-Browser es necesario para que la integración del navegador funcione.<br />Descárgalo desde %1 y %2 y %3. %4 + + + Please see special instructions for browser extension use below + Vea las instrucciones especiales para el uso de extensión de navegador debajo. + + + <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. + <b>Error:</b> ¡No se puede encontrar la ubicación de proxy personalizada!<br/>La integración del navegador NO funcionará sin la aplicación proxy. + + + <b>Warning:</b> The following options can be dangerous! + <b>Advertencia:</b> las siguientes opciones pueden ser peligrosas. + Executable Files - Ficheros ejecutables + Archivos ejecutables All Files - Todos los ficheros + Todos los archivos Select custom proxy location - Seleccione una ubicación de proxy personalizada + Elegir una ubicación de proxy personalizada Select native messaging host folder location - Seleccione la ubicación de la carpeta de hospedaje de mensajería nativa - - - Allow keepassxc-proxy to list all entries with their title, URL and UUID in connected databases. - Permitir a keepassxc-proxy listar todos los apuntes con su título, URL y UUID en las bases de datos conectadas. - - - Allow limited access to all entries in connected databases (ignores site access restrictions) - Permitir acceso limitado a todos los apuntes en las bases de datos conectadas (ignorar restricciones de acceso de sitio) - - - <b>Warning:</b> Only adjust these settings if necessary. - <b>Advertencia:</b> Solo ajustar estas configuraciones si es necesario. - - - The custom proxy location does not exist. - La localización de proxy personalizada no existe. - - - <b>Error:</b> The custom proxy location does not exist. Correct this in the advanced settings tab. - <b>Error:</b> La localización de proxy personalizada no existe. Corrija esto en la pestaña de configuración avanzada. - - - <b>Error:</b> The installed proxy executable is missing from the expected location: %1<br/>Please set a custom proxy location in the advanced settings or reinstall the application. - <b>Error:</b> El ejecutable de proxy instalado falta en la localización esperada: %1<br/> Establezca una localización de proxy personalizada en la configuración avanzada o reinstale la aplicación. - - - Allows using insecure http://localhost with passkeys for testing purposes. - Permite usar el iseguro http://localhost con passkeys para propósitos de pruebas. - - - Allow using localhost with passkeys - Permitir usar localhost con passkeys - - - KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. - KeePassXC-Browser es necesario para el funcionamiento de la integración con el navegador. Descargalo por %1 y %2 y %3 - - - Browsers installed using Snap or Flatpak are not supported with exception to Firefox installed using Snap. - Los navegadores instalados mediante Snap o Flatpak no son compatibles, a excepción de Firefox instalado mediante Snap. + Seleccionar la ubicación de la carpeta del host de mensajería nativa @@ -1312,7 +1195,7 @@ Do you want to overwrite the passkey in %1 - %2? Append ' - Clone' to title - Agregar « - Clon» al título + Añadir «- Clon» al título Replace username and password with references @@ -1325,6 +1208,14 @@ Do you want to overwrite the passkey in %1 - %2? CsvImportWidget + + Import CSV fields + Importar campos de CSV + + + filename + nombre del archivo + size, rows, columns tamaño, filas, columnas @@ -1355,7 +1246,7 @@ Do you want to overwrite the passkey in %1 - %2? Notes - Anotaciones + Notas TOTP @@ -1371,7 +1262,7 @@ Do you want to overwrite the passkey in %1 - %2? Icon - Icono + Ícono Encoding @@ -1383,7 +1274,7 @@ Do you want to overwrite the passkey in %1 - %2? Text is qualified by - El texto está rodeado por + Los textos están rodeados por Text qualification @@ -1403,7 +1294,7 @@ Do you want to overwrite the passkey in %1 - %2? Header lines skipped - Líneas de cabecera descartadas + Líneas de cabecera ignoradas Number of header lines to discard @@ -1433,43 +1324,50 @@ Do you want to overwrite the passkey in %1 - %2? Column %1 Columna %1 + + Imported from CSV file + Importado de un archivo CSV + + + Original data: + Datos originales: + + + Error(s) detected in CSV file! + ¡Error(es) detectado(s) en el archivo CSV! + [%n more message(s) skipped] - [%n mensaje omitido][%n mensajes omitidos][%n mensajes omitidos] + [%n mensajes más omitido][%n más mensaje(s) descartado(s)][%n mensajes mas omitidos] - Failed to parse CSV file: %1 - Fallo al procesar archivo CSV: %1 + Error + Error - Imported from CSV file: %1 - Importar desde archivo CSV: %1 - - - No Title Selected - Sin titulo seleccinado - - - No title column was selected, entries will be hard to tell apart. -Are you sure you want to import? - No se ha seleccionado un título para la columna, será difícil asignar los registros correctamente. -¿Desea continuar con la importación? - - - Tags - Etiquetas + CSV import: writer has errors: +%1 + Importación CSV: la escritura tiene errores: +% 1 CsvParserModel + + %1, %2, %3 + file info: bytes, rows, columns + %1, %2, %3 + + + %n byte(s) + %n byte%n byte(s)%n bytes + %n row(s) - CSV row count %n fila%n fila(s)%n filas %n column(s) - CSV column count %n columna%n columna(s) %n columnas @@ -1482,11 +1380,11 @@ Are you sure you want to import? File %1 does not exist. - El fichero %1 no existe. + El archivo %1 no existe. Unable to open file %1. - Incapaz de abrir el fichero %1. + Incapaz de abrir el archivo %1. Error while reading the database: %1 @@ -1494,7 +1392,7 @@ Are you sure you want to import? Could not save, database does not point to a valid file. - No se ha podido guardar, la base de datos no apunta a un fichero válido. + No se puede guardar, la base de datos no apunta a un archivo válido. Database save is already in progress. @@ -1502,17 +1400,17 @@ Are you sure you want to import? Could not save, database has not been initialized! - No se ha podido guardar, la base de datos no a sido inicializada. + No se puede guardar, la base de datos no a sido inicializada. Database file has unmerged changes. - El fichero de base de datos tiene modificaciones no combinadas. + El archivo de base de datos tiene cambios no combinados. %1 Backup database located at %2 %1 -Respaldo de base de datos ubicado en %2 +Copia de seguridad de base de datos ubicada en %2 Key not transformed. This is a bug, please report it to the developers. @@ -1520,15 +1418,7 @@ Respaldo de base de datos ubicado en %2 Recycle Bin - Papelera - - - Database file read error. - Error de lectura del archivo de base de datos. - - - No file path was provided. - No se ha proporcionado ninguna ruta de archivo. + Papelera de reciclaje @@ -1552,22 +1442,50 @@ Respaldo de base de datos ubicado en %2 Password field Campo de contraseña + + Enter Additional Credentials (if any): + Introducir credenciales adicionales (si hay alguna): + + + Key File: + Archivo Clave: + + + Key file help + Ayuda de archivo clave + Hardware key slot selection - Selección de ranura de clave hardware + Selección de ranura de llave por hardware + + + Hardware Key: + Llave hardware: + + + Hardware key help + Ayuda de la llave por hardware Key file to unlock the database - Fichero clave para desbloquear la base de datos + Archivo clave para desbloquear la base de datos Browse for key file - Navegar para fichero clave + Explorar para un archivo clave Browse… Examinar... + + Refresh hardware tokens + Actualizar «tokens» hardware + + + Refresh + Actualizar + Unlock Database Desbloquear base de datos @@ -1599,8 +1517,8 @@ We recommend you update your KeePassXC installation. La base de datos que está intentando abrir seguramente fue creada por una nueva versión de KeePassXC. -Puede intentar abrirla de todas formas, pero puede estar incompleta y -guardar cualquier cambio puede ocasionar pérdida de datos. +Puede intentar abrirla de todas formas, pero puede estar incompleta +y guardar cualquier cambio puede ocasionar pérdida de datos. Le recomendamos actualizar su instalación de KeePassXC. @@ -1614,33 +1532,37 @@ Le recomendamos actualizar su instalación de KeePassXC. Unlock failed and no password given - Desbloqueo erróneo y contraseña no proporcionada + Desbloqueo fallido y sin contraseña proporcionada Unlocking the database failed and you did not enter a password. Do you want to retry with an "empty" password instead? To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. - Desbloqueo de base de datos erróneo y no se introdujo una contraseña. + Desbloquear la base de datos ha fallado y no introdujo una contraseña. ¿Desea reintentar con una contraseña vacía? -Para prevenir que aparezca este error, debe ir a «Configuraciones de base de datos / Seguridad» y restablezca su contraseña. +Para prevenir que aparezca este error, debe ir a «Configuración de base de datos / Seguridad» y reiniciar su contraseña. Retry with empty password Reintentar con contraseña vacía + + Failed to authenticate with Touch ID + Fallo al autenticar con Touch ID + Failed to open key file: %1 - Fallo al abrir cerrojo: %1 + Fallo al abrir archivo clave: %1 Old key file format - Formato de cerrojo antiguo + Formato de archivo clave antiguo You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database &gt; Database Security &gt; Change Key File.</strong><br> - Está usando un cerrojo con un formato antiguo que KeePassXC puede<br>dejar de mantener en el futuro.<br><br>Considere generar un cerrojo nuevo yendo a:<br><strong>Base de Datos &gt; Seguridad de base de datos &gt; Cambiar cerrojo.</strong><br> + Está usando un fichero clave con un formato antiguo que KeePassXC puede<br>dejar de soportar en el futuro.<br><br>Considere generar un nuevo fichero clave yendo a:<br><strong>Base de Datos &gt; Seguridad de Base de Datos &gt; Cambiar Fichero Clave.</strong><br> Don't show this warning again @@ -1648,83 +1570,55 @@ Para prevenir que aparezca este error, debe ir a «Configuraciones de base de da All files - Todos los ficheros + Todos los archivos Key files - Cerrojos + Archivos clave Select key file - Seleccionar cerrojo + Seleccionar archivo clave Cannot use database file as key file - No se puede usar una base de datos como cerrojo + No se puede usar una base de datos como archivo clave + + + You cannot use your database file as a key file. +If you do not have a key file, please leave the field empty. + No puede usar una base de datos como archivo clave. +Si no tiene un archivo clave, deje el campo vacío. + + + Detecting hardware keys… + Detectando llaves por hardware... + + + No hardware keys detected + No se detectaron llaves por hardware + + + Select hardware key… + Seleccionar llave por hardware... + + + <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information…</p> + <p>Adicionalmente a la contraseña, puede usar un archivo secreto para mejorar la seguridad de su base de datos. Este archivo puede ser generado en su configuración de base de datos.</p><p>¡Este <strong>no</strong> es su archivo de base de datos *.kdbx! <br>Si no tiene un fichero clave, deje este campo vacío.</p><p>Haga clic para más información...</p> + + + <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +<p>Click for more information…</p> + <p>Puede usar una llave de seguridad por hardware como <strong>YubiKey</strong> o <strong>OnlyKey</strong> con ranuras configuradas para HMAC-SHA1.</p> +<p>Haga clic para más información...</p> authenticate to access the database identifiquese para acceder a la base de datos - Failed to authenticate with Quick Unlock: %1 - Fallo al autenticar con Quick Unlock: %1 - - - Select Key File: - Seleccionar archivo clave: - - - <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!</p> - <p>Adicionalmente a una contraseña, puede usar un archivo secreto para mejorar la seguridad de su base de datos. Este archivo puede ser generado en sus preferencia de seguridad de base de datos.</p><p>Esto <strong>no</strong> es su archivo de base de datos *.kdbx.</p> - - - Use hardware key [Serial: %1] - Usar clave hardware [Serial: %1] - - - Use hardware key - Usar clave hardware - - - Your database file is NOT a key file! -If you don't have a key file or don't know what that is, you don't have to select one. - Su archivo de base de datos no es un archivo clave. -Si no tiene un archivo clave o no conoce que es, no tiene que seleccionar uno. - - - KeePassXC database file selected - Archivo de base de datos KeePassXC seleccionado - - - The file you selected looks like a database file. -A database file is NOT a key file! - -Are you sure you want to continue with this file?. - El archivo que ha seleccionado parece como un archivo de base de datos. -Un archivo de base de datos no es un archivo clave. - -¿Desea continuar con este archivo? - - - No hardware keys found. - No se han encontrado claves hardware. - - - Refresh Hardware Keys - Actualizando claves hardware - - - Click to add a key file. - Clic para añadir un archivo clave. - - - <a href="#" style="text-decoration: underline">I have a key file</a> - <a href="#" style="text-decoration: underline">Tengo un archivo clave</a> - - - Hardware keys found, but no slots are configured. - Se han encontrado claves de hardware, pero no se han configurado ranuras. + Failed to authenticate with Windows Hello: %1 + Fallo de autenticación con Windows Hello: %1 @@ -1736,6 +1630,10 @@ Un archivo de base de datos no es un archivo clave. DatabaseSettingsDialog + + Advanced Settings + Configuraciones avanzadas + General General @@ -1760,22 +1658,6 @@ Un archivo de base de datos no es un archivo clave. Maintenance Mantenimiento - - KeeShare - KeeShare - - - Secret Service Integration - Integración con servicio de secretos - - - Remote Sync - Sincronización remota - - - Database Settings: %1 - Configuraciones de la base de datos: 1% - DatabaseSettingsWidgetBrowser @@ -1783,17 +1665,25 @@ Un archivo de base de datos no es un archivo clave. KeePassXC-Browser settings Configuraciones del KeePassXC-Browser + + Convert KeePassHTTP data + Convertir datos KeePassHTTP + + + Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data + Convertir atributos heredados KeePassHTTP a datos persalizados compatibles con KeePassXC-Browser + + + Refresh database root group ID + Actualizar la ID del grupo raíz de la base de datos + Disconnect all browsers Desconectar todos los navegadores Forget all site-specific settings on entries - Olvidar todos los configuración del sitio específico en los apuntes - - - Refresh database root group ID - Actualizar el ID del grupo raíz de la base de datos + Olvidar todas las opciones del sitio específico en los apuntes Stored keys @@ -1801,7 +1691,7 @@ Un archivo de base de datos no es un archivo clave. Stored browser keys - Claves del navegador almacenadas + Claves de navegador almacenadas Remove selected key @@ -1813,12 +1703,12 @@ Un archivo de base de datos no es un archivo clave. Delete the selected key? - ¿Eliminar la clave seleccionada? + ¿Eliminar clave seleccionada? Do you really want to delete the selected key? This may prevent connection to the browser plugin. - ¿Desea borrar la clave seleccionada? + ¿Desea eliminar la clave seleccionada? Esto puede impedir la conexión con el complemento del navegador. @@ -1835,21 +1725,29 @@ Esto puede impedir la conexión con el complemento del navegador. Enable Browser Integration to access these settings. - Activar integración del navegador para acceder a estas configuraciones. + Habilitar la integración del navegador para acceder a esta configuración. Do you really want to disconnect all browsers? This may prevent connection to the browser plugin. - ¿Desea desconectar todos los navegadores? + ¿Desea desconectar todos los naveggadores? Esto puede impedir la conexión con el complemento de navegador. + + KeePassXC: No keys found + KeePassXC: No se encontró ninguna clave + No shared encryption keys found in KeePassXC settings. No se encontraron claves de cifrado compartidas en la configuración de KeePassXC. + + KeePassXC: Removed keys from database + KeePassXC: Las claves se eliminaron de la base de datos + Successfully removed %n encryption key(s) from KeePassXC settings. - Correctamente borrada %n clave de cifrado de la configuración KeePassXC.Correctamente borrada %n claves de cifrado de los parámetros de KeePassXC.Correctamente borrada %n claves de cifrado de las configuraciones de KeePassXC. + Eliminada correctamente %n clave de cifrado de la configuración KeePassXC.Correctamente borrada %n claves de cifrado de la configuración KeePassXC.Eliminadas correctamente %n claves de cifrado de la configuración KeePassXC. Do you really want forget all site-specific settings on every entry? @@ -1865,14 +1763,32 @@ Los permisos para acceder a los apunte serán revocados. Abort Abortar + + KeePassXC: Removed permissions + KeePassXC: permisos eliminados + Successfully removed permissions from %n entry(s). Permisos eliminados correctamente desde %n apunte.Permisos eliminados correctamente desde %n apuntes.Permisos eliminados correctamente desde %n apuntes. + + KeePassXC: No entry with permissions found! + KeePassXC: ¡No se encontró ningún apunte con permisos! + The active database does not contain an entry with permissions. La base de datos activa no contiene un apunte con permisos. + + Move KeePassHTTP attributes to custom data + Mover los atributos KeePassHTTP a datos personalizados + + + Do you really want to convert all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + ¿Realmente desea convertir 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. + Refresh database ID Actualizar la ID de la base de datos @@ -1881,44 +1797,24 @@ Los permisos para acceder a los apunte serán revocados. Do you really want refresh the database ID? This is only necessary if your database is a copy of another and the browser extension cannot connect. ¿Desea actualizar el ID de la base de datos? -Esto solo es necesario si su base de datos es una copia de otra y la extensión del navegador no se puede conectar. - - - Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data - Convertir atributos heredados KeePassHTTP a datos persalizados compatibles con KeePassXC-Browser - - - No keys found - No se han encontrado claves - - - Removed keys from database - Claves eliminadas de la base de datos - - - Removed permissions - Permisos eliminados - - - No entry with permissions found! - ¡No se ha encontrado apunte con permisos! +Esto solo es necesario si su base de datos es copiada a otra y la extensión del navegador cono se puede conectar. DatabaseSettingsWidgetDatabaseKey Add additional protection… - Añadir protección adicional… + Añadir protección adicional... No password set - Ninguna contraseña fijada + Contraseña no establecida WARNING! You have not set a password. Using a database without a password is strongly discouraged! Are you sure you want to continue without a password? - ¡ADVERTENCIA! No ha fijado una contraseña. Se desaconseja encarecidamente el uso de una base de datos sin contraseña. + ¡ADVERTENCIA! No ha establecido una contraseña. Se desaconseja el uso de una base de datos sin contraseña. ¿Desea continuar sin contraseña? @@ -1928,11 +1824,11 @@ Are you sure you want to continue without a password? No encryption key added - Ninguna clave de cifrado agregada + No se agregó clave de cifrado You must add at least one encryption key to secure your database! - ¡Debe agregar al menos una clave de cifrado para proteger su base de datos! + ¡Debe añadir al menos una clave de cifrado para proteger su base de datos! Unknown error @@ -1940,19 +1836,7 @@ Are you sure you want to continue without a password? Failed to change database credentials - Cambio de credenciales de base de datos errónea - - - Weak password - Contraseña débil - - - This is a weak password! For better protection of your secrets, you should choose a stronger password. - ¡Esta es una contraseña débil! Para una mejor protección de sus secretos, debe elegir una contraseña más fuerte. - - - The provided password does not meet the minimum quality requirement. - La contraseña entregada no cumple con los requisitos de calidad minimos + Fallo al cambiar las credenciales de la base de datos @@ -1961,6 +1845,14 @@ Are you sure you want to continue without a password? Decryption Time: Tiempo de descifrado: + + Change existing decryption time + Cambiar el tiempo de descifrado + + + Change + Cambiar + Decryption time in seconds Tiempo de descifrado en segundos @@ -1995,19 +1887,19 @@ Are you sure you want to continue without a password? AES: 256 Bit (default) - AES: 256-bit (por defecto) + AES: 256 bits (por defecto) Twofish: 256 Bit - Twofish: 256-bit + Twofish: 256 bits Key Derivation Function: - Función de derivación de llave: + Función de derivación de la clave: Key derivation function - Función de derivación de llave + Función de derivación de la clave Transform rounds: @@ -2041,6 +1933,11 @@ Are you sure you want to continue without a password? KDBX 3 KDBX 3 + + unchanged + Database decryption time is unchanged + sin cambios + Number of rounds too high Key transformation rounds @@ -2073,7 +1970,7 @@ Si guarda este número, su base de datos puede llevar horas, días o incluso má If you keep this number, your database will not be protected from brute force attacks. Está utilizando un número muy bajo de rondas de transformación de clave con AES-KDF. -Si mantiene este número, su base de datos no estará protegida de los ataques por fuerza bruta. +Si mantiene este número, su base de datos no estará protegida de los ataques de fuerza bruta. KDF unchanged @@ -2081,7 +1978,7 @@ Si mantiene este número, su base de datos no estará protegida de los ataques p Failed to transform key with new KDF parameters; KDF unchanged. - Error al transformar la clave con nuevas configuraciones KDF; KDF sin cambios. + Error al transformar la clave con nuevos parámetros KDF; KDF sin cambios. MiB @@ -2091,19 +1988,7 @@ Si mantiene este número, su base de datos no estará protegida de los ataques p thread(s) Threads for parallel execution (KDF settings) - hilohilo(s)hilos - - - Encryption Settings: - Configuración de cifrado: - - - Basic - Básico - - - Advanced - Avanzado + hilohiloshilos @@ -2122,14 +2007,14 @@ Si mantiene este número, su base de datos no estará protegida de los ataques p Enable Secret Service to access these settings. - Active el Servicio Secreto para acceder a estas configuraciones. + Habilite el servicio secreto para acceder a esta configuración. DatabaseSettingsWidgetGeneral Database Metadata - Metadatos de la base de datos + Metadatos de la Base de datos Database name: @@ -2157,7 +2042,7 @@ Si mantiene este número, su base de datos no estará protegida de los ataques p History Settings - Configuraciones del historial + Configuración del historial Maximum number of history items per entry @@ -2173,131 +2058,67 @@ Si mantiene este número, su base de datos no estará protegida de los ataques p Use recycle bin - Usar papelera + Usar papelera de reciclaje Additional Database Settings - Configuraciones adicionales de base de datos + Configuraciones adicionales de la base de datos Enable compression (recommended) - Activar compresión (recomendado) + Habilitar compresión (recomendado) Delete Recycle Bin - Vaciar papelera de reciclaje + Eliminar papelera de reciclaje Do you want to delete the current recycle bin and all its contents? This action is not reversible. - ¿Desea vaciar el contenido actual de la papelera? + ¿Desea eliminar los contenidos actuales de la papelera de reciclaje? Esta acción no es reversible. (old) - (anterior) + (antiguo) When saving this setting or editing an entry the oldest history items of an entry will be removed such that only the specified amount of entries remain at most. - Al guardar esta preferencia o editar una entrada -los elementos más anteriores del historial serán -eliminados de modo que solo se conserve la -cantidad especificada. + Al guardar esta preferencia o editar un apunte +los elementos más viejos del historial serán +eliminados de modo que solo la cantidad especificada +de apuntes se conserven como mucho. Limit the amount of history items per entry to: - Limitar la cantidad de elementos de historial por entrada a: + Limitar la cantidad de elementos de historial por apuntee a: When saving this setting or editing an entry the oldest history items of an entry will be removed such that the remaining history items add up to the specified amount at most. - Al guardar esta preferencia o editar un apunte los -elementos más viejos del historial serán eliminados -de modo que los elementos restantes del historial -se añadirán como mucho hasta la cantidad especificada. + Al guardar esta preferencia o editar un apunte +los elementos más viejos del historial serán +eliminados de modo que los elementos restantes del historial +se añadirán hasta la cantidad especificada como mucho. Limit the total size of history items per entry to: - Limitar el número total de elementos del historial por entrada a: + Limitar el número total de elementos de historial por apunte a: Move entries to a recycle bin group instead of deleting them from the database. Entries deleted from the recycle bin are removed from the database. - Mover apuntes a un grupo de papeleras -en lugar de borrarlos desde la base de -datos. Los apuntes borrados desde la -papelera son eliminados de la BdD. - - - Autosave delay since last change - Retardo de autoguardado desde úlimo cambio - - - Autosave delay - Retardo de autoguardado - - - Autosave delay since last change in minutes - Retardo de autoguardado desde úlimo cambio en minutos - - - min - min - - - Autosave delay since last change checkbox - Retardo de autoguardado desde úlimo cambio de caja de seleección - - - Public Database Metadata - Metadatos de bases de datos públicas - - - Warning: the following settings are not encrypted. - Advertencia: los siguientes ajustes no están encriptados. - - - Display name: - Mostrar nombre: - - - Publically visible display name used on the unlock dialog - Nombre visible públicamente utilizado en el cuadro de diálogo de desbloqueo - - - Database public display name - Nombre público de la base de datos - - - Display color: - Mostrar color: - - - Publically visible color used on the unlock dialog - Color visible públicamente utilizado en el cuadro de diálogo de desbloqueo - - - Database public display color chooser - Selector de color de la base de datos pública - - - Clear - Limpiar - - - Display icon: - Mostrar icono: - - - Select Database Icon - Seleccionar icono de base de datos + Mover apuntes a un grupo de la papelera de reciclaje +en vez de eliminarlos de la base de datos. +Los apuntes eliminados de la papelera de reciclaje son +eliminados de la base de datos. @@ -2308,7 +2129,7 @@ papelera son eliminados de la BdD. Breadcrumb - Migaja + Pista Type @@ -2340,11 +2161,11 @@ papelera son eliminados de la BdD. Delete selected icon(s) - Borra ícono(s) seleccionado(s) + Eliminar ícono(s) seleccionado(s) Delete all custom icons not in use by any entry or group - Borra todos los íconos personalizados que no están en uso por cualquier apunte o grupo + Eliminar todos los íconos personalizados que no están en uso por cualquier apunte o grupo Purge unused icons @@ -2352,15 +2173,15 @@ papelera son eliminados de la BdD. Confirm Deletion - Confirmar Eliminación + Confirmar eliminación At least one of the selected icons is currently in use by at least one entry or group. The icons of all affected entries and groups will be replaced by the default icon. Are you sure you want to delete icons that are currently in use? - Al menos uno de los íconos seleccionados está actualmente en uso por al menos un apunte o grupo. Los iconos de todos los apuntes y grupos afectados serán reemplazados por el icono predeterminado. ¿Está seguro que desea eliminar los iconos que están actualmente en uso? + Al menos uno de los íconos seleccionados está actualmente en uso por al menos un apunte o grupo. Los íconos de todas los apuntes y grupos afectados serán reemplazados por el ícono predeterminado. ¿Está seguro de que desea eliminar los íconos que están actualmente en uso? Custom Icons Are In Use - Iconos personalizados en uso + Los Íconos Personalizados Están En Uso All custom icons are in use by at least one entry or group. @@ -2368,11 +2189,11 @@ papelera son eliminados de la BdD. Purged Unused Icons - Iconos purgados no utilizados + Purgar Íconos no Utilizados Purged %n icon(s) from the database. - Se ha purgado %n icono de la base de datos.Purgados %n íconos de la base de datos.Se han purgado %n iconos de la base de datos. + Purgado %n icono de la base de datos.Purgados %n íconos de la base de datos.Purgados %n íconos de la base de datos. @@ -2394,150 +2215,17 @@ papelera son eliminados de la BdD. Campo descripción de base de datos - - DatabaseSettingsWidgetRemote - - Sync Commands - Comandos de sincronización - - - Remove - Retirar - - - Command Settings - Configuración de comandos - - - Name - Nombre - - - Save - Guardar - - - Download - Descarga - - - Command: - Comando: - - - Download command field - Fallo en el comando de descarga - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - - - Input: - Entrada: - - - Download input field - Campo de entrada de descarga - - - Upload - Subida - - - Upload command field - Campo de entrada de subida - - - e.g.: "sftp user@hostname" or "scp {TEMP_DATABASE} user@hostname:DatabaseOnRemote.kdbx" - e.g.: "sftp user@hostname" or "scp {TEMP_DATABASE} user@hostname:DatabaseOnRemote.kdbx" - - - Upload input field - Campo de entrada de subida - - - Name cannot be empty. - Nombre no puede ser vacío. - - - Test - Probar - - - Download command cannot be empty. - Comando de descarga no puede ser vacío. - - - Download failed with error: %1 - Descarga falló con el error: %1 - - - Download finished, but file %1 could not be found. - Descarga finalizada, pero el archivo %1 no se puede encontrar. - - - Download successful. - Descarga exitosa. - - - Save Remote Settings - Configuración de guardado remoto - - - You have unsaved changes. Do you want to save them? - Tiene cambios sin guardar. ¿Desea guardarlos? - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} es usado como marcador para guardar la base de datos en una localización temporal -El comando tiene que finalizar. En caso de «sftp» como último comando ha de ser enviado «exit» - - - e.g.: -put {TEMP_DATABASE} DatabaseOnRemote.kdbx -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - e.g.: -put {TEMP_DATABASE} DatabaseOnRemote.kdbx -exit ---- -{TEMP_DATABASE} es usado como marcador para guardar la base de datos en una localización temporal -El comando tiene que finalizar. En caso de «sftp» como último comando ha de ser enviado «exit» - - - Timeout: - Intervalos - - - seconds - segundos - - DatabaseTabWidget Database creation error - Creación de la base de datos errónea + Error de creación de la base de datos 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 infórmeselo a los desarrolladores. + 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. KeePass 2 Database @@ -2553,39 +2241,43 @@ Esto es definitivamente un error, por favor infórmeselo a los desarrolladores.< Failed to open %1. It either does not exist or is not accessible. - Error abriendo %1. No existe o no es accesible. + Fallo al abrir %1. No existe o no es accesible. CSV file - Archivo *.csv + Archivo CSV + + + Select CSV file + Seleccionar archivo CSV Merge database Combinar base de datos + + KeePass 1 database + Base de datos KeePass 1 + + + Open KeePass 1 database + Abrir base de datos KeePass 1 + + + Open OPVault + Abrir OPVault + Export database to CSV file - Exportar base de datos a un fichero CSV + Exportar base de datos a un archivo CSV Writing the CSV file failed. - Escritura del fichero CSV errónea. + Ha fallado la escritura del archivo CSV. Writing the HTML file failed. - Escritura al fichero HTML errónea. - - - Export database to XML file - Exportar base de datos a archivo XML - - - XML file - Archivo *.xml - - - Writing the XML file failed - Escritura de archivo XML ha fallado + Fallo escribiendo a archivo HTML. Export Confirmation @@ -2593,7 +2285,16 @@ Esto es definitivamente un error, por favor infórmeselo a los desarrolladores.< You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? - Está a punto de exportar su base de datos a un archivo sin cifrar. Esto dejará vulnerable a sus contraseñas e información sensible. ¿Desea continuar? + Está a punto de exportar su base de datos a un archivo sin cifrar. Esto dejará sus contraseñas e información sensible vulnerable. ¿Desea continuar? + + + New Database + Nueva base de datos + + + %1 [New Database] + Database tab name modifier + %1 [Nueva base de datos] %1 [Locked] @@ -2601,17 +2302,20 @@ Esto es definitivamente un error, por favor infórmeselo a los desarrolladores.< %1 [Bloqueada] - %1 [Temporary] - Database tab name modifier - %1 [Temporal] + Export database to XML file + Exportar base de datos a archivo XML + + + XML file + Archivo XML + + + Writing the XML file failed + Escritura de archivo XML ha fallado DatabaseWidget - - Searches and Tags - Búsquedas y etiquetas - Searching… Buscando… @@ -2622,7 +2326,7 @@ Esto es definitivamente un error, por favor infórmeselo a los desarrolladores.< Confirm Auto-Type - Confirmar Auto-tecleo + Confirmar autoescritura Perform Auto-Type into the previously active window? @@ -2658,11 +2362,7 @@ Esto es definitivamente un error, por favor infórmeselo a los desarrolladores.< Expired entries - Apuntes caducados - - - Entries expiring within %1 day(s) - Apuntes caducando en %1 díaApuntes expirando en %1 díasApuntes caducando en %1 días + Apuntes expirados No current database. @@ -2688,18 +2388,6 @@ Esto es definitivamente un error, por favor infórmeselo a los desarrolladores.< No Results No hay resultados - - Save - Guardar - - - Enter a unique name or overwrite an existing search from the list: - Introduzca un nombre único o sobrescriba una búsqueda existente de la lista: - - - Save Search - Guardar búsqueda - Lock Database? ¿Bloquear la base de datos? @@ -2728,6 +2416,25 @@ Save changes? File has changed El archivo ha cambiado + + The database file has changed. Do you want to load the changes? + El archivo de la base de datos ha cambiado. ¿Desea cargar los cambios? + + + Merge Request + Solicitud de combinación + + + The database file has changed and you have unsaved changes. +Do you want to merge your changes? + El archivo de la base de datos ha cambiado y tiene modificaciones sin guardar. ¿Desea combinar sus modificaciones? + + + Could not open the new database file while attempting to autoreload. +Error: %1 + No se pudo abrir el nuevo fichero de base de datos al intentar cargar automáticamente. +Error: %1 + Disable safe saves? ¿Desactivar almacenajes seguros? @@ -2735,8 +2442,8 @@ Save changes? 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 ficheros manteniendo un bloqueo del fichero. -¿Quiere desactivar el almacenaje seguro y volver a intentarlo? + 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 del archivo. +¿Desactivar almacenaje seguro y volver a intentarlo? Writing the database failed: %1 @@ -2760,104 +2467,35 @@ Disable safe saves and try again? Empty recycle bin? - ¿Vaciar papelera? + ¿Vaciar papelera de reciclaje? Are you sure you want to permanently delete everything from your recycle bin? - ¿Desea eliminar permanentemente todo de su papelera? + ¿Desea eliminar permanentemente todo de su papelera de reciclaje? Could not find database file: %1 No se ha encontrado el archivo de base de datos: %1 - - New Database - Nueva base de datos + + Entries expiring within %1 day(s) + Apuntes expirando en %1 díaApuntes expirando en %1 díasApuntes expirando en %1 días - %1 [New Database] - Database tab name modifier - %1 [Nueva base de datos] + Searches and Tags + Búsquedas y etiquetas - Remote Sync did not contain any download or upload commands. - La sincronización remota no contiene ningún comando de descarga o subida. + Enter a unique name or overwrite an existing search from the list: + Introduzca un nombre único o sobrescriba una búsqueda existente de la lista: - Remote sync '%1' completed successfully! - ¡Sincronización remota de «%1» completada con éxito! + Save + Guardar - Remote sync '%1' failed: %2 - Fallo de incronización remota «%1»: %2 - - - Error while saving database %1: %2 - Error al guardar base de datos %1: %2 - - - Downloading... - Descargando... - - - Uploading... - Subiendo... - - - Syncing... - Sincronizando... - - - Remove passkey from entry - Eliminar passkey de apunte - - - Do you want to remove the passkey from this entry? - ¿Desea eliminar el passkey de este apunte? - - - The database file "%1" was modified externally - El archivo de base de datos "%1" ha sido modificado externamente - - - Do you want to load the changes? - ¿Quieres cargar los cambios? - - - Reload database - Recargar base de datos - - - Reloading database… - Recargando base de datos... - - - Reload canceled - Recarga cancelada - - - Reload successful - Recarga correcta - - - Reload pending user action… - Recargar acción pendiente del usuario... - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes<br>Ignore the changes on disk until save<br>Discard unsaved changes - El archivo de base de datos "%1" ha sido modificado externamente.<br>¿Cómo le gustaría proceder?<br><br>Combinar todos los cambios<br>Ignorar los cambios en disco hasta guardar<br>Descartar los cambios no guardados - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes then save<br>Overwrite the changes on disk<br>Discard unsaved changes - El archivo de base de datos "%1" ha sido modificado externamente.<br>¿Cómo le gustaría proceder?<br><br>Combinar todos los cambios y guardar<br>Sobrescribir los cambios en el disco<br>Descartar los cambios no guardados - - - Database file overwritten. - archivo de base de datos sobreescrito - - - Database file on disk cannot be unlocked with current credentials.<br>Enter new credentials and/or present hardware key to continue. - El archivo de base de datos en disco no se puede desbloquear con las credenciales actuales.<br>Introduzca nuevas credenciales y/o presente la llave hardware para continuar. + Save Search + Guardar búsqueda @@ -2872,7 +2510,7 @@ Disable safe saves and try again? Icon - Icono + Ícono Auto-Type @@ -2910,6 +2548,10 @@ Disable safe saves and try again? n/a n/d + + (encrypted) + (cifrado) + Select private key Seleccionar la clave privada @@ -2990,16 +2632,12 @@ Would you like to correct it? [PROTECTED] Press Reveal to view or edit - [PROTEGIDO] Presiones para revelar para ver o editar + [PROTEGIDO] Presione Revelar para ver o editar Hide Ocultar - - %n hour(s) - %n hora%n horas%n horas - %n week(s) %n semana%n semanas%n semanas @@ -3012,9 +2650,9 @@ Would you like to correct it? %n year(s) %n año%n años%n años - - Failed to decrypt SSH key, ensure password is correct. - Fallo al descifrar clave SSH, asegúrese que la contraseña es correcta. + + %n hour(s) + %n hora%n horas%n horas @@ -3033,7 +2671,7 @@ Would you like to correct it? Add a new attribute - Añadir un atributo nuevo + Añadir nuevo atributo Add @@ -3053,11 +2691,11 @@ Would you like to correct it? Edit Name - Editar nombre + Editar Nombre Toggle attribute protection - Conmutar atributo protección + Intercambiar protección de atributo Protect @@ -3085,7 +2723,7 @@ Would you like to correct it? Foreground Color: - Color de primer plano: + Color de Primer Plano: Foreground color selection @@ -3093,7 +2731,7 @@ Would you like to correct it? Background Color: - Color de fondo: + Color de Fondo: Background color selection @@ -3116,11 +2754,11 @@ Would you like to correct it? Custom Auto-Type sequence - Secuencia personalizada de autoescritura + Secuencia personalizada Autoescritura Open Auto-Type help webpage - Abrir página de ayuda de autoescritura + Abrir página de ayuda Autoescritura Window Associations @@ -3134,31 +2772,21 @@ Would you like to correct it? Add new window association Añadir nueva ventana asociada - - + - Add item - + - Remove selected window association Eliminar ventana asociada - - - - Remove item - - Window title: Título de la ventana: You can use an asterisk (*) to match everything - Puede usar un asterisco (*) par coincidir todo. + Puede usar un asterisco (*) para coincidir todo. Set the window association title - Fijar título de ventana asociada + Establecer título de ventana asociada You can use an asterisk to match everything @@ -3166,15 +2794,29 @@ Would you like to correct it? Use a specific sequence for this association: - Utilice una secuencia específica para esta asociación: + Utilizar una secuencia específica para esta asociación: Custom Auto-Type sequence for this window Secuencia personalizada de autoescritura para esta ventana + + + + Add item + + + + + - + Remove item + + EditEntryWidgetBrowser + + These settings affect to the entry's behaviour with the browser extension. + Esta configuración afecta al comportamiento de este apunte con la extensión de navegador. + General General @@ -3187,42 +2829,38 @@ Would you like to correct it? Skip Auto-Submit for this entry Descartar autoenvío para este apunte + + Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. + Solo enviar esta configuración al navegador para los diálogos de autenticación HTTP. Habilitada, los formularios de autenticación no mostrarán este apunte para su selección. + Use this entry only with HTTP Basic Auth Usar este apunte solo con autenticación básica HTTP + + Do not send this setting to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. + No enviar esta configuración al navegador para los diálogos de autenticación HTTP. Habilitada, los formularios de autenticación no mostrarán este apunte para su selección. + Do not use this entry with HTTP Basic Auth No usar este apunte con autenticación básica HTTP + + Additional URL's + URLs adicionales + Add Añadir Remove - Eliminar + Remover Edit Editar - - These settings affect the entry's behaviour with the browser extension. - Estas configuraciones afectan al comportamiento de los apuntes con la extensión de naveador. - - - Additional URLs - URLs adiccionales - - - Only send this entry to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. - Sólo mandar este registro al navegador para los diálogos de Autenticación HTTP. Si está activo, los formularios de registro normales no mostrarán la selección de este registro. - - - Do not send this entry to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. - No enviar este registro al navegador para los diálogos de Autenticación HTTP. Si está activo, los diálogos de Autenticación HTTP no mostrarán la selección de este registro. - EditEntryWidgetHistory @@ -3240,7 +2878,7 @@ Would you like to correct it? Restore entry to selected history state - Restaurar de apunte al estado de historial seleccionado + Restaurar apunte al estado seleccionado del historial Restore @@ -3267,31 +2905,31 @@ Would you like to correct it? EditEntryWidgetMain Edit Entry - Editar apunte + Editar Apunte Notes field - Campo notas + Campo Notas Username field - Campo usuario + Campo Usuario Expiration field - Campo caducidad + Campo Expiración Expiration Presets - Caducidad predeterminada + Predeterminados Expiración Expiration presets - Configuraciones de caducidad + Predeterminados expiración Presets - Preselección + Programar Url field @@ -3299,19 +2937,19 @@ Would you like to correct it? Download favicon for URL - Descargar icono para la URL + Descargar ícono para la URL Title field - Campo título + Campo Título Password field - Campo contraseña + Campo de contraseña Toggle expiration - Conmutar caducidad + Intercambiar expiración Tags list @@ -3319,42 +2957,42 @@ Would you like to correct it? &Username: - &Usuario: + &Title: - &Título: + &Password: - &Contraseña: + UR&L: - UR&L: + &Notes: - &Notas: + Toggle notes visibility - Conmutar visibilidad de notas + T&ags: - Etiquet&as: + &Expires: - &Caducidad: + EditEntryWidgetSSHAgent Form - Formulario + Forma Remove key from agent when database is closed/locked @@ -3366,7 +3004,7 @@ Would you like to correct it? Add key to agent when database is opened/unlocked - Añadir clave al agente cuando la base de datos se abra/desbloquea + Añadir clave al agente cuando la base de datos esté abierta/desbloqueada Decrypt @@ -3388,29 +3026,13 @@ Would you like to correct it? Private key Clave privada - - Attachment - Adjunto - - - External key file - Cerrojo externo - - - Add to agent - Añadir a agente - - - Remove from agent - Retirar del agente - External file Archivo externo Browser for key file - Buscar cerrojo + Explorar para fichero clave Browse… @@ -3418,8 +3040,20 @@ Would you like to correct it? Examinar... - Generate - Generar + Attachment + Adjunto + + + External key file + Archivo clave externo + + + Add to agent + Añadir al agente + + + Remove from agent + Eliminar del agente Select attachment file @@ -3445,10 +3079,6 @@ Would you like to correct it? seconds segundos - - Clear agent - Vaciar campos - EditGroupWidget @@ -3458,7 +3088,11 @@ Would you like to correct it? Icon - Icono + Ícono + + + Browser Integration + Integración con navegadores Properties @@ -3476,10 +3110,6 @@ Would you like to correct it? Group has unsaved changes El grupo tiene cambios no guardados - - Browser Integration - Integración con navegadores - Enable Activar @@ -3497,7 +3127,7 @@ Would you like to correct it? EditGroupWidgetBrowser These settings affect to the group's behaviour with the browser extension. - Estas configuraciones afectan al comportamiento del grupo con la extensión del navegador. + Estas configurciones afectan al comportamiento del grupo con la extensión del navegador. Hide entries from browser extension: @@ -3537,22 +3167,14 @@ Would you like to correct it? Omit WWW subdomain from matching toggle for this and sub groups - Omitir el dominio www de la coincidencia conmutar para este y los subgrupos - - - Restrict matching to given browser key: - Restringir coincidiencia a la siguiente clave de navegador: - - - Restrict matching to given browser key toggle for this and sub groups - Restringir coincidiencia a la siguiente clave de navegador cambie para esto y subgrupos + Omitir el dominio www de la coincidencia intercambiar para este y los subgrupos EditGroupWidgetKeeShare Sharing mode field - Campo modo compartido + Campo modo comapartir Password field @@ -3572,7 +3194,7 @@ Would you like to correct it? Path to share file field - Ruta para campo de archivo compartido + Ruta para compartir campo de archivo Browse for share file @@ -3609,8 +3231,8 @@ Would you like to correct it? Your KeePassXC version does not support sharing this container type. Supported extensions are: %1. - Su versión de KeePassXC no mantiene este tipo de contenedor de compartición. -Las extensiones mantenidas son: %1. + Su versión de KeePassXC no soporta este tipo de contenedor de compartición. +Las extensiones soportadas son: %1. %1 is already being exported by this database. @@ -3627,15 +3249,15 @@ Las extensiones mantenidas son: %1. KeeShare is currently disabled. You can enable import/export in the application settings. KeeShare is a proper noun - KeeShare actualmente está desactivada. Puede activar importar/exportar en la configuración de aplicación + KeeShare actualmente está deshabilitada. Puede habilitar importar/exportar en la configuración de aplicación Database export is currently disabled by application settings. - La exportación de la base de datos actualmente está desactivada en la configuración de aplicación. + La exportación de la base de datos actualmente está deshabilitada en la configuración de aplicación. Database import is currently disabled by application settings. - La importación de base de datos actualmente está desactivada por la configuración de aplicación + La importación de base de datos actualmente está deshabilitada por la configuración de aplicación KeeShare container @@ -3647,11 +3269,11 @@ Las extensiones mantenidas son: %1. Select import source - Seleccione el origen de la importación + Seleccione la fuente de importación Select export target - Seleccionar el destino de la exportación + Seleccione el destino de la exportación Select import/export file @@ -3662,27 +3284,27 @@ Las extensiones mantenidas son: %1. EditGroupWidgetMain Edit Group - Editar grupo + Editar Grupo Toggle expiration - Conmutar caducidad + Intercambiar expiración Expires: - Caducidad: + Expira: Name field - Campo nombre + Campo Nombre Expiration field - Campo caducidad + Campo Expiración Use default Auto-Type sequence of parent group - Emplear secuencia de Auto-Tecleo por defecto del grupo antecesor + Usar secuencia de Autoescritura por defecto del grupo padre Auto-Type: @@ -3694,7 +3316,7 @@ Las extensiones mantenidas son: %1. Auto-Type toggle for this and sub groups - Conmutar autoescritura para éste y subgrupos + Intercambiar autoescritura para éste y subgrupos Notes: @@ -3706,7 +3328,7 @@ Las extensiones mantenidas son: %1. Notes field - Campo notas + Campo Notas Name: @@ -3714,46 +3336,46 @@ Las extensiones mantenidas son: %1. Set default Auto-Type sequence - Fijar secuencia de autoescritura por defecto + Establecer secuencia de Autoescritura por defecto Search toggle for this and sub groups - Conmutar búsqueda para éste y subgrupos + Intercambiar de búsqueda para éste y subgrupos EditWidgetIcons Use default icon - Usar icono por defecto + Usar ícono por defecto Use custom icon - Usar icono personalizado + Usar ícono personalizado Choose icon… - Elegir ícono... + Seleccionar ícono... Set the URL to use to search for a favicon - Fije la URL a usar para buscar un ícono + Configurar la URL a usar para buscar un ícono Favicon URL - URL de Favicon + URL de ícono Download favicon for URL - Descargar favicon para la URL + Descargar ícono para la URL Download favicon - Descargar favicon + Descargar ícono Apply selected icon to subgroups and entries - Aplicar icono seleccionado a subgrupos y apuntes + Aplicar ícono seleccionado a subgrupos y apuntes Apply icon to… @@ -3765,23 +3387,27 @@ Las extensiones mantenidas son: %1. Also apply to child groups - Aplicar a los grupos herederos + Aplicar a los grupos descendientes Also apply to child entries - Aplicar también a los apuntes heredados + Aplicar también a los apuntes hijos Also apply to all children - Aplicar a todos los herederos + Aplicar a todos los descendientes Unable to fetch favicon. - No se pudo descargar el favicon. + No se pudo recuperar el ícono. + + + You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security + Puede habilitar el servicio de ícono del sitio web DuckDuckGo bajo «Herramientas -> Configuración -> Seguridad» Existing icon selected. - Icono existente seleccionado. + Ícono existente seleccionado. Images @@ -3789,7 +3415,7 @@ Las extensiones mantenidas son: %1. All files - Todos los ficheros + Todos los archivos Select Image(s) @@ -3797,23 +3423,19 @@ Las extensiones mantenidas son: %1. Successfully loaded %1 of %n icon(s) - Cargado %1 de %n icono correctamenteCargado %1 de %n iconos correctamenteCargado %1 de %n iconos correctamente + Cargado %1 de %n icono correctamenteCargado %1 de %n íconos correctamenteCargado %1 de %n íconos correctamente No icons were loaded - No se cargaron los iconos + No se cargaron los íconos %n icon(s) already exist in the database - Ya existe %n icono en la base de datos%n iconos ya existen en la base de datosYa existen %n iconos en la base de datos + El icono %n ya existe en la base de datosLos %n ícono(s) ya existe(n) en la base de datosLos %n íconos ya existen en la base de datos The following icon(s) failed: - El siguiente icono falló:Los siguientes iconos fallaron:Los siguientes iconos fallaron: - - - You can enable the DuckDuckGo website icon service under Application Settings -> Security - Puede habilitar el servicio de iconos de DuckDuckGo en Configuración de la aplicación -> Seguridad. + El siguiente icono falló:Los siguientes íconos fallaron:Los siguientes íconos fallaron: @@ -3852,7 +3474,7 @@ Las extensiones mantenidas son: %1. Plugin Data - Datos del complemento + Datos del Complemento Plugin data @@ -3860,11 +3482,11 @@ Las extensiones mantenidas son: %1. Remove selected plugin data - Quitar complemento de datos seleccionados + Remover datos del complemento seleccionado Remove - Quitar + Remover Delete plugin data? @@ -3891,45 +3513,12 @@ Esto puede causar un mal funcionamiento de los complementos afectados.%1 - Clone %1 - Clonado - - Passkey - Passkey - - - Invalid conversion type: %1 - Tipo de conversión no válido: %1 - - - Invalid conversion syntax: %1 - Sintaxis de conversión no válida: %1 - - - Invalid regular expression syntax %1 -%2 - Sintaxis de expresión regular no válida %1 -%2 - EntryAttachments Cannot open file "%1" - No se puede abrir el archivo «%1» - - - - EntryAttachmentsDialog - - Form - Formulario - - - File name - Nombre de archivo - - - File contents... - Contenido del archivo... + No se puede abrir el archivo "%1" @@ -3963,11 +3552,19 @@ Esto puede causar un mal funcionamiento de los complementos afectados. Remove selected attachment - Eliminar adjunto seleccionado + Remover adjunto seleccionado Remove - Eliminar + Remover + + + Rename selected attachment + Renombrar adjunto seleccionado + + + Rename + Renombrar Open selected attachment @@ -3991,11 +3588,11 @@ Esto puede causar un mal funcionamiento de los complementos afectados. Confirm remove - Confirmar eliminar + Confirmar eliminación Are you sure you want to remove %n attachment(s)? - ¿Desea eliminar %n dato adjunto?¿Desea eliminar %n datos adjuntos?¿Desea eliminar %n datos adjuntos? + ¿Desea eliminar %n dato adjunto?¿Desea remover %n datos adjuntos?¿Desea eliminar %n datos adjuntos? Save attachments @@ -4013,7 +3610,7 @@ Esto puede causar un mal funcionamiento de los complementos afectados. Confirm overwrite - Confirmar sobreescritura + Confirmar sobrescritura Unable to save attachments: @@ -4037,13 +3634,19 @@ Esto puede causar un mal funcionamiento de los complementos afectados.Unable to open file(s): %1 No se puede abrir el fichero: -%1No se pueden abrir los ficheros: -%1No se pueden abrir los ficheros: +%1No se puede(n) abrir el(los) archivo(s): +%1No se puede(n) abrir el(los) archivo(s): %1 Confirm Overwrite Attachment - Confirmar Sobrescribir adjunto + Confirmar sobrescribir adjunto + + + Attachment "%1" already exists. +Would you like to overwrite the existing attachment? + El adjunto «%1» ya existe. +¿Desea sobrescribir el adjunto existente? Confirm Attachment @@ -4054,10 +3657,10 @@ Esto puede causar un mal funcionamiento de los complementos afectados. - %1 es un fichero grande (%2 MB). -Su base de datos puede volverse muy grande y reducir el rendimiento. + %1 es un archivo grande (%2 MB). +Su base de datos puede vovlerse muy grande y reducir el rendimiento. -¿Está seguro de añadir este fichero? +¿Está seguro de añadir este archivo? Attachment modified @@ -4071,32 +3674,14 @@ Do you want to save the changes to your database? Saving attachment failed - Guardado del adjunto erróneo + Falló el guardado del adjunto Saving updated attachment failed. Error: %1 - Guardado del adjunto erróneo + Falló el guardado del adjunto Error: %1 - - Attachment "%1" already exists. -Would you like to overwrite the existing attachment? - El adjunto «%1» ya existe. -¿Desea sobrescribir el adjunto existente? - - - New - Nuevo - - - Preview - Vista previa - - - Failed to preview an attachment: Attachment not found - Error al previsualizar un archivo adjunto: Archivo adjunto no encontrado - EntryAttributesModel @@ -4153,7 +3738,7 @@ Would you like to overwrite the existing attachment? Icon - Icono + Ícono Color @@ -4221,7 +3806,7 @@ Would you like to overwrite the existing attachment? Expires - Caducidad + Expira Created @@ -4253,7 +3838,7 @@ Would you like to overwrite the existing attachment? Password Strength - Fortaleza de contraseña + Fortaleza de la Contraseña Entry notes @@ -4261,7 +3846,7 @@ Would you like to overwrite the existing attachment? Entry expires at - Apunte caduca el + Apunte expira el Creation date @@ -4291,20 +3876,12 @@ Would you like to overwrite the existing attachment? Has TOTP Tiene TOTP - - Background Color - Color del fondo - - - Group Path - Ruta de grupo - EntryPreviewWidget Display current TOTP value - Mostrar valor actual TOTP + Mostrar valor TOTP actual Close @@ -4319,8 +3896,8 @@ Would you like to overwrite the existing attachment? Contraseña - URL - URL + Notes + Notas Expiration @@ -4339,8 +3916,8 @@ Would you like to overwrite the existing attachment? Usuario - Notes - Notas + URL + URL Advanced @@ -4360,7 +3937,7 @@ Would you like to overwrite the existing attachment? Default Sequence - Secuencia por defecto + Secuencia Predeterminada Window @@ -4372,7 +3949,7 @@ Would you like to overwrite the existing attachment? Searching - Búsqueda + Buscando… Share @@ -4384,27 +3961,23 @@ Would you like to overwrite the existing attachment? Clear - Vaciar + Limpiar Never Nunca - - Double click to copy value - Doble clic para copiar valor - Enabled - Activado + Habilitado Disabled - Desactivado + Deshabilitado - Double click to copy to clipboard - Doble clic para copiar el portapapeles + Double click to copy value + Doble clic para copiar valor @@ -4413,10 +3986,6 @@ Would you like to overwrite the existing attachment? Invalid URL URL inválida - - Duplicate URL - Duplicar URL - EntryView @@ -4432,10 +4001,6 @@ Would you like to overwrite the existing attachment? Reset to defaults Restablecer ajustes por defecto - - + %1 entry(s)... - + %1 apunte...+ %1 apuntes...+ %1 apuntes... - ExportDialog @@ -4457,7 +4022,7 @@ This will leave your passwords and sensitive information vulnerable! database order - ordenación de base de datos + orden de base de datos name (ascending) @@ -4507,7 +4072,7 @@ This will leave your passwords and sensitive information vulnerable! Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. - Otro servicio de secretos está en ejecución (%1). <br/> Deténgalo o retírelo antes de reactivar la Integración del Servicio Secreto. + Otro servicio de secretos está en ejecución (%1). <br/> Deténgalo o elimínelo rehabilitando la Integración del Servicio Secreto. Failed to register DBus service at %1.<br/> @@ -4546,7 +4111,7 @@ This will leave your passwords and sensitive information vulnerable! %n Entry(s) was used by %1 %1 is the name of an application - %n apunte es utilizado por %1%n apuntes es usado por %1%n apuntes son utilizados %1 + %n apunte era usado por %1%n Apuntes fueron usados por %1%n apuntes eran usados por %1 @@ -4582,7 +4147,7 @@ This will leave your passwords and sensitive information vulnerable! FdoSecretsPlugin <b>Fdo Secret Service:</b> %1 - <b>Servicio de secretos Fido:</b> %1 + <b>Servicio Secreto Fdo:</b> %1 @@ -4608,7 +4173,7 @@ This will leave your passwords and sensitive information vulnerable! IconDownloaderDialog Download Favicons - Descargar iconos + Descargar íconos Cancel @@ -4617,7 +4182,7 @@ This will leave your passwords and sensitive information vulnerable! Having trouble downloading icons? You can enable the DuckDuckGo website icon service in the security section of the application settings. - ¿Problemas al descargar iconos? + ¿Problemas al descargar íconos? Puede habilitar el servicio de iconos del sitio web DuckDuckGo en la sección seguridad de la configuración de la aplicación. @@ -4642,7 +4207,7 @@ Puede habilitar el servicio de iconos del sitio web DuckDuckGo en la sección se Ok - Aceptar + Listo Already Exists @@ -4650,204 +4215,11 @@ Puede habilitar el servicio de iconos del sitio web DuckDuckGo en la sección se Download Failed - Descarga fallida + Falló Descarga Downloading favicons (%1/%2)… - Descargando íconos (%1%2)... - - - - ImportWizard - - Import Wizard - Asistente de importación - - - - ImportWizardPageReview - - WizardPage - Asistente - - - Entry count: %1 - Número de apuntes: %1 - - - Group - Grupo - - - Title - Título - - - Username - Usuario - - - Password - Contraseña - - - Url - Url - - - Could not load key file. - No se puede leer clave en llavero - - - Could not open remote database. Password or key file may be incorrect. - No se ha podido abrir la base de datos remota. La contraseña o el archivo de claves pueden ser incorrectos. - - - - ImportWizardPageSelect - - Form - Formulario - - - Import File Selection - Selección de archivo a importar - - - Password: - Contraseña: - - - Key File: - Archivo clave: - - - Browse… - Examinar... - - - Import Into: - Importar a: - - - New Database - Nueva base de datos - - - No unlocked databases available - No hay bases de datos desbloqueadas disponibles - - - Existing Database: - Base de datos existente: - - - Import File: - Importar archivo: - - - Comma Separated Values (.csv) - Valores separados por comas (.csv) - - - 1Password Export (.1pux) - Exportaación 1Password (.1pux) - - - 1Password Vault (.opvault) - Bóveda 1Password (.opvault) - - - Bitwarden (.json) - Bitwarden (.json) - - - KeePass 1 Database (.kdb) - Base de datos KeePass 1 (.kdb) - - - Open OPVault - Abrir OPVault - - - Select import file - Seleccionar archivo a importar - - - All files - Todos los archivos - - - Key files - Cerrojos - - - Select key file - Seleccionar cerrojo - - - Comma Separated Values - Valores separados por comas - - - 1Password Export - Exportar 1Password - - - Bitwarden JSON Export - Exportar Bitwarden JSON - - - 1Password Vault - Bóveda 1Password - - - KeePass1 Database - Base de datos KeePass1 - - - Proton Pass (.json) - Exportación JSON de Proton Pass - - - Proton Pass JSON Export - Exportación JSON de Proton Pass - - - Temporary Database - Base de datos temporal - - - Command: - Comando: - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - - - Input: - Entrada: - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last commend `exit` has to be sent - - p. ej.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} se utiliza como marcador de posición para almacenar la base de datos en una ubicación temporal -El comando tiene que salir. En el caso de `sftp` como último comando `exit` tiene que ser enviado - - - - Remote Database (.kdbx) - Base de datos remota (.kdbx) + Descargando íconos (%1/%2)... @@ -4887,15 +4259,15 @@ Si ocurre nuevamente entonces su archivo de base de datos puede estar corrupto.< Invalid header id size - Tamaño id de la cabecera inválido + Tamaño de la cabecera del id inválido Invalid header field length: field %1 - Longitud de campo de cabecera no válido %1 + Longitud de campo de cabecera inválido %1 Invalid header data length: field %1, %2 expected, %3 found - Longitud de campo de cabecera no válido: campo %1, %2 esperado, %3 encontrado + Longitud de campo de cabecera inválido: campo %1, experado %2, encontrado %3 @@ -4926,7 +4298,7 @@ Si ocurre nuevamente entonces su archivo de base de datos puede estar corrupto.< Invalid header checksum size - Suma de verificación incorrecta de la cabecera + Suma de verificación de la cabecera inválida Header SHA256 mismatch @@ -4952,23 +4324,23 @@ Si ocurre nuevamente entonces su archivo de base de datos puede estar corrupto.< Invalid header field length: field %1 - Longitud de campo de cabecera inválido %1 + Longitud de campo de cabecera inválido: campo %1 Invalid header data length: field %1, %2 expected, %3 found - Longitud de campo de cabecera inválido: campo %1, %2 experado, %3 encontrado + Longitud de datos de cabecera inválido: campo %1, experado %2, encontrado %3 Failed to open buffer for KDF parameters in header - Error al abrir el búfer para las configuraciones KDF en la cabecera + Error al abrir el búfer para los parámetros KDF en la cabecera Unsupported key derivation function (KDF) or invalid parameters - Función de derivación de clave no admitida (KDF) o configuraciones no válidas + Función de derivación de clave (KDF) no admitida o parámetros inválidos Legacy header fields found in KDBX4 file. - Los campos heredados de la cabecera se encuentran en el fichero KDBX4. + Los campos heredados de la cabecera se encuentran en el archivo KDBX4. Invalid inner header id size @@ -4994,69 +4366,69 @@ Si ocurre nuevamente entonces su archivo de base de datos puede estar corrupto.< Invalid variant map entry name length Translation: variant map = data structure for storing meta data - Longitud del nombre del apunte de asociación variante no válida + Longitud del nombre del apunte de asociación variante inválida Invalid variant map entry name data Translation: variant map = data structure for storing meta data - Datos del nombre del apunte asociado variante no válido + Datos del nombre del apunte asociado variante inválido Invalid variant map entry value length Translation: variant map = data structure for storing meta data - Longitud del valor del apunte asociado variante no válido + Longitud del valor del apunte asociado variante inválido Invalid variant map entry value data Translation comment: variant map = data structure for storing meta data - Datos del valor de apunte asociado variante no válido + Datos del valor de apunte asociado variante inválido Invalid variant map Bool entry value length Translation: variant map = data structure for storing meta data - Longitud del valor del apunte asociado booleano de variante no válida + Longitud del valor del apunte asociado booleano de variante inválida Invalid variant map Int32 entry value length Translation: variant map = data structure for storing meta data - Longitud del valor del apunte asociado Int32 de variante no válida + Longitud del valor del apunte asociado Int32 de variante inválida Invalid variant map UInt32 entry value length Translation: variant map = data structure for storing meta data - Longitud del valor del apunte asociado UInt32 de variante no válida + Longitud del valor del apunte asociado UInt32 de variante inválida Invalid variant map Int64 entry value length Translation: variant map = data structure for storing meta data - Longitud del valor del apunte asociado Int64 de variante no válida + Longitud del valor del apunte asociado Int64 de variante inválida Invalid variant map UInt64 entry value length Translation: variant map = data structure for storing meta data - Longitud del valor de la entrada asociado UInt64 de variante no válida + Longitud del valor del apunte asociado UInt64 de variante inválida Invalid variant map entry type Translation: variant map = data structure for storing meta data - Tipo de apunte asociado variante no válido + Tipo de apunte inválido de mapeo de variante Invalid variant map field type size Translation: variant map = data structure for storing meta data - Tamaño de tipo de campo asociado variante no válido + Tamaño de tipo de campo asociado variante inválido Kdbx4Writer Invalid symmetric cipher algorithm. - Algoritmo de cifrado simétrico no válido. + Algoritmo de cifrado simétrico inválido. Invalid symmetric cipher IV size. IV = Initialization Vector for symmetric cipher - Tamaño de cifrado simétrico IV no válido + Tamaño de cifrado simétrico IV inválido Unable to calculate database key: %1 @@ -5065,14 +4437,14 @@ Si ocurre nuevamente entonces su archivo de base de datos puede estar corrupto.< Failed to serialize KDF parameters variant map Translation comment: variant map = data structure for storing meta data - Ha fallado al serializar configuraciones KDF en variante asociada + Ha fallado al serializar parámetros KDF en variante asociada KdbxReader Invalid cipher uuid length: %1 (length=%2) - Longitud de UUID de cifrado no válida: %1 (longitud=%2) + Longitud de UUID de cifrado inválida: %1 (longitud =%2) Unable to parse UUID: %1 @@ -5092,31 +4464,31 @@ Si ocurre nuevamente entonces su archivo de base de datos puede estar corrupto.< Invalid master seed size - Tamaño inválido de semilla maestra + Tamaño de semilla maestra inválido Invalid transform seed size - Tamaño inválido de semilla de transformación + Tamaño de semilla de transformación inválido Invalid transform rounds size - Tamaño inválido de rondas de transformación + Tamaño de rondas de transformación inválido Invalid start bytes size - Tamaño no válido de bytes de inicio + Tamaño de bytes de inicio inválido Invalid random stream id size - Tamaño no válido de id de flujo + Tamaño de id de flujo aleatorio inválido Invalid inner random stream cipher - Cifrador del flujo interno no válido + Cifrado del flujo aleatorio interno inválido Failed to read database file. - Error al leer el fichero de base de datos. + Error al leer el archivo de base de datos. The selected file is an old KeePass 1 database (.kdb). @@ -5125,7 +4497,7 @@ 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 archivo seleccionado es una base de datos antigua de KeePass 1 (.kdb). -Puede importarla pulsando en «Base de datos → Importar base de datos de KeePass 1». +Puede importarla haciendo clic en 'Base de datos' > 'Importar base de datos de KeePass 1'. Esta migración es en un único sentido. No podrá abrir la base de datos importada con la versión antigua 0.4 de KeePassX. @@ -5141,11 +4513,11 @@ Esta migración es en un único sentido. No podrá abrir la base de datos import KdbxXmlReader XML parsing failure: %1 - Error de parsing XML: %1 + Error de procesado XML: %1 No root group - Ningún grupo de raíz + Ningún grupo raíz XML error: @@ -5153,15 +4525,15 @@ Esta migración es en un único sentido. No podrá abrir la base de datos import Line %2, column %3 Error XML: %1 -Línea %2, columna %3 +Linea %2, columna %3 Missing icon uuid or data - Falta icono uuid o datos + Falta ícono uuid o datos Missing custom data key or value - Falta la clave de datos personializados o valor + Falta la clave de datos personalizados o valor Multiple group elements @@ -5173,19 +4545,19 @@ Línea %2, columna %3 Invalid group icon number - Número de icono de grupo no válido + Número de ícono de grupo no válido Invalid EnableAutoType value - Valor no válido de EnableAutoType + Valor de EnableAutoType inválido Invalid EnableSearching value - Valor no válido de EnableSearching + Valor de EnableSearching inválido No group uuid found - No encontrado uuid de grupo + Ningún uuid de grupo encontrado Null DeleteObject uuid @@ -5197,11 +4569,11 @@ Línea %2, columna %3 Null entry uuid - UUID de apunte nulo + Uuid de apunte nulo Invalid entry icon number - Número de icono de apunte no válido + Número de ícono de apunte no válido History element in history entry @@ -5221,11 +4593,11 @@ Línea %2, columna %3 Entry string key or value missing - Falta clave de apunte textual o valor + Falta apunte de cadena de texto o valor Entry binary key or value missing - Falta clave de apunte binaria o valor + Falta apunte de cadena binaria o valor Auto-type association window or sequence missing @@ -5237,23 +4609,23 @@ Línea %2, columna %3 Invalid date time value - Valor de tiempo o fecha no válido + Valor de tiempo o fecha inválido Invalid color value - Valor del color no válido + Valor del color inválido Invalid color rgb part - Parte de color rgb no válido + Parte de color rgb inválido Invalid number value - Valor de número no válido + Valor de número inválido Invalid uuid value - Valor uuid no válido + Valor uuid inválido Unable to decompress binary @@ -5265,7 +4637,7 @@ Línea %2, columna %3 KeeAgentSettings Invalid KeeAgent settings file structure. - Estructura de archivo de preferencias KeeAgent no válido. + Estructura de archivo de preferencias KeeAgent inválido. Private key is an attachment but no attachments provided. @@ -5284,6 +4656,17 @@ Línea %2, columna %3 Error al abrir la clave privada + + KeePass1OpenWidget + + Import KeePass1 Database + Importar base de datos KeePass1 + + + Unable to open the database. + No se pudo abrir la base de datos. + + KeePass1Reader @@ -5395,7 +4778,7 @@ Si ocurre nuevamente entonces su archivo de base de datos puede estar corrupto.< Invalid group field type - Tipo de campo de grupo no válido + Tipo de campo de grupo inválido Missing group id or level @@ -5403,11 +4786,11 @@ Si ocurre nuevamente entonces su archivo de base de datos puede estar corrupto.< Missing entry field type number - Apunte de tipo número en campo ausente + Apunte de tipo número en campo faltante Invalid entry field size - Tamaño del apunte para el campo no válido + Tamaño del apunte para el campo inválido Read entry field data doesn't match size @@ -5419,11 +4802,11 @@ Si ocurre nuevamente entonces su archivo de base de datos puede estar corrupto.< Invalid entry group id field size - Tamaño del apunte para el campo identificador de grupo no válido + Tamaño del apunte para el campo identificador de grupo inválido Invalid entry icon field size - Tamaño del apunte para el campo icono no válido + Tamaño del apunte para el campo icono inválido Invalid entry creation time field size @@ -5435,18 +4818,18 @@ Si ocurre nuevamente entonces su archivo de base de datos puede estar corrupto.< Invalid entry expiry time field size - Tamaño del apunte para el campo tiempo de caducidad no válido + Tamaño del apunte para el campo tiempo de expiración inválido Invalid entry field type - Tipo del apunte para el campo no válido + Tipo del apunte para el campo inválido KeeShare Invalid sharing reference - Referencia de compartición no válida + Referencia de compartición inválida Inactive share %1 @@ -5540,7 +4923,7 @@ Si ocurre nuevamente entonces su archivo de base de datos puede estar corrupto.< You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. - Ha seleccionado un fichero clave con un formato que KeePassXC<br>puede dejar de mantener en el futuro.<br><br>Considere generar un nuevo fichero clave en su lugar. + Ha seleccionado un fichero clave con un formato que KeePassXC<br>puede dejar de soportar en el futuro.<br><br>Considere generar un nuevo fichero clave en su lugar. Error loading the key file '%1' @@ -5640,6 +5023,10 @@ Are you sure you want to continue with this file? &Recent Databases Bases de datos &recientes + + &Import + &Importar + &Export &Exportar @@ -5660,10 +5047,6 @@ Are you sure you want to continue with this file? TOTP TOTP - - Tags - Etiquetas - &Groups &Grupos @@ -5674,7 +5057,7 @@ Are you sure you want to continue with this file? View - Vista + Ver Theme @@ -5708,33 +5091,53 @@ Are you sure you want to continue with this file? &New Database… &Nueva base de datos + + Create a new database + Crear una base de datos nueva + &Merge From Database… - Co&mbinar desde base de datos... + Com&binar desde base de datos... + + + Merge from another KDBX database + Combinar desde otra base de datos KDBX &New Entry… - &Nuevo apunte… + &Nuevo apunte... + + + Add a new entry + Añadir un nuevo apunte &Edit Entry… - &Editar apunte… + &Editar apunte... + + + View or edit entry + Ver o editar apunte &Delete Entry… - Eliminar &apunte + E&liminar apunte &New Group… &Nuevo grupo... + + Add a new group + Añadir un nuevo grupo + &Edit Group… &Editar grupo... &Delete Group… - Eliminar &grupo + &E&liminar grupo Download All &Favicons… @@ -5750,43 +5153,67 @@ Are you sure you want to continue with this file? Sa&ve Database As… - Guardar base de datos como... + Guar&dar base de datos como... Database &Security… - &Seguridad de base de datos… + &Seguridad de base de datos... Database &Reports… - Info&rmes de base de datos... + Info&rmes de la base de datos... + + + Statistics, health check, etc. + Estadísticas, salud, etc. &Database Settings… - &Configuraciones de base de datos… + &Configuración de base de datos... + + + Database settings + Configuración de la base de datos &Clone Entry… - &Duplicar apunte… + &Duplicar apunte... Move u&p - &Subir + Mover &arriba + + + Move entry one step up + Mover el apunte una posición arriba Move do&wn - &Bajar + Mover abajo + + + Move entry one step down + Mover el apunte una posición abajo Copy &Username - Copiar &usuario + Copiar nombre de &usuario + + + Copy username to clipboard + Copiar usuario al portapapeles Copy &Password Copiar &contraseña + + Copy password to clipboard + Copiar contraseña al portapapeles + &Settings - &Configuraciones + &Configuración &Password Generator @@ -5817,33 +5244,53 @@ Are you sure you want to continue with this file? &Título - Copy &URL - Copiar &URL + Copy title to clipboard + Copiar título al portapapeles + + + Copy URL to clipboard + Copiar URL al portapapeles &Notes &Notas + + Copy notes to clipboard + Copiar notas al portapapeles + &CSV File… - Archivo &CSV… + Archivo &CSV... &HTML File… - Archivo &HTML… + Archivo &HTML... KeePass 1 Database… - Base de datos KeePass 1… + Base de datos KeePass 1... + + + Import a KeePass 1 database + Importar una base de datos KeePass 1 1Password Vault… 1Password Vault… + + Import a 1Password Vault + Importar un 1Password Vault + CSV File… Archivo CSV... + + Import a CSV file + Importar un archivo CSV + Show TOTP Mostrar TOTP @@ -5854,19 +5301,15 @@ Are you sure you want to continue with this file? Set up TOTP… - Configurar TOTP… + Configurar TOTP... Copy &TOTP Copiar &TOTP - - Copy Password and TOTP - Copiar contraseña y TOTP - E&mpty recycle bin - &Vaciar papelera + &Vaciar papelera de reciclaje &Donate @@ -5888,6 +5331,10 @@ Are you sure you want to continue with this file? &Online Help Ayuda en &línea + + Go to online documentation + Ir a la documentación en línea + &User Guide Guía de &usuario @@ -5932,10 +5379,6 @@ Are you sure you want to continue with this file? Classic (Platform-native) Clásico (Plataforma-nativo) - - Show Menubar - Mostrar barra del menu - Show Toolbar Mostrar barra de herramientas @@ -5958,11 +5401,7 @@ Are you sure you want to continue with this file? Clone Group... - Clonar Grupo… - - - &XML File… - Archivo &XML… + Clonar Grupo... Clear history @@ -5991,12 +5430,14 @@ Expect some bugs and minor issues, this version is meant for testing purposes. - No Tags - Sin etiquetas + 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. Restore Entry(s) - Restaurar apunteRestaurar apuntesRestaurar apuntes + Restaurar apunte(s)Restaurar apuntesRestaurar apunte(s) Settings @@ -6008,11 +5449,11 @@ Espere algunos defectos y problemas menores, esta versión está destinada para Would you like KeePassXC to check for updates on startup? - ¿Quieres KeePassXC para comprobar las actualizaciones en el arranque? + ¿Quieres que KeePassXC busque actualizaciones al iniciar? 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. + Siempre podrá comprobar manualmente si hay actualizaciones desde el menú de la aplicación. Toggle window @@ -6022,10 +5463,6 @@ Espere algunos defectos y problemas menores, esta versión está destinada para Quit KeePassXC Salir de KeePassXC - - %1 Entry(s) - %1 apunte%1 apuntes%1 apuntes - Please present or touch your YubiKey to continue… Presente o toque su YubiKey para continuar... @@ -6038,314 +5475,38 @@ Espere algunos defectos y problemas menores, esta versión está destinada para You must restart the application to apply this setting. Would you like to restart now? Debe reiniciar la aplicación para aplicar esta configuración. ¿Desea reiniciar ahora? + + Tags + Etiquetas + + + No Tags + Sin etiquetas + + + %1 Entry(s) + %1 apunte%1 apuntes%1 apuntes + + + Copy Password and TOTP + Copiar contraseña y TOTP + + + &XML File… + Archivo &XML... + + + XML File… + Archivo XML... + + + Copy &URL + Copiar &URL + Allow Screen Capture Permitir captura de pantalla - - 1Password 1PUX... - 1Password 1PUX... - - - Import a 1Password 1PUX file - Importar un archivo 1Password 1PUX - - - Import… - Importar... - - - Passkeys… - Passkeys... - - - Import Passkey - Importar passkey - - - Remote S&ync… - &Sincronización remota... - - - Quit Application - Salir - - - Open About Dialog - Abrir diálogo Acerca de - - - Open Database - Abrir base de datos - - - Create Database - Crear base de datos - - - Merge From Database - Combinar desde bases de datos - - - Create Entry - Crear apunte - - - Edit Entry - Editar Apunte - - - Delete Entry - Eliminar apunte - - - Create Group - Crear grupo - - - Edit Group - Editar Grupo - - - Delete Group - Eliminar grupo - - - Download All Favicons - Descargar todos los favicons - - - Sort Groups A-Z - Ordenar grupos A-Z - - - Sort Groups Z-A - Ordenar grupos Z-A - - - Save Database As - Guardar base de datos como - - - Show Database Security - Mostrar seguridad de base de datos - - - Show Database Reports - Mostrar informes de base de datos - - - Show Database Settings - Mostrar preferencias de base de datos - - - Show Passkeys - Mostrar Passkeys - - - Clone Entry - Duplicar apunte - - - Move Entry Up - Mover apunte arriba - - - Move Entry Down - Mover apunte abajo - - - Copy Username - Copiar Usuario - - - Copy Password - Copiar Contraseña - - - Show Application Settings - Mostrar preferencias de aplicación - - - Show Password Generator - Mostrar generador de contraseñas - - - Remove Passkey From Entry - Eliminar passkey de apunte - - - Perform Auto-Type: {USERNAME} - Realizar escritura automatica: {USERNAME} - - - Perform Auto-Type: {USERNAME}{ENTER} - Realizar escritura automática: {Nombre de usuario}{Enter} - - - Perform Auto-Type: {PASSWORD} - Realizar escritura automática: {CONTRASEÑA} - - - Perform Auto-Type: {PASSWORD}{ENTER} - Realizar escritura automática: {CONTRASEÑA}{ENTER} - - - Perform Auto-Type: {TOTP} - Realizar escritura automática: {TOTP} - - - Copy Title - Copiar título - - - Copy URL - Copiar URL - - - Copy Notes - Copiar notas - - - Export to CSV - Exportar a CSV - - - Export to HTML - Exportar a HTML - - - Import KeePass1 Database - Importar base de datos KeePass1 - - - Import 1Password Vault - Importar bóveda 1Password - - - Import CSV File - Importar archivo CSV - - - Show TOTP QR Code - Mostrar código QR TOTP - - - Set up TOTP - Configurar TOTP - - - Empty Recycle Bin - Vaciar papelera de reciclaje - - - Open Donation Website - Abrir sitio web de donación - - - Open Bug Report - Abrir informe de error - - - Open Online Documentation - Abrir documentación en linea - - - Open Keyboard Shortcuts Guide - Abrir guía de atajos de teclado - - - Save Database Backup - Guardar copia de seguridad de base de datos - - - SSH Agent: Add Key - Agente de SSH: añadir llave - - - SSH Agent: Remove Key - Agente de SSH: Elimina la llave - - - Toggle Compact Mode - Alternar modo compacto - - - Set Theme: Automatic - Establecer tema: Automatico - - - Set Theme: Light - Establecer tema: Claro - - - Set Theme: Dark - Establecer tema: Oscuro - - - Set Theme: Classic - Establecer tema: Clasico - - - Toggle Show Menubar - Alternar mostrar barra de herramientas - - - Toggle Show Toolbar - Alternar mostrar barra de herramientas - - - Toggle Show Preview Panel - Alternar mostrar panel de vista previa - - - Toggle Always on Top - Alternar siempre encima - - - Toggle Hide Usernames - Alternar ocultar nombres de usuario - - - Toggle Hide Passwords - Alternar ocultar contraseñas - - - Export to XML - Exportar a XML - - - Toggle Allow Screen Capture - Alternar permitir captura de pantalla - - - Show Group Panel - Mostrar panel de grupo - - - Toggle Show Group Panel - Alternar Mostrar panel de grupo - - - Setup Remote Sync… - Configurar sincronización remota... - - - Password Generator - Generador de contraseñas - - - E&xpire Entry… - Ca&ducar entrada... - - - Clear SSH Agent - Borrar agente SSH - - - Clear all identities in ssh-agent - Borrar todas las identidades en ssh-agent - ManageDatabase @@ -6403,17 +5564,37 @@ Espere algunos defectos y problemas menores, esta versión está destinada para Overwriting %1 [%2] Sobrescribiendo %1 [%2] + + older entry merged from database "%1" + el apunte más antiguo se combinó a la base de datos «%1» + + + Adding backup for older target %1 [%2] + Añadiendo copia de seguridad para el destino más antiguo %1 [%2] + + + Adding backup for older source %1 [%2] + Añadiendo copia de seguridad para la fuente mas antigua %1 [%2] + + + Reapplying older target entry on top of newer source %1 [%2] + Volver a aplicar un apunte de destino más antiguo sobre la fuente más nueva %1 [%2] + + + Reapplying older source entry on top of newer target %1 [%2] + Volver a aplicar un apunte de origen anterior sobre el objetivo más nuevo %1 [%2] + Synchronizing from newer source %1 [%2] - Sincronización desde un origen más nuevo %1 [%2] + Sincronización desde una fuente más nueva %1 [%2] Synchronizing from older source %1 [%2] - Sincronización desde un origen anterior %1 [%2] + Sincronización desde una fuente anterior %1 [%2] Deleting child %1 [%2] - Eliminando heredero %1[%2] + Eliminando hijo %1[%2] Deleting orphan %1 [%2] @@ -6421,11 +5602,11 @@ Espere algunos defectos y problemas menores, esta versión está destinada para Changed deleted objects - Objetos cambiados eliminados + cambiado objetos eliminados Adding missing icon %1 - Añadiendo el icono %1 ausente + Añadiendo el icono faltante %1 Removed custom data %1 [%2] @@ -6462,6 +5643,14 @@ Espere algunos defectos y problemas menores, esta versión está destinada para Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. Aquí puede ajustar la configuración de cifrado de la base de datos. No se preocupe, puede cambiarlos más adelante en la configuración de la base de datos. + + Advanced Settings + Configuraciones avanzadas + + + Simple Settings + Ajustes simples + NewDatabaseWizardPageDatabaseKey @@ -6496,25 +5685,6 @@ Espere algunos defectos y problemas menores, esta versión está destinada para Por favor complete el nombre, y agregue una descripción opcional, para su nueva base de datos: - - NewEntryAttachmentsDialog - - Attachment name cannot be empty - El nombre del archivo adjunto no puede estar vacío - - - Attachment with the same name already exists - Ya existe un archivo adjunto con el mismo nombre - - - Save attachment - Guardar adjunto - - - New entry attachment - Nuevo archivo adjunto de entrada - - NixUtils @@ -6561,6 +5731,15 @@ Espere algunos defectos y problemas menores, esta versión está destinada para Se esperaban %1 bytes de texto plano, se encontraron %2 + + OpVaultOpenWidget + + Read Database did not produce an instance +%1 + Leer la base de datos no produce una instancia +%1 + + OpVaultReader @@ -6596,7 +5775,7 @@ Espere algunos defectos y problemas menores, esta versión está destinada para PEM boundary mismatch - Desajuste de acotación PEM + Desajuste de límite PEM Base64 decoding failed @@ -6604,11 +5783,11 @@ Espere algunos defectos y problemas menores, esta versión está destinada para Key file way too small. - Cerrojo demasiado pequeño. + Fichero clave demasiado pequeño. Key file magic header id invalid - Id de encabezado mágico del cerrojo no válido + Id de encabezado mágico del fichero clave inválido Found zero keys @@ -6634,10 +5813,6 @@ Espere algunos defectos y problemas menores, esta versión está destinada para Unknown cipher: %1 Cifrado desconocido: %1 - - AES-256/GCM is currently not supported - AES-256/GCM no está soportado actualmente - Passphrase is required to decrypt this key Frase de contraseña necesaria para descrifrar esta clave @@ -6672,7 +5847,7 @@ Espere algunos defectos y problemas menores, esta versión está destinada para Unsupported key part - Parte de llave no mantenida + Parte de llave no soportado Unexpected EOF while reading public key @@ -6703,182 +5878,8 @@ Espere algunos defectos y problemas menores, esta versión está destinada para EOF inesperado al escribir la clave privada - (encrypted) - (cifrado) - - - - OpenSSHKeyGenDialog - - SSH Key Generator - Generador de clave SSH - - - Type - Tipo - - - Bits - Bits - - - Comment - Comentario - - - - PasskeyExportDialog - - KeePassXC - Passkey Export - KeePassXC - Exportar passkey - - - Filenames will be generated with title and .passkey file extension. - Los nombres de archivos serán generados con título y extensión de archivo .passkey. - - - Export entries - Exportar apuntes - - - Export Selected - Exportar seleccionado - - - Cancel - Cancelar - - - Export to folder - Exportar a carpeta - - - Export the following passkey entries. - Exportar los siguientes passkey de apuntes. - - - - PasskeyExporter - - KeePassXC: Passkey Export - KeePassXC: Exportar passkey - - - File "%1.passkey" already exists. -Do you want to overwrite it? - - El archivo «%1.passkey» ya existe. -¿Desea sobreescribirlo? - - - Cannot open file - No se puede abrir archivo - - - Cannot open file "%1" for writing. - No se puede abrir archivo «%1» para escritura. - - - Cannot write to file - No se puede escribir a archivo - - - - PasskeyImportDialog - - KeePassXC - Passkey Import - KeePassXC - Importar passkey - - - Username: %1 - Usuario: %1 - - - Group - Grupo - - - Database - Base de datos - - - Import Passkey - Importar Passkey - - - Import - Importar - - - Cancel - Cancelar - - - Entry - Apunte - - - Create new entry - Crear nuevo apunte - - - Relying Party: %1 - Parte que confía: %1 - - - Import the following passkey: - Importar las siguiete passkey - - - Import the following passkey to this entry: - Importar los siguientes passkey en este apunte: - - - Default passkeys group (Imported Passkeys) - Grupo por defecto de passkeys (Passkeys importadas) - - - - PasskeyImporter - - Passkey file - Archivo passkey - - - All files - Todos los archivos - - - Cannot open file - No se puede abrir archivo - - - Cannot open file "%1" for reading. - No se puede abrir archivo «%1» para lectura. - - - Open passkey file - Abrir el archivo de passkey - - - Cannot import passkey - No se pudo importar la passkey - - - Cannot import passkey file "%1". Data is missing. - No se pudo importar archivo clave «%1». Faltan datos. - - - Cannot import passkey file "%1". -The following data is missing: -%2 - No se pudo importar passkey «%1». -Falta los siguientes datos: -%2 - - - Cannot import passkey file "%1". Private key is missing or malformed. - No se pudo importar archivo passkey «%1». la clave privada esta corrupta o desaparecida + AES-256/GCM is currently not supported + AES-256/GCM no está soportado actualmente @@ -7083,6 +6084,10 @@ Falta los siguientes datos: Word Count: Cantidad de palabras: + + Character Count: + Número de caracteres: + Word Case: Capitalización de palabra: @@ -7095,6 +6100,10 @@ Falta los siguientes datos: Add custom wordlist Añadir lista de palabras personalizada + + character + caracter + Close Cerrar @@ -7131,30 +6140,6 @@ Falta los siguientes datos: 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 - Confirm Delete Wordlist Confirmar eliminar lista de palabras @@ -7202,20 +6187,32 @@ Do you want to overwrite it? Caracteres especiales - passwordLength - Longitud de la contraseña + Password Quality: %1 + Calidad de la contraseña: %1 - Characters: %1 - caracteres: %1 + Poor + Password quality + Pobre - MIXED case - MEZCLAR Mayús/minús + Weak + Password quality + Débil - Excluded characters: "0", "1", "l", "I", "O", "|", "﹒", "B", "8", "G", "6" - Carácteres excluidos: "0", "1", "l", "I", "O", "|", "﹒", "B", "8", "G", "6" + Good + Password quality + Buena + + + Excellent + Password quality + Excelente + + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + Caracteres excluidos: «0», «1», «l», «I», «O», «|», «﹒» @@ -7230,7 +6227,7 @@ Do you want to overwrite it? Toggle Password (%1) - Conmutar contraseña (%1) + Intercambiar contraseña (%1) Generate Password (%1) @@ -7265,8 +6262,8 @@ Do you want to overwrite it? Excelente - Toggle password visibility using Control + H. Open the password generator using Control + G. - Cambiar visibilidad de clave usando Control + H. Abrir el generador de contraseñas usando Control + G. + Toggle password visibilty using Control + H. Open the password generator using Control + G. + @@ -7284,21 +6281,6 @@ Do you want to overwrite it? Pulse la tecla &Tab entre caracteres - - PreviewEntryAttachmentsDialog - - Preview entry attachment - Vista previa del archivo adjunto - - - No preview available - No hay vista previa disponible - - - Image format not supported - Formato de imagen no compatible - - QMessageBox @@ -7337,10 +6319,6 @@ Do you want to overwrite it? Continue Continuar - - Continue with weak password - Continuar con una clave débil - QObject @@ -7688,7 +6666,7 @@ Do you want to overwrite it? Clearing the clipboard in %1 second(s)... - Limpiar el portapapeles en %1 segundo(s)...Limpiar el portapapeles en %1 segundo(s)...Limpiar el portapapeles en %1 segundo(s)... + Limpiar el portapapeles en %1 segundo...Limpiar el portapapeles en %1 segundo(s)...Limpiar el portapapeles en %1 segundos... Clipboard cleared! @@ -7734,10 +6712,6 @@ Do you want to overwrite it? Too many arguments provided. Demasiados argumentos proporcionados. - - Path of the database. - Ruta a la base de datos. - Target decryption time in MS for the database. Tiempo de descifrado objetivo en ms para la base de datos. @@ -7758,6 +6732,10 @@ Do you want to overwrite it? Create a new database. Crear una base de datos nueva. + + Path of the database. + Ruta a la base de datos. + Invalid decryption time %1. Tiempo de descifrado inválido %1. @@ -7802,158 +6780,6 @@ Do you want to overwrite it? Successfully created new database. Nueva base de datos creada correctamente. - - Unset the password for the database. - Se ha quitado la contraseña de la base de datos. - - - Unset the key file for the database. - Se ha quitado el archivo clave de la base de datos. - - - Edit a database. - Editar una base de datos. - - - Cannot use %1 and %2 at the same time. - No se puede usar %1 y %2 al mismo tiempo. - - - Could not change the database key. - No se pudo cambiar la clave de la base de datos. - - - Database was not modified. - La base de datos no ha sido modificada. - - - Writing the database failed: %1 - Fallo al escribir la base de datos: %1 - - - Successfully edited the database. - Se ha editado correctamente la base de datos. - - - Cannot remove password: The database does not have a password. - No se puede eliminar la contraseña: la base de datos no tiene contraseña. - - - Cannot remove file key: The database does not have a file key. - No se puede eliminar el archivo clave: la base de datos no tiene archivo clave. - - - Loading the new key file failed: %1 - Carga de un nuevo archivo clave ha fallado: %1 - - - Found unexpected Key type %1 - Encontrado tipo de clave inesperado %1 - - - Cannot remove all the keys from a database. - No se puede eliminar todas las claves de la base de datos. - - - Show a database's information. - Mostrar información de una base de datos. - - - UUID: - UUID: - - - Name: - Nombre: - - - Description: - Descripción: - - - Cipher: - Cifrado: - - - KDF: - KDF: - - - Recycle bin is enabled. - La papelera de reciclaje está habilitada. - - - Recycle bin is not enabled. - La papelera de reciclaje no está habilitada. - - - Location - Localización - - - Database created - Base de datos creada - - - Last saved - Última guardada - - - Unsaved changes - Cambios no guardados - - - yes - - - - no - no - - - Number of groups - Número de grupos - - - Number of entries - Número de apuntes - - - Number of expired entries - Número de apuntes expirados - - - Unique passwords - Contraseñas únicas - - - Non-unique passwords - Contraseñas no únicas - - - Maximum password reuse - Reuso máximo de contraseña - - - Number of short passwords - Número de contraseñas cortas - - - Number of weak passwords - Número de contraseñas débiles - - - Entries excluded from reports - Apuntes excluidos de los informes - - - Average password length - Longitud media de contraseña - - - %1 characters - %1 caracteres - Word count for the diceware passphrase. Número de palabras para la frase de contraseña de diceware. @@ -7977,6 +6803,10 @@ Do you want to overwrite it? Invalid word count %1 Número de palabras inválido %1 + + The word list is too small (< 1000 items) + El listado de palabras es demasiado pequeña (< 1000 elementos) + Title for the entry. Título para el apunte. @@ -8001,6 +6831,10 @@ Do you want to overwrite it? Enter new password for entry: Introduzca una nueva contraseña para el apunte: + + Writing the database failed: %1 + Fallo al escribir la base de datos: %1 + Successfully edited entry %1. Apunte %1 editado correctamente. @@ -8121,6 +6955,10 @@ Do you want to overwrite it? Exit interactive mode. Salir de modo interactivo. + + Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. + Formato a usar al exportar. Las opciones disponibles son «xml» o «csv». Por defecto «xml». + Exports the content of a database to standard output in the specified format. Exporta el contenido de la base de datos en la salida estándar en el formato especificado. @@ -8221,6 +7059,106 @@ Do you want to overwrite it? Successfully imported database. Base de datos importada correctamente. + + Show a database's information. + Mostrar información de una base de datos. + + + UUID: + UUID: + + + Name: + Nombre: + + + Description: + Descripción: + + + Cipher: + Cifrado: + + + KDF: + KDF: + + + Recycle bin is enabled. + La papelera de reciclaje está habilitada. + + + Recycle bin is not enabled. + La papelera de reciclaje no está habilitada. + + + Location + Localización + + + Database created + Base de datos creada + + + Last saved + Última guardada + + + Unsaved changes + Cambios no guardados + + + yes + + + + no + no + + + Number of groups + Número de grupos + + + Number of entries + Número de apuntes + + + Number of expired entries + Número de apuntes expirados + + + Unique passwords + Contraseñas únicas + + + Non-unique passwords + Contraseñas no únicas + + + Maximum password reuse + Reuso máximo de contraseña + + + Number of short passwords + Número de contraseñas cortas + + + Number of weak passwords + Número de contraseñas débiles + + + Entries excluded from reports + Apuntes excluidos de los informes + + + Average password length + Longitud media de contraseña + + + %1 characters + %1 caracteres + Unknown command %1 Mandato %1 desconocido @@ -8393,10 +7331,6 @@ Comandos disponibles: Show the protected attributes in clear text. Mostrar los atributos protegidos en texto legible - - Show all the attributes of the entry. - Mostrar todos los atributos del apunte. - Show the attachments of the entry. Mostrar los adjuntos del apunte. @@ -8454,7 +7388,7 @@ Comandos disponibles: stop supporting in the future. Please consider generating a new key file. - ADVERTENCIA: Está usando un fichero clave con un formato antiguo que KeePassXC puede dejar + ADVERTENCIA: Está usando un fichero clave con un formato antiguo que KeePassXC deje de soportar en el futuro. Considere generar un nuevo fichero clave. @@ -8467,10 +7401,6 @@ Considere generar un nuevo fichero clave. Invalid YubiKey serial %1 Serie de YubiKey inválido %1 - - Please present or touch your YubiKey to continue. - Conecte o toque su YubiKey para continuar. - Enter password to encrypt database (optional): Introduzca la contraseña para cifrar la base de datos (opcional): @@ -8709,6 +7639,18 @@ Núcleo: %3 %4 file empty archivo vacío + + malformed string + cadena de caracteres mal formada + + + missing closing quote + comilla de cierre faltante + + + %1: (row, col) %2,%3 + %1: (fila, col) %2,%3 + AES 256-bit AES 256-bit @@ -8747,7 +7689,7 @@ Núcleo: %3 %4 Clearing the clipboard in %1 second(s)… - Limpiando el portapapeles en %1 segundo...Limpiando el portapapeles en %1 segundos...Limpiando el portapapeles en %1 segundos... + Vaciando el portapapeles en %1 segundo...Vaciando el portapapeles en %1 segundos...Vaciando el portapapeles en %1 segundos... Group @@ -8853,7 +7795,7 @@ Núcleo: %3 %4 Checksum mismatch! Key file may be corrupt. - ¡Fallo de suma de comprobación! El fichero clave puede estar corrupto. + ¡Fallo de suma de comprobación! El archivo puede estar corrupto. Unexpected key file data! Key file may be corrupt. @@ -8885,7 +7827,15 @@ Núcleo: %3 %4 read password of the database from stdin - leer contraseña de la base de datos desde la entrada estándar + leer contraseña de la base de datos desde el apunte estándar + + + allow app screen recordering and screenshots + Permitir la grabación de la pantalla de la aplicación y las capturas de pantalla + + + Locked databases. + Bases de datos bloquedas. Database failed to lock. @@ -8895,10 +7845,6 @@ Núcleo: %3 %4 Another instance of KeePassXC is already running. Otra instancia de KeePassXC ya se está ejecutando. - - KeePassXC is not running. No open database to lock - KeePassXC no está en ejecución. No hay base de datos abierta a cerrar - Fatal error while testing the cryptographic functions. Error fatal comprobando las funciones criptográficas. @@ -8942,300 +7888,70 @@ Núcleo: %3 %4 KDF inválido - Access to all entries is denied - acceso a todos los apuntes denegado + Please present or touch your YubiKey to continue. + Conecte o toque su YubiKey para continuar. - allow screenshots and app recording (Windows/macOS) - permitir aplicación de capturas de pantalla y granación (Windows/macOS) + Show all the attributes of the entry. + Mostrar todos los atributos del apunte. + + + Edit a database. + Editar una base de datos. + + + Could not change the database key. + No se pudo cambiar la clave de la base de datos. + + + Database was not modified. + La base de datos no ha sido modificada. + + + Successfully edited the database. + Se ha editado correctamente la base de datos. + + + Loading the new key file failed: %1 + Carga de un nuevo archivo clave ha fallado: %1 + + + Unset the password for the database. + Se ha quitado la contraseña de la base de datos. + + + Unset the key file for the database. + Se ha quitado el archivo clave de la base de datos. + + + Cannot use %1 and %2 at the same time. + No se puede usar %1 y %2 al mismo tiempo. + + + Cannot remove all the keys from a database. + No se puede eliminar todas las claves de la base de datos. + + + Cannot remove password: The database does not have a password. + No se puede eliminar la contraseña: la base de datos no tiene contraseña. + + + Cannot remove file key: The database does not have a file key. + No se puede eliminar el archivo clave: la base de datos no tiene archivo clave. + + + Found unexpected Key type %1 + Encontrado tipo de clave inesperado %1 Set the key file for the database. -This option is deprecated, use --set-key-file instead. - Establecer el archivo clave para la base de datos. -Esta opción está obsoleta, use --set-key-file. +This options is deprecated, use --set-key-file instead. + Establece el archivo clave para la base de datos. +Estas opciones están obsoletas, use --set-key-file. - Databases have been locked. - Las bases de datos han sido bloqueadas. - - - Attestation not supported - Atestación no soportada - - - Credential is excluded - Credencia excluida - - - Passkeys request canceled - Petición passkey cancelada - - - Invalid user verification - Verificación de usuario inválido - - - Empty public key - Vaciar clave pública - - - Invalid URL provided - URL inválida proporcionada - - - Passkeys - Passkeys - - - AES initialization failed - Fallo inicialización AES - - - AES encrypt failed - Fallo cifrado AES - - - Failed to store in Linux Keyring - Fallo al almacenar en llavero de Linux - - - Polkit returned an error: %1 - Polkit devolvió un error: %1 - - - Could not locate key in keyring - No se puede localizar en llavero - - - Could not read key in keyring - No se puede leer clave en llavero - - - AES decrypt failed - Fallo descrifrado AES - - - No Polkit authentication agent was available - No hay agente de autenticación Polkit disponible - - - Polkit authorization failed - Fallo de autorización de Polkit - - - No Quick Unlock provider is available - No hay proveedor de Quick Unlock - - - Failed to init KeePassXC crypto. - Fallo al inicializar criptografía de KeePassXC. - - - Failed to encrypt key data. - Fallo al cifrar clave de datos. - - - Failed to get Windows Hello credential. - Fallo al obtener credencial Windows Hello. - - - Failed to decrypt key data. - Fallo al descifrar clave de datos. - - - Origin is empty or not allowed - El origen está vacío o no está permitido - - - Effective domain is not a valid domain - El dominio efectivo no es un dominio válido - - - Origin and RP ID do not match - El origen y RP ID no coinciden - - - No supported algorithms were provided - Se han proporcionado algoritmos no soportados - - - Wait for timer to expire - Esperar a que el temporizador expire - - - Challenge is shorter than required minimum length - El desafío es más corto que la longitud mínima requerida - - - user.id does not match the required length - user.id no coincide con la longitud requerida - - - Favorite - Tag for favorite entries - Favorito - - - File does not exist. - Archivo no existe. - - - Cannot open file: %1 - No s puede abrir archivo: %1 - - - Cannot parse file: %1 at position %2 - No se puede procesar archivo: %1 en posición %2 - - - Failed to decrypt json file: %1 - Fallo a descifrar archivo json: %1 - - - Invalid encKeyValidation field - Campo encKeyValidation inválido - - - Invalid cipher list within encKeyValidation field - Lista de cifrado inválida dentro del campo encKeyValidation - - - Wrong password - Contraseña incorrecta - - - Invalid encrypted data field - Campo de datos cifrado inválido - - - Invalid cipher list within encrypted data field - Lista de cifrado inválida dentro del campo encKeyValidation - - - Cannot initialize cipher - No se puede inicializar cifrado - - - Cannot decrypt data - No se puede descifrar datos - - - Bitwarden Import - Importar Bitwarden - - - Archived - Tag for archived entries - Archivado - - - Invalid 1PUX file format: Not a valid ZIP file. - Formato de archivo 1PUX inválido: no es un archivo ZIP válido. - - - Invalid 1PUX file format: Missing export.data - Formato de archivo 1PUX inválido: datos de exportación faltantes. - - - 1Password Import - Importar 1Password - - - Enter Shortcut - Añadir atajo - - - Action - Acción - - - Shortcuts - Atajos - - - Unknown passkeys error - Error de passkey desconocido - - - Invalid KDF iterations, cannot decrypt json file - Iteracion KDF invalida, no se pudo desencriptar el archivo json - - - Unsupported format, ensure your Bitwarden export is password-protected - Formato no soportado, asegurate de que tu exportacion Bitwarden esta protegido con contraseña - - - Only PBKDF and Argon2 are supported, cannot decrypt json file - Solo se soportan PBKDF y Argon2, no se uedo desencriptar archivo json - - - Reset Shortcuts - Restablecer atajos - - - Double click an action to change its shortcut - Doble clic a una accion para cambiar el atajo - - - Filter... - Filtrar... - - - Shortcut Conflict - Conflicto de atajos - - - Shortcut %1 conflicts with '%2'. Overwrite shortcut? - Atajo %1 está en conflicto con «%2». ¿Sobreescribir atajo? - - - Cannot generate valid passphrases because the wordlist is too short - No se puede generar una frase de contraseña válida porque la lista de palabras es demasiado corta - - - Encrypted files are not supported. - Los archivos cifrados no son compatibles. - - - Proton Pass Import - Importación de Proton Pass - - - Delete plugin data? - ¿Eliminar los datos del complemento? - - - Delete plugin data from Entry(s)? - ¿Eliminar los datos del complemento del apunte?¿Eliminar los datos del complemento de los apuntes?¿Eliminar los datos del complemento de los apuntes? - - - Passkey - Cerrojo - - - Format to use when exporting. Available choices are 'xml', 'csv' or 'html'. Defaults to 'xml'. - Formato que se utilizará al exportar. Las opciones disponibles son 'xml', 'csv' o 'html'. Por defecto es 'xml'. - - - start minimized to the system tray - iniciar minimizado en la bandeja del sistema - - - malformed string, possible unescaped delimiter - - - - missing closing delimiter - - - - %1, row: %2, column: %3 - - - - Tags - Etiquetas + KeePassXC is not running. No open database to lock + KeePassXC no está en ejecución. No hay base de datos abierta a cerrar @@ -9272,39 +7988,20 @@ Esta opción está obsoleta, use --set-key-file. Error interno de zlib: - - RemoteHandler - - Command `%1` did not finish in time. Process was killed. - El comando «%1» no ha finalizado en tiempo. El proceso se ha finalizado. - - - Failed to upload merged database. Command `%1` did not finish in time. Process was killed. - Fallo al subir base de datos mezclada. El comando «%1» no ha finalizado en tiempo. El proceso se ha finalizado. - - - Invalid download parameters provided. - Parámetros de descarga inválidos proporcionados. - - - Command `%1` failed to download database. - El comando «%1» falló al descargar base de datos. - - - Invalid database pointer or upload parameters provided. - Puntero de base de datos o parámetros de subida inválidos proporcionados. - - - Command `%1` exited with status code: %2 - El comando «%1» terminó con código de estado: %2 - - - Failed to upload merged database. Command `%1` exited with status code: %2 - Fallo al subir base de datos mezclada. El comando «%1» finalizó con código de estado: %2 - - ReportsWidgetBrowserStatistics + + Exclude expired entries from the report + Excluir apuntes caducados del informe + + + Show only entries which have URL set + Mostar solo apuntes con URL + + + Show only entries which have browser settings in custom data + Mostrar solo apuntes que tienen preferencias de navegador en datos personalizados + Double-click entries to edit. Doble clic para editar apuntes. @@ -9331,7 +8028,7 @@ Esta opción está obsoleta, use --set-key-file. (Excluded) - (Excluido) + (Excluida) This entry is being excluded from reports @@ -9363,59 +8060,50 @@ Esta opción está obsoleta, use --set-key-file. Delete Entry(s)… - Eliminar apunte(s)...Eliminar apunte(s)...Eliminar apunte(s)... + Eliminar apunte...Eliminar apunte(s)...Eliminar apuntes... Exclude from reports Excluir de los informes - - Expire Entry(s)… - Caducar apunte(s)...Caducar apunte(s)...Caducar entrada(s)... - - - Only show entries that have a URL - Mostrar solo apuntes que tienen una URL - - - Only show entries that have been explicitly allowed or denied - Mostrar solo apuntes que han sido permitidos o denegados explícitamente - - - Show expired entries - Mostrar apuntes expirados - - - (Expired) - (Expirado) - - - Delete plugin data from Entry(s)… - Eliminando los datos del complemento del apunte...Eliminando los datos del complemento de los apuntes...Eliminando los datos del complemento de los apuntes... - ReportsWidgetHealthcheck - Show expired entries - Mostrar apuntes expirados + Exclude expired entries from the report + Excluir apuntes caducados del informe - (Expired) - (Expirado) + Also show entries that have been excluded from reports + Mostrar también que ha sido excluido de los informes Hover over reason to show additional details. Double-click entries to edit. Pasar por encima del motivo para mostrar detalles adicionales. Doble clic para editar. + + Bad + Password quality + Mal + Bad — password must be changed Mal — la contraseña debe ser cambiada + + Poor + Password quality + Pobre + Poor — password should be changed Pobre — la contraseña debería ser cambiada + + Weak + Password quality + Débil + Weak — consider changing the password Débil — considere cambiar la contraseña @@ -9458,20 +8146,12 @@ Esta opción está obsoleta, use --set-key-file. Delete Entry(s)… - Eliminar apunte(s)...Eliminar apunte(s)...Eliminar apunte(s)... + Eliminar apunte...Eliminar apunte(s)...Eliminar apuntes... Exclude from reports Excluir de los informes - - Expire Entry(s)… - Caducar apunte(s)...Caducar apunte(s)...Caducar entrada(s)... - - - Show entries that have been excluded from reports - Mostrar apuntes que han sido excluidos de los informes - ReportsWidgetHibp @@ -9561,83 +8241,12 @@ Esta opción está obsoleta, use --set-key-file. Delete Entry(s)… - Eliminar apunte(s)...Eliminar apunte(s)...Eliminar apunte(s)... + Eliminar apunte...Eliminar apunte(s)...Eliminar apuntes... Exclude from reports Excluir de los informes - - Expire Entry(s)… - Caducar apunte(s)...Caducar apunte(s)...Caducar entrada(s)... - - - - ReportsWidgetPasskeys - - Export - Exportar - - - Import - Importar - - - List of entry URLs - Lista de URLs de apuntes - - - Title - Título - - - Path - Ruta - - - Username - Usuario - - - URLs - URLs - - - Edit Entry… - Editar Apunte... - - - Delete Entry(s)… - Eliminar apunte...Eliminar apunte(s)...Eliminar apuntes... - - - Relying Party - Parte que confía - - - Show expired entries - Mostrar apuntes expirados - - - (Expired) - (Expirado) - - - Export Confirmation - Confirmación de exportación - - - The passkey file will be vulnerable to theft and unauthorized use, if left unsecured. Are you sure you want to continue? - El archivo passkey será vunerable a robos y usos no autorizados si lo deja desprotegido. ¿Desea continuar? - - - Please wait, list of entries with passkeys is being updated… - Espere, la lista de entradas con passkeys está siendo actualizada... - - - No entries with passkeys. - No hay apuntes con passkeys. - ReportsWidgetStatistics @@ -9812,14 +8421,6 @@ Esta opción está obsoleta, use --set-key-file. No agent running, cannot list identities. No hay ningún agente ejecutándose, no se pueden listar identidades. - - Failed to remove all SSH identities from agent. - Error al eliminar todas las identidades SSH del agente. - - - All SSH identities removed from agent. - Todas las identidades SSH eliminadas del agente. - SearchHelpWidget @@ -9886,10 +8487,6 @@ Esta opción está obsoleta, use --set-key-file. Search Help Buscar Ayuda - - Save Search - Guardar búsqueda - Search (%1)… Search placeholder text, %1 is the keyboard shortcut @@ -9903,6 +8500,10 @@ Esta opción está obsoleta, use --set-key-file. Limit search to selected group Limitar la búsqueda al grupo selecionado + + Save Search + Guardar búsqueda + SettingsClientModel @@ -9964,10 +8565,34 @@ Esta opción está obsoleta, use --set-key-file. Confirm when passwords are retrieved by clients Confirmar cuándo las contraseñas son recuperadas por los clientes. + + <html><head/><body><p><span style=" + font-family:'-apple-system','BlinkMacSystemFont','Segoe UI','Helvetica','Arial','sans-serif','Apple Color + Emoji','Segoe UI Emoji'; font-size:14px; color:#24292e; background-color:#ffffff;">This setting does + not override disabling recycle bin prompts</span></p></body></html> + + <html><head/><body><p><span style=" + font-family:'-apple-system','BlinkMacSystemFont','Segoe UI','Helvetica','Arial','sans-serif','Apple Color + Emoji','Segoe UI Emoji'; font-size:14px; color:#24292e; background-color:#ffffff;">Esta configuración + no sobreescribe deshabilitar las confirmaciones de la papelera</span></p></body></html> + + Confirm when clients request entry deletion Confirmar cuándo los clientes solicitan la eliminación del apunte. + + <html><head/><body><p>This improves compatibility with certain applications + which search for password without unlocking the database first.</p><p>But enabling this may also + crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a + different value set in applications.)</p></body></html> + + <html><head/><body><p>Esto mejora la compatibilidad con ciertas aplicaciones + que buscan contraseñas sin bloquear la base de datos primero.</p><p>Pero habilitar esto puede también + terminar el cliente si la base de datos no puede ser desblqueada dentro de cierto tiempo de espera. (Normalmente 25s, pero puede ser + un valor diferente establecido en las aplicaciones)</p></body></html> + + Prompt to unlock database before searching Confirmar para desbloquear la base de datos antes de buscar @@ -9992,14 +8617,6 @@ Esta opción está obsoleta, use --set-key-file. Save current changes to activate the plugin and enable editing of this section. Guardar los cambios para activar el complemento y habilitar la edición de esta sección. - - <html><head/><body><p>This setting does not override disabling recycle bin prompts </p></body></html> - <html><head/><body><p>Esta configuración no sobreescribe la deshabilitación de indicaciones de la papelera de reciclaje</p></body></html> - - - <html><head/><body><p>This improves compatibility with certain applications which search for password without unlocking the database first.</p><p>But enabling this may also crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a different value set in applications.) </p></body></html> - <html><head/><body><p>Esto mejora la compatibilidad con ciertas aplicaciones que buscan constraseñas sin desbloquear la base de datos primero.</p><p>Pero habilitar esto puede también hacer fallar el cliente si la base de datos no puede ser desbloqueda en cierto tiempo. (Usualmente 25s, peoro puede ser un valor diferente en las aplicaciones). </p></body></html> - SettingsWidgetKeeShare @@ -10107,14 +8724,6 @@ Esta opción está obsoleta, use --set-key-file. TagModel - - Clear Search - Limpiar búsqueda - - - All Entries - Todos los apuntes - Expired Expiradas @@ -10123,6 +8732,14 @@ Esta opción está obsoleta, use --set-key-file. Weak Passwords Contraseñas débiles + + All Entries + Todos los apuntes + + + Clear Search + Limpiar búsqueda + TagView @@ -10300,6 +8917,26 @@ Ejemplo: JBSWY3DPEHPK3PXP Start storing your passwords securely in a KeePassXC database Empiece a guardar sus contraseñas con seguridad en una base de datos de KeePassXC + + Create new database + Crear una base de datos nueva + + + Open existing database + Abrir una base de datos existente + + + Import from KeePass 1 + Importar de KeePass 1 + + + Import from 1Password + Importar de 1Password + + + Import from CSV + Importar de CSV + Recent databases Bases de datos recientes @@ -10312,18 +8949,6 @@ Ejemplo: JBSWY3DPEHPK3PXP Welcome to KeePassXC %1 Bienvenido a KeePassXC %1 - - Create Database - Crear base de datos - - - Open Database - Abrir base de datos - - - Import File - Importar archivo - WinUtils @@ -10340,30 +8965,61 @@ Ejemplo: JBSWY3DPEHPK3PXP No se puedo registrar acceso directo global + + WindowsHello + + Failed to init KeePassXC crypto. + Fallo al inicializar criptografía de KeePassXC. + + + Failed to encrypt key data. + Fallo al cifrar clave de datos. + + + Failed to get Windows Hello credential. + Fallo al obtener credencial Windows Hello. + + + Failed to decrypt key data. + Fallo al descifrar clave de datos. + + YubiKey + + %1 No interface, slot %2 + %1 sin interfaz, ranura %2 + General: General: Could not find interface for hardware key with serial number %1. Please connect it to continue. - No se puede encontrar la interfaz para la clave hardware con número de serie %1. Conéctela para continuar. + No se puede encontrar la interfaz para la llave hardware con número de serie %1. Conéctela para continuar. YubiKeyEditWidget + + Refresh hardware tokens + Actualizar «tokens» hardware + + + Refresh + Actualizar + Hardware key slot selection - Selección de ranura de clave hardware + Selección de ranura de llave por hardware Could not find any hardware keys! - ¡No se puede encontrar ninguna clave hardware! + ¡No se puede encontrar ninguna llave por hardware! Selected hardware key slot does not support challenge-response! - ¡La ranura de la clave hardware seleccionada no soporta reto-respuesta! + ¡La ranura de la llave por hardware seleccionada no soporta reto-respuesta! Challenge-Response @@ -10385,64 +9041,56 @@ Ejemplo: JBSWY3DPEHPK3PXP Challenge-Response set, click to change or remove Conjunto de Desafío/Respuesta, haga clic para cambiar o eliminar + + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + <p>Si posee una <a href="https://www.yubico.com/">YubiKey</a> u <a href="https://onlykey.io">OnlyKey</a>, puede usarla para seguridad adicional.</p><p>La llave requiere que una de sus ranuras esté programada como <a href="https://www.yubico.com/products/services-software/challenge-response/">Desafío/respuesta HMAC-SHA1</a>.</p> + Detecting hardware keys… - Detectando claves hardware... + Detectando llaves por hardware... No hardware keys detected - No se detectaron claves hardware + No se detectaron llaves por hardware + + + YubiKeyInterface - Refresh hardware keys - Actualizar claves hardware - - - <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed with <a href="https://keepassxc.org/docs/#faq-yubikey-howto">Challenge-Response</a>.</p> - <p>Si posee un <a href="https://www.yubico.com/">YubiKey</a> o <a href="https://onlykey.io">OnlyKey</a>, puede utilizarlo para mayor seguridad.</p><p>La llave requiere que una de sus ranuras esté programada con <a href="https://keepassxc.org/docs/#faq-yubikey-howto">Challenge-Response</a>.</p> - - - Hardware keys found, but no slots are configured - Se han encontrado llaves hardware, pero no hay ranuras configuradas + %1 Invalid slot specified - %2 + %1 Especificado una ranura inválida - %2 YubiKeyInterfacePCSC + + (PCSC) %1 [%2] Challenge-Response - Slot %3 + (PCSC) %1 [%2] Desfío-Respuesta - Ranura %3 + The YubiKey PCSC interface has not been initialized. La interfaz YubiKey PCSC no ha sido inicializada. + + Hardware key is currently in use. + La llave por hardware está actualmente en uso. + Could not find or access hardware key with serial number %1. Please present it to continue. - No se puede encontrar la interfaz para la clave hardware con número de serie %1. Conéctela para continuar. + No se puede encontrar la interfaz para la llave hardware con número de serie %1. Conéctela para continuar. Hardware key is locked or timed out. Unlock or re-present it to continue. - La clave hardware está bloqueada o expiró. Desbloque o vuelva a presentar para continuar. + La llave hardware está bloqueada o expiró. Desbloque o vuelva a presentar para continuar. Hardware key was not found or is not configured. - Clave hardware no encontrada o no configurada. + Llave hardware no encontrada o no configurada. Failed to complete a challenge-response, the PCSC error code was: %1 Fallo al completar el desafio-respuesta, el error PCSC fue: %1 - - (NFC) %1 [%2] - Slot %3, %4 - YubiKey display fields - (NFC) %1 [%2] - Ranura %3, %4 - - - Press - USB Challenge-Response Key interaction request - Presione - - - Passive - USB Challenge-Response Key no interaction required - Pasivo - YubiKeyInterfaceUSB @@ -10450,6 +9098,14 @@ Ejemplo: JBSWY3DPEHPK3PXP Unknown Desconocido + + (USB) %1 [%2] Configured Slot - %3 + (USB) %1 [%2] Ranura configurada - %3 + + + (USB) %1 [%2] Challenge-Response - Slot %3 - %4 + (USB) %1 [%2] Desafío-Respuesta - Ranura %3 - %4 + Press USB Challenge-Response Key interaction request @@ -10464,31 +9120,25 @@ Ejemplo: JBSWY3DPEHPK3PXP The YubiKey USB interface has not been initialized. La interfaz YubiKey USB no ha sido inicializada. + + Hardware key is currently in use. + La llave por hardware está actualmente en uso. + Could not find hardware key with serial number %1. Please plug it in to continue. - No se puede encontrar clave hardware con número de serie %1. Conéctelo para continuar. + No se puede encontrar llave por hardware con número de serie %1. Conéctelo para continuar. Hardware key timed out waiting for user interaction. - La clave hardware expiró esperando interacción del usuario. + La llave por hardware expiró esperando interacción del usuario. A USB error occurred when accessing the hardware key: %1 - Ha ocurrido un error USB al acceder a la clave hardware: %1 + Ha ocurrido un error USB al acceder a la llave por hardware: %1 Failed to complete a challenge-response, the specific error was: %1 Fallo al completar el reto-respuesta, el error fue: %1 - - %1 [%2] - Slot %3 - YubiKey NEO display fields - %1 [%2] - Ranura %3 - - - %1 [%2] - Slot %3, %4 - YubiKey display fields - %1 [%2] - Ranura %3, %4 - \ No newline at end of file diff --git a/share/translations/keepassxc_et.ts b/share/translations/keepassxc_et.ts index 6628d47cc..ad20eddc0 100644 --- a/share/translations/keepassxc_et.ts +++ b/share/translations/keepassxc_et.ts @@ -80,10 +80,6 @@ Details Üksikasjad - - Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. - Otsust mäletatakse seni, kuni nii taotluse esitanud klient kui ka KeePassXC töötavad. - Remember Jäetakse meelde @@ -92,6 +88,10 @@ Allow Selected Luba valituile + + Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. + Otsust mäletatakse seni, kuni nii taotluse esitanud klient kui ka KeePassXC töötavad. + Deny All && Future Keela kõik ka edaspidi @@ -122,10 +122,6 @@ Use OpenSSH OpenSSH kasutamine - - Use both agents - Mõlema agendi kasutamine - SSH_AUTH_SOCK override SSH_AUTH_SOCK-i alistus: @@ -154,6 +150,10 @@ SSH Agent connection is working! SSH agendi ühendus toimib! + + Use both agents + Mõlema agendi kasutamine + ApplicationSettingsWidget @@ -169,10 +169,6 @@ Security Turvalisus - - This setting cannot be enabled when minimize on unlock is enabled. - Kuna valitud on luku avamise järel akna minimeerimine, ei saa seda valikut sisse lülitada. - Access error for config file %1 Juurdepääsuviga seadistusfailil „%1” @@ -217,49 +213,21 @@ You must restart the application to set the new language. Would you like to restart now? Keele vahetamiseks tuleb KeePassXC uuesti käivitada. Kas teha seda kohe? + + Reset Settings? + Seadete lähtestamise kinnitus + + + Are you sure you want to reset all general and security settings to default? + Kas oled kindel, et tahad kõik üld- ja turvaseaded lähtestada? + Select backup storage directory Varundamise sihtkataloogi valimine - Confirm Reset - Lähtestamise kinnitus - - - Are you sure you want to reset all settings to default? - Kas oled kindel, et tahad kõik seaded lähtestada? - - - Import KeePassXC Settings - KeePassXC seadete importimine - - - Failed to import settings from %1, not a valid settings file. - Failist „%1” seadete importimine ei õnnestunud, tegemist pole korrektse seadete failiga. - - - Export KeePassXC Settings - KeePassXC seadete eksportimine - - - Small - väike - - - Normal - tavaline - - - Medium - keskmine - - - Large - suur - - - Custom - kohandatud + This setting cannot be enabled when minimize on unlock is enabled. + Kuna valitud on luku avamise järel akna minimeerimine, ei saa seda valikut sisse lülitada. @@ -292,10 +260,6 @@ Remember previously used databases Mäletatakse viimati kasutatud andmebaase - - recent files - hiljutise faili piires - Load previously open databases on startup Käivitumisel laaditakse viimati avatud olnud andmebaasid @@ -312,6 +276,25 @@ Include beta releases when checking for updates Sobivad ka beetaversioonid + + On database unlock, show entries that + Andmebaasi avamisel näidatakse kirjeid, mis + + + have expired + On database unlock, show entries that... + on aegunud + + + days + On database unlock, show entries that will expire within %1 days + päeva jooksul + + + will expire within + On database unlock, show entries that... + aeguvad + File Management Failihaldus @@ -336,10 +319,22 @@ Backup database file before saving Enne salvestamist tehakse andmebaasifailist varukoopia + + Backup destination + Varundamise sihtkoht: + + + Specifies the database backup file location. Occurrences of "{DB_FILENAME}" are replaced with the filename of the saved database without extension. {TIME:<format>} is replaced with the backup time, see https://doc.qt.io/qt-5/qdatetime.html#toString. <format> defaults to format string "dd_MM_yyyy_hh-mm-ss". + Määrab andmebaasi varukoopia salvestuskoha. „{DB_FILENAME}” asendatakse salvestatud andmebaasi failinimega (ilma laiendita). {TIME:<vorming>} asendatakse varundamisajaga, vaata https://doc.qt.io/qt-5/qdatetime.html#toString. Vaikimisi on <vorming> „dd_MM_yyyy_hh-mm-ss” (s.t nt 15_04_2022_13-25-46). + {DB_FILENAME}.old.kdbx {DB_FILENAME}.vana.kdbx + + Choose... + Vali... + Use alternative saving method (may solve problems with Dropbox, Google Drive, GVFS, etc.) Alternatiivse salvestusmeetodi kasutamine (võib lahendada probleemid Dropboxi, Google Drive’i, GVFS-i jms-ga) @@ -378,11 +373,11 @@ Favicon download timeout: - Saidiikoonide allalaadimise ajalimiit: + Saidiikoonide allalaadimise ajalõpp: Website icon download timeout in seconds - Saidiikoonide allalaadimiskatsete ajalimiit sekundites + Saidiikoonide allalaadimiskatsete aegumine sekundites sec @@ -417,10 +412,6 @@ Toolbar button style: Tööriistariba nuppude stiil: - - Show passwords in color - Paroole näidatakse värviliselt - Use monospaced font for notes Märkmete jaoks kasutatakse fikseeritud laiusega fonti @@ -507,80 +498,23 @@ Viimati sisestatud kirjet mäletatakse: - On database unlock, show entries that will expire within - Andmebaasi avamisel näidatakse kirjeid, mis aeguvad + recent files + hiljutise faili piires - On database unlock, show entries that will expire within - Andmebaasi avamisel näidatakse kirjeid, mis aeguvad - - - days - number of days warning for password expiration - päeva jooksul - - - Destination format: - Sihtfaili nimevorming: - - - <html><head/><body><p><span style=" font-weight:600;">{DB_FILENAME}</span> is replaced with the filename of the saved database without extension</p><p><span style=" font-weight:600;">{TIME:&lt;format&gt;}</span> is replaced with the specified time format (default: dd_MM_yyyy_hh-mm-ss)</p><p>See the User Guide for more details</p></body></html> - <html><head/><body><p><span style=" font-weight:600;">{DB_FILENAME}</span> tähistab salvestatud andmebaasi failinime ilma laiendita.</p><p><span style=" font-weight:600;">{TIME:&lt;vorming&gt;}</span> tähistab määratud vormingus ajaväärtust (vaikimisi: dd_MM_yyyy_hh-mm-ss).</p><p>Lisateavet leiad käsiraamatust.</p></body></html> - - - Choose folder... - Vali kaust… - - - Show confirmation before moving entries to recycle bin - Kirjete prügikasti viskamisel küsitakse kinnitust - - - Copy data on double clicking field in entry view - Kirjevaates kopeerib topeltklõps väljal selle sisu lõikepuhvrisse - - - Show toolbar - Tööriistariba nähtaval - - - Show the menu bar by pressing the Alt key - Peidetud menüüriba puhul saab menüü avada Alt-klahviga - - - Show menubar - Menüüriba nähtaval - - - Import settings… - Impordi seaded… - - - Export settings… - Ekspordi seaded… - - - Open browser on double clicking URL field in entry view - Kirjevaates avab topeltklõps URL-il selle brauseris - - - Font size: - Fondi suurus: - - - Font size selection - Fondisuuruse valik + Show passwords in color + Paroole näidatakse värviliselt ApplicationSettingsWidgetSecurity Timeouts - Ajalimiidid + Aegumine Database lock timeout seconds - Andmebaasi lukustamise ajalimiit sekundites + Andmebaasi lukustamise ajalõpp sekundites sec @@ -624,6 +558,10 @@ Lock databases after minimizing the window Andmebaasid lukustatakse akna minimeerimisel + + Require password repeat when it is visible + Ka nähtava paroolivälja korral nõutakse parooli kordamist + Hide passwords when editing them Paroolid on muutmise ajal peidetud @@ -636,6 +574,18 @@ Hide passwords in the entry preview panel Kirjete eelvaatepaneelil varjatakse paroolid täppidega + + Hide entry notes by default + Vaikimisi peidetakse kirjete märkmed + + + Move entries to recycle bin without confirmation + Kirjete prügikasti viskamisel kinnitust ei küsita + + + Enable double click to copy the username/password entry columns + Topeltklõps kasutajanime/parooli veerus kopeerib selle lõikepuhvrisse + Privacy Privaatsus @@ -646,19 +596,7 @@ Hide TOTP in the entry preview panel - Kirjete eelvaatepaneelil varjatakse TOTP kood - - - Lock databases when switching user - Andmebaasid lukustatakse kasutaja vahetamisel - - - Lock Options - Lukustamise seaded - - - Hide notes in the entry preview panel - Kirjete eelvaatepaneelil varjatakse märkmed + @@ -704,13 +642,27 @@ Leiti väga pikk viivitus, lubatud maksimum on %1: %2 - Entry does not have attribute for PICKCHARS: %1 - PICKCHARS-automaatsisestuseks määratud atribuuti „%1” kirjes ei leidu. + Invalid conversion type: %1 + Vigane teisendustüüp: %1 + + + Invalid conversion syntax: %1 + Vigane teisendussüntaks: %1 + + + Invalid regular expression syntax %1 +%2 + Vigane regulaaravaldise süntaks %1 +%2 Invalid placeholder: %1 Vigane kohahoidja: %1 + + Entry does not have attribute for PICKCHARS: %1 + PICKCHARS-automaatsisestuseks määratud atribuuti „%1” kirjes ei leidu. + AutoTypeAssociationsModel @@ -752,6 +704,10 @@ AutoTypePlatformX11 + + Trying to send invalid keysym. + Prooviti saata vigast klahvisümbolit. + Sequence aborted: Caps Lock is on Jada sisestamine katkestati: suurtähelukk on sisse lülitatud @@ -764,10 +720,6 @@ Unable to get valid keycode for key: Ei leitud korrektset klahvikoodi klahvile - - Trying to send invalid keyboard symbol. - Prooviti saata vigast klahvisümbolit. - AutoTypeSelectDialog @@ -872,13 +824,13 @@ Ctrl+4 – lülitab sisse ekraaniklaviatuuri (ainult Windowsis)</p>Disable for this site Keela selle saidi jaoks - - Undo - Võta tagasi - BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + KeePassXC-Browseri kirje salvestamine + Ok OK @@ -893,74 +845,13 @@ Please select the correct database for saving credentials. Sul on avatud mitu andmebaasi. Vali, millisesse neist tunnused salvestada tuleks. - - KeePassXC - Select Database - Andmebaasi valimine – KeePassXC - - - - BrowserPasskeysConfirmationDialog - - Cancel - Loobu - - - Update - Uuenda - - - Authenticate - Autendi - - - Register new - Registreeri uus - - - Register - Registreeri - - - Timeout in <b>%n</b> seconds... - Oodatakse veel <b>%n</b> sekund...Oodatakse veel <b>%n</b> sekundit... - - - Relying Party: %1 - Sõltlane: %1 - - - Username: %1 - Kasutajanimi: %1 - - - KeePassXC - Passkey credentials - Pääsuvõtme tunnused – KeePassXC - - - Add to existing entry - Lisa olemasolevale kirjele - - - Existing passkey found. -Do you want to register a new passkey for: - Leiti olemasolev pääsuvõti. -Vali kirje, millele uus pääsuvõti registreerida: - - - Select the existing passkey and press Update to replace it. - Vali olemasolev pääsuvõti ja klõpsa selle asendamiseks „Uuenda”. - - - Authenticate passkey credentials for: - Pääsuvõtme tunnuste autentimine: - - - Do you want to register a passkey for: - Kirje, millele uus pääsuvõti registreerida: - BrowserService + + KeePassXC: Create a new group + Uue grupi loomine – KeePassXC + A request for creating a new group "%1" has been received. Do you want to create this group? @@ -969,6 +860,10 @@ Do you want to create this group? Kas lubad selle grupi luua? + + KeePassXC: New key association request + Uus ühendumistaotlus – KeePassXC + You have received an association request for the following database: %1 @@ -985,16 +880,28 @@ chrome-laptop. Save and allow access Salvesta ja luba juurdepääs + + KeePassXC: Overwrite existing key? + Kirje ülekirjutamise kinnitus – KeePassXC + A shared encryption key with the name "%1" already exists. Do you want to overwrite it? Jagatud krüptimisvõti nimega „%1” on juba olemas. Kas soovid selle üle kirjutada? + + KeePassXC: Update Entry + Kirje uuendamine – KeePassXC + Do you want to update the information in %1 - %2? Kas soovid uuendada teavet kirjes %1 – %2? + + KeePassXC: Delete entry + Kirje kustutamine – KeePassXC + A request for deleting entry "%1" has been received. Do you want to delete the entry? @@ -1004,58 +911,50 @@ Kas lubad selle kirje kustutada? - %1 (Passkey) - %1 (pääsuvõti) + Converting attributes to custom data… + Atribuutide teisendamine kohandatud andmeteks… - KeePassXC - Create a new group - Uue grupi loomine – KeePassXC + Abort + Katkesta - Disable - keelatud + KeePassXC: Converted KeePassHTTP attributes + Teisendatud KeePassHTTP atribuudid – KeePassXC - KeePassXC - Overwrite existing key? - Kirje ülekirjutamise kinnitus – KeePassXC + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + %1 kirje atribuudid edukalt teisendatud. +Kohandatud andmetesse teisaldati %2 võtit. + + + Successfully moved %n keys to custom data. + %n võti edukalt kohandatud andmetesse teisaldatud.%n võtit edukalt kohandatud andmetesse teisaldatud. - KeePassXC - Update Entry - Kirje uuendamine – KeePassXC + KeePassXC: No entry with KeePassHTTP attributes found! + Ühtegi KeePassHTTP atribuutidega kirjet ei leitud – KeePassXC - KeePassXC - Delete entry - Kirje kustutamine – KeePassXC + The active database does not contain an entry with KeePassHTTP attributes. + Aktiivne andmebaas ei sisalda ühtegi kirjet, millel oleks KeePassHTTP atribuute. - KeePassXC - New key association request - Uus ühendumistaotlus – KeePassXC + Don't show this warning again + Seda hoiatust rohkem ei näidata - Passkey - Pääsuvõti + KeePassXC: Legacy browser integration settings detected + Tuvastati brauserilõimingu pärandseadistus – KeePassXC - KeePassXC - Passkey credentials - Pääsuvõtme tunnused – KeePassXC - - - Register a new passkey to this entry: - Registreeri uus pääsuvõti sellesse kirjesse: - - - KeePassXC - Update passkey - Pääsuvõtme uuendamine – KeePassXC - - - Entry already has a passkey. -Do you want to overwrite the passkey in %1 - %2? - Kirjel „%1” on juba pääsuvõti. -Kas soovid selle uue pääsuvõtmega (%2) üle kirjutada? - - - Register - Registreeri + 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? + Sinu KeePassXC-Browseri seadistus tuleb teisaldada andmebaasi seadistusse. +See on vajalik praeguste brauseriühenduste säilitamiseks. +Kas tahad oma olemasoleva seadistuse kohe üle kolida? @@ -1076,6 +975,10 @@ Kas soovid selle uue pääsuvõtmega (%2) üle kirjutada? General Üldine + + Browsers installed as snaps are currently not supported. + <i>Snap</i>’ina paigaldatud brausereid praegu ei toetata. + Enable integration for these browsers: Lubatakse lõimimine järgmiste brauseritega: @@ -1247,6 +1150,26 @@ Kas soovid selle uue pääsuvõtmega (%2) üle kirjutada? Custom extension ID Kohandatud laienduse-ID + + Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 + <i>Snap</i>’ide isoleerituse tõttu tuleb brauserilõimingu võimaldamiseks esmalt teatud skript käivitada.<br />Vajaliku skripti saab aadressilt %1. + + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 + Lõimingu toimimiseks peab brauserile olema paigaldatud laiendus KeePassXC-Browser. <br />See on saadaval %1i, %2’i ja %3’i jaoks. %4 + + + Please see special instructions for browser extension use below + Vaata allpool brauserilaienduse kasutamise erijuhiseid. + + + <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. + <b>Viga:</b> kohandatud puhverrakenduse asukohta ei leitud!<br/>Ilma puhverrakenduseta brauserilõiming EI TÖÖTA. + + + <b>Warning:</b> The following options can be dangerous! + <b>Hoiatus:</b> nende seadete muutmine võib olla ohtlik! + Executable Files Rakendusfailid @@ -1263,46 +1186,6 @@ Kas soovid selle uue pääsuvõtmega (%2) üle kirjutada? Select native messaging host folder location Programmiomase teatevahetuse hosti kausta valimine - - Allow keepassxc-proxy to list all entries with their title, URL and UUID in connected databases. - Märkimisel lubatakse keepassxc-proxy’l loetleda kirjeid koos pealkirja, URL-i ja ühendatud andmebaasides oleva UUID-ga. - - - Allow limited access to all entries in connected databases (ignores site access restrictions) - Lubatakse piiratud juurdepääs kõigile kirjetele ühendatud andmebaasides (eirates saitide juurdepääsupiiranguid) - - - <b>Warning:</b> Only adjust these settings if necessary. - <b>Hoiatus:</b> neid seadeid ei tohiks muuta ilma otsese vajaduseta. - - - The custom proxy location does not exist. - Kohandatud puhverrakenduse asukohta pole olemas. - - - <b>Error:</b> The custom proxy location does not exist. Correct this in the advanced settings tab. - <b>Viga:</b> kohandatud puhverrakenduse asukohta pole olemas. Vali lisaseadete kaardil õige asukoht. - - - <b>Error:</b> The installed proxy executable is missing from the expected location: %1<br/>Please set a custom proxy location in the advanced settings or reinstall the application. - <b>Viga:</b> paigaldatud puhverrakendust ei leitud ootuspärasest asukohast: %1<br/>Palun määra lisaseadete all kohandatud puhverrakenduse asukoht või paigalda puhverrakendus uuesti. - - - Allows using insecure http://localhost with passkeys for testing purposes. - Märkimisel lubatakse pääsuvõtmete testimiseks kasutada ebaturvalist aadressi http://localhost. - - - Allow using localhost with passkeys - Lubatakse localhosti kasutamine pääsuvõtmetega - - - KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. - Lõimingu toimimiseks peab brauserile olema paigaldatud laiendus KeePassXC-Browser. <br />See on saadaval %1i, %2’i ja %3’i jaoks. - - - Browsers installed using Snap or Flatpak are not supported with exception to Firefox installed using Snap. - Kui paigaldatud veebibrauser on pakendatud Snapina või Flatpakina, siis KeepassXC tugi puudub, välja arvatud Snapina paigaldatud Firefoxi puhul. - CloneDialog @@ -1325,6 +1208,14 @@ Kas soovid selle uue pääsuvõtmega (%2) üle kirjutada? CsvImportWidget + + Import CSV fields + CSV väljade importimine + + + filename + failinimi + size, rows, columns maht, ridade arv, veergude arv @@ -1433,43 +1324,50 @@ Kas soovid selle uue pääsuvõtmega (%2) üle kirjutada? Column %1 %1. veerg + + Imported from CSV file + Imporditud CSV-failist + + + Original data: + Algsed andmed: + + + Error(s) detected in CSV file! + CSV-failis leiti vigu: + [%n more message(s) skipped] [ja veel %n teade, mis jäeti vahele][ja veel %n teadet, mis jäeti vahele] - Failed to parse CSV file: %1 - CSV-faili parsimine ebaõnnestus: %1 + Error + Viga - Imported from CSV file: %1 - Imporditud CSV-failist: %1 - - - No Title Selected - Pealkirja pole valitud - - - No title column was selected, entries will be hard to tell apart. -Are you sure you want to import? - Pealkirjaveergu ei määratud, seega saab olema raske kirjeid eristada. -Kas oled kindel, et soovid importida? - - - Tags - Sildid + CSV import: writer has errors: +%1 + CSV importimine: kirjutamisel ilmnes vigu: +%1 CsvParserModel + + %1, %2, %3 + file info: bytes, rows, columns + %1, %2, %3 + + + %n byte(s) + %n bait%n baiti + %n row(s) - CSV row count %n rida%n rida %n column(s) - CSV column count %n veerg%n veergu @@ -1522,14 +1420,6 @@ Varuandmebaasi asukoht: %2 Recycle Bin Prügikast - - Database file read error. - Viga andmebaasifaili lugemisel. - - - No file path was provided. - Faili askukohta ei antud. - DatabaseOpenDialog @@ -1552,10 +1442,30 @@ Varuandmebaasi asukoht: %2 Password field Parooli väli + + Enter Additional Credentials (if any): + Lisatunnused (kui vaja): + + + Key File: + Võtmefail: + + + Key file help + Abi võtmefailide kohta + Hardware key slot selection Riistvaralise võtme pesa valimine + + Hardware Key: + Riistvaraline võti: + + + Hardware key help + Riistvaralise võtme abi + Key file to unlock the database Võtmefail andmebaasi luku avamiseks @@ -1568,6 +1478,14 @@ Varuandmebaasi asukoht: %2 Browse… Sirvi… + + Refresh hardware tokens + Värskenda riistvaraliste võtmete loendit + + + Refresh + Värskenda + Unlock Database Ava andmebaasi lukk @@ -1630,6 +1548,10 @@ Selle veateate ilmumise vältimiseks peaksid avama andmebaasi seadetes turvalisu Retry with empty password Proovi uuesti tühja parooliga + + Failed to authenticate with Touch ID + Touch ID-ga autentimine ebaõnnestus + Failed to open key file: %1 Võtmefaili avamine ebaõnnestus: %1 @@ -1662,69 +1584,41 @@ Selle veateate ilmumise vältimiseks peaksid avama andmebaasi seadetes turvalisu Cannot use database file as key file Andmebaasifail ei sobi võtmefailiks + + You cannot use your database file as a key file. +If you do not have a key file, please leave the field empty. + Andmebaasifaili ennast ei saa võtmefailina kasutada. +Kui andmebaasi avamiseks pole võtmefaili vaja, jäta see väli tühjaks. + + + Detecting hardware keys… + riistvaraliste võtmete tuvastamine… + + + No hardware keys detected + riistvaralisi võtmeid ei tuvastatud + + + Select hardware key… + vali riistvaraline võti… + + + <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information…</p> + <p>Lisaks paroolile saab andmebaasi turvalisuse suurendamiseks kasutada võtmefaili. Selle saab genereerida andmebaasi turvaseadetes.</p><p>See <strong>ei ole</strong> sinu *.kdbx andmebaasifail!<br>Kui andmebaasi avamiseks pole võtmefaili vaja, jäta see väli tühjaks.</p><p>Lisateabe saamiseks klõpsa.</p> + + + <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +<p>Click for more information…</p> + <p>Kasutada saab riistvaralist võtit nagu <strong>YubiKey</strong> või <strong>OnlyKey</strong>, millel on HMAC-SHA1 jaoks seadistatud pesa.</p> +<p>Lisateabe saamiseks klõpsa.</p> + authenticate to access the database andmebaasi avamiseks on tarvis autentida - Failed to authenticate with Quick Unlock: %1 - Kiiresti luku avamise teenusega autentimine ebaõnnestus: %1 - - - Select Key File: - Võtmefaili valimine: - - - <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!</p> - <p>Lisaks paroolile saab andmebaasi turvalisuse suurendamiseks kasutada võtmefaili. Selle saab genereerida andmebaasi turvaseadetes.</p><p>See <strong>ei ole</strong> sinu *.kdbx andmebaasifail!</p> - - - Use hardware key [Serial: %1] - Riistvaralise võtme kasutamine (seerianumber: %1) - - - Use hardware key - Riistvaralise võtme kasutamine - - - Your database file is NOT a key file! -If you don't have a key file or don't know what that is, you don't have to select one. - Andmebaasifail ise EI OLE võtmefail! -Kui andmebaasi avamiseks pole võtmefaili vaja, ära vali seda. - - - KeePassXC database file selected - Valitud on KeePassXC andmebaasifail - - - The file you selected looks like a database file. -A database file is NOT a key file! - -Are you sure you want to continue with this file?. - Valitud fail näeb välja nagu andmebaasifail. -Andmebaasifail EI OLE võtmefail! - -Kas oled kindel, et soovid selle failiga jätkata? - - - No hardware keys found. - Riistvaralisi võtmeid ei leitud. - - - Refresh Hardware Keys - Värskenda riistvaraliste võtmete loendit - - - Click to add a key file. - Klõpsa võtmefaili lisamiseks. - - - <a href="#" style="text-decoration: underline">I have a key file</a> - <a href="#" style="text-decoration: underline">Mul on võtmefail</a> - - - Hardware keys found, but no slots are configured. - Leiti riistvaraline võti, kuid ühtki pesa pole seadistatud. + Failed to authenticate with Windows Hello: %1 + @@ -1736,6 +1630,10 @@ Kas oled kindel, et soovid selle failiga jätkata? DatabaseSettingsDialog + + Advanced Settings + Täpsemad seaded + General Üldine @@ -1760,22 +1658,6 @@ Kas oled kindel, et soovid selle failiga jätkata? Maintenance Hooldus - - KeeShare - KeeShare - - - Secret Service Integration - Saladuste teenuse lõiming - - - Remote Sync - Sünkimine - - - Database Settings: %1 - Andmebaasi seaded: %1 - DatabaseSettingsWidgetBrowser @@ -1783,6 +1665,18 @@ Kas oled kindel, et soovid selle failiga jätkata? KeePassXC-Browser settings KeePassXC-Browseri seaded + + Convert KeePassHTTP data + Teisenda KeePassHTTP andmed + + + Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data + Teisenda KeePassHTTP pärandatribuudid KeePassXC-Browseriga ühilduvateks kohandatud andmeteks + + + Refresh database root group ID + Värskenda andmebaasi juurgrupi ID-d + Disconnect all browsers Kõigi brauseritega ühenduse katkestamise kinnitus @@ -1791,10 +1685,6 @@ Kas oled kindel, et soovid selle failiga jätkata? Forget all site-specific settings on entries Kirjete kõigi saidiomaste seadete kustutamine - - Refresh database root group ID - Värskenda andmebaasi juurgrupi ID-d - Stored keys Salvestatud võtmed @@ -1843,10 +1733,18 @@ This may prevent connection to the browser plugin. Kas oled kindel, et soovid katkestada ühenduse kõigi brauseritega? See võib tõkestada ühendumise brauseripluginaga. + + KeePassXC: No keys found + Võtmeid ei leitud – KeePassXC + No shared encryption keys found in KeePassXC settings. KeePassXC seadetest ei leitud ühtki jagatud krüptimisvõtit. + + KeePassXC: Removed keys from database + Võtmed andmebaasist eemaldatud – KeePassXC + Successfully removed %n encryption key(s) from KeePassXC settings. %n krüptimisvõti edukalt KeePassXC seadetest eemaldatud.%n krüptimisvõtit edukalt KeePassXC seadetest eemaldatud. @@ -1865,14 +1763,32 @@ See tühistab ka juurdepääsuload kirjetele. Abort Katkesta + + KeePassXC: Removed permissions + Juurdepääsuload eemaldatud – KeePassXC + Successfully removed permissions from %n entry(s). %n kirje juurdepääsuload edukalt eemaldatud.%n kirje juurdepääsuload edukalt eemaldatud. + + KeePassXC: No entry with permissions found! + Juurdepääsulubadega kirjeid ei leitud – KeePassXC + The active database does not contain an entry with permissions. Aktiivne andmebaas ei sisalda ühtki juurdepääsulubadega kirjet. + + Move KeePassHTTP attributes to custom data + KeePassHTTP atribuutide kohandatud andmetesse teisaldamine + + + Do you really want to convert all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + Kas oled kindel, et tahad kõik brauserilõimingu pärandandmed uusimale standardile üle viia? +Need võivad olla vajalikud brauseripluginaga ühilduvuse säilitamiseks. + Refresh database ID Andmebaasi ID värskendamine @@ -1883,26 +1799,6 @@ This is only necessary if your database is a copy of another and the browser ext Kas oled kindel, et tahad andmebaasi ID-d värskendada? See on vajalik vaid juhul, kui sinu andmebaas on teise andmebaasi koopia ning brauserilaiendus ei saa sellega ühendust. - - Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data - Teisenda KeePassHTTP pärandatribuudid KeePassXC-Browseriga ühilduvateks kohandatud andmeteks - - - No keys found - Võtmeid ei leitud - - - Removed keys from database - Võtmed andmebaasist eemaldatud - - - Removed permissions - Juurdepääsuload eemaldatud - - - No entry with permissions found! - Juurdepääsulubadega kirjeid ei leitud - DatabaseSettingsWidgetDatabaseKey @@ -1942,18 +1838,6 @@ Kas oled kindel, et soovid jätkata ilma paroolita? Failed to change database credentials Andmebaasi tunnuste vahetamine ebaõnnestus. - - Weak password - Nõrk parool - - - This is a weak password! For better protection of your secrets, you should choose a stronger password. - See on liiga nõrk parool! Oma saladuste paremaks kaitsmiseks peaksid valima tugevama parooli. - - - The provided password does not meet the minimum quality requirement. - Sisestatud parool ei vasta kvaliteedinõuetele. - DatabaseSettingsWidgetEncryption @@ -1961,6 +1845,14 @@ Kas oled kindel, et soovid jätkata ilma paroolita? Decryption Time: Lahtikrüptimise aeg: + + Change existing decryption time + Muuda juba määratud lahtikrüptimise aega + + + Change + Muuda + Decryption time in seconds Lahtikrüptimise aeg sekundites @@ -2041,6 +1933,11 @@ Kas oled kindel, et soovid jätkata ilma paroolita? KDBX 3 KDBX 3 + + unchanged + Database decryption time is unchanged + muutmata + Number of rounds too high Key transformation rounds @@ -2093,18 +1990,6 @@ Kui jätad selle suuremaks muutmata, on andmebaas jõhkra jõuga rünnete ees ka Threads for parallel execution (KDF settings) lõim lõime - - Encryption Settings: - Krüptimisseaded: - - - Basic - Põhiline - - - Advanced - Lisaseaded - DatabaseSettingsWidgetFdoSecrets @@ -2202,102 +2087,29 @@ Seda toimingut ei saa tagasi võtta. the oldest history items of an entry will be removed such that only the specified amount of entries remain at most. - Selle valiku salvestamisel või kirjete muutmisel -eemaldatakse kirjete vanimaid ajalooelemente, -nii et allesjäävate elementide arv ei oleks suurem -kui siin määratud. + Limit the amount of history items per entry to: - Ajalooelementide suurim lubatud arv kirje kohta: + When saving this setting or editing an entry the oldest history items of an entry will be removed such that the remaining history items add up to the specified amount at most. - Selle valiku salvestamisel või kirjete muutmisel -eemaldatakse kirjete vanimaid ajalooelemente, -nii et allesjäävate elementide kogumaht ei oleks -suurem kui siin määratud. + Limit the total size of history items per entry to: - Ajaloo suurim lubatud maht kirje kohta: + Move entries to a recycle bin group instead of deleting them from the database. Entries deleted from the recycle bin are removed from the database. - Kirje kustutamisel ei eemaldata seda andmebaasist, -vaid teisaldatakse see prügikastigruppi. -Alles prügikastist kustutamise korral -eemaldatakse kirje andmebaasist. - - - Autosave delay since last change - Märkimisel viivitatakse muudatuste järel automaatsalvestusega. - - - Autosave delay - Automaatsalvestusega viivitatakse - - - Autosave delay since last change in minutes - Määrab automaatsalvestuse viivituse minutites. - - - min - min - - - Autosave delay since last change checkbox - Automaatsalvestusega viivitamise märkeruut - - - Public Database Metadata - Andmebaasi avalikud metaandmed - - - Warning: the following settings are not encrypted. - <b>Hoiatus:</b> need seaded pole krüptitud. - - - Display name: - Kuvatav nimi: - - - Publically visible display name used on the unlock dialog - Luku avamise dialoogis näidatav nimi - - - Database public display name - Andmebaasi avalikult kuvatav nimi - - - Display color: - Kuvatav värv: - - - Publically visible color used on the unlock dialog - Luku avamise dialoogis näidatav värv - - - Database public display color chooser - Andmebaasi avalikult kuvatava värvi valimine - - - Clear - Puhasta - - - Display icon: - Kuvatav ikoon: - - - Select Database Icon - Andmebaasi ikooni valimine + @@ -2394,141 +2206,6 @@ eemaldatakse kirje andmebaasist. Andmebaasi kirjelduse väli - - DatabaseSettingsWidgetRemote - - Sync Commands - Sünkimiskäsud - - - Remove - Eemalda - - - Command Settings - Käsuseaded - - - Name - Nimi - - - Save - Salvesta - - - Download - Allalaadimine - - - Command: - Käsk: - - - Download command field - Allalaadimiskäsu väli - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - nt „sftp kasutaja@masinanimi” või „scp kasutaja@masinanimi:Andmebaas_kaugarvutis.kdbx {TEMP_DATABASE}” - - - Input: - Sisend: - - - Download input field - Allalaadimise sisendiväli - - - Upload - Üleslaadimine - - - Upload command field - Üleslaadimiskäsu väli - - - e.g.: "sftp user@hostname" or "scp {TEMP_DATABASE} user@hostname:DatabaseOnRemote.kdbx" - nt „sftp kasutaja@masinanimi” või „scp {TEMP_DATABASE} kasutaja@masinanimi:Andmebaas_kaugarvutis.kdbx” - - - Upload input field - Üleslaadimise sisendiväli - - - Name cannot be empty. - Nimi ei saa olla tühi. - - - Test - Testi - - - Download command cannot be empty. - Allalaadimiskäsk ei saa olla tühi. - - - Download failed with error: %1 - Allalaadimine ebaõnnestus, veateade: %1 - - - Download finished, but file %1 could not be found. - Allalaadimine lõpetati, aga faili „%1” ei leitud. - - - Download successful. - Allalaadimine valmis. - - - Save Remote Settings - Salvesta sünkimisseadistus - - - You have unsaved changes. Do you want to save them? - Sul on salvestamata muudatusi. Kas tahad need salvestada? - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - nt: -get Andmebaas_kaugarvutis.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} on kohahoidja, mis tähistab ajutisse asukohta salvestatud andmebaasi. -Käsk peab oma töö lõpetama, nt „sftp” puhul peab viimane saadetav käsk olema „exit”. - - - - e.g.: -put {TEMP_DATABASE} DatabaseOnRemote.kdbx -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - nt: -put {TEMP_DATABASE} Andmebaas_kaugarvutis.kdbx -exit ---- -{TEMP_DATABASE} on kohahoidja, mis tähistab ajutisse asukohta salvestatud andmebaasi. -Käsk peab oma töö lõpetama, nt „sftp” puhul peab viimane saadetav käsk olema „exit”. - - - - Timeout: - Ajalimiit: - - - seconds - sekundit - - DatabaseTabWidget @@ -2561,10 +2238,26 @@ See on kahtlemata programmiviga – palun anna sellest arendajatele teada!CSV file CSV-fail + + Select CSV file + CSV-faili valimine + Merge database Andmebaasi mestimine + + KeePass 1 database + KeePass 1 andmebaas + + + Open KeePass 1 database + KeePass 1 andmebaasi avamine + + + Open OPVault + OPVaulti avamine + Export database to CSV file Andmebaasi eksportimine CSV-failiks @@ -2577,6 +2270,28 @@ See on kahtlemata programmiviga – palun anna sellest arendajatele teada!Writing the HTML file failed. HTML-faili kirjutamine ebaõnnestus. + + Export Confirmation + Eksportimise kinnitus + + + You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? + Asusid andmebaasi eksportima krüptimata failivormingusse. See jätab su paroolid jm tundliku teabe kaitseta! Kas oled kindel, et soovid jätkata? + + + New Database + Uus andmebaas + + + %1 [New Database] + Database tab name modifier + %1 [uus andmebaas] + + + %1 [Locked] + Database tab name modifier + %1 [lukus] + Export database to XML file Andmebaasi eksportimine XML-failiks @@ -2589,31 +2304,9 @@ See on kahtlemata programmiviga – palun anna sellest arendajatele teada!Writing the XML file failed XML-faili kirjutamine ebaõnnestus. - - Export Confirmation - Eksportimise kinnitus - - - You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? - Asusid andmebaasi eksportima krüptimata failivormingusse. See jätab su paroolid jm tundliku teabe kaitseta! Kas oled kindel, et soovid jätkata? - - - %1 [Locked] - Database tab name modifier - %1 [lukus] - - - %1 [Temporary] - Database tab name modifier - %1 [ajutine] - DatabaseWidget - - Searches and Tags - Otsingud ja sildid - Searching… Otsimine… @@ -2662,10 +2355,6 @@ See on kahtlemata programmiviga – palun anna sellest arendajatele teada!Expired entries Aegunud kirjed - - Entries expiring within %1 day(s) - %1 päeva jooksul aeguvad kirjed%1 päeva jooksul aeguvad kirjed - No current database. Aktiivne andmebaas puudub. @@ -2690,18 +2379,6 @@ See on kahtlemata programmiviga – palun anna sellest arendajatele teada!No Results Tulemusi pole - - Save - Salvesta - - - Enter a unique name or overwrite an existing search from the list: - Sisesta ainukordne nimi või vali loendist ülekirjutatav otsing: - - - Save Search - Otsingu salvestamine - Lock Database? Andmebaasi lukustamise kinnitus @@ -2730,6 +2407,26 @@ Kas salvestada muudatused? File has changed Faili on muudetud + + The database file has changed. Do you want to load the changes? + Andmebaasifaili on muudetud. Kas tahad selle uuesti avada? + + + Merge Request + Mestimistaotlus + + + The database file has changed and you have unsaved changes. +Do you want to merge your changes? + Andmebaasifaili on muudetud, aga sinul on salvestamata muudatusi. +Kas tahad oma muudatused mestida? + + + Could not open the new database file while attempting to autoreload. +Error: %1 + Automaatse taaslaadimise käigus polnud uut andmebaasifaili võimalik avada. +Veateade: %1 + Disable safe saves? Turvalise salvestamise keelamine @@ -2772,94 +2469,25 @@ Kas keelata turvaline salvestamine ja proovida seejärel uuesti? Could not find database file: %1 Andmebaasifaili ei leitud: %1 - - New Database - Uus andmebaas + + Entries expiring within %1 day(s) + %1 päeva jooksul aeguvad kirjed%1 päeva jooksul aeguvad kirjed - %1 [New Database] - Database tab name modifier - %1 [uus andmebaas] + Searches and Tags + Otsingud ja sildid - Remote Sync did not contain any download or upload commands. - Sünkimisseadistus ei sisalda alla- ega üleslaadimiskäske. + Enter a unique name or overwrite an existing search from the list: + Sisesta ainukordne nimi või vali loendist ülekirjutatav otsing: - Remote sync '%1' completed successfully! - Sünkimine „%1” kenasti lõpetatud! + Save + Salvesta - Remote sync '%1' failed: %2 - Sünkimine „%1” ebaõnnestus: %2 - - - Error while saving database %1: %2 - Andmebaasi „%1” salvestamisel tekkis tõrge: %2 - - - Downloading... - Allalaadimine... - - - Uploading... - Üleslaadimine... - - - Syncing... - Sünkimine... - - - Remove passkey from entry - Kirjelt pääsuvõtme eemaldamine - - - Do you want to remove the passkey from this entry? - Kas soovid sellelt kirjelt pääsuvõtme eemaldada? - - - The database file "%1" was modified externally - Andmebaasifaili „%1” on väljastpoolt muudetud - - - Do you want to load the changes? - Kas tahad muudatused laadida? - - - Reload database - Laadi andmebaas uuesti - - - Reloading database… - Andmebaasi uuestilaadimine… - - - Reload canceled - Uuestilaadimine tühistati - - - Reload successful - Uuestilaadimine valmis - - - Reload pending user action… - Uuestilaadimine ootab kasutaja tegevust… - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes<br>Ignore the changes on disk until save<br>Discard unsaved changes - Andmebaasifaili „%1” on väljastpoolt muudetud.<br>Kuidas soovid jätkata?<br><br>Mesti kõik muudatused<br>Eira muudatusi kuni salvestamiseni<br>Loobu salvestamata muudatustest - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes then save<br>Overwrite the changes on disk<br>Discard unsaved changes - Andmebaasifaili „%1” on väljastpoolt muudetud.<br>Kuidas soovid jätkata?<br><br>Mesti kõik muudatused ja seejärel salvesta andmebaas<br>Kirjuta muudetud fail üle<br>Loobu salvestamata muudatustest - - - Database file overwritten. - Andmebaasifail ülekirjutatud. - - - Database file on disk cannot be unlocked with current credentials.<br>Enter new credentials and/or present hardware key to continue. - Praegu kehtivate tunnustega ei õnnestunud andmebaasifaili lukku avada.<br>Jätkamiseks sisesta uued tunnused ja/või ühenda riistvaraline võti. + Save Search + Otsingu salvestamine @@ -2912,6 +2540,10 @@ Kas keelata turvaline salvestamine ja proovida seejärel uuesti? n/a + + (encrypted) + (krüptitud) + Select private key Privaatvõtme valimine @@ -2998,10 +2630,6 @@ Kas soovid vea parandada? Hide Peida - - %n hour(s) - %n tunni pärast%n tunni pärast - %n week(s) %n nädala pärast%n nädala pärast @@ -3014,9 +2642,9 @@ Kas soovid vea parandada? %n year(s) %n aasta pärast%n aasta pärast - - Failed to decrypt SSH key, ensure password is correct. - SSH-võtme lahtikrüptimine ebaõnnestus. Vaata, et parool oleks õige. + + %n hour(s) + %n tunni pärast%n tunni pärast @@ -3138,20 +2766,10 @@ isegi kui see ei vasta kvaliteedinõuetele. Märgi see ruut, kui parooli keeruku Add new window association Lisa uus aknaseos - - + - Add item - Lisa - Remove selected window association Eemalda valitud aknaseos - - - - Remove item - Eemalda - Window title: Akna tiitel: @@ -3176,9 +2794,23 @@ isegi kui see ei vasta kvaliteedinõuetele. Märgi see ruut, kui parooli keeruku Custom Auto-Type sequence for this window Omamääratud automaatsisestuse jada selle akna jaoks + + + + Add item + Lisa + + + - + Remove item + Eemalda + EditEntryWidgetBrowser + + These settings affect to the entry's behaviour with the browser extension. + Need seaded mõjutavad kirje käitumist brauserilaiendusega. + General Üldine @@ -3191,14 +2823,26 @@ isegi kui see ei vasta kvaliteedinõuetele. Märgi see ruut, kui parooli keeruku Skip Auto-Submit for this entry Automaatsisestus jäetakse selle kirje puhul vahele + + Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. + Märkimisel saadetakse see kirje brauserile ainult HTTP autentimisdialoogide puhul ning tavaliste sisselogimisvormide korral seda kirjet valida ei saa. + Use this entry only with HTTP Basic Auth Seda kirjet kasutatakse vaid HTTP lihtautentimisel + + Do not send this setting to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. + Märkimisel seda kirjet HTTP autentimisdialoogide puhul brauserile ei saadeta ning HTTP autentimisdialoogides seda kirjet valida ei saa. + Do not use this entry with HTTP Basic Auth Seda kirjet HTTP lihtautentimisel ei kasutata + + Additional URL's + Lisa-URL-id + Add Lisa @@ -3211,22 +2855,6 @@ isegi kui see ei vasta kvaliteedinõuetele. Märgi see ruut, kui parooli keeruku Edit Muuda - - These settings affect the entry's behaviour with the browser extension. - Need seaded mõjutavad kirje käitumist brauserilaiendusega. - - - Additional URLs - Lisa-URL-id - - - Only send this entry to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. - Märkimisel saadetakse see kirje brauserile ainult HTTP autentimisdialoogide puhul ning tavaliste sisselogimisvormide korral seda kirjet valida ei saa. - - - Do not send this entry to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. - Märkimisel seda kirjet HTTP autentimisdialoogide puhul brauserile ei saadeta ning HTTP autentimisdialoogides seda kirjet valida ei saa. - EditEntryWidgetHistory @@ -3323,35 +2951,35 @@ isegi kui see ei vasta kvaliteedinõuetele. Märgi see ruut, kui parooli keeruku &Username: - &Kasutajanimi: + &Title: - P&ealkiri: + &Password: - &Parool: + UR&L: - UR&L: + &Notes: - &Märkmed: + Toggle notes visibility - Lülita märkmete nähtavust + T&ags: - &Sildid: + &Expires: - &Aegub: + @@ -3392,6 +3020,19 @@ isegi kui see ei vasta kvaliteedinõuetele. Märgi see ruut, kui parooli keeruku Private key Privaatvõti + + External file + Väline fail: + + + Browser for key file + Vali võtmefail + + + Browse… + Button for opening file dialog + Sirvi… + Attachment Kaasatud fail: @@ -3408,23 +3049,6 @@ isegi kui see ei vasta kvaliteedinõuetele. Märgi see ruut, kui parooli keeruku Remove from agent Eemalda agendilt - - External file - Väline fail: - - - Browser for key file - Vali võtmefail - - - Browse… - Button for opening file dialog - Sirvi… - - - Generate - Genereeri - Select attachment file Kaasatud faili valimine @@ -3449,10 +3073,6 @@ isegi kui see ei vasta kvaliteedinõuetele. Märgi see ruut, kui parooli keeruku seconds sekundit - - Clear agent - Tühjenda agent - EditGroupWidget @@ -3464,6 +3084,10 @@ isegi kui see ei vasta kvaliteedinõuetele. Märgi see ruut, kui parooli keeruku Icon Ikoon + + Browser Integration + Brauserilõiming + Properties Omadused @@ -3480,10 +3104,6 @@ isegi kui see ei vasta kvaliteedinõuetele. Märgi see ruut, kui parooli keeruku Group has unsaved changes Kas salvestada grupile tehtud muudatused? - - Browser Integration - Brauserilõiming - Enable lubatud @@ -3543,14 +3163,6 @@ isegi kui see ei vasta kvaliteedinõuetele. Märgi see ruut, kui parooli keeruku Omit WWW subdomain from matching toggle for this and sub groups Lülitab vastendamisel www-alamdomeeni eiramist selle grupi ja alamgruppide jaoks. - - Restrict matching to given browser key: - Vastendamine lubatakse vaid ühe brauserivõtmega: - - - Restrict matching to given browser key toggle for this and sub groups - Lülitab vastendamise lubamist vaid ühe brauserivõtmega selle grupi ja alamgruppide jaoks. - EditGroupWidgetKeeShare @@ -3608,7 +3220,7 @@ isegi kui see ei vasta kvaliteedinõuetele. Märgi see ruut, kui parooli keeruku Synchronize - sünkimine + sünkroonimine Your KeePassXC version does not support sharing this container type. @@ -3783,6 +3395,10 @@ Toetatud faililaiendid: %1 Unable to fetch favicon. Saidiikooni allalaadimine polnud võimalik. + + You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security + Võid sisse lülitada DuckDuckGo veebisaidiikoonide teenuse, valides menüüst Tööriistad > Seaded > Turvalisus. + Existing icon selected. Valiti olemasolev ikoon. @@ -3815,10 +3431,6 @@ Toetatud faililaiendid: %1 The following icon(s) failed: Järgmise ikooni laadimine ebaõnnestus:Järgmiste ikoonide laadimine ebaõnnestus: - - You can enable the DuckDuckGo website icon service under Application Settings -> Security - KeePassXC seadete turvalisuse jaotises võid sisse lülitada DuckDuckGo veebisaidiikoonide teenuse. - EditWidgetProperties @@ -3895,24 +3507,6 @@ See võib põhjustada asjaomaste pluginate töös tõrkeid. %1 - Clone %1 – koopia - - Passkey - Pääsuvõti - - - Invalid conversion type: %1 - Vigane teisendustüüp: %1 - - - Invalid conversion syntax: %1 - Vigane teisendussüntaks: %1 - - - Invalid regular expression syntax %1 -%2 - Vigane regulaaravaldise süntaks %1 -%2 - EntryAttachments @@ -3921,21 +3515,6 @@ See võib põhjustada asjaomaste pluginate töös tõrkeid. Faili „%1” avamine pole võimalik - - EntryAttachmentsDialog - - Form - Vorm - - - File name - Faili nimi - - - File contents... - Faili sisu… - - EntryAttachmentsModel @@ -3973,6 +3552,14 @@ See võib põhjustada asjaomaste pluginate töös tõrkeid. Remove Eemalda + + Rename selected attachment + Muuda valitud kaasatud faili nime + + + Rename + Muuda nime + Open selected attachment Ava valitud kaasatud fail @@ -4048,6 +3635,12 @@ See võib põhjustada asjaomaste pluginate töös tõrkeid. Confirm Overwrite Attachment Kaasatud faili ülekirjutamise kinnitus + + Attachment "%1" already exists. +Would you like to overwrite the existing attachment? + Kaasatud fail nimega „%1” on juba olemas. +Kas soovid selle faili uuega üle kirjutada? + Confirm Attachment Faili kaasamise kinnitus @@ -4082,24 +3675,6 @@ Error: %1 Kaasatud faili uuendamine ebaõnnestus. Viga: %1 - - Attachment "%1" already exists. -Would you like to overwrite the existing attachment? - Kaasatud fail nimega „%1” on juba olemas. -Kas soovid selle faili uuega üle kirjutada? - - - New - Uus - - - Preview - Eelvaade - - - Failed to preview an attachment: Attachment not found - Kaasatud faili eelvaate loomine ebaõnnestus: kaasatud faili ei leitud - EntryAttributesModel @@ -4294,14 +3869,6 @@ Kas soovid selle faili uuega üle kirjutada? Has TOTP TOTP olemasolu - - Background Color - Taustavärv - - - Group Path - Grupi asukoht - EntryPreviewWidget @@ -4322,8 +3889,8 @@ Kas soovid selle faili uuega üle kirjutada? Parool: - URL - URL: + Notes + Märkmed: Expiration @@ -4342,8 +3909,8 @@ Kas soovid selle faili uuega üle kirjutada? Kasutajanimi: - Notes - Märkmed: + URL + URL: Advanced @@ -4393,10 +3960,6 @@ Kas soovid selle faili uuega üle kirjutada? Never mitte kunagi - - Double click to copy value - Väärtuse kopeerimiseks tee topeltklõps - Enabled lubatud @@ -4406,8 +3969,8 @@ Kas soovid selle faili uuega üle kirjutada? keelatud - Double click to copy to clipboard - Lõikepuhvrisse kopeerimiseks tee topeltklõps + Double click to copy value + Väärtuse kopeerimiseks tee topeltklõps @@ -4416,10 +3979,6 @@ Kas soovid selle faili uuega üle kirjutada? Invalid URL Sobimatu URL - - Duplicate URL - Duplitseeritud URL - EntryView @@ -4435,10 +3994,6 @@ Kas soovid selle faili uuega üle kirjutada? Reset to defaults Taasta vaikeväärtused - - + %1 entry(s)... - + %1 kirje...+ %1 kirjet... - ExportDialog @@ -4472,7 +4027,7 @@ See jätab su paroolid jm tundliku teabe kaitseta! unknown - teadmata alusel + teadmata Export database to HTML file @@ -4659,199 +4214,6 @@ You can enable the DuckDuckGo website icon service in the security section of th Saidiikoonide allalaadimine (%1/%2)… - - ImportWizard - - Import Wizard - Impordinõustaja - - - - ImportWizardPageReview - - WizardPage - Nõustaja - - - Entry count: %1 - Kirjete arv: %1 - - - Group - Grupp - - - Title - Pealkiri - - - Username - Kasutajanimi - - - Password - Parool - - - Url - URL - - - Could not load key file. - Võtmefaili ei õnnestunud laadida. - - - Could not open remote database. Password or key file may be incorrect. - Võrguandmebaasi ei õnnestunud avada. Küllap oli parool või võtmefail vale. - - - - ImportWizardPageSelect - - Form - Vorm - - - Import File Selection - Imporditava faili valimine - - - Password: - Parool: - - - Key File: - Võtmefail: - - - Browse… - Sirvi… - - - Import Into: - Imporditakse: - - - New Database - Uude andmebaasi - - - No unlocked databases available - Ühtegi avatud lukuga andmebaasi pole saadaval. - - - Existing Database: - Olemasolevasse andmebaasi: - - - Import File: - Imporditav fail: - - - Comma Separated Values (.csv) - Komaga eraldatud väärtused (.csv) - - - 1Password Export (.1pux) - 1Passwordi eksport (.1pux) - - - 1Password Vault (.opvault) - 1Passwordi turvalaegas (.opvault) - - - Bitwarden (.json) - Bitwarden (.json) - - - KeePass 1 Database (.kdb) - KeePass 1 andmebaas (.kdb) - - - Open OPVault - OPVaulti avamine - - - Select import file - Imporditava faili valimine - - - All files - Kõik failid - - - Key files - Võtmefailid - - - Select key file - Võtmefaili valimine - - - Comma Separated Values - Komaga eraldatud väärtused - - - 1Password Export - 1Passwordi eksport - - - Bitwarden JSON Export - Bitwardeni JSON-eksport - - - 1Password Vault - 1Passwordi turvalaegas - - - KeePass1 Database - KeePass 1 andmebaas - - - Proton Pass (.json) - Proton Pass (.json) - - - Proton Pass JSON Export - Proton Passi JSON-eksport - - - Temporary Database - Ajutisse andmebaasi - - - Command: - Käsk: - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - nt „sftp kasutaja@masinanimi” või „scp kasutaja@masinanimi:Andmebaas_kaugarvutis.kdbx {TEMP_DATABASE}” - - - Input: - Sisend: - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last commend `exit` has to be sent - - nt: -get Andmebaas_kaugarvutis.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} on kohahoidja, mis tähistab ajutisse asukohta salvestatud andmebaasi. -Käsk peab oma töö lõpetama, nt „sftp” puhul peab viimane saadetav käsk olema „exit”. - - - - Remote Database (.kdbx) - Andmebaas võrgus (.kdbx) - - KMessageWidget @@ -5286,6 +4648,17 @@ Rida %2, veerg %3 Privaatvõtme avamine ebaõnnestus. + + KeePass1OpenWidget + + Import KeePass1 Database + KeePass 1 andmebaasi importimine + + + Unable to open the database. + Andmebaasi avamine pole võimalik. + + KeePass1Reader @@ -5464,7 +4837,7 @@ Kui probleem püsib, võib andmebaasifail olla rikutud. Synchronized with %1 - Süngitud asukohaga „%1” + Sünkroonitud asukohaga „%1” Import is disabled in settings @@ -5488,7 +4861,7 @@ Kui probleem püsib, võib andmebaasifail olla rikutud. Synchronized with - Süngitud asukohaga + Sünkroonitud asukohaga @@ -5642,6 +5015,10 @@ Kas oled kindel, et soovid selle failiga jätkata? &Recent Databases Viimatised andme&baasid + + &Import + &Impordi + &Export &Ekspordi @@ -5662,10 +5039,6 @@ Kas oled kindel, et soovid selle failiga jätkata? TOTP &TOTP - - Tags - Sildid - &Groups &Grupid @@ -5710,18 +5083,34 @@ Kas oled kindel, et soovid selle failiga jätkata? &New Database… &Uus andmebaas… + + Create a new database + Loo uus andmebaas + &Merge From Database… &Mesti andmebaas… + + Merge from another KDBX database + Mesti mõne teise KDBX-andmebaasiga + &New Entry… &Uus kirje… + + Add a new entry + Lisa uus kirje + &Edit Entry… &Muuda kirjet… + + View or edit entry + Vaata või muuda kirjet + &Delete Entry… Kustuta kirj&e… @@ -5730,6 +5119,10 @@ Kas oled kindel, et soovid selle failiga jätkata? &New Group… &Uus grupp… + + Add a new group + Lisa uus grupp + &Edit Group… &Muuda gruppi… @@ -5762,10 +5155,18 @@ Kas oled kindel, et soovid selle failiga jätkata? Database &Reports… Andmebaasi a&ruanded… + + Statistics, health check, etc. + Statistika, tervisekontroll jm + &Database Settings… An&dmebaasi seaded… + + Database settings + Andmebaasi seaded + &Clone Entry… K&looni kirje… @@ -5774,18 +5175,34 @@ Kas oled kindel, et soovid selle failiga jätkata? Move u&p Lii&guta ülespoole + + Move entry one step up + Liiguta kirje sammu võrra ülespoole + Move do&wn Liiguta allap&oole + + Move entry one step down + Liiguta kirje sammu võrra allapoole + Copy &Username Kopeeri &kasutajanimi + + Copy username to clipboard + Kopeeri kasutajanimi lõikepuhvrisse + Copy &Password Kopeeri &parool + + Copy password to clipboard + Kopeeri parool lõikepuhvrisse + &Settings &Seaded @@ -5819,13 +5236,21 @@ Kas oled kindel, et soovid selle failiga jätkata? &Pealkiri - Copy &URL - K&opeeri URL + Copy title to clipboard + Kopeeri pealkiri lõikepuhvrisse + + + Copy URL to clipboard + Kopeeri URL lõikepuhvrisse &Notes &Märkmed + + Copy notes to clipboard + Kopeeri märkmed lõikepuhvrisse + &CSV File… &CSV-failiks… @@ -5838,21 +5263,33 @@ Kas oled kindel, et soovid selle failiga jätkata? KeePass 1 Database… KeePass 1 andmebaas… + + Import a KeePass 1 database + Impordi KeePass 1 andmebaas + 1Password Vault… 1Passwordi turvalaegas… + + Import a 1Password Vault + Impordi 1Passwordi turvalaegas + CSV File… CSV-fail… + + Import a CSV file + Impordi CSV-fail + Show TOTP Kuva TOTP Show QR Code - Kuva ruutkood + Kuva QR-kood Set up TOTP… @@ -5862,10 +5299,6 @@ Kas oled kindel, et soovid selle failiga jätkata? Copy &TOTP Kopeeri &TOTP - - Copy Password and TOTP - Kopeeri parool ja TOTP - E&mpty recycle bin &Tühjenda prügikast @@ -5890,6 +5323,10 @@ Kas oled kindel, et soovid selle failiga jätkata? &Online Help Abi &võrgus + + Go to online documentation + Ava dokumentatsioon võrgus + &User Guide Käsi&raamat… @@ -5934,10 +5371,6 @@ Kas oled kindel, et soovid selle failiga jätkata? Classic (Platform-native) Klassikaline (platvormiomane) - - Show Menubar - &Menüüriba nähtaval - Show Toolbar &Tööriistariba nähtaval @@ -5962,10 +5395,6 @@ Kas oled kindel, et soovid selle failiga jätkata? Clone Group... K&looni grupp… - - &XML File… - &XML-failiks… - Clear history Puhasta ajalugu @@ -5994,8 +5423,10 @@ Expect some bugs and minor issues, this version is meant for testing purposes. - No Tags - Silte pole + 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. + HOIATUS: sinu Qt versioon võib põhjustada KeePassXC kokkujooksmist ekraaniklaviatuuri kasutamisel. +Võiksid kaaluda KeePassXC allalaadimislehel oleva AppImage’i kasutamist. Restore Entry(s) @@ -6025,10 +5456,6 @@ Eeldatavasti leidub selles programmivigu ja muid väiksemaid hädasid – see ve Quit KeePassXC Välju KeePassXC-st - - %1 Entry(s) - %1 kirje%1 kirjet - Please present or touch your YubiKey to continue… Jätkamiseks viipa või puuduta oma YubiKey’d… @@ -6041,313 +5468,37 @@ Eeldatavasti leidub selles programmivigu ja muid väiksemaid hädasid – see ve You must restart the application to apply this setting. Would you like to restart now? Selle muudatuse rakendamiseks tuleb KeePassXC uuesti käivitada. Kas teha seda kohe? + + Tags + Sildid + + + No Tags + Silte pole + + + %1 Entry(s) + %1 kirje%1 kirjet + + + Copy Password and TOTP + Kopeeri parool ja TOTP + + + &XML File… + &XML-failiks… + + + XML File… + XML-failiks… + + + Copy &URL + K&opeeri URL + Allow Screen Capture - Akna pildistamise lubamine - - - 1Password 1PUX... - 1Passwordi 1PUX... - - - Import a 1Password 1PUX file - Impordi 1Passwordi 1PUX-fail - - - Import… - Impordi… - - - Passkeys… - Pääsuvõtmed... - - - Import Passkey - Impordi pääsuvõti - - - Remote S&ync… - Sünkimine... - - - Quit Application - Välju rakendusest - - - Open About Dialog - Ava rakenduse teabedialoog - - - Open Database - Ava andmebaas - - - Create Database - Loo andmebaas - - - Merge From Database - Mesti andmebaas - - - Create Entry - Loo kirje - - - Edit Entry - Muuda kirjet - - - Delete Entry - Kustuta kirje - - - Create Group - Loo grupp - - - Edit Group - Muuda gruppi - - - Delete Group - Kustuta grupp - - - Download All Favicons - Laadi alla kõigi saitide ikoonid - - - Sort Groups A-Z - Sordi grupid A-st Y-ni - - - Sort Groups Z-A - Sordi grupid Y-st A-ni - - - Save Database As - Salvesta andmebaas kui - - - Show Database Security - Kuva andmebaasi turvalisus - - - Show Database Reports - Kuva andmebaasi aruanded - - - Show Database Settings - Kuva andmebaasi seaded - - - Show Passkeys - Kuva pääsuvõtmed - - - Clone Entry - Klooni kirje - - - Move Entry Up - Liiguta kirje ülespoole - - - Move Entry Down - Liiguta kirje allapoole - - - Copy Username - Kopeeri kasutajanimi - - - Copy Password - Kopeeri parool - - - Show Application Settings - Kuva rakenduse seaded - - - Show Password Generator - Kuva parooligeneraator - - - Remove Passkey From Entry - Eemalda kirjelt pääsuvõti - - - Perform Auto-Type: {USERNAME} - Soorita automaatsisestus: {USERNAME} - - - Perform Auto-Type: {USERNAME}{ENTER} - Soorita automaatsisestus: {USERNAME}{ENTER} - - - Perform Auto-Type: {PASSWORD} - Soorita automaatsisestus: {PASSWORD} - - - Perform Auto-Type: {PASSWORD}{ENTER} - Soorita automaatsisestus: {PASSWORD}{ENTER} - - - Perform Auto-Type: {TOTP} - Soorita automaatsisestus: {TOTP} - - - Copy Title - Kopeeri pealkiri - - - Copy URL - Kopeeri URL - - - Copy Notes - Kopeeri märkmed - - - Export to CSV - Ekspordi CSV-failiks - - - Export to HTML - Ekspordi HTML-failiks - - - Import KeePass1 Database - Impordi KeePass 1 andmebaas - - - Import 1Password Vault - Impordi 1Passwordi turvalaegas - - - Import CSV File - Impordi CSV-fail - - - Show TOTP QR Code - Kuva TOTP ruutkood - - - Set up TOTP - Seadista TOTP - - - Empty Recycle Bin - Tühjenda prügikast - - - Open Donation Website - Ava annetusveebileht - - - Open Bug Report - Teata veast - - - Open Online Documentation - Ava dokumentatsioon võrgus - - - Open Keyboard Shortcuts Guide - Ava kiirklahvide juhis - - - Save Database Backup - Salvesta andmebaasi varukoopia - - - SSH Agent: Add Key - SSH agent: lisa võti - - - SSH Agent: Remove Key - SSH agent: eemalda võti - - - Toggle Compact Mode - Lülita kompaktset režiimi - - - Set Theme: Automatic - Rakenda kujundus: automaatne - - - Set Theme: Light - Rakenda kujundus: hele - - - Set Theme: Dark - Rakenda kujundus: tume - - - Set Theme: Classic - Rakenda kujundus: klassikaline - - - Toggle Show Menubar - Lülita menüüriba nähtavust - - - Toggle Show Toolbar - Lülita tööriistariba nähtavust - - - Toggle Show Preview Panel - Lülita eelvaatluse paneeli nähtavust - - - Toggle Always on Top - Lülita alati pealmisena hoidmist - - - Toggle Hide Usernames - Lülita kasutajanimede varjamist - - - Toggle Hide Passwords - Lülita paroolide varjamist - - - Export to XML - Ekspordi XML-failiks - - - Toggle Allow Screen Capture - Lülita akna pildistamise lubamist - - - Show Group Panel - Gruppide paneel nähtaval - - - Toggle Show Group Panel - Lülita gruppide paneeli nähtavust - - - Setup Remote Sync… - Seadista sünkimine... - - - Password Generator - Parooligeneraator - - - E&xpire Entry… - Märgi kirje &aegunuks… - - - Clear SSH Agent - Tühjenda SSH agent - - - Clear all identities in ssh-agent - Eemalda SSH agendilt kõik identiteedid + @@ -6406,13 +5557,33 @@ Eeldatavasti leidub selles programmivigu ja muid väiksemaid hädasid – see ve Overwriting %1 [%2] Kirje „%1” [%2] ülekirjutamine + + older entry merged from database "%1" + andmebaasist „%1” mestitud vanem kirje + + + Adding backup for older target %1 [%2] + Vanemale sihtmärgile „%1” [%2] varukoopia lisamine + + + Adding backup for older source %1 [%2] + Vanemale allikale „%1” [%2] varukoopia lisamine + + + Reapplying older target entry on top of newer source %1 [%2] + Uuema lähtekirje „%1” [%2] peale vanema sihtkirje taasrakendamine + + + Reapplying older source entry on top of newer target %1 [%2] + Uuema sihtkirje „%1” [%2] peale vanema lähtekirje taasrakendamine + Synchronizing from newer source %1 [%2] - Sünkimine uuema allikaga „%1” [%2] + Sünkroonimine uuema allikaga „%1” [%2] Synchronizing from older source %1 [%2] - Sünkimine vanema allikaga „%1” [%2] + Sünkroonimine vanema allikaga „%1” [%2] Deleting child %1 [%2] @@ -6465,6 +5636,14 @@ Eeldatavasti leidub selles programmivigu ja muid väiksemaid hädasid – see ve Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. Siin saab määrata andmebaasi krüptimisseaded. Hiljem saab neid muuta andmebaasi seadetes. + + Advanced Settings + Täpsemad seaded + + + Simple Settings + Lihtsad seaded + NewDatabaseWizardPageDatabaseKey @@ -6499,25 +5678,6 @@ Eeldatavasti leidub selles programmivigu ja muid väiksemaid hädasid – see ve Sisesta oma uuele andmebaasile kuvanimi ja soovi korral kirjeldus: - - NewEntryAttachmentsDialog - - Attachment name cannot be empty - Kaasatud faili nimi ei saa olla tühi. - - - Attachment with the same name already exists - Sellise nimega kaasatud fail on juba olemas. - - - Save attachment - Kaasatud faili salvestamine - - - New entry attachment - Uus kaasatud fail - - NixUtils @@ -6564,6 +5724,15 @@ Eeldatavasti leidub selles programmivigu ja muid väiksemaid hädasid – see ve oodati %1 baiti lihtteksti, aga leiti %2 + + OpVaultOpenWidget + + Read Database did not produce an instance +%1 + Andmebaasi lugemine ei loonud protsessi +%1 + + OpVaultReader @@ -6637,10 +5806,6 @@ Eeldatavasti leidub selles programmivigu ja muid väiksemaid hädasid – see ve Unknown cipher: %1 Tundmatu šiffer: %1 - - AES-256/GCM is currently not supported - AES-256/GCM-i praegu ei toetata - Passphrase is required to decrypt this key Selle võtme lahtikrüptimiseks on vaja paroolifraasi @@ -6706,182 +5871,8 @@ Eeldatavasti leidub selles programmivigu ja muid väiksemaid hädasid – see ve Ootamatu faililõpp privaatvõtme kirjutamisel - (encrypted) - (krüptitud) - - - - OpenSSHKeyGenDialog - - SSH Key Generator - SSH-võtmegeneraator - - - Type - Tüüp: - - - Bits - Bittide arv: - - - Comment - Kommentaar: - - - - PasskeyExportDialog - - KeePassXC - Passkey Export - Pääsuvõtme eksportimine – KeePassXC - - - Filenames will be generated with title and .passkey file extension. - Failinimed luuakse pealkirja järgi ja faililaiendiga „.passkey”. - - - Export entries - Ekspordi valitud kirjed - - - Export Selected - Ekspordi valitud - - - Cancel - Loobu - - - Export to folder - Eksportimiskaust - - - Export the following passkey entries. - Eksportimisel on järgnevad pääsuvõtmekirjed. - - - - PasskeyExporter - - KeePassXC: Passkey Export - Pääsuvõtme eksportimine – KeePassXC - - - File "%1.passkey" already exists. -Do you want to overwrite it? - - Fail „%1.passkey” on juba olemas. -Kas soovid selle üle kirjutada? - - - Cannot open file - Faili pole võimalik avada - - - Cannot open file "%1" for writing. - Faili „%1” pole võimalik kirjutamiseks avada. - - - Cannot write to file - Faili pole võimalik kirjutada - - - - PasskeyImportDialog - - KeePassXC - Passkey Import - Pääsuvõtme importimine – KeePassXC - - - Username: %1 - Kasutajanimi: %1 - - - Group - Grupp: - - - Database - Andmebaas: - - - Import Passkey - Impordi pääsuvõti - - - Import - Impordi - - - Cancel - Loobu - - - Entry - Kirje: - - - Create new entry - Luuakse uus kirje - - - Relying Party: %1 - Sõltlane: %1 - - - Import the following passkey: - Importimisel on järgnev pääsuvõti: - - - Import the following passkey to this entry: - Importimisel on järgnev pääsuvõti sellesse kirjesse: - - - Default passkeys group (Imported Passkeys) - Vaikimisi pääsuvõtmete grupp („Imporditud pääsuvõtmed”) - - - - PasskeyImporter - - Passkey file - Pääsuvõtmefailid - - - All files - Kõik failid - - - Cannot open file - Faili avamine pole võimalik - - - Cannot open file "%1" for reading. - Faili „%1” lugemiseks avamine pole võimalik. - - - Open passkey file - Pääsuvõtmefaili avamine - - - Cannot import passkey - Pääsuvõtme importimine pole võimalik - - - Cannot import passkey file "%1". Data is missing. - Pääsuvõtmefaili „%1” importimine pole võimalik. Andmed on puudu. - - - Cannot import passkey file "%1". -The following data is missing: -%2 - Pääsuvõtmefaili „%1” importimine pole võimalik. -Järgmised andmed on puudu: -%2 - - - Cannot import passkey file "%1". Private key is missing or malformed. - Pääsuvõtmefaili „%1” importimine pole võimalik. Privaatvõti on puudu või vigane. + AES-256/GCM is currently not supported + AES-256/GCM-i praegu ei toetata @@ -7086,6 +6077,10 @@ Järgmised andmed on puudu: Word Count: Sõnade arv: + + Character Count: + Märkide arv: + Word Case: Täheregister: @@ -7098,6 +6093,10 @@ Järgmised andmed on puudu: Add custom wordlist Lisa kohandatud sõnaloend + + character + märki + Close Sulge @@ -7134,30 +6133,6 @@ Järgmised andmed on puudu: Entropy: %1 bit Entroopia: %1 bitti - - Password Quality: %1 - Parooli kvaliteet: %1 - - - Poor - Password quality - kehv - - - Weak - Password quality - nõrk - - - Good - Password quality - hea - - - Excellent - Password quality - suurepärane - Confirm Delete Wordlist Sõnaloendi kustutamise kinnitus @@ -7205,20 +6180,32 @@ Kas soovid selle üle kirjutada? Erimärgid - passwordLength - parooli_pikkus + Password Quality: %1 + Parooli kvaliteet: %1 - Characters: %1 - Märkide arv: %1 + Poor + Password quality + kehv - MIXED case - MÕLEMAD vaheldumisi + Weak + Password quality + nõrk - Excluded characters: "0", "1", "l", "I", "O", "|", "﹒", "B", "8", "G", "6" - Määrab, kas välistada märgid nagu „0”, „O”, „1”, „l”, „I”, „|”, „﹒”, „B”, „8”, „G”, „6” + Good + Password quality + hea + + + Excellent + Password quality + suurepärane + + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + Määrab, kas välistada märgid nagu „0”, „O”, „1”, „l”, „I”, „|”, „﹒” @@ -7268,8 +6255,8 @@ Kas soovid selle üle kirjutada? suurepärane - Toggle password visibility using Control + H. Open the password generator using Control + G. - Parooli nähtavust lülitab Control + H, parooligeneraatori avab Control + G. + Toggle password visibilty using Control + H. Open the password generator using Control + G. + @@ -7287,21 +6274,6 @@ Kas soovid selle üle kirjutada? Märkide vahel „vajutatakse” &tabeldusklahvi - - PreviewEntryAttachmentsDialog - - Preview entry attachment - Kaasatud faili eelvaade - - - No preview available - Eelvaade pole saadaval - - - Image format not supported - Toetamata pildivorming - - QMessageBox @@ -7340,10 +6312,6 @@ Kas soovid selle üle kirjutada? Continue &Jätka - - Continue with weak password - Jätka nõrga parooliga - QObject @@ -7737,10 +6705,6 @@ Kas soovid selle üle kirjutada? Too many arguments provided. Anti liiga palju argumente. - - Path of the database. - Andmebaasi asukoht. - Target decryption time in MS for the database. Andmebaasi soovitav lahtikrüptimisaeg millisekundites. @@ -7761,6 +6725,10 @@ Kas soovid selle üle kirjutada? Create a new database. Uue andmebaasi loomine. + + Path of the database. + Andmebaasi asukoht. + Invalid decryption time %1. Sobimatu lahtikrüptimise aeg %1 @@ -7805,158 +6773,6 @@ Kas soovid selle üle kirjutada? Successfully created new database. Uus andmebaas edukalt loodud. - - Unset the password for the database. - Andmebaasi parooli eemaldamine. - - - Unset the key file for the database. - Andmebaasi võtmefaili eemaldamine. - - - Edit a database. - Andmebaasi muutmine. - - - Cannot use %1 and %2 at the same time. - Argumente "%1" ja "%2" ei saa korraga kasutada. - - - Could not change the database key. - Andmebaasi võtme muutmine pole võimalik. - - - Database was not modified. - Andmebaasi ei muudetud. - - - Writing the database failed: %1 - Andmebaasi kirjutamine ebaõnnestus: %1 - - - Successfully edited the database. - Andmebaas edukalt muudetud. - - - Cannot remove password: The database does not have a password. - Parooli pole võimalik eemaldada, kuna andmebaasile pole parooli määratud. - - - Cannot remove file key: The database does not have a file key. - Võtmefaili pole võimalik eemaldada, kuna andmebaasile pole võtmefaili määratud. - - - Loading the new key file failed: %1 - Uue võtmefaili laadimine ebaõnnestus: %1 - - - Found unexpected Key type %1 - Leiti ootamatu võtmetüüp: %1 - - - Cannot remove all the keys from a database. - Andmebaasi kõiki võtmeid pole võimalik eemaldada. - - - Show a database's information. - Andmebaasi teabe näitamine. - - - UUID: - UUID: - - - Name: - Nimi: - - - Description: - Kirjeldus: - - - Cipher: - Šiffer: - - - KDF: - KDF: - - - Recycle bin is enabled. - Prügikast on lubatud - - - Recycle bin is not enabled. - Prügikast on keelatud. - - - Location - Asukoht - - - Database created - Andmebaas loodud - - - Last saved - Viimati salvestatud - - - Unsaved changes - Salvestamata muudatusi - - - yes - on - - - no - pole - - - Number of groups - Gruppide arv - - - Number of entries - Kirjete arv - - - Number of expired entries - Aegunud kirjete arv - - - Unique passwords - Unikaalsete paroolide arv - - - Non-unique passwords - Korduvate paroolide arv - - - Maximum password reuse - Sagedasima parooli kasutuskordade arv - - - Number of short passwords - Lühikeste paroolide arv - - - Number of weak passwords - Nõrkade paroolide arv - - - Entries excluded from reports - Aruannetest väljajäetavate kirjete arv - - - Average password length - Paroolide keskmine pikkus - - - %1 characters - %1 märki - Word count for the diceware passphrase. Sõnade arv Diceware'i paroolifraasis. @@ -7980,6 +6796,10 @@ Kas soovid selle üle kirjutada? Invalid word count %1 Sobimatu sõnade arv %1 + + The word list is too small (< 1000 items) + Sõnaloend on liiga väike (< 1000 elementi) + Title for the entry. Kirje pealkiri @@ -8004,6 +6824,10 @@ Kas soovid selle üle kirjutada? Enter new password for entry: Sisesta kirje uus parool: + + Writing the database failed: %1 + Andmebaasi kirjutamine ebaõnnestus: %1 + Successfully edited entry %1. Kirje "%1" edukalt muudetud. @@ -8124,6 +6948,10 @@ Kas soovid selle üle kirjutada? Exit interactive mode. Väljumine interaktiivsest režiimist. + + Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. + Eksportimisel kasutatav vorming. Valida on "xml" ja "csv". Vaikimisi "xml". + Exports the content of a database to standard output in the specified format. Andmebaasi sisu määratavas vormingus standardväljundisse eksportimine. @@ -8224,6 +7052,106 @@ Kas soovid selle üle kirjutada? Successfully imported database. Andmebaas edukalt imporditud. + + Show a database's information. + Andmebaasi teabe näitamine. + + + UUID: + UUID: + + + Name: + Nimi: + + + Description: + Kirjeldus: + + + Cipher: + Šiffer: + + + KDF: + KDF: + + + Recycle bin is enabled. + Prügikast on lubatud + + + Recycle bin is not enabled. + Prügikast on keelatud. + + + Location + Asukoht + + + Database created + Andmebaas loodud + + + Last saved + Viimati salvestatud + + + Unsaved changes + Salvestamata muudatusi + + + yes + on + + + no + pole + + + Number of groups + Gruppide arv + + + Number of entries + Kirjete arv + + + Number of expired entries + Aegunud kirjete arv + + + Unique passwords + Unikaalsete paroolide arv + + + Non-unique passwords + Korduvate paroolide arv + + + Maximum password reuse + Sagedasima parooli kasutuskordade arv + + + Number of short passwords + Lühikeste paroolide arv + + + Number of weak passwords + Nõrkade paroolide arv + + + Entries excluded from reports + Aruannetest väljajäetavate kirjete arv + + + Average password length + Paroolide keskmine pikkus + + + %1 characters + %1 märki + Unknown command %1 Tundmatu käsk %1 @@ -8396,10 +7324,6 @@ Võimalikud käsud: Show the protected attributes in clear text. Kaitstud atribuutide näitamine tavatekstina. - - Show all the attributes of the entry. - Kirje kõigi atribuutide näitamine. - Show the attachments of the entry. Kirjesse kaasatud faili näitamine. @@ -8470,10 +7394,6 @@ Palun genereeri selle asemele uus võtmefail. Invalid YubiKey serial %1 Sobimatu YubiKey seerianumber %1 - - Please present or touch your YubiKey to continue. - Jätkamiseks viipa või puuduta oma YubiKey’d. - Enter password to encrypt database (optional): Sisesta parool andmebaasi krüptimiseks (pole kohustuslik): @@ -8662,7 +7582,7 @@ Kernel: %3 %4 Botan library must be at least %1, found %2.%3.%4 - Botan'i teek peab olema %1 või uuem, leiti aga %2.%3.%4 + Cryptographic libraries: @@ -8712,6 +7632,18 @@ Kernel: %3 %4 file empty fail on tühi + + malformed string + vigane string + + + missing closing quote + puuduv lõpujutumärk + + + %1: (row, col) %2,%3 + %1: (rida, veerg) %2,%3 + AES 256-bit AES: 256-bitine @@ -8890,6 +7822,14 @@ Kernel: %3 %4 read password of the database from stdin Andmebaasi parooli lugemine standardsisendist (stdin). + + allow app screen recordering and screenshots + Rakendusest ekraanipiltide ja -videote tegemise lubamine. + + + Locked databases. + Andmebaasid lukustatud. + Database failed to lock. Andmebaasi lukustamine ebaõnnestus. @@ -8898,10 +7838,6 @@ Kernel: %3 %4 Another instance of KeePassXC is already running. Teine KeePassXC protsess juba töötab. - - KeePassXC is not running. No open database to lock - KeePassXC ei tööta, seega pole ühtki avatud andmebaasi, mida lukustada. - Fatal error while testing the cryptographic functions. Parandamatu tõrge krüptograafiafunktsioonide testimisel. @@ -8934,311 +7870,81 @@ Kernel: %3 %4 Warning: Failed to block screenshot capture on a top-level window. - Hoiatus: ülemise taseme aknast ekraanipiltide tegemise blokeerimine ebaõnnestus! + Invalid Cipher - Sobimatu šiffer + Invalid KDF - Sobimatu KDF + - Access to all entries is denied - Juurdepääs kõigile kirjetele on keelatud + Please present or touch your YubiKey to continue. + Jätkamiseks viipa või puuduta oma YubiKey’d. - allow screenshots and app recording (Windows/macOS) - Rakendusest ekraanipiltide ja -videote tegemise lubamine (Windowsis/macOS-is). + Show all the attributes of the entry. + Kirje kõigi atribuutide näitamine. + + + Edit a database. + Andmebaasi muutmine. + + + Could not change the database key. + Andmebaasi võtme muutmine pole võimalik. + + + Database was not modified. + Andmebaasi ei muudetud. + + + Successfully edited the database. + Andmebaas edukalt muudetud. + + + Loading the new key file failed: %1 + Uue võtmefaili laadimine ebaõnnestus: %1 + + + Unset the password for the database. + Andmebaasi parooli eemaldamine. + + + Unset the key file for the database. + Andmebaasi võtmefaili eemaldamine. + + + Cannot use %1 and %2 at the same time. + Argumente "%1" ja "%2" ei saa korraga kasutada. + + + Cannot remove all the keys from a database. + Andmebaasi kõiki võtmeid pole võimalik eemaldada. + + + Cannot remove password: The database does not have a password. + Parooli pole võimalik eemaldada, kuna andmebaasile pole parooli määratud. + + + Cannot remove file key: The database does not have a file key. + Võtmefaili pole võimalik eemaldada, kuna andmebaasile pole võtmefaili määratud. + + + Found unexpected Key type %1 + Leiti ootamatu võtmetüüp: %1 Set the key file for the database. -This option is deprecated, use --set-key-file instead. +This options is deprecated, use --set-key-file instead. Andmebaasile võtmefaili määramine. See argument on iganenud, kasuta parem "--set-key-file". - Databases have been locked. - Andmebaasid on lukustatud. - - - Attestation not supported - Atesteerimist ei toetata - - - Credential is excluded - Tunnus on välistatud - - - Passkeys request canceled - Pääsuvõtmetaotlus tühistati - - - Invalid user verification - Sobimatu kasutaja verifitseerimine - - - Empty public key - Tühi avalik võti - - - Invalid URL provided - Anti sobimatu URL - - - Passkeys - Pääsuvõtmed - - - AES initialization failed - AES-i initsialiseerimine ebaõnnestus - - - AES encrypt failed - AES-i krüptimine ebaõnnestus - - - Failed to store in Linux Keyring - Salvestamine Linuxi võtmerõngasse ebaõnnestus - - - Polkit returned an error: %1 - Polkit andis veateate: %1 - - - Could not locate key in keyring - Võtmerõngast ei leitud võtit - - - Could not read key in keyring - Võtmerõngast polnud võimalik võtit lugeda - - - AES decrypt failed - AES-i lahtikrüptimine ebaõnnestus - - - No Polkit authentication agent was available - Ühtegi Polkiti autentimisagenti polnud saadaval. - - - Polkit authorization failed - Polkiti autentimine ebaõnnestus - - - No Quick Unlock provider is available - Ühtegi kiiresti luku avamise teenust pole saadaval. - - - Failed to init KeePassXC crypto. - KeePassXC krüptograafia initsialiseerimine ebaõnnestus. - - - Failed to encrypt key data. - Võtme andmete krüptimine ebaõnnestus. - - - Failed to get Windows Hello credential. - Windows Hello tunnuse hankimine ebaõnnestus. - - - Failed to decrypt key data. - Võtme andmete lahtikrüptimine ebaõnnestus. - - - Origin is empty or not allowed - Lähtedomeen on tühi või lubamatu - - - Effective domain is not a valid domain - Kehtiv domeen pole korrektne domeen - - - Origin and RP ID do not match - Lähtedomeeni ja sõltlase ID ei klapi - - - No supported algorithms were provided - Toetatud algoritme ei antud - - - Wait for timer to expire - Oota taimeri aegumist - - - Challenge is shorter than required minimum length - Pretensioon on lühem kui nõutav miinimumpikkus - - - user.id does not match the required length - „user.id” ei vasta nõutavale pikkusele - - - Favorite - Tag for favorite entries - Lemmik - - - File does not exist. - Faili pole olemas. - - - Cannot open file: %1 - Faili pole võimalik avada: %1 - - - Cannot parse file: %1 at position %2 - Faili pole võimalik parsida: %1 asukohas %2 - - - Failed to decrypt json file: %1 - JSON-faili lahtikrüptimine ebaõnnestus: %1 - - - Invalid encKeyValidation field - sobimatu väli „encKeyValidation” - - - Invalid cipher list within encKeyValidation field - sobimatu šifriloend väljal „encKeyValidation” - - - Wrong password - vale parool - - - Invalid encrypted data field - sobimatu krüptitud andmeväli - - - Invalid cipher list within encrypted data field - sobimatu šifriloend krüptitud andmeväljal - - - Cannot initialize cipher - šifri initsialiseerimine ebaõnnestus - - - Cannot decrypt data - andmete lahtikrüptimine pole võimalik - - - Bitwarden Import - Bitwardenist imporditud - - - Archived - Tag for archived entries - Arhiivitud - - - Invalid 1PUX file format: Not a valid ZIP file. - Sobimatu 1PUX-faili vorming: pole korrektne ZIP-fail. - - - Invalid 1PUX file format: Missing export.data - Sobimatu 1PUX-faili vorming: „export.data” puudub. - - - 1Password Import - 1Passwordist imporditud - - - Enter Shortcut - Sisesta kiirklahv: - - - Action - Toiming - - - Shortcuts - Kiirklahvid - - - Unknown passkeys error - Tundmatu tõrge pääsuvõtmega - - - Invalid KDF iterations, cannot decrypt json file - Sobimatu KDF-i iteratsioonide arv, JSON-faili lahtikrüptimine pole võimalik - - - Unsupported format, ensure your Bitwarden export is password-protected - Toetamata vorming, vaata, et Bitwardeni eksport oleks parooliga kaitstud - - - Only PBKDF and Argon2 are supported, cannot decrypt json file - Toetatud on ainult PBKDF ja Argon2, JSON-faili lahtikrüptimine pole võimalik - - - Reset Shortcuts - Lähtesta kiirklahvid - - - Double click an action to change its shortcut - Kiirklahvi muutmiseks tee vastaval real topeltklõps. - - - Filter... - Filter… - - - Shortcut Conflict - Kiirklahvide konflikt - - - Shortcut %1 conflicts with '%2'. Overwrite shortcut? - Kiirklahviga %1 on juba seotud toiming „%2”. Kas soovid selle üle kirjutada? - - - Cannot generate valid passphrases because the wordlist is too short - Sobivaid paroolifraase pole võimalik genereerida, kuna sõnaloend on liiga lühike - - - Encrypted files are not supported. - Krüptitud faile ei toetata - - - Proton Pass Import - Proton Passist imporditud - - - Delete plugin data? - Plugina andmete kustutamise kinnitus - - - Delete plugin data from Entry(s)? - Kas kustutada kirjest plugina andmed?Kas kustutada kirjetest plugina andmed? - - - Passkey - Pääsuvõti - - - Format to use when exporting. Available choices are 'xml', 'csv' or 'html'. Defaults to 'xml'. - Eksportimisel kasutatav vorming. Valikus on „xml“, „csv“ ja „html“. Vaikimisi vorming on „xml“. - - - start minimized to the system tray - Käivitamine süsteemisalve minimeerituna. - - - malformed string, possible unescaped delimiter - vigases vormis sõne, võimalik mitteeemaldatud eraldaja - - - missing closing delimiter - lõpetav eraldaja on puudu - - - %1, row: %2, column: %3 - %1, rida: %2, veerg: %3 - - - Tags - Sildid + KeePassXC is not running. No open database to lock + KeePassXC ei tööta, seega pole ühtki avatud andmebaasi, mida lukustada. @@ -9275,39 +7981,20 @@ See argument on iganenud, kasuta parem "--set-key-file". Sisemine zlib-i tõrge: - - RemoteHandler - - Command `%1` did not finish in time. Process was killed. - Käsk „%1” ei lõpetanud tööd mõistliku aja jooksul. Protsess lõpetati sunniviisiliselt. - - - Failed to upload merged database. Command `%1` did not finish in time. Process was killed. - Mestitud andmebaasi üleslaadmine ebaõnnestus. Käsk „%1” ei lõpetanud tööd mõistliku aja jooksul. Protsess lõpetati sunniviisiliselt. - - - Invalid download parameters provided. - Anti sobimatud allalaadimisparameetrid. - - - Command `%1` failed to download database. - Käsul „%1” ei õnnestunud andmebaasi alla laadida. - - - Invalid database pointer or upload parameters provided. - Anti sobimatu adnmebaasiviide või sobimatud üleslaadimisparameetrid. - - - Command `%1` exited with status code: %2 - Käsk „%1” lõpetas töö olekukoodiga %2 - - - Failed to upload merged database. Command `%1` exited with status code: %2 - Mestitud andmebaasi üleslaadmine ebaõnnestus. Käsk „%1” lõpetas töö olekukoodiga %2 - - ReportsWidgetBrowserStatistics + + Exclude expired entries from the report + Aegunud kirjed jäetakse aruandest välja + + + Show only entries which have URL set + Näidatakse ainult kirjeid, millel on URL määratud + + + Show only entries which have browser settings in custom data + Näidatakse ainult kirjeid, millel on kohandatud andmetes brauseri seadistusi + Double-click entries to edit. Kirje muutmiseks tee sellel topeltklõps. @@ -9372,53 +8059,44 @@ See argument on iganenud, kasuta parem "--set-key-file". Exclude from reports Jäetakse aruannetest välja - - Expire Entry(s)… - Märgi kirje aegunuks…Märgi kirjed aegunuks… - - - Only show entries that have a URL - Näidatakse ainult kirjeid, millel on URL määratud - - - Only show entries that have been explicitly allowed or denied - Näidatakse ainult kirjeid, millel on lubatud või keelatud URL - - - Show expired entries - Näidatakse ka aegunud kirjeid - - - (Expired) - (aegunud) - - - Delete plugin data from Entry(s)… - Kustuta kirjest plugina andmed…Kustuta kirjetest plugina andmed… - ReportsWidgetHealthcheck - Show expired entries - Näidatakse ka aegunud kirjeid + Exclude expired entries from the report + Aegunud kirjed jäetakse aruandest välja - (Expired) - (aegunud) + Also show entries that have been excluded from reports + Kuvatakse ka muidu aruannetest välja jäetavad kirjed Hover over reason to show additional details. Double-click entries to edit. Põhjuse kohta täpsema teabe saamiseks hoia hiirekursorit selle kohal. Kirje muutmiseks tee topeltklõps. + + Bad + Password quality + Kohutav + Bad — password must be changed Kohutav – palun muuda parooli + + Poor + Password quality + Kehv + Poor — password should be changed Kehv – parooli tuleks muuta + + Weak + Password quality + Nõrk + Weak — consider changing the password Nõrk – kaalu parooli muutmist @@ -9467,14 +8145,6 @@ See argument on iganenud, kasuta parem "--set-key-file". Exclude from reports Jäetakse aruannetest välja - - Expire Entry(s)… - Märgi kirje aegunuks…Märgi kirjed aegunuks… - - - Show entries that have been excluded from reports - Näidatakse ka muidu aruannetest välja jäetavaid kirjeid - ReportsWidgetHibp @@ -9488,7 +8158,7 @@ See argument on iganenud, kasuta parem "--set-key-file". Also show entries that have been excluded from reports - Näidatakse ka muidu aruannetest välja jäetavaid kirjeid + Kuvatakse ka muidu aruannetest välja jäetavad kirjed This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. @@ -9570,77 +8240,6 @@ See argument on iganenud, kasuta parem "--set-key-file". Exclude from reports Jäetakse aruannetest välja - - Expire Entry(s)… - Märgi kirje aegunuks…Märgi kirjed aegunuks… - - - - ReportsWidgetPasskeys - - Export - Ekspordi - - - Import - Impordi - - - List of entry URLs - Kirje URL-ide loend - - - Title - Pealkiri - - - Path - Asukoht - - - Username - Kasutajanimi - - - URLs - URL-id - - - Edit Entry… - Muuda kirjet… - - - Delete Entry(s)… - Kustuta kirje…Kustuta kirjed… - - - Relying Party - Sõltlane - - - Show expired entries - Näidatakse ka aegunud kirjeid - - - (Expired) - (aegunud) - - - Export Confirmation - Eksportimise kinnitus - - - The passkey file will be vulnerable to theft and unauthorized use, if left unsecured. Are you sure you want to continue? - Kui jätad pääsuvõtmetega faili turvamata, võidakse see varastada või seda ilma loata kasutada. Kas oled kindel, et soovid jätkata? - - - Please wait, list of entries with passkeys is being updated… - Palun oota, pääsuvõtmega kirjete nimekirja uuendatakse… - - - No entries with passkeys. - Ühtegi pääsuvõtmega kirjet pole. - ReportsWidgetStatistics @@ -9815,14 +8414,6 @@ See argument on iganenud, kasuta parem "--set-key-file". No agent running, cannot list identities. Ükski agent ei tööta, identiteete pole võimalik loetleda. - - Failed to remove all SSH identities from agent. - Kõigi identiteetide eemaldamine SSH agendilt ebaõnnestus. - - - All SSH identities removed from agent. - Kõik identiteedid SSH agendilt eemaldatud. - SearchHelpWidget @@ -9889,10 +8480,6 @@ See argument on iganenud, kasuta parem "--set-key-file". Search Help Otsinguabi - - Save Search - Salvesta otsing - Search (%1)… Search placeholder text, %1 is the keyboard shortcut @@ -9906,6 +8493,10 @@ See argument on iganenud, kasuta parem "--set-key-file". Limit search to selected group Otsitakse ainult valitud grupist + + Save Search + Salvesta otsing + SettingsClientModel @@ -9967,10 +8558,34 @@ See argument on iganenud, kasuta parem "--set-key-file". Confirm when passwords are retrieved by clients Küsitakse kinnitust, kui klient paroolile juurdepääsu soovib + + <html><head/><body><p><span style=" + font-family:'-apple-system','BlinkMacSystemFont','Segoe UI','Helvetica','Arial','sans-serif','Apple Color + Emoji','Segoe UI Emoji'; font-size:14px; color:#24292e; background-color:#ffffff;">This setting does + not override disabling recycle bin prompts</span></p></body></html> + + <html><head/><body><p><span style=" + font-family:'-apple-system','BlinkMacSystemFont','Segoe UI','Helvetica','Arial','sans-serif','Apple Color + Emoji','Segoe UI Emoji'; font-size:14px; color:#24292e; background-color:#ffffff;">Selle ruudu märkimisel + pole mõju, kui prügikasti viskamisel kinnituse küsimine on välja lülitatud</span></p></body></html> + + Confirm when clients request entry deletion Küsitakse kinnitust, kui klient soovib kirjet kustutada + + <html><head/><body><p>This improves compatibility with certain applications + which search for password without unlocking the database first.</p><p>But enabling this may also + crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a + different value set in applications.)</p></body></html> + + <html><head/><body><p>Märkimine parandab ühilduvust teatud rakendustega, + mis otsivad parooli ilma esmalt andmebaasi lukku avamata.</p><p>Samas võib see + põhjustada kliendi kokkujooksmise, kui andmebaasi lukku piisavalt kiiresti ei avata. + (Tavaline ajalimiit on 25 s, aga see võib eri rakenduste puhul erineda.)</p></body></html> + + Prompt to unlock database before searching Enne otsimist küsitakse andmebaasi luku avamist @@ -9995,14 +8610,6 @@ See argument on iganenud, kasuta parem "--set-key-file". Save current changes to activate the plugin and enable editing of this section. Plugina aktiveerimiseks ja selle jaotise muutmise võimaldamiseks salvesta esmalt tehtud muudatused. - - <html><head/><body><p>This setting does not override disabling recycle bin prompts </p></body></html> - <html><head/><body><p>Selle ruudu märkimisel pole mõju, kui prügikasti viskamisel kinnituse küsimine on välja lülitatud.</p></body></html> - - - <html><head/><body><p>This improves compatibility with certain applications which search for password without unlocking the database first.</p><p>But enabling this may also crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a different value set in applications.) </p></body></html> - <html><head/><body><p>Märkimine parandab ühilduvust teatud rakendustega, mis otsivad parooli ilma esmalt andmebaasi lukku avamata.</p><p>Samas võib see põhjustada kliendi kokkujooksmise, kui andmebaasi lukku piisavalt kiiresti ei avata. (Tavaline ajalimiit on 25 s, aga see võib eri rakenduste puhul erineda.)</p></body></html> - SettingsWidgetKeeShare @@ -10070,7 +8677,7 @@ See argument on iganenud, kasuta parem "--set-key-file". ShareImport Successful import - Importimine õnnestus + Importimine oli edukas @@ -10110,14 +8717,6 @@ See argument on iganenud, kasuta parem "--set-key-file". TagModel - - Clear Search - Puhasta otsing - - - All Entries - Kõik kirjed - Expired Aegunud @@ -10126,6 +8725,14 @@ See argument on iganenud, kasuta parem "--set-key-file". Weak Passwords Nõrgad paroolid + + All Entries + Kõik kirjed + + + Clear Search + Puhasta otsing + TagView @@ -10174,7 +8781,7 @@ See argument on iganenud, kasuta parem "--set-key-file". There was an error creating the QR code. - Ruutkoodi loomisel ilmnes tõrge. + QR-koodi loomisel ilmnes tõrge. Closing in %1 seconds. @@ -10303,6 +8910,26 @@ Näide: JBSWY3DPEHPK3PXP Start storing your passwords securely in a KeePassXC database Hakka oma paroole turvaliselt KeePassXC andmebaasis hoidma + + Create new database + Loo uus andmebaas + + + Open existing database + Ava olemasolev andmebaas + + + Import from KeePass 1 + Impordi KeePass 1-st + + + Import from 1Password + Impordi 1Passwordist + + + Import from CSV + Impordi CSV-failist + Recent databases Viimatised andmebaasid @@ -10315,18 +8942,6 @@ Näide: JBSWY3DPEHPK3PXP Welcome to KeePassXC %1 Tere tulemast KeePassXC %1 kasutama! - - Create Database - Loo andmebaas - - - Open Database - Ava andmebaas - - - Import File - Impordi fail - WinUtils @@ -10343,8 +8958,31 @@ Näide: JBSWY3DPEHPK3PXP Globaalse kiirklahvi registreerimine polnud võimalik + + WindowsHello + + Failed to init KeePassXC crypto. + KeePassXC krüptograafia initsialiseerimine ebaõnnestus. + + + Failed to encrypt key data. + Võtme andmete krüptimine ebaõnnestus. + + + Failed to get Windows Hello credential. + Windows Hello tunnuse hankimine ebaõnnestus. + + + Failed to decrypt key data. + Võtme andmete lahtikrüptimine ebaõnnestus. + + YubiKey + + %1 No interface, slot %2 + %1: liidest pole, pesa %2 + General: Üldine: @@ -10356,6 +8994,14 @@ Näide: JBSWY3DPEHPK3PXP YubiKeyEditWidget + + Refresh hardware tokens + Värskenda riistvaraliste võtmete loendit + + + Refresh + Värskenda + Hardware key slot selection Riistvaralise võtme pesa valimine @@ -10388,6 +9034,10 @@ Näide: JBSWY3DPEHPK3PXP Challenge-Response set, click to change or remove Pretensioon-vastus on määratud, muutmiseks või eemaldamiseks klõpsa vastavat nuppu. + + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + <p>Kui sul on <a href="https://www.yubico.com/">YubiKey</a> või <a href="https://onlykey.io">OnlyKey</a> turvavõti, võid lisaturvalisuse nimel seda kasutada.</p><p>Võtme ühe pesa peab programmeerima <a href="https://www.yubico.com/products/services-software/challenge-response/">HMAC-SHA1 pretensiooni ja vastusena</a>.</p> + Detecting hardware keys… riistvaraliste võtmete tuvastamine… @@ -10396,25 +9046,28 @@ Näide: JBSWY3DPEHPK3PXP No hardware keys detected riistvaralisi võtmeid ei tuvastatud + + + YubiKeyInterface - Refresh hardware keys - Värskenda riistvaraliste võtmete loendit - - - <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed with <a href="https://keepassxc.org/docs/#faq-yubikey-howto">Challenge-Response</a>.</p> - <p>Kui sul on <a href="https://www.yubico.com/">YubiKey</a> või <a href="https://onlykey.io">OnlyKey</a> turvavõti, võid lisaturvalisuse nimel seda kasutada.</p><p>Võtme ühe pesa peab programmeerima <a href="https://keepassxc.org/docs/#faq-yubikey-howto">pretensiooni ja vastusena</a>.</p> - - - Hardware keys found, but no slots are configured - Leiti riistvaraline võti, kuid ühtki pesa pole seadistatud + %1 Invalid slot specified - %2 + %1: määrati sobimatu pesa – %2 YubiKeyInterfacePCSC + + (PCSC) %1 [%2] Challenge-Response - Slot %3 + (PCSC) %1 [%2] pretensioon-vastus – pesa %3 + The YubiKey PCSC interface has not been initialized. YubiKey PCSC-liides pole initsialiseeritud. + + Hardware key is currently in use. + Riistvaraline võti on hetkel kasutuses. + Could not find or access hardware key with serial number %1. Please present it to continue. Riistvaralist võtit seerianumbriga %1 kas ei leitud või ei pääsetud sellele juurde. Jätkamiseks viipa võtit. @@ -10431,21 +9084,6 @@ Näide: JBSWY3DPEHPK3PXP Failed to complete a challenge-response, the PCSC error code was: %1 Pretensiooni-vastuse lõpetamine ebaõnnestus. PCSC veakood: %1 - - (NFC) %1 [%2] - Slot %3, %4 - YubiKey display fields - (NFC) %1 [%2] – pesa %3, %4 - - - Press - USB Challenge-Response Key interaction request - ootab vajutust - - - Passive - USB Challenge-Response Key no interaction required - passiivne - YubiKeyInterfaceUSB @@ -10453,6 +9091,14 @@ Näide: JBSWY3DPEHPK3PXP Unknown teadmata + + (USB) %1 [%2] Configured Slot - %3 + (USB) %1 [%2] seadistatud – pesa %3 + + + (USB) %1 [%2] Challenge-Response - Slot %3 - %4 + (USB) %1 [%2] pretensioon-vastus – pesa %3 – %4 + Press USB Challenge-Response Key interaction request @@ -10467,6 +9113,10 @@ Näide: JBSWY3DPEHPK3PXP The YubiKey USB interface has not been initialized. YubiKey USB-liides pole initsialiseeritud. + + Hardware key is currently in use. + Riistvaraline võti on hetkel kasutuses. + Could not find hardware key with serial number %1. Please plug it in to continue. Riistvaralist võtit seerianumbriga %1 ei leitud. Jätkamiseks tuleb see arvutiga ühendada. @@ -10483,15 +9133,5 @@ Näide: JBSWY3DPEHPK3PXP Failed to complete a challenge-response, the specific error was: %1 Pretensiooni-vastuse lõpetamine ebaõnnestus. Konkreetne viga: %1 - - %1 [%2] - Slot %3 - YubiKey NEO display fields - %1 [%2] – pesa %3 - - - %1 [%2] - Slot %3, %4 - YubiKey display fields - %1 [%2] – pesa %3, %4 - \ No newline at end of file diff --git a/share/translations/keepassxc_fi.ts b/share/translations/keepassxc_fi.ts index 57a12471c..8978dece0 100644 --- a/share/translations/keepassxc_fi.ts +++ b/share/translations/keepassxc_fi.ts @@ -80,10 +80,6 @@ Details Yksityiskohdat - - Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. - Valintasi muistetaan pyynnön esittäneen päätteen JA KeePassXC käyntiajan. - Remember Muista @@ -92,6 +88,10 @@ Allow Selected Salli valitut + + Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. + Valintasi muistetaan pyynnön esittäneen päätteen JA KeePassXC käyntiajan. + Deny All && Future Estä kaikki && tulevat @@ -112,7 +112,7 @@ AgentSettingsWidget Enable SSH Agent integration - Ota SSH Agentti käyttöön + Ota SSH-agentin integraatio käyttöön Use Pageant @@ -122,10 +122,6 @@ Use OpenSSH Käytä OpenSSH:ta - - Use both agents - Käytä molempia agentteja - SSH_AUTH_SOCK override SSH_AUTH_SOCK-ylikirjoitus @@ -148,11 +144,15 @@ No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. - SSH Agentin socketia ei ole. Varmista, että SSH_AUTH_SOCK-ympäristömuuttuja on olemassa, tai aseta sille ylikirjoitus + Yhteystieto SSH-agenttiin puuttuu. Varmista, että SSH_AUTH_SOCK-ympäristömuuttuja on olemassa, tai aseta sille ylikirjoitus SSH Agent connection is working! - SSH Agent -yhteys toimii! + Yhteys SSH-agenttiin toimii! + + + Use both agents + Käytä molempia agentteja @@ -169,10 +169,6 @@ Security Turvallisuus - - This setting cannot be enabled when minimize on unlock is enabled. - Tätä asetusta ei voi ottaa käyttöön, kun ohjelman pienennys lukituksen avauksen jälkeen on otettu käyttöön. - Access error for config file %1 Pääsyvirhe asetustiedostoon %1 @@ -217,49 +213,21 @@ You must restart the application to set the new language. Would you like to restart now? Ohjelma täytyy käynnistää uudelleen, jotta uusi kieli voidaan ottaa käyttöön. Haluatko käynnistää uudelleen nyt? + + Reset Settings? + Palauta asetukset? + + + Are you sure you want to reset all general and security settings to default? + Haluatko varmasti palauttaa kaikki yleiset ja turvallisuusasetukset oletuksiin? + Select backup storage directory Valitse varmuuskopion hakemistopolku - Confirm Reset - Vahvista palauttaminen - - - Are you sure you want to reset all settings to default? - Haluatko varmasti palauttaa kaikki asetukset oletuksiinsa? - - - Import KeePassXC Settings - Tuo KeePassXC-asetukset - - - Failed to import settings from %1, not a valid settings file. - Ei voitu tuoda asetuksia tiedostosta %1: ei ole kelvollinen asetustiedosto. - - - Export KeePassXC Settings - Vie KeePassXC-asetukset - - - Small - - - - Normal - - - - Medium - - - - Large - - - - Custom - + This setting cannot be enabled when minimize on unlock is enabled. + Tätä asetusta ei voi ottaa käyttöön, kun ohjelman pienennys lukituksen avauksen jälkeen on otettu käyttöön. @@ -292,10 +260,6 @@ Remember previously used databases Muista aiemmin käytetyt tietokannat - - recent files - viimeisimmät tiedostot - Load previously open databases on startup Lataa aiemmin avoinna olleet tietokannat käynnistyksen yhteydessä @@ -312,6 +276,25 @@ Include beta releases when checking for updates Sisällytä betajulkaisut päivityksiä tarkistaessa + + On database unlock, show entries that + Tietokannan avauksen yhteydessä, näytä tietueet jotka + + + have expired + On database unlock, show entries that... + ovat vanhentuneet + + + days + On database unlock, show entries that will expire within %1 days + päivää + + + will expire within + On database unlock, show entries that... + vanhentuvat ajan sisällä + File Management Tiedostohallinta @@ -336,10 +319,22 @@ Backup database file before saving Ota tietokannasta varmuuskopio ennen tallentamista + + Backup destination + Varmuuskopion sijainti + + + Specifies the database backup file location. Occurrences of "{DB_FILENAME}" are replaced with the filename of the saved database without extension. {TIME:<format>} is replaced with the backup time, see https://doc.qt.io/qt-5/qdatetime.html#toString. <format> defaults to format string "dd_MM_yyyy_hh-mm-ss". + Määrittää tietokannan varmuuskopion sijainnin. "{DB_FILENAME}" -merkkijonot korvataan tietokannan tiedostonimellä ilman tiedostopäätettä. {TIME:<format>} korvataan varmuuskopion aikaleimalla (https://doc.qt.io/qt-5/qdatetime.html#toString).<format>Aikaleiman vakiomuoto on "dd_MM_yyyy_hh-mm-ss". + {DB_FILENAME}.old.kdbx {DB_FILENAME}.old.kdbx + + Choose... + Valitse... + Use alternative saving method (may solve problems with Dropbox, Google Drive, GVFS, etc.) Käytä vaihtoehtoista tallennusmetodia (voi ratkaista ongelmia Dropboxin, Google Driven GVFS:n, ymv. kanssa) @@ -417,10 +412,6 @@ Toolbar button style: Työkalupalkin nappien tyyli: - - Show passwords in color - Näytä salasanat värillisinä - Use monospaced font for notes Käytä tasalevyistä fonttia muistiinpanoille @@ -507,68 +498,11 @@ Muista edellinen syötetty tietue: - On database unlock, show entries that will expire within - Tietokannan lukitusta avattaessa näytä tietueet, jotka vanhenevat + recent files + viimeisimmät tiedostot - On database unlock, show entries that will expire within - Tietokannan lukitusta avattaessa näytä tietueet, jotka vanhenevat - - - days - number of days warning for password expiration - päivää - - - Destination format: - Kohdemuoto: - - - <html><head/><body><p><span style=" font-weight:600;">{DB_FILENAME}</span> is replaced with the filename of the saved database without extension</p><p><span style=" font-weight:600;">{TIME:&lt;format&gt;}</span> is replaced with the specified time format (default: dd_MM_yyyy_hh-mm-ss)</p><p>See the User Guide for more details</p></body></html> - <html><head/><body><p><span style=" font-weight:600;">{DB_FILENAME}</span> korvataan tallennettavan tietokannan päätteettömällä tiedostonimellä</p><p><span style=" font-weight:600;">{TIME:&lt;format&gt;}</span> korvataan määrityksen mukaisella aikaleimalla (oletus: pp_KK_vvvv_tt-mm-ss)</p><p>Lisätietoa löytyy käyttöoppaasta</p></body></html> - - - Choose folder... - Valitse kansio… - - - Show confirmation before moving entries to recycle bin - Pyydä vahvistus ennen tietueiden siirtämistä roskakoriin - - - Copy data on double clicking field in entry view - Kopioi tiedot kaksoisnapsautettaessa kenttää tietuenäkymässä - - - Show toolbar - Näytä työkalupalkki - - - Show the menu bar by pressing the Alt key - Näytä valikko painettaessa Alt-näppäintä - - - Show menubar - Näytä valikkorivi - - - Import settings… - Tuo asetukset… - - - Export settings… - Vie asetukset… - - - Open browser on double clicking URL field in entry view - Avaa selain kaksoisnapsautettaessa verkko-osoitekenttää tietuenäkymässä - - - Font size: - - - - Font size selection + Show passwords in color @@ -598,7 +532,7 @@ min Minutes - minuuttia + minuuttia Clipboard clear seconds @@ -614,7 +548,7 @@ Enable database quick unlock (Touch ID / Windows Hello) - Määritä tietokannan Pika-avaus (Touch ID / Windows Hello) + Määritä tietokannan nopea lukituksen avaus (Touch ID / Windows Hello) Lock databases when session is locked or lid is closed @@ -624,6 +558,10 @@ Lock databases after minimizing the window Lukitse tietokanta ikkunan pienennyksen jälkeen + + Require password repeat when it is visible + Vaadi salasanan toistamista, mikäli se on näkyvillä + Hide passwords when editing them Piilota salasanat muokkauksen aikana @@ -636,6 +574,18 @@ Hide passwords in the entry preview panel Piilota salasanat tietueiden esikatselupaneelissa + + Hide entry notes by default + Piilota tietueiden muistiinpanot + + + Move entries to recycle bin without confirmation + Siirrä tietueet roskakoriin ilman varmistusta + + + Enable double click to copy the username/password entry columns + Ota tuplaklikkaus käyttöön kopioidaksesi käyttäjätunnuksen/salasanan sarakkeita + Privacy Yksityisyys @@ -646,19 +596,7 @@ Hide TOTP in the entry preview panel - Piilota TOTP merkinnän esikatselupaneelista - - - Lock databases when switching user - Lukitse tietokanta, jos käyttäjää vaihdetaan - - - Lock Options - Lukitse valinnat - - - Hide notes in the entry preview panel - Piilota muistiinpanot tietueen esikatselupaneelista + @@ -704,13 +642,27 @@ Erittäin pitkä viive havaittu, maksimi on %1: %2 - Entry does not have attribute for PICKCHARS: %1 - Merkintä ei sisällä attribuuttia PICKCHARS: %1 + Invalid conversion type: %1 + Virheellinen muunnoksen tyyppi: %1 + + + Invalid conversion syntax: %1 + Virheellinen muutoksen syntaksi: %1 + + + Invalid regular expression syntax %1 +%2 + Virheellinen Regex-syntaksi %1 +%2 Invalid placeholder: %1 Virheellinen paikkamerkki: %1 + + Entry does not have attribute for PICKCHARS: %1 + + AutoTypeAssociationsModel @@ -752,6 +704,10 @@ AutoTypePlatformX11 + + Trying to send invalid keysym. + Yritetään lähettää virheellistä keysym:iä + Sequence aborted: Caps Lock is on Sekvenssi peruutettu: Caps Lock on päällä @@ -764,10 +720,6 @@ Unable to get valid keycode for key: Avainkoodia ei voitu saada avaimelle: - - Trying to send invalid keyboard symbol. - Yritettiin lähettää virheellistä näppäimistösymbolia. - AutoTypeSelectDialog @@ -786,9 +738,9 @@ Ctrl+1 - Type username<br/> Ctrl+2 - Type password<br/> Ctrl+3 - Type TOTP<br/> Ctrl+4 - Use Virtual Keyboard (Windows Only)</p> - <p>Voit etsiä minkä tahansa tietueen avoimista tietokannoistasi käyttämällä haun lisäasetuksia. Seuraavat pikanäppäimet ovat hyödyllisiä:<br/> + <p>Voit käyttää haun lisäasetuksia löytääksesi tietueita avoimesta tietokannasta. Seuraavat pikanäppäimet ovat hyödyllisiä:<br/> Ctrl+F - Etsi tietokannasta<br/> -Ctrl+1 - Kirjoita käyttäjätunnus<br/> +Ctrl+1 - Kirjoita käyttäjänimi<br/> Ctrl+2 - Kirjoita salasana<br/> Ctrl+3 - Kirjoita TOTP<br/> Ctrl+4 - Käytä virtuaalista näppäimistöä (vain Windows)</p> @@ -872,13 +824,13 @@ Ctrl+4 - Käytä virtuaalista näppäimistöä (vain Windows)</p>Disable for this site Ota pois käytöstä tällä sivustolla - - Undo - Kumoa - BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + KeePassXC-Browser - Tallenna tietue + Ok Ok @@ -891,76 +843,15 @@ Ctrl+4 - Käytä virtuaalista näppäimistöä (vain Windows)</p>You have multiple databases open. Please select the correct database for saving credentials. Useita tietokantoja on auki -Valitse tietokanta, johon tiedot tallennetaan. - - - KeePassXC - Select Database - KeePassXC - Valitse tietokanta - - - - BrowserPasskeysConfirmationDialog - - Cancel - Peruuta - - - Update - Päivitä - - - Authenticate - Todenna - - - Register new - Rekisteröi uusi - - - Register - Rekisteröi - - - Timeout in <b>%n</b> seconds... - Aikakatkaisu <b>%n</b> sekunnin kuluttua...Aikakatkaisu <b>%n</b> sekunnin kuluttua... - - - Relying Party: %1 - Välittävä osapuoli: %1 - - - Username: %1 - Käyttäjätunnus: %1 - - - KeePassXC - Passkey credentials - KeePassXC - Pääsyavaimen tunnistetiedot - - - Add to existing entry - Lisää olemassa olevaan tietueeseen - - - Existing passkey found. -Do you want to register a new passkey for: - Olemassa oleva pääsyavain löytyi -Haluatko rekisteröidä uuden pääsyavaimen sivustolle: - - - Select the existing passkey and press Update to replace it. - Valitse olemassa oleva pääsyavain ja klikkaa Päivitä korvataksesi se. - - - Authenticate passkey credentials for: - Kirjaudu pääsyavaimella sivustolle: - - - Do you want to register a passkey for: - Haluatko rekisteröidä pääsyavaimen sivustolle: +Valitse oikea tietokanta tietueen tallentamiseksi BrowserService + + KeePassXC: Create a new group + KeePassXC: Luo uusi ryhmä + A request for creating a new group "%1" has been received. Do you want to create this group? @@ -968,6 +859,10 @@ Do you want to create this group? Vastaanotettiin pyyntö luoda uusi ryhmä "%1". Haluatko varmasti luoda tämän ryhmän? + + KeePassXC: New key association request + KeePassXC: Uusi avaimenliittämispyyntö + You have received an association request for the following database: %1 @@ -984,16 +879,28 @@ chrome-läppäri. Save and allow access Tallenna ja salli pääsy + + KeePassXC: Overwrite existing key? + KeePassXC: Korvataanko olemassa oleva avain? + A shared encryption key with the name "%1" already exists. Do you want to overwrite it? Jaettu salausavain samalla nimellä "%1" on jo olemassa. Haluatko korvata sen? + + KeePassXC: Update Entry + KeePassXC: Päivitä tietue + Do you want to update the information in %1 - %2? Haluatko päivittää tiedot osoitteesta %1 - %2? + + KeePassXC: Delete entry + KeePassXC: Poista tietue + A request for deleting entry "%1" has been received. Do you want to delete the entry? @@ -1003,58 +910,50 @@ Haluatko poistaa tietueen? - %1 (Passkey) - %1 (pääsyavain) + Converting attributes to custom data… + Muutetaan attribuutteja mukautetuiksi tiedoiksi... - KeePassXC - Create a new group - KeePassXC - Luo uusi ryhmä + Abort + Keskeytä - Disable - Kytke pois päältä + KeePassXC: Converted KeePassHTTP attributes + KeePassXC: Muutetut KeePassHTTP-attribuutit - KeePassXC - Overwrite existing key? - KeePassXC - Korvataanko olemassa oleva avain? + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + Mukautettiin attribuutit onnistuneesti %1 tietueesta. +Siirrettiin %2 avainta mukautettuihin tietoihin. + + + Successfully moved %n keys to custom data. + Siirrettiin onnistuneesti %n avainta mukautettuihin tietoihin.Siirrettiin onnistuneesti %n avainta mukautettuihin tietoihin. - KeePassXC - Update Entry - KeePassXC - Päivitä tietue + KeePassXC: No entry with KeePassHTTP attributes found! + KeePassXC: Tietueita KeePassHTTP-attribuuteilla ei löytynyt! - KeePassXC - Delete entry - KeePassXC - Poista tietue + The active database does not contain an entry with KeePassHTTP attributes. + Aktiivinen tietokanta ei sisällä tietueita KeePassHTTP-attribuuteilla. - KeePassXC - New key association request - KeePassXC - Uus avaimen liitospyyntö + Don't show this warning again + Älä näytä tätä varoitusta uudelleen - Passkey - Pääsyavain + KeePassXC: Legacy browser integration settings detected + KeePassXC: Vanhoja selainintegraatioasetuksia havaittu - KeePassXC - Passkey credentials - KeePassXC - Pääsyavaimen tunnistetiedot - - - Register a new passkey to this entry: - Rekisteröi uusi pääsyavain tähän tietueeseen: - - - KeePassXC - Update passkey - KeePassXC - Päivitä pääsyavain - - - Entry already has a passkey. -Do you want to overwrite the passkey in %1 - %2? - Tietueella on jo pääsyavain. -Haluatko ylikirjoittaa pääsyavaimen %1 - %2? - - - Register - Rekisteröi + 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? + KeePassXC-Browser:in asetukset täytyy siirtää tietokannan asetuksiin. +Tämä on välttämätöntä, jotta yhteys selainlaajennukseen säilyy muuttumattomana. +Haluat siirtää asetukset nyt? @@ -1075,6 +974,10 @@ Haluatko ylikirjoittaa pääsyavaimen %1 - %2? General Yleistä + + Browsers installed as snaps are currently not supported. + Snapin kautta asennetut selaimet eivät ole tällä hetkellä tuettuja. + Enable integration for these browsers: Käytä integraatiota seuraaville selaimille: @@ -1110,7 +1013,7 @@ Haluatko ylikirjoittaa pääsyavaimen %1 - %2? Show a notification when credentials are requested Credentials mean login data requested via browser extension - Näytä ilmoitus, kun tietueita pyydetään + Näytä ilmoitus, kun tietueita pyydetään tietokannasta Request to unlock the database if it is locked @@ -1130,24 +1033,24 @@ Haluatko ylikirjoittaa pääsyavaimen %1 - %2? Return only best-matching credentials - Näytä vain sopivimmat tietueet + Palauta vain parhaat osumat tietystä osoitteesta verkkotunnuksen kaikkien osumien sijasta Returns expired credentials. String [expired] is added to the title. - Näytä vanhentuneet tietueet. Niiden nimiin lisätään teksti [vanhentunut]. + Salli vanhentuneiden tietueiden noutaminen. Teksti [vanhentunut] lisätään tietueen otsikkoon. Allow returning expired credentials - Salli vanhentuneiden tietueiden näyttö + Salli vanhentuneiden tietueiden noutaminen All databases connected to the extension will return matching credentials. - Salli tietueiden näyttö kaikista selainlaajennukseen yhdistetyistä tietokannoista. + Sallitaan tietueiden nouto kaikista tietokannoista jotka ovat yhdistetty selainlaajennukseen. Search in all opened databases for matching credentials Credentials mean login data requested via browser extension - Etsi sopivia tietueita kaikista avoimista tietokannoista + Etsi osumia kaikista avoimista tietokannoista Advanced @@ -1156,12 +1059,12 @@ Haluatko ylikirjoittaa pääsyavaimen %1 - %2? Never ask before accessing credentials Credentials mean login data requested via browser extension - Älä koskaan vahvista tietueiden käyttöä + Älä koskaan varmista pääsyä tietueisiin Never ask before updating credentials Credentials mean login data requested via browser extension - Älä koskaan vahvista tietueiden päivitystä + Älä koskaan varmista tietueiden päivitystä Do not ask permission for HTTP Basic Auth @@ -1246,6 +1149,26 @@ Haluatko ylikirjoittaa pääsyavaimen %1 - %2? Custom extension ID Mukautetun selainlaajennuksen ID + + Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 + Snap:in hiekkalaatikon takia sinun täytyy suorittaa komentosarja jotta voit aktivoida selainintegraation.<br />Voit ladata komentosarjan osoitteesta %1 + + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 + KeePassXC-Browser tarvitaan selainintegraation toimimista varten.<br />Lataa se seuraaville selaimille: %1, %2 ja %3. %4 + + + Please see special instructions for browser extension use below + Katso yksityiskohtaisemmat ohjeet selainlaajennuksen käyttöön alta + + + <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. + <b>Virhe:</b> Mukautetun välitysohjelman sijaintia ei löydy!<br/>Selainintegraatio EI TOIMI ilman välitysohjelmaa. + + + <b>Warning:</b> The following options can be dangerous! + <b>Varoitus:</b> Seuraavat valinnat voivat olla vaarallisia! + Executable Files Suoritettavat tiedostot @@ -1262,46 +1185,6 @@ Haluatko ylikirjoittaa pääsyavaimen %1 - %2? Select native messaging host folder location Valitse native messaging -isännän hakemiston sijainti - - Allow keepassxc-proxy to list all entries with their title, URL and UUID in connected databases. - Salli keepassxc-proxyn listata kaikki yhdistettyjen tietokantojen merkinnät niiden otsikoilla, URL-osoitteilla ja UUID-tunnisteilla. - - - Allow limited access to all entries in connected databases (ignores site access restrictions) - Myönnä rajoitettu käyttöoikeus kaikkiin yhdistettyjen tietokantojen merkintöihin (ohittaa sivustokohtaiset rajoitukset) - - - <b>Warning:</b> Only adjust these settings if necessary. - <b>Varoitus:</b> Muuta näitä asetuksia vain tarvittaessa. - - - The custom proxy location does not exist. - Mukautetun välityspalvelimen sijaintia ei ole olemassa. - - - <b>Error:</b> The custom proxy location does not exist. Correct this in the advanced settings tab. - <b>Virhe:</b> Mukautetun välityspalvelimen sijaintia ei ole olemassa. Korjaa tämä lisäasetukset-välilehdeltä. - - - <b>Error:</b> The installed proxy executable is missing from the expected location: %1<br/>Please set a custom proxy location in the advanced settings or reinstall the application. - <b>Virhe:</b> Asennetun välityspalvelimen sovellustiedostoa ei löydy odotetusta sijainnista: %1<br/>Määritä mukautetun välityspalvelimen sijainti lisäasetuksista tai asenna sovellus uudelleen. - - - Allows using insecure http://localhost with passkeys for testing purposes. - Sallii turvattoman http://localhost:in käyttämisen pääsyavainten kanssa testaamistarkoituksessa. - - - Allow using localhost with passkeys - Salli localhostin käyttö pääsyavainten kanssa - - - KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. - KeePassXC-Browser tarvitaan selainintegraation toimimista varten.<br />Lataa se seuraaville selaimille: %1, %2 ja %3. - - - Browsers installed using Snap or Flatpak are not supported with exception to Firefox installed using Snap. - - CloneDialog @@ -1315,7 +1198,7 @@ Haluatko ylikirjoittaa pääsyavaimen %1 - %2? Replace username and password with references - Korvaa käyttäjätunnus ja salasana viittauksilla + Korvaa käyttäjänimi ja salasana viittauksilla Copy history @@ -1324,6 +1207,14 @@ Haluatko ylikirjoittaa pääsyavaimen %1 - %2? CsvImportWidget + + Import CSV fields + Tuo CSV-kentät + + + filename + tiedostonimi + size, rows, columns koko, rivit, sarakkeet @@ -1432,43 +1323,50 @@ Haluatko ylikirjoittaa pääsyavaimen %1 - %2? Column %1 Sarake %1 + + Imported from CSV file + Tuotu CSV-tiedostosta + + + Original data: + Alkuperäiset tiedot: + + + Error(s) detected in CSV file! + CSV-tiedostossa havaittiin virhe/virheitä! + [%n more message(s) skipped] [%n more message(s) skipped][%n kappaletta viestejä ohitettiin] - Failed to parse CSV file: %1 - CSV-tiedoston jäsennys epäonnistui: %1 + Error + Virhe - Imported from CSV file: %1 - Tuotu CSV-tiedostosta: %1 - - - No Title Selected - Otsikkoa ei ole valittu - - - No title column was selected, entries will be hard to tell apart. -Are you sure you want to import? - Tietueet voi olla hankala erottaa toisistaan, sillä otsikkosaraketta ei ole valittu. -Oletko varma, että haluat jatkaa tuontia? - - - Tags - Tagit + CSV import: writer has errors: +%1 + CSV-tuonti: kirjoituksessa on virheitä: +%1 CsvParserModel + + %1, %2, %3 + file info: bytes, rows, columns + %1, %2, %3 + + + %n byte(s) + %n tavu%n tavua + %n row(s) - CSV row count %n rivi%n riviä %n column(s) - CSV column count %n sarake.%n saraketta @@ -1521,14 +1419,6 @@ Tietokannan varmuuskopio paikannettu: %2 Recycle Bin Roskakori - - Database file read error. - - - - No file path was provided. - - DatabaseOpenDialog @@ -1551,10 +1441,30 @@ Tietokannan varmuuskopio paikannettu: %2 Password field Salasanakenttä + + Enter Additional Credentials (if any): + Syötä lisätietueita (mikäli niitä on): + + + Key File: + Avaintiedosto: + + + Key file help + Avaintiedoston ohje + Hardware key slot selection Laiteavaimen paikan valinta + + Hardware Key: + Laiteavain: + + + Hardware key help + Laiteavaimen apu + Key file to unlock the database Avaintiedosto tietokannan avaukseen @@ -1567,6 +1477,14 @@ Tietokannan varmuuskopio paikannettu: %2 Browse… Selaa... + + Refresh hardware tokens + Uudista laitetunnisteet + + + Refresh + Päivitä + Unlock Database Avaa tietokannan lukitus @@ -1629,6 +1547,10 @@ Jos et halua nähdä tätä virhettä uudestaan, mene "Tietokannan asetukse Retry with empty password Yritä uudelleen tyhjällä salasanalla + + Failed to authenticate with Touch ID + Autentikaatio Touch ID:n kautta ei onnistunut + Failed to open key file: %1 Avaintiedoston avaus epäonnistui: %1 @@ -1661,68 +1583,40 @@ Jos et halua nähdä tätä virhettä uudestaan, mene "Tietokannan asetukse Cannot use database file as key file Tietokantaa ei voida käyttää avaintiedostona + + You cannot use your database file as a key file. +If you do not have a key file, please leave the field empty. + Et voi käyttää tietokantaasi avaintiedostona. +Jos sinulla ei ole avaintiedostoa, jätä kenttä tyhjäksi. + + + Detecting hardware keys… + Etsitään laiteavaimia... + + + No hardware keys detected + Laiteavaimia ei havaittu + + + Select hardware key… + Valitse laiteavain... + + + <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information…</p> + <p>Pääsalasanan lisäksi voit käyttää salaista tiedostoa tietokantasi tietoturvan vahvistamiseksi. Tämä tiedosto voidaan tarvittaessa luoda tietokantasi turvallisuusasetuksista.</p><p>Tämä salainen tiedosto <strong>ei</strong> ole *.kdbx -tietokantatiedosto!<br>Jos sinulla ei ole avaintiedostoa, jätä kenttä tyhjäksi.</p><p>Lisätietoja tästä...</p> + + + <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +<p>Click for more information…</p> + <p>Voit käyttää laiteavainta, kuten <strong>Yubikey:tä</strong> tai <strong>Onlykey:tä</strong> HMAC-SHA1 -asetuksella olevan paikan kanssa.</p> +<p>Lisätietoja tästä...</p> + authenticate to access the database - käytä tietokantaa tunnistautumalla + - Failed to authenticate with Quick Unlock: %1 - Pika-avauksella tunnistautuminen epäonnistui: %1 - - - Select Key File: - Valitse avaintiedosto: - - - <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!</p> - <p>Pääsalasanan lisäksi voit käyttää salaista tiedostoa tietokantasi tietoturvan vahvistamiseksi. Tämä tiedosto voidaan tarvittaessa luoda tietokantasi turvallisuusasetuksista.</p><p>Tämä salainen tiedosto <strong>ei</strong> ole *.kdbx -tietokantatiedosto!</p> - - - Use hardware key [Serial: %1] - Käytä laiteavainta [Sarjanumero: %1] - - - Use hardware key - Käytä laiteavainta - - - Your database file is NOT a key file! -If you don't have a key file or don't know what that is, you don't have to select one. - Tietokantatiedostosi EI ole avaintiedosto! -Jos sinulla ei ole avaintiedostoa, tai et tiedä mikä se on, sinun ei tarvitse valita sellaista. - - - KeePassXC database file selected - KeePassXC-tietokantatiedosto valittu - - - The file you selected looks like a database file. -A database file is NOT a key file! - -Are you sure you want to continue with this file?. - Valitsemasi tiedosto näyttää tietokantatiedostolta. -Tietokantatiedosto EI ole avaintiedosto! - -Oletko varma, että haluat jatkaa tämän tiedoston käyttämistä? - - - No hardware keys found. - Laiteavaimia ei havaittu. - - - Refresh Hardware Keys - Uudista laiteavaimet - - - Click to add a key file. - Klikkaa asettaaksesi avaintiedosto - - - <a href="#" style="text-decoration: underline">I have a key file</a> - <a href="#" style="text-decoration: underline">Minulla on avaintiedosto</a> - - - Hardware keys found, but no slots are configured. + Failed to authenticate with Windows Hello: %1 @@ -1735,6 +1629,10 @@ Oletko varma, että haluat jatkaa tämän tiedoston käyttämistä? DatabaseSettingsDialog + + Advanced Settings + Lisäasetukset + General Yleistä @@ -1745,7 +1643,7 @@ Oletko varma, että haluat jatkaa tämän tiedoston käyttämistä? Database Credentials - Tietokannan tunnistetiedot + Tietokannan tietueet Encryption Settings @@ -1759,22 +1657,6 @@ Oletko varma, että haluat jatkaa tämän tiedoston käyttämistä?Maintenance Ylläpito - - KeeShare - KeeShare - - - Secret Service Integration - Secret Service -integraatio - - - Remote Sync - Etäsynkronointi - - - Database Settings: %1 - - DatabaseSettingsWidgetBrowser @@ -1782,6 +1664,18 @@ Oletko varma, että haluat jatkaa tämän tiedoston käyttämistä?KeePassXC-Browser settings KeePassXC-Browser -asetukset + + Convert KeePassHTTP data + Muuta KeePassHTTP:n tiedot + + + Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data + Siirrä vanhat KeePassHTTP-attribuutit KeePassXC-Browser:in mukautettuihin tietoihin + + + Refresh database root group ID + Uudista tietokannan juuriryhmän ID + Disconnect all browsers Unohda kaikki selaimet @@ -1790,10 +1684,6 @@ Oletko varma, että haluat jatkaa tämän tiedoston käyttämistä?Forget all site-specific settings on entries Unohda kaikki sivustokohtaiset asetukset tietueilta - - Refresh database root group ID - Uudista tietokannan juuriryhmän ID - Stored keys Tallennetut avaimet @@ -1842,10 +1732,18 @@ This may prevent connection to the browser plugin. Haluatko todella unohtaa kaikki selaimet? Tämä voi estää yhteyden selainlaajennukseen. + + KeePassXC: No keys found + KeePassXC: Avaimia ei löytynyt + No shared encryption keys found in KeePassXC settings. Jaettuja salausavaimia ei löytynyt KeePassXC:n asetuksista. + + KeePassXC: Removed keys from database + KeePassXC: Poistettiin avaimet tietokannasta + Successfully removed %n encryption key(s) from KeePassXC settings. %n salausavain poistettiin onnistuneesti KeePassXC:n asetuksista.%n salausavainta poistettiin onnistuneesti KeePassXC:n asetuksista. @@ -1864,14 +1762,32 @@ Pääsy tietueisiin evätään. 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 convert 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. + Refresh database ID Uudista tietokannan ID @@ -1882,26 +1798,6 @@ This is only necessary if your database is a copy of another and the browser ext Haluatko todella uudistaa tietokannan ID:n? Tämä on tarpeellista vain, jos tietokantasi on kloonattu toisesta ja selainintegraatio ei pysty yhdistämään siihen. - - Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data - Siirrä vanhat KeePassHTTP-attribuutit KeePassXC-Browser:in mukautettuihin tietoihin - - - No keys found - Avaimia ei löytynyt - - - Removed keys from database - Avaimet poistettiin tietokannasta - - - Removed permissions - Käyttöoikeudet poistettiin - - - No entry with permissions found! - Tietuetta käyttöoikeuksilla ei löytynyt! - DatabaseSettingsWidgetDatabaseKey @@ -1939,19 +1835,7 @@ Oletko varma, että haluat jatkaa ilman salasanaa? Failed to change database credentials - Tietokannan tunnistetietojen vaihto ei onnistu - - - Weak password - Heikko salasana - - - This is a weak password! For better protection of your secrets, you should choose a stronger password. - Tämä on heikko salsana! SInun tulisi valita vahvempi salsana tietojesi parempaa suojausta varten. - - - The provided password does not meet the minimum quality requirement. - Annettu salasana ei täytä laadullisia minimivaatimuksia. + Tietokannan tietueiden muuttaminen ei onnistu @@ -1960,6 +1844,14 @@ Oletko varma, että haluat jatkaa ilman salasanaa? Decryption Time: Salauksen purkuun kulunut aika: + + Change existing decryption time + Muuta olemassa olevaa salauksen purkuun vaadittavaa aikaa + + + Change + Muuta + Decryption time in seconds Salauksen purkuun vaadittava aika sekunneissa @@ -2040,6 +1932,11 @@ Oletko varma, että haluat jatkaa ilman salasanaa? KDBX 3 KDBX 3 + + unchanged + Database decryption time is unchanged + muuttamaton + Number of rounds too high Key transformation rounds @@ -2092,18 +1989,6 @@ Jos pidät tämän arvon, tietokanta ei ole välttämättä turvattu brute force Threads for parallel execution (KDF settings) säiesäiettä - - Encryption Settings: - Salausasetukset: - - - Basic - Perus - - - Advanced - Lisäasetukset - DatabaseSettingsWidgetFdoSecrets @@ -2148,11 +2033,11 @@ Jos pidät tämän arvon, tietokanta ei ole välttämättä turvattu brute force Default username: - Oletusarvoinen käyttäjätunnus: + Oletuskäyttäjänimi: Default username field - Oletusarvoisen käyttäjätunnuksen kenttä + Oletuskäyttäjänimen kenttä History Settings @@ -2200,94 +2085,30 @@ This action is not reversible. the oldest history items of an entry will be removed such that only the specified amount of entries remain at most. - Kun tämä asetus tallennetaan tai tietuetta muokataan, poistetaan tietueen historian vanhimmat merkinnät, jolloin niitä säilytetään vain määritetty määrä. + Limit the amount of history items per entry to: - Rajoita tietueiden historiamerkintöjen määrää: + When saving this setting or editing an entry the oldest history items of an entry will be removed such that the remaining history items add up to the specified amount at most. - Kun tämä asetus tallennetaan tai tietuetta muokataan, poistetaan tietueen historian vanhimmat merkinnät, jolloin niitä säilytetään vain määritetty määrä. + Limit the total size of history items per entry to: - Rajoita tietueiden historiamerkintöjen määrää: + Move entries to a recycle bin group instead of deleting them from the database. Entries deleted from the recycle bin are removed from the database. - Siirrä tietueet roskakoriryhmään pysyvän poiston sijaan. Roskakorista poistetut tietueet poistetaan tietokannasta pysyvästi. - - - Autosave delay since last change - Muutosta seuraavan automaattitallennuksen viive - - - Autosave delay - Automaattitallennuksen viive - - - Autosave delay since last change in minutes - Muutosta seuraavan automaattitallennuksen minuuttiviive - - - min - minuuttia - - - Autosave delay since last change checkbox - Muutosta seuraavan automaattitallennuksen viiveen valintalaatikko - - - Public Database Metadata - - Warning: the following settings are not encrypted. - Varoitus: seuraavia asetuksia ei ole salattu. - - - Display name: - Näyttönimi: - - - Publically visible display name used on the unlock dialog - Lukituksen avausikkunassa julkisesti näkyvä näyttönimi - - - Database public display name - Tietokannan julkinen näyttönimi - - - Display color: - Näyttöväri: - - - Publically visible color used on the unlock dialog - Lukituksen avausikkunassa julkisesti näkyvä väri - - - Database public display color chooser - Tietokannan julkisen näyttövärin valitsin - - - Clear - Tyhjennä - - - Display icon: - Näyttökuvake: - - - Select Database Icon - Valitse tietokantakuvake - DatabaseSettingsWidgetKeeShare @@ -2383,141 +2204,6 @@ removed from the database. Tietokannan kuvauskenttä - - DatabaseSettingsWidgetRemote - - Sync Commands - Synkronoinnin komennot - - - Remove - Poista - - - Command Settings - Komentoasetukset - - - Name - Nimi - - - Save - Tallenna - - - Download - Lataa - - - Command: - Komento: - - - Download command field - Latauskomento epäonnistui - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - Esim. "sftp user@hostname" tai "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - - - Input: - Syöte: - - - Download input field - Lataa syöte - - - Upload - Lähetä - - - Upload command field - Lähetä-komento epäonnistui - - - e.g.: "sftp user@hostname" or "scp {TEMP_DATABASE} user@hostname:DatabaseOnRemote.kdbx" - Esim. "sftp user@hostname" tai "scp {TEMP_DATABASE user@hostname:DatabaseOnRemote.kdbx" - - - Upload input field - Lähetyksen syöte - - - Name cannot be empty. - Nimi ei voi olla tyhjä. - - - Test - Testaa - - - Download command cannot be empty. - Latauskomento ei voi olla tyhjä. - - - Download failed with error: %1 - Lataus epäonnistui virheellä: - - - Download finished, but file %1 could not be found. - Lataus päättyi, mutta tiedostoa %1 ei löydy. - - - Download successful. - Lataus onnistui. - - - Save Remote Settings - Tallenna asetukset - - - You have unsaved changes. Do you want to save them? - Sinulla on tallentamattomia asetuksia. Haluatko tallettaa ne? - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - Esim. -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} -muuttujaa käytetään paikkamerkkinä tietokannan välikaikaisena sijaintina. -Komennon täytyy suoriutua. `sftp` -komennon ollessa viimeinen komento, `exit` täytyy lähettää. - - - - e.g.: -put {TEMP_DATABASE} DatabaseOnRemote.kdbx -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - Esim. -put {TEMP_DATABASE} DatabaseOnRemote.kdbx -exit ---- -{TEMP_DATABASE} -muuttujaa käytetään paikkamerkkinä tietokannan välikaikaisena sijaintina. -Komennon täytyy suoriutua. `sftp` -komennon ollessa viimeinen komento, `exit` täytyy lähettää. - - - - Timeout: - - - - seconds - sekuntia - - DatabaseTabWidget @@ -2550,10 +2236,26 @@ Tämä on selkeä virhe, joten ota yhteyttä kehittäjätiimiin. CSV file CSV-tiedosto + + Select CSV file + Valitse CSV-tiedosto + Merge database Yhdistä tietokanta + + KeePass 1 database + KeePass 1 -tietokanta + + + Open KeePass 1 database + Avaa KeePass 1 -tietokanta + + + Open OPVault + Avaa OPVault + Export database to CSV file Vie tietokanta CSV-tiedostoon @@ -2566,18 +2268,6 @@ Tämä on selkeä virhe, joten ota yhteyttä kehittäjätiimiin. Writing the HTML file failed. HTML-tiedoston kirjoittaminen epäonnistui. - - Export database to XML file - Vie tietokanta XML-tiedostoon - - - XML file - XML-tiedosto - - - Writing the XML file failed - XML-tiedoston tallennus epäonnistui - Export Confirmation Viennin vahvistus @@ -2586,23 +2276,35 @@ Tämä on selkeä virhe, joten ota yhteyttä kehittäjätiimiin. You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? Olet viemässä tietokantaasi salaamattomaan tiedostoon. Tämä jättää salasanasi ja minkä tahansa arkaluontoisen tiedon haavoittuvaksi! Oletko varma, että haluat jatkaa? + + New Database + Uusi tietokanta + + + %1 [New Database] + Database tab name modifier + %1 [Uusi tietokanta] + %1 [Locked] Database tab name modifier %1 [Lukittu] - %1 [Temporary] - Database tab name modifier - %1 [Väliaikainen] + Export database to XML file + + + + XML file + + + + Writing the XML file failed + DatabaseWidget - - Searches and Tags - Haut ja tunnisteet - Searching… Etsitään... @@ -2651,10 +2353,6 @@ Tämä on selkeä virhe, joten ota yhteyttä kehittäjätiimiin. Expired entries Vanhentuneet tietueet - - Entries expiring within %1 day(s) - %1 päivän kuluttua vanhentuva tietue%1 päivän kuluttua vanhentuva tietue - No current database. Ei nykyistä tietokantaa. @@ -2679,18 +2377,6 @@ Tämä on selkeä virhe, joten ota yhteyttä kehittäjätiimiin. No Results Ei tuloksia. - - Save - Tallenna - - - Enter a unique name or overwrite an existing search from the list: - Syötä yksilöllinen nimi tai korvaa listalla oleva aiempi haku: - - - Save Search - Tallenna haku - Lock Database? Lukitse tietokanta? @@ -2719,6 +2405,26 @@ Tallenna muutokset? File has changed Tiedosto on muuttunut + + The database file has changed. Do you want to load the changes? + Tietokantatiedosto on muuttunut. Haluatko ladata muutokset? + + + Merge Request + Yhdistämispyyntö + + + The database file has changed and you have unsaved changes. +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. +Error: %1 + Uutta tietokantaa ei voitu avata automaattisen uudelleenlatauksen yhteydessä. +Virhe: %1 + Disable safe saves? Ota turvallinen tallennus pois käytöstä? @@ -2761,94 +2467,25 @@ Ota turvallinen tallennus pois käytöstä ja yritä uudelleen? Could not find database file: %1 Tietokantatiedostoa ei löydy: %1 - - New Database - Uusi tietokanta + + Entries expiring within %1 day(s) + Tietueet jotka vanhenevat %1 päivässäTietueet jotka vanhenevat %1 päivässä - %1 [New Database] - Database tab name modifier - %1 [Uusi tietokanta] + Searches and Tags + Haut ja tunnisteet - Remote Sync did not contain any download or upload commands. - Etäsynkronointi ei sisältänyt yhtään lataus- tai lähetyskomentoa. - - - Remote sync '%1' completed successfully! - Etäsynkronointi '%1' suoritettiin onnistuneesti! - - - Remote sync '%1' failed: %2 - Etäsynkronointi '%1' epäonnistui: %2 - - - Error while saving database %1: %2 - Tietokannan %1 tallennus epäonnistui: %2 - - - Downloading... - Ladataan... - - - Uploading... - Lähetetään... - - - Syncing... - Synkronoidaan... - - - Remove passkey from entry - Poista pääsyavain tietueesta - - - Do you want to remove the passkey from this entry? - Haluatko poistaa pääsyavaimen tästä tietueesta? - - - The database file "%1" was modified externally + Enter a unique name or overwrite an existing search from the list: - Do you want to load the changes? - + Save + Tallenna - Reload database - - - - Reloading database… - - - - Reload canceled - - - - Reload successful - - - - Reload pending user action… - - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes<br>Ignore the changes on disk until save<br>Discard unsaved changes - - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes then save<br>Overwrite the changes on disk<br>Discard unsaved changes - - - - Database file overwritten. - - - - Database file on disk cannot be unlocked with current credentials.<br>Enter new credentials and/or present hardware key to continue. - + Save Search + Tallenna haku @@ -2901,6 +2538,10 @@ Ota turvallinen tallennus pois käytöstä ja yritä uudelleen? n/a ei saatavilla + + (encrypted) + (salattu) + Select private key Valitse yksityinen avain @@ -2987,10 +2628,6 @@ Haluatko korjata sen? Hide Piilota - - %n hour(s) - %n tunti%n tuntia - %n week(s) %n viikko%n viikkoa @@ -3003,9 +2640,9 @@ Haluatko korjata sen? %n year(s) %n vuosi%n vuotta - - Failed to decrypt SSH key, ensure password is correct. - SSH-avaimen purku epäonnistui. Varmista, että salasana on oikein. + + %n hour(s) + @@ -3125,20 +2762,10 @@ Haluatko korjata sen? Add new window association Lisää uusi ikkunan liitos - - + - Add item - + - Remove selected window association Poista valittu ikkunaliitos - - - - Remove item - - - Window title: Ikkunan otsikko: @@ -3163,9 +2790,23 @@ Haluatko korjata sen? Custom Auto-Type sequence for this window Mukautettu automaattisyötön sekvenssi tälle ikkunalle + + + + Add item + + + + + - + Remove item + - + EditEntryWidgetBrowser + + These settings affect to the entry's behaviour with the browser extension. + Tämä asetukset vaikuttavat tietueen toimintaan selainlaajennuksen kanssa. + General Yleistä @@ -3178,14 +2819,26 @@ Haluatko korjata sen? Skip Auto-Submit for this entry Älä salli automaattisyöttöä tälle tietueelle + + Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. + Lähetä tämä tietue vain HTTP-autentikaatiodialogeihin. Jos asetus on päällä, tavalliset kirjautumiskentät eivät näytä tätä tietuetta listassa. + Use this entry only with HTTP Basic Auth Käytä tietuetta vain HTTP Basic -autentikaatioon + + Do not send this setting to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. + Älä lähetä tätä tietuetta HTTP-autentikaatiodialogeihin. Jos asetus on päällä, tämä tietue näkyy vain tavallisissa kirjautumiskentissä. + Do not use this entry with HTTP Basic Auth Älä käytä tätä tietuetta HTTP Basic -autentikaatioon + + Additional URL's + Lisäosoitteet + Add Lisää @@ -3198,22 +2851,6 @@ Haluatko korjata sen? Edit Muokkaa - - These settings affect the entry's behaviour with the browser extension. - Nämä asetukset vaikuttavat tietueen käytökseen selainlaajennuksen kanssa. - - - Additional URLs - Lisäosoitteet - - - Only send this entry to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. - Lähetä tämä tietue vain HTTP-autentikaatiodialogeihin. Jos asetus on päällä, tavalliset kirjautumiskentät eivät näytä tätä tietuetta listassa. - - - Do not send this entry to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. - Älä lähetä tätä tietuetta HTTP-autentikaatiodialogeihin. Jos asetus on päällä, tämä tietue näkyy vain tavallisissa kirjautumiskentissä. - EditEntryWidgetHistory @@ -3262,7 +2899,7 @@ Haluatko korjata sen? Notes field - Muistiinpanokenttä + Muistiinpanojen kenttä Username field @@ -3310,35 +2947,35 @@ Haluatko korjata sen? &Username: - &Käyttäjätunnus: + &Title: - &Nimi: + &Password: - &Salasana: + UR&L: - UR&L-osoite: + &Notes: - &Muistiinpanot: + Toggle notes visibility - Kytke muistiinpanojen näyttö + T&ags: - T&unnisteet: + &Expires: - &Erääntyy: + @@ -3379,6 +3016,19 @@ Haluatko korjata sen? Private key Yksityinen avain + + External file + Ulkoinen tiedosto + + + Browser for key file + Selaa avaintiedostoa + + + Browse… + Button for opening file dialog + Selaa... + Attachment Liite @@ -3395,23 +3045,6 @@ Haluatko korjata sen? Remove from agent Poista agentista - - External file - Ulkoinen tiedosto - - - Browser for key file - Selaa avaintiedostoa - - - Browse… - Button for opening file dialog - Selaa... - - - Generate - Luo - Select attachment file Valitse liitetiedosto @@ -3436,10 +3069,6 @@ Haluatko korjata sen? seconds sekuntia - - Clear agent - - EditGroupWidget @@ -3451,6 +3080,10 @@ Haluatko korjata sen? Icon Kuvake + + Browser Integration + Selainintegraatio + Properties Ominaisuudet @@ -3467,10 +3100,6 @@ Haluatko korjata sen? Group has unsaved changes Ryhmällä on tallentamattomia muutoksia - - Browser Integration - Selainintegraatio - Enable Kytke päälle @@ -3524,19 +3153,11 @@ Haluatko korjata sen? Omit WWW subdomain from matching: - Älä huomioi WWW-aliverkkotunnusta tunnistuksessa: + Omit WWW subdomain from matching toggle for this and sub groups - WWW-aliverkkotunnuksen tunnistuskäytön kytkentä tälle ja aliryhmille - - - Restrict matching to given browser key: - Rajoita tunnistus annettuun selainavaimeen: - - - Restrict matching to given browser key toggle for this and sub groups - Tunnistuksen annettuun selainavaimeen rajoituksen kytkentä tälle ja aliryhmille + @@ -3618,15 +3239,15 @@ Tuetut tyypit ovat: %1. KeeShare is currently disabled. You can enable import/export in the application settings. KeeShare is a proper noun - KeeShare ei ole tällä hetkellä käytössä. Voit ottaa tuonnin/viennin käyttöön sovelluksen asetuksista. + KeeShare ei ole tällä hetkellä käytössä. Voit ottaa tuonnin/viennin käyttöön ohjelmiston asetuksista. Database export is currently disabled by application settings. - Tietokannan vienti ei ole sovelluksen asetuksissa käytössä. + Tietokannan vienti on poistettu käytöstä ohjelmiston asetuksissa. Database import is currently disabled by application settings. - Tietokannan tuonti ei ole sovelluksen asetuksissa käytössä. + Tietokannan tuonti on poistettu käytöstä ohjelmiston asetuksista. KeeShare container @@ -3697,7 +3318,7 @@ Tuetut tyypit ovat: %1. Notes field - Muistiinpanokenttä + Muistiinpanojen kenttä Name: @@ -3770,6 +3391,10 @@ Tuetut tyypit ovat: %1. Unable to fetch favicon. Faviconin noutaminen ei onnistu + + You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security + Voit asettaa DuckDuckGo:n ikonien lataukseen asetuksen Työkalut>Asetukset>Turvallisuus alta + Existing icon selected. Jo olemassa oleva ikoni valittu. @@ -3802,10 +3427,6 @@ Tuetut tyypit ovat: %1. The following icon(s) failed: Seuraava ikoni epäonnistui:Seuraavat ikonit epäonnistuivat: - - You can enable the DuckDuckGo website icon service under Application Settings -> Security - Voit ottaa DuckDuckGon sivustokuvakepalvelun käyttöön sovelluksen suojausasetuksista - EditWidgetProperties @@ -3882,24 +3503,6 @@ Tämä voi vikaannuttaa tietoa käyttävän liitännäisen. %1 - Clone %1 - Klooni - - Passkey - Pääsyavain - - - Invalid conversion type: %1 - Virheellinen muunnoksen tyyppi: %1 - - - Invalid conversion syntax: %1 - Virheellinen muutoksen syntaksi: %1 - - - Invalid regular expression syntax %1 -%2 - Virheellinen Regex-syntaksi %1 -%2 - EntryAttachments @@ -3908,21 +3511,6 @@ Tämä voi vikaannuttaa tietoa käyttävän liitännäisen. Tiedostoa "%1" ei voitu avata - - EntryAttachmentsDialog - - Form - Lomake - - - File name - - - - File contents... - - - EntryAttachmentsModel @@ -3960,6 +3548,14 @@ Tämä voi vikaannuttaa tietoa käyttävän liitännäisen. Remove Poista + + Rename selected attachment + Nimeä valittu liite uudelleen + + + Rename + Nimeä uudelleen + Open selected attachment Avaa valittu liite @@ -4035,6 +3631,12 @@ Tämä voi vikaannuttaa tietoa käyttävän liitännäisen. Confirm Overwrite Attachment Varmista liitetiedoston ylikirjoitus + + Attachment "%1" already exists. +Would you like to overwrite the existing attachment? + Liitetiedosto "%1" on jo olemassa. +Haluatko ylikirjoittaa sen? + Confirm Attachment Varmista liitetiedosto @@ -4069,24 +3671,6 @@ Error: %1 Päivitetyn liitetiedoston tallennus epäonnistui. Virhe: %1 - - Attachment "%1" already exists. -Would you like to overwrite the existing attachment? - Liitetiedosto "%1" on jo olemassa. -Haluatko ylikirjoittaa sen? - - - New - - - - Preview - Esikatselu - - - Failed to preview an attachment: Attachment not found - - EntryAttributesModel @@ -4281,14 +3865,6 @@ Haluatko ylikirjoittaa sen? Has TOTP Sisältää TOTP:n - - Background Color - Taustaväri - - - Group Path - - EntryPreviewWidget @@ -4309,8 +3885,8 @@ Haluatko ylikirjoittaa sen? Salasana - URL - URL + Notes + Muistiinpanot Expiration @@ -4329,8 +3905,8 @@ Haluatko ylikirjoittaa sen? Käyttäjätunnus - Notes - Muistiinpanot + URL + URL Advanced @@ -4380,10 +3956,6 @@ Haluatko ylikirjoittaa sen? Never Ei koskaan - - Double click to copy value - Tuplaklikkaa kopioidaksesi arvo - Enabled Käytössä @@ -4393,8 +3965,8 @@ Haluatko ylikirjoittaa sen? Pois käytöstä - Double click to copy to clipboard - Kopioi leikepöydälle kaksoisklikkauksella + Double click to copy value + Tuplaklikkaa kopioidaksesi arvo @@ -4403,10 +3975,6 @@ Haluatko ylikirjoittaa sen? Invalid URL Virheellinen URL - - Duplicate URL - Monista URL-osoite - EntryView @@ -4422,10 +3990,6 @@ Haluatko ylikirjoittaa sen? Reset to defaults Palauta oletusasetukset - - + %1 entry(s)... - + %1 tietuetta...+ %1 tietue... - ExportDialog @@ -4536,7 +4100,7 @@ Tämä jättää salasanasi ja minkä tahansa arkaluontoisen tiedon haavoittuvak %n Entry(s) was used by %1 %1 is the name of an application - %n tietue käytetiin %1%n tietuetta käytettiin %1 + %1 tietuetta käytettiin %1:n toimesta%1 tietuetta käytettiin %1:n toimesta @@ -4607,8 +4171,8 @@ Tämä jättää salasanasi ja minkä tahansa arkaluontoisen tiedon haavoittuvak Having trouble downloading icons? You can enable the DuckDuckGo website icon service in the security section of the application settings. - Onko kuvakkeiden latauksessa ongelmia? -Voit aktivoida DuckDuckGon kuvakepalvelun sovelluksen suojausasetuksista. + Onko ikonien latauksessa ongelmia? +Voit käyttää DuckDuckGo:ta ikonien lataukseen ohjelmiston turvallisuusasetuksia muokkaamalla. Close @@ -4647,193 +4211,6 @@ Voit aktivoida DuckDuckGon kuvakepalvelun sovelluksen suojausasetuksista.Ladataan faviconeja (%1/%2)... - - ImportWizard - - Import Wizard - Ohjattu tuonti - - - - ImportWizardPageReview - - WizardPage - Ohjattu sivu - - - Entry count: %1 - Tietueiden määrä: %1 - - - Group - Ryhmä - - - Title - Otsikko - - - Username - Käyttäjätunnus - - - Password - Salasana - - - Url - Osoite - - - Could not load key file. - - - - Could not open remote database. Password or key file may be incorrect. - - - - - ImportWizardPageSelect - - Form - Lomake - - - Import File Selection - Tuontitiedoston valinta - - - Password: - Salasana: - - - Key File: - Avaintiedosto: - - - Browse… - Selaa... - - - Import Into: - Tuo kohteeseen: - - - New Database - Uusi tietokanta - - - No unlocked databases available - Ei auki olevia tietokantoja - - - Existing Database: - Olemassa oleva tietokanta: - - - Import File: - Tuontitiedosto: - - - Comma Separated Values (.csv) - Comma Separated Values (.csv) - - - 1Password Export (.1pux) - 1Password-vientitiedosto (.1pux) - - - 1Password Vault (.opvault) - 1Password-holvi (.opvault) - - - Bitwarden (.json) - Bitwarden (.json) - - - KeePass 1 Database (.kdb) - KeePass 1 -tietokanta (.kdb) - - - Open OPVault - Avaa OPVault - - - Select import file - Valitse tuontitiedosto - - - All files - Kaikki tiedostot - - - Key files - Avaintiedostot - - - Select key file - Valitse avaintiedosto - - - Comma Separated Values - Comma Separated Values - - - 1Password Export - 1Password-vienti - - - Bitwarden JSON Export - Bitwarden JSON-vienti - - - 1Password Vault - 1Password-holvi - - - KeePass1 Database - KeePass1-tietokanta - - - Proton Pass (.json) - Proton Pass (.json) - - - Proton Pass JSON Export - Proton Pass -JSON-vienti - - - Temporary Database - - - - Command: - Komento: - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - Esim. "sftp user@hostname" tai "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - - - Input: - Syöte: - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last commend `exit` has to be sent - - - - - Remote Database (.kdbx) - Etätietokanta (.kdbx) - - KMessageWidget @@ -4862,8 +4239,8 @@ The command has to exit. In case of `sftp` as last commend `exit` has to be sent Invalid credentials were provided, please try again. If this reoccurs, then your database file may be corrupt. - Virheelliset tunnistetiedot. Yritä uudelleen. -Jos tämä toistuu, tietokantasi on saattanut vioittuna. + Väärät tilitiedot, ole hyvä ja koita uudestaan. +Jos tämä toistuu, tietokantasi voi olla viallinen. Header doesn't match hash @@ -4919,8 +4296,8 @@ Jos tämä toistuu, tietokantasi on saattanut vioittuna. Invalid credentials were provided, please try again. If this reoccurs, then your database file may be corrupt. - Virheelliset tunnistetiedot. Yritä uudelleen. -Jos tämä toistuu, tietokantasi on saattanut vioittuna. + Väärät tilitiedot, ole hyvä ja koita uudestaan. +Jos tämä toistuu, tietokantasi voi olla viallinen. (HMAC mismatch) @@ -5268,6 +4645,17 @@ Rivi %2, sarake %3 Yksityisen avaimen avaaminen epäonnistui + + KeePass1OpenWidget + + Import KeePass1 Database + Tuo KeePass1-tietokanta + + + Unable to open the database. + Tietokannan avaaminen epäonnistui. + + KeePass1Reader @@ -5330,8 +4718,8 @@ Rivi %2, sarake %3 Invalid credentials were provided, please try again. If this reoccurs, then your database file may be corrupt. - Virheelliset tunnistetiedot. Yritä uudelleen. -Jos tämä toistuu, tietokantasi on saattanut vioittuna. + Väärät tilitiedot, ole hyvä ja koita uudestaan. +Jos tämä toistuu, tietokantasi voi olla viallinen. Key transformation failed @@ -5624,6 +5012,10 @@ Haluatko jatkaa käyttämällä tätä tiedostoa? &Recent Databases &Viimeisimmät tietokannat + + &Import + &Tuo + &Export &Vie @@ -5644,10 +5036,6 @@ Haluatko jatkaa käyttämällä tätä tiedostoa? TOTP TOTP - - Tags - Tagit - &Groups Ryhmät @@ -5692,18 +5080,34 @@ Haluatko jatkaa käyttämällä tätä tiedostoa? &New Database… &Uusi tietokanta… + + Create a new database + Luo uusi tietokanta + &Merge From Database… &Yhdistä tietokannasta… + + Merge from another KDBX database + Yhdistä toisesta KDBX-tietokannasta + &New Entry… &Uusi tietue… + + Add a new entry + Lisää uusi tietue + &Edit Entry… &Muokkaa tietuetta… + + View or edit entry + Katso tai muokkaa tietuetta + &Delete Entry… &Poista tietue… @@ -5712,6 +5116,10 @@ Haluatko jatkaa käyttämällä tätä tiedostoa? &New Group… &Uusi ryhmä… + + Add a new group + Lisää uusi ryhmä + &Edit Group… &Muokkaa ryhmää… @@ -5744,10 +5152,18 @@ Haluatko jatkaa käyttämällä tätä tiedostoa? Database &Reports… Tietokannan &raportit... + + Statistics, health check, etc. + Tilastot, kelvollisuuden tarkastus jne. + &Database Settings… &Tietokannan asetukset… + + Database settings + Tietokannan asetukset + &Clone Entry… &Kloonaa tietue… @@ -5756,18 +5172,34 @@ Haluatko jatkaa käyttämällä tätä tiedostoa? Move u&p Siirrä &ylös + + Move entry one step up + Siirrä tietue yksi rivi ylemmäs + Move do&wn Siirrä &alas + + Move entry one step down + Siirrä tietue yksi rivi alemmas + Copy &Username Kopioi &käyttäjätunnus + + Copy username to clipboard + Kopioi käyttäjätunnus leikepöydälle + Copy &Password Kopioi &salasana + + Copy password to clipboard + Kopioi salasana leikepöydälle + &Settings &Asetukset @@ -5801,13 +5233,21 @@ Haluatko jatkaa käyttämällä tätä tiedostoa? &Otsikko - Copy &URL - Kopioi &URL-osoite + Copy title to clipboard + Kopioi nimi leikepöydälle + + + Copy URL to clipboard + Kopioi osoite leikepöydälle &Notes &Muistiinpanot + + Copy notes to clipboard + Kopioi muistiinpanot leikepöydälle + &CSV File… &CSV-tiedosto… @@ -5820,14 +5260,26 @@ Haluatko jatkaa käyttämällä tätä tiedostoa? KeePass 1 Database… KeePass 1 -tietokanta + + Import a KeePass 1 database + Tuo KeePass 1 -tietokanta + 1Password Vault… !Password-holvi... + + Import a 1Password Vault + Tuo 1Password-holvi + CSV File… CSV-tiedosto... + + Import a CSV file + Tuo CSV-tiedosto + Show TOTP Näytä TOTP @@ -5844,10 +5296,6 @@ Haluatko jatkaa käyttämällä tätä tiedostoa? Copy &TOTP Kopioi &TOTP - - Copy Password and TOTP - Kopioi salasana ja TOTP - E&mpty recycle bin &Tyhjennä roskakori @@ -5872,6 +5320,10 @@ Haluatko jatkaa käyttämällä tätä tiedostoa? &Online Help &Verkko-ohje + + Go to online documentation + Siirry online-dokumentaatioon + &User Guide &Käyttäjäopas @@ -5916,10 +5368,6 @@ Haluatko jatkaa käyttämällä tätä tiedostoa? Classic (Platform-native) Klassinen (käyttöjärjestelmän oma) - - Show Menubar - Näytä työkalupalkki - Show Toolbar Näytä työkalupalkki @@ -5934,7 +5382,7 @@ Haluatko jatkaa käyttämällä tätä tiedostoa? Hide Usernames - Piilota käyttäjätunnukset + Piilota käyttäjänimet Hide Passwords @@ -5944,10 +5392,6 @@ Haluatko jatkaa käyttämällä tätä tiedostoa? Clone Group... Kloonaa ryhmä - - &XML File… - &XML-tiedosto… - Clear history Tyhjennä historia @@ -5975,8 +5419,10 @@ Expect some bugs and minor issues, this version is meant for testing purposes. - No Tags - Tunnisteita ei ole + 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öllä näkyvällä näppäimistöllä! +Suosittelemme, että käytät AppImagea, jonka voit hakea lataussivustoltamme. Restore Entry(s) @@ -6006,10 +5452,6 @@ Bugeja ja ongelmia voi esiintyä. Tämä versio on tarkoitettu vain testikäytt Quit KeePassXC Sulje KeePassXC - - %1 Entry(s) - %1 tietue%1 tietuetta - Please present or touch your YubiKey to continue… Ole hyvä ja käytä Yubikeyssä jatkaaksesi... @@ -6022,312 +5464,36 @@ Bugeja ja ongelmia voi esiintyä. Tämä versio on tarkoitettu vain testikäytt You must restart the application to apply this setting. Would you like to restart now? Ohjelma täytyy käynnistää uudelleen, jotta asetus voidaan ottaa käyttöön. Haluatko käynnistää uudelleen nyt? + + Tags + Tagit + + + No Tags + Ei tunnisteita + + + %1 Entry(s) + + + + Copy Password and TOTP + Kopioi salasana ja TOTP + + + &XML File… + + + + XML File… + + + + Copy &URL + + Allow Screen Capture - Salli kuvankaappaus - - - 1Password 1PUX... - 1Password 1PUX... - - - Import a 1Password 1PUX file - Tuo 1Passwordin 1PUX-tiedosto - - - Import… - Tuo... - - - Passkeys… - Pääsyavaimet... - - - Import Passkey - Tuo pääsyavain - - - Remote S&ync… - Etäs&ynkronointi... - - - Quit Application - Sammuta sovellus - - - Open About Dialog - Avaa tietoja ohjelmasta -dialogi - - - Open Database - Avaa tietokanta - - - Create Database - Luo tietokanta - - - Merge From Database - Yhdistä tietokannasta - - - Create Entry - Luo tietue - - - Edit Entry - Muokkaa tietuetta - - - Delete Entry - Poista tietue - - - Create Group - Luo ryhmä - - - Edit Group - Muokkaa ryhmää - - - Delete Group - Poista ryhmä - - - Download All Favicons - Lataa kaikki faviconit - - - Sort Groups A-Z - Järjestä ryhmät A-Ö - - - Sort Groups Z-A - Järjestä ryhmät Ö-A - - - Save Database As - Tallenna tietokanta nimellä - - - Show Database Security - Näytä tietokannan turvallisuus - - - Show Database Reports - Näytä tietokannan raportit - - - Show Database Settings - Näytä tietokannan asetukset - - - Show Passkeys - pääsyavaimet - - - Clone Entry - Kloonaa tietue - - - Move Entry Up - Siirrä tietue ylös - - - Move Entry Down - Siirrä tietue alas - - - Copy Username - Kopioi käyttäjätunnus - - - Copy Password - Kopioi salasana - - - Show Application Settings - Näytä sovelluksen asetukset - - - Show Password Generator - Näytä salasanageneraattori - - - Remove Passkey From Entry - Poista pääsyavain tietueesta - - - Perform Auto-Type: {USERNAME} - Suorita automaattisyöttö: {USERNAME} - - - Perform Auto-Type: {USERNAME}{ENTER} - Suorita automaattisyöttö: {USERNAME}{ENTER} - - - Perform Auto-Type: {PASSWORD} - Suorita automaattisyöttö: {PASSWORD} - - - Perform Auto-Type: {PASSWORD}{ENTER} - Suorita automaattisyöttö: {PASSWORD}{ENTER} - - - Perform Auto-Type: {TOTP} - Suorita automaattisyöttö: {TOTP} - - - Copy Title - Kopioi otsikko - - - Copy URL - Kopioi URL-osoite - - - Copy Notes - Kopioi muistiinpanot - - - Export to CSV - Vie CSV-tiedostoon - - - Export to HTML - Vie HTML-tiedostoon - - - Import KeePass1 Database - Tuo KeePass1-tietokanta - - - Import 1Password Vault - Tuo 1Password-holvi - - - Import CSV File - Tuo CSV-tiedosto - - - Show TOTP QR Code - Näytä TOTP QR-koodi - - - Set up TOTP - Aseta TOTP - - - Empty Recycle Bin - Tyhjennä roskakori - - - Open Donation Website - Avaa lahjoitussivusto - - - Open Bug Report - Avaa bugiraporttisivusto - - - Open Online Documentation - Avaa online-dokumentaatio - - - Open Keyboard Shortcuts Guide - Avaa pikanäppäinten ohjesivu - - - Save Database Backup - Tallenna tietokannan varmuuskopio - - - SSH Agent: Add Key - SSH-agentti: Lisää avain - - - SSH Agent: Remove Key - SSH-agentti: Poista avain - - - Toggle Compact Mode - Aseta kompakti tila - - - Set Theme: Automatic - Aseta teema: automaattinen - - - Set Theme: Light - Aseta teema: vaalea - - - Set Theme: Dark - Aseta teema: tumma - - - Set Theme: Classic - Aseta teema: klassinen - - - Toggle Show Menubar - Aseta: näytä työkalupalkki - - - Toggle Show Toolbar - Aseta: näytä työkalupalkki - - - Toggle Show Preview Panel - Aseta: näytä esikatselupaneeli - - - Toggle Always on Top - Aseta: aina päällimmäisenä - - - Toggle Hide Usernames - Aseta: piilota käyttäjätunnukset - - - Toggle Hide Passwords - Aseta: piilota salasanat - - - Export to XML - Vie XML-tiedostoon - - - Toggle Allow Screen Capture - Aseta: salli kuvankaappaus - - - Show Group Panel - Näytä ryhmäpaneeli - - - Toggle Show Group Panel - Näytä tai piilota ryhmäpaneeli - - - Setup Remote Sync… - Määritä etäsynkronointi - - - Password Generator - Salasanageneraattori - - - E&xpire Entry… - - - - Clear SSH Agent - - - - Clear all identities in ssh-agent @@ -6387,6 +5553,26 @@ Bugeja ja ongelmia voi esiintyä. Tämä versio on tarkoitettu vain testikäytt Overwriting %1 [%2] Ylikirjoitetaan %1 [%2] + + older entry merged from database "%1" + vanhempi tietue yhdistetty tietokannasta "%1" + + + Adding backup for older target %1 [%2] + Lisätään varmuuskopio vanhemmalle kohteelle %1 [%2] + + + Adding backup for older source %1 [%2] + Lisätään varmuuskopio vanhemmalle lähteelle %1 [%2] + + + Reapplying older target entry on top of newer source %1 [%2] + Uudelleensijoitetaan vanhempi kohdetietue uuden lähteen päälle %1 [%2] + + + Reapplying older source entry on top of newer target %1 [%2] + Uudelleensijoitetaan vanhempi lähdetietue uuden kohteen päälle %1 [%2] + Synchronizing from newer source %1 [%2] Synkronoidaan uudemmasta lähteestä %1 [%2] @@ -6446,16 +5632,24 @@ Bugeja ja ongelmia voi esiintyä. Tämä versio on tarkoitettu vain testikäytt Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. Täällä voit säätää tietokannan salausasetuksia. Voit muokata niitä myöhemmin uudelleen. + + Advanced Settings + Lisäasetukset + + + Simple Settings + Yksinkertaiset asetukset + NewDatabaseWizardPageDatabaseKey Database Credentials - Tietokannan tunnistetiedot + Tietokannan tietueet A set of credentials known only to you that protects your database. - Tietokannan suojaukseen määrittämäsi tietueryhmä + Tietokannan suojelemiseksi tarkoitettu tietueiden ryhmä @@ -6480,25 +5674,6 @@ Bugeja ja ongelmia voi esiintyä. Tämä versio on tarkoitettu vain testikäytt Ole hyvä ja täytä tietokantasi nimi ja vapaaehtoinen kuvaus: - - NewEntryAttachmentsDialog - - Attachment name cannot be empty - - - - Attachment with the same name already exists - - - - Save attachment - Tallenna liite - - - New entry attachment - - - NixUtils @@ -6545,6 +5720,15 @@ Bugeja ja ongelmia voi esiintyä. Tämä versio on tarkoitettu vain testikäytt Odotettiin %1 tavua selkotekstiä, löydettiin %2 + + OpVaultOpenWidget + + Read Database did not produce an instance +%1 + Tietokannan lukeminen ei luonut instanssia +%1 + + OpVaultReader @@ -6618,10 +5802,6 @@ Bugeja ja ongelmia voi esiintyä. Tämä versio on tarkoitettu vain testikäytt Unknown cipher: %1 Tuntematon salausalgoritmi: %1 - - AES-256/GCM is currently not supported - AES-256/GCM-salausta ei tällä hetkellä tueta - Passphrase is required to decrypt this key Avaimen purkuun vaaditaan salalause @@ -6687,183 +5867,8 @@ Bugeja ja ongelmia voi esiintyä. Tämä versio on tarkoitettu vain testikäytt Odottamaton EOF yksityistä avainta kirjoittaessa - (encrypted) - (salattu) - - - - OpenSSHKeyGenDialog - - SSH Key Generator - SSH-avaingeneraattori - - - Type - Tyyppi - - - Bits - Bitit - - - Comment - Kommentti - - - - PasskeyExportDialog - - KeePassXC - Passkey Export - KeePassXC - Pääsyavaimen vienti - - - Filenames will be generated with title and .passkey file extension. - Tiedostot luodaan tietueiden nimillä ja .passkey-päätteellä. - - - Export entries - Vie tietueet - - - Export Selected - Vie valitut - - - Cancel - Peruuta - - - Export to folder - Vie kansioon - - - Export the following passkey entries. - Vie seuraavat pääsyavaintietueet. - - - - PasskeyExporter - - KeePassXC: Passkey Export - KeePassXC: Pääsyavaimen vienti - - - File "%1.passkey" already exists. -Do you want to overwrite it? - - Tiedosto "%1.passkey" on jo olemassa. -haluatko korvata sen? - - - - Cannot open file - Tiedoston avaus ei onnistu - - - Cannot open file "%1" for writing. - Tiedoston "%1" avaus muokattavaksi ei onnistu. - - - Cannot write to file - Tiedostoa ei voida tallentaa - - - - PasskeyImportDialog - - KeePassXC - Passkey Import - KeePassXC - Pääsyavaimen vienti - - - Username: %1 - Käyttäjätunnus: %1 - - - Group - Ryhmä - - - Database - Tietokanta - - - Import Passkey - Tuo pääsyavain - - - Import - Tuo - - - Cancel - Peruuta - - - Entry - Tietue - - - Create new entry - Luo uusi tietue - - - Relying Party: %1 - Välittävä osapuoli: %1 - - - Import the following passkey: - Tuo seuraava pääsyavain: - - - Import the following passkey to this entry: - Tuo seuraava pääsyavain tähän tietueeseen: - - - Default passkeys group (Imported Passkeys) - Pääsyavainten oletusryhmä (Tuodut pääsyavaimet) - - - - PasskeyImporter - - Passkey file - Pääsyavaintiedosto - - - All files - Kaikki tiedostot - - - Cannot open file - Tiedoston avaus ei onnistu - - - Cannot open file "%1" for reading. - Tiedoston "%1" luku ei onnistu. - - - Open passkey file - Avaa pääsyavaintiedosto - - - Cannot import passkey - Pääsyavainta ei voitu tuoda - - - Cannot import passkey file "%1". Data is missing. - Pääsyavaintiedostoa "%1" ei voitu tuoda. Tietoja puuttuu. - - - Cannot import passkey file "%1". -The following data is missing: -%2 - Pääsyavaintiedostoa ei voida tuoda "%1". -Seuraavat tiedot puuttuvat: -%2 - - - Cannot import passkey file "%1". Private key is missing or malformed. - Pääsyavaintiedostoa ei voida tuoda "%1". Yksityinen avain puuttuu tai on virheellinen. + AES-256/GCM is currently not supported + @@ -7068,6 +6073,10 @@ Seuraavat tiedot puuttuvat: Word Count: Sanamäärä: + + Character Count: + Merkkien lukumäärä: + Word Case: Aakkoslaji: @@ -7080,6 +6089,10 @@ Seuraavat tiedot puuttuvat: Add custom wordlist Lisää mukautettu sanalista + + character + merkki + Close Sulje @@ -7116,30 +6129,6 @@ Seuraavat tiedot puuttuvat: 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 - Confirm Delete Wordlist Vahvista sanalistan poisto @@ -7187,20 +6176,32 @@ Haluatko ylikirjoittaa sen? Erikoismerkit - passwordLength - salasanan pituus + Password Quality: %1 + Salasanan laatu: %1 - Characters: %1 - Krijaimia: %1 + Poor + Password quality + Huono - MIXED case - + Weak + Password quality + Heikko - Excluded characters: "0", "1", "l", "I", "O", "|", "﹒", "B", "8", "G", "6" - Pois suljetut merkit: ”0”, ”1”, ”l”, ”I”, ”O”, ”|”, ”﹒”, ”B”, ”8”, ”G”, ”6” + Good + Password quality + Hyvä + + + Excellent + Password quality + Erinomainen + + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + Poissuljetut kirjaimet: "0", "1", "l", "I", "O", "|", "﹒" @@ -7250,8 +6251,8 @@ Haluatko ylikirjoittaa sen? Erinomainen - Toggle password visibility using Control + H. Open the password generator using Control + G. - Kytke salasanan näyttö Ctrl+H-näppäinyhdistelmällä. Avaa salasanageneraattori painamalla Ctrl+G. + Toggle password visibilty using Control + H. Open the password generator using Control + G. + @@ -7269,21 +6270,6 @@ Haluatko ylikirjoittaa sen? Paina &Tab merkkien välillä - - PreviewEntryAttachmentsDialog - - Preview entry attachment - - - - No preview available - - - - Image format not supported - - - QMessageBox @@ -7322,10 +6308,6 @@ Haluatko ylikirjoittaa sen? Continue Jatka - - Continue with weak password - Jatka heikolla salasalanalla - QObject @@ -7407,7 +6389,7 @@ Haluatko ylikirjoittaa sen? Username for the entry. - Tietueen käyttäjätunnus. + Tietueen käyttäjänimi. username @@ -7719,10 +6701,6 @@ Haluatko ylikirjoittaa sen? Too many arguments provided. Liian monta argumenttia annettu - - Path of the database. - Tietokannan polku. - Target decryption time in MS for the database. Kohteen salauksen purkuun kuluva aika millisekunneissa tietokannalle. @@ -7743,6 +6721,10 @@ Haluatko ylikirjoittaa sen? Create a new database. Luo uusi tietokanta. + + Path of the database. + Tietokannan polku. + Invalid decryption time %1. Virheellinen salauksen purun aika %1. @@ -7787,158 +6769,6 @@ Haluatko ylikirjoittaa sen? Successfully created new database. Luotiin onnistuneesti uusi tietokanta. - - Unset the password for the database. - Poista tietokannan salasanamääritys. - - - Unset the key file for the database. - Poista tietokannan avaintiedostomääritys. - - - Edit a database. - Muokkaa tietokantaa. - - - Cannot use %1 and %2 at the same time. - Näitä ei voida käyttää samanaikaisesti: %1 ja %2. - - - Could not change the database key. - Tietokannan avaintiedostoa ei voitu vaihtaa. - - - Database was not modified. - Tietokantaa ei muokattu. - - - Writing the database failed: %1 - Tietokannan kirjoittaminen epäonnistui: %1 - - - Successfully edited the database. - Tietokantaa muokattiin. - - - Cannot remove password: The database does not have a password. - Salasanamääritystä ei voida poistaa: tietokannalla ei ole salasanaa. - - - Cannot remove file key: The database does not have a file key. - Avaintiedostomääritystä ei voida poistaa: tietokannalla ei ole avaintiedostoa. - - - Loading the new key file failed: %1 - Uuden avaintiedoston lataus epäonnistui: %1 - - - Found unexpected Key type %1 - Löytyi odottamaton avaintyyppi %1 - - - Cannot remove all the keys from a database. - Tietokannan kaikkia avaimia ei voida poistaa. - - - Show a database's information. - Näytä tietokannan tiedot. - - - UUID: - UUID: - - - Name: - Nimi: - - - Description: - Kuvaus: - - - Cipher: - Salaus: - - - KDF: - KDF: - - - Recycle bin is enabled. - Roskakori on otettu käyttöön. - - - Recycle bin is not enabled. - Roskakori ei ole käytössä. - - - Location - Sijainti - - - Database created - Tietokanta luotu - - - Last saved - Viimeksi tallennettu - - - Unsaved changes - Tallentamattomia muutoksia - - - yes - kyllä - - - no - ei - - - Number of groups - Ryhmien määrä - - - Number of entries - Tietueiden lukumäärä - - - Number of expired entries - Vanhentuneiden tietueiden lukumäärä - - - Unique passwords - Yksilöllisiä salasanoja - - - Non-unique passwords - Ei-yksilöllisiä salasanoja - - - Maximum password reuse - Maksimimäärä samoja salasanoja - - - Number of short passwords - Lyhyiden salasanojen määrä - - - Number of weak passwords - Heikkojen salasanojen määrä - - - Entries excluded from reports - Tietueet jotka on poissuljettu raporteista - - - Average password length - Salasanan keskimääräinen pituus - - - %1 characters - %1 merkkiä - Word count for the diceware passphrase. Sanamäärä noppaware-salalauseelle. @@ -7962,6 +6792,10 @@ Haluatko ylikirjoittaa sen? Invalid word count %1 Väärä sanamäärä %1 + + The word list is too small (< 1000 items) + Sanalista on liian pieni (< 1000 sanaa) + Title for the entry. Tietueen nimi @@ -7986,6 +6820,10 @@ Haluatko ylikirjoittaa sen? 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. @@ -8106,6 +6944,10 @@ Haluatko ylikirjoittaa sen? Exit interactive mode. Poistu interaktiivisesta tilasta. + + Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. + Viennissä käytettävä formaatti. Mahdolliset vaihtoehdot ovat 'xml' tai 'csv'. Oletus on 'xml'. + Exports the content of a database to standard output in the specified format. Vie tietokannan sisällön standardiin tulosteeseen (stdout) halutussa formaatissa. @@ -8206,6 +7048,106 @@ Haluatko ylikirjoittaa sen? Successfully imported database. Tietokanta tuotiin onnistuneesti. + + Show a database's information. + Näytä tietokannan tiedot. + + + UUID: + UUID: + + + Name: + Nimi: + + + Description: + Kuvaus: + + + Cipher: + Salaus: + + + KDF: + KDF: + + + Recycle bin is enabled. + Roskakori on otettu käyttöön. + + + Recycle bin is not enabled. + Roskakori ei ole käytössä. + + + Location + Sijainti + + + Database created + Tietokanta luotu + + + Last saved + Viimeksi tallennettu + + + Unsaved changes + Tallentamattomia muutoksia + + + yes + kyllä + + + no + ei + + + Number of groups + Ryhmien määrä + + + Number of entries + Tietueiden lukumäärä + + + Number of expired entries + Vanhentuneiden tietueiden lukumäärä + + + Unique passwords + Yksilöllisiä salasanoja + + + Non-unique passwords + Ei-yksilöllisiä salasanoja + + + Maximum password reuse + Maksimimäärä samoja salasanoja + + + Number of short passwords + Lyhyiden salasanojen määrä + + + Number of weak passwords + Heikkojen salasanojen määrä + + + Entries excluded from reports + Tietueet jotka on poissuljettu raporteista + + + Average password length + Salasanan keskimääräinen pituus + + + %1 characters + %1 merkkiä + Unknown command %1 Tuntematon komento %1 @@ -8254,7 +7196,7 @@ Käytettävissä olevat komennot: Use the same credentials for both database files. - Käytä samoja tunnistetietoja molemmille tietokantatiedostoille. + Käytä samoja tilitietoja molemmille tietokantatiedostoille. Key file of the database to merge from. @@ -8378,10 +7320,6 @@ Käytettävissä olevat komennot: Show the protected attributes in clear text. Näytä suojatut attribuutit selkotekstinä. - - Show all the attributes of the entry. - Näytä tietueen kaikki attribuutit. - Show the attachments of the entry. Näytä tietueen liitteet. @@ -8452,10 +7390,6 @@ Ole hyvä ja harkitse uuden avaintiedoston luomista. Invalid YubiKey serial %1 Virheellinen Yubikeyn serial %1 - - Please present or touch your YubiKey to continue. - Jatka kytkemällä YubiKey-avaimesi tai koskettamalla sitä. - Enter password to encrypt database (optional): Syötä salasana salataksesi tietokannan (valinnainen): @@ -8604,7 +7538,7 @@ Ydin: %3 %4 Quick Unlock - Pika-avaus + Nopea lukituksen avaus Secret Service Integration @@ -8644,7 +7578,7 @@ Ydin: %3 %4 Botan library must be at least %1, found %2.%3.%4 - Botan-kirjaston tulee olla ainakin %1, löytyi %2.%3.%4 + Cryptographic libraries: @@ -8694,6 +7628,18 @@ Ydin: %3 %4 file empty tyhjä tiedosto + + malformed string + Viallinen merkkijono + + + missing closing quote + lainausmerkki puuttuu lopusta + + + %1: (row, col) %2,%3 + %1: (rivi, sarake) %2,%3 + AES 256-bit AES 256-bit @@ -8872,6 +7818,14 @@ Ydin: %3 %4 read password of the database from stdin lue tietokannan salasana stdin:istä + + allow app screen recordering and screenshots + salli sovelluksen näytön tallentaminen ja ruudunkaappaukset + + + Locked databases. + Lukitut tietokannat. + Database failed to lock. Tietokannan lukitus ei onnistunut. @@ -8880,10 +7834,6 @@ Ydin: %3 %4 Another instance of KeePassXC is already running. Toinen KeePassXC-instanssi on jo käynnissä. - - KeePassXC is not running. No open database to lock - KeePassXC ei ole käynnissä. Avoimia, lukittavia tietokantoja ei ole. - Fatal error while testing the cryptographic functions. Vakava virhe kryptografisia toimintoa testattaessa. @@ -8916,312 +7866,81 @@ Ydin: %3 %4 Warning: Failed to block screenshot capture on a top-level window. - Varoitus: Kuvankaappauksen esto ylätason ikkunasta epäonnistui. + Invalid Cipher - Virheellinen salakirjoitus + Invalid KDF - Virheellinen KDF + - Access to all entries is denied - Kaikkien tiedoeiden käyttö on estetty + Please present or touch your YubiKey to continue. + Jatka kytkemällä YubiKey-avaimesi tai koskettamalla sitä - allow screenshots and app recording (Windows/macOS) - salli kuvankaappaukset ja sovelluksen tallennus (Windows/macOS). + Show all the attributes of the entry. + Näytä tietueen kaikki attribuutit. + + + Edit a database. + + + + Could not change the database key. + + + + Database was not modified. + + + + Successfully edited the database. + + + + Loading the new key file failed: %1 + + + + Unset the password for the database. + + + + Unset the key file for the database. + + + + Cannot use %1 and %2 at the same time. + + + + Cannot remove all the keys from a database. + + + + Cannot remove password: The database does not have a password. + + + + Cannot remove file key: The database does not have a file key. + + + + Found unexpected Key type %1 + Set the key file for the database. -This option is deprecated, use --set-key-file instead. - Aseta tietokannan avaintiedosto. -Asetus on vanhentunut, käytä sen sijaan "--set-key-file" -määritystä. - - - Databases have been locked. - Tietokannat on lukittu. - - - Attestation not supported - Todennusta ei tueta - - - Credential is excluded - Tietuetta on rajoitettu - - - Passkeys request canceled - Pääsyavainpyyntö peruttiin - - - Invalid user verification - Virheellinen käyttäjävahvistus - - - Empty public key - Tyhjä julkinen avain - - - Invalid URL provided - Ilmoitettu URL-osoite ei kelpaa - - - Passkeys - Pääsyavaimet - - - AES initialization failed - AES-alustus epäonnistui - - - AES encrypt failed - AES-salaus epäonnistui - - - Failed to store in Linux Keyring - Tallennus Linux-avainrenkaaseen epäonnistui - - - Polkit returned an error: %1 - Polkit palautti virheen: %1 - - - Could not locate key in keyring - Avainta ei löytynyt avainrenkaasta - - - Could not read key in keyring - Avainta ei voitu lukea avainrenkaasta - - - AES decrypt failed - AES-salauksen purku epäonnistui - - - No Polkit authentication agent was available - Polkit-todennusagenttia ei ollut käytettävissä - - - Polkit authorization failed - Polkit-todennus epäonnistui - - - No Quick Unlock provider is available - Pika-avaustapoja ei ole käytettävissä - - - Failed to init KeePassXC crypto. - KeePassXC-kryptauksen alustus epäonnistui - - - Failed to encrypt key data. - Avaindatan salaus epäonnistui - - - Failed to get Windows Hello credential. - Windows Hello -valtuutuksen hakeminen epäonnistui - - - Failed to decrypt key data. - Avaindatan salauksen avaus epäonnistui. - - - Origin is empty or not allowed - Alkuperä on tyhjä tai ei sallittu - - - Effective domain is not a valid domain - Verkkotunnus ei ole validi - - - Origin and RP ID do not match - Alkuperä tai RP ID eivät ole samat - - - No supported algorithms were provided - Tuettuja algoritmeja ei annettu - - - Wait for timer to expire - Odotetaan ajastimen loppumista - - - Challenge is shorter than required minimum length - Challenge on lyhyempi kuin vaadittu pituus - - - user.id does not match the required length - user.id:n pituus ei täytä vaatimuksia - - - Favorite - Tag for favorite entries - Suosikki - - - File does not exist. - Tiedostoa ei ole. - - - Cannot open file: %1 - Tiedostoa ei voitu avata: %1 - - - Cannot parse file: %1 at position %2 - Tiedostoa: %1 ei voitu jäsentää kohdassa %2 - - - Failed to decrypt json file: %1 - JSON-tiedoston salauksen purkaminen epäonnistui: %1 - - - Invalid encKeyValidation field - Virheellinen encKeyValidation-kenttä - - - Invalid cipher list within encKeyValidation field - Virheellinen salauslista encKeyValidation-kentän sisällä - - - Wrong password - Väärä salasana - - - Invalid encrypted data field - Virheellisesti salattu tietokenttä - - - Invalid cipher list within encrypted data field - Virheellinen salauslista salatun tietokentän sisällä - - - Cannot initialize cipher - Salauksen initialisointi epäonnistui - - - Cannot decrypt data - Salauksen purku epäonnistui - - - Bitwarden Import - Bitwarden-tuonti - - - Archived - Tag for archived entries - Arkistoitu - - - Invalid 1PUX file format: Not a valid ZIP file. - Virheellinen 1PUX-tiedostomuoto: virheellinen ZIP-tiedosto. - - - Invalid 1PUX file format: Missing export.data - Virheellinen 1PUX-tiedosto: export.data puuttuu - - - 1Password Import - 1Password-tuonti - - - Enter Shortcut - Lisää pikanäppäin - - - Action - Toiminto - - - Shortcuts - Pikanäppäimet - - - Unknown passkeys error - Tuntematon pääsyavainvirhe - - - Invalid KDF iterations, cannot decrypt json file - Virheellinen KDF-iteraation. JSON-tiedostoa ei voitu purkaa. - - - Unsupported format, ensure your Bitwarden export is password-protected - Tiedostomuoto ei ole tuettu. Varmista, että Bitwarden-tiedostosi on salasanasuojattu. - - - Only PBKDF and Argon2 are supported, cannot decrypt json file - Vain PBKDF ja Argon2 ovat tuettuja. JSON-tiedostoa ei voitu purkaa. - - - Reset Shortcuts - Nollaa pikanäppäimet - - - Double click an action to change its shortcut - Tuplaklikkaa toimintoa vaihtaaksesi sen pikanäppäintä - - - Filter... - Suodata... - - - Shortcut Conflict - Pikanäppäimen ristiriita - - - Shortcut %1 conflicts with '%2'. Overwrite shortcut? - Pikanäppäin %1 on ristiriidassa '%2' kanssa. Ylikirjoita pikanäppäin? - - - Cannot generate valid passphrases because the wordlist is too short - Salalausetta ei voitu luoda, sillä sanalista on liian lyhyt. - - - Encrypted files are not supported. - Salattuja tiedostoja ei tueta. - - - Proton Pass Import - Proton Pass -tuonti - - - Delete plugin data? - Poista liitännäistiedot? - - - Delete plugin data from Entry(s)? - Poista liitännäistiedot tietueesta?Poista liitännäistiedot tietueista? - - - Passkey - Pääsyavain - - - Format to use when exporting. Available choices are 'xml', 'csv' or 'html'. Defaults to 'xml'. +This options is deprecated, use --set-key-file instead. - start minimized to the system tray + KeePassXC is not running. No open database to lock - - malformed string, possible unescaped delimiter - - - - missing closing delimiter - - - - %1, row: %2, column: %3 - - - - Tags - Tagit - QtIOCompressor @@ -9257,39 +7976,20 @@ Asetus on vanhentunut, käytä sen sijaan "--set-key-file" -määritys Sisäinen zlib-virhe: - - RemoteHandler - - Command `%1` did not finish in time. Process was killed. - Komento '%1' ei suoritutunut määritetyssä ajassa. Prosessi tuhottiin. - - - Failed to upload merged database. Command `%1` did not finish in time. Process was killed. - Yhdistetyn tietokannan lähetys epäonnistui. Komento '%1' ei suoriutunut määritetyssä ajassa. Prosessi tuhottin. - - - Invalid download parameters provided. - Väärät latausparametrit. - - - Command `%1` failed to download database. - Komento '%1' epäonnistui tietokannan lataamisessa. - - - Invalid database pointer or upload parameters provided. - Virheellinen tietokannan osoitin, tai lähetyksen parametrit. - - - Command `%1` exited with status code: %2 - Komento '%1' suoriutui paluuarvolla: %2 - - - Failed to upload merged database. Command `%1` exited with status code: %2 - Yhdistetyn tietokannan lähetys epäonnistui. Komento '%1' loppui paluuarvolla: %2 - - ReportsWidgetBrowserStatistics + + Exclude expired entries from the report + Piilota vanhentuneet tietueet raportista + + + Show only entries which have URL set + Näytä vain tietueet joilla on URL + + + Show only entries which have browser settings in custom data + Näytä vain tietueet joilla on selaimen tallentamia asetuksia + Double-click entries to edit. Tuplaklikkaa tietuetta muokataksesi @@ -9348,59 +8048,50 @@ Asetus on vanhentunut, käytä sen sijaan "--set-key-file" -määritys Delete Entry(s)… - Poista tietue...Poista tietueet... + Poista tietueet... Exclude from reports Poissulje raporteista - - Expire Entry(s)… - - - - Only show entries that have a URL - Näytä vain URL-osoitteen sisältävät tietueet - - - Only show entries that have been explicitly allowed or denied - Näytä vain tietueet, jotka on erikseen sallittu tai estetty - - - Show expired entries - Näytä erääntyneet tietueet - - - (Expired) - (erääntynyt) - - - Delete plugin data from Entry(s)… - Poista liitännäistiedot tietueesta…Poista liitännäistiedot tietueista… - ReportsWidgetHealthcheck - Show expired entries - Näytä erääntyneet tietueet + Exclude expired entries from the report + Piilota vanhentuneet tietueet raportista - (Expired) - (erääntynyt) + Also show entries that have been excluded from reports + Näytä myös ne tietueet jotka on poissuljettu raporteista Hover over reason to show additional details. Double-click entries to edit. Siirrä kursori syyn päälle nähdäksesi lisätietoja. Tuplaklikkaa tietueita muokataksesi niitä. + + Bad + Password quality + Paha + Bad — password must be changed Paha - salasana on vaihdettava + + Poor + Password quality + Huono + Poor — password should be changed Heikko - salasana on vaihdettava + + Weak + Password quality + Heikko + Weak — consider changing the password Heikohko - salasana on vaihdettava @@ -9449,14 +8140,6 @@ Asetus on vanhentunut, käytä sen sijaan "--set-key-file" -määritys Exclude from reports Poissulje raporteista - - Expire Entry(s)… - - - - Show entries that have been excluded from reports - Näytä tietueet, joita ei sisällytetä raportteihin. - ReportsWidgetHibp @@ -9552,77 +8235,6 @@ Asetus on vanhentunut, käytä sen sijaan "--set-key-file" -määritys Exclude from reports Poissulje raporteista - - Expire Entry(s)… - - - - - ReportsWidgetPasskeys - - Export - Vie - - - Import - Tuo - - - List of entry URLs - Lista tietueen URL:istä - - - Title - Otsikko - - - Path - Polku - - - Username - Käyttäjätunnus - - - URLs - URL:t - - - Edit Entry… - Muokkaa tietuetta... - - - Delete Entry(s)… - Poista tietue...Poista tietueet... - - - Relying Party - Välittävät taho - - - Show expired entries - Näytä erääntyneet tietueet - - - (Expired) - (erääntynyt) - - - Export Confirmation - Viennin vahvistus - - - The passkey file will be vulnerable to theft and unauthorized use, if left unsecured. Are you sure you want to continue? - Pääsyavaintiedosto on altis varkauksille ja väärinkäyttöön, jos sitä ei suojata. Oletko varma, että haluat jatkaa? - - - Please wait, list of entries with passkeys is being updated… - Odota kun pääsyavaintietueiden lista päivittyy... - - - No entries with passkeys. - Pääsyavaimia sisältäviä tietueita ei ole. - ReportsWidgetStatistics @@ -9795,15 +8407,7 @@ Asetus on vanhentunut, käytä sen sijaan "--set-key-file" -määritys No agent running, cannot list identities. - Agentti ei ole päällä, tunnisteita ei voi listata. - - - Failed to remove all SSH identities from agent. - - - - All SSH identities removed from agent. - + Agentti ei ole päällä, identiteettejä ei voi listata. @@ -9871,10 +8475,6 @@ Asetus on vanhentunut, käytä sen sijaan "--set-key-file" -määritys Search Help Etsi apua - - Save Search - Tallenna haku - Search (%1)… Search placeholder text, %1 is the keyboard shortcut @@ -9888,6 +8488,10 @@ Asetus on vanhentunut, käytä sen sijaan "--set-key-file" -määritys Limit search to selected group Rajoita haku valittuun ryhmään + + Save Search + Tallenna haku + SettingsClientModel @@ -9949,10 +8553,34 @@ Asetus on vanhentunut, käytä sen sijaan "--set-key-file" -määritys Confirm when passwords are retrieved by clients Näytä ilmoitus, kun salasanat ovat vastaanotettu asiakkaan toimesta + + <html><head/><body><p><span style=" + font-family:'-apple-system','BlinkMacSystemFont','Segoe UI','Helvetica','Arial','sans-serif','Apple Color + Emoji','Segoe UI Emoji'; font-size:14px; color:#24292e; background-color:#ffffff;">This setting does + not override disabling recycle bin prompts</span></p></body></html> + + <html><head/><body><p><span style=" + font-family:'-apple-system','BlinkMacSystemFont','Segoe UI','Helvetica','Arial','sans-serif','Apple Color + Emoji','Segoe UI Emoji'; font-size:14px; color:#24292e; background-color:#ffffff;">Tämä asetus +ei ylikirjoita roskakorin pois asettamisen kyselyä</span></p></body></html> + + Confirm when clients request entry deletion Näytä varmistus, kun asiakkaat pyytävät tietueen poistoa + + <html><head/><body><p>This improves compatibility with certain applications + which search for password without unlocking the database first.</p><p>But enabling this may also + crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a + different value set in applications.)</p></body></html> + + <html><head/><body><p>Tämä parantaa yhteensopivuutta joidenkin ohjelmien kanssa, +jotka etsivät salasanoja ilman tietokannan avaamista etukäteen.</p><p>Tämän päälle laittaminen saattaa myös +kaataa asiakkaan, mikäli tietokantaa ei voitu avata tiettyyn aikaan mennessä. (Yleensä 25 sekuntia, +mutta arvo voi vaihdella ohjelmasta riippuen.)</p></body></html> + + Prompt to unlock database before searching Kehota avaamaan tietokannan lukitus ennen hakua @@ -9977,14 +8605,6 @@ Asetus on vanhentunut, käytä sen sijaan "--set-key-file" -määritys Save current changes to activate the plugin and enable editing of this section. Tallenna tämän hetkiset muutokset aktivoidaksesi laajennus ja salliaksesi tämä osa-alueen muokkaamisen. - - <html><head/><body><p>This setting does not override disabling recycle bin prompts </p></body></html> - <html><head/><body><p>Tämä asetus ei ylikirjoita roskakorin ilmoitusten poistamista</p></body></html> - - - <html><head/><body><p>This improves compatibility with certain applications which search for password without unlocking the database first.</p><p>But enabling this may also crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a different value set in applications.) </p></body></html> - <html><head/><body><p>Tämä parantaa yhteensopivuutta joidenkin ohjelmien kanssa, jotka etsivät salasanoja ilman tietokannan avaamista etukäteen.</p><p>Tämän päälle laittaminen saattaa myös kaataa asiakkaan, mikäli tietokantaa ei voitu avata tiettyyn aikaan mennessä. (Yleensä 25 sekuntia, mutta arvo voi vaihdella ohjelmasta riippuen.)</p></body></html> - SettingsWidgetKeeShare @@ -10092,14 +8712,6 @@ Asetus on vanhentunut, käytä sen sijaan "--set-key-file" -määritys TagModel - - Clear Search - Tyhjennä haku - - - All Entries - Kaikki tietueet - Expired Vanhentuneet @@ -10108,6 +8720,14 @@ Asetus on vanhentunut, käytä sen sijaan "--set-key-file" -määritys Weak Passwords Heikot salasanat + + All Entries + Kaikki tietueet + + + Clear Search + Tyhjennä haku + TagView @@ -10125,7 +8745,7 @@ Asetus on vanhentunut, käytä sen sijaan "--set-key-file" -määritys Remove tag "%1" from all entries in this database? - Poistetaanko tunniste "%1" tietokannan kaikilta tietueilta? + Poistetaanko tunniste "%1" tietokannan kaikilta tietueista? @@ -10285,6 +8905,26 @@ Esimerkiksi: JBSWY3DPEHPK3PXP Start storing your passwords securely in a KeePassXC database Aloita salasanojesi turvallinen tallentaminen KeePassXC-tietokantaan + + Create new database + Luo uusi tietokanta + + + Open existing database + Avaa tietokanta + + + Import from KeePass 1 + Tuo KeePass 1 -tietokanta + + + Import from 1Password + Tuo 1Passwordista + + + Import from CSV + Tuo CSV-tiedostosta + Recent databases Viimeisimmät tietokannat @@ -10297,18 +8937,6 @@ Esimerkiksi: JBSWY3DPEHPK3PXP Welcome to KeePassXC %1 Tervetuloa KeePassXC:n versioon %1 - - Create Database - Luo tietokanta - - - Open Database - Avaa tietokanta - - - Import File - Tuo tiedosto - WinUtils @@ -10325,8 +8953,31 @@ Esimerkiksi: JBSWY3DPEHPK3PXP Yleistä pikanäppäintä ei voitu rekisteröidä + + WindowsHello + + Failed to init KeePassXC crypto. + KeePassXC-kryptauksen alustus epäonnistui + + + Failed to encrypt key data. + Avaindatan salaus epäonnistui + + + Failed to get Windows Hello credential. + Windows Hello -valtuutuksen hakeminen epäonnistui + + + Failed to decrypt key data. + Avaindatan salauksen avaus epäonnistui. + + YubiKey + + %1 No interface, slot %2 + %1 Ei liitäntää, paikka %2 + General: Yleiset: @@ -10338,6 +8989,14 @@ Esimerkiksi: JBSWY3DPEHPK3PXP YubiKeyEditWidget + + Refresh hardware tokens + Uudista laitetunnisteet + + + Refresh + Päivitä + Hardware key slot selection Laiteavaimen paikan valinta @@ -10370,6 +9029,10 @@ Esimerkiksi: JBSWY3DPEHPK3PXP Challenge-Response set, click to change or remove Haaste-vastaus asetettu, klikkaa muuttaaksesi tai poistaaksesi + + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + <p>Jos omistat <a href="https://www.yubico.com/">YubiKey:n</a> tai <a href="https://onlykey.io">OnlyKey:n</a>, voit käyttää sitä lisäturvakeinona.</p><p>Avain vaatii yhden paikan asettamista <a href="https://www.yubico.com/products/services-software/challenge-response/">HMAC-SHA1 haaste-vastaukseksi</a>.</p> + Detecting hardware keys… Etsitään laiteavaimia... @@ -10378,25 +9041,28 @@ Esimerkiksi: JBSWY3DPEHPK3PXP No hardware keys detected Laiteavaimia ei havaittu + + + YubiKeyInterface - Refresh hardware keys - Uudista laiteavaimet - - - <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed with <a href="https://keepassxc.org/docs/#faq-yubikey-howto">Challenge-Response</a>.</p> - <p>Jos sinulla on <a href="https://www.yubico.com/">YubiKey</a> tai <a href="https://onlykey.io">OnlyKey</a>, sitä voi käyttää lisäturvaksi</p><p>Avain vaatii, että yksi sen kentistä ohjelmoidaan <a href="https://keepassxc.org/docs/#faq-yubikey-howto">Challenge-Response</a>-ohjelmalla.</p> - - - Hardware keys found, but no slots are configured - + %1 Invalid slot specified - %2 + %1 Virheellinen paikka määritetty - %2 YubiKeyInterfacePCSC + + (PCSC) %1 [%2] Challenge-Response - Slot %3 + (PCSC) %1 [%2] Haaste-vastaus - Paikka %3 + The YubiKey PCSC interface has not been initialized. Yubikey:n PCSC-käyttöliittymää ei ole alustettu. + + Hardware key is currently in use. + Laiteavain on käytössä. + Could not find or access hardware key with serial number %1. Please present it to continue. Laiteavainta sarjanumerolla %1 ei löydetty. Ole hyvä ja liitä se jatkaaksesi. @@ -10413,21 +9079,6 @@ Esimerkiksi: JBSWY3DPEHPK3PXP Failed to complete a challenge-response, the PCSC error code was: %1 Haaste-vastauksen valmistuminen epäonnistui PCSC:n virheellä: %1 - - (NFC) %1 [%2] - Slot %3, %4 - YubiKey display fields - (NFC) %1 [%2] - Paikka %3, %4 - - - Press - USB Challenge-Response Key interaction request - Paina - - - Passive - USB Challenge-Response Key no interaction required - Passiivi - YubiKeyInterfaceUSB @@ -10435,6 +9086,14 @@ Esimerkiksi: JBSWY3DPEHPK3PXP Unknown Tuntematon + + (USB) %1 [%2] Configured Slot - %3 + (USB) %1 [%2] Asetettu paikka - %3 + + + (USB) %1 [%2] Challenge-Response - Slot %3 - %4 + (USB) %1 [%2] Haaste-vastaus - Paikka %3 - %4 + Press USB Challenge-Response Key interaction request @@ -10449,6 +9108,10 @@ Esimerkiksi: JBSWY3DPEHPK3PXP The YubiKey USB interface has not been initialized. Yubikey:n USB-käyttöliittymää ei ole alustettu. + + Hardware key is currently in use. + Laiteavain on käytössä. + Could not find hardware key with serial number %1. Please plug it in to continue. Laiteavainta sarjanumerolla %1 ei löydetty. Ole hyvä ja liitä se jatkaaksesi. @@ -10465,15 +9128,5 @@ Esimerkiksi: JBSWY3DPEHPK3PXP Failed to complete a challenge-response, the specific error was: %1 Haaste-vastauksen valmistuminen epäonnistui virheellä: %1 - - %1 [%2] - Slot %3 - YubiKey NEO display fields - %1 [%2] - Paikka %3 - - - %1 [%2] - Slot %3, %4 - YubiKey display fields - %1 [%2] - Paikka %3, %4 - \ No newline at end of file diff --git a/share/translations/keepassxc_fil.ts b/share/translations/keepassxc_fil.ts index e88a55c8d..ce436160d 100644 --- a/share/translations/keepassxc_fil.ts +++ b/share/translations/keepassxc_fil.ts @@ -80,10 +80,6 @@ Details Mga Detalye - - Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. - Ang desisyon mo ay tatandaan sa tagal habang ang humihiling na client AT KeePassXC ay tumatakbo. - Remember Tandaan @@ -92,6 +88,10 @@ Allow Selected Payagan ang Napili + + Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. + Ang desisyon mo ay tatandaan sa tagal habang ang humihiling na client AT KeePassXC ay tumatakbo. + Deny All && Future I-deny Lahat && Future @@ -122,10 +122,6 @@ Use OpenSSH Gamitin ang OpenSSH - - Use both agents - Gamitin ang parehong mga agent - SSH_AUTH_SOCK override Override ng SSH_AUTH_SOCK @@ -154,6 +150,10 @@ SSH Agent connection is working! Gumagana ang koneksyon ng SSH Agent! + + Use both agents + Gamitin ang parehong mga agent + ApplicationSettingsWidget @@ -169,10 +169,6 @@ Security Security - - This setting cannot be enabled when minimize on unlock is enabled. - Hindi maaaring i-enable ang setting na ito kapag na-enable ang pag-minimize ng pag-unlock. - Access error for config file %1 Error sa pag-access para sa config file na %1 @@ -217,49 +213,21 @@ You must restart the application to set the new language. Would you like to restart now? You must restart the application to set the new language. Would you like to restart now? + + Reset Settings? + I-reset ang Mga Setting? + + + Are you sure you want to reset all general and security settings to default? + Sigurado ka bang nais mong i-reset ang pangkalahatan at mga setting ng seguridad sa default? + Select backup storage directory Piliin ang direktoryo ng backup na storage - Confirm Reset - - - - Are you sure you want to reset all settings to default? - - - - Import KeePassXC Settings - - - - Failed to import settings from %1, not a valid settings file. - - - - Export KeePassXC Settings - - - - Small - - - - Normal - - - - Medium - - - - Large - - - - Custom - + This setting cannot be enabled when minimize on unlock is enabled. + Hindi maaaring i-enable ang setting na ito kapag na-enable ang pag-minimize ng pag-unlock. @@ -292,10 +260,6 @@ Remember previously used databases Tandaan ang mga dating ginamit na database - - recent files - kamakailang mga file - Load previously open databases on startup Mag-load ng mga dating bukas na database sa pagsisimula @@ -312,6 +276,25 @@ Include beta releases when checking for updates Isama ang mga nilabas na beta kapag tumitingin ng mga update + + On database unlock, show entries that + Sa pag-unlock ng database, ipakita ang mga entry na + + + have expired + On database unlock, show entries that... + nag-expire na + + + days + On database unlock, show entries that will expire within %1 days + araw + + + will expire within + On database unlock, show entries that... + ay mawawalan ng bisa sa loob ng + File Management Pamamahala ng File @@ -336,10 +319,22 @@ Backup database file before saving I-backup ang database file bago i-save + + Backup destination + Backup na destinasyon + + + Specifies the database backup file location. Occurrences of "{DB_FILENAME}" are replaced with the filename of the saved database without extension. {TIME:<format>} is replaced with the backup time, see https://doc.qt.io/qt-5/qdatetime.html#toString. <format> defaults to format string "dd_MM_yyyy_hh-mm-ss". + Tinutukoy ang lokasyon ng backup file ng database. Mga pangyayari ng "{DB_FILENAME}" ay pinalitan ng filename ng naka-save na database nang walang extension. {TIME:<format>} ay pinalitan ng oras ng pag-backup, tingnan ang https://doc.qt.io/qt-5/qdatetime.html#toString. <format> default sa pag-format ng string "dd_MM_yyyy_hh-mm-ss". + {DB_FILENAME}.old.kdbx {DB_FILENAME}.old.kdbx + + Choose... + Pumili... + Use alternative saving method (may solve problems with Dropbox, Google Drive, GVFS, etc.) Gumamit ng alternatibong paraan ng pag-save (maaaring malutas ang mga problema sa Dropbox, Google Drive, GVFS, atbp.) @@ -417,10 +412,6 @@ Toolbar button style: Estilo ng button ng toolbar: - - Show passwords in color - Ipakita ang mga password sa kulay - Use monospaced font for notes Gumamit ng monospaced na font para sa mga tala @@ -507,69 +498,12 @@ Tandaan ang huling na-type na entry para sa: - On database unlock, show entries that will expire within - + recent files + kamakailang mga file - On database unlock, show entries that will expire within - - - - days - number of days warning for password expiration - araw - - - Destination format: - - - - <html><head/><body><p><span style=" font-weight:600;">{DB_FILENAME}</span> is replaced with the filename of the saved database without extension</p><p><span style=" font-weight:600;">{TIME:&lt;format&gt;}</span> is replaced with the specified time format (default: dd_MM_yyyy_hh-mm-ss)</p><p>See the User Guide for more details</p></body></html> - - - - Choose folder... - - - - Show confirmation before moving entries to recycle bin - - - - Copy data on double clicking field in entry view - - - - Show toolbar - - - - Show the menu bar by pressing the Alt key - - - - Show menubar - - - - Import settings… - - - - Export settings… - - - - Open browser on double clicking URL field in entry view - - - - Font size: - - - - Font size selection - + Show passwords in color + Ipakita ang mga password sa kulay @@ -624,6 +558,10 @@ Lock databases after minimizing the window I-lock ang mga database matapos i-minimize ang window + + Require password repeat when it is visible + Hilingin ang pag-ulit ng password kapag ito ay nakikita na + Hide passwords when editing them Itago ang mga password kapag ine-edit ang mga ito @@ -636,6 +574,18 @@ Hide passwords in the entry preview panel Itago ang mga password sa panel ng preview ng entry + + Hide entry notes by default + Itago ang mga note ng entry bilang default + + + Move entries to recycle bin without confirmation + Ilipat ang mga entry sa recycle bin nang walang kumpirmasyon + + + Enable double click to copy the username/password entry columns + I-enable ang double click para kopyahin ang mga column ng username/password entry + Privacy Privacy @@ -648,18 +598,6 @@ Hide TOTP in the entry preview panel - - Lock databases when switching user - - - - Lock Options - - - - Hide notes in the entry preview panel - - AutoType @@ -704,13 +642,27 @@ Natukoy ang mahabang pagkaantala, ang max ay %1: %2 - Entry does not have attribute for PICKCHARS: %1 - Ang entry ay walang attribute para sa PICKCHARS: %1 + Invalid conversion type: %1 + Invalid na uri ng conversion: %1 + + + Invalid conversion syntax: %1 + Invalid na conversion syntax: %1 + + + Invalid regular expression syntax %1 +%2 + Invalid na syntax ng regular na expression na %1 +%2 Invalid placeholder: %1 Invalid na placeholder: %1 + + Entry does not have attribute for PICKCHARS: %1 + Ang entry ay walang attribute para sa PICKCHARS: %1 + AutoTypeAssociationsModel @@ -752,6 +704,10 @@ AutoTypePlatformX11 + + Trying to send invalid keysym. + Sinusubukang magpadala ng invalid keysym. + Sequence aborted: Caps Lock is on Na-abort ang sequence: Naka-on ang Caps Lock @@ -764,10 +720,6 @@ Unable to get valid keycode for key: Hindi makakuha ng valid keycode para sa key: - - Trying to send invalid keyboard symbol. - - AutoTypeSelectDialog @@ -872,13 +824,13 @@ Ctrl+4 - Use Virtual Keyboard (Sa Windows Lang)</p> Disable for this site I-disable para sa site na ito - - Undo - - BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + KeePassXC-Browser I-save ang Entry + Ok Ok @@ -893,73 +845,13 @@ Please select the correct database for saving credentials. Marami kang nakabukas na database. Mangyaring piliin ang tamang database para sa pag-save ng mga kredensyal. - - KeePassXC - Select Database - - - - - BrowserPasskeysConfirmationDialog - - Cancel - Kanselahin - - - Update - - - - Authenticate - - - - Register new - - - - Register - - - - Timeout in <b>%n</b> seconds... - - - - Relying Party: %1 - - - - Username: %1 - - - - KeePassXC - Passkey credentials - - - - Add to existing entry - - - - Existing passkey found. -Do you want to register a new passkey for: - - - - Select the existing passkey and press Update to replace it. - - - - Authenticate passkey credentials for: - - - - Do you want to register a passkey for: - - BrowserService + + KeePassXC: Create a new group + KeePassXC: Lumikha ng bagong group + A request for creating a new group "%1" has been received. Do you want to create this group? @@ -968,6 +860,10 @@ Do you want to create this group? Gusto mo bang likhain ang pangkat na ito? + + KeePassXC: New key association request + KeePassXC: Bagong kahilingan sa pag-uugnay ng key + You have received an association request for the following database: %1 @@ -984,16 +880,28 @@ chrome-laptop. Save and allow access I-save at payagan ang access + + KeePassXC: Overwrite existing key? + KeePassXC: I-overwrite ang kasalukuyang key? + A shared encryption key with the name "%1" already exists. Do you want to overwrite it? May umiiral nang nakabahaging encryption key na may pangalang "%1". Gusto mo bang i-overwrite ito? + + KeePassXC: Update Entry + KeePassXC: I-update ang Entry + Do you want to update the information in %1 - %2? Gusto mo bang i-update ang impormasyon sa %1 - %2? + + KeePassXC: Delete entry + KeePassXC: I-delete ang entry + A request for deleting entry "%1" has been received. Do you want to delete the entry? @@ -1003,57 +911,50 @@ Gusto mo bang i-delete ang entry? - %1 (Passkey) - + Converting attributes to custom data… + Kino-convert ang mga attribute sa custom data… - KeePassXC - Create a new group - + Abort + I-abort - Disable - I-disable + KeePassXC: Converted KeePassHTTP attributes + KeePassXC: Na-convert na mga attribute ng KeePassHTTP - KeePassXC - Overwrite existing key? - + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + Matagumpay na na-convert ang mga attribute mula sa %1 na (mga) entry. +Inilipat ang %2 key sa custom na data. + + + Successfully moved %n keys to custom data. + Matagumpay na nailipat ang %n key sa custom na data.Matagumpay na nailipat ang %n mga key sa custom na data. - KeePassXC - Update Entry - + KeePassXC: No entry with KeePassHTTP attributes found! + KeePassXC: Walang nakitang entry na may mga attribute ng KeePassHTTP! - KeePassXC - Delete entry - + The active database does not contain an entry with KeePassHTTP attributes. + Ang aktibong database ay hindi naglalaman ng isang entry na may mga attribute ng KeePassHTTP. - KeePassXC - New key association request - + Don't show this warning again + Huwag ipakitang muli ang babalang ito - Passkey - + KeePassXC: Legacy browser integration settings detected + KeePassXC: Natukoy ang mga setting ng legacy browser integration - KeePassXC - Passkey credentials - - - - Register a new passkey to this entry: - - - - KeePassXC - Update passkey - - - - Entry already has a passkey. -Do you want to overwrite the passkey in %1 - %2? - - - - Register - + 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? + Ang mga setting ng KeePassXC-Browser mo ay kailangang ilipat sa mga setting ng database. +Ito ay kinakailangan upang mapanatili ang iyong kasalukuyang mga koneksyon sa browser. +Gusto mo bang ilipat ang iyong mga kasalukuyang setting ngayon? @@ -1074,6 +975,10 @@ Do you want to overwrite the passkey in %1 - %2? General Pangkalahatan + + Browsers installed as snaps are currently not supported. + Ang mga browser na naka-install bilang mga snap ay kasalukuyang hindi suportado. + Enable integration for these browsers: I-enable ang integration para sa mga browser na ito: @@ -1245,6 +1150,26 @@ Do you want to overwrite the passkey in %1 - %2? Custom extension ID Custom na extension ID + + Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 + Dahil sa Snap sandboxing, dapat kang mag-run ng script para i-enable ang pag-integrate ng browser.<br />Makukuha mo ang script na ito mula sa %1 + + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 + Kailangan ang KeePassXC-Browser para gumana ang browser integration. <br />I-download ito para sa %1 at %2 at %3. %4 + + + Please see special instructions for browser extension use below + Pakitingnan ang mga espesyal na tagubilin para sa paggamit ng extension ng browser sa ibaba + + + <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. + <b>Error:</b> Hindi mahanap ang custom na lokasyon ng proxy!<br/>HINDI GAGANA ang pag-integrate ng browser kung wala ang proxy application. + + + <b>Warning:</b> The following options can be dangerous! + <b>Babala:</b> Ang mga sumusunod na opsyon ay maaaring delikado! + Executable Files Mga Executable na File @@ -1261,46 +1186,6 @@ Do you want to overwrite the passkey in %1 - %2? Select native messaging host folder location Piliin ang lokasyon ng folder ng host ng native na pagmemensahe - - Allow keepassxc-proxy to list all entries with their title, URL and UUID in connected databases. - - - - Allow limited access to all entries in connected databases (ignores site access restrictions) - - - - <b>Warning:</b> Only adjust these settings if necessary. - - - - The custom proxy location does not exist. - - - - <b>Error:</b> The custom proxy location does not exist. Correct this in the advanced settings tab. - - - - <b>Error:</b> The installed proxy executable is missing from the expected location: %1<br/>Please set a custom proxy location in the advanced settings or reinstall the application. - - - - Allows using insecure http://localhost with passkeys for testing purposes. - - - - Allow using localhost with passkeys - - - - KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. - - - - Browsers installed using Snap or Flatpak are not supported with exception to Firefox installed using Snap. - - CloneDialog @@ -1323,6 +1208,14 @@ Do you want to overwrite the passkey in %1 - %2? CsvImportWidget + + Import CSV fields + Mag-import ng mga CSV field + + + filename + filename + size, rows, columns sukat, hilera, hanay @@ -1431,42 +1324,50 @@ Do you want to overwrite the passkey in %1 - %2? Column %1 Column na %1 + + Imported from CSV file + Na-import mula sa CSV file + + + Original data: + Orihinal na data: + + + Error(s) detected in CSV file! + May (mga) error na nakita sa CSV file! + [%n more message(s) skipped] [%n higit pang mensahe ang nilaktawan][%n higit pang (mga) mensahe ang nilaktawan] - Failed to parse CSV file: %1 - + Error + Error - Imported from CSV file: %1 - - - - No Title Selected - - - - No title column was selected, entries will be hard to tell apart. -Are you sure you want to import? - - - - Tags - Mga tag + CSV import: writer has errors: +%1 + CSV import: may mga error ang writer: +%1 CsvParserModel + + %1, %2, %3 + file info: bytes, rows, columns + %1, %2, %3 + + + %n byte(s) + %n byte%n (mga)byte + %n row(s) - CSV row count %n row%n (mga)row %n column(s) - CSV column count %n ng column%n ng (mga)column @@ -1519,14 +1420,6 @@ Backup database na matatagpuan sa %2 Recycle Bin Recycle Bin - - Database file read error. - - - - No file path was provided. - - DatabaseOpenDialog @@ -1549,10 +1442,30 @@ Backup database na matatagpuan sa %2 Password field Field ng password + + Enter Additional Credentials (if any): + Ipasok ang Mga Karagdagang Kredensyal (kung mayroon man): + + + Key File: + Key File: + + + Key file help + Tulong sa key file + Hardware key slot selection Pagpili ng hardware key slot + + Hardware Key: + Hardware Key: + + + Hardware key help + Tulong sa hardware key + Key file to unlock the database Key file upang i-unlock ang database @@ -1565,6 +1478,14 @@ Backup database na matatagpuan sa %2 Browse… Mag-browse… + + Refresh hardware tokens + I-refresh ang mga token ng hardware + + + Refresh + I-refresh + Unlock Database I-unlock ang Database @@ -1627,6 +1548,10 @@ Para maiwasan ang paglabas ng error na ito, dapat kang pumunta sa "Settings Retry with empty password Subukang muli gamit ang walang laman na password + + Failed to authenticate with Touch ID + Nabigong mag-authenticate gamit ang Touch ID + Failed to open key file: %1 Nabigong buksan ang key file: %1 @@ -1659,65 +1584,41 @@ Para maiwasan ang paglabas ng error na ito, dapat kang pumunta sa "Settings Cannot use database file as key file Hindi magagamit ang database file bilang key file + + You cannot use your database file as a key file. +If you do not have a key file, please leave the field empty. + Hindi mo magagamit ang iyong database file bilang key file. +Kung wala kang key file, mangyaring iwanang walang laman ang field. + + + Detecting hardware keys… + Dini-detect ang mga hardware key… + + + No hardware keys detected + Walang nakitang hardware key + + + Select hardware key… + Piliin ang hardware key… + + + <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information…</p> + <p>Bilang karagdagan sa isang password, maaari kang gumamit ng isang secret file upang mapahusay ang seguridad ng database mo. Maaaring mabuo ang file na ito sa mga setting ng database security mo.</p><p>Ito ay<strong>hindi</strong> iyong *.kdbx database file!<br>Kung wala kang key file, iwanang walang laman ang field na ito.</p><p>Mag-click para sa karagdagang impormasyon…</p> + + + <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +<p>Click for more information…</p> + <p>Maaari kang gumamit ng security key ng hardware gaya ng <strong>YubiKey</strong> o <strong>OnlyKey</strong> na may slot na naka-configure pa sa HMAC-SHA1.</p> +<p>Mag-click para sa karagdagang impormasyon…</p> + authenticate to access the database patotohanan para ma-access ang database - Failed to authenticate with Quick Unlock: %1 - - - - Select Key File: - - - - <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!</p> - - - - Use hardware key [Serial: %1] - - - - Use hardware key - - - - Your database file is NOT a key file! -If you don't have a key file or don't know what that is, you don't have to select one. - - - - KeePassXC database file selected - - - - The file you selected looks like a database file. -A database file is NOT a key file! - -Are you sure you want to continue with this file?. - - - - No hardware keys found. - - - - Refresh Hardware Keys - - - - Click to add a key file. - - - - <a href="#" style="text-decoration: underline">I have a key file</a> - - - - Hardware keys found, but no slots are configured. - + Failed to authenticate with Windows Hello: %1 + Nabigong mag-authenticate gamit ang Windows Hello: %1 @@ -1729,6 +1630,10 @@ Are you sure you want to continue with this file?. DatabaseSettingsDialog + + Advanced Settings + Mga Advanced Setting + General Pangkalahatan @@ -1753,22 +1658,6 @@ Are you sure you want to continue with this file?. Maintenance Maintenance - - KeeShare - KeeShare - - - Secret Service Integration - Secret Service Integration - - - Remote Sync - - - - Database Settings: %1 - - DatabaseSettingsWidgetBrowser @@ -1776,6 +1665,18 @@ Are you sure you want to continue with this file?. KeePassXC-Browser settings KeePassXC-Mga Browser setting + + Convert KeePassHTTP data + I-convert ang data ng KeePassHTTP + + + Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data + I-convert ang mga legacy na attribute ng KeePassHTTP -Browser na tugma sa custom data + + + Refresh database root group ID + I-refresh ang database root group ID + Disconnect all browsers Idiskonekta ang lahat ng browser @@ -1784,10 +1685,6 @@ Are you sure you want to continue with this file?. Forget all site-specific settings on entries Kalimutan ang lahat ng mga setting na partikular sa site sa mga entry - - Refresh database root group ID - I-refresh ang database root group ID - Stored keys Naka-store na mga key @@ -1836,10 +1733,18 @@ This may prevent connection to the browser plugin. Gusto mo bang idiskonekta ang lahat ng browser? Maaaring pigilan nito ang koneksyon sa browser plugin. + + KeePassXC: No keys found + KeePassXC: Walang Nakitang Mga Key + No shared encryption keys found in KeePassXC settings. Walang nahanap na nakabahaging encryption key sa settings ng KeePassXC. + + KeePassXC: Removed keys from database + KeePassXC: Noi-remove ang mga key mula sa database + Successfully removed %n encryption key(s) from KeePassXC settings. Matagumpay na na-remove ang %n encryption key mula sa mga setting ng KeePassXC.Matagumpay na na-remove ang %n (mga) encryption key mula sa mga setting ng KeePassXC. @@ -1858,14 +1763,32 @@ Ang pahintulot na ma-access ang mga entry ay babawiin. Abort I-abort + + KeePassXC: Removed permissions + KeePassXC: Ni-remove ang mga pahintulot + Successfully removed permissions from %n entry(s). Matagumpay na na-remove ang mga permission mula sa %n na entry.Matagumpay na na-remove ang mga permission mula sa %n na (mga) entry. + + KeePassXC: No entry with permissions found! + KeePassXC: Walang nakitang entry na may mga pahintulot! + The active database does not contain an entry with permissions. Ang aktibong database ay hindi naglalaman ng entry na may mga permission. + + Move KeePassHTTP attributes to custom data + Ilipat ang mga attribute ng KeePassHTTP sa custom na data + + + Do you really want to convert all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + Gusto mo bang i-convert ang lahat ng legacy browser integration data sa pinakabagong pamantayan? +Ito ay kinakailangan upang mapanatili ang pagiging tugma sa browser plugin. + Refresh database ID I-refresh ang database ID @@ -1876,26 +1799,6 @@ This is only necessary if your database is a copy of another and the browser ext Gusto mo bang i-refresh ang database ID? Ito ay kinakailangan lamang kung ang iyong database ay isang kopya ng isa pa at ang extension ng browser ay hindi makakonekta. - - Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data - I-convert ang mga legacy na attribute ng KeePassHTTP -Browser na tugma sa custom data - - - No keys found - - - - Removed keys from database - - - - Removed permissions - - - - No entry with permissions found! - - DatabaseSettingsWidgetDatabaseKey @@ -1935,18 +1838,6 @@ Sigurado ka bang gusto mong magpatuloy nang walang password? Failed to change database credentials Nabigong baguhin ang mga kredensyal ng database - - Weak password - Mahinang password - - - This is a weak password! For better protection of your secrets, you should choose a stronger password. - - - - The provided password does not meet the minimum quality requirement. - - DatabaseSettingsWidgetEncryption @@ -1954,6 +1845,14 @@ Sigurado ka bang gusto mong magpatuloy nang walang password? Decryption Time: Oras ng Pag-decrypt: + + Change existing decryption time + Baguhin ang kasalukuyang oras ng pag-decrypt + + + Change + Palitan + Decryption time in seconds Segundo na oras ng pag-decrypt @@ -2034,6 +1933,11 @@ Sigurado ka bang gusto mong magpatuloy nang walang password? KDBX 3 KDBX 3 + + unchanged + Database decryption time is unchanged + hindi nabago + Number of rounds too high Key transformation rounds @@ -2086,18 +1990,6 @@ Kung pananatilihin mo ang numerong ito, hindi mapoprotektahan ang database mo mu Threads for parallel execution (KDF settings) thread (mga)thread - - Encryption Settings: - - - - Basic - - - - Advanced - Advanced - DatabaseSettingsWidgetFdoSecrets @@ -2228,70 +2120,6 @@ sa halip na tanggalin ang mga ito mula sa database. Ang mga entry na na-delete mula sa recycle bin ay na-delete mula sa database. - - Autosave delay since last change - - - - Autosave delay - - - - Autosave delay since last change in minutes - - - - min - min - - - Autosave delay since last change checkbox - - - - Public Database Metadata - - - - Warning: the following settings are not encrypted. - - - - Display name: - - - - Publically visible display name used on the unlock dialog - - - - Database public display name - - - - Display color: - - - - Publically visible color used on the unlock dialog - - - - Database public display color chooser - - - - Clear - I-clear - - - Display icon: - - - - Select Database Icon - - DatabaseSettingsWidgetKeeShare @@ -2387,129 +2215,6 @@ na-delete mula sa database. Field ng paglalarawan ng database - - DatabaseSettingsWidgetRemote - - Sync Commands - - - - Remove - Alisin - - - Command Settings - - - - Name - Pangalan - - - Save - I-save - - - Download - - - - Command: - - - - Download command field - - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - - - - Input: - - - - Download input field - - - - Upload - - - - Upload command field - - - - e.g.: "sftp user@hostname" or "scp {TEMP_DATABASE} user@hostname:DatabaseOnRemote.kdbx" - - - - Upload input field - - - - Name cannot be empty. - - - - Test - - - - Download command cannot be empty. - - - - Download failed with error: %1 - - - - Download finished, but file %1 could not be found. - - - - Download successful. - - - - Save Remote Settings - - - - You have unsaved changes. Do you want to save them? - - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - - - - e.g.: -put {TEMP_DATABASE} DatabaseOnRemote.kdbx -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - - - - Timeout: - - - - seconds - segundo - - DatabaseTabWidget @@ -2542,10 +2247,26 @@ Tiyak na bug ito, mangyaring i-ulat sa mga developer. CSV file CSV file + + Select CSV file + Piliin ang CSV file + Merge database Pagsamahin ang dabatase + + KeePass 1 database + KeePass 1 database + + + Open KeePass 1 database + Buksan ang database ng KeePass 1 + + + Open OPVault + Buksan ang OPVault + Export database to CSV file I-export ang database sa CSV file @@ -2558,6 +2279,28 @@ Tiyak na bug ito, mangyaring i-ulat sa mga developer. Writing the HTML file failed. Nabigo ang pagsulat ng HTML file. + + Export Confirmation + I-export ang Kumpirmasyon + + + You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? + Ie-export mo na ang database mo sa isang hindi naka-encrypt na file. Iiwan nitong mahina ang iyong mga password at sensitibong impormasyon! Sigurado ka bang gusto mong magpatuloy? + + + New Database + Bagong Database + + + %1 [New Database] + Database tab name modifier + %1 [Bagong Database] + + + %1 [Locked] + Database tab name modifier + %1 [Naka-lock] + Export database to XML file I-export ang database sa XML file @@ -2570,31 +2313,9 @@ Tiyak na bug ito, mangyaring i-ulat sa mga developer. Writing the XML file failed Nabigo ang pagsulat ng XML file - - Export Confirmation - I-export ang Kumpirmasyon - - - You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? - Ie-export mo na ang database mo sa isang hindi naka-encrypt na file. Iiwan nitong mahina ang iyong mga password at sensitibong impormasyon! Sigurado ka bang gusto mong magpatuloy? - - - %1 [Locked] - Database tab name modifier - %1 [Naka-lock] - - - %1 [Temporary] - Database tab name modifier - - DatabaseWidget - - Searches and Tags - Mga Paghahanap at Tag - Searching… Naghahanap… @@ -2643,10 +2364,6 @@ Tiyak na bug ito, mangyaring i-ulat sa mga developer. Expired entries Mga nag-expire na entry - - Entries expiring within %1 day(s) - Mag-e-expire ang mga entry sa loob ng %1 na arawMag-e-expire ang mga entry sa loob ng %1 na (mga) araw - No current database. Walang kasalukuyang database. @@ -2671,18 +2388,6 @@ Tiyak na bug ito, mangyaring i-ulat sa mga developer. No Results Walang Mga Resulta - - Save - I-save - - - Enter a unique name or overwrite an existing search from the list: - Maglagay ng natatanging pangalan o i-overwrite ang isang umiiral na nahanap mula sa listahan: - - - Save Search - I-save ang Search - Lock Database? I-lock ang Database? @@ -2711,6 +2416,26 @@ I-save ang mga pagbabago? File has changed Nagbago ang file + + The database file has changed. Do you want to load the changes? + Nagbago ang database file. Gusto mo bang i-load ang mga pagbabago? + + + Merge Request + Pagsamahin ang Kahilingan + + + The database file has changed and you have unsaved changes. +Do you want to merge your changes? + Ang file ng database ay nabago at mayroon kang mga hindi na-save na mga pagbabago. +Gusto mo bang pagsamahin ang mga binago mo? + + + Could not open the new database file while attempting to autoreload. +Error: %1 + Hindi mabuksan ang bagong database file habang sinusubukang i-autoreload. +Error: %1 + Disable safe saves? I-disable ang ligtas na pag-save? @@ -2753,94 +2478,25 @@ I-disable ang safe save at subukang muli? Could not find database file: %1 Hindi mahanap ang database file: %1 - - New Database - Bagong Database + + Entries expiring within %1 day(s) + Mag-e-expire ang mga entry sa loob ng %1 na arawMag-e-expire ang mga entry sa loob ng %1 na (mga) araw - %1 [New Database] - Database tab name modifier - %1 [Bagong Database] + Searches and Tags + Mga Paghahanap at Tag - Remote Sync did not contain any download or upload commands. - + Enter a unique name or overwrite an existing search from the list: + Maglagay ng natatanging pangalan o i-overwrite ang isang umiiral na nahanap mula sa listahan: - Remote sync '%1' completed successfully! - + Save + I-save - Remote sync '%1' failed: %2 - - - - Error while saving database %1: %2 - - - - Downloading... - - - - Uploading... - - - - Syncing... - - - - Remove passkey from entry - - - - Do you want to remove the passkey from this entry? - - - - The database file "%1" was modified externally - - - - Do you want to load the changes? - - - - Reload database - - - - Reloading database… - - - - Reload canceled - - - - Reload successful - - - - Reload pending user action… - - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes<br>Ignore the changes on disk until save<br>Discard unsaved changes - - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes then save<br>Overwrite the changes on disk<br>Discard unsaved changes - - - - Database file overwritten. - - - - Database file on disk cannot be unlocked with current credentials.<br>Enter new credentials and/or present hardware key to continue. - + Save Search + I-save ang Search @@ -2893,6 +2549,10 @@ I-disable ang safe save at subukang muli? n/a n/a + + (encrypted) + (naka-encrypt) + Select private key Pumili ng private key @@ -2979,10 +2639,6 @@ Gusto mo bang itama ito? Hide Itago - - %n hour(s) - %n oras%n (mga)oras - %n week(s) %n linggo%n (mga)linggo @@ -2995,9 +2651,9 @@ Gusto mo bang itama ito? %n year(s) %n taon%n (mga)taon - - Failed to decrypt SSH key, ensure password is correct. - + + %n hour(s) + %n oras%n (mga)oras @@ -3117,20 +2773,10 @@ Gusto mo bang itama ito? Add new window association Magdagdag ng bagong window association - - + - Add item - + - Remove selected window association Alisin ang napiling pagkakaugnay ng window - - - - Remove item - - - Window title: Pamagat ng Window: @@ -3155,9 +2801,23 @@ Gusto mo bang itama ito? Custom Auto-Type sequence for this window Custom na Auto-Type sequence para sa window na ito + + + + Add item + + + + + - + Remove item + - + EditEntryWidgetBrowser + + These settings affect to the entry's behaviour with the browser extension. + Nakakaapekto ang mga setting na ito sa gawi ng entry sa extension ng browser. + General Pangkalahatan @@ -3170,14 +2830,26 @@ Gusto mo bang itama ito? Skip Auto-Submit for this entry Laktawan ang Auto-Submit para sa entry na ito: + + Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. + Ipadala lamang ang setting na ito sa browser para sa mga dialog ng HTTP Auth. Kung na-enable, hindi ipapakita ng mga normal na form sa pag-log in ang entry na ito para sa pagpili. + Use this entry only with HTTP Basic Auth Gamitin lamang ang entry na ito sa HTTP Basic Auth + + Do not send this setting to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. + Huwag ipadala ang setting na ito sa browser para sa mga dialog ng HTTP Auth. Kung naka-enable, hindi ipapakita ng mga dialog ng HTTP Auth ang entry na ito para sa pagpili. + Do not use this entry with HTTP Basic Auth Huwag gamitin ang entry na ito sa HTTP Basic Auth + + Additional URL's + Karagdagang URL's + Add Magdagdag @@ -3190,22 +2862,6 @@ Gusto mo bang itama ito? Edit I-edit - - These settings affect the entry's behaviour with the browser extension. - - - - Additional URLs - - - - Only send this entry to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. - - - - Do not send this entry to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. - - EditEntryWidgetHistory @@ -3371,6 +3027,19 @@ Gusto mo bang itama ito? Private key Pribadong key + + External file + Panlabas na file + + + Browser for key file + Browser para sa key file + + + Browse… + Button for opening file dialog + Mag-browse… + Attachment Attachment @@ -3387,23 +3056,6 @@ Gusto mo bang itama ito? Remove from agent Alisin mula sa agent - - External file - Panlabas na file - - - Browser for key file - Browser para sa key file - - - Browse… - Button for opening file dialog - Mag-browse… - - - Generate - Bumuo - Select attachment file Piliin ang attachment file @@ -3428,10 +3080,6 @@ Gusto mo bang itama ito? seconds segundo - - Clear agent - - EditGroupWidget @@ -3443,6 +3091,10 @@ Gusto mo bang itama ito? Icon Icon + + Browser Integration + Pagsasama ng Browser + Properties Mga pag-aari @@ -3459,10 +3111,6 @@ Gusto mo bang itama ito? Group has unsaved changes May mga hindi na-save na pagbabago ng group - - Browser Integration - Pagsasama ng Browser - Enable I-enable @@ -3522,14 +3170,6 @@ Gusto mo bang itama ito? Omit WWW subdomain from matching toggle for this and sub groups Alisin ang WWW subdomain sa pagtutugma ng toggle para dito at sa mga sub group - - Restrict matching to given browser key: - - - - Restrict matching to given browser key toggle for this and sub groups - - EditGroupWidgetKeeShare @@ -3762,6 +3402,10 @@ Ang mga sinusuportahang extension ay: %1. Unable to fetch favicon. Hindi makuha ang favicon. + + You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security + Maaari mong paganahin ang serbisyo ng icon ng website ng DuckDuckGo sa ilalim ng Tools -> Settings -> Security + Existing icon selected. Pinili ang kasalukuyang icon. @@ -3794,10 +3438,6 @@ Ang mga sinusuportahang extension ay: %1. The following icon(s) failed: Nabigo ang sumusunod na icon:Nabigo ang sumusunod na (mga) icon: - - You can enable the DuckDuckGo website icon service under Application Settings -> Security - - EditWidgetProperties @@ -3874,24 +3514,6 @@ Maaari itong maging sanhi ng hindi paggana ng mga apektadong plugin.%1 - Clone %1 - Clone - - Passkey - - - - Invalid conversion type: %1 - Invalid na uri ng conversion: %1 - - - Invalid conversion syntax: %1 - Invalid na conversion syntax: %1 - - - Invalid regular expression syntax %1 -%2 - Invalid na syntax ng regular na expression na %1 -%2 - EntryAttachments @@ -3900,21 +3522,6 @@ Maaari itong maging sanhi ng hindi paggana ng mga apektadong plugin.Hindi mabuksan ang file na "%1" - - EntryAttachmentsDialog - - Form - Form - - - File name - - - - File contents... - - - EntryAttachmentsModel @@ -3952,6 +3559,14 @@ Maaari itong maging sanhi ng hindi paggana ng mga apektadong plugin.Remove Alisin + + Rename selected attachment + Pangalanan muli ang napiling attachment + + + Rename + Pangalanan muli + Open selected attachment Buksan ang napiling attachment @@ -4027,6 +3642,12 @@ Maaari itong maging sanhi ng hindi paggana ng mga apektadong plugin.Confirm Overwrite Attachment Kumpirmahin ang Overwrite Attachment + + Attachment "%1" already exists. +Would you like to overwrite the existing attachment? + Umiiral na ang attachment na "%1". +Gusto mo bang i-overwrite ang kasalukuyang attachment? + Confirm Attachment Kumpirmahin ang Attachment @@ -4061,24 +3682,6 @@ Error: %1 Nabigo ang pag-save ng na-update na attachment. Error: %1 - - Attachment "%1" already exists. -Would you like to overwrite the existing attachment? - Umiiral na ang attachment na "%1". -Gusto mo bang i-overwrite ang kasalukuyang attachment? - - - New - - - - Preview - Preview - - - Failed to preview an attachment: Attachment not found - - EntryAttributesModel @@ -4273,14 +3876,6 @@ Gusto mo bang i-overwrite ang kasalukuyang attachment? Has TOTP May TOTP - - Background Color - - - - Group Path - - EntryPreviewWidget @@ -4301,8 +3896,8 @@ Gusto mo bang i-overwrite ang kasalukuyang attachment? Password - URL - URL + Notes + Mga tala Expiration @@ -4321,8 +3916,8 @@ Gusto mo bang i-overwrite ang kasalukuyang attachment? Username - Notes - Mga tala + URL + URL Advanced @@ -4372,10 +3967,6 @@ Gusto mo bang i-overwrite ang kasalukuyang attachment? Never Huwag kailanman - - Double click to copy value - I-double click para kopyahin ang value - Enabled Na-enable na @@ -4385,8 +3976,8 @@ Gusto mo bang i-overwrite ang kasalukuyang attachment? Naka-disable - Double click to copy to clipboard - + Double click to copy value + I-double click para kopyahin ang value @@ -4395,10 +3986,6 @@ Gusto mo bang i-overwrite ang kasalukuyang attachment? Invalid URL Invalid na URL - - Duplicate URL - - EntryView @@ -4414,10 +4001,6 @@ Gusto mo bang i-overwrite ang kasalukuyang attachment? Reset to defaults I-reset sa mga default - - + %1 entry(s)... - - ExportDialog @@ -4639,193 +4222,6 @@ Puwede mong i-enable ang icon service ng website ng DuckDuckGo sa seksyon ng seg Dina-download ang mga favicon na (%1/%2)… - - ImportWizard - - Import Wizard - - - - - ImportWizardPageReview - - WizardPage - WizardPage - - - Entry count: %1 - - - - Group - Group - - - Title - Pamagat - - - Username - Username - - - Password - Password - - - Url - - - - Could not load key file. - - - - Could not open remote database. Password or key file may be incorrect. - - - - - ImportWizardPageSelect - - Form - Form - - - Import File Selection - - - - Password: - Password: - - - Key File: - Key File: - - - Browse… - Mag-browse… - - - Import Into: - - - - New Database - Bagong Database - - - No unlocked databases available - - - - Existing Database: - - - - Import File: - - - - Comma Separated Values (.csv) - - - - 1Password Export (.1pux) - - - - 1Password Vault (.opvault) - - - - Bitwarden (.json) - - - - KeePass 1 Database (.kdb) - - - - Open OPVault - Buksan ang OPVault - - - Select import file - - - - All files - Lahat ng mga file - - - Key files - Mga key file - - - Select key file - Piliin ang key file - - - Comma Separated Values - - - - 1Password Export - - - - Bitwarden JSON Export - - - - 1Password Vault - - - - KeePass1 Database - - - - Proton Pass (.json) - - - - Proton Pass JSON Export - - - - Temporary Database - - - - Command: - - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - - - - Input: - - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last commend `exit` has to be sent - - - - - Remote Database (.kdbx) - - - KMessageWidget @@ -5260,6 +4656,17 @@ Linya na %2, column na %3 Nabigong buksan ang private key + + KeePass1OpenWidget + + Import KeePass1 Database + Mag-import ng KeePass1 Database + + + Unable to open the database. + Hindi mabuksan ang database. + + KeePass1Reader @@ -5616,6 +5023,10 @@ Sigurado ka bang gusto mong magpatuloy sa file na ito? &Recent Databases &Recent Databases + + &Import + &Import + &Export &Export @@ -5636,10 +5047,6 @@ Sigurado ka bang gusto mong magpatuloy sa file na ito? TOTP TOTP - - Tags - Mga tag - &Groups &Groups @@ -5684,18 +5091,34 @@ Sigurado ka bang gusto mong magpatuloy sa file na ito? &New Database… &New Database… + + Create a new database + Lumikha ng bagong database + &Merge From Database… &Merge From Database… + + Merge from another KDBX database + Pagsamahin mula sa isa pang KDBX database + &New Entry… &New Entry… + + Add a new entry + Magdagdag ng bagong entry + &Edit Entry… &Edit Entry… + + View or edit entry + Tingnan o i-edit ang entry + &Delete Entry… &Delete Entry… @@ -5704,6 +5127,10 @@ Sigurado ka bang gusto mong magpatuloy sa file na ito? &New Group… &New Group… + + Add a new group + Magdagdag ng isang bagong pangkat + &Edit Group… &Edit Group… @@ -5736,10 +5163,18 @@ Sigurado ka bang gusto mong magpatuloy sa file na ito? Database &Reports… Database &Reports… + + Statistics, health check, etc. + Mga statistic, pagsusuri sa kalusugan, atbp. + &Database Settings… &Database Settings… + + Database settings + Mga database setting + &Clone Entry… &Clone Entry… @@ -5748,18 +5183,34 @@ Sigurado ka bang gusto mong magpatuloy sa file na ito? Move u&p Ilipat ang u&p + + Move entry one step up + Ilipat ang entry ng isang hakbang pataas + Move do&wn Ilipat sa do&wn + + Move entry one step down + Ilipat ang entry ng isang hakbang pababa + Copy &Username Kopyahin ang &Username + + Copy username to clipboard + Kopyahin ang username sa clipboard + Copy &Password Kopyahin ang &Password + + Copy password to clipboard + Kopyahin ang password sa clipboard + &Settings &Settings @@ -5793,13 +5244,21 @@ Sigurado ka bang gusto mong magpatuloy sa file na ito? &Title - Copy &URL - Kopyahin ang &URL + Copy title to clipboard + Kopyahin ang pamagat sa clipboard + + + Copy URL to clipboard + kopyahin ang URL sa clipboard &Notes &Notes + + Copy notes to clipboard + Kopyahin ang mga note sa clipboard + &CSV File… &CSV File… @@ -5812,14 +5271,26 @@ Sigurado ka bang gusto mong magpatuloy sa file na ito? KeePass 1 Database… KeePass 1 Database… + + Import a KeePass 1 database + Mag-import ng database ng KeePass 1 + 1Password Vault… 1Password Vault… + + Import a 1Password Vault + Mag-import ng 1Password Vault + CSV File… CSV File… + + Import a CSV file + Mag-import ng CSV file + Show TOTP Ipakita ang TOTP @@ -5836,10 +5307,6 @@ Sigurado ka bang gusto mong magpatuloy sa file na ito? Copy &TOTP Kopyahin ang &TOTP - - Copy Password and TOTP - Kopyahin ang Password at TOTP - E&mpty recycle bin E&mpty na recycle bin @@ -5864,6 +5331,10 @@ Sigurado ka bang gusto mong magpatuloy sa file na ito? &Online Help &Online Help + + Go to online documentation + Pumunta sa online na documentation + &User Guide &User Guide @@ -5908,10 +5379,6 @@ Sigurado ka bang gusto mong magpatuloy sa file na ito? Classic (Platform-native) Classic (Platform-native) - - Show Menubar - - Show Toolbar Ipakita ang Toolbar @@ -5936,10 +5403,6 @@ Sigurado ka bang gusto mong magpatuloy sa file na ito? Clone Group... I-clond ang Group... - - &XML File… - &XML File… - Clear history I-clear ang history @@ -5967,8 +5430,10 @@ Expect some bugs and minor issues, this version is meant for testing purposes. - No Tags - Walang Mga Tag + 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. + BABALA: Ang bersyon ng Qt mo ay maaaring magdulot ng pag-crash ng KeePassXC gamit ang On-Screen Keyboard. +Inirerekomenda naming gamitin mo ang AppImage na available sa aming pahina ng mga pag-download. Restore Entry(s) @@ -5998,10 +5463,6 @@ Asahan ang ilang mga bug at maliliit na isyu, ang bersyon na ito ay para sa mga Quit KeePassXC Ihinto ang KeePassXC - - %1 Entry(s) - %1 Entry%1 (mga)Entry - Please present or touch your YubiKey to continue… Mangyaring ipakita o pindutin ang iyong YubiKey upang magpatuloy… @@ -6014,314 +5475,38 @@ Asahan ang ilang mga bug at maliliit na isyu, ang bersyon na ito ay para sa mga You must restart the application to apply this setting. Would you like to restart now? Dapat mong i-restart ang application upang mailapat ang setting na ito. Gusto mo bang i-restart ngayon? + + Tags + Mga tag + + + No Tags + Walang Mga Tag + + + %1 Entry(s) + %1 Entry%1 (mga)Entry + + + Copy Password and TOTP + Kopyahin ang Password at TOTP + + + &XML File… + &XML File… + + + XML File… + XML File… + + + Copy &URL + Kopyahin ang &URL + Allow Screen Capture Payagan ang Screen Capture - - 1Password 1PUX... - - - - Import a 1Password 1PUX file - - - - Import… - - - - Passkeys… - - - - Import Passkey - - - - Remote S&ync… - - - - Quit Application - - - - Open About Dialog - - - - Open Database - - - - Create Database - - - - Merge From Database - - - - Create Entry - - - - Edit Entry - I-edit ang Entry - - - Delete Entry - - - - Create Group - - - - Edit Group - I-edit ang Group - - - Delete Group - - - - Download All Favicons - - - - Sort Groups A-Z - - - - Sort Groups Z-A - - - - Save Database As - - - - Show Database Security - - - - Show Database Reports - - - - Show Database Settings - - - - Show Passkeys - - - - Clone Entry - - - - Move Entry Up - - - - Move Entry Down - - - - Copy Username - kopyahin ang Username - - - Copy Password - Kopyahin ang Password - - - Show Application Settings - - - - Show Password Generator - - - - Remove Passkey From Entry - - - - Perform Auto-Type: {USERNAME} - - - - Perform Auto-Type: {USERNAME}{ENTER} - - - - Perform Auto-Type: {PASSWORD} - - - - Perform Auto-Type: {PASSWORD}{ENTER} - - - - Perform Auto-Type: {TOTP} - - - - Copy Title - - - - Copy URL - - - - Copy Notes - - - - Export to CSV - - - - Export to HTML - - - - Import KeePass1 Database - Mag-import ng KeePass1 Database - - - Import 1Password Vault - - - - Import CSV File - - - - Show TOTP QR Code - - - - Set up TOTP - - - - Empty Recycle Bin - - - - Open Donation Website - - - - Open Bug Report - - - - Open Online Documentation - - - - Open Keyboard Shortcuts Guide - - - - Save Database Backup - - - - SSH Agent: Add Key - - - - SSH Agent: Remove Key - - - - Toggle Compact Mode - - - - Set Theme: Automatic - - - - Set Theme: Light - - - - Set Theme: Dark - - - - Set Theme: Classic - - - - Toggle Show Menubar - - - - Toggle Show Toolbar - - - - Toggle Show Preview Panel - - - - Toggle Always on Top - - - - Toggle Hide Usernames - - - - Toggle Hide Passwords - - - - Export to XML - - - - Toggle Allow Screen Capture - - - - Show Group Panel - - - - Toggle Show Group Panel - - - - Setup Remote Sync… - - - - Password Generator - - - - E&xpire Entry… - - - - Clear SSH Agent - - - - Clear all identities in ssh-agent - - ManageDatabase @@ -6379,6 +5564,26 @@ Asahan ang ilang mga bug at maliliit na isyu, ang bersyon na ito ay para sa mga Overwriting %1 [%2] Ino-overwrite na ang %1 [%2] + + older entry merged from database "%1" + ang mas lumang entry ay pinagsama mula sa database na "%1" + + + Adding backup for older target %1 [%2] + Pagdaragdag ng backup para sa lumang target %1 [%2] + + + Adding backup for older source %1 [%2] + Pagdaragdag ng backup para sa mas lumang source %1 [%2] + + + Reapplying older target entry on top of newer source %1 [%2] + Muling inilalapat ang mas lumang target na entry sa itaas ng mas bagong pinagmulan na %1 [%2] + + + Reapplying older source entry on top of newer target %1 [%2] + Muling inilalapat ang mas lumang source entry sa itaas ng mas bagong target na %1 [%2] + Synchronizing from newer source %1 [%2] Sini-synchronize mula sa mas bagong source na %1 [%2] @@ -6438,6 +5643,14 @@ Asahan ang ilang mga bug at maliliit na isyu, ang bersyon na ito ay para sa mga Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. Dito puwede mong ayusin ang mga setting ng pag-encrypt ng database. Huwag mag-alala, puwede mong baguhin ang mga ito sa ibang pagkakataon sa mga setting ng database. + + Advanced Settings + Mga Advanced Setting + + + Simple Settings + Mga Simpleng Setting + NewDatabaseWizardPageDatabaseKey @@ -6472,25 +5685,6 @@ Asahan ang ilang mga bug at maliliit na isyu, ang bersyon na ito ay para sa mga Pakipunan ang display name at isang opsyonal na paglalarawan para sa iyong bagong database: - - NewEntryAttachmentsDialog - - Attachment name cannot be empty - - - - Attachment with the same name already exists - - - - Save attachment - - - - New entry attachment - - - NixUtils @@ -6537,6 +5731,14 @@ Asahan ang ilang mga bug at maliliit na isyu, ang bersyon na ito ay para sa mga Inaasahan na %1 byte ng may malinaw na teksto, natagpuan ang %2 + + OpVaultOpenWidget + + Read Database did not produce an instance +%1 + Ang Read Database ay hindi gumawa ng isang kahilingan na %1 + + OpVaultReader @@ -6610,10 +5812,6 @@ Asahan ang ilang mga bug at maliliit na isyu, ang bersyon na ito ay para sa mga Unknown cipher: %1 Hindi kilalang cipher: %1 - - AES-256/GCM is currently not supported - AES-256/GCM ay kasalukuyang hindi sinusuportahan - Passphrase is required to decrypt this key Kinakailangan ang passphrase para i-decrypt ang key na ito @@ -6679,179 +5877,8 @@ Asahan ang ilang mga bug at maliliit na isyu, ang bersyon na ito ay para sa mga Hindi inaasahang EOF kapag nagsusulat ng private key - (encrypted) - (naka-encrypt) - - - - OpenSSHKeyGenDialog - - SSH Key Generator - - - - Type - Uri - - - Bits - - - - Comment - Comment - - - - PasskeyExportDialog - - KeePassXC - Passkey Export - - - - Filenames will be generated with title and .passkey file extension. - - - - Export entries - - - - Export Selected - - - - Cancel - Kanselahin - - - Export to folder - - - - Export the following passkey entries. - - - - - PasskeyExporter - - KeePassXC: Passkey Export - - - - File "%1.passkey" already exists. -Do you want to overwrite it? - - - - - Cannot open file - - - - Cannot open file "%1" for writing. - - - - Cannot write to file - - - - - PasskeyImportDialog - - KeePassXC - Passkey Import - - - - Username: %1 - - - - Group - Group - - - Database - - - - Import Passkey - - - - Import - Mag-import - - - Cancel - Kanselahin - - - Entry - Entry - - - Create new entry - - - - Relying Party: %1 - - - - Import the following passkey: - - - - Import the following passkey to this entry: - - - - Default passkeys group (Imported Passkeys) - - - - - PasskeyImporter - - Passkey file - - - - All files - Lahat ng mga file - - - Cannot open file - - - - Cannot open file "%1" for reading. - - - - Open passkey file - - - - Cannot import passkey - - - - Cannot import passkey file "%1". Data is missing. - - - - Cannot import passkey file "%1". -The following data is missing: -%2 - - - - Cannot import passkey file "%1". Private key is missing or malformed. - + AES-256/GCM is currently not supported + AES-256/GCM ay kasalukuyang hindi sinusuportahan @@ -7056,6 +6083,10 @@ The following data is missing: Word Count: Bilang ng Salita: + + Character Count: + Bilang ng Character: + Word Case: Word Case: @@ -7068,6 +6099,10 @@ The following data is missing: Add custom wordlist Magdagdag ng custom wordlist + + character + character + Close I-close @@ -7104,30 +6139,6 @@ The following data is missing: Entropy: %1 bit Entropy: %1 bit - - Password Quality: %1 - Kalidad ng Password: %1 - - - Poor - Password quality - Mahina - - - Weak - Password quality - Mahina - - - Good - Password quality - Mabuti - - - Excellent - Password quality - Magaling - Confirm Delete Wordlist Kumpirmahin ang Delete Wordlist @@ -7175,20 +6186,32 @@ Gusto mo bang i-overwrite ito? Mga Espesyal na Character - passwordLength - + Password Quality: %1 + Kalidad ng Password: %1 - Characters: %1 - + Poor + Password quality + Mahina - MIXED case - + Weak + Password quality + Mahina - Excluded characters: "0", "1", "l", "I", "O", "|", "﹒", "B", "8", "G", "6" - + Good + Password quality + Mabuti + + + Excellent + Password quality + Magaling + + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + Mga ibinukod na character: "0", "1", "l", "I", "O", "|", "﹒" @@ -7238,7 +6261,7 @@ Gusto mo bang i-overwrite ito? Magaling - Toggle password visibility using Control + H. Open the password generator using Control + G. + Toggle password visibilty using Control + H. Open the password generator using Control + G. @@ -7257,21 +6280,6 @@ Gusto mo bang i-overwrite ito? Pindutin ang &Tab sa pagitan ng mga character - - PreviewEntryAttachmentsDialog - - Preview entry attachment - - - - No preview available - - - - Image format not supported - - - QMessageBox @@ -7310,10 +6318,6 @@ Gusto mo bang i-overwrite ito? Continue Magpatuloy - - Continue with weak password - - QObject @@ -7707,10 +6711,6 @@ Gusto mo bang i-overwrite ito? Too many arguments provided. Masyadong maraming argument ang ibinigay. - - Path of the database. - Path ng database - Target decryption time in MS for the database. Target na oras ng pag-decrypt sa MS para sa database. @@ -7731,6 +6731,10 @@ Gusto mo bang i-overwrite ito? Create a new database. Lumikha ng bagong database + + Path of the database. + Path ng database + Invalid decryption time %1. Invalid na oras ng pag-decrypt na %1. @@ -7775,158 +6779,6 @@ Gusto mo bang i-overwrite ito? Successfully created new database. Matagumpay na nakagawa ng bagong database. - - Unset the password for the database. - I-unset ang password para sa database. - - - Unset the key file for the database. - I-unset ang key file para sa database - - - Edit a database. - I-edit ang database - - - Cannot use %1 and %2 at the same time. - Hindi magagamit ang %1 at %2 nang magkasabay. - - - Could not change the database key. - Hindi mabago ang database key. - - - Database was not modified. - Hindi binago ang database. - - - Writing the database failed: %1 - Nabigo ang pagsulat ng database: %1 - - - Successfully edited the database. - Matagumpay na na-edit ang database. - - - Cannot remove password: The database does not have a password. - Hindi maalis ang password: Walang password ang database. - - - Cannot remove file key: The database does not have a file key. - Hindi maalis ang file key: Ang database ay walang file key. - - - Loading the new key file failed: %1 - Nabigo ang pag-load ng bagong key file: %1 - - - Found unexpected Key type %1 - May nakitang hindi inaasahang uri ng Key %1 - - - Cannot remove all the keys from a database. - Hindi maalis ang lahat ng mga key mula sa database. - - - Show a database's information. - Ipakita ang impormasyon ng database - - - UUID: - UUID: - - - Name: - Pangalan: - - - Description: - Paglalarawan: - - - Cipher: - Cipher: - - - KDF: - KDF: - - - Recycle bin is enabled. - Naka-enable ang recycle bin - - - Recycle bin is not enabled. - Ang recycle bin ay hindi naka-enable. - - - Location - Lokasyon - - - Database created - Nalikha na ang database - - - Last saved - Huling na-save - - - Unsaved changes - Mga hindi na-save na pagbabago - - - yes - oo - - - no - wala - - - Number of groups - Bilang ng mga grupo - - - Number of entries - Bilang ng mga entry - - - Number of expired entries - Bilang ng mga nag-expire na entry - - - Unique passwords - Natatanging password - - - Non-unique passwords - Hindi natatanging mga password - - - Maximum password reuse - Maximum na muling paggamit ng password - - - Number of short passwords - Bilang ng mabababang password - - - Number of weak passwords - Bilang ng mahihinang password - - - Entries excluded from reports - Ang mga entry ay hindi kasama sa mga ulat - - - Average password length - Average na haba ng password - - - %1 characters - %1 character - Word count for the diceware passphrase. Bilang ng salita para sa diceware passphrase. @@ -7950,6 +6802,10 @@ Gusto mo bang i-overwrite ito? Invalid word count %1 Invalid na word count na %1 + + The word list is too small (< 1000 items) + Masyadong maliit ang listahan ng salitang (< 1000 item) + Title for the entry. Pamagat para sa entry @@ -7974,6 +6830,10 @@ Gusto mo bang i-overwrite ito? Enter new password for entry: Maglagay ng bagong password para sa entry: + + Writing the database failed: %1 + Nabigo ang pagsulat ng database: %1 + Successfully edited entry %1. Matagumpay na na-edit ang entry na %1. @@ -8094,6 +6954,10 @@ Gusto mo bang i-overwrite ito? Exit interactive mode. Lumabas sa interactive mode. + + Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. + Format na gagamitin kapag nag-e-export. Ang mga available na pagpipilian ay 'xml' o 'csv'. Default sa 'xml'. + Exports the content of a database to standard output in the specified format. Nai-export na ang nilalaman ng isang database sa karaniwang output sa tinukoy na format. @@ -8194,6 +7058,106 @@ Gusto mo bang i-overwrite ito? Successfully imported database. Matagumpay na na-import ang database. + + Show a database's information. + Ipakita ang impormasyon ng database + + + UUID: + UUID: + + + Name: + Pangalan: + + + Description: + Paglalarawan: + + + Cipher: + Cipher: + + + KDF: + KDF: + + + Recycle bin is enabled. + Naka-enable ang recycle bin + + + Recycle bin is not enabled. + Ang recycle bin ay hindi naka-enable. + + + Location + Lokasyon + + + Database created + Nalikha na ang database + + + Last saved + Huling na-save + + + Unsaved changes + Mga hindi na-save na pagbabago + + + yes + oo + + + no + wala + + + Number of groups + Bilang ng mga grupo + + + Number of entries + Bilang ng mga entry + + + Number of expired entries + Bilang ng mga nag-expire na entry + + + Unique passwords + Natatanging password + + + Non-unique passwords + Hindi natatanging mga password + + + Maximum password reuse + Maximum na muling paggamit ng password + + + Number of short passwords + Bilang ng mabababang password + + + Number of weak passwords + Bilang ng mahihinang password + + + Entries excluded from reports + Ang mga entry ay hindi kasama sa mga ulat + + + Average password length + Average na haba ng password + + + %1 characters + %1 character + Unknown command %1 Hindi kilalang utos %1 @@ -8366,10 +7330,6 @@ Mga available command: Show the protected attributes in clear text. Ipakita ang mga protektadong attribute sa malinaw na teksto. - - Show all the attributes of the entry. - Ipakita ang lahat ng mga attribute ng entry. - Show the attachments of the entry. Ipakita ang mga attachment ng entry. @@ -8440,10 +7400,6 @@ Mangyaring isaalang-alang ang pagbuo ng bagong key file. Invalid YubiKey serial %1 Invalid na YubiKey serial na %1 - - Please present or touch your YubiKey to continue. - Mangyaring ipakita o pindutin ang iyong YubiKey para magpatuloy. - Enter password to encrypt database (optional): Maglagay ng password para i-encrypt ang database (opsyonal): @@ -8682,6 +7638,18 @@ Kernel: %3 %4 file empty walang lamang file + + malformed string + malformed na string + + + missing closing quote + nawawalang closing quote + + + %1: (row, col) %2,%3 + %1: (row, col) %2,%3 + AES 256-bit AES 256-bit @@ -8860,6 +7828,14 @@ Kernel: %3 %4 read password of the database from stdin basahin ang password ng database mula sa stdin + + allow app screen recordering and screenshots + payagan ang pag-record ng screen ng app at mga screenshot + + + Locked databases. + Mga naka-lock na database. + Database failed to lock. Nabigong i-lock ang database. @@ -8868,10 +7844,6 @@ Kernel: %3 %4 Another instance of KeePassXC is already running. Ang isa pang halimbawa ng KeePassXC ay tumatakbo na. - - KeePassXC is not running. No open database to lock - Ang KeePassXC ay hindi tumatakbo. Walang bukas na database upang i-lock - Fatal error while testing the cryptographic functions. Fatal na error habang sinusubukan ang mga cryptographic function. @@ -8915,299 +7887,70 @@ Kernel: %3 %4 Invalid na KDF - Access to all entries is denied - + Please present or touch your YubiKey to continue. + Mangyaring ipakita o pindutin ang iyong YubiKey para magpatuloy. - allow screenshots and app recording (Windows/macOS) - + Show all the attributes of the entry. + Ipakita ang lahat ng mga attribute ng entry. + + + Edit a database. + I-edit ang database + + + Could not change the database key. + Hindi mabago ang database key. + + + Database was not modified. + Hindi binago ang database. + + + Successfully edited the database. + Matagumpay na na-edit ang database. + + + Loading the new key file failed: %1 + Nabigo ang pag-load ng bagong key file: %1 + + + Unset the password for the database. + I-unset ang password para sa database. + + + Unset the key file for the database. + I-unset ang key file para sa database + + + Cannot use %1 and %2 at the same time. + Hindi magagamit ang %1 at %2 nang magkasabay. + + + Cannot remove all the keys from a database. + Hindi maalis ang lahat ng mga key mula sa database. + + + Cannot remove password: The database does not have a password. + Hindi maalis ang password: Walang password ang database. + + + Cannot remove file key: The database does not have a file key. + Hindi maalis ang file key: Ang database ay walang file key. + + + Found unexpected Key type %1 + May nakitang hindi inaasahang uri ng Key %1 Set the key file for the database. -This option is deprecated, use --set-key-file instead. - +This options is deprecated, use --set-key-file instead. + Itakda ang key file para sa database. +Ang pagpipiliang ito ay hindi na ginagamit, gamitin ang --set-key-file sa halip. - Databases have been locked. - - - - Attestation not supported - - - - Credential is excluded - - - - Passkeys request canceled - - - - Invalid user verification - - - - Empty public key - - - - Invalid URL provided - - - - Passkeys - - - - AES initialization failed - - - - AES encrypt failed - - - - Failed to store in Linux Keyring - - - - Polkit returned an error: %1 - - - - Could not locate key in keyring - - - - Could not read key in keyring - - - - AES decrypt failed - - - - No Polkit authentication agent was available - - - - Polkit authorization failed - - - - No Quick Unlock provider is available - - - - Failed to init KeePassXC crypto. - Nabigong simulan ang KeePassXC crypto. - - - Failed to encrypt key data. - Nabigong i-encrypt ang key data. - - - Failed to get Windows Hello credential. - Nabigong makuha ang kredensyal ng Windows Hello. - - - Failed to decrypt key data. - Nabigong i-decrypt ang key data. - - - Origin is empty or not allowed - - - - Effective domain is not a valid domain - - - - Origin and RP ID do not match - - - - No supported algorithms were provided - - - - Wait for timer to expire - - - - Challenge is shorter than required minimum length - - - - user.id does not match the required length - - - - Favorite - Tag for favorite entries - - - - File does not exist. - - - - Cannot open file: %1 - - - - Cannot parse file: %1 at position %2 - - - - Failed to decrypt json file: %1 - - - - Invalid encKeyValidation field - - - - Invalid cipher list within encKeyValidation field - - - - Wrong password - - - - Invalid encrypted data field - - - - Invalid cipher list within encrypted data field - - - - Cannot initialize cipher - - - - Cannot decrypt data - - - - Bitwarden Import - - - - Archived - Tag for archived entries - - - - Invalid 1PUX file format: Not a valid ZIP file. - - - - Invalid 1PUX file format: Missing export.data - - - - 1Password Import - - - - Enter Shortcut - - - - Action - - - - Shortcuts - - - - Unknown passkeys error - - - - Invalid KDF iterations, cannot decrypt json file - - - - Unsupported format, ensure your Bitwarden export is password-protected - - - - Only PBKDF and Argon2 are supported, cannot decrypt json file - - - - Reset Shortcuts - - - - Double click an action to change its shortcut - - - - Filter... - - - - Shortcut Conflict - - - - Shortcut %1 conflicts with '%2'. Overwrite shortcut? - - - - Cannot generate valid passphrases because the wordlist is too short - - - - Encrypted files are not supported. - - - - Proton Pass Import - - - - Delete plugin data? - I-delete ang data ng plugin? - - - Delete plugin data from Entry(s)? - - - - Passkey - - - - Format to use when exporting. Available choices are 'xml', 'csv' or 'html'. Defaults to 'xml'. - - - - start minimized to the system tray - - - - malformed string, possible unescaped delimiter - - - - missing closing delimiter - - - - %1, row: %2, column: %3 - - - - Tags - Mga tag + KeePassXC is not running. No open database to lock + Ang KeePassXC ay hindi tumatakbo. Walang bukas na database upang i-lock @@ -9244,39 +7987,20 @@ This option is deprecated, use --set-key-file instead. Panloob na zlib na error: - - RemoteHandler - - Command `%1` did not finish in time. Process was killed. - - - - Failed to upload merged database. Command `%1` did not finish in time. Process was killed. - - - - Invalid download parameters provided. - - - - Command `%1` failed to download database. - - - - Invalid database pointer or upload parameters provided. - - - - Command `%1` exited with status code: %2 - - - - Failed to upload merged database. Command `%1` exited with status code: %2 - - - ReportsWidgetBrowserStatistics + + Exclude expired entries from the report + Ibukod ang mga nag-expire na entry mula sa ulat + + + Show only entries which have URL set + Ipakita lamang ang mga entry na may nakatakdang URL + + + Show only entries which have browser settings in custom data + Ipakita lamang ang mga entry na may mga setting ng browser sa custom na data + Double-click entries to edit. I-double click ang mga entry para i-edit. @@ -9341,53 +8065,44 @@ This option is deprecated, use --set-key-file instead. Exclude from reports Ibukod mula sa mga ulat - - Expire Entry(s)… - - - - Only show entries that have a URL - - - - Only show entries that have been explicitly allowed or denied - - - - Show expired entries - - - - (Expired) - - - - Delete plugin data from Entry(s)… - - ReportsWidgetHealthcheck - Show expired entries - + Exclude expired entries from the report + Ibukod ang mga nag-expire na entry mula sa ulat - (Expired) - + Also show entries that have been excluded from reports + Gayundin, ipakita ang mga entry na hindi kasama sa mga ulat Hover over reason to show additional details. Double-click entries to edit. Mag-hover sa itaas para makita ng mga karagdagang detalye. I-double click ang mga entry para i-edit. + + Bad + Password quality + Hindi maganda + Bad — password must be changed Hindi maganda — dapat palitan ang password + + Poor + Password quality + Mahina + Poor — password should be changed Mahina — dapat palitan ang password + + Weak + Password quality + Mahina + Weak — consider changing the password Mahina — isaalang-alang ang pagpapalit ng password @@ -9436,14 +8151,6 @@ This option is deprecated, use --set-key-file instead. Exclude from reports Ibukod mula sa mga ulat - - Expire Entry(s)… - - - - Show entries that have been excluded from reports - - ReportsWidgetHibp @@ -9539,77 +8246,6 @@ This option is deprecated, use --set-key-file instead. Exclude from reports Ibukod mula sa mga ulat - - Expire Entry(s)… - - - - - ReportsWidgetPasskeys - - Export - I-export - - - Import - Mag-import - - - List of entry URLs - Listahan ng mga URL entry - - - Title - Pamagat - - - Path - Path - - - Username - Username - - - URLs - URLs - - - Edit Entry… - I-edit ang Entry… - - - Delete Entry(s)… - I-delete ang Entry…I-delete ang (mga)Entry… - - - Relying Party - - - - Show expired entries - - - - (Expired) - - - - Export Confirmation - I-export ang Kumpirmasyon - - - The passkey file will be vulnerable to theft and unauthorized use, if left unsecured. Are you sure you want to continue? - - - - Please wait, list of entries with passkeys is being updated… - - - - No entries with passkeys. - - ReportsWidgetStatistics @@ -9784,14 +8420,6 @@ This option is deprecated, use --set-key-file instead. No agent running, cannot list identities. Walang gumaganang ahente, hindi makakapaglista ng mga pagkakakilanlan. - - Failed to remove all SSH identities from agent. - - - - All SSH identities removed from agent. - - SearchHelpWidget @@ -9858,10 +8486,6 @@ This option is deprecated, use --set-key-file instead. Search Help Maghanap ng Tulong - - Save Search - I-save ang Search - Search (%1)… Search placeholder text, %1 is the keyboard shortcut @@ -9875,6 +8499,10 @@ This option is deprecated, use --set-key-file instead. Limit search to selected group Limitahan ang paghahanap sa napiling group + + Save Search + I-save ang Search + SettingsClientModel @@ -9936,10 +8564,34 @@ This option is deprecated, use --set-key-file instead. Confirm when passwords are retrieved by clients Kumpirmahin kapag ang mga password ay nabawi na ng mga client + + <html><head/><body><p><span style=" + font-family:'-apple-system','BlinkMacSystemFont','Segoe UI','Helvetica','Arial','sans-serif','Apple Color + Emoji','Segoe UI Emoji'; font-size:14px; color:#24292e; background-color:#ffffff;">This setting does + not override disabling recycle bin prompts</span></p></body></html> + + <html><head/><body><p><span style=" + font-family:'-apple-system','BlinkMacSystemFont','Segoe UI','Helvetica','Arial','sans-serif','Apple Color + Emoji','Segoe UI Emoji'; font-size:14px; color:#24292e; background-color:#ffffff;">Ang setting na ito ay hindi + magpapawalang-bisa sa paggana ng mga promt sa recycle bin</span></p></body></html> + + Confirm when clients request entry deletion Kumpirmahin kapag humiling ang mga client ng pag-delete ng entry + + <html><head/><body><p>This improves compatibility with certain applications + which search for password without unlocking the database first.</p><p>But enabling this may also + crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a + different value set in applications.)</p></body></html> + + <html><head/><body><p>Pinapabuti nito ang pagiging tugma sa mga partikular na application + na naghahanap para sa password nang hindi muna ina-unlock ang database.</p><p>Ngunit ang pagpapagana nito ay maaari ding + makasira ng database ng kliyente kung hindi pa ito bukas sa loob ng tinukoy na timeout. (Kadalasan 25s, ngunit maaaring + magkaibang value set sa applications.)</p></body></html> + + Prompt to unlock database before searching I-prompt para i-unlock ang database bago mag-search @@ -9964,14 +8616,6 @@ This option is deprecated, use --set-key-file instead. Save current changes to activate the plugin and enable editing of this section. I-save ang mga kasalukuyang pagbabago para i-activate ang plugin at i-enable ang pag-edit ng seksyong ito. - - <html><head/><body><p>This setting does not override disabling recycle bin prompts </p></body></html> - - - - <html><head/><body><p>This improves compatibility with certain applications which search for password without unlocking the database first.</p><p>But enabling this may also crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a different value set in applications.) </p></body></html> - - SettingsWidgetKeeShare @@ -10079,14 +8723,6 @@ This option is deprecated, use --set-key-file instead. TagModel - - Clear Search - I-clear ang Paghahanap - - - All Entries - Lahat ng Entry - Expired Nag-expire na @@ -10095,6 +8731,14 @@ This option is deprecated, use --set-key-file instead. Weak Passwords Mga Mahinang Password + + All Entries + Lahat ng Entry + + + Clear Search + I-clear ang Paghahanap + TagView @@ -10273,6 +8917,26 @@ Halimbawa: JBSWY3DPEHPK3PXP Start storing your passwords securely in a KeePassXC database Simulan ang pag-store ng iyong mga password nang ligtas sa isang database ng KeePassXC + + Create new database + Lumikha ng bagong database + + + Open existing database + Buksan ang umiiral na database + + + Import from KeePass 1 + Mag-import mula sa KeePass 1 + + + Import from 1Password + Mag-import mula sa 1Password + + + Import from CSV + Mag-import mula sa CSV + Recent databases Mga kamakailang database @@ -10285,18 +8949,6 @@ Halimbawa: JBSWY3DPEHPK3PXP Welcome to KeePassXC %1 Welcome sa KeePassXC %1 - - Create Database - - - - Open Database - - - - Import File - - WinUtils @@ -10313,8 +8965,31 @@ Halimbawa: JBSWY3DPEHPK3PXP Hindi mairehistro ang global shortcut + + WindowsHello + + Failed to init KeePassXC crypto. + Nabigong simulan ang KeePassXC crypto. + + + Failed to encrypt key data. + Nabigong i-encrypt ang key data. + + + Failed to get Windows Hello credential. + Nabigong makuha ang kredensyal ng Windows Hello. + + + Failed to decrypt key data. + Nabigong i-decrypt ang key data. + + YubiKey + + %1 No interface, slot %2 + %1 Walang interface, slot %2 + General: Pangkalahatan: @@ -10326,6 +9001,14 @@ Halimbawa: JBSWY3DPEHPK3PXP YubiKeyEditWidget + + Refresh hardware tokens + I-refresh ang mga token ng hardware + + + Refresh + I-refresh + Hardware key slot selection Pagpili ng hardware key slot @@ -10358,6 +9041,10 @@ Halimbawa: JBSWY3DPEHPK3PXP Challenge-Response set, click to change or remove Challenge-Response set, i-click upang baguhin o alisin + + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + <p>Kung mayroon ka ng <a href="https://www.yubico.com/">YubiKey</a> o <a href="https://onlykey.io">OnlyKey</a>, magagamit mo ito para sa karagdagang seguridad.</p><p>Ang key ay nangangailangan ng isa sa mga slot nito upang ma-program bilang <a href="https://www.yubico.com/products/services-software/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + Detecting hardware keys… Dini-detect ang mga hardware key… @@ -10366,25 +9053,28 @@ Halimbawa: JBSWY3DPEHPK3PXP No hardware keys detected Walang nakitang hardware key + + + YubiKeyInterface - Refresh hardware keys - - - - <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed with <a href="https://keepassxc.org/docs/#faq-yubikey-howto">Challenge-Response</a>.</p> - - - - Hardware keys found, but no slots are configured - + %1 Invalid slot specified - %2 + %1 Di-wastong slot ang tinukoy - %2 YubiKeyInterfacePCSC + + (PCSC) %1 [%2] Challenge-Response - Slot %3 + (PCSC) %1 [%2] Challenge-Response - Slot %3 + The YubiKey PCSC interface has not been initialized. Ang interface ng YubiKey PCSC ay hindi pa nasimulan. + + Hardware key is currently in use. + Kasalukuyang ginagamit ang hardware key. + Could not find or access hardware key with serial number %1. Please present it to continue. Hindi mahanap o ma-access ang hardware key na may serial number na %1. Mangyaring ipakita ito para magpatuloy. @@ -10401,21 +9091,6 @@ Halimbawa: JBSWY3DPEHPK3PXP Failed to complete a challenge-response, the PCSC error code was: %1 Nabigong makumpleto ang isang challenge-response, ang PCSC error code ay: %1 - - (NFC) %1 [%2] - Slot %3, %4 - YubiKey display fields - - - - Press - USB Challenge-Response Key interaction request - Pindutin - - - Passive - USB Challenge-Response Key no interaction required - Passive - YubiKeyInterfaceUSB @@ -10423,6 +9098,14 @@ Halimbawa: JBSWY3DPEHPK3PXP Unknown Hindi kilala + + (USB) %1 [%2] Configured Slot - %3 + (USB) %1 [%2] ng Na-configyre na Slot - %3 + + + (USB) %1 [%2] Challenge-Response - Slot %3 - %4 + (USB) %1 [%2] Challenge-Response - Slot %3 - %4 + Press USB Challenge-Response Key interaction request @@ -10437,6 +9120,10 @@ Halimbawa: JBSWY3DPEHPK3PXP The YubiKey USB interface has not been initialized. Ang YubiKey USB interface ay hindi pa nasimulan. + + Hardware key is currently in use. + Kasalukuyang ginagamit ang hardware key. + Could not find hardware key with serial number %1. Please plug it in to continue. Hindi mahanap ang hardware key na may serial number na %1. Paki-plug ito upang magpatuloy. @@ -10453,15 +9140,5 @@ Halimbawa: JBSWY3DPEHPK3PXP Failed to complete a challenge-response, the specific error was: %1 Nabigong makumpleto ang isang challenge-response, ang partikular na error ay: %1 - - %1 [%2] - Slot %3 - YubiKey NEO display fields - - - - %1 [%2] - Slot %3, %4 - YubiKey display fields - - \ No newline at end of file diff --git a/share/translations/keepassxc_fr.ts b/share/translations/keepassxc_fr.ts index d809f8d39..dc6d89187 100644 --- a/share/translations/keepassxc_fr.ts +++ b/share/translations/keepassxc_fr.ts @@ -50,15 +50,15 @@ AccessControlDialog KeePassXC - Access Request - KeePassXC – Demande d’accès + KeePassXC - Demande d'accès Non-existing/inaccessible executable path. Please double-check the client is legit. - Le chemin de l’exécutable est inexistant ou inaccessible. Veuillez vérifier s’il s’agit d’un client de confiance. + Chemin d’exécutable inexistant ou inaccessible. Veuillez vérifier s'il s'agit réellement d'un client de confiance. <html><head/><body><p><span style=" font-weight:600;">%1 </span>is requesting access to the following entries:</p></body></html> - <html><head/><body><p><span style=" font-weight:600;">%1 </span>demande l’accès aux entrées suivantes :</p></body></html> + <html><head/><body><p><span style=" font-weight:600;">%1 </span>demande l'accès aux entrées suivantes :</p></body></html> Name @@ -80,17 +80,17 @@ Details Détails - - Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. - Votre décision sera mémorisée pour la durée tant que le client qui effectue la demande et KeePassXC fonctionnent tous deux. - Remember Mémoriser Allow Selected - Autoriser les éléments sélectionnés + Autoriser les sélections + + + Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. + Votre décision sera mémorisée pour la durée tant que le client qui effectue la demande et KeePassXC fonctionnent tous deux. Deny All && Future @@ -122,17 +122,13 @@ Use OpenSSH Utiliser OpenSSH - - Use both agents - Utiliser les deux agents - SSH_AUTH_SOCK override - Valeur de remplacement SSH_AUTH_SOCK + Remplacer SSH_AUTH_SOCK SSH_AUTH_SOCK value - Valeur SSH_AUTH_SOCK + Valeur de SSH_AUTH_SOCK (empty) @@ -154,6 +150,10 @@ SSH Agent connection is working! La connexion de l’agent SSH fonctionne. + + Use both agents + Utiliser les deux agents + ApplicationSettingsWidget @@ -169,10 +169,6 @@ Security Sécurité - - This setting cannot be enabled when minimize on unlock is enabled. - Ce paramètre ne peut pas être activé si l’option Réduire au déverrouillage est activée. - Access error for config file %1 Erreur d’accès pour le fichier de configuration %1 @@ -215,51 +211,23 @@ You must restart the application to set the new language. Would you like to restart now? - Pour appliquer la nouvelle langue, vous devez redémarrer l’application. Voulez-vous la démarrer maintenant ? + Vous devez redémarrer l'application pour changer la langue. Voulez-vous redémarrer maintenant ? + + + Reset Settings? + Réinitialiser les paramètres ? + + + Are you sure you want to reset all general and security settings to default? + Souhaitez-vous vraiment réinitialiser tous les paramètres généraux et de sécurité à leur valeurs par défaut ? Select backup storage directory Sélectionner le dossier de sauvegarde - Confirm Reset - Confirmez la remise à zéro - - - Are you sure you want to reset all settings to default? - Etes-vous sûr que vous voulez rétablir la valeur par défault de tous les réglages? - - - Import KeePassXC Settings - Importation des réglages de KeePassXC - - - Failed to import settings from %1, not a valid settings file. - Impossible d'importer les réglages, %1 n'est pas fichier de réglages valide. - - - Export KeePassXC Settings - Exporter les réglages de KeePassXC - - - Small - Petite - - - Normal - Normale - - - Medium - Moyenne - - - Large - Grande - - - Custom - Personnalisée + This setting cannot be enabled when minimize on unlock is enabled. + Ce paramètre ne peut pas être activé lorsque l’option Réduire au déverrouillage est activée. @@ -292,10 +260,6 @@ Remember previously used databases Mémoriser les bases de données utilisées précédemment - - recent files - fichiers récents - Load previously open databases on startup Lors du démarrage, charger les bases de données ouvertes précédemment @@ -312,6 +276,25 @@ Include beta releases when checking for updates Inclure les versions bêta lors de la vérification de la présence de mises à jour + + On database unlock, show entries that + Pour les bases de données déverrouillées, montrer les entrées qui + + + have expired + On database unlock, show entries that... + a expiré + + + days + On database unlock, show entries that will expire within %1 days + jours + + + will expire within + On database unlock, show entries that... + expireront dans + File Management Gestion des fichiers @@ -334,23 +317,35 @@ Backup database file before saving - Sauvegarder le fichier de la base de données avant d’enregistrer + Sauvegarder la base de données avant d'enregistrer + + + Backup destination + Destination de sauvegarde + + + Specifies the database backup file location. Occurrences of "{DB_FILENAME}" are replaced with the filename of the saved database without extension. {TIME:<format>} is replaced with the backup time, see https://doc.qt.io/qt-5/qdatetime.html#toString. <format> defaults to format string "dd_MM_yyyy_hh-mm-ss". + Spécifie l'emplacement du fichier de sauvegarde de la base de données. Les occurrences de "{DB_FILENAME}" sont remplacées par le nom de fichier de la base de données sauvegardée sans extension. {TIME:<format>} est remplacé par l'heure de sauvegarde, cf https://doc.qt.io/qt-5/qdatetime.html#toString. Par défaut, <format>utilise le format "dd_MM_yyyy_hh-mm-ss". {DB_FILENAME}.old.kdbx - {DB_FILENAME}.ancienne.kdbx + {DB_FILENAME}.old.kdbx + + + Choose... + Choisissez... Use alternative saving method (may solve problems with Dropbox, Google Drive, GVFS, etc.) - Utiliser une méthode d’enregistrement de remplacement (peut résoudre des problèmes avec Dropbox, Google Drive, GVFS, etc.). + Utiliser une méthode d'enregistrement alternative (peut résoudre les problèmes avec Dropbox, Google Drive, GVFS, etc). Temporary file moved into place - Le fichier temporaire a été déplacé + Fichier temporaire est mis en place Directly write to database file (dangerous) - Écrire directement dans le fichier de la base de données (dangereux) + Écrire directement dans la base de données (dangereux) Entry Management @@ -395,7 +390,7 @@ Toolbar button style - Style des boutons de la barre d’outils + Style de bouton de la barre d’outils Movable toolbar @@ -417,17 +412,13 @@ Toolbar button style: Style des boutons de la barre d’outils : - - Show passwords in color - Afficher les mots de passe en couleur - Use monospaced font for notes Utiliser une police à espacement constant pour les notes Minimize instead of app exit - Réduire au lieu de fermer l’appli + Réduire au lieu de quitter l’application Show a system tray icon @@ -467,7 +458,7 @@ Hide expired entries from Auto-Type - Cacher à la saisie automatique les entrées expirées + Cacher les entrées expirées pour la saisie automatique Re-lock previously locked database after performing Auto-Type @@ -479,7 +470,7 @@ Global Auto-Type shortcut: - Raccourci global de la saisie automatique : + Raccourci de saisie automatique globale : Auto-type start delay milliseconds @@ -488,11 +479,11 @@ ms Milliseconds -  ms + ms Auto-Type typing delay: - Délai de saisie de la saisie automatique : + Vitesse de remplissage de la saisie automatique : Global auto-type shortcut @@ -507,69 +498,12 @@ Mémoriser la dernière entrée saisie pendant : - On database unlock, show entries that will expire within - Lors du déverrouillage d’une base de données, montrer les entrées qui vont expirer dans + recent files + fichiers récents - On database unlock, show entries that will expire within - Lors du déverrouillage d’une base de données, montrer les entrées qui vont expirer dans - - - days - number of days warning for password expiration - jours - - - Destination format: - Format de destination : - - - <html><head/><body><p><span style=" font-weight:600;">{DB_FILENAME}</span> is replaced with the filename of the saved database without extension</p><p><span style=" font-weight:600;">{TIME:&lt;format&gt;}</span> is replaced with the specified time format (default: dd_MM_yyyy_hh-mm-ss)</p><p>See the User Guide for more details</p></body></html> - <html><head/><body><p><span style=" font-weight:600;">{DB_FILENAME}</span> est remplacé par le nom de fichier de la base de données sauvegardée sans extension</p><p><span style=" font-weight:600;">{TIME:&lt;format&gt;}</span> est remplacé par le format de temps spécifié (default: dd_MM_yyyy_hh-mm-ss)</p><p>Voir le Guide Utilisateur pour plus de détails</p></body></html> - - - Choose folder... - Choisissez le répertoire... - - - Show confirmation before moving entries to recycle bin - Afficher une confirmation avant de déplacer les entrées dans la corbeille - - - Copy data on double clicking field in entry view - Copier les données en double-cliquant sur le champ de l'entrée affichée - - - Show toolbar - Afficher la barre d'outils - - - Show the menu bar by pressing the Alt key - Afficher la barre des menus en pressant la touche Alt - - - Show menubar - Afficher la barre de menus - - - Import settings… - Importer les réglages... - - - Export settings… - Exporter les réglages... - - - Open browser on double clicking URL field in entry view - Ouvrir le navigateur en double-cliquant sur le champ URL de l'entrée affichée - - - Font size: - Taille de la police : - - - Font size selection - Sélection de la taille de police + Show passwords in color + Afficher les mots de passe en couleur @@ -589,7 +523,7 @@ Clear clipboard after - Effacer le presse-papiers après + Vider le presse-papiers après Clear search query after @@ -624,6 +558,10 @@ Lock databases after minimizing the window Verrouiller les bases de données après avoir réduit la fenêtre + + Require password repeat when it is visible + Exiger la confirmation du mot de passe s’il est visible + Hide passwords when editing them Cacher les mots de passe lors de leur modification @@ -636,6 +574,18 @@ Hide passwords in the entry preview panel Cacher les mots de passe dans le panneau de prévisualisation des entrées + + Hide entry notes by default + Par défaut, cacher les notes des entrées + + + Move entries to recycle bin without confirmation + Déplacer les entrées vers la corbeille sans confirmation + + + Enable double click to copy the username/password entry columns + Activer le double-clic pour copier le nom d'utilisateur/mot de passe des colonnes d'entrées + Privacy Confidentialité @@ -646,26 +596,14 @@ Hide TOTP in the entry preview panel - Cacher le TOTP dans le panneau d’aperçu des entrées - - - Lock databases when switching user - Verrouiller les bases de données lors d’un changement d’utilisateur - - - Lock Options - Options de Verrouillage - - - Hide notes in the entry preview panel - Cacher les notes dans le panneau d'aperçu des entrées + AutoType The requested Auto-Type sequence cannot be used due to an error: - La séquence de saisie automatique demandée ne peut pas être utilisée à cause d’une erreur : + La séquence de saisie automatique demandée ne peut être effectuée à la suite d'une erreur : Auto-Type Error @@ -677,40 +615,54 @@ KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. - KeePassXC requiert l’autorisation Accessibilité pour la saisie automatique des entrées. SI vous avez déjà accordé l’autorisation, il vous faudra peut-être redémarrer KeePassXC. + KeePassXC nécessite la permission d'accessibilité pour la saisie automatique des entrées. Si vous avez déjà accordé cette permission, il vous faudra peut-être redémarrer KeePassXC. KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. - KeePassXC a besoin de l’autorisation Accessibilité et Enregistreur d’écran pour la saisie automatique globale. L’enregistrement de l’écran est nécessaire afin d’utiliser le titre des fenêtres pour trouver des entrées. Si vous avez déjà accordé l’autorisation, il vous faudra peut-être redémarrer KeePassXC. + KeePassXC nécessite la permission d'accessibilité et d'enregistrement d’écran pour la saisie automatique globale. L’enregistrement d'écran est requis afin d’utiliser le titre des fenêtres pour trouver des entrées. Si vous avez déjà accordé cette permission, il vous faudra peut-être redémarrer KeePassXC. Invalid entry provided - L’entrée indiquée est invalide + Entrée invalide Bracket imbalance detected, found extra { or } - Une disparité d’accolade a été détectée. Une { ou } supplémentaire a été trouvée + Mauvaise parité de parenthèses détectée, une parenthèse { ou } en plus a été trouvée Too many repetitions detected, max is %1: %2 - Trop de répétitions ont été détectées. Le maximum est %1 : %2 + Trop de répétitions détectées, le maximum est %1: %2 Very slow key press detected, max is %1: %2 - Un appui de touche très lent a été détecté. Le maximum est %1 : %2 + Appui de touche très lent détecté, le maximum est de %1 : %2 Very long delay detected, max is %1: %2 - Un pause très longue a été détectée. Le maximum est %1 : %2 + Pause très longue détectée, le maximum est de %1 : %2 + + + Invalid conversion type: %1 + Type de conversion invalide : %1 + + + Invalid conversion syntax: %1 + Syntaxe de conversion invalide : %1 + + + Invalid regular expression syntax %1 +%2 + Syntaxe d'expression régulière invalide %1 +%2 + + + Invalid placeholder: %1 + Variable invalide : %1 Entry does not have attribute for PICKCHARS: %1 L'entrée n'a pas d'attribut pour PICKCHARS : %1 - - Invalid placeholder: %1 - L’espace réservé est invalide : %1 - AutoTypeAssociationsModel @@ -752,6 +704,10 @@ AutoTypePlatformX11 + + Trying to send invalid keysym. + Tentative d'envoi d'un code de caractère invalide. + Sequence aborted: Caps Lock is on Séquence interrompue: le verrouillage majuscule est activé @@ -764,16 +720,12 @@ Unable to get valid keycode for key: Impossible d'obtenir un code d'identification valide pour la clé : - - Trying to send invalid keyboard symbol. - Tentative d'envoi d'un caractère de clavier non reconnu. - AutoTypeSelectDialog Auto-Type - KeePassXC - Saisie automatique – KeePassXC + Saisie automatique - KeePassXC Double click a row to perform Auto-Type or find an entry using the search: @@ -843,7 +795,7 @@ Ctrl+4 - Utiliser le clavier virtuel (Windows seulement)</p> BrowserAccessControlDialog KeePassXC - Browser Access Request - KeePassXC – Demande d’accès au navigateur + KeePassXC-Browser - Requête d'accès au navigateur %1 is requesting access to the following entries: @@ -859,27 +811,27 @@ Ctrl+4 - Utiliser le clavier virtuel (Windows seulement)</p> Allow access to entries - Permettre l’accès aux entrées + Autoriser l’accès aux entrées Allow Selected - Permettre les éléments sélectionnés + Autoriser les sélections Deny All - Tout refuser + Tout interdire Disable for this site Désactiver pour ce site - - Undo - Annuler - BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + KeePassXC-Browser Enregistrer l’entrée + Ok Valider @@ -894,82 +846,25 @@ Please select the correct database for saving credentials. Plusieurs bases de données sont ouvertes. Veuillez sélectionner la base de données souhaitée pour enregistrer les identifiants. - - KeePassXC - Select Database - KeePassXC - Sélectionner une base - - - - BrowserPasskeysConfirmationDialog - - Cancel - Annuler - - - Update - Mettre à jour - - - Authenticate - Identification - - - Register new - Enregistrer comme nouveau - - - Register - Enregistrer - - - Timeout in <b>%n</b> seconds... - délai d'expiration in <b>%n</b> seconds...délai d'expiration in <b>%n</b> seconds...Expire dans<b>%n</b> secondes... - - - Relying Party: %1 - Tiers de confiance : %1 - - - Username: %1 - Nom d’utilisateur : %1 - - - KeePassXC - Passkey credentials - KeePassXC - Identifiants de clé d'accès - - - Add to existing entry - Ajout d'une entrée existante - - - Existing passkey found. -Do you want to register a new passkey for: - Clé d'accès existante trouvée. -Voulez-vous enregistrer la nouvelle clé pour : - - - Select the existing passkey and press Update to replace it. - Sélectionnez la clé d'accès existante puis cliquez sur Mettre à jour pour la remplacer. - - - Authenticate passkey credentials for: - Authentifier les identifiants de la clé d'accès pour : - - - Do you want to register a passkey for: - Voulez-vous enregistrer la clé d'accès pour : - BrowserService + + KeePassXC: Create a new group + KeePassXC : Créer un nouveau groupe + A request for creating a new group "%1" has been received. Do you want to create this group? Une demande de création d’un nouveau groupe « %1 » a été reçue. -Voulez-vous créer ce groupe ? +Souhaitez-vous créer ce groupe ? + + KeePassXC: New key association request + KeePassXC : Nouvelle demande d’association de clé + You have received an association request for the following database: %1 @@ -984,78 +879,83 @@ chrome-laptop Save and allow access - Enregistrer et permettre l’accès + Enregistrer et autoriser l’accès + + + KeePassXC: Overwrite existing key? + KeePassXC : Remplacer la clé existante ? A shared encryption key with the name "%1" already exists. Do you want to overwrite it? Une clé de chiffrement partagée nommée « %1 » existe déjà. -Voulez-vous la remplacer ? +Souhaitez-vous la remplacer ? + + + KeePassXC: Update Entry + KeePassXC : Mettre l’entrée à jour Do you want to update the information in %1 - %2? - Voulez-vous mettre à jour les renseignements dans %1 - %2 ? + Souhaitez-vous mettre à jour les renseignements dans %1 - %2 ? + + + KeePassXC: Delete entry + KeePassXC: Supprimer l'entrée A request for deleting entry "%1" has been received. Do you want to delete the entry? Une requête pour supprimer l'entrée « %1 » a été reçue. -Voulez-vous la supprimer ? +Voulez-vous la supprimer ? - %1 (Passkey) - %1 (clé d'accès) + Converting attributes to custom data… + Conversion des attributs en données personnalisées… - KeePassXC - Create a new group - KeePassXC - Créer un nouveau groupe + Abort + Abandonner - Disable - Désactiver + KeePassXC: Converted KeePassHTTP attributes + KeePassXC : Attributs KeePassHTTP convertis - KeePassXC - Overwrite existing key? - KeePassXC - Remplacer la clé existante ? + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + Les attributs de %1 entrée(s) ont été convertis avec succès. +%2 clés ont été déplacées vers les données personnalisées. + + + 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.%n clés ont été déplacées avec succès vers les données personnalisées. - KeePassXC - Update Entry - KeePassXC - Mise à jour de l'entrée + KeePassXC: No entry with KeePassHTTP attributes found! + KeePassXC : Aucune entrée avec des attributs KeePassHTTP n’a été trouvée ! - KeePassXC - Delete entry - KeePassXC - Suppression de l'entrée + The active database does not contain an entry with KeePassHTTP attributes. + La base de données active ne contient aucune entrée avec des attributs KeePassHTTP. - KeePassXC - New key association request - KeePassXC - Demande de nouvelle association de clé + Don't show this warning again + Ne plus afficher cet avertissement - Passkey - Clé d'accès + KeePassXC: Legacy browser integration settings detected + KeePassXC : Des paramètres d’intégration au navigateur hérités ont été détectés - KeePassXC - Passkey credentials - KeePassXC - Identifiants de clé d'accès - - - Register a new passkey to this entry: - Enregistrer la nouvelle clé d'accès pour cette entrée : - - - KeePassXC - Update passkey - KeePassXC - Mise à jour de la clé d'accès - - - Entry already has a passkey. -Do you want to overwrite the passkey in %1 - %2? - Cette entrée a déjà une clé d'accès. Remplacer la clé dans %1 - %2 ? - - - Register - Enregistrer + 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? + Vos paramètres KeePassXC-Browser doivent être intégrés aux paramètres de la base de données. +Cela est nécessaire pour conserver les connexions actuelles de votre navigateur. +Souhaitez-vous migrer vos paramètres maintenant ? @@ -1076,6 +976,10 @@ Do you want to overwrite the passkey in %1 - %2? General Général + + Browsers installed as snaps are currently not supported. + Les navigateurs installés en tant que snap ne sont pas pris en charge actuellement. + Enable integration for these browsers: Activer l’intégration pour ces navigateurs : @@ -1094,7 +998,7 @@ Do you want to overwrite the passkey in %1 - %2? Tor Browser - Navigateur Tor + Navigateur Tor Brave @@ -1102,7 +1006,7 @@ Do you want to overwrite the passkey in %1 - %2? Google Chrome - Google Chrome + Google Chrome Chromium @@ -1115,7 +1019,7 @@ Do you want to overwrite the passkey in %1 - %2? Request to unlock the database if it is locked - Demander de déverrouiller la base de données si elle est verrouillée + Demander de &déverrouiller la base de données si elle est verrouillée Only entries with the same scheme (http://, https://, …) are returned. @@ -1131,7 +1035,7 @@ Do you want to overwrite the passkey in %1 - %2? Return only best-matching credentials - Retourner que les identifiants qui correspondent le mieux + Retourner seulement les identifiants les plus appropriés Returns expired credentials. String [expired] is added to the title. @@ -1139,7 +1043,7 @@ Do you want to overwrite the passkey in %1 - %2? Allow returning expired credentials - Permettre de retourner des identifiants expirés + Autoriser à retourner les identifiants expirés All databases connected to the extension will return matching credentials. @@ -1148,7 +1052,7 @@ Do you want to overwrite the passkey in %1 - %2? Search in all opened databases for matching credentials Credentials mean login data requested via browser extension - Chercher les identifiants correspondants dans toutes les bases de données ouvertes + Rechercher les identifiants correspondants dans toutes les bases de données ouvertes Advanced @@ -1157,17 +1061,17 @@ Do you want to overwrite the passkey in %1 - %2? Never ask before accessing credentials Credentials mean login data requested via browser extension - Ne jamais demander avant d’accéder aux identifiants + Ne jamais demander avant d'accéder aux identifiants Never ask before updating credentials Credentials mean login data requested via browser extension - Ne jamais demander avant de mettre les identifiants à jour + Ne jamais demander avant de mettre à jour les identifiants Do not ask permission for HTTP Basic Auth An extra HTTP Basic Auth setting - Ne pas demander d’autorisation pour l’authentification HTTP Basic + Ne jamais demander l'autorisation pour l'authentification HTTP Basic Automatically creating or updating string fields is not supported. @@ -1175,7 +1079,7 @@ Do you want to overwrite the passkey in %1 - %2? Return advanced string fields which start with "KPH: " - Retourner les champs de chaîne avancés qui commencent par « KPH:  » + Retourner les champs de chaînes de caractères commençant par « KPH: » Don't display the popup suggesting migration of legacy KeePassHTTP settings. @@ -1183,7 +1087,7 @@ Do you want to overwrite the passkey in %1 - %2? Do not prompt for KeePassHTTP settings migration. - Ne pas proposer la migration des paramètres de KeePassHTTP. + Ne pas confirmer la migration des paramètres de KeePassHTTP Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. @@ -1191,7 +1095,7 @@ Do you want to overwrite the passkey in %1 - %2? Update native messaging manifest files at startup - Mettre les fichiers manifeste de la messagerie native à jour au lancement + Mettre à jour les fichiers manifest de la messagerie native au lancement Use a custom proxy location if you installed a proxy manually. @@ -1200,7 +1104,7 @@ Do you want to overwrite the passkey in %1 - %2? Use a custom proxy location: Meant is the proxy for KeePassXC-Browser - Utiliser un emplacement de mandataire personnalisé : + Utiliser un emplacement de proxy personnalisé : Custom proxy location field @@ -1233,19 +1137,39 @@ Do you want to overwrite the passkey in %1 - %2? Custom browser location field - Champ d’emplacement de navigateur personnalisé + Champ d'emplacement personnalisé du navigateur Browse for custom browser path - Sélectionner un chemin personnalisé de navigateur + Définir le chemin personnalisé du navigateur Custom extension ID: - ID d’extension personnalisé : + ID d'extension personnalisé : Custom extension ID - ID d’extension personnalisé + ID d'extension personnalisé + + + Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 + En raison du bac à sable de Snap, vous devez exécuter un script afin d’activer l’intégration aux navigateurs.<br />Vous pouvez obtenir ce script sur %1 + + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 + KeePassXC-Browser nécessite une intégration au navigateur pour fonctionner. <br />Téléchargez-le pour %1, %2 et %3. %4 + + + Please see special instructions for browser extension use below + Veuillez consulter ci-dessous les instructions propres à l’extension pour navigateurs + + + <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. + <b>Erreur :</b> L'emplacement de proxy personnalisé est introuvable !<br/>L'intégration au navigateur NE FONCTIONNERA PAS sans l'application proxy. + + + <b>Warning:</b> The following options can be dangerous! + <b>Avertissement :</b> Les options suivantes peuvent être dangereuses ! Executable Files @@ -1261,47 +1185,7 @@ Do you want to overwrite the passkey in %1 - %2? Select native messaging host folder location - Sélectionner l’emplacement du dossier de l’hôte de messagerie native - - - Allow keepassxc-proxy to list all entries with their title, URL and UUID in connected databases. - Autoriser keepassxc-proxy à afficher toutes les entrées avec leur titre, URL et identifiant unique des bases connectées. - - - Allow limited access to all entries in connected databases (ignores site access restrictions) - Limiter l'accès à toutes les entrées des bases connectées (ignore les restrictions d'accès aux sites) - - - <b>Warning:</b> Only adjust these settings if necessary. - <b>Avertissement :</b> modifiez ces réglages seulement si nécessaire. - - - The custom proxy location does not exist. - L'emplacement de proxy personnalisé n'existe pas. - - - <b>Error:</b> The custom proxy location does not exist. Correct this in the advanced settings tab. - <b>Erreur :</b> L'emplacement de proxy personnalisé n'existe pas. Corrigez-le dans l'onglet des paramètres avancés. - - - <b>Error:</b> The installed proxy executable is missing from the expected location: %1<br/>Please set a custom proxy location in the advanced settings or reinstall the application. - <b>Erreur :</b> L'exécutable du proxy installé n'existe pas à l'emplacement prévu : %1<br/>Définissez un emplacement de proxy personnalisé dans les paramètres avancés ou réinstallez l'application. - - - Allows using insecure http://localhost with passkeys for testing purposes. - Autoriser l'utilisation peu sûre de http://localhost avec les clés d'accès à des fins de test ? - - - Allow using localhost with passkeys - Autoriser l'utilisation de localhost avec les clés d'accès - - - KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. - KeePassXC-Browser est nécessaire pour que l'intégration avec le navigateur fonctionne. <br />Téléchargez le pour %1 et %2 et %3. - - - Browsers installed using Snap or Flatpak are not supported with exception to Firefox installed using Snap. - Les navigateurs installés à l'aide de Snap ou de Flatpak ne sont pas pris en charge, à l'exception de Firefox installé à l'aide de Snap. + Sélectionner l'emplacement du dossier de l'hôte de messagerie native @@ -1312,7 +1196,7 @@ Do you want to overwrite the passkey in %1 - %2? Append ' - Clone' to title - Ajouter « – Clone » au titre + Ajouter ’ – Clone’ au titre Replace username and password with references @@ -1325,6 +1209,14 @@ Do you want to overwrite the passkey in %1 - %2? CsvImportWidget + + Import CSV fields + Importer les champs CSV + + + filename + nom de fichier + size, rows, columns taille, lignes, colonnes @@ -1433,42 +1325,50 @@ Do you want to overwrite the passkey in %1 - %2? Column %1 Colonne %1 + + Imported from CSV file + Importé d’un fichier CSV + + + Original data: + Données originales : + + + Error(s) detected in CSV file! + Des erreurs ont été détectées dans le fichier CSV ! + [%n more message(s) skipped] - [%n autre message a été ignoré][%n autres messages ont été ignorés][%n autres messages ont été ignorés] + [%n message supplémentaire a été ignoré][%n messages supplémentaires ont été ignorés][%n messages supplémentaires ont été ignorés] - Failed to parse CSV file: %1 - Échec de l'analyse du fichier CSV: $1 + Error + Erreur - Imported from CSV file: %1 - Importé du fichier CSV : %1 - - - No Title Selected - Aucun titre séléctionné - - - No title column was selected, entries will be hard to tell apart. -Are you sure you want to import? - Les entrées seront difficiles à distinguer, car aucune titre de colonne n'a été sélectionné. Êtes-vous sûr de vouloir importer ? - - - Tags - Étiquettes + CSV import: writer has errors: +%1 + Importation CSV : le scripteur comporte des erreurs : +%1 CsvParserModel + + %1, %2, %3 + file info: bytes, rows, columns + %1, %2, %3 + + + %n byte(s) + %n octet%n octets%n octets + %n row(s) - CSV row count %n ligne%n lignes%n lignes %n column(s) - CSV column count %n colonne%n colonnes%n colonnes @@ -1497,11 +1397,11 @@ Are you sure you want to import? Database save is already in progress. - La base de données est déjà en cours d’enregistrement. + Une sauvegarde de la base de données est déjà en cours. Could not save, database has not been initialized! - Impossible d’enregistrer, la base de données n’a pas été initialisée + Sauvegarde impossible, la base de données n'a pas été initialisée ! Database file has unmerged changes. @@ -1521,14 +1421,6 @@ La base de données de sauvegarde est située sur %2 Recycle Bin Corbeille - - Database file read error. - Erreur de lecture du fichier de base de données. - - - No file path was provided. - Aucun chemin d’accès de fichier n’a été fourni. - DatabaseOpenDialog @@ -1551,22 +1443,50 @@ La base de données de sauvegarde est située sur %2 Password field Champ de mot de passe + + Enter Additional Credentials (if any): + Saisissez des identifiants supplémentaires (si définis) : + + + Key File: + Fichier clé : + + + Key file help + Aide sur les fichiers clé + Hardware key slot selection Sélection de l’emplacement de la clé matérielle + + Hardware Key: + Clé matérielle : + + + Hardware key help + Aide sur les clés matérielles + Key file to unlock the database Fichier clé pour déverrouiller la base de données Browse for key file - Rechercher un fichier clé + Chercher un fichier clé Browse… Parcourir… + + Refresh hardware tokens + Actualiser les jetons matériels + + + Refresh + Actualiser + Unlock Database Déverrouiller la base de données @@ -1619,13 +1539,17 @@ Do you want to retry with an "empty" password instead? To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. Le déverrouillage de la base de données a échoué et vous n’avez pas saisi de mot de passe. -Voulez-vous plutôt réessayer sans mot de passe ? +Souhaitez-vous plutôt ressayer sans mot de passe ? Afin d’empêcher que cette erreur survienne, vous devez accéder à « Paramètres de la base de données » et réinitialiser votre mot de passe. Retry with empty password - Réessayer sans mot de passe + Ressayer sans mot de passe + + + Failed to authenticate with Touch ID + Échec d’authentification avec Touch ID Failed to open key file: %1 @@ -1637,7 +1561,7 @@ Afin d’empêcher que cette erreur survienne, vous devez accéder à « Param You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database &gt; Database Security &gt; Change Key File.</strong><br> - Vous utilisez un ancien format de fichier clé que KeePassXC pourrait<br>ne plus prendre en charge à l'avenir.<br><br>Veuillez envisager de générer un nouveau fichier clé en allant dans :<br><strong>Base de données &gt; Sécurité de la base de données &gt; Changer le fichier clé.</strong><br> + Vous utilisez un ancien format de fichier clé que KeePassXC pourrait<br>ne plus prendre en charge à l'avenir.<br><br>Il vous est recommandé de générer un nouveau fichier clé en allant dans :<br><strong>Base de données &gt; Sécurité de la base de données &gt; Changer le fichier clé.</strong><br> Don't show this warning again @@ -1657,70 +1581,43 @@ Afin d’empêcher que cette erreur survienne, vous devez accéder à « Param Cannot use database file as key file - Impossible d’utiliser une base de données comme fichier clé + Impossible d’utiliser un fichier de base de données en tant que fichier clé + + + You cannot use your database file as a key file. +If you do not have a key file, please leave the field empty. + Vous ne pouvez pas utiliser votre fichier de base de données en tant que fichier clé. +Si vous n’avez pas de fichier clé, veuillez laisser le champ vide. + + + Detecting hardware keys… + Détection des clés matérielles... + + + No hardware keys detected + Aucune clé matérielle détectée + + + Select hardware key… + Sélectionner une clé matérielle... + + + <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information…</p> + <p>En plus du mot de passe, vous pouvez utiliser un fichier secret pour améliorer la sécurité de votre base de données. Ce fichier peut être généré dans les paramètres de sécurité de votre base de données.</p><p>Il s'agit de <strong>et non</strong> de votre fichier de base de données *.kdbx !<br>Si vous n'avez pas de fichier clé, laissez ce champ vide.</p><p>Cliquez pour plus d'information…</p> + + + <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +<p>Click for more information…</p> + <p>Vous pouvez utiliser une clé de sécurité matérielle telle que <strong>YubiKey</strong> ou <strong>OnlyKey</strong> avec des emplacements configurés pour HMAC-SHA1.</p> +<p>Cliquez pour plus information…</p> authenticate to access the database Autentifiez vous pour accéder à la base de données - Failed to authenticate with Quick Unlock: %1 - Échec d'authentification Quick Unlock : %1 - - - Select Key File: - Sélectionner le fichier clé : - - - <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!</p> - <p>Vous pouvez utiliser un fichier secret en plus du mot de passe pour renforcer la sécurité de votre base de données. Ce fichier peut être généré à partir des paramètres de sécurité de votre base.</p><p>Il ne s'agit <strong>pas</strong> de votre fichier de base de données *.kdbx !</p> - - - Use hardware key [Serial: %1] - Utiliser une clé matérielle [N° de série : %1] - - - Use hardware key - Utiliser une clé logicielle - - - Your database file is NOT a key file! -If you don't have a key file or don't know what that is, you don't have to select one. - Votre fichier de base de données n'est PAS un fichier clé ! -Si vous ne disposez pas de fichier clé ou ne savez pas de quoi il s'agit, n'en sélectionnez pas. - - - KeePassXC database file selected - Fichier de base de données KeePassXC sélectionné - - - The file you selected looks like a database file. -A database file is NOT a key file! - -Are you sure you want to continue with this file?. - Le fichier sélectionné ne semble pas être une base de données. -Un fichier de base de données n'est pas un fichier clé ! -Voulez-vous poursuivre avec ce fichier ? - - - No hardware keys found. - Aucune clé matérielle trouvée. - - - Refresh Hardware Keys - Actualiser les clés logicielles - - - Click to add a key file. - Cliquer pour ajouter un fichier clé - - - <a href="#" style="text-decoration: underline">I have a key file</a> - <a href="#" style="text-decoration: underline">Je dispose d'un fichier clé</a> - - - Hardware keys found, but no slots are configured. - Clés matérielles trouvées, mais aucun emplacement n'est configuré. + Failed to authenticate with Windows Hello: %1 + Échec de l'authentification avec Windows Hello: %1 @@ -1732,6 +1629,10 @@ Voulez-vous poursuivre avec ce fichier ? DatabaseSettingsDialog + + Advanced Settings + Paramètres avancés + General Général @@ -1756,22 +1657,6 @@ Voulez-vous poursuivre avec ce fichier ? Maintenance Maintenance - - KeeShare - KeeShare - - - Secret Service Integration - Intégration au Secret Service - - - Remote Sync - Synchronisation à distance - - - Database Settings: %1 - - DatabaseSettingsWidgetBrowser @@ -1779,6 +1664,18 @@ Voulez-vous poursuivre avec ce fichier ? KeePassXC-Browser settings Paramètres de KeePassXC-Browser + + Convert KeePassHTTP data + Convertir KeePassHTTP data + + + Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data + Convertir les attributs hérités de KeePassHTTP vers les données personnalisées compatibles de KeePassXC-Browser + + + Refresh database root group ID + Actualiser l'ID du groupe racine de la base de données + Disconnect all browsers Déconnecter tous les navigateurs @@ -1787,17 +1684,13 @@ Voulez-vous poursuivre avec ce fichier ? Forget all site-specific settings on entries Oublier tous les paramètres d’entrée propres aux sites - - Refresh database root group ID - Actualiser l’ID du groupe racine de la base de données - Stored keys Clés enregistrées Stored browser keys - Clés de navigateurs enregistrées + Clés de navigateurs stockées Remove selected key @@ -1809,12 +1702,12 @@ Voulez-vous poursuivre avec ce fichier ? Delete the selected key? - Supprimer la clé sélectionnée ? + Supprimer la clé sélectionnée ? Do you really want to delete the selected key? This may prevent connection to the browser plugin. - Voulez-vous vraiment supprimer la clé sélectionnée ? + Souhaitez-vous vraiment supprimer la clé sélectionnée ? Cela pourrait empêcher la connexion l’extension pour navigateurs. @@ -1836,13 +1729,21 @@ Cela pourrait empêcher la connexion l’extension pour navigateurs. Do you really want to disconnect all browsers? This may prevent connection to the browser plugin. - Voulez-vous vraiment déconnecter tous les navigateurs ? + Souhaitez-vous vraiment déconnecter tous les navigateurs ? Cela pourrait empêcher la connexion avec l’extension pour navigateurs. + + KeePassXC: No keys found + KeePassXC : Aucune clé n’a été trouvée + No shared encryption keys found in KeePassXC settings. Aucune clé de chiffrement partagée 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é supprimée avec succès des paramètres de KeePassXC.%n clés de chiffrement ont été supprimées avec succès des paramètres de KeePassXC.%n clés de chiffrement ont été supprimées avec succès des paramètres de KeePassXC. @@ -1850,53 +1751,50 @@ Cela pourrait empêcher la connexion avec l’extension pour navigateurs. Do you really want forget all site-specific settings on every entry? Permissions to access entries will be revoked. - Voulez-vous vraiment oublier tous les paramètres propres aux sites pour toutes les entrées ? Les autorisations d’accès aux entrées seront révoquées. + Souhaitez-vous vraiment oublier tous les paramètres propres aux sites pour toutes les entrées ? Les autorisations d’accès aux entrées seront révoquées. Removing stored permissions… - Suppression des autorisations enregistrées… + Retrait des autorisations enregistrées… Abort Abandonner + + KeePassXC: Removed permissions + KeePassXC : Les autorisations ont été retirées + Successfully removed permissions from %n entry(s). - Les autorisations d’%n entrée ont été supprimées avec succès.Les autorisations de ’%n entrées ont été supprimées avec succès.Les autorisations de ’%n entrées ont été supprimées avec succès. + Les autorisations d’%n entrée ont été supprimées avec succès.Les autorisations de %n entrées ont été supprimées avec succès.Les autorisations de %n entrées ont été supprimé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 comprend aucune entrée avec des autorisations. + La base de données active ne contient pas d’entrée avec des autorisations. + + + Move KeePassHTTP attributes to custom data + Déplacer les attributs KeePassHTTP vers les données personnalisées + + + Do you really want to convert all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + Voulez-vous vraiment convertir toutes les données d'intégrations au navigateur au format actuel ? Ceci est nécessaire afin de préserver la compatibilité avec le module complémentaire du navigateur. Refresh database ID - Actualiser l’ID de la base de données + Actualiser l'ID de la base de données Do you really want refresh the database ID? This is only necessary if your database is a copy of another and the browser extension cannot connect. - Voulez-vous vraiment actualiser l’ID de la base de données ? -Cela n’est nécessaire que si votre base de données est la copie d’une autre et que l’extension pour navigateurs ne peut pas se connecter. - - - Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data - Convertir les attributs hérités de KeePassHTTP vers les données personnalisées compatibles de KeePassXC-Browser - - - No keys found - Aucune clé trouvée - - - Removed keys from database - Clés supprimées de la base de données - - - Removed permissions - Autorisations supprimées - - - No entry with permissions found! - Aucune entrée avec autorisations trouvée ! + Souhaitez-vous vraiment actualiser l'ID de la base de données ? +Ceci est seulement nécessaire si votre base de données est une copie d'une autre et que l'extension du navigateur ne peut se connecter. @@ -1915,7 +1813,7 @@ Cela n’est nécessaire que si votre base de données est la copie d’une autr Are you sure you want to continue without a password? AVERTISSEMENT : Vous n’avez pas défini de mot de passe. Il est fortement découragé d’utiliser une base de données sans mot de passe. -Voulez-vous vraiment poursuivre sans mot de passe ? +Souhaitez-vous vraiment poursuivre sans mot de passe ? Continue without password @@ -1937,18 +1835,6 @@ Voulez-vous vraiment poursuivre sans mot de passe ? Failed to change database credentials Échec de changement des identifiants de la base de données - - Weak password - Mot de passe faible - - - This is a weak password! For better protection of your secrets, you should choose a stronger password. - Le mot de passe est trop faible ! Pour une protection efficace, choisissez un mot de passe plus fort. - - - The provided password does not meet the minimum quality requirement. - Le mot de passe fourni ne répond pas aux exigences minimales demandées. - DatabaseSettingsWidgetEncryption @@ -1956,6 +1842,14 @@ Voulez-vous vraiment poursuivre sans mot de passe ? Decryption Time: Temps de déchiffrement : + + Change existing decryption time + Changer le temps de déchiffrement existant + + + Change + Changer + Decryption time in seconds Temps de déchiffrement en secondes @@ -1974,7 +1868,7 @@ Voulez-vous vraiment poursuivre sans mot de passe ? Format cannot be changed: Your database uses KDBX 4 features - Le format ne peut être modifié : votre base de données utilise des fonctions KDBX 4 + Le format ne peut être modifié : votre base de données utilise des fonctionnalités KDBX 4 Unless you need to open your database with other programs, always use the latest format. @@ -1998,7 +1892,7 @@ Voulez-vous vraiment poursuivre sans mot de passe ? Key Derivation Function: - Fonction de dérivation de clé : + Fonction de dérivation de clé (KDF) : Key derivation function @@ -2036,6 +1930,11 @@ Voulez-vous vraiment poursuivre sans mot de passe ? KDBX 3 KDBX 3 + + unchanged + Database decryption time is unchanged + inchangé + Number of rounds too high Key transformation rounds @@ -2072,11 +1971,11 @@ En conservant cette valeur, votre base de données ne sera pas protégée des at KDF unchanged - La fonction de dérivation de clé est inchangée + KDF est inchangé Failed to transform key with new KDF parameters; KDF unchanged. - Échec de transformation de la clé avec les nouveaux paramètres de fonction de dérivation de clé ; la fonction de dérivation de clé est inchangée. + Échec de transformation de la clé avec les nouveaux paramètres KDF ; KDF est inchangé. MiB @@ -2086,19 +1985,7 @@ En conservant cette valeur, votre base de données ne sera pas protégée des at thread(s) Threads for parallel execution (KDF settings) - fil d’exécutionfils d’exécutionfils d’exécution - - - Encryption Settings: - Paramètres de chiffrement : - - - Basic - Général - - - Advanced - Avancé + fil d’exécution fils d’exécution fils d’exécution @@ -2109,15 +1996,15 @@ En conservant cette valeur, votre base de données ne sera pas protégée des at Don't expose this database - Ne pas rendre cette base de données visible + Ne pas montrer cette base de données Expose entries under this group: - Rendre visibles les entrées de ce groupe : + Montrer les entrées de ce groupe : Enable Secret Service to access these settings. - Activer « Secret Service » pour accéder à ces paramètres. + Activer Secret Service pour accéder à ces paramètres. @@ -2168,7 +2055,7 @@ En conservant cette valeur, votre base de données ne sera pas protégée des at Use recycle bin - Utiliser une corbeille + Utiliser la corbeille Additional Database Settings @@ -2185,7 +2072,7 @@ En conservant cette valeur, votre base de données ne sera pas protégée des at Do you want to delete the current recycle bin and all its contents? This action is not reversible. - Voulez-vous supprimer la corbeille actuelle et tout son contenu ? + Souhaitez-vous supprimer la corbeille actuelle et tout son contenu ? Cette action est irréversible. @@ -2197,102 +2084,29 @@ Cette action est irréversible. the oldest history items of an entry will be removed such that only the specified amount of entries remain at most. - Lors de l’enregistrement de ce paramètre ou de la modification d’une entrée -les éléments les plus anciens de l'historique d’une entrée seront -supprimés de telle sorte qu'il ne reste au maximum -que le nombre spécifié d'entrées. + Limit the amount of history items per entry to: - Limiter le nombre d’éléments d’historique par entrée à : + When saving this setting or editing an entry the oldest history items of an entry will be removed such that the remaining history items add up to the specified amount at most. - Lors de l’enregistrement de ce paramètre ou de la modification d’une entrée -les éléments les plus anciens de l'historique d’une entrée seront -supprimés de telle sorte que les éléments restants de l'historique -atteignent le nombre spécifié. + Limit the total size of history items per entry to: - Limiter la taille totale des éléments de l’historique par entrée à : + Move entries to a recycle bin group instead of deleting them from the database. Entries deleted from the recycle bin are removed from the database. - Déplacer les entrées vers la corbeille du groupe -au lieu de les supprimer de la base de données. -Les entrées supprimées dans la corbeille sont retirées -de la base de données. - - - Autosave delay since last change - Durée entre dernière modification et sauvegarde automatique - - - Autosave delay - Durée avant sauvegarde automatique - - - Autosave delay since last change in minutes - Durée entre dernière modification et sauvegarde automatique en minutes - - - min - min - - - Autosave delay since last change checkbox - Case à cocher de durée entre dernière modification et sauvegarde automatique - - - Public Database Metadata - Métadonnées de la Base de données Publique - - - Warning: the following settings are not encrypted. - Avertissement : les paramètres suivants ne sont pas chiffrés. - - - Display name: - Nom d'affichage : - - - Publically visible display name used on the unlock dialog - Nom d'affichage publiquement visible utilisé sur la boîte de dialogue de déverrouillage - - - Database public display name - Nom d'affichage public de la base de données - - - Display color: - Couleur d'affichage: - - - Publically visible color used on the unlock dialog - Couleur publiquement visible utilisé sur la boîte de dialogue de déverrouillage - - - Database public display color chooser - Sélecteur de couleur d'affichage publique de la base de donnée - - - Clear - Effacer - - - Display icon: - Icône d'affichage : - - - Select Database Icon - Sélectionner l'Icône de Base de données + @@ -2351,7 +2165,7 @@ de la base de données. At least one of the selected icons is currently in use by at least one entry or group. The icons of all affected entries and groups will be replaced by the default icon. Are you sure you want to delete icons that are currently in use? - Au moins une icône de la sélection est utilisée actuellement par au moins une entrée ou un groupe. Les icônes de toutes les entrées et de tous les groupes concernés seront remplacées par l’icône par défaut. Voulez-vous vraiment supprimer les icônes utilisées actuellement ? + Au moins une icône de la sélection est utilisée actuellement par une entrée ou un groupe. Les icônes affectées aux entrées et aux groupes seront remplacées par l'icône par défaut. Êtes-vous sûr de vouloir supprimer les icônes actuellement utilisées ? Custom Icons Are In Use @@ -2389,141 +2203,6 @@ de la base de données. Champ de description de la base de données - - DatabaseSettingsWidgetRemote - - Sync Commands - Commandes de synchronisation. - - - Remove - Supprimer - - - Command Settings - Paramètres de la commande - - - Name - Nom - - - Save - Enregistrer - - - Download - Téléchargement - - - Command: - Commande: - - - Download command field - Champ de la commande de téléchargement - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - Par exemple : "sftp login@machine" ou "scp login@machine:BaseDeDonneesDistante.kdbx {TEMP_DATABASE}" - - - Input: - Entrée : - - - Download input field - Champ d'entrée de téléchargement - - - Upload - Téléverser - - - Upload command field - Champ de la commande de téléversement - - - e.g.: "sftp user@hostname" or "scp {TEMP_DATABASE} user@hostname:DatabaseOnRemote.kdbx" - Par exemple : "sftp login@machine" ou "scp {TEMP_DATABASE} login@machine:BaseDeDonneesDistante.kdbx" - - - Upload input field - Champ d'entrée de téléversement - - - Name cannot be empty. - Le nom ne peut pas être vide. - - - Test - Test - - - Download command cannot be empty. - La commande de téléchargement ne peut pas être vide. - - - Download failed with error: %1 - Le téléchargement a échoué avec l'erreur: %1 - - - Download finished, but file %1 could not be found. - Le téléchargement est fini, mais le fichier %1 n'a pas pu être trouvé. - - - Download successful. - Téléchargement réussi. - - - Save Remote Settings - Enregistrer les paramètres distant - - - You have unsaved changes. Do you want to save them? - Vous avez des modifications non sauvegardées. Voulez vous les enregistrer ? - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - Par exemple : -get BaseDeDonneesDistante.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} est utilisé comme motif de remplacement pour stocker la base de données dans un emplacement temporaire -La commande doit terminer. Dans le cas de "sftp" la dernière commande envoyée doit être "exit" - - - - e.g.: -put {TEMP_DATABASE} DatabaseOnRemote.kdbx -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - Par exemple : -put {TEMP_DATABASE} BaseDeDonneesDistante.kdbx -exit ---- -{TEMP_DATABASE} est utilisé comme motif de remplacement pour stocker la base de données dans un emplacement temporaire -La commande doit terminer. Dans le cas de "sftp" la dernière commande envoyée doit être "exit" - - - - Timeout: - - - - seconds - secondes - - DatabaseTabWidget @@ -2533,7 +2212,7 @@ La commande doit terminer. Dans le cas de "sftp" la dernière commande 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 fonction de dérivation de clé et ne peut pas être enregistrée. + La base de données créée n’a ni clé, ni KDF et ne peut pas être enregistrée. C’est très certainement un bogue, veuillez le signaler aux développeurs. @@ -2556,10 +2235,26 @@ C’est très certainement un bogue, veuillez le signaler aux développeurs.CSV file Fichier CSV + + Select CSV file + Sélectionner un fichier CSV + Merge database Fusionner la base de données + + KeePass 1 database + Base de données KeePass 1 + + + Open KeePass 1 database + Ouvrir une base de données KeePass 1 + + + Open OPVault + Ouvrir OPVault + Export database to CSV file Exporter la base de données vers un fichier CSV @@ -2572,6 +2267,28 @@ C’est très certainement un bogue, veuillez le signaler aux développeurs.Writing the HTML file failed. Échec d’écriture du fichier HTML. + + Export Confirmation + Confirmation de l’exportation + + + You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? + Vous êtes sur le point d’exporter votre base de données vers un fichier non chiffré. Vos mots de passe et renseignements délicats seront vulnérables. Souhaitez-vous vraiment poursuivre ? + + + New Database + Nouvelle base de données + + + %1 [New Database] + Database tab name modifier + %1 [nouvelle base de données] + + + %1 [Locked] + Database tab name modifier + %1 [verrouillé] + Export database to XML file Exporter la base de données dans un fichier XML @@ -2584,31 +2301,9 @@ C’est très certainement un bogue, veuillez le signaler aux développeurs.Writing the XML file failed L'écriture du fichier XML a échoué - - Export Confirmation - Confirmation de l’exportation - - - You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? - Vous êtes sur le point d’exporter votre base de données vers un fichier non chiffré. Vos mots de passe et renseignements délicats seront vulnérables. Voulez-vous vraiment poursuivre ? - - - %1 [Locked] - Database tab name modifier - %1 [verrouillé] - - - %1 [Temporary] - Database tab name modifier - %1 [Temporaire] - DatabaseWidget - - Searches and Tags - Recherches et Étiquettes - Searching… Recherche... @@ -2623,15 +2318,15 @@ C’est très certainement un bogue, veuillez le signaler aux développeurs. Perform Auto-Type into the previously active window? - Effectuer la saisie automatique dans la fenêtre active précédemment ? + Effectuer la saisie automatique dans la précédente fenêtre active ? Execute command? - Exécuter la commande ? + Exécuter la commande ? Do you really want to execute the following command?<br><br>%1<br> - Voulez-vous vraiment exécuter la commande suivante ?<br><br>%1<br> + Souhaitez-vous vraiment exécuter la commande suivante ?<br><br>%1<br> Remember my choice @@ -2643,24 +2338,20 @@ C’est très certainement un bogue, veuillez le signaler aux développeurs. Do you really want to delete the group "%1" for good? - Voulez-vous vraiment supprimer définitivement le groupe « %1 » ? + Souhaitez-vous vraiment supprimer définitivement le groupe « %1 » ? Move group to recycle bin? - Déplacer le groupe vers la corbeille ? + Déplacer le groupe vers la corbeille ? Do you really want to move the group "%1" to the recycle bin? - Voulez-vous vraiment déplacer le groupe « %1 » vers la corbeille ? + Souhaitez-vous vraiment déplacer le groupe « %1 » vers la corbeille ? Expired entries Entrées ayant expiré - - Entries expiring within %1 day(s) - Entrées expirant dans %1 jourEntrées expirant dans %1 joursEntrées expirant dans %1 jours - No current database. Aucune base de données actuelle. @@ -2685,55 +2376,63 @@ C’est très certainement un bogue, veuillez le signaler aux développeurs.No Results Il n’y a aucun résultat - - Save - Enregistrer - - - Enter a unique name or overwrite an existing search from the list: - Entrez un nom unique ou écrasez une recherche existante dans la liste : - - - Save Search - Sauvegarder recherche - Lock Database? - Verrouiller la base de données ? + Verrouiller la base de données ? You are editing an entry. Discard changes and lock anyway? - Vous êtes en train de modifier une entrée. Abandonner les changements et la verrouiller quand même ? + Vous êtes en train de modifier une entrée. Abandonner les changements et la verrouiller quand même ? "%1" was modified. Save changes? « %1 » a été modifié. -Enregistrer les changements ? +Enregistrer les changements ? Database was modified. Save changes? La base de données a été modifiée. -Enregistrer les changements ? +Enregistrer les changements ? Save changes? - Enregistrer les changements ? + Enregistrer les changements ? File has changed - Le fichier a été modifié + Le fichier a changé + + + The database file has changed. Do you want to load the changes? + Le fichier de la base de données a été modifiée. Souhaitez-vous charger les changements ? + + + Merge Request + Demande de fusion + + + The database file has changed and you have unsaved changes. +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. +Souhaitez-vous fusionner vos changements ? + + + Could not open the new database file while attempting to autoreload. +Error: %1 + Impossible d’ouvrir le nouveau fichier de base de données en tentant de la recharger automatiquement. +Erreur : % 1 Disable safe saves? - Désactiver les enregistrements sécurisés ? + Désactiver les enregistrements sécurisées ? KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. Disable safe saves and try again? - KeePassXC n’a pas réussi à enregistrer la base de données à plusieurs reprises. Le fichier à enregistrer est probablement verrouillé par les services de synchronisation de fichiers. -Désactiver les enregistrements sécurisés et réessayer ? + 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 ? Writing the database failed: %1 @@ -2753,108 +2452,39 @@ Désactiver les enregistrements sécurisés et réessayer ? Save database backup - Sauvegarder la base de données + Enregistrer une copie de sécurité de la base de données Empty recycle bin? - Vider la corbeille ? + Vider la corbeille ? Are you sure you want to permanently delete everything from your recycle bin? - Voulez-vous vraiment vider définitivement la corbeille ? + Souhaitez-vous vraiment vider définitivement la corbeille ? Could not find database file: %1 Impossible de trouver le fichier de la base de données : %1 - - New Database - Nouvelle base de données + + Entries expiring within %1 day(s) + Entrées expirant dans %1 jourEntrées expirant dans %1 joursEntrées expirant dans %1 jours - %1 [New Database] - Database tab name modifier - %1 [nouvelle base de données] + Searches and Tags + Recherches et Étiquettes - Remote Sync did not contain any download or upload commands. - Synchronisation à distance ne contient aucune commande de téléversement ou de téléchargement. + Enter a unique name or overwrite an existing search from the list: + Entrez un nom unique ou écrasez une recherche existante dans la liste : - Remote sync '%1' completed successfully! - Synchronisation à distance « %1 » réussie ! + Save + Enregistrer - Remote sync '%1' failed: %2 - Synchronisation à distance « %1 » échouée : %2 - - - Error while saving database %1: %2 - Erreur pendant l'enregistrement de la base de données %1 : %2 - - - Downloading... - Téléchargement… - - - Uploading... - Téléversement... - - - Syncing... - Synchronisation... - - - Remove passkey from entry - Supprimer la clé d'accès de l'entrée - - - Do you want to remove the passkey from this entry? - Voulez-vous supprimer la clé d'accès de cette entrée ? - - - The database file "%1" was modified externally - Le fichier de base de données « %1 » a été modifié de manière externe - - - Do you want to load the changes? - Voulez-vous charger les changements ? - - - Reload database - Recharger la base de données - - - Reloading database… - Rechargement de la base de données… - - - Reload canceled - Rechargement annulé - - - Reload successful - Rechargement réussi - - - Reload pending user action… - Rechargement en attente d'une action de l'utilisateur… - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes<br>Ignore the changes on disk until save<br>Discard unsaved changes - Le fichier de base de données "%1" a été modifiée extérieurement.<br>Comment souhaitez-vous procéder ?<br><br>Fusionner tous les changements<br>Ignorer les changements sur le disque jusqu'à l'enregistrement<br>Annuler les modifications non sauvegardées - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes then save<br>Overwrite the changes on disk<br>Discard unsaved changes - Le fichier de base de données "%1" a été modifié extérieurement.<br>Comment souhaitez-vous procéder ?<br><br>Fusionner tous les changements puis enregistrer<br>Écraser les changements sur le disque<br>Annuler les changements non enregistrés - - - Database file overwritten. - Fichier de base de données écrasé. - - - Database file on disk cannot be unlocked with current credentials.<br>Enter new credentials and/or present hardware key to continue. - Le fichier de base de données sur le disque ne peut pas être déverrouillé avec les identifiants actuels.<br>Saisissez de nouveaux identifiants et/ou présentez la clé matérielle pour poursuivre. + Save Search + Sauvegarder recherche @@ -2889,7 +2519,7 @@ Désactiver les enregistrements sécurisés et réessayer ? Are you sure you want to remove this URL? - Voulez-vous vraiment supprimer cette URL ? + Souhaitez-vous vraiment supprimer cette URL ? Properties @@ -2907,9 +2537,13 @@ Désactiver les enregistrements sécurisés et réessayer ? n/a s.o. + + (encrypted) + (chiffrée) + Select private key - Sélectionner un fichier clé + Sélectionner une clé privée Entry history @@ -2947,15 +2581,15 @@ Malheureusement, les changements effectués ont été perdus. Would you like to correct it? Une erreur est survenue lors de la validation de la séquence personnalisée de saisie automatique : %1 -Voulez-vous la corriger ? +La corriger ? An error occurred while validating the Auto-Type sequence for "%1": %2 Would you like to correct it? - Une erreur est survenue lors de la validation de la séquence de saisie automatique pour « %1 » : + Une erreur est survenue lors de la validation de la séquence de saisie automatique pour « %1 » : %2 -Voulez-vous la corriger ? +La corriger ? Entry updated successfully. @@ -2963,11 +2597,11 @@ Voulez-vous la corriger ? Unsaved Changes - Changements non enregistrés + Modifications non enregistrées Would you like to save changes to this entry? - Voulez-vous enregistrer les changements de cette entrée ? + Souhaitez-vous enregistrer les modifications de cette entrée ? New attribute @@ -2979,7 +2613,7 @@ Voulez-vous la corriger ? Are you sure you want to remove this attribute? - Voulez-vous vraiment supprimer cet attribut ? + Souhaitez-vous vraiment supprimer cet attribut ? Reveal @@ -2987,16 +2621,12 @@ Voulez-vous la corriger ? [PROTECTED] Press Reveal to view or edit - [PROTÉGÉ] Appuyez sur Révéler pour afficher ou modifier + [PROTÉGÉ] Appuyer sur Révéler pour visualiser ou modifier Hide Cacher - - %n hour(s) - %n heure%n heure%n heure - %n week(s) %n semaine%n semaines%n semaines @@ -3007,11 +2637,11 @@ Voulez-vous la corriger ? %n year(s) - %n an%n d’années%n ans + %n an%n an(s)%n an(s) - - Failed to decrypt SSH key, ensure password is correct. - Échec lors du décryptage de la clé SSH, assurez-vous de la validité du mot de passe. + + %n hour(s) + %n heure%n heures%n heures @@ -3078,7 +2708,7 @@ Voulez-vous la corriger ? Exclude from database reports - Exclure des rapports de base de données + Exclure des rapports de la base de données Foreground Color: @@ -3113,7 +2743,7 @@ Voulez-vous la corriger ? Custom Auto-Type sequence - Séquence personnalisée de saisie automatique + Séquence de saisie automatique personnalisée Open Auto-Type help webpage @@ -3131,20 +2761,10 @@ Voulez-vous la corriger ? Add new window association Ajouter une nouvelle association de fenêtre - - + - Add item - + - Remove selected window association Supprimer l’association de fenêtre sélectionnée - - - - Remove item - - - Window title: Titre de la fenêtre : @@ -3167,11 +2787,25 @@ Voulez-vous la corriger ? Custom Auto-Type sequence for this window - Séquence personnalisée de saisie automatique pour cette fenêtre + Séquence de saisie automatique personnalisée pour cette fenêtre + + + + + Add item + + + + + - + Remove item + - EditEntryWidgetBrowser + + These settings affect to the entry's behaviour with the browser extension. + Ces paramètres affectent le comportement de l’entrée avec l’extension pour navigateurs. + General Général @@ -3184,14 +2818,26 @@ Voulez-vous la corriger ? Skip Auto-Submit for this entry Ignorer l’envoi automatique pour cette entrée + + Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. + Envoyer ce paramètre au navigateur seulement pour les boîtes de dialogue d'authentification HTTP. Si activé, les formulaires d'authentification standard n'afficheront pas cette entrée lors de la sélection. + Use this entry only with HTTP Basic Auth - N’utiliser cette entrée qu’avec l’authentification HTTP Basic + Utiliser cette entrée seulement avec l'authentification HTTP Basic + + + Do not send this setting to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. + Ne pas envoyer ce paramètre au navigateur pour les boîtes de dialogue d’authentification HTTP. Si cette option est activée, cette entrée ne sera pas présentée comme possibilité de sélection par les boîtes de dialogue d’authentification HTTP. Do not use this entry with HTTP Basic Auth Ne pas utiliser cette entrée avec l’authentification HTTP Basic + + Additional URL's + URL supplémentaires + Add Ajouter @@ -3204,22 +2850,6 @@ Voulez-vous la corriger ? Edit Modifier - - These settings affect the entry's behaviour with the browser extension. - Ces paramètres ont un impact sur le comportement des entrées avec l'extension du navigateur. - - - Additional URLs - Autres URL - - - Only send this entry to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. - Envoyez cette entrée au navigateur uniquement pour les boîtes de dialogue d'authentification HTTP. Si cette option est activée, les formulaires de connexion normaux n'afficheront pas cette entrée pour la sélection. - - - Do not send this entry to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. - N'envoyez pas cette entrée au navigateur pour les boîtes de dialogue d'authentification HTTP. Si cette option est activée, les boîtes de dialogue d'authentification HTTP n'afficheront pas cette entrée pour la sélection. - EditEntryWidgetHistory @@ -3268,7 +2898,7 @@ Voulez-vous la corriger ? Notes field - Champ de note + Champs des notes Username field @@ -3316,35 +2946,35 @@ Voulez-vous la corriger ? &Username: - &Nom d'utilisateur : + &Title: - &Titre : + &Password: - &Mot de passe : + UR&L: - UR&L : + &Notes: - &Notes : + Toggle notes visibility - Changer la visibilité des notes + T&ags: - Éti&quettes : + &Expires: - Expire le : + @@ -3385,9 +3015,22 @@ Voulez-vous la corriger ? Private key Clé privée + + External file + Fichier externe + + + Browser for key file + Rechercher un fichier clé + + + Browse… + Button for opening file dialog + Parcourir… + Attachment - Fichier joint + Fichiers joints External key file @@ -3401,34 +3044,17 @@ Voulez-vous la corriger ? Remove from agent Retirer de l’agent - - External file - Fichier externe - - - Browser for key file - Rechercher un fichier clé - - - Browse… - Button for opening file dialog - Parcourir… - - - Generate - Générer - Select attachment file Sélectionner une fichier joint Require user confirmation when this key is used - Exiger la confirmation de l’utilisateur quand cette clé est utilisée + Exige une confirmation de l’utilisateur quand cette clé est utilisée n/a - n. d. + s.o. Remove key from agent after @@ -3440,11 +3066,7 @@ Voulez-vous la corriger ? seconds - secondes - - - Clear agent - Vider l'agent + secondes @@ -3457,6 +3079,10 @@ Voulez-vous la corriger ? Icon Icône + + Browser Integration + Intégration aux navigateurs + Properties Propriétés @@ -3473,10 +3099,6 @@ Voulez-vous la corriger ? Group has unsaved changes Le groupe a été modifié et n'a pas été enregistré - - Browser Integration - Intégration aux navigateurs - Enable Activer @@ -3536,14 +3158,6 @@ Voulez-vous la corriger ? Omit WWW subdomain from matching toggle for this and sub groups Ignorer le sous-domaine WWW dans la correspondance pour celle-ci et ses sous-groupes - - Restrict matching to given browser key: - Restreindre la correspondance selon la clé du navigateur suivant : - - - Restrict matching to given browser key toggle for this and sub groups - Restreindre la correspondance avec la clé du navigateur entre ceci et les sous-groupes - EditGroupWidgetKeeShare @@ -3639,7 +3253,7 @@ Supported extensions are: %1. KeeShare signed container - Conteneur KeeShare signé + KeeShare conteneur signé Select import source @@ -3678,7 +3292,7 @@ Supported extensions are: %1. Use default Auto-Type sequence of parent group - Utiliser la séquence par défaut de saisie automatique du groupe parent + Utiliser la séquence de saisie automatique du groupe parent par défaut Auto-Type: @@ -3702,7 +3316,7 @@ Supported extensions are: %1. Notes field - Champ de note + Champs des notes Name: @@ -3710,7 +3324,7 @@ Supported extensions are: %1. Set default Auto-Type sequence - Définir la séquence par défaut de saisie automatique + Définir la séquence de saisie automatique par défaut Search toggle for this and sub groups @@ -3775,6 +3389,10 @@ Supported extensions are: %1. Unable to fetch favicon. Impossible de récupérer la favoricône + + You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security + Vous pouvez activer le service d’icônes de sites Web de DuckDuckGo dans Outils > Paramètres > Sécurité + Existing icon selected. L’icône existante a été sélectionnée. @@ -3793,7 +3411,7 @@ Supported extensions are: %1. Successfully loaded %1 of %n icon(s) - %1 icône d’un total de %n a été chargée avec succès%1 icônes d’un total de %n ont été chargées avec succès%1 icônes d’un total de %n ont été chargées avec succès + %1 icône sur %n a été chargée avec succès%1 icônes sur %n ont été chargées avec succès%1 icônes sur %n ont été chargées avec succès No icons were loaded @@ -3805,18 +3423,14 @@ Supported extensions are: %1. The following icon(s) failed: - Échec de l’icône suivante :Échec des icônes suivantes :Échec des icônes suivantes : - - - You can enable the DuckDuckGo website icon service under Application Settings -> Security - Vous pouvez activer le service d'icônes du site DuckDuckGo dans Paramètres -> Sécurité + L’icône suivante a échoué :Les icônes suivantes ont échoué :Les icônes suivantes ont échoué : EditWidgetProperties Created: - Création : + Créé : Datetime created @@ -3824,7 +3438,7 @@ Supported extensions are: %1. Modified: - Modification : + Modifié : Datetime modified @@ -3832,7 +3446,7 @@ Supported extensions are: %1. Accessed: - Accès : + Consulté : Datetime accessed @@ -3864,12 +3478,12 @@ Supported extensions are: %1. Delete plugin data? - Supprimer les données de l’extension ? + Supprimer les données de l’extension ? Do you really want to delete the selected plugin data? This may cause the affected plugins to malfunction. - Voulez-vous vraiment supprimer les données d’extension sélectionnées ? Cela pourrait entraîner un mauvais fonctionnement des extensions concernées. + Souhaitez-vous vraiment supprimer les données d’extension sélectionnées ? Cela pourrait entraîner un mauvais fonctionnement des extensions touchées. Key @@ -3886,24 +3500,6 @@ This may cause the affected plugins to malfunction. %1 - Clone %1 – Cloner - - Passkey - Clé d'accès - - - Invalid conversion type: %1 - Le type de conversion est invalide : %1 - - - Invalid conversion syntax: %1 - La syntaxe de conversion est invalide : %1 - - - Invalid regular expression syntax %1 -%2 - La syntaxe de l’expression rationnelle est invalide %1 -%2 - EntryAttachments @@ -3912,21 +3508,6 @@ This may cause the affected plugins to malfunction. Impossible d'ouvrir le fichier « %1 » - - EntryAttachmentsDialog - - Form - Formulaire - - - File name - Nom de fichier - - - File contents... - Contenu du fichier - - EntryAttachmentsModel @@ -3964,6 +3545,14 @@ This may cause the affected plugins to malfunction. Remove Supprimer + + Rename selected attachment + Renommer le fichier joint sélectionné + + + Rename + Renommer + Open selected attachment Ouvrir le fichier joint sélectionné @@ -3990,7 +3579,7 @@ This may cause the affected plugins to malfunction. Are you sure you want to remove %n attachment(s)? - Voulez-vous vraiment supprimer %n fichier joint ?Voulez-vous vraiment supprimer %n fichiers joints ?Voulez-vous vraiment supprimer %n fichiers joints ? + Souhaitez-vous vraiment supprimer %n fichier joint ?Souhaitez-vous vraiment supprimer %n fichiers joints ?Souhaitez-vous vraiment supprimer %n fichiers joints ? Save attachments @@ -4004,7 +3593,7 @@ This may cause the affected plugins to malfunction. Are you sure you want to overwrite the existing file "%1" with the attachment? - Voulez-vous vraiment remplacer le fichier existant « %1 » par le fichier joint ? + Souhaitez-vous vraiment remplacer le fichier existant « %1 » par le fichier joint ? Confirm overwrite @@ -4038,60 +3627,48 @@ This may cause the affected plugins to malfunction. Confirm Overwrite Attachment - Confirmer l’écrasement du fichier joint + Confirmer l'écrasement de la pièce jointe + + + Attachment "%1" already exists. +Would you like to overwrite the existing attachment? + La pièce jointe "%1" existe déjà. +Voulez-vous écraser la pièce jointe existante ? Confirm Attachment - Confirmer le fichier joint + Confirmer la pièce jointe %1 is a big file (%2 MB). Your database may get very large and reduce performance. Are you sure to add this file? - %1 est un gros fichier (%2 Mo). -Votre base de données pourrait prendre de l’ampleur et réduire les performances. + %1 est un fichier volumineux (%2 Mo). +Votre base de données peu devenir importante et ses performances réduites. -Voulez-vous vraiment ajouter ce fichier ? +Êtes-vous sûr d'ajouter ce fichier ? Attachment modified - La pièce jointe a été modifiée + Pièce jointe modifiée The attachment '%1' was modified. Do you want to save the changes to your database? - Le fichier joint « %1 » a été modifié. -Voulez-vous enregistrer les changements dans votre base de données ? + La pièce jointe « %1 » a été modifiée. +Voulez-vous enregistrer les modifications dans votre base de données ? Saving attachment failed - Échec d'enregistrement du fichier joint + Échec lors de l'enregistrement de la pièce jointe Saving updated attachment failed. Error: %1 - Échec d’enregistrement du fichier joint mis à jour. + Échec lors de l'enregistrement de la mise à jour de la pièce jointe. Erreur : %1 - - Attachment "%1" already exists. -Would you like to overwrite the existing attachment? - Le fichier joint « %1 » existe déjà. -Voulez-vous écraser le fichier joint existant ? - - - New - Nouvelle - - - Preview - Aperçu - - - Failed to preview an attachment: Attachment not found - Échec de l'aperçu du fichier joint : fichier introuvable - EntryAttributesModel @@ -4216,7 +3793,7 @@ Voulez-vous écraser le fichier joint existant ? Expires - Expire le + Expiration Created @@ -4224,11 +3801,11 @@ Voulez-vous écraser le fichier joint existant ? Modified - Modifiée + Modifié Accessed - Accès + Consulté Attachments @@ -4244,7 +3821,7 @@ Voulez-vous écraser le fichier joint existant ? Entry title - Titre de l’entrée + Titre de l'entrée Password Strength @@ -4252,11 +3829,11 @@ Voulez-vous écraser le fichier joint existant ? Entry notes - Notes de l’entrée + Notes de l'entrée Entry expires at - L’entrée expire à + L'entrée expire dans Creation date @@ -4268,7 +3845,7 @@ Voulez-vous écraser le fichier joint existant ? Last access date - Date de dernier accès + Date du dernier accès Attached files @@ -4276,24 +3853,16 @@ Voulez-vous écraser le fichier joint existant ? Entry size - Taille de l’entrée + Taille de l'entrée Has attachments - Comprend des fichiers joints + Contient des pièces jointes Has TOTP Contient un TOTP - - Background Color - Couleur d’arrière-plan - - - Group Path - Chemin du Groupe - EntryPreviewWidget @@ -4314,8 +3883,8 @@ Voulez-vous écraser le fichier joint existant ? Mot de passe - URL - URL + Notes + Notes Expiration @@ -4334,8 +3903,8 @@ Voulez-vous écraser le fichier joint existant ? Nom d’utilisateur - Notes - Notes + URL + URL Advanced @@ -4375,7 +3944,7 @@ Voulez-vous écraser le fichier joint existant ? Search - Chercher + Recherche Clear @@ -4385,10 +3954,6 @@ Voulez-vous écraser le fichier joint existant ? Never Jamais - - Double click to copy value - Double-cliquer pour copier la valeur - Enabled Activé @@ -4398,39 +3963,31 @@ Voulez-vous écraser le fichier joint existant ? Désactivé - Double click to copy to clipboard - Double-cliquer pour copier dans le presse-papiers + Double click to copy value + Double-cliquer pour copier la valeur EntryURLModel Invalid URL - L’URL est invalide - - - Duplicate URL - Dupliquer l'URL + URL invalide EntryView Fit to window - Adapter à la fenêtre + Ajuster à la fenêtre Fit to contents - Adapter au contenu + Ajuster au contenu Reset to defaults Réinitialiser aux valeurs par défaut - - + %1 entry(s)... - + %1 entrée...+ %1 entrées...+ %1 entrée(s)... - ExportDialog @@ -4446,8 +4003,8 @@ Voulez-vous écraser le fichier joint existant ? You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! - Vous êtes sur le point d’exporter votre base de données vers un fichier non chiffré. -Cela rendra vos mots de passe et données sensibles vulnérables ! + Vous êtes sur le point d'exporter votre base de données vers un fichier non crypté. +Vos mots de passe de données sensibles seront vulnérables ! database order @@ -4540,7 +4097,7 @@ Cela rendra vos mots de passe et données sensibles vulnérables ! %n Entry(s) was used by %1 %1 is the name of an application - %n entrée était utilisée par %1%n entrées étaient utilisées par %1%n entrées étaient utilisées par %1 + %n entrée a été utilisée par %1%n entrées ont été utilisées par %1%n entrées ont été utilisées par %1 @@ -4576,7 +4133,7 @@ Cela rendra vos mots de passe et données sensibles vulnérables !FdoSecretsPlugin <b>Fdo Secret Service:</b> %1 - <b>« Secret Service » de Fdo :</b> %1 + <b>Fdo Secret Service :</b> %1 @@ -4595,7 +4152,7 @@ Cela rendra vos mots de passe et données sensibles vulnérables !HibpDownloader Online password validation failed - Échec de validation du mot de passe en ligne + Échec lors de la validation du mot de passe en ligne @@ -4611,7 +4168,7 @@ Cela rendra vos mots de passe et données sensibles vulnérables ! Having trouble downloading icons? You can enable the DuckDuckGo website icon service in the security section of the application settings. - Des problèmes pour télécharger les icônes ? + Des problèmes pour télécharger les icônes ? Vous pouvez activer le service d’icônes de sites Web de DuckDuckGo dans la section sécurité des paramètres de l’application. @@ -4651,193 +4208,6 @@ Vous pouvez activer le service d’icônes de sites Web de DuckDuckGo dans la se Téléchargement des favoricônes (%1/%2)... - - ImportWizard - - Import Wizard - Assistant d'importation - - - - ImportWizardPageReview - - WizardPage - Page d’aide - - - Entry count: %1 - Nombre d'entrées : %1 - - - Group - Groupe - - - Title - Titre - - - Username - Nom d’utilisateur - - - Password - Mot de passe - - - Url - URL - - - Could not load key file. - - - - Could not open remote database. Password or key file may be incorrect. - - - - - ImportWizardPageSelect - - Form - Formulaire - - - Import File Selection - Sélection du fichier à importer - - - Password: - Mot de passe : - - - Key File: - Fichier clé : - - - Browse… - Parcourir… - - - Import Into: - Importer vers : - - - New Database - Nouvelle base de données - - - No unlocked databases available - Aucune base de données déverrouillée disponible - - - Existing Database: - Base de données existante : - - - Import File: - Fichier à importer : - - - Comma Separated Values (.csv) - Valeurs séparées par des virgules (.csv) - - - 1Password Export (.1pux) - Exportation 1Password (.1pux) - - - 1Password Vault (.opvault) - Coffre-fort 1Password (.opvault) - - - Bitwarden (.json) - Bitwarden (.json) - - - KeePass 1 Database (.kdb) - Base de données KeePass 1 (.kdb) - - - Open OPVault - Ouvrir OPVault - - - Select import file - Sélectionner le fichier à importer - - - All files - Tous les fichiers - - - Key files - Fichiers clés - - - Select key file - Sélectionner un fichier clé - - - Comma Separated Values - Valeurs séparées par une virgule - - - 1Password Export - Exportation 1Password - - - Bitwarden JSON Export - Export JSON pour Bitwarden - - - 1Password Vault - Coffre-fort 1Password - - - KeePass1 Database - Base de données KeePass1 - - - Proton Pass (.json) - Proton Pass (.json) - - - Proton Pass JSON Export - Export JSON pour Proton Pass - - - Temporary Database - - - - Command: - Commande: - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - Par exemple : "sftp login@machine" ou "scp login@machine:BaseDeDonneesDistante.kdbx {TEMP_DATABASE}" - - - Input: - Entrée : - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last commend `exit` has to be sent - - - - - Remote Database (.kdbx) - Base de données distante (.kdbx) - - KMessageWidget @@ -4866,7 +4236,7 @@ The command has to exit. In case of `sftp` as last commend `exit` has to be sent Invalid credentials were provided, please try again. If this reoccurs, then your database file may be corrupt. - Des identifiants invalides ont été fournis, veuillez réessayer. + Des identifiants invalides ont été fournis, veuillez ressayer. Si le problème se reproduit, le fichier de la base de données pourrait être corrompu. @@ -4923,7 +4293,7 @@ Si le problème se reproduit, le fichier de la base de données pourrait être c Invalid credentials were provided, please try again. If this reoccurs, then your database file may be corrupt. - Des identifiants invalides ont été fournis, veuillez réessayer. + Des identifiants invalides ont été fournis, veuillez ressayer. Si le problème se reproduit, le fichier de la base de données pourrait être corrompu. @@ -4948,11 +4318,11 @@ Si le problème se reproduit, le fichier de la base de données pourrait être c Failed to open buffer for KDF parameters in header - Échec d’ouverture d’un tampon pour les paramètres de fonction de dérivation de clé dans l’en-tête + Échec d’ouverture d’un tampon pour les paramètres KDF dans l’en-tête Unsupported key derivation function (KDF) or invalid parameters - La fonction de dérivation de clé (KDF) n’est pas prise en charge ou les paramètres sont invalides + Fonction de dérivation de clé (KDF) non prise en charge ou paramètres invalides Legacy header fields found in KDBX4 file. @@ -5053,7 +4423,7 @@ Si le problème se reproduit, le fichier de la base de données pourrait être c Failed to serialize KDF parameters variant map Translation comment: variant map = data structure for storing meta data - Échec de sérialisation des paramètres de fonction de dérivation de clé de la mappe de variantes. + Échec de sérialisation des paramètres KDF de la mappe de variantes. @@ -5177,7 +4547,7 @@ Ligne %2, colonne %3 Null DeleteObject uuid - UUID de DeleteObject null + UUID de DeleteObject nul Missing DeletedObject uuid or time @@ -5185,7 +4555,7 @@ Ligne %2, colonne %3 Null entry uuid - UUID de l’entrée null + UUID de l’entrée nul Invalid entry icon number @@ -5193,15 +4563,15 @@ Ligne %2, colonne %3 History element in history entry - Élément d’historique dans l’entrée de l’historique + Élément de l’historique de l’entrée de l’historique No entry uuid found - Aucun UUID d’entrée n’a été trouvé + Aucun UUID d’entrée trouvé History element with different uuid - Élément d’historique avec un UUID différent + Élément de l’historique avec un UUID différent Duplicate custom attribute found @@ -5221,43 +4591,43 @@ Ligne %2, colonne %3 Invalid bool value - La valeur booléenne est invalide + Valeur booléenne invalide Invalid date time value - La valeur de date et d’heure est invalide + Valeur date/heure invalide Invalid color value - La valeur de couleur est invalide + Valeur de couleur invalide Invalid color rgb part - La partie de couleur RVB est invalide + Partie de couleur RVB invalide Invalid number value - La valeur numérique est invalide + Valeur de nombre invalide Invalid uuid value - La valeur d’UUID est invalide + Valeur UUID invalide Unable to decompress binary Translator meant is a binary data inside an entry - Impossible de décompresser les données binaires + Impossible de décompresser le binaire KeeAgentSettings Invalid KeeAgent settings file structure. - La structure du fichier de paramètres KeeAgent est invalide. + Structure de fichier de paramètres KeeAgent invalide. Private key is an attachment but no attachments provided. - La clé privée est un fichier joint, mais aucun fichier joint n’est fourni. + La clé privée est une pièce jointe mais aucune pièce jointe n'est disponible. Private key is empty @@ -5269,7 +4639,18 @@ Ligne %2, colonne %3 Failed to open private key - Échec d’ouverture de la clé privée + Échec lors de l’ouverture de la clé privée + + + + KeePass1OpenWidget + + Import KeePass1 Database + Importer une base de données KeePass 1 + + + Unable to open the database. + Impossible d’ouvrir la base de données. @@ -5317,7 +4698,7 @@ Ligne %2, colonne %3 Unable to construct group tree - Impossible de créer l’arborescence du groupe + Impossible de construire l’arborescence du groupe Root @@ -5329,12 +4710,12 @@ Ligne %2, colonne %3 unable to seek to content position - impossible de se déplacer vers la position du contenu + incapable de se déplacer à la position du contenu Invalid credentials were provided, please try again. If this reoccurs, then your database file may be corrupt. - Des identifiants invalides ont été fournis, veuillez réessayer. + Des identifiants invalides ont été fournis, veuillez ressayer. Si le problème se reproduit, le fichier de la base de données pourrait être corrompu. @@ -5351,7 +4732,7 @@ Si le problème se reproduit, le fichier de la base de données pourrait être c Read group field data doesn't match size - Les données du champ de groupe lues ne correspondent pas à la taille + Les données lues dans le champ groupe ne correspondent pas à la taille Incorrect group id field size @@ -5359,11 +4740,11 @@ Si le problème se reproduit, le fichier de la base de données pourrait être c Incorrect group creation time field size - La taille du champ d’heure de création du groupe est incorrecte + Taille du champ « date du la création du groupe » incorrect. Incorrect group modification time field size - La taille du champ d’heure de modification du groupe est incorrecte + Taille du champ heure de modification du groupe non correct Incorrect group access time field size @@ -5375,7 +4756,7 @@ Si le problème se reproduit, le fichier de la base de données pourrait être c Incorrect group icon field size - La taille du champ d’icône du groupe est incorrecte + Taille du champ « icône du groupe » incorrect. Incorrect group level field size @@ -5434,11 +4815,11 @@ Si le problème se reproduit, le fichier de la base de données pourrait être c KeeShare Invalid sharing reference - La référence de partage est invalide + Référence de partage invalide Inactive share %1 - Le partage %1 est inactif + Partage %1 inactif Imported from %1 @@ -5446,11 +4827,11 @@ Si le problème se reproduit, le fichier de la base de données pourrait être c Exported to %1 - A été exporté vers %1 + Exporté vers %1 Synchronized with %1 - A été synchronisé avec %1 + Synchronisé avec %1 Import is disabled in settings @@ -5462,30 +4843,30 @@ Si le problème se reproduit, le fichier de la base de données pourrait être c Inactive share - Le partage est inactif + Partage inactif Imported from - A été importé de + Importé de Exported to - A été exporté vers + Exporté vers Synchronized with - A été synchronisé avec + Synchronisé avec KeyComponentWidget Key Component - Composant clé + Élément clé Key Component Description - Description du composant clé + Description de l’élément clé Cancel @@ -5533,7 +4914,7 @@ Si le problème se reproduit, le fichier de la base de données pourrait être c Error loading the key file '%1' Message: %2 - Erreur durant le chargement du fichier clé « %1 » + Erreur de chargement du fichier clé ’%1’ Message : %2 @@ -5594,13 +4975,13 @@ Message : %2 Suspicious Key File - Fichier clé douteux + Le fichier clé est douteux The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. Are you sure you want to continue with this file? - Le fichier clé sélectionné semble être un fichier de base de données de mots de passe. Un fichier clé doit être un fichier statique qui ne change jamais ou vous perdrez irrémédiablement l’accès à votre base de données. -Voulez-vous vraiment poursuivre avec ce fichier ? + Le fichier clé sélectionné semble être un fichier de base de données de mots de passe. Un fichier clé doit être un fichier statique qui ne change jamais, ou vous perdrez irrémédiablement l’accès à votre base de données. +Souhaitez-vous vraiment poursuivre avec ce fichier ? @@ -5628,6 +5009,10 @@ Voulez-vous vraiment poursuivre avec ce fichier ? &Recent Databases Bases de données &récentes + + &Import + &Importer + &Export &Exporter @@ -5642,16 +5027,12 @@ Voulez-vous vraiment poursuivre avec ce fichier ? Copy Att&ribute - Copier l’att&ribut + Copier l'att&ribut TOTP TOTP - - Tags - Étiquettes - &Groups &Groupes @@ -5674,15 +5055,15 @@ Voulez-vous vraiment poursuivre avec ce fichier ? &About - À &propos + &À propos &Check for Updates - &Vérifier la présence de mises à jour + &Vérifier les mises à jour &Open Database… - &Ouvrir une base de données… + &Ouvrir une base de données... &Save Database @@ -5690,39 +5071,59 @@ Voulez-vous vraiment poursuivre avec ce fichier ? &Close Database - Fermer la &base de données + &Fermer la base de données &New Database… - &Nouvelle base de données… + &Nouvelle base de données... + + + Create a new database + Créer une nouvelle base de données &Merge From Database… - Fusio&nner à partir d’une base de données… + Fusio&nner à partir d'une base de données... + + + Merge from another KDBX database + Fusionner d’une autre base de données KDBX &New Entry… - &Nouvelle entrée… + &Nouvelle entrée... + + + Add a new entry + Ajouter une entrée &Edit Entry… - &Modifier l’entrée… + Modifi&er l’entrée... + + + View or edit entry + Voir ou modifier l’entrée &Delete Entry… - &Supprimer l’entrée… + S&upprimer l'entrée... &New Group… - &Nouveau groupe… + &Nouveau groupe... + + + Add a new group + Ajouter un groupe &Edit Group… - &Modifier le groupe… + Modifi&er le groupe... &Delete Group… - &Supprimer le groupe… + &Supprimer le groupe... Download All &Favicons… @@ -5730,15 +5131,15 @@ Voulez-vous vraiment poursuivre avec ce fichier ? Sort &A-Z - Trier de &A à Z + Tri &A-Z Sort &Z-A - Trier de &Z à A + Tri &Z-A Sa&ve Database As… - Enre&gistrer la base de données sous… + Enre&gistrer la base de données sous... Database &Security… @@ -5748,37 +5149,61 @@ Voulez-vous vraiment poursuivre avec ce fichier ? Database &Reports… &Rapports de la base données... + + Statistics, health check, etc. + Statistiques, bilan de santé, etc. + &Database Settings… - &Paramètres de la base de données… + Paramètres de la base de &données... + + + Database settings + Paramètres de la base de données &Clone Entry… - &Cloner l’entrée… + &Dupliquer l'entrée Move u&p - Déplacer vers le &haut + &Monter + + + Move entry one step up + Monter l'entrée d'un cran Move do&wn - Déplacer vers le &bas + Desce&ndre + + + Move entry one step down + Descendre l'entrée d'un cran Copy &Username - Copier le nom d’&utilisateur + Copier le nom d'&utilisateur + + + Copy username to clipboard + Copier le nom d’utilisateur dans le presse-papiers Copy &Password Copier le mot de &passe + + Copy password to clipboard + Copier le mot de passe dans le presse-papiers + &Settings &Paramètres &Password Generator - &Générateur de mot de passe + Générateur de mot de &passe Perform &Auto-Type @@ -5805,13 +5230,21 @@ Voulez-vous vraiment poursuivre avec ce fichier ? &Titre - Copy &URL - Copier l'&URL + Copy title to clipboard + Copier le titre dans le presse-papiers + + + Copy URL to clipboard + Copier l’URL dans le presse-papiers &Notes &Notes + + Copy notes to clipboard + Copier les notes dans le presse-papiers + &CSV File… Fichier &CSV… @@ -5824,37 +5257,45 @@ Voulez-vous vraiment poursuivre avec ce fichier ? KeePass 1 Database… Base de données KeePass 1… + + Import a KeePass 1 database + Importer une base de données KeePass 1 + 1Password Vault… Coffre 1Password… + + Import a 1Password Vault + Importer un coffre 1Password + CSV File… - Fichier CSV… + Fichier CSV... + + + Import a CSV file + Importer un fichier CSV Show TOTP - Afficher le TOTP + Afficher TOTP Show QR Code - Afficher le QR code + Afficher le QR code Set up TOTP… - Configurer TOTP… + Définir un TOTP... Copy &TOTP - Copier le &TOTP - - - Copy Password and TOTP - Copier le mot de passe et TOTP + Copie &TOTP E&mpty recycle bin - &Vider la corbeille + V&ider la corbeille &Donate @@ -5874,7 +5315,11 @@ Voulez-vous vraiment poursuivre avec ce fichier ? &Online Help - &Aide en ligne + Aide en &ligne + + + Go to online documentation + Accéder à la documentation en ligne &User Guide @@ -5894,7 +5339,7 @@ Voulez-vous vraiment poursuivre avec ce fichier ? Add key to SSH Agent - Ajouter une clé à l’agent SSH + Ajouter une clé à l'agent SSH Remove key from SSH Agent @@ -5920,10 +5365,6 @@ Voulez-vous vraiment poursuivre avec ce fichier ? Classic (Platform-native) Classique (de la plateforme) - - Show Menubar - Afficher la barre de menus - Show Toolbar Afficher la barre d’outils @@ -5948,10 +5389,6 @@ Voulez-vous vraiment poursuivre avec ce fichier ? Clone Group... Dupliquer le groupe... - - &XML File… - Fichier &XML ... - Clear history Effacer l’historique @@ -5968,9 +5405,8 @@ Voulez-vous vraiment poursuivre avec ce fichier ? 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 de KeePassXC. -Le risque de corruption est élevé. Conservez une sauvegarde de vos bases de données. -Cette version ne devrait pas être utilisée en production. + ATTENTION : vous utilisez une version instable de KeePassXC. +Il existe un risque important de dysfonctionnement. Effectuez régulièrement une copie de sécurité de vos bases de données. Cette version n'est pas destinée à une utilisation régulière. NOTE: You are using a pre-release version of KeePassXC. @@ -5979,8 +5415,10 @@ Expect some bugs and minor issues, this version is meant for testing purposes. - No Tags - Aucune étiquette + 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 peut entraîner un plantage avec un clavier virtuel. +Nous vous recommandons d'utiliser l'AppImage disponible sur notre page de téléchargements. Restore Entry(s) @@ -5992,11 +5430,11 @@ Mise à part certains bogues et dysfonctionnements mineurs, cette version est de Check for updates on startup? - Vérifier la présence de mises à jour au démarrage ? + Vérifier la présence de mises à jour au démarrage ? Would you like KeePassXC to check for updates on startup? - Voulez-vous que KeePassXC vérifie la présence de mises à jour au démarrage ? + Souhaitez-vous que KeePassXC vérifie la présence de mises à jour au démarrage ? You can always check for updates manually from the application menu. @@ -6010,330 +5448,50 @@ Mise à part certains bogues et dysfonctionnements mineurs, cette version est de Quit KeePassXC Fermer KeePassXC - - %1 Entry(s) - %1 entrée%1 entrées%1 entrée(s) - Please present or touch your YubiKey to continue… Veuillez insérer ou toucher votre YubiKey pour continuer... Restart Application? - Redémarrer l’application ? + Redémarrer l’application ? You must restart the application to apply this setting. Would you like to restart now? - Pour appliquer ce paramètre, vous devez redémarrer l’application. Voulez-vous la démarrer maintenant ? + Pour appliquer ce paramètre, vous devez redémarrer l’application. Souhaitez-vous la démarrer maintenant ? + + + Tags + Étiquettes + + + No Tags + Aucune étiquette + + + %1 Entry(s) + %1 Entrée(s)%1 Entrée(s)%1 Entrée(s) + + + Copy Password and TOTP + Copier le mot de passe et TOTP + + + &XML File… + Fichier &XML ... + + + XML File… + Fichier XML ... + + + Copy &URL + Allow Screen Capture Autoriser la capture d'écran - - 1Password 1PUX... - 1Password 1PUX... - - - Import a 1Password 1PUX file - Importer un fichier 1Password 1PUX - - - Import… - Importer… - - - Passkeys… - Clés d'accès… - - - Import Passkey - Importer une clé d'accès - - - Remote S&ync… - S&ynchronisation à distance... - - - Quit Application - Quitter l'application - - - Open About Dialog - Ouvrir la fenêtre À propos. - - - Open Database - Ouvrir une base de données - - - Create Database - Créer une base de données - - - Merge From Database - Fusionner depuis la base de données - - - Create Entry - Créer une entrée - - - Edit Entry - Modifier l’entrée - - - Delete Entry - Supprimer l'entrée - - - Create Group - Créer un groupe - - - Edit Group - Modifier le groupe - - - Delete Group - Supprimer le groupe - - - Download All Favicons - Télécharger tous les favicons. - - - Sort Groups A-Z - Trier les groupes de A-Z - - - Sort Groups Z-A - Trier les groupes de Z-A - - - Save Database As - Enregistrer la base de données sous... - - - Show Database Security - Afficher les informations de sécurité de la base de données - - - Show Database Reports - Afficher un rapport sur la base de données - - - Show Database Settings - Afficher les paramètres de la base de données - - - Show Passkeys - Afficher les clés d'accès - - - Clone Entry - Cloner l'entrée - - - Move Entry Up - Monter l'entrée - - - Move Entry Down - Descendre l'entrée - - - Copy Username - Copier le nom d'utilisateur - - - Copy Password - Copier le mot de passe - - - Show Application Settings - Afficher les paramètres de l'application - - - Show Password Generator - Afficher le générateur de mot de passe - - - Remove Passkey From Entry - Supprimer la clé d'accès de l'entrée - - - Perform Auto-Type: {USERNAME} - Remplir automatiquement : {LOGIN} - - - Perform Auto-Type: {USERNAME}{ENTER} - Remplir automatiquement : {LOGIN}{ENTRÉE} - - - Perform Auto-Type: {PASSWORD} - Remplir automatiquement : {MOTDEPASSE} - - - Perform Auto-Type: {PASSWORD}{ENTER} - Remplir automatiquement : {MOTDEPASSE}{ENTRÉE} - - - Perform Auto-Type: {TOTP} - Remplir automatiquement : {TOTP} - - - Copy Title - Copier le titre - - - Copy URL - Copier l'URL - - - Copy Notes - Copier les notes - - - Export to CSV - Exporter en CSV - - - Export to HTML - Exporter au format HTML - - - Import KeePass1 Database - Importer une base de données KeePass 1 - - - Import 1Password Vault - Importer depuis un coffre-fort 1Password - - - Import CSV File - Importer un fichier CSV - - - Show TOTP QR Code - Afficher le QR Code TOTP - - - Set up TOTP - Configuration TOTP - - - Empty Recycle Bin - Vider la corbeille - - - Open Donation Website - Faire un don - - - Open Bug Report - Ouvrir un rapport de bogue - - - Open Online Documentation - Ouvrir la documentation en ligne - - - Open Keyboard Shortcuts Guide - Ouvrir le guide des raccourcis clavier - - - Save Database Backup - Enregistrer une copie de sécurité de la base de données - - - SSH Agent: Add Key - SSH Agent : ajouter une clé - - - SSH Agent: Remove Key - SSH Agent : supprimer une clé - - - Toggle Compact Mode - Permuter le mode de compatibilité - - - Set Theme: Automatic - Définir le thème : automatique - - - Set Theme: Light - Définir le thème : clair - - - Set Theme: Dark - Définir le thème : foncé - - - Set Theme: Classic - Définir le thème : classique - - - Toggle Show Menubar - Permuter l'affichage de la barre de menus - - - Toggle Show Toolbar - Permuter l'affichage de la barre d'outils - - - Toggle Show Preview Panel - Permuter l'affichage du panneau d'aperçu - - - Toggle Always on Top - Permuter le mode Toujours devant - - - Toggle Hide Usernames - Permuter la masquage des noms d'utilisateur - - - Toggle Hide Passwords - Permuter la masquage des mots de passe - - - Export to XML - Exporter au format XML - - - Toggle Allow Screen Capture - Permuter l'autorisation de capture d'écran - - - Show Group Panel - Afficher le panneau de groupe - - - Toggle Show Group Panel - Permuter l'affichage du panneau d'aperçu - - - Setup Remote Sync… - Configurer la synchronisation à distance... - - - Password Generator - Générateur de mots de passe - - - E&xpire Entry… - Faire expirer l'entrée… - - - Clear SSH Agent - Vider l'agent SSH - - - Clear all identities in ssh-agent - Effacer toutes les identités dans ssh-agent - ManageDatabase @@ -6351,7 +5509,7 @@ Mise à part certains bogues et dysfonctionnements mineurs, cette version est de Unlock database to show more information - Déverrouiller la base de données pour afficher davantage de renseignements + Déverrouiller la base de données pour afficher plus d’informations Lock database @@ -6391,6 +5549,26 @@ Mise à part certains bogues et dysfonctionnements mineurs, cette version est de Overwriting %1 [%2] Remplacement de %1 [%2] + + older entry merged from database "%1" + ancienne entrée fusionnée de la base de données « %1 » + + + Adding backup for older target %1 [%2] + Ajout d’une sauvegarde pour l’ancienne cible %1 [%2] + + + Adding backup for older source %1 [%2] + Ajout d’une sauvegarde pour l’ancienne source %1 [%2] + + + Reapplying older target entry on top of newer source %1 [%2] + Ré-application de l’ancienne entrée cible sur la nouvelle source %1 [%2] + + + Reapplying older source entry on top of newer target %1 [%2] + Ré-application de l’ancienne entrée source sur la nouvelle cible %1 [%2] + Synchronizing from newer source %1 [%2] Synchronisation avec une source plus récente %1 [%2] @@ -6417,11 +5595,11 @@ Mise à part certains bogues et dysfonctionnements mineurs, cette version est de Removed custom data %1 [%2] - Les données personnalisées %1 [%2] ont été supprimées + Données personnalisées %1 [%2] supprimées Adding custom data %1 [%2] - Ajout des données personnalisées %1 [%2] + Données personnalisées %1 [%2] ajoutées @@ -6450,6 +5628,14 @@ Mise à part certains bogues et dysfonctionnements mineurs, cette version est de Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. Vous pouvez régler ici les paramètres de chiffrement de la base de données. Ne vous inquiétez pas, vous pourrez les changer ultérieurement dans les paramètres de la base de données. + + Advanced Settings + Paramètres avancés + + + Simple Settings + Paramètres simplifiés + NewDatabaseWizardPageDatabaseKey @@ -6481,26 +5667,7 @@ Mise à part certains bogues et dysfonctionnements mineurs, cette version est de Please fill in the display name and an optional description for your new database: - Veuillez saisir le nom d’affichage et une description facultative pour votre nouvelle base de données : - - - - NewEntryAttachmentsDialog - - Attachment name cannot be empty - Le nom du fichier joint ne peut pas être vide - - - Attachment with the same name already exists - Un fichier joint avec un nom identique existe déjà - - - Save attachment - Enregistrer le fichier attaché - - - New entry attachment - Nouveau fichier joint de l'entrée + Veuillez renseigner le nom et optionnellement une description pour votre nouvelle base de données : @@ -6522,7 +5689,7 @@ Mise à part certains bogues et dysfonctionnements mineurs, cette version est de OpData01 Invalid OpData01, does not contain header - OpData01 est invalide, ne comprend pas d’en-tête + OpData01 invalide, ne contient pas d’en-tête Unable to read all IV bytes, wanted 16 but got %1 @@ -6530,23 +5697,32 @@ Mise à part certains bogues et dysfonctionnements mineurs, cette version est de Unable to init cipher for opdata01: %1 - Impossible d’initialiser le chiffrement pour opdata01 : %1 + Impossible d’initialiser le chiffrage pour opdata01 : %1 Unable to read all HMAC signature bytes - Impossible de lire tous les octets de la signature HMAC + Impossible de lire tous les octets de la signature HMAC Malformed OpData01 due to a failed HMAC - OpData01 mal formé en raison d’un échec HMAC + OpData01 incorrect dû à un échec HMAC Unable to process clearText in place - Impossible d’activer le traitement de ClearText + Impossible d’appliquer l'amélioration ClearText Expected %1 bytes of clear-text, found %2 - %1 octets de texte en clair étaient attendus, %2 ont été trouvés + %2 octets de clearText ont été trouvés sur les %1 requis + + + + OpVaultOpenWidget + + Read Database did not produce an instance +%1 + La base de données lue n’a généré aucune instance +%1 @@ -6557,7 +5733,7 @@ Mise à part certains bogues et dysfonctionnements mineurs, cette version est de Directory .opvault must be readable - Le répertoire .opvault doit être lisible + Le répertoire .opvault doit être accessible en lecture Directory .opvault/default must exist @@ -6565,22 +5741,22 @@ Mise à part certains bogues et dysfonctionnements mineurs, cette version est de Directory .opvault/default must be readable - Le répertoire .opvault/default doit être lisible + Le répertoire .opvault/default doit être accessible en lecture Unable to decode masterKey: %1 - Impossible de décoder la clé maîtresse : %1 + Impossible de décoder la clé maître : %1 Unable to derive master key: %1 - Impossible de calculer la clé maîtresse : %1 + Impossible de calculer la clé maître : %1 OpenSSHKey Invalid key file, expecting an OpenSSH key - Une clé OpenSSH est requise, mais le fichier clé est invalide + Le fichier clé est invalide, une clé OpenSSH est attendue PEM boundary mismatch @@ -6588,7 +5764,7 @@ Mise à part certains bogues et dysfonctionnements mineurs, cette version est de Base64 decoding failed - Échec du décodage Base64 + Échec du décodage Base64 Key file way too small. @@ -6596,11 +5772,11 @@ Mise à part certains bogues et dysfonctionnements mineurs, cette version est de Key file magic header id invalid - L’identifiant d’en-tête magique du fichier clé est invalide + L’ID de l’en-tête magique du fichier clé est invalide Found zero keys - Aucune clé n’a été trouvée + Zéro clés trouvées Failed to read public key. @@ -6608,11 +5784,11 @@ Mise à part certains bogues et dysfonctionnements mineurs, cette version est de Corrupted key file, reading private key failed - Le fichier clé est corrompu. Échec de lecture de la clé privée. + Le fichier clé est corrompu, échec de lecture de la clé privée Unsupported key type: %1 - Type de clé non pris en charge : %1 + Type de clé non géré : %1 No private key payload to decrypt @@ -6622,10 +5798,6 @@ Mise à part certains bogues et dysfonctionnements mineurs, cette version est de Unknown cipher: %1 Chiffrement inconnu : %1 - - AES-256/GCM is currently not supported - AES-256/GCM n'est actuellement pas pris en charge - Passphrase is required to decrypt this key Une phrase de passe est exigée pour déchiffrer cette clé @@ -6636,11 +5808,11 @@ Mise à part certains bogues et dysfonctionnements mineurs, cette version est de Cipher IV is too short for MD5 kdf - Le chiffrement IV est trop court pour la fonction de dérivation de clé MD5 + Le chiffrement IV est trop court pour le KDF MD5 Unknown KDF: %1 - Fonction de dérivation de clé inconnue : %1 + KDF inconnu : %1 Failed to initialize cipher: %1 @@ -6652,7 +5824,7 @@ Mise à part certains bogues et dysfonctionnements mineurs, cette version est de Decryption failed, wrong passphrase? - Échec de déchiffrement. La phrase de passe est-elle erronée ? + Échec de déchiffrement. La phrase de passe est-elle erronée ? Unexpected EOF while reading key @@ -6664,7 +5836,7 @@ Mise à part certains bogues et dysfonctionnements mineurs, cette version est de Unexpected EOF while reading public key - Fin de fichier inattendue lors de la lecture de la clé publique + End-of-file inattendu lors de la lecture de la clé publique Unknown key type: %1 @@ -6672,7 +5844,7 @@ Mise à part certains bogues et dysfonctionnements mineurs, cette version est de Unexpected EOF while reading private key - Fin de fichier inattendue lors de la lecture de la clé privée + End-of-file inattendu lors de la lecture de la clé privée Can't write public key as it is empty @@ -6680,7 +5852,7 @@ Mise à part certains bogues et dysfonctionnements mineurs, cette version est de Unexpected EOF when writing public key - Fin de fichier inattendue lors de l’écriture de la clé publique + End-of-file inattendu lors de l’écriture de la clé publique Can't write private key as it is empty @@ -6688,185 +5860,11 @@ Mise à part certains bogues et dysfonctionnements mineurs, cette version est de Unexpected EOF when writing private key - Fin de fichier inattendue lors de l’écriture de la clé privée + End-of-file inattendu lors de l’écriture de la clé privée - (encrypted) - (chiffrée) - - - - OpenSSHKeyGenDialog - - SSH Key Generator - Générateur de clé SSH - - - Type - Type - - - Bits - Bits - - - Comment - Commentaire - - - - PasskeyExportDialog - - KeePassXC - Passkey Export - KeePassXC - Exporter une clé d'accès - - - Filenames will be generated with title and .passkey file extension. - Les fichiers sont nommés avec le titre et .passkey pour extension. - - - Export entries - Exporter des entrées - - - Export Selected - Exporter la sélection - - - Cancel - Annuler - - - Export to folder - Exporter dans un dossier - - - Export the following passkey entries. - Exporter les entrées avec clé d'accès suivantes. - - - - PasskeyExporter - - KeePassXC: Passkey Export - KeePassXC : exporter une clé d'accès - - - File "%1.passkey" already exists. -Do you want to overwrite it? - - Le fichier « %1.passkey » existe déjà. -Le remplacer ? - - - Cannot open file - Impossible d'ouvrir le fichier - - - Cannot open file "%1" for writing. - Impossible d’écrire le fichier « %1 ». - - - Cannot write to file - Impossible d’écrire le fichier - - - - PasskeyImportDialog - - KeePassXC - Passkey Import - KeePassXC - Importer une clé d'accès - - - Username: %1 - Nom d’utilisateur : %1 - - - Group - Groupe - - - Database - Base de données - - - Import Passkey - Importer une clé d'accès - - - Import - Importer - - - Cancel - Annuler - - - Entry - Entrée - - - Create new entry - Créer une nouvelle entrée - - - Relying Party: %1 - Tiers de confiance : %1 - - - Import the following passkey: - Importer les clés d'accès suivantes : - - - Import the following passkey to this entry: - Exporter la clé d'accès de cette entrée : - - - Default passkeys group (Imported Passkeys) - Groupe par défaut des clés d'accès (clés importées) - - - - PasskeyImporter - - Passkey file - Fichier de clé d'accès - - - All files - Tous les fichiers - - - Cannot open file - Impossible d'ouvrir le fichier - - - Cannot open file "%1" for reading. - Impossible d’ouvrir le fichier « %1 » en lecture. - - - Open passkey file - Ouvrir un fichier de clé d'accès - - - Cannot import passkey - Impossible d'importer la clé d'accès - - - Cannot import passkey file "%1". Data is missing. - Impossible d'importer le fichier de clé d'accès « %1 ». Données manquantes. - - - Cannot import passkey file "%1". -The following data is missing: -%2 - Impossible d'importer le fichier de clé d'accès « %1 ». -La donnée suivante est manquante : -%2 - - - Cannot import passkey file "%1". Private key is missing or malformed. - Impossible d'importer le fichier de clé d'accès « %1 ». La clé privée est manquante ou incorrecte. + AES-256/GCM is currently not supported + @@ -6881,7 +5879,7 @@ La donnée suivante est manquante : Confirm password: - Confirmer le mot de passe : + Confirmation du mot de passe : Repeat password field @@ -6909,7 +5907,7 @@ La donnée suivante est manquante : <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>Un mot de passe est le moyen principal pour sécuriser votre base de données.</p><p>Les bons mots de passe sont longs et uniques. KeePassXC peut en générer un pour vous.</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> Passwords do not match. @@ -6925,7 +5923,7 @@ La donnée suivante est manquante : strength Password strength - robustesse + force entropy @@ -6941,7 +5939,7 @@ La donnée suivante est manquante : Regenerate password - Générer le mot de passe de nouveau + Régénérer le mot de passe Copy password @@ -6961,7 +5959,7 @@ La donnée suivante est manquante : Switch to advanced mode - Passer en mode avancé + Basculer vers le mode avancé Advanced @@ -6989,7 +5987,7 @@ La donnée suivante est manquante : Upper-case letters - Majuscules + Lettres majuscules Numbers @@ -6997,7 +5995,7 @@ La donnée suivante est manquante : Lower-case letters - Minuscules + Lettres minuscules Math Symbols @@ -7013,19 +6011,19 @@ La donnée suivante est manquante : Do not include: - Ne doit pas comporter : + Ne pas inclure : Additional characters to use for the generated password - Caractères supplémentaires à utiliser pour le mot de passe généré + Autres caractères à utiliser pour le mot de passe généré Additional characters - Caractères supplémentaires + Autres caractères Add non-hex letters to "do not include" list - Ajouter les lettres non hexadécimales à la liste « Ne doit pas comporter » + Ajouter les lettres non-hexadécimales à la liste « Ne pas inclure » Hex Passwords @@ -7037,7 +6035,7 @@ La donnée suivante est manquante : Character set to exclude from generated password - Jeu de caractères à exclure du mot de passe généré + Ensemble de caractères à exclure du mot de passe généré Excluded characters @@ -7045,7 +6043,7 @@ La donnée suivante est manquante : Also choose from: - Choisir aussi parmi : + Choisir également parmi : Exclude look-alike characters @@ -7053,7 +6051,7 @@ La donnée suivante est manquante : Pick characters from every group - Choisir des caractères dans chacun des groupes + Inclure des caractères de chaque groupe Passphrase @@ -7071,9 +6069,13 @@ La donnée suivante est manquante : Word Count: Nombre de mots : + + Character Count: + Nombres de caractères : + Word Case: - Casse des mots : + Casse du mot : Delete selected wordlist @@ -7083,6 +6085,10 @@ La donnée suivante est manquante : Add custom wordlist Ajout d'une liste de mots personnalisée + + character + caractère + Close Fermer @@ -7093,11 +6099,11 @@ La donnée suivante est manquante : Apply Password - Appliquer le mot de passe + Confirmer le mot de passe Regenerate password (%1) - Générer le mot de passe de nouveau (%1) + Régénérer le mot de passe (%1) lower case @@ -7109,7 +6115,7 @@ La donnée suivante est manquante : Title Case - Majuscule De Signification + Noms Propres (SYSTEM) @@ -7119,37 +6125,13 @@ La donnée suivante est manquante : Entropy: %1 bit Entropie : %1 bits - - Password Quality: %1 - Qualité du mot de passe : %1 - - - Poor - Password quality - Plutôt mauvais - - - Weak - Password quality - Faible - - - Good - Password quality - Bon - - - Excellent - Password quality - Excellent - Confirm Delete Wordlist Confirmer la suppression de liste de mots Do you really want to delete the wordlist "%1"? - Voulez-vous vraiment supprimer la liste de mots « %1 » ? + Voulez-vous vraiment supprimer la liste de mots "%1"? Failed to delete wordlist @@ -7169,13 +6151,13 @@ La donnée suivante est manquante : Overwrite Wordlist? - Écraser la liste de mots ? + Écraser la liste de mots ? Wordlist "%1" already exists as a custom wordlist. Do you want to overwrite it? - La liste de mots « %1 » existe déjà en tant que liste personnalisée. -Voulez-vous la remplacer ? + La liste de mots "%1" existe déjà comme une liste personnalisée. +Voulez-vous la remplacer ? Failed to add wordlist @@ -7183,27 +6165,39 @@ Voulez-vous la remplacer ? Logograms - Logogrammes + Logogramme Special Characters Caractères spéciaux - passwordLength - longueurMotdepasse + Password Quality: %1 + Qualité du mot de passe : %1 - Characters: %1 - Caractères : %1 + Poor + Password quality + Pauvre - MIXED case - Casse mixte + Weak + Password quality + Faible - Excluded characters: "0", "1", "l", "I", "O", "|", "﹒", "B", "8", "G", "6" - Caractères exclus: "0", "1", "l", "I", "O", "|", "﹒", "B", "8", "G", "6" + Good + Password quality + Bon + + + Excellent + Password quality + Excellent + + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + Les caractères exclus sont : « 0 », « 1 », « l », « I », « O », « | », « . » @@ -7253,8 +6247,8 @@ Voulez-vous la remplacer ? Excellent - Toggle password visibility using Control + H. Open the password generator using Control + G. - Utilisez Ctrl + H pour permuter l'affichage du mot de passe. Utilisez Ctrl + G pour ouvrir le générateur de mots de passe. + Toggle password visibilty using Control + H. Open the password generator using Control + G. + @@ -7272,21 +6266,6 @@ Voulez-vous la remplacer ? Appuyez sur &Tabulation entre les caractères - - PreviewEntryAttachmentsDialog - - Preview entry attachment - Aperçu du fichier joint de l'entrée - - - No preview available - Aucun aperçu disponible - - - Image format not supported - Format d’image non pris en charge - - QMessageBox @@ -7303,7 +6282,7 @@ Voulez-vous la remplacer ? Empty - Vider + Vide Remove @@ -7325,10 +6304,6 @@ Voulez-vous la remplacer ? Continue Poursuivre - - Continue with weak password - Confirmer l'utilisation d'un mot de passe faible - QObject @@ -7342,7 +6317,7 @@ Voulez-vous la remplacer ? Client public key not received - La clé publique du client n’a pas été reçue + Clé publique du client non reçue Cannot decrypt message @@ -7350,15 +6325,15 @@ Voulez-vous la remplacer ? Action cancelled or denied - L’action a été annulée ou refusée + Action annulée ou refusée Message encryption failed. - Échec de chiffrement du message. + Erreur lors du chiffrement du message. KeePassXC association failed, try again - L’association à KeePassXC a échoué, veuillez réessayer + L’association à KeePassXC a échoué, veuillez ressayer Encryption key is not recognized @@ -7366,27 +6341,27 @@ Voulez-vous la remplacer ? Incorrect action - L’action est incorrecte + Action incorrecte Empty message received - Un message vide a été reçu + Message vide reçu No URL provided - Aucune URL n’a été indiquée + Aucune URL définie No logins found - Aucun identifiant n’a été trouvé + Aucuns identifiants trouvés No groups found - Aucun groupe n’a été trouvé + Aucun groupe trouvé Cannot create new group - Impossible de créer un nouveau groupe + Impossible de créer de nouveau groupe No valid UUID provided @@ -7406,7 +6381,7 @@ Voulez-vous la remplacer ? Could not save the native messaging script file for %1. - Impossible d’enregistrer le fichier script de messagerie native pour %1. + Impossible d'enregistrer le fichier script de messagerie native pour %1. Username for the entry. @@ -7466,7 +6441,7 @@ Voulez-vous la remplacer ? Successfully added entry %1. - Ajouté avec succès l’entrée %1. + L’entrée %1 a bien été ajoutée. Adds a new group to a database. @@ -7478,15 +6453,15 @@ Voulez-vous la remplacer ? Group %1 already exists! - Le groupe %1 existe déjà + Le groupe %1 existe déjà ! Group %1 not found. - Le groupe %1 est introuvable. + Groupe %1 introuvable. Successfully added group %1. - Le groupe %1 a été ajouté avec succès. + Le groupe %1 a bien été ajouté. Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. @@ -7506,7 +6481,7 @@ Voulez-vous la remplacer ? Analyze passwords for weaknesses and problems. - Analyser la robustesse et les problèmes des mots de passe. + Analyse les mots de passe aux fins de fuite et de problèmes. Cannot find HIBP file: %1 @@ -7518,7 +6493,7 @@ Voulez-vous la remplacer ? Failed to open HIBP file %1: %2 - Échec de l’ouverture du fichier HIBP %1 : %2 + Impossible d'ouvrir le fichier HIBP %1 : %2 Evaluating database entries against HIBP file, this will take a while… @@ -7526,27 +6501,27 @@ Voulez-vous la remplacer ? Password for '%1' has been leaked %2 time(s)! - Le mot de passe pour « %1 » a été divulgué %2 foisLe mot de passe pour « %1 » a été divulgué %2 foisLe mot de passe pour « %1 » a été divulgué %2 fois + Le mot de passe pour « %1 » a été compromis %2 fois !Le mot de passe pour « %1 » a été compromis %2 fois !Le mot de passe pour « %1 » a été compromis %2 fois ! Password for '%1' has been leaked! - Le mot de passe de « %1 » a été divulgué ! + Le mot de passe pour « %1 » a été compromis ! Export an attachment of an entry. - Exporter un fichier joint d’une entrée. + Exporter une pièce jointe d'une entrée Path of the entry with the target attachment. - Chemin de l’entrée avec le fichier joint cible. + Chemin d'accès d'une entrée avec la cible jointe. Name of the attachment to be exported. - Nom du fichier joint à exporter. + Nom de la pièce jointe à exporter. Path to which the attachment should be exported. - Chemin dans lequel le fichier joint devrait être exporté. + Chemin d'accès vers lequel la pièce jointe doit être exportée. Could not find entry with path %1. @@ -7554,11 +6529,11 @@ Voulez-vous la remplacer ? Could not find attachment with name %1. - Impossible de trouver le fichier joint nommé %1. + Impossible de trouver la pièce jointe portant le nom %1. No export target given. Please use '--stdout' or specify an 'export-file'. - Pas de cible d'export fourni. Merci d'utiliser « --stdout » ou spécifier un « fichier d'export ». + Pas de cible d'export fourni. Merci d'utiliser '--stdout' ou spécifier un 'fichier d'export'. Could not open output file %1. @@ -7566,15 +6541,15 @@ Voulez-vous la remplacer ? Successfully exported attachment %1 of entry %2 to %3. - Le fichier joint %1 de l'entrée %2 a été exporté avec succès dans %3. + Export réussi la pièce jointe %1 de l'entrée %2 vers %3. Overwrite existing attachments. - Écraser les fichiers joints existants. + Écraser les pièces jointes existantes. Imports an attachment to an entry. - Importe un fichier joint dans une entrée. + Importe une pièce jointe dans une entrée. Path of the entry. @@ -7582,35 +6557,35 @@ Voulez-vous la remplacer ? Name of the attachment to be added. - Nom du fichier joint à ajouter. + Nom de la pièce jointe à ajouter. Path of the attachment to be imported. - Chemin du fichier joint à importer. + Chemin d'accès de la pièce jointe à ajouter. Attachment %1 already exists for entry %2. - Le fichier joint %1 existe déjà pour l’entrée %2. + La pièce jointe %1 existe déjà pour l'entrée %2. Could not open attachment file %1. - Impossible d’ouvrir le fichier joint %1. + Impossible d'ouvrir la pièce jointe %1. Successfully imported attachment %1 as %2 to entry %3. - Le fichier joint %1 a été importé avec succès en tant que %2 dans l’entrée %3. + Import réussi de la pièce jointe %1 comme %2 vers l'entrée %3. Remove an attachment of an entry. - Supprimer un fichier joint d’une entrée. + Supprimer une pièce jointe d'une entrée. Name of the attachment to be removed. - Nom du fichier joint à supprimer. + Nom de la pièce jointe à supprimer. Successfully removed attachment %1 from entry %2. - Le fichier joint %1 a été supprimé avec succès de l’entrée %2. + Suppression réussie de la pièce jointe %1 de l'entrée %2. Copy the given attribute to the clipboard. Defaults to "password" if not specified. @@ -7627,7 +6602,7 @@ Voulez-vous la remplacer ? Copy an entry's attribute to the clipboard. - Copier l’attribut d’une entrée dans le presse-papiers. + Copier l'attribut d'entrée dans le presse-papiers. Path of the entry to clip. @@ -7652,11 +6627,11 @@ Voulez-vous la remplacer ? Entry %1 not found. - L’entrée %1 est introuvable. + Entrée %1 non trouvée. ERROR: Please specify one of --attribute or --totp, not both. - ERREUR : Veuillez indiquer -attribut ou -totp, mais pas les deux. + ERREUR : veuillez spécifier -attribut ou -totp, mais pas les deux. Entry with path %1 has no TOTP set up. @@ -7664,27 +6639,27 @@ Voulez-vous la remplacer ? ERROR: attribute %1 is ambiguous, it matches %2. - ERREUR : L’attribut %1 est ambigu, il correspond à %2. + ERREUR : attribut %1 ambigu, il correspond à %2. Attribute "%1" not found. - L’attribut « %1 » est introuvable. + Attribut « %1 » introuvable. Entry's "%1" attribute copied to the clipboard! - L’attribut de l’entrée « %1 » a été copié dans le presse-papiers + Attribut d'entrée « %1 » copié dans le presse-papiers ! Clearing the clipboard in %1 second(s)... - Effacement du presse-papiers dans %1 seconde…Effacement du presse-papiers dans %1 secondes…Effacement du presse-papiers dans %1 secondes… + Vidage du presse-papiers dans %1 seconde…Vidage du presse-papiers dans %1 secondes…Vidage du presse-papiers dans %1 secondes… Clipboard cleared! - Le presse-papiers a été effacé + Le presse-papiers a été effacé ! Close the currently opened database. - Fermer la base de données ouverte actuellement. + Fermer la base de données actuellement ouverte. Display this help. @@ -7692,7 +6667,7 @@ Voulez-vous la remplacer ? Silence password prompt and other secondary outputs. - Désactiver les demandes de mot de passe et autres sorties secondaires. + Faire taire le champs mot de passe et les autres champs secondaires. Key file of the database. @@ -7708,11 +6683,11 @@ Voulez-vous la remplacer ? Yubikey slot and optional serial used to access the database (e.g., 1:7370001). - Emplacement et numéro de série facultatif Yubikey utilisés pour accéder à la base de données (p. ex. : 1:7370001). + Emplacement Yubikey et n° de série facultatif pour accéder à la base de données (ex. : 1:7370001). slot[:serial] - emplacement[:numéro de série] + emplacement[:n° de série] Missing positional argument(s). @@ -7722,13 +6697,9 @@ Voulez-vous la remplacer ? Too many arguments provided. Trop d'arguments transmis. - - Path of the database. - Chemin de la base de données. - Target decryption time in MS for the database. - Durée de déchiffrement cible en millisecondes pour la base de données. + Durée de décryptage de la cible en millisecondes pour la base de données. time @@ -7736,47 +6707,51 @@ Voulez-vous la remplacer ? Set the key file for the database. - Définir le fichier clé de la base de données. + Définir le fichier clé pour la base de données. Set a password for the database. - Définir un mot de passe pour la base de données. + Définir le mot de passe pour la base de données. Create a new database. Créer un nouvelle base de données. + + Path of the database. + Chemin de la base de données. + Invalid decryption time %1. - La durée de déchiffrement est invalide : %1. + Durée de décryptage invalide : %1. Target decryption time must be between %1 and %2. - La durée de déchiffrement cible doit être entre %1 et %2. + La durée de décryptage de la cible doit être entre %1 et %2. Failed to set database password. - Échec de définition du mot de passe de la base de données. + Impossible de définir le mot de passe de la base de données. Loading the key file failed - Échec du chargement du fichier clé + Échec de chargement du fichier clé No key is set. Aborting database creation. - Aucune clé n’est définie. Abandon de la création de la base de données. + Aucune clé définie. La création de la base de données a été abandonnée. Benchmarking key derivation function for %1ms delay. - Analyse des performances de la fonction de dérivation de clé pour un retard de %1 ms. + L'analyse de performance pour la fonction de dérivation de la clé indique un retard de %1 ms. Setting %1 rounds for key derivation function. - %1 cycles sont définis pour la fonction de dérivation de clé. + %1 cycles sont définis pour la fonction de dérivation de la clé. error while setting database key derivation settings. - erreur de paramétrage de la dérivation de clé de la base de données. + erreur lors du paramétrage de la dérivation de clé de la base de données. File %1 already exists. @@ -7788,63 +6763,290 @@ Voulez-vous la remplacer ? Successfully created new database. - La nouvelle base de données a été créée avec succès. + Créé avec succès la nouvelle base de données. - Unset the password for the database. - Annulez la définition du mot de passe de la base de données. + 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. - Unset the key file for the database. - Annuler la définition du fichier de clé de la base de données. + count + CLI parameter + nombre - Edit a database. - Éditer une base de données + Wordlist for the diceware generator. +[Default: EFF English] + Liste de mots pour le générateur par méthode du lancer de dés. +[Par défaut : FFÉ anglais] - Cannot use %1 and %2 at the same time. - Impossible d'utiliser %1 et %2 en même temps. + 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. - Could not change the database key. - Impossible de changer la clé de la base de donnée + Invalid word count %1 + Le nombre de mots %1 est invalide - Database was not modified. - La base de données n'a pas été modifiée + The word list is too small (< 1000 items) + La liste de mots est trop courte (moins de 1 000 entrées) + + + Title for the entry. + Titre de l’entrée. + + + title + titre + + + Edit an entry. + Modifier une entrée. + + + Path of the entry to edit. + Chemin de l’entrée à modifier. + + + Not changing any field for entry %1. + Aucun changement effectué dans les champs de l’entrée %1. + + + Enter new password for entry: + Saisir le nouveau mot de passe pour l’entrée : Writing the database failed: %1 - Échec d’écriture de la base de données : %1 + Échec d’écriture de la base de données : %1. - Successfully edited the database. - La base de données a été éditée avec succés + Successfully edited entry %1. + L’entrée %1 a été modifiée avec succès. - Cannot remove password: The database does not have a password. - Impossible de supprimer le mot de passe: La base de données n’a pas de mot de passe. + Perform advanced analysis on the password. + Effectuer une analyse approfondie du mot de passe. - Cannot remove file key: The database does not have a file key. - Impossible de supprimer le fichier clé: La base de données n'a pas de fichier clé. + Password for which to estimate the entropy. + Mot de passe pour lequel estimer l’entropie. - Loading the new key file failed: %1 - Échec du chargement du nouveau fichier clé : %1 + Estimate the entropy of a password. + Estimer l’entropie d’un mot de passe. - Found unexpected Key type %1 - Type %1 de clé inconnue trouvé + Length %1 + Longueur %1 - Cannot remove all the keys from a database. - Impossible de supprimer toutes les clefs d'une base de données + Entropy %1 + Entropie %1 + + + Log10 %1 + Log10 %1 + + + Multi-word extra bits %1 + Octets additionnels mots multiples %1 + + + Type: Bruteforce + Type : Force brute + + + Type: Dictionary + Type : Dictionnaire + + + Type: Dict+Leet + Type : Dictionnaire + Leet + + + Type: User Words + Type : Mots utilisateur + + + Type: User+Leet + Type : Utilisateur + Leet + + + Type: Repeated + Type : Répétition + + + Type: Sequence + Type : Séquence + + + Type: Spatial + Type : Spatial + + + Type: Date + Type : Date + + + Type: Bruteforce(Rep) + Type : Bruteforce(Rep) + + + Type: Dictionary(Rep) + Type : Dictionnaire(Rep) + + + Type: Dict+Leet(Rep) + Type : Dictionnaire + Leet (rep) + + + Type: User Words(Rep) + Type : Mots Utilisateur(Rep) + + + Type: User+Leet(Rep) + Type : Utilisateur + Leet (rep) + + + Type: Repeated(Rep) + Type : Répétition(Rep) + + + Type: Sequence(Rep) + Type : Séquence(Rep) + + + Type: Spatial(Rep) + Type : Spatial(Rep) + + + Type: Date(Rep) + Type : Date(Rep) + + + Type: Unknown (%1) + Type : inconnu (%1) + + + Entropy %1 (%2) + Entropie %1 (%2) + + + *** Password length (%1) != sum of length of parts (%2) *** + *** Longueur du mot de passe (%1) != longueurs additionnées des morceaux (%2) *** + + + Exit interactive mode. + Quitte le mode interactif. + + + Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. + Format à utiliser lors de l'exportation. Les choix disponibles sont « xml » ou « csv ». La valeur par défaut est « xml ». + + + Exports the content of a database to standard output in the specified format. + Exporte le contenu de la base de données vers la sortie standard au format spécifié. + + + Unable to export database to XML: %1 + Impossible d’exporter la base de données en XML : %1 + + + Unsupported format %1 + Format %1 non pris en charge + + + Length of the generated password + Taille du mot de passe généré + + + length + longueur + + + Use lowercase characters + Utiliser les caractères minuscules + + + Use uppercase characters + Utiliser les caractères majuscules + + + Use numbers + Utiliser des nombres + + + Use special characters + Utiliser les caractères spéciaux + + + Use extended ASCII + Utiliser l’ASCII étendu + + + Exclude character set + Exclure les caractères suivants + + + chars + caractères + + + Use custom character set + Utiliser un jeu de caractères personnalisé + + + Exclude similar looking characters + Exclure les caractères qui se ressemblent + + + Include characters from every selected group + Inclure des caractères de chaque groupe + + + Generate a new random password. + Générer un nouveau mot de passe aléatoire. + + + Invalid password length %1 + Longueur du mot de passe %1 invalide + + + Invalid password generator after applying all options + Générateur de mots de passe invalide après l’application de toutes les options + + + Display command help. + Afficher l’aide de la commande. + + + Available commands: + Commandes proposées : + + + Import the contents of an XML database. + Importer le contenu d’une base de données XML. + + + Path of the XML database export. + Chemin vers l’exportation de la base de données au format XML. + + + Path of the new database. + Chemin vers la nouvelle base de données. + + + Unable to import XML database: %1 + Impossible d'importer la base de données XML : %1 + + + Successfully imported database. + La base de données a été importée avec succès. Show a database's information. - Afficher les renseignements d’une base de données. + Afficher les informations de la base de données. UUID: @@ -7860,11 +7062,11 @@ Voulez-vous la remplacer ? Cipher: - Chiffrement : + Chiffrage : KDF: - Fonction de dérivation de clé : + KDF : Recycle bin is enabled. @@ -7872,7 +7074,7 @@ Voulez-vous la remplacer ? Recycle bin is not enabled. - La corbeille est désactivée. + La corbeille n'est pas activée. Location @@ -7942,276 +7144,9 @@ Voulez-vous la remplacer ? %1 characters %1 caractères - - 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. - - - count - CLI parameter - nombre - - - Wordlist for the diceware generator. -[Default: EFF English] - Liste de mots pour le générateur par méthode du lancer de dés. -[Par défaut : FFÉ anglais] - - - 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. - - - Invalid word count %1 - Le nombre de mots %1 est invalide - - - Title for the entry. - Titre de l’entrée. - - - title - titre - - - Edit an entry. - Modifier une entrée. - - - Path of the entry to edit. - Chemin de l’entrée à modifier. - - - Not changing any field for entry %1. - Aucun changement de champ pour l’entrée %1. - - - Enter new password for entry: - Saisir le nouveau mot de passe pour l’entrée : - - - Successfully edited entry %1. - L’entrée %1 a été modifiée avec succès. - - - Perform advanced analysis on the password. - Effectuer une analyse approfondie du mot de passe. - - - Password for which to estimate the entropy. - Mot de passe pour lequel estimer l’entropie. - - - Estimate the entropy of a password. - Estimer l’entropie d’un mot de passe. - - - Length %1 - Longueur %1 - - - Entropy %1 - Entropie %1 - - - Log10 %1 - Log10 %1 - - - Multi-word extra bits %1 - Octets supplémentaires de mots multiples %1 - - - Type: Bruteforce - Type : force brute - - - Type: Dictionary - Type : dictionnaire - - - Type: Dict+Leet - Type : dictionnaire + leet - - - Type: User Words - Type : mots utilisateur - - - Type: User+Leet - Type : utilisateur + Leet - - - Type: Repeated - Type : répété - - - Type: Sequence - Type : séquence - - - Type: Spatial - Type : spatial - - - Type: Date - Type : date - - - Type: Bruteforce(Rep) - Type : force brute (rép.) - - - Type: Dictionary(Rep) - Type : dictionnaire (rép.) - - - Type: Dict+Leet(Rep) - Type : dictionnaire + Leet (rép.) - - - Type: User Words(Rep) - Type : mots utilisateur (rép.) - - - Type: User+Leet(Rep) - Type : utilisateur + leet (rép.) - - - Type: Repeated(Rep) - Type : répété (rép.) - - - Type: Sequence(Rep) - Type : séquence (rép.) - - - Type: Spatial(Rep) - Type : spatial (rép.) - - - Type: Date(Rep) - Type : date (rép.) - - - Type: Unknown (%1) - Type : inconnu (%1) - - - Entropy %1 (%2) - Entropie %1 (%2) - - - *** Password length (%1) != sum of length of parts (%2) *** - *** Longueur du mot de passe (%1) != somme de la longueur des parties (%2) *** - - - Exit interactive mode. - Quitter le mode interactif. - - - Exports the content of a database to standard output in the specified format. - Exporte au format indiqué le contenu de la base de données vers la sortie standard. - - - Unable to export database to XML: %1 - Impossible d’exporter la base de données en XML : %1 - - - Unsupported format %1 - Le format %1 n’est pas pris en charge - - - Length of the generated password - Longueur du mot de passe généré - - - length - longueur - - - Use lowercase characters - Utiliser des minuscules - - - Use uppercase characters - Utiliser des majuscules - - - Use numbers - Utiliser des chiffres - - - Use special characters - Utiliser des caractères spéciaux - - - Use extended ASCII - Utiliser l’ASCII étendu - - - Exclude character set - Exclure le jeu de caractères - - - chars - caractères - - - Use custom character set - Utiliser un jeu de caractères personnalisé - - - Exclude similar looking characters - Exclure les caractères qui se ressemblent - - - Include characters from every selected group - Choisir des caractères dans chacun des groupes sélectionnés - - - Generate a new random password. - Générer un nouveau mot de passe aléatoire. - - - Invalid password length %1 - La longueur du mot de passe %1 est invalide - - - Invalid password generator after applying all options - Le générateur de mots de passe est invalide après application de toutes les options - - - Display command help. - Afficher l’aide de la commande. - - - Available commands: - Commandes proposées : - - - Import the contents of an XML database. - Importer le contenu d’une base de données XML. - - - Path of the XML database export. - Chemin vers l’exportation de la base de données au format XML. - - - Path of the new database. - Chemin de la nouvelle base de données. - - - Unable to import XML database: %1 - Impossible d’importer la base de données XML : %1 - - - Successfully imported database. - La base de données a été importée avec succès. - Unknown command %1 - La commande %1 est inconnue + Commande inconnue %1 @@ -8229,23 +7164,23 @@ Commandes proposées : Displays debugging information. - Affiche les renseignements de débogage. + Afficher les informations de débogage. Invalid command %1. - La commande %1 est invalide. + Commande invalide : %1. Recursively list the elements of the group. - Lister récursivement les éléments du groupe. + Lister récursivement les éléments du groupe Flattens the output to single lines. - Réduit la sortie en lignes simples. + Fusionne la sortie en une seule ligne. List database entries. - Lister les entrées de la base de données. + Lister les entrées de la base. Path of the group to list. Default is / @@ -8265,7 +7200,7 @@ Commandes proposées : Deactivate password key for the database to merge from. - Désactiver la clé du mot de passe pour la base de données à partir de laquelle fusionner. + Désactiver la clé du mot de passe pour la base de données à fusionner. Only print the changes detected by the merge operation. @@ -8273,7 +7208,7 @@ Commandes proposées : Yubikey slot for the second database. - Emplacement Yubikey pour la seconde base de données. + Emplacement Yubikey pour la seconde base de données. slot @@ -8290,7 +7225,7 @@ Commandes proposées : Error reading merge file: %1 - Erreur de lecture du fichier fusionné : + Erreur lors de la lecture du fichier à fusionner : %1 @@ -8299,7 +7234,7 @@ Commandes proposées : Successfully merged %1 into %2. - %1 a été fusionné dans %2 avec succès. + %1 a bien été fusionné avec %2. Database was not modified by merge operation. @@ -8327,7 +7262,7 @@ Commandes proposées : Successfully moved entry %1 to group %2. - L’entrée %1 a été déplacée vers le groupe %2 avec succès. + L’entrée %1 a bien été déplacée vers le groupe %2. Open a database. @@ -8343,15 +7278,15 @@ Commandes proposées : Successfully recycled entry %1. - L’entrée %1 a été recyclée avec succès. + L'entrée %1 a bien été recyclée. Successfully deleted entry %1. - Supprimé l’entrée %1 avec succès. + L’entrée %1 a bien été supprimée. Path of the group to remove. - Chemin du groupe à supprimer. + Chemin vers le groupe à supprimer. Cannot remove root group from database. @@ -8359,39 +7294,35 @@ Commandes proposées : Successfully recycled group %1. - Le groupe %1 a été recyclé avec succès. + Le groupe %1 a bien été récupéré. Successfully deleted group %1. - Le groupe %1 a été supprimé avec succès. + Le groupe %1 a bien été supprimé. Find entries quickly. - Trouver des entrées rapidement. + Trouver rapidement les entrées. Search term. - Terme d'interrogation. + Critère de recherche. Show the entry's current TOTP. - Afficher le TOTP actuel pour l’entrée. + Afficher le TOTP courant pour l’entrée. Show the protected attributes in clear text. Afficher en clair les attributs protégés. - - Show all the attributes of the entry. - Afficher toutes les caractéristiques de l'entrée - Show the attachments of the entry. - Afficher les fichiers joints de l’entrée. + Voir les pièces jointes d'une entré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 indiquée plus d’une fois, avec chaque attribut apparaissant un par ligne dans l’ordre donné. Si aucun attribut n’est indiqué, un résumé des attributs par défaut est présenté. + 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é. attribute @@ -8407,15 +7338,15 @@ Commandes proposées : ERROR: unknown attribute %1. - ERREUR : L’attribut %1 est inconnu. + ERREUR : attribut %1 inconnu. No attachments present. - Il n’y a aucun fichier joint. + Pas de pièces jointes présentes. Attachments: - Fichiers joints : + Pièces jointes : Failed to open database file %1: not found @@ -8448,23 +7379,19 @@ Veuillez envisager de générer un nouveau fichier clé. Invalid YubiKey slot %1 - L’emplacement YubiKey %1 est invalide + Emplacement YubiKey %1 invalide Invalid YubiKey serial %1 - Le numéro de série Yubikey %1 est invalide - - - Please present or touch your YubiKey to continue. - Veuillez présenter ou toucher votre YubiKey pour continuer… + N° de série Yubikey invalide : %1 Enter password to encrypt database (optional): - Saisissez un mot de passe pour chiffrer la base de données (facultatif) : + Saisissez le mot de passe pour chiffrer la base de données (optionnel) : Do you want to create a database with an empty password? [y/N]: - Voulez-vous créer une base de données avec un mot de passe vide ? [o/N] : + Souhaitez-vous créer une base de données avec un mot de passe vide ? [o/N] : Repeat password: @@ -8472,11 +7399,11 @@ Veuillez envisager de générer un nouveau fichier clé. Error: Passwords do not match. - Erreur : Les mots de passe ne correspondent pas. + Erreur : les mots de passe ne correspondent pas. No program defined for clipboard manipulation - Aucun programme n’est défini pour le traitement du presse-papiers + Aucun logiciel configuré pour la manipulation du presse-papiers All clipping programs failed. Tried %1 @@ -8486,11 +7413,11 @@ Veuillez envisager de générer un nouveau fichier clé. Creating KeyFile %1 failed: %2 - Échec de création du fichier clé %1 : %2 + Impossible de créer le fichier clé %1 : %2 Loading KeyFile %1 failed: %2 - Échec de chargement du fichier clé %1 : %2 + Impossible de charger le fichier clé %1 : %2 HIBP file, line %1: parse error @@ -8570,7 +7497,7 @@ Veuillez envisager de générer un nouveau fichier clé. Distribution: %1 - Distribution : %1 + Canal : %1 Debugging mode is disabled. @@ -8594,7 +7521,7 @@ Noyau : %3 %4 SSH Agent - Agent SSH + Agent SSH KeeShare @@ -8610,7 +7537,7 @@ Noyau : %3 %4 Secret Service Integration - Intégration à « Secret Service » + Intégration au Secret Service None @@ -8646,7 +7573,7 @@ Noyau : %3 %4 Botan library must be at least %1, found %2.%3.%4 - La bibliothèque Botan doit être au moins %1, trouvée %2.%3.%4 + Cryptographic libraries: @@ -8686,23 +7613,35 @@ Noyau : %3 %4 NULL device - Dispositif NUL + Périphérique NUL error reading from device - erreur de lecture à partir du dispositif + Erreur de lecture sur le périphérique file empty - fichier vide + Fichier vide + + + malformed string + chaîne de caractères incorrecte + + + missing closing quote + Le guillemet fermant manque + + + %1: (row, col) %2,%3 + %1 : (ligne, colonne) %2, %3 AES 256-bit - AES 256 bits + AES 256 bits Twofish 256-bit - Twofish 256 bits + Twofish 256 bits ChaCha20 256-bit @@ -8734,7 +7673,7 @@ Noyau : %3 %4 Clearing the clipboard in %1 second(s)… - Effacement du presse-papiers dans %1 seconde…Effacement du presse-papiers dans %1 secondes…Effacement du presse-papiers dans %1 secondes… + Effacement du presse-papiers dans %1 secondeEffacement du presse-papiers dans %1 secondesEffacement du presse-papiers dans %1 secondes Group @@ -8770,49 +7709,49 @@ Noyau : %3 %4 Benchmark %1 delay - Analyse des performance : %1 de retard + Performance : %1 de retard %1 ms milliseconds - %1 ms%1 ms%1 ms + %1 ms%1 ms%1 ms %1 s seconds - %1 s%1 s%1 s + %1 s%1 s%1 s Do you really want to delete the entry "%1" for good? - Voulez-vous vraiment supprimer l’entrée « %1 » définitivement ? + Souhaitez-vous vraiment supprimer définitivement l’entrée « %1 » ? Do you really want to delete %n entry(s) for good? - Voulez-vous vraiment supprimer %n entrée définitivement ?Voulez-vous vraiment supprimer %n d’entrées définitivement ?Voulez-vous vraiment supprimer %n entrées définitivement ? + Voulez-vous vraiment définitivement supprimer %n entrée ?Voulez-vous vraiment définitivement supprimer %n entrées ?Voulez-vous vraiment définitivement supprimer %n entrées ? Delete entry(s)? - Supprimer l’entrée ?Supprimer les entrées ?Supprimer les entrées ? + Supprimer l’entrée ?Supprimer les entrées ?Supprimer les entrées ? Do you really want to move entry "%1" to the recycle bin? - Voulez-vous vraiment déplacer l’entrée « %1 » vers la corbeille ? + Souhaitez-vous vraiment déplacer l’entrée « %1 » 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 ?Voulez-vous vraiment déplacer %n entrées vers la corbeille ?1 + Voulez-vous vraiment déplacer %n entrée à la corbeille ?Voulez-vous vraiment déplacer %n entrées à la corbeille ?Voulez-vous vraiment déplacer %n entrées à la corbeille ? Move entry(s) to recycle bin? - Déplacer l’entrée vers la corbeille ?Déplacer les entrées vers la corbeille ?Déplacer les entrées vers la corbeille ? + Déplacer l’entrée vers la corbeille ?Déplacer les entrées vers la corbeille ?Déplacer les entrées vers la corbeille ? Replace references to entry? - Remplacer les références vers l’entrée ? + 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  » à %2 référence. Voulez-vous la remplacer par la valeur, ignorer cette entrée ou la supprimer quand même ?L’entrée « %1  » à %2 références. Voulez-vous les remplacer par les valeurs, ignorer cette entrée ou la supprimer quand même ?L’entrée « %1  » à %2 références. Voulez-vous les remplacer par les valeurs, ignorer cette entrée ou la supprimer quand même ? + L’entrée « %1  » à %2 référence. Voulez-vous la remplacer par la valeur, ignorer cette entrée ou la supprimer quand même ?L’entrée « %1  » à %2 références. Voulez-vous les remplacer par les valeurs, ignorer cette entrée ou la supprimer quand même ?L’entrée « %1  » à %2 références. Voulez-vous les remplacer par les valeurs, ignorer cette entrée ou la supprimer quand même ? User name @@ -8856,7 +7795,7 @@ Noyau : %3 %4 path to a custom config file - chemin vers un fichier de configuration personnalisée + chemin vers un fichier de configuration personnalisé path to a custom local config file @@ -8874,6 +7813,14 @@ Noyau : %3 %4 read password of the database from stdin lire le mot de passe de la base de données sur l’entrée standard + + allow app screen recordering and screenshots + autoriser l'application à enregistrer et capturer l'écran + + + Locked databases. + Les bases de données ont été verrouillées. + Database failed to lock. Échec de verrouillage de la base de données. @@ -8882,13 +7829,9 @@ Noyau : %3 %4 Another instance of KeePassXC is already running. Une autre instance de KeePassXC est déjà en cours d’exécution. - - KeePassXC is not running. No open database to lock - KeePassXC est arrêté. Aucune base de données ouverte à verrouiller. - Fatal error while testing the cryptographic functions. - Erreur fatale lors de l’évaluation des fonctions cryptographiques. + Erreur fatale lors des tests des fonctions cryptographiques. KeePassXC - Error @@ -8901,12 +7844,12 @@ Noyau : %3 %4 Invalid Settings TOTP - Des paramètres sont invalides + Paramètres invalides Invalid Key TOTP - La clé est invalide + Clé invalide Failed to create Windows Hello credential. @@ -8922,330 +7865,99 @@ Noyau : %3 %4 Invalid Cipher - Chiffre invalide + Invalid KDF - KDF invalide + - Access to all entries is denied - Accès refusé à toutes les entrées + Please present or touch your YubiKey to continue. + Veuillez présenter ou toucher votre YubiKey pour continuer. - allow screenshots and app recording (Windows/macOS) - autorise les captures d'écran et l'enregistrement vidéo (Windows/macOS) + Show all the attributes of the entry. + Afficher toutes les paramètres de l'entrée + + + Edit a database. + Éditer une base de données + + + Could not change the database key. + Impossible de changer la clé de la base de données + + + Database was not modified. + La base de données n'a pas été modifiée + + + Successfully edited the database. + La base de données a été éditée avec succès + + + Loading the new key file failed: %1 + Échec du chargement du nouveau fichier clé : %1 + + + Unset the password for the database. + Annuler la définition du mot de passe de la base de données. + + + Unset the key file for the database. + Annuler la définition du fichier clé de la base de données. + + + Cannot use %1 and %2 at the same time. + Impossible d'utiliser %1 et %2 en même temps. + + + Cannot remove all the keys from a database. + Impossible de supprimer toutes les clefs d'une base de données + + + Cannot remove password: The database does not have a password. + Impossible de supprimer le mot de passe: La base de données n’a pas de mot de passe. + + + Cannot remove file key: The database does not have a file key. + Impossible de supprimer le fichier clé: La base de données n'a pas de fichier clé. + + + Found unexpected Key type %1 + Set the key file for the database. -This option is deprecated, use --set-key-file instead. - Définir le fichier clé pour la base. -Cette option est obsolète, utilisez plutôt --set-key-file. - - - Databases have been locked. - Les bases de données ont été verrouillées. - - - Attestation not supported - Certification non prise en charge - - - Credential is excluded - L'identifiant est exclus - - - Passkeys request canceled - Demande de clés d’accès annulée - - - Invalid user verification - Vérification de l’utilisateur invalide - - - Empty public key - Clé publique vide - - - Invalid URL provided - URL renseignée invalide - - - Passkeys - Clés d'accès - - - AES initialization failed - Échec d'initialisation AES - - - AES encrypt failed - Échec de chiffrement AES - - - Failed to store in Linux Keyring - Échec du stockage dans le trousseau de clés Linux - - - Polkit returned an error: %1 - Polkit a retourné une erreur : %1 - - - Could not locate key in keyring - Impossible de localiser la clé dans le trousseau - - - Could not read key in keyring - Impossible de lire la clé dans le trousseau - - - AES decrypt failed - Échec de déchiffrement AES - - - No Polkit authentication agent was available - Aucun agent d’authentification Polkit disponible - - - Polkit authorization failed - Échec d'autorisation Polkit - - - No Quick Unlock provider is available - Aucun fournisseur Quick Unlock disponible - - - Failed to init KeePassXC crypto. - Échec d’initialisation de la cryptographie de KeePassXC - - - Failed to encrypt key data. - Échec de chiffrement des données de la clé. - - - Failed to get Windows Hello credential. - Échec d’obtention des identifiants Windows Hello. - - - Failed to decrypt key data. - Échec de déchiffrement des données de la clé. - - - Origin is empty or not allowed - La source est vide ou non autorisée - - - Effective domain is not a valid domain - Le véritable domaine est invalide - - - Origin and RP ID do not match - La source et l'identifiant du tiers ne correspondent pas - - - No supported algorithms were provided - Aucun algorithme pris en charge n'a été proposé - - - Wait for timer to expire - Veuillez attendre l'expiration du délai - - - Challenge is shorter than required minimum length - La longueur de l'interrogation subsidiaire est inférieure au minium requis - - - user.id does not match the required length - utilisateur.identifiant n'a pas la longueur requise - - - Favorite - Tag for favorite entries - Favori - - - File does not exist. - Le fichier n'existe pas. - - - Cannot open file: %1 - Ouverture du fichier impossible : %1 - - - Cannot parse file: %1 at position %2 - Analyse impossible du fichier : %1 à la position %2 - - - Failed to decrypt json file: %1 - Échec lors du décryptage du fichier JSON : %1 - - - Invalid encKeyValidation field - Champ encKeyValidation invalide - - - Invalid cipher list within encKeyValidation field - Liste de chiffrement invalide dans le champ encKeyValidation - - - Wrong password - Mot de passe erroné - - - Invalid encrypted data field - Champ de données cryptées invalide - - - Invalid cipher list within encrypted data field - Liste de chiffrement invalide dans le champ des données chiffrées - - - Cannot initialize cipher - Impossible d'initialiser le chiffrement - - - Cannot decrypt data - Impossible de décrypter les données - - - Bitwarden Import - Importation Bitwarden - - - Archived - Tag for archived entries - Archivé - - - Invalid 1PUX file format: Not a valid ZIP file. - Format de fichier 1PUX : fichier ZIP invalide. - - - Invalid 1PUX file format: Missing export.data - Format de fichier 1PUX : export.data manquant. - - - 1Password Import - Importation 1Password - - - Enter Shortcut - Saisir le raccourci - - - Action - Action - - - Shortcuts - Raccourcis - - - Unknown passkeys error - Erreur de clés d'accès inconnue - - - Invalid KDF iterations, cannot decrypt json file - Itérations KDF invalides, impossible de déchiffrer le fichier json. - - - Unsupported format, ensure your Bitwarden export is password-protected - Format non pris en charge, assurez-vous que l'export Bitwarden protège les mots de passe - - - Only PBKDF and Argon2 are supported, cannot decrypt json file - Seuls PBKDF et Argon2 sont pris en charge, impossible de déchiffrer le fichier json. - - - Reset Shortcuts - Réinitialiser les raccourcis - - - Double click an action to change its shortcut - Double-cliquez sur une action pour modifier son raccourci - - - Filter... - Filtrer... - - - Shortcut Conflict - Conflit de raccourcis - - - Shortcut %1 conflicts with '%2'. Overwrite shortcut? - Le raccourci %1 est en conflit avec « %2 » : faut-il écraser le raccourci ? - - - Cannot generate valid passphrases because the wordlist is too short - Impossible de générer des phrases de passe valides, car la liste de mots est trop courte. - - - Encrypted files are not supported. - Les fichiers chiffrés ne sont pas pris en charge. - - - Proton Pass Import - Import pour Proton Pass - - - Delete plugin data? - Supprimer les données de l’extension ? - - - Delete plugin data from Entry(s)? - Supprimer les données du greffon depuis l'entrée?Supprimer les données du greffon depuis les entrées?Supprimer les données du greffon depuis l(es) entrée(s)? - - - Passkey - Clé d'accès - - - Format to use when exporting. Available choices are 'xml', 'csv' or 'html'. Defaults to 'xml'. - Format à utiliser lors de l'exportation. Les choix proposés sont « xml », « csv » ou « html ». La valeur par défaut est « xml ». - - - start minimized to the system tray - Démarrer réduit à la zone de notification système - - - malformed string, possible unescaped delimiter +This options is deprecated, use --set-key-file instead. - missing closing delimiter - - - - %1, row: %2, column: %3 - - - - Tags - Étiquettes + KeePassXC is not running. No open database to lock + KeePassXC est arrêté. Aucune base de données ouverte à verrouiller. QtIOCompressor Internal zlib error when compressing: - Erreur interne zlib lors de la compression : + Erreur interne zlib lors de la compression : Error writing to underlying device: - Erreur d’écriture sur le dispositif sous-jacent : + Erreur d’écriture sur le périphérique sous-jacent : Error opening underlying device: - Erreur d’ouverture du dispositif sous-jacent : + Erreur d’ouverture du périphérique sous-jacent : Error reading data from underlying device: - Erreur de lecture de données à partir du dispositif sous-jacent : + Erreur de lecture des données sur le périphérique sous-jacent : Internal zlib error when decompressing: - Erreur interne zlib lors de la décompression : + Erreur interne zlib lors de la décompression : @@ -9259,39 +7971,20 @@ Cette option est obsolète, utilisez plutôt --set-key-file. Erreur interne zlib : - - RemoteHandler - - Command `%1` did not finish in time. Process was killed. - La commande « %1 » n'a pas terminé à temps. Le processus a été tué. - - - Failed to upload merged database. Command `%1` did not finish in time. Process was killed. - Échec du téléversement de la base de données fusionnée. La commande "%1" n'a pas terminé à temps. Le processus a été tué. - - - Invalid download parameters provided. - Les paramètres de téléchargement fournis sont incorrects. - - - Command `%1` failed to download database. - La commande « %1 » n’a pas pu télécharger la base de données. - - - Invalid database pointer or upload parameters provided. - L'adresse de base de données ou les paramètres de téléversement fournis sont incorrects. - - - Command `%1` exited with status code: %2 - La commande « %1 » s'est terminée avec le code d'état : %2 - - - Failed to upload merged database. Command `%1` exited with status code: %2 - Échec du téléversement de la base de données fusionnée. La commande "%1" s'est terminée avec le code d'état : %2 - - ReportsWidgetBrowserStatistics + + Exclude expired entries from the report + Exclure les entrées expirées du rapport + + + Show only entries which have URL set + Ne monter que les entrées qui ont défini leur URL + + + Show only entries which have browser settings in custom data + Ne montrer que les entrées qui ont des paramètres de navigateur dans leur données personnelles + Double-click entries to edit. Double-cliquer sur les entrées pour les modifier @@ -9350,70 +8043,61 @@ Cette option est obsolète, utilisez plutôt --set-key-file. Delete Entry(s)… - Supprimer l’entrée…Supprimer les entrées…Supprimer les entrées1… + Supprimer les entrées ?Supprimer les entrées ? Exclude from reports Exclure des rapports - - Expire Entry(s)… - Entrée expiréeEntrées expiréesEntrée(s) expirée(s) - - - Only show entries that have a URL - N’afficher que les entrées disposant d'une URL - - - Only show entries that have been explicitly allowed or denied - N’affichez que les entrées explicitement autorisées ou refusées - - - Show expired entries - Afficher les entrées expirées - - - (Expired) - (expirée) - - - Delete plugin data from Entry(s)… - Supprimer les données du greffon depuis l'entrée…Supprimer les données du greffon depuis les entrées…Supprimer les données du greffon depuis l(es) entrée(s)… - ReportsWidgetHealthcheck - Show expired entries - Afficher les entrées expirées + Exclude expired entries from the report + Exclure les entrées expirées du rapport - (Expired) - (expirée) + Also show entries that have been excluded from reports + Afficher également les entrées exclues des rapports Hover over reason to show additional details. Double-click entries to edit. - Survolez la raison pour afficher des détails supplémentaires. Double-cliquez sur les entrées pour les modifier. + Survolez la raison pour afficher les détails. Double-cliquer sur les entrées pour les modifier. + + + Bad + Password quality + Mauvais Bad — password must be changed - Mauvais – le mot de passe doit être changé + Mauvais — le mot de passe doit être modifié + + + Poor + Password quality + Mauvais Poor — password should be changed - Plutôt mauvais – le mot de passe doit être changé + Médiocre — le mot de passe doit être modifié + + + Weak + Password quality + Faible Weak — consider changing the password - Faible – envisagez de changer le mot de passe + Faible — le mot de passe devrait être modifié (Excluded) - (exclue) + (exclue) This entry is being excluded from reports - Cette entrée est exclue des rapports + Cette entrée a été exclue des rapports Please wait, health data is being calculated… @@ -9421,7 +8105,7 @@ Cette option est obsolète, utilisez plutôt --set-key-file. Congratulations, everything is healthy! - Félicitations, tout est en ordre + Félicitations, le bilan de santé est parfait ! Title @@ -9441,46 +8125,38 @@ Cette option est obsolète, utilisez plutôt --set-key-file. Edit Entry… - Modifier l'entrée... + Modifier l'entrée Delete Entry(s)… - Supprimer l’entrée…Supprimer les entrées…Supprimer les entrées… + Supprimer l’entrée ?Supprimer les entrées ?Supprimer les entrées ? Exclude from reports Exclure des rapports - - Expire Entry(s)… - Entrée expiréeEntrées expiréesEntrée(s) expirée(s) - - - Show entries that have been excluded from reports - Afficher les entrées exclues des rapports - ReportsWidgetHibp CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. - ATTENTION : Ce rapport requiert l’envoi de renseignements au service en ligne « Have I Been Pwned » (https://haveibeenpwned.com). Si vous poursuivez, les mots de passe de votre base de données seront hachés de façon cryptographique et les cinq premiers caractères de ces hachages seront envoyés de façon sécurisée à ce service. La sécurité de votre base de données est assurée et votre base de données ne peut pas être reconstituée à partir de ces renseignements. Toutefois, le nombre de mots de passe que vous envoyez et votre adresse IP seront dévoilés à ce service. + AVERTISSEMENT : ce rapport nécessite l'envoi d'informations au service en ligne Have I Been Pwned (https://haveibeenpwned.com). Si vous confirmez, les mots de passe de la base de données seront hachés de façon cryptographique et les 5 premiers caractères du hachage seront envoyés à ce service de façon sécurisée. Votre base de données reste en sécurité et ne peut être reconstruite à partir de ces informations. Toutefois, le nombre de mots de passe ainsi votre adresse IP seront dévoilés à ce service. Perform Online Analysis - Effectuer une analyse en ligne + Analyse de performance en ligne Also show entries that have been excluded from reports - Afficher aussi les entrées qui ont été exclues des rapports + Afficher également les entrées exclues des rapports This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. - Cette version de KeePassXC ne dispose pas de fonctions réseau. Il est nécessaire de se connecter au réseau afin de vérifier vos mots de passe auprès du service « Have I Been Pwned ». + Cette mouture de KeePassXC ne dispose pas de fonctions réseau. La mise en réseau est nécessaire afin de vérifier vos mots de passe auprès du service Have I Been Pwned. Congratulations, no exposed passwords! - Félicitations, aucun mot de passe n’a été divulgué + Félicitations, aucun mot de passe n'est corrompu ! Title @@ -9492,15 +8168,15 @@ Cette option est obsolète, utilisez plutôt --set-key-file. Password exposed… - Mots de passe divulgués… + Mots de passe corrompus... (Excluded) - (exclue) + (exclue) This entry is being excluded from reports - Cette entrée est exclue des rapports + Cette entrée a été exclue des rapports once @@ -9548,89 +8224,18 @@ Cette option est obsolète, utilisez plutôt --set-key-file. Delete Entry(s)… - Supprimer l’entrée…Supprimer les entrées…Supprimer les entrées… + Supprimer l’entrée ?Supprimer les entrées ?Supprimer les entrées ? Exclude from reports Exclure des rapports - - Expire Entry(s)… - Entrée expiréeEntrées expiréesEntrée(s) expirée(s) - - - - ReportsWidgetPasskeys - - Export - Exporter - - - Import - Importer - - - List of entry URLs - Liste des URL d'entrées - - - Title - Titre - - - Path - Chemin - - - Username - Nom d’utilisateur - - - URLs - URL - - - Edit Entry… - Modifier l'entrée... - - - Delete Entry(s)… - Supprimer l’entrée…Supprimer les entrées…Supprimer les entrées… - - - Relying Party - Tiers de confiance - - - Show expired entries - Afficher les entrées expirées - - - (Expired) - (expirée) - - - Export Confirmation - Confirmation de l’exportation - - - The passkey file will be vulnerable to theft and unauthorized use, if left unsecured. Are you sure you want to continue? - Le fichier de clé d'accès sera exposé au vol où à une utilisation non autorisée s'il n'est pas sécurisé. Êtes-vous sûr·e de vouloir continuer ? - - - Please wait, list of entries with passkeys is being updated… - Veuillez patienter pendant la mise à jour de la liste des entrées avec clé d'accès… - - - No entries with passkeys. - Aucun entrée avec clé d'accès. - ReportsWidgetStatistics Hover over lines with error icons for further information. - Survolez les lignes affichant une icône d’erreur pour plus de précisons. + Survolez les lignes affichant une icône d’erreur pour plus d’informations. Name @@ -9670,11 +8275,11 @@ Cette option est obsolète, utilisez plutôt --set-key-file. yes - oui + Oui no - non + Non The database was modified, but the changes have not yet been saved to disk. @@ -9694,7 +8299,7 @@ Cette option est obsolète, utilisez plutôt --set-key-file. The database contains entries that have expired. - La base de données comprend des données expirées. + La base de données contient des données expirées Unique passwords @@ -9702,7 +8307,7 @@ Cette option est obsolète, utilisez plutôt --set-key-file. Non-unique passwords - Mots de passe non uniques + Mots de passe non-uniques More than 10% of passwords are reused. Use unique passwords when possible. @@ -9710,7 +8315,7 @@ Cette option est obsolète, utilisez plutôt --set-key-file. Maximum password reuse - Maximum de réutilisations des mots de passe + Nombre maximal de réutilisation de mot de passe Some passwords are used more than three times. Use unique passwords when possible. @@ -9722,7 +8327,7 @@ Cette option est obsolète, utilisez plutôt --set-key-file. Recommended minimum password length is at least 8 characters. - Il est recommandé qu’un mot de passe comporte au moins huit caractères + La longueur minimale recommandée pour un mot de passe est au moins 8 caractères. Number of weak passwords @@ -9730,7 +8335,7 @@ Cette option est obsolète, utilisez plutôt --set-key-file. Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. - Il est recommandé d’utiliser des mots de passe longs et aléatoires dont le niveau de robustesse est « bon » ou « excellent ». + Il est recommandé d’utiliser des mots de passe longs et aléatoires ayant une qualité de « bonne » à « excellente ». Entries excluded from reports @@ -9738,7 +8343,7 @@ Cette option est obsolète, utilisez plutôt --set-key-file. Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. - Exclure des entrées des rapports, car elles ont par exemple un mot de passe plutôt mauvais, n’est pas un problème en soi, mais vous devriez les surveiller. + Exclure une entrée des rapports, par exemple parce qu'elle dispose d'un mot de passe faible, n'est pas en soi un problème, mais nécessite toutefois une surveillance particulière. Average password length @@ -9750,30 +8355,30 @@ Cette option est obsolète, utilisez plutôt --set-key-file. Average password length is less than ten characters. Longer passwords provide more security. - La longueur moyenne des mots de passe est inférieure à dix caractères. Des mots de passe plus longs offrent une meilleure sécurité. + La longueur moyenne des mots de passe est de moins de 10 caractères. Des mots de passe plus longs offrent une meilleure sécurité. SSHAgent Agent connection failed. - Échec de connexion à l’agent. + Connexion à l’agent impossible. Agent protocol error. - Erreur de protocole de l’agent + Erreur de protocole avec l’agent No agent running, cannot add identity. - Aucun agent n’est en cours d’exécution, il est impossible d’ajouter l’identité. + Aucun agent en cours d’exécution, impossible d’ajouter l’identité. Key identity ownership conflict. Refusing to add. - Conflit de propriété de l’identité de clé. L’ajout a été refusé. + Conflit d'identité de clé. L'ajout a été refusé. Agent refused this identity. Possible reasons include: - L’agent a refusé cette identité. Raisons possibles, entre autres : + L’agent a refusé cette identité. Les raisons possibles sont : The key has already been added. @@ -9793,19 +8398,11 @@ Cette option est obsolète, utilisez plutôt --set-key-file. No agent running, cannot remove identity. - Aucun agent n’est en cours d’exécution, il est impossible de supprimer l’identité. + Aucun agent en cours d’exécution, impossible de supprimer l’identité. No agent running, cannot list identities. - Aucun agent n’est en cours d’exécution, il est impossible de lister les identités. - - - Failed to remove all SSH identities from agent. - Impossible de supprimer toutes les identités SSH de l’agent. - - - All SSH identities removed from agent. - Toutes les identités SSH sont supprimées de l'agent. + Aucun agent en cours d'exécution, impossible d'énumérer les identités. @@ -9816,11 +8413,11 @@ Cette option est obsolète, utilisez plutôt --set-key-file. Search terms are as follows: [modifiers][field:]["]term["] - Les termes d’interrogation sont les suivants : [modificateurs][champ:]["]terme["] + Les termes de recherche sont construits comme suit : [modificateurs][champ:]["]terme["] Every search term must match (ie, logical AND) - Tous les termes d’interrogation doivent correspondre (c.-à-d. : ET logique) + Tous les termes doivent correspondre (ET logique) Modifiers @@ -9836,7 +8433,7 @@ Cette option est obsolète, utilisez plutôt --set-key-file. use regex in term - utiliser les expressions rationnelles dans le terme + utiliser les expressions régulières dans le terminal Fields @@ -9844,7 +8441,7 @@ Cette option est obsolète, utilisez plutôt --set-key-file. Term Wildcards - Caractère de remplacement des termes + Caractères spéciaux match anything @@ -9852,7 +8449,7 @@ Cette option est obsolète, utilisez plutôt --set-key-file. match one - correspond à un caractère + correspond à un seul caractère logical OR @@ -9867,16 +8464,12 @@ Cette option est obsolète, utilisez plutôt --set-key-file. SearchWidget Search - Chercher + Recherche Search Help Chercher dans l’aide - - Save Search - Sauvegarder recherche - Search (%1)… Search placeholder text, %1 is the keyboard shortcut @@ -9888,7 +8481,11 @@ Cette option est obsolète, utilisez plutôt --set-key-file. Limit search to selected group - Limiter la recherche au groupe sélectionné + Limite la recherche au groupe sélectionné + + + Save Search + Sauvegarder recherche @@ -9933,7 +8530,7 @@ Cette option est obsolète, utilisez plutôt --set-key-file. Enable KeepassXC Freedesktop.org Secret Service integration - Activer l’intégration de KeePassXC à « Secret Service » de Freedesktop.org + Activer l’intégration de KeePassXC à Freedesktop.org Secret Service General @@ -9951,17 +8548,41 @@ Cette option est obsolète, utilisez plutôt --set-key-file. Confirm when passwords are retrieved by clients Confirmer lorsque les mots de passe sont récupérés par des hôtes + + <html><head/><body><p><span style=" + font-family:'-apple-system','BlinkMacSystemFont','Segoe UI','Helvetica','Arial','sans-serif','Apple Color + Emoji','Segoe UI Emoji'; font-size:14px; color:#24292e; background-color:#ffffff;">This setting does + not override disabling recycle bin prompts</span></p></body></html> + + <html><head/><body><p><span style=" + font-family:'-apple-system','BlinkMacSystemFont','Segoe UI','Helvetica','Arial','sans-serif','Apple Color + Emoji','Segoe UI Emoji'; font-size:14px; color:#24292e; background-color:#ffffff;">Ce paramètre + n'outrepasse pas la désactivation des invites de la corbeille</span></p></body></html> + + Confirm when clients request entry deletion Confirmer lorsque des hôtes demandent la suppression d'une entrée + + <html><head/><body><p>This improves compatibility with certain applications + which search for password without unlocking the database first.</p><p>But enabling this may also + crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a + different value set in applications.)</p></body></html> + + <html><head/><body><p>Ceci améliore la compatibilité avec certaines applications + recherchant un mot de passe sans d'abord déverrouiller la base de données.</p><p>Toutefois, son activation peut entraîner + un plantage du client si la base de données ne peut être déverrouillée dans un temps imparti (généralement 25 s, mais la valeur + peut différer selon celle définie dans les applications.)</p></body></html> + + Prompt to unlock database before searching Inviter à déverrouiller la base de données avant de rechercher Exposed database groups: - Groupes de base de données visibles : + Groupes de la base de données visibles : Authorization @@ -9969,24 +8590,15 @@ Cette option est obsolète, utilisez plutôt --set-key-file. These applications are currently connected: - Ces applications sont connectées actuellement : + Ces applications sont actuellement connectées : <b>Warning:</b> - <b>Avertissement:</b> + <b>Avertissement :</b> Save current changes to activate the plugin and enable editing of this section. - Enregistrer les changements actuels pour activer l’extension et permettre la modification de cette section. - - - <html><head/><body><p>This setting does not override disabling recycle bin prompts </p></body></html> - <html><head/><body><p>Ce paramètre ne se substitue pas à la désactivation des confirmations de suppression vers la corbeille. </p></body></html> - - - <html><head/><body><p>This improves compatibility with certain applications which search for password without unlocking the database first.</p><p>But enabling this may also crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a different value set in applications.) </p></body></html> - <html><head/><body><p>Permet d'améliorer la compatibilité avec certaines applications recherchant le mot de passe sans avoir à déverrouiller la base de données. -</p><p>L'activation de cette fonction peut toutefois faire planter la partie client si la base de données ne peut être déverrouillée en temps imparti (habituellement 25 secondes, mais peut varier selon les applications).</p></body></html> + Enregistrer les modifications actuelles pour activer le greffon et activer l'édition de cette partie. @@ -9997,23 +8609,23 @@ Cette option est obsolète, utilisez plutôt --set-key-file. Allow KeeShare imports - Permettre les importations KeeShare + Autoriser les importations KeeShare Allow import - Permettre l’importation + Autoriser l’importation Allow KeeShare exports - Permettre les exportations KeeShare + Autoriser les exportations KeeShare Allow export - Permettre l’exportation + Autoriser l’exportation Only show warnings and errors - N’afficher que les avertissements et erreurs + Afficher uniquement les avertissements et erreurs Own certificate @@ -10025,7 +8637,7 @@ Cette option est obsolète, utilisez plutôt --set-key-file. Generate new certificate - Générer un nouveau certificat + Régénérer un nouveau certificat Generate @@ -10095,14 +8707,6 @@ Cette option est obsolète, utilisez plutôt --set-key-file. TagModel - - Clear Search - Effacer la recherche - - - All Entries - Toutes les entrées - Expired Expirés @@ -10111,6 +8715,14 @@ Cette option est obsolète, utilisez plutôt --set-key-file. Weak Passwords Mots de passe faibles + + All Entries + Toutes les entrées + + + Clear Search + Effacer la recherche + TagView @@ -10135,22 +8747,22 @@ Cette option est obsolète, utilisez plutôt --set-key-file. TotpDialog Timed Password - Mot de passe temporisé + Mot de passe planifié Copy - Copier + Copie Expires in <b>%n</b> second(s) - Expire dans <b>%n</b> secondeExpire dans <b>%n</b> secondesExpire dans <b>%n</b> secondes + Arrive à expiration dans <b>%n</b> secondeArrive à expiration dans <b>%n</b> secondesArrive à expiration dans <b>%n</b> secondes TotpExportSettingsDialog Copy - Copier + Copie NOTE: These TOTP settings are custom and may not work with other authenticators. @@ -10159,7 +8771,7 @@ Cette option est obsolète, utilisez plutôt --set-key-file. There was an error creating the QR code. - Une erreur est survenue lors de la création du QR code. + Une erreur est survenue lors de la création du QR Code. Closing in %1 seconds. @@ -10170,7 +8782,7 @@ Cette option est obsolète, utilisez plutôt --set-key-file. TotpSetupDialog Setup TOTP - Configurer TOTP + Configuration TOTP Secret Key: @@ -10178,7 +8790,7 @@ Cette option est obsolète, utilisez plutôt --set-key-file. Secret key must be in Base32 format - La clé secrète doit être au format Base32 + La clé secrète doit être au format Base32 Secret key field @@ -10206,7 +8818,7 @@ Cette option est obsolète, utilisez plutôt --set-key-file. Time step: - Intervalle : + Période de temps : Time step field @@ -10227,12 +8839,12 @@ Cette option est obsolète, utilisez plutôt --set-key-file. Invalid TOTP Secret - Le secret TOTP est invalide + Secret TOTP invalide You have entered an invalid secret key. The key must be in Base32 format. Example: JBSWY3DPEHPK3PXP - Vous avez saisi une clé secrète invalide. La clé doit être au format Base32. + Vous avez introduit une clé secrète invalide. La clé doit être au format Base32. Exemple : JBSWY3DPEHPK3PXP @@ -10241,14 +8853,14 @@ Exemple : JBSWY3DPEHPK3PXP Are you sure you want to delete TOTP settings for this entry? - Voulez-vous vraiment supprimer les paramètres TOTP pour cette entrée ? + Souhaitez-vous vraiment supprimer les paramètres TOTP pour cette entrée ? URLEdit Invalid URL - L’URL est invalide + URL invalide @@ -10288,6 +8900,26 @@ Exemple : JBSWY3DPEHPK3PXP Start storing your passwords securely in a KeePassXC database Commencez à enregistrer vos mots de passe en toute sécurité dans une base de données KeePassXC + + Create new database + Créer une nouvelle base de données + + + Open existing database + Ouvrir une base de données existante + + + Import from KeePass 1 + Importer de KeePass 1 + + + Import from 1Password + Importer de 1Password + + + Import from CSV + Importer d’un fichier CSV + Recent databases Bases de données récentes @@ -10300,18 +8932,6 @@ Exemple : JBSWY3DPEHPK3PXP Welcome to KeePassXC %1 Bienvenue sur KeePassXC %1 - - Create Database - Créer une base de données - - - Open Database - Ouvrir une base de données - - - Import File - Importer un fichier - WinUtils @@ -10328,8 +8948,31 @@ Exemple : JBSWY3DPEHPK3PXP Impossible d’assigner le raccourci global + + WindowsHello + + Failed to init KeePassXC crypto. + Échec d’initialisation de la cryptographie de KeePassXC + + + Failed to encrypt key data. + Échec de chiffrement des données de la clé. + + + Failed to get Windows Hello credential. + Échec d’obtention des identifiants Windows Hello. + + + Failed to decrypt key data. + Échec de déchiffrement des données de la clé. + + YubiKey + + %1 No interface, slot %2 + %1 Aucune interface, emplacement %2 + General: Général : @@ -10341,13 +8984,21 @@ Exemple : JBSWY3DPEHPK3PXP YubiKeyEditWidget + + Refresh hardware tokens + Actualiser les jetons matériels + + + Refresh + Actualiser + Hardware key slot selection Sélection de l’emplacement de la clé matérielle Could not find any hardware keys! - Impossible de trouver une clé matérielle + Impossible de trouver une clé matérielle ! Selected hardware key slot does not support challenge-response! @@ -10373,33 +9024,40 @@ Exemple : JBSWY3DPEHPK3PXP Challenge-Response set, click to change or remove Question-réponse définie, cliquez pour la modifier ou la supprimer + + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + <p>Si vous disposez d'une <a href="https://www.yubico.com/">YubiKey</a> ou <a href="https://onlykey.io">OnlyKey</a>, vous pouvez l’utiliser afin d'améliorer la sécurité.</p><p>La clé nécessite un emplacement défini comme <a href="https://www.yubico.com/products/services-software/challenge-response/">Question-réponse HMAC-SHA1</a>.</p> + Detecting hardware keys… - Détection des clés matérielles… + Détection des clés matérielles... No hardware keys detected - Aucune clé matérielle n’a été détectée + Aucune clé matérielle détectée + + + YubiKeyInterface - Refresh hardware keys - Actualiser les clés matérielles - - - <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed with <a href="https://keepassxc.org/docs/#faq-yubikey-howto">Challenge-Response</a>.</p> - <p>Si vous possédez une <a href="https://www.yubico.com/">YubiKey</a> ou <a href="https://onlykey.io">OnlyKey</a>, vous pouvez l'utiliser pour renforcer la sécurité.</p><p>La clé nécessite que l'un de ses emplacements soit programmé avec <a href="https://keepassxc.org/docs/#faq-yubikey-howto">défi'réponse</a>.</p> - - - Hardware keys found, but no slots are configured - Des clés matérielles ont été trouvées, mais aucun emplacement n'est configuré + %1 Invalid slot specified - %2 + %1 emplacement(s) spécifié(s) invalide(s) - %2 YubiKeyInterfacePCSC + + (PCSC) %1 [%2] Challenge-Response - Slot %3 + (PCSC) %1 [%2] Question-réponse - Emplacement %3 + The YubiKey PCSC interface has not been initialized. L'interface PCSC YubiKey n'a pu être initialisée. + + Hardware key is currently in use. + La clé matérielle est en cours d'utilisation. + Could not find or access hardware key with serial number %1. Please present it to continue. Impossible de trouver ou d'accéder à la clé matérielle ayant le n° de série %1. Veuillez l'insérer pour continuer. @@ -10416,21 +9074,6 @@ Exemple : JBSWY3DPEHPK3PXP Failed to complete a challenge-response, the PCSC error code was: %1 Échec lors du question-réponse, erreur PCSC : %1 - - (NFC) %1 [%2] - Slot %3, %4 - YubiKey display fields - (NFC) %1 [%2] - Emplacement %3, %4 - - - Press - USB Challenge-Response Key interaction request - Pressez - - - Passive - USB Challenge-Response Key no interaction required - Passif - YubiKeyInterfaceUSB @@ -10438,6 +9081,14 @@ Exemple : JBSWY3DPEHPK3PXP Unknown Inconnu + + (USB) %1 [%2] Configured Slot - %3 + (USB) %1 [%2] Emplacement configuré - %3 + + + (USB) %1 [%2] Challenge-Response - Slot %3 - %4 + (USB) %1 [%2] Question-réponse - Emplacement %3 - %4 + Press USB Challenge-Response Key interaction request @@ -10452,6 +9103,10 @@ Exemple : JBSWY3DPEHPK3PXP The YubiKey USB interface has not been initialized. L'interface USB YubiKey n'a pu être initialisée. + + Hardware key is currently in use. + La clé matérielle est en cours d'utilisation. + Could not find hardware key with serial number %1. Please plug it in to continue. Impossible de trouver la clé matérielle dont le numéro de série est %1. Veuillez la connecter afin de poursuivre. @@ -10468,15 +9123,5 @@ Exemple : JBSWY3DPEHPK3PXP Failed to complete a challenge-response, the specific error was: %1 Échec de question-réponse, l’erreur particulière était : %1 - - %1 [%2] - Slot %3 - YubiKey NEO display fields - %1 [%2] - Emplacement %3 - - - %1 [%2] - Slot %3, %4 - YubiKey display fields - %1 [%2] - Emplacement %3, %4 - \ No newline at end of file diff --git a/share/translations/keepassxc_fr_CA.ts b/share/translations/keepassxc_fr_CA.ts index 4529da1aa..e07d94231 100644 --- a/share/translations/keepassxc_fr_CA.ts +++ b/share/translations/keepassxc_fr_CA.ts @@ -80,10 +80,6 @@ Details Détails - - Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. - Votre décision sera mémorisée pour la durée de fonctionnement du client qui effectue la demande et de KeePassXC. - Remember Mémoriser @@ -92,6 +88,10 @@ Allow Selected Permettre les éléments sélectionnés + + Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. + Votre décision sera mémorisée pour la durée de fonctionnement du client qui effectue la demande et de KeePassXC. + Deny All && Future Tout refuser et dans le futur @@ -122,10 +122,6 @@ Use OpenSSH Utiliser OpenSSH - - Use both agents - Utiliser les deux agents - SSH_AUTH_SOCK override Valeur de remplacement SSH_AUTH_SOCK @@ -154,6 +150,10 @@ SSH Agent connection is working! La connexion de l’agent SSH fonctionne. + + Use both agents + Utiliser les deux agents + ApplicationSettingsWidget @@ -169,10 +169,6 @@ Security Sécurité - - This setting cannot be enabled when minimize on unlock is enabled. - Ce paramètre ne peut pas être activé lorsque la fonction de minimisation de la fenêtre au déverrouillage est activée. - Access error for config file %1 Erreur d’accès pour le fichier de configuration %1 @@ -217,49 +213,21 @@ You must restart the application to set the new language. Would you like to restart now? Pour appliquer la nouvelle langue, vous devez redémarrer l’application. Voulez-vous la démarrer maintenant? + + Reset Settings? + Réinitialiser les paramètres? + + + Are you sure you want to reset all general and security settings to default? + Voulez-vous vraiment réinitialiser tous les paramètres généraux et de sécurité à leur valeur par défaut? + Select backup storage directory Sélectionner le dossier de sauvegarde - Confirm Reset - - - - Are you sure you want to reset all settings to default? - - - - Import KeePassXC Settings - - - - Failed to import settings from %1, not a valid settings file. - - - - Export KeePassXC Settings - - - - Small - - - - Normal - - - - Medium - - - - Large - - - - Custom - + This setting cannot be enabled when minimize on unlock is enabled. + Ce paramètre ne peut pas être activé lorsque la fonction de minimisation de la fenêtre au déverrouillage est activée. @@ -292,10 +260,6 @@ Remember previously used databases Mémoriser les bases de données utilisées précédemment - - recent files - fichiers récents - Load previously open databases on startup Lors du démarrage, charger les bases de données ouvertes précédemment @@ -312,6 +276,25 @@ Include beta releases when checking for updates Inclure les versions bêta lors de la vérification de la présence de mises à jour + + On database unlock, show entries that + Lors du déverrouillage d’une base de données, montrer les entrées qui + + + have expired + On database unlock, show entries that... + ont expiré + + + days + On database unlock, show entries that will expire within %1 days + jours + + + will expire within + On database unlock, show entries that... + expirera dans + File Management Gestion des fichiers @@ -336,9 +319,21 @@ Backup database file before saving Sauvegarder le fichier de la base de données avant d’enregistrer + + Backup destination + Destination de sauvegarde + + + Specifies the database backup file location. Occurrences of "{DB_FILENAME}" are replaced with the filename of the saved database without extension. {TIME:<format>} is replaced with the backup time, see https://doc.qt.io/qt-5/qdatetime.html#toString. <format> defaults to format string "dd_MM_yyyy_hh-mm-ss". + Spécifie l’emplacement du fichier de sauvegarde de la base de données. Les occurrences de « {DB_FILENAME} » sont remplacées par le nom de fichier de la base de données sauvegardée sans extension. {TIME:<format>} est remplacé par l’heure de sauvegarde (consulter https://doc.qt.io/qt-5/qdatetime.html#toString). Par défaut, <format>utilise le format « dd_MM_yyyy_hh-mm-ss ». + {DB_FILENAME}.old.kdbx - {DB_FILENAME}.ancienne.kdbx + {DB_FILENAME}.old.kdbx + + + Choose... + Choisir… Use alternative saving method (may solve problems with Dropbox, Google Drive, GVFS, etc.) @@ -417,10 +412,6 @@ Toolbar button style: Style des boutons de la barre d’outils : - - Show passwords in color - Afficher les mots de passe en couleur - Use monospaced font for notes Utiliser une police à espacement constant pour les notes @@ -507,69 +498,12 @@ Mémoriser la dernière entrée saisie pendant : - On database unlock, show entries that will expire within - + recent files + fichiers récents - On database unlock, show entries that will expire within - - - - days - number of days warning for password expiration - jours - - - Destination format: - - - - <html><head/><body><p><span style=" font-weight:600;">{DB_FILENAME}</span> is replaced with the filename of the saved database without extension</p><p><span style=" font-weight:600;">{TIME:&lt;format&gt;}</span> is replaced with the specified time format (default: dd_MM_yyyy_hh-mm-ss)</p><p>See the User Guide for more details</p></body></html> - - - - Choose folder... - - - - Show confirmation before moving entries to recycle bin - - - - Copy data on double clicking field in entry view - - - - Show toolbar - - - - Show the menu bar by pressing the Alt key - - - - Show menubar - - - - Import settings… - - - - Export settings… - - - - Open browser on double clicking URL field in entry view - - - - Font size: - - - - Font size selection - + Show passwords in color + Afficher les mots de passe en couleur @@ -624,6 +558,10 @@ Lock databases after minimizing the window Verrouiller les bases de données après avoir réduit la fenêtre + + Require password repeat when it is visible + Exiger de répéter le mot de passe s’il est visible + Hide passwords when editing them Cacher les mots de passe lors de leur modification @@ -636,6 +574,18 @@ Hide passwords in the entry preview panel Cacher les mots de passe dans le panneau de prévisualisation des entrées + + Hide entry notes by default + Par défaut, cacher les notes des entrées + + + Move entries to recycle bin without confirmation + Déplacer les entrées vers la corbeille sans confirmation + + + Enable double click to copy the username/password entry columns + Activer le double-clic pour copier le nom d'utilisateur/mot de passe des colonnes d'entrées + Privacy Confidentialité @@ -648,18 +598,6 @@ Hide TOTP in the entry preview panel - - Lock databases when switching user - - - - Lock Options - - - - Hide notes in the entry preview panel - - AutoType @@ -704,13 +642,27 @@ Un pause très longue a été détectée. Le maximum est %1 : %2 - Entry does not have attribute for PICKCHARS: %1 - L'entrée n'a pas d'attribut pour PICKCHARS : %1 + Invalid conversion type: %1 + Type de conversion invalide : %1 + + + Invalid conversion syntax: %1 + Syntaxe de conversion invalide : %1 + + + Invalid regular expression syntax %1 +%2 + Syntaxe d'expression régulière invalide %1 +%2 Invalid placeholder: %1 Espace réservé invalide : %1 + + Entry does not have attribute for PICKCHARS: %1 + L'entrée n'a pas d'attribut pour PICKCHARS : %1 + AutoTypeAssociationsModel @@ -752,6 +704,10 @@ AutoTypePlatformX11 + + Trying to send invalid keysym. + Tentative d'envoi d'un keysym invalide. + Sequence aborted: Caps Lock is on Séquence interrompue: le verrou des majuscule est activé @@ -762,11 +718,7 @@ Unable to get valid keycode for key: - Impossible d'obtenir un code d'identification valide pour la clé : - - - Trying to send invalid keyboard symbol. - + Impossible d'obtenir le code d'identification valide pour la clé : @@ -791,7 +743,8 @@ Ctrl+F - Activer ou désactiver la recherche dans la base de données<br/> Ctrl+1 - Saisir le nom d’utilisateur<br/> Ctrl+2 - Saisir le mot de passe<br/> Ctrl+3 - Saisir le TOTP<br/> -Ctrl+4 - Utiliser le clavier virtuel (Windows seulement)</p> +Ctrl+4 - Utiliser le clavier virtuel (Windows seulement)</p> + Search all open databases @@ -872,13 +825,13 @@ Ctrl+4 - Utiliser le clavier virtuel (Windows seulement)</p> Disable for this site Désactiver pour ce site - - Undo - - BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + KeePassXC-Browser Enregistrer l’entrée + Ok Valider @@ -893,73 +846,13 @@ Please select the correct database for saving credentials. Plusieurs bases de données sont ouvertes. Veuillez sélectionner la base de données souhaitée pour enregistrer les identifiants. - - KeePassXC - Select Database - - - - - BrowserPasskeysConfirmationDialog - - Cancel - Annuler - - - Update - - - - Authenticate - - - - Register new - - - - Register - - - - Timeout in <b>%n</b> seconds... - - - - Relying Party: %1 - - - - Username: %1 - - - - KeePassXC - Passkey credentials - - - - Add to existing entry - - - - Existing passkey found. -Do you want to register a new passkey for: - - - - Select the existing passkey and press Update to replace it. - - - - Authenticate passkey credentials for: - - - - Do you want to register a passkey for: - - BrowserService + + KeePassXC: Create a new group + KeePassXC : Créer un nouveau groupe + A request for creating a new group "%1" has been received. Do you want to create this group? @@ -968,6 +861,10 @@ Do you want to create this group? Voulez-vous créer ce groupe ? + + KeePassXC: New key association request + KeePassXC : Nouvelle demande d’association de clé + You have received an association request for the following database: %1 @@ -984,16 +881,28 @@ chrome-laptop Save and allow access Enregistrer et permettre l’accès + + KeePassXC: Overwrite existing key? + KeePassXC : Remplacer la clé existante? + A shared encryption key with the name "%1" already exists. Do you want to overwrite it? Une clé de chiffrement partagée nommée « %1 » existe déjà. Voulez-vous la remplacer? + + KeePassXC: Update Entry + KeePassXC : Mettre l’entrée à jour + Do you want to update the information in %1 - %2? Voulez-vous mettre à jour les renseignements dans %1 - %2 ? + + KeePassXC: Delete entry + KeePassXC: Supprimer l'entrée + A request for deleting entry "%1" has been received. Do you want to delete the entry? @@ -1003,57 +912,50 @@ Voulez-vous la supprimer ? - %1 (Passkey) - + Converting attributes to custom data… + Conversion des attributs en données personnalisées… - KeePassXC - Create a new group - + Abort + Abandonner - Disable - Désactiver + KeePassXC: Converted KeePassHTTP attributes + KeePassXC : Attributs KeePassHTTP convertis - KeePassXC - Overwrite existing key? - + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + Les attributs de %1 entrée(s) ont été convertis avec succès. +%2 clés ont été déplacées vers les données personnalisées. + + + 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.%n clés ont été déplacées avec succès vers les données personnalisées. - KeePassXC - Update Entry - + KeePassXC: No entry with KeePassHTTP attributes found! + KeePassXC : Aucune entrée avec des attributs KeePassHTTP n’a été trouvée - KeePassXC - Delete entry - + The active database does not contain an entry with KeePassHTTP attributes. + La base de données active ne comprend aucune entrée avec des attributs KeePassHTTP. - KeePassXC - New key association request - + Don't show this warning again + Ne plus afficher cet avertissement - Passkey - + KeePassXC: Legacy browser integration settings detected + KeePassXC : Des paramètres hérités d’intégration aux navigateurs ont été détectés - KeePassXC - Passkey credentials - - - - Register a new passkey to this entry: - - - - KeePassXC - Update passkey - - - - Entry already has a passkey. -Do you want to overwrite the passkey in %1 - %2? - - - - Register - + 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? + Vos paramètres KeePassXC-Browser doivent être intégrés aux paramètres de la base de données. +Cela est nécessaire pour conserver les connexions actuelles de votre navigateur. +Voulez-vous migrer vos paramètres maintenant ? @@ -1074,6 +976,10 @@ Do you want to overwrite the passkey in %1 - %2? General Général + + Browsers installed as snaps are currently not supported. + Les navigateurs installés en tant que snap ne sont pas pris en charge actuellement. + Enable integration for these browsers: Activer l’intégration pour ces navigateurs : @@ -1245,6 +1151,26 @@ Do you want to overwrite the passkey in %1 - %2? Custom extension ID ID d’extension personnalisé + + Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 + En raison du bac à sable de Snap, vous devez exécuter un script afin d’activer l’intégration aux navigateurs.<br />Vous pouvez obtenir ce script sur %1 + + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 + KeePassXC-Browser est nécessaire pour que l’intégration aux navigateurs fonctionne. <br />Téléchargez-la pour %1, %2 et %3. %4 + + + Please see special instructions for browser extension use below + Veuillez consulter ci-dessous les instructions spéciales de l’extension pour navigateurs + + + <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. + <b>Erreur :</b> L’emplacement de mandataire personnalisé est introuvable. <br/>L’intégration aux navigateurs NE FONCTIONNERA PAS sans l’application mandataire. + + + <b>Warning:</b> The following options can be dangerous! + <b>Avertissement:</b> Les options suivantes peuvent être dangereuses + Executable Files Fichiers exécutables @@ -1261,46 +1187,6 @@ Do you want to overwrite the passkey in %1 - %2? Select native messaging host folder location Sélectionner l’emplacement du dossier de l’hôte de messagerie native - - Allow keepassxc-proxy to list all entries with their title, URL and UUID in connected databases. - - - - Allow limited access to all entries in connected databases (ignores site access restrictions) - - - - <b>Warning:</b> Only adjust these settings if necessary. - - - - The custom proxy location does not exist. - - - - <b>Error:</b> The custom proxy location does not exist. Correct this in the advanced settings tab. - - - - <b>Error:</b> The installed proxy executable is missing from the expected location: %1<br/>Please set a custom proxy location in the advanced settings or reinstall the application. - - - - Allows using insecure http://localhost with passkeys for testing purposes. - - - - Allow using localhost with passkeys - - - - KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. - - - - Browsers installed using Snap or Flatpak are not supported with exception to Firefox installed using Snap. - - CloneDialog @@ -1323,6 +1209,14 @@ Do you want to overwrite the passkey in %1 - %2? CsvImportWidget + + Import CSV fields + Importer les champs CSV + + + filename + nom de fichier + size, rows, columns taille, lignes, colonnes @@ -1431,42 +1325,50 @@ Do you want to overwrite the passkey in %1 - %2? Column %1 Colonne %1 + + Imported from CSV file + Importé d’un fichier CSV + + + Original data: + Données originales : + + + Error(s) detected in CSV file! + Des erreurs ont été détectées dans le fichier CSV + [%n more message(s) skipped] [%n autre message a été ignoré][%n autres messages ont été ignorés][%n autres messages ont été ignorés] - Failed to parse CSV file: %1 - + Error + Erreur - Imported from CSV file: %1 - - - - No Title Selected - - - - No title column was selected, entries will be hard to tell apart. -Are you sure you want to import? - - - - Tags - + CSV import: writer has errors: +%1 + Importation CSV : le scripteur comporte des erreurs : +%1 CsvParserModel + + %1, %2, %3 + file info: bytes, rows, columns + %1, %2, %3 + + + %n byte(s) + %n octet%n octets%n octets + %n row(s) - CSV row count %n ligne%n lignes%n lignes %n column(s) - CSV column count %n colonne%n colonnes%n colonnes @@ -1519,14 +1421,6 @@ La base de données de sauvegarde est située sur %2 Recycle Bin Corbeille - - Database file read error. - - - - No file path was provided. - - DatabaseOpenDialog @@ -1549,10 +1443,30 @@ La base de données de sauvegarde est située sur %2 Password field Champ de mot de passe + + Enter Additional Credentials (if any): + Saisissez des identifiants supplémentaires (si définis) : + + + Key File: + Fichier clé : + + + Key file help + Aide fichier clé + Hardware key slot selection Sélection de l’emplacement de la clé matérielle + + Hardware Key: + Clé matérielle : + + + Hardware key help + Aide sur les clés matérielles + Key file to unlock the database Fichier clé pour déverrouiller la base de données @@ -1565,6 +1479,14 @@ La base de données de sauvegarde est située sur %2 Browse… Parcourir... + + Refresh hardware tokens + Actualiser les jetons matériels + + + Refresh + Actualiser + Unlock Database Déverrouiller la base de données @@ -1621,6 +1543,10 @@ Afin d’empêcher que cette erreur survienne, vous devez accéder à « Param Retry with empty password Réessayer sans mot de passe + + Failed to authenticate with Touch ID + Échec d’authentification avec Touch ID + Failed to open key file: %1 Échec d’ouverture du fichier clé : %1 @@ -1653,65 +1579,40 @@ Afin d’empêcher que cette erreur survienne, vous devez accéder à « Param Cannot use database file as key file Impossible d’utiliser une base de données comme fichier clé + + You cannot use your database file as a key file. +If you do not have a key file, please leave the field empty. + Vous ne pouvez pas utiliser la base de données actuelle comme fichier clé. +Si vous n’avez pas de fichier clé, laissez le champ vide. + + + Detecting hardware keys… + Détection des clés matérielles… + + + No hardware keys detected + Aucune clé matérielle n’a été détectée + + + Select hardware key… + Sélectionner une clé matérielle… + + + <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information…</p> + + + + <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +<p>Click for more information…</p> + + authenticate to access the database - Failed to authenticate with Quick Unlock: %1 - - - - Select Key File: - - - - <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!</p> - - - - Use hardware key [Serial: %1] - - - - Use hardware key - - - - Your database file is NOT a key file! -If you don't have a key file or don't know what that is, you don't have to select one. - - - - KeePassXC database file selected - - - - The file you selected looks like a database file. -A database file is NOT a key file! - -Are you sure you want to continue with this file?. - - - - No hardware keys found. - - - - Refresh Hardware Keys - - - - Click to add a key file. - - - - <a href="#" style="text-decoration: underline">I have a key file</a> - - - - Hardware keys found, but no slots are configured. - + Failed to authenticate with Windows Hello: %1 + Échec d’authentification avec Windows Hello: %1 @@ -1723,6 +1624,10 @@ Are you sure you want to continue with this file?. DatabaseSettingsDialog + + Advanced Settings + Paramètres avancés + General Général @@ -1747,22 +1652,6 @@ Are you sure you want to continue with this file?. Maintenance Maintenance - - KeeShare - KeeShare - - - Secret Service Integration - Intégration à « Secret Service » - - - Remote Sync - - - - Database Settings: %1 - - DatabaseSettingsWidgetBrowser @@ -1770,6 +1659,18 @@ Are you sure you want to continue with this file?. KeePassXC-Browser settings Paramètres de KeePassXC-Browser + + Convert KeePassHTTP data + + + + Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data + + + + Refresh database root group ID + Actualiser l’ID du groupe racine de la base de données + Disconnect all browsers Déconnecter tous les navigateurs @@ -1778,10 +1679,6 @@ Are you sure you want to continue with this file?. Forget all site-specific settings on entries Oublier tous les paramètres d’entrée propres aux sites - - Refresh database root group ID - Actualiser l’ID du groupe racine de la base de données - Stored keys Clés enregistrées @@ -1830,10 +1727,18 @@ This may prevent connection to the browser plugin. Voulez-vous vraiment déconnecter tous les navigateurs? Cela pourrait empêcher la connexion avec l’extension pour navigateurs. + + KeePassXC: No keys found + KeePassXC : Aucune clé n’a été trouvée + No shared encryption keys found in KeePassXC settings. Aucune clé de chiffrement partagée 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é supprimée avec succès des paramètres de KeePassXC.%n clés de chiffrement ont été supprimées avec succès des paramètres de KeePassXC.%n clés de chiffrement ont été supprimées avec succès des paramètres de KeePassXC. @@ -1851,14 +1756,31 @@ Permissions to access entries will be revoked. Abort Abandonner + + KeePassXC: Removed permissions + KeePassXC : Les autorisations ont été supprimées + Successfully removed permissions from %n entry(s). Les autorisations d’%n entrée ont été supprimées avec succès.Les autorisations de ’%n entrées ont été supprimées avec succès.Les autorisations de ’%n entrées ont été supprimé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 comprend aucune entrée avec des autorisations. + + Move KeePassHTTP attributes to custom data + Déplacer les attributs KeePassHTTP vers les données personnalisées + + + Do you really want to convert all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + + Refresh database ID Actualiser l’ID de la base de données @@ -1869,26 +1791,6 @@ This is only necessary if your database is a copy of another and the browser ext Voulez-vous vraiment actualiser l’ID de la base de données? Cela n’est nécessaire que si votre base de données est la copie d’une autre et que l’extension pour navigateurs ne peut pas se connecter. - - Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data - - - - No keys found - - - - Removed keys from database - - - - Removed permissions - - - - No entry with permissions found! - - DatabaseSettingsWidgetDatabaseKey @@ -1928,18 +1830,6 @@ Voulez-vous vraiment poursuivre sans mot de passe? Failed to change database credentials Échec de changement des identifiants de la base de données - - Weak password - Le mot de passe est faible - - - This is a weak password! For better protection of your secrets, you should choose a stronger password. - - - - The provided password does not meet the minimum quality requirement. - - DatabaseSettingsWidgetEncryption @@ -1947,6 +1837,14 @@ Voulez-vous vraiment poursuivre sans mot de passe? Decryption Time: Temps de déchiffrement : + + Change existing decryption time + Changer le temps de déchiffrement existant + + + Change + Changer + Decryption time in seconds Temps de déchiffrement en secondes @@ -2027,6 +1925,11 @@ Voulez-vous vraiment poursuivre sans mot de passe? KDBX 3 KDBX 3 + + unchanged + Database decryption time is unchanged + inchangé + Number of rounds too high Key transformation rounds @@ -2075,18 +1978,6 @@ If you keep this number, your database will not be protected from brute force at Threads for parallel execution (KDF settings) fil d’exécutionfils d’exécutionfils d’exécution - - Encryption Settings: - - - - Basic - - - - Advanced - Avancé - DatabaseSettingsWidgetFdoSecrets @@ -2208,70 +2099,6 @@ Entries deleted from the recycle bin are removed from the database. - - Autosave delay since last change - - - - Autosave delay - - - - Autosave delay since last change in minutes - - - - min - min - - - Autosave delay since last change checkbox - - - - Public Database Metadata - - - - Warning: the following settings are not encrypted. - - - - Display name: - - - - Publically visible display name used on the unlock dialog - - - - Database public display name - - - - Display color: - - - - Publically visible color used on the unlock dialog - - - - Database public display color chooser - - - - Clear - Effacer - - - Display icon: - - - - Select Database Icon - - DatabaseSettingsWidgetKeeShare @@ -2367,129 +2194,6 @@ removed from the database. Champ de description de la base de données - - DatabaseSettingsWidgetRemote - - Sync Commands - - - - Remove - Supprimer - - - Command Settings - - - - Name - Nom - - - Save - Enregistrer - - - Download - - - - Command: - - - - Download command field - - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - - - - Input: - - - - Download input field - - - - Upload - - - - Upload command field - - - - e.g.: "sftp user@hostname" or "scp {TEMP_DATABASE} user@hostname:DatabaseOnRemote.kdbx" - - - - Upload input field - - - - Name cannot be empty. - - - - Test - - - - Download command cannot be empty. - - - - Download failed with error: %1 - - - - Download finished, but file %1 could not be found. - - - - Download successful. - - - - Save Remote Settings - - - - You have unsaved changes. Do you want to save them? - - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - - - - e.g.: -put {TEMP_DATABASE} DatabaseOnRemote.kdbx -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - - - - Timeout: - - - - seconds - secondes - - DatabaseTabWidget @@ -2522,10 +2226,26 @@ C’est très certainement un bogue, veuillez le signaler aux développeurs.CSV file Fichier CSV + + Select CSV file + Sélectionner un fichier CSV + Merge database Fusionner la base de données + + KeePass 1 database + Base de données KeePass 1 + + + Open KeePass 1 database + Ouvrir une base de données KeePass 1 + + + Open OPVault + Ouvrir OPVault + Export database to CSV file Exporter la base de données vers un fichier CSV @@ -2538,6 +2258,28 @@ C’est très certainement un bogue, veuillez le signaler aux développeurs.Writing the HTML file failed. Échec d’écriture du fichier HTML. + + Export Confirmation + Confirmation de l’exportation + + + You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? + Vous êtes sur le point d’exporter votre base de données vers un fichier non chiffré. Vos mots de passe et renseignements délicats seront vulnérables. Voulez-vous vraiment poursuivre ? + + + New Database + Nouvelle base de données + + + %1 [New Database] + Database tab name modifier + %1 [nouvelle base de données] + + + %1 [Locked] + Database tab name modifier + %1 [verrouillé] + Export database to XML file Exporter la base de données dans un fichier XML @@ -2550,31 +2292,9 @@ C’est très certainement un bogue, veuillez le signaler aux développeurs.Writing the XML file failed L'écriture du fichier XML a échoué - - Export Confirmation - Confirmation de l’exportation - - - You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? - Vous êtes sur le point d’exporter votre base de données vers un fichier non chiffré. Vos mots de passe et renseignements délicats seront vulnérables. Voulez-vous vraiment poursuivre ? - - - %1 [Locked] - Database tab name modifier - %1 [verrouillé] - - - %1 [Temporary] - Database tab name modifier - - DatabaseWidget - - Searches and Tags - - Searching… Recherche... @@ -2623,10 +2343,6 @@ C’est très certainement un bogue, veuillez le signaler aux développeurs.Expired entries - - Entries expiring within %1 day(s) - - No current database. Aucune base de données actuelle. @@ -2651,18 +2367,6 @@ C’est très certainement un bogue, veuillez le signaler aux développeurs.No Results Il n’y a aucun résultat - - Save - Enregistrer - - - Enter a unique name or overwrite an existing search from the list: - - - - Save Search - - Lock Database? Verrouiller la base de données? @@ -2691,6 +2395,26 @@ Enregistrer les changements? File has changed Le fichier a été modifié + + The database file has changed. Do you want to load the changes? + Le fichier de la base de données a été modifié. Voulez-vous le recharger? + + + Merge Request + Demande de fusion + + + The database file has changed and you have unsaved changes. +Do you want to merge your changes? + Le fichier de la base de données a été modifié et vos changements ne sont pas enregistrés. +Voulez-vous fusionner vos changements? + + + Could not open the new database file while attempting to autoreload. +Error: %1 + Impossible d’ouvrir le nouveau fichier de base de données en tentant de la recharger automatiquement. +Erreur : % 1 + Disable safe saves? Désactiver les enregistrements sécurisés? @@ -2733,93 +2457,24 @@ Désactiver les enregistrements sécurisés et réessayer? Could not find database file: %1 Impossible de trouver le fichier de la base de données : %1 - - New Database - Nouvelle base de données + + Entries expiring within %1 day(s) + - %1 [New Database] - Database tab name modifier - %1 [nouvelle base de données] - - - Remote Sync did not contain any download or upload commands. + Searches and Tags - Remote sync '%1' completed successfully! + Enter a unique name or overwrite an existing search from the list: - Remote sync '%1' failed: %2 - + Save + Enregistrer - Error while saving database %1: %2 - - - - Downloading... - Téléchargement… - - - Uploading... - - - - Syncing... - - - - Remove passkey from entry - - - - Do you want to remove the passkey from this entry? - - - - The database file "%1" was modified externally - - - - Do you want to load the changes? - - - - Reload database - - - - Reloading database… - - - - Reload canceled - - - - Reload successful - - - - Reload pending user action… - - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes<br>Ignore the changes on disk until save<br>Discard unsaved changes - - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes then save<br>Overwrite the changes on disk<br>Discard unsaved changes - - - - Database file overwritten. - - - - Database file on disk cannot be unlocked with current credentials.<br>Enter new credentials and/or present hardware key to continue. + Save Search @@ -2873,6 +2528,10 @@ Désactiver les enregistrements sécurisés et réessayer? n/a s.o. + + (encrypted) + (chiffrée) + Select private key Sélectionner un fichier clé @@ -2955,10 +2614,6 @@ Would you like to correct it? Hide Cacher - - %n hour(s) - %n heure%n heures%n heures - %n week(s) %n semaine%n semaine(s)%n semaine(s) @@ -2971,9 +2626,9 @@ Would you like to correct it? %n year(s) % an%n an(s)%n an(s) - - Failed to decrypt SSH key, ensure password is correct. - + + %n hour(s) + %n heure%n heures%n heures @@ -3093,20 +2748,10 @@ Would you like to correct it? Add new window association Ajouter une nouvelle association de fenêtre - - + - Add item - + - Remove selected window association Supprimer l’association de fenêtre sélectionnée - - - - Remove item - - - Window title: Titre de la fenêtre : @@ -3131,9 +2776,23 @@ Would you like to correct it? Custom Auto-Type sequence for this window Séquence personnalisée de saisie automatique pour cette fenêtre + + + + Add item + + + + + - + Remove item + - + EditEntryWidgetBrowser + + These settings affect to the entry's behaviour with the browser extension. + Ces paramètres affectent le comportement de l’entrée avec l’extension pour navigateurs. + General Général @@ -3146,14 +2805,26 @@ Would you like to correct it? Skip Auto-Submit for this entry Ignorer l’envoi automatique pour cette entrée + + Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. + N’envoyer ce paramètre au navigateur que pour les boîtes de dialogue d’authentification HTTP. Si cette option est activée, cette entrée ne sera pas présentée par les formulaires d’authentification normaux comme possibilité de sélection. + Use this entry only with HTTP Basic Auth N’utiliser cette entrée qu’avec l’authentification HTTP Basic + + Do not send this setting to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. + Ne pas envoyer ce paramètre au navigateur pour les boîtes de dialogue d’authentification HTTP. Si cette option est activée, cette entrée ne sera pas présentée comme possibilité de sélection par les boîtes de dialogue d’authentification HTTP. + Do not use this entry with HTTP Basic Auth Ne pas utiliser cette entrée avec l’authentification HTTP Basic + + Additional URL's + URL supplémentaires + Add Ajouter @@ -3166,22 +2837,6 @@ Would you like to correct it? Edit Modifier - - These settings affect the entry's behaviour with the browser extension. - - - - Additional URLs - - - - Only send this entry to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. - - - - Do not send this entry to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. - - EditEntryWidgetHistory @@ -3347,6 +3002,19 @@ Would you like to correct it? Private key Clé privée + + External file + Fichier externe + + + Browser for key file + Rechercher un fichier clé + + + Browse… + Button for opening file dialog + Parcourir... + Attachment Fichier joint @@ -3363,23 +3031,6 @@ Would you like to correct it? Remove from agent Retirer de l’agent - - External file - Fichier externe - - - Browser for key file - Rechercher un fichier clé - - - Browse… - Button for opening file dialog - Parcourir... - - - Generate - Générer - Select attachment file Sélectionner une fichier joint @@ -3404,10 +3055,6 @@ Would you like to correct it? seconds secondes - - Clear agent - - EditGroupWidget @@ -3419,6 +3066,10 @@ Would you like to correct it? Icon Icône + + Browser Integration + Intégration aux navigateurs + Properties Propriétés @@ -3435,10 +3086,6 @@ Would you like to correct it? Group has unsaved changes - - Browser Integration - Intégration aux navigateurs - Enable Activer @@ -3498,14 +3145,6 @@ Would you like to correct it? Omit WWW subdomain from matching toggle for this and sub groups Ne pas utiliser l'authentification HTTP standard pour ce groupe et ses sous-groupes - - Restrict matching to given browser key: - - - - Restrict matching to given browser key toggle for this and sub groups - - EditGroupWidgetKeeShare @@ -3737,6 +3376,10 @@ Supported extensions are: %1. Unable to fetch favicon. Impossible de récupérer la favoricône + + You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security + Vous pouvez activer le service d’icônes de sites Web de DuckDuckGo dans Outils > Paramètres > Sécurité + Existing icon selected. L’icône existante a été sélectionnée. @@ -3769,10 +3412,6 @@ Supported extensions are: %1. The following icon(s) failed: Échec de l’icône suivante :Échec des icônes suivantes :Échec des icônes suivantes : - - You can enable the DuckDuckGo website icon service under Application Settings -> Security - - EditWidgetProperties @@ -3846,25 +3485,7 @@ This may cause the affected plugins to malfunction. Entry %1 - Clone - %1 – Cloner - - - Passkey - - - - Invalid conversion type: %1 - Type de conversion invalide : %1 - - - Invalid conversion syntax: %1 - Syntaxe de conversion invalide : %1 - - - Invalid regular expression syntax %1 -%2 - Syntaxe d'expression régulière invalide %1 -%2 + %1 – Cloné @@ -3874,21 +3495,6 @@ This may cause the affected plugins to malfunction. Impossible d’ouvrir le fichier "%1" - - EntryAttachmentsDialog - - Form - Formulaire - - - File name - - - - File contents... - - - EntryAttachmentsModel @@ -3926,6 +3532,14 @@ This may cause the affected plugins to malfunction. Remove Supprimer + + Rename selected attachment + + + + Rename + Renommer + Open selected attachment Ouvrir le fichier joint sélectionné @@ -4002,6 +3616,11 @@ This may cause the affected plugins to malfunction. Confirm Overwrite Attachment Confirmer l’écrasement du fichier joint + + Attachment "%1" already exists. +Would you like to overwrite the existing attachment? + + Confirm Attachment Confirmer le fichier joint @@ -4034,23 +3653,6 @@ Do you want to save the changes to your database? Error: %1 - - Attachment "%1" already exists. -Would you like to overwrite the existing attachment? - - - - New - - - - Preview - Aperçu - - - Failed to preview an attachment: Attachment not found - - EntryAttributesModel @@ -4075,7 +3677,7 @@ Would you like to overwrite the existing attachment? Difference - + Différence Size @@ -4103,7 +3705,7 @@ Would you like to overwrite the existing attachment? Custom Attributes - + Attributs personnalisés Icon @@ -4111,7 +3713,7 @@ Would you like to overwrite the existing attachment? Color - + Couleur Expiration @@ -4123,7 +3725,7 @@ Would you like to overwrite the existing attachment? Custom Data - + Données personnalisées Attachments @@ -4135,7 +3737,7 @@ Would you like to overwrite the existing attachment? Tags - + Étiquettes @@ -4207,7 +3809,7 @@ Would you like to overwrite the existing attachment? Password Strength - + Force du mot de passe Entry notes @@ -4245,14 +3847,6 @@ Would you like to overwrite the existing attachment? Has TOTP A un TOTP - - Background Color - - - - Group Path - - EntryPreviewWidget @@ -4273,8 +3867,8 @@ Would you like to overwrite the existing attachment? Mot de passe - URL - URL + Notes + Notes Expiration @@ -4282,7 +3876,7 @@ Would you like to overwrite the existing attachment? Tags - + Étiquettes Tags list @@ -4293,8 +3887,8 @@ Would you like to overwrite the existing attachment? Nom d’utilisateur - Notes - Notes + URL + URL Advanced @@ -4344,10 +3938,6 @@ Would you like to overwrite the existing attachment? Never Jamais - - Double click to copy value - - Enabled Activé @@ -4357,8 +3947,8 @@ Would you like to overwrite the existing attachment? Désactivé - Double click to copy to clipboard - + Double click to copy value + Double-cliquez pour copier la valeur @@ -4367,10 +3957,6 @@ Would you like to overwrite the existing attachment? Invalid URL L’URL est invalide - - Duplicate URL - - EntryView @@ -4386,20 +3972,16 @@ Would you like to overwrite the existing attachment? Reset to defaults Réinitialiser aux valeurs par défaut - - + %1 entry(s)... - - ExportDialog Export options - + Options d’exportation Sort entries by... - + Trier les entrées par... You are about to export your database to an unencrypted file. @@ -4421,7 +4003,7 @@ This will leave your passwords and sensitive information vulnerable! unknown - + inconnu Export database to HTML file @@ -4609,193 +4191,6 @@ Vous pouvez activer le service d’icônes de sites Web de DuckDuckGo dans la se Téléchargement des favicons (%1/%2)... - - ImportWizard - - Import Wizard - - - - - ImportWizardPageReview - - WizardPage - Page d’aide - - - Entry count: %1 - - - - Group - Groupe - - - Title - Titre - - - Username - Nom d’utilisateur - - - Password - Mot de passe - - - Url - - - - Could not load key file. - - - - Could not open remote database. Password or key file may be incorrect. - - - - - ImportWizardPageSelect - - Form - Formulaire - - - Import File Selection - - - - Password: - Mot de passe : - - - Key File: - Fichier clé : - - - Browse… - Parcourir... - - - Import Into: - - - - New Database - Nouvelle base de données - - - No unlocked databases available - - - - Existing Database: - - - - Import File: - - - - Comma Separated Values (.csv) - - - - 1Password Export (.1pux) - - - - 1Password Vault (.opvault) - - - - Bitwarden (.json) - - - - KeePass 1 Database (.kdb) - - - - Open OPVault - Ouvrir OPVault - - - Select import file - - - - All files - Tous les fichiers - - - Key files - Fichiers clés - - - Select key file - Sélectionner un fichier clé - - - Comma Separated Values - - - - 1Password Export - - - - Bitwarden JSON Export - - - - 1Password Vault - - - - KeePass1 Database - - - - Proton Pass (.json) - - - - Proton Pass JSON Export - - - - Temporary Database - - - - Command: - - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - - - - Input: - - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last commend `exit` has to be sent - - - - - Remote Database (.kdbx) - - - KMessageWidget @@ -5227,6 +4622,17 @@ Ligne %2, colonne %3 Échec d’ouverture de la clé privée + + KeePass1OpenWidget + + Import KeePass1 Database + Importer une base de données KeePass 1 + + + Unable to open the database. + Impossible d’ouvrir la base de données. + + KeePass1Reader @@ -5497,15 +4903,15 @@ Message : %2 Add Key File - + Ajouter un fichier de clé Change Key File - + Modifier le fichier de clé Remove Key File - + Supprimer le fichier clé Key File set, click to change or remove @@ -5583,6 +4989,10 @@ Voulez-vous vraiment poursuivre avec ce fichier? &Recent Databases Bases de données &récentes + + &Import + &Importer + &Export &Exporter @@ -5603,10 +5013,6 @@ Voulez-vous vraiment poursuivre avec ce fichier? TOTP TOTP - - Tags - - &Groups &Groupes @@ -5651,18 +5057,34 @@ Voulez-vous vraiment poursuivre avec ce fichier? &New Database… &Nouvelle base de données… + + Create a new database + Créer une nouvelle base de données + &Merge From Database… Fusio&nner à partir d’une base de données… + + Merge from another KDBX database + Fusionner d’une autre base de données KDBX + &New Entry… &Nouvelle entrée… + + Add a new entry + Ajouter une nouvelle entrée + &Edit Entry… &Modifier l’entrée… + + View or edit entry + Voir ou modifier l’entrée + &Delete Entry… &Supprimer l’entrée… @@ -5671,6 +5093,10 @@ Voulez-vous vraiment poursuivre avec ce fichier? &New Group… &Nouveau groupe… + + Add a new group + Ajouter un nouveau groupe + &Edit Group… &Modifier le groupe… @@ -5703,10 +5129,18 @@ Voulez-vous vraiment poursuivre avec ce fichier? Database &Reports… + + Statistics, health check, etc. + Statistiques, bilan de santé, etc. + &Database Settings… &Paramètres de la base de données… + + Database settings + Paramètres de la base de données + &Clone Entry… &Cloner l’entrée… @@ -5715,18 +5149,34 @@ Voulez-vous vraiment poursuivre avec ce fichier? Move u&p Déplacer vers le &haut + + Move entry one step up + Déplacer l’entrée d’un niveau vers le haut + Move do&wn Déplacer vers le &bas + + Move entry one step down + Déplacer l’entrée d’un niveau vers le bas + Copy &Username Copier le nom d’&utilisateur + + Copy username to clipboard + Copier le nom d’utilisateur dans le presse-papiers + Copy &Password Copier le mot de &passe + + Copy password to clipboard + Copier le mot de passe dans le presse-papiers + &Settings &Paramètres @@ -5760,13 +5210,21 @@ Voulez-vous vraiment poursuivre avec ce fichier? &Titre - Copy &URL - + Copy title to clipboard + Copier le titre dans le presse-papiers + + + Copy URL to clipboard + Copier l’URL dans le presse-papiers &Notes &Notes + + Copy notes to clipboard + Copier les notes dans le presse-papiers + &CSV File… Fichier &CSV… @@ -5779,14 +5237,26 @@ Voulez-vous vraiment poursuivre avec ce fichier? KeePass 1 Database… Base de données KeePass 1… + + Import a KeePass 1 database + Importer une base de données KeePass 1 + 1Password Vault… Coffre 1Password… + + Import a 1Password Vault + Importer un coffre 1Password + CSV File… Fichier CSV… + + Import a CSV file + Importer un fichier CSV + Show TOTP Afficher le TOTP @@ -5803,10 +5273,6 @@ Voulez-vous vraiment poursuivre avec ce fichier? Copy &TOTP Copier le &TOTP - - Copy Password and TOTP - - E&mpty recycle bin &Vider la corbeille @@ -5831,6 +5297,10 @@ Voulez-vous vraiment poursuivre avec ce fichier? &Online Help &Aide en ligne + + Go to online documentation + Accéder à la documentation en ligne + &User Guide Guide d’&utilisation @@ -5875,10 +5345,6 @@ Voulez-vous vraiment poursuivre avec ce fichier? Classic (Platform-native) Classique (de la plateforme) - - Show Menubar - - Show Toolbar Afficher la barre d’outils @@ -5903,10 +5369,6 @@ Voulez-vous vraiment poursuivre avec ce fichier? Clone Group... Cloner le groupe... - - &XML File… - - Clear history Effacer l’historique @@ -5931,7 +5393,8 @@ Expect some bugs and minor issues, this version is meant for testing purposes. - No Tags + 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. @@ -5962,10 +5425,6 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Quit KeePassXC Fermer KeePassXC - - %1 Entry(s) - - Please present or touch your YubiKey to continue… Veuillez présenter ou toucher votre YubiKey pour continuer… @@ -5978,314 +5437,38 @@ Expect some bugs and minor issues, this version is meant for testing purposes.You must restart the application to apply this setting. Would you like to restart now? Pour appliquer ce paramètre, vous devez redémarrer l’application. Voulez-vous la démarrer maintenant ? + + Tags + + + + No Tags + + + + %1 Entry(s) + + + + Copy Password and TOTP + + + + &XML File… + + + + XML File… + Fichier XML... + + + Copy &URL + + Allow Screen Capture - - 1Password 1PUX... - - - - Import a 1Password 1PUX file - - - - Import… - - - - Passkeys… - - - - Import Passkey - - - - Remote S&ync… - - - - Quit Application - - - - Open About Dialog - - - - Open Database - - - - Create Database - - - - Merge From Database - - - - Create Entry - - - - Edit Entry - Modifier l’entrée - - - Delete Entry - - - - Create Group - - - - Edit Group - Modifier le groupe - - - Delete Group - - - - Download All Favicons - - - - Sort Groups A-Z - - - - Sort Groups Z-A - - - - Save Database As - - - - Show Database Security - - - - Show Database Reports - - - - Show Database Settings - - - - Show Passkeys - - - - Clone Entry - - - - Move Entry Up - - - - Move Entry Down - - - - Copy Username - Copier le nom d’utilisateur - - - Copy Password - Copier le mot de passe - - - Show Application Settings - - - - Show Password Generator - - - - Remove Passkey From Entry - - - - Perform Auto-Type: {USERNAME} - - - - Perform Auto-Type: {USERNAME}{ENTER} - - - - Perform Auto-Type: {PASSWORD} - - - - Perform Auto-Type: {PASSWORD}{ENTER} - - - - Perform Auto-Type: {TOTP} - - - - Copy Title - - - - Copy URL - - - - Copy Notes - - - - Export to CSV - - - - Export to HTML - - - - Import KeePass1 Database - Importer une base de données KeePass 1 - - - Import 1Password Vault - - - - Import CSV File - - - - Show TOTP QR Code - - - - Set up TOTP - - - - Empty Recycle Bin - - - - Open Donation Website - - - - Open Bug Report - - - - Open Online Documentation - - - - Open Keyboard Shortcuts Guide - - - - Save Database Backup - - - - SSH Agent: Add Key - - - - SSH Agent: Remove Key - - - - Toggle Compact Mode - - - - Set Theme: Automatic - - - - Set Theme: Light - - - - Set Theme: Dark - - - - Set Theme: Classic - - - - Toggle Show Menubar - - - - Toggle Show Toolbar - - - - Toggle Show Preview Panel - - - - Toggle Always on Top - - - - Toggle Hide Usernames - - - - Toggle Hide Passwords - - - - Export to XML - - - - Toggle Allow Screen Capture - - - - Show Group Panel - - - - Toggle Show Group Panel - - - - Setup Remote Sync… - - - - Password Generator - - - - E&xpire Entry… - - - - Clear SSH Agent - - - - Clear all identities in ssh-agent - - ManageDatabase @@ -6343,6 +5526,26 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Overwriting %1 [%2] Remplacement de %1 [%2] + + older entry merged from database "%1" + ancienne entrée fusionnée de la base de données « %1 » + + + Adding backup for older target %1 [%2] + Ajout d’une sauvegarde pour l’ancienne cible %1 [%2] + + + Adding backup for older source %1 [%2] + Ajout d’une sauvegarde pour l’ancienne source %1 [%2] + + + Reapplying older target entry on top of newer source %1 [%2] + Ré-application de l’ancienne entrée cible sur la nouvelle source %1 [%2] + + + Reapplying older source entry on top of newer target %1 [%2] + Ré-application de l’ancienne entrée source sur la nouvelle cible %1 [%2] + Synchronizing from newer source %1 [%2] Synchronisation avec une source plus récente %1 [%2] @@ -6402,6 +5605,14 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. Vous pouvez régler ici les paramètres de chiffrement de la base de données. Ne vous inquiétez pas, vous pourrez les changer ultérieurement dans les paramètres de la base de données. + + Advanced Settings + Paramètres avancés + + + Simple Settings + Paramètres simples + NewDatabaseWizardPageDatabaseKey @@ -6436,25 +5647,6 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Veuillez saisir le nom d’affichage et une description facultative pour votre nouvelle base de données : - - NewEntryAttachmentsDialog - - Attachment name cannot be empty - - - - Attachment with the same name already exists - - - - Save attachment - - - - New entry attachment - - - NixUtils @@ -6501,6 +5693,15 @@ Expect some bugs and minor issues, this version is meant for testing purposes.%1 octets de texte en clair étaient attendus, %2 ont été trouvés + + OpVaultOpenWidget + + Read Database did not produce an instance +%1 + La base de données lue n’a généré aucune instance +%1 + + OpVaultReader @@ -6574,10 +5775,6 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Unknown cipher: %1 Chiffrement inconnu : %1 - - AES-256/GCM is currently not supported - - Passphrase is required to decrypt this key Une phrase de passe est exigée pour déchiffrer cette clé @@ -6643,178 +5840,7 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Fin de fichier inattendue lors de l’écriture de la clé privée - (encrypted) - (chiffrée) - - - - OpenSSHKeyGenDialog - - SSH Key Generator - - - - Type - Type - - - Bits - - - - Comment - Commentaire - - - - PasskeyExportDialog - - KeePassXC - Passkey Export - - - - Filenames will be generated with title and .passkey file extension. - - - - Export entries - - - - Export Selected - - - - Cancel - Annuler - - - Export to folder - - - - Export the following passkey entries. - - - - - PasskeyExporter - - KeePassXC: Passkey Export - - - - File "%1.passkey" already exists. -Do you want to overwrite it? - - - - - Cannot open file - - - - Cannot open file "%1" for writing. - - - - Cannot write to file - - - - - PasskeyImportDialog - - KeePassXC - Passkey Import - - - - Username: %1 - - - - Group - Groupe - - - Database - - - - Import Passkey - - - - Import - Importer - - - Cancel - Annuler - - - Entry - Entrée - - - Create new entry - - - - Relying Party: %1 - - - - Import the following passkey: - - - - Import the following passkey to this entry: - - - - Default passkeys group (Imported Passkeys) - - - - - PasskeyImporter - - Passkey file - - - - All files - Tous les fichiers - - - Cannot open file - - - - Cannot open file "%1" for reading. - - - - Open passkey file - - - - Cannot import passkey - - - - Cannot import passkey file "%1". Data is missing. - - - - Cannot import passkey file "%1". -The following data is missing: -%2 - - - - Cannot import passkey file "%1". Private key is missing or malformed. + AES-256/GCM is currently not supported @@ -6842,19 +5868,19 @@ The following data is missing: Add Password - + Ajouter un mot de passe Change Password - + Modifier le mot de passe Remove Password - + Supprimer le mot de passe Password set, click to change or remove - + Mot de passe défini, cliquez pour modifier ou supprimer <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> @@ -7020,6 +6046,10 @@ The following data is missing: Word Count: Nombre de mots : + + Character Count: + Nombre de caractères: + Word Case: Casse des mots : @@ -7032,6 +6062,10 @@ The following data is missing: Add custom wordlist Ajouter une liste de mots personnalisés + + character + + Close Fermer @@ -7068,30 +6102,6 @@ The following data is missing: Entropy: %1 bit Entropie : %1 bits - - Password Quality: %1 - Qualité du mot de passe : %1 - - - Poor - Password quality - Plutôt mauvais - - - Weak - Password quality - Faible - - - Good - Password quality - Bon - - - Excellent - Password quality - Excellent - Confirm Delete Wordlist @@ -7138,19 +6148,31 @@ Do you want to overwrite it? Caractères spéciaux - passwordLength - + Password Quality: %1 + Qualité du mot de passe : %1 - Characters: %1 - + Poor + Password quality + Plutôt mauvais - MIXED case - + Weak + Password quality + Faible - Excluded characters: "0", "1", "l", "I", "O", "|", "﹒", "B", "8", "G", "6" + Good + Password quality + Bon + + + Excellent + Password quality + Excellent + + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" @@ -7201,7 +6223,7 @@ Do you want to overwrite it? Excellent - Toggle password visibility using Control + H. Open the password generator using Control + G. + Toggle password visibilty using Control + H. Open the password generator using Control + G. @@ -7220,21 +6242,6 @@ Do you want to overwrite it? - - PreviewEntryAttachmentsDialog - - Preview entry attachment - - - - No preview available - - - - Image format not supported - - - QMessageBox @@ -7273,10 +6280,6 @@ Do you want to overwrite it? Continue Poursuivre - - Continue with weak password - - QObject @@ -7670,10 +6673,6 @@ Do you want to overwrite it? Too many arguments provided. - - Path of the database. - Chemin de la base de données. - Target decryption time in MS for the database. Durée de déchiffrement cible en millisecondes pour la base de données. @@ -7694,6 +6693,10 @@ Do you want to overwrite it? Create a new database. Créer un nouvelle base de données. + + Path of the database. + Chemin de la base de données. + Invalid decryption time %1. La durée de déchiffrement est invalide : %1. @@ -7738,158 +6741,6 @@ Do you want to overwrite it? Successfully created new database. La nouvelle base de données a été créée avec succès. - - Unset the password for the database. - - - - Unset the key file for the database. - - - - Edit a database. - Ouvre une base de données. - - - Cannot use %1 and %2 at the same time. - - - - Could not change the database key. - Impossible de changer la clé de la base de données. - - - Database was not modified. - La base de données n'a pas été modifiée. - - - Writing the database failed: %1 - Échec d’écriture de la base de données : %1 - - - Successfully edited the database. - La base de données a été éditée avec succès. - - - Cannot remove password: The database does not have a password. - Impossible de supprimer le mot de passe: la base de données n’a pas de mot de passe. - - - Cannot remove file key: The database does not have a file key. - Impossible de supprimer la clé de fichier: la base de données n’a pas de clé de fichier. - - - Loading the new key file failed: %1 - - - - Found unexpected Key type %1 - - - - Cannot remove all the keys from a database. - - - - Show a database's information. - Afficher les renseignements d’une base de données. - - - UUID: - UUID : - - - Name: - Nom : - - - Description: - Description : - - - Cipher: - Chiffrement : - - - KDF: - Fonction de dérivation de clé : - - - Recycle bin is enabled. - La corbeille est activée. - - - Recycle bin is not enabled. - La corbeille est désactivée. - - - Location - Emplacement - - - Database created - - - - Last saved - Dernier enregistrement - - - Unsaved changes - Changements non enregistrés - - - yes - oui - - - no - non - - - Number of groups - Nombre de groupes - - - Number of entries - Nombre d’entrées - - - Number of expired entries - Nombre d’entrées expirées - - - Unique passwords - Mots de passes uniques - - - Non-unique passwords - Mots de passe non uniques - - - Maximum password reuse - Maximum de réutilisations des mots de passe - - - Number of short passwords - Nombre de mots de passe courts - - - Number of weak passwords - Nombre de mots de passe faibles - - - Entries excluded from reports - Entrées exclues des rapports - - - Average password length - Longueur moyenne des mots de passe - - - %1 characters - %1 caractères - 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. @@ -7913,6 +6764,10 @@ Do you want to overwrite it? Invalid word count %1 Le nombre de mots %1 est invalide + + The word list is too small (< 1000 items) + La liste de mots est trop courte (moins de 1 000 articles) + Title for the entry. Titre de l’entrée. @@ -7937,6 +6792,10 @@ Do you want to overwrite it? Enter new password for entry: Saisir le nouveau mot de passe pour l’entrée : + + Writing the database failed: %1 + Échec d’écriture de la base de données : %1 + Successfully edited entry %1. L’entrée %1 a été modifiée avec succès. @@ -8057,6 +6916,10 @@ Do you want to overwrite it? Exit interactive mode. Quitter le mode interactif. + + Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. + Format à utiliser lors de l’exportation. Les choix proposés sont « xml » ou « csv ». La valeur par défaut est « xml ». + Exports the content of a database to standard output in the specified format. Exporte au format indiqué le contenu de la base de données vers la sortie standard. @@ -8157,6 +7020,106 @@ Do you want to overwrite it? Successfully imported database. La base de données a été importée avec succès. + + Show a database's information. + Afficher les renseignements d’une base de données. + + + UUID: + UUID : + + + Name: + Nom : + + + Description: + Description : + + + Cipher: + Chiffrement : + + + KDF: + Fonction de dérivation de clé : + + + Recycle bin is enabled. + La corbeille est activée. + + + Recycle bin is not enabled. + La corbeille est désactivée. + + + Location + Emplacement + + + Database created + + + + Last saved + Dernier enregistrement + + + Unsaved changes + Changements non enregistrés + + + yes + oui + + + no + non + + + Number of groups + Nombre de groupes + + + Number of entries + Nombre d’entrées + + + Number of expired entries + Nombre d’entrées expirées + + + Unique passwords + Mots de passes uniques + + + Non-unique passwords + Mots de passe non uniques + + + Maximum password reuse + Maximum de réutilisations des mots de passe + + + Number of short passwords + Nombre de mots de passe courts + + + Number of weak passwords + Nombre de mots de passe faibles + + + Entries excluded from reports + Entrées exclues des rapports + + + Average password length + Longueur moyenne des mots de passe + + + %1 characters + %1 caractères + Unknown command %1 La commande %1 est inconnue @@ -8329,10 +7292,6 @@ Commandes proposées : Show the protected attributes in clear text. Afficher en clair les attributs protégés. - - Show all the attributes of the entry. - - Show the attachments of the entry. @@ -8402,10 +7361,6 @@ Veuillez envisager de générer un nouveau fichier clé. Invalid YubiKey serial %1 Le numéro de série Yubikey %1 est invalide - - Please present or touch your YubiKey to continue. - - Enter password to encrypt database (optional): Saisissez un mot de passe pour chiffrer la base de données (facultatif) : @@ -8644,6 +7599,18 @@ Noyau : %3 %4 file empty fichier vide + + malformed string + chaîne mal formée + + + missing closing quote + Le guillemet fermant manque + + + %1: (row, col) %2,%3 + %1 : (ligne, colonne) %2, %3 + AES 256-bit AES 256 bits @@ -8822,6 +7789,14 @@ Noyau : %3 %4 read password of the database from stdin lire le mot de passe de la base de données sur l’entrée standard + + allow app screen recordering and screenshots + + + + Locked databases. + Bases de données verrouillées. + Database failed to lock. La base de données n’a pas pu se verrouiller. @@ -8830,10 +7805,6 @@ Noyau : %3 %4 Another instance of KeePassXC is already running. Une autre instance de KeePassXC est déjà en cours d’exécution. - - KeePassXC is not running. No open database to lock - - Fatal error while testing the cryptographic functions. Erreur fatale lors de l’évaluation des fonctions cryptographiques. @@ -8877,298 +7848,68 @@ Noyau : %3 %4 - Access to all entries is denied + Please present or touch your YubiKey to continue. - allow screenshots and app recording (Windows/macOS) + Show all the attributes of the entry. + + + + Edit a database. + Ouvre une base de données. + + + Could not change the database key. + Impossible de changer la clé de la base de données. + + + Database was not modified. + La base de données n'a pas été modifiée. + + + Successfully edited the database. + La base de données a été éditée avec succès. + + + Loading the new key file failed: %1 + + + + Unset the password for the database. + + + + Unset the key file for the database. + + + + Cannot use %1 and %2 at the same time. + + + + Cannot remove all the keys from a database. + Impossible de supprimer toutes les clés d’une base de données. + + + Cannot remove password: The database does not have a password. + Impossible de supprimer le mot de passe: la base de données n’a pas de mot de passe. + + + Cannot remove file key: The database does not have a file key. + Impossible de supprimer la clé de fichier: la base de données n’a pas de clé de fichier. + + + Found unexpected Key type %1 Set the key file for the database. -This option is deprecated, use --set-key-file instead. +This options is deprecated, use --set-key-file instead. - Databases have been locked. - - - - Attestation not supported - - - - Credential is excluded - - - - Passkeys request canceled - - - - Invalid user verification - - - - Empty public key - - - - Invalid URL provided - - - - Passkeys - - - - AES initialization failed - - - - AES encrypt failed - - - - Failed to store in Linux Keyring - - - - Polkit returned an error: %1 - - - - Could not locate key in keyring - - - - Could not read key in keyring - - - - AES decrypt failed - - - - No Polkit authentication agent was available - - - - Polkit authorization failed - - - - No Quick Unlock provider is available - - - - Failed to init KeePassXC crypto. - - - - Failed to encrypt key data. - - - - Failed to get Windows Hello credential. - - - - Failed to decrypt key data. - - - - Origin is empty or not allowed - - - - Effective domain is not a valid domain - - - - Origin and RP ID do not match - - - - No supported algorithms were provided - - - - Wait for timer to expire - - - - Challenge is shorter than required minimum length - - - - user.id does not match the required length - - - - Favorite - Tag for favorite entries - - - - File does not exist. - - - - Cannot open file: %1 - - - - Cannot parse file: %1 at position %2 - - - - Failed to decrypt json file: %1 - - - - Invalid encKeyValidation field - - - - Invalid cipher list within encKeyValidation field - - - - Wrong password - - - - Invalid encrypted data field - - - - Invalid cipher list within encrypted data field - - - - Cannot initialize cipher - - - - Cannot decrypt data - - - - Bitwarden Import - - - - Archived - Tag for archived entries - - - - Invalid 1PUX file format: Not a valid ZIP file. - - - - Invalid 1PUX file format: Missing export.data - - - - 1Password Import - - - - Enter Shortcut - - - - Action - - - - Shortcuts - - - - Unknown passkeys error - - - - Invalid KDF iterations, cannot decrypt json file - - - - Unsupported format, ensure your Bitwarden export is password-protected - - - - Only PBKDF and Argon2 are supported, cannot decrypt json file - - - - Reset Shortcuts - - - - Double click an action to change its shortcut - - - - Filter... - - - - Shortcut Conflict - - - - Shortcut %1 conflicts with '%2'. Overwrite shortcut? - - - - Cannot generate valid passphrases because the wordlist is too short - - - - Encrypted files are not supported. - - - - Proton Pass Import - - - - Delete plugin data? - Supprimer les données de l’extension? - - - Delete plugin data from Entry(s)? - - - - Passkey - - - - Format to use when exporting. Available choices are 'xml', 'csv' or 'html'. Defaults to 'xml'. - - - - start minimized to the system tray - - - - malformed string, possible unescaped delimiter - - - - missing closing delimiter - - - - %1, row: %2, column: %3 - - - - Tags + KeePassXC is not running. No open database to lock @@ -9206,39 +7947,20 @@ This option is deprecated, use --set-key-file instead. Erreur interne zlib : - - RemoteHandler - - Command `%1` did not finish in time. Process was killed. - - - - Failed to upload merged database. Command `%1` did not finish in time. Process was killed. - - - - Invalid download parameters provided. - - - - Command `%1` failed to download database. - - - - Invalid database pointer or upload parameters provided. - - - - Command `%1` exited with status code: %2 - - - - Failed to upload merged database. Command `%1` exited with status code: %2 - - - ReportsWidgetBrowserStatistics + + Exclude expired entries from the report + + + + Show only entries which have URL set + + + + Show only entries which have browser settings in custom data + + Double-click entries to edit. Double-cliquer sur les entrées pour les modifier. @@ -9303,53 +8025,44 @@ This option is deprecated, use --set-key-file instead. Exclude from reports Exclure des rapports - - Expire Entry(s)… - - - - Only show entries that have a URL - - - - Only show entries that have been explicitly allowed or denied - - - - Show expired entries - - - - (Expired) - - - - Delete plugin data from Entry(s)… - - ReportsWidgetHealthcheck - Show expired entries + Exclude expired entries from the report - (Expired) - + Also show entries that have been excluded from reports + Afficher aussi les entrées qui ont été exclues des rapports Hover over reason to show additional details. Double-click entries to edit. Survolez la raison pour afficher des détails supplémentaires. Double-cliquez sur les entrées pour les modifier. + + Bad + Password quality + Mauvais + Bad — password must be changed Mauvais - le mot de passe doit être changé + + Poor + Password quality + Plutôt mauvais + Poor — password should be changed Plutôt mauvais - le mot de passe doit être changé + + Weak + Password quality + Faible + Weak — consider changing the password Faible - envisagez de changer le mot de passe @@ -9398,14 +8111,6 @@ This option is deprecated, use --set-key-file instead. Exclude from reports Exclure des rapports - - Expire Entry(s)… - - - - Show entries that have been excluded from reports - - ReportsWidgetHibp @@ -9501,77 +8206,6 @@ This option is deprecated, use --set-key-file instead. Exclude from reports Exclure des rapports - - Expire Entry(s)… - - - - - ReportsWidgetPasskeys - - Export - Exporter - - - Import - Importer - - - List of entry URLs - Liste des URL d'entrées - - - Title - Titre - - - Path - Chemin - - - Username - Nom d’utilisateur - - - URLs - - - - Edit Entry… - - - - Delete Entry(s)… - - - - Relying Party - - - - Show expired entries - - - - (Expired) - - - - Export Confirmation - Confirmation de l’exportation - - - The passkey file will be vulnerable to theft and unauthorized use, if left unsecured. Are you sure you want to continue? - - - - Please wait, list of entries with passkeys is being updated… - - - - No entries with passkeys. - - ReportsWidgetStatistics @@ -9746,14 +8380,6 @@ This option is deprecated, use --set-key-file instead. No agent running, cannot list identities. Aucun agent n’est en cours d’exécution, il est impossible de lister les identités. - - Failed to remove all SSH identities from agent. - - - - All SSH identities removed from agent. - - SearchHelpWidget @@ -9820,10 +8446,6 @@ This option is deprecated, use --set-key-file instead. Search Help Chercher dans l’aide - - Save Search - - Search (%1)… Search placeholder text, %1 is the keyboard shortcut @@ -9837,6 +8459,10 @@ This option is deprecated, use --set-key-file instead. Limit search to selected group Limiter la recherche au groupe sélectionné + + Save Search + + SettingsClientModel @@ -9898,10 +8524,26 @@ This option is deprecated, use --set-key-file instead. Confirm when passwords are retrieved by clients + + <html><head/><body><p><span style=" + font-family:'-apple-system','BlinkMacSystemFont','Segoe UI','Helvetica','Arial','sans-serif','Apple Color + Emoji','Segoe UI Emoji'; font-size:14px; color:#24292e; background-color:#ffffff;">This setting does + not override disabling recycle bin prompts</span></p></body></html> + + + Confirm when clients request entry deletion + + <html><head/><body><p>This improves compatibility with certain applications + which search for password without unlocking the database first.</p><p>But enabling this may also + crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a + different value set in applications.)</p></body></html> + + + Prompt to unlock database before searching Inviter à déverrouiller la base de données avant de rechercher @@ -9926,14 +8568,6 @@ This option is deprecated, use --set-key-file instead. Save current changes to activate the plugin and enable editing of this section. Enregistrer les changements actuels pour activer le greffon et permettre la modification de cette section. - - <html><head/><body><p>This setting does not override disabling recycle bin prompts </p></body></html> - - - - <html><head/><body><p>This improves compatibility with certain applications which search for password without unlocking the database first.</p><p>But enabling this may also crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a different value set in applications.) </p></body></html> - - SettingsWidgetKeeShare @@ -10041,21 +8675,21 @@ This option is deprecated, use --set-key-file instead. TagModel - - Clear Search - Effacer la recherche - - - All Entries - - Expired Weak Passwords - + Mots de passe faibles + + + All Entries + Toutes les entrées + + + Clear Search + Effacer la recherche @@ -10066,7 +8700,7 @@ This option is deprecated, use --set-key-file instead. Remove Tag - + Supprimer l’étiquette Confirm Remove Tag @@ -10234,6 +8868,26 @@ Exemple : JBSWY3DPEHPK3PXP Start storing your passwords securely in a KeePassXC database Commencez à enregistrer vos mots de passe en toute sécurité dans une base de données KeePassXC + + Create new database + Créer une nouvelle base de données + + + Open existing database + Ouvrir une base de données existante + + + Import from KeePass 1 + Importer de KeePass 1 + + + Import from 1Password + Importer de 1Password + + + Import from CSV + Importer d’un fichier CSV + Recent databases Bases de données récentes @@ -10246,18 +8900,6 @@ Exemple : JBSWY3DPEHPK3PXP Welcome to KeePassXC %1 Bienvenue sur KeePassXC %1 - - Create Database - - - - Open Database - - - - Import File - - WinUtils @@ -10274,8 +8916,31 @@ Exemple : JBSWY3DPEHPK3PXP + + WindowsHello + + Failed to init KeePassXC crypto. + + + + Failed to encrypt key data. + + + + Failed to get Windows Hello credential. + + + + Failed to decrypt key data. + + + YubiKey + + %1 No interface, slot %2 + + General: @@ -10287,6 +8952,14 @@ Exemple : JBSWY3DPEHPK3PXP YubiKeyEditWidget + + Refresh hardware tokens + Actualiser les jetons matériels + + + Refresh + Actualiser + Hardware key slot selection Sélection de l’emplacement de la clé matérielle @@ -10319,6 +8992,10 @@ Exemple : JBSWY3DPEHPK3PXP Challenge-Response set, click to change or remove Question-réponse définie, cliquez pour la modifier ou la supprimer + + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + + Detecting hardware keys… Détection des clés matérielles… @@ -10327,25 +9004,28 @@ Exemple : JBSWY3DPEHPK3PXP No hardware keys detected Aucune clé matérielle n’a été détectée + + + YubiKeyInterface - Refresh hardware keys - - - - <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed with <a href="https://keepassxc.org/docs/#faq-yubikey-howto">Challenge-Response</a>.</p> - - - - Hardware keys found, but no slots are configured - + %1 Invalid slot specified - %2 + %1 Un emplacement invalide est indiqué – %2 YubiKeyInterfacePCSC + + (PCSC) %1 [%2] Challenge-Response - Slot %3 + + The YubiKey PCSC interface has not been initialized. + + Hardware key is currently in use. + La clé matérielle est en cours d’utilisation. + Could not find or access hardware key with serial number %1. Please present it to continue. @@ -10362,21 +9042,6 @@ Exemple : JBSWY3DPEHPK3PXP Failed to complete a challenge-response, the PCSC error code was: %1 - - (NFC) %1 [%2] - Slot %3, %4 - YubiKey display fields - - - - Press - USB Challenge-Response Key interaction request - Appuyer - - - Passive - USB Challenge-Response Key no interaction required - Passive - YubiKeyInterfaceUSB @@ -10384,6 +9049,14 @@ Exemple : JBSWY3DPEHPK3PXP Unknown Inconnu + + (USB) %1 [%2] Configured Slot - %3 + + + + (USB) %1 [%2] Challenge-Response - Slot %3 - %4 + + Press USB Challenge-Response Key interaction request @@ -10398,6 +9071,10 @@ Exemple : JBSWY3DPEHPK3PXP The YubiKey USB interface has not been initialized. L’interface YubiKey n’a pas été initialisée. + + Hardware key is currently in use. + La clé matérielle est en cours d’utilisation. + Could not find hardware key with serial number %1. Please plug it in to continue. Impossible de trouver la clé matérielle dont le numéro de série est %1. Veuillez la connecter afin de poursuivre. @@ -10414,15 +9091,5 @@ Exemple : JBSWY3DPEHPK3PXP Failed to complete a challenge-response, the specific error was: %1 Échec de question-réponse, l’erreur particulière était : %1 - - %1 [%2] - Slot %3 - YubiKey NEO display fields - - - - %1 [%2] - Slot %3, %4 - YubiKey display fields - - \ No newline at end of file diff --git a/share/translations/keepassxc_he.ts b/share/translations/keepassxc_he.ts index 7be663b90..4548e6267 100644 --- a/share/translations/keepassxc_he.ts +++ b/share/translations/keepassxc_he.ts @@ -11,19 +11,19 @@ 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: תחתון ;"> 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 מופץ בתנאי רישיון (GNU General License (GPL גרסה 2 או (לבחירתכם) גרסה 3. + KeePassXC מופץ בתנאי הרשיון של (GNU General License (GPL גרסה 2 או (לבחירה) גרסה 3. Project Maintainers: - מתחזקי מיזם: + מתחזקי המייזם: Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. - תודה מיוחדת מצוות KeePassXC עבור אל debfx ליצירת ה־KeePassX המקורי. + תודה מיוחדת מצוות KeePassXC, נא לעבור אל debfx ליצירת ה־KeePassX המקורי. Contributors @@ -31,7 +31,7 @@ <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> - <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors"> ראו תרומות ב־GitHub </a> + <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors"> צפיה בתרומות ב־GitHub </a> Debug Info @@ -39,7 +39,7 @@ Include the following information whenever you report a bug: - לכלול את המידע הבא בכל דווח על תקל: + הכללת המידע הבא בכל דווח על תקל: Copy to clipboard @@ -54,7 +54,7 @@ Non-existing/inaccessible executable path. Please double-check the client is legit. - נתיב הפעלה לא קיים/נגיש. אנא בדקו שוב שהלקוח (קליינט) חוקי. + נתיב הפעלה לא קיים/נגיש. נא לבדוק שנית את חוקיות הלקוח. <html><head/><body><p><span style=" font-weight:600;">%1 </span>is requesting access to the following entries:</p></body></html> @@ -66,7 +66,7 @@ PID - קוד זיהוי אישי + קוד מזהה אישי Executable @@ -80,17 +80,17 @@ Details פרטים - - Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. - ההחלטה שנעשתה תזכר בכל משך פעולתם של הלקוח המבקש ו־ KeePassXC יחד. - Remember - לזכור + זכירה Allow Selected - בחירת קובץ ססמה + איפשור נבחרים + + + Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. + ההחלטה שנעשתה תזכר בכל משך פעולתם של הלקוח המבקש ו־ KeePassXC יחד. Deny All && Future @@ -98,14 +98,14 @@ Allow All && &Future - איפשור הכול וגם בעתיד + אפשור הכול וגם בעתיד AccessControlDialog::DenyButton Deny for this program - דחיה עבור תוכנית זו + דחיה לתכנית זו @@ -116,16 +116,12 @@ Use Pageant - שימוש בפיג'אנט + שימוש בפג'יאנט Use OpenSSH שימוש באופן־אס.אס.איץ' - - Use both agents - שימוש בשני הסוכנים - SSH_AUTH_SOCK override כתיבה על SSH_AUTH_SOCK @@ -154,12 +150,16 @@ SSH Agent connection is working! חיבור סוכן SSH פועל! + + Use both agents + שימוש בשני הסוכנים + ApplicationSettingsWidget Application Settings - הגדרות יישום + הגדרות יישומון General @@ -169,13 +169,9 @@ Security אבטחה - - This setting cannot be enabled when minimize on unlock is enabled. - לא ניתן לאפשר הגדרה זו כאשר האפשרות 'מזעור בעת שיחרור מנעילה' מאופשרת. - Access error for config file %1 - שגיאת גישה לקובץ התצורה 1% + שגיאת גישה לקובץ התצורה %1 Icon only @@ -195,7 +191,7 @@ Follow style - עקיבה אחר הסגנון + עקוב אחר הסגנון Monochrome @@ -217,49 +213,21 @@ You must restart the application to set the new language. Would you like to restart now? נא לאתחל את היישום כדי להגדיר את השפה החדשה. האם לאתחל כעת? + + Reset Settings? + האם לאפס הגדרות? + + + Are you sure you want to reset all general and security settings to default? + האם לאפס את כל ההגדרות הכלליות והגדרות האבטחה לברירת המחדל? + Select backup storage directory בחירת מחיצת אחסן גיבוי - Confirm Reset - אישור שיצוב - - - Are you sure you want to reset all settings to default? - האם לשצב את כל ההגדרות לבררת מחדל? - - - Import KeePassXC Settings - ייבוא הגדרות KeePassXC - - - Failed to import settings from %1, not a valid settings file. - ייבוא הגדרות מ־%1 כשל, לא קובץ הגדרות תקין. - - - Export KeePassXC Settings - ייצוא הגדרות KeePassXC - - - Small - - - - Normal - - - - Medium - - - - Large - - - - Custom - + This setting cannot be enabled when minimize on unlock is enabled. + לא ניתן לאפשר הגדרה זו כאשר האפשרות 'מזעור בעת שיחרור מנעילה' מאופשרת. @@ -270,11 +238,11 @@ Startup - אתחול + איתחול Start only a single instance of KeePassXC - אתחול אדגם KeePassXC יחיד בלבד + איתחול אֶדְגָּם־יחיד של KeePassXC בלבד Automatically launch KeePassXC at system startup @@ -282,27 +250,23 @@ Minimize window at application startup - מזעור חלון בעת איתחול היישום + מזעור החלון בעת איתחול היישום Minimize window after unlocking database - מזעור חלון לאחר שחרור נעילת מסד־נתונים + מזעור החלון לאחר שחרור נעילת מסד הנתונים Remember previously used databases זכירת מסדי־נתונים ששימשו בעבר - - recent files - קבצים אחרונים - Load previously open databases on startup טעינת מסדי־נתונים שנפתחו בעבר בעת האיתחול Remember database key files and security dongles - זכירת קבצי מפתח מסד־נתונים והתקני אבטחה + זכירת קבצי מפתח־מסד־נתונים ותקיעי אבטחה Check for updates at application startup once per week @@ -310,7 +274,26 @@ Include beta releases when checking for updates - הכללת גרסאות בטא בבדיקת עדכונים + בבדיקת עדכונים, לכלול גםגרסאות בטא + + + On database unlock, show entries that + עם שחרור נעילת מסד הנתונים, הצגת ערכים ש־ + + + have expired + On database unlock, show entries that... + פג־תוקף + + + days + On database unlock, show entries that will expire within %1 days + ימים + + + will expire within + On database unlock, show entries that... + תוקף יפוג בתוך File Management @@ -330,16 +313,28 @@ Automatically reload the database when modified externally - טעינה חוזרת אוטומטית של מסד־נתונים בהסגלה חיצונית + טעינה חוזרת אוטומטית של מסד הנתונים בזמן הסגלה ממקור חיצוני Backup database file before saving גיבוי קובץ מסד־נתונים לפני שמירה + + Backup destination + יעד גיבוי + + + Specifies the database backup file location. Occurrences of "{DB_FILENAME}" are replaced with the filename of the saved database without extension. {TIME:<format>} is replaced with the backup time, see https://doc.qt.io/qt-5/qdatetime.html#toString. <format> defaults to format string "dd_MM_yyyy_hh-mm-ss". + ציון מיקום קובץ גיבוי מסד הנתונים. מופעים של "{DB_FILENAME}" יוחלפו בשם קובץ מסד הנתונים השמור, ללא הסיומת. {TIME:<format>} יוחלף במועד הגיבוי, למידע נוסף https://doc.qt.io/qt-5/qdatetime.html#toString. ברירת המחדל של <format> היא תבנית המחרוזת "dd_MM_yyyy_hh-mm-ss". + {DB_FILENAME}.old.kdbx {DB_FILENAME}.old.kdbx + + Choose... + בחירה... + Use alternative saving method (may solve problems with Dropbox, Google Drive, GVFS, etc.) שימוש בשיטת שמירה חלופית (עשוי לפתור בעיות עם דרופבוקס, גוגל דרייב, GVFS ודומיהם). @@ -362,7 +357,7 @@ Minimize when opening a URL - מזעור בעת פתיחת מען URL + מזעור בעת פתיחת כתובת אתר Hide window when copying to clipboard @@ -374,11 +369,11 @@ Drop to background - גרור לרקע + גרירה לרקע Favicon download timeout: - פסק זמן להורדת Favicon: + פסק זמן להורדת פביקון: Website icon download timeout in seconds @@ -387,15 +382,15 @@ sec Seconds - שניות + שניות User Interface - ממשק המשתמש + מנשק המשתמש Toolbar button style - סגנון כפתור סרגל הכלים + סגנון לחצן סרגל־כלים Movable toolbar @@ -411,15 +406,11 @@ (restart program to activate) - (איתחול התוכנית להפעלה) + (אתחול התוכנית להפעלה) Toolbar button style: - סגנון סרגל כלים תחתון - - - Show passwords in color - הצגת ססמאות בצבע + סגנון סרגל כלים תחתון: Use monospaced font for notes @@ -427,11 +418,11 @@ Minimize instead of app exit - מזעור במקום יציאה מהיישום + מזעור במקום יציאה מהיישומון Show a system tray icon - הצגת סמל במגש המערכת + הצגת סמל בסרגל כלי מערכת Tray icon type @@ -447,7 +438,7 @@ Reset settings to default… - אפס הגדרות לברירת מחדל + איפוס הגדרות לברירת מחדל... Auto-Type @@ -463,7 +454,7 @@ Always ask before performing Auto-Type - תמיד לשאול לפני ביצוע הקלדה־אוטומטית + לשאול תמיד לפני ביצוע הקלדה־אוטומטית Hide expired entries from Auto-Type @@ -479,16 +470,16 @@ Global Auto-Type shortcut: - קיצור דרך כללי להקלדה־אוטומטית + קיצור דרך כללי להקלדה־אוטומטית: Auto-type start delay milliseconds - השהיית התחלת הקלדה־אוטומטית באלפיות השנייה + עיכוב התחלת הקלדה־אוטומטית באלפיות השנייה ms Milliseconds - אלפית שניה + אלפית שניה Auto-Type typing delay: @@ -500,76 +491,19 @@ Auto-type character typing delay milliseconds - השהיית התחלת הקלדה־אוטומטית של תווים באלפיות השנייה + הקלדה־אוטומטית של תווים בעיכוב אלפיות השנייה Remember last typed entry for: - זכירת רשומה אחרונה שהוקלדה ל: + זכירת הרשומה האחרונה שהוקלדה עבור: - On database unlock, show entries that will expire within - עם שחרור נעילת מסד־נתונים, להציג ערכים שתוקפם יפוג בתוך + recent files + קבצים אחרונים - On database unlock, show entries that will expire within - עם שחרור נעילת מסד־נתונים, להציג ערכים שתוקפם יפוג בתוך - - - days - number of days warning for password expiration - ימים - - - Destination format: - תסדיר יעד: - - - <html><head/><body><p><span style=" font-weight:600;">{DB_FILENAME}</span> is replaced with the filename of the saved database without extension</p><p><span style=" font-weight:600;">{TIME:&lt;format&gt;}</span> is replaced with the specified time format (default: dd_MM_yyyy_hh-mm-ss)</p><p>See the User Guide for more details</p></body></html> - - - - Choose folder... - בחירת תיקייה... - - - Show confirmation before moving entries to recycle bin - בקש אישור לפני העברת ערכים לסל המחזור - - - Copy data on double clicking field in entry view - - - - Show toolbar - הצגת סרגל־כלים - - - Show the menu bar by pressing the Alt key - - - - Show menubar - הצגת סרגל תפריט - - - Import settings… - ייבוא הגדרות... - - - Export settings… - ייצוא הגדרות... - - - Open browser on double clicking URL field in entry view - - - - Font size: - - - - Font size selection - + Show passwords in color + הצגת ססמאות בצבע @@ -580,12 +514,12 @@ Database lock timeout seconds - פסק־זמן לנעילת מסד־נתונים + זמן לנעילת מסד נתונים sec Seconds - שניה + שניות Clear clipboard after @@ -593,16 +527,16 @@ Clear search query after - נקוי שאילתת חיפוש לאחר + ניקוי שאילתת חיפוש לאחר min Minutes - דקות + דקה Clipboard clear seconds - שניות נקיון לוח־גזירים + ניקוי שניות מלוח־הגזירים Lock databases after inactivity of @@ -614,7 +548,7 @@ Enable database quick unlock (Touch ID / Windows Hello) - איפשור שחרור נעילת מסד־נתונים מהירה (Touch ID / Windows Hello) + אפשור שחרור נעילת מסד נתונים מהירה (Touch ID / Windows Hello) Lock databases when session is locked or lid is closed @@ -622,7 +556,11 @@ Lock databases after minimizing the window - נעילת מסדי־נתונים לאחר מזעור החלון + נעילת מסדי־נתונים לאחר צמצום החלון + + + Require password repeat when it is visible + דרישה לחזור על הזנת ססמה בזמן שהיא גלויה Hide passwords when editing them @@ -636,6 +574,18 @@ Hide passwords in the entry preview panel הסתרת ססמאות בלוחית תצוגת רשומות מקדימה + + Hide entry notes by default + הסתרת הערות רשומה כברירת מחדל + + + Move entries to recycle bin without confirmation + העברת רשומות לסל המחזור ללא אישור + + + Enable double click to copy the username/password entry columns + אפשור הקשה כפולה להעתקת עמודות רשומה שם המשתמש/הססמה + Privacy פרטיות @@ -648,18 +598,6 @@ Hide TOTP in the entry preview panel הסתרת TOTP בלוחית תצוגת רשומות מקדימה - - Lock databases when switching user - נעילת מסדי־נתונים בהחלפת משתמש - - - Lock Options - אפשרויות נעילה - - - Hide notes in the entry preview panel - - AutoType @@ -673,11 +611,11 @@ Permission Required - דרושה הרשאה + נדרשת הרשאה KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. - ל־KeePassXC נדרשת הרשאת נגישות על מנת לבצע הקלדה־אוטומטית ברמה בסיסית. אם כבר הענקה הרשאה, ייתכן שיידרש להפעיל את KeePassXC מחדש. + ל־KeePassXC נדרשת הרשאת נגישות על מנת לבצע הקלדה־אוטומטית ברמה בסיסית. אם כבר הענקה הרשאה, ייתכן שיידרש לאתחל את KeePassXC. KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. @@ -689,7 +627,7 @@ Bracket imbalance detected, found extra { or } - זוהה חוסר איזון בסוגרים, נמצאו {or } + זוהה חוסר איזון בסוגרים, נמצאה { or } עודף Too many repetitions detected, max is %1: %2 @@ -704,13 +642,27 @@ זוהה השהיה ארוכה מאוד, מרבי %1: %2 - Entry does not have attribute for PICKCHARS: %1 - לרשומה אין תכונה עבור PICKCHARS: %1 + Invalid conversion type: %1 + סוג המרה לא תקין: %1 + + + Invalid conversion syntax: %1 + תחביר המרה לא תקין: %1 + + + Invalid regular expression syntax %1 +%2 + תחביר ביטוי רגיל לא תקין %1 +%2 Invalid placeholder: %1 מציין מיקום לא תקין: %1 + + Entry does not have attribute for PICKCHARS: %1 + לרשומה אין תכונה עבור PICKCHARS: %1 + AutoTypeAssociationsModel @@ -720,7 +672,7 @@ Sequence - רצף + רצף סדר פעולות (empty) @@ -728,7 +680,7 @@ Default sequence - רצף ברירת מחדל + רצף סדר פעולות ברירת מחדל @@ -747,11 +699,15 @@ Sequence - רצף + רצף סדר פעולות AutoTypePlatformX11 + + Trying to send invalid keysym. + ניסוין שליחת מפתחות לא תקין. + Sequence aborted: Caps Lock is on הרצף ננטש: אותיות רישיות מופעלות @@ -764,16 +720,12 @@ Unable to get valid keycode for key: לא ניתן לקבל קוד מפתח תקין למפתח: - - Trying to send invalid keyboard symbol. - ניסיון לשלוח סמל מקלדת לא תקין. - AutoTypeSelectDialog Auto-Type - KeePassXC - הקלדה־אוטומטית – KeePassXC + הקלדה־אוטומטית מסוג - KeePassXC Double click a row to perform Auto-Type or find an entry using the search: @@ -786,8 +738,8 @@ Ctrl+1 - Type username<br/> Ctrl+2 - Type password<br/> Ctrl+3 - Type TOTP<br/> Ctrl+4 - Use Virtual Keyboard (Windows Only)</p> - <p>ניתן להשתמש בשאילתות חיפוש מתקדם למציאת כל ערך במסדי־נתונים הפתוחים. קיצורי הדרך הבאים שימושיים:<br/> -Ctrl+F - החלפת חיפוש מסד־נתונים<br/> + <p>ניתן להשתמש בשאילתות חיפוש מתקדם למציאת כל ערך במסדי הנתונים הפתוחים. קיצורי הדרך הבאים שימושיים:<br/> +Ctrl+F - החלפת חיפוש מסד הנתונים<br/> Ctrl+1 - הקלדת שם משתמש<br/> Ctrl+2 - הקלדת סיסמה<br/> Ctrl+3 - הקלדת TOTP<br/> @@ -795,7 +747,7 @@ Ctrl+4 - שימוש במקלדת מדומה (וינדוס בלבד)</p> Search all open databases - חיפוש בכל מסדי־נתונים הפתוחים + חיפוש בכל מסדי הנתונים הפתוחים Search… @@ -846,7 +798,7 @@ Ctrl+4 - שימוש במקלדת מדומה (וינדוס בלבד)</p> %1 is requesting access to the following entries: - %1 מבקש גישה לרשומות הבאות: + נתקבלה בקשת גישה מ־%1 לרשומות הבאות: Remember access to checked entries @@ -862,26 +814,26 @@ Ctrl+4 - שימוש במקלדת מדומה (וינדוס בלבד)</p> Allow Selected - איפשור פריטים שנבחרו + בחירת קובץ ססמה Deny All - דחיית הכל + דחיית הכול Disable for this site - השבתת אתר זה - - - Undo - ביטול פעולה + השבת באתר זה BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + שמירת רשומת דפדפן־KeePassXC + Ok - אישור + בסדר Cancel @@ -891,91 +843,34 @@ Ctrl+4 - שימוש במקלדת מדומה (וינדוס בלבד)</p>You have multiple databases open. Please select the correct database for saving credentials. מספר מסדי־נתונים פתוחים. -נא לבחור במסד־נתונים הנכון לשמירת הרשאות. - - - KeePassXC - Select Database - cבחירת מסד נתונ – KeePass - - - - BrowserPasskeysConfirmationDialog - - Cancel - ביטול - - - Update - עדכון - - - Authenticate - אימות - - - Register new - להרשם כעת - - - Register - רישום - - - Timeout in <b>%n</b> seconds... - פסק זמן בתוך שניה <b>%n</b>...פסק זמן בתוך <b>%n</b> שניות...פסק זמן בתוך <b>%n</b> שניות... - - - Relying Party: %1 - צד סומך: %1 - - - Username: %1 - שם משתמש: %1 - - - KeePassXC - Passkey credentials - נתוני אמנה Passkey - KeePassXC - - - Add to existing entry - הוספה לרשומה קיימת - - - Existing passkey found. -Do you want to register a new passkey for: - נמצאו Passkey קיימים. -האם לרשום Passkey חדש עבור: - - - Select the existing passkey and press Update to replace it. - בחירת ה־Passkey הקיים ולחיצה על עדכון כדי להחליפו. - - - Authenticate passkey credentials for: - אימות נתוני אמנת Passkey עבור: - - - Do you want to register a passkey for: - האם לרשום Passkey עבור: +נא לבחור במסד הנתונים הנכון לשמירת אישורים. BrowserService + + KeePassXC: Create a new group + KeePassXC: יצירת קבוצה חדשה + A request for creating a new group "%1" has been received. Do you want to create this group? - הבקשה ליצור קבוצה חדשה "%1" התקבלה. + בקשה ליצור קבוצה חדשה "%1" התקבלה. האם ליצור קבוצה זו? + + KeePassXC: New key association request + KeePassXC: בקשת שיוך מפתח חדש + You have received an association request for the following database: %1 Give the connection a unique name or ID, for example: chrome-laptop. - התקבלה בקשת שיוך מסד־נתונים הבא: + התקבלה בקשת שיוך מסד הנתונים הבא: %1 נא לתת לחיבור שם או מזהה ייחודיים, לדוגמה: @@ -985,14 +880,26 @@ chrome-laptop. 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? - קיים כבר מפתח הצפנה משותף בשם '%1'. האם כתיבה־עליו? + קיים כבר מפתח הצפנה משותף בשם "%1". האם לכתוב־עליו? + + + KeePassXC: Update Entry + KeePassXC: עדכון רשומה Do you want to update the information in %1 - %2? - האם לעדכן את המידע ב־%1 - %2? + האם לעדכן מידע ב־%1 - %2? + + + KeePassXC: Delete entry + KeePassXC: מחיקת רשומה A request for deleting entry "%1" has been received. @@ -1003,69 +910,61 @@ Do you want to delete the entry? - %1 (Passkey) - %1 (Passkey) + Converting attributes to custom data… + המרת תכונות לנתונים מותאמים אישית ... - KeePassXC - Create a new group - KeePassXC – יצירת קוצה חדשה + Abort + נטישה - Disable - מושבת + KeePassXC: Converted KeePassHTTP attributes + KeePassXC: תכונות המרה של KeePassHTTP - KeePassXC - Overwrite existing key? - KeePassXC – לכתוב על מפתח קיים? + 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 - Update Entry - KeePassXC – עדכון רשומה + KeePassXC: No entry with KeePassHTTP attributes found! + KeePassXC: לא נמצאה רשומה עם תכונות KeePassHTTP! - KeePassXC - Delete entry - KeePassXC – מחיקת רשומה + The active database does not contain an entry with KeePassHTTP attributes. + מסד הנתונים הפעיל לא מכיל רשומה עם תכונות KeePassHTTP. - KeePassXC - New key association request - KeePassXC – בקשת שיוך מפתח חדש + Don't show this warning again + לא להציג הזהרה זו שוב - Passkey - Passkey + KeePassXC: Legacy browser integration settings detected + KeePassXC: זוהו הגדרות שילוב דפדפן מדור קודם - KeePassXC - Passkey credentials - נתוני אמנה Passkey - KeePassXC - - - Register a new passkey to this entry: - רישום Passkey חדש לרשומה זו: - - - KeePassXC - Update passkey - KeePassXC – עדכון Passkey - - - Entry already has a passkey. -Do you want to overwrite the passkey in %1 - %2? - קיים כבר Passkey לרשומה. -האם לכתוב על ה־Passkey ב־%1 - %2? - - - Register - רישום + 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? + יש להעביר את הגדרות KeePassXC-Browser להגדרות מסד הנתונים. +פעולה זו נחוצה כדי לשמור על חיבורי הדפדפן הנוכחיים. +האם להעביר את ההגדרות הקיימות כעת? BrowserSettingsWidget Dialog - דו־שיח + דו שיח This is required for accessing your databases with KeePassXC-Browser - נדרש על מנת לאפשר לדפדפן־KeePassXC גישה למסדי־נתונים שלך + נדרש לגישה למסדי הנתונים באמצעות דפדפן-KeePassXC Enable browser integration @@ -1075,6 +974,10 @@ Do you want to overwrite the passkey in %1 - %2? General כללי + + Browsers installed as snaps are currently not supported. + דפדפנים המותקנים כ־snaps לא נתמכים כעת. + Enable integration for these browsers: איפשור שילוב עם דפדפנים אלה: @@ -1093,7 +996,7 @@ Do you want to overwrite the passkey in %1 - %2? Tor Browser - דפדפן תור + דפדפן טור Brave @@ -1114,7 +1017,7 @@ Do you want to overwrite the passkey in %1 - %2? Request to unlock the database if it is locked - בקשת שחרר נעילת מסד־נתונים אם הוא נעול + בקשת שחרר נעילת מסד הנתונים אם הוא נעול Only entries with the same scheme (http://, https://, …) are returned. @@ -1126,7 +1029,7 @@ Do you want to overwrite the passkey in %1 - %2? Only returns the best matches for a specific URL instead of all entries for the whole domain. - מחזירה רק את ההתאמות הטובות ביותר עבור כתובת אתר ספציפית במקום כל הרשומות של כל התחום. + מחזירה רק את ההתאמות הטובות ביותר עבור כתובת אתר ספציפית במקום כל הערכים עבור כל הדומיין. Return only best-matching credentials @@ -1142,12 +1045,12 @@ Do you want to overwrite the passkey in %1 - %2? All databases connected to the extension will return matching credentials. - כל מסדי־נתונים המחוברים להרחבה יחזירו אישורים תואמים. + כל מסדי הנתונים המחוברים להרחבה יחזירו אישורים תואמים. Search in all opened databases for matching credentials Credentials mean login data requested via browser extension - חפוש הרשאות בכל מסדי־נתונים הפתוחים + חפוש הרשאות בכל מסדי הנתונים הפתוחים Advanced @@ -1156,12 +1059,12 @@ Do you want to overwrite the passkey in %1 - %2? 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 - לעולם לא לשאול לפני עדכון אישורים + לא לשאול לעולם לפני עדכון אישורים Do not ask permission for HTTP Basic Auth @@ -1182,7 +1085,7 @@ Do you want to overwrite the passkey in %1 - %2? Do not prompt for KeePassHTTP settings migration. - לא להציג בקשה להעברת הגדרות KeePassHTTP. + לא להציג הנחיה להעברת הגדרות KeePassHTTP. Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. @@ -1246,6 +1149,27 @@ Do you want to overwrite the passkey in %1 - %2? Custom extension ID מזהה הרחבה מותאם אישית + + Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 + עקב ארגז־חול Snap, יש להריץ תסריט בכדי לאפשר שילוב דפדפן. <br /> ניתן להפיק את התסריט מ־%1 + + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 + על מנת ששילוב הדפדפן יעבוד, נדרש דפדפן־KeePassXC. +<br />ניתן להורדה ל־%1 ו־%2 ו־%3. %4 + + + Please see special instructions for browser extension use below + אנא עיין בהוראות מיוחדות בהמשך לשימוש בתוסף הדפדפן + + + <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. + <b>שגיאה:</b> מיקום השָׁרָת המְתַוֵּךְ המותאם אישית לא נמצא!<br/>שילוב הדפדפן לא יפעל ללא יישום שָׁרָת מְתַוֵּךְ. + + + <b>Warning:</b> The following options can be dangerous! + <b> אזהרה: </b> האפשרויות הבאות עלולות להיות מסוכנות! + Executable Files קבצי הפעלה @@ -1256,52 +1180,12 @@ Do you want to overwrite the passkey in %1 - %2? Select custom proxy location - בחירת מיקום שָׁרָת מְתַוֵּךְ מותאם אישית + בחירת מיקום שרת־מתווך מותאם אישית Select native messaging host folder location בחירת מיקום תיקיית מארח שרות הודעות מובנה - - Allow keepassxc-proxy to list all entries with their title, URL and UUID in connected databases. - לאפשר למתווך KeePassXC להציג רשית כל הרשומות עם הכותרות שלהן, מעני URI ו־UUID ממסד־הנתונים המקושר. - - - Allow limited access to all entries in connected databases (ignores site access restrictions) - לאפשר גישה מוגבלת לכל הרשומות ממסד־הנתונים המקושר (להתעלם ממגבלות גישה לאתרים) - - - <b>Warning:</b> Only adjust these settings if necessary. - <b>אזהרה:</b> לכוונן הגדרות אלו בלבד ככוש שנדרש. - - - The custom proxy location does not exist. - מיקום מתווך מותאם אישית לא קיים. - - - <b>Error:</b> The custom proxy location does not exist. Correct this in the advanced settings tab. - <b>שגיאה:</b> מיקום המתווך המותאם אישית לא קיים. נא לתקן זאת בלשונית הגדרות מתקדמות. - - - <b>Error:</b> The installed proxy executable is missing from the expected location: %1<br/>Please set a custom proxy location in the advanced settings or reinstall the application. - <b>שגיאה:</b> המתווך הבציע המותקן חסר במיקום הצפוי: %1<br/> נא לקבוע מיקום מתווך מותאם אישית בהגדרות מתקדמות או להתקין מחדש את היישום. - - - Allows using insecure http://localhost with passkeys for testing purposes. - אפשור שימוש ב־http://localhost לא מאובטח למטרות בדיקה. - - - Allow using localhost with passkeys - אפשור שימוש ב־localhost עם passkeys - - - KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. - דפדפן – KeePassXC נדרש כדי שתכלול דפדפן יפעל. <br /> ניתן להורידו עבור %1 ו־%2 ו־%3. - - - Browsers installed using Snap or Flatpak are not supported with exception to Firefox installed using Snap. - - CloneDialog @@ -1311,7 +1195,7 @@ Do you want to overwrite the passkey in %1 - %2? Append ' - Clone' to title - צרוף ' - שיבוט' לכותרת + צירוף ' - שיבוט' לכותרת Replace username and password with references @@ -1319,11 +1203,19 @@ Do you want to overwrite the passkey in %1 - %2? Copy history - היסטוריית עותקים + העתק הסטוריה CsvImportWidget + + Import CSV fields + ייבוא שדות CSV + + + filename + שם הקובץ + size, rows, columns גודל, שורות, עמודות @@ -1366,7 +1258,7 @@ Do you want to overwrite the passkey in %1 - %2? Last Modified - שונה לאחרונה + הוסגל לאחרונה Icon @@ -1382,11 +1274,11 @@ Do you want to overwrite the passkey in %1 - %2? Text is qualified by - מלל הוסמך על־ידי + מלל הוכשר על־ידי Text qualification - הסמכת מלל + הכשרת מלל Fields are separated by @@ -1402,7 +1294,7 @@ Do you want to overwrite the passkey in %1 - %2? Header lines skipped - המערכת דילגה על שורות כותרת עליונה + המערכת דלגה על שורות כותרת עליונה Number of header lines to discard @@ -1414,7 +1306,7 @@ Do you want to overwrite the passkey in %1 - %2? Consider '\' an escape character - נא לשקול תו החלצות '\' + נא לשקול תו החלצות '\' Preview @@ -1432,44 +1324,51 @@ Do you want to overwrite the passkey in %1 - %2? Column %1 עמודה %1 + + Imported from CSV file + יובא מקובץ CSV + + + Original data: + מידע מקורי: + + + Error(s) detected in CSV file! + זוהו בקובץ CSV שגיאות! + [%n more message(s) skipped] - [דילוג על הודעה נוספת %n][דילוג על %n הודעות נוספות][דילוג על %n הודעות נוספות] + [דילוג על הודעות נוספות %n][דילוג על %n הודעות נוספות][דילוג על %n הודעות נוספות][דלוג על %n הודעות נוספות] - Failed to parse CSV file: %1 - ניתוך קובץ CSV כשל: %1 + Error + שגיאה - Imported from CSV file: %1 - יובא מקובץ CSV: %1 - - - No Title Selected - לא נבחרה כותרת - - - No title column was selected, entries will be hard to tell apart. -Are you sure you want to import? - לא נבחרה כותרת עמודה, יהיה קשה להבחין בין רשומות. -האם לייבא? - - - Tags - תגים + CSV import: writer has errors: +%1 + ייבוא CSV: העורך מכיל שגיאות: +%1 CsvParserModel + + %1, %2, %3 + file info: bytes, rows, columns + %1, %2, %3 + + + %n byte(s) + בית %n%n בתים%n בתים%n בתים + %n row(s) - CSV row count - שורה %n%n שורות%n שורות + שורה %n%n שורות%n שורות%n שורות %n column(s) - CSV column count - עמודה %n%n עמודות%n עמודות + עמודה %n%n עמודות%n עמודות%n עמודות @@ -1485,15 +1384,15 @@ Are you sure you want to import? Unable to open file %1. - לא ניתן לפתוח קובץ %1. + לא יכול לפתוח את הקובץ %1. Error while reading the database: %1 - שגיאה בעת קריאת מסד־נתונים: %1 + שגיאה בזמן קריאת מסד־נתונים: %1 Could not save, database does not point to a valid file. - לא ניתן לשמור, מסד־נתונים לא מצביע על קובץ תקין. + לא ניתן לשמור, מסד הנתונים לא מצביע על קובץ תקין. Database save is already in progress. @@ -1501,11 +1400,11 @@ Are you sure you want to import? Could not save, database has not been initialized! - לא ניתן לשמור, מסד־נתונים לא אותחל! + לא ניתן לשמור, מסד הנתונים לא אותחל! Database file has unmerged changes. - בקובץ מסד־נתונים קיימים שינויים שלא מוזגו. + בקובץ מסד הנתונים קיימים שינויים שלא מוזגו. %1 @@ -1519,15 +1418,7 @@ Backup database located at %2 Recycle Bin - סל־מחזור - - - Database file read error. - - - - No file path was provided. - + סל המחזור @@ -1541,23 +1432,43 @@ Backup database located at %2 DatabaseOpenWidget Unlock KeePassXC Database - שחרור נעילת מסד־נתוני KeePassXC + שחרור נעילת מסד־נתונים KeePassXC Enter Password: - הכנס/י ססמה: + הזנת ססמה: Password field שדה ססמה + + Enter Additional Credentials (if any): + הזנת אישורים נוספים (ככל שקיימים): + + + Key File: + קובץ ססמה: + + + Key file help + עזרת קובץ מפתח + Hardware key slot selection בחירת עמדה למפתח חומרה + + Hardware Key: + מפתח חומרה: + + + Hardware key help + עזרת מפתח חומרה + Key file to unlock the database - קובץ מפתח לשחרור נעילת מסד־נתונים + קובץ מפתח לשחרור נעילת מסד־הנתונים Browse for key file @@ -1567,9 +1478,17 @@ Backup database located at %2 Browse… עיון... + + Refresh hardware tokens + רענון אסימוני חומרה + + + Refresh + רענן + Unlock Database - שחרור נעילת מסד־נתונים + שחרור נעילת מסד הנתונים Cancel @@ -1595,13 +1514,13 @@ You can try to open it anyway, but it may be incomplete and saving any changes may incur data loss. We recommend you update your KeePassXC installation. - מסד־נתונים שאתה מנסה לפתוח היה קרוב לוודאי -נוצר על ידי גרסה חדשה יותר של Keepassxc. + מסד הנתונים אותו נעשה ניסיון לפתוח נוצר קרוב לוודאי + על ידי גרסת Keepassxc חדשה יות -אתה יכול לנסות לפתוח אותו בכל מקרה, אבל זה עשוי להיות לא שלם -ושמירת שינויים עלולה לגרום לאובדן נתונים. +ניתן לנסות לפתוח אותו למרות זאת, אך עשוי הוא עשוי להיות חלקי +ושמירת שינויים למסד הנתונים שנפתח, עלולה לגרום לאובדן נתונים. -אנו ממליצים שתעדכן את ההתקנה של KeepassXC שלך. +אנו ממליצים לעדכן את התקנת KeepassXC שבמחשב. Open database anyway @@ -1627,7 +1546,11 @@ To prevent this error from appearing, you must go to "Database Settings / S Retry with empty password - נא לנסות שנית עם ססמה ריקה + נסה שוב עם ססמה ריקה + + + Failed to authenticate with Touch ID + אימות באמצעות מזהה מגע כשל Failed to open key file: %1 @@ -1635,15 +1558,15 @@ To prevent this error from appearing, you must go to "Database Settings / S Old key file format - תסדיר קובץ מפתח ישן + תבנית קובץ מפתח ישן You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database &gt; Database Security &gt; Change Key File.</strong><br> - נעשה שימוש בתסדיר קובץ מפתח ישן ש־KeePassXC עשוי<br>להפסיק לתמוך בעתיד.<br><br>נא שקול ליצור קובץ מפתח חדש מהתפריט:<br><strong>מסד־נתונים -> אבטחת מסד־נתונים -> שינוי קובץ מפתח.</strong><br> + נעשה שימוש בתבנית קובץ מפתח ישן ש־KeePassXC עשוי<br>להפסיק לתמוך בעתיד.<br><br>נא שקול ליצור קובץ מפתח חדש מהתפריט:<br><strong>מסד־נתונים -> אבטחת מסד־נתונים -> שינוי קובץ מפתח.</strong><br> Don't show this warning again - לא להציג אזהרה זו שוב + לא להציג הזהרה זו שוב All files @@ -1655,75 +1578,47 @@ To prevent this error from appearing, you must go to "Database Settings / S Select key file - בחירת קובץ מפתח + בחירת קובץ ססמה Cannot use database file as key file לא ניתן להשתמש בקובץ מסד־נתונים כקובץ מפתח + + You cannot use your database file as a key file. +If you do not have a key file, please leave the field empty. + לא ניתן להשתמש בקובץ מסד הנתונים כקובץ מפתח. +אם אין קובץ מפתח, נא להשאיר את השדה ריק. + + + Detecting hardware keys… + זוהה מפתח חומרה... + + + No hardware keys detected + לא זוהה מפתח חומרה + + + Select hardware key… + בחירת מפתח חומרה... + + + <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information…</p> + <p>בנוסף לססמה, אפשר להשתמש בקובץ סודי כדי לשפר את אבטחת מסד הנתונים. ניתן לחולל קובץ זה בהגדרות אבטחת מסד הנתונים.</p><p>זה <strong>לא</strong> קובץ מסד הנתונים *.kdbx !<br>אם קובץ מפתח ינו בנמצא, נא להשאיר שדה זה ריק.</p><p>הקשה לקבלת מידע נוסף...</p> + + + <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +<p>Click for more information…</p> + <p>ניתן להשתמש במפתח אבטחת חומרה כגון <strong>YubiKey</strong> או <strong>OnlyKey</strong> עם חריצים שתצורתם נקבעה עבור HMAC-SHA1.</p> +<p>הקשה לקבלת מידע נוסף...</p> + authenticate to access the database - נא לאמת עלמנת לגשת למסד הנתונים + נא לאמת לגישה למסד הנתונים - Failed to authenticate with Quick Unlock: %1 - אימות עם שחרור נעילה מהיר כשל: %1 - - - Select Key File: - בחירת קובץ מפתח: - - - <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!</p> - <p> בנוסף לססמה, ניתן להשתמש בקובץ סודי להעצמת ביטחון מסד הנתונים. ניתן לחולל קובץ זה מהגדרות אבטחת מסד הנתונים.</p><p>זה <strong>לא</strong> קובץ מסד נתונים *.kdbx. - - - Use hardware key [Serial: %1] - שימוש במפתח חומרה [Serial: %1] - - - Use hardware key - שימוש במפתח חומרה - - - Your database file is NOT a key file! -If you don't have a key file or don't know what that is, you don't have to select one. - קובץ מסד נתונים הוא לא קובץ מפתח. -אם אין קובץ מפתח או לא ברור מה זה, לא נדרש לקבוע כזה. - - - KeePassXC database file selected - קובץ מסד נתונים KeePassXC - - - The file you selected looks like a database file. -A database file is NOT a key file! - -Are you sure you want to continue with this file?. - הקובץ שנבחר נראה כמו קובץ מסד נתונים. -קובץ מסד נתונים הוא לא קובץ מפתח! - -האם להמשיך עם קובץ זה? - - - No hardware keys found. - לא נמצאו מפתחות חומרה. - - - Refresh Hardware Keys - רענון מפתחות חומרה - - - Click to add a key file. - הקשה להוספת קובץ מפתח חדש. - - - <a href="#" style="text-decoration: underline">I have a key file</a> - <a href="#" style="text-decoration: underline">יש ברשותי קובץ מפתח</a> - - - Hardware keys found, but no slots are configured. - + Failed to authenticate with Windows Hello: %1 + אימות באמצעות Windows Hello כשל: %1 @@ -1735,6 +1630,10 @@ Are you sure you want to continue with this file?. DatabaseSettingsDialog + + Advanced Settings + הגדרות מתקדמות + General כללי @@ -1749,7 +1648,7 @@ Are you sure you want to continue with this file?. Encryption Settings - הגדרות הצפנה + הצנת ההגדרות Browser Integration @@ -1759,22 +1658,6 @@ Are you sure you want to continue with this file?. Maintenance תחזוקה - - KeeShare - KeeShare - - - Secret Service Integration - שילוב שירות חשאי - - - Remote Sync - סנכרון מרחוק - - - Database Settings: %1 - הגדרות מסד־נתונים: %1 - DatabaseSettingsWidgetBrowser @@ -1782,6 +1665,18 @@ Are you sure you want to continue with this file?. KeePassXC-Browser settings הגדרות דפדפן KeePassXC + + Convert KeePassHTTP data + המרת נתוני KeePassHTTP + + + Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data + המרת מאפייני תוכנת־מורשת KeePassHTTP לנתוני דפדפן KeePassXC תואמים. + + + Refresh database root group ID + רענון מזהה קבוצת שורש מסד־נתונים + Disconnect all browsers ניתוק כל הדפדפנים @@ -1790,13 +1685,9 @@ Are you sure you want to continue with this file?. Forget all site-specific settings on entries לשכוח את כל ההגדרות המסוימות לאתר ברשומות - - Refresh database root group ID - רענון מזהה קבוצת שורש מסד־נתונים - Stored keys - מפתחות מאוחסנים + אחסן ססמאות Stored browser keys @@ -1834,7 +1725,7 @@ This may prevent connection to the browser plugin. Enable Browser Integration to access these settings. - איפשור שילוב דפדפנים לגישה להגדרות. + אפשור שילוב דפדפנים לגישה להגדרות. Do you really want to disconnect all browsers? @@ -1842,13 +1733,21 @@ This may prevent connection to the browser plugin. האם לנתק את כל הדפדפנים? פעולה זו עשויה למנוע חיבור למתקע הדפדפן. + + KeePassXC: No keys found + KeePassXC: לא נמצא מפתח + No shared encryption keys found in KeePassXC settings. לא נמצאו מפתחות הצפנה משותפים בהגדרות KeePassXC. + + KeePassXC: Removed keys from database + KeePassXC: מפתחות שהוסרו ממסד הנתונים + Successfully removed %n encryption key(s) from KeePassXC settings. - מפתח הצפנה משותף %n הוסר בהצלחה מהגדרות KeePassXC.%n מפתחות הצפנה משותפים הוסרו בהצלחה מהגדרות KeePassXC.%n מפתחות הצפנה משותפים הוסרו בהצלחה מהגדרות KeePassXC. + מפתח הצפנה משותף %n הוסר בהצלחה מהגדרות KeePassXC.%n מפתחות הצפנה משותפים הוסרו בהצלחה מהגדרות KeePassXC.%n מפתחות הצפנה משותפים הוסרו בהצלחה מהגדרות KeePassXC.%n מפתחות הצפנה משותפים הוסרו בהצלחה מהגדרות KeePassXC. Do you really want forget all site-specific settings on every entry? @@ -1862,15 +1761,33 @@ Permissions to access entries will be revoked. Abort - נטישה + הפסק וצא + + + KeePassXC: Removed permissions + KeePassXC: הרשאות הוסרו Successfully removed permissions from %n entry(s). - הרשאות הוסרו בהצלחה מרשומה %n.הרשאות הוסרו בהצלחה מ־%n רשומות.הרשאות הוסרו בהצלחה מ־%n רשומות. + הרשאה הוסרה בהצלחה מ־%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 convert all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + האם להמיר את כל נתוני שילוב הדפדפן מדור קודם לתקן העדכני ביותר? +פעולה זו נחוצה כדי לשמור על תאימות עם מתקע הדפדפן. Refresh database ID @@ -1879,27 +1796,7 @@ Permissions to access entries will be revoked. Do you really want refresh the database ID? This is only necessary if your database is a copy of another and the browser extension cannot connect. - האם לרענן את מזהה מסד־נתונים? נחוץ רק אם מסד־נתונים הוא עותק של מסד־נתונים אחר ומתקע הדפדפן לא מתחבר. - - - Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data - המרת מאפייני תוכנת־מורשת KeePassHTTP לנתוני דפדפן KeePassXC תואמים. - - - No keys found - לא נמצאו מפתחות - - - Removed keys from database - מפתחות שהוסרו ממסד הנתונים - - - Removed permissions - התרים שהוסרו - - - No entry with permissions found! - לא נמצאה רשומה עם התרים! + האם לרענן את מזהה מסד הנתונים? נחוץ רק אם מסד הנתונים הוא עותק של מסד־נתונים אחר ומתקע הדפדפן לא מתחבר. @@ -1916,7 +1813,7 @@ This is only necessary if your database is a copy of another and the browser ext 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? - אזהרה! לא הוגדרה ססמה. השימוש במסד־נתונים ללא ססמה לא מומלץ! + אזהרה! לא הוגדרה ססמה. השימוש במסד נתונים ללא ססמה לא מומלץ! האם להמשיך ללא ססמה? @@ -1930,7 +1827,7 @@ Are you sure you want to continue without a password? You must add at least one encryption key to secure your database! - נא להוסיף לפחות מפתח הצפנה אחד לאבטחת מסד־נתונים! + נא להוסיף לפחות מפתח הצפנה אחד לאבטחת מסד הנתונים! Unknown error @@ -1940,18 +1837,6 @@ Are you sure you want to continue without a password? Failed to change database credentials שינוי אישורי מסד־נתונים כשל - - Weak password - ססמה חלשה - - - This is a weak password! For better protection of your secrets, you should choose a stronger password. - זוהי ססמה חלשה! להגנה טובה יותר על קבצים חשאיים נא לבחור בססמה חזקה יותר. - - - The provided password does not meet the minimum quality requirement. - הססמה שסופקה לא עומדת בדרישת האיכות המזערית. - DatabaseSettingsWidgetEncryption @@ -1959,29 +1844,37 @@ Are you sure you want to continue without a password? Decryption Time: זמן פענוח: + + Change existing decryption time + שינוי זמן פענוח קיים + + + Change + שינוי + Decryption time in seconds זמן פענוח בשניות Higher values offer more protection, but opening the database will take longer. - ערכים גבוהים יותר מציעים הגנה טובה יותר, אך פתיחת מסד־נתונים תימשך זמן רב יותר. + ערכים גבוהים יותר מציעים הגנה טובה יותר, אך פתיחת מסד הנתונים תימשך זמן רב יותר. Database format: - תסדיר מסד־נתונים: + תבנית מסד־נתונים: Database format - תסדיר מסד־נתונים + תבנית מסד־נתונים Format cannot be changed: Your database uses KDBX 4 features - לא ניתן לשנות תסדיר: מסד־נתונים משתמש בתכונות KDBX 4 + לא ניתן לשנות תבנית: מסד הנתונים משתמש בתכונות KDBX 4 Unless you need to open your database with other programs, always use the latest format. - יש להשתמש תמיד תסדיר האחרון (העדכני ביותר). אלא אם יידרש לפתוח את מסד הנתונים גם באמצעות תוכנות אחרות. + יש להשתמש תמיד במבנה האחרון (העדכני ביותר). אלא אם יידרש לפתוח את מסד הנתונים גם באמצעות תוכנות אחרות. Encryption Algorithm: @@ -2039,10 +1932,15 @@ Are you sure you want to continue without a password? KDBX 3 KDBX 3 + + 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. @@ -2050,7 +1948,7 @@ Are you sure you want to continue without a password? If you keep this number, your database may take hours, days, or even longer to open. נעשה שימוש במספר גבוה מאוד של סבבי המרת מפתח עם ארגון2. -אם מספר זה יישמר, פתיחת מסד־נתונים עשויה להימשך שעות או ימים או אפילו יותר. +אם מספר זה יישמר, פתיחת מסד הנתונים עשויה להימשך שעות או ימים או אפילו יותר. Understood, keep number @@ -2071,7 +1969,7 @@ If you keep this number, your database may take hours, days, or even longer to o If you keep this number, your database will not be protected from brute force attacks. נעשה שימוש במספר נמוך מאוד של סבבי המרת מפתח עם AES-KDF. -אם מספר זה ישמר, מסד־נתונים לא יהיה מוגן מפני תְּקִיפָה כּוֹחָנִית. +אם מספר זה ישמר, מסד הנתונים לא יהיה מוגן מפני תְּקִיפָה כּוֹחָנִית. KDF unchanged @@ -2084,24 +1982,12 @@ If you keep this number, your database will not be protected from brute force at MiB Abbreviation for Mebibytes (KDF settings) - מילי־ביט מילי־ביטים מיב + מיל. מיל. מיל. מיב thread(s) Threads for parallel execution (KDF settings) - שִׁרְשׁוּרשִׁרְשׁוּריםשִׁרְשׁוּרים - - - Encryption Settings: - הגדרות הצפנה: - - - Basic - בסיסי - - - Advanced - מתקדם + שִׁרְשׁוּרשִׁרְשׁוּריםשִׁרְשׁוּריםשִׁרְשׁוּרים @@ -2139,7 +2025,7 @@ If you keep this number, your database will not be protected from brute force at Database description: - תיאור מסד־נתונים: + תיאור מסד הנתונים: Database description field @@ -2159,7 +2045,7 @@ If you keep this number, your database will not be protected from brute force at Maximum number of history items per entry - מספר פרטי היסטוריה מרבי לרשומה + מספר מרבי של פרטי היסטוריה לרשומה Maximum size of history per entry @@ -2179,7 +2065,7 @@ If you keep this number, your database will not be protected from brute force at Enable compression (recommended) - איפשור דחיסה (מומלץ) + איפור דחיסה (מומלץ) Delete Recycle Bin @@ -2201,7 +2087,7 @@ the oldest history items of an entry will be removed such that only the specified amount of entries remain at most. בעת שמירת גדרה זו או עריכת רשומה -פריטי היסטורית־רשומה היישנים ביותר יוסרו +פריטי ההיסטורית רשומה היישנים ביותר יוסרו כך שלכול היותר תיוותר רק כמות הרשומות שצוינה. @@ -2231,70 +2117,6 @@ removed from the database. ערכים שימחקו מסל המיחזור יוסרו ממסד הנתונים. - - Autosave delay since last change - השהיית שמירה אוטומטית מאז השינוי האחרון - - - Autosave delay - השהיית שמירה אוטומטית - - - Autosave delay since last change in minutes - השהית שמירה אוטומטית בדקות מאז שינוי אחרון - - - min - דקה - - - Autosave delay since last change checkbox - תיבת סימון השהית שמירה אוטומטית בדקות מאז שינוי אחרון - - - Public Database Metadata - - - - Warning: the following settings are not encrypted. - - - - Display name: - שם מצג: - - - Publically visible display name used on the unlock dialog - - - - Database public display name - - - - Display color: - צבע תצוגה: - - - Publically visible color used on the unlock dialog - - - - Database public display color chooser - - - - Clear - נקה - - - Display icon: - סמל תצוגה: - - - Select Database Icon - - DatabaseSettingsWidgetKeeShare @@ -2368,14 +2190,14 @@ removed from the database. Purged %n icon(s) from the database. - סמל %n נמחק ממסד־נתונים.%n סמלים נמחקו ממסד־נתונים.%n סמלים נמחקו ממסד־נתונים. + סמל %n נמחק ממסד הנתונים.%n סמלים נמחקו ממסד הנתונים.%n סמלים נמחקו ממסד הנתונים.%n סמלים נמחקו ממסד הנתונים. DatabaseSettingsWidgetMetaDataSimple Database Name: - שם מסד־נתונים + שם מסד־נתונים: Database name field @@ -2390,141 +2212,6 @@ removed from the database. שדה תיאור מסד־נתונים - - DatabaseSettingsWidgetRemote - - Sync Commands - פקודות סנכרון - - - Remove - הסרה - - - Command Settings - הגדרות פקודה - - - Name - שם - - - Save - שמירה - - - Download - הורדה - - - Command: - פקודה: - - - Download command field - הורדת שדה פקודה - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - לדוגמה: "sftp user@hostname" או "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - - - Input: - קלט: - - - Download input field - הורדת שדה קלט - - - Upload - האלעה - - - Upload command field - העלאת שדה פקודה - - - e.g.: "sftp user@hostname" or "scp {TEMP_DATABASE} user@hostname:DatabaseOnRemote.kdbx" - לדוגמה: "sftp user@hostname" או "scp {TEMP_DATABASE} user@hostname:DatabaseOnRemote.kdbx" - - - Upload input field - העלאת שדה קלט - - - Name cannot be empty. - שם לא יכול להיות ריק - - - Test - בדיקה - - - Download command cannot be empty. - פקודת הורדה לא יכול להיות ריק - - - Download failed with error: %1 - פקודת הורדה עם שגיאה: %1 - - - Download finished, but file %1 could not be found. - הורדת קבצים שהסתיימו, אבל קובץ %1 לא נמצא. - - - Download successful. - הורדה צלחה. - - - Save Remote Settings - שמירת הגדרות מרוחקות - - - You have unsaved changes. Do you want to save them? - קיימים שינויים שלא נשמרו. האם לשמור אותם? - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - לדוגמה: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} משמש כשומר מקום לאחסון מסד הנתונים במיקום זמני. -הפקודה אמורה להסתיים ב'יציאה'. במקרה של `sftp` כפקודה אחרונה, יש לשלוח פקודת `exit` - - - - e.g.: -put {TEMP_DATABASE} DatabaseOnRemote.kdbx -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - לדוגמה: -put {TEMP_DATABASE} DatabaseOnRemote.kdbx -exit ---- -{TEMP_DATABASE} משמש כשומר מקום לאחסון מסד הנתונים במיקום זמני. -הפקודה אמורה להסתיים ב'יציאה'. במקרה של `sftp` כפקודה אחרונה, יש לשלוח פקודת `exit` - - - - Timeout: - - - - seconds - שניות - - DatabaseTabWidget @@ -2534,8 +2221,8 @@ exit The created database has no key or KDF, refusing to save it. This is definitely a bug, please report it to the developers. - למסד־נתונים שנוצר אין מפתח או KDF, והוא מסרב לשמור אותו. -זה בהחלט תקל, נא דווח על כך לצוות הפתוח. + למסד הנתונים שנוצר אין מפתח או ש־KDF מסרב לקבל אותו. +זהו בהחלט תקל, נא לדווח עליו לצוות הפתוח. KeePass 2 Database @@ -2551,16 +2238,32 @@ This is definitely a bug, please report it to the developers. Failed to open %1. It either does not exist or is not accessible. - פתיחת %1 כשלה. יתכן והוא לא קיים או לא נגיש + פתיחת %1 כשלה. יתכן והוא לא קיים או לא נגיש. CSV file קובץ CSV + + Select CSV file + בחירת קובץ CSV + Merge database מיזוג מסד־נתונים + + KeePass 1 database + מסד־נתונים KeePass 1 + + + Open KeePass 1 database + פתיחת מסד־נתונים KeePass 1 + + + Open OPVault + פתיחת OPVault + Export database to CSV file ייצוא מסד־נתונים לקובץ CSV @@ -2573,6 +2276,28 @@ This is definitely a bug, please report it to the developers. Writing the HTML file failed. כתיבת קובץ ה־HTML כשלה. + + Export Confirmation + אישור ייצוא + + + You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? + מסד הנתונים עומד להיות מיוצא לקובץ לא מוצפן. פעולה זו תשאיר את ססמאות ומידע רגיש, פגיעים! האם להמשיך? + + + New Database + מסד־נתונים חדש + + + %1 [New Database] + Database tab name modifier + %1 [מסד־נתונים חדש] + + + %1 [Locked] + Database tab name modifier + %1 [נעול] + Export database to XML file ייצוא מסד נתונים לקובץ XML @@ -2585,31 +2310,9 @@ This is definitely a bug, please report it to the developers. Writing the XML file failed כתיבה לקובץ HTML כשלה. - - Export Confirmation - אישור ייצוא - - - You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? - מסד־נתונים עומד להיות מיוצא לקובץ לא מוצפן. פעולה זו תשאיר את ססמאות ומידע רגיש, פגיעים! האם להמשיך? - - - %1 [Locked] - Database tab name modifier - %1 [נעול] - - - %1 [Temporary] - Database tab name modifier - %1 [זמני] - DatabaseWidget - - Searches and Tags - חיפוש ותיוג - Searching… חיפוש... @@ -2658,10 +2361,6 @@ This is definitely a bug, please report it to the developers. Expired entries רשומות פגות־תוקף - - Entries expiring within %1 day(s) - רשומות שתוקפן יפוג בתוך יום %1רשומות שתוקפן יפוג בתוך %1 ימיםרשומות שתוקפן יפוג בתוך %1 ימים - No current database. אין מסד־נתונים נוכחי. @@ -2672,11 +2371,11 @@ This is definitely a bug, please report it to the developers. Successfully merged the database files. - קובצי מסד־נתונים מוזגו בהצלחה. + קובצי מסד הנתונים מוזגו בהצלחה. Database was not modified by merge operation. - מסד־נתונים לא הוסגל כתוצאה מפעולת המיזוג. + מסד הנתונים לא הוסגל כתוצאה מפעולת המיזוג. Search Results (%1) @@ -2686,36 +2385,24 @@ This is definitely a bug, please report it to the developers. No Results אין תוצאות - - Save - שמירה - - - Enter a unique name or overwrite an existing search from the list: - נא להזין שם ייחודי או לכתוב על שם חיפוש מהרשימה: - - - Save Search - שמירת חיפוש - Lock Database? האם לנעול מסד־נתונים? You are editing an entry. Discard changes and lock anyway? - הרשומה בשלבי עריכה. האם לנטוש שינויים ולנעול בכל זאת? + הרשומה בעריכה. האם לנטוש שינויים ולנעול בכל זאת? "%1" was modified. Save changes? - "%1" השתנה. + "%1" הוסגל. האם לשמור שינויים? Database was modified. Save changes? - מסד־נתונים השתנה. + מסד הנתונים הוסגל. האם לשמור שינויים? @@ -2726,6 +2413,26 @@ Save changes? 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? + קיימים שינויים בקובץ מסד הנתונים שלא נשמרו. +האם למזג את השינויים? + + + Could not open the new database file while attempting to autoreload. +Error: %1 + לא ניתן לפתוח את קובץ מסד הנתונים החדש בעת ניסיון אוטומטית טעינה מחדש . +שגיאה: %1 + Disable safe saves? האם להשבית שמירות בטוחות? @@ -2733,12 +2440,12 @@ Save changes? 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 כשל בשמירת מסד־נתונים מספר פעמים. סביר להניח שהדבר נגרם על־ידי שירות סנכרון קבצים שנועל את קובץ היעד לשמירה. + KeePassXC כשל בשמירת מסד הנתונים מספר פעמים. סביר להניח שהדבר נגרם על־ידי שירותי סינכרון קבצים הנועלים את קובץ השמירה. האם להשבית שמירות בטוחות ולנסות שוב? Writing the database failed: %1 - כתיבת מסד־נתונים כשלה: %1 + כתיבת מסד הנתונים כשלה: %1 Passwords @@ -2762,100 +2469,31 @@ Disable safe saves and try again? Are you sure you want to permanently delete everything from your recycle bin? - האם למחוק הכל מסל־המיחזור לצמיתות? + האם למחוק הכול מסל־המיחזור לצמיתות? Could not find database file: %1 לא ניתן למצוא קובץ מסד־נתונים: %1 - - New Database - מסד־נתונים חדש + + Entries expiring within %1 day(s) + רשומות שתוקפן יפוג בתוך יום %1רשומות שתוקפן יפוג בתוך %1 ימיםרשומות שתוקפן יפוג בתוך %1 ימיםרשומות שתוקפן יפוג בתוך %1 ימים - %1 [New Database] - Database tab name modifier - %1 [מסד־נתונים חדש] + Searches and Tags + חיפוש ותיוג - Remote Sync did not contain any download or upload commands. - סנכרון מרוחק לא מכיל הורדה הורדה או העלאה. + Enter a unique name or overwrite an existing search from the list: + נא להזין שם ייחודי או לכתוב על שם חיפוש מהרשימה: - Remote sync '%1' completed successfully! - סנכרון מרוחק '%1' הושלם בהצלחה! + Save + שמירה - Remote sync '%1' failed: %2 - סנכרון מרוחק '%1' כשל: %2 - - - Error while saving database %1: %2 - שגיאה בעת שמירת מסד נתונים %1: %2 - - - Downloading... - הורדה... - - - Uploading... - מתבצעת העלאה... - - - Syncing... - מתבצע סנכרון... - - - Remove passkey from entry - הסרת Passkey מרשומה - - - Do you want to remove the passkey from this entry? - האם להסיר את ה־Passkey מרשומה זו? - - - The database file "%1" was modified externally - - - - Do you want to load the changes? - - - - Reload database - - - - Reloading database… - - - - Reload canceled - - - - Reload successful - - - - Reload pending user action… - - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes<br>Ignore the changes on disk until save<br>Discard unsaved changes - - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes then save<br>Overwrite the changes on disk<br>Discard unsaved changes - - - - Database file overwritten. - - - - Database file on disk cannot be unlocked with current credentials.<br>Enter new credentials and/or present hardware key to continue. - + Save Search + שמירת חיפוש @@ -2906,7 +2544,11 @@ Disable safe saves and try again? n/a - ל/ז + ל/ר + + + (encrypted) + (מוצפן) Select private key @@ -2960,7 +2602,7 @@ Would you like to correct it? Entry updated successfully. - רשומה עודכנה בהצלחה + רשומה עודכנה בהצלחה. Unsaved Changes @@ -2994,25 +2636,21 @@ Would you like to correct it? Hide הסתרה - - %n hour(s) - שעה %1%1 שעות%1 שעות - %n week(s) - שבוע %n%n שבועות%n שבועות + שבוע %n%n שבועות%n שבועות%n שבועות %n month(s) - חודש %n%n חודשים%n חודשים + חודש %n%n חודשים%n חודשים%n חודשים %n year(s) - שנה %n%n שנים%n שנים + שנה %n%n שנים%n שנים%n שנים - - Failed to decrypt SSH key, ensure password is correct. - פענוח מפתח SSH כשל, נא לוודא שהססמה תקינה. + + %n hour(s) + שעה %n%1 שעות%1 שעות%1 שעות @@ -3102,7 +2740,7 @@ Would you like to correct it? EditEntryWidgetAutoType Enable Auto-Type for this entry - איפשור הקלדה־אוטומטית ברשומה זו + אפשור הקלדה־אוטומטית ברשומה זו Inherit default Auto-Type sequence from the group @@ -3110,7 +2748,7 @@ Would you like to correct it? Use custom Auto-Type sequence: - שימוש ברצף הקלדה־אוטומטית ברירת מחדל + שימוש ברצף הקלדה־אוטומטית ברירת מחדל: Custom Auto-Type sequence @@ -3122,7 +2760,7 @@ Would you like to correct it? Window Associations - שיוך חלון + שיוכי חלונות Existing window associations @@ -3132,19 +2770,9 @@ Would you like to correct it? Add new window association הוספת שיוך חלון חדש - - + - Add item - + - Remove selected window association - הסרת שיוך החלון שנבחר - - - - - Remove item - - + הסרת חלון צרופות שנבחר Window title: @@ -3164,15 +2792,29 @@ Would you like to correct it? Use a specific sequence for this association: - נא להשתמש ברצף מסויים עבור שיוך זה: + נא להשתמש ברצף מבויים עבור שיוך זה: Custom Auto-Type sequence for this window רצף הקלדה־אוטומטית מותאם אישית לחלון זה + + + + Add item + + + + + - + Remove item + - + EditEntryWidgetBrowser + + These settings affect to the entry's behaviour with the browser extension. + הגדרות אלה משפיעות על התנהגות הרשומה בהרחברת הדפדפן. + General כללי @@ -3183,16 +2825,28 @@ Would you like to correct it? Skip Auto-Submit for this entry - דלוג על Auto־Submit ברשומה זו + דלוג על Auto-Submit ברשומה זו + + + Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. + לשלוח הגדרה זו רק לדפדפן לדו־שיח HTTP Auth. אם אופשר, טופסי התחברות רגילים לא יציגו רשומה זו לבחירה. Use this entry only with HTTP Basic Auth - נא להשתמש ברשומה זו רק ב־HTTP Basic Auth + שימוש ברשומה זו רק באמצעות HTTP Basic Auth + + + Do not send this setting to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. + לא לשלח הגדרה זו לדפדפן לדו־שיח HTTP Auth. אם אופשר, דו־שיח HTTP Auth לא יציג רשומה זו לבחירה. Do not use this entry with HTTP Basic Auth לא להשתמש ברשומה זו ב־HTTP Basic Auth + + Additional URL's + מעני URL נוספים + Add הוספה @@ -3205,22 +2859,6 @@ Would you like to correct it? Edit עריכה - - These settings affect the entry's behaviour with the browser extension. - הגדרות אלו משפיעות על התנהגות הרשומה עם הרחבות הדפדפן. - - - Additional URLs - מעני URL נוספים - - - Only send this entry to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. - לשלוח ערך זה לדפדפן רק עבור תיבות דו־שיח HTTP Auth. אם מופעל, טפסי התחברות רגילים לא יציגו ערך זה לבחירה. - - - Do not send this entry to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. - לא לשלוח ערך זה לדפדפן עבור תיבות דו־שיח של HTTP Auth. אם מופעל, תיבות דו־שיח HTTP Auth לא יציגו ערך זה לבחירה. - EditEntryWidgetHistory @@ -3258,7 +2896,7 @@ Would you like to correct it? Delete all - מחיקת הכל + מחיקת הכול @@ -3297,7 +2935,7 @@ Would you like to correct it? Download favicon for URL - הורדת favicon למען URL + הורדת פביקון למען URL Title field @@ -3356,7 +2994,7 @@ Would you like to correct it? Remove key from agent when database is closed/locked - הסרת מפתח מהסוכן כשמסד־נתונים סגור/נעול + הסרת מפתח מהסוכן כשמסד הנתונים סגור/נעול Comment @@ -3364,7 +3002,7 @@ Would you like to correct it? Add key to agent when database is opened/unlocked - הוספת מפתח לסוכן בעת פתיחה/שחרור נעילת מסד־נתונים + הוספת מפתח לסוכן כאשר מסד־נתונים נפתח/שוחרר מנעילה Decrypt @@ -3386,6 +3024,19 @@ Would you like to correct it? Private key מפתח פרטי + + External file + קובץ חיצוני + + + Browser for key file + דפדוף לקובץ מפתח + + + Browse… + Button for opening file dialog + עיון... + Attachment צרופה @@ -3402,23 +3053,6 @@ Would you like to correct it? Remove from agent הסרה מסוכן - - External file - קובץ חיצוני - - - Browser for key file - דפדוף לקובץ מפתח - - - Browse… - Button for opening file dialog - עיון... - - - Generate - חילול - Select attachment file בחירת קובץ צרופה @@ -3429,7 +3063,7 @@ Would you like to correct it? n/a - ל/ז + ל/ר Remove key from agent after @@ -3437,16 +3071,12 @@ Would you like to correct it? Remove key from agent after specified seconds - הסרת מפתח מהסוכן לאחר מספר השניות שצוינו + הסרה מפתח מהסוכן לאחר מספר השניות שצוינו seconds שניות - - Clear agent - - EditGroupWidget @@ -3458,6 +3088,10 @@ Would you like to correct it? Icon סמל + + Browser Integration + שילוב דפדפן + Properties מאפיינים @@ -3474,17 +3108,13 @@ Would you like to correct it? Group has unsaved changes קיימים שינויי קבוצה שטרם נשמרו - - Browser Integration - שילוב דפדפן - Enable איפשור Disable - השבתה + מושבת Inherit from parent group (%1) @@ -3503,7 +3133,7 @@ Would you like to correct it? Hide entries from browser extension toggle for this and sub groups - הסתר רשומות מתוסף של הדפדפן ועבור תתי קבוצות. + הסתרת רשומות ממחלף הרחבות דפדפן עבור זה ועבור קבוצות משנה Skip Auto-Submit for entries: @@ -3537,14 +3167,6 @@ Would you like to correct it? Omit WWW subdomain from matching toggle for this and sub groups השמטת תת־תחום WWW ממחלף ההתאמה, לקבוצה זו ותתי־קבוצות - - Restrict matching to given browser key: - הגבלת התאמות למפתחות דפדפן נתונים: - - - Restrict matching to given browser key toggle for this and sub groups - להגביל התאמה כדי לספק מיתוג מפתח דפדפן עבור זה ועבור קבוצות משה. - EditGroupWidgetKeeShare @@ -3586,7 +3208,7 @@ Would you like to correct it? Clear - צלול + נקה Inactive @@ -3607,7 +3229,7 @@ Would you like to correct it? Your KeePassXC version does not support sharing this container type. Supported extensions are: %1. - גרסת KeePassXC אינה תומכת בשיתוף סוג מיכל זה. + גרסת KeePassXC לא תומכת בשיתוף סוג מיכל זה. הרחבות נתמכות הן: %1. @@ -3620,7 +3242,7 @@ Supported extensions are: %1. %1 is being imported and exported by different groups in this database. - %1 מיובא ומיוצא על־ידי קבוצות שונות במסד־נתונים זה. + %1 מיובא ומיוצא על־ידי קבוצות שונות במסד נתונים זה. KeeShare is currently disabled. You can enable import/export in the application settings. @@ -3645,11 +3267,11 @@ Supported extensions are: %1. Select import source - בחירת מקור ייבוא + בחירת מקור יבוא Select export target - בחירת יעד ייצוא + בחירת יעד יצוא Select import/export file @@ -3743,11 +3365,11 @@ Supported extensions are: %1. Download favicon for URL - הורדת favicon למען URL + הורדת פביקון למען URL Download favicon - הורדת favicon + הורדת פביקון Apply selected icon to subgroups and entries @@ -3767,7 +3389,7 @@ Supported extensions are: %1. Also apply to child entries - חל גם על רשומות צאצא + חל גם על ערכי צאצא Also apply to all children @@ -3775,7 +3397,11 @@ Supported extensions are: %1. Unable to fetch favicon. - לא ניתן להביא favicon. + לא ניתן לאחזר פביקון. + + + You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security + ניתן לאפשר את שירות הסמלים של אתר DuckDuckGo מתפריט, כלים -> הגדרות -> אבטחה Existing icon selected. @@ -3795,7 +3421,7 @@ Supported extensions are: %1. Successfully loaded %1 of %n icon(s) - %1 מתוך %n סמלים נטען בהצלחה%1 מתוך %n סמלים נטענו בהצלחה%1 מתוך %n סמלים נטענו בהצלחה + %1 מתוך %n סמלים נטען בהצלחה%1 מתוך %n סמלים נטענו בהצלחה%1 מתוך %n סמלים נטענו בהצלחה%1 מתוך %n סמלים נטענו בהצלחה No icons were loaded @@ -3803,15 +3429,11 @@ Supported extensions are: %1. %n icon(s) already exist in the database - סמל %n כבר קיים במסד־נתונים%n סמלים כבר קיימים במסד־נתונים%n סמלים כבר קיימים במסד־נתונים + סמל %n כבר קיים במסד הנתונים%n סמלים כבר קיימים במסד הנתונים%n סמלים כבר קיימים במסד הנתונים%n סמלים כבר קיימים במסד הנתונים The following icon(s) failed: - הסמל הבא נכש:הסמלים הבאים כשלו:הסמלים הבאים כשלו: - - - You can enable the DuckDuckGo website icon service under Application Settings -> Security - ניתן לאפשור את שרות סמלי אתר מרשתת DuckDuckGo מתפריט הגדרות יישום -> אבטחה + הסמל הבא כשל:הסמלים הבאים כשלו:הסמלים הבאים כשלו:הסמלים הבאים כשלו: @@ -3876,7 +3498,7 @@ This may cause the affected plugins to malfunction. Key - מפתח + ססמה Value @@ -3887,25 +3509,7 @@ This may cause the affected plugins to malfunction. Entry %1 - Clone - שכפול %1 - - - - Passkey - Passkey - - - Invalid conversion type: %1 - סוג המרה לא תקין: %1 - - - Invalid conversion syntax: %1 - תחביר המרה לא תקין: %1 - - - Invalid regular expression syntax %1 -%2 - תחביר ביטוי רגיל לא תקין %1 -%2 + שכפול - %1 @@ -3915,21 +3519,6 @@ This may cause the affected plugins to malfunction. לא ניתן לפתוח קובץ "%1" - - EntryAttachmentsDialog - - Form - טופס - - - File name - - - - File contents... - - - EntryAttachmentsModel @@ -3967,6 +3556,14 @@ This may cause the affected plugins to malfunction. Remove הסרה + + Rename selected attachment + שנוי שם צרופה שנבחרה + + + Rename + שינוי שם + Open selected attachment פתיחת צרופה שנבחרה @@ -3993,7 +3590,7 @@ This may cause the affected plugins to malfunction. Are you sure you want to remove %n attachment(s)? - האם להסיר צרופה %n?האם להסיר %n צרופות?האם להסיר %n צרופות? + האם להסיר צרופה %n?האם להסיר %n צרופות?האם להסיר %n צרופות?האם להסיר %n צרופות? Save attachments @@ -4017,19 +3614,19 @@ This may cause the affected plugins to malfunction. Unable to save attachments: %1 לא ניתן לשמור צרופות: -%1 + %1 Unable to open attachment: %1 לא ניתן לפתוח צרופה: -%1 + %1 Unable to open attachments: %1 - לא ניתן לפתוח צרופות: -%1 + לא ניתן לפתוח צרופה: + %1 Unable to open file(s): @@ -4037,12 +3634,19 @@ This may cause the affected plugins to malfunction. לא ניתן לפתוח קובץ: %1לא ניתן לפתוח קובצים: %1לא ניתן לפתוח קובצים: +%1לא ניתן לפתוח קובצים: %1 Confirm Overwrite Attachment אישור כתיבה־על צרופה + + Attachment "%1" already exists. +Would you like to overwrite the existing attachment? + קיימת כבר צרופה "%1". +האם לכתוב־על הצרופה הקיימת? + Confirm Attachment אישור צרופה @@ -4053,7 +3657,7 @@ Your database may get very large and reduce performance. Are you sure to add this file? %1 הוא קובץ גדול (%2 מב). -מסד־נתונים עשוי להיות גדול מאוד והביצועים יפגעו. +מסד הנתונים עשוי להיות גדול מאוד והביצועים יפגעו. האם להוסיף קובץ זה? @@ -4064,8 +3668,8 @@ Are you sure to add this file? The attachment '%1' was modified. Do you want to save the changes to your database? - הקובץ המצורף '% 1' השתנה. -האם ברצונך לשמור את השינויים במסד־נתונים שלך? + צרופה '%1' הוסגלה. +האם לשמור את השינויים למסד הנתונים? Saving attachment failed @@ -4077,24 +3681,6 @@ Error: %1 שמירת צרופה עדכנית כשלה. שגיאה: %1 - - Attachment "%1" already exists. -Would you like to overwrite the existing attachment? - קיימת כבר צרופה "%1". -האם לכתוב־על הצרופה הקיימת? - - - New - - - - Preview - תצוגה מקדימה - - - Failed to preview an attachment: Attachment not found - - EntryAttributesModel @@ -4187,7 +3773,7 @@ Would you like to overwrite the existing attachment? Ref: Reference abbreviation - הפניה: + הפניה: Never @@ -4289,14 +3875,6 @@ Would you like to overwrite the existing attachment? Has TOTP קיים TOTP - - Background Color - צבע רקע - - - Group Path - - EntryPreviewWidget @@ -4317,8 +3895,8 @@ Would you like to overwrite the existing attachment? ססמה - URL - מען url + Notes + הערות Expiration @@ -4337,8 +3915,8 @@ Would you like to overwrite the existing attachment? שם משתמש - Notes - הערות + URL + מען url Advanced @@ -4366,7 +3944,7 @@ Would you like to overwrite the existing attachment? Sequence - רצף + רצף סדר פעולות Searching @@ -4382,16 +3960,12 @@ Would you like to overwrite the existing attachment? Clear - צלול + נקה Never אף פעם - - Double click to copy value - הקשה כפולה להעתקת ערך - Enabled מאופשר @@ -4401,8 +3975,8 @@ Would you like to overwrite the existing attachment? מושבת - Double click to copy to clipboard - הקשה כפולה להעתיק ללוח גזירים + Double click to copy value + הקשה כפולה להעתקת ערך @@ -4411,10 +3985,6 @@ Would you like to overwrite the existing attachment? Invalid URL מען URL תקין - - Duplicate URL - שיכפול מען URL - EntryView @@ -4430,10 +4000,6 @@ Would you like to overwrite the existing attachment? Reset to defaults איפוס לברירות המחדל - - + %1 entry(s)... - רשומה + %1...+ %1 רשומות...+ %1 רשומות... - ExportDialog @@ -4537,7 +4103,7 @@ This will leave your passwords and sensitive information vulnerable! FdoSecrets::Item Entry "%1" from database "%2" was used by %3 - %3 עשה שימוש ברשומה "%1" ממסד־נתונים "%2" + %3 עשה שימוש ברשומה "%1" ממסד נתונים "%2" @@ -4545,7 +4111,7 @@ This will leave your passwords and sensitive information vulnerable! %n Entry(s) was used by %1 %1 is the name of an application - %1 השתש ברשומה %n%1 השתמש ב־%n רשומות%1 השתמש ב־%n רשומות + %1 השתמש ברשומה %n%1 השתמש ב־%n רשומות%1 השתמש ב־%n רשומות%1 השתמש ב־%n רשומות @@ -4556,7 +4122,7 @@ This will leave your passwords and sensitive information vulnerable! Non-existing/inaccessible executable path. Please double-check the client is legit. - נתיב הפעלה לא קיים/נגיש. אנא בדקו שוב שהלקוח (קליינט) חוקי. + נתיב הפעלה לא קיים/נגיש. נא לבדוק שנית את חוקיות הלקוח. @@ -4607,7 +4173,7 @@ This will leave your passwords and sensitive information vulnerable! IconDownloaderDialog Download Favicons - הורדת Favicons + הורדת פביקונס Cancel @@ -4656,193 +4222,6 @@ You can enable the DuckDuckGo website icon service in the security section of th הורדת פביקונס (%1/%2)... - - ImportWizard - - Import Wizard - אשף ייבוא - - - - ImportWizardPageReview - - WizardPage - עמוד אשף - - - Entry count: %1 - מספר רשומה: %1 - - - Group - קבוצה - - - Title - כותרת - - - Username - שם משתמש - - - Password - ססמה - - - Url - מען URL - - - Could not load key file. - - - - Could not open remote database. Password or key file may be incorrect. - - - - - ImportWizardPageSelect - - Form - טופס - - - Import File Selection - בחירת קובץ ייבוא - - - Password: - ססמה: - - - Key File: - קובץ ססמה: - - - Browse… - עיון... - - - Import Into: - ייבוא לתוך: - - - New Database - מסד־נתונים חדש - - - No unlocked databases available - אין מסדי נתונים לא נעולים זמינים - - - Existing Database: - מסד נתונים קיים: - - - Import File: - ייבוא קובץ: - - - Comma Separated Values (.csv) - ערכים מופרדים בפסיקים (.csv) - - - 1Password Export (.1pux) - ייצוא 1Password (.1pux) - - - 1Password Vault (.opvault) - כספת 1Password (.opvault) - - - Bitwarden (.json) - Bitwarden (.json) - - - KeePass 1 Database (.kdb) - מסד נתונים KeePass 1 (.kdb) - - - Open OPVault - פתיחת OPVault - - - Select import file - בחירת קובץ ייבוא - - - All files - כל הקבצים - - - Key files - קבצי מפתח - - - Select key file - בחירת קובץ ססמה - - - Comma Separated Values - ערכים מופרדים בפסיקים - - - 1Password Export - ייצוא 1Password - - - Bitwarden JSON Export - ייצוא Bitwarden JSON - - - 1Password Vault - כספת 1Password - - - KeePass1 Database - מסד־נתונים KeePass 1 - - - Proton Pass (.json) - - - - Proton Pass JSON Export - - - - Temporary Database - - - - Command: - פקודה: - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - לדוגמה: "sftp user@hostname" או "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - - - Input: - קלט: - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last commend `exit` has to be sent - - - - - Remote Database (.kdbx) - - - KMessageWidget @@ -4872,7 +4251,7 @@ The command has to exit. In case of `sftp` as last commend `exit` has to be sent Invalid credentials were provided, please try again. If this reoccurs, then your database file may be corrupt. סופקו אישורים לא תקינים, נא לנסות שוב. -אם פעולה זו חוזרת על עצמה, ייתכן שקובץ מסד־נתונים פגום. +אם פעולה זו חוזרת על עצמה, ייתכן שקובץ מסד הנתונים פגום. Header doesn't match hash @@ -4919,7 +4298,7 @@ If this reoccurs, then your database file may be corrupt. Invalid header checksum size - גודל סיכום ביקורת כותרת עליונה לא תקין + גודל סיכום ביקורת כותרת עליונה לא תקין Header SHA256 mismatch @@ -4929,7 +4308,7 @@ If this reoccurs, then your database file may be corrupt. Invalid credentials were provided, please try again. If this reoccurs, then your database file may be corrupt. סופקו אישורים לא תקינים, נא לנסות שוב. -אם הודעה זו חוזרת על עצמה, ייתכן שקובץ מסד־נתונים פגום. +אם פעולה זו חוזרת על עצמה, ייתכן שקובץ מסד הנתונים פגום. (HMAC mismatch) @@ -4969,7 +4348,7 @@ If this reoccurs, then your database file may be corrupt. Invalid inner header field length: field %1 - אורך שדה כותרת פנימי לא תקין: שדה %1 + אורך שדה כותרת פנימית לא תקין: שדה %1 Invalid inner header data length: field %1, %2 expected, %3 found @@ -4977,7 +4356,7 @@ If this reoccurs, then your database file may be corrupt. Invalid inner header binary size - גודל בינארי של כותרת פנימית לא תקין + גודל בינארי של כותרת פנימית לא תקין Unsupported KeePass variant map version. @@ -4997,42 +4376,42 @@ If this reoccurs, then your database file may be corrupt. 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 - אורך רשומה מפת משתנה רשומה Int32 לא תקין + אורך ערך מפת משתנה רשומה Int32 לא תקין Invalid variant map UInt32 entry value length Translation: variant map = data structure for storing meta data - אורך רשומה מפת משתנה רשומה UInt32 לא תקין + אורך ערך מפת משתנה רשומה UInt32 לא תקין Invalid variant map Int64 entry value length Translation: variant map = data structure for storing meta data - אורך רשומה מפת משתנה רשומה Int64 לא תקין + אורך ערך מפת משתנה רשומה Int64 לא תקין Invalid variant map UInt64 entry value length Translation: variant map = data structure for storing meta data - אורך רשומה מפת משתנה משתני UInt64 לא תקין + אורך ערך מפת משתנה רשומה UInt64 לא תקין Invalid variant map entry type Translation: variant map = data structure for storing meta data - סוג מפת משתנה רשומה לא תקין + סוג מפת משתנה רשומה לא תקינים Invalid variant map field type size @@ -5116,10 +4495,10 @@ If this reoccurs, then your database file may be corrupt. 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 הישנה. Not a KeePass database. @@ -5162,11 +4541,11 @@ Line %2, column %3 Null group uuid - uuid קבוצה ריקה + uuid קבוצת Null Invalid group icon number - מספר סמל קבוצה לא תקין + מספר סמל קבוצה לא כותרת פנימית Invalid EnableAutoType value @@ -5186,11 +4565,11 @@ Line %2, column %3 Missing DeletedObject uuid or time - חסרים uuid עצם שנמחק או זמן + חסרים uuid עצמים שנמחקו או זמן Null entry uuid - uuid רשומה ריקה + רשומת uuid ריקה Invalid entry icon number @@ -5202,7 +4581,7 @@ Line %2, column %3 No entry uuid found - לא נמצאה uuid רשומה + לא נמצאה uuid רשומת History element with different uuid @@ -5214,11 +4593,11 @@ Line %2, column %3 Entry string key or value missing - מפתח או רשומה מחרוזת רשומה חסרים + מפתח או ערך מחרוזת רשומה חסרים Entry binary key or value missing - מפתח בינארי או רשומה רשומה חסרים + מפתח בינארי או ערך רשומה חסרים Auto-type association window or sequence missing @@ -5266,7 +4645,7 @@ Line %2, column %3 Private key is empty - מפתח פרטי ריק + המפתח הפרטי ריק File too large to be a private key @@ -5277,6 +4656,17 @@ Line %2, column %3 פתיחת קובץ מפתח כשלה + + KeePass1OpenWidget + + Import KeePass1 Database + ייבוא מסד־נתונים KeePass1 + + + Unable to open the database. + לא ניתן לפתוח מסד־נתונים. + + KeePass1Reader @@ -5306,7 +4696,7 @@ Line %2, column %3 Invalid number of entries - מספר רשומות לא תקין + מספר ערכים לא תקין Invalid content hash size @@ -5314,7 +4704,7 @@ Line %2, column %3 Invalid transform seed size - המרת גודל זרע לא תקינה + המרת גודל זרע לא תקין Invalid number of transform rounds @@ -5340,7 +4730,7 @@ Line %2, column %3 Invalid credentials were provided, please try again. If this reoccurs, then your database file may be corrupt. סופקו אישורים לא תקינים, נא לנסות שוב. -אם פעולה זו חוזרת על עצמה, ייתכן שקובץ מסד־נתונים פגום. +אם פעולה זו חוזרת על עצמה, ייתכן שקובץ מסד הנתונים פגום. Key transformation failed @@ -5348,7 +4738,7 @@ If this reoccurs, then your database file may be corrupt. Invalid group field type number - מספר סוג שדה קבוצה לא תקין + מספר סוג שדה קבוצה לאתקין Invalid group field size @@ -5368,11 +4758,11 @@ If this reoccurs, then your database file may be corrupt. Incorrect group modification time field size - גודל שדה זמן שינוי קבוצה שגוי + גודל שדה זמן הסגלת קבוצה שגויה Incorrect group access time field size - גודל שדה זמן גישה לקבוצה שגוי + גודל שדה זמן גישה לקבוצה שגוי Incorrect group expiry time field size @@ -5513,11 +4903,11 @@ If this reoccurs, then your database file may be corrupt. Generate a new key file or choose an existing one to protect your database. - חילול קובץ מפתח חדש או בחירת קובץ מפתח קיים להגנה על מסד־נתונים. + חילול קובץ מפתח חדש או בחירת קובץ מפתח קיים להגנה על מסד הנתונים. Note: Do NOT use a file that may change as that will prevent you from unlocking your database. - הערה: נא לא להשתמש בקובץ שעשוי להשתנות כך שימנע את שחרור נעילת מסד־נתונים. + הערה: נא לא להשתמש בקובץ שעשוי להשתנות כך שימנע את שחרור נעילת מסד הנתונים. Browse for key file @@ -5529,11 +4919,11 @@ If this reoccurs, then your database file may be corrupt. Old key file format - תסדיר קובץ מפתח ישן + תבנית קובץ מפתח ישן You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. - נבחר קובץ מפתח בתסדיר ישן ש־KeePassXC<br>עשוי להפסיק לתמוך בעתיד.<br><br>במקום זאת, נא לשקול ליצור קובץ מפתח חדש. + נבחר קובץ מפתח בתבנית ישנה ש־KeePassXC<br>עשוי להפסיק לתמוך בעתיד.<br><br>במקום זאת, נא לשקול ליצור קובץ מפתח חדש. Error loading the key file '%1' @@ -5595,7 +4985,7 @@ Message: %2 You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. - לא ניתן להשתמש במסד־נתונים הנוכחי כקובץ המפתח שלו. נא לבחור קובץ אחר או לחולל קובץ מפתח חדש. + לא ניתן להשתמש במסד הנתונים הנוכחי כקובץ המפתח שלו. נא לבחור קובץ אחר או לחולל קובץ מפתח חדש. Suspicious Key File @@ -5604,7 +4994,7 @@ Message: %2 The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. Are you sure you want to continue with this file? - קובץ המפתח שנבחר נראה כמו קובץ מסד נתוני ססמאות. קובץ מפתח חייב להיות קובץ נייח שלעולם לא ישתנה או שהגישה למסד־נתונים תאבד לנצח. + קובץ המפתח שנבחר נראה כמו קובץ מסד נתוני ססמאות. קובץ מפתח חייב להיות קובץ נייח שלעולם לא ישתנה או שהגישה למסד הנתונים תאבד לנצח. האם להמשיך עם קובץ זה? @@ -5633,6 +5023,10 @@ Are you sure you want to continue with this file? &Recent Databases מסדי־נתונים &אחרונים + + &Import + &ייבוא + &Export &ייצוא @@ -5653,10 +5047,6 @@ Are you sure you want to continue with this file? TOTP TOTP - - Tags - תגים - &Groups &קבוצות @@ -5675,11 +5065,11 @@ Are you sure you want to continue with this file? &Quit - &יציאה + &יצאה &About - &אודות + &על אודות &Check for Updates @@ -5701,18 +5091,34 @@ Are you sure you want to continue with this file? &New Database… &מסד־נתונים חדש... + + Create a new database + יצירת מסד־נתונים חדש + &Merge From Database… - &מיזוג ממסד־נתונים... + &מיזוג ממסד נתונים... + + + Merge from another KDBX database + מיזוג ממסד נתונים KDBX אחר &New Entry… &רשומה חדשה... + + Add a new entry + הוספת רשומה חדשה + &Edit Entry… &עריכת רשומה... + + View or edit entry + הצגת או עריכת רשומה + &Delete Entry… &מחיקת רשומה... @@ -5721,6 +5127,10 @@ Are you sure you want to continue with this file? &New Group… &קבוצה חדשה... + + Add a new group + הוספת קבוצה חדשה + &Edit Group… &עריכת קבוצה... @@ -5731,15 +5141,15 @@ Are you sure you want to continue with this file? Download All &Favicons… - הורדת כל ה־&Favicon + הורדת כל ה־&פביקונס... Sort &A-Z - מיין &א־ת + מיין &א-ת Sort &Z-A - מיין &ת־א + מיין &ת-א Sa&ve Database As… @@ -5753,10 +5163,18 @@ Are you sure you want to continue with this file? Database &Reports… &דוחות מסד־נתונים... + + Statistics, health check, etc. + סטטיסטיקה, בדיקת תקינות ועוד. + &Database Settings… &הגדרות מסד־נתונים... + + Database settings + הגדרות מסד־נתונים + &Clone Entry… &שכפול רשומה... @@ -5765,18 +5183,34 @@ Are you sure you want to continue with this file? Move u&p העברה &מעלה + + Move entry one step up + העברת רשומה צעד אחד מעלה + Move do&wn העברה &מטה + + Move entry one step down + העברת רשומה צעד אחד מטה + Copy &Username העתקת &שם משתמש + + Copy username to clipboard + העתקת שם משתמש ללוח־הגזירים + Copy &Password העתקת &ססמה + + Copy password to clipboard + העתקת ססמאות ללוח־הגזירים + &Settings &הגדרות @@ -5791,7 +5225,7 @@ Are you sure you want to continue with this file? Download &Favicon - הורדת &Favicon + הורדת &פביקון Open &URL @@ -5810,13 +5244,21 @@ Are you sure you want to continue with this file? &כותרת - Copy &URL - העתקת מען־URL + Copy title to clipboard + העתקת כותרת ללוח־הגזירים + + + Copy URL to clipboard + העתקת מען URL ללוח־הגזירים &Notes &הערות + + Copy notes to clipboard + העתקת הערות ללוח־הגזירים + &CSV File… &קובץ CSV... @@ -5829,14 +5271,26 @@ Are you sure you want to continue with this file? KeePass 1 Database… מסד־נתונים KeePass 1... + + Import a KeePass 1 database + ייבוא מסד נתוני KeePass 1 + 1Password Vault… כספת 1Password... + + Import a 1Password Vault + ייבוא כספת 1Password + CSV File… קובץ CSV... + + Import a CSV file + יבא קובץ CSV + Show TOTP הצגת TOTP @@ -5853,10 +5307,6 @@ Are you sure you want to continue with this file? Copy &TOTP העתקת &TOTP - - Copy Password and TOTP - העתקת ססמה ו־TOTP - E&mpty recycle bin &ריקןן סל־מחזור @@ -5881,6 +5331,10 @@ Are you sure you want to continue with this file? &Online Help עזרה &מקוונת + + Go to online documentation + מעבר לתיעוד מקוון + &User Guide &מדריך למשתמש @@ -5891,7 +5345,7 @@ Are you sure you want to continue with this file? &Keyboard Shortcuts - &קיצורי מקלדת + &קיצורי מקשים Save Database Backup… @@ -5925,10 +5379,6 @@ Are you sure you want to continue with this file? Classic (Platform-native) קלאסי (מובנה מסדת) - - Show Menubar - הצגת סרגל תפריט - Show Toolbar הצגת סרגל־כלים @@ -5953,17 +5403,13 @@ Are you sure you want to continue with this file? Clone Group... שכפול קבוצה... - - &XML File… - &קובץ XML... - Clear history נקוי היסטוריה Access error for config file %1 - שגיאת גישה לקובץ תצורה 1% + שגיאת גישה לקובץ התצורה %1 Don't show again for this version @@ -5974,7 +5420,7 @@ Are you sure you want to continue with this file? There is a high risk of corruption, maintain a backup of your databases. This version is not meant for production use. אזהרה: נעשה שימוש בבניה לא יציבה של KeePassXC! -קיים סיכון גבוה להשחתה, נא לשמור גיבוי מסדי־נתונים. +קיים סיכון גבוה להשחתה, נא לשמור גיבוי מסדי הנתונים. גרסה זו אינה מיועדת לשימוש בייצור. @@ -5984,12 +5430,14 @@ Expect some bugs and minor issues, this version is meant for testing purposes. - No Tags - ללא תג + 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 הזמין בעמוד ההורדות שלנו. Restore Entry(s) - שחזור רשומהשחזור רשומותשחזור רשומות + שחזור רשומהשחזור רשומותשחזור רשומותשחזור רשומות Settings @@ -5997,7 +5445,7 @@ Expect some bugs and minor issues, this version is meant for testing purposes. Check for updates on startup? - האם לבדוק זמינות עדכונים בעת האיתחול? + האם לבדוק עדכונים בעת האיתחול? Would you like KeePassXC to check for updates on startup? @@ -6009,15 +5457,11 @@ Expect some bugs and minor issues, this version is meant for testing purposes. Toggle window - החלפת־מצב + החלפת־מצב חלון Quit KeePassXC - יציאה מ־KeePassXC - - - %1 Entry(s) - רשומה %1 %1 רשומות%1 רשומות + יצאה מ־KeePassXC Please present or touch your YubiKey to continue… @@ -6031,314 +5475,38 @@ Expect some bugs and minor issues, this version is meant for testing purposes.You must restart the application to apply this setting. Would you like to restart now? נא לאתחל את היישום להחלת הגדרה זו. האם לאתחל כעת? + + Tags + תגים + + + No Tags + ללא תג + + + %1 Entry(s) + רשומה %1%1 רשומות%1 רשומות%1 רשומות + + + Copy Password and TOTP + העתקת ססמה ו־TOTP + + + &XML File… + &קובץ XML... + + + XML File… + קובץ XML... + + + Copy &URL + העתקת מען־URL + Allow Screen Capture אפשור לכידת מסך - - 1Password 1PUX... - 1Password 1PUX... - - - Import a 1Password 1PUX file - ייבוא קובץ 1Password 1PUX - - - Import… - ייבוא... - - - Passkeys… - Passkeys… - - - Import Passkey - ייבוא Passkey - - - Remote S&ync… - ס&נכרון מרוחק... - - - Quit Application - לצאת מהיישומון - - - Open About Dialog - פתיחת דו־שיח על אודות - - - Open Database - פתיחת מסד נתונים - - - Create Database - יצירת מסד נתונים - - - Merge From Database - למזג ממסד נתונים - - - Create Entry - יצירת רשומה - - - Edit Entry - עריכת רשומה - - - Delete Entry - מחיקת רשומה - - - Create Group - יצירת קבוצה - - - Edit Group - עריכת קבוצה - - - Delete Group - מחיקת קבוצה - - - Download All Favicons - הורדת כל הפביקון - - - Sort Groups A-Z - סינון קבוצות א–ת - - - Sort Groups Z-A - סינון קבוצות ת–א - - - Save Database As - שמירת מסד נתונים בשם - - - Show Database Security - הצגת אבטחת מסד נתונים - - - Show Database Reports - הצגת דוחות מסד נתונים - - - Show Database Settings - הצגת הגדרות מסד נתונים - - - Show Passkeys - הצגת Passkeys - - - Clone Entry - שכפול רשומה - - - Move Entry Up - העברת רשומה מעלה - - - Move Entry Down - העברת רשומה מטה - - - Copy Username - העתקת שם משתמש - - - Copy Password - העתקת ססמה - - - Show Application Settings - הצגת הגדרות יישום - - - Show Password Generator - הצגת מחולל ססמאות - - - Remove Passkey From Entry - הסרת Passkey מרשומה - - - Perform Auto-Type: {USERNAME} - ביצוע הקלדה אוטומטית: {USERNAME} - - - Perform Auto-Type: {USERNAME}{ENTER} - ביצוע הקלדה אוטומטית: {USERNAME}{ENTER} - - - Perform Auto-Type: {PASSWORD} - ביצוע הקלדה אוטומטית: {PASSWORD} - - - Perform Auto-Type: {PASSWORD}{ENTER} - ביצוע הקלדה אוטומטית: {PASSWORD}{ENTER} - - - Perform Auto-Type: {TOTP} - ביצוע הקלדה אוטומטית: {TOTP} - - - Copy Title - להעתיק תואר - - - Copy URL - להעתיק מען URL - - - Copy Notes - להעתיק הערות - - - Export to CSV - ייצוא ל־CSV - - - Export to HTML - ייצוא ל־HTML - - - Import KeePass1 Database - ייבוא מסד־נתונים KeePass1 - - - Import 1Password Vault - ייבוא כספת 1Password - - - Import CSV File - ייבוא קובץ CSV - - - Show TOTP QR Code - הצגת קוד QR TOTP - - - Set up TOTP - הגדרת TOTP - - - Empty Recycle Bin - לרוקן סל מחזור - - - Open Donation Website - לפתוח אתר מרשתת תרומה - - - Open Bug Report - לפתוח דוח תקלים - - - Open Online Documentation - לפתוח תיעוד מקוון - - - Open Keyboard Shortcuts Guide - לפתוח מדריך קיצורי־דרך מקלדת - - - Save Database Backup - לשמור גיבוי מסד נתונים - - - SSH Agent: Add Key - סוכן SSH: הוספת מפתח - - - SSH Agent: Remove Key - סוכן SSH: הסרת מפתח - - - Toggle Compact Mode - מיתוג מצב צמום - - - Set Theme: Automatic - קביעת ערכת נושא באופן אוטומטי - - - Set Theme: Light - קביעת ערכת נושא: בהירה - - - Set Theme: Dark - קביעת ערכת נושא: כהה - - - Set Theme: Classic - קביעת ערכת נושא: קלאסי - - - Toggle Show Menubar - מיתוג הצגת סרגל תפריט - - - Toggle Show Toolbar - מיתוג הצגת סרגל כלים - - - Toggle Show Preview Panel - מיתוג הצגת לוח תצוגה מקדימה - - - Toggle Always on Top - מיתוג תמיד עליון - - - Toggle Hide Usernames - מיתוג הסתרת שם משתמש - - - Toggle Hide Passwords - מיתוג הסתרת ססמאות - - - Export to XML - ייצוא ל־XML - - - Toggle Allow Screen Capture - מיתוג אפשור לכידת מרקע - - - Show Group Panel - - - - Toggle Show Group Panel - - - - Setup Remote Sync… - הגדרת סנכרון מרוחק... - - - Password Generator - - - - E&xpire Entry… - - - - Clear SSH Agent - - - - Clear all identities in ssh-agent - - ManageDatabase @@ -6352,7 +5520,7 @@ Expect some bugs and minor issues, this version is meant for testing purposes. Unlock database - שחרור נעילת מסד־נתונים + שחרור נעילה של מסד־נתונים Unlock database to show more information @@ -6396,6 +5564,26 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Overwriting %1 [%2] כתיבה על %1 [%2] + + older entry merged from database "%1" + רשומות ישנות יותר מוזגו ממסד נתונים "%1" + + + Adding backup for older target %1 [%2] + הוספת גיבוי עבור יעד ישן יותר %1 [%2] + + + Adding backup for older source %1 [%2] + הוספת גיבוי למקור ישן יותר %1 [%2] + + + Reapplying older target entry on top of newer source %1 [%2] + יישום חוזר של רשומת יעד ישנה נוסף על המקור החדש יותר %1 [%2] + + + Reapplying older source entry on top of newer target %1 [%2] + יישום חוזר של רשומת מקור ישנה נוסף על היעד החדש יותר %1 [%2] + Synchronizing from newer source %1 [%2] סנכרן ממקור חדש יותר %1 [%2] @@ -6453,7 +5641,15 @@ Expect some bugs and minor issues, this version is meant for testing purposes. Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. - כאן ניתן להתאים את הגדרות הצפנת מסד־נתונים. אל דאגה, אפשר יהיה לשנות אותם מאוחר יותר בהגדרות מסד־נתונים. + כאן ניתן להתאים את הגדרות הצפנת מסד הנתונים. אל דאגה, אפשר יהיה לשנות אותם מאוחר יותר בהגדרות מסד הנתונים. + + + Advanced Settings + הגדרות מתקדמות + + + Simple Settings + הגדרות פשוטות @@ -6464,48 +5660,29 @@ Expect some bugs and minor issues, this version is meant for testing purposes. A set of credentials known only to you that protects your database. - ערכת אישורים הידועה רק לך המגנה על מסד־נתונים. + ערכת אישורים הידועה רק לך המגנה על מסד הנתונים. NewDatabaseWizardPageEncryption Encryption Settings - הגדרות הצפנה + הצנת ההגדרות Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. - אן ניתן להתאים את הגדרות הצפנת מסד־נתונים. אל דאגה, אפשר יהיה לשנות אותם מאוחר יותר בהגדרות מסד־נתונים. + כאן ניתן להתאים את הגדרות הצפנת מסד הנתונים. אל דאגה, אפשר יהיה לשנות אותם מאוחר יותר בהגדרות מסד הנתונים. NewDatabaseWizardPageMetaData General Database Information - מידע כללי אודות מסד־נתונים + מידע כללי אודות מסד הנתונים Please fill in the display name and an optional description for your new database: - נא להזין את שם המצג ותיאור חלופי למסד־נתונים החדש: - - - - NewEntryAttachmentsDialog - - Attachment name cannot be empty - - - - Attachment with the same name already exists - - - - Save attachment - - - - New entry attachment - + נא להזין את שם המצג ותיאור חלופי למסד הנתונים החדש: @@ -6554,6 +5731,15 @@ Expect some bugs and minor issues, this version is meant for testing purposes.ציפיה ל־%1 בתים של מלל רגיל, נמצאו %2 + + OpVaultOpenWidget + + Read Database did not produce an instance +%1 + קריאת מסד־נתונים לא הניבה אֶדְגָּם +%1 + + OpVaultReader @@ -6597,7 +5783,7 @@ Expect some bugs and minor issues, this version is meant for testing purposes. Key file way too small. - קובץ מפתח קטן מדי. + קובץ המפתח קטן מדי. Key file magic header id invalid @@ -6627,10 +5813,6 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Unknown cipher: %1 צופן לא ידוע: %1 - - AES-256/GCM is currently not supported - AES-256/GCM לא נתמך לעת עתה - Passphrase is required to decrypt this key נדרש ביטוי ססמה כדי לפענח מפתח זה @@ -6696,182 +5878,8 @@ Expect some bugs and minor issues, this version is meant for testing purposes.EOF לא צפוי בעת כתיבת מפתח פרטי - (encrypted) - (מוצפן) - - - - OpenSSHKeyGenDialog - - SSH Key Generator - מחולל מפתח SSH - - - Type - סוג - - - Bits - סיביות - - - Comment - הערה - - - - PasskeyExportDialog - - KeePassXC - Passkey Export - ייצוא KeePassXC – Passkey - - - Filenames will be generated with title and .passkey file extension. - שמות קבצים יחוללו עם כותרת וסיומת קובץ Passkey. - - - Export entries - ייצוא רשומות - - - Export Selected - ייצוא בחירה - - - Cancel - ביטול - - - Export to folder - ייצוא לתיקייה - - - Export the following passkey entries. - ייצוא רשומות ה־Passkey הבאות. - - - - PasskeyExporter - - KeePassXC: Passkey Export - KeePassXC: ייצוא Passkey - - - File "%1.passkey" already exists. -Do you want to overwrite it? - - קובץ "%1.passkey" כבר קיים -האם לכתוב עליו? - - - Cannot open file - לא ניתן לפתוח קובץ - - - Cannot open file "%1" for writing. - לא ניתן לפתוח קובץ "%1" לכתיבה. - - - Cannot write to file - לא ניתן לכתוב לקובץ - - - - PasskeyImportDialog - - KeePassXC - Passkey Import - ייבוא KeePassXC – Passkey - - - Username: %1 - שם משתמש: %1 - - - Group - קבוצה - - - Database - Database - - - Import Passkey - ייבוא Passkey - - - Import - ייבוא - - - Cancel - ביטול - - - Entry - רשומה - - - Create new entry - יצירת רשומה חדשה - - - Relying Party: %1 - צד סומך: %1 - - - Import the following passkey: - ייבוא ה־ הבא:Passkey - - - Import the following passkey to this entry: - לייבא את ה־Passkey הבא לרשומה זו: - - - Default passkeys group (Imported Passkeys) - קבוצה passkeys בררת מחדל (passkeys שיובאו) - - - - PasskeyImporter - - Passkey file - קובץ Passkey - - - All files - כל הקבצים - - - Cannot open file - לא ניתן לפתוח קובץ - - - Cannot open file "%1" for reading. - לא ניתן לפתוח קובץ "%1" לקריאה. - - - Open passkey file - פתיחת קובץ Passkey - - - Cannot import passkey - לא ניתן לייבוא Passkey - - - Cannot import passkey file "%1". Data is missing. - לא ניתן לייבוא קובץ Passkey "%1". חסרים נתונים. - - - Cannot import passkey file "%1". -The following data is missing: -%2 - לא ניתן לייבא קובץ Passkey "%1". -הנתון הבא חסר: -%2 - - - Cannot import passkey file "%1". Private key is missing or malformed. - לא ניתן לייבא קובץ Passkey "%1". מפתח פרטי חסר או לוקה בתצורה. + AES-256/GCM is currently not supported + AES-256/GCM לא נתמך לעת עתה @@ -7030,7 +6038,7 @@ The following data is missing: Add non-hex letters to "do not include" list - הוספת אותיות non־hex לרשימת ה"החרגה" + הוספת אותיות non-hex לרשימת ה"החרגה" Hex Passwords @@ -7076,6 +6084,10 @@ The following data is missing: Word Count: ספירת מילים: + + Character Count: + ספירת תווים: + Word Case: גודל אות: @@ -7088,6 +6100,10 @@ The following data is missing: Add custom wordlist הוספת רשימת־מילים מותאמת אישית + + character + תו + Close סגירה @@ -7124,30 +6140,6 @@ The following data is missing: Entropy: %1 bit אנטרופיה: %1 סיביות - - Password Quality: %1 - איכות ססמה: %1 - - - Poor - Password quality - עלוב - - - Weak - Password quality - חלש - - - Good - Password quality - טוב - - - Excellent - Password quality - מצוין - Confirm Delete Wordlist אישור מחיקת רשימת מילים @@ -7195,20 +6187,32 @@ Do you want to overwrite it? תווים מיוחדים - passwordLength - אורך ססמה + Password Quality: %1 + איכות ססמה: %1 - Characters: %1 - תווים: %1 + Poor + Password quality + עלוב - MIXED case - + Weak + Password quality + חלש - Excluded characters: "0", "1", "l", "I", "O", "|", "﹒", "B", "8", "G", "6" - + Good + Password quality + טוב + + + Excellent + Password quality + מצוין + + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + תווים שהוחרגו: "0", "O", "1", "l", "I", "|", "G", "6", "B", "8", "." @@ -7258,8 +6262,8 @@ Do you want to overwrite it? מצוין - Toggle password visibility using Control + H. Open the password generator using Control + G. - מיתוג נראות ססמה תוך שימוש ב'קונטרול + H'. פתיחת מחולל ססמאות תוך שימוש ב'קונטרול + G'. + Toggle password visibilty using Control + H. Open the password generator using Control + G. + מחלף נראות ססמה תוך שימוש בצרוף המקשים Ctrl + H. לפתיחת מחולל הססמאות נא להשתנמש ב־Ctrl + G. @@ -7277,21 +6281,6 @@ Do you want to overwrite it? הקשה על &Tab בין תווים - - PreviewEntryAttachmentsDialog - - Preview entry attachment - - - - No preview available - - - - Image format not supported - - - QMessageBox @@ -7316,11 +6305,11 @@ Do you want to overwrite it? Skip - דילוג + דלוג Disable - השבתה + מושבת Merge @@ -7330,10 +6319,6 @@ Do you want to overwrite it? Continue המשך - - Continue with weak password - להמשיך עם ססמה חלשה - QObject @@ -7411,7 +6396,7 @@ Do you want to overwrite it? Could not save the native messaging script file for %1. - לא ניתן לשמור את קובץ תסריט ההודעות המובנה ל־%1. + לא ניתן לשמור את קובץ התסריט המקורי של %1. Username for the entry. @@ -7439,15 +6424,15 @@ Do you want to overwrite it? Prompt for the entry's password. - בקשת ססמת רשומה. + הנחיה לססמת רשומה. Generate a password for the entry. - חילול ססמה עבור הרשומה: + חילול ססמה עבור הרשומה. Add a new entry to a database. - הוספת רשומה חדשה למסד־נתונים. + הוספת רשומה חדשה למסד הנתונים. Path of the entry to add. @@ -7463,23 +6448,23 @@ Do you want to overwrite it? Enter password for new entry: - הזנת ססמה לרשומה חדשה: + הזנת ססמה לרשומה חדשה: Writing the database failed %1. - כתיבת מסד־נתונים כשלה %1. + כתיבת מסד הנתונים כשלה %1. Successfully added entry %1. - רשומה %1 נוספה בהצלחה. + רשומה %1 נוספה בהצלחה. Adds a new group to a database. - הוספת קבוצה חדשה למסד־נתונים. + הוספת קבוצה חדשה למסד נתונים. Path of the group to add. - הנתיב לקבוצה להוספה + הנתיב לקבוצה להוספה. Group %1 already exists! @@ -7487,7 +6472,7 @@ Do you want to overwrite it? Group %1 not found. - קבוצה %1 לא נמצאה. + הקבוצה %1 לא נמצאה. Successfully added group %1. @@ -7495,7 +6480,7 @@ Do you want to overwrite it? Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. - נא לבדוק אם ססמאות כלשהן הודלפו בפומבי. FILENAME חייב להיות הנתיב של קובץ המפרט HASS SHA־1 של ססמאות שדלפו בתסדיר HIBP, כפי שזמין ב־https://haveibeenpwned.com/Passwords. + נא לבדוק אם ססמאות כלשהן הודלפו בפומבי. FILENAME חייב להיות הנתיב של קובץ המפרט HASS SHA-1 של ססמאות שדלפו בתבנית HIBP, כפי שזמין ב־https://haveibeenpwned.com/Passwords. FILENAME @@ -7531,7 +6516,7 @@ Do you want to overwrite it? Password for '%1' has been leaked %2 time(s)! - הססמה של '%1' הודלפה פעם %2!הססמה של '%1' הודלפה %2 פעמים!הססמה של '%1' הודלפה %2 פעמים! + הססמה ל־'%1' הודלפה פעם %2!הססמה ל־'%1' הודלפה %2 פעמים!הססמה ל־'%1' הודלפה %2 פעמים!הססמה ל־'%1' הודלפה %2 פעמים! Password for '%1' has been leaked! @@ -7551,7 +6536,7 @@ Do you want to overwrite it? Path to which the attachment should be exported. - נתיב שאליו יש לייצא את הקובץ. + נתיב לצרופה שתיוצא. Could not find entry with path %1. @@ -7637,7 +6622,7 @@ Do you want to overwrite it? Path of the entry to clip. clip = copy to clipboard - הנתיב לרשומה לקיצוץ. + הנתיב לרשומה לקְטִימָה. Timeout before clearing the clipboard (default is %1 seconds, set to 0 for unlimited). @@ -7677,11 +6662,11 @@ Do you want to overwrite it? Entry's "%1" attribute copied to the clipboard! - העתקת תכונת רשומה '%1' ללוח־הגזירים. + העתקת תכונת רשומה '%1' ללוח־הגזירים! Clearing the clipboard in %1 second(s)... - ניקוי לוח־גזירים בתוך שניה %1...ניקוי לוח־גזירים בתוך %1 שניות...ניקוי לוח־גזירים בתוך %1 שניות... + ניקוי לוח־גזירים בתוך שניה %1...ניקוי לוח־גזירים בתוך %1 שניות...ניקוי לוח־גזירים בתוך %1 שניות...ניקוי לוח־גזירים בתוך %1 שניות... Clipboard cleared! @@ -7689,7 +6674,7 @@ Do you want to overwrite it? Close the currently opened database. - סגירת מסד־נתונים הנוכחי + סגירת מסד הנתונים הנוכחי. Display this help. @@ -7697,7 +6682,7 @@ Do you want to overwrite it? Silence password prompt and other secondary outputs. - השתקת בקשת הססמה ופלטים משניים אחרים. + השתקת הנחית ססמה ופלטים משניים אחרים. Key file of the database. @@ -7709,11 +6694,11 @@ Do you want to overwrite it? Deactivate password key for the database. - השבתת הפעלת מפתח ססמה עבור מסד־נתונים. + השבתת הפעלת מפתח ססמה עבור מסד הנתונים. Yubikey slot and optional serial used to access the database (e.g., 1:7370001). - חריץ Yubikey וסדרה חלופית המשמשת לגישה למסד־נתונים (למשל, 1:7370001). + חריץ Yubikey וסדרה חלופית המשמשת לגישה למסד הנתונים (למשל, 1:7370001). slot[:serial] @@ -7727,13 +6712,9 @@ Do you want to overwrite it? Too many arguments provided. סופקו משתנים רבים מדי. - - Path of the database. - הנתיב למסד־נתונים. - Target decryption time in MS for the database. - זמן פענוח יעד מסד־נתונים במילי־שניות. + זמן פענוח יעד מסד הנתונים במילי־שניות. time @@ -7741,15 +6722,19 @@ Do you want to overwrite it? Set the key file for the database. - הגדרת קובץ המפתח עבור מסד־נתונים. + הגדרת קובץ המפתח עבור מסד הנתונים. Set a password for the database. - הגדרת ססמה למסד־נתונים. + הגדרת ססמה למסד הנתונים. Create a new database. - יצירת מסד־נתונים חדש + יצירת מסד־נתונים חדש. + + + Path of the database. + הנתיב למסד הנתונים. Invalid decryption time %1. @@ -7789,63 +6774,290 @@ Do you want to overwrite it? Failed to save the database: %1. - כשל בשמירת מסד־נתונים לקובץ : %1 + כשל בשמירת מסד־נתונים לקובץ : %1. Successfully created new database. מסד־נתונים חדש נוצר בהצלחה. - Unset the password for the database. - הסרת הגדרת ססמה למסד־הנתונים. + Word count for the diceware passphrase. + ספירת מילים עבור ביטוי ססמה הטלת־קוביות. - Unset the key file for the database. - הסרת הגדרת קובץ המפתח למסד־הנתונים. + count + CLI parameter + ספירה - Edit a database. - עריכת מסד־נתונים. + Wordlist for the diceware generator. +[Default: EFF English] + רשימת מילים עבור מחולל הטלת־קוביות. +[ברירת מחדל: אנגלית EFF] - Cannot use %1 and %2 at the same time. - לא ניתן להשתמש ב־%1 וב־%2 בו זמנית. + Generate a new random diceware passphrase. + חילול ביטוי ססמת הטלת־קוביות אקראית חדשה. - Could not change the database key. - לא ניתן היה לשנות את מפתח מסד־הנתונים. + Invalid word count %1 + ספירת מילים לא תקינה %1 - Database was not modified. - מסד־נתונים לא השתנה. + The word list is too small (< 1000 items) + רשימת המילים קטנה מדי (< 1000 פריטים) + + + Title for the entry. + כותרת הרשומה. + + + title + כותרת + + + Edit an entry. + עריכת רשומה. + + + Path of the entry to edit. + הנתיב לרשומה לעריכה. + + + Not changing any field for entry %1. + לא השתנו שדות ברשומה %1. + + + Enter new password for entry: + הזנת ססמה חדשה לרשומה: Writing the database failed: %1 - כתיבת מסד־נתונים כשלה: %1 + כתיבת מסד הנתונים כשלה: %1 - Successfully edited the database. - מסד־נתונים נערך בהצלחה. + Successfully edited entry %1. + רשומה %1 נערכה בהצלחה. - Cannot remove password: The database does not have a password. - לא ניתן להסיר ססמה: אין למסד־הנתונים ססמה. + Perform advanced analysis on the password. + ביצוע ניתוח מתקדם לססמה. - Cannot remove file key: The database does not have a file key. - לא ניתן להסיר קובץ מפתח: אין למסד־הנתונים קובץ מפתח. + Password for which to estimate the entropy. + ססמה להערכת האנטרופיה. - Loading the new key file failed: %1 - טעינת קובץ מפתח כשלה: %1 + Estimate the entropy of a password. + הערכת אנטרופית ססמה. - Found unexpected Key type %1 - נמצ סוג מפתח לא צפוי %1 + Length %1 + אורך %1 - Cannot remove all the keys from a database. - לא ניתן להסיר את כל המפתחות ממסד־נתונים. + Entropy %1 + אנטרופיה %1 + + + Log10 %1 + Log10 %1 + + + Multi-word extra bits %1 + סיביות מרובות מילים %1 נוספות + + + Type: Bruteforce + סוג: תְּקִיפָה כּוֹחָנִית + + + Type: Dictionary + סוג: מילון + + + Type: Dict+Leet + סוג: Dict+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) + סוג: תכתיב+לייט(מחזורי) + + + Type: User Words(Rep) + סוג: מילות משתמש(מחזורי) + + + Type: User+Leet(Rep) + סוג: משתמש+לית(מחזורי) + + + Type: Repeated(Rep) + סוג: חוזר(מחזורי) + + + Type: Sequence(Rep) + סוג: רצף(מחזורי) + + + Type: Spatial(Rep) + סוג: מרחבי(מחזורי) + + + Type: Date(Rep) + סוג: תאריך(מחזורי) + + + Type: Unknown (%1) + סוג: לא ידוע (%1) + + + Entropy %1 (%2) + אנטרופיה %1 (%2) + + + *** Password length (%1) != sum of length of parts (%2) *** + אורך ססמה (%1) != סכום אורך החלקים (%2) *** + + + Exit interactive mode. + יציאה ממצב הידודי. + + + Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. + תבנית לשימוש בעת ייצוא. האפשרויות הזמינות הן 'xml' או 'csv'. ברירת המחדל היא 'xml'. + + + Exports the content of a database to standard output in the specified format. + ייצוא תוכן מסד־נתונים לפלט רגיל בתבנית שצוינה. + + + Unable to export database to XML: %1 + לא ניתן לייצא מסד־נתונים ל־XML: %1 + + + Unsupported format %1 + תבנית %1 לא נתמכת + + + Length of the generated password + אורך הססמה שחוללה + + + length + אורך + + + Use lowercase characters + שימוש בתווי אותיות־קטנות + + + Use uppercase characters + שימוש בתווי אותיות רישיות + + + Use numbers + שימוש במספרים + + + Use special characters + שימוש בתווים מיוחדים + + + Use extended ASCII + שימוש ב־ASCII מורחב + + + Exclude character set + החרגת ערכת תווים + + + chars + תווים + + + Use custom character set + שימוש בערכת תווים מותאמת אישית + + + Exclude similar looking characters + החרגת תווים דומים + + + Include characters from every selected group + הכללת תווים מכל קבוצה שנבחרה + + + Generate a new random password. + חילול ססמה אקראית חדשה. + + + Invalid password length %1 + אורך ססמה לא תקין %1 + + + Invalid password generator after applying all options + מחולל ססמאות לא תקין לאחר החלת כל האפשרויות + + + Display command help. + הצגת עזרת פקודה. + + + Available commands: + פקודות זמינות: + + + Import the contents of an XML database. + ייבוא תוכן מסד נתוני XML. + + + Path of the XML database export. + נתיב ייצוא מסד הנתונים XML. + + + Path of the new database. + הנתיב של מסד הנתונים החדש. + + + Unable to import XML database: %1 + לא ניתן לייבא מסד־נתונים ל־XML: %1 + + + Successfully imported database. + מסד הנתונים יובא בהצלחה. Show a database's information. @@ -7861,7 +7073,7 @@ Do you want to overwrite it? Description: - תיאור: + תיאור: Cipher: @@ -7947,273 +7159,6 @@ Do you want to overwrite it? %1 characters %1 תווים - - Word count for the diceware passphrase. - ספירת מילים עבור ביטוי ססמה הטלת־קוביות. - - - count - CLI parameter - ספירה - - - Wordlist for the diceware generator. -[Default: EFF English] - רשימת מילים עבור מחולל הטלת־קוביות. -[ברירת מחדל: אנגלית EFF] - - - Generate a new random diceware passphrase. - חילול ביטוי ססמת הטלת־קוביות אקראית חדשה. - - - Invalid word count %1 - ספירת מילים לא תקינה %1 - - - Title for the entry. - כותרת הרשומה. - - - title - כותרת - - - Edit an entry. - עריכת רשומה - - - Path of the entry to edit. - הנתיב לרשומה לעריכה - - - Not changing any field for entry %1. - לא השתנו שדות ברשומה %1. - - - Enter new password for entry: - הזנת ססמה חדשה לרשומה: - - - Successfully edited entry %1. - רשומה %1 נערכה בהצלחה. - - - Perform advanced analysis on the password. - ביצוע ניתוח מתקדם לססמה. - - - Password for which to estimate the entropy. - ססמה להערכת האנטרופיה. - - - Estimate the entropy of a password. - הערכת אנטרופית ססמה. - - - Length %1 - אורך %1 - - - Entropy %1 - אנטרופיה %1 - - - Log10 %1 - לוג10 %1 - - - Multi-word extra bits %1 - סיביות מרובות מילים %1 נוספות - - - Type: Bruteforce - סוג: תְּקִיפָה כּוֹחָנִית - - - Type: Dictionary - סוג: מילון - - - Type: Dict+Leet - סוג: Dict+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) - סוג: מילון+לית(מחזורי) - - - Type: User Words(Rep) - סוג: מילות משתמש(מחזורי) - - - Type: User+Leet(Rep) - סוג: משתמש+לית(מחזורי) - - - Type: Repeated(Rep) - סוג: חוזר(מחזורי) - - - Type: Sequence(Rep) - סוג: רצף(מחזורי) - - - Type: Spatial(Rep) - סוג: מרחבי(מחזורי) - - - Type: Date(Rep) - סוג: תאריך(מחזורי) - - - Type: Unknown (%1) - סוג: לא ידוע (%1) - - - Entropy %1 (%2) - אנטרופיה %1 (%2) - - - *** Password length (%1) != sum of length of parts (%2) *** - אורך ססמה (%1) != סכום אורך החלקים (%2) *** - - - Exit interactive mode. - יציאה ממצב הידודי. - - - Exports the content of a database to standard output in the specified format. - ייצוא תוכן מסד־נתונים לפלט רגיל בתסדיר שצוין. - - - Unable to export database to XML: %1 - לא ניתן לייצא מסד־נתונים ל־XML: %1 - - - Unsupported format %1 - תסדיר %1 לא נתמך - - - Length of the generated password - אורך הססמה שחוללה - - - length - אורך - - - Use lowercase characters - שימוש בתווי אותיות־קטנות - - - Use uppercase characters - שימוש בתווי אותיות רישיות - - - Use numbers - שימוש במספרים - - - Use special characters - שימוש בתווים מיוחדים - - - Use extended ASCII - שימוש ב־ASCII מורחב - - - Exclude character set - החרגת ערכת תווים - - - chars - תווים - - - Use custom character set - שימוש בערכת תווים מותאמת אישית - - - Exclude similar looking characters - החרגת תווים דומים - - - Include characters from every selected group - הכללת תווים מכל קבוצה שנבחרה - - - Generate a new random password. - חילול ססמה אקראית חדשה. - - - Invalid password length %1 - אורך ססמה לא תקין %1 - - - Invalid password generator after applying all options - מחולל ססמאות לא תקין לאחר החלת כל האפשרויות - - - Display command help. - הצגת עזרת פקודה. - - - Available commands: - פקודות זמינות: - - - Import the contents of an XML database. - ייבוא תוכן מסד נתוני XML. - - - Path of the XML database export. - נתיב ייצוא מסד־נתונים XML. - - - Path of the new database. - הנתיב של מסד־נתונים החדש. - - - Unable to import XML database: %1 - לא ניתן לייבא מסד־נתונים ל־XML: %1 - - - Successfully imported database. - מסד־נתונים יובא בהצלחה. - Unknown command %1 פקודה לא ידועה %1 @@ -8234,7 +7179,7 @@ Available commands: Displays debugging information. - הצגת מידע ניפוי־תקלים + הצגת מידע ניפוי־תקלים. Invalid command %1. @@ -8262,15 +7207,15 @@ Available commands: Use the same credentials for both database files. - נא להשתמש באותם אישורים עבור שני קבצי מסדי־נתונים. + נא להשתמש באותם אישורים עבור שני קבצי מסדי הנתונים. Key file of the database to merge from. - קובץ מפתח של מסד־נתונים למיזוג. + קובץ מפתח של מסד הנתונים למיזוג. Deactivate password key for the database to merge from. - השבתת מפתח ססמת מסד־נתונים שימוזג. + השבתת מפתח ססמת מסד הנתונים שימוזג. Only print the changes detected by the merge operation. @@ -8278,7 +7223,7 @@ Available commands: Yubikey slot for the second database. - חריץ Yubikey למסד־נתונים השני. + חריץ Yubikey למסד הנתונים השני. slot @@ -8286,11 +7231,11 @@ Available commands: Merge two databases. - מיזוג שני מסדי־נתונים. + מזוג שני מסדי־נתונים. Path of the database to merge from. - הנתיב למסד־נתונים שימוזג. + הנתיב למסד הנתונים שימוזג. Error reading merge file: @@ -8304,11 +7249,11 @@ Available commands: Successfully merged %1 into %2. - %1 מוזג לתוך %2 בהצלחה. + %1 מוזג לתוך %2 בהצלחה. Database was not modified by merge operation. - מסד־נתונים לא הוסגל כתוצאה מפעולת המיזוג. + מסד הנתונים לא הוסגל כתוצאה מפעולת המיזוג. Moves an entry to a new group. @@ -8348,23 +7293,23 @@ Available commands: Successfully recycled entry %1. - רשומה %1 מוחזרה בהצלחה. + רשומה %1 מוחזרה בהצלחה. Successfully deleted entry %1. - רשומה %1 נמחקה בהצלחה. + רשומה %1 נמחקה בהצלחה. Path of the group to remove. - הנתיב לקבוצה להסרה + הנתיב לקבוצה להסרה. Cannot remove root group from database. - לא ניתן להסיר קבוצת שורש ממסד־נתונים. + לא ניתן להסיר קבוצת שורש ממסד הנתונים. Successfully recycled group %1. - רשומה %1 מוחזרה בהצלחה. + רשומה %1 מוחזרה בהצלחה. Successfully deleted group %1. @@ -8372,7 +7317,7 @@ Available commands: Find entries quickly. - חיפוש רשומות מהיר. + חיפוש ערכים מהיר. Search term. @@ -8386,10 +7331,6 @@ Available commands: Show the protected attributes in clear text. הצגת התכונות המוגנות במלל רגיל. - - Show all the attributes of the entry. - הצגת כל מאפייני הרשומה. - Show the attachments of the entry. הצגת הצרופה של הרשומה. @@ -8447,7 +7388,7 @@ Available commands: stop supporting in the future. Please consider generating a new key file. - אזהרה: נעשה שימוש בתסדיר קובץ מפתח ישן ש־KeePassXC עשוי + אזהרה: נעשה שימוש בתבנית קובץ מפתח ישנה ש־KeePassXC עשוי להפסיק לתמוך בעתיד. נא לשקול ליצור קובץ מפתח חדש. @@ -8460,10 +7401,6 @@ Please consider generating a new key file. Invalid YubiKey serial %1 YubiKey סידורי %1 לא תקין - - Please present or touch your YubiKey to continue. - נא להציג או לגעת ב־YubiKey על מנת להמשך... - Enter password to encrypt database (optional): נא להזין ססמה להצפנת מסד־נתונים (חלופי): @@ -8482,12 +7419,13 @@ Please consider generating a new key file. No program defined for clipboard manipulation - לא הוגדרה תוכנית לטפלול לוח־הגזירים + לא הוגדרה תכנית לטפלול לוח־הגזירים All clipping programs failed. Tried %1 - כל תוכניות הקְטִימָה כשלו. בוצע ניסיון %1 + כל תוכניות הקְטִימָה כשלו. בוצע ניסיון %1 + Creating KeyFile %1 failed: %2 @@ -8515,7 +7453,7 @@ Please consider generating a new key file. Failed to load okon processed database: %1 - טעינת מסד־נתונים מעובד okon כשלה: %1 + טעינת מסד הנתונים מעובד okon כשלה: %1 Very weak password @@ -8535,7 +7473,7 @@ Please consider generating a new key file. Password is used %1 time(s) - נעשה שימוש בססמה פעם %1נעשה שימוש בססמה %1 פעמיםנעשה שימוש בססמה %1 פעמים + נעשה שימוש בססמה פעם %1נעשה שימוש בססמה %1 פעמיםנעשה שימוש בססמה %1 פעמיםנעשה שימוש בססמה %1 פעמים Password has expired @@ -8555,7 +7493,7 @@ Please consider generating a new key file. Password expires in %1 day(s) - תוקף הססמה יפוג בתוך יום %1תוקף הססמה יפוג בתוך %1 ימיםתוקף הססמה יפוג בתוך %1 ימים + תוקף הססמה יפוג בתוך יום %1תוקף הססמה יפוג בתוך %1 ימיםתוקף הססמה יפוג בתוך %1 ימיםתוקף הססמה יפוג בתוך %1 ימים Password will expire soon @@ -8579,11 +7517,11 @@ Please consider generating a new key file. Debugging mode is disabled. - מצב ניפוי־תקלים מושבת + מצב ניפוי־תקלים מושבת. Debugging mode is enabled. - מצב ניפוי־תקלים מאופשר + מצב ניפוי־תקלים מאופשר. Operating system: %1 @@ -8627,27 +7565,27 @@ Kernel: %3 %4 over %1 year(s) - מעל שנה %1מעל %1 שניםמעל %1 שנים + מעל שנה %1מעל %1 שניםמעל %1 שניםמעל %1 שנים about %1 month(s) - בסביבות חודש %1בסביבות %1 חודשיםבסביבות %1 חודשים + בסביבות חודש %1בסביבות %1 חודשיםבסביבות %1 חודשיםבסביבות %1 חודשים %1 week(s) - שבועה %1%1 שבועות%1 שבועות + שבועה %1%1 שבועות%1 שבועות%1 שבועות %1 day(s) - יום %1%1 ימים%1 ימים + יום %1%1 ימים%1 ימים%1 ימים %1 hour(s) - שעה %1%1 שעות%1 שעות + שעה %1%1 שעות%1 שעות%1 שעות %1 minute(s) - דקה %1%1 דקות%1 דקות + דקה %1%1 דקות%1 דקות%1 דקות Botan library must be at least %1, found %2.%3.%4 @@ -8663,7 +7601,7 @@ Kernel: %3 %4 Argon2%1 (%2 rounds, %3 KB) - Argon2%1 (%2 סבבים, %3 ק"ב) + Argon2%1 (%2 סבבים, %3 KB) SymmetricCipher::init: Invalid cipher mode. @@ -8701,13 +7639,25 @@ Kernel: %3 %4 file empty קובץ ריק + + malformed string + מחרוזת פגומה + + + missing closing quote + מרכאה סוגרת חסרה + + + %1: (row, col) %2,%3 + %1: (שורה, עמודה) %2,%3 + AES 256-bit AES- 256 סיביות Twofish 256-bit - 256־סיביות Twofish + 256-סיביות Twofish ChaCha20 256-bit @@ -8723,7 +7673,7 @@ Kernel: %3 %4 AES-KDF (KDBX 4) - AES־KDF (KDBX 4) + AES-KDF (KDBX 4) AES-KDF (KDBX 3) @@ -8739,7 +7689,7 @@ Kernel: %3 %4 Clearing the clipboard in %1 second(s)… - ניקוי לוח־גזירים בתוך שניה %1...ניקוי לוח־גזירים בתוך %1 שניות...ניקוי לוח־גזירים בתוך %1 שניות... + ניקוי לוח־גזירים בתוך שניה %1...ניקוי לוח־גזירים בתוך %1 שניות...ניקוי לוח־גזירים בתוך %1 שניות...ניקוי לוח־גזירים בתוך %1 שניות... Group @@ -8780,12 +7730,12 @@ Kernel: %3 %4 %1 ms milliseconds - אלפית שניה %1%1 אלפיות שניה%1 אלפיות שניה + אלפית שניה %1%1 אלפיות שניה%1 אלפיות שניה%1 אלפיות שניה %1 s seconds - שניה %1%1 שניות%1 שניות + שניה %1%1 שניות%1 שניות%1 שניות Do you really want to delete the entry "%1" for good? @@ -8793,11 +7743,11 @@ Kernel: %3 %4 Do you really want to delete %n entry(s) for good? - האם למחוק רשומה %n לעד?האם למחוק %n רשומות לעד?האם למחוק %n רשומות לעד? + האם למחוק רשומה %n לעד?האם למחוק %n רשומות לעד?האם למחוק %n רשומות לעד?האם למחוק %n רשומות לעד? Delete entry(s)? - מחיקת רשומה?מחיקת רשומות?מחיקת רשומות? + מחיקת רשומה?מחיקת רשומות?מחיקת רשומות?מחיקת רשומות? Do you really want to move entry "%1" to the recycle bin? @@ -8805,11 +7755,11 @@ Kernel: %3 %4 Do you really want to move %n entry(s) to the recycle bin? - האם להעביר רשומה %n לסל־המחזור?האם להעביר %n רשומות לסל־המחזור?האם להעביר %n רשומות לסל־המחזור? + האם להעביר רשומה %n לסל־המחזור?האם להעביר %n רשומות לסל־המחזור?האם להעביר %n רשומות לסל־המחזור?האם להעביר %n רשומות לסל־המחזור? Move entry(s) to recycle bin? - העברת רשומה לסל המחזור?העברת רשומות לסל המחזור?העברת רשומות לסל המחזור? + העברת רשומה לסל המחזור?העברת רשומות לסל המחזור?העברת רשומות לסל המחזור?העברת רשומות לסל המחזור? Replace references to entry? @@ -8817,7 +7767,7 @@ Kernel: %3 %4 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 הפניות. האם לכתוב־על הפניות עם ערכים, לדלג על רשומה זו, או למחוק אותה בכל זאת?לרשומה '%1' קיימות %2 הפניות. האם לכתוב־על הפניות עם ערכים, לדלג על רשומה זו, או למחוק אותה בכל זאת?לרשומה '%1' קיימות %2 הפניות. האם לכתוב־על הפניות עם ערכים, לדלג על רשומה זו, או למחוק אותה בכל זאת?לרשומה '%1' קיימות %2 הפניות. האם לכתוב־על הפניות עם ערכים, לדלג על רשומה זו, או למחוק אותה בכל זאת? User name @@ -8869,28 +7819,32 @@ Kernel: %3 %4 lock all open databases - נעילת כל מסדי־נתונים הפתוחים + נעילת כל מסדי הנתונים הפתוחים key file of the database - קובץ המפתח של מסד־נתונים + קובץ המפתח של מסד הנתונים read password of the database from stdin - קריאת ססמה של מסד־נתונים מ־stdin + קריאת ססמה של מסד הנתונים מ־stdin + + + allow app screen recordering and screenshots + אפשור יישום הקלטת מסך וצילומי מסך + + + Locked databases. + מסדי־נתונים נעולים. Database failed to lock. - נעילת מסד־נתונים כשלה. + נעילת מסד הנתונים כשלה. Another instance of KeePassXC is already running. אֶדְגָּם KeePassXC נוסף כבר פועל. - - KeePassXC is not running. No open database to lock - KeePassXC לא פעיל. אין מסד נתונים פתוח לנעילה. - Fatal error while testing the cryptographic functions. שגיאה מכרעת בעת בדיקת פונקציות ההצפנה. @@ -8915,11 +7869,11 @@ Kernel: %3 %4 Failed to create Windows Hello credential. - נכשל ביצירת אישור של Windows Hello + יצירת אישור Windows Hello כשלה. Failed to sign challenge using Windows Hello. - האימות נכשל עם Windows Hello + אימות אתגר־מענה באמצעות Windows Hello כשל. Warning: Failed to block screenshot capture on a top-level window. @@ -8934,300 +7888,70 @@ Kernel: %3 %4 KDF לא תקין - Access to all entries is denied - גישה לכול הרשומות נדחתה + Please present or touch your YubiKey to continue. + נא להציג או לגעת ב־YubiKey על מנת להמשך... - allow screenshots and app recording (Windows/macOS) - אפשור תצלום מצג והקלטת יישום Iוינדוס/מאק OS) + Show all the attributes of the entry. + הצגת כל מאפייני הרשומה. + + + Edit a database. + עריכת מסד־נתונים. + + + Could not change the database key. + לא ניתן היה לשנות את מפתח מסד־הנתונים. + + + Database was not modified. + מסד־נתונים לא השתנה. + + + Successfully edited the database. + מסד־נתונים נערך בהצלחה. + + + Loading the new key file failed: %1 + טעינת קובץ מפתח כשלה: %1 + + + Unset the password for the database. + הסרת הגדרת ססמה למסד־הנתונים. + + + Unset the key file for the database. + הסרת הגדרת קובץ המפתח למסד־הנתונים. + + + Cannot use %1 and %2 at the same time. + לא ניתן להשתמש ב־%1 וב־%2 בו זמנית. + + + Cannot remove all the keys from a database. + לא ניתן להסיר את כל המפתחות ממסד־נתונים. + + + Cannot remove password: The database does not have a password. + לא מיתן להסיר ססמה: אין למסד־הנתונים ססמה. + + + Cannot remove file key: The database does not have a file key. + לא ניתן להסיר קובץ מפתח: אין למסד־הנתונים קובץ מפתח. + + + Found unexpected Key type %1 + נמצ סוג מפתח לא צפוי %1 Set the key file for the database. -This option is deprecated, use --set-key-file instead. - קביעת קובץ המפתח למסד הנתונים. -אפשרות זו הוצאה משימוש, במקום זאת יש להשתמש ב: ' --set-key-file'. +This options is deprecated, use --set-key-file instead. + הגדרת קובץ מפתח למסד־הנתונים +אפשרות זו הוצאה משימוש, נא להשתמש בפקודה --set-key-file במקום. - Databases have been locked. - מסד נתונים ננעל. - - - Attestation not supported - אימות לא נתמך - - - Credential is excluded - נתוני אמנה הוחרגו - - - Passkeys request canceled - בקשת Passkeys בוטלה - - - Invalid user verification - אימות משתמש לא תקין - - - Empty public key - מפתח ציבורי ריק - - - Invalid URL provided - סופק מען URL לא תקין - - - Passkeys - Passkeys - - - AES initialization failed - אתחול AES כשל - - - AES encrypt failed - הצפנת AES כשלה - - - Failed to store in Linux Keyring - אחסון ב־Keyring לינוקס כשל - - - Polkit returned an error: %1 - Polkit החזיר שגיאה: %1 - - - Could not locate key in keyring - לא ניתן לאתר מפתח ב־keyring - - - Could not read key in keyring - לא ניתן לקרוא מפתח ב־keyring - - - AES decrypt failed - פענוח AES כשל - - - No Polkit authentication agent was available - סוכן אימות Polkit לא זמין - - - Polkit authorization failed - הרשאת Polkit כשלה - - - No Quick Unlock provider is available - ספק שרות שחרור נעילה מהיר לא זמין - - - Failed to init KeePassXC crypto. - נכשל באיתחול קריפטו KeePassXC. - - - Failed to encrypt key data. - הצפנת נתוני מפתח כשלה. - - - Failed to get Windows Hello credential. - קבלת אישור Windows Hello כשלה. - - - Failed to decrypt key data. - פענוח נתוני מפתח כשלה. - - - Origin is empty or not allowed - מקור ריק או לא מאופשר - - - Effective domain is not a valid domain - התחום בפועל אינן תחום תקין - - - Origin and RP ID do not match - מקור ומזהה RP לא תואמים - - - No supported algorithms were provided - לא סופק אלגוריתם נתמך - - - Wait for timer to expire - המתנה לתפוגת קוצב זמן - - - Challenge is shorter than required minimum length - אתגר מענה קצר מאורך מזערי נדרש - - - user.id does not match the required length - מזהה משתמש לא תואם לאורך הנדרש - - - Favorite - Tag for favorite entries - מועדף - - - File does not exist. - קובץ לא קיים. - - - Cannot open file: %1 - לא ניתן לפתוח קובץ: %1 - - - Cannot parse file: %1 at position %2 - לא ניתן לפרק קובץ: %1 באיות %2 - - - Failed to decrypt json file: %1 - פענוח קובץ json כשל: %1 - - - Invalid encKeyValidation field - שדה encKeyValidation לא תקין - - - Invalid cipher list within encKeyValidation field - רשימת צופן בתוך שדה צופן encKeyValidation לא תקינה - - - Wrong password - ססמה שגויה - - - Invalid encrypted data field - שדה נתונים מוצפן לא תקין - - - Invalid cipher list within encrypted data field - רשימה צופן בתוך שדה נתונים מוצפן לא תקין - - - Cannot initialize cipher - לא ניתן לאתחל צופן - - - Cannot decrypt data - לא ניתן לפענח נתונים - - - Bitwarden Import - ייבוא Bitwarden - - - Archived - Tag for archived entries - הועבר לארכיון - - - Invalid 1PUX file format: Not a valid ZIP file. - תסדיר קובץ 1PUX לא תקין: לא קובץ ZIP תקין. - - - Invalid 1PUX file format: Missing export.data - תסדיר קובץ 1PUX לא תקין: נתוני ייצוא חסרים - - - 1Password Import - 1Password יובא - - - Enter Shortcut - הזנת קיצור־דרך - - - Action - פעולה - - - Shortcuts - קיצורי־דרך - - - Unknown passkeys error - שגיאת passkeys לא ידועה - - - Invalid KDF iterations, cannot decrypt json file - חזרורי KDF לא תקינים, לא ניתן לפענח קובץ json - - - Unsupported format, ensure your Bitwarden export is password-protected - תסדיר לא נתמך, נא לוודא שייצוא Bitwarden מוגן בססמה - - - Only PBKDF and Argon2 are supported, cannot decrypt json file - רק PBKDF ו־Argon2 נתמכים, לא ניתן לפענח קובץ json - - - Reset Shortcuts - שיצוב קיצורי־דרך - - - Double click an action to change its shortcut - הקשה כפולה על פעולה לשינוי קיצור הדרך שלה - - - Filter... - סינון... - - - Shortcut Conflict - התנגשות קיצור־דרך - - - Shortcut %1 conflicts with '%2'. Overwrite shortcut? - קיצור־דרך %1 מתנגש עם %2'. לכתוב על קיצור־הדרך? - - - Cannot generate valid passphrases because the wordlist is too short - לא ניתן לחולל ביטוי סיסמה תקין מכיוון שרשימת המילים קצרה מדי - - - Encrypted files are not supported. - - - - Proton Pass Import - - - - Delete plugin data? - האם למחוק נתוני מתקע? - - - Delete plugin data from Entry(s)? - מחיקת נתוני מתקע מרשומות?מחיקת נתוני מתקע מרשומות?מחיקת נתוני מתקע מרשומה? - - - Passkey - Passkey - - - Format to use when exporting. Available choices are 'xml', 'csv' or 'html'. Defaults to 'xml'. - - - - start minimized to the system tray - - - - malformed string, possible unescaped delimiter - - - - missing closing delimiter - - - - %1, row: %2, column: %3 - - - - Tags - תגים + KeePassXC is not running. No open database to lock + KeePassXC לא פעיל. אין מסד נתונים פתוח לנעילה. @@ -9257,46 +7981,27 @@ This option is deprecated, use --set-key-file instead. QtIOCompressor::open The gzip format not supported in this version of zlib. - תסדיר gzip אינו נתמך בגרסה זו של zlib. + תבנית gzip אינה נתמכת בגרסה זו של zlib. Internal zlib error: שגיאת zlib פנימית: - - RemoteHandler - - Command `%1` did not finish in time. Process was killed. - פקודה `%1` לא הסתיימה בזמן. תהליך חוסל. - - - Failed to upload merged database. Command `%1` did not finish in time. Process was killed. - העלאת מסד נתונים שמוזג כשל. פקודה `%1` לא הסתיימה בזמן. תהליך חוסל. - - - Invalid download parameters provided. - סופקו פרמטרי הורדה לא תקינים. - - - Command `%1` failed to download database. - פקודה `%1` כשלה בהורדת מסד נתונים. - - - Invalid database pointer or upload parameters provided. - סופקו מצביעי מסד נתונים או פרמטרי העלאה לא תקינים. - - - Command `%1` exited with status code: %2 - פקודה `%1` יצאה עם קוד מצב: %2 - - - Failed to upload merged database. Command `%1` exited with status code: %2 - העלאת מסד נתונים שמוזג כשלה. פקודה `%1` יצאה עם קוד מצב: %2 - - ReportsWidgetBrowserStatistics + + Exclude expired entries from the report + החרגת רשומות שפג תוקפם מהדוח + + + Show only entries which have URL set + הצגת רשומות הכוללות מען URL + + + Show only entries which have browser settings in custom data + הצגת ערכים, בעלי הגדרות דפדפן בנתונים מותאמים אישית, בלבד + Double-click entries to edit. לעריכה, נא להקיש הקשה כפולה על הרשומות. @@ -9331,11 +8036,11 @@ This option is deprecated, use --set-key-file instead. Please wait, browser statistics is being calculated… - אנא המתן, נתונים סטטיסטיים מחושבים... + נא להמתין, סטטיסטיקת נתוני דפדפן מחושבים עתה... No entries with a URL, or none has browser extension settings saved. - אין רשומות עם כתובת האתר, או ללא הגדרות הרחבות דפדפן שנשמרו. + לאף רשומה, עם או ללא מען URL, אין הגדרות הרחבת דפדפן שנשמרו. Title @@ -9355,59 +8060,50 @@ This option is deprecated, use --set-key-file instead. Delete Entry(s)… - מחיקת רשומה?מחיקת רשומות?מחיקת רשומות? + מחיקת רשומות... Exclude from reports החרגה מדוחות - - Expire Entry(s)… - - - - Only show entries that have a URL - להציג רק רשומות שיש להן מען URL - - - Only show entries that have been explicitly allowed or denied - להציג רק רשומות שאפשרו או נדחו במפורש - - - Show expired entries - הצגת רשומות שפגו - - - (Expired) - (פג) - - - Delete plugin data from Entry(s)… - מחיקת נתוני מתקע מרשומות?מחיקת נתוני מתקע מרשומות?מחיקת נתוני מתקע מרשומה? - ReportsWidgetHealthcheck - Show expired entries - הצגת רשומות שפגו + Exclude expired entries from the report + החרגת רשומות שפג תוקפם מהדוח - (Expired) - (פג) + Also show entries that have been excluded from reports + הצגת ערכים שלא נכללו בדוחות גם כן Hover over reason to show additional details. Double-click entries to edit. - ריחוף מעל סיבה להצגת פרטים נוספים. הקשה כפולה על רשומות לעריכה. + ריחוף מעל סיבה להצגת פרטים נוספים. הקשה כפולה על ערכים לעריכה. + + + Bad + Password quality + רע Bad — password must be changed חלש — יש לשנות ססמה + + Poor + Password quality + עלוב + Poor — password should be changed חלש — יש לשנות ססמה + + Weak + Password quality + חלש + Weak — consider changing the password חלש — נא לשקול לשנות הססמה @@ -9418,7 +8114,7 @@ This option is deprecated, use --set-key-file instead. This entry is being excluded from reports - הרשומה הוחרגה מדוחות + הרשומה הופעלה מתוך דוחות Please wait, health data is being calculated… @@ -9426,7 +8122,7 @@ This option is deprecated, use --set-key-file instead. Congratulations, everything is healthy! - מזל טוב, הכל תקין! + מזל טוב, הכול תקין! Title @@ -9450,26 +8146,18 @@ This option is deprecated, use --set-key-file instead. Delete Entry(s)… - מחיקת רשומה?מחיקת רשומות?מחיקת רשומות? + מחיקת רשומה...מחיקת רשומות...מחיקת רשומות...מחיקת רשומות... Exclude from reports החרגה מדוחות - - Expire Entry(s)… - - - - Show entries that have been excluded from reports - הצגת רשומות שהוחרגו מדוחות - ReportsWidgetHibp CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. - התראה: דוח זה מחייב שליחת מידע לשירות המקוון של 'האם השתלטו עלי' (https://haveibeenpwned.com). אם תמשיכו, ססמאות מסד־נתונים יוצפנו וחמשת התווים הראשונים של הגיבוב יישלחו באופן מאובטח לשירות זה. מסד־נתונים יישאר מאובטח ולא יהיה ניתן לבנות אותו מחדש מהמידע שיתקבל. עם זאת, מספר הססמאות שיתקבלו וכתובת ה־IP ייחשפו לשירות זה. + התראה: דוח זה מחייב שליחת מידע לשירות המקוון של 'האם השטלתו עלי' (https://haveibeenpwned.com). אם תמשיכו, ססמאות מסד הנתונים יוצפנו וחמשת התווים הראשונים של הגיבוב יישלחו באופן מאובטח לשירות זה. מסד הנתונים יישאר מאובטח ולא יהיה ניתן לבנות אותו מחדש מהמידע שיתקבל. עם זאת, מספר הססמאות שיתקבלו וכתובת ה־IP ייחשפו לשירות זה. Perform Online Analysis @@ -9477,7 +8165,7 @@ This option is deprecated, use --set-key-file instead. Also show entries that have been excluded from reports - הצגת רשומות שלא נכללו בדוחות גם כן + הצגת ערכים שלא נכללו בדוחות גם כן This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. @@ -9485,7 +8173,7 @@ This option is deprecated, use --set-key-file instead. Congratulations, no exposed passwords! - מזל טוב, אין ססמאות חשופות! + ברכות, אין ססמאות חשופות! Title @@ -9505,7 +8193,7 @@ This option is deprecated, use --set-key-file instead. This entry is being excluded from reports - הרשומה הוחרגה מדוחות + הרשומה הופעלה מתוך דוחות once @@ -9553,84 +8241,12 @@ This option is deprecated, use --set-key-file instead. Delete Entry(s)… - מחיקת רשומה?מחיקת רשומות?מחיקת רשומות? + מחיקת רשומה?מחיקת רשומות?מחיקת רשומות?מחיקת רשומות? Exclude from reports החרגה מדוחות - - Expire Entry(s)… - - - - - ReportsWidgetPasskeys - - Export - ייצא - - - Import - ייבוא - - - List of entry URLs - רשימת כל מעני URL ברשומות - - - Title - כותרת - - - Path - נתיב - - - Username - שם משתמש - - - URLs - מעני URL - - - Edit Entry… - עריכת רשומה... - - - Delete Entry(s)… - מחיקת רשומה?מחיקת רשומות?מחיקת רשומות? - - - Relying Party - צד נסמך - - - Show expired entries - הצגת רשומות שפגו - - - (Expired) - (פג) - - - Export Confirmation - אישור ייצוא - - - The passkey file will be vulnerable to theft and unauthorized use, if left unsecured. Are you sure you want to continue? - קובץ ה־Passkey יהיה פגיע לגנבה או שימוש לא מאושר.האם להמשיך? - - - Please wait, list of entries with passkeys is being updated… - נא להמתין, מתבצעת העלאת רשימת רשומות עם passkeys -... - - - No entries with passkeys. - אין רשומות עם passkeys. - ReportsWidgetStatistics @@ -9684,7 +8300,7 @@ This option is deprecated, use --set-key-file instead. The database was modified, but the changes have not yet been saved to disk. - מסד־נתונים השתנה, אך השינויים עדיין לא נשמרו לכונן הקשיח. + מסד הנתונים הוסגל, אך השינויים עדיין לא נשמרו לכונן הקשיח. Number of groups @@ -9700,7 +8316,7 @@ This option is deprecated, use --set-key-file instead. The database contains entries that have expired. - מסד־נתונים מכיל רשומות פגי תוקף. + מסד הנתונים מכיל ערכים פגי תוקף. Unique passwords @@ -9805,14 +8421,6 @@ This option is deprecated, use --set-key-file instead. No agent running, cannot list identities. אין סוכן פעיל, לא ניתן להוסיף זהויות. - - Failed to remove all SSH identities from agent. - - - - All SSH identities removed from agent. - - SearchHelpWidget @@ -9854,7 +8462,7 @@ This option is deprecated, use --set-key-file instead. match anything - התאמת הכל + התאמת הכול match one @@ -9879,10 +8487,6 @@ This option is deprecated, use --set-key-file instead. Search Help עזרה בחיפוש - - Save Search - שמירת חיפוש - Search (%1)… Search placeholder text, %1 is the keyboard shortcut @@ -9896,6 +8500,10 @@ This option is deprecated, use --set-key-file instead. Limit search to selected group הגבלת חיפוש לקבוצה שנבחרה + + Save Search + שמירת חיפוש + SettingsClientModel @@ -9951,15 +8559,37 @@ This option is deprecated, use --set-key-file instead. <html><head/><body><p>If enabled, any attempt to read a password must be confirmed. Otherwise, clients can read passwords without confirmation when the database is unlocked.</p><p>This option only covers the access to the password of an entry. Clients can always enumerate the items of exposed databases and query their attributes.</p></body></html> - <html><head/><body><p>אם אופשר, כל ניסיון לקרוא ססמה תחויב באישור. אחרת, לקוחות יוכלו לקרוא ססמאות ללא אישור כאשר מסד־נתונים לא נעול.</p><p>אפשרות זו מכסה רק את הגישה לססמה של רשומה. לקוחות יכולו תמיד לספרר את פריטי מסדי־נתונים החשופים ולתשאל את התכונות שלהם.</p></body></html> + <html><head/><body><p>אם אופשר, כל ניסיון לקרוא ססמה תחויב באישור. אחרת, לקוחות יוכלו לקרוא ססמאות ללא אישור כאשר מסד הנתונים לא נעול.</p><p>אפשרות זו מכסה רק את הגישה לססמה של רשומה. לקוחות יכולו תמיד לספרר את פריטי מסדי־נתונים החשופים ולתשאל את התכונות שלהם.</p></body></html> Confirm when passwords are retrieved by clients אישור כשלקוחות מאחזרים ססמאות + + <html><head/><body><p><span style=" + font-family:'-apple-system','BlinkMacSystemFont','Segoe UI','Helvetica','Arial','sans-serif','Apple Color + Emoji','Segoe UI Emoji'; font-size:14px; color:#24292e; background-color:#ffffff;">This setting does + not override disabling recycle bin prompts</span></p></body></html> + + <html><head/><body><p><span style=" + font-family:'-apple-system','BlinkMacSystemFont','Segoe UI','Helvetica','Arial','sans-serif','Apple Color + Emoji','Segoe UI Emoji'; font-size:14px; color:#24292e; background-color:#ffffff;">הגדרה זו לא עקפת את השבתת הנחיות סל המיחזור</span></p></body></html> + + Confirm when clients request entry deletion - אישור כאשר לקוחות מבקשים מחיקת רשומה + אשור כאשר לקוחות מבקשים מחיקת רשומה + + + <html><head/><body><p>This improves compatibility with certain applications + which search for password without unlocking the database first.</p><p>But enabling this may also + crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a + different value set in applications.)</p></body></html> + + <html><head/><body><p>שיפור תאימות עם יישומוניםים מסוימים +שמחפשים ססמה, מבלי לשחרר תחילה את נעילת מסד הנתונים.</p><p>אך אפשור תכונה זו עשויה לגרום +לקריסת ה'לקוח' במידה ונעילת מסד הנתונים לא תשוחרר בתוך פרק־זמן קצוב מסוים. (בדרך כלל 25 שניות, אך ייתכן שהוגדר +ערך שונה ביישומונים עצמם.)</p></body></html> Prompt to unlock database before searching @@ -9967,7 +8597,7 @@ This option is deprecated, use --set-key-file instead. Exposed database groups: - קבוצות מסד־נתונים חשופות: + קבוצות מסדי־נתונים חשופות: Authorization @@ -9979,20 +8609,12 @@ This option is deprecated, use --set-key-file instead. <b>Warning:</b> - <b>אזהרה:</b> + <b>אזהרה:</b> Save current changes to activate the plugin and enable editing of this section. שמירת השינויים הנוכחיים כדי להפעיל את המתקע ולאפשר עריכת מקטע זה. - - <html><head/><body><p>This setting does not override disabling recycle bin prompts </p></body></html> - <html><head/><body><p>הגדרה זו does not לא עוקפת השבתת השבתת הנחיות סל מחזור </p></body></html> - - - <html><head/><body><p>This improves compatibility with certain applications which search for password without unlocking the database first.</p><p>But enabling this may also crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a different value set in applications.) </p></body></html> - <html><head/><body><p>משפר תאימות עם יישומים מסוימים שמחפשים ססמה מבלי לשחרר את נעילת מסד הנתונים תחילה.</p><p>אבל הפעלת אפשרות זו עשויה גם לגרום ללקוח לקרוס אם נעילת מסד הנתונים ישתחרר בתוך פרק זמן מסוים. (בדרך כלל 25 שניות, אך עשוי להיות ערך שונה שהוגדר ביישומים.) </p></body></html> - SettingsWidgetKeeShare @@ -10100,14 +8722,6 @@ This option is deprecated, use --set-key-file instead. TagModel - - Clear Search - ניקוי חיפוש - - - All Entries - כל הרשומות - Expired תפוגה @@ -10116,6 +8730,14 @@ This option is deprecated, use --set-key-file instead. Weak Passwords ססמאות חלשות + + All Entries + כל הרשומות + + + Clear Search + ניקוי חיפוש + TagView @@ -10133,7 +8755,7 @@ This option is deprecated, use --set-key-file instead. Remove tag "%1" from all entries in this database? - הסרת תג '%1' מכול הרשומות במסד־נתונים זה? + להסיר תג '%1' מכול הרשומות במסד־נתונים זה? @@ -10148,7 +8770,7 @@ This option is deprecated, use --set-key-file instead. Expires in <b>%n</b> second(s) - תפוגה <b>בתוך שניה %n</b>תפוגה <b>בתוך %n</b> שניותתפוגה <b>בתוך %n</b> שניות + תפוגה <b>בתוך שניה %n</b>תפוגה <b>בתוך %n</b> שניותתפוגה <b>בתוך %n</b> שניותתפוגה <b>בתוך %n</b> שניות @@ -10183,7 +8805,7 @@ This option is deprecated, use --set-key-file instead. Secret key must be in Base32 format - מפתח סודי חייב להיות בתסדיר Base32 + מפתח סודי חייב להיות בתבנית Base32 Secret key field @@ -10220,7 +8842,7 @@ This option is deprecated, use --set-key-file instead. sec Seconds - שניה + שניה Code size: @@ -10237,7 +8859,7 @@ This option is deprecated, use --set-key-file instead. You have entered an invalid secret key. The key must be in Base32 format. Example: JBSWY3DPEHPK3PXP - הוזן מפתח סודי לא תקין. המפתח חייב להיות בתסדיר Base32. + הוזן מפתח סודי לא תקין. המפתח חייב להיות בתבנית Base32. דוגמה: JBSWY3DPEHPK3PXP @@ -10272,7 +8894,7 @@ Example: JBSWY3DPEHPK3PXP Software Update - עדכון תכנה + עדכון תוכנה An error occurred when trying to retrieve update information, please try again later. @@ -10293,29 +8915,37 @@ Example: JBSWY3DPEHPK3PXP Start storing your passwords securely in a KeePassXC database ניתן להתחיל ולאחסן את הססמאות בצורה מאובטחת במסד נתוני KeePassXC + + Create new database + יצירת מסד־נתונים חדש + + + Open existing database + פתיחת מסד־נתונים קיים + + + Import from KeePass 1 + יבוא מ־KeePass1 + + + Import from 1Password + יבוא מ־1Password + + + Import from CSV + יבוא מקובץ CSV + Recent databases מסדי־נתונים אחרונים Open a recent database - פתיחת מסד־נתונים אחרון + פתיחת מסד־נתונים קודם Welcome to KeePassXC %1 - ברוכים הבאים ל־KeePassXC %1 - - - Create Database - יצירת מסד נתונים - - - Open Database - פתיחת מסד נתונים - - - Import File - ייבוא קובץ + ברוכים הבאים ל-KeePassXC %1 @@ -10333,8 +8963,31 @@ Example: JBSWY3DPEHPK3PXP לא ניתן לרשום קיצור דרך כללי + + WindowsHello + + Failed to init KeePassXC crypto. + נכשל באיתחול קריפטו KeePassXC. + + + Failed to encrypt key data. + הצפנת נתוני מפתח כשלה. + + + Failed to get Windows Hello credential. + קבלת אישור Windows Hello כשלה. + + + Failed to decrypt key data. + פענוח נתוני מפתח כשלה. + + YubiKey + + %1 No interface, slot %2 + %1 אין מנשק, חריץ %2 + General: כללי: @@ -10346,6 +8999,14 @@ Example: JBSWY3DPEHPK3PXP YubiKeyEditWidget + + Refresh hardware tokens + רענון אסימוני חומרה + + + Refresh + רענן + Hardware key slot selection בחירת עמדה למפתח חומרה @@ -10378,6 +9039,10 @@ Example: JBSWY3DPEHPK3PXP Challenge-Response set, click to change or remove ערכת אתגר־מענה, הקשה לשנוי או הסרה + + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + <p>אם יש לכם <a href="https://www.yubico.com/">YubiKey</a> או <a href="https://onlykey.io">OnlyKey</a>, ניתן להשתמש בו לאבטחה נוספת.</p><p>המפתח דורש שאחד החריצים שלו יתוכנת <a href="https://www.yubico.com/products/services-software/challenge-response/">כאתגר-מענה HMAC-SHA1</a>.</p> + Detecting hardware keys… זוהה מפתח חומרה... @@ -10386,25 +9051,28 @@ Example: JBSWY3DPEHPK3PXP No hardware keys detected לא זוהה מפתח חומרה + + + YubiKeyInterface - Refresh hardware keys - רענון מפתחות חומרה - - - <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed with <a href="https://keepassxc.org/docs/#faq-yubikey-howto">Challenge-Response</a>.</p> - - - - Hardware keys found, but no slots are configured - + %1 Invalid slot specified - %2 + צוין חריץ %1 לא תקין - %2 YubiKeyInterfacePCSC + + (PCSC) %1 [%2] Challenge-Response - Slot %3 + (PCSC) %1 [%2] אתגר־מענה - חריץ %3 + The YubiKey PCSC interface has not been initialized. מנשק PCSC YubiKey לא אותחל. + + Hardware key is currently in use. + מפתח החומרה נמצא כעת בשימוש. + Could not find or access hardware key with serial number %1. Please present it to continue. לא ניתן למצוא או לגשת למפתח חומרה עם המספר הסידורי %1. נא להציגו על מנת להמשיך. @@ -10421,21 +9089,6 @@ Example: JBSWY3DPEHPK3PXP Failed to complete a challenge-response, the PCSC error code was: %1 השלמת אתגר־מענה כשלה, קוד שגיאת PCSC היתה: %1 - - (NFC) %1 [%2] - Slot %3, %4 - YubiKey display fields - (NFC) %1 [%2] - חריץ %3, %4 - - - Press - USB Challenge-Response Key interaction request - לחיצה - - - Passive - USB Challenge-Response Key no interaction required - סביל - YubiKeyInterfaceUSB @@ -10443,6 +9096,14 @@ Example: JBSWY3DPEHPK3PXP Unknown לא ידוע + + (USB) %1 [%2] Configured Slot - %3 + (USB) %1 [%2] חריץ שתצורתו נקבעה - %3 + + + (USB) %1 [%2] Challenge-Response - Slot %3 - %4 + (USB) %1 [%2] אתגר־מענה - חריץ %3 - %4 + Press USB Challenge-Response Key interaction request @@ -10457,6 +9118,10 @@ Example: JBSWY3DPEHPK3PXP The YubiKey USB interface has not been initialized. מנשק USB YubiKey לא אותחל. + + Hardware key is currently in use. + מפתח החומרה נמצא כעת בשימוש. + Could not find hardware key with serial number %1. Please plug it in to continue. לא ניתן למצוא מפתח חומרה עם המספר הסידורי %1. נא לחבר אותו כדי להמשיך. @@ -10473,15 +9138,5 @@ Example: JBSWY3DPEHPK3PXP Failed to complete a challenge-response, the specific error was: %1 השלמת אתגר־מענה כשלה, השגיאה המסוימת היתה: %1 - - %1 [%2] - Slot %3 - YubiKey NEO display fields - %1 [%2] - חריץ %3 - - - %1 [%2] - Slot %3, %4 - YubiKey display fields - %1 [%2] - חריץ %3, %4 - \ No newline at end of file diff --git a/share/translations/keepassxc_hr.ts b/share/translations/keepassxc_hr.ts index 417c7a362..7f44a1e6b 100644 --- a/share/translations/keepassxc_hr.ts +++ b/share/translations/keepassxc_hr.ts @@ -150,6 +150,10 @@ SSH Agent connection is working! SSH Agent veza radi! + + Use both agents + + ApplicationSettingsWidget @@ -221,6 +225,10 @@ Select backup storage directory + + This setting cannot be enabled when minimize on unlock is enabled. + + ApplicationSettingsWidgetGeneral @@ -489,6 +497,14 @@ Remember last typed entry for: + + recent files + + + + Show passwords in color + + ApplicationSettingsWidgetSecurity @@ -638,6 +654,10 @@ Invalid placeholder: %1 + + Entry does not have attribute for PICKCHARS: %1 + + AutoTypeAssociationsModel @@ -1417,10 +1437,6 @@ Sigurnosna kopija baza podataka nalazi se na %2 Key File: Datoteka ključa: - - <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information…</p> - - Key file help Datoteka ključa pomoć @@ -1433,11 +1449,6 @@ Sigurnosna kopija baza podataka nalazi se na %2 Hardware Key: Hardverski ključ: - - <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> -<p>Click for more information…</p> - - Hardware key help Hardverski ključ pomoć @@ -1573,6 +1584,15 @@ Ako nemate datoteku ključa, ostavite polje prazno. Select hardware key… Odaberite hardverski ključ... + + <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information…</p> + + + + <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +<p>Click for more information…</p> + + DatabaseSettingWidgetMetaData @@ -2219,13 +2239,21 @@ Ovo je definitivno pogreška, molimo prijavite to programerima. Database tab name modifier %1 [Zaključano] + + Export database to XML file + + + + XML file + + + + Writing the XML file failed + + DatabaseWidget - - Database Tags - - Searching… @@ -2390,6 +2418,22 @@ Disable safe saves and try again? Entries expiring within %1 day(s) + + Searches and Tags + + + + Enter a unique name or overwrite an existing search from the list: + + + + Save + Spremi + + + Save Search + + EditEntryWidget @@ -2526,10 +2570,6 @@ Would you like to correct it? Hide Sakrij - - Tomorrow - Sutra - %n week(s) %n tjedan%n tjedana%n tjedana @@ -2542,6 +2582,10 @@ Would you like to correct it? %n year(s) %n godina%n godine%n godina + + %n hour(s) + + EditEntryWidgetAdvanced @@ -3057,6 +3101,14 @@ Would you like to correct it? Do not use HTTP Auth toggle for this and sub groups + + Omit WWW subdomain from matching: + + + + Omit WWW subdomain from matching toggle for this and sub groups + + EditGroupWidgetKeeShare @@ -3638,6 +3690,10 @@ Error: %1 Auto-Type Auto-tipkanje + + Tags + + EntryModel @@ -3845,6 +3901,10 @@ Error: %1 Disabled Onemogući + + Double click to copy value + + EntryURLModel @@ -5329,6 +5389,30 @@ We recommend you use the AppImage available on our downloads page. You must restart the application to apply this setting. Would you like to restart now? Morate ponovno pokrenuti aplikaciju da biste primijenili tu postavku. Želite li ju ponovno pokrenuti sada? + + Tags + + + + No Tags + + + + %1 Entry(s) + + + + Copy Password and TOTP + + + + &XML File… + + + + XML File… + + ManageDatabase @@ -5699,29 +5783,6 @@ We recommend you use the AppImage available on our downloads page. - - PasswordEdit - - Passwords do not match - Lozinke se ne podudaraju - - - Passwords match so far - Lozinke se zasad podudaraju - - - Toggle Password (%1) - - - - Generate Password (%1) - Proizvedi Lozinku (%1) - - - Warning: Caps Lock enabled! - Upozorenje: Caps Lock uključen! - - PasswordEditWidget @@ -5900,10 +5961,6 @@ We recommend you use the AppImage available on our downloads page. Also choose from: - - Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" - Izostavi znakove: "0", "1", "l", "I", "O", "|", "". - Exclude look-alike characters Izostavi slične znakove @@ -6053,6 +6110,57 @@ Do you want to overwrite it? Password quality Izvrsna + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + Izostavi znakove: "0", "1", "l", "I", "O", "|", "". + + + + PasswordWidget + + Passwords do not match + Lozinke se ne podudaraju + + + Passwords match so far + Lozinke se zasad podudaraju + + + Toggle Password (%1) + + + + Generate Password (%1) + Proizvedi Lozinku (%1) + + + Warning: Caps Lock enabled! + Upozorenje: Caps Lock uključen! + + + Quality: %1 + + + + Poor + Password quality + bijedna + + + Weak + Password quality + Slaba + + + Good + Password quality + Dobra + + + Excellent + Password quality + Izvrsna + PickcharsDialog @@ -7185,10 +7293,6 @@ Please consider generating a new key file. Invalid YubiKey serial %1 - - Please present or touch your YubiKey to continue… - - Enter password to encrypt database (optional): @@ -7664,6 +7768,67 @@ Kernel: %3 %4 Failed to sign challenge using Windows Hello. + + Please present or touch your YubiKey to continue. + + + + Show all the attributes of the entry. + + + + Edit a database. + + + + Could not change the database key. + + + + Database was not modified. + + + + Successfully edited the database. + + + + Loading the new key file failed: %1 + + + + Unset the password for the database. + + + + Unset the key file for the database. + + + + Cannot use %1 and %2 at the same time. + + + + Cannot remove all the keys from a database. + + + + Cannot remove password: The database does not have a password. + + + + Cannot remove file key: The database does not have a file key. + + + + Found unexpected Key type %1 + + + + Set the key file for the database. +This options is deprecated, use --set-key-file instead. + + QtIOCompressor @@ -8211,6 +8376,10 @@ Kernel: %3 %4 Limit search to selected group + + Save Search + + SettingsClientModel @@ -8423,10 +8592,6 @@ Kernel: %3 %4 TagModel - - All - - Expired @@ -8435,6 +8600,33 @@ Kernel: %3 %4 Weak Passwords + + All Entries + + + + Clear Search + + + + + TagView + + Remove Search + + + + Remove Tag + + + + Confirm Remove Tag + + + + Remove tag "%1" from all entries in this database? + + TotpDialog diff --git a/share/translations/keepassxc_hu.ts b/share/translations/keepassxc_hu.ts index c61e1bf6c..52fd126f7 100644 --- a/share/translations/keepassxc_hu.ts +++ b/share/translations/keepassxc_hu.ts @@ -50,11 +50,11 @@ AccessControlDialog KeePassXC - Access Request - KeePassXC – Hozzáférési kérés + KeePassXC-hozzáférési kérés Non-existing/inaccessible executable path. Please double-check the client is legit. - Nem létező/elérhetetlen futtatható elérési útvonal. Ellenőrizze, hogy a kliens rendben van-e. + Nem létező/elérhetetlen futtatható elérési útvonal. Kérjük, ellenőrizze, hogy a kliens legális-e. <html><head/><body><p><span style=" font-weight:600;">%1 </span>is requesting access to the following entries:</p></body></html> @@ -80,10 +80,6 @@ Details Részletek - - Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. - A döntése megjegyzésre kerül arra az időtartamra amíg az igénylő kliens ÉS a KeePassXC is folytatja futását. - Remember Megjegyzés @@ -92,9 +88,13 @@ Allow Selected Kijelöltek engedélyezése + + Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. + A döntése megjegyzésre kerül arra az időtartamra amíg az igénylő kliens ÉS a KeePassXC is folytatja futását. + Deny All && Future - Összes && jövőbeliek elutasítása + Összes && jövőbeliek elutasítása Allow All && &Future @@ -122,10 +122,6 @@ Use OpenSSH OpenSSH használata - - Use both agents - Mindkét ügynök használata - SSH_AUTH_SOCK override SSH_AUTH_SOCK felülírása @@ -148,12 +144,16 @@ No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. - Nincs elérhető socket az SSH-ügynök számára. Biztosítsa az SSH_AUTH_SOCK környezeti változó beállítását, vagy állítson be egy felülírást. + Nincs elérhető foglalat az SSH-ügynök számára. Vagy győződjön meg arról, hogy létezik SSH_AUTH_SOCK környezeti változó, vagy állítson be egy felülírást. SSH Agent connection is working! Az SSH-ügynök kapcsolat működik! + + Use both agents + Mindkét ügynök használata + ApplicationSettingsWidget @@ -169,10 +169,6 @@ Security Biztonság - - This setting cannot be enabled when minimize on unlock is enabled. - Ez a beállítás nem kapcsolható be, ha a minimalizálás feloldáskor be van kapcsolva. - Access error for config file %1 Hozzáférési hiba a beállítási fájlhoz: %1 @@ -215,51 +211,23 @@ You must restart the application to set the new language. Would you like to restart now? - Az új nyelv beállításának érvényesítéséhez újra kell indítani az alkalmazást. Indítsuk újra most? + Az új nyelv beállításának az érvényre kerüléséhez újra kell indítani az alkalmazást. Legyen azonnal újraindítva? + + + Reset Settings? + Beállítások visszaállítása? + + + Are you sure you want to reset all general and security settings to default? + Valóban visszaállítja az összes általános és biztonsági beállítást az alapértelmezésre? Select backup storage directory Válassza ki a biztonsági mentés könyvtárát. - Confirm Reset - Visszaállítás megerősítése - - - Are you sure you want to reset all settings to default? - Valóban visszaállítja az összes beállítást az alapértelmezésre? - - - Import KeePassXC Settings - KeePassXC-beállítások importálása - - - Failed to import settings from %1, not a valid settings file. - A beállítások importálása sikertelen, mivel a beállításfájl nem érvényes: %1. - - - Export KeePassXC Settings - KeePassXC-beállítások exportálása - - - Small - Kicsi - - - Normal - Normál - - - Medium - Közepes - - - Large - Nagy - - - Custom - Egyéni + This setting cannot be enabled when minimize on unlock is enabled. + Ez a beállítás nem kapcsolható be, ha a minimalizálás feloldáskor be van kapcsolva. @@ -278,7 +246,7 @@ Automatically launch KeePassXC at system startup - A KeePassXC automatikus indítása a rendszer indulásakor + KeePassXC automatikus indítása a rendszer indulásakor Minimize window at application startup @@ -292,10 +260,6 @@ Remember previously used databases Az előzőleg használt adatbázisok megjegyzése - - recent files - nemrég használt fájl - Load previously open databases on startup Az előzőleg feloldott adatbázisok betöltése indításkor @@ -312,6 +276,25 @@ Include beta releases when checking for updates A frissítések keresése a béta kiadásokra is terjedjen ki + + On database unlock, show entries that + Az adatbázis feloldásakor azon bejegyzések megjelenítése, amelyek + + + have expired + On database unlock, show entries that... + lejárt + + + days + On database unlock, show entries that will expire within %1 days + napon belül + + + will expire within + On database unlock, show entries that... + lejárnak + File Management Fájlkezelés @@ -336,10 +319,22 @@ Backup database file before saving Készüljön biztonsági mentés az adatbázisról mentés előtt + + Backup destination + Biztonsági mentés célja + + + Specifies the database backup file location. Occurrences of "{DB_FILENAME}" are replaced with the filename of the saved database without extension. {TIME:<format>} is replaced with the backup time, see https://doc.qt.io/qt-5/qdatetime.html#toString. <format> defaults to format string "dd_MM_yyyy_hh-mm-ss". + Megadja az adatbázis biztonsági mentési fájljának helyét. A „{DB_FILENAME}” le lesz cserélve a mentett adatbázis nevére, kiterjesztés nélkül. A {TIME:<formátum>} le lesz cserélve a biztonsági mentés idejére, lásd a következő oldalt: https://doc.qt.io/qt-5/qdatetime.html#toString. A <formátum> alapértelmezett értéke „dd_MM_yyyy_hh-mm-ss”. + {DB_FILENAME}.old.kdbx {DB_FILENAME}.old.kdbx + + Choose... + Válasszon… + Use alternative saving method (may solve problems with Dropbox, Google Drive, GVFS, etc.) Alternatív mentési módszer alkalmazása (megoldhatja a Dropbox, Google Drive, GVFS, stb. mentési problémákat) @@ -362,7 +357,7 @@ Minimize when opening a URL - Kis méret egy webcím megnyitásakor + Kicsinyítés URL megnyitásakor Hide window when copying to clipboard @@ -378,7 +373,7 @@ Favicon download timeout: - Weblapikonok letöltési időtúllépése: + Weblapikon letöltési időtúllépés: Website icon download timeout in seconds @@ -417,10 +412,6 @@ Toolbar button style: Eszköztár gombstílusa: - - Show passwords in color - Jelszavak színes megjelenítése - Use monospaced font for notes Jegyzetek rögzített szélességű betűkészlettel @@ -431,7 +422,7 @@ Show a system tray icon - Rendszertálcaikon megjelenítése + Rendszertálca-ikon megjelenítése Tray icon type @@ -459,7 +450,7 @@ Use entry URL to match windows for global Auto-Type - Bejegyzések webcímének használata az ablakok illesztésénél a globális automatikus beírás számára + 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 @@ -488,7 +479,7 @@ ms Milliseconds - ms + ms Auto-Type typing delay: @@ -507,69 +498,12 @@ Utolsó beírt bejegyzés megjegyzése ehhez: - On database unlock, show entries that will expire within - Az ennyi időn belül lejáró bejegyzések megjelenítése az adatbázis feloldásakor: + recent files + nemrég használt fájl - On database unlock, show entries that will expire within - Az ennyi időn belül lejáró bejegyzések megjelenítése az adatbázis feloldásakor: - - - days - number of days warning for password expiration - napon belül - - - Destination format: - Célformátum: - - - <html><head/><body><p><span style=" font-weight:600;">{DB_FILENAME}</span> is replaced with the filename of the saved database without extension</p><p><span style=" font-weight:600;">{TIME:&lt;format&gt;}</span> is replaced with the specified time format (default: dd_MM_yyyy_hh-mm-ss)</p><p>See the User Guide for more details</p></body></html> - <html><head/><body><p>A <span style=" font-weight:600;">{DB_FILENAME}</span> le lesz cserélve a mentett adatbázis kiterjesztés nélküli nevére</p><p>A <span style=" font-weight:600;">{TIME:&lt;format&gt;}</span> le lesz cserélve a megadott időformátumra (alapértelmezés: dd_MM_yyyy_hh-mm-ss)</p><p>További részletekért lásd a felhasználói útmutatót</p></body></html> - - - Choose folder... - Válasszon mappát… - - - Show confirmation before moving entries to recycle bin - Megerősítés megjelenítése a bejegyzések kukába dobása előtt - - - Copy data on double clicking field in entry view - Adatok másolása a mezőre való dupla kattintásra bejegyzésnézetben - - - Show toolbar - Eszköztár megjelenítése - - - Show the menu bar by pressing the Alt key - A menü megjelenítése az Alt gomb lenyomásakor - - - Show menubar - Menü megjelenítése - - - Import settings… - Beállítások importálása… - - - Export settings… - Beállítások exportálása… - - - Open browser on double clicking URL field in entry view - Böngésző megnyitása az URL mezőre való dupla kattintásra bejegyzésnézetben - - - Font size: - Betűméret: - - - Font size selection - Betűméret kijelölése + Show passwords in color + Jelszavak színes megjelenítése @@ -598,7 +532,7 @@ min Minutes - min + perc Clipboard clear seconds @@ -624,6 +558,10 @@ Lock databases after minimizing the window Adatbázis zárolása az ablak lekicsinyítésekor + + Require password repeat when it is visible + Jelszóismétlés szükséges látható jelszó esetén + Hide passwords when editing them Jelszavak elrejtése szerkesztés alatt @@ -636,6 +574,18 @@ 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 + + + Move entries to recycle bin without confirmation + Bejegyzések kukába dobása megerősítés nélkül. + + + Enable double click to copy the username/password entry columns + Dupla kattintás engedélyezése a felhasználónév/jelszó bejegyzésoszlopok másolására + Privacy Adatvédelem @@ -648,18 +598,6 @@ Hide TOTP in the entry preview panel TOTP elrejtése a bejegyzés előnézeti panelen - - Lock databases when switching user - Adatbázis zárolása felhasználóváltáskor - - - Lock Options - Zárolási beállítások - - - Hide notes in the entry preview panel - Jegyzetek elrejtése a bejegyzés-előnézeti panelen - AutoType @@ -704,13 +642,27 @@ Nagyon hosszú késleltetés észlelve, a maximum %1: %2 - Entry does not have attribute for PICKCHARS: %1 - A bejegyzés nem rendelkezik PICKCHARS attribútummal: %1 + Invalid conversion type: %1 + Érvénytelen konverziótípus: %1 + + + Invalid conversion syntax: %1 + Érvénytelen konverziós szintaxis: %1 + + + Invalid regular expression syntax %1 +%2 + Érvénytelen reguláriskifejezés-szintaxis %1 +%2 Invalid placeholder: %1 Érvénytelen helykitöltő: %1 + + Entry does not have attribute for PICKCHARS: %1 + A bejegyzés nem rendelkezik PICKCHARS attribútummal: %1 + AutoTypeAssociationsModel @@ -752,6 +704,10 @@ AutoTypePlatformX11 + + Trying to send invalid keysym. + Kísérlet érvénytelen kulcsszó elküldésére. + Sequence aborted: Caps Lock is on Sorrend megszakítva: a Caps Lock be van kapcsolva @@ -764,10 +720,6 @@ Unable to get valid keycode for key: Sikertelen érvényes kulcskód kérés a kulcshoz: - - Trying to send invalid keyboard symbol. - Kísérlet érvénytelen billentyűzetszimbólum elküldésére. - AutoTypeSelectDialog @@ -872,13 +824,13 @@ Ctrl+4 – Virtuális billentyűzet használata (csak Windowson)</p>Disable for this site Letiltás ezen az oldalon - - Undo - Visszavonás - BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + KeePassXC-böngésző bejegyzés mentése + Ok Ok @@ -893,80 +845,23 @@ 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. - - KeePassXC - Select Database - KeePassXC – Adatbázis kiválasztása - - - - BrowserPasskeysConfirmationDialog - - Cancel - Mégse - - - Update - Frissítés - - - Authenticate - Hitelesítés - - - Register new - Új regisztráció - - - Register - Regisztráció - - - Timeout in <b>%n</b> seconds... - Időkorlát <b>%n</b> másodpercen belül...Időkorlát <b>%n</b> másodpercen belül... - - - Relying Party: %1 - Közvetítő fél: %1 - - - Username: %1 - Felhasználónév: %1 - - - KeePassXC - Passkey credentials - KeePassXC – Jelkulcs hitelesítési adatai - - - Add to existing entry - Hozzáadás egy meglévő bejegyzéshez - - - Existing passkey found. -Do you want to register a new passkey for: - Létező jelkulcs található. -Regisztrál ehhez egy új jelkulcsot: - - - Select the existing passkey and press Update to replace it. - Válassza ki a jelenlegi jelkulcsot, és nyomja meg a Frissítést a cseréjéhez. - - - Authenticate passkey credentials for: - A jelkulcs hitelesítési adatainak használata ehhez: - - - Do you want to register a passkey for: - Ehhez szeretne jelkulcsot regisztrálni: - BrowserService + + KeePassXC: Create a new group + KeePassXC: Új csoport létrehozása + A request for creating a new group "%1" has been received. Do you want to create this group? Az új „%1” csoport létrehozási kérése fogadva. -Biztos, hogy létrehozza ezt a csoportot? +Valóban létrehozza ezt a csoportot? + + + KeePassXC: New key association request + KeePassXC: Új kulcstársítási kérés You have received an association request for the following database: @@ -984,16 +879,28 @@ A kapcsolatnak egy olyan egyedi nevet, ill. azonosítót szükség adni, mint am Save and allow access Engedélyezési hozzáférés mentése + + KeePassXC: Overwrite existing key? + KeePassXC: Felülírja a létező kulcsot? + 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írható? + + KeePassXC: Update Entry + KeePassXC: Bejegyzés frissítése + Do you want to update the information in %1 - %2? Frissíti az információt ebben: %1 – %2? + + KeePassXC: Delete entry + KeePassXC: Bejegyzés törlése + A request for deleting entry "%1" has been received. Do you want to delete the entry? @@ -1002,58 +909,50 @@ Do you want to delete the entry? Valóban törli a bejegyzést? - %1 (Passkey) - %1 (jelkulcs) + Converting attributes to custom data… + Attribútumok átalakítása egyéni adatokká… - KeePassXC - Create a new group - KeePassXC – Új csoport létrehozása + Abort + Megszakítás - Disable - Letiltás + KeePassXC: Converted KeePassHTTP attributes + KeePassXC: Átalakított KeePassHTTP attribútumok - KeePassXC - Overwrite existing key? - KeePassXC – Felülírja a meglévő kulcsot? + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + Attribútumok sikeresen átalakítva %1 bejegyzésből. +%2 kulcs áthelyezve az egyéni adatokhoz. + + + Successfully moved %n keys to custom data. + %n kulcs sikeresen áthelyezve az egyéni adatokhoz.%n kulcs sikeresen áthelyezve az egyéni adatokhoz. - KeePassXC - Update Entry - KeePassXC – Bejegyzés frissítése + KeePassXC: No entry with KeePassHTTP attributes found! + KeePassXC: Nem található bejegyzés KeePassHTTP attribútumokkal! - KeePassXC - Delete entry - KeePassXC – Bejegyzés törlése + 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. - KeePassXC - New key association request - KeePassXC – Új kulcshozzárendelési kérés + Don't show this warning again + Ne jelenjen meg többé a figyelmeztetés - Passkey - Jelkulcso + KeePassXC: Legacy browser integration settings detected + KeePassXC: Örökölt böngészőintegrációs beállítások észlelve - KeePassXC - Passkey credentials - KeePassXC – Jelkulcs hitelesítési adatai - - - Register a new passkey to this entry: - Új jelkulcs regisztrálása ehhez a bejegyzéshez: - - - KeePassXC - Update passkey - KeePassXC – Jelkulcs frissítése - - - Entry already has a passkey. -Do you want to overwrite the passkey in %1 - %2? - A bejegyzéshez már tartozik jelkulcs. -Felülírja az itt található jelkulcsot: %1 – %2? - - - Register - Regisztráció + 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? + A KeePassXC-Browser beállításait át kell helyezni az adatbázis-beállításokba. +Ez szükséges a jelenlegi böngészőkapcsolatok fenntartásához. +Valóban migrálja most a meglévő beállításokat? @@ -1074,6 +973,10 @@ Felülírja az itt található jelkulcsot: %1 – %2? General Általános + + Browsers installed as snaps are currently not supported. + A snappal telepített böngészők jelenleg nem támogatottak. + Enable integration for these browsers: Böngészőintegráció engedélyezése a következőkhöz: @@ -1121,11 +1024,11 @@ Felülírja az itt található jelkulcsot: %1 – %2? Match URL scheme (e.g., https://example.com) - Webcímsémákra illeszkedés (például https://example.com) + URL sémákra illeszkedés (pl. https://példa.com) Only returns the best matches for a specific URL instead of all entries for the whole domain. - Egy konkrét webcímhez tartozó legjobb találatokat adja vissza, a teljes domainhoz tartozó összes bejegyzés helyett. + Egy konkrét URL-hez tartozó legjobb találatokat adja vissza, a teljes domainhoz tartozó összes bejegyzés helyett. Return only best-matching credentials @@ -1165,7 +1068,7 @@ Felülírja az itt található jelkulcsot: %1 – %2? Do not ask permission for HTTP Basic Auth An extra HTTP Basic Auth setting - Ne kérjen engedélyt a HTTP Basic hitelesítés számára + Ne kérjen engedélyt a HTTP Basic Auth számára Automatically creating or updating string fields is not supported. @@ -1245,6 +1148,27 @@ Felülírja az itt található jelkulcsot: %1 – %2? Custom extension ID Egyéni kiterjesztésazonosító + + Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 + A Snap homokozó miatt egy parancsfájlt kell futtatni a böngészőintegráció engedélyezéséhez.<br />Ezt innen szerezheti be: %1 + + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 + A böngészőintegráció működéséhez a KeePassXC-böngészőre van szükség. <br />Letölthető ezen böngészőkre: %1, %2, %3, 4% + + + Please see special instructions for browser extension use below + Olvassa el a böngészőkiegészítő használatáról szóló különleges utasításokat alább + + + <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. + <b>Hiba:</b> Az egyéni proxyhely nem található! +<br/>A böngészőintegráció NEM FOG MŰKÖDNI a proxy-alkalmazás nélkül. + + + <b>Warning:</b> The following options can be dangerous! + <b>Figyelmeztetés:</b> A következő beállítások veszélyesek lehetnek! + Executable Files Végrehajtható fájlok @@ -1261,46 +1185,6 @@ Felülírja az itt található jelkulcsot: %1 – %2? Select native messaging host folder location Jelölje ki a natív üzenetküldési kiszolgálót tartalmazó mappát - - Allow keepassxc-proxy to list all entries with their title, URL and UUID in connected databases. - Engedélyezés a keepassxc-proxy számára, hogy felsorolja az összes bejegyzést a címével, webcímével és UUID-jával a kapcsolódó adatbázisokban. - - - Allow limited access to all entries in connected databases (ignores site access restrictions) - Korlátozott hozzáférés engedélyezése az összes bejegyzéshez a kapcsolódó adatbázisokban (figyelmen kívül hagyja az oldal hozzáférési korlátozásait) - - - <b>Warning:</b> Only adjust these settings if necessary. - <b>Figyelem:</b> Ezen beállításokat csak szükség esetén módosítsa. - - - The custom proxy location does not exist. - Az egyéni proxy helye nem létezik. - - - <b>Error:</b> The custom proxy location does not exist. Correct this in the advanced settings tab. - <b>Hiba:</b> Az egyéni proxy helye nem létezik. Javítsa ki ezt a Speciális beállítások lapon. - - - <b>Error:</b> The installed proxy executable is missing from the expected location: %1<br/>Please set a custom proxy location in the advanced settings or reinstall the application. - <b>Hiba:</b> A telepített proxy futtatható fájl hiányzik a várt helyről: %1<br/> Kérjük, állítson be egy egyéni proxy-helyet a Speciális beállításokban, vagy telepítse újra az alkalmazást. - - - Allows using insecure http://localhost with passkeys for testing purposes. - A nem biztonságos http://localhost engedélyezése a jelkulcsokkal tesztelési célokból. - - - Allow using localhost with passkeys - Localhost használatának engedélyezése a jelkulcsokkal - - - KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. - A böngészőintegráció működéséhez a KeePassXC-böngészőre van szükség. <br />Letölthető ezen böngészőkre: %1, %2 és %3. - - - Browsers installed using Snap or Flatpak are not supported with exception to Firefox installed using Snap. - A Snap vagy Flatpak segítségével telepített böngészők nem támogatottak, kivéve a Snap által telepített Firefoxot. - CloneDialog @@ -1323,6 +1207,14 @@ Felülírja az itt található jelkulcsot: %1 – %2? CsvImportWidget + + Import CSV fields + CSV-mezők importálása + + + filename + fájlnév + size, rows, columns méret, sorok, oszlopok @@ -1349,7 +1241,7 @@ Felülírja az itt található jelkulcsot: %1 – %2? URL - Webcím + URL Notes @@ -1431,43 +1323,50 @@ Felülírja az itt található jelkulcsot: %1 – %2? Column %1 %1. oszlop + + Imported from CSV file + CSV-fájlból importálva + + + Original data: + Eredeti adatok: + + + Error(s) detected in CSV file! + Hibák találhatók a CSV-fájlban! + [%n more message(s) skipped] [%n további üzenet mellőzve][%n további üzenet mellőzve] - Failed to parse CSV file: %1 - A CSV-fájl feldolgozása sikertelen: %1 + Error + Hiba - Imported from CSV file: %1 - CSV-fájlból importálva: %1 - - - No Title Selected - Nincs cím kiválasztva - - - No title column was selected, entries will be hard to tell apart. -Are you sure you want to import? - Nincs címoszlop kiválasztva, a bejegyzéseket nehéz lesz megkülönböztetni. -Valóban importálja? - - - Tags - Címkék + CSV import: writer has errors: +%1 + CSV importálás: a mentés hibába ütközött: +%1 CsvParserModel + + %1, %2, %3 + file info: bytes, rows, columns + %1, %2, %3 + + + %n byte(s) + %n bájt%n bájt + %n row(s) - CSV row count %n sor%n sor %n column(s) - CSV column count %n oszlop%n oszlop @@ -1520,14 +1419,6 @@ Az adatbázis biztonsági másolata: %2 Recycle Bin Kuka - - Database file read error. - Adatbázisfájl olvasási hiba. - - - No file path was provided. - Nem volt fájlútvonal megadva. - DatabaseOpenDialog @@ -1550,10 +1441,30 @@ Az adatbázis biztonsági másolata: %2 Password field Jelszó mező + + Enter Additional Credentials (if any): + További hitelesítési adatok megadása (ha vannak): + + + Key File: + Kulcsfájl: + + + Key file help + Kulcsfájlok súgója + Hardware key slot selection Hardverkulcsfoglalat kijelölése + + Hardware Key: + Hardverkulcs: + + + Hardware key help + Hardverkulcs súgó + Key file to unlock the database Adatbázis feloldására való kulcsfájl @@ -1566,6 +1477,14 @@ Az adatbázis biztonsági másolata: %2 Browse… Tallózás… + + Refresh hardware tokens + Hardveres jelsorok frissítése + + + Refresh + Frissítés + Unlock Database Adatbázis feloldása @@ -1628,6 +1547,10 @@ Ezen hiba megjelenése megelőzhető az Adatbázis-beállítások → Biztonság Retry with empty password Üres jelszó megpróbálása + + Failed to authenticate with Touch ID + Nem sikerült a hitelesítés a Touch ID-vel + Failed to open key file: %1 A kulcsfájl megnyitása sikertelen: %1 @@ -1660,69 +1583,40 @@ Ezen hiba megjelenése megelőzhető az Adatbázis-beállítások → Biztonság Cannot use database file as key file Adatbázisfájl nem használható kulcsfájlként + + You cannot use your database file as a key file. +If you do not have a key file, please leave the field empty. + Nem használhatja az adatbázisfájlt kulcsfájlként. Ha nincs kulcsfájlja, akkor hagyja üresen a mezőt. + + + Detecting hardware keys… + Hardverkulcsok felismerése… + + + No hardware keys detected + Nincsenek felismert hardverkulcsok. + + + Select hardware key… + Hardverkulcs kijelölése… + + + <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information…</p> + <p>A mesterkulcs mellett egy titkos fájlt is használhat, hogy javítsa az adatbázisa biztonságát. Ez a fájl az adatbázis biztonsági beállításaiban állítható elő.</p><p>Ez <strong>nem</strong> a *.kdbx adatbázisfájlja!<br>Ha nincs kulcsfájlja, akkor hagyja üresen ezt a mezőt.</p><p>Kattintson a további információkért…</p> + + + <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +<p>Click for more information…</p> + <p>A <strong>YubiKey</strong> vagy az <strong>OnlyKey</strong> biztonsági hardverkulcsok alkalmazhatóak a HMAC-SHA1-re konfigurált foglalattal.</p> +<p>További információk…</p> + authenticate to access the database hitelesítsen az adatbázis eléréséhez - Failed to authenticate with Quick Unlock: %1 - Nem sikerült a hitelesítés a Gyors feloldással: %1 - - - Select Key File: - Kulcsfájl kiválasztása: - - - <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!</p> - <p>A jelszó mellett egy titkos fájlt is használhat, hogy növelje az adatbázisa biztonságát. Ez a fájl az adatbázis biztonsági beállításaiban állítható elő.</p><p>Ez <strong>nem</strong> a *.kdbx adatbázisfájlja! - - - Use hardware key [Serial: %1] - Hardverkulcs használata [Sorozatszám: %1] - - - Use hardware key - Hardverkulcs használata - - - Your database file is NOT a key file! -If you don't have a key file or don't know what that is, you don't have to select one. - Az adatbázisa NEM kulcsfájl. -Ha nincs kulcsfájlja, vagy nem tudja mi az, akkor nem kell kiválasztania. - - - KeePassXC database file selected - KeePassXC adatbázisfájl kiválasztva - - - The file you selected looks like a database file. -A database file is NOT a key file! - -Are you sure you want to continue with this file?. - A kiválasztott fájl adatbázisfájlnak tűnik. -Az adatbázis NEM egy kulcsfájl. - -Valóban folytatja ezzel a fájllal? - - - No hardware keys found. - Nem találhatók hardverkulcsok - - - Refresh Hardware Keys - Hardverkulcsok frissítése - - - Click to add a key file. - Kattintson egy kulcsfájl hozzáadásához. - - - <a href="#" style="text-decoration: underline">I have a key file</a> - <a href="#" style="text-decoration: underline">Van kulcsfájlom</a> - - - Hardware keys found, but no slots are configured. - A hardverkulcs megtalálva, de a foglalatok nincsenek beállítva. + Failed to authenticate with Windows Hello: %1 + Nem sikerült a hitelesítés a Windows Hello-val: %1 @@ -1734,6 +1628,10 @@ Valóban folytatja ezzel a fájllal? DatabaseSettingsDialog + + Advanced Settings + Speciális beállítások + General Általános @@ -1758,22 +1656,6 @@ Valóban folytatja ezzel a fájllal? Maintenance Karbantartás - - KeeShare - KeeShare - - - Secret Service Integration - Titkosító szolgáltatás integrációja - - - Remote Sync - Távoli szinkronizálás - - - Database Settings: %1 - Adatbázis-beállítások: %1 - DatabaseSettingsWidgetBrowser @@ -1781,6 +1663,18 @@ Valóban folytatja ezzel a fájllal? KeePassXC-Browser settings KeePassXC-böngésző beállítások + + Convert KeePassHTTP data + KeePassHTTP adatok konvertálása + + + Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data + Az örökölt KeePassHTTP attribútumok konvertálása KeePassXC-böngésző kompatibilis egyéni adatokká + + + Refresh database root group ID + Adatbázis gyökércsoport-azonosítójának frissítése + Disconnect all browsers Minden böngésző leválasztása @@ -1789,10 +1683,6 @@ Valóban folytatja ezzel a fájllal? Forget all site-specific settings on entries A bejegyzések összes oldalfüggő beállításának elfelejtése - - Refresh database root group ID - Adatbázis gyökércsoport-azonosítójának frissítése - Stored keys Tárolt kulcsok @@ -1841,10 +1731,18 @@ This may prevent connection to the browser plugin. Valóban leválasztja az összes böngészőt? Ez megakadályozhatja a böngésző bővítményhez történő kapcsolódást. + + KeePassXC: No keys found + KeePassXC: Nincs találat a kulcsok között + No shared encryption keys found in KeePassXC settings. Nem található megosztott titkosítási kulcs a KeePassXC beállításaiban. + + KeePassXC: Removed keys from database + KeePassXC: Kulcsok eltávolítva az adatbázisból + Successfully removed %n encryption key(s) from KeePassXC settings. Sikeresen eltávolításra került %n titkosítási kulcs a KeePassXC beállításokból.Sikeresen eltávolításra került %n titkosítási kulcs a KeePassXC beállításokból. @@ -1863,14 +1761,32 @@ A bejegyzések elérési engedélyei vissza lesznek vonva. 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 convert all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + Valóban konvertálja 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. + Refresh database ID Adatbázis-azonosító frissítése @@ -1881,26 +1797,6 @@ This is only necessary if your database is a copy of another and the browser ext Valóban frissíthető az adatbázis-azonosító? Erre csak akkor lehet szükség, ha az adatbázis egy másik másolata és a böngésző kiterjesztés nem tud kapcsolódni. - - Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data - Az örökölt KeePassHTTP attribútumok konvertálása KeePassXC-böngésző kompatibilis egyéni adatokká - - - No keys found - Nem találhatók kulcsok - - - Removed keys from database - A kulcsok eltávolítva az adatbázisból - - - Removed permissions - Engedélyek eltávolítva - - - No entry with permissions found! - Nincs bejegyzés ilyen jogosultsággal! - DatabaseSettingsWidgetDatabaseKey @@ -1940,18 +1836,6 @@ Valóban jelszó nélkül folytatja? Failed to change database credentials Az adatbázis hitelesítési adatainak módosítása sikertelen - - Weak password - Gyenge jelszó - - - This is a weak password! For better protection of your secrets, you should choose a stronger password. - Ez egy gyenge jelszó! A titkai jobb védelme érdekében adjon meg erősebb jelszót. - - - The provided password does not meet the minimum quality requirement. - A megadott jelszó nem felel meg a minimális minőségi elvárásoknak. - DatabaseSettingsWidgetEncryption @@ -1959,6 +1843,14 @@ Valóban jelszó nélkül folytatja? Decryption Time: Visszafejtés ideje: + + Change existing decryption time + Meglévő visszafejtése idő módosítása + + + Change + Módosítása + Decryption time in seconds Visszafejtési idő másodpercben @@ -2039,6 +1931,11 @@ Valóban jelszó nélkül folytatja? KDBX 3 KDBX 3 + + unchanged + Database decryption time is unchanged + változatlan + Number of rounds too high Key transformation rounds @@ -2091,18 +1988,6 @@ Ezt a számot megtartva az adatbázis nem lesz ellenálló a nyers erővel való Threads for parallel execution (KDF settings) szálszál - - Encryption Settings: - Titkosítási beállítások: - - - Basic - Alapvető - - - Advanced - Speciális - DatabaseSettingsWidgetFdoSecrets @@ -2233,70 +2118,6 @@ az adatbázisból történő törlésük helyett. A kukából törölt bejegyzések eltávolításra kerülnek az adatbázisból. - - Autosave delay since last change - Automatikus mentési késleltetés az utolsó módosítás óta - - - Autosave delay - Automatikus mentési késleltetés - - - Autosave delay since last change in minutes - Automatikus mentési késleltetés percekben az utolsó módosítás óta - - - min - perc - - - Autosave delay since last change checkbox - Automatikus mentési késleltetés az utolsó módosítás óta jelölőnégyzet - - - Public Database Metadata - Nyilvános adatbázis-metaadatok - - - Warning: the following settings are not encrypted. - Figyelmeztetés: a következő beállítások nincsenek titkosítva. - - - Display name: - Megjelenítendő név: - - - Publically visible display name used on the unlock dialog - Nyilvánosan látható megjelenítendő név, amely a feloldási párbeszédablakon használatos - - - Database public display name - Adatbázis nyilvános megjelenítendő neve - - - Display color: - Megjelenítendő szín: - - - Publically visible color used on the unlock dialog - Nyilvánosan látható szín, amely a feloldási párbeszédablakon használatos - - - Database public display color chooser - Adatbázis nyilvános megjelenítendő színének választója - - - Clear - Törlés - - - Display icon: - Megjelenítendő ikon: - - - Select Database Icon - Válasszon adatbázisikont - DatabaseSettingsWidgetKeeShare @@ -2392,141 +2213,6 @@ kerülnek az adatbázisból. Adatbázisleírás mező - - DatabaseSettingsWidgetRemote - - Sync Commands - Szinkronizálási parancs - - - Remove - Eltávolítás - - - Command Settings - Parancsbeállítások - - - Name - Név - - - Save - Mentés - - - Download - Letöltés - - - Command: - Parancs: - - - Download command field - Letöltő parancs mező - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - pl.: „sftp felhasznalo@kiszolgalo” vagy „scp felhasznalo@kiszolgalo:TavoliAdatbazis.kdbx {TEMP_DATABASE}” - - - Input: - Bemenet: - - - Download input field - Letöltő bemeneti mező - - - Upload - Feltöltés - - - Upload command field - Feltöltő parancs mező - - - e.g.: "sftp user@hostname" or "scp {TEMP_DATABASE} user@hostname:DatabaseOnRemote.kdbx" - pl.: „sftp felhasznalo@kiszolgalo” vagy „scp {TEMP_DATABASE}felhasznalo@kiszolgalo:TavoliAdatbazis.kdbx” - - - Upload input field - Feltöltő bemeneti mező - - - Name cannot be empty. - A név nem lehet üres. - - - Test - Tesztelés - - - Download command cannot be empty. - A letöltő parancs nem lehet üres. - - - Download failed with error: %1 - A letöltés hibába ütközött: %1 - - - Download finished, but file %1 could not be found. - A letöltés sikeres, de a fájl nem található: %1. - - - Download successful. - Letöltés sikeres. - - - Save Remote Settings - Távoli beállítások mentése - - - You have unsaved changes. Do you want to save them? - El nem mentett módosítások vannak. Szeretné elmenteni őket? - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - pl.: -get TavoliAdatbazis.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} helyőrzőként szolgál az adatbázis ideiglenes helyen történő tárolására. -A parancsnak ki kell lépnie, ezért az „sftp” esetében utolsó parancsként az „exit” parancsot el kell küldeni. - - - - e.g.: -put {TEMP_DATABASE} DatabaseOnRemote.kdbx -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - pl.: -put {TEMP_DATABASE} TavoliAdatbazis.kdbx -exit ---- -{TEMP_DATABASE} helyőrzőként szolgál az adatbázis ideiglenes helyen történő tárolására. -A parancsnak ki kell lépnie, ezért az „sftp” esetében utolsó parancsként az „exit” parancsot el kell küldeni. - - - - Timeout: - Időtúllépés: - - - seconds - másodperc - - DatabaseTabWidget @@ -2559,10 +2245,26 @@ Ez határozottan hiba, jelentse a fejlesztőknek. CSV file CSV-fájl + + Select CSV file + Válasszon CSV-fájlt + Merge database Adatbázis egyesítése + + KeePass 1 database + KeePass 1 adatbázis + + + Open KeePass 1 database + KeePass 1 adatbázis megnyitása + + + Open OPVault + OPVault megnyitása + Export database to CSV file Adatbázis exportálása CSV-fájlba @@ -2575,6 +2277,28 @@ Ez határozottan hiba, jelentse a fejlesztőknek. Writing the HTML file failed. A HTML-fájl mentése sikertelen. + + Export Confirmation + Exportálás megerősítése + + + You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? + Az adatbázis nem titkosított fájlba lesz exportálva. Így sebezhetőek lesznek a jelszavak és más érzékeny információk. Valóban folytatható a művelet? + + + New Database + Új adatbázis + + + %1 [New Database] + Database tab name modifier + %1 [Új adatbázis] + + + %1 [Locked] + Database tab name modifier + %1 [Zárolva] + Export database to XML file Adatbázis exportálása XML-fájlba @@ -2587,31 +2311,9 @@ Ez határozottan hiba, jelentse a fejlesztőknek. Writing the XML file failed Az XML-fájl írása sikertelen - - Export Confirmation - Exportálás megerősítése - - - You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? - Az adatbázis nem titkosított fájlba lesz exportálva. Így sebezhetőek lesznek a jelszavak és más érzékeny információk. Valóban folytatható a művelet? - - - %1 [Locked] - Database tab name modifier - %1 [Zárolva] - - - %1 [Temporary] - Database tab name modifier - %1 [Ideiglenes] - DatabaseWidget - - Searches and Tags - Keresések és címkék - Searching… Keresés… @@ -2660,10 +2362,6 @@ Ez határozottan hiba, jelentse a fejlesztőknek. Expired entries Lejárt bejegyzések - - Entries expiring within %1 day(s) - %1 napon belül lejáró bejegyzések%1 napon belül lejáró bejegyzések - No current database. Nincs aktuális adatbázis. @@ -2688,18 +2386,6 @@ Ez határozottan hiba, jelentse a fejlesztőknek. No Results Nincs találat - - Save - Mentés - - - Enter a unique name or overwrite an existing search from the list: - Adjon meg egy egyedi nevet, vagy írjon felül egy meglévő keresést a listából: - - - Save Search - Keresés mentése - Lock Database? Zárolja az adatbázist? @@ -2728,6 +2414,26 @@ Menti a változásokat? File has changed A fájl módosult + + The database file has changed. Do you want to load the changes? + Az adatbázisfájl módosult. Betölti a módosításokat? + + + Merge Request + Egyesítési kérelem + + + The database file has changed and you have unsaved changes. +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. +Error: %1 + Nem lehet megnyitni az új adatbázisfájlt egy újranyitási kísérlet közben. +Hiba: %1 + Disable safe saves? Letiltható a biztonságos mentés? @@ -2770,94 +2476,25 @@ Letiltható a biztonságos mentés és úgy megkísérelhető a mentés?Could not find database file: %1 Az adatbázis-fájl nem található: %1 - - New Database - Új adatbázis + + Entries expiring within %1 day(s) + %1 napon belül lejáró bejegyzések%1 napon belül lejáró bejegyzések - %1 [New Database] - Database tab name modifier - %1 [Új adatbázis] + Searches and Tags + Keresések és címkék - Remote Sync did not contain any download or upload commands. - A távoli szinkronizálás nem tartalmazott le- vagy feltöltési parancsokat. + Enter a unique name or overwrite an existing search from the list: + Adjon meg egy egyedi nevet, vagy írjon felül egy meglévő keresést a listából: - Remote sync '%1' completed successfully! - A távoli szinkronizálás sikeresen befejeződött: %1! + Save + Mentés - Remote sync '%1' failed: %2 - A távoli szinkronizálás (%1) sikertelen: %2 - - - Error while saving database %1: %2 - Hiba az adatbázis (%1) mentése közben: %2 - - - Downloading... - Letöltés… - - - Uploading... - Feltöltés… - - - Syncing... - Szinkronizálás… - - - Remove passkey from entry - Jelkulcs eltávolítása a bejegyzésből - - - Do you want to remove the passkey from this entry? - Valóban eltávolítja a jelkulcsot ebből a bejegyzésből? - - - The database file "%1" was modified externally - A(z) „%1” adatbázisfájl kívülről lett módosítva - - - Do you want to load the changes? - Betölti a módosításokat? - - - Reload database - Adatbázis újratöltése - - - Reloading database… - Adatbázis újratöltése… - - - Reload canceled - Újratöltés megszakítva - - - Reload successful - Újratöltés sikeres - - - Reload pending user action… - Függőben lévő felhasználói művelet újratöltése… - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes<br>Ignore the changes on disk until save<br>Discard unsaved changes - A(z) „%1” adatbázisfájl külsőleg módosítva volt.<br>Hogyan folytatja?<br><br>Összes módosítás egyesítése<br>A módosítások figyelmen kívül hagyása a lemezre mentésig<br>Mentetlen módosítások elvetése - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes then save<br>Overwrite the changes on disk<br>Discard unsaved changes - A(z) „%1” adatbázisfájl külsőleg módosítva volt.<br>Hogyan folytatja?<br><br>Összes módosítás egyesítése, majd mentés<br>A lemezen lévő módosítások felülírása<br>Mentetlen módosítások elvetése - - - Database file overwritten. - Adatbázisfájl felülírva. - - - Database file on disk cannot be unlocked with current credentials.<br>Enter new credentials and/or present hardware key to continue. - A lemezen lévő adatbázisfájl nem oldható fel a jelenlegi hitelesítő adatokkal.<br>A folytatáshoz adjon meg új hitelesítő adatokat, vagy mutasson fel hardverkulcsot. + Save Search + Keresés mentése @@ -2892,7 +2529,7 @@ Letiltható a biztonságos mentés és úgy megkísérelhető a mentés? Are you sure you want to remove this URL? - Valóban eltávolítja ezt a webcímet? + Valóban eltávolítja ezt az URL? Properties @@ -2910,9 +2547,13 @@ Letiltható a biztonságos mentés és úgy megkísérelhető a mentés?n/a nincs + + (encrypted) + (titkosított) + Select private key - Titkos kulcs kijelölése + Személyes kulcs kijelölése Entry history @@ -2996,10 +2637,6 @@ Szeretné kijavítani? Hide Elrejtés - - %n hour(s) - %n óra%n óra - %n week(s) %n hét%n hét @@ -3012,9 +2649,9 @@ Szeretné kijavítani? %n year(s) %n év%n év - - Failed to decrypt SSH key, ensure password is correct. - Az SSH-kulcs visszafejtése sikertelen, győződjön meg arról, hogy a jelszó helyes. + + %n hour(s) + %n óra%n óra @@ -3134,20 +2771,10 @@ Szeretné kijavítani? Add new window association Új ablaktársítás hozzáadása - - + - Add item - + - Remove selected window association Kijelölt ablaktársítás eltávolítása - - - - Remove item - - Window title: Ablakcím: @@ -3172,9 +2799,23 @@ Szeretné kijavítani? Custom Auto-Type sequence for this window Egyéni automatikus beírási sorrend ehhez az ablakhoz + + + + Add item + + + + + - + Remove item + + EditEntryWidgetBrowser + + These settings affect to the entry's behaviour with the browser extension. + Ezek a beállítások befolyásolják a bejegyzés viselkedését a böngésző kiterjesztésével. + General Általános @@ -3187,13 +2828,25 @@ Szeretné kijavítani? Skip Auto-Submit for this entry Automatikus küldés kihagyása ennél a bejegyzésnél + + Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. + Ezt a beállítást csak a böngésző HTTP Auth párbeszédablakának küldje. Bejelölve a normál bejelentkezési űrlapokon ez a bejegyzés nem fog kiválaszthatóként feltűnni. + Use this entry only with HTTP Basic Auth - Bejegyzés alkalmazása csak HTTP Basic hitelesítéssel + Bejegyzés alkalmazása csak HTTP Basic Auth-tal + + + Do not send this setting to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. + Ne küldje ezt a beállítást a böngésző HTTP Auth párbeszédablakának. Bejelölve a HTTP Auth párbeszédablakokban ez a bejegyzés nem fog kiválaszthatóként feltűnni. Do not use this entry with HTTP Basic Auth - Bejegyzés tiltása HTTP Basic hitelesítéssel + Bejegyzés tiltása HTTP Basic Auth-tal + + + Additional URL's + További URL-ek Add @@ -3207,22 +2860,6 @@ Szeretné kijavítani? Edit Szerkesztés - - These settings affect the entry's behaviour with the browser extension. - Ezek a beállítások hatással vannak a böngészőkiterjesztés viselkedésére. - - - Additional URLs - További webcímek - - - Only send this entry to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. - Ezt a bejegyzést csak a böngésző HTTP hitelesítési párbeszédablakának küldje el. Bejelölve a normál bejelentkezési űrlapokon ez a bejegyzés nem fog kiválaszthatóként feltűnni. - - - Do not send this entry to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. - Ne küldje ezt a bejegyzést a böngésző HTTP hitelesítési párbeszédablakának. Bejelölve a HTTP hitelesítési párbeszédablakokban ez a bejegyzés nem fog kiválaszthatóként feltűnni. - EditEntryWidgetHistory @@ -3295,11 +2932,11 @@ Szeretné kijavítani? Url field - Webcím mező + URL mező Download favicon for URL - Webcím weblapikonjának letöltése + URL weblapikonjának letöltése Title field @@ -3386,7 +3023,20 @@ Szeretné kijavítani? Private key - Titkos kulcs + Személyes kulcs + + + External file + Külső fájl + + + Browser for key file + Kulcsfájl böngészése + + + Browse… + Button for opening file dialog + Tallózás… Attachment @@ -3404,23 +3054,6 @@ Szeretné kijavítani? Remove from agent Eltávolítás az ügynöktől - - External file - Külső fájl - - - Browser for key file - Kulcsfájl böngészése - - - Browse… - Button for opening file dialog - Tallózás… - - - Generate - Előállítás - Select attachment file Mellékletfájl kijelölése @@ -3445,10 +3078,6 @@ Szeretné kijavítani? seconds másodperc - - Clear agent - Ügynök törlése - EditGroupWidget @@ -3460,6 +3089,10 @@ Szeretné kijavítani? Icon Ikon + + Browser Integration + Böngészőintegráció + Properties Tulajdonságok @@ -3476,10 +3109,6 @@ Szeretné kijavítani? Group has unsaved changes A csoportnak mentetlen változásai vannak - - Browser Integration - Böngészőintegráció - Enable Engedélyezés @@ -3517,19 +3146,19 @@ Szeretné kijavítani? Use entries only with HTTP Basic Auth: - Bejegyzések alkalmazása csak HTTP Basic hitelesítéssel: + Bejegyzések alkalmazása csak HTTP Basic Auth-tal: Only HTTP Auth toggle for this and sub groups - Csak HTTP hitelesítési kapcsoló ennél a csoportnál és alcsoportjainál + Csak HTTP Auth kapcsoló ennél a csoportnál és alcsoportjainál Do not use entries with HTTP Basic Auth: - Bejegyzések tiltása HTTP Basic hitelesítéssel: + Bejegyzések tiltása HTTP Basic Auth-tal: Do not use HTTP Auth toggle for this and sub groups - A HTTP hitelesítési kapcsoló tiltása ennél a csoportnál és alcsoportjainál + HTTP Auth kapcsoló tiltása ennél a csoportnál és alcsoportjainál Omit WWW subdomain from matching: @@ -3539,14 +3168,6 @@ Szeretné kijavítani? Omit WWW subdomain from matching toggle for this and sub groups A WWW altartomány kihagyása a megfeleltetésből átkapcsolása ennél a csoportnál és alcsoportjainál - - Restrict matching to given browser key: - A megfeleltetés az adott böngészőkulcsra korlátozása: - - - Restrict matching to given browser key toggle for this and sub groups - A megfeleltetés az adott böngészőkulcsra korlátozása beállítás be/ki ennél a csoportnál és az alcsoportjainál - EditGroupWidgetKeeShare @@ -3737,15 +3358,15 @@ Támogatott kiterjesztések: %1. Set the URL to use to search for a favicon - Webcím beállítása a weblapikon kereséséhez + URL beállítása a weblapikon kereséséhez Favicon URL - Weblapikon webcíme + Weblapikon URL Download favicon for URL - Webcím weblapikonjának letöltése + URL weblapikonjának letöltése Download favicon @@ -3779,6 +3400,10 @@ Támogatott kiterjesztések: %1. Unable to fetch favicon. A weblapikon letöltése sikertelen. + + You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security + A DuckDuckGo weboldal ikon szolgáltatást az Eszközök → Beállítások → Biztonság pontban lehet engedélyezni + Existing icon selected. Létező ikon kijelölve. @@ -3811,10 +3436,6 @@ Támogatott kiterjesztések: %1. The following icon(s) failed: A következő ikonnál hiba történt:A következő ikonoknál hiba történt: - - You can enable the DuckDuckGo website icon service under Application Settings -> Security - A DuckDuckGo weboldalikon szolgáltatást az Alkalmazásbeállítások → Biztonság pontban lehet engedélyezni - EditWidgetProperties @@ -3891,24 +3512,6 @@ Ez a kijelölt bővítmény hibás működését eredményezheti. %1 - Clone %1 – Klón - - Passkey - Jelkulcso - - - Invalid conversion type: %1 - Érvénytelen átalakítási típus: %1 - - - Invalid conversion syntax: %1 - Érvénytelen átalakítási szintaxis: %1 - - - Invalid regular expression syntax %1 -%2 - Érvénytelen reguláriskifejezés-szintaxis %1 -%2 - EntryAttachments @@ -3917,21 +3520,6 @@ Ez a kijelölt bővítmény hibás működését eredményezheti. A(z) „%1” fájl nem nyitható meg - - EntryAttachmentsDialog - - Form - Űrlap - - - File name - Fájlnév - - - File contents... - Fájltartalom… - - EntryAttachmentsModel @@ -3969,6 +3557,14 @@ Ez a kijelölt bővítmény hibás működését eredményezheti. Remove Eltávolítás + + Rename selected attachment + Kijelölt melléklet átnevezése + + + Rename + Átnevezés + Open selected attachment Kijelölt melléklet megnyitása @@ -4009,7 +3605,7 @@ Ez a kijelölt bővítmény hibás működését eredményezheti. Are you sure you want to overwrite the existing file "%1" with the attachment? - Valóban felülírja a meglévő „%1” fájlt a melléklettel? + Valóban felüírja a meglévő „%1” fájlt a melléklettel? Confirm overwrite @@ -4044,6 +3640,12 @@ Ez a kijelölt bővítmény hibás működését eredményezheti. Confirm Overwrite Attachment Melléklet felülírásának megerősítése + + Attachment "%1" already exists. +Would you like to overwrite the existing attachment? + A mellélket már létezik: „%1”. +Valóban felülírható a meglévő melléklet? + Confirm Attachment Melléklet megerősítése @@ -4078,24 +3680,6 @@ Error: %1 A frissült melléklet mentése sikertelen. Hiba: %1 - - Attachment "%1" already exists. -Would you like to overwrite the existing attachment? - A mellélket már létezik: „%1”. -Valóban felülírható a meglévő melléklet? - - - New - Új - - - Preview - Előnézet - - - Failed to preview an attachment: Attachment not found - A melléklet előnézete sikertelen: a melléklet nem található - EntryAttributesModel @@ -4140,7 +3724,7 @@ Valóban felülírható a meglévő melléklet? URL - Webcím + URL Notes @@ -4212,7 +3796,7 @@ Valóban felülírható a meglévő melléklet? URL - Webcím + URL Notes @@ -4290,14 +3874,6 @@ Valóban felülírható a meglévő melléklet? Has TOTP Van TOTP-je - - Background Color - Háttérszín - - - Group Path - Csoportútvonal - EntryPreviewWidget @@ -4318,8 +3894,8 @@ Valóban felülírható a meglévő melléklet? Jelszó - URL - Webcím + Notes + Jegyzetek Expiration @@ -4338,8 +3914,8 @@ Valóban felülírható a meglévő melléklet? Felhasználónév - Notes - Jegyzetek + URL + URL Advanced @@ -4355,7 +3931,7 @@ Valóban felülírható a meglévő melléklet? Autotype - Automatikus beírás + Automatikus típus Default Sequence @@ -4389,10 +3965,6 @@ Valóban felülírható a meglévő melléklet? Never Soha - - Double click to copy value - Dupla kattintás az érték másolásához - Enabled Engedélyezett @@ -4402,19 +3974,15 @@ Valóban felülírható a meglévő melléklet? Tiltott - Double click to copy to clipboard - Dupla kattintás a vágólapra másoláshoz + Double click to copy value + Dupla kattintás az érték másolásához EntryURLModel Invalid URL - Érvénytelen webcím - - - Duplicate URL - Ismételt webcím + Érvénytelen URL @@ -4431,10 +3999,6 @@ Valóban felülírható a meglévő melléklet? Reset to defaults Visszaállítás alapértelmezettre - - + %1 entry(s)... - + %1 bejegyzés…+ %1 bejegyzés… - ExportDialog @@ -4544,7 +4108,7 @@ This will leave your passwords and sensitive information vulnerable! %n Entry(s) was used by %1 %1 is the name of an application - %n bejegyzést használ: %1%n bejegyzést használ: %1 + A(z) %1 %n bejegyzést használtA(z) %1 %n bejegyzést használt @@ -4624,7 +4188,7 @@ A DuckDuckGo weboldal ikon szolgáltatást az alkalmazás beállításai közöt URL - Webcím + URL Status @@ -4655,199 +4219,6 @@ A DuckDuckGo weboldal ikon szolgáltatást az alkalmazás beállításai közöt Weblapikonok letöltése (%1/%2)… - - ImportWizard - - Import Wizard - Importálási varázsló - - - - ImportWizardPageReview - - WizardPage - Varázsló oldal - - - Entry count: %1 - Bejegyzésszám: %1 - - - Group - Csoport - - - Title - Cím - - - Username - Felhasználónév - - - Password - Jelszó - - - Url - Webcím - - - Could not load key file. - A kulcsfájl nem tölthető be. - - - Could not open remote database. Password or key file may be incorrect. - A távoli adatbázis nem nyitható meg. A jelszó vagy a kulcsfájl helytelen lehet. - - - - ImportWizardPageSelect - - Form - Űrlap - - - Import File Selection - Fájlkiválasztás importálása - - - Password: - Jelszó: - - - Key File: - Kulcsfájl: - - - Browse… - Tallózás… - - - Import Into: - Importálás ide: - - - New Database - Új adatbázis - - - No unlocked databases available - Nem érhetők el feloldott adatbázisok - - - Existing Database: - Meglévő adatbázis: - - - Import File: - Fájl importálása - - - Comma Separated Values (.csv) - Vesszővel elválasztott értékek (.csv) - - - 1Password Export (.1pux) - 1Password export (.1pux) - - - 1Password Vault (.opvault) - 1Password széf (.opvault) - - - Bitwarden (.json) - Bitwarden (.json) - - - KeePass 1 Database (.kdb) - KeePass 1 adatbázis (.kdb) - - - Open OPVault - OPVault megnyitása - - - Select import file - Importálási fájl kiválasztása - - - All files - Minden fájl - - - Key files - Kulcsfájlok - - - Select key file - Kulcsfájl kiválasztása - - - Comma Separated Values - Vesszővel elválasztott értékek - - - 1Password Export - 1Password export - - - Bitwarden JSON Export - Bitwarden JSON-export - - - 1Password Vault - 1Password széf - - - KeePass1 Database - KeePass 1 adatbázis - - - Proton Pass (.json) - Proton Pass (.json) - - - Proton Pass JSON Export - Proton Pass JSON-export - - - Temporary Database - Ideiglenes adatbázis - - - Command: - Parancs: - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - pl.: „sftp felhasznalo@kiszolgalo” vagy „scp felhasznalo@kiszolgalo:TavoliAdatbazis.kdbx {TEMP_DATABASE}” - - - Input: - Bemenet: - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last commend `exit` has to be sent - - például: -get TavoliAdatbazis.kdbx {TEMP_DATABASE} -exit ---- -A {TEMP_DATABASE} helyőrzőként szolgál az adatbázis ideiglenes helyen történő tárolására. -A parancsnak ki kell lépnie, ezért az „sftp” esetén utolsó parancsként el kell küldeni az „exit” parancsot. - - - - Remote Database (.kdbx) - Távoli adatbázis (.kdbx) - - KMessageWidget @@ -5267,19 +4638,30 @@ Line %2, column %3 Private key is an attachment but no attachments provided. - A titkos kulcs egy melléklet lenne, de nincs melléklet. + A személyes kulcs egy melléklet lenne, de nincs melléklet. Private key is empty - Üres a titkos kulcs + Üres a személyes kulcs File too large to be a private key - A fájl túl nagy ahhoz, hogy titkos kulcs legyen + A fájl túl nagy ahhoz, hogy személyes kulcs legyen Failed to open private key - A titkos kulcs megnyitása sikertelen + Személyes kulcs megnyitása meghiúsult + + + + KeePass1OpenWidget + + Import KeePass1 Database + KeePass1 adatbázis importálása + + + Unable to open the database. + Nem lehet megnyitni az adatbázist. @@ -5636,7 +5018,11 @@ Valóban folytatható a művelet ezzel a fájllal? &Recent Databases - &Legutóbb használt adatbázisok + &Friss adatbázisok + + + &Import + &Importálás &Export @@ -5658,10 +5044,6 @@ Valóban folytatható a művelet ezzel a fájllal? TOTP TOTP - - Tags - Címkék - &Groups &Csoportok @@ -5706,18 +5088,34 @@ Valóban folytatható a művelet ezzel a fájllal? &New Database… Ú&j adatbázis + + Create a new database + Új adatbázis létrehozása + &Merge From Database… &Egyesítés adatbázisból… + + Merge from another KDBX database + Egyesítés egy másik KeePassX adatbázisból + &New Entry… Új b&ejegyzés… + + Add a new entry + Új bejegyzés hozzáadása + &Edit Entry… Bejegyzés sze&rkesztése… + + View or edit entry + Bejegyzés megtekintése vagy szerkesztése + &Delete Entry… Bejegyzés &törlése… @@ -5726,6 +5124,10 @@ Valóban folytatható a művelet ezzel a fájllal? &New Group… Ú&j csoport… + + Add a new group + Új csoport hozzáadása + &Edit Group… Csoport sz&erkesztése… @@ -5736,7 +5138,7 @@ Valóban folytatható a művelet ezzel a fájllal? Download All &Favicons… - Összes weblapikon &letöltése… + Minden weblapikon &letöltése… Sort &A-Z @@ -5758,10 +5160,18 @@ Valóban folytatható a művelet ezzel a fájllal? Database &Reports… Adatbázis &jelentések… + + Statistics, health check, etc. + Statisztika, állapotfelmérés, stb. + &Database Settings… Adatbázis-&beállítások… + + Database settings + Adatbázis-beállítások + &Clone Entry… Bejegyzés &klónozása… @@ -5770,18 +5180,34 @@ Valóban folytatható a művelet ezzel a fájllal? Move u&p Mozgatás &fel + + Move entry one step up + Bejegyzés mozgatása egy lépéssel feljebb + Move do&wn Mozgatás &le + + Move entry one step down + Bejegyzés mozgatása egy lépéssel lejebb + Copy &Username &Felhasználónév másolása + + Copy username to clipboard + Felhasználónév másolása a vágólapra + Copy &Password &Jelszó másolása + + Copy password to clipboard + Jelszó másolása a vágólapra + &Settings &Beállítások @@ -5800,7 +5226,7 @@ Valóban folytatható a művelet ezzel a fájllal? Open &URL - &Webcím megnyitása + &URL megnyitása &Lock Database @@ -5815,13 +5241,21 @@ Valóban folytatható a művelet ezzel a fájllal? &Cím - Copy &URL - &Webcím másolása + Copy title to clipboard + Cím másolása a vágólapra + + + Copy URL to clipboard + URL másolása a vágólapra &Notes &Jegyzetek + + Copy notes to clipboard + Jegyzetek másolása a vágólapra + &CSV File… &CSV-fájl… @@ -5834,14 +5268,26 @@ Valóban folytatható a művelet ezzel a fájllal? KeePass 1 Database… KeePass 1 adatbázis… + + Import a KeePass 1 database + KeePass 1 adatbázis importálása + 1Password Vault… 1Password Vault… + + Import a 1Password Vault + 1Password Vault importálása + CSV File… CSV-fájl… + + Import a CSV file + CSV-fájl importálása + Show TOTP TOTP megjelenítése @@ -5858,10 +5304,6 @@ Valóban folytatható a művelet ezzel a fájllal? Copy &TOTP &TOTP másolása - - Copy Password and TOTP - Jelszó és TOTP másolása - E&mpty recycle bin &Kuka ürítése @@ -5886,6 +5328,10 @@ Valóban folytatható a művelet ezzel a fájllal? &Online Help &Online súgó + + Go to online documentation + Ugrás az online dokumentációra + &User Guide Felhasználói &kézikönyv @@ -5930,10 +5376,6 @@ Valóban folytatható a művelet ezzel a fájllal? Classic (Platform-native) Klasszikus (platform natív) - - Show Menubar - Menü megjelenítése - Show Toolbar Eszköztár megjelenítése @@ -5958,10 +5400,6 @@ Valóban folytatható a művelet ezzel a fájllal? Clone Group... Csoport klónozása… - - &XML File… - &XML-fájl… - Clear history Előzmények törlése @@ -5988,8 +5426,10 @@ Expect some bugs and minor issues, this version is meant for testing purposes. - No Tags - Nincsenek címkék + 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. Restore Entry(s) @@ -6019,10 +5459,6 @@ Néhány hiba és kisebb nehézségek várhatóak, ezért ez a verzió tesztelé Quit KeePassXC Kilépés a KeePassXC-ből - - %1 Entry(s) - %1 bejegyzés%1 bejegyzés - Please present or touch your YubiKey to continue… Kérjük, tegye elérhetővé vagy érintse meg a YubiKey-t a folytatáshoz… @@ -6035,314 +5471,38 @@ Néhány hiba és kisebb nehézségek várhatóak, ezért ez a verzió tesztelé You must restart the application to apply this setting. Would you like to restart now? Ennek a beállításnak az érvényre kerüléséhez újra kell indítani az alkalmazást. Legyen azonnal újraindítva? + + Tags + Címkék + + + No Tags + Nincsenek címkék + + + %1 Entry(s) + %1 bejegyzés%1 bejegyzés + + + Copy Password and TOTP + Jelszó és TOTP másolása + + + &XML File… + &XML-fájl… + + + XML File… + XML-fájl… + + + Copy &URL + &URL másolása + Allow Screen Capture Képernyőrögzítés engedélyezése - - 1Password 1PUX... - 1Password 1PUX... - - - Import a 1Password 1PUX file - 1Password 1PUX-fájl importálása - - - Import… - Importálás… - - - Passkeys… - Jelkulcsok… - - - Import Passkey - Jelkulcs importálása - - - Remote S&ync… - Távoli &szinkronizálás… - - - Quit Application - Kilépés az alkalmazásból - - - Open About Dialog - Névjegy párbeszédablak megnyitása - - - Open Database - Adatbázis megnyitása - - - Create Database - Adatbázis létrehozása - - - Merge From Database - Egyesítés adatbázisból - - - Create Entry - Bejegyzés létrehozása - - - Edit Entry - Bejegyzés szerkesztése - - - Delete Entry - Bejegyzés törlése - - - Create Group - Csoport létrehozása - - - Edit Group - Csoport szerkesztése - - - Delete Group - Csoport törlése - - - Download All Favicons - Kedvenc weblapikonok letöltése - - - Sort Groups A-Z - Rendezés: csoportok A–Z - - - Sort Groups Z-A - Rendezés: csoportok Z–A - - - Save Database As - Adatbázis mentése más néven - - - Show Database Security - Adatbázis biztonságának megjelenítése - - - Show Database Reports - Adatbázis-jelentések megjelenítése - - - Show Database Settings - Adatbázis-beállítások megjelenítése - - - Show Passkeys - Jelkulcsok megjelenítése - - - Clone Entry - Bejegyzés klónozása - - - Move Entry Up - Bejegyzés feljebb helyezése - - - Move Entry Down - Bejegyzés lentebb helyezése - - - Copy Username - Felhasználónév másolása - - - Copy Password - Jelszó másolása - - - Show Application Settings - Alkalmazásbeállítások megjelenítése - - - Show Password Generator - Jelszó-előállító megjelenítése - - - Remove Passkey From Entry - Jelkulcs eltávolítása a bejegyzésből - - - Perform Auto-Type: {USERNAME} - Automatikus beírás végrehajtása: {USERNAME} - - - Perform Auto-Type: {USERNAME}{ENTER} - Automatikus beírás végrehajtása: {USERNAME}{ENTER} - - - Perform Auto-Type: {PASSWORD} - Automatikus beírás végrehajtása: {PASSWORD} - - - Perform Auto-Type: {PASSWORD}{ENTER} - Automatikus beírás végrehajtása: {PASSWORD}{ENTER} - - - Perform Auto-Type: {TOTP} - Automatikus beírás végrehajtása: {TOTP} - - - Copy Title - Cím másolása - - - Copy URL - Webcím másolása - - - Copy Notes - Jegyzetek másolása - - - Export to CSV - Exportálás CSV-be - - - Export to HTML - Exportálás HTML-be - - - Import KeePass1 Database - KeePass1 adatbázis importálása - - - Import 1Password Vault - 1Password széf importálása - - - Import CSV File - CSV-fájl importálása - - - Show TOTP QR Code - TOTP QR-kód megjelenítése - - - Set up TOTP - TOTP beállítása - - - Empty Recycle Bin - Kuka ürítése - - - Open Donation Website - Adományozási weblap megnyitása - - - Open Bug Report - Hibajelentés megnyitása - - - Open Online Documentation - Online dokumentáció megjelenítése - - - Open Keyboard Shortcuts Guide - Gyorsbillentyűk útmutatójának megnyitása - - - Save Database Backup - Biztonsági mentés az adatbázisról - - - SSH Agent: Add Key - SSH ügynök: kulcs hozzáadása - - - SSH Agent: Remove Key - SSH ügynök: kulcs eltávolítása - - - Toggle Compact Mode - Kompakt mód be/ki - - - Set Theme: Automatic - Téma beállítása: automatikus - - - Set Theme: Light - Téma beállítása: világos - - - Set Theme: Dark - Téma beállítása: sötét - - - Set Theme: Classic - Téma beállítása: klasszikus - - - Toggle Show Menubar - Menü megjelenítésének átkapcsolása - - - Toggle Show Toolbar - Eszköztár megjelenítése be/ki - - - Toggle Show Preview Panel - Előnézeti panel megjelenítése be/ki - - - Toggle Always on Top - Mindig felül be/ki - - - Toggle Hide Usernames - Felhasználónevek elrejtése be/ki - - - Toggle Hide Passwords - Jelszavak elrejtése be/ki - - - Export to XML - Exportálás XML-be - - - Toggle Allow Screen Capture - Képernyőrögzítés engedélyezése be/ki - - - Show Group Panel - Csoport panel megjelenítése - - - Toggle Show Group Panel - Csoport panel megjelenítése be/ki - - - Setup Remote Sync… - Távoli szinkronizálás beállításai - - - Password Generator - Jelszógenerátor - - - E&xpire Entry… - Bejegyzés &elévültté tétele… - - - Clear SSH Agent - SSH-ügynök törlése - - - Clear all identities in ssh-agent - Az ssh-agentben található összes személyazonosság törlése - ManageDatabase @@ -6400,6 +5560,26 @@ Néhány hiba és kisebb nehézségek várhatóak, ezért ez a verzió tesztelé Overwriting %1 [%2] %1 felülírása [%2] + + older entry merged from database "%1" + régebbi bejegyzés összeolvasztva a(z) „%1” adatbázisból + + + Adding backup for older target %1 [%2] + Biztonsági mentés hozzáadása a régebbi %1 célhoz [%2] + + + Adding backup for older source %1 [%2] + Biztonsági mentés hozzáadása a régebbi %1 forráshoz [%2] + + + Reapplying older target entry on top of newer source %1 [%2] + A régebbi cél újra alkalmazása az újabb %1 forráson [%2] + + + Reapplying older source entry on top of newer target %1 [%2] + A régebbi forrás újra alkalmazása az újabb %1 célon [%2] + Synchronizing from newer source %1 [%2] Szinkronizálás az újabb %1 forrásból [%2] @@ -6459,6 +5639,14 @@ Néhány hiba és kisebb nehézségek várhatóak, ezért ez a verzió tesztelé Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. Itt állíthatja be az adatbázis titkosítási beállításokat. Ne aggódjon, később is megváltoztathatja az adatbázis-beállításokban. + + Advanced Settings + Speciális beállítások + + + Simple Settings + Egyszerű beállítások + NewDatabaseWizardPageDatabaseKey @@ -6493,25 +5681,6 @@ Néhány hiba és kisebb nehézségek várhatóak, ezért ez a verzió tesztelé Töltse ki a megjelenítendő nevet és a nem kötelező leírást az új adatbázishoz: - - NewEntryAttachmentsDialog - - Attachment name cannot be empty - A melléklet neve nem lehet üres - - - Attachment with the same name already exists - Már létezik ugyanilyen nevű melléklet - - - Save attachment - Melléklet mentése - - - New entry attachment - Új bejegyzésmelléklet - - NixUtils @@ -6558,6 +5727,15 @@ Néhány hiba és kisebb nehézségek várhatóak, ezért ez a verzió tesztelé %1 bájt egyszerű szöveg a várt, de ehelyett a talált: %2 + + OpVaultOpenWidget + + Read Database did not produce an instance +%1 + Az adatbázis olvasása nem hozott létre példányt: +%1 + + OpVaultReader @@ -6566,7 +5744,7 @@ Néhány hiba és kisebb nehézségek várhatóak, ezért ez a verzió tesztelé Directory .opvault must be readable - A .opvault mappa olvashatónak kell lennie + A .opvault mappa olvasható kell legyen Directory .opvault/default must exist @@ -6574,11 +5752,11 @@ Néhány hiba és kisebb nehézségek várhatóak, ezért ez a verzió tesztelé Directory .opvault/default must be readable - A .opvault/default mappa olvashatónak kell lennie + A .opvault/default mappa olvasható kell legyen Unable to decode masterKey: %1 - A mesterkulcs nem dekódolható: %1 + Nem dekódolható a mesterkulcs: %1 Unable to derive master key: %1 @@ -6601,11 +5779,11 @@ Néhány hiba és kisebb nehézségek várhatóak, ezért ez a verzió tesztelé Key file way too small. - A kulcsfájl túl kicsi. + A kulcsfájl útja túl kicsi. Key file magic header id invalid - Érvénytelen a kulcsfájl mágikus fejléc-azonosítója + Érvénytelen a kulcsfájl mágikus fejlécazonosítója Found zero keys @@ -6613,7 +5791,7 @@ Néhány hiba és kisebb nehézségek várhatóak, ezért ez a verzió tesztelé Failed to read public key. - A nyilvános kulcs olvasása sikertelen. + Nyilvános kulcs olvasása sikertelen. Corrupted key file, reading private key failed @@ -6625,16 +5803,12 @@ Néhány hiba és kisebb nehézségek várhatóak, ezért ez a verzió tesztelé No private key payload to decrypt - Nincs titkos kulcs megadva a visszafejtéshez + Nincs dekódolható adat a személyes kulcsból Unknown cipher: %1 Ismeretlen titkosító: %1 - - AES-256/GCM is currently not supported - AES-256/GCM jelenleg nem támogatott - Passphrase is required to decrypt this key Jelmondat szükséges a kulcsfájl visszafejtéséhez @@ -6653,7 +5827,7 @@ Néhány hiba és kisebb nehézségek várhatóak, ezért ez a verzió tesztelé Failed to initialize cipher: %1 - A titkosító előkészítése sikertelen: %1 + Titkosító indítása sikertelen: %1 Decryption failed: %1 @@ -6681,7 +5855,7 @@ Néhány hiba és kisebb nehézségek várhatóak, ezért ez a verzió tesztelé Unexpected EOF while reading private key - Nem várt EOF a titkos kulcs olvasása közben + Nem várt EOF a személyes kulcs olvasása közben Can't write public key as it is empty @@ -6693,190 +5867,15 @@ Néhány hiba és kisebb nehézségek várhatóak, ezért ez a verzió tesztelé Can't write private key as it is empty - Nem lehet írni a titkos kulcsot, mivel üres + Nem lehet írni a személyes kulcsot, mivel üres Unexpected EOF when writing private key - Nem várt EOF a titkos kulcs írásakor + Nem várt EOF a személyes kulcs írásakor - (encrypted) - (titkosított) - - - - OpenSSHKeyGenDialog - - SSH Key Generator - SSH-kulcsgenerátor - - - Type - Típus - - - Bits - Bitek - - - Comment - Megjegyzés - - - - PasskeyExportDialog - - KeePassXC - Passkey Export - KeePassXC – Jelkulcs exportálása - - - Filenames will be generated with title and .passkey file extension. - A fájlnevek a cím alapján lesznek előállítva, és .passkey kiterjesztésűek lesznek. - - - Export entries - Bejegyzések exportálása - - - Export Selected - Kijelöltek exportálása - - - Cancel - Mégse - - - Export to folder - Exportálás mappába - - - Export the following passkey entries. - A következő jelkulcsot tartalmazó bejegyzések exportálása. - - - - PasskeyExporter - - KeePassXC: Passkey Export - KeePassXC: Jelkulcs exportálása - - - File "%1.passkey" already exists. -Do you want to overwrite it? - - A(z) „%1.passkey” fájl már létezik. -Felülírja? - - - - Cannot open file - A fájl nem nyitható meg - - - Cannot open file "%1" for writing. - A(z) „%1” fájl nem nyitható meg írásra. - - - Cannot write to file - Nem lehet a fájlba írni - - - - PasskeyImportDialog - - KeePassXC - Passkey Import - KeePassXC – Jelkulcs importálása - - - Username: %1 - Felhasználónév: %1 - - - Group - Csoport - - - Database - Adatbázis - - - Import Passkey - Jelkulcs importálása - - - Import - Importálás - - - Cancel - Mégse - - - Entry - Bejegyzés - - - Create new entry - Új bejegyzés importálása - - - Relying Party: %1 - Közvetítő fél: %1 - - - Import the following passkey: - A következő jelkulcs importálása: - - - Import the following passkey to this entry: - A következő jelkulcs importálása ebbe a bejegyzésbe: - - - Default passkeys group (Imported Passkeys) - Jelkulcsok alapértelmezett csoportja (importált jelkulcsok) - - - - PasskeyImporter - - Passkey file - Jelkulcsfájl - - - All files - Minden fájl - - - Cannot open file - A fájl nem nyitható meg - - - Cannot open file "%1" for reading. - A(z) „%1” fájl nem nyitható meg olvasásra. - - - Open passkey file - Jelkulcsfájl megnyitása - - - Cannot import passkey - A jelkulcs nem importálható - - - Cannot import passkey file "%1". Data is missing. - A(z) „%1” jelkulcsfájl nem importálható. Az adatok hiányoznak. - - - Cannot import passkey file "%1". -The following data is missing: -%2 - A(z) „%1” jelkulcsfájl nem importálható. -A következő adatok hiányoznak: -%2 - - - Cannot import passkey file "%1". Private key is missing or malformed. - A(z) „%1” jelkulcsfájl nem importálható. A titkos kulcs hiányzik vagy hibás. + AES-256/GCM is currently not supported + AES-256/GCM jelenleg nem támogatott @@ -7081,6 +6080,10 @@ A következő adatok hiányoznak: Word Count: Szavak száma: + + Character Count: + Karakterszám: + Word Case: Minden Szó Nagybetűs @@ -7093,6 +6096,10 @@ A következő adatok hiányoznak: Add custom wordlist Egyéni szólista hozzáadása + + character + karakter + Close Bezárás @@ -7129,30 +6136,6 @@ A következő adatok hiányoznak: Entropy: %1 bit Entrópia: %1 bit - - Password Quality: %1 - Jelszóminőség: %1 - - - Poor - Password quality - Silány - - - Weak - Password quality - Gyenge - - - Good - Password quality - - - - Excellent - Password quality - Kiváló - Confirm Delete Wordlist Szólista törlésének megerősítése @@ -7200,20 +6183,32 @@ Valóban felülírja? Speciális karakterek - passwordLength - jelszóhossz + Password Quality: %1 + Jelszóminőség: %1 - Characters: %1 - Karakterszám: %1 + Poor + Password quality + Silány - MIXED case - VEGYES eset + Weak + Password quality + Gyenge - Excluded characters: "0", "1", "l", "I", "O", "|", "﹒", "B", "8", "G", "6" - Kihagyott karakterek: „0”, „1”, „l”, „I”, „O”, „|”, „﹒”, „B”, „8”, „G”, „6” + Good + Password quality + + + + Excellent + Password quality + Kiváló + + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + Kihagyott karakterek: „0”, „1”, „l”, „I”, „O”, „|”, „﹒” @@ -7263,7 +6258,7 @@ Valóban felülírja? Kiváló - Toggle password visibility using Control + H. Open the password generator using Control + G. + Toggle password visibilty using Control + H. Open the password generator using Control + G. Jelszó láthatóságának átváltása Ctrl + H-val. Jelszó-előállító megnyitása Ctrl + G-vel. @@ -7282,21 +6277,6 @@ Valóban felülírja? Nyomja meg a &Tab billentyűt a karakterek között - - PreviewEntryAttachmentsDialog - - Preview entry attachment - Bejegyzésmelléklet előnézete - - - No preview available - Nem érhető el előnézet - - - Image format not supported - A képformátum nem támogatott - - QMessageBox @@ -7335,10 +6315,6 @@ Valóban felülírja? Continue Folytatás - - Continue with weak password - Folytatás gyenge jelszóval - QObject @@ -7384,7 +6360,7 @@ Valóban felülírja? No URL provided - Nincs megadva webcím + Nincs URL megadva No logins found @@ -7428,11 +6404,11 @@ Valóban felülírja? URL for the entry. - A bejegyzés webcíme. + Bejegyzés URL-je. URL - Webcím + URL Notes for the entry. @@ -7732,13 +6708,9 @@ Valóban felülírja? Too many arguments provided. Túl sok argumentum lett megadva. - - Path of the database. - Adatbázis útvonala. - Target decryption time in MS for the database. - Megcélzott visszafejtési idő ms-ban az adatbázis számára. + Megcélzott visszafejtési idő a ms-ban az adatbázis számára. time @@ -7756,6 +6728,10 @@ Valóban felülírja? Create a new database. Új adatbázis létrehozása. + + Path of the database. + Adatbázis útvonala. + Invalid decryption time %1. Érvénytelen visszafejtési idő: %1. @@ -7800,158 +6776,6 @@ Valóban felülírja? Successfully created new database. Az adatbázis sikeresen létre lett hozva. - - Unset the password for the database. - Az adatbázis jelszavának visszavonása. - - - Unset the key file for the database. - Az adatbázis kulcsfájljának visszavonása - - - Edit a database. - Adatbázis szerkesztése. - - - Cannot use %1 and %2 at the same time. - Nem használható %1 és %2 egyidejűleg. - - - Could not change the database key. - Nem sikerült az adatbázis kulcsának módosítása. - - - Database was not modified. - Az adatbázis nem lett módosítva. - - - Writing the database failed: %1 - Az adatbázis kiírása sikertelen: %1 - - - Successfully edited the database. - Az adatbázis szerkesztése sikeres. - - - Cannot remove password: The database does not have a password. - A jelszó nem távolítható el: Az adatbázisnak nincs jelszava. - - - Cannot remove file key: The database does not have a file key. - A kulcsfájl nem távolítható el. Az adatbázisnak nincs kulcsfájlja. - - - Loading the new key file failed: %1 - Az új kulcsfájl betöltése sikertelen: %1 - - - Found unexpected Key type %1 - Váratlan kulcstípus található: %1 - - - Cannot remove all the keys from a database. - Nem távolítható el az összes kulcs az adatbázisból - - - Show a database's information. - Adatbázis információinak megjelenítése. - - - UUID: - UUID: - - - Name: - Név: - - - Description: - Leírás: - - - Cipher: - Titkosító: - - - KDF: - Kulcsszármaztató függvény (KDF): - - - Recycle bin is enabled. - Kuka engedélyezve. - - - Recycle bin is not enabled. - A kuka nincs engedélyezve. - - - Location - Hely - - - Database created - Adatbázis létrehozva - - - Last saved - Legutóbb mentve - - - Unsaved changes - Nem mentett módosítsok - - - yes - igen - - - no - nem - - - Number of groups - Csoportszám - - - Number of entries - Bejegyzésszám - - - Number of expired entries - Lejárt bejegyzések száma - - - Unique passwords - Egyedi jelszavak - - - Non-unique passwords - Nem egyedi jelszavak - - - Maximum password reuse - Maximális jelszó-újrahasznosítás - - - Number of short passwords - Rövid jelszavak száma - - - Number of weak passwords - Gyenge jelszavak száma - - - Entries excluded from reports - Jelentésekből kizárt bejegyzések - - - Average password length - Átlagos jelszóhossz - - - %1 characters - %1 karakter - Word count for the diceware passphrase. Szavak számra a diceware jelmondat számára. @@ -7975,6 +6799,10 @@ Valóban felülírja? Invalid word count %1 Érvénytelen a szavak száma: %1 + + The word list is too small (< 1000 items) + A szavak listája túl rövid (< 1000 elem) + Title for the entry. Bejegyzés címe. @@ -7999,6 +6827,10 @@ Valóban felülírja? Enter new password for entry: Adja meg a bejegyzés új jelszavát: + + Writing the database failed: %1 + Az adatbázis kiírása sikertelen: %1 + Successfully edited entry %1. A(z) %1 bejegyzése sikeresen szerkesztve. @@ -8119,6 +6951,10 @@ Valóban felülírja? Exit interactive mode. Kilépés az interaktív módból. + + Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. + Exportálási formátum. Lehetőségek: „xml” vagy „csv”. Az alapértelmezett az „xml”. + Exports the content of a database to standard output in the specified format. Szabványos kimenetre exportálja az adatbázis tartalmát a meghatározott formátumban. @@ -8219,6 +7055,106 @@ Valóban felülírja? Successfully imported database. Sikeres adatbázis importálás. + + Show a database's information. + Adatbázis információinak megjelenítése. + + + UUID: + UUID: + + + Name: + Név: + + + Description: + Leírás: + + + Cipher: + Titkosító: + + + KDF: + Kulcsszármaztató függvény (KDF): + + + Recycle bin is enabled. + Kuka engedélyezve. + + + Recycle bin is not enabled. + A kuka nincs engedélyezve. + + + Location + Hely + + + Database created + Adatbázis létrehozva + + + Last saved + Legutóbb mentve + + + Unsaved changes + Nem mentett módosítsok + + + yes + igen + + + no + nem + + + Number of groups + Csoportszám + + + Number of entries + Bejegyzésszám + + + Number of expired entries + Lejárt bejegyzések száma + + + Unique passwords + Egyedi jelszavak + + + Non-unique passwords + Nem egyedi jelszavak + + + Maximum password reuse + Maximális jelszó-újrahasznosítás + + + Number of short passwords + Rövid jelszavak száma + + + Number of weak passwords + Gyenge jelszavak száma + + + Entries excluded from reports + Jelentésekből kizárt bejegyzések + + + Average password length + Átlagos jelszóhossz + + + %1 characters + %1 karakter + Unknown command %1 Ismeretlen parancs: %1 @@ -8391,10 +7327,6 @@ Elérhető parancsok: Show the protected attributes in clear text. A védett attribútumok megjelenítése egyszerű szövegként. - - Show all the attributes of the entry. - Bejegyzés összes attribútumának megjelenítése. - Show the attachments of the entry. Egy bejegyzés mellékleteinek megjelenítése. @@ -8465,10 +7397,6 @@ Fontolja meg, hogy új kulcsfájlt állítson elő. Invalid YubiKey serial %1 Érvénytelen YubiKey sorozatszám: %1 - - Please present or touch your YubiKey to continue. - Tegye elérhetővé vagy érintse meg a YubiKeyt a folytatáshoz. - Enter password to encrypt database (optional): Adjon meg egy jelszót az adatbázis titkosításához (válaszható): @@ -8707,6 +7635,18 @@ Kernel: %3 %4 file empty a fájl üres + + malformed string + rosszul formázott karakterlánc + + + missing closing quote + hiányzó lezáró idézőjel + + + %1: (row, col) %2,%3 + %1: (sor, oszlop) %2,%3 + AES 256-bit 256 bites AES @@ -8885,6 +7825,14 @@ Kernel: %3 %4 read password of the database from stdin adatbázis jelszó beolvasása az stdin-ről + + allow app screen recordering and screenshots + Képernyőmentések és felvételek engedélyezése az alkalmazás számára + + + Locked databases. + Zárolt adatbázisok. + Database failed to lock. Adatbázis-zárolás sikertelen. @@ -8893,10 +7841,6 @@ Kernel: %3 %4 Another instance of KeePassXC is already running. A KeePassXC egy másik példánya is fut. - - KeePassXC is not running. No open database to lock - A KeePassXC nem fut. Nincs megnyitott adatbázis, amit zárolni lehetne - Fatal error while testing the cryptographic functions. Végzetes hiba a kriptográfiai funkciók tesztelése közben. @@ -8925,7 +7869,7 @@ Kernel: %3 %4 Failed to sign challenge using Windows Hello. - Nem sikerült a bejelentkezés a Windows Hellóval. + Nem sikerült a bejelentkezés a Windows Hello-val. Warning: Failed to block screenshot capture on a top-level window. @@ -8940,300 +7884,70 @@ Kernel: %3 %4 Érvénytelen KDF - Access to all entries is denied - Az összes bejegyzés elérése megtagadva + Please present or touch your YubiKey to continue. + Tegye elérhetővé vagy érintse meg a YubiKeyt a folytatáshoz. - allow screenshots and app recording (Windows/macOS) - képernyőképek és alkalmazásrögzítés engedélyezése (Windows/macOS) + Show all the attributes of the entry. + Bejegyzés összes attribútumának megjelenítése. + + + Edit a database. + Adatbázis szerkesztése. + + + Could not change the database key. + Nem sikerült az adatbázis kulcsának módosítása. + + + Database was not modified. + Az adatbázis nem lett módosítva. + + + Successfully edited the database. + Az adatbázis szerkesztése sikeres. + + + Loading the new key file failed: %1 + Az új kulcsfájl betöltése sikertelen: %1 + + + Unset the password for the database. + Az adatbázis jelszavának visszavonása. + + + Unset the key file for the database. + Az adatbázis kulcsfájljának visszavonása + + + Cannot use %1 and %2 at the same time. + Nem használható %1 és %2 egyidejűleg. + + + Cannot remove all the keys from a database. + Nem távolítható el az összes kulcs az adatbázisból + + + Cannot remove password: The database does not have a password. + A jelszó nem távolítható el: Az adatbázisnak nincs jelszava. + + + Cannot remove file key: The database does not have a file key. + A kulcsfájl nem távolítható el. Az adatbázisnak nincs kulcsfájlja. + + + Found unexpected Key type %1 + Váratlan kulcstípus található: %1 Set the key file for the database. -This option is deprecated, use --set-key-file instead. +This options is deprecated, use --set-key-file instead. A kulcsfájl beállítása az adatbázishoz. Ez a kapcsoló elavult, használja helyette a --set-key-file kapcsolót. - Databases have been locked. - Az adatbázisok zárolva vannak. - - - Attestation not supported - Az igazolás nem támogatott - - - Credential is excluded - A hitelesítési adat ki van zárva - - - Passkeys request canceled - A jelkulcskérés megszakítva - - - Invalid user verification - Érvénytelen felhasználóellenőrzés - - - Empty public key - Üres nyilvános kulcs - - - Invalid URL provided - Érvénytelen webcím lett megadva - - - Passkeys - Jelkulcsok - - - AES initialization failed - Az AES előkészítése sikertelen - - - AES encrypt failed - Az AES-titkosítás sikertelen - - - Failed to store in Linux Keyring - A linuxos kulcstartó tárolása sikertelen - - - Polkit returned an error: %1 - A Polkit hibát adott vissza: %1 - - - Could not locate key in keyring - A kulcstartóban lévő kulcs nem található - - - Could not read key in keyring - A kulcstartóban lévő kulcs nem olvasható - - - AES decrypt failed - Az AES-titkosítás feloldása sikertelen - - - No Polkit authentication agent was available - Nem érhető el Polkit hitelesítési ügynök - - - Polkit authorization failed - A Polkit-hitelesítés sikertelen - - - No Quick Unlock provider is available - Nem érhető el gyors feloldási szolgáltató - - - Failed to init KeePassXC crypto. - KeePassXC crypto indítása sikertelen. - - - Failed to encrypt key data. - A kulcsadatok titkosítása sikertelen. - - - Failed to get Windows Hello credential. - A Windows Hello hitelesítési adatok lekérése sikertelen. - - - Failed to decrypt key data. - A kulcsadatok visszafejtése sikertelen. - - - Origin is empty or not allowed - Az eredet üres vagy nem engedélyezett - - - Effective domain is not a valid domain - Az effektív tartomány érvénytelen - - - Origin and RP ID do not match - Az eredet és az RP azonosító nem egyezik - - - No supported algorithms were provided - Nem lett támogatott algoritmus megadva - - - Wait for timer to expire - Várakozás az időzítő lejáratára - - - Challenge is shorter than required minimum length - A kihívás rövidebb mint a legrövidebb várt hossz - - - user.id does not match the required length - A user.id nem a szükséges hosszúságú - - - Favorite - Tag for favorite entries - Kedvenc - - - File does not exist. - A fájl nem létezik - - - Cannot open file: %1 - A fájl nem nyitható meg: %1 - - - Cannot parse file: %1 at position %2 - A fájl nem dolgozható fel: %1, ennél a pozíciónál: %2 - - - Failed to decrypt json file: %1 - A JSON-fájl visszafejtése sikertelen: %1 - - - Invalid encKeyValidation field - Érvénytelen encKeyValidation mező - - - Invalid cipher list within encKeyValidation field - Érvénytelen titkosítólista az encKeyValidation mezőben - - - Wrong password - Hibás jelszó - - - Invalid encrypted data field - Érvénytelen titkosított adatmező - - - Invalid cipher list within encrypted data field - Érvénytelen titkosítólista a titkosított adatmezőben - - - Cannot initialize cipher - A titkosító előkészítése sikertelen - - - Cannot decrypt data - Nem lehet visszafejteni az adatokat - - - Bitwarden Import - Bitwarden import - - - Archived - Tag for archived entries - Archiválva - - - Invalid 1PUX file format: Not a valid ZIP file. - Érvénytelen 1PUX-fájlformátum: nem érvényes ZIP-fájl. - - - Invalid 1PUX file format: Missing export.data - Érvénytelen 1PUX-fájlformátum: hiányzó export.data. - - - 1Password Import - 1Password import - - - Enter Shortcut - Gyorsbillentyű megadása - - - Action - Művelet - - - Shortcuts - Gyorsbillentyűk - - - Unknown passkeys error - Ismeretlen, jelkulcsokkal kapcsolatos hiba - - - Invalid KDF iterations, cannot decrypt json file - Érvénytelen KDF iterációk, a JSON-fájl nem fejthető vissza - - - Unsupported format, ensure your Bitwarden export is password-protected - Nem támogatott formátum, győződjön meg róla, hogy a Bitwarden exportja jelszóval védett. - - - Only PBKDF and Argon2 are supported, cannot decrypt json file - Csak a PBKDF és az Argon2 támogatott, a JSON-fájl nem fejthető vissza - - - Reset Shortcuts - Gyorsbillentyűk visszaállítása - - - Double click an action to change its shortcut - Kattintson duplán egy műveletre a gyorsbillentyűje módosításához - - - Filter... - Szűrő… - - - Shortcut Conflict - Gyorsbillentyű-ütközés - - - Shortcut %1 conflicts with '%2'. Overwrite shortcut? - A(z) %1 gyorsbillentyű ütközik ezzel: „%2”. Felülírja? - - - Cannot generate valid passphrases because the wordlist is too short - Nem lehet érvényes jelszavakat generálni, mert a szólista túl rövid - - - Encrypted files are not supported. - A titkosított fájlok nem támogatottak - - - Proton Pass Import - Proton Pass importálás - - - Delete plugin data? - Törölhetők a bővítmény adatai? - - - Delete plugin data from Entry(s)? - Törölhetők a bővítmény adatai a bejegyzésekből?Törölhetők a bővítmény adatai a bejegyzésekből? - - - Passkey - Jelkulcso - - - Format to use when exporting. Available choices are 'xml', 'csv' or 'html'. Defaults to 'xml'. - Exportálási formátum. Lehetőségek: „xml”, „csv” vagy „html”. Az alapértelmezett az „xml”. - - - start minimized to the system tray - indítás a rendszertálcára minimalizálva - - - malformed string, possible unescaped delimiter - - - - missing closing delimiter - - - - %1, row: %2, column: %3 - - - - Tags - Címkék + KeePassXC is not running. No open database to lock + A KeePassXC nem fut. Nincs megnyitott adatbázis, amit zárolni lehetne @@ -9270,54 +7984,35 @@ Ez a kapcsoló elavult, használja helyette a --set-key-file kapcsolót.Belső zlib hiba: - - RemoteHandler - - Command `%1` did not finish in time. Process was killed. - A parancs nem fejeződött be időben: „%1”. A folyamat kilőve. - - - Failed to upload merged database. Command `%1` did not finish in time. Process was killed. - Nem sikerült feltölteni az egyesített adatbázist. A parancs nem fejeződött be időben: „%1”. A folyamat kilőve. - - - Invalid download parameters provided. - Érvénytelen letöltési paraméterek lettek megadva. - - - Command `%1` failed to download database. - A parancs nem tudta letölteni az adatbázist: „%1”. - - - Invalid database pointer or upload parameters provided. - Érvénytelen adatbázismutató vagy feltöltési paraméterek lettek megadva. - - - Command `%1` exited with status code: %2 - A parancs (%1) ezzel az állapotkóddal lépett ki: %2 - - - Failed to upload merged database. Command `%1` exited with status code: %2 - Az egyesített adatbázis feltöltése sikertelen. A parancs (%1) ezzel az állapotkóddal lépett ki: %2 - - ReportsWidgetBrowserStatistics + + Exclude expired entries from the report + Lejárt bejegyzések kizárása a jelentésből + + + Show only entries which have URL set + Csak az URL-lel rendelkező bejegyzések megjelenítése + + + Show only entries which have browser settings in custom data + Csak azon bejegyzések megjelenítése, melyek böngészőbeállításokat tartalmaznak az egyéni adatatik között + Double-click entries to edit. Dupla kattintás a bejegyzések szerkesztéséhez. List of entry URLs - Bejegyzések webcímeinek listája + Bejegyzések URL-jeinek listája Entry has no URLs set - A bejegyzésnél nincs beállítva webcím + A bejegyzésnél nincs URL beállítva Allowed URLs - Engedélyezett webcímek + Engedélyezett URL-ek Entry has no Browser Integration settings @@ -9325,7 +8020,7 @@ Ez a kapcsoló elavult, használja helyette a --set-key-file kapcsolót. Denied URLs - Tiltott webcímek + Tiltott URL-ek (Excluded) @@ -9341,7 +8036,7 @@ Ez a kapcsoló elavult, használja helyette a --set-key-file kapcsolót. No entries with a URL, or none has browser extension settings saved. - Nincsenek webcímet tartalmazó bejegyzések, vagy egyikhez sem lettek böngészőbeállítások mentve + Nincsenek URL-t tartalmazó bejegyzések, vagy egyikhez sem lettek böngészőbeállítások mentve Title @@ -9353,7 +8048,7 @@ Ez a kapcsoló elavult, használja helyette a --set-key-file kapcsolót. URLs - Webcímek + URL-ek Edit Entry… @@ -9361,59 +8056,50 @@ Ez a kapcsoló elavult, használja helyette a --set-key-file kapcsolót. Delete Entry(s)… - Bejegyzés törlése…Bejegyzések törlése… + Bejegyzések törlése… Exclude from reports Kizárás a jelentésekből - - Expire Entry(s)… - Bejegyzés elévültté tétele…Bejegyzések elévültté tétele… - - - Only show entries that have a URL - Csak a webcímmel rendelkező bejegyzések megjelenítése - - - Only show entries that have been explicitly allowed or denied - Csak a kifejezetten engedélyezett vagy tiltott bejegyzések megjelenítése - - - Show expired entries - Lejárt bejegyzések megjelenítése - - - (Expired) - (Lejárt) - - - Delete plugin data from Entry(s)… - Bővítmény adatainak törlése a bejegyzésekből…Bővítmény adatainak törlése a bejegyzésekből… - ReportsWidgetHealthcheck - Show expired entries - Lejárt bejegyzések megjelenítése + Exclude expired entries from the report + Lejárt bejegyzések kizárása a jelentésből - (Expired) - (Lejárt) + Also show entries that have been excluded from reports + A jelentésekből kizárt bejegyzések megjelenítése. Hover over reason to show additional details. Double-click entries to edit. Vigye az egérmutatót az ok felé a további részletek megjelenítéséhez. Kattintson duplán a bejegyzésekre a szerkesztéshez. + + Bad + Password quality + Rossz + Bad — password must be changed Rossz – a jelszót meg kell változtatni + + Poor + Password quality + Silány + Poor — password should be changed Silány – a jelszót meg kellene változtatni + + Weak + Password quality + Gyenge + Weak — consider changing the password Gyenge - Megfontolandó a jelszó változtatása @@ -9462,14 +8148,6 @@ Ez a kapcsoló elavult, használja helyette a --set-key-file kapcsolót.Exclude from reports Kizárás a jelentésekből - - Expire Entry(s)… - Bejegyzés elévültté tétele…Bejegyzések elévültté tétele… - - - Show entries that have been excluded from reports - A jelentésekből kizárt bejegyzések megjelenítése - ReportsWidgetHibp @@ -9479,7 +8157,7 @@ Ez a kapcsoló elavult, használja helyette a --set-key-file kapcsolót. Perform Online Analysis - Online vizsgálat vérehajtása + Online vizsgálat végrehajtása Also show entries that have been excluded from reports @@ -9565,77 +8243,6 @@ Ez a kapcsoló elavult, használja helyette a --set-key-file kapcsolót.Exclude from reports Kizárás a jelentésekből - - Expire Entry(s)… - Bejegyzés elévültté tétele…Bejegyzések elévültté tétele… - - - - ReportsWidgetPasskeys - - Export - Exportálás - - - Import - Importálás - - - List of entry URLs - Bejegyzések webcímeinek listája - - - Title - Cím - - - Path - Útvonal - - - Username - Felhasználónév - - - URLs - Webcímek - - - Edit Entry… - Bejegyzés szerkesztése… - - - Delete Entry(s)… - Bejegyzés törlése…Bejegyzések törlése… - - - Relying Party - Közvetítő fél - - - Show expired entries - Lejárt bejegyzések megjelenítése - - - (Expired) - (Lejárt) - - - Export Confirmation - Exportálás megerősítése - - - The passkey file will be vulnerable to theft and unauthorized use, if left unsecured. Are you sure you want to continue? - A jelkulcsfájl védtelenül hagyva lopásnak és illetéktelen használatnak van kitéve. Valóban folytatja? - - - Please wait, list of entries with passkeys is being updated… - Kis türelmet, a jelkulcsot tartalmazó elemek listája frissül… - - - No entries with passkeys. - Nincsenek jelkulcsot tartalmazó elemek. - ReportsWidgetStatistics @@ -9810,14 +8417,6 @@ Ez a kapcsoló elavult, használja helyette a --set-key-file kapcsolót.No agent running, cannot list identities. Nincs működő ügynök, identitások nem listázhatóak. - - Failed to remove all SSH identities from agent. - Az ügynök összes személyazonosságának törlése sikertelen - - - All SSH identities removed from agent. - Az ügynök összes személyazonossága törölve. - SearchHelpWidget @@ -9884,10 +8483,6 @@ Ez a kapcsoló elavult, használja helyette a --set-key-file kapcsolót.Search Help Keresés a súgóban - - Save Search - Keresés mentése - Search (%1)… Search placeholder text, %1 is the keyboard shortcut @@ -9901,6 +8496,10 @@ Ez a kapcsoló elavult, használja helyette a --set-key-file kapcsolót.Limit search to selected group Keresés korlátozása a kijelölt csoportra + + Save Search + Keresés mentése + SettingsClientModel @@ -9962,10 +8561,34 @@ Ez a kapcsoló elavult, használja helyette a --set-key-file kapcsolót.Confirm when passwords are retrieved by clients Megerősítés, ha jelszavakat kérnek le a kliensek + + <html><head/><body><p><span style=" + font-family:'-apple-system','BlinkMacSystemFont','Segoe UI','Helvetica','Arial','sans-serif','Apple Color + Emoji','Segoe UI Emoji'; font-size:14px; color:#24292e; background-color:#ffffff;">This setting does + not override disabling recycle bin prompts</span></p></body></html> + + <html><head/><body><p><span style=" + font-family:'-apple-system','BlinkMacSystemFont','Segoe UI','Helvetica','Arial','sans-serif','Apple Color + Emoji','Segoe UI Emoji'; font-size:14px; color:#24292e; background-color:#ffffff;">Ez a beállítás nem +írja felül a kuka kérdéseinek letiltását.</span></p></body></html> + + Confirm when clients request entry deletion Megerősítés, ha a kliensek törlést kérnek + + <html><head/><body><p>This improves compatibility with certain applications + which search for password without unlocking the database first.</p><p>But enabling this may also + crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a + different value set in applications.)</p></body></html> + + <html><head/><body><p>Ez növeli a kompatibilitást bizonyos alkalmazásokkal, + melyek az adatbázis előzetes feloldása nélkül keresnek jelszót.</p><p>De az engedélyezése miatt összeomolhat + a kliens, ha az adatbázis nem kerül feloldásra egy bizonyos időtúllépésen belül. (Általában 25 mp, de más érték lehet + megadva az alkalmazásokban.)</p></body></html> + + Prompt to unlock database before searching Az adatbázis feloldásának kérése a keresés előtt @@ -9990,15 +8613,6 @@ Ez a kapcsoló elavult, használja helyette a --set-key-file kapcsolót.Save current changes to activate the plugin and enable editing of this section. Mentse el a módosításokat a beépülő aktiválásához és ezen rész szerkesztésének engedélyezéséhez. - - <html><head/><body><p>This setting does not override disabling recycle bin prompts </p></body></html> - <html><head/><body><p>Ez a beállítás nem bírálja felül a kukába helyezési kérdések letiltását </p></body></html> - - - <html><head/><body><p>This improves compatibility with certain applications which search for password without unlocking the database first.</p><p>But enabling this may also crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a different value set in applications.) </p></body></html> - <html><head/><body><p>Ez növeli a kompatibilitást bizonyos alkalmazásokkal, melyek az adatbázis előzetes feloldása nélkül keresnek jelszót.</p><p>De az engedélyezése miatt összeomolhat a kliens, ha az adatbázis nem kerül feloldásra egy bizonyos időtúllépésen belül. (Általában 25 mp, de más érték lehet megadva az alkalmazásokban.)</p></body></html> - - SettingsWidgetKeeShare @@ -10106,14 +8720,6 @@ Ez a kapcsoló elavult, használja helyette a --set-key-file kapcsolót. TagModel - - Clear Search - Keresés törlése - - - All Entries - Összes bejegyzés - Expired Lejártak @@ -10122,6 +8728,14 @@ Ez a kapcsoló elavult, használja helyette a --set-key-file kapcsolót.Weak Passwords Gyenge jelszavak + + All Entries + Összes bejegyzés + + + Clear Search + Keresés törlése + TagView @@ -10259,7 +8873,7 @@ Példa: JBSWY3DPEHPK3PXP URLEdit Invalid URL - Érvénytelen webcím + Érvénytelen URL @@ -10299,6 +8913,26 @@ Példa: JBSWY3DPEHPK3PXP Start storing your passwords securely in a KeePassXC database Máris elkezdhető a jelszavak titkosított tárolása a KeePassXC adatbázisban + + Create new database + Új adatbázis létrehozása + + + Open existing database + Meglévő adatbázis megnyitása + + + Import from KeePass 1 + Importálás KeePass 1-ből + + + Import from 1Password + Importálás 1Password-ből + + + Import from CSV + Importálás CSV-ből + Recent databases Legutóbb használt adatbázisok @@ -10311,18 +8945,6 @@ Példa: JBSWY3DPEHPK3PXP Welcome to KeePassXC %1 Üdvözöljük a KeePassXC %1 verzióban! - - Create Database - Adatbázis létrehozása - - - Open Database - Adatbázis megnyitása - - - Import File - Fájl importálása - WinUtils @@ -10339,8 +8961,31 @@ Példa: JBSWY3DPEHPK3PXP A globális gyorsbillentyű nem regisztrálható + + WindowsHello + + Failed to init KeePassXC crypto. + KeePassXC crypto indítása sikertelen. + + + Failed to encrypt key data. + A kulcsadatok titkosítása sikertelen. + + + Failed to get Windows Hello credential. + A Windows Hello hitelesítési adatok lekérése sikertelen. + + + Failed to decrypt key data. + A kulcsadatok visszafejtése sikertelen. + + YubiKey + + %1 No interface, slot %2 + %1 nincs csatolófelület, foglalat: %2 + General: Általános: @@ -10352,6 +8997,14 @@ Példa: JBSWY3DPEHPK3PXP YubiKeyEditWidget + + Refresh hardware tokens + Hardveres jelsorok frissítése + + + Refresh + Frissítés + Hardware key slot selection Hardverkulcsfoglalat kijelölése @@ -10384,6 +9037,10 @@ Példa: JBSWY3DPEHPK3PXP Challenge-Response set, click to change or remove Kihívás-válasz beállítva, kattintson a módosításhoz vagy eltávolításhoz + + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + <p>Ha van <a href="https://www.yubico.com/">YubiKey</a> vagy <a href="https://onlykey.io">OnlyKey</a> eszköze, akkor használhatja a további biztonság érdekében.</p><p>Kulcs szükséges, hogy az egyik foglalata <a href="https://www.yubico.com/products/services-software/challenge-response/">HMAC-SHA1 kihívás-válaszként</a> legyen beállítva.</p> + Detecting hardware keys… Hardverkulcsok felismerése… @@ -10392,25 +9049,28 @@ Példa: JBSWY3DPEHPK3PXP No hardware keys detected Nincsenek felismert hardverkulcsok. + + + YubiKeyInterface - Refresh hardware keys - Hardverkulcsok frissítése - - - <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed with <a href="https://keepassxc.org/docs/#faq-yubikey-howto">Challenge-Response</a>.</p> - <p>Ha van <a href="https://www.yubico.com/">YubiKey</a> vagy <a href="https://onlykey.io">OnlyKey</a> eszköze, akkor használhatja a további biztonság érdekében.</p><p>A kulcs megköveteli, hogy az egyik foglalata <a href="https://keepassxc.org/docs/#faq-yubikey-howto">kihívás-válaszként</a> legyen beprogramozva.</p> - - - Hardware keys found, but no slots are configured - A hardverkulcs megtalálva, de a foglalatok nincsenek beállítva + %1 Invalid slot specified - %2 + %1 Érvénytelen a megadott foglalat – %2 YubiKeyInterfacePCSC + + (PCSC) %1 [%2] Challenge-Response - Slot %3 + (PCSC) %1 [%2] kihívás-válasz – foglalat %3 + The YubiKey PCSC interface has not been initialized. A YubiKey PCSC csatolófelülete nem lett elindítva. + + Hardware key is currently in use. + A hardverkulcs jelenleg használatban van. + Could not find or access hardware key with serial number %1. Please present it to continue. Nem található vagy nem elérhető a hardverkulcs ezzel a sorozatszámmal: %1. A folytatáshoz, kérjük, tegye elérhetővé. @@ -10427,21 +9087,6 @@ Példa: JBSWY3DPEHPK3PXP Failed to complete a challenge-response, the PCSC error code was: %1 A kihívás-válasz befejezése sikertelen. A PCSC hibakód: %1 - - (NFC) %1 [%2] - Slot %3, %4 - YubiKey display fields - (NFC) %1 [%2] - %3. foglalat, %4 - - - Press - USB Challenge-Response Key interaction request - Lenyomás - - - Passive - USB Challenge-Response Key no interaction required - Passzív - YubiKeyInterfaceUSB @@ -10449,6 +9094,14 @@ Példa: JBSWY3DPEHPK3PXP Unknown Ismeretlen + + (USB) %1 [%2] Configured Slot - %3 + (USB) %1 [%2] Beállított foglalat – %3 + + + (USB) %1 [%2] Challenge-Response - Slot %3 - %4 + (USB) %1 [%2] kihívás-válasz – foglalat %3 - %4 + Press USB Challenge-Response Key interaction request @@ -10463,6 +9116,10 @@ Példa: JBSWY3DPEHPK3PXP The YubiKey USB interface has not been initialized. A YubiKey USB csatolófelülete nem lett elindítva. + + Hardware key is currently in use. + A hardverkulcs jelenleg használatban van. + Could not find hardware key with serial number %1. Please plug it in to continue. Nem található hardverkulcs ezzel a sorozatszámmal: %1. A folytatáshoz, kérjük, csatlakoztassa. @@ -10479,15 +9136,5 @@ Példa: JBSWY3DPEHPK3PXP Failed to complete a challenge-response, the specific error was: %1 A kihívás-válasz befejezése sikertelen. A pontos hiba: %1 - - %1 [%2] - Slot %3 - YubiKey NEO display fields - %1 [%2] – %3. foglalat - - - %1 [%2] - Slot %3, %4 - YubiKey display fields - %1 [%2] – %3. foglalat, %4 - \ No newline at end of file diff --git a/share/translations/keepassxc_id.ts b/share/translations/keepassxc_id.ts index 585cb1a73..b789c3079 100644 --- a/share/translations/keepassxc_id.ts +++ b/share/translations/keepassxc_id.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 didistribusikan di bawah Lisensi Publik Umum GNU (GPL) versi 2 atau (sesuai pilihan Anda) versi 3. + KeePassXC didistribusikan di bawah Lisensi Publik Umum GNU (GPL) versi 2 atau (sesuai pilihan anda) versi 3. Project Maintainers: @@ -39,7 +39,7 @@ Include the following information whenever you report a bug: - Sertakan informasi berikut setiap kali Anda melaporkan kutu: + Sertakan informasi berikut setiap anda melaporkan bug: Copy to clipboard @@ -54,7 +54,7 @@ Non-existing/inaccessible executable path. Please double-check the client is legit. - Non-existing/inaccessible executable path. Please double-check the client is legit. + Buang nama lampiran <html><head/><body><p><span style=" font-weight:600;">%1 </span>is requesting access to the following entries:</p></body></html> @@ -70,7 +70,7 @@ Executable - Executable + Dapat dieksekusi Command Line @@ -80,10 +80,6 @@ Details Detail - - Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. - Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. - Remember Ingat @@ -92,9 +88,13 @@ Allow Selected Izinkan Yang Dipilih + + Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. + Keputusan Anda akan diingat selama klien meminta DAN KeePassXC sedang berjalan. + Deny All && Future - Deny All && Future + Abaikan Semua && Ke Depannya Allow All && &Future @@ -105,7 +105,7 @@ AccessControlDialog::DenyButton Deny for this program - Tolakj untuk program ini + Tolak untuk program ini @@ -122,10 +122,6 @@ Use OpenSSH Gunakan OpenSSH - - Use both agents - Gunakan kedua agen - SSH_AUTH_SOCK override Timpa SSH_AUTH_SOCK @@ -154,6 +150,10 @@ SSH Agent connection is working! Koneksi Agen SSH berhasil! + + Use both agents + Gunakan kedua agen + ApplicationSettingsWidget @@ -169,10 +169,6 @@ Security Keamanan - - This setting cannot be enabled when minimize on unlock is enabled. - Pengaturan ini tidak dapat difungsikan ketika diminimumkan saat buka kunci difungsikan. - Access error for config file %1 Galat akses untuk berkas konfigurasi %1 @@ -215,51 +211,23 @@ You must restart the application to set the new language. Would you like to restart now? - Anda harus memulai ulang aplikasi untuk menerapkan bahasa. Apakah Anda ingin memulai ulang sekarang? + Anda harus memulai ulang aplikasi untuk menerapkan bahasa. Apakah anda ingin memuat ulang sekarang? + + + Reset Settings? + Atur Ulang Pengaturan? + + + Are you sure you want to reset all general and security settings to default? + Apakah anda yakin ingin mengatur ulang pengaturan umum dan keamanan ke nilai bawaan? Select backup storage directory Pilih direktori penyimpanan cadangan - Confirm Reset - Konfirmasi Reset - - - Are you sure you want to reset all settings to default? - Apakah Anda yakin ingin mereset semua pengaturan ke kondisi bawaan? - - - Import KeePassXC Settings - Impor Pengaturan KeePassXC - - - Failed to import settings from %1, not a valid settings file. - Gagal mengimpor pengaturan dari %1, bukan berkas pengaturan yang valid. - - - Export KeePassXC Settings - Ekspor Pengaturan KeePassXC - - - Small - - - - Normal - - - - Medium - - - - Large - - - - Custom - + This setting cannot be enabled when minimize on unlock is enabled. + Pengaturan ini tidak dapat difungsikan ketika diminimumkan saat buka kunci difungsikan. @@ -292,10 +260,6 @@ Remember previously used databases Ingat basis data yang sebelumnya digunakan - - recent files - berkas baru-baru ini - Load previously open databases on startup Muat basis data yang sebelumnya terbuka saat memulai @@ -312,6 +276,25 @@ Include beta releases when checking for updates Termasuk rilis beta saat memeriksa pembaruan + + On database unlock, show entries that + Pada pembukaan kunci basis data, tampilkan entri yang + + + have expired + On database unlock, show entries that... + telah kedaluwarsa + + + days + On database unlock, show entries that will expire within %1 days + hari + + + will expire within + On database unlock, show entries that... + akan kedaluwarsa dalam masa + File Management Manajemen Berkas @@ -336,10 +319,22 @@ Backup database file before saving Cadangkan basis data sebelum disimpan + + Backup destination + Destinasi cadangan + + + Specifies the database backup file location. Occurrences of "{DB_FILENAME}" are replaced with the filename of the saved database without extension. {TIME:<format>} is replaced with the backup time, see https://doc.qt.io/qt-5/qdatetime.html#toString. <format> defaults to format string "dd_MM_yyyy_hh-mm-ss". + Menentukan lokasi berkas cadangan basis data. Kemunculan "{DB_FILENAME}" diganti dengan nama basis data berkas yang disimpan tanpa ekstensi. {TIME:<format>} diganti dengan waktu pencadangan, lihat https://doc.qt.io/qt-5/qdatetime.html#toString. <format> standar untuk memformat untai "dd_MM_yyyy_hh-mm-ss". + {DB_FILENAME}.old.kdbx {DB_FILENAME}.old.kdbx + + Choose... + Pilih... + Use alternative saving method (may solve problems with Dropbox, Google Drive, GVFS, etc.) Gunakan metode penyimpanan alternatif (mungkin akan mengatasi masalah dengan Dropbox, Google Drive, GVFS, dll.) @@ -417,10 +412,6 @@ Toolbar button style: Gaya tombol bilah alat: - - Show passwords in color - Tampilkan kata sandi dalam warna - Use monospaced font for notes Gunakan fon monospace untuk catatan @@ -507,69 +498,12 @@ Ingat entri yang terakhir diketikkan untuk: - On database unlock, show entries that will expire within - Pada basis data tidak terkunci, tampilkan entri yang akan kedaluwarsa selama + recent files + berkas baru-baru ini - On database unlock, show entries that will expire within - Pada basis data tidak terkunci, tampilkan entri yang akan kedaluwarsa selama - - - days - number of days warning for password expiration - hari - - - Destination format: - Format yang diinginkan: - - - <html><head/><body><p><span style=" font-weight:600;">{DB_FILENAME}</span> is replaced with the filename of the saved database without extension</p><p><span style=" font-weight:600;">{TIME:&lt;format&gt;}</span> is replaced with the specified time format (default: dd_MM_yyyy_hh-mm-ss)</p><p>See the User Guide for more details</p></body></html> - <html><head/><body><p><span style=" font-weight:600;">{DB_FILENAME}</span> telah diganti dengan nama file dari database yang disimpan tanpa ekstensi </p><p><span style=" font-weight:600;">{TIME:&lt;format&gt;}</span> telah diganti dengan format waktu yang ditentukan (bawaan: dd_MM_yyyy_hh-mm-ss)</p><p> Lihat Panduan Pengguna untuk detail lebih lanjut </p></body></html> - - - Choose folder... - Pilih folder... - - - Show confirmation before moving entries to recycle bin - Tampilkan konfirmasi sebelum memindahkan entri ke tempat sampah - - - Copy data on double clicking field in entry view - Menyalin data dengan mengklik dua kali kolom di tampilan entri - - - Show toolbar - Tampilkan bilah alat - - - Show the menu bar by pressing the Alt key - Menampilkan bilah menu dengan menekan tombol Alt - - - Show menubar - Menampilkan bilah menu - - - Import settings… - Impor pengaturan... - - - Export settings… - Ekspor pengaturan... - - - Open browser on double clicking URL field in entry view - Buka peramban dengan mengklik dua kali kolom URL di tampilan entri - - - Font size: - - - - Font size selection - + Show passwords in color + Tampilkan kata sandi dalam warna @@ -624,6 +558,10 @@ Lock databases after minimizing the window Kunci basis data setelah meminimalkan jendela + + Require password repeat when it is visible + Membutuhkan pengulangan sandi ketika ruas bisa dilihat + Hide passwords when editing them Sembunyikan sandi saat penyuntingan @@ -636,6 +574,18 @@ Hide passwords in the entry preview panel Sembunyikan sandi di panel pratinjau entri + + Hide entry notes by default + Sembunyikan catatan secara bawaan + + + Move entries to recycle bin without confirmation + Hapus entri ke keranjang sampah tanpa konfirmasi + + + Enable double click to copy the username/password entry columns + Klik dua kali untuk menyalin kolom entri nama pengguna/sandi + Privacy Privasi @@ -648,24 +598,12 @@ Hide TOTP in the entry preview panel Sembunyikan TOTP di panel pratinjau entri - - Lock databases when switching user - Mengunci basis data saat berpindah pengguna - - - Lock Options - Opsi Penguncian - - - Hide notes in the entry preview panel - Sembunyikan catatan di panel pratinjau entri - AutoType The requested Auto-Type sequence cannot be used due to an error: - The requested Auto-Type sequence cannot be used due to an error: + Urutan Ketik-Otomatis yang diminta tidak dapat digunakan karena galat. Auto-Type Error @@ -677,11 +615,11 @@ KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. - KeePassXC membutuhkan izin Aksesibilitas untuk menjalankan Ketik-Otomatis entri. Jika Anda sudah memberikan izin, Anda perlu memulai ulang KeePassXC. + KeePassXC membutuhkan izin Aksesibilitas untuk menjalankan Ketik-Otomatis entri. Jika anda sudah memberikan izin, anda perlu memulai ulang KeePassXC. KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. - KeePassXC membutuhkan izin Aksesibilitas dan Perekaman Layar untuk menjalankan Ketik-Otomatis secara global. Perekaman Layar dibutuhkan untuk mengakses judul jendela dari entri terkait. Jika Anda sudah memberikan izin, Anda perlu memulai ulang KeePassXC. + KeePassXC membutuhkan izin Aksesibilitas dan Perekaman Layar untuk menjalankan Ketik-Otomatis secara global. Perekaman Layar dibutuhkan untuk mengakses judul jendela dari entri terkait. Jika anda sudah memberikan izin, anda perlu memulai ulang KeePassXC. Invalid entry provided @@ -704,12 +642,26 @@ Terdeteksi tundaan sangat lama, maks adalah %1: %2 - Entry does not have attribute for PICKCHARS: %1 - Entri tidak memiliki atribut untuk PICKCHARS: %1 + Invalid conversion type: %1 + Tipe konversi tidak valid: %1 + + + Invalid conversion syntax: %1 + Sintaks konversi tidak valid: %1 + + + Invalid regular expression syntax %1 +%2 + Sintaks ekspresi reguler %1 tidak valid +%2 Invalid placeholder: %1 - Invalid placeholder: %1 + Placeholder invalid: %1 + + + Entry does not have attribute for PICKCHARS: %1 + Entri tidak memiliki atribut untuk PICKCHARS: %1 @@ -752,6 +704,10 @@ AutoTypePlatformX11 + + Trying to send invalid keysym. + Mencoba mengirim keysym yang tidak valid. + Sequence aborted: Caps Lock is on Urutan digugurkan: Caps Lock menyala @@ -764,10 +720,6 @@ Unable to get valid keycode for key: Tidak bisa memperoleh kode tombol yang valid untuk tombol: - - Trying to send invalid keyboard symbol. - Mencoba mengirim simbol keyboard yang tidak valid. - AutoTypeSelectDialog @@ -786,12 +738,12 @@ Ctrl+1 - Type username<br/> Ctrl+2 - Type password<br/> Ctrl+3 - Type TOTP<br/> Ctrl+4 - Use Virtual Keyboard (Windows Only)</p> - <p>You can use advanced search queries to find any entry in your open databases. The following shortcuts are useful:<br/> -Ctrl+F - Toggle database search<br/> -Ctrl+1 - Type username<br/> -Ctrl+2 - Type password<br/> -Ctrl+3 - Type TOTP<br/> -Ctrl+4 - Use Virtual Keyboard (Windows Only)</p> + <p>Anda dapat menggunakan kueri pencarian lanjutan untuk menemukan entri pada basis data terbuka. Gunakan pintasan berikut:<br/> +Ctrl+F - Tombol pencarian basis data<br/> +Ctrl+1 - Ketik nama pengguna<br/> +Ctrl+2 - Ketik kata sandi<br/> +Ctrl+3 - Ketik TOTP<br/> +Ctrl+4 - Gunakan Papan Ketik Virtual (Khusus Windows)</p> Search all open databases @@ -823,11 +775,11 @@ Ctrl+4 - Use Virtual Keyboard (Windows Only)</p> Copy Username - Salinkan Nama Pengguna + Salin Nama Pengguna Copy Password - Salinkan Kata Sandi + Salin Kata Sandi Copy TOTP @@ -872,13 +824,13 @@ Ctrl+4 - Use Virtual Keyboard (Windows Only)</p> Disable for this site Nonaktifkan untuk situs ini - - Undo - Urungkan - BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + Entri Penyimpanan KeePassXC-Browser + Ok Ok @@ -893,82 +845,25 @@ Please select the correct database for saving credentials. Ada beberapa basis data yang terbuka. Silakan pilih basis data yang digunakan untuk menyimpan kredensial. - - KeePassXC - Select Database - KeePassXC - Pilih Basis Data - - - - BrowserPasskeysConfirmationDialog - - Cancel - Batal - - - Update - Perbarui - - - Authenticate - Autentikasi - - - Register new - Daftarkan baru - - - Register - Daftarkan - - - Timeout in <b>%n</b> seconds... - Waktu habis dalam <b>%n</b> detik… - - - Relying Party: %1 - Pihak yang Mengandalkan: %1 - - - Username: %1 - Nama pengguna: %1 - - - KeePassXC - Passkey credentials - KeePassXC - Kunci Akses Digital - - - Add to existing entry - Tambahkan ke entri yang telah ada - - - Existing passkey found. -Do you want to register a new passkey for: - Kunci akses yang ada ditemukan. -Anda ingin mendaftarkan kunci akses baru: - - - Select the existing passkey and press Update to replace it. - Pilih kunci akses yang ada, lalu tekan Perbarui untuk menggantinya. - - - Authenticate passkey credentials for: - Mengautentikasi kredensial kunci akses: - - - Do you want to register a passkey for: - Apakah Anda ingin mendaftarkan kunci akses: - BrowserService + + KeePassXC: Create a new group + KeePassXC: Buat grup baru + A request for creating a new group "%1" has been received. Do you want to create this group? Permintaan untuk membuat grup "%1" telah diterima. -Apakah Anda ingin membuat grup ini? +Apakah anda ingin membuat grup ini? + + KeePassXC: New key association request + KeePassXC: Permintaan asosiasi kunci baru + You have received an association request for the following database: %1 @@ -985,77 +880,81 @@ chrome-laptop. Save and allow access Simpan dan izinkan akses + + KeePassXC: Overwrite existing key? + KeePassXC: Timpa kunci yang ada? + 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 ulang? +Apakah anda ingin menimpanya ulang? + + + KeePassXC: Update Entry + KeePassXC: Perbarui Entri Do you want to update the information in %1 - %2? - Apakah Anda ingin memperbarui informasi di dalam %1 - %2? + Apakah anda ingin memperbarui informasi di dalam %1 - %2? + + + KeePassXC: Delete entry + KeePassXC: Hapus entri A request for deleting entry "%1" has been received. Do you want to delete the entry? - A request for deleting entry "%1" has been received. -Do you want to delete the entry? + Pemintaan untuk menghapus entri "%1" sudah diterima. +Apakah ingin menghapus entri? - %1 (Passkey) - %1 (Kunci akses) + Converting attributes to custom data… + Mengkonversi atribut ke data khusus... - KeePassXC - Create a new group - KeePassXC - Buat grup baru + Abort + Batal - Disable - Nonaktifkan + KeePassXC: Converted KeePassHTTP attributes + KeePassXC: Konversi atribut KeePassHTTP - KeePassXC - Overwrite existing key? - KeePassXC - Timpa kunci yang sudah ada? + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + Berhasil mengonversi atribut dari %1 entri. +Memindahkan %2 ke data khusus. + + + Successfully moved %n keys to custom data. + Berhasil memindahkan %n kunci ke data khusus. - KeePassXC - Update Entry - KeePassXC - Perbarui Entri + KeePassXC: No entry with KeePassHTTP attributes found! + KeePassXC: Tidak ada entri dengan atribut KeePassHTTP yang ditemukan! - KeePassXC - Delete entry - KeePassXC - Hapus Entry + The active database does not contain an entry with KeePassHTTP attributes. + Basis Data yang aktif tidak berisi entri dengan atribut KeePassHTTP. - KeePassXC - New key association request - KeePassXC - Permintaan asosiasi kunci baru + Don't show this warning again + Jangan tampilkan peringatan ini lagi - Passkey - Kunci akses + KeePassXC: Legacy browser integration settings detected + KeePassXC: Mendeteksi pengaturan integrasi peramban lama - KeePassXC - Passkey credentials - KeePassXC - Kunci Akses Digital - - - Register a new passkey to this entry: - Daftarkan kunci akses baru ke entri ini: - - - KeePassXC - Update passkey - KeePassXC - Perbarui kunci akses - - - Entry already has a passkey. -Do you want to overwrite the passkey in %1 - %2? - Entri sudah memiliki kunci akses. -Apakah Anda ingin menimpa kunci akses di %1 - %2? - - - Register - Daftarkan + 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? + Pengaturan KeePassXC-Browser Anda perlu dipindahkan ke dalam pengaturan basis data. +Hal ini diperlukan untuk mempertahankan koneksi peramban Anda saat ini. +Apakah Anda ingin memindahkan pengaturan yang ada sekarang? @@ -1076,6 +975,10 @@ Apakah Anda ingin menimpa kunci akses di %1 - %2? General Umum + + Browsers installed as snaps are currently not supported. + Peramban yang dipasang sebagai snap saat ini tidak didukung. + Enable integration for these browsers: Aktifkan integrasi untuk peramban ini: @@ -1123,7 +1026,7 @@ Apakah Anda ingin menimpa kunci akses di %1 - %2? Match URL scheme (e.g., https://example.com) - Match URL scheme (e.g., https://example.com) + Cocokkan skema URL (misalnya, https://example.com) Only returns the best matches for a specific URL instead of all entries for the whole domain. @@ -1195,7 +1098,7 @@ Apakah Anda ingin menimpa kunci akses di %1 - %2? Use a custom proxy location if you installed a proxy manually. - Gunakan lokasi proksi khusus jika Anda memasang proksi secara manual. + Gunakan lokasi proksi khusus jika anda memasang proksi secara manual. Use a custom proxy location: @@ -1247,6 +1150,26 @@ Apakah Anda ingin menimpa kunci akses di %1 - %2? Custom extension ID ID ekstensi khusus + + Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 + Karena adanya sandbox Snap, anda harus menjalankan skrip untuk mengaktifkan integrasi peramban.<br />Anda bisa mendapatkan skrip ini dari %1 + + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 + Membutuhkan KeePassXC-Browser agar integrasi peramban bisa bekerja. <br />Silakan unduh untuk %1 dan %2 dan %3. %4 + + + Please see special instructions for browser extension use below + Lihat instruksi untuk penggunaan browser extension + + + <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. + <b>Error:</b>Lokasi proxy khusus tidak dapat ditemukan!<br/>Integrasi browser TIDAK DAPAT BEKERJA tanpa aplikasi proxy. + + + <b>Warning:</b> The following options can be dangerous! + <b>Peringatan:</b> Opsi berikut bisa berbahaya! + Executable Files Berkas Executable @@ -1263,52 +1186,12 @@ Apakah Anda ingin menimpa kunci akses di %1 - %2? Select native messaging host folder location Pilih lokasi folder hos perpesanan bawaan - - Allow keepassxc-proxy to list all entries with their title, URL and UUID in connected databases. - Izinkan keepassxc-proksi untuk menampilkan semua entri dengan judul, URL, dan UUID-nya di basis data yang terhubung. - - - Allow limited access to all entries in connected databases (ignores site access restrictions) - Izinkan akses terbatas ke semua entri di basis data yang terhubung (abaikan pembatasan akses situs) - - - <b>Warning:</b> Only adjust these settings if necessary. - <b>Peringatan:</b> Hanya setel pengaturan ini bila perlu. - - - The custom proxy location does not exist. - Lokasi proksi ubahan tidak ada. - - - <b>Error:</b> The custom proxy location does not exist. Correct this in the advanced settings tab. - <b>Galat:</b> Lokasi proksi ubahan tidak ada. Perbaiki ini dalam tab pengaturan tingkat lanjut. - - - <b>Error:</b> The installed proxy executable is missing from the expected location: %1<br/>Please set a custom proxy location in the advanced settings or reinstall the application. - <b>Galat:</b> Executable proksi yang terpasang hilang dari lokasi yang diharapkan: %1<br/>Harap atur suatu lokasi proksi ubahan dalam pengaturan tingkat lanjut atau pasang ulang aplikasi. - - - Allows using insecure http://localhost with passkeys for testing purposes. - Mengizinkan penggunaan http://localhost yang tidak aman dengan kunci akses untuk tujuan pengujian. - - - Allow using localhost with passkeys - Mengizinkan penggunaan host lokal dengan kunci akses - - - KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. - KeePassXC-Browser diperlukan agar integrasi peramban dapat bekerja. <br />Unduh untuk %1 dan %2 dan %3. - - - Browsers installed using Snap or Flatpak are not supported with exception to Firefox installed using Snap. - - CloneDialog Clone Entry Options - Clone Entry Options + Pilihan Gandakan Entri Append ' - Clone' to title @@ -1325,6 +1208,14 @@ Apakah Anda ingin menimpa kunci akses di %1 - %2? CsvImportWidget + + Import CSV fields + Impor ruas CSV + + + filename + nama berkas + size, rows, columns ukuran, baris, kolom @@ -1335,7 +1226,7 @@ Apakah Anda ingin menimpa kunci akses di %1 - %2? Password - Sandi + Kata Sandi Username @@ -1433,43 +1324,50 @@ Apakah Anda ingin menimpa kunci akses di %1 - %2? Column %1 Kolom %1 + + Imported from CSV file + Diimpor dari berkas CSV + + + Original data: + Data original: + + + Error(s) detected in CSV file! + Mendeteksi kesalahan di dalam berkas CSV! + [%n more message(s) skipped] [%n pesan dilewati] - Failed to parse CSV file: %1 - Gagal untuk mengurai file CSV: %1 + Error + Galat - Imported from CSV file: %1 - Diimpor dari file CSV: %1 - - - No Title Selected - Tidak ada Judul yang Dipilih - - - No title column was selected, entries will be hard to tell apart. -Are you sure you want to import? - Tidak ada kolom judul yang dipilih, entri akan sulit dibedakan. -Apakah Anda yakin ingin mengimpor? - - - Tags - Tag + CSV import: writer has errors: +%1 + Impor CSV: galat penulis: +%1 CsvParserModel + + %1, %2, %3 + file info: bytes, rows, columns + %1, %2, %3 + + + %n byte(s) + %n byte + %n row(s) - CSV row count %n baris %n column(s) - CSV column count %n kolom @@ -1478,7 +1376,7 @@ Apakah Anda yakin ingin mengimpor? Passwords Root group name - Sandi + Kata Sandi File %1 does not exist. @@ -1522,14 +1420,6 @@ Lokasi cadangan basis data ada di %2 Recycle Bin Keranjang Sampah - - Database file read error. - - - - No file path was provided. - - DatabaseOpenDialog @@ -1552,10 +1442,30 @@ Lokasi cadangan basis data ada di %2 Password field Ruas sandi + + Enter Additional Credentials (if any): + Masukkan Kredensial Tambahan (jika ada): + + + Key File: + Berkas Kunci: + + + Key file help + Bantuan berkas kunci + Hardware key slot selection Pemilihan slot kunci perangkat keras + + Hardware Key: + Kunci Perangkat Keras: + + + Hardware key help + Bantuan kunci perangkat keras + Key file to unlock the database Berkas kunci untuk membuka basis data @@ -1568,6 +1478,14 @@ Lokasi cadangan basis data ada di %2 Browse… Telusuri… + + Refresh hardware tokens + Segarkan token perangkat keras + + + Refresh + Segarkan + Unlock Database Buka Kunci Basis Data @@ -1582,7 +1500,7 @@ Lokasi cadangan basis data ada di %2 Please present or touch your YubiKey to continue… - Please present or touch your YubiKey to continue… + Siapkan atau sentuh YubiKey untuk melanjutkan... Database Version Mismatch @@ -1596,13 +1514,13 @@ You can try to open it anyway, but it may be incomplete and saving any changes may incur data loss. We recommend you update your KeePassXC installation. - The database you are trying to open was most likely -created by a newer version of KeePassXC. + Database yang Anda coba buka kemungkinan besar +dibuat dengan versi KeePassXC yang lebih baru. -You can try to open it anyway, but it may be incomplete -and saving any changes may incur data loss. +Anda dapat mencoba membukanya, tetapi mungkin tidak lengkap +dan menyimpan perubahan apa pun dapat menimbulkan kehilangan data. -We recommend you update your KeePassXC installation. +Kami sarankan Anda memperbarui instalasi KeePassXC Anda. Open database anyway @@ -1629,6 +1547,10 @@ Untuk mencegah munculnya kesalahan ini, Anda harus ke "Pengaturan Basis Dat Retry with empty password Ulangi dengan sandi kosong + + Failed to authenticate with Touch ID + Gagal mengautentikasi dengan Touch ID + Failed to open key file: %1 Gagal untuk membuka berkas kunci: %1 @@ -1661,69 +1583,41 @@ Untuk mencegah munculnya kesalahan ini, Anda harus ke "Pengaturan Basis Dat Cannot use database file as key file Tidak bisa menggunakan berkas basis data sebagai berkas kunci + + You cannot use your database file as a key file. +If you do not have a key file, please leave the field empty. + Anda tidak bisa menggunakan berkas basis data Anda sebagai berkas kunci, +Jika Anda tidak memiliki berkas kunci, biarkan ruas tetap kosong. + + + Detecting hardware keys… + Mendeteksi kunci perangkat keras… + + + No hardware keys detected + Tidak mendeteksi kunci perangkat keras + + + Select hardware key… + Pilih kunci perangkat keras… + + + <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information…</p> + <p>Selain kata sandi, Anda dapat menggunakan file rahasia untuk meningkatkan keamanan database Anda. File ini dapat dihasilkan di pengaturan keamanan database Anda.</p><p>Ini <strong>bukan</strong> file database *.kdbx Anda!<br>Jika Anda tidak memiliki file kunci, biarkan bidang ini kosong.</p><p>Klik untuk informasi lebih lanjut...</p> + + + <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +<p>Click for more information…</p> + <p>Anda dapat menggunakan kunci keamanan perangkat keras seperti <strong>YubiKey</strong> atau <strong>OnlyKey</strong> dengan slot yang dikonfigurasi untuk HMAC-SHA1.</p> +<p>Klik untuk informasi lebih lanjut...</p> + authenticate to access the database otentikasi untuk mengakses basis data - Failed to authenticate with Quick Unlock: %1 - Gagal mengautentikasi dengan Buka Kunci Cepat: %1 - - - Select Key File: - Pilih Berkas Kunci: - - - <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!</p> - <p> Selain kata sandi, Anda dapat menggunakan berkas rahasia untuk meningkatkan keamanan basis data Anda. Berkas ini dapat dibuat dalam pengaturan keamanan basis data Anda.</p><p>Ini <strong> bukanlah </strong> berkas basis data *.kdbx anda! </p> - - - Use hardware key [Serial: %1] - Gunakan kunci perangkat keras [Serial: %1] - - - Use hardware key - Gunakan kunci perangkat keras - - - Your database file is NOT a key file! -If you don't have a key file or don't know what that is, you don't have to select one. - Berkas basis data Anda BUKAN berkas kunci! -Jika Anda tidak memiliki berkas kunci atau tidak paham apa itu berkas kunci, Anda tidak perlu memilihnya. - - - KeePassXC database file selected - Berkas basis data KeePassXC dipilih - - - The file you selected looks like a database file. -A database file is NOT a key file! - -Are you sure you want to continue with this file?. - Berkas yang Anda pilih terlihat seperti berkas basis data. -Berkas basis data BUKAN berkas kunci! - -Apakah Anda yakin ingin melanjutkan dengan berkas ini? - - - No hardware keys found. - Tidak ditemukan kunci perangkat keras. - - - Refresh Hardware Keys - Segarkan kunci perangkat keras. - - - Click to add a key file. - Klik untuk tambahkan berkas kunci. - - - <a href="#" style="text-decoration: underline">I have a key file</a> - <a href="#" style="text-decoration: underline">Aku punya berkas kunci</a> - - - Hardware keys found, but no slots are configured. - + Failed to authenticate with Windows Hello: %1 + Gagal mengautentikasi dengan Windows Hello: %1 @@ -1735,6 +1629,10 @@ Apakah Anda yakin ingin melanjutkan dengan berkas ini? DatabaseSettingsDialog + + Advanced Settings + Pengaturan Lanjutan + General Umum @@ -1759,22 +1657,6 @@ Apakah Anda yakin ingin melanjutkan dengan berkas ini? Maintenance Pemeliharaan - - KeeShare - KeeShare - - - Secret Service Integration - Integrasi Layanan Rahasia - - - Remote Sync - Sinkronisasi Jarak Jauh - - - Database Settings: %1 - Pengaturan basis data: %1 - DatabaseSettingsWidgetBrowser @@ -1782,6 +1664,18 @@ Apakah Anda yakin ingin melanjutkan dengan berkas ini? KeePassXC-Browser settings Pengaturan KeePassXC-Browser + + Convert KeePassHTTP data + Konversi data KeePassHTTP + + + Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data + Konversikan atribut KeePassHTTP lama ke data kustom yang kompatibel dengan KeePassXC-Browser + + + Refresh database root group ID + Segarkan ID grup root basis data + Disconnect all browsers Putuskan koneksi semua peramban @@ -1790,10 +1684,6 @@ Apakah Anda yakin ingin melanjutkan dengan berkas ini? Forget all site-specific settings on entries Lupakan semua pengaturan spesifik situs pada entri - - Refresh database root group ID - Segarkan ID grup root basis data - Stored keys Kunci tersimpan @@ -1817,7 +1707,7 @@ Apakah Anda yakin ingin melanjutkan dengan berkas ini? Do you really want to delete the selected key? This may prevent connection to the browser plugin. - Apakah Anda yakin ingin menghapus kunci yang dipilih? + Apakah anda yakin ingin menghapus kunci yang dipilih? Tindakan ini akan memutus koneksi ke pengaya peramban. @@ -1839,13 +1729,21 @@ Tindakan ini akan memutus koneksi ke pengaya peramban. Do you really want to disconnect all browsers? This may prevent connection to the browser plugin. - Apakah Anda ingin memutus koneksi semua peramban? + Apakah anda ingin memutus koneksi semua peramban? Tindakan ini akan memutus koneksi ke pengaya peramban. + + KeePassXC: No keys found + KeePassXC: Tidak ada kunci yang ditemukan + No shared encryption keys found in KeePassXC settings. TIdak ada kunci enkripsi bersama yang ditemukan 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. @@ -1853,7 +1751,7 @@ Tindakan ini akan memutus koneksi ke pengaya peramban. Do you really want forget all site-specific settings on every entry? Permissions to access entries will be revoked. - Apakah Anda ingin melupakan semua pengaturan spesifik situs pada semua entri? + Apakah anda ingin melupakan semua pengaturan spesifik situs pada semua entri? Izin untuk mengakses entri akan dicabut. @@ -1864,14 +1762,32 @@ Izin untuk mengakses entri akan dicabut. 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 convert all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + Apakah Anda yakin ingin mengubah semua data integrasi peramban lama ke standard terbaru? +Hal ini diperlukan untuk mempertahankan kompatibilitas dengan pengaya peramban. + Refresh database ID Segarkan ID basis data @@ -1882,26 +1798,6 @@ This is only necessary if your database is a copy of another and the browser ext Apakah Anda yakin ingin menyegarkan ID basis data? Ini hanya diperlukan jika basis data Anda adalah salinan dari basis data yang lain dan ekstensi peramban tidak bisa tersambung. - - Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data - Konversikan atribut KeePassHTTP lama ke data kustom yang kompatibel dengan KeePassXC-Browser - - - No keys found - Kunci tidak ditemukan - - - Removed keys from database - Kunci terhapus dari basis data - - - Removed permissions - Izin terhapus - - - No entry with permissions found! - Tidak ditemukan entri yang memiliki izin! - DatabaseSettingsWidgetDatabaseKey @@ -1941,18 +1837,6 @@ Apakah Anda tetap ingin melanjutkan tanpa mengatur sandi? Failed to change database credentials Gagal mengubah kredensial basis data - - Weak password - Kata sandi lemah - - - This is a weak password! For better protection of your secrets, you should choose a stronger password. - Ini adalah kata sandi yang lemah! Untuk perlindungan yang lebih baik terhadap rahasia Anda, Anda harus memilih kata sandi yang lebih kuat. - - - The provided password does not meet the minimum quality requirement. - Kata sandi yang dimasukkan tidak memenuhi persyaratan standar minimum. - DatabaseSettingsWidgetEncryption @@ -1960,6 +1844,14 @@ Apakah Anda tetap ingin melanjutkan tanpa mengatur sandi? Decryption Time: Waktu Dekripsi: + + Change existing decryption time + Ubah waktu dekripsi yang ada + + + Change + Ubah + Decryption time in seconds Waktu dekripsi dalam detik @@ -1978,11 +1870,11 @@ Apakah Anda tetap ingin melanjutkan tanpa mengatur sandi? Format cannot be changed: Your database uses KDBX 4 features - Format cannot be changed: Your database uses KDBX 4 features + Format tidak dapat diubah: Database Anda menggunakan fitur KDBX 4 Unless you need to open your database with other programs, always use the latest format. - Unless you need to open your database with other programs, always use the latest format. + Selalu gunakan format terbaru, kecuali Anda perlu membuka database Anda dengan program lain. Encryption Algorithm: @@ -2040,6 +1932,11 @@ Apakah Anda tetap ingin melanjutkan tanpa mengatur sandi? KDBX 3 KDBX 3 + + unchanged + Database decryption time is unchanged + tidak berubah + Number of rounds too high Key transformation rounds @@ -2049,9 +1946,9 @@ Apakah Anda tetap ingin melanjutkan tanpa mengatur sandi? You are using a very high number of key transform rounds with Argon2. If you keep this number, your database may take hours, days, or even longer to open. - You are using a very high number of key transform rounds with Argon2. + Anda menggunakan jumlah Transform rounds yang sangat tinggi dengan Argon2. -If you keep this number, your database may take hours, days, or even longer to open. +Jika Anda menyimpan nomor ini, database Anda mungkin membutuhkan waktu berjam-jam, berhari-hari, atau bahkan lebih lama untuk dibuka. Understood, keep number @@ -2070,9 +1967,9 @@ If you keep this number, your database may take hours, days, or even longer to o You are using a very low number of key transform rounds with AES-KDF. If you keep this number, your database will not be protected from brute force attacks. - You are using a very low number of key transform rounds with AES-KDF. + Anda menggunakan jumlah Transform rounds yang sangat rendah dengan AES-KDF. -If you keep this number, your database will not be protected from brute force attacks. +Jika Anda menyimpan nomor ini, database Anda tidak akan dilindungi dari serangan brute force. KDF unchanged @@ -2090,19 +1987,7 @@ If you keep this number, your database will not be protected from brute force at thread(s) Threads for parallel execution (KDF settings) - Untaian(s) - - - Encryption Settings: - Pengaturan Enkripsi: - - - Basic - Dasar - - - Advanced - Tingkat Lanjut + thread @@ -2189,7 +2074,7 @@ If you keep this number, your database will not be protected from brute force at Do you want to delete the current recycle bin and all its contents? This action is not reversible. - Apakah Anda yakin ingin menghapus keranjang sampah dan semua isinya? + Apakah anda yakin ingin menghapus keranjang sampah dan semua isinya? Tidakan ini tidak bisa diurungkan. @@ -2234,70 +2119,6 @@ dan jangan menghapusnya dari basis data. Entri yang dihapus dari kotak sampah dipindahkan dari basis data. - - Autosave delay since last change - Jeda penyimpanan otomatis sejak perubahan terakhir - - - Autosave delay - Jeda penyimpanan otomatis - - - Autosave delay since last change in minutes - Jeda penyimpanan otomatis sejak perubahan terakhir dalam menit - - - min - min - - - Autosave delay since last change checkbox - Kotak centang jeda penyimpanan otomatis sejak perubahan terakhir - - - Public Database Metadata - Metadata Basis data Publik - - - Warning: the following settings are not encrypted. - Peringatan: pengaturan berikut ini tidak terenkripsi. - - - Display name: - Nama tampilan: - - - Publically visible display name used on the unlock dialog - Nama tampilan yang dapat dilihat oleh publik yang digunakan pada obrolan terbuka - - - Database public display name - Nama tampilan publik basis data - - - Display color: - Warna tampilan: - - - Publically visible color used on the unlock dialog - Warna yang terlihat publik yang digunakan pada obrolan terbuka - - - Database public display color chooser - Pemilih warna tampilan publik basis data - - - Clear - Bersihkan - - - Display icon: - Ikon tampilan: - - - Select Database Icon - Pilih ikon Basis data - DatabaseSettingsWidgetKeeShare @@ -2307,7 +2128,7 @@ dipindahkan dari basis data. Breadcrumb - Breadcrumb + Petunjuk navigasi Type @@ -2335,19 +2156,19 @@ dipindahkan dari basis data. DatabaseSettingsWidgetMaintenance Manage Custom Icons - Manage Custom Icons + Kelola Ikon Kustom Delete selected icon(s) - Delete selected icon(s) + Hapus ikon-(ikon) yang dipilih Delete all custom icons not in use by any entry or group - Delete all custom icons not in use by any entry or group + Hapus semua ikon kustom yang tidak digunakan oleh entri atau grup Purge unused icons - Purge unused icons + Hapus ikon yang tak digunakan Confirm Deletion @@ -2355,23 +2176,23 @@ dipindahkan dari basis data. At least one of the selected icons is currently in use by at least one entry or group. The icons of all affected entries and groups will be replaced by the default icon. Are you sure you want to delete icons that are currently in use? - At least one of the selected icons is currently in use by at least one entry or group. The icons of all affected entries and groups will be replaced by the default icon. Are you sure you want to delete icons that are currently in use? + Setidaknya satu dari ikon yang dipilih saat ini digunakan oleh sekurang-kurangnya satu entri atau grup. Ikon pada entri atau grup yang terdampak akan diganti oleh ikon bawaan. Apakah Anda yakin ingin menghapus ikon yang sedang digunakan? Custom Icons Are In Use - Custom Icons Are In Use + Ikon Kustom Sedang Digunakan All custom icons are in use by at least one entry or group. - All custom icons are in use by at least one entry or group. + Semua ikon kustom paling tidak digunakan pada satu entri atau grup. Purged Unused Icons - Purged Unused Icons + Hapus Ikon yang tidak digunakan Purged %n icon(s) from the database. - Menghapus ikon(s) %n dari basis data. + Hapus %n Ikon(s) dari database @@ -2393,141 +2214,6 @@ dipindahkan dari basis data. Ruas deskripsi basis data - - DatabaseSettingsWidgetRemote - - Sync Commands - Perintah Sinkronikasi - - - Remove - Buang - - - Command Settings - Pengaturan Perintah - - - Name - Nama - - - Save - Simpan - - - Download - Unduh - - - Command: - Perintah: - - - Download command field - Kolom perintah unduhan - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - misal: "sftp user@hostname" atau "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - - - Input: - Input: - - - Download input field - Kolom input unduhan - - - Upload - Unggah - - - Upload command field - Kolom perintah unggahan - - - e.g.: "sftp user@hostname" or "scp {TEMP_DATABASE} user@hostname:DatabaseOnRemote.kdbx" - misal: "sftp user@hostname" atau "scp {TEMP_DATABASE} user@hostname:DatabaseOnRemote.kdbx" - - - Upload input field - Kolom input unggahan - - - Name cannot be empty. - Nama tidak boleh kosong - - - Test - Tes - - - Download command cannot be empty. - Perintah unduhan tidak boleh kosong. - - - Download failed with error: %1 - Pengunduhan gagal dengan galat: %1 - - - Download finished, but file %1 could not be found. - Pengunduhan selesai, tetapi berkas %1 tidak dapat ditemukan. - - - Download successful. - Pengunduhan berhasil. - - - Save Remote Settings - Simpan Pengaturan Jarak Jauh - - - You have unsaved changes. Do you want to save them? - Anda memiliki perubahan yang belum disimpan. Apakah Anda ingin menyimpannya? - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - misal: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -keluar ---- -{TEMP_DATABASE} digunakan sebagai penampung untuk menyimpan basis data di lokasi sementara -Perintah tersebut harus keluar. Dalam kasus `sftp` sebagai perintah terakhir, `keluar` harus dilakukan - - - - e.g.: -put {TEMP_DATABASE} DatabaseOnRemote.kdbx -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - misal: -put {TEMP_DATABASE} DatabaseOnRemote.kdbx -keluar ---- -{TEMP_DATABASE} digunakan sebagai penampung untuk menyimpan basis data di lokasi sementara -Perintah tersebut harus keluar. Dalam kasus `sftp` sebagai perintah terakhir, `keluar` harus dilakukan - - - - Timeout: - Waktu habis. - - - seconds - detik - - DatabaseTabWidget @@ -2560,10 +2246,26 @@ Masalah ini jelas sebuah bug, silakan laporkan ke pengembang. CSV file Berkas CSV + + Select CSV file + Pilih berkas CSV + Merge database Gabung basis data + + KeePass 1 database + Basis Data KeePass 1 + + + Open KeePass 1 database + Buka basis data KeePass 1 + + + Open OPVault + Buka OPVault + Export database to CSV file Ekspor basis data ke berkas CSV @@ -2576,6 +2278,28 @@ Masalah ini jelas sebuah bug, silakan laporkan ke pengembang. Writing the HTML file failed. Gagal menyimpan ke berkas HTML. + + Export Confirmation + Konfirmasi Ekspor + + + You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? + Anda akan mengekspor basis data Anda ke berkas tanpa enkripsi. Ini akan membuat sandi dan informasi sensitif lainnya menjadi sangat rentan. Apakah Anda yakin ingin melanjutkan? + + + New Database + Basis Data Baru + + + %1 [New Database] + Database tab name modifier + %1 [Basis Data Baru] + + + %1 [Locked] + Database tab name modifier + %1 [Dikunci] + Export database to XML file Ekspor basis data ke berkas XML @@ -2588,31 +2312,9 @@ Masalah ini jelas sebuah bug, silakan laporkan ke pengembang. Writing the XML file failed Penulisan berkas XML gagal - - Export Confirmation - Konfirmasi Ekspor - - - You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? - Anda akan mengekspor basis data Anda ke berkas tanpa enkripsi. Ini akan membuat sandi dan informasi sensitif lainnya menjadi sangat rentan. Apakah Anda yakin ingin melanjutkan? - - - %1 [Locked] - Database tab name modifier - %1 [Dikunci] - - - %1 [Temporary] - Database tab name modifier - %1 [Sementara] - DatabaseWidget - - Searches and Tags - Pencarian dan Tag - Searching… Sedang mencari… @@ -2623,11 +2325,11 @@ Masalah ini jelas sebuah bug, silakan laporkan ke pengembang. Confirm Auto-Type - Confirm Auto-Type + Konfirmasi Ketik-Otomatis Perform Auto-Type into the previously active window? - Perform Auto-Type into the previously active window? + Lakukan Ketik-Otomatis ke jendela yang sebelumnya aktif? Execute command? @@ -2635,7 +2337,7 @@ Masalah ini jelas sebuah bug, silakan laporkan ke pengembang. Do you really want to execute the following command?<br><br>%1<br> - Apakah Anda yakin ingin menjalankan perintah berikut?<br><br>%1<br> + Apakah anda yakin ingin menjalankan perintah berikut?<br><br>%1<br> Remember my choice @@ -2647,7 +2349,7 @@ Masalah ini jelas sebuah bug, silakan laporkan ke pengembang. Do you really want to delete the group "%1" for good? - Apakah Anda yakin ingin menghapus grup "%1" untuk selamanya? + Apakah anda yakin ingin menghapus grup "%1" untuk selamanya? Move group to recycle bin? @@ -2655,16 +2357,12 @@ Masalah ini jelas sebuah bug, silakan laporkan ke pengembang. Do you really want to move the group "%1" to the recycle bin? - Apakah Anda yakin ingin memindahkan grup "%1" ke keranjang sampah? + Apakah anda yakin ingin memindahkan grup "%1" ke keranjang sampah? Expired entries Entri kedaluwarsa - - Entries expiring within %1 day(s) - Entri yang kedaluwarsa dalam waktu %1 hari(s) - No current database. Tidak ada basis data. @@ -2689,18 +2387,6 @@ Masalah ini jelas sebuah bug, silakan laporkan ke pengembang. No Results Tidak Ada Hasil - - Save - Simpan - - - Enter a unique name or overwrite an existing search from the list: - Masukkan sebuah nama unik atau timpa pencarian yang ada dari daftar: - - - Save Search - Simpan pencarian - Lock Database? Kunci Basis Data? @@ -2729,6 +2415,26 @@ Simpan perubahan? File has changed Berkas telah berubah + + The database file has changed. Do you want to load the changes? + Berkas basis data telah berubah. Apakah Anda ingin memuat perubahannya? + + + Merge Request + Permintaan Penggabungan + + + The database file has changed and you have unsaved changes. +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. +Error: %1 + Tidak bisa membuka berkas basis data baru saat mencoba untuk memuat ulang. +Galat: %1 + Disable safe saves? Nonaktifkan penyimpanan aman? @@ -2765,100 +2471,31 @@ Nonaktifkan penyimpanan aman dan coba lagi? Are you sure you want to permanently delete everything from your recycle bin? - Apakah Anda yakin ingin menghapus semuanya secara permanen dari keranjang sampah? + Apakah anda yakin ingin menghapus semuanya secara permanen dari keranjang sampah? Could not find database file: %1 Tidak bisa menemukan berkas basis data: %1 - - New Database - Basis Data Baru + + Entries expiring within %1 day(s) + Entri akan kedaluwarsa dalam %1 hari - %1 [New Database] - Database tab name modifier - %1 [Basis Data Baru] + Searches and Tags + Pencarian dan Tag - Remote Sync did not contain any download or upload commands. - Sinkronisasi Jarak Jauh tidak berisi perintah unduh atau unggah. + Enter a unique name or overwrite an existing search from the list: + Masukkan sebuah nama unik atau timpa pencarian yang ada dari daftar: - Remote sync '%1' completed successfully! - Sinkronisasi jarak jauh '%1' berhasil diselesaikan! + Save + Simpan - Remote sync '%1' failed: %2 - Sinkronisasi jarak jauh '%1' gagal: %2 - - - Error while saving database %1: %2 - Kesalahan saat menyimpan basis data %1: %2 - - - Downloading... - Mengunduh... - - - Uploading... - Mengunggah... - - - Syncing... - Menyinkronkan... - - - Remove passkey from entry - Hapus kunci akses dari entri - - - Do you want to remove the passkey from this entry? - Apakah Anda ingin menghapus kunci akses dari entri ini? - - - The database file "%1" was modified externally - - - - Do you want to load the changes? - - - - Reload database - - - - Reloading database… - - - - Reload canceled - - - - Reload successful - - - - Reload pending user action… - - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes<br>Ignore the changes on disk until save<br>Discard unsaved changes - - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes then save<br>Overwrite the changes on disk<br>Discard unsaved changes - - - - Database file overwritten. - - - - Database file on disk cannot be unlocked with current credentials.<br>Enter new credentials and/or present hardware key to continue. - + Save Search + Simpan pencarian @@ -2893,7 +2530,7 @@ Nonaktifkan penyimpanan aman dan coba lagi? Are you sure you want to remove this URL? - Apakah Anda yakin ingin membuang URL ini? + Apakah anda yakin ingin membuang URL ini? Properties @@ -2911,6 +2548,10 @@ Nonaktifkan penyimpanan aman dan coba lagi? n/a t/a + + (encrypted) + (terenkripsi) + Select private key Pilih kunci privat @@ -2929,7 +2570,7 @@ Nonaktifkan penyimpanan aman dan coba lagi? Some Browser Integration settings are overridden by group settings. - Some Browser Integration settings are overridden by group settings. + Beberapa pengaturan Integrasi Browser ditimpa oleh pengaturan grup. Invalid Entry @@ -2938,28 +2579,28 @@ Nonaktifkan penyimpanan aman dan coba lagi? An external merge operation has invalidated this entry. Unfortunately, any changes made have been lost. - An external merge operation has invalidated this entry. -Unfortunately, any changes made have been lost. + Operasi penggabungan eksternal telah menginvalidasi entri ini. +Semua perubahan yang dilakukan telah hilang. Auto-Type Validation Error - Auto-Type Validation Error + Galat pada Validasi Ketik-Otomatis An error occurred while validating the custom Auto-Type sequence: %1 Would you like to correct it? - An error occurred while validating the custom Auto-Type sequence: + Terjadi kesalahan saat memvalidasi urutan Ketik-Otomatis untuk: %1 -Would you like to correct it? +Apakah Anda ingin memperbaikinya? An error occurred while validating the Auto-Type sequence for "%1": %2 Would you like to correct it? - An error occurred while validating the Auto-Type sequence for "%1": + Terjadi kesalahan saat memvalidasi urutan Ketik-Otomatis untuk "%1": %2 -Would you like to correct it? +Apakah Anda ingin mengoreksinya? Entry updated successfully. @@ -2971,7 +2612,7 @@ Would you like to correct it? Would you like to save changes to this entry? - Apakah Anda yakin ingin menyimpan perubahan ke entri ini? + Apakah anda yakin ingin menyimpan perubahan ke entri ini? New attribute @@ -2983,7 +2624,7 @@ Would you like to correct it? Are you sure you want to remove this attribute? - Apakah Anda yakin ingin membuang atribut ini? + Apakah anda yakin ingin membuang atribut ini? Reveal @@ -2997,10 +2638,6 @@ Would you like to correct it? Hide Sembunyikan - - %n hour(s) - %n jam(s) - %n week(s) %n minggu @@ -3013,9 +2650,9 @@ Would you like to correct it? %n year(s) %n tahun - - Failed to decrypt SSH key, ensure password is correct. - Gagal mendekripsi kunci SSH, pastikan kata sandi sudah benar. + + %n hour(s) + %n jam @@ -3078,7 +2715,7 @@ Would you like to correct it? If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements. - If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements. + Jika dicentang, entri ini tidak akan tampil di laporan seperti Pemeriksaan Kesehatan dan HIBP walaupun tidak sesuai dengan ketentuan kualitas. Exclude from database reports @@ -3135,20 +2772,10 @@ Would you like to correct it? Add new window association Tambah asosiasi jendela baru - - + - Add item - + - Remove selected window association Buang asosiasi jendela yang dipilih - - - - Remove item - - - Window title: Judul jendela: @@ -3173,9 +2800,23 @@ Would you like to correct it? Custom Auto-Type sequence for this window Urutan Ketik-Otomatis khusus untuk jendela ini + + + + Add item + + + + + - + Remove item + - + EditEntryWidgetBrowser + + These settings affect to the entry's behaviour with the browser extension. + Pengaturan ini mempengaruhi perilaku entri dengan ekstensi peramban. + General Umum @@ -3188,14 +2829,26 @@ Would you like to correct it? Skip Auto-Submit for this entry Lewati Kirim-Otomatis untuk entri ini + + Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. + Hanya kirim pengaturan ini ke peramban untuk dialog Otentikasi HTTP. Jika diaktifkan, formulir masuk yang normal tidak akan menampilkan entri ini untuk dipilih. + Use this entry only with HTTP Basic Auth Hanya gunakan entri ini dengan Otentikasi Dasar HTTP + + Do not send this setting to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. + Jangan kirimkan setelan ini ke peramban untuk dialog Autentifikasi HTTP. Jika diaktifkan, dialog Autentifikasi HTTP menampilkan entri ini sebagai pilihan. + Do not use this entry with HTTP Basic Auth Jangan gunakan entri ini dengan Otentikasi Dasar HTTP + + Additional URL's + URL tambahan + Add Tambah @@ -3208,22 +2861,6 @@ Would you like to correct it? Edit Sunting - - These settings affect the entry's behaviour with the browser extension. - Pengaturan ini memengaruhi perilaku entri dengan ekstensi peramban. - - - Additional URLs - URL Tambahan - - - Only send this entry to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. - Hanya kirim entri ini ke peramban untuk menampilkan jendela Autentikasi HTTP. Jika diaktifkan, halaman masuk normal tidak akan menampilkan entri ini untuk dipilih. - - - Do not send this entry to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. - Jangan kirim entri ini ke peramban untuk meminta Autentikasi HTTP. Jika diaktifkan, jendela Autentikasi HTTP tidak akan menampilkan entri ini untuk dipilih. - EditEntryWidgetHistory @@ -3320,35 +2957,35 @@ Would you like to correct it? &Username: - Nama Pengg&una: + &Title: - &Judul: + &Password: - Kata &Sandi: + UR&L: - UR&L: + &Notes: - Catata&n: + Toggle notes visibility - Jungkitkan kenampakan catatan + T&ags: - T&ag: + &Expires: - K&edaluwarsa: + @@ -3389,6 +3026,19 @@ Would you like to correct it? Private key Kunci privat + + External file + Berkas eksternal + + + Browser for key file + Peramban untuk berkas kunci + + + Browse… + Button for opening file dialog + Telusuri… + Attachment Lampiran @@ -3405,23 +3055,6 @@ Would you like to correct it? Remove from agent Buang dari agent - - External file - Berkas eksternal - - - Browser for key file - Peramban untuk berkas kunci - - - Browse… - Button for opening file dialog - Telusuri… - - - Generate - Buat - Select attachment file Pilih berkas lampiran @@ -3446,10 +3079,6 @@ Would you like to correct it? seconds detik - - Clear agent - - EditGroupWidget @@ -3461,6 +3090,10 @@ Would you like to correct it? Icon Ikon + + Browser Integration + Integrasi Peramban + Properties Properti @@ -3477,10 +3110,6 @@ Would you like to correct it? Group has unsaved changes Grup memiliki perubahan yang belum disimpan - - Browser Integration - Integrasi Peramban - Enable Aktifkan @@ -3498,39 +3127,39 @@ Would you like to correct it? EditGroupWidgetBrowser These settings affect to the group's behaviour with the browser extension. - These settings affect to the group's behaviour with the browser extension. + Setelan ini memengaruhi perilaku grup dengan ekstensi peramban. Hide entries from browser extension: - Hide entries from browser extension: + Sembunyikan entri dari ekstensi peramban: Hide entries from browser extension toggle for this and sub groups - Hide entries from browser extension toggle for this and sub groups + Sembunyikan entri dari toggle ekstensi peramban untuk entri ini dan subgrup Skip Auto-Submit for entries: - Skip Auto-Submit for entries: + Lewati Pengiriman-Otomatis untuk entri ini: Skip Auto-Submit toggle for this and sub groups - Skip Auto-Submit toggle for this and sub groups + Lewati toggle Pengiriman-Otomatis untuk entri ini dan sugrup Use entries only with HTTP Basic Auth: - Use entries only with HTTP Basic Auth: + Hanya gunakan entri dengan Autentifikasi Dasar HTTP: Only HTTP Auth toggle for this and sub groups - Only HTTP Auth toggle for this and sub groups + Hanya toggle Autentifikasi HTTP untuk entri ini dan subgrup Do not use entries with HTTP Basic Auth: - Do not use entries with HTTP Basic Auth: + Jangan gunakan entri dengan Autentifikasi Dasar HTTP: Do not use HTTP Auth toggle for this and sub groups - Do not use HTTP Auth toggle for this and sub groups + Jangan gunakan toggle Autentifikasi HTTP untuk entri ini dan subgrup Omit WWW subdomain from matching: @@ -3540,14 +3169,6 @@ Would you like to correct it? Omit WWW subdomain from matching toggle for this and sub groups Hilangkan subdomain WWW dari toggle yang cocok untuk ini dan subgrup - - Restrict matching to given browser key: - Membatasi pencocokan dengan kunci peramban yang diberikan: - - - Restrict matching to given browser key toggle for this and sub groups - Batasi pencocokan dengan tombol kunci peramban yang diberikan untuk grup ini dan anak grup - EditGroupWidgetKeeShare @@ -3610,7 +3231,7 @@ Would you like to correct it? Your KeePassXC version does not support sharing this container type. Supported extensions are: %1. - Versi KeePassXC Anda tidak mendukung fitur berbagi untuk tipe kontainer ini. + Versi KeePassXC anda tidak mendukung fitur berbagi untuk tipe kontainer ini. Ekstensi yang didukung adalah: %1. @@ -3640,7 +3261,7 @@ Ekstensi yang didukung adalah: %1. KeeShare container - KeeShare container + Kontainer KeeShare KeeShare signed container @@ -3734,7 +3355,7 @@ Ekstensi yang didukung adalah: %1. Choose icon… - Pilih ikon + Pilih ikon... Set the URL to use to search for a favicon @@ -3780,6 +3401,10 @@ Ekstensi yang didukung adalah: %1. Unable to fetch favicon. Tidak bisa mengunduh favicon. + + You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security + Anda bisa mengaktifkan layanan ikon situs web oleh DuckDuckGo di Perkakas > Pengaturan > Keamanan + Existing icon selected. Ikon yang sudah ada dipilih. @@ -3812,10 +3437,6 @@ Ekstensi yang didukung adalah: %1. The following icon(s) failed: Ikon berikut gagal: - - You can enable the DuckDuckGo website icon service under Application Settings -> Security - Anda dapat mengaktifkan layanan ikon situs web DuckDuckGo melalui Pengaturan Aplikasi -> Keamanan - EditWidgetProperties @@ -3874,7 +3495,7 @@ Ekstensi yang didukung adalah: %1. Do you really want to delete the selected plugin data? This may cause the affected plugins to malfunction. - Apakah Anda yakin ingin menghapus data pengaya? + Apakah anda yakin ingin menghapus data pengaya? Ini mungkin akan menyebabkan pengaya menjadi tidak berfungsi. @@ -3892,24 +3513,6 @@ Ini mungkin akan menyebabkan pengaya menjadi tidak berfungsi. %1 - Clone %1 - Salinan - - Passkey - Kunci akses - - - Invalid conversion type: %1 - Tipe konversi tidak valid: %1 - - - Invalid conversion syntax: %1 - Sintaks konversi tidak valid: %1 - - - Invalid regular expression syntax %1 -%2 - Sintaks ekspresi reguler %1 tidak valid -%2 - EntryAttachments @@ -3918,21 +3521,6 @@ Ini mungkin akan menyebabkan pengaya menjadi tidak berfungsi. Tidak bisa membuka berkas "%1" - - EntryAttachmentsDialog - - Form - Formulir - - - File name - - - - File contents... - - - EntryAttachmentsModel @@ -3970,6 +3558,14 @@ Ini mungkin akan menyebabkan pengaya menjadi tidak berfungsi. Remove Buang + + Rename selected attachment + Gantikan nama lampiran terpilih + + + Rename + Ganti nama + Open selected attachment Buka lampiran yang dipilih @@ -3996,7 +3592,7 @@ Ini mungkin akan menyebabkan pengaya menjadi tidak berfungsi. Are you sure you want to remove %n attachment(s)? - Apakah Anda yakin ingin membuang %n lampiran? + Apakah anda yakin ingin membuang %n lampiran? Save attachments @@ -4010,7 +3606,7 @@ Ini mungkin akan menyebabkan pengaya menjadi tidak berfungsi. Are you sure you want to overwrite the existing file "%1" with the attachment? - Apakah Anda yakin ingin menimpa ulang berkas "%1" yang ada dengan berkas lampiran? + Apakah anda yakin ingin menimpa ulang berkas "%1" yang ada dengan berkas lampiran? Confirm overwrite @@ -4042,7 +3638,13 @@ Ini mungkin akan menyebabkan pengaya menjadi tidak berfungsi. Confirm Overwrite Attachment - Confirm Overwrite Attachment + Konfirmasi Lampiran Tertimpa + + + Attachment "%1" already exists. +Would you like to overwrite the existing attachment? + Lampiran "%1" sudah ada. +Apakah Anda ingin menimpa lampiran yang sudah ada? Confirm Attachment @@ -4060,41 +3662,23 @@ Apakah Anda yakin ingin menambahkan berkas ini? Attachment modified - Attachment modified + Lampiran telah dimodifikasi The attachment '%1' was modified. Do you want to save the changes to your database? - The attachment '%1' was modified. -Do you want to save the changes to your database? + Lampiran '%1' telah dimodifikasi +Apakah Anda ingin menyimpan perubahan ke dalam basis data? Saving attachment failed - Saving attachment failed + Penyimpanan lampiran gagal Saving updated attachment failed. Error: %1 - Saving updated attachment failed. -Error: %1 - - - Attachment "%1" already exists. -Would you like to overwrite the existing attachment? - Attachment "%1" already exists. -Would you like to overwrite the existing attachment? - - - New - - - - Preview - Pratinjau - - - Failed to preview an attachment: Attachment not found - + Penyimpanan lampiran terbaru gagal +Galat: %1 @@ -4108,7 +3692,7 @@ Would you like to overwrite the existing attachment? EntryHistoryModel Current (%1) - Current (%1) + Saat ini (%1) Last modified @@ -4290,14 +3874,6 @@ Would you like to overwrite the existing attachment? Has TOTP Memiliki TOTP - - Background Color - Warna Latar belakang - - - Group Path - - EntryPreviewWidget @@ -4318,8 +3894,8 @@ Would you like to overwrite the existing attachment? Sandi - URL - URL + Notes + Catatan Expiration @@ -4338,8 +3914,8 @@ Would you like to overwrite the existing attachment? Nama pengguna - Notes - Catatan + URL + URL Advanced @@ -4389,10 +3965,6 @@ Would you like to overwrite the existing attachment? Never Tidak Pernah - - Double click to copy value - Klik ganda untuk menyalin nilai - Enabled Diaktifkan @@ -4402,8 +3974,8 @@ Would you like to overwrite the existing attachment? Dinonaktifkan - Double click to copy to clipboard - Klik ganda untuk menyalin ke papan klip + Double click to copy value + Klik ganda untuk menyalin nilai @@ -4412,10 +3984,6 @@ Would you like to overwrite the existing attachment? Invalid URL URL tidak valid - - Duplicate URL - Duplikatkan URL - EntryView @@ -4431,10 +3999,6 @@ Would you like to overwrite the existing attachment? Reset to defaults Kembalikan ke setelan bawaan - - + %1 entry(s)... - + %1 entri... - ExportDialog @@ -4444,19 +4008,19 @@ Would you like to overwrite the existing attachment? Sort entries by... - Sort entries by... + Urutkan entri berdasarkan... You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! - You are about to export your database to an unencrypted file. -This will leave your passwords and sensitive information vulnerable! + Anda akan mengekspor basis data Anda ke dalam berkas yang tak terenkripsi. +Ini akan membuat rentan kata sandi dan informasi sensitif Anda! database order - database order + urutan basis data name (ascending) @@ -4468,7 +4032,7 @@ This will leave your passwords and sensitive information vulnerable! unknown - unknown + tidak diketahui Export database to HTML file @@ -4518,19 +4082,19 @@ This will leave your passwords and sensitive information vulnerable! Failed to register database on DBus under the name '%1' - Failed to register database on DBus under the name '%1' + Gagal mendaftarkan basis data pada DBus dengan nama '%1' Failed to register session on DBus at path '%1' - Failed to register session on DBus at path '%1' + Gagal mendaftarkan sesi pada DBus di jalur '%1' Failed to register item on DBus at path '%1' - Failed to register item on DBus at path '%1' + Gagal mendaftarkan item pada DBus di jalur '%1' Failed to register prompt object on DBus at path '%1' - Failed to register prompt object on DBus at path '%1' + Gagal mendaftarkan prompt object pada DBus di jalur '%1' @@ -4556,7 +4120,7 @@ This will leave your passwords and sensitive information vulnerable! Non-existing/inaccessible executable path. Please double-check the client is legit. - Non-existing/inaccessible executable path. Please double-check the client is legit. + Jalur executable tidak bisa diakses/tidak ada. Harap periksa kembali jika kliennya sah. @@ -4633,7 +4197,7 @@ Anda dapat mengaktifkan layanan ikon situs web DuckDuckGo di bagian keamanan dal Please wait, processing entry list… - Please wait, processing entry list… + Harap tunggu, memproses daftar entri... Downloading… @@ -4656,193 +4220,6 @@ Anda dapat mengaktifkan layanan ikon situs web DuckDuckGo di bagian keamanan dal Mengunduh favicon (%1/%2)... - - ImportWizard - - Import Wizard - Panduan Impor - - - - ImportWizardPageReview - - WizardPage - LamanPemandu - - - Entry count: %1 - Jumlah entri: %1 - - - Group - Grup - - - Title - Judul - - - Username - Nama pengguna - - - Password - Sandi - - - Url - Alamat web - - - Could not load key file. - Tidak dapat memuat berkas kunci. - - - Could not open remote database. Password or key file may be incorrect. - - - - - ImportWizardPageSelect - - Form - Formulir - - - Import File Selection - - - - Password: - Sandi: - - - Key File: - Berkas Kunci: - - - Browse… - Telusuri… - - - Import Into: - - - - New Database - Basis Data Baru - - - No unlocked databases available - - - - Existing Database: - - - - Import File: - - - - Comma Separated Values (.csv) - - - - 1Password Export (.1pux) - - - - 1Password Vault (.opvault) - - - - Bitwarden (.json) - - - - KeePass 1 Database (.kdb) - - - - Open OPVault - Buka OPVault - - - Select import file - - - - All files - Semua berkas - - - Key files - Berkas kunci - - - Select key file - Pilih berkas kunci - - - Comma Separated Values - - - - 1Password Export - - - - Bitwarden JSON Export - - - - 1Password Vault - - - - KeePass1 Database - - - - Proton Pass (.json) - - - - Proton Pass JSON Export - - - - Temporary Database - - - - Command: - Perintah: - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - misalnya: "sftp user@hostname" atau "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - - - Input: - Input: - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last commend `exit` has to be sent - - - - - Remote Database (.kdbx) - - - KMessageWidget @@ -4858,7 +4235,7 @@ The command has to exit. In case of `sftp` as last commend `exit` has to be sent Kdbx3Reader Missing database headers - Missing database headers + Header basis data hilang Unable to calculate database key @@ -4884,11 +4261,11 @@ Jika terus berulang, maka basis data Anda mungkin rusak. Invalid header field length: field %1 - Invalid header field length: field %1 + Panjang ruas tajuk tidak valid: ruas %1 Invalid header data length: field %1, %2 expected, %3 found - Invalid header data length: field %1, %2 expected, %3 found + Panjang data tajuk tidak valid: ruas %1, %2 diharapkan, %3 ditemukan @@ -4945,11 +4322,11 @@ Jika terus berulang, maka basis data Anda mungkin rusak. Invalid header field length: field %1 - Invalid header field length: field %1 + Panjang ruas tajuk tidak valid: ruas %1 Invalid header data length: field %1, %2 expected, %3 found - Invalid header data length: field %1, %2 expected, %3 found + Panjang data tajuk tidak valid: ruas % 1, %2 diharapkan, % 3 ditemukan Failed to open buffer for KDF parameters in header @@ -4965,19 +4342,19 @@ Jika terus berulang, maka basis data Anda mungkin rusak. Invalid inner header id size - Invalid inner header id size + Ukuran id tajuk dalam tidak valid Invalid inner header field length: field %1 - Invalid inner header field length: field %1 + Panjang ruas tajuk dalam tidak valid: ruas % 1 Invalid inner header data length: field %1, %2 expected, %3 found - Invalid inner header data length: field %1, %2 expected, %3 found + Panjang data header inner tidak valid: ruas %1, diharapkan %2, ditemukan %3 Invalid inner header binary size - Invalid inner header binary size + Ukuran biner header inner tidak valid Unsupported KeePass variant map version. @@ -5065,7 +4442,7 @@ Jika terus berulang, maka basis data Anda mungkin rusak. KdbxReader Invalid cipher uuid length: %1 (length=%2) - Invalid cipher uuid length: %1 (length=%2) + Panjang uuid cipher tidak valid: %1 (panjang=%2) Unable to parse UUID: %1 @@ -5077,7 +4454,7 @@ Jika terus berulang, maka basis data Anda mungkin rusak. Invalid compression flags length - Invalid compression flags length + Panjang flag kompresi tidak valid Unsupported compression algorithm @@ -5085,15 +4462,15 @@ Jika terus berulang, maka basis data Anda mungkin rusak. Invalid master seed size - Invalid master seed size + Ukuran seed utama tidak valid Invalid transform seed size - Invalid transform seed size + Ukuran seed transformasi tidak valid Invalid transform rounds size - Invalid transform rounds size + Ukuran round transformasi tidak valid Invalid start bytes size @@ -5105,7 +4482,7 @@ Jika terus berulang, maka basis data Anda mungkin rusak. Invalid inner random stream cipher - Invalid inner random stream cipher + Cipher stream acak inner tidak valid Failed to read database file. @@ -5116,10 +4493,10 @@ Jika terus berulang, maka basis data Anda mungkin rusak. 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). + Berkas yang dipilih adalah basis data KeePass 1 yang lama (.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. +Anda bisa mengimpornya dengan mengklik Basis Data > 'Impor basis data KeePass 1'. +Ini adalah migrasi satu arah. Anda tidak akan bisa lagi membuka basis data yang diimpor dengan versi lama KeePassX 0.4. Not a KeePass database. @@ -5258,7 +4635,7 @@ Baris %2, kolom %3 KeeAgentSettings Invalid KeeAgent settings file structure. - Invalid KeeAgent settings file structure. + Pengaturan struktur berkas KeeAgent tidak valid. Private key is an attachment but no attachments provided. @@ -5277,6 +4654,17 @@ Baris %2, kolom %3 Gagal membuka kunci privat + + KeePass1OpenWidget + + Import KeePass1 Database + Impor Basis Data KeePass1 + + + Unable to open the database. + Tidak bisa membuka basis data. + + KeePass1Reader @@ -5314,15 +4702,15 @@ Baris %2, kolom %3 Invalid transform seed size - Invalid transform seed size + Ukuran seed transformasi tidak valid Invalid number of transform rounds - Invalid number of transform rounds + Banyaknya round transformasi tidak valid Unable to construct group tree - Unable to construct group tree + Tidak bisa mengkonstruksi group tree Root @@ -5334,7 +4722,7 @@ Baris %2, kolom %3 unable to seek to content position - unable to seek to content position + tidak bisa seek ke posisi konten Invalid credentials were provided, please try again. @@ -5408,7 +4796,7 @@ Jika terus berulang, maka basis data Anda mungkin rusak. Invalid entry UUID field size - Invalid entry UUID field size + Ukuran ruas entri UUID tidak valid Invalid entry group id field size @@ -5467,7 +4855,7 @@ Jika terus berulang, maka basis data Anda mungkin rusak. Inactive share - Inactive share + Share tidak aktif Imported from @@ -5563,7 +4951,7 @@ Pesan: %2 <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> + <p>Anda bisa menambahkan berkas kunci yang berisi byte acak untuk keamanan tambahan.</p><p>Anda harus menjaga kerahasiaannya dan jangan sampai hilang atau Anda tidak akan bisa mengaksesnya lagi.</p> Key files @@ -5612,7 +5000,7 @@ Apakah Anda yakin ingin melanjutkan dengan berkas ini? MacUtils Invalid key code - Invalid key code + Kode kunci tidak valid Global shortcut already registered to %1 @@ -5633,6 +5021,10 @@ Apakah Anda yakin ingin melanjutkan dengan berkas ini? &Recent Databases Basis Data Ba&ru-baru Ini + + &Import + &Impor + &Export &Ekspor @@ -5653,10 +5045,6 @@ Apakah Anda yakin ingin melanjutkan dengan berkas ini? TOTP TOTP - - Tags - Tag - &Groups &Grup @@ -5701,18 +5089,34 @@ Apakah Anda yakin ingin melanjutkan dengan berkas ini? &New Database… Basis Data &Baru… + + Create a new database + Buat basis data baru + &Merge From Database… &Gabung Dari Basis Data… + + Merge from another KDBX database + Gabung dari basis data KDBX lainnya + &New Entry… Entri &Baru… + + Add a new entry + Tambahkan entri baru + &Edit Entry… &Sunting Entri… + + View or edit entry + Lihat atau sunting entri + &Delete Entry… &Hapus Entri… @@ -5721,6 +5125,10 @@ Apakah Anda yakin ingin melanjutkan dengan berkas ini? &New Group… Grup &Baru… + + Add a new group + Tambahkan grup baru + &Edit Group… &Sunting Grup… @@ -5751,12 +5159,20 @@ Apakah Anda yakin ingin melanjutkan dengan berkas ini? Database &Reports… - Database &Reports… + Lapo&ran Basis Data… + + + Statistics, health check, etc. + Statistik, cek kesehatan, dll. &Database Settings… Pengaturan Basis&data… + + Database settings + Pengaturan basis data + &Clone Entry… &Gandakan Entri… @@ -5765,18 +5181,34 @@ Apakah Anda yakin ingin melanjutkan dengan berkas ini? Move u&p Pindah ke &atas + + Move entry one step up + Pindah entri 1 level ke atas + Move do&wn Pindah ke &bawah + + Move entry one step down + Pindah entri 1 level ke bawah + Copy &Username Salin &Nama Pengguna + + Copy username to clipboard + Salin nama pengguna ke papan klip + Copy &Password Salin &Sandi + + Copy password to clipboard + Salin sandi ke papan klip + &Settings &Pengaturan @@ -5810,13 +5242,21 @@ Apakah Anda yakin ingin melanjutkan dengan berkas ini? &Judul - Copy &URL - Salin &URL + Copy title to clipboard + Salin judul ke papan klip + + + Copy URL to clipboard + Salin URL ke papan klip &Notes &Catatan + + Copy notes to clipboard + Salin catatan ke papan klip + &CSV File… Berkas &CSV… @@ -5829,14 +5269,26 @@ Apakah Anda yakin ingin melanjutkan dengan berkas ini? KeePass 1 Database… Basis Data KeePass 1… + + Import a KeePass 1 database + Impor basis data KeePass 1 + 1Password Vault… Brankas 1Password… + + Import a 1Password Vault + Impor Brankas 1Password + CSV File… Berkas CSV… + + Import a CSV file + Impor berkas CSV + Show TOTP Tampilkan TOTP @@ -5853,10 +5305,6 @@ Apakah Anda yakin ingin melanjutkan dengan berkas ini? Copy &TOTP Salin &TOTP - - Copy Password and TOTP - Salin Sandi dan TOTP - E&mpty recycle bin Kosongkan keranjang sa&mpah @@ -5881,6 +5329,10 @@ Apakah Anda yakin ingin melanjutkan dengan berkas ini? &Online Help &Bantuan Daring + + Go to online documentation + Kunjungi dokumentasi daring + &User Guide Pand&uan Pengguna @@ -5925,10 +5377,6 @@ Apakah Anda yakin ingin melanjutkan dengan berkas ini? Classic (Platform-native) Klasik (Native-platform) - - Show Menubar - - Show Toolbar Tampilkan Bilah Alat @@ -5951,11 +5399,7 @@ Apakah Anda yakin ingin melanjutkan dengan berkas ini? Clone Group... - Clone Group... - - - &XML File… - Berkas &XML... + Klon Grup... Clear history @@ -5981,15 +5425,17 @@ Versi ini tidak dimaksudkan untuk penggunaan sehari-hari. NOTE: You are using a pre-release version of KeePassXC. Expect some bugs and minor issues, this version is meant for testing purposes. CATATAN: Anda menggunakan versi pra-rilis KeePassXC. -Ada beberapa kutu dan masalah-masalah kecil, versi ini ditujukan untuk penggunaan percobaan. +Ada beberapa kutu dan masalah-masalah kecil, versi ini dimaksudkan untuk penggunaan percobaan. - No Tags - Tidak Ada Tag + 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. + PERINGATAN: Versi Qt Anda dapat menyebabkan KeePassXC crash dengan adanya Papan Ketik Dalam Layar +Kami sarankan Anda menggunakan AppImage yang tersedia di halaman unduhan kami. Restore Entry(s) - + Pulihkan Entri Settings @@ -6001,7 +5447,7 @@ Ada beberapa kutu dan masalah-masalah kecil, versi ini ditujukan untuk penggunaa Would you like KeePassXC to check for updates on startup? - Apakah Anda ingin KeePassXC memeriksa pembaruan setiap memulai aplikasi? + Apakah anda ingin KeePassXC memeriksa pembaruan setiap memulai aplikasi? You can always check for updates manually from the application menu. @@ -6015,13 +5461,9 @@ Ada beberapa kutu dan masalah-masalah kecil, versi ini ditujukan untuk penggunaa Quit KeePassXC Keluar KeePassXC - - %1 Entry(s) - - Please present or touch your YubiKey to continue… - Please present or touch your YubiKey to continue… + Siapkan atau sentuh YubiKey untuk melanjutkan... Restart Application? @@ -6029,316 +5471,40 @@ Ada beberapa kutu dan masalah-masalah kecil, versi ini ditujukan untuk penggunaa You must restart the application to apply this setting. Would you like to restart now? - Anda harus memulai ulang aplikasi untuk menerapkan pengaturan ini. Apakah Anda ingin memulai ulang sekarang? + Anda harus memulai ulang aplikasi untuk menerapkan pengaturan ini. Apakah anda ingin memulai ulang sekarang? + + + Tags + Tag + + + No Tags + Tidak Ada Tag + + + %1 Entry(s) + $1 Entri + + + Copy Password and TOTP + Salin Sandi dan TOTP + + + &XML File… + Berkas &XML... + + + XML File… + Berkas XML... + + + Copy &URL + Salin &URL Allow Screen Capture Izinkan Tangkapan Layar - - 1Password 1PUX... - - - - Import a 1Password 1PUX file - - - - Import… - - - - Passkeys… - - - - Import Passkey - - - - Remote S&ync… - - - - Quit Application - - - - Open About Dialog - - - - Open Database - - - - Create Database - - - - Merge From Database - - - - Create Entry - - - - Edit Entry - Sunting Entri - - - Delete Entry - - - - Create Group - - - - Edit Group - Sunting Grup - - - Delete Group - - - - Download All Favicons - - - - Sort Groups A-Z - - - - Sort Groups Z-A - - - - Save Database As - - - - Show Database Security - - - - Show Database Reports - - - - Show Database Settings - - - - Show Passkeys - - - - Clone Entry - - - - Move Entry Up - - - - Move Entry Down - - - - Copy Username - Salin Nama Pengguna - - - Copy Password - Salin Kata Sandi - - - Show Application Settings - - - - Show Password Generator - - - - Remove Passkey From Entry - - - - Perform Auto-Type: {USERNAME} - - - - Perform Auto-Type: {USERNAME}{ENTER} - - - - Perform Auto-Type: {PASSWORD} - - - - Perform Auto-Type: {PASSWORD}{ENTER} - - - - Perform Auto-Type: {TOTP} - - - - Copy Title - - - - Copy URL - - - - Copy Notes - - - - Export to CSV - - - - Export to HTML - - - - Import KeePass1 Database - Impor Basis Data KeePass1 - - - Import 1Password Vault - - - - Import CSV File - - - - Show TOTP QR Code - - - - Set up TOTP - - - - Empty Recycle Bin - - - - Open Donation Website - - - - Open Bug Report - - - - Open Online Documentation - - - - Open Keyboard Shortcuts Guide - - - - Save Database Backup - - - - SSH Agent: Add Key - - - - SSH Agent: Remove Key - - - - Toggle Compact Mode - - - - Set Theme: Automatic - - - - Set Theme: Light - - - - Set Theme: Dark - - - - Set Theme: Classic - - - - Toggle Show Menubar - - - - Toggle Show Toolbar - - - - Toggle Show Preview Panel - - - - Toggle Always on Top - - - - Toggle Hide Usernames - - - - Toggle Hide Passwords - - - - Export to XML - - - - Toggle Allow Screen Capture - - - - Show Group Panel - - - - Toggle Show Group Panel - - - - Setup Remote Sync… - - - - Password Generator - Pembuat Sandi - - - E&xpire Entry… - - - - Clear SSH Agent - - - - Clear all identities in ssh-agent - - ManageDatabase @@ -6375,18 +5541,18 @@ Ada beberapa kutu dan masalah-masalah kecil, versi ini ditujukan untuk penggunaa Reset - Reset + Atur Ulang Reset any remembered decisions for this application - Reset any remembered decisions for this application + Reset sebarang keputusan yang diingat untuk aplikasi ini Merger Creating missing %1 [%2] - Creating missing %1 [%2] + Membuat %1 yang hilang [%2] Relocating %1 [%2] @@ -6396,6 +5562,26 @@ Ada beberapa kutu dan masalah-masalah kecil, versi ini ditujukan untuk penggunaa Overwriting %1 [%2] Menyimpan ulang %1 [%2] + + older entry merged from database "%1" + entri lama yang digabung dari basis data "%1" + + + Adding backup for older target %1 [%2] + Menambahkan cadangan untuk target lama %1 [%2] + + + Adding backup for older source %1 [%2] + Menambahkan cadangan untuk sumber lama %1 [%2] + + + Reapplying older target entry on top of newer source %1 [%2] + Menerapkan ulang entri target yang lebih lama di atas sumber %1 yang lebih baru [%2] + + + Reapplying older source entry on top of newer target %1 [%2] + Menerapkan ulang entri sumber yang lebih lama di atas target %1 yang lebih baru [%2] + Synchronizing from newer source %1 [%2] Menyinkronkan dengan sumber yang lebih baru %1 [%2] @@ -6406,11 +5592,11 @@ Ada beberapa kutu dan masalah-masalah kecil, versi ini ditujukan untuk penggunaa Deleting child %1 [%2] - Deleting child %1 [%2] + Menghapus child %1 [%2] Deleting orphan %1 [%2] - Deleting orphan %1 [%2] + Menghapus orphan %1 [%2] Changed deleted objects @@ -6433,7 +5619,7 @@ Ada beberapa kutu dan masalah-masalah kecil, versi ini ditujukan untuk penggunaa NewDatabaseWizard Create a new KeePassXC database… - Create a new KeePassXC database… + Buat basis data KeePassXC baru... Root @@ -6455,6 +5641,14 @@ Ada beberapa kutu dan masalah-masalah kecil, versi ini ditujukan untuk penggunaa Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. Di sini Anda bisa menyesuaikan pengaturan enkripsi basis data. Jangan khawatir, Anda bisa mengubahnya lagi nanti di pengaturan basis data. + + Advanced Settings + Pengaturan Lanjutan + + + Simple Settings + Pengaturan Dasar + NewDatabaseWizardPageDatabaseKey @@ -6464,7 +5658,7 @@ Ada beberapa kutu dan masalah-masalah kecil, versi ini ditujukan untuk penggunaa A set of credentials known only to you that protects your database. - Kredensial yang hanya diketahui oleh Anda yang melindungi basis data Anda. + Kredential yang hanya diketahui oleh Anda yang melindungi basis data Anda. @@ -6489,25 +5683,6 @@ Ada beberapa kutu dan masalah-masalah kecil, versi ini ditujukan untuk penggunaa Silakan masukkan nama dan deskripsi opsional untuk basis data Anda yang baru: - - NewEntryAttachmentsDialog - - Attachment name cannot be empty - - - - Attachment with the same name already exists - - - - Save attachment - Simpan lampiran - - - New entry attachment - - - NixUtils @@ -6527,7 +5702,7 @@ Ada beberapa kutu dan masalah-masalah kecil, versi ini ditujukan untuk penggunaa OpData01 Invalid OpData01, does not contain header - Invalid OpData01, does not contain header + OpData01 tidak valid, tidak memuat header Unable to read all IV bytes, wanted 16 but got %1 @@ -6535,7 +5710,7 @@ Ada beberapa kutu dan masalah-masalah kecil, versi ini ditujukan untuk penggunaa Unable to init cipher for opdata01: %1 - Unable to init cipher for opdata01: %1 + Tidak bisa meng-init cipher untuk opdata01: %1 Unable to read all HMAC signature bytes @@ -6547,11 +5722,20 @@ Ada beberapa kutu dan masalah-masalah kecil, versi ini ditujukan untuk penggunaa Unable to process clearText in place - Unable to process clearText in place + Tidak bisa memproses clearText di tempat Expected %1 bytes of clear-text, found %2 - Expected %1 bytes of clear-text, found %2 + Diharapkan %1 byte teks polos, ditemukan %2 + + + + OpVaultOpenWidget + + Read Database did not produce an instance +%1 + Baca Basis Data tidak menghasilkan suatu instansi +%1 @@ -6578,7 +5762,7 @@ Ada beberapa kutu dan masalah-masalah kecil, versi ini ditujukan untuk penggunaa Unable to derive master key: %1 - Unable to derive master key: %1 + Tidak bisa menurunkan kunci master: %1 @@ -6601,7 +5785,7 @@ Ada beberapa kutu dan masalah-masalah kecil, versi ini ditujukan untuk penggunaa Key file magic header id invalid - Key file magic header id invalid + Id magic header berkas kunci tidak valid Found zero keys @@ -6627,10 +5811,6 @@ Ada beberapa kutu dan masalah-masalah kecil, versi ini ditujukan untuk penggunaa Unknown cipher: %1 Cipher tidak diketahui: %1 - - AES-256/GCM is currently not supported - AES-256/GCM saat ini tidak didukung - Passphrase is required to decrypt this key Membutuhkan frasa sandi untuk mendekripsi kunci ini @@ -6649,7 +5829,7 @@ Ada beberapa kutu dan masalah-masalah kecil, versi ini ditujukan untuk penggunaa Failed to initialize cipher: %1 - Failed to initialize cipher: %1 + Gagal menginisialisasi cipher: %1 Decryption failed: %1 @@ -6661,11 +5841,11 @@ Ada beberapa kutu dan masalah-masalah kecil, versi ini ditujukan untuk penggunaa Unexpected EOF while reading key - Unexpected EOF while reading key + EOF yang tidak terduga saat membaca kunci Unsupported key part - Unsupported key part + Bagian kunci tidak didukung Unexpected EOF while reading public key @@ -6696,179 +5876,8 @@ Ada beberapa kutu dan masalah-masalah kecil, versi ini ditujukan untuk penggunaa EOF yang tidak terduga saat menulis kunci privat - (encrypted) - (terenkripsi) - - - - OpenSSHKeyGenDialog - - SSH Key Generator - - - - Type - Tipe - - - Bits - - - - Comment - Komentar - - - - PasskeyExportDialog - - KeePassXC - Passkey Export - - - - Filenames will be generated with title and .passkey file extension. - - - - Export entries - - - - Export Selected - - - - Cancel - Batal - - - Export to folder - - - - Export the following passkey entries. - - - - - PasskeyExporter - - KeePassXC: Passkey Export - - - - File "%1.passkey" already exists. -Do you want to overwrite it? - - - - - Cannot open file - - - - Cannot open file "%1" for writing. - - - - Cannot write to file - - - - - PasskeyImportDialog - - KeePassXC - Passkey Import - - - - Username: %1 - Nama pengguna: %1 - - - Group - Grup - - - Database - Basis data - - - Import Passkey - - - - Import - Impor - - - Cancel - Batal - - - Entry - Entri - - - Create new entry - - - - Relying Party: %1 - Pihak yang Mengandalkan: %1 - - - Import the following passkey: - - - - Import the following passkey to this entry: - - - - Default passkeys group (Imported Passkeys) - - - - - PasskeyImporter - - Passkey file - - - - All files - Semua berkas - - - Cannot open file - - - - Cannot open file "%1" for reading. - - - - Open passkey file - - - - Cannot import passkey - - - - Cannot import passkey file "%1". Data is missing. - - - - Cannot import passkey file "%1". -The following data is missing: -%2 - - - - Cannot import passkey file "%1". Private key is missing or malformed. - + AES-256/GCM is currently not supported + AES-256/GCM saat ini tidak didukung @@ -6899,15 +5908,15 @@ The following data is missing: Change Password - Change Password + Ganti Sandi Remove Password - Remove Password + Buang Sandi Password set, click to change or remove - Password set, click to change or remove + Sandi telah diatur, klik untuk mengubah atau membuang <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> @@ -7073,17 +6082,25 @@ The following data is missing: Word Count: Jumlah Kata: + + Character Count: + Cacah Karakter: + Word Case: Besar Kecil Kata: Delete selected wordlist - Delete selected wordlist + Hapus daftar kata terpilih Add custom wordlist - Add custom wordlist + Tambahkan daftar kata khusus + + + character + karakter Close @@ -7121,6 +6138,51 @@ The following data is missing: Entropy: %1 bit Entropi: %1 bit + + Confirm Delete Wordlist + Konfirmasi Penghapusan Daftar Kata + + + Do you really want to delete the wordlist "%1"? + Yakin akan menghapus daftar kata "%1"?  + + + Failed to delete wordlist + Gagal untuk menghapus daftar kata + + + Wordlists + Daftar kata + + + All files + Semua Berkas + + + Select Custom Wordlist + Pilih Daftar Kata Khusus + + + Overwrite Wordlist? + Timpa Daftar Kata? + + + Wordlist "%1" already exists as a custom wordlist. +Do you want to overwrite it? + Daftar kata "%1" sudah ada di daftar kata kustom. Yakin akan menimpa daftar kata ini? + + + Failed to add wordlist + Gagal menambahkan daftar kata + + + Logograms + Logogram + + + Special Characters + Karakter Spesial + Password Quality: %1 Kualitas Sandi: %1 @@ -7146,66 +6208,8 @@ The following data is missing: Sempurna - Confirm Delete Wordlist - Confirm Delete Wordlist - - - Do you really want to delete the wordlist "%1"? - Do you really want to delete the wordlist "%1"? - - - Failed to delete wordlist - Failed to delete wordlist - - - Wordlists - Wordlists - - - All files - Semua Berkas - - - Select Custom Wordlist - Select Custom Wordlist - - - Overwrite Wordlist? - Overwrite Wordlist? - - - Wordlist "%1" already exists as a custom wordlist. -Do you want to overwrite it? - Wordlist "%1" already exists as a custom wordlist. -Do you want to overwrite it? - - - Failed to add wordlist - Failed to add wordlist - - - Logograms - Logogram - - - Special Characters - Karakter Spesial - - - passwordLength - - - - Characters: %1 - - - - MIXED case - - - - Excluded characters: "0", "1", "l", "I", "O", "|", "﹒", "B", "8", "G", "6" - + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + Karakter yang dikecualikan: "0", "1", "l", "I", "O", "|", "﹒" @@ -7255,7 +6259,7 @@ Do you want to overwrite it? Sempurna - Toggle password visibility using Control + H. Open the password generator using Control + G. + Toggle password visibilty using Control + H. Open the password generator using Control + G. @@ -7263,30 +6267,15 @@ Do you want to overwrite it? PickcharsDialog KeePassXC - Pick Characters - KeePassXC - Pick Characters + KeePassXC - Pilih Karakter Select characters to type, navigate with arrow keys, Ctrl + S submits. - Select characters to type, navigate with arrow keys, Ctrl + S submits. + Pilih karakter yang akan diketik, dan gunakan tombol panah untuk berpindah antar karakter. Tekan Ctrl + S untuk mengirim. Press &Tab between characters - Press &Tab between characters - - - - PreviewEntryAttachmentsDialog - - Preview entry attachment - - - - No preview available - - - - Image format not supported - + Tekan &Tab di antara karakter @@ -7327,10 +6316,6 @@ Do you want to overwrite it? Continue Lanjutkan - - Continue with weak password - - QObject @@ -7392,7 +6377,7 @@ Do you want to overwrite it? No valid UUID provided - No valid UUID provided + Tidak ada UUID yang diberikan Unknown error @@ -7408,7 +6393,7 @@ Do you want to overwrite it? Could not save the native messaging script file for %1. - Could not save the native messaging script file for %1. + Tidak dapan menyimpan berkas perpesanan native untuk %1. Username for the entry. @@ -7428,7 +6413,7 @@ Do you want to overwrite it? Notes for the entry. - Notes for the entry. + Catatan untuk entri. Notes @@ -7452,7 +6437,7 @@ Do you want to overwrite it? Cannot generate a password and prompt at the same time. - Cannot generate a password and prompt at the same time. + Tidak dapat membuat kata sandi dan pengingat di saat yang bersamaan. Could not create entry with path %1. @@ -7500,7 +6485,7 @@ Do you want to overwrite it? Path to okon-cli to search a formatted HIBP file - Path to okon-cli to search a formatted HIBP file + Jalur ke okon-cli untuk mencari berkas HIBP yang telah diformat okon-cli @@ -7512,11 +6497,11 @@ Do you want to overwrite it? Cannot find HIBP file: %1 - Cannot find HIBP file: %1 + Tidak dapat menemukan berkas HIBP: %1 Evaluating database entries using okon… - Evaluating database entries using okon… + Mengevaluasi basis data menggunakan okon.. Failed to open HIBP file %1: %2 @@ -7524,7 +6509,7 @@ Do you want to overwrite it? Evaluating database entries against HIBP file, this will take a while… - Evaluating database entries against HIBP file, this will take a while… + Mengevaluasi entri basis data terhadap berkas HIBP, ini akan membutuhkan beberapa saat... Password for '%1' has been leaked %2 time(s)! @@ -7532,23 +6517,23 @@ Do you want to overwrite it? Password for '%1' has been leaked! - Password for '%1' has been leaked! + Kata sandi untuk '%1' telah bocor! Export an attachment of an entry. - Export an attachment of an entry. + Ekspor lampiran dari entri. Path of the entry with the target attachment. - Path of the entry with the target attachment. + Jalur ke entri berisi lampiran target. Name of the attachment to be exported. - Name of the attachment to be exported. + Nama lampiran yang akan diekspor. Path to which the attachment should be exported. - Path to which the attachment should be exported. + Jalur tujuan ekspor lampiran. Could not find entry with path %1. @@ -7556,68 +6541,68 @@ Do you want to overwrite it? Could not find attachment with name %1. - Could not find attachment with name %1. + Tidak dapat menemukan lampiran bernama %1. No export target given. Please use '--stdout' or specify an 'export-file'. - No export target given. Please use '--stdout' or specify an 'export-file'. + Tidak ada target ekspor. Harap gunakan '--stdout' atau tentukan 'berkas ekspor'. Could not open output file %1. - Could not open output file %1. + Tidak dapat membuka hasil berkas %1 Successfully exported attachment %1 of entry %2 to %3. - Successfully exported attachment %1 of entry %2 to %3. + Sukses mengekspor lampiran %1 dari entri %2 ke %3 Overwrite existing attachments. - Overwrite existing attachments. + Menulis ulang lampiran yang sudah ada Imports an attachment to an entry. - Imports an attachment to an entry. + Mengimpor sebuah lampiran untuk sebuah entri Path of the entry. - Path of the entry. + Jalur entri Name of the attachment to be added. - Name of the attachment to be added. + Nama lampiran untuk ditambahkan Path of the attachment to be imported. - Path of the attachment to be imported. + Jalur ke lampiran yang akan diimpor. Attachment %1 already exists for entry %2. - Attachment %1 already exists for entry %2. + Lampiran %1 sudah ada untuk entry %2 Could not open attachment file %1. - Could not open attachment file %1. + Tidak dapat membuka berkas lampiran %1 Successfully imported attachment %1 as %2 to entry %3. - Successfully imported attachment %1 as %2 to entry %3. + Sukses mengimpor lampiran %1 sebagai %2 ke entri %3. Remove an attachment of an entry. - Remove an attachment of an entry. + Buang lampiran dari entri Name of the attachment to be removed. - Name of the attachment to be removed. + Buang nama lampiran Successfully removed attachment %1 from entry %2. - Successfully removed attachment %1 from entry %2. + Berhasil membuang lampiran %1 dari entri %2 Copy the given attribute to the clipboard. Defaults to "password" if not specified. Don't translate "password", it refers to the attribute. - Copy the given attribute to the clipboard. Defaults to "password" if not specified. + Salin atribut yang diberikan ke papan klip. Standar pada "kata sandi" jika tidak ditentukan Copy the current TOTP to the clipboard (equivalent to "-a totp"). @@ -7625,7 +6610,7 @@ Do you want to overwrite it? Must match only one entry, otherwise a list of possible matches is shown. - Must match only one entry, otherwise a list of possible matches is shown. + Harus cocok hanya ke satu entri, jika tidak daftar kemungkinan yang cocok akan muncul Copy an entry's attribute to the clipboard. @@ -7638,7 +6623,7 @@ Do you want to overwrite it? Timeout before clearing the clipboard (default is %1 seconds, set to 0 for unlimited). - Timeout before clearing the clipboard (default is %1 seconds, set to 0 for unlimited). + Batas waktu sebelum menghapus papanklip (bawaan adalah %1, diatur ke 0 untuk tanpa batas) Invalid timeout value %1. @@ -7646,11 +6631,11 @@ Do you want to overwrite it? Multiple entries matching: - Multiple entries matching: + Beberapa entri cocok: Using matching entry: %1 - Using matching entry: %1 + Menggunakan entri yang cocok : %1 Entry %1 not found. @@ -7666,7 +6651,7 @@ Do you want to overwrite it? ERROR: attribute %1 is ambiguous, it matches %2. - ERROR: attribute %1 is ambiguous, it matches %2. + GAGAL: atribut %1 ambigu karena cocok dengan %2 Attribute "%1" not found. @@ -7674,7 +6659,7 @@ Do you want to overwrite it? Entry's "%1" attribute copied to the clipboard! - Entry's "%1" attribute copied to the clipboard! + Entri atribut "%1" telah disalin ke papan klip! Clearing the clipboard in %1 second(s)... @@ -7694,7 +6679,7 @@ Do you want to overwrite it? Silence password prompt and other secondary outputs. - Jangan tampilkan pengingat sandi dan kaluaran sekunder lainnya. + Jangan tampilkan pengingat sandi dan keluaran sekunder lainnya. Key file of the database. @@ -7710,7 +6695,7 @@ Do you want to overwrite it? Yubikey slot and optional serial used to access the database (e.g., 1:7370001). - Yubikey slot and optional serial used to access the database (e.g., 1:7370001). + Slot Yubikey dan serial opsional digunakan untuk mengakses basis data (misal 1:7370001) slot[:serial] @@ -7718,15 +6703,11 @@ Do you want to overwrite it? Missing positional argument(s). - Missing positional argument(s). + Kehilangan argumen positional. Too many arguments provided. - Too many arguments provided. - - - Path of the database. - Jalur ke basis data. + Terlalu banyak argumen yang diberikan. Target decryption time in MS for the database. @@ -7748,6 +6729,10 @@ Do you want to overwrite it? Create a new database. Buat basis data baru. + + Path of the database. + Jalur ke basis data. + Invalid decryption time %1. Waktu dekripsi tidak valid %1. @@ -7770,11 +6755,11 @@ Do you want to overwrite it? Benchmarking key derivation function for %1ms delay. - Benchmarking key derivation function for %1ms delay. + Mem-benchmark fungsi derivasi kunci untuk tundaan %1ms. Setting %1 rounds for key derivation function. - Setting %1 rounds for key derivation function. + Mengatur %1 putaran untuk fungsi derivasi kunci. error while setting database key derivation settings. @@ -7793,56 +6778,283 @@ Do you want to overwrite it? Berhasil membuat basis data baru. - Unset the password for the database. - Batal atur kata sandi untuk basis data. + Word count for the diceware passphrase. + Jumlah kata untuk frasa sandi diceware. - Unset the key file for the database. - Batal atur berkas kunci untuk basis data. + count + CLI parameter + jumlah - Edit a database. - Edit basis data. + Wordlist for the diceware generator. +[Default: EFF English] + Daftar kata untuk generator diceware. +[Bawaan: Inggris EFF] - Cannot use %1 and %2 at the same time. - Tidak dapat menggunakan %1 dan %2 secara bersamaan. + Generate a new random diceware passphrase. + Buat frasa sandi diceware acak yang baru. - Could not change the database key. - Tidak dapat mengubah kunci database. + Invalid word count %1 + Jumlah kata tidak valid %1 - Database was not modified. - Basis data tidak dimodifikasi. + The word list is too small (< 1000 items) + Daftar kata terlalu kecil (<1000 item) + + + Title for the entry. + Judul entri. + + + title + judul + + + Edit an entry. + Sunting sebuah entri. + + + Path of the entry to edit. + Jalur entri yang akan disunting. + + + Not changing any field for entry %1. + Tidak mengubah kolom apa pun untuk entri %1 + + + Enter new password for entry: + Masukkan sandi baru untuk entri: Writing the database failed: %1 Gagal menyimpan basis data: %1 - Successfully edited the database. - Berhasil mengedit database. + Successfully edited entry %1. + Berhasil menyunting entri %1. - Cannot remove password: The database does not have a password. - Tidak dapat menghapus kata sandi: Database tidak memiliki kata sandi. + Perform advanced analysis on the password. + Jalankan analisis tingkat lanjut pada sandi. - Cannot remove file key: The database does not have a file key. - Tidak dapat menghapus kunci file: Database tidak memiliki kunci file. + Password for which to estimate the entropy. + Sandi untuk diestimasi entropinya. - Loading the new key file failed: %1 - Gagal memuat file kunci baru: %1 + Estimate the entropy of a password. + Estimasi entropi sandi. - Found unexpected Key type %1 - Ditemukan tipe Kunci tidak terduga %1 + Length %1 + Panjang %1 - Cannot remove all the keys from a database. - Tidak dapat menghapus semua kunci dari database. + Entropy %1 + Entropi %1 + + + Log10 %1 + Log10 %1 + + + Multi-word extra bits %1 + Multi-word ekstra bit %1 + + + Type: Bruteforce + Tipe: Bruteforce + + + Type: Dictionary + Tipe: Dictionary + + + Type: Dict+Leet + Tipe: Dict+Leet + + + Type: User Words + Tipe: User Words + + + Type: User+Leet + Tipe: User+Leet + + + Type: Repeated + Tipe: Repeated + + + Type: Sequence + Tipe: Sequence + + + Type: Spatial + Tipe: Spatial + + + Type: Date + Tipe: Tanggal + + + Type: Bruteforce(Rep) + Tipe: Bruteforce(Rep) + + + Type: Dictionary(Rep) + Tipe: Dictioinary(Rep) + + + Type: Dict+Leet(Rep) + Tipe: Dict+Leet(Rep) + + + Type: User Words(Rep) + Tipe: User Words(Rep) + + + Type: User+Leet(Rep) + Tipe: User+Leet(Rep) + + + Type: Repeated(Rep) + Tipe: Repeated(Rep) + + + Type: Sequence(Rep) + Tipe: Sequence(Rep) + + + Type: Spatial(Rep) + Tipe: Spatial(Rep) + + + Type: Date(Rep) + Tipe: Date(Rep) + + + Type: Unknown (%1) + Tipe: Unknown(%1) + + + Entropy %1 (%2) + Entropi %1 (%2) + + + *** Password length (%1) != sum of length of parts (%2) *** + *** Panjang kata sandi (%1) != jumlah panjang bagian (%2) *** + + + Exit interactive mode. + Keluar dari mode interaktif. + + + Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. + Format yang digunakan ketika mengekspor. Pilihan yang tersedia adalah 'xml' atau 'csv'. Standarnya adalah 'xml'. + + + Exports the content of a database to standard output in the specified format. + Ekspor konten dari basis data ke keluaran standar dalam format yang ditentukan. + + + Unable to export database to XML: %1 + Tidak bisa mengekspor basis data ke XML: %1 + + + Unsupported format %1 + Format tidak didukung %1 + + + Length of the generated password + Panjang dari sandi yang dibuat + + + length + panjang + + + Use lowercase characters + Gunakan karakter huruf kecil + + + Use uppercase characters + Gunakan karakter huruf besar + + + Use numbers + Gunakan angka + + + Use special characters + Gunakan karakter spesial + + + Use extended ASCII + Gunakan ASCII lanjutan + + + Exclude character set + Kecualikan karakter + + + chars + karakter + + + Use custom character set + Gunakan set karakter khusus + + + Exclude similar looking characters + Kecualikan karakter yang mirip + + + Include characters from every selected group + Sertakan karakter dari setiap grup yang dipilih + + + Generate a new random password. + Buat kata sandi baru secara acak. + + + Invalid password length %1 + Panjang sandi tidak valid %1 + + + Invalid password generator after applying all options + Generator kata sandi tidak sah setelah menerapkan semua opsi + + + Display command help. + Tampilkan bantuan perintah. + + + Available commands: + Perintah yang tersedia: + + + Import the contents of an XML database. + Impor konten dari basis data XML. + + + Path of the XML database export. + Jalur ke berkas XML hasil ekspor basis data. + + + Path of the new database. + Jalur dari basis data baru. + + + Unable to import XML database: %1 + Tidak bisa mengimpor basis data XML: %1 + + + Successfully imported database. + Berhasil mengimpor basis data. Show a database's information. @@ -7882,7 +7094,7 @@ Do you want to overwrite it? Database created - Database created + Basis data berhasil dibuat Last saved @@ -7944,273 +7156,6 @@ Do you want to overwrite it? %1 characters %1 karakter - - Word count for the diceware passphrase. - Jumlah kata untuk frasa sandi diceware. - - - count - CLI parameter - jumlah - - - Wordlist for the diceware generator. -[Default: EFF English] - Daftar kata untuk generator diceware. -[Bawaan: Inggris EFF] - - - Generate a new random diceware passphrase. - Buat frasa sandi diceware acak yang baru. - - - Invalid word count %1 - Jumlah kata tidak valid %1 - - - Title for the entry. - Judul entri. - - - title - judul - - - Edit an entry. - Sunting sebuah entri. - - - Path of the entry to edit. - Jalur entri yang akan disunting. - - - Not changing any field for entry %1. - Not changing any field for entry %1. - - - Enter new password for entry: - Masukkan sandi baru untuk entri: - - - Successfully edited entry %1. - Berhasil menyunting entri %1. - - - Perform advanced analysis on the password. - Jalankan analisis tingkat lanjut pada sandi. - - - Password for which to estimate the entropy. - Sandi untuk diestimasi entropinya. - - - Estimate the entropy of a password. - Estimasi entropi sandi. - - - Length %1 - Panjang %1 - - - Entropy %1 - Entropi %1 - - - Log10 %1 - Log10 %1 - - - Multi-word extra bits %1 - Multi-word extra bits %1 - - - Type: Bruteforce - Tipe: Bruteforce - - - Type: Dictionary - Tipe: Dictionary - - - Type: Dict+Leet - Tipe: Dict+Leet - - - Type: User Words - Tipe: User Words - - - Type: User+Leet - Tipe: User+Leet - - - Type: Repeated - Tipe: Repeated - - - Type: Sequence - Tipe: Sequence - - - Type: Spatial - Tipe: Spatial - - - Type: Date - Tipe: Tanggal - - - Type: Bruteforce(Rep) - Type: Bruteforce(Rep) - - - Type: Dictionary(Rep) - Type: Dictionary(Rep) - - - Type: Dict+Leet(Rep) - Type: Dict+Leet(Rep) - - - Type: User Words(Rep) - Type: User Words(Rep) - - - Type: User+Leet(Rep) - Type: User+Leet(Rep) - - - Type: Repeated(Rep) - Type: Repeated(Rep) - - - Type: Sequence(Rep) - Type: Sequence(Rep) - - - Type: Spatial(Rep) - Type: Spatial(Rep) - - - Type: Date(Rep) - Type: Date(Rep) - - - Type: Unknown (%1) - Type: Unknown (%1) - - - Entropy %1 (%2) - Entropi %1 (%2) - - - *** Password length (%1) != sum of length of parts (%2) *** - *** Panjang kata sandi (%1) != jumlah panjang bagian (%2) *** - - - Exit interactive mode. - Keluar dari mode interaktif. - - - Exports the content of a database to standard output in the specified format. - Ekspor konten dari basis data ke keluaran standar dalam format yang ditentukan. - - - Unable to export database to XML: %1 - Tidak bisa mengekspor basis data ke XML: %1 - - - Unsupported format %1 - Format tidak didukung %1 - - - Length of the generated password - Panjang dari sandi yang dibuat - - - length - panjang - - - Use lowercase characters - Gunakan karakter huruf kecil - - - Use uppercase characters - Gunakan karakter huruf besar - - - Use numbers - Gunakan angka - - - Use special characters - Gunakan karakter spesial - - - Use extended ASCII - Gunakan ASCII lanjutan - - - Exclude character set - Kecualikan karakter - - - chars - karakter - - - Use custom character set - Use custom character set - - - Exclude similar looking characters - Kecualikan karakter yang mirip - - - Include characters from every selected group - Sertakan karakter dari setiap grup yang dipilih - - - Generate a new random password. - Buat kata sandi baru secara acak. - - - Invalid password length %1 - Panjang sandi tidak valid %1 - - - Invalid password generator after applying all options - Invalid password generator after applying all options - - - Display command help. - Tampilkan bantuan perintah. - - - Available commands: - Perintah yang tersedia: - - - Import the contents of an XML database. - Impor konten dari basis data XML. - - - Path of the XML database export. - Jalur ke berkas XML hasil ekspor basis data. - - - Path of the new database. - Jalur dari basis data baru. - - - Unable to import XML database: %1 - Tidak bisa mengimpor basis data XML: %1 - - - Successfully imported database. - Berhasil mengimpor basis data. - Unknown command %1 Perintah tidak diketahui %1 @@ -8383,13 +7328,9 @@ Perintah yang tersedia: Show the protected attributes in clear text. Tampilkan atribut yang dilindungi dalam teks yang jelas. - - Show all the attributes of the entry. - Tampilkan semua atribut entri. - Show the attachments of the entry. - Show the attachments of the entry. + Tampilkan lampiran dari entri. 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. @@ -8413,11 +7354,11 @@ Perintah yang tersedia: No attachments present. - No attachments present. + Tidak ada lampiran. Attachments: - Attachments: + Lampiran: Failed to open database file %1: not found @@ -8457,10 +7398,6 @@ Mohon buat berkas kunci yang baru saja. Invalid YubiKey serial %1 Serial YubiKey tidak valid %1 - - Please present or touch your YubiKey to continue. - Please present or touch your YubiKey to continue. - Enter password to encrypt database (optional): Masukkan sandi untuk mengenkripsi basis data (opsional): @@ -8484,7 +7421,7 @@ Mohon buat berkas kunci yang baru saja. All clipping programs failed. Tried %1 - All clipping programs failed. Tried %1 + Semua program pemenggalan gagal. Dicoba %1 @@ -8501,19 +7438,19 @@ Mohon buat berkas kunci yang baru saja. To use okon, you must provide a post-processed file (e.g. file.okon) - To use okon, you must provide a post-processed file (e.g. file.okon) + Untuk memakai okon, Anda mesti menyediakan berkas yang ter-pasca-proses (mis. berkas.okon) Could not start okon process: %1 - Could not start okon process: %1 + Tidak dapat menjalankan proses okon: %1 Error: okon process did not finish - Error: okon process did not finish + Galat: proses okon tidak selesai Failed to load okon processed database: %1 - Failed to load okon processed database: %1 + Gagal memuat basis data proses okon: %1 Very weak password @@ -8533,7 +7470,7 @@ Mohon buat berkas kunci yang baru saja. Password is used %1 time(s) - Kata sandi telah digunakan %1 kali + Kata sandi sudah digunakan sebanyak %1 kali Password has expired @@ -8625,11 +7562,11 @@ Kernel: %3 %4 over %1 year(s) - lebih dari %1 tahun + lebih % 1 tahun about %1 month(s) - sekitar %1 bulan + sekitar % 1 bulan %1 week(s) @@ -8649,7 +7586,7 @@ Kernel: %3 %4 Botan library must be at least %1, found %2.%3.%4 - Pustaka Botan mesti setidaknya %1, ditemukan %2.%3.%4 + Cryptographic libraries: @@ -8665,27 +7602,27 @@ Kernel: %3 %4 SymmetricCipher::init: Invalid cipher mode. - SymmetricCipher::init: Invalid cipher mode. + SymmetricCipher::init: Mode cipher tidak valid. SymmetricCipher::init: Invalid IV size of %1 for %2. - SymmetricCipher::init: Invalid IV size of %1 for %2. + SymmetricCipher::init: Ukuran IV tidak valid sebesar %1 untuk %2. Cipher not initialized prior to use. - Cipher not initialized prior to use. + Cipher tidak diinisialisasi sebelum dipakai. Cannot process 0 length data. - Cannot process 0 length data. + Tidak bisa memroses data dengan panjang 0. unknown executable (DBus address %1) - unknown executable (DBus address %1) + executable tak dikenal (alamat DBus %1) %1 (invalid executable path) - %1 (invalid executable path) + %1 (path executable tidak valid) NULL device @@ -8699,6 +7636,18 @@ Kernel: %3 %4 file empty berkas kosong + + malformed string + lema rusak + + + missing closing quote + kehilangan tanda kutip tutup + + + %1: (row, col) %2,%3 + %1: (baris, kolom) %2,%3 + AES 256-bit AES 256-bit @@ -8729,7 +7678,7 @@ Kernel: %3 %4 Existing single-instance lock file is invalid. Launching new instance. - Existing single-instance lock file is invalid. Launching new instance. + File kunci contoh tunggal yang ada tidak valid. Luncurkan contoh baru. The lock file could not be created. Single-instance mode disabled. @@ -8737,7 +7686,7 @@ Kernel: %3 %4 Clearing the clipboard in %1 second(s)… - Menghapus papan klip dalam %1 detik... + Membersihkan papan klip dalam %1 second(s)… Group @@ -8787,23 +7736,23 @@ Kernel: %3 %4 Do you really want to delete the entry "%1" for good? - Apakah Anda yakin ingin menghapus entri "%1" untuk selamanya? + Apakah anda yakin ingin menghapus entri "%1" untuk selamanya? Do you really want to delete %n entry(s) for good? - Apakah Anda yakin ingin menghapus %n entri untuk selamanya? + Apakah anda yakin ingin menghapus %n entri untuk selamanya? Delete entry(s)? - Hapus masukan? + Hapus entri? Do you really want to move entry "%1" to the recycle bin? - Apakah Anda yakin ingin memindahkan "%1" ke keranjang sampah? + Apakah Anda benar-benar ingin memindahkan entri "%1" 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? Move entry(s) to recycle bin? @@ -8877,6 +7826,14 @@ Kernel: %3 %4 read password of the database from stdin baca sandi basis data dari stdin + + allow app screen recordering and screenshots + izinkan perekam layar dan tangkapan layar aplikasi + + + Locked databases. + Basis Data terkunci. + Database failed to lock. Basis Data gagal dikunci. @@ -8885,10 +7842,6 @@ Kernel: %3 %4 Another instance of KeePassXC is already running. Aplikasi KeePassXC lainnya sudah berjalan. - - KeePassXC is not running. No open database to lock - KeePassXC tidak berjalan. Tidak ada database terbuka untuk dikunci - Fatal error while testing the cryptographic functions. Galat saat menguji fungsi kriptografi. @@ -8913,11 +7866,11 @@ Kernel: %3 %4 Failed to create Windows Hello credential. - Failed to create Windows Hello credential. + Gagal membuat kredensial Windows Hello. Failed to sign challenge using Windows Hello. - Failed to sign challenge using Windows Hello. + Gagal menandatangani tantangan menggunakan Windows Hello. Warning: Failed to block screenshot capture on a top-level window. @@ -8932,299 +7885,70 @@ Kernel: %3 %4 KDF tidak valid - Access to all entries is denied - Akses pada semua masukan ditolak + Please present or touch your YubiKey to continue. + Tampilkan atau sentuh YubiKey untuk melanjutkan. - allow screenshots and app recording (Windows/macOS) - izinkan pencuplikan layar dan perekaman aplikasi (Windows/macOS) + Show all the attributes of the entry. + Tampilkan semua atribut entri. + + + Edit a database. + Edit basis data. + + + Could not change the database key. + Tidak dapat mengubah kunci database. + + + Database was not modified. + Basis data tidak dimodifikasi. + + + Successfully edited the database. + Berhasil mengedit database. + + + Loading the new key file failed: %1 + Gagal memuat file kunci baru: %1 + + + Unset the password for the database. + Batal atur kata sandi untuk basis data. + + + Unset the key file for the database. + Batal atur berkas kunci untuk basis data. + + + Cannot use %1 and %2 at the same time. + Tidak dapat menggunakan %1 dan %2 secara bersamaan. + + + Cannot remove all the keys from a database. + Tidak dapat menghapus semua kunci dari database. + + + Cannot remove password: The database does not have a password. + Tidak dapat menghapus kata sandi: Database tidak memiliki kata sandi. + + + Cannot remove file key: The database does not have a file key. + Tidak dapat menghapus kunci file: Database tidak memiliki kunci file. + + + Found unexpected Key type %1 + Ditemukan tipe Kunci tidak terduga %1 Set the key file for the database. -This option is deprecated, use --set-key-file instead. - +This options is deprecated, use --set-key-file instead. + Atur berkas kunci untuk basis data. +Opsi ini tidak digunakan lagi, gunakan --set-key-file sebagai gantinya. - Databases have been locked. - - - - Attestation not supported - - - - Credential is excluded - - - - Passkeys request canceled - - - - Invalid user verification - - - - Empty public key - - - - Invalid URL provided - - - - Passkeys - - - - AES initialization failed - - - - AES encrypt failed - - - - Failed to store in Linux Keyring - - - - Polkit returned an error: %1 - - - - Could not locate key in keyring - - - - Could not read key in keyring - - - - AES decrypt failed - - - - No Polkit authentication agent was available - - - - Polkit authorization failed - - - - No Quick Unlock provider is available - - - - Failed to init KeePassXC crypto. - Gagal menginisialisasi kripto KeePassXC. - - - Failed to encrypt key data. - Gagal mengenkripsi data kunci. - - - Failed to get Windows Hello credential. - Gagal mendapatkan kredensial Windows Hello. - - - Failed to decrypt key data. - Gagal mendekripsi data kunci. - - - Origin is empty or not allowed - - - - Effective domain is not a valid domain - - - - Origin and RP ID do not match - - - - No supported algorithms were provided - - - - Wait for timer to expire - - - - Challenge is shorter than required minimum length - - - - user.id does not match the required length - - - - Favorite - Tag for favorite entries - - - - File does not exist. - - - - Cannot open file: %1 - - - - Cannot parse file: %1 at position %2 - - - - Failed to decrypt json file: %1 - - - - Invalid encKeyValidation field - - - - Invalid cipher list within encKeyValidation field - - - - Wrong password - - - - Invalid encrypted data field - - - - Invalid cipher list within encrypted data field - - - - Cannot initialize cipher - - - - Cannot decrypt data - - - - Bitwarden Import - - - - Archived - Tag for archived entries - - - - Invalid 1PUX file format: Not a valid ZIP file. - - - - Invalid 1PUX file format: Missing export.data - - - - 1Password Import - - - - Enter Shortcut - - - - Action - - - - Shortcuts - - - - Unknown passkeys error - - - - Invalid KDF iterations, cannot decrypt json file - - - - Unsupported format, ensure your Bitwarden export is password-protected - - - - Only PBKDF and Argon2 are supported, cannot decrypt json file - - - - Reset Shortcuts - - - - Double click an action to change its shortcut - - - - Filter... - - - - Shortcut Conflict - - - - Shortcut %1 conflicts with '%2'. Overwrite shortcut? - - - - Cannot generate valid passphrases because the wordlist is too short - - - - Encrypted files are not supported. - - - - Proton Pass Import - - - - Delete plugin data? - Hapus data pengaya? - - - Delete plugin data from Entry(s)? - - - - Passkey - Kunci akses - - - Format to use when exporting. Available choices are 'xml', 'csv' or 'html'. Defaults to 'xml'. - - - - start minimized to the system tray - - - - malformed string, possible unescaped delimiter - - - - missing closing delimiter - - - - %1, row: %2, column: %3 - - - - Tags - Tag + KeePassXC is not running. No open database to lock + KeePassXC tidak berjalan. Tidak ada database terbuka untuk dikunci @@ -9261,62 +7985,43 @@ This option is deprecated, use --set-key-file instead. Galat zlib internal: - - RemoteHandler - - Command `%1` did not finish in time. Process was killed. - - - - Failed to upload merged database. Command `%1` did not finish in time. Process was killed. - - - - Invalid download parameters provided. - - - - Command `%1` failed to download database. - - - - Invalid database pointer or upload parameters provided. - - - - Command `%1` exited with status code: %2 - - - - Failed to upload merged database. Command `%1` exited with status code: %2 - - - ReportsWidgetBrowserStatistics + + Exclude expired entries from the report + Kecualikan entri kedaluwarsa dari laporan + + + Show only entries which have URL set + Hanya tampilkan entri yang memiliki set URL + + + Show only entries which have browser settings in custom data + Hanya tampilkan entri yang memiliki pengaturan peramban dalam data kustom + Double-click entries to edit. - Double-click entries to edit. + Klik ganda entri untuk mengedit. List of entry URLs - List of entry URLs + Daftar entri URL Entry has no URLs set - Entry has no URLs set + Entri tidak memiliki set URL Allowed URLs - Allowed URLs + Izinkan URL Entry has no Browser Integration settings - Entry has no Browser Integration settings + Entri tidak memiliki pengaturan Integrasi Peramban Denied URLs - Denied URLs + URL ditolak (Excluded) @@ -9328,11 +8033,11 @@ This option is deprecated, use --set-key-file instead. Please wait, browser statistics is being calculated… - Please wait, browser statistics is being calculated… + Harap tunggu, statistik peramban sedang dikalkulasi... No entries with a URL, or none has browser extension settings saved. - No entries with a URL, or none has browser extension settings saved. + Tidak ada entri dengan URL, atau tidak ada pengaturan pengaya peramban yang disimpan. Title @@ -9344,67 +8049,58 @@ This option is deprecated, use --set-key-file instead. URLs - URLs + URL Edit Entry… - Edit Entry… + Edit Entri... Delete Entry(s)… - Hapus Masukan... + Hapus Entri... Exclude from reports Kecualikan dari laporan - - Expire Entry(s)… - - - - Only show entries that have a URL - - - - Only show entries that have been explicitly allowed or denied - - - - Show expired entries - - - - (Expired) - - - - Delete plugin data from Entry(s)… - - ReportsWidgetHealthcheck - Show expired entries - + Exclude expired entries from the report + Kecualikan entri kedaluwarsa dari laporan - (Expired) - + Also show entries that have been excluded from reports + Tampilkan juga entri yang telah dikecualikan dari laporan Hover over reason to show additional details. Double-click entries to edit. Layangi di atas alasan untuk menampilkan detail lanjutan. Klik dua kali pada entri untuk mengedit. + + Bad + Password quality + Buruk + Bad — password must be changed Buruk — kata sandi harus diubah + + Poor + Password quality + Buruk + Poor — password should be changed Kurang baik — kata sandi harus diubah + + Weak + Password quality + Lemah + Weak — consider changing the password Lemah — pertimbangkan untuk mengubah kata sandi @@ -9419,7 +8115,7 @@ This option is deprecated, use --set-key-file instead. Please wait, health data is being calculated… - Please wait, health data is being calculated… + Harap tunggu, data kesehatan sedang dikalkulasi... Congratulations, everything is healthy! @@ -9443,24 +8139,16 @@ This option is deprecated, use --set-key-file instead. Edit Entry… - Edit Entry… + Edit Entri... Delete Entry(s)… - Hapus Masukan... + Hapus Entri... Exclude from reports Kecualikan dari laporan - - Expire Entry(s)… - - - - Show entries that have been excluded from reports - - ReportsWidgetHibp @@ -9470,7 +8158,7 @@ This option is deprecated, use --set-key-file instead. Perform Online Analysis - Jalankan Analisis Daring + Lakukan Analisis Online Also show entries that have been excluded from reports @@ -9544,88 +8232,17 @@ This option is deprecated, use --set-key-file instead. Password exposure amount jutaan kali - - Edit Entry… - Edit Entry… - - - Delete Entry(s)… - Hapus Masukan... - - - Exclude from reports - Kecualikan dari laporan - - - Expire Entry(s)… - - - - - ReportsWidgetPasskeys - - Export - Ekspor - - - Import - Impor - - - List of entry URLs - Daftar entri URL - - - Title - Judul - - - Path - Jalur - - - Username - Nama pengguna - - - URLs - URL - Edit Entry… Edit Entri... Delete Entry(s)… - Hapus Masukan... + Hapus Entri... - Relying Party - - - - Show expired entries - - - - (Expired) - - - - Export Confirmation - Konfirmasi Ekspor - - - The passkey file will be vulnerable to theft and unauthorized use, if left unsecured. Are you sure you want to continue? - - - - Please wait, list of entries with passkeys is being updated… - - - - No entries with passkeys. - + Exclude from reports + Kecualikan dari laporan @@ -9644,7 +8261,7 @@ This option is deprecated, use --set-key-file instead. Please wait, database statistics are being calculated… - Please wait, database statistics are being calculated… + Harap tunggu, statistik basis data sedang dikalkulasi... Database name @@ -9660,7 +8277,7 @@ This option is deprecated, use --set-key-file instead. Database created - Database created + Basis data berhasil dibuat Last saved @@ -9771,7 +8388,7 @@ This option is deprecated, use --set-key-file instead. Key identity ownership conflict. Refusing to add. - Key identity ownership conflict. Refusing to add. + Konflik kepemilikan identitas utama. Menolak untuk menambahkan. Agent refused this identity. Possible reasons include: @@ -9783,15 +8400,15 @@ This option is deprecated, use --set-key-file instead. Restricted lifetime is not supported by the agent (check options). - Restricted lifetime is not supported by the agent (check options). + Masa pakai yang dibatasi tidak didukung oleh agen (periksa opsi). A confirmation request is not supported by the agent (check options). - A confirmation request is not supported by the agent (check options). + Permintaan konfirmasi tidak didukung oleh agen (periksa opsi). Security keys are not supported by the agent or the security key provider is unavailable. - Security keys are not supported by the agent or the security key provider is unavailable. + Kunci keamanan tidak didukung oleh agen atau penyedia kunci keamanan tidak tersedia. No agent running, cannot remove identity. @@ -9801,14 +8418,6 @@ This option is deprecated, use --set-key-file instead. No agent running, cannot list identities. Tidak ada agen yang berjalan, tidak dapat mendaftarkan identitas. - - Failed to remove all SSH identities from agent. - - - - All SSH identities removed from agent. - - SearchHelpWidget @@ -9822,11 +8431,11 @@ This option is deprecated, use --set-key-file instead. Every search term must match (ie, logical AND) - Every search term must match (ie, logical AND) + Setiap istilah pencarian harus sama (yaitu, logis DAN) Modifiers - Modifiers + Pemodifikasi exclude term from results @@ -9834,11 +8443,11 @@ This option is deprecated, use --set-key-file instead. match term exactly - match term exactly + cocokkan istilah persis use regex in term - use regex in term + Gunakan regex pada istilah Fields @@ -9846,19 +8455,19 @@ This option is deprecated, use --set-key-file instead. Term Wildcards - Term Wildcards + Kartu Liar Istilah match anything - match anything + cocokkan apa saja match one - match one + cocokkan satu logical OR - logical OR + OR logis Examples @@ -9875,10 +8484,6 @@ This option is deprecated, use --set-key-file instead. Search Help Cari Bantuan - - Save Search - Simpan pencarian - Search (%1)… Search placeholder text, %1 is the keyboard shortcut @@ -9892,6 +8497,10 @@ This option is deprecated, use --set-key-file instead. Limit search to selected group Batasi pencarian ke grup yang dipilih + + Save Search + Simpan pencarian + SettingsClientModel @@ -9905,7 +8514,7 @@ This option is deprecated, use --set-key-file instead. DBus Address - DBus Address + Alamat DBus Manage @@ -9943,19 +8552,43 @@ This option is deprecated, use --set-key-file instead. Show notification when passwords are retrieved by clients - Show notification when passwords are retrieved by clients + Tampilkan pemberitahuan saat kata sandi dipulihkan oleh klien <html><head/><body><p>If enabled, any attempt to read a password must be confirmed. Otherwise, clients can read passwords without confirmation when the database is unlocked.</p><p>This option only covers the access to the password of an entry. Clients can always enumerate the items of exposed databases and query their attributes.</p></body></html> - <html><head/><body><p>If enabled, any attempt to read a password must be confirmed. Otherwise, clients can read passwords without confirmation when the database is unlocked.</p><p>This option only covers the access to the password of an entry. Clients can always enumerate the items of exposed databases and query their attributes.</p></body></html> + <html><head/><body><p>Jika diaktifkan, percobaan apa pun untuk membaca kata sandi harus dikonfirmasi. Jika tidak, klien dapat membaca kata sandi tanpa konfirmasi ketika basis data tidak terkunci.</p><p>Opsi ini hanya menangani akses untuk kata sandi masuk. Klien kapan pun dapat menyebutkan satu per satu item-item dari basis data yang terekspos dan meminta atributnya.</p></body></html> Confirm when passwords are retrieved by clients - Confirm when passwords are retrieved by clients + Konfirmasi apabila kata sandi diambil oleh klien + + + <html><head/><body><p><span style=" + font-family:'-apple-system','BlinkMacSystemFont','Segoe UI','Helvetica','Arial','sans-serif','Apple Color + Emoji','Segoe UI Emoji'; font-size:14px; color:#24292e; background-color:#ffffff;">This setting does + not override disabling recycle bin prompts</span></p></body></html> + + <html><head/><body><p><span style=" + font-family:'-apple-system','BlinkMacSystemFont','Segoe UI','Helvetica','Arial','sans-serif','Apple Color + Emoji','Segoe UI Emoji'; font-size:14px; color:#24292e; background-color:#ffffff;">Pengaturan ini + tidak mengambil alih penonaktifan permintaan kotak sampah</span></p></body></html> + Confirm when clients request entry deletion - Confirm when clients request entry deletion + Konfirmasi jika klien meminta penghapusan entri + + + <html><head/><body><p>This improves compatibility with certain applications + which search for password without unlocking the database first.</p><p>But enabling this may also + crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a + different value set in applications.)</p></body></html> + + <html><head/><body><p>Ini meningkatkan kompatibiltas dengan aplikasi tertentu + yang mencari kata sandi tanpa terlebih dahulu membuka kunci basis data .</p><p>Tetapi mengaktifkan ini dapat juga + melumpuhkan klien jika basis data tidak dapat terbuka dalam batas waktu tertentu (Biasanya 25 detik, namun mungkin + nilai yang berbeda ditetapkan di aplikasi.)</p></body></html> + Prompt to unlock database before searching @@ -9979,15 +8612,7 @@ This option is deprecated, use --set-key-file instead. Save current changes to activate the plugin and enable editing of this section. - Save current changes to activate the plugin and enable editing of this section. - - - <html><head/><body><p>This setting does not override disabling recycle bin prompts </p></body></html> - - - - <html><head/><body><p>This improves compatibility with certain applications which search for password without unlocking the database first.</p><p>But enabling this may also crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a different value set in applications.) </p></body></html> - + Simpan perubahan saat ini untuk mengaktifkan plugin dan aktifkan pengeditan bagian ini. @@ -10022,7 +8647,7 @@ This option is deprecated, use --set-key-file instead. Signer: - Signer: + Penandatangan: Generate new certificate @@ -10049,14 +8674,14 @@ This option is deprecated, use --set-key-file instead. ShareExport Could not write export container. - Could not write export container. + Tidak bisa menuliskan wadah ekspor. ShareImport Successful import - Successful import + Berhasil mengimpor @@ -10075,11 +8700,11 @@ This option is deprecated, use --set-key-file instead. Multiple import source path to %1 in %2 - Multiple import source path to %1 in %2 + Beberapa jalur sumber impor ke %1 dalam %2 Conflicting export target path %1 in %2 - Conflicting export target path %1 in %2 + Jalur target ekspor yang bertentangan %1 dalam%2 Export to %1 failed (%2) @@ -10096,14 +8721,6 @@ This option is deprecated, use --set-key-file instead. TagModel - - Clear Search - Hapus Pencarian - - - All Entries - Semua Entri - Expired Kedaluwarsa @@ -10112,6 +8729,14 @@ This option is deprecated, use --set-key-file instead. Weak Passwords Kata Sandi Lemah + + All Entries + Semua Entri + + + Clear Search + Hapus Pencarian + TagView @@ -10187,15 +8812,15 @@ This option is deprecated, use --set-key-file instead. Default settings (RFC 6238) - Default settings (RFC 6238) + Pengaturan default (RFC 6238) Steam® settings - Steam® settings + Pengaturan Steam® Custom settings: - Custom settings: + Pengaturan kustom: Custom Settings @@ -10211,7 +8836,7 @@ This option is deprecated, use --set-key-file instead. Time step field - Time step field + Bidang langkah waktu sec @@ -10242,7 +8867,7 @@ Contoh: JBSWY3DPEHPK3PXP Are you sure you want to delete TOTP settings for this entry? - Apakah Anda yakin ingin menghapus pengaturan TOTP untuk entri ini? + Apakah anda yakin ingin menghapus pengaturan TOTP untuk entri ini? @@ -10260,7 +8885,7 @@ Contoh: JBSWY3DPEHPK3PXP Checking for updates… - Checking for updates… + Memeriksa pembaruan… Close @@ -10272,7 +8897,7 @@ Contoh: JBSWY3DPEHPK3PXP An error occurred when trying to retrieve update information, please try again later. - An error occurred when trying to retrieve update information, please try again later. + Terjadi kesalahan saat mencoba mengambil informasi pembaruan, silakan coba lagi nanti. <strong>A new version is available.</strong><br/>KeePassXC %1 can be <a href="https://keepassxc.org/download/">downloaded here</a>. @@ -10280,7 +8905,7 @@ Contoh: JBSWY3DPEHPK3PXP You have the latest version of KeePassXC - You have the latest version of KeePassXC + Anda memiliki KeePassXC versi terbaru @@ -10289,6 +8914,26 @@ Contoh: JBSWY3DPEHPK3PXP Start storing your passwords securely in a KeePassXC database Mulai menyimpan sandi Anda dengan aman di dalam basis data KeePassXC + + Create new database + Buat basis data baru + + + Open existing database + Buka basis data yang ada + + + Import from KeePass 1 + Impor dari KeePass 1 + + + Import from 1Password + Impor dari 1Password + + + Import from CSV + Impor dari CSV + Recent databases Basis Data baru-baru ini @@ -10301,24 +8946,12 @@ Contoh: JBSWY3DPEHPK3PXP Welcome to KeePassXC %1 Selamat datang di KeePassXC %1 - - Create Database - - - - Open Database - - - - Import File - - WinUtils Invalid key code - Invalid key code + Kode kunci tidak valid Global shortcut already registered to %1 @@ -10329,19 +8962,50 @@ Contoh: JBSWY3DPEHPK3PXP Tidak bisa mendaftar pintasan global + + WindowsHello + + Failed to init KeePassXC crypto. + Gagal menginisialisasi kripto KeePassXC. + + + Failed to encrypt key data. + Gagal mengenkripsi data kunci. + + + Failed to get Windows Hello credential. + Gagal mendapatkan kredensial Windows Hello. + + + Failed to decrypt key data. + Gagal mendekripsi data kunci. + + YubiKey + + %1 No interface, slot %2 + %1 Tanpa antarmuka, slot %2 + General: Umum: Could not find interface for hardware key with serial number %1. Please connect it to continue. - Could not find interface for hardware key with serial number %1. Please connect it to continue. + Tidak dapat menemukan antarmuka untuk kunci perangkat keras dengan nomor seri %1. Sambungkan untuk melanjutkan. YubiKeyEditWidget + + Refresh hardware tokens + Segarkan token perangkat keras + + + Refresh + Segarkan + Hardware key slot selection Pemilihan slot kunci perangkat keras @@ -10352,7 +9016,7 @@ Contoh: JBSWY3DPEHPK3PXP Selected hardware key slot does not support challenge-response! - Selected hardware key slot does not support challenge-response! + Slot hardware key tidak mendukung challenge-response! Challenge-Response @@ -10360,19 +9024,23 @@ Contoh: JBSWY3DPEHPK3PXP Add Challenge-Response - Add Challenge-Response + Tambahkan Challenge-Response Change Challenge-Response - Change Challenge-Response + Ubah Tantangan-Respons Remove Challenge-Response - Remove Challenge-Response + Hapus Challenge-Response Challenge-Response set, click to change or remove - Challenge-Response set, click to change or remove + Tantangan-Respons diatur, klik untuk merubah atau menghapus + + + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + <p>Jika Anda memiliki <a href="https://www.yubico.com/">YubiKey</a> atau <a href="https://onlykey.io">OnlyKey</a>, Anda bisa menggunakannya sebagai pengaman tambahan.</p><p>Kunci ini memerlukan salah satu slotnya untuk diprogram sebagai <a href="https://www.yubico.com/products/services-software/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> Detecting hardware keys… @@ -10382,28 +9050,31 @@ Contoh: JBSWY3DPEHPK3PXP No hardware keys detected Tidak mendeteksi kunci perangkat keras + + + YubiKeyInterface - Refresh hardware keys - - - - <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed with <a href="https://keepassxc.org/docs/#faq-yubikey-howto">Challenge-Response</a>.</p> - - - - Hardware keys found, but no slots are configured - + %1 Invalid slot specified - %2 + %1 Slot yang ditentukan tidak valid - %2 YubiKeyInterfacePCSC + + (PCSC) %1 [%2] Challenge-Response - Slot %3 + (PCSC) %1 [%2] Challenge-Response - Slot %3 + The YubiKey PCSC interface has not been initialized. - The YubiKey PCSC interface has not been initialized. + Antarmuka PCSC YubiKey belum diinisialisasi. + + + Hardware key is currently in use. + Kunci perangkat keras sedang digunakan saat ini. Could not find or access hardware key with serial number %1. Please present it to continue. - Could not find or access hardware key with serial number %1. Please present it to continue. + Tidak dapat menemukan atau mengakses kunci perangkat keras dengan nomor seri %1. Tampilkan untuk melanjutkan. Hardware key is locked or timed out. Unlock or re-present it to continue. @@ -10411,26 +9082,11 @@ Contoh: JBSWY3DPEHPK3PXP Hardware key was not found or is not configured. - Hardware key was not found or is not configured. + Hardware key tidak ditemukan atau tidak dikonfigurasi. Failed to complete a challenge-response, the PCSC error code was: %1 - Failed to complete a challenge-response, the PCSC error code was: %1 - - - (NFC) %1 [%2] - Slot %3, %4 - YubiKey display fields - - - - Press - USB Challenge-Response Key interaction request - Tekan - - - Passive - USB Challenge-Response Key no interaction required - Pasif + Gagal menyelesaikan challenge-response, kode kesalahan PCSC-nya adalah: %1 @@ -10439,6 +9095,14 @@ Contoh: JBSWY3DPEHPK3PXP Unknown Tidak diketahui + + (USB) %1 [%2] Configured Slot - %3 + (USB) %1 [%2] Slot yang Dikonfigurasi - %3 + + + (USB) %1 [%2] Challenge-Response - Slot %3 - %4 + (USB) %1 [%2] Challenge-Response - Slot %3 - %4 + Press USB Challenge-Response Key interaction request @@ -10451,33 +9115,27 @@ Contoh: JBSWY3DPEHPK3PXP The YubiKey USB interface has not been initialized. - The YubiKey USB interface has not been initialized. + Antarmuka USB YubiKey belum diinisialisasi. + + + Hardware key is currently in use. + Kunci perangkat keras sedang digunakan saat ini. Could not find hardware key with serial number %1. Please plug it in to continue. - Could not find hardware key with serial number %1. Please plug it in to continue. + Tidak dapat menemukan kunci perangkat keras dengan nomor seri %1. Sambungkan untuk melanjutkan. Hardware key timed out waiting for user interaction. - Hardware key timed out waiting for user interaction. + Batas waktu kunci perangkat keras menunggu interaksi pengguna. A USB error occurred when accessing the hardware key: %1 - A USB error occurred when accessing the hardware key: %1 + Terjadi kesalahan USB saat mengakses hardware key: %1 Failed to complete a challenge-response, the specific error was: %1 - Failed to complete a challenge-response, the specific error was: %1 - - - %1 [%2] - Slot %3 - YubiKey NEO display fields - - - - %1 [%2] - Slot %3, %4 - YubiKey display fields - + Gagal menyelesaikan challenge-response, kesalahan spesifiknya adalah: %1 \ No newline at end of file diff --git a/share/translations/keepassxc_it.ts b/share/translations/keepassxc_it.ts index e2348b0db..53690c5dc 100644 --- a/share/translations/keepassxc_it.ts +++ b/share/translations/keepassxc_it.ts @@ -80,10 +80,6 @@ Details Dettagli - - Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. - Questa decisione verrà ricordata per tutta la durata mentre sia il client richiedente che KeePassXC sono in esecuzione. - Remember Ricorda @@ -92,6 +88,10 @@ Allow Selected Consenti selezionati + + Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. + Questa decisione verrà ricordata per tutta la durata mentre sia il client richiedente che KeePassXC sono in esecuzione. + Deny All && Future Nega tutto e futuri @@ -122,10 +122,6 @@ Use OpenSSH Usa OpenSSH - - Use both agents - Usa entrambi gli agenti - SSH_AUTH_SOCK override sostituire SSH_AUTH_SOCK @@ -154,6 +150,10 @@ SSH Agent connection is working! La connessione dell'agente SSH sta funzionando! + + Use both agents + Usa entrambi gli agenti + ApplicationSettingsWidget @@ -169,10 +169,6 @@ Security Sicurezza - - This setting cannot be enabled when minimize on unlock is enabled. - Questa impostazione non può essere abilitata quando è abilitata la riduzione a icona con lo sblocco. - Access error for config file %1 Errore di accesso per il file di configurazione %1 @@ -199,7 +195,7 @@ Monochrome - Monocromatica + Monocromatico Monochrome (light) @@ -217,49 +213,21 @@ You must restart the application to set the new language. Would you like to restart now? Per impostare la nuova lingua è necessario riavviare l'applicazione. Vuoi riavviare ora? + + Reset Settings? + Vuoi ripristinare le impostazioni? + + + Are you sure you want to reset all general and security settings to default? + Sei sicuro di voler ripristinare tutte le impostazioni generali e di sicurezza predefinite? + Select backup storage directory Seleziona cartella salvataggio backup - Confirm Reset - Conferma il ripristino - - - Are you sure you want to reset all settings to default? - Sei sicuro di voler ripristinare tutte le impostazioni ai valori predefiniti? - - - Import KeePassXC Settings - Importa impostazioni KeePassXC - - - Failed to import settings from %1, not a valid settings file. - Impossibile importare le impostazioni da %1, non è un file di impostazioni valido. - - - Export KeePassXC Settings - Esporta impostazioni KeePassXC - - - Small - Piccolo - - - Normal - Normale - - - Medium - Medio - - - Large - Grande - - - Custom - Personalizzato + This setting cannot be enabled when minimize on unlock is enabled. + Questa impostazione non può essere abilitata quando è abilitata la riduzione a icona con lo sblocco. @@ -292,10 +260,6 @@ Remember previously used databases Ricorda i database usati in precedenza - - recent files - file recenti - Load previously open databases on startup Carica database aperti in precedenza all'avvio @@ -312,6 +276,25 @@ Include beta releases when checking for updates Includi versioni beta durante il controllo della disponibilità di aggiornamenti + + On database unlock, show entries that + Allo sblocco del database, visualizza le voci che + + + have expired + On database unlock, show entries that... + sono scaduti + + + days + On database unlock, show entries that will expire within %1 days + Giorni + + + will expire within + On database unlock, show entries that... + scadranno entro + File Management Gestione dei file @@ -336,10 +319,22 @@ Backup database file before saving Effettua una copia di sicurezza del database prima di salvarlo + + Backup destination + Destinazione backup + + + Specifies the database backup file location. Occurrences of "{DB_FILENAME}" are replaced with the filename of the saved database without extension. {TIME:<format>} is replaced with the backup time, see https://doc.qt.io/qt-5/qdatetime.html#toString. <format> defaults to format string "dd_MM_yyyy_hh-mm-ss". + Specifica il percorso del file di backup del database. Le occorrenze di "{DB_FILENAME}" vengono sostituite con il nome del file del database salvato senza estensione. {TIME:<format>} viene sostituito con l'ora di backup, vedi https://doc.qt.io/qt-5/qdatetime.html#toString. <format>per impostazione predefinita, formatta la stringa "dd_MM_yyyy_hh-mm-ss". + {DB_FILENAME}.old.kdbx {DB_FILENAME}.old.kdbx + + Choose... + Scegli... + Use alternative saving method (may solve problems with Dropbox, Google Drive, GVFS, etc.) Usa un metodo di salvataggio alternativo (può risolvere problemi con Dropbox, Google Drive, GVFS, ecc.) @@ -417,10 +412,6 @@ Toolbar button style: Stile pulsanti della barra degli strumenti: - - Show passwords in color - Visualizza le password a colori - Use monospaced font for notes Per le note usa una font a larghezza fissa @@ -435,15 +426,15 @@ Tray icon type - Tipo icona barra sistema + Tipo di icona vassoio Tray icon type: - Tipo icona barra sistema: + Tipo di icona vassoio: Hide window to system tray when minimized - Quando viene minimizzata la finestra nascondila nell'area di notifica di sistema + Nascondi la finestra nell'area di notifica di sistema quando viene minimizzata Reset settings to default… @@ -471,7 +462,7 @@ Re-lock previously locked database after performing Auto-Type - Blocca nuovamente un database precedentemente bloccato dopo il completamento automatico + Blocca nuovamente un database precedentemente bloccato dopo aver completato l'Auto-Type Auto-Type start delay: @@ -507,69 +498,12 @@ Ricorda l'ultima voce digitata per: - On database unlock, show entries that will expire within - Allo sblocco del database, mostra le voci che scadranno entro + recent files + file recenti - On database unlock, show entries that will expire within - Allo sblocco del database, mostra le voci che scadranno entro - - - days - number of days warning for password expiration - Giorni - - - Destination format: - Formato destinazione: - - - <html><head/><body><p><span style=" font-weight:600;">{DB_FILENAME}</span> is replaced with the filename of the saved database without extension</p><p><span style=" font-weight:600;">{TIME:&lt;format&gt;}</span> is replaced with the specified time format (default: dd_MM_yyyy_hh-mm-ss)</p><p>See the User Guide for more details</p></body></html> - <html><head/><body><p><span style=" font-weight:600;">{DB_FILENAME}</span>viene sostituito con il nome del file del database salvato senza estensione</p><p><span style=" font-weight:600;">{TIME:&lt;format&gt;}</span> viene sostituito con il formato orario specificato (predefinito: dd_MM_yyyy_hh-mm-ss)</p><p>vedere la Guida per l'utente per maggiori dettagli</p></body></html> - - - Choose folder... - Scegli cartella... - - - Show confirmation before moving entries to recycle bin - Visualizza la conferma prima di spostare le voci nel cestino - - - Copy data on double clicking field in entry view - Copia i dati facendo doppio clic sul campo nella vista della voce - - - Show toolbar - Visualizza barra strumenti - - - Show the menu bar by pressing the Alt key - Visualizza la barra dei menu premendo il tasto Alt - - - Show menubar - Mostra barra dei menu - - - Import settings… - Importa impostazioni... - - - Export settings… - Esporta impostazioni... - - - Open browser on double clicking URL field in entry view - Aprire il browser facendo doppio clic sul campo URL nella vista della voce - - - Font size: - Dimensione carattere: - - - Font size selection - Selezione dimensione carattere + Show passwords in color + Visualizza le password a colori @@ -624,6 +558,10 @@ Lock databases after minimizing the window Blocca il database dopo la minimizzazione della finestra + + Require password repeat when it is visible + Richiedi ripetizione password quando è visibile + Hide passwords when editing them Nascondi la password quando viene modificata @@ -636,6 +574,18 @@ Hide passwords in the entry preview panel Nascondi la password nel pannello di anteprima della voce + + Hide entry notes by default + per impostazione predefinita nascondi le note della voce + + + Move entries to recycle bin without confirmation + Sposta le voci nel cestino senza conferma + + + Enable double click to copy the username/password entry columns + Abilita il doppio clic per copiare le colonne di immissione nome utente/password + Privacy Riservatezza @@ -648,18 +598,6 @@ Hide TOTP in the entry preview panel Nascondi TOTP nel pannello di anteprima della voce - - Lock databases when switching user - Blocca il database quando si cambia utente - - - Lock Options - Opzioni di blocco - - - Hide notes in the entry preview panel - Nascondi le note nel pannello di anteprima della voce - AutoType @@ -677,7 +615,8 @@ KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. - Per effettuare l'auto-completamento di livello base KeePassXC richiede il permesso di Accessibilità. Se hai già concesso il permesso, riavvia KeePassXC. + Per effettuare il completamento automatico di livello base KeePassXC richiede il permesso di Accessibilità. +Se hai già concesso il permesso, riavvia KeePassXC. KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. @@ -706,13 +645,27 @@ Se hai già concesso il permesso, riavvia KeePassXC. Ritardo molto lungo rilevato, max è %1: %2 - Entry does not have attribute for PICKCHARS: %1 - La voce non ha l'attributo per PICKCHARS: %1 + Invalid conversion type: %1 + Tipo di conversione non valido: %1 + + + Invalid conversion syntax: %1 + Sintassi di conversione non valida: %1 + + + Invalid regular expression syntax %1 +%2 + Sintassi della espressione regolare non valida %1 +%2 Invalid placeholder: %1 Segnaposto non valido: %1 + + Entry does not have attribute for PICKCHARS: %1 + La voce non ha l'attributo per PICKCHARS: %1 + AutoTypeAssociationsModel @@ -754,6 +707,10 @@ Se hai già concesso il permesso, riavvia KeePassXC. AutoTypePlatformX11 + + Trying to send invalid keysym. + Tentativo di invio di keysym non valido. + Sequence aborted: Caps Lock is on Sequenza interrotta: blocco MAIUSCOLO attivo @@ -766,10 +723,6 @@ Se hai già concesso il permesso, riavvia KeePassXC. Unable to get valid keycode for key: Impossibile ottenere un codice chiave valido per la chiave: - - Trying to send invalid keyboard symbol. - Tentativo di invio di un simbolo non valido. - AutoTypeSelectDialog @@ -869,13 +822,13 @@ Ctrl+4 - Use Virtual Keyboard (Windows Only)</p> Disable for this site Disabilita per questo sito - - Undo - Ripristina - BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + Voce di salvataggio del browser KeePassXC + Ok Ok @@ -890,74 +843,13 @@ Please select the correct database for saving credentials. C'è più di un database aperto. Seleziona il database corretto dove salvare le credenziali. - - KeePassXC - Select Database - KeePassXC - seleziona database - - - - BrowserPasskeysConfirmationDialog - - Cancel - Annulla - - - Update - Aggiorna - - - Authenticate - Autentica - - - Register new - Registra nuovo - - - Register - Registra - - - Timeout in <b>%n</b> seconds... - Timeout in <b>%n</b> secondo…Timeout in <b>%n</b> secondi…Timeout in <b>%n</b> secondi... - - - Relying Party: %1 - Relying Party: %1 - - - Username: %1 - Nome utente: %1 - - - KeePassXC - Passkey credentials - KeePassXC - credenziali passkey - - - Add to existing entry - Aggiungi a voce esistente - - - Existing passkey found. -Do you want to register a new passkey for: - Trovata una passkey esistente. -Vuoi registrare una nuova passkey per: - - - Select the existing passkey and press Update to replace it. - Seleziona la passkey esistente e premi Aggiorna per sostituirla. - - - Authenticate passkey credentials for: - Autentica credenziali passkey per: - - - Do you want to register a passkey for: - Vuoi registrare una passkey per: - BrowserService + + KeePassXC: Create a new group + KeePassXC: Crea un nuovo gruppo + A request for creating a new group "%1" has been received. Do you want to create this group? @@ -966,6 +858,10 @@ Do you want to create this group? Vuoi creare questo gruppo? + + KeePassXC: New key association request + KeePassXC: nuova richiesta di associazione chiave + You have received an association request for the following database: %1 @@ -982,15 +878,27 @@ laptop-chrome. Save and allow access Salva e permetti l'accesso + + KeePassXC: Overwrite existing key? + KeePassXC: vuoi sovrascrivere la chiave esistente? + A shared encryption key with the name "%1" already exists. Do you want to overwrite it? Esiste già una chiave di cifratura condivisa con il nome "%1"- Vuoi sovrascriverla? + + KeePassXC: Update Entry + KeePassXC: aggiorna voce + Do you want to update the information in %1 - %2? Vuoi aggiornare le informazioni in %1 - %2? + + KeePassXC: Delete entry + KeePassXC: Elimina voce + A request for deleting entry "%1" has been received. Do you want to delete the entry? @@ -1000,58 +908,50 @@ Vuoi eliminare questa voce? - %1 (Passkey) - %1 (Passkey) + Converting attributes to custom data… + Conversione di attributi in dati personalizzati... - KeePassXC - Create a new group - KeePassXC - crea un nuovo gruppo + Abort + Interrompi - Disable - Disabilita + KeePassXC: Converted KeePassHTTP attributes + KeePassXC: attributi KeePassHTTP convertiti - KeePassXC - Overwrite existing key? - KeePassXC - sovrascrivere la chiave esistente? + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + Attributi convertiti correttamente da %1 voce/i. +Sono state spostate %2 chiavi nei dati personalizzati. + + + Successfully moved %n keys to custom data. + Sono stati spostati %n chiavi in dati personalizzati.Sono state spostate %n chiavi in dati personalizzati.Sono state spostate %n chiavi in dati personalizzati. - KeePassXC - Update Entry - KeePassXC - aggiorna voce + KeePassXC: No entry with KeePassHTTP attributes found! + KeePassXC: Nessuna voce trovata con gli attributi KeePassHTTP! - KeePassXC - Delete entry - KeePassXC - elimina voce + The active database does not contain an entry with KeePassHTTP attributes. + Il database attivo non contiene una voce con attributi KeePassHTTP. - KeePassXC - New key association request - KeePassXC: nuova associazione di chiave richiesta + Don't show this warning again + Non visualizzare nuovamente questo avviso - Passkey - Passkey + KeePassXC: Legacy browser integration settings detected + KeePassXC: rilevate impostazioni obsolete di integrazione del browser - KeePassXC - Passkey credentials - KeePassXC - credenziali passkey - - - Register a new passkey to this entry: - Registra una nuova passkey per questa voce: - - - KeePassXC - Update passkey - KeePassXC - Aggiorna passkey - - - Entry already has a passkey. -Do you want to overwrite the passkey in %1 - %2? - La voce possiede già una passkey. -Vuoi sovrascrivere la passkey in %1 - %2? - - - Register - Registra + 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? + Le impostazioni di KeePassXC-Browser devono essere spostate nelle impostazioni del database. +Questo è necessario per mantenere le connessioni del browser attuale. +Si desidera eseguire ora la migrazione delle impostazioni esistenti? @@ -1072,6 +972,10 @@ Vuoi sovrascrivere la passkey in %1 - %2? General Generale + + Browsers installed as snaps are currently not supported. + I browser installati come snap non sono attualmente supportati. + Enable integration for these browsers: Abilita integrazione per i seguenti browser: @@ -1204,7 +1108,7 @@ Vuoi sovrascrivere la passkey in %1 - %2? Browser for custom proxy file - Browser file proxy personalizzato + Browser per file proxy personalizzato Browse… @@ -1221,7 +1125,7 @@ Vuoi sovrascrivere la passkey in %1 - %2? Toolbar button style - Stile pulsante barra degli strumenti + Stile pulsante barra strumenti Config Location: @@ -1233,7 +1137,7 @@ Vuoi sovrascrivere la passkey in %1 - %2? Browse for custom browser path - Cerca percorso personalizzato browser + Seleziona percorso personalizzato browser Custom extension ID: @@ -1243,6 +1147,26 @@ Vuoi sovrascrivere la passkey in %1 - %2? Custom extension ID ID estensione personalizzata + + Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 + A causa del sandboxing di Snap, per abilitare l'integrazione del browser è necessario eseguire uno script. <br />È possibile ottenere questo script da %1 + + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 + Per far funzionare l'integrazione del browser KeePassXC-Browser. <br />Scaricalo per %1, %2 e %3. %4 + + + Please see special instructions for browser extension use below + Per l'uso dell'estensione del browser consulta le istruzioni speciali sottostanti + + + <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. + <b>Errore:</b> Non è stato trovato il percorso personalizzato per il proxy!<br/>L'estensione del browser NON PUÒ FUNZIONARE senza l'utilizzo di un proxy. + + + <b>Warning:</b> The following options can be dangerous! + <b>Avviso:</b> le seguenti opzioni possono essere pericolose! + Executable Files File eseguibili @@ -1259,46 +1183,6 @@ Vuoi sovrascrivere la passkey in %1 - %2? Select native messaging host folder location Seleziona il percorso per la cartella principale della messaggistica - - Allow keepassxc-proxy to list all entries with their title, URL and UUID in connected databases. - Consenti a keepassxc-proxy di elencare tutte le voci con il loro titolo, URL e UUID nei database collegati. - - - Allow limited access to all entries in connected databases (ignores site access restrictions) - Consenti accesso limitato a tutte le voci nei database connessi (ignora le restrizioni di accesso al sito) - - - <b>Warning:</b> Only adjust these settings if necessary. - <b>Avvertimento:</b> Regola queste impostazioni solo se necessario. - - - The custom proxy location does not exist. - Il percorso proxy personalizzato non esiste. - - - <b>Error:</b> The custom proxy location does not exist. Correct this in the advanced settings tab. - <b>Errore:</b> Il percorso proxy personalizzato non esiste. Correggi questo problema nella scheda Impostazioni avanzate. - - - <b>Error:</b> The installed proxy executable is missing from the expected location: %1<br/>Please set a custom proxy location in the advanced settings or reinstall the application. - <b>Errore:</b> L'eseguibile proxy installato non è presente nel percorso previsto: %1<br/>Impostare una posizione proxy personalizzata nelle impostazioni avanzate o reinstallare l'applicazione. - - - Allows using insecure http://localhost with passkeys for testing purposes. - Permetti di utilizzare http://localhost (insicuro) con le passkeys per fini di test. - - - Allow using localhost with passkeys - Permetti di utilizzare localhost con le passkeys - - - KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. - KeePassXC-Browser è necessario per il funzionamento dell'integrazione con il browser. Scaricalo per %1, %2 e %3. - - - Browsers installed using Snap or Flatpak are not supported with exception to Firefox installed using Snap. - I browser installati tramite Snap o Flatpak non sono supportati, ad eccezione di Firefox installato tramite Snap. - CloneDialog @@ -1321,6 +1205,14 @@ Vuoi sovrascrivere la passkey in %1 - %2? CsvImportWidget + + Import CSV fields + Importa campi CSV + + + filename + nomefile + size, rows, columns dimensione, righe, colonne @@ -1429,43 +1321,50 @@ Vuoi sovrascrivere la passkey in %1 - %2? Column %1 Colonna %1 + + Imported from CSV file + Importati da file CSV + + + Original data: + Dati originali: + + + Error(s) detected in CSV file! + Errore(i) rilevati nel file CSV! + [%n more message(s) skipped] [%n altro messaggio saltato][altri %n messaggi saltati][altri %n messaggi saltati] - Failed to parse CSV file: %1 - Impossibile analizzare il file CSV: %1 + Error + Errore - Imported from CSV file: %1 - Importato da file CSV: %1 - - - No Title Selected - Nessun Titolo Selezionato - - - No title column was selected, entries will be hard to tell apart. -Are you sure you want to import? - Non è stata selezionata alcuna colonna del titolo, le voci saranno difficili da distinguere. -Sei sicuro di voler importare? - - - Tags - Etichette + CSV import: writer has errors: +%1 + Importazione CSV: lo scrittore ha errori: +%1 CsvParserModel + + %1, %2, %3 + file info: bytes, rows, columns + %1, %2, %3 + + + %n byte(s) + %n byte (s)%n byte(s)%n byte(s) + %n row(s) - CSV row count righe: %n%n riga(e)%n riga(e) %n column(s) - CSV column count %n colonna%n colonne%n colonne @@ -1502,7 +1401,7 @@ Sei sicuro di voler importare? Database file has unmerged changes. - Il file database ha apportato modifiche non unite. + Il file database ha modifiche non unite. %1 @@ -1518,14 +1417,6 @@ Database di backup che si trova in %2 Recycle Bin Cestino - - Database file read error. - Errore di lettura del file del database. - - - No file path was provided. - Non è stato fornito alcun percorso del file. - DatabaseOpenDialog @@ -1548,10 +1439,30 @@ Database di backup che si trova in %2 Password field Campo password + + Enter Additional Credentials (if any): + Inserisci credenziali aggiuntive (se presenti): + + + Key File: + File chiave: + + + Key file help + Aiuto relativo al file chiave + Hardware key slot selection Selezione degli slot dei tasti hardware + + Hardware Key: + Chiave hardware: + + + Hardware key help + Guida alla chiave hardware + Key file to unlock the database File chiave per sbloccare il database @@ -1564,6 +1475,14 @@ Database di backup che si trova in %2 Browse… Sfoglia… + + Refresh hardware tokens + Aggiorna i token hardware + + + Refresh + Aggiorna + Unlock Database Sblocca database @@ -1626,6 +1545,10 @@ Per evitare che questo errore venga visualizzato, è necessario andare alle &quo Retry with empty password Riprova con password vuota + + Failed to authenticate with Touch ID + Impossibile eseguire l'autenticazione con Touch ID + Failed to open key file: %1 Impossibile aprire il file chiave: %1 @@ -1658,69 +1581,41 @@ Per evitare che questo errore venga visualizzato, è necessario andare alle &quo Cannot use database file as key file Impossibile usare il file database come file chiave + + You cannot use your database file as a key file. +If you do not have a key file, please leave the field empty. + Non puoi usare il file database come file chiave. +Se non possiedi un file chiave, lascia vuoto questo campo. + + + Detecting hardware keys… + Rilevamento delle chiavi hardware... + + + No hardware keys detected + Nessuna chiave hardware rilevata + + + Select hardware key… + Seleziona chiave hardware... + + + <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information…</p> + <p>Oltre a una password, è possibile usare un file segreto per migliorare la sicurezza del database. Questo file può essere generato nelle impostazioni di sicurezza del database.</p><p>Questo non <strong>è il</strong> file database *.kdbx!<br>Se non si dispone di un file chiave, lascia vuoto questo campo.</p><p>Fai clic per maggiori informazioni...</p> + + + <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +<p>Click for more information…</p> + <p>È possibile usare una chiave di protezione hardware, ad esempio <strong>YubiKey</strong> o <strong>OnlyKey</strong> con slot configurati per HMAC-SHA1.</p> +<p>Per maggiori informazioni fai clic...</p> + authenticate to access the database - Per accedere al database esegui l'autenticazione + per accedere al database esegui l'autenticazione - Failed to authenticate with Quick Unlock: %1 - Autenticazione con Sblocco rapido fallita: %1 - - - Select Key File: - Seleziona il file chiave: - - - <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!</p> - <p>Oltre ad una password, puoi utilizzare un file segreto per migliorare la sicurezza del tuo database. Questo file può essere generato nelle impostazioni di sicurezza del tuo database.</p><p>Questo<strong>non</strong>è il tuo file database *.kdbx!</p> - - - Use hardware key [Serial: %1] - Usa tasto hardware [Seriale: %1] - - - Use hardware key - Usa tasto hardware - - - Your database file is NOT a key file! -If you don't have a key file or don't know what that is, you don't have to select one. - Il database non è un file key! -Se non hai un file key o non sai cosa sia, non selezionarlo. - - - KeePassXC database file selected - Database KeePassXC selezionato - - - The file you selected looks like a database file. -A database file is NOT a key file! - -Are you sure you want to continue with this file?. - Il file selezionato sembra essere un file database. -Un file database NON è un file chiave. - -Sei sicuro di voler continuare con questo file? - - - No hardware keys found. - Tasti hardware non trovati. - - - Refresh Hardware Keys - Aggiorna tasti hardware - - - Click to add a key file. - Clicca per aggiungere un file chiave. - - - <a href="#" style="text-decoration: underline">I have a key file</a> - <a href="#" style="text-decoration: underline">Ho un file chiave</a> - - - Hardware keys found, but no slots are configured. - Chiave hardware trovata, ma non è configurato nessuno slot. + Failed to authenticate with Windows Hello: %1 + Impossibile eseguire l'autenticazione con Windows Hello: %1 @@ -1732,6 +1627,10 @@ Sei sicuro di voler continuare con questo file? DatabaseSettingsDialog + + Advanced Settings + Impostazioni avanzate + General Generale @@ -1756,22 +1655,6 @@ Sei sicuro di voler continuare con questo file? Maintenance Manutenzione - - KeeShare - KeeShare - - - Secret Service Integration - Integrazione Secret Service - - - Remote Sync - Sincronizzazione Remota - - - Database Settings: %1 - Impostazioni database: %1 - DatabaseSettingsWidgetBrowser @@ -1779,6 +1662,18 @@ Sei sicuro di voler continuare con questo file? KeePassXC-Browser settings Impostazioni di KeePassXC-Browser + + Convert KeePassHTTP data + Convertire i dati KeePassHTTP + + + Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data + Convertire gli attributi KeePassHTTP obsoleti in dati personalizzati compatibili con KeePassXC-Browser + + + Refresh database root group ID + Aggiorna l'ID gruppo radice del database + Disconnect all browsers Scollega tutti i browser @@ -1787,10 +1682,6 @@ Sei sicuro di voler continuare con questo file? Forget all site-specific settings on entries Dimenticae tutte le impostazioni specifiche del sito nelle voci - - Refresh database root group ID - Aggiorna l'ID gruppo radice del database - Stored keys Chiavi memorizzate @@ -1814,8 +1705,8 @@ Sei sicuro di voler continuare con questo file? Do you really want to delete the selected key? This may prevent connection to the browser plugin. - Vuoi davvero eliminare la chiave selezionata? -Questo potrebbe impedire la connessione al plug-in del browser. + Vuoi eliminare la chiave selezionata? +Questo potrebbe impedire la connessione al plugin del browser. Key @@ -1836,13 +1727,21 @@ Questo potrebbe impedire la connessione al plug-in del browser. Do you really want to disconnect all browsers? This may prevent connection to the browser plugin. - Vuoi davvero scollegare tutti i browser? -Questo potrebbe impedire la connessione al plug-in del browser. + Vuoi scollegare tutti i browser? +Questo potrebbe impedire la connessione al plugin del browser. + + + KeePassXC: No keys found + KeePassXC: nessuna chiave trovata No shared encryption keys found in KeePassXC settings. Nessuna chiave di cifratura condivisa trovata nelle impostazioni KeePassXC. + + 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. Rimosse con successo %n chiavi di cifratura dalle impostazioni di KeePassXC. @@ -1861,14 +1760,32 @@ Verranno revocate le autorizzazioni per accedere alle voci. 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.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 + Sposta gli attributi KeePassHTTP in dati personalizzati + + + Do you really want to convert all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + Vuoi davvero convertire tutti i dati di integrazione del browser legacy allo standard più recente? +Questo è necessario per mantenere la compatibilità con il plug-in del browser. + Refresh database ID Aggiorna ID database @@ -1879,26 +1796,6 @@ This is only necessary if your database is a copy of another and the browser ext Vuoi davvero aggiornare l'ID del database? Questo è necessario solo se il database è una copia e l'estensione del browser non riesce a connettersi. - - Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data - Convertire gli attributi KeePassHTTP obsoleti in dati personalizzati compatibili con KeePassXC-Browser - - - No keys found - Nessuna chiave trovata - - - Removed keys from database - Rimuovi chiavi dal database - - - Removed permissions - Permessi rimossi - - - No entry with permissions found! - Nessuna voce con permessi trovata! - DatabaseSettingsWidgetDatabaseKey @@ -1938,18 +1835,6 @@ Vuoi continuare senza password? Failed to change database credentials Impossibile modificare le credenziali del database - - Weak password - Password debole - - - This is a weak password! For better protection of your secrets, you should choose a stronger password. - Questa è una password debole. Per una maggiore protezione dei segreti, dovresti scegliere una password più forte. - - - The provided password does not meet the minimum quality requirement. - La password fornita non rispetta i requisiti qualitativi minimi. - DatabaseSettingsWidgetEncryption @@ -1957,6 +1842,14 @@ Vuoi continuare senza password? Decryption Time: Tempo di decifratura: + + Change existing decryption time + Modifica il tempo di decifratura esistente + + + Change + Modifica + Decryption time in seconds Tempo di decifratura in secondi @@ -2037,6 +1930,11 @@ Vuoi continuare senza password? KDBX 3 KDBX 3 + + unchanged + Database decryption time is unchanged + invariato + Number of rounds too high Key transformation rounds @@ -2087,19 +1985,7 @@ Se si mantiene questo numero, il database non sarà protetto da attacchi di forz thread(s) Threads for parallel execution (KDF settings) - threadthreadthread - - - Encryption Settings: - Impostazioni di crittografia: - - - Basic - Base - - - Advanced - Avanzate + thread thread thread @@ -2231,70 +2117,6 @@ invece di eliminarli dal database. Le voci eliminate dal cestino sono rimosse dal database. - - Autosave delay since last change - Intervallo di salvataggio automatico dall'ultimo cambiamento - - - Autosave delay - Intervallo di salvataggio automatico - - - Autosave delay since last change in minutes - Intervallo di salvataggio automatico dall'ultimo cambiamento in minuti - - - min - min - - - Autosave delay since last change checkbox - Casella di controllo per l'intervallo di salvataggio automatico dall'ultimo cambiamento - - - Public Database Metadata - Metadati del database pubblico - - - Warning: the following settings are not encrypted. - Attenzione: le seguenti impostazioni non sono crittografate. - - - Display name: - Nome di visualizzazione: - - - Publically visible display name used on the unlock dialog - Nome visualizzato visibile pubblicamente utilizzato nella finestra di dialogo di sblocco - - - Database public display name - Nome pubblico del database visualizzato - - - Display color: - Colore di visualizzazione: - - - Publically visible color used on the unlock dialog - Colore visibile pubblicamente utilizzato nella finestra di dialogo di sblocco - - - Database public display color chooser - Selettore colore display pubblico del database - - - Clear - Azzera - - - Display icon: - Simbolo di visualizzazione: - - - Select Database Icon - Seleziona l'icona del database - DatabaseSettingsWidgetKeeShare @@ -2390,141 +2212,6 @@ rimosse dal database. Campo descrizione database - - DatabaseSettingsWidgetRemote - - Sync Commands - Comandi Sincronizzazione - - - Remove - Rimuovi - - - Command Settings - Impostazioni Comando - - - Name - Nome - - - Save - Salva - - - Download - Download - - - Command: - Comando: - - - Download command field - Scarica il campo del comando - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - es.: "sftp user@hostname" oppure "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - - - Input: - Input: - - - Download input field - Scarica il campo di input - - - Upload - Caricare - - - Upload command field - Carica il campo del comando - - - e.g.: "sftp user@hostname" or "scp {TEMP_DATABASE} user@hostname:DatabaseOnRemote.kdbx" - Ad esempio.: "sftp user@hostname" o "scp {TEMP_DATABASE} user@hostname:DatabaseOnRemote.kdbx" - - - Upload input field - Carica il campo di input - - - Name cannot be empty. - Il nome non può essere vuoto. - - - Test - Test - - - Download command cannot be empty. - Il comando di download non può essere vuoto. - - - Download failed with error: %1 - Download non riuscito con errore: %1 - - - Download finished, but file %1 could not be found. - Download completato, ma il file %1 non è stato trovato. - - - Download successful. - Download completato con successo. - - - Save Remote Settings - Salva impostazioni remote - - - You have unsaved changes. Do you want to save them? - Hai delle modifiche non salvate. Vuoi salvarle? - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - ad es.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} è utilizzato come segnaposto per memorizzare il database in una posizione temporanea -Il comando deve uscire. In caso di `sftp` come ultimo comando `exit` deve essere inviato - - - - e.g.: -put {TEMP_DATABASE} DatabaseOnRemote.kdbx -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - ad es.: -put {TEMP_DATABASE} DatabaseOnRemote.kdbx -exit ---- -{TEMP_DATABASE} è utilizzato come segnaposto per memorizzare il database in una posizione temporanea -Il comando deve uscire. In caso di `sftp` come ultimo comando `exit` deve essere inviato - - - - Timeout: - Timeout: - - - seconds - secondi - - DatabaseTabWidget @@ -2557,10 +2244,26 @@ Questo è sicuramente un bug, segnalalo agli sviluppatori. CSV file File CSV + + Select CSV file + Seleziona file CSV + Merge database Unisci database + + KeePass 1 database + Database KeePass 1 + + + Open KeePass 1 database + Apri database KeePass 1 + + + Open OPVault + Apri OPVault + Export database to CSV file Esporta database come file CSV @@ -2573,6 +2276,28 @@ Questo è sicuramente un bug, segnalalo agli sviluppatori. Writing the HTML file failed. Scrittura del file HTML non riuscita. + + Export Confirmation + Conferma esportazione + + + You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? + Stai per esportare il database in un file non cifrato. Questo lascerà le password e le informazioni sensibili vulnerabili! Sei sicuro di voler continuare? + + + New Database + Nuovo database + + + %1 [New Database] + Database tab name modifier + %1 [nuovo database] + + + %1 [Locked] + Database tab name modifier + %1 [bloccato] + Export database to XML file Esporta il database in un file XML @@ -2585,31 +2310,9 @@ Questo è sicuramente un bug, segnalalo agli sviluppatori. Writing the XML file failed Scrittura del file XML non riuscita - - Export Confirmation - Conferma esportazione - - - You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? - Stai per esportare il database in un file non cifrato. Questo lascerà le password e le informazioni sensibili vulnerabili! Sei sicuro di voler continuare? - - - %1 [Locked] - Database tab name modifier - %1 [bloccato] - - - %1 [Temporary] - Database tab name modifier - %1 [Temporary] - DatabaseWidget - - Searches and Tags - Ricerche ed etichette - Searching… Ricerca... @@ -2658,10 +2361,6 @@ Questo è sicuramente un bug, segnalalo agli sviluppatori. Expired entries Voci scadute - - Entries expiring within %1 day(s) - Voci che scadono entro %1 giorno(i)Voci che scadono entro %1 giorno(i)Voci che scadono entro %1 giorno(i) - No current database. Nessun database attuale. @@ -2672,7 +2371,7 @@ Questo è sicuramente un bug, segnalalo agli sviluppatori. Successfully merged the database files. - I file database sono stati uniti correttamente. + Unione file database completata. Database was not modified by merge operation. @@ -2686,18 +2385,6 @@ Questo è sicuramente un bug, segnalalo agli sviluppatori. No Results Nessun risultato - - Save - Salva - - - Enter a unique name or overwrite an existing search from the list: - Inserisci un nome univoco o sovrascrivi una ricerca esistente dall'elenco: - - - Save Search - Salva ricerca - Lock Database? Vuoi bloccare il database? @@ -2726,6 +2413,26 @@ Vuoi salvare le modifiche? File has changed Il file è stato modificato + + The database file has changed. Do you want to load the changes? + Il file del database è stato modificato. Vuoi caricare le modifiche? + + + Merge Request + Richiesta di unione + + + The database file has changed and you have unsaved changes. +Do you want to merge your changes? + Il file del database è stato cambiato e ci sono cambiamenti non salvati +Vuoi unire le modifiche? + + + Could not open the new database file while attempting to autoreload. +Error: %1 + Impossibile aprire il nuovo file database durante il tentativo di ricaricamento. +Errore: %1 + Disable safe saves? Disabilita i salvataggi sicuri? @@ -2768,94 +2475,25 @@ Vuoi disabilitare i salvataggi sicuri e riprovare? Could not find database file: %1 Impossibile trovare il file database: %1 - - New Database - Nuovo database + + Entries expiring within %1 day(s) + Voci che scadono entro %1 giorno(i)Voci che scadono entro %1 giorno(i)Voci che scadono entro %1 giorno(i) - %1 [New Database] - Database tab name modifier - %1 [nuovo database] + Searches and Tags + Ricerche ed etichette - Remote Sync did not contain any download or upload commands. - La sincronizzazione remota non conteneva alcun comando di download o upload. + Enter a unique name or overwrite an existing search from the list: + Inserisci un nome univoco o sovrascrivi una ricerca esistente dall'elenco: - Remote sync '%1' completed successfully! - Sincronizzazione remota '%1' completata con successo! + Save + Salva - Remote sync '%1' failed: %2 - Sincronizzazione remota '%1' fallita: %2 - - - Error while saving database %1: %2 - Errore durante il salvataggio del database %1: %2 - - - Downloading... - Scaricamento... - - - Uploading... - Caricamento... - - - Syncing... - Sincronizzazione... - - - Remove passkey from entry - Rimuovi passkey dalla voce - - - Do you want to remove the passkey from this entry? - Vuoi rimuovere la passkey da questa voce? - - - The database file "%1" was modified externally - Il file di database "%1" è stato modificato esternamente - - - Do you want to load the changes? - Vuoi caricare le modifiche? - - - Reload database - Ricarica il database - - - Reloading database… - Ricaricamento del database… - - - Reload canceled - Ricaricamento annullato - - - Reload successful - Ricaricamento completato correttamente - - - Reload pending user action… - Ricaricamento in attesa di azione dell'utente... - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes<br>Ignore the changes on disk until save<br>Discard unsaved changes - Il file di database "%1" è stato modificato esternamente.<br> Come desideri procedere?<br><br>Unisci tutte le modifiche<br>Ignora le modifiche sul disco fino al salvataggio<br>Ignora le modifiche non salvate - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes then save<br>Overwrite the changes on disk<br>Discard unsaved changes - Il file di database "%1" è stato modificato esternamente.<br>Come desideri procedere?<br><br>Unisci tutte le modifiche, quindi salva<br>Sovrascrivi le modifiche sul disco<br>Ignora le modifiche non salvate - - - Database file overwritten. - File di database sovrascritto. - - - Database file on disk cannot be unlocked with current credentials.<br>Enter new credentials and/or present hardware key to continue. - Il file del database sul disco non può essere sbloccato con le credenziali attuali.<br> Digita le nuove credenziali e/o presenta la chiave hardware per continuare. + Save Search + Salva ricerca @@ -2908,6 +2546,10 @@ Vuoi disabilitare i salvataggi sicuri e riprovare? n/a n/a + + (encrypted) + (cifrato) + Select private key Seleziona chiave privata @@ -2994,10 +2636,6 @@ Vuoi correggerla? Hide Nascondi - - %n hour(s) - %n ora(e)%n ora(e)%n ora(e) - %n week(s) %n settimana%n settimane%n settimane @@ -3010,9 +2648,9 @@ Vuoi correggerla? %n year(s) %n anno%n anni%n anni - - Failed to decrypt SSH key, ensure password is correct. - Impossibile decriptare la chiave SSH, assicurati che la password sia corretta. + + %n hour(s) + %n ora(e)%n ora(e)%n ora(e) @@ -3132,20 +2770,10 @@ Vuoi correggerla? Add new window association Aggiungi nuova associazione finestra - - + - Add item - + - Remove selected window association Rimuovi associazione finestra selezionata - - - - Remove item - - - Window title: Titolo finestra: @@ -3170,9 +2798,23 @@ Vuoi correggerla? Custom Auto-Type sequence for this window Sequenza personalizzata del completamento automatico per questa finestra + + + + Add item + + + + + - + Remove item + - + EditEntryWidgetBrowser + + These settings affect to the entry's behaviour with the browser extension. + Queste impostazioni influiscono sul comportamento della voce con l'estensione del browser. + General Generale @@ -3185,14 +2827,26 @@ Vuoi correggerla? Skip Auto-Submit for this entry Ignora invio automatico per questa voce + + Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. + Manda queste impostazioni al browser solo solo per l'autenticazione HTTP. Se abilitata, la pagina di login non mostrerà questa voce disponibile per la selezione. + Use this entry only with HTTP Basic Auth Usa questa voce solo con l'autenticazione semplice HTTP + + Do not send this setting to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. + Non inviare questa impostazione al browser per le finestre di dialogo autenticazione HTTP. Se attivata, le finestre di dialogo autenticazione HTTP non mostreranno questa voce per la selezione. + Do not use this entry with HTTP Basic Auth Non usare questa voce con l'autenticazione semplice HTTP + + Additional URL's + URL aggiuntivi + Add Aggiungi @@ -3205,22 +2859,6 @@ Vuoi correggerla? Edit Modifica - - These settings affect the entry's behaviour with the browser extension. - Queste impostazioni influenzano il comportamento della voce con l'estensione browser. - - - Additional URLs - URL aggiuntive - - - Only send this entry to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. - Invia questa voce esclusivamente per finestre HTTP Auth. Se abilitato, le form di login normali non mostreranno questa voce come voce selezionabile. - - - Do not send this entry to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. - Non inviare questa voce al browser per finestre HTTP Auth. Se abilitato, le finestre HTTP Auth non mostreranno questa voce come voce selezionabile. - EditEntryWidgetHistory @@ -3386,6 +3024,19 @@ Vuoi correggerla? Private key Chiave privata + + External file + File esterno + + + Browser for key file + Selezione file chiave + + + Browse… + Button for opening file dialog + Sfoglia… + Attachment Allegato @@ -3402,23 +3053,6 @@ Vuoi correggerla? Remove from agent Rimuovi dall'agente - - External file - File esterno - - - Browser for key file - Selezione file chiave - - - Browse… - Button for opening file dialog - Sfoglia… - - - Generate - Genera - Select attachment file Seleziona file allegato @@ -3443,10 +3077,6 @@ Vuoi correggerla? seconds secondi - - Clear agent - Cancella agent - EditGroupWidget @@ -3458,6 +3088,10 @@ Vuoi correggerla? Icon Icona + + Browser Integration + Integrazione browser + Properties Proprietà @@ -3474,10 +3108,6 @@ Vuoi correggerla? Group has unsaved changes Il gruppo ha modifiche non salvate - - Browser Integration - Integrazione browser - Enable Abilita @@ -3537,14 +3167,6 @@ Vuoi correggerla? Omit WWW subdomain from matching toggle for this and sub groups Ometti il sottodominio WWW dal selettore corrispondente per questo e sottogruppi - - Restrict matching to given browser key: - Restringi corrispondenza alla chiave browser fornita: - - - Restrict matching to given browser key toggle for this and sub groups - Limita la corrispondenza a un determinato tasto del browser per questo e sottogruppi - EditGroupWidgetKeeShare @@ -3777,6 +3399,10 @@ Le estensioni supportate sono: '%1'. Unable to fetch favicon. Impossibile scaricare favicon. + + You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security + È possibile attivare il servizio per le icone del sito web DuckDuckGo in Strumenti -> Impostazioni -> Sicurezza + Existing icon selected. Icona esistente selezionata. @@ -3809,10 +3435,6 @@ Le estensioni supportate sono: '%1'. The following icon(s) failed: La seguente icona presenta degli errori:Le seguenti icone presentano degli errori:Le seguenti icone presentano degli errori: - - You can enable the DuckDuckGo website icon service under Application Settings -> Security - Puoi attivare il servizio di DuckDuckGo per le icone dei siti web da Impostazioni applicazione -> Sicurezza - EditWidgetProperties @@ -3871,7 +3493,7 @@ Le estensioni supportate sono: '%1'. Do you really want to delete the selected plugin data? This may cause the affected plugins to malfunction. - Vuoi davvero eliminare i dati del plugin selezionato? + Vuoi eliminare i dati dei plugin selezionati? Questo potrebbe causare malfunzionamenti ai plugin interessati. @@ -3889,24 +3511,6 @@ Questo potrebbe causare malfunzionamenti ai plugin interessati. %1 - Clone %1 - clone - - Passkey - Passkey - - - Invalid conversion type: %1 - Tipo di conversione non valido: %1 - - - Invalid conversion syntax: %1 - Sintassi di conversione non valida: %1 - - - Invalid regular expression syntax %1 -%2 - Sintassi della espressione regolare non valida %1 -%2 - EntryAttachments @@ -3915,21 +3519,6 @@ Questo potrebbe causare malfunzionamenti ai plugin interessati. Impossibile aprire il file "%1" - - EntryAttachmentsDialog - - Form - Modulo - - - File name - Nome file - - - File contents... - Contenuto del file... - - EntryAttachmentsModel @@ -3967,6 +3556,14 @@ Questo potrebbe causare malfunzionamenti ai plugin interessati. Remove Rimuovi + + Rename selected attachment + Rinomina l'allegato selezionato + + + Rename + Rinominare + Open selected attachment Apri allegato selezionato @@ -4043,6 +3640,12 @@ Questo potrebbe causare malfunzionamenti ai plugin interessati. Confirm Overwrite Attachment Conferma sovrascrittura allegato + + Attachment "%1" already exists. +Would you like to overwrite the existing attachment? + L'allegato "%1" esiste già. +Vuoi sovrascrivere l'allegato esistente? + Confirm Attachment Conferma l'allegato @@ -4077,24 +3680,6 @@ Error: %1 Salvataggio allegato aggiornato non riuscito. Errore: %1 - - Attachment "%1" already exists. -Would you like to overwrite the existing attachment? - L'allegato "%1" esiste già. -Vuoi sovrascrivere l'allegato esistente? - - - New - Nuovo - - - Preview - Anteprima - - - Failed to preview an attachment: Attachment not found - Impossibile visualizzare l'anteprima di un allegato: allegato non trovato - EntryAttributesModel @@ -4289,14 +3874,6 @@ Vuoi sovrascrivere l'allegato esistente? Has TOTP Ha TOTP - - Background Color - Colore di sfondo - - - Group Path - Percorso del Gruppo - EntryPreviewWidget @@ -4317,8 +3894,8 @@ Vuoi sovrascrivere l'allegato esistente? Password - URL - URL + Notes + Note Expiration @@ -4337,8 +3914,8 @@ Vuoi sovrascrivere l'allegato esistente? Nome utente - Notes - Note + URL + URL Advanced @@ -4388,10 +3965,6 @@ Vuoi sovrascrivere l'allegato esistente? Never Mai - - Double click to copy value - Doppio clic per copiare il valore - Enabled Abilitato @@ -4401,8 +3974,8 @@ Vuoi sovrascrivere l'allegato esistente? Disabilitato - Double click to copy to clipboard - Fare doppio clic per copiare negli appunti + Double click to copy value + Doppio clic per copiare il valore @@ -4411,10 +3984,6 @@ Vuoi sovrascrivere l'allegato esistente? Invalid URL URL non corretto - - Duplicate URL - URL duplicato - EntryView @@ -4430,10 +3999,6 @@ Vuoi sovrascrivere l'allegato esistente? Reset to defaults Ripristina valori predefiniti - - + %1 entry(s)... - + %1 voce(i)...+ %1 voce(i)...+ %1 voce(i)... - ExportDialog @@ -4544,7 +4109,7 @@ Questo lascerà vulnerabili le password e le informazioni sensibili! %n Entry(s) was used by %1 %1 is the name of an application - %n Voce utilizzata da %1%n Voci utilizzate da %1%n Voci utilizzate da %1 + %n voce utilizzata da %1%n voci utilizzate da %1%n voci utilizzate da %1 @@ -4655,199 +4220,6 @@ You can enable the DuckDuckGo website icon service in the security section of th Scaricamento delle favicon (%1/%2)... - - ImportWizard - - Import Wizard - Importazione guidata - - - - ImportWizardPageReview - - WizardPage - Pagina della procedura guidata - - - Entry count: %1 - Numero voci: %1 - - - Group - Gruppo - - - Title - Titolo - - - Username - Nome utente - - - Password - Password - - - Url - Url - - - Could not load key file. - Impossibile caricare il file chiave. - - - Could not open remote database. Password or key file may be incorrect. - Impossibile aprire il database remoto. La password o il file chiave potrebbero essere errati. - - - - ImportWizardPageSelect - - Form - Modulo - - - Import File Selection - Selezione file da importare - - - Password: - Password: - - - Key File: - File chiave: - - - Browse… - Sfoglia… - - - Import Into: - Importa in: - - - New Database - Nuovo database - - - No unlocked databases available - Nessun database sbloccato disponibile - - - Existing Database: - Database esistente: - - - Import File: - Importa file: - - - Comma Separated Values (.csv) - Valori separati da virgola (.csv) - - - 1Password Export (.1pux) - Esporta 1Password (.1pux) - - - 1Password Vault (.opvault) - Vault 1Password (.opvault) - - - Bitwarden (.json) - Bitwarden (.json) - - - KeePass 1 Database (.kdb) - Database KeePass 1 (.kdb) - - - Open OPVault - Apri OPVault - - - Select import file - Seleziona il file da importare - - - All files - Tutti i file - - - Key files - File chiave - - - Select key file - Seleziona file chiave - - - Comma Separated Values - Valori separati da virgola - - - 1Password Export - Esporta 1Password - - - Bitwarden JSON Export - Esporta Bitwarden JSON - - - 1Password Vault - Cassaforte 1Password - - - KeePass1 Database - Database KeePass1 - - - Proton Pass (.json) - Proton Pass (.json) - - - Proton Pass JSON Export - Esportazione Proton Pass JSON - - - Temporary Database - Database temporaneo - - - Command: - Comando: - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - es.: "sftp user@hostname" oppure "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - - - Input: - Input: - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last commend `exit` has to be sent - - ad es.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} è utilizzato come segnaposto per memorizzare il database in una posizione temporanea -Il comando deve uscire. In caso di `sftp` come ultimo comando `exit` deve essere inviato - - - - Remote Database (.kdbx) - Database remoto (.kdbx) - - KMessageWidget @@ -4876,8 +4248,8 @@ Il comando deve uscire. In caso di `sftp` come ultimo comando `exit` deve essere Invalid credentials were provided, please try again. If this reoccurs, then your database file may be corrupt. - Sono state fornite credenziali non valide, riprovare. -Se ciò si ripresenta, il file database potrebbe essere danneggiato. + Sono state fornite credenziali non valide, riprova. +Se il problema si ripresenta, il file database potrebbe essere danneggiato. Header doesn't match hash @@ -4933,8 +4305,8 @@ Se ciò si ripresenta, il file database potrebbe essere danneggiato. Invalid credentials were provided, please try again. If this reoccurs, then your database file may be corrupt. - Sono state fornite credenziali non valide, riprovare. -Se ciò si ripresenta, il file database potrebbe essere danneggiato. + Sono state fornite credenziali non valide, riprova. +Se il problema si ripresenta, il file database potrebbe essere danneggiato. (HMAC mismatch) @@ -5282,6 +4654,17 @@ Riga %2, colonna %3 Impossibile aprire la chiave privata + + KeePass1OpenWidget + + Import KeePass1 Database + Importa database KeePass1 + + + Unable to open the database. + Impossibile aprire il database. + + KeePass1Reader @@ -5344,8 +4727,8 @@ Riga %2, colonna %3 Invalid credentials were provided, please try again. If this reoccurs, then your database file may be corrupt. - Sono state fornite credenziali non valide, riprovare. -Se ciò si ripresenta, il file database potrebbe essere danneggiato. + Sono state fornite credenziali non valide, riprova. +Se il problema si ripresenta, il file database potrebbe essere danneggiato. Key transformation failed @@ -5568,7 +4951,7 @@ Messaggio: %2 <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>Per una maggiore sicurezza è possibile aggiungere un file chiave contenente byte casuali.</p><p>Devi tenerlo segreto e non perderlo mai o sarai bloccato.</p> + <p>Per una maggiore sicurezza è possibile aggiungere un file chiave contenente byte casuali.</p><p>Devi tenere la chiave segreta e non perderla mai o non potrai accedere.</p> Key files @@ -5638,6 +5021,10 @@ Sei sicuro di voler continuare con questo file? &Recent Databases &Database recenti + + &Import + &Importa + &Export &Esporta @@ -5658,10 +5045,6 @@ Sei sicuro di voler continuare con questo file? TOTP TOTP - - Tags - Etichette - &Groups &Gruppi @@ -5706,18 +5089,34 @@ Sei sicuro di voler continuare con questo file? &New Database… &Nuovo database... + + Create a new database + Crea un nuovo database + &Merge From Database… &Unire dal database... + + Merge from another KDBX database + Unire da un altro database KDBX + &New Entry… &Nuova voce... + + Add a new entry + Aggiungi una nuova voce + &Edit Entry… &Modifica voce... + + View or edit entry + Visualizza/modifica voce + &Delete Entry… &Elimina voce... @@ -5726,6 +5125,10 @@ Sei sicuro di voler continuare con questo file? &New Group… &Nuovo gruppo... + + Add a new group + Aggiungi un nuovo gruppo + &Edit Group… &Modifica gruppo... @@ -5758,10 +5161,18 @@ Sei sicuro di voler continuare con questo file? Database &Reports… &Rapporti del database... + + Statistics, health check, etc. + Statistiche, controllo dello stato, ecc. + &Database Settings… Impostazioni &database... + + Database settings + Impostazioni database + &Clone Entry… &Clona voce... @@ -5770,18 +5181,34 @@ Sei sicuro di voler continuare con questo file? Move u&p Sposta in s&u + + Move entry one step up + Sposta la voce una posizione in alto + Move do&wn Sposta in gi&ù + + Move entry one step down + Sposta la voce una posizione in basso + Copy &Username Copia &nome utente + + Copy username to clipboard + Copia nome utente negli appunti + Copy &Password Copia &password + + Copy password to clipboard + Copia password negli appunti + &Settings &Impostazioni @@ -5815,13 +5242,21 @@ Sei sicuro di voler continuare con questo file? &Titolo - Copy &URL - Copia &URL + Copy title to clipboard + Copia titolo negli appunti + + + Copy URL to clipboard + Copia URL negli appunti &Notes &Note + + Copy notes to clipboard + Copia note negli appunti + &CSV File… &File CSV... @@ -5834,14 +5269,26 @@ Sei sicuro di voler continuare con questo file? KeePass 1 Database… Database KeePass 1... + + Import a KeePass 1 database + Importa un database KeePass 1 + 1Password Vault… 1Password Vault... + + Import a 1Password Vault + Importa un 1Password Vault + CSV File… File CSV... + + Import a CSV file + Importa un file CSV + Show TOTP Visualizza TOTP @@ -5858,10 +5305,6 @@ Sei sicuro di voler continuare con questo file? Copy &TOTP Copia &TOTP - - Copy Password and TOTP - Copia password e TOTP - E&mpty recycle bin Svuota il cesti&no @@ -5886,6 +5329,10 @@ Sei sicuro di voler continuare con questo file? &Online Help &Guida in linea + + Go to online documentation + Vai alla documentazione online + &User Guide &Guida per l'utente @@ -5930,10 +5377,6 @@ Sei sicuro di voler continuare con questo file? Classic (Platform-native) Classico (nativo della piattaforma) - - Show Menubar - Mostra barra dei menù - Show Toolbar Visualizza barra strumenti @@ -5958,17 +5401,13 @@ Sei sicuro di voler continuare con questo file? Clone Group... Clona gruppo... - - &XML File… - File &XML... - Clear history Azzera cronologia Access error for config file %1 - Errore di accesso al file di configurazione %1 + Errore di accesso al file di configurazione '%1' Don't show again for this version @@ -5989,8 +5428,10 @@ Expect some bugs and minor issues, this version is meant for testing purposes. - No Tags - Nessuna etichetta + 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. + ATTENZIONE: la versione di Qt potrebbe causare l'arresto anomalo di KeePassXC con una tastiera su schermo. +Ti consigliamo di usare l'AppImage disponibile sulla nostra pagina download. Restore Entry(s) @@ -6020,10 +5461,6 @@ Aspettatevi alcuni bug e problemi minori, questa versione è pensata per scopi d Quit KeePassXC Esci da KeePassXC - - %1 Entry(s) - %1 voce%1 voci%1 voci - Please present or touch your YubiKey to continue… Per continuare presenta o tocca la YubiKey... @@ -6036,314 +5473,38 @@ Aspettatevi alcuni bug e problemi minori, questa versione è pensata per scopi d You must restart the application to apply this setting. Would you like to restart now? Per applicare questa impostazione è necessario riavviare l'applicazione. Vuoi riavviarla ora? + + Tags + Etichette + + + No Tags + Nessuna etichetta + + + %1 Entry(s) + %1 voce%1 voci%1 voci + + + Copy Password and TOTP + Copia password e TOTP + + + &XML File… + File &XML... + + + XML File… + File XML... + + + Copy &URL + Copia &URL + Allow Screen Capture Consenti cattura schermo - - 1Password 1PUX... - 1Password 1PUX... - - - Import a 1Password 1PUX file - Importa un file 1Password 1PUX - - - Import… - Importazione... - - - Passkeys… - Passkey... - - - Import Passkey - Importa Passkey - - - Remote S&ync… - S&incronizzazione Remota... - - - Quit Application - Esci dall'applicazione - - - Open About Dialog - Apri finestra Informazioni - - - Open Database - Apri database - - - Create Database - Crea database - - - Merge From Database - Unisci da database - - - Create Entry - Crea voce - - - Edit Entry - Modifica voce - - - Delete Entry - Elimina voce - - - Create Group - Crea Gruppo - - - Edit Group - Modifica gruppo - - - Delete Group - Elimina Gruppo - - - Download All Favicons - Scarica tutte le Favicon - - - Sort Groups A-Z - Ordina gruppi A-Z - - - Sort Groups Z-A - Ordina gruppi Z-A - - - Save Database As - Salva database con nome - - - Show Database Security - Mostra protezione database - - - Show Database Reports - Mostra report database - - - Show Database Settings - Mostra impostazioni database - - - Show Passkeys - Mostra passkey - - - Clone Entry - Clona voce - - - Move Entry Up - Sposta voce su - - - Move Entry Down - Sposta voce giù - - - Copy Username - Copia nome utente - - - Copy Password - Copia password - - - Show Application Settings - Mostra impostazioni applicazione - - - Show Password Generator - Mostra generatore di password - - - Remove Passkey From Entry - Rimuovi Passkey Dalla Voce - - - Perform Auto-Type: {USERNAME} - Esegui digitazione automatica: {USERNAME} - - - Perform Auto-Type: {USERNAME}{ENTER} - Esegui digitazione automatica: {USERNAME}{ENTER} - - - Perform Auto-Type: {PASSWORD} - Esegui digitazione automatica: {PASSWORD} - - - Perform Auto-Type: {PASSWORD}{ENTER} - Esegui digitazione automatica: {PASSWORD}{ENTER} - - - Perform Auto-Type: {TOTP} - Esegui digitazione automatica: {TOTP} - - - Copy Title - Copia Titolo - - - Copy URL - Copia URL - - - Copy Notes - Copia Note - - - Export to CSV - Esporta CSV - - - Export to HTML - Esporta HTML - - - Import KeePass1 Database - Importa database KeePass1 - - - Import 1Password Vault - Importa 1Password Vault - - - Import CSV File - Importa file CSV - - - Show TOTP QR Code - Mostra codice QR TOTP... - - - Set up TOTP - Configura TOTP - - - Empty Recycle Bin - Svuota cestino - - - Open Donation Website - Apri sito per la Donazione - - - Open Bug Report - Apri segnalazione bug - - - Open Online Documentation - Apri documentazione online - - - Open Keyboard Shortcuts Guide - Apri Guida Scorciatoie Tastiera - - - Save Database Backup - Salva backup database - - - SSH Agent: Add Key - SSH Agent: Aggiungi Chiave - - - SSH Agent: Remove Key - Agent SSH: Rimuovi Chiave - - - Toggle Compact Mode - Modalità compatta - - - Set Theme: Automatic - Imposta tema: Automatico - - - Set Theme: Light - Imposta tema: Chiaro - - - Set Theme: Dark - Imposta tema: Scuro - - - Set Theme: Classic - Imposta tema: Classico - - - Toggle Show Menubar - Abilita Mostra la barra dei menù - - - Toggle Show Toolbar - Visualizza barra strumenti - - - Toggle Show Preview Panel - Visualizza pannello anteprima - - - Toggle Always on Top - Sempre in primo piano - - - Toggle Hide Usernames - Nascondi nome utente - - - Toggle Hide Passwords - Nascondi password - - - Export to XML - Esporta in XML - - - Toggle Allow Screen Capture - Consenti cattura schermo - - - Show Group Panel - Mostra pannello del gruppo - - - Toggle Show Group Panel - Attiva/disattiva 'Visualizza pannello del gruppo' - - - Setup Remote Sync… - Imposta Sincronizzazione Remota... - - - Password Generator - Genera password - - - E&xpire Entry… - Sca&denza voce… - - - Clear SSH Agent - Cancella SSH Agent - - - Clear all identities in ssh-agent - Cancella tutte le identità in ssh-agent - ManageDatabase @@ -6401,6 +5562,26 @@ Aspettatevi alcuni bug e problemi minori, questa versione è pensata per scopi d Overwriting %1 [%2] Sovrascrittura %1 [%2] + + older entry merged from database "%1" + voce precedente unita dal database "%1" + + + Adding backup for older target %1 [%2] + Aggiunto backup per la destinazione precedente %1 [%2] + + + Adding backup for older source %1 [%2] + Aggiunto backup per la sorgente precedente %1 [%2] + + + Reapplying older target entry on top of newer source %1 [%2] + Riapplica la voce destinazione precedente alla sorgente più recente %1 [%2] + + + Reapplying older source entry on top of newer target %1 [%2] + Riapplica la voce sorgente precedente alla destinazione più recente %1 [%2] + Synchronizing from newer source %1 [%2] Sincronizzazione sorgente più recente %1 [%2] @@ -6460,6 +5641,14 @@ Aspettatevi alcuni bug e problemi minori, questa versione è pensata per scopi d Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. Qui puoi modificare le impostazioni di cifratura del database. Puoi sempre modificarle dopo nelle impostazioni del database. + + Advanced Settings + Impostazioni avanzate + + + Simple Settings + Impostazioni semplici + NewDatabaseWizardPageDatabaseKey @@ -6494,25 +5683,6 @@ Aspettatevi alcuni bug e problemi minori, questa versione è pensata per scopi d Compila il nome visualizzato e una descrizione facoltativa per il nuovo database: - - NewEntryAttachmentsDialog - - Attachment name cannot be empty - Il nome dell'allegato non può essere vuoto - - - Attachment with the same name already exists - Esiste già un allegato con lo stesso nome - - - Save attachment - Salva allegato - - - New entry attachment - Nuovo allegato di ingresso - - NixUtils @@ -6559,6 +5729,15 @@ Aspettatevi alcuni bug e problemi minori, questa versione è pensata per scopi d Previsto %1 byte di testo non cifrato, trovato %2 + + OpVaultOpenWidget + + Read Database did not produce an instance +%1 + Lettura del database non ha prodotto un'istanza +%1 + + OpVaultReader @@ -6632,10 +5811,6 @@ Aspettatevi alcuni bug e problemi minori, questa versione è pensata per scopi d Unknown cipher: %1 Tipo di cifrario non supportato: %1 - - AES-256/GCM is currently not supported - AES-256/GCM non è attualmente supportato - Passphrase is required to decrypt this key La decifrazione di questa chiave richiede una frase segreta @@ -6701,183 +5876,8 @@ Aspettatevi alcuni bug e problemi minori, questa versione è pensata per scopi d EOF imprevisto durante la scrittura di una chiave privata - (encrypted) - (cifrato) - - - - OpenSSHKeyGenDialog - - SSH Key Generator - Generatore chiave SSH - - - Type - Tipo - - - Bits - Bit - - - Comment - Commento - - - - PasskeyExportDialog - - KeePassXC - Passkey Export - KeePassXC - esporta passkey - - - Filenames will be generated with title and .passkey file extension. - I nomi dei file saranno generati con titolo ed estensione di file passkey. - - - Export entries - Esporta voci - - - Export Selected - Esporta selezionati - - - Cancel - Annulla - - - Export to folder - Esporta su cartella - - - Export the following passkey entries. - Esporta le voci passkey seguenti. - - - - PasskeyExporter - - KeePassXC: Passkey Export - KeePassXC: esporta passkey - - - File "%1.passkey" already exists. -Do you want to overwrite it? - - Il file "%1.passkey" esiste già. -Vuoi sovrascriverlo? - - - - Cannot open file - Impossibile aprire file - - - Cannot open file "%1" for writing. - Impossibile aprire il file "%1" in scrittura. - - - Cannot write to file - Impossibile scrivere su file - - - - PasskeyImportDialog - - KeePassXC - Passkey Import - KeePassXC - importa passkey - - - Username: %1 - Nome utente: %1 - - - Group - Gruppo - - - Database - Database - - - Import Passkey - Importa Passkey - - - Import - Importa - - - Cancel - Annulla - - - Entry - Voce - - - Create new entry - Crea nuova voce - - - Relying Party: %1 - Relying Party: %1 - - - Import the following passkey: - Importa la seguente passkey: - - - Import the following passkey to this entry: - Importa la passkey seguente in questa voce: - - - Default passkeys group (Imported Passkeys) - Gruppo passkeys predefinito (Passkeys Importate) - - - - PasskeyImporter - - Passkey file - File passkey - - - All files - Tutti i file - - - Cannot open file - Impossibile aprire file - - - Cannot open file "%1" for reading. - Impossibile aprire il file "%1" in lettura. - - - Open passkey file - Apri file passkey - - - Cannot import passkey - Impossibile importare passkey - - - Cannot import passkey file "%1". Data is missing. - Impossibile importare il file passkey "%1". Mancano i dati. - - - Cannot import passkey file "%1". -The following data is missing: -%2 - Impossibile importare il file passkey "%1". -I dati seguenti mancano: -%2 - - - Cannot import passkey file "%1". Private key is missing or malformed. - Impossibile importare il file passkey "%1". La chiave privata è mancante o malformata. + AES-256/GCM is currently not supported + AES-256/GCM non è attualmente supportato @@ -7082,6 +6082,10 @@ I dati seguenti mancano: Word Count: Conteggio parole: + + Character Count: + Conteggio caratteri: + Word Case: Parole maiuscole/minuscole: @@ -7094,6 +6098,10 @@ I dati seguenti mancano: Add custom wordlist Aggiungi elenco parole personalizzato + + character + Carattere + Close Chiudi @@ -7130,30 +6138,6 @@ I dati seguenti mancano: Entropy: %1 bit Entropia: %1 bit - - Password Quality: %1 - Qualità password: %1 - - - Poor - Password quality - Debole - - - Weak - Password quality - Intermedia - - - Good - Password quality - Buona - - - Excellent - Password quality - Eccellente - Confirm Delete Wordlist Conferma cancellazione elenco parole @@ -7201,20 +6185,32 @@ Vuoi sovrascriverlo? Caratteri speciali - passwordLength - passwordLength + Password Quality: %1 + Qualità password: %1 - Characters: %1 - Caratteri :%1 + Poor + Password quality + Debole - MIXED case - lettere maiuscole e minuscole + Weak + Password quality + Intermedia - Excluded characters: "0", "1", "l", "I", "O", "|", "﹒", "B", "8", "G", "6" - Caratteri esclusi: "0", "1", "l", "I", "O", "|", "﹒", "B", "8", "G", "6" + Good + Password quality + Buona + + + Excellent + Password quality + Eccellente + + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + Caratteri esclusi: "0", "1", "l", "I", "O", "|", "﹒" @@ -7264,8 +6260,8 @@ Vuoi sovrascriverlo? Eccellente - Toggle password visibility using Control + H. Open the password generator using Control + G. - Mostra/nascondi password con Control + H. Apri il generarore di password con Control + G. + Toggle password visibilty using Control + H. Open the password generator using Control + G. + Mostra/nascondi password con Control + H. Apri il generatore di password con Control + G. @@ -7283,21 +6279,6 @@ Vuoi sovrascriverlo? Premi &Tab tra i caratteri - - PreviewEntryAttachmentsDialog - - Preview entry attachment - Anteprima dell'allegato della voce - - - No preview available - Nessuna anteprima disponibile - - - Image format not supported - Formato immagine non supportato - - QMessageBox @@ -7336,10 +6317,6 @@ Vuoi sovrascriverlo? Continue continuare - - Continue with weak password - Continua con la password debole - QObject @@ -7734,10 +6711,6 @@ Usa '--stdout' o specifica un 'file-esportazione'.Too many arguments provided. Troppi argomenti forniti. - - Path of the database. - Percorso del database. - Target decryption time in MS for the database. Il tempo di decifratura del database in MS. @@ -7758,6 +6731,10 @@ Usa '--stdout' o specifica un 'file-esportazione'.Create a new database. Crea un nuovo database. + + Path of the database. + Percorso del database. + Invalid decryption time %1. Tempo di decifratura non valido %1. @@ -7802,158 +6779,6 @@ Usa '--stdout' o specifica un 'file-esportazione'.Successfully created new database. Nuovo database creato con successo. - - Unset the password for the database. - Annulla l'impostazione della password per il database. - - - Unset the key file for the database. - Annulla l'impostazione del file chiave per il database. - - - Edit a database. - Modifica un database. - - - Cannot use %1 and %2 at the same time. - Non è possibile usare '%1' e '%2' contemporaneamente. - - - Could not change the database key. - Impossibile modificare la chiave del database. - - - Database was not modified. - Il database non è stato modificato. - - - Writing the database failed: %1 - Scrittura del database non riuscita: %1 - - - Successfully edited the database. - Il database è stato modificato correttamente. - - - Cannot remove password: The database does not have a password. - Impossibile rimuovere la password: il database non dispone di una password. - - - Cannot remove file key: The database does not have a file key. - Impossibile rimuovere il file chiave: il database non dispone di un file chiave. - - - Loading the new key file failed: %1 - Caricamento del nuovo file chiave non riuscito: %1 - - - Found unexpected Key type %1 - Trovato un tipo di chiave %1 inaspettato - - - Cannot remove all the keys from a database. - Impossibile rimuovere tutte le chiavi da un database. - - - Show a database's information. - Visualizza informazioni del database. - - - UUID: - UUID: - - - Name: - Nome: - - - Description: - Descrizione: - - - Cipher: - Cifrario: - - - KDF: - KDF: - - - Recycle bin is enabled. - Il cestino è abilitato . - - - Recycle bin is not enabled. - Il cestino non è abilitato. - - - Location - Posizione - - - Database created - Database creato - - - Last saved - Ultimo salvataggio - - - Unsaved changes - Modifiche non salvate - - - yes - - - - no - No - - - Number of groups - Numero di gruppi - - - Number of entries - Numero di voci - - - Number of expired entries - Numero di voci scadute - - - Unique passwords - Password univoche - - - Non-unique passwords - Password non univoche - - - Maximum password reuse - Massimo riutilizzo della password - - - Number of short passwords - Numero di password brevi - - - Number of weak passwords - Numero di password deboli - - - Entries excluded from reports - Voci escluse dal rapporto - - - Average password length - Lunghezza media password - - - %1 characters - %1 caratteri - Word count for the diceware passphrase. Numero di parole per la passphrase con lancio dei dadi @@ -7977,6 +6802,10 @@ Usa '--stdout' o specifica un 'file-esportazione'.Invalid word count %1 Conteggio parole non valido %1 + + The word list is too small (< 1000 items) + L'elenco delle parole è troppo piccolo (< 1000 voci) + Title for the entry. Titolo di una voce. @@ -8001,6 +6830,10 @@ Usa '--stdout' o specifica un 'file-esportazione'.Enter new password for entry: Insersci la nuova password per la voce: + + Writing the database failed: %1 + Scrittura del database non riuscita: %1 + Successfully edited entry %1. Voce %1 modificata correttamente. @@ -8121,6 +6954,10 @@ Usa '--stdout' o specifica un 'file-esportazione'.Exit interactive mode. Uscire dalla modalità interattiva. + + Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. + Formato usabile per l'esportazione. È possibile scegliere tra 'xml' e 'csv'. L'impostazione predefinita è 'xml'. + Exports the content of a database to standard output in the specified format. Esporta il contenuto di un database nell'output standard nel formato specificato. @@ -8221,6 +7058,106 @@ Usa '--stdout' o specifica un 'file-esportazione'.Successfully imported database. Database importato correttamente. + + Show a database's information. + Visualizza informazioni del database. + + + UUID: + UUID: + + + Name: + Nome: + + + Description: + Descrizione: + + + Cipher: + Cifrario: + + + KDF: + KDF: + + + Recycle bin is enabled. + Il cestino è abilitato . + + + Recycle bin is not enabled. + Il cestino non è abilitato. + + + Location + Posizione + + + Database created + Database creato + + + Last saved + Ultimo salvataggio + + + Unsaved changes + Modifiche non salvate + + + yes + + + + no + No + + + Number of groups + Numero di gruppi + + + Number of entries + Numero di voci + + + Number of expired entries + Numero di voci scadute + + + Unique passwords + Password univoche + + + Non-unique passwords + Password non univoche + + + Maximum password reuse + Massimo riutilizzo della password + + + Number of short passwords + Numero di password brevi + + + Number of weak passwords + Numero di password deboli + + + Entries excluded from reports + Voci escluse dal rapporto + + + Average password length + Lunghezza media password + + + %1 characters + %1 caratteri + Unknown command %1 Comando sconosciuto %1 @@ -8393,10 +7330,6 @@ Comandi disponibili: Show the protected attributes in clear text. Visualizza in chiaro gli attributi protetti. - - Show all the attributes of the entry. - Visualizza tutti gli attributi della voce. - Show the attachments of the entry. Visualizza allegati dell'elemento. @@ -8431,15 +7364,15 @@ Comandi disponibili: Failed to open database file %1: not found - Impossibile aprire il file database %1: non trovato + Impossibile aprire il file database '%1': file non trovato Failed to open database file %1: not a plain file - Impossibile aprire il file database %1: non un file piatto + Impossibile aprire il file database '%1': non è un file semplice Failed to open database file %1: not readable - Impossibile aprire il file database %1: non leggibile + Impossibile aprire il file database '%1': file non leggibile Enter password to unlock %1: @@ -8466,10 +7399,6 @@ Prendi in considerazione la possibilità di generare un nuovo file chiave.Invalid YubiKey serial %1 Seriale YubiKey %1 non valido - - Please present or touch your YubiKey to continue. - Per continuare presenta o tocca la YubiKey . - Enter password to encrypt database (optional): Inserisci la password per cifrare il database (facoltativo): @@ -8708,6 +7637,18 @@ Kernel: %3 %4 file empty file vuoto + + malformed string + stringa non valida + + + missing closing quote + virgoletta di chiusura mancante + + + %1: (row, col) %2,%3 + %1: (riga, col) %2,%3 + AES 256-bit AES 256-bit @@ -8812,11 +7753,11 @@ Kernel: %3 %4 Do you really want to move %n entry(s) to the recycle bin? - Vuoi davvero spostare %n voce nel cestino?Vuoi davvero spostare %n voci nel cestino?Vuoi davvero spostare %n voci nel cestino? + Vuoi davvero spostare '%n' voce nel cestino?Vuoi davvero spostare '%n' voci nel cestino?Vuoi davvero spostare '%n' voci nel cestino? Move entry(s) to recycle bin? - Spostare voce nel cestino?Spostare voci nel cestino?Spostare voci nel cestino? + Vuoi spostare la voce nel cestino?Vuoi spostare le voci nel cestino?Vuoi spostare voci nel cestino? Replace references to entry? @@ -8864,7 +7805,7 @@ Kernel: %3 %4 filenames of the password databases to open (*.kdbx) - i nomi dei file database delle password da aprire (*.kdbx) + nomi dei file database delle password da aprire (*.kdbx) path to a custom config file @@ -8886,6 +7827,14 @@ Kernel: %3 %4 read password of the database from stdin leggi la password del database da stdin + + allow app screen recordering and screenshots + consenti la registrazione dello schermo dell'app e screenshot + + + Locked databases. + Database bloccati. + Database failed to lock. Impossibile bloccare il database. @@ -8894,10 +7843,6 @@ Kernel: %3 %4 Another instance of KeePassXC is already running. È già in esecuzione un'altra istanza di KeePassXC. - - KeePassXC is not running. No open database to lock - KeePassXC non è in esecuzione. Nessun database aperto da bloccare - Fatal error while testing the cryptographic functions. Errore fatale durante il test delle funzioni di crittografia. @@ -8941,300 +7886,70 @@ Kernel: %3 %4 KDF non valido - Access to all entries is denied - L'accesso a tutte le voci è negato + Please present or touch your YubiKey to continue. + Per continuare presenta o tocca la YubiKey . - allow screenshots and app recording (Windows/macOS) - consentire screenshot e registrazione con app (Windows / macOS) + Show all the attributes of the entry. + Visualizza tutti gli attributi della voce. + + + Edit a database. + Modifica un database. + + + Could not change the database key. + Impossibile modificare la chiave del database. + + + Database was not modified. + Il database non è stato modificato. + + + Successfully edited the database. + Il database è stato modificato correttamente. + + + Loading the new key file failed: %1 + Caricamento del nuovo file chiave non riuscito: %1 + + + Unset the password for the database. + Annulla l'impostazione della password per il database. + + + Unset the key file for the database. + Annulla l'impostazione del file chiave per il database. + + + Cannot use %1 and %2 at the same time. + Non è possibile usare '%1' e '%2' contemporaneamente. + + + Cannot remove all the keys from a database. + Impossibile rimuovere tutte le chiavi da un database. + + + Cannot remove password: The database does not have a password. + Impossibile rimuovere la password: il database non dispone di una password. + + + Cannot remove file key: The database does not have a file key. + Impossibile rimuovere il file chiave: il database non dispone di un file chiave. + + + Found unexpected Key type %1 + Trovato un tipo di chiave %1 inaspettato Set the key file for the database. -This option is deprecated, use --set-key-file instead. +This options is deprecated, use --set-key-file instead. Imposta il file chiave per il database. -Questa opzione è deprecata, utilizza invece --set-key-file. +Questa opzione è deprecata, usa invece --set-key-file. - Databases have been locked. - I databases sono stati bloccati. - - - Attestation not supported - Attestazione non supportata - - - Credential is excluded - La credenziale è esclusa - - - Passkeys request canceled - Richiesta di passkey annullata - - - Invalid user verification - Verifica utente non valida - - - Empty public key - Chiave pubblica vuota - - - Invalid URL provided - Fornita URL non valido - - - Passkeys - Passkey - - - AES initialization failed - Inizializzazione AES non riuscita - - - AES encrypt failed - Cifratura AES non riuscita - - - Failed to store in Linux Keyring - Salvataggio su Portachiavi Linux fallito - - - Polkit returned an error: %1 - Polkit ha restituito un errore: %1 - - - Could not locate key in keyring - Impossibile trovare chiave nel portachiavi - - - Could not read key in keyring - Impossibile leggere chiave nel portachiavi - - - AES decrypt failed - Decifratura AES non riuscita - - - No Polkit authentication agent was available - Non era disponibile nessun agente di autenticazione Polkit - - - Polkit authorization failed - Autenticazione Polkit non riuscita - - - No Quick Unlock provider is available - Non è disponibile nessun fornitore per Sblocco rapido - - - Failed to init KeePassXC crypto. - Impossibile inizializzare la cifratura di KeePassXC. - - - Failed to encrypt key data. - Impossibile cifrare i dati chiave. - - - Failed to get Windows Hello credential. - Impossibile ottenere credenziale Windows Hello. - - - Failed to decrypt key data. - Impossibile decifrare dati chiave. - - - Origin is empty or not allowed - Origine vuota o non consentita - - - Effective domain is not a valid domain - Il dominio effettivo non è un dominio valido - - - Origin and RP ID do not match - Origin e RP ID non corrispondono - - - No supported algorithms were provided - Nessun algoritmo supportato è stato fornito - - - Wait for timer to expire - Attendi la scadenza del timer - - - Challenge is shorter than required minimum length - La sfida è inferiore alla lunghezza minima richiesta - - - user.id does not match the required length - user.id non corrisponde alla lunghezza richiesta - - - Favorite - Tag for favorite entries - Preferito - - - File does not exist. - Il file non esiste. - - - Cannot open file: %1 - Impossibile aprire il file: %1 - - - Cannot parse file: %1 at position %2 - Impossibile processare il file: %1 alla posizione %2 - - - Failed to decrypt json file: %1 - Impossibile decriptare il file json: %1 - - - Invalid encKeyValidation field - Campo encKeyValidation non valido - - - Invalid cipher list within encKeyValidation field - Elenco di cifrari non valido nel campo encKeyValidation - - - Wrong password - Password errata - - - Invalid encrypted data field - Campo dati cifrati non valido - - - Invalid cipher list within encrypted data field - Elenco di cifrari non valido nel campo dati cifrato - - - Cannot initialize cipher - Impossibile inizializzare il cifrario - - - Cannot decrypt data - Impossibile decriptare il messaggio - - - Bitwarden Import - Importa Bitwarden - - - Archived - Tag for archived entries - Archiviati - - - Invalid 1PUX file format: Not a valid ZIP file. - Formato file 1PUX non valido. Non è un file ZIP valido. - - - Invalid 1PUX file format: Missing export.data - Formato file 1PUX non valido. Manca export.data - - - 1Password Import - Importa 1Password - - - Enter Shortcut - Inserisci scorciatoia - - - Action - Azione - - - Shortcuts - Scorciatoie - - - Unknown passkeys error - Errore sconosciuto per le passkeys - - - Invalid KDF iterations, cannot decrypt json file - Numero di iterazioni KDF non valido, impossibile decriptare il file json - - - Unsupported format, ensure your Bitwarden export is password-protected - Formato non supportato, assicurati che l'esportazione Bitwarden sia protetta da password - - - Only PBKDF and Argon2 are supported, cannot decrypt json file - Solo PBKDF e Argon2 sono supportati, non è possibile decriptare il file json - - - Reset Shortcuts - Ripristina scorciatoie - - - Double click an action to change its shortcut - Doppioclicca un'azione per cambiare la sua scorciatoia - - - Filter... - Filtra... - - - Shortcut Conflict - Conflitto scorciatoie - - - Shortcut %1 conflicts with '%2'. Overwrite shortcut? - La scorciatoia %1 è in conflitto con '%2'. Sovrascrivere la scorciatoia? - - - Cannot generate valid passphrases because the wordlist is too short - Impossibile generare passphrase valide perché l'elenco delle parole è troppo corto - - - Encrypted files are not supported. - I file crittografati non sono supportati. - - - Proton Pass Import - Importa Proton Pass - - - Delete plugin data? - Vuoi eliminare i dati del plugin? - - - Delete plugin data from Entry(s)? - Eliminare i dati del plugin dalla voce?Eliminare i dati del plugin dalle voci?Eliminare i dati del plugin dalla/e voce/i? - - - Passkey - Passkey - - - Format to use when exporting. Available choices are 'xml', 'csv' or 'html'. Defaults to 'xml'. - Formato da utilizzare per l'esportazione. Scelte disponibili sono 'xml', 'csv' o 'html'. Predefinito è 'xml'. - - - start minimized to the system tray - avvia minimizzato nell'area di notifica di sistema - - - malformed string, possible unescaped delimiter - stringa non valida, possibile delimitatore senza escape - - - missing closing delimiter - delimitatore di chiusura mancante - - - %1, row: %2, column: %3 - %1, riga: %2, colonna: %3 - - - Tags - Etichette + KeePassXC is not running. No open database to lock + KeePassXC non è in esecuzione. Nessun database aperto da bloccare @@ -9271,39 +7986,20 @@ Questa opzione è deprecata, utilizza invece --set-key-file. Errore interno di zlib: - - RemoteHandler - - Command `%1` did not finish in time. Process was killed. - Il comando `%1` non ha terminato nei tempi previsti. Il processo è stato ucciso. - - - Failed to upload merged database. Command `%1` did not finish in time. Process was killed. - Upload del database combinato fallito. Il comando `%1` non ha terminato nei tempi previsti. Il processo è stato ucciso. - - - Invalid download parameters provided. - Parametri di download forniti non validi. - - - Command `%1` failed to download database. - Il comando `%1` ha fallito il download del database. - - - Invalid database pointer or upload parameters provided. - Fornito puntatore al database/parametri di upload non corretto. - - - Command `%1` exited with status code: %2 - Il comando `%1` è terminato con status code: %2 - - - Failed to upload merged database. Command `%1` exited with status code: %2 - Upload del database combinato fallito. Il comando `%1` è terminato con status code: %2 - - ReportsWidgetBrowserStatistics + + Exclude expired entries from the report + Escludi dal rapporto voci scadute + + + Show only entries which have URL set + Visualizza solo le voci con URL impostato + + + Show only entries which have browser settings in custom data + Visualizza solo le voci con impostazioni del browser nei dati personalizzati + Double-click entries to edit. Doppio clic sulle voci da modificare. @@ -9362,59 +8058,51 @@ Questa opzione è deprecata, utilizza invece --set-key-file. Delete Entry(s)… - Elimina voce…Elimina voci…Elimina voci… + Elimina voce…Elimina voce…Elimina voci… Exclude from reports Escludi dal rapporto - - Expire Entry(s)… - Scadenza voce…Scadenza voci…Scadenza voce(i)… - - - Only show entries that have a URL - Mostra solo voci che hanno un URL - - - Only show entries that have been explicitly allowed or denied - Mostra solo voci che sono state esplicitamente consentite o negate - - - Show expired entries - Mostra voci scadute - - - (Expired) - (scaduta) - - - Delete plugin data from Entry(s)… - Eliminare i dati del plugin dalla voce...Eliminare i dati del plugin dalle voci...Eliminare i dati del plugin dalla(e) voce(i)... - ReportsWidgetHealthcheck - Show expired entries - Mostra voci scadute + Exclude expired entries from the report + Escludi dal rapporto voci scadute - (Expired) - (scaduta) + Also show entries that have been excluded from reports + Visualizza anche le voci escluse dai rapporti Hover over reason to show additional details. Double-click entries to edit. - Per visualizzzare dettagli aggiuntivi sposta il cursore sulla notifica. Doppio clic per modificare le voci. + Per visualizzare dettagli aggiuntivi sposta il cursore sulla notifica. +Doppio clic per modificare le voci. + + + Bad + Password quality + Scadente Bad — password must be changed Scadente: la password deve essere modificata + + Poor + Password quality + Debole + Poor — password should be changed Inefficace — la password dovrebbe essere modificata + + Weak + Password quality + Intermedia + Weak — consider changing the password Debole — considera di modificare la password @@ -9463,14 +8151,6 @@ Questa opzione è deprecata, utilizza invece --set-key-file. Exclude from reports Escludi dal rapporto - - Expire Entry(s)… - Scadenza voce…Scadenza voci…Scadenza voce(i)… - - - Show entries that have been excluded from reports - Mostra voci che sono state escluse dai rapporti - ReportsWidgetHibp @@ -9567,77 +8247,6 @@ La funzionalità di rete è richiesta per verificare la password con i database Exclude from reports Escludi dal rapporto - - Expire Entry(s)… - Scadenza voce…Scadenza voci…Scadenza voce(i)… - - - - ReportsWidgetPasskeys - - Export - Esportare - - - Import - Importa - - - List of entry URLs - Elenco degli URL delle voci - - - Title - Titolo - - - Path - Percorso - - - Username - Nome utente - - - URLs - URL - - - Edit Entry… - Modifica voce… - - - Delete Entry(s)… - Elimina voce…Elimina voci…Elimina voce/i… - - - Relying Party - Relying Party - - - Show expired entries - Mostra voci scadute - - - (Expired) - (scaduta) - - - Export Confirmation - Conferma esportazione - - - The passkey file will be vulnerable to theft and unauthorized use, if left unsecured. Are you sure you want to continue? - Il file della passkey sarà esposto a furto oppure uso non autorizzato se lasciato insicuro. Sei sicuro di voler continuare? - - - Please wait, list of entries with passkeys is being updated… - Attendi, la lista delle voci con passkey è in aggiornamento... - - - No entries with passkeys. - Nessuna voce con passkeys. - ReportsWidgetStatistics @@ -9812,14 +8421,6 @@ La funzionalità di rete è richiesta per verificare la password con i database No agent running, cannot list identities. Nessun agente in esecuzione, impossibile elencare le identità. - - Failed to remove all SSH identities from agent. - Rimozione delle identità SSH dall'agent non riuscite. - - - All SSH identities removed from agent. - Tutte le identità SSH rimosse dall'agent. - SearchHelpWidget @@ -9886,10 +8487,6 @@ La funzionalità di rete è richiesta per verificare la password con i database Search Help Cerca nella Guida in linea - - Save Search - Salva ricerca - Search (%1)… Search placeholder text, %1 is the keyboard shortcut @@ -9903,6 +8500,10 @@ La funzionalità di rete è richiesta per verificare la password con i database Limit search to selected group Limita la ricerca al gruppo selezionato + + Save Search + Salva ricerca + SettingsClientModel @@ -9964,10 +8565,32 @@ La funzionalità di rete è richiesta per verificare la password con i database Confirm when passwords are retrieved by clients Conferma quando le password vengono recuperate dai client + + <html><head/><body><p><span style=" + font-family:'-apple-system','BlinkMacSystemFont','Segoe UI','Helvetica','Arial','sans-serif','Apple Color + Emoji','Segoe UI Emoji'; font-size:14px; color:#24292e; background-color:#ffffff;">This setting does + not override disabling recycle bin prompts</span></p></body></html> + + <html><head/><body><p><span style=" + font-family:'-apple-system','BlinkMacSystemFont','Segoe UI','Helvetica','Arial','sans-serif','Apple Color + Emoji','Segoe UI Emoji'; font-size:14px; color:#24292e; background-color:#ffffff;">Questa impostazione fa + non sovrascrive la disabilitazione delle richieste del Cestino</span></p></body></html> + + Confirm when clients request entry deletion Conferma quando i client richiedono l'eliminazione delle voci + + <html><head/><body><p>This improves compatibility with certain applications + which search for password without unlocking the database first.</p><p>But enabling this may also + crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a + different value set in applications.)</p></body></html> + + <html><head/><body><p>Questo migliora la compatibilità con determinate applicazioni + che cercano la password senza prima sbloccare il database.</p><p>Ma abilitare questo può anche arrestare in modo anomalo il client se il database non può essere sbloccato entro un determinato timeout. (di solito 25s, ma può essere un valore diverso impostato nelle applicazioni.)</p></body></html> + + Prompt to unlock database before searching Richiedi di sbloccare il database prima della ricerca @@ -9992,14 +8615,6 @@ La funzionalità di rete è richiesta per verificare la password con i database Save current changes to activate the plugin and enable editing of this section. Salva i cambiamenti per attivare il plugin e modificare questa sezione. - - <html><head/><body><p>This setting does not override disabling recycle bin prompts </p></body></html> - <html><head/><body><p>Questa impostazione non ha la precedenza sulla disabilitazione dei messaggi del cestino</p></body></html> - - - <html><head/><body><p>This improves compatibility with certain applications which search for password without unlocking the database first.</p><p>But enabling this may also crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a different value set in applications.) </p></body></html> - <html><head/><body><p> Questo migliora la compatibilità con alcune applicazioni che cercano la password senza prima sbloccare il database.</p><p>Tuttavia, abilitarlo potrebbe anche mandare in crash il client se il database non può essere sbloccato entro un certo timeout. (di solito 25s, ma potrebbe essere un valore diverso impostato nelle applicazioni.)</p></body></html> - SettingsWidgetKeeShare @@ -10107,14 +8722,6 @@ La funzionalità di rete è richiesta per verificare la password con i database TagModel - - Clear Search - Cancella ricerca - - - All Entries - Tutte le voci - Expired Scaduto @@ -10123,6 +8730,14 @@ La funzionalità di rete è richiesta per verificare la password con i database Weak Passwords Password deboli + + All Entries + Tutte le voci + + + Clear Search + Cancella ricerca + TagView @@ -10300,6 +8915,26 @@ Esempio: JBSWY3DPEHPK3PXP Start storing your passwords securely in a KeePassXC database Inizio archivziazione password in modo sicuro in un database KeePassXC + + Create new database + Crea nuovo database + + + Open existing database + Apri database esistente + + + Import from KeePass 1 + Importa da KeePass 1 + + + Import from 1Password + Importa da 1Password + + + Import from CSV + Importa da CSV + Recent databases Database recenti @@ -10312,18 +8947,6 @@ Esempio: JBSWY3DPEHPK3PXP Welcome to KeePassXC %1 Benvenuto in KeePassXC %1 - - Create Database - Crea database - - - Open Database - Apri database - - - Import File - Importa file - WinUtils @@ -10340,8 +8963,31 @@ Esempio: JBSWY3DPEHPK3PXP Impossibile registrare la scorciatoia globale + + WindowsHello + + Failed to init KeePassXC crypto. + Impossibile inizializzare la cifratura di KeePassXC. + + + Failed to encrypt key data. + Impossibile cifrare i dati chiave. + + + Failed to get Windows Hello credential. + Impossibile ottenere le credenziali di Windows Hello. + + + Failed to decrypt key data. + Impossibile decifrare i dati chiave. + + YubiKey + + %1 No interface, slot %2 + %1 Nessuna interfaccia, slot %2 + General: Generale: @@ -10353,6 +8999,14 @@ Esempio: JBSWY3DPEHPK3PXP YubiKeyEditWidget + + Refresh hardware tokens + Aggiorna token hardware + + + Refresh + Aggiorna + Hardware key slot selection Selezione degli slot dei tasti hardware @@ -10385,6 +9039,10 @@ Esempio: JBSWY3DPEHPK3PXP Challenge-Response set, click to change or remove Risposta di verifica impostata, fai clic per modificarla/rimuoverla + + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + <p>Se possiedi una <a href="https://www.yubico.com/">YubiKey</a> o <a href="https://onlykey.io">OnlyKey</a>, è possibile usarla per una protezione aggiuntiva.</p><p>La chiave richiede che uno dei suoi slot sia programmato come <a href="https://www.yubico.com/products/services-software/challenge-response/">HMAC-SHA1 Risposta di verifica</a>.</p> + Detecting hardware keys… Rilevamento delle chiavi hardware... @@ -10393,25 +9051,28 @@ Esempio: JBSWY3DPEHPK3PXP No hardware keys detected Nessuna chiave hardware rilevata + + + YubiKeyInterface - Refresh hardware keys - Aggiorna tasti hardware - - - <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed with <a href="https://keepassxc.org/docs/#faq-yubikey-howto">Challenge-Response</a>.</p> - <p>Se possiedi una <a href="https://www.yubico.com/">YubiKey</a> o <a href="https://onlykey.io">OnlyKey</a>, puoi usarla per una maggiore sicurezza.</p><p>La chiave richiede che uno dei suoi slot sia programmato con <a href="https://keepassxc.org/docs/#faq-yubikey-howto">Challenge-Response</a>.</p> - - - Hardware keys found, but no slots are configured - Chiave hardware trovata, ma non è configurato nessuno slot + %1 Invalid slot specified - %2 + %1 Slot specificato non valido - %2 YubiKeyInterfacePCSC + + (PCSC) %1 [%2] Challenge-Response - Slot %3 + (PCSC) %1 [%2] Risposta di verifica - Slot %3 + The YubiKey PCSC interface has not been initialized. L'interfaccia PCSC YubiKey non è stata inizializzata. + + Hardware key is currently in use. + La chiave hardware è già in uso. + Could not find or access hardware key with serial number %1. Please present it to continue. Impossibile trovare o accedere alla chiave hardware con numero di serie %1. Presentala per continuare. @@ -10428,21 +9089,6 @@ Esempio: JBSWY3DPEHPK3PXP Failed to complete a challenge-response, the PCSC error code was: %1 Impossibile completare una risposta di verifica, il codice di errore PCSC era: %1 - - (NFC) %1 [%2] - Slot %3, %4 - YubiKey display fields - (NFC) %1 [%2] - Slot %3, %4 - - - Press - USB Challenge-Response Key interaction request - Premi - - - Passive - USB Challenge-Response Key no interaction required - Passiva - YubiKeyInterfaceUSB @@ -10450,6 +9096,14 @@ Esempio: JBSWY3DPEHPK3PXP Unknown Sconosciuto + + (USB) %1 [%2] Configured Slot - %3 + (USB) %1 [%2] Slot configurato - %3 + + + (USB) %1 [%2] Challenge-Response - Slot %3 - %4 + (USB) %1 [%2] Risposta di verifica - Slot %3 - %4 + Press USB Challenge-Response Key interaction request @@ -10464,6 +9118,10 @@ Esempio: JBSWY3DPEHPK3PXP The YubiKey USB interface has not been initialized. L'interfaccia USB YubiKey non è stata inizializzata. + + Hardware key is currently in use. + La chiave hardware è già in uso. + Could not find hardware key with serial number %1. Please plug it in to continue. Non è stato possibile trovare una chiave hardware nello slot numero %1. Ccollegane una per procedere. @@ -10480,15 +9138,5 @@ Esempio: JBSWY3DPEHPK3PXP Failed to complete a challenge-response, the specific error was: %1 Impossibile completare challenge-response, l'errore specifico è: %1 - - %1 [%2] - Slot %3 - YubiKey NEO display fields - %1 [%2] - Slot %3 - - - %1 [%2] - Slot %3, %4 - YubiKey display fields - %1 [%2] - Slot %3, %4 - \ No newline at end of file diff --git a/share/translations/keepassxc_ja.ts b/share/translations/keepassxc_ja.ts index 5712c65c1..25db825f0 100644 --- a/share/translations/keepassxc_ja.ts +++ b/share/translations/keepassxc_ja.ts @@ -80,32 +80,32 @@ Details 詳細 - - Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. - あなたの選択は、要求したクライアントと KeePassXC の両方が実行されている間は保存されます。 - Remember 記憶する Allow Selected - 選択したものを許可する + 選択したものを許可 + + + Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. + あなたの選択は、要求したクライアントと KeePassXC の両方が実行されている間は保存されます。 Deny All && Future - 今後も含めすべて拒否する + 今後も含めすべて拒否 Allow All && &Future - 今後も含めすべて許可する(&F) + 今後も含めすべて許可 AccessControlDialog::DenyButton Deny for this program - このプログラムを拒否する + このプログラムを拒否 @@ -122,25 +122,21 @@ Use OpenSSH OpenSSH を使用する - - Use both agents - 両方のエージェントを使用する - SSH_AUTH_SOCK override SSH_AUTH_SOCK のオーバーライド SSH_AUTH_SOCK value - SSH_AUTH_SOCK の値 + SSH_AUTH_SOCK 値 (empty) - (空白) + (空) SSH_SK_PROVIDER value - SSH_SK_PROVIDER の値 + SSH_SK_PROVIDER 値 SSH_SK_PROVIDER override @@ -154,6 +150,10 @@ SSH Agent connection is working! SSH エージェント接続が動作中です! + + Use both agents + 両方のエージェントを使用する + ApplicationSettingsWidget @@ -169,10 +169,6 @@ Security セキュリティ - - This setting cannot be enabled when minimize on unlock is enabled. - この設定は、ロック解除時の最小化が有効な場合は使用できません。 - Access error for config file %1 設定ファイル %1 へのアクセスエラー @@ -217,49 +213,21 @@ You must restart the application to set the new language. Would you like to restart now? 新しい言語を設定するには、このアプリケーションを再起動する必要があります。今すぐ再起動しますか? + + Reset Settings? + 設定をリセットしますか? + + + Are you sure you want to reset all general and security settings to default? + すべての全般設定とセキュリティ設定を初期設定に戻してもよろしいですか? + Select backup storage directory - バックアップディレクトリーを選択 + バックアップディレクトリを選択 - Confirm Reset - 初期化の確認 - - - Are you sure you want to reset all settings to default? - 本当に、すべての設定を初期設定に戻しますか? - - - Import KeePassXC Settings - KeePassXCの設定をインポート - - - Failed to import settings from %1, not a valid settings file. - データベースファイル %1 を開くのに失敗しました: 有効な設定ファイルではありません。 - - - Export KeePassXC Settings - KeePassXCの設定をエキスパート - - - Small - - - - Normal - 通常 - - - Medium - - - - Large - - - - Custom - カスタム + This setting cannot be enabled when minimize on unlock is enabled. + @@ -292,10 +260,6 @@ Remember previously used databases 以前使用したデータベースを記憶する - - recent files - 件の最近使用したファイル - Load previously open databases on startup 起動時に前回開いたデータベースを読み込む @@ -306,12 +270,31 @@ Check for updates at application startup once per week - 起動時に更新を確認する (週 1 回) + 起動時に更新を確認する (週一回) Include beta releases when checking for updates ベータ版も確認対象にする + + On database unlock, show entries that + データベースのロック解除時に次のエントリーを表示する + + + have expired + On database unlock, show entries that... + 期限切れ + + + days + On database unlock, show entries that will expire within %1 days + + + + will expire within + On database unlock, show entries that... + 期限切れまであと + File Management ファイル管理 @@ -336,10 +319,22 @@ Backup database file before saving 保存する前にデータベースファイルをバックアップする + + Backup destination + バックアップ先 + + + Specifies the database backup file location. Occurrences of "{DB_FILENAME}" are replaced with the filename of the saved database without extension. {TIME:<format>} is replaced with the backup time, see https://doc.qt.io/qt-5/qdatetime.html#toString. <format> defaults to format string "dd_MM_yyyy_hh-mm-ss". + データベースのバックアップファイルの場所を指定してください。"{DB_FILENAME}" は保存されたデータベースのファイル名から拡張子を取り除いたものに置き換えられます。{TIME:<format>} はバックアップした時刻に置き換えられます。https://doc.qt.io/qt-5/qdatetime.html#toString を確認してください。<format> 既定のフォーマットは "dd_MM_yyyy_hh-mm-ss" です。 + {DB_FILENAME}.old.kdbx {DB_FILENAME}.old.kdbx + + Choose... + 選択... + Use alternative saving method (may solve problems with Dropbox, Google Drive, GVFS, etc.) 別の保存方法を使用する (Dropbox、Google Drive、GVFS などで生じる問題が解決する可能性があります) @@ -382,7 +377,7 @@ Website icon download timeout in seconds - ウェブサイトアイコンダウンロードのタイムアウトまでの時間 (秒) + ウェブサイトアイコンダウンロードのタイムアウトまでの秒 sec @@ -417,10 +412,6 @@ Toolbar button style: ツールバーのボタンのスタイル: - - Show passwords in color - パスワードに色を付けて表示する - Use monospaced font for notes メモに等幅フォントを使用する @@ -507,69 +498,12 @@ 最後に入力したエントリーの記憶: - On database unlock, show entries that will expire within - データベースをロック解除した後、次の期間に期限を迎えるエントリーを表示する + recent files + 最近使用したファイル - On database unlock, show entries that will expire within - データベースをロック解除した後、次の期間に期限を迎えるエントリーを表示する - - - days - number of days warning for password expiration - - - - Destination format: - 出力形式: - - - <html><head/><body><p><span style=" font-weight:600;">{DB_FILENAME}</span> is replaced with the filename of the saved database without extension</p><p><span style=" font-weight:600;">{TIME:&lt;format&gt;}</span> is replaced with the specified time format (default: dd_MM_yyyy_hh-mm-ss)</p><p>See the User Guide for more details</p></body></html> - <html><head/><body><p><span style=" font-weight:600;">{DB_FILENAME}</span> は保存したデータベースの拡張子を含まないファイル名で置き換えられます。</p><p><span style=" font-weight:600;">{TIME:&lt;format&gt;}</span> は、時間 (デフォルトでは: dd_MM_yyyy_hh-mm-ss) で置き換えられます。</p><p>詳細はユーザーガイドを確認してください。</p></body></html> - - - Choose folder... - フォルダを選択… - - - Show confirmation before moving entries to recycle bin - エントリーをゴミ箱に移動する前に確認を表示する - - - Copy data on double clicking field in entry view - エントリー表示でフィールドをダブルクリックしてデータをコピーする - - - Show toolbar - ツールバーを表示 - - - Show the menu bar by pressing the Alt key - Alt キーでメニューバーを表示 - - - Show menubar - メニューバーを表示 - - - Import settings… - 設定をインポート… - - - Export settings… - 設定をエキスパート… - - - Open browser on double clicking URL field in entry view - エントリー表示で URL フィールドをダブルクリックしてブラウザーを開く - - - Font size: - フォントサイズ: - - - Font size selection - フォントサイズの選択 + Show passwords in color + パスワードに色を付けて表示する @@ -624,6 +558,10 @@ Lock databases after minimizing the window ウィンドウを最小化したらデータベースをロックする + + Require password repeat when it is visible + パスワードが表示されていても再入力を要求する + Hide passwords when editing them 編集時にパスワードを非表示にする @@ -636,6 +574,18 @@ Hide passwords in the entry preview panel エントリーのプレビューパネルのパスワードを非表示にする + + Hide entry notes by default + エントリーのメモを既定で非表示にする + + + Move entries to recycle bin without confirmation + 確認なしでエントリーをゴミ箱に移動する + + + Enable double click to copy the username/password entry columns + ダブルクリックでユーザー名/パスワードエントリーをコピーできるようにする + Privacy プライバシー @@ -646,19 +596,7 @@ Hide TOTP in the entry preview panel - エントリーのプレビューパネルで、TOTP を非表示にする - - - Lock databases when switching user - ユーザーを切り替えるときにデータベースをロックする - - - Lock Options - ロックのオプション - - - Hide notes in the entry preview panel - エントリーのプレビューパネルのメモを非表示にする + @@ -685,7 +623,7 @@ Invalid entry provided - 提供されたエントリーが正しくありません + 提供されたエントリーが不正です Bracket imbalance detected, found extra { or } @@ -704,13 +642,27 @@ 遅延時間の最大値は %1 です: %2 - Entry does not have attribute for PICKCHARS: %1 - エントリーに PICKCHARS の属性がありません: %1 + Invalid conversion type: %1 + 変換形式が不正です: %1 + + + Invalid conversion syntax: %1 + 変換構文が不正です: %1 + + + Invalid regular expression syntax %1 +%2 + 正規表現の構文が不正です: %1 +%2 Invalid placeholder: %1 無効なプレースホルダーです: %1 + + Entry does not have attribute for PICKCHARS: %1 + エントリーに PICKCHARS の属性がありません: %1 + AutoTypeAssociationsModel @@ -724,7 +676,7 @@ (empty) - (空白) + (空) Default sequence @@ -752,6 +704,10 @@ AutoTypePlatformX11 + + Trying to send invalid keysym. + 無効なキーシムを送信しようとしています。 + Sequence aborted: Caps Lock is on シーケンスを中止しました: Caps Lock がオンになっています @@ -764,10 +720,6 @@ Unable to get valid keycode for key: キーの正常なキーコードを取得できません: - - Trying to send invalid keyboard symbol. - 無効なキーボード記号を送信しようとしています。 - AutoTypeSelectDialog @@ -872,13 +824,13 @@ Ctrl+4 - 仮想キーボードを使用 (Windows のみ)</p> Disable for this site このサイトを無効化 - - Undo - 元に戻す - BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + KeePassXC-Browser エントリーを保存 + Ok OK @@ -893,74 +845,13 @@ Please select the correct database for saving credentials. 複数のデータベースを開いています。 資格情報を保存する適切なデータベースを選択してください。 - - KeePassXC - Select Database - KeePassXC - データベースを選択 - - - - BrowserPasskeysConfirmationDialog - - Cancel - キャンセル - - - Update - 更新 - - - Authenticate - 認証 - - - Register new - 新規登録 - - - Register - 登録 - - - Timeout in <b>%n</b> seconds... - <b>%n</b> 秒でタイムアウト... - - - Relying Party: %1 - サービス提供者 (Relying Party): %1 - - - Username: %1 - ユーザー名: %1 - - - KeePassXC - Passkey credentials - KeePassXC - パスキー認証情報 - - - Add to existing entry - 既存のエントリーに追加 - - - Existing passkey found. -Do you want to register a new passkey for: - 既にパスキーが存在しています。 -新しいパスキーを追加しますか: - - - Select the existing passkey and press Update to replace it. - パスキーを置き換えたい場合、既存のパスキーを選択して更新を押してください。 - - - Authenticate passkey credentials for: - パスキー認証情報で認証: - - - Do you want to register a passkey for: - パスキーを登録しますか: - BrowserService + + KeePassXC: Create a new group + KeePassXC: 新しいグループを作成 + A request for creating a new group "%1" has been received. Do you want to create this group? @@ -969,6 +860,10 @@ Do you want to create this group? このグループを作成しますか? + + KeePassXC: New key association request + KeePassXC: 新しいキーのアソシエーション要求 + You have received an association request for the following database: %1 @@ -985,16 +880,28 @@ chrome-laptop. 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? 共有暗号化キー "%1" は既に存在します。 上書きしますか? + + KeePassXC: Update Entry + KeePassXC: エントリーを更新 + Do you want to update the information in %1 - %2? %1 - %2 の情報を更新しますか? + + KeePassXC: Delete entry + KeePassXC: エントリーを削除 + A request for deleting entry "%1" has been received. Do you want to delete the entry? @@ -1004,58 +911,50 @@ Do you want to delete the entry? - %1 (Passkey) - %1 (パスキー) + Converting attributes to custom data… + 属性をカスタムデータに変換しています… - KeePassXC - Create a new group - KeePassXC - 新しいグループを作成 + Abort + 中止 - Disable - 無効 + KeePassXC: Converted KeePassHTTP attributes + KeePassXC: KeePassHTTP の属性を変換しました - KeePassXC - Overwrite existing key? - KeePassXC - 既存の鍵を上書きしますか? + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + %1 個のエントリーから属性を正常に変換しました。 +%2 個のキーをカスタムデータに移行しました。 + + + Successfully moved %n keys to custom data. + %n 個のキーを正常にカスタムデータに移行しました。 - KeePassXC - Update Entry - KeePassXC - エントリーを更新 + KeePassXC: No entry with KeePassHTTP attributes found! + KeePassXC: KeePassHTTP の属性があるエントリーは見つかりません - KeePassXC - Delete entry - KeePassXC - エントリーを削除 + The active database does not contain an entry with KeePassHTTP attributes. + アクティブなデータベースには KeePassHTTP の属性があるエントリーは含まれていません。 - KeePassXC - New key association request - KeePassXC - 新しいキーのアソシエーション要求 + Don't show this warning again + 今後この警告を表示しない - Passkey - パスキー + KeePassXC: Legacy browser integration settings detected + KeePassXC: レガシーなブラウザー統合の設定を検出しました - KeePassXC - Passkey credentials - KeePassXC - パスキー認証情報 - - - Register a new passkey to this entry: - パスキーを追加するエントリー: - - - KeePassXC - Update passkey - KeePassXC - パスキーを更新 - - - Entry already has a passkey. -Do you want to overwrite the passkey in %1 - %2? - 既にパスキーがあるエントリーです。 -%1 - %2 のパスキーを上書きしますか? - - - Register - 登録 + 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? + KeePassXC-Browser の設定をデータベース設定に移行する必要があります。 +これはブラウザーとの接続を維持するために必要です。 +既存の設定を移行しますか? @@ -1076,6 +975,10 @@ Do you want to overwrite the passkey in %1 - %2? General 全般 + + Browsers installed as snaps are currently not supported. + Snap 形式のブラウザーは現在サポートしていません。 + Enable integration for these browsers: これらのブラウザーの統合を有効にする: @@ -1123,7 +1026,7 @@ Do you want to overwrite the passkey in %1 - %2? Match URL scheme (e.g., https://example.com) - URL スキーム (例えば https://example.com) を一致させる + URL スキーム (例えば https://example.com) の一致 Only returns the best matches for a specific URL instead of all entries for the whole domain. @@ -1195,20 +1098,20 @@ Do you want to overwrite the passkey in %1 - %2? Use a custom proxy location if you installed a proxy manually. - 手動でプロキシーをインストールした場合は、カスタムプロキシーを使用してください。 + 手動でプロキシをインストールした場合は、カスタムプロキシを使用してください。 Use a custom proxy location: Meant is the proxy for KeePassXC-Browser - カスタムプロキシーを使用する: + カスタムプロキシを使用する: Custom proxy location field - カスタムプロキシーの場所フィールド + カスタムプロキシの場所フィールド Browser for custom proxy file - カスタムプロキシーファイルのブラウザー + カスタムプロキシファイルブラウザー Browse… @@ -1247,6 +1150,26 @@ Do you want to overwrite the passkey in %1 - %2? Custom extension ID カスタム拡張機能 ID + + Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 + Snap によってサンドボックス化されているため、<br />ブラウザー統合を有効にするにはスクリプトを実行する必要があります。<br />スクリプトは次の場所から入手できます: %1 + + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 + ブラウザー統合の動作には KeePassXC-Browser が必要です。<br />KeePassXC-Browser は %1 用、%2 用、%3 用の 3 種類あります。%4 + + + Please see special instructions for browser extension use below + ブラウザー拡張機能を使用するには以下の手順を参照してください + + + <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. + <b>エラー:</b> カスタムプロキシの場所が見つかりませんでした。<br/>ブラウザー統合はプロキシアプリケーション無しでは動作しません。 + + + <b>Warning:</b> The following options can be dangerous! + <b>警告:</b> 以下は危険なオプションです。 + Executable Files 実行ファイル @@ -1257,52 +1180,12 @@ Do you want to overwrite the passkey in %1 - %2? Select custom proxy location - カスタムプロキシーの場所を選択 + カスタムプロキシを選択 Select native messaging host folder location Native messaging のホストフォルダーの場所を選択 - - Allow keepassxc-proxy to list all entries with their title, URL and UUID in connected databases. - タイトル、URL、UUID を含む keepassxc-proxy に接続されているデータベースのすべてのエントリーの表示を許可する - - - Allow limited access to all entries in connected databases (ignores site access restrictions) - 接続されたデータベースのすべてのエントリーに制限付きアクセスを許可する (サイトのアクセス制限を無視) - - - <b>Warning:</b> Only adjust these settings if necessary. - <b>警告:</b> これらの設定は必要な場合のみ変更してください。 - - - The custom proxy location does not exist. - カスタムプロキシーの場所が存在しません。 - - - <b>Error:</b> The custom proxy location does not exist. Correct this in the advanced settings tab. - <b>警告:</b> カスタムプロキシーの場所が存在しません。詳細設定タブから変更できます。 - - - <b>Error:</b> The installed proxy executable is missing from the expected location: %1<br/>Please set a custom proxy location in the advanced settings or reinstall the application. - <b>警告:</b> インストールされているプロキシーの実行ファイルは予期していた場所に存在しません: %1<br/>カスタムプロキシーの場所を詳細設定で変更するか、アプリを再インストールしてください。 - - - Allows using insecure http://localhost with passkeys for testing purposes. - 安全ではない http://localhost で、テスト向けにパスキーの使用を許可します。 - - - Allow using localhost with passkeys - ローカルホストでのパスキーの使用を許可する - - - KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. - ブラウザー統合の動作には KeePassXC-Browser が必要です。<br />%1 用、%2 用、%3 用からダウンロードしてください。 - - - Browsers installed using Snap or Flatpak are not supported with exception to Firefox installed using Snap. - Snap または Flatpak からインストールしたブラウザー (Snap 版 Firefox を除く) はサポートされていません。 - CloneDialog @@ -1325,6 +1208,14 @@ Do you want to overwrite the passkey in %1 - %2? CsvImportWidget + + Import CSV fields + CSV フィールドをインポート + + + filename + ファイル名 + size, rows, columns サイズ、行、列 @@ -1433,43 +1324,50 @@ Do you want to overwrite the passkey in %1 - %2? Column %1 列 %1 + + Imported from CSV file + CSV ファイルからインポート + + + Original data: + 元データ: + + + Error(s) detected in CSV file! + CSV ファイル内でエラーを検出しました! + [%n more message(s) skipped] [%n 個のメッセージをスキップしました] - Failed to parse CSV file: %1 - CSV ファイルの解析に失敗しました: %1 + Error + エラー - Imported from CSV file: %1 - CSV ファイルからインポートしました: %1 - - - No Title Selected - タイトルが選択されていません - - - No title column was selected, entries will be hard to tell apart. -Are you sure you want to import? - タイトル行が選択されておらず、エントリーは区別しにくくなります。 -本当にインポートしますか? - - - Tags - タグ + CSV import: writer has errors: +%1 + CSV のインポート: ライターにエラーがあります: +%1 CsvParserModel + + %1, %2, %3 + file info: bytes, rows, columns + %1、%2、%3 + + + %n byte(s) + %n バイト + %n row(s) - CSV row count %n 行 %n column(s) - CSV column count %n 列 @@ -1522,14 +1420,6 @@ Backup database located at %2 Recycle Bin ゴミ箱 - - Database file read error. - データベースの読み取りエラーです。 - - - No file path was provided. - ファイルのパスが選択されていません。 - DatabaseOpenDialog @@ -1552,10 +1442,30 @@ Backup database located at %2 Password field パスワードフィールド + + Enter Additional Credentials (if any): + 追加の資格情報を入力してください (ある場合のみ): + + + Key File: + キーファイル: + + + Key file help + キーファイルのヘルプ + Hardware key slot selection ハードウェアキースロットの選択 + + Hardware Key: + ハードウェアキー: + + + Hardware key help + ハードウェアキーのヘルプ + Key file to unlock the database データベースのロックを解除するキーファイル @@ -1568,6 +1478,14 @@ Backup database located at %2 Browse… 参照… + + Refresh hardware tokens + ハードウェアトークンを更新 + + + Refresh + 再読み込み + Unlock Database データベースのロックを解除 @@ -1582,7 +1500,7 @@ Backup database located at %2 Please present or touch your YubiKey to continue… - YubiKey を挿入またはタッチして続行します… + YubiKey にタッチして続行、または YubiKey を正しく設定してください… Database Version Mismatch @@ -1629,6 +1547,10 @@ To prevent this error from appearing, you must go to "Database Settings / S Retry with empty password 空のパスワードで再試行 + + Failed to authenticate with Touch ID + Touch ID での認証に失敗しました + Failed to open key file: %1 キーファイルを開くのに失敗しました: %1 @@ -1661,69 +1583,41 @@ To prevent this error from appearing, you must go to "Database Settings / S Cannot use database file as key file データベースファイルをキーファイルとして使用することはできません + + You cannot use your database file as a key file. +If you do not have a key file, please leave the field empty. + データベースファイルをキーファイルとして使用することはできません。 +キーファイルが無い場合は、フィールドを空のままにしてください。 + + + Detecting hardware keys… + ハードウェアキーを検出中… + + + No hardware keys detected + 検出したハードウェアキーはありません + + + Select hardware key… + ハードウェアキーを選択… + + + <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information…</p> + <p>パスワードだけでなくシークレットファイルを使用することで、データベースのセキュリティを向上させることができます。シークレットファイルはデータベースのセキュリティ設定で生成できます。</p><p>*.kdbx データベースファイルはシークレットファイル<strong>ではありません</strong>!<br>キーファイルがない場合、このフィールドは空のままにしてください。</p><p>詳細についてはクリックしてください…</p> + + + <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +<p>Click for more information…</p> + <p>スロットを HMAC-SHA1 用に設定した <strong>YubiKey</strong> や <strong>OnlyKey</strong> をハードウェアセキュリティキーとして使用できます。</p> +<p>詳細についてはクリックしてください…</p> + authenticate to access the database - 認証してデータベースにアクセス + - Failed to authenticate with Quick Unlock: %1 - Quick Unlock での認証に失敗しました: %1 - - - Select Key File: - キーファイルを選択: - - - <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!</p> - <p>パスワードだけでなくシークレットファイルを使用することで、データベースのセキュリティを向上させることができます。シークレットファイルはデータベースのセキュリティ設定で生成できます。</p><p>これは *.kdbx データベースファイル<strong>ではありません</strong>!</p> - - - Use hardware key [Serial: %1] - ハードウェアキーを使用する [Serial: %1] - - - Use hardware key - ハードウェアキーを使用する - - - Your database file is NOT a key file! -If you don't have a key file or don't know what that is, you don't have to select one. - データベースファイルはキーファイルとは違います! -キーファイルを設定していない場合や何かわからない場合は、何も選択しないでください。 - - - KeePassXC database file selected - KeePassXC データベースファイルが選択されました - - - The file you selected looks like a database file. -A database file is NOT a key file! - -Are you sure you want to continue with this file?. - 選択したファイルはデータベースファイルのようです。 -データベースファイルはキーファイルとは違います! - -本当にこのファイルを選択したまま続行しますか? - - - No hardware keys found. - ハードウェアキーが見つかりませんでした。 - - - Refresh Hardware Keys - ハードウェアキーを初期化 - - - Click to add a key file. - クリックしてキーファイルを追加します。 - - - <a href="#" style="text-decoration: underline">I have a key file</a> - <a href="#" style="text-decoration: underline">キーファイルがあります</a> - - - Hardware keys found, but no slots are configured. - ハードウェアキーが見つかりましたが、スロットが設定されていません。 + Failed to authenticate with Windows Hello: %1 + @@ -1735,6 +1629,10 @@ Are you sure you want to continue with this file?. DatabaseSettingsDialog + + Advanced Settings + 詳細設定 + General 全般 @@ -1759,22 +1657,6 @@ Are you sure you want to continue with this file?. Maintenance メンテナンス - - KeeShare - KeeShare - - - Secret Service Integration - シークレットサービス統合 - - - Remote Sync - リモート同期 - - - Database Settings: %1 - データベースの設定: %1 - DatabaseSettingsWidgetBrowser @@ -1782,6 +1664,18 @@ Are you sure you want to continue with this file?. KeePassXC-Browser settings KeePassXC-Browser 設定 + + Convert KeePassHTTP data + KeePassHTTP のデータを変換 + + + Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data + 古い KeePassHTTP の属性を KeePassXC-Browser の互換性のあるカスタムデータに変換する + + + Refresh database root group ID + データベースのルートグループ ID を更新する + Disconnect all browsers すべてのブラウザーの接続を切断する @@ -1790,17 +1684,13 @@ Are you sure you want to continue with this file?. Forget all site-specific settings on entries エントリーのサイト固有の設定をすべて消去する - - Refresh database root group ID - データベースのルートグループ ID を更新する - Stored keys - 保存したキー + 保存されたキー Stored browser keys - 保存したブラウザーキー + 保存されたブラウザーキー Remove selected key @@ -1842,10 +1732,18 @@ This may prevent connection to the browser plugin. 本当にすべてのブラウザーを切断しますか? ブラウザープラグインに接続できなくなります。 + + KeePassXC: No keys found + KeePassXC: キーが見つかりません + No shared encryption keys found in KeePassXC settings. KeePassXC の設定内に共有暗号化キーは見つかりませんでした。 + + KeePassXC: Removed keys from database + KeePassXC: データベースからキーを削除しました + Successfully removed %n encryption key(s) from KeePassXC settings. KeePassXC の設定から %n 個の暗号化キーを正常に削除しました。 @@ -1864,14 +1762,32 @@ Permissions to access entries will be revoked. 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 convert all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + 本当にレガシーなブラウザー統合のデータを最新の標準に変換しますか? +これはブラウザープラグインとの互換性維持に必要です。 + Refresh database ID データベース ID を更新 @@ -1882,26 +1798,6 @@ This is only necessary if your database is a copy of another and the browser ext 本当にデータベース ID を更新しますか? これはデータベースが別のデータベースのコピーで、ブラウザー拡張機能が接続できない場合にのみ必要です。 - - Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data - 古い KeePassHTTP の属性を KeePassXC-Browser の互換性のあるカスタムデータに変換する - - - No keys found - 鍵が見つかりません - - - Removed keys from database - 鍵をデータベースから削除しました - - - Removed permissions - 許可を削除しました - - - No entry with permissions found! - アクセス許可があるエントリーは見つかりません - DatabaseSettingsWidgetDatabaseKey @@ -1917,13 +1813,13 @@ This is only necessary if your database is a copy of another and the browser ext 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? - 警告!パスワードを設定していません。パスワードなしのデータベースは特に非推奨です! + [警告] パスワードを設定していません。パスワード無しでのデータベースの使用は極力避けるべきです。 -本当にパスワードなしで続行しますか? +パスワード無しで続行してもよろしいですか? Continue without password - パスワードなしで続行 + パスワード無しで続行 No encryption key added @@ -1941,28 +1837,24 @@ Are you sure you want to continue without a password? Failed to change database credentials データベースの資格情報の変更に失敗しました - - Weak password - 脆弱なパスワード - - - This is a weak password! For better protection of your secrets, you should choose a stronger password. - 脆弱なパスワードです! 秘密をより最適に保護するために、強固なパスワードを選択することを強くお勧めします。 - - - The provided password does not meet the minimum quality requirement. - 入力されたパスワードが品質要件の最低基準に達していません。 - DatabaseSettingsWidgetEncryption Decryption Time: - 復号時間: + 復号化時間: + + + Change existing decryption time + 既存の復号化時間を変更 + + + Change + 変更 Decryption time in seconds - 復号時間 (秒) + 復号化時間 (秒) Higher values offer more protection, but opening the database will take longer. @@ -2040,6 +1932,11 @@ Are you sure you want to continue without a password? KDBX 3 KDBX 3 + + unchanged + Database decryption time is unchanged + 変更なし + Number of rounds too high Key transformation rounds @@ -2092,18 +1989,6 @@ If you keep this number, your database will not be protected from brute force at Threads for parallel execution (KDF settings) スレッド - - Encryption Settings: - 暗号化設定: - - - Basic - 基本 - - - Advanced - 詳細設定 - DatabaseSettingsWidgetFdoSecrets @@ -2201,101 +2086,29 @@ This action is not reversible. the oldest history items of an entry will be removed such that only the specified amount of entries remain at most. - この設定を保存するか、設定以降に -エントリーを編集すると、指定した件数の -範囲内になるまで履歴を古い順に削除します。 + Limit the amount of history items per entry to: - 各エントリーの履歴件数を制限する: + When saving this setting or editing an entry the oldest history items of an entry will be removed such that the remaining history items add up to the specified amount at most. - この設定を保存するか、設定以降に -エントリーを編集すると、サイズの -合計が指定した値の範囲内になるまで -履歴を古い順に削除します。 + Limit the total size of history items per entry to: - 各エントリーの履歴の合計サイズを制限する: + Move entries to a recycle bin group instead of deleting them from the database. Entries deleted from the recycle bin are removed from the database. - エントリーをデータベースから削除せず -ゴミ箱グループに移動させます。 -ゴミ箱からエントリーを削除すると -データベースから完全に削除されます。 - - - Autosave delay since last change - 最終更新後、自動保存までの遅延時間 - - - Autosave delay - 自動保存までの遅延時間 - - - Autosave delay since last change in minutes - 最終更新後、自動保存までの遅延時間 (分) - - - min - - - - Autosave delay since last change checkbox - 最終更新後、自動保存を遅延させるチェックボックス - - - Public Database Metadata - データベースの公開メタデータ - - - Warning: the following settings are not encrypted. - 警告: 以下の設定は暗号化されません。 - - - Display name: - 表示名: - - - Publically visible display name used on the unlock dialog - ロック解除ダイアログで使用される公開表示の表示名 - - - Database public display name - データベースの公開表示名 - - - Display color: - 表示色: - - - Publically visible color used on the unlock dialog - ロック解除ダイアログで使用される公開表示の表示色 - - - Database public display color chooser - データベースの公開表示色の選択ツール - - - Clear - 消去 - - - Display icon: - 表示アイコン: - - - Select Database Icon - データベースのアイコンを選択 + @@ -2392,140 +2205,6 @@ removed from the database. データベースの概要フィールド - - DatabaseSettingsWidgetRemote - - Sync Commands - 同期コマンド - - - Remove - 削除 - - - Command Settings - コマンド設定 - - - Name - 名前 - - - Save - 保存 - - - Download - ダウンロード - - - Command: - コマンド: - - - Download command field - ダウンロードコマンドフィールド - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - 例: "sftp ユーザー名@ホスト名" または "scp ユーザー名@ホスト名:リモートのデータベース.kdbx {TEMP_DATABASE}" - - - Input: - 入力: - - - Download input field - ダウンロード入力フィールド - - - Upload - アップロード - - - Upload command field - アップロードコマンドフィールド - - - e.g.: "sftp user@hostname" or "scp {TEMP_DATABASE} user@hostname:DatabaseOnRemote.kdbx" - 例: "sftp ユーザー名@ホスト名" または "scp {TEMP_DATABASE}ユーザー名@ホスト名:リモートのデータベース.kdbx " - - - Upload input field - アップロード入力フィールド - - - Name cannot be empty. - 名前は空白にできません。 - - - Test - テスト - - - Download command cannot be empty. - ダウンロードコマンドは空白にできません。 - - - Download failed with error: %1 - ダウンロードは次のエラーで失敗しました: %1 - - - Download finished, but file %1 could not be found. - ダウンロードは完了しましたが、ファイル %1 が見つかりません。 - - - Download successful. - 正常にダウンロードを完了しました。 - - - Save Remote Settings - リモート設定を保存 - - - You have unsaved changes. Do you want to save them? - 未保存の変更があります。保存しますか? - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - 例: -get リモートのデータベース.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} は一時的なデータベース保存先のプレースホルダーとして使用されます -コマンドは終了しなければなりません。「sftp」の場合、最後にコマンド「exit」が送信されなければなりません。 - - - - e.g.: -put {TEMP_DATABASE} DatabaseOnRemote.kdbx -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - 例: -put {TEMP_DATABASE} リモートのデータベース.kdbx -exit ---- -{TEMP_DATABASE} は一時的なデータベース保存先のプレースホルダーとして使用されます -コマンドは終了しなければなりません。「sftp」の場合、最後にコマンド「exit」が送信されなければなりません。 - - - Timeout: - タイムアウト: - - - seconds - - - DatabaseTabWidget @@ -2535,7 +2214,7 @@ exit The created database has no key or KDF, refusing to save it. This is definitely a bug, please report it to the developers. - 作成したデータベースはキーや KDF がないため保存しません。 + 作成したデータベースはキーや KDF が無いため保存しません。 これは確実にバグなので、開発者への報告をお願いします。 @@ -2558,10 +2237,26 @@ This is definitely a bug, please report it to the developers. CSV file CSV ファイル + + Select CSV file + CSV ファイルを選択 + Merge database データベースをマージする + + KeePass 1 database + KeePass 1 データベース + + + Open KeePass 1 database + KeePass 1 データベースを開く + + + Open OPVault + OPVault を開く + Export database to CSV file データベースを CSV ファイルへエクスポート @@ -2574,6 +2269,28 @@ This is definitely a bug, please report it to the developers. Writing the HTML file failed. HTML ファイルへの書き込みに失敗しました。 + + Export Confirmation + エクスポートの確認 + + + You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? + データベースを暗号化せずにファイルへエクスポートしようとしています。これはパスワードや機密情報が脆弱な状態に置かれることを意味します。続行してもよろしいですか? + + + New Database + 新しいデータベース + + + %1 [New Database] + Database tab name modifier + %1 [新しいデータベース] + + + %1 [Locked] + Database tab name modifier + %1 [ロック] + Export database to XML file データベースを XML ファイルへエクスポート @@ -2586,31 +2303,9 @@ This is definitely a bug, please report it to the developers. Writing the XML file failed XML ファイルの書き込みに失敗しました - - Export Confirmation - エクスポートの確認 - - - You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? - データベースを暗号化されないファイルへエクスポートしようとしています。これにより、パスワードや機密情報が脆弱な状態になります!本当に続行しますか? - - - %1 [Locked] - Database tab name modifier - %1 [ロック] - - - %1 [Temporary] - Database tab name modifier - %1 [一時] - DatabaseWidget - - Searches and Tags - 検索とタグ - Searching… 検索中… @@ -2659,10 +2354,6 @@ This is definitely a bug, please report it to the developers. Expired entries 期限切れのエントリー - - Entries expiring within %1 day(s) - %1 日以内に期限切れとなるエントリー - No current database. 現在のデータベースはありません。 @@ -2687,25 +2378,13 @@ This is definitely a bug, please report it to the developers. No Results 見つかりません - - Save - 保存 - - - Enter a unique name or overwrite an existing search from the list: - 独自の名前を入力するか、リストから検索結果を上書きする - - - Save Search - 検索語を保存 - Lock Database? データベースをロックしますか? You are editing an entry. Discard changes and lock anyway? - エントリーを編集中です。変更を破棄してロックしますか? + エントリーを編集中です。変更を破棄してロックしてもよろしいですか? "%1" was modified. @@ -2727,6 +2406,26 @@ Save changes? 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? + データベースファイルが変更され、保存されていません。 +変更をマージしますか? + + + Could not open the new database file while attempting to autoreload. +Error: %1 + 自動再読み込みしようとした際に、新しいデータベースファイルを開くことができませんでした。 +エラー: %1 + Disable safe saves? 安全な保存を無効にしますか? @@ -2763,101 +2462,31 @@ Disable safe saves and try again? Are you sure you want to permanently delete everything from your recycle bin? - 本当に、ごみ箱からすべてを永久に削除しますか? + ゴミ箱にある全項目を永久に削除してもよろしいですか? Could not find database file: %1 データベースファイルが見つかりませんでした: %1 - - New Database - 新しいデータベース + + Entries expiring within %1 day(s) + %1 日以内に期限切れとなるエントリー - %1 [New Database] - Database tab name modifier - %1 [新しいデータベース] + Searches and Tags + 検索とタグ - Remote Sync did not contain any download or upload commands. - リモート同期にダウンロードコマンドまたはアップロードコマンドがありません。 + Enter a unique name or overwrite an existing search from the list: + - Remote sync '%1' completed successfully! - リモート同期「%1」は正常に完了しました! - + Save + 保存 - Remote sync '%1' failed: %2 - リモート同期「%1」に失敗しました: %2 - - - Error while saving database %1: %2 - データベース %1 の保存中にエラーが発生しました: %2 - - - Downloading... - ダウンロード中... - - - Uploading... - アップロード中... - - - Syncing... - 同期中... - - - Remove passkey from entry - エントリーからパスキーを削除する - - - Do you want to remove the passkey from this entry? - 本当にこのエントリーからパスキーを削除しますか? - - - The database file "%1" was modified externally - データベースファイル "%1" は外部で編集されました - - - Do you want to load the changes? - 変更を読み込みますか? - - - Reload database - データベースを再読み込み - - - Reloading database… - データベースを再読み込みしています... - - - Reload canceled - 再読み込みがキャンセルされました - - - Reload successful - 再読み込みしました - - - Reload pending user action… - 再読み込みはユーザーの操作の待機中です... - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes<br>Ignore the changes on disk until save<br>Discard unsaved changes - データベースファイル "%1" は外部で編集されました。<br>どのように続行するか選択してください。<br><br>すべての変更をマージ<br>保存するまでディスク上の変更を無視<br>保存されていない変更を破棄 - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes then save<br>Overwrite the changes on disk<br>Discard unsaved changes - データベースファイル "%1" は外部で編集されました。<br>どのように続行するか選択してください。<br><br>すべての変更をマージして保存<br>ディスク上の変更を上書き<br>保存されていない変更を破棄 - - - Database file overwritten. - データベースファイルが上書きされました。 - - - Database file on disk cannot be unlocked with current credentials.<br>Enter new credentials and/or present hardware key to continue. - ディスク上のデータベースファイルは現在の資格情報ではロック解除できませんでした。<br>続行するには、新しい資格情報の入力またはハードウェアキーの挿入が必要です。 + Save Search + 検索語を保存 @@ -2892,7 +2521,7 @@ Disable safe saves and try again? Are you sure you want to remove this URL? - 本当にこの URL を削除しますか? + この URL を削除してもよろしいですか? Properties @@ -2910,6 +2539,10 @@ Disable safe saves and try again? n/a N/A + + (encrypted) + (暗号化) + Select private key 秘密鍵を選択 @@ -2982,7 +2615,7 @@ Would you like to correct it? Are you sure you want to remove this attribute? - 本当にこの属性を削除しますか? + この属性を削除してもよろしいですか? Reveal @@ -2996,10 +2629,6 @@ Would you like to correct it? Hide 隠す - - %n hour(s) - %n 時間 - %n week(s) %n 週間 @@ -3012,9 +2641,9 @@ Would you like to correct it? %n year(s) %n 年 - - Failed to decrypt SSH key, ensure password is correct. - SSHキーの複合に失敗しました。パスワードが正しいことを確認してください。 + + %n hour(s) + %n 時間 @@ -3134,20 +2763,10 @@ Would you like to correct it? Add new window association 新しいウィンドウ関連付けを追加 - - + - Add item - + - Remove selected window association 選択したウィンドウ関連付けを削除 - - - - Remove item - - - Window title: ウィンドウタイトル: @@ -3172,9 +2791,23 @@ Would you like to correct it? Custom Auto-Type sequence for this window このウィンドウのカスタム自動入力シーケンス + + + + Add item + + + + + - + Remove item + - + EditEntryWidgetBrowser + + These settings affect to the entry's behaviour with the browser extension. + これらの設定はエントリーの挙動 (ブラウザー拡張機能) に影響します。 + General 全般 @@ -3187,14 +2820,26 @@ Would you like to correct it? Skip Auto-Submit for this entry このエントリーの自動送信をスキップする + + Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. + この設定をブラウザーの HTTP 認証ダイアログにのみ送信します。有効になっている場合、このエントリーは通常のログインフォームには表示されません。 + Use this entry only with HTTP Basic Auth このエントリーは HTTP ベーシック認証でのみ使用する + + Do not send this setting to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. + この設定をブラウザーの HTTP 認証ダイアログに送信しません。有効になっている場合、このエントリーは HTTP 認証ダイアログには表示されません。 + Do not use this entry with HTTP Basic Auth このエントリーは HTTP ベーシック認証で使用しない + + Additional URL's + 追加の URL + Add 追加 @@ -3207,22 +2852,6 @@ Would you like to correct it? Edit 編集 - - These settings affect the entry's behaviour with the browser extension. - これらの設定はブラウザー拡張機能でのエントリーの動作に影響します。 - - - Additional URLs - 追加 URL - - - Only send this entry to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. - HTTP 認証ダイアログのみでブラウザーにこのエントリーを送信します。有効にすると、このエントリーは通常のログインフィールドでは選択肢に表示しません。 - - - Do not send this entry to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. - HTTP 認証ダイアログではブラウザーにこのエントリーを送信しません。有効にすると、HTTP 認証ダイアログでこのエントリーを選択肢に表示しません。 - EditEntryWidgetHistory @@ -3319,35 +2948,35 @@ Would you like to correct it? &Username: - &ユーザー名: + &Title: - タイトル(&T): + &Password: - パスワード(&P): + UR&L: - URL(&L): + &Notes: - メモ(&N): + Toggle notes visibility - ノートの表示/非表示の切り替え + T&ags: - タグ(A): + &Expires: - 期限(&E): + @@ -3388,6 +3017,19 @@ Would you like to correct it? Private key 秘密鍵 + + External file + 外部ファイル + + + Browser for key file + キーファイルブラウザー + + + Browse… + Button for opening file dialog + 参照… + Attachment 添付ファイル @@ -3404,30 +3046,13 @@ Would you like to correct it? Remove from agent エージェントから削除 - - External file - 外部ファイル - - - Browser for key file - キーファイルブラウザー - - - Browse… - Button for opening file dialog - 参照… - - - Generate - 生成 - Select attachment file 添付ファイルを選択 Require user confirmation when this key is used - この鍵を使用するときに必ずユーザーに確認する + このキーを使用する際に必ずユーザーに確認する n/a @@ -3445,10 +3070,6 @@ Would you like to correct it? seconds - - Clear agent - エージェントをクリア - EditGroupWidget @@ -3460,6 +3081,10 @@ Would you like to correct it? Icon アイコン + + Browser Integration + ブラウザー統合 + Properties プロパティ @@ -3476,10 +3101,6 @@ Would you like to correct it? Group has unsaved changes グループに未保存の変更があります - - Browser Integration - ブラウザー統合 - Enable 有効 @@ -3533,18 +3154,10 @@ Would you like to correct it? Omit WWW subdomain from matching: - WWW サブドメインをマッチングから除外する: - - - Omit WWW subdomain from matching toggle for this and sub groups - このグループとサブグループで WWW サブドメインをマッチングから除外するかを変更します - - - Restrict matching to given browser key: - Restrict matching to given browser key toggle for this and sub groups + Omit WWW subdomain from matching toggle for this and sub groups @@ -3779,6 +3392,10 @@ Supported extensions are: %1. Unable to fetch favicon. ファビコンを取得できません。 + + You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security + ツール -> 設定 -> セキュリティで DuckDuckGo ウェブサイトアイコンサービスを有効にできます + Existing icon selected. 選択したアイコンは既存です。 @@ -3811,10 +3428,6 @@ Supported extensions are: %1. The following icon(s) failed: 次のアイコンの読み込みに失敗しました: - - You can enable the DuckDuckGo website icon service under Application Settings -> Security - 設定 -> セキュリティで DuckDuckGo のウェブサイトアイコンサービスを有効にできます - EditWidgetProperties @@ -3891,24 +3504,6 @@ This may cause the affected plugins to malfunction. %1 - Clone %1 - 複製 - - Passkey - パスキー - - - Invalid conversion type: %1 - 変換形式が正しくありません: %1 - - - Invalid conversion syntax: %1 - 変換構文が正しくありません: %1 - - - Invalid regular expression syntax %1 -%2 - 正規表現の構文が正しくありません: %1 -%2 - EntryAttachments @@ -3917,21 +3512,6 @@ This may cause the affected plugins to malfunction. ファイル "%1" を開けません - - EntryAttachmentsDialog - - Form - フォーム - - - File name - ファイル名 - - - File contents... - ファイルの内容... - - EntryAttachmentsModel @@ -3969,6 +3549,14 @@ This may cause the affected plugins to malfunction. Remove 削除 + + Rename selected attachment + 選択した添付ファイルの名前を変更 + + + Rename + 名前を変更 + Open selected attachment 選択した添付ファイルを開く @@ -3995,7 +3583,7 @@ This may cause the affected plugins to malfunction. Are you sure you want to remove %n attachment(s)? - 本当に添付ファイル %n 個を削除しますか? + %n 個の添付ファイルを削除してもよろしいですか? Save attachments @@ -4009,7 +3597,7 @@ This may cause the affected plugins to malfunction. Are you sure you want to overwrite the existing file "%1" with the attachment? - 既存のファイル "%1" を添付ファイルで上書きしますか? + 既存のファイル "%1" を上書きしてもよろしいですか? Confirm overwrite @@ -4043,6 +3631,12 @@ This may cause the affected plugins to malfunction. Confirm Overwrite Attachment 添付ファイルの上書きの確認 + + Attachment "%1" already exists. +Would you like to overwrite the existing attachment? + 添付ファイル "%1" は既に存在します。 +既存の添付ファイルを上書きしますか? + Confirm Attachment 添付の確認 @@ -4077,24 +3671,6 @@ Error: %1 更新された添付ファイルの保存に失敗しました。 エラー: %1 - - Attachment "%1" already exists. -Would you like to overwrite the existing attachment? - 添付ファイル "%1" は既に存在します。 -既存の添付ファイルを上書きしますか? - - - New - 新規作成 - - - Preview - プレビュー - - - Failed to preview an attachment: Attachment not found - 添付ファイルをプレビューできませんでした: 添付ファイルが見つかりません - EntryAttributesModel @@ -4147,7 +3723,7 @@ Would you like to overwrite the existing attachment? Custom Attributes - 属性をカスタムする + Icon @@ -4289,14 +3865,6 @@ Would you like to overwrite the existing attachment? Has TOTP TOTP の有無 - - Background Color - 背景色 - - - Group Path - グループのパス - EntryPreviewWidget @@ -4317,8 +3885,8 @@ Would you like to overwrite the existing attachment? パスワード - URL - URL + Notes + メモ Expiration @@ -4337,8 +3905,8 @@ Would you like to overwrite the existing attachment? ユーザー名 - Notes - メモ + URL + URL Advanced @@ -4388,10 +3956,6 @@ Would you like to overwrite the existing attachment? Never なし - - Double click to copy value - ダブルクリックすると値をコピーします - Enabled 有効 @@ -4401,8 +3965,8 @@ Would you like to overwrite the existing attachment? 無効 - Double click to copy to clipboard - ダブルクリックすると、クリップボードにコピーします + Double click to copy value + @@ -4411,10 +3975,6 @@ Would you like to overwrite the existing attachment? Invalid URL 無効な URL - - Duplicate URL - 重複した URL - EntryView @@ -4428,11 +3988,7 @@ Would you like to overwrite the existing attachment? Reset to defaults - 既定値に戻す - - - + %1 entry(s)... - + %1 個のエントリー... + 規定値に戻す @@ -4655,193 +4211,6 @@ You can enable the DuckDuckGo website icon service in the security section of th ファビコンをダウンロード中 (%1/%2)… - - ImportWizard - - Import Wizard - インポートウィザード - - - - ImportWizardPageReview - - WizardPage - ウィザードページ - - - Entry count: %1 - エントリーカウント: %1 - - - Group - グループ - - - Title - タイトル - - - Username - ユーザー名 - - - Password - パスワード - - - Url - Url - - - Could not load key file. - - - - Could not open remote database. Password or key file may be incorrect. - - - - - ImportWizardPageSelect - - Form - フォーム - - - Import File Selection - インポートするファイルの選択 - - - Password: - パスワード: - - - Key File: - キーファイル: - - - Browse… - 参照… - - - Import Into: - インポート先: - - - New Database - 新しいデータベース - - - No unlocked databases available - ロック解除された利用可能なデータベースはありません - - - Existing Database: - 既存のデータベース: - - - Import File: - インポートするファイル: - - - Comma Separated Values (.csv) - カンマ区切りテキスト (.csv) - - - 1Password Export (.1pux) - 1Password エクスポート (.1pux) - - - 1Password Vault (.opvault) - 1Password Vault (.opvault) - - - Bitwarden (.json) - Bitwarden (.json) - - - KeePass 1 Database (.kdb) - KeePass 1 データベース (.kdb) - - - Open OPVault - OPVault を開く - - - Select import file - インポートするファイルを選択 - - - All files - すべてのファイル - - - Key files - キーファイル - - - Select key file - キーファイルを選択 - - - Comma Separated Values - カンマ区切りテキスト (.csv) - - - 1Password Export - 1Password エクスポート - - - Bitwarden JSON Export - Bitwarden JSON エクスポート - - - 1Password Vault - 1Password 保管庫 - - - KeePass1 Database - KeePass1 データベース - - - Proton Pass (.json) - Proton Pass (.json) - - - Proton Pass JSON Export - Proton Pass JSON エクスポート - - - Temporary Database - 一時データベース - - - Command: - コマンド: - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - 例: "sftp ユーザー名@ホスト名" または "scp ユーザー名@ホスト名:リモートのデータベース.kdbx {TEMP_DATABASE}" - - - Input: - 入力: - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last commend `exit` has to be sent - - - - - Remote Database (.kdbx) - リモートのデータベース (.kdbx) - - KMessageWidget @@ -4871,7 +4240,7 @@ The command has to exit. In case of `sftp` as last commend `exit` has to be sent Invalid credentials were provided, please try again. If this reoccurs, then your database file may be corrupt. 不正な資格情報です。再試行してください。 -これが再発する場合は、データベースファイルが破損している可能性があります。 +これが再発した場合は、データベースファイルが破損している可能性があります。 Header doesn't match hash @@ -4928,7 +4297,7 @@ If this reoccurs, then your database file may be corrupt. Invalid credentials were provided, please try again. If this reoccurs, then your database file may be corrupt. 不正な資格情報です。再試行してください。 -これが再発する場合は、データベースファイルが破損している可能性があります。 +これが再発した場合は、データベースファイルが破損している可能性があります。 (HMAC mismatch) @@ -5276,6 +4645,17 @@ Line %2, column %3 秘密鍵を開くのに失敗しました + + KeePass1OpenWidget + + Import KeePass1 Database + KeePass1 データベースをインポート + + + Unable to open the database. + データベースを開けません。 + + KeePass1Reader @@ -5339,7 +4719,7 @@ Line %2, column %3 Invalid credentials were provided, please try again. If this reoccurs, then your database file may be corrupt. 不正な資格情報です。再試行してください。 -これが再発する場合は、データベースファイルが破損している可能性があります。 +これが再発した場合は、データベースファイルが破損している可能性があります。 Key transformation failed @@ -5603,8 +4983,8 @@ Message: %2 The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. Are you sure you want to continue with this file? - 選択したキーファイルはパスワードデータベースファイルだと思われます。キーファイルは絶対に変更されることがない、静的なファイルである必要があります。変更される可能性があるファイルでは、データベースに永久にアクセスできなくなる恐れがあります。 -本当にこのファイルで続行しますか? + 選択したキーファイルはパスワードデータベースファイルだと思われます。キーファイルは絶対に変更されることが無い、静的なファイルである必要があります。変更される可能性があるファイルでは、データベースに永久にアクセスできなくなる恐れがあります。 +このファイルで続行してもよろしいですか? @@ -5632,6 +5012,10 @@ Are you sure you want to continue with this file? &Recent Databases 最近使用したデータベース(&R) + + &Import + インポート(&I) + &Export エクスポート(&E) @@ -5652,10 +5036,6 @@ Are you sure you want to continue with this file? TOTP TOTP - - Tags - タグ - &Groups グループ(&G) @@ -5700,18 +5080,34 @@ Are you sure you want to continue with this file? &New Database… 新しいデータベース(&N)… + + Create a new database + 新しいデータベースを作成 + &Merge From Database… データベースからマージ(&M)… + + Merge from another KDBX database + 別の KDBX データベースからマージ + &New Entry… 新しいエントリー(&N)… + + Add a new entry + 新しいエントリーを追加 + &Edit Entry… エントリーを編集(&E)… + + View or edit entry + エントリーを編集または表示 + &Delete Entry… エントリーを削除(&D)… @@ -5720,6 +5116,10 @@ Are you sure you want to continue with this file? &New Group… 新しいグループ(&N)… + + Add a new group + 新しいグループを追加 + &Edit Group… グループを編集(&E)… @@ -5752,10 +5152,18 @@ Are you sure you want to continue with this file? Database &Reports… データベースのレポート(&R)… + + Statistics, health check, etc. + 統計や健全性の確認など。 + &Database Settings… データベースの設定(&D)… + + Database settings + データベースの設定 + &Clone Entry… エントリーを複製(&C)… @@ -5764,18 +5172,34 @@ Are you sure you want to continue with this file? Move u&p 上に移動(&P) + + Move entry one step up + エントリーを一つ上に移動する + Move do&wn 下に移動(&W) + + Move entry one step down + エントリーを一つ下に移動する + Copy &Username ユーザー名をコピー(&U) + + Copy username to clipboard + ユーザー名をクリップボードにコピー + Copy &Password パスワードをコピー(&P) + + Copy password to clipboard + パスワードをクリップボードにコピー + &Settings 設定(&S) @@ -5809,13 +5233,21 @@ Are you sure you want to continue with this file? タイトル(&T) - Copy &URL - URL をコピー(&U) + Copy title to clipboard + タイトルをクリップボードにコピー + + + Copy URL to clipboard + URL をクリップボードにコピー &Notes メモ(&N) + + Copy notes to clipboard + メモをクリップボードにコピー + &CSV File… CSV ファイル(&C)… @@ -5828,14 +5260,26 @@ Are you sure you want to continue with this file? KeePass 1 Database… KeePass 1 データベース… + + Import a KeePass 1 database + KeePass 1 データベースをインポート + 1Password Vault… 1Password 保管庫… + + Import a 1Password Vault + 1Password 保管庫をインポート + CSV File… CSV ファイル… + + Import a CSV file + CSV ファイルをインポート + Show TOTP TOTP を表示 @@ -5852,10 +5296,6 @@ Are you sure you want to continue with this file? Copy &TOTP TOTP をコピー(&T) - - Copy Password and TOTP - パスワードと TOTP をコピー - E&mpty recycle bin ゴミ箱を空にする(&M) @@ -5880,6 +5320,10 @@ Are you sure you want to continue with this file? &Online Help オンラインヘルプ(&O) + + Go to online documentation + オンラインドキュメントを開く + &User Guide ユーザーガイド(&U) @@ -5924,10 +5368,6 @@ Are you sure you want to continue with this file? Classic (Platform-native) クラシック (プラットフォームネイティブ) - - Show Menubar - メニューバーを表示 - Show Toolbar ツールバーを表示 @@ -5952,10 +5392,6 @@ Are you sure you want to continue with this file? Clone Group... グループを複製... - - &XML File… - XML ファイル(&X)… - Clear history 履歴を消去 @@ -5966,15 +5402,15 @@ Are you sure you want to continue with this file? Don't show again for this version - このバージョンについては今後表示しない + 今後このバージョンは表示しない WARNING: You are using an unstable build of KeePassXC. There is a high risk of corruption, maintain a backup of your databases. This version is not meant for production use. - 警告: お使いの KeePassXC は不安定版です。 -データベース破損の高いリスクがあるため、必ずバックアップを作成してください。 -このバージョンは使用を想定した製品版ではありません。 + 警告: KeePassXC の開発版を使用しています。 +データベース破損の危険性が高いため、バックアップを維持します。 +このバージョンは正式版ではありません。 NOTE: You are using a pre-release version of KeePassXC. @@ -5983,8 +5419,10 @@ Expect some bugs and minor issues, this version is meant for testing purposes. - No Tags - タグなし + 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 をダウンロードして使用することをお勧めします。 Restore Entry(s) @@ -6008,19 +5446,15 @@ Expect some bugs and minor issues, this version is meant for testing purposes. Toggle window - ウィンドウ切替 + ウィンドウ切り替え Quit KeePassXC KeePassXC を終了 - - %1 Entry(s) - エントリー %1 件 - Please present or touch your YubiKey to continue… - YubiKey を挿入またはタッチして続行します… + YubiKey にタッチして続行、または YubiKey を正しく設定してください… Restart Application? @@ -6030,313 +5464,37 @@ Expect some bugs and minor issues, this version is meant for testing purposes.You must restart the application to apply this setting. Would you like to restart now? 設定を適用するには、このアプリケーションを再起動する必要があります。今すぐ再起動しますか? + + Tags + タグ + + + No Tags + タグなし + + + %1 Entry(s) + %1 個のエントリー + + + Copy Password and TOTP + パスワードと TOTP をコピー + + + &XML File… + XML ファイル(&X)… + + + XML File… + XML ファイル… + + + Copy &URL + + Allow Screen Capture - スクリーンキャプチャを許可 - - - 1Password 1PUX... - 1Password 1PUX... - - - Import a 1Password 1PUX file - 1Password 1PUX ファイルをインポート - - - Import… - インポート… - - - Passkeys… - パスキー… - - - Import Passkey - パスキーをインポート - - - Remote S&ync… - リモート同期(S)... - - - Quit Application - アプリケーションを終了 - - - Open About Dialog - アプリについてダイアログを開く - - - Open Database - データベースを開く - - - Create Database - データベースを作成 - - - Merge From Database - データベースからマージ - - - Create Entry - エントリーを作成 - - - Edit Entry - エントリーを編集 - - - Delete Entry - エントリーを削除 - - - Create Group - グループを作成 - - - Edit Group - グループを編集 - - - Delete Group - グループを削除 - - - Download All Favicons - すべてのファビコンをダウンロード - - - Sort Groups A-Z - グループを A-Z で並べ替え - - - Sort Groups Z-A - グループを Z-A で並べ替え - - - Save Database As - データベースを別名で保存 - - - Show Database Security - データベースのセキュリティを表示 - - - Show Database Reports - データベースのレポートを表示 - - - Show Database Settings - データベースの設定を表示 - - - Show Passkeys - パスキーを表示 - - - Clone Entry - エントリーを複製 - - - Move Entry Up - エントリーを上に移動 - - - Move Entry Down - エントリーを下に移動 - - - Copy Username - ユーザー名をコピー - - - Copy Password - パスワードをコピー - - - Show Application Settings - アプリケーションの設定を表示 - - - Show Password Generator - パスワードを生成 - - - Remove Passkey From Entry - エントリーからパスキーを削除する - - - Perform Auto-Type: {USERNAME} - 自動入力を実行: {USERNAME} - - - Perform Auto-Type: {USERNAME}{ENTER} - 自動入力を実行: {USERNAME}{ENTER} - - - Perform Auto-Type: {PASSWORD} - 自動入力を実行: {PASSWORD} - - - Perform Auto-Type: {PASSWORD}{ENTER} - 自動入力を実行: {PASSWORD}{ENTER} - - - Perform Auto-Type: {TOTP} - 自動入力を実行: {TOTP} - - - Copy Title - タイトルをコピー - - - Copy URL - URL をコピー - - - Copy Notes - メモをコピー - - - Export to CSV - CSV にエクスポート - - - Export to HTML - HTML にエクスポート - - - Import KeePass1 Database - KeePass1 データベースをインポート - - - Import 1Password Vault - 1Password 保管庫をインポート - - - Import CSV File - CSV ファイルをインポート - - - Show TOTP QR Code - TOTP の QR コードを表示 - - - Set up TOTP - TOTP をセットアップ - - - Empty Recycle Bin - ゴミ箱を空にする - - - Open Donation Website - 寄付ウェブサイトを開く - - - Open Bug Report - バグレポートを開く - - - Open Online Documentation - オンラインドキュメントを開く - - - Open Keyboard Shortcuts Guide - キーボードショートカットガイドを開く - - - Save Database Backup - データベースのバックアップを保存 - - - SSH Agent: Add Key - SSH エージェント: 鍵を追加 - - - SSH Agent: Remove Key - SSH エージェント: 鍵を削除 - - - Toggle Compact Mode - コンパクトモードを切り替え - - - Set Theme: Automatic - テーマ設定: 自動 - - - Set Theme: Light - テーマ設定: ライト - - - Set Theme: Dark - テーマ設定: ダーク - - - Set Theme: Classic - テーマ設定: クラシック - - - Toggle Show Menubar - メニューバーの表示を切り替え - - - Toggle Show Toolbar - ツールバーの表示を切り替え - - - Toggle Show Preview Panel - プレビューパネルの表示を切り替え - - - Toggle Always on Top - 常に最前面に表示設定を切り替え - - - Toggle Hide Usernames - ユーザー名の非表示を切り替え - - - Toggle Hide Passwords - パスワードの非表示を切り替え - - - Export to XML - XML にエクスポート - - - Toggle Allow Screen Capture - スクリーンキャプチャーの許可を切り替え - - - Show Group Panel - グループパネルを表示 - - - Toggle Show Group Panel - グループパネルの表示を切り替え - - - Setup Remote Sync… - リモート同期をセットアップ... - - - Password Generator - パスワード生成 - - - E&xpire Entry… - エントリーを有効期限切れにする(&X)… - - - Clear SSH Agent - SSH エージェントをクリア - - - Clear all identities in ssh-agent - SSH エージェントのすべての ID をクリア + @@ -6395,6 +5553,26 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Overwriting %1 [%2] %1 [%2] を上書き + + older entry merged from database "%1" + データベース "%1" からマージした古いエントリー + + + Adding backup for older target %1 [%2] + 古いターゲット %1 [%2] のバックアップを追加 + + + Adding backup for older source %1 [%2] + 古いソース %1 [%2] のバックアップを追加 + + + Reapplying older target entry on top of newer source %1 [%2] + 古いターゲットのエントリーを新しいソース %1 [%2] のトップに再適用 + + + Reapplying older source entry on top of newer target %1 [%2] + 古いソースのエントリーを新しいターゲット %1 [%2] のトップに再適用 + Synchronizing from newer source %1 [%2] 新しいソース %1 [%2] から同期 @@ -6409,7 +5587,7 @@ Expect some bugs and minor issues, this version is meant for testing purposes. Deleting orphan %1 [%2] - 親要素がない %1 [%2] を削除 + 親要素が無い %1 [%2] を削除 Changed deleted objects @@ -6454,6 +5632,14 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. ここではデータベースの暗号化設定を調整できます。この設定は後からデータベースの設定で変更できます。 + + Advanced Settings + 詳細設定 + + + Simple Settings + 簡易設定 + NewDatabaseWizardPageDatabaseKey @@ -6488,25 +5674,6 @@ Expect some bugs and minor issues, this version is meant for testing purposes.新しいデータベースの名前と、必要な場合は説明文を入力してください: - - NewEntryAttachmentsDialog - - Attachment name cannot be empty - 添付ファイルのファイル名は空白にできません - - - Attachment with the same name already exists - 同じファイル名の添付ファイルが既に存在します - - - Save attachment - 添付ファイルを保存 - - - New entry attachment - エントリーの新しい添付ファイル - - NixUtils @@ -6526,7 +5693,7 @@ Expect some bugs and minor issues, this version is meant for testing purposes.OpData01 Invalid OpData01, does not contain header - ヘッダーがない不正な OpData01 です + ヘッダーが無い不正な OpData01 です Unable to read all IV bytes, wanted 16 but got %1 @@ -6553,6 +5720,15 @@ Expect some bugs and minor issues, this version is meant for testing purposes.期待される clear-text のサイズは %1 バイトですが %2 バイトしかありませんでした + + OpVaultOpenWidget + + Read Database did not produce an instance +%1 + データベースの読み取りはインスタンスをプロデュースしませんでした +%1 + + OpVaultReader @@ -6626,10 +5802,6 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Unknown cipher: %1 不明な暗号です: %1 - - AES-256/GCM is currently not supported - AES-256/GCM は現在非対応です - Passphrase is required to decrypt this key この鍵を復号するパスフレーズが必要です @@ -6652,11 +5824,11 @@ Expect some bugs and minor issues, this version is meant for testing purposes. Decryption failed: %1 - 復号に失敗しました: %1 + 復号化に失敗しました: %1 Decryption failed, wrong passphrase? - 復号に失敗しました。パスフレーズが間違っていませんか? + 復号化に失敗しました。パスフレーズが間違っていませんか? Unexpected EOF while reading key @@ -6695,184 +5867,9 @@ Expect some bugs and minor issues, this version is meant for testing purposes.秘密鍵の書き込み時に予期しない EOF がありました - (encrypted) - (暗号化) - - - - OpenSSHKeyGenDialog - - SSH Key Generator + AES-256/GCM is currently not supported - - Type - 種類 - - - Bits - ビット - - - Comment - コメント - - - - PasskeyExportDialog - - KeePassXC - Passkey Export - KeePassXC - パスキーのエクスポート - - - Filenames will be generated with title and .passkey file extension. - ファイル名は「タイトル + .passkey 拡張子」で生成されます。 - - - Export entries - エントリーをエクスポート - - - Export Selected - 選択したものをエクスポート - - - Cancel - キャンセル - - - Export to folder - フォルダーにエクスポート - - - Export the following passkey entries. - 次のパスキーをエクスポートします。 - - - - PasskeyExporter - - KeePassXC: Passkey Export - KeePassXC: パスキーのエクスポート - - - File "%1.passkey" already exists. -Do you want to overwrite it? - - ファイル「%1.passkey」は既に存在しています。 -上書きしますか? - - - - Cannot open file - ファイルを開けませんでした - - - Cannot open file "%1" for writing. - ファイル「%1」は書き込み用として開けません。 - - - Cannot write to file - ファイルに書き込めません - - - - PasskeyImportDialog - - KeePassXC - Passkey Import - KeePassXC - パスキーのインポート - - - Username: %1 - ユーザー名: %1 - - - Group - グループ - - - Database - データベース - - - Import Passkey - パスキーをインポート - - - Import - インポート - - - Cancel - キャンセル - - - Entry - エントリー - - - Create new entry - 新しいエントリーを作成 - - - Relying Party: %1 - サービス提供者 (Relying Party): %1 - - - Import the following passkey: - 次のパスキーをインポートします: - - - Import the following passkey to this entry: - このエントリーに次のパスキーをインポートします: - - - Default passkeys group (Imported Passkeys) - デフォルトのパスキーグループ (Imported Passkeys) - - - - PasskeyImporter - - Passkey file - パスキーファイル - - - All files - すべてのファイル - - - Cannot open file - ファイルを開けませんでした - - - Cannot open file "%1" for reading. - ファイル「%1」は読み込み用として開けません。 - - - Open passkey file - パスキーファイルを開く - - - Cannot import passkey - パスキーをインポートできません - - - Cannot import passkey file "%1". Data is missing. - パスキーファイル「%1」をインポートできません。データが存在しません。 - - - Cannot import passkey file "%1". -The following data is missing: -%2 - パスキーファイル「%1」をインポートできません。 -次のデータが存在しません: -%2 - - - Cannot import passkey file "%1". Private key is missing or malformed. - パスキーファイル「%1」をインポートできません。秘密鍵が存在しないか形式に問題があります。 - PasswordEditWidget @@ -7058,7 +6055,7 @@ The following data is missing: Pick characters from every group - 選択したすべての文字種から文字を選ぶ + 使用するすべての文字種から文字を選ぶ Passphrase @@ -7076,6 +6073,10 @@ The following data is missing: Word Count: 単語数: + + Character Count: + 文字数: + Word Case: 単語の大小文字: @@ -7088,6 +6089,10 @@ The following data is missing: Add custom wordlist カスタム単語リストを追加 + + character + 文字 + Close 閉じる @@ -7124,30 +6129,6 @@ The following data is missing: Entropy: %1 bit エントロピー: %1 ビット - - Password Quality: %1 - パスワードの品質: %1 - - - Poor - Password quality - 非常に脆弱 - - - Weak - Password quality - 脆弱 - - - Good - Password quality - 良好 - - - Excellent - Password quality - すばらしい - Confirm Delete Wordlist 単語リストの削除の確認 @@ -7195,20 +6176,32 @@ Do you want to overwrite it? 特殊文字 - passwordLength - + Password Quality: %1 + パスワードの品質: %1 - Characters: %1 - 文字: %1 + Poor + Password quality + 貧弱 - MIXED case - 大文字小文字混在 + Weak + Password quality + 弱い - Excluded characters: "0", "1", "l", "I", "O", "|", "﹒", "B", "8", "G", "6" - 除外される文字: "0", "1", "l", "I", "O", "|", "﹒", "B", "8", "G", "6" + Good + Password quality + 良い + + + Excellent + Password quality + すばらしい + + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + 除外される文字: "0"、"1"、"l"、"I"、"O"、"|"、"﹒" @@ -7240,17 +6233,17 @@ Do you want to overwrite it? Poor Password quality - 非常に脆弱 + 貧弱 Weak Password quality - 脆弱 + 弱い Good Password quality - 良好 + 良い Excellent @@ -7258,7 +6251,7 @@ Do you want to overwrite it? すばらしい - Toggle password visibility using Control + H. Open the password generator using Control + G. + Toggle password visibilty using Control + H. Open the password generator using Control + G. @@ -7277,21 +6270,6 @@ Do you want to overwrite it? 文字間で Tab を押す(&T) - - PreviewEntryAttachmentsDialog - - Preview entry attachment - エントリーの添付ファイルをプレビュー - - - No preview available - プレビューできません - - - Image format not supported - 対応していない画像形式です - - QMessageBox @@ -7330,10 +6308,6 @@ Do you want to overwrite it? Continue 続行 - - Continue with weak password - 脆弱なパスワードで続行 - QObject @@ -7555,7 +6529,7 @@ Do you want to overwrite it? Could not find entry with path %1. - パス %1 のエントリーを見つけられませんでした。 + パス %1 のエントリーが見つかりませんでした。 Could not find attachment with name %1. @@ -7641,7 +6615,8 @@ Do you want to overwrite it? Timeout before clearing the clipboard (default is %1 seconds, set to 0 for unlimited). - クリップボードを消去するまでの待機時間 (既定値は %1 秒、0 にすると無制限)。 + クリップボードを消去するまでの待ち時間 (規定は %1 秒 +で 0 にすると無制限)。 Invalid timeout value %1. @@ -7727,10 +6702,6 @@ Do you want to overwrite it? Too many arguments provided. 提供された引数が多すぎます。 - - Path of the database. - データベースのパス。 - Target decryption time in MS for the database. データベースの目標復号時間 (ミリ秒)。 @@ -7751,6 +6722,10 @@ Do you want to overwrite it? Create a new database. 新しいデータベースを作成する。 + + Path of the database. + データベースのパス。 + Invalid decryption time %1. %1 は復号時間として不適切です。 @@ -7795,158 +6770,6 @@ Do you want to overwrite it? Successfully created new database. 新しいデータベースを正常に作成しました。 - - Unset the password for the database. - データベースのパスワードの設定を解除する。 - - - Unset the key file for the database. - データベースのキーファイルの設定を解除する。 - - - Edit a database. - データベースを編集。 - - - Cannot use %1 and %2 at the same time. - %1 と %2 は同時に使用できません。 - - - Could not change the database key. - データベース鍵を変更できません。 - - - Database was not modified. - データベースは変更されていません。 - - - Writing the database failed: %1 - データベースへの書き込みに失敗しました: %1 - - - Successfully edited the database. - 正常にデータベースを編集しました。 - - - Cannot remove password: The database does not have a password. - パスワードは削除できません: データベースにパスワードがありません。 - - - Cannot remove file key: The database does not have a file key. - キーファイルは削除できません: データベースにキーファイルがありません。 - - - Loading the new key file failed: %1 - 新しいキーファイルの読み込みに失敗しました: %1 - - - Found unexpected Key type %1 - 想定されていない鍵の形式が見つかりました %1 - - - Cannot remove all the keys from a database. - パスキーをデータベースから削除できません。 - - - Show a database's information. - データベースの情報を表示する。 - - - UUID: - UUID: - - - Name: - 名前: - - - Description: - 概要: - - - Cipher: - 暗号: - - - KDF: - KDF: - - - Recycle bin is enabled. - ゴミ箱が有効です。 - - - Recycle bin is not enabled. - ゴミ箱は有効になっていません。 - - - Location - 場所 - - - Database created - データベース作成 - - - Last saved - 最終更新日時 - - - Unsaved changes - 未保存の変更 - - - yes - はい - - - no - いいえ - - - Number of groups - グループ数 - - - Number of entries - エントリー数 - - - Number of expired entries - 期限切れエントリー数 - - - Unique passwords - 固有パスワード - - - Non-unique passwords - 非固有パスワード - - - Maximum password reuse - パスワード使い回しの最大数 - - - Number of short passwords - 短いパスワードの数 - - - Number of weak passwords - 脆弱なパスワードの数 - - - Entries excluded from reports - レポートから除外されたエントリー - - - Average password length - 平均パスワード長 - - - %1 characters - %1文字 - Word count for the diceware passphrase. ダイスウェアパスフレーズの単語数。 @@ -7970,6 +6793,10 @@ Do you want to overwrite it? Invalid word count %1 単語数 %1 は不正です + + The word list is too small (< 1000 items) + 単語リストが小さすぎます (< 1000 アイテム) + Title for the entry. エントリーのタイトル。 @@ -7994,6 +6821,10 @@ Do you want to overwrite it? Enter new password for entry: エントリーの新しいパスワードを入力してください: + + Writing the database failed: %1 + データベースへの書き込みに失敗しました: %1 + Successfully edited entry %1. エントリー %1 を正常に編集しました。 @@ -8114,6 +6945,10 @@ Do you want to overwrite it? Exit interactive mode. 対話モードを終了する。 + + Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. + エクスポート時に使用するフォーマット。'xml' が既定で、'csv' も選択可能です。 + Exports the content of a database to standard output in the specified format. データベースの内容を指定した形式で標準出力にエクスポートする。 @@ -8214,6 +7049,106 @@ Do you want to overwrite it? Successfully imported database. データベースを正常にインポートしました。 + + Show a database's information. + データベースの情報を表示する。 + + + UUID: + UUID: + + + Name: + 名前: + + + Description: + 概要: + + + Cipher: + 暗号: + + + KDF: + KDF: + + + Recycle bin is enabled. + ゴミ箱が有効です。 + + + Recycle bin is not enabled. + ゴミ箱は有効になっていません。 + + + Location + 場所 + + + Database created + データベース作成 + + + Last saved + 最終更新日時 + + + Unsaved changes + 未保存の変更 + + + yes + はい + + + no + いいえ + + + Number of groups + グループ数 + + + Number of entries + エントリー数 + + + Number of expired entries + 期限切れエントリー数 + + + Unique passwords + 固有パスワード + + + Non-unique passwords + 非固有パスワード + + + Maximum password reuse + パスワード使い回しの最大数 + + + Number of short passwords + 短いパスワードの数 + + + Number of weak passwords + 脆弱なパスワードの数 + + + Entries excluded from reports + レポートから除外されたエントリー + + + Average password length + 平均パスワード長 + + + %1 characters + %1 文字 + Unknown command %1 %1 は不明なコマンドです @@ -8386,17 +7321,13 @@ Available commands: Show the protected attributes in clear text. クリアテキストの保護された属性を表示する。 - - Show all the attributes of the entry. - エントリーの属性を表示する。 - Show the attachments of the entry. エントリーの添付ファイルを表示する。 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 @@ -8460,10 +7391,6 @@ Please consider generating a new key file. Invalid YubiKey serial %1 YubiKey のシリアル %1 は不正です - - Please present or touch your YubiKey to continue. - YubiKey を挿入またはタッチして続行します。 - Enter password to encrypt database (optional): データベースを暗号化するためのパスワードを入力してください (オプション): @@ -8520,7 +7447,7 @@ Please consider generating a new key file. Very weak password - 非常に脆弱なパスワード + 非常に弱いパスワード Password entropy is %1 bits @@ -8528,7 +7455,7 @@ Please consider generating a new key file. Weak password - 脆弱なパスワード + 弱いパスワード Used in %1/%2 @@ -8702,6 +7629,18 @@ CPU アーキテクチャー: %2 file empty ファイルが空です + + malformed string + 不正な形式の文字列 + + + missing closing quote + 閉じ引用符がありません + + + %1: (row, col) %2,%3 + %1: (行, 列) %2,%3 + AES 256-bit AES 256 ビット @@ -8880,6 +7819,14 @@ CPU アーキテクチャー: %2 read password of the database from stdin 標準入力からデータベースのパスワードを読み込む + + allow app screen recordering and screenshots + アプリによる画面の録画とスクリーンショットの撮影を許可する + + + Locked databases. + データベースをロックしました。 + Database failed to lock. データベースのロックに失敗しました。 @@ -8888,10 +7835,6 @@ CPU アーキテクチャー: %2 Another instance of KeePassXC is already running. KeePassXC の別インスタンスが既に起動しています。 - - KeePassXC is not running. No open database to lock - KeePassXC が実行されていません。ロックできるデータベースがありません - Fatal error while testing the cryptographic functions. 暗号化機能のテスト中に致命的なエラーが発生しました。 @@ -8916,320 +7859,89 @@ CPU アーキテクチャー: %2 Failed to create Windows Hello credential. - Windows Hello の認証情報の作成に失敗しました。 + Failed to sign challenge using Windows Hello. - Windows Hello を使用したチャレンジの署名に失敗しました。 + Warning: Failed to block screenshot capture on a top-level window. - 警告: トップレベルウィンドウのスクリーンショット撮影を防げませんでした! + Invalid Cipher - 無効な暗号です + Invalid KDF - 無効な KDF です + - Access to all entries is denied - すべてのエントリーへのアクセスが拒否されました + Please present or touch your YubiKey to continue. + - allow screenshots and app recording (Windows/macOS) + Show all the attributes of the entry. + + + + Edit a database. + + + + Could not change the database key. + + + + Database was not modified. + + + + Successfully edited the database. + + + + Loading the new key file failed: %1 + + + + Unset the password for the database. + + + + Unset the key file for the database. + + + + Cannot use %1 and %2 at the same time. + + + + Cannot remove all the keys from a database. + + + + Cannot remove password: The database does not have a password. + + + + Cannot remove file key: The database does not have a file key. + + + + Found unexpected Key type %1 Set the key file for the database. -This option is deprecated, use --set-key-file instead. - データベースにキーファイルを設定します。 -このオプションは非推奨です。--set-key-file の使用を検討してください。 - - - Databases have been locked. - データベースがロックされました。 - - - Attestation not supported - 対応していない認証です - - - Credential is excluded - 資格情報が有効期限切れです - - - Passkeys request canceled - パスキー要求がキャンセルされました - - - Invalid user verification - 不正なユーザー認証 - - - Empty public key - 公開鍵が空白です - - - Invalid URL provided - 無効な URL が提供されました - - - Passkeys - パスキー - - - AES initialization failed +This options is deprecated, use --set-key-file instead. - AES encrypt failed + KeePassXC is not running. No open database to lock - - Failed to store in Linux Keyring - - - - Polkit returned an error: %1 - - - - Could not locate key in keyring - - - - Could not read key in keyring - - - - AES decrypt failed - - - - No Polkit authentication agent was available - - - - Polkit authorization failed - - - - No Quick Unlock provider is available - - - - Failed to init KeePassXC crypto. - KeePassXC の暗号の初期化に失敗しました。 - - - Failed to encrypt key data. - 鍵データの暗号化に失敗しました。 - - - Failed to get Windows Hello credential. - Windows Hello の認証情報の取得に失敗しました。 - - - Failed to decrypt key data. - 鍵データの復号に失敗しました。 - - - Origin is empty or not allowed - オリジンが空白または許可されていません - - - Effective domain is not a valid domain - Effective domain が有効なドメインではありません - - - Origin and RP ID do not match - オリジンと RP ID が一致しません - - - No supported algorithms were provided - 対応するアルゴリズムが提供されませんでした - - - Wait for timer to expire - - - - Challenge is shorter than required minimum length - チャレンジが最低文字数より短いです - - - user.id does not match the required length - user.id の文字数が規定に適合しません - - - Favorite - Tag for favorite entries - お気に入り - - - File does not exist. - ファイルが存在しません。 - - - Cannot open file: %1 - ファイルを開けません: %1 - - - Cannot parse file: %1 at position %2 - - - - Failed to decrypt json file: %1 - json ファイルの復号化に失敗しました: %1 - - - Invalid encKeyValidation field - - - - Invalid cipher list within encKeyValidation field - - - - Wrong password - パスワードが間違っています - - - Invalid encrypted data field - - - - Invalid cipher list within encrypted data field - - - - Cannot initialize cipher - 暗号を初期化できませんでした - - - Cannot decrypt data - データを復号できません - - - Bitwarden Import - Bitwarden のインポート - - - Archived - Tag for archived entries - アーカイブ - - - Invalid 1PUX file format: Not a valid ZIP file. - 無効な 1PUX ファイル形式: 有効な ZIP ファイルではありません。 - - - Invalid 1PUX file format: Missing export.data - 無効な 1PUX ファイル形式: export.data が見つかりません。 - - - 1Password Import - 1Password のインポート - - - Enter Shortcut - ショートカットを入力 - - - Action - アクション - - - Shortcuts - ショートカット - - - Unknown passkeys error - 不明なパスキーエラーが発生しました - - - Invalid KDF iterations, cannot decrypt json file - 無効な KDF 反復、json ファイルを複合できませんでした - - - Unsupported format, ensure your Bitwarden export is password-protected - 対応していないフォーマットです。Bitwarden エクスポートがパスワードで保護されているか確認してください - - - Only PBKDF and Argon2 are supported, cannot decrypt json file - PBKDF と Argon2 に対応しており、json ファイルは復号できません - - - Reset Shortcuts - ショートカットをリセット - - - Double click an action to change its shortcut - ショートカットを変更したいアクションをダブルクリック - - - Filter... - フィルター... - - - Shortcut Conflict - ショートカット重複 - - - Shortcut %1 conflicts with '%2'. Overwrite shortcut? - ショートカット %1 は「%2」と重複しています。上書きしますか? - - - Cannot generate valid passphrases because the wordlist is too short - 単語リストが短すぎるため、有効なパスフレーズを生成できませんでした - - - Encrypted files are not supported. - 暗号化されたファイルには対応していません。 - - - Proton Pass Import - Proton Pass Import - - - Delete plugin data? - プラグインデータを削除しますか? - - - Delete plugin data from Entry(s)? - エントリーからプラグインデータを削除しますか? - - - Passkey - パスキー - - - Format to use when exporting. Available choices are 'xml', 'csv' or 'html'. Defaults to 'xml'. - - - - start minimized to the system tray - - - - malformed string, possible unescaped delimiter - - - - missing closing delimiter - - - - %1, row: %2, column: %3 - - - - Tags - タグ - QtIOCompressor @@ -9265,39 +7977,20 @@ This option is deprecated, use --set-key-file instead. 内部 zlib エラー: - - RemoteHandler - - Command `%1` did not finish in time. Process was killed. - - - - Failed to upload merged database. Command `%1` did not finish in time. Process was killed. - - - - Invalid download parameters provided. - - - - Command `%1` failed to download database. - - - - Invalid database pointer or upload parameters provided. - - - - Command `%1` exited with status code: %2 - - - - Failed to upload merged database. Command `%1` exited with status code: %2 - - - ReportsWidgetBrowserStatistics + + Exclude expired entries from the report + レポートから期限切れのエントリーを除外する + + + Show only entries which have URL set + + + + Show only entries which have browser settings in custom data + + Double-click entries to edit. エントリーをダブルクリックすると編集できます。 @@ -9308,19 +8001,19 @@ This option is deprecated, use --set-key-file instead. Entry has no URLs set - エントリーには URL が設定されていません + Allowed URLs - 許可されたURL + 許可する URL Entry has no Browser Integration settings - エントリーにはブラウザー統合設定がありません + Denied URLs - 拒否されたURL + 拒否する URL (Excluded) @@ -9332,11 +8025,11 @@ This option is deprecated, use --set-key-file instead. Please wait, browser statistics is being calculated… - ブラウザー統計の生成中です。しばらくお待ちください... + No entries with a URL, or none has browser extension settings saved. - URL が設定されているエントリーが存在しないか、ブラウザー統合の設定が保存されていません。 + Title @@ -9362,56 +8055,47 @@ This option is deprecated, use --set-key-file instead. Exclude from reports レポートから除外 - - Expire Entry(s)… - エントリーを有効期限切れにする… - - - Only show entries that have a URL - URL が登録されたエントリーのみ表示する - - - Only show entries that have been explicitly allowed or denied - 明確に許可または拒否されたエントリーのみ表示する - - - Show expired entries - 期限切れのエントリーを表示する - - - (Expired) - (期限切れ) - - - Delete plugin data from Entry(s)… - エントリーからプラグインデータを削除... - ReportsWidgetHealthcheck - Show expired entries - 期限切れのエントリーを表示する + Exclude expired entries from the report + レポートから期限切れのエントリーを除外する - (Expired) - (期限切れ) + Also show entries that have been excluded from reports + レポートから除外されているエントリーも表示する Hover over reason to show additional details. Double-click entries to edit. 理由にマウスオーバーすると追加の詳細が表示されます。エントリーをダブルクリックすると編集できます。 + + Bad + Password quality + 悪い + Bad — password must be changed 悪い — パスワードを変更する必要があります + + Poor + Password quality + 貧弱 + Poor — password should be changed - 非常に脆弱 — パスワードを変更する必要があります + 貧弱 — パスワードを変更する必要があります + + + Weak + Password quality + 弱い Weak — consider changing the password - 脆弱 — パスワードの変更を検討してください + 弱い — パスワードの変更を検討してください (Excluded) @@ -9427,7 +8111,7 @@ This option is deprecated, use --set-key-file instead. Congratulations, everything is healthy! - すべて健全です。おめでとうございます! + すべて正常です。おめでとうございます! Title @@ -9457,14 +8141,6 @@ This option is deprecated, use --set-key-file instead. Exclude from reports レポートから除外 - - Expire Entry(s)… - エントリーを有効期限切れにする… - - - Show entries that have been excluded from reports - レポートから除外されたエントリーを表示 - ReportsWidgetHibp @@ -9560,77 +8236,6 @@ This option is deprecated, use --set-key-file instead. Exclude from reports レポートから除外 - - Expire Entry(s)… - エントリーを有効期限切れにする… - - - - ReportsWidgetPasskeys - - Export - エクスポート - - - Import - インポート - - - List of entry URLs - エントリーのURLの一覧 - - - Title - タイトル - - - Path - パス - - - Username - ユーザー名 - - - URLs - URL - - - Edit Entry… - エントリーを編集… - - - Delete Entry(s)… - エントリーを削除… - - - Relying Party - サービス提供者 (Relying Party) - - - Show expired entries - 期限切れのエントリーを表示する - - - (Expired) - (期限切れ) - - - Export Confirmation - エクスポートの確認 - - - The passkey file will be vulnerable to theft and unauthorized use, if left unsecured. Are you sure you want to continue? - パスキーファイルを安全でない環境に保存すると、盗難や不正使用の被害を受ける可能性があります。本当に続行しますか? - - - Please wait, list of entries with passkeys is being updated… - しばらくお待ちください。パスキーを持つエントリーは更新中です... - - - No entries with passkeys. - パスキーが登録されたエントリーはありません。 - ReportsWidgetStatistics @@ -9805,14 +8410,6 @@ This option is deprecated, use --set-key-file instead. No agent running, cannot list identities. エージェントが実行されていないため、ID の一覧を取得できません。 - - Failed to remove all SSH identities from agent. - SSH ID をエージェントから削除できませんでした。 - - - All SSH identities removed from agent. - すべての SSH ID をエージェントから削除しました。 - SearchHelpWidget @@ -9879,10 +8476,6 @@ This option is deprecated, use --set-key-file instead. Search Help 検索のヘルプ - - Save Search - 検索語を保存 - Search (%1)… Search placeholder text, %1 is the keyboard shortcut @@ -9896,6 +8489,10 @@ This option is deprecated, use --set-key-file instead. Limit search to selected group 選択したグループに検索対象を制限 + + Save Search + 検索語を保存 + SettingsClientModel @@ -9957,10 +8554,31 @@ This option is deprecated, use --set-key-file instead. Confirm when passwords are retrieved by clients クライアントがパスワードを取得する際に確認する + + <html><head/><body><p><span style=" + font-family:'-apple-system','BlinkMacSystemFont','Segoe UI','Helvetica','Arial','sans-serif','Apple Color + Emoji','Segoe UI Emoji'; font-size:14px; color:#24292e; background-color:#ffffff;">This setting does + not override disabling recycle bin prompts</span></p></body></html> + + <html><head/><body><p><span style=" + font-family:'-apple-system','BlinkMacSystemFont','Segoe UI','Helvetica','Arial','sans-serif','Apple Color + Emoji','Segoe UI Emoji'; font-size:14px; color:#24292e; background-color:#ffffff;">この設定は + ゴミ箱の確認ダイアログの無効化を上書きしません</span></p></body></html> + + Confirm when clients request entry deletion クライアントがエントリーの削除を要求する際に確認する + + <html><head/><body><p>This improves compatibility with certain applications + which search for password without unlocking the database first.</p><p>But enabling this may also + crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a + different value set in applications.)</p></body></html> + + <html><head/><body><p>これは、まずデータベースのロックを解除せずにパスワードを検索する特定のアプリケーションとの互換性を改善します。</p><p>しかしながら、これを有効にすると一定時間経過してタイムアウトするまでにデータベースのロックが解除されなかった場合にクライアントがクラッシュする可能性があります。 (通常は 25 秒ですがアプリケーションによっては異なる値が設定されている可能性があります)</p></body></html> + + Prompt to unlock database before searching 検索する前にデータベースのロック解除を確認する @@ -9985,14 +8603,6 @@ This option is deprecated, use --set-key-file instead. Save current changes to activate the plugin and enable editing of this section. プラグインをアクティブにするために現在の変更を保存し、このセクションの編集を有効にしてください。 - - <html><head/><body><p>This setting does not override disabling recycle bin prompts </p></body></html> - - - - <html><head/><body><p>This improves compatibility with certain applications which search for password without unlocking the database first.</p><p>But enabling this may also crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a different value set in applications.) </p></body></html> - - SettingsWidgetKeeShare @@ -10101,20 +8711,20 @@ This option is deprecated, use --set-key-file instead. TagModel - Clear Search - 検索語を消去 + Expired + 期限切れ + + + Weak Passwords + 弱いパスワード All Entries すべてのエントリー - Expired - 期限切れ - - - Weak Passwords - 脆弱なパスワード + Clear Search + 検索語を消去 @@ -10246,7 +8856,7 @@ Example: JBSWY3DPEHPK3PXP Are you sure you want to delete TOTP settings for this entry? - 本当にこのエントリーの TOTP 設定を削除しますか? + このエントリーの TOTP 設定を削除してもよろしいですか? @@ -10291,7 +8901,27 @@ Example: JBSWY3DPEHPK3PXP WelcomeWidget Start storing your passwords securely in a KeePassXC database - KeePassXC データベースで安全なパスワード保管の強化を開始します + KeePassXC データベースに安全にパスワードを保管する + + + Create new database + 新しいデータベースを作成する + + + Open existing database + 既存のデータベースを開く + + + Import from KeePass 1 + KeePass 1 からインポートする + + + Import from 1Password + 1Password からインポートする + + + Import from CSV + CSV からインポートする Recent databases @@ -10305,18 +8935,6 @@ Example: JBSWY3DPEHPK3PXP Welcome to KeePassXC %1 KeePassXC %1 へようこそ - - Create Database - データベースを作成 - - - Open Database - データベースを開く - - - Import File - ファイルをインポート - WinUtils @@ -10333,8 +8951,31 @@ Example: JBSWY3DPEHPK3PXP グローバルショートカットを登録できませんでした + + WindowsHello + + Failed to init KeePassXC crypto. + KeePassXC の暗号の初期化に失敗しました。 + + + Failed to encrypt key data. + 鍵データの暗号化に失敗しました。 + + + Failed to get Windows Hello credential. + Windows Hello の認証情報の取得に失敗しました。 + + + Failed to decrypt key data. + 鍵データの復号に失敗しました。 + + YubiKey + + %1 No interface, slot %2 + %1 インターフェースなし, スロット %2 + General: 全般: @@ -10346,6 +8987,14 @@ Example: JBSWY3DPEHPK3PXP YubiKeyEditWidget + + Refresh hardware tokens + ハードウェアトークンを更新 + + + Refresh + 再読み込み + Hardware key slot selection ハードウェアキースロットの選択 @@ -10378,6 +9027,10 @@ Example: JBSWY3DPEHPK3PXP Challenge-Response set, click to change or remove チャレンジレスポンスの設定 (変更か削除をクリックしてください) + + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + <p>セキュリティ対策として <a href="https://www.yubico.com/">YubiKey</a> や <a href="https://onlykey.io">OnlyKey</a> を使用できます。</p><p>それらのスロットの 1 つを <a href="https://www.yubico.com/products/services-software/challenge-response/">HMAC-SHA1 チャレンジレスポンス</a> に設定する必要があります。</p> + Detecting hardware keys… ハードウェアキーを検出中… @@ -10386,32 +9039,35 @@ Example: JBSWY3DPEHPK3PXP No hardware keys detected 検出したハードウェアキーはありません + + + YubiKeyInterface - Refresh hardware keys - ハードウェアトークンを初期化 - - - <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed with <a href="https://keepassxc.org/docs/#faq-yubikey-howto">Challenge-Response</a>.</p> - <p><a href="https://www.yubico.com/">YubiKey</a> または <a href="https://onlykey.io">OnlyKey</a> をお持ちの場合、セキュリティをさらに強化できます。</p><p><a href="https://docs.yubico.com/yesdk/users-manual/application-otp/challenge-response.html">チャレンジレスポンス</a>に設定されたスロットが 1 つ必要です。</p> - - - Hardware keys found, but no slots are configured - ハードウェアキーを検出しましたが、スロットが設定されていません + %1 Invalid slot specified - %2 + 不正なスロットが指定されました: %1 - %2 YubiKeyInterfacePCSC + + (PCSC) %1 [%2] Challenge-Response - Slot %3 + (PCSC) %1 [%2] チャレンジレスポンス - スロット %3 + The YubiKey PCSC interface has not been initialized. YubiKey PCSC インターフェースが初期化されていません。 + + Hardware key is currently in use. + ハードウェアキーは現在使用中です。 + Could not find or access hardware key with serial number %1. Please present it to continue. - シリアルナンバー %1 のハードウェアキーが見つからない、またはアクセスできませんでした。続行するには正しく挿入してください。 + シリアルナンバー %1 のハードウェアキーが見つからない、またはアクセスできませんでした。正しく設定して続行してください。 Hardware key is locked or timed out. Unlock or re-present it to continue. - ハードウェアキーがロックされているか、タイムアウトしました。続行するにはロック解除または再挿入してください。 + ハードウェアキーがロックされているか、タイムアウトしました。ロックを解除するか、正しく設定し直してから続行してください。 Hardware key was not found or is not configured. @@ -10421,21 +9077,6 @@ Example: JBSWY3DPEHPK3PXP Failed to complete a challenge-response, the PCSC error code was: %1 チャレンジレスポンスでエラーが発生しました。PCSC のエラーコード: %1 - - (NFC) %1 [%2] - Slot %3, %4 - YubiKey display fields - (NFC) %1 [%2] - スロット %3, %4 - - - Press - USB Challenge-Response Key interaction request - Press - - - Passive - USB Challenge-Response Key no interaction required - Passive - YubiKeyInterfaceUSB @@ -10443,6 +9084,14 @@ Example: JBSWY3DPEHPK3PXP Unknown 不明 + + (USB) %1 [%2] Configured Slot - %3 + (USB) %1 [%2] 設定済みスロット - %3 + + + (USB) %1 [%2] Challenge-Response - Slot %3 - %4 + (USB) %1 [%2] チャレンジレスポンス - スロット %3 - %4 + Press USB Challenge-Response Key interaction request @@ -10457,6 +9106,10 @@ Example: JBSWY3DPEHPK3PXP The YubiKey USB interface has not been initialized. YubiKey USB インターフェースが初期化されていません。 + + Hardware key is currently in use. + ハードウェアキーは現在使用中です。 + Could not find hardware key with serial number %1. Please plug it in to continue. シリアルナンバー %1 のハードウェアキーが見つかりませんでした。続行するにはハードウェアキーを接続してください。 @@ -10473,15 +9126,5 @@ Example: JBSWY3DPEHPK3PXP Failed to complete a challenge-response, the specific error was: %1 チャレンジレスポンスでエラーが発生しました: %1 - - %1 [%2] - Slot %3 - YubiKey NEO display fields - %1 [%2] - スロット %3 - - - %1 [%2] - Slot %3, %4 - YubiKey display fields - %1 [%2] - スロット %3, %4 - \ No newline at end of file diff --git a/share/translations/keepassxc_km.ts b/share/translations/keepassxc_km.ts index cd8dfdf59..a39bbb3ab 100644 --- a/share/translations/keepassxc_km.ts +++ b/share/translations/keepassxc_km.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 General Public License (GPL) កំណែទី២។ + KeePassXC ត្រូវបានចែកចាយ តាមលក្ខន្តិកៈរបស់ GNU General Public License (GPL) កំណែទី2 ឬ (តាមជម្រើសរបស់អ្នក) កំណែទី3។ Project Maintainers: @@ -39,7 +39,7 @@ Include the following information whenever you report a bug: - បញ្ចុលពត៌មានខាងក្រោមនៅពេលអ្នករាយការណ៍ពីកំហុស + រួមមានពត៌មានខាងក្រោមនៅពេលអ្នករាយការណ៍ពីបញ្ហា៖ Copy to clipboard @@ -70,20 +70,16 @@ Executable - ប្រតិបត្តិ + អនុវត្តន៍បាន Command Line - Command Line + ឃ្លាបញ្ជារ Details ព័ត៌មានលម្អិត - - Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. - ការសម្រេចចិត្តរបស់អ្នកនឹងត្រូវបានចងចាំសម្រាប់រយៈពេលខណៈពេលដែលទាំងអតិថិជនស្នើសុំ និង KeePassXC កំពុងដំណើរការ។ - Remember ចងចាំ @@ -92,13 +88,17 @@ Allow Selected អនុញ្ញាតឱ្យជ្រើសរើស + + Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. + ការសម្រេចចិត្តរបស់អ្នកនឹងត្រូវបានចងចាំសម្រាប់រយៈពេលខណៈពេលដែលទាំងអតិថិជនស្នើសុំ និង KeePassXC កំពុងដំណើរការ។ + Deny All && Future បដិសេធទាំងអស់ && អនាគត Allow All && &Future - អនុញ្ញាតទាំងអស់ និងអនាគត + អនុញ្ញាតទាំងអស់ && &អនាគត @@ -120,11 +120,7 @@ Use OpenSSH - ការប្រើ SSH ដោយចំហរ - - - Use both agents - ប្រើភ្នាក់ងារទាំងពីរ។ + ការប្រើ OpenSSH SSH_AUTH_SOCK override @@ -154,6 +150,10 @@ SSH Agent connection is working! ការតភ្ជាប់របស់ភ្នាក់ងារ SHH កំពុងដំណើរការហើយ! + + Use both agents + ប្រើភ្នាក់ងារទាំងពីរ។ + ApplicationSettingsWidget @@ -169,17 +169,13 @@ Security សន្តិសុខ - - This setting cannot be enabled when minimize on unlock is enabled. - ការកំណត់នេះមិនអាចដំណើរការទេ កាលណាដំណើរការមុខងារ minimize on unlock ។ - Access error for config file %1 កំហុសពេលចូលប្រើ ដោយសារឯកសារប្រមូលបាន ១% Icon only - តែរូបតំណាងទេ + តែរូបតំណាងប៉ុណ្ណោះ Text only @@ -199,7 +195,7 @@ Monochrome - ពណ៌តែមួយ + មួយពណ៌ Monochrome (light) @@ -217,49 +213,21 @@ You must restart the application to set the new language. Would you like to restart now? អ្នកត្រូវចាប់ផ្តើមកម្មវិធីឡើងវិញ ដើម្បីកំណត់ភាសាថ្មី។ ចង់ចាប់ផ្តើមឡើងវិញទេ? + + Reset Settings? + កំណត់ឡើងវិញ? + + + Are you sure you want to reset all general and security settings to default? + តើអ្នកប្រាកដទេថាចង់កំណត់ឡើងវិញទូទៅទាំងអស់ និងកំណត់សុវត្ថិភាពទៅជាលំនាំដើមវិញ? + Select backup storage directory ជ្រើសរើសការបម្រុងទុកបញ្ចីផ្ទុក - Confirm Reset - បញ្ជាក់ការកំណត់ឡើងវិញ - - - Are you sure you want to reset all settings to default? - តើអ្នកប្រាកដទេថាចង់កំណត់ឡើងវិញទាំងអស់ទៅជាលំនាំដើមវិញ? - - - Import KeePassXC Settings - នាំចូលការកំណត់ KeePassXC - - - Failed to import settings from %1, not a valid settings file. - បានបរាជ័យក្នុងការនាំចូលការកំណត់ %1 មិនមែនជាឯកសារកំណត់ត្រឹមត្រូវទេ។ - - - Export KeePassXC Settings - នាំចេញការកំណត់ KeePassXC - - - Small - តូច - - - Normal - ធម្មតា - - - Medium - មធ្យម - - - Large - - - - Custom - + This setting cannot be enabled when minimize on unlock is enabled. + ការកំណត់នេះមិនអាចដំណើរការទេ កាលណាដំណើរការមុខងារ minimize on unlock ។ @@ -292,10 +260,6 @@ Remember previously used databases ចំណាំឃ្លាំងទិន្នន័យដែលធ្លាបប្រើពីមុន។ - - recent files - ឯកសារថ្មីៗ - Load previously open databases on startup ផ្ទុកឃ្លាំងទិន្នន័យដែលបើមុននេះ ពេលចាប់ប្រើ @@ -312,6 +276,25 @@ Include beta releases when checking for updates បញ្ចូលការចេញផ្សាយសាកល្បង ពេលឆែករកបច្ចុប្បន្ន + + On database unlock, show entries that + ពេលបើកសោរឃ្លាំងទិន្នន័យ បង្ហាញធាតុដែល + + + have expired + On database unlock, show entries that... + ផុតកំណត់ប្រើហើយ + + + days + On database unlock, show entries that will expire within %1 days + ថ្ងៃ + + + will expire within + On database unlock, show entries that... + នឹងផុតកំណត់ប្រើ ក្នុងរយៈពេល + File Management ការគ្រប់គ្រងឯកសារ @@ -336,10 +319,22 @@ Backup database file before saving បម្រុងទុកឯសារឃ្លាំងទិន្នន័យ មុនពេលរក្សាទុក។ + + Backup destination + គោលដៅបម្រុងទុក + + + Specifies the database backup file location. Occurrences of "{DB_FILENAME}" are replaced with the filename of the saved database without extension. {TIME:<format>} is replaced with the backup time, see https://doc.qt.io/qt-5/qdatetime.html#toString. <format> defaults to format string "dd_MM_yyyy_hh-mm-ss". + បញ្ជាក់ពីទីតាំងឯកសារបម្រុងទុកមូលដ្ឋានទិន្នន័យ។ ការកើតឡើងនៃ "{DB_FILENAME}" ត្រូវបានជំនួសដោយឈ្មោះឯកសារនៃមូលដ្ឋានទិន្នន័យដែលបានរក្សាទុកដោយគ្មានកម្មវិធីបន្ថែម។ {TIME:<format>} ត្រូវបានជំនួសដោយពេលវេលាបម្រុងទុក សូមមើល https://doc.qt.io/qt-5/qdatetime.html#toString. <format> លំនាំដើម ដើម្បីធ្វើទ្រង់ទ្រាយខ្សែអក្សរ "dd_MM_yyyy_hh-mm-ss"។ + {DB_FILENAME}.old.kdbx {DB_FILENAME}.old.kdbx + + Choose... + ជ្រើសរើស... + Use alternative saving method (may solve problems with Dropbox, Google Drive, GVFS, etc.) ប្រើវិធីសន្សំជំនួស (អាចដោះស្រាយបញ្ហាជាមួយ Dropbox, Google Drive, GVFS ជាដើម) @@ -358,8 +353,7 @@ Use group icon on entry creation - Use group icon on entry creation -ប្រើរូបតំណាងពេលបង្កើតក្រុមថ្មី + ប្រើប្រាស់រូបក្រុមលើការបង្កើតទិន្នន័យបញ្ចូល Minimize when opening a URL @@ -379,7 +373,7 @@ Favicon download timeout: - អស់ពេលក្នុងការទាញយករូបតំណាង + កំណត់ពេលក្នុងការទាញយករូបតំណាង Website icon download timeout in seconds @@ -418,10 +412,6 @@ Toolbar button style: ស្ទីលប៊ូតុងរបារឧបករណ៍៖ - - Show passwords in color - ការបង្ហាញពាក្យសម្ងាត់ជាពណ៌ - Use monospaced font for notes ប្រើប្រាស់ពុម្ពអក្សរទំហំតែមួយសម្រាប់កំណត់ចំណាំ @@ -501,76 +491,19 @@ Auto-type character typing delay milliseconds - ការពន្យារពេលការសរសេរតួអក្សរនៃការសរសេរចូលដោយស្វ័យប្រវត្តិ + ការពន្យារពេលមីលីវិនាទីនៃការសរសេរតួអក្សររបស់ការសរសេរចូលដោយស្វ័យប្រវត្តិ Remember last typed entry for: ចងចាំការបញ្ចូលដោយសរសេរចុងក្រោយសម្រាប់: - On database unlock, show entries that will expire within - នៅលើការដោះសោមូលដ្ឋានទិន្នន័យ បង្ហាញធាតុដែលនឹងផុតកំណត់នៅក្នុង + recent files + ឯកសារថ្មីៗ - On database unlock, show entries that will expire within - - - - days - number of days warning for password expiration - ថ្ងៃ - - - Destination format: - - - - <html><head/><body><p><span style=" font-weight:600;">{DB_FILENAME}</span> is replaced with the filename of the saved database without extension</p><p><span style=" font-weight:600;">{TIME:&lt;format&gt;}</span> is replaced with the specified time format (default: dd_MM_yyyy_hh-mm-ss)</p><p>See the User Guide for more details</p></body></html> - - - - Choose folder... - - - - Show confirmation before moving entries to recycle bin - - - - Copy data on double clicking field in entry view - - - - Show toolbar - បង្ហាញរបាឧបករណ៍ - - - Show the menu bar by pressing the Alt key - បង្ហាញរបារឧបករណ៍ដោយចុចគ្រាប់ចុច Alt - - - Show menubar - បង្ហាញរបាឧបករណ៍ - - - Import settings… - នាំចូលការកំណត់… - - - Export settings… - នាំចេញលការកំណត់… - - - Open browser on double clicking URL field in entry view - - - - Font size: - - - - Font size selection - + Show passwords in color + ការបង្ហាញពាក្យសម្ងាត់ជាពណ៌ @@ -625,6 +558,10 @@ Lock databases after minimizing the window ចាក់សោមូលដ្ឋានទិន្នន័យបន្ទាប់ពីបង្រួមវីនដូឲ្យតូច + + Require password repeat when it is visible + ទាមទារពាក្យសម្ងាត់ម្ដងទៀតនៅពេលមើលឃើញ + Hide passwords when editing them លាក់ពាក្យសម្ងាត់ពេលកែវា @@ -637,6 +574,18 @@ Hide passwords in the entry preview panel លាក់ពាក្យសម្ងាត់នៅក្នុងផ្ទាំងមើលជាមុន + + Hide entry notes by default + លាក់កំណត់ចំណាំចូលតាមលំនាំដើម + + + Move entries to recycle bin without confirmation + ផ្លាស់ទីធាតុរចូលទៅក្នុងធុងសំរាមដោយគ្មានការបញ្ចាក់ + + + Enable double click to copy the username/password entry columns + បើការចុចពីរដើម្បីចម្លង username/password លើជួរឈរ + Privacy ឯកជនភាព @@ -647,18 +596,6 @@ Hide TOTP in the entry preview panel - លាក់ TOTP នៅក្នុងបន្ទះមើលជាមុនធាតុ - - - Lock databases when switching user - - - - Lock Options - ជម្រើសចាក់សោ - - - Hide notes in the entry preview panel @@ -678,7 +615,7 @@ KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. - KeePassXC ទាមទារ​ការអនុញ្ញាត​ការ​ប្រើប្រាស់​ដើម្បី​អនុវត្ត​កម្រិត​ចូល​ប្រភេទ​ស្វ័យប្រវត្តិ។ ប្រសិនបើអ្នកបានផ្តល់ការអនុញ្ញាតរួចហើយ អ្នកប្រហែលជាត្រូវចាប់ផ្តើមឡើងវិញ KeePassXC ។ + KeePassXC ទាមទារ​ការអនុញ្ញាត​ការ​ប្រើប្រាស់​ដើម្បី​អនុវត្ត​កម្រិត​ចូល​ប្រភេទ​ស្វ័យប្រវត្តិ។ ប្រសិនបើអ្នកបានផ្តល់ការអនុញ្ញាតរួចហើយ អ្នកប្រហែលជាត្រូវចាប់ផ្តើម KeePassXC ឡើងវិញ ។ KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. @@ -705,13 +642,27 @@ បានរកឃើញការពន្យាពេលយូរពេក ជាអតិបរមាគឺ %1: %2 - Entry does not have attribute for PICKCHARS: %1 - ការបញ្ចូលមិនមានលក្ខណៈសម្រាប់ PICKCHARS៖ %1 + Invalid conversion type: %1 + ប្រភេទនៃការ​បម្លែង​មិន​ត្រឹមត្រូវ៖ %1 + + + Invalid conversion syntax: %1 + វាក្យសម្ព័ន្ធនៃការបំប្លែងមិនត្រឹមត្រូវ៖ %1 + + + Invalid regular expression syntax %1 +%2 + វាក្យសម្ព័ន្ធកន្សោមពាក្យធម្មតាមិនត្រឹមត្រូវ %1 +%2 Invalid placeholder: %1 កន្លែងរក្សាទុកមិនត្រឹមត្រូវ៖ %1 + + Entry does not have attribute for PICKCHARS: %1 + ការបញ្ចូលមិនមានលក្ខណៈសម្រាប់ PICKCHARS៖ %1 + AutoTypeAssociationsModel @@ -753,6 +704,10 @@ AutoTypePlatformX11 + + Trying to send invalid keysym. + កំពុងព្យាយាមផ្ញើ keysym មិនត្រឹមត្រូវ + Sequence aborted: Caps Lock is on លំដាប់ដែលបានបោះបង់៖ អក្សរ​ធំ​ជាប់ត្រូវបានបើក @@ -765,10 +720,6 @@ Unable to get valid keycode for key: មិនអាចទទួលបានលេខកូដត្រឹមត្រូវសម្រាប់សោបានទេ៖ - - Trying to send invalid keyboard symbol. - - AutoTypeSelectDialog @@ -808,7 +759,7 @@ Ctrl+4 - ប្រើក្តារចុចនិម្មិត (វីនដ Cancel - បញ្ឈប់ + បោះបង់ Type {USERNAME} @@ -873,20 +824,20 @@ Ctrl+4 - ប្រើក្តារចុចនិម្មិត (វីនដ Disable for this site បិទដំណើរការសម្រាប់គេហទំព័រនេះ - - Undo - មិនធ្វើវិញ - BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + KeePassXC-រក្សាទុកទិន្នន័យបញ្ចូលក្នុងកម្មវិធីរុករកតាមអ៊ីនធឺណិត + Ok យល់ព្រម Cancel - បញ្ឈប់ + បោះបង់ You have multiple databases open. @@ -894,73 +845,13 @@ Please select the correct database for saving credentials. អ្នកមានពហុមូលដ្ឋានទិន្នន័យបើក។ សូមជ្រើសរើសមូលដ្ឋានទិន្នន័យត្រឹមត្រូវសម្រាប់ការរក្សាទុកព័ត៌មានផ្ទៀងផ្ទាត់។ - - KeePassXC - Select Database - KeePassXC - ជ្រើសរើសមូលដ្ឋានទិន្នន័យ - - - - BrowserPasskeysConfirmationDialog - - Cancel - បោះបង់ - - - Update - ធ្វើបច្ចុប្បន្នភាព - - - Authenticate - ផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវ - - - Register new - ចុះឈ្មោះថ្មី - - - Register - ចុះឈ្មោះ - - - Timeout in <b>%n</b> seconds... - អស់ពេលនៅក្នុង <b>%n</b> វិនាទី... - - - Relying Party: %1 - - - - Username: %1 - Username: %1 - - - KeePassXC - Passkey credentials - - - - Add to existing entry - - - - Existing passkey found. -Do you want to register a new passkey for: - - - - Select the existing passkey and press Update to replace it. - - - - Authenticate passkey credentials for: - - - - Do you want to register a passkey for: - - BrowserService + + KeePassXC: Create a new group + KeePassXC៖ បង្កើតក្រុមថ្មីមួយ + A request for creating a new group "%1" has been received. Do you want to create this group? @@ -969,6 +860,10 @@ Do you want to create this group? តើអ្នកចង់បង្កើតក្រុមនេះឬទេ? + + KeePassXC: New key association request + KeePassXC៖ ការស្នើសុំការភ្ជាប់សោថ្មី + You have received an association request for the following database: %1 @@ -985,16 +880,28 @@ chrome-កុំព្យូទ័រ។ 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? ឃីបម្លែងកូដដែលបានចែករំលែកដែលមានឈ្មោះ "%1" មានរួចហើយ។ តើអ្នកចង់សរសេរជាន់លើវាឬទេ? + + KeePassXC: Update Entry + KeePassXC៖ ធ្វើបច្ចុប្បន្នភាពទិន្នន័យបញ្ចូល + Do you want to update the information in %1 - %2? តើ​អ្នក​ចង់​អាប់ដេត​ព័ត៌មាន​នៅក្នុង %1 - %2 ដែរ​ឬ​ទេ? + + KeePassXC: Delete entry + KeePassXC៖ លុបទិន្នន័យបញ្ចូល + A request for deleting entry "%1" has been received. Do you want to delete the entry? @@ -1004,57 +911,50 @@ Do you want to delete the entry? - %1 (Passkey) - %1 (Passkey) + Converting attributes to custom data… + ការបំប្លែងលក្ខណៈទៅជាទិន្នន័យផ្ទាល់ខ្លួន… - KeePassXC - Create a new group - + Abort + បោះបង់ - Disable - បិទដំណើរការ + KeePassXC: Converted KeePassHTTP attributes + KeePassXC៖ បានបំប្លែងលក្ខណៈរបស់ KeePassHTTP - KeePassXC - Overwrite existing key? - + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + បានបំប្លែងគុណលក្ខណៈដោយជោគជ័យពីទិន្នន័យ % 1 ។ +បានផ្លាស់ទីក្តាចុច % 2 ទៅជាទិន្នន័យផ្ទាល់ខ្លួន។ + + + Successfully moved %n keys to custom data. + បានផ្លាស់ទីគ្រាប់ចុច %n ទៅកាន់ទិន្នន័យផ្ទាល់ខ្លួនដោយជោគជ័យ។ - KeePassXC - Update Entry - + KeePassXC: No entry with KeePassHTTP attributes found! + KeePassXC៖ រកមិនឃើញទិន្នន័យបញ្ចូលមានលក្ខណៈ KeePassHTTP ទេ! - KeePassXC - Delete entry - + The active database does not contain an entry with KeePassHTTP attributes. + មូលដ្ឋានទិន្នន័យដែលសកម្មមិនមានការបញ្ចូលទិន្ន័យដែលមានលក្ខណៈ KeePassHTTP ទេ។ - KeePassXC - New key association request - + Don't show this warning again + កុំបង្ហាញការព្រមាននេះម្តងទៀត - Passkey - + KeePassXC: Legacy browser integration settings detected + KeePassXC៖ បានរកឃើញការកំណត់ការរួមបញ្ចូលកម្មវិធីរុករកតាមអ៊ីនធឺណិតចាស់ - KeePassXC - Passkey credentials - - - - Register a new passkey to this entry: - - - - KeePassXC - Update passkey - - - - Entry already has a passkey. -Do you want to overwrite the passkey in %1 - %2? - - - - Register - ចុះឈ្មោះ + 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? + ការកំណត់កម្មវិធីរុករក​តាមអ៊ីនធឺណិតរបស់ KeePassXC របស់អ្នកចាំបាច់ត្រូវផ្លាស់ទីទៅក្នុងការកំណត់មូលដ្ឋានទិន្នន័យនេះ។ +ការធ្វើបែបនេះ គឺមានភាពចាំបាច់ដើម្បីរក្សាទុកការតភ្ជាប់កម្មវិធីរុករក​តាមអ៊ីនធឺណិតបច្ចុប្បន្នរបស់អ្នក។ +តើអ្នកចង់ផ្ទេរការកំណត់ដែលមានស្រាប់របស់អ្នកឥឡូវនេះឬទេ? @@ -1075,6 +975,10 @@ Do you want to overwrite the passkey in %1 - %2? General ទូទៅ + + Browsers installed as snaps are currently not supported. + កម្មវិធីរុករកតាមអ៊ីនធឺណិតដែលបានដំឡើងជាខ្ទាស់ ថ្មីៗនេះមិនអាចប្រើប្រាស់បានទេ។ + Enable integration for these browsers: បើកការរួមបញ្ចូលសម្រាប់កម្មវិធីរុករកទាំងនេះ៖ @@ -1246,6 +1150,26 @@ Do you want to overwrite the passkey in %1 - %2? Custom extension ID លេខសម្គាល់កម្មវិធីបន្ថែមផ្ទាល់ខ្លួន + + Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 + ដោយសារមុខងារ Snap sandboxing នោះអ្នកត្រូវតែដំណើរការស្គ្រីបដើម្បីបើកការរួមបញ្ចូលកម្មវិធីរុករកតាមអ៊ីនធឺណិត។<br />អ្នកអាចទទួលបានស្គ្រីបនេះមកពី% 1 + + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 + KeePassXC-កម្មវិធីរុករកតាមអ៊ីនធឺណិតត្រូវការសម្រាប់ការរួមបញ្ចូលកម្មវិធីរុករកតាមអ៊ីនធឺណិតនេះដើម្បីធ្វើការ។ <br />ទាញយកវាសម្រាប់ %1 និង %2 និង %3. %4 + + + Please see special instructions for browser extension use below + សូមមើលការណែនាំពិសេសសម្រាប់ការប្រើប្រាស់កម្មវិធីបន្ថែម​របស់កម្មវិធីរុករកតាមអ៊ីនធឺណិតខាងក្រោម + + + <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. + <b>កំហុស៖</b> ទីតាំងប្រូកស៊ីផ្ទាល់មិនអាចរកឃើញទេ!<br/>ការបញ្ចូលកម្មវិធីរុករកនឹងមិនដំណើរការដោយគ្មានកម្មវិធីប្រូកស៊ីទេ។ + + + <b>Warning:</b> The following options can be dangerous! + <b>ការព្រមាន៖</b> ជម្រើសខាងក្រោមអាចមានគ្រោះថ្នាក់! + Executable Files ឯកសារដែលអនុវត្តន៍បាន @@ -1262,47 +1186,6 @@ Do you want to overwrite the passkey in %1 - %2? Select native messaging host folder location ជ្រើសរើសទីតាំងថតម៉ាស៊ីនផ្ញើសារដើម​ - - Allow keepassxc-proxy to list all entries with their title, URL and UUID in connected databases. - - - - Allow limited access to all entries in connected databases (ignores site access restrictions) - - - - <b>Warning:</b> Only adjust these settings if necessary. - <b>ការព្រមាន</b> លៃ​តម្រូវ​តែ​ការ​កំណត់​ទាំង​នេះ​បើ​ចាំបាច់។ - - - - The custom proxy location does not exist. - - - - <b>Error:</b> The custom proxy location does not exist. Correct this in the advanced settings tab. - - - - <b>Error:</b> The installed proxy executable is missing from the expected location: %1<br/>Please set a custom proxy location in the advanced settings or reinstall the application. - - - - Allows using insecure http://localhost with passkeys for testing purposes. - - - - Allow using localhost with passkeys - - - - KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. - - - - Browsers installed using Snap or Flatpak are not supported with exception to Firefox installed using Snap. - - CloneDialog @@ -1325,6 +1208,14 @@ Do you want to overwrite the passkey in %1 - %2? CsvImportWidget + + Import CSV fields + នាំចូលកន្លែងបញ្ចូល CSV + + + filename + ឈ្មោះឯកសារ + size, rows, columns ទំហំ, ជួរដេក, ជួរឈរ @@ -1433,42 +1324,50 @@ Do you want to overwrite the passkey in %1 - %2? Column %1 ជួរឈរ %1 + + Imported from CSV file + នាំចូលពីឯកសារ CSV + + + Original data: + ទិន្នន័យដើម៖ + + + Error(s) detected in CSV file! + រកឃើញបញ្ហានៅក្នុងឯកសារ CSV! + [%n more message(s) skipped] [មានសារបន្ថែមទៀតដែលត្រូវបានរំលង %n] - Failed to parse CSV file: %1 - + Error + បញ្ហា - Imported from CSV file: %1 - - - - No Title Selected - - - - No title column was selected, entries will be hard to tell apart. -Are you sure you want to import? - - - - Tags - ស្លាក + CSV import: writer has errors: +%1 + ការនាំចូល CSV៖ អ្នកនិពន្ធមានបញ្ហា៖ +% 1 CsvParserModel + + %1, %2, %3 + file info: bytes, rows, columns + %1 %2 %3 + + + %n byte(s) + %n បៃ + %n row(s) - CSV row count %n ជួរដេក %n column(s) - CSV column count %n ជួរឈរ @@ -1521,14 +1420,6 @@ Backup database located at %2 Recycle Bin ធុងសំរាម - - Database file read error. - - - - No file path was provided. - - DatabaseOpenDialog @@ -1551,10 +1442,30 @@ Backup database located at %2 Password field កន្លែង​បញ្ចូល​ពាក្យ​សម្ងាត់ + + Enter Additional Credentials (if any): + បញ្ចូលព័ត៌មានផ្ទៀងផ្ទាត់បន្ថែម (ប្រសិនបើមាន)៖ + + + Key File: + ឯកសារសោ៖ + + + Key file help + ជំនួយឯកសារសោ + Hardware key slot selection ការជ្រើសរើសរន្ធដោតឃីរបស់ហាតវែរ + + Hardware Key: + ឃីហាតវែរ៖ + + + Hardware key help + ជំនួយឃីហាតវែរ + Key file to unlock the database ឯកសារសោដើម្បីដោះសោមូលដ្ឋានទិន្នន័យ @@ -1567,13 +1478,21 @@ Backup database located at %2 Browse… រុករក… + + Refresh hardware tokens + រីហ្វ្រេសថូខឹនហាតវែរឡើងវិញ + + + Refresh + រីហ្រេ្វស + Unlock Database ដោះសោទិន្នន័យ Cancel - បញ្ឈប់ + បោះបង់ Unlock @@ -1626,6 +1545,10 @@ To prevent this error from appearing, you must go to "Database Settings / S Retry with empty password ព្យាយាមជាថ្មីដោយគ្មានពាក្យសម្ងាត់ + + Failed to authenticate with Touch ID + បានបរាជ័យក្នុងការផ្ទៀងផ្ទាត់ជាមួយ Touch ID + Failed to open key file: %1 បរាជ័យក្នុងការបើកឯកសារសោ៖ %1 @@ -1658,65 +1581,40 @@ To prevent this error from appearing, you must go to "Database Settings / S Cannot use database file as key file សោ + + You cannot use your database file as a key file. +If you do not have a key file, please leave the field empty. + សោ + + + Detecting hardware keys… + កំពុងរកឃើញឃីហាតវែរ… + + + No hardware keys detected + រកមិនឃើញឃីហាតវែរទេ + + + Select hardware key… + ជ្រើសរើសឃីហាតវែរ… + + + <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information…</p> + <p>បន្ថែមពីលើពាក្យសម្ងាត់ អ្នកអាចប្រើឯកសារសម្ងាត់ ដើម្បីបង្កើនសុវត្ថិភាពមូលដ្ឋានទិន្នន័យរបស់អ្នក។ ឯកសារនេះអាចត្រូវបានបង្កើតនៅក្នុងការកំណត់សុវត្ថិភាពនៃមូលដ្ឋានទិន្នន័យរបស់អ្នក។</p><p>នេះ <strong>មិនមែនជា</strong> ឯកសារមូលដ្ឋានទិន្នន័យ *.kdbx របស់អ្នកទេ!<br>ប្រសិនបើអ្នកមិនមានឯកសារគន្លឹះទេ សូមទុកវាលនេះឱ្យនៅទទេ។</p><p>ចុចសម្រាប់ព័ត៌មានបន្ថែម…</p> + + + <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +<p>Click for more information…</p> + <p>អ្នកអាចប្រើប្រាស់ឃីហាតវែរដូចជា <strong>YubiKey</strong> ឬ <strong>OnlyKey</strong> ជាមួយនឹងរន្ធដែលបានកំណត់រចនាសម្ព័ន្ធសម្រាប់ HMAC-SHA1។</p> +<p>ចុចដើម្បីទទួលបានព័ត៌មានបន្ថែម…</p> + authenticate to access the database ផ្ទៀងផ្ទាត់ដើម្បីចូលប្រើប្រាស់មូលដ្ឋានទិន្នន័យ - Failed to authenticate with Quick Unlock: %1 - - - - Select Key File: - - - - <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!</p> - - - - Use hardware key [Serial: %1] - - - - Use hardware key - - - - Your database file is NOT a key file! -If you don't have a key file or don't know what that is, you don't have to select one. - - - - KeePassXC database file selected - - - - The file you selected looks like a database file. -A database file is NOT a key file! - -Are you sure you want to continue with this file?. - - - - No hardware keys found. - - - - Refresh Hardware Keys - - - - Click to add a key file. - - - - <a href="#" style="text-decoration: underline">I have a key file</a> - - - - Hardware keys found, but no slots are configured. - + Failed to authenticate with Windows Hello: %1 + បានបរាជ័យក្នុងការផ្ទៀងផ្ទាត់ជាមួយ Windows Hello៖ %1 @@ -1728,6 +1626,10 @@ Are you sure you want to continue with this file?. DatabaseSettingsDialog + + Advanced Settings + ការកំណត់កម្រិតខ្ពស់ + General ទូទៅ @@ -1752,22 +1654,6 @@ Are you sure you want to continue with this file?. Maintenance តំហែទាំ - - KeeShare - KeeShare - - - Secret Service Integration - ការដាក់បញ្ចូលសេវាពាក្យសម្ងាត់ - - - Remote Sync - - - - Database Settings: %1 - - DatabaseSettingsWidgetBrowser @@ -1775,6 +1661,18 @@ Are you sure you want to continue with this file?. KeePassXC-Browser settings KeePassXC-ការកំណត់កម្មវិធីរុករកតាមអ៊ីនធឺណិត + + Convert KeePassHTTP data + បំប្លែងទិន្នន័យ KeePassHTTP + + + Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data + បំប្លែងលក្ខណៈ KeePassHTTP ចាស់ទៅជាទិន្នន័យផ្ទាល់ខ្លួនដែលត្រូវគ្នាជាមួយកម្មវិធីរុកតាមអ៊ីនធឺណិត KeePassXC + + + Refresh database root group ID + រីហ្រេ្វសលេខសម្គាល់ក្រុមឫសមូលដ្ឋានទិន្នន័យ + Disconnect all browsers ផ្តាច់កម្មវិធីរុករកទាំងអស់ @@ -1783,10 +1681,6 @@ Are you sure you want to continue with this file?. Forget all site-specific settings on entries បំភ្លេចការកំណត់គេហទំព័រជាក់លាក់ទាំងអស់នៅលើទិន្នន័យបញ្ចូល - - Refresh database root group ID - រីហ្រេ្វសលេខសម្គាល់ក្រុមឫសមូលដ្ឋានទិន្នន័យ - Stored keys គន្លឹះដែលបានរក្សាទុក @@ -1835,10 +1729,18 @@ This may prevent connection to the browser plugin. តើអ្នកពិតជាចង់ផ្តាច់កម្មវិធីរុករកតាមអ៊ឺនធឺណិតទាំងអស់មែនទេ? នេះអាចបង្ការការតភ្ជាប់ទៅកម្មវិធីជំនួយកម្មវិធីរុករកតាមអ៊ឺនធឺណិតបាន។ + + KeePassXC: No keys found + KeePassXC៖ រកមិនឃើញសោ + No shared encryption keys found in KeePassXC settings. រកមិនឃើញសោអ៊ិនគ្រីបដែលបានចែករំលែកនៅក្នុងការកំណត់ KeePassXC ទេ។ + + KeePassXC: Removed keys from database + KeePassXC៖ បានដកសោចេញពីមូលដ្ឋានទិន្នន័យ + Successfully removed %n encryption key(s) from KeePassXC settings. បានលុប សោ ការអ៊ិនគ្រីប %n ចេញពីការកំណត់ KeePassXC ដោយជោគជ័យ។ @@ -1857,14 +1759,32 @@ Permissions to access entries will be revoked. Abort បោះបង់ + + KeePassXC: Removed permissions + KeePassXC៖ ដកចេញការអនុញ្ញាត + Successfully removed permissions from %n entry(s). បានលុបការអនុញ្ញាត % 1 ចេញពីទិន្នន័យ % 2 ដោយជោគជ័យ។ + + 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 convert all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + តើ​អ្នក​ពិត​ជា​ចង់​បម្លែង​ទិន្នន័យបញ្ចូល​កម្មវិធី​រុករក​ចាស់​ៗទាំង​អស់​ទៅ​ជា​ស្តង់ដារ​ថ្មីចុង​ក្រោយ​បំផុត​ឬ? +នេះគឺចាំបាច់ដើម្បីរក្សាភាពឆបគ្នាជាមួយកម្មវិធីជំនួយកម្មវិធីរុករក។ + Refresh database ID រីហ្រេ្វសលេខសម្គាល់មូលដ្ឋានទិន្នន័យ @@ -1875,26 +1795,6 @@ This is only necessary if your database is a copy of another and the browser ext តើ​អ្នក​ពិត​ជា​ចង់​ផ្រីហ្វ្រេស​លេខ​សម្គាល់​មូលដ្ឋាន​ទិន្នន័យ​ឡើងវិញមែនទេ? ការធ្វើបែបនេះ មានភាពចាំបាច់តែនៅក្នុងករណីដែលមូលដ្ឋានទិន្នន័យរបស់អ្នក គឺជាច្បាប់ចម្លងផ្សេងទៀត ហើយកម្មវិធីបន្ថែម​របស់កម្មវិធីរុករកតាមអ៊ីនធឺណិតមិនអាចតភ្ជាប់ទៅបានទេ។ - - Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data - បំប្លែងលក្ខណៈ KeePassHTTP ចាស់ទៅជាទិន្នន័យផ្ទាល់ខ្លួនដែលត្រូវគ្នាជាមួយកម្មវិធីរុកតាមអ៊ីនធឺណិត KeePassXC - - - No keys found - - - - Removed keys from database - - - - Removed permissions - - - - No entry with permissions found! - - DatabaseSettingsWidgetDatabaseKey @@ -1934,18 +1834,6 @@ Are you sure you want to continue without a password? Failed to change database credentials បានបរាជ័យក្នុងការផ្លាស់ប្តូរព័ត៌មាន​បញ្ជាក់​អត្តសញ្ញាណ​នៅក្នុងឃ្លំាងទិន្នន័យ - - Weak password - ពាក្យសម្ងាត់ខ្សោយ - - - This is a weak password! For better protection of your secrets, you should choose a stronger password. - - - - The provided password does not meet the minimum quality requirement. - - DatabaseSettingsWidgetEncryption @@ -1953,6 +1841,14 @@ Are you sure you want to continue without a password? Decryption Time: រយៈពេលនៃការដោះការបំប្លែងកូដ៖ + + Change existing decryption time + ប្តូរពេលវេលានៃការដោះការបំប្លែងកូដដែលមានស្រាប់ + + + Change + ផ្លាស់ប្តូរ + Decryption time in seconds រយៈពេលនៃការដោះការបំប្លែងកូដគិតជាវិនាទី @@ -2033,6 +1929,11 @@ Are you sure you want to continue without a password? KDBX 3 KDBX 3 + + unchanged + Database decryption time is unchanged + មិនផ្លាស់ប្តូរ + Number of rounds too high Key transformation rounds @@ -2052,7 +1953,7 @@ If you keep this number, your database may take hours, days, or even longer to o Cancel - បញ្ឈប់ + បោះបង់ Number of rounds too low @@ -2085,18 +1986,6 @@ If you keep this number, your database will not be protected from brute force at Threads for parallel execution (KDF settings) ស្រេត - - Encryption Settings: - - - - Basic - - - - Advanced - កម្រិតខ្ពស់ - DatabaseSettingsWidgetFdoSecrets @@ -2227,70 +2116,6 @@ removed from the database. ទិន្នន័យបញ្ចូលដែលបានលុបចេញពីធុងសំរាមគឺ ត្រូវបានដកចេញពីមូលដ្ឋានទិន្នន័យនេះ។ - - Autosave delay since last change - - - - Autosave delay - - - - Autosave delay since last change in minutes - - - - min - នាទី - - - Autosave delay since last change checkbox - - - - Public Database Metadata - - - - Warning: the following settings are not encrypted. - - - - Display name: - - - - Publically visible display name used on the unlock dialog - - - - Database public display name - ឈ្មោះបង្ហាញសាធារណៈមូលដ្ឋានទិន្នន័យ - - - Display color: - ពណ៌បង្ហាញ៖ - - - Publically visible color used on the unlock dialog - - - - Database public display color chooser - - - - Clear - ជម្រះ - - - Display icon: - - - - Select Database Icon - - DatabaseSettingsWidgetKeeShare @@ -2386,129 +2211,6 @@ removed from the database. កន្លែងបញ្ចូលការពណ៌នាមូលដ្ឋានទិន្នន័យ - - DatabaseSettingsWidgetRemote - - Sync Commands - - - - Remove - ដកចេញ - - - Command Settings - - - - Name - ឈ្មោះ - - - Save - រក្សាទុក - - - Download - - - - Command: - - - - Download command field - - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - - - - Input: - - - - Download input field - - - - Upload - - - - Upload command field - - - - e.g.: "sftp user@hostname" or "scp {TEMP_DATABASE} user@hostname:DatabaseOnRemote.kdbx" - - - - Upload input field - - - - Name cannot be empty. - - - - Test - - - - Download command cannot be empty. - - - - Download failed with error: %1 - - - - Download finished, but file %1 could not be found. - - - - Download successful. - - - - Save Remote Settings - - - - You have unsaved changes. Do you want to save them? - - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - - - - e.g.: -put {TEMP_DATABASE} DatabaseOnRemote.kdbx -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - - - - Timeout: - - - - seconds - វិនាទី - - DatabaseTabWidget @@ -2541,10 +2243,26 @@ This is definitely a bug, please report it to the developers. CSV file ឯកសារ CSV + + Select CSV file + ជ្រើសរើសឯកសារ CSV + Merge database ដាក់បញ្ចូលមូលដ្ឋានទិន្នន័យ + + KeePass 1 database + មូលដ្ឋានទិន្នន័យ KeePass 1 + + + Open KeePass 1 database + បើកឃ្លំាងទិន្នន័យ KeePass 1 + + + Open OPVault + បើក OPVault + Export database to CSV file នាំចេញឃ្លំាងទិន្នន័យទៅឯកសារ CSV @@ -2557,6 +2275,28 @@ This is definitely a bug, please report it to the developers. Writing the HTML file failed. ការសរសេរឯកសារ HTML មិនបានសម្រេច។ + + Export Confirmation + ការបញ្ជាក់នៃការនាំចេញ + + + You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? + អ្នកហៀបនឹងនាំចេញមូលដ្ឋានទិន្នន័យរបស់អ្នកទៅជាឯកសារដែលមិនបានអ៊ិនគ្រីប។ ការធ្វើបែបនេះនឹងទុកឱ្យពាក្យសម្ងាត់ និងព័ត៌មានរសើបរបស់អ្នកងាយទទួលរងគ្រោះ! តើអ្នកពិតថាចង់បន្តទៀតឬទេ? + + + New Database + មូលដ្ឋាន​ទិន្នន័យ​ថ្មី + + + %1 [New Database] + Database tab name modifier + %1 [ឃ្លាំងទិន្នន័យថ្មី] + + + %1 [Locked] + Database tab name modifier + %1 [បានចាក់សោ] + Export database to XML file នាំចេញឃ្លំាងទិន្នន័យទៅជាឯកសារ XML @@ -2569,31 +2309,9 @@ This is definitely a bug, please report it to the developers. Writing the XML file failed ការសរសេរឯកសារ XML មិនបានសម្រេច - - Export Confirmation - ការបញ្ជាក់នៃការនាំចេញ - - - You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? - អ្នកហៀបនឹងនាំចេញមូលដ្ឋានទិន្នន័យរបស់អ្នកទៅជាឯកសារដែលមិនបានអ៊ិនគ្រីប។ ការធ្វើបែបនេះនឹងទុកឱ្យពាក្យសម្ងាត់ និងព័ត៌មានរសើបរបស់អ្នកងាយទទួលរងគ្រោះ! តើអ្នកពិតថាចង់បន្តទៀតឬទេ? - - - %1 [Locked] - Database tab name modifier - %1 [បានចាក់សោ] - - - %1 [Temporary] - Database tab name modifier - - DatabaseWidget - - Searches and Tags - ស្វែងរក និងថេកអោយ - Searching… ការស្វែងរក @@ -2642,10 +2360,6 @@ This is definitely a bug, please report it to the developers. Expired entries ទិន្នន័យបញ្ចូលបានផុតកំណត់ - - Entries expiring within %1 day(s) - ទិន្នន័យបញ្ចូលផុតកំណត់ក្នុងរយៈពេល %1 ថ្ងៃ - No current database. គ្មានមូលដ្ឋានទិន្នន័យបច្ចុប្បន្ន។ @@ -2670,18 +2384,6 @@ This is definitely a bug, please report it to the developers. No Results គ្មាន​លទ្ធផល - - Save - រក្សាទុក - - - Enter a unique name or overwrite an existing search from the list: - បញ្ចូលឈ្មោះតែមួយគត់ ឬសរសេរជាន់លើពីការស្វែងរកដែលមានស្រាប់ពីបញ្ជី៖ - - - Save Search - រក្សាទុកការស្វែងរក - Lock Database? ចាក់សោមូលដ្ឋានទិន្នន័យឬ? @@ -2710,6 +2412,26 @@ Save changes? 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? + ឯកសារមូលដ្ឋានទិន្នន័យបានផ្លាស់ប្តូររួចរាល់ និងអ្នកមានការផ្លាស់ប្តូរដែលមិនបានរក្សាទុក។ +តើអ្នកចង់ដាក់បញ្ចូលការផ្លាស់ប្តូររបស់អ្នកឬទេ? + + + Could not open the new database file while attempting to autoreload. +Error: %1 + មិន​អាច​បើក​ឯកសារ​មូលដ្ឋាន​ទិន្នន័យ​ថ្មី នៅពេលកំពុង​ព្យាយាម​ផ្ទុក​ឡើង​វិញ​ដោយ​ស្វ័យប្រវត្តិ។ +បញ្ហា៖% 1 + Disable safe saves? បិទដំណើរការនៃការរក្សាទុកដោយសុវត្ថិភាព? @@ -2752,94 +2474,25 @@ Disable safe saves and try again? Could not find database file: %1 មិនអាចស្វែងរកឯកសារឃ្លំាងទិន្នន័យបានទេ៖ % 1 - - New Database - មូលដ្ឋាន​ទិន្នន័យ​ថ្មី + + Entries expiring within %1 day(s) + ទិន្នន័យបញ្ចូលផុតកំណត់ក្នុងរយៈពេល %1 ថ្ងៃ - %1 [New Database] - Database tab name modifier - %1 [ឃ្លាំងទិន្នន័យថ្មី] + Searches and Tags + ស្វែងរក និងថេកអោយ - Remote Sync did not contain any download or upload commands. - + Enter a unique name or overwrite an existing search from the list: + បញ្ចូលឈ្មោះតែមួយគត់ ឬសរសេរជាន់លើពីការស្វែងរកដែលមានស្រាប់ពីបញ្ជី៖ - Remote sync '%1' completed successfully! - + Save + រក្សាទុក - Remote sync '%1' failed: %2 - - - - Error while saving database %1: %2 - - - - Downloading... - - - - Uploading... - - - - Syncing... - - - - Remove passkey from entry - - - - Do you want to remove the passkey from this entry? - - - - The database file "%1" was modified externally - - - - Do you want to load the changes? - - - - Reload database - - - - Reloading database… - - - - Reload canceled - - - - Reload successful - - - - Reload pending user action… - - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes<br>Ignore the changes on disk until save<br>Discard unsaved changes - - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes then save<br>Overwrite the changes on disk<br>Discard unsaved changes - - - - Database file overwritten. - - - - Database file on disk cannot be unlocked with current credentials.<br>Enter new credentials and/or present hardware key to continue. - + Save Search + រក្សាទុកការស្វែងរក @@ -2892,6 +2545,10 @@ Disable safe saves and try again? n/a គ្មាន + + (encrypted) + (បានអ៊ិនគ្រីប) + Select private key ជ្រើសរើសពាក្យសម្ងាត់ផ្ទាល់ខ្លួន @@ -2978,10 +2635,6 @@ Would you like to correct it? Hide លាក់ - - %n hour(s) - %n ម៉ោង - %n week(s) %n សប្តាហ៍ @@ -2994,9 +2647,9 @@ Would you like to correct it? %n year(s) %n ឆ្នាំ - - Failed to decrypt SSH key, ensure password is correct. - + + %n hour(s) + %n ម៉ោង @@ -3116,20 +2769,10 @@ Would you like to correct it? Add new window association បន្ថែមការភ្ជាប់វីនដូថ្មី - - + - Add item - + - Remove selected window association ដកចេញការភ្ជាប់វីនដូដែលបានជ្រើសរើស - - - - Remove item - - - Window title: ចំណងជើងវីនដូ៖ @@ -3154,9 +2797,23 @@ Would you like to correct it? Custom Auto-Type sequence for this window លំដាប់វាយបញ្ចូលស្វ័យប្រវត្តិជាផ្ទាល់ខ្លួន​សម្រាប់វីនដូ​នេះ + + + + Add item + + + + + - + Remove item + - + EditEntryWidgetBrowser + + These settings affect to the entry's behaviour with the browser extension. + ការកំណត់ទាំងនេះប៉ះពាល់ដល់ដំណើរការរបស់ការបញ្ចូលជាមួយកម្មវិធីបន្ថែម​របស់កម្មវិធីរុករកតាមអ៊ីនធឺណិតនេះ។ + General ទូទៅ @@ -3169,14 +2826,26 @@ Would you like to correct it? Skip Auto-Submit for this entry រំលងការបញ្ជូនដោយស្វ័យប្រវត្តិសម្រាប់ការបញ្ចូលនេះ + + Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. + ផ្ញើតែការកំណត់នេះទៅកម្មវិធីរុករកតាមអ៊ីនធឺណិតសម្រាប់ប្រអប់ការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវ HTTP Auth ប៉ុណ្ណោះ។ ប្រសិនបើបានបើក ទម្រង់ចូលធម្មតានឹងមិនបង្ហាញទិន្នន័យបញ្ចូលនេះឱ្យជ្រើសរើសទេ។ + Use this entry only with HTTP Basic Auth ប្រើប្រាស់ទិន្នន័យបញ្ចូលនេះតែជាមួយ HTTP Basic Auth ប៉ុណ្ណោះ + + Do not send this setting to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. + សូមកុំផ្ញើការកំណត់នេះទៅកាន់កម្មវិធីរុករកតាមអ៊ីនធឺណិតសម្រាប់ប្រអប់ការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវ HTTP Auth។ ប្រសិនបើបានបើកប្រអប់ការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវ HTTP Auth នឹងមិនបង្ហាញទិន្នន័យបញ្ចូលនេះសម្រាប់ការជ្រើសរើសទេ។ + Do not use this entry with HTTP Basic Auth កុំប្រើទិន្នន័យបញ្ចូលនេះជាមួយ HTTP Basic Auth + + Additional URL's + URL បន្ថែម + Add បន្ថែម @@ -3189,22 +2858,6 @@ Would you like to correct it? Edit កែ - - These settings affect the entry's behaviour with the browser extension. - - - - Additional URLs - - - - Only send this entry to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. - - - - Do not send this entry to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. - - EditEntryWidgetHistory @@ -3301,15 +2954,15 @@ Would you like to correct it? &Username: - &Username: + &Title: - &ចំណងជើង: + &Password: - &ពាក្យសម្ងាត់: + UR&L: @@ -3317,7 +2970,7 @@ Would you like to correct it? &Notes: - &ចំណាំ: + Toggle notes visibility @@ -3325,11 +2978,11 @@ Would you like to correct it? T&ags: - T&ags: + &Expires: - &Expires: + @@ -3370,6 +3023,19 @@ Would you like to correct it? Private key សោឯកជន + + External file + ឯកសារខាងក្រៅ + + + Browser for key file + រុករកឯកសារសោ + + + Browse… + Button for opening file dialog + រុករក… + Attachment ឯកសារ​ភ្ជាប់ @@ -3386,23 +3052,6 @@ Would you like to correct it? Remove from agent ដកពីភ្នាក់ងារចេញ - - External file - ឯកសារខាងក្រៅ - - - Browser for key file - រុករកឯកសារសោ - - - Browse… - Button for opening file dialog - រុករក… - - - Generate - បង្កើត - Select attachment file ជ្រើសរើសឯកសារភ្ជាប់ @@ -3427,10 +3076,6 @@ Would you like to correct it? seconds វិនាទី - - Clear agent - - EditGroupWidget @@ -3442,6 +3087,10 @@ Would you like to correct it? Icon រូបតំណាង + + Browser Integration + ការរួមបញ្ចូលកម្មវិធីរុករកតាមអ៊ីនធឺណិត + Properties លក្ខណៈ @@ -3458,10 +3107,6 @@ Would you like to correct it? Group has unsaved changes ក្រុមដែលបានផ្លាស់ប្តូររួចមិនទាន់បានរក្សាទុកនៅឡើយទេ - - Browser Integration - ការរួមបញ្ចូលកម្មវិធីរុករកតាមអ៊ីនធឺណិត - Enable បើក @@ -3521,14 +3166,6 @@ Would you like to correct it? Omit WWW subdomain from matching toggle for this and sub groups លុបដែនរងរបស់ WWW ពីការផ្គូផ្គងបិទ/បើកសម្រាប់ក្រុមនេះ និងក្រុមរងនេះ - - Restrict matching to given browser key: - - - - Restrict matching to given browser key toggle for this and sub groups - - EditGroupWidgetKeeShare @@ -3761,6 +3398,10 @@ Supported extensions are: %1. Unable to fetch favicon. មិន​អាចរកមើលរូបតំណាងបានទេ។ + + You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security + អ្នកអាចបើកសេវារូបគេហទំព័រ DuckDuckGo នៅក្រោម ឧបករណ៍ -> ការកំណត់ -> សន្តិសុខ + Existing icon selected. បានជ្រើសរើសរូបតំណាងដែលមានស្រាប់។ @@ -3793,10 +3434,6 @@ Supported extensions are: %1. The following icon(s) failed: រូបតំណាងខាងក្រោមមិនបានសម្រេចទេ៖ - - You can enable the DuckDuckGo website icon service under Application Settings -> Security - - EditWidgetProperties @@ -3873,24 +3510,6 @@ This may cause the affected plugins to malfunction. %1 - Clone %1 - ក្លូន - - Passkey - - - - Invalid conversion type: %1 - ប្រភេទនៃការ​បម្លែង​មិន​ត្រឹមត្រូវ៖ %1 - - - Invalid conversion syntax: %1 - វាក្យសម្ព័ន្ធនៃការបំប្លែងមិនត្រឹមត្រូវ៖ %1 - - - Invalid regular expression syntax %1 -%2 - វាក្យសម្ព័ន្ធកន្សោមពាក្យធម្មតាមិនត្រឹមត្រូវ %1 -%2 - EntryAttachments @@ -3899,21 +3518,6 @@ This may cause the affected plugins to malfunction. មិនអាចបើកឯកសារ "% 1" បានទេ - - EntryAttachmentsDialog - - Form - ទម្រង់ - - - File name - - - - File contents... - - - EntryAttachmentsModel @@ -3951,6 +3555,14 @@ This may cause the affected plugins to malfunction. Remove ដកចេញ + + Rename selected attachment + ប្តូរឈ្មោះឯកសារភ្ជាប់ដែលបានជ្រើសរើស + + + Rename + ប្តូរឈ្មោះ + Open selected attachment បើកឯកសារភ្ជាប់ដែលបានជ្រើសរើស @@ -4022,6 +3634,12 @@ This may cause the affected plugins to malfunction. Confirm Overwrite Attachment បញ្ជាក់ការសរសេរជាន់លើឯកសារភ្ជាប់ + + Attachment "%1" already exists. +Would you like to overwrite the existing attachment? + ឯកសារភ្ជាប់ "% 1" មានស្រាប់ហើយ។ +តើអ្នកចង់សរសេរជាន់លើឯកសារភ្ជាប់ដែលមានស្រាប់ឬទេ? + Confirm Attachment បញ្ជាក់ឯកសារភ្ជាប់ @@ -4055,24 +3673,6 @@ Do you want to save the changes to your database? Error: %1 រក្សាឯកសារភ្ជាប់ដែលបានធ្វើបច្ចុប្បន្នភាពទុក.កំហុស %1 - - Attachment "%1" already exists. -Would you like to overwrite the existing attachment? - ឯកសារភ្ជាប់ "% 1" មានស្រាប់ហើយ។ -តើអ្នកចង់សរសេរជាន់លើឯកសារភ្ជាប់ដែលមានស្រាប់ឬទេ? - - - New - - - - Preview - មើលជាមុន - - - Failed to preview an attachment: Attachment not found - - EntryAttributesModel @@ -4267,14 +3867,6 @@ Would you like to overwrite the existing attachment? Has TOTP មាន TOTP - - Background Color - - - - Group Path - - EntryPreviewWidget @@ -4295,8 +3887,8 @@ Would you like to overwrite the existing attachment? ពាក្យសម្ងាត់ - URL - URL + Notes + ចំណាំ Expiration @@ -4315,8 +3907,8 @@ Would you like to overwrite the existing attachment? ឈ្មោះអ្នកប្រើ - Notes - ចំណាំ + URL + URL Advanced @@ -4366,10 +3958,6 @@ Would you like to overwrite the existing attachment? Never មិនធ្លាប់ - - Double click to copy value - ចុចពីរដងដើម្បីចម្លងតម្លៃ - Enabled បានបើក @@ -4379,8 +3967,8 @@ Would you like to overwrite the existing attachment? បានបិទដំណើរការ - Double click to copy to clipboard - + Double click to copy value + ចុចពីរដងដើម្បីចម្លងតម្លៃ @@ -4389,10 +3977,6 @@ Would you like to overwrite the existing attachment? Invalid URL URL មិនត្រឹមត្រូវ - - Duplicate URL - - EntryView @@ -4408,10 +3992,6 @@ Would you like to overwrite the existing attachment? Reset to defaults ការកំណត់ទៅលំនាំដើមវិញ - - + %1 entry(s)... - - ExportDialog @@ -4588,7 +4168,7 @@ This will leave your passwords and sensitive information vulnerable! Cancel - បញ្ឈប់ + បោះបង់ Having trouble downloading icons? @@ -4633,193 +4213,6 @@ You can enable the DuckDuckGo website icon service in the security section of th កំពុងទាញយក favicons (%1/%2)… - - ImportWizard - - Import Wizard - - - - - ImportWizardPageReview - - WizardPage - ទំព័រអ្នកជំនួយ - - - Entry count: %1 - - - - Group - ក្រុម - - - Title - ចំណងជើង - - - Username - ឈ្មោះអ្នកប្រើ - - - Password - ពាក្យសម្ងាត់ - - - Url - - - - Could not load key file. - - - - Could not open remote database. Password or key file may be incorrect. - - - - - ImportWizardPageSelect - - Form - ទម្រង់ - - - Import File Selection - - - - Password: - ពាក្យសម្ងាត់៖ - - - Key File: - ឯកសារសោ៖ - - - Browse… - រុករក… - - - Import Into: - - - - New Database - មូលដ្ឋាន​ទិន្នន័យ​ថ្មី - - - No unlocked databases available - - - - Existing Database: - - - - Import File: - - - - Comma Separated Values (.csv) - - - - 1Password Export (.1pux) - - - - 1Password Vault (.opvault) - - - - Bitwarden (.json) - - - - KeePass 1 Database (.kdb) - - - - Open OPVault - បើក OPVault - - - Select import file - - - - All files - ឯកសារ​ទាំងអស់ - - - Key files - ឯកសារសោ - - - Select key file - ជ្រើសរើសឯកសារសោ - - - Comma Separated Values - - - - 1Password Export - - - - Bitwarden JSON Export - - - - 1Password Vault - - - - KeePass1 Database - - - - Proton Pass (.json) - - - - Proton Pass JSON Export - - - - Temporary Database - - - - Command: - - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - - - - Input: - - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last commend `exit` has to be sent - - - - - Remote Database (.kdbx) - - - KMessageWidget @@ -5253,6 +4646,17 @@ Line %2, column %3 បានបរាជ័យក្នុងការបើកសោឯកជន + + KeePass1OpenWidget + + Import KeePass1 Database + នាំចូលមូលដ្ឋានទិន្នន័យ KeePass1 + + + Unable to open the database. + មិនអាចបើកទិន្នន័យបាន + + KeePass1Reader @@ -5469,7 +4873,7 @@ If this reoccurs, then your database file may be corrupt. Cancel - បញ្ឈប់ + បោះបង់ Key Component set, click to change or remove @@ -5608,6 +5012,10 @@ Are you sure you want to continue with this file? &Recent Databases &ឃ្លំាងទិន្នន័យថ្មីៗ + + &Import + &នាំចូល + &Export &នំាចេញ @@ -5628,10 +5036,6 @@ Are you sure you want to continue with this file? TOTP TOTP - - Tags - ស្លាក - &Groups &កែក្រុមនានា @@ -5676,18 +5080,34 @@ Are you sure you want to continue with this file? &New Database… &ឃ្លំាងទិន្នន័យថ្មី… + + Create a new database + បង្កើតឃ្លាំងទិន្នន័យថ្មី + &Merge From Database… &បញ្ចូល​ពី​មូលដ្ឋាន​ទិន្នន័យ… + + Merge from another KDBX database + ដាក់បញ្ចូលគ្នាពីមូលដ្ឋានទិន្នន័យ KDBX ផ្សេងទៀត + &New Entry… &ការបញ្ចូលថ្មី… + + Add a new entry + បន្ថែមការបញ្ចូលថ្មីមួយ + &Edit Entry… &កែការបញ្ចូល… + + View or edit entry + មើល ឬកែទិន្នន័យបញ្ចូល + &Delete Entry… &លុបការបញ្ចូល… @@ -5696,6 +5116,10 @@ Are you sure you want to continue with this file? &New Group… &ក្រុមថ្មី… + + Add a new group + បន្ថែមក្រុមថ្មី + &Edit Group… &កែក្រុម… @@ -5728,10 +5152,18 @@ Are you sure you want to continue with this file? Database &Reports… មូលដ្ឋានទិន្នន័យ និងរបាយការណ៍… + + Statistics, health check, etc. + ស្ថិតិ ការត្រួតពិនិត្យ​សុខភាព ជាដើម។ល។ + &Database Settings… &ការកំណត់ឃ្លាំងទិន្នន័យ… + + Database settings + ការកំណត់ឃ្លាំងទិន្នន័យ + &Clone Entry… &ការបញ្ចូលក្លូន… @@ -5740,18 +5172,34 @@ Are you sure you want to continue with this file? Move u&p ផ្លាស់ទី​ឡើង​លើ + + Move entry one step up + ផ្លាស់ទីទិន្នន័យបញ្ចូលមួយជំហានឡើងលើ + Move do&wn ផ្លាស់ទីទៅក្រោម + + Move entry one step down + ផ្លាស់ទីទិន្នន័យបញ្ចូលមួយជំហានចុះក្រោម + Copy &Username ចម្លង &ឈ្មោះអ្នកប្រើ + + Copy username to clipboard + ចម្លងឈ្មោះអ្នកប្រើទៅឃ្លីបបត + Copy &Password ចម្លង &ពាក្យសម្ងាត់ + + Copy password to clipboard + ចម្លងពាក្យសម្ងាត់ទៅឃ្លីបបត + &Settings &ការកំណត់ @@ -5785,13 +5233,21 @@ Are you sure you want to continue with this file? &ចំណងជើង - Copy &URL - ចម្លង &URL + Copy title to clipboard + ចម្លងចំណងជើងទៅឃ្លីបបត + + + Copy URL to clipboard + ចម្លង URL ទៅឃ្លីបបត &Notes &កំណត់ចំណាំ + + Copy notes to clipboard + ចម្លងកំណត់ចំណាំទៅឃ្លីបបត + &CSV File… ឯកសារ &CSV… @@ -5804,14 +5260,26 @@ Are you sure you want to continue with this file? KeePass 1 Database… មូលដ្ឋានទិន្នន័យ KeePass 1… + + Import a KeePass 1 database + នាំចូលមូលដ្ឋានទិន្នន័យ KeePass 1 + 1Password Vault… 1តំបន់សុវត្ថិភាពពាក្យសម្ងាត់… + + Import a 1Password Vault + នាំចូលតំបន់សុវត្ថិភាព 1Password + CSV File… ឯកសារ CSV… + + Import a CSV file + នាំចូលឯកសារ CSV មួយ + Show TOTP បង្ហាញ TOTP @@ -5828,10 +5296,6 @@ Are you sure you want to continue with this file? Copy &TOTP ចម្លង &TOTP - - Copy Password and TOTP - ចម្លងពាក្យសម្ងាត់ និង TOTP - E&mpty recycle bin ធុងសំរាមទទេ @@ -5856,6 +5320,10 @@ Are you sure you want to continue with this file? &Online Help ជំនួយតាម&អ៊ីនធឺណិត + + Go to online documentation + ចូលទៅកាន់ឯកសារអនឡាញ + &User Guide &មគ្គុទេសន៍អ្នកប្រើ @@ -5900,10 +5368,6 @@ Are you sure you want to continue with this file? Classic (Platform-native) ក្លាស៊ិក (ប្រព័ន្ធដើម) - - Show Menubar - - Show Toolbar បង្ហាញរបាឧបករណ៍ @@ -5928,10 +5392,6 @@ Are you sure you want to continue with this file? Clone Group... ក្រុមក្លូន... - - &XML File… - ឯកសារ &XML… - Clear history ជម្រះប្រវត្តិ @@ -5959,8 +5419,10 @@ Expect some bugs and minor issues, this version is meant for testing purposes. - No Tags - គ្មានស្លាក + 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 នេះដែលអាចប្រើប្រាស់បាននៅលើទំព័រទាញយករបស់យើង។ Restore Entry(s) @@ -5990,10 +5452,6 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Quit KeePassXC ចាកចេញពី KeePassXC - - %1 Entry(s) - %1 ទិន្នន័យបញ្ចូល - Please present or touch your YubiKey to continue… សូមបង្ហាញ ឬចុច YubiKey របស់អ្នកដើម្បីបន្ត… @@ -6006,314 +5464,38 @@ Expect some bugs and minor issues, this version is meant for testing purposes.You must restart the application to apply this setting. Would you like to restart now? អ្នកត្រូវតែចាប់ផ្តើមកម្មវិធីឡើងវិញ ដើម្បីដាក់ប្រើការកំណត់នេះ។ តើអ្នកចង់ចាប់ផ្តើមឡើងវិញឥឡូវនេះឬទេ? + + Tags + ស្លាក + + + No Tags + គ្មានស្លាក + + + %1 Entry(s) + %1 ទិន្នន័យបញ្ចូល + + + Copy Password and TOTP + ចម្លងពាក្យសម្ងាត់ និង TOTP + + + &XML File… + ឯកសារ &XML… + + + XML File… + ឯកសារ XML… + + + Copy &URL + ចម្លង &URL + Allow Screen Capture អនុញ្ញាតឱ្យថតអេក្រង់ - - 1Password 1PUX... - - - - Import a 1Password 1PUX file - - - - Import… - - - - Passkeys… - - - - Import Passkey - - - - Remote S&ync… - - - - Quit Application - - - - Open About Dialog - - - - Open Database - - - - Create Database - - - - Merge From Database - - - - Create Entry - - - - Edit Entry - កែទិន្នន័យបញ្ចូល - - - Delete Entry - - - - Create Group - - - - Edit Group - កែក្រុម - - - Delete Group - - - - Download All Favicons - - - - Sort Groups A-Z - - - - Sort Groups Z-A - - - - Save Database As - - - - Show Database Security - - - - Show Database Reports - - - - Show Database Settings - - - - Show Passkeys - - - - Clone Entry - - - - Move Entry Up - - - - Move Entry Down - - - - Copy Username - ចម្លងឈ្មោះអ្នកប្រើ - - - Copy Password - ចម្លងពាក្យសម្ងាត់ - - - Show Application Settings - - - - Show Password Generator - - - - Remove Passkey From Entry - - - - Perform Auto-Type: {USERNAME} - - - - Perform Auto-Type: {USERNAME}{ENTER} - - - - Perform Auto-Type: {PASSWORD} - - - - Perform Auto-Type: {PASSWORD}{ENTER} - - - - Perform Auto-Type: {TOTP} - - - - Copy Title - - - - Copy URL - - - - Copy Notes - - - - Export to CSV - - - - Export to HTML - - - - Import KeePass1 Database - នាំចូលមូលដ្ឋានទិន្នន័យ KeePass1 - - - Import 1Password Vault - - - - Import CSV File - - - - Show TOTP QR Code - - - - Set up TOTP - - - - Empty Recycle Bin - - - - Open Donation Website - - - - Open Bug Report - - - - Open Online Documentation - - - - Open Keyboard Shortcuts Guide - - - - Save Database Backup - - - - SSH Agent: Add Key - - - - SSH Agent: Remove Key - - - - Toggle Compact Mode - - - - Set Theme: Automatic - - - - Set Theme: Light - - - - Set Theme: Dark - - - - Set Theme: Classic - - - - Toggle Show Menubar - - - - Toggle Show Toolbar - - - - Toggle Show Preview Panel - - - - Toggle Always on Top - - - - Toggle Hide Usernames - - - - Toggle Hide Passwords - - - - Export to XML - - - - Toggle Allow Screen Capture - - - - Show Group Panel - - - - Toggle Show Group Panel - - - - Setup Remote Sync… - - - - Password Generator - - - - E&xpire Entry… - - - - Clear SSH Agent - - - - Clear all identities in ssh-agent - - ManageDatabase @@ -6371,6 +5553,26 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Overwriting %1 [%2] កំពុងសរសេរជាន់លើ %1 [%2] + + older entry merged from database "%1" + ទិន្នន័យចាស់​ដែលបានបញ្ចូល​គ្នា​ពី​មូលដ្ឋាន​ទិន្នន័យ "%1" + + + Adding backup for older target %1 [%2] + កំពុងបន្ថែមការបម្រុងទុកសម្រាប់គោលដៅដែលចាស់ជាង % 1 [% 2] + + + Adding backup for older source %1 [%2] + កំពុងបន្ថែមការបម្រុងទុកសម្រាប់ប្រភពធនធានចាស់ % 1 [% 2] + + + Reapplying older target entry on top of newer source %1 [%2] + កំពុងដាក់ប្រើទិន្នន័យបញ្ចូលគោលដៅចាស់ឡើងវិញនៅពីលើប្រភពដែលថ្មីជាងគេ %1 [%2] + + + Reapplying older source entry on top of newer target %1 [%2] + កំពុងដាក់ប្រើទិន្នន័យបញ្ចូលប្រភពចាស់ឡើងវិញនៅពីលើគោលដៅដែលថ្មីជាងគេ %1 [%2] + Synchronizing from newer source %1 [%2] កំពុងធ្វើសមកាលកម្មពីប្រភពថ្មីជាង % 1 [% 2] @@ -6430,6 +5632,14 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. នៅទីនេះអ្នកអាចកែតម្រូវការកំណត់ការអ៊ិនគ្រីបមូលដ្ឋានទិន្នន័យ។ សូមកុំបារម្ភ អ្នកអាចកែប្រែរវាបាននៅពេលក្រោយក្នុងការកំណត់មូលដ្ឋានទិន្នន័យនេះ។ + + Advanced Settings + ការកំណត់កម្រិតខ្ពស់ + + + Simple Settings + ការកំណត់ធម្មតា + NewDatabaseWizardPageDatabaseKey @@ -6464,25 +5674,6 @@ Expect some bugs and minor issues, this version is meant for testing purposes.សូមបំពេញឈ្មោះដែលបង្ហាញនេះនិងការពណ៌នាជាជម្រើសសម្រាប់មូលដ្ឋានទិន្នន័យថ្មីរបស់អ្នក៖ - - NewEntryAttachmentsDialog - - Attachment name cannot be empty - - - - Attachment with the same name already exists - - - - Save attachment - - - - New entry attachment - - - NixUtils @@ -6529,6 +5720,15 @@ Expect some bugs and minor issues, this version is meant for testing purposes.បានរំពឹងថាមាន %1 បៃនៃអក្សរច្បាស់លាស់ ដែលបានរកឃើញ %2 + + OpVaultOpenWidget + + Read Database did not produce an instance +%1 + អានមូលដ្ឋានទិន្នន័យដែលមិនបង្កើតបានបង្កើតឧបករណ៍មួយ +%1 + + OpVaultReader @@ -6602,10 +5802,6 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Unknown cipher: %1 មិនស្គាល់លេខសម្ងាត់ៈ %1 - - AES-256/GCM is currently not supported - បច្ចុប្បន្ននេះ AES-256/GCM មិនប្រើប្រាស់បានទេ - Passphrase is required to decrypt this key តម្រូវឱ្យមានឃ្លាសម្ងាត់ដើម្បីឌិគ្រីបសោនេះ។ @@ -6671,179 +5867,8 @@ Expect some bugs and minor issues, this version is meant for testing purposes.EOFដែលមិនបានរំពឹងទុកនៅពេលសរសេរសោគន្លឹះ - (encrypted) - (បានអ៊ិនគ្រីប) - - - - OpenSSHKeyGenDialog - - SSH Key Generator - - - - Type - វាយអក្សរ - - - Bits - - - - Comment - មតិយោបល់ - - - - PasskeyExportDialog - - KeePassXC - Passkey Export - - - - Filenames will be generated with title and .passkey file extension. - - - - Export entries - - - - Export Selected - - - - Cancel - បោះបង់ - - - Export to folder - - - - Export the following passkey entries. - - - - - PasskeyExporter - - KeePassXC: Passkey Export - - - - File "%1.passkey" already exists. -Do you want to overwrite it? - - - - - Cannot open file - - - - Cannot open file "%1" for writing. - - - - Cannot write to file - - - - - PasskeyImportDialog - - KeePassXC - Passkey Import - - - - Username: %1 - Username: %1 - - - Group - ក្រុម - - - Database - - - - Import Passkey - - - - Import - នាំចូល - - - Cancel - បោះបង់ - - - Entry - ទិន្នន័យបញ្ចូល - - - Create new entry - - - - Relying Party: %1 - - - - Import the following passkey: - - - - Import the following passkey to this entry: - - - - Default passkeys group (Imported Passkeys) - - - - - PasskeyImporter - - Passkey file - - - - All files - ឯកសារ​ទាំងអស់ - - - Cannot open file - - - - Cannot open file "%1" for reading. - - - - Open passkey file - - - - Cannot import passkey - - - - Cannot import passkey file "%1". Data is missing. - - - - Cannot import passkey file "%1". -The following data is missing: -%2 - - - - Cannot import passkey file "%1". Private key is missing or malformed. - + AES-256/GCM is currently not supported + បច្ចុប្បន្ននេះ AES-256/GCM មិនប្រើប្រាស់បានទេ @@ -7048,6 +6073,10 @@ The following data is missing: Word Count: ចំនួនពាក្យ៖ + + Character Count: + ចំនួនតួអក្សរ៖ + Word Case: ពាក្យអក្សរតូច៖ @@ -7060,6 +6089,10 @@ The following data is missing: Add custom wordlist បន្ថែមបញ្ជីពាក្យផ្ទាល់ខ្លួន + + character + តួអក្សរ + Close បិទ @@ -7096,30 +6129,6 @@ The following data is missing: Entropy: %1 bit ការវាស់វែងពាក្យសម្ងាត់៖ %1 ប៊ីត - - Password Quality: %1 - គុណភាពពាក្យសម្ងាត់៖ % 1 - - - Poor - Password quality - ខ្សោយ - - - Weak - Password quality - ខ្សោយ - - - Good - Password quality - ល្អ - - - Excellent - Password quality - ល្អឥតខ្ចោះ - Confirm Delete Wordlist បញ្ជាក់ការលុបបញ្ជីពាក្យ @@ -7167,20 +6176,32 @@ Do you want to overwrite it? តួអក្សរពិសេស - passwordLength - + Password Quality: %1 + គុណភាពពាក្យសម្ងាត់៖ % 1 - Characters: %1 - + Poor + Password quality + ខ្សោយ - MIXED case - + Weak + Password quality + ខ្សោយ - Excluded characters: "0", "1", "l", "I", "O", "|", "﹒", "B", "8", "G", "6" - + Good + Password quality + ល្អ + + + Excellent + Password quality + ល្អឥតខ្ចោះ + + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + មិនរាប់បញ្ចូលតួអក្សរ៖ "0", "1", "l", "I", "O", "|", "﹒" @@ -7230,7 +6251,7 @@ Do you want to overwrite it? ល្អឥតខ្ចោះ - Toggle password visibility using Control + H. Open the password generator using Control + G. + Toggle password visibilty using Control + H. Open the password generator using Control + G. @@ -7249,21 +6270,6 @@ Do you want to overwrite it? ចុច &ថេបរវាងតួអក្សរ - - PreviewEntryAttachmentsDialog - - Preview entry attachment - - - - No preview available - - - - Image format not supported - - - QMessageBox @@ -7302,10 +6308,6 @@ Do you want to overwrite it? Continue បន្ត - - Continue with weak password - - QObject @@ -7699,10 +6701,6 @@ Do you want to overwrite it? Too many arguments provided. បានផ្តល់អំណះអំណាងច្រើនពេក។ - - Path of the database. - ផ្លូវមូលដ្ឋានទិន្នន័យ។ - Target decryption time in MS for the database. កំណត់ពេលវេលានៃការដោះការបំប្លែងកូដក្នុង MS សម្រាប់ឃ្លាំងផ្ទុកទិន្នន័យ។ @@ -7723,6 +6721,10 @@ Do you want to overwrite it? Create a new database. បង្កើតឃ្លាំងទិន្នន័យថ្មី។ + + Path of the database. + ផ្លូវមូលដ្ឋានទិន្នន័យ។ + Invalid decryption time %1. ពេលវេលានៃការដោះការបំប្លែងកូដមិនត្រឹមត្រូវ %1។ @@ -7767,158 +6769,6 @@ Do you want to overwrite it? Successfully created new database. បានបង្កើតឃ្លាំងទិន្នន័យថ្មីដោយជោគជ័យ។ - - Unset the password for the database. - មិនបានកំណត់ពាក្យសម្ងាត់សម្រាប់ទិន្នន័យ - - - Unset the key file for the database. - មិនបានកំណត់ឯកសារគន្លឹះសម្រាប់ទិន្នន័យ - - - Edit a database. - កែឃ្លំាងទិន្នន័យ។ - - - Cannot use %1 and %2 at the same time. - មិន​អាច​ប្រើប្រាស់ % 1 និង% 2 ក្នុង​ពេល​តែ​មួយ​បាន​ទេ។ - - - Could not change the database key. - មិន​អាច​កែប្រែសោ​មូលដ្ឋាន​ទិន្នន័យ​បានទេ។ - - - Database was not modified. - មិនបានកែប្រែឃ្លាំងទិន្នន័យទេ។ - - - Writing the database failed: %1 - ការសរសេរមូលដ្ឋានទិន្នន័យមិនបានសម្រេច៖ %1 - - - Successfully edited the database. - កែមូលដ្ឋានទិន្នន័យបានដោយជោគជ័យ។ - - - Cannot remove password: The database does not have a password. - មិន​អាច​ដក​ពាក្យ​សម្ងាត់​ចេញបានទេ៖ មូលដ្ឋាន​ទិន្នន័យ​មិន​មាន​ពាក្យ​សម្ងាត់​ទេ។ - - - Cannot remove file key: The database does not have a file key. - មិន​អាច​យក​សោឯកសារ​ចេញ៖ មូលដ្ឋាន​ទិន្នន័យ​មិន​មាន​សោឯកសារទេ។ - - - Loading the new key file failed: %1 - កំពុងផ្ទុកឯកសារសោថ្មីមិនបានសម្រេច៖ %1 - - - Found unexpected Key type %1 - បានរកឃើញប្រភេទសោដែលមានបញ្ហាដោយមិនរំពឹងទុក %1 - - - Cannot remove all the keys from a database. - មិនអាចដកសោទាំងអស់ចេញពីមូលដ្ឋានទិន្នន័យបានទេ។ - - - Show a database's information. - បង្ហាញព័តម៌ានទិន្នន័យ - - - UUID: - UUID៖ - - - Name: - ឈ្មោះ៖ - - - Description: - ការពិពណ៌នា៖ - - - Cipher: - Cipher៖ - - - KDF: - KDF៖ - - - Recycle bin is enabled. - ធុងសំរាមបានបើកហើយ។ - - - Recycle bin is not enabled. - ធុងសំរាមមិនបានមិនទេ។ - - - Location - ទីតាំង - - - Database created - មូលដ្ឋានទិន្នន័យដែលបានបង្កើត - - - Last saved - បានរក្សាទុកចុងក្រោយ - - - Unsaved changes - ការផ្តាស់ប្តូរដែលមិនបានរក្សាទុក - - - yes - បាទ/ចាស - - - no - ទេ - - - Number of groups - ចំនួនក្រុម - - - Number of entries - ចំនួននៃទិន្នន័យបញ្ចូល - - - Number of expired entries - ចំនួននៃទិន្នន័យបញ្ចូលបានផុតកំណត់ - - - Unique passwords - ពាក្យសម្ងាត់ពិសេស - - - Non-unique passwords - សម្ងាត់មិនមានលក្ខណៈពិសេស - - - Maximum password reuse - ការប្រើប្រាស់ពាក្យសម្ងាត់ឡើងវិញអតិបរមា - - - Number of short passwords - ចំនួនពាក្យសម្ងាត់ខ្លី - - - Number of weak passwords - ចំនួនពាក្យសម្ងាត់ខ្សោយ - - - Entries excluded from reports - បានដកចេញទិន្នន័យបញ្ចូលពីរបាយការណ៍ - - - Average password length - ប្រវែងពាក្យសម្ងាត់ជាមធ្យម - - - %1 characters - %1 តួអក្សរ - Word count for the diceware passphrase. ការរាប់ពាក្យសម្រាប់ឃ្លាសម្ងាត់របស់ឌីសវែរ។ @@ -7942,6 +6792,10 @@ Do you want to overwrite it? Invalid word count %1 ចំនួន​ពាក្យ​មិន​ត្រឹមត្រូវ %1 + + The word list is too small (< 1000 items) + បញ្ជីពាក្យតូចពេក (< 1000 ធាតុ) + Title for the entry. ចំណងជើងសម្រាប់ការបញ្ចូល។ @@ -7966,6 +6820,10 @@ Do you want to overwrite it? Enter new password for entry: បញ្ចូលពាក្យសម្ងាត់ថ្មីសម្រាប់ទិន្នន័យបញ្ចូល៖ + + Writing the database failed: %1 + ការសរសេរមូលដ្ឋានទិន្នន័យមិនបានសម្រេច៖ %1 + Successfully edited entry %1. បានកែសម្រួលទិន្នន័យបញ្ចូល %1​ ដោយជោគជ័យ។ @@ -8086,6 +6944,10 @@ Do you want to overwrite it? Exit interactive mode. ចេញពីម៉ូដអន្តរកម្ម។ + + Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. + ទ្រង់ទ្រាយដែលត្រូវប្រើប្រាស់នៅពេលកំពុងនាំចេញ។ ជម្រើសដែលអាចប្រើប្រាស់គឺ 'xml' ឬ 'csv'។ លំនាំដើមទៅកាន់ 'xml'។ + Exports the content of a database to standard output in the specified format. នាំចេញខ្លឹមសារនៃមូលដ្ឋានទិន្នន័យទៅជាលទ្ធផលស្តង់ដារក្នុងទម្រង់ដែលបានបញ្ជាក់នេះ។ @@ -8186,6 +7048,106 @@ Do you want to overwrite it? Successfully imported database. បាននាំចូលមូលដ្ឋានទិន្នន័យដោយជោគជ័យ។ + + Show a database's information. + បង្ហាញព័តម៌ានទិន្នន័យ + + + UUID: + UUID៖ + + + Name: + ឈ្មោះ៖ + + + Description: + ការពិពណ៌នា៖ + + + Cipher: + Cipher៖ + + + KDF: + KDF៖ + + + Recycle bin is enabled. + ធុងសំរាមបានបើកហើយ។ + + + Recycle bin is not enabled. + ធុងសំរាមមិនបានមិនទេ។ + + + Location + ទីតាំង + + + Database created + មូលដ្ឋានទិន្នន័យដែលបានបង្កើត + + + Last saved + បានរក្សាទុកចុងក្រោយ + + + Unsaved changes + ការផ្តាស់ប្តូរដែលមិនបានរក្សាទុក + + + yes + បាទ/ចាស + + + no + ទេ + + + Number of groups + ចំនួនក្រុម + + + Number of entries + ចំនួននៃទិន្នន័យបញ្ចូល + + + Number of expired entries + ចំនួននៃទិន្នន័យបញ្ចូលបានផុតកំណត់ + + + Unique passwords + ពាក្យសម្ងាត់ពិសេស + + + Non-unique passwords + សម្ងាត់មិនមានលក្ខណៈពិសេស + + + Maximum password reuse + ការប្រើប្រាស់ពាក្យសម្ងាត់ឡើងវិញអតិបរមា + + + Number of short passwords + ចំនួនពាក្យសម្ងាត់ខ្លី + + + Number of weak passwords + ចំនួនពាក្យសម្ងាត់ខ្សោយ + + + Entries excluded from reports + បានដកចេញទិន្នន័យបញ្ចូលពីរបាយការណ៍ + + + Average password length + ប្រវែងពាក្យសម្ងាត់ជាមធ្យម + + + %1 characters + %1 តួអក្សរ + Unknown command %1 មិនស្គាល់ពាក្យបញ្ជា %1 @@ -8358,10 +7320,6 @@ Available commands: Show the protected attributes in clear text. ការបង្ហាញពីគុណលក្ខណៈដែលត្រូវបានការពារជាអក្សរច្បាស់ៗ - - Show all the attributes of the entry. - ការបង្ហាញពីគុណលក្ខណៈទាំងអស់នៃទិន្នន័យចូល - Show the attachments of the entry. ការបង្ហាញឯកសារភ្ជាប់របស់ទិន្នន័យ @@ -8432,10 +7390,6 @@ Please consider generating a new key file. Invalid YubiKey serial %1 លេខស៊េរី YubiKey មិនត្រឹមត្រូវ %1 - - Please present or touch your YubiKey to continue. - សូមបង្ហាញ ឬចុច YubiKey របស់អ្នកដើម្បីបន្ត។ - Enter password to encrypt database (optional): បញ្ចូលពាក្យសម្ងាត់ដើម្បីអ៊ិនគ្រីបឃ្លំាងទិន្នន័យ (ជាជម្រើស)៖ @@ -8674,6 +7628,18 @@ Kernel: %3 %4 file empty ឯកសារទទេ + + malformed string + ជួរអក្សរដែលមានទម្រង់មិនត្រឹមត្រូវ + + + missing closing quote + កំពុងបាត់សម្រង់បិទ + + + %1: (row, col) %2,%3 + %1: (ជួរដេក, ជួរឈរ) %2,%3 + AES 256-bit AES 256 ប៊ីត @@ -8852,6 +7818,14 @@ Kernel: %3 %4 read password of the database from stdin អានពាក្យសម្ងាត់នៃមូលដ្ឋានទិន្នន័យពី stdin + + allow app screen recordering and screenshots + បើកមុខងារថតអេក្រង់ និងរូបថត​អេក្រង់សម្រាប់កម្មវិធី + + + Locked databases. + បានចាក់សោមូលដ្ឋានទិន្នន័យ។ + Database failed to lock. មូលដ្ឋានទិន្នន័យចាក់សោមិនបានសម្រេចទេ។ @@ -8860,10 +7834,6 @@ Kernel: %3 %4 Another instance of KeePassXC is already running. ឧទាហរណ៍មួយទៀតអំពី KeePassXC គឺកំពុងដំណើរការរួចទៅហើយ។ - - KeePassXC is not running. No open database to lock - KeePassXC មិនកំពុងដំណើរការទេ។ មិនមានមូលដ្ឋានទិន្នន័យដែលបានបើកដើម្បីចាក់សោទេ - Fatal error while testing the cryptographic functions. បញ្ហាធ្ងន់ធ្ងរកើតឡើងនៅពេលកំពុងតេស្តមុខងារ​គ្រីបតូសាស្ត្រ។ @@ -8907,299 +7877,70 @@ Kernel: %3 %4 KDF មិន​ត្រឹមត្រូវ - Access to all entries is denied - + Please present or touch your YubiKey to continue. + សូមបង្ហាញ ឬចុច YubiKey របស់អ្នកដើម្បីបន្ត។ - allow screenshots and app recording (Windows/macOS) - + Show all the attributes of the entry. + ការបង្ហាញពីគុណលក្ខណៈទាំងអស់នៃទិន្នន័យចូល + + + Edit a database. + កែឃ្លំាងទិន្នន័យ។ + + + Could not change the database key. + មិន​អាច​កែប្រែសោ​មូលដ្ឋាន​ទិន្នន័យ​បានទេ។ + + + Database was not modified. + មិនបានកែប្រែឃ្លាំងទិន្នន័យទេ។ + + + Successfully edited the database. + កែមូលដ្ឋានទិន្នន័យបានដោយជោគជ័យ។ + + + Loading the new key file failed: %1 + កំពុងផ្ទុកឯកសារសោថ្មីមិនបានសម្រេច៖ %1 + + + Unset the password for the database. + មិនបានកំណត់ពាក្យសម្ងាត់សម្រាប់ទិន្នន័យ + + + Unset the key file for the database. + មិនបានកំណត់ឯកសារគន្លឹះសម្រាប់ទិន្នន័យ + + + Cannot use %1 and %2 at the same time. + មិន​អាច​ប្រើប្រាស់ % 1 និង% 2 ក្នុង​ពេល​តែ​មួយ​បាន​ទេ។ + + + Cannot remove all the keys from a database. + មិនអាចដកសោទាំងអស់ចេញពីមូលដ្ឋានទិន្នន័យបានទេ។ + + + Cannot remove password: The database does not have a password. + មិន​អាច​ដក​ពាក្យ​សម្ងាត់​ចេញបានទេ៖ មូលដ្ឋាន​ទិន្នន័យ​មិន​មាន​ពាក្យ​សម្ងាត់​ទេ។ + + + Cannot remove file key: The database does not have a file key. + មិន​អាច​យក​សោឯកសារ​ចេញ៖ មូលដ្ឋាន​ទិន្នន័យ​មិន​មាន​សោឯកសារទេ។ + + + Found unexpected Key type %1 + បានរកឃើញប្រភេទសោដែលមានបញ្ហាដោយមិនរំពឹងទុក %1 Set the key file for the database. -This option is deprecated, use --set-key-file instead. - +This options is deprecated, use --set-key-file instead. + កំណត់ឯកសារសោសម្រាប់មូលដ្ឋានទិន្នន័យ។ +ជម្រើសនេះត្រូវបានបដិសេធ ប្រើ --កំណត-សោ-ឯកសារ ជំនួសវិញ។ - Databases have been locked. - - - - Attestation not supported - - - - Credential is excluded - - - - Passkeys request canceled - - - - Invalid user verification - - - - Empty public key - - - - Invalid URL provided - - - - Passkeys - - - - AES initialization failed - - - - AES encrypt failed - - - - Failed to store in Linux Keyring - - - - Polkit returned an error: %1 - - - - Could not locate key in keyring - - - - Could not read key in keyring - - - - AES decrypt failed - - - - No Polkit authentication agent was available - - - - Polkit authorization failed - - - - No Quick Unlock provider is available - - - - Failed to init KeePassXC crypto. - មិនបានសម្រេចក្នុងការបង្កើតការបំលែងកូដ KeePassXC។ - - - Failed to encrypt key data. - បានបរាជ័យក្នុងការអ៊ិនគ្រីបទិន្នន័យគន្លឹះ។ - - - Failed to get Windows Hello credential. - បានបរាជ័យក្នុងការទទួលបាន Windows Hello។ - - - Failed to decrypt key data. - មិនបានសម្រេចក្នុងការឌិគ្រីបទិន្នន័យសោ។ - - - Origin is empty or not allowed - - - - Effective domain is not a valid domain - - - - Origin and RP ID do not match - - - - No supported algorithms were provided - - - - Wait for timer to expire - - - - Challenge is shorter than required minimum length - - - - user.id does not match the required length - - - - Favorite - Tag for favorite entries - - - - File does not exist. - - - - Cannot open file: %1 - - - - Cannot parse file: %1 at position %2 - - - - Failed to decrypt json file: %1 - - - - Invalid encKeyValidation field - - - - Invalid cipher list within encKeyValidation field - - - - Wrong password - - - - Invalid encrypted data field - - - - Invalid cipher list within encrypted data field - - - - Cannot initialize cipher - - - - Cannot decrypt data - - - - Bitwarden Import - - - - Archived - Tag for archived entries - - - - Invalid 1PUX file format: Not a valid ZIP file. - - - - Invalid 1PUX file format: Missing export.data - - - - 1Password Import - - - - Enter Shortcut - - - - Action - - - - Shortcuts - - - - Unknown passkeys error - - - - Invalid KDF iterations, cannot decrypt json file - - - - Unsupported format, ensure your Bitwarden export is password-protected - - - - Only PBKDF and Argon2 are supported, cannot decrypt json file - - - - Reset Shortcuts - - - - Double click an action to change its shortcut - - - - Filter... - - - - Shortcut Conflict - - - - Shortcut %1 conflicts with '%2'. Overwrite shortcut? - - - - Cannot generate valid passphrases because the wordlist is too short - - - - Encrypted files are not supported. - - - - Proton Pass Import - - - - Delete plugin data? - លុបទិន្នន័យនៅក្នុងកម្មវិធីជំនួយ? - - - Delete plugin data from Entry(s)? - - - - Passkey - - - - Format to use when exporting. Available choices are 'xml', 'csv' or 'html'. Defaults to 'xml'. - - - - start minimized to the system tray - - - - malformed string, possible unescaped delimiter - - - - missing closing delimiter - - - - %1, row: %2, column: %3 - - - - Tags - ស្លាក + KeePassXC is not running. No open database to lock + KeePassXC មិនកំពុងដំណើរការទេ។ មិនមានមូលដ្ឋានទិន្នន័យដែលបានបើកដើម្បីចាក់សោទេ @@ -9236,39 +7977,20 @@ This option is deprecated, use --set-key-file instead. បញ្ហា zlib ខាងក្នុង៖ - - RemoteHandler - - Command `%1` did not finish in time. Process was killed. - - - - Failed to upload merged database. Command `%1` did not finish in time. Process was killed. - - - - Invalid download parameters provided. - - - - Command `%1` failed to download database. - - - - Invalid database pointer or upload parameters provided. - - - - Command `%1` exited with status code: %2 - - - - Failed to upload merged database. Command `%1` exited with status code: %2 - - - ReportsWidgetBrowserStatistics + + Exclude expired entries from the report + មិនរាប់បញ្ចូលទិន្នន័យបញ្ចូលដែលផុតកំណត់ពីរបាយការណ៍នេះ + + + Show only entries which have URL set + ការបង្ហាញតែទិន្នន័យដែល URL បានកំណត់ + + + Show only entries which have browser settings in custom data + ការបង្ហាញតែទិន្នន័យដែលមានការកំណត់កម្មវិធីរុករកតាមអ៊ីនធឺណិតនៅក្នុងទិន្នន័យផ្ទាល់ខ្លួន + Double-click entries to edit. ចុចពីរដងទៅលើទិន្នន័យបញ្ចូលដើម្បីកែសម្រួល។ @@ -9333,53 +8055,44 @@ This option is deprecated, use --set-key-file instead. Exclude from reports មិនរាប់បញ្ចូលពីរបាយការណ៍ - - Expire Entry(s)… - - - - Only show entries that have a URL - - - - Only show entries that have been explicitly allowed or denied - - - - Show expired entries - - - - (Expired) - - - - Delete plugin data from Entry(s)… - - ReportsWidgetHealthcheck - Show expired entries - + Exclude expired entries from the report + មិនរាប់បញ្ចូលទិន្នន័យបញ្ចូលដែលផុតកំណត់ពីរបាយការណ៍នេះ - (Expired) - + Also show entries that have been excluded from reports + បង្ហាញទិន្នន័យបញ្ចូលដែលបានដកចេញពីរបាយការណ៍ផងដែរ Hover over reason to show additional details. Double-click entries to edit. ដាក់ពីលើហេតុផលដើម្បីបង្ហាញព័ត៌មានលម្អិតបន្ថែម។ ចុចទ្វេដងលើទិន្នន័យបញ្ចូលដើម្បីកែ។ + + Bad + Password quality + មិនល្អ + Bad — password must be changed មិនល្អ - ត្រូវតែផ្លាស់ប្តូរពាក្យសម្ងាត់ + + Poor + Password quality + ខ្សោយ + Poor — password should be changed ខ្សោយ - គួរតែផ្លាស់ប្តូរពាក្យសម្ងាត់ + + Weak + Password quality + ខ្សោយ + Weak — consider changing the password ខ្សោយ — សូមពិចារណាផ្លាស់ប្តូរពាក្យសម្ងាត់នេះ @@ -9428,14 +8141,6 @@ This option is deprecated, use --set-key-file instead. Exclude from reports មិនរាប់បញ្ចូលពីរបាយការណ៍ - - Expire Entry(s)… - - - - Show entries that have been excluded from reports - - ReportsWidgetHibp @@ -9531,77 +8236,6 @@ This option is deprecated, use --set-key-file instead. Exclude from reports មិនរាប់បញ្ចូលពីរបាយការណ៍ - - Expire Entry(s)… - - - - - ReportsWidgetPasskeys - - Export - នំាចេញ - - - Import - នាំចូល - - - List of entry URLs - បញ្ជីនៃទិន្នន័យបញ្ចូល URLs - - - Title - ចំណងជើង - - - Path - ផ្លូវ - - - Username - ឈ្មោះអ្នកប្រើ - - - URLs - URLs - - - Edit Entry… - កែទិន្នន័យបញ្ចូល… - - - Delete Entry(s)… - លុបការបញ្ចូល… - - - Relying Party - - - - Show expired entries - - - - (Expired) - - - - Export Confirmation - ការបញ្ជាក់នៃការនាំចេញ - - - The passkey file will be vulnerable to theft and unauthorized use, if left unsecured. Are you sure you want to continue? - - - - Please wait, list of entries with passkeys is being updated… - - - - No entries with passkeys. - - ReportsWidgetStatistics @@ -9776,14 +8410,6 @@ This option is deprecated, use --set-key-file instead. No agent running, cannot list identities. មិនអាចចុះបញ្ជីអត្តសញ្ញាណបានដោយសារគ្មានភ្នាក់ងារដែលកំពុងដំណើរការ ។ - - Failed to remove all SSH identities from agent. - - - - All SSH identities removed from agent. - - SearchHelpWidget @@ -9850,10 +8476,6 @@ This option is deprecated, use --set-key-file instead. Search Help ស្វែងរកជំនួយ - - Save Search - រក្សាទុកការស្វែងរក - Search (%1)… Search placeholder text, %1 is the keyboard shortcut @@ -9867,6 +8489,10 @@ This option is deprecated, use --set-key-file instead. Limit search to selected group កំណត់ការស្វែងរកទៅកាន់ក្រុមដែលបានជ្រើសរើស + + Save Search + រក្សាទុកការស្វែងរក + SettingsClientModel @@ -9928,10 +8554,34 @@ This option is deprecated, use --set-key-file instead. Confirm when passwords are retrieved by clients បញ្ជាក់នៅពេលដែលពាក្យសម្ងាត់ត្រូវបានទាញយកដោយអតិថិជន + + <html><head/><body><p><span style=" + font-family:'-apple-system','BlinkMacSystemFont','Segoe UI','Helvetica','Arial','sans-serif','Apple Color + Emoji','Segoe UI Emoji'; font-size:14px; color:#24292e; background-color:#ffffff;">This setting does + not override disabling recycle bin prompts</span></p></body></html> + + <html><head/><body><p><span style=" + font-family:'-apple-system','BlinkMacSystemFont','Segoe UI','Helvetica','Arial','sans-serif','Apple Color + Emoji','Segoe UI Emoji'; font-size:14px; color:#24292e; background-color:#ffffff;">ការ​កំណត់​នេះ​មិន + ​បដិសេធ​ការ​បិទ​ការ​ជំរុញ​ធុង​សំរាម​ទេ</span></p></body></html> + + Confirm when clients request entry deletion បញ្ជាក់នៅពេលដែលអតិថិជនស្នើសុំការលុបទិន្នន័យបញ្ចូល + + <html><head/><body><p>This improves compatibility with certain applications + which search for password without unlocking the database first.</p><p>But enabling this may also + crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a + different value set in applications.)</p></body></html> + + <html><head/><body><p>នេះបង្កើនភាពឆបគ្នាជាមួយកម្មវិធីជាក់លាក់ + ដែលស្វែងរកពាក្យសម្ងាត់ដោយមិនបានដោះសោមូលដ្ឋានទិន្នន័យជាមុន។</p><p>ប៉ុន្តែការបើកដំណើរការនេះក៏អាច + ធ្វើឱ្យគាំងម៉ាស៊ីនភ្ញៀវ ប្រសិនបើមូលដ្ឋានទិន្នន័យមិនអាចដោះសោក្នុងរយៈពេលជាក់លាក់ណាមួយ។ (ជាធម្មតា 25 វិនាទី ប៉ុន្តែអាចជា + ការកំណត់តម្លៃខុសគ្នាក្នុងកម្មវិធី។)</p></body></html> + + Prompt to unlock database before searching សារជូនដំណឹងឱ្យដោះសោមូលដ្ឋានទិន្នន័យមុនពេលធ្វើការស្វែងរក @@ -9956,14 +8606,6 @@ This option is deprecated, use --set-key-file instead. Save current changes to activate the plugin and enable editing of this section. ក្សាការផ្លាស់ប្តូរបច្ចុប្បន្នភាពទុក ដើម្បីដំណើរការទិន្នន័យជំនួយ និងបើកការកែសម្រួលផ្នែកនេះ។ - - <html><head/><body><p>This setting does not override disabling recycle bin prompts </p></body></html> - - - - <html><head/><body><p>This improves compatibility with certain applications which search for password without unlocking the database first.</p><p>But enabling this may also crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a different value set in applications.) </p></body></html> - - SettingsWidgetKeeShare @@ -10071,14 +8713,6 @@ This option is deprecated, use --set-key-file instead. TagModel - - Clear Search - ជម្រះការស្វែងរក - - - All Entries - ទិន្នន័យបញ្ចូលទាំងអស់ - Expired ផុតកំណត់ @@ -10087,6 +8721,14 @@ This option is deprecated, use --set-key-file instead. Weak Passwords ពាក្យសម្ងាត់ខ្សោយ + + All Entries + ទិន្នន័យបញ្ចូលទាំងអស់ + + + Clear Search + ជម្រះការស្វែងរក + TagView @@ -10264,6 +8906,26 @@ Example: JBSWY3DPEHPK3PXP Start storing your passwords securely in a KeePassXC database ចាប់ផ្តើមរក្សាទុកពាក្យសម្ងាត់របស់អ្នកដោយសុវត្ថិភាពនៅក្នុងឃ្លាំងទិន្នន័យ KeePassXC + + Create new database + បង្កើតឃ្លាំងទិន្នន័យថ្មី + + + Open existing database + បើកឃ្លាំងទិន្នន័យដែលមានស្រាប់ + + + Import from KeePass 1 + នាំចូលពី KeePass 1 + + + Import from 1Password + នាំចូលពី 1Password + + + Import from CSV + នាំចូលពី CSV + Recent databases ទិន្នន័យថ្មីៗ @@ -10276,18 +8938,6 @@ Example: JBSWY3DPEHPK3PXP Welcome to KeePassXC %1 សូមស្វាគមន៍មកកាន់ KeePassXC % 1 - - Create Database - - - - Open Database - - - - Import File - - WinUtils @@ -10304,8 +8954,31 @@ Example: JBSWY3DPEHPK3PXP មិនអាចចុះឈ្មោះផ្លូវកាត់ទូទៅបានទេ + + WindowsHello + + Failed to init KeePassXC crypto. + មិនបានសម្រេចក្នុងការបង្កើតការបំលែងកូដ KeePassXC។ + + + Failed to encrypt key data. + បានបរាជ័យក្នុងការអ៊ិនគ្រីបទិន្នន័យគន្លឹះ។ + + + Failed to get Windows Hello credential. + បានបរាជ័យក្នុងការទទួលបាន Windows Hello។ + + + Failed to decrypt key data. + មិនបានសម្រេចក្នុងការឌិគ្រីបទិន្នន័យសោ។ + + YubiKey + + %1 No interface, slot %2 + %1 គ្មានផ្ទៃ ឬរន្ធ %2 + General: ទូទៅ៖ @@ -10317,6 +8990,14 @@ Example: JBSWY3DPEHPK3PXP YubiKeyEditWidget + + Refresh hardware tokens + រីហ្វ្រេសថូខឹនហាតវែរឡើងវិញ + + + Refresh + រីហ្រេ្វស + Hardware key slot selection ការជ្រើសរើសរន្ធដោតឃីហាតវែរ @@ -10349,6 +9030,10 @@ Example: JBSWY3DPEHPK3PXP Challenge-Response set, click to change or remove ការកំណត់ដំណើរការផ្ទៀងផ្ទាត់ដោយចុចផ្លាស់ប្តូរ ឬដកចេញ + + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + <p>ប្រសិនបើលោកអ្នកជាម្ចាស់ <a href="https://www.yubico.com/">YubiKey</a> ឬ <a href="https://onlykey.io">OnlyKey</a> អ្នកអាចប្រើវាសម្រាប់សុវត្ថិភាពបន្ថែម។</p><p>គន្លឹះតម្រូវឲ្យមានចំណុចមួយរបស់វាត្រូវបានរៀបចំជាកម្មវិធីជា <a href="https://www.yubico.com/products/services-software/challenge-response/">ដំណើរការផ្ទៀងផ្ទាត់ HMAC-SHA1</a>។</p> + Detecting hardware keys… កំពុងរកឃើញឃីហាតវែរ… @@ -10357,25 +9042,28 @@ Example: JBSWY3DPEHPK3PXP No hardware keys detected រកមិនឃើញឃីហាតវែរទេ + + + YubiKeyInterface - Refresh hardware keys - - - - <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed with <a href="https://keepassxc.org/docs/#faq-yubikey-howto">Challenge-Response</a>.</p> - - - - Hardware keys found, but no slots are configured - + %1 Invalid slot specified - %2 + %1 រន្ធដោតដែលបានបញ្ជាក់មិនត្រឹមត្រូវ - %2 YubiKeyInterfacePCSC + + (PCSC) %1 [%2] Challenge-Response - Slot %3 + (PCSC) %1 [%2] ដំណើរការផ្ទៀងផ្ទាត់ - រន្ធដោត %3 + The YubiKey PCSC interface has not been initialized. មិន​បានចាប់ផ្តើមផ្ទៃ YubiKey PCSC ទេ។ + + Hardware key is currently in use. + ឃីហាតវែរកំពុងប្រើប្រាស់នាពេលថ្មីៗនេះ។ + Could not find or access hardware key with serial number %1. Please present it to continue. មិន​អាច​រក​ឃើញ ឬ​ចូលប្រើប្រាស់ឃីហាតវែរដែលមានលេខស៊េរី % 1 ទេ។ សូមបង្ហាញលេខលេខស៊េរីដើម្បីបន្ត។ @@ -10392,21 +9080,6 @@ Example: JBSWY3DPEHPK3PXP Failed to complete a challenge-response, the PCSC error code was: %1 បរាជ័យក្នុងការបំពេញដំណើរការផ្ទៀងផ្ទាត់ លេខកូដបញ្ហា PCSC គឺ៖ % 1 - - (NFC) %1 [%2] - Slot %3, %4 - YubiKey display fields - - - - Press - USB Challenge-Response Key interaction request - ចុច - - - Passive - USB Challenge-Response Key no interaction required - អកម្ម - YubiKeyInterfaceUSB @@ -10414,6 +9087,14 @@ Example: JBSWY3DPEHPK3PXP Unknown មិនស្គាល់ + + (USB) %1 [%2] Configured Slot - %3 + (USB) %1 [%2] រន្ធដោតដែលបានកំណត់រចនាសម្ព័ន្ធ - %3 + + + (USB) %1 [%2] Challenge-Response - Slot %3 - %4 + (USB) %1 [%2] ដំណើរការផ្ទៀងផ្ទាត់ - រន្ធដោត %3 - %4 + Press USB Challenge-Response Key interaction request @@ -10428,6 +9109,10 @@ Example: JBSWY3DPEHPK3PXP The YubiKey USB interface has not been initialized. មិន​បានចាប់ផ្តើមផ្ទៃ YubiKey USB ទេ។ + + Hardware key is currently in use. + ឃីហាតវែរកំពុងប្រើប្រាស់នាពេលថ្មីៗនេះ។ + Could not find hardware key with serial number %1. Please plug it in to continue. មិនអាចរកឃើញឃីហាតវែរដែលមានលេខស៊េរី % 1 ទេ។ សូមភ្ជាប់វាដើម្បីបន្ត។ @@ -10444,15 +9129,5 @@ Example: JBSWY3DPEHPK3PXP Failed to complete a challenge-response, the specific error was: %1 បរាជ័យក្នុងការបំពេញដំណើរការផ្ទៀងផ្ទាត់ដែលបញ្ហាជាក់លាក់គឺ៖ % 1 - - %1 [%2] - Slot %3 - YubiKey NEO display fields - - - - %1 [%2] - Slot %3, %4 - YubiKey display fields - - \ No newline at end of file diff --git a/share/translations/keepassxc_ko.ts b/share/translations/keepassxc_ko.ts index 85f9e87c3..53310cba8 100644 --- a/share/translations/keepassxc_ko.ts +++ b/share/translations/keepassxc_ko.ts @@ -80,10 +80,6 @@ Details 자세한 정보 - - Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. - 선택 사항은 요청하는 클라이언트와 KeePassXC 둘 다가 실행 중인 동안만 기억합니다. - Remember 기억 @@ -92,6 +88,10 @@ Allow Selected 선택 허용 + + Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. + 선택 사항은 요청하는 클라이언트와 KeePassXC 둘 다가 실행 중인 동안만 기억합니다. + Deny All && Future 앞으로 계속 모두 거부 @@ -122,10 +122,6 @@ Use OpenSSH OpenSSH 사용 - - Use both agents - 에이전트 둘 다 사용 - SSH_AUTH_SOCK override SSH_AUTH_SOCK 재정의 @@ -154,6 +150,10 @@ SSH Agent connection is working! SSH 에이전트에 연결할 수 있습니다! + + Use both agents + 에이전트 둘 다 사용 + ApplicationSettingsWidget @@ -169,10 +169,6 @@ Security 보안 - - This setting cannot be enabled when minimize on unlock is enabled. - 이 설정은 최소화나 잠금 해제가 활성화되어 있으면 활성화할 수 없습니다. - Access error for config file %1 설정 파일 %1에 접근할 수 없음 @@ -217,48 +213,20 @@ You must restart the application to set the new language. Would you like to restart now? 새 언어를 적용하려면 프로그램을 다시 시작해야 합니다. 지금 다시 시작하시겠습니까? + + Reset Settings? + 설정을 초기화하시겠습니까? + + + Are you sure you want to reset all general and security settings to default? + 모든 일반 설정과 보안 설정을 초기화하시겠습니까? + Select backup storage directory 백업 저장 디렉터리 선택 - Confirm Reset - - - - Are you sure you want to reset all settings to default? - - - - Import KeePassXC Settings - - - - Failed to import settings from %1, not a valid settings file. - - - - Export KeePassXC Settings - - - - Small - - - - Normal - - - - Medium - - - - Large - - - - Custom + This setting cannot be enabled when minimize on unlock is enabled. @@ -292,10 +260,6 @@ Remember previously used databases 과거 데이터베이스 기억 - - recent files - 개 최근 파일 - Load previously open databases on startup 시작할 때 이전에 사용한 데이터베이스 열기 @@ -312,6 +276,25 @@ Include beta releases when checking for updates 업데이트를 확인할 때 베타 릴리스 포함 + + On database unlock, show entries that + 데이터베이스 잠금을 해제할 때 다음 항목 표시 + + + have expired + On database unlock, show entries that... + 이미 만료됨 + + + days + On database unlock, show entries that will expire within %1 days + 일 내에 만료됨 + + + will expire within + On database unlock, show entries that... + + File Management 파일 관리 @@ -336,10 +319,22 @@ Backup database file before saving 저장하기 전에 데이터베이스 파일 백업 + + Backup destination + 백업 대상 + + + Specifies the database backup file location. Occurrences of "{DB_FILENAME}" are replaced with the filename of the saved database without extension. {TIME:<format>} is replaced with the backup time, see https://doc.qt.io/qt-5/qdatetime.html#toString. <format> defaults to format string "dd_MM_yyyy_hh-mm-ss". + yyyy_MM_dd_hh-mm-ss + {DB_FILENAME}.old.kdbx {DB_FILENAME}.old.kdbx + + Choose... + 선택... + Use alternative saving method (may solve problems with Dropbox, Google Drive, GVFS, etc.) 대체 저장 방식 사용(Dropbox, Google 드라이브, GVFS 등 문제 해결) @@ -417,10 +412,6 @@ Toolbar button style: 도구 모음 단추 스타일: - - Show passwords in color - 암호 표시 시 글자 종류별로 색상 적용 - Use monospaced font for notes 메모에 고정폭 글꼴 사용 @@ -507,68 +498,11 @@ 마지막으로 입력한 항목 기억 시간: - On database unlock, show entries that will expire within + recent files - On database unlock, show entries that will expire within - - - - days - number of days warning for password expiration - 일 내에 만료됨 - - - Destination format: - - - - <html><head/><body><p><span style=" font-weight:600;">{DB_FILENAME}</span> is replaced with the filename of the saved database without extension</p><p><span style=" font-weight:600;">{TIME:&lt;format&gt;}</span> is replaced with the specified time format (default: dd_MM_yyyy_hh-mm-ss)</p><p>See the User Guide for more details</p></body></html> - - - - Choose folder... - - - - Show confirmation before moving entries to recycle bin - - - - Copy data on double clicking field in entry view - - - - Show toolbar - 도구 모음 보이기 - - - Show the menu bar by pressing the Alt key - - - - Show menubar - - - - Import settings… - - - - Export settings… - - - - Open browser on double clicking URL field in entry view - - - - Font size: - - - - Font size selection + Show passwords in color @@ -624,6 +558,10 @@ Lock databases after minimizing the window 창을 최소화할 때 데이터베이스 잠금 + + Require password repeat when it is visible + 암호가 보일 때 반복 필요 + Hide passwords when editing them 암호를 편집할 때 숨기기 @@ -636,6 +574,18 @@ Hide passwords in the entry preview panel 항목 미리 보기 패널에서 암호 숨기기 + + Hide entry notes by default + 기본값으로 암호 숨기기 + + + Move entries to recycle bin without confirmation + 항목을 묻지 않고 휴지통으로 이동 + + + Enable double click to copy the username/password entry columns + 두 번 클릭으로 사용자 이름/암호 항목 열에서 복사 사용 + Privacy 개인 정보 @@ -646,18 +596,6 @@ Hide TOTP in the entry preview panel - 항목 미리 보기 패널에서 TOTP 숨기기 - - - Lock databases when switching user - 사용자를 전환할 때 데이터베이스 잠금 - - - Lock Options - - - - Hide notes in the entry preview panel @@ -704,13 +642,27 @@ 매우 긴 지연 시간이 감지됨, 최대 %1: %2 - Entry does not have attribute for PICKCHARS: %1 - 항목에 PICKCHARS 속성이 없음: %1 + Invalid conversion type: %1 + 잘못된 변환 형식: %1 + + + Invalid conversion syntax: %1 + 잘못된 변환 문법: %1 + + + Invalid regular expression syntax %1 +%2 + 잘못된 정규 표현식 문법 %1 +%2 Invalid placeholder: %1 잘못된 자리 비움자: %1 + + Entry does not have attribute for PICKCHARS: %1 + 항목에 PICKCHARS 속성이 없음: %1 + AutoTypeAssociationsModel @@ -752,6 +704,10 @@ AutoTypePlatformX11 + + Trying to send invalid keysym. + 잘못된 키를 보내려고 하고 있습니다. + Sequence aborted: Caps Lock is on 입력 순서 중단됨: Caps Lock이 켜져 있음 @@ -764,10 +720,6 @@ Unable to get valid keycode for key: 키에 대한 올바른 키 코드를 가져올 수 없음: - - Trying to send invalid keyboard symbol. - 잘못된 키보드 기호를 보내려고 시도하고 있습니다. - AutoTypeSelectDialog @@ -872,13 +824,13 @@ Ctrl+4 - 가상 키보드 사용(Windows 전용)</p> Disable for this site 이 사이트에서는 거부 - - Undo - 실행 취소 - BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + KeePassXC-브라우저 항목 저장 + Ok 확인 @@ -891,76 +843,15 @@ Ctrl+4 - 가상 키보드 사용(Windows 전용)</p> You have multiple databases open. Please select the correct database for saving credentials. 여러 개의 데이터베이스를 열었습니다. -자격 증명을 저장할 데이터베이스를 선택하십시오. - - - KeePassXC - Select Database - KeePassXC - 데이터베이스 선택 - - - - BrowserPasskeysConfirmationDialog - - Cancel - 취소 - - - Update - 업데이트 - - - Authenticate - 인증 - - - Register new - 지금 등록 - - - Register - 등록 - - - Timeout in <b>%n</b> seconds... - <b>%n</b>초 후 시간 초과됨... - - - Relying Party: %1 - 의존하는 상대방: %1 - - - Username: %1 - 사용자 이름: %1 - - - KeePassXC - Passkey credentials - KeePassXC - 패스키 자격 증명 - - - Add to existing entry - 기존 항목에 추가 - - - Existing passkey found. -Do you want to register a new passkey for: - 기존 패스키를 찾았습니다. -다음에 대한 새 패스키를 등록하시겠습니까?: - - - Select the existing passkey and press Update to replace it. - 기존 패스키를 선택한 후 업데이트를 누르면 대체합니다. - - - Authenticate passkey credentials for: - 다음에 대하여 패스키 자격 증명 인증: - - - Do you want to register a passkey for: - 다음에 대한 패스키를 등록하시겠습니까?: +인증 정보를 저장할 데이터베이스를 선택하십시오. BrowserService + + KeePassXC: Create a new group + KeePassXC: 새 그룹 생성 + A request for creating a new group "%1" has been received. Do you want to create this group? @@ -969,6 +860,10 @@ Do you want to create this group? 이 그룹을 생성하시겠습니까? + + KeePassXC: New key association request + KeePassXC: 새 키 연결 요청 + You have received an association request for the following database: %1 @@ -985,16 +880,28 @@ chrome-laptop. 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? 이름이 "%1"인 공유 암호화 키가 이미 있습니다. 덮어쓰시겠습니까? + + KeePassXC: Update Entry + KeePassXC: 항목 업데이트 + Do you want to update the information in %1 - %2? %1 - %2의 정보를 업데이트하시겠습니까? + + KeePassXC: Delete entry + KeePassXC: 항목 삭제 + A request for deleting entry "%1" has been received. Do you want to delete the entry? @@ -1004,58 +911,50 @@ Do you want to delete the entry? - %1 (Passkey) - %1(패스키) + Converting attributes to custom data… + 속성을 사용자 정의 데이터로 변환 중… - KeePassXC - Create a new group - KeePassXC - 새 그룹 만들기 + Abort + 중지 - Disable - 비활성화 + KeePassXC: Converted KeePassHTTP attributes + KeePassXC: KeePassHTTP 속성 변환됨 - KeePassXC - Overwrite existing key? - KeePassXC - 기존 키 덮어쓰기? + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + %1개 항목의 속성을 변환했습니다. +키 %2개를 사용자 정의 데이터로 이동했습니다. + + + Successfully moved %n keys to custom data. + 키 %n개를 사용자 정의 데이터로 이동했습니다. - KeePassXC - Update Entry - KeePassXC - 항목 업데이트 + KeePassXC: No entry with KeePassHTTP attributes found! + KeePassXC: KeePassHTTP 속성이 있는 항목을 찾을 수 없습니다! - KeePassXC - Delete entry - KeePassXC - 항목 삭제 + The active database does not contain an entry with KeePassHTTP attributes. + 현재 활성화된 데이터베이스에 KeePassHTTP 속성이 있는 항목이 없습니다. - KeePassXC - New key association request - KeePassXC - 새 키 연결 요청 + Don't show this warning again + 더 이상 이 경고 표시하지 않기 - Passkey - 패스키 + KeePassXC: Legacy browser integration settings detected + KeePassXC: 레거시 브라우저 통합 설정 감지됨 - KeePassXC - Passkey credentials - KeePassXC - 패스키 자격 증명 - - - Register a new passkey to this entry: - 이 항목에 새 패스키 등록: - - - KeePassXC - Update passkey - KeePassXC - 패스키 업데이트 - - - Entry already has a passkey. -Do you want to overwrite the passkey in %1 - %2? - 항목에 이미 패스키가 있습니다. -%1 - %2에 패스키를 덮어쓰시겠습니까? - - - Register - 등록 + 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? + KeePassXC-브라우저 설정을 데이터베이스 설정으로 이동해야 합니다. +현재 브라우저 연결을 유지하려면 이 작업이 필요합니다. +존재하는 설정을 이전하시겠습니까? @@ -1076,6 +975,10 @@ Do you want to overwrite the passkey in %1 - %2? General 일반 + + Browsers installed as snaps are currently not supported. + Snap으로 설치한 브라우저는 지원하지 않습니다. + Enable integration for these browsers: 다음 브라우저에 통합: @@ -1111,7 +1014,7 @@ Do you want to overwrite the passkey in %1 - %2? Show a notification when credentials are requested Credentials mean login data requested via browser extension - 자격 증명이 필요할 때 알림 표시 + 인증 정보가 필요할 때 알림 표시 Request to unlock the database if it is locked @@ -1131,24 +1034,24 @@ Do you want to overwrite the passkey in %1 - %2? Return only best-matching credentials - 가장 잘 일치하는 자격 증명 항목만 반환 + 가장 잘 일치하는 인증 정보 항목만 반환 Returns expired credentials. String [expired] is added to the title. - 만료된 자격 증명도 반환합니다. 제목에 [만료됨] 문자열이 추가됩니다. + 만료된 인증 정보도 반환합니다. 제목에 [만료됨] 문자열이 추가됩니다. Allow returning expired credentials - 만료된 자격 증명 반환 허용 + 만료된 인증 정보 반환 허용 All databases connected to the extension will return matching credentials. - 확장 기능에 연결된 모든 데이터베이스에서 일치하는 자격 증명을 반환합니다. + 확장 기능에 연결된 모든 데이터베이스에서 일치하는 인증 정보를 반환합니다. Search in all opened databases for matching credentials Credentials mean login data requested via browser extension - 모든 열린 데이터베이스에서 저장된 자격 증명 검색 + 모든 열린 데이터베이스에서 저장된 인증 정보 검색 Advanced @@ -1157,12 +1060,12 @@ Do you want to overwrite the passkey in %1 - %2? 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 - 저장된 자격 증명을 업데이트하기 전에 묻지 않기 + 저장된 인증 정보를 업데이트하기 전에 묻지 않기 Do not ask permission for HTTP Basic Auth @@ -1247,6 +1150,26 @@ Do you want to overwrite the passkey in %1 - %2? Custom extension ID 사용자 정의 확장 기능 ID + + Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 + Snap 샌드박스로 인하여 브라우저 확장 기능을 사용하려면 스크립트를 실행해야 합니다.<br />%1에서 스크립트를 확인할 수 있습니다 + + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 + 브라우저 통합 기능을 사용하려면 KeePassXC-브라우저가 필요합니다.<br />%1, %2, %3, %4용으로 다운로드할 수 있습니다. + + + Please see special instructions for browser extension use below + 브라우저 확장 기능을 위한 추가 절차를 참조하십시오 + + + <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. + <b>오류:</b> 사용자 정의 프록시 위치를 찾을 수 없습니다!<br/>브라우저 통합 기능을 사용하려면 프록시 프로그램이 필요합니다. + + + <b>Warning:</b> The following options can be dangerous! + <b>경고:</b> 다음 옵션은 신중하게 사용하십시오! + Executable Files 실행 파일 @@ -1263,46 +1186,6 @@ Do you want to overwrite the passkey in %1 - %2? Select native messaging host folder location 네이티브 메시징 호스트 폴더 위치 선택 - - Allow keepassxc-proxy to list all entries with their title, URL and UUID in connected databases. - keepassxc-proxy가 연결된 데이터베이스 내 모든 항목의 제목, URL, UUID를 표시하도록 허용합니다. - - - Allow limited access to all entries in connected databases (ignores site access restrictions) - 연결된 데이터베이스 내 모든 항목에 제한된 접근을 허용합니다(사이트 접근 제한 무시) - - - <b>Warning:</b> Only adjust these settings if necessary. - <b>경고:</b> 필요한 경우에만 설정을 변경하십시오. - - - The custom proxy location does not exist. - 사용자 정의 프록시 위치가 존재하지 않습니다. - - - <b>Error:</b> The custom proxy location does not exist. Correct this in the advanced settings tab. - <b>오류:</b> 사용자 정의 프록시 위치가 존재하지 않습니다. 고급 설정 탭에서 수정하십시오. - - - <b>Error:</b> The installed proxy executable is missing from the expected location: %1<br/>Please set a custom proxy location in the advanced settings or reinstall the application. - <b>오류:</b> 설치된 실행 파일이 예상된 위치 %1에 없습니다.<br/>고급 설정에서 사용자 정의 프록시 위치를 설정하거나 프로그램을 다시 설치하십시오. - - - Allows using insecure http://localhost with passkeys for testing purposes. - 시험 목적으로 보안상 안전하지 않은 http://localhost에 패스키 사용을 허용합니다. - - - Allow using localhost with passkeys - localhost에 패스키 사용 허용 - - - KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. - 브라우저 통합을 사용하려면 KeePassXC-브라우저가 필요합니다.<br />%1, %2, %3용으로 다운로드할 수 있습니다. - - - Browsers installed using Snap or Flatpak are not supported with exception to Firefox installed using Snap. - - CloneDialog @@ -1325,6 +1208,14 @@ Do you want to overwrite the passkey in %1 - %2? CsvImportWidget + + Import CSV fields + CSV 필드 가져오기 + + + filename + 파일 이름 + size, rows, columns 크기, 줄, 칸 @@ -1433,43 +1324,50 @@ Do you want to overwrite the passkey in %1 - %2? Column %1 열 %1 + + Imported from CSV file + CSV 파일에서 가져옴 + + + Original data: + 원본 데이터: + + + Error(s) detected in CSV file! + CSV 파일에 오류가 있습니다! + [%n more message(s) skipped] [추가 메시지 %n개 건너뜀] - Failed to parse CSV file: %1 - CSV 파일을 해석할 수 없음: %1 + Error + 오류 - Imported from CSV file: %1 - CSV 파일에서 가져옴: %1 - - - No Title Selected - 선택한 제목 없음 - - - No title column was selected, entries will be hard to tell apart. -Are you sure you want to import? - 제목 열을 선택하지 않았습니다. 개별 항목을 구분하기 어려울 수 있습니다. -계속 가져오시겠습니까? - - - Tags - 태그 + CSV import: writer has errors: +%1 + CSV 가져오기: 기록 도구에 오류가 있습니다: +%1 CsvParserModel + + %1, %2, %3 + file info: bytes, rows, columns + %1, %2, %3 + + + %n byte(s) + %n바이트 + %n row(s) - CSV row count %n줄 %n column(s) - CSV column count %n칸 @@ -1522,14 +1420,6 @@ Backup database located at %2 Recycle Bin 휴지통 - - Database file read error. - - - - No file path was provided. - - DatabaseOpenDialog @@ -1552,10 +1442,30 @@ Backup database located at %2 Password field 암호 필드 + + Enter Additional Credentials (if any): + 추가 인증 정보 입력(해당되는 경우): + + + Key File: + 키 파일: + + + Key file help + 키 파일 도움말 + Hardware key slot selection 하드웨어 키 슬롯 선택 + + Hardware Key: + 하드웨어 키: + + + Hardware key help + 하드웨어 키 도움말 + Key file to unlock the database 데이터베이스 잠금 해제 키 파일 @@ -1568,6 +1478,14 @@ Backup database located at %2 Browse… 찾아보기... + + Refresh hardware tokens + 하드웨어 토큰 새로 고침 + + + Refresh + 새로 고침 + Unlock Database 데이터베이스 잠금 해제 @@ -1630,6 +1548,10 @@ To prevent this error from appearing, you must go to "Database Settings / S Retry with empty password 빈 암호로 다시 시도 + + Failed to authenticate with Touch ID + Touch ID로 인증할 수 없음 + Failed to open key file: %1 키 파일을 열 수 없음: %1 @@ -1662,68 +1584,40 @@ To prevent this error from appearing, you must go to "Database Settings / S Cannot use database file as key file 데이터베이스 파일은 키 파일로 사용할 수 없습니다. + + You cannot use your database file as a key file. +If you do not have a key file, please leave the field empty. + 데이터베이스 파일을 자기 자신의 키 파일로 사용할 수 없습니다. +키 파일이 없는 경우, 해당 필드를 비워두십시오. + + + Detecting hardware keys… + 하드웨어 키 인식 중... + + + No hardware keys detected + 인식된 하드웨어 키 없음 + + + Select hardware key… + 하드웨어 키 선택... + + + <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information…</p> + <p>암호 외에도 비밀 파일을 사용하여 데이터베이스 보안을 강화할 수 있습니다. 이 파일은 데이터베이스 보안 설정에서 생성할 수 있습니다.</p><p>이 파일은 *.kdbx 데이터베이스 파일과 <strong>별개의 파일</strong>입니다!<br>키 파일이 없다면 이 필드를 비워 두십시오.</p><p>자세한 정보를 보려면 클릭하십시오…</p> + + + <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +<p>Click for more information…</p> + <p><strong>YubiKey</strong>나 <strong>OnlyKey</strong>와 같은 하드웨어 키의 슬롯을 HMAC-SHA1로 설정 시 사용할 수 있습니다.</p> +<p>더 많은 정보를 보려면 클릭하십시오…</p> + authenticate to access the database - 데이터베이스에 접근하려면 인증하십시오 + - Failed to authenticate with Quick Unlock: %1 - 빠른 잠금 해제로 인증할 수 없음: %1 - - - Select Key File: - 키 파일 선택: - - - <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!</p> - <p>데이터베이스 파일의 보안을 개선할 수 있도록 암호 외에도 비밀 파일을 사용할 수 있습니다. 해당 파일은 데이터베이스 보안 설정에서 생성할 수 있습니다.</p><p>이 파일은 *.kdbx 데이터베이스 파일이 <strong>아닙니다</strong>!</p> - - - Use hardware key [Serial: %1] - 하드웨어 키 사용 [일련 번호: %1] - - - Use hardware key - 하드웨어 키 사용 - - - Your database file is NOT a key file! -If you don't have a key file or don't know what that is, you don't have to select one. - 데이터베이스 파일은 키 파일이 아닙니다! -키 파일이 없거나 키 파일이 무엇인지 모르겠다면 선택하지 마십시오. - - - KeePassXC database file selected - KeePassXC 데이터베이스 파일 선택됨 - - - The file you selected looks like a database file. -A database file is NOT a key file! - -Are you sure you want to continue with this file?. - 선택한 파일은 데이터베이스 파일 같습니다. -데이터베이스 파일은 키 파일이 아닙니다! - -이 파일로 계속 진행하시겠습니까? - - - No hardware keys found. - 하드웨어 키를 찾을 수 없습니다. - - - Refresh Hardware Keys - 하드웨어 키 새로 고침 - - - Click to add a key file. - 키 파일을 추가하려면 클릭하십시오. - - - <a href="#" style="text-decoration: underline">I have a key file</a> - <a href="#" style="text-decoration: underline">키 파일이 있음</a> - - - Hardware keys found, but no slots are configured. + Failed to authenticate with Windows Hello: %1 @@ -1736,6 +1630,10 @@ Are you sure you want to continue with this file?. DatabaseSettingsDialog + + Advanced Settings + 고급 설정 + General 일반 @@ -1746,7 +1644,7 @@ Are you sure you want to continue with this file?. Database Credentials - 데이터베이스 자격 증명 + 데이터베이스 인증 정보 Encryption Settings @@ -1760,22 +1658,6 @@ Are you sure you want to continue with this file?. Maintenance 관리 - - KeeShare - KeeShare - - - Secret Service Integration - 비밀 서비스 통합 - - - Remote Sync - 원격 동기화 - - - Database Settings: %1 - - DatabaseSettingsWidgetBrowser @@ -1783,6 +1665,18 @@ Are you sure you want to continue with this file?. KeePassXC-Browser settings KeePassXC-브라우저 설정 + + Convert KeePassHTTP data + KeePass HTTP 데이터 변환 + + + Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data + 레거시 KeePassHTTP 설정을 KeePassXC-브라우저 호환 사용자 정의 데이터로 변환 + + + Refresh database root group ID + 데이터베이스 루트 그룹 ID 새로 고침 + Disconnect all browsers 모든 브라우저 연결 끊기 @@ -1791,10 +1685,6 @@ Are you sure you want to continue with this file?. Forget all site-specific settings on entries 항목의 모든 사이트별 설정 삭제 - - Refresh database root group ID - 데이터베이스 루트 그룹 ID 새로 고침 - Stored keys 저장된 키 @@ -1843,10 +1733,18 @@ This may prevent connection to the browser plugin. 모든 브라우저 연결을 끊으시겠습니까? 브라우저 플러그인에 연결하지 못할 수도 있습니다. + + KeePassXC: No keys found + KeePassXC: 키를 찾을 수 없음 + No shared encryption keys found in KeePassXC settings. KeePassXC 설정에서 공유된 암호화 키를 찾을 수 없습니다. + + KeePassXC: Removed keys from database + KeePassXC: 데이터베이스에서 키 삭제됨 + Successfully removed %n encryption key(s) from KeePassXC settings. KeePassXC 설정에서 암호화 키 %n개를 삭제했습니다. @@ -1865,14 +1763,32 @@ Permissions to access entries will be revoked. 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 convert all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + 모든 레거시 브라우저 통합 데이터를 최신 표준으로 이동하시겠습니까? +브라우저 통합 플러그인과 호환성을 유지하기 위해서 필요합니다. + Refresh database ID 데이터베이스 ID 새로 고침 @@ -1883,26 +1799,6 @@ This is only necessary if your database is a copy of another and the browser ext 데이터베이스 ID를 새로 고치시겠습니까? 데이터베이스가 다른 데이터베이스의 복제본이고 브라우저 확장 기능에서 연결할 수 없을 때에만 사용하십시오. - - Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data - 레거시 KeePassHTTP 설정을 KeePassXC-브라우저 호환 사용자 정의 데이터로 변환 - - - No keys found - 키를 찾을 수 없음 - - - Removed keys from database - 데이터베이스에서 키 삭제함 - - - Removed permissions - 권한 삭제함 - - - No entry with permissions found! - 권한이 있는 항목을 찾을 수 없습니다! - DatabaseSettingsWidgetDatabaseKey @@ -1940,19 +1836,7 @@ Are you sure you want to continue without a password? Failed to change database credentials - 데이터베이스 자격 증명을 변경할 수 없음 - - - Weak password - 약한 암호 - - - This is a weak password! For better protection of your secrets, you should choose a stronger password. - 암호가 너무 약합니다! 기밀 정보를 보호하려면 더 강한 암호를 입력해야 합니다. - - - The provided password does not meet the minimum quality requirement. - 지정한 암호가 최소 보안 조건을 만족하지 않습니다. + 데이터베이스 인증 정보를 변경할 수 없음 @@ -1961,6 +1845,14 @@ Are you sure you want to continue without a password? Decryption Time: 복호화 시간: + + Change existing decryption time + 기존 복호화 시간 변경 + + + Change + 변경 + Decryption time in seconds 초 단위의 복호화 시간 @@ -2041,6 +1933,11 @@ Are you sure you want to continue without a password? KDBX 3 KDBX 3 + + unchanged + Database decryption time is unchanged + 변경되지 않음 + Number of rounds too high Key transformation rounds @@ -2093,18 +1990,6 @@ If you keep this number, your database will not be protected from brute force at Threads for parallel execution (KDF settings) 개 스레드 - - Encryption Settings: - 암호화 설정: - - - Basic - 기본 - - - Advanced - 고급 - DatabaseSettingsWidgetFdoSecrets @@ -2202,101 +2087,28 @@ This action is not reversible. the oldest history items of an entry will be removed such that only the specified amount of entries remain at most. - 이 설정을 저장하거나 항목을 편집할 때 -항목의 과거 기록 중 가장 오래된 항목부터 -삭제되어 최대 지정한 개수만큼의 과거 -기록만을 저장합니다. + Limit the amount of history items per entry to: - 항목별 과거 기록 개수 제한: + When saving this setting or editing an entry the oldest history items of an entry will be removed such that the remaining history items add up to the specified amount at most. - 이 설정을 저장하거나 항목을 편집할 때 -항목의 과거 기록 중 가장 오래된 항목부터 -삭제되어 최대 지정한 크기만큼의 과거 -기록만을 저장합니다. + Limit the total size of history items per entry to: - 항목별 과거 기록 총 크기 제한: + Move entries to a recycle bin group instead of deleting them from the database. Entries deleted from the recycle bin are removed from the database. - 데이터베이스에서 항목을 삭제하지 않고 -휴지통 그룹으로 이동합니다. -휴지통에서 삭제된 항목은 -데이터베이스에서 삭제됩니다. - - - Autosave delay since last change - 마지막 변경 후 자동 저장까지 대기 시간 - - - Autosave delay - 자동 저장 대기 시간 - - - Autosave delay since last change in minutes - 분 단위의 마지막 변경 후 자동 저장 대기 시간 - - - min - - - - Autosave delay since last change checkbox - 마지막 체크 상자 변경 후 자동 저장 대기 시간 - - - Public Database Metadata - - - - Warning: the following settings are not encrypted. - - - - Display name: - - - - Publically visible display name used on the unlock dialog - - - - Database public display name - - - - Display color: - - - - Publically visible color used on the unlock dialog - - - - Database public display color chooser - - - - Clear - 비우기 - - - Display icon: - - - - Select Database Icon @@ -2394,141 +2206,6 @@ removed from the database. 데이터베이스 설명 필드 - - DatabaseSettingsWidgetRemote - - Sync Commands - 동기화 명령 - - - Remove - 삭제 - - - Command Settings - 명령 설정 - - - Name - 이름 - - - Save - 저장 - - - Download - 다운로드 - - - Command: - 명령: - - - Download command field - 다운로드 명령 필드 - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - 예제: "sftp user@hostname" 또는 "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - - - Input: - 입력: - - - Download input field - 다운로드 입력 필드 - - - Upload - 업로드 - - - Upload command field - 업로드 명령 필드 - - - e.g.: "sftp user@hostname" or "scp {TEMP_DATABASE} user@hostname:DatabaseOnRemote.kdbx" - 예제: "sftp user@hostname" 또는 "scp {TEMP_DATABASE} user@hostname:DatabaseOnRemote.kdbx" - - - Upload input field - 업로드 입력 필드 - - - Name cannot be empty. - 이름을 비워 둘 수 없습니다. - - - Test - 시험 - - - Download command cannot be empty. - 다운로드 명령을 비워 둘 수 없습니다. - - - Download failed with error: %1 - 다운로드 실패, 오류: %1 - - - Download finished, but file %1 could not be found. - 다운로드가 완료되었지만 %1 파일을 찾을 수 없습니다. - - - Download successful. - 다운로드에 성공했습니다. - - - Save Remote Settings - 원격 설정 저장 - - - You have unsaved changes. Do you want to save them? - 저장하지 않은 변경 사항이 있습니다. 저장하시겠습니까? - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - 예제.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE}는 임시 위치에 저장된 데이터베이스를 가리키는 자리 비움자입니다 -명령은 종료되어야 합니다. `sftp`의 경우 마지막 `exit` 명령을 전송해야 합니다 - - - - e.g.: -put {TEMP_DATABASE} DatabaseOnRemote.kdbx -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - 예제.: -put {TEMP_DATABASE} DatabaseOnRemote.kdbx -exit ---- -{TEMP_DATABASE}는 임시 위치에 저장된 데이터베이스를 가리키는 자리 비움자입니다 -명령은 종료되어야 합니다. `sftp`의 경우 마지막 `exit` 명령을 전송해야 합니다 - - - - Timeout: - - - - seconds - - - DatabaseTabWidget @@ -2561,10 +2238,26 @@ This is definitely a bug, please report it to the developers. CSV file CSV 파일 + + Select CSV file + CSV 파일 선택 + Merge database 데이터베이스 합치기 + + KeePass 1 database + KeePass 1 데이터베이스 + + + Open KeePass 1 database + KeePass 1 데이터베이스 열기 + + + Open OPVault + OPVault 열기 + Export database to CSV file 데이터베이스를 CSV 파일로 내보내기 @@ -2577,18 +2270,6 @@ This is definitely a bug, please report it to the developers. Writing the HTML file failed. HTML 파일에 쓸 수 없습니다. - - Export database to XML file - 데이터베이스를 XML 파일로 내보내기 - - - XML file - XML 파일 - - - Writing the XML file failed - XML 파일 기록 실패 - Export Confirmation 내보내기 확인 @@ -2597,23 +2278,35 @@ This is definitely a bug, please report it to the developers. You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? 데이터베이스를 암호화되지 않은 파일로 내보냅니다. 암호와 기타 민감 정보를 노출시킬 수 있습니다! 계속 진행하시겠습니까? + + New Database + 새 데이터베이스 + + + %1 [New Database] + Database tab name modifier + %1 [새 데이터베이스] + %1 [Locked] Database tab name modifier %1 [잠김] - %1 [Temporary] - Database tab name modifier - %1 [임시] + Export database to XML file + + + + XML file + + + + Writing the XML file failed + DatabaseWidget - - Searches and Tags - 검색과 태그 - Searching… 검색 중... @@ -2662,10 +2355,6 @@ This is definitely a bug, please report it to the developers. Expired entries 만료된 항목 - - Entries expiring within %1 day(s) - %1일 내에 만료되는 항목 - No current database. 현재 데이터베이스가 없습니다. @@ -2690,18 +2379,6 @@ This is definitely a bug, please report it to the developers. No Results 결과 없음 - - Save - 저장 - - - Enter a unique name or overwrite an existing search from the list: - 고유한 이름을 입력하거나 목록에 있는 기존 검색을 덮어쓸 수 있습니다: - - - Save Search - 검색 저장 - Lock Database? 데이터베이스를 잠그시겠습니까? @@ -2729,6 +2406,26 @@ Save changes? 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? + 데이터베이스 파일이 변경되었고 저장하지 않은 변경 사항이 있습니다. +변경 사항을 합치겠습니까? + + + Could not open the new database file while attempting to autoreload. +Error: %1 + 자동으로 다시 불러오려는 중 새 데이터베이스 파일을 열 수 없었습니다. +오류: %1 + Disable safe saves? 안전 저장을 비활성화 하시겠습니까? @@ -2771,93 +2468,24 @@ Disable safe saves and try again? Could not find database file: %1 데이터베이스 파일을 찾을 수 없음: %1 - - New Database - 새 데이터베이스 + + Entries expiring within %1 day(s) + %1일 내에 만료되는 항목 - %1 [New Database] - Database tab name modifier - %1 [새 데이터베이스] - - - Remote Sync did not contain any download or upload commands. - 원격 동기화에 다운로드나 업로드 명령이 없습니다. - - - Remote sync '%1' completed successfully! - '%1' 원격 동기화에 성공했습니다! - - - Remote sync '%1' failed: %2 - '%1' 원격 동기화 실패: %2 - - - Error while saving database %1: %2 - %1 데이터베이스를 저장하는 중 오류 발생: %2 - - - Downloading... - 다운로드 중... - - - Uploading... - 업로드 중... - - - Syncing... - 동기화 중... - - - Remove passkey from entry - 항목에서 패스키 삭제 - - - Do you want to remove the passkey from this entry? - 이 항목에서 패스키를 삭제하시겠습니까? - - - The database file "%1" was modified externally + Searches and Tags - Do you want to load the changes? + Enter a unique name or overwrite an existing search from the list: - Reload database - + Save + 저장 - Reloading database… - - - - Reload canceled - - - - Reload successful - - - - Reload pending user action… - - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes<br>Ignore the changes on disk until save<br>Discard unsaved changes - - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes then save<br>Overwrite the changes on disk<br>Discard unsaved changes - - - - Database file overwritten. - - - - Database file on disk cannot be unlocked with current credentials.<br>Enter new credentials and/or present hardware key to continue. + Save Search @@ -2911,6 +2539,10 @@ Disable safe saves and try again? n/a 없음 + + (encrypted) + (암호화됨) + Select private key 비밀 키 선택 @@ -2997,10 +2629,6 @@ Would you like to correct it? Hide 숨기기 - - %n hour(s) - %n시간 - %n week(s) %n주 @@ -3013,9 +2641,9 @@ Would you like to correct it? %n year(s) %n년 - - Failed to decrypt SSH key, ensure password is correct. - SSH 키를 복호화할 수 없습니다. 암호가 올바른지 확인하십시오. + + %n hour(s) + %n시간 @@ -3135,20 +2763,10 @@ Would you like to correct it? Add new window association 새 창 연결 추가 - - + - Add item - + - Remove selected window association 선택한 창 연결 삭제 - - - - Remove item - - - Window title: 창 제목: @@ -3173,9 +2791,23 @@ Would you like to correct it? Custom Auto-Type sequence for this window 이 창의 사용자 정의 자동 입력 순서 + + + + Add item + + + + + - + Remove item + - + EditEntryWidgetBrowser + + These settings affect to the entry's behaviour with the browser extension. + 이 설정은 브라우저 확장 기능에서 해당 항목을 처리하는 방법을 변경합니다. + General 일반 @@ -3188,14 +2820,26 @@ Would you like to correct it? Skip Auto-Submit for this entry 이 항목 자동 제출 건너뛰기 + + Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. + 웹 브라우저의 HTTP 인증 대화 상자에만 이 설정을 사용합니다. 활성화하면 일반 로그인 폼 선택 목록에 이 항목을 표시하지 않습니다. + Use this entry only with HTTP Basic Auth HTTP Basic 인증에만 이 항목 사용 + + Do not send this setting to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. + 이 설정을 브라우저의 HTTP 인증 대화 상자로 보내지 않습니다. 이 옵션을 사용하면 HTTP 인증 대화 상자에서 이 항목을 숨깁니다. + Do not use this entry with HTTP Basic Auth HTTP Basic 인증에 이 항목 사용하지 않기 + + Additional URL's + 추가 URL + Add 추가 @@ -3208,22 +2852,6 @@ Would you like to correct it? Edit 편집 - - These settings affect the entry's behaviour with the browser extension. - 이 설정은 브라우저 확장 기능에서 항목을 사용하는 방법에 영향을 줍니다. - - - Additional URLs - 추가 URL - - - Only send this entry to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. - 브라우저의 HTTP 인증 대화 상자에 이 항목만 보냅니다. 이 옵션을 사용하면 일반 로그인 폼에는 이 항목을 선택할 수 있도록 표시하지 않습니다. - - - Do not send this entry to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. - 이 항목을 브라우저의 HTTP 인증 대화 상자에 보내지 않습니다. 이 옵션을 사용하면 HTTP 인증 대화 상자에는 이 항목을 선택할 수 있도록 표시하지 않습니다. - EditEntryWidgetHistory @@ -3320,35 +2948,35 @@ Would you like to correct it? &Username: - 사용자 이름(&U): + &Title: - 제목(&T): + &Password: - 암호(&P): + UR&L: - URL(&L): + &Notes: - 메모(&N): + Toggle notes visibility - 메모 표시 여부 전환 + T&ags: - 태그(&A): + &Expires: - 만료 날짜(&E): + @@ -3389,6 +3017,19 @@ Would you like to correct it? Private key 비밀 키 + + External file + 외부 파일 + + + Browser for key file + 키 파일 찾아보기 + + + Browse… + Button for opening file dialog + 찾아보기... + Attachment 첨부 @@ -3405,23 +3046,6 @@ Would you like to correct it? Remove from agent 에이전트에서 삭제 - - External file - 외부 파일 - - - Browser for key file - 키 파일 찾아보기 - - - Browse… - Button for opening file dialog - 찾아보기... - - - Generate - 생성 - Select attachment file 첨부 파일 선택 @@ -3446,10 +3070,6 @@ Would you like to correct it? seconds - - Clear agent - - EditGroupWidget @@ -3461,6 +3081,10 @@ Would you like to correct it? Icon 아이콘 + + Browser Integration + 브라우저 통합 + Properties 속성 @@ -3477,10 +3101,6 @@ Would you like to correct it? Group has unsaved changes 그룹에 저장하지 않은 변경 사항이 있음 - - Browser Integration - 브라우저 통합 - Enable 활성화 @@ -3540,14 +3160,6 @@ Would you like to correct it? Omit WWW subdomain from matching toggle for this and sub groups 이 그룹과 하위 그룹 항목을 일치할 때 WWW 하위 도메인 제외 - - Restrict matching to given browser key: - 지정한 브라우저 키로 일치 제한: - - - Restrict matching to given browser key toggle for this and sub groups - 이 그룹과 하위 그룹의 항목을 지정한 브라우저 키로 일치 제한 - EditGroupWidgetKeeShare @@ -3780,6 +3392,10 @@ Supported extensions are: %1. Unable to fetch favicon. 파비콘을 다운로드할 수 없습니다. + + You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security + 도구 -> 설정 -> 보안에서 DuckDuckGo 웹 사이트 아이콘 서비스를 활성화할 수 있습니다 + Existing icon selected. 기존 아이콘을 선택했습니다. @@ -3812,10 +3428,6 @@ Supported extensions are: %1. The following icon(s) failed: 다음 아이콘에서 오류가 발생했습니다: - - You can enable the DuckDuckGo website icon service under Application Settings -> Security - 프로그램 설정 -> 보안에서 DuckDuckGo 웹사이트 아이콘 서비스를 활성화할 수 있습니다 - EditWidgetProperties @@ -3892,24 +3504,6 @@ This may cause the affected plugins to malfunction. %1 - Clone %1 - 사본 - - Passkey - 패스키 - - - Invalid conversion type: %1 - 잘못된 변환 형식: %1 - - - Invalid conversion syntax: %1 - 잘못된 변환 문법: %1 - - - Invalid regular expression syntax %1 -%2 - 잘못된 정규 표현식 문법 %1 -%2 - EntryAttachments @@ -3918,21 +3512,6 @@ This may cause the affected plugins to malfunction. 파일 "%1"을(를) 열 수 없음 - - EntryAttachmentsDialog - - Form - - - - File name - - - - File contents... - - - EntryAttachmentsModel @@ -3970,6 +3549,14 @@ This may cause the affected plugins to malfunction. Remove 삭제 + + Rename selected attachment + 선택한 첨부 파일 이름 바꾸기 + + + Rename + 이름 바꾸기 + Open selected attachment 선택한 첨부 파일 열기 @@ -4044,6 +3631,12 @@ This may cause the affected plugins to malfunction. Confirm Overwrite Attachment 첨부 덮어쓰기 확인 + + Attachment "%1" already exists. +Would you like to overwrite the existing attachment? + 첨부 "%1"이(가) 이미 있습니다. +기존 첨부 항목을 덮어쓰시겠습니까? + Confirm Attachment 첨부 확인 @@ -4078,24 +3671,6 @@ Error: %1 업데이트된 첨부 항목을 저장할 수 없습니다. 오류: %1 - - Attachment "%1" already exists. -Would you like to overwrite the existing attachment? - 첨부 "%1"이(가) 이미 있습니다. -기존 첨부 항목을 덮어쓰시겠습니까? - - - New - - - - Preview - 미리 보기 - - - Failed to preview an attachment: Attachment not found - - EntryAttributesModel @@ -4290,14 +3865,6 @@ Would you like to overwrite the existing attachment? Has TOTP TOTP 있음 - - Background Color - 배경색 - - - Group Path - - EntryPreviewWidget @@ -4318,8 +3885,8 @@ Would you like to overwrite the existing attachment? 암호 - URL - URL + Notes + 메모 Expiration @@ -4338,8 +3905,8 @@ Would you like to overwrite the existing attachment? 사용자 이름 - Notes - 메모 + URL + URL Advanced @@ -4389,10 +3956,6 @@ Would you like to overwrite the existing attachment? Never 하지 않음 - - Double click to copy value - 두 번 클릭하여 값 복사 - Enabled 사용함 @@ -4402,8 +3965,8 @@ Would you like to overwrite the existing attachment? 사용 안함 - Double click to copy to clipboard - 두 번 클릭하여 클립보드에 복사 + Double click to copy value + 두 번 클릭하여 값 복사 @@ -4412,10 +3975,6 @@ Would you like to overwrite the existing attachment? Invalid URL 잘못된 URL - - Duplicate URL - URL 복제 - EntryView @@ -4431,10 +3990,6 @@ Would you like to overwrite the existing attachment? Reset to defaults 기본값으로 복원 - - + %1 entry(s)... - + 항목 %1개... - ExportDialog @@ -4656,193 +4211,6 @@ You can enable the DuckDuckGo website icon service in the security section of th 파비콘 다운로드 중(%1/%2)… - - ImportWizard - - Import Wizard - 가져오기 마법사 - - - - ImportWizardPageReview - - WizardPage - 마법사페이지 - - - Entry count: %1 - 항목 개수: %1 - - - Group - 그룹 - - - Title - 제목 - - - Username - 사용자 이름 - - - Password - 암호 - - - Url - URL - - - Could not load key file. - - - - Could not open remote database. Password or key file may be incorrect. - - - - - ImportWizardPageSelect - - Form - - - - Import File Selection - 가져올 파일 선택 - - - Password: - 암호: - - - Key File: - 키 파일: - - - Browse… - 찾아보기... - - - Import Into: - 다음으로 가져오기: - - - New Database - 새 데이터베이스 - - - No unlocked databases available - 잠금 해제된 데이터베이스가 없음 - - - Existing Database: - 기존 데이터베이스: - - - Import File: - 가져올 파일: - - - Comma Separated Values (.csv) - 쉼표로 구분된 값 (.csv) - - - 1Password Export (.1pux) - 1Password 내보내기 (.1pux) - - - 1Password Vault (.opvault) - 1Password Vault (.opvault) - - - Bitwarden (.json) - Bitwarden (.json) - - - KeePass 1 Database (.kdb) - KeePass 1 데이터베이스 (.kdb) - - - Open OPVault - OPVault 열기 - - - Select import file - 가져올 파일 선택 - - - All files - 모든 파일 - - - Key files - 키 파일 - - - Select key file - 키 파일 선택 - - - Comma Separated Values - 쉼표로 구분된 값 - - - 1Password Export - 1Password 내보내기 - - - Bitwarden JSON Export - Bitwarden JSON 내보내기 - - - 1Password Vault - 1Password Vault - - - KeePass1 Database - KeePass1 데이터베이스 - - - Proton Pass (.json) - - - - Proton Pass JSON Export - - - - Temporary Database - - - - Command: - 명령: - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - 예제: "sftp user@hostname" 또는 "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - - - Input: - 입력: - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last commend `exit` has to be sent - - - - - Remote Database (.kdbx) - - - KMessageWidget @@ -4871,7 +4239,7 @@ The command has to exit. In case of `sftp` as last commend `exit` has to be sent Invalid credentials were provided, please try again. If this reoccurs, then your database file may be corrupt. - 자격 증명이 잘못되었습니다. 다시 시도하십시오. + 인증 정보가 잘못되었습니다. 다시 시도하십시오. 같은 오류가 계속 발생한다면 데이터베이스 파일이 손상되었을 수도 있습니다. @@ -4928,7 +4296,7 @@ If this reoccurs, then your database file may be corrupt. Invalid credentials were provided, please try again. If this reoccurs, then your database file may be corrupt. - 자격 증명이 잘못되었습니다. 다시 시도하십시오. + 인증 정보가 잘못되었습니다. 다시 시도하십시오. 같은 오류가 계속 발생한다면 데이터베이스 파일이 손상되었을 수도 있습니다. @@ -5277,6 +4645,17 @@ Line %2, column %3 비밀 키를 열 수 없음 + + KeePass1OpenWidget + + Import KeePass1 Database + KeePass1 데이터베이스 가져오기 + + + Unable to open the database. + 데이터베이스를 열 수 없습니다. + + KeePass1Reader @@ -5339,7 +4718,7 @@ Line %2, column %3 Invalid credentials were provided, please try again. If this reoccurs, then your database file may be corrupt. - 자격 증명이 잘못되었습니다. 다시 시도하십시오. + 인증 정보가 잘못되었습니다. 다시 시도하십시오. 같은 오류가 계속 발생한다면 데이터베이스 파일이 손상되었을 수도 있습니다. @@ -5633,6 +5012,10 @@ Are you sure you want to continue with this file? &Recent Databases 최근 데이터베이스(&R) + + &Import + 가져오기(&I) + &Export 내보내기(&E) @@ -5653,10 +5036,6 @@ Are you sure you want to continue with this file? TOTP TOTP - - Tags - 태그 - &Groups 그룹(&G) @@ -5701,18 +5080,34 @@ Are you sure you want to continue with this file? &New Database… 새 데이터베이스(&N)... + + Create a new database + 새 데이터베이스 만들기 + &Merge From Database… 데이터베이스에서 합치기(&M)... + + Merge from another KDBX database + 다른 KDBX 데이터베이스에서 합치기 + &New Entry… 새 항목(&N)... + + Add a new entry + 새 항목 추가하기 + &Edit Entry… 항목 편집(&E)... + + View or edit entry + 항목을 보거나 편집하기 + &Delete Entry… 항목 삭제(&D)... @@ -5721,6 +5116,10 @@ Are you sure you want to continue with this file? &New Group… 새 그룹(&N)... + + Add a new group + 새 그룹 추가하기 + &Edit Group… 그룹 편집(&E)... @@ -5753,10 +5152,18 @@ Are you sure you want to continue with this file? Database &Reports… 데이터베이스 보고서(&R)… + + Statistics, health check, etc. + 통계, 안전성 검사 등. + &Database Settings… 데이터베이스 설정(&D)... + + Database settings + 데이터베이스 설정 + &Clone Entry… 항목 복제(&C)... @@ -5765,18 +5172,34 @@ Are you sure you want to continue with this file? Move u&p 위로 이동(&P) + + Move entry one step up + 한 단계 위로 항목 이동 + Move do&wn 아래로 이동(&W) + + Move entry one step down + 한 단계 아래로 항목 이동 + Copy &Username 사용자 이름 복사(&U) + + Copy username to clipboard + 클립보드에 사용자 이름 복사 + Copy &Password 암호 복사(&P) + + Copy password to clipboard + 클립보드에 암호 복사 + &Settings 설정(&S) @@ -5810,13 +5233,21 @@ Are you sure you want to continue with this file? 제목(&T) - Copy &URL - URL 복사(&U) + Copy title to clipboard + 클립보드에 제목 복사 + + + Copy URL to clipboard + 클립보드에 URL 복사 &Notes 메모(&N) + + Copy notes to clipboard + 클립보드에 메모 복사 + &CSV File… CSV 파일(&C)... @@ -5829,14 +5260,26 @@ Are you sure you want to continue with this file? KeePass 1 Database… KeePass 1 데이터베이스... + + Import a KeePass 1 database + KeePass 1 데이터베이스 가져오기 + 1Password Vault… 1Password Vault... + + Import a 1Password Vault + 1Password Vault 가져오기 + CSV File… CSV 파일... + + Import a CSV file + CSV 파일 가져오기 + Show TOTP TOTP 표시 @@ -5853,10 +5296,6 @@ Are you sure you want to continue with this file? Copy &TOTP TOTP 복사(&T) - - Copy Password and TOTP - 암호와 TOTP 복사 - E&mpty recycle bin 휴지통 비우기(&M) @@ -5881,6 +5320,10 @@ Are you sure you want to continue with this file? &Online Help 온라인 도움말(&O) + + Go to online documentation + 온라인 문서로 이동 + &User Guide 사용자 가이드(&U) @@ -5925,10 +5368,6 @@ Are you sure you want to continue with this file? Classic (Platform-native) 고전(플랫폼 네이티브) - - Show Menubar - 메뉴 표시줄 표시 - Show Toolbar 도구 모음 표시 @@ -5953,10 +5392,6 @@ Are you sure you want to continue with this file? Clone Group... 그룹 복제... - - &XML File… - XML 파일(&X)... - Clear history 과거 기록 삭제 @@ -5984,8 +5419,10 @@ Expect some bugs and minor issues, this version is meant for testing purposes. - No Tags - 태그 없음 + 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 사용을 추천합니다. Restore Entry(s) @@ -6015,10 +5452,6 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Quit KeePassXC KeePassXC 끝내기 - - %1 Entry(s) - 항목 %1개 - Please present or touch your YubiKey to continue… 계속 진행하려면 YubiKey를 연결하거나 버튼을 누르십시오... @@ -6031,312 +5464,36 @@ Expect some bugs and minor issues, this version is meant for testing purposes.You must restart the application to apply this setting. Would you like to restart now? 이 설정을 적용하려면 프로그램을 다시 시작해야 합니다. 지금 다시 시작하시겠습니까? + + Tags + 태그 + + + No Tags + + + + %1 Entry(s) + + + + Copy Password and TOTP + + + + &XML File… + + + + XML File… + + + + Copy &URL + + Allow Screen Capture - 화면 캡처 허용 - - - 1Password 1PUX... - 1Password 1PUX... - - - Import a 1Password 1PUX file - 1Password 1PUX 파일 가져오기 - - - Import… - 가져오기… - - - Passkeys… - 패스키… - - - Import Passkey - 패스키 가져오기 - - - Remote S&ync… - 원격 동기화(&Y)… - - - Quit Application - 프로그램 끝내기 - - - Open About Dialog - 정보 대화 상자 열기 - - - Open Database - 데이터베이스 열기 - - - Create Database - 데이터베이스 만들기 - - - Merge From Database - 데이터베이스에서 합치기 - - - Create Entry - 항목 만들기 - - - Edit Entry - 항목 편집 - - - Delete Entry - 항목 삭제 - - - Create Group - 그룹 만들기 - - - Edit Group - 그룹 편집 - - - Delete Group - 그룹 삭제 - - - Download All Favicons - 모든 파비콘 다운로드 - - - Sort Groups A-Z - 그룹 가나다순 정렬 - - - Sort Groups Z-A - 그룹 가나다 역순 정렬 - - - Save Database As - 다른 이름으로 데이터베이스 저장 - - - Show Database Security - 데이터베이스 보안 표시 - - - Show Database Reports - 데이터베이스 보고서 표시 - - - Show Database Settings - 데이터베이스 설정 표시 - - - Show Passkeys - Passkey 표시 - - - Clone Entry - 항목 복제 - - - Move Entry Up - 항목 위로 이동 - - - Move Entry Down - 항목 아래로 이동 - - - Copy Username - 사용자 이름 복사 - - - Copy Password - 암호 복사 - - - Show Application Settings - 프로그램 설정 표시 - - - Show Password Generator - 암호 생성기 표시 - - - Remove Passkey From Entry - 항목에서 패스키 삭제 - - - Perform Auto-Type: {USERNAME} - 자동 입력 실행: {USERNAME} - - - Perform Auto-Type: {USERNAME}{ENTER} - 자동 입력 실행: {USERNAME}{ENTER} - - - Perform Auto-Type: {PASSWORD} - 자동 입력 실행: {PASSWORD} - - - Perform Auto-Type: {PASSWORD}{ENTER} - 자동 입력 실행: {PASSWORD}{ENTER} - - - Perform Auto-Type: {TOTP} - 자동 입력 실행: {TOTP} - - - Copy Title - 제목 복사 - - - Copy URL - URL 복사 - - - Copy Notes - 메모 복사 - - - Export to CSV - CSV로 내보내기 - - - Export to HTML - HTML로 내보내기 - - - Import KeePass1 Database - KeePass1 데이터베이스 가져오기 - - - Import 1Password Vault - 1Password Valut에서 가져오기 - - - Import CSV File - CSV 파일 가져오기 - - - Show TOTP QR Code - TOTP QR 코드 표시 - - - Set up TOTP - TOTP 설정 - - - Empty Recycle Bin - 휴지통 비우기 - - - Open Donation Website - 기부 웹사이트 열기 - - - Open Bug Report - 버그 보고 열기 - - - Open Online Documentation - 온라인 문서 열기 - - - Open Keyboard Shortcuts Guide - 키보드 단축키 도움말 열기 - - - Save Database Backup - 데이터베이스 백업 저장 - - - SSH Agent: Add Key - SSH 에이전트: 키 추가 - - - SSH Agent: Remove Key - SSH 에이전트: 키 삭제 - - - Toggle Compact Mode - 축소 모드 전환 - - - Set Theme: Automatic - 테마 설정: 자동 - - - Set Theme: Light - 테마 설정: 밝음 - - - Set Theme: Dark - 테마 설정: 어두움 - - - Set Theme: Classic - 테마 설정: 고전 - - - Toggle Show Menubar - 메뉴 표시줄 표시 전환 - - - Toggle Show Toolbar - 도구 모음 표시 전환 - - - Toggle Show Preview Panel - 미리 보기 패널 표시 전환 - - - Toggle Always on Top - 항상 위 전환 - - - Toggle Hide Usernames - 사용자 이름 숨기기 전환 - - - Toggle Hide Passwords - 암호 숨기기 전환 - - - Export to XML - XML로 내보내기 - - - Toggle Allow Screen Capture - 화면 캡처 허용 전환 - - - Show Group Panel - - - - Toggle Show Group Panel - - - - Setup Remote Sync… - 원격 동기화 설정… - - - Password Generator - 암호 생성기 - - - E&xpire Entry… - - - - Clear SSH Agent - - - - Clear all identities in ssh-agent @@ -6396,6 +5553,26 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Overwriting %1 [%2] %1 [%2] 덮어쓰는 중 + + older entry merged from database "%1" + 데이터베이스 "%1"에서 합쳐진 이전 항목 + + + Adding backup for older target %1 [%2] + 오래된 대상 %1 [%2]의 백업 추가 중 + + + Adding backup for older source %1 [%2] + 오래된 원본 %1 [%2]의 백업 추가 중 + + + Reapplying older target entry on top of newer source %1 [%2] + 새로운 원본 %1 [%2]에 오래된 대상 항목 다시 적용하는 중 + + + Reapplying older source entry on top of newer target %1 [%2] + 새로운 대상 %1 [%2]에 오래된 원본 항목 다시 적용하는 중 + Synchronizing from newer source %1 [%2] 새로운 원본 %1 [%2]에서 동기화하는 중 @@ -6455,16 +5632,24 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. 데이터베이스 암호화 설정을 변경할 수 있습니다. 나중에 데이터베이스 설정에서도 변경할 수 있습니다. + + Advanced Settings + 고급 설정 + + + Simple Settings + 간단한 설정 + NewDatabaseWizardPageDatabaseKey Database Credentials - 데이터베이스 자격 증명 + 데이터베이스 인증 정보 A set of credentials known only to you that protects your database. - 나만 알고 있는 데이터베이스를 보호할 자격 증명입니다. + 나만 알고 있는 데이터베이스를 보호할 인증 정보입니다. @@ -6489,25 +5674,6 @@ Expect some bugs and minor issues, this version is meant for testing purposes.새 데이터베이스 표시 이름과 추가 설명(선택)을 입력하십시오: - - NewEntryAttachmentsDialog - - Attachment name cannot be empty - - - - Attachment with the same name already exists - - - - Save attachment - 첨부 항목 저장 - - - New entry attachment - - - NixUtils @@ -6554,6 +5720,15 @@ Expect some bugs and minor issues, this version is meant for testing purposes.평문 문자열 %1바이트가 필요하지만 %2바이트를 받음 + + OpVaultOpenWidget + + Read Database did not produce an instance +%1 + 데이터베이스 읽기 명령이 인스턴스를 반환하지 않음 +%1 + + OpVaultReader @@ -6627,10 +5802,6 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Unknown cipher: %1 알 수 없는 암호화: %1 - - AES-256/GCM is currently not supported - AES-256/GCM은 현재 지원하지 않음 - Passphrase is required to decrypt this key 이 키를 복호화하려면 암호가 필요함 @@ -6696,183 +5867,8 @@ Expect some bugs and minor issues, this version is meant for testing purposes.비밀 키를 기록하는 중 예상하지 못한 곳에서 파일이 끝남 - (encrypted) - (암호화됨) - - - - OpenSSHKeyGenDialog - - SSH Key Generator - SSH 키 생성기 - - - Type - 형식 - - - Bits - 비트 - - - Comment - 주석 - - - - PasskeyExportDialog - - KeePassXC - Passkey Export - KeePassXC - 패스키 내보내기 - - - Filenames will be generated with title and .passkey file extension. - 파일 이름은 제목과 .passkey 파일 확장자로 생성됩니다. - - - Export entries - 항목 내보내기 - - - Export Selected - 선택 내보내기 - - - Cancel - 취소 - - - Export to folder - 폴더로 내보내기 - - - Export the following passkey entries. - 지정한 패스키 항목을 내보냅니다. - - - - PasskeyExporter - - KeePassXC: Passkey Export - KeePassXC: 패스키 내보내기 - - - File "%1.passkey" already exists. -Do you want to overwrite it? - - "%1.passkey" 파일이 이미 존재합니다. -덮어쓰시겠습니까? - - - - Cannot open file - 파일을 열 수 없음 - - - Cannot open file "%1" for writing. - "%1" 파일에 쓰기 위해 열 수 없음 - - - Cannot write to file - 파일에 쓸 수 없음 - - - - PasskeyImportDialog - - KeePassXC - Passkey Import - KeePassXC - 패스키 가져오기 - - - Username: %1 - 사용자 이름: %1 - - - Group - 그룹 - - - Database - 데이터베이스 - - - Import Passkey - 패스키 가져오기 - - - Import - 가져오기 - - - Cancel - 취소 - - - Entry - 항목 - - - Create new entry - 새 항목 만들기 - - - Relying Party: %1 - 의존하는 상대방: %1 - - - Import the following passkey: - 다음 패스키 가져오기: - - - Import the following passkey to this entry: - 이 항목으로 다음 패스키 가져오기: - - - Default passkeys group (Imported Passkeys) - 기본 패스키 그룹(가져온 패스키) - - - - PasskeyImporter - - Passkey file - 패스키 파일 - - - All files - 모든 파일 - - - Cannot open file - 파일을 열 수 없음 - - - Cannot open file "%1" for reading. - "%1" 파일에서 읽기 위해 열 수 없습니다. - - - Open passkey file - 패스키 파일 열기 - - - Cannot import passkey - 패스키를 가져올 수 없음 - - - Cannot import passkey file "%1". Data is missing. - 패스키 파일 "%1"을(를) 열 수 없습니다. 데이터가 빠져 있습니다. - - - Cannot import passkey file "%1". -The following data is missing: -%2 - 패스키 파일 "%1"을(를) 가져올 수 없습니다. -다음 데이터가 빠졌습니다: -%2 - - - Cannot import passkey file "%1". Private key is missing or malformed. - 패스키 파일 "%1"을(를) 가져올 수 없습니다. 개인 키가 빠졌거나 잘못되었습니다. + AES-256/GCM is currently not supported + @@ -7077,6 +6073,10 @@ The following data is missing: Word Count: 단어 개수: + + Character Count: + 글자 수: + Word Case: 대소문자: @@ -7089,6 +6089,10 @@ The following data is missing: Add custom wordlist 사용자 정의 단어 목록 추가 + + character + 글자 + Close 닫기 @@ -7125,30 +6129,6 @@ The following data is missing: Entropy: %1 bit 엔트로피: %1비트 - - Password Quality: %1 - 암호 강도: %1 - - - Poor - Password quality - 매우 약함 - - - Weak - Password quality - 약함 - - - Good - Password quality - 좋음 - - - Excellent - Password quality - 매우 좋음 - Confirm Delete Wordlist 단어 목록 삭제 확인 @@ -7196,20 +6176,32 @@ Do you want to overwrite it? 특수 문자 - passwordLength - 암호 길이 + Password Quality: %1 + 암호 강도: %1 - Characters: %1 - 글자 수: %1 + Poor + Password quality + 매우 약함 - MIXED case - + Weak + Password quality + 약함 - Excluded characters: "0", "1", "l", "I", "O", "|", "﹒", "B", "8", "G", "6" - + Good + Password quality + 좋음 + + + Excellent + Password quality + 매우 좋음 + + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + 제외할 글자: "0", "1", "l", "I", "O", "|", "﹒" @@ -7259,8 +6251,8 @@ Do you want to overwrite it? 매우 좋음 - Toggle password visibility using Control + H. Open the password generator using Control + G. - Ctrl+H 키를 사용하여 암호 표시 여부를 전환하십시오. Ctrl+G 키를 사용하여 암호 생성기를 여십시오. + Toggle password visibilty using Control + H. Open the password generator using Control + G. + @@ -7278,21 +6270,6 @@ Do you want to overwrite it? 글자를 입력할 때마다 Tab 키 누르기(&T) - - PreviewEntryAttachmentsDialog - - Preview entry attachment - - - - No preview available - - - - Image format not supported - - - QMessageBox @@ -7331,10 +6308,6 @@ Do you want to overwrite it? Continue 계속 - - Continue with weak password - 약한 암호로 계속 - QObject @@ -7728,10 +6701,6 @@ Do you want to overwrite it? Too many arguments provided. 인자가 너무 많습니다. - - Path of the database. - 데이터베이스의 경로입니다. - Target decryption time in MS for the database. 밀리초 단위 데이터베이스 복호화 목표 시간입니다. @@ -7752,6 +6721,10 @@ Do you want to overwrite it? Create a new database. 새 데이터베이스를 만듭니다. + + Path of the database. + 데이터베이스의 경로입니다. + Invalid decryption time %1. 잘못된 복호화 시간: %1. @@ -7796,158 +6769,6 @@ Do you want to overwrite it? Successfully created new database. 새 데이터베이스를 만들었습니다. - - Unset the password for the database. - 데이터베이스 암호를 설정 해제했습니다. - - - Unset the key file for the database. - 데이터베이스 키 파일을 설정 해제했습니다. - - - Edit a database. - 데이터베이스를 편집합니다. - - - Cannot use %1 and %2 at the same time. - %1와(과) %2을(를) 동시에 사용할 수 없습니다. - - - Could not change the database key. - 데이터베이스 키를 변경할 수 없습니다. - - - Database was not modified. - 데이터베이스가 수정되지 않았습니다. - - - Writing the database failed: %1 - 데이터베이스에기록할 수 없음: %1 - - - Successfully edited the database. - 데이터베이스를 편집했습니다. - - - Cannot remove password: The database does not have a password. - 암호를 삭제할 수 없음: 데이터베이스에 암호가 설정되어 있지 않습니다. - - - Cannot remove file key: The database does not have a file key. - 키를 삭제할 수 없음: 데이터베이스에 파일 키가 설정되어 있지 않습니다. - - - Loading the new key file failed: %1 - 새 키 파일 불러오기 실패: %1 - - - Found unexpected Key type %1 - 예상하지 못한 키 형식 %1 - - - Cannot remove all the keys from a database. - 데이터베이스에서 모든 키를 삭제할 수 없습니다. - - - Show a database's information. - 데이터베이스 정보를 표시합니다. - - - UUID: - UUID: - - - Name: - 이름: - - - Description: - 설명: - - - Cipher: - 암호화: - - - KDF: - KDF: - - - Recycle bin is enabled. - 휴지통이 활성화되었습니다. - - - Recycle bin is not enabled. - 휴지통이 비활성화되었습니다. - - - Location - 위치 - - - Database created - 데이터베이스 생성됨 - - - Last saved - 마지막 저장 - - - Unsaved changes - 저장하지 않은 변경 사항 - - - yes - - - - no - 아니요 - - - Number of groups - 그룹 개수 - - - Number of entries - 항목 개수 - - - Number of expired entries - 내보낸 항목 개수 - - - Unique passwords - 중복되지 않는 암호 - - - Non-unique passwords - 중복된 암호 - - - Maximum password reuse - 최대 암호 재사용 - - - Number of short passwords - 짧은 암호 개수 - - - Number of weak passwords - 약한 암호 개수 - - - Entries excluded from reports - 보고서에서 제외된 항목 - - - Average password length - 평균 암호 길이 - - - %1 characters - %1자 - Word count for the diceware passphrase. 주사위 암호 단어 개수입니다. @@ -7971,6 +6792,10 @@ Do you want to overwrite it? Invalid word count %1 잘못된 단어 개수 %1 + + The word list is too small (< 1000 items) + 단어 목록이 너무 작음(1000개 미만) + Title for the entry. 항목의 제목입니다. @@ -7995,6 +6820,10 @@ Do you want to overwrite it? Enter new password for entry: 항목의 새로운 암호 입력: + + Writing the database failed: %1 + 데이터베이스에기록할 수 없음: %1 + Successfully edited entry %1. 항목 %1을(를) 편집했습니다. @@ -8115,6 +6944,10 @@ Do you want to overwrite it? Exit interactive mode. 대화형 모드를 종료합니다. + + Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. + 내보낼 때 사용할 형식입니다. 'xml', 'csv'를 사용할 수 있으며 기본값은 'xml'입니다. + Exports the content of a database to standard output in the specified format. 데이터베이스 내용을 지정한 형식으로 표준 출력으로 내보냅니다. @@ -8215,6 +7048,106 @@ Do you want to overwrite it? Successfully imported database. 데이터베이스를 가져왔습니다. + + Show a database's information. + 데이터베이스 정보를 표시합니다. + + + UUID: + UUID: + + + Name: + 이름: + + + Description: + 설명: + + + Cipher: + 암호화: + + + KDF: + KDF: + + + Recycle bin is enabled. + 휴지통이 활성화되었습니다. + + + Recycle bin is not enabled. + 휴지통이 비활성화되었습니다. + + + Location + 위치 + + + Database created + 데이터베이스 생성됨 + + + Last saved + 마지막 저장 + + + Unsaved changes + 저장하지 않은 변경 사항 + + + yes + + + + no + 아니요 + + + Number of groups + 그룹 개수 + + + Number of entries + 항목 개수 + + + Number of expired entries + 내보낸 항목 개수 + + + Unique passwords + 중복되지 않는 암호 + + + Non-unique passwords + 중복된 암호 + + + Maximum password reuse + 최대 암호 재사용 + + + Number of short passwords + 짧은 암호 개수 + + + Number of weak passwords + 약한 암호 개수 + + + Entries excluded from reports + 보고서에서 제외된 항목 + + + Average password length + 평균 암호 길이 + + + %1 characters + %1자 + Unknown command %1 알 수 없는 명령 %1 @@ -8263,7 +7196,7 @@ Available commands: Use the same credentials for both database files. - 두 데이터베이스 파일에 같은 자격 증명을 사용합니다. + 두 데이터베이스 파일에 같은 인증 정보를 사용합니다. Key file of the database to merge from. @@ -8387,10 +7320,6 @@ Available commands: Show the protected attributes in clear text. 보호된 속성을 평문으로 표시합니다. - - Show all the attributes of the entry. - 항목의 모든 속성을 표시합니다. - Show the attachments of the entry. 항목의 첨부를 표시합니다. @@ -8461,10 +7390,6 @@ Please consider generating a new key file. Invalid YubiKey serial %1 잘못된 YubiKey 일련 번호 %1 - - Please present or touch your YubiKey to continue. - 계속 진행하려면 YubiKey를 연결하거나 버튼을 누르십시오... - Enter password to encrypt database (optional): 데이터베이스를 암호화할 암호 입력(선택 사항): @@ -8653,7 +7578,7 @@ CPU 아키텍처: %2 Botan library must be at least %1, found %2.%3.%4 - Botan 라이브러리의 최소 필요 버전은 %1이지만 %2.%3.%4 버전이 설치되어 있음 + Cryptographic libraries: @@ -8703,6 +7628,18 @@ CPU 아키텍처: %2 file empty 파일이 비어 있음 + + malformed string + 잘못된 문자열 + + + missing closing quote + 닫는 따옴표 없음 + + + %1: (row, col) %2,%3 + %1: (줄, 칸) %2, %3 + AES 256-bit AES 256비트 @@ -8881,6 +7818,14 @@ CPU 아키텍처: %2 read password of the database from stdin 표준 입력에서 데이터베이스 암호 읽기 + + allow app screen recordering and screenshots + 앱 화면 녹화와 스크린샷 허용 + + + Locked databases. + 데이터베이스를 잠갔습니다. + Database failed to lock. 데이터베이스를 잠글 수 없습니다. @@ -8889,10 +7834,6 @@ CPU 아키텍처: %2 Another instance of KeePassXC is already running. 다른 KeePassXC 인스턴스가 이미 실행 중입니다. - - KeePassXC is not running. No open database to lock - KeePassXC가 실행 중이 아닙니다. 잠글 데이터베이스가 열리지 않았음 - Fatal error while testing the cryptographic functions. 암호화 함수를 시험하는 중 오류가 발생하였습니다. @@ -8917,7 +7858,7 @@ CPU 아키텍처: %2 Failed to create Windows Hello credential. - Windows Hello 자격 증명을 생성할 수 없습니다. + Windows Hello 인증 정보를 생성할 수 없습니다. Failed to sign challenge using Windows Hello. @@ -8925,312 +7866,81 @@ CPU 아키텍처: %2 Warning: Failed to block screenshot capture on a top-level window. - 경고: 최상위 창의 화면 캡처를 차단할 수 없습니다. + Invalid Cipher - 잘못된 암호화 + Invalid KDF - 잘못된 KDF + - Access to all entries is denied - 모든 항목 접근이 거부됨 + Please present or touch your YubiKey to continue. + 계속 진행하려면 YubiKey를 연결하거나 버튼을 누르십시오... - allow screenshots and app recording (Windows/macOS) - 스크린샷과 앱 녹화 허용(Windows/macOS) + Show all the attributes of the entry. + + + + Edit a database. + + + + Could not change the database key. + + + + Database was not modified. + + + + Successfully edited the database. + + + + Loading the new key file failed: %1 + + + + Unset the password for the database. + + + + Unset the key file for the database. + + + + Cannot use %1 and %2 at the same time. + + + + Cannot remove all the keys from a database. + + + + Cannot remove password: The database does not have a password. + + + + Cannot remove file key: The database does not have a file key. + + + + Found unexpected Key type %1 + Set the key file for the database. -This option is deprecated, use --set-key-file instead. - 데이터베이스의 키 파일을 선택합니다. -이 옵션은 삭제될 예정입니다. --set-key-file 옵션을 대신 사용하십시오. - - - Databases have been locked. - 데이터베이스가 잠겼습니다. - - - Attestation not supported - 증명을 지원하지 않음 - - - Credential is excluded - 자격 증명이 제외됨 - - - Passkeys request canceled - 패스키 요청 취소됨 - - - Invalid user verification - 잘못된 사용자 검증 - - - Empty public key - 공개 키가 비어 있음 - - - Invalid URL provided - 잘못된 URL 지정됨 - - - Passkeys - 패스키 - - - AES initialization failed - AES 초기화 실패 - - - AES encrypt failed - AES 암호화 실패 - - - Failed to store in Linux Keyring - 리눅스 키링에 저장할 수 없음 - - - Polkit returned an error: %1 - Polkit에서 오류를 반환함: %1 - - - Could not locate key in keyring - 키링에서 키를 찾을 수 없음 - - - Could not read key in keyring - 키링에서 키를 읽을 수 없음 - - - AES decrypt failed - AES 복호화 실패 - - - No Polkit authentication agent was available - Polkit 인증 에이전트를 사용할 수 없음 - - - Polkit authorization failed - Polkit 인증 실패 - - - No Quick Unlock provider is available - 빠른 잠금 해제 공급자를 사용할 수 없음 - - - Failed to init KeePassXC crypto. - KeePassXC 암호화를 초기화할 수 없습니다. - - - Failed to encrypt key data. - 키 데이터를 암호화할 수 없습니다. - - - Failed to get Windows Hello credential. - Windows Hello 자격 증명을 가져올 수 없습니다. - - - Failed to decrypt key data. - 키 데이터를 복호화할 수 없습니다. - - - Origin is empty or not allowed - 원본이 비어 있거나 허용되지 않음 - - - Effective domain is not a valid domain - 유효 도메인이 올바른 도메인이 아님 - - - Origin and RP ID do not match - 원본과 RP ID가 일치하지 않음 - - - No supported algorithms were provided - 지원하는 알고리즘을 제시하지 않았음 - - - Wait for timer to expire - 타이머 만료 대기 중 - - - Challenge is shorter than required minimum length - Challenge가 필요한 최소 길이보다 짧음 - - - user.id does not match the required length - user.id가 필요한 길이와 일치하지 않음 - - - Favorite - Tag for favorite entries - 책갈피 - - - File does not exist. - 파일이 존재하지 않습니다. - - - Cannot open file: %1 - 파일을 열 수 없음: %1 - - - Cannot parse file: %1 at position %2 - 파일을 해석할 수 없음: %1, 위치 %2 - - - Failed to decrypt json file: %1 - JSON 파일을 복호화할 수 없음: %1 - - - Invalid encKeyValidation field - 잘못된 encKeyValidation 필드 - - - Invalid cipher list within encKeyValidation field - encKeyValidation 필드에 잘못된 암호화 목록이 있음 - - - Wrong password - 암호가 잘못됨 - - - Invalid encrypted data field - 잘못된 암호화된 데이터 필드 - - - Invalid cipher list within encrypted data field - 암호화된 데이터 필드에 잘못된 암호화 목록이 있음 - - - Cannot initialize cipher - 암호화를 초기화할 수 없음 - - - Cannot decrypt data - 데이터를 복호화할 수 없음 - - - Bitwarden Import - Bitwarden 가져오기 - - - Archived - Tag for archived entries - 보관됨 - - - Invalid 1PUX file format: Not a valid ZIP file. - 잘못된 1PUX 파일 형식: 올바른 ZIP 파일이 아닙니다. - - - Invalid 1PUX file format: Missing export.data - 잘못된 1PUX 파일 형식: export.data 파일이 없음 - - - 1Password Import - 1Password 가져오기 - - - Enter Shortcut - 단축키 입력 - - - Action - 동작 - - - Shortcuts - 단축키 - - - Unknown passkeys error - 알 수 없는 패스키 오류 - - - Invalid KDF iterations, cannot decrypt json file - 잘못된 KDF 반복 횟수, JSON 파일을 복호화할 수 없음 - - - Unsupported format, ensure your Bitwarden export is password-protected - 지원하지 않는 형식, Bitwarden 내보내기 파일이 암호로 보호되었는지 확인하십시오 - - - Only PBKDF and Argon2 are supported, cannot decrypt json file - PBKDF와 Argon2만 지원함, JSON 파일을 복호화할 수 없음 - - - Reset Shortcuts - 단축키 초기화 - - - Double click an action to change its shortcut - 동작을 두 번 클릭해서 단축키 변경 - - - Filter... - 필터... - - - Shortcut Conflict - 단축키 충돌 - - - Shortcut %1 conflicts with '%2'. Overwrite shortcut? - %1 단축키가 '%2'와(과) 충돌합니다. 단축키를 덮어쓰시겠습니까? - - - Cannot generate valid passphrases because the wordlist is too short +This options is deprecated, use --set-key-file instead. - Encrypted files are not supported. + KeePassXC is not running. No open database to lock - - Proton Pass Import - - - - Delete plugin data? - 플러그인 데이터를 삭제하시겠습니까? - - - Delete plugin data from Entry(s)? - - - - Passkey - 패스키 - - - Format to use when exporting. Available choices are 'xml', 'csv' or 'html'. Defaults to 'xml'. - - - - start minimized to the system tray - - - - malformed string, possible unescaped delimiter - - - - missing closing delimiter - - - - %1, row: %2, column: %3 - - - - Tags - 태그 - QtIOCompressor @@ -9266,39 +7976,20 @@ This option is deprecated, use --set-key-file instead. 내부 zlib 오류: - - RemoteHandler - - Command `%1` did not finish in time. Process was killed. - `%1` 명령이 시간 내에 완료되지 않았습니다. 프로세스가 종료되었습니다. - - - Failed to upload merged database. Command `%1` did not finish in time. Process was killed. - 병합된 데이터베이스를 업로드하지 못했습니다. `%1` 명령이 시간 내에 완료되지 않았습니다. 프로세스가 종료되었습니다. - - - Invalid download parameters provided. - 잘못된 다운로드 인자가 지정되었습니다. - - - Command `%1` failed to download database. - `%1` 명령으로 데이터베이스를 다운로드하지 못했습니다. - - - Invalid database pointer or upload parameters provided. - 잘못된 데이터베이스 포인터나 업로드 인자가 지정되었습니다. - - - Command `%1` exited with status code: %2 - `%1` 명령이 종료되면서 다음 상태 코드를 반환함: %2 - - - Failed to upload merged database. Command `%1` exited with status code: %2 - 병합된 데이터베이스를 업로드하지 못했습니다. `%1` 명령이 다음 상태 코드를 반환함: %2 - - ReportsWidgetBrowserStatistics + + Exclude expired entries from the report + 보고서에서 만료된 항목 제외 + + + Show only entries which have URL set + URL이 지정된 항목만 표시 + + + Show only entries which have browser settings in custom data + 사용자 정의 데이터에 브라우저 설정이 있는 항목만 표시 + Double-click entries to edit. 항목을 두 번 클릭하면 편집할 수 있습니다. @@ -9363,53 +8054,44 @@ This option is deprecated, use --set-key-file instead. Exclude from reports 보고서에서 제외 - - Expire Entry(s)… - - - - Only show entries that have a URL - URL이 있는 항목만 표시 - - - Only show entries that have been explicitly allowed or denied - 명시적으로 허용되었거나 거부된 항목만 표시 - - - Show expired entries - 만료된 항목 표시 - - - (Expired) - (만료됨) - - - Delete plugin data from Entry(s)… - - ReportsWidgetHealthcheck - Show expired entries - 만료된 항목 표시 + Exclude expired entries from the report + 보고서에서 만료된 항목 제외 - (Expired) - (만료됨) + Also show entries that have been excluded from reports + 보고서에서 제외된 항목도 표시 Hover over reason to show additional details. Double-click entries to edit. 이유 위에 마우스를 올려 두면 자세한 정보를 표시합니다. 항목을 두 번 클릭하면 편집할 수 있습니다. + + Bad + Password quality + 나쁨 + Bad — password must be changed 나쁨 — 암호를 변경해야 함 + + Poor + Password quality + 매우 약함 + Poor — password should be changed 매우 약함 — 암호 변경을 고려해야 함 + + Weak + Password quality + 약함 + Weak — consider changing the password 약함 — 암호 변경을 권장함 @@ -9458,14 +8140,6 @@ This option is deprecated, use --set-key-file instead. Exclude from reports 보고서에서 제외 - - Expire Entry(s)… - - - - Show entries that have been excluded from reports - 보고서에서 제외된 항목 표시 - ReportsWidgetHibp @@ -9561,77 +8235,6 @@ This option is deprecated, use --set-key-file instead. Exclude from reports 보고서에서 제외 - - Expire Entry(s)… - - - - - ReportsWidgetPasskeys - - Export - 내보내기 - - - Import - 가져오기 - - - List of entry URLs - 항목 URL 목록 - - - Title - 제목 - - - Path - 경로 - - - Username - 사용자 이름 - - - URLs - URL - - - Edit Entry… - 항목 편집… - - - Delete Entry(s)… - 항목 삭제... - - - Relying Party - 의존하는 상대방 - - - Show expired entries - 만료된 항목 표시 - - - (Expired) - (만료됨) - - - Export Confirmation - 내보내기 확인 - - - The passkey file will be vulnerable to theft and unauthorized use, if left unsecured. Are you sure you want to continue? - 패스키 파일을 안전하게 보존하지 않으면 탈취 및 인증되지 않은 사용에 취약해질 수 있습니다. 계속 진행하시겠습니까? - - - Please wait, list of entries with passkeys is being updated… - 잠시 기다려 주십시오. 패스키가 있는 항목을 업데이트하는 중… - - - No entries with passkeys. - 패스키가 있는 항목이 없습니다. - ReportsWidgetStatistics @@ -9806,14 +8409,6 @@ This option is deprecated, use --set-key-file instead. No agent running, cannot list identities. 에이전트가 실행 중이지 않아서 식별자 목록을 표시할 수 없습니다. - - Failed to remove all SSH identities from agent. - - - - All SSH identities removed from agent. - - SearchHelpWidget @@ -9880,10 +8475,6 @@ This option is deprecated, use --set-key-file instead. Search Help 검색 도움말 - - Save Search - 검색 저장 - Search (%1)… Search placeholder text, %1 is the keyboard shortcut @@ -9897,6 +8488,10 @@ This option is deprecated, use --set-key-file instead. Limit search to selected group 지정한 그룹에서만 찾기 + + Save Search + + SettingsClientModel @@ -9958,10 +8553,34 @@ This option is deprecated, use --set-key-file instead. Confirm when passwords are retrieved by clients 클라이언트에서 암호를 가져갈 때 확인 + + <html><head/><body><p><span style=" + font-family:'-apple-system','BlinkMacSystemFont','Segoe UI','Helvetica','Arial','sans-serif','Apple Color + Emoji','Segoe UI Emoji'; font-size:14px; color:#24292e; background-color:#ffffff;">This setting does + not override disabling recycle bin prompts</span></p></body></html> + + <html><head/><body><p><span style=" + font-family:'-apple-system','BlinkMacSystemFont','Segoe UI','Helvetica','Arial','sans-serif','Apple Color + Emoji','Segoe UI Emoji'; font-size:14px; color:#24292e; background-color:#ffffff;">이 설정은 + 휴지통에 버리기 알림을 재정의하지 않습니다</span></p></body></html> + + Confirm when clients request entry deletion 클라이언트에서 항목 삭제를 요청할 때 확인 + + <html><head/><body><p>This improves compatibility with certain applications + which search for password without unlocking the database first.</p><p>But enabling this may also + crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a + different value set in applications.)</p></body></html> + + <html><head/><body><p>이 설정은 데이터베이스 잠금을 먼저 해제하지 않고 + 암호를 검색하는 일부 프로그램과의 호환성을 개선합니다.</p><p>한편 이 설정을 활성화하면 + 지정한 시간 제한 내에 데이터베이스 잠금을 해제할 수 없을 때 클라이언트가 충돌할 수도 있습니다.(대개 25초이나, + 프로그램에서 다른 값을 지정할 수도 있습니다.)</p></body></html> + + Prompt to unlock database before searching 검색 전에 데이터베이스 잠금 해제 묻기 @@ -9986,14 +8605,6 @@ This option is deprecated, use --set-key-file instead. Save current changes to activate the plugin and enable editing of this section. 플러그인을 활성화하고 이 부분 편집을 활성화하려면 변경 사항을 저장하십시오. - - <html><head/><body><p>This setting does not override disabling recycle bin prompts </p></body></html> - <html><head/><body><p>이 설정은 휴지통 프롬프트 비활성화를 재정의하지 않습니다 </p></body></html> - - - <html><head/><body><p>This improves compatibility with certain applications which search for password without unlocking the database first.</p><p>But enabling this may also crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a different value set in applications.) </p></body></html> - <html><head/><body><p>이 옵션은 데이터베이스의 잠금을 해제하지 않고 암호를 검색하는 프로그램과의 호환성을 개선합니다.</p><p>그러나 이 옵션을 사용하면 데이터베이스가 지정한 시간 내에 잠금 해제될 수 없을 때 클라이언트를 충돌시킬 수도 있습니다.(대개 25초, 프로그램에 따라서 다른 설정을 사용할 수도 있음) </p></body></html> - SettingsWidgetKeeShare @@ -10101,14 +8712,6 @@ This option is deprecated, use --set-key-file instead. TagModel - - Clear Search - 검색 비우기 - - - All Entries - 모든 항목 - Expired 만료됨 @@ -10117,24 +8720,32 @@ This option is deprecated, use --set-key-file instead. Weak Passwords 약한 암호 + + All Entries + + + + Clear Search + + TagView Remove Search - 검색 삭제 + Remove Tag - 태그 삭제 + Confirm Remove Tag - 태그 삭제 확인 + Remove tag "%1" from all entries in this database? - 이 데이터베이스에 있는 모든 항목에서 "%1" 태그를 삭제하시겠습니까? + @@ -10294,6 +8905,26 @@ Example: JBSWY3DPEHPK3PXP Start storing your passwords securely in a KeePassXC database KeePassXC 데이터베이스에 암호를 안전하게 저장하십시오 + + Create new database + 새 데이터베이스 만들기 + + + Open existing database + 기존 데이터베이스 열기 + + + Import from KeePass 1 + KeePass 1에서 가져오기 + + + Import from 1Password + 1Password에서 가져오기 + + + Import from CSV + CSV에서 가져오기 + Recent databases 최근 데이터베이스 @@ -10306,18 +8937,6 @@ Example: JBSWY3DPEHPK3PXP Welcome to KeePassXC %1 KeePassXC %1에 오신 것을 환영합니다 - - Create Database - 데이터베이스 만들기 - - - Open Database - 데이터베이스 열기 - - - Import File - 파일 가져오기 - WinUtils @@ -10334,8 +8953,31 @@ Example: JBSWY3DPEHPK3PXP 전역 단축키를 등록할 수 없음 + + WindowsHello + + Failed to init KeePassXC crypto. + KeePassXC 암호화를 초기화할 수 없습니다. + + + Failed to encrypt key data. + 키 데이터를 암호화할 수 없습니다. + + + Failed to get Windows Hello credential. + Windows Hello 인증 정보를 가져올 수 없습니다. + + + Failed to decrypt key data. + 키 데이터를 복호화할 수 없습니다. + + YubiKey + + %1 No interface, slot %2 + %1 인터페이스 없음, 슬롯 %2 + General: 일반: @@ -10347,6 +8989,14 @@ Example: JBSWY3DPEHPK3PXP YubiKeyEditWidget + + Refresh hardware tokens + 하드웨어 토큰 새로 고침 + + + Refresh + 새로 고침 + Hardware key slot selection 하드웨어 키 슬롯 선택 @@ -10379,6 +9029,10 @@ Example: JBSWY3DPEHPK3PXP Challenge-Response set, click to change or remove Challenge-Response 설정됨, 클릭해서 변경하거나 삭제 + + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + <p><a href="https://www.yubico.com/">YubiKey</a>나 <a href="https://onlykey.io">OnlyKey</a>를 가지고 있다면 추가 보안에 사용할 수 있습니다.</p><p>장치 슬롯 중 하나를 <a href="https://www.yubico.com/products/services-software/challenge-response/">HMAC-SHA1 Challenge-Response 모드</a>로 프로그래밍해야 합니다.</p> + Detecting hardware keys… 하드웨어 키 인식 중... @@ -10387,25 +9041,28 @@ Example: JBSWY3DPEHPK3PXP No hardware keys detected 인식된 하드웨어 키 없음 + + + YubiKeyInterface - Refresh hardware keys - 하드웨어 키 새로 고침 - - - <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed with <a href="https://keepassxc.org/docs/#faq-yubikey-howto">Challenge-Response</a>.</p> - - - - Hardware keys found, but no slots are configured - + %1 Invalid slot specified - %2 + %1 잘못된 슬롯 지정됨 - %2 YubiKeyInterfacePCSC + + (PCSC) %1 [%2] Challenge-Response - Slot %3 + (PCSC) %1 [%2] Challenge-Response - 슬롯 %3 + The YubiKey PCSC interface has not been initialized. YubiKey PCSC 인터페이스가 초기화되지 않았습니다. + + Hardware key is currently in use. + 하드웨어 키가 사용 중입니다. + Could not find or access hardware key with serial number %1. Please present it to continue. 일련 번호가 %1인 하드웨어 키를 찾을 수 없거나 접근할 수 없습니다. 계속 진행하려면 연결하십시오. @@ -10422,21 +9079,6 @@ Example: JBSWY3DPEHPK3PXP Failed to complete a challenge-response, the PCSC error code was: %1 Challenge-Response를 완료할 수 없습니다. PCSC 오류 코드: %1 - - (NFC) %1 [%2] - Slot %3, %4 - YubiKey display fields - (NFC) %1 [%2] - 슬롯 %3, %4 - - - Press - USB Challenge-Response Key interaction request - 누르기 - - - Passive - USB Challenge-Response Key no interaction required - 수동적 - YubiKeyInterfaceUSB @@ -10444,6 +9086,14 @@ Example: JBSWY3DPEHPK3PXP Unknown 알 수 없음 + + (USB) %1 [%2] Configured Slot - %3 + (USB) %1 [%2] 설정된 슬롯 - %3 + + + (USB) %1 [%2] Challenge-Response - Slot %3 - %4 + (USB) %1 [%2] Challenge-Response - 슬롯 %3 - %4 + Press USB Challenge-Response Key interaction request @@ -10458,6 +9108,10 @@ Example: JBSWY3DPEHPK3PXP The YubiKey USB interface has not been initialized. YubiKey USB 인터페이스가 초기화되지 않았습니다. + + Hardware key is currently in use. + 하드웨어 키가 사용 중입니다. + Could not find hardware key with serial number %1. Please plug it in to continue. 일련 번호가 %1인 하드웨어 키를 찾을 수 없습니다. 계속 진행하려면 연결하십시오. @@ -10474,15 +9128,5 @@ Example: JBSWY3DPEHPK3PXP Failed to complete a challenge-response, the specific error was: %1 Challenge-Response를 완료할 수 없습니다. 오류: %1 - - %1 [%2] - Slot %3 - YubiKey NEO display fields - %1 [%2] - 슬롯 %3 - - - %1 [%2] - Slot %3, %4 - YubiKey display fields - %1 [%2] - 슬롯 %3, %4 - \ No newline at end of file diff --git a/share/translations/keepassxc_lt.ts b/share/translations/keepassxc_lt.ts index 42f16efef..601988b63 100644 --- a/share/translations/keepassxc_lt.ts +++ b/share/translations/keepassxc_lt.ts @@ -11,27 +11,27 @@ Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> - Praneškite apie klaidas adresu: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> + Apie klaidas praneškite adresu: <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 platinamas pagal GNU bendrosios viešosios licencijos (GPL) 2 versijos arba (jūsų pasirinkimu) 3 versijos sąlygas. + KeePassXC yra platinama GNU Bendrosios Viešosios Licencijos (GPL) versijos 2 arba (jūsų pasirinkimu) versijos 3 sąlygomis. Project Maintainers: - Projekto prižiūrėtojai: + Projektą prižiūri: Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. - Ypatinga "KeePassXC" komandos padėka debfx už originalaus "KeePassX" sukūrimą. + Ypatinga padėka nuo KeePassXC komandos yra skiriama debfx už pradinės KeePassX programos sukūrimą. Contributors - Autoriai + Talkininkai <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> - <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">Peržiūrėkite "GitHub" indėlį</a> + <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">Žiūrėti talkinimus GitHub puslapyje</a> Debug Info @@ -39,18 +39,18 @@ Include the following information whenever you report a bug: - Kai pranešate apie klaidą, įtraukite šią informaciją: + Pranešdami apie klaidą, visuomet pateikite ir šią informaciją: Copy to clipboard - Kopijuoti į mainų sritį + Kopijuoti į iškarpinę AccessControlDialog KeePassXC - Access Request - "KeePassXC" - prieigos užklausa + KeePassXC - Prieigos Užklausa Non-existing/inaccessible executable path. Please double-check the client is legit. @@ -70,7 +70,7 @@ Executable - Paleidėjas + Vykdomoji programa Command Line @@ -80,10 +80,6 @@ Details Išsamiau - - Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. - Jūsų sprendimas bus įsimintas tol, kol užklausą pateikęs klientas IR KeePassXC yra paleisti. - Remember Prisiminti @@ -92,6 +88,10 @@ Allow Selected Leisti Pasirinktą + + Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. + Jūsų sprendimas bus įsimintas tol, kol užklausą pateikęs klientas IR KeePassXC yra paleisti. + Deny All && Future Neleisti visiems && ateityje @@ -122,10 +122,6 @@ Use OpenSSH Naudoti OpenSSH - - Use both agents - Naudoti abu agentus - SSH_AUTH_SOCK override Nepaisyti SSH_AUTH_SOCK @@ -148,11 +144,15 @@ No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. - Nėra SSH Agento lizdo. Įsitikinkite, kad SSH_AUTH_SOCK aplinkos kintamasis egzistuoja, arba nustatykite jį pakeičiantį kintamąjį. + Nėra SSH agento lizdo. Įsitikinkite, kad SSH_AUTH_SOCK aplinkos kintamasis egzistuoja, arba nustatykite jį pakeičiantį kintamąjį. SSH Agent connection is working! - SSH Agento ryšys veikia! + SSH agento ryšys veikia! + + + Use both agents + Naudoti abu agentus @@ -169,10 +169,6 @@ Security Saugumas - - This setting cannot be enabled when minimize on unlock is enabled. - Šis nustatymas negali būti įjungtas, kai įjungtas minimizavimas atrakinimo metu. - Access error for config file %1 Konfigūracijos failo %1 prieigos klaida @@ -195,7 +191,7 @@ Follow style - Sekti stiliumi + Sekti stilių Monochrome @@ -217,49 +213,21 @@ You must restart the application to set the new language. Would you like to restart now? Norėdami nustatyti naują kalbą, turite iš naujo paleisti programą. Ar norite iš naujo paleisti programą dabar? + + Reset Settings? + Atstatyti nustatymus? + + + Are you sure you want to reset all general and security settings to default? + Ar tikrai norite atstatyti kaip buvo visus bendruosius ir saugumo nustatymus? + Select backup storage directory Pasirinkite atsarginių kopijų saugojimo katalogą - Confirm Reset - - - - Are you sure you want to reset all settings to default? - Ar norite atstatyti visus nustatymus į numatytąsias reikšmes? - - - Import KeePassXC Settings - Importuoti KeePassXC nustatymus - - - Failed to import settings from %1, not a valid settings file. - - - - Export KeePassXC Settings - Eksportuoti KeePassXC nustatymus - - - Small - - - - Normal - - - - Medium - - - - Large - - - - Custom - + This setting cannot be enabled when minimize on unlock is enabled. + Šis nustatymas negali būti įjungtas, kai įjungtas minimizavimas atrakinimo metu. @@ -292,10 +260,6 @@ Remember previously used databases Prisiminti anksčiau naudotas duomenų bazes - - recent files - naujausi failai - Load previously open databases on startup Įkelti anksčiau atidarytas duomenų bazes paleidimo metu @@ -312,6 +276,25 @@ Include beta releases when checking for updates Įtraukti beta versijas, kai tikrinami atnaujinimai + + On database unlock, show entries that + Duomenų bazės atrakinimo metu rodyti įrašus, kurie + + + have expired + On database unlock, show entries that... + nustojo galioti + + + days + On database unlock, show entries that will expire within %1 days + dienos + + + will expire within + On database unlock, show entries that... + nustos galioti per + File Management Failų tvarkymas @@ -336,10 +319,22 @@ Backup database file before saving Išsaugoti duomenų bazę prieš išsaugant + + Backup destination + Atsarginės kopijos darymo vieta + + + Specifies the database backup file location. Occurrences of "{DB_FILENAME}" are replaced with the filename of the saved database without extension. {TIME:<format>} is replaced with the backup time, see https://doc.qt.io/qt-5/qdatetime.html#toString. <format> defaults to format string "dd_MM_yyyy_hh-mm-ss". + Nurodo duomenų bazės atsarginės kopijos failo vietą. Vietoj "{DB_FILENAME}" įrašomas išsaugotos duomenų bazės failo pavadinimas be plėtinio. {TIME:<format>} pakeičiamas atsarginės kopijos darymo laiku, žr. https://doc.qt.io/qt-5/qdatetime.html#toString. <format> Pagal numatytuosius nustatymus naudojama formato eilutė "dd_MM_yyyy_hh-mm-ss". + {DB_FILENAME}.old.kdbx {DB_FILENAME}.old.kdbx + + Choose... + Pasirinkti... + Use alternative saving method (may solve problems with Dropbox, Google Drive, GVFS, etc.) Naudoti alternatyvų išsaugojimo būdą (gali išspręsti Dropbox, Google Drive, GVFS ir kt. problemas). @@ -417,10 +412,6 @@ Toolbar button style: Užduotinės mygtukų stilius - - Show passwords in color - Rodyti slaptažodžius spalvotai - Use monospaced font for notes Užrašams naudoti vienodo pločio šriftą @@ -447,7 +438,7 @@ Reset settings to default… - Nustatyti nustatymus atgal į numatytuosius + Nustatyti nustatymus atgal į numatytuosius... Auto-Type @@ -455,11 +446,11 @@ Use entry title to match windows for global Auto-Type - Naudoti įrašo antraštę, norint sutapatinti langus visuotiniam Automatiniam rinkimui + 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 + Naudoti įrašo URL, norint sutapatinti langus visuotiniam automatiniam rinkimui Always ask before performing Auto-Type @@ -467,7 +458,7 @@ Hide expired entries from Auto-Type - Paslėpti nebegaliojančius įrašus nuo Auto-Įvedimo + Slėpti nebegaliojančius įrašus nuo automatinio rinkimo Re-lock previously locked database after performing Auto-Type @@ -475,7 +466,7 @@ Auto-Type start delay: - Auto-Įvedimo paleidimo uždelsimas: + Automatinio rinkimo paleidimo uždelsimas: Global Auto-Type shortcut: @@ -483,7 +474,7 @@ Auto-type start delay milliseconds - Auto-įvedimo paleidimo uždelsimas milisekundėmis + Automatinio rinkimo paleidimo uždelsimas milisekundėmis ms @@ -492,7 +483,7 @@ Auto-Type typing delay: - Auto-Įvedimo delsa + Automatinio rinkimo rašymo uždelsimas: Global auto-type shortcut @@ -507,69 +498,12 @@ Prisiminti paskutinį įvestą įrašą: - On database unlock, show entries that will expire within - + recent files + naujausi failai - On database unlock, show entries that will expire within - - - - days - number of days warning for password expiration - dienos - - - Destination format: - Paskirties formatas: - - - <html><head/><body><p><span style=" font-weight:600;">{DB_FILENAME}</span> is replaced with the filename of the saved database without extension</p><p><span style=" font-weight:600;">{TIME:&lt;format&gt;}</span> is replaced with the specified time format (default: dd_MM_yyyy_hh-mm-ss)</p><p>See the User Guide for more details</p></body></html> - - - - Choose folder... - - - - Show confirmation before moving entries to recycle bin - - - - Copy data on double clicking field in entry view - - - - Show toolbar - Rodyti įrankių juostą - - - Show the menu bar by pressing the Alt key - - - - Show menubar - Rodyti meniu juostą - - - Import settings… - Importuoti nustatymus… - - - Export settings… - Eksportuoti nustatymus… - - - Open browser on double clicking URL field in entry view - - - - Font size: - Šrifto dydis: - - - Font size selection - Šrifto dydžio pasirinkimas + Show passwords in color + Rodyti slaptažodžius spalvotai @@ -624,6 +558,10 @@ Lock databases after minimizing the window Suskleidus langą, užrakinti duomenų bazes + + Require password repeat when it is visible + Reikalauti pakartoti slaptažodį, kai jis yra matomas + Hide passwords when editing them Slėpti slaptažodžius juos redaguojant @@ -636,6 +574,18 @@ Hide passwords in the entry preview panel Paslėpti slaptažodžius įrašo peržiūros skydelyje + + Hide entry notes by default + Pagal numatymą, slėpti įrašo pastabas + + + Move entries to recycle bin without confirmation + Perkelti įrašus į šiukšliadėžę be patvirtinimo + + + Enable double click to copy the username/password entry columns + Įgalinkite dvigubą paspaudimą, kad nukopijuotumėte slapyvardžio ir slaptažodžio įrašų stulpelius + Privacy Privatumas @@ -648,18 +598,6 @@ Hide TOTP in the entry preview panel - - Lock databases when switching user - Užrakinti duomenų bazes perjungiant naudotoją - - - Lock Options - - - - Hide notes in the entry preview panel - - AutoType @@ -669,7 +607,7 @@ Auto-Type Error - Auto-Įvedimo Klaida + Automatinio rinkimo klaida Permission Required @@ -704,13 +642,27 @@ Aptiktas labai ilgas vėlavimas, maksimali trukmė %1: %2 - Entry does not have attribute for PICKCHARS: %1 - Įrašas neturi PICKCHARS atributo: %1 + Invalid conversion type: %1 + Netinkamas vertimo tipas: %1 + + + Invalid conversion syntax: %1 + Netinkama vertimo sintaksė: %1 + + + Invalid regular expression syntax %1 +%2 + Netinkama regexp sintaksė %1 + Invalid placeholder: %1 Netinkamas žymeklis: %1 + + Entry does not have attribute for PICKCHARS: %1 + + AutoTypeAssociationsModel @@ -752,6 +704,10 @@ AutoTypePlatformX11 + + Trying to send invalid keysym. + Keysym netinkamas + Sequence aborted: Caps Lock is on Seka nutraukta: įjungtas Caps Lock @@ -764,10 +720,6 @@ Unable to get valid keycode for key: Nepavyksta gauti galiojančio rakto kodo - - Trying to send invalid keyboard symbol. - - AutoTypeSelectDialog @@ -786,12 +738,12 @@ Ctrl+1 - Type username<br/> Ctrl+2 - Type password<br/> Ctrl+3 - Type TOTP<br/> Ctrl+4 - Use Virtual Keyboard (Windows Only)</p> - Galite naudoti išplėstines paieškos užklausas, kad rastumėte bet kokį įrašą atvirose duomenų bazėse. Naudingi šie trumpieji klavišai: -Ctrl+F - perjungti paiešką duomenų bazėje -Ctrl+1 - įveskite vartotojo vardą -Ctrl+2 - įveskite slaptažodį -Ctrl+3 - Įveskite TOTP -Ctrl+4 - naudoti virtualią klaviatūrą (tik Windows) + <p>Galite naudoti išplėstines paieškos užklausas, kad rastumėte bet kokį įrašą atvirose duomenų bazėse. Naudingi šie trumpieji klavišai:<br/> +Ctrl+F - perjungti paiešką duomenų bazėje<br/> +Ctrl+1 - įveskite vartotojo vardą<br/> +Ctrl+2 - įveskite slaptažodį<br/> +Ctrl+3 - Įveskite TOTP<br/> +Ctrl+4 - naudoti virtualią klaviatūrą (tik Windows)</p> Search all open databases @@ -803,7 +755,7 @@ Ctrl+4 - naudoti virtualią klaviatūrą (tik Windows) Type Sequence - Rašymo Seka + Įvedimo Seka Cancel @@ -811,7 +763,7 @@ Ctrl+4 - naudoti virtualią klaviatūrą (tik Windows) Type {USERNAME} - Rašyti {USERNAME} + Įvesti {USERNAME} Type {PASSWORD} @@ -842,7 +794,7 @@ Ctrl+4 - naudoti virtualią klaviatūrą (tik Windows) BrowserAccessControlDialog KeePassXC - Browser Access Request - KeePassXC - Naršyklės prieigos užklausa + KeePassXC - Naršyklės Prieigos Užklausa %1 is requesting access to the following entries: @@ -872,13 +824,13 @@ Ctrl+4 - naudoti virtualią klaviatūrą (tik Windows) Disable for this site Išjungti šiai svetainei - - Undo - Atšaukti - BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + KeePassXC-Browser Išsaugoti įrašą + Ok Gerai @@ -893,73 +845,13 @@ Please select the correct database for saving credentials. Turite atvertas kelias duomenų bazes. Prisijungimo duomenų įrašymui, pasirinkite teisingą duomenų bazę. - - KeePassXC - Select Database - - - - - BrowserPasskeysConfirmationDialog - - Cancel - Atsisakyti - - - Update - Atnaujinti - - - Authenticate - - - - Register new - - - - Register - - - - Timeout in <b>%n</b> seconds... - - - - Relying Party: %1 - - - - Username: %1 - Naudotojo vardas: %1 - - - KeePassXC - Passkey credentials - - - - Add to existing entry - - - - Existing passkey found. -Do you want to register a new passkey for: - - - - Select the existing passkey and press Update to replace it. - - - - Authenticate passkey credentials for: - - - - Do you want to register a passkey for: - - BrowserService + + KeePassXC: Create a new group + KeePassXC: Sukurti naują grupę + A request for creating a new group "%1" has been received. Do you want to create this group? @@ -968,6 +860,10 @@ Do you want to create this group? Ar norite sukurti šią grupę? + + KeePassXC: New key association request + KeePassXC: Naujo rakto susiejimo užklausa + You have received an association request for the following database: %1 @@ -984,75 +880,81 @@ chrome-laptop. Save and allow access Įrašyti ir leisti prieigą + + KeePassXC: Overwrite existing key? + KeePassXC: Perrašyti esamą raktą? + A shared encryption key with the name "%1" already exists. Do you want to overwrite it? Bendrinamas šifravimo raktas, pavadinimu "%1" jau yra. Ar norite jį perrašyti? + + KeePassXC: Update Entry + KeePassXC: Atnaujinti įrašą + Do you want to update the information in %1 - %2? Ar norite atnaujinti informaciją ties %1 - %2? + + KeePassXC: Delete entry + KeePassXC: Ištrinti įrašą + A request for deleting entry "%1" has been received. Do you want to delete the entry? Gauta užklausa ištrinti įrašą "%1". -Ar norite ištrinti įrašą? +Ar norite ištrinti įrašą? + - %1 (Passkey) - + Converting attributes to custom data… + Konvertuojami požymiai į tinkintus duomenis… - KeePassXC - Create a new group - + Abort + Nutraukti - Disable - Išjungti + KeePassXC: Converted KeePassHTTP attributes + KeePassXC: Konvertuoti KeePassHTTP požymiai - KeePassXC - Overwrite existing key? - + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + Sėkmingai konvertuoti požymiai iš %1 įrašo(-ų). +Perkelta %2 raktų į tinkintus duomenis. + + + Successfully moved %n keys to custom data. + Sėkmingai perkeltas %n raktas į pasirinktinius duomenis.Sėkmingai perkelta %n raktų į pasirinktinius duomenis.Sėkmingai perkelta %n raktų į pasirinktinius duomenis.Sėkmingai perkelta %n raktų į pasirinktinius duomenis. - KeePassXC - Update Entry - + KeePassXC: No entry with KeePassHTTP attributes found! + KeePassXC: Nerasta jokio įrašo su KeePassHTTP požymiais! - KeePassXC - Delete entry - + The active database does not contain an entry with KeePassHTTP attributes. + Aktyvioje duomenų bazėje nėra įrašo su KeePassHTTP požymiais. - KeePassXC - New key association request - + Don't show this warning again + Daugiau neberodyti šio įspėjimo - Passkey - + KeePassXC: Legacy browser integration settings detected + KeePassXC: Aptikti senieji naršyklės integracijos nustatymai - KeePassXC - Passkey credentials - - - - Register a new passkey to this entry: - - - - KeePassXC - Update passkey - - - - Entry already has a passkey. -Do you want to overwrite the passkey in %1 - %2? - - - - Register - + 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? + KeePassXC-Browser nustatymus reikia perkelti į duomenų bazės nustatymus. +Tai būtina, kad išliktų dabartiniai naršyklės ryšiai. +Ar norėtumėte perkelti esamus nustatymus dabar? @@ -1073,6 +975,10 @@ Do you want to overwrite the passkey in %1 - %2? General Bendra + + Browsers installed as snaps are currently not supported. + Šiuo metu nepalaikomos naršyklės, įdiegtos kaip snapai. + Enable integration for these browsers: Įjungti integraciją šioms naršyklėms: @@ -1108,7 +1014,7 @@ Do you want to overwrite the passkey in %1 - %2? Show a notification when credentials are requested Credentials mean login data requested via browser extension - Rodyti pranešimą, kai prašoma pateikti įgaliojimus + Rodyti pranešimą, kai prašoma pateikti prisijungimo duomenis Request to unlock the database if it is locked @@ -1128,15 +1034,15 @@ Do you want to overwrite the passkey in %1 - %2? Return only best-matching credentials - Grąžinti tik geriausiai atitinkančius įgaliojimus + Grąžinti tik geriausiai atitinkančius prisijungimo duomenis Returns expired credentials. String [expired] is added to the title. - Grąžina įgaliojimus, kurių galiojimo laikas pasibaigęs. Prie pavadinimo pridedama eilutė [pasibaigęs]. + Grąžina prisijungimo duomenis, kurių galiojimo laikas pasibaigęs. Prie pavadinimo pridedama eilutė [pasibaigęs]. Allow returning expired credentials - Leisti grąžinti pasibaigusius įgaliojimus + Leisti grąžinti negaliojančius prisijungimo duomenis All databases connected to the extension will return matching credentials. @@ -1154,12 +1060,12 @@ Do you want to overwrite the passkey in %1 - %2? Never ask before accessing credentials Credentials mean login data requested via browser extension - Niekada neklausti prieš prieinant prie įgaliojimų + Niekada neklausti prieš prieinant prie prisijungimo duomenų Never ask before updating credentials Credentials mean login data requested via browser extension - Niekada neklausti prieš atnaujinant įgaliojimus + Niekada neklausti prieš atnaujinant prisijungimo duomenis Do not ask permission for HTTP Basic Auth @@ -1244,6 +1150,26 @@ Do you want to overwrite the passkey in %1 - %2? Custom extension ID Pasirinktinis plėtinio ID + + Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 + Dėl Snap smėlio dėžės reikia paleisti skriptą, kad būtų įjungti naršyklės integraciją.<br />Šį skriptą galite gauti iš %1 + + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 + KeePassXC-Browser reikalinga, kad naršyklės integracija veiktų. <br />Atsisiųskite jį %1, %2 ir %3. %4 + + + Please see special instructions for browser extension use below + Toliau skaitykite specialius naršyklės plėtinio naudojimo nurodymus + + + <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. + <b>Klaida:</b> Negalima rasti pasirinktinės tarpinio serverio vietos!<br/>Naršyklės integracija NEVEIKS be tarpinio serverio programos. + + + <b>Warning:</b> The following options can be dangerous! + <b>Įspėjimas:</b> Šie parametrai gali būti pavojingi! + Executable Files Vykdomieji failai @@ -1260,46 +1186,6 @@ Do you want to overwrite the passkey in %1 - %2? Select native messaging host folder location Pasirinkite vietinę pranešimų pagrindinio kompiuterio aplanko vietą - - Allow keepassxc-proxy to list all entries with their title, URL and UUID in connected databases. - - - - Allow limited access to all entries in connected databases (ignores site access restrictions) - - - - <b>Warning:</b> Only adjust these settings if necessary. - <b>Įspėjimas:</b> Derinkite šiuos nustatymus tik tuo atveju, jei to reikia. - - - The custom proxy location does not exist. - - - - <b>Error:</b> The custom proxy location does not exist. Correct this in the advanced settings tab. - - - - <b>Error:</b> The installed proxy executable is missing from the expected location: %1<br/>Please set a custom proxy location in the advanced settings or reinstall the application. - - - - Allows using insecure http://localhost with passkeys for testing purposes. - - - - Allow using localhost with passkeys - - - - KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. - - - - Browsers installed using Snap or Flatpak are not supported with exception to Firefox installed using Snap. - - CloneDialog @@ -1322,6 +1208,14 @@ Do you want to overwrite the passkey in %1 - %2? CsvImportWidget + + Import CSV fields + Importuoti CSV laukus + + + filename + failo pavadinimas + size, rows, columns dydis, eilučių, stulpelių @@ -1430,42 +1324,50 @@ Do you want to overwrite the passkey in %1 - %2? Column %1 Stulpelis %1 + + Imported from CSV file + Importuota iš CSV failo + + + Original data: + Pradiniai duomenys: + + + Error(s) detected in CSV file! + CSV faile aptikta klaida(-os)! + [%n more message(s) skipped] [%n daugiau praleistų pranešimų][%n daugiau praleistų pranešimų][%n daugiau praleistų pranešimų][%n daugiau praleistų pranešimų] - Failed to parse CSV file: %1 - Nepavyko išnagrinėti CSV failo: %1 + Error + Klaida - Imported from CSV file: %1 - Importuota iš CSV failo: %1 - - - No Title Selected - - - - No title column was selected, entries will be hard to tell apart. -Are you sure you want to import? - - - - Tags - Žymos + CSV import: writer has errors: +%1 + CSV importas: rašytojas turi klaidų: +%1 CsvParserModel + + %1, %2, %3 + file info: bytes, rows, columns + %1, %2, %3 + + + %n byte(s) + %n baitų%n baitų%n baitų%n baitų + %n row(s) - CSV row count - + %n eilutė (-ės)%n eilutė (-ės)%n eilutė (-ės)%n eilutė (-ės) %n column(s) - CSV column count %n stulpelis%n stulpeliai%n stulpelių%n stulpelių @@ -1518,14 +1420,6 @@ Atsarginė duomenų bazė, esanti %2 Recycle Bin Šiukšlinė - - Database file read error. - - - - No file path was provided. - - DatabaseOpenDialog @@ -1548,10 +1442,30 @@ Atsarginė duomenų bazė, esanti %2 Password field Slaptažodžio laukas + + Enter Additional Credentials (if any): + Įveskite papildomus prisijungimo duomenis (jei yra): + + + Key File: + Rakto failas: + + + Key file help + Rakto failo pagalba + Hardware key slot selection Aparatūros rakto lizdo pasirinkimas + + Hardware Key: + Aparatūros raktas: + + + Hardware key help + Aparatūros rakto pagalba + Key file to unlock the database Duomenų bazės atrakinimo rakto failas @@ -1564,6 +1478,14 @@ Atsarginė duomenų bazė, esanti %2 Browse… Naršyti... + + Refresh hardware tokens + Atnaujinti aparatinės įrangos žetonus + + + Refresh + Įkelti iš naujo + Unlock Database Atrakinti Duomenų bazę @@ -1624,7 +1546,11 @@ Kad ši klaida nepasirodytų, turite eiti į "Duomenų bazės nustatymai / Retry with empty password - Bandyti vėl su tuščiu slaptažodžiu + Pakartoti su tuščiu slaptažodžiu + + + Failed to authenticate with Touch ID + Nepavyko autentifikuoti naudojant "Touch ID" Failed to open key file: %1 @@ -1658,65 +1584,41 @@ Kad ši klaida nepasirodytų, turite eiti į "Duomenų bazės nustatymai / Cannot use database file as key file Negalima naudoti duomenų bazės failo kaip rakto failo + + You cannot use your database file as a key file. +If you do not have a key file, please leave the field empty. + Duomenų bazės failo negalima naudoti kaip rakto failo. +Jei rakto failos neturite, palikite šį lauką tuščią. + + + Detecting hardware keys… + Aptinkame aparatūros raktus... + + + No hardware keys detected + Neaptikti jokie aparatūros raktai + + + Select hardware key… + Pasirinkti aparatūros raktą... + + + <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information…</p> + <p>Prie slaptažodžio, duomenų bazės saugumui padidinti galite naudoti slaptąjį failą. Šį failą galima sukurti duomenų bazės saugumo nustatymuose.</p><p>Tai <strong>nėra</strong> jūsų *.kdbx duomenų bazės failas!<br>Jei neturite rakto failo, palikite šį lauką tuščią.</p><p>Spustelėkite, jei norite gauti daugiau informacijos...</p> + + + <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +<p>Click for more information…</p> + <p>Galite naudoti aparatūros saugos raktą, pvz. <strong>, "YubiKey"</strong> arba <strong>"OnlyKey"</strong> , su HMAC-SHA1 sukonfigūruotais lizdais.</p> +<p>Spustelėkite, jei norite gauti daugiau informacijos...</p> + authenticate to access the database - Failed to authenticate with Quick Unlock: %1 - - - - Select Key File: - - - - <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!</p> - - - - Use hardware key [Serial: %1] - - - - Use hardware key - Naudoti aparatinės įrangos raktą - - - Your database file is NOT a key file! -If you don't have a key file or don't know what that is, you don't have to select one. - - - - KeePassXC database file selected - - - - The file you selected looks like a database file. -A database file is NOT a key file! - -Are you sure you want to continue with this file?. - - - - No hardware keys found. - - - - Refresh Hardware Keys - - - - Click to add a key file. - Spustelėkite norėdami pridėti rakto failą. - - - <a href="#" style="text-decoration: underline">I have a key file</a> - <a href="#" style="text-decoration: underline">Aš turiu rakto failą</a> - - - Hardware keys found, but no slots are configured. - + Failed to authenticate with Windows Hello: %1 + Nepavyko autentifikuotis naudojant Windows Hello: %1 @@ -1728,6 +1630,10 @@ Are you sure you want to continue with this file?. DatabaseSettingsDialog + + Advanced Settings + Išplėstiniai nustatymai + General Bendra @@ -1738,7 +1644,7 @@ Are you sure you want to continue with this file?. Database Credentials - Duomenų bazės Įgaliojimai + Duomenų bazės prisijungimo duomenys Encryption Settings @@ -1752,22 +1658,6 @@ Are you sure you want to continue with this file?. Maintenance Priežiūra - - KeeShare - - - - Secret Service Integration - - - - Remote Sync - - - - Database Settings: %1 - Duomenų bazės nustatymai: %1 - DatabaseSettingsWidgetBrowser @@ -1775,6 +1665,18 @@ Are you sure you want to continue with this file?. KeePassXC-Browser settings KeePassXC-Browser nustatymai + + Convert KeePassHTTP data + Konvertuoti KeePassHTTP duomenis + + + Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data + Konvertuokite senus "KeePassHTTP" atributus į su "KeePassXC-Browser" suderinamus pasirinktinius duomenis + + + Refresh database root group ID + Duomenų bazės šakninės grupės ID atnaujinimas + Disconnect all browsers Atjungti visas naršykles @@ -1783,10 +1685,6 @@ Are you sure you want to continue with this file?. Forget all site-specific settings on entries Pamiršti visus su konkrečia svetaine susijusius įrašų nustatymus - - Refresh database root group ID - Duomenų bazės šakninės grupės ID atnaujinimas - Stored keys Saugomi raktai @@ -1835,13 +1733,21 @@ This may prevent connection to the browser plugin. Ar tikrai norite atjungti visas naršykles? Tai gali nebeleisti prisijungti prie naršyklės plėtinio. + + KeePassXC: No keys found + KeePassXC: Raktų nerasta + No shared encryption keys found in KeePassXC settings. KeePassXC nustatymuose nerasta bendrų šifravimo raktų. + + KeePassXC: Removed keys from database + KeePassXC: Pašalinti raktai iš duomenų bazės + Successfully removed %n encryption key(s) from KeePassXC settings. - Sėkmingai pašalintas (-i) %n šifravimo raktas (-ai) iš KeePassXC nustatymų.Sėkmingai pašalintas (-i) %n šifravimo raktas (-ai) iš KeePassXC nustatymų.Sėkmingai pašalintas (-i) %n šifravimo raktas (-ai) iš KeePassXC nustatymų.Sėkmingai pašalintas (-i) %n šifravimo raktas (-ai) iš KeePassXC nustatymų. + Iš "KeePassXC" nustatymų sėkmingai pašalintas %n šifravimo raktas.Iš "KeePassXC" nustatymų sėkmingai pašalinta %n šifravimo raktų.Iš "KeePassXC" nustatymų sėkmingai pašalinta %n šifravimo raktų.Iš "KeePassXC" nustatymų sėkmingai pašalinta %n šifravimo raktų. Do you really want forget all site-specific settings on every entry? @@ -1857,14 +1763,32 @@ Bus panaikinti prieigos prie įrašų leidimai. Abort Nutraukti + + KeePassXC: Removed permissions + KeePassXC: Pašalinti leidimai + Successfully removed permissions from %n entry(s). Sėkmingai pašalinti leidimai iš %n įrašo (-ų).Sėkmingai pašalinti leidimai iš %n įrašo (-ų).Sėkmingai pašalinti leidimai iš %n įrašo (-ų).Sėkmingai pašalinti leidimai iš %n įrašo (-ų). + + 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 convert all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + Ar tikrai norite konvertuoti visus senus naršyklės integracijos duomenis į naujausią standartą? +Tai būtina norint išlaikyti suderinamumą su naršyklės plėtiniu. + Refresh database ID Atnaujinti duomenų bazės ID @@ -1875,26 +1799,6 @@ This is only necessary if your database is a copy of another and the browser ext Ar tikrai norite atnaujinti duomenų bazės ID? Tai būtina tik tuo atveju, jei jūsų duomenų bazė yra kito kopija ir naršyklės plėtinys negali prisijungti. - - Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data - - - - No keys found - Nerasta jokių raktų - - - Removed keys from database - - - - Removed permissions - - - - No entry with permissions found! - - DatabaseSettingsWidgetDatabaseKey @@ -1934,18 +1838,6 @@ Ar tikrai norite tęsti darbą be slaptažodžio? Failed to change database credentials Nepavyko pakeisti duomenų bazės prisijungimo duomenų - - Weak password - Silpnas slaptažodis - - - This is a weak password! For better protection of your secrets, you should choose a stronger password. - - - - The provided password does not meet the minimum quality requirement. - - DatabaseSettingsWidgetEncryption @@ -1953,6 +1845,14 @@ Ar tikrai norite tęsti darbą be slaptažodžio? Decryption Time: Iššifravimo laikas: + + Change existing decryption time + Pakeisti esamą iššifravimo laiką + + + Change + Keisti + Decryption time in seconds Iššifravimo laikas sekundėmis @@ -2033,6 +1933,11 @@ Ar tikrai norite tęsti darbą be slaptažodžio? KDBX 3 KDBX 3 + + unchanged + Database decryption time is unchanged + nepakeistas + Number of rounds too high Key transformation rounds @@ -2042,7 +1947,7 @@ Ar tikrai norite tęsti darbą be slaptažodžio? You are using a very high number of key transform rounds with Argon2. If you keep this number, your database may take hours, days, or even longer to open. - Su "Argon2" naudojate labai daug pagrindinių transformacijų. + Su "Argon2" naudojate labai daug pagrindinių transformacijos raundų. Jei išsaugosite šį numerį, duomenų bazės atidarymas gali užtrukti valandas, dienas ar net ilgiau. @@ -2085,18 +1990,6 @@ Jei išlaikysite šį numerį, jūsų duomenų bazė nebus apsaugota nuo brutali Threads for parallel execution (KDF settings) gija gijos gijų gija - - Encryption Settings: - Šifravimo nustatymai: - - - Basic - - - - Advanced - Išplėstiniai - DatabaseSettingsWidgetFdoSecrets @@ -2145,7 +2038,7 @@ Jei išlaikysite šį numerį, jūsų duomenų bazė nebus apsaugota nuo brutali Default username field - Numatytas naudotojo vardo laukas + Numatytojo slapyvardžio laukas History Settings @@ -2218,70 +2111,6 @@ Entries deleted from the recycle bin are removed from the database. - - Autosave delay since last change - - - - Autosave delay - - - - Autosave delay since last change in minutes - - - - min - min. - - - Autosave delay since last change checkbox - - - - Public Database Metadata - - - - Warning: the following settings are not encrypted. - - - - Display name: - - - - Publically visible display name used on the unlock dialog - - - - Database public display name - - - - Display color: - - - - Publically visible color used on the unlock dialog - - - - Database public display color chooser - - - - Clear - Išvalyti - - - Display icon: - - - - Select Database Icon - - DatabaseSettingsWidgetKeeShare @@ -2377,129 +2206,6 @@ removed from the database. Duomenų bazės aprašymo laukas - - DatabaseSettingsWidgetRemote - - Sync Commands - - - - Remove - Šalinti - - - Command Settings - - - - Name - Pavadinimas - - - Save - Įrašyti - - - Download - Atsisiųsti - - - Command: - Komanda: - - - Download command field - - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - - - - Input: - - - - Download input field - - - - Upload - - - - Upload command field - - - - e.g.: "sftp user@hostname" or "scp {TEMP_DATABASE} user@hostname:DatabaseOnRemote.kdbx" - - - - Upload input field - - - - Name cannot be empty. - - - - Test - Išbandyti - - - Download command cannot be empty. - Atsiuntimo komanda negali būti tuščia. - - - Download failed with error: %1 - - - - Download finished, but file %1 could not be found. - - - - Download successful. - Atsiuntimas sėkmingas. - - - Save Remote Settings - - - - You have unsaved changes. Do you want to save them? - - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - - - - e.g.: -put {TEMP_DATABASE} DatabaseOnRemote.kdbx -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - - - - Timeout: - - - - seconds - sekundžių - - DatabaseTabWidget @@ -2532,10 +2238,26 @@ Tai tikrai klaida, praneškite apie tai kūrėjams. CSV file CSV failas + + Select CSV file + Pasirinkti CSV failą + Merge database Sulieti duomenų bazę + + KeePass 1 database + KeePass 1 duomenų bazė + + + Open KeePass 1 database + Atverkite KeePass 1 duomenų bazę + + + Open OPVault + Atidarykite "OPVault" + Export database to CSV file Eksportuoti duomenų bazę į CSV failą @@ -2548,6 +2270,28 @@ Tai tikrai klaida, praneškite apie tai kūrėjams. Writing the HTML file failed. Nepavyko įrašyti HTML failo. + + Export Confirmation + Eksporto Patvirtinimas + + + You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? + Ketinate eksportuoti duomenų bazę į neužšifruotą failą. Dėl to jūsų slaptažodžiai ir slapta informacija gali tapti pažeidžiami! Ar tikrai norite tęsti? + + + New Database + Nauja duomenų bazė + + + %1 [New Database] + Database tab name modifier + %1 [Nauja duomenų bazė] + + + %1 [Locked] + Database tab name modifier + %1 [Užrakinta] + Export database to XML file Eksportuoti duomenų bazę į XML failą @@ -2560,31 +2304,9 @@ Tai tikrai klaida, praneškite apie tai kūrėjams. Writing the XML file failed Nepavyko įrašyti XML failo - - Export Confirmation - Eksporto Patvirtinimas - - - You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? - Ketinate eksportuoti duomenų bazę į neužšifruotą failą. Dėl to jūsų slaptažodžiai ir slapta informacija gali tapti pažeidžiami! Ar tikrai norite tęsti? - - - %1 [Locked] - Database tab name modifier - %1 [Užrakinta] - - - %1 [Temporary] - Database tab name modifier - - DatabaseWidget - - Searches and Tags - Paieškos ir žymos - Searching… Ieškoma... @@ -2595,11 +2317,11 @@ Tai tikrai klaida, praneškite apie tai kūrėjams. Confirm Auto-Type - Patvirtinti Auto-Įvedimą + Patvirtinti automatinį rinkimą Perform Auto-Type into the previously active window? - Atlikti Auto-Rašymą į anksčiau aktyvų langą? + Atlikti automatinį rinkimą į anksčiau aktyvų langą? Execute command? @@ -2633,10 +2355,6 @@ Tai tikrai klaida, praneškite apie tai kūrėjams. Expired entries Nebegaliojantys įrašai - - Entries expiring within %1 day(s) - Įrašai, kurių galiojimas baigiasi per %1 dieną (-as)Įrašai, kurių galiojimas baigiasi per %1 dieną (-as)Įrašai, kurių galiojimas baigiasi per %1 dieną (-as)Įrašai, kurių galiojimas baigiasi per %1 dieną (-as) - No current database. Nėra esamos duomenų bazės. @@ -2651,7 +2369,7 @@ Tai tikrai klaida, praneškite apie tai kūrėjams. Database was not modified by merge operation. - Duomenų bazė nebuvo pakeista atliekant sujungimo operaciją. + Duomenų bazė nebuvo keista atliekant sujungimo operaciją. Search Results (%1) @@ -2661,18 +2379,6 @@ Tai tikrai klaida, praneškite apie tai kūrėjams. No Results Nėra rezultatų - - Save - Įrašyti - - - Enter a unique name or overwrite an existing search from the list: - Įveskite unikalų pavadinimą arba perrašykite esamą paiešką iš sąrašo: - - - Save Search - Išsaugoti paiešką - Lock Database? Užrakinti duomenų bazę? @@ -2701,6 +2407,26 @@ Išsaugoti pakeitimus? File has changed Failas pasikeitė + + The database file has changed. Do you want to load the changes? + Duomenų bazės failas pasikeitė. Ar norite įkelti pakeitimus? + + + Merge Request + Suliejimo užklausa + + + The database file has changed and you have unsaved changes. +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. +Error: %1 + Nepavyko atidaryti naujos duomenų bazės failo bandant automatiškai įkelti. +Klaida: %1 + Disable safe saves? Išjungti saugų išsaugojimą? @@ -2743,94 +2469,25 @@ Išjunkite saugų išsaugojimą ir bandykite dar kartą? Could not find database file: %1 Nepavyko rasti duomenų bazės failo: %1 - - New Database - Nauja duomenų bazė + + Entries expiring within %1 day(s) + Įrašai, kurių galiojimas baigiasi per %1 dieną (-as)Įrašai, kurių galiojimas baigiasi per %1 dieną (-as)Įrašai, kurių galiojimas baigiasi per %1 dieną (-as)Įrašai, kurių galiojimas baigiasi per %1 dieną (-as) - %1 [New Database] - Database tab name modifier - %1 [Nauja duomenų bazė] + Searches and Tags + Paieškos ir žymos - Remote Sync did not contain any download or upload commands. - + Enter a unique name or overwrite an existing search from the list: + Įveskite unikalų pavadinimą arba perrašykite esamą paiešką iš sąrašo: - Remote sync '%1' completed successfully! - + Save + Įrašyti - Remote sync '%1' failed: %2 - - - - Error while saving database %1: %2 - Klaida įrašant duomenų bazę %1: %2 - - - Downloading... - Atsiunčiama... - - - Uploading... - - - - Syncing... - Sinchronizuojama... - - - Remove passkey from entry - - - - Do you want to remove the passkey from this entry? - - - - The database file "%1" was modified externally - - - - Do you want to load the changes? - - - - Reload database - - - - Reloading database… - - - - Reload canceled - - - - Reload successful - - - - Reload pending user action… - - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes<br>Ignore the changes on disk until save<br>Discard unsaved changes - - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes then save<br>Overwrite the changes on disk<br>Discard unsaved changes - - - - Database file overwritten. - - - - Database file on disk cannot be unlocked with current credentials.<br>Enter new credentials and/or present hardware key to continue. - + Save Search + Išsaugoti paiešką @@ -2883,6 +2540,10 @@ Išjunkite saugų išsaugojimą ir bandykite dar kartą? n/a nėra + + (encrypted) + (šifruota) + Select private key Pasirinkti privatųjį raktą @@ -2969,10 +2630,6 @@ Ar norėtumėte ją ištaisyti? Hide Slėpti - - %n hour(s) - %n val.%n val.%n val.%n val. - %n week(s) %n savaitė%n savaitės%n savaičių%n savaičių @@ -2983,11 +2640,11 @@ Ar norėtumėte ją ištaisyti? %n year(s) - %n metai (-ai)%n metai (-ai)%n metai (-ai)%n metai (-ai) + %n metas%n metai%n metai%n metų - - Failed to decrypt SSH key, ensure password is correct. - + + %n hour(s) + %n valanda%n valandos%n valandos%n valandų @@ -3002,7 +2659,7 @@ Ar norėtumėte ją ištaisyti? Attribute value - Attribute value + Attribute reikšmė Add a new attribute @@ -3089,7 +2746,7 @@ Ar norėtumėte ją ištaisyti? Custom Auto-Type sequence - Pasirinktinė automatinio tipo seka + Pasirinktinė automatinio rinkimo seka Open Auto-Type help webpage @@ -3107,20 +2764,10 @@ Ar norėtumėte ją ištaisyti? Add new window association Pridėti naują langų susiejimą - - + - Add item - + - Remove selected window association Pašalinti pasirinktą langų susiejimą - - - - Remove item - - - Window title: Lango antraštė: @@ -3143,11 +2790,25 @@ Ar norėtumėte ją ištaisyti? Custom Auto-Type sequence for this window - Pasirinktinė šio lango automatinio rinkimo seka + Pasirinktinė rinkimo seka šiam langui + + + + + Add item + + + + + - + Remove item + - EditEntryWidgetBrowser + + These settings affect to the entry's behaviour with the browser extension. + Šie nustatymai turi įtakos įrašo elgsenai su naršyklės plėtiniu. + General Bendra @@ -3160,14 +2821,26 @@ Ar norėtumėte ją ištaisyti? Skip Auto-Submit for this entry Praleisti šio įrašo automatinį pateikimą + + Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. + Siųskite šį parametrą tik į naršyklę HTTP Auth dialogo langams. Jei įjungta, įprastose prisijungimo formose šis pasirinkimo įrašas nebus rodomas. + Use this entry only with HTTP Basic Auth Naudokite šį įrašą tik su HTTP Basic Auth + + Do not send this setting to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. + Nesiųskite šio parametro į naršyklę HTTP Auth dialogams. Jei įjungta, HTTP Auth dialogo languose šis pasirinkimo įrašas nebus rodomas. + Do not use this entry with HTTP Basic Auth Nenaudokite šio įrašo su HTTP Basic Auth + + Additional URL's + Papildomi URL adresai + Add Pridėti @@ -3180,22 +2853,6 @@ Ar norėtumėte ją ištaisyti? Edit Keisti - - These settings affect the entry's behaviour with the browser extension. - - - - Additional URLs - - - - Only send this entry to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. - - - - Do not send this entry to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. - - EditEntryWidgetHistory @@ -3292,7 +2949,7 @@ Ar norėtumėte ją ištaisyti? &Username: - Na&udotojo vardas: + &Title: @@ -3300,11 +2957,11 @@ Ar norėtumėte ją ištaisyti? &Password: - Sla&ptažodis: + UR&L: - UR&L: + &Notes: @@ -3316,11 +2973,11 @@ Ar norėtumėte ją ištaisyti? T&ags: - Ž&ymės: + &Expires: - Ba&igia galioti: + @@ -3361,6 +3018,19 @@ Ar norėtumėte ją ištaisyti? Private key Privatusis raktas + + External file + Išorinis failas + + + Browser for key file + Rakto failo naršyklė + + + Browse… + Button for opening file dialog + Naršyti... + Attachment Priedas @@ -3377,23 +3047,6 @@ Ar norėtumėte ją ištaisyti? Remove from agent Šalinti iš agento - - External file - Išorinis failas - - - Browser for key file - Rakto failo naršyklė - - - Browse… - Button for opening file dialog - Naršyti... - - - Generate - Generuoti - Select attachment file Pasirinkti priedo failą @@ -3418,10 +3071,6 @@ Ar norėtumėte ją ištaisyti? seconds sekundžių - - Clear agent - - EditGroupWidget @@ -3433,6 +3082,10 @@ Ar norėtumėte ją ištaisyti? Icon Piktograma + + Browser Integration + Naršyklės integracija + Properties Savybės @@ -3449,10 +3102,6 @@ Ar norėtumėte ją ištaisyti? Group has unsaved changes Grupė turi neišsaugotų pakeitimų - - Browser Integration - Naršyklės integracija - Enable Įjungti @@ -3506,18 +3155,10 @@ Ar norėtumėte ją ištaisyti? Omit WWW subdomain from matching: - Praleiskite WWW padomenį nuo atitikimo: - - - Omit WWW subdomain from matching toggle for this and sub groups - Praleiskite WWW padomenį nuo šio ir pogrupių atitikimo perjungimo - - - Restrict matching to given browser key: - Restrict matching to given browser key toggle for this and sub groups + Omit WWW subdomain from matching toggle for this and sub groups @@ -3659,7 +3300,7 @@ Palaikomi pratęsimai yra: %1. Auto-Type: - Auto-Įvedimas: + Automatinis rinkimas: Search: @@ -3752,6 +3393,10 @@ Palaikomi pratęsimai yra: %1. Unable to fetch favicon. Nepavyko gauti svetainės piktogramos. + + You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security + DuckDuckGo svetainių piktogramų paslaugą galite įjungti skiltyje Įrankiai -> Nustatymai -> Saugumas + Existing icon selected. Pasirinkta esama piktograma. @@ -3770,7 +3415,7 @@ Palaikomi pratęsimai yra: %1. Successfully loaded %1 of %n icon(s) - Sėkmingai įkelta %1 iš %n piktogramos (-ių)Sėkmingai įkelta %1 iš %n piktogramos (-ių)Sėkmingai įkelta %1 iš %n piktogramos (-ių)Sėkmingai įkelta %1 iš %n piktogramos (-ių) + Sėkmingai įkelta %1 iš %n piktogramosSėkmingai įkelta %1 iš %n piktogramųSėkmingai įkelta %1 iš %n piktogramųSėkmingai įkelta %1 iš %n piktogramų No icons were loaded @@ -3784,10 +3429,6 @@ Palaikomi pratęsimai yra: %1. 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ę: - - You can enable the DuckDuckGo website icon service under Application Settings -> Security - - EditWidgetProperties @@ -3864,24 +3505,6 @@ Dėl to gali sutrikti paveiktų papildinių veikimas. %1 - Clone %1 - Klonas - - Passkey - - - - Invalid conversion type: %1 - Netinkamas vertimo tipas: %1 - - - Invalid conversion syntax: %1 - Netinkama vertimo sintaksė: %1 - - - Invalid regular expression syntax %1 -%2 - Netinkama regexp sintaksė %1 - - EntryAttachments @@ -3890,21 +3513,6 @@ Dėl to gali sutrikti paveiktų papildinių veikimas. Nepavyko atidaryti failo "%1" - - EntryAttachmentsDialog - - Form - Forma - - - File name - Failo pavadinimas - - - File contents... - Failo turinys... - - EntryAttachmentsModel @@ -3942,6 +3550,14 @@ Dėl to gali sutrikti paveiktų papildinių veikimas. Remove Šalinti + + Rename selected attachment + Pervadinti pasirinktą priedą + + + Rename + Pervadinti + Open selected attachment Atverti pasirinktą priedą @@ -4009,16 +3625,22 @@ Dėl to gali sutrikti paveiktų papildinių veikimas. Unable to open file(s): %1 - Nepavyksta atidaryti failo (-ų): -%1Nepavyksta atidaryti failo (-ų): -%1Nepavyksta atidaryti failo (-ų): -%1Nepavyksta atidaryti failo (-ų): + Nepavyko atidaryti failo: +%1Nepavyko atidaryti failų: +%1Nepavyko atidaryti failų: +%1Nepavyko atidaryti failų: %1 Confirm Overwrite Attachment Patvirtinti priedo perrašymą + + Attachment "%1" already exists. +Would you like to overwrite the existing attachment? + Priedas "%1" jau egzistuoja. +Ar norite perrašyti esamą priedą? + Confirm Attachment Patvirtinti priedą @@ -4053,24 +3675,6 @@ Error: %1 Nepavyko išsaugoti atnaujinto priedo. Klaida: %1 - - Attachment "%1" already exists. -Would you like to overwrite the existing attachment? - Priedas "%1" jau egzistuoja. -Ar norite perrašyti esamą priedą? - - - New - Naujas - - - Preview - Peržiūra - - - Failed to preview an attachment: Attachment not found - Nepavyko peržiūrėti priedo: Priedas nerastas - EntryAttributesModel @@ -4265,14 +3869,6 @@ Ar norite perrašyti esamą priedą? Has TOTP Turi TOTP - - Background Color - Fono spalva - - - Group Path - Grupės kelias - EntryPreviewWidget @@ -4293,8 +3889,8 @@ Ar norite perrašyti esamą priedą? Slaptažodis - URL - URL + Notes + Pastabos Expiration @@ -4313,8 +3909,8 @@ Ar norite perrašyti esamą priedą? Naudotojo vardas - Notes - Pastabos + URL + URL Advanced @@ -4364,10 +3960,6 @@ Ar norite perrašyti esamą priedą? Never Niekada - - Double click to copy value - Dukart spustelėkite, kad nukopijuotumėte reikšmę - Enabled Įjungta @@ -4377,8 +3969,8 @@ Ar norite perrašyti esamą priedą? Išjungta - Double click to copy to clipboard - Spustelėkite du raktus norėdami nukopijuoti į iškarpinę + Double click to copy value + Dukart spustelėkite, kad nukopijuotumėte reikšmę @@ -4387,10 +3979,6 @@ Ar norite perrašyti esamą priedą? Invalid URL Netinkamas URL - - Duplicate URL - - EntryView @@ -4406,10 +3994,6 @@ Ar norite perrašyti esamą priedą? Reset to defaults Atstatyti į numatytuosius - - + %1 entry(s)... - - ExportDialog @@ -4426,7 +4010,8 @@ Ar norite perrašyti esamą priedą? This will leave your passwords and sensitive information vulnerable! Ketinate eksportuoti duomenų bazę į neužšifruotą failą. -Dėl to jūsų slaptažodžiai ir slapta informacija bus pažeidžiami! +Dėl to jūsų slaptažodžiai ir slapta informacija bus pažeidžiami! + database order @@ -4519,7 +4104,7 @@ Dėl to jūsų slaptažodžiai ir slapta informacija bus pažeidžiami! %n Entry(s) was used by %1 %1 is the name of an application - %n Įrašas (-ai) buvo naudojamas (-i) %1%n Įrašas (-ai) buvo naudojamas (-i) %1%n Įrašas (-ai) buvo naudojamas (-i) %1%n Įrašas (-ai) buvo naudojamas (-i) %1 + %n Įrašą naudojo %1%n Įrašus naudojo %1%n Įrašus naudojo %1%n Įrašų naudojo %1 @@ -4630,193 +4215,6 @@ DuckDuckGo svetainės piktogramų paslaugą galite įjungti programos nustatymų Atsisiunčiamos piktogramos (%1/%2)... - - ImportWizard - - Import Wizard - Importavimo vediklis - - - - ImportWizardPageReview - - WizardPage - - - - Entry count: %1 - - - - Group - Grupė - - - Title - Antraštė - - - Username - Naudotojo vardas - - - Password - Slaptažodis - - - Url - - - - Could not load key file. - Nepavyko įkelti rakto failo. - - - Could not open remote database. Password or key file may be incorrect. - - - - - ImportWizardPageSelect - - Form - Forma - - - Import File Selection - - - - Password: - Slaptažodis: - - - Key File: - Rakto failas: - - - Browse… - Naršyti... - - - Import Into: - Importuoti į: - - - New Database - Nauja duomenų bazė - - - No unlocked databases available - - - - Existing Database: - - - - Import File: - - - - Comma Separated Values (.csv) - - - - 1Password Export (.1pux) - - - - 1Password Vault (.opvault) - - - - Bitwarden (.json) - Bitwarden (.json) - - - KeePass 1 Database (.kdb) - - - - Open OPVault - - - - Select import file - - - - All files - Visi failai - - - Key files - Rakto failai - - - Select key file - Pasirinkite rakto failą - - - Comma Separated Values - - - - 1Password Export - - - - Bitwarden JSON Export - - - - 1Password Vault - - - - KeePass1 Database - - - - Proton Pass (.json) - - - - Proton Pass JSON Export - - - - Temporary Database - Laikina duomenų bazė - - - Command: - Komanda: - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - - - - Input: - - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last commend `exit` has to be sent - - - - - Remote Database (.kdbx) - - - KMessageWidget @@ -5251,6 +4649,17 @@ Line %2, column %3 Nepavyko atverti privačiojo rakto + + KeePass1OpenWidget + + Import KeePass1 Database + Importuoti KeePass1 duomenų bazę + + + Unable to open the database. + Nepavyko atverti duomenų bazės. + + KeePass1Reader @@ -5491,7 +4900,7 @@ Jei tai kartojasi, jūsų duomenų bazės failas gali būti sugadintas. Note: Do NOT use a file that may change as that will prevent you from unlocking your database. - astaba: NENAUDOKITE failo, kuris gali pasikeisti, nes dėl to nebegalėsite atrakinti duomenų bazės. + Pastaba: NENAUDOKITE failo, kuris gali pasikeisti, nes dėl to nebegalėsite atrakinti duomenų bazės. Browse for key file @@ -5573,7 +4982,7 @@ Message: %2 Suspicious Key File - įtartinas raktų failas + Įtartinas raktų failas The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. @@ -5607,6 +5016,10 @@ Ar tikrai norite tęsti darbą su šiuo failu? &Recent Databases &Neseniai naudotos duomenų bazės + + &Import + &Importuoti + &Export &Eksportuoti @@ -5627,10 +5040,6 @@ Ar tikrai norite tęsti darbą su šiuo failu? TOTP TOTP - - Tags - Žymos - &Groups &Grupės @@ -5675,18 +5084,34 @@ Ar tikrai norite tęsti darbą su šiuo failu? &New Database… &Nauja duomenų bazė... + + Create a new database + Sukurti naują duomenų bazę + &Merge From Database… &Įtraukti 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… &Redaguoti įrašą... + + View or edit entry + Rodyti ar taisyti įrašą + &Delete Entry… &Ištrinti įrašą... @@ -5695,6 +5120,10 @@ Ar tikrai norite tęsti darbą su šiuo failu? &New Group… &Nauja grupė... + + Add a new group + Pridėti naują grupę + &Edit Group… &Redaguoti grupę... @@ -5727,30 +5156,54 @@ Ar tikrai norite tęsti darbą su šiuo failu? Database &Reports… Duomenu bazės &ataskaitos... + + Statistics, health check, etc. + Statistika, sveikatos patikrinimas ir kt. + &Database Settings… &Duomenų bazės nustatymai... + + Database settings + Duomenų bazės nustatymai + &Clone Entry… &Klonuoti įrašą... Move u&p - Perkelti a&ukštyn + Perkelti a&ukščiau + + + Move entry one step up + Perkelti įrašą vienu laipteliu aukščiau Move do&wn Perkelti že&miau + + Move entry one step down + Perkelti įrašą vienu laipteliu žemiau + Copy &Username Kopijuoti &slapyvardį + + Copy username to clipboard + Kopijuoti naudotojo vardą į iškarpinę + Copy &Password Kopijuoti &slaptažodį + + Copy password to clipboard + Kopijuoti slaptažodį į iškarpinę + &Settings &Nustatymai @@ -5784,13 +5237,21 @@ Ar tikrai norite tęsti darbą su šiuo failu? &Antraštė - Copy &URL - Kopijuoti &URL + Copy title to clipboard + Kopijuoti pavadinimą į iškarpinę + + + Copy URL to clipboard + Kopijuoti URL į iškarpinę &Notes &Pastabos + + Copy notes to clipboard + Kopijuoti pastabas į iškarpinę + &CSV File… &CSV failas... @@ -5803,14 +5264,26 @@ Ar tikrai norite tęsti darbą su šiuo failu? KeePass 1 Database… KeePass 1 Duomenų bazė... + + Import a KeePass 1 database + Importuoti KeePass 1 duomenų bazę + 1Password Vault… 1Password saugykla... + + Import a 1Password Vault + Importuoti 1Password saugyklą + CSV File… CSV Failas... + + Import a CSV file + Importuoti CSV failą + Show TOTP Rodyti NTVS @@ -5827,10 +5300,6 @@ Ar tikrai norite tęsti darbą su šiuo failu? Copy &TOTP Kopijuoti &NTVS - - Copy Password and TOTP - Kopijuoti slaptažodį ir TOTP - E&mpty recycle bin Iš&valyti šiukšlinę @@ -5845,7 +5314,7 @@ Ar tikrai norite tęsti darbą su šiuo failu? &Getting Started - &Kaip pradėti + &Pradžios vadovas Open Getting Started Guide @@ -5855,6 +5324,10 @@ Ar tikrai norite tęsti darbą su šiuo failu? &Online Help &Internetinė pagalba + + Go to online documentation + Eiti į internetinę dokumentaciją + &User Guide &Naudotojo vadovas @@ -5899,10 +5372,6 @@ Ar tikrai norite tęsti darbą su šiuo failu? Classic (Platform-native) Klasikinis (platformos gimtoji) - - Show Menubar - Rodyti meniu juostą - Show Toolbar Rodyti įrankių juostą @@ -5927,10 +5396,6 @@ Ar tikrai norite tęsti darbą su šiuo failu? Clone Group... Klonuoti Grupę... - - &XML File… - &XML failas… - Clear history Išvalyti istoriją @@ -5958,8 +5423,10 @@ Expect some bugs and minor issues, this version is meant for testing purposes. - No Tags - Nėra žymų + 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. + ĮSPĖJIMAS: Dėl jūsų Qt versijos "KeePassXC" gali sugesti naudojant ekrano klaviatūrą. +Rekomenduojame naudoti "AppImage", pasiekiamą mūsų atsisiuntimų puslapyje. Restore Entry(s) @@ -5989,10 +5456,6 @@ Tikėkitės klaidų ir nedidelių problemų, ši versija skirta testavimo tiksla Quit KeePassXC Išeiti iš KeePassXC - - %1 Entry(s) - %1 Įrašas%1 Įrašai%1 Įrašų%1 Įrašas (-ai) - Please present or touch your YubiKey to continue… Norėdami tęsti, pateikite arba palieskite savo YubiKey raktą... @@ -6005,314 +5468,38 @@ Tikėkitės klaidų ir nedidelių problemų, ši versija skirta testavimo tiksla You must restart the application to apply this setting. Would you like to restart now? Norėdami pritaikyti šį nustatymą, turite iš naujo paleisti programą. Ar norite iš naujo paleisti programą dabar? + + Tags + Žymos + + + No Tags + Nėra žymų + + + %1 Entry(s) + %1 Įrašas%1 Įrašai%1 Įrašų%1 Įrašas (-ai) + + + Copy Password and TOTP + Kopijuoti slaptažodį ir TOTP + + + &XML File… + &XML failas… + + + XML File… + XML failas… + + + Copy &URL + Kopijuoti &URL + Allow Screen Capture Leisti fotografuoti ekraną - - 1Password 1PUX... - - - - Import a 1Password 1PUX file - - - - Import… - Importuoti… - - - Passkeys… - - - - Import Passkey - - - - Remote S&ync… - - - - Quit Application - - - - Open About Dialog - - - - Open Database - Atverti duomenų bazę - - - Create Database - Sukurti duomenų bazę - - - Merge From Database - - - - Create Entry - Sukurti įrašą - - - Edit Entry - Redaguoti Įrašą - - - Delete Entry - Ištrinti įrašą - - - Create Group - Sukurti grupę - - - Edit Group - Redaguoti Grupę - - - Delete Group - Ištrinti grupę - - - Download All Favicons - - - - Sort Groups A-Z - - - - Sort Groups Z-A - - - - Save Database As - - - - Show Database Security - - - - Show Database Reports - - - - Show Database Settings - - - - Show Passkeys - - - - Clone Entry - - - - Move Entry Up - Pakelti įrašą - - - Move Entry Down - Nuleisti įrašą - - - Copy Username - Kopijuoti naudotojo vardą - - - Copy Password - Kopijuoti Slaptažodį - - - Show Application Settings - - - - Show Password Generator - - - - Remove Passkey From Entry - - - - Perform Auto-Type: {USERNAME} - - - - Perform Auto-Type: {USERNAME}{ENTER} - - - - Perform Auto-Type: {PASSWORD} - - - - Perform Auto-Type: {PASSWORD}{ENTER} - - - - Perform Auto-Type: {TOTP} - - - - Copy Title - - - - Copy URL - Kopijuoti URL - - - Copy Notes - - - - Export to CSV - Eksportuoti į CSV - - - Export to HTML - Eksportuoti į HTML - - - Import KeePass1 Database - Importuoti KeePass1 duomenų bazę - - - Import 1Password Vault - - - - Import CSV File - Importuoti CSV failą - - - Show TOTP QR Code - - - - Set up TOTP - Nustatyti NTVS - - - Empty Recycle Bin - - - - Open Donation Website - - - - Open Bug Report - - - - Open Online Documentation - - - - Open Keyboard Shortcuts Guide - - - - Save Database Backup - - - - SSH Agent: Add Key - - - - SSH Agent: Remove Key - - - - Toggle Compact Mode - - - - Set Theme: Automatic - - - - Set Theme: Light - - - - Set Theme: Dark - - - - Set Theme: Classic - - - - Toggle Show Menubar - - - - Toggle Show Toolbar - - - - Toggle Show Preview Panel - - - - Toggle Always on Top - - - - Toggle Hide Usernames - - - - Toggle Hide Passwords - - - - Export to XML - Eksportuoti į XML - - - Toggle Allow Screen Capture - - - - Show Group Panel - - - - Toggle Show Group Panel - - - - Setup Remote Sync… - - - - Password Generator - Slaptažodžių generatorius - - - E&xpire Entry… - - - - Clear SSH Agent - - - - Clear all identities in ssh-agent - - ManageDatabase @@ -6370,6 +5557,26 @@ Tikėkitės klaidų ir nedidelių problemų, ši versija skirta testavimo tiksla Overwriting %1 [%2] Perrašymas %1 [%2] + + older entry merged from database "%1" + senesnis įrašas prijungtas iš duomenų bazės "%1" + + + Adding backup for older target %1 [%2] + Senesnio tikslo %1 atsarginės kopijos pridėjimas [%2] + + + Adding backup for older source %1 [%2] + Senesnio šaltinio %1 atsarginės kopijos pridėjimas [%2] + + + Reapplying older target entry on top of newer source %1 [%2] + Senesnio tikslinio įrašo pakartotinis taikymas naujesniame šaltinyje %1 [%2] + + + Reapplying older source entry on top of newer target %1 [%2] + Senesnio šaltinio įrašo pakartotinis taikymas ant naujesnio tikslinio %1 [%2] + Synchronizing from newer source %1 [%2] Sinchronizuojama iš naujesnio šaltinio %1 [%2] @@ -6429,16 +5636,24 @@ Tikėkitės klaidų ir nedidelių problemų, ši versija skirta testavimo tiksla 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 + NewDatabaseWizardPageDatabaseKey Database Credentials - Duomenų bazės Įgaliojimai + Duomenų bazės prisijungimo duomenys A set of credentials known only to you that protects your database. - Tik jums žinomas įgaliojimų rinkinys, kuriuo apsaugoma jūsų duomenų bazė. + Tik jums žinomas prisijungimo duomenų rinkinys, kuriuo apsaugoma jūsų duomenų bazė. @@ -6463,25 +5678,6 @@ Tikėkitės klaidų ir nedidelių problemų, ši versija skirta testavimo tiksla Užpildykite rodomą pavadinimą ir pasirinktinį naujos duomenų bazės aprašymą: - - NewEntryAttachmentsDialog - - Attachment name cannot be empty - - - - Attachment with the same name already exists - - - - Save attachment - Įrašyti priedą - - - New entry attachment - - - NixUtils @@ -6528,6 +5724,15 @@ Tikėkitės klaidų ir nedidelių problemų, ši versija skirta testavimo tiksla Numatomas %1 baitas skaidraus teksto, nustatytas %2 + + OpVaultOpenWidget + + Read Database did not produce an instance +%1 + "Read Database" nesukūrė egzemplioriaus +%1 + + OpVaultReader @@ -6601,10 +5806,6 @@ Tikėkitės klaidų ir nedidelių problemų, ši versija skirta testavimo tiksla Unknown cipher: %1 Nežinomas šifras: %1 - - AES-256/GCM is currently not supported - AES-256/GCM šiuo metu nepalaikomas - Passphrase is required to decrypt this key Norint iššifruoti šį raktą, reikalinga slaptafrazė @@ -6670,179 +5871,8 @@ Tikėkitės klaidų ir nedidelių problemų, ši versija skirta testavimo tiksla Netikėta failo pabaiga, rašant privatųjį raktą - (encrypted) - (šifruota) - - - - OpenSSHKeyGenDialog - - SSH Key Generator - - - - Type - Tipas - - - Bits - - - - Comment - Komentaras - - - - PasskeyExportDialog - - KeePassXC - Passkey Export - - - - Filenames will be generated with title and .passkey file extension. - - - - Export entries - - - - Export Selected - - - - Cancel - Atsisakyti - - - Export to folder - - - - Export the following passkey entries. - - - - - PasskeyExporter - - KeePassXC: Passkey Export - - - - File "%1.passkey" already exists. -Do you want to overwrite it? - - - - - Cannot open file - Nepavyksta atverti fail - - - Cannot open file "%1" for writing. - Nepavyksta atverti failo „%1“ rašymui - - - Cannot write to file - Nepavyksta rašyti į failą - - - - PasskeyImportDialog - - KeePassXC - Passkey Import - - - - Username: %1 - Naudotojo vardas: %1 - - - Group - Grupė - - - Database - Duomenų bazė - - - Import Passkey - - - - Import - Importuoti - - - Cancel - Atsisakyti - - - Entry - Įrašas - - - Create new entry - Sukurti naują įrašą - - - Relying Party: %1 - - - - Import the following passkey: - - - - Import the following passkey to this entry: - - - - Default passkeys group (Imported Passkeys) - - - - - PasskeyImporter - - Passkey file - - - - All files - Visi failai - - - Cannot open file - Nepavyksta atverti fail - - - Cannot open file "%1" for reading. - Nepavyko atverti failo „%1“ skaitymui. - - - Open passkey file - - - - Cannot import passkey - - - - Cannot import passkey file "%1". Data is missing. - - - - Cannot import passkey file "%1". -The following data is missing: -%2 - - - - Cannot import passkey file "%1". Private key is missing or malformed. - + AES-256/GCM is currently not supported + AES-256/GCM šiuo metu nepalaikomas @@ -7047,6 +6077,10 @@ The following data is missing: Word Count: Žodžių skaičius: + + Character Count: + Simbolių Skaičius: + Word Case: Žodžio atvejis: @@ -7059,6 +6093,10 @@ The following data is missing: Add custom wordlist Pridėti pasirinktinį žodžių sąrašą + + character + simbolis + Close Užverti @@ -7095,30 +6133,6 @@ The following data is missing: Entropy: %1 bit Entropija: %1 bitų - - Password Quality: %1 - Slaptažodžio kokybė: %1 - - - Poor - Password quality - Blogas - - - Weak - Password quality - Silpnas - - - Good - Password quality - Geras - - - Excellent - Password quality - Puikus - Confirm Delete Wordlist Patvirtinti žodžių sąrašo ištrinimą @@ -7166,20 +6180,32 @@ Ar norite jį perrašyti? Specialūs simboliai - passwordLength - + Password Quality: %1 + Slaptažodžio kokybė: %1 - Characters: %1 - + Poor + Password quality + Blogas - MIXED case - + Weak + Password quality + Silpnas - Excluded characters: "0", "1", "l", "I", "O", "|", "﹒", "B", "8", "G", "6" - + Good + Password quality + Geras + + + Excellent + Password quality + Puikus + + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + Neįtraukti simboliai: "0", "1", "l", "I", "O", "|", "﹒". @@ -7202,7 +6228,7 @@ Ar norite jį perrašyti? Warning: Caps Lock enabled! - Įspėjimas: įjungtas "Caps Lock"! + Įspėjimas: Įjungtos didžiosios raidės! Quality: %1 @@ -7229,7 +6255,7 @@ Ar norite jį perrašyti? Puikus - Toggle password visibility using Control + H. Open the password generator using Control + G. + Toggle password visibilty using Control + H. Open the password generator using Control + G. @@ -7248,21 +6274,6 @@ Ar norite jį perrašyti? Paspauskite ir tabuliuokite tarp simbolių - - PreviewEntryAttachmentsDialog - - Preview entry attachment - - - - No preview available - - - - Image format not supported - - - QMessageBox @@ -7301,10 +6312,6 @@ Ar norite jį perrašyti? Continue Tęsti - - Continue with weak password - Tęsti naudojant silpną slaptažodį - QObject @@ -7502,7 +6509,7 @@ Ar norite jį perrašyti? Password for '%1' has been leaked %2 time(s)! - "%1" slaptažodis buvo nutekintas %2 kartus per (-ius)!"%1" slaptažodis buvo nutekintas %2 kartus per (-ius)!"%1" slaptažodis buvo nutekintas %2 kartus per (-ius)!"%1" slaptažodis buvo nutekintas %2 kartus per (-ius)! + '%1' slaptažodis buvo nutekintas %2 kartą!'%1' slaptažodis buvo nutekintas %2 kartus!'%1' slaptažodis buvo nutekintas %2 kartų!'%1' slaptažodis buvo nutekintas %2 kartus! Password for '%1' has been leaked! @@ -7652,7 +6659,7 @@ Ar norite jį perrašyti? Clearing the clipboard in %1 second(s)... - Iškarpinės išvalymas per %1 sekundę (-as)...Iškarpinės išvalymas per %1 sekundę (-as)...Iškarpinės išvalymas per %1 sekundę (-as)...Iškarpinės išvalymas per %1 sekundę (-as)... + Iškarpinė bus išvalyta už %1 sekundėsIškarpinė bus išvalyta už %1 sekundžiųIškarpinė bus išvalyta už %1 sekundžiųIškarpinė bus išvalyta už %1 sekundžių Clipboard cleared! @@ -7698,10 +6705,6 @@ Ar norite jį perrašyti? Too many arguments provided. Pateikta per daug argumentų. - - Path of the database. - Duomenų bazės kelias. - Target decryption time in MS for the database. Norimas duomenų bazės iššifravimo laikas ms. @@ -7722,6 +6725,10 @@ Ar norite jį perrašyti? Create a new database. Sukurti naują duomenų bazę. + + Path of the database. + Duomenų bazės kelias. + Invalid decryption time %1. Netinkamas iššifravimo laikas %1. @@ -7766,158 +6773,6 @@ Ar norite jį perrašyti? Successfully created new database. Nauja duomenų bazė sėkmingai sukurta. - - Unset the password for the database. - Panaikinti duomenų bazės slaptažodį. - - - Unset the key file for the database. - - - - Edit a database. - Redaguoti duomenų bazę - - - Cannot use %1 and %2 at the same time. - Negalima vienu metu naudoti %1 ir %2. - - - Could not change the database key. - Nepavyko pakeisti duomenų bazės rakto. - - - Database was not modified. - Duomenų bazė nebuvo modifikuota. - - - Writing the database failed: %1 - Nepavyko įrašyti duomenų bazės: %1 - - - Successfully edited the database. - - - - Cannot remove password: The database does not have a password. - Negalima pašalinti slaptažodžio: Duomenų bazėje nėra slaptažodžio. - - - Cannot remove file key: The database does not have a file key. - - - - Loading the new key file failed: %1 - - - - Found unexpected Key type %1 - - - - Cannot remove all the keys from a database. - Negalima pašalinti visų duomenų bazės raktų. - - - Show a database's information. - Rodyti duomenų bazės informaciją. - - - UUID: - UUID: - - - Name: - Pavadinimas: - - - Description: - Aprašymas: - - - Cipher: - Šifras: - - - KDF: - KDF: - - - Recycle bin is enabled. - Šiukšliadėžė yra įjungta. - - - Recycle bin is not enabled. - Šiukšliadėžė nėra įjungta. - - - Location - Vieta - - - Database created - Duomenų bazė sukurta - - - Last saved - Paskutinį kartą išsaugota - - - Unsaved changes - Neišsaugoti pakeitimai - - - yes - taip - - - no - ne - - - Number of groups - Grupių skaičius - - - Number of entries - Įrašų skaičius - - - Number of expired entries - Nebegaliojančių įrašų skaičius - - - Unique passwords - Unikalūs slaptažodžiai - - - Non-unique passwords - Pasikartojantys slaptažodžiai - - - Maximum password reuse - Maksimalus pakartotinis slaptažodžio naudojimas - - - Number of short passwords - Trumpų slaptažodžių skaičius - - - Number of weak passwords - Silpnų slaptažodžių skaičius - - - Entries excluded from reports - Įrašai, neįtraukti į ataskaitas - - - Average password length - Vidutinis slaptažodžio ilgis - - - %1 characters - %1 simboliai - Word count for the diceware passphrase. Žodžių skaičius kauliukų slaptafrazei. @@ -7941,6 +6796,10 @@ Ar norite jį perrašyti? Invalid word count %1 Neteisingas žodžių skaičius %1 + + The word list is too small (< 1000 items) + Žodžių sąrašas per mažas (< 1000 items) + Title for the entry. Įrašo pavadinimas. @@ -7965,6 +6824,10 @@ Ar norite jį perrašyti? Enter new password for entry: Įveskite naują slaptažodį įrašui: + + Writing the database failed: %1 + Nepavyko įrašyti duomenų bazės: %1 + Successfully edited entry %1. Sėkmingai redaguotas įrašas %1. @@ -8085,6 +6948,10 @@ Ar norite jį perrašyti? Exit interactive mode. Išeikite iš interaktyvaus režimo. + + Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. + Formatas, kurį naudoti eksportuojant. Galima pasirinkti 'xml' arba 'csv'. Numatytasis yra 'xml'. + Exports the content of a database to standard output in the specified format. Eksportuoja duomenų bazės turinį į standartinę išvestį nurodytu formatu. @@ -8185,6 +7052,106 @@ Ar norite jį perrašyti? Successfully imported database. Sėkmingai importuota duomenų bazė. + + Show a database's information. + Rodyti duomenų bazės informaciją. + + + UUID: + UUID: + + + Name: + Pavadinimas: + + + Description: + Aprašymas: + + + Cipher: + Šifras: + + + KDF: + KDF: + + + Recycle bin is enabled. + Šiukšliadėžė yra įjungta. + + + Recycle bin is not enabled. + Šiukšliadėžė nėra įjungta. + + + Location + Vieta + + + Database created + Duomenų bazė sukurta + + + Last saved + Paskutinis išsaugojimas + + + Unsaved changes + Neišsaugoti pakeitimai + + + yes + taip + + + no + ne + + + Number of groups + Grupių skaičius + + + Number of entries + Įrašų skaičius + + + Number of expired entries + Nebegaliojančių įrašų skaičius + + + Unique passwords + Unikalūs slaptažodžiai + + + Non-unique passwords + Pasikartojantys slaptažodžiai + + + Maximum password reuse + Maksimalus pakartotinis slaptažodžio naudojimas + + + Number of short passwords + Trumpų slaptažodžių skaičius + + + Number of weak passwords + Silpnų slaptažodžių skaičius + + + Entries excluded from reports + Įrašai, neįtraukti į ataskaitas + + + Average password length + Vidutinis slaptažodžio ilgis + + + %1 characters + %1 simboliai + Unknown command %1 Nežinoma komanda %1 @@ -8241,11 +7208,11 @@ Prieinamos komandos: Deactivate password key for the database to merge from. - Deaktyvuokite duomenų bazės slaptažodžio raktą, iš kurio bus atliekamas sujungimas. + Deaktyvuokite duomenų bazės slaptažodžio raktą, iš kurios bus atliekamas sujungimas. Only print the changes detected by the merge operation. - Rašyti tik tuos pakeitimus, kurie buvo aptikti atliekant sujungimo operaciją. + Rodyti tik tuos pakeitimus, kurie buvo aptikti atliekant sujungimo operaciją. Yubikey slot for the second database. @@ -8357,10 +7324,6 @@ Prieinamos komandos: Show the protected attributes in clear text. Rodyti saugomus atributus atviru tekstu. - - Show all the attributes of the entry. - Rodyti visus įrašo atributus. - Show the attachments of the entry. Rodyti įrašo priedus. @@ -8431,10 +7394,6 @@ Apsvarstykite galimybę sukurti naują rakto failą. Invalid YubiKey serial %1 Neteisingas YubiKey serijos %1 - - Please present or touch your YubiKey to continue. - Norėdami tęsti, pristatykite arba palieskite savo YubiKey. - Enter password to encrypt database (optional): Įveskite slaptažodį duomenų bazei šifruoti (neprivaloma): @@ -8506,7 +7465,7 @@ Apsvarstykite galimybę sukurti naują rakto failą. Password is used %1 time(s) - Slaptažodis naudojamas %1 kartą (-ius)Slaptažodis naudojamas %1 kartą (-ius)Slaptažodis naudojamas %1 kartą (-ius)Slaptažodis naudojamas %1 kartą (-ius) + Slaptažodis naudojamas %1 kartąSlaptažodis naudojamas %1 kartusSlaptažodis naudojamas %1 kartusSlaptažodis naudojamas %1 kartų Password has expired @@ -8526,7 +7485,7 @@ Apsvarstykite galimybę sukurti naują rakto failą. Password expires in %1 day(s) - Slaptažodžio galiojimas baigiasi per %1 dieną (-as)Slaptažodžio galiojimas baigiasi per %1 dieną (-as)Slaptažodžio galiojimas baigiasi per %1 dieną (-as)Slaptažodžio galiojimas baigiasi per %1 dieną (-as) + Slaptažodžio galiojimo laikas baigiasi po %1 dienosSlaptažodžio galiojimo laikas baigiasi po %1 dienųSlaptažodžio galiojimo laikas baigiasi po %1 dienųSlaptažodžio galiojimo laikas baigiasi po %1 dienų Password will expire soon @@ -8598,27 +7557,27 @@ Branduolys: %3 %4 over %1 year(s) - per %1 metus (-us)per %1 metus (-us)per %1 metus (-us)per %1 metus (-us) + daugiau kaip %1 metaidaugiau kaip %1 metaidaugiau kaip %1 metaidaugiau kaip %1 metų about %1 month(s) - apie %1 mėnesį (-ius)apie %1 mėnesį (-ius)apie %1 mėnesį (-ius)apie %1 mėnesį (-ius) + apie %1 mėnesįapie %1 mėnesiusapie %1 mėnesiusapie %1 mėnesių %1 week(s) - %1 savaitė (-ės)%1 savaitė (-ės)%1 savaitė (-ės)%1 savaitė (-ės) + %1 savaitė%1 savaitės%1 savaitės%1 savaičių %1 day(s) - %1 diena (-os)%1 diena (-os)%1 diena (-os)%1 diena (-os) + %1 diena%1 dienos%1 dienos%1 dienų %1 hour(s) - %1 val.%1 val.%1 val.%1 val. + 1 valanda%1 valandos%1 valandos%1 valandų %1 minute(s) - %1 minutė (-os)%1 minutė (-os)%1 minutė (-os)%1 minutė (-os) + %1 minutė%1 minutės%1 minutės%1 minučių Botan library must be at least %1, found %2.%3.%4 @@ -8672,6 +7631,18 @@ Branduolys: %3 %4 file empty failas tuščias + + malformed string + netaisyklinga eilutė + + + missing closing quote + trūksta užveriamosios kabutės + + + %1: (row, col) %2,%3 + %1: (eil., stulp.) %2,%3 + AES 256-bit AES 256 bitų @@ -8710,7 +7681,7 @@ Branduolys: %3 %4 Clearing the clipboard in %1 second(s)… - Iškarpinės išvalymas per %1 sekundę (-as)...Iškarpinės išvalymas per %1 sekundę (-as)...Iškarpinės išvalymas per %1 sekundę (-as)...Iškarpinės išvalymas per %1 sekundę (-as)... + Iškarpinė bus išvalyta už %1 sekundės...Iškarpinė bus išvalyta už %1 sekundžių...Iškarpinė bus išvalyta už %1 sekundžių...Iškarpinė bus išvalyta už %1 sekundžių Group @@ -8764,11 +7735,11 @@ Branduolys: %3 %4 Do you really want to delete %n entry(s) for good? - Ar tikrai norite visam laikui ištrinti %n įrašą (-us)?Ar tikrai norite visam laikui ištrinti %n įrašą (-us)?Ar tikrai norite visam laikui ištrinti %n įrašą (-us)?Ar tikrai norite visam laikui ištrinti %n įrašą (-us)? + Ar tikrai norite visam laikui ištrinti %n įrašą?Ar tikrai norite visam laikui ištrinti %n įrašus?Ar tikrai norite visam laikui ištrinti %n įrašus?Ar tikrai norite visam laikui ištrinti %n įrašų? Delete entry(s)? - Ištrinti įrašą (-us)?Ištrinti įrašą (-us)?Ištrinti įrašą (-us)?Ištrinti įrašą (-us)? + Ištrinti įrašą?Ištrinti įrašus?Ištrinti įrašus?Ištrinti įrašus? Do you really want to move entry "%1" to the recycle bin? @@ -8780,7 +7751,7 @@ Branduolys: %3 %4 Move entry(s) to recycle bin? - Perkelti įrašą (-us) į šiukšliadėžę?Perkelti įrašą (-us) į šiukšliadėžę?Perkelti įrašą (-us) į šiukšliadėžę?Perkelti įrašą (-us) į šiukšliadėžę? + Perkelti įrašą į šiukšliadėžę?Perkelti įrašus į šiukšliadėžę?Perkelti įrašus į šiukšliadėžę?Perkelti įrašus į šiukšliadėžę? Replace references to entry? @@ -8850,6 +7821,14 @@ Branduolys: %3 %4 read password of the database from stdin nuskaityti duomenų bazės slaptažodį iš stdin + + allow app screen recordering and screenshots + leisti programėlės ekrano įrašymą ir ekrano nuotraukų darymą + + + Locked databases. + Užrakintos duomenų bazės. + Database failed to lock. Duomenų bazės nepavyko užrakinti. @@ -8858,10 +7837,6 @@ Branduolys: %3 %4 Another instance of KeePassXC is already running. Jau yra paleistas kitas KeePassXC egzempliorius. - - KeePassXC is not running. No open database to lock - KeePassXC nėra įjungtas. Nėra atviros duomenų bazės, kurią būtų galima užrakinti - Fatal error while testing the cryptographic functions. Lemtingoji klaida, testuojant šifravimo funkcijas. @@ -8905,299 +7880,69 @@ Branduolys: %3 %4 Netinkamas KDF - Access to all entries is denied + Please present or touch your YubiKey to continue. + Norėdami tęsti, pristatykite arba palieskite savo YubiKey. + + + Show all the attributes of the entry. + Rodyti visus įrašo atributus. + + + Edit a database. + Redaguoti duomenų bazę + + + Could not change the database key. + Nepavyko pakeisti duomenų bazės rakto. + + + Database was not modified. + Duomenų bazė nebuvo modifikuota. + + + Successfully edited the database. - allow screenshots and app recording (Windows/macOS) + Loading the new key file failed: %1 + + + + Unset the password for the database. + Panaikinti duomenų bazės slaptažodį. + + + Unset the key file for the database. + + + + Cannot use %1 and %2 at the same time. + Negalima vienu metu naudoti %1 ir %2. + + + Cannot remove all the keys from a database. + Negalima pašalinti visų duomenų bazės raktų. + + + Cannot remove password: The database does not have a password. + Negalima pašalinti slaptažodžio: Duomenų bazė neturi slaptažodžio. + + + Cannot remove file key: The database does not have a file key. + + + + Found unexpected Key type %1 Set the key file for the database. -This option is deprecated, use --set-key-file instead. +This options is deprecated, use --set-key-file instead. - Databases have been locked. - Duomenų bazės užrakintos. - - - Attestation not supported - - - - Credential is excluded - - - - Passkeys request canceled - - - - Invalid user verification - - - - Empty public key - - - - Invalid URL provided - - - - Passkeys - - - - AES initialization failed - - - - AES encrypt failed - - - - Failed to store in Linux Keyring - - - - Polkit returned an error: %1 - - - - Could not locate key in keyring - - - - Could not read key in keyring - - - - AES decrypt failed - - - - No Polkit authentication agent was available - - - - Polkit authorization failed - - - - No Quick Unlock provider is available - - - - Failed to init KeePassXC crypto. - - - - Failed to encrypt key data. - Nepavyko užšifruoti rakto duomenų. - - - Failed to get Windows Hello credential. - - - - Failed to decrypt key data. - Nepavyko iššifruoti rakto duomenų. - - - Origin is empty or not allowed - - - - Effective domain is not a valid domain - - - - Origin and RP ID do not match - - - - No supported algorithms were provided - - - - Wait for timer to expire - - - - Challenge is shorter than required minimum length - - - - user.id does not match the required length - - - - Favorite - Tag for favorite entries - - - - File does not exist. - Failo nėra. - - - Cannot open file: %1 - Nepavyksta atverti failo: %1 - - - Cannot parse file: %1 at position %2 - - - - Failed to decrypt json file: %1 - - - - Invalid encKeyValidation field - - - - Invalid cipher list within encKeyValidation field - - - - Wrong password - Neteisingas slaptažodis - - - Invalid encrypted data field - - - - Invalid cipher list within encrypted data field - - - - Cannot initialize cipher - Nepavyksta inicijuoti šifro - - - Cannot decrypt data - Nepavyksta iššifruoti duomenų - - - Bitwarden Import - - - - Archived - Tag for archived entries - - - - Invalid 1PUX file format: Not a valid ZIP file. - - - - Invalid 1PUX file format: Missing export.data - - - - 1Password Import - - - - Enter Shortcut - - - - Action - - - - Shortcuts - - - - Unknown passkeys error - - - - Invalid KDF iterations, cannot decrypt json file - - - - Unsupported format, ensure your Bitwarden export is password-protected - - - - Only PBKDF and Argon2 are supported, cannot decrypt json file - - - - Reset Shortcuts - - - - Double click an action to change its shortcut - - - - Filter... - - - - Shortcut Conflict - - - - Shortcut %1 conflicts with '%2'. Overwrite shortcut? - - - - Cannot generate valid passphrases because the wordlist is too short - - - - Encrypted files are not supported. - - - - Proton Pass Import - - - - Delete plugin data? - Ištrinti papildinių duomenis? - - - Delete plugin data from Entry(s)? - - - - Passkey - - - - Format to use when exporting. Available choices are 'xml', 'csv' or 'html'. Defaults to 'xml'. - - - - start minimized to the system tray - - - - malformed string, possible unescaped delimiter - - - - missing closing delimiter - - - - %1, row: %2, column: %3 - - - - Tags - Žymos + KeePassXC is not running. No open database to lock + KeePassXC nėra įjungtas. Nėra atviros duomenų bazės, kurią būtų galima užrakinti @@ -9234,46 +7979,27 @@ This option is deprecated, use --set-key-file instead. Vidinė zlib klaida: - - RemoteHandler - - Command `%1` did not finish in time. Process was killed. - - - - Failed to upload merged database. Command `%1` did not finish in time. Process was killed. - - - - Invalid download parameters provided. - - - - Command `%1` failed to download database. - - - - Invalid database pointer or upload parameters provided. - - - - Command `%1` exited with status code: %2 - - - - Failed to upload merged database. Command `%1` exited with status code: %2 - - - ReportsWidgetBrowserStatistics + + Exclude expired entries from the report + Į ataskaitą neįtraukti įrašų, kurių galiojimo laikas pasibaigęs + + + Show only entries which have URL set + Rodyti tik tuos įrašus, kurių URL nustatytas + + + Show only entries which have browser settings in custom data + Rodyti tik tuos įrašus, kurių naršyklės parametrai yra pasirinktiniuose duomenyse + Double-click entries to edit. Norint redaguoti įrašus, dukart spustelėkite juos. List of entry URLs - Įrašų URL adresų sąrašas + Įrašo URL adresų sąrašas Entry has no URLs set @@ -9331,53 +8057,44 @@ This option is deprecated, use --set-key-file instead. Exclude from reports Neįtraukti į ataskaitas - - Expire Entry(s)… - - - - Only show entries that have a URL - - - - Only show entries that have been explicitly allowed or denied - - - - Show expired entries - Rodyti nebegaliojančius įrašus - - - (Expired) - (Nebegalioja) - - - Delete plugin data from Entry(s)… - - ReportsWidgetHealthcheck - Show expired entries - Rodyti nebegaliojančius įrašus + Exclude expired entries from the report + Į ataskaitą neįtraukti įrašų, kurių galiojimo laikas pasibaigęs - (Expired) - (Nebegalioja) + Also show entries that have been excluded from reports + Taip pat rodyti įrašus, kurie nebuvo įtraukti į ataskaitas Hover over reason to show additional details. Double-click entries to edit. Užveskite pelės žymeklį virš priežasties, kad parodytumėte papildomą informaciją. Dukart spustelėkite įrašus, kuriuos norite redaguoti. + + Bad + Password quality + Blogas + Bad — password must be changed - Blogas - slaptažodis turi būti pakeistas + Blogas — slaptažodis turi būti pakeistas + + + Poor + Password quality + Blogas Poor — password should be changed Prastas — slaptažodis turėtų būti pakeistas + + Weak + Password quality + Silpnas + Weak — consider changing the password Silpnas — apsvarstykite galimybę pakeisti slaptažodį @@ -9426,14 +8143,6 @@ This option is deprecated, use --set-key-file instead. Exclude from reports Neįtraukti į ataskaitas - - Expire Entry(s)… - - - - Show entries that have been excluded from reports - - ReportsWidgetHibp @@ -9523,83 +8232,12 @@ This option is deprecated, use --set-key-file instead. Delete Entry(s)… - Ištrinti įrašą (-us)...Ištrinti įrašą (-us)...Ištrinti įrašą (-us)...Ištrinti įrašą (-us)... + Ištrinti įrašą...Ištrinti įrašusIštrinti įrašusIštrinti įrašus Exclude from reports Neįtraukti į ataskaitas - - Expire Entry(s)… - - - - - ReportsWidgetPasskeys - - Export - Eksportuoti - - - Import - Importuoti - - - List of entry URLs - Įrašo URL adresų sąrašas - - - Title - Antraštė - - - Path - Kelias - - - Username - Naudotojo vardas - - - URLs - URL adresai - - - Edit Entry… - Redaguoti Įrašą... - - - Delete Entry(s)… - Ištrinti įrašą...Ištrinti įrašusIštrinti įrašusIštrinti įrašus - - - Relying Party - - - - Show expired entries - Rodyti nebegaliojančius įrašus - - - (Expired) - (Nebegalioja) - - - Export Confirmation - Eksporto Patvirtinimas - - - The passkey file will be vulnerable to theft and unauthorized use, if left unsecured. Are you sure you want to continue? - - - - Please wait, list of entries with passkeys is being updated… - - - - No entries with passkeys. - - ReportsWidgetStatistics @@ -9617,7 +8255,7 @@ This option is deprecated, use --set-key-file instead. Please wait, database statistics are being calculated… - Palaukite, skaičiuojami duomenų bazės statistiniai duomenys... + Palaukite, skaičiuojama duomenų bazės statistika... Database name @@ -9774,14 +8412,6 @@ This option is deprecated, use --set-key-file instead. No agent running, cannot list identities. Joks agentas neveikia, negali išvardyti tapatybių. - - Failed to remove all SSH identities from agent. - - - - All SSH identities removed from agent. - - SearchHelpWidget @@ -9848,10 +8478,6 @@ This option is deprecated, use --set-key-file instead. Search Help Paieškos pagalba - - Save Search - Išsaugoti paiešką - Search (%1)… Search placeholder text, %1 is the keyboard shortcut @@ -9865,6 +8491,10 @@ This option is deprecated, use --set-key-file instead. Limit search to selected group Riboti paiešką iki pasirinktos grupės + + Save Search + Išsaugoti paiešką + SettingsClientModel @@ -9920,16 +8550,40 @@ This option is deprecated, use --set-key-file instead. <html><head/><body><p>If enabled, any attempt to read a password must be confirmed. Otherwise, clients can read passwords without confirmation when the database is unlocked.</p><p>This option only covers the access to the password of an entry. Clients can always enumerate the items of exposed databases and query their attributes.</p></body></html> - <html><head/><body><p>Jei įjungta, bet koks bandymas perskaityti slaptažodį turi būti patvirtintas. Priešingu atveju klientai gali skaityti slaptažodžius be patvirtinimo, kai duomenų bazė atrakinta.</p><p>Ši parinktis taikoma tik prieigai prie įrašo slaptažodžio. Klientai visada gali išvardyti atidarytų duomenų bazių elementus ir užklausti jų atributų. + <html><head/><body><p>Jei įjungta, bet koks bandymas perskaityti slaptažodį turi būti patvirtintas. Priešingu atveju klientai gali skaityti slaptažodžius be patvirtinimo, kai duomenų bazė atrakinta.</p><p>Ši parinktis taikoma tik prieigai prie įrašo slaptažodžio. Klientai visada gali išvardyti atidarytų duomenų bazių elementus ir užklausti jų atributų.</p></body></html> Confirm when passwords are retrieved by clients Patvirtinti, kai klientai gauna slaptažodžius + + <html><head/><body><p><span style=" + font-family:'-apple-system','BlinkMacSystemFont','Segoe UI','Helvetica','Arial','sans-serif','Apple Color + Emoji','Segoe UI Emoji'; font-size:14px; color:#24292e; background-color:#ffffff;">This setting does + not override disabling recycle bin prompts</span></p></body></html> + + <html><head/><body><p><span style=" + font-family:'-apple-system','BlinkMacSystemFont','Segoe UI','Helvetica','Arial','sans-serif','Apple Color + Emoji','Segoe UI Emoji'; font-size:14px; color:#24292e; background-color:#ffffff;">Šis parametras veikia + nepaisykite šiukšlinės raginimų išjungimo</span></p></body></html> + + Confirm when clients request entry deletion Patvirtinti, kai klientai prašo ištrinti įrašą + + <html><head/><body><p>This improves compatibility with certain applications + which search for password without unlocking the database first.</p><p>But enabling this may also + crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a + different value set in applications.)</p></body></html> + + <html><head/><body><p>Tai pagerina suderinamumą su tam tikromis programomis + kurie ieško slaptažodžio prieš tai neatrakindami duomenų bazės.</p><p>Tačiau tai taip pat gali būti įgalinimas + sugesti klientą, jei duomenų bazės negalima atrakinti per tam tikrą skirtąjį laiką. (Paprastai 25-eri, bet gali būti + skirtingos vertės, nustatytos programose.)</p></body></html> + + Prompt to unlock database before searching Prašyti atrakinti duomenų bazę prieš pradedant paiešką @@ -9952,15 +8606,7 @@ This option is deprecated, use --set-key-file instead. Save current changes to activate the plugin and enable editing of this section. - Išsaugoti esamus pakeitimus, kad papildinys būtų įjungtas ir būtų galima redaguoti šį skyrių. - - - <html><head/><body><p>This setting does not override disabling recycle bin prompts </p></body></html> - - - - <html><head/><body><p>This improves compatibility with certain applications which search for password without unlocking the database first.</p><p>But enabling this may also crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a different value set in applications.) </p></body></html> - + Išsaugokite esamus pakeitimus, kad papildinys būtų įjungtas ir būtų galima redaguoti šį skyrių. @@ -10069,14 +8715,6 @@ This option is deprecated, use --set-key-file instead. TagModel - - Clear Search - Išvalyti paiešką - - - All Entries - Visi įrašai - Expired Pasibaigęs @@ -10085,6 +8723,14 @@ This option is deprecated, use --set-key-file instead. Weak Passwords Silpni slaptažodžiai + + All Entries + Visi įrašai + + + Clear Search + Išvalyti paiešką + TagView @@ -10117,7 +8763,7 @@ This option is deprecated, use --set-key-file instead. Expires in <b>%n</b> second(s) - Nustoja galioti <b>%n</b> sekunde (-ose)Nustoja galioti <b>%n</b> sekunde (-ose)Nustoja galioti <b>%n</b> sekunde (-ose)Nustoja galioti <b>%n</b> sekunde (-ose) + Galiojimas baigiasi už <b>%n</b> sekundėsGaliojimas baigiasi už <b>%n</b> sekundžių Galiojimas baigiasi už <b>%n</b> sekundžių Galiojimas baigiasi už <b>%n</b> sekundžių @@ -10262,6 +8908,26 @@ Pavyzdys: JBSWY3DPEHPK3PXP Start storing your passwords securely in a KeePassXC database Pradėkite saugiai laikyti savo slaptažodžius KeePassXC duomenų bazėje + + Create new database + Sukurti naują duomenų bazę + + + Open existing database + Atverti esamą duomenų bazę + + + Import from KeePass 1 + Importuoti iš KeePass + + + Import from 1Password + Importuoti iš 1Password + + + Import from CSV + Importuoti iš CSV + Recent databases Paskiausios duomenų bazės @@ -10274,18 +8940,6 @@ Pavyzdys: JBSWY3DPEHPK3PXP Welcome to KeePassXC %1 Sveiki atvykę į KeePassXC %1 - - Create Database - Sukurti duomenų bazę - - - Open Database - Atverti duomenų bazę - - - Import File - Importuoti failą - WinUtils @@ -10302,8 +8956,31 @@ Pavyzdys: JBSWY3DPEHPK3PXP Nepavyko užregistruoti visuotinio sparčiojo klavišo + + WindowsHello + + Failed to init KeePassXC crypto. + Nepavyko init KeePassXC kriptografiškai. + + + Failed to encrypt key data. + Nepavyko užšifruoti rakto duomenų. + + + Failed to get Windows Hello credential. + Nepavyko gauti "Windows Hello" kredencialų. + + + Failed to decrypt key data. + Nepavyko iššifruoti rakto duomenų. + + YubiKey + + %1 No interface, slot %2 + %1 Nėra sąsajos, laiko tarpsnis %2 + General: Bendra: @@ -10315,6 +8992,14 @@ Pavyzdys: JBSWY3DPEHPK3PXP YubiKeyEditWidget + + Refresh hardware tokens + Atnaujinti aparatinės įrangos žetonus + + + Refresh + Įkelti iš naujo + Hardware key slot selection Aparatūros rakto lizdo pasirinkimas @@ -10347,6 +9032,10 @@ Pavyzdys: JBSWY3DPEHPK3PXP Challenge-Response set, click to change or remove Iššūkio atsakymo rinkinys, spustelėkite, kad pakeistumėte arba pašalintumėte + + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + <p>Jei turite <a href="https://www.yubico.com/">"YubiKey"</a> arba <a href="https://onlykey.io">"OnlyKey"</a>, galite jį naudoti papildomam saugumui užtikrinti.</p><p>Raktas reikalauja, kad vienas iš jo lizdų būtų užprogramuotas kaip <a href="https://www.yubico.com/products/services-software/challenge-response/">HMAC-SHA1 iššūkis-atsakas</a>.</p> + Detecting hardware keys… Aptinkame aparatūros raktus... @@ -10355,25 +9044,28 @@ Pavyzdys: JBSWY3DPEHPK3PXP No hardware keys detected Neaptikti jokie aparatūros raktai + + + YubiKeyInterface - Refresh hardware keys - Iš naujo įkelti aparatinės įrangos raktus - - - <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed with <a href="https://keepassxc.org/docs/#faq-yubikey-howto">Challenge-Response</a>.</p> - - - - Hardware keys found, but no slots are configured - + %1 Invalid slot specified - %2 + %1 Nurodytas netinkamas laiko tarpsnis – %2 YubiKeyInterfacePCSC + + (PCSC) %1 [%2] Challenge-Response - Slot %3 + (PCSC) %1 [%2] Atsakas į iššūkius – laiko tarpsnis %3 + The YubiKey PCSC interface has not been initialized. YubiKey PCSC sąsaja nebuvo inicijuota. + + Hardware key is currently in use. + Šiuo metu naudojamas aparatūros raktas. + Could not find or access hardware key with serial number %1. Please present it to continue. Nepavyko rasti arba pasiekti aparatūros rakto su serijos numeriu %1. Prašome jį pristatyti, kad tęstumėte. @@ -10390,21 +9082,6 @@ Pavyzdys: JBSWY3DPEHPK3PXP Failed to complete a challenge-response, the PCSC error code was: %1 Nepavyko užbaigti iššūkio atsakymo, PCSC klaidos kodas buvo: %1 - - (NFC) %1 [%2] - Slot %3, %4 - YubiKey display fields - - - - Press - USB Challenge-Response Key interaction request - Paspausti - - - Passive - USB Challenge-Response Key no interaction required - Pasyvus - YubiKeyInterfaceUSB @@ -10412,6 +9089,14 @@ Pavyzdys: JBSWY3DPEHPK3PXP Unknown Nežinoma + + (USB) %1 [%2] Configured Slot - %3 + (USB) %1 [%2] Sukonfigūruotas lizdas – %3 + + + (USB) %1 [%2] Challenge-Response - Slot %3 - %4 + (USB) %1 [%2] Atsakas į iššūkį - lizdas %3 - %4 + Press USB Challenge-Response Key interaction request @@ -10426,6 +9111,10 @@ Pavyzdys: JBSWY3DPEHPK3PXP The YubiKey USB interface has not been initialized. YubiKey USB sąsaja nebuvo inicijuota. + + Hardware key is currently in use. + Šiuo metu naudojamas aparatūros raktas. + Could not find hardware key with serial number %1. Please plug it in to continue. Nepavyko rasti aparatūros rakto su serijos numeriu %1. Norėdami tęsti, prijunkite jį prie jo. @@ -10442,15 +9131,5 @@ Pavyzdys: JBSWY3DPEHPK3PXP Failed to complete a challenge-response, the specific error was: %1 Nepavykus užbaigti iššūkio atsakymo, konkreti klaida buvo tokia: %1 - - %1 [%2] - Slot %3 - YubiKey NEO display fields - - - - %1 [%2] - Slot %3, %4 - YubiKey display fields - - \ No newline at end of file diff --git a/share/translations/keepassxc_my.ts b/share/translations/keepassxc_my.ts index ca342676f..ec3666078 100644 --- a/share/translations/keepassxc_my.ts +++ b/share/translations/keepassxc_my.ts @@ -35,7 +35,7 @@ Debug Info - ချွတ်ယွင်းချက်ပြုပြင်ခြင်းဆိုင်ရာ အချက်အလက် + ချို့ယွင်းချက် ပြုပြင်ခြင်းဆိုင်ရာ အချက်အလက် Include the following information whenever you report a bug: @@ -80,10 +80,6 @@ Details အသေးစိတ် အချက်အလက်များ - - Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. - KeePassXC နှင့် ဖွင့်ရန်တောင်းဆိုထားသော အခြား Client နှစ်ခုစလုံး အလုပ်လုပ်နေချိန်တွင် သင့်ဆုံးဖြတ်ချက်များအား မှတ်သားထားမည်ဖြစ်သည်။ - Remember မှတ်ထားရန် @@ -92,6 +88,10 @@ Allow Selected ရွေးထားသည့်အရာများကို ခွင့်ပြုရန် + + Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. + KeePassXC နှင့် ဖွင့်ရန်တောင်းဆိုထားသော အခြား Client နှစ်ခုစလုံး အလုပ်လုပ်နေချိန်တွင် သင့်ဆုံးဖြတ်ချက်များအား မှတ်သားထားမည်ဖြစ်သည်။ + Deny All && Future အားလုံးကို ယခုရော နောင်ရော ငြင်းဆိုမည်။ @@ -122,10 +122,6 @@ Use OpenSSH OpenSSH အသုံးပြုရန် - - Use both agents - အေးဂျင့် နှစ်ခုလုံးကို အသုံးပြုပါ - SSH_AUTH_SOCK override SSH_AUTH_SOCK အစားထိုးမှု @@ -154,6 +150,10 @@ SSH Agent connection is working! SSH အေးဂျင့် ချိတ်ဆက်မှု အလုပ်လုပ်နေသည်။ + + Use both agents + အေးဂျင့် နှစ်ခုလုံးကို အသုံးပြုပါ + ApplicationSettingsWidget @@ -169,10 +169,6 @@ Security လုံခြုံရေး - - This setting cannot be enabled when minimize on unlock is enabled. - အန်လော့ခ်လုပ်ချိန် မြင်ကွင်းကျုံ့ခြင်းကို ရွေးချယ်ထားချိန် ဤ‌ရွေးချယ်မှုကို ပြုလုပ်၍မရပါ။ - Access error for config file %1 ချိန်ညှိဖိုင် %1 အတွက် အသုံးပြုခွင့် ပြဿနာ @@ -217,56 +213,28 @@ You must restart the application to set the new language. Would you like to restart now? ဘာသာစကားသစ် သတ်မှတ်ရန် အက်ပလီကေးရှင်းကို ပြန်လည်စတင်ရပါမည်။ ယခု ပြန်စလိုပါသလား။ + + Reset Settings? + ဆက်တင်များကို ပြန်လည် သတ်မှတ်မလား။ + + + Are you sure you want to reset all general and security settings to default? + ယေဘုယျနှင့် လုံခြုံရေး ဆက်တင်အားလုံးကို ပုံသေမူလအဖြစ် ပြန်လည်သတ်မှတ်လိုသည်မှာ သေချာပါသလား။ + Select backup storage directory အရံသိမ်းဖိုင်ကို သိမ်းမည့် နေရာရွေးပါ။ - Confirm Reset - - - - Are you sure you want to reset all settings to default? - - - - Import KeePassXC Settings - - - - Failed to import settings from %1, not a valid settings file. - - - - Export KeePassXC Settings - - - - Small - - - - Normal - - - - Medium - - - - Large - - - - Custom - + This setting cannot be enabled when minimize on unlock is enabled. + အန်လော့ခ်လုပ်ချိန် မြင်ကွင်းကျုံ့ခြင်းကို ရွေးချယ်ထားချိန် ဤ‌ရွေးချယ်မှုကို ပြုလုပ်၍မရပါ။ ApplicationSettingsWidgetGeneral Basic Settings - အခြေခံဆက်တင်များ + အခြေခံ ဆက်တင်များ Startup @@ -278,23 +246,19 @@ Automatically launch KeePassXC at system startup - စနစ် စတင်ဆောင်ရွက်ချိန်တွင် KeePassXC ကို အလိုအလျောက် မိတ်ဆက်ပါ + စနစ် စတင်ဆောင်ရွက်ချိန်တွင် KeePassXC ကို အလိုအလျောက် ဖွင့်ပါ Minimize window at application startup - အက်ပလီကေးရှင်း စတင်လုပ်ဆောင်ချိန်တွင် ဝင်းဒိုးကို အရွယ်သေးအောင်လုပ်ပါ + အက်ပလီကေးရှင်း စတင်လုပ်ဆောင်ချိန်တွင် ဝင်းဒိုးကို အသေးဆုံးအဖြစ် ချုံ့ပါ Minimize window after unlocking database - ဒေတာဘေ့စ်ကို လော့ဖြည်ပြီးနောက် ဝင်းဒိုးကို ချုံ့ပါ + ဒေတာဘေ့စ်ကို လော့ဖြည်ပြီးနောက် ဝင်းဒိုးကို အသေးဆုံးအဖြစ်ချုံ့ပါ Remember previously used databases - ယခင်ကသုံးခဲ့သော ဒေတာဘေ့စ်များကို မှတ်ထားပါ - - - recent files - မကြာသေးခင်က သုံးထားသော ဖိုင်များ + ယခင်က သုံးခဲ့သော ဒေတာဘေ့စ်များကို မှတ်ထားပါ Load previously open databases on startup @@ -302,7 +266,7 @@ Remember database key files and security dongles - ဒေတာဘေ့စ် စကားဝှက်သော့ ဖိုင်များနှင့် လုံခြုံရေး ကာကွယ်မှု ဟာ့ဝဲကို မှတ်ထားရန် + ဒေတာဘေ့စ် စကားဝှက်သော့ ဖိုင်များနှင့် လုံခြုံရေး ကာကွယ်မှု ဒန်ဂယ် ခေါ် ဟာ့ဝဲအစိတ်အပိုင်းလေးများကို မှတ်ထားရန် Check for updates at application startup once per week @@ -312,6 +276,25 @@ Include beta releases when checking for updates အပ်ဒိတ်များကို စစ်ဆေးချိန်တွင် အစမ်းသုံး ထုတ်လုပ်မှုများ ပါဝင်ပါစေ + + On database unlock, show entries that + ဒေတာဘေ့စ် ပွင့်နေလျင်, ........... သော ထည့်ပြီးသားအချက်အလက်များကို ပြပါ။ + + + have expired + On database unlock, show entries that... + သက်တမ်းကုန်သွား + + + days + On database unlock, show entries that will expire within %1 days + ရက်များ + + + will expire within + On database unlock, show entries that... + အတွင်းမှာ သက်တမ်းကုန်မည် + File Management ဖိုင်စီမံခန့်ခွဲမှု @@ -336,9 +319,21 @@ Backup database file before saving မသိမ်းမီ ဒေတာဘေ့စ်ဖိုင်ကို အရန်ပြုပါ + + Backup destination + အရံသိမ်းဖိုင် သိမ်းဆည်းရာနေရာ + + + Specifies the database backup file location. Occurrences of "{DB_FILENAME}" are replaced with the filename of the saved database without extension. {TIME:<format>} is replaced with the backup time, see https://doc.qt.io/qt-5/qdatetime.html#toString. <format> defaults to format string "dd_MM_yyyy_hh-mm-ss". + ဒေတာဘေ့စ် အရံသိမ်းဖိုင်ကို သိမ်းရန်နေရာ သတ်မှတ်ပြီးဖြစ်သည်။ "{DB_FILENAME}" များကို တွေ့ရှိပါက ၄င်းတို့ကို သိမ်းဆည်းထားသောဖိုင်နာမည်ဖြင့် extension မပါဘဲအစားထိုးသွားမည်ဖြစ်သည်။ {TIME:<format>} ကို‌ အရံသိမ်းဖိုင် သိမ်းရန်ကြာချိန် ဖြင့် အစားထိုးမည်။ https://doc.qt.io/qt-5/qdatetime.html#toString တွင်ကြည့်ပါ။ <format>ရက်စွဲ နဂိုထည့်သွင်းပြီး ဖောမတ်မှာ "dd_MM_yyyy_hh-mm-ss" ဖြစ်သည်။ + {DB_FILENAME}.old.kdbx - [DB_FILENAME].old.kdbx + {DB_FILENAME}.old.kdbx + + + Choose... + ရွေးချယ်ပါ Use alternative saving method (may solve problems with Dropbox, Google Drive, GVFS, etc.) @@ -362,7 +357,7 @@ Minimize when opening a URL - URL ဖွင့်ချိန်တွင် ချုံ့ပါ + URL တစ်ခု ဖွင့်ချိန်တွင် အသေးဆုံးအဖြစ် ချုံ့ပါ Hide window when copying to clipboard @@ -370,7 +365,7 @@ Minimize - ချုံ့ရန် + အသေးဆုံးအဖြစ်ချုံ့ရန် Drop to background @@ -378,7 +373,7 @@ Favicon download timeout: - သီးသန့်ဝက်ဘ်ဆိုက်အိုင်ကွန် ဒေါင်းလုဒ်လုပ်ရန် အချိန်ပြည့်ပါပြီ - + ဝက်ဘ်ဆိုက်အိုင်ကွန် ဒေါင်းလုဒ်လုပ်ရန် အချိန်ပြည့်ပါပြီ - Website icon download timeout in seconds @@ -417,21 +412,17 @@ Toolbar button style: တူးလ်ဘား ခလုတ် ပုံစံ - - - Show passwords in color - စကားဝှက်များကို အရောင်ဖြင့် ပြပါ - Use monospaced font for notes မှတ်စုများအတွက် နေရာယူတူသည့် ဖောင့်ကို အသုံးပြုရန် Minimize instead of app exit - အက်ပ်မှထွက်မည့်အစား အရွယ်သေးအောင်လုပ်ပါ + အက်ပ်မှ ထွက်မည့်အစား အသေးဆုံးအဖြစ်ချုံ့ပါ Show a system tray icon - အသိပေးချက်ပြရန်နေရာ အိုင်ကွန်ကို ပြရန် + အသိပေးချက် ပြရန်နေရာ အိုင်ကွန်ကို ပြရန် Tray icon type @@ -443,7 +434,7 @@ Hide window to system tray when minimized - အသေးဆုံးအဖြစ်ချုံ့ထားစဉ် ဝင်းဒိုးကို အသိပေးချက်ပြရန်နေရာတွင် ဝှက်ပါ + အသေးဆုံးအဖြစ်ချုံ့ထားစဉ် ဝင်းဒိုးကို အသိပေးချက်ပြရန်နေရာတွင် ဝှက်ရန် Reset settings to default… @@ -475,7 +466,7 @@ Auto-Type start delay: - အလိုအလျောက် စာရိုက်ခြင်း စတင်ကြန့်ကြာချိန် - + အလိုအလျောက် စာရိုက်ခြင်း စတင်ရန် ကြန့်ကြာချိန် - Global Auto-Type shortcut: @@ -488,11 +479,11 @@ ms Milliseconds - ms + မီလီစက္ကန့် Auto-Type typing delay: - အလိုအလျောက် စာရိုက်ခြင်း စာရိုက်ကြန့်ကြာချိန် - + အလိုအလျောက် စာရိုက်ခြင်းဖြင့် စာရိုက်ကြန့်ကြာချိန် - Global auto-type shortcut @@ -500,76 +491,19 @@ Auto-type character typing delay milliseconds - အလိုအလျောက် စာရိုက်ခြင်း စာလုံးရိုက် ကြန့်ကြာချိန် မီလီစက္ကန့် + အလိုအလျောက် စာရိုက်ခြင်းဖြင့် စာလုံးရိုက် ကြန့်ကြာချိန် မီလီစက္ကန့် Remember last typed entry for: နောက်ဆုံးရိုက်ထည့်ခဲ့သော ထည့်သွင်းချက်ကိုမှတ်ထားပါ - On database unlock, show entries that will expire within - + recent files + မကြာသေးခင်က သုံးထားသော ဖိုင်များ - On database unlock, show entries that will expire within - - - - days - number of days warning for password expiration - ရက်များ - - - Destination format: - - - - <html><head/><body><p><span style=" font-weight:600;">{DB_FILENAME}</span> is replaced with the filename of the saved database without extension</p><p><span style=" font-weight:600;">{TIME:&lt;format&gt;}</span> is replaced with the specified time format (default: dd_MM_yyyy_hh-mm-ss)</p><p>See the User Guide for more details</p></body></html> - - - - Choose folder... - - - - Show confirmation before moving entries to recycle bin - - - - Copy data on double clicking field in entry view - - - - Show toolbar - - - - Show the menu bar by pressing the Alt key - - - - Show menubar - - - - Import settings… - - - - Export settings… - - - - Open browser on double clicking URL field in entry view - - - - Font size: - - - - Font size selection - + Show passwords in color + စကားဝှက်များကို အရောင်ဖြင့် ပြပါ @@ -606,7 +540,7 @@ Lock databases after inactivity of - ဤမျှအသုံးမပြုပြီးနောက် ဒေတာဘေ့စ်များကို လော့ချရန် + ဤမျှ အသုံးမပြုပြီးနောက် ဒေတာဘေ့စ်များကို လော့ချရန် Convenience @@ -614,7 +548,7 @@ Enable database quick unlock (Touch ID / Windows Hello) - ဒေတာဘေ့စ်ကိုအလျင်အမြန်ပွင့်စနစ်ကို ဖွင့်ပါ + ဒေတာဘေ့စ်ကိုအလျင်အမြန်ပွင့်စနစ်ကို ဖွင့်ပါ (Touch ID / Windows Hello) Lock databases when session is locked or lid is closed @@ -622,7 +556,11 @@ Lock databases after minimizing the window - ဝင်းဒိုးကို ချုံ့ပြီးနောက် ဒေတာဘေ့စ်များကို လော့ချပါ + ဝင်းဒိုးကို အသေးဆုံးအဖြစ်ချုံ့ပြီးနောက် ဒေတာဘေ့စ်များကို လော့ချပါ + + + Require password repeat when it is visible + စကားဝှက် မြင်ရချိန်တွင် ထပ်ရိုက်ရန် လိုအပ်သည် Hide passwords when editing them @@ -630,11 +568,23 @@ Use placeholder for empty password fields - လွတ်နေသော စကားဝှက် အကွက်များအတွက် ကိန်းရှင်ကို သုံးပါ + လွတ်နေသော စကားဝှက် အကွက်များအတွက် placeholder ကို သုံးပါ Hide passwords in the entry preview panel - ဖြည့်သွင်းချက် နမူနာ မျက်နှာပြင်ရှိ စကားဝှက်များကို ဝှက်ပါ + ဖြည့်သွင်းချက် အစမ်းကြည့်မျက်နှာပြင်တွင် စကားဝှက်များကို ဝှက်ပါ + + + Hide entry notes by default + ဖြည့်သွင်းချက် မှတ်စုများကို ပုံသေ ဝှက်ပါ + + + Move entries to recycle bin without confirmation + ဖြည့်သွင်းချက်များကို အတည်ပြုချက်မလိုဘဲ အမှိုက်ပုံးသို့ ရွှေ့ရန် + + + Enable double click to copy the username/password entry columns + အသုံးပြုသူအမည်/စကားဝှက် ဖြည့်သွင်းချက် ကော်လံများကို ကူးရန် ကလစ်နှစ်ချက်နှိပ်ခြင်းကို ဖွင့်ထားပါ Privacy @@ -648,18 +598,6 @@ Hide TOTP in the entry preview panel - - Lock databases when switching user - - - - Lock Options - - - - Hide notes in the entry preview panel - - AutoType @@ -704,13 +642,27 @@ ကြန့်ကြာချိန် အလွန်ကြာကြောင်း တွေ့ရသည်၊ အများဆုံး %1 - %2 - Entry does not have attribute for PICKCHARS: %1 - ထည့်သွင်းမှုတွင် PICKCHARS အတွက် အရည်အချင်း မရှိပါ - %1 + Invalid conversion type: %1 + ပြောင်းလဲမှု အမျိုးအစား မမှန်ကန်ပါ - %1 + + + Invalid conversion syntax: %1 + ပြောင်းလဲမှု ဝါကျဖွဲ့စည်းပုံ မမှန်ကန်ပါ - %1 + + + Invalid regular expression syntax %1 +%2 + ပုံမှန်အသုံးအနှုန်း ဝါကျဖွဲ့စည်းပုံ မမှန်ကန်ပါ %1 +%2 Invalid placeholder: %1 placeholder မမှန်ကန်ပါ - %1 + + Entry does not have attribute for PICKCHARS: %1 + ထည့်သွင်းမှုတွင် PICKCHARS အတွက် အရည်အချင်း မရှိပါ - %1 + AutoTypeAssociationsModel @@ -752,6 +704,10 @@ AutoTypePlatformX11 + + Trying to send invalid keysym. + မမှန်ကန်သော ကီးသင်္ကေတ ပို့ရန် ကြိုးစားနေသည်။ + Sequence aborted: Caps Lock is on အစဉ်ကို ဖျက်လိုက်သည် - Caps Lock ဖွင့်ထားသည် @@ -764,10 +720,6 @@ Unable to get valid keycode for key: ကီးအတွက် မှန်ကန်သော ကီးကုဒ် မရနိုင်ပါ - - - Trying to send invalid keyboard symbol. - - AutoTypeSelectDialog @@ -786,12 +738,12 @@ Ctrl+1 - Type username<br/> Ctrl+2 - Type password<br/> Ctrl+3 - Type TOTP<br/> Ctrl+4 - Use Virtual Keyboard (Windows Only)</p> - အသုံးပြုနိုင်သော ‌ဒေတာဘေ့စ်များတွင် မည်သည့်ဖြည့်သွင်းချက်ကိုမဆို အဆင့်မြင့် ရှာဖွေမှု မေးမြန်းချက်များကို အသုံးပြုပြီးရှာဖွေ နိုင်သည်။ အောက်ပါရှော့(တ်)ကတ်များသည် အသုံးဝင်သည် -Ctrl+F - ဒေတာဘေ့စ် ရှာဖွေမှုကို အဖွင့်အပိတ်လုပ်ရန် -Ctrl+1 - အသုံးပြုသူအမည် ရိုက်ရန် -Ctrl+2 - စကားဝှက် ရိုက်ရန် -Ctrl+3 - TOTP ရိုက်ရန် -Ctrl+4 - ကီးဘုတ်ကိုအသုံးပြုမည်(ဝင်းဒိုးတွင်သာ) + <p>သင်၏ အသုံးပြုနိုင်သော ‌ဒေတာဘေ့စ်များတွင် မည်သည့်ဖြည့်သွင်းချက်ကိုမဆို အဆင့်မြင့် ရှာဖွေမှု မေးမြန်းချက်များကို အသုံးပြုပြီးရှာဖွေ နိုင်သည်။ အောက်ပါရှော့တ်ကတ်များသည် အသုံးဝင်သည်<br/> +Ctrl+F - ဒေတာဘေ့စ် ရှာဖွေမှုကို အဖွင့်အပိတ်လုပ်ရန်<br/> +Ctrl+1 - အသုံးပြုသူအမည် ရိုက်ရန်<br/> +Ctrl+2 - စကားဝှက် ရိုက်ရန်<br/> +Ctrl+3 - TOTP ရိုက်ရန်<br/> +Ctrl+4 - ကီးဘုတ်ကိုအသုံးပြုမည်(ဝင်းဒိုးတွင်သာ)</p> Search all open databases @@ -858,7 +810,7 @@ Ctrl+4 - ကီးဘုတ်ကိုအသုံးပြုမည်(ဝင Allow access to entries - အကြောင်းအရာများကို အသုံးပြုခွင့်ပေးရန် + ဖြည့်သွင်းချက်များကို အသုံးပြုခွင့်ပေးရန် Allow Selected @@ -872,13 +824,13 @@ Ctrl+4 - ကီးဘုတ်ကိုအသုံးပြုမည်(ဝင Disable for this site ဤဝက်ဘ်ဆိုက်အတွက် ပယ်ဖျက်ရန် - - Undo - - BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + KeePassXC-ဘရောက်ဇာ ဖြည့်သွင်းချက် သိမ်းရန် + Ok အိုကေ @@ -891,75 +843,15 @@ Ctrl+4 - ကီးဘုတ်ကိုအသုံးပြုမည်(ဝင You have multiple databases open. Please select the correct database for saving credentials. သင်သည် ဒေတာဘေ့စ်များစွာ ဖွင့်ထားသည်။ -ကျေးဇူးပြု၍ အထောက်အထားများသိမ်းရန်အတွက် မှန်ကန်သော ဒေတာဘေ့စ်ကို ရွေးပါ။ - - - KeePassXC - Select Database - - - - - BrowserPasskeysConfirmationDialog - - Cancel - ပယ်ဖျက်ရန် - - - Update - - - - Authenticate - - - - Register new - - - - Register - - - - Timeout in <b>%n</b> seconds... - - - - Relying Party: %1 - - - - Username: %1 - - - - KeePassXC - Passkey credentials - - - - Add to existing entry - - - - Existing passkey found. -Do you want to register a new passkey for: - - - - Select the existing passkey and press Update to replace it. - - - - Authenticate passkey credentials for: - - - - Do you want to register a passkey for: - +ကျေးဇူးပြု၍ အထောက်အထားများ သိမ်းရန်အတွက် မှန်ကန်သော ဒေတာဘေ့စ်ကို ရွေးပါ။ BrowserService + + KeePassXC: Create a new group + KeePassXC - အုပ်စုအသစ် ဖန်တီးရန် + A request for creating a new group "%1" has been received. Do you want to create this group? @@ -968,31 +860,47 @@ Do you want to create this group? ဤအုပ်စုကို ဖန်တီးလိုပါသလား။ + + KeePassXC: New key association request + KeePassXC - စကားဝှက်သော့အသစ် ဆက်စပ်မှု တောင်းဆိုချက် + You have received an association request for the following database: %1 Give the connection a unique name or ID, for example: chrome-laptop. - သင်သည် အောက်ပါဒေတာအတွက် ဆက်စပ်ရန် တောင်းဆိုချက် လက်ခံရရှိထားသည် - + သင်သည် အောက်ပါဒေတာဘေ့စ်အတွက် ဆက်စပ်မှု တောင်းဆိုချက် လက်ခံရရှိထားသည် - %1 -ချိတ်ဆက်မှုအတွက် သီးသန့် အမည် သို့မဟုတ် ID ပေးပါ၊ ဥပမာ - +ချိတ်ဆက်မှုကို သီးသန့် အမည် သို့မဟုတ် ID ပေးပါ၊ ဥပမာ - chrome-laptop။ 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? - "%1" အမည်နှင့် မျှဝေထားသော ကုဒ်ဖြင့်ပြောင်းခြင်း စကားဝှက်သော့ ရှိပြီးပါပြီ။ + "%1" အမည်နှင့် မျှဝေထားသော ကုဒ်ဖြင့်ပြောင်းသည့် စကားဝှက်သော့ ရှိပြီးပါပြီ။ ၎င်းကို ထပ်ရေးလိုပါသလား။ + + KeePassXC: Update Entry + KeePassXC - ဖြည့်သွင်းချက် အပ်ဒိတ်လုပ်ရန် + Do you want to update the information in %1 - %2? - %1 - %2 ရှိ အချက်အလက်ကို အပ်ဒိတ်လုပ်လိုပါသလား။ + %1 - %2 ရှိ အချက်အလက်ကို အပ်ဒိတ် လုပ်လိုပါသလား။ + + + KeePassXC: Delete entry + KeePassXC - ဖြည့်သွင်းချက် ဖျက်ရန် A request for deleting entry "%1" has been received. @@ -1003,57 +911,50 @@ Do you want to delete the entry? - %1 (Passkey) - + Converting attributes to custom data… + လက္ခဏာရပ်များကို စိတ်ကြိုက် အချက်အလက်အဖြစ် ပြောင်းနေသည်… - KeePassXC - Create a new group - + Abort + ဖျက်ပစ်ရန် - Disable - ပယ်ဖျက်ရန် + KeePassXC: Converted KeePassHTTP attributes + KeePassXC - ပြောင်းထားသော KeePassHTTP လက္ခဏာရပ်များ - KeePassXC - Overwrite existing key? - + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + ဖြည့်သွင်းချက် %1 ခုမှ လက္ခဏာရပ်များကို အောင်မြင်စွာ ပြောင်းပြီးပါပြီ။ +စကားဝှက်သော့ %2 ခုကို စိတ်ကြိုက်အချက်အလက်သို့ ရွှေ့ပြောင်းထားသည်။ + + + Successfully moved %n keys to custom data. + စကားဝှက်သော့ %n ခုကို စိတ်ကြိုက်အချက်အလက်သို့ အောင်မြင်စွာ ရွှေ့ပြောင်းပြီးပါပြီ။ - KeePassXC - Update Entry - + KeePassXC: No entry with KeePassHTTP attributes found! + KeePassXC - KeePassHTTP လက္ခဏာရပ်များပါသော ဖြည့်သွင်းချက် မတွေ့ပါ။ - KeePassXC - Delete entry - + The active database does not contain an entry with KeePassHTTP attributes. + အသုံးပြုနေသော ဒေတာဘေ့စ်တွင် KeePassHTTP လက္ခဏာရပ်များပါသော ဖြည့်သွင်းချက် မပါဝင်ပါ။ - KeePassXC - New key association request - + Don't show this warning again + ဤသတိပေးချက်ကို ထပ်မပြပါနှင့် - Passkey - + KeePassXC: Legacy browser integration settings detected + KeePassXC - အသုံးများသော ဘရောက်ဇာ ပေါင်းစပ်ထည့်သွင်းမှု ဆက်တင်ဟောင်းများ တွေ့ရှိသည် - KeePassXC - Passkey credentials - - - - Register a new passkey to this entry: - - - - KeePassXC - Update passkey - - - - Entry already has a passkey. -Do you want to overwrite the passkey in %1 - %2? - - - - Register - + 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? + သင့် KeePassXC-ဘရောက်ဇာ ဆက်တင်များကို ဒေတာဘေ့စ် ဆက်တင်များသို့ ရွှေ့ရန် လိုအပ်ပါသည်။ +သင်၏ လက်ရှိဘရောက်ဇာ ချိတ်ဆက်မှုများကို ထိန်းသိမ်းရန် လိုအပ်ပါသည်။ +သင်၏ တည်ရှိဆဲ ဆက်တင်များကို ယခု ရွှေ့လိုပါသလား။ @@ -1074,6 +975,10 @@ Do you want to overwrite the passkey in %1 - %2? General ယေဘုယျ + + Browsers installed as snaps are currently not supported. + snaps အဖြစ် တပ်ဆင်ထားသော ဘရောက်ဇာများကို လက်ရှိတွင် မပံ့ပိုးပါ။ + Enable integration for these browsers: ဤဘရောက်ဇာများအတွက် ပေါင်းစပ်ထည့်သွင်းမှုကို ဖွင့်ပါ - @@ -1146,7 +1051,7 @@ Do you want to overwrite the passkey in %1 - %2? Search in all opened databases for matching credentials Credentials mean login data requested via browser extension - လိုက်ဖက်သော အထောက်အထားများကို ဖွင့်ထားသည့် ဒေတာဘေ့စ်အားလုံးတွင် ရှာရန် + ကိုက်ညီသော အထောက်အထားများကို ဖွင့်ထားသည့် ဒေတာဘေ့စ်အားလုံးတွင် ရှာရန် Advanced @@ -1193,16 +1098,16 @@ Do you want to overwrite the passkey in %1 - %2? Use a custom proxy location if you installed a proxy manually. - သင်သည် ပရောက်စီကို ကိုယ်တိုင် တပ်ဆင်ထားပါက စိတ်ကြိုက်ပရောက်စီတည်နေရာကို သုံးပါ။ + သင်သည် ပရောက်စီကို ကိုယ်တိုင် တပ်ဆင်ထားပါက စိတ်ကြိုက်ပရောက်စီ တည်နေရာကို သုံးပါ။ Use a custom proxy location: Meant is the proxy for KeePassXC-Browser - စိတ်ကြိုက်ပရောက်စီတည်နေရာကို သုံးရန် - + စိတ်ကြိုက်ပရောက်စီ တည်နေရာကို သုံးရန် - Custom proxy location field - စိတ်ကြိုက်ပရောက်စီတည်နေရာ အကွက် + စိတ်ကြိုက်ပရောက်စီ တည်နေရာ အကွက် Browser for custom proxy file @@ -1215,7 +1120,7 @@ Do you want to overwrite the passkey in %1 - %2? Use a custom browser configuration location: - စိတ်ကြိုက်ဘရောက်ဇာ ချိန်ညှိမှုတည်နေရာ သုံးရန် - + စိတ်ကြိုက်ဘရောက်ဇာတစ်ခု ချိန်ညှိမှုတည်နေရာ သုံးရန် - Browser type: @@ -1231,7 +1136,7 @@ Do you want to overwrite the passkey in %1 - %2? Custom browser location field - စိတ်ကြိုက်ဘရောက်ဇာတည်နေရာ အကွက် + စိတ်ကြိုက်ဘရောက်ဇာ တည်နေရာ အကွက် Browse for custom browser path @@ -1245,6 +1150,26 @@ Do you want to overwrite the passkey in %1 - %2? Custom extension ID စိတ်ကြိုက်အဆက် ID + + Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 + Snap ကုဒ်စမ်းသပ်သည့်နည်းလမ်းအရ သင်သည် ဘရောက်ဇာ ပေါင်းစပ်ထည့်သွင်းမှု ပြုလုပ်ရန် ရိုးရိုးပရိုဂရမ်တစ်ခုကို လည်ပတ်ရပါမည်။ <br /> သင်သည် ဤရိုးရိုးပရိုဂရမ်ကို %1 မှ ရယူနိုင်သည် + + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 + ဘရောက်ဇာ ပေါင်းစပ်ထည့်သွင်းမှု အလုပ်လုပ်ရန်အတွက် KeePassXC-ဘရောက်ဇာ လိုအပ်သည်။ <br />%1 နှင့် %2 နှင့် %3 အတွက် ၎င်းကို ဒေါင်းလုဒ်လုပ်ပါ။ %4 + + + Please see special instructions for browser extension use below + ကျေးဇူးပြု၍ ဘရောက်ဇာအဆက် သုံးရန် အထူးညွှန်ကြားချက်များကို အောက်တွင်ကြည့်ပါ + + + <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. + <b>ပြဿနာ -</b> စိတ်ကြိုက်ပရောက်စီ တည်နေရာကို ရှာမတွေ့ပါ။<br/> ပရောက်စီ အက်ပလီကေးရှင်း မပါဘဲ ဘရောက်ဇာ ပေါင်းစပ်ထည့်သွင်းမှု အလုပ်လုပ်မည်မဟုတ်ပါ။ + + + <b>Warning:</b> The following options can be dangerous! + <b>သတိပေးချက် -</b>အောက်ပါရွေးချယ်မှုများသည် အန္တရာယ်ရှိနိုင်သည်။‌ + Executable Files လည်ပတ်လုပ်ဆောင်နိုင်သော ဖိုင်များ @@ -1255,52 +1180,12 @@ Do you want to overwrite the passkey in %1 - %2? Select custom proxy location - စိတ်ကြိုက်ပရောက်စီတည်နေရာကို ရွေးရန် + စိတ်ကြိုက်ပရောက်စီ တည်နေရာကို ရွေးရန် Select native messaging host folder location မူလ မက်ဆေ့ချ်ပို့သည့် လက်ခံဖိုင်တွဲတည်နေရာ ရွေးရန် - - Allow keepassxc-proxy to list all entries with their title, URL and UUID in connected databases. - - - - Allow limited access to all entries in connected databases (ignores site access restrictions) - - - - <b>Warning:</b> Only adjust these settings if necessary. - - - - The custom proxy location does not exist. - - - - <b>Error:</b> The custom proxy location does not exist. Correct this in the advanced settings tab. - - - - <b>Error:</b> The installed proxy executable is missing from the expected location: %1<br/>Please set a custom proxy location in the advanced settings or reinstall the application. - - - - Allows using insecure http://localhost with passkeys for testing purposes. - - - - Allow using localhost with passkeys - - - - KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. - - - - Browsers installed using Snap or Flatpak are not supported with exception to Firefox installed using Snap. - - CloneDialog @@ -1323,6 +1208,14 @@ Do you want to overwrite the passkey in %1 - %2? CsvImportWidget + + Import CSV fields + CSV အကွက်များကို ထည့်သွင်းရန် + + + filename + ဖိုင်အမည် + size, rows, columns အရွယ်အစား၊ အတန်းများ၊ ကော်လံများ @@ -1401,11 +1294,11 @@ Do you want to overwrite the passkey in %1 - %2? Header lines skipped - ကျော်ထားသော နဖူးစည်းစာတန်းလိုင်းများ + ခေါင်းစဉ်စာကြောင်းများကို ကျော်ထားသည် Number of header lines to discard - ပယ်ရမည့် နဖူးစည်းစာတန်းလိုင်း အရေအတွက် + ပယ်ရမည့် ခေါင်းစဉ်စာကြောင်း အရေအတွက် First line has field names @@ -1413,15 +1306,15 @@ Do you want to overwrite the passkey in %1 - %2? Consider '\' an escape character - '\' ကို escape ညွှန်ကြားချက်အဖြစ် မှတ်ယူမည် + '\' ကို escape ညွှန်ကြားချက်တစ်ခုအဖြစ် မှတ်ယူမည် Preview - နမူနာကြည့်ခြင်း + အစမ်းကြည့်ခြင်း CSV import preview - CSV ပို့ရန် နမူနာကြည့်ခြင်း + CSV ထည့်သွင်းမှု အစမ်းကြည့်ခြင်း Not Present @@ -1431,42 +1324,50 @@ Do you want to overwrite the passkey in %1 - %2? Column %1 ကော်လံ %1 + + Imported from CSV file + CSV ဖိုင်မှ ထည့်သွင်းသည် + + + Original data: + မူလ အချက်အလက် - + + + Error(s) detected in CSV file! + CSV ဖိုင်တွင် ပြဿနာ(များ) ရှာတွေ့သည်။ + [%n more message(s) skipped] [နောက်ထပ် မက်ဆေ့ချ် %n ခု ကျော်ထားသည်] - Failed to parse CSV file: %1 - + Error + ပြဿနာ - Imported from CSV file: %1 - - - - No Title Selected - - - - No title column was selected, entries will be hard to tell apart. -Are you sure you want to import? - - - - Tags - ပူးတွဲမှုများ + CSV import: writer has errors: +%1 + CSV ထည့်သွင်းမှု - ရေးသားသူတွင် ပြဿနာများရှိသည် - +%1 CsvParserModel + + %1, %2, %3 + file info: bytes, rows, columns + %1၊ %2၊ %3 + + + %n byte(s) + %n ဘိုက် + %n row(s) - CSV row count အတန်း %n ခု %n column(s) - CSV column count ကော်လံ %n ခု @@ -1519,14 +1420,6 @@ Backup database located at %2 Recycle Bin အမှိုက်ပုံး - - Database file read error. - - - - No file path was provided. - - DatabaseOpenDialog @@ -1549,9 +1442,29 @@ Backup database located at %2 Password field စကားဝှက်အကွက် + + Enter Additional Credentials (if any): + ထပ်ဆောင်း အထောက်အထားများ (ရှိပါက) ရိုက်ထည့်ပါ - + + + Key File: + စကားဝှက်သော့ ဖိုင် - + + + Key file help + စကားဝှက်သော့ဖိုင် အကူအညီ + Hardware key slot selection - ဟာ့ဝဲကီးအပေါက် ရွေးချယ်မှု + ဟာ့ဒ်ဝဲစကားဝှက်သော့အပေါက် ရွေးချယ်မှု + + + Hardware Key: + ဟာ့ဒ်ဝဲ စကားဝှက်သော့ + + + Hardware key help + ဟာ့ဒ်ဝဲ စကားဝှက်သော့ အကူအညီ Key file to unlock the database @@ -1565,6 +1478,14 @@ Backup database located at %2 Browse… ရှာဖွေရန်… + + Refresh hardware tokens + ဟာ့ဒ်ဝဲ တိုကင်များကို ပြန်လည်လန်းဆန်းရန် + + + Refresh + ပြန်လည်လန်းဆန်းရန် + Unlock Database ဒေတာဘေ့စ်ကို လော့ဖြည်ရန် @@ -1575,7 +1496,7 @@ Backup database located at %2 Unlock - လော့ဖြည်ခြင်း + လော့ဖြည်သည် Please present or touch your YubiKey to continue… @@ -1593,7 +1514,7 @@ You can try to open it anyway, but it may be incomplete and saving any changes may incur data loss. We recommend you update your KeePassXC installation. - KeePassXC ရဲ့ Version အသစ်ဖြစ်နိုင်သည့် ဒေတာဘေ့စ် ကို သင်ဖွင့်ရန် လုပ်ဆောင်နေသည်။ ဘယ်လိုနည်းနှင့်မဆို ဖွင့်လိုက်နိုင်ပေမယ့် ဒေတာပျောက်ဆုံးခြင်း၊ မပြည့်စုံခြင်း၊ မသိမ်းစည်းလိုက်မိခြင်းများ ဖြစ်စေနိုင်သည်။ ထိုကြောင့် KeePassXC ကို Update လုပ်ဆောင်ရန် အကြံပြုပါသည်။ + KeePassXC ရဲ့ Version အသစ်ဖြစ်နိုင်သည့် ဒေတာဘေ့စ် ကို သင်ဖွင့်ရန် လုပ်ဆောင်နေသည်။ မည်သည့်နည်းနှင့်မဆို ဖွင့်လိုက်နိုင်ပေမယ့် ဒေတာပျောက်ဆုံးခြင်း၊ မပြည့်စုံခြင်း၊ မသိမ်းစည်းလိုက်မိခြင်းများ ဖြစ်စေနိုင်သည်။ ထိုကြောင့် KeePassXC ကို Update လုပ်ဆောင်ရန် အကြံပြုပါသည်။ Open database anyway @@ -1601,7 +1522,7 @@ We recommend you update your KeePassXC installation. Database unlock canceled. - ဒေတာဘေ့စ်လော့ဖြည့်ခြင်းကို ပယ်ဖျက်ခဲ့သည် ။ + ဒေတာဘေ့စ် လော့ဖြည့်ခြင်းကို ပယ်ဖျက်ခဲ့သည် ။ Unlock failed and no password given @@ -1621,13 +1542,17 @@ To prevent this error from appearing, you must go to "Database Settings / S Retry with empty password စကားဝှက် အလွတ်ထားပြီး ပြန်စမ်းကြည့်ရန် + + Failed to authenticate with Touch ID + Touch ID ဖြင့် ဖွင့်၍မရနိုင်ပါ + Failed to open key file: %1 စကားဝှက်သော့ဖိုင် ဖွင့်ခြင်း မအောင်မြင်ပါ - %1 Old key file format - စကားဝှက်သော့ဟောင်း ဖိုင် ဖောမက် + စကားဝှက်သော့ဖိုင် ဖောမက်အဟောင်း You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database &gt; Database Security &gt; Change Key File.</strong><br> @@ -1653,65 +1578,41 @@ To prevent this error from appearing, you must go to "Database Settings / S Cannot use database file as key file ဒေတာဘေ့စ်ဖိုင်ကို စကားဝှက်သော့ဖိုင်အဖြစ် အသုံးမပြုနိုင်ပါ + + You cannot use your database file as a key file. +If you do not have a key file, please leave the field empty. + သင်သည် ဒေတာဘေ့စ်ဖိုင်ကို စကားဝှက်သော့ဖိုင်အဖြစ် အသုံးမပြုနိုင်ပါ။ +သင့်တွင် စကားဝှက်သော့ဖိုင် မရှိပါက ထိုအကွက်ကို အလွတ်ထားပါ။ + + + Detecting hardware keys… + ဟာ့ဒ်ဝဲ စကားဝှက်သော့များကို ရှာနေသည်… + + + No hardware keys detected + ဟာ့ဒ်ဝဲ စကားဝှက်သော့များ ရှာမတွေ့ပါ + + + Select hardware key… + ဟာ့ဒ်ဝဲ စကားဝှက်သော့ ရွေးရန်… + + + <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information…</p> + <p>သင့်ဒေတာဘေ့စ်၏ လုံခြုံရေးကို တိုးမြှင့်ရန် စကားဝှက်အပြင် လျှို့ဝှက်ဖိုင်ကို အသုံးပြုနိုင်သည်။ ဤဖိုင်ကို သင့်ဒေတာဘေ့စ်၏ လုံခြုံရေးဆက်တင်များတွင် ထုတ်လုပ်နိုင်သည်။</p><p>၎င်းသည် သင်၏ *.kdbx ဒေတာဘေ့စ်ဖိုင် <strong>မဟုတ်ပါ</strong>။<br>သင့်တွင် စကားဝှက်သော့ဖိုင် မရှိပါက ဤအကွက်ကို အလွတ်ထားပါ။</p><p>အချက်အလက် ပိုသိရန် နှိပ်ပါ…</p> + + + <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +<p>Click for more information…</p> + <p>သင်သည် <strong>YubiKey</strong> သို့မဟုတ် <strong>OnlyKey</strong> ကဲ့သို့ ဟာ့ဒ်ဝဲ လုံခြုံရေး စကားဝှက်သော့တစ်ခုကို အသုံးပြုနိုင်ပြီး ၎င်းတို့တွင် HMAC-SHA1 အတွက် ချိန်ညှိထားသော အပေါက်များ ပါသည်။</p> +<p>နောက်ထပ် အချက်အလက်များအတွက် နှိပ်ပါ…</p>‌ + authenticate to access the database ဒေတာဘေ့စ်ကိုဝင်ရောက်ရန် စစ်မှန်ကြောင်းသက်သေပြပါ - Failed to authenticate with Quick Unlock: %1 - - - - Select Key File: - - - - <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!</p> - - - - Use hardware key [Serial: %1] - - - - Use hardware key - - - - Your database file is NOT a key file! -If you don't have a key file or don't know what that is, you don't have to select one. - - - - KeePassXC database file selected - - - - The file you selected looks like a database file. -A database file is NOT a key file! - -Are you sure you want to continue with this file?. - - - - No hardware keys found. - - - - Refresh Hardware Keys - - - - Click to add a key file. - - - - <a href="#" style="text-decoration: underline">I have a key file</a> - - - - Hardware keys found, but no slots are configured. - + Failed to authenticate with Windows Hello: %1 + Windows Hello ဖြင့် စစ်မှန်ကြောင်းသက်သေပြခြင်း မအောင်မြင်ပါ - %1 @@ -1723,6 +1624,10 @@ Are you sure you want to continue with this file?. DatabaseSettingsDialog + + Advanced Settings + အဆင့်မြင့် ဆက်တင်များ + General ယေဘုယျ @@ -1747,22 +1652,6 @@ Are you sure you want to continue with this file?. Maintenance ပြုပြင်ထိန်းသိမ်းမှု - - KeeShare - KeeShare - - - Secret Service Integration - လျှို့ဝှက်ဝန်ဆောင်မှု ပေါင်းစပ်ထည့်သွင်းခြင်း - - - Remote Sync - - - - Database Settings: %1 - - DatabaseSettingsWidgetBrowser @@ -1770,6 +1659,18 @@ Are you sure you want to continue with this file?. KeePassXC-Browser settings KeePassXC-ဘရောက်ဇာ ဆက်တင်များ + + Convert KeePassHTTP data + KeePassHTTP data သို့ပြောင်းပါ + + + Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data + legacy KeePassHTTP လက္ခဏာရပ် ကို KeePassXC-Browser နှင့်သင့်လျော်သောဒေတာ သို့ပြောင်းပါ + + + Refresh database root group ID + ဒေတာဘေ့စ်အခြေ အုပ်စု ID ကို ပြန်လည်လန်းဆန်းရန် + Disconnect all browsers ဘရောက်ဇာအားလုံးကို ချိတ်ဆက်မှုဖျက်ရန် @@ -1778,10 +1679,6 @@ Are you sure you want to continue with this file?. Forget all site-specific settings on entries ဖြည့်သွင်းချက်များနှင့်ဆိုင်သော ဝက်ဘ်ဆိုက်အလိုက် ဆက်တင်အားလုံးကို မေ့ပစ်ရန် - - Refresh database root group ID - ဒေတာဘေ့စ်အခြေ အုပ်စု ID ကို ပြန်လည်လန်းဆန်းရန် - Stored keys သိမ်းထားသော စကားဝှက်သော့များ @@ -1830,10 +1727,18 @@ This may prevent connection to the browser plugin. ဘရောက်ဇာအားလုံးနှင့် အမှန်တကယ် ချိတ်ဆက်မှုဖျက်လိုပါသလား။ ယင်းသည် ဘရောက်ဇာ ချိတ်ဆက်ပရိုဂရမ်နှင့် ချိတ်ဆက်မှုကို တားဆီးနိုင်သည်။ + + KeePassXC: No keys found + KeePassXC - စကားဝှက်သော့များ မတွေ့ပါ + No shared encryption keys found in KeePassXC settings. KeePassXC ဆက်တင်များတွင် မျှဝေထားသော ကုဒ်ဖြင့်ပြောင်းပြီး စကားဝှက်သော့များ မတွေ့ပါ။ + + KeePassXC: Removed keys from database + KeePassXC - စကားဝှက်သော့များကို ဒေတာဘေ့စ်မှ ဖယ်ရှားထားသည် + Successfully removed %n encryption key(s) from KeePassXC settings. KeePassXC ဆက်တင်များမှ ကုဒ်ဖြင့်ပြောင်းပြီး စကားဝှက်သော့ %n ခုကို အောင်မြင်စွာ ဖယ်ရှားပြီးပါပြီ။ @@ -1852,14 +1757,33 @@ Permissions to access entries will be revoked. 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 convert all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + အသုံးများသော ဘရောက်ဇာ ပေါင်းစပ်ထည့်သွင်းမှု အချက်အလက်ဟောင်းအားလုံးကို နောက်ဆုံးပေါ် စံနှုန်းအဖြစ်သို့ အမှန်တကယ် ပြောင်းလဲလိုပါသလား။ +ဘရောက်ဇာ ချိတ်ဆက်ပရိုဂရမ်နှင့် ကိုက်ညီမှု ထိန်းသိမ်းထားရန်အတွက် ၎င်းကို လိုအပ်ပါသည်။ + Refresh database ID ဒေတာဘေ့စ် ID ကို ပြန်လည်လန်းဆန်းရန် @@ -1870,26 +1794,6 @@ This is only necessary if your database is a copy of another and the browser ext ဒေတာဘေ့စ် ID ကို အမှန်တကယ် ပြန်လည်လန်းဆန်းလိုပါသလား။ သင့်ဒေတာဘေ့စ်သည် အခြားဒေတာဘေ့စ်တစ်ခု၏ မိတ္တူဖြစ်ပြီး ဘရောက်ဇာအဆက်နှင့် ချိတ်ဆက်၍မရမှသာ ပြန်လည်လန်းဆန်းရန် လိုအပ်ပါသည်။ - - Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data - legacy KeePassHTTP လက္ခဏာရပ် ကို KeePassXC-Browser နှင့်သင့်လျော်သောဒေတာ သို့ပြောင်းပါ - - - No keys found - - - - Removed keys from database - - - - Removed permissions - - - - No entry with permissions found! - - DatabaseSettingsWidgetDatabaseKey @@ -1905,7 +1809,7 @@ This is only necessary if your database is a copy of another and the browser ext 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? - သတိပေးချက်။ သင်သည် စကားဝှက် သတ်မှတ်မထားပါ။ စကားဝှက်မပါဘဲ ဒေတာဘေ့စ် အသုံးပြုခြင်းကို အားမပေးပါ။ + သတိပေးချက် - သင်သည် စကားဝှက် သတ်မှတ်မထားပါ။ စကားဝှက်မပါဘဲ ဒေတာဘေ့စ် အသုံးပြုခြင်းကို အားမပေးပါ။ စကားဝှက်မပါဘဲ ဆက်လုပ်လိုသည်မှာ သေချာပါသလား။ @@ -1915,32 +1819,20 @@ Are you sure you want to continue without a password? No encryption key added - ကုဒ်ဖြင့်ပြောင်းပြီး စကားဝှက်သော့ ထည့်မထားပါ + ကုဒ်ဖြင့်ပြောင်းသည့် စကားဝှက်သော့ ထည့်မထားပါ You must add at least one encryption key to secure your database! - သင့်ဒေတာဘေ့စ်ကို လုံခြုံစေရန် အနည်းဆုံး ကုဒ်ဖြင့်ပြောင်းပြီး စကားဝှက်သော့တစ်ခု ထည့်ရမည်။ + သင့်ဒေတာဘေ့စ်ကို လုံခြုံစေရန် အနည်းဆုံး ကုဒ်ဖြင့်ပြောင်းသည့် စကားဝှက်သော့တစ်ခု ထည့်ရမည်။ Unknown error - အမည်မသိ ပြဿနာ + အမည်မသိသော ပြဿနာ Failed to change database credentials ဒေတာဘေ့စ် အထောက်အထားများကို ပြောင်းလဲခြင်း မအောင်မြင်ပါ - - Weak password - အားနည်းသော စကားဝှက် - - - This is a weak password! For better protection of your secrets, you should choose a stronger password. - - - - The provided password does not meet the minimum quality requirement. - - DatabaseSettingsWidgetEncryption @@ -1948,13 +1840,21 @@ Are you sure you want to continue without a password? Decryption Time: ပြန်ဖြည်ရန် ကြာချိန် - + + Change existing decryption time + ရှိနေဆဲ ပြန်ဖြည်ရန်ကြာချိန်ကို ပြောင်းလဲရန် + + + Change + ပြောင်းလဲမှု + Decryption time in seconds စက္ကန့်နှင့်ပြထားသော ပြန်ဖြည်ရန်ကြာချိန် Higher values offer more protection, but opening the database will take longer. - တန်ဖိုးမြင့်ခြင်းက ကာကွယ်မှုပိုပေးနိုင်သော်လည်း ဒေတာဘေ့စ် ဖွင့်ရန် အချိန်ပိုကြာပါမည်။ + ပိုမြင့်သောတန်ဖိုးများက ကာကွယ်မှုပိုပေးနိုင်သော်လည်း ဒေတာဘေ့စ် ဖွင့်ရန် အချိန်ပိုကြာပါမည်။ Database format: @@ -1982,11 +1882,11 @@ Are you sure you want to continue without a password? AES: 256 Bit (default) - AES - 256 ဘစ် (နဂိုမူလ) + AES - ၂၅၆ ဘစ် (နဂိုမူလ) Twofish: 256 Bit - Twofish - 256 ဘစ် + Twofish - ၂၅၆ ဘစ် Key Derivation Function: @@ -1998,11 +1898,11 @@ Are you sure you want to continue without a password? Transform rounds: - အလှည့်များကို ပြောင်းရန် - + ပြောင်းမည့် အလှည့်များ - Transform rounds - အလှည့်များကို ပြောင်းရန် + ပြောင်းမည့် အလှည့်များ Memory Usage: @@ -2014,7 +1914,7 @@ Are you sure you want to continue without a password? Parallelism: - ပြိုင်တူလုပ်ဆောင်ခြင်း + ပြိုင်တူလုပ်ဆောင်ခြင်း - Parallelism @@ -2022,16 +1922,21 @@ Are you sure you want to continue without a password? KDBX 4 (recommended) - KBDX 4 + KBDX 4 (အသုံးပြုရန်အကြံပြုသည်) KDBX 3 KBDX 3 + + 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. @@ -2052,7 +1957,7 @@ If you keep this number, your database may take hours, days, or even longer to o Number of rounds too low Key transformation rounds - အလှည့်အရေအတွက် နည်းလွန်းသည် + အလှည့်အကြိမ်ရေ နည်းလွန်းသည် You are using a very low number of key transform rounds with AES-KDF. @@ -2064,7 +1969,7 @@ If you keep this number, your database will not be protected from brute force at KDF unchanged - KDF မပြောင်းထားပါ + KDF မပြောင်းလဲပါ Failed to transform key with new KDF parameters; KDF unchanged. @@ -2073,25 +1978,13 @@ If you keep this number, your database will not be protected from brute force at MiB Abbreviation for Mebibytes (KDF settings) - + MiB thread(s) Threads for parallel execution (KDF settings) အစဉ်လိုက်လုပ်ဆောင်ချက်(များ) - - Encryption Settings: - - - - Basic - - - - Advanced - အဆင့်မြင့် - DatabaseSettingsWidgetFdoSecrets @@ -2152,7 +2045,7 @@ If you keep this number, your database will not be protected from brute force at Maximum size of history per entry - ဖြည့်သွင်းချက်တစ်ခုရှိ အများဆုံး မှတ်တမ်း အရွယ်အစား + ဖြည့်သွင်းချက်တစ်ခုရှိ အကြီးဆုံး မှတ်တမ်း အရွယ်အစား MiB @@ -2168,7 +2061,7 @@ If you keep this number, your database will not be protected from brute force at Enable compression (recommended) - ချုံ့ခြင်းကို ဖွင့်ရန် (အကြံပြုသည်) + ဖိုင်ချုံ့ခြင်းကို ဖွင့်ရန် (အကြံပြုသည်) Delete Recycle Bin @@ -2213,70 +2106,6 @@ Entries deleted from the recycle bin are removed from the database. ဒေတာဘေ့စ်မှ အပြီးတိုင်ဖျက်ပစ်မည့်အစား ပြန်လည်ရယူနိုင်သော (recycle bin) အုပ်စု ထဲသို့သာ ရွေ့ပြောင်းထားပါ။ ၄င်း (recycle bin) မှ ရွှေ့ပြောင်းသောအရာများမှာ ဒေတာဘေ့စ်မှ ဖယ်ရှားခံရမည် ဖြစ်သည်။ - - Autosave delay since last change - - - - Autosave delay - - - - Autosave delay since last change in minutes - - - - min - မိနစ် - - - Autosave delay since last change checkbox - - - - Public Database Metadata - - - - Warning: the following settings are not encrypted. - - - - Display name: - - - - Publically visible display name used on the unlock dialog - - - - Database public display name - - - - Display color: - - - - Publically visible color used on the unlock dialog - - - - Database public display color chooser - - - - Clear - ရှင်းလင်းရန် - - - Display icon: - - - - Select Database Icon - - DatabaseSettingsWidgetKeeShare @@ -2372,129 +2201,6 @@ removed from the database. ဒေတာဘေ့စ် ဖော်ပြချက် အကွက် - - DatabaseSettingsWidgetRemote - - Sync Commands - - - - Remove - ဖယ်ရှားရန် - - - Command Settings - - - - Name - အမည် - - - Save - သိမ်းရန် - - - Download - - - - Command: - - - - Download command field - - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - - - - Input: - - - - Download input field - - - - Upload - - - - Upload command field - - - - e.g.: "sftp user@hostname" or "scp {TEMP_DATABASE} user@hostname:DatabaseOnRemote.kdbx" - - - - Upload input field - - - - Name cannot be empty. - - - - Test - - - - Download command cannot be empty. - - - - Download failed with error: %1 - - - - Download finished, but file %1 could not be found. - - - - Download successful. - - - - Save Remote Settings - - - - You have unsaved changes. Do you want to save them? - - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - - - - e.g.: -put {TEMP_DATABASE} DatabaseOnRemote.kdbx -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - - - - Timeout: - - - - seconds - စက္ကန့် - - DatabaseTabWidget @@ -2527,10 +2233,26 @@ This is definitely a bug, please report it to the developers. CSV file CSV ဖိုင် + + Select CSV file + CSV ဖိုင် ရွေးရန် + Merge database ဒေတာဘေ့စ်ကို ပေါင်းစပ်ရန် + + KeePass 1 database + KeePass 1 ဒေတာဘေ့စ် + + + Open KeePass 1 database + KeePass 1 ဒေတာဘေ့စ် ဖွင့်ရန် + + + Open OPVault + OPVault ဖွင့်ရန် + Export database to CSV file ဒေတာဘေ့စ်ကို CSV ဖိုင်သို့ ပို့ရန် @@ -2541,7 +2263,29 @@ This is definitely a bug, please report it to the developers. Writing the HTML file failed. - HTML ဖိုင်ကို ရေးသားခြင်း မအောင်မြင်ပါ။ + HTML ဖိုင်ကို ရေးခြင်း မအောင်မြင်ပါ။ + + + Export Confirmation + ပို့ရန် အတည်ပြုချက် + + + You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? + သင်သည် သင့်ဒေတာဘေ့စ်ကို ကုဒ်ဖြင့်မပြောင်းရသေးသောဖိုင်သို့ ပို့တော့မည်ဖြစ်သည်။ ယင်းသည် သင့်စကားဝှက်များနှင့် ထိခိုက်လွယ်သော အချက်အလက်တို့အတွက် အန္တရာယ်ရှိသည်။ သင် ဆက်လုပ်လိုသည်မှာ သေချာပါသလား။ + + + New Database + ဒေတာဘေ့စ်အသစ် + + + %1 [New Database] + Database tab name modifier + %1 [ဒေတာဘေ့စ်အသစ်] + + + %1 [Locked] + Database tab name modifier + %1 [လော့ချထားသည်] Export database to XML file @@ -2555,31 +2299,9 @@ This is definitely a bug, please report it to the developers. Writing the XML file failed XML ဖိုင်ကို ရေးသားခြင်း မအောင်မြင်ပါ - - Export Confirmation - ပို့ရန် အတည်ပြုချက် - - - You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? - သင်သည် သင့်ဒေတာဘေ့စ်ကို ကုဒ်ဖြင့်မပြောင်းရသေးသောဖိုင်သို့ ပို့တော့မည်ဖြစ်သည်။ ဤသို့ပို့ခြင်းဖြင့် သင့်စကားဝှက်များနှင့် ထိခိုက်လွယ်သော အချက်အလက်တို့တွင် အန္တရာယ်ရှိသည်။ သင် ဆက်လုပ်လိုသည်မှာ သေချာပါသလား။ - - - %1 [Locked] - Database tab name modifier - %1 [လော့ချထားသည်] - - - %1 [Temporary] - Database tab name modifier - - DatabaseWidget - - Searches and Tags - ရှာဖွေမှုများနှင့် တက်များ - Searching… ရှာဖွေနေသည်… @@ -2628,10 +2350,6 @@ This is definitely a bug, please report it to the developers. Expired entries သက်တမ်းကုန်ဆုံးသွားသော ထည့်သွင်းမှုများ - - Entries expiring within %1 day(s) - - No current database. လောလောဆယ် ဒေတာဘေ့စ် မရှိပါ။ @@ -2642,11 +2360,11 @@ This is definitely a bug, please report it to the developers. Successfully merged the database files. - ဒေတာဖိုင်များကို ပေါင်းစပ်ပြီးပါပြီ။ + ဒေတာဘေ့စ်ဖိုင်များကို အောင်မြင်စွာ ပေါင်းစပ်ပြီးပါပြီ။ Database was not modified by merge operation. - ပေါင်းစပ်သည့် လုပ်ဆောင်ချက်က ဒေတာဘေ့စ်ကို ပြုပြင်မွမ်းမံခြင်းမရှိပါ။ + ပေါင်းစပ်သည့် လုပ်ဆောင်ချက်က ဒေတာဘေ့စ်ကို ပြုပြင်မွမ်းမံခဲ့ခြင်းမရှိပါ။ Search Results (%1) @@ -2656,18 +2374,6 @@ This is definitely a bug, please report it to the developers. No Results ရလဒ် မရှိပါ - - Save - သိမ်းရန် - - - Enter a unique name or overwrite an existing search from the list: - ထူးခြားသော အမည်တစ်ခုကို ထည့်ပါ သို့မဟုတ် စာရင်းမှရှိပြီးသား ရှာဖွေမှုတစ်ခုကို အစားထိုးရေးပါ - - - - Save Search - ရှာဖွေမှုကိုသိမ်းဆည်းပါ - Lock Database? ဒေတာဘေ့စ်ကို လော့ချမလား။ @@ -2696,6 +2402,26 @@ Save changes? 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? + ဒေတာဘေ့စ်ဖိုင် ပြောင်းလဲထားပြီး သင့်တွင် မသိမ်းရသေးသော ပြောင်းလဲမှုများ ရှိသည်။ +သင့်ပြောင်းလဲမှုများကို ပေါင်းစပ်လိုပါသလား။ + + + Could not open the new database file while attempting to autoreload. +Error: %1 + အော်တိုပြန်တင်ရန် ကြိုးစားစဉ် ဒေတာဘေ့စ်ဖိုင်အသစ်ကို ဖွင့်၍မရပါ။ +ပြဿနာ - %1 + Disable safe saves? ဘေးကင်းသော သိမ်းထားမှုများကို ပယ်ဖျက်မလား။ @@ -2708,7 +2434,7 @@ Disable safe saves and try again? Writing the database failed: %1 - ဒေတာဘေ့စ်ကို ရေးသားခြင်း မအောင်မြင်ပါ - %1 + ဒေတာဘေ့စ်ကို ရေးခြင်း မအောင်မြင်ပါ - %1 Passwords @@ -2738,94 +2464,25 @@ Disable safe saves and try again? Could not find database file: %1 ဒေတာဘေ့စ်ဖိုင်ကို ရှာမတွေ့ပါ - %1 - - New Database - ဒေတာဘေ့စ်အသစ် + + Entries expiring within %1 day(s) + %1 ရက် အတွင်းသက်တမ်းကုန်ဆုံးမည့် ထည့်သွင်းမှုများ - %1 [New Database] - Database tab name modifier - %1 [ဒေတာဘေ့စ်အသစ်] + Searches and Tags + ရှာဖွေမှုများနှင့် တက်များ - Remote Sync did not contain any download or upload commands. - + Enter a unique name or overwrite an existing search from the list: + ထူးခြားသော အမည်တစ်ခုကို ထည့်ပါ သို့မဟုတ် စာရင်းမှရှိပြီးသား ရှာဖွေမှုတစ်ခုကို အစားထိုးရေးပါ - - Remote sync '%1' completed successfully! - + Save + သိမ်းရန် - Remote sync '%1' failed: %2 - - - - Error while saving database %1: %2 - - - - Downloading... - - - - Uploading... - - - - Syncing... - - - - Remove passkey from entry - - - - Do you want to remove the passkey from this entry? - - - - The database file "%1" was modified externally - - - - Do you want to load the changes? - - - - Reload database - - - - Reloading database… - - - - Reload canceled - - - - Reload successful - - - - Reload pending user action… - - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes<br>Ignore the changes on disk until save<br>Discard unsaved changes - - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes then save<br>Overwrite the changes on disk<br>Discard unsaved changes - - - - Database file overwritten. - - - - Database file on disk cannot be unlocked with current credentials.<br>Enter new credentials and/or present hardware key to continue. - + Save Search + ရှာဖွေမှုကိုသိမ်းဆည်းပါ @@ -2878,6 +2535,10 @@ Disable safe saves and try again? n/a မသက်ဆိုင်ပါ + + (encrypted) + (ကုဒ်ဖြင့်ပြောင်းပြီး) + Select private key သီးသန့် စကားဝှက်သော့ကို ရွေးရန် @@ -2900,7 +2561,7 @@ Disable safe saves and try again? Invalid Entry - မမှန်ကန်သော ဖြည့်သွင်းချက် + ဖြည့်သွင်းချက် မမှန်ကန်ပါ An external merge operation has invalidated this entry. @@ -2942,15 +2603,15 @@ Would you like to correct it? New attribute - ပင်ကိုအချက်အလက်အသစ် + လက္ခဏာရပ်အသစ် New attribute %1 - ပင်ကိုအချက်အလက်အသစ် %1 + လက္ခဏာရပ်အသစ် %1 Are you sure you want to remove this attribute? - ဤပင်ကိုအချက်အလက်ကို ဖယ်ရှားလိုသည်မှာ သေချာပါသလား။ + ဤလက္ခဏာရပ်ကို ဖယ်ရှားလိုသည်မှာ သေချာပါသလား။ Reveal @@ -2964,10 +2625,6 @@ Would you like to correct it? Hide ဝှက်ရန် - - %n hour(s) - - %n week(s) %n ပတ် @@ -2980,28 +2637,28 @@ Would you like to correct it? %n year(s) %n နှစ် - - Failed to decrypt SSH key, ensure password is correct. - + + %n hour(s) + %n နာရီ EditEntryWidgetAdvanced Additional attributes - ထပ်ဆောင်း ပင်ကိုအချက်အလက်များ + ထပ်ဆောင်း လက္ခဏာရပ်များ Attribute selection - ပင်ကိုအချက်အလက် ရွေးချယ်မှု + လက္ခဏာရပ် ရွေးချယ်မှု Attribute value - ပင်ကိုယ်အချက်အလက် တန်ဖိုး + လက္ခဏာရပ် တန်ဖိုး Add a new attribute - ပင်ကိုအချက်အလက်အသစ် ထည့်ရန် + လက္ခဏာရပ်အသစ် ထည့်ရန် Add @@ -3009,7 +2666,7 @@ Would you like to correct it? Remove selected attribute - ရွေးချယ်ထားသော ပင်ကိုအချက်အလက်ကို ဖယ်ရှားရန် + ရွေးချယ်ထားသော လက္ခဏာရပ်ကို ဖယ်ရှားရန် Remove @@ -3017,7 +2674,7 @@ Would you like to correct it? Edit attribute name - ပင်ကိုအချက်အလက် အမည်ကို တည်းဖြတ်ရန် + လက္ခဏာရပ် အမည်ကို တည်းဖြတ်ရန် Edit Name @@ -3025,7 +2682,7 @@ Would you like to correct it? Toggle attribute protection - ပင်ကိုအချက်အလက် ကာကွယ်မှုကို ဖွင့်ရန်၊ ပိတ်ရန် + လက္ခဏာရပ် ကာကွယ်မှုကို ဖွင့်ရန်၊ ပိတ်ရန် Protect @@ -3033,7 +2690,7 @@ Would you like to correct it? Show a protected attribute - ကာကွယ်ထားသော ပင်ကိုအချက်အလက်ကို ပြရန် + ကာကွယ်ထားသော လက္ခဏာရပ်ကို ပြရန် Reveal @@ -3053,11 +2710,11 @@ Would you like to correct it? Foreground Color: - နောက်ခံအရောင် - + ရှေ့ဘက်ရှိအရောင် - Foreground color selection - နောက်ခံအရောင် ရွေးချယ်မှု + ရှေ့ဘက်ရှိအရောင် ရွေးချယ်မှု Background Color: @@ -3102,20 +2759,10 @@ Would you like to correct it? Add new window association ဝင်းဒိုး ဆက်စပ်မှုအသစ် ထည့်ရန် - - + - Add item - + - Remove selected window association ရွေးချယ်ထားသော ဝင်းဒိုး ဆက်စပ်မှုကို ဖယ်ရှားရန် - - - - Remove item - - - Window title: ဝင်းဒိုးခေါင်းစဉ် - @@ -3140,28 +2787,55 @@ Would you like to correct it? Custom Auto-Type sequence for this window ဤဝင်းဒိုးအတွက် စိတ်ကြိုက် အလိုအလျောက် စာရိုက်ခြင်း အစဉ် + + + + Add item + + + + + - + Remove item + - + EditEntryWidgetBrowser + + These settings affect to the entry's behaviour with the browser extension. + ဤဆက်တင်များသည် ဘရောက်ဇာအဆက်နှင့်ဆိုင်သော ဖြည့်သွင်းချက်၏ အပြုအမူပေါ် သက်ရောက်သည်။ + General ယေဘုယျ Hide this entry from the browser extension - ဤဖြည့်သွင်းချက်ကို ဘရောက်ဇာအဆက်တွင် ဝှက်ပါ + ဤဖြည့်သွင်းချက်ကို ဘရောက်ဇာအဆက်မှ ဝှက်ပါ Skip Auto-Submit for this entry ဤဖြည့်သွင်းချက်အတွက် အလိုအလျောက် တင်သွင်းရန်ကို ကျော်ပါ + + Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. + ဤဆက်တင်ကို HTTP Auth ဝင်းဒိုးငယ်များအတွက်သာ ဘရောက်ဇာသို့ ပို့ပါ။ ၎င်းကိုဖွင့်ထားစဉ် ပုံမှန် လော့ဂ်အင်ဝင်ရောက်မှု ပုံစံများသည် ဤဖြည့်သွင်းချက်ကို ရွေးချယ်နိုင်ရန် ပြမည်မဟုတ်ပါ။ + + Use this entry only with HTTP Basic Auth ဤဖြည့်သွင်းချက်ကို HTTP Basic Auth နှင့်သာ သုံးပါ + + Do not send this setting to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. + ဤဆက်တင်ကို HTTP Auth ဝင်းဒိုးငယ်များအတွက် ဘရောက်ဇာသို့ မပို့ပါနှင့်။ ၎င်းကိုဖွင့်ထားစဉ် HTTP Auth ဝင်းဒိုးငယ်များသည် ဤဖြည့်သွင်းချက်ကို ရွေးချယ်နိုင်ရန် ပြမည်မဟုတ်ပါ။ + Do not use this entry with HTTP Basic Auth - ဤဖြည့်သွင်းချက်ကို HTTP Basic Auth ဖြင့် မသုံးပါနှင့်။ + ဤဖြည့်သွင်းချက်ကို HTTP Basic Auth နှင့် မသုံးပါနှင့် + + + Additional URL's + ထပ်ဆောင်း URL များ Add @@ -3175,22 +2849,6 @@ Would you like to correct it? Edit တည်းဖြတ်ရန် - - These settings affect the entry's behaviour with the browser extension. - - - - Additional URLs - - - - Only send this entry to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. - - - - Do not send this entry to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. - - EditEntryWidgetHistory @@ -3200,7 +2858,7 @@ Would you like to correct it? Show entry at selected history state - ရွေးချယ်ထားသော မှတ်တမ်း အဆင့်တွင် ဖြည့်သွင်းချက်ကို ပြရန် + ရွေးချယ်ထားသော မှတ်တမ်း အခြေအနေတွင် ဖြည့်သွင်းချက်ကို ပြရန် Show @@ -3208,7 +2866,7 @@ Would you like to correct it? Restore entry to selected history state - ဖြည့်သွင်းချက်ကို ရွေးချယ်ထားသော မှတ်တမ်း အဆင့်သို့ ပြန်ထားရန် + ဖြည့်သွင်းချက်ကို ရွေးချယ်ထားသော မှတ်တမ်း အခြေအနေသို့ ပြန်ထားရန် Restore @@ -3216,7 +2874,7 @@ Would you like to correct it? Delete selected history state - ရွေးချယ်ထားသော မှတ်တမ်း အဆင့်ကို ဖျက်ရန် + ရွေးချယ်ထားသော မှတ်တမ်း အခြေအနေကို ဖျက်ရန် Delete @@ -3239,7 +2897,7 @@ Would you like to correct it? Notes field - မှတ်ချက်များ ဖြည့်ရန်အကွက် + မှတ်စုများ ဖြည့်ရန်အကွက် Username field @@ -3279,11 +2937,11 @@ Would you like to correct it? Toggle expiration - အဖွင့်၊အပိတ် သက်တမ်းကုန်ဆုံးချိန် + အဖွင့်၊ အပိတ် သက်တမ်းကုန်ဆုံးချိန် Tags list - ပူးတွဲမှုစာရင်း + ပူးတွဲပြသချက်များစာရင်း &Username: @@ -3356,6 +3014,19 @@ Would you like to correct it? Private key သီးသန့် စကားဝှက်သော့ + + External file + ပြင်ပဖိုင် + + + Browser for key file + စကားဝှက်သော့ဖိုင်အတွက် ဘရောက်ဇာ + + + Browse… + Button for opening file dialog + ရှာဖွေရန်… + Attachment ပူးတွဲဖိုင် @@ -3372,23 +3043,6 @@ Would you like to correct it? Remove from agent အေးဂျင့်ဆီမှ ဖယ်ရှားရန် - - External file - ပြင်ပဖိုင် - - - Browser for key file - စကားဝှက်သော့ဖိုင်အတွက် ဘရောက်ဇာ - - - Browse… - Button for opening file dialog - ရှာဖွေရန်… - - - Generate - ထုတ်လုပ်ရန် - Select attachment file ပူးတွဲဖိုင် ရွေးချယ်ရန် @@ -3413,10 +3067,6 @@ Would you like to correct it? seconds စက္ကန့် - - Clear agent - - EditGroupWidget @@ -3428,6 +3078,10 @@ Would you like to correct it? Icon အိုင်ကွန် + + Browser Integration + ဘရောက်ဇာ ပေါင်းစပ်ထည့်သွင်းခြင်း + Properties ဂုဏ်သတ္တိများ @@ -3444,10 +3098,6 @@ Would you like to correct it? Group has unsaved changes အုပ်စုတွင် မသိမ်းရသေးသော အပြောင်းအလဲများ ရှိသည် - - Browser Integration - ဘရောက်ဇာ ပေါင်းစပ်ထည့်သွင်းခြင်း - Enable ဖွင့်ရန် @@ -3507,14 +3157,6 @@ Would you like to correct it? Omit WWW subdomain from matching toggle for this and sub groups ဤအရာနှင့် လက်အောက်ခံအုပ်စုများအတွက် လိုက်ဖက်သောပြောင်းလဲမှုမှ ဆပ်ဒိုမိန်း WWW ကို ချန်ထားပါ - - Restrict matching to given browser key: - - - - Restrict matching to given browser key toggle for this and sub groups - - EditGroupWidgetKeeShare @@ -3540,11 +3182,11 @@ Would you like to correct it? Path to share file field - ဖိုင်ဖြည့်ရန်အကွက်ကို မျှဝေရန် လမ်းကြောင်း + မျှဝေရန်ဖိုင် အကွက်၏ လမ်းကြောင်း Browse for share file - ဖိုင်မျှဝေရန် ရှာဖွေပါ + မျှဝေရန်ဖိုင် ရှာဖွေပါ Browse… @@ -3595,15 +3237,15 @@ Supported extensions are: %1. KeeShare is currently disabled. You can enable import/export in the application settings. KeeShare is a proper noun - KeeShare ကို လက်ရှိတွင် ပယ်ဖျက်ထားသည်။ အက်ပလီကေးရှင်းဆက်တင်တွင် ထည့်သွင်းရန်/ပို့ရန် ဖွင့်နိုင်သည်။ + KeeShare ကို လက်ရှိတွင် ပိတ်ထားသည်။ အက်ပလီကေးရှင်းဆက်တင်များတွင် ထည့်သွင်းရန်/ပို့ရန် ဖွင့်နိုင်သည်။ Database export is currently disabled by application settings. - ဒေတာဘေ့စ် ပို့ရန်ကို လက်ရှိတွင် အက်ပလီကေးရှင်းဆက်တင်မှ ပယ်ဖျက်ထားသည်။ + ဒေတာဘေ့စ် တင်ပို့ခြင်းကို လက်ရှိတွင် အက်ပလီကေးရှင်းဆက်တင်မှ ပိတ်ထားသည်။ Database import is currently disabled by application settings. - ဒေတာဘေ့စ် ထည့်သွင်းရန်ကို လက်ရှိတွင် အက်ပလီကေးရှင်းဆက်တင်မှ ပယ်ဖျက်ထားသည်။ + ဒေတာဘေ့စ် ထည့်သွင်းခြင်းကို လက်ရှိတွင် အက်ပလီကေးရှင်းဆက်တင်မှ ပိတ်ထားသည်။ KeeShare container @@ -3615,7 +3257,7 @@ Supported extensions are: %1. Select import source - ပို့ရန် ရင်းမြစ်ကို ရွေးပါ + ထည့်သွင်းရန် ရင်းမြစ်ကို ရွေးပါ Select export target @@ -3634,7 +3276,7 @@ Supported extensions are: %1. Toggle expiration - အဖွင့်၊အပိတ် သက်တမ်းကုန်ဆုံးချိန် + အဖွင့်၊ အပိတ် သက်တမ်းကုန်ဆုံးချိန် Expires: @@ -3662,7 +3304,7 @@ Supported extensions are: %1. Auto-Type toggle for this and sub groups - ဤအရာနှင့် အုပ်စုခွဲများအတွက် အလိုအလျောက် စာရိုက်ရန် ဖွင့်/ပိတ် ခလုတ် + ဤအုပ်စုနှင့် အုပ်စုခွဲများအတွက် အလိုအလျောက် စာရိုက်ရန် ဖွင့်/ပိတ် ခလုတ် Notes: @@ -3674,7 +3316,7 @@ Supported extensions are: %1. Notes field - မှတ်ချက်များ ဖြည့်ရန်အကွက် + မှတ်စုများ ဖြည့်ရန်အကွက် Name: @@ -3686,7 +3328,7 @@ Supported extensions are: %1. Search toggle for this and sub groups - ဤအရာနှင့် အုပ်စုခွဲများအတွက် ရှာဖွေရန် ဖွင့်/ပိတ် ခလုတ် + ဤအုပ်စုနှင့် အုပ်စုခွဲများအတွက် ရှာဖွေရန် ဖွင့်/ပိတ် ခလုတ် @@ -3705,7 +3347,7 @@ Supported extensions are: %1. Set the URL to use to search for a favicon - Favicon ကိုရှာရန်အတွက် URL ကို နေရာချထား + Favicon ကိုရှာရန်အတွက် URL ကို နေရာချထားရန် Favicon URL @@ -3747,6 +3389,10 @@ Supported extensions are: %1. Unable to fetch favicon. သီးသန့်ဝက်ဘ်ဆိုက်အိုင်ကွန်ကို မရယူနိုင်ပါ။ + + You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security + သင်သည် ကိရိယာများ -> ဆက်တင်များ -> လုံခြုံရေး သို့သွားပြီး DuckDuckGo ဝက်ဘ်ဆိုက်အိုင်ကွန် ဝန်ဆောင်မှုကို ဖွင့်နိုင်သည် + Existing icon selected. ရှိနေဆဲအိုင်ကွန်ကို ရွေးချယ်ပြီးပါပြီ။ @@ -3779,10 +3425,6 @@ Supported extensions are: %1. The following icon(s) failed: အောက်ပါအိုင်ကွန်(များ) မအောင်မြင်ပါ - - - You can enable the DuckDuckGo website icon service under Application Settings -> Security - - EditWidgetProperties @@ -3792,7 +3434,7 @@ Supported extensions are: %1. Datetime created - ဖန်တီးခဲ့ချိန် + ဖန်တီးခဲ့သည့် ရက်စွဲနှင့်အချိန် Modified: @@ -3857,25 +3499,7 @@ This may cause the affected plugins to malfunction. Entry %1 - Clone - %1 - ပုံတူပွားခြင်း - - - Passkey - - - - Invalid conversion type: %1 - ပြောင်းလဲမှု အမျိုးအစား မမှန်ကန်ပါ - %1 - - - Invalid conversion syntax: %1 - ပြောင်းလဲမှု ဝါကျဖွဲ့စည်းပုံ မမှန်ကန်ပါ - %1 - - - Invalid regular expression syntax %1 -%2 - ပုံမှန်အသုံးအနှုန်း ဝါကျဖွဲ့စည်းပုံ မမှန်ကန်ပါ %1 -%2 + %1 - Clone @@ -3885,21 +3509,6 @@ This may cause the affected plugins to malfunction. ဖိုင် "%1" ကို မဖွင့်နိုင်ပါ - - EntryAttachmentsDialog - - Form - ပုံစံ - - - File name - - - - File contents... - - - EntryAttachmentsModel @@ -3937,6 +3546,14 @@ This may cause the affected plugins to malfunction. Remove ဖယ်ရှားရန် + + Rename selected attachment + ရွေးချယ်ထားသော ပူးတွဲဖိုင်ကို ပြန်လည်အမည်ပေးရန် + + + Rename + ပြန်လည်အမည်ပေးရန် + Open selected attachment ရွေးချယ်ထားသော ပူးတွဲဖိုင်ကို ဖွင့်ရန် @@ -4009,7 +3626,13 @@ This may cause the affected plugins to malfunction. Confirm Overwrite Attachment - ထပ်ပေါင်းရေးထားသောဖိုင်တွဲကို အတည်ပြု + ထပ်ပေါင်းရေးထားသောဖိုင်တွဲကို အတည်ပြုရန် + + + Attachment "%1" already exists. +Would you like to overwrite the existing attachment? + ဖိုင်တွဲ"%1" ရှိနေပါပြီ။ +သင်လက်ရှိဖိုင်တွဲပေါ်တွင် ထပ်ရေးချင်ပါသလား? Confirm Attachment @@ -4021,7 +3644,7 @@ Your database may get very large and reduce performance. Are you sure to add this file? %1 မှာ ဖိုင်ပမာဏ ကြီးသည် (%2 MB)။ -သင့်ဒေတာဘေ့စ်သည် အလွန်များလာပြီး စွမ်ဆောင်မှု လျော့နည်းလာနိုင်သည်။ +သင့်ဒေတာဘေ့စ်သည် အလွန်ကြီးလာပြီး စွမ်းဆောင်မှု လျော့နည်းလာနိုင်သည်။ ဤဖိုင်ကို ထည့်လိုသည်မှာ သေချာပါသလား။ @@ -4045,24 +3668,6 @@ Error: %1 အပ်ဒိတ်လုပ်ထားသော ပူးတွဲဖိုင်သိမ်းခြင်း မအောင်မြင်ပါ။ ပြဿနာ - %1 - - Attachment "%1" already exists. -Would you like to overwrite the existing attachment? - ဖိုင်တွဲ"%1" ရှိနေပါပြီ။ -သင်လက်ရှိဖိုင်တွဲပေါ်တွင် ထပ်ရေးချင်ပါသလား? - - - New - - - - Preview - အစမ်းကြည့်ခြင်း - - - Failed to preview an attachment: Attachment not found - - EntryAttributesModel @@ -4257,14 +3862,6 @@ Would you like to overwrite the existing attachment? Has TOTP TOTP ရှိသည် - - Background Color - - - - Group Path - - EntryPreviewWidget @@ -4285,8 +3882,8 @@ Would you like to overwrite the existing attachment? စကားဝှက် - URL - URL + Notes + မှတ်ချက်များ Expiration @@ -4305,8 +3902,8 @@ Would you like to overwrite the existing attachment? အသုံးပြုသူအမည် - Notes - မှတ်ချက်များ + URL + URL Advanced @@ -4318,7 +3915,7 @@ Would you like to overwrite the existing attachment? Attributes - ပင်ကိုအချက်အလက် + လက္ခဏာရပ်များ Autotype @@ -4356,52 +3953,40 @@ Would you like to overwrite the existing attachment? Never ဘယ်တော့မှ - - Double click to copy value - value ကို ကူးယူရန် နှစ်ချက်နှိပ်ပါ - Enabled ဖွင့်ထားသည် Disabled - ပယ်ဖျက်ထားသည် + ပိတ်ထားသည် - Double click to copy to clipboard - + Double click to copy value + value ကို ကူးယူရန် နှစ်ချက်နှိပ်ပါ EntryURLModel Invalid URL - မမှန်ကန်သော URL - - - Duplicate URL - + URL မမှန်ကန်ပါ EntryView Fit to window - ဝင်းဒိုးနှင့် ကိုက်ညီရန် + ဝင်းဒိုးနှင့် ကိုက်ညီအောင်လုပ်ပါ Fit to contents - ပါဝင်သည့်အရာများနှင့် ကိုက်ညီရန် + ပါဝင်သည့်အရာများနှင့် ကိုက်ညီအောင်လုပ်ပါ Reset to defaults ပုံသေမူလသို့ ပြန်လည်သတ်မှတ်ပါ - - + %1 entry(s)... - - ExportDialog @@ -4411,13 +3996,15 @@ Would you like to overwrite the existing attachment? Sort entries by... - ဝင်ရောက်မှုများကို စီစဉ်ပါ + ထည့်သွင်းမှုများကို စီစဉ်ပါ You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! - သင်သည် သင့်ဒေတာဘေ့စ်ကို ကုဒ်ဖြင့်မပြောင်းရသေးသောဖိုင်သို့ ပို့တော့မည်ဖြစ်သည်။ ဤသို့ပို့ခြင်းဖြင့် သင့်စကားဝှက်များနှင့် ထိခိုက်လွယ်သော အချက်အလက်တို့တွင် အန္တရာယ်ရှိသည်။ + သင်သည် သင့်ဒေတာဘေ့စ်ကို ကုဒ်ဖြင့်မပြောင်းရသေးသောဖိုင်သို့ ပို့တော့မည်ဖြစ်သည်။ +ဤသို့ပို့ခြင်းဖြင့် သင့်စကားဝှက်များနှင့် ထိခိုက်လွယ်သော အချက်အလက်တို့တွင် အန္တရာယ်ရှိသည်။ + database order @@ -4582,7 +4169,7 @@ This will leave your passwords and sensitive information vulnerable! Having trouble downloading icons? You can enable the DuckDuckGo website icon service in the security section of the application settings. အိုင်ကွန်များကို ဒေါင်းလုဒ်လုပ်ရာတွင် ပြဿနာ ရှိနေပါသလား။ -သင်သည် အက်ပလီကေးရှင်းဆက်တင်ရှိ လုံခြုံရေးအပိုင်းတွင် DuckDuckGo ဝက်ဘ်ဆိုက်အိုင်ကွန် ဝန်ဆောင်မှုကို ဖွင့်နိုင်သည်။ +သင်သည် အက်ပလီကေးရှင်းဆက်တင်ရှိ လုံခြုံရေးအပိုင်းတွင် DuckDuckGo ဝက်ဘ်ဆိုက်အိုင်ကွန် ဝန်ဆောင်မှုကို ဖွင့်နိုင်ပါသည်။ Close @@ -4621,198 +4208,11 @@ You can enable the DuckDuckGo website icon service in the security section of th သီးသန့်ဝက်ဘ်ဆိုက်အိုင်ကွန်များကို ဒေါင်းလုဒ်လုပ်နေသည် (%1/%2)… - - ImportWizard - - Import Wizard - - - - - ImportWizardPageReview - - WizardPage - WizardPage - - - Entry count: %1 - - - - Group - အုပ်စု - - - Title - ခေါင်းစဉ် - - - Username - အသုံးပြုသူအမည် - - - Password - စကားဝှက် - - - Url - - - - Could not load key file. - - - - Could not open remote database. Password or key file may be incorrect. - - - - - ImportWizardPageSelect - - Form - ပုံစံ - - - Import File Selection - - - - Password: - စကားဝှက် - - - - Key File: - စကားဝှက်သော့ ဖိုင် - - - - Browse… - ရှာဖွေရန်… - - - Import Into: - - - - New Database - ဒေတာဘေ့စ်အသစ် - - - No unlocked databases available - - - - Existing Database: - - - - Import File: - - - - Comma Separated Values (.csv) - - - - 1Password Export (.1pux) - - - - 1Password Vault (.opvault) - - - - Bitwarden (.json) - - - - KeePass 1 Database (.kdb) - - - - Open OPVault - OPVault ဖွင့်ရန် - - - Select import file - - - - All files - ဖိုင်အားလုံး - - - Key files - စကားဝှက်သော့ဖိုင်များ - - - Select key file - စကားဝှက်သော့ဖိုင် ရွေးရန် - - - Comma Separated Values - - - - 1Password Export - - - - Bitwarden JSON Export - - - - 1Password Vault - - - - KeePass1 Database - - - - Proton Pass (.json) - - - - Proton Pass JSON Export - - - - Temporary Database - - - - Command: - - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - - - - Input: - - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last commend `exit` has to be sent - - - - - Remote Database (.kdbx) - - - KMessageWidget &Close - ပြီးလျှင် ပိတ်ပါ + &ပိတ်ရန် Close message @@ -4831,7 +4231,7 @@ The command has to exit. In case of `sftp` as last commend `exit` has to be sent Unable to issue challenge-response: %1 - စိန်ခေါ်မှုအား တုံ့ပြန်ချက်ကို ထုတ်ပေး၍မရပါ - %1 + စိန်ခေါ်မှုအားတုံ့ပြန်ချက်ကို ထုတ်ပေး၍မရပါ - %1 Invalid credentials were provided, please try again. @@ -4841,11 +4241,11 @@ If this reoccurs, then your database file may be corrupt. Header doesn't match hash - နဖူးစည်းစာတန်းသည် ဟက်ရှ်နှင့် မကိုက်ညီပါ + ခေါင်းစဉ်သည် ဟက်ရှ်နှင့် မကိုက်ညီပါ Invalid header id size - မမှန်ကန်သော နဖူးစည်းစာတန်း id အရွယ်အစား + ခေါင်းစဉ် id အရွယ်အစား မမှန်ကန်ပါ Invalid header field length: field %1 @@ -4865,7 +4265,7 @@ If this reoccurs, then your database file may be corrupt. Unable to issue challenge-response: %1 - စိန်ခေါ်မှုအား တုံ့ပြန်ချက်ကို ထုတ်ပေး၍မရပါ - %1 + စိန်ခေါ်မှုအားတုံ့ပြန်ချက်ကို ထုတ်ပေး၍မရပါ - %1 Unable to calculate database key @@ -4876,7 +4276,7 @@ If this reoccurs, then your database file may be corrupt. Kdbx4Reader missing database headers - ဒေတာဘေ့စ် နဖူးစည်းစာတန်း လိုနေသည် + ဒေတာဘေ့စ် ခေါင်းစဉ်များ လိုနေသည် Unable to calculate database key: %1 @@ -4884,11 +4284,11 @@ If this reoccurs, then your database file may be corrupt. Invalid header checksum size - နဖူးစည်းစာတန်း၏ အချက်အလက်အလက်အစု အရွယ်အစား မမှန်ကန်ပါ + ခေါင်းစဉ်၏ အချက်အလက်အလက်အစု အရွယ်အစား မမှန်ကန်ပါ Header SHA256 mismatch - နဖူးစည်းစာတန်း SHA256 မကိုက်ညီခြင်း + ခေါင်းစဉ် SHA256 မကိုက်ညီခြင်း Invalid credentials were provided, please try again. @@ -4902,11 +4302,11 @@ If this reoccurs, then your database file may be corrupt. Unknown cipher - အမည်မသိ ကုဒ်ရေးသားမှု + အမည်မသိသော ကုဒ်ရေးသားမှု Invalid header id size - မမှန်ကန်သော နဖူးစည်းစာတန်း id အရွယ်အစား + ခေါင်းစဉ် id အရွယ်အစား မမှန်ကန်ပါ Invalid header field length: field %1 @@ -4918,7 +4318,7 @@ If this reoccurs, then your database file may be corrupt. Failed to open buffer for KDF parameters in header - နဖူးစည်းစာတန်းရှိ KDF သတ်မှတ်ချက်ဘောင်များအတွက် မှတ်ဉာဏ်ယာယီသိုလှောင်ခန်းကို ဖွင့်ခြင်း မအောင်မြင်ပါ + ခေါင်းစဉ်ရှိ KDF သတ်မှတ်ချက်ဘောင်များအတွက် မှတ်ဉာဏ်ယာယီသိုလှောင်ခန်းကို ဖွင့်ခြင်း မအောင်မြင်ပါ Unsupported key derivation function (KDF) or invalid parameters @@ -4926,11 +4326,11 @@ If this reoccurs, then your database file may be corrupt. Legacy header fields found in KDBX4 file. - KDBX4 ဖိုင်တွင် အသုံးများသော နဖူးစည်းစာတန်းအကွက်ဟောင်းများ တွေ့ရသည်။ + KDBX4 ဖိုင်တွင် အသုံးများသော ခေါင်းစဉ်ဖြည့်ရန်အကွက်ဟောင်းများ တွေ့ရသည်။ Invalid inner header id size - အတွင်းဘက် နဖူးစည်းစာတန်း id အရွယ်အစား မမှန်ကန်ပါ + အတွင်းဘက် ခေါင်းစဉ် id အရွယ်အစား မမှန်ကန်ပါ Invalid inner header field length: field %1 @@ -4938,11 +4338,11 @@ If this reoccurs, then your database file may be corrupt. Invalid inner header data length: field %1, %2 expected, %3 found - မမှန်ကန်သော အတွင်းပိုင်း ခေါင်းစီး အချက်အလက် အရှည်: အပိုင်း %1, %2 မျော်လင့်ထားသည့် %3 တွေ့ရှိခဲ့သည်။ + မမှန်ကန်သော ခေါင်းစီး အချက်အလက် အရှည်: အပိုင်း %1, %2 မျော်လင့်ထားသည့် %3 တွေ့ရှိခဲ့သည်။ Invalid inner header binary size - အတွင်းဘက် နဖူးစည်းစာတန်း နှစ်လီစနစ် အရွယ်အစား မမှန်ကန်ပါ + အတွင်းဘက် ခေါင်းစဉ် နှစ်လီစနစ် အရွယ်အစား မမှန်ကန်ပါ Unsupported KeePass variant map version. @@ -4997,7 +4397,7 @@ If this reoccurs, then your database file may be corrupt. Invalid variant map entry type Translation: variant map = data structure for storing meta data - မီတာဒေတာသိမ်းရန် အချက်အလက်တည်ဆောက်ပုံ ဖြည့်သွင်းချက် အမျိုးအစား + မီတာဒေတာသိမ်းရန် အချက်အလက်တည်ဆောက်ပုံ ဖြည့်သွင်းချက် အမျိုးအစား မမှန်ကန်ပါ Invalid variant map field type size @@ -5009,12 +4409,12 @@ If this reoccurs, then your database file may be corrupt. Kdbx4Writer Invalid symmetric cipher algorithm. - ဘက်ညီသော ကုဒ်ရေးသားမှု အယ်လဂိုရီသမ် မမှန်ကန်ပါ + ဘက်ညီသော ကုဒ်ရေးသားမှု အယ်လဂိုရီသမ် မမှန်ကန်ပါ။ Invalid symmetric cipher IV size. IV = Initialization Vector for symmetric cipher - ဘက်ညီသော ကုဒ်ရေးသားမှု IV အရွယ်အစား မမှန်ကန်ပါ + ဘက်ညီသော ကုဒ်ရေးသားမှု IV အရွယ်အစား မမှန်ကန်ပါ။ Unable to calculate database key: %1 @@ -5046,7 +4446,7 @@ If this reoccurs, then your database file may be corrupt. Unsupported compression algorithm - ဖိုင်ချုံ့ခြင်း အယ်လဂိုရီသမ်ကို မပံ့ပိုးပါ + ပံ့ပိုးမထားသော ဖိုင်ချုံ့ခြင်း အယ်လဂိုရီသမ် Invalid master seed size @@ -5070,7 +4470,7 @@ If this reoccurs, then your database file may be corrupt. Invalid inner random stream cipher - အတွင်းဘက် အလျင့်သင့်သလို ထုတ်လွှင့်သော ကုဒ်ရေးသားမှု မမှန်ကန်ပါ + အတွင်းဘက် အလျင်းသင့်သလို ထုတ်လွှင့်သော ကုဒ်ရေးသားမှု မမှန်ကန်ပါ Failed to read database file. @@ -5123,7 +4523,7 @@ Line %2, column %3 Multiple group elements - အုပ်စုပါ ပစ္စည်းများစွာ + အုပ်စုတွင် ပါဝင်သည့်အရာများစွာ Null group uuid @@ -5163,7 +4563,7 @@ Line %2, column %3 History element in history entry - မှတ်တမ်း ဖြည့်သွင်းချက်ပါ မှတ်တမ်း အချက် + မှတ်တမ်း ဖြည့်သွင်းချက်ပါ မှတ်တမ်း အချက်အလက် No entry uuid found @@ -5171,11 +4571,11 @@ Line %2, column %3 History element with different uuid - uuid မတူသော မှတ်တမ်း အချက် + uuid မတူသော မှတ်တမ်း အချက်အလက် Duplicate custom attribute found - စိတ်ကြိုက် ပင်ကိုအချက်အလက် နှစ်ခုထပ်နေသည်ကို တွေ့ရသည် + စိတ်ကြိုက် လက္ခဏာရပ် နှစ်ခုထပ်နေသည်ကို တွေ့ရသည် Entry string key or value missing @@ -5216,22 +4616,22 @@ Line %2, column %3 Unable to decompress binary Translator meant is a binary data inside an entry - နှစ်လီစနစ် ဒေတာကို မူလအရွယ်အစားအတိုင်းပြန်ထား၍မရပါ + နှစ်လီစနစ် ဒေတာကို မူလအရွယ်အစားအတိုင်း ပြန်ထား၍မရပါ KeeAgentSettings Invalid KeeAgent settings file structure. - KeeAgent ဆက်တင် ဖိုင်တည်ဆောက်ပုံ မမှန်ကန်ပါ + KeeAgent ဆက်တင်ဖိုင် တည်ဆောက်ပုံ မမှန်ကန်ပါ Private key is an attachment but no attachments provided. - သီးသန့်စကားဝှက်သော့မှာ ပူးတွဲဖိုင် ဖြစ်သော်လည်း ပူးတွဲဖိုင် မပေးထားပါ။ + သီးသန့်စကားဝှက်သော့မှာ ပူးတွဲဖိုင် ဖြစ်သော်လည်း ပူးတွဲဖိုင်များ မပေးထားပါ။ Private key is empty - သီးသန့်စကားဝှက်သော့ လွတ်နေသည် + သီးသန့်စကားဝှက်သော့ အလွတ်ဖြစ်နေသည် File too large to be a private key @@ -5242,6 +4642,17 @@ Line %2, column %3 သီးသန့်စကားဝှက်သော့ကို ဖွင့်ခြင်း မအောင်မြင်ပါ + + KeePass1OpenWidget + + Import KeePass1 Database + KeePass1 ဒေတာဘေ့စ်ကို တင်ပို့ရန် + + + Unable to open the database. + ဒေတာဘေ့စ်ကို ဖွင့်၍မရပါ။ + + KeePass1Reader @@ -5283,7 +4694,7 @@ Line %2, column %3 Invalid number of transform rounds - ပုံစံပြောင်း အခေါက်ရေ မမှန်ကန်ပါ + ပြောင်းရန် အလှည့်အကြိမ်ရေ မမှန်ကန်ပါ Unable to construct group tree @@ -5321,7 +4732,7 @@ If this reoccurs, then your database file may be corrupt. Read group field data doesn't match size - ဖတ်ရန် အုပ်စုအကွက်ဒေတာသည် အရွယ်အစားနှင့် မကိုက်ညီပါ + ဖတ်ရန် အုပ်စုအကွက် အချက်အလက်သည် အရွယ်အစားနှင့် မကိုက်ညီပါ Incorrect group id field size @@ -5357,7 +4768,7 @@ If this reoccurs, then your database file may be corrupt. Missing group id or level - အုပ်စု id  သို့မဟုတ် အဆင့် လိုနေသည် + အုပ်စု id သို့မဟုတ် အဆင့် လိုနေသည် Missing entry field type number @@ -5369,7 +4780,7 @@ If this reoccurs, then your database file may be corrupt. Read entry field data doesn't match size - ဖတ်ရန် ဖြည့်သွင်းချက်အကွက်ဒေတာသည် အရွယ်အစားနှင့် မကိုက်ညီပါ + ဖတ်ရန် ဖြည့်သွင်းချက်အကွက်အချက်အလက်သည် အရွယ်အစားနှင့် မကိုက်ညီပါ Invalid entry UUID field size @@ -5404,11 +4815,11 @@ If this reoccurs, then your database file may be corrupt. KeeShare Invalid sharing reference - မျှဝေခြင်း ရည်ညွှန်းချက် မမှန်ကန်ပါ + ရည်ညွှန်းချက် မျှဝေခြင်း မမှန်ကန်ပါ Inactive share %1 - အသုံးမပြုသော မျှဝေမှု %1 + အသုံးပြုမနေသော မျှဝေမှု %1 Imported from %1 @@ -5424,11 +4835,11 @@ If this reoccurs, then your database file may be corrupt. Import is disabled in settings - ဆက်တင်များကို ထည့်သွင်းမှုကို ပယ်ဖျက်ထားသည် + ဆက်တင်များတွင် ထည့်သွင်းရန် ကို ပိတ်ထားသည် Export is disabled in settings - ဆက်တင်များတွင် ပို့ရန် ကို ပယ်ဖျက်ထားသည် + ဆက်တင်များတွင် ပို့ရန် ကို ပိတ်ထားသည် Inactive share @@ -5470,7 +4881,7 @@ If this reoccurs, then your database file may be corrupt. KeyFileEditWidget Generate a new key file - စကားဝှက်သော့ဖိုင်အသစ် ထုတ်လုပ်ရန် + စကားဝှက်သော့ဖိုင်အသစ် တစ်ခု ထုတ်လုပ်ရန် Generate @@ -5494,7 +4905,7 @@ If this reoccurs, then your database file may be corrupt. Old key file format - စကားဝှက်သော့ဟောင်း ဖိုင် ဖောမက် + စကားဝှက်သော့ဖိုင် ဖောမက်အဟောင်း You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. @@ -5569,7 +4980,7 @@ Message: %2 The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. Are you sure you want to continue with this file? - ရွေးထားသော စကားဝှက်သော့ဖိုင်သည် စကားဝှက် ဒေတာဘေ့စ်ဖိုင် ဖြစ်ပုံပေါ်သည်။ စကားဝှက်သော့ဖိုင်သည် ဘယ်တော့မှ ပြောင်းလဲသည့် တည်မြဲဖိုင် ဖြစ်ရမည်။ ထိုသို့မဟုတ်ပါက သင်သည် သင့်ဒေတာဘေ့စ်ကို အသုံးပြုခွင့် လုံးဝ ဆုံးရှုံးပါမည်။ + ရွေးထားသော စကားဝှက်သော့ဖိုင်သည် စကားဝှက် ဒေတာဘေ့စ်ဖိုင် ဖြစ်ပုံပေါ်သည်။ စကားဝှက်သော့ဖိုင်သည် ဘယ်တော့မှ မပြောင်းလဲသည့် တည်မြဲဖိုင် ဖြစ်ရမည်။ ထိုသို့မဟုတ်ပါက သင်သည် သင့်ဒေတာဘေ့စ်ကို အသုံးပြုခွင့် လုံးဝ ဆုံးရှုံးပါမည်။ သင်သည် ဤဖိုင်နှင့် ဆက်လုပ်လိုသည်မှာ သေချာပါသလား။ @@ -5598,6 +5009,10 @@ Are you sure you want to continue with this file? &Recent Databases &မကြာမီက ဒေတာဘေ့စ်များ + + &Import + &ထည့်သွင်းရန် + &Export &ပို့ရန် @@ -5612,16 +5027,12 @@ Are you sure you want to continue with this file? Copy Att&ribute - ပင်ကိုအချက်အလက် ကူးရန် + လက္ခဏာရပ် ကူးရန် TOTP TOTP - - Tags - ပူးတွဲမှုများ - &Groups &အုပ်စုများ @@ -5666,18 +5077,34 @@ Are you sure you want to continue with this file? &New Database… &ဒေတာဘေ့စ်အသစ်… + + Create a new database + ဒေတာဘေ့စ်အသစ် တစ်ခု ဖန်တီးရန် + &Merge From Database… &ဒေတာဘေ့စ်မှ ပေါင်းစပ်ရန်… + + Merge from another KDBX database + အခြား KDBX ဒေတာဘေ့စ်မှ ပေါင်းစပ်ရန် + &New Entry… &ဖြည့်သွင်းချက်အသစ်… + + Add a new entry + ဖြည့်သွင်းချက်အသစ် တစ်ခု ထည့်ရန် + &Edit Entry… &ဖြည့်သွင်းချက် တည်းဖြတ်ရန်… + + View or edit entry + ဖြည့်သွင်းချက်ကို ကြည့်ရန် သို့မဟုတ် တည်းဖြတ်ရန် + &Delete Entry… &ဖြည့်သွင်းရန် ဖျက်ရန်… @@ -5686,6 +5113,10 @@ Are you sure you want to continue with this file? &New Group… &အုပ်စုသစ်… + + Add a new group + အုပ်စုသစ် တစ်စု ထည့်ရန် + &Edit Group… &အုပ်စု တည်းဖြတ်ရန်… @@ -5718,10 +5149,18 @@ Are you sure you want to continue with this file? Database &Reports… ဒေတာဘေ့စ် &အစီရင်ခံစာများ… + + Statistics, health check, etc. + စာရင်းအင်း၊ ကျန်းမာရေး စစ်ဆေးမှု စသည် + &Database Settings… &ဒေတာဘေ့စ် ဆက်တင်များ… + + Database settings + ဒေတာဘေ့စ် ဆက်တင်များ + &Clone Entry… &ဖြည့်သွင်းချက် ပုံတူပွားရန်… @@ -5730,29 +5169,45 @@ Are you sure you want to continue with this file? Move u&p အပေါ်သို့ ရွှေ့ရန် + + Move entry one step up + ဖြည့်သွင်းချက်ကို အပေါ်သို့ တစ်ဆင့်တက်ရွှေ့ရန် + Move do&wn အောက်သို့ ရွှေ့ရန် + + Move entry one step down + ဖြည့်သွင်းချက်ကို အောက်သို့ တစ်ဆင့်ချရွှေ့ရန် + Copy &Username &အသုံးပြုသူအမည် ကူးရန် + + Copy username to clipboard + အသုံးပြုသူအမည်ကို clipboard သို့ ကူးရန် + Copy &Password &စကားဝှက် ကူးရန် + + Copy password to clipboard + စကားဝှက်ကို clipboard သို့ ကူးရန် + &Settings &ဆက်တင်များ &Password Generator - &စကားဝှက် ထုတ်လုပ်သည့်ကိရိယာ + &စကားဝှက် ထုတ်လုပ်ကိရိယာ Perform &Auto-Type - &အလိုအလျောက်စာရိုက်ခြင်း ဆောင်ရွက်ပါ + &အလိုအလျောက်စာရိုက်ခြင်း ဆောင်ရွက်ရန် Download &Favicon @@ -5775,13 +5230,21 @@ Are you sure you want to continue with this file? &ခေါင်းစဉ် - Copy &URL - &URL ကို ကူးယူပါ + Copy title to clipboard + ခေါင်းစဉ်ကို clipboard သို့ ကူးရန် + + + Copy URL to clipboard + URL ကို clipboard သို့ ကူးရန် &Notes &မှတ်ချက်များ + + Copy notes to clipboard + မှတ်ချက်များကို clipboard သို့ ကူးရန် + &CSV File… &CSV ဖိုင်… @@ -5794,14 +5257,26 @@ Are you sure you want to continue with this file? KeePass 1 Database… KeePass 1 ဒေတာဘေ့စ်… + + Import a KeePass 1 database + KeePass 1 ဒေတာဘေ့စ် ထည့်သွင်းရန် + 1Password Vault… 1Password သိုလှောင်ခန်း… + + Import a 1Password Vault + 1Password သိုလှောင်ခန်း ထည့်သွင်းရန် + CSV File… CSV ဖိုင်… + + Import a CSV file + CSV ဖိုင် ထည့်သွင်းရန် + Show TOTP TOTP ပြရန် @@ -5818,10 +5293,6 @@ Are you sure you want to continue with this file? Copy &TOTP &TOTP ကို ကူးရန် - - Copy Password and TOTP - စကားဝှက်နှင့် TOTP ကို ကူးယူပါ - E&mpty recycle bin အမှိုက်ပုံးကို သွန်ရန် @@ -5846,6 +5317,10 @@ Are you sure you want to continue with this file? &Online Help &အွန်လိုင်း အကူအညီ + + Go to online documentation + အွန်လိုင်း အသုံးပြုနည်းလက်စွဲသို့ သွားရန် + &User Guide &အသုံးပြုသူ လမ်းညွှန် @@ -5856,7 +5331,7 @@ Are you sure you want to continue with this file? &Keyboard Shortcuts - &ကီးဘုတ်သုံး ဖြတ်လမ်းများ + &ကီးဘုတ် ရှော့(တ်)ကတ်များ Save Database Backup… @@ -5880,7 +5355,7 @@ Are you sure you want to continue with this file? Light - လင်းသော + အလင်း Dark @@ -5890,21 +5365,17 @@ Are you sure you want to continue with this file? Classic (Platform-native) ဂန္ဓဝင် (ပလက်ဖောင်းမူလ) - - Show Menubar - - Show Toolbar တူးလ်ဘား ပြရန် Show Preview Panel - နမူနာကြည့်ရှုမှု မျက်နှာပြင်ကို ပြရန် + အစမ်းကြည့် မျက်နှာပြင်ကို ပြရန် Always on Top - ထပ်တွင် အမြဲတမ်းထားရန် + ထိပ်တွင် အမြဲတမ်းထားရန် Hide Usernames @@ -5918,10 +5389,6 @@ Are you sure you want to continue with this file? Clone Group... အုပ်စုကို ပုံတူပွားရန်… - - &XML File… - &XML ဖိုင်… - Clear history မှတ်တမ်းကို ရှင်းရန် @@ -5949,12 +5416,14 @@ Expect some bugs and minor issues, this version is meant for testing purposes. - No Tags - တဂ်များမရှိပါ + 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 ကို သုံးရန် သင့်အား အကြံပြုပါသည်။ Restore Entry(s) - + ဖြည့်သွင်းချက်(များ)အား မူလအတိုင်းပြန်ထားသည်။ Settings @@ -5980,10 +5449,6 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Quit KeePassXC KeePassXC မှ ထွက်ရန် - - %1 Entry(s) - %1 ဖြည့်သွင်းချက်(s) - Please present or touch your YubiKey to continue… ကျေးဇူးပြု၍ ဆက်လုပ်ရန် သင့် YubiKey ကို တင်ပြပါ သို့မဟုတ် နှိပ်ပါ… @@ -5996,314 +5461,38 @@ Expect some bugs and minor issues, this version is meant for testing purposes.You must restart the application to apply this setting. Would you like to restart now? သင်သည် ဤဆက်တင်ကို သုံးရန် အက်ပလီကေးရှင်းကို ပြန်လည်စတင်ရမည်။ ယခု ပြန်လည်စတင်လိုပါသလား။ + + Tags + ပူးတွဲမှုများ + + + No Tags + တဂ်များမရှိပါ + + + %1 Entry(s) + %1 ဖြည့်သွင်းချက်(s) + + + Copy Password and TOTP + စကားဝှက်နှင့် TOTP ကို ကူးယူပါ + + + &XML File… + &XML ဖိုင်… + + + XML File… + XML ဖိုင်… + + + Copy &URL + &URL ကို ကူးယူပါ + Allow Screen Capture မျက်နှာပြင်ကို ဓါတ်ပုံရိုက်ယူခွင့်ပြုပါ - - 1Password 1PUX... - - - - Import a 1Password 1PUX file - - - - Import… - - - - Passkeys… - - - - Import Passkey - - - - Remote S&ync… - - - - Quit Application - - - - Open About Dialog - - - - Open Database - - - - Create Database - - - - Merge From Database - - - - Create Entry - - - - Edit Entry - ဖြည့်သွင်းချက်ကို တည်းဖြတ်ရန် - - - Delete Entry - - - - Create Group - - - - Edit Group - အုပ်စု တည်းဖြတ်ရန် - - - Delete Group - - - - Download All Favicons - - - - Sort Groups A-Z - - - - Sort Groups Z-A - - - - Save Database As - - - - Show Database Security - - - - Show Database Reports - - - - Show Database Settings - - - - Show Passkeys - - - - Clone Entry - - - - Move Entry Up - - - - Move Entry Down - - - - Copy Username - အသုံးပြုသူအမည် ကူးရန် - - - Copy Password - စကားဝှက် ကူးရန် - - - Show Application Settings - - - - Show Password Generator - - - - Remove Passkey From Entry - - - - Perform Auto-Type: {USERNAME} - - - - Perform Auto-Type: {USERNAME}{ENTER} - - - - Perform Auto-Type: {PASSWORD} - - - - Perform Auto-Type: {PASSWORD}{ENTER} - - - - Perform Auto-Type: {TOTP} - - - - Copy Title - - - - Copy URL - - - - Copy Notes - - - - Export to CSV - - - - Export to HTML - - - - Import KeePass1 Database - KeePass1 ဒေတာဘေ့စ်ကို တင်ပို့ရန် - - - Import 1Password Vault - - - - Import CSV File - - - - Show TOTP QR Code - - - - Set up TOTP - - - - Empty Recycle Bin - - - - Open Donation Website - - - - Open Bug Report - - - - Open Online Documentation - - - - Open Keyboard Shortcuts Guide - - - - Save Database Backup - - - - SSH Agent: Add Key - - - - SSH Agent: Remove Key - - - - Toggle Compact Mode - - - - Set Theme: Automatic - - - - Set Theme: Light - - - - Set Theme: Dark - - - - Set Theme: Classic - - - - Toggle Show Menubar - - - - Toggle Show Toolbar - - - - Toggle Show Preview Panel - - - - Toggle Always on Top - - - - Toggle Hide Usernames - - - - Toggle Hide Passwords - - - - Export to XML - - - - Toggle Allow Screen Capture - - - - Show Group Panel - - - - Toggle Show Group Panel - - - - Setup Remote Sync… - - - - Password Generator - - - - E&xpire Entry… - - - - Clear SSH Agent - - - - Clear all identities in ssh-agent - - ManageDatabase @@ -6340,7 +5529,7 @@ Expect some bugs and minor issues, this version is meant for testing purposes. Reset - မူလအတိုင်းပြန်လည်စတင်ခြင်း + မူလအတိုင်းပြန်လည်သတ်မှတ်ခြင်း Reset any remembered decisions for this application @@ -6361,6 +5550,26 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Overwriting %1 [%2] ထပ်ရေးနေသည် %1 [%2] + + older entry merged from database "%1" + ဒေတာဘေ့စ် "%1" မှ ပိုဟောင်းသော ဖြည့်သွင်းချက်ကို ပေါင်းစပ်ထားသည် + + + Adding backup for older target %1 [%2] + ပိုဟောင်းသော လက်ခံမည့်အရာ %1 အတွက် အရန် ထည့်နေသည် [%2] + + + Adding backup for older source %1 [%2] + ပိုဟောင်းသော ရင်းမြစ် %1 အတွက် အရန် ထည့်နေသည် [%2] + + + Reapplying older target entry on top of newer source %1 [%2] + ပိုသစ်သော ရင်းမြစ် %1 အစား ပိုဟောင်းသော လက်ခံမည့်အရာ ဖြည့်သွင်းချက်ကို ပြန်သုံးနေသည် [%2] + + + Reapplying older source entry on top of newer target %1 [%2] + ပိုသစ်သော လက်ခံမည့်အရာ %1 အစား ပိုဟောင်းသော ရင်းမြစ် ဖြည့်သွင်းချက်ကို ပြန်သုံးနေသည် [%2] + Synchronizing from newer source %1 [%2] ပိုသစ်သော ရင်းမြစ် %1 မှ ချိန်ကိုက်နေသည် [%2] @@ -6371,11 +5580,11 @@ Expect some bugs and minor issues, this version is meant for testing purposes. Deleting child %1 [%2] - ကလေး %1 ကို ဖျက်နေသည် [%2] + လွယ်ကူသော %1 ကို ဖျက်နေသည် [%2] Deleting orphan %1 [%2] - မိဘမဲ့ %1 ကို ဖျက်နေသည် [%2] + ကျန်ရစ်ခဲ့သော %1 ကို ဖျက်နေသည် [%2] Changed deleted objects @@ -6391,7 +5600,7 @@ Expect some bugs and minor issues, this version is meant for testing purposes. Adding custom data %1 [%2] - စိတ်ကြိုက် အချက်အလက် %1 ကို ထည့်ထားသည် [%2] + စိတ်ကြိုက် အချက်အလက် %1 ကို ထည့်နေသည် [%2] @@ -6420,6 +5629,14 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. ဒေတာဘေ့စ် ကုဒ်ဖြင့်ပြောင်းခြင်း ဆက်တင်များကို ဤနေရာတွင် ချိန်ညှိနိုင်သည်။ ၎င်းတို့ကို ဒေတာဘေ့စ် ဆက်တင်များတွင် နောက်မှ ပြောင်းလဲနိုင်သည်။ + + Advanced Settings + အဆင့်မြင့် ဆက်တင်များ + + + Simple Settings + လွယ်ကူရိုးရှင်းသော ဆက်တင်များ + NewDatabaseWizardPageDatabaseKey @@ -6451,26 +5668,7 @@ Expect some bugs and minor issues, this version is meant for testing purposes. Please fill in the display name and an optional description for your new database: - ကျေးဇူးပြု၍ သင့်ဒေတာဘေ့စ်အသစ်အတွက် ပြသရန်အမည်နှင့် ရွေးချယ်နိုင်သည့် ဖော်ပြချက်ကို ဖြည့်ပါ။ - - - - NewEntryAttachmentsDialog - - Attachment name cannot be empty - - - - Attachment with the same name already exists - - - - Save attachment - - - - New entry attachment - + ကျေးဇူးပြု၍ သင့်ဒေတာဘေ့စ်အသစ်အတွက် ပြသရန်အမည်နှင့် ရွေးချယ်နိုင်သည့် ဖော်ပြချက်ကို ဖြည့်ပါ - @@ -6492,11 +5690,11 @@ Expect some bugs and minor issues, this version is meant for testing purposes.OpData01 Invalid OpData01, does not contain header - OpData01 မမှန်ကန်ပါ၊ နဖူးစည်းစာတန်း မပါဝင်ပါ + OpData01 မမှန်ကန်ပါ၊ ခေါင်းစဉ် မပါဝင်ပါ Unable to read all IV bytes, wanted 16 but got %1 - IV ဘိုက်အားလုံးကို ဖတ်၍မရပါ၊ 16 ခု လိုသော်လည်း %1 ရရှိခဲ့သည် + IV ဘိုက်အားလုံးကို ဖတ်၍မရပါ၊ ၁၆ ခု လိုသော်လည်း %1 ရရှိခဲ့သည် Unable to init cipher for opdata01: %1 @@ -6508,22 +5706,31 @@ Expect some bugs and minor issues, this version is meant for testing purposes. Malformed OpData01 due to a failed HMAC - မအောင်မြင်သော HMAC တစ်ခုကြောင့် စံမမီသည့် OpData01 + မအောင်မြင်သော HMAC တစ်ခုကြောင့် စံမမှီသည့် OpData01 Unable to process clearText in place - clearText ကို နေသားတကျ စီမံဆောင်ရွက်၍မရပါ + လွယ်ကူစွာဖတ်နိုင်သောစာ ကို နေသားတကျ စီမံဆောင်ရွက်၍မရပါ Expected %1 bytes of clear-text, found %2 ကုဒ်ပြောင်းမထားသောစာသား %1 ဘိုက်ကို မျှော်လင့်ခဲ့သည်၊ %2 တွေ့ခဲ့သည် + + OpVaultOpenWidget + + Read Database did not produce an instance +%1 + ဖတ်ရန်ဒေတာဘေ့စ်သည် မည်သည့်အရာကိုမျှ မထုတ်လုပ်ခဲ့ပါ +%1 + + OpVaultReader Directory .opvault must exist - ညွှန်ကြားချက် .opvault တည်‌ရှိရမည် + လမ်းညွှန် .opvault တည်‌ရှိရမည် Directory .opvault must be readable @@ -6566,7 +5773,7 @@ Expect some bugs and minor issues, this version is meant for testing purposes. Key file magic header id invalid - စကားဝှက်သော့ဖိုင် ပြောင်းလဲနိုင်သော နဖူးစည်းစာတန်း id မမှန်ကန်ပါ + စကားဝှက်သော့ဖိုင် ကိန်းရှင် ခေါင်းစဉ် id မမှန်ကန်ပါ Found zero keys @@ -6592,13 +5799,9 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Unknown cipher: %1 အမည်မသိ ကုဒ်ရေးသားမှု - %1 - - AES-256/GCM is currently not supported - AES-256/GCM ကို လောလောဆယ် မပံ့ပိုးပါ - Passphrase is required to decrypt this key - ဤစကားဝှက်သော့ကို ပြန်ဖြည်ရန် လျှို့ဝှက်စာသား လိုအပ်သည် + ဤစကားဝှက်သော့ကို ပြန်ဖြည်ရန် လျှို့ဝှက်စာစု လိုအပ်သည် Key derivation failed: %1 @@ -6610,7 +5813,7 @@ Expect some bugs and minor issues, this version is meant for testing purposes. Unknown KDF: %1 - အမည်မသိ KDF - %1 + အမည်မသိသော KDF - %1 Failed to initialize cipher: %1 @@ -6622,7 +5825,7 @@ Expect some bugs and minor issues, this version is meant for testing purposes. Decryption failed, wrong passphrase? - ပြန်ဖြည်ခြင်း မအောင်မြင်ပါ၊ လျှို့ဝှက်စာသား မှားနေပါသလား။ + ပြန်ဖြည်ခြင်း မအောင်မြင်ပါ၊ လျှို့ဝှက်စာစု မှားနေပါသလား။ Unexpected EOF while reading key @@ -6634,11 +5837,11 @@ Expect some bugs and minor issues, this version is meant for testing purposes. Unexpected EOF while reading public key - အများသုံးစကားဝှက်သော့ ဖတ်စဉ် မထင်မှတ်သော EOF + အများသုံးစကားဝှက်သော့ ဖတ်စဉ် မထင်မှတ်သော EOF ဖြစ်ခဲ့သည် Unknown key type: %1 - အမည်မသိ စကားဝှက်သော့ အမျိုးအစား - %1 + အမည်မသိသော စကားဝှက်သော့ အမျိုးအစား - %1 Unexpected EOF while reading private key @@ -6661,179 +5864,8 @@ Expect some bugs and minor issues, this version is meant for testing purposes.သီးသန့်စကားဝှက်သော့ ရေးစဉ် မထင်မှတ်သော EOF ဖြစ်ခဲ့သည် - (encrypted) - (ကုဒ်ဖြင့်ပြောင်းပြီး) - - - - OpenSSHKeyGenDialog - - SSH Key Generator - - - - Type - အမျိုးအစား - - - Bits - - - - Comment - မှတ်ချက်ပေးရန် - - - - PasskeyExportDialog - - KeePassXC - Passkey Export - - - - Filenames will be generated with title and .passkey file extension. - - - - Export entries - - - - Export Selected - - - - Cancel - ပယ်ဖျက်ရန် - - - Export to folder - - - - Export the following passkey entries. - - - - - PasskeyExporter - - KeePassXC: Passkey Export - - - - File "%1.passkey" already exists. -Do you want to overwrite it? - - - - - Cannot open file - - - - Cannot open file "%1" for writing. - - - - Cannot write to file - - - - - PasskeyImportDialog - - KeePassXC - Passkey Import - - - - Username: %1 - - - - Group - အုပ်စု - - - Database - - - - Import Passkey - - - - Import - ထည့်သွင်းရန် - - - Cancel - ပယ်ဖျက်ရန် - - - Entry - ဖြည့်သွင်းချက် - - - Create new entry - - - - Relying Party: %1 - - - - Import the following passkey: - - - - Import the following passkey to this entry: - - - - Default passkeys group (Imported Passkeys) - - - - - PasskeyImporter - - Passkey file - - - - All files - ဖိုင်အားလုံး - - - Cannot open file - - - - Cannot open file "%1" for reading. - - - - Open passkey file - - - - Cannot import passkey - - - - Cannot import passkey file "%1". Data is missing. - - - - Cannot import passkey file "%1". -The following data is missing: -%2 - - - - Cannot import passkey file "%1". Private key is missing or malformed. - + AES-256/GCM is currently not supported + AES-256/GCM ကို လောလောဆယ် မပံ့ပိုးပါ @@ -6844,7 +5876,7 @@ The following data is missing: Password field - စကားဝှက်အကွက် + စကားဝှက်ဖြန့်ရန်အကွက် Confirm password: @@ -6876,7 +5908,7 @@ The following data is missing: <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> + <p>စကားဝှက်သည် သင့်ဒေတာဘေ့စ်ကို လုံခြုံစေရန် အဓိကနည်းလမ်း ဖြစ်သည်။</p><p>အားကောင်းသော စကားဝှက်များသည် ရှည်ပြီး သီးသန့်ဖြစ်သည်။ KeePassXC သည် သင့်အတွက် ထိုကဲ့သို့စကားဝှက်တစ်ခု ထုတ်လုပ်ပေးနိုင်သည်။</p> Passwords do not match. @@ -6892,7 +5924,7 @@ The following data is missing: strength Password strength - အားကောင်းမှု + ခိုင်မာမှု entropy @@ -6992,15 +6024,15 @@ The following data is missing: Add non-hex letters to "do not include" list - သင်္ကေတ 16 ခုသုံး ကိန်းဂဏန်းစနစ်တွင် မပါသော စာလုံးများကို "မထည့်သွင်းရ" စနစ်တွင် ထည့်ပါ + သင်္ကေတ ၁၆ ခုသုံး ကိန်းဂဏန်းစနစ်တွင် မပါသော စာလုံးများကို "မထည့်သွင်းရ" စနစ်တွင် ထည့်ပါ Hex Passwords - သင်္ကေတ 16 ခုသုံး ကိန်းဂဏန်းစနစ် စကားဝှက်များ + သင်္ကေတ ၁၆ ခုသုံး ကိန်းဂဏန်းစနစ် စကားဝှက်များ Hex - သင်္ကေတ 16 ခုသုံး ကိန်းဂဏန်းစနစ် + သင်္ကေတ ၁၆ ခုသုံး ကိန်းဂဏန်းစနစ် Character set to exclude from generated password @@ -7024,7 +6056,7 @@ The following data is missing: Passphrase - လျှို့ဝှက်စာသား + လျှို့ဝှက်စာစု Word Separator: @@ -7036,20 +6068,28 @@ The following data is missing: Word Count: - စလုံးအရေအတွက် - + စကားလုံး အရေအတွက် - + + + Character Count: + စာလုံး အရေအတွက် - Word Case: - စကားလုံးအလိုက် - + စကားလုံး အကြီးအသေး - Delete selected wordlist - ရွေးခြယ်ထားသောစာလုံးများအားဖျက်ပါ + ရွေးခြယ်ထားသောစာလုံးစာရင်းအားဖျက်ပါ Add custom wordlist စိတ်ကြိုက်ပြုလုပ်ထားသောစာလုံးစာရင်းအားထည့်သွင်းပါ + + character + စာလုံး + Close ပိတ်ရန် @@ -7068,11 +6108,11 @@ The following data is missing: lower case - အသေး + စာလုံးအသေး UPPER CASE - အကြီး + စာလုံးအကြီး Title Case @@ -7080,36 +6120,12 @@ The following data is missing: (SYSTEM) - စနစ် + (စနစ်) Entropy: %1 bit အချက်အလက် ရွှေ့ပြောင်းနှုန်း - %1 ဘစ် - - Password Quality: %1 - စကားဝှက် အရည်အသွေး - %1 - - - Poor - Password quality - ညံ့ - - - Weak - Password quality - အားနည်း - - - Good - Password quality - ကောင်း - - - Excellent - Password quality - အလွန်ကောင်း - Confirm Delete Wordlist စာလုံးစာရင်းအားဖျက်ရန်အတည်ပြုပါသည် @@ -7141,7 +6157,7 @@ The following data is missing: Wordlist "%1" already exists as a custom wordlist. Do you want to overwrite it? - စာလုံးစာရင်း ၁ ရာခို်င်နှုန်းသည် စိတ်ကြိုက်ပြုလုပ်နိုင်သော စာလုံးစာရင်းတွင် ပါရှိပြီးဖြစ်သည်။ + စာလုံးစာရင်း "%1" သည် စိတ်ကြိုက်ပြုလုပ်နိုင်သော စာလုံးစာရင်းတွင် ပါရှိပြီးဖြစ်သည်။ သင် ထပ်ရေးချင်ပါသလား ? @@ -7157,20 +6173,32 @@ Do you want to overwrite it? အထူးစာလုံးများ - passwordLength - + Password Quality: %1 + စကားဝှက် အရည်အသွေး - %1 - Characters: %1 - + Poor + Password quality + ညံ့ - MIXED case - + Weak + Password quality + အားနည်း - Excluded characters: "0", "1", "l", "I", "O", "|", "﹒", "B", "8", "G", "6" - + Good + Password quality + ကောင်း + + + Excellent + Password quality + အလွန်ကောင်း + + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + ဖယ်ထားသော စာလုံးများ - "0"၊ "1"၊ "l"၊ "I"၊ "O"၊ "|"၊ "﹒" @@ -7220,7 +6248,7 @@ Do you want to overwrite it? အလွန်ကောင်း - Toggle password visibility using Control + H. Open the password generator using Control + G. + Toggle password visibilty using Control + H. Open the password generator using Control + G. @@ -7239,26 +6267,11 @@ Do you want to overwrite it? စာလုံးများကြားတွင် &Tab ကို နှိပ်ပါ - - PreviewEntryAttachmentsDialog - - Preview entry attachment - - - - No preview available - - - - Image format not supported - - - QMessageBox Overwrite - ထပ်ရေးပါ + ထပ်ရေးရန် Delete @@ -7292,10 +6305,6 @@ Do you want to overwrite it? Continue ဆက်လုပ်ရန် - - Continue with weak password - - QObject @@ -7305,7 +6314,7 @@ Do you want to overwrite it? Database hash not available - ဒေတာဘေ့စ် ဟက်ရှ် မရရှိနိုင်ပါ + ဒေတာဘေ့စ် တန်ဖိုးပြောင်းလုပ်ဆောင်ချက် မရရှိနိုင်ပါ Client public key not received @@ -7313,7 +6322,7 @@ Do you want to overwrite it? Cannot decrypt message - မက်ဆေ့ချ်ကို ပြန်ဖြည်၍မရနိုင်ပါ + မက်ဆေ့ချ်ကို ပြန်ဖြည်၍မရပါ Action cancelled or denied @@ -7577,7 +6586,7 @@ Do you want to overwrite it? Successfully removed attachment %1 from entry %2. - ထည့်သွင်းပြီး %2 မှ ပူးတွဲဖိုင် %1 အား အောင်မြင်စွာဖယ်ရှားပြီး + ဖြည့်သွင်းချက် %2 မှ ပူးတွဲဖိုင် %1 အား အောင်မြင်စွာဖယ်ရှားပြီး Copy the given attribute to the clipboard. Defaults to "password" if not specified. @@ -7594,7 +6603,7 @@ Do you want to overwrite it? Copy an entry's attribute to the clipboard. - ဖြည့်သွင်းချက်တစ်ခု၏ ပင်ကိုအချက်အလက်ကို clipboard သို့ ကူးပါ။ + ဖြည့်သွင်းချက်တစ်ခု၏ လက္ခဏာရပ်ကို clipboard သို့ ကူးပါ။ Path of the entry to clip. @@ -7631,15 +6640,15 @@ Do you want to overwrite it? ERROR: attribute %1 is ambiguous, it matches %2. - ပြဿနာ - ပင်ကိုအချက်အလက် %1 သည် ဒွိဟဖြစ်နေသည်၊ ၎င်းသည် %2 နှင့် တူနေသည်။ + ပြဿနာ - လက္ခဏာရပ် %1 သည် ဒွိဟဖြစ်နေသည်၊ ၎င်းသည် %2 နှင့် တူနေသည်။ Attribute "%1" not found. - ပင်ကိုအချက်အလက် "%1" ကို ရှာမတွေ့ပါ။ + လက္ခဏာရပ် "%1" ကို ရှာမတွေ့ပါ။ Entry's "%1" attribute copied to the clipboard! - ဖြည့်သွင်းချက်၏ "%1" ပင်ကိုအချက်အလက်ကို clipboard သို့ ကူးထားသည်။ + ဖြည့်သွင်းချက်၏ "%1" လက္ခဏာရပ်ကို clipboard သို့ ကူးထားသည်။ Clearing the clipboard in %1 second(s)... @@ -7671,7 +6680,7 @@ Do you want to overwrite it? Deactivate password key for the database. - ဒေတာဘေ့စ်အတွက် စကားဝှက်၏ စကားဝှက်သော့ကို သက်ဝင်လုပ်ဆောင်မှုရပ်ပါ။ + ဒေတာဘေ့စ်အတွက် စကားဝှက်သော့ကို သက်ဝင်လုပ်ဆောင်မှုရပ်ပါ။ Yubikey slot and optional serial used to access the database (e.g., 1:7370001). @@ -7689,10 +6698,6 @@ Do you want to overwrite it? Too many arguments provided. ပေးထားသော တန်ဖိုးများ များလွန်းသည်။ - - Path of the database. - ဒေတာဘေ့စ် လမ်းကြောင်း။ - Target decryption time in MS for the database. ဒေတာဘေ့စ်အတွက် MS ရှိ မှန်းထားသော ပြန်ဖြည်ရန်ကြာချိန်။ @@ -7713,6 +6718,10 @@ Do you want to overwrite it? Create a new database. ဒေတာဘေ့စ်အသစ်တစ်ခု ဖန်တီးပါ။ + + Path of the database. + ဒေတာဘေ့စ် လမ်းကြောင်း။ + Invalid decryption time %1. မမှန်ကန်သော ပြန်ဖြည်ရန်ကြာချိန် %1။ @@ -7739,7 +6748,7 @@ Do you want to overwrite it? Setting %1 rounds for key derivation function. - စကားဝှက်သော့ တစ်ဆင့်ရယူခြင်း လုပ်ဆောင်ချက်အတွက် အလှည့် %1 ခု သတ်မှတ်နေသည်။ + စကားဝှက်သော့ တစ်ဆင့်ရယူခြင်း လုပ်ဆောင်ချက်အတွက် အလှည့် %1 ကြိမ် သတ်မှတ်နေသည်။ error while setting database key derivation settings. @@ -7757,161 +6766,9 @@ Do you want to overwrite it? Successfully created new database. ဒေတာဘေ့စ်အသစ် အောင်မြင်စွာ ဖန်တီးပြီးပါပြီ။ - - Unset the password for the database. - ဒေတာဘေ့စ်အတွက် စကားဝှက်ကို မသတ်မှတ်ပါ။ - - - Unset the key file for the database. - ဒေတာဘေ့စ်အတွက် သော့ဖိုင်ကို သတ်မှတ်မထားပါ။ - - - Edit a database. - ဒေတာဘေ့စကို တည်းဖြတ်ပါ။ - - - Cannot use %1 and %2 at the same time. - %1 နှင့် %2 ကို တစ်ချိန်တည်းတွင် အသုံးမပြုနိုင်ပါ။ - - - Could not change the database key. - ဒေတာဘေ့စ်သော့ကို မပြောင်းနိုင်ပါ။ - - - Database was not modified. - ဒေတာဘေ့စ်ကို မွမ်းမံမထားပါ။ - - - Writing the database failed: %1 - ဒေတာဘေ့စ်ကို ရေးသားခြင်း မအောင်မြင်ပါ - %1 - - - Successfully edited the database. - ဒေတာဘေ့စ်ကို အောင်မြင်စွာ တည်းဖြတ်ခဲ့သည်။ - - - Cannot remove password: The database does not have a password. - စကားဝှက်ကို ဖယ်ရှား၍မရပါ - ဒေတာဘေ့စ်တွင် စကားဝှက်တစ်ခု မရှိပါ။ - - - Cannot remove file key: The database does not have a file key. - ဖိုင်သော့ကို ဖယ်ရှား၍မရပါ - ဒေတာဘေ့စ်တွင် ဖိုင်သော့တစ်ခု မရှိပါ။ - - - Loading the new key file failed: %1 - သော့ဖိုင်အသစ်ကို တင်ခြင်း မအောင်မြင်ပါ - %1 - - - Found unexpected Key type %1 - မမျှော်လင့်ထားသော သော့အမျိုးအစား %1 ကို တွေ့ရှိခဲ့သည် - - - Cannot remove all the keys from a database. - ဒေတာဘေ့စ်တစ်ခုမှ သော့အားလုံးကို မဖယ်ရှားနိုင်ပါ။ - - - Show a database's information. - ဒေတာဘေ့စ်၏ အချက်အလက်ကို ပြပါ။ - - - UUID: - UUID - - - - Name: - အမည် - - - - Description: - ဖော်ပြချက် - - - - Cipher: - ကုဒ်ရေးသားမှု - - - - KDF: - KDF - - - - Recycle bin is enabled. - အမှိုက်ပုံးကို ဖွင့်ထားသည်။ - - - Recycle bin is not enabled. - အမှိုက်ပုံးကို ဖွင့်မထားပါ။ - - - Location - တည်နေရာ - - - Database created - ဒေတာဘေ့စ် ဖန်တီးပြီးပါပြီ - - - Last saved - နောက်ဆုံးသိမ်းခဲ့ချိန် - - - Unsaved changes - သိမ်းမထားသော အပြောင်းအလဲများ - - - yes - ဟုတ် - - - no - မဟုတ် - - - Number of groups - အုပ်စု အရေအတွက် - - - Number of entries - ဖြည့်သွင်းချက် အရေအတွက် - - - Number of expired entries - သက်တမ်းကုန်သွားသော ဖြည့်သွင်းချက် အရေအတွက် - - - Unique passwords - သီးသန့် စကားဝှက်များ - - - Non-unique passwords - သီးသန့်မဟုတ်သော စကားဝှက်များ - - - Maximum password reuse - အများဆုံး စကားဝှက်ပြန်သုံးမှု - - - Number of short passwords - စကားဝှက်အတို အရေအတွက် - - - Number of weak passwords - အားနည်းသော စကားဝှက် အရေအတွက် - - - Entries excluded from reports - အစီရင်ခံစာများမှ ဖယ်ထားသော ဖြည့်သွင်းချက်များ - - - Average password length - ပျမ်းမျှ စကားဝှက်အရှည် - - - %1 characters - စာလုံး %1 လုံး - Word count for the diceware passphrase. - ခိုင်မာသော လျှို့ဝှက်စာစုအတွက် စာလုံးအရေအတွက်။ + လုံခြုံသောစကားစု အတွက် စာလုံးအရေအတွက်။ count @@ -7921,17 +6778,21 @@ Do you want to overwrite it? Wordlist for the diceware generator. [Default: EFF English] - ခိုင်မာသော လျှို့ဝှက်စာစုထုတ်ကိရိယာအတွက် စကားလုံးစာရင်း။ + လုံခြုံသောစကားစု ထုတ်ပေးသည့်အရာ အတွက် စကားလုံးစာရင်း။ [ပုံသေမူလ - EFF English] Generate a new random diceware passphrase. - ခိုင်မာသော လျှို့ဝှက်စာစုအသစ်ကို အလျင်းသင့်သလို ထုတ်လုပ်ပါ။ + လုံခြုံသောစကားစုအသစ်ကို အလျင်းသင့်သလို ထုတ်လုပ်ပါ။ Invalid word count %1 မမှန်ကန်သော စာလုံးအရေအတွက် %1 + + The word list is too small (< 1000 items) + စကားလုံးစာရင်း သေးလွန်းသည် (ပါဝင်သည့်အရာ < 1000) + Title for the entry. ဖြည့်သွင်းချက် ခေါင်းစဉ်။ @@ -7956,6 +6817,10 @@ Do you want to overwrite it? Enter new password for entry: ဖြည့်သွင်းချက်အတွက် စကားဝှက်အသစ် ထည့်ပါ - + + Writing the database failed: %1 + ဒေတာဘေ့စ်ကို ရေးသားခြင်း မအောင်မြင်ပါ - %1 + Successfully edited entry %1. ဖြည့်သွင်းချက် %1 ကို အောင်မြင်စွာ တည်းဖြတ်ပြီးပါပြီ။ @@ -8076,9 +6941,13 @@ Do you want to overwrite it? Exit interactive mode. ပြန်လှန်တုံ့ပြန်သောမုဒ်မှ ထွက်ပါ။ + + Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. + ပို့နေစဉ် သုံးရမည့် ဖောမက်။ ရရှိနိုင်သော ရွေးချယ်မှုများမှာ 'xml' သို့မဟုတ် 'csv' ဖြစ်သည်။ 'xml' သည် ပုံသေဖြစ်သည်။ + Exports the content of a database to standard output in the specified format. - ဒေတာဘေ့စ်ပါ အကြောင်းအရာကို သတ်မှတ်ဖော်ပြထားသော ဖာမက်ဖြင့် စံရလဒ်အဖြစ် ပို့သည်။ + ဒေတာဘေ့စ်ပါ အကြောင်းအရာကို သတ်မှတ်ဖော်ပြထားသော ဖောမက်ဖြင့် စံရလဒ်အဖြစ် ပို့သည်။ Unable to export database to XML: %1 @@ -8086,7 +6955,7 @@ Do you want to overwrite it? Unsupported format %1 - မပံ့ပိုးသော ဖောမက် %1 + ပံ့ပိုးမထားသော ဖောမက် %1 Length of the generated password @@ -8146,7 +7015,7 @@ Do you want to overwrite it? Invalid password generator after applying all options - ရွေးချယ်မှုအားလုံးကို အသုံးပြုပြီးနောက် မမှန်ကန်သော စကားဝှက်ထုတ်ကိရိယာ + ရွေးချယ်မှုအားလုံးကို အသုံးပြုပြီးနောက် မမှန်ကန်သော စကားဝှက်ထုတ်လုပ်ကိရိယာ Display command help. @@ -8176,9 +7045,109 @@ Do you want to overwrite it? Successfully imported database. ဒေတာဘေ့စ် အောင်မြင်စွာ ထည့်သွင်းပြီးပါပြီ။ + + Show a database's information. + ဒေတာဘေ့စ်၏ အချက်အလက်ကို ပြပါ။ + + + UUID: + UUID - + + + Name: + အမည် - + + + Description: + ဖော်ပြချက် - + + + Cipher: + ကုဒ်ရေးသားမှု - + + + KDF: + KDF - + + + Recycle bin is enabled. + အမှိုက်ပုံးကို ဖွင့်ထားသည်။ + + + Recycle bin is not enabled. + အမှိုက်ပုံးကို ဖွင့်မထားပါ။ + + + Location + တည်နေရာ + + + Database created + ဒေတာဘေ့စ် ဖန်တီးပြီးပါပြီ + + + Last saved + နောက်ဆုံးသိမ်းခဲ့ချိန် + + + Unsaved changes + သိမ်းမထားသော အပြောင်းအလဲများ + + + yes + ဟုတ် + + + no + မဟုတ် + + + Number of groups + အုပ်စု အရေအတွက် + + + Number of entries + ဖြည့်သွင်းချက် အရေအတွက် + + + Number of expired entries + သက်တမ်းကုန်သွားသော ဖြည့်သွင်းချက် အရေအတွက် + + + Unique passwords + သီးသန့် စကားဝှက်များ + + + Non-unique passwords + သီးသန့်မဟုတ်သော စကားဝှက်များ + + + Maximum password reuse + အများဆုံး စကားဝှက်ပြန်သုံးမှု + + + Number of short passwords + စကားဝှက်အတို အရေအတွက် + + + Number of weak passwords + အားနည်းသော စကားဝှက် အရေအတွက် + + + Entries excluded from reports + အစီရင်ခံစာများမှ ဖယ်ထားသော ဖြည့်သွင်းချက်များ + + + Average password length + ပျမ်းမျှ စကားဝှက်အရှည် + + + %1 characters + စာလုံး %1 လုံး + Unknown command %1 - အမည်မသိ ညွှန်ကြားချက် %1 + အမည်မသိသော ညွှန်ကြားချက် %1 @@ -8208,7 +7177,7 @@ Available commands: Flattens the output to single lines. - ရလဒ်ကို လိုင်းတစ်ခုစီအဖြစ် ပြားစေသည်။ + ရလဒ်ကို စာကြောင်းတစ်ခုစီအဖြစ် ပြားစေသည်။ List database entries. @@ -8228,7 +7197,8 @@ Available commands: Key file of the database to merge from. - ပေါင်းစပ်ရမည့် ဒေတာဘေ့စ်၏ စကားဝှက်သော့ဖိုင်။ + ပေါင်းစပ်ရမည့် ဒေတာဘေ့စ်၏ စကားဝှက်သော့ဖိုင်။ + Deactivate password key for the database to merge from. @@ -8338,7 +7308,7 @@ Available commands: Search term. - အခေါ်အဝေါ် ရှာဖွေပါ။ + စကားလုံး ရှာဖွေပါ။ Show the entry's current TOTP. @@ -8346,11 +7316,7 @@ Available commands: Show the protected attributes in clear text. - ကာကွယ်ထားသော ပင်ကိုအချက်အလက်များကို ကုဒ်ပြောင်းမထားသော စာသားဖြင့် ပြပါ။ - - - Show all the attributes of the entry. - ထည့်သွင်းမှု၏ အရည်အချင်းအားလုံးကို ပြပါ။ + ကာကွယ်ထားသော လက္ခဏာရပ်များကို ကုဒ်ပြောင်းမထားသော စာသားဖြင့် ပြပါ။ Show the attachments of the entry. @@ -8358,11 +7324,11 @@ 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 - ပင်ကိုအချက်အလက် + လက္ခဏာရပ် Show an entry's information. @@ -8374,7 +7340,7 @@ Available commands: ERROR: unknown attribute %1. - ပြဿနာ - အမည်မသိ ပင်ကိုအချက်အလက် %1။ + ပြဿနာ - အမည်မသိ လက္ခဏာရပ် %1။ No attachments present. @@ -8411,6 +7377,7 @@ stop supporting in the future. Please consider generating a new key file. သတိပေးချက် - သင်သည် KeePassXC မှ အနာဂတ်တွင် ပံ့ပိုးခြင်း ရပ်တန့်နိုင်သည့် စကားဝှက်သော့ဖိုင် ဖောမက်ဟောင်းကို အသုံးပြုနေသည်။ + ကျေးဇူးပြု၍ စကားဝှက်သော့ဖိုင်သစ်ကို ထုတ်လုပ်ရန် စဉ်းစားပေးပါ။‌ @@ -8421,10 +7388,6 @@ Please consider generating a new key file. Invalid YubiKey serial %1 မမှန်ကန်သော YubiKey အစဉ် %1 - - Please present or touch your YubiKey to continue. - ကျေးဇူးပြု၍ ဆက်လုပ်ရန် သင့် YubiKey ကို တင်ပြပါ သို့မဟုတ် နှိပ်ပါ - Enter password to encrypt database (optional): ဒေတာဘေ့စ်ကို ကုဒ်ဖြင့်ပြောင်းရန် စကားဝှက် ရိုက်ထည့်ပါ (ချန်ထားနိုင်သည်) - @@ -8435,7 +7398,7 @@ Please consider generating a new key file. Repeat password: - စကားဝှက် ထပ်ရေးပါ - + စကားဝှက် ပြန်ရေးပါ - Error: Passwords do not match. @@ -8541,7 +7504,7 @@ Please consider generating a new key file. Debugging mode is disabled. - ပြဿနာဖြေရှင်းသည့်မုဒ်ကို ပယ်ဖျက်ထားသည်။ + ပြဿနာဖြေရှင်းသည့်မုဒ်ကို ပိတ်ထားသည်။ Debugging mode is enabled. @@ -8589,27 +7552,27 @@ CPU တည်ဆောက်ပုံ - %2 over %1 year(s) - + %1 နှစ်ကျော် about %1 month(s) - + %1 လခန့် %1 week(s) - + %1 အပတ်ပေါင်း %1 day(s) - + %1 ရက်ပေါင်း %1 hour(s) - + %1 နာရီပေါင်း %1 minute(s) - + %1 မိနစ်ပေါင်း Botan library must be at least %1, found %2.%3.%4 @@ -8621,11 +7584,11 @@ CPU တည်ဆောက်ပုံ - %2 AES (%1 rounds) - AES (အလှည့် %1 ခု) + AES (အလှည့် %1 ကြိမ်) Argon2%1 (%2 rounds, %3 KB) - Argon2%1 (အလှည့် %2 ခု၊ %3 KB) + Argon2%1 (အလှည့် %2 ကြိမ်၊ %3 KB) SymmetricCipher::init: Invalid cipher mode. @@ -8661,15 +7624,27 @@ CPU တည်ဆောက်ပုံ - %2 file empty - ဖိုင် လွတ်နေသည် + ဖိုင်အလွတ် + + + malformed string + စံမမှီသော စာကြောင်း + + + missing closing quote + အပိတ်အမှတ်အသား လိုနေသည် + + + %1: (row, col) %2,%3 + %1 - (အတန်း၊ ကော်လံ) %2,%3 AES 256-bit - AES 256-bit + AES ၂၅၆ ဘစ် Twofish 256-bit - Twofish 256 ဘစ် + Twofish ၂၅၆ ဘစ် ChaCha20 256-bit @@ -8693,11 +7668,11 @@ CPU တည်ဆောက်ပုံ - %2 Existing single-instance lock file is invalid. Launching new instance. - ရှိပြီးသား တစ်နေရာသုံး လော့ချဖိုင်သည် မမှန်ကန်ပါ။ အသစ်တစ်ခုကို မိတ်ဆက်နေပါသည်။ + ရှိပြီးသား တစ်နေရာသုံး လော့ခ်ဖိုင်သည် မမှန်ကန်ပါ။ အသစ်တစ်ခုကို မိတ်ဆက်နေပါသည်။ The lock file could not be created. Single-instance mode disabled. - လော့ခ်ဖိုင်ကို ဖန်တီး၍မရပါ။ တစ်နေရာသုံး မုဒ်ကို ပယ်ဖျက်ထားသည်။ + လော့ခ်ဖိုင်ကို ဖန်တီး၍မရပါ။ တစ်နေရာသုံး မုဒ်ကို ပိတ်ထားသည်။ Clearing the clipboard in %1 second(s)… @@ -8823,7 +7798,7 @@ CPU တည်ဆောက်ပုံ - %2 path to a custom config file - စိတ်ကြိုက် ချိန်ညှိထားသော ဖိုင်၏ လမ်းကြောင်း + စိတ်ကြိုက် ချိန်ညှိဖိုင်၏ လမ်းကြောင်း path to a custom local config file @@ -8841,6 +7816,14 @@ CPU တည်ဆောက်ပုံ - %2 read password of the database from stdin စံထည့်သွင်းမှုမှ ဒေတာဘေ့စ်၏ စကားဝှက်ကို ဖတ်ပါ + + allow app screen recordering and screenshots + အက်ပ်စခရင် မှတ်တမ်းတင်ခြင်းနှင့် စခရင်ရှော့(တ်)များကို ခွင့်ပြုပါ + + + Locked databases. + လော့ချထားသော ဒေတာဘေ့စ်များ။ + Database failed to lock. ဒေတာဘေ့စ်ကို လော့ချ၍မရပါ။ @@ -8849,13 +7832,9 @@ CPU တည်ဆောက်ပုံ - %2 Another instance of KeePassXC is already running. KeePassXC ကို အခြားတစ်နေရာတွင် လည်ပတ်နေပါသည်။ - - KeePassXC is not running. No open database to lock - KeePassXC သည် အလုပ်မလုပ်ပါ။ လော့ခ်ဖွင့်ရန် ဒေတာဘေ့စ်မရှိပါ - Fatal error while testing the cryptographic functions. - ကုဒ်ထည့်ထားသော လုပ်ဆောင်ချက်များကို စစ်ဆေးစဉ် အရေးကြီးပြဿနာ ဖြစ်ခဲ့သည်။ + ကုဒ်ထည့်ထားသော လုပ်ဆောင်ချက်များကို စမ်းသပ်စဉ် အရေးကြီးပြဿနာ ဖြစ်ခဲ့သည်။ KeePassXC - Error @@ -8896,306 +7875,77 @@ CPU တည်ဆောက်ပုံ - %2 KDF မမှန်ပါ - Access to all entries is denied - + Please present or touch your YubiKey to continue. + ကျေးဇူးပြု၍ ဆက်လုပ်ရန် သင့် YubiKey ကို တင်ပြပါ သို့မဟုတ် နှိပ်ပါ - allow screenshots and app recording (Windows/macOS) - + Show all the attributes of the entry. + ထည့်သွင်းမှု၏ အရည်အချင်းအားလုံးကို ပြပါ။ + + + Edit a database. + ဒေတာဘေ့စကို တည်းဖြတ်ပါ။ + + + Could not change the database key. + ဒေတာဘေ့စ်သော့ကို မပြောင်းနိုင်ပါ။ + + + Database was not modified. + ဒေတာဘေ့စ်ကို မွမ်းမံမထားပါ။ + + + Successfully edited the database. + ဒေတာဘေ့စ်ကို အောင်မြင်စွာ တည်းဖြတ်ခဲ့သည်။ + + + Loading the new key file failed: %1 + သော့ဖိုင်အသစ်ကို တင်ခြင်း မအောင်မြင်ပါ - %1 + + + Unset the password for the database. + ဒေတာဘေ့စ်အတွက် စကားဝှက်ကို မသတ်မှတ်ပါ။ + + + Unset the key file for the database. + ဒေတာဘေ့စ်အတွက် သော့ဖိုင်ကို သတ်မှတ်မထားပါ။ + + + Cannot use %1 and %2 at the same time. + %1 နှင့် %2 ကို တစ်ချိန်တည်းတွင် အသုံးမပြုနိုင်ပါ။ + + + Cannot remove all the keys from a database. + ဒေတာဘေ့စ်တစ်ခုမှ သော့အားလုံးကို မဖယ်ရှားနိုင်ပါ။ + + + Cannot remove password: The database does not have a password. + စကားဝှက်ကို ဖယ်ရှား၍မရပါ - ဒေတာဘေ့စ်တွင် စကားဝှက်တစ်ခု မရှိပါ။ + + + Cannot remove file key: The database does not have a file key. + ဖိုင်သော့ကို ဖယ်ရှား၍မရပါ - ဒေတာဘေ့စ်တွင် ဖိုင်သော့တစ်ခု မရှိပါ။ + + + Found unexpected Key type %1 + မမျှော်လင့်ထားသော သော့အမျိုးအစား %1 ကို တွေ့ရှိခဲ့သည် Set the key file for the database. -This option is deprecated, use --set-key-file instead. - +This options is deprecated, use --set-key-file instead. + ဒေတာဘေ့စ်အတွက် သော့ဖိုင်ကို သတ်မှတ်ပါ။ +ဤရွေးချယ်မှုများကို ရပ်တန့်ထားပြီး၊ ၎င်းအစား --set-key-file ကို အသုံးပြုပါ။ - Databases have been locked. - - - - Attestation not supported - - - - Credential is excluded - - - - Passkeys request canceled - - - - Invalid user verification - - - - Empty public key - - - - Invalid URL provided - - - - Passkeys - - - - AES initialization failed - - - - AES encrypt failed - - - - Failed to store in Linux Keyring - - - - Polkit returned an error: %1 - - - - Could not locate key in keyring - - - - Could not read key in keyring - - - - AES decrypt failed - - - - No Polkit authentication agent was available - - - - Polkit authorization failed - - - - No Quick Unlock provider is available - - - - Failed to init KeePassXC crypto. - KeePassXC crypto စတင်ရန် မအောင်မြင်ခဲ့ပါ - - - Failed to encrypt key data. - အချက်အလက်များကို ကုဒ်ဖြင့်ပြောင်းရန် မအောင်မြင်ခဲ့ပါ - - - Failed to get Windows Hello credential. - Window Hello အထောက်အထားရရန် မအောင်မြင်ခဲ့ပါ - - - Failed to decrypt key data. - အချက်အလက်များကို ကုဒ်ပြန်ဖြည်ခြင်း မအောင်မြင်ခဲ့ပါ - - - Origin is empty or not allowed - - - - Effective domain is not a valid domain - - - - Origin and RP ID do not match - - - - No supported algorithms were provided - - - - Wait for timer to expire - - - - Challenge is shorter than required minimum length - - - - user.id does not match the required length - - - - Favorite - Tag for favorite entries - - - - File does not exist. - - - - Cannot open file: %1 - - - - Cannot parse file: %1 at position %2 - - - - Failed to decrypt json file: %1 - - - - Invalid encKeyValidation field - - - - Invalid cipher list within encKeyValidation field - - - - Wrong password - - - - Invalid encrypted data field - - - - Invalid cipher list within encrypted data field - - - - Cannot initialize cipher - - - - Cannot decrypt data - - - - Bitwarden Import - - - - Archived - Tag for archived entries - - - - Invalid 1PUX file format: Not a valid ZIP file. - - - - Invalid 1PUX file format: Missing export.data - - - - 1Password Import - - - - Enter Shortcut - - - - Action - - - - Shortcuts - - - - Unknown passkeys error - - - - Invalid KDF iterations, cannot decrypt json file - - - - Unsupported format, ensure your Bitwarden export is password-protected - - - - Only PBKDF and Argon2 are supported, cannot decrypt json file - - - - Reset Shortcuts - - - - Double click an action to change its shortcut - - - - Filter... - - - - Shortcut Conflict - - - - Shortcut %1 conflicts with '%2'. Overwrite shortcut? - - - - Cannot generate valid passphrases because the wordlist is too short - - - - Encrypted files are not supported. - - - - Proton Pass Import - - - - Delete plugin data? - ချိတ်ဆက်ပရိုဂရမ် အချက်အလက်ကို ဖျက်မလား။ - - - Delete plugin data from Entry(s)? - - - - Passkey - - - - Format to use when exporting. Available choices are 'xml', 'csv' or 'html'. Defaults to 'xml'. - - - - start minimized to the system tray - - - - malformed string, possible unescaped delimiter - - - - missing closing delimiter - - - - %1, row: %2, column: %3 - - - - Tags - ပူးတွဲမှုများ + KeePassXC is not running. No open database to lock + KeePassXC သည် အလုပ်မလုပ်ပါ။ လော့ခ်ဖွင့်ရန် ဒေတာဘေ့စ်မရှိပါ QtIOCompressor Internal zlib error when compressing: - ချုံ့နေစဉ် စက်တွင်း zlib ပြဿနာ ဖြစ်ပေါ်ခဲ့သည် - + ဖိုင်ချုံ့နေစဉ် စက်တွင်း zlib ပြဿနာ ဖြစ်ပေါ်ခဲ့သည် - Error writing to underlying device: @@ -9225,39 +7975,20 @@ This option is deprecated, use --set-key-file instead. စက်တွင်း zlib ပြဿနာ - - - RemoteHandler - - Command `%1` did not finish in time. Process was killed. - - - - Failed to upload merged database. Command `%1` did not finish in time. Process was killed. - - - - Invalid download parameters provided. - - - - Command `%1` failed to download database. - - - - Invalid database pointer or upload parameters provided. - - - - Command `%1` exited with status code: %2 - - - - Failed to upload merged database. Command `%1` exited with status code: %2 - - - ReportsWidgetBrowserStatistics + + Exclude expired entries from the report + သက်တမ်းကုန်ပြီးသော ဖြည့်သွင်းချက်များကို အစီရင်ခံစာမှ ဖယ်ပါ + + + Show only entries which have URL set + URL set ရှိသော ထည့်သွင်းမှုများသာပြသမည် + + + Show only entries which have browser settings in custom data + ဒေတာပြင်ဆင်မှုတွင် ‌‌ဘရောင်ဇာပြင်ဆင်မှုများရှိသော ထည့်သွင်းမှုများသာပြသမည် + Double-click entries to edit. ထည့်သွင်းမှုများကိုပြင်ဆင်ရန် ကလစ် ၂ ချက်နှိပ်ပါ @@ -9296,7 +8027,7 @@ This option is deprecated, use --set-key-file instead. No entries with a URL, or none has browser extension settings saved. - URL ပါသောထည့်သွင်းမှုများမရှိပါ၊ သို့မဟုတ် ဘရောင်ဇာအပိုလုပ်ဆောင်မှုပြင်ဆင်ချက်များ သိမ်းဆည်ထားခြင်းမရှိပါ း + URL ပါသောထည့်သွင်းမှုများမရှိပါ၊ သို့မဟုတ် ဘရောင်ဇာအပိုလုပ်ဆောင်မှုပြင်ဆင်ချက်များ သိမ်းဆည်းထားခြင်းမပါရှိပါ Title @@ -9322,53 +8053,44 @@ This option is deprecated, use --set-key-file instead. Exclude from reports အစီရင်ခံစာများမှ ဖယ်ရန် - - Expire Entry(s)… - - - - Only show entries that have a URL - - - - Only show entries that have been explicitly allowed or denied - - - - Show expired entries - - - - (Expired) - - - - Delete plugin data from Entry(s)… - - ReportsWidgetHealthcheck - Show expired entries - + Exclude expired entries from the report + သက်တမ်းကုန်ပြီးသော ဖြည့်သွင်းချက်များကို အစီရင်ခံစာမှ ဖယ်ပါ - (Expired) - + Also show entries that have been excluded from reports + အစီရင်ခံစာများမှ ဖယ်ထားသော ဖြည့်သွင်းချက်များကိုပါ ပြသပါ Hover over reason to show additional details. Double-click entries to edit. ထပ်ဆောင်း အသေးစိတ်အချက်အလက်များကို ပြရန် အကြောင်းရင်းပေါ်တွင် ထောက်ပါ။ ဖြည့်သွင်းချက်များကို တည်းဖြတ်ရန် နှစ်ချက်နှိပ်ပါ။ + + Bad + Password quality + ဆိုး + Bad — password must be changed ဆိုးသည် — စကားဝှက် ပြောင်းရမည် + + Poor + Password quality + ညံ့ + Poor — password should be changed ညံ့သည် — စကားဝှက် ပြောင်းသင့်သည် + + Weak + Password quality + အားနည်း + Weak — consider changing the password အားနည်းသည် — စကားဝှက်ပြောင်းရန် စဉ်းစားပါ @@ -9417,14 +8139,6 @@ This option is deprecated, use --set-key-file instead. Exclude from reports အစီရင်ခံစာများမှ ဖယ်ရန် - - Expire Entry(s)… - - - - Show entries that have been excluded from reports - - ReportsWidgetHibp @@ -9520,77 +8234,6 @@ This option is deprecated, use --set-key-file instead. Exclude from reports အစီရင်ခံစာများမှ ဖယ်ရန် - - Expire Entry(s)… - - - - - ReportsWidgetPasskeys - - Export - ပို့ရန် - - - Import - ထည့်သွင်းရန် - - - List of entry URLs - URL ထည့်သွင်းမှုများစာရင်း - - - Title - ခေါင်းစဉ် - - - Path - လမ်းကြောင်း - - - Username - အသုံးပြုသူအမည် - - - URLs - URL များ - - - Edit Entry… - ဖြည့်သွင်းချက်ကို တည်းဖြတ်ပါ… - - - Delete Entry(s)… - ဖြည့်သွင်းချက်(များ)ကို ဖျက်ပါ… - - - Relying Party - - - - Show expired entries - - - - (Expired) - - - - Export Confirmation - ပို့ရန် အတည်ပြုချက် - - - The passkey file will be vulnerable to theft and unauthorized use, if left unsecured. Are you sure you want to continue? - - - - Please wait, list of entries with passkeys is being updated… - - - - No entries with passkeys. - - ReportsWidgetStatistics @@ -9688,7 +8331,7 @@ This option is deprecated, use --set-key-file instead. Recommended minimum password length is at least 8 characters. - အကြံပြုထားသော အနည်းဆုံး စကားဝှက်အရှည်မှာ အနည်းဆုံး စာလုံး 8 လုံး ဖြစ်သည်။ + အကြံပြုထားသော အနည်းဆုံး စကားဝှက်အရှည်မှာ အနည်းဆုံး စာလုံး ၈ လုံး ဖြစ်သည်။ Number of weak passwords @@ -9765,14 +8408,6 @@ This option is deprecated, use --set-key-file instead. No agent running, cannot list identities. လည်ပတ်နေသော အေးဂျင့် မရှိပါ၊ ကိုယ်ပိုင်အမှတ်သင်္ကေတများကို မဖော်ပြနိုင်ပါ။ - - Failed to remove all SSH identities from agent. - - - - All SSH identities removed from agent. - - SearchHelpWidget @@ -9790,7 +8425,7 @@ This option is deprecated, use --set-key-file instead. Modifiers - ပြုပြင်မွမ်းမံသူများ + အထူးပြုများ exclude term from results @@ -9839,10 +8474,6 @@ This option is deprecated, use --set-key-file instead. Search Help ရှာဖွေမှု အကူအညီ - - Save Search - ရှာဖွေမှုကိုသိမ်းဆည်းပါ - Search (%1)… Search placeholder text, %1 is the keyboard shortcut @@ -9856,6 +8487,10 @@ This option is deprecated, use --set-key-file instead. Limit search to selected group ရွေးချယ်ထားသော အုပ်စုတွင်သာ ကန့်သတ်ရှာဖွေပါ + + Save Search + ရှာဖွေမှုကိုသိမ်းဆည်းပါ + SettingsClientModel @@ -9917,10 +8552,34 @@ This option is deprecated, use --set-key-file instead. Confirm when passwords are retrieved by clients စကားဝှက်များကို လက်ခံစက်များက ပြန်လည်ရယူချိန်တွင် အတည်ပြုပါ + + <html><head/><body><p><span style=" + font-family:'-apple-system','BlinkMacSystemFont','Segoe UI','Helvetica','Arial','sans-serif','Apple Color + Emoji','Segoe UI Emoji'; font-size:14px; color:#24292e; background-color:#ffffff;">This setting does + not override disabling recycle bin prompts</span></p></body></html> + + <html><head/><body><p><span style=" + font-family:'-apple-system','BlinkMacSystemFont','Segoe UI','Helvetica','Arial','sans-serif','Apple Color + Emoji','Segoe UI Emoji'; font-size:14px; color:#24292e; background-color:#ffffff;">ဤဆက်တင်သည် +အမှိုက်ပုံး အသိပေးချက်များကို ပယ်ဖျက်ထားခြင်းအား အစားမထိုးပါ</span></p></body></html> + + Confirm when clients request entry deletion လက်ခံစက်များက ဖြည့်သွင်းချက်ကို ဖျက်ရန် တောင်းဆိုသောအခါ အတည်ပြုပါ + + <html><head/><body><p>This improves compatibility with certain applications + which search for password without unlocking the database first.</p><p>But enabling this may also + crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a + different value set in applications.)</p></body></html> + + <html><head/><body><p>ယင်းသည် ဒေတာဘေ့စ်ကို ဦးစွာ လော့မဖြည်ဘဲ စကားဝှက်ရှာဖွေသည့် + အချို့သော အက်ပလီကေးရှင်းများနှင့် ကိုက်ညီမှုကို ပိုမိုကောင်းမွန်စေသည်။</p><p>သို့သော် တိကျသော အချိန်ကန့်သတ်ချက်တစ်ခုအတွင်း ဒေတာဘေ့စ်ကို လော့မဖြည်နိုင်ပါက +၎င်းကို ဖွင့်ခြင်းသည် လက်ခံစက်ကိုလည်း ရပ်စေနိုင်သည်။ (၂၅ စက္ကန့် ဖြစ်လေ့ရှိသော်လည်း +အက်ပလီကေးရှင်းများတွင် သတ်မှတ်ထားသော ကွဲပြားသည့် တန်ဖိုးတစ်ခု ဖြစ်နိုင်သည်။)</p></body></html> + + Prompt to unlock database before searching မရှာဖွေမီ ဒေတာဘေ့စ်ကို လော့ဖြည်ရန် အသိပေးပါ @@ -9945,14 +8604,6 @@ This option is deprecated, use --set-key-file instead. Save current changes to activate the plugin and enable editing of this section. ချိတ်ဆက်ပရိုဂရမ်ကို သက်ဝင်လုပ်ဆောင်ရန်နှင့် ဤအပိုင်းကို တည်းဖြတ်နိုင်ရန် လတ်တလော အပြောင်းအလဲများကို သိမ်းပါ။ - - <html><head/><body><p>This setting does not override disabling recycle bin prompts </p></body></html> - - - - <html><head/><body><p>This improves compatibility with certain applications which search for password without unlocking the database first.</p><p>But enabling this may also crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a different value set in applications.) </p></body></html> - - SettingsWidgetKeeShare @@ -9962,7 +8613,7 @@ This option is deprecated, use --set-key-file instead. Allow KeeShare imports - KeeShare ထည့်သွင်းမှုများကို ခွင့်ပြုရန် + KeeShare ထည့်သွင်းမှုများကို ခွင့်ပြုပါ Allow import @@ -9970,7 +8621,7 @@ This option is deprecated, use --set-key-file instead. Allow KeeShare exports - KeeShare တင်ပို့မှုများကို ခွင့်ပြုရန် + KeeShare တင်ပို့မှုများကို ခွင့်ပြုပါ Allow export @@ -10043,7 +8694,7 @@ This option is deprecated, use --set-key-file instead. Conflicting export target path %1 in %2 - %2 ရှိ အငြင်းပွားစရာ တင်ပို့မှု၏ ပစ်မှတ် လမ်းကြောင်း %1 + %2 ရှိ အငြင်းပွားစရာ တင်ပို့မှု၏ လက်ခံမည့်နေရာ လမ်းကြောင်း %1 Export to %1 failed (%2) @@ -10060,14 +8711,6 @@ This option is deprecated, use --set-key-file instead. TagModel - - Clear Search - ရှာဖွေမှုကို ရှင်းလင်းပါ - - - All Entries - ထည့်သွင်းမှုများအားလုံး - Expired ကုန်ဆုံးသွားသည် @@ -10076,6 +8719,14 @@ This option is deprecated, use --set-key-file instead. Weak Passwords အားနည်းသောစကားဝှက်များ + + All Entries + ထည့်သွင်းမှုများအားလုံး + + + Clear Search + ရှာဖွေမှုကို ရှင်းလင်းပါ + TagView @@ -10192,7 +8843,7 @@ This option is deprecated, use --set-key-file instead. Invalid TOTP Secret - မမှန်ကန်သော လျှို့ဝှက် TOTP + မမှန်ကန်သော TOTP လျှို့ဝှက်ချက် You have entered an invalid secret key. The key must be in Base32 format. @@ -10253,6 +8904,26 @@ Example: JBSWY3DPEHPK3PXP Start storing your passwords securely in a KeePassXC database သင့်စကားဝှက်များကို KeePassXC ဒေတာဘေ့စ်တွင် လုံခြုံစွာ စတင်သိမ်းဆည်းပါ + + Create new database + ဒေတာဘေ့စ်အသစ် ဖန်တီးပါ + + + Open existing database + ရှိပြီးသား ဒေတာဘေ့စ်ကို ဖွင့်ပါ + + + Import from KeePass 1 + KeePass 1 မှ ထည့်သွင်းပါ + + + Import from 1Password + 1Password မှ ထည့်သွင်းပါ + + + Import from CSV + CSV မှ ထည့်သွင်းပါ + Recent databases မကြာသေးမီက ဒေတာဘေ့စ်များ @@ -10265,18 +8936,6 @@ Example: JBSWY3DPEHPK3PXP Welcome to KeePassXC %1 KeePassXC %1 မှ ကြိုဆိုပါသည် - - Create Database - - - - Open Database - - - - Import File - - WinUtils @@ -10293,30 +8952,61 @@ Example: JBSWY3DPEHPK3PXP ကမ္ဘာသုံး ရှော့(တ်)ကတ်ကို စာရင်းသွင်း၍မရပါ + + WindowsHello + + Failed to init KeePassXC crypto. + KeePassXC crypto စတင်ရန် မအောင်မြင်ခဲ့ပါ + + + Failed to encrypt key data. + အချက်အလက်များကို ကုဒ်ဖြင့်ပြောင်းရန် မအောင်မြင်ခဲ့ပါ + + + Failed to get Windows Hello credential. + Window Hello အထောက်အထားရရန် မအောင်မြင်ခဲ့ပါ + + + Failed to decrypt key data. + အချက်အလက်များကို ကုဒ်ပြန်ဖြည်ခြင်း မအောင်မြင်ခဲ့ပါ + + YubiKey + + %1 No interface, slot %2 + %1 အသုံးပြုသူမြင်ရမည့်ပုံစံ မရှိပါ၊ အပေါက် %2 + General: ယေဘုယျ - Could not find interface for hardware key with serial number %1. Please connect it to continue. - နံပါတ်စဉ် %1 ရှိသော ဟာ့ဝဲ စကားဝှက်သော့အတွက် အသုံးပြုသူမြင်ရမည့်ပုံစံ ရှာမတွေ့ပါ။ ကျေးဇူးပြု၍ ရှေ့ဆက်ရန် ၎င်းကို ချိတ်ဆက်ပါ။ + နံပါတ်စဉ် %1 ရှိသော ဟာ့ဒ်ဝဲ စကားဝှက်သော့အတွက် အသုံးပြုသူမြင်ရမည့်ပုံစံ ရှာမတွေ့ပါ။ ကျေးဇူးပြု၍ ရှေ့ဆက်ရန် ၎င်းကို ချိတ်ဆက်ပါ။ YubiKeyEditWidget + + Refresh hardware tokens + ဟာ့ဒ်ဝဲ တိုကင်များကို ပြန်လည်လန်းဆန်းရန် + + + Refresh + ပြန်လည်လန်းဆန်းရန် + Hardware key slot selection - ဟာ့ဝဲကီးအပေါက် ရွေးချယ်မှု + ဟာ့ဒ်ဝဲကီးအပေါက် ရွေးချယ်မှု Could not find any hardware keys! - ဟာ့ဝဲ စကားဝှက်သော့ ရှာမတွေ့ပါ။ + ဟာ့ဒ်ဝဲ စကားဝှက်သော့ ရှာမတွေ့ပါ။ Selected hardware key slot does not support challenge-response! - ရွေးချယ်ထားသော ဟာ့ဝဲ စကားဝှက်သော့အပေါက်သည် တုံ့ပြန်ချက်စိန်ခေါ်မှုကို မပံ့ပိုးပါ။ + ရွေးချယ်ထားသော ဟာ့ဒ်ဝဲ စကားဝှက်သော့အပေါက်သည် တုံ့ပြန်ချက်စိန်ခေါ်မှုကို မပံ့ပိုးပါ။ Challenge-Response @@ -10338,64 +9028,56 @@ Example: JBSWY3DPEHPK3PXP Challenge-Response set, click to change or remove တုံ့ပြန်ချက်စိန်ခေါ်မှု သတ်မှတ်ထားသည်၊ ပြောင်းလဲရန် သို့မဟုတ် ဖယ်ရှားရန် နှိပ်ပါ + + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + <p>သင့်တွင် <a href="https://www.yubico.com/">YubiKey</a> သို့မဟုတ် <a href="https://onlykey.io">OnlyKey</a> ရှိပါက ၎င်းကို ထပ်တိုးလုံခြုံရေးအတွက် အသုံးပြုနိုင်သည်။</p><p>ထိုစကားဝှက်သော့သည် ၎င်း၏အပေါက်များမှ တစ်ခုကို <a href="https://www.yubico.com/products/services-software/challenge-response/">HMAC-SHA1 တုံ့ပြန်ချက်စိန်ခေါ်မှု</a>အဖြစ် ပရိုဂရမ်ရေးသားရန် လိုအပ်သည်။</p> + Detecting hardware keys… - ဟာ့ဝဲ စကားဝှက်သော့များကို ရှာနေသည်… + ဟာ့ဒ်ဝဲ စကားဝှက်သော့များကို ရှာနေသည်… No hardware keys detected - ဟာ့ဝဲ စကားဝှက်သော့များ ရှာမတွေ့ပါ + ဟာ့ဒ်ဝဲ စကားဝှက်သော့များ ရှာမတွေ့ပါ + + + YubiKeyInterface - Refresh hardware keys - - - - <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed with <a href="https://keepassxc.org/docs/#faq-yubikey-howto">Challenge-Response</a>.</p> - - - - Hardware keys found, but no slots are configured - + %1 Invalid slot specified - %2 + %1 မမှန်ကန်သော အပေါက်ကို ဖော်ပြထားသည် - %2 YubiKeyInterfacePCSC + + (PCSC) %1 [%2] Challenge-Response - Slot %3 + (PCSC) %1 [%2] တုံ့ပြန်ချက်စိန်ခေါ်မှု - အပေါက် %3 + The YubiKey PCSC interface has not been initialized. YubiKey PCSC အသုံးပြုသူမြင်ရမည့်ပုံစံကို မစတင်ရသေးပါ။ + + Hardware key is currently in use. + ဟာ့ဒ်ဝဲ စကားဝှက်သော့ကို လက်ရှိတွင် အသုံးပြုနေသည်။ + Could not find or access hardware key with serial number %1. Please present it to continue. - နံပါတ်စဉ် %1 ရှိသော ဟာ့ဝဲ စကားဝှက်သော့ကို ရှာမတွေ့ပါ သို့မဟုတ် ဝင်ရောက်သုံးစွဲ၍မရပါ။ ကျေးဇူးပြု၍ ရှေ့ဆက်ရန် ၎င်းကို တင်ပြပါ။ + နံပါတ်စဉ် %1 ရှိသော ဟာ့ဒ်ဝဲ စကားဝှက်သော့ကို ရှာမတွေ့ပါ သို့မဟုတ် ဝင်ရောက်သုံးစွဲ၍မရပါ။ ကျေးဇူးပြု၍ ရှေ့ဆက်ရန် ၎င်းကို တင်ပြပါ။ Hardware key is locked or timed out. Unlock or re-present it to continue. - ဟာ့ဝဲ စကားဝှက်သော့မှာ လော့ချထားသည် သို့မဟုတ် အချိန်ကျော်သွားပါပြီ။ ရှေ့ဆက်ရန် ၎င်းကို လော့ဖြည်ပါ သို့မဟုတ် ထပ်မံတင်ပြပါ။ + ဟာ့ဒ်ဝဲ စကားဝှက်သော့မှာ လော့ချထားသည် သို့မဟုတ် အချိန်ကျော်သွားပါပြီ။ ရှေ့ဆက်ရန် ၎င်းကို လော့ဖြည်ပါ သို့မဟုတ် ထပ်မံတင်ပြပါ။ Hardware key was not found or is not configured. - ဟာ့ဝဲ စကားဝှက်သော့ကို ရှာမတွေ့ခဲ့ပါ သို့မဟုတ် ချိန်ညှိမထားပါ။ + ဟာ့ဒ်ဝဲ စကားဝှက်သော့ကို ရှာမတွေ့ခဲ့ပါ သို့မဟုတ် ချိန်ညှိမထားပါ။ Failed to complete a challenge-response, the PCSC error code was: %1 တုံ့ပြန်ချက်စိန်ခေါ်မှု မပြီးစီးခဲ့ပါ၊ PCSC ချွတ်ယွင်းချက်ကုဒ် - %1 - - (NFC) %1 [%2] - Slot %3, %4 - YubiKey display fields - - - - Press - USB Challenge-Response Key interaction request - နှိပ်ပါ - - - Passive - USB Challenge-Response Key no interaction required - အသုံးပြုမနေပါ - YubiKeyInterfaceUSB @@ -10403,6 +9085,14 @@ Example: JBSWY3DPEHPK3PXP Unknown အမည်မသိ + + (USB) %1 [%2] Configured Slot - %3 + (USB) %1 [%2] ချိန်ညှိထားသော အပေါက် - %3 + + + (USB) %1 [%2] Challenge-Response - Slot %3 - %4 + (USB) %1 [%2] တုံ့ပြန်ချက်စိန်ခေါ်မှု - အပေါက် %3 - %4 + Press USB Challenge-Response Key interaction request @@ -10417,31 +9107,25 @@ Example: JBSWY3DPEHPK3PXP The YubiKey USB interface has not been initialized. YubiKey USB အသုံးပြုသူမြင်ရမည့်ပုံစံကို မစတင်ရသေးပါ။ + + Hardware key is currently in use. + ဟာ့ဒ်ဝဲ စကားဝှက်သော့ကို လက်ရှိတွင် အသုံးပြုနေသည်။ + Could not find hardware key with serial number %1. Please plug it in to continue. - နံပါတ်စဉ် %1 ရှိသော ဟာ့ဝဲ စကားဝှက်သော့ကို ရှာမတွေ့ပါ။ ကျေးဇူးပြု၍ ရှေ့ဆက်ရန် ၎င်းကို ပလပ်ထိုးပါ။ + နံပါတ်စဉ် %1 ရှိသော ဟာ့ဒ်ဝဲ စကားဝှက်သော့ကို ရှာမတွေ့ပါ။ ကျေးဇူးပြု၍ ရှေ့ဆက်ရန် ၎င်းကို ပလပ်ထိုးပါ။ Hardware key timed out waiting for user interaction. - အသုံးပြုသူ၏ တုံ့ပြန်မှုကို စောင့်နေစဉ် ဟာ့ဝဲ စကားဝှက်သော့ အချိန်ပြည့်သွားသည်။ + အသုံးပြုသူ၏ တုံ့ပြန်မှုကို စောင့်နေစဉ် ဟာ့ဒ်ဝဲ စကားဝှက်သော့ အချိန်ပြည့်သွားသည်။ A USB error occurred when accessing the hardware key: %1 - ဟာ့ဝဲ စကားဝှက်သော့ကို အသုံးပြုစဉ် USB ပြဿနာ ဖြစ်ပေါ်ခဲ့သည် - %1 + ဟာ့ဒ်ဝဲ စကားဝှက်သော့ကို အသုံးပြုစဉ် USB ပြဿနာ ဖြစ်ပေါ်ခဲ့သည် - %1 Failed to complete a challenge-response, the specific error was: %1 တုံ့ပြန်ချက်စိန်ခေါ်မှု မပြီးစီးခဲ့ပါ၊ တိကျသော ပြဿနာ - %1 - - %1 [%2] - Slot %3 - YubiKey NEO display fields - - - - %1 [%2] - Slot %3, %4 - YubiKey display fields - - \ No newline at end of file diff --git a/share/translations/keepassxc_nb.ts b/share/translations/keepassxc_nb.ts index ab893851f..70d9b199c 100644 --- a/share/translations/keepassxc_nb.ts +++ b/share/translations/keepassxc_nb.ts @@ -11,11 +11,11 @@ Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> - Meld fra om feil på: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> + Rapportér feil på: <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 er distribuert under vilkårene i GNU General Public License (GPL) versjon 2 eller (etter eget valg) versjon 3. + KeePassXC distribueres under vilkårene i GNU General Public License (GPL) versjon 2 eller (etter eget valg) versjon 3. Project Maintainers: @@ -23,7 +23,7 @@ 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. + En spesiell takk fra KeePassXC-teamet går til debfx som utviklet det opprinnelige KeePassX. Contributors @@ -39,7 +39,7 @@ Include the following information whenever you report a bug: - Hvis du vil rapportere en feil, inkluder følgende informasjon: + Inkluder følgende informasjon når du rapporterer en feil: Copy to clipboard @@ -80,10 +80,6 @@ Details Detaljer - - Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. - Avgjørelsen din blir husket så lenge klienten OG KeePassXC kjører. - Remember Husk @@ -92,13 +88,17 @@ Allow Selected Tillat valgte + + Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. + Avgjørelsen din blir husket så lenge klienten OG KeePassXC kjører. + Deny All && Future - Nekt alle & fremtidige + Nekt alle && fremtidige Allow All && &Future - Tillat alle &fremtidige + Tillat alle && &fremtidige @@ -112,7 +112,7 @@ AgentSettingsWidget Enable SSH Agent integration - Aktiver SSH-agent integrasjon + Aktiver SSH-agentintegrasjon Use Pageant @@ -122,10 +122,6 @@ Use OpenSSH Bruk OpenSSH - - Use both agents - Bruk begge agentene - SSH_AUTH_SOCK override SSH_AUTH_SOCK-overstyring @@ -154,6 +150,10 @@ SSH Agent connection is working! SSH-agentforbindelse fungerer! + + Use both agents + Bruk begge agentene + ApplicationSettingsWidget @@ -169,10 +169,6 @@ Security Sikkerhet - - This setting cannot be enabled when minimize on unlock is enabled. - Denne innstillingen kan ikke aktiveres når minimering ved opplåsing er aktivert. - Access error for config file %1 Feil ved tilgang til konfigurasjonsfilen %1 @@ -217,49 +213,21 @@ You must restart the application to set the new language. Would you like to restart now? Du må starte programmet på nytt for å angi det nye språket. Vil du starte på nytt nå? + + Reset Settings? + Tilbakestill innstillinger? + + + Are you sure you want to reset all general and security settings to default? + Er du sikker på at du vil tilbakestille alle generelle og sikkerhetsinnstillinger til standard? + Select backup storage directory Velg lagringsmappe for sikkerhetskopiering - Confirm Reset - - - - Are you sure you want to reset all settings to default? - - - - Import KeePassXC Settings - - - - Failed to import settings from %1, not a valid settings file. - - - - Export KeePassXC Settings - - - - Small - - - - Normal - - - - Medium - - - - Large - - - - Custom - + This setting cannot be enabled when minimize on unlock is enabled. + Denne innstillingen kan ikke aktiveres når minimering ved opplåsing er aktivert. @@ -282,7 +250,7 @@ Minimize window at application startup - Minimer ved programstart + Minimer vindu ved programstart Minimize window after unlocking database @@ -292,10 +260,6 @@ Remember previously used databases Husk tidligere brukte databaser - - recent files - siste filer - Load previously open databases on startup Last tidligere åpne databaser ved oppstart @@ -312,6 +276,25 @@ Include beta releases when checking for updates Ta med betaversjoner når du ser etter oppdateringer + + On database unlock, show entries that + Ved databaseopplåsing, vis oppføringer som + + + have expired + On database unlock, show entries that... + er utløpt + + + days + On database unlock, show entries that will expire within %1 days + dager + + + will expire within + On database unlock, show entries that... + vil utløpe innen + File Management Filhåndtering @@ -326,7 +309,7 @@ Automatically save non-data changes when locking database - Lagre ikkedata-endringer ved låsing av database + Lagre ikke-data-endringer ved låsing av database Automatically reload the database when modified externally @@ -334,12 +317,24 @@ Backup database file before saving - Sikkerhetskopier database-filen før lagring + Sikkerhetskopier databasefilen før lagring + + + Backup destination + Mål for sikkerhetskopiering + + + Specifies the database backup file location. Occurrences of "{DB_FILENAME}" are replaced with the filename of the saved database without extension. {TIME:<format>} is replaced with the backup time, see https://doc.qt.io/qt-5/qdatetime.html#toString. <format> defaults to format string "dd_MM_yyyy_hh-mm-ss". + Angir filplasseringen til database-sikkerhetskopien. Forekomster av {DB_FILENAME} erstattes med filnavnet til den lagrede databasen uten filtype. {TIME:<format>} erstattes med sikkerhetskopi-tidspunktet, se https://doc.qt.io/qt-5/qdatetime.html#toString. <format>standardformatet er "dd_MM_yyyy_hh-mm-ss". {DB_FILENAME}.old.kdbx {DB_FILENAME}.old.kdbx + + Choose... + Velg… + Use alternative saving method (may solve problems with Dropbox, Google Drive, GVFS, etc.) Bruk alternativ lagringsmetode (kan løse problemer med Dropbox, Google Drive, GVFS, etc.) @@ -378,7 +373,7 @@ Favicon download timeout: - Tidsavbrudd for nedlasting av favikon: + Tidsavbrudd for nedlasting av nettstedsikon: Website icon download timeout in seconds @@ -417,10 +412,6 @@ Toolbar button style: Knappestil på verktøylinjen: - - Show passwords in color - Vis passord i farger - Use monospaced font for notes Bruk fastbreddeskrift til notater @@ -439,7 +430,7 @@ Tray icon type: - Skuffikon-type: + Ikontype på oppgavelinje: Hide window to system tray when minimized @@ -447,7 +438,7 @@ Reset settings to default… - Tilbakestill innstillingene til standard... + Tilbakestill til standardinnstillinger… Auto-Type @@ -496,80 +487,23 @@ Global auto-type shortcut - Global autoskrivhurtigtast + Global autoskriv-hurtigtast Auto-type character typing delay milliseconds - Autoskriv tegnskrivings-forsinkelse i millisekunder + Autoskriv tegn-skriveforsinkelse i millisekunder Remember last typed entry for: Husk siste inntasta oppføring i: - On database unlock, show entries that will expire within - + recent files + siste filer - On database unlock, show entries that will expire within - - - - days - number of days warning for password expiration - dager - - - Destination format: - - - - <html><head/><body><p><span style=" font-weight:600;">{DB_FILENAME}</span> is replaced with the filename of the saved database without extension</p><p><span style=" font-weight:600;">{TIME:&lt;format&gt;}</span> is replaced with the specified time format (default: dd_MM_yyyy_hh-mm-ss)</p><p>See the User Guide for more details</p></body></html> - - - - Choose folder... - - - - Show confirmation before moving entries to recycle bin - - - - Copy data on double clicking field in entry view - - - - Show toolbar - - - - Show the menu bar by pressing the Alt key - - - - Show menubar - - - - Import settings… - - - - Export settings… - - - - Open browser on double clicking URL field in entry view - - - - Font size: - - - - Font size selection - + Show passwords in color + Vis passord i farger @@ -624,17 +558,33 @@ Lock databases after minimizing the window Lås databaser når vinduet minimeres + + Require password repeat when it is visible + Krev repetering av passord når synlig + Hide passwords when editing them Skjul passord ved redigering Use placeholder for empty password fields - Bruk plassholder for tomme passordfelt + Bruk posisjonsmerke for tomme passordfelt Hide passwords in the entry preview panel - Skjul passord i oppføringspanelet + Skjul passord i oppføring panelet + + + Hide entry notes by default + Skjul notater i oppføringa som standard + + + Move entries to recycle bin without confirmation + Flytt oppføringer til søppelbøtte uten bekreftelse + + + Enable double click to copy the username/password entry columns + Aktiver dobbeltklikk for å kopiere brukernavn-/passord-oppføringer Privacy @@ -648,18 +598,6 @@ Hide TOTP in the entry preview panel Skjul TOTP i forhåndsvisningspanelet - - Lock databases when switching user - - - - Lock Options - - - - Hide notes in the entry preview panel - - AutoType @@ -704,13 +642,27 @@ Veldig lang forsinkelse oppdaget, maks er %1: %2 - Entry does not have attribute for PICKCHARS: %1 - Oppføringen har ikke attributt for PICKCHARS: %1 + Invalid conversion type: %1 + Ugyldig konverteringstype: %1 + + + Invalid conversion syntax: %1 + Ugyldig konverteringssyntaks: %1 + + + Invalid regular expression syntax %1 +%2 + Ugyldig syntaks for regulært uttrykk %1 +%2 Invalid placeholder: %1 Ugyldig posisjonsmerke: %1 + + Entry does not have attribute for PICKCHARS: %1 + Oppføringen har ikke attributt for PICKCHARS: %1 + AutoTypeAssociationsModel @@ -728,7 +680,7 @@ Default sequence - Standard rekkefølge + Standardrekkefølge @@ -752,6 +704,10 @@ AutoTypePlatformX11 + + Trying to send invalid keysym. + Prøver å sende ugyldig keysym-navn. + Sequence aborted: Caps Lock is on Sekvens avbrutt: Store bokstaver er på @@ -764,10 +720,6 @@ Unable to get valid keycode for key: Mottar ikke gyldig nøkkelkode for nøkkel: - - Trying to send invalid keyboard symbol. - Forsøker å sende et ugyldig tastatursymbol. - AutoTypeSelectDialog @@ -787,7 +739,7 @@ Ctrl+2 - Type password<br/> Ctrl+3 - Type TOTP<br/> Ctrl+4 - Use Virtual Keyboard (Windows Only)</p> <p>Du kan bruke avanserte søkespørringer til å finne en hvilken som helst oppføring i de åpne databasene. Følgende snarveier er nyttige:<br/> -CTRL+F – Vis/skjul databasesøk<br/> +CTRL+F – Aktiver/deaktiver databasesøk<br/> Ctrl+1 – Skriv brukernavn<br/> Ctrl+2 – Skriv passord<br/> CTRL+3 – Skriv TOTP<br/> @@ -850,7 +802,7 @@ Ctrl+4 – Bruk virtuelt tastatur (bare Windows)</p> Remember access to checked entries - Husk tilgang til merkede oppføringer + Husk tilgang til valgte oppføringer Remember @@ -872,13 +824,13 @@ Ctrl+4 – Bruk virtuelt tastatur (bare Windows)</p> Disable for this site Deaktiver for dette nettstedet - - Undo - Angre - BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + KeePassXC-Lagre nettleser-oppføring + Ok Ok @@ -891,76 +843,15 @@ Ctrl+4 – Bruk virtuelt tastatur (bare Windows)</p> You have multiple databases open. Please select the correct database for saving credentials. Du har flere databaser åpne. -Vennligst velge riktig database for å lagre identifikasjon. - - - KeePassXC - Select Database - KeePassXC - velg database - - - - BrowserPasskeysConfirmationDialog - - Cancel - Avbryt - - - Update - Oppdater - - - Authenticate - Autentiser - - - Register new - Registrer ny - - - Register - Registrer - - - Timeout in <b>%n</b> seconds... - Tidsavbrudd om <b>%n</b> sekund…Tidsavbrudd om <b>%n</b> sekunder… - - - Relying Party: %1 - Tiltrodd part: %1 - - - Username: %1 - Brukernavn: %1 - - - KeePassXC - Passkey credentials - KeePassXC - Tilgangsnøkkel-identifikasjon - - - Add to existing entry - Legg til i eksisterende oppføring - - - Existing passkey found. -Do you want to register a new passkey for: - Eksisterende tilgangsnøkkel funnet. -Vil du registrere en ny tilgangsnøkkel for: - - - Select the existing passkey and press Update to replace it. - Velg den eksisterende tilgangsnøkkelen, og trykk oppdater for å erstatte den. - - - Authenticate passkey credentials for: - Godkjenn tilgangsnøkkellegitimasjon for: - - - Do you want to register a passkey for: - Vil du registrere tilgangsnøkkel for: +Vennligst velg riktig database for å lagre identifikasjon. BrowserService + + KeePassXC: Create a new group + KeePassXC: Lag en ny gruppe + A request for creating a new group "%1" has been received. Do you want to create this group? @@ -968,6 +859,10 @@ Do you want to create this group? En forespørsel om å opprette en ny gruppe "%1" er mottatt. Vil du opprette denne gruppen? + + KeePassXC: New key association request + KeePassXC: Tilknytningsforespørsel for ny nøkkel. + You have received an association request for the following database: %1 @@ -984,16 +879,28 @@ chrome-laptop. Save and allow access Lagre og tillat aksess + + KeePassXC: Overwrite existing key? + KeePassXC: Overskrive eksisterende nøkkel? + A shared encryption key with the name "%1" already exists. Do you want to overwrite it? En delt krypteringsnøkkel med navn "%1" eksisterer fra før. Vil du overskrive den? + + KeePassXC: Update Entry + KeePassXC: Oppdater oppføring. + Do you want to update the information in %1 - %2? Vil du oppdatere informasjonen i %1 - %2? + + KeePassXC: Delete entry + KeePassXC: Slett oppføring + A request for deleting entry "%1" has been received. Do you want to delete the entry? @@ -1002,58 +909,50 @@ Do you want to delete the entry? Vil du slette oppføringen? - %1 (Passkey) - %1 (tilgangsnøkkel) + Converting attributes to custom data… + Konverterer attributter til egendefinerte data… - KeePassXC - Create a new group - KeePassXC - Opprett en ny gruppe + Abort + Avbryt - Disable - Deaktiver + KeePassXC: Converted KeePassHTTP attributes + KeePassXC: Konverterte KeePassHTTP-attributter - KeePassXC - Overwrite existing key? - KeePassXC - Erstatte eksisterende nøkkel? + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + Konverterte attributter fra %1 oppføring(er). +Flyttet %2 nøkler til egendefinerte data. + + + Successfully moved %n keys to custom data. + Flyttet %n nøkkel til egendefinerte data.Flyttet %n nøkler til egendefinerte data. - KeePassXC - Update Entry - KeePassXC - Oppdater oppføring + KeePassXC: No entry with KeePassHTTP attributes found! + KeePassXC: Ingen oppføring med KeePassHTTP-attributter funnet! - KeePassXC - Delete entry - KeePassXC - Slett oppføring + The active database does not contain an entry with KeePassHTTP attributes. + Den aktive databasen inneholder ikke oppføringer med KeePassHTTP-attributter. - KeePassXC - New key association request - KeePassXC - Forespørsel om ny nøkkeltilknytning + Don't show this warning again + Ikke vis denne advarselen igjen - Passkey - Tilgangsnøkkel + KeePassXC: Legacy browser integration settings detected + KeePassXC: Oppdaget eldre innstillinger for nettleserintegrasjon - KeePassXC - Passkey credentials - KeePassXC - Tilgangsnøkkel-identifikasjon - - - Register a new passkey to this entry: - Registrer ny tilgangsnøkkel på denne oppføringen: - - - KeePassXC - Update passkey - KeePassXC - Oppdater tilgangsnøkkel - - - Entry already has a passkey. -Do you want to overwrite the passkey in %1 - %2? - Oppføringen har allerede en tilgangsnøkkel. -Vil du erstatte tilgangsnøkkelen i %1 - %2? - - - Register - Registrer + 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? + KeePassXC-Browser-innstillingene må flyttes til databaseinnstillingene. +Dette er nødvendig for å opprettholde gjeldende lesertilkoblinger. +Vil du overføre de eksisterende innstillingene dine nå? @@ -1068,12 +967,16 @@ Vil du erstatte tilgangsnøkkelen i %1 - %2? Enable browser integration - Aktiver nettleser integrasjon + Aktiver nettleserintegrasjon General Generelt + + Browsers installed as snaps are currently not supported. + Nettlesere installert som Snap støttes ikke for øyeblikket. + Enable integration for these browsers: Bruk tillegget i disse nettleserne: @@ -1185,11 +1088,11 @@ Vil du erstatte tilgangsnøkkelen i %1 - %2? Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. - Oppdaterer automatisk KeePassXC eller sti til binær keepassxc-proxy til lokale meldings-skript ved oppstart. + Oppdaterer automatisk KeePassXC eller sti til binær keepassxc-mellomtjener til innebygd meldingsformidlings-skript ved oppstart. Update native messaging manifest files at startup - Oppdater opprinnelige meldingsmanifestfiler ved oppstart + Oppdater manifestfilene for innebygd meldingsformidling ved oppstart Use a custom proxy location if you installed a proxy manually. @@ -1198,7 +1101,7 @@ Vil du erstatte tilgangsnøkkelen i %1 - %2? Use a custom proxy location: Meant is the proxy for KeePassXC-Browser - Bruk en egendefinert proxy-plassering: + Bruk en egendefinert mellomtjenerplassering: Custom proxy location field @@ -1215,7 +1118,7 @@ Vil du erstatte tilgangsnøkkelen i %1 - %2? Use a custom browser configuration location: - Bruk en egendefinert plassering for leserkonfigurasjon: + Bruk en egendefinert plassering for nettleserkonfigurasjon: Browser type: @@ -1239,11 +1142,31 @@ Vil du erstatte tilgangsnøkkelen i %1 - %2? Custom extension ID: - Egendefinert utvidelse-ID: + Egendefinert utvidelses-ID: Custom extension ID - Egendefinert utvidelse-ID + Egendefinert utvidelses-ID + + + Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 + På grunn av Snap-sandkasse må du kjøre et skript for å aktivere nettleserintegrasjon.<br />Du kan få tak i dette skriptet fra %1 + + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 + KeePassXC-Browser er nødvendig for at nettleserintegrasjonen skal fungere. <br />Last den ned for %1 og %2 og %3. %4 + + + Please see special instructions for browser extension use below + Vennligst se spesielle instruksjoner for bruk av nettleserutvidelse nedenfor + + + <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. + <b>Feil:</b> Finner ikke plasseringen til den egendefinerte mellomtjeneren.<br/>Nettleserintegrasjonen VIL IKKE FUNGERE uten mellomtjener-applikasjonen. + + + <b>Warning:</b> The following options can be dangerous! + <b>Advarsel:</b> Disse innstillingene kan medføre risiko. Executable Files @@ -1261,46 +1184,6 @@ Vil du erstatte tilgangsnøkkelen i %1 - %2? Select native messaging host folder location Velg plassering til den innebygde meldingsformidleren - - Allow keepassxc-proxy to list all entries with their title, URL and UUID in connected databases. - Tillat keepassxc-proxy å liste alle oppføringer med tittel, URL og UUID i tilkoblede databaser. - - - Allow limited access to all entries in connected databases (ignores site access restrictions) - Tillat begrenset tilgang til alle oppføringer i tilkoblede databaser (ignorerer begrensninger for nettstedstilgang) - - - <b>Warning:</b> Only adjust these settings if necessary. - <b>Advarsel:</b> Juster disse innstillingene bare om nødvendig. - - - The custom proxy location does not exist. - Den egendefinerte proxy-lokasjonen finnes ikke. - - - <b>Error:</b> The custom proxy location does not exist. Correct this in the advanced settings tab. - <b>Feil:</b> Den egendefinerte proxy-lokasjonen finnes ikke. Korriger dette i fanen for avanserte innstillinger. - - - <b>Error:</b> The installed proxy executable is missing from the expected location: %1<br/>Please set a custom proxy location in the advanced settings or reinstall the application. - <b>Feil:</b> Den installerte eksekverbare proxyen finnes ikke på den forventede plasseringen: %1<br/>Angi en egendefinert proxy-lokasjon i de avanserte innstillingene, eller installer applikasjonen på nytt. - - - Allows using insecure http://localhost with passkeys for testing purposes. - Tillater bruk av usikre http://localhost med tilgangsnøkler for testformål. - - - Allow using localhost with passkeys - Tillat bruk av localhost med tilgangsnøkler - - - KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. - - - - Browsers installed using Snap or Flatpak are not supported with exception to Firefox installed using Snap. - - CloneDialog @@ -1310,11 +1193,11 @@ Vil du erstatte tilgangsnøkkelen i %1 - %2? Append ' - Clone' to title - Tilføy ' - Klone' til tittel + Tilføy ' - Clone' til tittel Replace username and password with references - Bytt ut brukernavn og passord med referansene + Bytt ut brukernavn og passord med referanser Copy history @@ -1323,6 +1206,14 @@ Vil du erstatte tilgangsnøkkelen i %1 - %2? CsvImportWidget + + Import CSV fields + Importer CSV-felter + + + filename + filnavn + size, rows, columns størrelse, rader, kolonner @@ -1349,7 +1240,7 @@ Vil du erstatte tilgangsnøkkelen i %1 - %2? URL - Adresse + URL Notes @@ -1381,7 +1272,7 @@ Vil du erstatte tilgangsnøkkelen i %1 - %2? Text is qualified by - Tekst er markert ved + Tekst er markert med Text qualification @@ -1401,11 +1292,11 @@ Vil du erstatte tilgangsnøkkelen i %1 - %2? Header lines skipped - Overskriftslinjer hoppet over + Hodelinjer hoppet over Number of header lines to discard - Antall overskriftslinjer som skal forkastes + Antall hodelinjer som skal forkastes First line has field names @@ -1425,48 +1316,56 @@ Vil du erstatte tilgangsnøkkelen i %1 - %2? Not Present - Ikke tilstede + Ikke til stede Column %1 Kolonne %1 + + Imported from CSV file + Importert fra CSV-fil + + + Original data: + Originale data: + + + Error(s) detected in CSV file! + Feil(er) oppdaget i CSV-fil! + [%n more message(s) skipped] - [%n melding til ble hoppet over][%n flere meldinger ble hoppet over] + [%n melding hoppet over][%n flere meldinger hoppet over] - Failed to parse CSV file: %1 - Kunne ikke tolke CSV-fil: %1 + Error + Feil - Imported from CSV file: %1 - Importert fra CSV-fil: %1 - - - No Title Selected - - - - No title column was selected, entries will be hard to tell apart. -Are you sure you want to import? - - - - Tags - Tagger + CSV import: writer has errors: +%1 + CSV-import: Skriver har feil: +%1 CsvParserModel + + %1, %2, %3 + file info: bytes, rows, columns + %1, %2, %3 + + + %n byte(s) + %n byte%n bytes + %n row(s) - CSV row count %n rad%n rader %n column(s) - CSV column count %n kolonne%n kolonner @@ -1483,15 +1382,15 @@ Are you sure you want to import? Unable to open file %1. - Kan ikke åpne filen %1. + Kan ikke åpne fil %1. Error while reading the database: %1 - Feil under lesing av database: %1 + Feil under lesing av databasen: %1 Could not save, database does not point to a valid file. - Kunne ikke lagre, database peker ikke til en gyldig fil. + Kunne ikke lagre. Databasen peker ikke til en gyldig fil. Database save is already in progress. @@ -1499,7 +1398,7 @@ Are you sure you want to import? Could not save, database has not been initialized! - Kunne ikke lagre, databasen er ikke initialisert! + Kunne ikke lagre. Databasen er ikke klargjort! Database file has unmerged changes. @@ -1509,7 +1408,7 @@ Are you sure you want to import? %1 Backup database located at %2 %1 -Sikkerhetskopi av database lokalisert på %2 +Sikkerhetskopi av databasen er lokalisert på %2 Key not transformed. This is a bug, please report it to the developers. @@ -1519,14 +1418,6 @@ Sikkerhetskopi av database lokalisert på %2 Recycle Bin Papirkurv - - Database file read error. - - - - No file path was provided. - - DatabaseOpenDialog @@ -1539,7 +1430,7 @@ Sikkerhetskopi av database lokalisert på %2 DatabaseOpenWidget Unlock KeePassXC Database - Låse opp KeePassXC Database + Lås opp KeePassXC-database Enter Password: @@ -1547,15 +1438,35 @@ Sikkerhetskopi av database lokalisert på %2 Password field - Passord felt + Passordfelt + + + Enter Additional Credentials (if any): + Angi eventuell tilleggsidentifikasjon: + + + Key File: + Nøkkelfil: + + + Key file help + Hjelp for nøkkelfil Hardware key slot selection Valg av spor i maskinvarenøkkel + + Hardware Key: + Maskinvarenøkkel: + + + Hardware key help + Hjelp for maskinvarenøkkel + Key file to unlock the database - Nøkkelfil for å låse opp database + Nøkkelfil for å låse opp databasen Browse for key file @@ -1565,6 +1476,14 @@ Sikkerhetskopi av database lokalisert på %2 Browse… Bla gjennom... + + Refresh hardware tokens + Oppdater maskinvare-autentiseringsenhet + + + Refresh + Last på ny + Unlock Database Lås opp database @@ -1579,7 +1498,7 @@ Sikkerhetskopi av database lokalisert på %2 Please present or touch your YubiKey to continue… - Hold inntil eller berør din YubiKey for å fortsette ... + Kobl til og/eller berør YubiKey for å fortsette... Database Version Mismatch @@ -1627,6 +1546,10 @@ For å forhindre at denne feilen vises, må du gå til "Databaseinnstilling Retry with empty password Prøv igjen med tomt passord + + Failed to authenticate with Touch ID + Autentisering med berørings-ID feilet + Failed to open key file: %1 Kunne ikke åpne nøkkelfil: %1 @@ -1659,69 +1582,41 @@ For å forhindre at denne feilen vises, må du gå til "Databaseinnstilling Cannot use database file as key file Kan ikke bruke database fil som nøkkelfil + + You cannot use your database file as a key file. +If you do not have a key file, please leave the field empty. + Du kan ikke bruke databasefilen som nøkkelfil. +Hvis du ikke har en nøkkelfil, lar du feltet stå tomt. + + + Detecting hardware keys… + Oppdager maskinvarenøkler … + + + No hardware keys detected + Finner ingen maskinvarenøkler + + + Select hardware key… + Velg maskinvarenøkkel... + + + <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information…</p> + <p>I tillegg til et passord kan du bruke en nøkkelfil til å forbedre sikkerheten i databasen. Denne filen kan opprettes i databasens sikkerhetsinnstillinger.</p><p>Dette er <strong>ikke</strong> *.kdbx-databasefilen din!<br>Hvis du ikke har en nøkkelfil, lar du dette feltet stå tomt.</p><p>Klikk hvis du vil ha mer informasjon…</p> + + + <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +<p>Click for more information…</p> + <p>Du kan bruke en maskinvare-autentiseringsenhet, for eksempel en <strong>YubiKey</strong> eller <strong>OnlyKey,</strong> med spor som er konfigurert for HMAC-SHA1.</p> +<p>Klikk hvis du vil ha mer informasjon...</p> + authenticate to access the database autentiser for å få tilgang til databasen - Failed to authenticate with Quick Unlock: %1 - Autentisering med hurtigopplåsing feilet: %1 - - - Select Key File: - Velg nøkkelfil: - - - <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!</p> - <p>I tillegg til passord, kan du bruke en nøkkelfil for å forbedre sikkerheten til databasen. Denne fila kan opprettes i databasens sikkerhetsinnstillinger.</p> <p>Dette er <strong>ikke</strong> *.kdbx-databasefilen din!</p> - - - Use hardware key [Serial: %1] - Bruk maskinvarenøkkel [Serial: %1] - - - Use hardware key - Bruk maskinvarenøkkel - - - Your database file is NOT a key file! -If you don't have a key file or don't know what that is, you don't have to select one. - Database-filen er IKKE en nøkkelfil! -Om du ikke har en nøkkelfil, eller ikke vet hva det er, trenger du ikke velge en. - - - KeePassXC database file selected - KeePassXC-databasefil valgt - - - The file you selected looks like a database file. -A database file is NOT a key file! - -Are you sure you want to continue with this file?. - Filen du har valgt ser ut som en databasefil. -En databasefil er IKKE en nøkkelfil! - -Er du sikker på at du vil fortsette med denne filen? - - - No hardware keys found. - Finner ingen maskinvarenøkler. - - - Refresh Hardware Keys - Oppdater maskinvarenøkler - - - Click to add a key file. - Trykk for å legge til en nøkkelfil - - - <a href="#" style="text-decoration: underline">I have a key file</a> - <a href="#" style="text-decoration: underline">Jeg har en nøkkelfil</a> - - - Hardware keys found, but no slots are configured. - + Failed to authenticate with Windows Hello: %1 + Kunne ikke autentisere med Windows Hello: %1 @@ -1733,6 +1628,10 @@ Er du sikker på at du vil fortsette med denne filen? DatabaseSettingsDialog + + Advanced Settings + Avanserte innstillinger + General Generelt @@ -1743,7 +1642,7 @@ Er du sikker på at du vil fortsette med denne filen? Database Credentials - Legitimasjon for database + Database-akkreditering Encryption Settings @@ -1757,22 +1656,6 @@ Er du sikker på at du vil fortsette med denne filen? Maintenance Vedlikehold - - KeeShare - KeeShare - - - Secret Service Integration - Integrasjon av 'Secret Service' - - - Remote Sync - Fjernsynkronisering - - - Database Settings: %1 - - DatabaseSettingsWidgetBrowser @@ -1780,17 +1663,25 @@ Er du sikker på at du vil fortsette med denne filen? KeePassXC-Browser settings KeePassXC nettleser-innstillinger + + Convert KeePassHTTP data + Konverter KeePassHTTP-data + + + Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data + Konverter eldre KeePassHTTP-attributter til KeePassXC-Browser-kompatible egendefinerte data + + + Refresh database root group ID + Oppdater rotgruppe-ID for database + Disconnect all browsers Koble fra alle nettlesere Forget all site-specific settings on entries - Glem alle side-spesifikke innstillinger og oppføringer - - - Refresh database root group ID - Oppdater rotgruppe-ID for database + Glem alle områdespesifikke innstillinger og oppføringer Stored keys @@ -1816,7 +1707,7 @@ Er du sikker på at du vil fortsette med denne filen? Do you really want to delete the selected key? This may prevent connection to the browser plugin. Vil du virkelig slette den merkede nøkkelen? -Dette kan forhindre tilkobling til plugin-modulen i nettleseren. +Dette kan forhindre tilkobling for plugin-modulen i nettleseren. Key @@ -1832,18 +1723,26 @@ Dette kan forhindre tilkobling til plugin-modulen i nettleseren. Enable Browser Integration to access these settings. - Aktiver nettleser integrasjon for å få tilgang til disse innstillingene. + Aktiver nettleserintegrasjon for å få tilgang til disse innstillingene. Do you really want to disconnect all browsers? This may prevent connection to the browser plugin. Vil du virkelig koble fra alle nettlesere? -Dette kan forhindre tilkobling til plugin-modulen i nettleseren. +Dette kan forhindre tilkobling for plugin-modulen i nettleseren. + + + KeePassXC: No keys found + KeePassXC: Ingen nøkler funnet No shared encryption keys found in KeePassXC settings. Ingen delte kryptering nøkkel funnet i KeePassXC-innstillingene. + + KeePassXC: Removed keys from database + KeePassXC: Fjernet nøkler fra database + Successfully removed %n encryption key(s) from KeePassXC settings. %n krypteringsnøkkel er fjernet fra KeePassXC-innstillingene.%n krypteringsnøkler er fjernet fra KeePassXC-innstillingene. @@ -1862,44 +1761,42 @@ Tilgangstillatelser til oppføringer vil bli tilbakekalt. Abort Avbryt + + KeePassXC: Removed permissions + KeePassXC: Fjernet tillatelser + Successfully removed permissions from %n entry(s). - Fjernet tillatelser fra %n oppføring.Fjernet tillatelser fra fra %n oppføringer. + Tillatelsen er fjernet fra %n oppføring.Tillatelsene er fjernet fra %n oppføringer. + + + KeePassXC: No entry with permissions found! + KeePassXC: Ingen oppføring med tillatelser funnet! The active database does not contain an entry with permissions. - Den aktive databasen inneholder ikke et oppsett med tillatelser. + Den aktive databasen inneholder ikke oppsett med tillatelser. + + + Move KeePassHTTP attributes to custom data + Flytt KeePassHTTP-attributter til egendefinerte data + + + Do you really want to convert all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + Vil du virkelig konvertere alle eldre nettleser-integreringsdata til den nyeste standarden? +Dette er nødvendig for å opprettholde kompatibilitet med nettleserutvidelsen. Refresh database ID - Oppfriske database ID + Oppdater database-ID Do you really want refresh the database ID? This is only necessary if your database is a copy of another and the browser extension cannot connect. - Vil du virkelig oppdatere database-ID? + Vil du virkelig oppdatere database-ID'en? Dette er bare nødvendig hvis databasen er en kopi av en annen og nettleserutvidelsen ikke kan koble til. - - Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data - Konverter eldre KeePassHTTP-attributter til KeePassXC-Browser-kompatible egendefinerte data - - - No keys found - Ingen nøkler funnet - - - Removed keys from database - Fjernet nøkler fra database - - - Removed permissions - Fjernet tillatelser - - - No entry with permissions found! - Ingen oppføring med tillatelser funnet! - DatabaseSettingsWidgetDatabaseKey @@ -1937,19 +1834,7 @@ Er du sikker på at du vil fortsette uten passord? Failed to change database credentials - Kunne ikke endre databaselegitimasjon - - - Weak password - Svakt passord - - - This is a weak password! For better protection of your secrets, you should choose a stronger password. - Dette er et svakt passord! For bedre beskyttelse av hemmelighetene dine, bør du velge et sterkere passord. - - - The provided password does not meet the minimum quality requirement. - + Kunne ikke endre database-akkreditering @@ -1958,13 +1843,21 @@ Er du sikker på at du vil fortsette uten passord? Decryption Time: Krypteringstid: + + Change existing decryption time + Endre eksisterende dekrypteringstid + + + Change + Endring + Decryption time in seconds Dekrypteringstid i sekunder Higher values offer more protection, but opening the database will take longer. - Høyere verdier gir mer beskyttelse, men å åpne database vil ta lengre tid. + Høyere verdier gir mer beskyttelse, men å åpne databasen vil ta lengre tid. Database format: @@ -1992,7 +1885,7 @@ Er du sikker på at du vil fortsette uten passord? AES: 256 Bit (default) - AES: 256 Bit (standard) + AES: 256 bit (standard) Twofish: 256 Bit @@ -2038,6 +1931,11 @@ Er du sikker på at du vil fortsette uten passord? KDBX 3 KDBX 3 + + unchanged + Database decryption time is unchanged + uendret + Number of rounds too high Key transformation rounds @@ -2088,19 +1986,7 @@ Hvis du beholder dette antallet vil ikke databasen være beskyttet mot 'rå thread(s) Threads for parallel execution (KDF settings) - trådtråder - - - Encryption Settings: - Krypteringsinnstillinger: - - - Basic - Standard - - - Advanced - Avansert + tråd(er)tråd(er) @@ -2119,7 +2005,7 @@ Hvis du beholder dette antallet vil ikke databasen være beskyttet mot 'rå Enable Secret Service to access these settings. - La 'secret service' å få tilgang til disse innstillingene. + Aktiver 'secret service' for å få tilgang til disse innstillingene. @@ -2134,11 +2020,11 @@ Hvis du beholder dette antallet vil ikke databasen være beskyttet mot 'rå Database name field - Databasenavn-felt + Felt for databasenavn Database description: - Databasens beskrivelse: + Databasebeskrivelse: Database description field @@ -2150,15 +2036,15 @@ Hvis du beholder dette antallet vil ikke databasen være beskyttet mot 'rå Default username field - Standard brukernavnfelt + Standard brukernavn-felt History Settings - Historikk-innstillinger + Historikkinnstillinger Maximum number of history items per entry - Maksimalt historikkantall per oppføring + Maksimalt antall historiske oppføringer per oppføring Maximum size of history per entry @@ -2170,7 +2056,7 @@ Hvis du beholder dette antallet vil ikke databasen være beskyttet mot 'rå Use recycle bin - Bruk søppelbøtte + Bruk papirkurven Additional Database Settings @@ -2178,16 +2064,16 @@ Hvis du beholder dette antallet vil ikke databasen være beskyttet mot 'rå Enable compression (recommended) - Aktiver komprimering (anbefales) + Aktiver komprimering (anbefalt) Delete Recycle Bin - Slett søppelbøtte + Slett papirkurven Do you want to delete the current recycle bin and all its contents? This action is not reversible. - Vil du slette gjeldende papirkurv og alt innholdet i den? + Vil du slette papirkurven og alt innholdet i den? Denne handlingen kan ikke angres. @@ -2232,70 +2118,6 @@ i stedet for å slette dem fra databasen. Oppføringer som er slettet fra papirkurven er fjernet fra databasen. - - Autosave delay since last change - Autolagringsforsinkelse siden siste endring - - - Autosave delay - Autolagringsforsinkelse - - - Autosave delay since last change in minutes - Autolagringsforsinkelse i minutter siden siste endring - - - min - min - - - Autosave delay since last change checkbox - Autolagringsforsinkelse siden siste endring i avkrysningsboksa - - - Public Database Metadata - - - - Warning: the following settings are not encrypted. - - - - Display name: - - - - Publically visible display name used on the unlock dialog - - - - Database public display name - - - - Display color: - - - - Publically visible color used on the unlock dialog - - - - Database public display color chooser - - - - Clear - Tøm - - - Display icon: - - - - Select Database Icon - - DatabaseSettingsWidgetKeeShare @@ -2380,7 +2202,7 @@ fjernet fra databasen. Database name field - Databasenavn-felt + Felt for databasenavn Description: @@ -2391,129 +2213,6 @@ fjernet fra databasen. Database-beskrivelsesfelt - - DatabaseSettingsWidgetRemote - - Sync Commands - - - - Remove - Fjern - - - Command Settings - - - - Name - Navn - - - Save - Lagre - - - Download - Last ned - - - Command: - - - - Download command field - - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - - - - Input: - - - - Download input field - - - - Upload - Last opp - - - Upload command field - - - - e.g.: "sftp user@hostname" or "scp {TEMP_DATABASE} user@hostname:DatabaseOnRemote.kdbx" - - - - Upload input field - - - - Name cannot be empty. - Navn kan ikke være tomt. - - - Test - Test - - - Download command cannot be empty. - - - - Download failed with error: %1 - - - - Download finished, but file %1 could not be found. - - - - Download successful. - Nedlasting fullført. - - - Save Remote Settings - - - - You have unsaved changes. Do you want to save them? - Du har endringer som ikke er lagret. Vil du lagre dem? - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - - - - e.g.: -put {TEMP_DATABASE} DatabaseOnRemote.kdbx -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - - - - Timeout: - - - - seconds - sekunder - - DatabaseTabWidget @@ -2546,10 +2245,26 @@ Dette er definitivt en feil, rapporter det til utviklerne. CSV file CSV fil + + Select CSV file + Velg CSV fil + Merge database Slå sammen database + + KeePass 1 database + KeePass1-database + + + Open KeePass 1 database + Åpne KeePass1-database + + + Open OPVault + Åpne OPVault + Export database to CSV file Eksporter database til CSV fil @@ -2562,6 +2277,28 @@ Dette er definitivt en feil, rapporter det til utviklerne. Writing the HTML file failed. Skriving av HTML-filen mislyktes. + + Export Confirmation + Eksportbekreftelse + + + You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? + Du er i ferd med å eksportere databasen til en ukryptert fil. Dette vil gjøre passordene og sensitiv informasjon sårbar! Er du sikker på at du vil fortsette? + + + New Database + Ny database + + + %1 [New Database] + Database tab name modifier + %1 [Ny Database] + + + %1 [Locked] + Database tab name modifier + %1 [Låst] + Export database to XML file Eksporter databasen til XML-fil @@ -2574,31 +2311,9 @@ Dette er definitivt en feil, rapporter det til utviklerne. Writing the XML file failed Skriving av XML-filen mislyktes - - Export Confirmation - Eksportbekreftelse - - - You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? - Du er i ferd med å eksportere databasen til en ukryptert fil. Dette vil gjøre passordene og sensitiv informasjon sårbar! Er du sikker på at du vil fortsette? - - - %1 [Locked] - Database tab name modifier - %1 [Låst] - - - %1 [Temporary] - Database tab name modifier - - DatabaseWidget - - Searches and Tags - Søk og tagger - Searching… Søker... @@ -2637,7 +2352,7 @@ Dette er definitivt en feil, rapporter det til utviklerne. Move group to recycle bin? - Flytt gruppe til søppelbøtte? + Flytte gruppe til papirkurven? Do you really want to move the group "%1" to the recycle bin? @@ -2647,10 +2362,6 @@ Dette er definitivt en feil, rapporter det til utviklerne. Expired entries Utløpte oppføringer - - Entries expiring within %1 day(s) - Oppføringer som utløper innen %1 dagOppføringer som utløper innen %1 dager - No current database. Ingen nåværende database. @@ -2675,18 +2386,6 @@ Dette er definitivt en feil, rapporter det til utviklerne. No Results Ingen resultater - - Save - Lagre - - - Enter a unique name or overwrite an existing search from the list: - Skriv inn et unikt navn, eller erstatt et eksisterende søk fra listen: - - - Save Search - Lagre søk - Lock Database? Låse database? @@ -2715,6 +2414,26 @@ Lagre endringer? File has changed Fil er endret + + The database file has changed. Do you want to load the changes? + Databasen er endret. Ønsker du å laste inn endringene? + + + Merge Request + Forespørsel om sammenslåing + + + The database file has changed and you have unsaved changes. +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. +Error: %1 + Kunne ikke åpne den nye databasefilen under forsøk på å laste den inn på nytt automatisk. +Feil: %1 + Disable safe saves? Deaktivere sikker lagring? @@ -2747,104 +2466,35 @@ Deaktivere sikker lagring og prøve igjen? Empty recycle bin? - Tøm papirkurv? + Tømme papirkurven? 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? + Er du sikker på at du ønsker å permanent slette hele papirkurven? Could not find database file: %1 Kunne ikke finne databasefil: %1 - - New Database - Ny database + + Entries expiring within %1 day(s) + Oppføringer som utløper innen %1 dagOppføringer som utløper innen %1 dager - %1 [New Database] - Database tab name modifier - %1 [Ny Database] + Searches and Tags + Søk og tagger - Remote Sync did not contain any download or upload commands. - + Enter a unique name or overwrite an existing search from the list: + Skriv inn et unikt navn, eller erstatt et eksisterende søk fra listen: - Remote sync '%1' completed successfully! - + Save + Lagre - Remote sync '%1' failed: %2 - - - - Error while saving database %1: %2 - - - - Downloading... - Laster ned... - - - Uploading... - Laster opp... - - - Syncing... - Synkroniserer... - - - Remove passkey from entry - Fjern tilgangsnøkkel fra oppføringen - - - Do you want to remove the passkey from this entry? - Vil du fjerne tilgangsnøkkelen fra denne oppføringen? - - - The database file "%1" was modified externally - - - - Do you want to load the changes? - - - - Reload database - - - - Reloading database… - - - - Reload canceled - - - - Reload successful - - - - Reload pending user action… - - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes<br>Ignore the changes on disk until save<br>Discard unsaved changes - - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes then save<br>Overwrite the changes on disk<br>Discard unsaved changes - - - - Database file overwritten. - - - - Database file on disk cannot be unlocked with current credentials.<br>Enter new credentials and/or present hardware key to continue. - + Save Search + Lagre søk @@ -2897,13 +2547,17 @@ Deaktivere sikker lagring og prøve igjen? n/a i/a + + (encrypted) + (kryptert) + Select private key Velg privat nøkkel Entry history - Oppførings-historikk + Oppføringshistorikk Add entry @@ -2969,7 +2623,7 @@ Vil du rette den? Are you sure you want to remove this attribute? - Er du sikker på at du ønsker å fjerne denne attributten? + Er du sikker på at du ønsker å fjerne dette attributtet? Reveal @@ -2977,16 +2631,12 @@ Vil du rette den? [PROTECTED] Press Reveal to view or edit - [BESKYTTET] Trykk Vis for å vise eller redigere + [BESKYTTET] Trykk 'Vis' for å vise eller endre Hide Skjul - - %n hour(s) - %n time%n timer - %n week(s) %n uke(r)%n uke(r) @@ -2999,9 +2649,9 @@ Vil du rette den? %n year(s) %n år%n år - - Failed to decrypt SSH key, ensure password is correct. - Kunne ikke dekryptere SSH-nøkkelen. Sørg for at passordet er korrekt. + + %n hour(s) + %n time%n timer @@ -3044,7 +2694,7 @@ Vil du rette den? Toggle attribute protection - Vis/skjul attributtbeskyttelse + Attributtbeskyttelse på/av Protect @@ -3121,27 +2771,17 @@ Vil du rette den? Add new window association Legg til ny vindustilknytning - - + - Add item - + - Remove selected window association Fjern valgte vindustilknytning - - - - Remove item - - - Window title: Vindustittel: You can use an asterisk (*) to match everything - Du kan bruke en stjerne (*) til å matche alt + Du kan bruke en stjerne (*) for å matche alt Set the window association title @@ -3159,28 +2799,54 @@ Vil du rette den? Custom Auto-Type sequence for this window Egendefinert autoskriv-rekkefølge for dette vinduet + + + + Add item + + + + + - + Remove item + - + EditEntryWidgetBrowser + + These settings affect to the entry's behaviour with the browser extension. + Disse innstillingene påvirker oppføringens funksjon mot nettleserutvidelsen. + General Generelt Hide this entry from the browser extension - Skjul denne oppføringen for leserutvidelsen + Skjul denne oppføringen for nettleserutvidelsen Skip Auto-Submit for this entry - Hopp over automatisk utførelse for denne oppføringen + Hopp over auto-sending for denne oppføringen + + + Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. + Send denne innstillingen bare til nettleseren for «HTTP Auth»-dialoger. Hvis aktivert viser ikke vanlige påloggingsskjemaer denne oppføringen tilgjengelig for valg. Use this entry only with HTTP Basic Auth - Bruk denne oppføringen bare med «HTTP Basic Auth» + Bruk denne oppføringen bare til «HTTP Basic Auth» + + + Do not send this setting to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. + Ikke send denne innstillingen til nettleseren for «HTTP Auth»-dialoger. Hvis aktivert viser ikke «HTTP Auth»-dialoger denne oppføringen tilgjengelig for valg. Do not use this entry with HTTP Basic Auth - Ikke bruk denne oppføringen med «HTTP Basic Auth» + Ikke bruk denne oppføringen til «HTTP Basic Auth» + + + Additional URL's + Ytterligere URL'er Add @@ -3192,23 +2858,7 @@ Vil du rette den? Edit - Endring - - - These settings affect the entry's behaviour with the browser extension. - Disse innstillingene påvirker oppføringens atferd med nettleserutvidelsen. - - - Additional URLs - Ytterligere URL-er - - - Only send this entry to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. - - - - Do not send this entry to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. - + Endre @@ -3219,7 +2869,7 @@ Vil du rette den? Show entry at selected history state - Vis oppføring ved valgt historikk-tilstand + Vis oppføring ved valgt historikkelement Show @@ -3227,7 +2877,7 @@ Vil du rette den? Restore entry to selected history state - Gjenopprett oppføring til valgt historikk-tilstand + Gjenopprett oppføring til valgte historikkelement Restore @@ -3235,7 +2885,7 @@ Vil du rette den? Delete selected history state - Slett valgt historikk-tilstand + Slett valgt historikkelement Delete @@ -3282,11 +2932,11 @@ Vil du rette den? Url field - URL-adressefelt + URL-felt Download favicon for URL - Last ned favicon for URL + Last ned nettstedsikon for URL Title field @@ -3298,7 +2948,7 @@ Vil du rette den? Toggle expiration - Vis/skjul utløp + Aktivere/deaktivere utløpsdato og -tid. Tags list @@ -3326,7 +2976,7 @@ Vil du rette den? Toggle notes visibility - Vis/skjul notater + Vis/skjul synlige notater T&ags: @@ -3345,7 +2995,7 @@ Vil du rette den? Remove key from agent when database is closed/locked - Fjern nøkkel fra agent når database er lukket/låst + Fjern nøkkel fra agent når databasen blir lukket/låst Comment @@ -3353,7 +3003,7 @@ Vil du rette den? Add key to agent when database is opened/unlocked - Legg nøkkel til agent når database er åpnet/ulåst + Legg nøkkel til agent når databasen blir åpnet/opplåst Decrypt @@ -3375,6 +3025,19 @@ Vil du rette den? Private key Privat nøkkel + + External file + Ekstern fil + + + Browser for key file + Netteser for nøkkelfil + + + Browse… + Button for opening file dialog + Bla gjennom... + Attachment Vedlegg @@ -3391,23 +3054,6 @@ Vil du rette den? Remove from agent Fjern fra agent - - External file - Ekstern fil - - - Browser for key file - Netteser for nøkkelfil - - - Browse… - Button for opening file dialog - Bla gjennom... - - - Generate - Opprett - Select attachment file Velg vedleggsfil @@ -3432,10 +3078,6 @@ Vil du rette den? seconds sekunder - - Clear agent - - EditGroupWidget @@ -3447,6 +3089,10 @@ Vil du rette den? Icon Ikon + + Browser Integration + Nettlesertillegg + Properties Egenskaper @@ -3463,10 +3109,6 @@ Vil du rette den? Group has unsaved changes Gruppen har ulagrede endringer - - Browser Integration - Nettlesertillegg - Enable Aktiver @@ -3492,15 +3134,15 @@ Vil du rette den? Hide entries from browser extension toggle for this and sub groups - Vis/skjul oppføringer fra nettleserutvidelse for denne og undergrupper + Skjul oppføringer fra nettleserutvidelse for denne og undergrupper Skip Auto-Submit for entries: - Hopp over automatisk utførelse for oppføringer: + Hopp over automatisk sending for oppføringer: Skip Auto-Submit toggle for this and sub groups - Aktiver/deaktiver automatisk utførelse for denne og undergrupper + Veksleknapp for hopp over automatisk sending for denne og undergrupper Use entries only with HTTP Basic Auth: @@ -3508,7 +3150,7 @@ Vil du rette den? Only HTTP Auth toggle for this and sub groups - Aktiver/deaktiver kun HTTP Auth for denne og undergrupper + Veksleknapp for bare HTTP Auth for denne og undergrupper Do not use entries with HTTP Basic Auth: @@ -3516,7 +3158,7 @@ Vil du rette den? Do not use HTTP Auth toggle for this and sub groups - Aktiver/deaktiver HTTP Auth for denne og undergrupper + Veksleknapp for ikke bruk "HTTP Auth" for denne og undergrupper Omit WWW subdomain from matching: @@ -3524,15 +3166,7 @@ Vil du rette den? Omit WWW subdomain from matching toggle for this and sub groups - Aktiver/deaktiver matchende www-underdomene for denne og undergrupper - - - Restrict matching to given browser key: - Begrens match til oppgitt nettlesernøkkel: - - - Restrict matching to given browser key toggle for this and sub groups - Aktiver/deaktiver begrens match til oppgitt nettlesernøkkel for denne og undergrupper + Vis/skjul utelat www-underdomene fra matching for denne og undergrupper @@ -3591,7 +3225,7 @@ Vil du rette den? Synchronize - Synkroniser + Synkronisér Your KeePassXC version does not support sharing this container type. @@ -3614,15 +3248,15 @@ Støttede utvidelser er: %1. KeeShare is currently disabled. You can enable import/export in the application settings. KeeShare is a proper noun - KeeShare er deaktivert. Du kan aktivere import/eksport i programinnstillingene. + KeeShare er for øyeblikket deaktivert. Du kan aktivere import/eksport i programinnstillingene. Database export is currently disabled by application settings. - Databaseeksport er deaktivert av programinnstillinger. + Databaseeksport er for øyeblikket deaktivert av programinnstillinger. Database import is currently disabled by application settings. - Databaseimport er deaktivert av programinnstillinger. + Databaseimport er for øyeblikket deaktivert av programinnstillinger. KeeShare container @@ -3653,7 +3287,7 @@ Støttede utvidelser er: %1. Toggle expiration - Vis/skjul utløp + Aktivere/deaktivere utløpsdato og -tid. Expires: @@ -3661,7 +3295,7 @@ Støttede utvidelser er: %1. Name field - Navn-feltet + Navn-felt Expiration field @@ -3677,11 +3311,11 @@ Støttede utvidelser er: %1. Search: - Søk: + Søke: Auto-Type toggle for this and sub groups - Vis/skjul autoskriv for denne og undergrupper + Veksle mellom autoskriv for denne og undergrupper Notes: @@ -3705,14 +3339,14 @@ Støttede utvidelser er: %1. Search toggle for this and sub groups - Vis/skjul søk for denne og undergrupper + Søkeknapp for denne og undergrupper EditWidgetIcons Use default icon - Bruk standard ikon + Bruk standardikon Use custom icon @@ -3732,11 +3366,11 @@ Støttede utvidelser er: %1. Download favicon for URL - Last ned favicon for URL + Last ned nettstedsikon for URL Download favicon - Last ned ikoner + Last ned nettstedsikon Apply selected icon to subgroups and entries @@ -3764,7 +3398,11 @@ Støttede utvidelser er: %1. Unable to fetch favicon. - Kan ikke hente favorittikon. + Kan ikke hente nettstedsikon. + + + You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security + Du kan aktivere DuckDuckGo-ikonetjenesten under Verktøy -> Innstillinger -> Sikkerhet Existing icon selected. @@ -3780,7 +3418,7 @@ Støttede utvidelser er: %1. Select Image(s) - Velg bilde(-r) + Velg Bilde(-r) Successfully loaded %1 of %n icon(s) @@ -3796,11 +3434,7 @@ Støttede utvidelser er: %1. The following icon(s) failed: - Dette ikonet mislyktes:Følgende ikoner mislyktes: - - - You can enable the DuckDuckGo website icon service under Application Settings -> Security - Du kan aktivere DuckDuckGo-nettstedsikontjenesten under Programinnstillinger -> Sikkerhet + Følgende ikon mislyktes:Følgende ikoner mislyktes: @@ -3811,7 +3445,7 @@ Støttede utvidelser er: %1. Datetime created - Dato- og klokkeslett opprettet + Datotid opprettet Modified: @@ -3819,7 +3453,7 @@ Støttede utvidelser er: %1. Datetime modified - Dato- og klokkeslett endret + Datotid endret Accessed: @@ -3878,24 +3512,6 @@ Dette kan føre til feil for de berørte programtilleggene. %1 - Clone %1 - Klone - - Passkey - Tilgangsnøkkel - - - Invalid conversion type: %1 - Ugyldig konverteringstype: %1 - - - Invalid conversion syntax: %1 - Ugyldig konverteringssyntaks: %1 - - - Invalid regular expression syntax %1 -%2 - Ugyldig syntaks for regulært uttrykk %1 -%2 - EntryAttachments @@ -3904,21 +3520,6 @@ Dette kan føre til feil for de berørte programtilleggene. Kan ikke åpne filen %1 - - EntryAttachmentsDialog - - Form - Skjema - - - File name - - - - File contents... - - - EntryAttachmentsModel @@ -3956,6 +3557,14 @@ Dette kan føre til feil for de berørte programtilleggene. Remove Fjern + + Rename selected attachment + Gi nytt navn til valgt vedlegg + + + Rename + Gi nytt navn + Open selected attachment Åpne valgt vedlegg @@ -4024,13 +3633,19 @@ Dette kan føre til feil for de berørte programtilleggene. Unable to open file(s): %1 Kan ikke åpne fil: -%1Kan ikke åpne filer: +%1Kan ikke åpne filene: %1 Confirm Overwrite Attachment Bekreft erstatting av vedlegg + + Attachment "%1" already exists. +Would you like to overwrite the existing attachment? + Vedlegg %1 finnes allerede. +Vil du erstatte det eksisterende vedlegget? + Confirm Attachment Bekreft vedlegg @@ -4065,24 +3680,6 @@ Error: %1 Lagring av oppdatert vedlegg mislyktes. Feil: %1 - - Attachment "%1" already exists. -Would you like to overwrite the existing attachment? - Vedlegg %1 finnes allerede. -Vil du erstatte det eksisterende vedlegget? - - - New - - - - Preview - Forhåndsvis - - - Failed to preview an attachment: Attachment not found - - EntryAttributesModel @@ -4277,14 +3874,6 @@ Vil du erstatte det eksisterende vedlegget? Has TOTP Har TOTP - - Background Color - Bakgrunnsfarge - - - Group Path - - EntryPreviewWidget @@ -4305,8 +3894,8 @@ Vil du erstatte det eksisterende vedlegget? Passord - URL - Adresse + Notes + Notater Expiration @@ -4325,8 +3914,8 @@ Vil du erstatte det eksisterende vedlegget? Brukernavn - Notes - Notater + URL + Adresse Advanced @@ -4346,7 +3935,7 @@ Vil du erstatte det eksisterende vedlegget? Default Sequence - Standard sekvens + Standard rekkefølge Window @@ -4376,10 +3965,6 @@ Vil du erstatte det eksisterende vedlegget? Never Aldri - - Double click to copy value - Dobbeltklikk for å kopiere verdi - Enabled Aktivert @@ -4389,8 +3974,8 @@ Vil du erstatte det eksisterende vedlegget? Deaktivert - Double click to copy to clipboard - Dobbeltklikk for å kopiere til utklippstavlen + Double click to copy value + Dobbeltklikk for å kopiere verdi @@ -4399,10 +3984,6 @@ Vil du erstatte det eksisterende vedlegget? Invalid URL Ugyldig URL - - Duplicate URL - Klon URL - EntryView @@ -4416,11 +3997,7 @@ Vil du erstatte det eksisterende vedlegget? Reset to defaults - Resette til standard - - - + %1 entry(s)... - + %1 oppføring…+ %1 oppføringer… + Resett til standardinnstillinger @@ -4532,7 +4109,7 @@ Dette vil gjøre passordene og sensitiv informasjon sårbare! %n Entry(s) was used by %1 %1 is the name of an application - %n oppføring ble brukt av %1%n oppføringer ble brukt av %1 + %n Oppføring ble brukt av %1%n Oppføringer ble brukt av %1 @@ -4594,7 +4171,7 @@ Dette vil gjøre passordene og sensitiv informasjon sårbare! IconDownloaderDialog Download Favicons - Last ned Favicons + Last ned nettstedsikoner Cancel @@ -4604,7 +4181,7 @@ Dette vil gjøre passordene og sensitiv informasjon sårbare! Having trouble downloading icons? You can enable the DuckDuckGo website icon service in the security section of the application settings. Har du problemer med å laste ned ikoner? -Du kan aktivere DuckDuckGo-ikonetjenesten i sikkerhetsdelen av applikasjonsinnstillingene. +Du kan aktivere DuckDuckGo-nettstedsikontjenesten i seksjonen for sikkerhet i applikasjonsinnstillingene. Close @@ -4632,7 +4209,7 @@ Du kan aktivere DuckDuckGo-ikonetjenesten i sikkerhetsdelen av applikasjonsinnst Already Exists - Eksisterer allerede + Finnes fra før Download Failed @@ -4643,193 +4220,6 @@ Du kan aktivere DuckDuckGo-ikonetjenesten i sikkerhetsdelen av applikasjonsinnst Laster ned nettstedskoner (%1/%2)… - - ImportWizard - - Import Wizard - Importeringsveileder - - - - ImportWizardPageReview - - WizardPage - Veiviserside - - - Entry count: %1 - Antall oppføringer: %1 - - - Group - Gruppe - - - Title - Tittel - - - Username - Brukernavn - - - Password - Passord - - - Url - URL - - - Could not load key file. - - - - Could not open remote database. Password or key file may be incorrect. - - - - - ImportWizardPageSelect - - Form - Skjema - - - Import File Selection - Importer filutvalg - - - Password: - Passord: - - - Key File: - Nøkkelfil: - - - Browse… - Bla gjennom... - - - Import Into: - Importer til: - - - New Database - Ny database - - - No unlocked databases available - Ingen åpne databaser tilgjengelig - - - Existing Database: - Eksisterende database: - - - Import File: - Importer fil: - - - Comma Separated Values (.csv) - Kommaseparerte verdier (.csv) - - - 1Password Export (.1pux) - Eksporter for 1Password (.1pux) - - - 1Password Vault (.opvault) - 1Password-hvelv (.opvault) - - - Bitwarden (.json) - Bitwarden (.json) - - - KeePass 1 Database (.kdb) - KeePass 1-database (.kdb) - - - Open OPVault - Åpne OPVault - - - Select import file - Velg fil å importere - - - All files - Alle filer - - - Key files - Nøkkelfiler - - - Select key file - Velg nøkkelfil - - - Comma Separated Values - Kommaseparerte verdier - - - 1Password Export - Eksporter for 1Password - - - Bitwarden JSON Export - Eksporter som Bitwarden JSON - - - 1Password Vault - 1Password-hvelv - - - KeePass1 Database - KeePass1-database - - - Proton Pass (.json) - - - - Proton Pass JSON Export - - - - Temporary Database - - - - Command: - - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - - - - Input: - - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last commend `exit` has to be sent - - - - - Remote Database (.kdbx) - - - KMessageWidget @@ -4845,7 +4235,7 @@ The command has to exit. In case of `sftp` as last commend `exit` has to be sent Kdbx3Reader Missing database headers - Manglende database-headere + Manglende databasehoder Unable to calculate database key @@ -4853,29 +4243,29 @@ The command has to exit. In case of `sftp` as last commend `exit` has to be sent Unable to issue challenge-response: %1 - Kan ikke utstede utfordringsrespons: %1 + Kan ikke utstede utfordrerrespons: %1 Invalid credentials were provided, please try again. If this reoccurs, then your database file may be corrupt. - Det ble angitt ugyldig legitimasjon, prøv igjen. -Hvis dette gjentar seg, kan databasefilen være skadet. + Det ble angitt ugyldig identifikasjon, prøv igjen. +Hvis dette gjentar seg kan databasefilen være skadet. Header doesn't match hash - Filhode samsvarer ikke med hash-koden + Hode samsvarer ikke med hash-koden Invalid header id size - Ugyldig: Header id size + Ugyldig størrelse på hode-id Invalid header field length: field %1 - Ugyldig feltlengde i hode-id: felt %1 + Ugyldig hodefeltlengde: felt %1 Invalid header data length: field %1, %2 expected, %3 found - Ugyldig lengde i hodedata: felt %1, %2 forventet, %3 funnet + Ugyldig lengde på hodedata: felt %1, %2 forventet, %3 funnet @@ -4883,11 +4273,11 @@ Hvis dette gjentar seg, kan databasefilen være skadet. Invalid symmetric cipher IV size. IV = Initialization Vector for symmetric cipher - Ugyldig: Symmetric cipher IV size. + Ugyldig symmetrisk chiffer IV-størrelse. Unable to issue challenge-response: %1 - Kan ikke utstede utfordringsrespons: %1 + Kan ikke utstede utfordrerrespons: %1 Unable to calculate database key @@ -4898,25 +4288,25 @@ Hvis dette gjentar seg, kan databasefilen være skadet. Kdbx4Reader missing database headers - manglende database-headere + manglende databasehoder Unable to calculate database key: %1 - Kan ikke beregne database nøkkel: %1 + Kan ikke beregne databasenøkkel: %1 Invalid header checksum size - Ugyldig header-sjekksumstørrelse + Ugyldig størrelse på kontrollsum for hode Header SHA256 mismatch - Ikke samsvar med SHA256-header + SHA256 samsvarer ikke i hode Invalid credentials were provided, please try again. If this reoccurs, then your database file may be corrupt. - Det ble angitt ugyldig legitimasjon, prøv igjen. -Hvis dette gjentar seg, kan databasefilen være skadet. + Det ble angitt ugyldig identifikasjon, prøv igjen. +Hvis dette gjentar seg kan databasefilen være skadet. (HMAC mismatch) @@ -4928,19 +4318,19 @@ Hvis dette gjentar seg, kan databasefilen være skadet. Invalid header id size - Ugyldig: Header id size + Ugyldig størrelse på hode-id Invalid header field length: field %1 - Ugyldig feltlengde i hode-id: felt %1 + Ugyldig hodefeltlengde: felt %1 Invalid header data length: field %1, %2 expected, %3 found - Ugyldig lengde i hodedata: felt %1, %2 forventet, %3 funnet + Ugyldig lengde på hodedata: felt %1, %2 forventet, %3 funnet Failed to open buffer for KDF parameters in header - Kunne ikke åpne buffer til KDF-parametere i header + Kunne ikke åpne buffer for KDF-parametere i hode Unsupported key derivation function (KDF) or invalid parameters @@ -4948,11 +4338,11 @@ Hvis dette gjentar seg, kan databasefilen være skadet. Legacy header fields found in KDBX4 file. - Eldre header-felt funnet i KDBX4-fil. + Eldre hodefelt funnet i KDBX4-fil. Invalid inner header id size - Ugyldig: Inner header id size + Ugyldig størrelse på indre hode-id Invalid inner header field length: field %1 @@ -4964,7 +4354,7 @@ Hvis dette gjentar seg, kan databasefilen være skadet. Invalid inner header binary size - Ugyldig: Inner header binary size + Ugyldig binær størrelse for indre hode Unsupported KeePass variant map version. @@ -5040,7 +4430,7 @@ Hvis dette gjentar seg, kan databasefilen være skadet. Unable to calculate database key: %1 - Kan ikke beregne database nøkkel: %1 + Kan ikke beregne databasenøkkel: %1 Failed to serialize KDF parameters variant map @@ -5052,7 +4442,7 @@ Hvis dette gjentar seg, kan databasefilen være skadet. KdbxReader Invalid cipher uuid length: %1 (length=%2) - Ugyldig chifferkode-uuid-lengde: %1 (lengde=%2) + Ugyldig lengde på chifferkode-uuid: %1 (lengde=%2) Unable to parse UUID: %1 @@ -5193,11 +4583,11 @@ Linje %2, kolonne %3 History element with different uuid - Historikkelement med forskjellig uuid + Historikkelement med forskjellige uuid Duplicate custom attribute found - Duplikat: Custom attribute + Duplisert egendefinert attributt funnet Entry string key or value missing @@ -5249,11 +4639,11 @@ Linje %2, kolonne %3 Private key is an attachment but no attachments provided. - Privat nøkkel er et vedlegg, men ingen vedlegg er angitt. + Privatnøkkel er et vedlegg, men ingen vedlegg følger med. Private key is empty - Privat nøkkel er tom + Privatnøkkelen er tom File too large to be a private key @@ -5264,6 +4654,17 @@ Linje %2, kolonne %3 Kunne ikke åpne den private nøkkelen + + KeePass1OpenWidget + + Import KeePass1 Database + Importer KeePass 1-database + + + Unable to open the database. + Kan ikke åpne databasen. + + KeePass1Reader @@ -5326,8 +4727,8 @@ Linje %2, kolonne %3 Invalid credentials were provided, please try again. If this reoccurs, then your database file may be corrupt. - Det ble angitt ugyldig legitimasjon, prøv igjen. -Hvis dette gjentar seg, kan databasefilen være skadet. + Det ble angitt ugyldig identifikasjon, prøv igjen. +Hvis dette gjentar seg kan databasefilen være skadet. Key transformation failed @@ -5492,15 +4893,15 @@ Hvis dette gjentar seg, kan databasefilen være skadet. KeyFileEditWidget Generate a new key file - Opprette en ny nøkkelfil + Opprett en ny nøkkelfil Generate - Lag passord + Opprett Generate a new key file or choose an existing one to protect your database. - Lag en ny nøkkelfil, eller velg en eksisterende nøkkelfil for å beskytte databasen. + Opprett en ny nøkkelfil, eller velg en eksisterende nøkkelfil for å beskytte databasen. Note: Do NOT use a file that may change as that will prevent you from unlocking your database. @@ -5620,6 +5021,10 @@ Er du sikker på at du vil fortsette med denne filen? &Recent Databases &Nylige databaser + + &Import + &Importer + &Export &Eksporter @@ -5640,10 +5045,6 @@ Er du sikker på at du vil fortsette med denne filen? TOTP TOTP - - Tags - Tagger - &Groups &Grupper @@ -5674,7 +5075,7 @@ Er du sikker på at du vil fortsette med denne filen? &Open Database… - &Åpne database... + &Åpne database… &Save Database @@ -5688,26 +5089,46 @@ Er du sikker på at du vil fortsette med denne filen? &New Database… &Ny database… + + Create a new database + Opprett en ny database + &Merge From Database… &Slå sammen fra database… + + Merge from another KDBX database + Slå sammen fra en annen KDBX-database + &New Entry… &Ny oppføring… + + Add a new entry + Legg til en ny oppføring + &Edit Entry… &Endre oppføring… + + View or edit entry + Vis eller endre oppføring + &Delete Entry… - &Slett oppføring… + &Slett oppføring &New Group… &Ny gruppe… + + Add a new group + Legg til ny gruppe + &Edit Group… &Endre gruppe… @@ -5718,7 +5139,7 @@ Er du sikker på at du vil fortsette med denne filen? Download All &Favicons… - Last ned alle &nettstedsikon… + Last ned alle &nettstedsikoner… Sort &A-Z @@ -5734,16 +5155,24 @@ Er du sikker på at du vil fortsette med denne filen? Database &Security… - Databasesikkerhet... + Databasesikkerhet… Database &Reports… Databaserapporter… + + Statistics, health check, etc. + Statistikk, helsesjekk osv. + &Database Settings… &Databaseinnstillinger… + + Database settings + Databaseoppsett + &Clone Entry… &Klone oppføring… @@ -5752,18 +5181,34 @@ Er du sikker på at du vil fortsette med denne filen? Move u&p Flytt o&pp + + Move entry one step up + Flytt oppføring ett trinn opp + Move do&wn Flytt &ned + + Move entry one step down + Flytt oppføring ett trinn ned + Copy &Username Kopier &brukernavn + + Copy username to clipboard + Kopier brukernavn til utklippstavlen + Copy &Password Kopier &passord + + Copy password to clipboard + Kopier passord til utklippstavlen + &Settings &Oppsett @@ -5797,16 +5242,24 @@ Er du sikker på at du vil fortsette med denne filen? &Tittel - Copy &URL - Kopier &URL + Copy title to clipboard + Kopier tittel til utklippstavlen + + + Copy URL to clipboard + Kopier URL til utklippstavlen &Notes &Notater + + Copy notes to clipboard + Kopier notater til utklippstavle + &CSV File… - &CSV Fil… + &CSV-fil… &HTML File… @@ -5816,14 +5269,26 @@ Er du sikker på at du vil fortsette med denne filen? KeePass 1 Database… KeePass 1-database… + + Import a KeePass 1 database + Importer en KeePass 1 database + 1Password Vault… 1Password-hvelv… + + Import a 1Password Vault + Importere et 1Password-hvelv + CSV File… CSV-fil… + + Import a CSV file + Importer en CSV-fil + Show TOTP Vis TOTP @@ -5840,13 +5305,9 @@ Er du sikker på at du vil fortsette med denne filen? Copy &TOTP Kopier &TOTP - - Copy Password and TOTP - Kopier passord og TOTP - E&mpty recycle bin - &Tøm papirkurv + &Tøm papirkurven &Donate @@ -5868,6 +5329,10 @@ Er du sikker på at du vil fortsette med denne filen? &Online Help &Online hjelp + + Go to online documentation + Gå til online-dokumentasjon + &User Guide &Brukerveiledning @@ -5886,7 +5351,7 @@ Er du sikker på at du vil fortsette med denne filen? Add key to SSH Agent - Legg til nøkkel i SSH Agent + Legg til nøkkel i SSH-agent Remove key from SSH Agent @@ -5912,17 +5377,13 @@ Er du sikker på at du vil fortsette med denne filen? Classic (Platform-native) Klassisk (plattformbasert) - - Show Menubar - Vis menylinje - Show Toolbar Vis verktøylinje Show Preview Panel - Vis forhåndsvisningspanelet + Vis Forhåndsvisning-panelet Always on Top @@ -5930,20 +5391,16 @@ Er du sikker på at du vil fortsette med denne filen? Hide Usernames - Masker brukernavn + Skjul brukernavn Hide Passwords - Masker passord + Skjul passord Clone Group... Klone gruppe… - - &XML File… - &XML-fil… - Clear history Slett historikk @@ -5971,8 +5428,10 @@ Expect some bugs and minor issues, this version is meant for testing purposes. - No Tags - Ingen tagger + 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-versjonen din kan føre til at KeePassXC krasjer med et skjermtastatur. +Vi anbefaler at du bruker det AppImage som er tilgjengelig på nedlastingssidene våre. Restore Entry(s) @@ -5996,19 +5455,15 @@ Forvent enkelte feil og mindre problemer, denne versjonen er ment for testformå Toggle window - Vis/skjul vindu + Vis vinduet Quit KeePassXC Avslutt KeePassXC - - %1 Entry(s) - %1 Oppføring%1 Oppføringer - Please present or touch your YubiKey to continue… - Hold inntil eller berør din YubiKey for å fortsette ... + Kobl til og/eller berør YubiKey for å fortsette… Restart Application? @@ -6018,314 +5473,38 @@ Forvent enkelte feil og mindre problemer, denne versjonen er ment for testformå You must restart the application to apply this setting. Would you like to restart now? Du må starte programmet på nytt for å bruke denne innstillingen. Vil du starte på nytt nå? + + Tags + Tagger + + + No Tags + Ingen tagger + + + %1 Entry(s) + %1 oppføring%1 oppføringer + + + Copy Password and TOTP + Kopier passord og TOTP + + + &XML File… + &XML-fil… + + + XML File… + XML-fil… + + + Copy &URL + Kopier &URL + Allow Screen Capture Tillat skjermopptak - - 1Password 1PUX... - 1Password 1PUX - - - Import a 1Password 1PUX file - Importer en 1Password 1PUX-fil - - - Import… - Importer… - - - Passkeys… - Tilgangsnøkler... - - - Import Passkey - Importer tilgangsnøkkel - - - Remote S&ync… - Fjernsynkronisering... - - - Quit Application - Avslutt programmet - - - Open About Dialog - Åpne om-dialogboks - - - Open Database - Åpne database - - - Create Database - Opprett database - - - Merge From Database - Slå sammen fra database - - - Create Entry - Opprett oppføring - - - Edit Entry - Endre oppføring - - - Delete Entry - Slett oppføring - - - Create Group - Opprett gruppe - - - Edit Group - Endre gruppe - - - Delete Group - Slett gruppe - - - Download All Favicons - Last ned alle nettstedsikoner - - - Sort Groups A-Z - Sorter grupper A-Å - - - Sort Groups Z-A - Sorter grupper Å-A - - - Save Database As - Lagre database som - - - Show Database Security - Vis databasesikkerhet - - - Show Database Reports - Vis databaserapporter - - - Show Database Settings - Vis databaseinnstillinger - - - Show Passkeys - Vis tilgangsnøkler - - - Clone Entry - Klon oppføring - - - Move Entry Up - Flytt oppføring opp - - - Move Entry Down - Flytt oppføring ned - - - Copy Username - Kopier brukernavn - - - Copy Password - Kopier passord - - - Show Application Settings - Vis applikasjonsinnstillinger - - - Show Password Generator - Vis passordgenerator - - - Remove Passkey From Entry - Slett tilgangsnøkkel fra oppføring - - - Perform Auto-Type: {USERNAME} - Utfør autoskriv: {BRUKERNAVN} - - - Perform Auto-Type: {USERNAME}{ENTER} - Utfør autoskriv: {BRUKERNAVN}{ENTER} - - - Perform Auto-Type: {PASSWORD} - Utfør autoskriv: {PASSORD} - - - Perform Auto-Type: {PASSWORD}{ENTER} - Utfør autoskriv: {PASSORD}{ENTER} - - - Perform Auto-Type: {TOTP} - Utfør autoskriv: {TOTP} - - - Copy Title - Kopier tittel - - - Copy URL - Kopier URL - - - Copy Notes - Kopier notater - - - Export to CSV - Eksporter til CSV - - - Export to HTML - Eksporter til HTML - - - Import KeePass1 Database - Importer KeePass 1-database - - - Import 1Password Vault - Importer 1Password-hvelv - - - Import CSV File - Importer CSV-fil - - - Show TOTP QR Code - Vis TOTP QR-kode - - - Set up TOTP - Sett opp TOTP - - - Empty Recycle Bin - Tøm papirkurv - - - Open Donation Website - Åpne donasjonsnettsted - - - Open Bug Report - Åpne feilrapport - - - Open Online Documentation - Åpne online-dokumentasjon - - - Open Keyboard Shortcuts Guide - Åpne hurtigtast-guiden - - - Save Database Backup - Lagre database-backup - - - SSH Agent: Add Key - SSH-agent: Legg til nøkkel - - - SSH Agent: Remove Key - SSH-agent: Fjern nøkkel - - - Toggle Compact Mode - Veksle kompakt modus av/på - - - Set Theme: Automatic - Angi tema: automatisk - - - Set Theme: Light - Angi tema: lys - - - Set Theme: Dark - Angi tema: mørk - - - Set Theme: Classic - Angi tema: klassisk - - - Toggle Show Menubar - Vis/skjul menylinje - - - Toggle Show Toolbar - Vis/skjul verktøylinje - - - Toggle Show Preview Panel - Vis/skjul forhåndsvisningspanelet - - - Toggle Always on Top - Veksle alltid på toppen av/på - - - Toggle Hide Usernames - Vis/skjul brukernavn - - - Toggle Hide Passwords - Vis/skjul passord - - - Export to XML - Eksporter til XML - - - Toggle Allow Screen Capture - Veksle tillat skjermopptak av/på - - - Show Group Panel - - - - Toggle Show Group Panel - - - - Setup Remote Sync… - - - - Password Generator - Passordgenerator - - - E&xpire Entry… - - - - Clear SSH Agent - - - - Clear all identities in ssh-agent - - ManageDatabase @@ -6362,7 +5541,7 @@ Forvent enkelte feil og mindre problemer, denne versjonen er ment for testformå Reset - Nullstill + Tilbakestill Reset any remembered decisions for this application @@ -6377,15 +5556,35 @@ Forvent enkelte feil og mindre problemer, denne versjonen er ment for testformå Relocating %1 [%2] - Flytter %1 [%2] + Omplasserer %1 [%2] Overwriting %1 [%2] Overskriver %1 [%2] + + older entry merged from database "%1" + eldre oppføring slått sammen fra database "%1" + + + Adding backup for older target %1 [%2] + Legger til sikkerhetskopi for eldre mål %1 [%2] + + + Adding backup for older source %1 [%2] + Legger til sikkerhetskopi for eldre kilde %1 [%2] + + + Reapplying older target entry on top of newer source %1 [%2] + Gjenbruker eldre måloppføring på nytt over den nyere kilden %1 [%2] + + + Reapplying older source entry on top of newer target %1 [%2] + Gjenbruker eldre kildeoppføring på nytt over det nyere målet %1 [%2] + Synchronizing from newer source %1 [%2] - Synkroniserer fra den nyere kilden %1 [%2] + Synkroniserer fra nyere kilde %1 [%2] Synchronizing from older source %1 [%2] @@ -6442,16 +5641,24 @@ Forvent enkelte feil og mindre problemer, denne versjonen er ment for testformå Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. Her kan du justere innstillingene for databasekryptering. Ikke bekymre deg, du kan endre dem senere i databaseinnstillingene. + + Advanced Settings + Avanserte innstillinger + + + Simple Settings + Enkle innstillinger + NewDatabaseWizardPageDatabaseKey Database Credentials - Legitimasjon for database + Database-akkreditering A set of credentials known only to you that protects your database. - Et sett med identifikasjoner som bare er kjent for deg, som beskytter databasen. + Et sett med akkreditiv som bare er kjent for deg, som beskytter databasen. @@ -6469,32 +5676,13 @@ Forvent enkelte feil og mindre problemer, denne versjonen er ment for testformå NewDatabaseWizardPageMetaData General Database Information - Generell database informasjon + Generell databaseinformasjon Please fill in the display name and an optional description for your new database: Fyll ut visningsnavnet og en valgfri beskrivelse av den nye databasen: - - NewEntryAttachmentsDialog - - Attachment name cannot be empty - - - - Attachment with the same name already exists - - - - Save attachment - - - - New entry attachment - - - NixUtils @@ -6530,7 +5718,7 @@ Forvent enkelte feil og mindre problemer, denne versjonen er ment for testformå Malformed OpData01 due to a failed HMAC - Deformert OpData01 på grunn av en mislykket HMAC + Feilaktig OpData01 på grunn av en mislykket HMAC Unable to process clearText in place @@ -6541,6 +5729,15 @@ Forvent enkelte feil og mindre problemer, denne versjonen er ment for testformå Forventet %1 byte med klartekst, funnet %2 + + OpVaultOpenWidget + + Read Database did not produce an instance +%1 + Les database produserte ikke en forekomst +%1 + + OpVaultReader @@ -6572,11 +5769,11 @@ Forvent enkelte feil og mindre problemer, denne versjonen er ment for testformå OpenSSHKey Invalid key file, expecting an OpenSSH key - Ugyldig nøkkelfil. Forventer OpenSSH-nøkkel + Ugyldig nøkkelfil, forventer OpenSSH-nøkkel PEM boundary mismatch - ‘PEM boundary’ samsvarer ikke + PEM-grense samsvarer ikke Base64 decoding failed @@ -6588,7 +5785,7 @@ Forvent enkelte feil og mindre problemer, denne versjonen er ment for testformå Key file magic header id invalid - ’Magic header id’ i nøkkelfil er ugyldig + Nøkkelfilens filtypesignatur-id er ugyldig Found zero keys @@ -6600,7 +5797,7 @@ Forvent enkelte feil og mindre problemer, denne versjonen er ment for testformå Corrupted key file, reading private key failed - Skadet nøkkelfil. Lesing av privat nøkkel feilet + Skadet nøkkelfil, lesing av privat nøkkel feilet Unsupported key type: %1 @@ -6614,10 +5811,6 @@ Forvent enkelte feil og mindre problemer, denne versjonen er ment for testformå Unknown cipher: %1 Ukjent chiffer: %1 - - AES-256/GCM is currently not supported - AES-256/GCM støttes for øyeblikket ikke - Passphrase is required to decrypt this key Passordfrase er nødvendig for å dekryptere denne nøkkelen @@ -6644,7 +5837,7 @@ Forvent enkelte feil og mindre problemer, denne versjonen er ment for testformå Decryption failed, wrong passphrase? - Dekryptering feilet. Feil passordfrase? + Dekryptering feilet, feil passordfrase? Unexpected EOF while reading key @@ -6683,180 +5876,8 @@ Forvent enkelte feil og mindre problemer, denne versjonen er ment for testformå Uventet EOF ved skriving av privat nøkkel - (encrypted) - (kryptert) - - - - OpenSSHKeyGenDialog - - SSH Key Generator - SSH nøkkelgenerator - - - Type - Type - - - Bits - Biter - - - Comment - Kommentar - - - - PasskeyExportDialog - - KeePassXC - Passkey Export - KeePassXC - Eksport av tilgangsnøkkel - - - Filenames will be generated with title and .passkey file extension. - Filnavn vil bli generert med tittel og .passkey-filtype. - - - Export entries - Eksporter oppføringer - - - Export Selected - Eksporter valgte - - - Cancel - Avbryt - - - Export to folder - Eksporter til mappe - - - Export the following passkey entries. - Eksporter følgende tilgangsnøkkeloppføringer. - - - - PasskeyExporter - - KeePassXC: Passkey Export - KeePassXC: Eksport av tilgangsnøkkel - - - File "%1.passkey" already exists. -Do you want to overwrite it? - - Filen "%1.passkey" finnes allerede. -Vil du erstatte den? - - - Cannot open file - Kan ikke åpne fil - - - Cannot open file "%1" for writing. - Kan ikke åpne fil "%1" for skriving. - - - Cannot write to file - Kan ikke skrive til fil - - - - PasskeyImportDialog - - KeePassXC - Passkey Import - KeePassXC - Import av tilgangsnøkkel - - - Username: %1 - Brukernavn: %1 - - - Group - Gruppe - - - Database - Database - - - Import Passkey - Importer tilgangsnøkkel - - - Import - Importer - - - Cancel - Avbryt - - - Entry - Oppføring - - - Create new entry - Opprett ny oppføring - - - Relying Party: %1 - Tiltrodd part: %1 - - - Import the following passkey: - Importer følgende tilgangsnøkkel: - - - Import the following passkey to this entry: - Importer følgende tilgangsnøkkel til denne oppføringen: - - - Default passkeys group (Imported Passkeys) - Standardgruppe for tilgangsnøkler (importerte tilgangsnøkler) - - - - PasskeyImporter - - Passkey file - Tilgangsnøkkelfil - - - All files - Alle filer - - - Cannot open file - Kan ikke åpne fil - - - Cannot open file "%1" for reading. - Kan ikke åpne filen "%1" for lesing. - - - Open passkey file - Åpne tilgangsnøkkelfil - - - Cannot import passkey - Kunne ikke importere tilgangsnøkkel - - - Cannot import passkey file "%1". Data is missing. - Kan ikke importere tilgangsnøkkelfil "%1". Data mangler. - - - Cannot import passkey file "%1". -The following data is missing: -%2 - - - - Cannot import passkey file "%1". Private key is missing or malformed. - + AES-256/GCM is currently not supported + AES-256/GCM støttes for øyeblikket ikke @@ -6899,7 +5920,7 @@ The following data is missing: <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>Et passord er den primære metoden for å sikre databasen.</p><p>Gode passord er lange og unike. KeePassXC kan generere et for deg.</p> + <p>Et passord er den primære metoden for å sikre databasen.</p><p>Gode passord er lange og unike. KeePassXC kan opprette et for deg.</p> Passwords do not match. @@ -6910,7 +5931,7 @@ The following data is missing: PasswordGeneratorWidget Generate Password - Generér passord + Opprett passord strength @@ -6923,7 +5944,7 @@ The following data is missing: Generated password - Generert passord + Opprettet passord %p% @@ -6931,7 +5952,7 @@ The following data is missing: Regenerate password - Generer passord på nytt + Regenerer passord Copy password @@ -7007,7 +6028,7 @@ The following data is missing: Additional characters to use for the generated password - Flere tegn som skal brukes i det genererte passordet + Flere tegn som skal brukes i det oppretta passordet Additional characters @@ -7027,11 +6048,11 @@ The following data is missing: Character set to exclude from generated password - Teg som skal utelates fra generert passord + Tegnsett som skal ekskluderes fra opprettet passord Excluded characters - Utelatte tegn + Ekskluderte tegn Also choose from: @@ -7061,6 +6082,10 @@ The following data is missing: Word Count: Antall ord: + + Character Count: + Antall tegn: + Word Case: Ord-format: @@ -7073,6 +6098,10 @@ The following data is missing: Add custom wordlist Legg til egendefinert ordliste + + character + tegn + Close Lukk @@ -7099,7 +6128,7 @@ The following data is missing: Title Case - Tittel-format + Overskrifts-format (SYSTEM) @@ -7109,30 +6138,6 @@ The following data is missing: 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 - Confirm Delete Wordlist Bekreft sletting av ordlisten @@ -7180,20 +6185,32 @@ Vil du erstatte den? Spesialtegn - passwordLength - + Password Quality: %1 + Passordkvalitet: %1 - Characters: %1 - + Poor + Password quality + Dårlig - MIXED case - + Weak + Password quality + Svak - Excluded characters: "0", "1", "l", "I", "O", "|", "﹒", "B", "8", "G", "6" - + Good + Password quality + Bra + + + Excellent + Password quality + Utmerket + + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + Ekskluderte tegn: "0", "1", "l", "I", "O", "|", "﹒" @@ -7243,8 +6260,8 @@ Vil du erstatte den? Utmerket - Toggle password visibility using Control + H. Open the password generator using Control + G. - Vis/skjul synlig passord med Control + H. Åpne passordgeneratoren med Control + G. + Toggle password visibilty using Control + H. Open the password generator using Control + G. + Vis/skjul synlige passord ved hjelp av Control + H. Åpne passordgeneratoren ved hjelp av Control + G. @@ -7262,21 +6279,6 @@ Vil du erstatte den? Trykk &Tab mellom tegn - - PreviewEntryAttachmentsDialog - - Preview entry attachment - - - - No preview available - - - - Image format not supported - - - QMessageBox @@ -7315,10 +6317,6 @@ Vil du erstatte den? Continue Fortsett - - Continue with weak password - Fortsett med svakt passord - QObject @@ -7364,7 +6362,7 @@ Vil du erstatte den? No URL provided - Ingen URL angitt + Ingen URL oppgitt No logins found @@ -7428,7 +6426,7 @@ Vil du erstatte den? Generate a password for the entry. - Generer et passord til oppføringa. + Opprett et passord i oppføringa. Add a new entry to a database. @@ -7472,7 +6470,7 @@ Vil du erstatte den? Group %1 not found. - Gruppe %1 ikke funnet. + Gruppen %1 ikke funnet. Successfully added group %1. @@ -7516,7 +6514,7 @@ Vil du erstatte den? Password for '%1' has been leaked %2 time(s)! - Passordet til %1 er lekket %2 gang!Passordet til '%1' er lekket %2 ganger! + Passordet for %1 er lekket %2 gang!Passordet for %1 er lekket %2 ganger! Password for '%1' has been leaked! @@ -7650,7 +6648,7 @@ Vil du erstatte den? Entry with path %1 has no TOTP set up. - Oppføringen med bane %1 har ingen TOTP konfigurert. + Oppføring med bane %1 har ingen TOTP konfigurert. ERROR: attribute %1 is ambiguous, it matches %2. @@ -7666,7 +6664,7 @@ Vil du erstatte den? Clearing the clipboard in %1 second(s)... - Tømmer utklippstavlen på %1 sekund…Tømmer utklippstavlen på %1 sekunder… + Tømmer utklippstavlen på %1 sekund...Tømmer utklippstavlen på %1 sekunder... Clipboard cleared! @@ -7712,13 +6710,9 @@ Vil du erstatte den? Too many arguments provided. Det er angitt for mange argumenter. - - Path of the database. - Database-sti. - Target decryption time in MS for the database. - Mål-dekrypteringstid i MS for databasen. + Ønsket dekrypteringstid i ms for databasen. time @@ -7736,6 +6730,10 @@ Vil du erstatte den? Create a new database. Opprett en ny database. + + Path of the database. + Database-sti. + Invalid decryption time %1. Ugyldig dekrypteringstid %1. @@ -7778,163 +6776,11 @@ Vil du erstatte den? Successfully created new database. - Vellykket oppretting ny database. - - - Unset the password for the database. - Slett passordet for databasen. - - - Unset the key file for the database. - Slett nøkkelfilen for databasen. - - - Edit a database. - Redigere en database. - - - Cannot use %1 and %2 at the same time. - Kan ikke bruke %1 og %2 samtidig. - - - Could not change the database key. - Kunne ikke endre databasenøkkelen. - - - Database was not modified. - Databasen ble ikke endret. - - - Writing the database failed: %1 - Skriving til databasen mislyktes: %1 - - - Successfully edited the database. - Vellykket redigering av databasen. - - - Cannot remove password: The database does not have a password. - Kan ikke fjerne passordet: Databasen har ikke passord. - - - Cannot remove file key: The database does not have a file key. - Kan ikke fjerne nøkkelfilen: Databasen har ikke en nøkkelfil. - - - Loading the new key file failed: %1 - Lasting av den nye nøkkelfilen mislyktes: %1 - - - Found unexpected Key type %1 - Fant uventet nøkkeltype %1 - - - Cannot remove all the keys from a database. - Kan ikke fjerne alle nøklene fra en database. - - - Show a database's information. - Vise informasjon om en database. - - - UUID: - UUID: - - - Name: - Navn: - - - Description: - Beskrivelse: - - - Cipher: - Chiffer: - - - KDF: - KDF: - - - Recycle bin is enabled. - Papirkurv er aktivert. - - - Recycle bin is not enabled. - Papirkurv er ikke aktivert. - - - Location - Plassering - - - Database created - Database opprettet - - - Last saved - Sist lagret - - - Unsaved changes - Ikke lagrede endringer - - - yes - ja - - - no - nei - - - Number of groups - Antall grupper - - - Number of entries - Antall oppføringer - - - Number of expired entries - Antall utløpte oppføringer - - - Unique passwords - Unike passord - - - Non-unique passwords - Dupliserte passord - - - Maximum password reuse - Maksimal gjenbruk av passord - - - Number of short passwords - Antall korte passord - - - Number of weak passwords - Antall svake passord - - - Entries excluded from reports - Oppføringer som er utelatt fra rapporter - - - Average password length - Gjennomsnittlig passordlengde - - - %1 characters - %1 tegn + Opprettet ny database. Word count for the diceware passphrase. - Antall ord i diceware-passordfrasen. + Antall ord i ordpassordfrasen. count @@ -7944,17 +6790,21 @@ Vil du erstatte den? Wordlist for the diceware generator. [Default: EFF English] - Ordliste for diceware-generatoren. + Ordliste for ordgeneratoren. [Standard: EFF engelsk] Generate a new random diceware passphrase. - Generer en ny tilfeldig diceware passordfrase. + Opprett en ny tilfeldig ordpassordfrase. Invalid word count %1 Ugyldig ordtelling %1 + + The word list is too small (< 1000 items) + Ordlisten er for liten (< 1000 element) + Title for the entry. Tittel for oppføringa. @@ -7979,6 +6829,10 @@ Vil du erstatte den? Enter new password for entry: Skriv inn nytt passord for oppføring: + + Writing the database failed: %1 + Skriving til databasen mislyktes: %1 + Successfully edited entry %1. Endring av oppføring %1 er fullført. @@ -8021,7 +6875,7 @@ Vil du erstatte den? Type: Dict+Leet - Type: ordbok + erstatning + Type: Ordliste + erstatning Type: User Words @@ -8099,6 +6953,10 @@ Vil du erstatte den? Exit interactive mode. Avslutt interaktiv modus. + + Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. + Format som skal brukes ved eksport. Tilgjengelige valg er XML eller CSV. XML er standardvalg. + Exports the content of a database to standard output in the specified format. Eksporterer innholdet av en database til standard output i det angitte formatet. @@ -8113,7 +6971,7 @@ Vil du erstatte den? Length of the generated password - Lengden på det genererte passordet + Lengden på det oppretta passordet length @@ -8153,7 +7011,7 @@ Vil du erstatte den? Exclude similar looking characters - Ekskluder bokstaver/tegn som ser like ut + Ekskluder tegn som ser like ut Include characters from every selected group @@ -8161,7 +7019,7 @@ Vil du erstatte den? Generate a new random password. - Generer et nytt tilfeldig passord. + Opprett et nytt tilfeldig passord. Invalid password length %1 @@ -8173,7 +7031,7 @@ Vil du erstatte den? Display command help. - Vis kommandohjelp. + Vis hjelp for kommandoer. Available commands: @@ -8199,6 +7057,106 @@ Vil du erstatte den? Successfully imported database. Databasen er importert. + + Show a database's information. + Vise informasjon om en database. + + + UUID: + UUID: + + + Name: + Navn: + + + Description: + Beskrivelse: + + + Cipher: + Chiffer: + + + KDF: + KDF: + + + Recycle bin is enabled. + Papirkurven er aktivert. + + + Recycle bin is not enabled. + Papirkurven er ikke aktivert. + + + Location + Plassering + + + Database created + Database opprettet + + + Last saved + Sist lagret + + + Unsaved changes + Ikke lagrede endringer + + + yes + ja + + + no + nei + + + Number of groups + Antall grupper + + + Number of entries + Antall oppføringer + + + Number of expired entries + Antall utløpte oppføringer + + + Unique passwords + Unike passord + + + Non-unique passwords + Dupliserte passord + + + Maximum password reuse + Maksimal gjenbruk av passord + + + Number of short passwords + Antall korte passord + + + Number of weak passwords + Antall svake passord + + + Entries excluded from reports + Oppføringer som er utelatt fra rapporter + + + Average password length + Gjennomsnittlig passordlengde + + + %1 characters + %1 tegn + Unknown command %1 Ukjent kommando %1 @@ -8239,7 +7197,7 @@ Tilgjengelige kommandoer: Path of the group to list. Default is / - Sti til gruppen som skal listes. Standard er / + Sti til gruppen som skal listes. Standardinnstilling er / Cannot find group %1. @@ -8247,7 +7205,7 @@ Tilgjengelige kommandoer: Use the same credentials for both database files. - Bruk samme identifikasjon for begge databasefilene. + Bruk samme identifikasjon til begge databasefilene. Key file of the database to merge from. @@ -8285,7 +7243,7 @@ Tilgjengelige kommandoer: Unable to save database to file : %1 - Kan ikke lagre databasen til fil :%1 + Kan ikke lagre databasen til fil : %1 Successfully merged %1 into %2. @@ -8301,7 +7259,7 @@ Tilgjengelige kommandoer: Path of the entry to move. - Stien til oppføringen som skal flyttes. + Sti til oppføringen som skal flyttes. Path of the destination group. @@ -8333,11 +7291,11 @@ Tilgjengelige kommandoer: Successfully recycled entry %1. - Flyttet oppføring %1 til søppelbøtta. + Resirkulerte oppføring %1. Successfully deleted entry %1. - Oppføring %1 er slettet. + Slettet oppføring %1. Path of the group to remove. @@ -8353,7 +7311,7 @@ Tilgjengelige kommandoer: Successfully deleted group %1. - Slettet gruppen %1. + Slettet gruppe %1. Find entries quickly. @@ -8371,10 +7329,6 @@ Tilgjengelige kommandoer: Show the protected attributes in clear text. Vis de beskyttede attributtene i klartekst. - - Show all the attributes of the entry. - Vis alle attributtene for oppføringen. - Show the attachments of the entry. Vise vedleggene til oppføringen. @@ -8445,10 +7399,6 @@ Vurder å lage en ny nøkkelfil. Invalid YubiKey serial %1 Ugyldig YubiKey-serienummer %1 - - Please present or touch your YubiKey to continue. - Koble til eller berør YubiKey for å fortsette. - Enter password to encrypt database (optional): Skriv inn passord for å kryptere databasen (valgfritt): @@ -8687,9 +7637,21 @@ Kjerne: %3 %4 file empty fil tom + + malformed string + Ugyldig streng + + + missing closing quote + Manglende avsluttende anførselstegn + + + %1: (row, col) %2,%3 + %1: (rad, kolonne) %2,%3 + AES 256-bit - AES 256-biter + AES 256-bit Twofish 256-bit @@ -8717,15 +7679,15 @@ Kjerne: %3 %4 Existing single-instance lock file is invalid. Launching new instance. - Eksisterende enbrukermodus lock-fil er ugyldig. Starter ny instans. + Eksisterende enbrukermodus låsefil er ugyldig. Starter ny instans. The lock file could not be created. Single-instance mode disabled. - Lock-filen kunne ikke opprettes. Enbrukermodus deaktivert. + Låsefilen kunne ikke opprettes. Enbrukermodus deaktivert. Clearing the clipboard in %1 second(s)… - Tømmer utklippstavlen om %1 sekund…Tømmer utklippstavlen om %1 sekunder… + Tømmer utklippstavlen på %1 sekund...Tømmer utklippstavlen på %1 sekunder... Group @@ -8839,15 +7801,15 @@ Kjerne: %3 %4 KeePassXC - cross-platform password manager - KeePassXC - en multiplattforms passordhåndterer + KeePassXC - multiplattform passordbehandler filenames of the password databases to open (*.kdbx) - Filnavn på passord-databasene som skal åpnes (*.kdbx) + filnavn på passorddatabasene som skal åpnes (*.kdbx) path to a custom config file - Sti til tilpasset konfigurasjonsfil + sti til tilpasset konfigurasjonsfil path to a custom local config file @@ -8859,11 +7821,19 @@ Kjerne: %3 %4 key file of the database - Database-nøkkelfil + database-nøkkelfil read password of the database from stdin - Les database-passord fra standard input + les database-passord fra 'stdin' + + + allow app screen recordering and screenshots + tillat skjermopptaker og skjermdumper for apper + + + Locked databases. + Låste databaser. Database failed to lock. @@ -8873,10 +7843,6 @@ Kjerne: %3 %4 Another instance of KeePassXC is already running. En annen instans av KeePassXC kjører allerede. - - KeePassXC is not running. No open database to lock - KeePassXC kjører ikke. Ingen åpen database å låse - Fatal error while testing the cryptographic functions. Alvorlig feil ved testing av de kryptografiske funksjonene. @@ -8920,299 +7886,70 @@ Kjerne: %3 %4 Ugyldig KDF - Access to all entries is denied - Tilgang til alle oppføringer nektes + Please present or touch your YubiKey to continue. + Kobl til og/eller berør YubiKey for å fortsette. - allow screenshots and app recording (Windows/macOS) - tillat skjermdumper og app-opptak (Windows/macOS) + Show all the attributes of the entry. + Vis alle attributtene for oppføringen. + + + Edit a database. + Redigere en database. + + + Could not change the database key. + Kunne ikke endre databasenøkkelen. + + + Database was not modified. + Databasen ble ikke endret. + + + Successfully edited the database. + Vellykket redigering av databasen. + + + Loading the new key file failed: %1 + Lasting av den nye nøkkelfilen mislyktes: %1 + + + Unset the password for the database. + Slett passordet for databasen. + + + Unset the key file for the database. + Slett nøkkelfilen for databasen. + + + Cannot use %1 and %2 at the same time. + Kan ikke bruke %1 og %2 samtidig. + + + Cannot remove all the keys from a database. + Kan ikke fjerne alle nøklene fra en database. + + + Cannot remove password: The database does not have a password. + Kan ikke fjerne passordet: Databasen har ikke passord. + + + Cannot remove file key: The database does not have a file key. + Kan ikke fjerne nøkkelfilen: Databasen har ikke en nøkkelfil. + + + Found unexpected Key type %1 + Fant uventet nøkkeltype %1 Set the key file for the database. -This option is deprecated, use --set-key-file instead. - +This options is deprecated, use --set-key-file instead. + Angi nøkkelfilen for databasen. +Disse alternativene er utdatert, bruk --set-key-file i stedet. - Databases have been locked. - Databasen har blitt låst. - - - Attestation not supported - Attestasjon støttes ikke - - - Credential is excluded - Identifikasjon er utelatt - - - Passkeys request canceled - Forespørsel om tilgangsnøkler kansellert - - - Invalid user verification - Ugyldig brukerverifikasjon - - - Empty public key - Tom offentlig nøkkel - - - Invalid URL provided - Angitt URL er ugyldig - - - Passkeys - Tilgangsnøkler - - - AES initialization failed - AES-initialisering mislyktes - - - AES encrypt failed - AES-kryptering mislyktes - - - Failed to store in Linux Keyring - Kunne ikke lagre i Linux-nøkkelring - - - Polkit returned an error: %1 - Polkit returnerte en feil: %1 - - - Could not locate key in keyring - Kunne ikke finne nøkkel i nøkkelring - - - Could not read key in keyring - Kunne ikke lese nøkkel i nøkkelring - - - AES decrypt failed - AES-dekryptering mislyktes - - - No Polkit authentication agent was available - Ingen Polkit-autentiseringsagent var tilgjengelig - - - Polkit authorization failed - Polkit-autorisasjon mislyktes - - - No Quick Unlock provider is available - Ingen hurtigopplåsings-tjeneste er tilgjengelig - - - Failed to init KeePassXC crypto. - Initialisering av KeePassXC krypto feilet. - - - Failed to encrypt key data. - Kryptering av nøkkeldata feilet. - - - Failed to get Windows Hello credential. - Henting av identifikasjon fra Windows Hello feilet. - - - Failed to decrypt key data. - Dekryptering av nøkkeldata feilet. - - - Origin is empty or not allowed - - - - Effective domain is not a valid domain - - - - Origin and RP ID do not match - - - - No supported algorithms were provided - - - - Wait for timer to expire - Vent til tidtakeren utløper - - - Challenge is shorter than required minimum length - - - - user.id does not match the required length - - - - Favorite - Tag for favorite entries - Favoritt - - - File does not exist. - Filen eksisterer ikke. - - - Cannot open file: %1 - Kunne ikke åpne fil: %1 - - - Cannot parse file: %1 at position %2 - - - - Failed to decrypt json file: %1 - - - - Invalid encKeyValidation field - - - - Invalid cipher list within encKeyValidation field - - - - Wrong password - Feil passord - - - Invalid encrypted data field - - - - Invalid cipher list within encrypted data field - - - - Cannot initialize cipher - - - - Cannot decrypt data - Kan ikke dekryptere data - - - Bitwarden Import - Importer fra Bitwarden - - - Archived - Tag for archived entries - Arkivert - - - Invalid 1PUX file format: Not a valid ZIP file. - - - - Invalid 1PUX file format: Missing export.data - - - - 1Password Import - Importer fra 1Password - - - Enter Shortcut - Skriv in snarvei - - - Action - Handling - - - Shortcuts - Snarveier - - - Unknown passkeys error - - - - Invalid KDF iterations, cannot decrypt json file - - - - Unsupported format, ensure your Bitwarden export is password-protected - - - - Only PBKDF and Argon2 are supported, cannot decrypt json file - - - - Reset Shortcuts - Tilbakestill snarveier - - - Double click an action to change its shortcut - Dobbeltrykk på en handling for å endre snarveien - - - Filter... - Filtrer... - - - Shortcut Conflict - Snarveikonflikt - - - Shortcut %1 conflicts with '%2'. Overwrite shortcut? - - - - Cannot generate valid passphrases because the wordlist is too short - - - - Encrypted files are not supported. - - - - Proton Pass Import - - - - Delete plugin data? - Slett programtillegg-data? - - - Delete plugin data from Entry(s)? - - - - Passkey - Tilgangsnøkkel - - - Format to use when exporting. Available choices are 'xml', 'csv' or 'html'. Defaults to 'xml'. - - - - start minimized to the system tray - - - - malformed string, possible unescaped delimiter - - - - missing closing delimiter - - - - %1, row: %2, column: %3 - - - - Tags - Tagger + KeePassXC is not running. No open database to lock + KeePassXC kjører ikke. Ingen åpen database å låse @@ -9249,39 +7986,20 @@ This option is deprecated, use --set-key-file instead. Intern zlib-feil: - - RemoteHandler - - Command `%1` did not finish in time. Process was killed. - - - - Failed to upload merged database. Command `%1` did not finish in time. Process was killed. - - - - Invalid download parameters provided. - - - - Command `%1` failed to download database. - - - - Invalid database pointer or upload parameters provided. - - - - Command `%1` exited with status code: %2 - - - - Failed to upload merged database. Command `%1` exited with status code: %2 - - - ReportsWidgetBrowserStatistics + + Exclude expired entries from the report + Utelat utløpte oppføringer fra rapporten + + + Show only entries which have URL set + Vis bare oppføringer med registrert URL + + + Show only entries which have browser settings in custom data + Vis bare oppføringer med egendefinerte nettleserinnstillinger + Double-click entries to edit. Dobbeltklikk på oppføringer som skal endres. @@ -9312,7 +8030,7 @@ This option is deprecated, use --set-key-file instead. This entry is being excluded from reports - Denne oppføringen blir utelatt fra rapporter + Denne oppføringen utelates fra rapporter Please wait, browser statistics is being calculated… @@ -9340,59 +8058,50 @@ This option is deprecated, use --set-key-file instead. Delete Entry(s)… - Slett oppføring...Slett oppføringer... + Slett oppføringer... Exclude from reports Utelat fra rapporter - - Expire Entry(s)… - - - - Only show entries that have a URL - Vis bare oppføringer som har en URL - - - Only show entries that have been explicitly allowed or denied - Vis kun oppføringer som har blitt eksplisitt tillatt eller nektet - - - Show expired entries - Vis utløpte oppføringer - - - (Expired) - (Utløpt) - - - Delete plugin data from Entry(s)… - - ReportsWidgetHealthcheck - Show expired entries - Vis utløpte oppføringer + Exclude expired entries from the report + Utelat utløpte oppføringer fra rapporten - (Expired) - (Utløpt) + Also show entries that have been excluded from reports + Vis også oppføringer som er utelatt fra rapporter Hover over reason to show additional details. Double-click entries to edit. Hold pekeren over årsaken for å vise flere detaljer. Dobbeltklikk på oppføringer for å redigere. + + Bad + Password quality + Dårlig + Bad — password must be changed - Dårlig – passordet må endres + Utilfredsstillende – passordet må endres + + + Poor + Password quality + Dårlig Poor — password should be changed Dårlig – passordet bør endres + + Weak + Password quality + Svak + Weak — consider changing the password Svakt – vurder å endre passordet @@ -9403,7 +8112,7 @@ This option is deprecated, use --set-key-file instead. This entry is being excluded from reports - Denne oppføringen ekskluderes fra rapporter + Denne oppføringen utelates fra rapporter Please wait, health data is being calculated… @@ -9423,11 +8132,11 @@ This option is deprecated, use --set-key-file instead. Score - Poeng + Skår Reason - Grunn + Årsak Edit Entry… @@ -9439,26 +8148,18 @@ This option is deprecated, use --set-key-file instead. Exclude from reports - Ekskluder fra rapporter - - - Expire Entry(s)… - - - - Show entries that have been excluded from reports - Vis oppføringer som er ekskluderte fra rapporter + Utelat fra rapporter ReportsWidgetHibp CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. - FORSIKTIG: Denne rapporten krever innsending av informasjon til den elektroniske tjenesten 'Have I Been Pwned' (https://haveibeenpwned.com). Hvis du fortsetter hashes databasepassordene kryptografisk, og de fem første tegnene i disse hash-kodene sendes på sikker måte til denne tjenesten. Databasen forblir sikker og kan ikke rekonstrueres ut fra denne informasjonen. Imidlertid vil antall passord du sender og IP-adressen din bli avslørt for denne tjenesten. + FORSIKTIG: Denne rapporten krever innsending av informasjon til den elektroniske tjenesten Have I Been Pwned (https://haveibeenpwned.com). Hvis du fortsetter hashes databasepassordene kryptografisk, og de fem første tegnene i disse nøkkelkodene sendes på sikker måte til denne tjenesten. Databasen forblir sikker og kan ikke rekonstrueres ut fra denne informasjonen. Imidlertid vil antall passord du sender og IP-adressen din bli avslørt for denne tjenesten. Perform Online Analysis - Utfør online analyse + Utfør analyse online Also show entries that have been excluded from reports @@ -9466,7 +8167,7 @@ This option is deprecated, use --set-key-file instead. This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. - Denne versjonen av KeePassXC har ikke nettverksfunksjoner. Nettverk kreves for å kontrollere passordene dine mot 'har-jeg-blitt-overvunnet'-databaser. + Denne versjonen av KeePassXC har ikke nettverksfunksjoner. Nettverk kreves for å kontrollere passordene dine mot har-jeg-blitt-overvunnet-databaser (HIBP). Congratulations, no exposed passwords! @@ -9490,7 +8191,7 @@ This option is deprecated, use --set-key-file instead. This entry is being excluded from reports - Denne oppføringen ekskluderes fra rapporter + Denne oppføringen blir utelatt fra rapporter once @@ -9542,85 +8243,14 @@ This option is deprecated, use --set-key-file instead. Exclude from reports - Ekskluder fra rapporter - - - Expire Entry(s)… - - - - - ReportsWidgetPasskeys - - Export - Eksporter - - - Import - Importer - - - List of entry URLs - Liste over URL'er i oppføringer - - - Title - Tittel - - - Path - Sti - - - Username - Brukernavn - - - URLs - URL'er - - - Edit Entry… - Endre oppføring… - - - Delete Entry(s)… - Slett oppføring...Slett oppføringer... - - - Relying Party - Tiltrodd part - - - Show expired entries - Vis utløpte oppføringer - - - (Expired) - (Utløpt) - - - Export Confirmation - Eksportbekreftelse - - - The passkey file will be vulnerable to theft and unauthorized use, if left unsecured. Are you sure you want to continue? - - - - Please wait, list of entries with passkeys is being updated… - - - - No entries with passkeys. - Ingen oppføringer med tilgangsnøkler. + Utelat fra rapporter ReportsWidgetStatistics Hover over lines with error icons for further information. - Hold pekeren over linjer med feil-ikoner hvis du vil ha mer informasjon. + Hold pekeren over linjer med advarsels-ikoner for mer informasjon. Name @@ -9636,7 +8266,7 @@ This option is deprecated, use --set-key-file instead. Database name - Database navn + Databasenavn Description @@ -9644,7 +8274,7 @@ This option is deprecated, use --set-key-file instead. Location - Sted + Plassering Database created @@ -9692,11 +8322,11 @@ This option is deprecated, use --set-key-file instead. Non-unique passwords - Duplikate passord + Dupliserte passord More than 10% of passwords are reused. Use unique passwords when possible. - Mer enn 10% av passordene brukes på nytt. Bruk unike passord når det er mulig. + Mer enn 10% av passordene er brukt flere steder. Bruk unike passord når det er mulig. Maximum password reuse @@ -9704,7 +8334,7 @@ This option is deprecated, use --set-key-file instead. Some passwords are used more than three times. Use unique passwords when possible. - Noen passord brukes mer enn tre ganger. Bruk unike passord når det er mulig. + Noen passord gjenbrukes mer enn tre ganger. Bruk unike passord når det er mulig. Number of short passwords @@ -9789,14 +8419,6 @@ This option is deprecated, use --set-key-file instead. No agent running, cannot list identities. Ingen agent kjører, kan ikke liste opp identiteter. - - Failed to remove all SSH identities from agent. - - - - All SSH identities removed from agent. - - SearchHelpWidget @@ -9806,11 +8428,11 @@ This option is deprecated, use --set-key-file instead. Search terms are as follows: [modifiers][field:]["]term["] - Søke-termene er som følger: [modifikatorer][felt:]["]term["] + Søkebegrep er som følger: [modifikatorer][felt:]["]søkestreng["] Every search term must match (ie, logical AND) - Hver søke-term må samsvare (dvs. logisk AND) + Alle søkebegrep må oppfylles (dvs. logisk AND) Modifiers @@ -9822,11 +8444,11 @@ This option is deprecated, use --set-key-file instead. match term exactly - match søkebegrepet eksakt + match søkestreng eksakt use regex in term - bruk regex i søkestreng + bruk regulært uttrykk i søkestreng Fields @@ -9838,7 +8460,7 @@ This option is deprecated, use --set-key-file instead. match anything - match alt + match alle tegn match one @@ -9863,10 +8485,6 @@ This option is deprecated, use --set-key-file instead. Search Help Søkehjelp - - Save Search - Lagre søk - Search (%1)… Search placeholder text, %1 is the keyboard shortcut @@ -9880,6 +8498,10 @@ This option is deprecated, use --set-key-file instead. Limit search to selected group Avgrens søket til valgt gruppe + + Save Search + Lagre søk + SettingsClientModel @@ -9941,10 +8563,34 @@ This option is deprecated, use --set-key-file instead. Confirm when passwords are retrieved by clients Bekreft når passord hentes av klienter + + <html><head/><body><p><span style=" + font-family:'-apple-system','BlinkMacSystemFont','Segoe UI','Helvetica','Arial','sans-serif','Apple Color + Emoji','Segoe UI Emoji'; font-size:14px; color:#24292e; background-color:#ffffff;">This setting does + not override disabling recycle bin prompts</span></p></body></html> + + <html><head/><body><p><span style=" + font-family:'-apple-system','BlinkMacSystemFont','Segoe UI','Helvetica','Arial','sans-serif','Apple Color + Emoji','Segoe UI Emoji'; font-size:14px; color:#24292e; background-color:#ffffff;">Denne innstillingen vil + ikke overstyre bekreftelser ved deaktivering av papirkurven</span></p></body></html> + + Confirm when clients request entry deletion Bekreft når klienter ber om sletting av oppføring + + <html><head/><body><p>This improves compatibility with certain applications + which search for password without unlocking the database first.</p><p>But enabling this may also + crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a + different value set in applications.)</p></body></html> + + <html><head/><body><p>Dette forbedrer kompatibiliteten med visse programmer + som søker etter passord uten å låse opp databasen først.</p><p>Men aktivering av dette kan også + krasje klienten hvis databasen ikke kan låses opp iløpet av et bestemt tidsrom. (Vanligvis 25s, men kan være en + annen verdi dersom angitt i programmer.)</p></body></html> + + Prompt to unlock database before searching Spør om å låse opp databasen før søking @@ -9967,15 +8613,7 @@ This option is deprecated, use --set-key-file instead. Save current changes to activate the plugin and enable editing of this section. - Lagre endringer for å aktivere utvidelsen og for å redigere denne delen. - - - <html><head/><body><p>This setting does not override disabling recycle bin prompts </p></body></html> - - - - <html><head/><body><p>This improves compatibility with certain applications which search for password without unlocking the database first.</p><p>But enabling this may also crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a different value set in applications.) </p></body></html> - <html><head/><body><p>Dette forbedrer kompatibiliteten med enkelte programmer som søker etter passord uten å først låse opp databasen.</p><p>Men å aktivere dette kan også føre til at klienten krasjer, hvis databasen ikke kan låses opp i løpet av et gitt tidsrom. (Vanligvis 25 sekunder, men kan være en annen verdi angitt i programmene).</p></body></html> + Lagre gjeldende endringer for å aktivere utvidelsen og aktivere redigering av denne delen. @@ -10018,7 +8656,7 @@ This option is deprecated, use --set-key-file instead. Generate - Lag passord + Opprett Fingerprint: @@ -10063,11 +8701,11 @@ This option is deprecated, use --set-key-file instead. Multiple import source path to %1 in %2 - Flere importkilder til %1 i %2 + Sti for flere importkilder til %1 i %2 Conflicting export target path %1 in %2 - Motstridende eksportmål %1 i %2 + Konflikt i eksport-målsti %1 i %2 Export to %1 failed (%2) @@ -10084,14 +8722,6 @@ This option is deprecated, use --set-key-file instead. TagModel - - Clear Search - Tøm søk - - - All Entries - Alle oppføringer - Expired Utløpt @@ -10100,6 +8730,14 @@ This option is deprecated, use --set-key-file instead. Weak Passwords Svake passord + + All Entries + Alle oppføringer + + + Clear Search + Tøm søk + TagView @@ -10167,11 +8805,11 @@ This option is deprecated, use --set-key-file instead. Secret key must be in Base32 format - Privat nøkkel må være i Base32-format + Hemmelig nøkkel må være i Base32-format Secret key field - Felt for privat nøkkel + Felt for hemmelig nøkkel Default settings (RFC 6238) @@ -10195,7 +8833,7 @@ This option is deprecated, use --set-key-file instead. Time step: - Tidsintervall: + Tidstrinn: Time step field @@ -10212,7 +8850,7 @@ This option is deprecated, use --set-key-file instead. digits - Sifre + sifre Invalid TOTP Secret @@ -10277,6 +8915,26 @@ Eksempel: JBSWY3DPEHPK3PXP Start storing your passwords securely in a KeePassXC database Begynn å lagre passordene dine i en trygg KeePassXC-database + + Create new database + Opprett ny database + + + Open existing database + Åpne eksisterende database + + + Import from KeePass 1 + Importer KeePass1-database + + + Import from 1Password + Importer fra 1Password + + + Import from CSV + Importer fra CSV-fil + Recent databases Nylige databaser @@ -10289,18 +8947,6 @@ Eksempel: JBSWY3DPEHPK3PXP Welcome to KeePassXC %1 Velkommen til KeePassXC %1 - - Create Database - Opprett database - - - Open Database - Åpne database - - - Import File - Importer fil - WinUtils @@ -10317,8 +8963,31 @@ Eksempel: JBSWY3DPEHPK3PXP Kunne ikke registrere global hurtigtast + + WindowsHello + + Failed to init KeePassXC crypto. + Initialisering av KeePassXC krypto feilet. + + + Failed to encrypt key data. + Kryptering av nøkkeldata feilet. + + + Failed to get Windows Hello credential. + Henting av identifikasjon fra Windows Hello feilet. + + + Failed to decrypt key data. + Dekryptering av nøkkeldata feilet. + + YubiKey + + %1 No interface, slot %2 + %1 Ingen grensesnitt, spor %2 + General: Generelt: @@ -10330,6 +8999,14 @@ Eksempel: JBSWY3DPEHPK3PXP YubiKeyEditWidget + + Refresh hardware tokens + Oppdater maskinvarenøkkel + + + Refresh + Last på ny + Hardware key slot selection Valg av spor i maskinvarenøkkel @@ -10362,32 +9039,39 @@ Eksempel: JBSWY3DPEHPK3PXP Challenge-Response set, click to change or remove Utfordrerrespons angitt, klikk for å endre eller fjerne + + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + <p>Hvis du eier en <a href="https://www.yubico.com/">YubiKey</a> eller <a href="https://onlykey.io">OnlyKey</a>, kan du bruke den for ekstra sikkerhet.</p><p>Nøkkelen krever at ett av sporene programmeres som <a href="https://www.yubico.com/products/services-software/challenge-response/">HMAC-SHA1 utfordrerrespons</a>.</p> + Detecting hardware keys… - Oppdager maskinvarenøkler... + Oppdager maskinvarenøkler … No hardware keys detected - Ingen maskinvarenøkler oppdaget + Finner ingen maskinvarenøkler + + + YubiKeyInterface - Refresh hardware keys - Oppdater maskinvarenøkler - - - <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed with <a href="https://keepassxc.org/docs/#faq-yubikey-howto">Challenge-Response</a>.</p> - - - - Hardware keys found, but no slots are configured - + %1 Invalid slot specified - %2 + %1 Ugyldig spor angitt - %2 YubiKeyInterfacePCSC + + (PCSC) %1 [%2] Challenge-Response - Slot %3 + (PCSC) %1 [%2] utfordrerrespons – spor %3 + The YubiKey PCSC interface has not been initialized. - PCSC-grensesnittet til YubiKey er ikke klargjort. + YubiKey PCSC-grensesnittet er ikke klargjort. + + + Hardware key is currently in use. + Maskinvarenøkkelen er for øyeblikket i bruk. Could not find or access hardware key with serial number %1. Please present it to continue. @@ -10405,21 +9089,6 @@ Eksempel: JBSWY3DPEHPK3PXP Failed to complete a challenge-response, the PCSC error code was: %1 Kan ikke fullføre utfordrerrespons, PCSC-feilkoden er %1 - - (NFC) %1 [%2] - Slot %3, %4 - YubiKey display fields - - - - Press - USB Challenge-Response Key interaction request - Trykk - - - Passive - USB Challenge-Response Key no interaction required - Passiv - YubiKeyInterfaceUSB @@ -10427,6 +9096,14 @@ Eksempel: JBSWY3DPEHPK3PXP Unknown Ukjent + + (USB) %1 [%2] Configured Slot - %3 + (USB) %1 [%2] Konfigurert spor – %3 + + + (USB) %1 [%2] Challenge-Response - Slot %3 - %4 + (USB) %1 [%2] utfordrerrespons – spor %3 - %4 + Press USB Challenge-Response Key interaction request @@ -10441,6 +9118,10 @@ Eksempel: JBSWY3DPEHPK3PXP The YubiKey USB interface has not been initialized. USB-grensesnittet til YubiKey er ikke blitt klargjort. + + Hardware key is currently in use. + Maskinvarenøkkelen er for øyeblikket i bruk. + Could not find hardware key with serial number %1. Please plug it in to continue. Kunne ikke finne maskinvarenøkkel med serienummer %1. Koble den til for å fortsette. @@ -10457,15 +9138,5 @@ Eksempel: JBSWY3DPEHPK3PXP Failed to complete a challenge-response, the specific error was: %1 Kunne ikke fullføre utfordrerrespons, den spesifikke feilen var: %1 - - %1 [%2] - Slot %3 - YubiKey NEO display fields - - - - %1 [%2] - Slot %3, %4 - YubiKey display fields - - \ No newline at end of file diff --git a/share/translations/keepassxc_nl.ts b/share/translations/keepassxc_nl.ts index 83f50fe74..0e610d7c5 100644 --- a/share/translations/keepassxc_nl.ts +++ b/share/translations/keepassxc_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 uitgebracht onder de voorwaarden van de GNU General Public License (GPL) versie 2 of (desgewenst) versie 3. + KeePassXC wordt verspreid onder de voorwaarden van de GNU General Public License (GPL) versie 2 of (desgewenst) versie 3. Project Maintainers: @@ -23,19 +23,19 @@ Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. - Bijzondere dank van het KeePassXC-team gaat uit naar debfx voor het maken van de originele KeePassX. + Bijzondere dank van het KeePassXC-team gaat uit naar debfx voor het creëren van het oorspronkelijke KeePassX. Contributors - Bijdragen + Bijdragen van <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> - <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">Bijdragen bekijken op GitHub</a> + <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">Toon bijdragen op GitHub</a> Debug Info - Foutopsporingsinformatie + Foutinformatie Include the following information whenever you report a bug: @@ -43,7 +43,7 @@ Copy to clipboard - Kopiëren naar klembord + Naar klembord kopiëren @@ -54,11 +54,11 @@ Non-existing/inaccessible executable path. Please double-check the client is legit. - Niet-bestaande/ontoegankelijke locatie van het uitvoerbare bestand. Controleer of de client legitiem is. + Niet-bestaand/ontoegankelijk uitvoerbaar pad. Controleer nogmaals of de client legitiem is. <html><head/><body><p><span style=" font-weight:600;">%1 </span>is requesting access to the following entries:</p></body></html> - <html><head/><body><p><span style=" font-weight:600;">%1 </span>verzoekt toegang tot de volgende items:</p></body></html> + <html><head/><body><p><span style=" font-weight:600;">%1 </span>vraagt om toegang tot de volgende items:</p></body></html> Name @@ -80,10 +80,6 @@ Details Details - - Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. - Jouw beslissing wordt onthouden zolang de aanvragende client en KeePassXC BEIDE actief zijn. - Remember Onthouden @@ -92,39 +88,39 @@ Allow Selected Selectie toestaan + + Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. + Je beslissing wordt onthouden voor de duur dat ZOWEL de aanvragende client ALS KeePassXC actief zijn. + Deny All && Future - Alles afwijzen, nu && toekomstig + Alles afwijzen, nu && toekomst Allow All && &Future - Alles toestaan, nu && toekomstig + Alles toestaan, nu && toekomst AccessControlDialog::DenyButton Deny for this program - Programma weigeren + Weigeren voor dit programma AgentSettingsWidget Enable SSH Agent integration - Integratie van SSH-agent inschakelen + SSH Agent-integratie inschakelen Use Pageant - Pageant gebruiken + Gebruik Pageant Use OpenSSH - OpenSSH gebruiken - - - Use both agents - Beide agenten gebruiken + Gebruik OpenSSH SSH_AUTH_SOCK override @@ -132,7 +128,7 @@ SSH_AUTH_SOCK value - SSH_AUTH_SOCK-waarde + SSH_AUTH_SOCK waarde (empty) @@ -140,19 +136,23 @@ SSH_SK_PROVIDER value - SSH_SK_PROVIDER-waarde + SSH_SK_PROVIDER waarde SSH_SK_PROVIDER override - SSH_SK_PROVIDER overschrijven + SSH_SK_PROVIDER override No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. - Er is geen SSH-agent-socket beschikbaar. Zorg er voor dat de omgevingsvariabele SSH_AUTH_SOCK bestaat of stel een overschrijving in. + Geen SSH Agent-socket beschikbaar. Zorg ervoor dat de omgevingsvariabele SSH_AUTH_SOCK bestaat of stel een overschrijving in. SSH Agent connection is working! - De SSH-agent-verbinding is actief! + SSH Agent-verbinding werkt! + + + Use both agents + Gebruik beide agenten @@ -169,10 +169,6 @@ Security Beveiliging - - This setting cannot be enabled when minimize on unlock is enabled. - Deze instelling kan niet worden ingeschakeld als minimaliseren na ontgrendelen is ingeschakeld. - Access error for config file %1 Geen toegang tot configuratiebestand %1 @@ -195,7 +191,7 @@ Follow style - Themastijl volgen + Volg stijl Monochrome @@ -215,51 +211,23 @@ You must restart the application to set the new language. Would you like to restart now? - Je moet de KeePassXC opnieuw opstarten om de nieuwe taal in te stellen. Wil je dat nu doen? + Je moet de toepassing opnieuw starten om de nieuwe taal in te stellen. Wil je dat nu doen? + + + Reset Settings? + Instellingen herstellen? + + + Are you sure you want to reset all general and security settings to default? + Weet je zeker dat je de algemene en beveiligingsinstellingen opnieuw wilt instellen? Select backup storage directory - Selecteer een map voor reservekopie + Selecteer map voor opslag back-up - Confirm Reset - Opnieuw instellen bevestigen - - - Are you sure you want to reset all settings to default? - Weet je zeker dat je alle instellingen naar standaard wilt herstellen? - - - Import KeePassXC Settings - KeePassXC-instellingen importeren - - - Failed to import settings from %1, not a valid settings file. - Kan instellingen niet importeren uit %1, geen geldig instellingenbestand. - - - Export KeePassXC Settings - KeePassXC-instellingen exporteren - - - Small - Klein - - - Normal - Normaal - - - Medium - Gemiddeld - - - Large - Groot - - - Custom - Aangepast + This setting cannot be enabled when minimize on unlock is enabled. + Deze instelling kan niet worden ingeschakeld als minimaliseren na ontgrendelen is ingeschakeld. @@ -274,43 +242,58 @@ Start only a single instance of KeePassXC - Slechts één exemplaar van KeePassXC starten + Start niet meer dan één instantie van KeePassXC Automatically launch KeePassXC at system startup - KeePassXC automatisch opstarten + KeePassXC automatisch opstarten met het systeem Minimize window at application startup - Venster minimaliseren bij opstarten + Scherm minimaliseren bij het opstarten Minimize window after unlocking database - Venster minimaliseren na ontgrendeling database + Venster minimaliseren na ontgrendelen van database Remember previously used databases Laatstgebruikte databases onthouden - - recent files - recente bestanden - Load previously open databases on startup Laatstgebruikte databases openen bij het opstarten Remember database key files and security dongles - Database-sleutelbestanden en beveiligingsdongles onthouden + Laatstgebruikte sleutelbestanden en beveiligingssticks onthouden Check for updates at application startup once per week - Eenmaal per week bij opstarten controleren op updates + Controleer eens per week op updates bij het opstarten van het programma Include beta releases when checking for updates - Ook zoeken naar bètaversies + Zoek ook naar bèta-releases bij het controleren op updates + + + On database unlock, show entries that + Bij het ontgrendelen van databases, toon items die + + + have expired + On database unlock, show entries that... + zijn verlopen + + + days + On database unlock, show entries that will expire within %1 days + dagen + + + will expire within + On database unlock, show entries that... + zullen vervallen binnen File Management @@ -326,31 +309,43 @@ Automatically save non-data changes when locking database - Niet-gegevenswijzigingen automatisch opslaan na vergrendelen van database + Automatisch niet-gegevens wijzigingen opslaan bij het vergrendelen van de database Automatically reload the database when modified externally - Database automatisch opnieuw laden wanneer deze extern is gewijzigd + Database automatisch opnieuw laden als deze van buitenaf is gewijzigd Backup database file before saving - Reservekopie van database maken alvorens op te slaan + Back-up databasebestand voor het opslaan + + + Backup destination + Back-upbestemming + + + Specifies the database backup file location. Occurrences of "{DB_FILENAME}" are replaced with the filename of the saved database without extension. {TIME:<format>} is replaced with the backup time, see https://doc.qt.io/qt-5/qdatetime.html#toString. <format> defaults to format string "dd_MM_yyyy_hh-mm-ss". + Hiermee geef je de locatie van het back-upbestand van de database op. Exemplaren van "{DB_FILENAME}" worden vervangen door de bestandsnaam van de opgeslagen database zonder extensie. {TIME:<format>} wordt vervangen door de back-uptijd, zie https://doc.qt.io/qt-5/qdatetime.html#toString. <format> standaard tekenreeks "dd_MM_yyyy_hh-mm-ss". {DB_FILENAME}.old.kdbx - {DB_FILENAME}.oud.kdbx + {DB_FILENAME}.old.kdbx + + + Choose... + Kiezen... Use alternative saving method (may solve problems with Dropbox, Google Drive, GVFS, etc.) - Alternatieve opslagmethode gebruiken (kan problemen oplossen met Dropbox, Google Drive, GVFS, etc.) + Gebruik een alternatieve opslagmethode (kan problemen oplossen met Dropbox, Google Drive, GVFS, enz.) Temporary file moved into place - Tijdelijk bestand verplaatst naar zijn plaats + Tijdelijk bestand op zijn plaats verplaatst Directly write to database file (dangerous) - Databasebestand direct overschrijven (gevaarlijk) + Direct naar databasebestand schrijven (gevaarlijk) Entry Management @@ -362,11 +357,11 @@ Minimize when opening a URL - Minimaliseren bij openen van URL + Minimaliseren bij het openen van een URL Hide window when copying to clipboard - Venster verbergen na kopiëren naar klembord + Venster verbergen bij kopiëren naar klembord Minimize @@ -378,20 +373,20 @@ Favicon download timeout: - Time-out bij download favicon: + Favicon download time-out: Website icon download timeout in seconds - Time-out bij download websitepictogram (in seconden) + Websitepictogram download time-out in seconden sec Seconds - sec. + sec User Interface - Vormgeving + Gebruikersomgeving Toolbar button style @@ -411,79 +406,75 @@ (restart program to activate) - (opnieuw starten om te activeren) + (programma opnieuw starten om te activeren) Toolbar button style: Knopstijl van de werkbalk: - - Show passwords in color - Wachtwoorden in kleur weergeven - Use monospaced font for notes - Een niet-proportioneel lettertype gebruiken voor notities + Mono-lettertype gebruiken voor notities Minimize instead of app exit - App minimaliseren in plaats van afsluiten + Minimaliseren in plaats van app afsluiten Show a system tray icon - Pictogram weergeven in systeemvak + Pictogram in het systeemvak weergeven Tray icon type - Systeemvakpictogram + Systeemvak-pictogram Tray icon type: - Systeemvakpictogram: + Systeemvak-pictogram: Hide window to system tray when minimized - Venster minimaliseren naar systeemvak + Minimaliseren naar systeemvak Reset settings to default… - Standaardwaarden herstellen… + Standaardinstellingen terugzetten... Auto-Type - Automatisch invullen + Auto-type Use entry title to match windows for global Auto-Type - Titel van item gebruiken om het juiste venster te bepalen bij gebruik van automatisch invullen + Gebruik naam van item als vensternaam voor Auto-type Use entry URL to match windows for global Auto-Type - URL gebruiken om het juiste venster te bepalen bij gebruik van automatisch invullen + Laat URL overeenkomen met item bij Auto-type Always ask before performing Auto-Type - Altijd vragen voor automatisch invullen + Altijd vragen voor toepassen Auto-type Hide expired entries from Auto-Type - Verlopen items verbergen van automatisch invullen + Verlopen items verbergen voor Auto-Type Re-lock previously locked database after performing Auto-Type - Vergrendelde database na automatisch invullen opnieuw vergrendelen + Vergrendelde database na Auto-type weer vergrendelen Auto-Type start delay: - Wachttijd bij automatisch invullen: + Auto-type startvertraging: Global Auto-Type shortcut: - Algemene sneltoets voor automatisch invullen: + Algemene Auto-type sneltoets: Auto-type start delay milliseconds - Wachttijd bij automatisch invullen (milliseconden) + Auto-type startvertraging milliseconden ms @@ -492,84 +483,27 @@ Auto-Type typing delay: - Wachttijd bij automatisch invullen: + Auto-type typevertraging: Global auto-type shortcut - Algemene sneltoets van automatisch invullen + Globale sneltoets voor Auto-type Auto-type character typing delay milliseconds - Wachttijd bij automatisch invullen (milliseconden) + Auto-typevertraging milliseconden Remember last typed entry for: - Laatstgebruikt item onthouden: + Onthoud de laatst getypte vermelding voor: - On database unlock, show entries that will expire within - Bij ontgrendeling van de database; items weergeven die verlopen binnen + recent files + onlangs geopende bestanden - On database unlock, show entries that will expire within - Bij ontgrendeling van de database; items weergeven die verlopen binnen - - - days - number of days warning for password expiration - dagen - - - Destination format: - Doelformaat: - - - <html><head/><body><p><span style=" font-weight:600;">{DB_FILENAME}</span> is replaced with the filename of the saved database without extension</p><p><span style=" font-weight:600;">{TIME:&lt;format&gt;}</span> is replaced with the specified time format (default: dd_MM_yyyy_hh-mm-ss)</p><p>See the User Guide for more details</p></body></html> - <html><head/><body><p><span style=" font-weight:600;">{DB_FILENAME}</span> wordt vervangen door de bestandsnaam van de opgeslagen database zonder extensie </p><p><span style=" font-weight:600;">{TIME:&lt;format&gt;}</span> wordt vervangen door de gespecifieerde tijdopmaak (standaard: dd_MM_yyyy_hh-mm-ss)</p><p>Lees de gebruikershandleiding voor meer details</p></body></html> - - - Choose folder... - Kies een map… - - - Show confirmation before moving entries to recycle bin - Om bevestiging vragen voordat items worden verplaatst naar de prullenbak - - - Copy data on double clicking field in entry view - Gegevens kopiëren bij dubbelklikken van veld in itemweergave - - - Show toolbar - Werkbalk weergeven - - - Show the menu bar by pressing the Alt key - Werkbalk weergeven met de Alt-toets - - - Show menubar - Menubalk weergeven - - - Import settings… - Instellingen importeren… - - - Export settings… - Instellingen exporteren… - - - Open browser on double clicking URL field in entry view - Browser openen bij dubbelklik op URL-veld in itemweergave - - - Font size: - Lettergrootte - - - Font size selection - Selectie van lettergrootte + Show passwords in color + Wachtwoorden voorzien van kleur @@ -580,12 +514,12 @@ Database lock timeout seconds - Wachttijd alvorens database te vergrendelen (in seconden) + Database vergrendeling wachttijd seconden sec Seconds - sec. + sec Clear clipboard after @@ -598,11 +532,11 @@ min Minutes - min. + min Clipboard clear seconds - Klembord wissen na (in seconden) + Klembord wissen in seconden Lock databases after inactivity of @@ -614,27 +548,43 @@ Enable database quick unlock (Touch ID / Windows Hello) - Snel ontgrendelen inschakelen (Touch ID/Windows Hello) + Snel ontgrendelen van databases inschakelen (Touch ID / Windows Hello) Lock databases when session is locked or lid is closed - Databases vergrendelen wanneer de sessie wordt vergrendeld of het deksel gesloten + Databases vergrendelen als de gebruikerssessie wordt vergrendeld of bij het sluiten van het deksel Lock databases after minimizing the window - Databases vergrendelen na minimaliseren van venster + Databases vergrendelen bij het minimaliseren van het venster + + + Require password repeat when it is visible + Herhaling vereisen wanneer het wachtwoord zichtbaar is Hide passwords when editing them - Wachtwoorden verbergen tijdens bewerken + Wachtwoord verbergen tijdens bewerken Use placeholder for empty password fields - Tijdelijke aanduidingen tonen in lege wachtwoordvelden + Tijdelijke aanduiding gebruiken voor lege wachtwoordvelden Hide passwords in the entry preview panel - Wachtwoorden verbergen in Informatiepaneel + Wachtwoorden in voorvertoning verbergen + + + Hide entry notes by default + Notities standaard verbergen + + + Move entries to recycle bin without confirmation + Items zonder bevestiging naar de prullenbak verplaatsen + + + Enable double click to copy the username/password entry columns + Dubbelklikken inschakelen om de kolommen voor gebruikersnaam/wachtwoordinvoer te kopiëren Privacy @@ -642,34 +592,22 @@ Use DuckDuckGo service to download website icons - DuckDuckGo gebruiken voor het downloaden van websitepictogrammen + DuckDuckGo gebruiken om websitepictogrammen te downloaden Hide TOTP in the entry preview panel - TOTP verbergen in Informatiepaneel - - - Lock databases when switching user - Databases vergrendelen bij het wisselen van gebruiker - - - Lock Options - Vergrendelingsopties - - - Hide notes in the entry preview panel - Notities verbergen in Informatiepaneel + TOTP's in voorvertoning verbergen AutoType The requested Auto-Type sequence cannot be used due to an error: - De gevraagde invulreeks kan niet worden gebruikt wegens een foutmelding: + De gevraagde automatische reeks kan niet worden gebruikt vanwege een fout: Auto-Type Error - Fout bij automatisch invullen + Fout bij Auto-type Permission Required @@ -677,40 +615,54 @@ KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. - KeePassXC vereist de toegankelijkheidsmachtiging om items automatisch te kunnen invullen. Als je de machtiging al hebt verleend, probeer dan om KeePassXC opnieuw te starten. + KeePassXC heeft de Toegankelijkheid-machtiging nodig om invoerniveau Auto-type te kunnen uitvoeren. Als je de machtiging al gegeven hebt, is het mogelijk dat je KeePassXC opnieuw moet opstarten. KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. - KeePassXC vereist de toegankelijkheids- en schermopnamemachtigingen om items automatisch te kunnen invullen. Schermopname is vereist om bijbehorende vensters te detecteren. Als je de machtigingen al hebt verleend, probeer dan om KeePassXC opnieuw te starten. + KeePassXC heeft de Toegankelijkheid- en Schermopname-machtiging nodig om globale Auto-type te kunnen uitvoeren. Schermopname is benodigd om het venster te gebruiken om invoer te kunnen vinden. Als je de machtiging al gegeven hebt, is het mogelijk dat je KeePassXC opnieuw moet opstarten. Invalid entry provided - Ongeldig item opgegeven + Ongeldige vermelding opgegeven Bracket imbalance detected, found extra { or } - Ongelijk aantal haakjes gedetecteerd: extra { of } aangetroffen + Ongelijk aantal haakjes gedetecteerd, extra { of } gevonden Too many repetitions detected, max is %1: %2 - Teveel herhalingen gedetecteerd (%2). Maximaal toegestaan: %1. + Te veel herhalingen gedetecteerd, max is %1: %2 Very slow key press detected, max is %1: %2 - Zeer trage toetsaanslag gedetecteerd (%2). Maximaal toegestaan: %1. + Zeer trage toetsaanslag gedetecteerd, max is %1: %2 Very long delay detected, max is %1: %2 - Zeer lange vertraging gedetecteerd (%2). Maximaal toegestaan: %1. + Zeer lange vertraging gedetecteerd, max is %1: %2 - Entry does not have attribute for PICKCHARS: %1 - Het item bevat geen kenmerk voor PICKCHARS: %1 + Invalid conversion type: %1 + Ongeldig conversietype: %1 + + + Invalid conversion syntax: %1 + Ongeldige conversiesyntaxis: %1 + + + Invalid regular expression syntax %1 +%2 + Ongeldige syntaxis voor reguliere expressie %1 +%2 Invalid placeholder: %1 Ongeldige tijdelijke aanduiding: %1 + + Entry does not have attribute for PICKCHARS: %1 + Het item bevat geen kenmerk voor PICKCHARS: %1 + AutoTypeAssociationsModel @@ -739,7 +691,7 @@ Title - Titel + Naam Username @@ -752,32 +704,32 @@ AutoTypePlatformX11 + + Trying to send invalid keysym. + Poging om ongeldig keysym te verzenden. + Sequence aborted: Caps Lock is on - Reeks afgebroken: Caps Lock is ingeschakeld + Volgorde afgebroken: Caps Lock is ingeschakeld Sequence aborted: Modifier keys held by user - Reeks afgebroken: speciale toetsen ingedrukt door de gebruiker + Reeks afgebroken: Modifier-toetsen ingedrukt door de gebruiker Unable to get valid keycode for key: Kan geen geldige code krijgen voor toets: - - Trying to send invalid keyboard symbol. - Poging om ongeldig toetsenbordsymbool te verzenden. - AutoTypeSelectDialog Auto-Type - KeePassXC - Automatisch invullen - KeePassXC + Auto-type - KeePassXC Double click a row to perform Auto-Type or find an entry using the search: - Dubbelklik op een rij om Automatisch in te vullen of zoek een item met de zoekopdracht: + Dubbelklik op een rij om Automatisch typen uit te voeren of zoek een item met de zoekopdracht: <p>You can use advanced search queries to find any entry in your open databases. The following shortcuts are useful:<br/> @@ -786,12 +738,12 @@ Ctrl+1 - Type username<br/> Ctrl+2 - Type password<br/> Ctrl+3 - Type TOTP<br/> Ctrl+4 - Use Virtual Keyboard (Windows Only)</p> - <p>Je kunt uitgebreide zoekopdrachten uitvoeren om items in de geopende databases te vinden. De volgende sneltoetsen zijn handig:<br/> -Ctrl + F - Database doorzoeken<br/> -Ctrl + 1 - Gebruikersnaam invoeren<br/> -Ctrl + 2 - Wachtwoord invoeren<br/> -Ctrl + 3 - TOTP invoeren<br/> -Ctrl + 4 - Virtueel toetsenbord (alleen Windows)</p> + <p>Gebruik geavanceerde zoekopdrachten om items in de geopende databases te vinden. De volgende sneltoetsen zijn handig:<br/> +Ctrl+F - Zoeken in database in-/uitschakelen<br/> +Ctrl+1 - Typ gebruikersnaam<br/> +Ctrl+2 - Typ wachtwoord<br/> +Ctrl+3 - Typ TOTP<br/> +Ctrl+4 - Virtueel toetsenbord gebruiken (alleen Windows)</p> Search all open databases @@ -799,7 +751,7 @@ Ctrl + 4 - Virtueel toetsenbord (alleen Windows)</p> Search… - Zoeken… + Zoeken... Type Sequence @@ -811,11 +763,11 @@ Ctrl + 4 - Virtueel toetsenbord (alleen Windows)</p> Type {USERNAME} - {USERNAME} invoeren + {GEBRUIKERSNAAM} invoeren Type {PASSWORD} - {PASSWORD} invoeren + {WACHTWOORD} invoeren Type {TOTP} @@ -846,11 +798,11 @@ Ctrl + 4 - Virtueel toetsenbord (alleen Windows)</p> %1 is requesting access to the following entries: - %1 vraagt toegang tot de volgende items: + %1 vraagt toegang tot de volgende vermeldingen: Remember access to checked entries - Toegang tot geselecteerde items onthouden + Onthoud de toegang tot aangevinkte vermeldingen Remember @@ -858,7 +810,7 @@ Ctrl + 4 - Virtueel toetsenbord (alleen Windows)</p> Allow access to entries - Toegang tot items toestaan + Toegang tot vermeldingen toestaan Allow Selected @@ -870,15 +822,15 @@ Ctrl + 4 - Virtueel toetsenbord (alleen Windows)</p> Disable for this site - Uitschakelen op deze website - - - Undo - Ongedaan maken + Uitschakelen voor deze website BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + KeePassXC-Browser: Item opslaan + Ok Oké @@ -891,178 +843,125 @@ Ctrl + 4 - Virtueel toetsenbord (alleen Windows)</p> You have multiple databases open. Please select the correct database for saving credentials. Er zijn meerdere databases geopend. -Selecteer de database waarin de inloggegevens dienen te worden opgeslagen. - - - KeePassXC - Select Database - KeePassXC - Selecteer database - - - - BrowserPasskeysConfirmationDialog - - Cancel - Annuleren - - - Update - Update - - - Authenticate - Authenticeren - - - Register new - Nieuw registreren - - - Register - Registreren - - - Timeout in <b>%n</b> seconds... - Time-out over <b>%n</b> seconde…Time-out over <b>%n</b> seconden… - - - Relying Party: %1 - Vertrouwende partij: %1 - - - Username: %1 - Gebruikersnaam: %1 - - - KeePassXC - Passkey credentials - KeePassXC - Passkey-inloggegevens - - - Add to existing entry - Aan bestaand item toevoegen - - - Existing passkey found. -Do you want to register a new passkey for: - Bestaande passkey gevonden. -Wil je een nieuwe passkey registreren voor: - - - Select the existing passkey and press Update to replace it. - Selecteer de bestaande passkey en druk op Bijwerken om deze te vervangen. - - - Authenticate passkey credentials for: - Inloggegevens verifiëren voor passkey: - - - Do you want to register a passkey for: - Wil je een passkey registreren voor: +Selecteer de database voor het opslaan van de inloggegevens. BrowserService + + KeePassXC: Create a new group + KeePassXC: Een nieuwe groep aanmaken + A request for creating a new group "%1" has been received. Do you want to create this group? - Er is een aanvraag gedaan voor het aanmaken van een nieuwe groep genaamd ‘%1’. + Een aanvraag voor het aanmaken van een nieuwe groep '%1' werd ontvangen. Wil je deze groep aanmaken? + + KeePassXC: New key association request + KeePassXC: Nieuw verzoek voor sleutelkoppeling + You have received an association request for the following database: %1 Give the connection a unique name or ID, for example: chrome-laptop. - Er is toegang gevraagd tot de volgende database: + Je hebt een associatieverzoek ontvangen voor de volgende database: %1 -Geef de koppeling een unieke naam of id. Voorbeeld: +Geef de verbinding een unieke naam of ID, voorbeeld: chrome-laptop Save and allow access Opslaan en toegang verlenen + + KeePassXC: Overwrite existing key? + KeePassXC: Bestaande sleutel overschrijven? + A shared encryption key with the name "%1" already exists. Do you want to overwrite it? - Er is al een gedeelde beveiligingssleutel genaamd ‘%1’. + Een gedeelde coderingssleutel met de naam "%1" bestaat al. Wil je deze overschrijven? + + KeePassXC: Update Entry + KeePassXC: Item bijwerken + Do you want to update the information in %1 - %2? Wil je de gegevens in %1 - %2 bijwerken? + + KeePassXC: Delete entry + KeePassXC: Item verwijderen + A request for deleting entry "%1" has been received. Do you want to delete the entry? - Er is een verzoek gedaan om ‘%1’ te verwijderen. + Er is een verzoek ontvangen om item "%1" te verwijderen. Wil je dit item verwijderen? - %1 (Passkey) - %1 (Passkey) + Converting attributes to custom data… + Kenmerken worden omgezet in aangepaste gegevens... - KeePassXC - Create a new group - KeePassXC - Een nieuwe groep aanmaken + Abort + Afbreken - Disable - Uitschakelen + KeePassXC: Converted KeePassHTTP attributes + KeePassXC: Omgezette KeePassHTTP-kenmerken - KeePassXC - Overwrite existing key? - KeePassXC - Bestaande sleutel overschrijven? + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + Kenmerken van %1 item(s) is/zijn omgezet. +%2 sleutels naar aangepaste gegevens verplaatst. + + + Successfully moved %n keys to custom data. + Sleutel is verplaats naar speciale data.%n Sleutels zijn verplaatst naar aangepaste gegevens. - KeePassXC - Update Entry - KeePassXC - Item bijwerken + KeePassXC: No entry with KeePassHTTP attributes found! + KeePassXC: Geen item met KeePassHTTP-kenmerken gevonden! - KeePassXC - Delete entry - KeePassXC - Item verwijderen + The active database does not contain an entry with KeePassHTTP attributes. + De actieve database bevat geen item met KeePassHTTP-kenmerken. - KeePassXC - New key association request - KeePassXC - Nieuw Passkey-toewijzingsverzoek + Don't show this warning again + Deze waarschuwing niet meer geven - Passkey - Passkey + KeePassXC: Legacy browser integration settings detected + KeePassXC: instellingen voor oudere browserintegratie gedetecteerd - KeePassXC - Passkey credentials - KeePassXC - Passkey-inloggegevens - - - Register a new passkey to this entry: - Een nieuwe passkey registreren voor dit item: - - - KeePassXC - Update passkey - KeePassXC - Passkey bijwerken - - - Entry already has a passkey. -Do you want to overwrite the passkey in %1 - %2? - Item heeft al een passkey. -Wil je de passkey overschrijven in %1 - %2? - - - Register - Registreren + 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? + De KeePassXC-Browser instellingen moeten worden verplaatst naar de instellingen-database. +Dit is nodig om de huidige browserverbindingen te behouden. +Wil je de bestaande instellingen nu migreren? BrowserSettingsWidget Dialog - Dialoogvenster + Dialoog This is required for accessing your databases with KeePassXC-Browser @@ -1076,9 +975,13 @@ Wil je de passkey overschrijven in %1 - %2? General Algemeen + + Browsers installed as snaps are currently not supported. + Browsers die als snaps zijn geïnstalleerd, worden momenteel niet ondersteund. + Enable integration for these browsers: - Integratie in de volgende browsers inschakelen: + Activeer integratie voor deze browsers: Vivaldi @@ -1111,31 +1014,31 @@ Wil je de passkey overschrijven in %1 - %2? Show a notification when credentials are requested Credentials mean login data requested via browser extension - Melding weergeven als er om inloggegevens wordt gevraagd + Toon een melding wanneer om referenties wordt gevraagd Request to unlock the database if it is locked - Verzoek om de database te ontgrendelen als deze is vergrendeld + Verzoek om ontgrendeling van de database als deze is vergrendeld Only entries with the same scheme (http://, https://, …) are returned. - Er worden alleen items met hetzelfde schema (http://, https://, ...) getoond. + Alleen items met hetzelfde schema (http://, https://, ...) worden gegeven. Match URL scheme (e.g., https://example.com) - Overeenkomstig URL-schema vereisen (bijv. https://voorbeeld.nl) + Overeenkomstig URL-schema (bijv. https://example.com) Only returns the best matches for a specific URL instead of all entries for the whole domain. - Toont alleen de beste overeenkomsten bij een specifieke URL in plaats van alle items op het domein. + Geeft alleen de beste overeenkomsten terug voor een specifieke URL in plaats van alle items voor het hele domein. Return only best-matching credentials - Alleen beste overeenkomsten tonen + Geef alleen best overeenkomende inloggegevens Returns expired credentials. String [expired] is added to the title. - Toont verlopen inloggegevens. De tekst ‘[verlopen]’ wordt aan de titel toegevoegd. + Geeft verlopen inloggegevens. Woord [expired] is aan de titel toegevoegd. Allow returning expired credentials @@ -1143,12 +1046,12 @@ Wil je de passkey overschrijven in %1 - %2? All databases connected to the extension will return matching credentials. - Alle databases die aan de extensie gekoppeld zijn kunnen overeenkomende inloggegevens opleveren. + Alle databases verbonden met de extensie kunnen overeenkomende inloggegevens geven. Search in all opened databases for matching credentials Credentials mean login data requested via browser extension - Alle geopende databases doorzoeken op overeenkomstige inloggegevens + Zoek in alle geopende databases naar overeenkomende inloggegevens Advanced @@ -1167,23 +1070,23 @@ Wil je de passkey overschrijven in %1 - %2? Do not ask permission for HTTP Basic Auth An extra HTTP Basic Auth setting - Geen toestemming vragen bij gebruik van HTTP Basic Auth + Vraag geen toestemming voor HTTP Basic Auth Automatically creating or updating string fields is not supported. - Het automatisch aanmaken of wijzigen van tekenreeksvelden wordt niet ondersteund. + Het automatisch aanmaken of wijzigen van tekenreeks-velden wordt niet ondersteund. Return advanced string fields which start with "KPH: " - Geavanceerde tekenreeksvelden die beginnen met ‘KPH:’ tonen + Lever geavanceerde tekenreeksvelden die beginnen met "KPH:" Don't display the popup suggesting migration of legacy KeePassHTTP settings. - De pop-up die de migratie van KeePassHTTP naar KeePassXC-Browser aanbiedt niet meer tonen. + Laat de pop-up die de migratie van KeePassHTTP naar KeePassXC-Browser aanbiedt, niet meer zien. Do not prompt for KeePassHTTP settings migration. - Niet vragen om migratie van KeePassHTTP-instellingen. + Vraag niet om migratie van KeePassHTTP-instellingen. Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. @@ -1191,24 +1094,24 @@ Wil je de passkey overschrijven in %1 - %2? Update native messaging manifest files at startup - Native messaging-manifestbestanden bij opstarten automatisch bijwerken + Native messaging-manifestbestanden bij het opstarten bijwerken Use a custom proxy location if you installed a proxy manually. - Gebruik een aangepaste proxy-locatie als er handmatig een proxy is geïnstalleerd. + Gebruik een aangepaste proxy-locatie als je zelf een proxy hebt geïnstalleerd. Use a custom proxy location: Meant is the proxy for KeePassXC-Browser - Aangepaste proxy-locatie: + Aangepaste proxy-locatie toepassen: Custom proxy location field - Aangepast proxy-locatieveld + Handmatig Proxy invulveld Browser for custom proxy file - Kies een eigen proxy-configuratiebestand + Blader naar eigen Proxy configuratiebestand Browse… @@ -1217,11 +1120,11 @@ Wil je de passkey overschrijven in %1 - %2? Use a custom browser configuration location: - Aangepaste browserconfiguratielocatie gebruiken: + Aangepaste locatie voor de browserconfiguratie gebruiken: Browser type: - Webbrowser: + Browser-type: Toolbar button style @@ -1233,7 +1136,7 @@ Wil je de passkey overschrijven in %1 - %2? Custom browser location field - Aangepast browserlocatieveld + Aangepast locatieveld van de browser Browse for custom browser path @@ -1241,11 +1144,31 @@ Wil je de passkey overschrijven in %1 - %2? Custom extension ID: - Aangepaste extensie-id: + Aangepast extensie-ID: Custom extension ID - Aangepaste extensie-id + Aangepast extensie-ID + + + Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 + Vanwege de Snap-sandboxing moet je een script uitvoeren waarmee browserintegratie mogelijk wordt. <br /> Je kunt dit script vinden op %1 + + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 + KeePassXC-Browser is nodig om de integratie met de browser te laten werken. <br /> Download het voor %1 en %2 en %3. %4. + + + Please see special instructions for browser extension use below + Raadpleeg onderstaande speciale instructies voor gebruik van browserextensie + + + <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. + <b>Fout:</b> De aangepaste proxy-locatie is niet gevonden!<br/>Browserintegratie WERKT NIET zonder de proxy-applicatie. + + + <b>Warning:</b> The following options can be dangerous! + <b>Waarschuwing:</b> De volgende opties kunnen gevaarlijk zijn! Executable Files @@ -1257,62 +1180,22 @@ Wil je de passkey overschrijven in %1 - %2? Select custom proxy location - Selecteer een aangepaste proxy-locatie + Selecteer aangepaste proxy-locatie Select native messaging host folder location Selecteer de locatie van de native messaging-hostmap - - Allow keepassxc-proxy to list all entries with their title, URL and UUID in connected databases. - Toestaan dat keepassxc-proxy alle items uit gekoppelde databases opsomt, inclusief titel, URL en UUID. - - - Allow limited access to all entries in connected databases (ignores site access restrictions) - Beperkte toegang tot items in gekoppelde databases toestaan (negeert website-toegangsbeperkingen) - - - <b>Warning:</b> Only adjust these settings if necessary. - <b>Waarschuwing:</b> pas deze instellingen alleen aan indien nodig. - - - The custom proxy location does not exist. - De aangepaste proxy-locatie bestaat niet. - - - <b>Error:</b> The custom proxy location does not exist. Correct this in the advanced settings tab. - <b>Foutmelding:</b> de aangepaste proxy-locatie bestaat niet. Corrigeer dit op het tabblad geavanceerde instellingen. - - - <b>Error:</b> The installed proxy executable is missing from the expected location: %1<br/>Please set a custom proxy location in the advanced settings or reinstall the application. - <b>Foutmelding:</b> het geïnstalleerde proxy-bestand ontbreekt op de verwachte locatie: %1<br/>Stel een aangepaste proxy-locatie in in de geavanceerde instellingen of installeer het programma opnieuw. - - - Allows using insecure http://localhost with passkeys for testing purposes. - Maakt het gebruik van onveilige http://localhost met passkeys mogelijk voor testdoeleinden. - - - Allow using localhost with passkeys - Het gebruik van localhost toestaan met passkeys - - - KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. - KeePassXC-Browser is nodig om de integratie met de browser te laten werken. <br /> Download deze browserextensie voor %1 en %2 en %3. - - - Browsers installed using Snap or Flatpak are not supported with exception to Firefox installed using Snap. - Browsers die met Snap of Flatpak zijn geïnstalleerd, worden niet ondersteund, met uitzondering van Firefox die met Snap is geïnstalleerd. - CloneDialog Clone Entry Options - Opties voor dupliceren + Opties voor items dupliceren Append ' - Clone' to title - ' - Duplicaat' toevoegen aan titel + Voeg ' - Duplicaat' toe aan naam Replace username and password with references @@ -1320,18 +1203,26 @@ Wil je de passkey overschrijven in %1 - %2? Copy history - Geschiedenis kopiëren + Historie kopiëren CsvImportWidget + + Import CSV fields + CSV-velden importeren + + + filename + bestandsnaam + size, rows, columns grootte, rijen, kolommen Column Association - Kolomtoewijzing + Kolomverwijzing Password @@ -1343,7 +1234,7 @@ Wil je de passkey overschrijven in %1 - %2? Title - Titel + Naam Group @@ -1383,11 +1274,11 @@ Wil je de passkey overschrijven in %1 - %2? Text is qualified by - Tekst wordt gekenmerkt door + Tekst staat tussen Text qualification - Tekstmarkering + Tekstkwalificatie Fields are separated by @@ -1395,11 +1286,11 @@ Wil je de passkey overschrijven in %1 - %2? Field separation - Scheidingsteken + Veldscheiding Comments start with - Opmerkingen beginnen met + Commentaar start met Header lines skipped @@ -1415,15 +1306,15 @@ Wil je de passkey overschrijven in %1 - %2? Consider '\' an escape character - ‘\’ beschouwen als escapeteken + Beschouw '\' als escape-teken Preview - Voorbeeld + Voorvertoning CSV import preview - Csv-import - Voorbeeld + CSV import voorbeeld Not Present @@ -1433,43 +1324,50 @@ Wil je de passkey overschrijven in %1 - %2? Column %1 Kolom %1 + + Imported from CSV file + Geïmporteerd uit CSV-bestand + + + Original data: + Originele gegevens: + + + Error(s) detected in CSV file! + Fout(en) gevonden in CSV-bestand! + [%n more message(s) skipped] - [%n bericht overgeslagen][%n berichten overgeslagen] + [%n meer bericht(en) overgeslagen][%n bericht(en) overgeslagen] - Failed to parse CSV file: %1 - Verwerking CSV-bestand mislukt: %1 + Error + Fout - Imported from CSV file: %1 - Geïmporteerd uit CSV-bestand: %1 - - - No Title Selected - Geen titel geselecteerd - - - No title column was selected, entries will be hard to tell apart. -Are you sure you want to import? - Er is geen titelkolom geselecteerd, items zijn zo moeilijk van elkaar te onderscheiden. -Weet je zeker dat je wilt importeren? - - - Tags - Labels + CSV import: writer has errors: +%1 + CSV importeren: schrijver heeft fouten: +%1 CsvParserModel + + %1, %2, %3 + file info: bytes, rows, columns + %1, %2, %3 + + + %n byte(s) + %n byte (s)%n byte(s) + %n row(s) - CSV row count - %n rij%n rijen + %n rij(en)%n rij(en) %n column(s) - CSV column count %n kolom%n kolommen @@ -1486,7 +1384,7 @@ Weet je zeker dat je wilt importeren? Unable to open file %1. - Bestand %1 kan niet worden geopend. + Kan bestand %1 niet openen. Error while reading the database: %1 @@ -1494,48 +1392,40 @@ Weet je zeker dat je wilt importeren? Could not save, database does not point to a valid file. - Het opslaan is mislukt, omdat de database niet verwijst naar een geldig bestand. + Kan niet opslaan. Database verwijst niet naar een geldig bestand. Database save is already in progress. - De database wordt opgeslagen. + Database wordt opgeslagen. Could not save, database has not been initialized! - Het opslaan is mislukt - de database is niet geïnitialiseerd! + Niet opgeslagen, database is niet geïnitialiseerd! Database file has unmerged changes. - Databasebestand heeft niet-samengevoegde wijzigingen. + Databasebestand heeft niet opgeslagen gegevens. %1 Backup database located at %2 %1 -reservekopie van databestand in %2 +Back-up databestand op %2 Key not transformed. This is a bug, please report it to the developers. - De sleutel is niet omgezet. Dit is een fout. Rapporteer dit alsjeblieft aan de ontwikkelaars! + Sleutel is niet getransformeerd. Dit is een fout, rapporteer deze alsjeblieft aan de ontwikkelaars! Recycle Bin Prullenbak - - Database file read error. - Fout bij het lezen van de database. - - - No file path was provided. - Er is geen bestandspad opgegeven. - DatabaseOpenDialog Unlock Database - KeePassXC - KeePassXC - Database ontgrendelen + Database ontgrendelen - KeePassXC @@ -1546,15 +1436,35 @@ reservekopie van databestand in %2 Enter Password: - Voer het wachtwoord in: + Geef wachtwoord: Password field - Wachtwoordveld + Wachtwoord invulveld + + + Enter Additional Credentials (if any): + Voer eventuele aanvullende inloggegevens in: + + + Key File: + Sleutelbestand: + + + Key file help + Sleutelbestandhulp Hardware key slot selection - Hardwaresleutel-positieselectie + Hardwaresleutel positie selectie + + + Hardware Key: + Hardwaresleutel: + + + Hardware key help + Hardwaresleutelhulp Key file to unlock the database @@ -1562,12 +1472,20 @@ reservekopie van databestand in %2 Browse for key file - Kies een sleutelbestand + Blader naar sleutelbestand Browse… Bladeren… + + Refresh hardware tokens + Hardwaretoken verversen + + + Refresh + Vernieuwen + Unlock Database Database ontgrendelen @@ -1582,7 +1500,7 @@ reservekopie van databestand in %2 Please present or touch your YubiKey to continue… - Plaats je YubiKey of druk er op om door te gaan… + Plaats je YubiKey of druk er op om door te gaan... Database Version Mismatch @@ -1596,55 +1514,59 @@ You can try to open it anyway, but it may be incomplete and saving any changes may incur data loss. We recommend you update your KeePassXC installation. - De database die je probeert te openen is waarschijnlijk + De database die je probeert te openen, was waarschijnlijk gemaakt door een nieuwere versie van KeePassXC. -Je kunt proberen om de database alsnog te openen, maar deze kan onvolledig zijn -en het opslaan van eventuele aanpassingen kan tot gegevensverlies leiden. +Je kunt toch proberen het te openen, maar het kan onvolledig zijn +en het opslaan van eventuele wijzigingen kan gegevensverlies veroorzaken. -We raden je aan om KeePassXC bij te werken. +We raden je aan jouw KeePassXC-installatie bij te werken. Open database anyway - Database alsnog openen + Open database toch Database unlock canceled. - Ontgrendeling van database afgebroken. + Database ontgrendelen geannuleerd. Unlock failed and no password given - Ontgrendeling mislukt: geen wachtwoord ingevoerd + Ontgrendeling mislukt en geen wachtwoord ingevoerd Unlocking the database failed and you did not enter a password. Do you want to retry with an "empty" password instead? To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. - Het ontgrendelen van de database is mislukt omdat er geen wachtwoord is ingevoerd. -Wil je het opnieuw proberen met een ‘leeg’ wachtwoord? + Het ontgrendelen van de database is mislukt en je hebt geen wachtwoord ingevoerd. +Wil je het opnieuw proberen met een "leeg" wachtwoord? -Als je deze foutmelding niet meer wilt zien, ga dan naar ‘Databaseinstellingen… → Beveiliging’ en stel het wachtwoord opnieuw in. +Om deze fout te voorkomen ga je naar "Database instellingen.../Beveiliging" en herstel daar het wachtwoord. Retry with empty password - Opnieuw proberen met leeg wachtwoord + Probeer opnieuw met leeg wachtwoord + + + Failed to authenticate with Touch ID + Kan niet worden geverifieerd met Touch ID Failed to open key file: %1 - Het sleutelbestand kan niet worden geopend: %1 + Kon sleutelbestand niet openen: %1 Old key file format - Verouderd sleutelbestandsformaat + Oud sleutelbestandsformaat You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database &gt; Database Security &gt; Change Key File.</strong><br> - Je maakt gebruik van een verouderde sleutelbestandsindeling die <br>in de toekomst mogelijk niet meer ondersteund wordt.<br><br>Overweeg om een nieuw sleutelbestand te genereren via <br><strong>Database → Databasebeveiliging → Sleutelbestand wijzigen</strong>.<br> + Je gebruikt een oude sleutelbestandsindeling die KeePassXC<br>in de toekomst mogelijk niet meer ondersteunt.<br><br>Overweeg om een nieuw sleutelbestand te genereren bij:<br><strong>Database > Databasebeveiliging > Sleutelbestand wijzigen.</strong><br> Don't show this warning again - Deze waarschuwing niet meer weergeven + Deze waarschuwing niet meer geven All files @@ -1656,75 +1578,47 @@ Als je deze foutmelding niet meer wilt zien, ga dan naar ‘Databaseinstellingen Select key file - Selecteer een sleutelbestand + Kies sleutelbestand Cannot use database file as key file - Kan database niet gebruiken als sleutelbestand + Kan database niet als sleutelbestand gebruiken + + + You cannot use your database file as a key file. +If you do not have a key file, please leave the field empty. + Je kunt je database niet als sleutelbestand gebruiken. +Als je geen sleutelbestand hebt laat je het veld leeg. + + + Detecting hardware keys… + Hardwaresleutels detecteren... + + + No hardware keys detected + Geen hardwaresleutels gedetecteerd + + + Select hardware key… + Selecteer hardwaresleutel... + + + <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information…</p> + <p>Naast een wachtwoord kan je een geheim bestand gebruiken om de beveiliging van je database te verbeteren. Dit bestand kan worden gegenereerd in de beveiligingsinstellingen van je database.</p><p>Dit is <strong>niet</strong> jouw *.kdbx database-bestand!<br>Laat dit veld leeg als je geen sleutelbestand gebruikt.</p><p>Klik hier voor meer informatie...</p> + + + <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +<p>Click for more information…</p> + <p>Je kunt een hardwarebeveiligingssleutel gebruiken, zoals een <strong>YubiKey</strong> of <strong>OnlyKey</strong> met posities (slots) geconfigureerd voor HMAC-SHA1.</p> +<p>Klik voor meer informatie...</p> authenticate to access the database - authenticeren om toegang te krijgen tot de database + Toegang tot databank toestaan - Failed to authenticate with Quick Unlock: %1 - Snel ontgrendelen is mislukt: %1 - - - Select Key File: - Selecteer sleutelbestand: - - - <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!</p> - <p>Naast een wachtwoord kun je een geheim bestand gebruiken om de beveiliging van je database te verbeteren. Dit bestand kan worden gegenereerd in de beveiligingsinstellingen van jouw database.</p><p>Dit is <strong>niet</strong> jouw *.kdbx-databasebestand!</p> - - - Use hardware key [Serial: %1] - Gebruik hardwaresleutel [Serienummer: %1] - - - Use hardware key - Hardwaresleutel gebruiken - - - Your database file is NOT a key file! -If you don't have a key file or don't know what that is, you don't have to select one. - Jouw databasebestand is GEEN sleutelbestand! -Als je geen sleutelbestand hebt of niet weet wat dat is, hoef je er geen te selecteren. - - - KeePassXC database file selected - KeePassXC-databasebestand geselecteerd - - - The file you selected looks like a database file. -A database file is NOT a key file! - -Are you sure you want to continue with this file?. - Het bestand dat je hebt geselecteerd lijkt op een databasebestand. -Een databasebestand is GEEN sleutelbestand! - -Weet je zeker dat je wilt doorgaan met dit bestand? - - - No hardware keys found. - Geen hardwaresleutels gevonden. - - - Refresh Hardware Keys - Hardwaresleutels vernieuwen - - - Click to add a key file. - Klik om een sleutelbestand toe te voegen. - - - <a href="#" style="text-decoration: underline">I have a key file</a> - Ik heb een <a href="#" style="text-decoration: underline">sleutelbestand</a> - - - Hardware keys found, but no slots are configured. - Hardwaresleutels gevonden, echter zonder posities geconfigureerd. + Failed to authenticate with Windows Hello: %1 + De Windows Hello-verificatie is mislukt: %1 @@ -1736,6 +1630,10 @@ Weet je zeker dat je wilt doorgaan met dit bestand? DatabaseSettingsDialog + + Advanced Settings + Geavanceerde instellingen + General Algemeen @@ -1746,7 +1644,7 @@ Weet je zeker dat je wilt doorgaan met dit bestand? Database Credentials - Database inloggegevens + Databasegegevens Encryption Settings @@ -1760,40 +1658,32 @@ Weet je zeker dat je wilt doorgaan met dit bestand? Maintenance Onderhoud - - KeeShare - KeeShare - - - Secret Service Integration - Integratie met Secret Service - - - Remote Sync - Synchronisatie op afstand - - - Database Settings: %1 - Database-instellingen: %1 - DatabaseSettingsWidgetBrowser KeePassXC-Browser settings - KeePassXC-Browser-instellingen + KeePassXC-Browser instellingen - Disconnect all browsers - Alle browsers loskoppelen + Convert KeePassHTTP data + KeePassHTTP-gegevens converteren - Forget all site-specific settings on entries - Alle website-specifieke instellingen van items vergeten + Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data + Converteer verouderde KeePassHTTP-kenmerken naar KeePassXC-Browser-compatibele aangepaste gegevens Refresh database root group ID - Database-hoofdgroep-id vernieuwen + Database-rootgroep-ID vernieuwen + + + Disconnect all browsers + Verbreek de verbinding met alle browsers + + + Forget all site-specific settings on entries + Vergeet alle site-specifieke instellingen bij items Stored keys @@ -1818,8 +1708,8 @@ Weet je zeker dat je wilt doorgaan met dit bestand? Do you really want to delete the selected key? This may prevent connection to the browser plugin. - Wil je de geselecteerde sleutel verwijderen? -Dit kan de verbinding met de browserplug-in belemmeren. + Wil je de geselecteerde sleutel echt verwijderen? +Hierdoor werkt de verbinding met de browserextensie mogelijk niet meer. Key @@ -1835,80 +1725,85 @@ Dit kan de verbinding met de browserplug-in belemmeren. Enable Browser Integration to access these settings. - Schakel browserintegratie in om deze instellingen te kunnen wijzigen. + Activeer browserintegratie om deze instellingen te kunnen wijzigen. Do you really want to disconnect all browsers? This may prevent connection to the browser plugin. - Wil je alle browsers loskoppelen? -Dit kan de verbinding met de browserplug-in belemmeren. + Wil je echt de verbinding met alle browsers verbreken? +Hierdoor werkt de verbinding met de browserextensie mogelijk niet meer. + + + KeePassXC: No keys found + KeePassXC: Geen sleutels gevonden No shared encryption keys found in KeePassXC settings. - Er zijn geen gedeelde beveiligingssleutels aangetroffen in de KeePassXC-instellingen. + Geen gedeelde coderingssleutels gevonden in KeePassXC instellingen. + + + KeePassXC: Removed keys from database + KeePassXC: Sleutels uit database verwijderd Successfully removed %n encryption key(s) from KeePassXC settings. - Er is %n beveiligingssleutel verwijderd uit de KeePassXC-instellingen.Er zijn %n beveiligingssleutels verwijderd uit de KeePassXC-instellingen. + Er is %n coderingssleutel uit KeePassXC instellingen verwijderd.Er zijn %n coderingssleutels uit KeePassXC-instellingen verwijderd. Do you really want forget all site-specific settings on every entry? Permissions to access entries will be revoked. - Wil je alle website-specifieke instellingen van alle items vergeten? -Hierdoor worden alle toegangsrechten ingetrokken. + Wil je echt alle site-specifieke instellingen bij items vergeten? Machtigingen voor toegang zullen worden ingetrokken. Removing stored permissions… - Verwijderen van opgeslagen toegangsrechten… + Opgeslagen machtigingen verwijderen… Abort Afbreken + + KeePassXC: Removed permissions + KeePassXC: machtigingen verwijderd + Successfully removed permissions from %n entry(s). - Er zijn toegangsrechten verwijderd uit %n item.Er zijn toegangsrechten verwijderd uit %n items. + 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 toegangsrechten. + De actieve database bevat geen items met machtigingen. + + + Move KeePassHTTP attributes to custom data + KeePassHTTP-kenmerken naar aangepaste gegevens verplaasen + + + Do you really want to convert 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 browserextensie te behouden. Refresh database ID - Database-id vernieuwen + Database-ID vernieuwen Do you really want refresh the database ID? This is only necessary if your database is a copy of another and the browser extension cannot connect. - Wil je de database-id vernieuwen? + Wilt je echt de database-ID vernieuwen? Dit is alleen nodig als je database een kopie is van een andere en de browserextensie geen verbinding kan maken. - - Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data - Converteer verouderde KeePassHTTP-kenmerken naar KeePassXC-Browser-compatibele gegevens - - - No keys found - Geen sleutels gevonden - - - Removed keys from database - Sleutels uit database verwijderd - - - Removed permissions - Toestemmingen verwijderd - - - No entry with permissions found! - Geen item met toestemmingen gevonden! - DatabaseSettingsWidgetDatabaseKey Add additional protection… - Aanvullende bescherming toevoegen… + Aanvullende beveiliging toevoegen... No password set @@ -1918,9 +1813,9 @@ Dit is alleen nodig als je database een kopie is van een andere en de browserext 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. Het gebruik van een database zonder wachtwoord wordt sterk afgeraden! + WAARSCHUWING! Je hebt geen wachtwoord ingesteld. Een database gebruiken zonder wachtwoord wordt sterk afgeraden! -Weet je zeker dat je wilt doorgaan zonder wachtwoord? +Weet je zeker dat je door wilt gaan zonder een wachtwoord? Continue without password @@ -1928,11 +1823,11 @@ Weet je zeker dat je wilt doorgaan zonder wachtwoord? No encryption key added - Geen beveiligingssleutel toegevoegd + Geen coderingssleutel toegevoegd You must add at least one encryption key to secure your database! - Je moet ten minste één beveiligingssleutel aan de database toevoegen om deze te beveiligen! + Je moet minstens één coderingssleutel aan je database toevoegen om deze te beveiligen! Unknown error @@ -1940,19 +1835,7 @@ Weet je zeker dat je wilt doorgaan zonder wachtwoord? Failed to change database credentials - Kan de database-inloggegevens niet wijzigen - - - Weak password - Zwak wachtwoord - - - This is a weak password! For better protection of your secrets, you should choose a stronger password. - Dit is een zwak wachtwoord! Voor een betere bescherming van jouw geheimen moet je een sterker wachtwoord kiezen. - - - The provided password does not meet the minimum quality requirement. - Het opgegeven wachtwoord voldoet niet aan de minimale kwaliteitseisen. + Veranderen van databasereferenties is mislukt @@ -1961,21 +1844,29 @@ Weet je zeker dat je wilt doorgaan zonder wachtwoord? Decryption Time: Decoderingstijd: + + Change existing decryption time + Huidige decoderingstijd wijzigen + + + Change + Wijzigen + Decryption time in seconds Decoderingstijd in seconden Higher values offer more protection, but opening the database will take longer. - Hogere waarden bieden meer bescherming, maar zorgen voor een langere wachttijd bij het openen. + Hogere waarden bieden meer bescherming, maar laten het openen van de database langer duren. Database format: - Databaseindeling: + Database-indeling: Database format - Databaseindeling + Database-indeling Format cannot be changed: Your database uses KDBX 4 features @@ -1983,7 +1874,7 @@ Weet je zeker dat je wilt doorgaan zonder wachtwoord? Unless you need to open your database with other programs, always use the latest format. - Gebruik altijd de nieuwste indeling, tenzij je de database met andere programma's moet openen. + Tenzij je de database met andere programma's wil openen, gebruik je altijd de nieuwste indeling. Encryption Algorithm: @@ -1995,15 +1886,15 @@ Weet je zeker dat je wilt doorgaan zonder wachtwoord? AES: 256 Bit (default) - AES: 256-bit (standaard) + AES: 256 bit (standaard) Twofish: 256 Bit - Twofish: 256-bit + Twofish: 256 bit Key Derivation Function: - Sleutelafleidingsfunctie: + Sleutel-afleidingsfunctie: Key derivation function @@ -2011,11 +1902,11 @@ Weet je zeker dat je wilt doorgaan zonder wachtwoord? Transform rounds: - Aantal iteraties: + Transformatie-iteraties: Transform rounds - Aantal iteraties + Transformatierondes Memory Usage: @@ -2041,22 +1932,27 @@ Weet je zeker dat je wilt doorgaan zonder wachtwoord? KDBX 3 KDBX 3 + + unchanged + Database decryption time is unchanged + ongewijzigd + Number of rounds too high Key transformation rounds - Het aantal iteraties is te hoog + 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, days, or even longer to open. - Je maakt gebruik van een zeer hoog aantal sleuteltransformaties met Argon2. + 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 + Begrepen, aantal aanhouden Cancel @@ -2065,15 +1961,15 @@ Als je dit aantal aanhoudt, kan het uren, dagen of zelfs langer duren om de data Number of rounds too low Key transformation rounds - Het aantal iteraties is te laag + 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 will not be protected from brute force attacks. - Je maakt gebruik van een zeer laag aantal sleuteltransformaties met AES-KDF. + Je gebruikt een zeer laag aantal sleuteltransformatie-iteraties met AES-KDF. -Als je dit aantal aanhoudt, dan is de database niet bestand tegen langdurige brute krachtaanvallen! +Als je dit aantal aanhoudt is je database niet bestand tegen brute kracht aanvallen! KDF unchanged @@ -2081,7 +1977,7 @@ Als je dit aantal aanhoudt, dan is de database niet bestand tegen langdurige bru Failed to transform key with new KDF parameters; KDF unchanged. - Het transformeren van de sleutel met de nieuwe KDF-opties is mislukt. De KDF is ongewijzigd. + Het transformeren van de sleutel met de nieuwe KDF-parameters is mislukt; KDF is ongewijzigd. MiB @@ -2091,34 +1987,22 @@ Als je dit aantal aanhoudt, dan is de database niet bestand tegen langdurige bru thread(s) Threads for parallel execution (KDF settings) - procesprocessen - - - Encryption Settings: - Versleutelingsinstellingen: - - - Basic - Standaard - - - Advanced - Geavanceerd + thread(s)thread(s) DatabaseSettingsWidgetFdoSecrets Exposed Entries - Blootgestelde items + Beschikbare items Don't expose this database - Database niet blootstellen + Deze database niet blootstellen Expose entries under this group: - Items uit deze groep blootstellen: + Items onder deze groep blootstellen: Enable Secret Service to access these settings. @@ -2129,23 +2013,23 @@ Als je dit aantal aanhoudt, dan is de database niet bestand tegen langdurige bru DatabaseSettingsWidgetGeneral Database Metadata - Database-metagegevens + Database meta-gegevens Database name: - Databasenaam: + Naam van de database: Database name field - Database-naamveld + Databasenaamveld Database description: - Databasebeschrijving: + Beschrijving van de database: Database description field - Database-beschrijvingveld + Databaseomschrijvingveld Default username: @@ -2153,7 +2037,7 @@ Als je dit aantal aanhoudt, dan is de database niet bestand tegen langdurige bru Default username field - Standaard gebruikersnaamveld + Standaardgebruikersnaamveld History Settings @@ -2165,7 +2049,7 @@ Als je dit aantal aanhoudt, dan is de database niet bestand tegen langdurige bru Maximum size of history per entry - Maximale omvang van vorige versies per item + Maximale grootte van vorige versies per item MiB @@ -2185,13 +2069,13 @@ Als je dit aantal aanhoudt, dan is de database niet bestand tegen langdurige bru Delete Recycle Bin - Prullenbak verwijderen + Verwijder prullenbak Do you want to delete the current recycle bin and all its contents? This action is not reversible. - Weet je zeker dat je de huidige prullenbak, incl. inhoud wilt verwijderen? -Deze actie kan niet ongedaan worden gemaakt. + Wil je de huidige prullenbak en al zijn inhoud verwijderen? +Deze actie is onomkeerbaar. (old) @@ -2203,14 +2087,14 @@ the oldest history items of an entry will be removed such that only the specified amount of entries remain at most. Bij het opslaan van deze instelling of het -bewerken van een item zal dit ten koste gaan -van de oudste elementen in de geschiedenis, -waarmee het gespecificeerde maximum aantal -elementen in de geschiedenis bewaard blijft. +bewerken van een item worden de oudste +geschiedenisitems van een item verwijderd, +zodat alleen het gespecificeerde aantal items +maximaal blijft. Limit the amount of history items per entry to: - Aantal geschiedenisitems per item beperken tot: + Beperk het aantal geschiedenisitems per item tot: When saving this setting or editing an entry @@ -2218,14 +2102,14 @@ the oldest history items of an entry will be removed such that the remaining history items add up to the specified amount at most. Bij het opslaan van deze instelling of het -bewerken van een item zal dit ten koste gaan -van de oudste elementen in de geschiedenis, -waarmee de resterende geschiedenis -maximaal de gespecificeerde hoeveelheid bedraagt. +bewerken van een item worden de oudste +geschiedenisitems van een item verwijderd, +zodat de resterende geschiedenisitems +maximaal het gespecificeerde bedrag bedragen. Limit the total size of history items per entry to: - Totale grootte van geschiedenisitems per item beperken tot: + Beperk de totale grootte van geschiedenisitems per item tot: Move entries to a recycle bin group @@ -2234,73 +2118,9 @@ Entries deleted from the recycle bin are removed from the database. Verplaats items naar een prullenbakgroep in plaats van ze uit de database te verwijderen. -Items die uit de prullenbak worden gewist, +Inzendingen die uit de prullenbak zijn verwijderd, worden uit de database verwijderd. - - Autosave delay since last change - Vertraging bij automatisch opslaan sinds laatste wijziging - - - Autosave delay - Vertraging bij automatisch opslaan - - - Autosave delay since last change in minutes - Vertraging bij automatisch opslaan sinds laatste wijziging (in minuten) - - - min - min. - - - Autosave delay since last change checkbox - Vertraging bij automatisch opslaan sinds laatste wijziging (selectievakje) - - - Public Database Metadata - Openbare database-metagegevens - - - Warning: the following settings are not encrypted. - Let op: de volgende instellingen zijn niet versleuteld. - - - Display name: - Weergavenaam: - - - Publically visible display name used on the unlock dialog - Openbaar zichtbare weergavenaam gebruikt in het dialoogvenster Ontgrendelen - - - Database public display name - Openbaar zichtbare databasenaam - - - Display color: - Weergavekleur: - - - Publically visible color used on the unlock dialog - Openbaar zichtbare kleur gebruikt in het dialoogvenster Ontgrendelen - - - Database public display color chooser - Openbaar zichtbare databasekleur kiezen - - - Clear - Wissen - - - Display icon: - Weergavepictogram: - - - Select Database Icon - Databasepictogram kiezen - DatabaseSettingsWidgetKeeShare @@ -2342,15 +2162,15 @@ worden uit de database verwijderd. Delete selected icon(s) - Geselecteerde pictogram(men) verwijderen + Geselecteerde pictogram(en) verwijderen Delete all custom icons not in use by any entry or group - Alle ongebruikte aangepaste pictogrammen verwijderen + Alle aangepaste pictogrammen verwijderen die niet door een vermelding of groep worden gebruikt Purge unused icons - Ongebruikte pictogrammen verwijderen + Ongebruikte pictogrammen opschonen Confirm Deletion @@ -2358,34 +2178,34 @@ worden uit de database verwijderd. At least one of the selected icons is currently in use by at least one entry or group. The icons of all affected entries and groups will be replaced by the default icon. Are you sure you want to delete icons that are currently in use? - Ten minste één van de geselecteerde pictogrammen wordt momenteel gebruikt door een item of groep. De pictogrammen van alle betrokken items en groepen worden vervangen door het standaardpictogram. Weet je zeker dat je de in gebruik zijnde pictogrammen wilt verwijderen? + Tenminste één van de geselecteerde pictogrammen wordt momenteel gebruikt door tenminste één item of groep. De pictogrammen van alle betrokken vermeldingen en groepen worden vervangen door het standaardpictogram. Weet je zeker dat je pictogrammen wilt verwijderen die momenteel in gebruik zijn? Custom Icons Are In Use - Aangepaste pictogrammen in gebruik + Aangepaste pictogrammen zijn in gebruik All custom icons are in use by at least one entry or group. - Alle aangepaste pictogrammen zijn in gebruik door ten minste één item of groep. + Alle aangepaste pictogrammen worden gebruikt door tenminste één item of groep. Purged Unused Icons - Ongebruikte pictogrammen zijn verwijderd + Ongebruikte pictogrammen gewist Purged %n icon(s) from the database. - %n pictogram uit de database verwijderd.%n pictogrammen uit de database verwijderd. + %n-pictogram(en) uit de database verwijderd.%n pictogram(en) zijn uit de database verwijderd. DatabaseSettingsWidgetMetaDataSimple Database Name: - Databasenaam: + Database naam: Database name field - Database-naamveld + Databasenaamveld Description: @@ -2393,149 +2213,14 @@ worden uit de database verwijderd. Database description field - Database-omschrijvingveld - - - - DatabaseSettingsWidgetRemote - - Sync Commands - Synchronisatieopdrachten - - - Remove - Verwijderen - - - Command Settings - Opdrachtinstellingen - - - Name - Naam - - - Save - Opslaan - - - Download - Downloaden - - - Command: - Opdracht: - - - Download command field - Download-opdrachtveld - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - bv.: "sftp user@hostname" of "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - - - Input: - Invoer: - - - Download input field - Download-invoerveld - - - Upload - Uploaden - - - Upload command field - Upload-opdrachtveld - - - e.g.: "sftp user@hostname" or "scp {TEMP_DATABASE} user@hostname:DatabaseOnRemote.kdbx" - bv.: "sftp user@hostname" of "scp {TEMP_DATABASE} user@hostname:DatabaseOnRemote.kdbx" - - - Upload input field - Upload-invoerveld - - - Name cannot be empty. - Naam kan niet leeg zijn. - - - Test - Testen - - - Download command cannot be empty. - Downloadopdracht kan niet leeg zijn. - - - Download failed with error: %1 - Download is mislukt met fout: %1 - - - Download finished, but file %1 could not be found. - Download is klaar, maar bestand %1 is niet gevonden. - - - Download successful. - Download succesvol. - - - Save Remote Settings - Externe instellingen opslaan - - - You have unsaved changes. Do you want to save them? - Er zijn niet-opgeslagen wijzigingen. Wil je deze opslaan? - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - bijv.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} wordt gebruikt als tijdelijke aanduiding om de database op een tijdelijke locatie op te slaan -De opdracht moet worden afgesloten. In het geval van `sftp` moet de laatste opdracht `exit` worden verzonden - - - - e.g.: -put {TEMP_DATABASE} DatabaseOnRemote.kdbx -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - bijv.: -put {TEMP_DATABASE} DatabaseOnRemote.kdbx -exit ---- -{TEMP_DATABASE} wordt gebruikt als tijdelijke aanduiding om de database op een tijdelijke locatie op te slaan -De opdracht moet worden afgesloten. In het geval van `sftp` moet de laatste opdracht `exit` worden verzonden - - - - Timeout: - Time-out: - - - seconds - seconden + Databaseomschrijvingveld DatabaseTabWidget Database creation error - Fout bij het aanmaken van de database + Fout bij het aanmaken van de database: The created database has no key or KDF, refusing to save it. @@ -2557,47 +2242,60 @@ Dit is zeker een fout, rapporteer dit aan de ontwikkelaars. Failed to open %1. It either does not exist or is not accessible. - %1 is niet geopend. De database bestaat niet of is ontoegankelijk. + Kon %1 niet openen. Het bestaat niet of is niet toegankelijk. CSV file - Csv-bestand + CSV-bestand + + + Select CSV file + Selecteer CSV-bestand Merge database - Database samenvoegen + Databases samenvoegen + + + KeePass 1 database + KeePass 1-database + + + Open KeePass 1 database + KeePass 1-database openen + + + Open OPVault + OPVault openen Export database to CSV file - Database exporteren naar csv-bestand + Database exporteren naar CSV-bestand Writing the CSV file failed. - Het csv-bestand is niet weggeschreven. + Schrijven van het CSV-bestand mislukt. Writing the HTML file failed. - Het html-bestand is niet weggeschreven. - - - Export database to XML file - Database exporteren naar XML-bestand - - - XML file - XML-bestand - - - Writing the XML file failed - Het XML-bestand is niet weggeschreven. + Schrijven van het HTML-bestand is mislukt. Export Confirmation - Exporteren bevestigen + Exporteerbevestiging You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? - Je staat op het punt om de database naar een onbeveiligd bestand te exporteren. Hierdoor worden de wachtwoorden en gevoelige informatie kwetsbaar! Weet je zeker dat je door wilt gaan? + Je gaat je database naar een niet-versleuteld bestand exporteren. Dit maakt je wachtwoorden en gevoelige informatie kwetsbaar! Weet je zeker dat je door wil gaan? + + + New Database + Nieuwe database + + + %1 [New Database] + Database tab name modifier + %1 [nieuwe database] %1 [Locked] @@ -2605,32 +2303,35 @@ Dit is zeker een fout, rapporteer dit aan de ontwikkelaars. %1 [vergrendeld] - %1 [Temporary] - Database tab name modifier - %1 [Tijdelijk] + Export database to XML file + Database exporteren naar xml-bestand + + + XML file + Xml-bestand + + + Writing the XML file failed + Het xml-bestand kan niet worden weggeschreven. DatabaseWidget - - Searches and Tags - Zoekopdrachten en labels - Searching… - Zoeken… + Bezig met zoeken… Shared group… - Gedeelde groep… + Gedeelde groep... Confirm Auto-Type - Automatisch invullen bevestigen + Auto-type bevestigen Perform Auto-Type into the previously active window? - Automatisch invullen uitvoeren in het vorige actieve venster? + Auto-type uitvoeren in het venster dat zojuist actief was? Execute command? @@ -2638,11 +2339,11 @@ Dit is zeker een fout, rapporteer dit aan de ontwikkelaars. Do you really want to execute the following command?<br><br>%1<br> - Wil je de volgende opdracht uitvoeren? <br><br>%1<br> + Weet je zeker dat je de volgende opdracht wil uitvoeren? <br><br>%1<br> Remember my choice - Keuze onthouden + Mijn keuze onthouden Delete group @@ -2650,24 +2351,20 @@ Dit is zeker een fout, rapporteer dit aan de ontwikkelaars. Do you really want to delete the group "%1" for good? - Wil je de groep ‘%1’ voorgoed verwijderen? + Weet je zeker dat je de groep "%1" wil verwijderen? Move group to recycle bin? - Groep naar de prullenbak verplaatsen? + Groep naar prullenbak verplaatsen? Do you really want to move the group "%1" to the recycle bin? - Wil je ‘%1’ naar de prullenbak verplaatsen? + Weet je zeker dat je de groep '%1' naar de prullenbak wilt verplaatsen? Expired entries Verlopen items - - Entries expiring within %1 day(s) - Items die binnen %1 dag verlopenItems die binnen %1 dagen verlopen - No current database. Geen actuele database. @@ -2682,7 +2379,7 @@ Dit is zeker een fout, rapporteer dit aan de ontwikkelaars. Database was not modified by merge operation. - De database is niet aangepast door het samenvoegen. + Database werd niet gewijzigd door het samenvoegen. Search Results (%1) @@ -2690,19 +2387,7 @@ Dit is zeker een fout, rapporteer dit aan de ontwikkelaars. No Results - Er zijn geen zoekresultaten - - - Save - Opslaan - - - Enter a unique name or overwrite an existing search from the list: - Voer een unieke naam in of overschrijf een bestaande zoekopdracht op de lijst: - - - Save Search - Zoekopdracht opslaan + Geen resultaten Lock Database? @@ -2715,13 +2400,13 @@ Dit is zeker een fout, rapporteer dit aan de ontwikkelaars. "%1" was modified. Save changes? - ‘%1’ is gewijzigd. + "%1" is aangepast. Wijzigingen opslaan? Database was modified. Save changes? - De database is gewijzigd. + Database is gewijzigd. Wijzigingen opslaan? @@ -2732,6 +2417,26 @@ Wijzigingen opslaan? File has changed Bestand is gewijzigd + + The database file has changed. Do you want to load the changes? + Het database-bestand is gewijzigd. Wil je de aanpassingen inlezen? + + + Merge Request + Samenvoegingsverzoek + + + The database file has changed and you have unsaved changes. +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. +Error: %1 + Kan het nieuwe databasebestand niet openen tijdens het automatisch opnieuw laden. +Fout: %1 + Disable safe saves? Veilig opslaan uitschakelen? @@ -2739,12 +2444,12 @@ Wijzigingen opslaan? 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 de database meerdere keren niet kunnen opslaan. Dit wordt waarschijnlijk veroorzaakt doordat een synchronisatiedienst het bestand vergrendeld houdt. + KeePassXC heeft de database meerdere keren niet kunnen opslaan. Dit wordt waarschijnlijk veroorzaakt doordat een synchronisatie-dienst het bestand vergrendeld houdt. Veilig opslaan uitschakelen en opnieuw proberen? Writing the database failed: %1 - De database is niet weggeschreven: %1 + Het schrijven van de database is mislukt: %1 Passwords @@ -2760,7 +2465,7 @@ Veilig opslaan uitschakelen en opnieuw proberen? Save database backup - Reservekopie van database opslaan + Database-backup opslaan Empty recycle bin? @@ -2768,100 +2473,31 @@ Veilig opslaan uitschakelen en opnieuw proberen? Are you sure you want to permanently delete everything from your recycle bin? - Weet je zeker dat je alles definitief uit de prullenbak wilt verwijderen? + Weet je zeker dat je alles definitief uit de prullenbak wil verwijderen? Could not find database file: %1 - Het databasebestand is niet aangetroffen: %1 + Databasebestand is niet aangetroffen: %1 + + + Entries expiring within %1 day(s) + Items die binnen %1 dag aflopenItems die binnen %1 dagen aflopen - New Database - Nieuwe database + Searches and Tags + Zoekopdrachten en labels - %1 [New Database] - Database tab name modifier - %1 [nieuwe database] + Enter a unique name or overwrite an existing search from the list: + Voer een unieke naam in of overschrijf een bestaande zoekopdracht op de lijst: - Remote Sync did not contain any download or upload commands. - Synchronisatie op afstand bevatte geen download- of uploadopdrachten. + Save + Opslaan - Remote sync '%1' completed successfully! - Synchronisatie op afstand '%1' met succes voltooid! - - - Remote sync '%1' failed: %2 - Synchronisatie op afstand '%1' mislukt: %2 - - - Error while saving database %1: %2 - Fout bij het opslaan van database %1: %2 - - - Downloading... - Downloaden… - - - Uploading... - Uploaden… - - - Syncing... - Synchroniseren… - - - Remove passkey from entry - Passkey van item verwijderen - - - Do you want to remove the passkey from this entry? - Wil je de passkey van dit item verwijderen? - - - The database file "%1" was modified externally - Het databasebestand "%1" is extern gewijzigd - - - Do you want to load the changes? - Wil je de wijzigingen laden? - - - Reload database - Database opnieuw laden - - - Reloading database… - Database opnieuw laden… - - - Reload canceled - Opnieuw laden geannuleerd - - - Reload successful - Met succes opnieuw geladen - - - Reload pending user action… - Opnieuw laden wacht op actie van gebruiker… - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes<br>Ignore the changes on disk until save<br>Discard unsaved changes - Het databasebestand "%1" is extern gewijzigd.<br>Hoe wil je verder gaan?<br><br>Alle verschillen samenvoegen<br>De wijzigingen op de schijf negeren tot opslaan<br>Niet-opgeslagen wijzigingen negeren - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes then save<br>Overwrite the changes on disk<br>Discard unsaved changes - Het databasebestand "%1" is extern gewijzigd.<br>Hoe wil je verder gaan?<br><br>Alle wijzigingen samenvoegen en opslaan<br>De wijzigingen op de schijf overschrijven<br>Niet-opgeslagen wijzigingen negeren - - - Database file overwritten. - Databasebestand overschreven. - - - Database file on disk cannot be unlocked with current credentials.<br>Enter new credentials and/or present hardware key to continue. - Databasebestand op schijf kan niet worden ontgrendeld met de huidige inloggegevens.<br>Voer nieuwe inloggegevens en/of een hardwaresleutel in om door te gaan. + Save Search + Zoekopdracht opslaan @@ -2880,7 +2516,7 @@ Veilig opslaan uitschakelen en opnieuw proberen? Auto-Type - Automatisch invullen + Auto-type Browser Integration @@ -2896,7 +2532,7 @@ Veilig opslaan uitschakelen en opnieuw proberen? Are you sure you want to remove this URL? - Weet je zeker dat je deze URL wil verwijderen? + Weet je zeker dat je dit URL wil verwijderen? Properties @@ -2914,13 +2550,17 @@ Veilig opslaan uitschakelen en opnieuw proberen? n/a n.v.t. + + (encrypted) + (versleuteld) + Select private key - Selecteer een persoonlijke sleutel + Kies persoonlijke sleutel Entry history - Geschiedenis van het item + Item geschiedenis Add entry @@ -2932,27 +2572,27 @@ Veilig opslaan uitschakelen en opnieuw proberen? Some Browser Integration settings are overridden by group settings. - Sommige instellingen omtrent de browserintegratie worden genegeerd door groepsinstellingen. + Sommige instellingen voor browserintegratie worden overschreven door groepsinstellingen. Invalid Entry - Ongeldig item + Ongeldige invoer An external merge operation has invalidated this entry. Unfortunately, any changes made have been lost. - Door een externe samenvoeging is dit item beschadigd. -Helaas zijn alle aangebrachte wijzigingen hierdoor verloren gegaan. + Een externe samenvoegbewerking heeft dit item ongeldig gemaakt. +Helaas zijn alle aangebrachte wijzigingen verloren gegaan. Auto-Type Validation Error - Validatiefout bij Automatisch invullen + Validatiefout bij Auto-type An error occurred while validating the custom Auto-Type sequence: %1 Would you like to correct it? - Er is een fout opgetreden bij de validatie van de aangepaste invulreeks: + Er is een fout opgetreden tijdens het valideren van de aangepaste Auto-type reeks: %1 Wil je dit corrigeren? @@ -2960,7 +2600,7 @@ Wil je dit corrigeren? An error occurred while validating the Auto-Type sequence for "%1": %2 Would you like to correct it? - Er is een fout opgetreden bij de validatie van de aangepaste invulreeks ‘%1’: + Er is een fout opgetreden tijdens het valideren van de Auto-type reeks voor %1: %2 Wil je dit corrigeren? @@ -2974,7 +2614,7 @@ Wil je dit corrigeren? Would you like to save changes to this entry? - Wil je de wijzigingen aan dit item opslaan? + Wil je de wijzigingen in dit item opslaan? New attribute @@ -2986,7 +2626,7 @@ Wil je dit corrigeren? Are you sure you want to remove this attribute? - Weet je zeker dat je dit kenmerk wilt verwijderen? + Weet je zeker dat je dit kenmerk wil verwijderen? Reveal @@ -2994,16 +2634,12 @@ Wil je dit corrigeren? [PROTECTED] Press Reveal to view or edit - [BEVEILIGD] Klik op ‘Onthullen’ om te tonen of bewerken + [BESCHERMD] Druk op Onthullen om te bekijken of te bewerken Hide Verbergen - - %n hour(s) - %n uur%n uren - %n week(s) %n week%n weken @@ -3016,9 +2652,9 @@ Wil je dit corrigeren? %n year(s) %n jaar%n jaren - - Failed to decrypt SSH key, ensure password is correct. - Kan SSH-sleutel niet decoderen, zorg ervoor dat het wachtwoord correct is. + + %n hour(s) + %n uur%n uur @@ -3037,7 +2673,7 @@ Wil je dit corrigeren? Add a new attribute - Nieuw kenmerk toevoegen + Een nieuw kenmerk toevoegen Add @@ -3045,7 +2681,7 @@ Wil je dit corrigeren? Remove selected attribute - Geselecteerd kenmerk verwijderen + Gekozen kenmerk verwijderen Remove @@ -3061,15 +2697,15 @@ Wil je dit corrigeren? Toggle attribute protection - Kenmerkbescherming wisselen + Kenmerkbescherming aan/uit Protect - Beschermen + Beveiligen Show a protected attribute - Beschermd kenmerk weergeven + Een beschermd kenmerk weergeven Reveal @@ -3081,7 +2717,7 @@ Wil je dit corrigeren? If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements. - Indien aangevinkt, wordt de vermelding niet weergegeven in rapporten zoals Health Check en HIBP, zelfs als deze niet voldoet aan de kwaliteitseisen. + Als deze optie is ingeschakeld, wordt de vermelding niet weergegeven in rapporten zoals Health Check en HIBP, zelfs niet als deze niet voldoet aan de kwaliteitseisen. Exclude from database reports @@ -3093,7 +2729,7 @@ Wil je dit corrigeren? Foreground color selection - Selectie voorgrondkleur + Voorgrondkleurselectie Background Color: @@ -3101,103 +2737,119 @@ Wil je dit corrigeren? Background color selection - Selectie achtergrondkleur + Achtergrondkleurselectie EditEntryWidgetAutoType Enable Auto-Type for this entry - Automatisch invullen inschakelen voor dit item + Auto-type inschakelen voor dit item Inherit default Auto-Type sequence from the group - Standaard invulreeks van de groep overnemen + Standaard auto-typevolgorde van de groep overnemen Use custom Auto-Type sequence: - Aangepaste invulreeks gebruiken: + Gebruik aangepaste Auto-typevolgorde: Custom Auto-Type sequence - Aangepaste invulreeks + Aangepaste Auto-type tekenreeks Open Auto-Type help webpage - Hulppagina over automatisch invullen openen + Open Auto-type help-webpagina Window Associations - Venstertoewijzingen + Scherm-koppelingen Existing window associations - Bestaande venstertoewijzingen + Bestaande venster koppelingen Add new window association - Venstertoewijzing toevoegen + Voeg venster koppeling toe + + + Remove selected window association + Verwijder scherm koppeling + + + Window title: + Vensternaam: + + + You can use an asterisk (*) to match everything + Je kunt een ster (*) gebruiken om alles te vinden + + + Set the window association title + Stel de venster koppeling titel in + + + You can use an asterisk to match everything + Je kunt een sterretje gebruiken om alles te vinden + + + Use a specific sequence for this association: + Gebruik een specifieke tekenreeks voor deze associatie. + + + Custom Auto-Type sequence for this window + Aangepaste Auto-type tekenreeks voor dit venster + Add item + - - Remove selected window association - Venstertoewijzing verwijderen - - Remove item - - - Window title: - Venstertitel: - - - You can use an asterisk (*) to match everything - Gebruik een asterisk (*) om alles overeen te laten komen - - - Set the window association title - Titel venstertoewijzing instellen - - - You can use an asterisk to match everything - Gebruik een asterisk (*) om alles overeen te laten komen - - - Use a specific sequence for this association: - Specifieke tekenreeks gebruiken bij deze toewijzing: - - - Custom Auto-Type sequence for this window - Aangepaste invulreeks voor dit venster - EditEntryWidgetBrowser + + These settings affect to the entry's behaviour with the browser extension. + Deze instellingen beïnvloeden het gedrag van de browserextensie voor dit item. + General Algemeen Hide this entry from the browser extension - Dit item verbergen in browserextensie + Verberg dit item in de browserextensie Skip Auto-Submit for this entry Automatisch indienen uitschakelen voor dit item + + Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. + Stuur deze instelling alleen naar de browser voor HTTP Auth-dialogen. Indien ingeschakeld, tonen normale aanmeldingsformulieren dit item niet voor selectie. + Use this entry only with HTTP Basic Auth - Item alleen gebruiken met HTTP Basic Auth + Gebruik dit item alleen met HTTP Basic Auth + + + Do not send this setting to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. + Stuur deze instelling niet naar de browser voor HTTP Auth-dialoogvensters. Indien ingeschakeld, zullen HTTP-authenticatiedialogen dit item niet tonen voor selectie. Do not use this entry with HTTP Basic Auth - Item niet gebruiken met HTTP Basic Auth + Gebruik dit item niet met HTTP Basic Auth + + + Additional URL's + Aanvullende URLs Add @@ -3211,40 +2863,24 @@ Wil je dit corrigeren? Edit Bewerken - - These settings affect the entry's behaviour with the browser extension. - Deze instellingen beïnvloeden het gedrag van de invoer met de browserextensie. - - - Additional URLs - Aanvullende URL's - - - Only send this entry to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. - Stuur deze instelling alleen naar de browser voor HTTP Auth-dialoogvensters. Indien ingeschakeld, zullen normale aanmeldingsformulieren dit item niet als keuze tonen. - - - Do not send this entry to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. - Stuur deze instelling niet naar de browser voor HTTP Auth-dialoogvensters. Indien ingeschakeld, zullen HTTP Auth-dialoogvensters dit item niet als keuze tonen. - EditEntryWidgetHistory Entry history selection - Selectie van itemgeschiedenis + Item geschiedenis selectie Show entry at selected history state - Item tonen in geselecteerde geschiedenisstatus + Toon het item zoals in geselecteerde vorige versie Show - Weergeven + Tonen Restore entry to selected history state - Item herstellen in geselecteerde geschiedenisstatus + Herstel het item naar de geselecteerde vorige versie Restore @@ -3252,7 +2888,7 @@ Wil je dit corrigeren? Delete selected history state - Geselecteerde geschiedenisstatus verwijderen + Verwijder geselecteerde vorige versie Delete @@ -3260,7 +2896,7 @@ Wil je dit corrigeren? Delete all history - Alle vorige versies verwijderen + Verwijder alle vorige versies Delete all @@ -3271,35 +2907,35 @@ Wil je dit corrigeren? EditEntryWidgetMain Edit Entry - Item bewerken + Invoer bewerken Notes field - Notitieveld + Notities veld Username field - Gebruikersnaamveld + Gebruikersnaam veld Expiration field - Verloopveld + Vervaldatum veld Expiration Presets - Verloop-voorinstellingen + Vervaldatum voorinstellingen Expiration presets - Verloop-voorinstellingen + Vervaldatum voorinstellingen Presets - Voorinstellingen + Voorkeuze Url field - URL-veld + URL veld Download favicon for URL @@ -3307,15 +2943,15 @@ Wil je dit corrigeren? Title field - Titelveld + Titel veld Password field - Wachtwoordveld + Wachtwoord invulveld Toggle expiration - Verloopdatum tonen/verbergen + Vervaldatum wel/niet tonen Tags list @@ -3327,7 +2963,7 @@ Wil je dit corrigeren? &Title: - &Titel: + Naa&m: &Password: @@ -3335,7 +2971,7 @@ Wil je dit corrigeren? UR&L: - UR&L: + Ur&l: &Notes: @@ -3362,7 +2998,7 @@ Wil je dit corrigeren? Remove key from agent when database is closed/locked - Sleutel van agent verwijderen als de database wordt gesloten of vergrendeld + Sleutel bij agent wegnemen als de database wordt gesloten/vergrendeld Comment @@ -3370,7 +3006,7 @@ Wil je dit corrigeren? Add key to agent when database is opened/unlocked - Sleutel aan agent toevoegen als de database wordt geopend of ontgrendeld + Sleutel aan agent toevoegen wanneer de database wordt geopend/ontgrendeld Decrypt @@ -3382,7 +3018,7 @@ Wil je dit corrigeren? Copy to clipboard - Kopiëren naar klembord + Naar klembord kopiëren Public key @@ -3392,6 +3028,19 @@ Wil je dit corrigeren? Private key Persoonlijke sleutel + + External file + Extern bestand + + + Browser for key file + Blader naar sleutelbestand + + + Browse… + Button for opening file dialog + Bladeren… + Attachment Bijlage @@ -3408,30 +3057,13 @@ Wil je dit corrigeren? Remove from agent Van agent verwijderen - - External file - Extern bestand - - - Browser for key file - Browser voor sleutelbestand - - - Browse… - Button for opening file dialog - Bladeren… - - - Generate - Genereren - Select attachment file - Selecteer een bijlagebestand + Selecteer bijlage bestand Require user confirmation when this key is used - Bevestiging vragen bij gebruik van deze sleutel + Bevestiging van de gebruiker vragen als deze sleutel wordt gebruikt n/a @@ -3439,7 +3071,7 @@ Wil je dit corrigeren? Remove key from agent after - Sleutel bij agent verwijderen na + Sleutel bij agent wegnemen na Remove key from agent after specified seconds @@ -3449,10 +3081,6 @@ Wil je dit corrigeren? seconds seconden - - Clear agent - Agent wissen - EditGroupWidget @@ -3464,6 +3092,10 @@ Wil je dit corrigeren? Icon Pictogram + + Browser Integration + Browserintegratie + Properties Eigenschappen @@ -3478,15 +3110,11 @@ Wil je dit corrigeren? Group has unsaved changes - De groep bevat niet-opgeslagen wijzigingen - - - Browser Integration - Browserintegratie + Groep heeft niet-opgeslagen wijzigingen Enable - Inschakelen + Activeren Disable @@ -3505,35 +3133,35 @@ Wil je dit corrigeren? Hide entries from browser extension: - Items verbergen voor browserextensie: + Verberg vermeldingen van browserextensie: Hide entries from browser extension toggle for this and sub groups - Items van deze en onderliggende groepen tonen/verbergen voor browserextensie + Items van deze browserextensie en subgroepen wel/niet verbergen Skip Auto-Submit for entries: - Automatisch indienen overslaan voor items: + Automatisch indienen overslaan voor inzendingen: Skip Auto-Submit toggle for this and sub groups - Automatisch indienen wel/niet overslaan voor deze en onderliggende groepen + Automatisch indienen wel/niet overslaan voor deze groep en subgroepen Use entries only with HTTP Basic Auth: - Alleen items met HTTP Basic Auth: + Gebruik alleen vermeldingen met HTTP Basic Auth: Only HTTP Auth toggle for this and sub groups - Alleen HTTP Auth aan/uit voor deze en onderliggende groepen + Alleen HTTP Auth aan/uit voor deze en subgroepen Do not use entries with HTTP Basic Auth: - Items niet gebruiken met HTTP Basic Auth: + Gebruik deze items niet met HTTP Basic Auth: Do not use HTTP Auth toggle for this and sub groups - Geen HTTP Auth gebruiken aan/uit voor deze en onderliggende groepen + Gebruik geen HTTP Auth aan/iut voor deze en subgroepen Omit WWW subdomain from matching: @@ -3541,26 +3169,18 @@ Wil je dit corrigeren? Omit WWW subdomain from matching toggle for this and sub groups - WWW-subdomein negeren in overeenkomsten voor deze en onderliggende groepen - - - Restrict matching to given browser key: - Overeenkomst beperken tot gegeven browsersleutel: - - - Restrict matching to given browser key toggle for this and sub groups - Overeenkomst beperken tot gegeven browsersleutel voor deze en onderliggende groepen + WWW-subdomein negeren in overeenkomsten in deze en onderliggende groepen EditGroupWidgetKeeShare Sharing mode field - Deelmodusveld + Delen modus veld Password field - Wachtwoordveld + Wachtwoord invulveld Type: @@ -3576,11 +3196,11 @@ Wil je dit corrigeren? Path to share file field - Pad van het bestandsdeelveld + Pad naar te delen bestand veld Browse for share file - Bladeren naar deelbestand + Blader naar deelbestand Browse… @@ -3588,7 +3208,7 @@ Wil je dit corrigeren? Clear fields - Velden wissen + Wis velden Clear @@ -3608,13 +3228,13 @@ Wil je dit corrigeren? Synchronize - Synchroniseren + Synchroniseer Your KeePassXC version does not support sharing this container type. Supported extensions are: %1. - Deze KeePassXC-versie biedt geen ondersteuning voor het delen van dit containertype. -Ondersteunde extensies: %1. + Deze KeePassXC-versie biedt geen ondersteuning voor het delen van dit container type. +Ondersteund zijn: %1. %1 is already being exported by this database. @@ -3631,15 +3251,15 @@ Ondersteunde extensies: %1. KeeShare is currently disabled. You can enable import/export in the application settings. KeeShare is a proper noun - KeeShare is momenteel uitgeschakeld. Je kunt importeren en exporteren inschakelen in de instellingen. + KeeShare is momenteel uitgeschakeld. Je kunt importeren/exporteren inschakelen in de instellingen. Database export is currently disabled by application settings. - Het exporteren van de database is momenteel uitgeschakeld in de programma-instellingen. + Database export is momenteel uitgeschakeld in de programma instellingen. Database import is currently disabled by application settings. - Het importeren van de database is momenteel uitgeschakeld in de programma-instellingen. + Database import is momenteel uitgeschakeld in de programma instellingen. KeeShare container @@ -3647,19 +3267,19 @@ Ondersteunde extensies: %1. KeeShare signed container - KeeShare-container (ondertekend) + KeeShare ondertekende container Select import source - Selecteer een te importeren bron + Selecteer bron voor import Select export target - Selecteer een exportlocatie + Selecteer doel voor export Select import/export file - Selecteer een im-/exportbestand + Selecteer import-/exportbestand @@ -3670,27 +3290,27 @@ Ondersteunde extensies: %1. Toggle expiration - Verloopdatum tonen/verbergen + Vervaldatum wel/niet tonen Expires: - Verloopt op + Verloopt: Name field - Naamveld + Naam veld Expiration field - Verloopveld + Vervaldatum veld Use default Auto-Type sequence of parent group - Standaard invulreeks van de bovenliggende groep gebruiken + Gebruik standaard Auto-type volgorde van bovenliggende groep Auto-Type: - Automatisch invullen: + Auto-type: Search: @@ -3698,19 +3318,19 @@ Ondersteunde extensies: %1. Auto-Type toggle for this and sub groups - Automatisch invullen aan/uit voor deze en onderliggende groepen + Auto-type aan/uit voor deze en onderliggende groepen Notes: - Notities: + Opmerkingen: Default auto-type sequence field - Standaard veld voor automatische invulreeks + Standaard Auto-type tekenreeks veld Notes field - Notitiesveld + Notities veld Name: @@ -3718,7 +3338,7 @@ Ondersteunde extensies: %1. Set default Auto-Type sequence - Standaard invulreeks instellen + Standaard Auto-type tekenreeks instellen Search toggle for this and sub groups @@ -3737,11 +3357,11 @@ Ondersteunde extensies: %1. Choose icon… - Pictogram kiezen… + Kies pictogram... Set the URL to use to search for a favicon - Stel de URL in om te zoeken naar een favicon + Stel de URL in om naar een favicon te zoeken Favicon URL @@ -3757,11 +3377,11 @@ Ondersteunde extensies: %1. Apply selected icon to subgroups and entries - Geselecteerd pictogram toepassen bij onderliggende groepen en items + Gebruik het geselecteerde pictogram voor onderliggende groepen en items Apply icon to… - Pictogram toepassen op… + Pictogram toepassen op... Apply to this group only @@ -3777,11 +3397,15 @@ Ondersteunde extensies: %1. Also apply to all children - Ook toepassen op alle onderliggende items + Ook toepassen op alle onderliggenden Unable to fetch favicon. - De favicon is niet opgehaald. + Kan favicon niet ophalen. + + + You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security + Je kunt de DuckDuckGo website pictogram dienst inschakelen onder Extra>Instellingen>Beveiliging Existing icon selected. @@ -3797,11 +3421,11 @@ Ondersteunde extensies: %1. Select Image(s) - Afbeelding(en) selecteren + Selecteer afbeelding(en) Successfully loaded %1 of %n icon(s) - %1 van %n pictogram geladen%1 van %n pictogrammen geladen + %1 van %n pictogram(men) geladen%1 van %n pictogram(men) geladen No icons were loaded @@ -3809,15 +3433,11 @@ Ondersteunde extensies: %1. %n icon(s) already exist in the database - %n pictogram reeds aanwezig in database%n pictogrammen reeds aanwezig in de database + %n pictogram(men) al aanwezig in de database%n pictogram(men) al aanwezig in de database The following icon(s) failed: - Het volgende pictogram is mislukt:De volgende pictogrammen zijn mislukt: - - - You can enable the DuckDuckGo website icon service under Application Settings -> Security - Je kunt de dienst DuckDuckGo websitepictogrammen inschakelen onder Programma-instellingen -> Beveiliging + De volgende pictogram(men) mislukten:De volgende pictogram(men) mislukten: @@ -3828,7 +3448,7 @@ Ondersteunde extensies: %1. Datetime created - Datum/Tijdstip van aanmaken + Datum tijd gemaakt Modified: @@ -3836,19 +3456,19 @@ Ondersteunde extensies: %1. Datetime modified - Datum/Tijdstip van wijziging + Datum tijd gewijzigd Accessed: - Geopend: + Toegang: Datetime accessed - Datum/Tijdstip van laatste toegang + Datum tijd laatste toegang Uuid: - UUID: + Uuid: Unique ID @@ -3856,15 +3476,15 @@ Ondersteunde extensies: %1. Plugin Data - Plug-ingegevens + Plugin-gegevens: Plugin data - Plug-ingegevens + Plugin-gegevens Remove selected plugin data - Geselecteerde plug-ingegevens verwijderen + Geselecteerde plugin-gegevens verwijderen Remove @@ -3872,13 +3492,13 @@ Ondersteunde extensies: %1. Delete plugin data? - Plug-ingegevens verwijderen? + Plugin-gegevens verwijderen? Do you really want to delete the selected plugin data? This may cause the affected plugins to malfunction. - Wil je de geselecteerde plug-ingegevens verwijderen? -Hierdoor werken de plug-ins mogelijk niet goed meer. + Weet je zeker dat je de geselecteerde plugin-gegevens wilt verwijderen? +Hierdoor werken de plugins mogelijk niet meer goed. Key @@ -3895,45 +3515,12 @@ Hierdoor werken de plug-ins mogelijk niet goed meer. %1 - Clone %1 - Duplicaat - - Passkey - Passkey - - - Invalid conversion type: %1 - Ongeldig conversietype: %1 - - - Invalid conversion syntax: %1 - Ongeldige conversiesyntaxis: %1 - - - Invalid regular expression syntax %1 -%2 - Ongeldige syntaxis in reguliere expressie %1 -%2 - EntryAttachments Cannot open file "%1" - Bestand ‘%1’ is niet geopend - - - - EntryAttachmentsDialog - - Form - Formulier - - - File name - Bestandsnaam - - - File contents... - Bestandsinhoud… + Kan bestand "%1" niet openen @@ -3973,6 +3560,14 @@ Hierdoor werken de plug-ins mogelijk niet goed meer. Remove Verwijderen + + Rename selected attachment + Geselecteerde bijlage hernoemen + + + Rename + Hernoemen + Open selected attachment Geselecteerde bijlage openen @@ -3991,11 +3586,11 @@ Hierdoor werken de plug-ins mogelijk niet goed meer. Select files - Bestanden selecteren + Kies bestanden Confirm remove - Verwijderen bevestigen + Verwijdering bevestigen Are you sure you want to remove %n attachment(s)? @@ -4008,16 +3603,16 @@ Hierdoor werken de plug-ins mogelijk niet goed meer. Unable to create directory: %1 - De map kan niet worden aangemaakt: + Kan de map niet maken: %1 Are you sure you want to overwrite the existing file "%1" with the attachment? - Weet je zeker dat je het bestaande bestand ‘%1’ tezamen met de bijlage wil overschrijven? + Weet je zeker dat je het bestaande bestand "%1" met de bijlage wil overschrijven? Confirm overwrite - Overschrijven bevestigen + Overschrijving bevestigen Unable to save attachments: @@ -4046,6 +3641,12 @@ Hierdoor werken de plug-ins mogelijk niet goed meer. Confirm Overwrite Attachment Overschrijven van bijlage bevestigen + + Attachment "%1" already exists. +Would you like to overwrite the existing attachment? + Bijlage "%1" bestaat al. +Bestaande bijlage overschrijven? + Confirm Attachment Bijlage bevestigen @@ -4056,9 +3657,9 @@ Your database may get very large and reduce performance. Are you sure to add this file? %1 is een groot bestand (%2 MB). -De database kan hierdoor erg groot en trager worden. +De database kan erg groot worden en de prestaties verminderen. -Weet je zeker dat je dit bestand wil toevoegen? +Weet je zeker dat je dit bestand wilt toevoegen? Attachment modified @@ -4067,7 +3668,7 @@ Weet je zeker dat je dit bestand wil toevoegen? The attachment '%1' was modified. Do you want to save the changes to your database? - De bijlage ‘%1’ is gewijzigd. + De bijlage '%1' is gewijzigd. Wil je de wijzigingen opslaan in de database? @@ -4077,26 +3678,8 @@ Wil je de wijzigingen opslaan in de database? Saving updated attachment failed. Error: %1 - De bijgewerkte bijlage kan niet worden opgeslagen. -Foutmelding: %1 - - - Attachment "%1" already exists. -Would you like to overwrite the existing attachment? - De bijlage ‘%1’ bestaat al. -Wil je de bestaande bijlage overschrijven? - - - New - Nieuw - - - Preview - Voorbeeld - - - Failed to preview an attachment: Attachment not found - Geen voorbeeld van bijlage: bijlage niet aangetroffen + Opslaan van bijgewerkte bijlage is mislukt. +Fout: %1 @@ -4130,7 +3713,7 @@ Wil je de bestaande bijlage overschrijven? Title - Titel + Naam Username @@ -4162,7 +3745,7 @@ Wil je de bestaande bijlage overschrijven? Expiration - Verloopdatum + Vervaldatum TOTP @@ -4178,7 +3761,7 @@ Wil je de bestaande bijlage overschrijven? Auto-Type - Automatisch invullen + Auto-type Tags @@ -4190,7 +3773,7 @@ Wil je de bestaande bijlage overschrijven? Ref: Reference abbreviation - Ref.: + Ref: Never @@ -4202,7 +3785,7 @@ Wil je de bestaande bijlage overschrijven? Title - Titel + Naam Username @@ -4222,19 +3805,19 @@ Wil je de bestaande bijlage overschrijven? Expires - Verloopt op + Verloopt Created - Aangemaakt op + Aangemaakt Modified - Gewijzigd op + Gewijzigd Accessed - Geopend op + Toegang Attachments @@ -4246,11 +3829,11 @@ Wil je de bestaande bijlage overschrijven? Group name - Groepsnaam + Groepnaam Entry title - Titel van item + Titel van het item Password Strength @@ -4270,11 +3853,11 @@ Wil je de bestaande bijlage overschrijven? Last modification date - Datum van laatste wijziging + Datum laatste wijziging Last access date - Datum van laatste opening + Datum laatste toegang Attached files @@ -4292,20 +3875,12 @@ Wil je de bestaande bijlage overschrijven? Has TOTP Heeft TOTP - - Background Color - Achtergrondkleur - - - Group Path - Groepspad - EntryPreviewWidget Display current TOTP value - Huidige TOTP-waarde tonen + Toon huidige TOTP-waarde Close @@ -4320,12 +3895,12 @@ Wil je de bestaande bijlage overschrijven? Wachtwoord - URL - URL + Notes + Notities Expiration - Verloopdatum + Vervaldatum Tags @@ -4340,8 +3915,8 @@ Wil je de bestaande bijlage overschrijven? Gebruikersnaam - Notes - Notities + URL + URL Advanced @@ -4357,7 +3932,7 @@ Wil je de bestaande bijlage overschrijven? Autotype - Automatisch invullen + Auto-type Default Sequence @@ -4391,21 +3966,17 @@ Wil je de bestaande bijlage overschrijven? Never Nooit - - Double click to copy value - Dubbelklik om de waarde te kopiëren - Enabled - Ingeschakeld + Geactiveerd Disabled Uitgeschakeld - Double click to copy to clipboard - Dubbelklik om te kopiëren naar klembord + Double click to copy value + Dubbelklik om de waarde te kopiëren @@ -4414,10 +3985,6 @@ Wil je de bestaande bijlage overschrijven? Invalid URL Ongeldige URL - - Duplicate URL - URL dupliceren - EntryView @@ -4431,22 +3998,18 @@ Wil je de bestaande bijlage overschrijven? Reset to defaults - Standaardwaarden herstellen - - - + %1 entry(s)... - + %1 item…+ %1 items… + Standaardwaarden opnieuw instellen ExportDialog Export options - Exportopties + Exporteer opties Sort entries by... - Items sorteren op… + Items sorteren op... You are about to export your database to an unencrypted file. @@ -4458,7 +4021,7 @@ Dit maakt jouw wachtwoorden en gevoelige informatie kwetsbaar! database order - databasevolgorde + database volgorde name (ascending) @@ -4474,22 +4037,22 @@ Dit maakt jouw wachtwoorden en gevoelige informatie kwetsbaar! Export database to HTML file - Database exporteren naar html-bestand + Database exporteren naar HTML-bestand HTML file - Html-bestand + HTML-bestand FdoSecrets::DBusMgr Failed to deliver message - Het bericht is niet afgeleverd + Kan bericht niet afleveren Failed to send reply on DBus - Geen antwoord verzonden op DBus + Kan antwoord niet verzenden op DBus Unknown @@ -4504,42 +4067,42 @@ Dit maakt jouw wachtwoorden en gevoelige informatie kwetsbaar! <i>PID: %1, Executable: %2</i> <i>PID: 1234, Executable: /path/to/exe</i> - <i>PID: %1, uitvoerbaar bestand: %2</i> + <i>PID: %1, Uitvoerbaar bestand: %2</i> Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. - Er is al een andere Secret Service actief (%1).<br/>Stop/Verwijder deze en probeer de integratie met Secret Service opnieuw in te schakelen. + Een andere secret service is actief (%1).<br/>Stop/verwijder deze en probeer de Secret Service-integratie opnieuw te activeren. Failed to register DBus service at %1.<br/> - DBus-dienst is niet geregistreerd op %1.<br/> + Kan DBus-service niet registreren op %1.<br/> Failed to register service on DBus at path '%1' - De dienst is niet geregistreerd op de DBus-locatie ‘%1’ + Kan service niet registreren op DBus op pad '%1' Failed to register database on DBus under the name '%1' - De database kan niet op DBus geregistreerd worden met de naam ‘%1’ + Registratie van database op DBus onder de naam '%1' mislukt Failed to register session on DBus at path '%1' - De sessie kan niet worden geregistreerd op de DBus-locatie ‘%1’ + Kan sessie niet registreren op DBus op pad '%1' Failed to register item on DBus at path '%1' - Kan item niet registreren op de DBus-locatie ‘%1’ + Kan item niet registreren op DBus op pad '%1' Failed to register prompt object on DBus at path '%1' - Kan object niet registreren op de DBus-locatie ‘%1’ + Kan object niet registreren op DBus op pad '%1' FdoSecrets::Item Entry "%1" from database "%2" was used by %3 - Item ‘%1’ uit de database ‘%2’ is gebruikt door %3 + Het item "%1" van de database "%2" werd gebruikt door %3 @@ -4547,7 +4110,7 @@ Dit maakt jouw wachtwoorden en gevoelige informatie kwetsbaar! %n Entry(s) was used by %1 %1 is the name of an application - Er is %n item gebruikt door %1Er zijn %n items gebruikt door %1 + %n Post(en) werd gebruikt door %1%n Item(s) gebruikt door %1 @@ -4558,14 +4121,14 @@ Dit maakt jouw wachtwoorden en gevoelige informatie kwetsbaar! Non-existing/inaccessible executable path. Please double-check the client is legit. - Niet-bestaande/ontoegankelijke locatie van het uitvoerbare bestand. Controleer of de client legitiem is. + Niet-bestaand/ontoegankelijk uitvoerbaar pad. Controleer nogmaals of de client legitiem is. FdoSecrets::SettingsDatabaseModel Unlock to show - Ontgrendelen om weer te geven + Ontgrendel voor deze informatie None @@ -4602,7 +4165,7 @@ Dit maakt jouw wachtwoorden en gevoelige informatie kwetsbaar! HibpDownloader Online password validation failed - Online geldigverklaring van wachtwoord mislukt + Online validatie van wachtwoord is mislukt @@ -4619,7 +4182,7 @@ Dit maakt jouw wachtwoorden en gevoelige informatie kwetsbaar! Having trouble downloading icons? You can enable the DuckDuckGo website icon service in the security section of the application settings. Problemen met het downloaden van pictogrammen? -Je kunt de pictogrammenservice van de DuckDuckGo-website inschakelen in de sectie Beveiliging van de instellingen. +Je kunt de DuckDuckGo website pictogram dienst inschakelen in de sectie 'Beveiliging' in de instellingen. Close @@ -4635,11 +4198,11 @@ Je kunt de pictogrammenservice van de DuckDuckGo-website inschakelen in de secti Please wait, processing entry list… - Even geduld, lijst met items verwerken… + Even wachten, de items worden verwerkt... Downloading… - Downloaden… + Downloaden... Ok @@ -4651,204 +4214,11 @@ Je kunt de pictogrammenservice van de DuckDuckGo-website inschakelen in de secti Download Failed - Download mislukt + Download is mislukt Downloading favicons (%1/%2)… - Favicons downloaden (%1/%2)… - - - - ImportWizard - - Import Wizard - Import-assistent - - - - ImportWizardPageReview - - WizardPage - Assistent - - - Entry count: %1 - Aantal items: %1 - - - Group - Groep - - - Title - Titel - - - Username - Gebruikersnaam - - - Password - Wachtwoord - - - Url - URL - - - Could not load key file. - Kan sleutelbestand niet laden. - - - Could not open remote database. Password or key file may be incorrect. - Kan externe database niet openen. Wachtwoord of sleutelbestand is mogelijk onjuist. - - - - ImportWizardPageSelect - - Form - Formulier - - - Import File Selection - Selectie van importbestand - - - Password: - Wachtwoord: - - - Key File: - Sleutelbestand: - - - Browse… - Bladeren… - - - Import Into: - Importeren naar: - - - New Database - Nieuwe database - - - No unlocked databases available - Geen ontgrendelde databases beschikbaar - - - Existing Database: - Bestaande database: - - - Import File: - Importbestand: - - - Comma Separated Values (.csv) - Komma-gescheiden waarden (.csv) - - - 1Password Export (.1pux) - 1Password-export (.1pux) - - - 1Password Vault (.opvault) - 1Password-kluis (.opvault) - - - Bitwarden (.json) - Bitwarden (.json) - - - KeePass 1 Database (.kdb) - KeePass 1-database (.kdb) - - - Open OPVault - OPVault openen - - - Select import file - Selecteer importbestand - - - All files - Alle bestanden - - - Key files - Sleutelbestanden - - - Select key file - Selecteer sleutelbestand - - - Comma Separated Values - Komma-gescheiden waarden - - - 1Password Export - 1Password-export - - - Bitwarden JSON Export - Bitwarden JSON-export - - - 1Password Vault - 1Password-kluis - - - KeePass1 Database - KeePass 1-database - - - Proton Pass (.json) - Proton Pass (.json) - - - Proton Pass JSON Export - Proton Pass JSON Export - - - Temporary Database - Tijdelijke database - - - Command: - Opdracht: - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - bv.: "sftp user@hostname" of "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - - - Input: - Invoer: - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last commend `exit` has to be sent - - bv.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} wordt gebruikt als tijdelijke aanduiding om de database op een tijdelijke locatie op te slaan -De opdracht moet worden afgesloten. In het geval van `sftp` moet `exit` als laatste worden verzonden - - - - Remote Database (.kdbx) - Externe database (.kdbx) + Favicons downloaden (%1/%2)... @@ -4866,7 +4236,7 @@ De opdracht moet worden afgesloten. In het geval van `sftp` moet `exit` als laat Kdbx3Reader Missing database headers - Ontbrekende databasekoppen + Ontbrekende databaseheaders Unable to calculate database key @@ -4874,29 +4244,29 @@ De opdracht moet worden afgesloten. In het geval van `sftp` moet `exit` als laat Unable to issue challenge-response: %1 - Kan geen challenge-response uitbrengen: %1 + Kan challenge-response niet starten: %1 Invalid credentials were provided, please try again. If this reoccurs, then your database file may be corrupt. - Er zijn ongeldige inloggegevens opgegeven - probeer het opnieuw. -Als dit vaker gebeurt, dan is het databasebestand mogelijk beschadigd. + Ongeldige inloggegevens, probeer het opnieuw. +Als dit vaker gebeurt, is het databasebestand mogelijk beschadigd. Header doesn't match hash - Kop komt niet overeen met controlegetal + Header komt niet overeen met hash Invalid header id size - Ongeldige grootte van kop-id + Ongeldige grootte van header-ID Invalid header field length: field %1 - Ongeldige koplengte: veld %1 + Ongeldige headerlengte: veld %1 Invalid header data length: field %1, %2 expected, %3 found - Ongeldige lengte van kopgegevens: veld %1. Verwacht: %2, aangetroffen: %3. + Ongeldige lengte van header-gegevens: veld %1, %2 verwacht, %3 aangetroffen @@ -4908,7 +4278,7 @@ Als dit vaker gebeurt, dan is het databasebestand mogelijk beschadigd. Unable to issue challenge-response: %1 - Kan geen challenge-response uitbrengen: %1 + Kan challenge-response niet starten: %1 Unable to calculate database key @@ -4919,7 +4289,7 @@ Als dit vaker gebeurt, dan is het databasebestand mogelijk beschadigd.Kdbx4Reader missing database headers - ontbrekende databasekoppen + ontbrekende database-koppen Unable to calculate database key: %1 @@ -4927,7 +4297,7 @@ Als dit vaker gebeurt, dan is het databasebestand mogelijk beschadigd. Invalid header checksum size - Ongeldige grootte van controlesom kop + Ongeldige grootte van header-controlecijfer Header SHA256 mismatch @@ -4936,8 +4306,8 @@ Als dit vaker gebeurt, dan is het databasebestand mogelijk beschadigd. Invalid credentials were provided, please try again. If this reoccurs, then your database file may be corrupt. - Er zijn ongeldige inloggegevens opgegeven - probeer het opnieuw. -Als dit nog een keer gebeurt, dan is het databasebestand mogelijk beschadigd. + Ongeldige inloggegevens, probeer het opnieuw. +Als dit vaker gebeurt, is het databasebestand mogelijk beschadigd. (HMAC mismatch) @@ -4945,107 +4315,107 @@ Als dit nog een keer gebeurt, dan is het databasebestand mogelijk beschadigd. Unknown cipher - Onbekende versleuteling + Onbekend versleutelingsalgoritme Invalid header id size - Ongeldige grootte van kop-id + Ongeldige grootte van header-ID Invalid header field length: field %1 - Ongeldige grootte van kop: veld %1 + Ongeldige headerlengte: veld %1 Invalid header data length: field %1, %2 expected, %3 found - Ongeldige lengte van kopgegevens: veld %1. Verwacht: %2, aangetroffen: %3. + Ongeldige lengte van header-gegevens: veld %1, %2 verwacht, %3 aangetroffen Failed to open buffer for KDF parameters in header - Kan buffer voor KDF-parameters niet openen in kop + Fout bij het openen van de buffer voor KDF-parameters in header Unsupported key derivation function (KDF) or invalid parameters - Niet-ondersteunde sleutelafleidingsfunctie (KDF) of ongeldige opties + Niet-ondersteunde sleutel-afleidingsfunctie (KDF) of ongeldige parameters Legacy header fields found in KDBX4 file. - Verouderde kopvelden aangetroffen in het KDBX4-bestand. + Verouderde header-velden gevonden in KDBX4 bestand. Invalid inner header id size - Ongeldige grootte van binnenste kop-id + Ongeldige grootte van inner header-id Invalid inner header field length: field %1 - Ongeldige lengte van het binnenste kopveld: veld %1 + Ongeldige lengte van het binnenste headerveld: veld %1 Invalid inner header data length: field %1, %2 expected, %3 found - Ongeldige lengte van binnenste kopgegevens: veld %1. Verwacht: %2, aangetroffen: %3. + Ongeldige gegevenslengte binnenste headertekst: veld %1, %2 verwacht, %3 aangetroffen Invalid inner header binary size - Ongeldige binaire grootte van binnenste kop + Ongeldige binaire grootte van inner header Unsupported KeePass variant map version. Translation: variant map = data structure for storing meta data - Niet-ondersteunde versie van de KeePass variant-map. + Niet-ondersteunde versie van KeePass variant map. Invalid variant map entry name length Translation: variant map = data structure for storing meta data - Ongeldige lengte van een variant-mapnaam + Ongeldige lengte van een variant map item naam Invalid variant map entry name data Translation: variant map = data structure for storing meta data - Ongeldige gegevens in een variant-mapnaam + 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 een variant-map + Ongeldige lengte van een variant map waarde Invalid variant map entry value data Translation comment: variant map = data structure for storing meta data - Ongeldige gegevens in een variant-map + Ongeldige data in een variant map waarde Invalid variant map Bool entry value length Translation: variant map = data structure for storing meta data - Ongeldige lengte van een variant-map Boolean-waarde + Ongeldige lengte van een variant map Boolean-waarde Invalid variant map Int32 entry value length Translation: variant map = data structure for storing meta data - Ongeldige lengte van een variant-map Int32-waarde + Ongeldige lengte van een variant map Int32-waarde Invalid variant map UInt32 entry value length Translation: variant map = data structure for storing meta data - Ongeldige lengte van een variant-map UInt32-waarde + Ongeldige lengte van een variant map UInt32-waarde Invalid variant map Int64 entry value length Translation: variant map = data structure for storing meta data - Ongeldige lengte van een variant-map Int64-waarde + Ongeldige lengte van een variant map Int64-waarde Invalid variant map UInt64 entry value length Translation: variant map = data structure for storing meta data - Ongeldige lengte van een variant-map UInt64-waarde + Ongeldige lengte van een variant map UInt64-waarde Invalid variant map entry type Translation: variant map = data structure for storing meta data - Ongeldige item-type in variant-map + Ongeldige item-type in variant map Invalid variant map field type size Translation: variant map = data structure for storing meta data - Ongeldige grootte van variant-map veld-type + Ongeldige grootte van variant map veld-type @@ -5066,22 +4436,22 @@ Als dit nog een keer gebeurt, dan is het databasebestand mogelijk beschadigd. Failed to serialize KDF parameters variant map Translation comment: variant map = data structure for storing meta data - Fout bij serialisering van KDF-parameters variant-map + Fout bij serialisering van KDF-parameters variant map KdbxReader Invalid cipher uuid length: %1 (length=%2) - Ongeldige versleuteling UUID-lengte: %1 (lengte=%2) + Ongeldige versleuteling uuid lengte: %1 (lengte=%2) Unable to parse UUID: %1 - Kan UUID niet verwerken: %1 + Geen geldige UUID: %1 Unsupported cipher - Niet-ondersteunde versleuteling + Niet ondersteund versleutelingsalgoritme Invalid compression flags length @@ -5089,7 +4459,7 @@ Als dit nog een keer gebeurt, dan is het databasebestand mogelijk beschadigd. Unsupported compression algorithm - Niet-ondersteund compressie-algoritme + Niet ondersteund compressie-algoritme Invalid master seed size @@ -5113,21 +4483,21 @@ Als dit nog een keer gebeurt, dan is het databasebestand mogelijk beschadigd. Invalid inner random stream cipher - Ongeldige interne random-stream versleuteling + Ongeldig inner-random-stream versleutelingsalgoritme Failed to read database file. - Kan databasebestand niet lezen. + Lezen van databasebestand is mislukt. 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. - Het geselecteerde bestand is een oude KeePass 1-database (.kdb). + Het gekozen bestand is een oude KeePass 1 database (.kdb). -Je kan de database importeren via Database → ‘KeePass 1-database importeren’. -Let op: deze actie is onomkeerbaar. De geïmporteerde database kan niet meer worden geopend met de oude KeePassX-versie 0.4. +Je kunt het importeren door te klikken op Database > 'KeePass 1 database importeren'. +Deze actie is niet omkeerbaar. De geïmporteerde database kan niet meer worden geopend met de oude KeePassX versie 0.4. Not a KeePass database. @@ -5142,7 +4512,7 @@ Let op: deze actie is onomkeerbaar. De geïmporteerde database kan niet meer wor KdbxXmlReader XML parsing failure: %1 - XML-verwerkingsfout: %1 + XML leesfout: %1 No root group @@ -5152,17 +4522,17 @@ Let op: deze actie is onomkeerbaar. De geïmporteerde database kan niet meer wor XML error: %1 Line %2, column %3 - XML-fout: + XML fout: %1 -Regel %2, kolom %3 +Lijn %2, kolom %3 Missing icon uuid or data - Ontbrekende pictogram-UUID of -gegevens + Ontbrekende pictogram-uuid of -gegevens Missing custom data key or value - Ontbrekende aangepaste gegevenssleutel of -waarde + Ontbrekende aangepaste datasleutel of -waarde Multiple group elements @@ -5170,7 +4540,7 @@ Regel %2, kolom %3 Null group uuid - Null groep-UUID + Null groep uuid Invalid group icon number @@ -5186,19 +4556,19 @@ Regel %2, kolom %3 No group uuid found - Geen groep-UUID gevonden + Geen groep-uuid gevonden Null DeleteObject uuid - Null DeleteObject UUID + Null DeleteObject uuid Missing DeletedObject uuid or time - Ontbrekende DeletedObject UUID of tijd + Ontbrekende DeletedObject uuid of tijd Null entry uuid - Null item-UUID + Null item uuid Invalid entry icon number @@ -5206,15 +4576,15 @@ Regel %2, kolom %3 History element in history entry - Geschiedeniselement in itemgeschiedenis + Geschiedenis element in geschiedenis item No entry uuid found - Geen item-UUID gevonden + Geen item-uuid gevonden History element with different uuid - Geschiedeniselement met verschillende UUID + Geschiedenis element met ander uuid Duplicate custom attribute found @@ -5222,7 +4592,7 @@ Regel %2, kolom %3 Entry string key or value missing - Reekssleutel of -waarde ontbreekt in item + Stringsleutel of -waarde ontbreekt in item Entry binary key or value missing @@ -5230,7 +4600,7 @@ Regel %2, kolom %3 Auto-type association window or sequence missing - Vensterkoppeling of tekenreeks ontbreekt voor automatisch invullen + Auto-type vensterkoppeling of tekenreeks ontbreekt Invalid bool value @@ -5250,11 +4620,11 @@ Regel %2, kolom %3 Invalid number value - Ongeldige getalwaarde + Ongeldig getal Invalid uuid value - Ongeldige UUID-waarde + Ongeldige uuid-waarde Unable to decompress binary @@ -5270,34 +4640,45 @@ Regel %2, kolom %3 Private key is an attachment but no attachments provided. - De persoonlijke sleutel is een bijlage, maar er is geen bijlage verstrekt. + Privésleutel is een bijlage maar er is geen bijlage verstrekt. Private key is empty - Persoonlijke sleutel is leeg + Privésleutel is leeg File too large to be a private key - Dit bestand is te groot voor een persoonlijke sleutel + Bestand te groot voor een persoonlijke sleutel Failed to open private key - De persoonlijke sleutel is niet geopend + Persoonlijk sleutelbestand niet kunnen openen + + + + KeePass1OpenWidget + + Import KeePass1 Database + Importeer KeePass1 database + + + Unable to open the database. + Kan database niet openen. KeePass1Reader Unable to read keyfile. - Kan het sleutelbestand niet lezen. + Kan sleutelbestand niet lezen. Not a KeePass database. - Dit is geen KeePass-database. + Geen KeePass-database Unsupported encryption algorithm. - Niet-ondersteund versleutelingsalgoritme + Niet-ondersteund versleutelings-algoritme Unsupported KeePass database version. @@ -5318,7 +4699,7 @@ Regel %2, kolom %3 Invalid content hash size - Ongeldige grootte van controlegetal inhoud + Ongeldige grootte van inhoud-hash Invalid transform seed size @@ -5330,25 +4711,25 @@ Regel %2, kolom %3 Unable to construct group tree - Kan de groepsstructuur niet opbouwen + Kan groepsstructuur niet opbouwen Root - Hoofdgroep + Alles Unable to calculate database key - Kan de databasesleutel niet berekenen + Kan databasesleutel niet berekenen unable to seek to content position - kan niet naar inhoudspositie zoeken + kan niet naar positie in inhoud springen Invalid credentials were provided, please try again. If this reoccurs, then your database file may be corrupt. - Er zijn ongeldige inloggegevens opgegeven - probeer het opnieuw. -Als dit nog een keer gebeurt, dan is het databasebestand mogelijk beschadigd. + Ongeldige inloggegevens, probeer het opnieuw. +Als dit vaker gebeurt, is het databasebestand mogelijk beschadigd. Key transformation failed @@ -5356,7 +4737,7 @@ Als dit nog een keer gebeurt, dan is het databasebestand mogelijk beschadigd. Invalid group field type number - Ongeldig veld-typenummer van groep + Ongeldig veld typenummer van groep Invalid group field size @@ -5436,7 +4817,7 @@ Als dit nog een keer gebeurt, dan is het databasebestand mogelijk beschadigd. Invalid entry expiry time field size - Ongeldige veldgrootte van verloopdatum + Ongeldige veldgrootte van verlooptijd Invalid entry field type @@ -5451,11 +4832,11 @@ Als dit nog een keer gebeurt, dan is het databasebestand mogelijk beschadigd. Inactive share %1 - Inactieve gedeelde database %1 + Niet actieve gedaalde database %1 Imported from %1 - Geïmporteerd uit %1 + Geïmporteerd vanuit %1 Exported to %1 @@ -5467,15 +4848,15 @@ Als dit nog een keer gebeurt, dan is het databasebestand mogelijk beschadigd. Import is disabled in settings - Importeren is uitgeschakeld in de instellingen + Importeren is uitgeschakeld in instellingen Export is disabled in settings - Exporteren is uitgeschakeld in de instellingen + Exporteren is uitgeschakeld in instellingen Inactive share - Inactieve gedeelde database + Niet actieve gedeelde database Imported from @@ -5494,11 +4875,11 @@ Als dit nog een keer gebeurt, dan is het databasebestand mogelijk beschadigd.KeyComponentWidget Key Component - Sleutelonderdeel + Sleutelcomponent Key Component Description - Beschrijving sleutelonderdeel + Sleutelcomponent beschrijving Cancel @@ -5506,14 +4887,14 @@ Als dit nog een keer gebeurt, dan is het databasebestand mogelijk beschadigd. Key Component set, click to change or remove - Sleutelonderdeel ingesteld - klik om te wijzigen of verwijderen + Sleutelcomponent verzameling, klik om te wijzigen of verwijderen KeyFileEditWidget Generate a new key file - Nieuw sleutelbestand genereren + Een nieuw sleutelbestand genereren Generate @@ -5521,11 +4902,11 @@ Als dit nog een keer gebeurt, dan is het databasebestand mogelijk beschadigd. Generate a new key file or choose an existing one to protect your database. - Genereer een nieuw sleutelbestand of kies een bestaand bestand om de database te beveiligen. + Genereer een nieuw sleutelbestand of kies een bestaand bestand om de database te beschermen. Note: Do NOT use a file that may change as that will prevent you from unlocking your database. - Let op: gebruik GEEN bestand dat gewijzigd kan worden, anders kan de database niet worden ontgrendeld! + Opmerking: gebruik GEEN bestand dat kan veranderen, omdat ertoe kan leiden dat de database niet ontgrendeld kan worden. Browse for key file @@ -5541,12 +4922,12 @@ Als dit nog een keer gebeurt, dan is het databasebestand mogelijk beschadigd. You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. - Je hebt een sleutelbestand in een oud formaat geselecteerd dat KeePassXC in de toekomst mogelijk niet meer ondersteunt.<br><br>Overweeg in plaats daarvan een nieuw sleutelbestand te genereren. + Je hebt een sleutelbestand in een oud formaat geselecteerd<br>dat KeePassXC in de toekomst mogelijk niet meer ondersteunt.<br><br>Overweeg in plaats daarvan een nieuw sleutelbestand te genereren. Error loading the key file '%1' Message: %2 - Fout bij het laden van sleutelbestand ‘%1’ + Er ging iets fout bij het laden van het sleutelbestand '%1' Bericht: %2 @@ -5555,23 +4936,23 @@ Bericht: %2 Add Key File - Sleutelbestand toevoegen + Voeg sleutelbestand toe Change Key File - Sleutelbestand wijzigen + Wijzig sleutelbestand Remove Key File - Sleutelbestand verwijderen + Verwijder sleutelbestand Key File set, click to change or remove - Sleutelbestand ingesteld - klik om te wijzigen of te verwijderen + Sleutelbestand ingesteld, klik om te wijzigen of te verwijderen <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, voor extra beveiliging, een sleutelbestand met willekeurige bytes toevoegen.</p> <p>Je moet het sleutelbestand geheim houden en nooit verliezen, anders word je buitengesloten!</p> + <p>Je kunt een sleutelbestand met willekeurige bytes toevoegen voor extra veiligheid.</p> <p>Je moet het sleutelbestand geheim houden en nooit verliezen anders wordt je buitengesloten!</p> Key files @@ -5587,15 +4968,15 @@ Bericht: %2 Error creating key file - Fout bij aanmaken van sleutelbestand + Er ging iets fout bij het maken van het sleutelbestand Unable to create key file: %1 - Kan sleutelbestand niet aanmaken: %1 + Kan sleutelbestand niet maken: %1 Select a key file - Selecteer een sleutelbestand + Kies een sleutelbestand Invalid Key File @@ -5603,7 +4984,7 @@ Bericht: %2 You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. - Je kunt de huidige database niet gebruiken als eigen sleutelbestand. Kies een ander bestand of genereer een nieuw sleutelbestand. + Je kunt de huidige database niet gebruiken als zijn eigen sleutelbestand. Kies een ander bestand of genereer een nieuw sleutelbestand. Suspicious Key File @@ -5612,8 +4993,8 @@ Bericht: %2 The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. Are you sure you want to continue with this file? - Het gekozen sleutelbestand ziet er uit als een wachtwoord-databasebestand. Een sleutelbestand dient een statisch bestand te zijn dat nooit wijzigt, anders word je permanent buitengesloten. -Weet je zeker dat je dit bestand wilt gebruiken? + Het gekozen sleutelbestand ziet eruit als een wachtwoord databasebestand. Een sleutelbestand moet een statisch bestand zijn dat nooit wijzigt ander verlies je voor altijd toegang tot de database. +Weet je zeker dat je wilt doorgaan met dit bestand? @@ -5624,11 +5005,11 @@ Weet je zeker dat je dit bestand wilt gebruiken? Global shortcut already registered to %1 - Algemene sneltoets is al toegekend aan %1 + Globale snelkoppeling is al geregistreerd bij %1 Could not register global shortcut - Algemene sneltoets is niet vastgelegd + Kan algemene snelkoppeling niet registreren @@ -5641,30 +5022,30 @@ Weet je zeker dat je dit bestand wilt gebruiken? &Recent Databases &Recente databases + + &Import + &Importeren + &Export &Exporteren &Help - &Hulp + &Help &Entries - It&ems + &Items Copy Att&ribute - Kenme&rk kopiëren + Ken&merk kopiëren TOTP TOTP - - Tags - Labels - &Groups &Groepen @@ -5695,11 +5076,11 @@ Weet je zeker dat je dit bestand wilt gebruiken? &Open Database… - Database &openen… + Database &openen... &Save Database - Database op&slaan… + Database op&slaan... &Close Database @@ -5707,39 +5088,59 @@ Weet je zeker dat je dit bestand wilt gebruiken? &New Database… - &Nieuwe database… + &Nieuwe database... + + + Create a new database + Een nieuwe database maken &Merge From Database… - Database sa&menvoegen… + Databases sa&menvoegen... + + + Merge from another KDBX database + Samenvoegen uit een andere KDBX database &New Entry… &Nieuw item… + + Add a new entry + Nieuw item toevoegen + &Edit Entry… - Item b&ewerken… + Item &bewerken… + + + View or edit entry + Item bekijken/bewerken &Delete Entry… - Item verwij&deren… + Item &verwijderen… &New Group… &Nieuwe groep… + + Add a new group + Een nieuwe groep toevoegen + &Edit Group… - Groep b&ewerken… + Groep &bewerken… &Delete Group… - Groep verwij&deren… + Groep &verwijderen… Download All &Favicons… - Alle &favicons downloaden… + Alle &favicons downloaden... Sort &A-Z @@ -5751,43 +5152,67 @@ Weet je zeker dat je dit bestand wilt gebruiken? Sa&ve Database As… - Databas&e opslaan als… + Database opslaan &als... Database &Security… - Databasebe&veiliging… + Database-be&veiliging... Database &Reports… - Database&rapportage… + Database-&rapportage... + + + Statistics, health check, etc. + Statistieken, gezondheidscontrole, etc. &Database Settings… - &Databaseinstellingen… + &Database-instellingen + + + Database settings + Database-instellingen &Clone Entry… - Item dupli&ceren… + Item &dupliceren... Move u&p Om&hoog verplaatsen + + Move entry one step up + Hiermee verplaats je een item een positie omhoog. + Move do&wn Om&laag verplaatsen + + Move entry one step down + Hiermee verplaats je een item een positie omlaag. + Copy &Username - Gebr&uikersnaam kopiëren + &Gebruikersnaam kopiëren + + + Copy username to clipboard + Gebruikersnaam naar klembord kopiëren Copy &Password - Wachtwoord ko&piëren + &Wachtwoord kopiëren + + + Copy password to clipboard + Wachtwoord naar klembord kopiëren &Settings - In&stellingen + &Instellingen &Password Generator @@ -5795,7 +5220,7 @@ Weet je zeker dat je dit bestand wilt gebruiken? Perform &Auto-Type - &Automatisch invullen + &Auto-type uitvoeren Download &Favicon @@ -5815,35 +5240,55 @@ Weet je zeker dat je dit bestand wilt gebruiken? &Title - &Titel + &Naam - Copy &URL - &URL kopiëren + Copy title to clipboard + Naam naar klembord kopiëren + + + Copy URL to clipboard + URL naar klembord kopiëren &Notes &Notities + + Copy notes to clipboard + Notities naar klembord kopiëren + &CSV File… - &CSV-bestand… + &CSV-bestand... &HTML File… - &HTML-bestand… + &HTML-bestand... KeePass 1 Database… - KeePass 1-database… + KeePass 1-database... + + + Import a KeePass 1 database + Een KeePass 1-database importeren 1Password Vault… - 1Password-kluis… + 1Password-kluis... + + + Import a 1Password Vault + Een 1Password-kluis importeren CSV File… - CSV-bestand… + CSV-bestand... + + + Import a CSV file + Een CSV-bestand importeren Show TOTP @@ -5851,7 +5296,7 @@ Weet je zeker dat je dit bestand wilt gebruiken? Show QR Code - TOTP QR-code weergeven + TOTP QR-code tonen Set up TOTP… @@ -5861,13 +5306,9 @@ Weet je zeker dat je dit bestand wilt gebruiken? Copy &TOTP &TOTP kopiëren - - Copy Password and TOTP - TOTP en wachtwoord kopiëren - E&mpty recycle bin - Prullenbak le&gen + Prullenbak leegmaken &Donate @@ -5875,11 +5316,11 @@ Weet je zeker dat je dit bestand wilt gebruiken? Report a &Bug - Meld een &Fout + Meld een &fout &Getting Started - Snelstart&gids (EN) + Snelstart&gids Open Getting Started Guide @@ -5887,11 +5328,15 @@ Weet je zeker dat je dit bestand wilt gebruiken? &Online Help - &Online hulp (EN) + &Online hulp + + + Go to online documentation + Online documentatie &User Guide - Gebr&uikershandleiding (EN) + &Gebruikershandleiding Open User Guide @@ -5899,11 +5344,11 @@ Weet je zeker dat je dit bestand wilt gebruiken? &Keyboard Shortcuts - &Sneltoetsen (EN) + &Sneltoetsen Save Database Backup… - Reservekopie van database opslaan… + Database-backup opslaan... Add key to SSH Agent @@ -5911,11 +5356,11 @@ Weet je zeker dat je dit bestand wilt gebruiken? Remove key from SSH Agent - Sleutel verwijderen van SSH-agent + Sleutel wegnemen van SSH-agent Compact Mode - Compacte modus + Compacte weergave Automatic @@ -5933,21 +5378,17 @@ Weet je zeker dat je dit bestand wilt gebruiken? Classic (Platform-native) Klassiek (platform-eigen) - - Show Menubar - Menubalk weergeven - Show Toolbar Werkbalk weergeven Show Preview Panel - Informatiepaneel weergeven + Voorbeeldvenster weergeven Always on Top - Venster altijd bovenop + Altijd bovenop Hide Usernames @@ -5959,11 +5400,7 @@ Weet je zeker dat je dit bestand wilt gebruiken? Clone Group... - Groep dupliceren… - - - &XML File… - &XML-bestand… + Groep dupliceren... Clear history @@ -5971,33 +5408,35 @@ Weet je zeker dat je dit bestand wilt gebruiken? Access error for config file %1 - Toegangsfout voor configuratiebestand %1 + Geen toegang tot configuratiebestand %1 Don't show again for this version - Niet meer tonen voor deze versie + Niet meer weergeven voor deze versie 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. - WAARSCHUWING: je maakt gebruik van een instabiele versie van KeePassXC! -Er is een verhoogd risico op beschadiging. Bewaar een reservekopie van je databases. -Deze versie is niet bedoeld voor dagelijks gebruik. + WAARSCHUWING: Je gebruikt een niet-stabiele versie van KeePassXC! +Deze versie is niet bedoeld voor dagelijks gebruik. +Er is een verhoogd risico op beschadiging. Bewaar een back-up van jouw databases. NOTE: You are using a pre-release version of KeePassXC. Expect some bugs and minor issues, this version is meant for testing purposes. - LET OP: je maakt gebruik van een pre-release versie van KeePassXC! + Opmerking: Je gebruikt een pre-release versie van KeePassXC! Houd rekening met fouten en kleine problemen. Deze versie is bedoeld voor testdoeleinden. - No Tags - Geen labels + 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. Restore Entry(s) - Item herstellenItems herstellen + Vermelding(en) herstellenItem(s) herstellen Settings @@ -6005,31 +5444,27 @@ Houd rekening met fouten en kleine problemen. Deze versie is bedoeld voor testdo Check for updates on startup? - Bij start controleren op updates? + Controleren op updates bij het opstarten? Would you like KeePassXC to check for updates on startup? - Wil je dat KeePassXC bij het opstarten op updates controleert? + Wil je dat KeePassXC bij het opstarten controleert op updates? You can always check for updates manually from the application menu. - Je kunt altijd handmatig controleren of er updates zijn via het programmamenu. + Je kunt altijd handmatig controleren of er updates zijn vanuit het programmamenu. Toggle window - Venster tonen/verbergen + Venster openen Quit KeePassXC KeePassXC afsluiten - - %1 Entry(s) - %1 Item%1 Items - Please present or touch your YubiKey to continue… - Plaats je YubiKey of druk er op om door te gaan… + Presenteer je YubiKey of druk er op om door te gaan... Restart Application? @@ -6037,326 +5472,51 @@ Houd rekening met fouten en kleine problemen. Deze versie is bedoeld voor testdo You must restart the application to apply this setting. Would you like to restart now? - Je moet KeePassXC opnieuw opstarten om deze instelling toe te passen. Wil je dat nu doen? + Je moet de applicatie opnieuw opstarten om deze instelling toe te passen. +Wil je KeePassXC nu opnieuw opstarten? + + + Tags + Labels + + + No Tags + Geen labels + + + %1 Entry(s) + %1 item%1 items + + + Copy Password and TOTP + Wachtwoord en TOTP kopiëren + + + &XML File… + &Xml-bestand… + + + XML File… + Xml-bestand… + + + Copy &URL + &Url kopiëren Allow Screen Capture Schermopname toestaan - - 1Password 1PUX... - 1Password 1PUX… - - - Import a 1Password 1PUX file - Een 1Password 1PUX-bestand importeren - - - Import… - Importeren… - - - Passkeys… - Passkeys… - - - Import Passkey - Passkey importeren - - - Remote S&ync… - S&ynchronisatie op afstand… - - - Quit Application - Programma afsluiten - - - Open About Dialog - Dialoogvenster 'Over' openen - - - Open Database - Database openen - - - Create Database - Database aanmaken - - - Merge From Database - Samenvoegen uit database - - - Create Entry - Item aanmaken - - - Edit Entry - Invoer bewerken - - - Delete Entry - Item verwijderen - - - Create Group - Groep aanmaken - - - Edit Group - Groep bewerken - - - Delete Group - Groep verwijderen - - - Download All Favicons - Alle favicons downloaden - - - Sort Groups A-Z - Groepen sorteren A-Z - - - Sort Groups Z-A - Groepen sorteren Z-A - - - Save Database As - Database opslaan als - - - Show Database Security - Database-beveiliging weergeven - - - Show Database Reports - Database-rapportage weergeven - - - Show Database Settings - Database-instellingen weergeven - - - Show Passkeys - Passkeys weergeven - - - Clone Entry - Item dupliceren - - - Move Entry Up - Item omhoog verplaatsen - - - Move Entry Down - Item omlaag verplaatsen - - - Copy Username - Gebruikersnaam kopiëren - - - Copy Password - Wachtwoord kopiëren - - - Show Application Settings - Programma-instellingen weergeven - - - Show Password Generator - Wachtwoordgenerator weergeven - - - Remove Passkey From Entry - Passkey van item verwijderen - - - Perform Auto-Type: {USERNAME} - Automatisch invullen: {USERNAME} - - - Perform Auto-Type: {USERNAME}{ENTER} - Automatisch invullen: {USERNAME}{ENTER} - - - Perform Auto-Type: {PASSWORD} - Automatisch invullen: {PASSWORD} - - - Perform Auto-Type: {PASSWORD}{ENTER} - Automatisch invullen: {PASSWORD}{ENTER} - - - Perform Auto-Type: {TOTP} - Automatisch invullen: {TOTP} - - - Copy Title - Titel kopiëren - - - Copy URL - URL kopiëren - - - Copy Notes - Notities kopiëren - - - Export to CSV - Exporteren naar CSV - - - Export to HTML - Exporteren naar HTML - - - Import KeePass1 Database - KeePass1-database importeren - - - Import 1Password Vault - 1Password-kluis importeren - - - Import CSV File - CSV-bestand importeren - - - Show TOTP QR Code - TOTP QR-code weergeven - - - Set up TOTP - TOTP instellen - - - Empty Recycle Bin - Prullenbak legen - - - Open Donation Website - Donatiewebsite openen - - - Open Bug Report - Foutrapportage openen - - - Open Online Documentation - Online documentatie openen - - - Open Keyboard Shortcuts Guide - Sneltoetsengids openen - - - Save Database Backup - Reservekopie van database opslaan - - - SSH Agent: Add Key - SSH-agent: Sleutel toevoegen - - - SSH Agent: Remove Key - SSH-agent: Sleutel verwijderen - - - Toggle Compact Mode - Compacte modus wisselen - - - Set Theme: Automatic - Thema: Automatisch - - - Set Theme: Light - Thema: Licht - - - Set Theme: Dark - Thema: Donker - - - Set Theme: Classic - Thema: Klassiek - - - Toggle Show Menubar - Menubalk tonen/verbergen - - - Toggle Show Toolbar - Werkbalk tonen/verbergen - - - Toggle Show Preview Panel - Informatiepaneel tonen/verbergen - - - Toggle Always on Top - Venster altijd bovenop wisselen - - - Toggle Hide Usernames - Gebruikersnamen tonen/verbergen - - - Toggle Hide Passwords - Wachtwoorden tonen/verbergen - - - Export to XML - Exporteren naar XML - - - Toggle Allow Screen Capture - Schermopname toestaan wisselen - - - Show Group Panel - Navigatiepaneel weergeven - - - Toggle Show Group Panel - Navigatiepaneel tonen/verbergen - - - Setup Remote Sync… - Synchronisatie op afstand instellen… - - - Password Generator - Wachtwoordgenerator - - - E&xpire Entry… - Item laten verlo&pen… - - - Clear SSH Agent - SSH-agent wissen - - - Clear all identities in ssh-agent - Alle identiteiten in SSH-agent wissen - ManageDatabase Database settings - Databaseinstellingen + Database-instellingen Edit database settings - Databaseinstellingen bewerken + Database instellingen bewerken Unlock database @@ -6364,7 +5524,7 @@ Houd rekening met fouten en kleine problemen. Deze versie is bedoeld voor testdo Unlock database to show more information - Database ontgrendelen om meer informatie weer te geven + Ontgrendel de database voor meer informatie Lock database @@ -6375,34 +5535,54 @@ Houd rekening met fouten en kleine problemen. Deze versie is bedoeld voor testdo ManageSession Disconnect - Koppeling verbreken + Verbreken Disconnect this application - Verbreek de koppeling met dit programma + Deze applicatie loskoppelen Reset - Standaardwaarden + Opnieuw instellen Reset any remembered decisions for this application - Alle instellingen van dit programma opnieuw instellen + Alle onthouden beslissingen voor deze toepassing opnieuw instellen Merger Creating missing %1 [%2] - Aanmaken van ontbrekende %1 [%2] + Ontbrekende %1 [%2] aanmaken Relocating %1 [%2] - Verplaatsen van %1 [%2] + %1 [%2] verplaatsen Overwriting %1 [%2] - Overschrijven van %1 [%2] + %1 [%2] overschrijven + + + older entry merged from database "%1" + ouder item samengevoegd uit database '%1' + + + Adding backup for older target %1 [%2] + Back-up toevoegen voor ouder doel %1 [%2] + + + Adding backup for older source %1 [%2] + Back-up toevoegen voor oudere bron %1 [%2] + + + Reapplying older target entry on top of newer source %1 [%2] + Ouder doel item is opnieuw toegepast over nieuwer bron item %1 [%2] + + + Reapplying older source entry on top of newer target %1 [%2] + Ouder bron item is opnieuw toegepast over nieuwer doel item %1 [%2] Synchronizing from newer source %1 [%2] @@ -6414,15 +5594,15 @@ Houd rekening met fouten en kleine problemen. Deze versie is bedoeld voor testdo Deleting child %1 [%2] - Verwijderen van onderliggende %1 [%2] + Verwijderen van kind %1 [%2] Deleting orphan %1 [%2] - Verwijderen van verouderde %1 [%2] + Verwijderen wees %1 [%2] Changed deleted objects - Gewijzigde verwijderde objecten + Verwijderde objecten gewijzigd Adding missing icon %1 @@ -6430,23 +5610,23 @@ Houd rekening met fouten en kleine problemen. Deze versie is bedoeld voor testdo Removed custom data %1 [%2] - Verwijderde aangepaste gegevens %1 [%2] + Gebruikersinstellingen verwijderd %1 [%2] Adding custom data %1 [%2] - Toevoegen van aangepaste gegevens %1 [%2] + Gebruikersinstellingen toegevoegd %1 [%2] NewDatabaseWizard Create a new KeePassXC database… - Aanmaken van nieuwe KeePassXC-database… + Nieuwe KeePassXC database aanmaken... Root Root group - Hoofdgroep + Alles @@ -6461,18 +5641,26 @@ Houd rekening met fouten en kleine problemen. Deze versie is bedoeld voor testdo Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. - Hier kun je de versleutelingsinstellingen van de database aanpassen. Dit kan echter ook op een later moment via de databaseinstellingen. + Hier kun je de versleutelingsinstellingen van de database aanpassen. Maak je geen zorgen, je kunt dit later in de database-instellingen wijzigen. + + + Advanced Settings + Geavanceerde instellingen + + + Simple Settings + Eenvoudige instellingen NewDatabaseWizardPageDatabaseKey Database Credentials - Database-inloggegevens + Databasegegevens A set of credentials known only to you that protects your database. - Inloggegevens die alleen jij kent en die de database beschermt. + Een verzameling referenties die jij alleen kent en die je database beschermt. @@ -6483,37 +5671,18 @@ Houd rekening met fouten en kleine problemen. Deze versie is bedoeld voor testdo Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. - Hier kun je de versleutelingsinstellingen van de database aanpassen. Dit kan echter ook op een later moment via de databaseinstellingen. + Hier kun je de versleutelingsinstellingen van de database aanpassen. Maak je geen zorgen, je kunt dit later in de database-instellingen wijzigen. NewDatabaseWizardPageMetaData General Database Information - Algemene databaseinformatie + Algemene database-informatie Please fill in the display name and an optional description for your new database: - Geef de nieuwe database een weergavenaam en eventueel een beschrijving: - - - - NewEntryAttachmentsDialog - - Attachment name cannot be empty - Naam van bijlage kan niet leeg zijn - - - Attachment with the same name already exists - Er bestaat al een bijlage met dezelfde naam - - - Save attachment - Bijlage opslaan - - - New entry attachment - Nieuwe bijlage bij item + Geef de weergavenaam en een optionele beschrijving voor de nieuwe database: @@ -6524,22 +5693,22 @@ Houd rekening met fouten en kleine problemen. Deze versie is bedoeld voor testdo Global shortcut already registered to %1 - Algemene sneltoets is al toegekend aan %1 + Globale snelkoppeling is al geregistreerd bij %1 Could not register global shortcut - Algemene sneltoets is niet vastgelegd + Kan algemene snelkoppeling niet registreren OpData01 Invalid OpData01, does not contain header - Ongeldige OpData01: bevat geen kop + Ongeldige OpData01, bevat geen header Unable to read all IV bytes, wanted 16 but got %1 - Niet alle IV-bytes kunnen lezen; 16 gewenst maar %1 verkregen + Kon niet alle IV bytes lezen, gewenst is 16 maar kreeg er %1 Unable to init cipher for opdata01: %1 @@ -6562,6 +5731,15 @@ Houd rekening met fouten en kleine problemen. Deze versie is bedoeld voor testdo %1 bytes niet versleutelde tekst verwacht, %2 aangetroffen + + OpVaultOpenWidget + + Read Database did not produce an instance +%1 + De te lezen database heeft geen exemplaar geproduceerd +%1 + + OpVaultReader @@ -6582,7 +5760,7 @@ Houd rekening met fouten en kleine problemen. Deze versie is bedoeld voor testdo Unable to decode masterKey: %1 - Kan hoofdsleutel niet ontcijferen: %1 + Kan hoofdsleutel niet decoderen: %1 Unable to derive master key: %1 @@ -6593,7 +5771,7 @@ Houd rekening met fouten en kleine problemen. Deze versie is bedoeld voor testdo OpenSSHKey Invalid key file, expecting an OpenSSH key - Ongeldig sleutelbestand; er wordt een OpenSSH-sleutel verwacht + Ongeldig sleutelbestand, er werd een OpenSSH-sleutel verwacht PEM boundary mismatch @@ -6605,7 +5783,7 @@ Houd rekening met fouten en kleine problemen. Deze versie is bedoeld voor testdo Key file way too small. - Sleutelbestand is veel te klein. + Sleutelbestand veel te klein. Key file magic header id invalid @@ -6613,35 +5791,31 @@ Houd rekening met fouten en kleine problemen. Deze versie is bedoeld voor testdo Found zero keys - Geen sleutels aangetroffen + Geen sleutels gevonden Failed to read public key. - Kan openbare sleutel niet uitlezen. + Lezen publieke sleutel mislukt. Corrupted key file, reading private key failed - Beschadigd bestand, de persoonlijke sleutel is niet uitgelezen + Beschadigd sleutelbestand, lezen persoonlijke sleutel mislukt Unsupported key type: %1 - Niet-ondersteund sleuteltype: %1 + Niet ondersteund sleuteltype: %1 No private key payload to decrypt - Geen inhoud om persoonlijke sleutel te decoderen + Geen inhoud persoonlijke sleutel om te decoderen Unknown cipher: %1 Onbekende versleuteling: %1 - - AES-256/GCM is currently not supported - AES-256/GCM wordt momenteel niet ondersteund - Passphrase is required to decrypt this key - Er is een wachtwoordzin vereist om deze sleutel te decoderen + Wachtwoord(-zin) nodig om deze sleutel te ontcijferen Key derivation failed: %1 @@ -6649,35 +5823,35 @@ Houd rekening met fouten en kleine problemen. Deze versie is bedoeld voor testdo Cipher IV is too short for MD5 kdf - Versleuteilng IV is te kort om MD5-sleutel te verkrijgen + Versleuteilng IV is te kort om MD5-sleutel te verkrijgen. Unknown KDF: %1 - Onbekende KDF: %1 + Onbekende sleutelafleidings-functie: %1 Failed to initialize cipher: %1 - Kan versleuteling niet initialiseren: %1 + Kan codering niet initialiseren: %1 Decryption failed: %1 - Decodering mislukt: %1 + Decodering is mislukt: %1 Decryption failed, wrong passphrase? - Decodering mislukt. Controleer de wachtwoordzin. + Decodering mislukt, verkeerd wachtwoord(-zin)? Unexpected EOF while reading key - Onverwachte EOF bij lezen sleutel + Onverwacht bestandseinde tijdens lezen van de sleutel Unsupported key part - Niet-ondersteund sleutelonderdeel + Niet ondersteund sleutelonderdeel Unexpected EOF while reading public key - Onverwachte EOF bij lezen openbare sleutel + Onverwacht bestandseinde publieke sleutel Unknown key type: %1 @@ -6685,213 +5859,38 @@ Houd rekening met fouten en kleine problemen. Deze versie is bedoeld voor testdo Unexpected EOF while reading private key - Onverwachte EOF bij persoonlijke sleutel + Onverwacht bestandseinde persoonlijke sleutel Can't write public key as it is empty - Kan geen openbare sleutel schrijven omdat deze leeg is + Kan publieke sleutel niet opslaan, aangezien deze leeg is Unexpected EOF when writing public key - Onverwachte EOF bij schrijven openbare sleutel + Onverwacht bestandseinde bij schrijven publieke sleutel Can't write private key as it is empty - De persoonlijke sleutel is niet opgeslagen aangezien deze leeg is + Kan persoonlijke sleutel niet opslaan, aangezien deze leeg is Unexpected EOF when writing private key - Onverwachte EOF bij schrijven persoonlijke sleutel + Onverwacht bestandseinde bij schrijven persoonlijke sleutel - (encrypted) - (versleuteld) - - - - OpenSSHKeyGenDialog - - SSH Key Generator - SSH-sleutelgenerator - - - Type - Type - - - Bits - Bits - - - Comment - Opmerking - - - - PasskeyExportDialog - - KeePassXC - Passkey Export - KeePassXC - Passkey Export - - - Filenames will be generated with title and .passkey file extension. - Bestandsnamen worden gegenereerd met de titel en de bestandsextensie .passkey. - - - Export entries - Items exporteren - - - Export Selected - Selectie exporteren - - - Cancel - Annuleren - - - Export to folder - Exporteer naar map - - - Export the following passkey entries. - De volgende passkey items exporteren: - - - - PasskeyExporter - - KeePassXC: Passkey Export - KeePassXC - Passkey Export - - - File "%1.passkey" already exists. -Do you want to overwrite it? - - Bestand "%1.passkey" bestaat al. -Wil je het overschrijven? - - - - Cannot open file - Kan bestand niet openen - - - Cannot open file "%1" for writing. - Kan bestand "%1" niet openen om te schrijven. - - - Cannot write to file - Kan niet naar bestand schrijven - - - - PasskeyImportDialog - - KeePassXC - Passkey Import - KeePassXC - Passkey Import - - - Username: %1 - Gebruikersnaam: %1 - - - Group - Groep - - - Database - Database - - - Import Passkey - Passkey importeren - - - Import - Importeren - - - Cancel - Annuleren - - - Entry - Item - - - Create new entry - Nieuw item aanmaken - - - Relying Party: %1 - Vertrouwende partij: %1 - - - Import the following passkey: - De volgende passkey importeren: - - - Import the following passkey to this entry: - De volgende passkeys importeren naar dit item: - - - Default passkeys group (Imported Passkeys) - Standaardgroep voor passkeys (Imported Passkeys) - - - - PasskeyImporter - - Passkey file - Passkey-bestand - - - All files - Alle bestanden - - - Cannot open file - Kan bestand niet openen - - - Cannot open file "%1" for reading. - Kan bestand "%1" niet openen om te lezen. - - - Open passkey file - Passkey-bestand openen - - - Cannot import passkey - Kan passkey niet importeren - - - Cannot import passkey file "%1". Data is missing. - Kan passkey-bestand "%1" niet importeren. Gegevens ontbreken. - - - Cannot import passkey file "%1". -The following data is missing: -%2 - Kan passkey-bestand "%1" niet importeren. -De volgende gegevens ontbreken: -%2 - - - Cannot import passkey file "%1". Private key is missing or malformed. - Kan passkey-bestand "%1" niet importeren. Persoonlijke sleutel ontbreekt of is ongeldig. + AES-256/GCM is currently not supported + AES-256/GCM wordt momenteel niet ondersteund PasswordEditWidget Enter password: - Voer wachtwoord in: + Wachtwoord invoeren: Password field - Wachtwoordveld + Wachtwoord invulveld Confirm password: @@ -6899,7 +5898,7 @@ De volgende gegevens ontbreken: Repeat password field - Veld voor wachtwoordherhaling + Wachtwoord herhaling veld Password @@ -6919,7 +5918,7 @@ De volgende gegevens ontbreken: Password set, click to change or remove - Wachtwoord ingesteld - klik om te wijzigen of te verwijderen + Wachtwoord ingesteld, klik om te wijzigen of verwijderen <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> @@ -6927,7 +5926,7 @@ De volgende gegevens ontbreken: Passwords do not match. - De wachtwoorden komen niet overeen. + Wachtwoorden komen niet overeen. @@ -6983,7 +5982,7 @@ De volgende gegevens ontbreken: Character Types - Tekensoorten + Tekens Special characters @@ -6991,7 +5990,7 @@ De volgende gegevens ontbreken: Quotes - Dubbele aanhalingstekens + Aanhalingstekens Punctuation @@ -6999,11 +5998,11 @@ De volgende gegevens ontbreken: Dashes and Slashes - Streepjes en schuine strepen + Streepjes en schuine streepjes Upper-case letters - HOOFDLETTERS + Hoofdletters Numbers @@ -7011,11 +6010,11 @@ De volgende gegevens ontbreken: Lower-case letters - kleine letters + Kleine letters Math Symbols - Wiskundige tekens + Wiskunde tekens Extended ASCII @@ -7039,11 +6038,11 @@ De volgende gegevens ontbreken: Add non-hex letters to "do not include" list - Voeg niet-hextekens toe aan de ‘niet gebruiken’-lijst + Voeg niet-hex karakters toe aan de "niet gebruiken" lijst Hex Passwords - Hex-wachtwoorden + Hex wachtwoord Hex @@ -7051,11 +6050,11 @@ De volgende gegevens ontbreken: Character set to exclude from generated password - De tekenset die niet gebruikt mag worden in het gegenereerde wachtwoord + Tekenset die niet gebruikt mag worden in het gegenereerde wachtwoord Excluded characters - Uitgesloten tekens + Niet te gebruiken tekens Also choose from: @@ -7063,11 +6062,11 @@ De volgende gegevens ontbreken: Exclude look-alike characters - Op elkaar lijkende tekens uitsluiten + Op elkaar lijkende tekens niet gebruiken Pick characters from every group - Tekens uit iedere groep gebruiken + Gebruik tekens uit iedere groep Passphrase @@ -7085,9 +6084,13 @@ De volgende gegevens ontbreken: Word Count: Aantal woorden: + + Character Count: + Aantal tekens: + Word Case: - Hoofdlettergebruik: + Teken grootte Delete selected wordlist @@ -7097,6 +6100,10 @@ De volgende gegevens ontbreken: Add custom wordlist Aangepaste woordenlijst toevoegen + + character + teken + Close Sluiten @@ -7107,11 +6114,11 @@ De volgende gegevens ontbreken: Apply Password - Wachtwoord toepassen + Wachtwoord gebruiken Regenerate password (%1) - Opnieuw genereren (%1) + Òpnieuw genereren (%1) lower case @@ -7123,7 +6130,7 @@ De volgende gegevens ontbreken: Title Case - Beginhoofdletters + Eerste Letter Als Hoofdletter (SYSTEM) @@ -7133,14 +6140,60 @@ De volgende gegevens ontbreken: Entropy: %1 bit Entropie: %1 bit + + Confirm Delete Wordlist + Verwijdering woordenlijst bevestigen + + + Do you really want to delete the wordlist "%1"? + Wil je de woordenlijst "%1" echt verwijderen? + + + Failed to delete wordlist + Woordenlijst is niet verwijderd + + + Wordlists + Woordenlijsten + + + All files + Alle bestanden + + + Select Custom Wordlist + Aangepaste woordenlijst selecteren + + + Overwrite Wordlist? + Woordenlijst overschrijven? + + + Wordlist "%1" already exists as a custom wordlist. +Do you want to overwrite it? + Woordenlijst "%1" bestaat al als een aangepaste woordenlijst. +Wil je deze overschrijven? + + + Failed to add wordlist + Woordenlijst is niet toegevoegd + + + Logograms + Special tekens + + + Special Characters + Speciale tekens + Password Quality: %1 - Wachtwoordsterkte: %1 + Kwaliteit: %1 Poor Password quality - Matig + Slecht Weak @@ -7158,66 +6211,8 @@ De volgende gegevens ontbreken: Uitstekend - Confirm Delete Wordlist - Verwijderen van woordenlijst bevestigen - - - Do you really want to delete the wordlist "%1"? - Wil je de woordenlijst “%1” verwijderen? - - - Failed to delete wordlist - Kan woordenlijst niet verwijderen - - - Wordlists - Woordenlijsten - - - All files - Alle bestanden - - - Select Custom Wordlist - Selecteer aangepaste woordenlijst - - - Overwrite Wordlist? - Woordenlijst overschrijven? - - - Wordlist "%1" already exists as a custom wordlist. -Do you want to overwrite it? - De woordenlijst “%1” bestaat al als aangepaste woordenlijst. -Wil je deze overschrijven? - - - Failed to add wordlist - Kan woordenlijst niet toevoegen - - - Logograms - Logogrammen - - - Special Characters - Speciale tekens - - - passwordLength - passwordLength - - - Characters: %1 - Karakters: %1 - - - MIXED case - GEmengDe letters - - - Excluded characters: "0", "1", "l", "I", "O", "|", "﹒", "B", "8", "G", "6" - Uitgesloten tekens: "0", "1", "l", "I", "O", "|", "﹒", "B", "8", "G", "6" + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + Niet te gebruiken karakters: "0", "1", "l", "I", "O", "|", "﹒" @@ -7228,11 +6223,11 @@ Wil je deze overschrijven? Passwords match so far - Overeenkomst van wachtwoorden tot dusver + Wachtwoordovereenkomst tot dusver Toggle Password (%1) - Wachtwoord tonen/verbergen (%1) + Wachtwoord schakelen (%1) Generate Password (%1) @@ -7249,7 +6244,7 @@ Wil je deze overschrijven? Poor Password quality - Matig + Slecht Weak @@ -7267,8 +6262,8 @@ Wil je deze overschrijven? Uitstekend - Toggle password visibility using Control + H. Open the password generator using Control + G. - Wachtwoorden tonen/verbergen met Ctrl + H. Wachtwoordgenerator openen met Ctrl + G. + Toggle password visibilty using Control + H. Open the password generator using Control + G. + Toon/Verberg wachtwoorden met Ctrl+H - open de wachtwoordgenerator met Ctrl+G. @@ -7279,26 +6274,11 @@ Wil je deze overschrijven? Select characters to type, navigate with arrow keys, Ctrl + S submits. - Selecteer tekens om te typen, navigeer met de pijltjestoetsen, verstuur met Ctrl + S. + Selecteer tekens om te typen, navigeer met pijltoetsen, Ctrl + S verzendt. Press &Tab between characters - Druk op &Tab tussen de tekens - - - - PreviewEntryAttachmentsDialog - - Preview entry attachment - Voorbeeld van bijlage bij item - - - No preview available - Geen voorbeeld beschikbaar - - - Image format not supported - Afbeeldingsformaat niet ondersteund + Druk &Tab tussen de tekens @@ -7339,24 +6319,20 @@ Wil je deze overschrijven? Continue Doorgaan - - Continue with weak password - Doorgaan met zwak wachtwoord - QObject Database not opened - De database is niet geopend + Database niet geopend Database hash not available - Controlegetal van database niet beschikbaar + Database-hashwaarde is niet beschikbaar Client public key not received - De openbare sleutel is niet ontvangen + Openbare sleutel niet ontvangen Cannot decrypt message @@ -7364,15 +6340,15 @@ Wil je deze overschrijven? Action cancelled or denied - De actie is afgebroken of geweigerd + Actie afgebroken of geweigerd Message encryption failed. - Berichtversleuteling is mislukt. + Berichtcodering is mislukt. KeePassXC association failed, try again - De KeePassXC-koppeling is mislukt - probeer het opnieuw + KeePassXC-koppeling is mislukt, probeer het opnieuw Encryption key is not recognized @@ -7408,7 +6384,7 @@ Wil je deze overschrijven? Unknown error - Onbekende foutmelding + Onbekende fout Browser Integration @@ -7416,15 +6392,15 @@ Wil je deze overschrijven? Browser Plugin Failure - Browserextensie-foutmelding + Fout met browser-extensie Could not save the native messaging script file for %1. - Kan het native messaging-scriptbestand van %1 niet opslaan. + Kan het native messaging scriptbestand voor %1 niet opslaan. Username for the entry. - De gebruikersnaam van het item. + Gebruikersnaam voor het item. username @@ -7432,7 +6408,7 @@ Wil je deze overschrijven? URL for the entry. - De URL van het item. + URL voor het item. URL @@ -7440,7 +6416,7 @@ Wil je deze overschrijven? Notes for the entry. - De notities bij het item. + Notities bij het item. Notes @@ -7448,7 +6424,7 @@ Wil je deze overschrijven? Prompt for the entry's password. - Vraag om het wachtwoord van het item. + Vraag om het item's wachtwoord. Generate a password for the entry. @@ -7456,31 +6432,31 @@ Wil je deze overschrijven? Add a new entry to a database. - Voeg een nieuw item toe aan een database. + Nieuw item toevoegen aan een database. Path of the entry to add. - De locatie van het toe te voegen item. + Pad van toe te voegen item. Cannot generate a password and prompt at the same time. - Kan niet tegelijkertijd een wachtwoord en prompt genereren. + Kan geen wachtwoord en prompt op hetzelfde moment genereren! Could not create entry with path %1. - Kan geen item aanmaken met de locatie %1. + Kan geen item maken met pad %1. Enter password for new entry: - Voer het wachtwoord in van het nieuwe item: + Voer wachtwoord in voor nieuw item: Writing the database failed %1. - De database kan niet worden weggeschreven %1. + Het schrijven van de database is mislukt %1. Successfully added entry %1. - Item %1 is toegevoegd. + Item %1 toegevoegd. Adds a new group to a database. @@ -7488,7 +6464,7 @@ Wil je deze overschrijven? Path of the group to add. - Locatie van de toe te voegen groep. + Pad van de toe te voegen groep. Group %1 already exists! @@ -7496,15 +6472,15 @@ Wil je deze overschrijven? Group %1 not found. - Groep %1 is niet aangetroffen. + Groep %1 niet gevonden. Successfully added group %1. - Groep %1 is toegevoegd. + Groep %1 toegevoegd. Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. - Controleer of er wachtwoorden zijn gelekt en openbaar zijn gemaakt. BESTANDSNAAM dient de locatie te zijn van een bestand met SHA-1-controlegetallen van gelekte wachtwoorden in HIBP-indeling, zoals beschikbaar op https://haveibeenpwned.com/Passwords. + Controleer of er wachtwoorden zijn gelekt en openbaar zijn gemaakt. BESTANDSNAAM moet het pad zijn van een bestand met SHA-1-hashes van gelekte wachtwoorden in HIBP-indeling, zoals beschikbaar op https://haveibeenpwned.com/Passwords. FILENAME @@ -7528,19 +6504,19 @@ Wil je deze overschrijven? Evaluating database entries using okon… - Database-items evalueren met okon… + Database-items evalueren met okon... Failed to open HIBP file %1: %2 - Kan HIBP-bestand %1 niet openen: %2 + Kon HIBP bestand niet openen %1: %2 Evaluating database entries against HIBP file, this will take a while… - Database-items evalueren met behulp van het HIBP-bestand, dit kan even duren… + Database items evalueren t.o.v. HIBP-bestand, dit kan even duren... Password for '%1' has been leaked %2 time(s)! - Wachtwoord voor '%1' is %2 keer gelekt!Wachtwoord voor '%1' is %2 keer gelekt! + Wachtwoord voor '%1' is %2 keer gelekt!Wachtwoorden voor '%1' zijn %2 keer gelekt! Password for '%1' has been leaked! @@ -7580,7 +6556,7 @@ Wil je deze overschrijven? Successfully exported attachment %1 of entry %2 to %3. - Bijlage %1 van item %2 met succes geëxporteerd naar %3. + Bijlage %1 van item %2 tot en met %3 met succes geëxporteerd. Overwrite existing attachments. @@ -7612,11 +6588,11 @@ Wil je deze overschrijven? Successfully imported attachment %1 as %2 to entry %3. - Bijlage %1 met succes als %2 ingevoerd bij item %3. + Bijlage %1 met succes als %2 ingevoerd bij %3. Remove an attachment of an entry. - Verwijder een bijlage van een item. + Verwijder een bijlage van een vermelding. Name of the attachment to be removed. @@ -7624,12 +6600,12 @@ Wil je deze overschrijven? Successfully removed attachment %1 from entry %2. - Bijlage %1 is van item %2 verwijderd. + Bijlage %1 uit vermelding %2 is verwijderd. Copy the given attribute to the clipboard. Defaults to "password" if not specified. Don't translate "password", it refers to the attribute. - Kopieer het gegeven kenmerk naar het klembord. Dit is standaard "wachtwoord" tenzij anders gespecificeerd. + Kopieer het gegeven kenmerk naar het klembord. Dit is "wachtwoord" tenzij anders gespecificeerd. Copy the current TOTP to the clipboard (equivalent to "-a totp"). @@ -7650,7 +6626,7 @@ Wil je deze overschrijven? Timeout before clearing the clipboard (default is %1 seconds, set to 0 for unlimited). - Time-out voordat het klembord wordt gewist (standaard %1 seconden, gebruik 0 voor onbeperkt). + Time-out voordat het klembord wordt leeg gemaakt (standaard is %1 seconden, gebruik 0 voor onbeperkt). Invalid timeout value %1. @@ -7674,7 +6650,7 @@ Wil je deze overschrijven? Entry with path %1 has no TOTP set up. - Item met pad %1 heeft geen TOTP ingesteld. + Item met pad %1 heeft geen TOTP instellingen. ERROR: attribute %1 is ambiguous, it matches %2. @@ -7690,7 +6666,7 @@ Wil je deze overschrijven? Clearing the clipboard in %1 second(s)... - Klembord over %1 seconde wissen…Klembord over %1 seconden wissen… + Het klemboard wordt over %1 seconde(n) gewist...Het klembord wordt over %1 seconde(n) gewist... Clipboard cleared! @@ -7702,11 +6678,11 @@ Wil je deze overschrijven? Display this help. - Toon deze helptekst. + Toont deze helptekst. Silence password prompt and other secondary outputs. - Wachtwoordprompt en andere bijkomstige meldingen dempen. + Wachtwoordprompt en andere bijkomstige meldingen verbergen. Key file of the database. @@ -7722,7 +6698,7 @@ Wil je deze overschrijven? Yubikey slot and optional serial used to access the database (e.g., 1:7370001). - Yubikey-positie en optioneel serienummer dat wordt gebruikt om toegang te krijgen tot de database (bijv. 1:7370001). + Yubikey-positie en optioneel serienummer dat wordt gebruikt om toegang te krijgen tot de database (bijv. 1: 7370001). slot[:serial] @@ -7730,19 +6706,15 @@ Wil je deze overschrijven? Missing positional argument(s). - Er ontbreken positionele argumenten. + Er ontbreken positionele argument(en). Too many arguments provided. Te veel argumenten. - - Path of the database. - Pad naar de database. - Target decryption time in MS for the database. - Beoogde decoderingstijd voor de database in ms. + Beoogde decoderingstijd voor de database [ms]. time @@ -7750,7 +6722,7 @@ Wil je deze overschrijven? Set the key file for the database. - Stel het sleutelbestand in voor de database. + Het sleutelbestand voor de database instellen. Set a password for the database. @@ -7758,7 +6730,11 @@ Wil je deze overschrijven? Create a new database. - Nieuwe database aanmaken. + Nieuwe database aanmaken + + + Path of the database. + Pad naar de database. Invalid decryption time %1. @@ -7805,60 +6781,287 @@ Wil je deze overschrijven? Nieuwe database is aangemaakt - Unset the password for the database. - Maak het wachtwoord voor de database ongedaan. + Word count for the diceware passphrase. + Aantal woorden voor de Diceware wachtwoordzin. - Unset the key file for the database. - Schakel het sleutelbestand voor de database uit. + count + CLI parameter + aantal - Edit a database. - Een database bewerken. + Wordlist for the diceware generator. +[Default: EFF English] + Woordenlijst voor de Diceware-generator. +[Standaard: EFF Engels] - Cannot use %1 and %2 at the same time. - %1 en %2 kunnen niet tegelijkertijd worden gebruikt. + Generate a new random diceware passphrase. + Genereer een nieuwe willekeurige Diceware wachtwoordzin - Could not change the database key. - Kan de databasesleutel niet wijzigen. + Invalid word count %1 + Ongeldig aantal woorden %1 - Database was not modified. - De database is niet bewerkt. + The word list is too small (< 1000 items) + De woordenlijst is te klein (< 1000 items) + + + Title for the entry. + Naam voor deze entry. + + + title + naam + + + Edit an entry. + Een item bewerken. + + + Path of the entry to edit. + Pad van het te bewerken item. + + + 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 the database. - De database is bewerkt. + Successfully edited entry %1. + Item %1 is aangepast. - Cannot remove password: The database does not have a password. - Kan wachtwoord niet verwijderen: De database heeft geen wachtwoord. + Perform advanced analysis on the password. + Geavanceerde analyse op het wachtwoord uitvoeren. - Cannot remove file key: The database does not have a file key. - Kan het sleutelbestand niet wissen: De database heeft geen sleutelbestand. + Password for which to estimate the entropy. + Wachtwoord waarvoor de entropie geschat moet worden. - Loading the new key file failed: %1 - Kan het nieuwe sleutelbestand niet laden: %1 + Estimate the entropy of a password. + De entropie van een wachtwoord inschatten. - Found unexpected Key type %1 - Onverwacht sleuteltype aangetroffen: ‘%1’ + Length %1 + Lengte %1 - Cannot remove all the keys from a database. - Niet alle sleutels kunnen worden gewist. + Entropy %1 + Entropie %1 + + + Log10 %1 + Log10 %1 + + + Multi-word extra bits %1 + Multi-word extra bits %1 + + + Type: Bruteforce + Type: Brute kracht + + + Type: Dictionary + Type: Woordenboek + + + Type: Dict+Leet + Type: Woordenboek + Leet + + + Type: User Words + Type: Gebruikerwoorden + + + Type: User+Leet + Type: Gebruikerwoorden + Leet + + + Type: Repeated + Type: Herhaald + + + Type: Sequence + Type: Reeks + + + Type: Spatial + Type: Ruimtelijk + + + Type: Date + Type: Datum + + + Type: Bruteforce(Rep) + Type: Brute kracht (herh) + + + Type: Dictionary(Rep) + Type: Woordenboek (herh) + + + Type: Dict+Leet(Rep) + Type: Woordenboek + Leet (herh) + + + Type: User Words(Rep) + Type: Gebruikerwoorden (herh) + + + Type: User+Leet(Rep) + Type: Gebruikerwoorden + Leet (herh) + + + Type: Repeated(Rep) + Type: Herhaald (herh) + + + Type: Sequence(Rep) + Type: Reeks (herh) + + + Type: Spatial(Rep) + Type: Ruimtelijk (herh) + + + Type: Date(Rep) + Type: Datum (herh) + + + Type: Unknown (%1) + Type: Onbekend (%1) + + + Entropy %1 (%2) + Entropie %1 (%2) + + + *** Password length (%1) != sum of length of parts (%2) *** + *** Wachtwoordlengte (%1) ! = som van de lengte van de onderdelen (%2) *** + + + Exit interactive mode. + Interactieve modus afsluiten. + + + Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. + Formaat om te gebruiken bij het exporteren. Beschikbare keuzes zijn 'xml' of 'csv'. Standaard ingesteld op 'xml'. + + + Exports the content of a database to standard output in the specified format. + Exporteert de inhoud van een database naar standaarduitvoer in de opgegeven indeling. + + + Unable to export database to XML: %1 + Kon de database niet exporteren naar XML: %1 + + + Unsupported format %1 + Niet-ondersteund formaat %1 + + + Length of the generated password + Lengte van het gegenereerde wachtwoord + + + length + lengte + + + Use lowercase characters + Kleine letters gebruiken + + + Use uppercase characters + Hoofdletters gebruiken + + + Use numbers + Getallen gebruiken. + + + Use special characters + Speciale tekens gebruiken + + + Use extended ASCII + Uitgebreide ASCII-tekens gebruiken + + + Exclude character set + Tekenset uitsluiten + + + chars + Tekens + + + Use custom character set + Aangepaste tekenset gebruiken + + + Exclude similar looking characters + Op elkaar lijkende tekens niet gebruiken + + + Include characters from every selected group + Tekens uit iedere geslecteerde groep opnemen + + + Generate a new random password. + Genereer een willekeurig wachtwoord + + + Invalid password length %1 + Ongeldige wachtwoordlengte %1 + + + Invalid password generator after applying all options + Ongeldige wachtwoordgenerator na het toepassen van alle opties + + + Display command help. + Toon helptekst voor opdracht. + + + Available commands: + Beschikbare opdrachten: + + + Import the contents of an XML database. + Importeer de inhoud van een XML-database. + + + Path of the XML database export. + Pad van de XML-database export. + + + Path of the new database. + Pad van de nieuwe database. + + + Unable to import XML database: %1 + Kan XML-database niet importeren: %1 + + + Successfully imported database. + Database is geïmporteerd. Show a database's information. - Informatie van een database weergeven. + Toon de gegevens van een database. UUID: @@ -7934,7 +7137,7 @@ Wil je deze overschrijven? Maximum password reuse - Maximaal hergebruik van wachtwoorden + Maximaal wachtwoordherbruik Number of short passwords @@ -7956,273 +7159,6 @@ Wil je deze overschrijven? %1 characters %1 tekens - - Word count for the diceware passphrase. - Aantal woorden voor de Diceware wachtwoordzin. - - - count - CLI parameter - aantal - - - Wordlist for the diceware generator. -[Default: EFF English] - Woordenlijst voor de Diceware-generator. -[Standaard: EFF Engels] - - - Generate a new random diceware passphrase. - Genereer een nieuwe willekeurige Diceware wachtwoordzin - - - Invalid word count %1 - Ongeldig aantal woorden %1 - - - Title for the entry. - Titel van dit item. - - - title - titel - - - Edit an entry. - Een item bewerken. - - - Path of the entry to edit. - Pad van het te bewerken item. - - - Not changing any field for entry %1. - Geen enkel veld wijzigen voor item %1. - - - Enter new password for entry: - Voer nieuw wachtwoord in voor item: - - - Successfully edited entry %1. - Item %1 is aangepast. - - - Perform advanced analysis on the password. - Geavanceerde analyse op het wachtwoord uitvoeren. - - - Password for which to estimate the entropy. - Wachtwoord om de entropie te schatten. - - - Estimate the entropy of a password. - De entropie van een wachtwoord inschatten. - - - 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: Brute kracht - - - Type: Dictionary - Type: Woordenboek - - - Type: Dict+Leet - Type: Woordenboek + Leet - - - Type: User Words - Type: Gebruikerswoorden - - - Type: User+Leet - Type: Gebruikerswoorden + Leet - - - Type: Repeated - Type: Herhaald - - - Type: Sequence - Type: Reeks - - - Type: Spatial - Type: Ruimtelijk - - - Type: Date - Type: Datum - - - Type: Bruteforce(Rep) - Type: Brute kracht (herh) - - - Type: Dictionary(Rep) - Type: Woordenboek (herh) - - - Type: Dict+Leet(Rep) - Type: Woordenboek + Leet (herh) - - - Type: User Words(Rep) - Type: Gebruikerswoorden (herh) - - - Type: User+Leet(Rep) - Type: Gebruikerswoorden + Leet (herh) - - - Type: Repeated(Rep) - Type: Herhaald (herh) - - - Type: Sequence(Rep) - Type: Reeks (herh) - - - Type: Spatial(Rep) - Type: Ruimtelijk (herh) - - - Type: Date(Rep) - Type: Datum (herh) - - - Type: Unknown (%1) - Type: Onbekend (%1) - - - Entropy %1 (%2) - Entropie %1 (%2) - - - *** Password length (%1) != sum of length of parts (%2) *** - *** Wachtwoordlengte (%1) ! = som van de lengte van de onderdelen (%2) *** - - - Exit interactive mode. - Interactieve modus afsluiten. - - - Exports the content of a database to standard output in the specified format. - Exporteert de inhoud van een database naar standaarduitvoer in de opgegeven indeling. - - - Unable to export database to XML: %1 - Kan de database niet exporteren naar XML: %1 - - - Unsupported format %1 - Niet-ondersteund formaat %1 - - - Length of the generated password - Lengte van het gegenereerde wachtwoord - - - length - lengte - - - Use lowercase characters - Kleine letters gebruiken - - - Use uppercase characters - Hoofdletters gebruiken - - - Use numbers - Cijfers gebruiken. - - - Use special characters - Speciale tekens gebruiken - - - Use extended ASCII - Uitgebreide ASCII-tekens gebruiken - - - Exclude character set - Tekenset uitsluiten - - - chars - tekens - - - Use custom character set - Aangepaste tekenset gebruiken - - - Exclude similar looking characters - Op elkaar lijkende tekens uitsluiten - - - Include characters from every selected group - Tekens uit iedere geslecteerde groep opnemen - - - Generate a new random password. - Genereer een willekeurig wachtwoord - - - Invalid password length %1 - Ongeldige wachtwoordlengte %1 - - - Invalid password generator after applying all options - Ongeldige wachtwoordgenerator na toepassing van alle opties - - - Display command help. - Toon helptekst voor opdracht. - - - Available commands: - Beschikbare opdrachten: - - - Import the contents of an XML database. - Importeer de inhoud van een XML-database. - - - Path of the XML database export. - Pad van de XML-database export. - - - Path of the new database. - Pad van de nieuwe database. - - - Unable to import XML database: %1 - Kan XML-database niet importeren: %1 - - - Successfully imported database. - Database is geïmporteerd. - Unknown command %1 Onbekende opdracht %1 @@ -8259,7 +7195,7 @@ Beschikbare opdrachten: List database entries. - Database-items opsommen. + Lijst van database-items. Path of the group to list. Default is / @@ -8271,23 +7207,23 @@ Beschikbare opdrachten: Use the same credentials for both database files. - Gebruik dezelfde inloggegevens voor beide databasebestanden. + Gebruik dezelfde gegevens voor beide gegevensbestanden. Key file of the database to merge from. - Sleutelbestand van de database om uit samen te voegen. + Sleutelbestand van gegevensbestand om samen te voegen. Deactivate password key for the database to merge from. - Deactiveer de wachtwoordsleutel voor de database om uit samen te voegen. + Deactiveer de wachtwoordsleutel voor de database waaruit je wil samenvoegen. Only print the changes detected by the merge operation. - Druk alleen de wijzigingen af die zijn gedetecteerd door de samenvoegbewerking. + Alleen de wijzigingen afdrukken die zijn gedetecteerd door de samenvoegbewerking. Yubikey slot for the second database. - YubiKey-positie voor de tweede database. + YubiKey positie voor de tweede database. slot @@ -8313,11 +7249,11 @@ Beschikbare opdrachten: Successfully merged %1 into %2. - %1 is toegevoegd aan %2. + %1 en %2 zijn samengevoegd. Database was not modified by merge operation. - Database is niet gewijzigd door samenvoeging. + Database werd niet gewijzigd door het samenvoegen. Moves an entry to a new group. @@ -8345,7 +7281,7 @@ Beschikbare opdrachten: Open a database. - Open een database. + Open een gegevensbestand. Path of the entry to remove. @@ -8369,7 +7305,7 @@ Beschikbare opdrachten: Cannot remove root group from database. - Kan de hoofdgroep niet uit de database verwijderen. + Kan de hoofdgroep niet verwijderen uit de database. Successfully recycled group %1. @@ -8389,19 +7325,15 @@ Beschikbare opdrachten: Show the entry's current TOTP. - De huidige TOTP van het item weergeven. + Toon de huidige TOTP van het item. Show the protected attributes in clear text. - De beschermde kenmerken in tekst weergeven. - - - Show all the attributes of the entry. - Alle kenmerken van het item weergeven. + Toon de beschermde kenmerken in tekst. Show the attachments of the entry. - De bijlagen van het item weergeven. + Toon de bijlagen van het 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. @@ -8413,11 +7345,11 @@ Beschikbare opdrachten: Show an entry's information. - Informatie over een item weergeven. + Toon de informatie die hoort bij een item. Name of the entry to show. - Naam van het weer te geven item. + Naam van het item dat getoond moet worden. ERROR: unknown attribute %1. @@ -8433,23 +7365,23 @@ Beschikbare opdrachten: Failed to open database file %1: not found - Kan databasebestand %1 niet openen: niet gevonden + Kan het databasebestand %1 niet openen: niet gevonden Failed to open database file %1: not a plain file - Kan databasebestand %1 niet openen: geen normaal bestand + Kan het databasebestand %1 niet openen: geen gewoon bestand Failed to open database file %1: not readable - Kan databasebestand %1 niet openen: niet leesbaar + Kan het databasebestand %1 niet openen: niet leesbaar Enter password to unlock %1: - Voer het wachtwoord in om %1 te ontgrendelen: + Geef het wachtwoord om %1 te ontgrendelen: Failed to load key file %1: %2 - Kan sleutelbestand %1 niet laden: %2 + Er ging iets fout bij het laden van sleutelbestand %1: %2 WARNING: You are using an old key file format which KeePassXC may @@ -8457,21 +7389,17 @@ stop supporting in the future. Please consider generating a new key file. WAARSCHUWING: Je gebruikt een oud sleutelbestandsformaat dat KeePassXC -in de toekomst mogelijk niet meer ondersteunt. +in de toekomst mogelijk niet meer kan ondersteunen. Overweeg om een nieuw sleutelbestand te genereren. Invalid YubiKey slot %1 - Ongeldige YubiKey-positie %1 + Ongeldige YubiKey positie %1 Invalid YubiKey serial %1 - Ongeldig YubiKey-nummer %1 - - - Please present or touch your YubiKey to continue. - Plaats je YubiKey of druk er op om door te gaan. + Ongeldig YubiKey nummer %1 Enter password to encrypt database (optional): @@ -8483,15 +7411,15 @@ Overweeg om een nieuw sleutelbestand te genereren. Repeat password: - Wachtwoord herhalen: + Herhaal wachtwoord: Error: Passwords do not match. - Fout: Wachtwoorden komen niet overeen. + Fout: wachtwoorden komen niet overeen. No program defined for clipboard manipulation - Geen programma ingesteld voor manipulatie van klembord + Geen programma ingesteld voor klembord manipulatie All clipping programs failed. Tried %1 @@ -8509,7 +7437,7 @@ Overweeg om een nieuw sleutelbestand te genereren. HIBP file, line %1: parse error - HIBP-bestand, regel %1: verwerkingsfout + HIBP-bestand, regel %1: fout bij interpreteren To use okon, you must provide a post-processed file (e.g. file.okon) @@ -8533,7 +7461,7 @@ Overweeg om een nieuw sleutelbestand te genereren. Password entropy is %1 bits - Entropie van wachtwoord is %1 bits + Wachtwoord-entropie is %1 bits Weak password @@ -8565,7 +7493,7 @@ Overweeg om een nieuw sleutelbestand te genereren. Password expires in %1 day(s) - Wachtwoord verloopt over %1 dagWachtwoord verloopt over %1 dagen + Wachtwoord verloopt in %1 dag(en)Wachtwoord verloopt in %1 dag(en) Password will expire soon @@ -8573,15 +7501,15 @@ Overweeg om een nieuw sleutelbestand te genereren. Version %1 - Version %1 + Versie %1 Build Type: %1 - Build Type: %1 + Bouwtype: %1 Revision: %1 - Revision: %1 + Revisie: %1 Distribution: %1 @@ -8589,23 +7517,23 @@ Overweeg om een nieuw sleutelbestand te genereren. Debugging mode is disabled. - Debugging mode is disabled. + De foutopsporingsmodus is uitgeschakeld. Debugging mode is enabled. - Debugging mode is enabled. + De foutopsporingsmodus is ingeschakeld. Operating system: %1 CPU architecture: %2 Kernel: %3 %4 - Operating system: %1 -CPU architecture: %2 -Kernel: %3 %4 + Besturingssysteem: %1 +CPU-architectuur: %2 +Kernelversie: %3 %4 Auto-Type - Automatisch invullen + Auto-type SSH Agent @@ -8625,7 +7553,7 @@ Kernel: %3 %4 Secret Service Integration - Integratie met Secret Service + Integratie van geheime diensten None @@ -8633,27 +7561,27 @@ Kernel: %3 %4 Enabled extensions: - Enabled extensions: + Geactiveerde extensies: over %1 year(s) - meer dan %1 jaarmeer dan %1 jaren + meer dan %1 jaarmeer dan %1 jaar about %1 month(s) - ongeveer %1 maandongeveer %1 maanden + ongeveer %1 maand(en)ongeveer %1 maand(en) %1 week(s) - %1 week%1 weken + %1 week(en)%1 week(en) %1 day(s) - %1 dag%1 dagen + %1 dag(en)%1 dag(en) %1 hour(s) - %1 uur%1 uren + %1 uur%1 uur %1 minute(s) @@ -8665,7 +7593,7 @@ Kernel: %3 %4 Cryptographic libraries: - Cryptographic libraries: + Cryptografische bibliotheken: AES (%1 rounds) @@ -8673,11 +7601,11 @@ Kernel: %3 %4 Argon2%1 (%2 rounds, %3 KB) - Argon2%1 (%2 iteraties, %3 KB) + Argon2%1 (%2 cycli, %3 KB) SymmetricCipher::init: Invalid cipher mode. - SymmetricCipher::init: Ongeldige versleutelingsmodus. + SymmetricCipher::init: Ongeldige cijfermodus. SymmetricCipher::init: Invalid IV size of %1 for %2. @@ -8685,7 +7613,7 @@ Kernel: %3 %4 Cipher not initialized prior to use. - Versleuteling niet geïnitialiseerd voor gebruik. + Codering niet geïnitialiseerd voor gebruik. Cannot process 0 length data. @@ -8711,6 +7639,18 @@ Kernel: %3 %4 file empty leeg bestand + + malformed string + misvormde tekenreeks + + + missing closing quote + afsluitend aanhalingsteken ontbreekt + + + %1: (row, col) %2,%3 + %1: (rij, col) %2,%3 + AES 256-bit AES 256-bit @@ -8741,15 +7681,15 @@ Kernel: %3 %4 Existing single-instance lock file is invalid. Launching new instance. - Het bestaande vergrendelingsbestand voor één-exemplaarmodus is niet geldig. Een nieuw exemplaar wordt gestart. + Het bestaande single-instance vergrendelingsbestand is niet geldig. Een nieuwe instantie wordt gestart. The lock file could not be created. Single-instance mode disabled. - Het vergrendelingsbestand kon niet worden aangemaakt. Eén-exemplaarmodus uitgeschakeld. + Het vergrendelingsbestand kon niet worden aangemaakt. Single-instance mode uitgeschakeld. Clearing the clipboard in %1 second(s)… - Klembord wissen na %1 seconde…Klembord wissen na %1 seconden… + Het klembord wordt over %1 seconde gewist...Het klembord wordt over %1 seconden gewist... Group @@ -8757,7 +7697,7 @@ Kernel: %3 %4 Title - Titel + Naam Username @@ -8799,27 +7739,27 @@ Kernel: %3 %4 Do you really want to delete the entry "%1" for good? - Wil je item "%1" voorgoed verwijderen? + Weet je zeker dat je item "%1" definitief wil verwijderen? Do you really want to delete %n entry(s) for good? - Wil je %n item voorgoed verwijderen?Wil je %n items voorgoed verwijderen? + Wilt u %n-item(s) echt voorgoed verwijderen?Wil je %n item(s) voorgoed verwijderen? Delete entry(s)? - Item verwijderen?Items verwijderen? + Item(s) verwijderen?Item(s) verwijderen? Do you really want to move entry "%1" to the recycle bin? - Wil je item "%1" naar de prullenbak verplaatsen? + Weet je zeker dat je item "%1" naar de prullenbak wil verplaatsen? Do you really want to move %n entry(s) to the recycle bin? - Wil je %n item naar de prullenbak verplaatsen?Wil je %n items naar de prullenbak verplaatsen? + Wilt u %n entry(s) echt naar de prullenbak verplaatsen?Wil je %n item(s) echt naar de prullenbak verplaatsen? Move entry(s) to recycle bin? - Item naar prullenbak verplaatsen?Items naar prullenbak verplaatsen? + Invoer(en) verplaatsen naar prullenbak?Item(s) verplaatsen naar prullenbak? Replace references to entry? @@ -8827,7 +7767,7 @@ Kernel: %3 %4 Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? - Item "%1" heeft %2 referentie. Wil je deze overschrijven met waarden, dit item overslaan of toch verwijderen?Item "%1" heeft %2 referenties. Wil je deze overschrijven met waarden, dit item overslaan of toch verwijderen? + Item "%1" heeft %2 referentie. Wil je de verwijzing vervangen door waarden, dit bericht overslaan of toch verwijderen ?Item "%1" heeft %2 referenties. Wil je de verwijzingen vervangen door waarden, dit bericht overslaan of toch verwijderen ? User name @@ -8855,7 +7795,7 @@ Kernel: %3 %4 Checksum mismatch! Key file may be corrupt. - Controlesom komt niet overeen! Sleutelbestand is mogelijk beschadigd. + Checksum komt niet overeen! Sleutelbestand is mogelijk beschadigd. Unexpected key file data! Key file may be corrupt. @@ -8863,7 +7803,7 @@ Kernel: %3 %4 KeePassXC - cross-platform password manager - KeePassXC - platformonafhankelijk wachtwoordbeheer + KeepassXC - multi-platform wachtwoordbeheerder filenames of the password databases to open (*.kdbx) @@ -8889,17 +7829,21 @@ Kernel: %3 %4 read password of the database from stdin lees wachtwoord van de database uit stdin + + allow app screen recordering and screenshots + Schermafbeeldingen en schermopnamen van de app toestaan + + + Locked databases. + Vergrendelde databases. + Database failed to lock. - Database is niet vergrendeld. + Database kan niet worden vergrendeld. Another instance of KeePassXC is already running. - Er is al een ander exemplaar van KeePassXC actief. - - - KeePassXC is not running. No open database to lock - KeePassXC is niet actief. Geen databank om te vergrendelen. + Een andere instantie van KeePassXC is reeds actief. Fatal error while testing the cryptographic functions. @@ -8933,7 +7877,7 @@ Kernel: %3 %4 Warning: Failed to block screenshot capture on a top-level window. - Waarschuwing: een schermopname van het venster op het hoogste niveau kon niet worden voorkomen! + Waarschuwing: een schermfoto van het venster op het hoogste niveau kon niet worden voorkomen! Invalid Cipher @@ -8944,307 +7888,77 @@ Kernel: %3 %4 Ongeldige KDF - Access to all entries is denied - Toegang tot alle items is geweigerd + Please present or touch your YubiKey to continue. + Biedt of raak de YubiKey aan om door te gaan. - allow screenshots and app recording (Windows/macOS) - Schermopnames toestaan (Windows/macOS) + Show all the attributes of the entry. + Toon de kenmerken van het item. + + + Edit a database. + Bewerk een database. + + + Could not change the database key. + De databasesleutel kan niet worden gewijzigd. + + + Database was not modified. + De database is niet bewerkt. + + + Successfully edited the database. + De database is bewerkt. + + + Loading the new key file failed: %1 + Het nieuwe sleutelbestand kan niet worden geladen: %1 + + + Unset the password for the database. + Wis het databasewachtwoord. + + + Unset the key file for the database. + Wis het databasesleutelbestand. + + + Cannot use %1 and %2 at the same time. + %1 en %2 kunnen niet tegelijkertijd worden gebruikt. + + + Cannot remove all the keys from a database. + Niet alle sleutels kunnen worden gewist. + + + Cannot remove password: The database does not have a password. + Het wachtwoord kan niet worden gewist omdat er geen wachtwoord is. + + + Cannot remove file key: The database does not have a file key. + Het sleutelbestand kan niet worden gewist omdat er geen wachtwoord is. + + + Found unexpected Key type %1 + Onverwacht sleuteltype aangetroffen: ‘%1’ Set the key file for the database. -This option is deprecated, use --set-key-file instead. - Stel het sleutelbestand voor de database in. -Deze optie is verouderd, gebruik in plaats daarvan --set-key-file. +This options is deprecated, use --set-key-file instead. + Stel het sleutelbestand van de database in. +Let op: deze optie is verouderd, gebruik --set-key-file - Databases have been locked. - Databases zijn vergrendelen. - - - Attestation not supported - Getuigenis niet ondersteund - - - Credential is excluded - Inloggegevens zijn uitgesloten - - - Passkeys request canceled - Passkey-verzoek geannuleerd - - - Invalid user verification - Ongeldige gebruikersverificatie - - - Empty public key - Lege openbare sleutel - - - Invalid URL provided - Ongeldige URL opgegeven - - - Passkeys - Passkeys - - - AES initialization failed - AES-initialisatie mislukt - - - AES encrypt failed - AES-versleuteling mislukt - - - Failed to store in Linux Keyring - Opslaan in Linux-sleutelbos mislukt - - - Polkit returned an error: %1 - Polkit heeft een fout gemeld: %1 - - - Could not locate key in keyring - Geen sleutel aangetroffen in sleutelbos - - - Could not read key in keyring - Lezen van sleutel uit sleutelbos mislukt - - - AES decrypt failed - AES-ontsleuteling mislukt - - - No Polkit authentication agent was available - Er is geen Polkit-agent beschikbaar - - - Polkit authorization failed - Polkit-autorisatie mislukt - - - No Quick Unlock provider is available - Er is geen snelle-ontgrendelingsdienst beschikbaar - - - Failed to init KeePassXC crypto. - KeePassXC-crypto is niet geinitiëerd. - - - Failed to encrypt key data. - Sleutelgegevens zijn niet versleuteld. - - - Failed to get Windows Hello credential. - Geen Windows Hello-referenties verkregen. - - - Failed to decrypt key data. - Sleutelgegevens zijn niet gedecodeerd. - - - Origin is empty or not allowed - De oorsprong is leeg of niet toegestaan - - - Effective domain is not a valid domain - Effectief domein is geen geldig domein - - - Origin and RP ID do not match - Oorsprong en RP ID komen niet overeen - - - No supported algorithms were provided - Er zijn geen ondersteunde algoritmes verstrekt - - - Wait for timer to expire - Wacht tot de timer verloopt - - - Challenge is shorter than required minimum length - De challenge is korter dan de vereiste minimale lengte - - - user.id does not match the required length - user.id voldoet niet aan de vereiste lengte - - - Favorite - Tag for favorite entries - Favoriet - - - File does not exist. - Bestand bestaat niet. - - - Cannot open file: %1 - Kan bestand niet openen: %1 - - - Cannot parse file: %1 at position %2 - Kan bestand %1 niet verwerken op positie %2 - - - Failed to decrypt json file: %1 - Kon JSON-bestand niet decoderen: %1 - - - Invalid encKeyValidation field - Ongeldig encKeyValidation-veld - - - Invalid cipher list within encKeyValidation field - Ongeldige versleutelingslijst in encKeyValidation-veld - - - Wrong password - Incorrect wachtwoord - - - Invalid encrypted data field - Ongeldig versleuteld gegevensveld - - - Invalid cipher list within encrypted data field - Ongeldige versleutelingslijst in versleuteld gegevensveld - - - Cannot initialize cipher - Kan versleuteling niet initialiseren - - - Cannot decrypt data - Kan gegevens niet decoderen - - - Bitwarden Import - Bitwarden-import - - - Archived - Tag for archived entries - Gearchiveerd - - - Invalid 1PUX file format: Not a valid ZIP file. - Ongeldig 1PUX bestandsformaat: Geen geldig ZIP-bestand. - - - Invalid 1PUX file format: Missing export.data - Ongeldige 1PUX bestandsformaat: Ontbrekende export.data - - - 1Password Import - 1Password-import - - - Enter Shortcut - Sneltoets invoeren - - - Action - Actie - - - Shortcuts - Sneltoetsen - - - Unknown passkeys error - Onbekende fout met passkey - - - Invalid KDF iterations, cannot decrypt json file - Ongeldige KDF-iteraties. Kan json-bestand niet decoderen - - - Unsupported format, ensure your Bitwarden export is password-protected - Niet-ondersteund formaat. Zorg ervoor dat de Bitwarden-export met een wachtwoord is beveiligd - - - Only PBKDF and Argon2 are supported, cannot decrypt json file - Alleen PBKDF en Argon2 worden ondersteund. Kan het json-bestand niet decoderen - - - Reset Shortcuts - Sneltoetsen opnieuw instellen - - - Double click an action to change its shortcut - Dubbelklik op een actie om de sneltoets te wijzigen - - - Filter... - Filteren… - - - Shortcut Conflict - Sneltoetsenconflict - - - Shortcut %1 conflicts with '%2'. Overwrite shortcut? - Sneltoets %1 conflicteert met '%2'. Sneltoets overschrijven? - - - Cannot generate valid passphrases because the wordlist is too short - Kan geen geldige wachtwoordzinnen genereren omdat de woordenlijst te kort is - - - Encrypted files are not supported. - Versleutelde bestanden worden niet ondersteund - - - Proton Pass Import - Proton Pass Import - - - Delete plugin data? - Plugin-gegevens verwijderen? - - - Delete plugin data from Entry(s)? - Plugin-gegevens uit item verwijderen?Plugin-gegevens uit items verwijderen? - - - Passkey - Passkey - - - Format to use when exporting. Available choices are 'xml', 'csv' or 'html'. Defaults to 'xml'. - Toe te passen formaat bij het exporteren. Beschikbare keuzes zijn 'xml', 'csv' of 'html'. Standaard ingesteld op 'xml'. - - - start minimized to the system tray - start geminimaliseerd in het systeemvak - - - malformed string, possible unescaped delimiter - misvormde tekenreeks, mogelijk niet-verwerkt scheidingsteken - - - missing closing delimiter - afsluitend scheidingsteken ontbreekt - - - %1, row: %2, column: %3 - %1, rij: %2, kolom: %3 - - - Tags - Labels + KeePassXC is not running. No open database to lock + KeePassXC is niet actief, dus er is geen databank om te vergrendelen. QtIOCompressor Internal zlib error when compressing: - Interne zlib-fout bij comprimeren: + Interne fout in zlib bij inpakken: Error writing to underlying device: @@ -9260,64 +7974,45 @@ Deze optie is verouderd, gebruik in plaats daarvan --set-key-file. Internal zlib error when decompressing: - Interne zlib-fout bij decomprimeren: + Interne fout in zlib bij uitpakken: QtIOCompressor::open The gzip format not supported in this version of zlib. - Het gzip-formaat wordt niet ondersteund in deze versie van zlib. + Gzip wordt niet ondersteund in deze versie van zlib. Internal zlib error: - Interne zlib-fout: - - - - RemoteHandler - - Command `%1` did not finish in time. Process was killed. - Opdracht `%1` was niet op tijd klaar. Proces is afgebroken. - - - Failed to upload merged database. Command `%1` did not finish in time. Process was killed. - Kan samengevoegde database niet uploaden. Opdracht `%1` was niet op tijd klaar. Proces is afgebroken. - - - Invalid download parameters provided. - Ongeldige downloadparameters opgegeven. - - - Command `%1` failed to download database. - Opdracht `%1` heeft de database niet gedownload. - - - Invalid database pointer or upload parameters provided. - Ongeldige database-verwijzing of uploadparameters opgegeven. - - - Command `%1` exited with status code: %2 - Opdracht `%1` is afgesloten met statuscode: %2 - - - Failed to upload merged database. Command `%1` exited with status code: %2 - Kan samengevoegde database niet uploaden. Opdracht `%1` is afgesloten met statuscode: %2 + Interne fout in zlib: ReportsWidgetBrowserStatistics + + Exclude expired entries from the report + Verlopen items uitsluiten van het rapport + + + Show only entries which have URL set + Alleen vermeldingen weergeven waarvoor de URL is ingesteld + + + Show only entries which have browser settings in custom data + Alleen vermeldingen weergeven met browserinstellingen in aangepaste gegevens + Double-click entries to edit. Dubbelklik items om deze te bewerken. List of entry URLs - Lijst met item-URL's + Lijst met vermeldings-URL's Entry has no URLs set - Item heeft geen URL + Item heeft geen URL ingesteld Allowed URLs @@ -9341,7 +8036,7 @@ Deze optie is verouderd, gebruik in plaats daarvan --set-key-file. Please wait, browser statistics is being calculated… - Even geduld, browserstatistieken worden verzameld… + Een ogenblik geduld, browserstatistieken worden verzameld... No entries with a URL, or none has browser extension settings saved. @@ -9349,7 +8044,7 @@ Deze optie is verouderd, gebruik in plaats daarvan --set-key-file. Title - Titel + Naam Path @@ -9361,62 +8056,53 @@ Deze optie is verouderd, gebruik in plaats daarvan --set-key-file. Edit Entry… - Item bewerken… + Item bewerken... Delete Entry(s)… - Item verwijderen…Items verwijderen… + Item(s) verwijderen...Item(s) verwijderen... Exclude from reports Uitsluiten van rapportage - - Expire Entry(s)… - Item laten verlopen…Items laten verlopen… - - - Only show entries that have a URL - Alleen items met een URL weergeven - - - Only show entries that have been explicitly allowed or denied - Alleen items weergeven die expliciet zijn toegestaan of geweigerd - - - Show expired entries - Verlopen items weergeven - - - (Expired) - (Verlopen) - - - Delete plugin data from Entry(s)… - Plugin-gegevens uit item verwijderen…Plugin-gegevens uit items verwijderen… - ReportsWidgetHealthcheck - Show expired entries - Verlopen items weergeven + Exclude expired entries from the report + Verlopen items uitsluiten van het rapport - (Expired) - (Verlopen) + Also show entries that have been excluded from reports + Toon ook vermeldingen die zijn uitgesloten van rapportage Hover over reason to show additional details. Double-click entries to edit. - Positioneer de muis boven een item om aanvullende details weer te geven. Dubbelklik om het te bewerken. + Positioneer de muis boven een item om aanvullende details weer te geven. Dubbelklik een items om het te bewerken. + + + Bad + Password quality + Slecht Bad — password must be changed Slecht — wachtwoord moet worden gewijzigd + + Poor + Password quality + Slecht + Poor — password should be changed - Matig — wachtwoord zou moeten worden gewijzigd + Mager — wachtwoord moet worden gewijzigd + + + Weak + Password quality + Zwak Weak — consider changing the password @@ -9432,7 +8118,7 @@ Deze optie is verouderd, gebruik in plaats daarvan --set-key-file. Please wait, health data is being calculated… - Even geduld, gezondheidsgegevens worden verzameld… + Even geduld, gezondheidsgegevens worden verzameld... Congratulations, everything is healthy! @@ -9440,7 +8126,7 @@ Deze optie is verouderd, gebruik in plaats daarvan --set-key-file. Title - Titel + Naam Path @@ -9456,30 +8142,22 @@ Deze optie is verouderd, gebruik in plaats daarvan --set-key-file. Edit Entry… - Item bewerken… + Item bewerken... Delete Entry(s)… - Item verwijderen…Items verwijderen… + Item verwijderen...Items verwijderen... Exclude from reports Uitsluiten van rapportage - - Expire Entry(s)… - Item laten verlopen…Items laten verlopen… - - - Show entries that have been excluded from reports - Items die zijn uitgesloten van rapporten weergeven - ReportsWidgetHibp CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. - LET OP: Voor deze rapportage wordt informatie verzonden naar de online dienst Have I Been Pwned (HIBP) (https://haveibeenpwned.com). Als je doorgaat, worden je databasewachtwoorden cryptografisch gehasht en worden de eerste vijf tekens van die controlegetallen op veilige wijze verzonden naar deze dienst. Jouw database blijft veilig en kan uit deze informatie niet worden samengesteld. Het aantal wachtwoorden dat je verzendt en je IP-adres worden wel blootgesteld aan deze dienst. + LET OP: Voor deze rapportage wordt informatie verzonden naar de online dienst Have I Been Pwned (HIBP) (https://haveibeenpwned.com). Als je doorgaat, worden je databasewachtwoorden cryptografisch gehasht en worden de eerste vijf tekens van die hashes op veilige wijze verzonden naar deze dienst. Jouw database blijft veilig en kan uit deze informatie niet worden samengesteld. Het aantal wachtwoorden dat je verzendt en je IP-adres worden wel blootgesteld aan deze dienst. Perform Online Analysis @@ -9487,7 +8165,7 @@ Deze optie is verouderd, gebruik in plaats daarvan --set-key-file. Also show entries that have been excluded from reports - Vermeldingen die zijn uitgesloten van rapportage ook weergeven + Toon ook vermeldingen die zijn uitgesloten van rapportage This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. @@ -9495,11 +8173,11 @@ Deze optie is verouderd, gebruik in plaats daarvan --set-key-file. Congratulations, no exposed passwords! - Gefeliciteerd, geen blootgestelde wachtwoorden! + Gefeliciteerd, geen gelekte wachtwoorden! Title - Titel + Naam Path @@ -9507,7 +8185,7 @@ Deze optie is verouderd, gebruik in plaats daarvan --set-key-file. Password exposed… - Wachtwoorden blootgesteld... + Gelekte wachtwoorden... (Excluded) @@ -9520,7 +8198,7 @@ Deze optie is verouderd, gebruik in plaats daarvan --set-key-file. once Password exposure amount - een keer + eenmalig up to 10 times @@ -9550,96 +8228,25 @@ Deze optie is verouderd, gebruik in plaats daarvan --set-key-file. up to a million times Password exposure amount - tot 1 miljoen keer + tot miljoen keer millions of times Password exposure amount - miljoenen keren + miljoen keer Edit Entry… - Item bewerken… + Item bewerken... Delete Entry(s)… - Item verwijderen...Items verwijderen… + Item verwijderen...Items verwijderen... Exclude from reports Uitsluiten van rapportage - - Expire Entry(s)… - Item laten verlopen…Items laten verlopen… - - - - ReportsWidgetPasskeys - - Export - Exporteren - - - Import - Importeren - - - List of entry URLs - Lijst met item-URLs - - - Title - Titel - - - Path - Pad - - - Username - Gebruikersnaam - - - URLs - URLs - - - Edit Entry… - Item bewerken… - - - Delete Entry(s)… - Item verwijderen…Items verwijderen… - - - Relying Party - Vertrouwende partij - - - Show expired entries - Verlopen items weergeven - - - (Expired) - (Verlopen) - - - Export Confirmation - Exporteren bevestigen - - - The passkey file will be vulnerable to theft and unauthorized use, if left unsecured. Are you sure you want to continue? - Het passkey-bestand is kwetsbaar voor diefstal en ongeoorloofd gebruik, als het onbeveiligd blijft. Weet je zeker dat je door wilt gaan? - - - Please wait, list of entries with passkeys is being updated… - Even geduld, de lijst met items met passkeys wordt bijgewerkt… - - - No entries with passkeys. - Geen items met passkeys. - ReportsWidgetStatistics @@ -9657,7 +8264,7 @@ Deze optie is verouderd, gebruik in plaats daarvan --set-key-file. Please wait, database statistics are being calculated… - Even geduld, databasestatistieken worden berekend… + Even geduld, databasestatistieken worden berekend... Database name @@ -9725,11 +8332,11 @@ Deze optie is verouderd, gebruik in plaats daarvan --set-key-file. Maximum password reuse - Maximaal hergebruik van wachtwoorden + Maximaal wachtwoordherbruik Some passwords are used more than three times. Use unique passwords when possible. - Sommige wachtwoorden worden meer dan driemaal gebruikt. Gebruik waar mogelijk unieke wachtwoorden. + Verscheidene wachtwoorden worden meer dan drie keer gebruikt. Gebruik waar mogelijk unieke wachtwoorden. Number of short passwords @@ -9737,7 +8344,7 @@ Deze optie is verouderd, gebruik in plaats daarvan --set-key-file. Recommended minimum password length is at least 8 characters. - De aanbevolen minimale wachtwoordlengte is 8 tekens. + Aangeraden minimumlengte voor wachtwoorden is 8 tekens. Number of weak passwords @@ -9753,7 +8360,7 @@ Deze optie is verouderd, gebruik in plaats daarvan --set-key-file. Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. - Het uitsluiten van items uit rapportage, bijv. omdat al bekend is dat ze een slecht wachtwoord hebben, is niet per se een probleem, maar je moet ze wel in de gaten houden. + Het uitsluiten van vermeldingen uit rapportage, bijv. omdat al bekend is dat ze een slecht wachtwoord hebben, is niet per se een probleem, maar je moet ze wel in de gaten houden. Average password length @@ -9765,7 +8372,7 @@ Deze optie is verouderd, gebruik in plaats daarvan --set-key-file. Average password length is less than ten characters. Longer passwords provide more security. - Gemiddeld wachtwoordlengte is minder dan tien tekens. Langere wachtwoorden bieden meer beveiliging. + Gemiddeld wachtwoordlengte is minder dan tien tekens. Langere wachtwoorden bieden meer veiligheid. @@ -9784,15 +8391,15 @@ Deze optie is verouderd, gebruik in plaats daarvan --set-key-file. Key identity ownership conflict. Refusing to add. - Conflict van identiteitseigendom. Toevoeging geweigerd. + Conflict tussen sleutelidentiteit. Geweigerd. Agent refused this identity. Possible reasons include: - Agent weigerde deze identiteit. Mogelijke redenen zijn onder meer: + Agent weigerde deze identiteit. Mogelijke redenen zijn onder andere: The key has already been added. - De sleutel is al toegevoegd. + De sleutel was al toegevoegd. Restricted lifetime is not supported by the agent (check options). @@ -9814,24 +8421,16 @@ Deze optie is verouderd, gebruik in plaats daarvan --set-key-file. No agent running, cannot list identities. Geen agent actief, kan geen identiteiten opsommen. - - Failed to remove all SSH identities from agent. - Niet alle SSH-identiteiten van de agent verwijderd. - - - All SSH identities removed from agent. - Alle SSH-identiteiten verwijderd van agent. - SearchHelpWidget Search Help - Hulp bij zoeken + Zoek hulp Search terms are as follows: [modifiers][field:]["]term["] - Zoektermen zijn als volgt: [modificatoren][veld:]["]term["] + Zoektermen zijn als volgt: [parameters][veld:]["]term["] Every search term must match (ie, logical AND) @@ -9839,7 +8438,7 @@ Deze optie is verouderd, gebruik in plaats daarvan --set-key-file. Modifiers - Modificatoren + Modifiers exclude term from results @@ -9886,16 +8485,12 @@ Deze optie is verouderd, gebruik in plaats daarvan --set-key-file. Search Help - Hulp bij zoeken - - - Save Search - Zoekopdracht opslaan + Zoek hulp Search (%1)… Search placeholder text, %1 is the keyboard shortcut - Zoeken (%1)… + Zoeken (%1)... Case sensitive @@ -9903,7 +8498,11 @@ Deze optie is verouderd, gebruik in plaats daarvan --set-key-file. Limit search to selected group - Zoekopdrachten beperken tot geselecteerde groep + Beperk het zoeken tot de geselecteerde groep + + + Save Search + Zoekopdracht opslaan @@ -9948,7 +8547,7 @@ Deze optie is verouderd, gebruik in plaats daarvan --set-key-file. Enable KeepassXC Freedesktop.org Secret Service integration - De integratie van KeepassXC met Freedesktop.org Secret Service inschakelen + De integratie van KeepassXC Freedesktop.org Secret service inschakelen General @@ -9956,7 +8555,7 @@ Deze optie is verouderd, gebruik in plaats daarvan --set-key-file. Show notification when passwords are retrieved by clients - Melding weergeven wanneer wachtwoorden door clients worden opgehaald + Melding weergeven wanneer wachtwoorden worden opgehaald door clients <html><head/><body><p>If enabled, any attempt to read a password must be confirmed. Otherwise, clients can read passwords without confirmation when the database is unlocked.</p><p>This option only covers the access to the password of an entry. Clients can always enumerate the items of exposed databases and query their attributes.</p></body></html> @@ -9966,10 +8565,31 @@ Deze optie is verouderd, gebruik in plaats daarvan --set-key-file. Confirm when passwords are retrieved by clients Bevestigen wanneer wachtwoorden worden opgehaald door clients + + <html><head/><body><p><span style=" + font-family:'-apple-system','BlinkMacSystemFont','Segoe UI','Helvetica','Arial','sans-serif','Apple Color + Emoji','Segoe UI Emoji'; font-size:14px; color:#24292e; background-color:#ffffff;">This setting does + not override disabling recycle bin prompts</span></p></body></html> + + <html><head/><body><p><span style=" font-family:'-apple-system','BlinkMacSystemFont','Segoe UI','Helvetica','Arial','sans-serif','Apple Color Emoji','Segoe UI Emoji'; font-size:14px; color:#24292e; background-color:#ffffff;">Deze instelling + overschrijft niet de uitschakeling van prullenbak-meldingen</span></p></body></html> + Confirm when clients request entry deletion Bevestigen wanneer clients de verwijdering van items aanvragen + + <html><head/><body><p>This improves compatibility with certain applications + which search for password without unlocking the database first.</p><p>But enabling this may also + crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a + different value set in applications.)</p></body></html> + + <html><head/><body><p>Dit verbetert de compatibiliteit met bepaalde toepassingen + die zoeken naar wachtwoorden zonder eerst de database te ontgrendelen.</p><p>Maar dit kan ook leiden tot + crashes van de client als de database niet binnen een bepaalde time-out kan worden ontgrendeld. (Meestal 25s, maar kan een + verschillende waarden die in toepassingen zijn ingesteld.)</p></body></html> + + Prompt to unlock database before searching Vraag voor het zoeken om ontgrendeling van de database @@ -9994,20 +8614,12 @@ Deze optie is verouderd, gebruik in plaats daarvan --set-key-file. Save current changes to activate the plugin and enable editing of this section. Sla huidige wijzigingen op om de plug-in te activeren en het bewerken van deze sectie mogelijk te maken. - - <html><head/><body><p>This setting does not override disabling recycle bin prompts </p></body></html> - <html><head/><body><p>Deze instelling heeft geen voorrang op het uitschakelen van de prompts voor de prullenbak </p></body></html> - - - <html><head/><body><p>This improves compatibility with certain applications which search for password without unlocking the database first.</p><p>But enabling this may also crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a different value set in applications.) </p></body></html> - <html><head/><body><p>Dit verbetert de compatibiliteit met bepaalde applicaties die naar een wachtwoord zoeken zonder eerst de database te ontgrendelen.</p><p> Maar door dit in te schakelen, kan de client ook crashen als de database niet binnen een bepaalde time-out kan worden ontgrendeld. (Meestal 25s, maar kan een andere waarde zijn die is ingesteld in de toepassing.)</p></body></html> - SettingsWidgetKeeShare Active - Actief + Activering Allow KeeShare imports @@ -10019,7 +8631,7 @@ Deze optie is verouderd, gebruik in plaats daarvan --set-key-file. Allow KeeShare exports - Exporteren van KeeShare toestaan + Sta KeeShare exports toe Allow export @@ -10051,7 +8663,7 @@ Deze optie is verouderd, gebruik in plaats daarvan --set-key-file. Signer name field - Ondertekenaar naam veld + Ondertekenaar naamveld Fingerprint @@ -10110,20 +8722,20 @@ Deze optie is verouderd, gebruik in plaats daarvan --set-key-file. TagModel - Clear Search - Zoekopdracht wissen + Expired + Verlopen + + + Weak Passwords + Zwakke wachtwoorden All Entries Alle items - Expired - Verlopen items - - - Weak Passwords - Zwakke wachtwoorden + Clear Search + Zoekopdracht wissen @@ -10138,11 +8750,11 @@ Deze optie is verouderd, gebruik in plaats daarvan --set-key-file. Confirm Remove Tag - Verwijderen van label bevestigen + Verwijderen bevestigen Remove tag "%1" from all entries in this database? - Label “%1” van alle items wilt verwijderen? + Weet je zeker dat je het label “%1” van alle items wilt verwijderen? @@ -10157,7 +8769,7 @@ Deze optie is verouderd, gebruik in plaats daarvan --set-key-file. Expires in <b>%n</b> second(s) - Verloopt in <b>%n</b> secondeVerloopt over <b>%n</b> seconden + Verloopt in <b>%n</b> seconde(n)Verloopt over <b>%n</b> seconde(n) @@ -10173,7 +8785,7 @@ Deze optie is verouderd, gebruik in plaats daarvan --set-key-file. There was an error creating the QR code. - Er is een fout opgetreden bij het aanmaken van de QR-code. + Er ging iets fout bij het maken van de QR-code. Closing in %1 seconds. @@ -10184,7 +8796,7 @@ Deze optie is verouderd, gebruik in plaats daarvan --set-key-file. TotpSetupDialog Setup TOTP - TOTP instellen + TOTP-instellen Secret Key: @@ -10200,11 +8812,11 @@ Deze optie is verouderd, gebruik in plaats daarvan --set-key-file. Default settings (RFC 6238) - Standaard-instellingen (RFC 6238) + Standaard instellingen (RFC 6238) Steam® settings - Steam®-instellingen + Steam® instellingen Custom settings: @@ -10224,7 +8836,7 @@ Deze optie is verouderd, gebruik in plaats daarvan --set-key-file. Time step field - Tijdsinterval veld + Tijd-stap veld sec @@ -10251,7 +8863,7 @@ Voorbeeld: JBSWY3DPEHPK3PXP Confirm Remove TOTP Settings - Verwijderen van TOTP-instellingen bevestigen + Bevestig het verwijderen van de TOTP instellingen Are you sure you want to delete TOTP settings for this entry? @@ -10293,14 +8905,34 @@ Voorbeeld: JBSWY3DPEHPK3PXP You have the latest version of KeePassXC - Je hebt de meest recente versie van KeePassXC + Je hebt de laatste versie van KeePassXC WelcomeWidget Start storing your passwords securely in a KeePassXC database - Sla je wachtwoorden veilig op in een KeePassXC-database + Sla jouw wachtwoorden veilig op in een KeePassXC-database + + + Create new database + Nieuwe database aanmaken + + + Open existing database + Bestaande database openen + + + Import from KeePass 1 + Importeren vanuit Keepass 1-database + + + Import from 1Password + Importeren vanuit 1Password-kluis + + + Import from CSV + Importeren vanuit CSV-bestand Recent databases @@ -10314,18 +8946,6 @@ Voorbeeld: JBSWY3DPEHPK3PXP Welcome to KeePassXC %1 Welkom bij KeePassXC %1 - - Create Database - Database aanmaken - - - Open Database - Database openen - - - Import File - Bestand importeren - WinUtils @@ -10335,29 +8955,60 @@ Voorbeeld: JBSWY3DPEHPK3PXP Global shortcut already registered to %1 - Algemene sneltoets is al toegekend aan %1 + Globale snelkoppeling is al geregistreerd bij %1 Could not register global shortcut - Algemene sneltoets is niet vastgelegd + Kan algemene snelkoppeling niet registreren + + + + WindowsHello + + Failed to init KeePassXC crypto. + Kan KeePassXC crypto niet initiëren. + + + Failed to encrypt key data. + Sleutelgegevens kunnen niet worden versleuteld. + + + Failed to get Windows Hello credential. + Kan geen Windows Hello-referenties ophalen. + + + Failed to decrypt key data. + Kan sleutelgegevens niet decoderen. YubiKey + + %1 No interface, slot %2 + %1 Geen interface, positie %2 + General: Algemeen: Could not find interface for hardware key with serial number %1. Please connect it to continue. - Geen interface voor hardwaresleutel met serienummer %1. Sluit het aan om door te gaan. + Kan interface voor hardwaresleutel met serienummer %1 niet vinden. Sluit het aan om door te gaan. YubiKeyEditWidget + + Refresh hardware tokens + Hardwaretoken verversen + + + Refresh + Vernieuwen + Hardware key slot selection - Selectie hardwaresleutel-positie + Hardwaresleutel positie selectie Could not find any hardware keys! @@ -10387,63 +9038,55 @@ Voorbeeld: JBSWY3DPEHPK3PXP Challenge-Response set, click to change or remove Challenge-Response ingesteld, klik om te wijzigen of te verwijderen + + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + <p>Als je een <a href="https://www.yubico.com/">YubiKey</a> of <a href="https://onlykey.io">OnlyKey</a> bezit, kun je deze gebruiken voor extra beveiliging.</p><p>De sleutel vereist dat een van zijn posities (slots) wordt geprogrammeerd als <a href="https://www.yubico.com/products/services-software/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + Detecting hardware keys… - Hardwaresleutels detecteren… + Hardwaresleutels detecteren... No hardware keys detected Geen hardwaresleutels gedetecteerd + + + YubiKeyInterface - Refresh hardware keys - Hardwaresleutels vernieuwen - - - <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed with <a href="https://keepassxc.org/docs/#faq-yubikey-howto">Challenge-Response</a>.</p> - <p>Als je <a href="https://www.yubico.com/">YubiKey</a> of <a href="https://onlykey.io">OnlyKey</a> bezit, dan kan je deze gebruiken voor aanvullende beveiliging.</p><p>Een van de positie in de sleutel moet dan worden geprogrammeerd met <a href="https://keepassxc.org/docs/#faq-yubikey-howto">Challenge-Response</a>.</p> - - - Hardware keys found, but no slots are configured - Hardwaresleutels gevonden, echter zonder posities geconfigureerd. + %1 Invalid slot specified - %2 + %1 Ongeldige positie opgegeven - %2 YubiKeyInterfacePCSC + + (PCSC) %1 [%2] Challenge-Response - Slot %3 + (PCSC) %1 [%2] Challenge-Response - Positie %3 + The YubiKey PCSC interface has not been initialized. De YubiKey PCSC-interface is niet geïnitialiseerd. + + Hardware key is currently in use. + Hardwaresleutel is momenteel in gebruik. + Could not find or access hardware key with serial number %1. Please present it to continue. - Hardwaresleutel met serienummer %1 niet gevonden of geopend. Bied deze aan om door te gaan. + Kan hardwaresleutel met serienummer %1 niet vinden of openen. Presenteer de hardwaresleutel om door te gaan. Hardware key is locked or timed out. Unlock or re-present it to continue. - De hardwaresleutel is vergrendeld of er is een time-out. Ontgrendel deze of bied hem opnieuw aan om door te gaan. + De hardwaresleutel is vergrendeld of er is een time-out. Ontgrendel of presenteer het opnieuw om door te gaan. Hardware key was not found or is not configured. - De hardwaresleutel is niet aangetroffen of is niet geconfigureerd. + De hardwaresleutel is niet gevonden of is niet geconfigureerd. Failed to complete a challenge-response, the PCSC error code was: %1 - De challenge-response is niet volbracht. PCSC foutcode: %1 - - - (NFC) %1 [%2] - Slot %3, %4 - YubiKey display fields - (NFC) %1 [%2] - Positie %3, %4 - - - Press - USB Challenge-Response Key interaction request - Drukken - - - Passive - USB Challenge-Response Key no interaction required - Passief + De challenge-response is mislukt, de PCSC fout was: %1 @@ -10452,10 +9095,18 @@ Voorbeeld: JBSWY3DPEHPK3PXP Unknown Onbekend + + (USB) %1 [%2] Configured Slot - %3 + (USB) %1 [%2] Geconfigureerde positie - %3 + + + (USB) %1 [%2] Challenge-Response - Slot %3 - %4 + (USB) %1 [%2] Challenge-Respons - Positie %3 - %4 + Press USB Challenge-Response Key interaction request - Drukken + Druk Passive @@ -10464,15 +9115,19 @@ Voorbeeld: JBSWY3DPEHPK3PXP The YubiKey USB interface has not been initialized. - De YubiKey USB-interface is niet geïnitialiseerd. + De YubiKey USB interface is niet geïnitialiseerd. + + + Hardware key is currently in use. + Hardwaresleutel is momenteel in gebruik. Could not find hardware key with serial number %1. Please plug it in to continue. - Hardwaresleutel met serienummer %1 niet aangetroffen. Sluit deze aan om door te gaan. + Hardwaresleutel met serienummer %1 niet gevonden. Sluit deze aan om door te gaan. Hardware key timed out waiting for user interaction. - Time-out bij de hardwaresleutel in afwachting van gebruikersinteractie. + Er is een time-out opgetreden voor de hardwaresleutel tijdens het wachten op gebruikersinteractie. A USB error occurred when accessing the hardware key: %1 @@ -10480,17 +9135,7 @@ Voorbeeld: JBSWY3DPEHPK3PXP Failed to complete a challenge-response, the specific error was: %1 - De challenge-response is niet volbracht. De specifieke fout was: %1 - - - %1 [%2] - Slot %3 - YubiKey NEO display fields - %1 [%2] - Positie %3 - - - %1 [%2] - Slot %3, %4 - YubiKey display fields - %1 [%2] - Positie %3, %4 + Challenge-response is niet voltooid, de specifieke fout was: %1 \ No newline at end of file diff --git a/share/translations/keepassxc_pl.ts b/share/translations/keepassxc_pl.ts index 55b9e4b0c..314c39603 100644 --- a/share/translations/keepassxc_pl.ts +++ b/share/translations/keepassxc_pl.ts @@ -80,17 +80,17 @@ Details Szczegóły - - Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. - Twoja decyzja zostanie zapamiętana na czas, gdy zarówno klient żądający, jak i KeePassXC będą uruchomione. - Remember Zapamiętaj Allow Selected - Zezwól wybranym + Zezwalaj wybranym + + + Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. + Twoja decyzja zostanie zapamiętana na czas, gdy zarówno klient żądający, jak i KeePassXC będą uruchomione. Deny All && Future @@ -112,7 +112,7 @@ AgentSettingsWidget Enable SSH Agent integration - Włącz integrację z agentem SSH + Włącz integrację agenta SSH Use Pageant @@ -122,10 +122,6 @@ Use OpenSSH Użyj OpenSSH - - Use both agents - Użyj obu agentów - SSH_AUTH_SOCK override Zastąpienie SSH_AUTH_SOCK @@ -154,6 +150,10 @@ SSH Agent connection is working! Połączenie agenta SSH działa! + + Use both agents + Użyj obu agentów + ApplicationSettingsWidget @@ -169,10 +169,6 @@ Security Bezpieczeństwo - - This setting cannot be enabled when minimize on unlock is enabled. - To ustawienie nie może być włączone, gdy włączona jest opcja minimalizacji przy odblokowaniu. - Access error for config file %1 Błąd dostępu pliku konfiguracyjnego %1 @@ -215,51 +211,23 @@ You must restart the application to set the new language. Would you like to restart now? - Musisz uruchomić ponownie aplikację, aby ustawić nowy język. Czy chcesz teraz to zrobić? + Musisz zrestartować aplikację, aby ustawić nowy język. Czy chcesz teraz zrestartować? + + + Reset Settings? + Zresetować ustawienia? + + + Are you sure you want to reset all general and security settings to default? + Czy na pewno chcesz zresetować wszystkie ustawienia ogólne i zabezpieczeń do domyślnych? Select backup storage directory Wybierz katalog przechowywania kopii zapasowych - Confirm Reset - Potwierdź resetowanie - - - Are you sure you want to reset all settings to default? - Czy na pewno chcesz przywrócić wszystkie ustawienia domyślne? - - - Import KeePassXC Settings - Importuj ustawienia KeePassXC - - - Failed to import settings from %1, not a valid settings file. - Nie udało się zaimportować ustawień z %1. To nie jest prawidłowy plik ustawień. - - - Export KeePassXC Settings - Eksportuj ustawienia KeePassXC - - - Small - Mały - - - Normal - Normalny - - - Medium - Średni - - - Large - Duży - - - Custom - Niestandardowy + This setting cannot be enabled when minimize on unlock is enabled. + To ustawienie nie może być włączone, gdy włączona jest opcja minimalizacji przy odblokowaniu. @@ -292,10 +260,6 @@ Remember previously used databases Pamiętaj wcześniej używane bazy danych - - recent files - ostatnie pliki - Load previously open databases on startup Załaduj wcześniej otwarte bazy danych podczas uruchamiania @@ -312,13 +276,32 @@ Include beta releases when checking for updates Uwzględnij wersje beta podczas sprawdzania aktualizacji + + On database unlock, show entries that + Po odblokowaniu bazy danych pokaż wpisy, które + + + have expired + On database unlock, show entries that... + wygasły + + + days + On database unlock, show entries that will expire within %1 days + dni + + + will expire within + On database unlock, show entries that... + wygasną w ciągu + File Management Zarządzanie plikami Automatically save after every change - Automatycznie zapisz po każdej zmianie + Automatycznie zapisuj po każdej zmianie Automatically save when locking database @@ -330,16 +313,28 @@ Automatically reload the database when modified externally - Automatycznie ładuj ponownie bazę danych, gdy zostanie zmodyfikowana zewnętrznie + Automatycznie przeładuj bazę danych, gdy zostanie zmodyfikowana zewnętrznie Backup database file before saving - Utwórz kopię zapasową pliku bazy danych przed zapisaniem + Twórz kopię zapasową pliku bazy danych przed zapisaniem + + + Backup destination + Miejsce docelowe kopii zapasowej + + + Specifies the database backup file location. Occurrences of "{DB_FILENAME}" are replaced with the filename of the saved database without extension. {TIME:<format>} is replaced with the backup time, see https://doc.qt.io/qt-5/qdatetime.html#toString. <format> defaults to format string "dd_MM_yyyy_hh-mm-ss". + Określa lokalizację pliku kopii zapasowej bazy danych. Wystąpienia "{DB_FILENAME}" są zastępowane nazwą pliku zapisanej bazy danych bez rozszerzenia. {TIME:<format>} jest zastępowany czasem kopii zapasowej, zobacz https://doc.qt.io/qt-5/qdatetime.html#toString. <format> to domyślnie ciąg formatu "dd_MM_yyyy_hh-mm-ss". {DB_FILENAME}.old.kdbx {DB_FILENAME}.old.kdbx + + Choose... + Wybierz... + Use alternative saving method (may solve problems with Dropbox, Google Drive, GVFS, etc.) Użyj alternatywnej metody zapisywania (może rozwiązać problemy z usługami: Dropbox, Google Drive, GVFS itp.) @@ -417,10 +412,6 @@ Toolbar button style: Styl przycisków paska narzędzi: - - Show passwords in color - Pokaż hasła w kolorze - Use monospaced font for notes Użyj czcionek o stałej szerokości w notatkach @@ -443,7 +434,7 @@ Hide window to system tray when minimized - Schowaj okno do zasobnika systemowego podczas minimalizacji + Schowaj okno do zasobnika podczas minimalizacji Reset settings to default… @@ -507,69 +498,12 @@ Pamiętaj ostatnio wpisany wpis przez: - On database unlock, show entries that will expire within - Podczas odblokowania bazy danych pokaż wpisy, które wygasną w ciągu + recent files + ostatnie pliki - On database unlock, show entries that will expire within - Podczas odblokowania bazy danych pokaż wpisy, które wygasną w ciągu - - - days - number of days warning for password expiration - dni - - - Destination format: - Format docelowy: - - - <html><head/><body><p><span style=" font-weight:600;">{DB_FILENAME}</span> is replaced with the filename of the saved database without extension</p><p><span style=" font-weight:600;">{TIME:&lt;format&gt;}</span> is replaced with the specified time format (default: dd_MM_yyyy_hh-mm-ss)</p><p>See the User Guide for more details</p></body></html> - <html><head/><body><p><span style=" font-weight:600;">{DB_FILENAME}</span> zostaje zastąpiony nazwą pliku zapisanej bazy danych bez rozszerzenia</p><p><span style=" font-weight:600;">{TIME:&lt;format&gt;}</span> zostaje zastąpiony określonym formatem czasu (domyślnie: dd_MM_yyyy_hh-mm-ss)</p><p>Więcej szczegółów znajdziesz w podręczniku użytkownika</p></body></html> - - - Choose folder... - Wybierz folder... - - - Show confirmation before moving entries to recycle bin - Pokaż potwierdzenie przed przeniesieniem wpisów do kosza - - - Copy data on double clicking field in entry view - Kopiuj dane po dwukrotnym kliknięciu pola w widoku wpisu - - - Show toolbar - Pokaż pasek narzędzi - - - Show the menu bar by pressing the Alt key - Pokaż pasek menu po naciśnięciu klawisza Alt - - - Show menubar - Pokaż pasek menu - - - Import settings… - Importuj ustawienia… - - - Export settings… - Eksportuj ustawienia… - - - Open browser on double clicking URL field in entry view - Otwórz przeglądarkę po dwukrotnym kliknięciu pola adresu URL w widoku wpisu - - - Font size: - Rozmiar czcionki: - - - Font size selection - Wybór rozmiaru czcionki + Show passwords in color + Pokaż hasła w kolorze @@ -624,6 +558,10 @@ Lock databases after minimizing the window Zablokuj bazę danych po zminimalizowaniu okna + + Require password repeat when it is visible + Wymagaj powtórzenia hasła, gdy jest widoczne + Hide passwords when editing them Ukryj hasła podczas ich edycji @@ -636,6 +574,18 @@ 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 + + + Move entries to recycle bin without confirmation + Przenieś wpisy do kosza bez potwierdzenia + + + Enable double click to copy the username/password entry columns + Włącz podwójne kliknięcie, aby kopiować kolumny wpisów nazwy użytkownika i hasła + Privacy Prywatność @@ -648,18 +598,6 @@ Hide TOTP in the entry preview panel Ukryj TOTP w panelu podglądu wpisu - - Lock databases when switching user - Zablokuj bazy danych podczas zmiany użytkownika - - - Lock Options - Opcje blokowania - - - Hide notes in the entry preview panel - Ukryj notatki w panelu podglądu wpisu - AutoType @@ -677,11 +615,11 @@ KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. - KeePassXC wymaga uprawnienia dostępności w celu wykonania podstawowego autowpisywania. Jeśli już udzielono uprawnienia, być może będzie wymagane ponowne uruchomienie KeePassXC. + KeePassXC wymaga uprawnienia Dostępności w celu wykonania autowpisywania na poziomie podstawowym. Jeśli już udzieliłeś uprawnienia, być może będziesz musiał zrestartować KeePassXC. KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. - KeePassXC wymaga uprawnień dostępności i rejestratora ekranu w celu wykonania globalnego autowpisywania. Nagrywanie ekranu jest konieczne, aby użyć tytułu okna do odnajdywania wpisów. Jeśli już udzielono uprawnień, być może będzie wymagane ponowne uruchomienie KeePassXC. + KeePassXC wymaga uprawnień Dostępności i Rejestratora ekranu w celu wykonania globalnego autowpisywania. Nagrywanie ekranu jest konieczne, aby użyć tytułu okna do odnajdywania wpisów. Jeśli już udzieliłeś uprawnień, być może będziesz musiał zrestartować KeePassXC. Invalid entry provided @@ -704,13 +642,27 @@ Wykryto bardzo duże opóźnienie, maksimum to %1: %2 - Entry does not have attribute for PICKCHARS: %1 - Wpis nie ma atrybutu dla PICKCHARS: %1 + Invalid conversion type: %1 + Nieprawidłowy typ konwersji: %1 + + + Invalid conversion syntax: %1 + Nieprawidłowa składnia konwersji: %1 + + + Invalid regular expression syntax %1 +%2 + Nieprawidłowa składnia wyrażenia regularnego %1 +%2 Invalid placeholder: %1 Nieprawidłowy symbol zastępczy: %1 + + Entry does not have attribute for PICKCHARS: %1 + Wpis nie ma atrybutu dla PICKCHARS: %1 + AutoTypeAssociationsModel @@ -752,6 +704,10 @@ AutoTypePlatformX11 + + Trying to send invalid keysym. + Próba wysłania nieprawidłowego keysym. + Sequence aborted: Caps Lock is on Sekwencja przerwana: Caps Lock jest włączony @@ -764,10 +720,6 @@ Unable to get valid keycode for key: Nie można uzyskać prawidłowego keycode'u dla klawisza: - - Trying to send invalid keyboard symbol. - Próba wysłania nieprawidłowego symbolu klawiaturowego. - AutoTypeSelectDialog @@ -777,7 +729,7 @@ Double click a row to perform Auto-Type or find an entry using the search: - Kliknij dwukrotnie wiersz, aby wykonać autowpisywanie, lub znajdź wpis za pomocą wyszukiwania: + Kliknij dwukrotnie wiersz, aby wykonać autowpisywanie lub znajdź wpis za pomocą wyszukiwania: <p>You can use advanced search queries to find any entry in your open databases. The following shortcuts are useful:<br/> @@ -858,11 +810,11 @@ Ctrl+4 - Użyj klawiatury wirtualnej (tylko Windows)</p> Allow access to entries - Zezwól na dostęp do wpisów + Zezwalaj na dostęp do wpisów Allow Selected - Zezwól wybranym + Zezwalaj wybranym Deny All @@ -870,15 +822,15 @@ Ctrl+4 - Użyj klawiatury wirtualnej (tylko Windows)</p> Disable for this site - Wyłącz dla tej witryny - - - Undo - Cofnij + Wyłącz w tej witrynie BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + Zapisz wpis KeePassXC-Browser + Ok OK @@ -893,82 +845,25 @@ Please select the correct database for saving credentials. Masz wiele otwartych baz danych. Wybierz właściwą bazę danych do zapisania danych uwierzytelniających. - - KeePassXC - Select Database - KeePassXC - Wybierz bazę danych - - - - BrowserPasskeysConfirmationDialog - - Cancel - Anuluj - - - Update - Zaktualizuj - - - Authenticate - Uwierzytelnij - - - Register new - Zarejestruj nowy - - - Register - Zarejestruj - - - Timeout in <b>%n</b> seconds... - Limit czasu za <b>%n</b> sekundę...Limit czasu za <b>%n</b> sekundy...Limit czasu za <b>%n</b> sekund...Limit czasu za <b>%n</b> sekund... - - - Relying Party: %1 - Strona ufająca: %1 - - - Username: %1 - Nazwa użytkownika: %1 - - - KeePassXC - Passkey credentials - KeePassXC - Dane uwierzytelniające klucza dostępu - - - Add to existing entry - Dodaj do istniejącego wpisu - - - Existing passkey found. -Do you want to register a new passkey for: - Znaleziono istniejący klucz dostępu. -Czy chcesz zarejestrować nowy klucz dostępu dla: - - - Select the existing passkey and press Update to replace it. - Wybierz istniejący klucz dostępu i naciśnij przycisk Zaktualizuj, aby go zastąpić. - - - Authenticate passkey credentials for: - Uwierzytelnij dane uwierzytelniające klucza dostępu dla: - - - Do you want to register a passkey for: - Czy chcesz zarejestrować klucz dostępu dla: - BrowserService + + KeePassXC: Create a new group + KeePassXC: Utwórz nową grupę + A request for creating a new group "%1" has been received. Do you want to create this group? Otrzymano żądanie utworzenia nowej grupy "%1". -Czy chcesz utworzyć tę grupę? +Czy chcesz stworzyć tę grupę? + + KeePassXC: New key association request + KeePassXC: Nowe żądanie skojarzenia klucza + You have received an association request for the following database: %1 @@ -985,16 +880,28 @@ chrome-laptop. Save and allow access Zapisz i zezwól na dostęp + + KeePassXC: Overwrite existing key? + KeePassXC: Zastąpić istniejący klucz? + 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ć? +Czy chcesz go zastąpić? + + + KeePassXC: Update Entry + KeePassXC: Aktualizacja wpisu Do you want to update the information in %1 - %2? Czy chcesz uaktualnić informację w %1 - %2? + + KeePassXC: Delete entry + KeePassXC: Usuń wpis + A request for deleting entry "%1" has been received. Do you want to delete the entry? @@ -1004,58 +911,50 @@ Czy chcesz usunąć wpis? - %1 (Passkey) - %1 (klucz dostępu) + Converting attributes to custom data… + Konwertowanie atrybutów na niestandardowe dane... - KeePassXC - Create a new group - KeePassXC - Utwórz nową grupę + Abort + Zaniechaj - Disable - Wyłącz + KeePassXC: Converted KeePassHTTP attributes + KeePassXC: Przekonwertowane atrybuty KeePassHTTP - KeePassXC - Overwrite existing key? - KeePassXC - Zastąpić istniejący klucz? + 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 moved %n keys to custom data. + Pomyślnie przeniesiono %n klucz do niestandardowych danych.Pomyślnie przeniesiono %n klucze do niestandardowych danych.Pomyślnie przeniesiono %n kluczy do niestandardowych danych.Pomyślnie przeniesiono %n kluczy do niestandardowych danych. - KeePassXC - Update Entry - KeePassXC - Zaktualizuj wpis + KeePassXC: No entry with KeePassHTTP attributes found! + KeePassXC: Nie znaleziono wpisu z atrybutami KeePassHTTP! - KeePassXC - Delete entry - KeePassXC - Usuń wpis + The active database does not contain an entry with KeePassHTTP attributes. + Aktywna baza danych nie zawiera wpisu z atrybutami KeePassHTTP. - KeePassXC - New key association request - KeePassXC - Nowa prośba o skojarzenie klucza + Don't show this warning again + Nie wyświetlaj ponownie tego ostrzeżenia - Passkey - Klucz dostępu + KeePassXC: Legacy browser integration settings detected + KeePassXC: Wykryto ustawienia przestarzałej integracji z przeglądarką - KeePassXC - Passkey credentials - KeePassXC - Dane uwierzytelniające klucza dostępu - - - Register a new passkey to this entry: - Zarejestruj nowy klucz dostępu do tego wpisu: - - - KeePassXC - Update passkey - KeePassXC - Zaktualizuj klucz dostępu - - - Entry already has a passkey. -Do you want to overwrite the passkey in %1 - %2? - Wpis ma już klucz dostępu. -Czy chcesz zastąpić klucz dostępu w %1 - %2? - - - Register - Zarejestruj + 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? + Twoje ustawienia KeePassXC-Browser należy przenieść do ustawień bazy danych. +Jest to konieczne, aby utrzymać bieżące połączenia przeglądarki. +Czy chcesz teraz migrować istniejące ustawienia? @@ -1066,7 +965,7 @@ Czy chcesz zastąpić klucz dostępu w %1 - %2? This is required for accessing your databases with KeePassXC-Browser - Wymagane jest to, aby uzyskać dostęp do baz danych za pomocą KeePassXC-Browser + Wymagane jest to aby uzyskać dostęp do baz danych za pomocą KeePassXC-Browser Enable browser integration @@ -1076,6 +975,10 @@ Czy chcesz zastąpić klucz dostępu w %1 - %2? General Ogólne + + Browsers installed as snaps are currently not supported. + Przeglądarki zainstalowane jako snapy są obecnie nieobsługiwane. + Enable integration for these browsers: Włącz integrację z tymi przeglądarkami: @@ -1139,7 +1042,7 @@ Czy chcesz zastąpić klucz dostępu w %1 - %2? Allow returning expired credentials - Zezwól na zwrot wygasłych danych uwierzytelniających + Zezwalaj na zwrot wygasłych danych uwierzytelniających All databases connected to the extension will return matching credentials. @@ -1195,20 +1098,20 @@ Czy chcesz zastąpić klucz dostępu w %1 - %2? Use a custom proxy location if you installed a proxy manually. - Używaj lokalizacji niestandardowego proxy, jeżeli został zainstalowana ręcznie. + Używaj niestandardowej lokalizacji proxy, jeżeli została zainstalowana ręcznie. Use a custom proxy location: Meant is the proxy for KeePassXC-Browser - Używaj lokalizacji niestandardowego proxy: + Używaj niestandardowej lokalizacji proxy: Custom proxy location field - Pole lokalizacji niestandardowego proxy + Niestandardowe pole lokalizacji proxy Browser for custom proxy file - Przeglądaj plik niestandardowego proxy + Przeglądarka niestandardowego pliku proxy Browse… @@ -1247,6 +1150,26 @@ Czy chcesz zastąpić klucz dostępu w %1 - %2? Custom extension ID Identyfikator niestandardowego rozszerzenia + + Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 + Ze względu na sandboxing Snap należy uruchomić skrypt, aby umożliwić integrację z przeglądarką.<br />Możesz uzyskać ten skrypt z %1 + + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 + KeePassXC-Browser jest niezbędny do integracji z przeglądarką. <br />Pobierz go dla %1 oraz %2 i %3. %4 + + + Please see special instructions for browser extension use below + Zobacz poniżej specjalne instrukcje dotyczące używania rozszerzenia przeglądarki + + + <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. + <b>Błąd:</b> Nie można znaleźć niestandardowej lokalizacji proxy! Integracja z przeglądarką NIE DZIAŁA bez aplikacji proxy. + + + <b>Warning:</b> The following options can be dangerous! + <b>Ostrzeżenie:</b> Poniższe opcje mogą być niebezpieczne! + Executable Files Pliki wykonywalne @@ -1257,52 +1180,12 @@ Czy chcesz zastąpić klucz dostępu w %1 - %2? Select custom proxy location - Wybierz lokalizację niestandardowego proxy + Wybierz niestandardową lokalizację proxy Select native messaging host folder location Wybierz lokalizację folderu hosta wiadomości natywnych - - Allow keepassxc-proxy to list all entries with their title, URL and UUID in connected databases. - Zezwól keepassxc-proxy na wyświetlanie wszystkich wpisów wraz z tytułem, adresem URL i identyfikatorem UUID w podłączonych bazach danych. - - - Allow limited access to all entries in connected databases (ignores site access restrictions) - Zezwól na ograniczony dostęp do wszystkich wpisów w podłączonych bazach danych (ignoruje ograniczenia dostępu do witryny) - - - <b>Warning:</b> Only adjust these settings if necessary. - <b>Ostrzeżenie:</b> Dostosowuj te ustawienia tylko w razie potrzeby. - - - The custom proxy location does not exist. - Lokalizacja niestandardowego proxy nie istnieje. - - - <b>Error:</b> The custom proxy location does not exist. Correct this in the advanced settings tab. - <b>Błąd:</b> Lokalizacja niestandardowego proxy nie istnieje. Popraw to na karcie ustawień zaawansowanych. - - - <b>Error:</b> The installed proxy executable is missing from the expected location: %1<br/>Please set a custom proxy location in the advanced settings or reinstall the application. - <b>Błąd:</b> Brak pliku wykonywalnego zainstalowanego proxy w oczekiwanej lokalizacji: %1<br/>Ustaw lokalizację niestandardowego proxy w ustawieniach zaawansowanych lub zainstaluj ponownie aplikację. - - - Allows using insecure http://localhost with passkeys for testing purposes. - Umożliwia używanie niezabezpieczonego http://localhost z kluczami dostępu do celów testowych. - - - Allow using localhost with passkeys - Zezwalaj na używanie localhost z kluczami dostępu - - - KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. - KeePassXC-Browser jest niezbędny do integracji z przeglądarką. <br />Pobierz go dla %1 oraz %2 i %3. - - - Browsers installed using Snap or Flatpak are not supported with exception to Firefox installed using Snap. - Przeglądarki zainstalowane przy użyciu pakietów Snap lub Flatpak nie są obsługiwane, z wyjątkiem przeglądarki Firefox zainstalowanej przy użyciu pakietu Snap. - CloneDialog @@ -1325,6 +1208,14 @@ Czy chcesz zastąpić klucz dostępu w %1 - %2? CsvImportWidget + + Import CSV fields + Importuj pola CSV + + + filename + nazwa pliku + size, rows, columns rozmiar, wiersze, kolumny @@ -1363,7 +1254,7 @@ Czy chcesz zastąpić klucz dostępu w %1 - %2? Created - Utworzono + Utworzone Last Modified @@ -1433,43 +1324,50 @@ Czy chcesz zastąpić klucz dostępu w %1 - %2? Column %1 Kolumna %1 + + Imported from CSV file + Importowane z pliku CSV + + + Original data: + Oryginalne dane: + + + Error(s) detected in CSV file! + Wykryto błąd lub błędy w pliku CSV! + [%n more message(s) skipped] - [%n kolejny komunikat pominięto][%n kolejne komunikaty pominięto][%n kolejnych komunikatów pominięto][%n kolejnych komunikatów pominięto] + [%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] - Failed to parse CSV file: %1 - Nie udało się przeanalizować pliku CSV: %1 + Error + Błąd - Imported from CSV file: %1 - Zaimportowano z pliku CSV: %1 - - - No Title Selected - Nie wybrano tytułu - - - No title column was selected, entries will be hard to tell apart. -Are you sure you want to import? - Nie wybrano kolumny tytułu, wpisy będą trudne do odróżnienia. -Czy na pewno chcesz importować? - - - Tags - Tagi + CSV import: writer has errors: +%1 + Import CSV: zapisywanie z błędami: +%1 CsvParserModel + + %1, %2, %3 + file info: bytes, rows, columns + %1, %2, %3 + + + %n byte(s) + %n bajt%n bajty%n bajtów%n bajtów + %n row(s) - CSV row count %n rząd%n rzędy%n rzędów%n rzędów %n column(s) - CSV column count %n kolumna%n kolumny%n kolumn%n kolumn @@ -1522,14 +1420,6 @@ Zapasowa baza danych znajduje się w %2 Recycle Bin Kosz - - Database file read error. - Błąd odczytu pliku bazy danych. - - - No file path was provided. - Nie podano ścieżki dostępu do pliku. - DatabaseOpenDialog @@ -1552,10 +1442,30 @@ Zapasowa baza danych znajduje się w %2 Password field Pole hasła + + Enter Additional Credentials (if any): + Wprowadź dodatkowe dane uwierzytelniające (jeśli istnieją): + + + Key File: + Plik klucza: + + + Key file help + Pomoc dotycząca pliku klucza + Hardware key slot selection Wybór gniazda klucza sprzętowego + + Hardware Key: + Klucz sprzętowy: + + + Hardware key help + Pomoc klucza sprzętowego + Key file to unlock the database Plik klucza do odblokowania bazy danych @@ -1568,6 +1478,14 @@ Zapasowa baza danych znajduje się w %2 Browse… Przeglądaj… + + Refresh hardware tokens + Odśwież tokeny sprzętowe + + + Refresh + Odśwież + Unlock Database Odblokuj bazę danych @@ -1630,6 +1548,10 @@ Aby zapobiec pojawianiu się tego błędu, musisz przejść do "Ustawienia Retry with empty password Spróbuj ponownie z pustym hasłem + + Failed to authenticate with Touch ID + Nie udało się uwierzytelnić za pomocą Touch ID + Failed to open key file: %1 Nie można otworzyć pliku klucza: %1 @@ -1662,69 +1584,41 @@ Aby zapobiec pojawianiu się tego błędu, musisz przejść do "Ustawienia Cannot use database file as key file Nie można użyć pliku bazy danych jako pliku klucza + + You cannot use your database file as a key file. +If you do not have a key file, please leave the field empty. + Nie można użyć pliku bazy danych jako pliku klucza. +Jeśli nie masz pliku klucza, pozostaw puste pole. + + + Detecting hardware keys… + Wykrywanie kluczy sprzętowych… + + + No hardware keys detected + Nie wykryto kluczy sprzętowych + + + Select hardware key… + Wybierz klucz sprzętowy… + + + <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information…</p> + <p>Oprócz hasła głównego można użyć pliku sekretnego w celu zwiększenia bezpieczeństwa bazy danych. Ten plik można wygenerować w ustawieniach zabezpieczeń bazy danych.</p><p>To <strong>nie</strong> jest plik bazy danych *. kdbx!<br>Jeśli nie masz pliku klucza, pozostaw to pole puste.</p><p>Kliknij, aby uzyskać więcej informacji…</p> + + + <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +<p>Click for more information…</p> + <p>Możesz użyć sprzętowego klucza bezpieczeństwa, takiego jak <strong>YubiKey</strong> albo <strong>OnlyKey</strong> z gniazdami skonfigurowanymi dla HMAC-SHA1.</p> +<p>Kliknij, aby uzyskać więcej informacji…</p> + authenticate to access the database uwierzytelnij, aby uzyskać dostęp do bazy danych - Failed to authenticate with Quick Unlock: %1 - Nie udało się uwierzytelnić za pomocą szybkiego odblokowania: %1 - - - Select Key File: - Wybierz plik klucza: - - - <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!</p> - <p>Oprócz hasła głównego można użyć pliku sekretnego w celu zwiększenia bezpieczeństwa bazy danych. Ten plik można wygenerować w ustawieniach zabezpieczeń bazy danych.</p><p>To <strong>nie</strong> jest plik bazy danych *. kdbx!</p> - - - Use hardware key [Serial: %1] - Użyj klucza sprzętowego [Numer seryjny: %1] - - - Use hardware key - Użyj klucza sprzętowego - - - Your database file is NOT a key file! -If you don't have a key file or don't know what that is, you don't have to select one. - Twój plik bazy danych NIE jest plikiem klucza! -Jeśli nie masz pliku klucza lub nie wiesz, czym on jest, nie musisz go wybierać. - - - KeePassXC database file selected - Wybrano plik bazy danych KeePassXC - - - The file you selected looks like a database file. -A database file is NOT a key file! - -Are you sure you want to continue with this file?. - Wybrany plik wygląda jak plik bazy danych. -Plik bazy danych NIE jest plikiem klucza! - -Czy na pewno chcesz kontynuować z tym plikiem? - - - No hardware keys found. - Nie znaleziono kluczy sprzętowych. - - - Refresh Hardware Keys - Odśwież klucze sprzętowe - - - Click to add a key file. - Kliknij, aby dodać plik klucza. - - - <a href="#" style="text-decoration: underline">I have a key file</a> - <a href="#" style="text-decoration: underline">Mam plik klucza</a> - - - Hardware keys found, but no slots are configured. - Znaleziono klucze sprzętowe, ale nie skonfigurowano żadnych gniazd. + Failed to authenticate with Windows Hello: %1 + Nie udało się uwierzytelnić za pomocą Windows Hello: %1 @@ -1736,6 +1630,10 @@ Czy na pewno chcesz kontynuować z tym plikiem? DatabaseSettingsDialog + + Advanced Settings + Ustawienia zaawansowane + General Ogólne @@ -1760,22 +1658,6 @@ Czy na pewno chcesz kontynuować z tym plikiem? Maintenance Konserwacja - - KeeShare - KeeShare - - - Secret Service Integration - Integracja z usługą sekretną - - - Remote Sync - Zdalna synchronizacja - - - Database Settings: %1 - Ustawienia bazy danych: %1 - DatabaseSettingsWidgetBrowser @@ -1783,6 +1665,18 @@ Czy na pewno chcesz kontynuować z tym plikiem? KeePassXC-Browser settings Ustawienia KeePassXC-Browser + + Convert KeePassHTTP data + Konwertuj dane KeePassHTTP + + + Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data + Konwertuj starsze atrybuty KeePassHTTP na niestandardowe dane zgodne z KeePassXC-Browser + + + Refresh database root group ID + Odśwież identyfikator grupy głównej bazy danych + Disconnect all browsers Rozłącz wszystkie przeglądarki @@ -1791,10 +1685,6 @@ Czy na pewno chcesz kontynuować z tym plikiem? Forget all site-specific settings on entries Zapomnij wszystkie ustawienia witryn dla wpisów - - Refresh database root group ID - Odśwież identyfikator grupy głównej bazy danych - Stored keys Przechowywane klucze @@ -1831,7 +1721,7 @@ Może to uniemożliwić połączenie z wtyczką przeglądarki. Created - Utworzono + Utworzone Enable Browser Integration to access these settings. @@ -1843,10 +1733,18 @@ This may prevent connection to the browser plugin. Czy na pewno chcesz rozłączyć wszystkie przeglądarki? Może to uniemożliwić połączenie z wtyczką przeglądarki. + + KeePassXC: No keys found + KeePassXC: Nie znaleziono kluczy + No shared encryption keys found in KeePassXC settings. Nie znaleziono współdzielonych kluczy szyfrujących w ustawieniach KeePassXC. + + KeePassXC: Removed keys from database + KeePassXC: Usunięto klucze z bazy danych + 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. @@ -1865,14 +1763,32 @@ Uprawnienia dostępu do wpisów zostaną odwołane. 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 convert all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + Czy na pewno chcesz przekonwertować wszystkie dane przestarzałej integracji z przeglądarką do najnowszego standardu? +Jest to konieczne, aby zachować zgodność z wtyczką przeglądarki. + Refresh database ID Odśwież identyfikator bazy danych @@ -1883,26 +1799,6 @@ This is only necessary if your database is a copy of another and the browser ext Czy na pewno chcesz odświeżyć identyfikator bazy danych? Jest to konieczne tylko wtedy, gdy baza danych jest kopią innej, a rozszerzenie przeglądarki nie może się połączyć. - - Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data - Konwertuj starsze atrybuty KeePassHTTP na niestandardowe dane zgodne z KeePassXC-Browser - - - No keys found - Nie znaleziono kluczy - - - Removed keys from database - Usunięto klucze z bazy danych - - - Removed permissions - Usunięto uprawnienia - - - No entry with permissions found! - Nie znaleziono wpisu z uprawnieniami! - DatabaseSettingsWidgetDatabaseKey @@ -1942,18 +1838,6 @@ Czy na pewno chcesz kontynuować bez hasła? Failed to change database credentials Nie udało się zmienić danych uwierzytelniających bazy danych - - Weak password - Słabe hasło - - - This is a weak password! For better protection of your secrets, you should choose a stronger password. - To jest słabe hasło! Aby lepiej chronić swoje sekrety, należy wybrać silniejsze hasło. - - - The provided password does not meet the minimum quality requirement. - Podane hasło nie spełnia minimalnych wymagań jakościowych. - DatabaseSettingsWidgetEncryption @@ -1961,6 +1845,14 @@ Czy na pewno chcesz kontynuować bez hasła? Decryption Time: Czas odszyfrowania: + + Change existing decryption time + Zmień istniejący czas odszyfrowywania + + + Change + Zmień + Decryption time in seconds Czas odszyfrowania w sekundach @@ -2041,6 +1933,11 @@ Czy na pewno chcesz kontynuować bez hasła? KDBX 3 KDBX 3 + + unchanged + Database decryption time is unchanged + niezmieniony + Number of rounds too high Key transformation rounds @@ -2052,7 +1949,7 @@ Czy na pewno chcesz kontynuować bez hasła? If you keep this number, your database may take hours, days, or even longer to open. Używasz bardzo dużej liczby rund transformacji klucza z Argon2. -Jeśli zachowasz tę liczbę, otworzenie Twojej bazy danych może zająć godziny, dni lub nawet dłużej. +Jeśli zachowasz tę liczbę, otworzenie twojej bazy danych może zająć godziny, dni lub nawet dłużej. Understood, keep number @@ -2073,7 +1970,7 @@ Jeśli zachowasz tę liczbę, otworzenie Twojej bazy danych może zająć godzin If you keep this number, your database will not be protected from brute force attacks. Używasz bardzo małej liczby rund transformacji klucza z AES-KDF. -Jeśli zachowasz tę liczbę, Twoja baza danych nie będzie chroniona przed atakami siłowymi. +Jeśli zachowasz tę liczbę, twoja baza danych nie będzie chroniona przed atakami siłowymi. KDF unchanged @@ -2093,18 +1990,6 @@ Jeśli zachowasz tę liczbę, Twoja baza danych nie będzie chroniona przed atak Threads for parallel execution (KDF settings) wątek wątki wątków wątków - - Encryption Settings: - Ustawienia szyfrowania: - - - Basic - Podstawowe - - - Advanced - Zaawansowane - DatabaseSettingsWidgetFdoSecrets @@ -2191,7 +2076,7 @@ Jeśli zachowasz tę liczbę, Twoja baza danych nie będzie chroniona przed atak Do you want to delete the current recycle bin and all its contents? This action is not reversible. Czy chcesz usunąć bieżący kosz i całą jego zawartość? -Ta czynność jest nieodwracalna. +To działanie jest nieodwracalne. (old) @@ -2235,70 +2120,6 @@ removed from the database. usuwać je z bazy danych. Wpisy usunięte z kosza są usuwane z bazy danych. - - Autosave delay since last change - Opóźnienie autozapisu od ostatniej zmiany - - - Autosave delay - Opóźnienie autozapisu - - - Autosave delay since last change in minutes - Opóźnienie autozapisu od ostatniej zmiany, w minutach - - - min - min - - - Autosave delay since last change checkbox - Pole wyboru opóźnienia autozapisu od ostatniej zmian - - - Public Database Metadata - Publiczne metadane bazy danych - - - Warning: the following settings are not encrypted. - Ostrzeżenie: poniższe ustawienia nie są szyfrowane. - - - Display name: - Wyświetlana nazwa: - - - Publically visible display name used on the unlock dialog - Publicznie widoczna wyświetlana nazwa używana w oknie dialogowym odblokowywania - - - Database public display name - Wyświetlana nazwa publiczna bazy danych - - - Display color: - Wyświetlany kolor: - - - Publically visible color used on the unlock dialog - Publicznie widoczny kolor używany w oknie dialogowym odblokowywania - - - Database public display color chooser - Selektor wyświetlanego koloru publicznego bazy danych - - - Clear - Wyczyść - - - Display icon: - Wyświetlana ikona: - - - Select Database Icon - Wybierz ikonę bazy danych - DatabaseSettingsWidgetKeeShare @@ -2394,141 +2215,6 @@ z kosza są usuwane z bazy danych. Pole opisu bazy danych - - DatabaseSettingsWidgetRemote - - Sync Commands - Polecenia synchronizacji - - - Remove - Usuń - - - Command Settings - Ustawienia poleceń - - - Name - Nazwa - - - Save - Zapisz - - - Download - Pobierz - - - Command: - Polecenie: - - - Download command field - Pole polecenia pobierania - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - np.: "sftp użytkownik@nazwahosta" lub "scp użytkownik@nazwahosta:ZdalnaBazaDanych.kdbx {TEMP_DATABASE}" - - - Input: - Wejście: - - - Download input field - Pole wejścia pobierania - - - Upload - Wyślij - - - Upload command field - Pole polecenia wysyłania - - - e.g.: "sftp user@hostname" or "scp {TEMP_DATABASE} user@hostname:DatabaseOnRemote.kdbx" - np.: "sftp użytkownik@nazwahosta" lub "scp {TEMP_DATABASE} użytkownik@nazwahosta:ZdalnaBazaDanych.kdbx" - - - Upload input field - Pole wejścia wysyłania - - - Name cannot be empty. - Nazwa nie może być pusta. - - - Test - Testuj - - - Download command cannot be empty. - Polecenie pobierania nie może być puste. - - - Download failed with error: %1 - Pobieranie nie powiodło się z błędem: %1 - - - Download finished, but file %1 could not be found. - Pobieranie zostało zakończone, ale nie można znaleźć pliku %1. - - - Download successful. - Pobieranie powiodło się. - - - Save Remote Settings - Zapisz ustawienia zdalne - - - You have unsaved changes. Do you want to save them? - Masz niezapisane zmiany. Czy chcesz je zapisać? - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - np.: -get ZdalnaBazaDanych.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} służy jako symbol zastępczy do przechowywania bazy danych w tymczasowej lokalizacji -Polecenie musi się zakończyć. W przypadku `sftp` jako ostatniego polecenia należy wysłać `exit` - - - - e.g.: -put {TEMP_DATABASE} DatabaseOnRemote.kdbx -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - np.: -put {TEMP_DATABASE} ZdalnaBazaDanych.kdbx -exit ---- -{TEMP_DATABASE} służy jako symbol zastępczy do przechowywania bazy danych w tymczasowej lokalizacji -Polecenie musi się zakończyć. W przypadku `sftp` jako ostatniego polecenia należy wysłać `exit` - - - - Timeout: - Przekroczenie limitu czasu: - - - seconds - sekundy - - DatabaseTabWidget @@ -2561,10 +2247,26 @@ Jest to z pewnością błąd, zgłoś go programistom. CSV file Plik CSV + + Select CSV file + Wybierz plik CSV + Merge database Scal bazę danych + + KeePass 1 database + Baza danych KeePass 1 + + + Open KeePass 1 database + Otwórz bazę danych KeePass 1 + + + Open OPVault + Otwórz OPVault + Export database to CSV file Eksportuj bazę danych do pliku CSV @@ -2577,6 +2279,28 @@ Jest to z pewnością błąd, zgłoś go programistom. Writing the HTML file failed. Nie udało się zapisać pliku HTML. + + Export Confirmation + Potwierdzenie eksportu + + + You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? + Za chwilę wyeksportujesz bazę danych do niezaszyfrowanego pliku. To narazi hasła i wrażliwe informacje! Czy na pewno chcesz kontynuować? + + + New Database + Nowa baza danych + + + %1 [New Database] + Database tab name modifier + %1 [Nowa baza danych] + + + %1 [Locked] + Database tab name modifier + %1 [Zablokowana] + Export database to XML file Eksportuj bazę danych do pliku XML @@ -2589,31 +2313,9 @@ Jest to z pewnością błąd, zgłoś go programistom. Writing the XML file failed Nie udało się zapisać pliku XML - - Export Confirmation - Potwierdzenie eksportu - - - You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? - Za chwilę wyeksportujesz bazę danych do niezaszyfrowanego pliku. To narazi hasła i wrażliwe informacje! Czy na pewno chcesz kontynuować? - - - %1 [Locked] - Database tab name modifier - %1 [Zablokowana] - - - %1 [Temporary] - Database tab name modifier - %1 [Tymczasowa] - DatabaseWidget - - Searches and Tags - Wyszukiwania i tagi - Searching… Wyszukiwanie… @@ -2662,10 +2364,6 @@ Jest to z pewnością błąd, zgłoś go programistom. Expired entries Wygasłe wpisy - - Entries expiring within %1 day(s) - Wpisy wygasają w ciągu %1 dniaWpisy wygasają w ciągu %1 dniWpisy wygasają w ciągu %1 dniWpisy wygasają w ciągu %1 dni - No current database. Brak bieżącej bazy danych. @@ -2690,18 +2388,6 @@ Jest to z pewnością błąd, zgłoś go programistom. No Results Brak wyników - - Save - Zapisz - - - Enter a unique name or overwrite an existing search from the list: - Wprowadź unikalną nazwę lub zastąp istniejące wyszukiwanie z listy: - - - Save Search - Zapisz wyszukiwanie - Lock Database? Zablokować bazę danych? @@ -2730,6 +2416,26 @@ Zapisać zmiany? File has changed Plik się zmienił + + The database file has changed. Do you want to load the changes? + Plik bazy danych uległ zmianie. Czy chcesz załadować zmiany? + + + Merge Request + Żą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 scalić twoje zmiany? + + + 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 + Disable safe saves? Wyłączyć bezpieczne zapisywanie? @@ -2766,100 +2472,31 @@ Wyłączyć bezpieczne zapisywanie i spróbować ponownie? Are you sure you want to permanently delete everything from your recycle bin? - Czy na pewno chcesz nieodwracalnie usunąć wszystko z kosza? + Czy na pewno chcesz nieodwracalnie usunąć wszystko z twojego kosza? Could not find database file: %1 Nie można znaleźć pliku bazy danych: %1 - - New Database - Nowa baza danych + + Entries expiring within %1 day(s) + Wpisy wygasają w ciągu %1 dniaWpisy wygasają w ciągu %1 dniWpisy wygasają w ciągu %1 dniWpisy wygasają w ciągu %1 dni - %1 [New Database] - Database tab name modifier - %1 [Nowa baza danych] + Searches and Tags + Wyszukiwania i tagi - Remote Sync did not contain any download or upload commands. - Synchronizacja zdalna nie zawierała żadnych poleceń pobierania ani wysyłania. + Enter a unique name or overwrite an existing search from the list: + Wprowadź unikalną nazwę lub zastąp istniejące wyszukiwanie z listy: - Remote sync '%1' completed successfully! - Zdalna synchronizacja '%1' zakończona pomyślnie! + Save + Zapisz - Remote sync '%1' failed: %2 - Zdalna synchronizacja '%1' nie powiodła się: %2 - - - Error while saving database %1: %2 - Błąd podczas zapisywania bazy danych %1: %2 - - - Downloading... - Pobieranie... - - - Uploading... - Wysyłanie... - - - Syncing... - Synchronizowanie... - - - Remove passkey from entry - Usuń klucz dostępu z wpisu - - - Do you want to remove the passkey from this entry? - Czy chcesz usunąć klucz dostępu z tego wpisu? - - - The database file "%1" was modified externally - Plik bazy danych "%1" został zmodyfikowany zewnętrznie - - - Do you want to load the changes? - Czy chcesz załadować zmiany? - - - Reload database - Załaduj ponownie bazę danych - - - Reloading database… - Ponowne ładowanie bazy danych… - - - Reload canceled - Anulowano ponowne ładowanie - - - Reload successful - Ponowne ładowanie powiodło się - - - Reload pending user action… - Załaduj ponownie oczekującą czynność użytkownika… - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes<br>Ignore the changes on disk until save<br>Discard unsaved changes - Plik bazy danych "%1" został zmodyfikowany zewnętrznie.<br>Jak chcesz kontynuować?<br><br>Scal wszystkie zmiany<br>Ignoruj ​​zmiany na dysku do momentu zapisania<br>Odrzuć niezapisane zmiany - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes then save<br>Overwrite the changes on disk<br>Discard unsaved changes - Plik bazy danych "%1" został zmodyfikowany zewnętrznie.<br>Jak chcesz kontynuować?<br><br>Scal wszystkie zmiany, a następnie zapisz<br>Nadpisz zmiany na dysku<br>Odrzuć niezapisane zmiany - - - Database file overwritten. - Plik bazy danych został nadpisany. - - - Database file on disk cannot be unlocked with current credentials.<br>Enter new credentials and/or present hardware key to continue. - Pliku bazy danych na dysku nie można odblokować przy użyciu bieżących danych uwierzytelniających.<br>Aby kontynuować, wprowadź nowe dane uwierzytelniające i/lub obecny klucz sprzętowy. + Save Search + Zapisz wyszukiwanie @@ -2912,6 +2549,10 @@ Wyłączyć bezpieczne zapisywanie i spróbować ponownie? n/a nie dotyczy + + (encrypted) + (zaszyfrowane) + Select private key Wybierz klucz prywatny @@ -2998,10 +2639,6 @@ Czy chcesz go poprawić? Hide Ukryj - - %n hour(s) - %n godzina%n godziny%n godzin%n godzin - %n week(s) %n tydzień%n tygodnie%n tygodni%n tygodni @@ -3014,9 +2651,9 @@ Czy chcesz go poprawić? %n year(s) %n rok%n lata%n lat%n lat - - Failed to decrypt SSH key, ensure password is correct. - Nie udało się odszyfrować klucza SSH. Upewnij się, że hasło jest poprawne. + + %n hour(s) + %n godzina%n godziny%n godzin%n godzin @@ -3136,20 +2773,10 @@ Czy chcesz go poprawić? Add new window association Dodaj nowe skojarzenie okna - - + - Add item - + - Remove selected window association Usuń wybrane skojarzenie okna - - - - Remove item - - - Window title: Tytuł okna: @@ -3168,15 +2795,29 @@ Czy chcesz go poprawić? Use a specific sequence for this association: - Użyj określonej sekwencji dla tego skojarzenia: + Użyj określonej sekwencji dla tego powiązania: Custom Auto-Type sequence for this window Niestandardowa sekwencja autowpisywania dla tego okna + + + + Add item + + + + + - + Remove item + - + EditEntryWidgetBrowser + + These settings affect to the entry's behaviour with the browser extension. + Te ustawienia wpływają na zachowanie wpisu z rozszerzeniem przeglądarki. + General Ogólne @@ -3189,14 +2830,26 @@ Czy chcesz go poprawić? Skip Auto-Submit for this entry Pomiń autoprzesyłanie dla tego wpisu + + Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. + Wyślij to ustawienie do przeglądarki tylko w przypadku okien dialogowych uwierzytelniania HTTP. Jeśli ta opcja jest włączona, zwykłe formularze logowania nie będą wyświetlać tego wpisu do wyboru. + Use this entry only with HTTP Basic Auth Użyj tego wpisu tylko w przypadku podstawowego uwierzytelniania HTTP + + Do not send this setting to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. + Nie wysyłaj tego ustawienia do przeglądarki w przypadku okien dialogowych uwierzytelniania HTTP. Jeśli jest włączone, okna dialogowe uwierzytelniania HTTP nie będą pokazywać tego wpisu do wyboru. + Do not use this entry with HTTP Basic Auth Nie używaj tego wpisu z podstawowym uwierzytelnianiem HTTP + + Additional URL's + Dodatkowe adresy URL + Add Dodaj @@ -3209,22 +2862,6 @@ Czy chcesz go poprawić? Edit Edytuj - - These settings affect the entry's behaviour with the browser extension. - Te ustawienia wpływają na zachowanie wpisu z rozszerzeniem przeglądarki. - - - Additional URLs - Dodatkowe adresy URL - - - Only send this entry to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. - Wysyłaj ten wpis do przeglądarki tylko w przypadku okien dialogowych uwierzytelniania HTTP. Jeśli ta opcja jest włączona, zwykłe formularze logowania nie będą wyświetlać tego wpisu do wyboru. - - - Do not send this entry to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. - Nie wysyłaj tego wpisu do przeglądarki w przypadku okien dialogowych uwierzytelniania HTTP. Jeśli ta opcja jest włączona, okna dialogowe uwierzytelniania HTTP nie będą pokazywać tego wpisu do wyboru. - EditEntryWidgetHistory @@ -3293,7 +2930,7 @@ Czy chcesz go poprawić? Presets - Ustawienia + Presety Url field @@ -3390,6 +3027,19 @@ Czy chcesz go poprawić? Private key Klucz prywatny + + External file + Plik zewnętrzny + + + Browser for key file + Przeglądaj plik klucza + + + Browse… + Button for opening file dialog + Przeglądaj… + Attachment Załącznik @@ -3406,23 +3056,6 @@ Czy chcesz go poprawić? Remove from agent Usuń z agenta - - External file - Plik zewnętrzny - - - Browser for key file - Przeglądaj plik klucza - - - Browse… - Button for opening file dialog - Przeglądaj… - - - Generate - Wygeneruj - Select attachment file Wybierz plik załącznika @@ -3447,10 +3080,6 @@ Czy chcesz go poprawić? seconds sekundy - - Clear agent - Wyczyść agenta - EditGroupWidget @@ -3462,6 +3091,10 @@ Czy chcesz go poprawić? Icon Ikona + + Browser Integration + Integracja z przeglądarką + Properties Właściwości @@ -3478,10 +3111,6 @@ Czy chcesz go poprawić? Group has unsaved changes Grupa ma niezapisane zmiany - - Browser Integration - Integracja z przeglądarką - Enable Włącz @@ -3541,14 +3170,6 @@ Czy chcesz go poprawić? Omit WWW subdomain from matching toggle for this and sub groups Przełączenie pomijania subdomeny WWW w dopasowaniu dla tej i podgrup - - Restrict matching to given browser key: - Ogranicz dopasowanie do danego klucza przeglądarki: - - - Restrict matching to given browser key toggle for this and sub groups - Ogranicz dopasowanie do danego przełącznika klucza przeglądarki dla tej i podgrup - EditGroupWidgetKeeShare @@ -3781,6 +3402,10 @@ Obsługiwane rozszerzenia to: %1. Unable to fetch favicon. Nie można pobrać ikony ulubionych. + + You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security + Możesz włączyć usługę ikon witryn DuckDuckGo w menu Narzędzia -> Ustawienia -> Bezpieczeństwo + Existing icon selected. Wybrano istniejącą ikonę. @@ -3813,36 +3438,32 @@ Obsługiwane rozszerzenia to: %1. 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: - - You can enable the DuckDuckGo website icon service under Application Settings -> Security - Możesz włączyć usługę ikon witryn DuckDuckGo w Ustawienia aplikacji -> Bezpieczeństwo - EditWidgetProperties Created: - Utworzono: + Utworzone: Datetime created - Data i godzina utworzenia + Utworzono datę i godzinę Modified: - Modyfikowano: + Modyfikowane: Datetime modified - Data i godzina modyfikowania + Zmodyfikowano datę i godzinę Accessed: - Dostęp: + Ostatnio używane: Datetime accessed - Data i godzina dostępu + Ostatnio używano datę i godzinę Uuid: @@ -3893,24 +3514,6 @@ Może to spowodować nieprawidłowe działanie wtyczek. %1 - Clone %1 - klon - - Passkey - Klucz dostępu - - - Invalid conversion type: %1 - Nieprawidłowy typ konwersji: %1 - - - Invalid conversion syntax: %1 - Nieprawidłowa składnia konwersji: %1 - - - Invalid regular expression syntax %1 -%2 - Nieprawidłowa składnia wyrażenia regularnego %1 -%2 - EntryAttachments @@ -3919,21 +3522,6 @@ Może to spowodować nieprawidłowe działanie wtyczek. Nie można otworzyć pliku "%1" - - EntryAttachmentsDialog - - Form - Formularz - - - File name - Nazwa pliku - - - File contents... - Zawartość pliku... - - EntryAttachmentsModel @@ -3971,6 +3559,14 @@ Może to spowodować nieprawidłowe działanie wtyczek. Remove Usuń + + Rename selected attachment + Zmień nazwę wybranego załącznika + + + Rename + Zmień nazwę + Open selected attachment Otwórz wybrany załącznik @@ -4048,6 +3644,12 @@ Może to spowodować nieprawidłowe działanie wtyczek. Confirm Overwrite Attachment Potwierdź zastąpienie załącznika + + Attachment "%1" already exists. +Would you like to overwrite the existing attachment? + Załącznik "%1" już istnieje. +Czy chcesz zastąpić istniejący załącznik? + Confirm Attachment Potwierdź załącznik @@ -4082,24 +3684,6 @@ Error: %1 Zapisywanie zaktualizowanego załącznika nie powiodło się. Błąd: %1 - - Attachment "%1" already exists. -Would you like to overwrite the existing attachment? - Załącznik "%1" już istnieje. -Czy chcesz zastąpić istniejący załącznik? - - - New - Nowy - - - Preview - Podgląd - - - Failed to preview an attachment: Attachment not found - Nie udało się wyświetlić podglądu załącznika: nie został on znaleziony - EntryAttributesModel @@ -4228,15 +3812,15 @@ Czy chcesz zastąpić istniejący załącznik? Created - Utworzono + Utworzone Modified - Modyfikowano + Modyfikowane Accessed - Dostęp + Ostatnio używane Attachments @@ -4294,14 +3878,6 @@ Czy chcesz zastąpić istniejący załącznik? Has TOTP Ma TOTP - - Background Color - Kolor tła - - - Group Path - Ścieżka grupy - EntryPreviewWidget @@ -4322,8 +3898,8 @@ Czy chcesz zastąpić istniejący załącznik? Hasło - URL - Adres URL + Notes + Notatki Expiration @@ -4342,8 +3918,8 @@ Czy chcesz zastąpić istniejący załącznik? Użytkownik - Notes - Notatki + URL + Adres URL Advanced @@ -4393,10 +3969,6 @@ Czy chcesz zastąpić istniejący załącznik? Never Nigdy - - Double click to copy value - Kliknij dwukrotnie, aby skopiować wartość - Enabled Włączone @@ -4406,8 +3978,8 @@ Czy chcesz zastąpić istniejący załącznik? Wyłączone - Double click to copy to clipboard - Kliknij dwukrotnie, aby skopiować do schowka + Double click to copy value + Kliknij dwukrotnie, aby skopiować wartość @@ -4416,10 +3988,6 @@ Czy chcesz zastąpić istniejący załącznik? Invalid URL Nieprawidłowy adres URL - - Duplicate URL - Zduplikowany adres URL - EntryView @@ -4435,10 +4003,6 @@ Czy chcesz zastąpić istniejący załącznik? Reset to defaults Przywróć domyślne - - + %1 entry(s)... - + %1 wpis...+ %1 wpisy...+ %1 wpisów...+ %1 wpisów... - ExportDialog @@ -4510,7 +4074,7 @@ To narazi Twoje hasła i poufne informacje na niebezpieczeństwo! Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. - Uruchomiona jest inna usługa sekretna (%1). Zatrzymaj ją/usuń przed ponownym włączeniem integracji z usługą sekretną. + Uruchomiona jest inna usługa sekretna (%1). Zatrzymaj ją/usuń przed ponownym włączeniem Integracji usługi sekretnej. Failed to register DBus service at %1.<br/> @@ -4660,199 +4224,6 @@ Możesz włączyć usługę ikon witryn DuckDuckGo w sekcji bezpieczeństwa usta Pobieranie ikon ulubionych (%1/%2)… - - ImportWizard - - Import Wizard - Kreator importu - - - - ImportWizardPageReview - - WizardPage - WizardPage - - - Entry count: %1 - Liczba wpisów: %1 - - - Group - Grupa - - - Title - Tytuł - - - Username - Użytkownik - - - Password - Hasło - - - Url - Adres URL - - - Could not load key file. - Nie można załadować pliku klucza. - - - Could not open remote database. Password or key file may be incorrect. - Nie można otworzyć zdalnej bazy danych. Hasło lub plik klucza mogą być nieprawidłowe. - - - - ImportWizardPageSelect - - Form - Formularz - - - Import File Selection - Wybór pliku importu - - - Password: - Hasło: - - - Key File: - Plik klucza: - - - Browse… - Przeglądaj… - - - Import Into: - Importuj do: - - - New Database - Nowa baza danych - - - No unlocked databases available - Brak dostępnych odblokowanych baz danych - - - Existing Database: - Istniejąca baza danych: - - - Import File: - Importuj plik: - - - Comma Separated Values (.csv) - Format CSV (.csv) - - - 1Password Export (.1pux) - Eksport 1Password (.1pux) - - - 1Password Vault (.opvault) - Sejf 1Password (.opvault) - - - Bitwarden (.json) - Bitwarden (.json) - - - KeePass 1 Database (.kdb) - Baza danych KeePass 1 (.kdb) - - - Open OPVault - Otwórz OPVault - - - Select import file - Wybierz plik importu - - - All files - Wszystkie pliki - - - Key files - Pliki kluczy - - - Select key file - Wybierz plik klucza - - - Comma Separated Values - Format CSV - - - 1Password Export - Eksport 1Password - - - Bitwarden JSON Export - Eksport JSON Bitwarden - - - 1Password Vault - Sejf 1Password - - - KeePass1 Database - Baza danych KeePass 1 - - - Proton Pass (.json) - Proton Pass (.json) - - - Proton Pass JSON Export - Eksport JSON Proton Pass - - - Temporary Database - Tymczasowa baza danych - - - Command: - Polecenie: - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - np.: "sftp użytkownik@nazwahosta" lub "scp użytkownik@nazwahosta:ZdalnaBazaDanych.kdbx {TEMP_DATABASE}" - - - Input: - Wejście: - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last commend `exit` has to be sent - - np.: -get ZdalnaBazaDanych.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} służy jako symbol zastępczy do przechowywania bazy danych w tymczasowej lokalizacji -Polecenie musi się zakończyć. W przypadku `sftp` jako ostatniego polecenia należy wysłać `exit` - - - - Remote Database (.kdbx) - Zdalna baza danych (.kdbx) - - KMessageWidget @@ -4983,7 +4354,7 @@ Jeśli wystąpi to ponownie, plik bazy danych może być uszkodzony. Invalid inner header data length: field %1, %2 expected, %3 found - Nieprawidłowa długość pola wewnętrznego nagłówka: pole %1, oczekiwano %2, znaleziono %3 + Nieprawidłowa długość wewnętrznego pola nagłówka: pole %1, oczekiwano %2, znaleziono %3 Invalid inner header binary size @@ -5287,6 +4658,17 @@ Wiersz %2, kolumna %3 Nie udało się otworzyć klucza prywatnego + + KeePass1OpenWidget + + Import KeePass1 Database + Importuj bazę danych KeePass1 + + + Unable to open the database. + Nie można otworzyć bazy danych. + + KeePass1Reader @@ -5630,7 +5012,7 @@ Czy na pewno chcesz kontynuować z tym plikiem? Could not register global shortcut - Nie można zarejestrować skrótu globalnego + Nie udało się zarejestrować skrótu globalnego @@ -5643,6 +5025,10 @@ Czy na pewno chcesz kontynuować z tym plikiem? &Recent Databases &Ostatnie bazy danych + + &Import + &Importuj + &Export &Eksportuj @@ -5663,10 +5049,6 @@ Czy na pewno chcesz kontynuować z tym plikiem? TOTP TOTP - - Tags - Tagi - &Groups &Grupy @@ -5711,18 +5093,34 @@ Czy na pewno chcesz kontynuować z tym plikiem? &New Database… &Nowa baza danych… + + Create a new database + Utwórz nową bazę danych + &Merge From Database… &Scal z bazą danych… + + Merge from another KDBX database + Scal z inną bazą KDBX + &New Entry… &Nowy wpis… + + Add a new entry + Dodaj nowy wpis + &Edit Entry… &Edytuj wpis… + + View or edit entry + Podgląd lub edycja wpisu + &Delete Entry… &Usuń wpis… @@ -5731,6 +5129,10 @@ Czy na pewno chcesz kontynuować z tym plikiem? &New Group… &Nowa grupa… + + Add a new group + Dodaj nową grupę + &Edit Group… &Edytuj grupę… @@ -5763,10 +5165,18 @@ Czy na pewno chcesz kontynuować z tym plikiem? Database &Reports… &Raporty bazy danych… + + Statistics, health check, etc. + Statystyki, kontrola zdrowia itp. + &Database Settings… Ustawienia bazy &danych… + + Database settings + Ustawienia bazy danych + &Clone Entry… &Sklonuj wpis… @@ -5775,25 +5185,41 @@ Czy na pewno chcesz kontynuować z tym plikiem? Move u&p Przesuń w &górę + + Move entry one step up + Przesuń wpis o jeden krok w górę + Move do&wn Przesuń w &dół + + Move entry one step down + Przesuń wpis o jeden krok w dół + Copy &Username Skopi&uj nazwę użytkownika + + Copy username to clipboard + Skopiuj użytkownika do schowka + Copy &Password Skopiuj &hasło + + Copy password to clipboard + Skopiuj hasło do schowka + &Settings &Ustawienia &Password Generator - &Generator haseł + &Generator hasła Perform &Auto-Type @@ -5820,13 +5246,21 @@ Czy na pewno chcesz kontynuować z tym plikiem? &Tytuł - Copy &URL - Skopiuj adres &URL + Copy title to clipboard + Skopiuj tytuł do schowka + + + Copy URL to clipboard + Skopiuj adres URL do schowka &Notes &Notatki + + Copy notes to clipboard + Skopiuj notatki do schowka + &CSV File… Plik &CSV… @@ -5839,14 +5273,26 @@ Czy na pewno chcesz kontynuować z tym plikiem? KeePass 1 Database… Baza danych KeePass 1… + + Import a KeePass 1 database + Importuj bazę danych KeePass 1 + 1Password Vault… Sejf 1Password… + + Import a 1Password Vault + Importuj sejf 1Password + CSV File… Plik CSV… + + Import a CSV file + Importuj plik CSV + Show TOTP Pokaż TOTP @@ -5863,10 +5309,6 @@ Czy na pewno chcesz kontynuować z tym plikiem? Copy &TOTP Skopiuj &TOTP - - Copy Password and TOTP - Skopiuj hasło i TOTP - E&mpty recycle bin Opróżnij k&osz @@ -5891,6 +5333,10 @@ Czy na pewno chcesz kontynuować z tym plikiem? &Online Help Po&moc online + + Go to online documentation + Przejdź do dokumentacji online + &User Guide Podręcznik uż&ytkownika @@ -5935,10 +5381,6 @@ Czy na pewno chcesz kontynuować z tym plikiem? Classic (Platform-native) Klasyczny (natywny dla platformy) - - Show Menubar - Pokaż pasek menu - Show Toolbar Pokaż pasek narzędzi @@ -5963,10 +5405,6 @@ Czy na pewno chcesz kontynuować z tym plikiem? Clone Group... Sklonuj grupę... - - &XML File… - Plik &XML… - Clear history Wyczyść historię @@ -5977,7 +5415,7 @@ Czy na pewno chcesz kontynuować z tym plikiem? Don't show again for this version - Nie pokazuj więcej dla tej wersji + Nie pokazuj więcej w tej wersji WARNING: You are using an unstable build of KeePassXC. @@ -5994,8 +5432,10 @@ Expect some bugs and minor issues, this version is meant for testing purposes. - No Tags - Bez tagów + 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. Restore Entry(s) @@ -6025,330 +5465,50 @@ Spodziewaj się pewnych błędów i drobnych problemów, ta wersja jest przeznac Quit KeePassXC Zakończ KeePassXC - - %1 Entry(s) - %1 wpis%1 wpisy%1 wpisów%1 wpisów - Please present or touch your YubiKey to continue… Proszę okazać lub dotknąć swój YubiKey, aby kontynuować… Restart Application? - Uruchomić ponownie aplikację? + Zrestartować aplikację? You must restart the application to apply this setting. Would you like to restart now? - Musisz uruchomić ponownie aplikację, aby zastosować to ustawienie. Czy chcesz teraz to zrobić? + Musisz zrestartować aplikację, aby zastosować to ustawienie. Czy chcesz teraz zrestartować? + + + Tags + Tagi + + + No Tags + Bez tagów + + + %1 Entry(s) + %1 wpis%1 wpisy%1 wpisów%1 wpisów + + + Copy Password and TOTP + Skopiuj hasło i TOTP + + + &XML File… + Plik &XML… + + + XML File… + Plik XML… + + + Copy &URL + Skopiuj adres &URL Allow Screen Capture Zezwól na przechwytywanie ekranu - - 1Password 1PUX... - 1PUX 1Password... - - - Import a 1Password 1PUX file - Importuj plik 1PUX 1Password - - - Import… - Importuj… - - - Passkeys… - Klucz dostępu… - - - Import Passkey - Importuj klucz dostępu - - - Remote S&ync… - Zdalna s&ynchronizacja… - - - Quit Application - Zakończ aplikację - - - Open About Dialog - Otwórz okno dialogowe o programie - - - Open Database - Otwórz bazę danych - - - Create Database - Utwórz bazę danych - - - Merge From Database - Scal z bazą danych - - - Create Entry - Utwórz wpis - - - Edit Entry - Edytuj wpis - - - Delete Entry - Usuń wpis - - - Create Group - Utwórz grupę - - - Edit Group - Edytuj grupę - - - Delete Group - Usuń grupę - - - Download All Favicons - Pobierz wszystkie ikony ulubionych - - - Sort Groups A-Z - Sortuj grupy A-Z - - - Sort Groups Z-A - Sortuj grupy Z-A - - - Save Database As - Zapisz bazę danych jako - - - Show Database Security - Pokaż bezpieczeństwo bazy danych - - - Show Database Reports - Pokaż raporty bazy danych - - - Show Database Settings - Pokaż ustawienia bazy danych - - - Show Passkeys - Pokaż klucze dostępu - - - Clone Entry - Sklonuj wpis - - - Move Entry Up - Przesuń wpis w górę - - - Move Entry Down - Przesuń wpis w dół - - - Copy Username - Skopiuj nazwę użytkownika - - - Copy Password - Skopiuj hasło - - - Show Application Settings - Pokaż ustawienia aplikacji - - - Show Password Generator - Pokaż generator haseł - - - Remove Passkey From Entry - Usuń klucz dostępu z wpisu - - - Perform Auto-Type: {USERNAME} - Wykonaj autowpisywanie: {USERNAME} - - - Perform Auto-Type: {USERNAME}{ENTER} - Wykonaj autowpisywanie: {USERNAME}{ENTER} - - - Perform Auto-Type: {PASSWORD} - Wykonaj autowpisywanie: {PASSWORD} - - - Perform Auto-Type: {PASSWORD}{ENTER} - Wykonaj autowpisywanie: {PASSWORD}{ENTER} - - - Perform Auto-Type: {TOTP} - Wykonaj autowpisywanie: {TOTP} - - - Copy Title - Skopiuj tytuł - - - Copy URL - Skopiuj adres URL - - - Copy Notes - Skopiuj notatki - - - Export to CSV - Eksportuj do CSV - - - Export to HTML - Eksportuj do HTML - - - Import KeePass1 Database - Importuj bazę danych KeePass1 - - - Import 1Password Vault - Importuj sejf 1Password - - - Import CSV File - Importuj plik CSV - - - Show TOTP QR Code - Pokaż kod QR TOTP - - - Set up TOTP - Ustaw TOTP - - - Empty Recycle Bin - Opróżnij kosz - - - Open Donation Website - Otwórz witrynę wspomagania - - - Open Bug Report - Otwórz raport o błędzie - - - Open Online Documentation - Otwórz dokumentację online - - - Open Keyboard Shortcuts Guide - Otwórz przewodnik po skrótach klawiaturowych - - - Save Database Backup - Zapisz kopię zapasową bazy danych - - - SSH Agent: Add Key - Agent SSH: Dodaj klucz - - - SSH Agent: Remove Key - Agent SSH: Usuń klucz - - - Toggle Compact Mode - Przełącz tryb kompaktowy - - - Set Theme: Automatic - Ustaw motyw: Automatyczny - - - Set Theme: Light - Ustaw motyw: Jasny - - - Set Theme: Dark - Ustaw motyw: Ciemny - - - Set Theme: Classic - Ustaw motyw: Klasyczny - - - Toggle Show Menubar - Przełącz pokazywanie paska menu - - - Toggle Show Toolbar - Przełącz pokazywanie paska narzędzi - - - Toggle Show Preview Panel - Przełącz pokazywanie panelu podglądu - - - Toggle Always on Top - Przełącz zawsze na wierzchu - - - Toggle Hide Usernames - Przełącz ukrywanie użytkowników - - - Toggle Hide Passwords - Przełącz ukrywanie haseł - - - Export to XML - Eksportuj do XML - - - Toggle Allow Screen Capture - Przełącz zezwalanie na przechwytywanie ekranu - - - Show Group Panel - Pokaż panel grup - - - Toggle Show Group Panel - Przełącz pokazywanie panelu grup - - - Setup Remote Sync… - Skonfiguruj zdalną synchronizację… - - - Password Generator - Generator haseł - - - E&xpire Entry… - Wy&gaś wpis… - - - Clear SSH Agent - Wyczyść agenta SSH - - - Clear all identities in ssh-agent - Wyczyść wszystkie tożsamości w ssh-agent - ManageDatabase @@ -6404,7 +5564,27 @@ Spodziewaj się pewnych błędów i drobnych problemów, ta wersja jest przeznac Overwriting %1 [%2] - Nadpisywanie %1 [%2] + Zastąpienie %1 [%2] + + + older entry merged from database "%1" + starszy wpis scalony z bazy danych "%1" + + + Adding backup for older target %1 [%2] + Dodawanie kopii zapasowej dla starszego celu %1 [%2] + + + Adding backup for older source %1 [%2] + Dodawanie kopii zapasowej dla starszego źródła %1 [%2] + + + Reapplying older target entry on top of newer source %1 [%2] + Ponowne stosowanie starszego wpisu docelowego na nowszym źródle %1 [%2] + + + Reapplying older source entry on top of newer target %1 [%2] + Ponowne stosowanie starszego wpisu źródłowego na nowszym celu %1 [%2] Synchronizing from newer source %1 [%2] @@ -6465,6 +5645,14 @@ Spodziewaj się pewnych błędów i drobnych problemów, ta wersja jest przeznac Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. Tutaj możesz dostosować ustawienia szyfrowania bazy danych. Nie martw się, możesz je później zmienić w ustawieniach bazy danych. + + Advanced Settings + Ustawienia zaawansowane + + + Simple Settings + Ustawienia proste + NewDatabaseWizardPageDatabaseKey @@ -6499,25 +5687,6 @@ Spodziewaj się pewnych błędów i drobnych problemów, ta wersja jest przeznac Uzupełnij wyświetlaną nazwę i opcjonalny opis nowej bazy danych: - - NewEntryAttachmentsDialog - - Attachment name cannot be empty - Nazwa załącznika nie może być pusta - - - Attachment with the same name already exists - Załącznik o tej samej nazwie już istnieje - - - Save attachment - Zapisz załącznik - - - New entry attachment - Nowy załącznik wpisu - - NixUtils @@ -6530,7 +5699,7 @@ Spodziewaj się pewnych błędów i drobnych problemów, ta wersja jest przeznac Could not register global shortcut - Nie można zarejestrować skrótu globalnego + Nie udało się zarejestrować skrótu globalnego @@ -6564,6 +5733,15 @@ Spodziewaj się pewnych błędów i drobnych problemów, ta wersja jest przeznac Oczekiwano %1 bajtów czystego tekstu, znaleziono %2 + + OpVaultOpenWidget + + Read Database did not produce an instance +%1 + Odczyt bazy danych nie wytworzył wystąpienia +%1 + + OpVaultReader @@ -6637,10 +5815,6 @@ Spodziewaj się pewnych błędów i drobnych problemów, ta wersja jest przeznac Unknown cipher: %1 Nieznany szyfr: %1 - - AES-256/GCM is currently not supported - AES-256/GCM nie jest obecnie obsługiwany - Passphrase is required to decrypt this key Do odszyfrowania tego klucza wymagane jest hasło @@ -6706,183 +5880,8 @@ Spodziewaj się pewnych błędów i drobnych problemów, ta wersja jest przeznac Nieoczekiwany koniec pliku (EOF) podczas zapisu klucza prywatnego - (encrypted) - (zaszyfrowane) - - - - OpenSSHKeyGenDialog - - SSH Key Generator - Generator kluczy SSH - - - Type - Typ - - - Bits - Bity - - - Comment - Komentarz - - - - PasskeyExportDialog - - KeePassXC - Passkey Export - KeePassXC - Eksport kluczy dostępu - - - Filenames will be generated with title and .passkey file extension. - Nazwy plików zostaną wygenerowane z tytułem i rozszerzeniem pliku .passkey. - - - Export entries - Eksportuj wpisy - - - Export Selected - Eksportuj wybrane - - - Cancel - Anuluj - - - Export to folder - Eksportuj do folderu - - - Export the following passkey entries. - Eksportuj następujące wpisy klucza dostępu. - - - - PasskeyExporter - - KeePassXC: Passkey Export - KeePassXC: Eksport kluczy dostępu - - - File "%1.passkey" already exists. -Do you want to overwrite it? - - Plik "%1.passkey" już istnieje. -Czy chcesz go zastąpić? - - - - Cannot open file - Nie można otworzyć pliku - - - Cannot open file "%1" for writing. - Nie można otworzyć pliku "%1" do zapisu. - - - Cannot write to file - Nie można zapisać do pliku - - - - PasskeyImportDialog - - KeePassXC - Passkey Import - KeePassXC - Import kluczy dostępu - - - Username: %1 - Nazwa użytkownika: %1 - - - Group - Grupa - - - Database - Baza danych - - - Import Passkey - Importuj klucz dostępu - - - Import - Importuj - - - Cancel - Anuluj - - - Entry - Wpis - - - Create new entry - Utwórz nowy wpis - - - Relying Party: %1 - Strona ufająca: %1 - - - Import the following passkey: - Importuj następujący klucz dostępu: - - - Import the following passkey to this entry: - Importuj następujący klucz dostępu do tego wpisu: - - - Default passkeys group (Imported Passkeys) - Domyślna grupa kluczy dostępu (importowane klucze dostępu) - - - - PasskeyImporter - - Passkey file - Plik klucza dostępu - - - All files - Wszystkie pliki - - - Cannot open file - Nie można otworzyć pliku - - - Cannot open file "%1" for reading. - Nie można otworzyć pliku "%1" do odczytu. - - - Open passkey file - Otwórz plik klucza dostępu - - - Cannot import passkey - Nie można zaimportować klucza dostępu - - - Cannot import passkey file "%1". Data is missing. - Nie można zaimportować pliku klucza dostępu "%1". Brak danych. - - - Cannot import passkey file "%1". -The following data is missing: -%2 - Nie można zaimportować pliku klucza dostępu "%1". -Brakuje następujących danych: -%2 - - - Cannot import passkey file "%1". Private key is missing or malformed. - Nie można zaimportować pliku klucza dostępu "%1". Brak klucza prywatnego lub jest on źle sformatowany. + AES-256/GCM is currently not supported + AES-256/GCM nie jest obecnie obsługiwany @@ -7087,6 +6086,10 @@ Brakuje następujących danych: Word Count: Liczba słów: + + Character Count: + Liczba znaków: + Word Case: Rozmiar słowa: @@ -7099,6 +6102,10 @@ Brakuje następujących danych: Add custom wordlist Dodaj niestandardową listę słów + + character + znak + Close Zamknij @@ -7135,30 +6142,6 @@ Brakuje następujących danych: Entropy: %1 bit Entropia: %1 bity - - Password Quality: %1 - Jakość hasła: %1 - - - Poor - Password quality - Uboga - - - Weak - Password quality - Słaba - - - Good - Password quality - Dobra - - - Excellent - Password quality - Znakomita - Confirm Delete Wordlist Potwierdź usunięcie listy słów @@ -7191,7 +6174,7 @@ Brakuje następujących danych: Wordlist "%1" already exists as a custom wordlist. Do you want to overwrite it? Lista słów "%1" już istnieje jako niestandardowa lista słów. -Czy chcesz ją zastąpić? +Czy chcesz ją nadpisać? Failed to add wordlist @@ -7206,20 +6189,32 @@ Czy chcesz ją zastąpić? Znaki specjalne - passwordLength - Długość hasła + Password Quality: %1 + Jakość hasła: %1 - Characters: %1 - Znaki: %1 + Poor + Password quality + Uboga - MIXED case - MIESZANE litery + Weak + Password quality + Słaba - Excluded characters: "0", "1", "l", "I", "O", "|", "﹒", "B", "8", "G", "6" - Wykluczone znaki: "0", "1", "l", "I", "O", "|", "﹒", "B", "8", "G", "6" + Good + Password quality + Dobra + + + Excellent + Password quality + Znakomita + + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + Wykluczone znaki: "0", "1", "l", "I", "O", "|", "﹒" @@ -7269,7 +6264,7 @@ Czy chcesz ją zastąpić? Znakomita - Toggle password visibility using Control + H. Open the password generator using Control + G. + Toggle password visibilty using Control + H. Open the password generator using Control + G. Przełącz widoczność hasła za pomocą Control + H. Otwórz generator haseł za pomocą Control + G. @@ -7288,21 +6283,6 @@ Czy chcesz ją zastąpić? Naciskaj &Tab między znakami - - PreviewEntryAttachmentsDialog - - Preview entry attachment - Podgląd załącznika wpisu - - - No preview available - Brak podglądu - - - Image format not supported - Format obrazu nie jest obsługiwany - - QMessageBox @@ -7319,7 +6299,7 @@ Czy chcesz ją zastąpić? Empty - Opróżnij + Pusty Remove @@ -7341,10 +6321,6 @@ Czy chcesz ją zastąpić? Continue Kontynuuj - - Continue with weak password - Kontynuuj ze słabym hasłem - QObject @@ -7366,7 +6342,7 @@ Czy chcesz ją zastąpić? Action cancelled or denied - Czynność anulowana lub odrzucona + Działanie anulowane lub odrzucone Message encryption failed. @@ -7382,7 +6358,7 @@ Czy chcesz ją zastąpić? Incorrect action - Nieprawidłowa czynność + Nieprawidłowe działanie Empty message received @@ -7454,7 +6430,7 @@ Czy chcesz ją zastąpić? Generate a password for the entry. - Wygeneruj hasło do wpisu. + Wygeneruj hasło dla wpisu. Add a new entry to a database. @@ -7672,7 +6648,7 @@ Czy chcesz ją zastąpić? ERROR: Please specify one of --attribute or --totp, not both. - BŁĄD: Określ jeden z --attribute lub --totp, a nie oba. + BŁĄD: Proszę określić jeden z --atrybut lub --totp, a nie oba. Entry with path %1 has no TOTP set up. @@ -7738,10 +6714,6 @@ Czy chcesz ją zastąpić? Too many arguments provided. Podano zbyt wiele argumentów. - - Path of the database. - Ścieżka bazy danych. - Target decryption time in MS for the database. Docelowy czas odszyfrowywania w ms dla bazy danych. @@ -7752,16 +6724,20 @@ Czy chcesz ją zastąpić? Set the key file for the database. - Ustaw plik klucza do bazy danych. + Ustaw plik klucza dla bazy danych. Set a password for the database. - Ustaw hasło do bazy danych. + Ustaw hasło bazy danych. Create a new database. Utwórz nową bazę danych. + + Path of the database. + Ścieżka bazy danych. + Invalid decryption time %1. Nieprawidłowy czas odszyfrowywania %1. @@ -7806,158 +6782,6 @@ Czy chcesz ją zastąpić? Successfully created new database. Pomyślnie utworzono nową bazę danych. - - Unset the password for the database. - Usuń hasło do bazy danych. - - - Unset the key file for the database. - Usuń plik klucza do bazy danych. - - - Edit a database. - Edytuj bazę danych. - - - Cannot use %1 and %2 at the same time. - Nie można jednocześnie używać %1 i %2. - - - Could not change the database key. - Nie można zmienić klucza bazy danych. - - - Database was not modified. - Baza danych nie została zmodyfikowana. - - - Writing the database failed: %1 - Błąd zapisu bazy danych: %1 - - - Successfully edited the database. - Pomyślnie edytowano bazę danych. - - - Cannot remove password: The database does not have a password. - Nie można usunąć hasła: baza danych nie ma hasła. - - - Cannot remove file key: The database does not have a file key. - Nie można usunąć pliku klucza: baza danych nie ma pliku klucza. - - - Loading the new key file failed: %1 - Ładowanie nowego pliku klucza nie powiodło się: %1 - - - Found unexpected Key type %1 - Znaleziono nieoczekiwany typ %1 klucza - - - Cannot remove all the keys from a database. - Nie można usunąć wszystkich kluczy z bazy danych. - - - Show a database's information. - Pokaż informacje o bazie danych. - - - UUID: - UUID: - - - Name: - Nazwa: - - - Description: - Opis: - - - Cipher: - Szyfr: - - - KDF: - KDF: - - - Recycle bin is enabled. - Kosz jest włączony. - - - Recycle bin is not enabled. - Kosz nie jest włączony. - - - Location - Lokalizacja - - - Database created - Utworzono bazę danych - - - Last saved - Ostatnio zapisane - - - Unsaved changes - Niezapisane zmiany - - - yes - tak - - - no - nie - - - Number of groups - Liczba grup - - - Number of entries - Liczba wpisów - - - Number of expired entries - Liczba wygasłych wpisów - - - Unique passwords - Niepowtarzalne hasła - - - Non-unique passwords - Powtarzalne hasła - - - Maximum password reuse - Maksymalne ponowne użycie hasła - - - Number of short passwords - Liczba krótkich haseł - - - Number of weak passwords - Liczba słabych haseł - - - Entries excluded from reports - Wpisy wykluczone z raportów - - - Average password length - Średnia długość hasła - - - %1 characters - %1 znaków - Word count for the diceware passphrase. Liczba słów dla hasła diceware. @@ -7981,6 +6805,10 @@ Czy chcesz ją zastąpić? Invalid word count %1 Nieprawidłowa liczba wyrazów %1 + + The word list is too small (< 1000 items) + Lista wyrazów jest za mała (< 1000 elementów) + Title for the entry. Tytuł dla wpisu. @@ -8005,6 +6833,10 @@ Czy chcesz ją zastąpić? 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. @@ -8043,7 +6875,7 @@ Czy chcesz ją zastąpić? Type: Dictionary - Type: Słownikowy + Typ: Słownikowy Type: Dict+Leet @@ -8125,6 +6957,10 @@ Czy chcesz ją zastąpić? Exit interactive mode. Wyjdź z trybu interaktywnego. + + Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. + Formatowanie do użycia podczas eksportowania. Dostępne opcje to 'xml' lub 'csv'. Domyślnie wartość 'xml'. + Exports the content of a database to standard output in the specified format. Eksportuje zawartość bazy danych do standardowego wyjścia w określonym formacie. @@ -8225,6 +7061,106 @@ Czy chcesz ją zastąpić? Successfully imported database. Pomyślnie zaimportowano bazę danych. + + Show a database's information. + Pokaż informacje o bazie danych. + + + UUID: + UUID: + + + Name: + Nazwa: + + + Description: + Opis: + + + Cipher: + Szyfr: + + + KDF: + KDF: + + + Recycle bin is enabled. + Kosz jest włączony. + + + Recycle bin is not enabled. + Kosz nie jest włączony. + + + Location + Lokalizacja + + + Database created + Utworzono bazę danych + + + Last saved + Ostatnio zapisane + + + Unsaved changes + Niezapisane zmiany + + + yes + tak + + + no + nie + + + Number of groups + Liczba grup + + + Number of entries + Liczba wpisów + + + Number of expired entries + Liczba wygasłych wpisów + + + Unique passwords + Niepowtarzalne hasła + + + Non-unique passwords + Powtarzalne hasła + + + Maximum password reuse + Maksymalne ponowne użycie hasła + + + Number of short passwords + Liczba krótkich haseł + + + Number of weak passwords + Liczba słabych haseł + + + Entries excluded from reports + Wpisy wykluczone z raportów + + + Average password length + Średnia długość hasła + + + %1 characters + %1 znaków + Unknown command %1 Nieznane polecenie %1 @@ -8397,17 +7333,13 @@ Dostępne polecenia: Show the protected attributes in clear text. Pokaż chronione atrybuty w postaci zwykłego tekstu. - - Show all the attributes of the entry. - Pokaż atrybuty wpisu. - Show the attachments of the entry. Pokaż załączniki wpisu. 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 i w określonej kolejności. Jeśli atrybuty nie są określone, wyświetla się podsumowanie domyślnych atrybutów. + 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 @@ -8471,10 +7403,6 @@ Rozważ wygenerowanie nowego pliku klucza. Invalid YubiKey serial %1 Nieprawidłowy numer seryjny YubiKey %1 - - Please present or touch your YubiKey to continue. - Proszę okazać lub dotknąć YubiKey, aby kontynuować. - Enter password to encrypt database (optional): Wprowadź hasło do szyfrowania bazy danych (opcjonalnie): @@ -8489,7 +7417,7 @@ Rozważ wygenerowanie nowego pliku klucza. Error: Passwords do not match. - Błąd: Hasła nie są zgodne. + Błąd: hasła nie są zgodne. No program defined for clipboard manipulation @@ -8523,7 +7451,7 @@ Rozważ wygenerowanie nowego pliku klucza. Error: okon process did not finish - Błąd: Proces okon się nie zakończył + Błąd: proces okon nie zakończył się Failed to load okon processed database: %1 @@ -8627,7 +7555,7 @@ Jądro: %3 %4 Secret Service Integration - Integracja z usługą sekretną + Integracja usługi sekretnej None @@ -8675,7 +7603,7 @@ Jądro: %3 %4 Argon2%1 (%2 rounds, %3 KB) - Argon2%1 (%2 rundy, %3 KB) + Argon2%1 (%2 rund, %3 KB) SymmetricCipher::init: Invalid cipher mode. @@ -8713,6 +7641,18 @@ Jądro: %3 %4 file empty plik pusty + + malformed string + nieprawidłowy ciąg + + + missing closing quote + brak cytatu zamknięcia + + + %1: (row, col) %2,%3 + %1: (rząd, kolumna) %2,%3 + AES 256-bit AES 256-bitowy @@ -8783,7 +7723,7 @@ Jądro: %3 %4 Created - Utworzono + Utworzone Benchmark %1 delay @@ -8891,6 +7831,14 @@ Jądro: %3 %4 read password of the database from stdin odczytaj hasło bazy danych z stdin + + allow app screen recordering and screenshots + zezwalaj na aplikację nagrywania ekranu i zrzuty ekranu + + + Locked databases. + Zablokowane bazy danych. + Database failed to lock. Nie udało się zablokować bazy danych. @@ -8899,10 +7847,6 @@ Jądro: %3 %4 Another instance of KeePassXC is already running. Inna instancja KeePassXC jest już uruchomiona. - - KeePassXC is not running. No open database to lock - KeePassXC nie jest uruchomiony. Brak otwartej bazy danych do zablokowania - Fatal error while testing the cryptographic functions. Błąd krytyczny podczas testowania funkcji kryptograficznych. @@ -8946,300 +7890,70 @@ Jądro: %3 %4 Nieprawidłowa KDF - Access to all entries is denied - Dostęp do wszystkich wpisów jest zabroniony + Please present or touch your YubiKey to continue. + Proszę okazać lub dotknąć YubiKey, aby kontynuować. - allow screenshots and app recording (Windows/macOS) - zezwól na zrzuty ekranu i nagrywanie aplikacji (Windows/macOS) + Show all the attributes of the entry. + Pokaż atrybuty wpisu. + + + Edit a database. + Edytuj bazę danych. + + + Could not change the database key. + Nie można zmienić klucza bazy danych. + + + Database was not modified. + Baza danych nie została zmodyfikowana. + + + Successfully edited the database. + Pomyślnie edytowano bazę danych. + + + Loading the new key file failed: %1 + Ładowanie nowego pliku klucza nie powiodło się: %1 + + + Unset the password for the database. + Usuń hasło do bazy danych. + + + Unset the key file for the database. + Usuń plik klucza do bazy danych. + + + Cannot use %1 and %2 at the same time. + Nie można jednocześnie używać %1 i %2. + + + Cannot remove all the keys from a database. + Nie można usunąć wszystkich kluczy z bazy danych. + + + Cannot remove password: The database does not have a password. + Nie można usunąć hasła: baza danych nie ma hasła. + + + Cannot remove file key: The database does not have a file key. + Nie można usunąć pliku klucza: baza danych nie ma pliku klucza. + + + Found unexpected Key type %1 + Znaleziono nieoczekiwany typ %1 klucza Set the key file for the database. -This option is deprecated, use --set-key-file instead. +This options is deprecated, use --set-key-file instead. Ustaw plik klucza do bazy danych. Ta opcja jest przestarzała, zamiast jej użyj --set-key-file. - Databases have been locked. - Bazy danych zostały zablokowane. - - - Attestation not supported - Atestacja nie jest obsługiwana - - - Credential is excluded - Dane uwierzytelniające są wyłączone - - - Passkeys request canceled - Żądanie kluczy dostępu anulowano - - - Invalid user verification - Nieprawidłowa weryfikacja użytkownika - - - Empty public key - Pusty klucz publiczny - - - Invalid URL provided - Podano nieprawidłowy adres URL - - - Passkeys - Klucze dostępu - - - AES initialization failed - Inicjalizacja AES nie powiodła się - - - AES encrypt failed - Szyfrowanie AES nie powiodło się - - - Failed to store in Linux Keyring - Nie udało się zapisać w bazie kluczy systemu Linux - - - Polkit returned an error: %1 - Polkit zwrócił błąd: %1 - - - Could not locate key in keyring - Nie można zlokalizować klucza w bazie kluczy - - - Could not read key in keyring - Nie można odczytać klucza w bazie kluczy - - - AES decrypt failed - Odszyfrowanie AES nie powiodło się - - - No Polkit authentication agent was available - Żaden agent uwierzytelniający Polkit nie był dostępny - - - Polkit authorization failed - Uwierzytelnienie Polkit nie powiodło się - - - No Quick Unlock provider is available - Żaden dostawca szybkiego odblokowania nie jest dostępny - - - Failed to init KeePassXC crypto. - Nie udało się zainicjować krypto KeePassXC. - - - Failed to encrypt key data. - Nie udało się zaszyfrować danych klucza. - - - Failed to get Windows Hello credential. - Nie udało się uzyskać danych uwierzytelniających Windows Hello. - - - Failed to decrypt key data. - Nie udało się odszyfrować danych klucza. - - - Origin is empty or not allowed - Źródło jest puste lub niedozwolone - - - Effective domain is not a valid domain - Domena efektywna nie jest domeną prawidłową - - - Origin and RP ID do not match - Źródło i identyfikator RP nie są zgodne - - - No supported algorithms were provided - Nie zapewniono obsługiwanych algorytmów - - - Wait for timer to expire - Poczekaj, aż upłynie limit czasu - - - Challenge is shorter than required minimum length - Wyzwanie jest krótsze niż wymagana długość minimalna - - - user.id does not match the required length - user.id nie ma wymaganej długości - - - Favorite - Tag for favorite entries - Ulubiony - - - File does not exist. - Plik nie istnieje. - - - Cannot open file: %1 - Nie można otworzyć pliku: %1 - - - Cannot parse file: %1 at position %2 - Nie można przeanalizować pliku: %1 na pozycji %2 - - - Failed to decrypt json file: %1 - Nie udało się odszyfrować pliku JSON: %1 - - - Invalid encKeyValidation field - Nieprawidłowe pole encKeyValidation - - - Invalid cipher list within encKeyValidation field - Nieprawidłowa lista szyfrów w polu encKeyValidation - - - Wrong password - Nieprawidłowe hasło - - - Invalid encrypted data field - Nieprawidłowe pole zaszyfrowanych danych - - - Invalid cipher list within encrypted data field - Nieprawidłowa lista szyfrów w polu zaszyfrowanych danych - - - Cannot initialize cipher - Nie można zainicjować szyfru - - - Cannot decrypt data - Nie można odszyfrować danych - - - Bitwarden Import - Import Bitwarden - - - Archived - Tag for archived entries - Zarchiwizowane - - - Invalid 1PUX file format: Not a valid ZIP file. - Nieprawidłowy format pliku 1PUX: Nie jest to prawidłowy plik ZIP. - - - Invalid 1PUX file format: Missing export.data - Nieprawidłowy format pliku 1PUX: Brak export.data - - - 1Password Import - Import 1Password - - - Enter Shortcut - Wprowadź skrót - - - Action - Czynność - - - Shortcuts - Skróty - - - Unknown passkeys error - Nieznany błąd klucza dostępu - - - Invalid KDF iterations, cannot decrypt json file - Nieprawidłowe iteracje KDF, nie można odszyfrować pliku JSON - - - Unsupported format, ensure your Bitwarden export is password-protected - Nieobsługiwany format. Upewnij się, że eksport Bitwarden jest chroniony hasłem - - - Only PBKDF and Argon2 are supported, cannot decrypt json file - Obsługiwane są tylko PBKDF i Argon2, nie można odszyfrować pliku JSON - - - Reset Shortcuts - Zresetuj skróty - - - Double click an action to change its shortcut - Kliknij dwukrotnie czynność, aby zmienić jej skrót - - - Filter... - Filtr... - - - Shortcut Conflict - Konflikt skrótów - - - Shortcut %1 conflicts with '%2'. Overwrite shortcut? - Skrót %1 powoduje konflikt z '%2'. Nadpisać skrót? - - - Cannot generate valid passphrases because the wordlist is too short - Nie można wygenerować prawidłowych haseł, ponieważ lista słów jest zbyt krótka - - - Encrypted files are not supported. - Pliki zaszyfrowane nie są obsługiwane. - - - Proton Pass Import - Import Proton Pass - - - Delete plugin data? - Usunąć dane wtyczki? - - - Delete plugin data from Entry(s)? - Usunąć dane wtyczki z wpisu?Usunąć dane wtyczki z wpisów?Usunąć dane wtyczki z wpisów?Usunąć dane wtyczki z wpisów? - - - Passkey - Klucz dostępu - - - Format to use when exporting. Available choices are 'xml', 'csv' or 'html'. Defaults to 'xml'. - Format do użycia podczas eksportowania. Dostępne opcje to 'xml', 'csv' lub 'html'. Domyślnie 'xml'. - - - start minimized to the system tray - uruchom zminimalizowany do zasobnika systemowego - - - malformed string, possible unescaped delimiter - zniekształcony ciąg, prawdopodobnie ogranicznik bez ucieczki - - - missing closing delimiter - brak ogranicznika zamykającego - - - %1, row: %2, column: %3 - %1, wiersz: %2, kolumna: %3 - - - Tags - Tagi + KeePassXC is not running. No open database to lock + KeePassXC nie jest uruchomiony. Brak otwartej bazy danych do zablokowania @@ -9276,39 +7990,20 @@ Ta opcja jest przestarzała, zamiast jej użyj --set-key-file. Błąd wewnętrzny zlib: - - RemoteHandler - - Command `%1` did not finish in time. Process was killed. - Polecenie `%1` nie zostało zakończone na czas. Proces został usunięty. - - - Failed to upload merged database. Command `%1` did not finish in time. Process was killed. - Nie udało się wysłać scalonej bazy danych. Polecenie `%1` nie zostało zakończone na czas. Proces został usunięty. - - - Invalid download parameters provided. - Podano nieprawidłowe parametry pobierania. - - - Command `%1` failed to download database. - Poleceniu `%1` nie udało się pobrać bazy danych. - - - Invalid database pointer or upload parameters provided. - Podano nieprawidłowy wskaźnik bazy danych lub parametry wysyłania. - - - Command `%1` exited with status code: %2 - Polecenie `%1` zostało zakończone z kodem stanu: %2 - - - Failed to upload merged database. Command `%1` exited with status code: %2 - Nie udało się wysłać scalonej bazy danych. Polecenie `%1` zostało zakończone z kodem stanu: %2 - - ReportsWidgetBrowserStatistics + + Exclude expired entries from the report + Wyklucz wygasłe wpisy z raportu + + + Show only entries which have URL set + Pokazuj tylko wpisy z ustawionym adresem URL + + + Show only entries which have browser settings in custom data + Pokazuj tylko wpisy, które mają ustawienia przeglądarki w danych niestandardowych + Double-click entries to edit. Kliknij dwukrotnie wpisy, aby edytować. @@ -9373,53 +8068,44 @@ Ta opcja jest przestarzała, zamiast jej użyj --set-key-file. Exclude from reports Wyklucz z raportów - - Expire Entry(s)… - Wygaś wpis…Wygaś wpisy…Wygaś wpisy…Wygaś wpisy… - - - Only show entries that have a URL - Pokaż tylko wpisy, które mają adres URL - - - Only show entries that have been explicitly allowed or denied - Pokaż tylko te wpisy, które zostały wyraźnie dozwolone lub odrzucone - - - Show expired entries - Pokaż wygasłe wpisy - - - (Expired) - (Wygasłe) - - - Delete plugin data from Entry(s)… - Usuń dane wtyczki z wpisu…Usuń dane wtyczki z wpisów…Usuń dane wtyczki z wpisów…Usuń dane wtyczki z wpisów… - ReportsWidgetHealthcheck - Show expired entries - Pokaż wygasłe wpisy + Exclude expired entries from the report + Wyklucz wygasłe wpisy z raportu - (Expired) - (Wygasłe) + Also show entries that have been excluded from reports + Pokaż również wpisy, które zostały wykluczone z raportów Hover over reason to show additional details. Double-click entries to edit. Umieść wskaźnik myszy nad powodem, aby wyświetlić dodatkowe szczegóły. Kliknij dwukrotnie wpisy, aby edytować. + + Bad + Password quality + Zła + Bad — password must be changed Złe — hasło musi zostać zmienione + + Poor + Password quality + Uboga + Poor — password should be changed Ubogie — hasło powinno zostać zmienione + + Weak + Password quality + Słaba + Weak — consider changing the password Słabe — rozważ zmianę hasła @@ -9468,14 +8154,6 @@ Ta opcja jest przestarzała, zamiast jej użyj --set-key-file. Exclude from reports Wyklucz z raportów - - Expire Entry(s)… - Wygaś wpis…Wygaś wpisy…Wygaś wpisy…Wygaś wpisy… - - - Show entries that have been excluded from reports - Pokaż wpisy, które zostały wykluczone z raportów - ReportsWidgetHibp @@ -9571,77 +8249,6 @@ Ta opcja jest przestarzała, zamiast jej użyj --set-key-file. Exclude from reports Wyklucz z raportów - - Expire Entry(s)… - Wygaś wpis…Wygaś wpisy…Wygaś wpisy…Wygaś wpisy… - - - - ReportsWidgetPasskeys - - Export - Eksportuj - - - Import - Importuj - - - List of entry URLs - Lista adresów URL wpisu - - - Title - Tytuł - - - Path - Ścieżka - - - Username - Użytkownik - - - URLs - Adresy URL - - - Edit Entry… - Edytuj wpis… - - - Delete Entry(s)… - Usuń wpis…Usuń wpisy…Usuń wpisy…Usuń wpisy… - - - Relying Party - Strona ufająca - - - Show expired entries - Pokaż wygasłe wpisy - - - (Expired) - (Wygasłe) - - - Export Confirmation - Potwierdzenie eksportu - - - The passkey file will be vulnerable to theft and unauthorized use, if left unsecured. Are you sure you want to continue? - Plik klucza dostępu będzie narażony na kradzież i nieupoważnione użycie, jeśli pozostanie niezabezpieczony. Czy na pewno chcesz kontynuować? - - - Please wait, list of entries with passkeys is being updated… - Proszę czekać, lista wpisów z kluczami dostępu jest aktualizowana… - - - No entries with passkeys. - Brak wpisów z kluczami dostępu. - ReportsWidgetStatistics @@ -9816,14 +8423,6 @@ Ta opcja jest przestarzała, zamiast jej użyj --set-key-file. No agent running, cannot list identities. Żaden agent uruchomiony, nie może wyświetlić listy tożsamości. - - Failed to remove all SSH identities from agent. - Nie udało się usunąć wszystkich tożsamości SSH agenta. - - - All SSH identities removed from agent. - Wszystkie tożsamości SSH zostały usunięte z agenta. - SearchHelpWidget @@ -9890,10 +8489,6 @@ Ta opcja jest przestarzała, zamiast jej użyj --set-key-file. Search Help Przeszukaj pomoc - - Save Search - Zapisz wyszukiwanie - Search (%1)… Search placeholder text, %1 is the keyboard shortcut @@ -9907,6 +8502,10 @@ Ta opcja jest przestarzała, zamiast jej użyj --set-key-file. Limit search to selected group Ogranicz wyszukiwanie do wybranych grup + + Save Search + Zapisz wyszukiwanie + SettingsClientModel @@ -9968,10 +8567,34 @@ Ta opcja jest przestarzała, zamiast jej użyj --set-key-file. Confirm when passwords are retrieved by clients Potwierdź, gdy hasła są pobierane przez klientów + + <html><head/><body><p><span style=" + font-family:'-apple-system','BlinkMacSystemFont','Segoe UI','Helvetica','Arial','sans-serif','Apple Color + Emoji','Segoe UI Emoji'; font-size:14px; color:#24292e; background-color:#ffffff;">This setting does + not override disabling recycle bin prompts</span></p></body></html> + + <html><head/><body><p><span style=" + font-family:'-apple-system','BlinkMacSystemFont','Segoe UI','Helvetica','Arial','sans-serif','Apple Color + Emoji','Segoe UI Emoji'; font-size:14px; color:#24292e; background-color:#ffffff;">To ustawienie + nie zastępuje wyłączania monitów dotyczących kosza</span></p></body></html> + + Confirm when clients request entry deletion Potwierdź, gdy klienty zażądają usunięcia wpisu + + <html><head/><body><p>This improves compatibility with certain applications + which search for password without unlocking the database first.</p><p>But enabling this may also + crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a + different value set in applications.)</p></body></html> + + <html><head/><body><p>Poprawia to kompatybilność z niektórymi aplikacjami, + które szukają hasła bez uprzedniego odblokowania bazy danych.</p><p>Ale włączenie tego może również + spowodować awarię klienta, jeśli bazy danych nie można odblokować w określonym czasie. (Zwykle 25 s, ale + w aplikacjach może to być inna wartość.)</p></body></html> + + Prompt to unlock database before searching Pytaj o odblokowanie bazy danych przed wyszukiwaniem @@ -9996,14 +8619,6 @@ Ta opcja jest przestarzała, zamiast jej użyj --set-key-file. Save current changes to activate the plugin and enable editing of this section. Zapisz bieżące zmiany, aby aktywować wtyczkę i włączyć edycję tej sekcji. - - <html><head/><body><p>This setting does not override disabling recycle bin prompts </p></body></html> - <html><head/><body><p>To ustawienie nie zastępuje wyłączenia monitów kosza </p></body></html> - - - <html><head/><body><p>This improves compatibility with certain applications which search for password without unlocking the database first.</p><p>But enabling this may also crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a different value set in applications.) </p></body></html> - <html><head/><body><p>Poprawia to kompatybilność z niektórymi aplikacjami, które szukają hasła bez uprzedniego odblokowania bazy danych.</p><p>Ale włączenie tego może również spowodować awarię klienta, jeśli bazy danych nie można odblokować w określonym czasie (zwykle 25 s, ale w aplikacjach może to być inna wartość). </p></body></html> - SettingsWidgetKeeShare @@ -10013,19 +8628,19 @@ Ta opcja jest przestarzała, zamiast jej użyj --set-key-file. Allow KeeShare imports - Zezwól na importowanie KeeShare + Zezwalaj na importowanie KeeShare Allow import - Zezwól na import + Pozwól importować Allow KeeShare exports - Zezwól na eksportowanie KeeShare + Zezwalaj na eksportowanie KeeShare Allow export - Zezwól na eksport + Pozwól eksportować Only show warnings and errors @@ -10064,7 +8679,7 @@ Ta opcja jest przestarzała, zamiast jej użyj --set-key-file. ShareExport Could not write export container. - Nie można zapisać kontenera eksportu. + Nie udało się zapisać kontenera eksportu. @@ -10111,14 +8726,6 @@ Ta opcja jest przestarzała, zamiast jej użyj --set-key-file. TagModel - - Clear Search - Wyczyść wyszukiwanie - - - All Entries - Wszystkie wpisy - Expired Wygasłe @@ -10127,6 +8734,14 @@ Ta opcja jest przestarzała, zamiast jej użyj --set-key-file. Weak Passwords Słabe hasła + + All Entries + Wszystkie wpisy + + + Clear Search + Wyczyść wyszukiwanie + TagView @@ -10239,7 +8854,7 @@ Ta opcja jest przestarzała, zamiast jej użyj --set-key-file. digits - cyfr + cyfry Invalid TOTP Secret @@ -10304,6 +8919,26 @@ Przykład: JBSWY3DPEHPK3PXP Start storing your passwords securely in a KeePassXC database Zacznij bezpiecznie przechowywać swoje hasła w bazie danych KeePassXC + + Create new database + Utwórz nową bazę danych + + + Open existing database + Otwórz istniejącą bazę danych + + + Import from KeePass 1 + Importuj z KeePass 1 + + + Import from 1Password + Importuj z 1Password + + + Import from CSV + Importuj z CSV + Recent databases Ostatnie bazy danych @@ -10316,18 +8951,6 @@ Przykład: JBSWY3DPEHPK3PXP Welcome to KeePassXC %1 Witaj w KeePassXC %1 - - Create Database - Utwórz bazę danych - - - Open Database - Otwórz bazę danych - - - Import File - Importuj plik - WinUtils @@ -10341,11 +8964,34 @@ Przykład: JBSWY3DPEHPK3PXP Could not register global shortcut - Nie można zarejestrować skrótu globalnego + Nie udało się zarejestrować skrótu globalnego + + + + WindowsHello + + Failed to init KeePassXC crypto. + Nie udało się zainicjować krypto KeePassXC. + + + Failed to encrypt key data. + Nie udało się zaszyfrować danych klucza. + + + Failed to get Windows Hello credential. + Nie udało się uzyskać danych uwierzytelniających Windows Hello. + + + Failed to decrypt key data. + Nie udało się odszyfrować danych klucza. YubiKey + + %1 No interface, slot %2 + %1 brak interfejsu, gniazdo %2 + General: Ogólne: @@ -10357,6 +9003,14 @@ Przykład: JBSWY3DPEHPK3PXP YubiKeyEditWidget + + Refresh hardware tokens + Odśwież tokeny sprzętowe + + + Refresh + Odśwież + Hardware key slot selection Wybór gniazda klucza sprzętowego @@ -10389,6 +9043,10 @@ Przykład: JBSWY3DPEHPK3PXP Challenge-Response set, click to change or remove Ustawiono wyzwanie-odpowiedź, kliknij, aby zmienić lub usunąć + + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + <p>Jeśli jesteś właścicielem <a href="https://www.yubico.com/">YubiKey</a> lub <a href="https://onlykey.io">OnlyKey</a>, możesz użyć takiego klucza do zwiększenia bezpieczeństwa.</p><p>Wymaga on zaprogramowania jednego z jego gniazd jako <a href="https://www.yubico.com/products/services-software/challenge-response/">wyzwanie-odpowiedź HMAC-SHA1</a>.</p> + Detecting hardware keys… Wykrywanie kluczy sprzętowych… @@ -10397,28 +9055,31 @@ Przykład: JBSWY3DPEHPK3PXP No hardware keys detected Nie wykryto kluczy sprzętowych + + + YubiKeyInterface - Refresh hardware keys - Odśwież klucze sprzętowe - - - <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed with <a href="https://keepassxc.org/docs/#faq-yubikey-howto">Challenge-Response</a>.</p> - <p>Jeśli jesteś właścicielem <a href="https://www.yubico.com/">YubiKey</a> lub <a href="https://onlykey.io">OnlyKey</a>, możesz użyć takiego klucza do zwiększenia bezpieczeństwa.</p><p>Wymaga on zaprogramowania jednego z jego gniazd w trybie <a href="https://keepassxc.org/docs/#faq-yubikey-howto">wyzwanie-odpowiedź</a>.</p> - - - Hardware keys found, but no slots are configured - Znaleziono klucze sprzętowe, ale nie skonfigurowano żadnych gniazd + %1 Invalid slot specified - %2 + %1 określono nieprawidłowe gniazdo - %2 YubiKeyInterfacePCSC + + (PCSC) %1 [%2] Challenge-Response - Slot %3 + (PCSC) %1 [%2] wyzwanie-odpowiedź - gniazdo %3 + The YubiKey PCSC interface has not been initialized. Interfejs PCSC YubiKey nie został zainicjowany. + + Hardware key is currently in use. + Klucz sprzętowy jest obecnie używany. + Could not find or access hardware key with serial number %1. Please present it to continue. - Nie można znaleźć lub uzyskać dostępu do klucza sprzętowego o numerze seryjnym %1. Proszę go okazać, aby kontynuować. + Nie można znaleźć lub uzyskać dostępu do klucza sprzętowego o numerze seryjnym %1. Proszę go okazać, aby kontynuować. Hardware key is locked or timed out. Unlock or re-present it to continue. @@ -10432,21 +9093,6 @@ Przykład: JBSWY3DPEHPK3PXP Failed to complete a challenge-response, the PCSC error code was: %1 Nie można ukończyć wyzwania-odpowiedzi, kod błędu PCSC to: %1 - - (NFC) %1 [%2] - Slot %3, %4 - YubiKey display fields - (NFC) %1 [%2] - Gniazdo %3, %4 - - - Press - USB Challenge-Response Key interaction request - Naciśnij - - - Passive - USB Challenge-Response Key no interaction required - Pasywny - YubiKeyInterfaceUSB @@ -10454,6 +9100,14 @@ Przykład: JBSWY3DPEHPK3PXP Unknown Nieznany + + (USB) %1 [%2] Configured Slot - %3 + (USB) %1 [%2] skonfigurowane gniazdo - %3 + + + (USB) %1 [%2] Challenge-Response - Slot %3 - %4 + (USB) %1 [%2] wyzwanie-odpowiedź - gniazdo %3 - %4 + Press USB Challenge-Response Key interaction request @@ -10468,6 +9122,10 @@ Przykład: JBSWY3DPEHPK3PXP The YubiKey USB interface has not been initialized. Interfejs USB YubiKey nie został zainicjowany. + + Hardware key is currently in use. + Klucz sprzętowy jest obecnie używany. + Could not find hardware key with serial number %1. Please plug it in to continue. Nie można odnaleźć klucza sprzętowego o numerze seryjnym %1. Podłącz go, aby kontynuować. @@ -10484,15 +9142,5 @@ Przykład: JBSWY3DPEHPK3PXP Failed to complete a challenge-response, the specific error was: %1 Nie można ukończyć wyzwania-odpowiedzi, konkretny błąd to: %1 - - %1 [%2] - Slot %3 - YubiKey NEO display fields - %1 [%2] - Gniazdo %3 - - - %1 [%2] - Slot %3, %4 - YubiKey display fields - %1 [%2] - Gniazdo %3, %4 - \ No newline at end of file diff --git a/share/translations/keepassxc_pt_BR.ts b/share/translations/keepassxc_pt_BR.ts index a81297047..d1e907149 100644 --- a/share/translations/keepassxc_pt_BR.ts +++ b/share/translations/keepassxc_pt_BR.ts @@ -31,11 +31,11 @@ <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> - <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">Consulte as 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: @@ -43,7 +43,7 @@ Copy to clipboard - Copia para a área de transferência + Copiar para a área de transferência @@ -80,21 +80,21 @@ Details Detalhes - - Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. - A sua escolha será memorizada enquanto o cliente e o KeePassXC estiverem em execução. - Remember Lembrar Allow Selected - Permita os selecionados + Permitir Selecionados + + + Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. + A sua escolha será memorizada enquanto o cliente e o KeePassXC estiverem em execução. Deny All && Future - Recusar agora e futuramente + Recusar agora && futuramente Allow All && &Future @@ -122,10 +122,6 @@ Use OpenSSH Usar OpenSSH - - Use both agents - Utilize ambos os agentes - SSH_AUTH_SOCK override Sobrescrever SSH_AUTH_SOCK @@ -154,12 +150,16 @@ SSH Agent connection is working! A conexão com o agente SSH está funcionando corretamente! + + Use both agents + Utilize ambos os agentes + ApplicationSettingsWidget Application Settings - Configurações do aplicativo + Configurações do Aplicativo General @@ -169,10 +169,6 @@ Security Segurança - - This setting cannot be enabled when minimize on unlock is enabled. - Esta configuração não pode ser habilitada quando minimizar ao desbloquear está habilitado. - Access error for config file %1 Erro de acesso para o arquivo de configuração %1 @@ -217,56 +213,28 @@ You must restart the application to set the new language. Would you like to restart now? Você precisa reiniciar o aplicativo para aplicar o novo idioma. Você gostaria de reiniciar agora? + + Reset Settings? + Restaurar Configurações? + + + Are you sure you want to reset all general and security settings to default? + Você tem certeza que deseja restaurar todas as configurações gerais e de segurança para o padrão? + Select backup storage directory - Selecione o diretório onde o backup será armazenado + Selecione diretório para armazenar o backup - Confirm Reset - Confirmar Redefinição - - - Are you sure you want to reset all settings to default? - Tem certeza de que deseja redefinir todas as configurações para o padrão? - - - Import KeePassXC Settings - Importar Configurações do KeePassXC - - - Failed to import settings from %1, not a valid settings file. - Falha ao importar configurações de %1; arquivo de configurações inválido. - - - Export KeePassXC Settings - Exportar Configurações do KeePassXC - - - Small - Pequeno - - - Normal - Normal - - - Medium - Médio - - - Large - Grande - - - Custom - Personalizado + This setting cannot be enabled when minimize on unlock is enabled. + Esta configuração não pode ser habilitada quando minimizar ao desbloquear está habilitado. ApplicationSettingsWidgetGeneral Basic Settings - Configurações básicas + Configurações Básicas Startup @@ -292,10 +260,6 @@ Remember previously used databases Lembrar dos bancos de dados usados anteriormente - - recent files - arquivos recentes - Load previously open databases on startup Carregar bancos de dados previamente abertos na inicialização @@ -312,21 +276,40 @@ Include beta releases when checking for updates Incluir versões betas durante a verificação de atualizações + + On database unlock, show entries that + Ao desbloquear o banco de dados, mostrar entradas que + + + have expired + On database unlock, show entries that... + Caducou + + + days + On database unlock, show entries that will expire within %1 days + dias + + + will expire within + On database unlock, show entries that... + irá expirar dentro de + File Management - Gerenciador de arquivo + Gerenciamento de Arquivo Automatically save after every change - Salva automaticamente depois de cada alteração + Salvar automaticamente depois de cada alteração Automatically save when locking database - Salva automaticamente ao bloquear banco de dados + Salvar automaticamente ao bloquear banco de dados Automatically save non-data changes when locking database - Salva automaticamente as alterações que não sejam dados ao bloquear o banco de dados + Salvar automaticamente alterações que não são de dados ao bloquear banco de dados Automatically reload the database when modified externally @@ -336,10 +319,22 @@ Backup database file before saving Fazer cópia de segurança do banco de dados antes de salvar + + Backup destination + Destinação do backup + + + Specifies the database backup file location. Occurrences of "{DB_FILENAME}" are replaced with the filename of the saved database without extension. {TIME:<format>} is replaced with the backup time, see https://doc.qt.io/qt-5/qdatetime.html#toString. <format> defaults to format string "dd_MM_yyyy_hh-mm-ss". + Especifica a localização para o backup do banco de dados. As ocorrências de "{DB_FILENAME}" serão substituídas pelo nome do arquivo do banco de dados salvo mas sem extensão. {TIME:<format>} será substituído pelo horário do backup. Consulte https://doc.qt.io/qt-5/qdatetime.html#toString. <format> Os valores padrão a utilizar serão "dd_MM_yyyy_hh-mm-ss". + {DB_FILENAME}.old.kdbx {DB_FILENAME}.antigo.kdbx + + Choose... + Escolher... + Use alternative saving method (may solve problems with Dropbox, Google Drive, GVFS, etc.) Usar método alternativo de salvamento (pode resolver problemas com Dropbox, Google Drive, GVFS, etc) @@ -391,7 +386,7 @@ User Interface - Interface do usuário + Interface do Usuário Toolbar button style @@ -399,7 +394,7 @@ Movable toolbar - Barra de ferramentas móvel + Barra de Ferramentas Móvel Language selection @@ -417,10 +412,6 @@ Toolbar button style: Estilo de botão da barra de ferramentas: - - Show passwords in color - Colorir senhas - Use monospaced font for notes Usar fonte monoespaçada para notas @@ -507,69 +498,12 @@ Lembrar última entrada digitada para: - On database unlock, show entries that will expire within - No desbloqueio do banco de dados, mostre as entradas que expirarão dentro + recent files + arquivos recentes - On database unlock, show entries that will expire within - No desbloqueio do banco de dados, mostre as entradas que expirarão dentro - - - days - number of days warning for password expiration - dias - - - Destination format: - Formato de destino: - - - <html><head/><body><p><span style=" font-weight:600;">{DB_FILENAME}</span> is replaced with the filename of the saved database without extension</p><p><span style=" font-weight:600;">{TIME:&lt;format&gt;}</span> is replaced with the specified time format (default: dd_MM_yyyy_hh-mm-ss)</p><p>See the User Guide for more details</p></body></html> - <html><head/><body><p><span style=" font-weight:600;">{DB_FILENAME}</span> é substituído pelo nome do arquivo do banco de dados salvo sem extensão</p><p><span style=" font-weight:600;">{TIME:&lt;format&gt;}</span> é substituído pelo formato de hora especificado (default: dd_MM_yyyy_hh-mm-ss)</p><p>Consulte o Guia do Usuário para obter mais detalhes</p></body></html> - - - Choose folder... - Escolher a pasta: - - - Show confirmation before moving entries to recycle bin - Mostrar confirmação antes de mover entradas para a lixeira - - - Copy data on double clicking field in entry view - Copie os dados no campo de clique duplo na entrada exibida - - - Show toolbar - Mostrar barra de ferramentas - - - Show the menu bar by pressing the Alt key - Mostrar a barra de menu pressionando a tecla Alt - - - Show menubar - Exibir barra de menu - - - Import settings… - Importar configurações... - - - Export settings… - Exportar configurações... - - - Open browser on double clicking URL field in entry view - Abra o navegador clicando duas vezes no campo URL na entrada exibida - - - Font size: - Tamanho da fonte: - - - Font size selection - Seleção do tamanho da fonte + Show passwords in color + Mostrar senhas em cores @@ -624,6 +558,10 @@ Lock databases after minimizing the window Bloquear bancos de dados após minimizar a janela + + Require password repeat when it is visible + Requisitar repetição da senha quando visível + Hide passwords when editing them Ocultar senhas ao editá-las @@ -636,6 +574,18 @@ 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 + + + Move entries to recycle bin without confirmation + Mover entradas para a lixeira sem confirmação + + + Enable double click to copy the username/password entry columns + Ativar duplo clique para copiar a entrada nome de utilizador/palavra-passe + Privacy Privacidade @@ -646,19 +596,7 @@ Hide TOTP in the entry preview panel - Ocultar TOTP no painel de visualização da entrada - - - Lock databases when switching user - Bloquear bancos de dados ao trocar de usuário - - - Lock Options - Opções de Bloqueio - - - Hide notes in the entry preview panel - Ocultar notas no painel de visualização da entrada + @@ -704,13 +642,27 @@ Atraso muito longo detetado, o máximo é %1: %2 - Entry does not have attribute for PICKCHARS: %1 - A entrada não tem o atributo para PICKCHARS: %1 + Invalid conversion type: %1 + Tipo de conversão inválido: %1 + + + Invalid conversion syntax: %1 + Sintaxe de conversão inválida: %1 + + + Invalid regular expression syntax %1 +%2 + Sintaxe de expressão regular inválida %1 +%2 Invalid placeholder: %1 Marcador de posição inválido: %1 + + Entry does not have attribute for PICKCHARS: %1 + A entrada não tem o atributo para PICKCHARS: %1 + AutoTypeAssociationsModel @@ -752,6 +704,10 @@ AutoTypePlatformX11 + + Trying to send invalid keysym. + Tentando enviar keysym inválida. + Sequence aborted: Caps Lock is on Sequência abortada: Caps Lock está ativo @@ -764,10 +720,6 @@ Unable to get valid keycode for key: Não foi possível obter um código válido para a chave: - - Trying to send invalid keyboard symbol. - Tentando enviar um símbolo inválido de teclado. - AutoTypeSelectDialog @@ -786,11 +738,11 @@ Ctrl+1 - Type username<br/> Ctrl+2 - Type password<br/> Ctrl+3 - Type TOTP<br/> Ctrl+4 - Use Virtual Keyboard (Windows Only)</p> - <p>Pode utilizar a pesquisa avançada para localizar as entradas nas suas base de dados abertas. Os atalhos abaixo podem ser úteis:<br/> + <p>Pode utilizar a pesquisa avançada para localizar as entradas abertas no seu banco de dados. Os atalhos abaixo podem ser úteis:<br/> Ctrl+F - Alterna a pesquisa nas bases de dados<br/> Ctrl+1 - Escreve o nome do utilizador<br/> -Ctrl+2 - Escreve a senha -Ctrl+3 - Escreve o TOTP<br/> +Ctrl+2 - Escreve a senha <br/> +Ctrl+3 - Escreve o TOTP <br/> Ctrl+4 - Utiliza o teclado virtual (apenas no Windows)</p> @@ -872,13 +824,13 @@ Ctrl+4 - Utiliza o teclado virtual (apenas no Windows)</p> Disable for this site Desabilitar para este site - - Undo - Desfazer - BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + KeePassXC-Browser Salvar Entrada + Ok Ok @@ -893,76 +845,13 @@ 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. - - KeePassXC - Select Database - KeePassXC - Selecionar banco de dados - - - - BrowserPasskeysConfirmationDialog - - Cancel - Cancelar - - - Update - Atualizar - - - Authenticate - Autenticar - - - Register new - Registrar ova - - - Register - Registrar - - - Timeout in <b>%n</b> seconds... - Esgotamento em <b>%n</b> segundos...Esgotamento em <b>%n</b> segundos...Esgotamento em <b>%n</b> segundos... - - - Relying Party: %1 - Parte confiável: %1 - - - Username: %1 - Nome de Usuário: %1 - - - KeePassXC - Passkey credentials - KeePassXC - Credenciais de Chave de Acesso - - - Add to existing entry - Adicionar à entrada já existente - - - Existing passkey found. -Do you want to register a new passkey for: - Uma chave de acesso já existente foi encontrada. -Deseja registrar uma nova chave de acesso para: - - - - - Select the existing passkey and press Update to replace it. - Selecione a chave de acesso existente e pressione atualizar para substituí-la. - - - Authenticate passkey credentials for: - Autenticar credenciais de chave de acesso para: - - - Do you want to register a passkey for: - Deseja registrar uma chave de acesso para: - BrowserService + + KeePassXC: Create a new group + KeePassXC: Crie um novo grupo + A request for creating a new group "%1" has been received. Do you want to create this group? @@ -971,6 +860,10 @@ Do you want to create this group? Você quer criar este grupo? + + KeePassXC: New key association request + KeePassXC: Nova associação de chaves requisitada + You have received an association request for the following database: %1 @@ -987,16 +880,28 @@ chrome-laptop Save and allow access Salvar 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? - Uma chave de criptografia compartilhada com o nome "%1" já existe. + Uma chave de criptografia compartilhada com o nome "% 1" já existe. Você deseja sobrescreve-la? + + KeePassXC: Update Entry + KeePassXC: Atualizar entrada + Do you want to update the information in %1 - %2? Deseja atualizar as informações em %1 - %2? + + KeePassXC: Delete entry + KeePassXC: Excluir entrada + A request for deleting entry "%1" has been received. Do you want to delete the entry? @@ -1006,58 +911,50 @@ Você quer excluir a entrada? - %1 (Passkey) - %1 (Chave de Acesso) + Converting attributes to custom data… + Convertendo atributos para dados personalizados... - KeePassXC - Create a new group - KeePassXC - Criar um novo grupo + Abort + Cancelar - Disable - Desabilitar + KeePassXC: Converted KeePassHTTP attributes + KeePassXC: Convertido KeePassHTTP atributos - KeePassXC - Overwrite existing key? - KeePassXC - Sobrescrever chave existente? + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + Atributos convertidos com sucesso de %1 entrada(s). +Movido %2 chaves para dados personalizados. + + + Successfully moved %n keys to custom data. + Movido com sucesso %n chaves para dados personalizados.Movido com sucesso %n chaves para dados personalizados.Movido com sucesso %n chaves para dados personalizados. - KeePassXC - Update Entry - KeePassXC - Atualizar Entrada + KeePassXC: No entry with KeePassHTTP attributes found! + KeePassXC: Nenhuma entrada com os atributos KeePassHTTP encontrados! - KeePassXC - Delete entry - KeePassXC - Excluir entrada + 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. - KeePassXC - New key association request - KeePassXC – Nova solicitação de associação de chave + Don't show this warning again + Não mostrar este alerta novamente - Passkey - Chave de acesso + KeePassXC: Legacy browser integration settings detected + KeePassXC: Configurações de integração do navegador herdado detectadas - KeePassXC - Passkey credentials - KeePassXC - Credenciais de Chave de Acesso - - - Register a new passkey to this entry: - Registrar uma nova chave de acesso para esta entrada: - - - KeePassXC - Update passkey - KeePassXC - Atualizar a chave de acesso - - - Entry already has a passkey. -Do you want to overwrite the passkey in %1 - %2? - A entrada já tem uma chave de acesso. -Deseja substituir a chave de acesso em %1 - %2? - - - Register - Registrar + 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? + As configurações do seu navegador KeePassXC precisam ser movidas para as configurações do banco de dados. +Isso é necessário para manter as conexões atuais do navegador. +Gostaria de migrar suas configurações existentes agora? @@ -1078,6 +975,10 @@ Deseja substituir a chave de acesso em %1 - %2? General Geral + + Browsers installed as snaps are currently not supported. + Navegadores instalados como snaps atualmente não são suportados. + Enable integration for these browsers: Habilitar integração para estes navegadores: @@ -1249,6 +1150,26 @@ Deseja substituir a chave de acesso em %1 - %2? Custom extension ID ID de extensão personalizado: + + Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 + Devido ao sandbox do Snap, você deve executar um script para ativar a integração do navegador.<br />Você pode obter este script de %1 + + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 + O KeePassXC-Browser é necessário para que a integração com navegador funcione. Faça o download para %1, %2 e %3. %4 + + + Please see special instructions for browser extension use below + Por favor, veja as instruções especiais para o uso da extensão do navegador abaixo + + + <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. + <b>Erro:</b> O endereço de proxy personalizado não foi encontrado!<br/>A integração com o navegador NÃO IRÁ funcionar sem a aplicação de proxy. + + + <b>Warning:</b> The following options can be dangerous! + <b>AVISO:</b> As seguintes opções podem ser perigosas! + Executable Files Arquivos Executáveis @@ -1265,46 +1186,6 @@ Deseja substituir a chave de acesso em %1 - %2? Select native messaging host folder location Selecione o local da pasta de host de mensagens nativas - - Allow keepassxc-proxy to list all entries with their title, URL and UUID in connected databases. - Permitir que keepassxc-proxy liste todas as entradas com os seus títulos, URL e UUID nos bancos de dados conectados. - - - Allow limited access to all entries in connected databases (ignores site access restrictions) - Permitir acesso limitado a todas as entradas nos bancos de dados conectados (ignorar restrições de acesso aos sites) - - - <b>Warning:</b> Only adjust these settings if necessary. - <b>Aviso:</b> Ajuste essas configurações apenas se necessário. - - - The custom proxy location does not exist. - O local do proxy personalizado não existe. - - - <b>Error:</b> The custom proxy location does not exist. Correct this in the advanced settings tab. - <b>Erro:</b> O local do proxy personalizado não existe. Corrija isso na guia de configurações avançadas. - - - <b>Error:</b> The installed proxy executable is missing from the expected location: %1<br/>Please set a custom proxy location in the advanced settings or reinstall the application. - Erro:</b> O executável do proxy instalado está faltando no local esperado: %1<br/>Defina um local de proxy personalizado nas configurações avançadas ou reinstale o aplicativo. - - - Allows using insecure http://localhost with passkeys for testing purposes. - Permite o uso inseguro de http://localhost com chaves de acesso para fins de teste. - - - Allow using localhost with passkeys - Permite o uso do localhost com as chaves de acesso - - - KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. - KeePassXC-Browser é necessário para que a integração do navegador funcione. <br />Baixe-o para %1 e %2 e %3. - - - Browsers installed using Snap or Flatpak are not supported with exception to Firefox installed using Snap. - Navegadores instalados usando Snap ou Flatpak não são suportados, com exceção do Firefox instalado usando Snap. - CloneDialog @@ -1327,6 +1208,14 @@ Deseja substituir a chave de acesso em %1 - %2? CsvImportWidget + + Import CSV fields + Importar campos CSV + + + filename + nome do arquivo + size, rows, columns tamanho, linhas, colunas @@ -1435,43 +1324,50 @@ Deseja substituir a chave de acesso em %1 - %2? Column %1 Coluna %1 + + Imported from CSV file + Importado do arquivo CSV + + + Original data: + Dados originais: + + + Error(s) detected in CSV file! + Erro(s) detectado(s) no arquivo CSV! + [%n more message(s) skipped] [%n mais mensagem(ns) ignoradas][%n mais mensagem(ns) ignoradas][%n mais mensagem(ns) ignoradas] - Failed to parse CSV file: %1 - Falha ao analisar o arquivo CSV: %1 + Error + Erro - Imported from CSV file: %1 - Importado do arquivo CSV: %1 - - - No Title Selected - Nenhum Título Selecionado - - - No title column was selected, entries will be hard to tell apart. -Are you sure you want to import? - Nenhuma coluna de título foi selecionada, será difícil distinguir as entradas. -Tem certeza de que deseja importar? - - - Tags - Etiquetas + CSV import: writer has errors: +%1 + Importação de CSV: o gravador tem erros: +%1 CsvParserModel + + %1, %2, %3 + file info: bytes, rows, columns + %1, %2, %3 + + + %n byte(s) + %n byte%n bytes%n bytes + %n row(s) - CSV row count %n linha%n linhas%n linhas %n column(s) - CSV column count %n coluna(s)%n coluna(s)%n coluna(s) @@ -1524,14 +1420,6 @@ Backup do banco de dados alocado em %2 Recycle Bin Lixeira - - Database file read error. - Erro de leitura do arquivo de banco de dados. - - - No file path was provided. - Nenhum caminho de arquivo foi fornecido. - DatabaseOpenDialog @@ -1554,10 +1442,30 @@ Backup do banco de dados alocado em %2 Password field Campo de senha + + Enter Additional Credentials (if any): + Entre com as credenciais adicionais (se tiver alguma): + + + Key File: + Arquivo-Chave: + + + Key file help + Ajuda do arquivo-chave + Hardware key slot selection Seleção de campo de chave de hardware + + Hardware Key: + Chave de hardware: + + + Hardware key help + Ajuda da chave física + Key file to unlock the database Arquivo-chave para desbloquear banco de dados @@ -1570,6 +1478,14 @@ Backup do banco de dados alocado em %2 Browse… Navegar... + + Refresh hardware tokens + Atualizar os tokens de hardware + + + Refresh + Atualizar + Unlock Database Desbloquear banco de dados @@ -1632,13 +1548,17 @@ Para impedir que esses erros apareçam, você deve ir em "Configurações d Retry with empty password Tentar novamente com senha vazia + + Failed to authenticate with Touch ID + Não foi possível autenticar com Touch ID + Failed to open key file: %1 Falha ao abrir o arquivo-chave: %1 Old key file format - Formato antigo de arquivo de chave + Formato antigo de arquivo-chave You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database &gt; Database Security &gt; Change Key File.</strong><br> @@ -1664,69 +1584,41 @@ Para impedir que esses erros apareçam, você deve ir em "Configurações d Cannot use database file as key file Não use arquivos de banco de dados (*.kdbx) como arquivo-chave + + You cannot use your database file as a key file. +If you do not have a key file, please leave the field empty. + Você não pode usar seu arquivo de banco de dados como arquivo-chave. +Se você não tem um arquivo-chave, por favor deixe o campo vazio. + + + Detecting hardware keys… + Detectando chaves físicas... + + + No hardware keys detected + Nenhuma chave física detectada + + + Select hardware key… + Selecionar chave física... + + + <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information…</p> + <p>Para além da palavra-passe, pode utilizar um ficheiro-chave para aumentar a segurança da sua base de dados. Este ficheiro pode ser gerado nas definições de segurança da sua base de dados..</p><p><strong>Não</strong> pode utilizar ficheiros *.kdbx como ficheiro-chave!<br>Se não quiser utilizar um ficheiro-chave, deixe este campo em branco.</p><p>Clique aqui para mais informação.</p> + + + <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +<p>Click for more information…</p> + <p>Pode utilizar uma chave de segurança como, por exemplo, os dispositivos <strong>YubiKey</strong> ou <strong>OnlyKey</strong> com 'slots' configuradas para HMAC-SHA1.</p> +<p>Clique aqui para mais informações.</p> + authenticate to access the database - Autentique para acessar o banco de dados + Autentique-se para acessar o banco de dados - Failed to authenticate with Quick Unlock: %1 - Falha ao autenticar com Desbloqueio Rápido: %1 - - - Select Key File: - Selecionar Arquivo Chave: - - - <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!</p> - <p>Além de uma senha, você pode usar um arquivo secreto para aumentar a segurança do seu banco de dados. Este arquivo pode ser gerado nas configurações de segurança do seu banco de dados.</p><p>Este <strong>não é</strong> o seu arquivo de banco de dados *.kdbx!</p> - - - Use hardware key [Serial: %1] - Usar uma chave de hardware [Serial: %1] - - - Use hardware key - Usar chave de hardware - - - Your database file is NOT a key file! -If you don't have a key file or don't know what that is, you don't have to select one. - Seu arquivo de banco de dados NÃO é um arquivo-chave! -Caso não tenha um arquivo-chave ou não souber o que é, você não precisa selecionar um. - - - KeePassXC database file selected - Arquivo de banco de dados KeePassXC selecionado - - - The file you selected looks like a database file. -A database file is NOT a key file! - -Are you sure you want to continue with this file?. - O arquivo que você selecionou se parece com um arquivo de banco de dados. -Um arquivo de banco de dados NÃO é um arquivo-chave! - -Tem certeza de que deseja continuar com este arquivo? - - - No hardware keys found. - Nenhuma chave de hardware encontrada. - - - Refresh Hardware Keys - Atualizar Chaves de Hardware - - - Click to add a key file. - Clique para adicionar um arquivo-chave. - - - <a href="#" style="text-decoration: underline">I have a key file</a> - <a href="#" style="text-decoration: underline">Eu tenho um arquivo-chave</a> - - - Hardware keys found, but no slots are configured. - Chaves de hardware encontradas, mas nenhum slot configurado. + Failed to authenticate with Windows Hello: %1 + Não foi possível autenticar com Windows Hello: %1 @@ -1738,6 +1630,10 @@ Tem certeza de que deseja continuar com este arquivo? DatabaseSettingsDialog + + Advanced Settings + Definições avançadas + General Geral @@ -1762,22 +1658,6 @@ Tem certeza de que deseja continuar com este arquivo? Maintenance Manutenção - - KeeShare - KeeShare - - - Secret Service Integration - Integração com Secret Service - - - Remote Sync - Sincronização Remota - - - Database Settings: %1 - Configurações do Banco de Dados: %1 - DatabaseSettingsWidgetBrowser @@ -1785,6 +1665,18 @@ Tem certeza de que deseja continuar com este arquivo? KeePassXC-Browser settings Configurações do KeePassXC-Browser + + Convert KeePassHTTP data + Converter dados KeePassHTTP + + + Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data + Converta os atributos legados do KeePassHTTP para os dados compatíveis com o KeePassXC-Browser + + + Refresh database root group ID + Atualizar ID do grupo raiz do banco de dados + Disconnect all browsers Desconectar todos os navegadores @@ -1793,10 +1685,6 @@ Tem certeza de que deseja continuar com este arquivo? Forget all site-specific settings on entries Esqueça todas as configurações específicas do site nas entradas - - Refresh database root group ID - Atualizar ID do grupo raiz do banco de dados - Stored keys Chaves guardadas @@ -1845,10 +1733,18 @@ This may prevent connection to the browser plugin. Você realmente deseja desconectar todos os navegadores? Isso pode impedir a conexão com o plugin do navegador. + + KeePassXC: No keys found + KeePassXC: Nenhuma chave localizada + No shared encryption keys found in KeePassXC settings. Nenhuma chave de criptografia compartilhada encontrada nas configurações do KeePassXC. + + KeePassXC: Removed keys from database + KeePassXC: Chaves removidas do banco de dados + Successfully removed %n encryption key(s) from KeePassXC settings. 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.Removido com sucesso% n chave (s) criptográficas das configurações do KeePassXC. @@ -1867,14 +1763,32 @@ Permissões para acessar entradas serão revogadas. Abort Cancelar + + KeePassXC: Removed permissions + KeePassXC: Permissões removidas + Successfully removed permissions from %n entry(s). Permissões removidas com sucesso de %n entrada(s).Permissões removidas com sucesso de %n entrada(s).Permissões removidas com sucesso 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. O banco de dados ativo 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 convert 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 converter os dados legados para a versão mais recente? +Esta atualização é necessária para manter a compatibilidade com o suplemento. + Refresh database ID Atualizar ID da banco de dados @@ -1885,26 +1799,6 @@ This is only necessary if your database is a copy of another and the browser ext Você deseja realmente atualizar o ID do banco de dados? Isto somente é necessário se o seu banco de dados é uma cópia de outro e a extensão do navegador não puder conectar. - - Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data - Converta os atributos legados do KeePassHTTP para os dados compatíveis com o KeePassXC-Browser - - - No keys found - Nenhuma chave encontrada - - - Removed keys from database - Chaves removidas do banco de dados - - - Removed permissions - Permissões removidas - - - No entry with permissions found! - Nenhuma entrada com permissões encontradas! - DatabaseSettingsWidgetDatabaseKey @@ -1944,18 +1838,6 @@ Tem certeza de que deseja continuar sem uma senha? Failed to change database credentials Falha ao alterar credenciais do banco de dados - - Weak password - Senha fraca - - - This is a weak password! For better protection of your secrets, you should choose a stronger password. - Esta é uma senha fraca! Para melhor proteção dos seus segredos, você deve escolher uma senha mais forte. - - - The provided password does not meet the minimum quality requirement. - A senha fornecida não atende aos requisitos mínimos de qualidade. - DatabaseSettingsWidgetEncryption @@ -1963,6 +1845,14 @@ Tem certeza de que deseja continuar sem uma senha? Decryption Time: Hora da descriptografia: + + Change existing decryption time + Mudar tempo de descriptografia + + + Change + Alterar + Decryption time in seconds Tempo de descriptografia em segundos @@ -2043,6 +1933,11 @@ Tem certeza de que deseja continuar sem uma senha? KDBX 3 KDBX 3 + + unchanged + Database decryption time is unchanged + inalterado + Number of rounds too high Key transformation rounds @@ -2093,19 +1988,7 @@ Se você manter este número, seu banco de dados não estará protegido de ataqu thread(s) Threads for parallel execution (KDF settings) - processo(s) processo(s) processo(s) - - - Encryption Settings: - Configurações de criptografia: - - - Basic - Básico - - - Advanced - Avançado + processo(s)processo(s)processo(s) @@ -2221,7 +2104,7 @@ add up to the specified amount at most. Quando salvar essa configuração ou editar uma entrada os itens mais antigo do histórico de uma entrada serão removidos de forma que os itens restantes -serão adicionados até a quantidade máxima especificada +sejam adicionados até quantidade máxima especificada Limit the total size of history items per entry to: @@ -2237,70 +2120,6 @@ ao invés de os apagar do banco de dados. Entradas apagadas da lixeira serão removidos do banco de dados - - Autosave delay since last change - Atraso de salvamento automático desde a última alteração - - - Autosave delay - Atraso de salvamento automático - - - Autosave delay since last change in minutes - Atraso de salvamento automático desde a última alteração em minutos - - - min - min - - - Autosave delay since last change checkbox - Atraso de salvamento automático desde a última caixa de seleção - - - Public Database Metadata - Metadados do Banco de Dados Público - - - Warning: the following settings are not encrypted. - Aviso: as configurações a seguir não são criptografadas. - - - Display name: - Nome de exibição: - - - Publically visible display name used on the unlock dialog - Nome de exibição publicamente visível usado na caixa de diálogo de desbloqueio - - - Database public display name - Nome de exibição público do banco de dados - - - Display color: - Cor de exibição: - - - Publically visible color used on the unlock dialog - Cor publicamente visível usada na caixa de diálogo de desbloqueio - - - Database public display color chooser - Seletor de cores de exibição pública do banco de dados - - - Clear - Limpar - - - Display icon: - Ícone de exibição: - - - Select Database Icon - Selecionar o Ícone do Banco de Dados - DatabaseSettingsWidgetKeeShare @@ -2396,139 +2215,6 @@ removidos do banco de dados Campo de descrição do banco de dados - - DatabaseSettingsWidgetRemote - - Sync Commands - Comandos de Sincronização - - - Remove - Remover - - - Command Settings - Configurações de Comando - - - Name - Nome - - - Save - Salvar - - - Download - Baixar - - - Command: - Comando: - - - Download command field - Campo do comando baixar - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - por exemplo: 'sftp user@hostname' ou 'scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}' - - - Input: - Entrada: - - - Download input field - Campo do comando baixar - - - Upload - Enviar - - - Upload command field - Campo do comando enviar - - - e.g.: "sftp user@hostname" or "scp {TEMP_DATABASE} user@hostname:DatabaseOnRemote.kdbx" - por exemplo: 'sftp user@hostname' ou 'scp {TEMP_DATABASE} user@hostname:DatabaseOnRemote.kdbx' - - - Upload input field - Campo de entrada enviar - - - Name cannot be empty. - O nome não pode ficar vazio. - - - Test - Testar - - - Download command cannot be empty. - O comando de baixar não pode estar vazio. - - - Download failed with error: %1 - Falha ao baixar com erro: %1 - - - Download finished, but file %1 could not be found. - O download foi concluído, mas o arquivo %1 não foi encontrado. - - - Download successful. - Download bem-sucedido. - - - Save Remote Settings - Salvar Configurações Remotas - - - You have unsaved changes. Do you want to save them? - Você tem alterações não salvas. Você quer salvá-los? - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - por exemplo: -obtenha DatabaseOnRemote.kdbx {TEMP_DATABASE} -sair ---- -{TEMP_DATABASE} é usado como espaço reservado para armazenar o banco de dados em um local temporário -O comando tem que sair. No caso de `sftp` como último comando `exit` deve ser enviado - - - e.g.: -put {TEMP_DATABASE} DatabaseOnRemote.kdbx -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - por exemplo: -coloque {TEMP_DATABASE} DatabaseOnRemote.kdbx -sair ---- -{TEMP_DATABASE} é usado como espaço reservado para armazenar o banco de dados em um local temporário -O comando tem que sair. No caso de `sftp` como último comando `exit` deve ser enviado - - - Timeout: - Esgotamento: - - - seconds - segundos - - DatabaseTabWidget @@ -2561,10 +2247,26 @@ Este é definitivamente um bug, por favor denuncie para os desenvolvedores.CSV file Arquivo CSV + + Select CSV file + Selecionar arquivo CSV + Merge database Juntar banco de dados + + KeePass 1 database + Banco de dados KeePass 1 + + + Open KeePass 1 database + Abrir banco de dados KeePass 1 + + + Open OPVault + Abrir o OPVault + Export database to CSV file Exportar banco de dados para arquivo CSV @@ -2577,6 +2279,28 @@ Este é definitivamente um bug, por favor denuncie para os desenvolvedores.Writing the HTML file failed. Falha ao escrever no arquivo HTML + + Export Confirmation + Confirmação da Exportação + + + You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? + Você está prestes a exportar o seu banco de dados para um arquivo não criptografado. Isso vai deixar suas senhas e informações confidenciais vulneráveis! Você tem certeza que quer continuar? + + + New Database + Novo Banco de Dados + + + %1 [New Database] + Database tab name modifier + %1 [Novo banco de dados] + + + %1 [Locked] + Database tab name modifier + %1 [Bloqueada] + Export database to XML file Exportar o banco de dados para um arquivo XML @@ -2589,31 +2313,9 @@ Este é definitivamente um bug, por favor denuncie para os desenvolvedores.Writing the XML file failed Gravação do arquivo XML falhou - - Export Confirmation - Confirmação da Exportação - - - You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? - Você está prestes a exportar o seu banco de dados para um arquivo não criptografado. Isso vai deixar suas senhas e informações confidenciais vulneráveis! Você tem certeza que quer continuar? - - - %1 [Locked] - Database tab name modifier - %1 [Bloqueada] - - - %1 [Temporary] - Database tab name modifier - %1 [Temporário] - DatabaseWidget - - Searches and Tags - Buscas e Etiquetas - Searching… Pesquisando... @@ -2662,10 +2364,6 @@ Este é definitivamente um bug, por favor denuncie para os desenvolvedores.Expired entries Entradas expiradas - - Entries expiring within %1 day(s) - A entradas que vai caducar dentro de %1 diaAs entradas que vão caducar dentro de %1 diasAs entradas que vão caducar dentro de %1 dia(s) - No current database. Nenhuma banco de dados atual. @@ -2690,18 +2388,6 @@ Este é definitivamente um bug, por favor denuncie para os desenvolvedores.No Results Sem Resultados - - Save - Salvar - - - Enter a unique name or overwrite an existing search from the list: - Digite um nome único ou sobrescreva uma busca existente da lista: - - - Save Search - Salvar Busca - Lock Database? Travar banco de dados? @@ -2730,6 +2416,26 @@ Salvar alterações? File has changed O arquivo foi modificado + + The database file has changed. Do you want to load the changes? + O banco de dados foi alterado. Deseja carregar as alterações? + + + Merge Request + Juntar Pedido + + + The database file has changed and you have unsaved changes. +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. +Error: %1 + Não foi possível abrir o novo arquivo de banco de dados ao tentar executar o carregamento automático. +Erro: %1 + Disable safe saves? Desativar armazenamento seguro? @@ -2772,94 +2478,25 @@ Deseja desabilitar salvamento seguro e tentar novamente? Could not find database file: %1 Não foi possível localizar o arquivo do banco de dados: %1 - - New Database - Novo Banco de Dados + + Entries expiring within %1 day(s) + Entrada que vai caducar em %1 dia(s)Entradas que vão caducar em %1 dia(s)Entradas que vão caducar dentro de %1 dia(s) - %1 [New Database] - Database tab name modifier - %1 [Novo banco de dados] + Searches and Tags + Buscas e Etiquetas - Remote Sync did not contain any download or upload commands. - A Sincronização Remota não continha nenhum comando de download ou upload. + Enter a unique name or overwrite an existing search from the list: + Digite um nome único ou sobrescreva uma busca existente da lista: - Remote sync '%1' completed successfully! - A sincronização remota '%1' foi concluída com sucesso! + Save + Salvar - Remote sync '%1' failed: %2 - Falha na sincronização remota '%1': %2 - - - Error while saving database %1: %2 - Erro ao salvar o banco de dados %1: %2 - - - Downloading... - Baixando... - - - Uploading... - Enviando... - - - Syncing... - Sincronizando... - - - Remove passkey from entry - Remover a chave de acesso da entrada - - - Do you want to remove the passkey from this entry? - Deseja remover a chave de acesso desta entrada? - - - The database file "%1" was modified externally - O arquivo de banco de dados "%1" foi modificado externamente - - - Do you want to load the changes? - Você quer carregar as alterações? - - - Reload database - Recarregar banco de dados - - - Reloading database… - Recarregando banco de dados... - - - Reload canceled - Recarregar cancelado - - - Reload successful - Recarregar com sucesso - - - Reload pending user action… - Recarregar pendente da ação do usuário... - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes<br>Ignore the changes on disk until save<br>Discard unsaved changes - - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes then save<br>Overwrite the changes on disk<br>Discard unsaved changes - - - - Database file overwritten. - Arquivo de banco de dados substituído. - - - Database file on disk cannot be unlocked with current credentials.<br>Enter new credentials and/or present hardware key to continue. - + Save Search + Salvar Busca @@ -2912,6 +2549,10 @@ Deseja desabilitar salvamento seguro e tentar novamente? n/a n/d + + (encrypted) + (criptografado) + Select private key Escolha uma chave privada @@ -2998,10 +2639,6 @@ Gostaria de a corrigir? Hide Ocultar - - %n hour(s) - %n hora%n horas%n hora(s) - %n week(s) %n semana(s)%n semana(s)%n semana(s) @@ -3014,9 +2651,9 @@ Gostaria de a corrigir? %n year(s) %n ano%n anos%n anos - - Failed to decrypt SSH key, ensure password is correct. - Houve uma falha ao descriptografar a chave SSH, verifique se a senha está correta. + + %n hour(s) + %n hora%n horas%n hora(s) @@ -3136,20 +2773,10 @@ Gostaria de a corrigir? Add new window association Adicionar nova associação de janela - - + - Add item - + - Remove selected window association Remover a associação de janela selecionada - - - - Remove item - - - Window title: Título da Janela: @@ -3174,9 +2801,23 @@ Gostaria de a corrigir? Custom Auto-Type sequence for this window Sequência de Auto-Digitar personalizada para esta janela + + + + Add item + + + + + - + Remove item + - + EditEntryWidgetBrowser + + These settings affect to the entry's behaviour with the browser extension. + Essas configurações afetam o comportamento de entrada da extensão do navegador. + General Geral @@ -3189,14 +2830,26 @@ Gostaria de a corrigir? Skip Auto-Submit for this entry Ignorar Auto-Envio para esta entrada + + Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. + Envia esta configuração apenas ao navegador para caixas de diálogo de Autenticação HTTP. Se ativado, os formulários de login normais não mostrarão esta entrada para seleção. + Use this entry only with HTTP Basic Auth Usar esta entrada somente com Autenticação HTTP Básica + + Do not send this setting to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. + Não envia esta configuração para o navegador para caixas de diálogo de Autenticação HTTP. Se ativado, as caixas de diálogo de Autenticação HTTP não mostrarão esta entrada para seleção. + Do not use this entry with HTTP Basic Auth Não usar esta entrada com Autenticação HTTP Básica + + Additional URL's + URL's adicionais + Add Adicionar @@ -3209,22 +2862,6 @@ Gostaria de a corrigir? Edit Editar - - These settings affect the entry's behaviour with the browser extension. - Estas configurações afetam o comportamento da entrada com a extensão do navegador. - - - Additional URLs - URLs adicionais - - - Only send this entry to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. - Envie esta entrada apenas para o navegador para caixas de diálogo de autenticação HTTP. Se ativado, os formulários de login normais não mostrarão esta entrada para seleção. - - - Do not send this entry to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. - Não envie esta entrada ao navegador para caixas de diálogo de autenticação HTTP. Se ativado, as caixas de diálogo HTTP Auth não mostrarão esta entrada para seleção. - EditEntryWidgetHistory @@ -3321,35 +2958,35 @@ Gostaria de a corrigir? &Username: - &Nome de usuário: + &Title: - &Título: + &Password: - &Senha: + UR&L: - UR&L: + &Notes: - &Notas: + Toggle notes visibility - Alternar visibilidade das notas + T&ags: - T&ags: + &Expires: - &Expira em: + @@ -3390,6 +3027,19 @@ Gostaria de a corrigir? Private key Chave privada + + External file + Arquivo externo + + + Browser for key file + Procurar por arquivo-chave + + + Browse… + Button for opening file dialog + Navegar... + Attachment Anexo @@ -3406,23 +3056,6 @@ Gostaria de a corrigir? Remove from agent Remover do agente - - External file - Arquivo externo - - - Browser for key file - Procurar por arquivo-chave - - - Browse… - Button for opening file dialog - Navegar... - - - Generate - Gerar - Select attachment file Selecionar arquivo anexado @@ -3447,10 +3080,6 @@ Gostaria de a corrigir? seconds segundos - - Clear agent - Limpar agente - EditGroupWidget @@ -3462,6 +3091,10 @@ Gostaria de a corrigir? Icon Ícone + + Browser Integration + Integração com o Navegador + Properties Propriedades @@ -3478,10 +3111,6 @@ Gostaria de a corrigir? Group has unsaved changes O grupo tem alterações não salvas - - Browser Integration - Integração com o Navegador - Enable Habilitar @@ -3507,7 +3136,7 @@ Gostaria de a corrigir? Hide entries from browser extension toggle for this and sub groups - Oculta as entradas deste grupo (e dos subgrupos) da extensão do navegador + Oculta as entradas da extensão do browser para este e para os subgrupos Skip Auto-Submit for entries: @@ -3541,14 +3170,6 @@ Gostaria de a corrigir? Omit WWW subdomain from matching toggle for this and sub groups Omita o subdomínio WWW da correspondência alternada: para este grupo e para os subgrupos - - Restrict matching to given browser key: - Restringir a correspondência a determinada chave do navegador: - - - Restrict matching to given browser key toggle for this and sub groups - Restringir a correspondência a uma determinada chave do navegador para este e subgrupos - EditGroupWidgetKeeShare @@ -3781,6 +3402,10 @@ Extensões suportadas são: %1 Unable to fetch favicon. Não foi possível obter favicon. + + You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security + Você pode habilitar o serviço de ícone do site do DuckDuckGo em Ferramentas -> Configurações -> Segurança + Existing icon selected. Ícone existente selecionado. @@ -3813,10 +3438,6 @@ Extensões suportadas são: %1 The following icon(s) failed: O seguinte ícone falhou:O(s) ícone(s) a seguir falharam:O(s) ícone(s) a seguir falharam: - - You can enable the DuckDuckGo website icon service under Application Settings -> Security - Você pode ativar o serviço de ícone do site DuckDuckGo em Configurações do Aplicativo -> Segurança - EditWidgetProperties @@ -3893,24 +3514,6 @@ Isto pode causar mal funcionamento dos plugins afetados. %1 - Clone %1 - Clone - - Passkey - Chave de acesso - - - Invalid conversion type: %1 - Tipo de conversão inválido: %1 - - - Invalid conversion syntax: %1 - Sintaxe de conversão inválida: %1 - - - Invalid regular expression syntax %1 -%2 - Sintaxe de expressão regular inválida %1 -%2 - EntryAttachments @@ -3919,21 +3522,6 @@ Isto pode causar mal funcionamento dos plugins afetados. Não é possível abrir o arquivo %1. - - EntryAttachmentsDialog - - Form - Formulário - - - File name - Nome do arquivo - - - File contents... - Conteúdo do arquivo... - - EntryAttachmentsModel @@ -3971,6 +3559,14 @@ Isto pode causar mal funcionamento dos plugins afetados. Remove Remover + + Rename selected attachment + Renomear anexo selecionado + + + Rename + Renomear + Open selected attachment Abrir anexo selecionado @@ -4047,6 +3643,12 @@ Isto pode causar mal funcionamento dos plugins afetados. Confirm Overwrite Attachment Confirmar substituição de anexo + + Attachment "%1" already exists. +Would you like to overwrite the existing attachment? + O anexo "%1" já existe. +Deseja fazer a substituição do anexo já existente? + Confirm Attachment Confirmar Anexo @@ -4081,24 +3683,6 @@ Error: %1 Falha ao salvar anexo atualizado. Erro: %1 - - Attachment "%1" already exists. -Would you like to overwrite the existing attachment? - O anexo "%1" já existe. -Deseja fazer a substituição do anexo já existente? - - - New - - - - Preview - Visualização - - - Failed to preview an attachment: Attachment not found - Falha ao visualizar um anexo: Anexo não encontrado - EntryAttributesModel @@ -4179,7 +3763,7 @@ Deseja fazer a substituição do anexo já existente? Auto-Type - Auto-Digitar + Autodigitação Tags @@ -4293,14 +3877,6 @@ Deseja fazer a substituição do anexo já existente? Has TOTP Possui TOTP - - Background Color - Cor de fundo - - - Group Path - Caminho do Grupo - EntryPreviewWidget @@ -4321,8 +3897,8 @@ Deseja fazer a substituição do anexo já existente? Senha - URL - URL + Notes + Notas Expiration @@ -4341,8 +3917,8 @@ Deseja fazer a substituição do anexo já existente? Nome de usuário - Notes - Notas + URL + URL Advanced @@ -4392,10 +3968,6 @@ Deseja fazer a substituição do anexo já existente? Never Nunca - - Double click to copy value - Faça dois cliques para copiar o valor - Enabled Habilitado @@ -4405,7 +3977,7 @@ Deseja fazer a substituição do anexo já existente? Desabilitado - Double click to copy to clipboard + Double click to copy value Faça dois cliques para copiar o valor @@ -4415,10 +3987,6 @@ Deseja fazer a substituição do anexo já existente? Invalid URL URL inválida - - Duplicate URL - URL duplicada - EntryView @@ -4434,10 +4002,6 @@ Deseja fazer a substituição do anexo já existente? Reset to defaults Redefinir as configurações padrões - - + %1 entry(s)... - + %1 entrada...+ %1 entradas...+ %1 entrada(s)... - ExportDialog @@ -4547,7 +4111,7 @@ Isso vai deixar as suas senhas e as suas informações confidenciais vulnerávei %n Entry(s) was used by %1 %1 is the name of an application - %n entrada foi usada por %1%n entradas foram usadas por %1%n entradas foram usadas por %1 + %n entrada(s) foram utilizadas por %1%n entrada(s) foram utilizadas por %1%n entrada(s) foram utilizadas por %1 @@ -4658,198 +4222,6 @@ Você pode habilitar o serviço de ícones do DuckDuckGo na seção de seguranç Baixando favicons (%1/%2)… - - ImportWizard - - Import Wizard - Assistente de Importação - - - - ImportWizardPageReview - - WizardPage - Assistente - - - Entry count: %1 - Contagem de registros: %1 - - - Group - Grupo - - - Title - Título - - - Username - Nome de usuário - - - Password - Senha - - - Url - Url - - - Could not load key file. - Não foi possível carregar o arquivo de chave. - - - Could not open remote database. Password or key file may be incorrect. - Não foi possível abrir o banco de dados remoto. A senha ou o arquivo de chave podem estar incorretos. - - - - ImportWizardPageSelect - - Form - Formulário - - - Import File Selection - Importar Arquivo Selecionado - - - Password: - Senha: - - - Key File: - Arquivo-Chave: - - - Browse… - Navegar... - - - Import Into: - Importar Para: - - - New Database - Novo Banco de Dados - - - No unlocked databases available - Não há bancos de dados destrancados disponíveis - - - Existing Database: - Banco de Dados Existente: - - - Import File: - Importar Arquivo: - - - Comma Separated Values (.csv) - Valores separados por vírgulas (.csv) - - - 1Password Export (.1pux) - Exportar 1Password (.1pux) - - - 1Password Vault (.opvault) - Cofre 1Password (.opvault) - - - Bitwarden (.json) - Bitwarden (.json) - - - KeePass 1 Database (.kdb) - Banco de dados KeePass 1 (.kdb) - - - Open OPVault - Abrir o OPVault - - - Select import file - Selecionar o arquivo de importação - - - All files - Todos arquivos - - - Key files - Arquivos-chave - - - Select key file - Escolha o arquivo-chave - - - Comma Separated Values - Valores separados por vírgulas - - - 1Password Export - Exportar 1Password - - - Bitwarden JSON Export - Exportar Bitwarden JSON - - - 1Password Vault - Cofre do 1Password - - - KeePass1 Database - Banco de dados do KeePass1 - - - Proton Pass (.json) - Proton Pass (.json) - - - Proton Pass JSON Export - Exportar para Proton Pass JSON - - - Temporary Database - Banco de Dados Temporário - - - Command: - Comando: - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - por exemplo: 'sftp user@hostname' ou 'scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}' - - - Input: - Entrada: - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last commend `exit` has to be sent - - por exemplo: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} é usado como espaço reservado para armazenar o banco de dados em um local temporário -O comando tem que sair. No caso de `sftp` como último comando `exit` deve ser enviado - - - Remote Database (.kdbx) - Banco de Dados Remoto (.kdbx) - - KMessageWidget @@ -5284,6 +4656,17 @@ Linha %2, coluna %3 Falha ao abrir chave privada + + KeePass1OpenWidget + + Import KeePass1 Database + Importar banco de dados KeePass1 + + + Unable to open the database. + Não foi possível abrir o banco de dados. + + KeePass1Reader @@ -5640,6 +5023,10 @@ Tem certeza que deseja continuar com este arquivo? &Recent Databases &Banco de Dados Recentes + + &Import + &Importar + &Export &Exportar @@ -5660,10 +5047,6 @@ Tem certeza que deseja continuar com este arquivo? TOTP TOTP - - Tags - Etiquetas - &Groups &Grupos @@ -5708,18 +5091,34 @@ Tem certeza que deseja continuar com este arquivo? &New Database… &Novo Banco de Dados... + + Create a new database + Criar um banco de dados + &Merge From Database… &Mesclar do Banco de Dados... + + Merge from another KDBX database + Mesclar de outro banco de dados KDBX + &New Entry… &Nova Entrada... + + Add a new entry + Adicionar uma nova entrada + &Edit Entry… &Editar Entrada… + + View or edit entry + Exibir ou editar entrada + &Delete Entry… &Excluir Entrada… @@ -5728,6 +5127,10 @@ Tem certeza que deseja continuar com este arquivo? &New Group… &Novo Grupo… + + Add a new group + Adicionar a um novo grupo + &Edit Group… &Editar Grupo @@ -5760,10 +5163,18 @@ Tem certeza que deseja continuar com este arquivo? Database &Reports… &Relatórios do Banco de Dados... + + Statistics, health check, etc. + Estatísticas, verificação de saúde, etc. + &Database Settings… Configurações do Banco de &Dados... + + Database settings + Configurações do Banco de Dados + &Clone Entry… &Clonar Entrada... @@ -5772,18 +5183,34 @@ Tem certeza que deseja continuar com este arquivo? Move u&p Mover para &cima + + Move entry one step up + Mover entrada um passo para cima + Move do&wn Move para &baixo + + Move entry one step down + Mover entrada um passo para baixo + Copy &Username Copiar &Nome de Usuário + + Copy username to clipboard + Copiar nome de usuário para área de transferência + Copy &Password Copiar &Senha + + Copy password to clipboard + Copiar senha para área de transferência + &Settings &Configurações @@ -5817,13 +5244,21 @@ Tem certeza que deseja continuar com este arquivo? &Título - Copy &URL - Copiar &URL + Copy title to clipboard + Copiar título para a área de transferência + + + 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 + &CSV File… Arquivo &CSV... @@ -5836,14 +5271,26 @@ Tem certeza que deseja continuar com este arquivo? KeePass 1 Database… Banco de dados do KeePass 1... + + Import a KeePass 1 database + Importar banco de dados do KeePass 1 + 1Password Vault… Cofre do 1Password... + + Import a 1Password Vault + Importar cofre 1Password + CSV File… Arquivo CSV... + + Import a CSV file + Importar arquivo CSV + Show TOTP Mostrar TOTP @@ -5860,10 +5307,6 @@ Tem certeza que deseja continuar com este arquivo? Copy &TOTP Copiar &TOTP - - Copy Password and TOTP - Copiar Senha e TOTP - E&mpty recycle bin Esvaziar &lixeira @@ -5888,6 +5331,10 @@ Tem certeza que deseja continuar com este arquivo? &Online Help &Ajuda Online + + Go to online documentation + Ir para documentação online + &User Guide &Guia do usuário @@ -5932,10 +5379,6 @@ Tem certeza que deseja continuar com este arquivo? Classic (Platform-native) Clássico (nativo da plataforma) - - Show Menubar - Exibir Barra de Menu - Show Toolbar Exibir Barra de Ferramentas @@ -5960,10 +5403,6 @@ Tem certeza que deseja continuar com este arquivo? Clone Group... Clonar grupo... - - &XML File… - Arquivo &XML... - Clear history Limpar histórico @@ -5991,8 +5430,10 @@ Expect some bugs and minor issues, this version is meant for testing purposes. - No Tags - Sem Etiquetas + 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. Restore Entry(s) @@ -6022,10 +5463,6 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes Quit KeePassXC Fechar KeePassXC - - %1 Entry(s) - %1 Entradas(s)%1 Entradas(s)%1 Entradas(s) - Please present or touch your YubiKey to continue… Introduza ou toque na sua YubiKey para continuar... @@ -6038,314 +5475,38 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes You must restart the application to apply this setting. Would you like to restart now? Você precisa reiniciar o aplicativo para aplicar esta configuração. Você gostaria de reiniciar agora? + + Tags + Etiquetas + + + No Tags + Sem Etiquetas + + + %1 Entry(s) + %1 Entrada(s)%1 Entrada(s)%1 Entrada(s) + + + Copy Password and TOTP + Copiar Senha e TOTP + + + &XML File… + Arquivo &XML... + + + XML File… + Arquivo XML... + + + Copy &URL + Copiar &URL + Allow Screen Capture Permitir captura de tela - - 1Password 1PUX... - 1Password 1PUX... - - - Import a 1Password 1PUX file - Importar o arquivo 1PUX do 1Password - - - Import… - Importar... - - - Passkeys… - Chaves de Acesso... - - - Import Passkey - Importar Chave de Acesso - - - Remote S&ync… - S&incronização Remota... - - - Quit Application - Sair do Aplicativo - - - Open About Dialog - Abrir a Caixa de Diálogo Sobre - - - Open Database - Abrir Banco de Dados - - - Create Database - Criar Banco de Dados - - - Merge From Database - Mesclar Do Banco de Dados - - - Create Entry - Criar Entrada - - - Edit Entry - Editar Entrada - - - Delete Entry - Excluir Entrada - - - Create Group - Criar Grupo - - - Edit Group - Editar Grupo - - - Delete Group - Excluir Grupo - - - Download All Favicons - Baixar Todos os Favicons - - - Sort Groups A-Z - Ordenar Grupos de A-Z - - - Sort Groups Z-A - Ordenar Grupos de Z-A - - - Save Database As - Salvar Banco de Dados Como - - - Show Database Security - Mostrar Segurança do Banco de Dados - - - Show Database Reports - Mostrar Relatório do Banco de Dados - - - Show Database Settings - Mostrar Configurações do Banco de Dados - - - Show Passkeys - Mostrar Chaves de Acesso - - - Clone Entry - Clonar Entrada - - - Move Entry Up - Mover Entrada para Cima - - - Move Entry Down - Mover Entrada para Baixo - - - Copy Username - Copiar nome de utilizador - - - Copy Password - Copiar senha - - - Show Application Settings - Mostrar Configurações do Aplicativo - - - Show Password Generator - Mostrar Gerador de Senhas - - - Remove Passkey From Entry - Remover a chave de acesso da entrada - - - Perform Auto-Type: {USERNAME} - Executar a Digitação Automática: {USERNAME} - - - Perform Auto-Type: {USERNAME}{ENTER} - Executar a Digitação Automática: {USERNAME}{ENTER} - - - Perform Auto-Type: {PASSWORD} - Executar a Digitação Automática: {PASSWORD} - - - Perform Auto-Type: {PASSWORD}{ENTER} - Executar a Digitação Automática: {PASSWORD}{ENTER} - - - Perform Auto-Type: {TOTP} - Executar a Digitação Automática: {TOTP} - - - Copy Title - Copiar Título - - - Copy URL - Copiar URL - - - Copy Notes - Copiar Notas - - - Export to CSV - Exportar para CSV - - - Export to HTML - Exportar para HTML - - - Import KeePass1 Database - Importar banco de dados KeePass1 - - - Import 1Password Vault - Importar 1Password Vault - - - Import CSV File - Importar arquivo CSV - - - Show TOTP QR Code - Mostrar Código QR TOTP - - - Set up TOTP - Configurar o TOTP - - - Empty Recycle Bin - Esvaziar a Lixeira - - - Open Donation Website - Abrir Site de Doação - - - Open Bug Report - Abrir Rlatório de Erro - - - Open Online Documentation - Abrir Documentação Online - - - Open Keyboard Shortcuts Guide - Abrir Guia de Atalhos do Teclado - - - Save Database Backup - Salvar Backup do Banco de Dados - - - SSH Agent: Add Key - Agente SSH: Adicionar Chave - - - SSH Agent: Remove Key - Agente SSH: Remover Chave - - - Toggle Compact Mode - Alternar para o Modo Compacto - - - Set Theme: Automatic - Definir Tema: Automaticamente - - - Set Theme: Light - Definir Tema: Claro - - - Set Theme: Dark - Definir Tema: Escuro - - - Set Theme: Classic - Definir Tema: Clássico - - - Toggle Show Menubar - Alternar para Mostrar Barra de Menu - - - Toggle Show Toolbar - Alternar para Mostrar Barra de Ferramentas - - - Toggle Show Preview Panel - Alternar para Mostrar Painel de Prévia - - - Toggle Always on Top - Alternar para Sempre na Frente - - - Toggle Hide Usernames - Alternar para Ocultar Nomes de Usuário - - - Toggle Hide Passwords - Alternar para Ocultar as Senhas - - - Export to XML - Exportar para XML - - - Toggle Allow Screen Capture - Alternar para Permitir Captura de Tela - - - Show Group Panel - Mostrar Painel do Grupo - - - Toggle Show Group Panel - Alternar Exibição do Painel do Grupo - - - Setup Remote Sync… - Configurar Sincronização Remota... - - - Password Generator - Gerador de Senha - - - E&xpire Entry… - - - - Clear SSH Agent - Limpar agente SSH - - - Clear all identities in ssh-agent - - ManageDatabase @@ -6403,6 +5564,26 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes Overwriting %1 [%2] Substituindo %1 [%2] + + older entry merged from database "%1" + entrada mais antiga mesclada do banco de dados "%1" + + + Adding backup for older target %1 [%2] + Adicionando backup para o alvo mais antigo %1 [%2] + + + Adding backup for older source %1 [%2] + Adicionando backup para fonte mais antiga %1 [%2] + + + Reapplying older target entry on top of newer source %1 [%2] + Reaplicar entradas alvo antigas em cima da fonte nova %1 [%2] + + + Reapplying older source entry on top of newer target %1 [%2] + Reaplicar fonte alvo antiga em cima do alvo novo %1 [%2] + Synchronizing from newer source %1 [%2] Sincronizando de uma fonte mais nova %1 [%2] @@ -6462,6 +5643,14 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. Aqui você pode ajustar as configurações de criptografia do banco de dados. Não se preocupe, você pode alterá-los mais tarde nas configurações do banco de dados. + + Advanced Settings + Definições avançadas + + + Simple Settings + Definições básicas + NewDatabaseWizardPageDatabaseKey @@ -6496,25 +5685,6 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes Por favor preencha o nome de exibição e uma descrição opcional para o seu novo banco de dados: - - NewEntryAttachmentsDialog - - Attachment name cannot be empty - O nome do anexo não pode estar vazio - - - Attachment with the same name already exists - Anexo com o mesmo nome já existe - - - Save attachment - Salvar anexo - - - New entry attachment - Novo anexo da entrada - - NixUtils @@ -6561,6 +5731,15 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes Experado %1 bytes de clear-text. Encontrados %2 + + OpVaultOpenWidget + + Read Database did not produce an instance +%1 + Ler banco de dados não produz uma instância +%1 + + OpVaultReader @@ -6634,10 +5813,6 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes Unknown cipher: %1 Cifra desconhecida: %1 - - AES-256/GCM is currently not supported - AES-256/GCM não é suportado atualmente - Passphrase is required to decrypt this key Senha é necessária para decriptar esta chave @@ -6703,183 +5878,8 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes EOF inesperado enquanto escrevendp a chave privada. - (encrypted) - (criptografado) - - - - OpenSSHKeyGenDialog - - SSH Key Generator - Gerador de chave SSH - - - Type - Tipo - - - Bits - Bits - - - Comment - Comentário - - - - PasskeyExportDialog - - KeePassXC - Passkey Export - KeePassXC - Exportar Chave de Acesso - - - Filenames will be generated with title and .passkey file extension. - Os nomes dos arquivos serão gerados com título e extensão de arquivo .passkey. - - - Export entries - Exportar entradas - - - Export Selected - Exportar Selecionados - - - Cancel - Cancelar - - - Export to folder - Expotar para pasta - - - Export the following passkey entries. - Exportar as seguintes chaves de acesso. - - - - PasskeyExporter - - KeePassXC: Passkey Export - KeePassXC: Exportar Chave de Acesso - - - File "%1.passkey" already exists. -Do you want to overwrite it? - - Arquivo "%1.passkey" já existe. -Você deseja sobrescrevê-lo? - - - - Cannot open file - Não foi possível abrir o arquivo - - - Cannot open file "%1" for writing. - Não é possível abrir o arquivo "%1" para gravação. - - - Cannot write to file - Não foi possível salvar no arquivo - - - - PasskeyImportDialog - - KeePassXC - Passkey Import - KeePassXC - Importar Chave de Acesso - - - Username: %1 - Nome de Usuário: %1 - - - Group - Grupo - - - Database - Banco de Dados - - - Import Passkey - Importar Chave de Acesso - - - Import - Importar - - - Cancel - Cancelar - - - Entry - Entrada - - - Create new entry - Criar nova entrada - - - Relying Party: %1 - Parte confiável: %1 - - - Import the following passkey: - importar as seguintes chaves de acesso: - - - Import the following passkey to this entry: - Importar as seguintes chaves de acesso para esta entrada: - - - Default passkeys group (Imported Passkeys) - Grupo de chaves de acesso padrão (chaves de acesso importadas) - - - - PasskeyImporter - - Passkey file - Arquivo de chave de acesso - - - All files - Todos arquivos - - - Cannot open file - Não foi possível abrir o arquivo - - - Cannot open file "%1" for reading. - Não é possível abrir o arquivo "%1" para leitura. - - - Open passkey file - Abrir o arquivo da chave de acesso - - - Cannot import passkey - Não foi possível importar a chave de acesso - - - Cannot import passkey file "%1". Data is missing. - Não foi possível importar o arquivo da chave de acesso "%1". Faltam dados. - - - Cannot import passkey file "%1". -The following data is missing: -%2 - Não foi possível importar o arquivo da chave de acesso "%1". -Os seguintes dados estão faltando: -%2 - - - Cannot import passkey file "%1". Private key is missing or malformed. - Não foi possível importar o arquivo da chave de acesso "%1". A chave privada está ausente ou malformada. + AES-256/GCM is currently not supported + AES-256/GCM não é suportado atualmente @@ -7070,7 +6070,7 @@ Os seguintes dados estão faltando: Passphrase - Senha + Frase secreta Word Separator: @@ -7084,6 +6084,10 @@ Os seguintes dados estão faltando: Word Count: Número de Palavras: + + Character Count: + Número de Caracteres: + Word Case: Caixa da palavra: @@ -7096,6 +6100,10 @@ Os seguintes dados estão faltando: Add custom wordlist Adicionar lista de palavras personalizada + + character + caractere + Close Fechar @@ -7132,30 +6140,6 @@ Os seguintes dados estão faltando: 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 - Confirm Delete Wordlist Confirmar exclusão da lista de palavras @@ -7203,20 +6187,32 @@ Tem certeza que deseja substitui-la? Caracteres Especiais - passwordLength - + Password Quality: %1 + Qualidade da senha: %1 - Characters: %1 - Caracteres: %1 + Poor + Password quality + Pobre - MIXED case - + Weak + Password quality + Fraco - Excluded characters: "0", "1", "l", "I", "O", "|", "﹒", "B", "8", "G", "6" - Caracteres excluídos: '0', '1', 'l', 'I', 'O', '|', '﹒', 'B', '8', 'G', '6' + Good + Password quality + Bom + + + Excellent + Password quality + Excelente + + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + Caracteres excluídos: "0", "1", "l", "I", "O", "|", "﹒" @@ -7266,8 +6262,8 @@ Tem certeza que deseja substitui-la? Excelente - Toggle password visibility using Control + H. Open the password generator using Control + G. - Alternar a visibilidade da senha usando Control + H. Abrir o gerador de senha usando Control + G. + Toggle password visibilty using Control + H. Open the password generator using Control + G. + @@ -7285,21 +6281,6 @@ Tem certeza que deseja substitui-la? Pressione &Tab entre os caracteres - - PreviewEntryAttachmentsDialog - - Preview entry attachment - - - - No preview available - Nenhuma prévia disponível - - - Image format not supported - Formato de imagem não suportado - - QMessageBox @@ -7338,10 +6319,6 @@ Tem certeza que deseja substitui-la? Continue Continuar - - Continue with weak password - Continuar com senha fraca - QObject @@ -7735,10 +6712,6 @@ Tem certeza que deseja substitui-la? Too many arguments provided. Muitos argumentos fornecidos. - - Path of the database. - Caminho do banco de dados - Target decryption time in MS for the database. Tempo de descriptografia de destino em MS para o banco de dados. @@ -7759,6 +6732,10 @@ Tem certeza que deseja substitui-la? Create a new database. Criar um novo banco de dados. + + Path of the database. + Caminho do banco de dados + Invalid decryption time %1. Tempo de descriptografia inválido %1. @@ -7803,158 +6780,6 @@ Tem certeza que deseja substitui-la? Successfully created new database. Novo banco de dados criado com sucesso. - - Unset the password for the database. - Desative a senha do banco de dados. - - - Unset the key file for the database. - Desmarque o arquivo de chave para o banco de dados. - - - Edit a database. - Editar um banco de dados. - - - Cannot use %1 and %2 at the same time. - Não é possível usar %1 e %2 em simultâneo. - - - Could not change the database key. - Não foi possível mudar a chave do banco de dados. - - - Database was not modified. - O banco de dados não foi modificado. - - - Writing the database failed: %1 - Gravação do banco de dados falhou: %1 - - - Successfully edited the database. - Banco de dados editado com sucesso. - - - Cannot remove password: The database does not have a password. - Não é possível remover a senha: O banco de dados não possui uma senha. - - - Cannot remove file key: The database does not have a file key. - Não é possível remover a chave do arquivo: o banco de dados não possui uma chave de arquivo. - - - Loading the new key file failed: %1 - Carregamento do novo arquivo chave falhou: %1 - - - Found unexpected Key type %1 - Tipo de Chave inesperada encontrado %1 - - - Cannot remove all the keys from a database. - Não é possível remover todas as chaves de um banco de dados. - - - Show a database's information. - Mostra as informações de um banco de dados. - - - UUID: - UUID: - - - Name: - Nome: - - - Description: - Descrição: - - - Cipher: - Cifra: - - - KDF: - KDF: - - - Recycle bin is enabled. - A Lixeira está habilitada. - - - Recycle bin is not enabled. - A Lixeira não está habilitada. - - - Location - Localização - - - Database created - Banco de dados criado - - - Last saved - Salvo por último em - - - Unsaved changes - Mudanças não-salvas - - - yes - sim - - - no - não - - - Number of groups - Número de grupos - - - Number of entries - Número de entradas - - - Number of expired entries - Número de entradas expiradas - - - Unique passwords - Senhas únicas - - - Non-unique passwords - Senhas não-únicas - - - Maximum password reuse - Máximo de reusos da senha - - - Number of short passwords - Números de senhas pequenas - - - Number of weak passwords - Número de senhas fracas - - - Entries excluded from reports - Entradas excluídas dos relatórios - - - Average password length - Comprimento médio da senha - - - %1 characters - %1 caracteres - Word count for the diceware passphrase. Contagem de palavra para a frase-chave diceware. @@ -7978,6 +6803,10 @@ Tem certeza que deseja substitui-la? Invalid word count %1 Contador de palavra %1 inválido + + The word list is too small (< 1000 items) + A lista de palavras é muito pequena (<1000 itens) + Title for the entry. Título para a entrada. @@ -8002,6 +6831,10 @@ Tem certeza que deseja substitui-la? Enter new password for entry: Digite uma nova senha para entrada: + + Writing the database failed: %1 + Gravação do banco de dados falhou: %1 + Successfully edited entry %1. Entrada editada com sucesso %1. @@ -8122,6 +6955,10 @@ Tem certeza que deseja substitui-la? Exit interactive mode. Sair do modo interativo. + + Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. + Formato usado ao exportar. Escolhas disponíveis são 'xml' ou 'csv'. O padrão é 'xml'. + Exports the content of a database to standard output in the specified format. Exportar o conteúdo do banco de dados para um padrão de saída no formato especificado. @@ -8222,6 +7059,106 @@ Tem certeza que deseja substitui-la? Successfully imported database. Banco de dados importado com sucesso. + + Show a database's information. + Mostra as informações de um banco de dados. + + + UUID: + UUID: + + + Name: + Nome: + + + Description: + Descrição: + + + Cipher: + Cifra: + + + KDF: + KDF: + + + Recycle bin is enabled. + A Lixeira está habilitada. + + + Recycle bin is not enabled. + A Lixeira não está habilitada. + + + Location + Localização + + + Database created + Banco de dados criado + + + Last saved + Salvo por último em + + + Unsaved changes + Mudanças não-salvas + + + yes + sim + + + no + não + + + Number of groups + Número de grupos + + + Number of entries + Número de entradas + + + Number of expired entries + Número de entradas expiradas + + + Unique passwords + Senhas únicas + + + Non-unique passwords + Senhas não-únicas + + + Maximum password reuse + Máximo de reusos da senha + + + Number of short passwords + Números de senhas pequenas + + + Number of weak passwords + Número de senhas fracas + + + Entries excluded from reports + Entradas excluídas dos relatórios + + + Average password length + Comprimento médio da senha + + + %1 characters + %1 caracteres + Unknown command %1 Comando desconhecido %1 @@ -8394,10 +7331,6 @@ Comandos disponíveis: Show the protected attributes in clear text. Mostrar os atributos protegidos como texto legível. - - Show all the attributes of the entry. - Mostrar todos os atributos da entrada. - Show the attachments of the entry. Mostra os anexos de uma entrada. @@ -8468,10 +7401,6 @@ Por favor, considere gerar um novo arquivo-chave. Invalid YubiKey serial %1 Serial YubiKey inválido %1 - - Please present or touch your YubiKey to continue. - Introduza ou toque na sua YubiKey para continuar. - Enter password to encrypt database (optional): Digite a senha para encriptar seu banco de dados (opcional): @@ -8710,6 +7639,18 @@ Foi encontrada a versão %2.%3.%4 file empty arquivo vazio + + malformed string + sequência de caracteres malformada + + + missing closing quote + apóstrofo de fechamento ausente + + + %1: (row, col) %2,%3 + %1: (linha, coluna) %2,%3 + AES 256-bit AES 256-bit @@ -8878,7 +7819,7 @@ Foi encontrada a versão %2.%3.%4 lock all open databases - bloquear todas os bancos de dados abertas + bloquear todas os bancos de dados abertos key file of the database @@ -8888,6 +7829,14 @@ Foi encontrada a versão %2.%3.%4 read password of the database from stdin ler a senha do banco de dados da entrada padrão + + allow app screen recordering and screenshots + permitir gravação e capturas de tela do aplicativo + + + Locked databases. + Bancos de dados bloqueados. + Database failed to lock. Falha ao bloquear banco de dados. @@ -8896,10 +7845,6 @@ Foi encontrada a versão %2.%3.%4 Another instance of KeePassXC is already running. Outra instância do KeePassXC já está rodando. - - KeePassXC is not running. No open database to lock - KeePassXC não está em execução. Não há nenhum banco de dados para bloquear. - Fatal error while testing the cryptographic functions. Erro fatal enquanto testava as funções criptográficas. @@ -8932,7 +7877,7 @@ Foi encontrada a versão %2.%3.%4 Warning: Failed to block screenshot capture on a top-level window. - Alerta: Falha ao bloquear captura de tela em uma janela. + Alerta: Falha ao bloquear captura de tela em uma janela pai. Invalid Cipher @@ -8940,303 +7885,73 @@ Foi encontrada a versão %2.%3.%4 Invalid KDF - Função de derivação de chave (KDF) inválido + KDF inválido - Access to all entries is denied - Negar acesso a todas as entradas + Please present or touch your YubiKey to continue. + Introduza ou toque na sua YubiKey para continuar. - allow screenshots and app recording (Windows/macOS) - permitir capturas de tela e gravação de aplicativos (Windows/macOS) + Show all the attributes of the entry. + Mostrar todos os atributos da entrada. + + + Edit a database. + Editar um banco de dados. + + + Could not change the database key. + Não foi possível mudar a chave do banco de dados. + + + Database was not modified. + O banco de dados não foi modificado. + + + Successfully edited the database. + Banco de dados editado com sucesso. + + + Loading the new key file failed: %1 + Carregamento do novo arquivo chave falhou: %1 + + + Unset the password for the database. + Desative a senha do banco de dados. + + + Unset the key file for the database. + Desmarque o arquivo de chave para o banco de dados. + + + Cannot use %1 and %2 at the same time. + Não é possível usar %1 e %2 em simultâneo. + + + Cannot remove all the keys from a database. + Não é possível remover todas as chaves de um banco de dados. + + + Cannot remove password: The database does not have a password. + Não é possível remover a senha: O banco de dados não possui uma senha. + + + Cannot remove file key: The database does not have a file key. + Não é possível remover a chave do arquivo: o banco de dados não possui uma chave de arquivo. + + + Found unexpected Key type %1 + Tipo de Chave inesperado encontrado %1 Set the key file for the database. -This option is deprecated, use --set-key-file instead. - Define o arquivo da chave para o banco de dados. -Essa opção está obsoleta; em vez disso, use --set-key-file. +This options is deprecated, use --set-key-file instead. + Defina o arquivo de chave para o banco de dados. +Esta opção está obsoleta, use --set-key-file em seu lugar. - Databases have been locked. - Os bancos de dados foram trancados. - - - Attestation not supported - Atestado não suportado - - - Credential is excluded - Credencial foi excluída - - - Passkeys request canceled - Pedido de Chaves de Acesso cancelado - - - Invalid user verification - Verificação de usuário inválida - - - Empty public key - Chave pública vazia - - - Invalid URL provided - URL inválida fornecida - - - Passkeys - Chaves de Acesso - - - AES initialization failed - Falha na inicialização do AES - - - AES encrypt failed - A criptografia AES falhou - - - Failed to store in Linux Keyring - Falha ao armazenar no Linux Keyring - - - Polkit returned an error: %1 - O Polkit retornou um erro: %1 - - - Could not locate key in keyring - Não foi possível localizar a chave no chaveiro - - - Could not read key in keyring - Não foi possível ler a chave no chaveiro - - - AES decrypt failed - Falha na descriptografia AES - - - No Polkit authentication agent was available - Nenhum agente de autenticação do Polkit estava disponível - - - Polkit authorization failed - Houve uma falha na autorização do Polkit - - - No Quick Unlock provider is available - Nenhum provedor de Desbloqueio Rápido está disponível - - - Failed to init KeePassXC crypto. - Falha ao iniciar a criptografia KeePassXC. - - - Failed to encrypt key data. - Não foi possível cifrar os dados da chave - - - Failed to get Windows Hello credential. - Falha ao obter a credencial do Windows Hello. - - - Failed to decrypt key data. - Não foi possível decifrar os dados da chave. - - - Origin is empty or not allowed - A origem está vazia ou não é permitida - - - Effective domain is not a valid domain - O domínio efetivo não é um domínio válido - - - Origin and RP ID do not match - A origem e a ID do RP não coincidem - - - No supported algorithms were provided - Nenhum algoritmo compatível foi fornecido - - - Wait for timer to expire - Aguarde o temporizador expirar - - - Challenge is shorter than required minimum length - O desafio é mais curto do que a duração mínima exigida - - - user.id does not match the required length - user.id não corresponde ao tamanho necessário - - - Favorite - Tag for favorite entries - Favorito - - - File does not exist. - O arquivo não existe. - - - Cannot open file: %1 - Não é possível abrir o arquivo: %1 - - - Cannot parse file: %1 at position %2 - Não é possível analisar o arquivo: %1 na posição %2 - - - Failed to decrypt json file: %1 - Houve uma falha ao descriptografar o arquivo json: %1 - - - Invalid encKeyValidation field - Campo encKeyValidation inválido - - - Invalid cipher list within encKeyValidation field - Lista de cifras inválida no campo encKeyValidation - - - Wrong password - Senha errada - - - Invalid encrypted data field - Campo de dados criptografados inválido - - - Invalid cipher list within encrypted data field - Lista de cifras inválida no campo de dados criptografados - - - Cannot initialize cipher - Não é possível inicializar a cifra - - - Cannot decrypt data - Não é possível descriptografar os dados - - - Bitwarden Import - Importar do Bitwarden - - - Archived - Tag for archived entries - Arquivado - - - Invalid 1PUX file format: Not a valid ZIP file. - Formato de arquivo 1PUX inválido: Não é um arquivo ZIP válido. - - - Invalid 1PUX file format: Missing export.data - Formato de arquivo 1PUX inválido: Falta export.data - - - 1Password Import - Importar 1Password - - - Enter Shortcut - Digite o Atalho - - - Action - Ação - - - Shortcuts - Atalhos - - - Unknown passkeys error - Chave de acesso com erro desconhecido - - - Invalid KDF iterations, cannot decrypt json file - Iterações KDF inválidas, não é possível descriptografar o arquivo json - - - Unsupported format, ensure your Bitwarden export is password-protected - Formato não suportado, certifique-se de que sua exportação Bitwarden esteja protegida por senha - - - Only PBKDF and Argon2 are supported, cannot decrypt json file - Apenas PBKDF e Argon2 são suportados, não é possível descriptografar o arquivo json - - - Reset Shortcuts - Redefinir Atalhos - - - Double click an action to change its shortcut - Clique duas vezes em uma ação para alterar seu atalho - - - Filter... - Filtro... - - - Shortcut Conflict - Conflito de Atalhos - - - Shortcut %1 conflicts with '%2'. Overwrite shortcut? - O atalho %1 está em conflito com '%2'. Substituir o atalho? - - - Cannot generate valid passphrases because the wordlist is too short - Não é possível gerar senhas válidas porque a lista de palavras é muito curta - - - Encrypted files are not supported. - - - - Proton Pass Import - Importar do Proton Pass - - - Delete plugin data? - Apagar dados do plugin? - - - Delete plugin data from Entry(s)? - Excluir dados do plugin da Entrada?Excluir dados do plugin da(s) Entrada(s)?Excluir dados do plugin da(s) Entrada(s)? - - - Passkey - Chave de acesso - - - Format to use when exporting. Available choices are 'xml', 'csv' or 'html'. Defaults to 'xml'. - - - - start minimized to the system tray - iniciar minimizado na bandeja do sistema - - - malformed string, possible unescaped delimiter - - - - missing closing delimiter - - - - %1, row: %2, column: %3 - - - - Tags - Etiquetas + KeePassXC is not running. No open database to lock + KeePassXC não está em execução. Não há nenhum banco de dados para bloquear. @@ -9273,39 +7988,20 @@ Essa opção está obsoleta; em vez disso, use --set-key-file. Erro interno do zlib: - - RemoteHandler - - Command `%1` did not finish in time. Process was killed. - - - - Failed to upload merged database. Command `%1` did not finish in time. Process was killed. - - - - Invalid download parameters provided. - Parâmetros de download inválidos fornecidos. - - - Command `%1` failed to download database. - - - - Invalid database pointer or upload parameters provided. - Ponteiro de banco de dados ou parâmetros de upload inválidos fornecidos. - - - Command `%1` exited with status code: %2 - - - - Failed to upload merged database. Command `%1` exited with status code: %2 - - - ReportsWidgetBrowserStatistics + + Exclude expired entries from the report + Excluir entradas expiradas do relatório + + + Show only entries which have URL set + Mostre apenas as entradas que tenham uma URL definida + + + Show only entries which have browser settings in custom data + Mostre apenas as entradas que possuam as definições do navegador nos dados personalizados + Double-click entries to edit. Faça um clique nas entradas para alterar @@ -9364,59 +8060,50 @@ Essa opção está obsoleta; em vez disso, use --set-key-file. Delete Entry(s)… - Excluir entrada...Excluir entradas...Excluir entradas... + Excluir entradas...Excluir entradas... Exclude from reports Excluir dos relatórios - - Expire Entry(s)… - - - - Only show entries that have a URL - Mostrar apenas entradas que tenham a URL - - - Only show entries that have been explicitly allowed or denied - Mostrar apenas entradas que foram explicitamente permitidas ou negadas - - - Show expired entries - Mostrar entradas expiradas - - - (Expired) - (Expirada) - - - Delete plugin data from Entry(s)… - Excluir dados de plugin da Entrada...Excluir dados de plugin(s) da(s) Entrada(s)...Excluir dados de plugin(s) da(s) Entrada(s)... - ReportsWidgetHealthcheck - Show expired entries - Mostrar entradas expiradas + Exclude expired entries from the report + Excluir entradas expiradas do relatório - (Expired) - (Expirada) + Also show entries that have been excluded from reports + Exibir também entradas que foram excluídas dos relatórios Hover over reason to show additional details. Double-click entries to edit. Passe o mouse sobre o motivo para mostrar detalhes adicionais. Clique duas vezes nas entradas para editar. + + Bad + Password quality + Ruim + Bad — password must be changed Ruim — a senha precisa ser mudada + + Poor + Password quality + Pobre + Poor — password should be changed Pobre — a senha precisa ser mudada + + Weak + Password quality + Fraco + Weak — consider changing the password Fraca — considere mudar a senha @@ -9465,14 +8152,6 @@ Essa opção está obsoleta; em vez disso, use --set-key-file. Exclude from reports Excluir dos relatórios - - Expire Entry(s)… - - - - Show entries that have been excluded from reports - Mostrar entradas que foram excluídas dos relatórios - ReportsWidgetHibp @@ -9568,77 +8247,6 @@ Essa opção está obsoleta; em vez disso, use --set-key-file. Exclude from reports Excluir dos relatórios - - Expire Entry(s)… - - - - - ReportsWidgetPasskeys - - Export - Exportar - - - Import - Importar - - - List of entry URLs - Lista de URLs das entradas - - - Title - Título - - - Path - Caminho - - - Username - Nome de usuário - - - URLs - URLs - - - Edit Entry… - Editar entrada... - - - Delete Entry(s)… - Excluir entrada...Excluir entradas...Excluir entradas... - - - Relying Party - Parte confiável - - - Show expired entries - Mostrar entradas expiradas - - - (Expired) - (Expirada) - - - Export Confirmation - Confirmação da Exportação - - - The passkey file will be vulnerable to theft and unauthorized use, if left unsecured. Are you sure you want to continue? - O arquivo de chave de acesso ficará vulnerável a roubo e uso não autorizado caso não seja protegido. Tem certeza de que deseja prosseguir? - - - Please wait, list of entries with passkeys is being updated… - Aguarde, a lista das entradas das chaves de acesso está sendo atualizada... - - - No entries with passkeys. - Não há entradas com chaves de acesso. - ReportsWidgetStatistics @@ -9813,14 +8421,6 @@ Essa opção está obsoleta; em vez disso, use --set-key-file. No agent running, cannot list identities. Nenhum agente em execução, não é possível listar identidades. - - Failed to remove all SSH identities from agent. - - - - All SSH identities removed from agent. - - SearchHelpWidget @@ -9887,10 +8487,6 @@ Essa opção está obsoleta; em vez disso, use --set-key-file. Search Help Ajuda com a Busca - - Save Search - Salvar Busca - Search (%1)… Search placeholder text, %1 is the keyboard shortcut @@ -9904,6 +8500,10 @@ Essa opção está obsoleta; em vez disso, use --set-key-file. Limit search to selected group Limitar busca ao grupo selecionado + + Save Search + Salvar Busca + SettingsClientModel @@ -9965,10 +8565,34 @@ Essa opção está obsoleta; em vez disso, use --set-key-file. Confirm when passwords are retrieved by clients Confirmar quando as senhas forem obtidas pelos clientes + + <html><head/><body><p><span style=" + font-family:'-apple-system','BlinkMacSystemFont','Segoe UI','Helvetica','Arial','sans-serif','Apple Color + Emoji','Segoe UI Emoji'; font-size:14px; color:#24292e; background-color:#ffffff;">This setting does + not override disabling recycle bin prompts</span></p></body></html> + + <html><head/><body><p><span style=" + font-family:'-apple-system','BlinkMacSystemFont','Segoe UI','Helvetica','Arial','sans-serif','Apple Color + Emoji','Segoe UI Emoji'; font-size:14px; color:#24292e; background-color:#ffffff;">Esta definição não substitui + a desativação das solicitações da lixeira</span></p></body></html> + + Confirm when clients request entry deletion Confirmar quando os clientes solicitam uma remoção + + <html><head/><body><p>This improves compatibility with certain applications + which search for password without unlocking the database first.</p><p>But enabling this may also + crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a + different value set in applications.)</p></body></html> + + <html><head/><body><p>Melhora a compatibilidade com certas aplicações + que procuram por senhas, mas sem desbloquear o banco de dados.</p><p> Porém, ao ativar esta opção + também é possível travar o cliente se o banco de dados não puder ser desbloqueado dentro de um certo limite de tempo. (normalmente 25 seg., embora + outro valor possa ser definido em aplicações).</p></body></html> + + Prompt to unlock database before searching Peça o desbloqueio do banco de dados antes de pesquisar @@ -9993,14 +8617,6 @@ Essa opção está obsoleta; em vez disso, use --set-key-file. Save current changes to activate the plugin and enable editing of this section. Salve as alterações atuais para ativar o plugin e ativar a edição desta seção. - - <html><head/><body><p>This setting does not override disabling recycle bin prompts </p></body></html> - <html><head/><body><p>Essa configuração não substitui a desativação dos avisos da lixeira </p></body></html> - - - <html><head/><body><p>This improves compatibility with certain applications which search for password without unlocking the database first.</p><p>But enabling this may also crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a different value set in applications.) </p></body></html> - <html><head/><body><p>Isso melhora a compatibilidade com determinados aplicativos que buscam a senha sem antes desbloquear o banco de dados.<p>No entanto, esta ativação também pode travar o cliente se o banco de dados não puder ser desbloqueado dentro de um determinado limite de tempo. (Geralmente 25s, mas pode haver um valor diferente definido nos aplicativos.)</p></body></html> - SettingsWidgetKeeShare @@ -10108,14 +8724,6 @@ Essa opção está obsoleta; em vez disso, use --set-key-file. TagModel - - Clear Search - Limpar Busca - - - All Entries - Todas as Entradas - Expired Expirado @@ -10124,6 +8732,14 @@ Essa opção está obsoleta; em vez disso, use --set-key-file. Weak Passwords Senhas Fracas + + All Entries + Todas as Entradas + + + Clear Search + Limpar Busca + TagView @@ -10301,6 +8917,26 @@ Exemplo: JBSWY3DPEHPK3PXP Start storing your passwords securely in a KeePassXC database Começe a guardar suas senhas de maneira segura em um banco de dados do KeePassXC + + Create new database + Criar novo banco de dados + + + Open existing database + Abrir banco de dados existente + + + Import from KeePass 1 + Importar do KeePass 1 + + + Import from 1Password + Importar do 1Password + + + Import from CSV + Importar arquivo CSV + Recent databases Bancos de dados recentes @@ -10313,18 +8949,6 @@ Exemplo: JBSWY3DPEHPK3PXP Welcome to KeePassXC %1 Bem-vindo ao KeePassXC %1 - - Create Database - Criar Banco de Dados - - - Open Database - Abrir Banco de Dados - - - Import File - Importar Arquivo - WinUtils @@ -10341,8 +8965,31 @@ Exemplo: JBSWY3DPEHPK3PXP Não foi possível registrar o atalho global + + WindowsHello + + Failed to init KeePassXC crypto. + Falha ao iniciar a criptografia KeePassXC. + + + Failed to encrypt key data. + Não foi possível cifrar os dados da chave + + + Failed to get Windows Hello credential. + Falha ao obter a credencial do Windows Hello. + + + Failed to decrypt key data. + Não foi possível decifrar os dados da chave. + + YubiKey + + %1 No interface, slot %2 + %1 Sem interface, slot %2 + General: Geral: @@ -10354,6 +9001,14 @@ Exemplo: JBSWY3DPEHPK3PXP YubiKeyEditWidget + + Refresh hardware tokens + Atualizar os tokens de hardware + + + Refresh + Atualizar + Hardware key slot selection Seleção de campo de chave de hardware @@ -10386,6 +9041,10 @@ Exemplo: JBSWY3DPEHPK3PXP Challenge-Response set, click to change or remove Pergunta de segurança definida, clique para alterar ou remover + + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + <p>Se tiver uma <a href="https://www.yubico.com/">YubiKey</a> ou <a href="https://onlykey.io">Only Key</a>, pode utilizá-la para mais segurança.</p><p>A chave requer que uma das suas ranhuras seja programada como uma <a href="https://www.yubico.com/products/services-software/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + Detecting hardware keys… Detectando chaves de hardware... @@ -10394,25 +9053,28 @@ Exemplo: JBSWY3DPEHPK3PXP No hardware keys detected Nenhuma chave física detectada + + + YubiKeyInterface - Refresh hardware keys - Atualizar chaves de hardware - - - <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed with <a href="https://keepassxc.org/docs/#faq-yubikey-howto">Challenge-Response</a>.</p> - - - - Hardware keys found, but no slots are configured - + %1 Invalid slot specified - %2 + Slot inválido do %1 especificado - %2 YubiKeyInterfacePCSC + + (PCSC) %1 [%2] Challenge-Response - Slot %3 + (PCSC) %1 [%2] Resposta-Desafio - Slot %3 + The YubiKey PCSC interface has not been initialized. A interface YubiKey PCSC não foi inicializada. + + Hardware key is currently in use. + A chave de hardware está atualmente em uso. + Could not find or access hardware key with serial number %1. Please present it to continue. Não foi possível localizar ou acessar a interface para o dispositivo com o número de série %1. Introduza o seu dispositivo para continuar. @@ -10429,21 +9091,6 @@ Exemplo: JBSWY3DPEHPK3PXP Failed to complete a challenge-response, the PCSC error code was: %1 Houve uma falha ao tentar concluir a pergunta de segurança. O código de erro do PSCSC foi: %1 - - (NFC) %1 [%2] - Slot %3, %4 - YubiKey display fields - (NFC) %1 [%2] - Slot %3, %4 - - - Press - USB Challenge-Response Key interaction request - Aperte - - - Passive - USB Challenge-Response Key no interaction required - Passivo - YubiKeyInterfaceUSB @@ -10451,6 +9098,14 @@ Exemplo: JBSWY3DPEHPK3PXP Unknown Desconhecido + + (USB) %1 [%2] Configured Slot - %3 + (USB) %1 [%2] Slot configurado - %3 + + + (USB) %1 [%2] Challenge-Response - Slot %3 - %4 + (USB) %1 [%2] Resposta-Desafio - Slot %3 - %4 + Press USB Challenge-Response Key interaction request @@ -10465,6 +9120,10 @@ Exemplo: JBSWY3DPEHPK3PXP The YubiKey USB interface has not been initialized. A interface YubiKey USB não foi inicializada. + + Hardware key is currently in use. + A chave de hardware está atualmente em uso. + Could not find hardware key with serial number %1. Please plug it in to continue. Não foi possível encontrar a chave de hardware com o número de série %1. Por favor, conecte-o para continuar. @@ -10481,15 +9140,5 @@ Exemplo: JBSWY3DPEHPK3PXP Failed to complete a challenge-response, the specific error was: %1 Falha ao completar o desafio-resposta, o erro específico foi: %1 - - %1 [%2] - Slot %3 - YubiKey NEO display fields - %1 [%2] - Slot %3 - - - %1 [%2] - Slot %3, %4 - YubiKey display fields - %1 [%2] - Slot %3, %4 - \ No newline at end of file diff --git a/share/translations/keepassxc_pt_PT.ts b/share/translations/keepassxc_pt_PT.ts index f15877fe4..b3cdde1a2 100644 --- a/share/translations/keepassxc_pt_PT.ts +++ b/share/translations/keepassxc_pt_PT.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 é distribuído nos termos da GNU General Public License (GPL) versão 2 ou versão 3 (por opção) + KeePassXC é distribuído nos termos da GNU General Public License (GPL) versão 2 ou versão 3 (por opção). Project Maintainers: @@ -23,7 +23,7 @@ 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 + Um agradecimento especial da equipa KeePassXC a debfx por ter criado a aplicação KeePassX. Contributors @@ -54,11 +54,11 @@ Non-existing/inaccessible executable path. Please double-check the client is legit. - O caminho do executável não existente/acessível. Verifique se a aplicação utilizada é legítima. + O caminho do executável não existe ou não pode ser acedido. Deve verificar se a aplicação utilizada é legítima. <html><head/><body><p><span style=" font-weight:600;">%1 </span>is requesting access to the following entries:</p></body></html> - <html><head/><body><p><span style=" font-weight:600;">%1 </span>está a solicitar acesso a estas entradas:</p></body></html> + <html><head/><body><p><span style=" font-weight:600;">%1 </span>está a solicitar acessos a estas entradas:</p></body></html> Name @@ -80,10 +80,6 @@ Details Detalhes - - Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. - A sua escolha será memorizada enquanto o cliente e o KeePassXC estiverem em execução - Remember Memorizar @@ -92,6 +88,10 @@ Allow Selected Permitir selecionados + + Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. + A sua escolha será memorizada enquanto o cliente e o KeePassXC estiverem em execução. + Deny All && Future Recusar agora e futuramente @@ -116,19 +116,15 @@ Use Pageant - Utilizar "Pageant" + Usar Pageant Use OpenSSH - Utilizar "OpenSSH" - - - Use both agents - Utilizar ambos os agentes + Usar OpenSSH SSH_AUTH_SOCK override - Sobreposição SSH_AUTH_SOCK + Substituição SSH_AUTH_SOCK SSH_AUTH_SOCK value @@ -152,7 +148,11 @@ SSH Agent connection is working! - A ligação ao agente SSH está funcional! + Ligação ao agente SSH a funcionar! + + + Use both agents + Utilizar ambos os agentes @@ -169,10 +169,6 @@ Security Segurança - - This setting cannot be enabled when minimize on unlock is enabled. - Esta definição não pode ser ativada se a opção "Minimizar janela após desbloquear a base de dados" estiver ativa. - Access error for config file %1 Erro de acesso ao ficheiro %1 @@ -217,49 +213,21 @@ You must restart the application to set the new language. Would you like to restart now? Tem que reiniciar a aplicação para aplicar o novo idioma. Reiniciar agora? + + Reset Settings? + Repor definições? + + + Are you sure you want to reset all general and security settings to default? + Tem a certeza de que deseja repor todas as definições para os valores padrão? + Select backup storage directory Selecione o diretório para o backup - Confirm Reset - Confirmação de reposição - - - Are you sure you want to reset all settings to default? - Tem a certeza de que pretende restaurar as definições padrão? - - - Import KeePassXC Settings - Importar definições KeePassXC - - - Failed to import settings from %1, not a valid settings file. - %1 não é um ficheiro válido e não foi possível importar as definições. - - - Export KeePassXC Settings - Exportar definições KeePassXC - - - Small - Pequeno - - - Normal - Normal - - - Medium - Médio - - - Large - Grande - - - Custom - Personalizado + This setting cannot be enabled when minimize on unlock is enabled. + Esta definição não pode ser ativada se a opção "Minimizar janela após desbloquear a base de dados" estiver ativa. @@ -278,7 +246,7 @@ Automatically launch KeePassXC at system startup - Iniciar KeePassXC no arranque do sistema operativo + Iniciar KeePassXC ao arrancar o sistema Minimize window at application startup @@ -292,13 +260,9 @@ Remember previously used databases Memorizar últimas bases de dados utilizadas - - recent files - ficheiros recentes - Load previously open databases on startup - Ao iniciar, carregar últimas bases de dados utilizadas + Ao iniciar, carregar as últimas base de dados utilizadas Remember database key files and security dongles @@ -312,6 +276,25 @@ Include beta releases when checking for updates Incluir versões beta ao procurar por atualizações + + On database unlock, show entries that + Ao desbloquear a base de dados, mostrar entradas que + + + have expired + On database unlock, show entries that... + caducaram + + + days + On database unlock, show entries that will expire within %1 days + dias + + + will expire within + On database unlock, show entries that... + irão caducar dentro de + File Management Gestão de ficheiros @@ -330,19 +313,31 @@ Automatically reload the database when modified externally - Recarregar base de dados se esta for modificada externamente + Recarregar base de dados se esta for alterada externamente Backup database file before saving - Criar backup da base de dados antes de guardar + Criar cópia de segurança da base de dados antes de guardar + + + Backup destination + Destino do backup + + + Specifies the database backup file location. Occurrences of "{DB_FILENAME}" are replaced with the filename of the saved database without extension. {TIME:<format>} is replaced with the backup time, see https://doc.qt.io/qt-5/qdatetime.html#toString. <format> defaults to format string "dd_MM_yyyy_hh-mm-ss". + Especifica a localização para o backup da base de dados. As ocorrências de "{DB_FILENAME}" serão substituidas pelo nome de ficheiro da base de dados exportada mas sem extensão. {TIME:<format>} será substituido pela hora do backup. Consulte https://doc.qt.io/qt-5/qdatetime.html#toString. <format> Os valores padrão a utilizar serão "dd_MM_yyyy_hh-mm-ss". {DB_FILENAME}.old.kdbx {DB_FILENAME}.antiga.kdbx + + Choose... + Escolher... + Use alternative saving method (may solve problems with Dropbox, Google Drive, GVFS, etc.) - Utilizar um método de guardar alternativo (pode resolver problemas com Dropbox, Google Drive, GVFS, etc) + Utilizar um método de guardar alternativo (pode resolver problemas com Dropbox, Google Drive, GVFS, etc.) Temporary file moved into place @@ -378,7 +373,7 @@ Favicon download timeout: - Tempo limite para descarregar os ícones: + Tempo limite para descarregar o 'favicon': Website icon download timeout in seconds @@ -417,10 +412,6 @@ Toolbar button style: Estilo dos botões da barra de ferramentas: - - Show passwords in color - Mostrar palavras-passe a cor - Use monospaced font for notes Utilizar letra mono-espaçada para as notas @@ -431,23 +422,23 @@ Show a system tray icon - Mostrar ícone na área de notificação do sistema + Mostrar ícone na bandeja do sistema Tray icon type - Tipo de ícone na área de notificação + Tipo de ícone na bandeja Tray icon type: - Ícone na área de notificação: + Ícone na bandeja: Hide window to system tray when minimized - Ao minimizar, ocultar janela na área de notificação do sistema + Ao minimizar, ocultar janela na bandeja do sistema Reset settings to default… - Repor definições padrão… + Repor definições padrão... Auto-Type @@ -507,69 +498,12 @@ Memorizar última entrada digitada durante: - On database unlock, show entries that will expire within - Ao desbloquear a base de dados, mostrar entradas que caduquem em + recent files + ficheiros recentes - On database unlock, show entries that will expire within - Ao desbloquear a base de dados, mostrar entradas que caduquem em - - - days - number of days warning for password expiration - dias - - - Destination format: - Formato de destino: - - - <html><head/><body><p><span style=" font-weight:600;">{DB_FILENAME}</span> is replaced with the filename of the saved database without extension</p><p><span style=" font-weight:600;">{TIME:&lt;format&gt;}</span> is replaced with the specified time format (default: dd_MM_yyyy_hh-mm-ss)</p><p>See the User Guide for more details</p></body></html> - <html><head/><body><p><span style=" font-weight:600;">{DB_FILENAME}</span> é substituido pelo nome de ficheiro da base de dados guardada, mas sem extensão</p><p><span style=" font-weight:600;">{TIME:&lt;format&gt;}</span> é substituido pelo formato de data/hora especificado (padrão: dd_MM_yyyy_hh-mm-ss)</p><p>Consulte o guia de utilizador para mais informações</p></body></html> - - - Choose folder... - Escolha a pasta... - - - Show confirmation before moving entries to recycle bin - Mostrar diálogo de confirmação antes de mover entradas para a reciclagem - - - Copy data on double clicking field in entry view - Copiar dados ao clicar duas vezes no campo - - - Show toolbar - Mostrar barra de ferramentas - - - Show the menu bar by pressing the Alt key - Mostrar barra de menu ao premir a tecla ALT - - - Show menubar - Mostrar barra de menu - - - Import settings… - Importar definições... - - - Export settings… - Exportar definições... - - - Open browser on double clicking URL field in entry view - Abrir navegador ao clicar duas vezes no campo URL - - - Font size: - Tamanho do tipo de letra: - - - Font size selection - Seleção do tamanho do tipo de letra + Show passwords in color + Mostrar palavras-passe a cor @@ -624,18 +558,34 @@ Lock databases after minimizing the window Bloquear base de dados ao minimizar a janela + + Require password repeat when it is visible + Pedir repetição de palavra-passe mesmo se visível + Hide passwords when editing them Ocultar palavras-passe durante a edição Use placeholder for empty password fields - Utilizar marcadores de posição para campos vazios de palavra-passe + 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 + Ocultar notas da entrada + + + Move entries to recycle bin without confirmation + Mover entradas para a reciclagem sem confirmação + + + Enable double click to copy the username/password entry columns + Ativar duplo clique para copiar o nome de utilizador ou palavra-passe + Privacy Privacidade @@ -648,24 +598,12 @@ Hide TOTP in the entry preview panel Ocultar TOTP no painel de pré-visualização - - Lock databases when switching user - Bloquear base de dados ao trocar de utilizador - - - Lock Options - Opções de bloqueio - - - Hide notes in the entry preview panel - Ocultar notas no painel de pré-visualização - AutoType The requested Auto-Type sequence cannot be used due to an error: - A sequência de escrita automática não pode ser utilizada devido ao seguinte erro: + A sequência de escrita automática não pode ser utilizada por causa do seguinte erro: Auto-Type Error @@ -677,15 +615,15 @@ KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. - KeePassXC necessita da permissão 'Acessibilidade' para executar a escrita automática. Se já concedeu esta permissão, pode ser necessário reiniciar a aplicação. + KeePassXC necessita da permissão 'Accessibility' para poder executar a escrita automática. Se já concedeu esta permissão, pode ser necessário reiniciar a aplicação. KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. - KeePassXC necessita das permissões 'Acessibilidade' e 'Gravador de ecrã' para executar a escrita automática. A permissão 'Gravador de ecrã' é necessária para associar o titulo da janela às entradas. Se já concedeu estas permissões, pode ser necessário reiniciar a aplicação. + KeePassXC necessita das permissões 'Accessibility' e 'Screen Recorder' para poder executar a escrita automática. A permissão 'Screen recording' é necessária para associar o titulo da janela às entradas. Se já concedeu estas permissões, pode ser necessário reiniciar a aplicação. Invalid entry provided - Indicou uma entrada inválida + Disponibilizada uma entrada inválida Bracket imbalance detected, found extra { or } @@ -704,13 +642,27 @@ Atraso muito longo detetado, o máximo é %1: %2 - Entry does not have attribute for PICKCHARS: %1 - A entrada não tem o atributo para PICKCHARS: %1 + Invalid conversion type: %1 + Tipo de conversão inválido: %1 + + + Invalid conversion syntax: %1 + Sintaxe de conversão inválida: %1 + + + Invalid regular expression syntax %1 +%2 + Sintaxe de expressão regular inválida %1 +%2 Invalid placeholder: %1 Marcador de posição inválido: %1 + + Entry does not have attribute for PICKCHARS: %1 + A entrada não tem o atributo para PICKCHARS: %1 + AutoTypeAssociationsModel @@ -752,22 +704,22 @@ AutoTypePlatformX11 + + Trying to send invalid keysym. + A tentar enviar keysym inválida. + Sequence aborted: Caps Lock is on Sequência abortada: Caps Lock está ativo Sequence aborted: Modifier keys held by user - Sequência abortada: tecla modificadora premida pelo utilizador + Sequência abortada. Tecla modificadora premida pelo utilizador. Unable to get valid keycode for key: Não foi possível obter um código válido para a chave: - - Trying to send invalid keyboard symbol. - A tentar enviar um símbolo de teclado inválido. - AutoTypeSelectDialog @@ -787,7 +739,7 @@ Ctrl+2 - Type password<br/> Ctrl+3 - Type TOTP<br/> Ctrl+4 - Use Virtual Keyboard (Windows Only)</p> <p>Pode utilizar a pesquisa avançada para localizar as entradas nas base de dados abertas. Os atalhos abaixo podem ser úteis:<br/> -Ctrl+F - Comutar pesquisa nas bases de dados<br/> +Ctrl+F - Alternar pesquisa nas bases de dados<br/> Ctrl+1 - Escrever nome de utilizador<br/> Ctrl+2 - Escrever palavra-passe<br/> Ctrl+3 - Escrever TOTP<br/> @@ -799,11 +751,11 @@ Ctrl+4 - Utilizar teclado virtual (apenas Windows)</p> Search… - Pesquisar… + Pesquisar... Type Sequence - Sequência + Escrever sequência Cancel @@ -872,13 +824,13 @@ Ctrl+4 - Utilizar teclado virtual (apenas Windows)</p> Disable for this site Desativar para este site - - Undo - Reverter - BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + KeePassXC-Browser - Guardar entrada + Ok Ok @@ -893,74 +845,13 @@ 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. - - KeePassXC - Select Database - KeePassXC - Selecionar base de dados - - - - BrowserPasskeysConfirmationDialog - - Cancel - Cancelar - - - Update - Atualizar - - - Authenticate - Autenticar - - - Register new - Registar nova - - - Register - Registar - - - Timeout in <b>%n</b> seconds... - Caduca em <b>%n</b> segundo...Caduca em <b>%n</b> segundos...Caduca em <b>%n</b> segundos... - - - Relying Party: %1 - Entidades fiáveis: %1 - - - Username: %1 - Nome de utilizador: %1 - - - KeePassXC - Passkey credentials - KeePassXC - Credenciais da chave-mestra - - - Add to existing entry - Adicionar à entrada existente - - - Existing passkey found. -Do you want to register a new passkey for: - Chave-mestra existente encontrada. -Pretende registar uma nova chave-mestra para: - - - Select the existing passkey and press Update to replace it. - Selecione a chave-mestra existente e prima "Atualizar" para a substituir. - - - Authenticate passkey credentials for: - Autenticar credenciais de chave-mestra para: - - - Do you want to register a passkey for: - Pretende registar uma chave-mestra para: - BrowserService + + KeePassXC: Create a new group + KeePassXC: Criar um novo grupo + A request for creating a new group "%1" has been received. Do you want to create this group? @@ -969,6 +860,10 @@ Do you want to create this group? Deseja criar este grupo? + + KeePassXC: New key association request + KeePassXC: Pedido de associação da nova chave + You have received an association request for the following database: %1 @@ -985,77 +880,81 @@ chrome-laptop 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? + + KeePassXC: Delete entry + KeePassXC: Eliminar entrada + A request for deleting entry "%1" has been received. Do you want to delete the entry? - Recebido um pedido para eliminar a entrada "%1". + Recebido um pedido para a eliminação da entrada "%1". Deseja eliminar a entrada? - %1 (Passkey) - %1 (chave-mestra) + Converting attributes to custom data… + A converter atributos para dados personalizados... - KeePassXC - Create a new group - KeePassXC - Criar um novo grupo + Abort + Abortar - Disable - Desativar + KeePassXC: Converted KeePassHTTP attributes + KeePassXC: Atributos KeePassHTTP convertidos - KeePassXC - Overwrite existing key? - KeePassXC - Substituir chave existente? + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + Convertidos com sucesso s atributos para %1 entrada(s). +%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.%n chaves movidas para dados personalizados. - KeePassXC - Update Entry - KeePassXC - Atualizar entrada + KeePassXC: No entry with KeePassHTTP attributes found! + KeePassXC: Não existem entradas com atributos KeePassHTTP! - KeePassXC - Delete entry - KeePassXC - Eliminar entrada + The active database does not contain an entry with KeePassHTTP attributes. + A base de dados ativa não tem entradas com atributos KeePassHTTP. - KeePassXC - New key association request - KeePassXC - Pedido de associação da nova chave + Don't show this warning again + Não mostrar novamente - Passkey - Chave-mestra + KeePassXC: Legacy browser integration settings detected + KeePassXC: Detetadas definições de integração legada com o navegador - KeePassXC - Passkey credentials - KeePassXC - Credenciais da chave-mestra - - - Register a new passkey to this entry: - Registar uma nova chave-mestra para esta entrada: - - - KeePassXC - Update passkey - KeePassXC - Atualizar chave-mestra - - - Entry already has a passkey. -Do you want to overwrite the passkey in %1 - %2? - A entrada já tem uma chave-mestra. -Pretende substituir a chave-mestra em %1 - %2? - - - Register - Registar + 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? + Tem que mover as definições KeePassXC-Browser para as definições da base de dados. +Este procedimento é necessário para manter as ligações existentes. +Gostaria de migrar agora as definições? @@ -1076,6 +975,10 @@ Pretende substituir a chave-mestra em %1 - %2? General Geral + + Browsers installed as snaps are currently not supported. + Ainda não existe suporte a navegadores no formato Snap. + Enable integration for these browsers: Ativar integração para estes navegadores: @@ -1119,11 +1022,11 @@ Pretende substituir a chave-mestra em %1 - %2? Only entries with the same scheme (http://, https://, …) are returned. - Devolver apenas as entradas com o mesmo esquema (http://, https://, …) + Devolver apenas as entradas com o mesmo esquema (http://, https://, ...) Match URL scheme (e.g., https://example.com) - Corresponder ao esquema URL (exemplo: https://exemplo.com) + Corresponder ao esquema URL (exemplo: https://example.com) Only returns the best matches for a specific URL instead of all entries for the whole domain. @@ -1143,7 +1046,7 @@ Pretende substituir a chave-mestra em %1 - %2? All databases connected to the extension will return matching credentials. - Todas as bases de dados conectadas à extensão devolverão as credenciais coincidentes + Todas as bases de dados conectadas à extensão devolverão as credenciais coincidentes. Search in all opened databases for matching credentials @@ -1171,7 +1074,7 @@ Pretende substituir a chave-mestra em %1 - %2? Automatically creating or updating string fields is not supported. - A criação ou atualização dos campos de cadeias não é suportada + A criação ou atualização dos campos de cadeias não é suportada. Return advanced string fields which start with "KPH: " @@ -1179,7 +1082,7 @@ Pretende substituir a chave-mestra em %1 - %2? Don't display the popup suggesting migration of legacy KeePassHTTP settings. - Não mostrar janela que sugere a migração das definições KeePassHTTP legadas + Não mostrar janela que sugere a migração das definições KeePassHTTP legadas. Do not prompt for KeePassHTTP settings migration. @@ -1187,7 +1090,7 @@ Pretende substituir a chave-mestra em %1 - %2? 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 + 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 @@ -1195,7 +1098,7 @@ Pretende substituir a chave-mestra em %1 - %2? Use a custom proxy location if you installed a proxy manually. - Utilize um proxy personalizado caso o tenha instalado manualmente + Utilize um proxy personalizado caso o tenha instalado manualmente. Use a custom proxy location: @@ -1213,7 +1116,7 @@ Pretende substituir a chave-mestra em %1 - %2? Browse… Button for opening file dialog - Procurar… + Procurar... Use a custom browser configuration location: @@ -1247,6 +1150,26 @@ Pretende substituir a chave-mestra em %1 - %2? Custom extension ID ID da extensão personalizada + + Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 + Devido a 'Snap sandboxing', tem que executar um script para ativar a integração com o navegador.<br />Pode obter o script em %1. + + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 + Necessita de KeePassXC-Browser para que a integração funcione corretamente.<br /> Disponível para %1, %2 e %3. %4 + + + Please see special instructions for browser extension use below + Por favor consulte abaixo as instruções para a utilização da extensão + + + <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. + <b>Erro:</b> não foi possível encontrar a localização do proxy!<br/> A integração com o navegador não funcionará sem um proxy. + + + <b>Warning:</b> The following options can be dangerous! + <b>Aviso</b>: as opções seguintes podem ser perigosas! + Executable Files Ficheiros executáveis @@ -1263,46 +1186,6 @@ Pretende substituir a chave-mestra em %1 - %2? Select native messaging host folder location Selecione a localização da pasta de mensagens nativas - - Allow keepassxc-proxy to list all entries with their title, URL and UUID in connected databases. - Permitir que keepassxc-proxy liste todas as entradas com o seu título, URL e UUID nas bases de dados conectadas - - - Allow limited access to all entries in connected databases (ignores site access restrictions) - Permitir acesso limitado a todas as entradas das bases de dados conectadas (ignorar restrições de acesso aos sites) - - - <b>Warning:</b> Only adjust these settings if necessary. - Aviso:</b> apenas deve ajustar estas definições se for necessário - - - The custom proxy location does not exist. - A localização do proxy não existe - - - <b>Error:</b> The custom proxy location does not exist. Correct this in the advanced settings tab. - <b>Erro:</b> a localização do proxy personalizado não existe. Corrija a localização nas definições avançadas. - - - <b>Error:</b> The installed proxy executable is missing from the expected location: %1<br/>Please set a custom proxy location in the advanced settings or reinstall the application. - <b>Erro:</b> o executáveldo proxy instalado não existe na localização esperada: %1<br/>Defina a localização do proxy nas definições avançadas ou, em alternativa, reinstale a aplicação. - - - Allows using insecure http://localhost with passkeys for testing purposes. - Permite utilizar http://localhost inseguro com chaves-mestras para efeitos de teste. - - - Allow using localhost with passkeys - Permitir utilização de "localhost" com chaves-mestras - - - KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. - Requer KeePassXC-Browser para que a integração com o navegador de Internet funcione. <br />Descarregue-o para %1 e %2 e %3. - - - Browsers installed using Snap or Flatpak are not supported with exception to Firefox installed using Snap. - Com exceção do Firefox Snap, quaisquer navegadores instalados na forma de Snap ou Flatpak não são suportados. - CloneDialog @@ -1325,6 +1208,14 @@ Pretende substituir a chave-mestra em %1 - %2? CsvImportWidget + + Import CSV fields + Importar campos do CSV + + + filename + nome do ficheiro + size, rows, columns tamanho, linhas, colunas @@ -1367,7 +1258,7 @@ Pretende substituir a chave-mestra em %1 - %2? Last Modified - Última modificação + Última alteração Icon @@ -1433,43 +1324,50 @@ Pretende substituir a chave-mestra em %1 - %2? Column %1 Coluna %1 + + Imported from CSV file + Importada de ficheiro CSV + + + Original data: + Dados originais: + + + Error(s) detected in CSV file! + Detetado(s) erro(s) no ficheiro CSV! + [%n more message(s) skipped] [%n mensagem ignorada][%n mensagens ignoradas][%n mensagens ignoradas] - Failed to parse CSV file: %1 - Falha ao processar o ficheiro CSV: %1 + Error + Erro - Imported from CSV file: %1 - Importado do ficheiro CSV: %1 - - - No Title Selected - Nenhum título selecionado - - - No title column was selected, entries will be hard to tell apart. -Are you sure you want to import? - Não selecionou um título de coluna e, assim, será difícil distinguir as entradas. -Tem a certeza de que pretende continuar com a importação? - - - Tags - Etiquetas + CSV import: writer has errors: +%1 + Importação CSV com erros: +%1 CsvParserModel + + %1, %2, %3 + file info: bytes, rows, columns + %1, %2, %3 + + + %n byte(s) + %n byte%n bytes%n bytes + %n row(s) - CSV row count %n linha%n linhas%n linhas %n column(s) - CSV column count %n coluna%n colunas%n colunas @@ -1482,11 +1380,11 @@ Tem a certeza de que pretende continuar com a importação? File %1 does not exist. - Ficheiro %1 não existe + Ficheiro %1 não existe. Unable to open file %1. - Não foi possível abrir o ficheiro %1 + Não foi possível abrir o ficheiro %1. Error while reading the database: %1 @@ -1494,11 +1392,11 @@ Tem a certeza de que pretende continuar com a importação? Could not save, database does not point to a valid file. - Não foi possível guardar porque a base de dados não indica um ficheiro válido + Não foi possível guardar porque a base de dados não indica um ficheiro válido. Database save is already in progress. - A base de dados já está a ser guardada + A base de dados já está a ser guardada. Could not save, database has not been initialized! @@ -1506,13 +1404,13 @@ Tem a certeza de que pretende continuar com a importação? Database file has unmerged changes. - A base de dados tem alterações não guardadas + A base de dados tem alterações não guardadas. %1 Backup database located at %2 %1 -Backup localizada em %2 +Cópia de segurança localizada em %2 Key not transformed. This is a bug, please report it to the developers. @@ -1522,14 +1420,6 @@ Backup localizada em %2 Recycle Bin Reciclagem - - Database file read error. - Erro de leitura do ficheiro da base de dados. - - - No file path was provided. - Não indicou o caminho do ficheiro. - DatabaseOpenDialog @@ -1552,9 +1442,29 @@ Backup localizada em %2 Password field Campo Palavra-passe + + Enter Additional Credentials (if any): + Introduza as credenciais adicionais (se existentes): + + + Key File: + Ficheiro-chave: + + + Key file help + Ajuda para ficheiros-chave + Hardware key slot selection - Seleção de 'slot' para a chave de hardware + Seleção de ranhura para o dispositivo de segurança + + + Hardware Key: + Dispositivo de segurança: + + + Hardware key help + Ajuda para dispositivos Key file to unlock the database @@ -1566,7 +1476,15 @@ Backup localizada em %2 Browse… - Procurar… + Procurar... + + + Refresh hardware tokens + Recarregar 'tokens' do dispositivo + + + Refresh + Recarregar Unlock Database @@ -1582,7 +1500,7 @@ Backup localizada em %2 Please present or touch your YubiKey to continue… - Introduza ou toque na sua YubiKey para continuar… + Introduza ou toque na sua YubiKey para continuar... Database Version Mismatch @@ -1610,7 +1528,7 @@ Deve atualizar KeePassXC para a versão mais recente. Database unlock canceled. - Cancelou o desbloqueio da base de dados + Cancelou o desbloqueio da base de dados. Unlock failed and no password given @@ -1630,6 +1548,10 @@ Para impedir que este erro surja novamente, deve aceder a "Definições da Retry with empty password Tentar com palavra-passe vazia + + Failed to authenticate with Touch ID + Não foi possível autenticar com Touch ID + Failed to open key file: %1 Não foi possível abrir o ficheiro-chave: %1 @@ -1662,69 +1584,41 @@ Para impedir que este erro surja novamente, deve aceder a "Definições da Cannot use database file as key file Não pode utilizar uma base de dados como ficheiro-chave + + You cannot use your database file as a key file. +If you do not have a key file, please leave the field empty. + Não pode utilizar o ficheiro da sua base de dados como ficheiro-chave. +Se não quiser utilizar um ficheiro-chave, deixe este campo em branco. + + + Detecting hardware keys… + A detetar dispositivos de segurança... + + + No hardware keys detected + Não foram detetados dispositivos de segurança + + + Select hardware key… + Selecione o dispositivos de segurança... + + + <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information…</p> + <p>Para além da palavra-passe, pode utilizar um ficheiro-chave para aumentar a segurança da sua base de dados. Este ficheiro pode ser gerado nas definições de segurança da sua base de dados..</p><p><strong>Não</strong> pode utilizar ficheiros *.kdbx como ficheiro-chave!<br>Se não quiser utilizar um ficheiro-chave, deixe este campo em branco.</p><p>Clique aqui para mais informação.</p> + + + <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +<p>Click for more information…</p> + <p>Pode utilizar um dispositivo de segurança tais como <strong>YubiKey</strong> ou <strong>OnlyKey</strong> com ranhuras configuradas para HMAC-SHA1.</p> +<p>Clique aqui para mais informações.</p> + authenticate to access the database autentique-se para aceder à base de dados - Failed to authenticate with Quick Unlock: %1 - Não foi possível autenticar com desbloqueio rápido: %1 - - - Select Key File: - Ficheiro-chave selecionado: - - - <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!</p> - <p>Além de uma palavra-passe, pode utilizar um ficheiro secreto para melhorar a segurança da sua base de dados. Este ficheiro pode ser gerado nas definições de segurança da sua base de dados.</p><p>Este <strong>não</strong> é o seu ficheiro de base de dados *.kdbx!</p> - - - Use hardware key [Serial: %1] - Utilizar chave de hardware [Nº de série: %1] - - - Use hardware key - Utilizar chave de hardware - - - Your database file is NOT a key file! -If you don't have a key file or don't know what that is, you don't have to select one. - O seu ficheiro de base de dados NÃO é um ficheiro-chave! -Se não tiver um ficheiro-chave ou não souber o que é, não tem de selecionar um. - - - KeePassXC database file selected - Ficheiro de base de dados KeePassXC selecionado - - - The file you selected looks like a database file. -A database file is NOT a key file! - -Are you sure you want to continue with this file?. - O ficheiro que selecionou parece ser um ficheiro de base de dados. -Um ficheiro de base de dados NÃO é um ficheiro-chave! - -Tem a certeza de que pretende continuar com este ficheiro? - - - No hardware keys found. - Não foram encontradas chaves de hardware. - - - Refresh Hardware Keys - Recarregar chaves de hardware - - - Click to add a key file. - Clique para adicionar um ficheiro-chave. - - - <a href="#" style="text-decoration: underline">I have a key file</a> - <a href="#" style="text-decoration: underline">Eu tenho um ficheiro-chave</a> - - - Hardware keys found, but no slots are configured. - A chave física foi encontrada mas não está configurada. + Failed to authenticate with Windows Hello: %1 + Não foi possível autenticar com Windows Hello: %1 @@ -1736,6 +1630,10 @@ Tem a certeza de que pretende continuar com este ficheiro? DatabaseSettingsDialog + + Advanced Settings + Definições avançadas + General Geral @@ -1760,22 +1658,6 @@ Tem a certeza de que pretende continuar com este ficheiro? Maintenance Manutenção - - KeeShare - KeeShare - - - Secret Service Integration - Integração 'Secret Service' - - - Remote Sync - Sincronização remota - - - Database Settings: %1 - Definições da base de dados: %1 - DatabaseSettingsWidgetBrowser @@ -1783,6 +1665,18 @@ Tem a certeza de que pretende continuar com este ficheiro? KeePassXC-Browser settings Definições KeePassXC-Browser + + Convert KeePassHTTP data + Converter dados KeePassHTTP + + + Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data + Converter atributos legados KeePassHTTP para dados compatíveis com KeePassXC-Browser + + + Refresh database root group ID + Recarregar ID do grupo raiz da base de dados + Disconnect all browsers Desconectar de todos os navegadores @@ -1791,17 +1685,13 @@ Tem a certeza de que pretende continuar com este ficheiro? Forget all site-specific settings on entries Esquecer definições específicas dos sites (nas entradas) - - Refresh database root group ID - Recarregar ID do grupo raiz da base de dados - Stored keys Chaves guardadas Stored browser keys - Chaves do navegador guardadas + Chaves armazenadas Remove selected key @@ -1835,7 +1725,7 @@ Esta ação pode impedir a ligação ao suplemento. Enable Browser Integration to access these settings. - Ative a integração com o navegador para aceder a estas definições + Ative a integração com o navegador para aceder a estas definições. Do you really want to disconnect all browsers? @@ -1843,13 +1733,21 @@ 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 + 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. - %n chave de cifra removida das definições do KeePassXC%n chaves de cifra removidas das definições do KeePassXC%n chaves de cifra removidas das definições do KeePassXC + %n chave de cifra removida das definições do KeePassXC.%n chaves de cifra removidas das definições do KeePassXC.%n chaves de cifra removidas das definições do KeePassXC. Do you really want forget all site-specific settings on every entry? @@ -1859,19 +1757,37 @@ Serão removidas todas as permissões para aceder às entradas. Removing stored permissions… - A remover permissões guardadas… + 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 entradaRemovidas com sucesso as permissões de %n entradasRemovidas com sucesso as permissões de %n entradas + Removidas com sucesso as permissões de %n entrada.Removidas com sucesso as permissões de %n entradas.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 qualquer entrada com permissões + A base de dados ativa não contém qualquer entrada com permissões. + + + Move KeePassHTTP attributes to custom data + Mover atributos KeePassHTTP para dados personalizados + + + Do you really want to convert 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 converter os dados legados para a versão mais recente? +Esta atualização é necessária para manter a compatibilidade com o suplemento. Refresh database ID @@ -1883,32 +1799,12 @@ This is only necessary if your database is a copy of another and the browser ext Tem a certeza de que deseja recarregar a ID da base de dados? Esta ação apenas será necessária se a sua base de dados for uma cópia de outra e não for possível estabelecer ligação ao navegador. - - Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data - Converter atributos legados KeePassHTTP para dados compatíveis com KeePassXC-Browser - - - No keys found - Não existem chaves - - - Removed keys from database - Chaves removidas da base de dados - - - Removed permissions - Permissões removidas - - - No entry with permissions found! - Encontrada nova entrada com permissões! - DatabaseSettingsWidgetDatabaseKey Add additional protection… - Adicionar proteção extra… + Adicionar proteção extra... No password set @@ -1940,19 +1836,7 @@ Tem a certeza de que deseja continuar? Failed to change database credentials - Falha ao alterar as credenciais da base de dados - - - Weak password - Palavra-passe fraca - - - This is a weak password! For better protection of your secrets, you should choose a stronger password. - Esta palavra-passe é insegura. Para proteger os seus segredos, deve utilizar uma palavra-passe mais segura. - - - The provided password does not meet the minimum quality requirement. - A palavra-passe indicada não cumpre os requisitos mínimos de qualidade. + Não foi possível alterar as credenciais @@ -1961,13 +1845,21 @@ Tem a certeza de que deseja continuar? Decryption Time: Tempo para decifrar: + + Change existing decryption time + Alterar tempo para decifrar + + + Change + Alterar + Decryption time in seconds Tempo para decifrar (segundos) Higher values offer more protection, but opening the database will take longer. - Valores mais altos oferecem mais proteção mas a base de dados demorará mais tempo a abrir + Valores mais altos oferecem mais proteção mas a base de dados demorará mais tempo a abrir. Database format: @@ -1979,11 +1871,11 @@ Tem a certeza de que deseja continuar? Format cannot be changed: Your database uses KDBX 4 features - O formato não pode ser alterado: a base de dados utiliza recursos KDBX 4. + O formato não pode ser alterado. A base de dados utiliza recursos KDBX 4. Unless you need to open your database with other programs, always use the latest format. - A menos que necessite de abrir a base de dados em outras aplicações, deve utilizar sempre o formato mais recente + A menos que necessite de abrir a base de dados em outras aplicações, deve utilizar sempre o formato mais recente. Encryption Algorithm: @@ -2041,6 +1933,11 @@ Tem a certeza de que deseja continuar? KDBX 3 KDBX 3 + + unchanged + Database decryption time is unchanged + inalterado + Number of rounds too high Key transformation rounds @@ -2093,18 +1990,6 @@ Se mantiver este número, a sua base de dados pode ser desbloqueada muito facilm Threads for parallel execution (KDF settings) processo processos processos - - Encryption Settings: - Definições de cifra: - - - Basic - Básica - - - Advanced - Avançado - DatabaseSettingsWidgetFdoSecrets @@ -2122,14 +2007,14 @@ Se mantiver este número, a sua base de dados pode ser desbloqueada muito facilm Enable Secret Service to access these settings. - Ative 'Secret Service' para aceder a estas definições + Ative 'Secret Service' para aceder a estas definições. DatabaseSettingsWidgetGeneral Database Metadata - Metadados da base de dados + Meta-dados da base de dados Database name: @@ -2204,8 +2089,8 @@ removed such that only the specified amount of entries remain at most. Ao guardar esta definição ou editar uma entrada, os itens mais antigos do histórico de uma entrada -serão removidos e apenas o número máximo -especificado das entradas permanecem. +serão removidos de modo a que apenas o número +máximo especificado seja mantido. Limit the amount of history items per entry to: @@ -2235,70 +2120,6 @@ em vez de os remover da base de dados. As entradas eliminadas da reciclagem serão removidas da base de dados. - - Autosave delay since last change - Atraso para gravação automática após a última alteração - - - Autosave delay - Atraso para gravação automática - - - Autosave delay since last change in minutes - Atraso para gravação automática após a última alteração (minutos) - - - min - min - - - Autosave delay since last change checkbox - Atraso para gravação automática após a última alteração da caixa de seleção - - - Public Database Metadata - Metadados públicos da base de dados - - - Warning: the following settings are not encrypted. - Aviso: as definições seguintes não serão cifradas. - - - Display name: - Nome mostrado: - - - Publically visible display name used on the unlock dialog - Nome mostrado no diálogo de desbloqueio - - - Database public display name - Nome público da base de dados: - - - Display color: - Cor mostrada: - - - Publically visible color used on the unlock dialog - Cor exibida no diálogo de desbloqueio - - - Database public display color chooser - Seletor de cores para a base de dados - - - Clear - Limpar - - - Display icon: - Ícone mostrado: - - - Select Database Icon - Selecione o ícone da base de dados - DatabaseSettingsWidgetKeeShare @@ -2340,11 +2161,11 @@ removidas da base de dados. Delete selected icon(s) - Remover ícones selecionados + Eliminar ícones selecionados Delete all custom icons not in use by any entry or group - Remover todos os ícones personalizados que não estejam a ser usados + Eliminar todos os ícones personalizados que não estejam a ser usados Purge unused icons @@ -2364,7 +2185,7 @@ removidas da base de dados. All custom icons are in use by at least one entry or group. - Todos os ícones personalizados estão a ser utilizados por uma entrada ou grupo + Todos os ícones personalizados estão a ser utilizados por uma entrada ou grupo. Purged Unused Icons @@ -2372,7 +2193,7 @@ removidas da base de dados. Purged %n icon(s) from the database. - %n ícone removido da base de dados%n ícones removidos da base de dados%n ícones removidos da base de dados + %n ícone removido da base de dados.%n ícones removidos da base de dados.%n ícones removidos da base de dados. @@ -2394,140 +2215,6 @@ removidas da base de dados. Campo Descrição da base de dados - - DatabaseSettingsWidgetRemote - - Sync Commands - Comandos de sincronização - - - Remove - Remover - - - Command Settings - Definições do comando - - - Name - Nome - - - Save - Guardar - - - Download - Descarregar - - - Command: - Comando: - - - Download command field - Campo de comando de descargas - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - por exemplo: "sftp user@hostname" ou "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - - - Input: - Entrada: - - - Download input field - Campo de entrada para descargas - - - Upload - Carregar - - - Upload command field - Campo de comando para envio - - - e.g.: "sftp user@hostname" or "scp {TEMP_DATABASE} user@hostname:DatabaseOnRemote.kdbx" - por exemplo: "sftp user@hostname" ou "scp {TEMP_DATABASE} user@hostname:DatabaseOnRemote.kdbx" - - - Upload input field - Campo de introdução de carregamento - - - Name cannot be empty. - O nome não pode estar vazio. - - - Test - Testar - - - Download command cannot be empty. - O comando de descarga não pode estar vazio. - - - Download failed with error: %1 - A descarga falhou com o erro: %1 - - - Download finished, but file %1 could not be found. - A descarga foi concluída, mas não foi possível encontrar o ficheiro %1. - - - Download successful. - Descarga efetuada - - - Save Remote Settings - Guardar definições remotas - - - You have unsaved changes. Do you want to save them? - Tem alterações por guardar. Pretende guardá-las? - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - por exemplo: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} é utilizado como marcador de posição para guardar a base de dados numa localização temporária -O comando tem que ser bem sucedido. No caso do 'sftp', o último comando 'exit' tem de ser enviado - - - - e.g.: -put {TEMP_DATABASE} DatabaseOnRemote.kdbx -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - por exemplo: -coloque {TEMP_DATABASE} DatabaseOnRemote.kdbx -sair ---- -{TEMP_DATABASE} é usado como espaço reservado para armazenar o banco de dados em um local temporário -O comando tem que sair. No caso de `sftp` como último comando `exit` deve ser enviado - - - Timeout: - Tempo limite: - - - seconds - segundos - - DatabaseTabWidget @@ -2560,21 +2247,59 @@ Existe aqui um erro que deve ser reportado aos programadores. CSV file Ficheiro CSV + + Select CSV file + Selecionar ficheiro CSV + Merge database Combinar base de dados + + KeePass 1 database + Base de dados do KeePass 1 + + + Open KeePass 1 database + Abrir base de dados do KeePass 1 + + + Open OPVault + Open OPVault + Export database to CSV file Exportar base de dados para ficheiro CSV Writing the CSV file failed. - Não foi possível escrever no ficheiro CSV + Não foi possível escrever no ficheiro CSV. Writing the HTML file failed. - Não foi possível escrever no ficheiro HTML + Não foi possível escrever no ficheiro HTML. + + + Export Confirmation + Confirmação de exportação + + + You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? + Está prestes a exportar a sua base de dados para um ficheiro não cifrado. As suas palavras-passe e informações pessoais ficarão vulneráveis. Tem a certeza de que deseja continuar? + + + 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] Export database to XML file @@ -2588,38 +2313,16 @@ Existe aqui um erro que deve ser reportado aos programadores. Writing the XML file failed Não foi possível escrever o ficheiro XML - - Export Confirmation - Confirmação de exportação - - - You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? - Está prestes a exportar a sua base de dados para um ficheiro não cifrado. As suas palavras-passe e informações pessoais ficarão vulneráveis. Tem a certeza de que deseja continuar? - - - %1 [Locked] - Database tab name modifier - %1 [Bloqueada] - - - %1 [Temporary] - Database tab name modifier - %1 [temporário] - DatabaseWidget - - Searches and Tags - Pesquisa e etiquetas - Searching… - A pesquisar… + A pesquisar... Shared group… - Grupo partilhado… + Grupo partilhado... Confirm Auto-Type @@ -2661,25 +2364,21 @@ Existe aqui um erro que deve ser reportado aos programadores. Expired entries Entradas caducadas - - Entries expiring within %1 day(s) - Entradas a caducar dentro de %1 diaEntradas a caducar dentro de %1 diasEntradas a caducar dentro de %1 dias - No current database. - Nenhuma base de dados + Nenhuma base de dados. No source database, nothing to do. - Não existe base de dados de origem + Não existe base de dados de origem, nada para fazer. Successfully merged the database files. - Bases de dados combinadas com sucesso + Bases de dados combinadas com sucesso. Database was not modified by merge operation. - A base de dados não foi modificada pela combinação + A base de dados não foi alterada pela combinação. Search Results (%1) @@ -2689,18 +2388,6 @@ Existe aqui um erro que deve ser reportado aos programadores. No Results Não há resultados - - Save - Guardar - - - Enter a unique name or overwrite an existing search from the list: - Introduza um nome exclusivo ou substitua uma pesquisa da lista: - - - Save Search - Guardar pesquisa - Lock Database? Bloquear base de dados? @@ -2712,13 +2399,13 @@ Existe aqui um erro que deve ser reportado aos programadores. "%1" was modified. Save changes? - "%1" foi modificada + "%1" foi alterada. Guardar alterações? Database was modified. Save changes? - A base de dados foi modificada + A base de dados foi alterada. Guardar alterações? @@ -2729,6 +2416,26 @@ Guardar alterações? 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? + + + 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? @@ -2757,7 +2464,7 @@ Desativar salvaguardas e tentar novamente? Save database backup - Guardar backup da base de dados + Guardar cópia de segurança da base de dados Empty recycle bin? @@ -2765,100 +2472,31 @@ Desativar salvaguardas e tentar novamente? 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? + Tem a certeza de que deseja eliminar permanentemente os itens na reciclagem? Could not find database file: %1 - Não foi possível encontrar o ficheiro da base de dados: %1 + Não foi possível encontrar a base de dados: %1 + + + Entries expiring within %1 day(s) + Entradas a caducar dentro de %1 diaEntradas a caducar dentro de %1 diasEntradas a caducar dentro de %1 dias - New Database - Nova base de dados + Searches and Tags + Pesquisa e etiquetas - %1 [New Database] - Database tab name modifier - %1 [Nova base de dados] + Enter a unique name or overwrite an existing search from the list: + Introduza um nome exclusivo ou substitua uma pesquisa da lista: - Remote Sync did not contain any download or upload commands. - A sincronização remota não continha quaisquer comandos de descarga ou carregamento. + Save + Guardar - Remote sync '%1' completed successfully! - A sincronização remota '%1' foi concluída com sucesso! - - - Remote sync '%1' failed: %2 - A sincronização remota '%1' falhou: %2 - - - Error while saving database %1: %2 - Erro ao guardar a base de dados %1: %2 - - - Downloading... - A descarregar... - - - Uploading... - A carregar... - - - Syncing... - A sincronizar... - - - Remove passkey from entry - Remover chave-mestra da entrada - - - Do you want to remove the passkey from this entry? - Deseja remover a chave-mestra desta entrada? - - - The database file "%1" was modified externally - O ficheiro da base de dados "%1" foi alterado externamente - - - Do you want to load the changes? - Deseja carregar as alterações? - - - Reload database - Recarregar base de dados - - - Reloading database… - A recarregar base de dados… - - - Reload canceled - Recarga cancelada - - - Reload successful - Recarga efetuada - - - Reload pending user action… - Recarga pendente de uma ação do utilizador… - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes<br>Ignore the changes on disk until save<br>Discard unsaved changes - O ficheiro da base de dados "%1" foi alterado externamente.<br>Como pretende continuar?<br><br>Combinar todas as alterações<br>Ignorar alterações no disco até guardar<br>Descartar alterações não guardadas - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes then save<br>Overwrite the changes on disk<br>Discard unsaved changes - O ficheiro da base de dados "%1" foi alterado externamente.<br>Como pretende continuar?<br><br>Combinar todas as alterações e guardar<br>Substituir alterações no disco<br>Descartar alterações não guardadas - - - Database file overwritten. - Ficheiro de base de dados substituído. - - - Database file on disk cannot be unlocked with current credentials.<br>Enter new credentials and/or present hardware key to continue. - O ficheiro da base de dados no disco não pode ser desbloqueado com as credenciais atuais.<br>Introduza as novas credenciais e/ou a chave de hardware para continuar. + Save Search + Guardar pesquisa @@ -2911,6 +2549,10 @@ Desativar salvaguardas e tentar novamente? n/a n/d + + (encrypted) + (cifrada) + Select private key Selecionar chave privada @@ -2929,7 +2571,7 @@ Desativar salvaguardas e tentar novamente? Some Browser Integration settings are overridden by group settings. - Algumas definições da integração com o navegador foram substituídas pelas definições do grupo + Algumas definições da integração com o navegador foram substituídas pelas definições do grupo. Invalid Entry @@ -2957,13 +2599,13 @@ Gostaria de a corrigir? An error occurred while validating the Auto-Type sequence for "%1": %2 Would you like to correct it? - Ocorreu um erro ao validar a sequência personalizada de escrita automática para "%1". + Ocorreu um erro ao validar a sequência personalizada de escrita automática para %1. %2 Gostaria de a corrigir? Entry updated successfully. - Entrada atualizada com sucesso + Entrada atualizada com sucesso. Unsaved Changes @@ -2991,16 +2633,12 @@ Gostaria de a corrigir? [PROTECTED] Press Reveal to view or edit - [PROTEGIDO] Utilize o botão 'Mostrar' para ver ou editar + [PROTEGIDA] Por favor revele para ver ou editar Hide Ocultar - - %n hour(s) - %n hora%n horas%n horas - %n week(s) %n semana%n semanas%n semanas @@ -3013,9 +2651,9 @@ Gostaria de a corrigir? %n year(s) %n ano%n anos%n anos - - Failed to decrypt SSH key, ensure password is correct. - Falha ao decifrar a chave SSH, verifique se a palavra-passe está correta. + + %n hour(s) + %n hora%n horas%n horas @@ -3058,7 +2696,7 @@ Gostaria de a corrigir? Toggle attribute protection - Comutar proteção do atributo + Alternar proteção do atributo Protect @@ -3078,7 +2716,7 @@ Gostaria de a corrigir? If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements. - Se ativa, a entrada não aparecerá em relatórios como Health Check e HIBP, mesmo que não corresponda aos requisitos de qualidade. + Se marcado, a entrada não aparecerá em relatórios como Health Check e HIBP, mesmo que não corresponda aos requisitos de qualidade. Exclude from database reports @@ -3109,7 +2747,7 @@ Gostaria de a corrigir? Inherit default Auto-Type sequence from the group - Herdar sequência de escrita automática padrão deste grupo + Herdar sequência de escrita automática deste grupo Use custom Auto-Type sequence: @@ -3135,20 +2773,10 @@ Gostaria de a corrigir? Add new window association Adicionar nova associação - - + - Add item - + - Remove selected window association Remover associação selecionada - - - - Remove item - - - Window title: Título da janela: @@ -3173,9 +2801,23 @@ Gostaria de a corrigir? Custom Auto-Type sequence for this window Sequência personalizada de escrita automática para esta janela + + + + Add item + + + + + - + Remove item + - + EditEntryWidgetBrowser + + These settings affect to the entry's behaviour with the browser extension. + Estas definições afetam o comportamento da entrada com a extensão do navegador. + General Geral @@ -3188,14 +2830,26 @@ Gostaria de a corrigir? Skip Auto-Submit for this entry Ignorar submissão automática para esta entrada + + Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. + Apenas enviar esta definição para o navegador em diálogos HTTP Auth. Se ativa, os formulários normais de acesso não mostrarão esta entrada para seleção. + Use this entry only with HTTP Basic Auth Apenas utilizar esta entrada com HTTP Basic Auth + + Do not send this setting to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. + Não enviar esta definição para o navegador em diálogos de HTTP Auth. Se ativa, as caixas de diálogo HTTP Auth não mostrarão esta entrada. + Do not use this entry with HTTP Basic Auth Não utilizar esta entrada com HTTP Basic Auth + + Additional URL's + URL(s) extra + Add Adicionar @@ -3208,22 +2862,6 @@ Gostaria de a corrigir? Edit Editar - - These settings affect the entry's behaviour with the browser extension. - Estas definições afetam o comportamento da entrada com a extensão do navegador. - - - Additional URLs - URL adicionais - - - Only send this entry to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. - Enviar esta entrada ao navegador apenas para diálogos de autenticação HTTP. Se ativa, esta entrada não aparecerá nos formulários normais de autenticação. - - - Do not send this entry to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. - Não enviar esta entrada ao navegador apenas para diálogos de autenticação HTTP. Se ativa, esta entrada não aparecerá nos de autenticação HTTP. - EditEntryWidgetHistory @@ -3249,7 +2887,7 @@ Gostaria de a corrigir? Delete selected history state - Eliminar estado do histórico selecionado + Eliminar estado de histórico selecionado Delete @@ -3284,15 +2922,15 @@ Gostaria de a corrigir? Expiration Presets - Predefinições de caducidade + Modelos de caducidade Expiration presets - Predefinições de caducidade + Modelos de caducidade Presets - Predefinições + Modelos Url field @@ -3300,7 +2938,7 @@ Gostaria de a corrigir? Download favicon for URL - Descarregar ícone deste URL + Descarregar 'favicon' para o URL Title field @@ -3312,7 +2950,7 @@ Gostaria de a corrigir? Toggle expiration - Comutar caducidade + Alternar caducidade Tags list @@ -3340,7 +2978,7 @@ Gostaria de a corrigir? Toggle notes visibility - Comutar exibição das notas + Alternar exibição das notas T&ags: @@ -3389,6 +3027,19 @@ Gostaria de a corrigir? Private key Chave privada + + External file + Ficheiro externo + + + Browser for key file + Explorador para ficheiro-chave + + + Browse… + Button for opening file dialog + Procurar... + Attachment Anexo @@ -3405,23 +3056,6 @@ Gostaria de a corrigir? Remove from agent Remover do agente - - External file - Ficheiro externo - - - Browser for key file - Explorador para ficheiro-chave - - - Browse… - Button for opening file dialog - Procurar… - - - Generate - Gerar - Select attachment file Selecionar anexo @@ -3446,10 +3080,6 @@ Gostaria de a corrigir? seconds segundos - - Clear agent - Limpar agente - EditGroupWidget @@ -3461,6 +3091,10 @@ Gostaria de a corrigir? Icon Ícone + + Browser Integration + Integração com o navegador + Properties Propriedades @@ -3477,10 +3111,6 @@ Gostaria de a corrigir? Group has unsaved changes Grupo tem alterações por guardar - - Browser Integration - Integração com o navegador - Enable Ativar @@ -3498,7 +3128,7 @@ Gostaria de a corrigir? EditGroupWidgetBrowser These settings affect to the group's behaviour with the browser extension. - Estas definições afetam o comportamento do grupo em relação à integração com navegadores + Estas definições afetam o comportamento do grupo em relação à integração com navegadores. Hide entries from browser extension: @@ -3510,7 +3140,7 @@ Gostaria de a corrigir? Skip Auto-Submit for entries: - Ignorar submissão automática para as entradas: + Ignorar submissão automática para as entredas: Skip Auto-Submit toggle for this and sub groups @@ -3540,14 +3170,6 @@ Gostaria de a corrigir? Omit WWW subdomain from matching toggle for this and sub groups Omitir subdomínio WWW do alternador de correspondência: para isto e subgrupos - - Restrict matching to given browser key: - Restringir ocorrência a uma chave do navegador: - - - Restrict matching to given browser key toggle for this and sub groups - Restringir a correspondência a uma determinada chave do navegador para este e os seus subgrupos - EditGroupWidgetKeeShare @@ -3581,7 +3203,7 @@ Gostaria de a corrigir? Browse… - Procurar… + Procurar... Clear fields @@ -3615,15 +3237,15 @@ As extensões suportadas são: %1. %1 is already being exported by this database. - %1 já está a ser exportado para esta base de dados + %1 já está a ser exportado para esta base de dados. %1 is already being imported by this database. - %1 já está a ser importado para esta base de dados + %1 já está a ser importado para esta base de dados. %1 is being imported and exported by different groups in this database. - %1 está a ser importada e exportada por grupos distintos desta base de dados + %1 está a ser importada e exportada por grupos distintos desta base de dados. KeeShare is currently disabled. You can enable import/export in the application settings. @@ -3632,11 +3254,11 @@ As extensões suportadas são: %1. Database export is currently disabled by application settings. - As suas definições não permitem a exportação de bases de dados + As suas definições não permitem a exportação de bases de dados. Database import is currently disabled by application settings. - As suas definições não permitem a importação de bases de dados + As suas definições não permitem a importação de bases de dados. KeeShare container @@ -3667,7 +3289,7 @@ As extensões suportadas são: %1. Toggle expiration - Comutar caducidade + Alternar caducidade Expires: @@ -3734,23 +3356,23 @@ As extensões suportadas são: %1. Choose icon… - Escolher ícone… + Escolher ícone... Set the URL to use to search for a favicon - Defina o URL a utilizar para procurar o ícone de favoritos + Defina o URL a utilizar para procurar 'favicons' Favicon URL - URL do ícone + URL de 'favicon' Download favicon for URL - Descarregar ícone deste URL + Descarregar 'favicon' para o URL Download favicon - Descarregar ícone + Descarregar 'favicon' Apply selected icon to subgroups and entries @@ -3758,7 +3380,7 @@ As extensões suportadas são: %1. Apply icon to… - Aplicar ícone a… + Aplicar ícone a... Apply to this group only @@ -3778,11 +3400,15 @@ As extensões suportadas são: %1. Unable to fetch favicon. - Não foi possível obter o ícone + Não foi possível obter o 'favicon'. + + + You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security + Pode ativar o serviço DuckDuckGo em Ferramentas -> Definições -> Segurança Existing icon selected. - Selecionou um ícone existente + Selecionou um ícone existente. Images @@ -3812,10 +3438,6 @@ As extensões suportadas são: %1. The following icon(s) failed: Falha no seguinte ícone:Falha nos seguintes ícones:Falha nos seguintes ícones: - - You can enable the DuckDuckGo website icon service under Application Settings -> Security - Pode ativar o serviço DuckDuckGo em Ferramentas -> Definições -> Segurança - EditWidgetProperties @@ -3829,11 +3451,11 @@ As extensões suportadas são: %1. Modified: - Modificada: + Alterada: Datetime modified - Data/hora de modificação + Data/hora de alteração Accessed: @@ -3874,7 +3496,7 @@ As extensões suportadas são: %1. 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? + Tem a certeza de que deseja eliminar os dados do suplemento? Esta ação pode implicar um funcionamento errático. @@ -3892,45 +3514,12 @@ Esta ação pode implicar um funcionamento errático. %1 - Clone %1 - Clone - - Passkey - Chave-mestra - - - Invalid conversion type: %1 - Tipo de conversão inválido: %1 - - - Invalid conversion syntax: %1 - Sintaxe de conversão inválida: %1 - - - Invalid regular expression syntax %1 -%2 - Sintaxe de expressão regular inválida %1 -%2 - EntryAttachments Cannot open file "%1" - Não foi possível abrir o ficheiro "%1" - - - - EntryAttachmentsDialog - - Form - Formulário - - - File name - Nome do ficheiro - - - File contents... - Conteúdo do ficheiro... + Não foi possível abrir o ficheiro %1. @@ -3970,6 +3559,14 @@ Esta ação pode implicar um funcionamento errático. Remove Remover + + Rename selected attachment + Mudar nome do anexo selecioando + + + Rename + Mudar nome + Open selected attachment Abrir anexo selecionado @@ -4046,6 +3643,12 @@ Esta ação pode implicar um funcionamento errático. Confirm Overwrite Attachment Confirmação de substituição de anexo + + Attachment "%1" already exists. +Would you like to overwrite the existing attachment? + O anexo "%1" já existe. +Deseja substituir o anexo existente? + Confirm Attachment Confirmar anexo @@ -4077,27 +3680,9 @@ Deseja guardar as alterações efetuadas à base de dados? Saving updated attachment failed. Error: %1 - Não foi possível guardar o anexo alterado + Não foi possível guardar o anexo alterado. Erro: %1 - - Attachment "%1" already exists. -Would you like to overwrite the existing attachment? - O anexo "%1" já existe -Deseja substituir o anexo existente? - - - New - Novo - - - Preview - Pré-visualização - - - Failed to preview an attachment: Attachment not found - Falha ao pré-visualizar: anexo não encontrado - EntryAttributesModel @@ -4114,7 +3699,7 @@ Deseja substituir o anexo existente? Last modified - Última modificação + Última alteração Age @@ -4230,7 +3815,7 @@ Deseja substituir o anexo existente? Modified - Modificada + Alterada Accessed @@ -4270,7 +3855,7 @@ Deseja substituir o anexo existente? Last modification date - Data da última modificação + Data da última alteração Last access date @@ -4292,14 +3877,6 @@ Deseja substituir o anexo existente? Has TOTP Tem TOTP - - Background Color - Cor de fundo - - - Group Path - Caminho do grupo - EntryPreviewWidget @@ -4320,8 +3897,8 @@ Deseja substituir o anexo existente? Palavra-passe - URL - URL + Notes + Notas Expiration @@ -4340,8 +3917,8 @@ Deseja substituir o anexo existente? Nome de utilizador - Notes - Notas + URL + URL Advanced @@ -4391,10 +3968,6 @@ Deseja substituir o anexo existente? Never Nunca - - Double click to copy value - Duplo clique para copiar o valor - Enabled Ativada @@ -4404,8 +3977,8 @@ Deseja substituir o anexo existente? Desativada - Double click to copy to clipboard - Dois cliques para copiar para a área de transferência + Double click to copy value + Duplo clique para copiar o valor @@ -4414,10 +3987,6 @@ Deseja substituir o anexo existente? Invalid URL URL inválido - - Duplicate URL - URL está duplicado - EntryView @@ -4433,10 +4002,6 @@ Deseja substituir o anexo existente? Reset to defaults Repor predefinições - - + %1 entry(s)... - + %1 entrada...+ %1 entradas...+ %1 entradas... - ExportDialog @@ -4446,7 +4011,7 @@ Deseja substituir o anexo existente? Sort entries by... - Ordenar entradas por… + Ordenar entradas por... You are about to export your database to an unencrypted file. @@ -4512,7 +4077,7 @@ As suas palavras-passe e informações pessoais ficarão vulneráveis! Failed to register DBus service at %1.<br/> - Não foi possível registar o serviços DBus em %1<br/> + Não foi possível registar o serviços DBus em %1.<br/> Failed to register service on DBus at path '%1' @@ -4547,7 +4112,7 @@ As suas palavras-passe e informações pessoais ficarão vulneráveis! %n Entry(s) was used by %1 %1 is the name of an application - %n entrada foi utilizada por %1%n entradas foram utilizadas por %1%n entradas foram utilizadas por %1 + %n entrada utilizada por %1%n entradas utilizadas por %1%n entradas utilizadas por %1 @@ -4609,7 +4174,7 @@ As suas palavras-passe e informações pessoais ficarão vulneráveis! IconDownloaderDialog Download Favicons - Descarregar ícones + Descarregar 'favicons' Cancel @@ -4618,7 +4183,7 @@ As suas palavras-passe e informações pessoais ficarão vulneráveis! Having trouble downloading icons? You can enable the DuckDuckGo website icon service in the security section of the application settings. - Problemas ao descarregar os ícones? + Problemas para descarregar ícones? Pode ativar o serviço DuckDuckGo na secção 'Segurança' das definições. @@ -4635,11 +4200,11 @@ Pode ativar o serviço DuckDuckGo na secção 'Segurança' das defini Please wait, processing entry list… - Por favor aguarde, estamos a processar a lista de entradas… + Por favor aguarde, estamos a processar a lista de entradas... Downloading… - A descarregar… + A descarregar... Ok @@ -4655,200 +4220,7 @@ Pode ativar o serviço DuckDuckGo na secção 'Segurança' das defini Downloading favicons (%1/%2)… - A descarregar o ícone (%1/%2)… - - - - ImportWizard - - Import Wizard - Assistente de importação - - - - ImportWizardPageReview - - WizardPage - Assistente - - - Entry count: %1 - Número de entradas: %1 - - - Group - Grupo - - - Title - Título - - - Username - Nome de utilizador - - - Password - Palavra-passe - - - Url - URL - - - Could not load key file. - Não foi possível carregar o ficheiro-chave. - - - Could not open remote database. Password or key file may be incorrect. - Não foi possível abrir a base de dados remota. Palavra-passe ou ficheiro-chave inválidos. - - - - ImportWizardPageSelect - - Form - Formulário - - - Import File Selection - Importar seleção - - - Password: - Palavra-passe: - - - Key File: - Ficheiro-chave: - - - Browse… - Procurar… - - - Import Into: - Importar para: - - - New Database - Nova base de dados - - - No unlocked databases available - Não existem bases de dados desbloqueadas disponíveis - - - Existing Database: - Base de dados existente: - - - Import File: - Importar ficheiro: - - - Comma Separated Values (.csv) - Valores separados por vírgula (.csv) - - - 1Password Export (.1pux) - Exportação 1Password (.1pux) - - - 1Password Vault (.opvault) - Cofre 1Password (.opvault) - - - Bitwarden (.json) - Bitwarden (.json) - - - KeePass 1 Database (.kdb) - Base de dados KeePass 1 (.kdb) - - - Open OPVault - Open OPVault - - - Select import file - Selecione o ficheiro - - - All files - Todos os ficheiros - - - Key files - Ficheiros-chave - - - Select key file - Selecione o ficheiro-chave - - - Comma Separated Values - Valores separados por vírgula - - - 1Password Export - Exportação 1Password - - - Bitwarden JSON Export - Exportação JSON do Bitwarden - - - 1Password Vault - Cofre 1Password - - - KeePass1 Database - Base de dados KeePass 1 - - - Proton Pass (.json) - Proton Pass (.json) - - - Proton Pass JSON Export - Exportação JSON para Proton Pass - - - Temporary Database - Base de dados temporária - - - Command: - Comando: - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - por exemplo: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - - - Input: - Entrada: - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last commend `exit` has to be sent - - eexemplo: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} é utilizado como marcador de posição para guardar a base de dados numa localização temporária -O comando tem que terminar (exit). No caso de `sftp` o último comando tem que ser `exit`. - - - - Remote Database (.kdbx) - Base de dados remota (.kdbx) + A descarregar (%1/%2)... @@ -4904,7 +4276,7 @@ Caso isto volte a acontecer, pode ser que a base de dados esteja danificada. Invalid symmetric cipher IV size. IV = Initialization Vector for symmetric cipher - Tamanho inválido da cifra simétrica IV + Tamanho inválido da cifra simétrica IV. Unable to issue challenge-response: %1 @@ -4969,7 +4341,7 @@ Caso isto volte a acontecer, pode ser que a base de dados esteja danificada. Legacy header fields found in KDBX4 file. - Encontrados campos legados no ficheiro KDBX4 + Encontrados campos legados no ficheiro KDBX4. Invalid inner header id size @@ -4990,7 +4362,7 @@ Caso isto volte a acontecer, pode ser que a base de dados esteja danificada. Unsupported KeePass variant map version. Translation: variant map = data structure for storing meta data - Versão não suportada da variente de mapa KeePass + Versão não suportada da variente de mapa KeePass. Invalid variant map entry name length @@ -5052,12 +4424,12 @@ Caso isto volte a acontecer, pode ser que a base de dados esteja danificada.Kdbx4Writer Invalid symmetric cipher algorithm. - Algoritmo inválido de cifra simétrica + 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 + Tamanho inválido da cifra simétrica IV. Unable to calculate database key: %1 @@ -5117,7 +4489,7 @@ Caso isto volte a acontecer, pode ser que a base de dados esteja danificada. Failed to read database file. - Não foi possível ler o ficheiro da base de dados + Não foi possível ler o ficheiro da base de dados. The selected file is an old KeePass 1 database (.kdb). @@ -5126,16 +4498,16 @@ 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á-la clicando em Base de dados > 'Importar base de dados do KeePass 1…'. +Pode importá-la 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. Not a KeePass database. - Não é uma base de dados do KeePass + Não é uma base de dados do KeePass. Unsupported KeePass 2 database version. - Versão da base de dados KeePass2 não suportada + Versão da base de dados KeePass2 não suportada. @@ -5266,11 +4638,11 @@ Linha %2, coluna %3 KeeAgentSettings Invalid KeeAgent settings file structure. - Estrutura inválida no ficheiro de definições KeeAgent + Estrutura inválida no ficheiro de definições KeeAgent. Private key is an attachment but no attachments provided. - Chave privada é um anexo mas o anexo não foi indicado + Chave privada é um anexo mas o anexo não foi indicado. Private key is empty @@ -5285,23 +4657,34 @@ Linha %2, coluna %3 Não foi possível abrir a chave privada + + 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 + Não foi possível ler o ficheiro-chave. Not a KeePass database. - Não é uma base de dados do KeePass + Não é uma base de dados do KeePass. Unsupported encryption algorithm. - Algoritmo de cifra não suportado + Algoritmo de cifra não suportado. Unsupported KeePass database version. - Versão da base de dados KeePass não suportada + Versão da base de dados KeePass não suportada. Unable to read encryption IV @@ -5533,7 +4916,7 @@ Caso isto volte a acontecer, pode ser que a base de dados esteja danificada. Browse… - Procurar… + Procurar... Old key file format @@ -5583,7 +4966,7 @@ Mensagem: %2 Create Key File… - Criar ficheiro-chave… + Criar ficheiro-chave... Error creating key file @@ -5641,6 +5024,10 @@ Tem a certeza de que deseja utilizar este ficheiro? &Recent Databases Bases de dados &recentes + + &Import + &Importar + &Export &Exportar @@ -5661,10 +5048,6 @@ Tem a certeza de que deseja utilizar este ficheiro? TOTP TOTP - - Tags - Etiquetas - &Groups &Grupos @@ -5695,51 +5078,71 @@ Tem a certeza de que deseja utilizar este ficheiro? &Open Database… - Abrir base de dad&os… + Abrir base de dad&os... &Save Database - Guardar base de dado&s + Guardar base de dado&s... &Close Database - Fe&char base de dados + Fe&char base de dados... &New Database… - &Nova base de dados… + &Nova base de dados... + + + Create a new database + Criar uma nova base de dados &Merge From Database… - Co&mbinar da base de dados… + Co&mbinar da base de dados... + + + Merge from another KDBX database + Combinar com outra base de dados KDBX &New Entry… - &Nova entrada… + &Nova entrada... + + + Add a new entry + Adicionar uma nova entrada &Edit Entry… - &Editar entrada… + &Editar entrada... + + + View or edit entry + Ver ou editar entrada &Delete Entry… - Eliminar entra&da… + Eliminar entra&da... &New Group… - &Novo grupo… + &Novo grupo... + + + Add a new group + Adicionar um novo grupo &Edit Group… - &Editar grupo… + &Editar grupo... &Delete Group… - Eliminar g&rupo… + Eliminar g&rupo... Download All &Favicons… - Descarregar &todos os ícones… + Descarregar todos os 'favicons'... Sort &A-Z @@ -5751,40 +5154,64 @@ Tem a certeza de que deseja utilizar este ficheiro? Sa&ve Database As… - G&uardar base de dados como… + G&uardar base de dados como... Database &Security… - &Segurança da base de dados… + &Segurança da base de dados... Database &Reports… - &Relatórios da base de dados… + &Relatórios da base de dados... + + + Statistics, health check, etc. + Estatísticas, verificações... &Database Settings… - &Definições da base de dados… + &Definições da base de dados... + + + Database settings + Definições da base de dados &Clone Entry… - &Clonar entrada… + &Clonar entrada... Move u&p Mover para &cima + + Move entry one step up + Move a entrada para cima + Move do&wn Mover para &baixo + + Move entry one step down + Move a entrada para baixo + Copy &Username Copiar nome de &utilizador + + Copy username to clipboard + Copiar nome de utilizador para a área de transferência + Copy &Password Copiar &palavra-passe + + Copy password to clipboard + Copiar palavra-passe para a área de transferência + &Settings Definiçõe&s @@ -5799,7 +5226,7 @@ Tem a certeza de que deseja utilizar este ficheiro? Download &Favicon - &Descarregar ícone + Descarregar '&favicon' Open &URL @@ -5818,32 +5245,52 @@ Tem a certeza de que deseja utilizar este ficheiro? &Título - Copy &URL - Copiar &URL + Copy title to clipboard + Copiar título para a área de transferência + + + 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 + &CSV File… - Ficheiro &CSV… + Ficheiro &CSV... &HTML File… - Ficheiro &HTML… + Ficheiro &HTML... KeePass 1 Database… - Base de dados do KeePass 1… + Base de dados do KeePass 1... + + + Import a KeePass 1 database + Importar base de dados do KeePass 1 1Password Vault… - Cofre 1Password… + Cofre 1Password... + + + Import a 1Password Vault + Importar um cofre 1Password CSV File… - Ficheiro CSV… + Ficheiro CSV... + + + Import a CSV file + Importar ficheiro CSV Show TOTP @@ -5855,16 +5302,12 @@ Tem a certeza de que deseja utilizar este ficheiro? Set up TOTP… - Configurar TOTP… + Configurar TOTP... Copy &TOTP Copiar &TOTP - - Copy Password and TOTP - Copiar palavra-passe e TOTP - E&mpty recycle bin Limpar reciclage&m @@ -5879,16 +5322,20 @@ Tem a certeza de que deseja utilizar este ficheiro? &Getting Started - &Introdução + &Iniciação Open Getting Started Guide - Abrir guia de introdução + Abrir guia de iniciação &Online Help Ajuda &online + + Go to online documentation + Aceder à documentação online + &User Guide Guia de &utilizador @@ -5903,7 +5350,7 @@ Tem a certeza de que deseja utilizar este ficheiro? Save Database Backup… - Guardar backup da base de dados… + Guardar cópia de segurança da base de dados... Add key to SSH Agent @@ -5933,10 +5380,6 @@ Tem a certeza de que deseja utilizar este ficheiro? Classic (Platform-native) Clássico (nativo do SO) - - Show Menubar - Mostrar barra de menus - Show Toolbar Mostrar barra de ferramentas @@ -5959,11 +5402,7 @@ Tem a certeza de que deseja utilizar este ficheiro? Clone Group... - Clonar grupo… - - - &XML File… - Ficheiro &XML… + Clonar grupo... Clear history @@ -5982,7 +5421,7 @@ Tem a certeza de que deseja utilizar este ficheiro? 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. +Existe um risco elevado de corrupção de ficheiros. Deve criar uma cópia de segurança da base de dados. Esta versão não deve ser utilizada em ambientes de produção. @@ -5992,8 +5431,10 @@ Expect some bugs and minor issues, this version is meant for testing purposes. - No Tags - Sem etiquetas + 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. Restore Entry(s) @@ -6013,23 +5454,19 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes 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 + Também pode verificar se existem atualizações através do menu da aplicação. Toggle window - Comutar janela + Alternar janela Quit KeePassXC Sair do KeePassXC - - %1 Entry(s) - %1 entrada%1 entradas%1 entradas - Please present or touch your YubiKey to continue… - Introduza ou toque na sua YubiKey para continuar… + Introduza ou toque na sua YubiKey para continuar... Restart Application? @@ -6039,314 +5476,38 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes You must restart the application to apply this setting. Would you like to restart now? Tem que reiniciar a aplicação para aplicar as alterações. Gostaria de o fazer agora? + + Tags + Etiquetas + + + No Tags + Sem etiquetas + + + %1 Entry(s) + %1 entrada%1 entradas%1 entradas + + + Copy Password and TOTP + Copiar palavra-passe e TOTP + + + &XML File… + Ficheiro &XML... + + + XML File… + Ficheiro XML... + + + Copy &URL + Copiar &URL + Allow Screen Capture Permitir captura de ecrã - - 1Password 1PUX... - 1Password 1PUX... - - - Import a 1Password 1PUX file - Importar um ficheiro 1Password 1PUX - - - Import… - Importar… - - - Passkeys… - Chaves-mestras... - - - Import Passkey - Importar chave-mestra - - - Remote S&ync… - S&incronização remota... - - - Quit Application - Sair da aplicação - - - Open About Dialog - Abrir caixa de diálogo Acerca - - - Open Database - Abrir base de dados - - - Create Database - Criar base de dados - - - Merge From Database - Combinar da base de dados - - - Create Entry - Criar entrada - - - Edit Entry - Editar entrada - - - Delete Entry - Eliminar entrada - - - Create Group - Criar grupo - - - Edit Group - Editar grupo - - - Delete Group - Eliminar grupo - - - Download All Favicons - Descarregar todos os ícones - - - Sort Groups A-Z - Ordenar grupos de A->Z - - - Sort Groups Z-A - Ordenar grupos de Z->A - - - Save Database As - Guardar base de dados como - - - Show Database Security - Mostrar segurança da base de dados - - - Show Database Reports - Mostrar relatórios da base de dados - - - Show Database Settings - Mostrar definições da base de dados - - - Show Passkeys - Mostrar chaves-mestras - - - Clone Entry - Clonar entrada - - - Move Entry Up - Mover para cima - - - Move Entry Down - Mover para baixo - - - Copy Username - Copiar nome de utilizador - - - Copy Password - Copiar palavra-passe - - - Show Application Settings - Mostrar definições da base de dados - - - Show Password Generator - Mostrar gerador de palavras-passe - - - Remove Passkey From Entry - Remover a chave-mestra da entrada - - - Perform Auto-Type: {USERNAME} - Executar escrita automática: {USERNAME} - - - Perform Auto-Type: {USERNAME}{ENTER} - Executar escrita automática: {USERNAME}{ENTER} - - - Perform Auto-Type: {PASSWORD} - Execute escrita automática: {PASSWORD} - - - Perform Auto-Type: {PASSWORD}{ENTER} - Execute escrita automática: {PASSWORD}{ENTER} - - - Perform Auto-Type: {TOTP} - Executar escrita automática: {TOTP} - - - Copy Title - Copiar título - - - Copy URL - Copiar URL - - - Copy Notes - Copiar notas - - - Export to CSV - Exportar para CSV - - - Export to HTML - Exportar para HTML - - - Import KeePass1 Database - Importar base de dados do KeePass 1 - - - Import 1Password Vault - Importar cofre 1Password - - - Import CSV File - Importar ficheiro CSV - - - Show TOTP QR Code - Mostrar código QR TOTP - - - Set up TOTP - Configurar TOTP - - - Empty Recycle Bin - Esvaziar reciclagem - - - Open Donation Website - Abrir site de donativos - - - Open Bug Report - Abrir relatório de erros - - - Open Online Documentation - Abrir documentação on-line - - - Open Keyboard Shortcuts Guide - Abrir guia de atalhos de teclado - - - Save Database Backup - Guardar backup da base de dados - - - SSH Agent: Add Key - Agente SSH: Adicionar chave - - - SSH Agent: Remove Key - Agente SSH: Remover chave - - - Toggle Compact Mode - Comutar "Modo compacto" - - - Set Theme: Automatic - Definir tema: Automático - - - Set Theme: Light - Definir tema: Claro - - - Set Theme: Dark - Definir tema: Escuro - - - Set Theme: Classic - Definir tema: Clássico - - - Toggle Show Menubar - Comutar "Mostrar barra de menus" - - - Toggle Show Toolbar - Comutar "Mostrar barra de ferramentas" - - - Toggle Show Preview Panel - Comutar "Mostrar painel de pré-visualização" - - - Toggle Always on Top - Comutar "Sempre na frente" - - - Toggle Hide Usernames - Comutar "Ocultar nome de utilizador" - - - Toggle Hide Passwords - Comutar "Ocultar palavras-passe" - - - Export to XML - Exportar para XML - - - Toggle Allow Screen Capture - Comutar "Permitir captura de ecrã" - - - Show Group Panel - Mostrar painel Grupo - - - Toggle Show Group Panel - Comutar exibição do painel Grupo - - - Setup Remote Sync… - Configurar a sincronização remota… - - - Password Generator - Gerador de palavras-passe - - - E&xpire Entry… - E&xpirar entrada… - - - Clear SSH Agent - Limpar agente SSH - - - Clear all identities in ssh-agent - Limpar todas as identidades no ssh-agent - ManageDatabase @@ -6404,6 +5565,26 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes 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 cópia de segurança para o destino antigo %1 [%2] + + + Adding backup for older source %1 [%2] + A adicionar cópia de segurança 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] @@ -6422,7 +5603,7 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes Changed deleted objects - Objetos elimnados alterados + Objetos eliminados alterados Adding missing icon %1 @@ -6441,7 +5622,7 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes NewDatabaseWizard Create a new KeePassXC database… - Criar uma nova base de dados do KeePassXC… + Criar uma nova base de dados do KeePassXC... Root @@ -6463,6 +5644,14 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes 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, a qualquer momento, poderá alterar esta opção nas definições da base de dados. + + Advanced Settings + Definições avançadas + + + Simple Settings + Definições básicas + NewDatabaseWizardPageDatabaseKey @@ -6472,7 +5661,7 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes A set of credentials known only to you that protects your database. - Um conjunto de credenciais só suas e que protegem a base de dados + Um conjunto de credenciais só suas e que protegem a base de dados. @@ -6497,25 +5686,6 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes Preencha o nome e uma descrição adicional para a sua nova base de dados: - - NewEntryAttachmentsDialog - - Attachment name cannot be empty - O nome do anexo não pode estar vazio - - - Attachment with the same name already exists - Já existe um anexo com este nome - - - Save attachment - Guardar anexo - - - New entry attachment - Anexo da nova entrada - - NixUtils @@ -6562,6 +5732,15 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes Esperados %1 bytes de 'clear-text' mas foram encontrados %2 + + OpVaultOpenWidget + + Read Database did not produce an instance +%1 + A leitura da base de dados não produziu uma instância +%1 + + OpVaultReader @@ -6605,7 +5784,7 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes Key file way too small. - Ficheiro-chave muito pequeno + Ficheiro-chave muito pequeno. Key file magic header id invalid @@ -6617,7 +5796,7 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes Failed to read public key. - Não foi possível ler a chave pública + Não foi possível ler a chave pública. Corrupted key file, reading private key failed @@ -6635,10 +5814,6 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes Unknown cipher: %1 Cifra desconhecida: %1 - - AES-256/GCM is currently not supported - AES-256/GCM não é suportado atualmente - Passphrase is required to decrypt this key Necessita de uma frase-chave para decifrar esta chave @@ -6704,183 +5879,8 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes EOF inesperado ao escrever a chave privada - (encrypted) - (cifrada) - - - - OpenSSHKeyGenDialog - - SSH Key Generator - Gerador de chaves SSH - - - Type - Tipo - - - Bits - Bits - - - Comment - Comentário - - - - PasskeyExportDialog - - KeePassXC - Passkey Export - KeePassXC - Exportação de chave-mestra - - - Filenames will be generated with title and .passkey file extension. - O nome do ficheiro será criado com o título e a extensão .passkey - - - Export entries - Exportar entradas - - - Export Selected - Exportar seleção - - - Cancel - Cancelar - - - Export to folder - Exportar para a pasta - - - Export the following passkey entries. - Exportar as seguintes entradas de chaves-mestras. - - - - PasskeyExporter - - KeePassXC: Passkey Export - KeePassXC: Exportação de chave-mestra - - - File "%1.passkey" already exists. -Do you want to overwrite it? - - O ficheiro "%1.passkey" já existe. -Deseja substituir o ficheiro existente? - - - - Cannot open file - Não foi possível abrir o ficheiro - - - Cannot open file "%1" for writing. - Não foi possível abrir o ficheiro "%1" para escrita - - - Cannot write to file - Não foi possível escrever para o ficheiro - - - - PasskeyImportDialog - - KeePassXC - Passkey Import - KeePassXC - Importação de chave-mestra - - - Username: %1 - Nome de utilizador: %1 - - - Group - Grupo - - - Database - Base de dados - - - Import Passkey - Importar chave-mestra - - - Import - Importar - - - Cancel - Cancelar - - - Entry - Entrada - - - Create new entry - Criar nova entrada - - - Relying Party: %1 - Entidades fiáveis: %1 - - - Import the following passkey: - Importar a seguinte chave-mestra: - - - Import the following passkey to this entry: - Importar a seguinte chave-mestra para esta entrada: - - - Default passkeys group (Imported Passkeys) - Grupo de chaves-mestras predefinidas (chaves-mestras importadas) - - - - PasskeyImporter - - Passkey file - Ficheiro de chave-mestra - - - All files - Todos os ficheiros - - - Cannot open file - Não foi possível abrir o ficheiro - - - Cannot open file "%1" for reading. - Não foi possível abrir o ficheiro "%1" para leitura. - - - Open passkey file - Abrir o ficheiro da chave-mestra - - - Cannot import passkey - Não é possível importar a chave-mestra - - - Cannot import passkey file "%1". Data is missing. - Não é possível importar o ficheiro da chave-mestra "%1". Os dados estão em falta. - - - Cannot import passkey file "%1". -The following data is missing: -%2 - Não é possível importar o ficheiro da chave-mestra "%1". -Faltam os seguintes dados: -%2 - - - Cannot import passkey file "%1". Private key is missing or malformed. - Não é possível importar o ficheiro da chave-mestra "%1". A chave privada está em falta ou malformada. + AES-256/GCM is currently not supported + AES-256/GCM não é suportado atualmente @@ -6891,7 +5891,7 @@ Faltam os seguintes dados: Password field - Campo palavra-passe + Campo Palavra-passe Confirm password: @@ -6899,7 +5899,7 @@ Faltam os seguintes dados: Repeat password field - Campo repetição de palavra-passe + Campo Repetição de palavra-passe Password @@ -6927,7 +5927,7 @@ Faltam os seguintes dados: Passwords do not match. - Disparidade nas palavras-passe + Disparidade nas palavras-passe. @@ -7085,6 +6085,10 @@ Faltam os seguintes dados: Word Count: Número de palavras: + + Character Count: + Número de caracteres: + Word Case: Tipo de letra: @@ -7097,6 +6101,10 @@ Faltam os seguintes dados: Add custom wordlist Adicionar lista personalizada + + character + carácter + Close Fechar @@ -7133,30 +6141,6 @@ Faltam os seguintes dados: 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 - Confirm Delete Wordlist Confirmação de eliminação @@ -7197,27 +6181,39 @@ Tem a certeza de que a deseja substituir? Logograms - Logogramas + Logo-gramas Special Characters Caracteres especiais - passwordLength - TamanhoPalavraPasse + Password Quality: %1 + Qualidade da palavra-passe: %1 - Characters: %1 - Caracteres: %1 + Poor + Password quality + - MIXED case - Maiúsculas e minúsculas + Weak + Password quality + Fraca - Excluded characters: "0", "1", "l", "I", "O", "|", "﹒", "B", "8", "G", "6" - Caracteres excluídos: "0", "1", "l", "I", "O", "|", "﹒", "B", "8", "G", "6" + Good + Password quality + Boa + + + Excellent + Password quality + Excelente + + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + Caracteres excluídos: "0", "1", "l", "I", "O", "|", "﹒" @@ -7232,7 +6228,7 @@ Tem a certeza de que a deseja substituir? Toggle Password (%1) - Comutar palavra-passe (%1) + Alternar palavra-passe (%1) Generate Password (%1) @@ -7240,7 +6236,7 @@ Tem a certeza de que a deseja substituir? Warning: Caps Lock enabled! - Aviso: tecla de bloqueio de maiúsculas está ativa! + Aviso: Caps Lock ativado Quality: %1 @@ -7267,8 +6263,8 @@ Tem a certeza de que a deseja substituir? Excelente - Toggle password visibility using Control + H. Open the password generator using Control + G. - Comutar exibição da palavra-passe com Ctrl + H. Abra o gerador de palavras-passe com Ctrl + G. + Toggle password visibilty using Control + H. Open the password generator using Control + G. + Alterne a exibição da palavra-passe com Ctrl + H. Abra o gerador de palavras-passe com Ctrl + G. @@ -7286,21 +6282,6 @@ Tem a certeza de que a deseja substituir? Prima &Tab entre os caracteres - - PreviewEntryAttachmentsDialog - - Preview entry attachment - Pré-visualizar anexo - - - No preview available - Pré-visualização indisponível - - - Image format not supported - Formato de imagem não suportado - - QMessageBox @@ -7339,10 +6320,6 @@ Tem a certeza de que a deseja substituir? Continue Continuar - - Continue with weak password - Continuar com palavra-passe insegura - QObject @@ -7368,11 +6345,11 @@ Tem a certeza de que a deseja substituir? Message encryption failed. - Não foi possível cifrar a mensagem + Não foi possível cifrar a mensagem. KeePassXC association failed, try again - Não foi possível associar o KeePassXC. Por favor tente novamente + Não foi possível associar KeePassXC. Por favor tente novamente. Encryption key is not recognized @@ -7420,11 +6397,11 @@ Tem a certeza de que a deseja substituir? Could not save the native messaging script file for %1. - Não foi possível guardar o script de mensagens nativas para %1 + Não foi possível guardar o script de mensagens nativas para %1. Username for the entry. - Nome de utilizador para a entrada + Nome de utilizador para a entrada. username @@ -7432,7 +6409,7 @@ Tem a certeza de que a deseja substituir? URL for the entry. - URL para a entrada + URL para a entrada. URL @@ -7448,27 +6425,27 @@ Tem a certeza de que a deseja substituir? Prompt for the entry's password. - Pedir palavra-passe para a entrada + Pedir palavra-passe para a entrada. Generate a password for the entry. - Gerar palavra-passe para a entrada + Gerar palavra-passe para a entrada. Add a new entry to a database. - Adicionar entrada à base de dados + Adicionar entrada à base de dados. Path of the entry to add. - Caminho da entrada a adicionar + Caminho da entrada a adicionar. Cannot generate a password and prompt at the same time. - Não pode utilizar as opções "Gerar palavra-passe" e "Pedir palavra-passe" ao mesmo tempo + Não pode utilizar as opções "Gerar palavra-passe" e "Pedir palavra-passe" ao mesmo tempo". Could not create entry with path %1. - Não foi possível criar a entrada com o caminho %1 + Não foi possível criar a entrada com o caminho %1. Enter password for new entry: @@ -7476,19 +6453,19 @@ Tem a certeza de que a deseja substituir? Writing the database failed %1. - Não foi possível escrever na base de dados %1 + Não foi possível escrever na base de dados %1. Successfully added entry %1. - Entrada %1 adicionada com sucesso + Entrada %1 adicionada com sucesso. Adds a new group to a database. - Adiciona um novo grupo à base de dados + Adiciona um novo grupo à base de dados. Path of the group to add. - Caminho do grupo a adicionar + Caminho do grupo a adicionar. Group %1 already exists! @@ -7500,11 +6477,11 @@ Tem a certeza de que a deseja substituir? Successfully added group %1. - Grupo %1 adicionado com sucesso + Grupo %1 adicionado com sucesso. Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. - Verifique se as suas palavras-passe foram expostas publicamente. FILENAME tem que ser o caminho de um ficheiro que liste as 'hashes' SHA-1 das palavras-passe expostas (no formato HIBP), tal como definido em https://haveibeenpwned.com/Passwords. + Verifique se as suas palavras-passe foram reveladas publicamente. FILENAME tem que ser o caminho de um ficheiro que liste as 'hashes' SHA-1 das palavras-passe reveladas (no formato HIBP), tal como definido em https://haveibeenpwned.com/Passwords. FILENAME @@ -7520,7 +6497,7 @@ Tem a certeza de que a deseja substituir? Analyze passwords for weaknesses and problems. - Analisar qualidade e problemas das palavras-passe + Analisar qualidade e problemas das palavras-passe. Cannot find HIBP file: %1 @@ -7528,7 +6505,7 @@ Tem a certeza de que a deseja substituir? Evaluating database entries using okon… - A avaliar entradas da base de dados com okon… + A avaliar entradas da base de dados com okon... Failed to open HIBP file %1: %2 @@ -7536,11 +6513,11 @@ Tem a certeza de que a deseja substituir? Evaluating database entries against HIBP file, this will take a while… - A avaliar as entradas da base de dados contra o ficheiro HIBP, por favor aguarde… + A avaliar as entradas da base de dados contra o ficheiro HIBP, por favor aguarde... Password for '%1' has been leaked %2 time(s)! - A palavra-passe para '%1' foi exposta %2 vez!A palavra-passe para '%1' foi exposta %2 vezes!A palavra-passe para '%1' foi exposta %2 vezes! + A palavra-passe para '%1' foi revelada %2 vez!A palavra-passe para '%1' foi revelada %2 vezes!A palavra-passe para '%1' foi revelada %2 vezes! Password for '%1' has been leaked! @@ -7564,23 +6541,23 @@ Tem a certeza de que a deseja substituir? Could not find entry with path %1. - Não foi possível encontrar a entrada com o caminho %1 + Não foi possível encontrar a entrada com o caminho %1. Could not find attachment with name %1. - Não foi possível encontrar o anexo com o nome "%1" + Não foi possível encontrar o anexo com o nome "%1". No export target given. Please use '--stdout' or specify an 'export-file'. - Não indicou o destino. Utilize '--stdout' ou especifique um 'export-file' + Não indicou o destino. Utilize '--stdout' ou especifique um 'export-file'. Could not open output file %1. - Não foi possível abrir %1 + Não foi possível abrir %1. Successfully exported attachment %1 of entry %2 to %3. - O anexo "%1" da entrada "%2" foi exportado para "%3" + O anexo "%1" da entrada "%2" foi exportado para "%3". Overwrite existing attachments. @@ -7588,7 +6565,7 @@ Tem a certeza de que a deseja substituir? Imports an attachment to an entry. - Importa um anexo para uma entrada + Importa um anexo para uma entrada. Path of the entry. @@ -7604,19 +6581,19 @@ Tem a certeza de que a deseja substituir? Attachment %1 already exists for entry %2. - O anexo "%1" já existe na entrada "%2" + O anexo "%1" já existe na entrada "%2". Could not open attachment file %1. - Não foi possível abrir o anexo "%1" + Não foi possível abrir o anexo %1. Successfully imported attachment %1 as %2 to entry %3. - O anexo "%1" foi importado como "%2" para a entrada "%3" + O anexo "%1" foi importado como "%2" para a entrada "%3". Remove an attachment of an entry. - Remove um anexo de uma entrada + Remove um anexo de uma entrada. Name of the attachment to be removed. @@ -7624,37 +6601,37 @@ Tem a certeza de que a deseja substituir? Successfully removed attachment %1 from entry %2. - O anexo "%1" foi removido da entrada "%2" + O anexo "%1" foi removido da entrada "%2". Copy the given attribute to the clipboard. Defaults to "password" if not specified. Don't translate "password", it refers to the attribute. - Copiar atributo para a área de transferência. Utiliza "password" se nenhum for especificado. + Copiar atributo para a área de transferÊncia. Utiliza "password" se nenhum for especificado. Copy the current TOTP to the clipboard (equivalent to "-a totp"). - Copiar TOTP para a área de transferência (equivalente a "-a totp") + Copiar TOTP para a área de transferência (equivalente a "-a totp"). Must match only one entry, otherwise a list of possible matches is shown. - Deve corresponder apenas a uma entrada, caso contrário é mostrada uma lista de possíveis correspondências + Deve corresponder apenas a uma entrada, caso contrário é mostrada uma lista de possíveis correspondências. Copy an entry's attribute to the clipboard. - Copiar atributo de uma entrada para a área de transferência + Copiar atributo de uma entrada para a área de transferência. Path of the entry to clip. clip = copy to clipboard - Caminho da entrada a copiar + Caminho da entrada a copiar. Timeout before clearing the clipboard (default is %1 seconds, set to 0 for unlimited). - Tempo limite antes de limpar a área de transferência (o padrão é %1 segundos, definir para 0 para ilimitado) + Tempo limite antes de limpar a área de transferência (o padrão é %1 segundos, definir para 0 para ilimitado). Invalid timeout value %1. - Valor limite inválido %1 + Valor limite inválido %1. Multiple entries matching: @@ -7666,23 +6643,23 @@ Tem a certeza de que a deseja substituir? Entry %1 not found. - Entrada %1 não encontrada + Entrada %1 não encontrada. ERROR: Please specify one of --attribute or --totp, not both. - ERRO: tem que especificar --attribute ou --totp, mas não ambos + ERRO: tem que especificar --attribute ou --totp, mas não ambos. Entry with path %1 has no TOTP set up. - A entrada com o caminho %1 não tem uma TOTP configurada + A entrada com o caminho %1 não tem uma TOTP configurada. ERROR: attribute %1 is ambiguous, it matches %2. - ERRO: atributo %1 é ambíguo porque coincide com %2 + ERRO: atributo %1 é ambíguo porque coincide com %2. Attribute "%1" not found. - Atributo "%1" não encontrado + Atributo %1 não encontrado. Entry's "%1" attribute copied to the clipboard! @@ -7690,7 +6667,7 @@ Tem a certeza de que a deseja substituir? 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…A área de transferência será limpa dentro de %1 segundos… + A área de transferência será limpa dentro de %1 segundo...A área de transferência será limpa dentro de %1 segundos...A área de transferência será limpa dentro de %1 segundos... Clipboard cleared! @@ -7698,19 +6675,19 @@ Tem a certeza de que a deseja substituir? Close the currently opened database. - Fechar base de dados aberta + Fechar a base de dados aberta. Display this help. - Mostra esta ajuda + Mostra esta ajuda. Silence password prompt and other secondary outputs. - Silenciar pedidos de palavra-passe e outros resultados secundários + Silenciar pedidos de palavra-passe e outros resultados secundários. Key file of the database. - Ficheiro-chave da base de dados + Ficheiro-chave da base de dados. path @@ -7718,11 +6695,11 @@ Tem a certeza de que a deseja substituir? Deactivate password key for the database. - Desativar chave de segurança para a base de dados + Desativar chave de segurança para a base de dados. Yubikey slot and optional serial used to access the database (e.g., 1:7370001). - Slot Yubikey e número de série (opcional) para aceder à base de dados (exemplo 1:7370001) + Ranhura Yubikey e número de série (opcional) para aceder à base de dados (exemplo 1:7370001). slot[:serial] @@ -7730,19 +6707,15 @@ Tem a certeza de que a deseja substituir? Missing positional argument(s). - Argumento posicional em falta + Argumento posicional em falta. Too many arguments provided. - Indicou demasiados argumentos - - - Path of the database. - Caminho da base de dados + Indicou demasiados argumentos. Target decryption time in MS for the database. - Duração (em ms) para decifrar a base de dados + Duração (em ms) para decifrar a base de dados. time @@ -7750,31 +6723,35 @@ Tem a certeza de que a deseja substituir? Set the key file for the database. - Definir um ficheiro-chave para a base de dados + Definir um ficheiro-chave para a base de dados. Set a password for the database. - Definir uma palavra-passe para a base de dados + Definir uma palavra-passe para a base de dados. Create a new database. - Criar uma nova base de dados + Criar uma nova base de dados. + + + Path of the database. + Caminho da base de dados. Invalid decryption time %1. - Duração inválida %1 + Duração inválida %1. Target decryption time must be between %1 and %2. - A duração para decifrar tem que estar entre %1 e%2 + A duração para decifrar tem que estar entre %1 e%2. Failed to set database password. - Não foi possível definir a palavra-passe para a base de dados + Não foi possível definir a palavra-passe para a base de dados. Loading the key file failed - Não foi possível carregar o ficheiro-chave + Não foi possível carregar o ficheiro-chave. No key is set. Aborting database creation. @@ -7782,183 +6759,31 @@ Tem a certeza de que a deseja substituir? Benchmarking key derivation function for %1ms delay. - Função de derivação de chave para um atraso de %1 ms + Função de derivação de chave para um atraso de %1 ms. Setting %1 rounds for key derivation function. - A definir %1 ciclos para a função de derivação da chave + A definir %1 ciclos para a função de derivação da chave. error while setting database key derivation settings. - erro ao definir as definições de derivação da chave + erro ao definir as definições de derivação da chave. File %1 already exists. - Ficheiro %1 já existe + Ficheiro %1 já existe. Failed to save the database: %1. - Não foi possível guardar a base de dados: %1 + Não foi possível guardar a base de dados: %1. Successfully created new database. - A base de dados foi criada com sucesso - - - Unset the password for the database. - Não definir palavra-passe para a base de dados - - - Unset the key file for the database. - Não definir ficheiro-chave para a base de dados - - - Edit a database. - Editar base de dados - - - Cannot use %1 and %2 at the same time. - Não pode usar %1 e %2 em simultâneo - - - Could not change the database key. - Não foi possível alterar a chave da base de dados - - - Database was not modified. - A base de dados não foi modificada - - - Writing the database failed: %1 - Não foi possível escrever na base de dados: %1 - - - Successfully edited the database. - Base de dados editada com sucesso - - - Cannot remove password: The database does not have a password. - Não pode remover a palavra-passe: a base de dados não a tem - - - Cannot remove file key: The database does not have a file key. - Não pode remover o ficheiro-chave: a base de dados não o tem - - - Loading the new key file failed: %1 - Falha ao carregar a nova chave do ficheiro: %1 - - - Found unexpected Key type %1 - Encontrado um tipo de chave inesperado: %1 - - - Cannot remove all the keys from a database. - Não pode remover todas as chaves de uma base de dados - - - Show a database's information. - Mostrar informação da base de dados - - - UUID: - UUID: - - - Name: - Nome: - - - Description: - Descrição: - - - Cipher: - Cifra: - - - KDF: - KDF: - - - Recycle bin is enabled. - Reciclagem ativada - - - Recycle bin is not enabled. - Reciclagem desativada - - - Location - Localização - - - Database created - Base de dados criada - - - Last saved - Última gravação - - - Unsaved changes - Alterações por guardar - - - yes - sim - - - no - não - - - Number of groups - Número de grupos - - - Number of entries - Numero de entradas - - - Number of expired entries - Número de entradas caducadas - - - Unique passwords - Palavras-passe unívocas - - - Non-unique passwords - Palavras-passe não unívocas - - - Maximum password reuse - Número máximo de reutilizações - - - Number of short passwords - Número de palavras-passes curtas - - - Number of weak passwords - Número de palavras-passe fracas - - - Entries excluded from reports - Entradas excluídas dos relatórios - - - Average password length - Tamanho médio das palavras-passe - - - %1 characters - %1 caracteres + A base de dados foi criada com sucesso. Word count for the diceware passphrase. - Número de palavras para a frase-chave + Número de palavras para a frase-chave. count @@ -7968,20 +6793,24 @@ Tem a certeza de que a deseja substituir? Wordlist for the diceware generator. [Default: EFF English] - Lista de palavras para o gerador + Lista de palavras para o gerador. [Padrão: EFF inglês] Generate a new random diceware passphrase. - Gerar uma frase-chave baseada em dados (diceware) + Gerar uma frase-chave baseada em dados (diceware). Invalid word count %1 Número de palavras inválido: %1 + + The word list is too small (< 1000 items) + A lista de palavras é muito pequena (< 1000 itens) + Title for the entry. - Título para a entrada + Título para a entrada. title @@ -7989,35 +6818,39 @@ Tem a certeza de que a deseja substituir? Edit an entry. - Editar entrada + Editar entrada. Path of the entry to edit. - Caminho da entrada a editar + Caminho da entrada a editar. Not changing any field for entry %1. - Não foi alterado qualquer campo para a entrada %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 + Não foi possível escrever na base de dados: %1 + Successfully edited entry %1. - Entrada %1 editada com sucesso + Entrada %1 editada com sucesso. Perform advanced analysis on the password. - Executar análise avançada da palavra-passe + Executar análise avançada da palavra-passe. Password for which to estimate the entropy. - Palavra-passe para a qual será estimada a entropia + Palavra-passe para a qual será estimada a entropia. Estimate the entropy of a password. - Estimar entropia da palavra-passe + Estimar entropia da palavra-passe. Length %1 @@ -8121,11 +6954,15 @@ Tem a certeza de que a deseja substituir? Exit interactive mode. - Sair do modo interativo + Sair do modo interativo. + + + Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. + Formato a utilizar para a exportação. As opções possíveis são 'xml' e 'csv'. Por definição, é utilizado o formato 'XML'. Exports the content of a database to standard output in the specified format. - Exporta o conteúdo da base de dados para o formato especificado + Exporta o conteúdo da base de dados para o formato especificado. Unable to export database to XML: %1 @@ -8185,7 +7022,7 @@ Tem a certeza de que a deseja substituir? Generate a new random password. - Gerar nova palavra-passe aleatória + Gerar nova palavra-passe aleatória. Invalid password length %1 @@ -8197,7 +7034,7 @@ Tem a certeza de que a deseja substituir? Display command help. - Mostra a ajuda para os comandos + Mostra a ajuda para os comandos. Available commands: @@ -8205,15 +7042,15 @@ Tem a certeza de que a deseja substituir? Import the contents of an XML database. - Importar conteúdo de uma base de dados no formato XML + Importar conteúdo de uma base de dados no formato XML. Path of the XML database export. - Caminho para guardar a base de dados em XML + Caminho para guardar a base de dados em XML. Path of the new database. - Caminho da nova base de dados + Caminho da nova base de dados. Unable to import XML database: %1 @@ -8221,7 +7058,107 @@ Tem a certeza de que a deseja substituir? Successfully imported database. - Base de dados importada com sucesso + Base de dados importada com sucesso. + + + Show a database's information. + Mostrar informação da base de dados. + + + UUID: + UUID: + + + Name: + Nome: + + + Description: + Descrição: + + + Cipher: + Cifra: + + + KDF: + KDF: + + + Recycle bin is enabled. + Reciclagem ativada. + + + Recycle bin is not enabled. + Reciclagem desativada. + + + Location + Localização + + + Database created + Base de dados criada + + + Last saved + Última gravação + + + Unsaved changes + Alterações por guardar + + + yes + sim + + + no + não + + + Number of groups + Número de grupos + + + Number of entries + Numero de entradas + + + Number of expired entries + Número de entradas caducadas + + + Unique passwords + Palavras-passe unívocas + + + Non-unique passwords + Palavras-passe não unívocas + + + Maximum password reuse + Número máximo de reutilizações + + + Number of short passwords + Número de palavras-passes curtas + + + Number of weak passwords + Número de palavras-passe fracas + + + Entries excluded from reports + Entradas excluídas dos relatórios + + + Average password length + Tamanho médio das palavras-passe + + + %1 characters + %1 caracteres Unknown command %1 @@ -8239,11 +7176,11 @@ Comandos disponíveis: Name of the command to execute. - Nome do comando a executar + Nome do comando a executar. Displays debugging information. - Mostra a informação de depuração + Mostra a informação de depuração. Invalid command %1. @@ -8255,11 +7192,11 @@ Comandos disponíveis: Flattens the output to single lines. - Restringe o resultado para uma linha única + Restringe o resultado para uma linha única. List database entries. - Listar entradas da base de dados + Listar entradas da base de dados. Path of the group to list. Default is / @@ -8267,39 +7204,39 @@ Comandos disponíveis: Cannot find group %1. - Não foi possível encontrar o grupo %1 + Não foi possível encontrar o grupo %1. Use the same credentials for both database files. - Utilizar as mesmas credenciais para ambos os ficheiros de bases de dados + Utilizar as mesmas credenciais para ambos os ficheiros de bases de dados. Key file of the database to merge from. - Ficheiro-chave da base de dados para a combinação + Ficheiro-chave da base de dados para a combinação. Deactivate password key for the database to merge from. - Desativar palavra-passe da base de dados de origem + Desativar palavra-passe da base de dados de origem. Only print the changes detected by the merge operation. - Imprimir apenas as alterações detetadas pela operação de combinação + Imprimir apenas as alterações detetadas pela operação de combinação. Yubikey slot for the second database. - 'Slot' Yubikey para a segunda base de dados + Ranhura Yubikey para a segunda base de dados. slot - slot + ranhura Merge two databases. - Combinar duas bases de dados + Combinar duas bases de dados. Path of the database to merge from. - Caminho da base de dados de origem para a combinação + Caminho da base de dados de origem para a combinação. Error reading merge file: @@ -8313,43 +7250,43 @@ Comandos disponíveis: Successfully merged %1 into %2. - %1 combinado com sucesso para %2 + %1 combinado com sucesso para %2. Database was not modified by merge operation. - A base de dados não foi modificada pela combinação + A base de dados não foi alterada pela combinação. Moves an entry to a new group. - Move uma entrada para outro grupo + Move uma entrada para outro grupo. Path of the entry to move. - Caminho da entrada a mover + Caminho da entrada a mover. Path of the destination group. - Caminho do grupo de destino + Caminho do grupo de destino. Could not find group with path %1. - Não foi possível encontrar o grupo no caminho %1 + Não foi possível encontrar o grupo no caminho %1. Entry is already in group %1. - O grupo %1 já possui esta entrada + O grupo %1 já possui esta entrada. Successfully moved entry %1 to group %2. - Entrada %1 movida com sucesso para o grupo %2 + Entrada %1 movida com sucesso para o grupo %2. Open a database. - Abrir base de dados + Abrir base de dados. Path of the entry to remove. - Caminho da entrada a remover + Caminho da entrada a remover. Unable to save database to file: %1 @@ -8357,51 +7294,47 @@ Comandos disponíveis: Successfully recycled entry %1. - Entrada %1 movida para a reciclagem + Entrada %1 movida para a reciclagem. Successfully deleted entry %1. - A entrada %1 foi eliminada + A entrada %1 foi eliminada. Path of the group to remove. - Caminho do grupo a remover + Caminho do grupo a remover. Cannot remove root group from database. - Não é possível remover o grupo raiz da base de dados + Não é possível remover o grupo raiz da base de dados. Successfully recycled group %1. - Grupo %1 enviado para a reciclagem + Grupo %1 enviado para a reciclagem. Successfully deleted group %1. - O grupo %1 foi eliminado + O grupo %1 foi eliminado. Find entries quickly. - Localizar entradas rapidamente + Localizar entradas rapidamente. Search term. - Termo de pesquisa + Termo de pesquisa. Show the entry's current TOTP. - Mostrar TOTP da entrada atual + Mostrar TOTP da entrada atual. Show the protected attributes in clear text. - Mostrar atributos protegidos em 'clear-text' - - - Show all the attributes of the entry. - Mostrar todos os atributos da entrada + Mostrar atributos protegidos em 'clear-text'. Show the attachments of the entry. - Mostra o anexo de uma entrada + Mostra o anexo 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. @@ -8413,19 +7346,19 @@ Comandos disponíveis: Show an entry's information. - Mostrar informações de uma entrada + Mostrar informações de uma entrada. Name of the entry to show. - Nome da entrada a mostrar + Nome da entrada a mostrar. ERROR: unknown attribute %1. - Erro: atributo desconhecido %1 + Erro: atributo desconhecido %1. No attachments present. - Não existem anexos + Não existem anexos. Attachments: @@ -8463,16 +7396,12 @@ Deve considerar a geração de um novo ficheiro-chave. Invalid YubiKey slot %1 - 'Slot' Yubikey inválida: %1 + Ranhura Yubikey inválida: %1 Invalid YubiKey serial %1 N.º de série YubiKey inválido %1 - - Please present or touch your YubiKey to continue. - Introduza ou toque na sua YubiKey para continuar - Enter password to encrypt database (optional): Introduza a palavra-passe para cifrar a base de dados (opcional): @@ -8483,11 +7412,11 @@ Deve considerar a geração de um novo ficheiro-chave. Repeat password: - Repetição de palavra-passe: + Repetição de palavra-passe: Error: Passwords do not match. - Erro: disparidade nas palavras-passe + Erro: disparidade nas palavras-passe. No program defined for clipboard manipulation @@ -8589,11 +7518,11 @@ Deve considerar a geração de um novo ficheiro-chave. Debugging mode is disabled. - Modo de depuração desativado + Modo de depuração desativado. Debugging mode is enabled. - Modo de depuração ativado + Modo de depuração ativado. Operating system: %1 @@ -8677,19 +7606,19 @@ Kernel: %3 %4 SymmetricCipher::init: Invalid cipher mode. - SymmetricCipher::init: Modo de cifra inválido + SymmetricCipher::init: Modo de cifra inválido. SymmetricCipher::init: Invalid IV size of %1 for %2. - SymmetricCipher::init: Tamanho IV inválido de %1 para %2 + SymmetricCipher::init: Tamanho IV inválido de %1 para %2. Cipher not initialized prior to use. - Cifra não iniciada antes da utilização + Cifra não iniciada antes da utilização. Cannot process 0 length data. - Não pode processar dados com dimensão 0 + Não pode processar dados com dimensão 0. unknown executable (DBus address %1) @@ -8711,6 +7640,18 @@ Kernel: %3 %4 file empty ficheiro vazio + + malformed string + cadeira mal fomada + + + missing closing quote + carácter de fecho em falta + + + %1: (row, col) %2,%3 + %1: (linha, coluna) %2,%3 + AES 256-bit AES 256-bit @@ -8749,7 +7690,7 @@ Kernel: %3 %4 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…A área de transferência será limpa dentro de %1 segundos… + A área de transferência será limpa dentro de %1 segundo...A área de transferência será limpa dentro de %1 segundos...A área de transferência será limpa dentro de %1 segundos... Group @@ -8777,7 +7718,7 @@ Kernel: %3 %4 Last Modified - Última modificação + Última alteração Created @@ -8827,7 +7768,7 @@ Kernel: %3 %4 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 a referência com valores, ignorar ou eliminar?A entrada "%1" tem %2 referências. Deseja substituir as referências com valores, ignorar ou eliminar?A entrada "%1" tem %2 referências. Deseja substituir as referências com valores, ignorar ou eliminar? + A entrada "%1" tem %2 referência. Deseja substituir a referência com valores, ignorar ou apagar a entrada?A entrada "%1" tem %2 referências. 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? User name @@ -8889,21 +7830,25 @@ Kernel: %3 %4 read password of the database from stdin ler palavra-passe da base de dados a partir de stdin + + allow app screen recordering and screenshots + permitir a gravação de ecrã e capturas de ecrã da aplicação + + + Locked databases. + Bases de dados bloqueadas. + Database failed to lock. - Não foi possível desbloquear a base de dados + Não foi possível desbloquear a base de dados. Another instance of KeePassXC is already running. - Já está em execução uma instância do KeePassXC - - - KeePassXC is not running. No open database to lock - KeePassXC não está em execução. Não há nenhuma base de dados para bloquear + 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 + Erro fatal ao testar as funções de criptografia. KeePassXC - Error @@ -8944,300 +7889,70 @@ Kernel: %3 %4 Função de derivação de chave inválida - Access to all entries is denied - Não permitir acesso às entradas + Please present or touch your YubiKey to continue. + Introduza ou toque na sua YubiKey para continuar. - allow screenshots and app recording (Windows/macOS) - permitir captura de ecrã e gravação de aplicações (Windows/macOS) + Show all the attributes of the entry. + Mostrar todos os atributos da entrada. + + + Edit a database. + Editar base de dados + + + Could not change the database key. + Não foi possível alterar a chave da base de dados. + + + Database was not modified. + A base de dados não foi modificada. + + + Successfully edited the database. + Base de dados editada com sucesso. + + + Loading the new key file failed: %1 + Falha ao carregar a nova chave do ficheiro: %1 + + + Unset the password for the database. + Não definir palavra-passe para a base de dados. + + + Unset the key file for the database. + Não definir ficheiro-chave para a base de dados. + + + Cannot use %1 and %2 at the same time. + Não pode usar %1 e %2 em simultâneo. + + + Cannot remove all the keys from a database. + Não pode remover todas as chaves de uma base de dados. + + + Cannot remove password: The database does not have a password. + Não pode remover a palavra-passe: a base de dados não a tem. + + + Cannot remove file key: The database does not have a file key. + Não pode remover o ficheiro-chave: a base de dados não o tem. + + + Found unexpected Key type %1 + Encontrado um tipo de chave inesperado: %1 Set the key file for the database. -This option is deprecated, use --set-key-file instead. - Define o ficheiro chave para a base de dados. -Esta opção está obsoleta, em vez disso use --set-key-file. +This options is deprecated, use --set-key-file instead. + Definir ficheiro-chave para a base de dados. +Esta opção foi descontinuada, utilize '--set-key-file'. - Databases have been locked. - As bases de dados foram bloqueadas. - - - Attestation not supported - Atestado não suportado - - - Credential is excluded - Credencial excluída - - - Passkeys request canceled - Cancelado o pedido de chaves-mestras - - - Invalid user verification - Verificação de utilizador inválida - - - Empty public key - Chave pública vazia - - - Invalid URL provided - URL inválido - - - Passkeys - Chaves-mestras - - - AES initialization failed - Falha na inicialização AES - - - AES encrypt failed - Falha ao cifrar com AES - - - Failed to store in Linux Keyring - Não foi possível guardar no chaveiro Linux - - - Polkit returned an error: %1 - 'Polkit' devolveu um erro: %1 - - - Could not locate key in keyring - Não foi possível localizar a chave no chaveiro - - - Could not read key in keyring - Não foi possível ler a chave no chaveiro - - - AES decrypt failed - Falha ao decifrar com AES - - - No Polkit authentication agent was available - Não foi encontrado qualquer agente de autenticação 'Polkit' - - - Polkit authorization failed - Não foi possível autorizar com 'Polkit' - - - No Quick Unlock provider is available - Não existe qualquer fornecedor de desbloqueio rápido - - - Failed to init KeePassXC crypto. - Não foi possível iniciar a criptografia KeePassXC - - - Failed to encrypt key data. - Não foi possível cifrar os dados da chave - - - Failed to get Windows Hello credential. - Não foi possível obter a credencial Windows Hello - - - Failed to decrypt key data. - Não foi possível decifrar os dados da chave - - - Origin is empty or not allowed - Origem vazia ou não permitida - - - Effective domain is not a valid domain - O domínio efetivo não é válido - - - Origin and RP ID do not match - A origem e a ID do RP não coincidem - - - No supported algorithms were provided - Não foram fornecidos algoritmos suportados - - - Wait for timer to expire - Esperar pela caducidade do temporizador - - - Challenge is shorter than required minimum length - O desafio é menor do que o tamanho mínimo permitido - - - user.id does not match the required length - user.id não coincide com o tamanho necessário - - - Favorite - Tag for favorite entries - Favoritas - - - File does not exist. - O ficheiro não existe - - - Cannot open file: %1 - Não foi possível abrir o ficheiro: %1 - - - Cannot parse file: %1 at position %2 - Não é possível processar o ficheiro: %1 na posição %2 - - - Failed to decrypt json file: %1 - Falha ao decifrar o ficheiro json: %1 - - - Invalid encKeyValidation field - Campo encKeyValidation inválido - - - Invalid cipher list within encKeyValidation field - Lista de cifras inválida no campo encKeyValidation - - - Wrong password - Palavra-passe errada - - - Invalid encrypted data field - Campo de dados cifrado inválido - - - Invalid cipher list within encrypted data field - Lista de cifras inválida dentro do campo de dados cifrados - - - Cannot initialize cipher - Não é possível inicializar a cifra - - - Cannot decrypt data - Não foi possível decifrar os dados - - - Bitwarden Import - Importação Bitwarden - - - Archived - Tag for archived entries - Arquivada - - - Invalid 1PUX file format: Not a valid ZIP file. - Formato de ficheiro 1PUX inválido: não é um ficheiro ZIP válido. - - - Invalid 1PUX file format: Missing export.data - Formato de ficheiro 1PUX inválido: export.data em falta - - - 1Password Import - Importação 1Password - - - Enter Shortcut - Digite o atalho - - - Action - Ação - - - Shortcuts - Atalhos - - - Unknown passkeys error - Erro desconhecido de chaves-mestras - - - Invalid KDF iterations, cannot decrypt json file - Interações KDF inválidas, não é possível decifrar o ficheiro .json - - - Unsupported format, ensure your Bitwarden export is password-protected - Formato não suportado. Verifique se a exportação Bitwarden está protegida por palavra-passe. - - - Only PBKDF and Argon2 are supported, cannot decrypt json file - Apenas existe suporte para PBKDF e Argon2. Não foi possível decifrar o ficheiro json. - - - Reset Shortcuts - Repor atalhos - - - Double click an action to change its shortcut - Dois cliques na ação para alterar o atalho - - - Filter... - Filtro... - - - Shortcut Conflict - Conflito de atalhos - - - Shortcut %1 conflicts with '%2'. Overwrite shortcut? - O atalho %1 está em conflito com '%2'. Substituir atalho? - - - Cannot generate valid passphrases because the wordlist is too short - Não foi possível gerar uma frase-chave válida porque a lista de palavras é pequena - - - Encrypted files are not supported. - Os ficheiros cifrados não não suportados. - - - Proton Pass Import - Importação de Proton Pass - - - Delete plugin data? - Eliminar dados do suplemento? - - - Delete plugin data from Entry(s)? - Eliminar dados do suplemento da entrada?Eliminar dados do suplemento das entradas?Eliminar dados do suplemento das entradas? - - - Passkey - Chave-mestra - - - Format to use when exporting. Available choices are 'xml', 'csv' or 'html'. Defaults to 'xml'. - Formato a utilizar para a exportação. As escolhas possíveis são: 'xml', 'csv' e 'html'. Por omissão, é utilizado o formato 'xml'. - - - start minimized to the system tray - Iniciar minimizado na bandeja do sistema - - - malformed string, possible unescaped delimiter - - - - missing closing delimiter - - - - %1, row: %2, column: %3 - - - - Tags - Etiquetas + KeePassXC is not running. No open database to lock + KeePassXC não está em execução. Não há nenhuma base de dados para bloquear @@ -9267,46 +7982,27 @@ Esta opção está obsoleta, em vez disso use --set-key-file. QtIOCompressor::open The gzip format not supported in this version of zlib. - O formato gzip não é suportado por esta versão zlib + O formato gzip não é suportado por esta versão zlib. Internal zlib error: Erro interno zlib: - - RemoteHandler - - Command `%1` did not finish in time. Process was killed. - O comando `%1` não terminou a tempo. O processo foi interrompido. - - - Failed to upload merged database. Command `%1` did not finish in time. Process was killed. - Houve uma falha ao enviar a base de dados combinada. O comando `%1` não foi concluído a tempo. O processo foi interrompido. - - - Invalid download parameters provided. - Foram fornecidos parâmetros de descarregamento inválidos. - - - Command `%1` failed to download database. - O comando `%1` não conseguiu descarregar a base de dados. - - - Invalid database pointer or upload parameters provided. - O ponteiro da base de dados ou os parâmetros de carregamento fornecidos são inválidos. - - - Command `%1` exited with status code: %2 - O comando `%1` foi encerrado com o código de estado: %2 - - - Failed to upload merged database. Command `%1` exited with status code: %2 - Houve uma falha ao carregar a base de dados combinada. O comando `%1` foi encerrado com o código de estado: %2 - - ReportsWidgetBrowserStatistics + + Exclude expired entries from the report + Excluir do relatório as entradas caducadas + + + Show only entries which have URL set + Mostrar apenas as entradas com URL definido + + + Show only entries which have browser settings in custom data + Mostrar apenas as entradas que possuam definições do navegador em dados personalizados + Double-click entries to edit. Duplo clique nas entradas para editar @@ -9341,11 +8037,11 @@ Esta opção está obsoleta, em vez disso use --set-key-file. Please wait, browser statistics is being calculated… - Por favor aguarde enquanto as estatísticas estão a ser calculadas… + Por favor aguarde enquanto as estatísticas estão a ser calculadas... No entries with a URL, or none has browser extension settings saved. - Não existem entradas com URL definido ou com definições de integração com navegador guardadas + Não existem entradas com URL definido ou com definições de integração com navegador guardadas. Title @@ -9361,70 +8057,61 @@ Esta opção está obsoleta, em vez disso use --set-key-file. Edit Entry… - Editar entrada… + Editar entrada... Delete Entry(s)… - Eliminar entrada…Eliminar entradas…Eliminar entradas… + Eliminar entradas...Eliminar entradas... Exclude from reports Excluir dos relatórios - - Expire Entry(s)… - Expirar entrada...Expirar entradas...Expirar entradas... - - - Only show entries that have a URL - Mostrar apenas as entradas que tenham um URL - - - Only show entries that have been explicitly allowed or denied - Mostrar apenas as entradas que foram, explicitamente, permitidas ou recusadas - - - Show expired entries - Mostrar entradas caducadas - - - (Expired) - (Caducadas) - - - Delete plugin data from Entry(s)… - Eliminar dados do suplemento da entrada…Eliminar dados do suplemento das entradas…Eliminar dados do suplemento das entradas… - ReportsWidgetHealthcheck - Show expired entries - Mostrar entradas caducadas + Exclude expired entries from the report + Excluir do relatório as entradas caducadas - (Expired) - (Caducadas) + Also show entries that have been excluded from reports + Incluir também as entradas que tenham sido excluídas dos relatórios Hover over reason to show additional details. Double-click entries to edit. Passe com o rato pelo motivo para obter mais informação. Clique duas vezes na entrada para editar. + + Bad + Password quality + + Bad — password must be changed Má - deve alterar a palavra-passe + + Poor + Password quality + + Poor — password should be changed Fraquinha - deve alterar a palavra-passe + + Weak + Password quality + Fraca + Weak — consider changing the password Fraca - considere alterar a palavra-passe (Excluded) - (Excluída) + (Excluída) This entry is being excluded from reports @@ -9432,11 +8119,11 @@ Esta opção está obsoleta, em vez disso use --set-key-file. Please wait, health data is being calculated… - Por favor aguarde, os dados estão a ser calculados… + Por favor aguarde, os dados estão a ser calculados... Congratulations, everything is healthy! - Parabéns, tudo parece estar bem! + Parabéns, tudo parece estar bem. Title @@ -9460,20 +8147,12 @@ Esta opção está obsoleta, em vez disso use --set-key-file. Delete Entry(s)… - Eliminar entrada…Eliminar entradas…Eliminar entradas… + Eliminar entrada...Eliminar entradas...Eliminar entradas... Exclude from reports Excluir dos relatórios - - Expire Entry(s)… - Expirar entrada...Expirar entradas...Expirar entradas... - - - Show entries that have been excluded from reports - Mostrar entradas que tenham sido excluídas dos relatórios - ReportsWidgetHibp @@ -9495,7 +8174,7 @@ Esta opção está obsoleta, em vez disso use --set-key-file. Congratulations, no exposed passwords! - Parabéns, não possui palavras-passe expostas! + Parabéns, não possui palavras-passe expostas. Title @@ -9507,11 +8186,11 @@ Esta opção está obsoleta, em vez disso use --set-key-file. Password exposed… - Palavra-passe exposta… + Palavra-passe exposta... (Excluded) - (Excluída) + (Excluída) This entry is being excluded from reports @@ -9559,93 +8238,22 @@ Esta opção está obsoleta, em vez disso use --set-key-file. Edit Entry… - Editar entrada… + Editar entrada... Delete Entry(s)… - Eliminar entrada…Eliminar entradas…Eliminar entradas… + Eliminar entrada...Eliminar entradas...Eliminar entradas... Exclude from reports Excluir dos relatórios - - Expire Entry(s)… - Expirar entrada...Expirar entradas...Expirar entradas... - - - - ReportsWidgetPasskeys - - Export - Exportar - - - Import - Importar - - - List of entry URLs - Lista dos URL das entradas - - - Title - Título - - - Path - Caminho - - - Username - Nome de utilizador - - - URLs - URL - - - Edit Entry… - Editar entrada… - - - Delete Entry(s)… - Eliminar entrada…Eliminar entradas…Eliminar entradas… - - - Relying Party - Entidades fiáveis - - - Show expired entries - Mostrar entradas caducadas - - - (Expired) - (Caducadas) - - - Export Confirmation - Confirmação de exportação - - - The passkey file will be vulnerable to theft and unauthorized use, if left unsecured. Are you sure you want to continue? - O ficheiro ficará vulnerável a roubo e a utilização não autorizada, se a deixar sem segurança. Tem a certeza de que deseja continuar? - - - Please wait, list of entries with passkeys is being updated… - Aguarde, a lista de entradas com chaves-mestras está a ser atualizada… - - - No entries with passkeys. - Não há entradas com chaves-mestras. - ReportsWidgetStatistics Hover over lines with error icons for further information. - Passe com o rato por cima das linhas com o erro para mais informações + Passe com o rato por cima das linhas com o erro para mais informações. Name @@ -9657,7 +8265,7 @@ Esta opção está obsoleta, em vez disso use --set-key-file. Please wait, database statistics are being calculated… - Por favor aguarde. Estamos a calcular as estatísticas da base de dados… + Por favor aguarde. Estamos a calcular as estatísticas da base de dados... Database name @@ -9693,7 +8301,7 @@ Esta opção está obsoleta, em vez disso use --set-key-file. The database was modified, but the changes have not yet been saved to disk. - A base de dados foi modificada mas as alterações ainda não foram guardadas + A base de dados foi alterada mas as alterações ainda não foram guardadas. Number of groups @@ -9772,7 +8380,7 @@ Esta opção está obsoleta, em vez disso use --set-key-file. SSHAgent Agent connection failed. - Erro ao conectar com o agente. + Não foi possível conectar com o agente. Agent protocol error. @@ -9780,7 +8388,7 @@ Esta opção está obsoleta, em vez disso use --set-key-file. No agent running, cannot add identity. - O agente não está em execução por isso não é possível adicionar a identidade. + O agente não está em execução e não é possível adicionar a identidade. Key identity ownership conflict. Refusing to add. @@ -9808,26 +8416,18 @@ Esta opção está obsoleta, em vez disso use --set-key-file. No agent running, cannot remove identity. - O agente não está em execução por isso não é possível remover a identidade. + O agente não está em execução e não é possível remover a identidade. No agent running, cannot list identities. - O agente não está em execução por isso não é possível listar as identidades. - - - Failed to remove all SSH identities from agent. - Falha ao remover todas as identidades SSH do agente. - - - All SSH identities removed from agent. - Todas as identidades SSH foram removidas do agente. + Nenhum agente em execução, não é possível listar as identidades. SearchHelpWidget Search Help - Ajuda sobre pesquisas + Pesquisar na ajuda Search terms are as follows: [modifiers][field:]["]term["] @@ -9886,16 +8486,12 @@ Esta opção está obsoleta, em vez disso use --set-key-file. Search Help - Ajuda sobre pesquisas - - - Save Search - Guardar pesquisa + Pesquisar na ajuda Search (%1)… Search placeholder text, %1 is the keyboard shortcut - Pesquisar (%1)… + Pesquisar (%1)... Case sensitive @@ -9905,6 +8501,10 @@ Esta opção está obsoleta, em vez disso use --set-key-file. Limit search to selected group Limitar pesquisa ao grupo selecionado + + Save Search + Guardar pesquisa + SettingsClientModel @@ -9966,10 +8566,30 @@ Esta opção está obsoleta, em vez disso use --set-key-file. Confirm when passwords are retrieved by clients Confirmar quando as palavras-passe forem obtidas pelos clientes + + <html><head/><body><p><span style=" + font-family:'-apple-system','BlinkMacSystemFont','Segoe UI','Helvetica','Arial','sans-serif','Apple Color + Emoji','Segoe UI Emoji'; font-size:14px; color:#24292e; background-color:#ffffff;">This setting does + not override disabling recycle bin prompts</span></p></body></html> + + <html><head/><body><p>Esta definição não substitui a desativação das perguntas relativas à Reciclagem<span style=" + font-family:'-apple-system','BlinkMacSystemFont','Segoe UI','Helvetica','Arial','sans-serif','Apple Color + Emoji','Segoe UI Emoji'; font-size:14px; color:#24292e; background-color:#ffffff;"></p></body></html> + Confirm when clients request entry deletion Confirmar quando os clientes solicitam uma remoção + + <html><head/><body><p>This improves compatibility with certain applications + which search for password without unlocking the database first.</p><p>But enabling this may also + crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a + different value set in applications.)</p></body></html> + + <html><head/><body><p>Melhora a compatibilidade com aplicações que procuram por palavras-passe, mas sem desbloquear a base de dados.</p><p> +Mas esta ativação também pode implicar o encerramento da aplicação se a base de dados não puder ser desbloqueada dentro do tempo limite (normalmente 25 seg., embora possa ser definido outro tempo limite em algumas aplicações).</p></body></html> + + Prompt to unlock database before searching Pedir desbloqueio da base de dados antes de pesquisar @@ -9992,15 +8612,7 @@ Esta opção está obsoleta, em vez disso use --set-key-file. Save current changes to activate the plugin and enable editing of this section. - Guarde as alterações atuais para ativar o plugin e permitir a edição desta secção - - - <html><head/><body><p>This setting does not override disabling recycle bin prompts </p></body></html> - <html><head/><body><p>Esta definição não substitui a desativação dos avisos de esvaziar a reciclagem </p></body></html> - - - <html><head/><body><p>This improves compatibility with certain applications which search for password without unlocking the database first.</p><p>But enabling this may also crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a different value set in applications.) </p></body></html> - <html><head/><body><p>Isso melhora a compatibilidade com certas aplicações que procuram a palavra-passe sem desbloquear a base de dados primeiro.</p><p>Mas ativar isso também pode travar o cliente se a base de dados não puder ser desbloqueada dentro de um determinado tempo limite. (Normalmente 25s, mas pode ser um valor diferente definido em aplicações.) </p></body></html> + Guarde as alterações atuais para ativar o plugin e permitir a edição desta secção. @@ -10062,7 +8674,7 @@ Esta opção está obsoleta, em vez disso use --set-key-file. ShareExport Could not write export container. - Não foi possível gravar o contentor + Não foi possível gravar o contentor. @@ -10109,14 +8721,6 @@ Esta opção está obsoleta, em vez disso use --set-key-file. TagModel - - Clear Search - Limpar pesquisa - - - All Entries - Todas as entradas - Expired Caducada @@ -10125,6 +8729,14 @@ Esta opção está obsoleta, em vez disso use --set-key-file. Weak Passwords Palavras-passe fracas + + All Entries + Todas as entradas + + + Clear Search + Limpar pesquisa + TagView @@ -10169,15 +8781,15 @@ Esta opção está obsoleta, em vez disso use --set-key-file. 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 + 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 + Ocorreu um erro ao criar o código QR. Closing in %1 seconds. - A fechar dentro de %1 segundos + A fechar dentro de %1 segundos. @@ -10272,7 +8884,7 @@ Example: JBSWY3DPEHPK3PXP Checking for updates… - A procurar atualizações… + A procurar atualizações... Close @@ -10292,7 +8904,7 @@ Example: JBSWY3DPEHPK3PXP You have the latest version of KeePassXC - A sua versão KeePassXC é a mais recente + A sua versão KeePassXC é a mais recente. @@ -10301,6 +8913,26 @@ Example: JBSWY3DPEHPK3PXP 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 de KeePass 1 + + + Import from 1Password + Importar de 1Password + + + Import from CSV + Importar de ficheiro CSV + Recent databases Bases de dados recentes @@ -10313,18 +8945,6 @@ Example: JBSWY3DPEHPK3PXP Welcome to KeePassXC %1 Bem-vindo ao KeePassXC %1 - - Create Database - Criar base de dados - - - Open Database - Abrir base de dados - - - Import File - Importar ficheiro: - WinUtils @@ -10341,8 +8961,31 @@ Example: JBSWY3DPEHPK3PXP Não foi possível definir o atalho global + + WindowsHello + + Failed to init KeePassXC crypto. + Não foi possível iniciar a criptografia KeePassXC + + + Failed to encrypt key data. + Não foi possível cifrar os dados da chave + + + Failed to get Windows Hello credential. + Não foi possível obter a credencial Windows Hello + + + Failed to decrypt key data. + Não foi possível decifrar os dados da chave + + YubiKey + + %1 No interface, slot %2 + %1 sem interface, ranhura %2 + General: Geral: @@ -10354,17 +8997,25 @@ Example: JBSWY3DPEHPK3PXP YubiKeyEditWidget + + Refresh hardware tokens + Recarregar 'tokens' do dispositivo + + + Refresh + Recarregar + Hardware key slot selection - Seleção de 'slot' para a chave de hardware + Seleção de ranhura para o dispositivo de segurança Could not find any hardware keys! - Não foram encontradas chaves de hardware! + Não foram encontrados dispositivos de segurança! Selected hardware key slot does not support challenge-response! - A chave de hardware selecionada não tem suporte a pergunta de segurança! + O dispositivo selecionado não tem suporte a pergunta de segurança! Challenge-Response @@ -10386,32 +9037,39 @@ Example: JBSWY3DPEHPK3PXP Challenge-Response set, click to change or remove Pregunta de segurança definida. Clique para alterar ou remover. + + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + <p>Se tiver um <a href="https://www.yubico.com/">YubiKey</a> ou <a href="https://onlykey.io">Only Key</a>, pode utilizá-lo para mais segurança.</p><p>A chave requer que uma das suas ranhuras seja programada como <a href="https://www.yubico.com/products/services-software/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + Detecting hardware keys… - A detetar chaves de hardware… + A detetar dispositivos de segurança... No hardware keys detected - Não foram detetadas chaves de hardware + Não foram detetados dispositivos de segurança + + + YubiKeyInterface - Refresh hardware keys - Recarregar chaves de hardware - - - <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed with <a href="https://keepassxc.org/docs/#faq-yubikey-howto">Challenge-Response</a>.</p> - <p>Se tiver uma <a href="https://www.yubico.com/">YubiKey</a> ou <a href="https://onlykey.io">Only Key</a>, pode utilizar para manter uma segurança adicional.</p><p>A chave requer que uma das suas ranhuras seja programada como <a href="https://keepassxc.org/docs/#faq-yubikey-howto">Challenge-Response</a>.</p> - - - Hardware keys found, but no slots are configured - A chave física foi encontrada mas não está configurada. + %1 Invalid slot specified - %2 + %1 Especificou uma ranhura inválida - %2 YubiKeyInterfacePCSC + + (PCSC) %1 [%2] Challenge-Response - Slot %3 + (PCSC) %1 [%2] Pergunta de segurança - Ranhura %3 + The YubiKey PCSC interface has not been initialized. - A interface YubiKey PCSC não foi inicializada + A interface YubiKey PCSC não foi inicializada. + + + Hardware key is currently in use. + O dispositivo de segurança está a ser utilizado. Could not find or access hardware key with serial number %1. Please present it to continue. @@ -10423,26 +9081,11 @@ Example: JBSWY3DPEHPK3PXP Hardware key was not found or is not configured. - A chave física não foi encontrada ou não está configurada + A chave física não foi encontrada ou não está configurada. Failed to complete a challenge-response, the PCSC error code was: %1 - Erro ao tentar concluir a pergunta de segurança. O código de erro PSCSC foi: %1 - - - (NFC) %1 [%2] - Slot %3, %4 - YubiKey display fields - (NFC) %1 [%2] - Ranhura %3, %4 - - - Press - USB Challenge-Response Key interaction request - Prima - - - Passive - USB Challenge-Response Key no interaction required - Passiva + Erro ao tentar concluir a pergunta de segurança. O código de erro PSCSC foi: %1. @@ -10451,6 +9094,14 @@ Example: JBSWY3DPEHPK3PXP Unknown Desconhecido + + (USB) %1 [%2] Configured Slot - %3 + (USB) %1 [%2] Ranhura configurada - %3 + + + (USB) %1 [%2] Challenge-Response - Slot %3 - %4 + (USB) %1 [%2] Pergunta de segurança - Ranhura %3 - %4 + Press USB Challenge-Response Key interaction request @@ -10463,7 +9114,11 @@ Example: JBSWY3DPEHPK3PXP The YubiKey USB interface has not been initialized. - A interface YubiKey USB não foi inicializada + A interface YubiKey USB não foi inicializada. + + + Hardware key is currently in use. + O dispositivo de segurança está a ser utilizado. Could not find hardware key with serial number %1. Please plug it in to continue. @@ -10471,7 +9126,7 @@ Example: JBSWY3DPEHPK3PXP Hardware key timed out waiting for user interaction. - Tempo limite excedido ou à espera de interação do utilizador + Tempo limite excedido ou à espera de interação do utilizador. A USB error occurred when accessing the hardware key: %1 @@ -10479,17 +9134,7 @@ Example: JBSWY3DPEHPK3PXP Failed to complete a challenge-response, the specific error was: %1 - Erro ao tentar concluir a pergunta de segurança. O erro foi: %1 - - - %1 [%2] - Slot %3 - YubiKey NEO display fields - %1 [%2] - Ranhura %3 - - - %1 [%2] - Slot %3, %4 - YubiKey display fields - %1 [%2] - Ranhura %3, %4 + Erro ao tentar concluir a pergunta de segurança. O erro foi: %1. \ No newline at end of file diff --git a/share/translations/keepassxc_ro.ts b/share/translations/keepassxc_ro.ts index b9744cb6e..60dcd8146 100644 --- a/share/translations/keepassxc_ro.ts +++ b/share/translations/keepassxc_ro.ts @@ -58,8 +58,7 @@ <html><head/><body><p><span style=" font-weight:600;">%1 </span>is requesting access to the following entries:</p></body></html> - <html><head/><body><p><span style=" font-weight:600;">%1 </span>solicită acces la următoarele intrări: -</p></body></html> + Name @@ -79,34 +78,34 @@ Details - Detalii - - - Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. - Decizia dvs. va fi reținută pe toată durata în care rulează atât clientul solicitant cât și KeePassXC. + Remember - Reține + Allow Selected - Permiteți selectate + + + + Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. + Deny All && Future - Refuză toate && în viitor + Allow All && &Future - Permite toate && &în viitor + AccessControlDialog::DenyButton Deny for this program - Refuză pentru acest program + @@ -123,10 +122,6 @@ Use OpenSSH - - Use both agents - - SSH_AUTH_SOCK override @@ -155,6 +150,10 @@ SSH Agent connection is working! + + Use both agents + + ApplicationSettingsWidget @@ -170,10 +169,6 @@ Security Securitate - - This setting cannot be enabled when minimize on unlock is enabled. - Această setare nu poate fi activată atunci când este activată funcția de minimizare la deblocare. - Access error for config file %1 Eroare de acces pentru fisier de configurare %1 @@ -204,62 +199,34 @@ Monochrome (light) - Monochrome (luminos) + Monochrome (dark) - Monochrome (întunecat) + Colorful - Colorată + You must restart the application to set the new language. Would you like to restart now? - Trebuie să reporniți aplicația pentru a seta noua limbă. Doriți să reporniți acum? + + + + Reset Settings? + Resetare Setări? + + + Are you sure you want to reset all general and security settings to default? + Sigur resetați în mod implicit toate setările generale și de securitate ? Select backup storage directory - Selectați directorul de stocare de backup - - - Confirm Reset - Are you sure you want to reset all settings to default? - - - - Import KeePassXC Settings - - - - Failed to import settings from %1, not a valid settings file. - - - - Export KeePassXC Settings - - - - Small - - - - Normal - - - - Medium - - - - Large - - - - Custom + This setting cannot be enabled when minimize on unlock is enabled. @@ -279,7 +246,7 @@ Automatically launch KeePassXC at system startup - Lansarea automată a KeePassXC la pornirea sistemului + Minimize window at application startup @@ -293,10 +260,6 @@ Remember previously used databases Retine bazele de date utilizate anterior - - recent files - fișiere recente - Load previously open databases on startup la pornirea incărcarea bazelor de date deschise anterior @@ -313,6 +276,25 @@ Include beta releases when checking for updates Includere versiuni beta la verificarea actualizărilor + + On database unlock, show entries that + + + + have expired + On database unlock, show entries that... + + + + days + On database unlock, show entries that will expire within %1 days + + + + will expire within + On database unlock, show entries that... + + File Management Gestionare fișiere @@ -323,11 +305,11 @@ Automatically save when locking database - Salvare automată la blocarea bazei de date + Automatically save non-data changes when locking database - Salvare automată a modificărilor fără date atunci când se blochează baza de date + Automatically reload the database when modified externally @@ -337,21 +319,33 @@ Backup database file before saving Fă copie de rezervă fișierului bazei de date înainte de salvare + + Backup destination + + + + Specifies the database backup file location. Occurrences of "{DB_FILENAME}" are replaced with the filename of the saved database without extension. {TIME:<format>} is replaced with the backup time, see https://doc.qt.io/qt-5/qdatetime.html#toString. <format> defaults to format string "dd_MM_yyyy_hh-mm-ss". + + {DB_FILENAME}.old.kdbx + + Choose... + + Use alternative saving method (may solve problems with Dropbox, Google Drive, GVFS, etc.) Temporary file moved into place - Fișierul temporar a fost mutat la locul său + Directly write to database file (dangerous) - Scrierea directă în fișierul bazei de date (periculos) + Entry Management @@ -392,7 +386,7 @@ User Interface - Interfața cu utilizatorul + Toolbar button style @@ -416,15 +410,11 @@ Toolbar button style: - Stilul butonului din bara de instrumente: - - - Show passwords in color - Afișați parolele în culori + Use monospaced font for notes - Utilizați un font monospațiat pentru note + Minimize instead of app exit @@ -436,11 +426,11 @@ Tray icon type - Tipul de pictogramă din tavă + Tray icon type: - Tipul de pictogramă din tavă: + Hide window to system tray when minimized @@ -448,43 +438,43 @@ Reset settings to default… - Resetați setările la valorile implicite... + Auto-Type - Auto-tastare + Auto tiparire Use entry title to match windows for global Auto-Type - Utilizează titlul înregistrării pentru a se potrivi cu ferestrele pentru auto-tastare globală + Utilizarea titlului inregistrarii pentru a se potrivi cu ferestrele pentru auto-tiparire globala Use entry URL to match windows for global Auto-Type - Utilizează URL-ul din înregistrare pentru a se potrivi cu ferestrele pentru auto-tastare globală + Utilizați URL-ul din inregistrare pentru a se potrivi Windows pentru autotiparire globala Always ask before performing Auto-Type - Întreabă întotdeauna înainte de a efectua auto-tastare + Întrebați întotdeauna înainte de a efectua auto-tiparire Hide expired entries from Auto-Type - Ascunde din auto-tastare înregistrările expirate + Re-lock previously locked database after performing Auto-Type - Încuie din nou baza de dată blocată anterior după efectuarea auto-tastării + Re-Lock bazei de date blocate anterior după efectuarea auto-Type Auto-Type start delay: - Întârziere la pornire pentru auto-tastare: + Global Auto-Type shortcut: - Scurtătură globală pentru auto-tastare: + Auto-type start delay milliseconds - Milisecunde de întârziere la pornire pentru auto-tastare + Auto-tip de pornire întârziere milisecunde ms @@ -493,83 +483,26 @@ Auto-Type typing delay: - Întârziere la tastare pentru auto-tastare: + Global auto-type shortcut - Scurtătură globală pentru auto-tastare + Comandă rapidă de tip auto global Auto-type character typing delay milliseconds - Milisecunde de întârziere la auto-tastare de caracter + Tipul de auto-tastare întârziere milisecunde Remember last typed entry for: - Țineți minte ultima intrare introdusă pentru: - - - On database unlock, show entries that will expire within - On database unlock, show entries that will expire within + recent files - days - number of days warning for password expiration - zile - - - Destination format: - - - - <html><head/><body><p><span style=" font-weight:600;">{DB_FILENAME}</span> is replaced with the filename of the saved database without extension</p><p><span style=" font-weight:600;">{TIME:&lt;format&gt;}</span> is replaced with the specified time format (default: dd_MM_yyyy_hh-mm-ss)</p><p>See the User Guide for more details</p></body></html> - - - - Choose folder... - - - - Show confirmation before moving entries to recycle bin - - - - Copy data on double clicking field in entry view - - - - Show toolbar - - - - Show the menu bar by pressing the Alt key - - - - Show menubar - - - - Import settings… - - - - Export settings… - - - - Open browser on double clicking URL field in entry view - - - - Font size: - - - - Font size selection + Show passwords in color @@ -615,7 +548,7 @@ Enable database quick unlock (Touch ID / Windows Hello) - Activați deblocarea rapidă a bazei de date (Touch ID / Windows Hello) + Lock databases when session is locked or lid is closed @@ -625,18 +558,34 @@ Lock databases after minimizing the window Blocarea bazelor de date după Minimizarea ferestrei + + Require password repeat when it is visible + + Hide passwords when editing them - Ascundeți parolele atunci când le editați + Use placeholder for empty password fields - Utilizați un marcaj pentru câmpurile de parolă goale + Hide passwords in the entry preview panel Ascunderea parolelor în panoul de previzualizare inregistrarii + + Hide entry notes by default + Ascundere implicită notei inregistrarii + + + Move entries to recycle bin without confirmation + + + + Enable double click to copy the username/password entry columns + + Privacy Confidențialitate @@ -647,18 +596,6 @@ Hide TOTP in the entry preview panel - Ascundeți TOTP în panoul de previzualizare a intrării - - - Lock databases when switching user - - - - Lock Options - - - - Hide notes in the entry preview panel @@ -666,11 +603,11 @@ AutoType The requested Auto-Type sequence cannot be used due to an error: - Secvența de auto-tastare cerută nu poate fi folosită din cauza unei erori: + Auto-Type Error - Eroare de auto-tastare + Permission Required @@ -682,11 +619,11 @@ KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. - KeePassXC necesită permisiunile de accesibilitate și înregistrare de ecran pentru a efectua auto-tastare la nivel global. Înregistrarea ecranului este necesară pentru a folosi titlul ferestrelor pentru a găsi înregistrări. Dacă ați acordat deja permisiunea, poate fi nevoie să reporniți KeePassXC. + Invalid entry provided - Intrare invalidă furnizată + Bracket imbalance detected, found extra { or } @@ -705,13 +642,26 @@ - Entry does not have attribute for PICKCHARS: %1 + Invalid conversion type: %1 + + + + Invalid conversion syntax: %1 + + + + Invalid regular expression syntax %1 +%2 Invalid placeholder: %1 + + Entry does not have attribute for PICKCHARS: %1 + + AutoTypeAssociationsModel @@ -753,9 +703,13 @@ AutoTypePlatformX11 + + Trying to send invalid keysym. + + Sequence aborted: Caps Lock is on - Secvență anulată: Caps Lock este activat + Sequence aborted: Modifier keys held by user @@ -765,20 +719,16 @@ Unable to get valid keycode for key: - - Trying to send invalid keyboard symbol. - - AutoTypeSelectDialog Auto-Type - KeePassXC - Auto-tastare - KeePassXC + Auto-tip-KeePassXC Double click a row to perform Auto-Type or find an entry using the search: - Dați dublu clic pe un rând pentru a efectua auto-tastare sau pentru a găsi o înregistrare folosind căutarea: + <p>You can use advanced search queries to find any entry in your open databases. The following shortcuts are useful:<br/> @@ -787,20 +737,15 @@ Ctrl+1 - Type username<br/> Ctrl+2 - Type password<br/> Ctrl+3 - Type TOTP<br/> Ctrl+4 - Use Virtual Keyboard (Windows Only)</p> - Puteți utiliza interogări de căutare avansate pentru a găsi orice intrare în bazele de date deschise. Următoarele scurtături sunt utile: -Ctrl+F - Comutarea căutării în baza de date -Ctrl+1 - Introduceți numele de utilizator -Ctrl+2 - Introduceți parola -Ctrl+3 - Introduceți TOTP -Ctrl+4 - Folosiți tastatura virtuală (numai pentru Windows) + Search all open databases - Căutați în toate bazele de date deschise + Search… - Căutare... + Type Sequence @@ -824,15 +769,15 @@ Ctrl+4 - Folosiți tastatura virtuală (numai pentru Windows) Copy Username - Copiați numele de utilizator + Copy Password - Copiați parola + Copy TOTP - Copiați TOTP + Use Virtual Keyboard @@ -843,43 +788,43 @@ Ctrl+4 - Folosiți tastatura virtuală (numai pentru Windows) BrowserAccessControlDialog KeePassXC - Browser Access Request - KeePassXC - Solicitare de acces la browser + %1 is requesting access to the following entries: - %1 solicită acces la următoarele intrări: + Remember access to checked entries - Rețineți accesul la intrările verificate + Remember - Reține + Allow access to entries - Permiteți accesul la intrări + Allow Selected - Permiteți selectate + Deny All - Refuză toate + Disable for this site - Dezactivați pentru acest site - - - Undo BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + KeePassXC-browser-ul salvare inregistrarii + Ok Ok @@ -894,75 +839,13 @@ Please select the correct database for saving credentials. Aveți mai multe baze de date deschise. Selectați baza de date corectă pentru salvarea acreditărilor. - - KeePassXC - Select Database - KeePassXC - Selectați baza de date - - - - BrowserPasskeysConfirmationDialog - - Cancel - Anulare - - - Update - - - - Authenticate - - - - Register new - Înregistrare nouă - - - Register - - - - Timeout in <b>%n</b> seconds... - - - - Relying Party: %1 - - - - Username: %1 - - - - KeePassXC - Passkey credentials - KeePassXC - Cheie de acces pentru acreditări - - - Add to existing entry - - - - Existing passkey found. -Do you want to register a new passkey for: - S-a găsit o cheie de acces existentă. -Doriți să înregistrați o nouă cheie de acces pentru: - - - - Select the existing passkey and press Update to replace it. - Selectați cheia de acces existentă și apăsați Actualizare pentru a o înlocui. - - - Authenticate passkey credentials for: - Autentificați acreditările cu cheie de acces pentru: - - - Do you want to register a passkey for: - Doriți să înregistrați o cheie de acces pentru: - BrowserService + + KeePassXC: Create a new group + KeePassXC: crearea unui grup nou + A request for creating a new group "%1" has been received. Do you want to create this group? @@ -970,6 +853,10 @@ Do you want to create this group? S-a primit o solicitare de creare a unui grup nou "%1". Doriți să creați acest grup? + + KeePassXC: New key association request + KeePassXC: noua cerere de asociere cheie + You have received an association request for the following database: %1 @@ -986,75 +873,79 @@ chrome-laptop. Save and allow access Salvează și permite acces + + KeePassXC: Overwrite existing key? + KeePassXC: Suprascriere cheie existentă? + A shared encryption key with the name "%1" already exists. Do you want to overwrite it? Există deja o cheie de criptare partajată cu numele "%1" . Doriți să o suprascrieți? + + KeePassXC: Update Entry + KeePassXC: actualizare intrare + Do you want to update the information in %1 - %2? Actualizați informațiile în %1 - %2 ? + + KeePassXC: Delete entry + + A request for deleting entry "%1" has been received. Do you want to delete the entry? - A fost primită o cerere de ștergere a intrării "%1". -Doriți să ștergeți această intrare? - - - %1 (Passkey) - %1 (Cheie de acces) - - - KeePassXC - Create a new group - KeePassXC - Creare grup nou - - - Disable - Dezactivează - - - KeePassXC - Overwrite existing key? - KeePassXC - Update Entry - + Converting attributes to custom data… + Conversia atributelor in date particularizate... - KeePassXC - Delete entry - KeePassXC - Ștergeți intrarea + Abort + Anulează - KeePassXC - New key association request - KeePassXC - Solicitare nouă de asociere chei + KeePassXC: Converted KeePassHTTP attributes + KeePassXC: conversia atributelor KeePassHTTP - Passkey - Cheie de acces + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + Atributele convertite cu succes din %1 intrare (i). +S-au mutat %2 chei la date particularizate. + + + Successfully moved %n keys to custom data. + S-au mutat cu succes% n chei la date particularizate.S-au mutat cu succes% n chei la date particularizate.S-au mutat cu succes %n chei la date particularizate. - KeePassXC - Passkey credentials - KeePassXC - Cheie de acces pentru acreditări + KeePassXC: No entry with KeePassHTTP attributes found! + KeePassXC: n-a fost găsita nici o intrare cu KeePassHTTP atribute ! - Register a new passkey to this entry: - Înregistrați o nouă cheie de acces pentru această intrare: + The active database does not contain an entry with KeePassHTTP attributes. + Baza de date activă nu conține nici o intrare cu atributele KeePassHTTP. - KeePassXC - Update passkey - KeePassXC - Actualizare cheie de acces + Don't show this warning again + Nu mai afișa acest avertisment - Entry already has a passkey. -Do you want to overwrite the passkey in %1 - %2? - + KeePassXC: Legacy browser integration settings detected + KeePassXC: Au fost detectate setările moștenite de integrare a browserului - Register - + 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? + Setările KeePassXC-browser trebuie mutate în setările bazei de date. +Acest lucru este necesar pentru a menține conexiunile browser-ului curent. +Migrați acum setările existente? @@ -1075,6 +966,10 @@ Do you want to overwrite the passkey in %1 - %2? General General + + Browsers installed as snaps are currently not supported. + Browserele instalate ca snaps nu sunt acceptate momentan. + Enable integration for these browsers: Activați integrarea pentru aceste browsere: @@ -1110,11 +1005,11 @@ Do you want to overwrite the passkey in %1 - %2? Show a notification when credentials are requested Credentials mean login data requested via browser extension - Afișează o notificare atunci când sunt solicitate acreditări + Request to unlock the database if it is locked - Cerere de deblocare a bazei de date în cazul în care aceasta este blocată + Only entries with the same scheme (http://, https://, …) are returned. @@ -1147,7 +1042,7 @@ Do you want to overwrite the passkey in %1 - %2? Search in all opened databases for matching credentials Credentials mean login data requested via browser extension - Căutați în toate bazele de date deschise pentru acreditările corespunzătoare + Advanced @@ -1212,7 +1107,7 @@ Do you want to overwrite the passkey in %1 - %2? Browse… Button for opening file dialog - Răsfoiți... + Use a custom browser configuration location: @@ -1246,6 +1141,26 @@ Do you want to overwrite the passkey in %1 - %2? Custom extension ID + + Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 + Datorită snap sandboxing, trebuie să executați un script pentru a activa integrarea browser-ului.<br>Puteți obține acest script de la % 1 + + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 + + + + Please see special instructions for browser extension use below + Vă rugăm să consultați instrucțiunile speciale pentru utilizarea extensiei browserului de mai jos + + + <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. + + + + <b>Warning:</b> The following options can be dangerous! + <b>Avertizare:</b> Următoarele opțiuni pot fi periculoase! + Executable Files Fișiere executabile @@ -1262,52 +1177,12 @@ Do you want to overwrite the passkey in %1 - %2? Select native messaging host folder location - - Allow keepassxc-proxy to list all entries with their title, URL and UUID in connected databases. - - - - Allow limited access to all entries in connected databases (ignores site access restrictions) - - - - <b>Warning:</b> Only adjust these settings if necessary. - - - - The custom proxy location does not exist. - - - - <b>Error:</b> The custom proxy location does not exist. Correct this in the advanced settings tab. - - - - <b>Error:</b> The installed proxy executable is missing from the expected location: %1<br/>Please set a custom proxy location in the advanced settings or reinstall the application. - - - - Allows using insecure http://localhost with passkeys for testing purposes. - - - - Allow using localhost with passkeys - - - - KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. - - - - Browsers installed using Snap or Flatpak are not supported with exception to Firefox installed using Snap. - - CloneDialog Clone Entry Options - Opțiuni de intrare pentru clonare + Append ' - Clone' to title @@ -1324,6 +1199,14 @@ Do you want to overwrite the passkey in %1 - %2? CsvImportWidget + + Import CSV fields + Importă câmpuri CSV + + + filename + nume fișier + size, rows, columns dimensiune, rânduri, coloane @@ -1432,42 +1315,50 @@ Do you want to overwrite the passkey in %1 - %2? Column %1 + + Imported from CSV file + Importat din fișier CSV + + + Original data: + Datele originale: + + + Error(s) detected in CSV file! + Eroare (i) detectată în fișierul CSV! + [%n more message(s) skipped] [% n mai mult mesaj (e) ignorate][% n mai mult mesaj (e) ignorate][%n mai mult mesaj (e) ignorate] - Failed to parse CSV file: %1 - + Error + Eroare - Imported from CSV file: %1 - Importat dintr-un fișier CSV: %1 - - - No Title Selected - - - - No title column was selected, entries will be hard to tell apart. -Are you sure you want to import? - - - - Tags - Etichete + CSV import: writer has errors: +%1 + Import CSV: scriitor are erori: +%1 CsvParserModel + + %1, %2, %3 + file info: bytes, rows, columns + %1, %2, %3 + + + %n byte(s) + % n byte (e)% n byte (e)%n byte (e) + %n row(s) - CSV row count % n rând (e)% n rând (e)%n rând (uri) %n column(s) - CSV column count % n coloană (e)% n coloană (e)%n coloană (e) @@ -1496,11 +1387,11 @@ Are you sure you want to import? Database save is already in progress. - Salvarea bazei de date este deja în curs de desfășurare. + Could not save, database has not been initialized! - Nu s-a putut salva, baza de date nu a fost inițializată! + Database file has unmerged changes. @@ -1514,20 +1405,12 @@ Baza de date de rezervă localizată la %2 Key not transformed. This is a bug, please report it to the developers. - Cheia nu a fost transformată. Aceasta este o eroare, vă rugăm să o raportați dezvoltatorilor. + Recycle Bin Coș de gunoi - - Database file read error. - - - - No file path was provided. - - DatabaseOpenDialog @@ -1550,13 +1433,33 @@ Baza de date de rezervă localizată la %2 Password field Câmp parola + + Enter Additional Credentials (if any): + Introduceți acreditări suplimentare (dacă există): + + + Key File: + Fișier cheie: + + + Key file help + Ajutor de fișiere cheie + Hardware key slot selection Selectarea sloturilor pentru cheie hardware + + Hardware Key: + Cheie hardware: + + + Hardware key help + Ajutor cheie hardware + Key file to unlock the database - Fișier cheie pentru deblocarea bazei de date + Browse for key file @@ -1564,11 +1467,19 @@ Baza de date de rezervă localizată la %2 Browse… - Răsfoiți... + + + + Refresh hardware tokens + Actualizați jetoane hardware + + + Refresh + Actualizează Unlock Database - Deblocare bază de date + Cancel @@ -1576,7 +1487,7 @@ Baza de date de rezervă localizată la %2 Unlock - Deblocare + Please present or touch your YubiKey to continue… @@ -1584,7 +1495,7 @@ Baza de date de rezervă localizată la %2 Database Version Mismatch - Nepotrivire de versiune a bazei de date + The database you are trying to open was most likely @@ -1594,21 +1505,15 @@ You can try to open it anyway, but it may be incomplete and saving any changes may incur data loss. We recommend you update your KeePassXC installation. - Baza de date pe care încercați să o deschideți a fost cel mai probabil -creată de o versiune mai nouă a KeePassXC. - -Puteți încerca să o deschideți oricum, dar este posibil să fie incompletă -iar salvarea oricăror modificări poate atrage pierderi de date. - -Vă recomandăm să vă actualizați instalarea KeePassXC. + Open database anyway - Deschideți oricum baza de date + Database unlock canceled. - Deblocarea bazei de date a fost anulată. + Unlock failed and no password given @@ -1628,6 +1533,10 @@ Pentru a preveni apariția acestei erori, trebuie să accesați „Setări baza Retry with empty password Încercați din nou cu parola goală + + Failed to authenticate with Touch ID + + Failed to open key file: %1 Nu a putut fi deschis fișierul cheii: %1 @@ -1660,68 +1569,39 @@ Pentru a preveni apariția acestei erori, trebuie să accesați „Setări baza Cannot use database file as key file Nu se poate utiliza fișierul bazei de date ca fișier cheie + + You cannot use your database file as a key file. +If you do not have a key file, please leave the field empty. + Nu puteți utiliza fișierul dvs. de bază de date ca fișier cheie. +Dacă nu aveți un fișier cheie, lăsați câmpul gol. + + + Detecting hardware keys… + + + + No hardware keys detected + + + + Select hardware key… + + + + <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information…</p> + + + + <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +<p>Click for more information…</p> + + authenticate to access the database - autentificare pentru a accesa baza de date - - - Failed to authenticate with Quick Unlock: %1 - Select Key File: - - - - <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!</p> - <p>În plus față de o parolă, puteți utiliza un fișier secret pentru a spori securitatea bazei de date. Acest fișier poate fi generat în setările de securitate ale bazei dvs. de date.</p><p>Acesta<strong> nu este</strong> fișierul dvs. de bază de date *.kdbx!</p> - - - Use hardware key [Serial: %1] - - - - Use hardware key - - - - Your database file is NOT a key file! -If you don't have a key file or don't know what that is, you don't have to select one. - Fișierul bazei dvs. de date NU este un fișier cheie! -Dacă nu aveți un fișier cheie sau nu știți ce este acesta, nu trebuie să selectați unul. - - - KeePassXC database file selected - Fișier bază de date KeePassXC selectat - - - The file you selected looks like a database file. -A database file is NOT a key file! - -Are you sure you want to continue with this file?. - Fișierul pe care l-ați selectat arată ca un fișier de bază de date. -Un fișier de bază de date NU este un fișier cheie! - -Sunteți sigur că doriți să continuați cu acest fișier?. - - - No hardware keys found. - - - - Refresh Hardware Keys - Reîmprospătarea tastelor hardware - - - Click to add a key file. - - - - <a href="#" style="text-decoration: underline">I have a key file</a> - - - - Hardware keys found, but no slots are configured. + Failed to authenticate with Windows Hello: %1 @@ -1734,6 +1614,10 @@ Sunteți sigur că doriți să continuați cu acest fișier?. DatabaseSettingsDialog + + Advanced Settings + Setări avansate + General General @@ -1744,7 +1628,7 @@ Sunteți sigur că doriți să continuați cu acest fișier?. Database Credentials - Credențiale pentru baza de date + Encryption Settings @@ -1758,22 +1642,6 @@ Sunteți sigur că doriți să continuați cu acest fișier?. Maintenance - - KeeShare - De la KeeShare - - - Secret Service Integration - Integrarea serviciilor secrete - - - Remote Sync - - - - Database Settings: %1 - - DatabaseSettingsWidgetBrowser @@ -1781,6 +1649,18 @@ Sunteți sigur că doriți să continuați cu acest fișier?. KeePassXC-Browser settings Setări KeePassXC-Browser + + Convert KeePassHTTP data + + + + Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data + + + + Refresh database root group ID + + Disconnect all browsers Deconectează toate navigatoarele web @@ -1789,10 +1669,6 @@ Sunteți sigur că doriți să continuați cu acest fișier?. Forget all site-specific settings on entries Uita toate setările specifice site-ului pe intrările - - Refresh database root group ID - Împrospătați ID-ul grupului rădăcină al bazei de date - Stored keys Taste memorate @@ -1841,10 +1717,18 @@ This may prevent connection to the browser plugin. Chiar doriți să deconectați toate browserele? Acest lucru poate împiedica conectarea la plugin-ul browser-ului. + + KeePassXC: No keys found + KeePassXC: nu s-au găsit chei + No shared encryption keys found in KeePassXC settings. Nu sunt găsite chei de criptare partajate în setările KeePassXC. + + KeePassXC: Removed keys from database + KeePassXC: cheile sterse din baza de date + Successfully removed %n encryption key(s) from KeePassXC settings. S-a eliminat cu succes% n cheie de criptare din setările KeePassXC.S-a eliminat cu succes% n cheie de criptare din setările KeePassXC.S-a eliminat cu succes %n chei de criptare din setările KeePassXC. @@ -1863,42 +1747,38 @@ Permisiunile de accesare a intrărilor vor fi revocate. Abort Anulează + + KeePassXC: Removed permissions + KeePassXC: permisiuni eliminate + Successfully removed permissions from %n entry(s). Permisiuni eliminate cu succes de la% n intrare (e).Permisiuni eliminate cu succes de la% n intrare (e).Permisiuni eliminate cu succes pentru %n intrare(i). + + KeePassXC: No entry with permissions found! + KeePassXC: nici o intrare cu permisiuni găsit! + The active database does not contain an entry with permissions. Baza de date activă nu conține o intrare cu permisiuni. + + Move KeePassHTTP attributes to custom data + Mutarea atributelor KeePassHTTP la date particularizate + + + Do you really want to convert all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + + Refresh database ID - Actualizați ID-ul bazei de date + Do you really want refresh the database ID? This is only necessary if your database is a copy of another and the browser extension cannot connect. - Chiar doriți să reîmprospătați ID-ul bazei de date? -Acest lucru este necesar doar dacă baza de date este o copie a alteia și extensia browserului nu se poate conecta. - - - Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data - - - - No keys found - - - - Removed keys from database - Chei eliminate din baza de date - - - Removed permissions - - - - No entry with permissions found! @@ -1938,18 +1818,6 @@ Sigur continuați fără parolă? Failed to change database credentials - Nu s-a reușit modificarea credențialelor bazei de date - - - Weak password - - - - This is a weak password! For better protection of your secrets, you should choose a stronger password. - - - - The provided password does not meet the minimum quality requirement. @@ -1959,6 +1827,14 @@ Sigur continuați fără parolă? Decryption Time: Timp de decriptare: + + Change existing decryption time + Modificați timpul de decriptare existent + + + Change + Schimba + Decryption time in seconds Timpul de decriptare în secunde @@ -1981,7 +1857,7 @@ Sigur continuați fără parolă? Unless you need to open your database with other programs, always use the latest format. - Cu excepția cazului în care aveți nevoie să vă deschideți baza de date cu alte programe, utilizați întotdeauna cel mai recent format. + Encryption Algorithm: @@ -2039,6 +1915,11 @@ Sigur continuați fără parolă? KDBX 3 + + unchanged + Database decryption time is unchanged + Neschimbat + Number of rounds too high Key transformation rounds @@ -2048,9 +1929,7 @@ Sigur continuați fără parolă? You are using a very high number of key transform rounds with Argon2. If you keep this number, your database may take hours, days, or even longer to open. - Folosiți un număr foarte mare de runde de transformare a cheilor cu Argon2. - -Dacă păstrați acest număr, este posibil ca deschiderea bazei dvs. de date să dureze ore, zile sau chiar mai mult. + Understood, keep number @@ -2089,18 +1968,6 @@ If you keep this number, your database will not be protected from brute force at Threads for parallel execution (KDF settings) filet (e)filet (e)thread(s) - - Encryption Settings: - - - - Basic - - - - Advanced - Avansat - DatabaseSettingsWidgetFdoSecrets @@ -2110,7 +1977,7 @@ If you keep this number, your database will not be protected from brute force at Don't expose this database - Nu expuneți această bază de date + Expose entries under this group: @@ -2125,7 +1992,7 @@ If you keep this number, your database will not be protected from brute force at DatabaseSettingsWidgetGeneral Database Metadata - Metadatele bazei de date + Database name: @@ -2220,73 +2087,6 @@ add up to the specified amount at most. instead of deleting them from the database. Entries deleted from the recycle bin are removed from the database. - Mutarea intrărilor într-un grup de coș de gunoi -în loc să le ștergeți din baza de date. -Înregistrările șterse din coșul de gunoi sunt -eliminate din baza de date. - - - Autosave delay since last change - - - - Autosave delay - - - - Autosave delay since last change in minutes - - - - min - Min - - - Autosave delay since last change checkbox - - - - Public Database Metadata - - - - Warning: the following settings are not encrypted. - - - - Display name: - - - - Publically visible display name used on the unlock dialog - - - - Database public display name - - - - Display color: - - - - Publically visible color used on the unlock dialog - - - - Database public display color chooser - - - - Clear - Golește - - - Display icon: - - - - Select Database Icon @@ -2330,11 +2130,11 @@ eliminate din baza de date. Delete selected icon(s) - Ștergeți pictogramele selectate + Delete all custom icons not in use by any entry or group - Ștergeți toate pictogramele personalizate care nu sunt utilizate de nicio intrare sau grup + Purge unused icons @@ -2346,7 +2146,7 @@ eliminate din baza de date. At least one of the selected icons is currently in use by at least one entry or group. The icons of all affected entries and groups will be replaced by the default icon. Are you sure you want to delete icons that are currently in use? - Cel puțin una dintre pictogramele selectate este utilizată în prezent de cel puțin o intrare sau un grup. Pictogramele tuturor intrărilor și grupurilor afectate vor fi înlocuite cu pictograma implicită. Sunteți sigur că doriți să ștergeți pictogramele care sunt utilizate în prezent? + Custom Icons Are In Use @@ -2384,129 +2184,6 @@ eliminate din baza de date. Câmpul descrierii bazei de date - - DatabaseSettingsWidgetRemote - - Sync Commands - - - - Remove - Înlătură - - - Command Settings - - - - Name - Nume - - - Save - Salvează - - - Download - - - - Command: - - - - Download command field - - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - - - - Input: - - - - Download input field - - - - Upload - - - - Upload command field - - - - e.g.: "sftp user@hostname" or "scp {TEMP_DATABASE} user@hostname:DatabaseOnRemote.kdbx" - - - - Upload input field - - - - Name cannot be empty. - - - - Test - - - - Download command cannot be empty. - - - - Download failed with error: %1 - - - - Download finished, but file %1 could not be found. - - - - Download successful. - - - - Save Remote Settings - - - - You have unsaved changes. Do you want to save them? - - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - - - - e.g.: -put {TEMP_DATABASE} DatabaseOnRemote.kdbx -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - - - - Timeout: - - - - seconds - secunde - - DatabaseTabWidget @@ -2539,10 +2216,26 @@ Acest lucru este cu siguranta un bug, vă rugăm să raporteze la dezvoltatori.< CSV file Fișier CSV + + Select CSV file + Selectați fișierul CSV + Merge database Îmbină baza de date + + KeePass 1 database + Bază de date KeePass 1 + + + Open KeePass 1 database + Deschide bază de date KeePass 1 + + + Open OPVault + + Export database to CSV file Exportă baza de date în fișier CSV @@ -2555,6 +2248,28 @@ Acest lucru este cu siguranta un bug, vă rugăm să raporteze la dezvoltatori.< Writing the HTML file failed. Scrierea fișierului HTML a eșuat. + + Export Confirmation + Confirmare la export + + + You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? + Ești pe cale să exporti baza de date într-un fișier necriptat. Acest lucru va lăsa parolele și informațiile dvs. sensibile vulnerabile! Esti sigur ca vrei sa continui? + + + New Database + Bază de date nouă + + + %1 [New Database] + Database tab name modifier + %1 [bază de date nouă] + + + %1 [Locked] + Database tab name modifier + %1 [blocat] + Export database to XML file @@ -2567,34 +2282,12 @@ Acest lucru este cu siguranta un bug, vă rugăm să raporteze la dezvoltatori.< Writing the XML file failed - - Export Confirmation - Confirmare la export - - - You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? - Ești pe cale să exporti baza de date într-un fișier necriptat. Acest lucru va lăsa parolele și informațiile dvs. sensibile vulnerabile! Esti sigur ca vrei sa continui? - - - %1 [Locked] - Database tab name modifier - %1 [blocat] - - - %1 [Temporary] - Database tab name modifier - - DatabaseWidget - - Searches and Tags - Căutări și etichete - Searching… - Se caută... + Shared group… @@ -2602,11 +2295,11 @@ Acest lucru este cu siguranta un bug, vă rugăm să raporteze la dezvoltatori.< Confirm Auto-Type - Confirmă auto-tastarea + Perform Auto-Type into the previously active window? - Efectuează Auto-tastare în fereastra activă anterior? + Execute command? @@ -2638,11 +2331,7 @@ Acest lucru este cu siguranta un bug, vă rugăm să raporteze la dezvoltatori.< Expired entries - Intrări expirate - - - Entries expiring within %1 day(s) - + No current database. @@ -2668,18 +2357,6 @@ Acest lucru este cu siguranta un bug, vă rugăm să raporteze la dezvoltatori.< No Results Nu sunt rezultate - - Save - Salvează - - - Enter a unique name or overwrite an existing search from the list: - - - - Save Search - Salvați căutarea - Lock Database? Blocarea bazei de date? @@ -2708,6 +2385,26 @@ Salvați modificările? 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? + Fișierul bazei de date s-a modificat și aveți modificări nesalvate. +Doriți să îmbinați modificările? + + + Could not open the new database file while attempting to autoreload. +Error: %1 + Imposibil de deschis noul fișier bază de date în timp ce încercați să autoreload. +Eroare: %1 + Disable safe saves? Dezactivați salvarea sigură? @@ -2736,7 +2433,7 @@ Dezactivați salvarea sigură și încercați din nou? Save database backup - Salvare copie de siguranță a bazei de date + Empty recycle bin? @@ -2750,93 +2447,24 @@ Dezactivați salvarea sigură și încercați din nou? Could not find database file: %1 - - New Database - Bază de date nouă + + Entries expiring within %1 day(s) + - %1 [New Database] - Database tab name modifier - %1 [bază de date nouă] - - - Remote Sync did not contain any download or upload commands. + Searches and Tags - Remote sync '%1' completed successfully! + Enter a unique name or overwrite an existing search from the list: - Remote sync '%1' failed: %2 - + Save + Salvează - Error while saving database %1: %2 - - - - Downloading... - Descărcarea... - - - Uploading... - - - - Syncing... - - - - Remove passkey from entry - - - - Do you want to remove the passkey from this entry? - - - - The database file "%1" was modified externally - - - - Do you want to load the changes? - - - - Reload database - - - - Reloading database… - - - - Reload canceled - - - - Reload successful - - - - Reload pending user action… - - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes<br>Ignore the changes on disk until save<br>Discard unsaved changes - - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes then save<br>Overwrite the changes on disk<br>Discard unsaved changes - - - - Database file overwritten. - - - - Database file on disk cannot be unlocked with current credentials.<br>Enter new credentials and/or present hardware key to continue. + Save Search @@ -2856,7 +2484,7 @@ Dezactivați salvarea sigură și încercați din nou? Auto-Type - Auto-tastare + Auto tiparire Browser Integration @@ -2890,6 +2518,10 @@ Dezactivați salvarea sigură și încercați din nou? n/a nu se aplică + + (encrypted) + (criptat) + Select private key Selectați cheia privată @@ -2921,23 +2553,19 @@ Unfortunately, any changes made have been lost. Auto-Type Validation Error - Eroare de validare la Auto-tastare + An error occurred while validating the custom Auto-Type sequence: %1 Would you like to correct it? - A apărut o eroare la validarea secvenței de Auto-tastare personalizare: -%1 -Doriți să o corectați? + An error occurred while validating the Auto-Type sequence for "%1": %2 Would you like to correct it? - A apărut o eroare la validarea secvenței de Auto-tastare pentru "%1": -%2 -Doriți să o corectați? + Entry updated successfully. @@ -2969,16 +2597,12 @@ Doriți să o corectați? [PROTECTED] Press Reveal to view or edit - Apăsați Revelați pentru a vizualiza sau edita + Hide Ascunde - - %n hour(s) - - %n week(s) % n săptămână (i)% n săptămână (i)%n săptămână(i) @@ -2991,9 +2615,9 @@ Doriți să o corectați? %n year(s) % n an (i)% n an (i)%n an(i) - - Failed to decrypt SSH key, ensure password is correct. - + + %n hour(s) + @@ -3060,7 +2684,7 @@ Doriți să o corectați? Exclude from database reports - Excludere din rapoartele bazei de date + Foreground Color: @@ -3083,23 +2707,23 @@ Doriți să o corectați? EditEntryWidgetAutoType Enable Auto-Type for this entry - Activează auto-tastare pentru această înregistrare + Activare tiparire automat pentru această intrare Inherit default Auto-Type sequence from the group - Moștenește secvența implicită de Auto-tastare de la grup + Use custom Auto-Type sequence: - Folosește secvență de Auto-tastare personalizată: + Custom Auto-Type sequence - Secvență personalizată de Auto-tastare + Secvență personalizată Auto-Type Open Auto-Type help webpage - Deschide pagina web de ajutor pentru Auto-tastare + Deschideți pagina web de ajutor Auto-Type Window Associations @@ -3113,20 +2737,10 @@ Doriți să o corectați? Add new window association Adăugați asociere fereastră nouă - - + - Add item - + - Remove selected window association Eliminați asocierea ferestrei selectată - - - - Remove item - - - Window title: Titlu fereastră: @@ -3149,11 +2763,25 @@ Doriți să o corectați? Custom Auto-Type sequence for this window - Secvență personalizată de Auto-tastare pentru această fereastră + Secvență personalizată de tip automat pentru această fereastră + + + + + Add item + + + + + - + Remove item + - EditEntryWidgetBrowser + + These settings affect to the entry's behaviour with the browser extension. + Aceste setări afectează comportamentul intrării cu extensia browserului. + General General @@ -3166,14 +2794,26 @@ Doriți să o corectați? Skip Auto-Submit for this entry Sariți la Trimitere automată pentru această intrare + + Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. + + Use this entry only with HTTP Basic Auth + + Do not send this setting to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. + + Do not use this entry with HTTP Basic Auth + + Additional URL's + Adresa URL suplimentară + Add Adaugă @@ -3186,22 +2826,6 @@ Doriți să o corectați? Edit Editați - - These settings affect the entry's behaviour with the browser extension. - - - - Additional URLs - - - - Only send this entry to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. - - - - Do not send this entry to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. - - EditEntryWidgetHistory @@ -3246,7 +2870,7 @@ Doriți să o corectați? EditEntryWidgetMain Edit Entry - Editați intrarea + Notes field @@ -3294,7 +2918,7 @@ Doriți să o corectați? Tags list - Listă de etichete + &Username: @@ -3367,6 +2991,19 @@ Doriți să o corectați? Private key Cheie privată + + External file + Fișier extern + + + Browser for key file + Browser pentru fișierul cheie + + + Browse… + Button for opening file dialog + + Attachment Atașament @@ -3383,23 +3020,6 @@ Doriți să o corectați? Remove from agent Elimină din agent - - External file - Fișier extern - - - Browser for key file - Browser pentru fișierul cheie - - - Browse… - Button for opening file dialog - Răsfoiți... - - - Generate - Generează - Select attachment file Selectați fișierul de atașament @@ -3424,10 +3044,6 @@ Doriți să o corectați? seconds secunde - - Clear agent - - EditGroupWidget @@ -3439,6 +3055,10 @@ Doriți să o corectați? Icon Icon + + Browser Integration + Integrare cu browserul + Properties Proprietăți @@ -3455,10 +3075,6 @@ Doriți să o corectați? Group has unsaved changes - - Browser Integration - Integrare cu browserul - Enable Activează @@ -3518,14 +3134,6 @@ Doriți să o corectați? Omit WWW subdomain from matching toggle for this and sub groups - - Restrict matching to given browser key: - - - - Restrict matching to given browser key toggle for this and sub groups - - EditGroupWidgetKeeShare @@ -3559,7 +3167,7 @@ Doriți să o corectați? Browse… - Răsfoiți... + Clear fields @@ -3661,15 +3269,15 @@ Extensiile acceptate sunt: %1. Use default Auto-Type sequence of parent group - Folosește secvența implicită de Auto-tastare a grupului părinte + Auto-Type: - Auto-tastare: + Search: - Căutare: + Auto-Type toggle for this and sub groups @@ -3681,7 +3289,7 @@ Extensiile acceptate sunt: %1. Default auto-type sequence field - Câmpul de secvență implicit de auto-tastare + Câmpul de secvență implicit de tip automat Notes field @@ -3693,7 +3301,7 @@ Extensiile acceptate sunt: %1. Set default Auto-Type sequence - Setează secvența implicită de Auto-tastare + Search toggle for this and sub groups @@ -3758,6 +3366,10 @@ Extensiile acceptate sunt: %1. Unable to fetch favicon. Nu pot descărca favicon. + + You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security + Puteți activa serviciul de pictogramă a site-ului web DuckDuckGo în Instrumente -> Setări -> Securitate + Existing icon selected. Pictograma existentă selectată. @@ -3790,10 +3402,6 @@ Extensiile acceptate sunt: %1. The following icon(s) failed: Pictograma (ele) următoare nu a reușit:Pictograma (ele) următoare nu a reușit:Pictograma(e) următoare nu au reușit: - - You can enable the DuckDuckGo website icon service under Application Settings -> Security - - EditWidgetProperties @@ -3870,23 +3478,6 @@ Acest lucru poate provoca moduluri afectate la defecțiune. %1 - Clone %1 - Clona - - Passkey - Cheie de acces - - - Invalid conversion type: %1 - - - - Invalid conversion syntax: %1 - - - - Invalid regular expression syntax %1 -%2 - - EntryAttachments @@ -3895,21 +3486,6 @@ Acest lucru poate provoca moduluri afectate la defecțiune. - - EntryAttachmentsDialog - - Form - Formular - - - File name - - - - File contents... - - - EntryAttachmentsModel @@ -3947,6 +3523,14 @@ Acest lucru poate provoca moduluri afectate la defecțiune. Remove Înlătură + + Rename selected attachment + + + + Rename + + Open selected attachment Deschideți atașamentul selectat @@ -4023,6 +3607,11 @@ Acest lucru poate provoca moduluri afectate la defecțiune. Confirm Overwrite Attachment + + Attachment "%1" already exists. +Would you like to overwrite the existing attachment? + + Confirm Attachment @@ -4041,8 +3630,7 @@ Are you sure to add this file? The attachment '%1' was modified. Do you want to save the changes to your database? - Atașamentul '%1' a fost modificat. -Doriți să salvați modificările în baza de date? + Saving attachment failed @@ -4053,23 +3641,6 @@ Doriți să salvați modificările în baza de date? Error: %1 - - Attachment "%1" already exists. -Would you like to overwrite the existing attachment? - - - - New - - - - Preview - Previzualizare - - - Failed to preview an attachment: Attachment not found - - EntryAttributesModel @@ -4110,7 +3681,7 @@ Would you like to overwrite the existing attachment? Password - Parolă + Parola URL @@ -4150,11 +3721,11 @@ Would you like to overwrite the existing attachment? Auto-Type - Auto-tastare + Auto tiparire Tags - Etichete + @@ -4264,14 +3835,6 @@ Would you like to overwrite the existing attachment? Has TOTP - - Background Color - - - - Group Path - - EntryPreviewWidget @@ -4292,8 +3855,8 @@ Would you like to overwrite the existing attachment? Parola - URL - URL + Notes + Notițe Expiration @@ -4301,19 +3864,19 @@ Would you like to overwrite the existing attachment? Tags - Etichete + Tags list - Listă de etichete + Username Nume utilizator - Notes - Notițe + URL + URL Advanced @@ -4329,7 +3892,7 @@ Would you like to overwrite the existing attachment? Autotype - Auto-tastare + autotipie Default Sequence @@ -4363,10 +3926,6 @@ Would you like to overwrite the existing attachment? Never Niciodată - - Double click to copy value - Dublu clic pentru a copia valoarea - Enabled Activat @@ -4376,8 +3935,8 @@ Would you like to overwrite the existing attachment? Dezactivat - Double click to copy to clipboard - Dublu clic pentru a copia în clipboard + Double click to copy value + @@ -4386,10 +3945,6 @@ Would you like to overwrite the existing attachment? Invalid URL URL invalid - - Duplicate URL - - EntryView @@ -4405,10 +3960,6 @@ Would you like to overwrite the existing attachment? Reset to defaults Resetare la valorile implicite - - + %1 entry(s)... - - ExportDialog @@ -4572,7 +4123,7 @@ This will leave your passwords and sensitive information vulnerable! HibpDownloader Online password validation failed - Validarea parolei online a eșuat + @@ -4605,11 +4156,11 @@ Puteți activa serviciul pictogramelor site-ului web DuckDuckGo în secțiunea d Please wait, processing entry list… - Vă rugăm să așteptați, se procesează lista de intrări... + Downloading… - Se descarcă... + Ok @@ -4625,193 +4176,6 @@ Puteți activa serviciul pictogramelor site-ului web DuckDuckGo în secțiunea d Downloading favicons (%1/%2)… - Se descarcă pictogramele (%1/%2)... - - - - ImportWizard - - Import Wizard - Asistent de import - - - - ImportWizardPageReview - - WizardPage - Pagină de start - - - Entry count: %1 - Numărul de intrări: %1 - - - Group - Grup - - - Title - Titlu - - - Username - Nume utilizator - - - Password - Parolă - - - Url - URL - - - Could not load key file. - - - - Could not open remote database. Password or key file may be incorrect. - - - - - ImportWizardPageSelect - - Form - De la - - - Import File Selection - Selectarea fișierului de import - - - Password: - Parola: - - - Key File: - Fișier cheie: - - - Browse… - Răsfoiți... - - - Import Into: - Importați în: - - - New Database - Bază de date nouă - - - No unlocked databases available - Nu sunt disponibile baze de date deblocate - - - Existing Database: - Bază de date existentă: - - - Import File: - Importați fișierul: - - - Comma Separated Values (.csv) - Valori separate prin virgulă (.csv) - - - 1Password Export (.1pux) - - - - 1Password Vault (.opvault) - - - - Bitwarden (.json) - - - - KeePass 1 Database (.kdb) - - - - Open OPVault - - - - Select import file - Selectați fișierul de import - - - All files - Toate fișierele - - - Key files - Fișiere cheie - - - Select key file - Selectați fișier cheie - - - Comma Separated Values - Valori separate prin virgulă - - - 1Password Export - - - - Bitwarden JSON Export - - - - 1Password Vault - - - - KeePass1 Database - - - - Proton Pass (.json) - - - - Proton Pass JSON Export - - - - Temporary Database - - - - Command: - - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - - - - Input: - - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last commend `exit` has to be sent - - - - - Remote Database (.kdbx) @@ -5088,10 +4452,7 @@ Dacă reîncepe, atunci fișierul dvs. de bază de date poate fi corupt. - Fișierul selectat este o bază de date veche KeePass 1 (.kdb). - -Puteți să o importați făcând clic pe Bază de date > „Import KeePass 1 database...”. -Aceasta este o migrare unidirecțională. Nu veți putea deschide baza de date importată cu vechea versiune KeePassX 0.4. + Not a KeePass database. @@ -5142,7 +4503,7 @@ Linia %2, coloana %3 Invalid EnableAutoType value - Valoare invalidă pentru permiterea auto-tastării + Valoare nevalidă pentru permite AutoTiparire Invalid EnableSearching value @@ -5194,7 +4555,7 @@ Linia %2, coloana %3 Auto-type association window or sequence missing - Lipsește fereastra de asociere sau secvența de auto-tastare + Lipsă de fereastra de asociere de tiparire auto sau secvența Invalid bool value @@ -5249,6 +4610,17 @@ Linia %2, coloana %3 Deschiderea cheii private a eșuat + + KeePass1OpenWidget + + Import KeePass1 Database + Importați baza de date KeePass1 + + + Unable to open the database. + Nu pot deschide baza de date. + + KeePass1Reader @@ -5485,11 +4857,11 @@ Dacă reîncepe, atunci fișierul dvs. de bază de date poate fi corupt. Generate a new key file or choose an existing one to protect your database. - Generați un nou fișier cheie sau alegeți unul existent pentru a vă proteja baza de date. + Note: Do NOT use a file that may change as that will prevent you from unlocking your database. - Notă: NU utilizați un fișier care se poate modifica, deoarece acest lucru vă va împiedica să deblocați baza de date. + Browse for key file @@ -5497,7 +4869,7 @@ Dacă reîncepe, atunci fișierul dvs. de bază de date poate fi corupt. Browse… - Răsfoiți... + Old key file format @@ -5535,7 +4907,7 @@ Mesaj: %2 <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>Puteți adăuga un fișier cheie care conține octeți aleatori pentru o securitate suplimentară.</p><p>Trebuie să îl păstrați secret și să nu îl pierdeți niciodată, altfel veți fi blocat.</p> + Key files @@ -5605,6 +4977,10 @@ Sigur doriți să continuați cu acest fișier? &Recent Databases &Baze de date recente + + &Import + &Import + &Export &Export @@ -5615,20 +4991,16 @@ Sigur doriți să continuați cu acest fișier? &Entries - &Intrări + Copy Att&ribute - Copiați at&ributul + TOTP TOTP - - Tags - Etichete - &Groups &Grupuri @@ -5639,11 +5011,11 @@ Sigur doriți să continuați cu acest fișier? View - Vizualizați + Theme - Temă + &Quit @@ -5673,25 +5045,45 @@ Sigur doriți să continuați cu acest fișier? &New Database… &Bază de date nouă... + + Create a new database + Crearea unei baze de date noi + &Merge From Database… - &Îmbinare din bază de date... + + + + Merge from another KDBX database + Îmbinare dintr-o altă bază de date KDBX &New Entry… - &Intrare nouă... + + + + Add a new entry + Adăugarea unei noi intrări &Edit Entry… - &Editare intrare + + + + View or edit entry + Vizualizarea sau editarea intrării &Delete Entry… - &Ștergeți intrarea... + &New Group… - &Grup nou... + + + + Add a new group + Adăugarea unui grup nou &Edit Group… @@ -5699,11 +5091,11 @@ Sigur doriți să continuați cu acest fișier? &Delete Group… - &Ștergeți grupul... + Download All &Favicons… - Descărcare toate &favicoanele... + Sort &A-Z @@ -5715,39 +5107,63 @@ Sigur doriți să continuați cu acest fișier? Sa&ve Database As… - &Salvare bază de date ca... + Database &Security… - Securitate bază de date... + Database &Reports… - &Rapoarte bază de date... + + + + Statistics, health check, etc. + &Database Settings… Setări bază de &date... + + Database settings + Setări bază de date + &Clone Entry… - &Intrare clonă... + Move u&p + + Move entry one step up + + Move do&wn + + Move entry one step down + + Copy &Username - Copiați &numele de utilizator + + + + Copy username to clipboard + Copiere nume utilizator în Clipboard Copy &Password - Copiați &parola + + + + Copy password to clipboard + Copiere parolă în Clipboard &Settings @@ -5759,11 +5175,11 @@ Sigur doriți să continuați cu acest fișier? Perform &Auto-Type - Efectuează &Auto-tastare + Efectuați și &Auto-Tiparire Download &Favicon - Descărcare &favicon + Open &URL @@ -5771,24 +5187,32 @@ Sigur doriți să continuați cu acest fișier? &Lock Database - &Blocați baza de date + Lock &All Databases - Blocați &toate bazele de date + &Title &Titlu - Copy &URL - Copiați &URL-ul + Copy title to clipboard + Copiere titlu în Clipboard + + + Copy URL to clipboard + Copiere URL în Clipboard &Notes &Notițe + + Copy notes to clipboard + Copierea notelor în Clipboard + &CSV File… @@ -5801,21 +5225,33 @@ Sigur doriți să continuați cu acest fișier? KeePass 1 Database… + + Import a KeePass 1 database + Importul unei baze de date KeePass 1 + 1Password Vault… + + Import a 1Password Vault + Import 1Password Vault + CSV File… Fișier CSV... + + Import a CSV file + Importul unui fișier CSV + Show TOTP - Afișare TOTP + Show QR Code - Afișare cod QR + Set up TOTP… @@ -5825,10 +5261,6 @@ Sigur doriți să continuați cu acest fișier? Copy &TOTP Copiază &TOTP - - Copy Password and TOTP - Copiați parola și TOTP - E&mpty recycle bin coș de r&eciclare gol @@ -5839,7 +5271,7 @@ Sigur doriți să continuați cu acest fișier? Report a &Bug - Raportați o eroare + &Getting Started @@ -5851,7 +5283,11 @@ Sigur doriți să continuați cu acest fișier? &Online Help - &Ajutor online + + + + Go to online documentation + &User Guide @@ -5867,7 +5303,7 @@ Sigur doriți să continuați cu acest fișier? Save Database Backup… - Salvați copia de siguranță a bazei de date... + Add key to SSH Agent @@ -5879,39 +5315,35 @@ Sigur doriți să continuați cu acest fișier? Compact Mode - Modul compact + Automatic - Automată + Light - Deschisă + Dark - Întunecată + Classic (Platform-native) - Clasică (platformă-nativă) - - - Show Menubar - Afișați meniul + Show Toolbar - Afișați bara de instrumente + Show Preview Panel - Afișare panou de previzualizare + Always on Top - Mereu deasupra + Hide Usernames @@ -5923,10 +5355,6 @@ Sigur doriți să continuați cu acest fișier? Clone Group... - Clonează grupul... - - - &XML File… @@ -5939,15 +5367,13 @@ Sigur doriți să continuați cu acest fișier? Don't show again for this version - Nu se afișează din nou pentru această versiune + 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. - AVERTISMENT: Folosiți o versiune instabilă a KeePassXC. -Există un risc ridicat de corupție, păstrați o copie de siguranță a bazelor de date. -Această versiune nu este destinată utilizării în producție. + NOTE: You are using a pre-release version of KeePassXC. @@ -5955,8 +5381,9 @@ Expect some bugs and minor issues, this version is meant for testing purposes. - No Tags - Fără etichete + 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. + Restore Entry(s) @@ -5986,10 +5413,6 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Quit KeePassXC Părăsiți KeePassXC - - %1 Entry(s) - - Please present or touch your YubiKey to continue… @@ -6002,314 +5425,38 @@ Expect some bugs and minor issues, this version is meant for testing purposes.You must restart the application to apply this setting. Would you like to restart now? + + Tags + + + + No Tags + + + + %1 Entry(s) + + + + Copy Password and TOTP + + + + &XML File… + + + + XML File… + + + + Copy &URL + + Allow Screen Capture - - 1Password 1PUX... - - - - Import a 1Password 1PUX file - - - - Import… - - - - Passkeys… - - - - Import Passkey - Importare cheie de acces - - - Remote S&ync… - - - - Quit Application - - - - Open About Dialog - - - - Open Database - Deschideți baza de date - - - Create Database - Creați o bază de date - - - Merge From Database - - - - Create Entry - - - - Edit Entry - Editați intrarea - - - Delete Entry - - - - Create Group - - - - Edit Group - - - - Delete Group - - - - Download All Favicons - - - - Sort Groups A-Z - - - - Sort Groups Z-A - - - - Save Database As - - - - Show Database Security - - - - Show Database Reports - - - - Show Database Settings - - - - Show Passkeys - - - - Clone Entry - - - - Move Entry Up - - - - Move Entry Down - - - - Copy Username - Copiați numele de utilizator - - - Copy Password - Copiați parola - - - Show Application Settings - - - - Show Password Generator - - - - Remove Passkey From Entry - - - - Perform Auto-Type: {USERNAME} - - - - Perform Auto-Type: {USERNAME}{ENTER} - - - - Perform Auto-Type: {PASSWORD} - - - - Perform Auto-Type: {PASSWORD}{ENTER} - - - - Perform Auto-Type: {TOTP} - - - - Copy Title - - - - Copy URL - - - - Copy Notes - - - - Export to CSV - - - - Export to HTML - - - - Import KeePass1 Database - Importați baza de date KeePass1 - - - Import 1Password Vault - - - - Import CSV File - - - - Show TOTP QR Code - - - - Set up TOTP - - - - Empty Recycle Bin - - - - Open Donation Website - - - - Open Bug Report - - - - Open Online Documentation - - - - Open Keyboard Shortcuts Guide - - - - Save Database Backup - - - - SSH Agent: Add Key - - - - SSH Agent: Remove Key - - - - Toggle Compact Mode - - - - Set Theme: Automatic - - - - Set Theme: Light - - - - Set Theme: Dark - - - - Set Theme: Classic - - - - Toggle Show Menubar - Comutați afișare meniu - - - Toggle Show Toolbar - - - - Toggle Show Preview Panel - - - - Toggle Always on Top - - - - Toggle Hide Usernames - - - - Toggle Hide Passwords - - - - Export to XML - - - - Toggle Allow Screen Capture - - - - Show Group Panel - - - - Toggle Show Group Panel - - - - Setup Remote Sync… - - - - Password Generator - Generator de parole - - - E&xpire Entry… - - - - Clear SSH Agent - - - - Clear all identities in ssh-agent - - ManageDatabase @@ -6350,7 +5497,7 @@ Expect some bugs and minor issues, this version is meant for testing purposes. Reset any remembered decisions for this application - Resetează toate deciziile reținute pentru această aplicație + @@ -6367,6 +5514,26 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Overwriting %1 [%2] Suprascrierea %1 [%2] + + older entry merged from database "%1" + intrare mai veche îmbinată din baza de date "%1" + + + Adding backup for older target %1 [%2] + Adăugarea copiei de rezervă pentru ținta mai veche %1 [%2] + + + Adding backup for older source %1 [%2] + Adăugarea copiei de rezervă pentru sursa mai veche %1 [%2] + + + Reapplying older target entry on top of newer source %1 [%2] + Reaplicarea intrării țintă mai vechi în partea de sus a sursei mai noi %1 [%2] + + + Reapplying older source entry on top of newer target %1 [%2] + Reaplicarea intrării sursei mai vechi în partea de sus a țintei mai noi %1 [%2] + Synchronizing from newer source %1 [%2] Sincronizarea din sursa mai nouă %1 [%2] @@ -6404,7 +5571,7 @@ Expect some bugs and minor issues, this version is meant for testing purposes.NewDatabaseWizard Create a new KeePassXC database… - Crearea unei noi baze de date KeePassXC... + Root @@ -6426,16 +5593,24 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. Aici aveți posibilitatea să ajustați setările de criptare a bazei de date. Nu vă faceți griji, le puteți modifica mai târziu în setările bazei de date. + + Advanced Settings + Setări avansate + + + Simple Settings + Setări simple + NewDatabaseWizardPageDatabaseKey Database Credentials - Credențiale pentru baza de date + A set of credentials known only to you that protects your database. - Un set de credențiale cunoscute doar de dvs. care vă protejează baza de date. + @@ -6460,25 +5635,6 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Vă rugăm să completați numele afișat și o descriere opțională pentru noua bază de date: - - NewEntryAttachmentsDialog - - Attachment name cannot be empty - - - - Attachment with the same name already exists - - - - Save attachment - Salvează atașament - - - New entry attachment - - - NixUtils @@ -6525,6 +5681,15 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Se așteaptă %1 octeți de text clar, %2 găsit + + OpVaultOpenWidget + + Read Database did not produce an instance +%1 + Citirea bazei de date nu a produs o instanță +%1 + + OpVaultReader @@ -6598,10 +5763,6 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Unknown cipher: %1 Cifru necunoscut: %1 - - AES-256/GCM is currently not supported - - Passphrase is required to decrypt this key Passphrase este necesar pentru a decripta această tastă @@ -6667,182 +5828,9 @@ Expect some bugs and minor issues, this version is meant for testing purposes.EOF neașteptate atunci când scrierea cheie privată - (encrypted) - (criptat) - - - - OpenSSHKeyGenDialog - - SSH Key Generator + AES-256/GCM is currently not supported - - Type - Tip - - - Bits - - - - Comment - Comentariu - - - - PasskeyExportDialog - - KeePassXC - Passkey Export - KeePassXC - Export de chei de acces - - - Filenames will be generated with title and .passkey file extension. - - - - Export entries - Exportul intrărilor - - - Export Selected - - - - Cancel - Anulare - - - Export to folder - - - - Export the following passkey entries. - - - - - PasskeyExporter - - KeePassXC: Passkey Export - KeePassXC - Export de chei de acces - - - File "%1.passkey" already exists. -Do you want to overwrite it? - - - - - Cannot open file - - - - Cannot open file "%1" for writing. - - - - Cannot write to file - - - - - PasskeyImportDialog - - KeePassXC - Passkey Import - KeePassXC - Import cheie de acces - - - Username: %1 - - - - Group - Grup - - - Database - Bază de date - - - Import Passkey - Importare cheie de acces - - - Import - Import - - - Cancel - Anulare - - - Entry - Intrare - - - Create new entry - Creați o intrare nouă - - - Relying Party: %1 - - - - Import the following passkey: - Importați următoarea cheie de acces: - - - Import the following passkey to this entry: - Importați următoarea cheie de acces în această intrare: - - - Default passkeys group (Imported Passkeys) - Grup de chei de acces implicite (chei de acces importate) - - - - PasskeyImporter - - Passkey file - Fișier cheie de acces - - - All files - Toate fișierele - - - Cannot open file - - - - Cannot open file "%1" for reading. - - - - Open passkey file - Deschidere fișier cheie de acces - - - Cannot import passkey - Nu se poate importa cheia de acces - - - Cannot import passkey file "%1". Data is missing. - Nu se poate importa fișierul de chei de acces "%1". Datele lipsesc. - - - Cannot import passkey file "%1". -The following data is missing: -%2 - Nu se poate importa fișierul de chei de acces "%1". -Următoarele date lipsesc: -%2 - - - Cannot import passkey file "%1". Private key is missing or malformed. - Nu se poate importa fișierul de chei de acces "%1". Cheia privată lipsește sau este deformată. - PasswordEditWidget @@ -7046,18 +6034,26 @@ Următoarele date lipsesc: Word Count: Număr cuvinte: + + Character Count: + + Word Case: Registrul cuvântelor Delete selected wordlist - Ștergerea listei de cuvinte selectate + Add custom wordlist + + character + + Close Închide @@ -7094,41 +6090,17 @@ Următoarele date lipsesc: Entropy: %1 bit Entropie: %1 bit - - Password Quality: %1 - Calitate parolă: %1 - - - Poor - Password quality - Inacceptabil - - - Weak - Password quality - Slab - - - Good - Password quality - Bun - - - Excellent - Password quality - Excelent - Confirm Delete Wordlist - Confirmați ștergerea listei de cuvinte + Do you really want to delete the wordlist "%1"? - Chiar doriți să ștergeți lista de cuvinte "%1"? + Failed to delete wordlist - Nu s-a reușit ștergerea listei de cuvinte + Wordlists @@ -7164,20 +6136,32 @@ Do you want to overwrite it? Caractere speciale - passwordLength - + Password Quality: %1 + Calitate parolă: %1 - Characters: %1 - + Poor + Password quality + Inacceptabil - MIXED case - + Weak + Password quality + Slab - Excluded characters: "0", "1", "l", "I", "O", "|", "﹒", "B", "8", "G", "6" - + Good + Password quality + Bun + + + Excellent + Password quality + Excelent + + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + Caractere excluse: "0", "1", "l", "I", "O", "|", "." @@ -7200,7 +6184,7 @@ Do you want to overwrite it? Warning: Caps Lock enabled! - Avertisment: Caps Lock este activat! + Quality: %1 @@ -7227,7 +6211,7 @@ Do you want to overwrite it? Excelent - Toggle password visibility using Control + H. Open the password generator using Control + G. + Toggle password visibilty using Control + H. Open the password generator using Control + G. @@ -7246,21 +6230,6 @@ Do you want to overwrite it? - - PreviewEntryAttachmentsDialog - - Preview entry attachment - - - - No preview available - - - - Image format not supported - - - QMessageBox @@ -7299,10 +6268,6 @@ Do you want to overwrite it? Continue Continua - - Continue with weak password - - QObject @@ -7589,19 +6554,19 @@ Do you want to overwrite it? Copy the given attribute to the clipboard. Defaults to "password" if not specified. Don't translate "password", it refers to the attribute. - Copiați atributul dat în clipboard. Valoarea implicită este "password" dacă nu este specificată. + Copy the current TOTP to the clipboard (equivalent to "-a totp"). - Copiați TOTP-ul curent în clipboard (echivalent cu "-a totp"). + Must match only one entry, otherwise a list of possible matches is shown. - Trebuie să corespundă unei singure intrări, în caz contrar se afișează o listă de posibile corespondențe. + Copy an entry's attribute to the clipboard. - Copiați atributul unei intrări în clipboard. + Path of the entry to clip. @@ -7610,7 +6575,7 @@ Do you want to overwrite it? Timeout before clearing the clipboard (default is %1 seconds, set to 0 for unlimited). - Timpul de așteptare înainte de ștergerea clipboardului (valoarea implicită este %1 secunde, setată la 0 pentru nelimitat). + Invalid timeout value %1. @@ -7618,7 +6583,7 @@ Do you want to overwrite it? Multiple entries matching: - Potrivirea mai multor intrări: + Using matching entry: %1 @@ -7646,7 +6611,7 @@ Do you want to overwrite it? Entry's "%1" attribute copied to the clipboard! - Atributul "%1" al intrării a fost copiat în clipboard! + Clearing the clipboard in %1 second(s)... @@ -7696,10 +6661,6 @@ Do you want to overwrite it? Too many arguments provided. - - Path of the database. - Calea către baza de date - Target decryption time in MS for the database. @@ -7720,6 +6681,10 @@ Do you want to overwrite it? Create a new database. Creează o bază de date nouă. + + Path of the database. + Calea către baza de date + Invalid decryption time %1. @@ -7764,158 +6729,6 @@ Do you want to overwrite it? Successfully created new database. Noua bază de date a fost creată cu succes. - - Unset the password for the database. - - - - Unset the key file for the database. - - - - Edit a database. - - - - Cannot use %1 and %2 at the same time. - - - - Could not change the database key. - - - - Database was not modified. - - - - Writing the database failed: %1 - Scrierea bazei de date nu a reușit: %1 - - - Successfully edited the database. - - - - Cannot remove password: The database does not have a password. - - - - Cannot remove file key: The database does not have a file key. - - - - Loading the new key file failed: %1 - Încărcarea noului fișier cheie a eșuat: %1 - - - Found unexpected Key type %1 - - - - Cannot remove all the keys from a database. - - - - Show a database's information. - Afișare informații despre o bază de date. - - - UUID: - UUID: - - - Name: - Nume: - - - Description: - Descriere: - - - Cipher: - Cifru: - - - KDF: - KDF: - - - Recycle bin is enabled. - - - - Recycle bin is not enabled. - - - - Location - Locație - - - Database created - Baza de date creată - - - Last saved - Ultima salvare - - - Unsaved changes - Modificări salvate - - - yes - da - - - no - Nu - - - Number of groups - Număr de grupuri - - - Number of entries - Numărul de intrări - - - Number of expired entries - Numărul de intrări expirate - - - Unique passwords - Parole unice - - - Non-unique passwords - Parole non-unice - - - Maximum password reuse - Reutilizarea maximă a parolei - - - Number of short passwords - Număr de parole scurte - - - Number of weak passwords - Număr de parole slabe - - - Entries excluded from reports - Mențiuni excluse din rapoarte - - - Average password length - Lungimea medie a parolei - - - %1 characters - %1 caractere - Word count for the diceware passphrase. Word conta pentru fraza de acces diceware. @@ -7939,6 +6752,10 @@ Do you want to overwrite it? Invalid word count %1 Număr de cuvinte nevalide %1 + + The word list is too small (< 1000 items) + Lista de cuvinte este prea mică (<1000 de articole) + Title for the entry. Titlu pentru intrare. @@ -7963,6 +6780,10 @@ Do you want to overwrite it? Enter new password for entry: Introduceți parola nouă pentru intrare: + + Writing the database failed: %1 + Scrierea bazei de date nu a reușit: %1 + Successfully edited entry %1. Intrare editată cu succes %1. @@ -8083,6 +6904,10 @@ Do you want to overwrite it? Exit interactive mode. Ieșiți din modul interactiv. + + Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. + + Exports the content of a database to standard output in the specified format. Exportă conținutul unei baze de date până la ieșirea standard în formatul specificat. @@ -8183,6 +7008,106 @@ Do you want to overwrite it? Successfully imported database. Baza de date importată cu succes. + + Show a database's information. + + + + UUID: + UUID: + + + Name: + Nume: + + + Description: + Descriere: + + + Cipher: + Cifru: + + + KDF: + KDF: + + + Recycle bin is enabled. + + + + Recycle bin is not enabled. + + + + Location + Locație + + + Database created + + + + Last saved + Ultima salvare + + + Unsaved changes + Modificări salvate + + + yes + da + + + no + Nu + + + Number of groups + Număr de grupuri + + + Number of entries + Numărul de intrări + + + Number of expired entries + Numărul de intrări expirate + + + Unique passwords + Parole unice + + + Non-unique passwords + Parole non-unice + + + Maximum password reuse + Reutilizarea maximă a parolei + + + Number of short passwords + Număr de parole scurte + + + Number of weak passwords + Număr de parole slabe + + + Entries excluded from reports + + + + Average password length + Lungimea medie a parolei + + + %1 characters + %1 caractere + Unknown command %1 Comanda necunoscută %1 @@ -8355,10 +7280,6 @@ Comenzi disponibile: Show the protected attributes in clear text. Afișează atributele protejate într-un text clar. - - Show all the attributes of the entry. - Afișare toate atributele intrării. - Show the attachments of the entry. @@ -8416,10 +7337,7 @@ Comenzi disponibile: stop supporting in the future. Please consider generating a new key file. - AVERTISMENT: Folosiți un format de fișier cheie vechi, pe care KeePassXC -s-ar putea să nu îl mai suporte în viitor. - -Vă rugăm să luați în considerare generarea unui nou fișier cheie. + Invalid YubiKey slot %1 @@ -8429,17 +7347,13 @@ Vă rugăm să luați în considerare generarea unui nou fișier cheie.Invalid YubiKey serial %1 - - Please present or touch your YubiKey to continue. - - Enter password to encrypt database (optional): Introduceți parola pentru criptarea bazei de date (opțional): Do you want to create a database with an empty password? [y/N]: - Doriți să creați o bază de date cu o parolă goală? [y/N]: + Repeat password: @@ -8564,7 +7478,7 @@ Nucleu (Kernel): %3 %4 Auto-Type - Auto-tastare + Auto tiparire SSH Agent @@ -8580,7 +7494,7 @@ Nucleu (Kernel): %3 %4 Quick Unlock - Deblocare rapidă + Secret Service Integration @@ -8670,6 +7584,18 @@ Nucleu (Kernel): %3 %4 file empty fișier gol + + malformed string + șir incorect + + + missing closing quote + lipsă citat de închidere + + + %1: (row, col) %2,%3 + % 1: (rând, col) %2,%3 + AES 256-bit AES 256-biți @@ -8758,7 +7684,7 @@ Nucleu (Kernel): %3 %4 Do you really want to delete the entry "%1" for good? - Chiar doriți să ștergeți definitiv intrarea "%1"? + Do you really want to delete %n entry(s) for good? @@ -8838,7 +7764,7 @@ Nucleu (Kernel): %3 %4 lock all open databases - blochează toate bazele de date deschise + key file of the database @@ -8848,18 +7774,22 @@ Nucleu (Kernel): %3 %4 read password of the database from stdin citi parola bazei de date de la stdin + + allow app screen recordering and screenshots + + + + Locked databases. + + Database failed to lock. - Nu s-a reușit blocarea bazei de date. + Another instance of KeePassXC is already running. O altă instanță a KeePassXC este deja în execuție. - - KeePassXC is not running. No open database to lock - KeePassXC nu rulează. Nu există o bază de date deschisă pentru a fi blocată - Fatal error while testing the cryptographic functions. Eroare fatală în timpul testării funcțiilor criptografice. @@ -8892,7 +7822,7 @@ Nucleu (Kernel): %3 %4 Warning: Failed to block screenshot capture on a top-level window. - Avertisment: Nu s-a reușit blocarea capturării capturii de ecran pe o fereastră de nivel superior. + Invalid Cipher @@ -8903,300 +7833,70 @@ Nucleu (Kernel): %3 %4 - Access to all entries is denied - Accesul la toate intrările este interzis + Please present or touch your YubiKey to continue. + - allow screenshots and app recording (Windows/macOS) + Show all the attributes of the entry. + + + + Edit a database. + + + + Could not change the database key. + + + + Database was not modified. + + + + Successfully edited the database. + + + + Loading the new key file failed: %1 + + + + Unset the password for the database. + + + + Unset the key file for the database. + + + + Cannot use %1 and %2 at the same time. + + + + Cannot remove all the keys from a database. + + + + Cannot remove password: The database does not have a password. + + + + Cannot remove file key: The database does not have a file key. + + + + Found unexpected Key type %1 Set the key file for the database. -This option is deprecated, use --set-key-file instead. +This options is deprecated, use --set-key-file instead. - Databases have been locked. - Bazele de date au fost blocate. - - - Attestation not supported - - - - Credential is excluded - - - - Passkeys request canceled - - - - Invalid user verification - - - - Empty public key - - - - Invalid URL provided - - - - Passkeys - - - - AES initialization failed - - - - AES encrypt failed - - - - Failed to store in Linux Keyring - - - - Polkit returned an error: %1 - - - - Could not locate key in keyring - - - - Could not read key in keyring - - - - AES decrypt failed - - - - No Polkit authentication agent was available - - - - Polkit authorization failed - - - - No Quick Unlock provider is available - - - - Failed to init KeePassXC crypto. - - - - Failed to encrypt key data. - - - - Failed to get Windows Hello credential. - - - - Failed to decrypt key data. - - - - Origin is empty or not allowed - - - - Effective domain is not a valid domain - - - - Origin and RP ID do not match - - - - No supported algorithms were provided - - - - Wait for timer to expire - - - - Challenge is shorter than required minimum length - - - - user.id does not match the required length - - - - Favorite - Tag for favorite entries - - - - File does not exist. - - - - Cannot open file: %1 - - - - Cannot parse file: %1 at position %2 - - - - Failed to decrypt json file: %1 - - - - Invalid encKeyValidation field + KeePassXC is not running. No open database to lock - - Invalid cipher list within encKeyValidation field - - - - Wrong password - - - - Invalid encrypted data field - - - - Invalid cipher list within encrypted data field - - - - Cannot initialize cipher - - - - Cannot decrypt data - - - - Bitwarden Import - - - - Archived - Tag for archived entries - - - - Invalid 1PUX file format: Not a valid ZIP file. - - - - Invalid 1PUX file format: Missing export.data - - - - 1Password Import - - - - Enter Shortcut - - - - Action - - - - Shortcuts - - - - Unknown passkeys error - - - - Invalid KDF iterations, cannot decrypt json file - - - - Unsupported format, ensure your Bitwarden export is password-protected - - - - Only PBKDF and Argon2 are supported, cannot decrypt json file - - - - Reset Shortcuts - - - - Double click an action to change its shortcut - - - - Filter... - - - - Shortcut Conflict - - - - Shortcut %1 conflicts with '%2'. Overwrite shortcut? - - - - Cannot generate valid passphrases because the wordlist is too short - - - - Encrypted files are not supported. - - - - Proton Pass Import - - - - Delete plugin data? - Ștergeți datele modulului? - - - Delete plugin data from Entry(s)? - - - - Passkey - Cheie de acces - - - Format to use when exporting. Available choices are 'xml', 'csv' or 'html'. Defaults to 'xml'. - - - - start minimized to the system tray - - - - malformed string, possible unescaped delimiter - - - - missing closing delimiter - - - - %1, row: %2, column: %3 - - - - Tags - Etichete - QtIOCompressor @@ -9232,42 +7932,23 @@ This option is deprecated, use --set-key-file instead. Eroare internă zlib: - - RemoteHandler - - Command `%1` did not finish in time. Process was killed. - - - - Failed to upload merged database. Command `%1` did not finish in time. Process was killed. - - - - Invalid download parameters provided. - - - - Command `%1` failed to download database. - - - - Invalid database pointer or upload parameters provided. - - - - Command `%1` exited with status code: %2 - - - - Failed to upload merged database. Command `%1` exited with status code: %2 - - - ReportsWidgetBrowserStatistics + + Exclude expired entries from the report + + + + Show only entries which have URL set + + + + Show only entries which have browser settings in custom data + + Double-click entries to edit. - Faceți dublu clic pe intrări pentru a le edita. + List of entry URLs @@ -9303,7 +7984,7 @@ This option is deprecated, use --set-key-file instead. No entries with a URL, or none has browser extension settings saved. - Nu există intrări cu o adresă URL sau niciuna nu are setările extensiilor de browser salvate. + Title @@ -9329,53 +8010,44 @@ This option is deprecated, use --set-key-file instead. Exclude from reports - - Expire Entry(s)… - - - - Only show entries that have a URL - Afișați numai intrările care au un URL - - - Only show entries that have been explicitly allowed or denied - Afișează numai intrările care au fost permise sau refuzate în mod explicit - - - Show expired entries - Afișați intrările expirate - - - (Expired) - - - - Delete plugin data from Entry(s)… - - ReportsWidgetHealthcheck - Show expired entries - Afișați intrările expirate + Exclude expired entries from the report + - (Expired) + Also show entries that have been excluded from reports Hover over reason to show additional details. Double-click entries to edit. - Treceți peste motiv pentru a afișa detalii suplimentare. Faceți dublu clic pe intrări pentru a le edita. + + + + Bad + Password quality + Bad — password must be changed + + Poor + Password quality + Inacceptabil + Poor — password should be changed + + Weak + Password quality + Slab + Weak — consider changing the password @@ -9424,14 +8096,6 @@ This option is deprecated, use --set-key-file instead. Exclude from reports - - Expire Entry(s)… - - - - Show entries that have been excluded from reports - - ReportsWidgetHibp @@ -9527,77 +8191,6 @@ This option is deprecated, use --set-key-file instead. Exclude from reports - - Expire Entry(s)… - - - - - ReportsWidgetPasskeys - - Export - Export - - - Import - Import - - - List of entry URLs - - - - Title - Titlu - - - Path - Cale - - - Username - Nume utilizator - - - URLs - - - - Edit Entry… - - - - Delete Entry(s)… - - - - Relying Party - - - - Show expired entries - Afișați intrările expirate - - - (Expired) - - - - Export Confirmation - Confirmare la export - - - The passkey file will be vulnerable to theft and unauthorized use, if left unsecured. Are you sure you want to continue? - - - - Please wait, list of entries with passkeys is being updated… - Vă rugăm să așteptați, lista de intrări cu chei de acces este în curs de actualizare... - - - No entries with passkeys. - Nu există intrări cu chei de acces. - ReportsWidgetStatistics @@ -9631,7 +8224,7 @@ This option is deprecated, use --set-key-file instead. Database created - Baza de date creată + Last saved @@ -9707,7 +8300,7 @@ This option is deprecated, use --set-key-file instead. Entries excluded from reports - Mențiuni excluse din rapoarte + Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. @@ -9762,7 +8355,7 @@ This option is deprecated, use --set-key-file instead. Security keys are not supported by the agent or the security key provider is unavailable. - Cheile de securitate nu sunt acceptate de agent sau furnizorul de chei de securitate nu este disponibil. + No agent running, cannot remove identity. @@ -9772,14 +8365,6 @@ This option is deprecated, use --set-key-file instead. No agent running, cannot list identities. - - Failed to remove all SSH identities from agent. - - - - All SSH identities removed from agent. - - SearchHelpWidget @@ -9846,14 +8431,10 @@ This option is deprecated, use --set-key-file instead. Search Help Căutare ajutor - - Save Search - Salvați căutarea - Search (%1)… Search placeholder text, %1 is the keyboard shortcut - Căutare (%1)... + Case sensitive @@ -9863,6 +8444,10 @@ This option is deprecated, use --set-key-file instead. Limit search to selected group Limitați căutarea la grupul selectat + + Save Search + + SettingsClientModel @@ -9914,23 +8499,39 @@ This option is deprecated, use --set-key-file instead. Show notification when passwords are retrieved by clients - Afișare notificare atunci când parolele sunt recuperate de către clienți + <html><head/><body><p>If enabled, any attempt to read a password must be confirmed. Otherwise, clients can read passwords without confirmation when the database is unlocked.</p><p>This option only covers the access to the password of an entry. Clients can always enumerate the items of exposed databases and query their attributes.</p></body></html> - Dacă este activată, orice încercare de a citi o parolă trebuie confirmată. În caz contrar, clienții pot citi parolele fără confirmare atunci când baza de date este deblocată. Această opțiune se referă numai la accesul la parola unei intrări. Clienții pot oricând să enumere elementele din bazele de date expuse și să interogheze atributele acestora. + Confirm when passwords are retrieved by clients + + <html><head/><body><p><span style=" + font-family:'-apple-system','BlinkMacSystemFont','Segoe UI','Helvetica','Arial','sans-serif','Apple Color + Emoji','Segoe UI Emoji'; font-size:14px; color:#24292e; background-color:#ffffff;">This setting does + not override disabling recycle bin prompts</span></p></body></html> + + + Confirm when clients request entry deletion + + <html><head/><body><p>This improves compatibility with certain applications + which search for password without unlocking the database first.</p><p>But enabling this may also + crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a + different value set in applications.)</p></body></html> + + + Prompt to unlock database before searching - Solicitare de deblocare a bazei de date înainte de căutare + Exposed database groups: @@ -9952,14 +8553,6 @@ This option is deprecated, use --set-key-file instead. Save current changes to activate the plugin and enable editing of this section. - - <html><head/><body><p>This setting does not override disabling recycle bin prompts </p></body></html> - - - - <html><head/><body><p>This improves compatibility with certain applications which search for password without unlocking the database first.</p><p>But enabling this may also crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a different value set in applications.) </p></body></html> - <html><head/><body><p>Acest lucru îmbunătățește compatibilitatea cu anumite aplicații care caută parola fără să deblocheze mai întâi baza de date.</p><p>Dar activarea acestui lucru poate duce la blocarea clientului dacă baza de date nu poate fi deblocată într-un anumit interval de timp. (De obicei 25s, dar poate fi o valoare diferită stabilită în aplicații).  - SettingsWidgetKeeShare @@ -10027,7 +8620,7 @@ This option is deprecated, use --set-key-file instead. ShareImport Successful import - Import reușit + @@ -10067,14 +8660,6 @@ This option is deprecated, use --set-key-file instead. TagModel - - Clear Search - Ștergeți căutarea - - - All Entries - Toate intrările - Expired @@ -10083,6 +8668,14 @@ This option is deprecated, use --set-key-file instead. Weak Passwords + + All Entries + + + + Clear Search + + TagView @@ -10100,7 +8693,7 @@ This option is deprecated, use --set-key-file instead. Remove tag "%1" from all entries in this database? - Eliminați eticheta "%1" din toate intrările din această bază de date? + @@ -10247,7 +8840,7 @@ Exemplu: JBSWY3DPEHPK3PXP <strong>A new version is available.</strong><br/>KeePassXC %1 can be <a href="https://keepassxc.org/download/">downloaded here</a>. - <strong>O nouă versiune este disponibilă.</strong><br/>KeePassXC %1 can be <a href="https://keepassxc.org/download/">downloaded here</a>. + You have the latest version of KeePassXC @@ -10260,6 +8853,26 @@ Exemplu: JBSWY3DPEHPK3PXP Start storing your passwords securely in a KeePassXC database Începeți să stocați parolele în siguranță într-o bază de date KeePassXC + + Create new database + Creează o bază de date nouă + + + Open existing database + Deschide bază de date existentă + + + Import from KeePass 1 + Importă din KeePass 1 + + + Import from 1Password + Importă de la 1Password + + + Import from CSV + Importă din CSV + Recent databases Baze de date recente @@ -10272,18 +8885,6 @@ Exemplu: JBSWY3DPEHPK3PXP Welcome to KeePassXC %1 Bun venit la KeePassXC %1 - - Create Database - Creați o bază de date - - - Open Database - Deschideți o bază de date - - - Import File - Fișier de import - WinUtils @@ -10300,8 +8901,31 @@ Exemplu: JBSWY3DPEHPK3PXP + + WindowsHello + + Failed to init KeePassXC crypto. + + + + Failed to encrypt key data. + + + + Failed to get Windows Hello credential. + + + + Failed to decrypt key data. + + + YubiKey + + %1 No interface, slot %2 + + General: @@ -10313,6 +8937,14 @@ Exemplu: JBSWY3DPEHPK3PXP YubiKeyEditWidget + + Refresh hardware tokens + Actualizați jetoane hardware + + + Refresh + Actualizează + Hardware key slot selection Selectarea sloturilor pentru cheie hardware @@ -10345,6 +8977,10 @@ Exemplu: JBSWY3DPEHPK3PXP Challenge-Response set, click to change or remove + + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + + Detecting hardware keys… @@ -10353,32 +8989,35 @@ Exemplu: JBSWY3DPEHPK3PXP No hardware keys detected + + + YubiKeyInterface - Refresh hardware keys - Reîmprospătarea tastelor hardware - - - <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed with <a href="https://keepassxc.org/docs/#faq-yubikey-howto">Challenge-Response</a>.</p> - - - - Hardware keys found, but no slots are configured + %1 Invalid slot specified - %2 YubiKeyInterfacePCSC + + (PCSC) %1 [%2] Challenge-Response - Slot %3 + + The YubiKey PCSC interface has not been initialized. + + Hardware key is currently in use. + + Could not find or access hardware key with serial number %1. Please present it to continue. Hardware key is locked or timed out. Unlock or re-present it to continue. - Cheia hardware este blocată sau a expirat. Deblocați-o sau prezentați-o din nou pentru a continua. + Hardware key was not found or is not configured. @@ -10388,21 +9027,6 @@ Exemplu: JBSWY3DPEHPK3PXP Failed to complete a challenge-response, the PCSC error code was: %1 - - (NFC) %1 [%2] - Slot %3, %4 - YubiKey display fields - - - - Press - USB Challenge-Response Key interaction request - Apasă - - - Passive - USB Challenge-Response Key no interaction required - Pasiv - YubiKeyInterfaceUSB @@ -10410,6 +9034,14 @@ Exemplu: JBSWY3DPEHPK3PXP Unknown Necunoscut + + (USB) %1 [%2] Configured Slot - %3 + + + + (USB) %1 [%2] Challenge-Response - Slot %3 - %4 + + Press USB Challenge-Response Key interaction request @@ -10424,6 +9056,10 @@ Exemplu: JBSWY3DPEHPK3PXP The YubiKey USB interface has not been initialized. + + Hardware key is currently in use. + + Could not find hardware key with serial number %1. Please plug it in to continue. @@ -10440,15 +9076,5 @@ Exemplu: JBSWY3DPEHPK3PXP Failed to complete a challenge-response, the specific error was: %1 - - %1 [%2] - Slot %3 - YubiKey NEO display fields - - - - %1 [%2] - Slot %3, %4 - YubiKey display fields - - \ No newline at end of file diff --git a/share/translations/keepassxc_ru.ts b/share/translations/keepassxc_ru.ts index a6816c8c7..086a714cf 100644 --- a/share/translations/keepassxc_ru.ts +++ b/share/translations/keepassxc_ru.ts @@ -11,15 +11,15 @@ 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;">ошибках</a> на https://github.com KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. - KeePassXC распространяется на условиях Основной Общественной Лицензии GNU версии 2-ой или 3-ей (на ваше усмотрение). + KeePassXC распространяется на условиях Основной Общественной Лицензии GNU версии 2 или 3 (на ваше усмотрение). Project Maintainers: - Проект сопровождают: + Сопровождающие проекта: Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. @@ -39,7 +39,7 @@ Include the following information whenever you report a bug: - Добавьте в сообщение об ошибке следующую информацию: + Добавьте в сообщение об ошибке следующие сведения: Copy to clipboard @@ -54,7 +54,7 @@ Non-existing/inaccessible executable path. Please double-check the client is legit. - Несуществующий/недоступный путь к исполняемому файлу. Перепроверьте подлинность клиента. + Несуществующий/недоступный путь к исполняемому файлу. Пожалуйста, дважды проверьте, что клиент подлинный. <html><head/><body><p><span style=" font-weight:600;">%1 </span>is requesting access to the following entries:</p></body></html> @@ -80,10 +80,6 @@ Details Подробности - - Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. - Ваше решение будет сохранено на все время, пока запущены и запрашивающий клиент, и KeePassXC. - Remember Запомнить @@ -92,20 +88,24 @@ Allow Selected Разрешить выбранные + + Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. + Ваше решение будет сохранено на все время, пока запущены и запрашивающий клиент, и KeePassXC. + Deny All && Future Запретить все && будущие Allow All && &Future - Разрешить все && &будущие + Разрешить все && будущие AccessControlDialog::DenyButton Deny for this program - Запретить для этой программы + Запретить для этого приложения @@ -122,17 +122,13 @@ Use OpenSSH Использовать OpenSSH - - Use both agents - Использовать оба агента - SSH_AUTH_SOCK override - Переопределить SSH_AUTH_SOCK + переопределить SSH_AUTH_SOCK SSH_AUTH_SOCK value - Значение SSH_AUTH_SOCK + значение SSH_AUTH_SOCK (empty) @@ -144,22 +140,26 @@ SSH_SK_PROVIDER override - Переопределить SSH_SK_PROVIDER + SSH_SK_PROVIDER переопределить No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. - Отсутствуют сокеты SSH-агента. Убедитесь, что переменная SSL_AUTH_SOCK определена или переопределите её значение. + Отсутствуют сокеты агента SSH. Убедитесь, что переменная окружения SSL_AUTH_SOCK определена или переопределите её значение. SSH Agent connection is working! - Соединение с SSH-агентом активно! + Соединение с агентом SSH активно. + + + Use both agents + Использовать оба агента ApplicationSettingsWidget Application Settings - Параметры приложения + Настройки приложения General @@ -169,10 +169,6 @@ Security Безопасность - - This setting cannot be enabled when minimize on unlock is enabled. - Эту настройку нельзя включить, если включена функция сворачивания при разблокировке. - Access error for config file %1 Ошибка доступа к файлу конфигурации %1 @@ -215,58 +211,30 @@ You must restart the application to set the new language. Would you like to restart now? - Необходимо перезапустить приложение, чтобы установить новый язык. Перезапустить сейчас? + Вы должны перезапустить приложение, чтобы установить новый язык. Хотите перезапустить сейчас? + + + Reset Settings? + Сбросить настройки? + + + Are you sure you want to reset all general and security settings to default? + Вы уверены, что хотите сбросить все основные настройки и настройки безопасности на значения по умолчанию? Select backup storage directory Выбрать папку для резервной копии - Confirm Reset - Подтвердить сброс - - - Are you sure you want to reset all settings to default? - Сбросить все параметры по умолчанию? - - - Import KeePassXC Settings - Импортировать настройки KeePassXC - - - Failed to import settings from %1, not a valid settings file. - Не удалось импортировать настройки из %1, не корректный файл настроек. - - - Export KeePassXC Settings - Экспортировать настройки KeePassXC - - - Small - Маленький - - - Normal - Обычный - - - Medium - Средний - - - Large - Большой - - - Custom - Пользовательский + This setting cannot be enabled when minimize on unlock is enabled. + Эту настройку нельзя включить, если включена функция сворачивания при разблокировке. ApplicationSettingsWidgetGeneral Basic Settings - Основные параметры + Основные настройки Startup @@ -274,11 +242,11 @@ Start only a single instance of KeePassXC - Запускать только один экземпляр KeePassXC + Запускать только одну копию приложения Automatically launch KeePassXC at system startup - Автоматически запускать KeePassXC при загрузке системы + Автоматически запускать KeePassXC при запуске системы Minimize window at application startup @@ -286,23 +254,19 @@ Minimize window after unlocking database - Сворачивать окно после разблокировки базы данных + Свернуть окно после открытия базы данных Remember previously used databases Запоминать ранее использованные базы данных - - recent files - недавние файлы - Load previously open databases on startup Загружать прошлые базы данных при запуске Remember database key files and security dongles - Запоминать файлы-ключи баз данных и аппаратные ключи безопасности + Запоминать для баз данных файлы-ключи и аппаратные ключи безопасности Check for updates at application startup once per week @@ -310,7 +274,26 @@ Include beta releases when checking for updates - Включить в проверку обновлений бета-релизы + Включать в проверку обновлений бета-выпуски + + + On database unlock, show entries that + При открытии базы данных показать записи, которые + + + have expired + On database unlock, show entries that... + истекли + + + days + On database unlock, show entries that will expire within %1 days + дни + + + will expire within + On database unlock, show entries that... + истекает в течение File Management @@ -322,11 +305,11 @@ Automatically save when locking database - Автоматически сохранять при блокировке базы данных + Автоматическое сохранение при блокировке базы данных Automatically save non-data changes when locking database - Автоматически сохранять изменения, не связанные с данными, при блокировке базы данных + Автоматическое сохранение изменений, не связанных с данными, при блокировке базы данных. Automatically reload the database when modified externally @@ -336,17 +319,29 @@ Backup database file before saving Создавать резервную копию базы данных перед сохранением + + Backup destination + Путь к резервной копии + + + Specifies the database backup file location. Occurrences of "{DB_FILENAME}" are replaced with the filename of the saved database without extension. {TIME:<format>} is replaced with the backup time, see https://doc.qt.io/qt-5/qdatetime.html#toString. <format> defaults to format string "dd_MM_yyyy_hh-mm-ss". + Указывает местоположение файла резервной копии базы данных. Встречающиеся "{DB_FILENAME}" заменяются именем файла сохранённой базы данных без расширения. {TIME:} заменяется временем резервного копирования, см. https://doc.qt.io/qt-5/qdatetime.html#toString. По умолчанию используется строка формата "дд_ММ_ггг_чч-мм-сс". + {DB_FILENAME}.old.kdbx {DB_FILENAME}.old.kdbx + + Choose... + Выбрать... + Use alternative saving method (may solve problems with Dropbox, Google Drive, GVFS, etc.) - Использовать альтернативный метод хранения (может решить проблемы с Dropbox, Google Drive, GVFS и т.д.) + Использовать другой способ хранения (может решить проблемы с Dropbox, Google Drive, GVFS и т.д.) Temporary file moved into place - Временный файл перемещён на место + Временный файл перемещен на место Directly write to database file (dangerous) @@ -366,7 +361,7 @@ Hide window when copying to clipboard - Скрывать окно после копирования в буфер обмена + Скрывать окно после копирования в буфер обмена: Minimize @@ -382,7 +377,7 @@ Website icon download timeout in seconds - Тайм-аут получения значков веб-сайтов в секундах + Тайм-аут получения значков с веб-сайтов, в секундах sec @@ -411,16 +406,12 @@ (restart program to activate) - (перезапустить программу для активации) + (перезапустить приложение для применения) Toolbar button style: Внешний вид кнопок панели инструментов: - - Show passwords in color - Показывать пароли в цвете - Use monospaced font for notes Использовать для заметок моноширинный шрифт @@ -431,7 +422,7 @@ Show a system tray icon - Показывать значок в области уведомлений + Значок в области уведомлений Tray icon type @@ -447,7 +438,7 @@ Reset settings to default… - Сбросить параметры по умолчанию... + Сбросить настройки по умолчанию... Auto-Type @@ -479,11 +470,11 @@ Global Auto-Type shortcut: - Комбинация клавиш для глобального автоввода: + Сочетание клавиш для глобального автоввода: Auto-type start delay milliseconds - Задержка начала автоввода, задаётся в миллисекундах + Задержка начала автоввода, задаётся в милисекундах ms @@ -496,7 +487,7 @@ Global auto-type shortcut - Комбинация клавиш для глобального автоввода + Сочетание клавиш для глобального автоввода: Auto-type character typing delay milliseconds @@ -504,72 +495,15 @@ Remember last typed entry for: - Запомнить последнюю введённую запись для: + Запомнить последнюю введенную запись для: - On database unlock, show entries that will expire within - При разблокировке базы данных показать записи, срок действия которых истекает в течение + recent files + недавние файлы - On database unlock, show entries that will expire within - При разблокировке базы данных показать записи, срок действия которых истекает в течение - - - days - number of days warning for password expiration - дн. - - - Destination format: - Формат назначения: - - - <html><head/><body><p><span style=" font-weight:600;">{DB_FILENAME}</span> is replaced with the filename of the saved database without extension</p><p><span style=" font-weight:600;">{TIME:&lt;format&gt;}</span> is replaced with the specified time format (default: dd_MM_yyyy_hh-mm-ss)</p><p>See the User Guide for more details</p></body></html> - <html><head/><body><p><span style=" font-weight:600;">{DB_FILENAME}</span>заменяется именем файла сохраненной базы данных без расширения</p><p><span style=" font-weight:600;">{TIME:&lt;format&gt;}</span>заменяется на указанный формат времени (по умолчанию: dd_MM_yyy_hh-mm-ss)</p><p>Подробнее см. в руководстве пользователя</p></body></html> - - - Choose folder... - Выбрать папку... - - - Show confirmation before moving entries to recycle bin - Показывать подтверждение перед перемещением записей в корзину - - - Copy data on double clicking field in entry view - Копировать данные при двойном щелчке на поле в режиме просмотра записи - - - Show toolbar - Отображать панель инструментов - - - Show the menu bar by pressing the Alt key - Отобразить меню при нажатии клавишу Alt - - - Show menubar - Отображать меню - - - Import settings… - Импортировать настройки... - - - Export settings… - Экспортировать настройки... - - - Open browser on double clicking URL field in entry view - Открывать URL-адрес в браузере при двойном щелчке по столбцу в режиме просмотра записей - - - Font size: - Размер шрифта: - - - Font size selection - Выбор размера шрифта + Show passwords in color + Показывать пароли в цвете @@ -606,7 +540,7 @@ Lock databases after inactivity of - Блокировать базу данных при неактивности в течение + Блокировать базу данных при бездействии в течение Convenience @@ -614,7 +548,7 @@ Enable database quick unlock (Touch ID / Windows Hello) - Включить быструю разблокировку базы данных (Touch ID / Windows Hello) + Включить быстрое открытие базы данных (Touch ID / Windows Hello) Lock databases when session is locked or lid is closed @@ -624,9 +558,13 @@ Lock databases after minimizing the window Блокировать базы данных при сворачивании окна + + Require password repeat when it is visible + Требовать повтора пароля, когда он виден + Hide passwords when editing them - Скрыть пароли при их редактировании + Скрыть пароли при их изменении Use placeholder for empty password fields @@ -636,6 +574,18 @@ Hide passwords in the entry preview panel Скрывать пароли в панели предварительного просмотра записи + + Hide entry notes by default + По умолчанию скрывать примечания записи + + + Move entries to recycle bin without confirmation + Переместить записи в корзину без подтверждения + + + Enable double click to copy the username/password entry columns + Разрешить копирование столбцов записей имени пользователя и пароля по двойному щелчку + Privacy Конфиденциальность @@ -648,18 +598,6 @@ Hide TOTP in the entry preview panel Скрыть TOTP на панели предварительного просмотра записей - - Lock databases when switching user - Блокировать базы данных при переключении пользователя - - - Lock Options - Параметры блокировки - - - Hide notes in the entry preview panel - Скрыть заметки на панели предпросмотра - AutoType @@ -704,13 +642,27 @@ Обнаружена слишком большая задержка, допускается не более %1: %2 - Entry does not have attribute for PICKCHARS: %1 - Запись не имеет атрибута PICKCHARS: %1 + Invalid conversion type: %1 + Недопустимый тип преобразования: %1 + + + Invalid conversion syntax: %1 + Недопустимый синтаксис преобразования: %1 + + + Invalid regular expression syntax %1 +%2 + Недопустимый синтаксис регулярного выражения %1 +%2 Invalid placeholder: %1 Недопустимый заполнитель: %1 + + Entry does not have attribute for PICKCHARS: %1 + Запись не имеет атрибута PICKCHARS: %1 + AutoTypeAssociationsModel @@ -739,7 +691,7 @@ Title - Название + Имя записи Username @@ -752,6 +704,10 @@ AutoTypePlatformX11 + + Trying to send invalid keysym. + Попытка отправить неверный символ клавиши. + Sequence aborted: Caps Lock is on Последовательность прервана: включён режим CAPS LOCK @@ -762,22 +718,18 @@ Unable to get valid keycode for key: - Не удалось получить корректный код клавиши для клавиши: - - - Trying to send invalid keyboard symbol. - Попытка отправить неверный символ клавиши. + Не удалось получить корректный код клавиши для клавиши: AutoTypeSelectDialog Auto-Type - KeePassXC - Автоввод — KeePassXC + Автоввод - KeePassXC Double click a row to perform Auto-Type or find an entry using the search: - Сделайте двойной щелчок по строке для выполнения автоввода или найдите запись с помощью функции поиска: + Сделайте двойной щелчок по строке для выполнения автоввода или найдите запись с помощью поиска: <p>You can use advanced search queries to find any entry in your open databases. The following shortcuts are useful:<br/> @@ -786,12 +738,12 @@ Ctrl+1 - Type username<br/> Ctrl+2 - Type password<br/> Ctrl+3 - Type TOTP<br/> Ctrl+4 - Use Virtual Keyboard (Windows Only)</p> - <p>Вы можете использовать расширенные поисковые запросы, чтобы найти любую запись в открытых вами базах данных. Можно использовать следующие комбинации клавиш:<br/> + <p>Вы можете использовать расширенные поисковые запросы, чтобы найти любую запись в открытых вами базах данных. Полезно использовать следующие сочетания клавиш:<br/> Ctrl+F — включить или отключить поиск по базам данных<br/> Ctrl+1 — ввести имя пользователя<br/> Ctrl+2 — ввести пароль<br/> Ctrl+3 — ввести TOTP<br/> -Ctrl+4 — использовать виртуальную клавиатуру (только для Windows)</p> +Ctrl+4 - использовать экранную клавиатуру (только для Windows)</p> Search all open databases @@ -835,7 +787,7 @@ Ctrl+4 — использовать виртуальную клавиатуру Use Virtual Keyboard - Использовать виртуальную клавиатуру + Использовать экранную клавиатуру @@ -872,13 +824,13 @@ Ctrl+4 — использовать виртуальную клавиатуру Disable for this site Отключить для этого сайта - - Undo - Отменить - BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + KeePassXC-Browser - сохранить запись + Ok OK @@ -893,82 +845,25 @@ Please select the correct database for saving credentials. У вас открыто несколько баз данных. Выберите нужную базу для сохранения учётных данных. - - KeePassXC - Select Database - KeePassXC - Выбрать базу данных - - - - BrowserPasskeysConfirmationDialog - - Cancel - Отмена - - - Update - Обновить - - - Authenticate - Аутентификация - - - Register new - Зарегистрировать новый - - - Register - Зарегистрироваться - - - Timeout in <b>%n</b> seconds... - Тайм-аут через <b>%n</b> секунду...Тайм-аут через <b>%n</b> секунды...Тайм-аут через <b>%n</b> секунд...Тайм-аут через <b>%n</b> секунд... - - - Relying Party: %1 - Доверенная сторона: %1 - - - Username: %1 - Имя пользователя: %1 - - - KeePassXC - Passkey credentials - KeePassXC - учетные данные Passkey - - - Add to existing entry - Добавить к существующей записи - - - Existing passkey found. -Do you want to register a new passkey for: - Существующий passkey найден. -Хотите зарегистрировать новый passkey для: - - - Select the existing passkey and press Update to replace it. - Выберите существующий passkey и нажмите Обновить, чтобы заменить его. - - - Authenticate passkey credentials for: - Аутентификация учетных данных passkey для: - - - Do you want to register a passkey for: - Вы хотите зарегистрировать passkey для: - BrowserService + + KeePassXC: Create a new group + KeePassXC: Создать новую группу + A request for creating a new group "%1" has been received. Do you want to create this group? - Получен запрос на создание новой группы «%1». + Получен запрос на создание новой группы "%1". Создать эту группу? + + KeePassXC: New key association request + KeePassXC: Запрос на ассоциацию нового ключа + You have received an association request for the following database: %1 @@ -978,83 +873,87 @@ chrome-laptop. Получен запрос на ассоциацию для следующей базы данных: %1 -Задайте для соединения уникальное имя или идентификатор, например: chrome-laptop. +Задайте для соединения исключительное имя или идентификатор, например: chrome-laptop. 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? - Общий секретный ключ с именем «%1» уже существует. + Общий секретный ключ с именем "%1" уже существует. Вы действительно хотите его перезаписать? + + KeePassXC: Update Entry + KeePassXC: Обновить запись + Do you want to update the information in %1 - %2? Обновить информацию в %1 — %2? + + KeePassXC: Delete entry + KeePassXC: Удалить запись + A request for deleting entry "%1" has been received. Do you want to delete the entry? - Получен запрос на удаление записи «%1». + Получен запрос на удаление записи "%1". Удалить эту запись? - %1 (Passkey) - %1 (Passkey) + Converting attributes to custom data… + Преобразование атрибутов в пользовательских данных... - KeePassXC - Create a new group - KeePassXC - Создать новую группу + Abort + Прервать - Disable - Выключено + KeePassXC: Converted KeePassHTTP attributes + KeePassXC: Атрибуты KeePassHTTP преобразованы - KeePassXC - Overwrite existing key? - KeePassXC - Перезаписать существующий ключ? + 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 - Update Entry - KeePassXC - Обновить Запись + KeePassXC: No entry with KeePassHTTP attributes found! + KeePassXC: Не найдено записи с атрибутами KeePassHTTP! - KeePassXC - Delete entry - KeePassXC - Удалить запись + The active database does not contain an entry with KeePassHTTP attributes. + В активной базе данных нет записи с атрибутами KeePassHTTP. - KeePassXC - New key association request - KeePassXC - Запрос на ассоциацию нового ключа + Don't show this warning again + Не показывать это предупреждение - Passkey - Passkey + KeePassXC: Legacy browser integration settings detected + KeePassXC: Обнаружена устаревшая интеграция с браузером - KeePassXC - Passkey credentials - KeePassXC - учетные данные Passkey - - - Register a new passkey to this entry: - Зарегистрировать новый passkey для этой записи: - - - KeePassXC - Update passkey - KeePassXC - Обновить passkey - - - Entry already has a passkey. -Do you want to overwrite the passkey in %1 - %2? - У записи уже есть passkey. -Хотите перезаписать passkey в %1 - %2? - - - Register - Зарегистрироваться + 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? + Ваши настройки KeePassXC-Browser требуется переместить в настройки базы данных. +Это необходимо, чтобы поддерживать текущие подключения браузера. +Хотите перенести настройки сейчас? @@ -1075,6 +974,10 @@ Do you want to overwrite the passkey in %1 - %2? General Общие + + Browsers installed as snaps are currently not supported. + Браузеры, установленные в виде snap-пакетов, в настоящее время не поддерживаются. + Enable integration for these browsers: Включить интеграцию для браузеров: @@ -1114,7 +1017,7 @@ Do you want to overwrite the passkey in %1 - %2? Request to unlock the database if it is locked - Запрашивать разблокировку базы данных, если она заблокирована + Запрашивать открытие базы данных, если она заблокирована Only entries with the same scheme (http://, https://, …) are returned. @@ -1142,7 +1045,7 @@ Do you want to overwrite the passkey in %1 - %2? All databases connected to the extension will return matching credentials. - Получать результаты поиска из всех подключённых баз данных. + Получать результаты поиска из всех подключённых баз данных Search in all opened databases for matching credentials @@ -1174,15 +1077,15 @@ Do you want to overwrite the passkey in %1 - %2? Return advanced string fields which start with "KPH: " - Возвращать дополнительные строковые поля, начинающиеся с «KPH: » + Возвращать дополнительные строковые поля, начинающиеся с "KPH: " Don't display the popup suggesting migration of legacy KeePassHTTP settings. - Не показывать напоминание о переносе устаревших параметров KeePassHTTP. + Не показывать напоминание о переносе устаревших настроек KeePassHTTP. Do not prompt for KeePassHTTP settings migration. - Не показывать напоминание о переносе устаревших параметров KeePassHTTP. + Не показывать напоминание о переносе устаревших настроек KeePassHTTP Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. @@ -1246,6 +1149,26 @@ Do you want to overwrite the passkey in %1 - %2? Custom extension ID Пользовательский идентификатор расширения + + Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 + Так как Snap это песочница, для включения браузерной интеграции нужно выполнить сценарий.<br />Этот сценарий можно получить с %1 + + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 + Для интеграции требуется установить расширение для браузера «KeePassXC-Browser». <br />Установите его для %1, %2 и %3. %4 + + + Please see special instructions for browser extension use below + Ознакомьтесь с инструкциями по использованию расширения браузера ниже + + + <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. + <b>Внимание:</b> не удалось найти заданное пользователем расположение прокси.<br/> Интеграция с браузером НЕ РАБОТАЕТ без приложения прокси. + + + <b>Warning:</b> The following options can be dangerous! + <b>ВНИМАНИЕ:</b> Следующие настройки могут быть опасны! + Executable Files Исполняемые файлы @@ -1262,56 +1185,16 @@ Do you want to overwrite the passkey in %1 - %2? Select native messaging host folder location Выбрать расположение папки native messaging - - Allow keepassxc-proxy to list all entries with their title, URL and UUID in connected databases. - Разрешить keepassxc-proxy перечислять все записи с их названием, URL и UUID в подключенных базах данных. - - - Allow limited access to all entries in connected databases (ignores site access restrictions) - Разрешить ограниченный доступ ко всем записям в подключенных базах данных (игнорирует ограничения доступа к сайту) - - - <b>Warning:</b> Only adjust these settings if necessary. - <b>Предупреждение:</b> изменяйте эти настройки только при необходимости. - - - The custom proxy location does not exist. - Пользовательское расположение прокси-сервера не существует. - - - <b>Error:</b> The custom proxy location does not exist. Correct this in the advanced settings tab. - <b>Ошибка:</b> пользовательское расположение прокси-сервера не существует. Исправьте это во вкладке дополнительных настроек. - - - <b>Error:</b> The installed proxy executable is missing from the expected location: %1<br/>Please set a custom proxy location in the advanced settings or reinstall the application. - <b>Ошибка:</b> Установленный исполняемый файл прокси отсутствует в ожидаемом месте: %1<br/> Укажите собственное расположение прокси-сервера в дополнительных настройках или переустановите приложение. - - - Allows using insecure http://localhost with passkeys for testing purposes. - Позволяет использовать небезопасный http://localhost с passkeys для тестирования. - - - Allow using localhost with passkeys - Разрешить использование localhost с passkeys - - - KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. - Для интеграции с браузерами требуется KeePassXC-Browser. <br />Загрузите его для %1 и %2 и %3. - - - Browsers installed using Snap or Flatpak are not supported with exception to Firefox installed using Snap. - Браузеры, установленные с помощью Snap или Flatpak, не поддерживаются, за исключением Firefox, установленного с помощью Snap. - CloneDialog Clone Entry Options - Параметры клонирования записей + Настройки клонирования записей Append ' - Clone' to title - Добавить к названию « — клон» + Добавить к названию « - клон» Replace username and password with references @@ -1324,9 +1207,17 @@ Do you want to overwrite the passkey in %1 - %2? CsvImportWidget + + Import CSV fields + Импорт полей CSV + + + filename + имя файла + size, rows, columns - размер, строк, столбцов + размер, строк, столбцов Column Association @@ -1342,7 +1233,7 @@ Do you want to overwrite the passkey in %1 - %2? Title - Название + Заголовок Group @@ -1426,49 +1317,55 @@ Do you want to overwrite the passkey in %1 - %2? Not Present - Отсутствует + Отусуствует Column %1 Столбец %1 + + Imported from CSV file + Импортировано из CSV-файла + + + Original data: + Исходные данные: + + + Error(s) detected in CSV file! + Ошибки в CSV-файле! + [%n more message(s) skipped] [%n больше сообщений пропущен][%n больше сообщений пропущен][%n больше сообщений пропущен][пропущено сообщений: %n] - Failed to parse CSV file: %1 - Ошибка при разборе файла CSV: %1 + Error + Ошибка - Imported from CSV file: %1 - Импортировано из CSV-файла: %1 - - - No Title Selected - Не выбрано название - - - No title column was selected, entries will be hard to tell apart. -Are you sure you want to import? - Не выбрано название столбца, записи будет трудно различить. -Хотите импортировать? - - - Tags - Теги + CSV import: writer has errors: +%1 + Импорт CSV: запись с ошибками - %1 CsvParserModel + + %1, %2, %3 + file info: bytes, rows, columns + %1, %2, %3 + + + %n byte(s) + %n байт(ов)%n байт(ов)%n байт(ов)%n байт + %n row(s) - CSV row count %n строка%n строк%n строк%n строк %n column(s) - CSV column count %n столбцов%n столбцов%n столбцов%n столбцов @@ -1485,7 +1382,7 @@ Are you sure you want to import? Unable to open file %1. - Не удалось открыть файл %1. + Невозможно открыть файл %1. Error while reading the database: %1 @@ -1505,13 +1402,13 @@ Are you sure you want to import? Database file has unmerged changes. - Файл базы данных имеет несинхронизированные изменения. + Файл базы данных имеет несинхронизированные изменения %1 Backup database located at %2 %1 -Расположение резервной копии базы данных: «%2» +Расположение резервной копии базы данных: «%2» Key not transformed. This is a bug, please report it to the developers. @@ -1521,20 +1418,12 @@ Backup database located at %2 Recycle Bin Корзина - - Database file read error. - Ошибка чтения файла базы данных. - - - No file path was provided. - Не указан путь к файлу. - DatabaseOpenDialog Unlock Database - KeePassXC - Разблокировать базу данных — KeePassXC + Открыть базу данных - KeePassXC @@ -1551,25 +1440,53 @@ Backup database located at %2 Password field Поле пароля + + Enter Additional Credentials (if any): + Дополнительные механизмы аутентификации: + + + Key File: + Файл-ключ: + + + Key file help + Справка о файле-ключе + Hardware key slot selection Выбор слота аппаратного ключа + + Hardware Key: + Аппаратный ключ: + + + Hardware key help + Помощь по аппаратному ключу + Key file to unlock the database - Файл-ключ для разблокирования базы данных + Файл-ключ для открытия базы данных Browse for key file - Открыть диалог выбора файла-ключа + Открыть диалога выбора файла-ключа Browse… Обзор... + + Refresh hardware tokens + Перечитать токены + + + Refresh + Обновить + Unlock Database - Разблокировать базу данных + Открыть базу данных Cancel @@ -1577,7 +1494,7 @@ Backup database located at %2 Unlock - Разблокировать + Открыть Please present or touch your YubiKey to continue… @@ -1601,7 +1518,7 @@ We recommend you update your KeePassXC installation. Вы всё равно можете попробовать открыть её, но она может быть неполной и сохранение любых изменений может привести к потере данных. -Рекомендуется обновить KeePassXC. +Рекомендуем вам обновить KeePassXC. Open database anyway @@ -1609,37 +1526,41 @@ We recommend you update your KeePassXC installation. Database unlock canceled. - Разблокировка базы данных отменена. + Открытие базы данных отменено. Unlock failed and no password given - Неудачное разблокирование, пароль не указан + Неудачное открытие, пароль не указан Unlocking the database failed and you did not enter a password. Do you want to retry with an "empty" password instead? To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. - Не удалось разблокировать базу данных, пароль не был указан. + Не удалось открыть базу данных, пароль не был указан. Повторить попытку с пустым паролем? -Чтобы отключить вывод этого сообщения об ошибке, выполните сброс пароля в меню «Параметры базы данных» → «Безопасность». +Чтобы отключить вывод этого сообщения об ошибке, выполните сброс пароля в меню «Настройки базы данных» → «Безопасность». Retry with empty password Попробовать ещё раз с пустым паролем + + Failed to authenticate with Touch ID + Не удалось пройти аутентификацию с помощью Touch ID + Failed to open key file: %1 Ошибка при открытии файла-ключа: %1 Old key file format - Старый формат файла-ключа + Устаревший формат файла-ключа You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database &gt; Database Security &gt; Change Key File.</strong><br> - Используется файл-ключ устаревшего формата, поддержка которого в KeePassXC <br>может быть прекращена в будущем.<br><br>Рекомендуется создать новый файл ключ: перейдите в раздел<br><strong>База данных &gt; Безопасность базы данных &gt; Изменить файл-ключ.</strong><br> + Вы используете файл-ключ устаревшего формата, поддержка которого в KeePassXC <br>может быть прекращена в будущем.<br><br>Рекомендуется создать новый файл ключ: перейдите в раздел<br><strong>База данных &gt; Безопасность базы данных &gt; Изменить файл-ключ.</strong><br> Don't show this warning again @@ -1661,69 +1582,40 @@ To prevent this error from appearing, you must go to "Database Settings / S Cannot use database file as key file Файл базы данных не может быть файлом-ключом + + You cannot use your database file as a key file. +If you do not have a key file, please leave the field empty. + Файл базы данных не может быть использован в качестве файла-ключа. Если файл-ключ не используется, оставьте это поле пустым. + + + Detecting hardware keys… + Обнаружение аппаратных ключей... + + + No hardware keys detected + Аппаратные ключи не обнаружены + + + Select hardware key… + Выберите аппаратный ключ... + + + <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information…</p> + <p>Для усиления защиты базы данных в дополнение к основному паролю возможно использовать тайный файл. Такой файл может быть создан в разделе «Безопасность» диалога настроек базы данных.</p><p>Файл-ключ <strong>не является</strong> файлом базы данных в формате *.kdbx!<br>Если файл-ключ не используется, оставьте это поле пустым.</p><p>Нажмите для получения дополнительных сведений…</p> + + + <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +<p>Click for more information…</p> + <p>Возможно использовать аппаратные ключи безопасности, такие как <strong>Yubikey</strong> или <strong>OneKey</strong> со слотами, настроенными в режиме HMAC-SHA1.</p> +<p>Нажмите здесь для получения дополнительных сведений…</p> + authenticate to access the database аутентифицироваться для доступа к базе данных - Failed to authenticate with Quick Unlock: %1 - Не удалось пройти аутентификацию с помощью Quick Unlock: %1 - - - Select Key File: - Выберите файл-ключ: - - - <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!</p> - <p>Кроме пароля, вы можете использовать секретный файл для усиления безопасности вашей базы данных. Этот файл может быть сгенерирован в настройках безопасности вашей базы данных. </p><p>Это <strong>не</strong> ваш файл базы данных *.kdbx!</p> - - - Use hardware key [Serial: %1] - Использовать аппаратный ключ [Серийный номер: %1] - - - Use hardware key - Выберите аппаратный ключ - - - Your database file is NOT a key file! -If you don't have a key file or don't know what that is, you don't have to select one. - Ваш файл базы данных НЕ файл-ключ! -Если у вас нет ключевого файла или вы не знаете, что это такое, вам не нужно его выбирать. - - - KeePassXC database file selected - Выбран файл базы данных KeePassXC - - - The file you selected looks like a database file. -A database file is NOT a key file! - -Are you sure you want to continue with this file?. - Выбранный вами файл похож на файл базы данных. -Файл базы данных НЕ файл-ключ! - -Вы уверены, что хотите продолжить с этим файлом? - - - No hardware keys found. - Аппаратные ключи не найдены. - - - Refresh Hardware Keys - Обновить аппаратные ключи - - - Click to add a key file. - Нажмите, чтобы добавить файл-ключ. - - - <a href="#" style="text-decoration: underline">I have a key file</a> - <a href="#" style="text-decoration: underline">У меня есть файл-ключ</a> - - - Hardware keys found, but no slots are configured. - Аппаратные ключи найдены, но ни один слот не настроен. + Failed to authenticate with Windows Hello: %1 + Не удалось пройти аутентификацию с помощью Windows Hello: %1 @@ -1735,6 +1627,10 @@ Are you sure you want to continue with this file?. DatabaseSettingsDialog + + Advanced Settings + Дополнительные настройки + General Общие @@ -1749,7 +1645,7 @@ Are you sure you want to continue with this file?. Encryption Settings - Параметры шифрования + Настройки шифрования Browser Integration @@ -1759,28 +1655,24 @@ Are you sure you want to continue with this file?. Maintenance Обслуживание - - KeeShare - KeeShare - - - Secret Service Integration - Интеграция с секретной службой - - - Remote Sync - Удалённая синхронизация - - - Database Settings: %1 - Параметры базы данных: %1 - DatabaseSettingsWidgetBrowser KeePassXC-Browser settings - Параметры KeePassXC-Browser + Настройки KeePassXC-Browser + + + Convert KeePassHTTP data + Преобразование данных KeePassHTTP + + + Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data + Преобразование устаревших атрибутов KeePassHTTP в пользовательские данные, совместимые с KeePassXC-Browser + + + Refresh database root group ID + Обновление идентификатора корневой записи базы данных Disconnect all browsers @@ -1788,11 +1680,7 @@ Are you sure you want to continue with this file?. Forget all site-specific settings on entries - Забыть все параметры записей для конкретных сайтов - - - Refresh database root group ID - Обновление идентификатора корневой записи базы данных + Забыть все настройки записей для конкретных сайтов Stored keys @@ -1834,7 +1722,7 @@ This may prevent connection to the browser plugin. Enable Browser Integration to access these settings. - Для доступа к этим параметрам требуется включить интеграцию с браузером. + Для доступа к этим настройкам требуется включить интеграцию с браузером. Do you really want to disconnect all browsers? @@ -1842,10 +1730,18 @@ This may prevent connection to the browser plugin. Вы действительно хотите отключить все браузеры? Это может помешать подключению к плагину браузера. + + KeePassXC: No keys found + KeePassXC: Ключи не найдены + No shared encryption keys found in KeePassXC settings. В настройках KeePassXC нет общих ключей шифрования. + + KeePassXC: Removed keys from database + KeePassXC: Ключи удалены из базы данных + Successfully removed %n encryption key(s) from KeePassXC settings. Успешно удалён %n ключ шифрования из настроек KeePassXC.Успешно удалёны %n ключа шифрования из настроек KeePassXC.Успешно удалёны %n ключей шифрования из настроек KeePassXC.Успешно удалено ключей шифрования из настроек KeePassXC: %n. @@ -1864,14 +1760,32 @@ Permissions to access entries will be revoked. 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. В активной базе данных нет записей с разрешениями. + + Move KeePassHTTP attributes to custom data + Переместить атрибуты KeePassHTTP в пользовательские данные + + + Do you really want to convert all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + Действительно привести все устаревшие данные интеграции браузера к новому стандарту? +Это необходимо для поддержания совместимости с подключаемым модулем браузера. + Refresh database ID Обновление идентификатора базы данных @@ -1882,26 +1796,6 @@ This is only necessary if your database is a copy of another and the browser ext Действительно хотите перезагруить ID базы данных? Это необходимо только если ваша база является копией другой и браузерное расширение не может подключиться. - - Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data - Преобразование устаревших атрибутов KeePassHTTP в пользовательские данные, совместимые с KeePassXC-Browser - - - No keys found - Ключи не найдены - - - Removed keys from database - Ключи удалены из базы данных - - - Removed permissions - Разрешения удалены - - - No entry with permissions found! - Записи с разрешениями не найдены! - DatabaseSettingsWidgetDatabaseKey @@ -1941,18 +1835,6 @@ Are you sure you want to continue without a password? Failed to change database credentials Не получилось изменить учётные данные базы - - Weak password - Слабый пароль - - - This is a weak password! For better protection of your secrets, you should choose a stronger password. - Это слабый пароль! Для лучшей защиты ваших секретов вам следует выбрать более надежный пароль. - - - The provided password does not meet the minimum quality requirement. - Предоставленный пароль не соответствует минимальным требованиям к качеству. - DatabaseSettingsWidgetEncryption @@ -1960,9 +1842,17 @@ Are you sure you want to continue without a password? Decryption Time: Время расшифровки: + + Change existing decryption time + Изменить время расшифровывания + + + Change + Изменить + Decryption time in seconds - Время расшифровки в секундах + Время расшифровывания в секундах Higher values offer more protection, but opening the database will take longer. @@ -1978,7 +1868,7 @@ Are you sure you want to continue without a password? Format cannot be changed: Your database uses KDBX 4 features - Формат не может быть изменён: ваша база данных использует функции KDBX 4 + Формат не может быть изменен: ваша база данных использует функции KDBX 4 Unless you need to open your database with other programs, always use the latest format. @@ -2014,7 +1904,7 @@ Are you sure you want to continue without a password? Transform rounds - Циклов преобразования + Раундов преобразования: Memory Usage: @@ -2040,6 +1930,11 @@ Are you sure you want to continue without a password? KDBX 3 KDBX 3 + + unchanged + Database decryption time is unchanged + без изменений + Number of rounds too high Key transformation rounds @@ -2080,7 +1975,7 @@ If you keep this number, your database will not be protected from brute force at Failed to transform key with new KDF parameters; KDF unchanged. - Ошибка преобразования ФФК с новыми параметрами; ФФК не изменена. + Ошибка преобразования ФФК с новыми настройками; ФФК не изменена. MiB @@ -2092,18 +1987,6 @@ If you keep this number, your database will not be protected from brute force at Threads for parallel execution (KDF settings) потоков потоков потоков потоков - - Encryption Settings: - Настройки шифрования: - - - Basic - Основной - - - Advanced - Дополнительные - DatabaseSettingsWidgetFdoSecrets @@ -2121,7 +2004,7 @@ If you keep this number, your database will not be protected from brute force at Enable Secret Service to access these settings. - Включите службу Secret Service, чтобы настроить эти параметры. + Включите службу Secret Service, чтобы изменить эти настройки. @@ -2156,7 +2039,7 @@ If you keep this number, your database will not be protected from brute force at History Settings - Параметры истории + Настройки истории Maximum number of history items per entry @@ -2176,7 +2059,7 @@ If you keep this number, your database will not be protected from brute force at Additional Database Settings - Дополнительные параметры базы данных + Дополнительные настройки базы данных Enable compression (recommended) @@ -2231,73 +2114,9 @@ Entries deleted from the recycle bin are removed from the database. Перемещать записи в корзину группы вместо удаления их из базы данных. -Записи, удалённые из корзины, +Записи, удаленные из корзины, также удаляются из базы данных. - - Autosave delay since last change - Задержка автосохранения с последнего изменения - - - Autosave delay - Задержка автосохранения - - - Autosave delay since last change in minutes - Задержка автосохранения с последнего изменения в минутах - - - min - мин - - - Autosave delay since last change checkbox - Задержка автосохранения с последнего изменения галочки - - - Public Database Metadata - Метаданные публичной базы данных - - - Warning: the following settings are not encrypted. - Внимание: следующие параметры не зашифрованы. - - - Display name: - Отображаемое имя: - - - Publically visible display name used on the unlock dialog - Публичное отображаемое имя, используемое в диалоге разблокировки - - - Database public display name - Публичное имя базы данных - - - Display color: - Отображаемый цвет: - - - Publically visible color used on the unlock dialog - Публично видимый цвет, используемый в диалоге разблокировки - - - Database public display color chooser - Выбор цвета для публичного отображения базы данных - - - Clear - Очистить - - - Display icon: - Отображаемый значок: - - - Select Database Icon - Выбрать значок базы данных - DatabaseSettingsWidgetKeeShare @@ -2328,7 +2147,7 @@ removed from the database. > Breadcrumb separator - > + > @@ -2351,7 +2170,7 @@ removed from the database. Confirm Deletion - Подтверждение удаления + Подтверждение удаление At least one of the selected icons is currently in use by at least one entry or group. The icons of all affected entries and groups will be replaced by the default icon. Are you sure you want to delete icons that are currently in use? @@ -2393,141 +2212,6 @@ removed from the database. Поле описания базы данных - - DatabaseSettingsWidgetRemote - - Sync Commands - Команды синхронизации - - - Remove - Удалить - - - Command Settings - Параметры команд - - - Name - Имя - - - Save - Сохранить - - - Download - Загрузить - - - Command: - Команда: - - - Download command field - Поле команды загрузки - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - Например: "sftp user@hostname" или "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - - - Input: - Ввод: - - - Download input field - Поле ввода загрузки - - - Upload - Выгрузить - - - Upload command field - Поле команды выгрузки - - - e.g.: "sftp user@hostname" or "scp {TEMP_DATABASE} user@hostname:DatabaseOnRemote.kdbx" - Например: "sftp user@hostname" или "scp {TEMP_DATABASE} user@hostname:DatabaseOnRemote.kdbx" - - - Upload input field - Поле команды выгрузки - - - Name cannot be empty. - Имя не может быть пустым. - - - Test - Тест - - - Download command cannot be empty. - Команда загрузки не может быть пустой. - - - Download failed with error: %1 - Загрузка завершилась с ошибкой: %1 - - - Download finished, but file %1 could not be found. - Загрузка завершена, но файл %1 не найден. - - - Download successful. - Загрузка завершена. - - - Save Remote Settings - Сохранить удаленные параметры - - - You have unsaved changes. Do you want to save them? - У вас есть несохраненные изменения. Хотите сохранить их? - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - Например: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} используется в качестве заполнителя для хранения базы данных во временном месте. -Команда должна завершиться. В случае с `sftp` в качестве последней команды необходимо отправить `exit`. - - - - e.g.: -put {TEMP_DATABASE} DatabaseOnRemote.kdbx -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - Например: -put {TEMP_DATABASE} DatabaseOnRemote.kdbx -exit ---- -{TEMP_DATABASE} используется в качестве заполнителя для хранения базы данных во временном месте. -Команда должна завершиться. В случае с `sftp` в качестве последней команды необходимо отправить `exit`. - - - - Timeout: - Таймаут: - - - seconds - сек - - DatabaseTabWidget @@ -2560,10 +2244,26 @@ This is definitely a bug, please report it to the developers. CSV file Файл CSV + + Select CSV file + Выберите CSV-файл + Merge database Объединить базу данных + + KeePass 1 database + База данных KeePass 1 + + + Open KeePass 1 database + Открыть базу данных KeePass 1 + + + Open OPVault + Открыть OPVault + Export database to CSV file Экспортировать базу данных в файл CSV @@ -2574,7 +2274,29 @@ This is definitely a bug, please report it to the developers. Writing the HTML file failed. - Ошибка записи HTML-файла. + Ошибка записи HTML файла. + + + Export Confirmation + Подтверждение экспортирования + + + You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? + При продолжении, будет выполнен экспорт базы данных в незашифрованный файл, что делает доступными содержащиеся в нём пароли и другие чувствительные данные. Продолжить экспортирование? + + + New Database + Новая база данных + + + %1 [New Database] + Database tab name modifier + %1 [новая база данных] + + + %1 [Locked] + Database tab name modifier + %1 [заблокировано] Export database to XML file @@ -2588,31 +2310,9 @@ This is definitely a bug, please report it to the developers. Writing the XML file failed Ошибка записи XML-файла - - Export Confirmation - Подтверждение экспорта - - - You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? - При продолжении будет выполнен экспорт базы данных в незашифрованный файл, что делает доступными содержащиеся в нём пароли и другие чувствительные данные. Продолжить экспорт? - - - %1 [Locked] - Database tab name modifier - %1 [заблокировано] - - - %1 [Temporary] - Database tab name modifier - %1 [Временный] - DatabaseWidget - - Searches and Tags - Поиск и теги - Searching… Поиск... @@ -2655,16 +2355,12 @@ This is definitely a bug, please report it to the developers. Do you really want to move the group "%1" to the recycle bin? - Вы действительно хотите переместить группу «%1» в корзину? + Вы действительно хотите переместить группу "%1" в корзину? Expired entries Просроченные записи - - Entries expiring within %1 day(s) - Записи, истекающие в течение %1 дняЗаписи, истекающие в течение %1 днейЗаписи, истекающие в течение %1 днейЗаписи, истекающие в течение %1 дней - No current database. Нет текущей базы данных. @@ -2689,18 +2385,6 @@ This is definitely a bug, please report it to the developers. No Results Нет результатов - - Save - Сохранить - - - Enter a unique name or overwrite an existing search from the list: - Введите уникальное имя или замените существующую поисковую строку из списка: - - - Save Search - Сохранить поиск - Lock Database? Заблокировать базу данных? @@ -2729,6 +2413,26 @@ Save changes? 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? + База данных была изменена, есть несохранённые изменения. +Объединить изменения? + + + Could not open the new database file while attempting to autoreload. +Error: %1 + Не удалось открыть новый файл базы данных при попытке автоматически загрузить повторно. +Ошибка: %1 + Disable safe saves? Отключить безопасное сохранение? @@ -2771,94 +2475,25 @@ Disable safe saves and try again? Could not find database file: %1 Не удалось найти файл базы данных: %1 - - New Database - Новая база данных + + Entries expiring within %1 day(s) + Записи, истекающие в течение %1 дняЗаписи, истекающие в течение %1 днейЗаписи, истекающие в течение %1 днейЗаписи, истекающие в течение %1 дней - %1 [New Database] - Database tab name modifier - %1 [новая база данных] + Searches and Tags + Поиск и метки - Remote Sync did not contain any download or upload commands. - Удаленная синхронизация не содержала команд загрузки или выгрузки. + Enter a unique name or overwrite an existing search from the list: + Введите уникальное имя или замените существующую поисковую строку из списка: - Remote sync '%1' completed successfully! - Удаленная синхронизация '%1' успешно завершена! + Save + Сохранить - Remote sync '%1' failed: %2 - Удаленная синхронизация '%1' не удалась: %2 - - - Error while saving database %1: %2 - Ошибка при сохранении базы данных %1: %2 - - - Downloading... - Загрузка... - - - Uploading... - Выгрузка... - - - Syncing... - Синхронизация... - - - Remove passkey from entry - Удалить passkey из записи - - - Do you want to remove the passkey from this entry? - Удалить passkey из этой записи? - - - The database file "%1" was modified externally - Файл базы данных "%1" был изменен извне - - - Do you want to load the changes? - Вы хотите загрузить изменения? - - - Reload database - Перезагрузить базу данных - - - Reloading database… - Перезагрузка базы данных... - - - Reload canceled - Перезагрузка отменена - - - Reload successful - Перезагрузка завершена - - - Reload pending user action… - Перезагрузка в ожидании действия пользователя... - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes<br>Ignore the changes on disk until save<br>Discard unsaved changes - Файл базы данных "%1" был изменен извне.<br>Как вы хотите поступить?<br><br>Объединить все изменения<br>Игнорировать изменения на диске до сохранения<br>Отменить несохраненные изменения - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes then save<br>Overwrite the changes on disk<br>Discard unsaved changes - Файл базы данных "%1" был изменен извне.<br>Как вы хотите поступить?<br><br>Объединить все изменения и сохранить<br>Перезаписать изменения на диске<br>Отменить несохраненные изменения - - - Database file overwritten. - Файл базы данных перезаписан. - - - Database file on disk cannot be unlocked with current credentials.<br>Enter new credentials and/or present hardware key to continue. - Файл базы данных на диске не может быть разблокирован с текущими учетными данными.<br>Введите новые учетные данные и/или используйте аппаратный ключ для продолжения. + Save Search + Сохранить поиск @@ -2897,7 +2532,7 @@ Disable safe saves and try again? Properties - Свойства + Настройки History @@ -2911,6 +2546,10 @@ Disable safe saves and try again? n/a н/д + + (encrypted) + (зашифровано) + Select private key Выберите закрытый (личный) ключ @@ -2929,7 +2568,7 @@ Disable safe saves and try again? Some Browser Integration settings are overridden by group settings. - Некоторые параметры интеграции c браузером могут быть переопределены настройками группы. + Некоторые настройки интеграции c браузером могут быть переопределены настройками группы. Invalid Entry @@ -2956,7 +2595,7 @@ Would you like to correct it? An error occurred while validating the Auto-Type sequence for "%1": %2 Would you like to correct it? - При проверке последовательности автоввода для «%1» произошла ошибка: + При проверке последовательности автоввода для "%1" произошла ошибка: %2 Внести исправления? @@ -2966,7 +2605,7 @@ Would you like to correct it? Unsaved Changes - Несохранённые изменения + Несохраненные изменения Would you like to save changes to this entry? @@ -2996,10 +2635,6 @@ Would you like to correct it? Hide Скрыть - - %n hour(s) - %n час%n часа%n часов%n часов - %n week(s) %n нед%n нед%n нед%n нед. @@ -3012,9 +2647,9 @@ Would you like to correct it? %n year(s) %n год%n лет%n лет%n лет - - Failed to decrypt SSH key, ensure password is correct. - Не удалось расшифровать ключ SSH, проверьте правильность пароля. + + %n hour(s) + %n час%n час(а)%n час(ов)%n час(ов) @@ -3065,7 +2700,7 @@ Would you like to correct it? Show a protected attribute - Показать защищённый атрибут + Показать защищённый атрибут Reveal @@ -3077,11 +2712,11 @@ Would you like to correct it? If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements. - Если этот параметр включён, запись не будет показана в таких отчётах, как «Проверка безопасности» и HIBP, даже если она не соответствует требованиям к качеству. + Если эта настройка включена, запись не будет показана в таких отчётах, как «Проверка безопасности» и HIBP, даже если она не соответствует требованиям к качеству. Exclude from database reports - Исключить из отчётов + Исключить из отчетов Foreground Color: @@ -3134,20 +2769,10 @@ Would you like to correct it? Add new window association Добавить ассоциацию с окном - - + - Add item - + - Remove selected window association Удалить выбранную ассоциацию с окном - - - - Remove item - - - Window title: Заголовок окна: @@ -3172,9 +2797,23 @@ Would you like to correct it? Custom Auto-Type sequence for this window Пользовательская последовательность автоввода для этого окна + + + + Add item + + + + + - + Remove item + - + EditEntryWidgetBrowser + + These settings affect to the entry's behaviour with the browser extension. + Эти настройки влияют на данные, возвращаемые при запросе из расширения браузера. + General Общие @@ -3187,13 +2826,25 @@ Would you like to correct it? Skip Auto-Submit for this entry Не использовать автоматическую отправку данных форм для этой записи + + Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. + Отправлять эту настройку только браузерным диалогам для HTTP Auth. Если включено, обычные формы авторизации не покажут запись среди вариантов выбора. + Use this entry only with HTTP Basic Auth Использовать эту запись только при обычной проверке подлинности HTTP + + Do not send this setting to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. + Не отправлять эту настройку в браузер для HTTP Auth диалогов. Если включено, данные диалоги не покажутся для этой записи для выбора. + Do not use this entry with HTTP Basic Auth - Не использовать эту запись для базовой HTTP-авторизации + Не использовать эту запись для базовой HTTP авторизации + + + Additional URL's + Дополнительные URL-адреса Add @@ -3207,22 +2858,6 @@ Would you like to correct it? Edit Изменить - - These settings affect the entry's behaviour with the browser extension. - Эти параметры влияют на данные, возвращаемые при запросе из расширения для браузера. - - - Additional URLs - Дополнительные URL-адреса - - - Only send this entry to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. - Отправлять эту запись только браузерным диалогам HTTP Auth. Если включено, обычные формы авторизации не покажут запись среди вариантов выбора. - - - Do not send this entry to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. - Не отправлять эту запись браузерным диалогам HTTP Auth. Если включено, в этих диалогах не будет выбора данной записи. - EditEntryWidgetHistory @@ -3323,7 +2958,7 @@ Would you like to correct it? &Title: - &Название: + &Заголовок: &Password: @@ -3343,7 +2978,7 @@ Would you like to correct it? T&ags: - Т&еги: + T&ags: &Expires: @@ -3366,7 +3001,7 @@ Would you like to correct it? Add key to agent when database is opened/unlocked - Добавить ключ в агент при открытии/разблокировке базы данных + Добавить ключ в агент при открытии базы данных Decrypt @@ -3388,6 +3023,19 @@ Would you like to correct it? Private key Закрытый (личный) ключ + + External file + Внешний файл + + + Browser for key file + Выбор файла-ключа + + + Browse… + Button for opening file dialog + Обзор... + Attachment Вложение @@ -3404,23 +3052,6 @@ Would you like to correct it? Remove from agent Убрать из агента - - External file - Внешний файл - - - Browser for key file - Выбор файла-ключа - - - Browse… - Button for opening file dialog - Обзор... - - - Generate - Генерировать - Select attachment file Выберите файл вложения @@ -3445,10 +3076,6 @@ Would you like to correct it? seconds с - - Clear agent - Очистить агент - EditGroupWidget @@ -3460,9 +3087,13 @@ Would you like to correct it? Icon Значок + + Browser Integration + Интеграция с браузерами + Properties - Свойства + Настройки Add group @@ -3474,11 +3105,7 @@ Would you like to correct it? Group has unsaved changes - Группа имеет несохранённые изменения - - - Browser Integration - Интеграция с браузером + Группа имеет несохраненные изменения Enable @@ -3497,7 +3124,7 @@ Would you like to correct it? EditGroupWidgetBrowser These settings affect to the group's behaviour with the browser extension. - Эти параметры влияют на взаимодействие с расширением браузера. + Эти настройки влияют на взаимодействие с расширением браузера. Hide entries from browser extension: @@ -3509,11 +3136,11 @@ Would you like to correct it? Skip Auto-Submit for entries: - Не использовать автоотправку для записей: + Не использовать Авто-Отправку для записей: Skip Auto-Submit toggle for this and sub groups - Не использовать автооправку для этой группы и её подгрупп + Не использовать Авто-Отправку для этой группы и её подгрупп Use entries only with HTTP Basic Auth: @@ -3525,7 +3152,7 @@ Would you like to correct it? Do not use entries with HTTP Basic Auth: - Не использовать записи с HTTP Basic Auth: + Не используйте записи с HTTP Basic Auth: Do not use HTTP Auth toggle for this and sub groups @@ -3537,15 +3164,7 @@ Would you like to correct it? Omit WWW subdomain from matching toggle for this and sub groups - Исключить субдомен WWW из переключателя соответствия для этой группы и подгрупп - - - Restrict matching to given browser key: - Ограничить сопоставление по заданному ключу браузера: - - - Restrict matching to given browser key toggle for this and sub groups - Ограничить сопоставление данным переключателем клавиши браузера для этой и подгрупп + Исключить субдомен WWW из переключателя соответствия для этой и подгруппgargar @@ -3609,8 +3228,7 @@ Would you like to correct it? Your KeePassXC version does not support sharing this container type. Supported extensions are: %1. - Установленная версия KeePassXC не поддерживает совместное использование -контейнера такого типа. Список поддерживаемых расширений: %1. + Установленная версия KeePassXC не поддерживает совместное использование контейнера такого типа. Список поддерживаемых расширений: %1. %1 is already being exported by this database. @@ -3627,19 +3245,19 @@ Supported extensions are: %1. KeeShare is currently disabled. You can enable import/export in the application settings. KeeShare is a proper noun - Обмен записями KeeShare отключён. Включите возможность импорта и/или экспорта в параметрах приложения. + Обмен записями KeeShare отключён. Включите возможность импорта и/или экспорта в настройках приложения. Database export is currently disabled by application settings. - Экспорт базы данных запрещён параметрами приложения. + Экспорт базы данных запрещён настройками приложения. Database import is currently disabled by application settings. - Импорт в базу данных запрещён параметрами приложения. + Импорт в базу данных запрещён настройками приложения. KeeShare container - Контейнер KeeShare + KeeShare контейнер KeeShare signed container @@ -3682,7 +3300,7 @@ Supported extensions are: %1. Use default Auto-Type sequence of parent group - Использовать последовательность по умолчанию для автоввода родительской группы + &Использовать последовательность по умолчанию автоввода родительской группы Auto-Type: @@ -3698,7 +3316,7 @@ Supported extensions are: %1. Notes: - Заметки: + Примечания: Default auto-type sequence field @@ -3737,11 +3355,11 @@ Supported extensions are: %1. Set the URL to use to search for a favicon - Указать URL-адрес для поиска значка + Указать URL-адрес для поиска значка. Favicon URL - Значок сайта для URL + Favicon URL Download favicon for URL @@ -3749,7 +3367,7 @@ Supported extensions are: %1. Download favicon - Загрузить значок сайта + Скачать значок сайта Apply selected icon to subgroups and entries @@ -3779,6 +3397,10 @@ Supported extensions are: %1. Unable to fetch favicon. Не удалось получить значок. + + You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security + Возможно использовать службу поиска значков сайта DuckDuckGo в меню «Сервис» → «Настройки» → «Безопасность» + Existing icon selected. Выбран существующий значок. @@ -3811,10 +3433,6 @@ Supported extensions are: %1. The following icon(s) failed: Следующий значок потерпел неудачу:Следующие значки потерпели неудачу:Следующие значки потерпели неудачу:Ошибки в следующих значках: - - You can enable the DuckDuckGo website icon service under Application Settings -> Security - Вы можете включить службу значков сайта DuckDuckGo в Настроках приложения -> Безопасность - EditWidgetProperties @@ -3852,11 +3470,11 @@ Supported extensions are: %1. Plugin Data - Данные подключаемого модуля + Данные плагинов Plugin data - Данные подключаемого модуля + Данные подключаемого модуля Remove selected plugin data @@ -3868,13 +3486,13 @@ Supported extensions are: %1. Delete plugin data? - Удалить данные модулей? + Удалить данные плагинов? Do you really want to delete the selected plugin data? This may cause the affected plugins to malfunction. - Вы действительно хотите удалить выбранные данные модулей? -Это может привести к сбоям модулей. + Вы действительно хотите удалить выбранные данные плагинов? +Это может привести к сбоям плагинов. Key @@ -3889,47 +3507,14 @@ This may cause the affected plugins to malfunction. Entry %1 - Clone - %1 — клон - - - Passkey - Passkey - - - Invalid conversion type: %1 - Недопустимый тип преобразования: %1 - - - Invalid conversion syntax: %1 - Недопустимый синтаксис преобразования: %1 - - - Invalid regular expression syntax %1 -%2 - Недопустимый синтаксис регулярного выражения %1 -%2 + %1 - клон EntryAttachments Cannot open file "%1" - Не удалось открыть файл "%1" - - - - EntryAttachmentsDialog - - Form - Форма - - - File name - Имя файла - - - File contents... - Содержимое файла... + Невозможно открыть файл "%1". @@ -3969,6 +3554,14 @@ This may cause the affected plugins to malfunction. Remove Удалить + + Rename selected attachment + Переименовать выбранное вложение + + + Rename + Переименовать + Open selected attachment Открыть выбранное вложение @@ -4009,7 +3602,7 @@ This may cause the affected plugins to malfunction. Are you sure you want to overwrite the existing file "%1" with the attachment? - Вы действительно хотите перезаписать имеющийся файл «%1» с вложением? + Вы действительно хотите перезаписать имеющийся файл "%1" с вложением? Confirm overwrite @@ -4046,6 +3639,12 @@ This may cause the affected plugins to malfunction. Confirm Overwrite Attachment Подтвердить перезапись вложения + + Attachment "%1" already exists. +Would you like to overwrite the existing attachment? + Вложение "%1" уже существует. +Хотите перезаписать существующее вложение? + Confirm Attachment Подтвердить вложение @@ -4067,7 +3666,7 @@ Are you sure to add this file? The attachment '%1' was modified. Do you want to save the changes to your database? - Вложение «%1» было изменено. + Вложение "%1" было изменено. Сохранить изменения в базе данных? @@ -4080,24 +3679,6 @@ Error: %1 Не удалось сохранить обновлённое вложение. Ошибка: %1 - - Attachment "%1" already exists. -Would you like to overwrite the existing attachment? - Вложение «%1» уже существует. -Перезаписать существующее вложение? - - - New - Новый - - - Preview - Просмотр - - - Failed to preview an attachment: Attachment not found - Не удалось просмотреть вложение: Вложение не найдено - EntryAttributesModel @@ -4130,7 +3711,7 @@ Would you like to overwrite the existing attachment? Title - Название + Имя записи Username @@ -4146,7 +3727,7 @@ Would you like to overwrite the existing attachment? Notes - Заметки + Примечания Custom Attributes @@ -4182,7 +3763,7 @@ Would you like to overwrite the existing attachment? Tags - Теги + Метки @@ -4202,7 +3783,7 @@ Would you like to overwrite the existing attachment? Title - Название + Имя записи Username @@ -4218,7 +3799,7 @@ Would you like to overwrite the existing attachment? Notes - Заметки + Примечания Expires @@ -4258,7 +3839,7 @@ Would you like to overwrite the existing attachment? Entry notes - Заметки к записи + Примечания записи Entry expires at @@ -4292,14 +3873,6 @@ Would you like to overwrite the existing attachment? Has TOTP Использует TOTP - - Background Color - Цвет фона - - - Group Path - Путь группы - EntryPreviewWidget @@ -4320,8 +3893,8 @@ Would you like to overwrite the existing attachment? Пароль - URL - URL-адрес + Notes + Примечания Expiration @@ -4329,7 +3902,7 @@ Would you like to overwrite the existing attachment? Tags - Теги + Метки Tags list @@ -4340,8 +3913,8 @@ Would you like to overwrite the existing attachment? Логин - Notes - Заметки + URL + URL-адрес Advanced @@ -4391,10 +3964,6 @@ Would you like to overwrite the existing attachment? Never Никогда - - Double click to copy value - Дважды щёлкните левой кнопкой мыши, чтобы скопировать значение - Enabled Включено @@ -4404,8 +3973,8 @@ Would you like to overwrite the existing attachment? Отключено - Double click to copy to clipboard - Дважды щёлкните, чтобы скопировать в буфер обмена + Double click to copy value + Дважды щелкните, чтобы скопировать значение @@ -4414,10 +3983,6 @@ Would you like to overwrite the existing attachment? Invalid URL Неверный URL - - Duplicate URL - Повторяющийся URL-адрес - EntryView @@ -4431,11 +3996,7 @@ Would you like to overwrite the existing attachment? Reset to defaults - Восстановить значения по умолчанию - - - + %1 entry(s)... - + %1 запись...+ %1 записей...+ %1 записей...+ %1 записей... + Сброс в стандартные значения @@ -4446,14 +4007,13 @@ Would you like to overwrite the existing attachment? Sort entries by... - Сортировать записи по... + Упорядочивать записи по... You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! - При продолжении будет выполнен экспорт базы данных в незашифрованный файл. -Пароли и другие чувствительные данные в базе будут уязвимыми. + При продолжении, будет выполнен экспорт базы данных в незашифрованный файл. Пароли и другие чувствительные данные в базе будут уязвимыми. database order @@ -4473,11 +4033,11 @@ This will leave your passwords and sensitive information vulnerable! Export database to HTML file - Экспортировать базу данных в HTML-файл + Экспортировать базу данных в HTML файл HTML file - HTML-файл + HTML файл @@ -4507,7 +4067,7 @@ This will leave your passwords and sensitive information vulnerable! Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. - Запущен другой Secret Service (%1)<br/>Пожалуйста отключите или удалите его перед тем как включать интеграцию с ним. + Запущен другой Secret Service (%1)<br/>Пожалуйста отключите/удалите его перед тем как включать интеграцию с ним. Failed to register DBus service at %1.<br/> @@ -4515,23 +4075,23 @@ This will leave your passwords and sensitive information vulnerable! Failed to register service on DBus at path '%1' - Ошибка при регистрации службы в DBus по пути «%1» + Ошибка при регистрации службы в DBus по пути '%1' Failed to register database on DBus under the name '%1' - Ошибка при регистрации базы в DBus под именем «%1» + Ошибка при регистрации базы в DBus под именем '%1' Failed to register session on DBus at path '%1' - Ошибка при регистрации сессии в DBus по пути «%1» + Ошибка при регистрации сессии в DBus по пути '%1' Failed to register item on DBus at path '%1' - Ошибка при регистрации службы в DBus по пути «%1» + Ошибка при регистрации службы в DBus по пути '%1' Failed to register prompt object on DBus at path '%1' - Ошибка при регистрации объекта приглашения в DBus по пути «%1» + Ошибка при регистрации объекта приглашения в DBus по пути '%1' @@ -4546,7 +4106,7 @@ This will leave your passwords and sensitive information vulnerable! %n Entry(s) was used by %1 %1 is the name of an application - %n запись использована %1%n записи использованы %1%n записей использованы %1%n записи использованы %1 + %n запись была использована %1%n записей были использованы %1%n записей были использованы %1%n записей были использованы %1 @@ -4557,7 +4117,7 @@ This will leave your passwords and sensitive information vulnerable! Non-existing/inaccessible executable path. Please double-check the client is legit. - Несуществующий/недоступный путь к исполняемому файлу. Перепроверьте подлинность клиента. + Предоставьте этому получателю возможность выдавать пользователям доступ к отчетам @@ -4594,14 +4154,14 @@ This will leave your passwords and sensitive information vulnerable! %1 - Clone - %1 — клон + %1 - клон HibpDownloader Online password validation failed - Не удалось проверить пароль онлайн + Не удалось проверить пароли онлайн @@ -4618,7 +4178,7 @@ This will leave your passwords and sensitive information vulnerable! Having trouble downloading icons? You can enable the DuckDuckGo website icon service in the security section of the application settings. Не удалось получить значки сайтов? -В разделе «Конфиденциальность» вкладки «Безопасность» параметров приложения возможно включить использование службы значков сайта DuckDuckGo. +В разделе «Конфиденциальность» вкладки «Безопасность» настроек приложения возможно включить использование службы значков сайта DuckDuckGo. Close @@ -4657,199 +4217,6 @@ You can enable the DuckDuckGo website icon service in the security section of th Получение значков (%1 из %2)… - - ImportWizard - - Import Wizard - Мастер импорта - - - - ImportWizardPageReview - - WizardPage - Страница мастера - - - Entry count: %1 - Количество записей: %1 - - - Group - Группа - - - Title - Название - - - Username - Имя пользователя - - - Password - Пароль - - - Url - URL-адрес - - - Could not load key file. - Не удалось загрузить файл-ключ. - - - Could not open remote database. Password or key file may be incorrect. - Не удалось открыть удаленную базу данных. Пароль или файл-ключ могут быть неверными. - - - - ImportWizardPageSelect - - Form - Форма - - - Import File Selection - Выбор файла импорта - - - Password: - Пароль: - - - Key File: - Файл-ключ: - - - Browse… - Обзор... - - - Import Into: - Импортировать в: - - - New Database - Новая база данных - - - No unlocked databases available - Нет разблокированных баз данных - - - Existing Database: - Существующая база данных: - - - Import File: - Импортировать файл: - - - Comma Separated Values (.csv) - Значения, разделенные запятыми (.csv) - - - 1Password Export (.1pux) - Экспорт из 1Password (.1pux) - - - 1Password Vault (.opvault) - Хранилище 1Password (.opvault) - - - Bitwarden (.json) - Bitwarden (.json) - - - KeePass 1 Database (.kdb) - База данных KeePass 1 (.kdb) - - - Open OPVault - Открыть OPVault - - - Select import file - Выберите файл для импорта - - - All files - Все файлы - - - Key files - Файлы-ключи - - - Select key file - Выберите файл-ключ - - - Comma Separated Values - Значения, разделенные запятыми - - - 1Password Export - Экспорт из 1Password - - - Bitwarden JSON Export - Экспорт из Bitwarden в JSON - - - 1Password Vault - Хранилище 1Password - - - KeePass1 Database - База данных KeePass1 - - - Proton Pass (.json) - Proton Pass (.json) - - - Proton Pass JSON Export - Экспорт из Proton Pass в JSON - - - Temporary Database - Временная база данных - - - Command: - Команда: - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - Например: "sftp user@hostname" или "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - - - Input: - Ввод: - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last commend `exit` has to be sent - - Например: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} используется в качестве заполнителя для хранения базы данных во временном месте. -Команда должна завершиться. В случае с `sftp` в качестве последней команды необходимо отправить `exit`. - - - - Remote Database (.kdbx) - Удалённая база данных (.kdbx) - - KMessageWidget @@ -4879,7 +4246,7 @@ exit Invalid credentials were provided, please try again. If this reoccurs, then your database file may be corrupt. Вероятно, для входа были указанные неверные данные. -Попробуйте ввести данные ещё раз, если ошибка повторится, возможно, файл базы данных повреждён. +Попробуйте ввести данные ещё раз, если ошибка повториться, возможно, файл базы данных повреждён. Header doesn't match hash @@ -4930,13 +4297,13 @@ If this reoccurs, then your database file may be corrupt. Header SHA256 mismatch - Несоответствие заголовка SHA256 + Несоответствие SHA256 заголовка Invalid credentials were provided, please try again. If this reoccurs, then your database file may be corrupt. Вероятно, для входа были указанные неверные данные. -Попробуйте ввести данные ещё раз, если ошибка повторится, возможно, файл базы данных повреждён. +Попробуйте ввести данные ещё раз, если ошибка повториться, возможно, файл базы данных повреждён. (HMAC mismatch) @@ -4960,11 +4327,11 @@ If this reoccurs, then your database file may be corrupt. Failed to open buffer for KDF parameters in header - Не удалось открыть буфер для параметров ФФК в заголовке + Не удалось открыть буфер для настроек ФФК в заголовке Unsupported key derivation function (KDF) or invalid parameters - Функция формирования ключа (ФФК) не поддерживается, либо параметры неверны + Функция формирования ключа (ФФК) не поддерживается, либо неверные настройки Legacy header fields found in KDBX4 file. @@ -5019,22 +4386,22 @@ If this reoccurs, then your database file may be corrupt. Invalid variant map Int32 entry value length Translation: variant map = data structure for storing meta data - Недопустимая длина значения Int32 в структуре метаданных + Недопустимая длина Int32 значения в структуре метаданных Invalid variant map UInt32 entry value length Translation: variant map = data structure for storing meta data - Недопустимая длина значения UInt32 в структуре метаданных + Недопустимая длина UInt32 значения в структуре метаданных Invalid variant map Int64 entry value length Translation: variant map = data structure for storing meta data - Недопустимая длина значения Int64 в структуре метаданных + Недопустимая длина Int64 значения в структуре метаданных Invalid variant map UInt64 entry value length Translation: variant map = data structure for storing meta data - Недопустимая длина значения UInt64 в структуре метаданных + Недопустимая длина UInt64 значения в структуре метаданных Invalid variant map entry type @@ -5065,7 +4432,7 @@ If this reoccurs, then your database file may be corrupt. Failed to serialize KDF parameters variant map Translation comment: variant map = data structure for storing meta data - Ошибка сериализации ФФК параметров структуры метаданных + Ошибка сериализации ФФК настроек структуры матаданных @@ -5108,7 +4475,7 @@ If this reoccurs, then your database file may be corrupt. Invalid random stream id size - Недопустимый размер идентификатора случайного потока + Недопустимый размер индентификатора случайного потока Invalid inner random stream cipher @@ -5130,7 +4497,7 @@ This is a one-way migration. You won't be able to open the imported databas Not a KeePass database. - Это не база данных KeePass. + Не база данных KeePass. Unsupported KeePass 2 database version. @@ -5193,7 +4560,7 @@ Line %2, column %3 Missing DeletedObject uuid or time - Нет UUID или времени для DeletedObject + Нет UUID или времени для DeletedObject Null entry uuid @@ -5217,7 +4584,7 @@ Line %2, column %3 Duplicate custom attribute found - Обнаружен повторяющийся пользовательский атрибут + Обнаружен повторяющиеся пользовательский атрибут Entry string key or value missing @@ -5237,7 +4604,7 @@ Line %2, column %3 Invalid date time value - Недопустимое значение даты/времени + Недопустимое значение даты/времени Invalid color value @@ -5265,7 +4632,7 @@ Line %2, column %3 KeeAgentSettings Invalid KeeAgent settings file structure. - Неверная структура файла параметров KeeAgent. + Неверная структура файла настроек KeeAgent Private key is an attachment but no attachments provided. @@ -5284,6 +4651,17 @@ Line %2, column %3 Не удалось открыть закрытый ключ + + KeePass1OpenWidget + + Import KeePass1 Database + Импортировать базу данных в формате KeePass1 + + + Unable to open the database. + Невозможно открыть базу данных. + + KeePass1Reader @@ -5347,11 +4725,11 @@ Line %2, column %3 Invalid credentials were provided, please try again. If this reoccurs, then your database file may be corrupt. Вероятно, для входа были указанные неверные данные. -Попробуйте ввести данные ещё раз, если ошибка повторится, возможно, файл базы данных повреждён. +Попробуйте ввести данные ещё раз, если ошибка повториться, возможно, файл базы данных повреждён. Key transformation failed - Не удалось выполнить преобразование ключа + Не удалось выполнить преобразование ключа Invalid group field type number @@ -5427,7 +4805,7 @@ If this reoccurs, then your database file may be corrupt. Invalid entry creation time field size - Недопустимый размер поля времени создания записи + Недопустимный размер поля времени создания записи Invalid entry modification time field size @@ -5466,11 +4844,11 @@ If this reoccurs, then your database file may be corrupt. Import is disabled in settings - Возможность импортировать отключена в параметрах программы + Возможность импортировать отключена в настройках приложения Export is disabled in settings - Возможность экспортировать отключена в параметрах программы + Возможность экспорировать отключена в настройках приложения Inactive share @@ -5524,11 +4902,11 @@ If this reoccurs, then your database file may be corrupt. Note: Do NOT use a file that may change as that will prevent you from unlocking your database. - Внимание: изменение файла приведёт к невозможности разблокировать базу данных. + Внимание: изменение файла приведёт к невозможности открыть базу данных! Browse for key file - Открыть диалог выбора файла-ключа + Открыть диалога выбора файла-ключа Browse… @@ -5540,13 +4918,13 @@ If this reoccurs, then your database file may be corrupt. You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. - ВНИМАНИЕ: Используется файл-ключ устаревшего формата, поддержка которого может быть прекращена в будущем. + ВНИМАНИЕ: Вы используете файл-ключ устаревшего формата, поддержка которого может быть прекращена в будущем. По возможности создайте новый ключевой файл. Error loading the key file '%1' Message: %2 - Ошибка загрузки файла-ключа «%1» + Ошибка загрузки ключевого файла '%1' Сообщение: %2 @@ -5628,7 +5006,7 @@ Are you sure you want to continue with this file? Could not register global shortcut - Не удалось зарегистрировать глобальную горячую клавишу + Невозможно зарегистрировать глобальную горячую клавишу @@ -5641,6 +5019,10 @@ Are you sure you want to continue with this file? &Recent Databases &Недавние базы данных + + &Import + &Импорт + &Export &Экспорт @@ -5661,10 +5043,6 @@ Are you sure you want to continue with this file? TOTP TOTP - - Tags - Теги - &Groups &Группы @@ -5707,20 +5085,36 @@ Are you sure you want to continue with this file? &New Database… - Со&здать базу данных… + Со&здать базу даннных… + + + Create a new database + Создать новую базу данных &Merge From Database… Объе&динить с другой базой данных... + + Merge from another KDBX database + Объединить с другой базой данных KDBX + &New Entry… &Создать запись… + + Add a new entry + Добавить новую запись + &Edit Entry… &Изменить запись… + + View or edit entry + Показать/изменить запись + &Delete Entry… &Удалить запись… @@ -5729,6 +5123,10 @@ Are you sure you want to continue with this file? &New Group… &Создать группу… + + Add a new group + Добавить новую группу + &Edit Group… &Изменить группу… @@ -5743,11 +5141,11 @@ Are you sure you want to continue with this file? Sort &A-Z - Сортировать &А-Я + Упорядочивать &А-Я Sort &Z-A - Сортировать &Я-А + Упорядочивать &Я-А Sa&ve Database As… @@ -5755,15 +5153,23 @@ Are you sure you want to continue with this file? Database &Security… - &Безопасность базы данных… + &Безопаснось базы данных… Database &Reports… &Отчёты по базе данных… + + Statistics, health check, etc. + Статистика, проверка безопасности… + &Database Settings… - &Параметры базы данных… + Настройки базы данных… + + + Database settings + Настройки базы данных &Clone Entry… @@ -5773,21 +5179,37 @@ Are you sure you want to continue with this file? Move u&p Переместить &выше + + Move entry one step up + Переместить запись выше на одну позицию + Move do&wn Переместить &ниже + + Move entry one step down + Переместить запись ниже на одну позицию + Copy &Username Скопировать &имя пользователя + + Copy username to clipboard + Скопировать логин в буфер обмена + Copy &Password Скопировать п&ароль + + Copy password to clipboard + Скопировать пароль в буфер обмена + &Settings - &Параметры + &Настройки &Password Generator @@ -5811,19 +5233,27 @@ Are you sure you want to continue with this file? Lock &All Databases - Заблокировать &все базы + Заблокировать &Все Базы &Title Назван&ие - Copy &URL - Скопировать &адрес + Copy title to clipboard + Скопировать название в буфер обмена + + + Copy URL to clipboard + Скопировать ссылку в буфер обмена &Notes - &Заметки + &Примечания + + + Copy notes to clipboard + Скопировать примечания в буфер обмена &CSV File… @@ -5837,13 +5267,25 @@ Are you sure you want to continue with this file? KeePass 1 Database… База данных KeePass 1… + + Import a KeePass 1 database + Импортировать базу данных KeePass 1 + 1Password Vault… Хранилище 1Password… + + Import a 1Password Vault + Импортировать хранилище 1Password + CSV File… - Файл CSV... + Файл &CSV... + + + Import a CSV file + Импортировать файл CSV Show TOTP @@ -5861,10 +5303,6 @@ Are you sure you want to continue with this file? Copy &TOTP Скопировать &TOTP - - Copy Password and TOTP - Скопировать пароль и TOTP - E&mpty recycle bin О&чистить корзину @@ -5889,6 +5327,10 @@ Are you sure you want to continue with this file? &Online Help Справка в &интернете + + Go to online documentation + Перейти к онлайн документации + &User Guide &Руководство пользователя @@ -5899,7 +5341,7 @@ Are you sure you want to continue with this file? &Keyboard Shortcuts - &Комбинации клавиш + &Сочетания клавиш Save Database Backup… @@ -5907,11 +5349,11 @@ Are you sure you want to continue with this file? Add key to SSH Agent - Добавить ключ к SSH-агенту + Добавить ключ к SSH-агент Remove key from SSH Agent - Убрать ключ из SSH-агента + Убрать ключ из агента SSH Compact Mode @@ -5927,23 +5369,19 @@ Are you sure you want to continue with this file? Dark - Тёмная + Темная Classic (Platform-native) - Классическая (зависимая от платформы) - - - Show Menubar - Отображать меню + Классическая (платформо-зависимая) Show Toolbar - Отображать панель инструментов + Показать панель инструментов Show Preview Panel - Отображать панель предпросмотра + Показывать панель предварительного просмотра Always on Top @@ -5951,7 +5389,7 @@ Are you sure you want to continue with this file? Hide Usernames - Скрыть логины + Скрыть имена пользователей Hide Passwords @@ -5961,10 +5399,6 @@ Are you sure you want to continue with this file? Clone Group... Клонировать группу... - - &XML File… - Файл &XML… - Clear history Очистить историю @@ -5992,8 +5426,10 @@ Expect some bugs and minor issues, this version is meant for testing purposes. - No Tags - Нет тегов + 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 с нашей страницы загрузок. Restore Entry(s) @@ -6001,7 +5437,7 @@ Expect some bugs and minor issues, this version is meant for testing purposes. Settings - Параметры + Настройки Check for updates on startup? @@ -6023,13 +5459,9 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Quit KeePassXC Закрыть KeePassXC - - %1 Entry(s) - %1 запись%1 записи%1 записей%1 запись(и) - Please present or touch your YubiKey to continue… - Поднесите или коснитесь YubiKey, чтобы продолжить... + Пожалуйста, поднесите или коснитесь YubiKey, чтобы продолжить... Restart Application? @@ -6037,334 +5469,58 @@ Expect some bugs and minor issues, this version is meant for testing purposes. You must restart the application to apply this setting. Would you like to restart now? - Требуется перезапуск приложения для применения этого параметра. Выполнить перезапуск сейчас? + Требуется перезапуск приложения для применения этой настройки. Выполнить перезапуск сейчас? + + + Tags + Метки + + + No Tags + Нет тегов + + + %1 Entry(s) + %1 запись%1 записи%1 записей%1 записи + + + Copy Password and TOTP + Скопировать пароль и TOTP + + + &XML File… + Файл &XML… + + + XML File… + XML-файл… + + + Copy &URL + Скопировать &адрес Allow Screen Capture Разрешить скриншоты - - 1Password 1PUX... - 1Password 1PUX... - - - Import a 1Password 1PUX file - Импортировать 1PUX файл из 1Password - - - Import… - Импорт… - - - Passkeys… - Passkeys… - - - Import Passkey - Импорт Passkey - - - Remote S&ync… - Удаленная с&инхронизация… - - - Quit Application - Закрыть приложение - - - Open About Dialog - Открыть диалог «О программе» - - - Open Database - Открыть базу данных - - - Create Database - Создать базу данных - - - Merge From Database - Объединить из базы данных - - - Create Entry - Создать запись - - - Edit Entry - Редактировать запись - - - Delete Entry - Удалить запись - - - Create Group - Создать группу - - - Edit Group - Редактировать группу - - - Delete Group - Удалить группу - - - Download All Favicons - Загрузить значки сайтов для всех записей - - - Sort Groups A-Z - Сортировать группы А-Я - - - Sort Groups Z-A - Сортировать группы Я-А - - - Save Database As - Сохранить базу данных как - - - Show Database Security - Безопасность базы данных - - - Show Database Reports - Отчёты по базе данных - - - Show Database Settings - Параметры базы данных - - - Show Passkeys - Показать Passkey - - - Clone Entry - Клонировать запись - - - Move Entry Up - Переместить выше - - - Move Entry Down - Переместить ниже - - - Copy Username - Скопировать имя пользователя - - - Copy Password - Скопировать пароль - - - Show Application Settings - Открыть параметры приложения - - - Show Password Generator - Открыть генератор паролей - - - Remove Passkey From Entry - Удалить passkey из записи - - - Perform Auto-Type: {USERNAME} - Автоматический ввод: {USERNAME} - - - Perform Auto-Type: {USERNAME}{ENTER} - Автоматический ввод: {USERNAME}{ENTER} - - - Perform Auto-Type: {PASSWORD} - Автоматический ввод: {PASSWORD} - - - Perform Auto-Type: {PASSWORD}{ENTER} - Автоматический ввод: {PASSWORD}{ENTER} - - - Perform Auto-Type: {TOTP} - Автоматический ввод: {TOTP} - - - Copy Title - Скопировать название - - - Copy URL - Скопировать URL - - - Copy Notes - Скопировать заметки - - - Export to CSV - Экспорт в CSV - - - Export to HTML - Экспорт в HTML - - - Import KeePass1 Database - Импортировать базу данных в формате KeePass1 - - - Import 1Password Vault - Импорт хранилища 1Password - - - Import CSV File - Импорт CSV-файла - - - Show TOTP QR Code - Показать QR-код TOTP - - - Set up TOTP - Настроить TOTP - - - Empty Recycle Bin - Очистить корзину - - - Open Donation Website - Открыть сайт для пожертвований - - - Open Bug Report - Открыть отчёт об ошибке - - - Open Online Documentation - Открыть онлайн-документацию - - - Open Keyboard Shortcuts Guide - Открыть руководство по сочетаниям клавиш - - - Save Database Backup - Сохранить резервную копию базы - - - SSH Agent: Add Key - SSH-агент: добавить ключ - - - SSH Agent: Remove Key - SSH-агент: убрать ключ - - - Toggle Compact Mode - Компактный режим - - - Set Theme: Automatic - Установить тему: Автоматически - - - Set Theme: Light - Установить тему: Светлая - - - Set Theme: Dark - Установить тему: Тёмная - - - Set Theme: Classic - Установить тему: Классическая - - - Toggle Show Menubar - Отображать меню - - - Toggle Show Toolbar - Отображать панель инструментов - - - Toggle Show Preview Panel - Отображать панель предварительного просмотра - - - Toggle Always on Top - Всегда поверх других окон - - - Toggle Hide Usernames - Скрыть логины - - - Toggle Hide Passwords - Скрыть пароли - - - Export to XML - Экспорт в XML - - - Toggle Allow Screen Capture - Разрешить скриншоты - - - Show Group Panel - Отображать панель групп - - - Toggle Show Group Panel - Отображать панель групп - - - Setup Remote Sync… - Настройка удаленной синхронизации… - - - Password Generator - Генератор паролей - - - E&xpire Entry… - И&стекает запись... - - - Clear SSH Agent - Очистить SSH-агент - - - Clear all identities in ssh-agent - Очистить все идентификаторы в ssh-агенте - ManageDatabase Database settings - Параметры базы данных + Настройки базы данных Edit database settings - Редактирование параметров базы данных + Правка настроек базы данных Unlock database - Разблокировать базу данных + Открыть базу данных Unlock database to show more information - Разблокируйте базу данных для просмотра дополнительных сведений + Откройте базу данных для просмотра дополнительных сведений Lock database @@ -6387,7 +5543,7 @@ Expect some bugs and minor issues, this version is meant for testing purposes. Reset any remembered decisions for this application - Сбросить все сохранённые решения для этого приложения + Сбросить все сохраненные решения для этого приложения @@ -6404,6 +5560,26 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Overwriting %1 [%2] Перезапись %1 [%2] + + older entry merged from database "%1" + более старая запись из базы данных "%1" + + + Adding backup for older target %1 [%2] + Добавление резервной копии для более старой цели %1 [%2] + + + Adding backup for older source %1 [%2] + Добавление резервной копии для более старого источника %1 [%2] + + + Reapplying older target entry on top of newer source %1 [%2] + Повторное применение более старой целевой записи поверх более нового источника %1 [%2] + + + Reapplying older source entry on top of newer target %1 [%2] + Повторное применение более старой исходной записи поверх более новой целевой записи %1 [%2] + Synchronizing from newer source %1 [%2] Синхронизация с более новым источником %1 [%2] @@ -6422,7 +5598,7 @@ Expect some bugs and minor issues, this version is meant for testing purposes. Changed deleted objects - Удалённые объекты изменены + Изменены удалённые объекты Adding missing icon %1 @@ -6430,11 +5606,11 @@ Expect some bugs and minor issues, this version is meant for testing purposes. Removed custom data %1 [%2] - Пользовательские данные %1 [%2] удалены + Пользовательские данные %1 [%2] удалены Adding custom data %1 [%2] - Добавление пользовательских данных %1 [%2] + Добавление пользовательских данные %1 [%2] @@ -6457,11 +5633,19 @@ Expect some bugs and minor issues, this version is meant for testing purposes. Encryption 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 + Простые настройки @@ -6479,11 +5663,11 @@ Expect some bugs and minor issues, this version is meant for testing purposes.NewDatabaseWizardPageEncryption Encryption Settings - Параметры шифрования + Настройки шифрования Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. - Здесь можно настроить параметры шифрования базы данных. Их можно будет изменить позже в параметрах базы данных. + Здесь можно изменить настройки шифрования базы данных. Их можно будет изменить позже в настройках базы данных. @@ -6497,25 +5681,6 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Заполните отображаемое имя и, при желании, описание новой базы данных: - - NewEntryAttachmentsDialog - - Attachment name cannot be empty - Имя вложения не может быть пустым - - - Attachment with the same name already exists - Вложение с таким же именем уже существует - - - Save attachment - Сохранить вложение - - - New entry attachment - Новое вложение записи - - NixUtils @@ -6562,6 +5727,15 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Ожидалось %1 байт простого текста, найдено %2 + + OpVaultOpenWidget + + Read Database did not produce an instance +%1 + Невозможно создать базу данных из прочитанного файла +%1 + + OpVaultReader @@ -6609,7 +5783,7 @@ Expect some bugs and minor issues, this version is meant for testing purposes. Key file magic header id invalid - Недопустимый идентификатор заголовка файла-ключа + Недопустимый идентификатор заголовка файла-ключа. Found zero keys @@ -6635,10 +5809,6 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Unknown cipher: %1 Неподдерживаемый шифр: %1 - - AES-256/GCM is currently not supported - AES-256/GCM в настоящее время не поддерживается - Passphrase is required to decrypt this key Для расшифровки этого ключа требуется пароль @@ -6704,183 +5874,8 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Неожиданный конец файла при записи закрытого (личного) ключа - (encrypted) - (зашифровано) - - - - OpenSSHKeyGenDialog - - SSH Key Generator - Генератор ключей SSH - - - Type - Тип - - - Bits - Биты - - - Comment - Комментарий - - - - PasskeyExportDialog - - KeePassXC - Passkey Export - KeePassXC - Экспорт Passkey - - - Filenames will be generated with title and .passkey file extension. - Имена файлов будут сгенерированы с заголовком и расширением файла .passkey - - - Export entries - Экспорт записей - - - Export Selected - Экспорт выбранного - - - Cancel - Отмена - - - Export to folder - Экспортировать в папку - - - Export the following passkey entries. - Экспортировать следующие записи passkey. - - - - PasskeyExporter - - KeePassXC: Passkey Export - KeePassXC: Passkey Экспорт - - - File "%1.passkey" already exists. -Do you want to overwrite it? - - Файл "%1.passkey" уже существует. -Вы хотите перезаписать его? - - - - Cannot open file - Не удается открыть файл - - - Cannot open file "%1" for writing. - Не удается открыть файл "%1" для записи. - - - Cannot write to file - Не удается записать в файл - - - - PasskeyImportDialog - - KeePassXC - Passkey Import - KeePassXC - Passkey Импорт - - - Username: %1 - Имя пользователя: %1 - - - Group - Группа - - - Database - Хранилище - - - Import Passkey - Импорт Passkey - - - Import - Импортировать - - - Cancel - Отмена - - - Entry - Запись - - - Create new entry - Создать новую запись - - - Relying Party: %1 - Доверенная сторона: %1 - - - Import the following passkey: - Импортировать следующий passkey: - - - Import the following passkey to this entry: - Импортировать следующий passkey в эту запись: - - - Default passkeys group (Imported Passkeys) - Группа passkeys по умолчанию (Импортированные Passkeys) - - - - PasskeyImporter - - Passkey file - Passkey файл - - - All files - Все файлы - - - Cannot open file - Не удается открыть файл - - - Cannot open file "%1" for reading. - Не могу открыть файл "%1" для чтения. - - - Open passkey file - Открыть passkey файл - - - Cannot import passkey - Не удаётся импортировать passkey - - - Cannot import passkey file "%1". Data is missing. - Не удаётся импортировать passkey файл "%1". Данные отсутствуют. - - - Cannot import passkey file "%1". -The following data is missing: -%2 - Не удаётся импортировать passkey файл "%1". -Следующие данные отсутствуют: -%2 - - - Cannot import passkey file "%1". Private key is missing or malformed. - Не удаётся импортировать passkey файл "%1". Приватный ключ отсутствует или поврежден. + AES-256/GCM is currently not supported + AES-256/GCM в настоящее время не поддерживается @@ -6923,7 +5918,7 @@ The following data is missing: <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> + <p>Пароль - это основной метод защиты базы данных.</p><p>Хороший пароль должен быть длинным и уникальным. KeePassXC может сгенерировать его сам.</p> Passwords do not match. @@ -6999,7 +5994,7 @@ The following data is missing: Dashes and Slashes - Тире и косые черты + Тире и слэши Upper-case letters @@ -7031,7 +6026,7 @@ The following data is missing: Additional characters to use for the generated password - Дополнительные символы для созданного пароля + Дополнительные символы Additional characters @@ -7055,7 +6050,7 @@ The following data is missing: Excluded characters - Исключённые символы + Исключенные символы Also choose from: @@ -7085,6 +6080,10 @@ The following data is missing: Word Count: Количество слов: + + Character Count: + Количество символов: + Word Case: Регистр слов: @@ -7095,7 +6094,11 @@ The following data is missing: Add custom wordlist - Добавить свой словарь + Добавить пользовательский словарь + + + character + символ Close @@ -7133,6 +6136,52 @@ The following data is missing: Entropy: %1 bit Энтропия: %1 бит + + Confirm Delete Wordlist + Подтвердить удаление словаря + + + Do you really want to delete the wordlist "%1"? + Вы действительно хотите удалить словарь "%1"? + + + Failed to delete wordlist + Не удалось удалить словарь + + + Wordlists + Словарь + + + All files + Все файлы + + + Select Custom Wordlist + Выберите пользовательский словарь + + + Overwrite Wordlist? + Переписать словарь? + + + Wordlist "%1" already exists as a custom wordlist. +Do you want to overwrite it? + Список слов "%1" уже настраиваемый. +Вы хотите его перезаписать? + + + Failed to add wordlist + Не удалось добавить словарь + + + Logograms + Логограммы + + + Special Characters + Специальные символы + Password Quality: %1 Качество пароля: %1 @@ -7158,66 +6207,8 @@ The following data is missing: Отличный - Confirm Delete Wordlist - Подтвердить удаление словаря - - - Do you really want to delete the wordlist "%1"? - Вы действительно хотите удалить словарь «%1»? - - - Failed to delete wordlist - Не удалось удалить словарь - - - Wordlists - Словарь - - - All files - Все файлы - - - Select Custom Wordlist - Выберите свой словарь - - - Overwrite Wordlist? - Переписать словарь? - - - Wordlist "%1" already exists as a custom wordlist. -Do you want to overwrite it? - Список слов «%1» уже настраиваемый. -Вы хотите его перезаписать? - - - Failed to add wordlist - Не удалось добавить словарь - - - Logograms - Логограммы - - - Special Characters - Специальные символы - - - passwordLength - Длина пароля - - - Characters: %1 - Символы: %1 - - - MIXED case - СМЕШАННЫЙ регистр - - - Excluded characters: "0", "1", "l", "I", "O", "|", "﹒", "B", "8", "G", "6" - Исключить символы: "0", "1", "l", "I", "O", "|", "﹒", "B", "8", "G", "6" + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + Исключить символы: «0», «1», «l», «I», «O», «|», «﹒» @@ -7240,7 +6231,7 @@ Do you want to overwrite it? Warning: Caps Lock enabled! - Внимание: CAPS LOCK включён. + Внимание: включен режим CAPS LOCK. Quality: %1 @@ -7267,15 +6258,15 @@ Do you want to overwrite it? Отличный - Toggle password visibility using Control + H. Open the password generator using Control + G. - Переключить видимость пароля Ctrl + H. Открыть генератор паролей Ctrl + G. + Toggle password visibilty using Control + H. Open the password generator using Control + G. + Переключить видимость пароля с помощью Control + H. Открыть генератор паролей с помощью Control + G. PickcharsDialog KeePassXC - Pick Characters - KeePassXC — Выбор символов + KeePassXC - Выбор символов Select characters to type, navigate with arrow keys, Ctrl + S submits. @@ -7286,21 +6277,6 @@ Do you want to overwrite it? Нажимать &Tab между символами - - PreviewEntryAttachmentsDialog - - Preview entry attachment - Предварительный просмотр вложения записи - - - No preview available - Предварительный просмотр недоступен - - - Image format not supported - Формат изображения не поддерживается - - QMessageBox @@ -7339,10 +6315,6 @@ Do you want to overwrite it? Continue Продолжить - - Continue with weak password - Продолжить со слабыми паролем - QObject @@ -7432,7 +6404,7 @@ Do you want to overwrite it? URL for the entry. - URL-адрес для записи. + URL-адрес для записи URL @@ -7444,7 +6416,7 @@ Do you want to overwrite it? Notes - Заметки + Примечания Prompt for the entry's password. @@ -7504,7 +6476,7 @@ Do you want to overwrite it? Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. - Проверка паролей на компрометацию. Параметр ИМЯ_ФАЙЛА должен быть путём к файлу данных списка SHA-1 хэшей паролей в формате HIBP, полученным, например, с сайта https://haveibeenpwned.com/Passwords. + Проверка паролей на утечку. НАСТРОЙКА ИМЯ_ФАЙЛА должна быть путём к файлу данных списка SHA-1 хэшей паролей в формате HIBP, полученным, например, с сайта https://haveibeenpwned.com/Passwords. FILENAME @@ -7544,7 +6516,7 @@ Do you want to overwrite it? Password for '%1' has been leaked! - Пароль для «%1» был замечен в утечке! + Пароль для '%1' был замечен в утечке! Export an attachment of an entry. @@ -7560,7 +6532,7 @@ Do you want to overwrite it? Path to which the attachment should be exported. - Путь, куда будет экспортировано вложение. + Путь куда будет экспортировано вложение. Could not find entry with path %1. @@ -7572,7 +6544,7 @@ Do you want to overwrite it? No export target given. Please use '--stdout' or specify an 'export-file'. - Цель экспорта не указана. Используйте «--stdout» или укажите «export-file». + Цель экспорта не указана. Пожалуйста, используйте '--stdout' или укажите 'export-file'. Could not open output file %1. @@ -7629,7 +6601,7 @@ Do you want to overwrite it? Copy the given attribute to the clipboard. Defaults to "password" if not specified. Don't translate "password", it refers to the attribute. - Скопировать указанный атрибут в буфер обмена. Если атрибут не указан, используется пароль. + Скопировать указанный аттрибут в буфер обмена. Если аттрибут не указан, используется пароль. Copy the current TOTP to the clipboard (equivalent to "-a totp"). @@ -7641,7 +6613,7 @@ Do you want to overwrite it? Copy an entry's attribute to the clipboard. - Скопировать в буфер обмена атрибуты записи. + Скопировать в буфер обмена аттрибуты записи. Path of the entry to clip. @@ -7650,7 +6622,7 @@ Do you want to overwrite it? Timeout before clearing the clipboard (default is %1 seconds, set to 0 for unlimited). - Время ожидания очистки буфера обмена (по умолчанию составляет %1 (в секундах), для снятия ограничений установите равным нулю). + Время ожидания очистки буфера обмена (по умолчанию составляет %1 (в секундах), для снятия ограничений установите равным нулю). Invalid timeout value %1. @@ -7678,15 +6650,15 @@ Do you want to overwrite it? ERROR: attribute %1 is ambiguous, it matches %2. - ОШИБКА: аттрибут %1 неоднозначный, он соответствует %2. + ОШИБКА: аттрибут %1 неоднозначный, он соответствует %2. Attribute "%1" not found. - Атрибут «%1» не найден. + Аттрибут «%1» не найден. Entry's "%1" attribute copied to the clipboard! - Атрибуты записи «%1» скопированы в буфер обмена. + Аттрибуты записи «%1» скопированы в буфер обмена. Clearing the clipboard in %1 second(s)... @@ -7702,7 +6674,7 @@ Do you want to overwrite it? Display this help. - Показать эту справку. + Показать эту помощь. Silence password prompt and other secondary outputs. @@ -7718,11 +6690,11 @@ Do you want to overwrite it? Deactivate password key for the database. - Отключить использование парольного ключа базой данных. + Отключить использования парольного ключа базой данных. Yubikey slot and optional serial used to access the database (e.g., 1:7370001). - Номер слота ключа Yubikey и дополнительный серийный номер для доступа к базе данных (например: 1:7370001). + Номер слота ключа Yubikey и дополнительный серийный номер для доступа к базе данных (например: :7370001). slot[:serial] @@ -7736,10 +6708,6 @@ Do you want to overwrite it? Too many arguments provided. Слишком много аргументов. - - Path of the database. - Путь к базе данных. - Target decryption time in MS for the database. Целевое время расшифровывания базы данных в миллисекундах. @@ -7760,6 +6728,10 @@ Do you want to overwrite it? Create a new database. Создать новую базу данных. + + Path of the database. + Путь к базе данных. + Invalid decryption time %1. Неверное время расшифровывания %1. @@ -7774,7 +6746,7 @@ Do you want to overwrite it? Loading the key file failed - Ошибка загрузки файла-ключа + Ошибка загрузки ключевого файла No key is set. Aborting database creation. @@ -7786,11 +6758,11 @@ Do you want to overwrite it? Setting %1 rounds for key derivation function. - Для функции формирования ключа задано использование раундов: %1. + Для функции формирования ключа задано использование %1 раундов. error while setting database key derivation settings. - ошибка при задании параметров базы данных для функции формирования ключа. + ошибка при задании настроек базы данных для функции формирования ключа. File %1 already exists. @@ -7804,158 +6776,6 @@ Do you want to overwrite it? Successfully created new database. Новая база данных успешно создана. - - Unset the password for the database. - Сбросить пароль для базы данных. - - - Unset the key file for the database. - Сбросить ключ-файл для базы данных. - - - Edit a database. - Редактировать базу данных. - - - Cannot use %1 and %2 at the same time. - Невозможно использовать %1 и %2 одновременно. - - - Could not change the database key. - Не удалось изменить ключ базы данных. - - - Database was not modified. - База данных не была изменена. - - - Writing the database failed: %1 - Ошибка записи базы данных: %1 - - - Successfully edited the database. - База данных успешно изменена. - - - Cannot remove password: The database does not have a password. - Невозможно удалить пароль: у базы данных нет пароля. - - - Cannot remove file key: The database does not have a file key. - Невозможно удалить файл-ключ: в базе данных нет файла-ключа. - - - Loading the new key file failed: %1 - Загрузка нового файла-ключа не удалась: %1 - - - Found unexpected Key type %1 - Обнаружен неожиданный тип ключа %1 - - - Cannot remove all the keys from a database. - Невозможно удалить все ключи из базы данных. - - - Show a database's information. - Показать сведения о базе данных. - - - UUID: - UUID: - - - Name: - Имя: - - - Description: - Описание: - - - Cipher: - Шифрование: - - - KDF: - KDF: - - - Recycle bin is enabled. - Использование корзины включено. - - - Recycle bin is not enabled. - Использование корзины не включено. - - - Location - Расположение - - - Database created - База данных создана - - - Last saved - Последнее сохранение - - - Unsaved changes - Несохранённые изменения - - - yes - да - - - no - нет - - - Number of groups - Количество групп - - - Number of entries - Количество записей - - - Number of expired entries - Количество истёкших записей - - - Unique passwords - Уникальные пароли - - - Non-unique passwords - Неуникальные пароли - - - Maximum password reuse - Максимальное количество повторных использований пароля - - - Number of short passwords - Количество коротких паролей - - - Number of weak passwords - Количество ненадёжных паролей - - - Entries excluded from reports - Исключённые из отчёта записи - - - Average password length - Средняя длина пароля - - - %1 characters - %1 символов - Word count for the diceware passphrase. Количество слов для парольной фразы. @@ -7979,6 +6799,10 @@ Do you want to overwrite it? Invalid word count %1 Количество неверных слов: %1 + + The word list is too small (< 1000 items) + Словарь слишком маленький (< 1000 слов) + Title for the entry. Название записи. @@ -8001,7 +6825,11 @@ Do you want to overwrite it? Enter new password for entry: - Введите новый пароль для записи: + Введите новый пароль для записи: + + + Writing the database failed: %1 + Ошибка записи базы данных: %1 Successfully edited entry %1. @@ -8089,7 +6917,7 @@ Do you want to overwrite it? Type: User+Leet(Rep) - Тип: пользователь + замена букв цифрами и знаками (повт.) + Тип: Пользователь + замена букв цифрами и знаками (повт.) Type: Repeated(Rep) @@ -8123,6 +6951,10 @@ Do you want to overwrite it? Exit interactive mode. Покинуть интерактивный режим. + + Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. + Выбор формата файла для экспорта. Возможные варианты: XML (по умолчанию) или CSV. + Exports the content of a database to standard output in the specified format. Экспорт базы данных в заданном формате на устройство стандартного вывода. @@ -8193,7 +7025,7 @@ Do you want to overwrite it? Invalid password generator after applying all options - Невозможно создать пароль с заданными параметрами + Невозможно создать пароль с заданными настройками Display command help. @@ -8209,7 +7041,7 @@ Do you want to overwrite it? Path of the XML database export. - Путь для экспорта базы данных в формат XML. + Путь для экспорта базы данных в формат XML Path of the new database. @@ -8223,6 +7055,106 @@ Do you want to overwrite it? Successfully imported database. База данных успешно импортирована. + + Show a database's information. + Показать сведения о базе данных. + + + UUID: + UUID: + + + Name: + Имя: + + + Description: + Описание: + + + Cipher: + Шифрование: + + + KDF: + KDF: + + + Recycle bin is enabled. + Использование корзины включено. + + + Recycle bin is not enabled. + Использование корзины не включено. + + + Location + Расположение + + + Database created + База данных создана + + + Last saved + Последнее сохранение + + + Unsaved changes + Несохраненные изменения + + + yes + да + + + no + нет + + + Number of groups + Количество групп + + + Number of entries + Количество записей + + + Number of expired entries + Количество истёкших записей + + + Unique passwords + Уникальные пароли + + + Non-unique passwords + Неуникальные пароли + + + Maximum password reuse + Максимальное количество повторных использований пароля + + + Number of short passwords + Количество коротких паролей + + + Number of weak passwords + Количество ненадёжных паролей + + + Entries excluded from reports + Исключённые из отчёта записи + + + Average password length + Средняя длина пароля + + + %1 characters + %1 символов + Unknown command %1 Неизвестная команда %1 @@ -8271,7 +7203,7 @@ Available commands: Use the same credentials for both database files. - Используйте те же учётные данные для обоих файлов базы данных. + Используйте те же учетные данные для обоих файлов базы данных. Key file of the database to merge from. @@ -8279,11 +7211,11 @@ Available commands: Deactivate password key for the database to merge from. - Отключить использование парольного ключа для объединяемой базы данных. + Отключить использования парольного ключа для объединяемой базы данных. Only print the changes detected by the merge operation. - Не выполнять объединение, а только сообщать о найденных изменениях. + Не выполнять объединение, а только сообщать о найденных изменениях Yubikey slot for the second database. @@ -8395,17 +7327,13 @@ Available commands: Show the protected attributes in clear text. Показать защищённый атрибут в виде простого текста. - - Show all the attributes of the entry. - Показать все атрибуты записи. - Show the attachments of the entry. Показать все вложения записи. 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 @@ -8445,7 +7373,7 @@ Available commands: Enter password to unlock %1: - Введите пароль для разблокировки %1: + Введите пароль для разблокировки %1: Failed to load key file %1: %2 @@ -8456,7 +7384,7 @@ Available commands: stop supporting in the future. Please consider generating a new key file. - ВНИМАНИЕ: Вы используете файл-ключ устаревшего формата, поддержка которого + ВНИМАНИЕ: вы используете файл-ключ устаревшего формата, поддержка которого может быть прекращена в будущем. По возможности создайте новый ключевой файл. @@ -8469,13 +7397,9 @@ Please consider generating a new key file. Invalid YubiKey serial %1 Неверный серийный номер Yubikey %1 - - Please present or touch your YubiKey to continue. - Подключите или коснитесь YubiKey для продолжения. - Enter password to encrypt database (optional): - Введите пароль для шифрования базы данных (необязательно): + Введите пароль для шифрования базы данных (необязательно): Do you want to create a database with an empty password? [y/N]: @@ -8483,11 +7407,11 @@ Please consider generating a new key file. Repeat password: - Повторите пароль: + Повторите пароль: Error: Passwords do not match. - Ошибка: пароли не совпадают. + Ошибка: пароли не совпадают No program defined for clipboard manipulation @@ -8496,8 +7420,7 @@ Please consider generating a new key file. All clipping programs failed. Tried %1 - Ни одна программа копирования не сработала. Пробовали %1 - + Ни одна программа копирования не сработала. Пробовали %1 Creating KeyFile %1 failed: %2 @@ -8517,15 +7440,15 @@ Please consider generating a new key file. Could not start okon process: %1 - Невозможно запустить процесс поиска через okon: %1 + Невозможно запустить процесс поиска через okon Error: okon process did not finish - Процесс поиска через okon завершился ошибкой + Процесс поиска через okon завершился с ошибкой Failed to load okon processed database: %1 - Не удалось загрузить базу okon: %1 + Не удалось загрузить базу okon Very weak password @@ -8593,7 +7516,7 @@ Please consider generating a new key file. Debugging mode is enabled. - Режим отладки включён. + Режим отладки включен. Operating system: %1 @@ -8637,7 +7560,7 @@ Kernel: %3 %4 over %1 year(s) - более %1 годаболее %1 летболее %1 летболее %1 лет + over %1 годаover %1 летover %1 летover %1 лет about %1 month(s) @@ -8711,6 +7634,18 @@ Kernel: %3 %4 file empty пустой файл + + malformed string + Неправильная строка + + + missing closing quote + Отсутствует закрывающая кавычка + + + %1: (row, col) %2,%3 + %1: (строка, столбец) %2,%3 + AES 256-bit AES 256 бит @@ -8725,7 +7660,7 @@ Kernel: %3 %4 Argon2d (KDBX 4 – recommended) - Argon2d (KDBX 4 — рекомендуемое) + Argon2d (KDBX 4 – рекомендуемок) Argon2id (KDBX 4) @@ -8749,7 +7684,7 @@ Kernel: %3 %4 Clearing the clipboard in %1 second(s)… - Буфер обмена будет очищен через %1 сБуфер обмена будет очищен через %1 сБуфер обмена будет очищен через %1 сБуфер обмена будет очищен через %1 с + Буфер обмена будет очищен через %1 секунду...Буфер обмена будет очищен через %1 секунд...Буфер обмена будет очищен через %1 секунд...Буфер обмена будет очищен через %1 секунд... Group @@ -8851,19 +7786,19 @@ Kernel: %3 %4 Unsupported key file version: %1 - Неподдерживаемый тип файла-ключа: %1 + Неподдерживаемый тип ключа: %1 Checksum mismatch! Key file may be corrupt. - Несоответствие хэша! Возможно, ключ-файл повреждён. + Несоответствие хэша! Возможно, ключ-файл повреждён Unexpected key file data! Key file may be corrupt. - Неожиданные данные в файле-ключе! Вероятно, он повреждён. + Неожиданные данные в файле-ключе! Вероятно, он повреждён KeePassXC - cross-platform password manager - KeePassXC — кроссплатформенный менеджер паролей + KeePassXC - кроссплатформенный менеджер паролей filenames of the password databases to open (*.kdbx) @@ -8871,11 +7806,11 @@ Kernel: %3 %4 path to a custom config file - путь к своему файлу параметров + путь к своему файлу настроек path to a custom local config file - путь к пользовательскому локальному файлу параметров + Путь к пользовательскому файлу настроек lock all open databases @@ -8889,6 +7824,14 @@ Kernel: %3 %4 read password of the database from stdin читать пароли базы данных с stdin + + allow app screen recordering and screenshots + разрешить запись и снимки экрана приложения + + + Locked databases. + Базы данных заблокированы. + Database failed to lock. Не удалось заблокировать базы данных. @@ -8897,17 +7840,13 @@ Kernel: %3 %4 Another instance of KeePassXC is already running. Другой экземпляр KeePassXC уже запущен. - - KeePassXC is not running. No open database to lock - KeePassXC не запущен. Нет открытой базы данных для блокировки - Fatal error while testing the cryptographic functions. Неустранимая ошибка при тестировании криптографических функций. KeePassXC - Error - Ошибка — KeePassXC + Ошибка - KeePassXC Database password: @@ -8916,7 +7855,7 @@ Kernel: %3 %4 Invalid Settings TOTP - Недопустимые параметры + Недопустимые настройки Invalid Key @@ -8925,7 +7864,7 @@ Kernel: %3 %4 Failed to create Windows Hello credential. - Не удалось создать учётные данные Windows Hello. + Не удалось создать учетные данные Windows Hello. Failed to sign challenge using Windows Hello. @@ -8944,307 +7883,77 @@ Kernel: %3 %4 Недействительный ФФК - Access to all entries is denied - Доступ ко всем записям запрещён + Please present or touch your YubiKey to continue. + Подключите или коснитесь YubiKey для продолжения. - allow screenshots and app recording (Windows/macOS) - разрешить снимки экрана и запись приложений (Windows/macOS) + Show all the attributes of the entry. + Показать все атрибуты записи. + + + Edit a database. + Редактировать базу данных. + + + Could not change the database key. + Не удалось изменить ключ базы данных. + + + Database was not modified. + База данных не была изменена. + + + Successfully edited the database. + База данных успешно изменена + + + Loading the new key file failed: %1 + Загрузка нового файла ключа не удалась: %1 + + + Unset the password for the database. + Сбросить пароль для базы данных. + + + Unset the key file for the database. + Сбросить файл ключа для базы данных. + + + Cannot use %1 and %2 at the same time. + Невозможно использовать %1 и %2 одновременно. + + + Cannot remove all the keys from a database. + Невозможно удалить все ключи из базы данных. + + + Cannot remove password: The database does not have a password. + Невозможно удалить пароль: у базы данных нет пароля. + + + Cannot remove file key: The database does not have a file key. + Невозможно удалить файл ключа: в базе данных нет файла ключа. + + + Found unexpected Key type %1 + Обнаружен неожиданный тип ключа %1 Set the key file for the database. -This option is deprecated, use --set-key-file instead. - Установить файл-ключ для базы данных. -Эта опция устарела, вместо неё используйте --set-key-file. +This options is deprecated, use --set-key-file instead. + Установить файл ключа для базы данных. +Эта опция устарела, вместо нее используйте --set-key-file. - Databases have been locked. - Базы данных заблокированы. - - - Attestation not supported - Аттестация не поддерживается - - - Credential is excluded - Учётные данные исключены - - - Passkeys request canceled - Запрос на создание Passkeys отменён - - - Invalid user verification - Неверная проверка пользователя - - - Empty public key - Пустой публичный ключ - - - Invalid URL provided - Неверный URL-адрес - - - Passkeys - Passkeys - - - AES initialization failed - Ошибка при инициализации AES - - - AES encrypt failed - Ошибка шифрования AES - - - Failed to store in Linux Keyring - Не удалось сохранить в Linux Keyring - - - Polkit returned an error: %1 - Polkit вернул ошибку: %1 - - - Could not locate key in keyring - Не удалось найти ключ в keyring - - - Could not read key in keyring - Не удалось прочитать ключ в keyring - - - AES decrypt failed - Не удалось расшифровать AES - - - No Polkit authentication agent was available - Агент аутентификации Polkit был недоступен - - - Polkit authorization failed - Ошибка авторизации Polkit - - - No Quick Unlock provider is available - Служба быстрой разблокировки не доступна - - - Failed to init KeePassXC crypto. - Не удалось инициализировать криптографию KeePassXC. - - - Failed to encrypt key data. - Не удалось зашифровать данные ключа. - - - Failed to get Windows Hello credential. - Не удалось получить учётные данные Windows Hello. - - - Failed to decrypt key data. - Не удалось расшифровать данные ключа. - - - Origin is empty or not allowed - Источник пуст или не разрешён - - - Effective domain is not a valid domain - Эффективный домен не допустимый домен - - - Origin and RP ID do not match - Bcnjxybr и RP ID не совпадают - - - No supported algorithms were provided - Не было предоставлено поддерживаемых алгоритмов - - - Wait for timer to expire - Дождитесь истечения таймера - - - Challenge is shorter than required minimum length - Вызов короче требуемой минимальной длины - - - user.id does not match the required length - user.id не соответствует требуемой длине - - - Favorite - Tag for favorite entries - Избранное - - - File does not exist. - Файл не существует. - - - Cannot open file: %1 - Не удается открыть файл: %1 - - - Cannot parse file: %1 at position %2 - Не удается разобрать файл: %1 в позиции %2 - - - Failed to decrypt json file: %1 - Не удалось расшифровать файл json: %1 - - - Invalid encKeyValidation field - Неверное поле encKeyValidation - - - Invalid cipher list within encKeyValidation field - Неверный список шифров в поле encKeyValidation - - - Wrong password - Неверный пароль - - - Invalid encrypted data field - Недопустимое поле зашифрованных данных - - - Invalid cipher list within encrypted data field - Неверный список шифров в поле зашифрованных данных - - - Cannot initialize cipher - Не удается инициализировать шифр - - - Cannot decrypt data - Не удается расшифровать данные - - - Bitwarden Import - Импорт из Bitwarden - - - Archived - Tag for archived entries - Архивировано - - - Invalid 1PUX file format: Not a valid ZIP file. - Неверный формат файла 1PUX: Недопустимый ZIP-файл. - - - Invalid 1PUX file format: Missing export.data - Неверный формат файла 1PUX: отсутствует export.data - - - 1Password Import - Импорт из 1Password - - - Enter Shortcut - Введите комбинацию - - - Action - Действие - - - Shortcuts - Комбинации клавиш - - - Unknown passkeys error - Неизвестная ошибка passkeys - - - Invalid KDF iterations, cannot decrypt json file - Недопустимые итерации KDF, невозможно расшифровать json-файл - - - Unsupported format, ensure your Bitwarden export is password-protected - Неподдерживаемый формат. Убедитесь, что экспорт Bitwarden защищен паролем - - - Only PBKDF and Argon2 are supported, cannot decrypt json file - Поддерживаются только PBKDF и Argon2, невозможно расшифровать json-файл - - - Reset Shortcuts - Сброс комбинаций - - - Double click an action to change its shortcut - Дважды щелкните по действию, чтобы изменить его комбинацию - - - Filter... - Фильтр... - - - Shortcut Conflict - Конфликт комбинации - - - Shortcut %1 conflicts with '%2'. Overwrite shortcut? - Комбинация клавиш %1 конфликтует с '%2'. Перезаписать комбинацию? - - - Cannot generate valid passphrases because the wordlist is too short - Не удалось создать правильную парольную фразу, список слов слишком короткий - - - Encrypted files are not supported. - Зашифрованные файлы не поддерживаются. - - - Proton Pass Import - Импорт из Proton Pass - - - Delete plugin data? - Удалить данные модулей? - - - Delete plugin data from Entry(s)? - Удалить данные плагина из записи?Удалить данные плагина из записей?Удалить данные плагина из записей?Удалить данные плагина из записей? - - - Passkey - Ключ доступа - - - Format to use when exporting. Available choices are 'xml', 'csv' or 'html'. Defaults to 'xml'. - Формат, который будет использоваться при экспорте. Доступны следующие варианты: 'xml', 'csv' или 'html'. По умолчанию используется 'xml'. - - - start minimized to the system tray - запустить скрыв в системном трее - - - malformed string, possible unescaped delimiter - некорректная строка, возможно, неэкранированный разделитель - - - missing closing delimiter - отсутствует закрывающий разделитель - - - %1, row: %2, column: %3 - %1, строка: %2, столбец: %3 - - - Tags - Теги + KeePassXC is not running. No open database to lock + KeePassXC не запущен. Нет открытой базы данных для блокировки QtIOCompressor Internal zlib error when compressing: - Внутренняя ошибка zlib при сжатии: + Внутренняя ошибка zlib при сжатии: Error writing to underlying device: @@ -9260,7 +7969,7 @@ This option is deprecated, use --set-key-file instead. Internal zlib error when decompressing: - Внутренняя ошибка zlib при распаковке: + Внутренняя ошибка zlib при распаковке: @@ -9271,49 +7980,30 @@ This option is deprecated, use --set-key-file instead. Internal zlib error: - Внутренняя ошибка zlib: - - - - RemoteHandler - - Command `%1` did not finish in time. Process was killed. - Команда `%1` не завершилась вовремя. Процесс был завершен. - - - Failed to upload merged database. Command `%1` did not finish in time. Process was killed. - Не удалось загрузить объединенную базу данных. Команда `%1` не завершилась вовремя. Процесс был завершен. - - - Invalid download parameters provided. - Указаны недопустимые параметры загрузки. - - - Command `%1` failed to download database. - Команде `%1` не удалось загрузить базу данных. - - - Invalid database pointer or upload parameters provided. - Неверный указатель базы данных или указанные параметры выгрузки. - - - Command `%1` exited with status code: %2 - Команда `%1` завершилась с кодом состояния: %2 - - - Failed to upload merged database. Command `%1` exited with status code: %2 - Не удалось загрузить объединенную базу данных. Команда `%1` завершилась с кодом состояния: %2 + Внутренняя ошибка zlib: ReportsWidgetBrowserStatistics + + Exclude expired entries from the report + Исключить истёкшие записи из отчёта + + + Show only entries which have URL set + Показывать только те записи, для которых задан URL + + + Show only entries which have browser settings in custom data + Показывать только те записи, которые имеют настройки браузера в пользовательских данных + Double-click entries to edit. - Дважды щёлкните левой кнопкой мыши по записи для редактирования. + Дважды щелкните записи для редактирования. List of entry URLs - Список записей URL + Список URL записей Entry has no URLs set @@ -9321,19 +8011,19 @@ This option is deprecated, use --set-key-file instead. Allowed URLs - Разрешённые URL + Разрешенные URL Entry has no Browser Integration settings - У записи нет параметров интеграции с браузером + У записи нет настроек интеграции с браузером Denied URLs - Запрещённые URL + Запрещенные URL (Excluded) - (Исключено) + (Исключено) This entry is being excluded from reports @@ -9341,11 +8031,11 @@ This option is deprecated, use --set-key-file instead. Please wait, browser statistics is being calculated… - Подождите, идет подсчёт статистики браузера... + Пожалуйста, подождите, идет подсчет статистики браузера... No entries with a URL, or none has browser extension settings saved. - Нет записей с URL, или ни в одной из них не сохранены параметры расширения браузера. + Нет записей с URL, или ни в одной из них не сохранены настройки расширения браузера. Title @@ -9365,66 +8055,57 @@ This option is deprecated, use --set-key-file instead. Delete Entry(s)… - Удаление записи...Удаление записей...Удаление записей...Удаление записей... + Удаление записей... Exclude from reports - Исключить из отчётов - - - Expire Entry(s)… - Истекает запись...Истекают записи...Истекает записей...Истекает записей... - - - Only show entries that have a URL - Показывать только записи с URL-адресом - - - Only show entries that have been explicitly allowed or denied - Показывать только записи, которые были явно разрешены или запрещены - - - Show expired entries - Показать просроченные записи - - - (Expired) - (Истекший) - - - Delete plugin data from Entry(s)… - Удалить данные плагина из записи...Удалить данные плагина из записей..Удалить данные плагина из записей..Удалить данные плагина из записей.. + Исключить из отчетов ReportsWidgetHealthcheck - Show expired entries - Показать просроченные записи + Exclude expired entries from the report + Исключить истёкшие записи из отчёта - (Expired) - (Истекший) + Also show entries that have been excluded from reports + Также показать записи, которые были исключены из отчётов Hover over reason to show additional details. Double-click entries to edit. - Наведите курсор, чтобы просмотреть дополнительные сведения. Для редактирования записи дважды щёлкните левой кнопкой мыши. + Наведите курсор чтобы просмотреть дополнительные сведения. Для редактирования записи щелкните два раза левой кнопкой мыши. + + + Bad + Password quality + Плохой Bad — password must be changed Плохой — пароль должен быть изменён + + Poor + Password quality + Слабый + Poor — password should be changed - Слабый — пароль следует изменить + Так себе — пароль следует изменить + + + Weak + Password quality + Слабый Weak — consider changing the password - Очень слабый — пароль желательно изменить + Слабый — пароль желательно изменить (Excluded) - (Исключено) + (Исключено) This entry is being excluded from reports @@ -9440,7 +8121,7 @@ This option is deprecated, use --set-key-file instead. Title - Название + Заголовок Path @@ -9464,15 +8145,7 @@ This option is deprecated, use --set-key-file instead. Exclude from reports - Исключить из отчётов - - - Expire Entry(s)… - Истекает запись...Истекают записи...Истекает записей...Истекает записей... - - - Show entries that have been excluded from reports - Показать записи, которые были исключены из отчетов + Исключить из отчетов @@ -9491,7 +8164,7 @@ This option is deprecated, use --set-key-file instead. This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. - Эта сборка KeePassXC не имеет сетевых функций. Сеть необходима для проверки паролей по базе данных «Have I Been Pwned». + Эта сборка KeePassXC не имеет сетевых функций. Сеть необходима для проверки паролей по базе данных "Have I Been Pwned". Congratulations, no exposed passwords! @@ -9499,7 +8172,7 @@ This option is deprecated, use --set-key-file instead. Title - Название + Заголовок Path @@ -9511,7 +8184,7 @@ This option is deprecated, use --set-key-file instead. (Excluded) - (Исключено) + (Исключено) This entry is being excluded from reports @@ -9567,78 +8240,7 @@ This option is deprecated, use --set-key-file instead. Exclude from reports - Исключить из отчётов - - - Expire Entry(s)… - Истекает запись...Истекают записи...Истекает записей...Истекает записей... - - - - ReportsWidgetPasskeys - - Export - Экспортируется - - - Import - Импортировать - - - List of entry URLs - Список записей URL - - - Title - Название - - - Path - Путь - - - Username - Логин - - - URLs - URL-адреса - - - Edit Entry… - Изменить запись… - - - Delete Entry(s)… - Удаление записи...Удаление записей...Удаление записей...Удаление записей... - - - Relying Party - Доверенная сторона - - - Show expired entries - Показать просроченные записи - - - (Expired) - (Истекший) - - - Export Confirmation - Подтверждение экспорта - - - The passkey file will be vulnerable to theft and unauthorized use, if left unsecured. Are you sure you want to continue? - Если оставить passkey файл без защиты, он будет уязвим для кражи и несанкционированного использования. Вы уверены, что хотите продолжить? - - - Please wait, list of entries with passkeys is being updated… - Пожалуйста, подождите, список записей с passkeys обновляется... - - - No entries with passkeys. - Нет записей c passkeys. + Исключить из отчетов @@ -9681,7 +8283,7 @@ This option is deprecated, use --set-key-file instead. Unsaved changes - Несохранённые изменения + Несохраненные изменения yes @@ -9729,7 +8331,7 @@ This option is deprecated, use --set-key-file instead. Some passwords are used more than three times. Use unique passwords when possible. - Некоторые пароли используются более трёх раз. Используйте уникальные пароли, когда это возможно. + Некоторые пароли используются более трёх раз. Используйте уникальные пароли, когда это возможно. Number of short passwords @@ -9745,7 +8347,7 @@ This option is deprecated, use --set-key-file instead. Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. - Рекомендуется использовать длинные пароли, состоящие из случайных символов с уровнями безопасности «хорошо» или «отлично». + Рекомендуется использовать длинные пароли, состоящие из случайных символов с уровнями безопасности «хорошо» или «отлично». Entries excluded from reports @@ -9796,11 +8398,11 @@ This option is deprecated, use --set-key-file instead. Restricted lifetime is not supported by the agent (check options). - Ограничение по времени не поддерживается этим агентом (проверьте параметры). + Ограничение по времени не поддерживается этим агентом (проверьте настройки). A confirmation request is not supported by the agent (check options). - Запрос подтверждения не поддерживается этим агентом (проверьте параметры). + Запрос подтверждения не поддерживается этим агентом (проверьте настройки). Security keys are not supported by the agent or the security key provider is unavailable. @@ -9812,15 +8414,7 @@ This option is deprecated, use --set-key-file instead. No agent running, cannot list identities. - Агент не запущен, идентификационные данные недоступны. - - - Failed to remove all SSH identities from agent. - Ошибка при удалении всех SSH-идентификаторов из агента - - - All SSH identities removed from agent. - Все SSH-идентификаторы удалены из агента. + Ни один агент не запущен, идентификационные данные недоступны. @@ -9835,7 +8429,7 @@ This option is deprecated, use --set-key-file instead. Every search term must match (ie, logical AND) - Каждое поисковое выражение должно иметь соответствие (то есть логическое И) + Каждое поисковое выражение должно иметь соответствие (т.е. логическое И) Modifiers @@ -9888,10 +8482,6 @@ This option is deprecated, use --set-key-file instead. Search Help Поиск в Справке - - Save Search - Сохранить поиск - Search (%1)… Search placeholder text, %1 is the keyboard shortcut @@ -9905,6 +8495,10 @@ This option is deprecated, use --set-key-file instead. Limit search to selected group Поиск только в выбранной группе + + Save Search + Сохранить поиск + SettingsClientModel @@ -9944,11 +8538,11 @@ This option is deprecated, use --set-key-file instead. SettingsWidgetFdoSecrets Options - Параметры + Опции Enable KeepassXC Freedesktop.org Secret Service integration - Включить интеграцию KeepassXC со службой «Freedesktop.org Secret Service» + Включить интеграцию KeepassXC со службой Freedesktop.org Secret Service General @@ -9960,19 +8554,38 @@ This option is deprecated, use --set-key-file instead. <html><head/><body><p>If enabled, any attempt to read a password must be confirmed. Otherwise, clients can read passwords without confirmation when the database is unlocked.</p><p>This option only covers the access to the password of an entry. Clients can always enumerate the items of exposed databases and query their attributes.</p></body></html> - <html><head/><body><p>Если этот параметр включён, потребуется подтверждать каждую попытку чтения пароля. Если же он отключён, клиенты смогут выполнять чтение паролей без подтверждения, когда база данных разблокирована.</p><p>Этот параметр управляет только доступом к паролю записи. Клиенты в любой момент могут выполнить перечисление элементов представленных баз данных и запросить их атрибуты.</p></body></html> + <html><head/><body><p>Если эта настройка включена, потребуется подтверждать каждую попытку чтения пароля. Если же он отключён, пользователи смогут выполнять чтение паролей без подтверждения, когда база данных открыта.</p><p>Эта настройка управляет только доступом к паролю записи. Пользователи в любое время могут выполнить перечисление элементов представленных баз данных и запросить их атрибуты.</p></body></html> Confirm when passwords are retrieved by clients Подтверждать получение паролей клиентами + + <html><head/><body><p><span style=" + font-family:'-apple-system','BlinkMacSystemFont','Segoe UI','Helvetica','Arial','sans-serif','Apple Color + Emoji','Segoe UI Emoji'; font-size:14px; color:#24292e; background-color:#ffffff;">This setting does + not override disabling recycle bin prompts</span></p></body></html> + + <html><head/><body><p><span style=" font-family:'-apple-system','BlinkMacSystemFont','Segoe UI','Helvetica','Arial','sans-serif','Apple Color Emoji','Segoe UI Emoji'; font-size:14px; color:#24292e; background-color:#ffffff;">Эта настройка не подавляет запросы на прекращение использования корзины</span></p></body></html> + Confirm when clients request entry deletion Подтверждать запрос удаления записей клиентами + + <html><head/><body><p>This improves compatibility with certain applications + which search for password without unlocking the database first.</p><p>But enabling this may also + crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a + different value set in applications.)</p></body></html> + + <html><head/><body><p>Это улучшает совместимость с некоторыми приложениями, +которые ищут пароль без предварительного открытия базы данных.</p><p>Включение настройки может также +вызвать сбой клиента, если база данных не может быть открыта в течение определённого времени. (Обычно 25 с, другое значение устанавливается в приложениях.)</p></body></html> + + Prompt to unlock database before searching - Предложение разблокировать базу данных перед началом поиска + Предложение открыть базу данных перед началом поиска Exposed database groups: @@ -9988,20 +8601,12 @@ This option is deprecated, use --set-key-file instead. <b>Warning:</b> - <b>Внимание:</b> + <b>Внимание:</b> Save current changes to activate the plugin and enable editing of this section. Сохраните изменения для активации подключаемого модуля и редактирования этого раздела. - - <html><head/><body><p>This setting does not override disabling recycle bin prompts </p></body></html> - <html><head/><body><p>Этот параметр не отменяет отключение подсказок корзины</p></body></html> - - - <html><head/><body><p>This improves compatibility with certain applications which search for password without unlocking the database first.</p><p>But enabling this may also crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a different value set in applications.) </p></body></html> - <html><head/><body><p>Это улучшает совместимость с некоторыми приложениями, которые ищут пароль без предварительной разблокировки базы данных.</p><p>Но включение этой функции может привести к аварийному завершению работы клиента, если база данных не может быть разблокирована в течение определенного таймаута. (Обычно 25 с, но в приложениях может быть установлено другое значение).</p></body></html> - SettingsWidgetKeeShare @@ -10109,14 +8714,6 @@ This option is deprecated, use --set-key-file instead. TagModel - - Clear Search - Очистить поиск - - - All Entries - Все записи - Expired Просроченный @@ -10125,6 +8722,14 @@ This option is deprecated, use --set-key-file instead. Weak Passwords Слабые пароли + + All Entries + Все записи + + + Clear Search + Очистить поиск + TagView @@ -10142,7 +8747,7 @@ This option is deprecated, use --set-key-file instead. Remove tag "%1" from all entries in this database? - Удалить тег «%1» из всех записей в этой базе данных? + Удалить тег "%1" из всех записей в этой базе данных? @@ -10169,7 +8774,7 @@ This option is deprecated, use --set-key-file instead. NOTE: These TOTP settings are custom and may not work with other authenticators. TOTP QR code dialog warning - * Эти параметры TOTP — пользовательские, они могут не работать с другими средствами проверки подлинности. + * Эти настройки TOTP — пользовательские, они могут не работать с другими средствами проверки подлинности. There was an error creating the QR code. @@ -10200,19 +8805,19 @@ This option is deprecated, use --set-key-file instead. Default settings (RFC 6238) - Параметры по умолчанию (RFC 6238) + Настройки по умолчанию (RFC 6238) Steam® settings - Параметры Steam® + Настройки Steam® Custom settings: - Параметры пользователя: + Пользовательские настройки Custom Settings - Особые параметры + Особые настройки Algorithm: @@ -10229,7 +8834,7 @@ This option is deprecated, use --set-key-file instead. sec Seconds - сек + сек Code size: @@ -10250,11 +8855,11 @@ Example: JBSWY3DPEHPK3PXP Confirm Remove TOTP Settings - Подтверждение удаления параметров TOTP + Подтверждение удаления настроек TOTP Are you sure you want to delete TOTP settings for this entry? - Удалить параметры TOTP этой записи? + Удалить настройки TOTP этой записи? @@ -10301,6 +8906,26 @@ Example: JBSWY3DPEHPK3PXP Start storing your passwords securely in a KeePassXC database Начать безопасное хранение ваших паролей в базе данных KeePassXC + + Create new database + Создать новую базу данных + + + Open existing database + Открыть имеющуюся базу данных + + + Import from KeePass 1 + Импорт из KeePass 1 + + + Import from 1Password + Импорт из 1Password + + + Import from CSV + Импорт из CSV + Recent databases Недавние базы данных @@ -10313,18 +8938,6 @@ Example: JBSWY3DPEHPK3PXP Welcome to KeePassXC %1 Вас приветствует KeePassXC %1 - - Create Database - Создать базу данных - - - Open Database - Открыть базу данных - - - Import File - Импортировать файл - WinUtils @@ -10341,11 +8954,34 @@ Example: JBSWY3DPEHPK3PXP Невозможно зарегистрировать глобальную горячую клавишу + + WindowsHello + + Failed to init KeePassXC crypto. + Не удалось инициализировать криптографию KeePassXC. + + + Failed to encrypt key data. + Не удалось зашифровать данные ключа. + + + Failed to get Windows Hello credential. + Не удалось получить учетные данные Windows Hello. + + + Failed to decrypt key data. + Не удалось расшифровать данные ключа. + + YubiKey + + %1 No interface, slot %2 + %1 Без интерфейса, слот %2 + General: - Общий: + Общий: Could not find interface for hardware key with serial number %1. Please connect it to continue. @@ -10354,6 +8990,14 @@ Example: JBSWY3DPEHPK3PXP YubiKeyEditWidget + + Refresh hardware tokens + Перечитать токены + + + Refresh + Обновить + Hardware key slot selection Выбор слота аппаратного ключа @@ -10386,6 +9030,10 @@ Example: JBSWY3DPEHPK3PXP Challenge-Response set, click to change or remove Вызов-ответ установлен, нажмите, чтобы изменить или удалить + + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + <p>Если у вас есть <a href="https://www.yubico.com/">YubiKey</a> или <a href="https://onlykey.io">OnlyKey</a>, его можно использовать для дополнительной безопасности.</p><p>Для работы ключа необходимо, чтобы один из его слотов был запрограммирован как <a href="https://www.yubico.com/products/services-software/challenge-response/">вызов-ответ HMAC-SHA1</a>.</p> + Detecting hardware keys… Обнаружение аппаратных ключей... @@ -10394,25 +9042,28 @@ Example: JBSWY3DPEHPK3PXP No hardware keys detected Аппаратные ключи не обнаружены + + + YubiKeyInterface - Refresh hardware keys - Обновить аппаратные ключи - - - <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed with <a href="https://keepassxc.org/docs/#faq-yubikey-howto">Challenge-Response</a>.</p> - <p>Если у вас есть <a href="https://www.yubico.com/">YubiKey</a> или <a href="https://onlykey.io">OnlyKey</a>, его можно использовать как дополнительную защиту.</p><p>Для работы ключа необходимо, чтобы один из его слотов был запрограммирован как <a href="https://keepassxc.org/docs/#faq-yubikey-howto">вызов-ответ</a>.</p> - - - Hardware keys found, but no slots are configured - Аппаратные ключи найдены, но ни один слот не настроен. + %1 Invalid slot specified - %2 + %1 указан неверный слот — %2 YubiKeyInterfacePCSC + + (PCSC) %1 [%2] Challenge-Response - Slot %3 + (PCSC) %1 [%2] Вызов-ответ - слот %3 + The YubiKey PCSC interface has not been initialized. Интерфейс YubiKey PCSC не был инициализирован. + + Hardware key is currently in use. + Аппаратный ключ уже используется. + Could not find or access hardware key with serial number %1. Please present it to continue. Не удалось найти или получить доступ к аппаратному ключу с серийным номером %1. Подключите его для продолжения. @@ -10429,21 +9080,6 @@ Example: JBSWY3DPEHPK3PXP Failed to complete a challenge-response, the PCSC error code was: %1 Не удалось завершить вызов-ответ, код ошибки PCSC: %1 - - (NFC) %1 [%2] - Slot %3, %4 - YubiKey display fields - (NFC) %1 [%2] - Слот %3, %4 - - - Press - USB Challenge-Response Key interaction request - Нажать - - - Passive - USB Challenge-Response Key no interaction required - Пассивная - YubiKeyInterfaceUSB @@ -10451,6 +9087,14 @@ Example: JBSWY3DPEHPK3PXP Unknown Неизвестен + + (USB) %1 [%2] Configured Slot - %3 + (USB) %1 [%2] Настроенный слот - %3 + + + (USB) %1 [%2] Challenge-Response - Slot %3 - %4 + (USB) %1 [%2] Вызов-ответ - слот %3 - %4 + Press USB Challenge-Response Key interaction request @@ -10465,13 +9109,17 @@ Example: JBSWY3DPEHPK3PXP The YubiKey USB interface has not been initialized. USB-интерфейс YubiKey не был инициализирован. + + Hardware key is currently in use. + Аппаратный ключ уже используется. + Could not find hardware key with serial number %1. Please plug it in to continue. Для продолжения работы подключите аппаратный ключ с серийным номером %1. Hardware key timed out waiting for user interaction. - Ожидание аппаратного ключа истекло во время взаимодействия с пользователем. + Тайм-аут аппаратного ключа во время ожидания действий пользователя. A USB error occurred when accessing the hardware key: %1 @@ -10481,15 +9129,5 @@ Example: JBSWY3DPEHPK3PXP Failed to complete a challenge-response, the specific error was: %1 Не удалось завершить обмен «вызов—ответ»: %1 - - %1 [%2] - Slot %3 - YubiKey NEO display fields - %1 [%2] - Слот %3 - - - %1 [%2] - Slot %3, %4 - YubiKey display fields - %1 [%2] - Слот %3, %4 - \ No newline at end of file diff --git a/share/translations/keepassxc_si.ts b/share/translations/keepassxc_si.ts index ed896116f..b46d2bb3e 100644 --- a/share/translations/keepassxc_si.ts +++ b/share/translations/keepassxc_si.ts @@ -3,7 +3,7 @@ AboutDialog About KeePassXC - කීපාස්එක්ස්සී ගැන + KeePassXC ගැන About @@ -19,7 +19,7 @@ Project Maintainers: - ව්‍යාපෘතිය නඩත්තුකරුවන්: + ව්යාපෘති නඩත්තු කරන්නන්: Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. @@ -31,11 +31,11 @@ <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> - <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">දායකත්‍ව ගිට්හබ් හි බලන්න</a> + <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">GitHub</a>හි දායකත්ව බලන්න Debug Info - නිදොස්කරණ තොරතුරු + දෝශ නිරාකරණ තොරතුරු Include the following information whenever you report a bug: @@ -43,7 +43,7 @@ Copy to clipboard - පසුරු පුවරුවට පිටපතක් + පසුරු පුවරුවට පිටපත් කරන්න @@ -80,17 +80,17 @@ Details විස්තර - - Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. - ඉල්ලන සේවාලාභියා සහ KeePassXC යන දෙකම ක්‍රියාත්මක වන කාලය සඳහා ඔබේ තීරණය මතක තබා ගනු ඇත. - Remember - මතක තබාගන්න + මතක තියාගන්න Allow Selected - තේරීම් සඳහා ඉඩදෙන්න + තෝරාගත් අයට ඉඩ දෙන්න + + + Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. + ඉල්ලන සේවාලාභියා සහ KeePassXC යන දෙකම ක්‍රියාත්මක වන කාලය සඳහා ඔබේ තීරණය මතක තබා ගනු ඇත. Deny All && Future @@ -120,11 +120,7 @@ Use OpenSSH - OpenSSH භාවිතය - - - Use both agents - නියෝත දෙකම භාවිතය + OpenSSH භාවිතා කරන්න SSH_AUTH_SOCK override @@ -154,6 +150,10 @@ SSH Agent connection is working! SSH නියෝජිත සම්බන්ධතාවය ක්‍රියා කරයි! + + Use both agents + නියෝජිතයන් දෙකම භාවිතා කරන්න + ApplicationSettingsWidget @@ -163,16 +163,12 @@ General - සාමාන්‍ය + ජනරාල් Security ආරක්‍ෂාව - - This setting cannot be enabled when minimize on unlock is enabled. - - Access error for config file %1 වින්‍යාස ගොනුව %1සඳහා ප්‍රවේශ දෝෂයකි @@ -217,48 +213,20 @@ You must restart the application to set the new language. Would you like to restart now? නව භාෂාව සැකසීමට ඔබ යෙදුම නැවත ආරම්භ කළ යුතුය. ඔබ දැන් නැවත ආරම්භ කිරීමට කැමතිද? + + Reset Settings? + සැකසුම් නැවත සකස්? + + + Are you sure you want to reset all general and security settings to default? + ඔබට සියලු සාමාන්‍ය සහ ආරක්‍ෂක සැකසුම් පෙරනිමියට යළි පිහිටුවීමට අවශ්‍ය බව විශ්වාසද? + Select backup storage directory උපස්ථ ගබඩා නාමාවලිය තෝරන්න - Confirm Reset - - - - Are you sure you want to reset all settings to default? - - - - Import KeePassXC Settings - - - - Failed to import settings from %1, not a valid settings file. - - - - Export KeePassXC Settings - - - - Small - - - - Normal - - - - Medium - - - - Large - - - - Custom + This setting cannot be enabled when minimize on unlock is enabled. @@ -292,10 +260,6 @@ Remember previously used databases කලින් භාවිතා කළ දත්ත සමුදායන් මතක තබා ගන්න - - recent files - මෑත ගොනු - Load previously open databases on startup ආරම්භයේදී පෙර විවෘත දත්ත සමුදායන් පූරණය කරන්න @@ -312,6 +276,25 @@ Include beta releases when checking for updates යාවත්කාලීන සඳහා පරීක්ෂා කිරීමේදී බීටා නිකුතු ඇතුළත් කරන්න + + On database unlock, show entries that + දත්ත සමුදාය අගුළු හැරීමේදී, එම ඇතුළත් කිරීම් පෙන්වන්න + + + have expired + On database unlock, show entries that... + කල් ඉකුත් වී ඇත + + + days + On database unlock, show entries that will expire within %1 days + දින + + + will expire within + On database unlock, show entries that... + ඇතුළත කල් ඉකුත් වනු ඇත + File Management ගොනු කළමනාකරණය @@ -334,12 +317,24 @@ Backup database file before saving - සුරැකීමට පෙර දත්තසමුදාය උපස්ථ කරන්න + සුරැකීමට පෙර දත්ත සමුදා ගොනුව උපස්ථ කරන්න + + + Backup destination + උපස්ථ ගමනාන්තය + + + Specifies the database backup file location. Occurrences of "{DB_FILENAME}" are replaced with the filename of the saved database without extension. {TIME:<format>} is replaced with the backup time, see https://doc.qt.io/qt-5/qdatetime.html#toString. <format> defaults to format string "dd_MM_yyyy_hh-mm-ss". + දත්ත සමුදා උපස්ථ ගොනු ස්ථානය සඳහන් කරයි. "{DB_FILENAME}" සිදුවීම් දිගුවකින් තොරව සුරකින ලද දත්ත සමුදායේ ගොනු නාමයෙන් ප්‍රතිස්ථාපනය වේ. {TIME:<format>} උපස්ථ කාලය සමඟ ප්‍රතිස්ථාපනය වේ, https://doc.qt.io/qt-5/qdatetime.html#toString බලන්න. පෙළ "dd_MM_yyyy_hh-mm-ss"ආකෘතිකරණය කිරීමට පෙරනිමි <format> ක්. {DB_FILENAME}.old.kdbx {DB_FILENAME}.old.kdbx + + Choose... + තෝරා... + Use alternative saving method (may solve problems with Dropbox, Google Drive, GVFS, etc.) විකල්ප ඉතිරි කිරීමේ ක්‍රමයක් භාවිතා කරන්න (ඩ්‍රොප්බොක්ස්, ගූගල් ඩ්‍රයිව්, ජීවීඑෆ්එස්, ආදිය සමඟ ගැටලු විසඳා ගත හැක) @@ -354,7 +349,7 @@ Entry Management - නිවේශිත කළමනාකරණය + ඇතුල්වීමේ කළමනාකරණය Use group icon on entry creation @@ -362,19 +357,19 @@ Minimize when opening a URL - ඒ.ස.නි. ඇරීමේදී හකුළන්න + URL එකක් විවෘත කිරීමේදී අවම කරන්න Hide window when copying to clipboard - පසුරු පුවරුවට පිටපත් වන විට කවුළුව සඟවන්න + පසුරු පුවරුවට පිටපත් කිරීමේදී කවුළුව සඟවන්න Minimize - හකුළන්න + අවම කරන්න Drop to background - පසුබිමට දමන්න + පසුබිමට ඇද දමන්න Favicon download timeout: @@ -391,7 +386,7 @@ User Interface - පරිශ්‍රීලක අතුරුමුහුණත + පරිශීලක අතුරුමුහුණත Toolbar button style @@ -417,10 +412,6 @@ Toolbar button style: මෙවලම් තීරු බොත්තම් විලාසය: - - Show passwords in color - - Use monospaced font for notes සටහන් සඳහා ඒකපුද්ගල අකුරු භාවිතා කරන්න @@ -451,7 +442,7 @@ Auto-Type - ස්වයං ලිවීම + ස්වයංක්‍රීය වර්ගය Use entry title to match windows for global Auto-Type @@ -479,7 +470,7 @@ Global Auto-Type shortcut: - ගෝලීය ස්වයං ලිවීමේ කෙටිමග: + ගෝලීය ස්වයංක්‍රීය වර්ගයේ කෙටි මග: Auto-type start delay milliseconds @@ -488,15 +479,15 @@ ms Milliseconds - තත්. + මෙනෙවිය Auto-Type typing delay: - ස්වයං ලිවීමේ ප්‍රමාදය: + ස්වයංක්‍රීය ටයිප් කිරීමේ ප්‍රමාදය: Global auto-type shortcut - ගෝලීය ස්වයං ලිවීමේ කෙටිමග + ගෝලීය ස්වයංක්‍රීය ආකාරයේ කෙටි මග Auto-type character typing delay milliseconds @@ -507,68 +498,11 @@ අවසන් වරට ටයිප් කළ ප්‍රවේශය මතක තබා ගන්න: - On database unlock, show entries that will expire within - + recent files + මෑත ගොනු - On database unlock, show entries that will expire within - - - - days - number of days warning for password expiration - දවස් - - - Destination format: - - - - <html><head/><body><p><span style=" font-weight:600;">{DB_FILENAME}</span> is replaced with the filename of the saved database without extension</p><p><span style=" font-weight:600;">{TIME:&lt;format&gt;}</span> is replaced with the specified time format (default: dd_MM_yyyy_hh-mm-ss)</p><p>See the User Guide for more details</p></body></html> - - - - Choose folder... - - - - Show confirmation before moving entries to recycle bin - - - - Copy data on double clicking field in entry view - - - - Show toolbar - - - - Show the menu bar by pressing the Alt key - - - - Show menubar - - - - Import settings… - - - - Export settings… - - - - Open browser on double clicking URL field in entry view - - - - Font size: - - - - Font size selection + Show passwords in color @@ -585,20 +519,20 @@ sec Seconds - තත්. + තත්පර Clear clipboard after - පසුරු පුවරුව මැකීම + පසු පුවරුව හිස් කරන්න Clear search query after - සෙවුම් විමසුම මැකීම + පසුව සෙවුම් විමසුම ඉවත් කරන්න min Minutes - විනා. + මිනි Clipboard clear seconds @@ -624,6 +558,10 @@ Lock databases after minimizing the window කවුළුව අවම කිරීමෙන් පසු දත්ත සමුදායන් අගුළු දමන්න + + Require password repeat when it is visible + එය දෘශ්‍යමාන වන විට මුරපද පුනරාවර්තනය අවශ්‍ය වේ + Hide passwords when editing them මුරපද සංස්කරණය කිරීමේදී ඒවා සඟවන්න @@ -636,6 +574,18 @@ Hide passwords in the entry preview panel ඇතුල්වීමේ පෙරදසුන් පැනලයේ මුරපද සඟවන්න + + Hide entry notes by default + ප්‍රවේශ සටහන් පෙරනිමියෙන් සඟවන්න + + + Move entries to recycle bin without confirmation + තහවුරු කිරීමකින් තොරව ඇතුළත් කිරීම් ප්‍රතිචක්‍රීකරණ බඳුනට ගෙන යන්න + + + Enable double click to copy the username/password entry columns + පරිශීලක නාමය/මුරපද ඇතුළත් කිරීමේ තීරු පිටපත් කිරීමට ද්විත්ව ක්ලික් කිරීම සබල කරන්න + Privacy රහස්‍යතාව @@ -644,22 +594,6 @@ Use DuckDuckGo service to download website icons වෙබ් අඩවි අයිකන බාගැනීමට DuckDuckGo සේවාව භාවිතා කරන්න - - Hide TOTP in the entry preview panel - - - - Lock databases when switching user - - - - Lock Options - - - - Hide notes in the entry preview panel - - AutoType @@ -669,7 +603,7 @@ Auto-Type Error - ස්වයං ලිවීමේ දෝෂයකි + ස්වයංක්‍රීය ටයිප් දෝෂය Permission Required @@ -685,7 +619,7 @@ Invalid entry provided - සැපයූ නිවේශිතය වලංගු නොවේ + වලංගු නොවන ඇතුළත් කිරීමක් සපයා ඇත Bracket imbalance detected, found extra { or } @@ -704,13 +638,27 @@ ඉතා දිගු ප්‍රමාදයක් අනාවරණය විය, උපරිමය %1: %2වේ - Entry does not have attribute for PICKCHARS: %1 - ප්‍රවේශයට PICKCHARS සඳහා ගුණාංග නොමැත: %1 + Invalid conversion type: %1 + වලංගු නොවන පරිවර්තන වර්ගය: %1 + + + Invalid conversion syntax: %1 + අවලංගු පරිවර්තන වාක්‍ය ඛණ්ඩය: %1 + + + Invalid regular expression syntax %1 +%2 + වලංගු නොවන නිත්‍ය ප්‍රකාශන වාක්‍ය ඛණ්ඩ %1 +%2 Invalid placeholder: %1 වලංගු නොවන ස්ථාන දරණ: %1 + + Entry does not have attribute for PICKCHARS: %1 + ප්‍රවේශයට PICKCHARS සඳහා ගුණාංග නොමැත: %1 + AutoTypeAssociationsModel @@ -752,6 +700,10 @@ AutoTypePlatformX11 + + Trying to send invalid keysym. + වලංගු නොවන යතුරු පදයක් යැවීමට උත්සාහ කරමින්. + Sequence aborted: Caps Lock is on අනුපිළිවෙල ගබ්සා විය: Caps Lock ක්‍රියාත්මකයි @@ -764,16 +716,12 @@ Unable to get valid keycode for key: යතුර සඳහා වලංගු යතුරු කේතය ලබා ගත නොහැක: - - Trying to send invalid keyboard symbol. - - AutoTypeSelectDialog Auto-Type - KeePassXC - ස්වයං ලිවීම - KeePassXC + ස්වයංක්‍රීය වර්ගය - KeePassXC Double click a row to perform Auto-Type or find an entry using the search: @@ -795,7 +743,7 @@ Ctrl+4 - Virtual Keyboard භාවිතා කරන්න (Wind පමණි) Search all open databases - විවෘත සියළු දත්තසමුදා සොයන්න + සියලුම විවෘත දත්ත සමුදායන් සොයන්න Search… @@ -831,18 +779,18 @@ Ctrl+4 - Virtual Keyboard භාවිතා කරන්න (Wind පමණි) Copy TOTP - TOTP පිටපතක් + TOTP පිටපත් කරන්න Use Virtual Keyboard - අතථ්‍ය යතුරුපුවරුව භාවිතය + අතථ්‍ය යතුරුපුවරුව භාවිතා කරන්න BrowserAccessControlDialog KeePassXC - Browser Access Request - KeePassXC - අතිරික්සුවට ප්‍රවේශය ඉල්ලීම + KeePassXC - බ්‍රව්සර් ප්‍රවේශ ඉල්ලීම %1 is requesting access to the following entries: @@ -854,15 +802,15 @@ Ctrl+4 - Virtual Keyboard භාවිතා කරන්න (Wind පමණි) Remember - මතක තබාගන්න + මතක තියාගන්න Allow access to entries - නිවේශිත වෙත ප්‍රවේශයට ඉඩදෙන්න + ඇතුළත් කිරීම් වලට ප්‍රවේශ වීමට ඉඩ දෙන්න Allow Selected - තේරීම් සඳහා ඉඩදෙන්න + තෝරාගත් අයට ඉඩ දෙන්න Deny All @@ -870,15 +818,15 @@ Ctrl+4 - Virtual Keyboard භාවිතා කරන්න (Wind පමණි) Disable for this site - මෙම අඩවියට අබල කරන්න - - - Undo - + මෙම අඩවිය සඳහා අබල කරන්න BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + KeePassXC-Browser Save Entry + Ok හරි @@ -893,73 +841,13 @@ Please select the correct database for saving credentials. ඔබට බහු දත්ත සමුදායන් විවෘතව ඇත. කරුණාකර අක්තපත්‍ර සුරැකීමට නිවැරදි දත්ත සමුදාය තෝරන්න. - - KeePassXC - Select Database - - - - - BrowserPasskeysConfirmationDialog - - Cancel - අවලංගු කරන්න - - - Update - - - - Authenticate - - - - Register new - - - - Register - - - - Timeout in <b>%n</b> seconds... - - - - Relying Party: %1 - - - - Username: %1 - - - - KeePassXC - Passkey credentials - - - - Add to existing entry - - - - Existing passkey found. -Do you want to register a new passkey for: - - - - Select the existing passkey and press Update to replace it. - - - - Authenticate passkey credentials for: - - - - Do you want to register a passkey for: - - BrowserService + + KeePassXC: Create a new group + KeePassXC: නව කණ්ඩායමක් සාදන්න + A request for creating a new group "%1" has been received. Do you want to create this group? @@ -968,6 +856,10 @@ Do you want to create this group? ඔබට මෙම කණ්ඩායම නිර්මාණය කිරීමට අවශ්‍යද? + + KeePassXC: New key association request + KeePassXC: නව යතුරු සංගම් ඉල්ලීම + You have received an association request for the following database: %1 @@ -982,7 +874,11 @@ chrome-laptop. Save and allow access - සුරකින්න හා ප්‍රවේශයට ඉඩදෙන්න + සුරකින්න සහ ප්‍රවේශයට ඉඩ දෙන්න + + + KeePassXC: Overwrite existing key? + KeePassXC: පවතින යතුර උඩින් ලියන්නද? A shared encryption key with the name "%1" already exists. @@ -990,10 +886,18 @@ Do you want to overwrite it? "%1" නම සහිත හවුල් සංකේතාංකන යතුරක් දැනටමත් පවතී. ඔබට එය උඩින් ලිවීමට අවශ්‍යද? + + KeePassXC: Update Entry + KeePassXC: ප්‍රවේශය යාවත්කාලීන කරන්න + Do you want to update the information in %1 - %2? ඔබට %1 - %2තුළ තොරතුරු යාවත්කාලීන කිරීමට අවශ්‍යද? + + KeePassXC: Delete entry + KeePassXC: ඇතුළත් කිරීම මකන්න + A request for deleting entry "%1" has been received. Do you want to delete the entry? @@ -1003,57 +907,50 @@ Do you want to delete the entry? - %1 (Passkey) - + Converting attributes to custom data… + අභිරුචි දත්ත…වෙත ගුණාංග පරිවර්තනය කිරීම - KeePassXC - Create a new group - + Abort + ගබ්සා කරන්න - Disable - අක්රිය කරන්න + KeePassXC: Converted KeePassHTTP attributes + KeePassXC: පරිවර්තනය කරන ලද KeePassHTTP ගුණාංග - KeePassXC - Overwrite existing key? - + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + %1 ඇතුළත් කිරීම්(ය) වෙතින් උපලක්ෂණ සාර්ථකව පරිවර්තනය කරන ලදී. +යතුරු %2 අභිරුචි දත්ත වෙත ගෙන යන ලදී. + + + Successfully moved %n keys to custom data. + අභිරුචි දත්ත වෙත යතුරු %n ක් සාර්ථකව ගෙන යන ලදී.අභිරුචි දත්ත වෙත යතුරු %n ක් සාර්ථකව ගෙන යන ලදී. - KeePassXC - Update Entry - + KeePassXC: No entry with KeePassHTTP attributes found! + KeePassXC: KeePassHTTP ගුණාංග සහිත ප්‍රවේශයක් හමු නොවීය! - KeePassXC - Delete entry - + The active database does not contain an entry with KeePassHTTP attributes. + සක්‍රිය දත්ත ගබඩාවේ KeePassHTTP ගුණාංග සහිත ප්‍රවේශයක් අඩංගු නොවේ. - KeePassXC - New key association request - + Don't show this warning again + මෙම අනතුරු'නැවත පෙන්වන්න එපා - Passkey - + KeePassXC: Legacy browser integration settings detected + KeePassXC: Legacy browser integration settings අනාවරණය විය - KeePassXC - Passkey credentials - - - - Register a new passkey to this entry: - - - - KeePassXC - Update passkey - - - - Entry already has a passkey. -Do you want to overwrite the passkey in %1 - %2? - - - - Register - + 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? + ඔබගේ KeePassXC-Browser සැකසුම් දත්ත සමුදා සැකසුම් වෙත ගෙන යාමට අවශ්‍ය වේ. +ඔබගේ වත්මන් බ්‍රවුසර සම්බන්ධතා පවත්වා ගැනීමට මෙය අවශ්‍ය වේ. +ඔබ දැන් ඔබගේ පවතින සැකසුම් සංක්‍රමණය කිරීමට කැමතිද? @@ -1068,11 +965,15 @@ Do you want to overwrite the passkey in %1 - %2? Enable browser integration - අතිරික්සු අනුකලනය සබල කරන්න + බ්රවුසර ඒකාබද්ධ කිරීම සක්රිය කරන්න General - සාමාන්‍ය + ජනරාල් + + + Browsers installed as snaps are currently not supported. + ස්නැප් ලෙස ස්ථාපනය කර ඇති බ්‍රව්සර් දැනට සහය නොදක්වයි. Enable integration for these browsers: @@ -1096,7 +997,7 @@ Do you want to overwrite the passkey in %1 - %2? Brave - බ්‍රේව් + නිර්භීත Google Chrome @@ -1150,7 +1051,7 @@ Do you want to overwrite the passkey in %1 - %2? Advanced - වැඩිදුර + උසස් Never ask before accessing credentials @@ -1245,62 +1146,42 @@ Do you want to overwrite the passkey in %1 - %2? Custom extension ID අභිරුචි දිගු ID + + Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 + Snap sandboxing හේතුවෙන්, ඔබ බ්‍රවුසර ඒකාබද්ධ කිරීම සබල කිරීමට ස්ක්‍රිප්ට් එකක් ධාවනය කළ යුතුය.<br />ඔබට මෙම ස්ක්‍රිප්ට් එක %1වෙතින් ලබාගත හැක + + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 + KeePassXC-Browser ක්‍රියා කිරීමට බ්‍රවුසර ඒකාබද්ධ කිරීම සඳහා අවශ්‍ය වේ. <br />එය %1 සහ %2 සහ %3සඳහා බාගන්න. %4 + + + Please see special instructions for browser extension use below + කරුණාකර පහත බ්‍රවුසර දිගු භාවිතය සඳහා විශේෂ උපදෙස් බලන්න + + + <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. + <b>දෝෂය:</b> අභිරුචි ප්‍රොක්සි ස්ථානය සොයාගත නොහැක!<br/>ප්‍රොක්සි යෙදුම නොමැතිව බ්‍රව්සර් ඒකාබද්ධ කිරීම ක්‍රියා නොකරයි. + + + <b>Warning:</b> The following options can be dangerous! + <b>අවවාදයයි:</b> පහත විකල්ප අනතුරුදායක විය හැක! + Executable Files ක්‍රියාත්මක කළ හැකි ගොනු All Files - සියළුම ගොනු + සියලුම ගොනු Select custom proxy location - අභිරුචි ප්‍රතියුක්ත ස්ථානය තෝරන්න + අභිරුචි ප්‍රොක්සි ස්ථානය තෝරන්න Select native messaging host folder location ස්වදේශීය පණිවිඩ ධාරක ෆෝල්ඩර ස්ථානය තෝරන්න - - Allow keepassxc-proxy to list all entries with their title, URL and UUID in connected databases. - - - - Allow limited access to all entries in connected databases (ignores site access restrictions) - - - - <b>Warning:</b> Only adjust these settings if necessary. - - - - The custom proxy location does not exist. - - - - <b>Error:</b> The custom proxy location does not exist. Correct this in the advanced settings tab. - - - - <b>Error:</b> The installed proxy executable is missing from the expected location: %1<br/>Please set a custom proxy location in the advanced settings or reinstall the application. - - - - Allows using insecure http://localhost with passkeys for testing purposes. - - - - Allow using localhost with passkeys - - - - KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. - - - - Browsers installed using Snap or Flatpak are not supported with exception to Firefox installed using Snap. - - CloneDialog @@ -1318,11 +1199,19 @@ Do you want to overwrite the passkey in %1 - %2? Copy history - ඉතිහාසයේ පිටපතක් + ඉතිහාසය පිටපත් කරන්න CsvImportWidget + + Import CSV fields + CSV ක්ෂේත්‍ර ආයාත කරන්න + + + filename + ගොනුවේ නම + size, rows, columns ප්‍රමාණය, පේළි, තීරු @@ -1361,11 +1250,11 @@ Do you want to overwrite the passkey in %1 - %2? Created - සෑදිණි + නිර්මාණය කළා Last Modified - අවසාන සංශෝධනය + අවසන් වරට වෙනස් කරන ලදී Icon @@ -1431,43 +1320,51 @@ Do you want to overwrite the passkey in %1 - %2? Column %1 තීරුව %1 + + Imported from CSV file + CSV ගොනුවෙන් ආයාත කර ඇත + + + Original data: + මුල් දත්ත: + + + Error(s) detected in CSV file! + CSV ගොනුවේ දෝෂ(ය) අනාවරණය විය! + [%n more message(s) skipped] [තව පණිවිඩ%n ක් මඟ හැරිණි][තව පණිවිඩ%n ක් මඟ හැරිණි] - Failed to parse CSV file: %1 - + Error + දෝෂයකි - Imported from CSV file: %1 - - - - No Title Selected - - - - No title column was selected, entries will be hard to tell apart. -Are you sure you want to import? - - - - Tags - අනන්‍යන + CSV import: writer has errors: +%1 + CSV ආයාත: ලේඛකයාට දෝෂ ඇත: +%1 CsvParserModel + + %1, %2, %3 + file info: bytes, rows, columns + %1, %2, %3 + + + %n byte(s) + %n බයිට්(ය)%n බයිට්(ය) + %n row(s) - CSV row count - පේළි %nපේළි %n + පේළි %n (ය)පේළි %n (ය) %n column(s) - CSV column count - තීරු %nතීරු %n + %n තීරු(ය)%n තීරු(ය) @@ -1483,11 +1380,11 @@ Are you sure you want to import? Unable to open file %1. - %1 ගොනුව ඇරීමට නොහැකිය. + %1ගොනුව විවෘත කළ නොහැක. Error while reading the database: %1 - දත්තසමුදාය කියවීමේදී දෝෂයකි: %1 + දත්ත සමුදාය කියවීමේදී දෝෂයකි: %1 Could not save, database does not point to a valid file. @@ -1519,14 +1416,6 @@ Backup database located at %2 Recycle Bin ප්‍රතිචක්‍රීකරණ බඳුන - - Database file read error. - - - - No file path was provided. - - DatabaseOpenDialog @@ -1547,12 +1436,32 @@ Backup database located at %2 Password field - මුරපද ක්‍ෂේත්‍රය + මුරපද ක්ෂේත්‍රය + + + Enter Additional Credentials (if any): + අමතර අක්තපත්‍ර ඇතුළත් කරන්න (ඇත්නම්): + + + Key File: + ප්රධාන ගොනුව: + + + Key file help + ප්රධාන ගොනු උපකාරය Hardware key slot selection දෘඪාංග යතුරු තව් තෝරාගැනීම + + Hardware Key: + දෘඪාංග යතුර: + + + Hardware key help + දෘඪාංග යතුරු උපකාරය + Key file to unlock the database දත්ත සමුදාය අගුළු ඇරීමට යතුරු ගොනුව @@ -1565,9 +1474,17 @@ Backup database located at %2 Browse… පිරික්සන්න... + + Refresh hardware tokens + දෘඪාංග ටෝකන නැවුම් කරන්න + + + Refresh + නැවුම් කරන්න + Unlock Database - දත්තසමුදාය අගුළු හරින්න + දත්ත සමුදාය අගුළු හරින්න Cancel @@ -1627,6 +1544,14 @@ To prevent this error from appearing, you must go to "Database Settings / S Retry with empty password හිස් මුරපදය සමඟ නැවත උත්සාහ කරන්න + + Failed to authenticate with Windows Hello + Windows Hello සමඟ සත්‍යාපනය කිරීමට අසමත් විය + + + Failed to authenticate with Touch ID + ස්පර්ශ හැඳුනුම්පත සමඟ සත්‍යාපනය කිරීමට අසමත් විය + Failed to open key file: %1 යතුරු ගොනුව විවෘත කිරීමට අසමත් විය: %1 @@ -1645,11 +1570,11 @@ To prevent this error from appearing, you must go to "Database Settings / S All files - සියළුම ගොනු + සියලුම ගොනු Key files - යතුරු ගොනු + ප්රධාන ගොනු Select key file @@ -1660,64 +1585,32 @@ To prevent this error from appearing, you must go to "Database Settings / S දත්ත සමුදා ගොනුව යතුරු ගොනුවක් ලෙස භාවිතා කළ නොහැක - authenticate to access the database - + You cannot use your database file as a key file. +If you do not have a key file, please leave the field empty. + ඔබට ඔබේ දත්ත සමුදා ගොනුව ප්‍රධාන ගොනුවක් ලෙස භාවිතා කළ නොහැක. +ඔබ සතුව යතුරු ගොනුවක් නොමැති නම්, කරුණාකර ක්ෂේත්‍රය හිස්ව තබන්න. - Failed to authenticate with Quick Unlock: %1 - + Detecting hardware keys… + දෘඪාංග යතුරු හඳුනාගැනීම… - Select Key File: - + No hardware keys detected + දෘඪාංග යතුරු අනාවරණය කර නොමැත - <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!</p> - + Select hardware key… + දෘඪාංග යතුර…තෝරන්න - Use hardware key [Serial: %1] - + <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information…</p> + <p>මුරපදයකට අමතරව, ඔබේ දත්ත සමුදායේ ආරක්ෂාව වැඩි කිරීමට ඔබට රහස් ගොනුවක් භාවිතා කළ හැකිය. මෙම ගොනුව ඔබගේ දත්ත සමුදායේ'ආරක්ෂක සැකසුම් තුළ ජනනය කළ හැක.</p><p>මෙය ඔබගේ *.kdbx දත්ත සමුදා ගොනුව <strong>නොවේ</strong> !<br>ඔබ සතුව යතුරු ගොනුවක් නොමැති නම්, මෙම ක්ෂේත්‍රය හිස්ව තබන්න.</p><p>වැඩි විස්තර සඳහා ක්ලික් කරන්න…</p> - Use hardware key - - - - Your database file is NOT a key file! -If you don't have a key file or don't know what that is, you don't have to select one. - - - - KeePassXC database file selected - - - - The file you selected looks like a database file. -A database file is NOT a key file! - -Are you sure you want to continue with this file?. - - - - No hardware keys found. - - - - Refresh Hardware Keys - - - - Click to add a key file. - - - - <a href="#" style="text-decoration: underline">I have a key file</a> - - - - Hardware keys found, but no slots are configured. - + <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +<p>Click for more information…</p> + <p>ඔබට HMAC-SHA1 සඳහා වින්‍යාස කර ඇති තව් සහිත <strong>YubiKey</strong> හෝ <strong>OnlyKey</strong> වැනි දෘඪාංග ආරක්ෂණ යතුරක් භාවිත කළ හැක.</p> +<p>වැඩි විස්තර සඳහා ක්ලික් කරන්න…</p> @@ -1729,6 +1622,10 @@ Are you sure you want to continue with this file?. DatabaseSettingsDialog + + Advanced Settings + උසස් සැකසුම් + General ජනරාල් @@ -1753,22 +1650,6 @@ Are you sure you want to continue with this file?. Maintenance නඩත්තු - - KeeShare - KeeShare - - - Secret Service Integration - රහස් සේවා ඒකාබද්ධ කිරීම - - - Remote Sync - - - - Database Settings: %1 - - DatabaseSettingsWidgetBrowser @@ -1776,6 +1657,18 @@ Are you sure you want to continue with this file?. KeePassXC-Browser settings KeePassXC-Browser සැකසුම් + + Convert KeePassHTTP data + KeePassHTTP දත්ත පරිවර්තනය කරන්න + + + Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data + පැරණි KeePassHTTP ගුණාංග KeePassXC-බ්‍රවුසරයට ගැළපෙන අභිරුචි දත්ත බවට පරිවර්තනය කරන්න + + + Refresh database root group ID + දත්ත සමුදා මූල කණ්ඩායම් හැඳුනුම්පත නැවුම් කරන්න + Disconnect all browsers සියලුම බ්‍රව්සර් විසන්ධි කරන්න @@ -1784,10 +1677,6 @@ Are you sure you want to continue with this file?. Forget all site-specific settings on entries ඇතුළත් කිරීම් වල සියලුම අඩවි-විශේෂිත සැකසුම් අමතක කරන්න - - Refresh database root group ID - දත්ත සමුදා මූල කණ්ඩායම් හැඳුනුම්පත නැවුම් කරන්න - Stored keys ගබඩා කළ යතුරු @@ -1836,10 +1725,18 @@ This may prevent connection to the browser plugin. ඔබට සැබවින්ම සියලුම බ්‍රව්සර් විසන්ධි කිරීමට අවශ්‍යද? මෙය බ්‍රවුසර ප්ලගිනයට සම්බන්ධ වීම වැළැක්විය හැක. + + KeePassXC: No keys found + KeePassXC: යතුරු කිසිවක් හමු නොවීය + No shared encryption keys found in KeePassXC settings. KeePassXC සැකසීම් තුළ හවුල් සංකේතාංකන යතුරු හමු නොවීය. + + KeePassXC: Removed keys from database + KeePassXC: දත්ත සමුදායෙන් යතුරු ඉවත් කරන ලදී + Successfully removed %n encryption key(s) from KeePassXC settings. KeePassXC සිටුවම් වලින් %n සංකේතාංකන යතුර(ය) සාර්ථකව ඉවත් කරන ලදී.KeePassXC සිටුවම් වලින් %n සංකේතාංකන යතුර(ය) සාර්ථකව ඉවත් කරන ලදී. @@ -1858,14 +1755,32 @@ Permissions to access entries will be revoked. Abort ගබ්සා කරන්න + + KeePassXC: Removed permissions + KeePassXC: අවසර ඉවත් කරන ලදී + Successfully removed permissions from %n entry(s). ඇතුළත් කිරීම් %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 convert all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + ඔබට සැබවින්ම සියලුම පැරණි බ්‍රවුසර ඒකාබද්ධ කිරීමේ දත්ත නවතම ප්‍රමිතියට පරිවර්තනය කිරීමට අවශ්‍යද? +බ්‍රව්සර් ප්ලගිනය සමඟ ගැළපුම පවත්වා ගැනීමට මෙය අවශ්‍ය වේ. + Refresh database ID දත්ත සමුදා හැඳුනුම්පත නැවුම් කරන්න @@ -1876,26 +1791,6 @@ This is only necessary if your database is a copy of another and the browser ext ඔබට ඇත්තටම දත්ත සමුදා හැඳුනුම්පත නැවුම් කිරීමට අවශ්‍යද? මෙය අවශ්‍ය වන්නේ ඔබගේ දත්ත සමුදාය වෙනත් පිටපතක් නම් සහ බ්‍රවුසර දිගුව සම්බන්ධ කළ නොහැකි නම් පමණි. - - Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data - පැරණි KeePassHTTP ගුණාංග KeePassXC-බ්‍රවුසරයට ගැළපෙන අභිරුචි දත්ත බවට පරිවර්තනය කරන්න - - - No keys found - - - - Removed keys from database - - - - Removed permissions - - - - No entry with permissions found! - - DatabaseSettingsWidgetDatabaseKey @@ -1935,18 +1830,6 @@ Are you sure you want to continue without a password? Failed to change database credentials දත්ත සමුදා අක්තපත්‍ර වෙනස් කිරීමට අසමත් විය - - Weak password - දුර්වල මුරපදය - - - This is a weak password! For better protection of your secrets, you should choose a stronger password. - - - - The provided password does not meet the minimum quality requirement. - - DatabaseSettingsWidgetEncryption @@ -1954,6 +1837,14 @@ Are you sure you want to continue without a password? Decryption Time: විසංකේතන කාලය: + + Change existing decryption time + පවතින විකේතන කාලය වෙනස් කරන්න + + + Change + වෙනස් කරන්න + Decryption time in seconds තත්පර වලින් විකේතන කාලය @@ -2034,6 +1925,11 @@ Are you sure you want to continue without a password? KDBX 3 KDBX 3 + + unchanged + Database decryption time is unchanged + නොවෙනස්ව + Number of rounds too high Key transformation rounds @@ -2086,18 +1982,6 @@ If you keep this number, your database will not be protected from brute force at Threads for parallel execution (KDF settings) නූල්(ය) නූල්(ය) - - Encryption Settings: - - - - Basic - - - - Advanced - වැඩිදුර - DatabaseSettingsWidgetFdoSecrets @@ -2156,10 +2040,18 @@ If you keep this number, your database will not be protected from brute force at Maximum number of history items per entry එක් ප්‍රවේශයකට ඉතිහාස අයිතම උපරිම සංඛ්‍යාව + + Max. history items: + උපරිම. ඉතිහාස අයිතම: + Maximum size of history per entry එක් ප්‍රවේශයකට ඉතිහාසයේ උපරිම ප්‍රමාණය + + Max. history size: + උපරිම. ඉතිහාස ප්රමාණය: + MiB MiB @@ -2190,99 +2082,6 @@ This action is not reversible. (old) (පරණ) - - When saving this setting or editing an entry -the oldest history items of an entry will be -removed such that only the specified amount -of entries remain at most. - - - - Limit the amount of history items per entry to: - - - - When saving this setting or editing an entry -the oldest history items of an entry will be -removed such that the remaining history items -add up to the specified amount at most. - - - - Limit the total size of history items per entry to: - - - - Move entries to a recycle bin group -instead of deleting them from the database. -Entries deleted from the recycle bin are -removed from the database. - - - - Autosave delay since last change - - - - Autosave delay - - - - Autosave delay since last change in minutes - - - - min - විනා. - - - Autosave delay since last change checkbox - - - - Public Database Metadata - - - - Warning: the following settings are not encrypted. - - - - Display name: - - - - Publically visible display name used on the unlock dialog - - - - Database public display name - - - - Display color: - - - - Publically visible color used on the unlock dialog - - - - Database public display color chooser - - - - Clear - පැහැදිලිව - - - Display icon: - - - - Select Database Icon - - DatabaseSettingsWidgetKeeShare @@ -2371,134 +2170,11 @@ removed from the database. Description: - සවිස්තරය: + විස්තර: Database description field - දත්තසමුදායේ විස්තර ක්‍ෂේත්‍රය - - - - DatabaseSettingsWidgetRemote - - Sync Commands - - - - Remove - ඉවතලන්න - - - Command Settings - - - - Name - නම - - - Save - සුරකින්න - - - Download - - - - Command: - - - - Download command field - - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - - - - Input: - - - - Download input field - - - - Upload - - - - Upload command field - - - - e.g.: "sftp user@hostname" or "scp {TEMP_DATABASE} user@hostname:DatabaseOnRemote.kdbx" - - - - Upload input field - - - - Name cannot be empty. - - - - Test - - - - Download command cannot be empty. - - - - Download failed with error: %1 - - - - Download finished, but file %1 could not be found. - - - - Download successful. - - - - Save Remote Settings - - - - You have unsaved changes. Do you want to save them? - - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - - - - e.g.: -put {TEMP_DATABASE} DatabaseOnRemote.kdbx -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - - - - Timeout: - - - - seconds - තත්පර + දත්ත සමුදා විස්තර ක්ෂේත්‍රය @@ -2515,15 +2191,15 @@ This is definitely a bug, please report it to the developers. KeePass 2 Database - KeePass 2 දත්තසමුදාය + KeePass 2 දත්ත සමුදාය All files - සියළුම ගොනු + සියලුම ගොනු Open database - දත්තසමුදාය අරින්න + දත්ත සමුදාය විවෘත කරන්න Failed to open %1. It either does not exist or is not accessible. @@ -2533,13 +2209,29 @@ This is definitely a bug, please report it to the developers. CSV file CSV ගොනුව + + Select CSV file + CSV ගොනුව තෝරන්න + Merge database - දත්තසමුදාය ඒකාබද්ධය + දත්ත සමුදාය ඒකාබද්ධ කරන්න + + + KeePass 1 database + KeePass 1 දත්ත සමුදාය + + + Open KeePass 1 database + KeePass 1 දත්ත සමුදාය විවෘත කරන්න + + + Open OPVault + OPVault විවෘත කරන්න Export database to CSV file - දත්තසමුදාය CSV ගොනුවකට නිර්යාතය + දත්ත සමුදාය CSV ගොනුවට අපනයනය කරන්න Writing the CSV file failed. @@ -2547,7 +2239,29 @@ This is definitely a bug, please report it to the developers. Writing the HTML file failed. - HTML ගොනුව ලිවීමට අසමත් විය. + HTML ගොනුව ලිවීම අසාර්ථක විය. + + + Export Confirmation + අපනයන තහවුරු කිරීම + + + You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? + ඔබ ඔබේ දත්ත සමුදාය සංකේතනය නොකළ ගොනුවකට අපනයනය කිරීමට සූදානම් වේ. මෙය ඔබගේ මුරපද සහ සංවේදී තොරතුරු අවදානමට ලක් කරයි! ඔබට දිගටම කරගෙන යාමට අවශ්‍ය බව විශ්වාසද? + + + New Database + නව දත්ත සමුදාය + + + %1 [New Database] + Database tab name modifier + %1 [නව දත්ත සමුදාය] + + + %1 [Locked] + Database tab name modifier + %1 [Locked] Export database to XML file @@ -2561,31 +2275,9 @@ This is definitely a bug, please report it to the developers. Writing the XML file failed - - Export Confirmation - අපනයන තහවුරු කිරීම - - - You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? - ඔබ ඔබේ දත්ත සමුදාය සංකේතනය නොකළ ගොනුවකට අපනයනය කිරීමට සූදානම් වේ. මෙය ඔබගේ මුරපද සහ සංවේදී තොරතුරු අවදානමට ලක් කරයි! ඔබට දිගටම කරගෙන යාමට අවශ්‍ය බව විශ්වාසද? - - - %1 [Locked] - Database tab name modifier - %1 [Locked] - - - %1 [Temporary] - Database tab name modifier - - DatabaseWidget - - Searches and Tags - - Searching… සොයමින්… @@ -2596,7 +2288,7 @@ This is definitely a bug, please report it to the developers. Confirm Auto-Type - ස්වයං ලිවීම තහවුරුව + ස්වයංක්‍රීය වර්ගය තහවුරු කරන්න Perform Auto-Type into the previously active window? @@ -2612,7 +2304,7 @@ This is definitely a bug, please report it to the developers. Remember my choice - තේරීම මතක තබාගන්න + මගේ තේරීම මතක තබා ගන්න Delete group @@ -2632,11 +2324,7 @@ This is definitely a bug, please report it to the developers. Expired entries - ඉකුත් වූ නිවේශිත - - - Entries expiring within %1 day(s) - නිවේශිත දවස් %1 කින් ඉකුත් වේනිවේශිත දවස් %1 කින් ඉකුත් වේ + කල් ඉකුත් වූ ඇතුළත් කිරීම් No current database. @@ -2662,21 +2350,9 @@ This is definitely a bug, please report it to the developers. No Results ප්‍රතිපල නැත - - Save - සුරකින්න - - - Enter a unique name or overwrite an existing search from the list: - - - - Save Search - - Lock Database? - දත්තසමුදාය අගුළු දමන්නද? + දත්ත සමුදාය අගුළු දමන්නද? You are editing an entry. Discard changes and lock anyway? @@ -2702,6 +2378,26 @@ Save changes? 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? + දත්ත සමුදා ගොනුව වෙනස් වී ඇති අතර ඔබට නොසුරකින ලද වෙනස්කම් ඇත. +ඔබට ඔබගේ වෙනස්කම් ඒකාබද්ධ කිරීමට අවශ්‍යද? + + + Could not open the new database file while attempting to autoreload. +Error: %1 + ස්වයංක්‍රීයව පූරණය කිරීමට උත්සාහ කරන අතරතුර නව දත්ත සමුදා ගොනුව විවෘත කිරීමට නොහැකි විය. +දෝෂය: %1 + Disable safe saves? ආරක්ෂිත සුරැකුම් අබල කරන්නද? @@ -2726,11 +2422,11 @@ Disable safe saves and try again? KeePass 2 Database - KeePass 2 දත්තසමුදාය + KeePass 2 දත්ත සමුදාය Save database backup - දත්තසමුදායේ උපස්ථයක් සුරකින්න + දත්ත සමුදා උපස්ථය සුරකින්න Empty recycle bin? @@ -2744,93 +2440,24 @@ Disable safe saves and try again? Could not find database file: %1 දත්ත සමුදා ගොනුව සොයා ගැනීමට නොහැකි විය: %1 - - New Database - නව දත්තසමුදාය + + Entries expiring within %1 day(s) + ඇතුළත් කිරීම් දින %1 ක් ඇතුළත කල් ඉකුත් වේඇතුළත් කිරීම් දින %1 ක් ඇතුළත කල් ඉකුත් වේ - %1 [New Database] - Database tab name modifier - %1 [නව දත්තසමුදාය] - - - Remote Sync did not contain any download or upload commands. + Searches and Tags - Remote sync '%1' completed successfully! + Enter a unique name or overwrite an existing search from the list: - Remote sync '%1' failed: %2 - + Save + සුරකින්න - Error while saving database %1: %2 - - - - Downloading... - - - - Uploading... - - - - Syncing... - - - - Remove passkey from entry - - - - Do you want to remove the passkey from this entry? - - - - The database file "%1" was modified externally - - - - Do you want to load the changes? - - - - Reload database - - - - Reloading database… - - - - Reload canceled - - - - Reload successful - - - - Reload pending user action… - - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes<br>Ignore the changes on disk until save<br>Discard unsaved changes - - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes then save<br>Overwrite the changes on disk<br>Discard unsaved changes - - - - Database file overwritten. - - - - Database file on disk cannot be unlocked with current credentials.<br>Enter new credentials and/or present hardware key to continue. + Save Search @@ -2838,11 +2465,11 @@ Disable safe saves and try again? EditEntryWidget Entry - නිවේශිතය + ඇතුල්වීම Advanced - වැඩිදුර + උසස් Icon @@ -2850,11 +2477,11 @@ Disable safe saves and try again? Auto-Type - ස්වයං ලිවීම + ස්වයංක්‍රීය වර්ගය Browser Integration - අතිරික්සුවට අනුකලනය + බ්රවුසර ඒකාබද්ධ කිරීම <empty URL> @@ -2870,7 +2497,7 @@ Disable safe saves and try again? Properties - ගුණාංග + දේපළ History @@ -2878,27 +2505,31 @@ Disable safe saves and try again? SSH Agent - SSH නියෝතය + SSH නියෝජිතයා n/a අ/නොවේ + + (encrypted) + (සංකේතනය කළ) + Select private key - පෞද්. යතුර තෝරන්න + පුද්ගලික යතුර තෝරන්න Entry history - නිවේශිතයේ ඉතිහාසය + ඇතුල්වීමේ ඉතිහාසය Add entry - නිවේශිතයක් යොදන්න + ඇතුළත් කිරීම එකතු කරන්න Edit entry - නිවේශිතය සංස්කරණය + ඇතුළත් කිරීම සංස්කරණය කරන්න Some Browser Integration settings are overridden by group settings. @@ -2940,7 +2571,7 @@ Would you like to correct it? Unsaved Changes - නොසුරැකි වෙනස්කම් + නොසුරකින ලද වෙනස්කම් Would you like to save changes to this entry? @@ -2970,10 +2601,6 @@ Would you like to correct it? Hide සඟවන්න - - %n hour(s) - පැය %nපැය %n - %n week(s) සති %nසති %n @@ -2984,11 +2611,11 @@ Would you like to correct it? %n year(s) - වසර %nවසර %n + වසර %n (ය)වසර %n (ය) - - Failed to decrypt SSH key, ensure password is correct. - + + %n hour(s) + පැය %nපැය %n @@ -3108,20 +2735,10 @@ Would you like to correct it? Add new window association නව කවුළු ඇසුරක් එක් කරන්න - - + - Add item - + - Remove selected window association තෝරාගත් කවුළු සම්බන්ධය ඉවත් කරන්න - - - - Remove item - - - Window title: කවුළු මාතෘකාව: @@ -3146,9 +2763,23 @@ Would you like to correct it? Custom Auto-Type sequence for this window මෙම කවුළුව සඳහා අභිරුචි ස්වයංක්‍රීය ටයිප් අනුපිළිවෙල + + + + Add item + + + + + - + Remove item + - + EditEntryWidgetBrowser + + These settings affect to the entry's behaviour with the browser extension. + මෙම සිටුවම් බ්‍රවුසර දිගුව සමඟ ඇතුල් වීමේ's හැසිරීමට බලපායි. + General ජනරාල් @@ -3161,14 +2792,26 @@ Would you like to correct it? Skip Auto-Submit for this entry මෙම ප්‍රවේශය සඳහා ස්වයංක්‍රීය ඉදිරිපත් කිරීම මඟ හරින්න + + Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. + HTTP Auth සංවාද සඳහා පමණක් මෙම සැකසුම බ්‍රවුසරයට යවන්න. සබල කර ඇත්නම්, සාමාන්‍ය පිවිසුම් පෝරම තේරීම සඳහා මෙම ප්‍රවේශය නොපෙන්වයි. + Use this entry only with HTTP Basic Auth මෙම ප්‍රවේශය HTTP Basic Auth සමඟ පමණක් භාවිතා කරන්න + + Do not send this setting to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. + HTTP Auth සංවාද සඳහා මෙම සැකසුම බ්‍රවුසරයට නොයවන්න. සබල කර ඇත්නම්, HTTP Auth සංවාද තේරීම සඳහා මෙම ප්‍රවේශය නොපෙන්වයි. + Do not use this entry with HTTP Basic Auth HTTP Basic Auth සමඟ මෙම ප්‍රවේශය භාවිතා නොකරන්න + + Additional URL's + අමතර URL'තත් + Add එකතු @@ -3181,22 +2824,6 @@ Would you like to correct it? Edit සංස්කරණය - - These settings affect the entry's behaviour with the browser extension. - - - - Additional URLs - - - - Only send this entry to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. - - - - Do not send this entry to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. - - EditEntryWidgetHistory @@ -3247,10 +2874,22 @@ Would you like to correct it? Notes field සටහන් ක්ෂේත්රය + + Toggle the checkbox to reveal the notes section. + සටහන් කොටස හෙළි කිරීමට තේරීම් කොටුව ටොගල් කරන්න. + Username field පරිශීලක නාම ක්ෂේත්රය + + Toggle notes visible + ටොගල් සටහන් දෘශ්‍යමාන වේ + + + Notes: + සටහන්: + Expiration field කල් ඉකුත් වීමේ ක්ෂේත්රය @@ -3267,6 +2906,14 @@ Would you like to correct it? Presets පෙරසිටුවීම් + + Password: + මුරපදය: + + + URL: + ඒ.ස.නි.: + Url field Url ක්ෂේත්රය @@ -3275,10 +2922,18 @@ Would you like to correct it? Download favicon for URL URL සඳහා favicon බාගන්න + + Title: + සිරැසිය: + Title field මාතෘකා ක්ෂේත්රය + + Username: + පරිශීලක නාමය: + Password field මුරපද ක්ෂේත්‍රය @@ -3287,42 +2942,18 @@ Would you like to correct it? Toggle expiration කල් ඉකුත්වීම ටොගල් කරන්න + + Expires: + කල් ඉකුත් වේ: + + + Tags: + Tags: + Tags list ටැග් ලැයිස්තුව - - &Username: - - - - &Title: - - - - &Password: - - - - UR&L: - - - - &Notes: - - - - Toggle notes visibility - - - - T&ags: - - - - &Expires: - - EditEntryWidgetSSHAgent @@ -3362,6 +2993,19 @@ Would you like to correct it? Private key පුද්ගලික යතුර + + External file + බාහිර ගොනුව + + + Browser for key file + යතුරු ගොනුව සඳහා බ්‍රව්සරය + + + Browse… + Button for opening file dialog + පිරික්සන්න... + Attachment ඇමුණුම @@ -3378,23 +3022,6 @@ Would you like to correct it? Remove from agent නියෝජිතයාගෙන් ඉවත් කරන්න - - External file - බාහිර ගොනුව - - - Browser for key file - යතුරු ගොනුව සඳහා බ්‍රව්සරය - - - Browse… - Button for opening file dialog - පිරික්සන්න... - - - Generate - උත්පාදනය කරන්න - Select attachment file ඇමුණුම් ගොනුව තෝරන්න @@ -3419,10 +3046,6 @@ Would you like to correct it? seconds තත්පර - - Clear agent - - EditGroupWidget @@ -3434,6 +3057,10 @@ Would you like to correct it? Icon නිරූපකය + + Browser Integration + බ්රවුසර ඒකාබද්ධ කිරීම + Properties දේපළ @@ -3450,10 +3077,6 @@ Would you like to correct it? Group has unsaved changes සමූහයට නොසුරැකි වෙනස්කම් ඇත - - Browser Integration - බ්රවුසර ඒකාබද්ධ කිරීම - Enable සබල කරන්න @@ -3469,6 +3092,10 @@ Would you like to correct it? EditGroupWidgetBrowser + + Edit Group + කණ්ඩායම සංස්කරණය කරන්න + These settings affect to the group's behaviour with the browser extension. මෙම සැකසීම් බ්‍රවුසර දිගුව සමඟ'කණ්ඩායමේ හැසිරීමට බලපායි. @@ -3513,14 +3140,6 @@ Would you like to correct it? Omit WWW subdomain from matching toggle for this and sub groups මෙය සහ උප කණ්ඩායම් සඳහා ගැළපෙන ටොගල් වලින් WWW උප වසම ඉවත් කරන්න - - Restrict matching to given browser key: - - - - Restrict matching to given browser key toggle for this and sub groups - - EditGroupWidgetKeeShare @@ -3753,6 +3372,10 @@ Supported extensions are: %1. Unable to fetch favicon. ෆේවිකොන් ලබා ගැනීමට නොහැකි විය. + + You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security + ඔබට මෙවලම් -> සිටුවම් -> ආරක්ෂාව යටතේ DuckDuckGo වෙබ් අඩවිය අයිකන සේවාව සබල කළ හැක + Existing icon selected. පවතින නිරූපකය තෝරා ඇත. @@ -3785,10 +3408,6 @@ Supported extensions are: %1. The following icon(s) failed: පහත නිරූපකය(ය) අසාර්ථක විය:පහත නිරූපකය(ය) අසාර්ථක විය: - - You can enable the DuckDuckGo website icon service under Application Settings -> Security - - EditWidgetProperties @@ -3865,24 +3484,6 @@ This may cause the affected plugins to malfunction. %1 - Clone %1 - ක්ලෝනය - - Passkey - - - - Invalid conversion type: %1 - වලංගු නොවන පරිවර්තන වර්ගය: %1 - - - Invalid conversion syntax: %1 - අවලංගු පරිවර්තන වාක්‍ය ඛණ්ඩය: %1 - - - Invalid regular expression syntax %1 -%2 - වලංගු නොවන නිත්‍ය ප්‍රකාශන වාක්‍ය ඛණ්ඩ %1 -%2 - EntryAttachments @@ -3891,21 +3492,6 @@ This may cause the affected plugins to malfunction. "%1"ගොනුව විවෘත කළ නොහැක - - EntryAttachmentsDialog - - Form - පෝරමය - - - File name - - - - File contents... - - - EntryAttachmentsModel @@ -3943,6 +3529,14 @@ This may cause the affected plugins to malfunction. Remove ඉවතලන්න + + Rename selected attachment + තෝරාගත් ඇමුණුම නැවත නම් කරන්න + + + Rename + නැවත නම් කරන්න + Open selected attachment තෝරාගත් ඇමුණුම විවෘත කරන්න @@ -4018,6 +3612,12 @@ This may cause the affected plugins to malfunction. Confirm Overwrite Attachment උඩින් ලිවීමේ ඇමුණුම තහවුරු කරන්න + + Attachment "%1" already exists. +Would you like to overwrite the existing attachment? + ඇමුණුම "%1" දැනටමත් පවතී. +පවතින ඇමුණුම උඩින් ලිවීමට ඔබ කැමතිද? + Confirm Attachment ඇමුණුම තහවුරු කරන්න @@ -4052,24 +3652,6 @@ Error: %1 යාවත්කාලීන ඇමුණුම සුරැකීම අසාර්ථක විය. දෝෂය: %1 - - Attachment "%1" already exists. -Would you like to overwrite the existing attachment? - ඇමුණුම "%1" දැනටමත් පවතී. -පවතින ඇමුණුම උඩින් ලිවීමට ඔබ කැමතිද? - - - New - - - - Preview - පෙරදසුන - - - Failed to preview an attachment: Attachment not found - - EntryAttributesModel @@ -4264,14 +3846,6 @@ Would you like to overwrite the existing attachment? Has TOTP TOTP ඇත - - Background Color - - - - Group Path - - EntryPreviewWidget @@ -4292,8 +3866,8 @@ Would you like to overwrite the existing attachment? මුරපදය - URL - ඒ.ස.නි. + Notes + සටහන් Expiration @@ -4312,8 +3886,8 @@ Would you like to overwrite the existing attachment? පරිශීලක නාමය - Notes - සටහන් + URL + ඒ.ස.නි. Advanced @@ -4363,10 +3937,6 @@ Would you like to overwrite the existing attachment? Never කවදාවත් - - Double click to copy value - අගය පිටපත් කිරීමට දෙවරක් ක්ලික් කරන්න - Enabled සබල කර ඇත @@ -4376,8 +3946,8 @@ Would you like to overwrite the existing attachment? ආබාධිතයි - Double click to copy to clipboard - + Double click to copy value + අගය පිටපත් කිරීමට දෙවරක් ක්ලික් කරන්න @@ -4386,10 +3956,6 @@ Would you like to overwrite the existing attachment? Invalid URL වලංගු නැති URL - - Duplicate URL - - EntryView @@ -4405,10 +3971,6 @@ Would you like to overwrite the existing attachment? Reset to defaults පෙරනිමියට යළි පිහිටුවන්න - - + %1 entry(s)... - - ExportDialog @@ -4630,193 +4192,6 @@ You can enable the DuckDuckGo website icon service in the security section of th …බාගත කිරීම (%2)%1 - - ImportWizard - - Import Wizard - - - - - ImportWizardPageReview - - WizardPage - විශාරද පිටුව - - - Entry count: %1 - - - - Group - සමූහය - - - Title - සිරැසිය - - - Username - පරිශීලක නාමය - - - Password - මුරපදය - - - Url - - - - Could not load key file. - - - - Could not open remote database. Password or key file may be incorrect. - - - - - ImportWizardPageSelect - - Form - පෝරමය - - - Import File Selection - - - - Password: - මුරපදය: - - - Key File: - යතුරු ගොනුව: - - - Browse… - පිරික්සන්න... - - - Import Into: - - - - New Database - නව දත්තසමුදාය - - - No unlocked databases available - - - - Existing Database: - - - - Import File: - - - - Comma Separated Values (.csv) - - - - 1Password Export (.1pux) - - - - 1Password Vault (.opvault) - - - - Bitwarden (.json) - - - - KeePass 1 Database (.kdb) - - - - Open OPVault - OPVault අරින්න - - - Select import file - - - - All files - සියළුම ගොනු - - - Key files - යතුරු ගොනු - - - Select key file - යතුරු ගොනුව තෝරන්න - - - Comma Separated Values - - - - 1Password Export - - - - Bitwarden JSON Export - - - - 1Password Vault - - - - KeePass1 Database - - - - Proton Pass (.json) - - - - Proton Pass JSON Export - - - - Temporary Database - - - - Command: - - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - - - - Input: - - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last commend `exit` has to be sent - - - - - Remote Database (.kdbx) - - - KMessageWidget @@ -5251,6 +4626,17 @@ Line %2, column %3 පුද්ගලික යතුර විවෘත කිරීමට අසමත් විය + + KeePass1OpenWidget + + Import KeePass1 Database + KeePass1 දත්ත සමුදාය ආයාත කරන්න + + + Unable to open the database. + දත්ත සමුදාය විවෘත කළ නොහැක. + + KeePass1Reader @@ -5607,6 +4993,10 @@ Are you sure you want to continue with this file? &Recent Databases &මෑත දත්ත සමුදායන් + + &Import + &ආනයන + &Export &අපනයන @@ -5627,10 +5017,6 @@ Are you sure you want to continue with this file? TOTP TOTP - - Tags - අනන්‍යන - &Groups &කණ්ඩායම් @@ -5675,18 +5061,34 @@ Are you sure you want to continue with this file? &New Database… &නව දත්ත සමුදාය… + + Create a new database + නව දත්ත සමුදායක් සාදන්න + &Merge From Database… දත්ත සමුදාය…වෙතින් & ඒකාබද්ධ කරන්න + + Merge from another KDBX database + වෙනත් KDBX දත්ත සමුදායකින් ඒකාබද්ධ කරන්න + &New Entry… &නව ප්‍රවේශය… + + Add a new entry + නව ප්‍රවේශයක් එක් කරන්න + &Edit Entry… ප්‍රවේශය &සංස්කරණය කරන්න… + + View or edit entry + ඇතුල්වීම බලන්න හෝ සංස්කරණය කරන්න + &Delete Entry… &මකන්න ඇතුල්වීම… @@ -5695,6 +5097,10 @@ Are you sure you want to continue with this file? &New Group… &නව කණ්ඩායම… + + Add a new group + නව කණ්ඩායමක් එක් කරන්න + &Edit Group… …කණ්ඩායම සංස්කරණය කරන්න @@ -5727,10 +5133,18 @@ Are you sure you want to continue with this file? Database &Reports… දත්ත සමුදාය සහ වාර්තා… + + Statistics, health check, etc. + සංඛ්යා ලේඛන, සෞඛ්ය පරීක්ෂාව, ආදිය. + &Database Settings… &දත්ත සමුදාය සැකසීම්… + + Database settings + දත්ත සමුදා සැකසුම් + &Clone Entry… &ක්ලෝන ප්‍රවේශය… @@ -5739,18 +5153,34 @@ Are you sure you want to continue with this file? Move u&p u&p ගෙනයන්න + + Move entry one step up + ප්‍රවේශය එක් පියවරක් ඉහළට ගෙන යන්න + Move do&wn පහළට ගෙන යන්න + + Move entry one step down + ප්‍රවේශය එක් පියවරක් පහළට ගෙන යන්න + Copy &Username &පරිශීලක නාමය පිටපත් කරන්න + + Copy username to clipboard + පරිශීලක නාමය පසුරු පුවරුවට පිටපත් කරන්න + Copy &Password & මුරපදය පිටපත් කරන්න + + Copy password to clipboard + මුරපදය පසුරු පුවරුවට පිටපත් කරන්න + &Settings &සැකසුම් @@ -5784,13 +5214,25 @@ Are you sure you want to continue with this file? &ශීර්ෂය - Copy &URL - + Copy title to clipboard + මාතෘකාව පසුරු පුවරුවට පිටපත් කරන්න + + + &URL + &URL + + + Copy URL to clipboard + URL එක පසුරු පුවරුවට පිටපත් කරන්න &Notes &සටහන් + + Copy notes to clipboard + සටහන් පසුරු පුවරුවට පිටපත් කරන්න + &CSV File… &CSV ගොනුව… @@ -5803,14 +5245,26 @@ Are you sure you want to continue with this file? KeePass 1 Database… KeePass 1 දත්ත සමුදාය… + + Import a KeePass 1 database + KeePass 1 දත්ත සමුදායක් ආයාත කරන්න + 1Password Vault… 1මුරපද සුරක්ෂිතාගාරය… + + Import a 1Password Vault + 1 මුරපද සුරක්ෂිතාගාරයක් ආනයනය කරන්න + CSV File… CSV ගොනුව… + + Import a CSV file + CSV ගොනුවක් ආයාත කරන්න + Show TOTP TOTP පෙන්වන්න @@ -5827,10 +5281,6 @@ Are you sure you want to continue with this file? Copy &TOTP &TOTP පිටපත් කරන්න - - Copy Password and TOTP - - E&mpty recycle bin හිස්&ප්‍රතිචක්‍රීකරණ බඳුන @@ -5855,6 +5305,10 @@ Are you sure you want to continue with this file? &Online Help &ඔන්ලයින් උදව් + + Go to online documentation + සබැඳි ලේඛන වෙත යන්න + &User Guide &පරිශීලක මාර්ගෝපදේශය @@ -5899,10 +5353,6 @@ Are you sure you want to continue with this file? Classic (Platform-native) සම්භාව්‍ය (වේදිකාව-දේශීය) - - Show Menubar - - Show Toolbar මෙවලම් තීරුව පෙන්වන්න @@ -5927,10 +5377,6 @@ Are you sure you want to continue with this file? Clone Group... ක්ලෝන සමූහය... - - &XML File… - - Clear history ඉතිහාසය පැහැදිලි කරන්න @@ -5958,8 +5404,10 @@ Expect some bugs and minor issues, this version is meant for testing purposes. - No Tags - + 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 භාවිතා කිරීමට අපි ඔබට නිර්දේශ කරමු. Restore Entry(s) @@ -5989,10 +5437,6 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Quit KeePassXC KeePassXC වලින් ඉවත් වන්න - - %1 Entry(s) - - Please present or touch your YubiKey to continue… …ඉදිරියට යාමට කරුණාකර ඔබේ YubiKey ඉදිරිපත් කරන්න හෝ ස්පර්ශ කරන්න @@ -6006,311 +5450,27 @@ Expect some bugs and minor issues, this version is meant for testing purposes.මෙම සැකසුම යෙදීමට ඔබ යෙදුම නැවත ආරම්භ කළ යුතුය. ඔබ දැන් නැවත ආරම්භ කිරීමට කැමතිද? - Allow Screen Capture - - - - 1Password 1PUX... - - - - Import a 1Password 1PUX file - - - - Import… - - - - Passkeys… - - - - Import Passkey - - - - Remote S&ync… - - - - Quit Application - - - - Open About Dialog - - - - Open Database - - - - Create Database - - - - Merge From Database - - - - Create Entry - - - - Edit Entry - ඇතුළත් කිරීම සංස්කරණය කරන්න - - - Delete Entry - - - - Create Group - - - - Edit Group - කණ්ඩායම සංස්කරණය කරන්න - - - Delete Group - - - - Download All Favicons - + Tags + අනන්‍යන - Sort Groups A-Z + No Tags - - Sort Groups Z-A - - - - Save Database As - - - - Show Database Security - - - - Show Database Reports - - - - Show Database Settings - - - - Show Passkeys - - - - Clone Entry - - - - Move Entry Up - - - - Move Entry Down - - - - Copy Username - පරිශීලක නාමය පිටපත් කරන්න - - - Copy Password - මුරපදය පිටපත් කරන්න - - - Show Application Settings - - - - Show Password Generator - - - - Remove Passkey From Entry - - - - Perform Auto-Type: {USERNAME} - - - - Perform Auto-Type: {USERNAME}{ENTER} - - - - Perform Auto-Type: {PASSWORD} - - - - Perform Auto-Type: {PASSWORD}{ENTER} - - - - Perform Auto-Type: {TOTP} - - - - Copy Title - - - - Copy URL - - - - Copy Notes - - - - Export to CSV - - - - Export to HTML - - - - Import KeePass1 Database - KeePass1 දත්ත සමුදාය ආයාත කරන්න - - - Import 1Password Vault - - - - Import CSV File - - - - Show TOTP QR Code - - - - Set up TOTP - - - - Empty Recycle Bin - - - - Open Donation Website - - - - Open Bug Report - - - - Open Online Documentation - - - - Open Keyboard Shortcuts Guide - - - - Save Database Backup - - - - SSH Agent: Add Key - - - - SSH Agent: Remove Key - - - - Toggle Compact Mode - - - - Set Theme: Automatic - - - - Set Theme: Light - - - - Set Theme: Dark - - - - Set Theme: Classic - - - - Toggle Show Menubar - - - - Toggle Show Toolbar - - - - Toggle Show Preview Panel - - - - Toggle Always on Top - - - - Toggle Hide Usernames - - - - Toggle Hide Passwords - - - - Export to XML - - - - Toggle Allow Screen Capture - - - - Show Group Panel - - - - Toggle Show Group Panel - - - - Setup Remote Sync… - - - - Password Generator - + + %1 Entry(s) + - E&xpire Entry… + Copy Password and TOTP - Clear SSH Agent + &XML File… - Clear all identities in ssh-agent + XML File… @@ -6370,6 +5530,26 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Overwriting %1 [%2] උඩින් ලිවීම %1 [%2] + + older entry merged from database "%1" + පැරණි ප්‍රවේශය "%1"දත්ත සමුදායෙන් ඒකාබද්ධ කරන ලදී + + + Adding backup for older target %1 [%2] + පැරණි ඉලක්කය සඳහා උපස්ථ එකතු කිරීම %1 [%2] + + + Adding backup for older source %1 [%2] + පැරණි මූලාශ්‍රය සඳහා උපස්ථ එකතු කිරීම %1 [%2] + + + Reapplying older target entry on top of newer source %1 [%2] + නව මූලාශ්‍ර %1 [%2]මත පැරණි ඉලක්ක ප්‍රවේශය නැවත යෙදීම + + + Reapplying older source entry on top of newer target %1 [%2] + නව ඉලක්කය %1 [%2]මත පැරණි මූලාශ්‍ර ප්‍රවේශය නැවත යෙදීම + Synchronizing from newer source %1 [%2] නව මූලාශ්‍ර %1 [%2]වෙතින් සමමුහුර්ත කිරීම @@ -6429,6 +5609,14 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. මෙහිදී ඔබට දත්ත සමුදා සංකේතාංකන සැකසුම් සකස් කළ හැක.'නොවන්න, ඔබට ඒවා පසුව දත්ත සමුදා සැකසුම් තුළ වෙනස් කළ හැක. + + Advanced Settings + උසස් සැකසුම් + + + Simple Settings + සරල සැකසුම් + NewDatabaseWizardPageDatabaseKey @@ -6463,25 +5651,6 @@ Expect some bugs and minor issues, this version is meant for testing purposes.කරුණාකර ඔබගේ නව දත්ත සමුදාය සඳහා සංදර්ශක නාමය සහ විකල්ප විස්තරයක් පුරවන්න: - - NewEntryAttachmentsDialog - - Attachment name cannot be empty - - - - Attachment with the same name already exists - - - - Save attachment - - - - New entry attachment - - - NixUtils @@ -6528,6 +5697,15 @@ Expect some bugs and minor issues, this version is meant for testing purposes.පැහැදිලි-පෙළ බයිට් %1 ක් බලාපොරොත්තු විය, %2හමු විය + + OpVaultOpenWidget + + Read Database did not produce an instance +%1 + කියවීමේ දත්ත සමුදාය +%1නිදර්ශනයක් නිපදවා නැත + + OpVaultReader @@ -6601,10 +5779,6 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Unknown cipher: %1 නොදන්නා කේතාංකය: %1 - - AES-256/GCM is currently not supported - - Passphrase is required to decrypt this key මෙම යතුර විකේතනය කිරීමට මුරපදය අවශ්‍ය වේ @@ -6669,181 +5843,6 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Unexpected EOF when writing private key පුද්ගලික යතුර ලියන විට අනපේක්ෂිත EOF - - (encrypted) - (සංකේතිතයි) - - - - OpenSSHKeyGenDialog - - SSH Key Generator - - - - Type - ලියන්න - - - Bits - - - - Comment - අදහස් දක්වන්න - - - - PasskeyExportDialog - - KeePassXC - Passkey Export - - - - Filenames will be generated with title and .passkey file extension. - - - - Export entries - - - - Export Selected - - - - Cancel - අවලංගු කරන්න - - - Export to folder - - - - Export the following passkey entries. - - - - - PasskeyExporter - - KeePassXC: Passkey Export - - - - File "%1.passkey" already exists. -Do you want to overwrite it? - - - - - Cannot open file - - - - Cannot open file "%1" for writing. - - - - Cannot write to file - - - - - PasskeyImportDialog - - KeePassXC - Passkey Import - - - - Username: %1 - - - - Group - සමූහය - - - Database - - - - Import Passkey - - - - Import - ආනයන - - - Cancel - අවලංගු කරන්න - - - Entry - නිවේශිතය - - - Create new entry - - - - Relying Party: %1 - - - - Import the following passkey: - - - - Import the following passkey to this entry: - - - - Default passkeys group (Imported Passkeys) - - - - - PasskeyImporter - - Passkey file - - - - All files - සියළුම ගොනු - - - Cannot open file - - - - Cannot open file "%1" for reading. - - - - Open passkey file - - - - Cannot import passkey - - - - Cannot import passkey file "%1". Data is missing. - - - - Cannot import passkey file "%1". -The following data is missing: -%2 - - - - Cannot import passkey file "%1". Private key is missing or malformed. - - PasswordEditWidget @@ -7047,6 +6046,10 @@ The following data is missing: Word Count: වචන ගණන: + + Character Count: + අක්ෂර ගණන: + Word Case: වචන නඩුව: @@ -7059,6 +6062,10 @@ The following data is missing: Add custom wordlist අභිරුචි වචන ලැයිස්තුව එක් කරන්න + + character + ස්වභාවය + Close වසන්න @@ -7095,30 +6102,6 @@ The following data is missing: Entropy: %1 bit එන්ට්රොපි: %1 බිට් - - Password Quality: %1 - මුරපදයේ ගුණාත්මකභාවය: %1 - - - Poor - Password quality - දුප්පත් - - - Weak - Password quality - දුර්වල - - - Good - Password quality - යහපත - - - Excellent - Password quality - විශිෂ්ටයි - Confirm Delete Wordlist Wordlist මකන්න තහවුරු කරන්න @@ -7166,20 +6149,32 @@ Do you want to overwrite it? විශේෂ චරිත - passwordLength - + Password Quality: %1 + මුරපදයේ ගුණාත්මකභාවය: %1 - Characters: %1 - + Poor + Password quality + දුප්පත් - MIXED case - + Weak + Password quality + දුර්වල - Excluded characters: "0", "1", "l", "I", "O", "|", "﹒", "B", "8", "G", "6" - + Good + Password quality + යහපත + + + Excellent + Password quality + විශිෂ්ටයි + + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + බැහැර කළ අක්ෂර: "0", "1", "l", "I", "O", "|", "-" @@ -7228,10 +6223,6 @@ Do you want to overwrite it? Password quality විශිෂ්ටයි - - Toggle password visibility using Control + H. Open the password generator using Control + G. - - PickcharsDialog @@ -7248,21 +6239,6 @@ Do you want to overwrite it? අක්ෂර අතර ටැබ් ඔබන්න - - PreviewEntryAttachmentsDialog - - Preview entry attachment - - - - No preview available - - - - Image format not supported - - - QMessageBox @@ -7301,10 +6277,6 @@ Do you want to overwrite it? Continue දිගටම කරගෙන යන්න - - Continue with weak password - - QObject @@ -7698,10 +6670,6 @@ Do you want to overwrite it? Too many arguments provided. බොහෝ තර්ක සපයා ඇත. - - Path of the database. - දත්ත සමුදායේ මාර්ගය. - Target decryption time in MS for the database. දත්ත සමුදාය සඳහා MS හි ඉලක්කගත විකේතන කාලය. @@ -7722,6 +6690,10 @@ Do you want to overwrite it? Create a new database. නව දත්ත සමුදායක් සාදන්න. + + Path of the database. + දත්ත සමුදායේ මාර්ගය. + Invalid decryption time %1. වලංගු නොවන විකේතන කාලය %1. @@ -7766,158 +6738,6 @@ Do you want to overwrite it? Successfully created new database. නව දත්ත සමුදාය සාර්ථකව නිර්මාණය කරන ලදී. - - Unset the password for the database. - - - - Unset the key file for the database. - - - - Edit a database. - - - - Cannot use %1 and %2 at the same time. - - - - Could not change the database key. - - - - Database was not modified. - - - - Writing the database failed: %1 - දත්ත සමුදාය ලිවීම අසාර්ථක විය: %1 - - - Successfully edited the database. - - - - Cannot remove password: The database does not have a password. - - - - Cannot remove file key: The database does not have a file key. - - - - Loading the new key file failed: %1 - - - - Found unexpected Key type %1 - - - - Cannot remove all the keys from a database. - - - - Show a database's information. - දත්ත සමුදාය's තොරතුරු පෙන්වන්න. - - - UUID: - UUID: - - - Name: - නම: - - - Description: - විස්තර: - - - Cipher: - කේතාංකය: - - - KDF: - KDF: - - - Recycle bin is enabled. - ප්‍රතිචක්‍රීකරණ බඳුන සක්‍රීය කර ඇත. - - - Recycle bin is not enabled. - ප්‍රතිචක්‍රීකරණ බඳුන සක්‍රීය කර නැත. - - - Location - ස්ථානය - - - Database created - දත්ත සමුදාය නිර්මාණය කරන ලදී - - - Last saved - අවසන් වරට සුරකින ලදී - - - Unsaved changes - නොසුරකින ලද වෙනස්කම් - - - yes - ඔව් - - - no - නැත - - - Number of groups - කණ්ඩායම් ගණන - - - Number of entries - ඇතුළත් කිරීම් ගණන - - - Number of expired entries - කල් ඉකුත් වූ ඇතුළත් කිරීම් ගණන - - - Unique passwords - අද්විතීය මුරපද - - - Non-unique passwords - අද්විතීය නොවන මුරපද - - - Maximum password reuse - උපරිම මුරපදය නැවත භාවිතා කිරීම - - - Number of short passwords - කෙටි මුරපද ගණන - - - Number of weak passwords - දුර්වල මුරපද ගණන - - - Entries excluded from reports - ඇතුළත් කිරීම් වාර්තා වලින් බැහැර කර ඇත - - - Average password length - සාමාන්ය මුරපද දිග - - - %1 characters - අක්ෂර %1 යි - Word count for the diceware passphrase. ඩයිස්වෙයාර් මුර-වැකිකඩ සඳහා වචන ගණන. @@ -7941,6 +6761,10 @@ Do you want to overwrite it? Invalid word count %1 වලංගු නොවන වචන ගණන %1 + + The word list is too small (< 1000 items) + වචන ලැයිස්තුව කුඩා වැඩියි (අයිතම< 1000) + Title for the entry. ඇතුල්වීම සඳහා මාතෘකාව. @@ -7965,6 +6789,10 @@ Do you want to overwrite it? Enter new password for entry: ඇතුල්වීම සඳහා නව මුරපදය ඇතුළත් කරන්න: + + Writing the database failed: %1 + දත්ත සමුදාය ලිවීම අසාර්ථක විය: %1 + Successfully edited entry %1. ප්‍රවේශය %1සාර්ථකව සංස්කරණය කරන ලදී. @@ -8085,6 +6913,10 @@ Do you want to overwrite it? Exit interactive mode. අන්තර්ක්‍රියාකාරී මාදිලියෙන් පිටවන්න. + + Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. + අපනයනය කිරීමේදී භාවිතා කළ යුතු ආකෘතිය. පවතින තේරීම් 'xml' හෝ 'csv'වේ. පෙරනිමිය 'xml'. + Exports the content of a database to standard output in the specified format. දත්ත සමුදායක අන්තර්ගතය නියමිත ආකෘතියේ සම්මත ප්‍රතිදානයට අපනයනය කරයි. @@ -8185,6 +7017,106 @@ Do you want to overwrite it? Successfully imported database. දත්ත සමුදාය සාර්ථකව ආනයනය කරන ලදී. + + Show a database's information. + දත්ත සමුදාය's තොරතුරු පෙන්වන්න. + + + UUID: + UUID: + + + Name: + නම: + + + Description: + විස්තර: + + + Cipher: + කේතාංකය: + + + KDF: + KDF: + + + Recycle bin is enabled. + ප්‍රතිචක්‍රීකරණ බඳුන සක්‍රීය කර ඇත. + + + Recycle bin is not enabled. + ප්‍රතිචක්‍රීකරණ බඳුන සක්‍රීය කර නැත. + + + Location + ස්ථානය + + + Database created + දත්ත සමුදාය නිර්මාණය කරන ලදී + + + Last saved + අවසන් වරට සුරකින ලදී + + + Unsaved changes + නොසුරකින ලද වෙනස්කම් + + + yes + ඔව් + + + no + නැත + + + Number of groups + කණ්ඩායම් ගණන + + + Number of entries + ඇතුළත් කිරීම් ගණන + + + Number of expired entries + කල් ඉකුත් වූ ඇතුළත් කිරීම් ගණන + + + Unique passwords + අද්විතීය මුරපද + + + Non-unique passwords + අද්විතීය නොවන මුරපද + + + Maximum password reuse + උපරිම මුරපදය නැවත භාවිතා කිරීම + + + Number of short passwords + කෙටි මුරපද ගණන + + + Number of weak passwords + දුර්වල මුරපද ගණන + + + Entries excluded from reports + ඇතුළත් කිරීම් වාර්තා වලින් බැහැර කර ඇත + + + Average password length + සාමාන්ය මුරපද දිග + + + %1 characters + අක්ෂර %1 යි + Unknown command %1 නොදන්නා විධානය %1 @@ -8357,10 +7289,6 @@ Available commands: Show the protected attributes in clear text. ආරක්ෂිත ගුණාංග පැහැදිලි පෙළකින් පෙන්වන්න. - - Show all the attributes of the entry. - - Show the attachments of the entry. ප්‍රවේශයේ ඇමුණුම් පෙන්වන්න. @@ -8431,10 +7359,6 @@ Please consider generating a new key file. Invalid YubiKey serial %1 වලංගු නොවන YubiKey අනුක්‍රමික %1 - - Please present or touch your YubiKey to continue. - ඉදිරියට යාමට ඔබගේ YubiKey ඉදිරිපත් කරන්න හෝ ස්පර්ශ කරන්න. - Enter password to encrypt database (optional): දත්ත සමුදාය සංකේතනය කිරීමට මුරපදය ඇතුළත් කරන්න (විකල්ප): @@ -8622,8 +7546,8 @@ CPU ගෘහ නිර්මාණ ශිල්පය: %2 මිනිත්තු %1 (ය)මිනිත්තු %1 (ය) - Botan library must be at least %1, found %2.%3.%4 - + Botan library must be at least 2.11.x, found %1.%2.%3 + උද්භිද පුස්තකාලය අවම වශයෙන් 2.11.x විය යුතුය, %1සොයා ගත යුතුය.%2.%3 Cryptographic libraries: @@ -8673,6 +7597,18 @@ CPU ගෘහ නිර්මාණ ශිල්පය: %2 file empty ගොනුව හිස් + + malformed string + විකෘති තන්තුව + + + missing closing quote + අවසන් උපුටා දැක්වීම අතුරුදහන් + + + %1: (row, col) %2,%3 + %1: (පේළිය, කොල්) %2,%3 + AES 256-bit AES 256-bit @@ -8851,6 +7787,14 @@ CPU ගෘහ නිර්මාණ ශිල්පය: %2 read password of the database from stdin stdin වෙතින් දත්ත සමුදායේ මුරපදය කියවන්න + + allow app screen recordering and screenshots + යෙදුම් තිර පටිගත කිරීම සහ තිරපිටපත් වලට ඉඩ දෙන්න + + + Locked databases. + අගුලු දැමූ දත්ත සමුදායන්. + Database failed to lock. දත්ත සමුදාය අගුළු දැමීමට අසමත් විය. @@ -8859,10 +7803,6 @@ CPU ගෘහ නිර්මාණ ශිල්පය: %2 Another instance of KeePassXC is already running. KeePassXC හි තවත් අවස්ථාවක් දැනටමත් ක්‍රියාත්මක වේ. - - KeePassXC is not running. No open database to lock - - Fatal error while testing the cryptographic functions. ගුප්ත ලේඛන කාර්යයන් පරීක්ෂා කිරීමේදී මාරාන්තික දෝෂයක්. @@ -8871,6 +7811,10 @@ CPU ගෘහ නිර්මාණ ශිල්පය: %2 KeePassXC - Error KeePassXC - දෝෂයකි + + Warning: Failed to prevent screenshots on a top level window! + අවවාදයයි: ඉහළ මට්ටමේ කවුළුවක තිරපිටපත් වැළැක්වීමට අසමත් විය! + Database password: දත්ත සමුදා මුරපදය: @@ -8894,312 +7838,66 @@ CPU ගෘහ නිර්මාණ ශිල්පය: %2 Windows Hello භාවිතයෙන් අභියෝගයට අත්සන් කිරීමට අසමත් විය. - Warning: Failed to block screenshot capture on a top-level window. + Please present or touch your YubiKey to continue. + ඉදිරියට යාමට ඔබගේ YubiKey ඉදිරිපත් කරන්න හෝ ස්පර්ශ කරන්න. + + + Show all the attributes of the entry. - Invalid Cipher + Edit a database. - Invalid KDF + Could not change the database key. - Access to all entries is denied + Database was not modified. - allow screenshots and app recording (Windows/macOS) + Successfully edited the database. + + + + Loading the new key file failed: %1 + + + + Unset the password for the database. + + + + Unset the key file for the database. + + + + Cannot use %1 and %2 at the same time. + + + + Cannot remove all the keys from a database. + + + + Cannot remove password: The database does not have a password. + + + + Cannot remove file key: The database does not have a file key. + + + + Found unexpected Key type %1 Set the key file for the database. -This option is deprecated, use --set-key-file instead. +This options is deprecated, use --set-key-file instead. - - Databases have been locked. - - - - Attestation not supported - - - - Credential is excluded - - - - Passkeys request canceled - - - - Invalid user verification - - - - Empty public key - - - - Invalid URL provided - - - - Passkeys - - - - AES initialization failed - - - - AES encrypt failed - - - - Failed to store in Linux Keyring - - - - Polkit returned an error: %1 - - - - Could not locate key in keyring - - - - Could not read key in keyring - - - - AES decrypt failed - - - - No Polkit authentication agent was available - - - - Polkit authorization failed - - - - No Quick Unlock provider is available - - - - Failed to init KeePassXC crypto. - KeePassXC crypto ආරම්භ කිරීමට අසමත් විය. - - - Failed to encrypt key data. - ප්රධාන දත්ත සංකේතනය කිරීමට අසමත් විය. - - - Failed to get Windows Hello credential. - Windows Hello අක්තපත්‍ර ලබා ගැනීමට අසමත් විය. - - - Failed to decrypt key data. - ප්රධාන දත්ත විකේතනය කිරීමට අසමත් විය. - - - Origin is empty or not allowed - - - - Effective domain is not a valid domain - - - - Origin and RP ID do not match - - - - No supported algorithms were provided - - - - Wait for timer to expire - - - - Challenge is shorter than required minimum length - - - - user.id does not match the required length - - - - Favorite - Tag for favorite entries - - - - File does not exist. - - - - Cannot open file: %1 - - - - Cannot parse file: %1 at position %2 - - - - Failed to decrypt json file: %1 - - - - Invalid encKeyValidation field - - - - Invalid cipher list within encKeyValidation field - - - - Wrong password - - - - Invalid encrypted data field - - - - Invalid cipher list within encrypted data field - - - - Cannot initialize cipher - - - - Cannot decrypt data - - - - Bitwarden Import - - - - Archived - Tag for archived entries - - - - Invalid 1PUX file format: Not a valid ZIP file. - - - - Invalid 1PUX file format: Missing export.data - - - - 1Password Import - - - - Enter Shortcut - - - - Action - - - - Shortcuts - - - - Unknown passkeys error - - - - Invalid KDF iterations, cannot decrypt json file - - - - Unsupported format, ensure your Bitwarden export is password-protected - - - - Only PBKDF and Argon2 are supported, cannot decrypt json file - - - - Reset Shortcuts - - - - Double click an action to change its shortcut - - - - Filter... - - - - Shortcut Conflict - - - - Shortcut %1 conflicts with '%2'. Overwrite shortcut? - - - - Cannot generate valid passphrases because the wordlist is too short - - - - Encrypted files are not supported. - - - - Proton Pass Import - - - - Delete plugin data? - ප්ලගින දත්ත මකන්නද? - - - Delete plugin data from Entry(s)? - - - - Passkey - - - - Format to use when exporting. Available choices are 'xml', 'csv' or 'html'. Defaults to 'xml'. - - - - start minimized to the system tray - - - - malformed string, possible unescaped delimiter - - - - missing closing delimiter - - - - %1, row: %2, column: %3 - - - - Tags - අනන්‍යන - QtIOCompressor @@ -9235,39 +7933,20 @@ This option is deprecated, use --set-key-file instead. අභ්‍යන්තර zlib දෝෂය: - - RemoteHandler - - Command `%1` did not finish in time. Process was killed. - - - - Failed to upload merged database. Command `%1` did not finish in time. Process was killed. - - - - Invalid download parameters provided. - - - - Command `%1` failed to download database. - - - - Invalid database pointer or upload parameters provided. - - - - Command `%1` exited with status code: %2 - - - - Failed to upload merged database. Command `%1` exited with status code: %2 - - - ReportsWidgetBrowserStatistics + + Exclude expired entries from the report + වාර්තාවෙන් කල් ඉකුත් වූ ඇතුළත් කිරීම් බැහැර කරන්න + + + Show only entries which have URL set + URL සකසා ඇති ඇතුළත් කිරීම් පමණක් පෙන්වන්න + + + Show only entries which have browser settings in custom data + අභිරුචි දත්තවල බ්‍රවුසර සැකසුම් ඇති ඇතුළත් කිරීම් පමණක් පෙන්වන්න + Double-click entries to edit. සංස්කරණය කිරීමට ඇතුළත් කිරීම් ද්විත්ව ක්ලික් කරන්න. @@ -9332,53 +8011,44 @@ This option is deprecated, use --set-key-file instead. Exclude from reports වාර්තා වලින් බැහැර කරන්න - - Expire Entry(s)… - - - - Only show entries that have a URL - - - - Only show entries that have been explicitly allowed or denied - - - - Show expired entries - - - - (Expired) - - - - Delete plugin data from Entry(s)… - - ReportsWidgetHealthcheck - Show expired entries - + Exclude expired entries from the report + වාර්තාවෙන් කල් ඉකුත් වූ ඇතුළත් කිරීම් බැහැර කරන්න - (Expired) - + Also show entries that have been excluded from reports + වාර්තාවලින් බැහැර කර ඇති ඇතුළත් කිරීම් ද පෙන්වන්න Hover over reason to show additional details. Double-click entries to edit. අමතර විස්තර පෙන්වීමට හේතුව මත සැරිසරන්න. සංස්කරණය කිරීමට ඇතුළත් කිරීම් ද්විත්ව ක්ලික් කරන්න. + + Bad + Password quality + නරක + Bad — password must be changed නරකයි - මුරපදය වෙනස් කළ යුතුය + + Poor + Password quality + දුප්පත් + Poor — password should be changed දුර්වල - මුරපදය වෙනස් කළ යුතුය + + Weak + Password quality + දුර්වල + Weak — consider changing the password දුර්වලයි - මුරපදය වෙනස් කිරීම සලකා බලන්න @@ -9427,14 +8097,6 @@ This option is deprecated, use --set-key-file instead. Exclude from reports වාර්තා වලින් බැහැර කරන්න - - Expire Entry(s)… - - - - Show entries that have been excluded from reports - - ReportsWidgetHibp @@ -9530,77 +8192,6 @@ This option is deprecated, use --set-key-file instead. Exclude from reports වාර්තා වලින් බැහැර කරන්න - - Expire Entry(s)… - - - - - ReportsWidgetPasskeys - - Export - අපනයන - - - Import - ආනයන - - - List of entry URLs - ඇතුල්වීමේ URL ලැයිස්තුව - - - Title - සිරැසිය - - - Path - මාර්ගය - - - Username - පරිශීලක නාමය - - - URLs - URLs - - - Edit Entry… - ප්‍රවේශය…සංස්කරණය කරන්න - - - Delete Entry(s)… - ඇතුළත් කිරීම් (ය)…මකන්නඇතුළත් කිරීම් (ය)…මකන්න - - - Relying Party - - - - Show expired entries - - - - (Expired) - - - - Export Confirmation - අපනයන තහවුරු කිරීම - - - The passkey file will be vulnerable to theft and unauthorized use, if left unsecured. Are you sure you want to continue? - - - - Please wait, list of entries with passkeys is being updated… - - - - No entries with passkeys. - - ReportsWidgetStatistics @@ -9775,14 +8366,6 @@ This option is deprecated, use --set-key-file instead. No agent running, cannot list identities. කිසිදු නියෝජිතයෙකු ක්‍රියාත්මක නොවේ, අනන්‍යතා ලැයිස්තුගත කළ නොහැක. - - Failed to remove all SSH identities from agent. - - - - All SSH identities removed from agent. - - SearchHelpWidget @@ -9849,10 +8432,6 @@ This option is deprecated, use --set-key-file instead. Search Help උදව් සොයන්න - - Save Search - - Search (%1)… Search placeholder text, %1 is the keyboard shortcut @@ -9866,6 +8445,10 @@ This option is deprecated, use --set-key-file instead. Limit search to selected group තෝරාගත් කණ්ඩායමකට සෙවීම සීමා කරන්න + + Save Search + + SettingsClientModel @@ -9927,10 +8510,34 @@ This option is deprecated, use --set-key-file instead. Confirm when passwords are retrieved by clients ගනුදෙනුකරුවන් විසින් මුරපද ලබා ගන්නා විට තහවුරු කරන්න + + <html><head/><body><p><span style=" + font-family:'-apple-system','BlinkMacSystemFont','Segoe UI','Helvetica','Arial','sans-serif','Apple Color + Emoji','Segoe UI Emoji'; font-size:14px; color:#24292e; background-color:#ffffff;">This setting does + not override disabling recycle bin prompts</span></p></body></html> + + <html><head/><body><p><span style=" + font-family:'-apple-system','BlinkMacSystemFont','Segoe UI','Helvetica','Arial','sans-serif','Apple Color + Emoji','Segoe UI Emoji'; font-size:14px; color:#24292e; background-color:#ffffff;">මෙම සැකසුම + ප්‍රතිචක්‍රීකරණ බඳුන් ප්‍රේරක අක්‍රිය කිරීම ප්‍රතික්ෂේප නොකරයි</span></p></body></html> + + Confirm when clients request entry deletion සේවාලාභීන් ප්‍රවේශ මකාදැමීම ඉල්ලා සිටින විට තහවුරු කරන්න + + <html><head/><body><p>This improves compatibility with certain applications + which search for password without unlocking the database first.</p><p>But enabling this may also + crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a + different value set in applications.)</p></body></html> + + <html><head/><body><p>මෙය දත්ත සමුදාය අගුළු + තොරව මුරපදය සොයන ඇතැම් යෙදුම් සමඟ ගැළපීම වැඩි දියුණු කරයි.</p><p>නමුත් මෙය සක්‍රීය කිරීමෙන් + යම් කාල සීමාවක් ඇතුළත දත්ත සමුදාය අගුළු ඇරීමට නොහැකි වුවහොත් සේවාලාභියා බිඳ වැටිය හැක. (සාමාන්‍යයෙන් තත්පර 25, නමුත් යෙදුම්වල වෙනස් අගයන් + ක් විය හැක.)</p></body></html> + + Prompt to unlock database before searching සෙවීමට පෙර දත්ත සමුදාය අගුළු ඇරීමට විමසන්න @@ -9955,14 +8562,6 @@ This option is deprecated, use --set-key-file instead. Save current changes to activate the plugin and enable editing of this section. ප්ලගිනය සක්‍රිය කිරීමට වත්මන් වෙනස්කම් සුරකින්න සහ මෙම කොටස සංස්කරණය කිරීම සබල කරන්න. - - <html><head/><body><p>This setting does not override disabling recycle bin prompts </p></body></html> - - - - <html><head/><body><p>This improves compatibility with certain applications which search for password without unlocking the database first.</p><p>But enabling this may also crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a different value set in applications.) </p></body></html> - - SettingsWidgetKeeShare @@ -10070,14 +8669,6 @@ This option is deprecated, use --set-key-file instead. TagModel - - Clear Search - - - - All Entries - - Expired කල් ඉකුත් වී ඇත @@ -10086,6 +8677,14 @@ This option is deprecated, use --set-key-file instead. Weak Passwords දුර්වල මුරපද + + All Entries + + + + Clear Search + + TagView @@ -10263,6 +8862,26 @@ Example: JBSWY3DPEHPK3PXP Start storing your passwords securely in a KeePassXC database ඔබගේ මුරපද KeePassXC දත්ත ගබඩාවක ආරක්ෂිතව ගබඩා කිරීම අරඹන්න + + Create new database + නව දත්ත සමුදායක් සාදන්න + + + Open existing database + පවතින දත්ත සමුදාය විවෘත කරන්න + + + Import from KeePass 1 + KeePass 1 වෙතින් ආනයනය කරන්න + + + Import from 1Password + 1 මුරපදයෙන් ආයාත කරන්න + + + Import from CSV + CSV වෙතින් ආයාත කරන්න + Recent databases මෑත දත්ත සමුදායන් @@ -10275,18 +8894,6 @@ Example: JBSWY3DPEHPK3PXP Welcome to KeePassXC %1 KeePassXC %1වෙත සාදරයෙන් පිළිගනිමු - - Create Database - - - - Open Database - - - - Import File - - WinUtils @@ -10303,8 +8910,31 @@ Example: JBSWY3DPEHPK3PXP ගෝලීය කෙටිමං ලියාපදිංචි කිරීමට නොහැකි විය + + WindowsHello + + Failed to init KeePassXC crypto. + KeePassXC crypto ආරම්භ කිරීමට අසමත් විය. + + + Failed to encrypt key data. + ප්රධාන දත්ත සංකේතනය කිරීමට අසමත් විය. + + + Failed to get Windows Hello credential. + Windows Hello අක්තපත්‍ර ලබා ගැනීමට අසමත් විය. + + + Failed to decrypt key data. + ප්රධාන දත්ත විකේතනය කිරීමට අසමත් විය. + + YubiKey + + %1 No interface, slot %2 + %1 අතුරු මුහුණතක් නැත, තව් %2 + General: ජනරාල්: @@ -10316,6 +8946,14 @@ Example: JBSWY3DPEHPK3PXP YubiKeyEditWidget + + Refresh hardware tokens + දෘඪාංග ටෝකන නැවුම් කරන්න + + + Refresh + නැවුම් කරන්න + Hardware key slot selection දෘඪාංග යතුරු තව් තෝරාගැනීම @@ -10348,6 +8986,10 @@ Example: JBSWY3DPEHPK3PXP Challenge-Response set, click to change or remove අභියෝග-ප්‍රතිචාර කට්ටලය, වෙනස් කිරීමට හෝ ඉවත් කිරීමට ක්ලික් කරන්න + + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + <p>ඔබ සතුව <a href="https://www.yubico.com/">YubiKey</a> හෝ <a href="https://onlykey.io">OnlyKey</a>තිබේ නම්, ඔබට එය අමතර ආරක්ෂාව සඳහා භාවිතා කළ හැක.</p><p>යතුරට එහි එක් තව් එකක් <a href="https://www.yubico.com/products/services-software/challenge-response/">HMAC-SHA1 Challenge-Response</a>ලෙස වැඩසටහන්ගත කිරීම අවශ්‍ය වේ.</p> + Detecting hardware keys… දෘඪාංග යතුරු හඳුනාගැනීම… @@ -10356,25 +8998,28 @@ Example: JBSWY3DPEHPK3PXP No hardware keys detected දෘඩාංග යතුරු අනාවරණය කර නොමැත + + + YubiKeyInterface - Refresh hardware keys - - - - <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed with <a href="https://keepassxc.org/docs/#faq-yubikey-howto">Challenge-Response</a>.</p> - - - - Hardware keys found, but no slots are configured - + %1 Invalid slot specified - %2 + %1 අවලංගු තව් නිශ්චිතව දක්වා ඇත - %2 YubiKeyInterfacePCSC + + (PCSC) %1 [%2] Challenge-Response - Slot %3 + (PCSC) %1 [%2] අභියෝග-ප්‍රතිචාරය - තව් %3 + The YubiKey PCSC interface has not been initialized. YubiKey PCSC අතුරුමුහුණත ආරම්භ කර නොමැත. + + Hardware key is currently in use. + දෘඪාංග යතුර දැනට භාවිතා වේ. + Could not find or access hardware key with serial number %1. Please present it to continue. අනුක්‍රමික අංක %1සහිත දෘඪාංග යතුර සොයා ගැනීමට හෝ ප්‍රවේශ වීමට නොහැකි විය. ඉදිරියට යාමට කරුණාකර එය ඉදිරිපත් කරන්න. @@ -10391,21 +9036,6 @@ Example: JBSWY3DPEHPK3PXP Failed to complete a challenge-response, the PCSC error code was: %1 අභියෝග-ප්‍රතිචාරයක් සම්පූර්ණ කිරීමට අපොහොසත් විය, PCSC දෝෂ කේතය: %1 - - (NFC) %1 [%2] - Slot %3, %4 - YubiKey display fields - - - - Press - USB Challenge-Response Key interaction request - ඔබන්න - - - Passive - USB Challenge-Response Key no interaction required - නිෂ්ක්රීය - YubiKeyInterfaceUSB @@ -10413,6 +9043,14 @@ Example: JBSWY3DPEHPK3PXP Unknown නොදන්නා + + (USB) %1 [%2] Configured Slot - %3 + (USB) %1 [%2] වින්‍යාස කළ තව් - %3 + + + (USB) %1 [%2] Challenge-Response - Slot %3 - %4 + (USB) %1 [%2] අභියෝග-ප්‍රතිචාරය - තව් %3 - %4 + Press USB Challenge-Response Key interaction request @@ -10427,6 +9065,10 @@ Example: JBSWY3DPEHPK3PXP The YubiKey USB interface has not been initialized. YubiKey USB අතුරුමුහුණත ආරම්භ කර නොමැත. + + Hardware key is currently in use. + දෘඪාංග යතුර දැනට භාවිතා වේ. + Could not find hardware key with serial number %1. Please plug it in to continue. අනුක්‍රමික අංක %1සහිත දෘඪාංග යතුර සොයා ගැනීමට නොහැකි විය. ඉදිරියට යාමට කරුණාකර එය පේනුගත කරන්න. @@ -10443,15 +9085,5 @@ Example: JBSWY3DPEHPK3PXP Failed to complete a challenge-response, the specific error was: %1 අභියෝග ප්‍රතිචාරයක් සම්පූර්ණ කිරීමට අපොහොසත් විය, නිශ්චිත දෝෂය වූයේ: %1 - - %1 [%2] - Slot %3 - YubiKey NEO display fields - - - - %1 [%2] - Slot %3, %4 - YubiKey display fields - - \ No newline at end of file diff --git a/share/translations/keepassxc_sk.ts b/share/translations/keepassxc_sk.ts index 3539d4d4b..7dd52d7b2 100644 --- a/share/translations/keepassxc_sk.ts +++ b/share/translations/keepassxc_sk.ts @@ -80,10 +80,6 @@ Details Podrobnosti - - Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. - - Remember Zapamätať @@ -92,6 +88,10 @@ Allow Selected Povoliť vybraným + + Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. + + Deny All && Future @@ -122,10 +122,6 @@ Use OpenSSH Použiť OpenSSH - - Use both agents - - SSH_AUTH_SOCK override Prepísanie SSH_AUTH_SOCK @@ -154,6 +150,10 @@ SSH Agent connection is working! Spojenie Agenta SSH funkčné! + + Use both agents + + ApplicationSettingsWidget @@ -169,10 +169,6 @@ Security Bezpečnosť - - This setting cannot be enabled when minimize on unlock is enabled. - - Access error for config file %1 Chyba prístupu ku konfiguračnému súboru %1 @@ -217,48 +213,20 @@ You must restart the application to set the new language. Would you like to restart now? Musíte reštartovať aplikáciu, aby sa tieto zmeny prejavili. Chcete ju reštartovať teraz? + + Reset Settings? + Resetovať nastavenia? + + + Are you sure you want to reset all general and security settings to default? + Naozaj chcete obnoviť všetky všeobecné nastavenia na predvolené hodnoty? + Select backup storage directory Vyberte priečinok pre uloženie zálohy - Confirm Reset - - - - Are you sure you want to reset all settings to default? - - - - Import KeePassXC Settings - - - - Failed to import settings from %1, not a valid settings file. - - - - Export KeePassXC Settings - - - - Small - - - - Normal - - - - Medium - - - - Large - - - - Custom + This setting cannot be enabled when minimize on unlock is enabled. @@ -292,10 +260,6 @@ Remember previously used databases Zapamätať si predtým používané databázy - - recent files - - Load previously open databases on startup Načítanie predtým otvorených databáz pri spustení @@ -312,6 +276,25 @@ Include beta releases when checking for updates Pri kontrole aktualizácii zahrnúť pred-vydania + + On database unlock, show entries that + + + + have expired + On database unlock, show entries that... + + + + days + On database unlock, show entries that will expire within %1 days + + + + will expire within + On database unlock, show entries that... + + File Management Správa súborov @@ -336,10 +319,22 @@ Backup database file before saving Zálohovať databázu pri každom uložení + + Backup destination + + + + Specifies the database backup file location. Occurrences of "{DB_FILENAME}" are replaced with the filename of the saved database without extension. {TIME:<format>} is replaced with the backup time, see https://doc.qt.io/qt-5/qdatetime.html#toString. <format> defaults to format string "dd_MM_yyyy_hh-mm-ss". + + {DB_FILENAME}.old.kdbx + + Choose... + + Use alternative saving method (may solve problems with Dropbox, Google Drive, GVFS, etc.) @@ -417,10 +412,6 @@ Toolbar button style: Štýl tlačidiel panela nástrojov: - - Show passwords in color - - Use monospaced font for notes Na poznámky použiť písmo Monospace @@ -507,68 +498,11 @@ - On database unlock, show entries that will expire within + recent files - On database unlock, show entries that will expire within - - - - days - number of days warning for password expiration - - - - Destination format: - - - - <html><head/><body><p><span style=" font-weight:600;">{DB_FILENAME}</span> is replaced with the filename of the saved database without extension</p><p><span style=" font-weight:600;">{TIME:&lt;format&gt;}</span> is replaced with the specified time format (default: dd_MM_yyyy_hh-mm-ss)</p><p>See the User Guide for more details</p></body></html> - - - - Choose folder... - - - - Show confirmation before moving entries to recycle bin - - - - Copy data on double clicking field in entry view - - - - Show toolbar - - - - Show the menu bar by pressing the Alt key - - - - Show menubar - - - - Import settings… - - - - Export settings… - - - - Open browser on double clicking URL field in entry view - - - - Font size: - - - - Font size selection + Show passwords in color @@ -624,6 +558,10 @@ Lock databases after minimizing the window Zamknúť databázu pri minimalizovaní okna + + Require password repeat when it is visible + Vyžadovať opakovanie hesla, aj ak je viditeľné + Hide passwords when editing them Skryť heslo pri jeho úprave @@ -636,6 +574,18 @@ 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 + + + Move entries to recycle bin without confirmation + Položky presunúť do koša bez potvrdenia + + + Enable double click to copy the username/password entry columns + Povoliť kopírovanie stĺpcov používateľské meno/heslo dvojklikom + Privacy Súkromie @@ -648,18 +598,6 @@ Hide TOTP in the entry preview panel - - Lock databases when switching user - - - - Lock Options - - - - Hide notes in the entry preview panel - - AutoType @@ -704,13 +642,27 @@ Zistené príliš dlhé čakanie, maximum je %1: %2 - Entry does not have attribute for PICKCHARS: %1 - + Invalid conversion type: %1 + Neplatný typ konverzie: %1 + + + Invalid conversion syntax: %1 + Neplatná syntax konverzie: %1 + + + Invalid regular expression syntax %1 +%2 + Neplatná syntax regulárneho výrazu %1 +%2 Invalid placeholder: %1 + + Entry does not have attribute for PICKCHARS: %1 + + AutoTypeAssociationsModel @@ -752,6 +704,10 @@ AutoTypePlatformX11 + + Trying to send invalid keysym. + Pokúša sa poslať neplatný symbol klávesy + Sequence aborted: Caps Lock is on Postupnosť zrušená: je zapnutý Caps Lock @@ -764,10 +720,6 @@ Unable to get valid keycode for key: Nemožno získať platný klávesový kód klávesy: - - Trying to send invalid keyboard symbol. - - AutoTypeSelectDialog @@ -867,13 +819,13 @@ Ctrl+4 - Use Virtual Keyboard (Windows Only)</p> Disable for this site Zakázať tejto stránke - - Undo - - BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + KeePassXC-Browser Uložiť položku + Ok Ok @@ -888,73 +840,13 @@ 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. - - KeePassXC - Select Database - - - - - BrowserPasskeysConfirmationDialog - - Cancel - Zrušiť - - - Update - - - - Authenticate - - - - Register new - - - - Register - - - - Timeout in <b>%n</b> seconds... - - - - Relying Party: %1 - - - - Username: %1 - - - - KeePassXC - Passkey credentials - - - - Add to existing entry - - - - Existing passkey found. -Do you want to register a new passkey for: - - - - Select the existing passkey and press Update to replace it. - - - - Authenticate passkey credentials for: - - - - Do you want to register a passkey for: - - BrowserService + + KeePassXC: Create a new group + KeePassXC: Vytvoriť novú skupinu + A request for creating a new group "%1" has been received. Do you want to create this group? @@ -963,6 +855,10 @@ Do you want to create this group? Chcete vytvoriť túto skupinu? + + KeePassXC: New key association request + KeePassXC: Nová požiadavka priradenia kľúča + You have received an association request for the following database: %1 @@ -979,16 +875,28 @@ chrome-laptop. Save and allow access Uložiť a povoliť prístup + + KeePassXC: Overwrite existing key? + KeePassXC: Prepísať existujúci kľúč? + 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ť? + + KeePassXC: Update Entry + KeePassXC: Upraviť položku + Do you want to update the information in %1 - %2? Chcete upraviť informácie v %1 – %2? + + KeePassXC: Delete entry + KeePassXC: Odstrániť položku + A request for deleting entry "%1" has been received. Do you want to delete the entry? @@ -998,57 +906,50 @@ Chcete odstrániť položku? - %1 (Passkey) - + Converting attributes to custom data… + Konvertovanie atribútov na vlastné dáta… - KeePassXC - Create a new group - + Abort + Zrušiť - Disable - Vypnúť + KeePassXC: Converted KeePassHTTP attributes + KeePassXC: Konvertované atribúty KeePassHTTP - KeePassXC - Overwrite existing key? - + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + Úspešne skonvertované atribúty z %1 položky(iek). +Do vlastných dát presunuté %2 kľúče. + + + Successfully moved %n keys to custom data. + Úspešne presunutý %n kľúč do vlastných dát.Úspešne presunuté %n kľúče do vlastných dát.Úspešne presunutých %n kľúčov do vlastných dát.Úspešne presunutých %n kľúčov do vlastných dát. - KeePassXC - Update Entry - + KeePassXC: No entry with KeePassHTTP attributes found! + KeePassXC: Nenájdená žiadna položka s atribútmi KeePassHTTP! - KeePassXC - Delete entry - + The active database does not contain an entry with KeePassHTTP attributes. + Aktívna databáza neobsahuje žiadnu položku s atribútmi KeePassHTTP. - KeePassXC - New key association request - + Don't show this warning again + Nezobrazovať znova toto upozornenie - Passkey - + KeePassXC: Legacy browser integration settings detected + KeePassXC: Zistené staré nastavenia integrácie prehliadača - KeePassXC - Passkey credentials - - - - Register a new passkey to this entry: - - - - KeePassXC - Update passkey - - - - Entry already has a passkey. -Do you want to overwrite the passkey in %1 - %2? - - - - Register - + 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? + Je potrebné presunúť vaše nastavenia KeePassXC-Browser do nastavenia databázovy. +Je to potrebné kvôli správe aktuálnych pripojení prehliadača. +Chcete teraz migrovať svoje nastavenia? @@ -1069,6 +970,10 @@ Do you want to overwrite the passkey in %1 - %2? General Všeobecné + + Browsers installed as snaps are currently not supported. + Boli nainštalované prehliadače lebo "snaps" momentálne nie sú podporované. + Enable integration for these browsers: Zapnúť integráciu v týchto prehliadačoch: @@ -1240,6 +1145,26 @@ Do you want to overwrite the passkey in %1 - %2? Custom extension ID Vlastné ID rozšírenia + + Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 + Kvôli ochrane Snap v sandboxe, musíte na povolenie integrácie prehliadača spustiť skript.<br />Skript môžete získať z %1 + + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 + Na fungovanie integrácie s prehliadačom je potrebný KeePassXC-Browser.<br /> Stiahnite ho pre %1 a %2. %3. %4 + + + Please see special instructions for browser extension use below + Prosím, pozrite si špeciálne inštrukcie na použite integrácie prehliadača nižšie + + + <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. + <b>Chyba:</b> Vlastné umiestnenie proxy nemožno nájsť!<br/>Integrácia prehliadača NEBUDE FUNGOVAŤ bez aplikácie proxy. + + + <b>Warning:</b> The following options can be dangerous! + <b>Upozornenie:</b> nasledujúce voľby môžu byť nebezpečné! + Executable Files Spustiteľné súbory @@ -1256,46 +1181,6 @@ Do you want to overwrite the passkey in %1 - %2? Select native messaging host folder location Vyberte umiestnenie zložky hostiteľa správe medzi prehliadačom a KeePassXC - - Allow keepassxc-proxy to list all entries with their title, URL and UUID in connected databases. - - - - Allow limited access to all entries in connected databases (ignores site access restrictions) - - - - <b>Warning:</b> Only adjust these settings if necessary. - - - - The custom proxy location does not exist. - - - - <b>Error:</b> The custom proxy location does not exist. Correct this in the advanced settings tab. - - - - <b>Error:</b> The installed proxy executable is missing from the expected location: %1<br/>Please set a custom proxy location in the advanced settings or reinstall the application. - - - - Allows using insecure http://localhost with passkeys for testing purposes. - - - - Allow using localhost with passkeys - - - - KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. - - - - Browsers installed using Snap or Flatpak are not supported with exception to Firefox installed using Snap. - - CloneDialog @@ -1318,6 +1203,14 @@ Do you want to overwrite the passkey in %1 - %2? CsvImportWidget + + Import CSV fields + Importovať polia CSV + + + filename + meno súboru + size, rows, columns veľkosť, riadky, stĺpce @@ -1426,42 +1319,50 @@ Do you want to overwrite the passkey in %1 - %2? Column %1 Stĺpec %1 + + Imported from CSV file + Importované zo súboru CSV + + + Original data: + Pôvodné dáta: + + + Error(s) detected in CSV file! + V súbore CSV zistená chyba(y)! + [%n more message(s) skipped] [%n ďalšia správa preskočená][%n ďalšie správy preskočené[%n ďalších správ preskočených][%n ďalších správ preskočených] - Failed to parse CSV file: %1 - + Error + Chyba - Imported from CSV file: %1 - - - - No Title Selected - - - - No title column was selected, entries will be hard to tell apart. -Are you sure you want to import? - - - - Tags - + CSV import: writer has errors: +%1 + Import CSV: chyby zápisu: +%1 CsvParserModel + + %1, %2, %3 + file info: bytes, rows, columns + %1, %2, %3 + + + %n byte(s) + %n bajt%n bajty%n bajtov%n bajt(y) + %n row(s) - CSV row count %n riadok%n riadky%n riadkov%n riadkov %n column(s) - CSV column count %n stĺpec%n stĺpce%n stĺpcov%n stĺpcov @@ -1514,14 +1415,6 @@ Zálohovať databázu nachádzajúcu sa na %2 Recycle Bin Kôš - - Database file read error. - - - - No file path was provided. - - DatabaseOpenDialog @@ -1544,10 +1437,30 @@ Zálohovať databázu nachádzajúcu sa na %2 Password field Pole pre heslo + + Enter Additional Credentials (if any): + Zadajte dodatočné prihlasovacie údaje (ak treba): + + + Key File: + Súbor kľúča: + + + Key file help + Pomocník súbora kľúčov + Hardware key slot selection Výber slotu hardvérového kľúča + + Hardware Key: + Hardvérový kľúč: + + + Hardware key help + Pomocník pre hardvérový kľúč + Key file to unlock the database Súbor kľúča na odomknutie databázy @@ -1560,6 +1473,14 @@ Zálohovať databázu nachádzajúcu sa na %2 Browse… Prechádzať… + + Refresh hardware tokens + Obnoviť hardvérové tokeny + + + Refresh + Obnoviť + Unlock Database @@ -1616,6 +1537,10 @@ Ak chcete zabrániť zobrazovaniu tejto chyby, musíte ísť do "Nastavenia Retry with empty password Skúsiť znova s prázdnym heslom + + Failed to authenticate with Touch ID + + Failed to open key file: %1 Nepodarilo sa otvoriť kľúčový súbor: %1 @@ -1648,64 +1573,40 @@ Ak chcete zabrániť zobrazovaniu tejto chyby, musíte ísť do "Nastavenia Cannot use database file as key file Súbor databázy nemožno použiť ako súbor kľúča + + You cannot use your database file as a key file. +If you do not have a key file, please leave the field empty. + Nemôžete použiť svoju databázu ako súbor kľúča. +Ak nemáte súbor kľúča, prosím nechajte toto pole prázdne. + + + Detecting hardware keys… + Detekcia hardvérových kľúčov… + + + No hardware keys detected + Nenájdené žiadne hardvérové kľúče + + + Select hardware key… + Zvoľte hardvérový kľúč… + + + <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information…</p> + <p>Ako doplnok hesla môžete, na zvýšenie bezpečnosti databázy, použiť tajný súbor. Tento súbor môže byť vygenerovaný v nastaveniach bezpečnosti databázy.</p><p>Tento súbor <strong>nie je</strong> súbor vašej databázy *.kdbx!<br>Ak nemáte súbor kľúča, nechajte toto pole prázdne.</p><p>Kliknite na ďalšie informácie…</p> + + + <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +<p>Click for more information…</p> + <p>Môžete použiť hardvérový bezpečnostný kľúč ako <strong>Yubikey</strong> alebo <strong>OnlyKey</strong> so slotmi nakonfigurovanými pre HMAC-SHA1.</p> +<p>Kliknite pre viac informácií...</p> + authenticate to access the database - Failed to authenticate with Quick Unlock: %1 - - - - Select Key File: - - - - <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!</p> - - - - Use hardware key [Serial: %1] - - - - Use hardware key - - - - Your database file is NOT a key file! -If you don't have a key file or don't know what that is, you don't have to select one. - - - - KeePassXC database file selected - - - - The file you selected looks like a database file. -A database file is NOT a key file! - -Are you sure you want to continue with this file?. - - - - No hardware keys found. - - - - Refresh Hardware Keys - - - - Click to add a key file. - - - - <a href="#" style="text-decoration: underline">I have a key file</a> - - - - Hardware keys found, but no slots are configured. + Failed to authenticate with Windows Hello: %1 @@ -1718,6 +1619,10 @@ Are you sure you want to continue with this file?. DatabaseSettingsDialog + + Advanced Settings + Pokročilé nastavenia + General Všeobecné @@ -1742,22 +1647,6 @@ Are you sure you want to continue with this file?. Maintenance Údržba - - KeeShare - KeeShare - - - Secret Service Integration - Integrácia Tajnej služby - - - Remote Sync - - - - Database Settings: %1 - - DatabaseSettingsWidgetBrowser @@ -1765,6 +1654,18 @@ Are you sure you want to continue with this file?. KeePassXC-Browser settings Nastavenia KeePassXC-Browser + + Convert KeePassHTTP data + Konvertovať dáta KeePassHTTP + + + Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data + Konvertovať KeePassHTTP atribúty do formátu kompatibilného s KeePassXC-Browser + + + Refresh database root group ID + Obnoviť ID koreňovej skupiny databázy + Disconnect all browsers Odpojiť všetky prehliadače @@ -1773,10 +1674,6 @@ Are you sure you want to continue with this file?. Forget all site-specific settings on entries Zabudnúť všetky nastavenia položiek špecifické pre stránky - - Refresh database root group ID - Obnoviť ID koreňovej skupiny databázy - Stored keys Uložené kľúče @@ -1825,10 +1722,18 @@ This may prevent connection to the browser plugin. Naozaj chcete odpojiť všetky prehliadače? Môže to brániť pripojeniu zásuvného modulu prehliadača. + + KeePassXC: No keys found + KeePassXC: Nenájdené žiadne kľúče + No shared encryption keys found in KeePassXC settings. V nastavení KeePassXC neboli nájdené zdieľané šifrovacie kľúče. + + KeePassXC: Removed keys from database + KeePassXC: Klúče odstránené z databázy + Successfully removed %n encryption key(s) from KeePassXC settings. Ú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. @@ -1847,14 +1752,32 @@ Povolenia na prístup k položkám budú odvolané. 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žky. + + 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 + Presunúť atribúty KeePassHTTP do vlastných dát + + + Do you really want to convert all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + Naozaj chcete konvertovať všetky staré dáta integrácie prehliadača do najnovšej normy? +Je to potrebné kvôli udržaniu kompatibility so zásuvným modulom prehliadača. + Refresh database ID Obnoviť ID databázy @@ -1865,26 +1788,6 @@ This is only necessary if your database is a copy of another and the browser ext Naozaj chcete obnoviť ID databázy? Toto je potrebné len ak je vaša databáza kópiou inej a doplnok prehliadača sa nemôže pripojiť. - - Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data - Konvertovať KeePassHTTP atribúty do formátu kompatibilného s KeePassXC-Browser - - - No keys found - - - - Removed keys from database - - - - Removed permissions - - - - No entry with permissions found! - - DatabaseSettingsWidgetDatabaseKey @@ -1924,18 +1827,6 @@ Naozaj chcete pokračovať bez hesla? Failed to change database credentials Zlyhala zmena prihlasovacích údajov databázy - - Weak password - Slabé heslo - - - This is a weak password! For better protection of your secrets, you should choose a stronger password. - - - - The provided password does not meet the minimum quality requirement. - - DatabaseSettingsWidgetEncryption @@ -1943,6 +1834,14 @@ Naozaj chcete pokračovať bez hesla? Decryption Time: Čas dešifrovania: + + Change existing decryption time + Zmeniť existujúci čas dešifrovania + + + Change + Zmeniť + Decryption time in seconds Čas dešifrovania v sekundách @@ -2023,6 +1922,11 @@ Naozaj chcete pokračovať bez hesla? KDBX 3 KDBX 3 + + unchanged + Database decryption time is unchanged + bez zmeny + Number of rounds too high Key transformation rounds @@ -2075,18 +1979,6 @@ Ak ponecháte toto číslo, môže byť prelomenie ochrany databázy príliš je Threads for parallel execution (KDF settings) vláknovláknavlákien vlákien - - Encryption Settings: - - - - Basic - - - - Advanced - Pokročilé - DatabaseSettingsWidgetFdoSecrets @@ -2208,70 +2100,6 @@ Entries deleted from the recycle bin are removed from the database. - - Autosave delay since last change - - - - Autosave delay - - - - Autosave delay since last change in minutes - - - - min - min - - - Autosave delay since last change checkbox - - - - Public Database Metadata - - - - Warning: the following settings are not encrypted. - - - - Display name: - - - - Publically visible display name used on the unlock dialog - - - - Database public display name - - - - Display color: - - - - Publically visible color used on the unlock dialog - - - - Database public display color chooser - - - - Clear - Vymazať - - - Display icon: - - - - Select Database Icon - - DatabaseSettingsWidgetKeeShare @@ -2367,129 +2195,6 @@ removed from the database. Pole popisu databázy - - DatabaseSettingsWidgetRemote - - Sync Commands - - - - Remove - Odstrániť - - - Command Settings - - - - Name - Názov - - - Save - Uložiť - - - Download - - - - Command: - - - - Download command field - - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - - - - Input: - - - - Download input field - - - - Upload - - - - Upload command field - - - - e.g.: "sftp user@hostname" or "scp {TEMP_DATABASE} user@hostname:DatabaseOnRemote.kdbx" - - - - Upload input field - - - - Name cannot be empty. - - - - Test - - - - Download command cannot be empty. - - - - Download failed with error: %1 - - - - Download finished, but file %1 could not be found. - - - - Download successful. - - - - Save Remote Settings - - - - You have unsaved changes. Do you want to save them? - - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - - - - e.g.: -put {TEMP_DATABASE} DatabaseOnRemote.kdbx -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - - - - Timeout: - - - - seconds - sekundy - - DatabaseTabWidget @@ -2522,10 +2227,26 @@ Toto je určite chyba, prosím nahláste ju vývojárom. CSV file Súbor CSV + + Select CSV file + Zvoľte súbor CSV + Merge database Zlúčiť databázu + + KeePass 1 database + Databáza KeePass 1 + + + Open KeePass 1 database + Otvoriť databázu KeePass 1 + + + Open OPVault + Otvoriť OPVault + Export database to CSV file Exportovať databázu do súboru CSV @@ -2538,6 +2259,28 @@ Toto je určite chyba, prosím nahláste ju vývojárom. Writing the HTML file failed. Zápis do súboru HTML zlyhal. + + Export Confirmation + Potvrdenie exportu + + + You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? + Chystáte sa exportovať svoju databázu do nešifrovaného súboru. Takto necháte svoje heslá a citlivé informácie nechránené! Naozaj chcete pokračovať? + + + New Database + Nová databáza + + + %1 [New Database] + Database tab name modifier + %1 [Nová databáza] + + + %1 [Locked] + Database tab name modifier + %1 [Zamknutá] + Export database to XML file @@ -2550,31 +2293,9 @@ Toto je určite chyba, prosím nahláste ju vývojárom. Writing the XML file failed - - Export Confirmation - Potvrdenie exportu - - - You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? - Chystáte sa exportovať svoju databázu do nešifrovaného súboru. Takto necháte svoje heslá a citlivé informácie nechránené! Naozaj chcete pokračovať? - - - %1 [Locked] - Database tab name modifier - %1 [Zamknutá] - - - %1 [Temporary] - Database tab name modifier - - DatabaseWidget - - Searches and Tags - - Searching… Hľadanie… @@ -2623,10 +2344,6 @@ Toto je určite chyba, prosím nahláste ju vývojárom. Expired entries - - Entries expiring within %1 day(s) - - No current database. Žiadna otvorená databáza. @@ -2651,18 +2368,6 @@ Toto je určite chyba, prosím nahláste ju vývojárom. No Results Žiadne výsledky - - Save - Uložiť - - - Enter a unique name or overwrite an existing search from the list: - - - - Save Search - - Lock Database? Zamknúť databázu? @@ -2691,6 +2396,26 @@ Uložiť zmeny? File has changed Súbor bol zmenený + + The database file has changed. Do you want to load the changes? + Súbor databázy bol zmenený. Chcete načítať zmeny? + + + Merge Request + Požiadavka zlúčenia + + + The database file has changed and you have unsaved changes. +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. +Error: %1 + Nemožno otvoriť nový databázový súbor počas pokusu o automatické opätovné načítanie. +Chyba: %1 + Disable safe saves? Vypnúť bezpečné ukladanie? @@ -2733,93 +2458,24 @@ Vypnúť bezpečné ukladanie a skúsiť znova? Could not find database file: %1 Nemožno nájsť súbor databázy: %1 - - New Database - Nová databáza + + Entries expiring within %1 day(s) + - %1 [New Database] - Database tab name modifier - %1 [Nová databáza] - - - Remote Sync did not contain any download or upload commands. + Searches and Tags - Remote sync '%1' completed successfully! + Enter a unique name or overwrite an existing search from the list: - Remote sync '%1' failed: %2 - + Save + Uložiť - Error while saving database %1: %2 - - - - Downloading... - Sťahovanie… - - - Uploading... - - - - Syncing... - - - - Remove passkey from entry - - - - Do you want to remove the passkey from this entry? - - - - The database file "%1" was modified externally - - - - Do you want to load the changes? - - - - Reload database - - - - Reloading database… - - - - Reload canceled - - - - Reload successful - - - - Reload pending user action… - - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes<br>Ignore the changes on disk until save<br>Discard unsaved changes - - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes then save<br>Overwrite the changes on disk<br>Discard unsaved changes - - - - Database file overwritten. - - - - Database file on disk cannot be unlocked with current credentials.<br>Enter new credentials and/or present hardware key to continue. + Save Search @@ -2873,6 +2529,10 @@ Vypnúť bezpečné ukladanie a skúsiť znova? n/a neznáme + + (encrypted) + (šifrované) + Select private key Zvoľte súkromný kľúč @@ -2958,10 +2618,6 @@ Chcete to opraviť? Hide Skryť - - %n hour(s) - - %n week(s) %n týždeň%n týždne%n týždňov%n týždňov @@ -2974,9 +2630,9 @@ Chcete to opraviť? %n year(s) %n rok%n roky%n rokov%n rokov - - Failed to decrypt SSH key, ensure password is correct. - + + %n hour(s) + @@ -3096,20 +2752,10 @@ Chcete to opraviť? Add new window association Pridať nové priradenia okna - - + - Add item - + - Remove selected window association Odstrániť vybrané priradenia okna - - - - Remove item - - - Window title: Názov okna: @@ -3134,9 +2780,23 @@ Chcete to opraviť? Custom Auto-Type sequence for this window Vlastná postupnosť Automatického vypĺňania tohoto okna + + + + Add item + + + + + - + Remove item + - + EditEntryWidgetBrowser + + These settings affect to the entry's behaviour with the browser extension. + Tieto nastavenia ovplyvňujú správanie položky s doplnkom prehliadača. + General Všeobecné @@ -3149,14 +2809,26 @@ Chcete to opraviť? Skip Auto-Submit for this entry Zapnúť Automatické vypĺňanie pre túto položku + + Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. + Toto nastavenie posielať do prehliadača len pre dialógy HTTP Auth. Ak je zapnuté, bežné prihlasovacie formuláre nebudú na výber poskytovať túto položku. + Use this entry only with HTTP Basic Auth Použiť položku len pre HTTP Basic Auth + + Do not send this setting to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. + Toto nastavenie neposielať do prehliadača pre dialógy HTTP Auth. Ak je zapnuté, bežné prihlasovacie formuláre nebudú túto položku poskytovať na výber. + Do not use this entry with HTTP Basic Auth Nepoužiť túto položku pre HTTP Basic Auth + + Additional URL's + Ďalšie URL + Add Pridať @@ -3169,22 +2841,6 @@ Chcete to opraviť? Edit Upraviť - - These settings affect the entry's behaviour with the browser extension. - - - - Additional URLs - - - - Only send this entry to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. - - - - Do not send this entry to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. - - EditEntryWidgetHistory @@ -3350,6 +3006,19 @@ Chcete to opraviť? Private key Súkromný kľúč + + External file + Externý súbor + + + Browser for key file + Vybrať súbor kľúča + + + Browse… + Button for opening file dialog + Prechádzať… + Attachment Príloha @@ -3366,23 +3035,6 @@ Chcete to opraviť? Remove from agent Odstrániť z agenta - - External file - Externý súbor - - - Browser for key file - Vybrať súbor kľúča - - - Browse… - Button for opening file dialog - Prechádzať… - - - Generate - Generovať - Select attachment file Zvoľte súbor prílohy @@ -3407,10 +3059,6 @@ Chcete to opraviť? seconds sekundy - - Clear agent - - EditGroupWidget @@ -3422,6 +3070,10 @@ Chcete to opraviť? Icon Ikona + + Browser Integration + Integrácia prehliadača + Properties Vlastnosti @@ -3438,10 +3090,6 @@ Chcete to opraviť? Group has unsaved changes Skupina má neuložené zmeny - - Browser Integration - Integrácia prehliadača - Enable Zapnúť @@ -3501,14 +3149,6 @@ Chcete to opraviť? Omit WWW subdomain from matching toggle for this and sub groups - - Restrict matching to given browser key: - - - - Restrict matching to given browser key toggle for this and sub groups - - EditGroupWidgetKeeShare @@ -3741,6 +3381,10 @@ Podporované rozšírenia sú: %1. Unable to fetch favicon. Nemožno stiahnuť ikonu stránky + + You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security + Môžete zapnúť webovú službu ikon DuckDuckGo v Nástroje -> Nastavenie -> Bezpečnosť + Existing icon selected. Zvolená existujúca ikona. @@ -3773,10 +3417,6 @@ Podporované rozšírenia sú: %1. The following icon(s) failed: Nasledujúca ikona zlyhala:Nasledujúce ikony zlyhali:Nasledujúce ikony zlyhali:Nasledujúce ikony zlyhali: - - You can enable the DuckDuckGo website icon service under Application Settings -> Security - - EditWidgetProperties @@ -3853,24 +3493,6 @@ Môže to spôsobiť nefunkčnosť dotknutých zásuvných modulov.%1 - Clone %1 – Klon - - Passkey - - - - Invalid conversion type: %1 - Neplatný typ konverzie: %1 - - - Invalid conversion syntax: %1 - Neplatná syntax konverzie: %1 - - - Invalid regular expression syntax %1 -%2 - Neplatná syntax regulárneho výrazu %1 -%2 - EntryAttachments @@ -3879,21 +3501,6 @@ Môže to spôsobiť nefunkčnosť dotknutých zásuvných modulov.Nemožno otvoriť súbor „%1”. - - EntryAttachmentsDialog - - Form - Formulár - - - File name - - - - File contents... - - - EntryAttachmentsModel @@ -3931,6 +3538,14 @@ Môže to spôsobiť nefunkčnosť dotknutých zásuvných modulov.Remove Odstrániť + + Rename selected attachment + Premenovať zvolenú prílohu + + + Rename + Premenovať + Open selected attachment Otvoriť zvolenú prílohu @@ -4008,6 +3623,12 @@ Môže to spôsobiť nefunkčnosť dotknutých zásuvných modulov.Confirm Overwrite Attachment Potvrďte Prepísanie Prílohy + + Attachment "%1" already exists. +Would you like to overwrite the existing attachment? + Príloha "%1" už existuje. +Prepísať existujúcu prílohu? + Confirm Attachment Potvrdiť prílohu @@ -4042,24 +3663,6 @@ Error: %1 Uloženie aktualizovanej prílohy zlyhalo. Chyba: %1 - - Attachment "%1" already exists. -Would you like to overwrite the existing attachment? - Príloha "%1" už existuje. -Prepísať existujúcu prílohu? - - - New - - - - Preview - Ukážka - - - Failed to preview an attachment: Attachment not found - - EntryAttributesModel @@ -4254,14 +3857,6 @@ Prepísať existujúcu prílohu? Has TOTP Má TOTP - - Background Color - - - - Group Path - - EntryPreviewWidget @@ -4282,8 +3877,8 @@ Prepísať existujúcu prílohu? Heslo - URL - URL + Notes + Poznámky Expiration @@ -4302,8 +3897,8 @@ Prepísať existujúcu prílohu? Použ. meno: - Notes - Poznámky + URL + URL Advanced @@ -4353,10 +3948,6 @@ Prepísať existujúcu prílohu? Never Nikdy - - Double click to copy value - - Enabled Zapnuté @@ -4366,7 +3957,7 @@ Prepísať existujúcu prílohu? Vypnuté - Double click to copy to clipboard + Double click to copy value @@ -4376,10 +3967,6 @@ Prepísať existujúcu prílohu? Invalid URL Neplatná URL - - Duplicate URL - - EntryView @@ -4395,10 +3982,6 @@ Prepísať existujúcu prílohu? Reset to defaults Obnoviť predvolené - - + %1 entry(s)... - - ExportDialog @@ -4620,193 +4203,6 @@ V bezpečnostnej sekcii nastavení aplikácie môžete zapnúť webovú službu Sťahovanie ikon (%1/%2)… - - ImportWizard - - Import Wizard - - - - - ImportWizardPageReview - - WizardPage - Stránka sprievodcu - - - Entry count: %1 - - - - Group - Skupina - - - Title - Nadpis - - - Username - Používateľské meno - - - Password - Heslo - - - Url - - - - Could not load key file. - - - - Could not open remote database. Password or key file may be incorrect. - - - - - ImportWizardPageSelect - - Form - Formulár - - - Import File Selection - - - - Password: - Heslo: - - - Key File: - Súbor kľúča: - - - Browse… - Prechádzať… - - - Import Into: - - - - New Database - Nová databáza - - - No unlocked databases available - - - - Existing Database: - - - - Import File: - - - - Comma Separated Values (.csv) - - - - 1Password Export (.1pux) - - - - 1Password Vault (.opvault) - - - - Bitwarden (.json) - - - - KeePass 1 Database (.kdb) - - - - Open OPVault - Otvoriť OPVault - - - Select import file - - - - All files - Všetky súbory - - - Key files - Súbory kľúčov - - - Select key file - Zvoľte súbor kľúča - - - Comma Separated Values - - - - 1Password Export - - - - Bitwarden JSON Export - - - - 1Password Vault - - - - KeePass1 Database - - - - Proton Pass (.json) - - - - Proton Pass JSON Export - - - - Temporary Database - - - - Command: - - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - - - - Input: - - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last commend `exit` has to be sent - - - - - Remote Database (.kdbx) - - - KMessageWidget @@ -5242,6 +4638,17 @@ Riadok %2, stĺpec %3 Zlyhalo otvorenie súkromného kľúča + + KeePass1OpenWidget + + Import KeePass1 Database + Importovať databázu KeePass 1 + + + Unable to open the database. + Nemožno otvoriť databázu. + + KeePass1Reader @@ -5598,6 +5005,10 @@ Naozaj chcete pokračovať s týmto súborom? &Recent Databases &Nedávne databázy + + &Import + &Import + &Export &Exportovať @@ -5618,10 +5029,6 @@ Naozaj chcete pokračovať s týmto súborom? TOTP TOTP - - Tags - - &Groups &Skupiny @@ -5666,18 +5073,34 @@ Naozaj chcete pokračovať s týmto súborom? &New Database… &Nová databáza… + + Create a new database + Vytvoriť novú databázu + &Merge From Database… &Zlúčiť z databázou… + + Merge from another KDBX database + Zlúčiť s inou databázou KDBX + &New Entry… &Nová položka… + + Add a new entry + Pridať novú položku + &Edit Entry… &Upraviť položku… + + View or edit entry + Zobraziť alebo upraviť položku + &Delete Entry… O&dstrániť položku… @@ -5686,6 +5109,10 @@ Naozaj chcete pokračovať s týmto súborom? &New Group… &Nová skupina… + + Add a new group + Pridať novú skupinu + &Edit Group… &Upraviť skupinu… @@ -5718,10 +5145,18 @@ Naozaj chcete pokračovať s týmto súborom? Database &Reports… &Hlásenia databázy… + + Statistics, health check, etc. + Štatistiky, Kontrola zdravia, apod. + &Database Settings… Nastavenia &databázy… + + Database settings + Nastavenia databázy + &Clone Entry… &Klonovať položku… @@ -5730,18 +5165,34 @@ Naozaj chcete pokračovať s týmto súborom? Move u&p &Posunúť vyššie + + Move entry one step up + Posunie položku o jedno vyššie + Move do&wn &Posunúť nižšie + + Move entry one step down + Posunie položku o jedno nižšie + Copy &Username Kopírovať po&už. meno + + Copy username to clipboard + Skopíruje používateľské meno do schránky + Copy &Password Kopírovať &heslo + + Copy password to clipboard + Skopíruje heslo do schránky + &Settings Na&stavenia @@ -5775,13 +5226,21 @@ Naozaj chcete pokračovať s týmto súborom? &Názov - Copy &URL - + Copy title to clipboard + Kopírovať názov do schránky + + + Copy URL to clipboard + Kopírovať URL do schránky &Notes &Poznámky + + Copy notes to clipboard + Kopírovať poznámky do schránky + &CSV File… Súbor &CSV… @@ -5794,14 +5253,26 @@ Naozaj chcete pokračovať s týmto súborom? KeePass 1 Database… Databáza KeePass 1 + + Import a KeePass 1 database + Importovať databázu KeePass 1… + 1Password Vault… Úložisko 1Password... + + Import a 1Password Vault + Importovať z úložiska 1Password + CSV File… Súbor CSV… + + Import a CSV file + Importovať súbor CSV… + Show TOTP Zobraziť TOTP @@ -5818,10 +5289,6 @@ Naozaj chcete pokračovať s týmto súborom? Copy &TOTP Kopírovať &TOTP - - Copy Password and TOTP - - E&mpty recycle bin V&yprázdniť kôš @@ -5846,6 +5313,10 @@ Naozaj chcete pokračovať s týmto súborom? &Online Help Pomocník &online + + Go to online documentation + Prejsť na dokumentáciu on-line + &User Guide &Používateľská príručka @@ -5890,10 +5361,6 @@ Naozaj chcete pokračovať s týmto súborom? Classic (Platform-native) Klasický (podľa platformy) - - Show Menubar - - Show Toolbar Zobraziť panel nástrojov @@ -5918,10 +5385,6 @@ Naozaj chcete pokračovať s týmto súborom? Clone Group... Klonovať skupinu… - - &XML File… - - Clear history Vymazať históriu @@ -5949,8 +5412,10 @@ Expect some bugs and minor issues, this version is meant for testing purposes. - No Tags - + 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ý na našej stránke sťahovaní. Restore Entry(s) @@ -5980,10 +5445,6 @@ Očakávajte chyby a menšie problémy, tato verzia je určená pre testovacie Quit KeePassXC Skončiť KeePassXC - - %1 Entry(s) - - Please present or touch your YubiKey to continue… Prosím, pripojte alebo stlačte tlačidlo svojho YubiKey na pokračovanie*… @@ -5996,314 +5457,38 @@ Očakávajte chyby a menšie problémy, tato verzia je určená pre testovacie You must restart the application to apply this setting. Would you like to restart now? Musíte reštartovať aplikáciu, aby sa tieto zmeny prejavili. Chcete ju reštartovať teraz? + + Tags + + + + No Tags + + + + %1 Entry(s) + + + + Copy Password and TOTP + + + + &XML File… + + + + XML File… + + + + Copy &URL + + Allow Screen Capture - - 1Password 1PUX... - - - - Import a 1Password 1PUX file - - - - Import… - - - - Passkeys… - - - - Import Passkey - - - - Remote S&ync… - - - - Quit Application - - - - Open About Dialog - - - - Open Database - - - - Create Database - - - - Merge From Database - - - - Create Entry - - - - Edit Entry - Upraviť položku - - - Delete Entry - - - - Create Group - - - - Edit Group - Upraviť skupinu - - - Delete Group - - - - Download All Favicons - - - - Sort Groups A-Z - - - - Sort Groups Z-A - - - - Save Database As - - - - Show Database Security - - - - Show Database Reports - - - - Show Database Settings - - - - Show Passkeys - - - - Clone Entry - - - - Move Entry Up - - - - Move Entry Down - - - - Copy Username - Kopírovať použ. meno - - - Copy Password - Kopírovať heslo - - - Show Application Settings - - - - Show Password Generator - - - - Remove Passkey From Entry - - - - Perform Auto-Type: {USERNAME} - - - - Perform Auto-Type: {USERNAME}{ENTER} - - - - Perform Auto-Type: {PASSWORD} - - - - Perform Auto-Type: {PASSWORD}{ENTER} - - - - Perform Auto-Type: {TOTP} - - - - Copy Title - - - - Copy URL - - - - Copy Notes - - - - Export to CSV - - - - Export to HTML - - - - Import KeePass1 Database - Importovať databázu KeePass 1 - - - Import 1Password Vault - - - - Import CSV File - - - - Show TOTP QR Code - - - - Set up TOTP - - - - Empty Recycle Bin - - - - Open Donation Website - - - - Open Bug Report - - - - Open Online Documentation - - - - Open Keyboard Shortcuts Guide - - - - Save Database Backup - - - - SSH Agent: Add Key - - - - SSH Agent: Remove Key - - - - Toggle Compact Mode - - - - Set Theme: Automatic - - - - Set Theme: Light - - - - Set Theme: Dark - - - - Set Theme: Classic - - - - Toggle Show Menubar - - - - Toggle Show Toolbar - - - - Toggle Show Preview Panel - - - - Toggle Always on Top - - - - Toggle Hide Usernames - - - - Toggle Hide Passwords - - - - Export to XML - - - - Toggle Allow Screen Capture - - - - Show Group Panel - - - - Toggle Show Group Panel - - - - Setup Remote Sync… - - - - Password Generator - Generátor hesla - - - E&xpire Entry… - - - - Clear SSH Agent - - - - Clear all identities in ssh-agent - - ManageDatabase @@ -6361,6 +5546,26 @@ Očakávajte chyby a menšie problémy, tato verzia je určená pre testovacie Overwriting %1 [%2] Prepísanie %1 [%2] + + older entry merged from database "%1" + staršia položka zlúčená z databázy „%1” + + + Adding backup for older target %1 [%2] + Pridávanie zálohy staršieho cieľa %1 [%2] + + + Adding backup for older source %1 [%2] + Pridávanie zálohy staršieho zdroja %1 [%2] + + + Reapplying older target entry on top of newer source %1 [%2] + Aplikujem položku staršieho cieľa na novší zdroj %1 [%2] + + + Reapplying older source entry on top of newer target %1 [%2] + Aplikujem položku staršieho zdroja na novší cieľ %1 [%2] + Synchronizing from newer source %1 [%2] Synchronizujem z novšieho zdroja %1 [%2] @@ -6420,6 +5625,14 @@ Očakávajte chyby a menšie problémy, tato verzia je určená pre testovacie Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. Tu môžete prispôsobiť nastavenia šifrovania databázy. Nebojte sa, neskôr ich môžete zmeniť v nastavení databázy. + + Advanced Settings + Pokročilé nastavenia + + + Simple Settings + Jednoduché nastavenia + NewDatabaseWizardPageDatabaseKey @@ -6454,25 +5667,6 @@ Očakávajte chyby a menšie problémy, tato verzia je určená pre testovacie Prosím, vyplňte meno a prípadne aj popis svojej novej databázy: - - NewEntryAttachmentsDialog - - Attachment name cannot be empty - - - - Attachment with the same name already exists - - - - Save attachment - - - - New entry attachment - - - NixUtils @@ -6519,6 +5713,15 @@ Očakávajte chyby a menšie problémy, tato verzia je určená pre testovacie Očakávaných %1 B prostého textu, nájdených %2 + + OpVaultOpenWidget + + Read Database did not produce an instance +%1 + Čítanie databázy neposkytuje inštanciu +%1 + + OpVaultReader @@ -6592,10 +5795,6 @@ Očakávajte chyby a menšie problémy, tato verzia je určená pre testovacie Unknown cipher: %1 Neznáma šifra: %1 - - AES-256/GCM is currently not supported - - Passphrase is required to decrypt this key Na dešifrovanie tohoto kľúča je potrebná tajná veta @@ -6661,178 +5860,7 @@ Očakávajte chyby a menšie problémy, tato verzia je určená pre testovacie Neočakávaný koniec súboru pri zápise súkromného kľúča - (encrypted) - (šifrované) - - - - OpenSSHKeyGenDialog - - SSH Key Generator - - - - Type - Typ - - - Bits - - - - Comment - Komentár - - - - PasskeyExportDialog - - KeePassXC - Passkey Export - - - - Filenames will be generated with title and .passkey file extension. - - - - Export entries - - - - Export Selected - - - - Cancel - Zrušiť - - - Export to folder - - - - Export the following passkey entries. - - - - - PasskeyExporter - - KeePassXC: Passkey Export - - - - File "%1.passkey" already exists. -Do you want to overwrite it? - - - - - Cannot open file - - - - Cannot open file "%1" for writing. - - - - Cannot write to file - - - - - PasskeyImportDialog - - KeePassXC - Passkey Import - - - - Username: %1 - - - - Group - Skupina - - - Database - - - - Import Passkey - - - - Import - Importovať - - - Cancel - Zrušiť - - - Entry - Položka - - - Create new entry - - - - Relying Party: %1 - - - - Import the following passkey: - - - - Import the following passkey to this entry: - - - - Default passkeys group (Imported Passkeys) - - - - - PasskeyImporter - - Passkey file - - - - All files - Všetky súbory - - - Cannot open file - - - - Cannot open file "%1" for reading. - - - - Open passkey file - - - - Cannot import passkey - - - - Cannot import passkey file "%1". Data is missing. - - - - Cannot import passkey file "%1". -The following data is missing: -%2 - - - - Cannot import passkey file "%1". Private key is missing or malformed. + AES-256/GCM is currently not supported @@ -7038,6 +6066,10 @@ The following data is missing: Word Count: Počet slov: + + Character Count: + Počet znakov: + Word Case: Slová veľkými: @@ -7050,6 +6082,10 @@ The following data is missing: Add custom wordlist Pridať vlastný zoznam slov + + character + znak + Close Zatvoriť @@ -7086,30 +6122,6 @@ The following data is missing: Entropy: %1 bit Náhodnosť: %1 b - - Password Quality: %1 - Kvalita hesla: %1 - - - Poor - Password quality - Slabé - - - Weak - Password quality - Slabé - - - Good - Password quality - Dobré - - - Excellent - Password quality - Výbroné - Confirm Delete Wordlist @@ -7156,20 +6168,32 @@ Do you want to overwrite it? Špeciálne znaky - passwordLength - + Password Quality: %1 + Kvalita hesla: %1 - Characters: %1 - + Poor + Password quality + Slabé - MIXED case - + Weak + Password quality + Slabé - Excluded characters: "0", "1", "l", "I", "O", "|", "﹒", "B", "8", "G", "6" - + Good + Password quality + Dobré + + + Excellent + Password quality + Výbroné + + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + Vynechané znaky: „0”, „1”, „l”, „I”, „O”, „|”, „﹒” @@ -7219,7 +6243,7 @@ Do you want to overwrite it? Výbroné - Toggle password visibility using Control + H. Open the password generator using Control + G. + Toggle password visibilty using Control + H. Open the password generator using Control + G. @@ -7238,21 +6262,6 @@ Do you want to overwrite it? - - PreviewEntryAttachmentsDialog - - Preview entry attachment - - - - No preview available - - - - Image format not supported - - - QMessageBox @@ -7291,10 +6300,6 @@ Do you want to overwrite it? Continue Pokračovať - - Continue with weak password - - QObject @@ -7688,10 +6693,6 @@ Do you want to overwrite it? Too many arguments provided. Príliš veľa argumentov. - - Path of the database. - Cesta k databáze. - Target decryption time in MS for the database. Cieľový čas dešifrovania databázy v ms. @@ -7712,6 +6713,10 @@ Do you want to overwrite it? Create a new database. Vytvoriť novú databázu. + + Path of the database. + Cesta k databáze. + Invalid decryption time %1. Neplatný čas dešifrovania %1. @@ -7756,158 +6761,6 @@ Do you want to overwrite it? Successfully created new database. Úspešne vytvorená nová databáza. - - Unset the password for the database. - - - - Unset the key file for the database. - - - - Edit a database. - - - - Cannot use %1 and %2 at the same time. - - - - Could not change the database key. - - - - Database was not modified. - - - - Writing the database failed: %1 - Zápis do databázy zlyhal: %1 - - - Successfully edited the database. - - - - Cannot remove password: The database does not have a password. - - - - Cannot remove file key: The database does not have a file key. - - - - Loading the new key file failed: %1 - - - - Found unexpected Key type %1 - - - - Cannot remove all the keys from a database. - - - - Show a database's information. - Zobraziť informácie databázy. - - - UUID: - UUID: - - - Name: - Názov: - - - Description: - Popis: - - - Cipher: - Šifra: - - - KDF: - KDF: - - - Recycle bin is enabled. - Odpadkový kôš je zapnutý. - - - Recycle bin is not enabled. - Odpadkový kôš nie je zapnutý. - - - Location - Umiestnenie - - - Database created - Databáza vytvorená - - - Last saved - Naposledy uložené - - - Unsaved changes - Neuložené zmeny - - - yes - áno - - - no - nie - - - Number of groups - Počet skupín - - - Number of entries - Počet položiek - - - Number of expired entries - Počet položiek po dobe platnosti - - - Unique passwords - Jedinečné heslá - - - Non-unique passwords - Nie jedinečné heslá - - - Maximum password reuse - Maximálny počet opakovane použitých hesiel - - - Number of short passwords - Počet krátkych hesiel - - - Number of weak passwords - Počet slabých hesiel - - - Entries excluded from reports - Položky vylúčené z hlásení - - - Average password length - Priemerná dĺžka hesla - - - %1 characters - %1 znakov - Word count for the diceware passphrase. Počet slov pre diceware tajnú vetu. @@ -7931,6 +6784,10 @@ Do you want to overwrite it? Invalid word count %1 Neplatný počet slov %1 + + The word list is too small (< 1000 items) + Zoznam slov je príliš krátky (< 1000 položiek) + Title for the entry. Názov položky. @@ -7955,6 +6812,10 @@ Do you want to overwrite it? Enter new password for entry: Zadajte nové heslo položky: + + Writing the database failed: %1 + Zápis do databázy zlyhal: %1 + Successfully edited entry %1. Úspešne upravená položka %1. @@ -8075,6 +6936,10 @@ Do you want to overwrite it? Exit interactive mode. Ukončiť interaktívny režim. + + Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. + Formát exportu. Dostupné voľby sú „xml” alebo „csv”. Predvolene „xml”. + Exports the content of a database to standard output in the specified format. Exportuje obsah databázy na štandardný výstup v zadanom formáte. @@ -8175,6 +7040,106 @@ Do you want to overwrite it? Successfully imported database. Úspešne importovaná databáza. + + Show a database's information. + Zobraziť informácie databázy. + + + UUID: + UUID: + + + Name: + Názov: + + + Description: + Popis: + + + Cipher: + Šifra: + + + KDF: + KDF: + + + Recycle bin is enabled. + Odpadkový kôš je zapnutý. + + + Recycle bin is not enabled. + Odpadkový kôš nie je zapnutý. + + + Location + Umiestnenie + + + Database created + Databáza vytvorená + + + Last saved + Naposledy uložené + + + Unsaved changes + Neuložené zmeny + + + yes + áno + + + no + nie + + + Number of groups + Počet skupín + + + Number of entries + Počet položiek + + + Number of expired entries + Počet položiek po dobe platnosti + + + Unique passwords + Jedinečné heslá + + + Non-unique passwords + Nie jedinečné heslá + + + Maximum password reuse + Maximálny počet opakovane použitých hesiel + + + Number of short passwords + Počet krátkych hesiel + + + Number of weak passwords + Počet slabých hesiel + + + Entries excluded from reports + Položky vylúčené z hlásení + + + Average password length + Priemerná dĺžka hesla + + + %1 characters + %1 znakov + Unknown command %1 Neznáma príkaz %1 @@ -8347,10 +7312,6 @@ Dostupné príkazy: Show the protected attributes in clear text. Zobraziť chránené atribúty ako prostý text. - - Show all the attributes of the entry. - - Show the attachments of the entry. @@ -8421,10 +7382,6 @@ Prosím, zvážte vygenerovanie nového súboru kľúča. Invalid YubiKey serial %1 Neplatné sériové číslo Yubikey %1 - - Please present or touch your YubiKey to continue. - - Enter password to encrypt database (optional): Zadajte heslo na zašifrovanie databázy (voliteľné): @@ -8662,6 +7619,18 @@ Jadro: %3 %4 file empty prázdny súbor + + malformed string + zlý formát reťazca + + + missing closing quote + chýba koncová úvodzovka + + + %1: (row, col) %2,%3 + %1: (riadok, stĺpec) %2, %3 + AES 256-bit AES 256b @@ -8840,6 +7809,14 @@ Jadro: %3 %4 read password of the database from stdin čítať heslo databázy zo stdin + + allow app screen recordering and screenshots + + + + Locked databases. + Zamknuté databázy. + Database failed to lock. Zamknutie databázy zlyhalo. @@ -8848,10 +7825,6 @@ Jadro: %3 %4 Another instance of KeePassXC is already running. Už je spustená iná inštancia KeePassXC. - - KeePassXC is not running. No open database to lock - - Fatal error while testing the cryptographic functions. Fatálna chyba pri testovaní kryptografických funkcií. @@ -8895,298 +7868,68 @@ Jadro: %3 %4 - Access to all entries is denied + Please present or touch your YubiKey to continue. - allow screenshots and app recording (Windows/macOS) + Show all the attributes of the entry. + + + + Edit a database. + + + + Could not change the database key. + + + + Database was not modified. + + + + Successfully edited the database. + + + + Loading the new key file failed: %1 + + + + Unset the password for the database. + + + + Unset the key file for the database. + + + + Cannot use %1 and %2 at the same time. + + + + Cannot remove all the keys from a database. + + + + Cannot remove password: The database does not have a password. + + + + Cannot remove file key: The database does not have a file key. + + + + Found unexpected Key type %1 Set the key file for the database. -This option is deprecated, use --set-key-file instead. +This options is deprecated, use --set-key-file instead. - Databases have been locked. - - - - Attestation not supported - - - - Credential is excluded - - - - Passkeys request canceled - - - - Invalid user verification - - - - Empty public key - - - - Invalid URL provided - - - - Passkeys - - - - AES initialization failed - - - - AES encrypt failed - - - - Failed to store in Linux Keyring - - - - Polkit returned an error: %1 - - - - Could not locate key in keyring - - - - Could not read key in keyring - - - - AES decrypt failed - - - - No Polkit authentication agent was available - - - - Polkit authorization failed - - - - No Quick Unlock provider is available - - - - Failed to init KeePassXC crypto. - - - - Failed to encrypt key data. - - - - Failed to get Windows Hello credential. - - - - Failed to decrypt key data. - - - - Origin is empty or not allowed - - - - Effective domain is not a valid domain - - - - Origin and RP ID do not match - - - - No supported algorithms were provided - - - - Wait for timer to expire - - - - Challenge is shorter than required minimum length - - - - user.id does not match the required length - - - - Favorite - Tag for favorite entries - - - - File does not exist. - - - - Cannot open file: %1 - - - - Cannot parse file: %1 at position %2 - - - - Failed to decrypt json file: %1 - - - - Invalid encKeyValidation field - - - - Invalid cipher list within encKeyValidation field - - - - Wrong password - - - - Invalid encrypted data field - - - - Invalid cipher list within encrypted data field - - - - Cannot initialize cipher - - - - Cannot decrypt data - - - - Bitwarden Import - - - - Archived - Tag for archived entries - - - - Invalid 1PUX file format: Not a valid ZIP file. - - - - Invalid 1PUX file format: Missing export.data - - - - 1Password Import - - - - Enter Shortcut - - - - Action - - - - Shortcuts - - - - Unknown passkeys error - - - - Invalid KDF iterations, cannot decrypt json file - - - - Unsupported format, ensure your Bitwarden export is password-protected - - - - Only PBKDF and Argon2 are supported, cannot decrypt json file - - - - Reset Shortcuts - - - - Double click an action to change its shortcut - - - - Filter... - - - - Shortcut Conflict - - - - Shortcut %1 conflicts with '%2'. Overwrite shortcut? - - - - Cannot generate valid passphrases because the wordlist is too short - - - - Encrypted files are not supported. - - - - Proton Pass Import - - - - Delete plugin data? - Odstrániť dáta zásuvného modulu? - - - Delete plugin data from Entry(s)? - - - - Passkey - - - - Format to use when exporting. Available choices are 'xml', 'csv' or 'html'. Defaults to 'xml'. - - - - start minimized to the system tray - - - - malformed string, possible unescaped delimiter - - - - missing closing delimiter - - - - %1, row: %2, column: %3 - - - - Tags + KeePassXC is not running. No open database to lock @@ -9224,39 +7967,20 @@ This option is deprecated, use --set-key-file instead. Interná chyba zlib: - - RemoteHandler - - Command `%1` did not finish in time. Process was killed. - - - - Failed to upload merged database. Command `%1` did not finish in time. Process was killed. - - - - Invalid download parameters provided. - - - - Command `%1` failed to download database. - - - - Invalid database pointer or upload parameters provided. - - - - Command `%1` exited with status code: %2 - - - - Failed to upload merged database. Command `%1` exited with status code: %2 - - - ReportsWidgetBrowserStatistics + + Exclude expired entries from the report + Vylúčiť vypršané položky z hlásenia + + + Show only entries which have URL set + + + + Show only entries which have browser settings in custom data + + Double-click entries to edit. @@ -9315,59 +8039,50 @@ This option is deprecated, use --set-key-file instead. Delete Entry(s)… - Odstrániť položku…Odstrániť položky…Odstrániť položky…Odstrániť položky… + Odstrániť položky… Exclude from reports Vylúčiť z hlásení - - Expire Entry(s)… - - - - Only show entries that have a URL - - - - Only show entries that have been explicitly allowed or denied - - - - Show expired entries - - - - (Expired) - - - - Delete plugin data from Entry(s)… - - ReportsWidgetHealthcheck - Show expired entries - + Exclude expired entries from the report + Vylúčiť vypršané položky z hlásenia - (Expired) - + Also show entries that have been excluded from reports + Zobraziť aj položky vylúčené z hlásení Hover over reason to show additional details. Double-click entries to edit. Prejdite myšou na príčinou, na zobrazenie dodatočných podrobností. Dvojklikom na položku ju upravíte. + + Bad + Password quality + Zlé + Bad — password must be changed Zlé — heslo treba zmeniť + + Poor + Password quality + Biedne + Poor — password should be changed Biedne — heslo by ste mali zmeniť + + Weak + Password quality + Slabé + Weak — consider changing the password Slabé — zvážte zmenu hesla @@ -9416,14 +8131,6 @@ This option is deprecated, use --set-key-file instead. Exclude from reports Vylúčiť z hlásení - - Expire Entry(s)… - - - - Show entries that have been excluded from reports - - ReportsWidgetHibp @@ -9519,77 +8226,6 @@ This option is deprecated, use --set-key-file instead. Exclude from reports Vylúčiť z hlásení - - Expire Entry(s)… - - - - - ReportsWidgetPasskeys - - Export - Export - - - Import - Importovať - - - List of entry URLs - - - - Title - Nadpis - - - Path - Cesta - - - Username - Používateľské meno - - - URLs - - - - Edit Entry… - Upraviť položku… - - - Delete Entry(s)… - Odstrániť položku…Odstrániť položky…Odstrániť položky…Odstrániť položky… - - - Relying Party - - - - Show expired entries - - - - (Expired) - - - - Export Confirmation - Potvrdenie exportu - - - The passkey file will be vulnerable to theft and unauthorized use, if left unsecured. Are you sure you want to continue? - - - - Please wait, list of entries with passkeys is being updated… - - - - No entries with passkeys. - - ReportsWidgetStatistics @@ -9764,14 +8400,6 @@ This option is deprecated, use --set-key-file instead. No agent running, cannot list identities. Nie je spustený agent, nemožno získať zoznam identít. - - Failed to remove all SSH identities from agent. - - - - All SSH identities removed from agent. - - SearchHelpWidget @@ -9838,10 +8466,6 @@ This option is deprecated, use --set-key-file instead. Search Help Hľadať v pomocníkovi - - Save Search - - Search (%1)… Search placeholder text, %1 is the keyboard shortcut @@ -9855,6 +8479,10 @@ This option is deprecated, use --set-key-file instead. Limit search to selected group Obmedziť hľadanie na zvolenú skupinu + + Save Search + + SettingsClientModel @@ -9916,10 +8544,26 @@ This option is deprecated, use --set-key-file instead. Confirm when passwords are retrieved by clients + + <html><head/><body><p><span style=" + font-family:'-apple-system','BlinkMacSystemFont','Segoe UI','Helvetica','Arial','sans-serif','Apple Color + Emoji','Segoe UI Emoji'; font-size:14px; color:#24292e; background-color:#ffffff;">This setting does + not override disabling recycle bin prompts</span></p></body></html> + + + Confirm when clients request entry deletion + + <html><head/><body><p>This improves compatibility with certain applications + which search for password without unlocking the database first.</p><p>But enabling this may also + crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a + different value set in applications.)</p></body></html> + + + Prompt to unlock database before searching @@ -9944,14 +8588,6 @@ This option is deprecated, use --set-key-file instead. Save current changes to activate the plugin and enable editing of this section. Uložte aktuálne zmeny na aktiváciu zásuvného modulu a zapnutie úpravy tejto sekcie. - - <html><head/><body><p>This setting does not override disabling recycle bin prompts </p></body></html> - - - - <html><head/><body><p>This improves compatibility with certain applications which search for password without unlocking the database first.</p><p>But enabling this may also crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a different value set in applications.) </p></body></html> - - SettingsWidgetKeeShare @@ -10060,7 +8696,11 @@ This option is deprecated, use --set-key-file instead. TagModel - Clear Search + Expired + + + + Weak Passwords @@ -10068,11 +8708,7 @@ This option is deprecated, use --set-key-file instead. - Expired - - - - Weak Passwords + Clear Search @@ -10252,6 +8888,26 @@ Napríklad: JBSWY3DPEHPK3PXP Start storing your passwords securely in a KeePassXC database Začnite ukladať svoje heslá bezpečne v databáze KeePassXC + + Create new database + Vytvoriť novú databázu + + + Open existing database + Otvoriť existujúcu databázu + + + Import from KeePass 1 + Importovať z KeePass 1 + + + Import from 1Password + Importovať z 1Password + + + Import from CSV + Importované z CSV + Recent databases Nedávne databázy @@ -10264,18 +8920,6 @@ Napríklad: JBSWY3DPEHPK3PXP Welcome to KeePassXC %1 Vitajte v KeePassXC %1 - - Create Database - - - - Open Database - - - - Import File - - WinUtils @@ -10292,8 +8936,31 @@ Napríklad: JBSWY3DPEHPK3PXP Nemožno registrovať globálnu klávesovú skratku + + WindowsHello + + Failed to init KeePassXC crypto. + + + + Failed to encrypt key data. + + + + Failed to get Windows Hello credential. + + + + Failed to decrypt key data. + + + YubiKey + + %1 No interface, slot %2 + + General: @@ -10305,6 +8972,14 @@ Napríklad: JBSWY3DPEHPK3PXP YubiKeyEditWidget + + Refresh hardware tokens + Obnoviť hardvérové tokeny + + + Refresh + Obnoviť + Hardware key slot selection Výber slotu hardvérového kľúča @@ -10337,6 +9012,10 @@ Napríklad: JBSWY3DPEHPK3PXP Challenge-Response set, click to change or remove + + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + + Detecting hardware keys… Detekcia hardvérových kľúčov… @@ -10345,25 +9024,28 @@ Napríklad: JBSWY3DPEHPK3PXP No hardware keys detected Nenájdené žiadne hardvérové kľúče + + + YubiKeyInterface - Refresh hardware keys - - - - <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed with <a href="https://keepassxc.org/docs/#faq-yubikey-howto">Challenge-Response</a>.</p> - - - - Hardware keys found, but no slots are configured - + %1 Invalid slot specified - %2 + %1 zadaný neplatný slot – %2 YubiKeyInterfacePCSC + + (PCSC) %1 [%2] Challenge-Response - Slot %3 + + The YubiKey PCSC interface has not been initialized. + + Hardware key is currently in use. + Hardvérový kľúč je práve používaný. + Could not find or access hardware key with serial number %1. Please present it to continue. @@ -10380,21 +9062,6 @@ Napríklad: JBSWY3DPEHPK3PXP Failed to complete a challenge-response, the PCSC error code was: %1 - - (NFC) %1 [%2] - Slot %3, %4 - YubiKey display fields - - - - Press - USB Challenge-Response Key interaction request - Stlačiť - - - Passive - USB Challenge-Response Key no interaction required - Pasívne - YubiKeyInterfaceUSB @@ -10402,6 +9069,14 @@ Napríklad: JBSWY3DPEHPK3PXP Unknown Neznámy + + (USB) %1 [%2] Configured Slot - %3 + + + + (USB) %1 [%2] Challenge-Response - Slot %3 - %4 + + Press USB Challenge-Response Key interaction request @@ -10416,6 +9091,10 @@ Napríklad: JBSWY3DPEHPK3PXP The YubiKey USB interface has not been initialized. + + Hardware key is currently in use. + Hardvérový kľúč je práve používaný. + Could not find hardware key with serial number %1. Please plug it in to continue. Nemožno nájsť hardvérový kľúč so sériovým číslom %1. Prosím, pripojte ho na pokračovanie. @@ -10432,15 +9111,5 @@ Napríklad: JBSWY3DPEHPK3PXP Failed to complete a challenge-response, the specific error was: %1 Zlyhalo dokončenie výzvy.odpovede, konkrétna chyba bola: %1 - - %1 [%2] - Slot %3 - YubiKey NEO display fields - - - - %1 [%2] - Slot %3, %4 - YubiKey display fields - - \ No newline at end of file diff --git a/share/translations/keepassxc_sl.ts b/share/translations/keepassxc_sl.ts index 1c95d7ed2..2bb3342b1 100644 --- a/share/translations/keepassxc_sl.ts +++ b/share/translations/keepassxc_sl.ts @@ -150,6 +150,10 @@ SSH Agent connection is working! Povezava s SSH agentom deluje! + + Use both agents + + ApplicationSettingsWidget @@ -221,6 +225,10 @@ Select backup storage directory + + This setting cannot be enabled when minimize on unlock is enabled. + + ApplicationSettingsWidgetGeneral @@ -489,6 +497,14 @@ Remember last typed entry for: + + recent files + + + + Show passwords in color + + ApplicationSettingsWidgetSecurity @@ -638,6 +654,10 @@ Invalid placeholder: %1 + + Entry does not have attribute for PICKCHARS: %1 + + AutoTypeAssociationsModel @@ -1407,10 +1427,6 @@ Varnostna kopija baze se nahaja na %2 Key File: Datoteka s ključi: - - <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information…</p> - - Key file help @@ -1423,11 +1439,6 @@ Varnostna kopija baze se nahaja na %2 Hardware Key: - - <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> -<p>Click for more information…</p> - - Hardware key help @@ -1562,6 +1573,15 @@ If you do not have a key file, please leave the field empty. Select hardware key… + + <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information…</p> + + + + <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +<p>Click for more information…</p> + + DatabaseSettingWidgetMetaData @@ -2202,13 +2222,21 @@ This is definitely a bug, please report it to the developers. Database tab name modifier %1 [Zaklenjeno] + + Export database to XML file + + + + XML file + + + + Writing the XML file failed + + DatabaseWidget - - Database Tags - - Searching… @@ -2373,6 +2401,22 @@ Disable safe saves and try again? Entries expiring within %1 day(s) + + Searches and Tags + + + + Enter a unique name or overwrite an existing search from the list: + + + + Save + Shrani + + + Save Search + + EditEntryWidget @@ -2510,10 +2554,6 @@ Would you like to correct it? Hide Skrij - - Tomorrow - Jutri - %n week(s) %n ted(ov)%n ted(ov)%n ted(ov)%n teden(ov) @@ -2526,6 +2566,10 @@ Would you like to correct it? %n year(s) %n let%n let%n let%n let + + %n hour(s) + + EditEntryWidgetAdvanced @@ -3041,6 +3085,14 @@ Would you like to correct it? Do not use HTTP Auth toggle for this and sub groups + + Omit WWW subdomain from matching: + + + + Omit WWW subdomain from matching toggle for this and sub groups + + EditGroupWidgetKeeShare @@ -3623,6 +3675,10 @@ Error: %1 Auto-Type Samodejno tipkanje + + Tags + + EntryModel @@ -3830,6 +3886,10 @@ Error: %1 Disabled Onemogočen + + Double click to copy value + + EntryURLModel @@ -5319,6 +5379,30 @@ We recommend you use the AppImage available on our downloads page. You must restart the application to apply this setting. Would you like to restart now? Če želite uporabiti to nastavitev, morate znova zagnati aplikacijo. Ali želite znova zagnati zdaj? + + Tags + + + + No Tags + + + + %1 Entry(s) + + + + Copy Password and TOTP + + + + &XML File… + + + + XML File… + + ManageDatabase @@ -5689,29 +5773,6 @@ We recommend you use the AppImage available on our downloads page. - - PasswordEdit - - Passwords do not match - - - - Passwords match so far - - - - Toggle Password (%1) - - - - Generate Password (%1) - - - - Warning: Caps Lock enabled! - - - PasswordEditWidget @@ -5890,10 +5951,6 @@ We recommend you use the AppImage available on our downloads page. Also choose from: Izberi tudi med: - - Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" - - Exclude look-alike characters Izključi podobne znake @@ -6043,6 +6100,57 @@ Do you want to overwrite it? Password quality Odlična + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + + + + + PasswordWidget + + Passwords do not match + + + + Passwords match so far + + + + Toggle Password (%1) + + + + Generate Password (%1) + + + + Warning: Caps Lock enabled! + + + + Quality: %1 + + + + Poor + Password quality + Slabo + + + Weak + Password quality + Šibko + + + Good + Password quality + Dobra + + + Excellent + Password quality + Odlična + PickcharsDialog @@ -7171,10 +7279,6 @@ Please consider generating a new key file. Invalid YubiKey serial %1 - - Please present or touch your YubiKey to continue… - - Enter password to encrypt database (optional): Vnesite geslo za šifriranje baze (neobvezno): @@ -7652,6 +7756,67 @@ Jedro: %3 %4 Failed to sign challenge using Windows Hello. + + Please present or touch your YubiKey to continue. + + + + Show all the attributes of the entry. + + + + Edit a database. + + + + Could not change the database key. + + + + Database was not modified. + + + + Successfully edited the database. + + + + Loading the new key file failed: %1 + + + + Unset the password for the database. + + + + Unset the key file for the database. + + + + Cannot use %1 and %2 at the same time. + + + + Cannot remove all the keys from a database. + + + + Cannot remove password: The database does not have a password. + + + + Cannot remove file key: The database does not have a file key. + + + + Found unexpected Key type %1 + + + + Set the key file for the database. +This options is deprecated, use --set-key-file instead. + + QtIOCompressor @@ -8199,6 +8364,10 @@ Jedro: %3 %4 Limit search to selected group + + Save Search + + SettingsClientModel @@ -8411,10 +8580,6 @@ Jedro: %3 %4 TagModel - - All - - Expired @@ -8423,6 +8588,33 @@ Jedro: %3 %4 Weak Passwords + + All Entries + + + + Clear Search + + + + + TagView + + Remove Search + + + + Remove Tag + + + + Confirm Remove Tag + + + + Remove tag "%1" from all entries in this database? + + TotpDialog diff --git a/share/translations/keepassxc_sq.ts b/share/translations/keepassxc_sq.ts index 41f7e88b9..513c0bc3a 100644 --- a/share/translations/keepassxc_sq.ts +++ b/share/translations/keepassxc_sq.ts @@ -80,10 +80,6 @@ Details Hollësi - - Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. - Vendimi juaj do të mbahet mend për kohëzgjatjen, teksa xhirojnë që të dy, klienti DHE KeePassXC-ja. - Remember Mbaje mend @@ -92,6 +88,10 @@ Allow Selected Lejo të Përzgjedhurin + + Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. + Vendimi juaj do të mbhet mend për kohëzgjatjen, teksa xhirojnë që të dy, klienti DHE KeePassXC-ja. + Deny All && Future Moho Krejt të && Ardhmet @@ -122,10 +122,6 @@ Use OpenSSH Përdor OpenSSH - - Use both agents - Përdoru të dy agjentët - SSH_AUTH_SOCK override Anashkalim SSH_AUTH_SOCK @@ -148,12 +144,16 @@ No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. - S’ka kanal Agjenti SSH të passhëm. Ose sigurohuni se ndryshorja SSH_AUTH_SOCK e mjedisit ekziston, ose caktoni për të një anashkalim. + SSH Agent connection is working! Lidhja e Agjentit SSH funksionon! + + Use both agents + Përdoru të dy agjentët + ApplicationSettingsWidget @@ -169,10 +169,6 @@ Security Siguri - - This setting cannot be enabled when minimize on unlock is enabled. - Ky rregullim s’mund të aktivizohet, kur është aktivizuar “Minimizoje gjatë shkyçjes”. - Access error for config file %1 Gabim hyrjeje në kartelë formësimi %1 @@ -195,7 +191,7 @@ Follow style - Ndiq stilin + Monochrome @@ -207,7 +203,7 @@ Monochrome (dark) - Njëngjyrësh (i errët) + Njëngjyrës (i errët) Colorful @@ -217,49 +213,21 @@ You must restart the application to set the new language. Would you like to restart now? Që të caktoni gjuhën e re, duhet të rinisni aplikacionin. Do të donit të riniset tani? + + Reset Settings? + Të Rikthehen Rregullimet Te Parazgjedhjet? + + + Are you sure you want to reset all general and security settings to default? + Jeni i sigurt se doni të rikthehen te parazgjedhjet krejt rregullimet e përgjithshme dhe ato të sigurisë? + Select backup storage directory Përzgjidhni drejtori depozitë kopjeruajtjesh - Confirm Reset - Ripohoni Kthimin te Parazgjedhja - - - Are you sure you want to reset all settings to default? - Jeni i sigurt se doni të kthehen krejt rregullimet te parazgedhjet? - - - Import KeePassXC Settings - Importo Rregullime KeePassXC - - - Failed to import settings from %1, not a valid settings file. - S’u arrit të importoheshin rregullime nga %1, s’është kartelë rregullimesh e vlefshme. - - - Export KeePassXC Settings - Eksporto Rregullime KeePassXC - - - Small - - - - Normal - - - - Medium - - - - Large - - - - Custom - + This setting cannot be enabled when minimize on unlock is enabled. + Ky rregullim s’mund të aktivizohet, kur është aktivizuar “Minimizo gjatë shkyçjes”. @@ -290,11 +258,7 @@ Remember previously used databases - Mbaj mend baza të dhënash të mëparshme - - - recent files - kartela së fundi + Mba mend baza të dhënash të mëparshme Load previously open databases on startup @@ -302,7 +266,7 @@ Remember database key files and security dongles - Mbaj mend kartela kyçesh baze të dhënash dhe marifetesh sigurie + Check for updates at application startup once per week @@ -312,6 +276,25 @@ Include beta releases when checking for updates Kur kontrollohet për përditësime, përfshi hedhje beta në qarkullim + + On database unlock, show entries that + Gjatë shkyçjeje baze të dhënash, shfaq zëra që + + + have expired + On database unlock, show entries that... + kanë skaduar + + + days + On database unlock, show entries that will expire within %1 days + ditësh + + + will expire within + On database unlock, show entries that... + do të skadojnë brenda + File Management Administrim Kartelash @@ -336,10 +319,22 @@ Backup database file before saving Kopjeruani kartelën e bazës tuaj të të dhënave, përpara ruajtjes + + Backup destination + Vendmbërritje kopjeruajtjeje + + + Specifies the database backup file location. Occurrences of "{DB_FILENAME}" are replaced with the filename of the saved database without extension. {TIME:<format>} is replaced with the backup time, see https://doc.qt.io/qt-5/qdatetime.html#toString. <format> defaults to format string "dd_MM_yyyy_hh-mm-ss". + Përcakton vendndodhje kartele kopjeruajtjeje baze të dhënash. Hasje të “{DB_FILENAME}” zëvendësohen me emrin e kartelës së bazës së ruajtur të të dhënave, pa zgjatimin. {TIME:<format>} zëvendësohet me kohën e bërjes së kopjeruajtjes, shihni https://doc.qt.io/qt-5/qdatetime.html#toString. <format> parazgjedhje për formatim vargu “dd_MM_yyyy_hh-mm-ss”. + {DB_FILENAME}.old.kdbx {DB_FILENAME}.old.kdbx + + Choose... + Zgjidhni… + Use alternative saving method (may solve problems with Dropbox, Google Drive, GVFS, etc.) Përdorni metodë alternative ruajtje (mund të zgjidhë probleme me Dropbox, Google Drive, GVFS, etj.) @@ -374,7 +369,7 @@ Drop to background - Lëre në sfond + Favicon download timeout: @@ -382,7 +377,7 @@ Website icon download timeout in seconds - Mbarim kohe shkarkimi ikonash sajtesh, në sekonda + sec @@ -417,10 +412,6 @@ Toolbar button style: Stil butonash paneli: - - Show passwords in color - Shfaqi fjalëkalimet me ngjyra - Use monospaced font for notes Për shënime përdor shkronja Monospace @@ -455,11 +446,11 @@ Use entry title to match windows for global Auto-Type - Përdor titull zëri për kërkim dritaresh me përputhjeje, për Vetë-shtypje globale + Use entry URL to match windows for global Auto-Type - Përdor URL zëri për kërkim dritaresh me përputhjeje, për Vetë-shtypje globale + Always ask before performing Auto-Type @@ -507,69 +498,12 @@ Mbaje mend zërin e fundit të shtypur për: - On database unlock, show entries that will expire within - Kur shkyçet bazë të dhënash, shfaq zëra që do të skadojnë brenda + recent files + kartela së fundi - On database unlock, show entries that will expire within - Kur shkyçet bazë të dhënash, shfaq zëra që do të skadojnë brenda - - - days - number of days warning for password expiration - ditësh - - - Destination format: - Format vendmbërritje: - - - <html><head/><body><p><span style=" font-weight:600;">{DB_FILENAME}</span> is replaced with the filename of the saved database without extension</p><p><span style=" font-weight:600;">{TIME:&lt;format&gt;}</span> is replaced with the specified time format (default: dd_MM_yyyy_hh-mm-ss)</p><p>See the User Guide for more details</p></body></html> - <html><head/><body><p><span style=" font-weight:600;">{DB_FILENAME}</span> zëvendësohet me emrin e kartelës të bazës së të dhënave të ruajtur, pa zgjatim</p><p><span style=" font-weight:600;">{TIME:&lt;format&gt;}</span> zëvendësohet me formatin e përcaktuar të kohës (parazgjedhje: dd_MM_yyyy_hh-mm-ss)</p><p>Për më tepër hollësi, shihni Udhërrëfyes Përdoruesi</p></body></html> - - - Choose folder... - Zgjidhni dosje… - - - Show confirmation before moving entries to recycle bin - Shfaq hap ripohimi para kalimit të zërave te koshi i riciklimeve - - - Copy data on double clicking field in entry view - Me dyklikim të një fushe, te pamja e zërit, kopjo të dhënat - - - Show toolbar - Shfaq panelin - - - Show the menu bar by pressing the Alt key - Shfaq shtyllë menuje, kur shtypet tasti Alt - - - Show menubar - Shfaq shtyllë menuje - - - Import settings… - Importoni rregullime… - - - Export settings… - Eksportoni rregullime… - - - Open browser on double clicking URL field in entry view - Me dyklikim të fushës së URL-së, te pamja e zërit, hap shfletuesin - - - Font size: - - - - Font size selection - + Show passwords in color + Shfaqi fjalëkalimet me ngjyra @@ -580,7 +514,7 @@ Database lock timeout seconds - Sekonda mbarimi kohe kyçjeje baze të dhënash + sec @@ -602,7 +536,7 @@ Clipboard clear seconds - Sekonda spastrimi baze të dhënash + Lock databases after inactivity of @@ -614,19 +548,23 @@ Enable database quick unlock (Touch ID / Windows Hello) - Aktivizo shkyçje të shpejtë baze të dhënash (Touch ID / Windows Hello) + Lock databases when session is locked or lid is closed - Kyçi bazat e të dhënave, kur kyçet sesioni, ose mbyllet kapaku i portativit + Lock databases after minimizing the window Kyçi bazat e të dhënave pas minimizimit të dritares + + Require password repeat when it is visible + + Hide passwords when editing them - Fshihi fjalëkalimet, kur përpunohen + Use placeholder for empty password fields @@ -634,7 +572,19 @@ Hide passwords in the entry preview panel - Fshihi fjalëkalimet, te paneli i paraparjes së zërave + + + + Hide entry notes by default + Si parazgjedhje, fshihi shënimet mbi zëra + + + Move entries to recycle bin without confirmation + + + + Enable double click to copy the username/password entry columns + Privacy @@ -646,26 +596,14 @@ Hide TOTP in the entry preview panel - Fshih TOTP, te paneli i paraparjes së zërave - - - Lock databases when switching user - Kyçi bazat e të dhënave, kur ndërrohet përdorues - - - Lock Options - Mundësi Kyçjeje - - - Hide notes in the entry preview panel - Fshihi shënimet, te paneli i paraparjes së zërave + AutoType The requested Auto-Type sequence cannot be used due to an error: - Sekuenca e kërkuar për Vetë-shtypje s’mund të përdoret, për shkak të një gabimi: + Auto-Type Error @@ -677,40 +615,53 @@ KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. - KeePassXC-ja lyp leje Përdorimi Nga Persona Me Aftësi të Kufizuara, që të mund të kryejë Vetë-Shtypje të nivelit elementar. Nëse e keni akorduar tashmë lejen, mund t’ju duhet të rinisni KeePassXC-në. + KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. - KeePassXC-ja lyp leje Përdorimi Nga Persona Me Aftësi të Kufizuara dhe Regjistruesi Ekrani, që të mund të kryejë Vetë-Shtypje globale. Regjistrimi i Ekranit është i nevojshëm për të përdorur titullin e dritares për të gjetur zëra. Nëse e keni akorduar tashmë lejen, mund t’ju duhet të rinisni KeePassXC-në. + Invalid entry provided - U dha zë i pavlefshëm + Bracket imbalance detected, found extra { or } - U pikas kllapë e pambyllur, u gjet { ose } ekstra + Too many repetitions detected, max is %1: %2 - U pikasën shumë përsëritje, maksimumi është %1: %2 + Very slow key press detected, max is %1: %2 - U pikas shtypje shumë e ngadaltë tastesh, maksimumi është %1: %2 + Very long delay detected, max is %1: %2 - U pikas shtypje shumë e gjatë tastesh, maksimumi është %1: %2 + - Entry does not have attribute for PICKCHARS: %1 - Zëri s’ka atribut për PICKCHARS: %1 + Invalid conversion type: %1 + + + + Invalid conversion syntax: %1 + + + + Invalid regular expression syntax %1 +%2 + Invalid placeholder: %1 Vendmbajtëse e pavlefshme: %1 + + Entry does not have attribute for PICKCHARS: %1 + Zëri s’ka atribut për PICKCHARS: %1 + AutoTypeAssociationsModel @@ -752,32 +703,32 @@ AutoTypePlatformX11 + + Trying to send invalid keysym. + + Sequence aborted: Caps Lock is on - Sekuenca u ndërpre: Caps Lock është aktiv + Sequence aborted: Modifier keys held by user - Sekuenca u ndërpre: Taste ndryshues shtypur nga përdoruesi + Unable to get valid keycode for key: - S’arrihet të merret kod i vlefshëm tasti për tastin: - - - Trying to send invalid keyboard symbol. - Po provohet të dërgohet simbol i pavlefshëm tastiere. + AutoTypeSelectDialog Auto-Type - KeePassXC - Vetë-Shtypje - KeePassXC + Double click a row to perform Auto-Type or find an entry using the search: - Dyklikoni mbi një rresht, që të kryhet Vetë-Shtypje, ose gjeni një zë duke përdorur kërkimin: + <p>You can use advanced search queries to find any entry in your open databases. The following shortcuts are useful:<br/> @@ -786,12 +737,7 @@ Ctrl+1 - Type username<br/> Ctrl+2 - Type password<br/> Ctrl+3 - Type TOTP<br/> Ctrl+4 - Use Virtual Keyboard (Windows Only)</p> - <p>Mund të përdorni kërkim të thelluar, për të gjetur çfarëdo zëri në bazat tuaja të hapura të të dhënave. Janë të dobishme shkurtoret vijuese:<br/> -Ctrl+F - Hap/Mbyll kërkim në bazë të dhënash<br/> -Ctrl+1 - Shtypni emër përdoruesi<br/> -Ctrl+2 - Shtypni fjalëkalim<br/> -Ctrl+3 - Shtypni TOTP<br/> -Ctrl+4 - Përdorni Tastierë Virtuale (Vetëm në Windows)</p> + Search all open databases @@ -811,15 +757,15 @@ Ctrl+4 - Përdorni Tastierë Virtuale (Vetëm në Windows)</p> Type {USERNAME} - Shtypni {EMËR_PËRDORUESI} + Type {PASSWORD} - Shtypni {FJALËKALIM} + Type {TOTP} - Shtypni {TOTP} + Copy Username @@ -842,15 +788,15 @@ Ctrl+4 - Përdorni Tastierë Virtuale (Vetëm në Windows)</p>BrowserAccessControlDialog KeePassXC - Browser Access Request - KeePassXC - Kërkesë Për Hyrje Nga Shfletues + %1 is requesting access to the following entries: - %1 po kërkon të hyjë te zërat vijuese: + Remember access to checked entries - Mbaj mend hyrje te zërat e me shenjë + Remember @@ -872,13 +818,13 @@ Ctrl+4 - Përdorni Tastierë Virtuale (Vetëm në Windows)</p>Disable for this site Çaktivizoje për këtë sajt - - Undo - Zhbëje - BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + + Ok Ok @@ -893,81 +839,22 @@ Please select the correct database for saving credentials. Keni të hapura disa baza të dhënash. Ju lutemi, përzgjidhni bazën e saktë të të dhënave për ruajtje kredencialesh. - - KeePassXC - Select Database - KeePassXC - Përzgjidhni Bazë të Dhënash - - - - BrowserPasskeysConfirmationDialog - - Cancel - Anuloje - - - Update - Përditësoje - - - Authenticate - Bëni mirëfilltësimin - - - Register new - Regjistroni të ri - - - Register - Regjistroje - - - Timeout in <b>%n</b> seconds... - Mbarim kohe në <b>%n</b> sekondë…Mbarim kohe në <b>%n</b> sekonda… - - - Relying Party: %1 - - - - Username: %1 - Emër përdoruesi: %1 - - - KeePassXC - Passkey credentials - KeePassXC - Kredenciale kyçkalimi - - - Add to existing entry - Shtoje te zë ekzistues - - - Existing passkey found. -Do you want to register a new passkey for: - U gjet kyçkalim ekzistues. -Doni të regjistrohet një kyçkalim i ri për: - - - Select the existing passkey and press Update to replace it. - Përzgjidhni kyçkalimin ekzistues dhe shtypni Përditësoje, që të zëvendësohet. - - - Authenticate passkey credentials for: - Bëj mirëfilltësimin e kredencialeve të kodkalimit për: - - - Do you want to register a passkey for: - Doni të regjistrohet një kyçkalim për: - BrowserService + + KeePassXC: Create a new group + KeePassXC: Krijoni një grup të ri + A request for creating a new group "%1" has been received. Do you want to create this group? - Është marrë një kërkesë për krijimin e një grupi të ri “%1”. -Doni të krijohet ky grup? - + + + + KeePassXC: New key association request + You have received an association request for the following database: @@ -975,87 +862,82 @@ Doni të krijohet ky grup? Give the connection a unique name or ID, for example: chrome-laptop. - Keni marrë një kërkesë përshoqërimi për bazën vijuese të të dhënave: -%1 - -Jepini lidhje një emër ose ID unike, për shembull: -chrome-laptop. + Save and allow access Ruaje dhe lejo hyrje + + KeePassXC: Overwrite existing key? + KeePassXC: Të mbishkruhet kyçi ekzistues? + A shared encryption key with the name "%1" already exists. Do you want to overwrite it? Ka tashmë një kyç të përbashkët fshehtëzimi me emrin “%1”. Doni të mbishkruhet? + + KeePassXC: Update Entry + KeePassXC: Përditëso Zërin + Do you want to update the information in %1 - %2? Doni të përditësohet informacioni në %1 - %2 kb? + + KeePassXC: Delete entry + KeePassXC: Fshije zërin + A request for deleting entry "%1" has been received. Do you want to delete the entry? - Është marrë një kërkesë për fshirjen e zërit “%1”. -Doni të fshihet zëri? - + - %1 (Passkey) - %1 (Kyçkalim) + Converting attributes to custom data… + Po shndërrohen atribute në të dhëna vetjake… - KeePassXC - Create a new group - KeePassXC - Krijoni një grup të ri + Abort + Ndërprite - Disable - Çaktivizoje + KeePassXC: Converted KeePassHTTP attributes + - KeePassXC - Overwrite existing key? - KeePassXC - Të mbishkruhet kyçi ekzistues? + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + + + + Successfully moved %n keys to custom data. + - KeePassXC - Update Entry - KeePassXC - Përditësoje Zërin + KeePassXC: No entry with KeePassHTTP attributes found! + - KeePassXC - Delete entry - KeePassXC - Fshije zërin + The active database does not contain an entry with KeePassHTTP attributes. + - KeePassXC - New key association request - KeePassXC - Kërkesë për përshoqërim të ri kyçi + Don't show this warning again + Mos e shfaq më këtë sinjalizim - Passkey - Kyçkalim + KeePassXC: Legacy browser integration settings detected + - KeePassXC - Passkey credentials - KeePassXC - Kredenciale kyçkalimi - - - Register a new passkey to this entry: - Regjistroni një kyçkalim të ri për këtë zë: - - - KeePassXC - Update passkey - KeePassXC - Përditësoni kyçkalim - - - Entry already has a passkey. -Do you want to overwrite the passkey in %1 - %2? - Zëri ka tashmë një kyçkalim. -Doni të mbishkruhet kyçkalimi te %1 - %2? - - - Register - Regjistroje + 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? + @@ -1066,7 +948,7 @@ Doni të mbishkruhet kyçkalimi te %1 - %2? This is required for accessing your databases with KeePassXC-Browser - Kjo është e domosdoshme për të hyrë në bazat tuaja të të dhënave me Shfletuesin KeePassXC + Enable browser integration @@ -1076,9 +958,13 @@ Doni të mbishkruhet kyçkalimi te %1 - %2? General Të përgjithshme + + Browsers installed as snaps are currently not supported. + + Enable integration for these browsers: - Aktivizo integrim për këta shfletues: + Vivaldi @@ -1115,40 +1001,40 @@ Doni të mbishkruhet kyçkalimi te %1 - %2? Request to unlock the database if it is locked - Kërko të shkyçet baza e të dhënave, nëse është e kyçur + Only entries with the same scheme (http://, https://, …) are returned. - Sillen vetëm zëra me të njëjtën skemë (http://, https://, …). + Match URL scheme (e.g., https://example.com) - Kërko përkim me skemë URL-je (p.sh., https://example.com) + Only returns the best matches for a specific URL instead of all entries for the whole domain. - Sillen vetëm përkimet më të mira për një URL të dhënë, në vend se krejt zërat për përkatësinë si e tërë. + Return only best-matching credentials - Sill vetëm kredencialet që përputhen më mirë + Returns expired credentials. String [expired] is added to the title. - Sjell kredenciale të skaduara. Te titulli shtohet vargu [expired]. + Allow returning expired credentials - Lejo sjellje kredencialesh të skaduara + All databases connected to the extension will return matching credentials. - Krejt bazat e të dhënave të lidhura me zgjerimin do të sjellin kredenciale me përkim. + Search in all opened databases for matching credentials Credentials mean login data requested via browser extension - Kërko në krejt bazat e hapura të të dhënave për kredenciale me përkim + Advanced @@ -1157,33 +1043,33 @@ Doni të mbishkruhet kyçkalimi te %1 - %2? Never ask before accessing credentials Credentials mean login data requested via browser extension - Mos pyet kurrë para hyrjes në kredenciale + Never ask before updating credentials Credentials mean login data requested via browser extension - Mos pyet kurrë para përditësimit të kredencialeve + Do not ask permission for HTTP Basic Auth An extra HTTP Basic Auth setting - Mos kërko leje për Mirëfillësim HTTP Elementar + Automatically creating or updating string fields is not supported. - Nuk mbulohet krijim apo përditësim i automatizuar i fushave të vargjeve. + Return advanced string fields which start with "KPH: " - Sill fusha të thelluara vargjesh që fillojnë me “KPH: ” + Don't display the popup suggesting migration of legacy KeePassHTTP settings. - Mos e shfaq flluskën që sugjeron migrim të rregullimeve të dikurshme për KeePassHTTP. + Do not prompt for KeePassHTTP settings migration. - Mos pyet për migrim rregullimesh për KeePassHTTP. + Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. @@ -1195,20 +1081,20 @@ Doni të mbishkruhet kyçkalimi te %1 - %2? Use a custom proxy location if you installed a proxy manually. - Përdorni një vendndodhje vetjake ndërmjetësi, nëse instaluat dorazi një ndërmjetës. + Use a custom proxy location: Meant is the proxy for KeePassXC-Browser - Përdor një vendndodhje vetjake ndërmjetësi: + Custom proxy location field - Fushë vendndodhjeje vetjake ndërmjetësi + Browser for custom proxy file - Shfletues për kartelë vetjake ndërmjetësi + Browse… @@ -1217,7 +1103,7 @@ Doni të mbishkruhet kyçkalimi te %1 - %2? Use a custom browser configuration location: - Përdor një vendndodhje vetjake formësimi shfletuesi: + Browser type: @@ -1233,19 +1119,39 @@ Doni të mbishkruhet kyçkalimi te %1 - %2? Custom browser location field - Fushë vendndodhjeje vetjake shfletuesi + Browse for custom browser path - Shfletoni për shteg shfletuesi vetjak + Custom extension ID: - ID zgjerimi vetjak: + Custom extension ID - ID zgjerimi vetjak + + + + Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 + + + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 + + + + Please see special instructions for browser extension use below + + + + <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. + + + + <b>Warning:</b> The following options can be dangerous! + Executable Files @@ -1257,52 +1163,12 @@ Doni të mbishkruhet kyçkalimi te %1 - %2? Select custom proxy location - Përzgjidhni vendndodhje ndërmjetësi vetjak + Select native messaging host folder location - - Allow keepassxc-proxy to list all entries with their title, URL and UUID in connected databases. - - - - Allow limited access to all entries in connected databases (ignores site access restrictions) - - - - <b>Warning:</b> Only adjust these settings if necessary. - <b>Kujdes:</b> Këto rregullime përimtojini vetëm nëse është e nevojshme. - - - The custom proxy location does not exist. - Vendndodhja e ndërmjetësit vetjak s’ekziston. - - - <b>Error:</b> The custom proxy location does not exist. Correct this in the advanced settings tab. - <b>Gabim:</b> Vendndodhja e ndërmjetësit vetjak s’ekziston. Ndreqeni këtë te skeda e rregullimeve të mëtejshme. - - - <b>Error:</b> The installed proxy executable is missing from the expected location: %1<br/>Please set a custom proxy location in the advanced settings or reinstall the application. - <b>Gabim:</b> I ekzekutueshmi për ndërmjetësin e instaluar mungon te vendndodhja e pritur: %1<br/>Ju lutemi, caktoni një vendndodhje ndërmjetësi vetjak, te rregullimet e mëtejshme, ose riinstaloni aplikacionin. - - - Allows using insecure http://localhost with passkeys for testing purposes. - Lejon përdorim http://localhost jo të siguruar me kodkalime, për qëllime testimi. - - - Allow using localhost with passkeys - Lejo përdorim localhost-i me kodkalime - - - KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. - Që të funksionojë integrimi i shfletuesit, është i nevojshëm Shfletuesi KeePassXC. <br />Shkarkojeni për %1 dhe %2 dhe %3. - - - Browsers installed using Snap or Flatpak are not supported with exception to Firefox installed using Snap. - - CloneDialog @@ -1312,7 +1178,7 @@ Doni të mbishkruhet kyçkalimi te %1 - %2? Append ' - Clone' to title - Shto “ - Clone” te titulli + ShtoAppend ' - Clone' te titulli Replace username and password with references @@ -1325,6 +1191,14 @@ Doni të mbishkruhet kyçkalimi te %1 - %2? CsvImportWidget + + Import CSV fields + Importoni fusha CSV + + + filename + emër kartele + size, rows, columns madhësi, rreshta, shtylla @@ -1403,11 +1277,11 @@ Doni të mbishkruhet kyçkalimi te %1 - %2? Header lines skipped - U anashkaluan rreshta kryesh + Number of header lines to discard - Numër rreshtash kryesh për t’u anashkaluar + First line has field names @@ -1427,49 +1301,56 @@ Doni të mbishkruhet kyçkalimi te %1 - %2? Not Present - Jo i Pranishëm + Column %1 Shtylla %1 + + Imported from CSV file + Importuar prej kartele CSV + + + Original data: + Të dhëna origjinale: + + + Error(s) detected in CSV file! + Gabim(e) i pikasur në kartelë CSV! + [%n more message(s) skipped] [%n mesazh tjetër i anashkaluar][%n mesazhe të tjerë të anashkaluar] - Failed to parse CSV file: %1 - S’u arrit të analizohej kartelë CSV: %1 + Error + Gabim - Imported from CSV file: %1 - Importuar nga kartelë CSV: %1 - - - No Title Selected - S’u Përzgjodh Titull - - - No title column was selected, entries will be hard to tell apart. -Are you sure you want to import? - S’u përzgjodh shtyllë titujsh, do të jetë e vështirë të dallohen zërat njëri nga tjetri. -Jeni i sigurt se doni të importohet? - - - Tags - Etiketa + CSV import: writer has errors: +%1 + Importim CSV: shkrimi ka gabime: +%1 CsvParserModel + + %1, %2, %3 + file info: bytes, rows, columns + %1, %2, %3 + + + %n byte(s) + %n bajt(e)%n bajt(e) + %n row(s) - CSV row count - %n rresht%n rreshta + %n rresht(a)%n rresht(a) %n column(s) - CSV column count %n shtyllë%n shtylla @@ -1494,7 +1375,7 @@ Jeni i sigurt se doni të importohet? Could not save, database does not point to a valid file. - S’u ruajt dot, baza e të dhënave s’tregon ndonjë kartelë të vlefshme. + Database save is already in progress. @@ -1502,33 +1383,24 @@ Jeni i sigurt se doni të importohet? Could not save, database has not been initialized! - S’u ruajt dot, baza e të dhënave s’është gatitur! + Database file has unmerged changes. - Kartela e bazës së të dhënave ka ndryshime të papërziera. + %1 Backup database located at %2 - %1 -Kopjeruaj bazë të dhënash që gjendet te %2 + Key not transformed. This is a bug, please report it to the developers. - Kyçi s’u shndërrua. Kjo është një e metë, ju lutemi, njoftojuani zhvilluesve. + Recycle Bin - Kosh Riciklimesh - - - Database file read error. - - - - No file path was provided. - + Kosh Hedhurinash @@ -1552,9 +1424,29 @@ Kopjeruaj bazë të dhënash që gjendet te %2 Password field Fushë fjalëkalimi + + Enter Additional Credentials (if any): + Jepni Kredenciale Shtesë (në pastë): + + + Key File: + Kartelë Kyçi: + + + Key file help + Ndihmë për kartela kyçesh + Hardware key slot selection - Përzgjedhje vendi kyçi hardware + + + + Hardware Key: + Kyç Hardware: + + + Hardware key help + Ndihmë për kyçe hardware Key file to unlock the database @@ -1568,6 +1460,14 @@ Kopjeruaj bazë të dhënash që gjendet te %2 Browse… Shfletoni… + + Refresh hardware tokens + + + + Refresh + Rifreskoje + Unlock Database Shkyçe Bazën e të Dhënave @@ -1582,7 +1482,7 @@ Kopjeruaj bazë të dhënash që gjendet te %2 Please present or touch your YubiKey to continue… - Ju lutemi, që të vazhdohet, paraqitni, ose prekni YubiKey-në tuaj… + Database Version Mismatch @@ -1596,14 +1496,7 @@ You can try to open it anyway, but it may be incomplete and saving any changes may incur data loss. We recommend you update your KeePassXC installation. - Gjasat janë që baza e të dhënave që po provoni të hapni -të qe krijuar nga një version më i ri i KeePassXC-së. - -Mund të provoni ta hapni, sido që të jetë, por mund të -jetë e paplotë dhe ruajtja e çfarëdo ndryshimesh mund -të sjellë humbje të dhënash. - -Rekomandojmë të përditësoni instalimin tuaj të KeePassXC-së. + Open database anyway @@ -1615,25 +1508,26 @@ Rekomandojmë të përditësoni instalimin tuaj të KeePassXC-së. Unlock failed and no password given - Shkyçja dështoi dhe s’u dha fjalëkalim + Unlocking the database failed and you did not enter a password. Do you want to retry with an "empty" password instead? To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. - Shkyçja e bazës së të dhënave dështoi dhe s’dhatë fjalëkalim. -Në vend të kësaj, doni të riprovohet me një fjalëkalim “të zbrazët”? - -Që të pengoni shfaqjen e këtij gabimi, duhet të kaloni te “Rregullime baze të dhënash / Siguri” dhe të ricaktoni fjalëkalimin tuaj. + Retry with empty password Riprovo me fjalëkalim të zbrazët + + Failed to authenticate with Touch ID + S’u arrit të bëhej mirëfilltësim me Touch ID + Failed to open key file: %1 - S’u arrit të hapej kartelë kyç: %1 + S’u arrit të hapej kartelë kyçesh: %1 Old key file format @@ -1641,7 +1535,7 @@ Që të pengoni shfaqjen e këtij gabimi, duhet të kaloni te “Rregullime baz You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database &gt; Database Security &gt; Change Key File.</strong><br> - Po përdorni një format të vjetër kartelash kyçesh, të cilin KeePassXC-ja mund <br>të reshtë ta mbulojë në të ardhmen.<br><br>Ju lutemi, shihni mundësinë e prodhimit të një kartelë të re kyçi, duke kaluar te:<br><strong>Bazë të dhënash &gt; Siguri Baze të Dhënash &gt; Ndryshoni Kartelë Kyç.</strong><br> + Don't show this warning again @@ -1661,70 +1555,40 @@ Që të pengoni shfaqjen e këtij gabimi, duhet të kaloni te “Rregullime baz Cannot use database file as key file - S’mund të përdoret kartelë baze të dhënash si kartelë kyçi + + + + You cannot use your database file as a key file. +If you do not have a key file, please leave the field empty. + + + + Detecting hardware keys… + Po pikasen kyçe hardware… + + + No hardware keys detected + S’u pikasën kyçe hardware + + + Select hardware key… + Përzgjidhni kyç hardware… + + + <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information…</p> + + + + <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +<p>Click for more information…</p> + authenticate to access the database - që të hyni në bazën e të dhënave, bëni mirëfilltësimin + - Failed to authenticate with Quick Unlock: %1 - S’u arri të bëhej mirëfilltësimi me Shkyçje të Shpejtë: %1 - - - Select Key File: - Përzgjidhni Kartelë Kyçi: - - - <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!</p> - <p>Tej një fjalëkalimi, mund të përdorni një kartelë të fshehtë për të thelluar sigurinë e bazës suaj të të dhënave. Kjo kartelë mund të prodhohet që nga rregullimet e sigurisë së bazës suaj të të dhënave.</p><p>Kjo <strong>nuk</strong> është kartela juaj *.kdbx e bazës së të dhënave!</p> - - - Use hardware key [Serial: %1] - Përdor kyç hardware [Serial: %1] - - - Use hardware key - Përdor kyç hardware - - - Your database file is NOT a key file! -If you don't have a key file or don't know what that is, you don't have to select one. - Kartela juaj e bazës së të dhënave NUK është kartelë kyçi! -Nëse s’keni një kartelë kyçi, ose s’e dini se ç’është një e tillë, s’ju duhet të përzgjidhni një. - - - KeePassXC database file selected - U përzgjodh kartelë baze të dhënash KeePassXC - - - The file you selected looks like a database file. -A database file is NOT a key file! - -Are you sure you want to continue with this file?. - Kartela që përzgjodhët, duket si kartelë baze të dhënash. -Një kartelë baze të dhënash NUK është kartelë kyçi! - -Jeni i sigurt se doni të vazhdohet me këtë kartelë? - - - No hardware keys found. - S’u gjet kyç hardware. - - - Refresh Hardware Keys - Rifresko Kyçe Hardware - - - Click to add a key file. - Klikoni që të shtohet një kartelë kyç. - - - <a href="#" style="text-decoration: underline">I have a key file</a> - <a href="#" style="text-decoration: underline">Kam një kartelë kyç</a> - - - Hardware keys found, but no slots are configured. + Failed to authenticate with Windows Hello: %1 @@ -1737,6 +1601,10 @@ Jeni i sigurt se doni të vazhdohet me këtë kartelë? DatabaseSettingsDialog + + Advanced Settings + Rregullime të Mëtejshme + General Të përgjithshme @@ -1761,22 +1629,6 @@ Jeni i sigurt se doni të vazhdohet me këtë kartelë? Maintenance Mirëmbajtje - - KeeShare - KeeShare - - - Secret Service Integration - Integrim Shërbimi të Fshehtash - - - Remote Sync - Njëkohësim i Largët - - - Database Settings: %1 - Rregullime Baze të Dhënash: %1 - DatabaseSettingsWidgetBrowser @@ -1784,17 +1636,25 @@ Jeni i sigurt se doni të vazhdohet me këtë kartelë? KeePassXC-Browser settings Rregullime për KeePassXC-Browser + + Convert KeePassHTTP data + Shndërroni të dhëna KeePassHTTP + + + Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data + + + + Refresh database root group ID + + Disconnect all browsers Shkëputi krejt shfletuesit Forget all site-specific settings on entries - Harro krejt rregullimet specifike për sajte, te zërat - - - Refresh database root group ID - Rifresko ID grupi rrënjë baze të dhënash + Stored keys @@ -1802,7 +1662,7 @@ Jeni i sigurt se doni të vazhdohet me këtë kartelë? Stored browser keys - Kyçe shfletuesi të depozituar + Remove selected key @@ -1819,8 +1679,7 @@ Jeni i sigurt se doni të vazhdohet me këtë kartelë? Do you really want to delete the selected key? This may prevent connection to the browser plugin. - Doni vërtet të fshihet kyçi i përzgjedhur? -Kjo mund të pengojë lidhjen me shtojcën e shfletuesit. + Key @@ -1841,22 +1700,28 @@ Kjo mund të pengojë lidhjen me shtojcën e shfletuesit. Do you really want to disconnect all browsers? This may prevent connection to the browser plugin. - Doni vërtet të shkëputen krejt shfletuesit? -Kjo mund të pengojë lidhjen me shtojcën e shfletuesit. + + + + KeePassXC: No keys found + KeePassXC: S’u gjetën kyçe No shared encryption keys found in KeePassXC settings. - Te rregullimet e KeePassXC-së s’u gjetën kyçe të përbashkët fshehtëzimi. + + + + KeePassXC: Removed keys from database + Successfully removed %n encryption key(s) from KeePassXC settings. - U hoq me sukses %n kyç fshehtëzimi që nga rregullimet e KeePassXC-së.U hoqën me sukses %n kyçe fshehtëzimi që nga rregullimet e KeePassXC-së. + Do you really want forget all site-specific settings on every entry? Permissions to access entries will be revoked. - Doni vërtet të harrohen krejt rregullimet specifike për sajte, në çdo zë? -Do të shfuqizohen leje për përdorim të zërave. + Removing stored permissions… @@ -1866,13 +1731,30 @@ Do të shfuqizohen leje për përdorim të zërave. Abort Ndërprite + + KeePassXC: Removed permissions + KeePassXC: U hoqën leje + Successfully removed permissions from %n entry(s). - U hoq me sukses leje nga %n zë.U hoqën me sukses leje nga %n zëra. + + + + KeePassXC: No entry with permissions found! + KeePassXC: S’u gjet zë me leje! The active database does not contain an entry with permissions. - Baza aktive e të dhënave s’përmban zë me leje. + + + + Move KeePassHTTP attributes to custom data + + + + Do you really want to convert all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + Refresh database ID @@ -1881,28 +1763,7 @@ Do të shfuqizohen leje për përdorim të zërave. Do you really want refresh the database ID? This is only necessary if your database is a copy of another and the browser extension cannot connect. - Doni vërtet të rifreskohet ID-ja e bazës së të dhënave? -Kjo është e nevojshme vetëm nëse baza juaj e të dhënave është një kopje e një tjetre dhe zgjerimi i shfletuesit s’bën dot lidhjen. - - - Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data - Shndërroni atribute KeePassHTTP të dikurshëm në të dhëna vetjake të përputhshme me KeePassXC-Browser - - - No keys found - S’u gjetën kyçe - - - Removed keys from database - U hoqën kyçe nga baza e të dhënave - - - Removed permissions - U hoqën leje - - - No entry with permissions found! - S’u gjet zë me leje! + @@ -1943,18 +1804,6 @@ Jeni i sigurt se doni të vazhdohet pa një fjalëkalim? Failed to change database credentials S’u arrit të ndryshohen kredenciale baze të dhënash - - Weak password - Fjalëkalim i dobët - - - This is a weak password! For better protection of your secrets, you should choose a stronger password. - Ky është një fjalëkalim i dobët! Për mbrojtje më të mirë të të fshehtave tuaja, duhet të zgjidhni një fjalëkalim më të fortë. - - - The provided password does not meet the minimum quality requirement. - Fjalëkalimi i dhënë s’plotëson domosdoshmëritë minimum për cilësinë. - DatabaseSettingsWidgetEncryption @@ -1962,13 +1811,21 @@ Jeni i sigurt se doni të vazhdohet pa një fjalëkalim? Decryption Time: Kohë Shfshehtëzimi: + + Change existing decryption time + Ndryshoni kohën ekzistuese të shfshehtëzimit + + + Change + Ndryshojeni + Decryption time in seconds Kohë shfshehtëzimi në sekonda Higher values offer more protection, but opening the database will take longer. - Vlera më të mëdha ofrojnë më tepër mbrojtje, por hapja e bazës së të dhënave do të zgjasë më shumë. + Vlera më të mëdha ofrojnë më tepër mbrojtje, por hapja e bazës së të dhënave do të zgjasë më shumë Database format: @@ -1988,7 +1845,7 @@ Jeni i sigurt se doni të vazhdohet pa një fjalëkalim? Encryption Algorithm: - Algoritëm Fshehtëzimi: + Algoritëm Ffshehtëzimi: Encryption algorithm @@ -2042,6 +1899,11 @@ Jeni i sigurt se doni të vazhdohet pa një fjalëkalim? KDBX 3 KDBX 3 + + unchanged + Database decryption time is unchanged + + Number of rounds too high Key transformation rounds @@ -2094,18 +1956,6 @@ Nëse mbani këtë numër, baza juaj e të dhënave s’do të mbrohet nga sulme Threads for parallel execution (KDF settings) rrjedhë rrjedha - - Encryption Settings: - Rregullime Fshehtëzimi: - - - Basic - Elementare - - - Advanced - Të mëtejshme - DatabaseSettingsWidgetFdoSecrets @@ -2123,7 +1973,7 @@ Nëse mbani këtë numër, baza juaj e të dhënave s’do të mbrohet nga sulme Enable Secret Service to access these settings. - Aktivizo hyrjen e Shërbimit të Fshehtë te këto rregullime. + @@ -2162,11 +2012,11 @@ Nëse mbani këtë numër, baza juaj e të dhënave s’do të mbrohet nga sulme Maximum number of history items per entry - Numër maksimum objektesh historiku për zë + Maximum size of history per entry - Madhësi maksimum historiku për zë + MiB @@ -2174,7 +2024,7 @@ Nëse mbani këtë numër, baza juaj e të dhënave s’do të mbrohet nga sulme Use recycle bin - Përdor kosh riciklimesh + Përdor kosh hedhurinash Additional Database Settings @@ -2186,13 +2036,12 @@ Nëse mbani këtë numër, baza juaj e të dhënave s’do të mbrohet nga sulme Delete Recycle Bin - Fshi Kosh Riciklimesh + Fshi Kosh Hedhurinash Do you want to delete the current recycle bin and all its contents? This action is not reversible. - Doni të fshihet koshi i tanishëm i riciklimeve dhe krejt lënda e tij? -Ky veprim s’është i prapakthyeshëm. + (old) @@ -2203,102 +2052,29 @@ Ky veprim s’është i prapakthyeshëm. the oldest history items of an entry will be removed such that only the specified amount of entries remain at most. - Kur ruhet ky rregullim, ose përpunohet një zë -objektet më të vjetër të historikut të një zëri -do të hiqen, që e shumta të mbetet vetëm sasia - e përcaktuar e zërave. + Limit the amount of history items per entry to: - Kufizoje sasinë e objekteve të historikut për zë në: + When saving this setting or editing an entry the oldest history items of an entry will be removed such that the remaining history items add up to the specified amount at most. - Kur ruhet ky rregullim, ose përpunohet një zë -objektet më të vjetër të historikut të një zëri -do të hiqen, që objektet e mbetur te historiku -të jenë e shumta deri sa sasia e përcaktuar. + Limit the total size of history items per entry to: - Kufizoje sasinë e objekteve të historikut gjithsej për zë në: + Move entries to a recycle bin group instead of deleting them from the database. Entries deleted from the recycle bin are removed from the database. - Kaloji zërat te një grup koshi riciklimi -në vend se t’i fshish nga baza e të dhënave. -Zërat e fshirë nga koshi i riciklimeve -hiqen nga baza e të dhënave. - - - Autosave delay since last change - Vonesë vetëruajtje që nga ndryshimi i fundit - - - Autosave delay - Vonesë vetëruajtjeje - - - Autosave delay since last change in minutes - Vonesë vetëruajtje që nga ndryshimi i fundit, në minuta - - - min - min - - - Autosave delay since last change checkbox - Vonesë vetëruajtje që nga ndryshimi i fundit, kutizë - - - Public Database Metadata - Tejtëdhëna Baze të Dhënash Publike - - - Warning: the following settings are not encrypted. - Kujdes: rregullimet vijuese s’janë të fshehtëzuara. - - - Display name: - Emër në ekran: - - - Publically visible display name used on the unlock dialog - Emër në ekran i dukshëm publikisht, i përdorur te dialogu i shkyçjeve - - - Database public display name - Emër publik në ekran baze të dhënash - - - Display color: - Ngjyrë ekrani: - - - Publically visible color used on the unlock dialog - Ngjyrë e dukshme publikisht, e përdorur te dialogu i shkyçjeve - - - Database public display color chooser - Zgjedhës ngjyre shfaqjeje publike baze të dhënash - - - Clear - Spastroji - - - Display icon: - Ikonë shfaqjeje: - - - Select Database Icon - Përzgjidhni Ikonë Baze të Dhënash + @@ -2395,129 +2171,6 @@ hiqen nga baza e të dhënave. Fushë përshkrimi baze të dhënash - - DatabaseSettingsWidgetRemote - - Sync Commands - Urdhra njëkohësimi - - - Remove - Hiqe - - - Command Settings - Rregullime Urdhri - - - Name - Emër - - - Save - Ruaje - - - Download - Shkarkoje - - - Command: - Urdhër: - - - Download command field - Fushë urdhri shkarkimi - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - p.sh.: "sftp user@hostname" ose "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - - - Input: - - - - Download input field - - - - Upload - Ngarkim - - - Upload command field - Fushë urdhri ngarkimi - - - e.g.: "sftp user@hostname" or "scp {TEMP_DATABASE} user@hostname:DatabaseOnRemote.kdbx" - e.g.: "sftp user@hostname" ose "scp {TEMP_DATABASE} user@hostname:DatabaseOnRemote.kdbx" - - - Upload input field - - - - Name cannot be empty. - Emri s’mund të jetë i zbrazët. - - - Test - - - - Download command cannot be empty. - Urdhri i shkarkimit s’mund të jetë i zbrazët. - - - Download failed with error: %1 - Shkarkimi dështoi me gabimin: %1 - - - Download finished, but file %1 could not be found. - Shkarkimi përfundoi, por s’u gjeta kartela %1. - - - Download successful. - Shkarkim i suksesshëm - - - Save Remote Settings - - - - You have unsaved changes. Do you want to save them? - Keni ndryshime të paruajtura. Doni të ruhen? - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - - - - e.g.: -put {TEMP_DATABASE} DatabaseOnRemote.kdbx -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - - - - Timeout: - Mbarime kohe: - - - seconds - sekonda - - DatabaseTabWidget @@ -2527,8 +2180,7 @@ The command has to exit. In case of `sftp` as last command `exit` has to be sent The created database has no key or KDF, refusing to save it. This is definitely a bug, please report it to the developers. - Baza e të dhënave e krijuar s’ka kyç, apo KDF, po hidhet poshtë ruajtja e saj. -Kjo është përfundimisht një e metë, ju lutemi, njoftojuani zhvilluesve. + KeePass 2 Database @@ -2550,9 +2202,25 @@ Kjo është përfundimisht një e metë, ju lutemi, njoftojuani zhvilluesve.CSV file Kartelë CSV + + Select CSV file + Përzgjidhni kartelë CSV + Merge database - Përzje bazë të dhënash + Përzie bazë të dhënash + + + KeePass 1 database + Bazë të dhënash Keepass 1 + + + Open KeePass 1 database + Hap bazë të dhënash Keepass 1 + + + Open OPVault + Hap OPVault Export database to CSV file @@ -2566,6 +2234,28 @@ Kjo është përfundimisht një e metë, ju lutemi, njoftojuani zhvilluesve.Writing the HTML file failed. Shkrimi te kartela HTML dështoi. + + Export Confirmation + Ripohim Eksportimi + + + You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? + + + + New Database + Bazë e re të Dhënash + + + %1 [New Database] + Database tab name modifier + %1 [Bazë e Re të Dhënash] + + + %1 [Locked] + Database tab name modifier + %1 [E kyçur] + Export database to XML file Eksportoje bazën e të dhënave te kartelë XML @@ -2578,38 +2268,16 @@ Kjo është përfundimisht një e metë, ju lutemi, njoftojuani zhvilluesve.Writing the XML file failed Shkrimi te kartela XML dështoi - - Export Confirmation - Ripohim Eksportimi - - - You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? - Ju ndan një hap nga eksportimi i bazës suaj të të dhënave te një kartelë e pafshehtëzuar. Kjo do t’i lërë të cenueshme fjalëkalimet dhe informacione me spec tuajat! Jeni i sigurt se doni të vazhdohet? - - - %1 [Locked] - Database tab name modifier - %1 [E kyçur] - - - %1 [Temporary] - Database tab name modifier - %1 [E përkohshme] - DatabaseWidget - - Searches and Tags - Kërkime dhe Etiketa - Searching… Po kërkohet… Shared group… - Grup i përbashkët… + Confirm Auto-Type @@ -2617,7 +2285,7 @@ Kjo është përfundimisht një e metë, ju lutemi, njoftojuani zhvilluesve. Perform Auto-Type into the previously active window? - Të kryhet Vetë-shtypje te dritarja e mëparshme aktive? + Execute command? @@ -2625,7 +2293,7 @@ Kjo është përfundimisht një e metë, ju lutemi, njoftojuani zhvilluesve. Do you really want to execute the following command?<br><br>%1<br> - Doni vërtet të ekzekutohet urdhri vijues?<br><br>%1<br> + Remember my choice @@ -2641,20 +2309,16 @@ Kjo është përfundimisht një e metë, ju lutemi, njoftojuani zhvilluesve. Move group to recycle bin? - Të shpihet grupi te koshi i riciklimeve? + Të shpihet grupi te koshi i hedhurinave? Do you really want to move the group "%1" to the recycle bin? - Doni vërtet të shpihet grupi “%1” te koshi i riciklimeve? + Expired entries Zëra të skaduar - - Entries expiring within %1 day(s) - Zëra që skadojnë brenda %1 diteZëra që skadojnë brenda %1 ditësh - No current database. S’ka bazë të tanishme të dhënash. @@ -2679,25 +2343,13 @@ Kjo është përfundimisht një e metë, ju lutemi, njoftojuani zhvilluesve.No Results S’ka Përfundime - - Save - Ruaje - - - Enter a unique name or overwrite an existing search from the list: - Jepni një emër unik, ose mbishkruani një kërkim ekzistues prej listës: - - - Save Search - Ruaje Kërkimin - Lock Database? Të kyçet Baza e të Dhënave? You are editing an entry. Discard changes and lock anyway? - Po përpunoni një zë. Të hidhen tej ndryshimet dhe të kyçet, sido qoftë? + "%1" was modified. @@ -2719,15 +2371,33 @@ Të ruhen ndryshimet? File has changed Kartela ka ndryshuar + + The database file has changed. Do you want to load the changes? + Kartela e bazës së të dhënave ka ndryshuar. Doni të ngarkohen ndryshimet? + + + Merge Request + Kërkesë Përzierjeje + + + The database file has changed and you have unsaved changes. +Do you want to merge your changes? + Kartela e bazës së të dhënave ka ndryshuar dhe keni ndryshime të paruajtyra. +Doni të përziehen ndryshimet tuaja? + + + Could not open the new database file while attempting to autoreload. +Error: %1 + + Disable safe saves? - Të çaktivizohen ruajtje të parrezik? + 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 ka dështuar disa herë të ruajë bazën e të dhënave. Kjo ka gjasa të jetë shkaktuar nga shërbime njëkohësimi kartelash që ruajnë një kyçje te kartela që duhet ruajtur. -Të çaktivizohet ruajtje të parrezik dhe të riprovohet? + Writing the database failed: %1 @@ -2751,104 +2421,35 @@ Të çaktivizohet ruajtje të parrezik dhe të riprovohet? Empty recycle bin? - Të zbrazet koshi i riciklimeve? + Të zbrazet koshi i hedhurinave? Are you sure you want to permanently delete everything from your recycle bin? - Jeni i sigurt se doni të fshihet përgjithmonë gjithçka prej koshit tuaj të riciklimeve? + Jeni i sigurt se doni të fshihet përgjithmonë gjithçka prej koshit tuaj të hedhurinave? Could not find database file: %1 S’u gjet dot kartelë baze të dhënash: %1 - - New Database - Bazë e re të Dhënash + + Entries expiring within %1 day(s) + Zëra që skadojnë brenda %1 diteZëra që skadojnë brenda %1 ditësh - %1 [New Database] - Database tab name modifier - %1 [Bazë e Re të Dhënash] + Searches and Tags + Kërkime dhe Etiketa - Remote Sync did not contain any download or upload commands. - Njëkohësimi i Largët s’përmbante ndonjë urdhër shkarkimi ose ngarkimi. + Enter a unique name or overwrite an existing search from the list: + Jepni një emër unik, ose mbishkruani një kërkim ekzistues prej listës: - Remote sync '%1' completed successfully! - Njëkohësimi i largët “%1” u plotësua me sukses! + Save + Ruaje - Remote sync '%1' failed: %2 - Njëkohësimi i largët “%1” dështoi: %2 - - - Error while saving database %1: %2 - Gabim gjatë ruajtjes së bazës së të dhënave: %1: %2 - - - Downloading... - Po shkarkohet… - - - Uploading... - Po ngarkohet… - - - Syncing... - Po njëkohësohet… - - - Remove passkey from entry - Hiq kodkalim nga zëri - - - Do you want to remove the passkey from this entry? - Doni të hiqet kyçkalimi nga ky zë? - - - The database file "%1" was modified externally - - - - Do you want to load the changes? - - - - Reload database - - - - Reloading database… - - - - Reload canceled - - - - Reload successful - - - - Reload pending user action… - - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes<br>Ignore the changes on disk until save<br>Discard unsaved changes - - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes then save<br>Overwrite the changes on disk<br>Discard unsaved changes - - - - Database file overwritten. - - - - Database file on disk cannot be unlocked with current credentials.<br>Enter new credentials and/or present hardware key to continue. - + Save Search + Ruaje Kërkimin @@ -2901,6 +2502,10 @@ Të çaktivizohet ruajtje të parrezik dhe të riprovohet? n/a n/a + + (encrypted) + (i fshehtëzuar) + Select private key Përzgjidhni kyç privat @@ -2987,10 +2592,6 @@ Do të donit të ndreqet? Hide Fshihe - - %n hour(s) - %n orë%n orë - %n week(s) %n javë%n javë @@ -3003,9 +2604,9 @@ Do të donit të ndreqet? %n year(s) %n vit%n vjet - - Failed to decrypt SSH key, ensure password is correct. - S’u arrit të shfshehtëzohej kyç, sigurohuni se fjalëkalimi është i saktë. + + %n hour(s) + %n orë%n orë @@ -3095,11 +2696,11 @@ Do të donit të ndreqet? EditEntryWidgetAutoType Enable Auto-Type for this entry - Aktivizoni Vetë-Shtypje për këtë zë + Aktivizo Vetë-Shtypje për këtë zë Inherit default Auto-Type sequence from the group - Trashëgo prej grupit sekuencë parazgjedhje Vetë-Shtypje + Trashëgo sekuencë Vetë-Shtypjeje parazgjedhje prej grupit Use custom Auto-Type sequence: @@ -3125,19 +2726,9 @@ Do të donit të ndreqet? Add new window association Shtoni një përshoqërim të ri dritareje - - + - Add item - + - Remove selected window association - Hiqe përshoqërimin e përzgjedhur të dritares - - - - - Remove item - - + Window title: @@ -3145,15 +2736,15 @@ Do të donit të ndreqet? You can use an asterisk (*) to match everything - Mund të përdorni një yllth (*) për kërkim përkimesh për gjithçka + Set the window association title - Caktoni titull përshoqërimi dritareje + You can use an asterisk to match everything - Mund të përdorni një yllth për kërkim përkimesh për gjithçka + Use a specific sequence for this association: @@ -3161,11 +2752,25 @@ Do të donit të ndreqet? Custom Auto-Type sequence for this window - Sekuencë vetjake Vetë-Shtypjeje për këtë dritare + + + + + + Add item + + + + + - + Remove item + - EditEntryWidgetBrowser + + These settings affect to the entry's behaviour with the browser extension. + + General Të përgjithshme @@ -3178,13 +2783,25 @@ Do të donit të ndreqet? Skip Auto-Submit for this entry Anashkalo Vetë-Parashtrim për këtë zë + + Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. + + Use this entry only with HTTP Basic Auth - Këtë zë përdore vetëm me Mirëfilltësim Elementar HTTP + + + + Do not send this setting to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. + Do not use this entry with HTTP Basic Auth - Mos e përdor këtë zë me Mirëfilltësim Elementar HTTP + + + + Additional URL's + Add @@ -3198,22 +2815,6 @@ Do të donit të ndreqet? Edit Përpunojeni - - These settings affect the entry's behaviour with the browser extension. - Këto rregullime prekin sjelljen e zërit me zgjerimin e shfletuesit. - - - Additional URLs - URL-ra shtesë - - - Only send this entry to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. - Këtë zë dërgoje te shfletuesi vetëm për dialogë Mirëfilltësimesh HTTP. Në u aktivizoftë, formularët normalë të hyrjes s’do ta shfaqin këtë zë për përzgjedhje. - - - Do not send this entry to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. - Mos e dërgo këtë zë te shfletuesi për dialogë Mirëfilltësimesh HTTP. Në u aktivizoftë, dialogët e Mirëfilltësimeve HTTPf s’do ta shfaqin këtë zë për përzgjedhje. - EditEntryWidgetHistory @@ -3223,7 +2824,7 @@ Do të donit të ndreqet? Show entry at selected history state - Shfaqe zërin në gjendjen e përzgjedhur të historikut + Show @@ -3231,7 +2832,7 @@ Do të donit të ndreqet? Restore entry to selected history state - Riktheje zërin në gjendjen e përzgjedhur të historikut + Restore @@ -3302,7 +2903,7 @@ Do të donit të ndreqet? Toggle expiration - Shfaq/fshih skadim + Tags list @@ -3310,35 +2911,35 @@ Do të donit të ndreqet? &Username: - &Emër përdoruesi: + &Title: - &Titull: + &Password: - &Fjalëkalim: + UR&L: - UR&L: + &Notes: - Shën&ime: + Toggle notes visibility - Shfaq/fshih shënime + T&ags: - &Etiketa: + &Expires: - &Skadon më: + @@ -3349,7 +2950,7 @@ Do të donit të ndreqet? Remove key from agent when database is closed/locked - Hiqe kyçin nga agjenti, kur mbyllet/kyçet baza e të dhënave + Comment @@ -3357,7 +2958,7 @@ Do të donit të ndreqet? Add key to agent when database is opened/unlocked - Shtoje kyçin te agjenti, kur baza e të dhënave është e hapur/e shkyçur + Decrypt @@ -3379,6 +2980,19 @@ Do të donit të ndreqet? Private key Kyç privat + + External file + Kartelë e jashtme + + + Browser for key file + Shfletues për kartelë kyçi + + + Browse… + Button for opening file dialog + Shfletoni… + Attachment Bashkëngjitje @@ -3395,30 +3009,13 @@ Do të donit të ndreqet? Remove from agent Hiqe prej agjenti - - External file - Kartelë e jashtme - - - Browser for key file - Shfletues për kartelë kyçi - - - Browse… - Button for opening file dialog - Shfletoni… - - - Generate - Prodhoje - Select attachment file Përzgjidhni kartelë bashkëngjitje Require user confirmation when this key is used - Kërko doemos ripohim nga përdoruesi, kur përdoret ky kyç + n/a @@ -3426,20 +3023,16 @@ Do të donit të ndreqet? Remove key from agent after - Hiqe kyçin nga agjenti pas + Remove key from agent after specified seconds - Hiqe kyçin nga agjenti pas sekondave të specifikuara + seconds sekonda - - Clear agent - - EditGroupWidget @@ -3451,6 +3044,10 @@ Do të donit të ndreqet? Icon Ikonë + + Browser Integration + Integrim Shfletuesi + Properties Veti @@ -3467,10 +3064,6 @@ Do të donit të ndreqet? Group has unsaved changes Grupi ka ndryshime të paruajtura - - Browser Integration - Integrim Shfletuesi - Enable Aktivizoje @@ -3488,11 +3081,11 @@ Do të donit të ndreqet? EditGroupWidgetBrowser These settings affect to the group's behaviour with the browser extension. - Këto rregullime prekin sjelljen e grupit me zgjerimin e shfletuesit. + Hide entries from browser extension: - Fshihi zërat nga zgjerimi i shfletuesit: + Hide entries from browser extension toggle for this and sub groups @@ -3500,7 +3093,7 @@ Do të donit të ndreqet? Skip Auto-Submit for entries: - Anashkalo Vetëparashtrim për zërat: + Skip Auto-Submit toggle for this and sub groups @@ -3508,7 +3101,7 @@ Do të donit të ndreqet? Use entries only with HTTP Basic Auth: - Përdori zërat vetëm me Mirëfilltësim Elementar HTTP: + Only HTTP Auth toggle for this and sub groups @@ -3516,7 +3109,7 @@ Do të donit të ndreqet? Do not use entries with HTTP Basic Auth: - Mos përdor zëra me Mirëfilltësim Elementar HTTP: + Do not use HTTP Auth toggle for this and sub groups @@ -3524,26 +3117,18 @@ Do të donit të ndreqet? Omit WWW subdomain from matching: - Lër jashtë kërkimit për përkim nënpërkatësinë WWW: + Omit WWW subdomain from matching toggle for this and sub groups - - Restrict matching to given browser key: - - - - Restrict matching to given browser key toggle for this and sub groups - - EditGroupWidgetKeeShare Sharing mode field - Fushë mënyre ndarjeje me të tjerë + Password field @@ -3563,11 +3148,11 @@ Do të donit të ndreqet? Path to share file field - Fushë shtegu për të ndarë kartelë me të tjerë + Browse for share file - Shfletoni për kartelë për ndarje + Browse… @@ -3600,41 +3185,40 @@ Do të donit të ndreqet? Your KeePassXC version does not support sharing this container type. Supported extensions are: %1. - Versioni juaj i KeePassXC-së nuk mbulon ndarje të këtij lloji kontejneri. -Zgjatimet e mbuluara janë: %1. + %1 is already being exported by this database. - %1 po eksportohet tashmë nga kjo bazë të dhënash. + %1 is already being imported by this database. - %1 po importohet tashmë nga kjo bazë të dhënash. + %1 is being imported and exported by different groups in this database. - %1 po importohet dhe eksportohet nga grupe të ndryshëm në këtë bazë të dhënash. + KeeShare is currently disabled. You can enable import/export in the application settings. KeeShare is a proper noun - KeeShare është aktualisht i çaktivizuar. Mund të aktivizoni importim/eksportim që nga rregullime aplikacioni. + Database export is currently disabled by application settings. - Eksportimi i bazës së të dhënave është aktualisht i çaktivizuar që nga rregullime aplikacioni. + Database import is currently disabled by application settings. - Importimi i bazës së të dhënave është aktualisht i çaktivizuar që nga rregullime aplikacioni. + KeeShare container - Kontejner KeeShare + KeeShare signed container - Kontejner KeeShare i nënshkruar + Select import source @@ -3657,7 +3241,7 @@ Zgjatimet e mbuluara janë: %1. Toggle expiration - Shfaq/fshih skadim + Expires: @@ -3673,7 +3257,7 @@ Zgjatimet e mbuluara janë: %1. Use default Auto-Type sequence of parent group - Përdor sekuencë Vetë-Shtypjeje parazgjedhje të grupit mëmë + Auto-Type: @@ -3770,6 +3354,10 @@ Zgjatimet e mbuluara janë: %1. Unable to fetch favicon. S’arrihet të sillet favikonë. + + You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security + + Existing icon selected. U përzgjodh ikonë ekzistuese. @@ -3788,7 +3376,7 @@ Zgjatimet e mbuluara janë: %1. Successfully loaded %1 of %n icon(s) - U ngarkua me sukses %1 nga %n ikonëU ngarkua me sukses %1 nga %n ikona + No icons were loaded @@ -3796,26 +3384,22 @@ Zgjatimet e mbuluara janë: %1. %n icon(s) already exist in the database - Te baza e të dhënave ekziston tashmë %n ikonëTe baza e të dhënave ekzistojnë tashmë %n ikona + The following icon(s) failed: Ikona vijuese dështoi:Ikonat vijuese dështuan: - - You can enable the DuckDuckGo website icon service under Application Settings -> Security - Mund të aktivizoni shërbim ikonash sajti DuckDuckGo që nga Rregullime Aplikacioni -> Siguri - EditWidgetProperties Created: - Krijuar më: + Krijuar më Datetime created - Datë dhe kohë kur u krijua + Modified: @@ -3823,15 +3407,15 @@ Zgjatimet e mbuluara janë: %1. Datetime modified - Datë dhe kohë kur u ndryshua + Accessed: - Përdorur më: + Datetime accessed - Datë dhe kohë kur u përdor + Uuid: @@ -3851,7 +3435,7 @@ Zgjatimet e mbuluara janë: %1. Remove selected plugin data - Hiq të dhëna shtojce të përzgjedhur + Remove @@ -3859,13 +3443,12 @@ Zgjatimet e mbuluara janë: %1. Delete plugin data? - Të hiqen të dhëna shtojce? + Do you really want to delete the selected plugin data? This may cause the affected plugins to malfunction. - Doni vërtet të fshihen të dhënat e shtojcës së përzgjedhur? -Kjo mund të bëjë të punojnë keq shtojcat e prekura. + Key @@ -3880,25 +3463,7 @@ Kjo mund të bëjë të punojnë keq shtojcat e prekura. Entry %1 - Clone - %1 - Klonoje - - - Passkey - Kyçkalim - - - Invalid conversion type: %1 - Lloj i pavlefshëm shndërrimi: %1 - - - Invalid conversion syntax: %1 - Sintaksë e pavlefshme shndërrimi: %1 - - - Invalid regular expression syntax %1 -%2 - Sintaksë e pavlefshme shprehjeje të rregullt: %1 -%2 + @@ -3908,21 +3473,6 @@ Kjo mund të bëjë të punojnë keq shtojcat e prekura. S’hapet dot kartela “%1” - - EntryAttachmentsDialog - - Form - Formular - - - File name - - - - File contents... - - - EntryAttachmentsModel @@ -3960,6 +3510,14 @@ Kjo mund të bëjë të punojnë keq shtojcat e prekura. Remove Hiqe + + Rename selected attachment + Riemërtojeni bashkëngjitjen e përzgjedhur + + + Rename + Riemërtojeni + Open selected attachment Hape bashkëngjitjen e përzgjedhur @@ -3986,7 +3544,7 @@ Kjo mund të bëjë të punojnë keq shtojcat e prekura. Are you sure you want to remove %n attachment(s)? - Jeni i sigurt se doni të hiqet %n bashkëngjitje?Jeni i sigurt se doni të hiqen %n bashkëngjitje? + Jeni i sigurt se doni të hiqet %n bashkëngjitje?Jeni i sigurt se doni të hiqet %n bashkëngjitje? Save attachments @@ -4000,7 +3558,7 @@ Kjo mund të bëjë të punojnë keq shtojcat e prekura. Are you sure you want to overwrite the existing file "%1" with the attachment? - Jeni i sigurt se doni të mbishkruhet kartela ekzistuese “%1” me bashkëngjitjen? + Confirm overwrite @@ -4035,6 +3593,11 @@ Kjo mund të bëjë të punojnë keq shtojcat e prekura. Confirm Overwrite Attachment Ripohoni Mbishkrim Bashkëngjitjeje + + Attachment "%1" already exists. +Would you like to overwrite the existing attachment? + + Confirm Attachment Ripohoni Bashkëngjitje @@ -4044,10 +3607,7 @@ Kjo mund të bëjë të punojnë keq shtojcat e prekura. Your database may get very large and reduce performance. Are you sure to add this file? - %1 është një kartelë e madhe (%2 MB). -Baza juaj e të dhënave mund të bëhet shumë e madhe dhe të bjerë funksionimi. - -Jeni i sigurt se doni të shtohet kjo kartelë? + Attachment modified @@ -4056,35 +3616,15 @@ Jeni i sigurt se doni të shtohet kjo kartelë? The attachment '%1' was modified. Do you want to save the changes to your database? - Bashkëngjitja “%1” u ndryshua. -Doni të ruhen ndryshimet te baza juaj e të dhënave? + Saving attachment failed - Dështoi ruajtja e bashkëngjitjes + Saving updated attachment failed. Error: %1 - Dështoi ruajtja e bashkëngjitjes së përditësuar. -Gabim: %1 - - - Attachment "%1" already exists. -Would you like to overwrite the existing attachment? - Ka tashmë një bashkëngjitje “%1”. -Doni të mbishkruhet bashkëngjitja ekzistuese? - - - New - - - - Preview - Paraparje - - - Failed to preview an attachment: Attachment not found @@ -4099,7 +3639,7 @@ Doni të mbishkruhet bashkëngjitja ekzistuese? EntryHistoryModel Current (%1) - I tanishmi (%1) + Last modified @@ -4179,7 +3719,7 @@ Doni të mbishkruhet bashkëngjitja ekzistuese? Ref: Reference abbreviation - Ref: + Never @@ -4223,7 +3763,7 @@ Doni të mbishkruhet bashkëngjitja ekzistuese? Accessed - Përdorur më + Attachments @@ -4263,7 +3803,7 @@ Doni të mbishkruhet bashkëngjitja ekzistuese? Last access date - Data e përdorimit të fundit + Attached files @@ -4281,20 +3821,12 @@ Doni të mbishkruhet bashkëngjitja ekzistuese? Has TOTP Ka TOTP - - Background Color - Ngjyrë Sfondi - - - Group Path - - EntryPreviewWidget Display current TOTP value - Shfaq vlerën e tanishme TOTP + Close @@ -4309,8 +3841,8 @@ Doni të mbishkruhet bashkëngjitja ekzistuese? Fjalëkalim - URL - URL + Notes + Shënime Expiration @@ -4329,8 +3861,8 @@ Doni të mbishkruhet bashkëngjitja ekzistuese? Emër përdoruesi - Notes - Shënime + URL + URL Advanced @@ -4346,7 +3878,7 @@ Doni të mbishkruhet bashkëngjitja ekzistuese? Autotype - Vetë-shtype + Default Sequence @@ -4362,11 +3894,11 @@ Doni të mbishkruhet bashkëngjitja ekzistuese? Searching - Po kërkohet + Share - Ndaje me të tjerë + Search @@ -4380,10 +3912,6 @@ Doni të mbishkruhet bashkëngjitja ekzistuese? Never Kurrë - - Double click to copy value - Që t’i kopjohet vlera, dyklikojeni - Enabled E aktivizuar @@ -4393,39 +3921,31 @@ Doni të mbishkruhet bashkëngjitja ekzistuese? E çaktivizuar - Double click to copy to clipboard - Që të kopjohet, dyklikojeni + Double click to copy value + Që t’i kopjohet vlera, dyklikojeni EntryURLModel Invalid URL - URL e pavlefshme - - - Duplicate URL - URL e përsëdytur + URL e Pavlefshme EntryView Fit to window - Sa ta nxërë dritarja + Fit to contents - Sa ta nxërë lënda + Reset to defaults Riktheje te parazgjedhjet - - + %1 entry(s)... - + %1 zë…+ %1 zëra… - ExportDialog @@ -4441,9 +3961,7 @@ Doni të mbishkruhet bashkëngjitja ekzistuese? You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! - Ju ndan një hap nga eksportimi i bazës suaj të të dhënave si një kartelë e pafshehtëzuar. -Kjo do t’i lërë të cenueshme fjalëkalimet tuaja dhe informacione me spec! - + database order @@ -4474,61 +3992,61 @@ Kjo do t’i lërë të cenueshme fjalëkalimet tuaja dhe informacione me spec! FdoSecrets::DBusMgr Failed to deliver message - S’u arrit të dërgohej mesazhe + Failed to send reply on DBus - S’u arrit të dërgohej përgjigje në DBUS + Unknown Unknown PID - I panjohur + Unknown Unknown executable path - I panjohur + <i>PID: %1, Executable: %2</i> <i>PID: 1234, Executable: /path/to/exe</i> - <i>PID: %1, I ekzekutueshëm: %2</i> + Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. - Po xhiron një tjetër shërbim i fshehtë (%1).<br/>Ju lutemi, ndaleni/hiqeni, para se të riaktivizohet Integrimi i Shërbimit të Fshehtë. + Failed to register DBus service at %1.<br/> - S’u arrit të regjistrohej shërbim DBus në %1.<br/> + Failed to register service on DBus at path '%1' - S’u arrit të regjistrohej shërbim DBus në shtegun '%1' + Failed to register database on DBus under the name '%1' - S’u arrit të regjistrohej bazë të dhënash te DBus nën emrin '%1' + Failed to register session on DBus at path '%1' - S’u arrit të regjistrohej sesion te DBus në shtegun '%1' + Failed to register item on DBus at path '%1' - S’u arrit të regjistrohej objekt te DBus në shtegun '%1' + Failed to register prompt object on DBus at path '%1' - S’u arrit të regjistrohej objekt prompt te DBus në shtegun '%1' + FdoSecrets::Item Entry "%1" from database "%2" was used by %3 - Nga %3 u përdor zëri “%1” pre bazës së të dhënave “%2” + @@ -4536,14 +4054,14 @@ Kjo do t’i lërë të cenueshme fjalëkalimet tuaja dhe informacione me spec! %n Entry(s) was used by %1 %1 is the name of an application - Nga %1 qe përdorur %n zëNga %1 qenë përdorur %n zëra + FdoSecrets::SettingsClientModel Unknown - I panjohur + Non-existing/inaccessible executable path. Please double-check the client is legit. @@ -4554,7 +4072,7 @@ Kjo do t’i lërë të cenueshme fjalëkalimet tuaja dhe informacione me spec! FdoSecrets::SettingsDatabaseModel Unlock to show - Që të shfaqet, shkyçeni + None @@ -4572,7 +4090,7 @@ Kjo do t’i lërë të cenueshme fjalëkalimet tuaja dhe informacione me spec! FdoSecretsPlugin <b>Fdo Secret Service:</b> %1 - <b>Shërbim të Fshehtash Fdo:</b> %1 + @@ -4584,21 +4102,21 @@ Kjo do t’i lërë të cenueshme fjalëkalimet tuaja dhe informacione me spec! %1 - Clone - %1 - Klonoje + HibpDownloader Online password validation failed - Dështoi vlerësimi në internet i fjalëkalimit + IconDownloaderDialog Download Favicons - Shkarko Favikona + Cancel @@ -4607,8 +4125,7 @@ Kjo do t’i lërë të cenueshme fjalëkalimet tuaja dhe informacione me spec! Having trouble downloading icons? You can enable the DuckDuckGo website icon service in the security section of the application settings. - Keni probleme me shkarkim ikonash? -Mund të aktivizoni shërbimin e ikonave të sajteve nga DuckDuckGo, te pjesa e sigurisë në rregullimet e aplikacionit. + Close @@ -4624,7 +4141,7 @@ Mund të aktivizoni shërbimin e ikonave të sajteve nga DuckDuckGo, te pjesa e Please wait, processing entry list… - Ju lutemi, prisni, po përpunohet listë zërash… + Downloading… @@ -4647,193 +4164,6 @@ Mund të aktivizoni shërbimin e ikonave të sajteve nga DuckDuckGo, te pjesa e Po shkarkohen favikona (%1/%2)… - - ImportWizard - - Import Wizard - Ndihmës Importimesh - - - - ImportWizardPageReview - - WizardPage - Faqe Ndihmësi - - - Entry count: %1 - Numër zërash: %1 - - - Group - Grup - - - Title - Titull - - - Username - Emër përdoruesi - - - Password - Fjalëkalim - - - Url - URL - - - Could not load key file. - S’u ngarkua dot kartelë kyç. - - - Could not open remote database. Password or key file may be incorrect. - S’u hap dot bazë e largët të dhënash. Mund të jenë të pasaktë fjalëkalimi ose kartela kyç. - - - - ImportWizardPageSelect - - Form - Formular - - - Import File Selection - Përzgjedhje Kartele Importimi - - - Password: - Fjalëkalim: - - - Key File: - Kartelë Kyçi: - - - Browse… - Shfletoni… - - - Import Into: - Importoje Te: - - - New Database - Bazë e re të Dhënash - - - No unlocked databases available - S’ka baza të dhënash të shkyçura - - - Existing Database: - Bazë Ekzistuese të Dhënash: - - - Import File: - Importo Kartelë: - - - Comma Separated Values (.csv) - Vlera Ndarë Me Presje (.csv) - - - 1Password Export (.1pux) - Eksportim 1Password (.1pux) - - - 1Password Vault (.opvault) - Kasafortë 1Password (.opvault) - - - Bitwarden (.json) - Bitwarden (.json) - - - KeePass 1 Database (.kdb) - Bazë të dhënash KeePass 1 (.kdb) - - - Open OPVault - Hap OPVault - - - Select import file - Përzgjidhni kartelë importimi - - - All files - Krejt kartelat - - - Key files - Kartela kyçesh - - - Select key file - Përzgjidhni kartelë kyçi - - - Comma Separated Values - Vlera Ndarë Me Presje - - - 1Password Export - Eksportim 1Password - - - Bitwarden JSON Export - Eksportim Bitwarden JSON - - - 1Password Vault - Kasafortë 1Password - - - KeePass1 Database - Bazë të Dhënash Keepass1 - - - Proton Pass (.json) - - - - Proton Pass JSON Export - - - - Temporary Database - Bazë e përkohshme të Dhënash - - - Command: - Urdhër: - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - p.sh.: "sftp user@hostname" ose "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - - - Input: - - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last commend `exit` has to be sent - - - - - Remote Database (.kdbx) - Bazë të Dhënash e Largët (.kdbx) - - KMessageWidget @@ -4842,44 +4172,43 @@ The command has to exit. In case of `sftp` as last commend `exit` has to be sent Close message - Mbylle mesazhin + Kdbx3Reader Missing database headers - Mungojnë krye baze të dhënash + Unable to calculate database key - S’arrihet të llogaritet kyç baze të dhënash + Unable to issue challenge-response: %1 - S’arrihet të emetohet pyetje-përgjigje: %1 + Invalid credentials were provided, please try again. If this reoccurs, then your database file may be corrupt. - U dhanë kredenciale të pavlefshme, ju lutemi, riprovoni. -Nëse kjo ndodh sërish, ahere baza juaj e të dhënave mund të jetë e dëmtuar. + Header doesn't match hash - Kryet s’përputhen me hashin + Invalid header id size - Madhësi e pavlefshme ID-je kryesh + Invalid header field length: field %1 - Gjatësi e pavlefshme fushe kryesh: fushë %1 + Invalid header data length: field %1, %2 expected, %3 found - Gjatësi e pavlefshme të dhënash kryesh: fushë %1, pritej %2, u gjet %3 + @@ -4887,84 +4216,83 @@ Nëse kjo ndodh sërish, ahere baza juaj e të dhënave mund të jetë e dëmtua Invalid symmetric cipher IV size. IV = Initialization Vector for symmetric cipher - Madhësi e pavlefshme Vektori simetrik gatitjeje shifre. + Unable to issue challenge-response: %1 - S’arrihet të emetohet pyetje-përgjigje: %1 + Unable to calculate database key - S’arrihet të llogaritet kyç baze të dhënash + Kdbx4Reader missing database headers - mungojnë krye baze të dhënash + Unable to calculate database key: %1 - S’arrihet të llogaritet kyç baze të dhënash: %1 + Invalid header checksum size - Madhësi e pavlefshme checksum-i kryesh + Header SHA256 mismatch - Mospërputhje kryesh SHA256 + Invalid credentials were provided, please try again. If this reoccurs, then your database file may be corrupt. - U dhanë kredenciale të pavlefshme, ju lutemi, riprovoni. -Nëse kjo ndodh sërish, ahere baza juaj e të dhënave mund të jetë e dëmtuar. + (HMAC mismatch) - (Mospërputhje HMAC) + Unknown cipher - Shifër e panjohur + Invalid header id size - Madhësi e pavlefshme ID-je kryesh + Invalid header field length: field %1 - Gjatësi e pavlefshme fushe kryesh: fushë %1 + Invalid header data length: field %1, %2 expected, %3 found - Gjatësi e pavlefshme të dhënash kryesh: fushë %1, pritej %2, u gjet %3 + Failed to open buffer for KDF parameters in header - S’u arrit të hapet “buffer” për parametra KDFte kryet + Unsupported key derivation function (KDF) or invalid parameters - Funksion i pambuluar derivimi kyçesh (KDF), ose parametra të pavlefshëm + Legacy header fields found in KDBX4 file. - U gjetën fusha kryesh të dikurshme në kartelë KDBX4. + Invalid inner header id size - Madhësi ID-je kryesh të brendshme + Invalid inner header field length: field %1 - Gjatësi e pavlefshme fushe kryesh të brendshme: fusha %1 + Invalid inner header data length: field %1, %2 expected, %3 found - Gjatësi e pavlefshme fushe kryesh të brendshme: fusha %1, pritej %2, u gjet %3 + Invalid inner header binary size @@ -5035,16 +4363,16 @@ Nëse kjo ndodh sërish, ahere baza juaj e të dhënave mund të jetë e dëmtua Kdbx4Writer Invalid symmetric cipher algorithm. - Algoritëm i pavlefshëm shifre simetrike. + Invalid symmetric cipher IV size. IV = Initialization Vector for symmetric cipher - Madhësi e pavlefshme Vektori Gatitjeje shifre simetrike. + Unable to calculate database key: %1 - S’arrihet të llogaritet kyç baze të dhënash: %1 + Failed to serialize KDF parameters variant map @@ -5056,15 +4384,15 @@ Nëse kjo ndodh sërish, ahere baza juaj e të dhënave mund të jetë e dëmtua KdbxReader Invalid cipher uuid length: %1 (length=%2) - Gjatësi e pavlefshme UUID-je shifre: %1 (gjatësi=%2) + Unable to parse UUID: %1 - S’arrihet të analizohet UUID: %1 + Unsupported cipher - Shifër e pambuluar + Invalid compression flags length @@ -5072,7 +4400,7 @@ Nëse kjo ndodh sërish, ahere baza juaj e të dhënave mund të jetë e dëmtua Unsupported compression algorithm - Algoritëm i pambuluar ngjeshjesh + Invalid master seed size @@ -5084,11 +4412,11 @@ Nëse kjo ndodh sërish, ahere baza juaj e të dhënave mund të jetë e dëmtua Invalid transform rounds size - Madhësi e pavlefshme raundesh shndërrimi + Invalid start bytes size - Madhësi e pavlefshme bajtesh fillimi + Invalid random stream id size @@ -5100,17 +4428,14 @@ Nëse kjo ndodh sërish, ahere baza juaj e të dhënave mund të jetë e dëmtua Failed to read database file. - S’u arrit të lexohej kartelë baze të dhënash. + 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. - Kartela e përzgjedhur është një bazë e vjetër të dhënash KeePass 1 (.kdb). - -Mund ta importoni duke klikuar te Bazë të dhënash > “Importoni bazë të dhënash KeePass 1…”. -Ky është një migrim me një kah. S’do të jeni në gjendje të hapni bazën e importuar të të dhënave me versionin e vjetër KeePassX 0.4. + Not a KeePass database. @@ -5118,34 +4443,32 @@ Ky është një migrim me një kah. S’do të jeni në gjendje të hapni bazën Unsupported KeePass 2 database version. - Version i pambuluar baze të dhënash KeePass 2. + KdbxXmlReader XML parsing failure: %1 - Dështim analizimi XML-je: %1 + No root group - S’ka grup rrënjë + XML error: %1 Line %2, column %3 - Gabim XML: -%1 -Rreshti %2, shtylla %3 + Missing icon uuid or data - Mungon UUID ose të dhëna ikone + Missing custom data key or value - Mungon kyç, ose vlerë të dhënash vetjake + Multiple group elements @@ -5157,19 +4480,19 @@ Rreshti %2, shtylla %3 Invalid group icon number - Numër i pavlefshëm ikonash grupi + Invalid EnableAutoType value - Vlerë EnableAutoType e pavlefshme + Invalid EnableSearching value - Vlerë EnableSearching e pavlefshme + No group uuid found - S’u gjet grup UUID + Null DeleteObject uuid @@ -5177,7 +4500,7 @@ Rreshti %2, shtylla %3 Missing DeletedObject uuid or time - Mungon UUID ose kohë për DeletedObject + Null entry uuid @@ -5185,23 +4508,23 @@ Rreshti %2, shtylla %3 Invalid entry icon number - Numër i pavlefshëm ikone zëri + History element in history entry - Element historiku te zë historiku + No entry uuid found - S’u gjet UUID zëri + History element with different uuid - Element historiku me UUDI të ndryshme + Duplicate custom attribute found - U gjet atribut vetjak i përsëdytur + Entry string key or value missing @@ -5213,66 +4536,77 @@ Rreshti %2, shtylla %3 Auto-type association window or sequence missing - Mungon dritare ose sekuencë përshoqërimi Vetë-shtypjeje + Invalid bool value - Vlerë buelane e pavlefshme + Invalid date time value - Vlerë e pavlefshme date kohe + Invalid color value - Vlerë e pavlefshme ngjyre + Invalid color rgb part - Pjesë e pavlefshme RGB ngjyre + Invalid number value - Vlerë e pavlefshme numri + Invalid uuid value - Vlerë UUID e pavlefshme + Unable to decompress binary Translator meant is a binary data inside an entry - S’arrihet të çngjeshet dyor + KeeAgentSettings Invalid KeeAgent settings file structure. - Strukturë e pavlefshme kartele rregullimesh KeeAgent. + Private key is an attachment but no attachments provided. - Kyçi privat është një bashkëngjitje, por bashkëngjitje s’u dhanë. + Private key is empty - Kyçi privat është i zbrazët + File too large to be a private key - Kartelë shumë e madhe për të qenë një kyç privat + Failed to open private key - S’u arrit të hapej kyç privat + + + + + KeePass1OpenWidget + + Import KeePass1 Database + Importo Bazë të Dhënash Keepass 1 + + + Unable to open the database. + S’arrihet të hapet baza e të dhënave. KeePass1Reader Unable to read keyfile. - S’arrihet të lexohet kartelë kyç. + S’arrihet të lexohet kartelë kyçesh. Not a KeePass database. @@ -5280,28 +4614,28 @@ Rreshti %2, shtylla %3 Unsupported encryption algorithm. - Algoritëm i pambuluar fshehtëzimesh. + Unsupported KeePass database version. - Version i pambuluar baze të dhënash KeePass. + Unable to read encryption IV IV = Initialization Vector for symmetric cipher - S’arrihet të lexohet VG fshehtëzimi + Invalid number of groups - Numër i pavlefshëm grupesh + Invalid number of entries - Numër i pavlefshëm zërash + Invalid content hash size - Madhësi e pavlefshme hashi lënde + Invalid transform seed size @@ -5309,7 +4643,7 @@ Rreshti %2, shtylla %3 Invalid number of transform rounds - Numër i pavlefshëm raundesh shndërrimi + Unable to construct group tree @@ -5317,11 +4651,11 @@ Rreshti %2, shtylla %3 Root - Rrënjë + Unable to calculate database key - S’arrihet të llogaritet kyç baze të dhënash + unable to seek to content position @@ -5330,20 +4664,19 @@ Rreshti %2, shtylla %3 Invalid credentials were provided, please try again. If this reoccurs, then your database file may be corrupt. - U dhanë kredenciale të pavlefshme, ju lutemi, riprovoni. -Nëse kjo ndodh sërish, ahere baza juaj e të dhënave mund të jetë e dëmtuar. + Key transformation failed - Shndërrimi i kyçit dështoi + Invalid group field type number - Numër i pavlefshëm lloji fushe grupi + Invalid group field size - Madhësi fushe grupi e pavlefshme + Read group field data doesn't match size @@ -5351,47 +4684,47 @@ Nëse kjo ndodh sërish, ahere baza juaj e të dhënave mund të jetë e dëmtua Incorrect group id field size - Madhësi e pasaktë fushe ID-je grupi + Incorrect group creation time field size - Madhësi e pasaktë fushe kohe krijimi grupi + Incorrect group modification time field size - Madhësi e pasaktë fushe kohe ndryshimi grupi + Incorrect group access time field size - Madhësi e pasaktë fushe kohe përdorimi grupi + Incorrect group expiry time field size - Madhësi e pasaktë fushe kohe skadimi grupi + Incorrect group icon field size - Madhësi e pasaktë fushe ikone grupi + Incorrect group level field size - Madhësi e pasaktë fushe niveli grupi + Invalid group field type - Lloj i pavlefshëm fushe grupi + Missing group id or level - Mungon ID ose nivel grupi + Missing entry field type number - Mungon numër lloji fushe zëri + Invalid entry field size - Madhësi e pavlefshme fushe zëri + Read entry field data doesn't match size @@ -5399,31 +4732,31 @@ Nëse kjo ndodh sërish, ahere baza juaj e të dhënave mund të jetë e dëmtua Invalid entry UUID field size - Madhësi e pavlefshme fushe UUID zëri + Invalid entry group id field size - Madhësi e pavlefshme fushe ID-je grupi zëri + Invalid entry icon field size - Madhësi e pavlefshme fushe ikone zëri + Invalid entry creation time field size - Madhësi e pavlefshme fushe kohe krijimi zëri + Invalid entry modification time field size - Madhësi e pavlefshme fushe kohe ndryshimi zëri + Invalid entry expiry time field size - Madhësi e pavlefshme fushe kohe skadimi zëri + Invalid entry field type - Madhësi e pavlefshme fushe zëri + @@ -5442,19 +4775,19 @@ Nëse kjo ndodh sërish, ahere baza juaj e të dhënave mund të jetë e dëmtua Exported to %1 - Eksportuar te %1 + Synchronized with %1 - Njëkohësuar me %1 + Import is disabled in settings - Importimi është i çaktivizuar te rregullimet + Export is disabled in settings - Eksportimi është i çaktivizuar te rregullimet + Inactive share @@ -5462,15 +4795,15 @@ Nëse kjo ndodh sërish, ahere baza juaj e të dhënave mund të jetë e dëmtua Imported from - Importuar nga + Exported to - Eksportuar te + Synchronized with - Njëkohësuar me + @@ -5496,7 +4829,7 @@ Nëse kjo ndodh sërish, ahere baza juaj e të dhënave mund të jetë e dëmtua KeyFileEditWidget Generate a new key file - Prodhoni një kartelë të re kyçi + Generate @@ -5504,11 +4837,11 @@ Nëse kjo ndodh sërish, ahere baza juaj e të dhënave mund të jetë e dëmtua Generate a new key file or choose an existing one to protect your database. - Prodhoni një kartelë të re kyçi, ose zgjidhni nëj ekzistuese, që të mbroni bazën tuaj të të dhënave. + Note: Do NOT use a file that may change as that will prevent you from unlocking your database. - Shënim: MOS përdorni një kartelë që mund të ndryshojë, ngaqë kjo do t’ju pengojë të shkyçni bazën tuaj të të dhënave. + Browse for key file @@ -5524,13 +4857,12 @@ Nëse kjo ndodh sërish, ahere baza juaj e të dhënave mund të jetë e dëmtua You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. - Përzgjodhët një kartelë kyçi në një format të vjetër. të cilin KeePassXC-ja<br>mund të reshtë së mbuluari në të ardhmen.<br><br>Ju lutemi, në vend të kësaj, shihni mundësinë e prodhimit të një kartele të re. + Error loading the key file '%1' Message: %2 - Gabim në ngarkimin e kartelës së kyçit “%1” -Mesazh: %2 + Key File @@ -5550,11 +4882,11 @@ Mesazh: %2 Key File set, click to change or remove - Kartela e Kyçit u ujdis, klikoni që ta ndryshoni, ose hiqni + <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>Mund të shtoni një kartelë kyçi që përmban bajte kuturu, për më tepër siguri.</p><p>Duhet ta mbani të fshehtë dhe të mos e humbni kurrë, përndryshe do të kyçeni jashtë.</p> + Key files @@ -5574,8 +4906,7 @@ Mesazh: %2 Unable to create key file: %1 - S’arrihet të krijohet kartelë kyçi: -%1 + Select a key file @@ -5587,7 +4918,7 @@ Mesazh: %2 You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. - S’mund të përdorni bazën e tanishme të të dhënave si kartelë kyçi për veten. Ju lutemi, zgjidhni një kartelë tjetër, ose prodhoni një kartelë të re kyçi. + Suspicious Key File @@ -5596,8 +4927,7 @@ Mesazh: %2 The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. Are you sure you want to continue with this file? - Kartela e zgjedhur e kyçit duket si një kartelë fjalëkalimi baze të dhënash. Një kartelë kyçi duhet të jetë një kartelë statike që nuk ndryshon kurrë, ose përndryshe do të humbni përgjithmonë hyrjen te baza juaj e të dhënave. -Jeni i sigurt se doni të vazhdohet me këtë kartelë? + @@ -5619,36 +4949,36 @@ Jeni i sigurt se doni të vazhdohet me këtë kartelë? MainWindow &Database - &Bazë të dhënash + &Recent Databases - Baza të dhënash Së &Fundi + + + + &Import + &Export - &Eksporto + &Help - &Ndihmë + &Entries - &Zëra + Copy Att&ribute - Kopjo Atri&but + TOTP TOTP - - Tags - Etiketa - &Groups &Grupe @@ -5667,7 +4997,7 @@ Jeni i sigurt se doni të vazhdohet me këtë kartelë? &Quit - &Mbylle + &About @@ -5675,163 +5005,227 @@ Jeni i sigurt se doni të vazhdohet me këtë kartelë? &Check for Updates - &Kontrollo për Përditësime + &Open Database… - &Hapni Bazë të Dhënash… + &Save Database - &Ruaje Bazën e të Dhënave + &Close Database - Mby&lle Bazën e të Dhënave + &New Database… - Bazë e R&e të Dhënash… + + + + Create a new database + &Merge From Database… - &Përzieni Prej Baze të Dhënash… + + + + Merge from another KDBX database + &New Entry… - Zë i &Ri… + + + + Add a new entry + Shtoni zë të ri &Edit Entry… - Përp&unoni Zë… + + + + View or edit entry + Shihni ose përpunoni zë &Delete Entry… - &Fshini Zë… + &New Group… - &Grup i Ri… + + + + Add a new group + &Edit Group… - &Përpunoni Grup… + &Delete Group… - &Fshini Grup… + Download All &Favicons… - Shkarkoni Krejt F&avikonat… + Sort &A-Z - Renditi sipas &A-Z + Sort &Z-A - Renditi sipas &Z-A + Sa&ve Database As… - R&uajeni Bazën e të Dhënave Si… + Database &Security… - &Siguri Baze të Dhënash… + Database &Reports… - &Raporte Baze të Dhënash… + + + + Statistics, health check, etc. + &Database Settings… - Rregullime &Baze të Dhënash… + + + + Database settings + Rregullime baze të dhënash &Clone Entry… - &Klononi Zë… + Move u&p - &Ngjite sipër + + + + Move entry one step up + Move do&wn - Zbrite &poshtë + + + + Move entry one step down + Copy &Username - &Kopjo Emër Përdoruesi + + + + Copy username to clipboard + Copy &Password - Kopjo &Fjalëkalimin + + + + Copy password to clipboard + Kopjoje fjalëkalimin në të papastër &Settings - &Rregullime + &Password Generator - Prodhues &Fjalëkalimesh + Perform &Auto-Type - kryej &Vetë-Shtypje + Download &Favicon - Shkarko F&avikonë + Open &URL - Hape &URL-në + &Lock Database - &Kyçe Bazën e të Dhënave + Lock &All Databases - Kyçi &Krejt Bazat e të Dhënave + &Title - &Titull + - Copy &URL - Kopjoji &URL-në + Copy title to clipboard + + + + Copy URL to clipboard + &Notes - Shëni&me + + + + Copy notes to clipboard + &CSV File… - Kartelë &CSV… + &HTML File… - Kartelë &HTML… + KeePass 1 Database… - Bazë të Dhënash Keepass 1… + + + + Import a KeePass 1 database + 1Password Vault… - Kasafortë 1Password… + + + + Import a 1Password Vault + CSV File… - Kartelë CSV… + + + + Import a CSV file + Show TOTP - Shfaq TOTP + Show QR Code @@ -5845,13 +5239,9 @@ Jeni i sigurt se doni të vazhdohet me këtë kartelë? Copy &TOTP Kopjo &TOTP - - Copy Password and TOTP - Kopjo Fjalëkalim dhe TOTP - E&mpty recycle bin - &Zbraz koshin e riciklimeve + &Zbraz koshin e hedhurinave &Donate @@ -5873,6 +5263,10 @@ Jeni i sigurt se doni të vazhdohet me këtë kartelë? &Online Help Ndihmë Në &Internet + + Go to online documentation + Kalo te dokumentimi në internet + &User Guide &Udhërrëfyes Përdoruesi @@ -5903,7 +5297,7 @@ Jeni i sigurt se doni të vazhdohet me këtë kartelë? Automatic - Automatike + Light @@ -5915,11 +5309,7 @@ Jeni i sigurt se doni të vazhdohet me këtë kartelë? Classic (Platform-native) - Klasike(E brendshme e platformës) - - - Show Menubar - Shfaq shtyllë menush + Show Toolbar @@ -5945,10 +5335,6 @@ Jeni i sigurt se doni të vazhdohet me këtë kartelë? Clone Group... Klononi Grup… - - &XML File… - Kartelë &XML… - Clear history Spastroje historikun @@ -5965,23 +5351,21 @@ Jeni i sigurt se doni të vazhdohet me këtë kartelë? 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. - KUJDES: Po përdorni një montim të paqëndrueshëm të KeePassXC-së. -Ka një rrezik të lartë dëmtimi, mbani një kopjeruajtje të bazave tuaja të të dhënave. -Ky version s’është menduar për përdorim të vërtetë. + NOTE: You are using a pre-release version of KeePassXC. Expect some bugs and minor issues, this version is meant for testing purposes. - SHËNIM: Po përdorni një version paraqarkullim të KeePassXC-së. -Prisni ca të meta dhe probleme të vogla, ky version është menduar për qëllime testimi. + - No Tags - Pa Etiketa + 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. + Restore Entry(s) - Riktheje ZërinRiktheji Zërat + Settings @@ -5993,27 +5377,23 @@ Prisni ca të meta dhe probleme të vogla, ky version është menduar për qëll Would you like KeePassXC to check for updates on startup? - Doni që KeePassXC-ja gjatë nisjes të kontrollojë për përditësime? + You can always check for updates manually from the application menu. - Mundeni përherë të kontrolloni dorazi për përditësime, që nga menuja e aplikacionit. + Toggle window - Shfaq/Fshih dritare + Hap/Mbyll dritare Quit KeePassXC Mbylle KeePassXC-ën - - %1 Entry(s) - %1 Zë%1 Zëra - Please present or touch your YubiKey to continue… - Ju lutemi, që të vazhdohet, paraqitni, ose prekni YubiKey-n tuaj… + Restart Application? @@ -6021,314 +5401,38 @@ Prisni ca të meta dhe probleme të vogla, ky version është menduar për qëll You must restart the application to apply this setting. Would you like to restart now? - Që të aplikohet ky rregullim duhet të rinisni aplikacionin. Doni të riniset tani? + + + + Tags + Etiketa + + + No Tags + Pa Etiketa + + + %1 Entry(s) + %1 Zë%1 Zë + + + Copy Password and TOTP + + + + &XML File… + Kartelë &XML… + + + XML File… + Kartelë XML… + + + Copy &URL + Allow Screen Capture - Lejo Regjistrim Ekrani - - - 1Password 1PUX... - 1Password 1PUX… - - - Import a 1Password 1PUX file - Importoni një kartelë 1Password 1PUX - - - Import… - Importoni… - - - Passkeys… - Kyçkalime… - - - Import Passkey - Importoni Kyçkalim - - - Remote S&ync… - &Njëkohësim i Largët… - - - Quit Application - Mbylle Aplikacionin - - - Open About Dialog - Hap Dialogun “Mbi” - - - Open Database - Hap Bazë të Dhënash - - - Create Database - Krijo Bazë të Dhënash - - - Merge From Database - Përzieni Prej Baze të Dhënash - - - Create Entry - Krijoni Zë - - - Edit Entry - Përpunoni Zërin - - - Delete Entry - Fshini Zë - - - Create Group - Krijoni Grup - - - Edit Group - Përpunoni Grup - - - Delete Group - Fshije Grupin - - - Download All Favicons - Shkarkoji Krejt Favikonat - - - Sort Groups A-Z - Renditi Grupet sipas A-Z - - - Sort Groups Z-A - Renditi Grupet sipas Z-A - - - Save Database As - Ruaje Bazën e të Dhënave Si - - - Show Database Security - Shfaq Siguri Baze të Dhënash - - - Show Database Reports - Shfaq Raporte Baze të Dhënash - - - Show Database Settings - Shfaq Rregullime Baze të Dhënash - - - Show Passkeys - Shfaq Kyçkalime - - - Clone Entry - Klonoje Zërin - - - Move Entry Up - Ngjite Zërin Sipër - - - Move Entry Down - Zbrite Zërin Poshtë - - - Copy Username - Kopjo Emër Përdoruesi - - - Copy Password - Kopjo Fjalëkalimin - - - Show Application Settings - Shfaq Rregullime Aplikacioni - - - Show Password Generator - Shfaq Prodhues Fjalëkalimesh - - - Remove Passkey From Entry - Hiq Kyçkalim Nga Zëri - - - Perform Auto-Type: {USERNAME} - Kryej Vetë-shtypje: {USERNAME} - - - Perform Auto-Type: {USERNAME}{ENTER} - Kryej Vetë-shtypje: {USERNAME}{ENTER} - - - Perform Auto-Type: {PASSWORD} - Kryej Vetë-shtypje: {PASSWORD} - - - Perform Auto-Type: {PASSWORD}{ENTER} - Kryej Vetë-shtypje: {PASSWORD}{ENTER} - - - Perform Auto-Type: {TOTP} - Kryej Vetë-shtypje: {TOTP} - - - Copy Title - Kopjo Titullin - - - Copy URL - Kopjo URL-në - - - Copy Notes - Kopjo Shënime - - - Export to CSV - Eksportoje si CSV - - - Export to HTML - Eksportoje si HTML - - - Import KeePass1 Database - Importo Bazë të Dhënash Keepass 1 - - - Import 1Password Vault - Importo Kasafortë 1Password - - - Import CSV File - Importo Kartelë CSV - - - Show TOTP QR Code - Shfaq Kod QR TOTP - - - Set up TOTP - Ujdisni TOTP - - - Empty Recycle Bin - Zbraz Koshin e Riciklimeve - - - Open Donation Website - Hap Sajt Dhurimesh - - - Open Bug Report - Hap Njoftim të Metash - - - Open Online Documentation - Hap Dokumentin Në Internet - - - Open Keyboard Shortcuts Guide - Hap Udhërrëfyes Shkurtoresh Tastiere - - - Save Database Backup - Ruani Kopjeruajtje Baze të Dhënash - - - SSH Agent: Add Key - Agjent SSH: Shtoni Kyç - - - SSH Agent: Remove Key - Agjent SSH: Hiqni Kyç - - - Toggle Compact Mode - Aktivizo/Çaktivizo Mënyrën Kompakte - - - Set Theme: Automatic - Caktoni Temë: Automatikisht - - - Set Theme: Light - Caktoni Temë: E çelët - - - Set Theme: Dark - Caktoni Temë: E errët - - - Set Theme: Classic - Caktoni Temë: Klasike - - - Toggle Show Menubar - Shfaq/Fshih Shtyllë menush - - - Toggle Show Toolbar - Shfaq/Fshih Panel - - - Toggle Show Preview Panel - Shfaq/Fshih Panel Paraparjesh - - - Toggle Always on Top - Shfaq/Fshih “Përherë Sipër” - - - Toggle Hide Usernames - Shfaq/Fshih “Fshihi Emrat e Përdoruesve” - - - Toggle Hide Passwords - Shfaq/Fshih “Fshihi Fjalëkalimet” - - - Export to XML - Eksportoje si XML - - - Toggle Allow Screen Capture - Aktivizo/Çaktivizo “Lejo Regjistrim Ekrani” - - - Show Group Panel - Shfaq Panel Grupesh - - - Toggle Show Group Panel - Shfaq/Fshih Panel Grupesh - - - Setup Remote Sync… - Ujdisni Njëkohësim të Largët… - - - Password Generator - - - - E&xpire Entry… - - - - Clear SSH Agent - - - - Clear all identities in ssh-agent @@ -6367,58 +5471,78 @@ Prisni ca të meta dhe probleme të vogla, ky version është menduar për qëll Reset - Riktheje te parazgjedhja + Reset any remembered decisions for this application - Rikthe te parazgjedhje cilindo vendim të mbajtur mend për këtë aplikacion + Merger Creating missing %1 [%2] - Po krijohet %1 [%2] që mungon + Relocating %1 [%2] - Po zhvendoset %1 [%2] + Overwriting %1 [%2] Po mbishkruhet %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] - Po njëkohësohet prej burimi më të ri %1 [%2] + Synchronizing from older source %1 [%2] - Po njëkohësohet prej burimi më të vjetër %1 [%2] + Deleting child %1 [%2] - Po fshihet pjella %1 [%2] + Deleting orphan %1 [%2] - Po fshihet %1 jetim [%2] + Changed deleted objects - U ndryshuan objekte të fshirë + Adding missing icon %1 - Po shtohet ikonë %1 që mungon + Removed custom data %1 [%2] - U hoqën të dhëna vetjake %1 [%2] + Adding custom data %1 [%2] - U shtuan të dhëna vetjake %1 [%2] + @@ -6430,14 +5554,14 @@ Prisni ca të meta dhe probleme të vogla, ky version është menduar për qëll Root Root group - Rrënjë + NewDatabaseWizardPage WizardPage - Faqe Ndihmësi + Encryption Settings @@ -6445,7 +5569,15 @@ Prisni ca të meta dhe probleme të vogla, ky version është menduar për qëll Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. - Këtu mund të përimtoni rregullime fshehtëzimi bazash të dhënash. Mos u merakosni, mund t’i ndryshoni më vonë te rregullimet e bazës së të dhënave. + + + + Advanced Settings + Rregullime të Mëtejshme + + + Simple Settings + Rregullime Bazë @@ -6456,7 +5588,7 @@ Prisni ca të meta dhe probleme të vogla, ky version është menduar për qëll A set of credentials known only to you that protects your database. - Një grup kredencialesh që i dini vetëm ju, që mbrojnë bazën tuaj të të dhënave. + @@ -6467,7 +5599,7 @@ Prisni ca të meta dhe probleme të vogla, ky version është menduar për qëll Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. - Këtu mund të përimtoni rregullime fshehtëzimi bazash të dhënash. Mos u merakosni, mun t’i ndryshoni më vonë te rregullimet e bazës së të dhënave. + @@ -6478,25 +5610,6 @@ Prisni ca të meta dhe probleme të vogla, ky version është menduar për qëll Please fill in the display name and an optional description for your new database: - Ju lutemi, plotësoni emrin për në ekran dhe një përshkrim opsional për bazën tuaj të re të të dhënave: - - - - NewEntryAttachmentsDialog - - Attachment name cannot be empty - - - - Attachment with the same name already exists - - - - Save attachment - - - - New entry attachment @@ -6519,23 +5632,23 @@ Prisni ca të meta dhe probleme të vogla, ky version është menduar për qëll OpData01 Invalid OpData01, does not contain header - OpData01 të pavlefshme, s’përmban krye + Unable to read all IV bytes, wanted 16 but got %1 - S’arrihet të lexohen krejt bajtet e Gatitjes së Vektorit, duheshin 16, por u morën %1 + Unable to init cipher for opdata01: %1 - S’arrihet të gatitet shifër për opdata01: %1 + Unable to read all HMAC signature bytes - S’arrihet të lexohen krejt bajtet e nënshkrimit HMAC + Malformed OpData01 due to a failed HMAC - OpData01 të keqformuara, për shkak të një HMAC-u të dështuar + Unable to process clearText in place @@ -6543,7 +5656,15 @@ Prisni ca të meta dhe probleme të vogla, ky version është menduar për qëll Expected %1 bytes of clear-text, found %2 - Priteshin %1 bajte teksti të lexueshëm, u morën %2 + + + + + OpVaultOpenWidget + + Read Database did not produce an instance +%1 + @@ -6562,22 +5683,22 @@ Prisni ca të meta dhe probleme të vogla, ky version është menduar për qëll Directory .opvault/default must be readable - Drejtoria .opvault/default duhet të jetë e lexueshme + Unable to decode masterKey: %1 - S’arrihet të shkodohet masterKey: %1 + Unable to derive master key: %1 - S’arrihet të derivohet kyç i përgjithshëm: %1 + OpenSSHKey Invalid key file, expecting an OpenSSH key - Kartelë e pavlefshme kyçesh, pritej një kyç OpenSSH + PEM boundary mismatch @@ -6585,7 +5706,7 @@ Prisni ca të meta dhe probleme të vogla, ky version është menduar për qëll Base64 decoding failed - Dështoi shkodim Base64 + Key file way too small. @@ -6597,15 +5718,15 @@ Prisni ca të meta dhe probleme të vogla, ky version është menduar për qëll Found zero keys - U gjetën zero kyçe + Failed to read public key. - S’u arrit të lexohej kyç publik. + Corrupted key file, reading private key failed - Kartelë kyçi e dëmtuar, leximi i kyçit privat dështoi + Unsupported key type: %1 @@ -6619,17 +5740,13 @@ Prisni ca të meta dhe probleme të vogla, ky version është menduar për qëll Unknown cipher: %1 Shifër e panjohur: %1 - - AES-256/GCM is currently not supported - AES-256/GCM hëpërhë s’mbulohet - Passphrase is required to decrypt this key - Që të shfshehtëzohet ky kyç, lypset frazëkalim + Key derivation failed: %1 - Derivimi i kyçit dështoi: %1 + Cipher IV is too short for MD5 kdf @@ -6673,198 +5790,23 @@ Prisni ca të meta dhe probleme të vogla, ky version është menduar për qëll Can't write public key as it is empty - S’shkruhet dot kyç publik, ngaqë është i zbrazët - - - Unexpected EOF when writing public key - EOF i papritur, kur shkruhej kyç publik - - - Can't write private key as it is empty - S’shkruhet dot kyç privat, ngaqë është i zbrazët - - - Unexpected EOF when writing private key - EOF i papritur, kur shkruhej kyç privat - - - (encrypted) - (i fshehtëzuar) - - - - OpenSSHKeyGenDialog - - SSH Key Generator - Prodhues Kyçi SSH - - - Type - Lloj - - - Bits - Bite - - - Comment - Koment - - - - PasskeyExportDialog - - KeePassXC - Passkey Export - KeePassXC - Eksportim Kyçkalimi - - - Filenames will be generated with title and .passkey file extension. - Emrat e kartelave do të prodhohen me titull dhe zgjatim .passkey për kartelat. - - - Export entries - Eksporto zëra - - - Export Selected - U përzgjodh Eksport - - - Cancel - Anuloje - - - Export to folder - Eksportoje në dosje - - - Export the following passkey entries. - Eksporto zërat vijues të kyçkalimeve. - - - - PasskeyExporter - - KeePassXC: Passkey Export - KeePassXC: Eksportim Kyçkalimi - - - File "%1.passkey" already exists. -Do you want to overwrite it? - - Ka tashmë një kartelë “%1.passkey”. -Doni të mbishkruhet? - - - - Cannot open file - S’hapet dot kartela - - - Cannot open file "%1" for writing. - S’hapet dot kartela “%1” për shkrim. - - - Cannot write to file - S’shkruhet dot te kartela - - - - PasskeyImportDialog - - KeePassXC - Passkey Import - KeePassXC - Importim Kyçkalimi - - - Username: %1 - Emër Përdoruesi: %1 - - - Group - Grup - - - Database - Bazë të dhënash - - - Import Passkey - Importoni Kyçkalim - - - Import - Importo - - - Cancel - Anuloje - - - Entry - - - - Create new entry - Krijoni zë të ri - - - Relying Party: %1 - Import the following passkey: - Importo kyçkalimin vijues: + Unexpected EOF when writing public key + - Import the following passkey to this entry: - Importo kyçkalimin vijues te ky zë: + Can't write private key as it is empty + - Default passkeys group (Imported Passkeys) - Grup parazgjedhje kyçkalimesh (Kyçkalime të Importuar) - - - - PasskeyImporter - - Passkey file - Kartelë kyçi + Unexpected EOF when writing private key + - All files - Krejt kartelat - - - Cannot open file - S’hapet dot kartela - - - Cannot open file "%1" for reading. - S’hapet dot kartela “%1” për lexim. - - - Open passkey file - Hap kartelë kyçi - - - Cannot import passkey - S’importohet dot kyçkalim - - - Cannot import passkey file "%1". Data is missing. - S’importohet dot kartelë kyçkalimi “%1”. Mungojnë të dhëna. - - - Cannot import passkey file "%1". -The following data is missing: -%2 - S’importohet dot kartelë kyçkalimi “%1”. -Mungojnë të dhënat vijues: -%2 - - - Cannot import passkey file "%1". Private key is missing or malformed. - S’importohet dot kartelë kyçkalimi “%1”. Mungon, ose është i keqformuar kyçi privat. + AES-256/GCM is currently not supported + AES-256/GCM hëpërhë s’mbulohet @@ -6907,7 +5849,7 @@ Mungojnë të dhënat vijues: <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>Një fjalëkalim përbën metodën parësore për sigurimin e bazës suaj të të dhënave.</p><p>Fjalëkalimet e mirë janë të gjatë dhe unikë. KeePassXC-ja mund të prodhojë një të tillë për ju.</p> + Passwords do not match. @@ -7003,7 +5945,7 @@ Mungojnë të dhënat vijues: Extended ASCII - ASCII e zgjeruar + ASCII e Zzgjeruar Braces @@ -7015,7 +5957,7 @@ Mungojnë të dhënat vijues: Additional characters to use for the generated password - Shenja shtesë për tu përdorur për fjalëkalimin e prodhuar + Additional characters @@ -7023,7 +5965,7 @@ Mungojnë të dhënat vijues: Add non-hex letters to "do not include" list - Shto shkronja jo gjashtëmbëdhjetëshe te listë “mos përfshi” + Hex Passwords @@ -7035,7 +5977,7 @@ Mungojnë të dhënat vijues: Character set to exclude from generated password - Shenja për t’u përjashtuar nga fjalëkalimi i prodhuar + Excluded characters @@ -7051,7 +5993,7 @@ Mungojnë të dhënat vijues: Pick characters from every group - Merr shenja nga çdo grup + Passphrase @@ -7063,15 +6005,19 @@ Mungojnë të dhënat vijues: Wordlist: - Listë fjalësh: + Word Count: Numër Fjalësh: + + Character Count: + Numër Shenjash: + Word Case: - Shkronja për Fjalën: + Delete selected wordlist @@ -7081,6 +6027,10 @@ Mungojnë të dhënat vijues: Add custom wordlist Shtoni listë vetjake fjalësh + + character + shenjë + Close Mbylle @@ -7107,7 +6057,7 @@ Mungojnë të dhënat vijues: Title Case - Shkronja për Titullin: + (SYSTEM) @@ -7117,30 +6067,6 @@ Mungojnë të dhënat vijues: Entropy: %1 bit Entropi: %1 bit - - Password Quality: %1 - Cilësi Fjalëkalimesh: %1 - - - Poor - Password quality - Shumë i dobët - - - Weak - Password quality - I dobët - - - Good - Password quality - I mirë - - - Excellent - Password quality - I shkëlqyer - Confirm Delete Wordlist Ripohoni Fshirje Liste Fjalësh @@ -7167,13 +6093,12 @@ Mungojnë të dhënat vijues: Overwrite Wordlist? - Të mbishkruhet Listë Fjalësh? + Të mbishkruhet Listë Fjalësh? Wordlist "%1" already exists as a custom wordlist. Do you want to overwrite it? - Lista e fjalëve “%1”ekziston si një listë vetjake fjalësh. -Doni të mbishkruhet? + Failed to add wordlist @@ -7181,27 +6106,39 @@ Doni të mbishkruhet? Logograms - Logograme + Special Characters Shenja Speciale - passwordLength + Password Quality: %1 + Cilësi Fjalëkalimesh: %1 + + + Poor + Password quality + Shumë i dobët + + + Weak + Password quality + I dobët + + + Good + Password quality - Characters: %1 - Shenja: %1 + Excellent + Password quality + - MIXED case - Shkronja TË PËRZIERA - - - Excluded characters: "0", "1", "l", "I", "O", "|", "﹒", "B", "8", "G", "6" - Shenja të përjashtuara: “0”, “1”, “l”, “I”, “O”, “|”, “﹒”, “B”, “8”, “G”, “6” + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + @@ -7216,7 +6153,7 @@ Doni të mbishkruhet? Toggle Password (%1) - Shfaq/Fshih Fjalëkalim (%1) + Generate Password (%1) @@ -7243,16 +6180,16 @@ Doni të mbishkruhet? Good Password quality - I mirë + Excellent Password quality - I shkëlqyer + - Toggle password visibility using Control + H. Open the password generator using Control + G. - Ndryshoni dukshmërinë e fjalëkalimit duke përdorur Ctrl + H. Hapni prodhuesin e fjalëkalimeve duke përdorur Ctrl + G. + Toggle password visibilty using Control + H. Open the password generator using Control + G. + @@ -7263,28 +6200,13 @@ Doni të mbishkruhet? Select characters to type, navigate with arrow keys, Ctrl + S submits. - Përzgjidhni shenja për shtypje, lëvizni me tastet shigjetë, Ctrl + S bën parashtrimin. + Press &Tab between characters Shtypni tastin &Tab mes shenjave - - PreviewEntryAttachmentsDialog - - Preview entry attachment - - - - No preview available - - - - Image format not supported - - - QMessageBox @@ -7323,10 +6245,6 @@ Doni të mbishkruhet? Continue Vazhdo - - Continue with weak password - Vazhdo me fjalëkalim të dobët - QObject @@ -7356,7 +6274,7 @@ Doni të mbishkruhet? KeePassXC association failed, try again - Përshoqërimi i KeePassXC-së dështoi, riprovoni + Encryption key is not recognized @@ -7408,7 +6326,7 @@ Doni të mbishkruhet? Username for the entry. - Emër përdoruesi për zërin. + Emër përdoruesi për zërin.Zë username @@ -7464,11 +6382,11 @@ Doni të mbishkruhet? Successfully added entry %1. - U shtua me sukses zëri %1. + Adds a new group to a database. - Shton një grup të ri te një bazë të dhënash. + Path of the group to add. @@ -7488,7 +6406,7 @@ Doni të mbishkruhet? Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. - Kontrolloni nëse ka rrjedhur publikisht çfarëdo fjalëkalimi. EMËRKARTELE duhet të jetë shtegu i një kartele që radhit hashe SHA-1 të fjalëkalimeve që janë komprometuar, në format, si gjenden te https://haveibeenpwned.com/Passwords. + FILENAME @@ -7496,7 +6414,7 @@ Doni të mbishkruhet? Path to okon-cli to search a formatted HIBP file - Shteg për te okon-cli për të kërkuar një kartelë të formatuar si HIBP + okon-cli @@ -7504,7 +6422,7 @@ Doni të mbishkruhet? Analyze passwords for weaknesses and problems. - Analizoni fjalëkalime për dobësi dhe probleme. + Cannot find HIBP file: %1 @@ -7512,7 +6430,7 @@ Doni të mbishkruhet? Evaluating database entries using okon… - Po peshohen zëra baze të dhënash duke përdorur okon… + Failed to open HIBP file %1: %2 @@ -7520,15 +6438,15 @@ Doni të mbishkruhet? Evaluating database entries against HIBP file, this will take a while… - Po peshohen zëra baze të dhënash kundrejt kartele HIBP, kjo do të zgjasë ca… + Password for '%1' has been leaked %2 time(s)! - Fjalëkalimi për “%1” ka rrjedhur %2 herë!Fjalëkalimi për “%1” ka rrjedhur %2 herë! + Password for '%1' has been leaked! - Fjalëkalimi për “%1” ka rrjedhur! + Export an attachment of an entry. @@ -7544,11 +6462,11 @@ Doni të mbishkruhet? Path to which the attachment should be exported. - Shteg te i cili duhet eksportuar bashkëngjitja. + Could not find entry with path %1. - S’u gjet dot zë me shtegun %1. + Could not find attachment with name %1. @@ -7556,15 +6474,15 @@ Doni të mbishkruhet? No export target given. Please use '--stdout' or specify an 'export-file'. - S’u dha objektiv eksportimi. Ju lutemi, përdorni “--stdout”, ose specifikoni një “kartelë-eksportimi”. + Could not open output file %1. - S’u hap dot kartela output %1. + Successfully exported attachment %1 of entry %2 to %3. - U eksportua me sukses bashkëngjitja %1 e zërit %2 te %3. + Overwrite existing attachments. @@ -7596,7 +6514,7 @@ Doni të mbishkruhet? Successfully imported attachment %1 as %2 to entry %3. - U importua me sukses bashkëngjitja %1 e zërit %2 te %3. + Remove an attachment of an entry. @@ -7608,20 +6526,20 @@ Doni të mbishkruhet? Successfully removed attachment %1 from entry %2. - U hoq me sukses bashkëngjitja %1 nga zëri %2. + Copy the given attribute to the clipboard. Defaults to "password" if not specified. Don't translate "password", it refers to the attribute. - Kopjoje në të papastër atributin e dhënë. Si parazgjedhje merr vlerën “password”, nëse nuk specifikohet. + Copy the current TOTP to the clipboard (equivalent to "-a totp"). - Kopjo në të papastër TOTP e tanishëm (e njëvlershme me “-a totp”). + Must match only one entry, otherwise a list of possible matches is shown. - Duhet të gjejë përkim vetëm me një zë, përndryshe shfaqet një listë përkimesh të mundshëm. + Copy an entry's attribute to the clipboard. @@ -7630,11 +6548,11 @@ Doni të mbishkruhet? Path of the entry to clip. clip = copy to clipboard - Shteg zëri për t’u kopjuar në të papastër. + Timeout before clearing the clipboard (default is %1 seconds, set to 0 for unlimited). - Mbarim kohe para se të pastrohet e papastra (parazgjedhja është %1 sekonda, vëreni 0 për të qenë e pakufizuar). + Invalid timeout value %1. @@ -7654,15 +6572,15 @@ Doni të mbishkruhet? ERROR: Please specify one of --attribute or --totp, not both. - GABIM: Ju lutemi, specifikoni një nga --attribute ose --totp, jo që të dy. + Entry with path %1 has no TOTP set up. - Zëri me shtegun %1 s’ka TOTP të ujdisur. + ERROR: attribute %1 is ambiguous, it matches %2. - GABIM: atributi %1 është i dykuptimtë, përkon me %2. + Attribute "%1" not found. @@ -7706,7 +6624,7 @@ Doni të mbishkruhet? Yubikey slot and optional serial used to access the database (e.g., 1:7370001). - Vend për Yubikey dhe serial opsional të përdorur për të hyrë te baza e të dhënave (p.sh., 1:7370001). + slot[:serial] @@ -7720,13 +6638,9 @@ Doni të mbishkruhet? Too many arguments provided. U dhanë shumë argumente. - - Path of the database. - Shteg i bazës së të dhënave. - Target decryption time in MS for the database. - Kohë shfshehtëzimi e synuar, në MS, për bazën e të dhënave. + time @@ -7744,13 +6658,17 @@ Doni të mbishkruhet? Create a new database. Krijoni bazë të re të dhënash. + + Path of the database. + Shteg i bazës së të dhënave. + Invalid decryption time %1. Kohë e pavlefshme shfshehtëzimi %1. Target decryption time must be between %1 and %2. - Koha e synuar për shfshehtëzimin duhet të jetë mes %1 dhe %2. + Failed to set database password. @@ -7762,19 +6680,19 @@ Doni të mbishkruhet? No key is set. Aborting database creation. - S’është ujdisur ndonjë kyç. Po ndërpritet krijimi i bazës së të dhënave. + Benchmarking key derivation function for %1ms delay. - Po vlerësohet funksioni i derivimit të kyçit për vonesë %1ms. + Setting %1 rounds for key derivation function. - Po caktohen %1 raunde për funksion derivimi kyçesh. + error while setting database key derivation settings. - gabim teksa ujdiseshin rregullime derivimi kyçi baze të dhënash. + File %1 already exists. @@ -7788,161 +6706,9 @@ Doni të mbishkruhet? Successfully created new database. U krijua me sukses bazë e re të dhënash. - - Unset the password for the database. - Hiqe fjalëkalimin për bazën e të dhënave. - - - Unset the key file for the database. - Hiqe kartelën e kyçit për bazën e të dhënave. - - - Edit a database. - Përpunoni një bazë të dhënash. - - - Cannot use %1 and %2 at the same time. - S’mund të përdoret %1 dhe %2 në të njëjtën kohë. - - - Could not change the database key. - S’u ndryshua dot kyçi i bazës së të dhënave. - - - Database was not modified. - Baza e të dhënave s’u ndryshua. - - - Writing the database failed: %1 - Shkrimi te baza e të dhënave dështoi: %1 - - - Successfully edited the database. - Baza e të dhënave u përpunua me sukses. - - - Cannot remove password: The database does not have a password. - S’hiqet dot fjalëkalim: Baza e të dhënave s’ka fjalëkalim. - - - Cannot remove file key: The database does not have a file key. - S’hiqet dot kyç kartele: Baza e të dhënave s’ka kyç kartele. - - - Loading the new key file failed: %1 - Dështoi ngarkimi i kartelës së re të kyçit: %1 - - - Found unexpected Key type %1 - U gjet lloj i papritur %1 Kyçi - - - Cannot remove all the keys from a database. - S’mund të hiqen krejt kyçet nga një bazë të dhënash. - - - Show a database's information. - Shfaq hollësi të një baze të dhënash. - - - UUID: - UUID: - - - Name: - Emër: - - - Description: - Përshkrim: - - - Cipher: - Shifër: - - - KDF: - FDK: - - - Recycle bin is enabled. - Koshi i hedhurinave është aktivizuar. - - - Recycle bin is not enabled. - Koshi i hedhurinave s’është aktivizuar. - - - Location - Vendndodhje - - - Database created - Baza e të dhënave u krijua - - - Last saved - Ruajtur së fundi më - - - Unsaved changes - Ndryshime të paruajtura - - - yes - po - - - no - jo - - - Number of groups - Numër grupesh - - - Number of entries - Numër zërash - - - Number of expired entries - Numër zërash të skaduar - - - Unique passwords - Fjalëkalime unikë - - - Non-unique passwords - Fjalëkalime jo unikë - - - Maximum password reuse - Maksimum ripërdorimi fjalëkalimi - - - Number of short passwords - Numër fjalëkalimesh të shkurtër - - - Number of weak passwords - Numër fjalëkalimet të dobët - - - Entries excluded from reports - Zëra të përjashtuar nga raporte - - - Average password length - Gjatësi mesatare fjalëkalimesh - - - %1 characters - %1 shenja - Word count for the diceware passphrase. - Numër fjalësh për frazëkalim Diceware. + count @@ -7952,17 +6718,20 @@ Doni të mbishkruhet? Wordlist for the diceware generator. [Default: EFF English] - Listë fjalësh për prodhuesin Diceware. -[Parazgjedhje: EFF English] + Generate a new random diceware passphrase. - Prodho një frazëkalim të ri kuturu Diceware. + Invalid word count %1 Numër i pavlefshëm fjalësh %1 + + The word list is too small (< 1000 items) + + Title for the entry. Titull për zërin. @@ -7981,12 +6750,16 @@ Doni të mbishkruhet? Not changing any field for entry %1. - S’po ndryshohet ndonjë fushë për zërin %1. + Enter new password for entry: Jepni fjalëkalim të ri për zërin: + + Writing the database failed: %1 + Shkrimi te baza e të dhënave dështoi: %1 + Successfully edited entry %1. Zëri %1 u përpunua me sukses. @@ -7997,7 +6770,7 @@ Doni të mbishkruhet? Password for which to estimate the entropy. - Fjalëkalim për të cilin të vlerësohet entropia. + Estimate the entropy of a password. @@ -8021,7 +6794,7 @@ Doni të mbishkruhet? Type: Bruteforce - Lloj: Hyrje me zor + Type: Dictionary @@ -8101,15 +6874,19 @@ Doni të mbishkruhet? *** Password length (%1) != sum of length of parts (%2) *** - *** Gjatësi fjalëkalimi (%1) != shuma e gjatësisë së pjesëve (%2) *** + Exit interactive mode. - Dil nga mënyra me ndërveprim. + Dil nga mënyra me ndërveprim + + + Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. + Exports the content of a database to standard output in the specified format. - Eksportoje lëndën e një bazë të dhënash te output-i standard në formatin e treguar. + Unable to export database to XML: %1 @@ -8129,11 +6906,11 @@ Doni të mbishkruhet? Use lowercase characters - Përdor shenja me të vogla + Përdorni shenja me të vogla Use uppercase characters - Përdor shenja me të mëdha + Përdorni shenja me të mëdhaja Use numbers @@ -8149,7 +6926,7 @@ Doni të mbishkruhet? Exclude character set - Përjashto grup shenjash + chars @@ -8165,7 +6942,7 @@ Doni të mbishkruhet? Include characters from every selected group - Përfshi shenja nga çdo grup i përzgjedhur + Generate a new random password. @@ -8177,7 +6954,7 @@ Doni të mbishkruhet? Invalid password generator after applying all options - Prodhues i pavlefshëm fjalëkalimi, pas aplikimit të tërë mundësive + Display command help. @@ -8189,11 +6966,11 @@ Doni të mbishkruhet? Import the contents of an XML database. - Importo lëndën e një baze të dhënash XML. + Path of the XML database export. - Shteg eksportimi baze të dhënash XML. + Path of the new database. @@ -8207,6 +6984,106 @@ Doni të mbishkruhet? Successfully imported database. U importua me sukses bazë të dhënash. + + Show a database's information. + Shfaq hollësi të një baze të dhënash + + + UUID: + UUID: + + + Name: + Emër: + + + Description: + Përshkrim: + + + Cipher: + Shifër: + + + KDF: + FDK: + + + Recycle bin is enabled. + Koshi i hedhurinave është aktivizuar. + + + Recycle bin is not enabled. + Koshi i hedhurinave s’është aktivizuar. + + + Location + Vendndodhje + + + Database created + Baza e të dhënave u krijua + + + Last saved + + + + Unsaved changes + Ndryshime të paruajtura + + + yes + po + + + no + jo + + + Number of groups + Numër grupesh + + + Number of entries + Numër zërash + + + Number of expired entries + Numër zërash të skaduar + + + Unique passwords + Fjalëkalime unikë + + + Non-unique passwords + Fjalëkalime jo unikë + + + Maximum password reuse + Maksimum ripërdorimi fjalëkalimi + + + Number of short passwords + Numër fjalëkalimesh të shkurtër + + + Number of weak passwords + Numër fjalëkalimet të dobët + + + Entries excluded from reports + Zëra të përjashtuar nga raporte + + + Average password length + Gjatësi mesatare fjalëkalimesh + + + %1 characters + %1 shenja + Unknown command %1 Urdhër %1 i panjohur @@ -8255,23 +7132,23 @@ Urdhra të gatshëm: Use the same credentials for both database files. - Përdor të njëjtat kredenciale për të dyja kartelat e bazës së të dhënave. + Key file of the database to merge from. - Kartelë kyç i bazës së të dhënave prej nga të bëhet përzierja. + Kartelë kyçesh i bazës së të dhënave prej nga të bëhet përzierja. Deactivate password key for the database to merge from. - Çaktivizoje kyçin e fjalëkalimit për bazën e të dhënave prej nga bëhet përzierje. + Only print the changes detected by the merge operation. - Shtyp vetëm ndryshimet e pikasura nga veprimi i përzierjes. + Yubikey slot for the second database. - Vend Yubikey për bazën e dytë të të dhënave. + slot @@ -8353,7 +7230,7 @@ Urdhra të gatshëm: Cannot remove root group from database. - S’hiqet dot grupi rrënjë nga baza e të dhënave. + Successfully recycled group %1. @@ -8377,11 +7254,7 @@ Urdhra të gatshëm: Show the protected attributes in clear text. - Atributet e mbrojtura shfaqi si tekst i lexueshëm. - - - Show all the attributes of the entry. - Shfaq krejt atributet e zërit. + Show the attachments of the entry. @@ -8389,7 +7262,7 @@ Urdhra të gatshëm: 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. - Emrat e atributeve për t’u shfaqur. Kjo mundësi mund të jepet më shumë se një herë, me çdo atribut të shfaqur një për rresht sipas rendit të dhënë. Nëse nuk specifikohen atribute, jepet një përmbledhje e atributeve parazgjedhje. + attribute @@ -8440,21 +7313,14 @@ Urdhra të gatshëm: stop supporting in the future. Please consider generating a new key file. - KUJDES: po përdorni një format të vjetër kartelash kyçi, të cilin KeePassXC-ja mund -të reshtë së mbuluari në të ardhmen. - -Ju lutemi, shihni mundësinë e prodhimit të një kartele të re kyçi. + Invalid YubiKey slot %1 - Vend i pavlefshëm për YubiKey %1 + Invalid YubiKey serial %1 - Serial i pavlefshëm për YubiKey %1 - - - Please present or touch your YubiKey to continue. @@ -8463,7 +7329,7 @@ Ju lutemi, shihni mundësinë e prodhimit të një kartele të re kyçi. Do you want to create a database with an empty password? [y/N]: - Doni të krijohet një bazë të dhënash me një fjalëkalim të zbrazët? [y/N]: + Repeat password: @@ -8475,29 +7341,28 @@ Ju lutemi, shihni mundësinë e prodhimit të një kartele të re kyçi. No program defined for clipboard manipulation - S’ka të përcaktuar program për manipulim të papastre + All clipping programs failed. Tried %1 - Dështuan krejt programet e kopjimit në të papastër. U provuan %1 - + Creating KeyFile %1 failed: %2 - Krijimi i Kartelës së kyçit %1 dështoi: %2 + Loading KeyFile %1 failed: %2 - Ngarkimi Kartelës së kyçit %1 dështoi: %2 + HIBP file, line %1: parse error - Kartelë HIBP, rreshti %1: gabim analizimi + To use okon, you must provide a post-processed file (e.g. file.okon) - Që të përdorni okon, duhet të jepni një kartelë të pas-përpunuar (p.sh. kartelë.okon) + Could not start okon process: %1 @@ -8505,11 +7370,11 @@ Ju lutemi, shihni mundësinë e prodhimit të një kartele të re kyçi. Error: okon process did not finish - Gabim: procesi okon s’përfundoi + Failed to load okon processed database: %1 - S’u arrit të ngarkohet bazë të dhënash e përpunuar me okon: %1 + Very weak password @@ -8525,7 +7390,7 @@ Ju lutemi, shihni mundësinë e prodhimit të një kartele të re kyçi. Used in %1/%2 - Përdorur te %1/%2 + Password is used %1 time(s) @@ -8549,7 +7414,7 @@ Ju lutemi, shihni mundësinë e prodhimit të një kartele të re kyçi. Password expires in %1 day(s) - Fjalëkalim skadon pas %1 diteFjalëkalim skadon pas %1 ditësh + Fjalëkalim skadon pas %1 ditëFjalëkalim skadon pas %1 ditë Password will expire soon @@ -8561,7 +7426,7 @@ Ju lutemi, shihni mundësinë e prodhimit të një kartele të re kyçi. Build Type: %1 - Lloj Montimi: %1 + Revision: %1 @@ -8569,7 +7434,7 @@ Ju lutemi, shihni mundësinë e prodhimit të një kartele të re kyçi. Distribution: %1 - Shpërndarje: %1 + Debugging mode is disabled. @@ -8583,9 +7448,7 @@ Ju lutemi, shihni mundësinë e prodhimit të një kartele të re kyçi.Operating system: %1 CPU architecture: %2 Kernel: %3 %4 - Sistem operativ: %1 -Arkitekturë CPU-je: %2 -Kernel: %3 %4 + Auto-Type @@ -8597,7 +7460,7 @@ Kernel: %3 %4 KeeShare - KeeShare + YubiKey @@ -8645,7 +7508,7 @@ Kernel: %3 %4 Botan library must be at least %1, found %2.%3.%4 - Bilbioteka Botan duhet të jetë të paktën %1, u gjet %2.%3.%4 + Cryptographic libraries: @@ -8657,15 +7520,15 @@ Kernel: %3 %4 Argon2%1 (%2 rounds, %3 KB) - Argon2%1 (%2 raunde, %3 KB) + SymmetricCipher::init: Invalid cipher mode. - SymmetricCipher::init: Mënyrë shifre e pavlefshme. + SymmetricCipher::init: Invalid IV size of %1 for %2. - SymmetricCipher::init: Madhësi e pavlefshme IV prej %1 për %2. + Cipher not initialized prior to use. @@ -8673,11 +7536,11 @@ Kernel: %3 %4 Cannot process 0 length data. - S’mund të përpunohen të dhëna me gjatësi 0. + unknown executable (DBus address %1) - i ekzekutueshëm i panjohur (adresë DBus %1) + %1 (invalid executable path) @@ -8695,6 +7558,18 @@ Kernel: %3 %4 file empty kartelë e zbrazët + + malformed string + varg i keqformuar + + + missing closing quote + mungon kllapë mbyllëse + + + %1: (row, col) %2,%3 + + AES 256-bit AES 256-bit @@ -8725,15 +7600,15 @@ Kernel: %3 %4 Existing single-instance lock file is invalid. Launching new instance. - Kartela e kyçjes për instancë njëshe ekzistuese është e pavlefshme. Po niset instancë e re. + The lock file could not be created. Single-instance mode disabled. - S’u krijua dot kartela e kyçjes. U çaktivizua mënyra instancë njëshe. + Clearing the clipboard in %1 second(s)… - Po spastrohet e papastra pas %1 sekonde…Po spastrohet e papastra pas %1 sekondash… + Group @@ -8769,17 +7644,17 @@ Kernel: %3 %4 Benchmark %1 delay - Vlerëso vonesë %1 + %1 ms milliseconds - %1 ms%1 ms + %1 s seconds - %1 s%1 s + Do you really want to delete the entry "%1" for good? @@ -8787,7 +7662,7 @@ Kernel: %3 %4 Do you really want to delete %n entry(s) for good? - Doni vërtet të fshihet përgjithmonë %n zë?Doni vërtet të fshihet përgjithmonë %n zëra? + Doni vërtet të fshihet përgjithmonë %n zë(ra)?Doni vërtet të fshihet përgjithmonë %n zë(ra)? Delete entry(s)? @@ -8795,11 +7670,11 @@ Kernel: %3 %4 Do you really want to move entry "%1" to the recycle bin? - Doni vërtet të shpihet zëri “%1” te koshi i riciklimeve? + Do you really want to move %n entry(s) to the recycle bin? - Doni vërtet të shpihet %n zë te koshi i riciklimeve?Doni vërtet të shpihet %n zëra te koshi i riciklimeve? + Move entry(s) to recycle bin? @@ -8811,7 +7686,7 @@ Kernel: %3 %4 Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? - Zëri “%1” ka %2 referencë(a). Doni të mbishkruhen referencat me vlera, të anashkalohet ky zë, apo të fshihet sido qoftë?Zëri “%1” ka %2 referenca. Doni të mbishkruhen referencat me vlera, të anashkalohet ky zë, apo të fshihet sido qoftë? + User name @@ -8839,19 +7714,19 @@ Kernel: %3 %4 Checksum mismatch! Key file may be corrupt. - Mospërputhje checksum-i! Kartela e kyçit mund të jetë e dëmtuar. + Unexpected key file data! Key file may be corrupt. - Të dhëna të papritura kartele kyçi! Kartela e kyçit mund të jetë e dëmtuar. + KeePassXC - cross-platform password manager - KeePassXC - përgjegjës ndërplatformësh fjalëkalimesh + filenames of the password databases to open (*.kdbx) - emrat e kartelave të bazës së të dhënave të fjalëkalimeve për t’u hapur (*.kdbx) + path to a custom config file @@ -8873,18 +7748,22 @@ Kernel: %3 %4 read password of the database from stdin fjalëkalimin e bazës së të dhënave lexoje prej stdin-it + + allow app screen recordering and screenshots + + + + Locked databases. + + Database failed to lock. - S’u arrit të kyçej bazë të dhënash. + S’u arrit të kyçej bazë të dhënash Another instance of KeePassXC is already running. Ka tashmë në xhirim e sipër një instancë të KeePassXC-së. - - KeePassXC is not running. No open database to lock - KeePassXC-ja s’po xhiron. S’ka të hapur bazë të dhënash, që të kyçet - Fatal error while testing the cryptographic functions. Gabim fatal teksa testoheshin funksione kriptografike. @@ -8909,15 +7788,15 @@ Kernel: %3 %4 Failed to create Windows Hello credential. - S’u arrit të krijohet kredencial Windows Hello. + Failed to sign challenge using Windows Hello. - S’u arrit të nënshkruhet sfidë duke përdorur Windows Hello. + Warning: Failed to block screenshot capture on a top-level window. - Kujdes: S’u arrit të bllokohet bërje fotoje ekrani në një dritare të nivelit të epërm. + Invalid Cipher @@ -8928,301 +7807,70 @@ Kernel: %3 %4 FDK i Pavlefshëm - Access to all entries is denied - Është mohuar hyrja te krejt zërat + Please present or touch your YubiKey to continue. + - allow screenshots and app recording (Windows/macOS) - lejo foto ekrani dhe regjistrim nga aplikacione (Windows/macOS) + Show all the attributes of the entry. + Shfaq krejt atributet e zërit. + + + Edit a database. + Përpunoni një bazë të dhënash. + + + Could not change the database key. + S’u ndryshua dot kyçi i bazës së të dhënave. + + + Database was not modified. + Baza e të dhënave s’u ndryshua. + + + Successfully edited the database. + Baza e të dhënave u përpunua me sukses. + + + Loading the new key file failed: %1 + Dështoi ngarkimi i kartelës së re të kyçit: %1 + + + Unset the password for the database. + Hiqe fjalëkalimin për bazën e të dhënave. + + + Unset the key file for the database. + Hiqe kartelën e kyçit për bazën e të dhënave. + + + Cannot use %1 and %2 at the same time. + S’mund të përdoret %1 dhe %2 në të njëjtën kohë. + + + Cannot remove all the keys from a database. + + + + Cannot remove password: The database does not have a password. + + + + Cannot remove file key: The database does not have a file key. + + + + Found unexpected Key type %1 + U gjet lloj i papritur %1 Kyçi Set the key file for the database. -This option is deprecated, use --set-key-file instead. - Ujdisni kartelën kyç për bazën e të dhënave. -Kjo mundësi është nxjerrë nga përdorimi, në vend të saj përdorni --set-key-file. - - - Databases have been locked. - Bazat e të Dhënave janë kyçur. - - - Attestation not supported +This options is deprecated, use --set-key-file instead. - Credential is excluded - Kredenciali është përjashtuar - - - Passkeys request canceled - Kërkesa për kyçkalime u anulua - - - Invalid user verification - Verifikim i pavlefshëm përdoruesi - - - Empty public key - Kyç publik i zbrazët - - - Invalid URL provided - U dha URL e pavlefshme - - - Passkeys - Kyçkalime - - - AES initialization failed - Dështoi gatitja AES - - - AES encrypt failed - Fshehtëzimi AES dështoi - - - Failed to store in Linux Keyring - S’u arrit të depozitohej në Varg Kyçesh Linux - - - Polkit returned an error: %1 - Polkit u përgjigj me një gabim: %1 - - - Could not locate key in keyring - S’u lokalizua dot kyç te varg kyçesh - - - Could not read key in keyring - S’u lexua dot kyç te varg kyçesh - - - AES decrypt failed - Shfshehtëzimi AES dështoi - - - No Polkit authentication agent was available - S’ka agjent mirëfilltësimesh Polkit - - - Polkit authorization failed - Autorizimi Polkit dështoi - - - No Quick Unlock provider is available + KeePassXC is not running. No open database to lock - - Failed to init KeePassXC crypto. - S’u arrit të gatitet kriptografi KeePassXC-je. - - - Failed to encrypt key data. - S’u arrit të fshehtëzohen të dhëna kyçi. - - - Failed to get Windows Hello credential. - S’u arrit të merret kredencial Windows Hello. - - - Failed to decrypt key data. - S’u arrit të shfshehtëzohen të dhëna kyçi. - - - Origin is empty or not allowed - Origjina është e zbrazët, ose nuk lejohet - - - Effective domain is not a valid domain - Përkatësia efektive s’është përkatësi e vlefshme - - - Origin and RP ID do not match - ID-të origjinës dhe RP s’përputhen - - - No supported algorithms were provided - S’u dhanë algoritme të mbuluar - - - Wait for timer to expire - Prisni të skadojë kohëmatësi - - - Challenge is shorter than required minimum length - Sfida është më e shkurtër se gjatësi minimum e domosdoshme - - - user.id does not match the required length - user.id nuk plotëson gjatësinë e domosdoshme - - - Favorite - Tag for favorite entries - Të parapëlqyer - - - File does not exist. - Kartela s’ekziston. - - - Cannot open file: %1 - S’hapet dot kartelë: %1 - - - Cannot parse file: %1 at position %2 - S’analizohet dot kartelë: %1 në pozicionin %2 - - - Failed to decrypt json file: %1 - S’u arrit të shfshehtëzohet kartelë json: %1 - - - Invalid encKeyValidation field - Fushë encKeyValidation e pavlefshme - - - Invalid cipher list within encKeyValidation field - Listë e pavlefshme shifre brenda fushës encKeyValidation - - - Wrong password - Fjalëkalim i gabuar - - - Invalid encrypted data field - Fushë e pavlefshme të dhënash të fshehtëzuara - - - Invalid cipher list within encrypted data field - Listë e pavlefshme shifre brenda fushe të dhënash të fshehtëzuara - - - Cannot initialize cipher - S’gatitet dot shifër - - - Cannot decrypt data - S’shfshehtëzohen dot të dhëna - - - Bitwarden Import - Importim Bitwarden - - - Archived - Tag for archived entries - Të arkivuar - - - Invalid 1PUX file format: Not a valid ZIP file. - Format i pavlefshëm kartele 1PUX: S’është kartelë ZIP e vlefshme. - - - Invalid 1PUX file format: Missing export.data - Format i pavlefshëm kartele 1PUX: Mungojnë export.data - - - 1Password Import - Importim 1Password - - - Enter Shortcut - Jepni Shkurtore - - - Action - Veprim - - - Shortcuts - Shkurtore - - - Unknown passkeys error - Gabim i panjohur kyçkalimesh - - - Invalid KDF iterations, cannot decrypt json file - Numër përsëritjesh KDF i pavlefshëm, s’mund të shfshehtëzohet kartelë json - - - Unsupported format, ensure your Bitwarden export is password-protected - Format i pambuluar, sigurohuni se eksportimi juaj Bitwarden është i mbrojtur me fjalëkalim - - - Only PBKDF and Argon2 are supported, cannot decrypt json file - Mbulohen vetëm PBKDF dhe Argon2, s’mund të shfshehtëzohet kartelë json - - - Reset Shortcuts - Riktheji Shkurtoret te Parazgjedhjet - - - Double click an action to change its shortcut - Që t’i ndryshoni shkurtoren, dyklikoni mbi një veprim - - - Filter... - Filtrojini… - - - Shortcut Conflict - Përplasje Shkurtoresh - - - Shortcut %1 conflicts with '%2'. Overwrite shortcut? - Shkurtorja %1 përplaset me “%2”. Të mbishkruhet shkurtorja? - - - Cannot generate valid passphrases because the wordlist is too short - S’prodhohen dot frazëkalime të vlefshëm, ngaqë lista e fjalëve është shumë e shkurtër - - - Encrypted files are not supported. - - - - Proton Pass Import - - - - Delete plugin data? - Të fshihen të dhëna shtojce? - - - Delete plugin data from Entry(s)? - Të fshihen të dhëna shtojce nga Zëri?Të fshihen të dhëna shtojce nga Zërat? - - - Passkey - Kyçkalim - - - Format to use when exporting. Available choices are 'xml', 'csv' or 'html'. Defaults to 'xml'. - - - - start minimized to the system tray - - - - malformed string, possible unescaped delimiter - - - - missing closing delimiter - - - - %1, row: %2, column: %3 - - - - Tags - Etiketa - QtIOCompressor @@ -9258,39 +7906,20 @@ Kjo mundësi është nxjerrë nga përdorimi, në vend të saj përdorni --set-k Gabim i brendshëm zlib-i: - - RemoteHandler - - Command `%1` did not finish in time. Process was killed. - Urdhri `%1` s’përfundoi në kohë. Procesi u asgjësua. - - - Failed to upload merged database. Command `%1` did not finish in time. Process was killed. - S’u arrit të ngarkohej bazë të dhënash. Urdhri `%1` s’përfundoi në kohë. Procesi u asgjësua. - - - Invalid download parameters provided. - U dhanë parametra të pavlefshëm shkarkimi. - - - Command `%1` failed to download database. - Urdhri `%1` s’arriti të shkarkojë bazën e të dhënave. - - - Invalid database pointer or upload parameters provided. - U dha shteg naze të dhënash, ose parametra ngarkimi të pavlefshëm. - - - Command `%1` exited with status code: %2 - Urdhri `%1` mbaroi me kod gjendjeje: %2 - - - Failed to upload merged database. Command `%1` exited with status code: %2 - S’u arritën të ngarkohet baza e të dhënave e përzierë. Urdhri `%1` mbaroi me kod gjendjeje: %2 - - ReportsWidgetBrowserStatistics + + Exclude expired entries from the report + + + + Show only entries which have URL set + + + + Show only entries which have browser settings in custom data + + Double-click entries to edit. Që t’i përpunoni, dyklikoni mbi zëra. @@ -9317,19 +7946,19 @@ Kjo mundësi është nxjerrë nga përdorimi, në vend të saj përdorni --set-k (Excluded) - (Përjashtuar) + (Përjashtuar) This entry is being excluded from reports - Ky zë po përjashtohet nga raporte + Please wait, browser statistics is being calculated… - Ju lutemi, prisni, statistikat po llogariten… + No entries with a URL, or none has browser extension settings saved. - S’ka zëra me URL, ose asnjë prej tyre s’ka të ruajtura rregullime zgjerimi shfletuesi. + Title @@ -9355,68 +7984,59 @@ Kjo mundësi është nxjerrë nga përdorimi, në vend të saj përdorni --set-k Exclude from reports Përjashto nga raporte - - Expire Entry(s)… - - - - Only show entries that have a URL - Shfaq vetëm zëra që kanë një URL - - - Only show entries that have been explicitly allowed or denied - Shfaq vetëm zëra që janë lejuar, ose mohuar shprehimisht - - - Show expired entries - Shfaq zëra të skaduar - - - (Expired) - (Skaduar) - - - Delete plugin data from Entry(s)… - Fshini të dhëna shtojce nga Zëri…Fshini të dhëna shtojce nga Zëra… - ReportsWidgetHealthcheck - Show expired entries - Shfaq zëra të skaduar + Exclude expired entries from the report + - (Expired) - (Skaduar) + Also show entries that have been excluded from reports + Hover over reason to show additional details. Double-click entries to edit. - Për hollësi shtesë, kalojeni kursorin sipër arsyeje. Për t’i përpunuar, dyklikoni mbi zëra. + + + + Bad + Password quality + I keq Bad — password must be changed I keq — fjalëkalimi duhet ndryshuar + + Poor + Password quality + Shumë i dobët + Poor — password should be changed Shumë i dobët — fjalëkalimi duhet ndryshuar + + Weak + Password quality + I dobët + Weak — consider changing the password I dobët — shihni mundësinë e ndryshimit të fjalëkalimit (Excluded) - (Përjashtuar) + (Përjashtuar) This entry is being excluded from reports - Ky zë po përjashtohet nga raporte + Please wait, health data is being calculated… - Ju lutemi, prisni, të dhënat mbi shëndetin po llogariten… + Congratulations, everything is healthy! @@ -9450,20 +8070,12 @@ Kjo mundësi është nxjerrë nga përdorimi, në vend të saj përdorni --set-k Exclude from reports Përjashto nga raporte - - Expire Entry(s)… - - - - Show entries that have been excluded from reports - Shfaq zëra që janë përjashtuar nga raporte - ReportsWidgetHibp CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. - HAPNI SYTË: Ky raport lyp dërgim informacioni te shërbimi internetor “Have I Been Pwned” (https://haveibeenpwned.com). Nëse vazhdoni, për fjalëkalimet e bazës suaj të të dhënave do të prodhohen hashe kriptografikë dhe pesë shenjat e para të këtyre hasheve do t’i dërgohen në mënyrë të siguruar këtij shërbimi. Baza juaj e të dhënave mbetet e siguruar dhe s’mund të rindërtohet nisur nga ky informacion. Por, numri i fjalëkalimeve që dërgoni dhe adresa juaj IP do t’i ekspozohen këtij shërbimi. + Perform Online Analysis @@ -9471,11 +8083,11 @@ Kjo mundësi është nxjerrë nga përdorimi, në vend të saj përdorni --set-k Also show entries that have been excluded from reports - Shfaq gjithashtu zëra që janë përjashtuar nga raporte + This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. - Ky montim i KeePassXC-së s’ka funksione rrjeti. Punimi në rrjet është i domosdoshëm për të kontrolluar fjalëkalimet tuaj me bazat e të dhënave të shërbimit “I Been Pwned”. + Congratulations, no exposed passwords! @@ -9495,11 +8107,11 @@ Kjo mundësi është nxjerrë nga përdorimi, në vend të saj përdorni --set-k (Excluded) - (Përjashtuar) + (Përjashtuar) This entry is being excluded from reports - Ky zë po përjashtohet nga raporte + once @@ -9553,83 +8165,12 @@ Kjo mundësi është nxjerrë nga përdorimi, në vend të saj përdorni --set-k Exclude from reports Përjashto nga raporte - - Expire Entry(s)… - - - - - ReportsWidgetPasskeys - - Export - Eksporto - - - Import - Importo - - - List of entry URLs - Listë URL-sh zëri - - - Title - Titull - - - Path - Shteg - - - Username - Emër përdoruesi - - - URLs - URL-ra - - - Edit Entry… - Përpunoni Zë… - - - Delete Entry(s)… - Fshini Zë…Fshini Zëra… - - - Relying Party - - - - Show expired entries - Shfaq zëra të skaduar - - - (Expired) - (Skaduar) - - - Export Confirmation - Ripohim Eksportimi - - - The passkey file will be vulnerable to theft and unauthorized use, if left unsecured. Are you sure you want to continue? - Kartela e kyçkalimit do të jetë e cenueshme përballë vjedhjesh dhe përdorimi të paautorizuar. Jeni i sigurt se doni të vazhdohet? - - - Please wait, list of entries with passkeys is being updated… - Ju lutemi, prisni, lista e zërave me kyçkalime po përditësohet… - - - No entries with passkeys. - S’ka zëra me kyçkalime. - ReportsWidgetStatistics Hover over lines with error icons for further information. - Për informacion të mëtejshëm, kaloni kursorin përsipër rreshta me ikona gabimesh. + Name @@ -9641,7 +8182,7 @@ Kjo mundësi është nxjerrë nga përdorimi, në vend të saj përdorni --set-k Please wait, database statistics are being calculated… - Ju lutemi, prisni, statistikat për bazë të dhënash po llogariten… + Database name @@ -9661,7 +8202,7 @@ Kjo mundësi është nxjerrë nga përdorimi, në vend të saj përdorni --set-k Last saved - Ruajtur së fundi më + Unsaved changes @@ -9677,7 +8218,7 @@ Kjo mundësi është nxjerrë nga përdorimi, në vend të saj përdorni --set-k The database was modified, but the changes have not yet been saved to disk. - Baza e të dhënave qe ndryshuar, por ndryshimet s’janë ruajtur ende në disk. + Number of groups @@ -9693,7 +8234,7 @@ Kjo mundësi është nxjerrë nga përdorimi, në vend të saj përdorni --set-k The database contains entries that have expired. - Baza e të dhënave përmban zëra që kanë skaduar. + Unique passwords @@ -9705,7 +8246,7 @@ Kjo mundësi është nxjerrë nga përdorimi, në vend të saj përdorni --set-k More than 10% of passwords are reused. Use unique passwords when possible. - Më shumë se 10% e fjalëkalimeve janë ripërdorur. Përdorni fjalëkalime unikë, kur do të mundet. + Maximum password reuse @@ -9713,7 +8254,7 @@ Kjo mundësi është nxjerrë nga përdorimi, në vend të saj përdorni --set-k Some passwords are used more than three times. Use unique passwords when possible. - Disa fjalëkalime janë përdorur më shumë se tre herë. Përdorni fjalëkalime unikë, kur do të mundet. + Number of short passwords @@ -9729,7 +8270,7 @@ Kjo mundësi është nxjerrë nga përdorimi, në vend të saj përdorni --set-k Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. - Rekomando përdorimin e fjalëkalimeve të gjatë, kuturu, me vlerësim “i mirë”, ose “i shkëlqyer”. + Entries excluded from reports @@ -9737,7 +8278,7 @@ Kjo mundësi është nxjerrë nga përdorimi, në vend të saj përdorni --set-k Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. - Po përjashtohen zëra nga raporte, p.sh., ngaqë dihet se kanë fjalëkalim të dobët, s’është doemos një problem, por duhet t’i vëzhgoni. + Average password length @@ -9749,7 +8290,7 @@ Kjo mundësi është nxjerrë nga përdorimi, në vend të saj përdorni --set-k Average password length is less than ten characters. Longer passwords provide more security. - Gjatësia mesatare e fjalëkalimeve është më pak se dhjetë shenja. Fjalëkalimet më të gjatë japin më tepër siguri. + @@ -9764,15 +8305,15 @@ Kjo mundësi është nxjerrë nga përdorimi, në vend të saj përdorni --set-k No agent running, cannot add identity. - S’ka agjent në punë, s’shtohet dot identitet. + Key identity ownership conflict. Refusing to add. - Përplasje pronësie identiteti kyçi. S’po pranohet shtim. + Agent refused this identity. Possible reasons include: - Agjenti nuk e pranoi këtë identitet. Në arsyet e mundshme përfshihen: + The key has already been added. @@ -9780,30 +8321,22 @@ Kjo mundësi është nxjerrë nga përdorimi, në vend të saj përdorni --set-k Restricted lifetime is not supported by the agent (check options). - Jetëgjatësi e kufizuar nuk mbulohet nga agjenti (shihni mundësitë). - - - A confirmation request is not supported by the agent (check options). - Një kërkesë ripohimi s’mbulohet nga agjenti (shihni mundësitë). - - - Security keys are not supported by the agent or the security key provider is unavailable. - Kyçet e sigurisë nuk mbulohen nga agjenti, ose shërbimi i kyçeve të sigurisë s’është i kapshëm. - - - No agent running, cannot remove identity. - S’ka agjent në punë, s’hiqet dot identitet. - - - No agent running, cannot list identities. - S’ka agjent në punë, s’paraqiten dot identitete. - - - Failed to remove all SSH identities from agent. - All SSH identities removed from agent. + A confirmation request is not supported by the agent (check options). + + + + Security keys are not supported by the agent or the security key provider is unavailable. + + + + No agent running, cannot remove identity. + + + + No agent running, cannot list identities. @@ -9815,11 +8348,11 @@ Kjo mundësi është nxjerrë nga përdorimi, në vend të saj përdorni --set-k Search terms are as follows: [modifiers][field:]["]term["] - Termat e kërkimit janë si vijon: [ndryshues][fushë:]["]term["] + Every search term must match (ie, logical AND) - Duhet të ketë përkim për krejt termat e kërkimit (d.m.th., DHE logjike) + Modifiers @@ -9851,7 +8384,7 @@ Kjo mundësi është nxjerrë nga përdorimi, në vend të saj përdorni --set-k match one - përputhje me një + logical OR @@ -9872,10 +8405,6 @@ Kjo mundësi është nxjerrë nga përdorimi, në vend të saj përdorni --set-k Search Help Ndihmë Kërkimi - - Save Search - Ruaje Kërkimin - Search (%1)… Search placeholder text, %1 is the keyboard shortcut @@ -9883,12 +8412,16 @@ Kjo mundësi është nxjerrë nga përdorimi, në vend të saj përdorni --set-k Case sensitive - Siç është shkruar + Limit search to selected group Kufizoje kërkimin te grupi i përzgjedhur + + Save Search + Ruaje Kërkimin + SettingsClientModel @@ -9932,7 +8465,7 @@ Kjo mundësi është nxjerrë nga përdorimi, në vend të saj përdorni --set-k Enable KeepassXC Freedesktop.org Secret Service integration - Aktivizo integrimin me Shërbimin e Fshehtë KeepassXC të Freedesktop.org + General @@ -9940,23 +8473,39 @@ Kjo mundësi është nxjerrë nga përdorimi, në vend të saj përdorni --set-k Show notification when passwords are retrieved by clients - Shfaq njoftim, kur merren fjalëkalime nga klientë + <html><head/><body><p>If enabled, any attempt to read a password must be confirmed. Otherwise, clients can read passwords without confirmation when the database is unlocked.</p><p>This option only covers the access to the password of an entry. Clients can always enumerate the items of exposed databases and query their attributes.</p></body></html> - <html><head/><body><p>Në u aktivizoftë, çdo përpjekje për të lexuar një fjalëkalim duhet ripohuar. Përndryshe, klientë mund të lexojnë fjalëkalime pa u ripohuar, kur baza e të dhënave është e shkyçur.</p><p>Kjo mundësi mbulon vetëm hyrjen te fjalëkalimi i një zëri. Klientët munden përherë t’i numërtojnë objektet e bazave të ekspozuara të të dhënave dhe të bëjnë kërkim te atributet e tyre.</p></body></html> + Confirm when passwords are retrieved by clients - Kërko për ripohim, kur merren fjalëkalime nga klientë + + + + <html><head/><body><p><span style=" + font-family:'-apple-system','BlinkMacSystemFont','Segoe UI','Helvetica','Arial','sans-serif','Apple Color + Emoji','Segoe UI Emoji'; font-size:14px; color:#24292e; background-color:#ffffff;">This setting does + not override disabling recycle bin prompts</span></p></body></html> + + Confirm when clients request entry deletion - Kërko për ripohim, kur klientë kërkojnë fshirje zëri + + + + <html><head/><body><p>This improves compatibility with certain applications + which search for password without unlocking the database first.</p><p>But enabling this may also + crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a + different value set in applications.)</p></body></html> + + Prompt to unlock database before searching - Shfaq hap shkyçjeje baze të dhënash para kërkimi + Exposed database groups: @@ -9976,15 +8525,7 @@ Kjo mundësi është nxjerrë nga përdorimi, në vend të saj përdorni --set-k Save current changes to activate the plugin and enable editing of this section. - Që të aktivizohet shtojca dhe të aktivizohet përpunimi i kësaj pjese, ruani ndryshimet e tanishme. - - - <html><head/><body><p>This setting does not override disabling recycle bin prompts </p></body></html> - <html><head/><body><p>Ky zë s’anashkalon çaktivizim dialogësh koshi riciklimi </p></body></html> - - - <html><head/><body><p>This improves compatibility with certain applications which search for password without unlocking the database first.</p><p>But enabling this may also crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a different value set in applications.) </p></body></html> - <html><head/><body><p>Kjo përmirëson përputhjen me disa aplikacione të cilët kërkojnë për fjalëkalime pa shkyçur së pari bazën e të dhënave.</p><p>Por aktivizimi i kësaj mund të sjellë vithisjen e klientit, nëse baza e të dhënave s’mund të shkyçet brenda një afati të caktuar mbarimi kohe. (Zakonisht 25s, por mund të jetë vlerë e vendosur ndryshe te aplikacionet.) </p></body></html> + @@ -10072,11 +8613,11 @@ Kjo mundësi është nxjerrë nga përdorimi, në vend të saj përdorni --set-k Multiple import source path to %1 in %2 - Shteg burimesh të shumtë importimi te %1 në %2 + Conflicting export target path %1 in %2 - Shteg objektivi eksportimi me përplasje %1 në %2 + Export to %1 failed (%2) @@ -10093,14 +8634,6 @@ Kjo mundësi është nxjerrë nga përdorimi, në vend të saj përdorni --set-k TagModel - - Clear Search - Spastro Kërkimin - - - All Entries - Krejt Zërat - Expired Ka skaduar @@ -10109,6 +8642,14 @@ Kjo mundësi është nxjerrë nga përdorimi, në vend të saj përdorni --set-k Weak Passwords Fjalëkalim i Dobët + + All Entries + Krejt Zërat + + + Clear Search + Spastro Kërkimin + TagView @@ -10126,7 +8667,7 @@ Kjo mundësi është nxjerrë nga përdorimi, në vend të saj përdorni --set-k Remove tag "%1" from all entries in this database? - Të hiqet etiketa “%1” prej krejt zërave te kjo bazë të dhënash? + @@ -10137,23 +8678,23 @@ Kjo mundësi është nxjerrë nga përdorimi, në vend të saj përdorni --set-k Copy - Kopjoje + Expires in <b>%n</b> second(s) - Skadon pas <b>%n</b> sekondeSkadon pas <b>%n</b> sekondash + Skadon pas <b>%n</b> sekonde(ash)Skadon pas <b>%n</b> sekonde(ash) TotpExportSettingsDialog Copy - Kopjoje + NOTE: These TOTP settings are custom and may not work with other authenticators. TOTP QR code dialog warning - SHËNIM: Këto rregullime TOTP janë vetjake dhe mund të mos punojnë me mirëfilltësues të tjerë. + There was an error creating the QR code. @@ -10213,11 +8754,11 @@ Kjo mundësi është nxjerrë nga përdorimi, në vend të saj përdorni --set-k sec Seconds - sek + sek Code size: - Madhësi kodi: + Madhësi kodi digits @@ -10230,8 +8771,7 @@ Kjo mundësi është nxjerrë nga përdorimi, në vend të saj përdorni --set-k You have entered an invalid secret key. The key must be in Base32 format. Example: JBSWY3DPEHPK3PXP - Keni dhënë një kyç të fshehtë të pavlefshëm. Kyçi duhet të jetë në formatin Base32. -Shembull: JBSWY3DPEHPK3PXP + Confirm Remove TOTP Settings @@ -10269,11 +8809,11 @@ Shembull: JBSWY3DPEHPK3PXP An error occurred when trying to retrieve update information, please try again later. - Ndodhi një gabim, kur provohej të përditësohej informacion, ju lutemi, riprovoni më vonë. + <strong>A new version is available.</strong><br/>KeePassXC %1 can be <a href="https://keepassxc.org/download/">downloaded here</a>. - <strong>Ka të gatshëm një version të ri.</strong><br/>KeePassXC %1 mund të <a href="https://keepassxc.org/download/">shkarkohet këtu</a>. + You have the latest version of KeePassXC @@ -10284,7 +8824,27 @@ Shembull: JBSWY3DPEHPK3PXP WelcomeWidget Start storing your passwords securely in a KeePassXC database - Filloni t’i depozitoni fjalëkalimet tuaj në mënyrë të siguruar te një bazë të dhënash KeePassXC + + + + Create new database + Krijoni bazë të re të dhënash + + + Open existing database + Hap bazë ekzistuese të dhënash + + + Import from KeePass 1 + Importo prej Keepass 1 + + + Import from 1Password + Importo prej 1Password + + + Import from CSV + Importo prej CSV Recent databases @@ -10298,18 +8858,6 @@ Shembull: JBSWY3DPEHPK3PXP Welcome to KeePassXC %1 Mirë se vini te KeePassXC %1 - - Create Database - Krijo Bazë të Dhënash - - - Open Database - Hap Bazë të Dhënash - - - Import File - Importo Kartelë - WinUtils @@ -10326,22 +8874,53 @@ Shembull: JBSWY3DPEHPK3PXP S’u regjistrua dot shkurtore globale + + WindowsHello + + Failed to init KeePassXC crypto. + S’u arrit të gatitet kriptografi KeePassXC-je + + + Failed to encrypt key data. + S’u arrit të fshehtësohen të dhëna kyçi. + + + Failed to get Windows Hello credential. + + + + Failed to decrypt key data. + S’u arrit të shfshehtësohen të dhëna kyçi. + + YubiKey + + %1 No interface, slot %2 + + General: Të përgjithshme: Could not find interface for hardware key with serial number %1. Please connect it to continue. - S’u gjet dot ndërfaqe për kyçin hardware me numrin serial %1. Ju lutemi, që të vazhdohet, lidheni. + YubiKeyEditWidget + + Refresh hardware tokens + + + + Refresh + Rifreskoje + Hardware key slot selection - Përzgjedhje vendi kyçi hardware + Could not find any hardware keys! @@ -10349,7 +8928,7 @@ Shembull: JBSWY3DPEHPK3PXP Selected hardware key slot does not support challenge-response! - Kanali i përzgjedhur për kyç hardware nuk mbulon sfidë-përgjigje! + Challenge-Response @@ -10371,6 +8950,10 @@ Shembull: JBSWY3DPEHPK3PXP Challenge-Response set, click to change or remove Pyetje-Përgjigje u ujdis, klikoni që ta ndryshoni, ose hiqni + + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + + Detecting hardware keys… Po pikasen kyçe hardware… @@ -10379,32 +8962,35 @@ Shembull: JBSWY3DPEHPK3PXP No hardware keys detected S’u pikasën kyçe hardware + + + YubiKeyInterface - Refresh hardware keys - Rifresko kyçe hardware - - - <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed with <a href="https://keepassxc.org/docs/#faq-yubikey-howto">Challenge-Response</a>.</p> - <p>Nëse keni një <a href="https://www.yubico.com/">YubiKey</a> ose <a href="https://onlykey.io">OnlyKey</a>, mund ta përdorni për siguri të mëtejshme.</p><p>Kyçi lyp që një nga kanalet e tij të programohet me <a href="https://keepassxc.org/docs/#faq-yubikey-howto">Challenge-Response</a>.</p> - - - Hardware keys found, but no slots are configured + %1 Invalid slot specified - %2 YubiKeyInterfacePCSC + + (PCSC) %1 [%2] Challenge-Response - Slot %3 + + The YubiKey PCSC interface has not been initialized. Ndërfaqja PCSC YubiKey s’është gatitur. + + Hardware key is currently in use. + Kyçi hardware është aktualisht në përdorim. + Could not find or access hardware key with serial number %1. Please present it to continue. - S’u gjet dot, ose s’u përdor dot kyç hardware me numër serial %1. Që të vazhdohet, ju lutemi, silleni. + Hardware key is locked or timed out. Unlock or re-present it to continue. - Kyçi hardware është i kyçur, ose mbaroi koha. Që të vazhdohet, shkyçeni, ose riparaqiteni. + Hardware key was not found or is not configured. @@ -10412,34 +8998,27 @@ Shembull: JBSWY3DPEHPK3PXP Failed to complete a challenge-response, the PCSC error code was: %1 - S’u arrit të plotësohet një hap sfidë-përgjigje, kodi i gabimit PCSC qe: %1 - - - (NFC) %1 [%2] - Slot %3, %4 - YubiKey display fields - (NFC) %1 [%2] - Kanali %3, %4 - - - Press - USB Challenge-Response Key interaction request - Shtypeni - - - Passive - USB Challenge-Response Key no interaction required - Pasiv + YubiKeyInterfaceUSB Unknown - E panjohur + + + + (USB) %1 [%2] Configured Slot - %3 + + + + (USB) %1 [%2] Challenge-Response - Slot %3 - %4 + Press USB Challenge-Response Key interaction request - Shtypeni + Passive @@ -10450,13 +9029,17 @@ Shembull: JBSWY3DPEHPK3PXP The YubiKey USB interface has not been initialized. Ndërfaqja USB YubiKey s’është gatitur. + + Hardware key is currently in use. + Kyçi hardware është aktualisht në përdorim. + Could not find hardware key with serial number %1. Please plug it in to continue. - S’u gjet dot kyç hardware me numër serial %1. Që të vazhdohet, ju lutemi, vendoseni. + Hardware key timed out waiting for user interaction. - Kyçit hardware i mbaroi koha në pritje të ndërveprimit nga përdorues. + A USB error occurred when accessing the hardware key: %1 @@ -10464,17 +9047,7 @@ Shembull: JBSWY3DPEHPK3PXP Failed to complete a challenge-response, the specific error was: %1 - S’u arrit të plotësohet një hap sfidë-përgjigje, kodi specifik qe: %1 - - - %1 [%2] - Slot %3 - YubiKey NEO display fields - %1 [%2] - Vendi %3 - - - %1 [%2] - Slot %3, %4 - YubiKey display fields - %1 [%2] - Vendi %3, %4 + \ No newline at end of file diff --git a/share/translations/keepassxc_sr.ts b/share/translations/keepassxc_sr.ts index 36384a200..96bf5330d 100644 --- a/share/translations/keepassxc_sr.ts +++ b/share/translations/keepassxc_sr.ts @@ -3,7 +3,7 @@ AboutDialog About KeePassXC - O KeePassXC + О KeePassXC About @@ -80,10 +80,6 @@ Details - - Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. - - Remember Запамти @@ -92,6 +88,10 @@ Allow Selected Дозволи одабрано + + Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. + + Deny All && Future @@ -122,10 +122,6 @@ Use OpenSSH - - Use both agents - - SSH_AUTH_SOCK override SSH_AUTH_SOCK прегажење @@ -154,6 +150,10 @@ SSH Agent connection is working! Веза SSH агента ради! + + Use both agents + + ApplicationSettingsWidget @@ -169,10 +169,6 @@ Security Сигурност - - This setting cannot be enabled when minimize on unlock is enabled. - - Access error for config file %1 Грешка приликом приступа конфигурационој датотеци %1 @@ -217,48 +213,20 @@ You must restart the application to set the new language. Would you like to restart now? Морате поново покренути апликацију да бисте поставили нови језик. Поново покренути сада? + + Reset Settings? + Ресетовати подешавања? + + + Are you sure you want to reset all general and security settings to default? + Да ли сте сигурни да желите да вратите све опште и безбедносне поставке на подразумеване? + Select backup storage directory - Confirm Reset - - - - Are you sure you want to reset all settings to default? - - - - Import KeePassXC Settings - - - - Failed to import settings from %1, not a valid settings file. - - - - Export KeePassXC Settings - - - - Small - - - - Normal - - - - Medium - - - - Large - - - - Custom + This setting cannot be enabled when minimize on unlock is enabled. @@ -274,7 +242,7 @@ Start only a single instance of KeePassXC - Покрени само једну инстанцу KeePassX-а + Покрени само једну инстанцу KeePassX Automatically launch KeePassXC at system startup @@ -286,23 +254,19 @@ Minimize window after unlocking database - Минимизирајте прозор након откључавања базе података + Минимизирајте прозор након откључавања базе Remember previously used databases - Запамти последњу употребљену базу података - - - recent files - + Запамти последњу употребљену базу Load previously open databases on startup - На покретање, учитај последњу отворену базу података + На покретање, учитај последњу отворену базу Remember database key files and security dongles - Запамтити Кључ-Датотеке базе података и сигурносне кључеве + Запамтити кључне датотеке базе и сигурносне кључеве Check for updates at application startup once per week @@ -312,6 +276,25 @@ Include beta releases when checking for updates Укључити бета издања приликом провере ажурирања + + On database unlock, show entries that + + + + have expired + On database unlock, show entries that... + + + + days + On database unlock, show entries that will expire within %1 days + + + + will expire within + On database unlock, show entries that... + + File Management Управљање датотекама @@ -322,24 +305,36 @@ Automatically save when locking database - Аутоматски сачувај приликом закључавања базе података + Аутоматски сачувај приликом закључавања базе Automatically save non-data changes when locking database - Аутоматски сачувај промене без података приликом закључавања базе података + Аутоматски сачувај промене без података приликом закључавања базе Automatically reload the database when modified externally - Аутоматски поново учитати базу података када се спољно модификује + Аутоматски поново учитати базу када се спољно модификује Backup database file before saving - Направити резервну копију базе података пре сачувавања + Направити резервну копију базе пре сачувавања + + + Backup destination + + + + Specifies the database backup file location. Occurrences of "{DB_FILENAME}" are replaced with the filename of the saved database without extension. {TIME:<format>} is replaced with the backup time, see https://doc.qt.io/qt-5/qdatetime.html#toString. <format> defaults to format string "dd_MM_yyyy_hh-mm-ss". + {DB_FILENAME}.old.kdbx + + Choose... + + Use alternative saving method (may solve problems with Dropbox, Google Drive, GVFS, etc.) @@ -387,7 +382,7 @@ sec Seconds - сек + сек User Interface @@ -417,10 +412,6 @@ Toolbar button style: Стил дугмета на траци са алаткама: - - Show passwords in color - - Use monospaced font for notes За белешке користите једноструки фонт @@ -455,15 +446,15 @@ Use entry title to match windows for global Auto-Type - Користити наслов за подударање прозора за глобално ауто-куцање + Користити наслов уноса за подударање прозора за глобални ауто-уноса Use entry URL to match windows for global Auto-Type - Користити URL за подударање прозора за глобално ауто-куцање + Користити URL за подударање прозора за глобални ауто-уноса Always ask before performing Auto-Type - Увек питати пре извођења ауто-куцања + Увек питати пре извођења ауто-уноса Hide expired entries from Auto-Type @@ -475,100 +466,43 @@ Auto-Type start delay: - Кашњење покретања ауто-куцања: + Кашњење покретања ауто-уноса: Global Auto-Type shortcut: - Глобална пречица ауто-куцања: + Глобална пречица ауто-уноса Auto-type start delay milliseconds - Кашњење, у милисекундама, покретања Ауто-куцања + Кашњење, у милисекундама, покретања Ауто-уноса ms Milliseconds - мс + мс Auto-Type typing delay: - Кашњење куцања Ауто-куцања: + Кашњење куцања Ауто-уноса: Global auto-type shortcut - Глобална пречица за ауто-куцање + Глобална пречица за ауто-унос Auto-type character typing delay milliseconds - Кашњење, у милисекундама, уношења Ауто-куцања + Кашњење, у милисекундама, уношење Ауто-уноса Remember last typed entry for: - On database unlock, show entries that will expire within + recent files - On database unlock, show entries that will expire within - - - - days - number of days warning for password expiration - - - - Destination format: - - - - <html><head/><body><p><span style=" font-weight:600;">{DB_FILENAME}</span> is replaced with the filename of the saved database without extension</p><p><span style=" font-weight:600;">{TIME:&lt;format&gt;}</span> is replaced with the specified time format (default: dd_MM_yyyy_hh-mm-ss)</p><p>See the User Guide for more details</p></body></html> - - - - Choose folder... - - - - Show confirmation before moving entries to recycle bin - - - - Copy data on double clicking field in entry view - - - - Show toolbar - - - - Show the menu bar by pressing the Alt key - - - - Show menubar - - - - Import settings… - - - - Export settings… - - - - Open browser on double clicking URL field in entry view - - - - Font size: - - - - Font size selection + Show passwords in color @@ -580,12 +514,12 @@ Database lock timeout seconds - Тајмаут закључавања базе података + Тајмаут закључавања базе sec Seconds - сек + сек Clear clipboard after @@ -598,7 +532,7 @@ min Minutes - мин + мин Clipboard clear seconds @@ -606,7 +540,7 @@ Lock databases after inactivity of - Закључај базе података након неактивности од + Закључај базе након неактивности од Convenience @@ -618,11 +552,15 @@ Lock databases when session is locked or lid is closed - Закључај базе података када је сесија закључана или екран затворен + Закључати базе када је сесија закључана или екран затворен Lock databases after minimizing the window - Закључај базе података након минимизирање прозора + Закључај базе након минимизирање прозора + + + Require password repeat when it is visible + Захтева понављање лозинке када је видљива Hide passwords when editing them @@ -636,6 +574,18 @@ Hide passwords in the entry preview panel Сакриј лозинке на табли за преглед уноса + + Hide entry notes by default + Подразумевано сакриј белешке о уносу + + + Move entries to recycle bin without confirmation + Премести ставке у корпу за отпатке без потрвде + + + Enable double click to copy the username/password entry columns + + Privacy Приватност @@ -648,18 +598,6 @@ Hide TOTP in the entry preview panel - - Lock databases when switching user - - - - Lock Options - - - - Hide notes in the entry preview panel - - AutoType @@ -704,13 +642,26 @@ - Entry does not have attribute for PICKCHARS: %1 + Invalid conversion type: %1 + + + + Invalid conversion syntax: %1 + + + + Invalid regular expression syntax %1 +%2 Invalid placeholder: %1 + + Entry does not have attribute for PICKCHARS: %1 + + AutoTypeAssociationsModel @@ -720,7 +671,7 @@ Sequence - Секвенца + Редослед (empty) @@ -752,6 +703,10 @@ AutoTypePlatformX11 + + Trying to send invalid keysym. + + Sequence aborted: Caps Lock is on @@ -764,10 +719,6 @@ Unable to get valid keycode for key: - - Trying to send invalid keyboard symbol. - - AutoTypeSelectDialog @@ -867,13 +818,13 @@ Ctrl+4 - Use Virtual Keyboard (Windows Only)</p> Disable for this site Онемогући за овај сајт - - Undo - - BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + KeePassXC-Browser Сачувај унос + Ok У реду @@ -888,73 +839,13 @@ Please select the correct database for saving credentials. Отворено вам је више база података. Изаберите тачну базу података за чување акредитива. - - KeePassXC - Select Database - - - - - BrowserPasskeysConfirmationDialog - - Cancel - Откажи - - - Update - - - - Authenticate - - - - Register new - - - - Register - - - - Timeout in <b>%n</b> seconds... - - - - Relying Party: %1 - - - - Username: %1 - - - - KeePassXC - Passkey credentials - - - - Add to existing entry - - - - Existing passkey found. -Do you want to register a new passkey for: - - - - Select the existing passkey and press Update to replace it. - - - - Authenticate passkey credentials for: - - - - Do you want to register a passkey for: - - BrowserService + + KeePassXC: Create a new group + KeePassXC: Направите нову групу + A request for creating a new group "%1" has been received. Do you want to create this group? @@ -963,6 +854,10 @@ Do you want to create this group? Да ли желите да направите ову групу? + + KeePassXC: New key association request + KeePassXC: Нови захтев за придруживање кључа + You have received an association request for the following database: %1 @@ -979,16 +874,28 @@ chrome-laptop. 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? Дељен кључ за шифровање са именом „% 1“ већ постоји. Да ли желите да га препишете? + + KeePassXC: Update Entry + KeePassXC: Ажурирање уноса + Do you want to update the information in %1 - %2? Да ли желите да ажурирате информације у %1 - %2? + + KeePassXC: Delete entry + + A request for deleting entry "%1" has been received. Do you want to delete the entry? @@ -996,57 +903,50 @@ Do you want to delete the entry? - %1 (Passkey) - + Converting attributes to custom data… + Претварање атрибута у прилагођене податке... - KeePassXC - Create a new group - + Abort + Прекид - Disable - Онемогући + KeePassXC: Converted KeePassHTTP attributes + KeePassXC: Конвертовани KeePassHTTP атрибути - KeePassXC - Overwrite existing key? - + 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 кључа у прилагођене податке. - KeePassXC - Update Entry - + KeePassXC: No entry with KeePassHTTP attributes found! + KeePassXC: Нема уноса са KeePassHTTP атрибута! - KeePassXC - Delete entry - + The active database does not contain an entry with KeePassHTTP attributes. + Активна база не садржи унос са KeePassHTTP атрибути. - KeePassXC - New key association request - + Don't show this warning again + Не приказуј више ово упозорење - Passkey - + KeePassXC: Legacy browser integration settings detected + KeePassXC: Откривена су стара подешавања интеграције прегледача - KeePassXC - Passkey credentials - - - - Register a new passkey to this entry: - - - - KeePassXC - Update passkey - - - - Entry already has a passkey. -Do you want to overwrite the passkey in %1 - %2? - - - - Register - + 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? + Ваша KeePassXC-Browser подешавања треба преместити у поставке базе. +Ово је неопходно за одржавање тренутних веза са прегледачем. +Да ли желите да мигрирате своја постојећа подешавања сада? @@ -1067,6 +967,10 @@ Do you want to overwrite the passkey in %1 - %2? General Опште + + Browsers installed as snaps are currently not supported. + Прегледници инсталирани као брзи тренутно нису подржани. + Enable integration for these browsers: Омогућите интеграцију ових прегледача: @@ -1102,11 +1006,11 @@ Do you want to overwrite the passkey in %1 - %2? Show a notification when credentials are requested Credentials mean login data requested via browser extension - Приказати обавештење када се захтевају акредитиви + Прикажите обавештење када се захтевају акредитиви Request to unlock the database if it is locked - Захтев за откључавање базе података ако је закључана + Захтев за откључавање базе ако је закључана Only entries with the same scheme (http://, https://, …) are returned. @@ -1134,12 +1038,12 @@ Do you want to overwrite the passkey in %1 - %2? All databases connected to the extension will return matching credentials. - Све базе података повезане са екстензијом вратиће одговарајуће акредитиве. + Све базе повезане са екстензијом вратиће одговарајуће акредитиве. Search in all opened databases for matching credentials Credentials mean login data requested via browser extension - Претражите све отворене базе података да бисте пронашли одговарајуће акредитиве + Претражите све отворене базе да бисте пронашли одговарајуће акредитиве Advanced @@ -1238,6 +1142,26 @@ Do you want to overwrite the passkey in %1 - %2? Custom extension ID ИД прилагођеног додатка + + Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 + Због Snap sandboxing-а, морате покренути скрипт да бисте омогућили интеграцију прегледача.<br />Овај скрипт можете добити од %1 + + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 + KeePassXC-Browser је потребан да би интеграција прегледача функционисала. <br />Преузмите га за %1 и %2 и %3. %4 + + + Please see special instructions for browser extension use below + Молимо погледајте посебна упутства за употребу додатка прегледача у наставку + + + <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. + </b>Грешка:</b> Није могуће пронаћи прилагођену локацију проки сервера!<br/>Интеграција прегледача НЕЋЕ РАДИТИ без проки апликације. + + + <b>Warning:</b> The following options can be dangerous! + <b>Упозорење:</b> Следеће опције могу бити опасне! + Executable Files Извршне датотеке @@ -1254,46 +1178,6 @@ Do you want to overwrite the passkey in %1 - %2? Select native messaging host folder location Изабери место фасцикле матичног хоста размене порука - - Allow keepassxc-proxy to list all entries with their title, URL and UUID in connected databases. - - - - Allow limited access to all entries in connected databases (ignores site access restrictions) - - - - <b>Warning:</b> Only adjust these settings if necessary. - - - - The custom proxy location does not exist. - - - - <b>Error:</b> The custom proxy location does not exist. Correct this in the advanced settings tab. - - - - <b>Error:</b> The installed proxy executable is missing from the expected location: %1<br/>Please set a custom proxy location in the advanced settings or reinstall the application. - - - - Allows using insecure http://localhost with passkeys for testing purposes. - - - - Allow using localhost with passkeys - - - - KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. - - - - Browsers installed using Snap or Flatpak are not supported with exception to Firefox installed using Snap. - - CloneDialog @@ -1303,11 +1187,11 @@ Do you want to overwrite the passkey in %1 - %2? Append ' - Clone' to title - Додај наслову суфикс ' - дупликат' + Додај наслову суфикс ' - дупликат' Replace username and password with references - Замените корисничко име и лозинку са референцама + Замени корисничко име и лозинку са референцама Copy history @@ -1316,6 +1200,14 @@ Do you want to overwrite the passkey in %1 - %2? CsvImportWidget + + Import CSV fields + Увези CSV поља + + + filename + датотека + size, rows, columns величина, редови, колоне @@ -1410,7 +1302,7 @@ Do you want to overwrite the passkey in %1 - %2? Preview - Приказ + Преглед CSV import preview @@ -1424,42 +1316,50 @@ Do you want to overwrite the passkey in %1 - %2? Column %1 Колона %1 + + Imported from CSV file + Увезено из CSV датотеке + + + Original data: + Изворни подаци: + + + Error(s) detected in CSV file! + Откривене су грешке у CSV датотеци! + [%n more message(s) skipped] [%n прескочене поруке][%n прескочене поруке][%n прескочене поруке] - Failed to parse CSV file: %1 - + Error + Грешка - Imported from CSV file: %1 - - - - No Title Selected - - - - No title column was selected, entries will be hard to tell apart. -Are you sure you want to import? - - - - Tags - + CSV import: writer has errors: +%1 + CSV увоз: има грешке: +%1 CsvParserModel + + %1, %2, %3 + file info: bytes, rows, columns + %1, %2, %3 + + + %n byte(s) + %n бајт(ова)%n бајт(ова)%n бајт(ова) + %n row(s) - CSV row count %n ред(ова)%n ред(ова)%n ред(ова) %n column(s) - CSV column count %n колона(е)%n колона(е)%n колона(е) @@ -1480,19 +1380,19 @@ Are you sure you want to import? Error while reading the database: %1 - Грешка при читању базе података: %1 + Грешка при читању базе: %1 Could not save, database does not point to a valid file. - Није могуће сачувати, база података не упућује на важећу датотеку. + Није могуће сачувати, база не упућује на важећу датотеку. Database save is already in progress. - Сачувавање базе података је већ у току. + Сачувавање базе је већ у току. Could not save, database has not been initialized! - Није могуће сачувати, база података није иницијализована! + Није могуће сачувати, база није иницијализована! Database file has unmerged changes. @@ -1512,14 +1412,6 @@ Backup database located at %2 Recycle Bin Корпа за отпатке - - Database file read error. - - - - No file path was provided. - - DatabaseOpenDialog @@ -1542,22 +1434,50 @@ Backup database located at %2 Password field Поље лозинке + + Enter Additional Credentials (if any): + Унети додатне акредитиве (ако постоје): + + + Key File: + Кључ-Датотека: + + + Key file help + Помоћ за кључне датотеке + Hardware key slot selection Избор слота хардверског кључа + + Hardware Key: + Кључ хардвера: + + + Hardware key help + Помоћ кључ хардвера + Key file to unlock the database - Кључ-Датотека за откључавање базе података + Датотека кључа за откључавање базе Browse for key file - Претражити Кључ-Датотеку + Претражи датотеку са кључем Browse… + + Refresh hardware tokens + Освежи хардверске токене + + + Refresh + Освежи + Unlock Database @@ -1614,13 +1534,17 @@ To prevent this error from appearing, you must go to "Database Settings / S Retry with empty password Покушај поново са празном лозинком + + Failed to authenticate with Touch ID + + Failed to open key file: %1 - Отварање Кључ-Датотеке није успело: %1 + Отварање датотеке кључа није успело: %1 Old key file format - Стари формат Кључ-Датотеке + Стари формат датотеке кључа You are using an old key file format which KeePassXC may<br>stop supporting in the future.<br><br>Please consider generating a new key file by going to:<br><strong>Database &gt; Database Security &gt; Change Key File.</strong><br> @@ -1640,70 +1564,45 @@ To prevent this error from appearing, you must go to "Database Settings / S Select key file - Одаберите Кључ-Датотеку + Одаберите кључ-датотеку Cannot use database file as key file - Датотека базе података не може се користити као Кључ-Датотеку + Датотека базе не може се користити као датотека кључа + + + You cannot use your database file as a key file. +If you do not have a key file, please leave the field empty. + Датотека базе не може се користити као датотека кључа. +Ако немате датотеку кључа, оставите поље празно. + + + Detecting hardware keys… + Откривање хардверских кључева… + + + No hardware keys detected + Нема хардверских кључева + + + Select hardware key… + одабирање хардверских кључева… + + + <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information…</p> + + + + <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +<p>Click for more information…</p> + authenticate to access the database - Failed to authenticate with Quick Unlock: %1 - - - - Select Key File: - - - - <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!</p> - - - - Use hardware key [Serial: %1] - - - - Use hardware key - - - - Your database file is NOT a key file! -If you don't have a key file or don't know what that is, you don't have to select one. - - - - KeePassXC database file selected - - - - The file you selected looks like a database file. -A database file is NOT a key file! - -Are you sure you want to continue with this file?. - - - - No hardware keys found. - - - - Refresh Hardware Keys - - - - Click to add a key file. - - - - <a href="#" style="text-decoration: underline">I have a key file</a> - - - - Hardware keys found, but no slots are configured. + Failed to authenticate with Windows Hello: %1 @@ -1716,6 +1615,10 @@ Are you sure you want to continue with this file?. DatabaseSettingsDialog + + Advanced Settings + Напредна подешавања + General Опште @@ -1726,7 +1629,7 @@ Are you sure you want to continue with this file?. Database Credentials - Акредитиви базе података + Акредитиви базе Encryption Settings @@ -1740,22 +1643,6 @@ Are you sure you want to continue with this file?. Maintenance - - KeeShare - KeeShare - - - Secret Service Integration - Интеграција тајног сервиса - - - Remote Sync - - - - Database Settings: %1 - - DatabaseSettingsWidgetBrowser @@ -1763,6 +1650,18 @@ Are you sure you want to continue with this file?. KeePassXC-Browser settings KeePassXC-Browser подешавања + + Convert KeePassHTTP data + + + + Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data + + + + Refresh database root group ID + Освежите ИД матичне групе базе података + Disconnect all browsers Искључите све прегледаче @@ -1771,10 +1670,6 @@ Are you sure you want to continue with this file?. Forget all site-specific settings on entries Заборавите све специфичне поставке за локацију на уносима - - Refresh database root group ID - Освежите ИД матичне групе базе података - Stored keys Сачувани кључеви @@ -1823,13 +1718,21 @@ This may prevent connection to the browser plugin. Да ли стварно желите да искључите све прегледаче? Ово може спречити везу са додатком за прегледач. + + KeePassXC: No keys found + KeePassXC: Нису пронађени кључеви + No shared encryption keys found in KeePassXC settings. Није пронађен ниједан дељени кључ за шифровање у подешавањима KeePassXC-а. + + KeePassXC: Removed keys from database + KeePassXC: Уклоњени кључеви из базе + Successfully removed %n encryption key(s) from KeePassXC settings. - Успешно уклоњено %n кључ(ови) за шифровање из подешавањаУспешно уклоњено %n кључ(ови) за шифровање из подешавањаУспешно уклоњено %n кључ(ови) за шифровање из подешавања + Успешно је уклоњено %n кључева за шифровање из подешавања KeePassXC-а.Успешно је уклоњено %n кључева за шифровање из подешавања KeePassXC-а.Успешно је уклоњено %n кључева за шифровање из подешавања KeePassXC-а. Do you really want forget all site-specific settings on every entry? @@ -1845,13 +1748,30 @@ Permissions to access entries will be revoked. Abort Прекид + + KeePassXC: Removed permissions + KeePassXC: Уклоњене дозволе + Successfully removed permissions from %n entry(s). Успешно уклоњене дозволе са %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 convert all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + Refresh database ID @@ -1863,26 +1783,6 @@ This is only necessary if your database is a copy of another and the browser ext Да ли стварно желите да освежите ИД базе података? То је неопходно само ако је ваша база података копија друге и ако екстензија прегледача не може да се повеже. - - Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data - - - - No keys found - - - - Removed keys from database - - - - Removed permissions - - - - No entry with permissions found! - - DatabaseSettingsWidgetDatabaseKey @@ -1904,7 +1804,7 @@ Are you sure you want to continue without a password? Continue without password - Наставити без лозинке + Наставити без озинке No encryption key added @@ -1920,19 +1820,7 @@ Are you sure you want to continue without a password? Failed to change database credentials - Неуспешна промена акредитива базе података - - - Weak password - Слаба лозинка - - - This is a weak password! For better protection of your secrets, you should choose a stronger password. - - - - The provided password does not meet the minimum quality requirement. - + Неуспешна промена акредитива базе @@ -1941,21 +1829,29 @@ Are you sure you want to continue without a password? Decryption Time: Време дешифровања: + + Change existing decryption time + Променити постојеће време дешифровања + + + Change + Променити + Decryption time in seconds Време дешифровања у секундама Higher values offer more protection, but opening the database will take longer. - Веће вредности нуде већу заштиту, али отварање базе података трајаће дуже. + Веће вредности нуде већу заштиту, али отварање базе трајаће дуже. Database format: - Формат базе података: + Формат базе: Database format - Формат базе података + Формат базе Format cannot be changed: Your database uses KDBX 4 features @@ -2021,6 +1917,11 @@ Are you sure you want to continue without a password? KDBX 3 + + unchanged + Database decryption time is unchanged + непромењено + Number of rounds too high Key transformation rounds @@ -2069,18 +1970,6 @@ If you keep this number, your database will not be protected from brute force at Threads for parallel execution (KDF settings) нит(а) нит(а) нит(а) - - Encryption Settings: - - - - Basic - - - - Advanced - Напредно - DatabaseSettingsWidgetFdoSecrets @@ -2113,7 +2002,7 @@ If you keep this number, your database will not be protected from brute force at Database name field - Поље „Име“ базе података + Поље „Име“ базе Database description: @@ -2121,7 +2010,7 @@ If you keep this number, your database will not be protected from brute force at Database description field - Поље „Опис“ базе података + Поље „Опис“ базе Default username: @@ -2153,7 +2042,7 @@ If you keep this number, your database will not be protected from brute force at Additional Database Settings - Додатне поставке базе података + Додатне поставке базе Enable compression (recommended) @@ -2202,70 +2091,6 @@ Entries deleted from the recycle bin are removed from the database. - - Autosave delay since last change - - - - Autosave delay - - - - Autosave delay since last change in minutes - - - - min - мин - - - Autosave delay since last change checkbox - - - - Public Database Metadata - - - - Warning: the following settings are not encrypted. - - - - Display name: - - - - Publically visible display name used on the unlock dialog - - - - Database public display name - - - - Display color: - - - - Publically visible color used on the unlock dialog - - - - Database public display color chooser - - - - Clear - Очисти - - - Display icon: - - - - Select Database Icon - - DatabaseSettingsWidgetKeeShare @@ -2346,11 +2171,11 @@ removed from the database. DatabaseSettingsWidgetMetaDataSimple Database Name: - Име базе података: + Име базе: Database name field - Поље „Име“ базе података + Поље „Име“ базе Description: @@ -2358,130 +2183,7 @@ removed from the database. Database description field - Поље „Опис“ базе података - - - - DatabaseSettingsWidgetRemote - - Sync Commands - - - - Remove - Уклони - - - Command Settings - - - - Name - Име - - - Save - Сними - - - Download - - - - Command: - - - - Download command field - - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - - - - Input: - - - - Download input field - - - - Upload - - - - Upload command field - - - - e.g.: "sftp user@hostname" or "scp {TEMP_DATABASE} user@hostname:DatabaseOnRemote.kdbx" - - - - Upload input field - - - - Name cannot be empty. - - - - Test - - - - Download command cannot be empty. - - - - Download failed with error: %1 - - - - Download finished, but file %1 could not be found. - - - - Download successful. - - - - Save Remote Settings - - - - You have unsaved changes. Do you want to save them? - - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - - - - e.g.: -put {TEMP_DATABASE} DatabaseOnRemote.kdbx -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - - - - Timeout: - - - - seconds - секунди + Поље „Опис“ базе @@ -2516,9 +2218,25 @@ This is definitely a bug, please report it to the developers. CSV file CSV датотека + + Select CSV file + Одабрати CSV датотеку + Merge database - Споји базу података + Удружи базу података + + + KeePass 1 database + KeePass 1 база података + + + Open KeePass 1 database + Отвори KeePass 1 базу података + + + Open OPVault + Отворити OPVault Export database to CSV file @@ -2532,6 +2250,28 @@ This is definitely a bug, please report it to the developers. Writing the HTML file failed. Писање HTML датотеке није успело. + + Export Confirmation + Потврда извоза + + + You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? + Спремате се да извезете своју базу у нешифрирану датотеку. Ово ће ваше лозинке и осетљиве информације учинити рањивим! Да ли сте сигурни да желите да наставите? + + + New Database + Нова база података + + + %1 [New Database] + Database tab name modifier + %1 [Нова база] + + + %1 [Locked] + Database tab name modifier + %1 [Блокирано] + Export database to XML file @@ -2544,31 +2284,9 @@ This is definitely a bug, please report it to the developers. Writing the XML file failed - - Export Confirmation - Потврда извоза - - - You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? - Спремате се да извезете своју базу података у нешифрирану датотеку. Ово ће ваше лозинке и осетљиве информације учинити рањивим! Да ли сте сигурни да желите да наставите? - - - %1 [Locked] - Database tab name modifier - %1 [Блокирано] - - - %1 [Temporary] - Database tab name modifier - - DatabaseWidget - - Searches and Tags - - Searching… @@ -2617,10 +2335,6 @@ This is definitely a bug, please report it to the developers. Expired entries - - Entries expiring within %1 day(s) - - No current database. Нема тренутне базе података. @@ -2645,21 +2359,9 @@ This is definitely a bug, please report it to the developers. No Results Нема резултата - - Save - Сними - - - Enter a unique name or overwrite an existing search from the list: - - - - Save Search - - Lock Database? - Закључати базу података? + Закључати базу? You are editing an entry. Discard changes and lock anyway? @@ -2685,6 +2387,26 @@ Save changes? 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? + Датотека базе података се променила, а ви имате насачуване промене. +Да ли желите да спојите своје промене? + + + Could not open the new database file while attempting to autoreload. +Error: %1 + Није било могуће отворити нову датотеку базе података приликом аутоматског учитавања. +Грешка: %1 + Disable safe saves? Онемогућити сигурна сачувавања? @@ -2692,7 +2414,7 @@ Save changes? 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 није успео да сачува базу података више пута. Ово је вероватно узроковано услугама синхронизације које држе датотеке закључане. + KeePassXC није успео да сачува базу више пута. Ово је вероватно узроковано услугама синхронизације које држе датотеке закључане. Онемогућити сигурносно сачувавање и покушати поново? @@ -2713,7 +2435,7 @@ Disable safe saves and try again? Save database backup - Сачувајте сигурносну копију базе података + Сачувајте сигурносну копију базе Empty recycle bin? @@ -2725,95 +2447,26 @@ Disable safe saves and try again? Could not find database file: %1 - Није могуће пронаћи датотеку базе података: %1 + Није могуће пронаћи датотеку базе: %1 + + + Entries expiring within %1 day(s) + - New Database - Нова база података - - - %1 [New Database] - Database tab name modifier - %1 [Нова база] - - - Remote Sync did not contain any download or upload commands. + Searches and Tags - Remote sync '%1' completed successfully! + Enter a unique name or overwrite an existing search from the list: - Remote sync '%1' failed: %2 - + Save + Сними - Error while saving database %1: %2 - - - - Downloading... - Преузимање... - - - Uploading... - - - - Syncing... - - - - Remove passkey from entry - - - - Do you want to remove the passkey from this entry? - - - - The database file "%1" was modified externally - - - - Do you want to load the changes? - - - - Reload database - - - - Reloading database… - - - - Reload canceled - - - - Reload successful - - - - Reload pending user action… - - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes<br>Ignore the changes on disk until save<br>Discard unsaved changes - - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes then save<br>Overwrite the changes on disk<br>Discard unsaved changes - - - - Database file overwritten. - - - - Database file on disk cannot be unlocked with current credentials.<br>Enter new credentials and/or present hardware key to continue. + Save Search @@ -2867,6 +2520,10 @@ Disable safe saves and try again? n/a / + + (encrypted) + (енкриптовано) + Select private key Одаберите приватни кључ @@ -2949,10 +2606,6 @@ Would you like to correct it? Hide Сакриј - - %n hour(s) - - %n week(s) %n недеља(е)%n недеља(е)%n недеља(е) @@ -2965,9 +2618,9 @@ Would you like to correct it? %n year(s) %n година(е)%n година(е)%n година(е) - - Failed to decrypt SSH key, ensure password is correct. - + + %n hour(s) + @@ -3087,20 +2740,10 @@ Would you like to correct it? Add new window association Додати нову асоцијацију прозора - - + - Add item - + - Remove selected window association Уклонити одабрану асоцијацију прозора - - - - Remove item - - - Window title: Наслов прозора: @@ -3125,9 +2768,23 @@ Would you like to correct it? Custom Auto-Type sequence for this window Прилагођена секвенца ауто-куцања за овај прозор + + + + Add item + + + + + - + Remove item + - + EditEntryWidgetBrowser + + These settings affect to the entry's behaviour with the browser extension. + Ова подешавања утичу на понашање уноса са додатком прегледача. + General Опште @@ -3140,14 +2797,26 @@ Would you like to correct it? Skip Auto-Submit for this entry Прескочи аутоматско слање за овај унос + + Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. + Пошаљи ово подешавање у прегледач само за HTTP Auth дијалоге. Ако је омогућено, уобичајени обрасци за пријаву неће приказивати овај унос за избор. + Use this entry only with HTTP Basic Auth Користите овај унос само уз HTTP Basic Auth + + Do not send this setting to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. + Не шаљи ову поставку претраживачу за HTTP Auth дијалоге. Ако је омогућено, HTTP Auth дијалози неће приказати овај унос за избор. + Do not use this entry with HTTP Basic Auth Не користите овај унос са HTTP Basic Auth + + Additional URL's + Додатне URL-ове + Add Додај @@ -3160,22 +2829,6 @@ Would you like to correct it? Edit Уредити - - These settings affect the entry's behaviour with the browser extension. - - - - Additional URLs - - - - Only send this entry to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. - - - - Do not send this entry to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. - - EditEntryWidgetHistory @@ -3327,7 +2980,7 @@ Would you like to correct it? Fingerprint - Отисак + Отисак прста Copy to clipboard @@ -3341,13 +2994,26 @@ Would you like to correct it? Private key Приватни кључ + + External file + Спољашња датотека + + + Browser for key file + Претраживач за кључну датотеку + + + Browse… + Button for opening file dialog + + Attachment Прилог External key file - Екстерна Кључ-Датотека + Екстерна кључна датотека Add to agent @@ -3357,23 +3023,6 @@ Would you like to correct it? Remove from agent Уклони са агента - - External file - Спољашња датотека - - - Browser for key file - Претраживач за Кључ-Датотеку - - - Browse… - Button for opening file dialog - - - - Generate - Генериши - Select attachment file Одабрати прилог @@ -3398,10 +3047,6 @@ Would you like to correct it? seconds секунди - - Clear agent - - EditGroupWidget @@ -3413,6 +3058,10 @@ Would you like to correct it? Icon Икона + + Browser Integration + Интеграција са прегледачем + Properties Особине @@ -3429,10 +3078,6 @@ Would you like to correct it? Group has unsaved changes - - Browser Integration - Интеграција са прегледачем - Enable Омогући @@ -3492,14 +3137,6 @@ Would you like to correct it? Omit WWW subdomain from matching toggle for this and sub groups - - Restrict matching to given browser key: - - - - Restrict matching to given browser key toggle for this and sub groups - - EditGroupWidgetKeeShare @@ -3575,7 +3212,7 @@ Supported extensions are: %1. %1 is being imported and exported by different groups in this database. - %1 се увози и извози из различитих група у овој бази података. + %1 се увози и извози из различитих група у овој бази. KeeShare is currently disabled. You can enable import/export in the application settings. @@ -3584,11 +3221,11 @@ Supported extensions are: %1. Database export is currently disabled by application settings. - Извоз базе података је тренутно онемогућен подешавањима апликације. + Извоз базе је тренутно онемогућен подешавањима апликације. Database import is currently disabled by application settings. - Увоз базе података је тренутно онемогућен подешавањима апликације. + Увоз базе је тренутно онемогућен подешавањима апликације. KeeShare container @@ -3639,7 +3276,7 @@ Supported extensions are: %1. Auto-Type: - Ауто-куцање: + Ауто-унос: Search: @@ -3702,7 +3339,7 @@ Supported extensions are: %1. Download favicon - Преузми икону са сајта + Преузми иконицу са сајта Apply selected icon to subgroups and entries @@ -3730,7 +3367,11 @@ Supported extensions are: %1. Unable to fetch favicon. - Неуспело добављање иконе са сајта. + Није могуће добавити иконицу са сајта. + + + You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security + Услугу икона DuckDuckGo-а можете омогућити у Алати -> Подешавања -> Безбедност Existing icon selected. @@ -3758,16 +3399,12 @@ Supported extensions are: %1. %n icon(s) already exist in the database - %n икона(е? већ постоји(е) у бази%n икона(е? већ постоји(е) у бази%n икона(е? већ постоји(е) у бази података + %n икона(е) већ постоји(е) у бази података%n икона(е) већ постоји(е) у бази података%n икона(е) већ постоји(е) у бази података The following icon(s) failed: Следеће иконе нису успеле:Следеће иконе нису успеле:Следеће иконе нису успеле: - - You can enable the DuckDuckGo website icon service under Application Settings -> Security - - EditWidgetProperties @@ -3844,23 +3481,6 @@ This may cause the affected plugins to malfunction. %1 - Clone %1 - Клон - - Passkey - - - - Invalid conversion type: %1 - - - - Invalid conversion syntax: %1 - - - - Invalid regular expression syntax %1 -%2 - - EntryAttachments @@ -3869,21 +3489,6 @@ This may cause the affected plugins to malfunction. - - EntryAttachmentsDialog - - Form - Форма - - - File name - - - - File contents... - - - EntryAttachmentsModel @@ -3921,6 +3526,14 @@ This may cause the affected plugins to malfunction. Remove Уклони + + Rename selected attachment + Преименуј одабрни прилог + + + Rename + Преименуј + Open selected attachment Отворити одабрани прилог @@ -3997,6 +3610,11 @@ This may cause the affected plugins to malfunction. Confirm Overwrite Attachment + + Attachment "%1" already exists. +Would you like to overwrite the existing attachment? + + Confirm Attachment Потврдити прилог @@ -4029,23 +3647,6 @@ Do you want to save the changes to your database? Error: %1 - - Attachment "%1" already exists. -Would you like to overwrite the existing attachment? - - - - New - - - - Preview - Преглед - - - Failed to preview an attachment: Attachment not found - - EntryAttributesModel @@ -4240,14 +3841,6 @@ Would you like to overwrite the existing attachment? Has TOTP Има једнократну лозинку - - Background Color - - - - Group Path - - EntryPreviewWidget @@ -4268,8 +3861,8 @@ Would you like to overwrite the existing attachment? Лозинка - URL - URL + Notes + Белешке Expiration @@ -4288,8 +3881,8 @@ Would you like to overwrite the existing attachment? Корисничко име - Notes - Белешке + URL + URL Advanced @@ -4339,10 +3932,6 @@ Would you like to overwrite the existing attachment? Never Никада - - Double click to copy value - - Enabled Омогућено @@ -4352,7 +3941,7 @@ Would you like to overwrite the existing attachment? Онемогућено - Double click to copy to clipboard + Double click to copy value @@ -4362,10 +3951,6 @@ Would you like to overwrite the existing attachment? Invalid URL Погрешна URL - - Duplicate URL - - EntryView @@ -4381,10 +3966,6 @@ Would you like to overwrite the existing attachment? Reset to defaults Вратити на подразумевано - - + %1 entry(s)... - - ExportDialog @@ -4529,7 +4110,7 @@ This will leave your passwords and sensitive information vulnerable! FdoSecretsPlugin <b>Fdo Secret Service:</b> %1 - <b>Fdo Тајни Сервис:</b> %1 + <b>Fdo Тајна Служба:</b> %1 @@ -4604,193 +4185,6 @@ You can enable the DuckDuckGo website icon service in the security section of th - - ImportWizard - - Import Wizard - - - - - ImportWizardPageReview - - WizardPage - Чаробњак - - - Entry count: %1 - - - - Group - Група - - - Title - Наслов - - - Username - Корисничко име - - - Password - Лозинка - - - Url - - - - Could not load key file. - - - - Could not open remote database. Password or key file may be incorrect. - - - - - ImportWizardPageSelect - - Form - Форма - - - Import File Selection - - - - Password: - Лозинка: - - - Key File: - Кључ-Датотека: - - - Browse… - - - - Import Into: - - - - New Database - Нова база података - - - No unlocked databases available - - - - Existing Database: - - - - Import File: - - - - Comma Separated Values (.csv) - - - - 1Password Export (.1pux) - - - - 1Password Vault (.opvault) - - - - Bitwarden (.json) - - - - KeePass 1 Database (.kdb) - - - - Open OPVault - Отворити OPVault - - - Select import file - - - - All files - Све датотеке - - - Key files - Кључ-Датотеке - - - Select key file - Одаберите кључ-датотеку - - - Comma Separated Values - - - - 1Password Export - - - - Bitwarden JSON Export - - - - 1Password Vault - - - - KeePass1 Database - - - - Proton Pass (.json) - - - - Proton Pass JSON Export - - - - Temporary Database - - - - Command: - - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - - - - Input: - - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last commend `exit` has to be sent - - - - - Remote Database (.kdbx) - - - KMessageWidget @@ -4810,7 +4204,7 @@ The command has to exit. In case of `sftp` as last commend `exit` has to be sent Unable to calculate database key - Није могуће израчунати кључ базе података + Није могуће израчунати кључ базе Unable to issue challenge-response: %1 @@ -4852,18 +4246,18 @@ If this reoccurs, then your database file may be corrupt. Unable to calculate database key - Није могуће израчунати кључ базе података + Није могуће израчунати кључ базе Kdbx4Reader missing database headers - недостају заглавља базе података + недостају заглавља базе Unable to calculate database key: %1 - Није могуће израчунати кључ базе података: %1 + Није могуће израчунати кључ базе: %1 Invalid header checksum size @@ -5001,7 +4395,7 @@ If this reoccurs, then your database file may be corrupt. Unable to calculate database key: %1 - Није могуће израчунати кључ базе података: %1 + Није могуће израчунати кључ базе: %1 Failed to serialize KDF parameters variant map @@ -5057,7 +4451,7 @@ If this reoccurs, then your database file may be corrupt. Failed to read database file. - Читање датотеке базе података није успело. + Читање датотеке базе није успело. The selected file is an old KeePass 1 database (.kdb). @@ -5222,6 +4616,17 @@ Line %2, column %3 Неуспешно отварање приватног кључа + + KeePass1OpenWidget + + Import KeePass1 Database + Увоз KeePass1 базе података + + + Unable to open the database. + Није могуће отворити базу података. + + KeePass1Reader @@ -5275,7 +4680,7 @@ Line %2, column %3 Unable to calculate database key - Није могуће израчунати кључ базе података + Није могуће израчунати кључ базе unable to seek to content position @@ -5431,11 +4836,11 @@ If this reoccurs, then your database file may be corrupt. KeyComponentWidget Key Component - Кључ компонент + Компонента кључа Key Component Description - Опис кључ компонента + Опис компонента кључа Cancel @@ -5474,7 +4879,7 @@ If this reoccurs, then your database file may be corrupt. Old key file format - Стари формат Кључ-Датотеке + Стари формат датотеке кључа You selected a key file in an old format which KeePassXC<br>may stop supporting in the future.<br><br>Please consider generating a new key file instead. @@ -5578,6 +4983,10 @@ Are you sure you want to continue with this file? &Recent Databases Скорашње базе података + + &Import + &Увези + &Export Извоз @@ -5588,7 +4997,7 @@ Are you sure you want to continue with this file? &Entries - Уноси + Уноса Copy Att&ribute @@ -5598,10 +5007,6 @@ Are you sure you want to continue with this file? TOTP Једнократна лозинка - - Tags - - &Groups Групе @@ -5646,18 +5051,34 @@ Are you sure you want to continue with this file? &New Database… Нова база података... + + Create a new database + Креирајте нову базу података + &Merge From Database… Споји из базе података... + + Merge from another KDBX database + Спајање из друге KDBX базе података + &New Entry… Нови унос... + + Add a new entry + Додајте нови унос + &Edit Entry… Променити унос... + + View or edit entry + Види или уреди унос + &Delete Entry… Обрисати унос... @@ -5666,6 +5087,10 @@ Are you sure you want to continue with this file? &New Group… Нова група... + + Add a new group + Додај нову групу + &Edit Group… Променити групу... @@ -5680,11 +5105,11 @@ Are you sure you want to continue with this file? Sort &A-Z - Среди по A-Z + Среди A-Z Sort &Z-A - Среди по Z-A + Среди Z-A Sa&ve Database As… @@ -5698,10 +5123,18 @@ Are you sure you want to continue with this file? Database &Reports… + + Statistics, health check, etc. + Статистика, здравствена провера итд. + &Database Settings… Подешавања базе података... + + Database settings + Подешавања базе података + &Clone Entry… Направи дупликат уноса... @@ -5710,18 +5143,34 @@ Are you sure you want to continue with this file? Move u&p Премести на горе + + Move entry one step up + Премести унос за један корак горе + Move do&wn Премести на доле + + Move entry one step down + Премести унос за један корак надоле + Copy &Username Копирај корисничко име + + Copy username to clipboard + Копирај корисничко име + Copy &Password Копирај лозинку + + Copy password to clipboard + Копирај лозинку + &Settings Подешавања @@ -5755,13 +5204,21 @@ Are you sure you want to continue with this file? Наслов - Copy &URL - + Copy title to clipboard + Копирај назив + + + Copy URL to clipboard + Копирај URL &Notes Белешке + + Copy notes to clipboard + Копирај белешке + &CSV File… CSV датотека… @@ -5774,14 +5231,26 @@ Are you sure you want to continue with this file? KeePass 1 Database… KeePass 1 база података… + + Import a KeePass 1 database + Увези KeePass 1 базу података + 1Password Vault… 1Password сеф… + + Import a 1Password Vault + Увоз из 1Password сефа + CSV File… CSV датотека… + + Import a CSV file + Увези CSV датотеку + Show TOTP Прикажи TOTP @@ -5798,10 +5267,6 @@ Are you sure you want to continue with this file? Copy &TOTP Копирај &TOTP - - Copy Password and TOTP - - E&mpty recycle bin Испразни корпу за отпатке @@ -5826,6 +5291,10 @@ Are you sure you want to continue with this file? &Online Help Помоћ на мрежи + + Go to online documentation + Идите на документацију на мрежи + &User Guide Упутство за употребу @@ -5860,20 +5329,16 @@ Are you sure you want to continue with this file? Light - Светла + Светло Dark - Тамна + Тамно Classic (Platform-native) Класично (изворно са платформе) - - Show Menubar - - Show Toolbar Прикажи траку са алаткама @@ -5898,10 +5363,6 @@ Are you sure you want to continue with this file? Clone Group... - - &XML File… - - Clear history Очисти историју @@ -5926,7 +5387,8 @@ Expect some bugs and minor issues, this version is meant for testing purposes. - No Tags + 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. @@ -5957,10 +5419,6 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Quit KeePassXC Напусти KeePassXC - - %1 Entry(s) - - Please present or touch your YubiKey to continue… @@ -5973,314 +5431,38 @@ Expect some bugs and minor issues, this version is meant for testing purposes.You must restart the application to apply this setting. Would you like to restart now? Морате поново покренути апликацију да бисте применили ово подешавање. Да ли желите да се поново покренете сада? + + Tags + + + + No Tags + + + + %1 Entry(s) + + + + Copy Password and TOTP + + + + &XML File… + + + + XML File… + + + + Copy &URL + + Allow Screen Capture - - 1Password 1PUX... - - - - Import a 1Password 1PUX file - - - - Import… - - - - Passkeys… - - - - Import Passkey - - - - Remote S&ync… - - - - Quit Application - - - - Open About Dialog - - - - Open Database - - - - Create Database - - - - Merge From Database - - - - Create Entry - - - - Edit Entry - Измени унос - - - Delete Entry - - - - Create Group - - - - Edit Group - Уредити групу - - - Delete Group - - - - Download All Favicons - - - - Sort Groups A-Z - - - - Sort Groups Z-A - - - - Save Database As - - - - Show Database Security - - - - Show Database Reports - - - - Show Database Settings - - - - Show Passkeys - - - - Clone Entry - - - - Move Entry Up - - - - Move Entry Down - - - - Copy Username - - - - Copy Password - - - - Show Application Settings - - - - Show Password Generator - - - - Remove Passkey From Entry - - - - Perform Auto-Type: {USERNAME} - - - - Perform Auto-Type: {USERNAME}{ENTER} - - - - Perform Auto-Type: {PASSWORD} - - - - Perform Auto-Type: {PASSWORD}{ENTER} - - - - Perform Auto-Type: {TOTP} - - - - Copy Title - - - - Copy URL - - - - Copy Notes - - - - Export to CSV - - - - Export to HTML - - - - Import KeePass1 Database - Увоз KeePass1 базе података - - - Import 1Password Vault - - - - Import CSV File - - - - Show TOTP QR Code - - - - Set up TOTP - - - - Empty Recycle Bin - - - - Open Donation Website - - - - Open Bug Report - - - - Open Online Documentation - - - - Open Keyboard Shortcuts Guide - - - - Save Database Backup - - - - SSH Agent: Add Key - - - - SSH Agent: Remove Key - - - - Toggle Compact Mode - - - - Set Theme: Automatic - - - - Set Theme: Light - - - - Set Theme: Dark - - - - Set Theme: Classic - - - - Toggle Show Menubar - - - - Toggle Show Toolbar - - - - Toggle Show Preview Panel - - - - Toggle Always on Top - - - - Toggle Hide Usernames - - - - Toggle Hide Passwords - - - - Export to XML - - - - Toggle Allow Screen Capture - - - - Show Group Panel - - - - Toggle Show Group Panel - - - - Setup Remote Sync… - - - - Password Generator - Генератор Лозинки - - - E&xpire Entry… - - - - Clear SSH Agent - - - - Clear all identities in ssh-agent - - ManageDatabase @@ -6298,7 +5480,7 @@ Expect some bugs and minor issues, this version is meant for testing purposes. Unlock database to show more information - Откључајте базу података да бисте приказали више информација + Откључајте базу да бисте приказали више информација Lock database @@ -6338,6 +5520,26 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Overwriting %1 [%2] Преписивање %1 [%2] + + older entry merged from database "%1" + старији уноси спојени из базе података „%1“ + + + Adding backup for older target %1 [%2] + Додавање резервне копије за старију мету %1 [%2] + + + Adding backup for older source %1 [%2] + Додавање резервне копије за старији извор %1 [%2] + + + Reapplying older target entry on top of newer source %1 [%2] + Поновна примена старијег циљаног уноса на врх новијег извора %1 [%2] + + + Reapplying older source entry on top of newer target %1 [%2] + Поновна примена старијег циљаног уноса на врх новијег извора циља %1 [%2] + Synchronizing from newer source %1 [%2] Синхронизација из новијег извора %1 [%2] @@ -6397,12 +5599,20 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. Овде можете прилагодити поставке шифровања базе података. Не брините, касније их можете променити у подешавањима базе података. + + Advanced Settings + Напредна подешавања + + + Simple Settings + Једноставна подешавања + NewDatabaseWizardPageDatabaseKey Database Credentials - Акредитиви базе података + Акредитиви базе A set of credentials known only to you that protects your database. @@ -6431,25 +5641,6 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Унесите име за приказ и опциони опис за вашу нову базу података: - - NewEntryAttachmentsDialog - - Attachment name cannot be empty - - - - Attachment with the same name already exists - - - - Save attachment - Сними прилог - - - New entry attachment - - - NixUtils @@ -6496,6 +5687,15 @@ Expect some bugs and minor issues, this version is meant for testing purposes. + + OpVaultOpenWidget + + Read Database did not produce an instance +%1 + Читање базе података није произвело инстанцу +%1 + + OpVaultReader @@ -6527,7 +5727,7 @@ Expect some bugs and minor issues, this version is meant for testing purposes.OpenSSHKey Invalid key file, expecting an OpenSSH key - Неисправна Кључ-Датотека, очекује се OpenSSH кључ + Неисправна датотека са кључем, очекује се OpenSSH кључ PEM boundary mismatch @@ -6569,10 +5769,6 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Unknown cipher: %1 Непознат шифрарник: %1 - - AES-256/GCM is currently not supported - - Passphrase is required to decrypt this key За дешифровање овог кључа потребна је приступна фраза @@ -6638,178 +5834,7 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Неочекиван крај датотеке приликом уписивања приватног кључа - (encrypted) - (енкриптовано) - - - - OpenSSHKeyGenDialog - - SSH Key Generator - - - - Type - Тип - - - Bits - - - - Comment - Коментар - - - - PasskeyExportDialog - - KeePassXC - Passkey Export - - - - Filenames will be generated with title and .passkey file extension. - - - - Export entries - - - - Export Selected - - - - Cancel - Откажи - - - Export to folder - - - - Export the following passkey entries. - - - - - PasskeyExporter - - KeePassXC: Passkey Export - - - - File "%1.passkey" already exists. -Do you want to overwrite it? - - - - - Cannot open file - - - - Cannot open file "%1" for writing. - - - - Cannot write to file - - - - - PasskeyImportDialog - - KeePassXC - Passkey Import - - - - Username: %1 - - - - Group - Група - - - Database - - - - Import Passkey - - - - Import - Увези - - - Cancel - Откажи - - - Entry - Унос - - - Create new entry - - - - Relying Party: %1 - - - - Import the following passkey: - - - - Import the following passkey to this entry: - - - - Default passkeys group (Imported Passkeys) - - - - - PasskeyImporter - - Passkey file - - - - All files - Све датотеке - - - Cannot open file - - - - Cannot open file "%1" for reading. - - - - Open passkey file - - - - Cannot import passkey - - - - Cannot import passkey file "%1". Data is missing. - - - - Cannot import passkey file "%1". -The following data is missing: -%2 - - - - Cannot import passkey file "%1". Private key is missing or malformed. + AES-256/GCM is currently not supported @@ -6897,7 +5922,7 @@ The following data is missing: &Length: - &Дужина: + Дужина: Password length @@ -7009,12 +6034,16 @@ The following data is missing: Wordlist: - Листа речи: + Листа фраза: Word Count: Број Фраза: + + Character Count: + Број карактера: + Word Case: Слово реченица: @@ -7027,6 +6056,10 @@ The following data is missing: Add custom wordlist + + character + карактера + Close Затвори @@ -7063,30 +6096,6 @@ The following data is missing: Entropy: %1 bit Ентропија: %1 бит - - Password Quality: %1 - Квалитет Лозинке: %1 - - - Poor - Password quality - Слаб - - - Weak - Password quality - Слаб - - - Good - Password quality - Добар - - - Excellent - Password quality - Одличан - Confirm Delete Wordlist @@ -7133,20 +6142,32 @@ Do you want to overwrite it? Посебни карактери - passwordLength - + Password Quality: %1 + Квалитет Лозинке: %1 - Characters: %1 - + Poor + Password quality + Бедан - MIXED case - + Weak + Password quality + Слаб - Excluded characters: "0", "1", "l", "I", "O", "|", "﹒", "B", "8", "G", "6" - + Good + Password quality + Добар + + + Excellent + Password quality + Одличан + + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + Изузети знакови: "0", "1", "l", "I", "O", "|", "﹒" @@ -7196,7 +6217,7 @@ Do you want to overwrite it? Одличан - Toggle password visibility using Control + H. Open the password generator using Control + G. + Toggle password visibilty using Control + H. Open the password generator using Control + G. @@ -7215,21 +6236,6 @@ Do you want to overwrite it? - - PreviewEntryAttachmentsDialog - - Preview entry attachment - - - - No preview available - - - - Image format not supported - - - QMessageBox @@ -7268,20 +6274,16 @@ Do you want to overwrite it? Continue Настави - - Continue with weak password - - QObject Database not opened - База података није отворена + База није отворена Database hash not available - Хеш базе података није доступно + Хеш базе није доступно Client public key not received @@ -7405,7 +6407,7 @@ Do you want to overwrite it? Writing the database failed %1. - Писање базе података није успело %1. + Писање базе није успело %1. Successfully added entry %1. @@ -7665,13 +6667,9 @@ Do you want to overwrite it? Too many arguments provided. - - Path of the database. - Путања до базе података. - Target decryption time in MS for the database. - Циљно време дешифровања басе података у МС. + Target decryption time in MS for the database. time @@ -7679,16 +6677,20 @@ Do you want to overwrite it? Set the key file for the database. - Поставља Кључ-Датотеке за базу података. + Поставља кључ за базу. Set a password for the database. - Пставља лозинку за базу података. + Пставља лозинку за базу. Create a new database. Креирајте нову базу података. + + Path of the database. + Путања до базе података. + Invalid decryption time %1. Неважеће време дешифровања %1. @@ -7699,7 +6701,7 @@ Do you want to overwrite it? Failed to set database password. - Постављање лозинке базе података није успело. + Постављање лозинке базе није успело. Loading the key file failed @@ -7733,158 +6735,6 @@ Do you want to overwrite it? Successfully created new database. Успешно направљена нова база података. - - Unset the password for the database. - - - - Unset the key file for the database. - - - - Edit a database. - - - - Cannot use %1 and %2 at the same time. - - - - Could not change the database key. - - - - Database was not modified. - - - - Writing the database failed: %1 - Писање базе података није успело: %1 - - - Successfully edited the database. - - - - Cannot remove password: The database does not have a password. - - - - Cannot remove file key: The database does not have a file key. - - - - Loading the new key file failed: %1 - - - - Found unexpected Key type %1 - - - - Cannot remove all the keys from a database. - - - - Show a database's information. - Прикажите информације о бази података. - - - UUID: - UUID: - - - Name: - Име: - - - Description: - Опис: - - - Cipher: - Шифра: - - - KDF: - KDF: - - - Recycle bin is enabled. - Канта за отпад је омогућена. - - - Recycle bin is not enabled. - Канта за отпад је онемогућена. - - - Location - Смештај - - - Database created - - - - Last saved - Последње сачувавање - - - Unsaved changes - Несачуване промене - - - yes - да - - - no - не - - - Number of groups - Број група - - - Number of entries - Број уноса - - - Number of expired entries - Број уноса који су истекли - - - Unique passwords - Јединствене лозинке - - - Non-unique passwords - Дупликатне лозинке - - - Maximum password reuse - Максимална поновна употреба лозинке - - - Number of short passwords - Број кратких лозинки - - - Number of weak passwords - Број слабих лозинки - - - Entries excluded from reports - Уноси изузети из извештаја - - - Average password length - Просечна дужина лозинке - - - %1 characters - %1 карактера - Word count for the diceware passphrase. Број речи за фразу као коцкице. @@ -7907,6 +6757,10 @@ Do you want to overwrite it? Invalid word count %1 Неважеће бројање речи %1 + + The word list is too small (< 1000 items) + Листа речи је премала (<1000 предмета) + Title for the entry. Наслов уноса. @@ -7931,6 +6785,10 @@ Do you want to overwrite it? Enter new password for entry: Унети нову лозинку за унос: + + Writing the database failed: %1 + Писање базе података није успело: %1 + Successfully edited entry %1. Унос %1 је успешно уређен. @@ -8051,6 +6909,10 @@ Do you want to overwrite it? Exit interactive mode. Изађите из интерактивног режима. + + Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. + + Exports the content of a database to standard output in the specified format. Извози садржај базе података на стандардни излаз у наведеном формату. @@ -8085,7 +6947,7 @@ Do you want to overwrite it? Use special characters - Користити специјалне карактере + Користити специјална слова Use extended ASCII @@ -8093,11 +6955,11 @@ Do you want to overwrite it? Exclude character set - Изузети скуп карактера + Изузети скуп знакова chars - кар. + слов. Use custom character set @@ -8145,11 +7007,111 @@ Do you want to overwrite it? Unable to import XML database: %1 - Увоз није могућ XML базе података: %1 + Увоз није могућ XML базе: %1 Successfully imported database. - Успешан увоз базе података. + Успешан увоз базе. + + + Show a database's information. + Прикажите информације о бази података. + + + UUID: + UUID: + + + Name: + Име: + + + Description: + Опис: + + + Cipher: + Шифра: + + + KDF: + KDF: + + + Recycle bin is enabled. + Канта за отпад је омогућена. + + + Recycle bin is not enabled. + Канта за отпад је онемогућена. + + + Location + Смештај + + + Database created + + + + Last saved + Последње сачувавање + + + Unsaved changes + Несачуване промене + + + yes + да + + + no + не + + + Number of groups + Број група + + + Number of entries + Број уноса + + + Number of expired entries + Број уноса који су истекли + + + Unique passwords + Јединствене лозинке + + + Non-unique passwords + Дупликатне лозинке + + + Maximum password reuse + Максимална поновна употреба лозинке + + + Number of short passwords + Број кратких лозинки + + + Number of weak passwords + Број слабих лозинки + + + Entries excluded from reports + Уноси изузети из извештаја + + + Average password length + Просечна дужина лозинке + + + %1 characters + %1 карактера Unknown command %1 @@ -8199,11 +7161,11 @@ Available commands: Use the same credentials for both database files. - Користите исте акредитиве за обе датотеке базе података. + Користите исте акредитиве за обе датотеке базе. Key file of the database to merge from. - Кауч-датотека базе података из које се спаја. + Кауч-датотека базе из које се спаја. Deactivate password key for the database to merge from. @@ -8223,21 +7185,21 @@ Available commands: Merge two databases. - Споји две базе података + Удружи две базе података Path of the database to merge from. - Путање базе података из које се спаја. + Путање базе из које се спаја. Error reading merge file: %1 - Грешка при читању спојене датотеке: + Грешка при читању удружене датотеке: %1 Unable to save database to file : %1 - Није могуће сачувати базу података у датотеку: %1 + Није могуће сачувати базу у датотеку: %1 Successfully merged %1 into %2. @@ -8281,7 +7243,7 @@ Available commands: Unable to save database to file: %1 - Није могуће сачувати базу података у датотеку: %1 + Није могуће сачувати базу у датотеку: %1 Successfully recycled entry %1. @@ -8301,7 +7263,7 @@ Available commands: Successfully recycled group %1. - Успешно рециклирана група %1. + Успешно избрисана група %1. Successfully deleted group %1. @@ -8323,10 +7285,6 @@ Available commands: Show the protected attributes in clear text. Прикажите заштићене атрибуте у чистом тексту. - - Show all the attributes of the entry. - - Show the attachments of the entry. @@ -8361,15 +7319,15 @@ Available commands: Failed to open database file %1: not found - Отварање датотеке базе података %1 није успело: није пронађено + Отварање датотеке базе %1 није успело: није пронађено Failed to open database file %1: not a plain file - Отварање датотеке базе података %1 није успело: није текст датотека + Отварање датотеке базе %1 није успело: није текст датотека Failed to open database file %1: not readable - Отварање датотеке базе података %1 није успело: није читљиво + Отварање датотеке базе %1 није успело: није читљиво Enter password to unlock %1: @@ -8377,7 +7335,7 @@ Available commands: Failed to load key file %1: %2 - Учитавање Кључ-Датотеке није успело %1: %2 + Учитавање датотеке кључа није успело %1: %2 WARNING: You are using an old key file format which KeePassXC may @@ -8397,13 +7355,9 @@ Please consider generating a new key file. Invalid YubiKey serial %1 Неважећи YubiKey серијал %1 - - Please present or touch your YubiKey to continue. - - Enter password to encrypt database (optional): - Унесите лозинку за шифровање базе података (опционално): + Унесите лозинку за шифровање базе (опционално): Do you want to create a database with an empty password? [y/N]: @@ -8638,6 +7592,18 @@ Kernel: %3 %4 file empty датотека је празна + + malformed string + неисправна ниска + + + missing closing quote + недостаје завршни наводник + + + %1: (row, col) %2,%3 + %1: (линије, колоне) %2,%3 + AES 256-bit AES 256-бит @@ -8810,12 +7776,20 @@ Kernel: %3 %4 key file of the database - кључ-датотека од базе података + кључ-датотека од базе read password of the database from stdin + + allow app screen recordering and screenshots + + + + Locked databases. + + Database failed to lock. @@ -8824,10 +7798,6 @@ Kernel: %3 %4 Another instance of KeePassXC is already running. Друга инстанца KeePassXC апликације је већ активна. - - KeePassXC is not running. No open database to lock - - Fatal error while testing the cryptographic functions. @@ -8838,7 +7808,7 @@ Kernel: %3 %4 Database password: - Лозинка базе података: + Лозинка базе: Invalid Settings @@ -8871,298 +7841,68 @@ Kernel: %3 %4 - Access to all entries is denied + Please present or touch your YubiKey to continue. - allow screenshots and app recording (Windows/macOS) + Show all the attributes of the entry. + + + + Edit a database. + + + + Could not change the database key. + + + + Database was not modified. + + + + Successfully edited the database. + + + + Loading the new key file failed: %1 + + + + Unset the password for the database. + + + + Unset the key file for the database. + + + + Cannot use %1 and %2 at the same time. + + + + Cannot remove all the keys from a database. + + + + Cannot remove password: The database does not have a password. + + + + Cannot remove file key: The database does not have a file key. + + + + Found unexpected Key type %1 Set the key file for the database. -This option is deprecated, use --set-key-file instead. +This options is deprecated, use --set-key-file instead. - Databases have been locked. - - - - Attestation not supported - - - - Credential is excluded - - - - Passkeys request canceled - - - - Invalid user verification - - - - Empty public key - - - - Invalid URL provided - - - - Passkeys - - - - AES initialization failed - - - - AES encrypt failed - - - - Failed to store in Linux Keyring - - - - Polkit returned an error: %1 - - - - Could not locate key in keyring - - - - Could not read key in keyring - - - - AES decrypt failed - - - - No Polkit authentication agent was available - - - - Polkit authorization failed - - - - No Quick Unlock provider is available - - - - Failed to init KeePassXC crypto. - - - - Failed to encrypt key data. - - - - Failed to get Windows Hello credential. - - - - Failed to decrypt key data. - - - - Origin is empty or not allowed - - - - Effective domain is not a valid domain - - - - Origin and RP ID do not match - - - - No supported algorithms were provided - - - - Wait for timer to expire - - - - Challenge is shorter than required minimum length - - - - user.id does not match the required length - - - - Favorite - Tag for favorite entries - - - - File does not exist. - - - - Cannot open file: %1 - - - - Cannot parse file: %1 at position %2 - - - - Failed to decrypt json file: %1 - - - - Invalid encKeyValidation field - - - - Invalid cipher list within encKeyValidation field - - - - Wrong password - - - - Invalid encrypted data field - - - - Invalid cipher list within encrypted data field - - - - Cannot initialize cipher - - - - Cannot decrypt data - - - - Bitwarden Import - - - - Archived - Tag for archived entries - - - - Invalid 1PUX file format: Not a valid ZIP file. - - - - Invalid 1PUX file format: Missing export.data - - - - 1Password Import - - - - Enter Shortcut - - - - Action - - - - Shortcuts - - - - Unknown passkeys error - - - - Invalid KDF iterations, cannot decrypt json file - - - - Unsupported format, ensure your Bitwarden export is password-protected - - - - Only PBKDF and Argon2 are supported, cannot decrypt json file - - - - Reset Shortcuts - - - - Double click an action to change its shortcut - - - - Filter... - - - - Shortcut Conflict - - - - Shortcut %1 conflicts with '%2'. Overwrite shortcut? - - - - Cannot generate valid passphrases because the wordlist is too short - - - - Encrypted files are not supported. - - - - Proton Pass Import - - - - Delete plugin data? - Обрисати податке о додатку? - - - Delete plugin data from Entry(s)? - - - - Passkey - - - - Format to use when exporting. Available choices are 'xml', 'csv' or 'html'. Defaults to 'xml'. - - - - start minimized to the system tray - - - - malformed string, possible unescaped delimiter - - - - missing closing delimiter - - - - %1, row: %2, column: %3 - - - - Tags + KeePassXC is not running. No open database to lock @@ -9170,7 +7910,7 @@ This option is deprecated, use --set-key-file instead. QtIOCompressor Internal zlib error when compressing: - Интерна zlib грешка при компримовању: + Интерна zlib грешка при компресије: Error writing to underlying device: @@ -9200,39 +7940,20 @@ This option is deprecated, use --set-key-file instead. Интерна zlib грешка: - - RemoteHandler - - Command `%1` did not finish in time. Process was killed. - - - - Failed to upload merged database. Command `%1` did not finish in time. Process was killed. - - - - Invalid download parameters provided. - - - - Command `%1` failed to download database. - - - - Invalid database pointer or upload parameters provided. - - - - Command `%1` exited with status code: %2 - - - - Failed to upload merged database. Command `%1` exited with status code: %2 - - - ReportsWidgetBrowserStatistics + + Exclude expired entries from the report + + + + Show only entries which have URL set + + + + Show only entries which have browser settings in custom data + + Double-click entries to edit. @@ -9297,53 +8018,44 @@ This option is deprecated, use --set-key-file instead. Exclude from reports Изузети из извештаја - - Expire Entry(s)… - - - - Only show entries that have a URL - - - - Only show entries that have been explicitly allowed or denied - - - - Show expired entries - - - - (Expired) - - - - Delete plugin data from Entry(s)… - - ReportsWidgetHealthcheck - Show expired entries + Exclude expired entries from the report - (Expired) - + Also show entries that have been excluded from reports + Такође прикажи уносе који су изузети из извештаја Hover over reason to show additional details. Double-click entries to edit. Пређите преко разлога да бисте приказали додатне детаље. Двапут кликните на уносе за уређивање. + + Bad + Password quality + Баш лоше + Bad — password must be changed Баш лоше — лозинка мора бити промењена + + Poor + Password quality + Бедан + Poor — password should be changed Лоше — лозинку треба променити + + Weak + Password quality + Слаб + Weak — consider changing the password Слабо — размислите о промени лозинке @@ -9392,14 +8104,6 @@ This option is deprecated, use --set-key-file instead. Exclude from reports Изузети из извештаја - - Expire Entry(s)… - - - - Show entries that have been excluded from reports - - ReportsWidgetHibp @@ -9495,77 +8199,6 @@ This option is deprecated, use --set-key-file instead. Exclude from reports Изузети из извештаја - - Expire Entry(s)… - - - - - ReportsWidgetPasskeys - - Export - Извоз - - - Import - Увези - - - List of entry URLs - - - - Title - Наслов - - - Path - Путања - - - Username - Корисничко име - - - URLs - - - - Edit Entry… - - - - Delete Entry(s)… - - - - Relying Party - - - - Show expired entries - - - - (Expired) - - - - Export Confirmation - Потврда извоза - - - The passkey file will be vulnerable to theft and unauthorized use, if left unsecured. Are you sure you want to continue? - - - - Please wait, list of entries with passkeys is being updated… - - - - No entries with passkeys. - - ReportsWidgetStatistics @@ -9635,7 +8268,7 @@ This option is deprecated, use --set-key-file instead. The database contains entries that have expired. - База података садржи уносе којима је истекао рок трајања. + База садржи уносе којима је истекао рок трајања. Unique passwords @@ -9647,7 +8280,7 @@ This option is deprecated, use --set-key-file instead. More than 10% of passwords are reused. Use unique passwords when possible. - Више од 10% лозинки се користе више пута. Користите јединствене лозинке када је то могуће. + Више од 10% лозинки се више пута користе. Користите јединствене лозинке када је то могуће. Maximum password reuse @@ -9706,7 +8339,7 @@ This option is deprecated, use --set-key-file instead. No agent running, cannot add identity. - Ни један агент не ради, не може да се дода идентитет. + Агент не ради, не може да се дода идентитет. Key identity ownership conflict. Refusing to add. @@ -9722,7 +8355,7 @@ This option is deprecated, use --set-key-file instead. Restricted lifetime is not supported by the agent (check options). - Агент не подржава ограничени радни век (означите опције). + Агент не подржава ограничени радни век (провери опције). A confirmation request is not supported by the agent (check options). @@ -9734,20 +8367,12 @@ This option is deprecated, use --set-key-file instead. No agent running, cannot remove identity. - Ни један агент не ради, не може да се уклони идентитет. + Агент не ради, не може да се уклони идентитет. No agent running, cannot list identities. Ниједан агент није покренут, не може да наведе идентитете. - - Failed to remove all SSH identities from agent. - - - - All SSH identities removed from agent. - - SearchHelpWidget @@ -9769,7 +8394,7 @@ This option is deprecated, use --set-key-file instead. exclude term from results - изузети појам из резултата + изузет термин из резултата match term exactly @@ -9789,7 +8414,7 @@ This option is deprecated, use --set-key-file instead. match anything - подудара се са било чим + подударати се са било чим match one @@ -9814,10 +8439,6 @@ This option is deprecated, use --set-key-file instead. Search Help Претражи помоћ - - Save Search - - Search (%1)… Search placeholder text, %1 is the keyboard shortcut @@ -9831,6 +8452,10 @@ This option is deprecated, use --set-key-file instead. Limit search to selected group Ограничите претрагу на изабрану групу + + Save Search + + SettingsClientModel @@ -9892,10 +8517,26 @@ This option is deprecated, use --set-key-file instead. Confirm when passwords are retrieved by clients + + <html><head/><body><p><span style=" + font-family:'-apple-system','BlinkMacSystemFont','Segoe UI','Helvetica','Arial','sans-serif','Apple Color + Emoji','Segoe UI Emoji'; font-size:14px; color:#24292e; background-color:#ffffff;">This setting does + not override disabling recycle bin prompts</span></p></body></html> + + + Confirm when clients request entry deletion + + <html><head/><body><p>This improves compatibility with certain applications + which search for password without unlocking the database first.</p><p>But enabling this may also + crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a + different value set in applications.)</p></body></html> + + + Prompt to unlock database before searching @@ -9920,14 +8561,6 @@ This option is deprecated, use --set-key-file instead. Save current changes to activate the plugin and enable editing of this section. Сачувајте тренутне промене да бисте активирали додатак и омогућите уређивање ове секције. - - <html><head/><body><p>This setting does not override disabling recycle bin prompts </p></body></html> - - - - <html><head/><body><p>This improves compatibility with certain applications which search for password without unlocking the database first.</p><p>But enabling this may also crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a different value set in applications.) </p></body></html> - - SettingsWidgetKeeShare @@ -9973,7 +8606,7 @@ This option is deprecated, use --set-key-file instead. Fingerprint: - Отисак: + Отисак прста: Signer name field @@ -9981,7 +8614,7 @@ This option is deprecated, use --set-key-file instead. Fingerprint - Отисак + Отисак прста @@ -10036,7 +8669,11 @@ This option is deprecated, use --set-key-file instead. TagModel - Clear Search + Expired + + + + Weak Passwords @@ -10044,11 +8681,7 @@ This option is deprecated, use --set-key-file instead. - Expired - - - - Weak Passwords + Clear Search @@ -10118,7 +8751,7 @@ This option is deprecated, use --set-key-file instead. Secret key must be in Base32 format - Тајни кључ треба бити у „Base32“ формату + Тајни кључ треба бити у Base32 формат Secret key field @@ -10228,30 +8861,38 @@ Example: JBSWY3DPEHPK3PXP Start storing your passwords securely in a KeePassXC database Почните да безбедно складиштите лозинке у KeePassXC бази података + + Create new database + Креирајте нову базу + + + Open existing database + Отворити постојећу базу + + + Import from KeePass 1 + Увоз из KeePass 1 + + + Import from 1Password + Увоз из 1Password + + + Import from CSV + Увоз из CSV + Recent databases - Недавне базе података + Недавне базе Open a recent database - Отвори недавну базу података + Отвори недавну базу Welcome to KeePassXC %1 Добродошли у KeePassXC %1 - - Create Database - - - - Open Database - - - - Import File - - WinUtils @@ -10268,8 +8909,31 @@ Example: JBSWY3DPEHPK3PXP Није могуће регистровати глобалну пречицу + + WindowsHello + + Failed to init KeePassXC crypto. + + + + Failed to encrypt key data. + + + + Failed to get Windows Hello credential. + + + + Failed to decrypt key data. + + + YubiKey + + %1 No interface, slot %2 + + General: @@ -10281,6 +8945,14 @@ Example: JBSWY3DPEHPK3PXP YubiKeyEditWidget + + Refresh hardware tokens + Освежи хардверске токене + + + Refresh + Освежи + Hardware key slot selection Избор слота хардверског кључа @@ -10313,6 +8985,10 @@ Example: JBSWY3DPEHPK3PXP Challenge-Response set, click to change or remove + + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + + Detecting hardware keys… Откривање хардверских кључева… @@ -10321,25 +8997,28 @@ Example: JBSWY3DPEHPK3PXP No hardware keys detected Нема хардверских кључева + + + YubiKeyInterface - Refresh hardware keys - - - - <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed with <a href="https://keepassxc.org/docs/#faq-yubikey-howto">Challenge-Response</a>.</p> - - - - Hardware keys found, but no slots are configured - + %1 Invalid slot specified - %2 + %1 погрешан слот - %2 YubiKeyInterfacePCSC + + (PCSC) %1 [%2] Challenge-Response - Slot %3 + + The YubiKey PCSC interface has not been initialized. + + Hardware key is currently in use. + Тренутно се користи хардверски кључ. + Could not find or access hardware key with serial number %1. Please present it to continue. @@ -10356,21 +9035,6 @@ Example: JBSWY3DPEHPK3PXP Failed to complete a challenge-response, the PCSC error code was: %1 - - (NFC) %1 [%2] - Slot %3, %4 - YubiKey display fields - - - - Press - USB Challenge-Response Key interaction request - Притисни - - - Passive - USB Challenge-Response Key no interaction required - Пасивно - YubiKeyInterfaceUSB @@ -10378,6 +9042,14 @@ Example: JBSWY3DPEHPK3PXP Unknown Непознато + + (USB) %1 [%2] Configured Slot - %3 + + + + (USB) %1 [%2] Challenge-Response - Slot %3 - %4 + + Press USB Challenge-Response Key interaction request @@ -10392,6 +9064,10 @@ Example: JBSWY3DPEHPK3PXP The YubiKey USB interface has not been initialized. + + Hardware key is currently in use. + Тренутно се користи хардверски кључ. + Could not find hardware key with serial number %1. Please plug it in to continue. @@ -10408,15 +9084,5 @@ Example: JBSWY3DPEHPK3PXP Failed to complete a challenge-response, the specific error was: %1 - - %1 [%2] - Slot %3 - YubiKey NEO display fields - - - - %1 [%2] - Slot %3, %4 - YubiKey display fields - - \ No newline at end of file diff --git a/share/translations/keepassxc_sv.ts b/share/translations/keepassxc_sv.ts index 341ae3813..8a4553bfa 100644 --- a/share/translations/keepassxc_sv.ts +++ b/share/translations/keepassxc_sv.ts @@ -80,10 +80,6 @@ Details Detaljerat - - Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. - Ditt beslut kommer att sparas under den tid som både den begärande klienten OCH KeePassXC körs. - Remember Kom ihåg @@ -92,6 +88,10 @@ Allow Selected Tillåt markerade + + Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. + Ditt beslut kommer att sparas under den tid som både den begärande klienten OCH KeePassXC körs. + Deny All && Future Neka alla && framtida @@ -122,10 +122,6 @@ Use OpenSSH Använd OpenSSH - - Use both agents - Använd båda agenterna - SSH_AUTH_SOCK override SSH_AUTH_SOCK åsidosättning @@ -154,6 +150,10 @@ SSH Agent connection is working! SSH-tjänstens anslutning arbetar! + + Use both agents + Använd båda agenterna + ApplicationSettingsWidget @@ -169,10 +169,6 @@ Security Säkerhet - - This setting cannot be enabled when minimize on unlock is enabled. - Denna inställning kan inte aktiveras om minimering vid upplåsning är aktiverad. - Access error for config file %1 Åtkomstfel för konfigurationsfil %1 @@ -217,49 +213,21 @@ You must restart the application to set the new language. Would you like to restart now? Du måste starta om programmet för att tillämpa det nya språket. Vill du starta om nu? + + Reset Settings? + Vill du återställa inställningarna? + + + Are you sure you want to reset all general and security settings to default? + Vill du verkligen återställa alla allmäna och säkerhetsinställningar till standardinställning? + Select backup storage directory Välj lagringsplats för säkerhetskopior - Confirm Reset - Bekräfta återställning - - - Are you sure you want to reset all settings to default? - Vill du verkligen återställa alla inställningar till standardinställning? - - - Import KeePassXC Settings - Importera KeePassXC-inställningar - - - Failed to import settings from %1, not a valid settings file. - Kunde inte importera inställningar från %1, ingen giltig inställningsfil. - - - Export KeePassXC Settings - Exportera KeePassXC-inställningar - - - Small - Liten - - - Normal - Normal - - - Medium - Medium - - - Large - Stor - - - Custom - Anpassad + This setting cannot be enabled when minimize on unlock is enabled. + Denna inställning kan inte aktiveras om minimering vid upplåsning är aktiverad. @@ -292,10 +260,6 @@ Remember previously used databases Kom ihåg tidigare databaser - - recent files - tidigare filer - Load previously open databases on startup Läs in tidigare öppna databaser vid programstart @@ -312,6 +276,25 @@ Include beta releases when checking for updates Inkludera betaversioner vid sökning efter uppdateringar + + On database unlock, show entries that + Vid databasupplåsning, visa poster som + + + have expired + On database unlock, show entries that... + har upphört att gälla + + + days + On database unlock, show entries that will expire within %1 days + dagar + + + will expire within + On database unlock, show entries that... + går ut inom + File Management Filhantering @@ -336,10 +319,22 @@ Backup database file before saving Säkerhetskopiera databasfilen innan den sparas + + Backup destination + Säkerhetskopieringsmål + + + Specifies the database backup file location. Occurrences of "{DB_FILENAME}" are replaced with the filename of the saved database without extension. {TIME:<format>} is replaced with the backup time, see https://doc.qt.io/qt-5/qdatetime.html#toString. <format> defaults to format string "dd_MM_yyyy_hh-mm-ss". + Anger platsen för databasens säkerhetskopia. Förekomster av {DB_FILENAME}" ersätts med filnamnet för den sparade databasen utan filtillägg. {TIME:<format>} ersätts med säkerhetskopieringstiden, se https://doc.qt.io/qt-5/qdatetime.html#toString. <format> standard för att formatera strängen "dd_MM_yyyy_hh-mm-ss". + {DB_FILENAME}.old.kdbx {DB_FILENAME}.old.kdbx + + Choose... + Välj... + Use alternative saving method (may solve problems with Dropbox, Google Drive, GVFS, etc.) Använd alternativ lagringsmetod (Kan lösa problem med Dropbox, Google Drive, GVFS, etc.) @@ -417,10 +412,6 @@ Toolbar button style: Knappstil för verktygsfält: - - Show passwords in color - Visa lösenord i färg - Use monospaced font for notes Använd teckensnitt med fast teckenbredd för anteckningar @@ -455,11 +446,11 @@ Use entry title to match windows for global Auto-Type - Använd postens titel för att matcha fönster vid global autoskriv + Använd postens titel för att matcha fönster vid systemövergripande autoskriv Use entry URL to match windows for global Auto-Type - Använd postens URL för att matcha fönster vid global autoskriv + Använd postens URL för att matcha fönster vid systemövergripande autoskriv Always ask before performing Auto-Type @@ -507,69 +498,12 @@ Kom ihåg senast inmatade post för: - On database unlock, show entries that will expire within - Vid databasupplåsning, visa poster som förfaller inom + recent files + tidigare filer - On database unlock, show entries that will expire within - Vid databasupplåsning, visa poster som förfaller inom - - - days - number of days warning for password expiration - dagar - - - Destination format: - Målformat: - - - <html><head/><body><p><span style=" font-weight:600;">{DB_FILENAME}</span> is replaced with the filename of the saved database without extension</p><p><span style=" font-weight:600;">{TIME:&lt;format&gt;}</span> is replaced with the specified time format (default: dd_MM_yyyy_hh-mm-ss)</p><p>See the User Guide for more details</p></body></html> - <html><head/><body><p><span style=" font-weight:600;">{DB_FILENAME}</span> är ersatt av filnamnet för den sparade database utan filnamnstillägg.</p><p><span style=" font-weight:600;">{TIME:&lt;format&gt;}</span> år ersatt av specificerat tidsformat (standard: dd_MM_yyyy_hh-mm-ss).</p><p>Se användarmanualen för fler detaljer.</p></body></html> - - - Choose folder... - Välj mapp... - - - Show confirmation before moving entries to recycle bin - Visa bekräftelse innan poster flyttas till papperskorgen - - - Copy data on double clicking field in entry view - Kopiera data vid dubbelklick på fält i postvyn - - - Show toolbar - Visa verktygsfält - - - Show the menu bar by pressing the Alt key - Visa menyfältet genom att trycka på Alt-tangenten - - - Show menubar - Visa menyfält - - - Import settings… - Importera inställningar... - - - Export settings… - Exportera inställningar... - - - Open browser on double clicking URL field in entry view - Öppna webbläsare vid dubbelklick på URL i postvyn - - - Font size: - Teckenstorlek: - - - Font size selection - Teckenstorleksval + Show passwords in color + Visa lösenord i färg @@ -624,6 +558,10 @@ Lock databases after minimizing the window Lås databaserna när fönstret minimeras + + Require password repeat when it is visible + Kräv lösenordsupprepning när det är synligt + Hide passwords when editing them Dölj lösenord när de redigeras @@ -636,6 +574,18 @@ Hide passwords in the entry preview panel Dölj lösenord i förhandsgranskningsrutan + + Hide entry notes by default + Dölj posters anteckningar som standard + + + Move entries to recycle bin without confirmation + Flytta poster till papperskorgen utan bekräftelse + + + Enable double click to copy the username/password entry columns + Aktivera dubbelklick för att kopiera kolumnerna för användarnamn/lösenord + Privacy Integritet @@ -648,18 +598,6 @@ Hide TOTP in the entry preview panel Dölj TOTP i förhandsgranskningspanelen - - Lock databases when switching user - Lås databaserna vid byte av användare - - - Lock Options - Låsningsalternativ - - - Hide notes in the entry preview panel - Dölj anteckningar posters förhandgranskningspanel - AutoType @@ -704,13 +642,27 @@ Mycket lång fördröjning, max är %1: %2 - Entry does not have attribute for PICKCHARS: %1 - Posten har inget attribut för PICKCHARS: %1 + Invalid conversion type: %1 + Ogiltig konverteringstyp: %1 + + + Invalid conversion syntax: %1 + Ogiltig konverteringssyntax: %1 + + + Invalid regular expression syntax %1 +%2 + Ogiltig regular expression-syntax: %1 +%2 Invalid placeholder: %1 Ogiltig platshållare: %1 + + Entry does not have attribute for PICKCHARS: %1 + Posten har inget attribut för PICKCHARS: %1 + AutoTypeAssociationsModel @@ -752,6 +704,10 @@ AutoTypePlatformX11 + + Trying to send invalid keysym. + Försöker skicka en ogiltig tangentbordssymbol + Sequence aborted: Caps Lock is on Sekvensen avbröts: Caps Lock är på @@ -764,10 +720,6 @@ Unable to get valid keycode for key: Kunde inte hämta giltig nyckelkod för nyckeln: - - Trying to send invalid keyboard symbol. - Försöker skicka ogiltig tangentbordssymbol. - AutoTypeSelectDialog @@ -872,13 +824,13 @@ Ctrl+4 - Använd virtuellt tangentbord (Endast Windows)</p> Disable for this site Inaktivera för denna sida - - Undo - Ångra - BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + KeePassXC-Browser spara post + Ok OK @@ -893,74 +845,13 @@ Please select the correct database for saving credentials. Du ha flera databaser öppna. Välj rätt databas för att spara inloggningsuppgifterna. - - KeePassXC - Select Database - KeePassXC - Välj databas - - - - BrowserPasskeysConfirmationDialog - - Cancel - Avbryt - - - Update - Uppdatera - - - Authenticate - Autentisera - - - Register new - Registrera ny - - - Register - Registrera - - - Timeout in <b>%n</b> seconds... - Tidsgränsen löper ut om <b>%n</b> sekund...Tidsgränsen löper ut om <b>%n</b> sekunder... - - - Relying Party: %1 - Förlitande part: %1 - - - Username: %1 - Användarnamn: %1 - - - KeePassXC - Passkey credentials - KeePassXC - Passnyckeluppgifter - - - Add to existing entry - Lägg till i befintlig post - - - Existing passkey found. -Do you want to register a new passkey for: - Befintlig passnyckel hittad. -Vill du registrera en ny passnyckel för: - - - Select the existing passkey and press Update to replace it. - Markera den befintliga passnyckeln och tryck "Uppdatera" för att ersätta den. - - - Authenticate passkey credentials for: - Autentisera passnyckeluppgifter för: - - - Do you want to register a passkey for: - Vill du registrera passnyckel för: - BrowserService + + KeePassXC: Create a new group + KeePassXC: Skapa en ny grupp + A request for creating a new group "%1" has been received. Do you want to create this group? @@ -969,6 +860,10 @@ Do you want to create this group? Vill du skapa denna grupp? + + KeePassXC: New key association request + KeePassXC: Ny nyckelassocieringsbegäran + You have received an association request for the following database: %1 @@ -985,16 +880,28 @@ chrome-laptop. Save and allow access Spara och tillåt åtkomst + + KeePassXC: Overwrite existing key? + KeePassXC: Vill du skriva över befintlig nyckel? + A shared encryption key with the name "%1" already exists. Do you want to overwrite it? En delad krypteringsnyckel med namnet "%1" finns redan. Vill du skriva över den? + + KeePassXC: Update Entry + KeePassXC: Uppdatera post + Do you want to update the information in %1 - %2? Vill du uppdatera informationen i %1 - %2? + + KeePassXC: Delete entry + KeePassXC: Ta bort post + A request for deleting entry "%1" has been received. Do you want to delete the entry? @@ -1004,58 +911,50 @@ Vill du ta bort posten? - %1 (Passkey) - %1 (Passnyckel) + Converting attributes to custom data… + Konverterar attribut till anpassad data... - KeePassXC - Create a new group - KeePassXC - Skapa en ny grupp + Abort + Avbryt - Disable - Inaktivera + KeePassXC: Converted KeePassHTTP attributes + KeePassXC: Konverterade KeePassHTTP-attribut - KeePassXC - Overwrite existing key? - KeePassXC - Vill du skriva över befintlig nyckel? + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + Konverterade attribut från %1 post(er). +Flyttade %2 nycklar till anpassad data. + + + Successfully moved %n keys to custom data. + Flyttade %n nyckel till anpassad data.Flyttade %n nycklar till anpassad data. - KeePassXC - Update Entry - KeePassXC - Uppdatera post + KeePassXC: No entry with KeePassHTTP attributes found! + KeePassXC: Hittade ingen post med KeePassHTTP-attribut! - KeePassXC - Delete entry - KeePassXC - Ta bort post + The active database does not contain an entry with KeePassHTTP attributes. + Den aktiva databasen innehåller inte någon post med KeePassHTTP-attribut. - KeePassXC - New key association request - KeePassXC - Ny nyckelassocieringsbegäran + Don't show this warning again + Visa inte denna varning igen - Passkey - Passnyckel + KeePassXC: Legacy browser integration settings detected + KeePassXC: Föråldrade inställningar för webbläsarintegrering har identifierats - KeePassXC - Passkey credentials - KeePassXC - Passnyckeluppgifter - - - Register a new passkey to this entry: - Registrera en ny passnyckel för denna post: - - - KeePassXC - Update passkey - KeePassXC - Uppdatera Passnyckel - - - Entry already has a passkey. -Do you want to overwrite the passkey in %1 - %2? - Posten har redan en passnyckel. -Vill du skriva över passnyckeln i %1 - %2? - - - Register - Registrera + 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? + Dina inställningar för KeePassXC-Browser behöver flyttas in i databasinställningarna. +Detta är nödvändigt för att behålla dina aktuella webbläsaranslutningar. +Vill du migrera dina befintliga inställningar nu? @@ -1076,6 +975,10 @@ Vill du skriva över passnyckeln i %1 - %2? General Allmänt + + Browsers installed as snaps are currently not supported. + Webbläsare installerade via Snap, stöds för närvarande inte. + Enable integration for these browsers: Aktivera integrering i dessa webbläsare: @@ -1247,6 +1150,26 @@ Vill du skriva över passnyckeln i %1 - %2? Custom extension ID Anpassat tilläggs-ID + + Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 + På grund av Snaps sandlådeteknik, måste du köra ett skript för att aktivera webbläsarintegration.<br />Du kan hämta skriptet från %1 + + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 + KeePassXC-Browser behövs för att webbläsarintegrationen ska fungera. <br />Ladda ner dent för %1 och %2 och %3. %4 + + + Please see special instructions for browser extension use below + Se specialinstruktioner för webbläsarintegreringens användning nedan + + + <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. + <b>Fel:</b> Det går inte att hitta den anpassade proxyplatsen!<br/>Webbläsarintegration KOMMER INTE ATT FUNGERA utan proxyprogrammet. + + + <b>Warning:</b> The following options can be dangerous! + <b>Varning:</b> Följande alternativ kan vara farliga! + Executable Files Körbara filer @@ -1263,46 +1186,6 @@ Vill du skriva över passnyckeln i %1 - %2? Select native messaging host folder location Välj plats för den inbyggda värdmappen för meddelanden - - Allow keepassxc-proxy to list all entries with their title, URL and UUID in connected databases. - Tillåt keepassxc-proxy att lista alla poster med titel, URL och UUID i anslutna databaser. - - - Allow limited access to all entries in connected databases (ignores site access restrictions) - Tillåt begränsad åtkomst till alla poster i anslutna databaser (ignorerar begränsningar för webbplatsåtkomst) - - - <b>Warning:</b> Only adjust these settings if necessary. - <b>Varning!</b> Justera dessa inställningar endast om nödvändigt. - - - The custom proxy location does not exist. - Den anpassade proxyplatsen finns inte. - - - <b>Error:</b> The custom proxy location does not exist. Correct this in the advanced settings tab. - <b>Fel:</b> Den anpassade proxyplatsen finns inte. Korrigera det i avancerade inställningar. - - - <b>Error:</b> The installed proxy executable is missing from the expected location: %1<br/>Please set a custom proxy location in the advanced settings or reinstall the application. - <b>Fel:</b> Den installerade körbara proxyfilen saknas på den förväntade platsen: %1<br/>Ange en anpassad proxyplats i de avancerade inställningarna eller installera om programmet. - - - Allows using insecure http://localhost with passkeys for testing purposes. - Tillåter användning av osäker http://localhost med passnycklar för teständamål. - - - Allow using localhost with passkeys - Tillåt användning av localhost med passnycklar - - - KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. - KeePassXC-Browser behövs för att webbläsarintegrationen ska fungera. <br />Ladda ner det för %1 och %2 och %3. - - - Browsers installed using Snap or Flatpak are not supported with exception to Firefox installed using Snap. - Webbläsare som är installerade via Snap eller Flatpak stöds inte, med Firefox via Snap som enda undantag. - CloneDialog @@ -1325,6 +1208,14 @@ Vill du skriva över passnyckeln i %1 - %2? CsvImportWidget + + Import CSV fields + Importera CSV-fält + + + filename + filnamn + size, rows, columns storlek, rader, kolumner @@ -1433,43 +1324,50 @@ Vill du skriva över passnyckeln i %1 - %2? Column %1 Kolumn %1 + + Imported from CSV file + Importerat från CSV-fil + + + Original data: + Ursprunglig data: + + + Error(s) detected in CSV file! + Fel upptäckta i CSV-fil! + [%n more message(s) skipped] [%n meddelande hoppades över][%n meddelanden hoppades över] - Failed to parse CSV file: %1 - CSV-filen kunde inte tolkas: %1 + Error + Fel - Imported from CSV file: %1 - Importerat från CSV-fil: %1 - - - No Title Selected - Ingen titel vald - - - No title column was selected, entries will be hard to tell apart. -Are you sure you want to import? - Ingen titelkolumn valdes, Posterna kommer att bli svåra att särskilja. -Vill du verkligen importera? - - - Tags - Taggar + CSV import: writer has errors: +%1 + CSV-import: Skrivare har fel: +%1 CsvParserModel + + %1, %2, %3 + file info: bytes, rows, columns + %1, %2, %3 + + + %n byte(s) + %n byte%n byte + %n row(s) - CSV row count %n rad%n rader %n column(s) - CSV column count %n kolumn%n kolumner @@ -1498,7 +1396,7 @@ Vill du verkligen importera? Database save is already in progress. - Databasens sparande pågår redan. + Dtabasens sparande pågår redan. Could not save, database has not been initialized! @@ -1522,14 +1420,6 @@ Säkerhetskopierad databas hittad i %2 Recycle Bin Papperskorg - - Database file read error. - Kunde inte läsa databasfilen. - - - No file path was provided. - Ingen filsökväg angavs. - DatabaseOpenDialog @@ -1552,10 +1442,30 @@ Säkerhetskopierad databas hittad i %2 Password field Lösenord + + Enter Additional Credentials (if any): + Ange fler autentiseringsuppgifter (om det finns några): + + + Key File: + Nyckelfil: + + + Key file help + Nyckelfilshjälp + Hardware key slot selection Val av plats för hårdvarunyckel + + Hardware Key: + Hårdvarunyckel: + + + Hardware key help + Hjälp med hårdvarunyckel + Key file to unlock the database Nyckelfil för att låsa upp databasen @@ -1568,6 +1478,14 @@ Säkerhetskopierad databas hittad i %2 Browse… Bläddra… + + Refresh hardware tokens + Uppdatera hårdvaru-tokens + + + Refresh + Uppdatera + Unlock Database Lås upp databasen @@ -1631,6 +1549,10 @@ För att förhindra att detta fel uppstår igen, måste du gå till "Databa Retry with empty password Försök med tomt lösenord + + Failed to authenticate with Touch ID + Kunde inte autentisera med Touch ID + Failed to open key file: %1 Kunde inte öppna nyckelfil: %1 @@ -1663,69 +1585,41 @@ För att förhindra att detta fel uppstår igen, måste du gå till "Databa Cannot use database file as key file Kan inte använda en databasfil som nyckelfil + + You cannot use your database file as a key file. +If you do not have a key file, please leave the field empty. + Du kan inte använda din databasfil som nyckelfil. +Om du inte har någon nyckelfil, lämnar du fältet tomt. + + + Detecting hardware keys… + Identifierar hårdvarunycklar... + + + No hardware keys detected + Inga hårdvarunycklar identifierade + + + Select hardware key… + Välj hårdvarunyckel... + + + <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information…</p> + <p>Som tillägg till ett lösenord, kan du använda en hemlig fil för att förbättra säkerheten i din databas. En sådan fil kan genereras i databasens säkerhetsinställningar.</p><p>Detta är <strong>inte</strong> din *.kdbx-databasfil!<br>Om du inte har någon nyckelfil, lämnar du fältet tomt.</p><p>Klicka för mer information...</p> + + + <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +<p>Click for more information…</p> + <p>Du kan använda en hårdvarunyckel såsom <strong>YubiKey</strong> eller <strong>OnlyKey</strong> med anslutningsplatser konfigurerade för HMAC-SHA1.</p> +<p>Klicka för mer information...</p> + authenticate to access the database autentisera för åtkomst till databasen - Failed to authenticate with Quick Unlock: %1 - Kunde inte autentisera med Quick Unlock: %1 - - - Select Key File: - Välj nyckelfil: - - - <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!</p> - <p>Som tillägg till ett lösenord, kan du använda en hemlig fil för att förbättra säkerheten i din databas. En sådan fil kan genereras i databasens säkerhetsinställningar.</p><p>Detta är <strong>inte</strong> din *.kdbx-databasfil!</p> - - - Use hardware key [Serial: %1] - Använd hårdvarunyckel [Serienummer: %1] - - - Use hardware key - Använd hårdvarunyckel - - - Your database file is NOT a key file! -If you don't have a key file or don't know what that is, you don't have to select one. - Din databasfil är INTE en nyckelfil! -Om du inte har någon nyckelfil eller inte vet vad det är, behöver du inte välja något. - - - KeePassXC database file selected - KeePassXC databasfil vald - - - The file you selected looks like a database file. -A database file is NOT a key file! - -Are you sure you want to continue with this file?. - Filen du valde ser ut som en databasfil. -En databasfil är INTE en nyckelfil! - -Vill du verkligen fortsätta med den här filen? - - - No hardware keys found. - Inga hårdvarunycklar hittades. - - - Refresh Hardware Keys - Uppdatera hårdvarunycklar - - - Click to add a key file. - Klicka för att lägga till en nyckelfil. - - - <a href="#" style="text-decoration: underline">I have a key file</a> - <a href="#" style="text-decoration: underline">Jag har en nyckelfil</a> - - - Hardware keys found, but no slots are configured. - Hårdvarunycklar hittades, men inga anslutningsplatser är konfigurerade. + Failed to authenticate with Windows Hello: %1 + Kunde inte autentisera med Windows Hello: %1 @@ -1737,6 +1631,10 @@ Vill du verkligen fortsätta med den här filen? DatabaseSettingsDialog + + Advanced Settings + Avancerade inställningar + General Allmänt @@ -1761,22 +1659,6 @@ Vill du verkligen fortsätta med den här filen? Maintenance Underhåll - - KeeShare - KeeShare - - - Secret Service Integration - Secret Service-integration - - - Remote Sync - Fjärrsynkronisering - - - Database Settings: %1 - Databasinställningar: %1 - DatabaseSettingsWidgetBrowser @@ -1784,6 +1666,18 @@ Vill du verkligen fortsätta med den här filen? KeePassXC-Browser settings KeePassXC-Browser-inställningar + + Convert KeePassHTTP data + Konvertera KeePassHTTP-data + + + Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data + Konvertera äldre KeePassHTTP-attribut till KeePassXC-Browser-kompatibel anpassad data + + + Refresh database root group ID + Uppdatera databasens rotgrupps-ID + Disconnect all browsers Koppla bort alla webbläsare @@ -1792,10 +1686,6 @@ Vill du verkligen fortsätta med den här filen? Forget all site-specific settings on entries Glöm alla sidspecifika inställningar i befintliga poster - - Refresh database root group ID - Uppdatera databasens rotgrupps-ID - Stored keys Lagrade nycklar @@ -1844,10 +1734,18 @@ This may prevent connection to the browser plugin. Vill du verkligen koppla bort alla webbläsare? Detta kan förhindra anslutning till webbläsartillägget. + + KeePassXC: No keys found + KeePassXC: Inga nycklar hittades + No shared encryption keys found in KeePassXC settings. Inga delade krypteringsnycklar hittades i KeePassXC:s inställningar. + + KeePassXC: Removed keys from database + KeePassXC: Tog bort nycklar från databasen + Successfully removed %n encryption key(s) from KeePassXC settings. Tog bort %n krypteringsnyckel från KeePassXC:s inställningar.Tog bort %n krypteringsnycklar från KeePassXC:s inställningar. @@ -1866,14 +1764,32 @@ Behörighet att komma åt posterna kommer att återkallas. Abort Avbryt + + KeePassXC: Removed permissions + KeePassXC: Tog bort behörigheter + Successfully removed permissions from %n entry(s). Tog bort behörighet från %n post.Tog bort behörigheter från %n poster. + + 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 ingen post med behörigheter. + + Move KeePassHTTP attributes to custom data + Flytta KeePassHTTP-attribut till anpassad data + + + Do you really want to convert all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + Vill du verkligen flytta all äldre webbläsarintegrationsdata till den senaste standarden? +Detta är nödvändigt för att få kompatibilitet med webbläsartillägget. + Refresh database ID Uppdatera databas-ID @@ -1884,26 +1800,6 @@ This is only necessary if your database is a copy of another and the browser ext Vill du verkligen uppdatera databas-ID? Detta är bara nödvändigt om databasen är en kopia av en annan och webbläsartillägget inte kan ansluta. - - Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data - Konvertera äldre KeePassHTTP-attribut till KeePassXC-Browser-kompatibel anpassad data - - - No keys found - Inga nycklar hittades - - - Removed keys from database - Tog bort nycklar från databasen - - - Removed permissions - Tog bort behörigheter - - - No entry with permissions found! - Ingen post med behörigheter hittades! - DatabaseSettingsWidgetDatabaseKey @@ -1943,18 +1839,6 @@ Vill du verkligen fortsätta utan lösenord? Failed to change database credentials Kunde inte ändra databasens inloggningsuppgifter - - Weak password - Svagt lösenord - - - This is a weak password! For better protection of your secrets, you should choose a stronger password. - Detta är ett svagt lösenord! För att bättre skydda dina hemligheter, bör du välja ett starkare lösenord. - - - The provided password does not meet the minimum quality requirement. - Det angivna lösenordet möter inte lägsta kvalitetskrav. - DatabaseSettingsWidgetEncryption @@ -1962,6 +1846,14 @@ Vill du verkligen fortsätta utan lösenord? Decryption Time: Dekrypteringstid: + + Change existing decryption time + Ändra befintlig avkrypteringstid + + + Change + Ändra + Decryption time in seconds Avkrypteringstid i sekunder @@ -2042,6 +1934,11 @@ Vill du verkligen fortsätta utan lösenord? KDBX 3 KDBX 3 + + unchanged + Database decryption time is unchanged + oförändrad + Number of rounds too high Key transformation rounds @@ -2094,18 +1991,6 @@ Om du behåller detta antal, kommer din databas inte att vara skyddad mot brute Threads for parallel execution (KDF settings) tråd trådar - - Encryption Settings: - Krypteringsinställningar: - - - Basic - Grundläggande - - - Advanced - Avancerat - DatabaseSettingsWidgetFdoSecrets @@ -2236,70 +2121,6 @@ i stället för att ta bort dem från databasen. Poster som tas bort från papperskorgen tas också bort från databasen. - - Autosave delay since last change - Fördröjning av automatiskt sparande sedan senaste ändring - - - Autosave delay - Fördröjning av automatiskt sparande - - - Autosave delay since last change in minutes - Fördröjning av automatiskt sparande sedan senaste ändring i minuter - - - min - min - - - Autosave delay since last change checkbox - Kryssruta för fördröjning av automatiskt sparande sedan senaste ändring - - - Public Database Metadata - Offentlig databas metadata - - - Warning: the following settings are not encrypted. - Varning! Följande inställningar är inte krypterade. - - - Display name: - Visningsnamn: - - - Publically visible display name used on the unlock dialog - Offentligt synligt visningsnamn i upplåsningsdialogen. - - - Database public display name - Databasens offentliga visningsnamn - - - Display color: - Visningsfärg: - - - Publically visible color used on the unlock dialog - Offentligt synlig visningsfärg i upplåsningsdialogen. - - - Database public display color chooser - Databasens offentliga visningsfärgsväljare - - - Clear - Rensa - - - Display icon: - Visningsikon: - - - Select Database Icon - Välj databasikon - DatabaseSettingsWidgetKeeShare @@ -2395,141 +2216,6 @@ tas också bort från databasen. Databasens beskrivning - - DatabaseSettingsWidgetRemote - - Sync Commands - Synkroniseringskommandon - - - Remove - Ta bort - - - Command Settings - Kommandoinställningar - - - Name - Namn - - - Save - Spara - - - Download - Ladda ner - - - Command: - Kommando: - - - Download command field - Nerladdningskommando - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - t.ex.: "sftp user@hostname" eller "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - - - Input: - Indata: - - - Download input field - Nerladdningens indata - - - Upload - Ladda upp - - - Upload command field - Uppladdningskommando - - - e.g.: "sftp user@hostname" or "scp {TEMP_DATABASE} user@hostname:DatabaseOnRemote.kdbx" - t.ex.: "sftp user@hostname" eller "scp {TEMP_DATABASE} user@hostname:DatabaseOnRemote.kdbx" - - - Upload input field - Uppladdningens indata - - - Name cannot be empty. - Namnet kan inte vara tomt - - - Test - Testa - - - Download command cannot be empty. - Nerladdningskommandot kan inte vara tomt. - - - Download failed with error: %1 - Nerladdningen misslyckades med felet: %1 - - - Download finished, but file %1 could not be found. - Nerladdning slutförd, men filen %1 kunde inte hittas. - - - Download successful. - Nerladdning slutförd. - - - Save Remote Settings - Spara fjärrinställningar - - - You have unsaved changes. Do you want to save them? - Du har osparade ändringar. Vill du spara dem? - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - t.ex.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} används som platshållare för att lagra databasen på en tillfällig plats -Kommandot måste avslutas. Om "sftp" är det sista kommandot måste "exit" sändas - - - - e.g.: -put {TEMP_DATABASE} DatabaseOnRemote.kdbx -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - t.ex.: -put {TEMP_DATABASE} DatabaseOnRemote.kdbx -exit ---- -{TEMP_DATABASE} används som platshållare för att lagra databasen på en tillfällig plats -Kommandot måste avslutas. Om "sftp" är det sista kommandot måste "exit" sändas - - - - Timeout: - Tidsgräns: - - - seconds - sekunder - - DatabaseTabWidget @@ -2562,10 +2248,26 @@ Detta är definitivt ett programfel, rapportera det till utvecklarna.CSV file CSV-fil + + Select CSV file + Välj CSV-fil + Merge database Slå samman databas + + KeePass 1 database + KeePass 1-databas + + + Open KeePass 1 database + Öppna KeePass 1-databas + + + Open OPVault + Öppna OPVault + Export database to CSV file Exportera databasen till en CSV-fil @@ -2578,6 +2280,28 @@ Detta är definitivt ett programfel, rapportera det till utvecklarna.Writing the HTML file failed. Kunde inte skriva HTML-filen. + + Export Confirmation + Exportbekräftelse + + + You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? + Du är på väg att exportera din databas till en okrypterad fil. Detta kommer att lämna dina lösenord annan känslig information i ett sårbart skick (klartext). Vill du verkligen fortsätta? + + + New Database + Ny databas + + + %1 [New Database] + Database tab name modifier + %1 [Ny databas] + + + %1 [Locked] + Database tab name modifier + %1 [Låst] + Export database to XML file Exportera databas till XML-fil @@ -2590,31 +2314,9 @@ Detta är definitivt ett programfel, rapportera det till utvecklarna.Writing the XML file failed Kunde inte skriva XML-filen - - Export Confirmation - Exportbekräftelse - - - You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? - Du är på väg att exportera din databas till en okrypterad fil. Detta kommer att lämna dina lösenord annan känslig information i ett sårbart skick (klartext). Vill du verkligen fortsätta? - - - %1 [Locked] - Database tab name modifier - %1 [Låst] - - - %1 [Temporary] - Database tab name modifier - %1 [Temporary] - DatabaseWidget - - Searches and Tags - Sök och taggar - Searching… Söker… @@ -2663,10 +2365,6 @@ Detta är definitivt ett programfel, rapportera det till utvecklarna.Expired entries Utgångna poster - - Entries expiring within %1 day(s) - Poster som löper ut inom %1 dagPoster som löper ut inom %1 dagar - No current database. Ingen aktuell databas. @@ -2691,18 +2389,6 @@ Detta är definitivt ett programfel, rapportera det till utvecklarna.No Results Inget resultat - - Save - Spara - - - Enter a unique name or overwrite an existing search from the list: - Ange ett unikt namn eller skriv över en befintlig sökning från listan: - - - Save Search - Spara sökning - Lock Database? Vill du låsa databasen? @@ -2731,6 +2417,26 @@ Vill du spara ändringarna? File has changed Filen har ändrats + + The database file has changed. Do you want to load the changes? + Databasfilen har ändrats. Vill du läsa in ändringarna? + + + Merge Request + Slå samman begäran + + + The database file has changed and you have unsaved changes. +Do you want to merge your changes? + Databasfilen har ändrats och du har osparade ändringar. +Vill du slå samman dina ändringar? + + + Could not open the new database file while attempting to autoreload. +Error: %1 + Kunde inte öppna den nya databasen vid försök att läsa in automatisk. +Fel: %1 + Disable safe saves? Vill du inaktivera "Spara säkert"? @@ -2773,94 +2479,25 @@ Vill du inaktivera "Spara säkert" och försöka igen? Could not find database file: %1 Kunde inte hitta databasfilen: %1 - - New Database - Ny databas + + Entries expiring within %1 day(s) + Poster som löper ut inom %1 dagPoster som löper ut inom %1 dagar - %1 [New Database] - Database tab name modifier - %1 [Ny databas] + Searches and Tags + Sök och taggar - Remote Sync did not contain any download or upload commands. - Fjärrsynkroniseringen innehöll inga ner- eller uppladdningskommandon. + Enter a unique name or overwrite an existing search from the list: + Ange ett unikt namn eller skriv över en befintlig sökning från listan: - Remote sync '%1' completed successfully! - Fjärrsynkronisering "%1" slutförd! + Save + Spara - Remote sync '%1' failed: %2 - Fjärrsynkronisering "%1" misslyckades: %2 - - - Error while saving database %1: %2 - Fel när databas %1 skulle sparas: %2 - - - Downloading... - Laddar ner... - - - Uploading... - Laddar upp... - - - Syncing... - Synkroniserar... - - - Remove passkey from entry - Ta bort passnyckeln från posten - - - Do you want to remove the passkey from this entry? - Vill du ta bort passnyckeln från den här posten? - - - The database file "%1" was modified externally - Databasfilen "%1" har ändrats externt - - - Do you want to load the changes? - Vill du läsa in ändringarna? - - - Reload database - Uppdatera databasen - - - Reloading database… - Uppdaterar databasen... - - - Reload canceled - Uppdateringen avbröts - - - Reload successful - Uppdatering slutförd - - - Reload pending user action… - Uppdatera väntande åtgärd... - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes<br>Ignore the changes on disk until save<br>Discard unsaved changes - Databasfilen "%1" har ändrats externt.<br>Hur vill du fortsätta?<br><br>Vill du slå samman alla ändringar?<br>Ignorera ändringar på disk tills du sparar?<br>Ignorera ändringar som inte har sparats? - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes then save<br>Overwrite the changes on disk<br>Discard unsaved changes - Databasfilen "%1" har ändrats externt.<br>Hur vill du fortsätta?<br><br>Vill du slå samman alla ändringar och spara?<br>Skriva över ändringar på disk?<br>Skippa osparade ändringar? - - - Database file overwritten. - Databasfilen har skrivits över. - - - Database file on disk cannot be unlocked with current credentials.<br>Enter new credentials and/or present hardware key to continue. - Databasfilen på disk kan inte låsas upp med aktuella inloggningsuppgifter. <br>Ange nya uppgifter och/eller hårdvarunyckel för att fortsätta. + Save Search + Spara sökning @@ -2913,6 +2550,10 @@ Vill du inaktivera "Spara säkert" och försöka igen? n/a n/a + + (encrypted) + (krypterad) + Select private key Välj privat nyckel @@ -2999,10 +2640,6 @@ Vill du korrigera det? Hide Dölj - - %n hour(s) - %1 timma%n timmar - %n week(s) %n vecka%n veckor @@ -3015,9 +2652,9 @@ Vill du korrigera det? %n year(s) %n år%n år - - Failed to decrypt SSH key, ensure password is correct. - Kunde inte avkryptera SSH-nyckel, tillse att lösenordet är korrekt. + + %n hour(s) + %1 timma%1 timmar @@ -3137,20 +2774,10 @@ Vill du korrigera det? Add new window association Lägg till ny fönsterassociation - - + - Add item - + - Remove selected window association Ta bort markerad fönsterassociation - - - - Remove item - - - Window title: Fönstertitel: @@ -3175,9 +2802,23 @@ Vill du korrigera det? Custom Auto-Type sequence for this window Anpassad autoskrivsekvens för detta fönster + + + + Add item + + + + + - + Remove item + - + EditEntryWidgetBrowser + + These settings affect to the entry's behaviour with the browser extension. + Dessa inställningar påverkar posternas beteende i webbläsartillägget. + General Allmänt @@ -3188,16 +2829,28 @@ Vill du korrigera det? Skip Auto-Submit for this entry - Undanta autoskriv för den här posten + Undanta att skicka automatiskt för den här posten + + + Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. + Skicka bara den här inställningen till webbläsaren för HTTP-autentisering. Vid aktivering visas inte den här posten i normala inloggningsformulär. Use this entry only with HTTP Basic Auth Använd den här posten endast med HTTP Basic Auth + + Do not send this setting to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. + Skicka inte den här inställningen till webbläsaren för HTTP-autentisering. Vid aktivering visas inte den här posten för markering. + Do not use this entry with HTTP Basic Auth Använd inte här posten med HTTP Basic Auth + + Additional URL's + Ytterligare URL:er + Add Lägg till @@ -3210,22 +2863,6 @@ Vill du korrigera det? Edit Redigera - - These settings affect the entry's behaviour with the browser extension. - Dessa inställningar påverkar postens beteende med webbläsartillägget. - - - Additional URLs - Ytterligare URL:er - - - Only send this entry to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. - Skicka bara den här inställningen till webbläsaren för HTTP-autentisering. Vid aktivering visas inte den här posten i normala inloggningsformulär. - - - Do not send this entry to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. - Skicka inte denna post till webbläsaren för HTTP-autentisering. Vid aktivering visas inte den här posten för markering. - EditEntryWidgetHistory @@ -3391,6 +3028,19 @@ Vill du korrigera det? Private key Privat nyckel + + External file + Extern fil + + + Browser for key file + Bläddra efter nyckelfil + + + Browse… + Button for opening file dialog + Bläddra… + Attachment Bilaga @@ -3407,23 +3057,6 @@ Vill du korrigera det? Remove from agent Ta bort från bakgrundstjänsten - - External file - Extern fil - - - Browser for key file - Bläddra efter nyckelfil - - - Browse… - Button for opening file dialog - Bläddra… - - - Generate - Generera - Select attachment file Välj bilagefil @@ -3448,10 +3081,6 @@ Vill du korrigera det? seconds sekunder - - Clear agent - Rensa agent - EditGroupWidget @@ -3463,6 +3092,10 @@ Vill du korrigera det? Icon Ikon + + Browser Integration + Webbläsarintegrering + Properties Egenskaper @@ -3479,10 +3112,6 @@ Vill du korrigera det? Group has unsaved changes Grupp har osparade ändringar - - Browser Integration - Webbläsarintegration - Enable Aktivera @@ -3542,14 +3171,6 @@ Vill du korrigera det? Omit WWW subdomain from matching toggle for this and sub groups Utelämna WWW-underdomän från matchningväxling för denna och undergrupper - - Restrict matching to given browser key: - Begränsa matchning till angiven webbläsarnyckel: - - - Restrict matching to given browser key toggle for this and sub groups - Begränsa matchning till en viss webbläsarnyckel för denna och undergrupper - EditGroupWidgetKeeShare @@ -3782,6 +3403,10 @@ Filtyper som stöds är: %1. Unable to fetch favicon. Kunde inte hämta favicon. + + You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security + Du kan aktivera ikontjänsten från DuckDuckGo under Verktyg -> Inställningar -> Säkerhet + Existing icon selected. Befintlig ikon vald. @@ -3814,10 +3439,6 @@ Filtyper som stöds är: %1. The following icon(s) failed: Följande ikon misslyckades:Följande ikoner misslyckades: - - You can enable the DuckDuckGo website icon service under Application Settings -> Security - Du kan aktivera ikontjänsten från DuckDuckGo under Programinställningar -> Säkerhet - EditWidgetProperties @@ -3894,24 +3515,6 @@ Det kan medföra att de berörda tilläggen inte fungerar. %1 - Clone %1 - Klona - - Passkey - Passnyckel - - - Invalid conversion type: %1 - Ogiltig konverteringstyp: %1 - - - Invalid conversion syntax: %1 - Ogiltig konverteringssyntax: %1 - - - Invalid regular expression syntax %1 -%2 - Ogiltig regular expression-syntax: %1 -%2 - EntryAttachments @@ -3920,21 +3523,6 @@ Det kan medföra att de berörda tilläggen inte fungerar. Kan inte öppna filen "%1" - - EntryAttachmentsDialog - - Form - Formulär - - - File name - Filnamn - - - File contents... - Filinnehåll - - EntryAttachmentsModel @@ -3972,6 +3560,14 @@ Det kan medföra att de berörda tilläggen inte fungerar. Remove Ta bort + + Rename selected attachment + Byt namn på markerad bilaga + + + Rename + Byt namn + Open selected attachment Öppna markerad bilaga @@ -4046,6 +3642,12 @@ Det kan medföra att de berörda tilläggen inte fungerar. Confirm Overwrite Attachment Bekräfta överskrivning av bilaga + + Attachment "%1" already exists. +Would you like to overwrite the existing attachment? + Bilagan "%1" finns redan. +Vill du skriva över den befintliga bilagan? + Confirm Attachment Bekräfta bilaga @@ -4080,24 +3682,6 @@ Error: %1 Kunde inte spara uppdaterad bilaga. Fel: %1 - - Attachment "%1" already exists. -Would you like to overwrite the existing attachment? - Bilagan "%1" finns redan. -Vill du skriva över den befintliga bilagan? - - - New - Nytt - - - Preview - Förhandsgranska - - - Failed to preview an attachment: Attachment not found - Kunde inte förhandsgranska en bilaga: Bilagan hittades inte - EntryAttributesModel @@ -4292,14 +3876,6 @@ Vill du skriva över den befintliga bilagan? Has TOTP Har TOTP - - Background Color - Bakgrundsfärg - - - Group Path - Gruppsökväg - EntryPreviewWidget @@ -4320,8 +3896,8 @@ Vill du skriva över den befintliga bilagan? Lösenord - URL - URL + Notes + Anteckningar Expiration @@ -4340,8 +3916,8 @@ Vill du skriva över den befintliga bilagan? Användarnamn - Notes - Anteckningar + URL + URL Advanced @@ -4391,10 +3967,6 @@ Vill du skriva över den befintliga bilagan? Never Aldrig - - Double click to copy value - Dubbelklick för att kopiera värde - Enabled Aktiverad @@ -4404,8 +3976,8 @@ Vill du skriva över den befintliga bilagan? Inaktiverad - Double click to copy to clipboard - Dubbelklicka för att kopiera till urklipp + Double click to copy value + Dubbelklick för att kopiera värde @@ -4414,10 +3986,6 @@ Vill du skriva över den befintliga bilagan? Invalid URL Ogiltig URL - - Duplicate URL - Duplicera URL - EntryView @@ -4433,10 +4001,6 @@ Vill du skriva över den befintliga bilagan? Reset to defaults Återställ till standardvärden - - + %1 entry(s)... - + %1 post...+ %1 poster... - ExportDialog @@ -4657,199 +4221,6 @@ Du kan aktivera ikontjänsten från DuckDuckGo, i säkerhetssektionen av program Laddar ner favikoner (%1/%2)… - - ImportWizard - - Import Wizard - Importguide - - - - ImportWizardPageReview - - WizardPage - Guidesida - - - Entry count: %1 - Antal poster: %1 - - - Group - Grupp - - - Title - Titel - - - Username - Användarnamn - - - Password - Lösenord - - - Url - URL - - - Could not load key file. - Kunde inte läsa in nyckelfil. - - - Could not open remote database. Password or key file may be incorrect. - Kunde inte öppna fjärrdatabas. Lösenord eller nyckelfil kan vara felaktig. - - - - ImportWizardPageSelect - - Form - Formulär - - - Import File Selection - Val av importfil - - - Password: - Lösenord: - - - Key File: - Nyckelfil: - - - Browse… - Bläddra… - - - Import Into: - Importera till: - - - New Database - Ny databas - - - No unlocked databases available - Inga upplåsta databaser tillgängliga - - - Existing Database: - Befintlig databas: - - - Import File: - Importera fil: - - - Comma Separated Values (.csv) - Kommaseparerade värden (.csv) - - - 1Password Export (.1pux) - 1Password-export (.1pux) - - - 1Password Vault (.opvault) - 1Password-valv (.opvault) - - - Bitwarden (.json) - Bitwarden (.json) - - - KeePass 1 Database (.kdb) - KeePass 1-databas (.kdb) - - - Open OPVault - Öppna OPVault - - - Select import file - Välj importfil - - - All files - Alla filer - - - Key files - Nyckelfiler - - - Select key file - Välj nyckelfil - - - Comma Separated Values - Kommaseparerade värden - - - 1Password Export - 1Password-export - - - Bitwarden JSON Export - Bitwarden JSON-export - - - 1Password Vault - 1Password-valv - - - KeePass1 Database - KeePass 1-databas - - - Proton Pass (.json) - Proton Pass (.json) - - - Proton Pass JSON Export - Proton Pass JSON-export - - - Temporary Database - Temporär databas - - - Command: - Kommando: - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - t.ex.: "sftp user@hostname" eller "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - - - Input: - Indata: - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last commend `exit` has to be sent - - t.ex.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} används som platshållare för att lagra databasen på en tillfällig plats -Kommandot måste avslutas. Om "sftp" är sista kommentar måste "exit" sändas - - - - Remote Database (.kdbx) - Fjärrdatabas (.kdbx) - - KMessageWidget @@ -4891,11 +4262,11 @@ Om detta upprepas, kan din databasfil vara skadad. Invalid header field length: field %1 - Ogiltig storlek på sidhuvudets fältlängd: Fält %1 + Invalid header data length: field %1, %2 expected, %3 found - Ogiltig rubrikdatalängd: fältet %1, %2 förväntat, %3 hittades + @@ -4940,7 +4311,7 @@ Om detta upprepas, kan din databasfil vara skadad. (HMAC mismatch) - (HMAC-matchningsfel) + (HMAC matchningsfel) Unknown cipher @@ -4952,11 +4323,11 @@ Om detta upprepas, kan din databasfil vara skadad. Invalid header field length: field %1 - Ogiltig storlek på sidhuvudets fältlängd: Fält %1 + Invalid header data length: field %1, %2 expected, %3 found - Ogiltig rubrikdatalängd: fältet %1, %2 förväntat, %3 hittades + Failed to open buffer for KDF parameters in header @@ -4976,11 +4347,11 @@ Om detta upprepas, kan din databasfil vara skadad. Invalid inner header field length: field %1 - Ogiltig längd på inre sidhuvudfält: Fält %1 + Invalid inner header data length: field %1, %2 expected, %3 found - Ogiltig datalängd för inre rubrik: fält %1, %2 förväntat, %3 hittades + Invalid inner header binary size @@ -4994,57 +4365,57 @@ Om detta upprepas, kan din databasfil vara skadad. Invalid variant map entry name length Translation: variant map = data structure for storing meta data - Ogiltig inmatningsnamnslängd för variantkarta + Invalid variant map entry name data Translation: variant map = data structure for storing meta data - Ogiltig inmatningsnamnsdata för variantkarta + Invalid variant map entry value length Translation: variant map = data structure for storing meta data - Ogiltig inmatningsvärdeslängd för variantkarta + Invalid variant map entry value data Translation comment: variant map = data structure for storing meta data - Ogiltig inmatningsvärdesdata för variantkarta + Invalid variant map Bool entry value length Translation: variant map = data structure for storing meta data - Ogiltig Bool-inmatningsvärdeslängd för variantkarta + Invalid variant map Int32 entry value length Translation: variant map = data structure for storing meta data - Ogiltig Int32-inmatningsvärdeslängd för variantkarta + Invalid variant map UInt32 entry value length Translation: variant map = data structure for storing meta data - Ogiltig UInt32-inmatningsvärdeslängd för variantkarta + Invalid variant map Int64 entry value length Translation: variant map = data structure for storing meta data - Ogiltig Int64-inmatningsvärdeslängd för variantkarta + Invalid variant map UInt64 entry value length Translation: variant map = data structure for storing meta data - Ogiltig UInt64-inmatningsvärdeslängd för variantkarta + Invalid variant map entry type Translation: variant map = data structure for storing meta data - Ogiltig inmatningstyp för variantkarta + Invalid variant map field type size Translation: variant map = data structure for storing meta data - Ogiltig fälttypstorlek för variantkarta + @@ -5084,7 +4455,7 @@ Om detta upprepas, kan din databasfil vara skadad. Invalid compression flags length - Ogiltig längd på komprimeringsflaggor + Unsupported compression algorithm @@ -5104,15 +4475,15 @@ Om detta upprepas, kan din databasfil vara skadad. Invalid start bytes size - Ogiltig startbytestorlek + Invalid random stream id size - Ogiltig storlek på slumpmässig ström-id + Invalid inner random stream cipher - Ogiltigt inre slumpmässigt strömchiffer + Failed to read database file. @@ -5284,6 +4655,17 @@ Rad %2, kolumn: %3 Kunde inte öppna privat nyckel + + KeePass1OpenWidget + + Import KeePass1 Database + Importera KeePass1-databas + + + Unable to open the database. + Kan inte öppna databasen. + + KeePass1Reader @@ -5355,7 +4737,7 @@ Om detta upprepas, kan din databasfil vara skadad. Invalid group field type number - Ogiltigt fältstypnummer för grupp + Invalid group field size @@ -5363,27 +4745,27 @@ Om detta upprepas, kan din databasfil vara skadad. Read group field data doesn't match size - Inläst fältdata för grupp stämmer inte med storleken + Incorrect group id field size - Felaktig fältstorlek för grupp-id + Incorrect group creation time field size - Felaktig fältstorlek för gruppskapandetid + Incorrect group modification time field size - Felaktig fältstorlek för gruppändringstid + Incorrect group access time field size - Felaktig fältstorlek för gruppåtkomsttid + Incorrect group expiry time field size - Felaktig fältstorlek för grupputgångstid + Incorrect group icon field size @@ -5403,7 +4785,7 @@ Om detta upprepas, kan din databasfil vara skadad. Missing entry field type number - Typnummer för inmatningsfält saknas + Invalid entry field size @@ -5415,7 +4797,7 @@ Om detta upprepas, kan din databasfil vara skadad. Invalid entry UUID field size - Ogiltig fältstorlek för inmatnings-UUID + Invalid entry group id field size @@ -5623,7 +5005,7 @@ Vill du verkligen fortsätta med den här filen? Global shortcut already registered to %1 - Systemövergripande genväg redan registrerad på %1 + Systemövergripande genväg redan registrerad för %1 Could not register global shortcut @@ -5640,6 +5022,10 @@ Vill du verkligen fortsätta med den här filen? &Recent Databases &Tidigare databaser + + &Import + &Importera + &Export &Exportera @@ -5660,10 +5046,6 @@ Vill du verkligen fortsätta med den här filen? TOTP TOTP - - Tags - Taggar - &Groups &Grupper @@ -5708,18 +5090,34 @@ Vill du verkligen fortsätta med den här filen? &New Database… &Ny databas... + + Create a new database + Skapa en ny databas + &Merge From Database… S&lå samman från databas... + + Merge from another KDBX database + Infoga från annan KDBX-databas + &New Entry… &Ny post... + + Add a new entry + Lägg till en ny post + &Edit Entry… &Redigera post... + + View or edit entry + Visa eller redigera posten + &Delete Entry… &Ta bort post... @@ -5728,6 +5126,10 @@ Vill du verkligen fortsätta med den här filen? &New Group… &Ny grupp... + + Add a new group + Lägg till en ny grupp + &Edit Group… &Redigera grupp... @@ -5760,10 +5162,18 @@ Vill du verkligen fortsätta med den här filen? Database &Reports… Databas&rapporter… + + Statistics, health check, etc. + Statistik, hälsokontroll, etc. + &Database Settings… &Databasinställningar... + + Database settings + Databasinställningar + &Clone Entry… &Klona post... @@ -5772,18 +5182,34 @@ Vill du verkligen fortsätta med den här filen? Move u&p Flytta u&pp + + Move entry one step up + Flytta upp posten ett steg + Move do&wn Flytta &ner + + Move entry one step down + Flytta ner posten ett steg + Copy &Username Kopiera an&vändarnamn + + Copy username to clipboard + Kopiera användarnamn till urklipp + Copy &Password Kopiera &lösenord + + Copy password to clipboard + Kopiera lösenord till urklipp + &Settings &Inställningar @@ -5817,13 +5243,21 @@ Vill du verkligen fortsätta med den här filen? &Titel - Copy &URL - Kopiera &URL + Copy title to clipboard + Kopiera titel till urklipp + + + Copy URL to clipboard + Kopiera URL till urklipp &Notes &Anteckningar + + Copy notes to clipboard + Kopiera anteckningar till urklipp + &CSV File… &CSV-fil... @@ -5836,14 +5270,26 @@ Vill du verkligen fortsätta med den här filen? KeePass 1 Database… KeePass 1-databas… + + Import a KeePass 1 database + Importera en KeePass1-databas + 1Password Vault… 1Password Vault… + + Import a 1Password Vault + Importera ett 1Password-valv + CSV File… CSV-file… + + Import a CSV file + Importera en CSV-fil + Show TOTP Visa TOTP @@ -5860,10 +5306,6 @@ Vill du verkligen fortsätta med den här filen? Copy &TOTP Kopiera &TOTP - - Copy Password and TOTP - Kopiera lösenord och TOTP - E&mpty recycle bin T&öm papperskorg @@ -5888,6 +5330,10 @@ Vill du verkligen fortsätta med den här filen? &Online Help &Online-hjälp + + Go to online documentation + Gå till online-dokumentationen + &User Guide &Användarmanual @@ -5930,11 +5376,7 @@ Vill du verkligen fortsätta med den här filen? Classic (Platform-native) - Klassisk (Platfformsintegration) - - - Show Menubar - Visa menyfält + Klassisk (Platformsintegration) Show Toolbar @@ -5960,10 +5402,6 @@ Vill du verkligen fortsätta med den här filen? Clone Group... Klona grupp… - - &XML File… - &XML-fil... - Clear history Rensa historiken @@ -5991,8 +5429,10 @@ Expect some bugs and minor issues, this version is meant for testing purposes. - No Tags - Inga taggar + 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. + VARNING! Din Qt-version kan orsaka att KeePassXC kraschar med ett skärmtangentbord. +Vi rekommenderar att du använder den AppImage som finns på vår nerladdningssida. Restore Entry(s) @@ -6022,10 +5462,6 @@ Förvänta dig några fel och mindre problem, den här versionen är avsedd för Quit KeePassXC Avsluta KeePassXC - - %1 Entry(s) - %1 post%1 poster - Please present or touch your YubiKey to continue… Presentera eller rör vid din YubiKey för att fortsätta... @@ -6038,314 +5474,38 @@ Förvänta dig några fel och mindre problem, den här versionen är avsedd för You must restart the application to apply this setting. Would you like to restart now? Du måste starta om programmet för att tillämpa den här inställningen. Vill du starta om nu? + + Tags + Taggar + + + No Tags + Inga taggar + + + %1 Entry(s) + %1 post%1 poster + + + Copy Password and TOTP + Kopiera lösenord och TOTP + + + &XML File… + &XML-fil... + + + XML File… + XML-fil + + + Copy &URL + Kopiera &URL + Allow Screen Capture Tillåt skärmklipp - - 1Password 1PUX... - 1Password 1PUX... - - - Import a 1Password 1PUX file - Importera en 1Password 1PUX-fil - - - Import… - Importera... - - - Passkeys… - Passnycklar... - - - Import Passkey - Importera passnyckel - - - Remote S&ync… - Fjärrs&ynkronisering... - - - Quit Application - Avsluta programmet - - - Open About Dialog - Öppna Om-sidan - - - Open Database - Öppna databas - - - Create Database - Skapa databas - - - Merge From Database - Infoga från databas - - - Create Entry - Skapa post - - - Edit Entry - Redigera post - - - Delete Entry - Ta bort post - - - Create Group - Skapa grupp - - - Edit Group - Redigera grupp - - - Delete Group - Ta bort grupp - - - Download All Favicons - Ladda ner alla favikoner - - - Sort Groups A-Z - Sortera grupper A-Z - - - Sort Groups Z-A - Sortera grupper Z-A - - - Save Database As - Spara databas som - - - Show Database Security - Visa databassäkerhet - - - Show Database Reports - Visa databasrapporter - - - Show Database Settings - Visa databasinställningar - - - Show Passkeys - Visa passnycklar - - - Clone Entry - Klona post - - - Move Entry Up - Flytta upp post - - - Move Entry Down - Flytta ner post - - - Copy Username - Kopiera användarnamn - - - Copy Password - Kopiera lösenord - - - Show Application Settings - Visa programinställningar - - - Show Password Generator - Visa lösenordsgenerator - - - Remove Passkey From Entry - Ta bort passnyckeln från posten - - - Perform Auto-Type: {USERNAME} - Utför autoskriv: {ANVÄNDARNAMN} - - - Perform Auto-Type: {USERNAME}{ENTER} - Utför autoskriv: {ANVÄNDARNAMN}{RETUR} - - - Perform Auto-Type: {PASSWORD} - Utför autoskriv: {LÖSENORD} - - - Perform Auto-Type: {PASSWORD}{ENTER} - Utför autoskriv: {LÖSENORD}{RETUR} - - - Perform Auto-Type: {TOTP} - Utför autoskriv: {TOTP} - - - Copy Title - Kopiera titel - - - Copy URL - Kopiera URL - - - Copy Notes - Kopiera anteckningar - - - Export to CSV - Exportera till CSV - - - Export to HTML - Exportera till HTML - - - Import KeePass1 Database - Importera KeePass1-databas - - - Import 1Password Vault - Importera ett 1Password-valv - - - Import CSV File - Importera en CSV-fil - - - Show TOTP QR Code - Visa TOTP QR-kod - - - Set up TOTP - Konfigurera TOTP - - - Empty Recycle Bin - Töm papperskorgen - - - Open Donation Website - Öppna donationssidan - - - Open Bug Report - Öppna felrapport - - - Open Online Documentation - Öppna online-dokumentation - - - Open Keyboard Shortcuts Guide - Öppna guiden för tangentbordgenvägar - - - Save Database Backup - Spara säkerhetskopia av databasen - - - SSH Agent: Add Key - SSH Agent: Lägg till nyckel - - - SSH Agent: Remove Key - SSH Agent: Ta bort nyckel - - - Toggle Compact Mode - Kompaktläge PÅ/AV - - - Set Theme: Automatic - Ange tema: Automatiskt - - - Set Theme: Light - Ange tema: Ljust - - - Set Theme: Dark - Ange tema: Mörkt - - - Set Theme: Classic - Ange tema: Klassiskt - - - Toggle Show Menubar - Menyfält på/av - - - Toggle Show Toolbar - Visa/Dölj verktygsfält - - - Toggle Show Preview Panel - Visa/Dölj förhandsgranskningspanel - - - Toggle Always on Top - Alltid överst PÅ/AV - - - Toggle Hide Usernames - Visa/Dölj användarnamn - - - Toggle Hide Passwords - Visa/Dölj lösenord - - - Export to XML - Exportera till XML - - - Toggle Allow Screen Capture - Tillåt/Neka skärmklipp - - - Show Group Panel - Visa gruppanel - - - Toggle Show Group Panel - Visa/Dölj gruppanel - - - Setup Remote Sync… - Ställ in fjärrsynkronisering... - - - Password Generator - Lösenordsgenerator - - - E&xpire Entry… - Post &utgår... - - - Clear SSH Agent - Rensa SSH-agent - - - Clear all identities in ssh-agent - Ta bort alla identiteter i SSH-agenten - ManageDatabase @@ -6403,6 +5563,26 @@ Förvänta dig några fel och mindre problem, den här versionen är avsedd för Overwriting %1 [%2] Skriver över %1[%2] + + older entry merged from database "%1" + äldre post infogad från databas "%1" + + + Adding backup for older target %1 [%2] + Lägger till säkerhetskopia från äldre mål %1 [%2] + + + Adding backup for older source %1 [%2] + Lägger till säkerhetskopia från äldre källa %1 [%2] + + + Reapplying older target entry on top of newer source %1 [%2] + Återanvänder äldre målpost ovanpå nyare källa %1 [%2] + + + Reapplying older source entry on top of newer target %1 [%2] + Återanvänder äldre källpost ovanpå nyare mål %1 [%2] + Synchronizing from newer source %1 [%2] Synkroniserar från nyare källa %1 [%2] @@ -6462,6 +5642,14 @@ Förvänta dig några fel och mindre problem, den här versionen är avsedd för Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. Här kan du justera inställningarna för databaskrypteringen. Oroa dig inte, du kan ändra dem senare, i databasinställningarna. + + Advanced Settings + Avancerade inställningar + + + Simple Settings + Förenklade inställningar + NewDatabaseWizardPageDatabaseKey @@ -6496,25 +5684,6 @@ Förvänta dig några fel och mindre problem, den här versionen är avsedd för Fyll i visningsnamnet och en frivillig beskrivning för din nya databas: - - NewEntryAttachmentsDialog - - Attachment name cannot be empty - Bilagans namn kan inte vara tomt - - - Attachment with the same name already exists - Det finns redan en bilaga med samma namn - - - Save attachment - Spara bifogad fil - - - New entry attachment - Ny postbilaga - - NixUtils @@ -6523,7 +5692,7 @@ Förvänta dig några fel och mindre problem, den här versionen är avsedd för Global shortcut already registered to %1 - Systemövergripande genväg redan registrerad på %1 + Systemövergripande genväg finns redan registrerad för %1 Could not register global shortcut @@ -6561,6 +5730,15 @@ Förvänta dig några fel och mindre problem, den här versionen är avsedd för Förväntade %1 byte klartext, hittade %2 + + OpVaultOpenWidget + + Read Database did not produce an instance +%1 + Läsning av databas producerade inte någon instans +%1 + + OpVaultReader @@ -6634,10 +5812,6 @@ Förvänta dig några fel och mindre problem, den här versionen är avsedd för Unknown cipher: %1 Okänt chiffer: %1 - - AES-256/GCM is currently not supported - AES-256/GCM stöds för närvarande inte - Passphrase is required to decrypt this key Lösenordsfras krävs för att avkryptera denna nyckel @@ -6703,183 +5877,8 @@ Förvänta dig några fel och mindre problem, den här versionen är avsedd för Oväntad EOF, vid skrivning av privat nyckel - (encrypted) - (krypterad) - - - - OpenSSHKeyGenDialog - - SSH Key Generator - SSH-nyckelgenerator - - - Type - Typ - - - Bits - Bitar - - - Comment - Kommentar - - - - PasskeyExportDialog - - KeePassXC - Passkey Export - KeePassXC - Passnyckelexport - - - Filenames will be generated with title and .passkey file extension. - Filnamn genereras med namn och .passkey som filnamnstillägg. - - - Export entries - Exportera poster - - - Export Selected - Exportera markerade - - - Cancel - Avbryt - - - Export to folder - Exportera till mapp - - - Export the following passkey entries. - Exportera följande passnyckelposter. - - - - PasskeyExporter - - KeePassXC: Passkey Export - KeePassXC: Passnyckelexport - - - File "%1.passkey" already exists. -Do you want to overwrite it? - - Filen "%1.passkey" finns redan. -Vill du skriva över den? - - - - Cannot open file - Kan inte öppna fil - - - Cannot open file "%1" for writing. - Kan inte öppna filen "%1" för skrivning. - - - Cannot write to file - Kan inte skriva till fil - - - - PasskeyImportDialog - - KeePassXC - Passkey Import - KeePassXC - Passnyckelimport - - - Username: %1 - Användarnamn: %1 - - - Group - Grupp - - - Database - Databas - - - Import Passkey - Importera passnyckel - - - Import - Importera - - - Cancel - Avbryt - - - Entry - Post - - - Create new entry - Skapa ny post - - - Relying Party: %1 - Förlitande part: %1 - - - Import the following passkey: - Importera följande passnyckel: - - - Import the following passkey to this entry: - Importera följande passnyckel till denna post: - - - Default passkeys group (Imported Passkeys) - Ordinarie passnyckelgrupp (Importerade passnycklar) - - - - PasskeyImporter - - Passkey file - Passnyckelfil - - - All files - Alla filer - - - Cannot open file - Kan inte öppna fil - - - Cannot open file "%1" for reading. - Kan inte öppna filen "%1" för läsning. - - - Open passkey file - Öppna passnyckelfil - - - Cannot import passkey - Kan inte importera passnyckel - - - Cannot import passkey file "%1". Data is missing. - Kan inte importera passnyckelfil "%1". Data saknas. - - - Cannot import passkey file "%1". -The following data is missing: -%2 - Kan inte importera passnyckelfil "%1". -Följande data saknas: -%2 - - - Cannot import passkey file "%1". Private key is missing or malformed. - Kan inte importera passnyckelfil "%1". Privat nyckel saknas eller är felaktig. + AES-256/GCM is currently not supported + AES-256/GCM stöds för närvarande inte @@ -7084,6 +6083,10 @@ Följande data saknas: Word Count: Antal ord: + + Character Count: + Antal tecken: + Word Case: Skiftläge: @@ -7096,6 +6099,10 @@ Följande data saknas: Add custom wordlist Lägg till anpassad ordlista + + character + tecken + Close Stäng @@ -7132,30 +6139,6 @@ Följande data saknas: Entropy: %1 bit Entropi: %1 bitar - - Password Quality: %1 - Lösenordskvalitet: %1 - - - Poor - Password quality - Dålig - - - Weak - Password quality - Svag - - - Good - Password quality - Bra - - - Excellent - Password quality - Utmärkt - Confirm Delete Wordlist Bekräfta borttagning av ordlista @@ -7203,20 +6186,32 @@ Vill du skriva över den? Specialtecken - passwordLength - Lösenordslängd + Password Quality: %1 + Lösenordskvalitet: %1 - Characters: %1 - Tecken: %1 + Poor + Password quality + Dålig - MIXED case - BLANDAT fall + Weak + Password quality + Svag - Excluded characters: "0", "1", "l", "I", "O", "|", "﹒", "B", "8", "G", "6" - Undantagna tecken: "0", "1", "l", "I", "O", "|", "﹒", "B", "8", "G", "6" + Good + Password quality + Bra + + + Excellent + Password quality + Utmärkt + + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + Undanta tecknen: "0", "1", "l", "I", "O", "|", "﹒" @@ -7266,7 +6261,7 @@ Vill du skriva över den? Utmärkt - Toggle password visibility using Control + H. Open the password generator using Control + G. + Toggle password visibilty using Control + H. Open the password generator using Control + G. Visa/Dölj lösenord med Ctrl+H. Öppna lösenordsgeneratorn med Ctrl+G. @@ -7285,21 +6280,6 @@ Vill du skriva över den? Tryck &TAB mellen tecken - - PreviewEntryAttachmentsDialog - - Preview entry attachment - Förhandsgranska postbilaga - - - No preview available - Ingen förhandsgranskning tillgänglig - - - Image format not supported - Bildformatet stöds inte - - QMessageBox @@ -7338,10 +6318,6 @@ Vill du skriva över den? Continue Fortsätt - - Continue with weak password - Fortsätt med svagt lösenord - QObject @@ -7735,10 +6711,6 @@ Vill du skriva över den? Too many arguments provided. För många argument. - - Path of the database. - Sökväg till databasen. - Target decryption time in MS for the database. Målets avkrypteringstid i ms för databasen. @@ -7759,6 +6731,10 @@ Vill du skriva över den? Create a new database. Skapa en ny databas. + + Path of the database. + Sökväg till databasen. + Invalid decryption time %1. Ogiltig avkrypteringstid %1. @@ -7803,158 +6779,6 @@ Vill du skriva över den? Successfully created new database. Ny databas skapad. - - Unset the password for the database. - Ta bort lösenordet för databasen. - - - Unset the key file for the database. - Ta bort nyckelfilen för databasen. - - - Edit a database. - Redigera en databas. - - - Cannot use %1 and %2 at the same time. - Kan inte använda %1 och %2 på samma gång. - - - Could not change the database key. - Kunde inte ändra databasnyckeln. - - - Database was not modified. - Databasen är inte ändrad. - - - Writing the database failed: %1 - Kunde inte skriva databas: %1 - - - Successfully edited the database. - Databasen redigerades korrekt. - - - Cannot remove password: The database does not have a password. - Kan inte ta bort lösenordet. Databasen har inget lösenord. - - - Cannot remove file key: The database does not have a file key. - Kan inte ta bort nyckelfilen. Databasen har ingen nyckelfil. - - - Loading the new key file failed: %1 - Inläsning av den nya nyckeln misslyckades: %1 - - - Found unexpected Key type %1 - Identifierade oväntad nyckeltyp %1 - - - Cannot remove all the keys from a database. - Kan inte ta bort alla nycklarna från en databas. - - - Show a database's information. - Visa en databas information. - - - UUID: - UUID: - - - Name: - Namn: - - - Description: - Beskrivning: - - - Cipher: - Chiffer: - - - KDF: - KDF: - - - Recycle bin is enabled. - Papperskorgen är aktiverad. - - - Recycle bin is not enabled. - Papperskorgen är inte aktiverad. - - - Location - Plats - - - Database created - Databas skapad - - - Last saved - Senast sparad - - - Unsaved changes - Osparade ändringar - - - yes - Ja - - - no - Nej - - - Number of groups - Antal grupper - - - Number of entries - Antal poster - - - Number of expired entries - Antal förfallna poster - - - Unique passwords - Unika lösenord - - - Non-unique passwords - Icke unika lösenord - - - Maximum password reuse - Max antal återanvända lösenord - - - Number of short passwords - Antal korta lösenord - - - Number of weak passwords - Antal svaga lösenord - - - Entries excluded from reports - Poster undantagna från rapporter - - - Average password length - Genomsnittlig lösenordslängd - - - %1 characters - %1 tecken - Word count for the diceware passphrase. Antal ord för lösenordsfrasen. @@ -7978,6 +6802,10 @@ Vill du skriva över den? Invalid word count %1 Ogiltigt antal ord %1 + + The word list is too small (< 1000 items) + Ordlistan är för liten (<1000 objekt) + Title for the entry. Titel för posten. @@ -8002,6 +6830,10 @@ Vill du skriva över den? Enter new password for entry: Ange nytt lösenord för posten: + + Writing the database failed: %1 + Kunde inte skriva databas: %1 + Successfully edited entry %1. Redigerade posten %1. @@ -8122,6 +6954,10 @@ Vill du skriva över den? Exit interactive mode. Avsluta interaktivt läge. + + Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. + Format att använda vid export. Tillgängliga alternativ är "xml" eller "csv". Standardvärdet är "xml". + Exports the content of a database to standard output in the specified format. Exporterar innehållet i en databas till standardutdata i angivet format. @@ -8222,6 +7058,106 @@ Vill du skriva över den? Successfully imported database. Databas importera. + + Show a database's information. + Visa en databas information. + + + UUID: + UUID: + + + Name: + Namn: + + + Description: + Beskrivning: + + + Cipher: + Chiffer: + + + KDF: + KDF: + + + Recycle bin is enabled. + Papperskorgen är aktiverad. + + + Recycle bin is not enabled. + Papperskorgen är inte aktiverad. + + + Location + Plats + + + Database created + Databas skapad + + + Last saved + Senast sparad + + + Unsaved changes + Osparade ändringar + + + yes + Ja + + + no + Nej + + + Number of groups + Antal grupper + + + Number of entries + Antal poster + + + Number of expired entries + Antal förfallna poster + + + Unique passwords + Unika lösenord + + + Non-unique passwords + Icke unika lösenord + + + Maximum password reuse + Max antal återanvända lösenord + + + Number of short passwords + Antal korta lösenord + + + Number of weak passwords + Antal svaga lösenord + + + Entries excluded from reports + Poster undantagna från rapporter + + + Average password length + Genomsnittlig lösenordslängd + + + %1 characters + %1 tecken + Unknown command %1 Okänt kommando %1 @@ -8394,10 +7330,6 @@ Tillgängliga kommandon: Show the protected attributes in clear text. Visa de skyddade attributen i klartext. - - Show all the attributes of the entry. - Visa alla attribut för posten. - Show the attachments of the entry. Visa bilagor i posten. @@ -8468,10 +7400,6 @@ inte kommer att stödja i framtiden. Invalid YubiKey serial %1 Ogiltigt YubiKey serienummer %1 - - Please present or touch your YubiKey to continue. - Anslut eller tryck på din YubiKey för att fortsätta. - Enter password to encrypt database (optional): Ange lösenord för att avkryptera databasen (valfritt): @@ -8710,6 +7638,18 @@ Kärna: %3 %4 file empty filen är tom + + malformed string + felaktigt uppbyggd sträng + + + missing closing quote + saknar avslutande citationstecken + + + %1: (row, col) %2,%3 + %1: (rad, kolumn) %2,%3 + AES 256-bit AES 256-bit @@ -8748,7 +7688,7 @@ Kärna: %3 %4 Clearing the clipboard in %1 second(s)… - Rensar urklipp om %1 sekund...Rensar urklipp om %1 sekunder... + Rensar urklipp om %1 sekund…Rensar urklipp om %1 sekunder… Group @@ -8888,6 +7828,14 @@ Kärna: %3 %4 read password of the database from stdin hämta databaslösenordet från stdin + + allow app screen recordering and screenshots + Tillåt programskärminspelning och skärmbilder + + + Locked databases. + Låste databaser. + Database failed to lock. Databas kunde inte låsas. @@ -8896,10 +7844,6 @@ Kärna: %3 %4 Another instance of KeePassXC is already running. En annan instans av KeePassXC körs redan. - - KeePassXC is not running. No open database to lock - KeePassXC körs inte. Det finns ingen öppen databas att låsa. - Fatal error while testing the cryptographic functions. Allvarligt fel vid test av kryptografiska funktioner. @@ -8943,300 +7887,70 @@ Kärna: %3 %4 Ogiltig KDF - Access to all entries is denied - Åtkomst till alla poster är nekad + Please present or touch your YubiKey to continue. + Anslut eller tryck på din YubiKey för att fortsätta. - allow screenshots and app recording (Windows/macOS) - tillåt skärmklipp och programinspelning (Windows/macOS) + Show all the attributes of the entry. + Visa alla attribut för posten. + + + Edit a database. + Redigera en databas. + + + Could not change the database key. + Kunde inte ändra databasnyckeln. + + + Database was not modified. + Databasen är inte ändrad. + + + Successfully edited the database. + Databasen redigerades korrekt. + + + Loading the new key file failed: %1 + Inläsning av den nya nyckeln misslyckades: %1 + + + Unset the password for the database. + Ta bort lösenordet för databasen. + + + Unset the key file for the database. + Ta bort nyckelfilen för databasen. + + + Cannot use %1 and %2 at the same time. + Kan inte använda %1 och %2 på samma gång. + + + Cannot remove all the keys from a database. + Kan inte ta bort alla nycklarna från en databas. + + + Cannot remove password: The database does not have a password. + Kan inte ta bort lösenordet. Databasen har inget lösenord. + + + Cannot remove file key: The database does not have a file key. + Kan inte ta bort nyckelfilen. Databasen har ingen nyckelfil. + + + Found unexpected Key type %1 + Identifierade oväntad nyckeltyp %1 Set the key file for the database. -This option is deprecated, use --set-key-file instead. +This options is deprecated, use --set-key-file instead. Ange nyckelfil för databasen. -Det här alternativet är föråldrat, använd --set-key-file istället. +Det här alternativet är inaktuellt, använd --set-key-file istället. - Databases have been locked. - Databaserna har låsts. - - - Attestation not supported - Attestering stöds inte - - - Credential is excluded - Autentiseringsuppgift undantas - - - Passkeys request canceled - Begäran om passnycklar avbruten - - - Invalid user verification - Ogiltig användarverifiering - - - Empty public key - Tom offentlig nyckel - - - Invalid URL provided - Ogiltig URL angiven - - - Passkeys - Passnycklar - - - AES initialization failed - AES-start misslyckades - - - AES encrypt failed - AES-kryptering misslyckades - - - Failed to store in Linux Keyring - Kunde inte lagra i Linux nyckelring - - - Polkit returned an error: %1 - Polkit returnerade ett fel: %1 - - - Could not locate key in keyring - Kunde inte hitta nyckel i nyckelring - - - Could not read key in keyring - Kunde inte läsa nyckel i nyckelring - - - AES decrypt failed - AES-avkryptering misslyckades - - - No Polkit authentication agent was available - Ingen Polkit autentiseringsagent är tillgänglig - - - Polkit authorization failed - Polkit-autentisering misslyckades - - - No Quick Unlock provider is available - Ingen Quick Unlock-leverantör är tillgänglig - - - Failed to init KeePassXC crypto. - Kunde inte starta KeePassXC-krypto. - - - Failed to encrypt key data. - Kunde inte kryptera nyckeldata. - - - Failed to get Windows Hello credential. - Kunde inte hämta Windows Hello inloggningsuppgifter. - - - Failed to decrypt key data. - Kunde inte avkryptera nyckeldata. - - - Origin is empty or not allowed - Ursprung är tomt eller inte tillåtet - - - Effective domain is not a valid domain - Effektiv domän är ingen giltig domän - - - Origin and RP ID do not match - Ursprung och RP-ID matchar inte - - - No supported algorithms were provided - Inga algoritmer som stöds tillhandahölls - - - Wait for timer to expire - Vänta tills tiduret löper ut - - - Challenge is shorter than required minimum length - Utmaningen är kortare än den minimilängd söm krävs - - - user.id does not match the required length - user.id matchar inte den längd som krävs - - - Favorite - Tag for favorite entries - Favorit - - - File does not exist. - Filen finns inte. - - - Cannot open file: %1 - Kan inte öppna filen: %1 - - - Cannot parse file: %1 at position %2 - Kan inte tolka filen: %1 på position %2 - - - Failed to decrypt json file: %1 - Kunde inte avkryptera json-fil: %1 - - - Invalid encKeyValidation field - Ogiltigt encKeyValidation-fält - - - Invalid cipher list within encKeyValidation field - Ogiltig chifferlista i encKeyValidation-fältet - - - Wrong password - Fel lösenord - - - Invalid encrypted data field - Ogiltigt krypterat datafält - - - Invalid cipher list within encrypted data field - Ogiltig chifferlista i krypterat datafält - - - Cannot initialize cipher - Kan inte initiera chiffer - - - Cannot decrypt data - Kan inte avkryptera data - - - Bitwarden Import - Bitwarden-import - - - Archived - Tag for archived entries - Arkiverat - - - Invalid 1PUX file format: Not a valid ZIP file. - Ogiltigt 1PUX-filformat: Inte en giltig ZIP-fil. - - - Invalid 1PUX file format: Missing export.data - Ogiltigt 1PUX-filformat: Exportdata saknas - - - 1Password Import - 1Password-import - - - Enter Shortcut - Ange genväg - - - Action - Åtgärd - - - Shortcuts - Genvägar - - - Unknown passkeys error - Okänt passnyckelfel - - - Invalid KDF iterations, cannot decrypt json file - Ogiltiga KDF-upprepningar, kan inte avkryptera json-filen. - - - Unsupported format, ensure your Bitwarden export is password-protected - Formatet stöds inte, tillse att din Bitwarden-export är lösenordsskyddad. - - - Only PBKDF and Argon2 are supported, cannot decrypt json file - Endast PBKDF och Argon2 stöds, kan inte avkryptera json-filen. - - - Reset Shortcuts - Återställ genvägar - - - Double click an action to change its shortcut - Dubbelklicka på åtgärden för att ändra genväg - - - Filter... - Filter... - - - Shortcut Conflict - Genvägskonflikt - - - Shortcut %1 conflicts with '%2'. Overwrite shortcut? - Genväg %1 står i konflikt med "%2". Vill du skriva över genvägen?? - - - Cannot generate valid passphrases because the wordlist is too short - Kan inte generera giltiga lösenordsfraser för att ordlistan är för kort - - - Encrypted files are not supported. - Krypterade filer stöds inte. - - - Proton Pass Import - Proton Pass-import - - - Delete plugin data? - Vill du ta bort tilläggsdata? - - - Delete plugin data from Entry(s)? - Vill du ta bort insticksdata från post?Vill du ta bort insticksdata från poster? - - - Passkey - Passnyckel - - - Format to use when exporting. Available choices are 'xml', 'csv' or 'html'. Defaults to 'xml'. - Format att använda vid export. Tillgängliga alternativ är "xml", "csv" eller "html". Standardvärdet är "xml". - - - start minimized to the system tray - starta minimerad i systemfältet - - - malformed string, possible unescaped delimiter - felaktig sträng, möjligen ej utkommenterad avgränsare - - - missing closing delimiter - saknar avslutande avgränsare - - - %1, row: %2, column: %3 - %1, rad: %2, kolumn: %3 - - - Tags - Taggar + KeePassXC is not running. No open database to lock + KeePassXC körs inte. Det finns ingen öppen databas att låsa. @@ -9273,39 +7987,20 @@ Det här alternativet är föråldrat, använd --set-key-file istället.Internt zlib-fel: - - RemoteHandler - - Command `%1` did not finish in time. Process was killed. - Kommandot "%1" slutfördes inte i tid. Processen dödades. - - - Failed to upload merged database. Command `%1` did not finish in time. Process was killed. - Det gick inte att ladda upp den sammanslagna databasen. Kommandot %1 slutfördes inte i tid. Processen dödades. - - - Invalid download parameters provided. - Ogiltiga nerladdningsparametrar har angetts. - - - Command `%1` failed to download database. - Kunde inte ladda ner databasen med kommandot "%1". - - - Invalid database pointer or upload parameters provided. - Ogiltiga databaspekare eller uppladdningsparametrar har angetts. - - - Command `%1` exited with status code: %2 - Kommandot "%1" avslutades med statuskod: %2 - - - Failed to upload merged database. Command `%1` exited with status code: %2 - Det gick inte att ladda upp den sammanslagna databasen. Kommandot "%1" avslutades med statuskod: %2 - - ReportsWidgetBrowserStatistics + + Exclude expired entries from the report + Undanta utgångna poster från rapporten + + + Show only entries which have URL set + Visa endast poster med angiven URL + + + Show only entries which have browser settings in custom data + Visa endast poster med webbläsarinställningar i anpassad data + Double-click entries to edit. Dubbelklicka på poster för att redigera. @@ -9336,7 +8031,7 @@ Det här alternativet är föråldrat, använd --set-key-file istället. This entry is being excluded from reports - Denna post har undantagits från rapporter + Denna post undantas från rapporter Please wait, browser statistics is being calculated… @@ -9364,59 +8059,50 @@ Det här alternativet är föråldrat, använd --set-key-file istället. Delete Entry(s)… - Ta bort post…Ta bort poster… + Ta bort post...Ta bort poster… Exclude from reports Undanta från rapporter - - Expire Entry(s)… - Post utgår...Poster utgår... - - - Only show entries that have a URL - Visa endast poster som har en URL - - - Only show entries that have been explicitly allowed or denied - Visa endast poster som uttryckligen har tillåtits eller nekats - - - Show expired entries - Visa förfallna poster - - - (Expired) - (Förfallen) - - - Delete plugin data from Entry(s)… - Tar bort insticksdata från post…Tar bort insticksdata från poster… - ReportsWidgetHealthcheck - Show expired entries - Visa förfallna poster + Exclude expired entries from the report + Undanta utgångna poster från rapporten - (Expired) - (Förfallen) + Also show entries that have been excluded from reports + Visa också poster som har undantagits från rapporter Hover over reason to show additional details. Double-click entries to edit. Håll muspekaren över anledning, för att visa fler detaljer. Dubbelklicka på posten för att redigera. + + Bad + Password quality + Usel + Bad — password must be changed Usel — Lösenordet måste ändras + + Poor + Password quality + Dålig + Poor — password should be changed Dålig — Lösenordet måste ändras + + Weak + Password quality + Svag + Weak — consider changing the password Svag — Överväg att ändra lösenordet @@ -9465,14 +8151,6 @@ Det här alternativet är föråldrat, använd --set-key-file istället.Exclude from reports Undanta från rapporter - - Expire Entry(s)… - Post utgår...Poster utgår... - - - Show entries that have been excluded from reports - Visa poster som har undantagits från rapporter - ReportsWidgetHibp @@ -9568,77 +8246,6 @@ Det här alternativet är föråldrat, använd --set-key-file istället.Exclude from reports Undanta från rapporter - - Expire Entry(s)… - Post utgår...Poster utgår... - - - - ReportsWidgetPasskeys - - Export - Exportera - - - Import - Importera - - - List of entry URLs - Lista över posters URL:er - - - Title - Titel - - - Path - Sökväg - - - Username - Användarnamn - - - URLs - URL:er - - - Edit Entry… - Redigera post… - - - Delete Entry(s)… - Ta bort post…Ta bort poster… - - - Relying Party - Förlitande part - - - Show expired entries - Visa förfallna poster - - - (Expired) - (Förfallen) - - - Export Confirmation - Exportbekräftelse - - - The passkey file will be vulnerable to theft and unauthorized use, if left unsecured. Are you sure you want to continue? - Passnyckelfilen kommer att vara sårbar för stöld och obehörig användning om den lämnas oskyddad. Vill du verkligen fortsätta? - - - Please wait, list of entries with passkeys is being updated… - Vänta! Listan över poster med passnycklar uppdateras... - - - No entries with passkeys. - Det finns inga poster med passnycklar. - ReportsWidgetStatistics @@ -9813,14 +8420,6 @@ Det här alternativet är föråldrat, använd --set-key-file istället.No agent running, cannot list identities. Tjänsten körs inte, kan inte lista identiteter. - - Failed to remove all SSH identities from agent. - Kunde inte ta bort alla SSH-identiteter från agenten. - - - All SSH identities removed from agent. - Alla SSH-identiteter borttagna från agenten. - SearchHelpWidget @@ -9887,10 +8486,6 @@ Det här alternativet är föråldrat, använd --set-key-file istället.Search Help Sökhjälp - - Save Search - Spara sökning - Search (%1)… Search placeholder text, %1 is the keyboard shortcut @@ -9904,6 +8499,10 @@ Det här alternativet är föråldrat, använd --set-key-file istället.Limit search to selected group Begränsa sökningen till vald grupp + + Save Search + Spara sökning + SettingsClientModel @@ -9965,10 +8564,33 @@ Det här alternativet är föråldrat, använd --set-key-file istället.Confirm when passwords are retrieved by clients Bekräfta när lösenord tas emot av klienter + + <html><head/><body><p><span style=" + font-family:'-apple-system','BlinkMacSystemFont','Segoe UI','Helvetica','Arial','sans-serif','Apple Color + Emoji','Segoe UI Emoji'; font-size:14px; color:#24292e; background-color:#ffffff;">This setting does + not override disabling recycle bin prompts</span></p></body></html> + + <html><head/><body><p><span style=" + font-family:'-apple-system','BlinkMacSystemFont','Segoe UI','Helvetica','Arial','sans-serif','Apple Color + Emoji','Segoe UI Emoji'; font-size:14px; color:#24292e; background-color:#ffffff;">Denna inställning åsidosätter inte +inaktivering av papperskorgsmeddelanden</span></p></body></html> + + Confirm when clients request entry deletion Bekräfta när klienter begär borttagning av poster + + <html><head/><body><p>This improves compatibility with certain applications + which search for password without unlocking the database first.</p><p>But enabling this may also + crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a + different value set in applications.)</p></body></html> + + <html><head/><body><p>Detta förbättrar kompatibiliteten med vissa program +som söker efter lösenord utan att först låsa upp databasen.</p><p> +Men aktivering av detta kan också få klienten att krascha om databasen +inte kan låsas upp inom en viss tidsgräns (Vanligen 25s, men kan vara ett annar värde, angivet i programmet.)</p></body></html> + Prompt to unlock database before searching Begär att databasen låses upp före sökning @@ -9993,14 +8615,6 @@ Det här alternativet är föråldrat, använd --set-key-file istället.Save current changes to activate the plugin and enable editing of this section. Spara aktuella ändringar för att aktivera insticksmodulen och aktivera redigering av det här avsnittet. - - <html><head/><body><p>This setting does not override disabling recycle bin prompts </p></body></html> - <html><head/><body><p>Den här inställningen åsidosätter inte inaktivering av avisering från papperskorgen</p></body></html> - - - <html><head/><body><p>This improves compatibility with certain applications which search for password without unlocking the database first.</p><p>But enabling this may also crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a different value set in applications.) </p></body></html> - <html><head/><body><p>Detta förbättrar kompatibiliteten med vissa program som söker efter lösenord utan att först låsa upp databasen.</p><p>Men aktivering av detta kan också få klienten att krascha om databasen inte kan låsas upp inom en viss tidsgräns (Vanligen 25s, men kan vara ett annat värde, angivet i programmet.) </p></body></html> - SettingsWidgetKeeShare @@ -10108,14 +8722,6 @@ Det här alternativet är föråldrat, använd --set-key-file istället. TagModel - - Clear Search - Rensa sökning - - - All Entries - Alla poster - Expired Förfallen @@ -10124,6 +8730,14 @@ Det här alternativet är föråldrat, använd --set-key-file istället.Weak Passwords Svaga lösenord + + All Entries + Alla poster + + + Clear Search + Rensa sökning + TagView @@ -10292,7 +8906,7 @@ Exempel: JBSWY3DPEHPK3PXP You have the latest version of KeePassXC - Du har den senaste versionen av KeePassXC + Du har den senastew versionen av KeePassXC @@ -10301,6 +8915,26 @@ Exempel: JBSWY3DPEHPK3PXP Start storing your passwords securely in a KeePassXC database Börja spara dina lösenord säkert, i en KeePassXC-databas. + + Create new database + Skapa ny databas + + + Open existing database + Öppna befintlig databas + + + Import from KeePass 1 + Importera från KeePass 1 + + + Import from 1Password + Importera från 1Password + + + Import from CSV + Importera från CSV + Recent databases Tidigare databaser @@ -10313,18 +8947,6 @@ Exempel: JBSWY3DPEHPK3PXP Welcome to KeePassXC %1 Välkommen till KeePassXC %1 - - Create Database - Skapa databas - - - Open Database - Öppna databas - - - Import File - Importera fil - WinUtils @@ -10341,8 +8963,31 @@ Exempel: JBSWY3DPEHPK3PXP Kunde inte registrera systemövergripande genväg + + WindowsHello + + Failed to init KeePassXC crypto. + Kunde inte starta KeePassXC-krypto. + + + Failed to encrypt key data. + Kunde inte kryptera nyckeldata. + + + Failed to get Windows Hello credential. + Kunde inte hämta Windows Hello inloggningsuppgifter. + + + Failed to decrypt key data. + Kunde inte avkryptera nyckeldata. + + YubiKey + + %1 No interface, slot %2 + %1 Inget gränssnitt, plats %2 + General: Allmänt: @@ -10354,6 +8999,14 @@ Exempel: JBSWY3DPEHPK3PXP YubiKeyEditWidget + + Refresh hardware tokens + Uppdatera hårdvaru-tokens + + + Refresh + Uppdatera + Hardware key slot selection Val av plats för hårdvarunyckel @@ -10364,7 +9017,7 @@ Exempel: JBSWY3DPEHPK3PXP Selected hardware key slot does not support challenge-response! - Den valda maskinvarunyckelplatsen stöder inte challenge-response! + Den valda hårdvarunyckelplatsen stöder inte challenge-response! Challenge-Response @@ -10386,6 +9039,10 @@ Exempel: JBSWY3DPEHPK3PXP Challenge-Response set, click to change or remove Challenge-Response angiven, klicka för att ändra eller ta bort + + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + <p>Om du äger en <a href="https://www.yubico.com/">YubiKey</a> eller en <a href="https://onlykey.io">OnlyKey</a>, kan du använda den för ytterligare säkerhet.</p><p>Nyckeln kräver att en av dess anslutningsplatser programmeras som <a href="https://www.yubico.com/products/services-software/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + Detecting hardware keys… Identifierar hårdvarunycklar... @@ -10394,25 +9051,28 @@ Exempel: JBSWY3DPEHPK3PXP No hardware keys detected Inga hårdvarunycklar identifierade + + + YubiKeyInterface - Refresh hardware keys - Uppdatera hårdvarunycklar - - - <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed with <a href="https://keepassxc.org/docs/#faq-yubikey-howto">Challenge-Response</a>.</p> - <p>Om du äger en <a href="https://www.yubico.com/">YubiKey</a> eller en <a href="https://onlykey.io">OnlyKey</a>, kan du använda den för ytterligare säkerhet.</p><p>Nyckeln kräver att en av dess anslutningsplatser programmeras som <a href="https://keepassxc.org/docs/#faq-yubikey-howto">Challenge-Response</a>.</p> - - - Hardware keys found, but no slots are configured - Hårdvarunycklar hittades, men inga anslutningsplatser är konfigurerade. + %1 Invalid slot specified - %2 + %1 Ogiltig plats specificerad - %2 YubiKeyInterfacePCSC + + (PCSC) %1 [%2] Challenge-Response - Slot %3 + (PCSC) %1 [%2] Challenge-Response - Plats %3 + The YubiKey PCSC interface has not been initialized. YubiKey PCSC-gränssnittet har inte startats. + + Hardware key is currently in use. + Hårdvarunyckel används för närvarande. + Could not find or access hardware key with serial number %1. Please present it to continue. Kunde inte hitta eller komma åt hårdvarunyckeln med serienummer %1. Var snäll och anslut den för att fortsätta. @@ -10429,21 +9089,6 @@ Exempel: JBSWY3DPEHPK3PXP Failed to complete a challenge-response, the PCSC error code was: %1 Det gick inte att slutföra en challenge-response, PCSC-felkoden var: %1 - - (NFC) %1 [%2] - Slot %3, %4 - YubiKey display fields - (NFC) %1 [%2] - Kortplats %3, %4 - - - Press - USB Challenge-Response Key interaction request - Tryck - - - Passive - USB Challenge-Response Key no interaction required - Passiv - YubiKeyInterfaceUSB @@ -10451,6 +9096,14 @@ Exempel: JBSWY3DPEHPK3PXP Unknown Okänd + + (USB) %1 [%2] Configured Slot - %3 + (USB) %1 [%2] Konfigurerad plats - %3 + + + (USB) %1 [%2] Challenge-Response - Slot %3 - %4 + (USB) %1 [%2] Challenge-Response - Plats %3 - %4 + Press USB Challenge-Response Key interaction request @@ -10465,6 +9118,10 @@ Exempel: JBSWY3DPEHPK3PXP The YubiKey USB interface has not been initialized. YubiKey USB-gränssnittet har inte startats. + + Hardware key is currently in use. + Hårdvarunyckel används för närvarande. + Could not find hardware key with serial number %1. Please plug it in to continue. Kunde hitta hårdvarunyckel med serienummer %1. Anslut den för att fortsätta. @@ -10481,15 +9138,5 @@ Exempel: JBSWY3DPEHPK3PXP Failed to complete a challenge-response, the specific error was: %1 Kunde inte slutföra en challenge-response, det specifika felet var: %1 - - %1 [%2] - Slot %3 - YubiKey NEO display fields - %1 [%2] - Kortplats %3 - - - %1 [%2] - Slot %3, %4 - YubiKey display fields - %1 [%2] - Kortplats %3, %4 - \ No newline at end of file diff --git a/share/translations/keepassxc_th.ts b/share/translations/keepassxc_th.ts index 9d97be0a9..61fd5dfcf 100644 --- a/share/translations/keepassxc_th.ts +++ b/share/translations/keepassxc_th.ts @@ -74,24 +74,24 @@ Command Line - Command Line + บรรทัดคำสั่ง Details รายละเอียด - - Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. - การตัดสินใจของคุณจะถูกจำเอาไว้ในระหว่างที่ไคลเอนต์ที่ร้องขอ และ KeePassXC ทั้งคู่กำลังทำงานอยู่ - Remember - จำ + จดจำ Allow Selected อนุญาตสำหรับที่เลือก + + Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. + การตัดสินใจของคุณจะถูกจำเอาไว้ในระหว่างที่ไคลเอนต์ที่ร้องขอ และ KeePassXC ทั้งคู่กำลังทำงานอยู่ + Deny All && Future ปฏิเสธทั้งหมด && อนาคต @@ -122,10 +122,6 @@ Use OpenSSH ใช้ OpenSSH - - Use both agents - ใช้ทั้งสองตัวเลือก - SSH_AUTH_SOCK override แทนที่ SSH_AUTH_SOCK @@ -148,12 +144,16 @@ No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. - ไม่มีซ็อกเก็ต SSH Agent ตรวจสอบให้แน่ใจว่าตัวแปร environment SSH_AUTH_SOCK มีอยู่หรือตั้งค่าการแทนที่ + ไม่มีซ็อกเก็ต SSH Agent ตรวจสอบให้แน่ใจว่ามี SSH_AUTH_SOCK environment variable อยู่หรือตั้งค่าการแทนที่ SSH Agent connection is working! การเชื่อมต่อ SSH Agent ใช้งานได้! + + Use both agents + ใช้ทั้งสองตัวเลือก + ApplicationSettingsWidget @@ -169,10 +169,6 @@ Security ความปลอดภัย - - This setting cannot be enabled when minimize on unlock is enabled. - ไม่สามารถเปิดใช้การตั้งค่านี้เมื่อเปิดใช้การย่อขนาดเมื่อปลดล็อก - Access error for config file %1 มีข้อผิดพลาดในการเข้าถึงแฟ้มตั้งค่า %1 @@ -191,7 +187,7 @@ Text under icon - ข้อความใต้ไอคอน + ข้อความข้างล่างไอคอน Follow style @@ -217,49 +213,21 @@ You must restart the application to set the new language. Would you like to restart now? คุณจะต้องเริ่มแอปใหม่เพื่อตั้งภาษาใหม่ คุณต้องการจะเริ่มแอปใหม่ตอนนี้หรือไม่? + + Reset Settings? + ล้างการตั้งค่าหรือไม่? + + + Are you sure you want to reset all general and security settings to default? + คุณแน่ใจหรือไม่ว่าต้องการคืนค่าทั่วไปและค่าความปลอดภัยสู่ค่าเริ่มต้น + Select backup storage directory เลือกไดเรกทอรีจัดเก็บข้อมูลสำรอง - Confirm Reset - ยืนยันการล้างค่า - - - Are you sure you want to reset all settings to default? - คุณแน่ใจหรือไม่ที่จะล้างการตั้งค่าทั้งหมดไปเป็นค่าปริยาย? - - - Import KeePassXC Settings - นำเข้าการตั้งค่า KeePassXC - - - Failed to import settings from %1, not a valid settings file. - - - - Export KeePassXC Settings - ส่งออกการตั้งค่า KeePassXC - - - Small - - - - Normal - - - - Medium - - - - Large - - - - Custom - + This setting cannot be enabled when minimize on unlock is enabled. + ไม่สามารถเปิดใช้การตั้งค่านี้เมื่อเปิดใช้การย่อขนาดเมื่อปลดล็อก @@ -274,7 +242,7 @@ Start only a single instance of KeePassXC - เริ่ม KeePassXC เพียงตัวเดียวเท่านั้น + เริ่มต้นอินสแตนซ์เดี่ยวของ KeePassXC เท่านั้น Automatically launch KeePassXC at system startup @@ -290,11 +258,7 @@ Remember previously used databases - จำฐานข้อมูลที่เคยใช้คราวก่อน ๆ - - - recent files - แฟ้มล่าสุด + จำฐานข้อมูลที่ใช้ครั้งที่แล้ว Load previously open databases on startup @@ -312,6 +276,25 @@ Include beta releases when checking for updates ให้ตรวจหารุ่นทดสอบเบตาด้วย ขณะตรวจหาการปรับรุ่น + + On database unlock, show entries that + ในการปลดล็อกฐานข้อมูล ให้แสดงรายการที่ + + + have expired + On database unlock, show entries that... + หมดอายุแล้ว + + + days + On database unlock, show entries that will expire within %1 days + วัน + + + will expire within + On database unlock, show entries that... + จะหมดอายุภายใน + File Management การจัดการแฟ้ม @@ -336,10 +319,22 @@ Backup database file before saving สำรองแฟ้มฐานข้อมูลก่อนการบันทึก + + Backup destination + ปลายทางข้อมูลสํารอง + + + Specifies the database backup file location. Occurrences of "{DB_FILENAME}" are replaced with the filename of the saved database without extension. {TIME:<format>} is replaced with the backup time, see https://doc.qt.io/qt-5/qdatetime.html#toString. <format> defaults to format string "dd_MM_yyyy_hh-mm-ss". + ระบุตำแหน่งแฟ้มฐานข้อมูลสำรอง รายการที่แสดงเป็น "{DB_FILENAME}" จะถูกแทนด้วยชื่อแฟ้มของฐานข้อมูลที่บันทึกไว้โดยไม่มีส่วนขยาย {TIME:<format>} จะถูกแทนด้วยเวลาที่ทำการสำรอง โปรดดู https://doc.qt.io/qt-5/qdatetime.html#toString <format> ค่าปริยายในการจัดรูปแบบสตริง "dd_MM_yyyy_hh-mm-ss" + {DB_FILENAME}.old.kdbx {DB_FILENAME}.old.kdbx + + Choose... + เลือก... + Use alternative saving method (may solve problems with Dropbox, Google Drive, GVFS, etc.) ใช้วิธีการบันทึกแบบอื่น (อาจแก้ปัญหากับ Dropbox, Google Drive, GVFS เป็นต้น) @@ -366,7 +361,7 @@ Hide window when copying to clipboard - ซ่อนหน้าต่างเมื่อคัดลอกไปคลิปบอร์ด + ซ่อนหน้าต่างขณะที่คัดลอกไปยังคลิปบอร์ด Minimize @@ -374,7 +369,7 @@ Drop to background - หลบเข้าฉากหลัง + หลบไปฉากหลัง Favicon download timeout: @@ -387,7 +382,7 @@ sec Seconds - วิ + วินาที User Interface @@ -411,23 +406,19 @@ (restart program to activate) - (เริ่มโปรแกรมใหม่เพื่อเปิดใช้งาน) + (เริ่มโปรแกรมใหม่เพื่อใช้งาน) Toolbar button style: รูปแบบปุ่มบนแถบเครื่องมือ: - - Show passwords in color - แสดงรหัสผ่านเป็นสี - Use monospaced font for notes ใช้ฟอนต์ความกว้างคงที่สำหรับบันทึก Minimize instead of app exit - ย่อเล็กแทนการปิดแอป + ย่อหน้าต่างแทนที่การปิดแอป Show a system tray icon @@ -455,7 +446,7 @@ Use entry title to match windows for global Auto-Type - ใช้หัวเรื่องรายการเพื่อจับคู่หน้าต่างกับ Auto-Type สากล + ใช้หัวข้อของรายการในการจับคู่หน้าต่างกับ Auto-Type สากล Use entry URL to match windows for global Auto-Type @@ -471,7 +462,7 @@ Re-lock previously locked database after performing Auto-Type - ล็อคฐานข้อมูลก่อนหน้าอีกครั้งหลังทำการ Auto-Type + ล็อกฐานข้อมูลก่อนหน้าอีกครั้งหลังทำการ Auto-Type Auto-Type start delay: @@ -492,7 +483,7 @@ Auto-Type typing delay: - หน่วงเวลาการพิมพ์ออโต้: + หน่วงเวลาการพิมพ์อัตโนมัติ: Global auto-type shortcut @@ -507,69 +498,12 @@ จำรายการที่พิมพ์ล่าสุดสำหรับ: - On database unlock, show entries that will expire within - + recent files + แฟ้มล่าสุด - On database unlock, show entries that will expire within - - - - days - number of days warning for password expiration - วัน - - - Destination format: - รูปแบบปลายทาง: - - - <html><head/><body><p><span style=" font-weight:600;">{DB_FILENAME}</span> is replaced with the filename of the saved database without extension</p><p><span style=" font-weight:600;">{TIME:&lt;format&gt;}</span> is replaced with the specified time format (default: dd_MM_yyyy_hh-mm-ss)</p><p>See the User Guide for more details</p></body></html> - - - - Choose folder... - เลือกโฟลเดอร์... - - - Show confirmation before moving entries to recycle bin - - - - Copy data on double clicking field in entry view - - - - Show toolbar - แสดงแถบเครื่องมือ - - - Show the menu bar by pressing the Alt key - - - - Show menubar - - - - Import settings… - นำเข้าการตั้งค่า... - - - Export settings… - ส่งออกการตั้งค่า... - - - Open browser on double clicking URL field in entry view - - - - Font size: - - - - Font size selection - + Show passwords in color + แสดงรหัสผ่านเป็นสี @@ -606,7 +540,7 @@ Lock databases after inactivity of - ล็อคฐานข้อมูลหลังไม่มีการใช้งาน + ล็อกฐานข้อมูลหลังไม่มีการใช้งาน Convenience @@ -614,15 +548,19 @@ Enable database quick unlock (Touch ID / Windows Hello) - เปิดใช้งานระบบการปลดล็อกฐานข้อมูลที่รวดเร็ว + เปิดใช้งานระบบการปลดล็อกฐานข้อมูลที่รวดเร็ว (Touch ID, Windows Hello) Lock databases when session is locked or lid is closed - ล็อคฐานข้อมูลเมื่อเซสชันถูกล็อคหรือฝาถูกปิด + ล็อกฐานข้อมูลเมื่อเซสชันถูกล็อกหรือฝาถูกปิด Lock databases after minimizing the window - ล็อคฐานข้อมูลหลังย่อหน้าต่างลง + ล็อกฐานข้อมูลหลังย่อหน้าต่างลง + + + Require password repeat when it is visible + ต้องใส่รหัสผ่านซ้ำเมื่อมองเห็นได้ Hide passwords when editing them @@ -636,6 +574,18 @@ Hide passwords in the entry preview panel ซ่อนรหัสผ่านในแผงแสดงตัวอย่างรายการ + + Hide entry notes by default + ซ่อนบันทึกรายการเป็นค่าตั้งต้น + + + Move entries to recycle bin without confirmation + ย้ายรายการไปยังถังขยะโดยไม่ต้องยืนยัน + + + Enable double click to copy the username/password entry columns + เปิดใช้งานดับเบิลคลิกเพื่อคัดลอกคอลัมน์ชื่อผู้ใช้/รหัสผ่าน + Privacy ความเป็นส่วนตัว @@ -648,18 +598,6 @@ Hide TOTP in the entry preview panel - - Lock databases when switching user - - - - Lock Options - - - - Hide notes in the entry preview panel - - AutoType @@ -701,16 +639,30 @@ Very long delay detected, max is %1: %2 - ตรวจพบความหน่วงที่ยาวมาก มากสุด 1%: 2% + ตรวจพบความล่าช้า มากสุด 1%: 2% - Entry does not have attribute for PICKCHARS: %1 - รายการไม่มีแอตทริบิวต์สำหรับ PICKCHARS: %1 + Invalid conversion type: %1 + ประเภทคอนเวอร์ชันไม่ถูกต้อง: %1 + + + Invalid conversion syntax: %1 + ลักษณะคอนเวอร์ชันไม่ถูกต้อง: %1 + + + Invalid regular expression syntax %1 +%2 + ลักษณะการถ่ายทอดทั่วไปไม่ถูกต้อง %1 +%2 Invalid placeholder: %1 ข้อความตัวอย่างไม่ถูกต้อง: 1% + + Entry does not have attribute for PICKCHARS: %1 + รายการไม่มีแอตทริบิวต์สำหรับ PICKCHARS: %1 + AutoTypeAssociationsModel @@ -752,6 +704,10 @@ AutoTypePlatformX11 + + Trying to send invalid keysym. + กำลังพยายามส่งคีย์ซิมที่ไม่ถูกต้อง + Sequence aborted: Caps Lock is on การใส่ข้อมูลตามลำดับถูกยกเลิก: ปุ่ม Caps Lock อยู่ระหว่างการเปิดใช้งาน @@ -764,10 +720,6 @@ Unable to get valid keycode for key: ไม่สามารถรับรหัสคีย์ที่ถูกต้องสำหรับคีย์: - - Trying to send invalid keyboard symbol. - - AutoTypeSelectDialog @@ -809,7 +761,7 @@ Ctrl + 4 - ใช้แป้นพิมพ์เสมือน (Windows เ Type Sequence - พิมพ์ ลำดับ + ชนิด ลำดับ Cancel @@ -817,15 +769,15 @@ Ctrl + 4 - ใช้แป้นพิมพ์เสมือน (Windows เ Type {USERNAME} - พิมพ์ [ชื่อผู้ใช้] + ชนิด {ชื่อผู้ใช้} Type {PASSWORD} - พิมพ์ {รหัสผ่าน} + ชนิด {รหัสผ่าน} Type {TOTP} - พิมพ์ {รหัสผ่านแบบใช้ครั้งเดียวตามเวลา} + ชนิด {TOTP} Copy Username @@ -837,7 +789,7 @@ Ctrl + 4 - ใช้แป้นพิมพ์เสมือน (Windows เ Copy TOTP - คัดลอก {รหัสผ่านแบบใช้ครั้งเดียวตามเวลา} + คัดลอก TOTP Use Virtual Keyboard @@ -848,7 +800,7 @@ Ctrl + 4 - ใช้แป้นพิมพ์เสมือน (Windows เ BrowserAccessControlDialog KeePassXC - Browser Access Request - KeePassXC - คำขอเข้าถึงเบราว์เซอร์ + KeePassXC - การขอเข้าถึงเบราว์เซอร์ %1 is requesting access to the following entries: @@ -878,13 +830,13 @@ Ctrl + 4 - ใช้แป้นพิมพ์เสมือน (Windows เ Disable for this site ปิดใช้สำหรับไซต์เหล่านี้ - - Undo - เลิกทำ - BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + เบราว์เซอร์ KeePassXC บันทึกข้อมูล + Ok โอเค @@ -898,81 +850,25 @@ Ctrl + 4 - ใช้แป้นพิมพ์เสมือน (Windows เ Please select the correct database for saving credentials. คุณเปิดหลายฐานข้อมูล กรุณาเลือกฐานข้อมูลที่ถูกต้องเพื่อบันทึกข้อมูลของคุณ - - KeePassXC - Select Database - KeePassXC - เลือกฐานข้อมูล - - - - BrowserPasskeysConfirmationDialog - - Cancel - ยกเลิก - - - Update - ปรับปรุง - - - Authenticate - - - - Register new - ลงทะเบียนใหม่ - - - Register - ลงทะเบียน - - - Timeout in <b>%n</b> seconds... - หมดเวลาใน <b>%n</b> วินาที... - - - Relying Party: %1 - - - - Username: %1 - ชื่อผู้ใช้: %1 - - - KeePassXC - Passkey credentials - - - - Add to existing entry - - - - Existing passkey found. -Do you want to register a new passkey for: - - - - Select the existing passkey and press Update to replace it. - - - - Authenticate passkey credentials for: - - - - Do you want to register a passkey for: - - BrowserService + + KeePassXC: Create a new group + KeePassXC สร้างกลุ่มใหม่ + A request for creating a new group "%1" has been received. Do you want to create this group? - ได้รับคำขอให้สร้างกลุ่มใหม่ "%1" -คุณต้องการสร้างกลุ่มนี้หรือไม่? + ได้รับคำขอสำหรับการสร้างกลุ่มใหม่ "%1". +คุณต้องการสร้างกลุ่มนี้หรือ? + + KeePassXC: New key association request + KeePassXC คำขอกุญแจที่เชื่อมโยงใหม่ + You have received an association request for the following database: %1 @@ -986,18 +882,30 @@ chrome-laptop 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? กุญแจถอดรหัสลับที่ถูกแบ่งปันด้วยชื่อ "%1" มีอยู่ก่อนแล้ว -คุณต้องการเขียนทับมันหรือไม่? +คุณต้องการจะเขียนทับมันหรือไม่ + + + KeePassXC: Update Entry + KeePassXC ปรับปรุงรายการ Do you want to update the information in %1 - %2? คุณต้องการปรับปรุงข้อมูลใน %1 - %2 ให้ทันสมัยหรือไม่? + + KeePassXC: Delete entry + KeePassXC: ลบรายการ + A request for deleting entry "%1" has been received. Do you want to delete the entry? @@ -1007,57 +915,48 @@ Do you want to delete the entry? - %1 (Passkey) - + Converting attributes to custom data… + กำลังแปลงคุณสมบัติต่างๆเป็นข้อมูลที่กำหนดเอง ... - KeePassXC - Create a new group - KeePassXC - สร้างกลุ่มใหม่ + Abort + หยุด - Disable - ปิดใช้ + KeePassXC: Converted KeePassHTTP attributes + KeePassXC: แปลงคุณลักษณะของ KeePassHTTP - KeePassXC - Overwrite existing key? - + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + แปลงคุณสมบัติจากรายการ %1 สำเร็จ +ย้าย %2 กุญแจไปยังข้อมูลที่กำหนดเอง + + + Successfully moved %n keys to custom data. + ย้ายกุญแจ %n ไปยังข้อมูลที่กำหนดเองได้สำเร็จ - KeePassXC - Update Entry - + KeePassXC: No entry with KeePassHTTP attributes found! + KeePassXC ไม่พบรายการที่มีคุณสมบัติ KeePassHTTP - KeePassXC - Delete entry - + The active database does not contain an entry with KeePassHTTP attributes. + ฐานข้อมูลที่ยังใช้งานอยู่ไม่มีรายการตามคุณสมบัติ KeePassHTTP. - KeePassXC - New key association request - + Don't show this warning again + ไม่ต้องแสดงคำเตือนนี้อีก - Passkey - + KeePassXC: Legacy browser integration settings detected + KeePassXC ตรวจพบการตั้งค่าการรวมเบราว์เซอร์ดั้งเดิม - KeePassXC - Passkey credentials - - - - Register a new passkey to this entry: - - - - KeePassXC - Update passkey - - - - Entry already has a passkey. -Do you want to overwrite the passkey in %1 - %2? - - - - Register - ลงทะเบียน + 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? + การตั้งค่าเบราว์เซอร์ KeePassXC ของคุณต้องถูกย้ายไปสู่การตั้งค่าฐานข้อมูล นี่จำเป็นต่อการรักษาการเชื่อมต่อเบราว์เซอร์ปัจจุบันของคุณ คุณต้องการย้ายการตั้งค่าที่มีอยู่แล้วตอนนี้หรือไม่ @@ -1078,6 +977,10 @@ Do you want to overwrite the passkey in %1 - %2? General ทั่วไป + + Browsers installed as snaps are currently not supported. + ยังไม่รองรับเบราว์เซอร์ที่ถูกติดตั้งจาก Snap + Enable integration for these browsers: เปิดการใช้เบราว์เซอร์เหล่านี้ร่วมกับ @@ -1117,7 +1020,7 @@ Do you want to overwrite the passkey in %1 - %2? Request to unlock the database if it is locked - ร้องขอการปลดล็อค หากฐานข้อมูลยังล็อคอยู่ + ร้องขอการปลดล็อก หากฐานข้อมูลยังล็อกอยู่ Only entries with the same scheme (http://, https://, …) are returned. @@ -1173,7 +1076,7 @@ Do you want to overwrite the passkey in %1 - %2? Automatically creating or updating string fields is not supported. - ไม่รองรับการสร้างหรือปรับปรุงช่องข้อมูลสตริงโดยอัตโนมัติ + ไม่รองรับการสร้างหรืออัพเดท string fields โดยอัตโนมัติ Return advanced string fields which start with "KPH: " @@ -1249,6 +1152,26 @@ Do you want to overwrite the passkey in %1 - %2? Custom extension ID รหัสส่วนขยายที่กำหนดเอง + + Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 + เนื่องจาก Snap sandbox คุณต้องเรียกใช้สคริปต์เพื่อเปิดใช้งานการรวมเบราว์เซอร์ <br /> คุณสามารถรับสคริปต์นี้จาก %1 + + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 + จำเป็นต้องมีโปรแกรม KeePassXC-Browser เพื่อให้การผสานกับเบราว์เซอร์ทำงานได้ <br />ดาวน์โหลดมันสำหรับ %1 และ %2 และ %3. %4 + + + Please see special instructions for browser extension use below + โปรดดูคำแนะนำพิเศษสำหรับการใช้งานส่วนขยายเบราว์เซอร์ด้านล่าง + + + <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. + <b> ข้อผิดพลาด: </b> ไม่พบตำแหน่งพร็อกซีที่กำหนดเอง! <br/> การผสานรวมเบราว์เซอร์จะไม่ทำงานหากไม่มีแอปพลิเคชันพร็อกซี + + + <b>Warning:</b> The following options can be dangerous! + <b> คำเตือน </b> ตัวเลือกต่อไปนี้อาจจะอันตราย + Executable Files แฟ้มปฏิบัติการ @@ -1259,52 +1182,12 @@ Do you want to overwrite the passkey in %1 - %2? Select custom proxy location - เลือกที่ตั้งพร็อกซีที่กำหนดเอง + เลือกตำแหน่งพร็อกซีที่กำหนดเอง Select native messaging host folder location เลือกตำแหน่งโฟลเดอร์โฮสต์การส่งข้อความดั้งเดิม - - Allow keepassxc-proxy to list all entries with their title, URL and UUID in connected databases. - - - - Allow limited access to all entries in connected databases (ignores site access restrictions) - - - - <b>Warning:</b> Only adjust these settings if necessary. - - - - The custom proxy location does not exist. - - - - <b>Error:</b> The custom proxy location does not exist. Correct this in the advanced settings tab. - - - - <b>Error:</b> The installed proxy executable is missing from the expected location: %1<br/>Please set a custom proxy location in the advanced settings or reinstall the application. - - - - Allows using insecure http://localhost with passkeys for testing purposes. - - - - Allow using localhost with passkeys - - - - KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. - - - - Browsers installed using Snap or Flatpak are not supported with exception to Firefox installed using Snap. - - CloneDialog @@ -1327,6 +1210,14 @@ Do you want to overwrite the passkey in %1 - %2? CsvImportWidget + + Import CSV fields + นำเข้าฟิลด์ CSV + + + filename + ชื่อแฟ้ม + size, rows, columns ขนาด, แถว, หลัก @@ -1345,7 +1236,7 @@ Do you want to overwrite the passkey in %1 - %2? Title - หัวเรื่อง + หัวข้อ Group @@ -1369,7 +1260,7 @@ Do you want to overwrite the passkey in %1 - %2? Last Modified - แก้ไขล่าสุด + ถูกแก้ไขล่าสุด Icon @@ -1435,42 +1326,49 @@ Do you want to overwrite the passkey in %1 - %2? Column %1 คอลัมน์ %1 + + Imported from CSV file + นำเข้าจากแฟ้ม CSV แล้ว + + + Original data: + ข้อมูลต้นฉบับ + + + Error(s) detected in CSV file! + ตรวจพบข้อผิดพลาดในแฟ้ม CSV + [%n more message(s) skipped] [อีก %n ข้อความถูกข้าม] - Failed to parse CSV file: %1 - + Error + ผิดพลาด - Imported from CSV file: %1 - - - - No Title Selected - - - - No title column was selected, entries will be hard to tell apart. -Are you sure you want to import? - - - - Tags - แท็ก + CSV import: writer has errors: +%1 + นำเข้า CSV ผู้เขียนมีข้อผิดพลาด %1 CsvParserModel + + %1, %2, %3 + file info: bytes, rows, columns + %1 %2 %3 + + + %n byte(s) + %n ไบท์ + %n row(s) - CSV row count %n แถว %n column(s) - CSV column count %n คอลัมน์ @@ -1483,15 +1381,15 @@ Are you sure you want to import? File %1 does not exist. - ไม่มีแฟ้ม %1 + ไม่มีแฟ้ม %1 Unable to open file %1. - ไม่สามารถเปิดแฟ้ม %1 + เปิดแฟ้ม %1 ไม่ได้ Error while reading the database: %1 - เกิดข้อผิดพลาดระหว่างอ่านฐานข้อมูล: %1 + เกิดข้อผิดพลาดระหว่างอ่านฐานข้อมูล %1 Could not save, database does not point to a valid file. @@ -1507,7 +1405,7 @@ Are you sure you want to import? Database file has unmerged changes. - แฟ้มฐานข้อมูลมีความเปลี่ยนแปลงที่ยังไม่ถูกผสาน + แฟ้มฐานข้อมูลมีความเปลี่ยนแปลงที่ยังไม่ถูกบันทึกกลับ %1 @@ -1523,14 +1421,6 @@ Backup database located at %2 Recycle Bin ถังขยะ - - Database file read error. - - - - No file path was provided. - - DatabaseOpenDialog @@ -1553,10 +1443,30 @@ Backup database located at %2 Password field ช่องรหัสผ่าน + + Enter Additional Credentials (if any): + ป้อนข้อมูลประจำตัวเพิ่มเติม (หากมี): + + + Key File: + แฟ้มกุญแจ: + + + Key file help + ช่วยเหลือเรื่องแฟ้มกุญแจ + Hardware key slot selection การเลือกช่องคีย์ฮาร์ดแวร์ + + Hardware Key: + กุญแจฮาร์ดแวร์: + + + Hardware key help + วิธีการใช้คีย์ฮาร์ดแวร์ + Key file to unlock the database ไฟล์คีย์เพื่อปลดล็อกฐานข้อมูล @@ -1569,9 +1479,17 @@ Backup database located at %2 Browse… เลือกดู... + + Refresh hardware tokens + รีเฟรชฮาร์ดแวร์โทเค็น + + + Refresh + รีเฟรช + Unlock Database - ปลดล็อค ฐานข้อมูล + ปลดล็อกฐานข้อมูล Cancel @@ -1579,7 +1497,7 @@ Backup database located at %2 Unlock - ปลดล็อค + ปลดล็อก Please present or touch your YubiKey to continue… @@ -1611,11 +1529,11 @@ We recommend you update your KeePassXC installation. Database unlock canceled. - การปลดล็อคฐานข้อมูลถูกยกเลิก + การปลดล็อกฐานข้อมูลถูกยกเลิก Unlock failed and no password given - การปลดล็อคไม่สำเร็จ ไม่มีการใส่รหัสผ่าน + ปลดล็อกไม่สำเร็จ และไม่มีการให้รหัสผ่าน Unlocking the database failed and you did not enter a password. @@ -1631,6 +1549,10 @@ To prevent this error from appearing, you must go to "Database Settings / S Retry with empty password ลองด้วยรหัสผ่านว่างเปล่า + + Failed to authenticate with Touch ID + การยืนยันกับ Touch ID ไม่สำเร็จ + Failed to open key file: %1 ไม่สามารถเปิดแฟ้มกุญแจได้: %1 @@ -1664,65 +1586,41 @@ To prevent this error from appearing, you must go to "Database Settings / S Cannot use database file as key file ไม่สามารถใช้แฟ้มฐานข้อมูลเป็นแฟ้มกุญแจได้ + + You cannot use your database file as a key file. +If you do not have a key file, please leave the field empty. + คุณไม่สามารถใช้ไฟล์ฐานข้อมูลเป็นไฟล์คีย์ได้ +หากคุณไม่มีไฟล์คีย์ กรุณาเว้นฟิลด์นี้ว่างไว้ + + + Detecting hardware keys… + กำลังตรวจหากุญแจฮาร์ดแวร์... + + + No hardware keys detected + ตรวจไม่พบกุญแจฮาร์ดแวร์ + + + Select hardware key… + เลือกกุญแจกายภาพ... + + + <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information…</p> + <p>นอกเหนือจากรหัสผ่าน คุณสามารถใช้ไฟล์ลับเพื่อเพิ่มความปลอดภัยของฐานข้อมูลของคุณได้ ไฟล์นี้สามารถสร้างได้จากการตั้งค่าความปลอดภัยของฐานข้อมูลของคุณ</p><p>นี่<strong>ไม่ใช่</strong>ไฟล์ฐานข้อมูล *.kdbx ของคุณ!<br>หากคุณไม่มีไฟล์คีย์ ให้ปล่อยฟิลด์นี้ว่างไว้</p><p>คลิกเพื่อดูข้อมูลเพิ่มเติม…</p> + + + <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +<p>Click for more information…</p> + <p> คุณสามารถใช้คีย์ความปลอดภัยฮาร์ดแวร์ เช่น <strong> YubiKey </strong> หรือ <strong> OnlyKey </strong> ที่มีช่องเสียบที่กำหนดค่าไว้สำหรับ HMAC-SHA1</p> +<p> คลิกเพื่อดูข้อมูลเพิ่มเติม… </p> + authenticate to access the database รับรองความถูกต้องเพื่อเข้าถึงฐานข้อมูล - Failed to authenticate with Quick Unlock: %1 - - - - Select Key File: - เลือกแฟ้มกุญแจ: - - - <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!</p> - - - - Use hardware key [Serial: %1] - - - - Use hardware key - ใช้กุญแจฮาร์ดแวร์ - - - Your database file is NOT a key file! -If you don't have a key file or don't know what that is, you don't have to select one. - - - - KeePassXC database file selected - - - - The file you selected looks like a database file. -A database file is NOT a key file! - -Are you sure you want to continue with this file?. - - - - No hardware keys found. - - - - Refresh Hardware Keys - - - - Click to add a key file. - คลิกเพื่อเพิ่มแฟ้มกุญแจ - - - <a href="#" style="text-decoration: underline">I have a key file</a> - <a href="#" style="text-decoration: underline">ฉันมีแฟ้มกุญแจ</a> - - - Hardware keys found, but no slots are configured. - + Failed to authenticate with Windows Hello: %1 + ไม่สามารถรับรองความถูกต้องกับ Windows Hello: %1 @@ -1734,6 +1632,10 @@ Are you sure you want to continue with this file?. DatabaseSettingsDialog + + Advanced Settings + การตั้งค่าขั้นสูง + General ทั่วไป @@ -1758,22 +1660,6 @@ Are you sure you want to continue with this file?. Maintenance ซ่อมบำรุง - - KeeShare - KeeShare - - - Secret Service Integration - การผสานรวมบริการลับ - - - Remote Sync - - - - Database Settings: %1 - - DatabaseSettingsWidgetBrowser @@ -1781,6 +1667,18 @@ Are you sure you want to continue with this file?. KeePassXC-Browser settings การตั้งค่าของเบราว์เซอร์ KeePassXC + + Convert KeePassHTTP data + แปลงข้อมูล KeePassHTTP + + + Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data + แปลงแอตทริบิวต์ KeePassHTTP เดิมเป็นข้อมูลที่กำหนดเองที่เข้ากันได้กับ KeePassXC-Browser + + + Refresh database root group ID + รีเฟรชรหัสกลุ่มรูทของฐานข้อมูล + Disconnect all browsers หยุดการเชื่อมต่อกับทุกเบราว์เซอร์ @@ -1789,10 +1687,6 @@ Are you sure you want to continue with this file?. Forget all site-specific settings on entries ไม่จำการตั้งค่าเฉพาะสำหรับทุกไซต์บนรายการ - - Refresh database root group ID - รีเฟรชรหัสกลุ่มรูทของฐานข้อมูล - Stored keys กุญแจที่ถูกเก็บไว้ @@ -1807,11 +1701,11 @@ Are you sure you want to continue with this file?. Remove - ลบ + ลบออก Delete the selected key? - ลบกุญแจที่เลือกหรือไม่ + ลบกุญแจที่เลือกหรือไม่? Do you really want to delete the selected key? @@ -1841,10 +1735,18 @@ This may prevent connection to the browser plugin. คุณต้องการหยุดการเชื่อมต่อกับทุกเบราวเซอร์หรือไม่ สิ่งนี้อาจทำให้การเชื่อมต่อกับโปรแกรมเสริมบนเบราว์เซอร์มีปัญหา + + KeePassXC: No keys found + KeePassXC: ไม่พบกุญแจ + No shared encryption keys found in KeePassXC settings. ไม่พบการแบ่งปันกุญแจที่ถูกเข้ารหัสลับแล้วในการตั้งค่า KeePassXC + + KeePassXC: Removed keys from database + KeePassXC: กุญแจถูกลบออกจากฐานข้อมูล + Successfully removed %n encryption key(s) from KeePassXC settings. ลบ %n กุญแจเข้ารหัสลับจากการตั้งค่า KeePassXC สำเร็จ @@ -1863,14 +1765,31 @@ Permissions to access entries will be revoked. 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 convert all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + คุณต้องการแปลงข้อมูลการรวมเบราว์เซอร์เดิมทั้งหมดให้เป็นมาตรฐานล่าสุดหรือไม่? นี่เป็นสิ่งจำเป็นเพื่อรักษาความเข้ากันได้กับปลั๊กอินของเบราว์เซอร์ + Refresh database ID รีเฟรช ฐานข้อมูลการยืนยันตัวตน @@ -1881,26 +1800,6 @@ This is only necessary if your database is a copy of another and the browser ext คุณต้องการรีเฟรชรหัสฐานข้อมูลหรือไม่? สิ่งนี้จำเป็นเฉพาะในกรณีที่ฐานข้อมูลของคุณเป็นสำเนาของฐานข้อมูลอื่นและส่วนขยายของเบราว์เซอร์ไม่สามารถเชื่อมต่อได้ - - Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data - แปลงแอตทริบิวต์ KeePassHTTP เดิมเป็นข้อมูลที่กำหนดเองที่เข้ากันได้กับ KeePassXC-Browser - - - No keys found - ไม่พบกุญแจ - - - Removed keys from database - - - - Removed permissions - - - - No entry with permissions found! - - DatabaseSettingsWidgetDatabaseKey @@ -1910,7 +1809,7 @@ This is only necessary if your database is a copy of another and the browser ext No password set - ยังไม่ได้ตั้งรหัสผ่าน + รหัสผ่านยังไม่ได้ติดตั้ง WARNING! You have not set a password. Using a database without a password is strongly discouraged! @@ -1940,18 +1839,6 @@ Are you sure you want to continue without a password? Failed to change database credentials เปลี่ยนข้อมูลประจำตัวฐานข้อมูลไม่สำเร็จ - - Weak password - รหัสผ่านอ่อนแอ - - - This is a weak password! For better protection of your secrets, you should choose a stronger password. - - - - The provided password does not meet the minimum quality requirement. - - DatabaseSettingsWidgetEncryption @@ -1959,6 +1846,14 @@ Are you sure you want to continue without a password? Decryption Time: เวลาการเข้ารหัสลับ + + Change existing decryption time + เปลี่ยนเวลาถอดรหัสที่มีอยู่ + + + Change + เปลี่ยนแปลง + Decryption time in seconds เวลาถอดรหัสลับ หน่วยเป็นวินาที @@ -2039,6 +1934,11 @@ Are you sure you want to continue without a password? KDBX 3 KDBX 3 + + unchanged + Database decryption time is unchanged + ไม่เปลี่ยนแปลง + Number of rounds too high Key transformation rounds @@ -2089,18 +1989,6 @@ If you keep this number, your database will not be protected from brute force at Threads for parallel execution (KDF settings) thread(s) - - Encryption Settings: - - - - Basic - พื้นฐาน - - - Advanced - ขั้นสูง - DatabaseSettingsWidgetFdoSecrets @@ -2133,7 +2021,7 @@ If you keep this number, your database will not be protected from brute force at Database name field - ช่องชื่อฐานข้อมูล + ช่องข้อมูลชื่อฐานข้อมูล Database description: @@ -2141,7 +2029,7 @@ If you keep this number, your database will not be protected from brute force at Database description field - ช่องคำอธิบายฐานข้อมูล + ช่องข้อมูลคำอธิบายฐานข้อมูล Default username: @@ -2149,7 +2037,7 @@ If you keep this number, your database will not be protected from brute force at Default username field - ช่องชื่อผู้ใช้ฐานข้อมูล + ช่องข้อมูลชื่อผู้ใช้ฐานข้อมูล History Settings @@ -2230,70 +2118,6 @@ removed from the database. รายการที่ถูกลบออกจากถังรีไซเคิล ถูกลบออกจากฐานข้อมูล - - Autosave delay since last change - - - - Autosave delay - - - - Autosave delay since last change in minutes - - - - min - นาที - - - Autosave delay since last change checkbox - - - - Public Database Metadata - - - - Warning: the following settings are not encrypted. - - - - Display name: - ชื่อแสดง: - - - Publically visible display name used on the unlock dialog - - - - Database public display name - - - - Display color: - - - - Publically visible color used on the unlock dialog - - - - Database public display color chooser - - - - Clear - ล้าง - - - Display icon: - ไอคอนแสดง: - - - Select Database Icon - เลือกไอคอนฐานข้อมูล - DatabaseSettingsWidgetKeeShare @@ -2378,7 +2202,7 @@ removed from the database. Database name field - ช่องชื่อฐานข้อมูล + ช่องข้อมูลชื่อฐานข้อมูล Description: @@ -2386,130 +2210,7 @@ removed from the database. Database description field - ช่องคำอธิบายฐานข้อมูล - - - - DatabaseSettingsWidgetRemote - - Sync Commands - - - - Remove - ลบออก - - - Command Settings - - - - Name - ชื่อ - - - Save - บันทึก - - - Download - - - - Command: - - - - Download command field - - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - - - - Input: - - - - Download input field - - - - Upload - - - - Upload command field - - - - e.g.: "sftp user@hostname" or "scp {TEMP_DATABASE} user@hostname:DatabaseOnRemote.kdbx" - - - - Upload input field - - - - Name cannot be empty. - - - - Test - - - - Download command cannot be empty. - - - - Download failed with error: %1 - - - - Download finished, but file %1 could not be found. - - - - Download successful. - - - - Save Remote Settings - - - - You have unsaved changes. Do you want to save them? - - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - - - - e.g.: -put {TEMP_DATABASE} DatabaseOnRemote.kdbx -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - - - - Timeout: - - - - seconds - วินาที + ช่องข้อมูลคำอธิบายฐานข้อมูล @@ -2544,10 +2245,26 @@ This is definitely a bug, please report it to the developers. CSV file แฟ้ม CSV + + Select CSV file + เลือกแฟ้ม CSV + Merge database ผสานฐานข้อมูล + + KeePass 1 database + ฐานข้อมูล KeePass 1 + + + Open KeePass 1 database + เปิดฐานข้อมูล KeePass 1 + + + Open OPVault + เปิด OPVault + Export database to CSV file ส่งออกฐานข้อมูลเป็นแฟ้ม CSV @@ -2560,6 +2277,28 @@ This is definitely a bug, please report it to the developers. Writing the HTML file failed. การเขียนไฟล์ HTML ล้มเหลว + + Export Confirmation + ยืนยันการส่งออก + + + You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? + คุณกำลังจะส่งออกฐานข้อมูลของคุณไปยังแฟ้มที่ไม่ได้เข้ารหัสลับ นี่จะทำให้รหัสผ่านและข้อมูลอ่อนไหวของคุณตกอยู่ในอันตราย! คุณแน่ใจหรือไม่ว่าจะดำเนินการต่อ? + + + New Database + ฐานข้อมูลใหม่ + + + %1 [New Database] + Database tab name modifier + %1 [ฐานข้อมูลใหม่] + + + %1 [Locked] + Database tab name modifier + %1 [ถูกล็อก] + Export database to XML file ส่งออกฐานข้อมูลเป็นไฟล์ XML @@ -2572,31 +2311,9 @@ This is definitely a bug, please report it to the developers. Writing the XML file failed การเขียนไฟล์ XML ล้มเหลว - - Export Confirmation - ยืนยันการส่งออก - - - You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? - คุณกำลังจะส่งออกฐานข้อมูลของคุณไปยังแฟ้มที่ไม่ได้เข้ารหัสลับ นี่จะทำให้รหัสผ่านและข้อมูลอ่อนไหวของคุณตกอยู่ในอันตราย! คุณแน่ใจหรือไม่ว่าจะดำเนินการต่อ? - - - %1 [Locked] - Database tab name modifier - %1 [ถูกล็อก] - - - %1 [Temporary] - Database tab name modifier - - DatabaseWidget - - Searches and Tags - การค้นหาและแท็ก - Searching… กำลังค้นหา... @@ -2619,7 +2336,7 @@ This is definitely a bug, please report it to the developers. Do you really want to execute the following command?<br><br>%1<br> - คุณต้องการจะดำเนินการตามคำสั่งต่อไปนี้จริงหรือไม่? <br><br>%1<br> + คุณต้องการดำเนินการตามคำสั่งหรือไม่<br><br>%1<br> Remember my choice @@ -2631,7 +2348,7 @@ This is definitely a bug, please report it to the developers. Do you really want to delete the group "%1" for good? - คุณต้องการจะลบกลุ่ม "%1" ให้หายไปอย่างถาวรจริงหรือไม่? + คุณต้องการจะลบกลุ่ม "%1" ให้หายไปอย่างถาวรจริงหรือไม่ Move group to recycle bin? @@ -2645,10 +2362,6 @@ This is definitely a bug, please report it to the developers. Expired entries ข้อมูลที่นำเข้าสู่ระบบที่หมดอายุแล้ว - - Entries expiring within %1 day(s) - รายการจะหมดอายุภายใน %1 วัน - No current database. ไม่มีฐานข้อมูลปัจจุบัน @@ -2659,7 +2372,7 @@ This is definitely a bug, please report it to the developers. Successfully merged the database files. - ผสานแฟ้มฐานข้อมูลสำเร็จแล้ว + ผสานแฟ้มฐานข้อมูลเรียบร้อยแล้ว Database was not modified by merge operation. @@ -2673,31 +2386,19 @@ This is definitely a bug, please report it to the developers. No Results ไม่มีผลลัพธ์ - - Save - บันทึก - - - Enter a unique name or overwrite an existing search from the list: - ป้อนชื่อเฉพาะหรือเขียนทับการค้นหาที่มีอยู่จากรายการ: - - - Save Search - บันทึกการค้นหา - Lock Database? - ล็อคฐานข้อมูลหรือไม่ + ล็อกฐานข้อมูลหรือไม่ You are editing an entry. Discard changes and lock anyway? - กำลังอยู่ในระหว่างแก้ไขรายการ คุณต้องการจะยกเลิกการแก้ไขและล็อคตอนนี้จริงหรือไม่ + กำลังอยู่ระหว่างแก้ไขรายการ คุณจะทิ้งการแก้ไขและล็อกจริงหรือไม่ "%1" was modified. Save changes? "%1" ถูกแก้ไขแล้ว -บันทึกการเปลี่ยนแปลงหรือไม่? +บันทึกการเปลี่ยนแปลงหรือไม่ Database was modified. @@ -2713,6 +2414,26 @@ Save changes? 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? + แฟ้มฐานข้อมูลเปลี่ยนไปแล้ว และคุณมีการเปลี่ยนแปลงที่ยังไม่ได้บันทึก +คุณต้องการผสานการเปลี่ยนแปลงของคุณหรือไม่? + + + Could not open the new database file while attempting to autoreload. +Error: %1 + ไม่สามารถเปิดแฟ้มฐานข้อมูลใหม่ขณะกำลังพยายามรีโหลดอัตโนมัติ +ข้อผิดพลาด: %1 + Disable safe saves? ปิดการบันทึกแบบปลอดภัยหรือไม่ @@ -2725,7 +2446,7 @@ Disable safe saves and try again? Writing the database failed: %1 - การเขียนฐานข้อมูลล้มเหลว: %1 + เขียนฐานข้อมูลล้มเหลว %1 Passwords @@ -2755,94 +2476,25 @@ Disable safe saves and try again? Could not find database file: %1 ไม่พบแฟ้มฐานข้อมูล: %1 - - New Database - ฐานข้อมูลใหม่ + + Entries expiring within %1 day(s) + รายการจะหมดอายุภายใน %1 วัน - %1 [New Database] - Database tab name modifier - %1 [ฐานข้อมูลใหม่] + Searches and Tags + การค้นหาและแท็ก - Remote Sync did not contain any download or upload commands. - + Enter a unique name or overwrite an existing search from the list: + ป้อนชื่อเฉพาะหรือเขียนทับการค้นหาที่มีอยู่จากรายการ: - Remote sync '%1' completed successfully! - + Save + บันทึก - Remote sync '%1' failed: %2 - - - - Error while saving database %1: %2 - - - - Downloading... - กำลังดาวน์โหลด... - - - Uploading... - - - - Syncing... - - - - Remove passkey from entry - - - - Do you want to remove the passkey from this entry? - - - - The database file "%1" was modified externally - - - - Do you want to load the changes? - - - - Reload database - - - - Reloading database… - - - - Reload canceled - - - - Reload successful - - - - Reload pending user action… - - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes<br>Ignore the changes on disk until save<br>Discard unsaved changes - - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes then save<br>Overwrite the changes on disk<br>Discard unsaved changes - - - - Database file overwritten. - - - - Database file on disk cannot be unlocked with current credentials.<br>Enter new credentials and/or present hardware key to continue. - + Save Search + บันทึกการค้นหา @@ -2895,6 +2547,10 @@ Disable safe saves and try again? n/a n/a + + (encrypted) + (เข้ารหัสลับอยู่) + Select private key เลือกกุญแจส่วนตัว @@ -2981,10 +2637,6 @@ Would you like to correct it? Hide ซ่อน - - %n hour(s) - %n ชั่วโมง - %n week(s) %n สัปดาห์ @@ -2997,9 +2649,9 @@ Would you like to correct it? %n year(s) %n ปี - - Failed to decrypt SSH key, ensure password is correct. - + + %n hour(s) + %n ชั่วโมง @@ -3119,20 +2771,10 @@ Would you like to correct it? Add new window association เพิ่มการเชื่อมโยงหน้าต่างใหม่ - - + - Add item - + - Remove selected window association ลบการเชื่อมโยงหน้าต่างที่เลือก - - - - Remove item - - - Window title: หัวเรื่องของหน้าต่าง @@ -3157,9 +2799,23 @@ Would you like to correct it? Custom Auto-Type sequence for this window ลำดับประเภทอัตโนมัติแบบกำหนดเองสำหรับหน้าต่างนี้ + + + + Add item + + + + + - + Remove item + - + EditEntryWidgetBrowser + + These settings affect to the entry's behaviour with the browser extension. + การตั้งค่าเหล่านี้จะส่งผลต่อพฤติกรรมการป้อนข้อมูลด้วยส่วนเสริมในเบราว์เซอร์ + General ทั่วไป @@ -3172,14 +2828,26 @@ Would you like to correct it? Skip Auto-Submit for this entry ข้ามการส่งอัตโนมัติสำหรับรายการนี้ + + Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. + ส่งการตั้งค่านี้ไปยังเบราว์เซอร์สำหรับกล่องโต้ตอบ HTTP Auth เท่านั้น หากเปิดใช้งาน แบบฟอร์มการเข้าสู่ระบบปกติจะไม่แสดงรายการนี้สำหรับการเลือก + Use this entry only with HTTP Basic Auth ใช้รายการกับ HTTP Basic Auth เท่านั้น: + + Do not send this setting to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. + อย่าส่งการตั้งค่านี้ไปยังเบราว์เซอร์สำหรับกล่องโต้ตอบ HTTP Auth หากเปิดใช้งาน กล่องโต้ตอบ HTTP Auth จะไม่แสดงรายการนี้สำหรับการเลือก + Do not use this entry with HTTP Basic Auth อย่าใช้รายการนี้กับ HTTP Basic Auth + + Additional URL's + URL เพิ่มเติม + Add เพิ่ม @@ -3192,22 +2860,6 @@ Would you like to correct it? Edit แก้ไข - - These settings affect the entry's behaviour with the browser extension. - - - - Additional URLs - URL เพิ่มเติม - - - Only send this entry to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. - - - - Do not send this entry to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. - - EditEntryWidgetHistory @@ -3233,7 +2885,7 @@ Would you like to correct it? Delete selected history state - ลบประวัติช่วงที่เลือก + ลบช่วงประวัติที่เลือก Delete @@ -3256,7 +2908,7 @@ Would you like to correct it? Notes field - ช่องบันทึก + ชื่อบันทึก Username field @@ -3264,7 +2916,7 @@ Would you like to correct it? Expiration field - ช่องวันหมดอายุ + ช่องการหมดอายุ Expiration Presets @@ -3296,7 +2948,7 @@ Would you like to correct it? Toggle expiration - สลับวันหมดอายุ + สลับการหมดอายุ Tags list @@ -3373,6 +3025,19 @@ Would you like to correct it? Private key กุญแจส่วนตัว + + External file + แฟ้มภายนอก + + + Browser for key file + เรียกดูแฟ้มกุญแจ + + + Browse… + Button for opening file dialog + เลือกดู... + Attachment แฟ้มแนบ @@ -3389,23 +3054,6 @@ Would you like to correct it? Remove from agent ลบออกจากตัวแทน - - External file - แฟ้มภายนอก - - - Browser for key file - เรียกดูแฟ้มกุญแจ - - - Browse… - Button for opening file dialog - เลือกดู... - - - Generate - สร้าง - Select attachment file เลือกแฟ้มแนบ @@ -3430,10 +3078,6 @@ Would you like to correct it? seconds วินาที - - Clear agent - - EditGroupWidget @@ -3445,6 +3089,10 @@ Would you like to correct it? Icon ไอคอน + + Browser Integration + การทำงานร่วมกับเบราว์เซอร์ + Properties คุณสมบัติ @@ -3461,10 +3109,6 @@ Would you like to correct it? Group has unsaved changes กลุ่มมีการเปลี่ยนแปลงที่ไม่ได้บันทึก - - Browser Integration - การทำงานร่วมกับเบราว์เซอร์ - Enable เปิดใช้ @@ -3475,7 +3119,7 @@ Would you like to correct it? Inherit from parent group (%1) - สืบคุณสมบัติจากกลุ่มแม่ (%1) + รับช่วงจากกลุ่มหลัก (%1) @@ -3524,14 +3168,6 @@ Would you like to correct it? Omit WWW subdomain from matching toggle for this and sub groups ละเว้นโดเมนย่อย WWW จากการสลับการจับคู่สำหรับกลุ่มนี้และกลุ่มย่อย - - Restrict matching to given browser key: - - - - Restrict matching to given browser key toggle for this and sub groups - - EditGroupWidgetKeeShare @@ -3651,7 +3287,7 @@ Supported extensions are: %1. Toggle expiration - สลับวันหมดอายุ + สลับการหมดอายุ Expires: @@ -3663,7 +3299,7 @@ Supported extensions are: %1. Expiration field - ช่องวันหมดอายุ + ช่องการหมดอายุ Use default Auto-Type sequence of parent group @@ -3683,7 +3319,7 @@ Supported extensions are: %1. Notes: - บันทึก: + บันทึก Default auto-type sequence field @@ -3691,7 +3327,7 @@ Supported extensions are: %1. Notes field - ช่องบันทึก + ชื่อบันทึก Name: @@ -3764,6 +3400,10 @@ Supported extensions are: %1. Unable to fetch favicon. ไม่สามารถดึงข้อมูล favicon ได้ + + You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security + คุณสามารถเปิดใช้งานบริการไอคอนเว็บไซต์ DuckDuckGo ได้ที่เครื่องมือ -> การตั้งค่า -> ความปลอดภัย + Existing icon selected. ไอคอนที่มีอยู่แล้วถูกเลือก @@ -3782,7 +3422,7 @@ Supported extensions are: %1. Successfully loaded %1 of %n icon(s) - โหลดไอคอน %1 จาก %n สำเร็จ + การโหลดไอคอน %1 ของ %1 ประสบความสำเร็จ No icons were loaded @@ -3796,10 +3436,6 @@ Supported extensions are: %1. The following icon(s) failed: ไอคอนต่อไปนี้ล้มเหลว - - You can enable the DuckDuckGo website icon service under Application Settings -> Security - - EditWidgetProperties @@ -3874,25 +3510,7 @@ This may cause the affected plugins to malfunction. Entry %1 - Clone - %1 - Clone - - - Passkey - - - - Invalid conversion type: %1 - ประเภทคอนเวอร์ชันไม่ถูกต้อง: %1 - - - Invalid conversion syntax: %1 - ลักษณะคอนเวอร์ชันไม่ถูกต้อง: %1 - - - Invalid regular expression syntax %1 -%2 - ลักษณะการถ่ายทอดทั่วไปไม่ถูกต้อง %1 -%2 + %1 -ลอกแบบ @@ -3902,21 +3520,6 @@ This may cause the affected plugins to malfunction. เปิดแฟ้ม "%1" ไม่ได้ - - EntryAttachmentsDialog - - Form - จาก - - - File name - - - - File contents... - - - EntryAttachmentsModel @@ -3954,6 +3557,14 @@ This may cause the affected plugins to malfunction. Remove ลบออก + + Rename selected attachment + เปลี่ยนชื่อเอกสารแนบที่เลือก + + + Rename + เปลี่ยนชื่อ + Open selected attachment เปิดแฟ้มแนบที่เลือก @@ -3989,12 +3600,12 @@ This may cause the affected plugins to malfunction. Unable to create directory: %1 - ไม่สามารถสร้างไดเรกทอรี: + ไม่สามารถสร้างไดเรคทอรี %1 Are you sure you want to overwrite the existing file "%1" with the attachment? - คุณแน่ใจหรือว่าจะเขียนทับแฟ้ม "%1" ที่มีอยู่ ด้วยแฟ้มแนบ? + คุณแน่ใจหรือว่าจะเขียนทับแฟ้มที่มีอยู่ "1%" ด้วยแฟ้มแนบ Confirm overwrite @@ -4028,6 +3639,12 @@ This may cause the affected plugins to malfunction. Confirm Overwrite Attachment ยืนยันการเขียนทับไฟล์แนบ + + Attachment "%1" already exists. +Would you like to overwrite the existing attachment? + มีเอกสารแนบ "%1" อยู่แล้ว +คุณต้องการเขียนทับไฟล์แนบที่มีอยู่หรือไม่ + Confirm Attachment ยืนยันแฟ้มแนบ @@ -4038,7 +3655,7 @@ Your database may get very large and reduce performance. Are you sure to add this file? %1 เป็นแฟ้มใหญ่ (%2 MB) -ฐานข้อมูลของคุณอาจโตขึ้นมากและอาจทำให้ประสิทธิภาพตกลง +ฐานข้อมูลของคุณอาจขนาดใหญ่มากและทำให้ประสิทธิภาพตกลง คุณแน่ใจหรือไม่ว่าจะเพิ่มแฟ้มนี้? @@ -4062,24 +3679,6 @@ Error: %1 การบันทึกเอกสารแนบที่อัปเดตล้มเหลว ข้อผิดพลาด: %1 - - Attachment "%1" already exists. -Would you like to overwrite the existing attachment? - มีเอกสารแนบ "%1" อยู่แล้ว -คุณต้องการเขียนทับไฟล์แนบที่มีอยู่หรือไม่ - - - New - - - - Preview - ดูตัวอย่าง - - - Failed to preview an attachment: Attachment not found - - EntryAttributesModel @@ -4260,11 +3859,11 @@ Would you like to overwrite the existing attachment? Attached files - แฟ้มแนบ + แฟ้มที่แนบมา Entry size - ขนาดรายการ + ขนาดของรายการ Has attachments @@ -4272,15 +3871,7 @@ Would you like to overwrite the existing attachment? Has TOTP - มีรหัสผ่านแบบใช้ครั้งเดียวตามเวลา - - - Background Color - - - - Group Path - + มี TOTP @@ -4302,8 +3893,8 @@ Would you like to overwrite the existing attachment? รหัสผ่าน - URL - URL + Notes + บันทึก Expiration @@ -4322,8 +3913,8 @@ Would you like to overwrite the existing attachment? ชื่อผู้ใช้ - Notes - บันทึก + URL + URL Advanced @@ -4373,10 +3964,6 @@ Would you like to overwrite the existing attachment? Never ไม่เลย - - Double click to copy value - ดับเบิลคลิกเพื่อคัดลอกค่า - Enabled เปิดใช้ @@ -4386,8 +3973,8 @@ Would you like to overwrite the existing attachment? ปิดใช้ - Double click to copy to clipboard - + Double click to copy value + ดับเบิลคลิกเพื่อคัดลอกค่า @@ -4396,10 +3983,6 @@ Would you like to overwrite the existing attachment? Invalid URL URL ผิดรูปแบบ - - Duplicate URL - - EntryView @@ -4415,10 +3998,6 @@ Would you like to overwrite the existing attachment? Reset to defaults เริ่มใหม่เป็นค่าเริ่มต้น - - + %1 entry(s)... - - ExportDialog @@ -4573,7 +4152,7 @@ This will leave your passwords and sensitive information vulnerable! [empty] group has no children - [ว่าง] + (ที่ว่าง) %1 - Clone @@ -4624,7 +4203,7 @@ You can enable the DuckDuckGo website icon service in the security section of th Ok - ตกลง + โอเค Already Exists @@ -4639,193 +4218,6 @@ You can enable the DuckDuckGo website icon service in the security section of th กำลังดาวน์โหลด favicons (%1/%2)… - - ImportWizard - - Import Wizard - - - - - ImportWizardPageReview - - WizardPage - วิซาร์ดเพจ - - - Entry count: %1 - - - - Group - กลุ่ม - - - Title - หัวข้อ - - - Username - ชื่อผู้ใช้ - - - Password - รหัสผ่าน - - - Url - URL - - - Could not load key file. - - - - Could not open remote database. Password or key file may be incorrect. - - - - - ImportWizardPageSelect - - Form - จาก - - - Import File Selection - - - - Password: - รหัสผ่าน - - - Key File: - แฟ้มกุญแจ: - - - Browse… - เลือกดู... - - - Import Into: - ส่งออกไปยัง: - - - New Database - ฐานข้อมูลใหม่ - - - No unlocked databases available - - - - Existing Database: - - - - Import File: - นำเข้าแฟ้ม: - - - Comma Separated Values (.csv) - - - - 1Password Export (.1pux) - - - - 1Password Vault (.opvault) - 1Password Vault (.opvault) - - - Bitwarden (.json) - Bitwarden (.json) - - - KeePass 1 Database (.kdb) - - - - Open OPVault - เปิด OPVault - - - Select import file - - - - All files - ทุกแฟ้ม - - - Key files - แฟ้มกุญแจ - - - Select key file - เลือกแฟ้มกุญแจ - - - Comma Separated Values - - - - 1Password Export - - - - Bitwarden JSON Export - - - - 1Password Vault - - - - KeePass1 Database - - - - Proton Pass (.json) - - - - Proton Pass JSON Export - - - - Temporary Database - - - - Command: - - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - - - - Input: - - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last commend `exit` has to be sent - - - - - Remote Database (.kdbx) - - - KMessageWidget @@ -4944,7 +4336,7 @@ If this reoccurs, then your database file may be corrupt. Legacy header fields found in KDBX4 file. - พบช่องข้อมูลส่วนหัวแบบเก่าในแฟ้ม KDBX4 + พบหัวฟิลด์แบบเก่าในแฟ้ม KDBX4 Invalid inner header id size @@ -5048,11 +4440,11 @@ If this reoccurs, then your database file may be corrupt. KdbxReader Invalid cipher uuid length: %1 (length=%2) - ความยาวรหัส cipher uuid ไม่ถูกต้อง: %1 (ความยาว=%2) + ความยาวรหัสตัวเลขไม่ถูกต้อง:% 1 (ความยาว =% 2) Unable to parse UUID: %1 - ไม่สามารถแยกวิเคราะห์ UUID: %1 + ไม่สามารถแยกวิเคราะห์ UUID :% 1 Unsupported cipher @@ -5092,7 +4484,7 @@ If this reoccurs, then your database file may be corrupt. Failed to read database file. - ไม่สามารถอ่านแฟ้มฐานข้อมูล + การอ่านแฟ้มฐานข้อมูลล้มเหลว The selected file is an old KeePass 1 database (.kdb). @@ -5117,7 +4509,7 @@ This is a one-way migration. You won't be able to open the imported databas KdbxXmlReader XML parsing failure: %1 - การแยกวิเคราะห์ XML ล้มเหลว: %1 + การแยกวิเคราะห์ XML ล้มเหลว : % 1 No root group @@ -5127,9 +4519,11 @@ This is a one-way migration. You won't be able to open the imported databas XML error: %1 Line %2, column %3 - XML ผิดพลาด: + XML ผิดพลาด %1 -บรรทัด %2 คอลัมน์ %3 +บรรทัด %2 +หลัก %3 + Missing icon uuid or data @@ -5260,6 +4654,17 @@ Line %2, column %3 ล้มเหลวระหว่างการเปิดกุญแจส่วนตัว + + KeePass1OpenWidget + + Import KeePass1 Database + นำเข้าฐานข้อมูล KeePass1 + + + Unable to open the database. + ไม่สามารถเปิดฐานข้อมูลดังกล่าว + + KeePass1Reader @@ -5430,7 +4835,7 @@ If this reoccurs, then your database file may be corrupt. Imported from %1 - นำเข้าจาก %1 + นำเข้า จาก 1% Exported to %1 @@ -5504,7 +4909,7 @@ If this reoccurs, then your database file may be corrupt. Browse for key file - เรียกดูแฟ้มกุญแจ + เลือกแฟ้มกุญแจ Browse… @@ -5521,8 +4926,8 @@ If this reoccurs, then your database file may be corrupt. Error loading the key file '%1' Message: %2 - มีปัญหาในการโหลดแฟ้มกุญแจ '%1' -ข้อความ: %2 + มีปัญหาในการโหลดแฟ้มกุญแจ %1 +ข้อความ %2 Key File @@ -5574,7 +4979,7 @@ Message: %2 Invalid Key File - แฟ้มกุญแจผิดรูปแบบ + แฟ้มกุญแจไม่ถูกต้อง You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. @@ -5616,6 +5021,10 @@ Are you sure you want to continue with this file? &Recent Databases &ฐานข้อมูลล่าสุด + + &Import + &นำเข้า + &Export &ส่งออก @@ -5636,10 +5045,6 @@ Are you sure you want to continue with this file? TOTP TOTP - - Tags - แท็ก - &Groups กลุ่ม (&G) @@ -5684,18 +5089,34 @@ Are you sure you want to continue with this file? &New Database… ฐานข้อมูลให&ม่... + + Create a new database + สร้างฐานข้อมูลใหม่ + &Merge From Database… &รวมจากฐานข้อมูล... + + Merge from another KDBX database + รวมฐานข้อมูลKDBXอีกชุด + &New Entry… รายการให&ม่... + + Add a new entry + เพิ่มรายการใหม่ + &Edit Entry… แ&ก้ไขรายการ... + + View or edit entry + ดู หรือ แก้ไขรายการ + &Delete Entry… &ลบรายการ... @@ -5704,6 +5125,10 @@ Are you sure you want to continue with this file? &New Group… กลุ่มให&ม่... + + Add a new group + เพิ่มกลุ่มใหม่ + &Edit Group… แ&ก้ไขกลุ่ม... @@ -5736,10 +5161,18 @@ Are you sure you want to continue with this file? Database &Reports… ฐานข้อมูลและรายงาน… + + Statistics, health check, etc. + สถิติ การตรวจสุขภาพ ฯลฯ + &Database Settings… &การตั้งค่าฐานข้อมูล + + Database settings + การตั้งค่าฐานข้อมูล + &Clone Entry… &คัดลอกรายการ… @@ -5748,18 +5181,34 @@ Are you sure you want to continue with this file? Move u&p ขยับ&ขึ้น + + Move entry one step up + ย้ายรายการขึ้นหนึ่งขั้นตอน + Move do&wn ขยับ&ลง + + Move entry one step down + ย้ายรายการลงหนึ่งขั้นตอน + Copy &Username คัดลอก&ชื่อผู้ใช้ + + Copy username to clipboard + คัดลอกชื่อผู้ใช้ไปคลิปบอร์ด + Copy &Password คัดลอก&รหัสผ่าน + + Copy password to clipboard + คัดลอกรหัสผ่านไปคลิปบอร์ด + &Settings การตั้งค่า (&S) @@ -5782,7 +5231,7 @@ Are you sure you want to continue with this file? &Lock Database - &ล็อคฐานข้อมูล + &ล็อกฐานข้อมูล Lock &All Databases @@ -5793,13 +5242,21 @@ Are you sure you want to continue with this file? หัวเรื่อง (&T) - Copy &URL - คัดลอก &URL + Copy title to clipboard + คัดลอกหัวข้อไปยังคลิปบอร์ด + + + Copy URL to clipboard + คัดลอก URL ไปยัง คลิปบอร์ด &Notes บันทึก (&N) + + Copy notes to clipboard + คัดลอกข้อมูลไปยังคลิปบอร์ด + &CSV File… แฟ้ม &CSV... @@ -5812,14 +5269,26 @@ Are you sure you want to continue with this file? KeePass 1 Database… ฐานข้อมูล KeePass 1... + + Import a KeePass 1 database + นำเข้า ฐานข้อมูล KeePass1... + 1Password Vault… 1 ห้องเก็บรหัสผ่าน… + + Import a 1Password Vault + นำเข้า Vault ของ 1Password + CSV File… แฟ้ม CSV... + + Import a CSV file + นำเข้า แฟ้ม CSV + Show TOTP แสดง TOTP @@ -5836,10 +5305,6 @@ Are you sure you want to continue with this file? Copy &TOTP คัดลอก &TOTP - - Copy Password and TOTP - คัดลอกรหัสผ่านและ TOTP - E&mpty recycle bin ล้างถังรีไซเคิล @@ -5864,6 +5329,10 @@ Are you sure you want to continue with this file? &Online Help ช่วยเหลือ&ออนไลน์ + + Go to online documentation + ไปที่เอกสารออนไลน์ + &User Guide &คู่มือผู้ใช้ @@ -5908,10 +5377,6 @@ Are you sure you want to continue with this file? Classic (Platform-native) คลาสสิก (แพลตฟอร์มเนทีฟ) - - Show Menubar - - Show Toolbar แสดงแถบเครื่องมือ @@ -5936,10 +5401,6 @@ Are you sure you want to continue with this file? Clone Group... โคลนกลุ่ม... - - &XML File… - แฟ้ม &XML… - Clear history ล้างประวัติ @@ -5967,8 +5428,10 @@ Expect some bugs and minor issues, this version is meant for testing purposes. - No Tags - ไม่มีแท็ก + 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 ที่มีอยู่ในหน้าดาวน์โหลดของเรา Restore Entry(s) @@ -5998,10 +5461,6 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Quit KeePassXC ออกจาก KeePassXC - - %1 Entry(s) - %1 รายการ - Please present or touch your YubiKey to continue… กรุณาแสดงหรือสัมผัส YubiKey ของคุณเพื่อดำเนินการต่อ… @@ -6014,314 +5473,38 @@ Expect some bugs and minor issues, this version is meant for testing purposes.You must restart the application to apply this setting. Would you like to restart now? คุณจะต้องเริ่มแอปใหม่เพื่อใช้การตั้งค่านี้ คุณต้องการจะเริ่มแอปใหม่ตอนนี้หรือไม่? + + Tags + แท็ก + + + No Tags + ไม่มีแท็ก + + + %1 Entry(s) + %1 รายการ + + + Copy Password and TOTP + คัดลอกรหัสผ่านและ TOTP + + + &XML File… + แฟ้ม &XML… + + + XML File… + แฟ้ม XML… + + + Copy &URL + คัดลอก &URL + Allow Screen Capture อนุญาตให้จับภาพหน้าจอ - - 1Password 1PUX... - - - - Import a 1Password 1PUX file - - - - Import… - นำเข้า... - - - Passkeys… - - - - Import Passkey - - - - Remote S&ync… - - - - Quit Application - - - - Open About Dialog - - - - Open Database - เปิดฐานข้อมูล - - - Create Database - สร้างฐานข้อมูล - - - Merge From Database - - - - Create Entry - - - - Edit Entry - แก้ไขรายการ - - - Delete Entry - - - - Create Group - - - - Edit Group - แก้ไขกลุ่ม - - - Delete Group - - - - Download All Favicons - - - - Sort Groups A-Z - - - - Sort Groups Z-A - - - - Save Database As - - - - Show Database Security - - - - Show Database Reports - - - - Show Database Settings - - - - Show Passkeys - - - - Clone Entry - - - - Move Entry Up - - - - Move Entry Down - - - - Copy Username - คัดลอก ชื่อผู้ใช้ - - - Copy Password - คัดลอก รหัสผ่าน - - - Show Application Settings - - - - Show Password Generator - - - - Remove Passkey From Entry - - - - Perform Auto-Type: {USERNAME} - - - - Perform Auto-Type: {USERNAME}{ENTER} - - - - Perform Auto-Type: {PASSWORD} - - - - Perform Auto-Type: {PASSWORD}{ENTER} - - - - Perform Auto-Type: {TOTP} - - - - Copy Title - - - - Copy URL - - - - Copy Notes - - - - Export to CSV - - - - Export to HTML - - - - Import KeePass1 Database - นำเข้าฐานข้อมูล KeePass1 - - - Import 1Password Vault - - - - Import CSV File - - - - Show TOTP QR Code - - - - Set up TOTP - - - - Empty Recycle Bin - - - - Open Donation Website - - - - Open Bug Report - - - - Open Online Documentation - - - - Open Keyboard Shortcuts Guide - - - - Save Database Backup - - - - SSH Agent: Add Key - - - - SSH Agent: Remove Key - - - - Toggle Compact Mode - - - - Set Theme: Automatic - - - - Set Theme: Light - - - - Set Theme: Dark - - - - Set Theme: Classic - - - - Toggle Show Menubar - - - - Toggle Show Toolbar - - - - Toggle Show Preview Panel - - - - Toggle Always on Top - - - - Toggle Hide Usernames - - - - Toggle Hide Passwords - - - - Export to XML - - - - Toggle Allow Screen Capture - - - - Show Group Panel - - - - Toggle Show Group Panel - - - - Setup Remote Sync… - - - - Password Generator - ตัวสร้างรหัสผ่าน - - - E&xpire Entry… - - - - Clear SSH Agent - - - - Clear all identities in ssh-agent - - ManageDatabase @@ -6373,19 +5556,39 @@ Expect some bugs and minor issues, this version is meant for testing purposes. Relocating %1 [%2] - กำลังย้าย %1 [%2] + ย้าย% 1 [% 2] Overwriting %1 [%2] - เขียนทับ %1 [%2] + เขียนทับ % 1 [% 2] + + + older entry merged from database "%1" + รวมข้อมูลที่เก่ากว่าเข้ากับฐานข้อมูล "% 1" + + + Adding backup for older target %1 [%2] + กำลังเพิ่มการสำรองข้อมูลสำหรับเป้าหมายที่เก่ากว่า% 1 [% 2] + + + Adding backup for older source %1 [%2] + กำลังเพิ่มการสำรองข้อมูลสำหรับแหล่งข้อมูลที่เก่ากว่า% 1 [% 2] + + + Reapplying older target entry on top of newer source %1 [%2] + การนำรายการแหล่งข้อมูลเก่ามาใช้ใหม่ที่ด้านบนของฐานข้อมูลใหม่กว่า% 1 [% 2] + + + Reapplying older source entry on top of newer target %1 [%2] + การนำรายการแหล่งข้อมูลเก่ามาใช้ใหม่ที่ด้านบนของเป้าหมายใหม่กว่า% 1 [% 2] Synchronizing from newer source %1 [%2] - เชื่อมประสานจากแหล่งข้อมูลใหม่ %1 [%2] + เชื่อมต่อจากฐานข้อมูลใหม่ %1 [%2] Synchronizing from older source %1 [%2] - เชื่อมประสานจากแหล่งข้อมูลเก่า %1 [%2] + เชื่อมต่อจากฐานข้อมูลเดิม %1 [%2] Deleting child %1 [%2] @@ -6401,7 +5604,7 @@ Expect some bugs and minor issues, this version is meant for testing purposes. Adding missing icon %1 - เพิ่มไอคอนที่ขาดหายไป %1 + เพิ่มไอคอนขาดหายไป % 1 Removed custom data %1 [%2] @@ -6438,6 +5641,14 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. ที่นี่คุณสามารถปรับการตั้งค่าการเข้ารหัสฐานข้อมูล ไม่ต้องกังวลคุณสามารถเปลี่ยนได้ในภายหลังในการตั้งค่า ฐานข้อมูล + + Advanced Settings + การตั้งค่าขั้นสูง + + + Simple Settings + การตั้งค่าพื้นฐาน + NewDatabaseWizardPageDatabaseKey @@ -6472,25 +5683,6 @@ Expect some bugs and minor issues, this version is meant for testing purposes.กรุณากรอกชื่อที่แสดง และคำอธิบายเพิ่มเติมสำหรับ ฐานข้อมูล ใหม่ของคุณ - - NewEntryAttachmentsDialog - - Attachment name cannot be empty - - - - Attachment with the same name already exists - - - - Save attachment - - - - New entry attachment - - - NixUtils @@ -6537,6 +5729,15 @@ Expect some bugs and minor issues, this version is meant for testing purposes.ต้องการ %1 ไบต์ของข้อความที่ชัดเจน พบ %2 + + OpVaultOpenWidget + + Read Database did not produce an instance +%1 + ฐานข้อมูลการอ่านไม่ได้สร้างอินสแตนซ์ +%1 + + OpVaultReader @@ -6584,7 +5785,7 @@ Expect some bugs and minor issues, this version is meant for testing purposes. Key file magic header id invalid - รหัสพิเศษ (magic header id) ที่หัวแฟ้มกุญแจไม่ถูกรูปแบบ + รหัสหัวแฟ้มกุญแจเมจิกไม่ตรงตามแบบ Found zero keys @@ -6610,10 +5811,6 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Unknown cipher: %1 การเข้ารหัสที่ไม่รู้จัก: %1 - - AES-256/GCM is currently not supported - ไม่รองรับ AES -256/GCM ในขณะนี้ - Passphrase is required to decrypt this key จำเป็นต้องใช้วลีรหัสผ่านเพื่อถอดรหัสผ่านกุญแจนี้ @@ -6679,179 +5876,8 @@ Expect some bugs and minor issues, this version is meant for testing purposes.เกิด EOF ที่ไม่คาดคิดขณะเขียนกุญแจส่วนตัว - (encrypted) - (เข้ารหัสลับอยู่) - - - - OpenSSHKeyGenDialog - - SSH Key Generator - - - - Type - ชนิด - - - Bits - - - - Comment - ข้อคิดเห็น - - - - PasskeyExportDialog - - KeePassXC - Passkey Export - - - - Filenames will be generated with title and .passkey file extension. - - - - Export entries - - - - Export Selected - - - - Cancel - ยกเลิก - - - Export to folder - - - - Export the following passkey entries. - - - - - PasskeyExporter - - KeePassXC: Passkey Export - - - - File "%1.passkey" already exists. -Do you want to overwrite it? - - - - - Cannot open file - - - - Cannot open file "%1" for writing. - - - - Cannot write to file - - - - - PasskeyImportDialog - - KeePassXC - Passkey Import - - - - Username: %1 - ชื่อผู้ใช้: %1 - - - Group - กลุ่ม - - - Database - ฐานข้อมูล - - - Import Passkey - - - - Import - นำเข้า - - - Cancel - ยกเลิก - - - Entry - รายการ - - - Create new entry - - - - Relying Party: %1 - - - - Import the following passkey: - - - - Import the following passkey to this entry: - - - - Default passkeys group (Imported Passkeys) - - - - - PasskeyImporter - - Passkey file - - - - All files - ทุกแฟ้ม - - - Cannot open file - - - - Cannot open file "%1" for reading. - - - - Open passkey file - - - - Cannot import passkey - - - - Cannot import passkey file "%1". Data is missing. - - - - Cannot import passkey file "%1". -The following data is missing: -%2 - - - - Cannot import passkey file "%1". Private key is missing or malformed. - + AES-256/GCM is currently not supported + ไม่รองรับ AES -256/GCM ในขณะนี้ @@ -7057,6 +6083,10 @@ The following data is missing: Word Count: จำนวนคำ: + + Character Count: + จำนวนตัวอักษร + Word Case: กรณีคำศัพท์: @@ -7069,6 +6099,10 @@ The following data is missing: Add custom wordlist เพิ่มรายการคําที่กําหนดเอง + + character + ตัวอักษร + Close ปิด @@ -7105,30 +6139,6 @@ The following data is missing: Entropy: %1 bit เอนโทรปี: %1 บิต - - Password Quality: %1 - คุณภาพรหัสผ่าน: %1 - - - Poor - Password quality - แย่ - - - Weak - Password quality - อ่อนแอ - - - Good - Password quality - ดี - - - Excellent - Password quality - ดีมาก - Confirm Delete Wordlist ยืนยันการลบรายการคำศัพท์ @@ -7176,20 +6186,32 @@ Do you want to overwrite it? อักขระพิเศษ - passwordLength - + Password Quality: %1 + คุณภาพรหัสผ่าน: %1 - Characters: %1 - ตัวอักขระ: %1 + Poor + Password quality + แย่ - MIXED case - + Weak + Password quality + อ่อนแอ - Excluded characters: "0", "1", "l", "I", "O", "|", "﹒", "B", "8", "G", "6" - + Good + Password quality + ดี + + + Excellent + Password quality + ดีมาก + + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + อักขระที่ยกเว้น: "0", "1", "l", "I", "O", "|", "﹒" @@ -7239,7 +6261,7 @@ Do you want to overwrite it? ดีมาก - Toggle password visibility using Control + H. Open the password generator using Control + G. + Toggle password visibilty using Control + H. Open the password generator using Control + G. @@ -7258,21 +6280,6 @@ Do you want to overwrite it? กด &Tab ระหว่างอักขระ - - PreviewEntryAttachmentsDialog - - Preview entry attachment - - - - No preview available - - - - Image format not supported - - - QMessageBox @@ -7311,10 +6318,6 @@ Do you want to overwrite it? Continue ทำต่อ - - Continue with weak password - - QObject @@ -7646,7 +6649,7 @@ Do you want to overwrite it? Entry with path %1 has no TOTP set up. - รายการด้วยเส้นทาง %1 ไม่มีการตั้งค่า TOTP + รายการที่มีเส้นทาง %1 ไม่มีการตั้งค่า TOTP ERROR: attribute %1 is ambiguous, it matches %2. @@ -7708,10 +6711,6 @@ Do you want to overwrite it? Too many arguments provided. มีอาร์กิวเมนต์มากเกินไป - - Path of the database. - เส้นทางของฐานข้อมูล - Target decryption time in MS for the database. เวลาถอดรหัสเป้าหมายใน MS สำหรับฐานข้อมูล @@ -7732,6 +6731,10 @@ Do you want to overwrite it? Create a new database. สร้างฐานข้อมูลใหม่ + + Path of the database. + เส้นทางของฐานข้อมูล + Invalid decryption time %1. เวลาถอดรหัสไม่ถูกต้อง %1 @@ -7770,164 +6773,12 @@ Do you want to overwrite it? Failed to save the database: %1. - การบันทึกฐานข้อมูลล้มเหลว: %1 + การบันทึกฐานข้อมูลล้มเหลว % 1 Successfully created new database. การสร้างฐานข้อมูลใหม่ประสบความสำเร็จ - - Unset the password for the database. - ยกเลิกการตั้งค่ารหัสผ่านสำหรับฐานข้อมูล - - - Unset the key file for the database. - ยกเลิกการตั้งค่าไฟล์คีย์สำหรับฐานข้อมูล - - - Edit a database. - แก้ไขฐานข้อมูล - - - Cannot use %1 and %2 at the same time. - ไม่สามารถใช้ %1 และ %2 ในเวลาเดียวกัน - - - Could not change the database key. - ไม่สามารถเปลี่ยนคีย์ฐานข้อมูล - - - Database was not modified. - ฐานข้อมูลไม่ถูกแก้ไข - - - Writing the database failed: %1 - การเขียนฐานข้อมูลล้มเหลว: %1 - - - Successfully edited the database. - แก้ไขฐานข้อมูลเรียบร้อยแล้ว - - - Cannot remove password: The database does not have a password. - ไม่สามารถลบรหัสผ่าน: ฐานข้อมูลไม่มีรหัสผ่าน - - - Cannot remove file key: The database does not have a file key. - ไม่สามารถลบคีย์ไฟล์: ฐานข้อมูลไม่มีคีย์ไฟล์ - - - Loading the new key file failed: %1 - การโหลดไฟล์คีย์ใหม่ล้มเหลว: %1 - - - Found unexpected Key type %1 - พบประเภทคีย์ที่ไม่คาดคิด %1 - - - Cannot remove all the keys from a database. - ไม่สามารถลบคีย์ทั้งหมดออกจากฐานข้อมูลได้ - - - Show a database's information. - แสดงฐานข้อมูลของรายการ - - - UUID: - UUID: - - - Name: - ชื่อ: - - - Description: - คำอธิบาย - - - Cipher: - Cipher: - - - KDF: - KDF: - - - Recycle bin is enabled. - เปิดใช้งานถังรีไซเคิลแล้ว - - - Recycle bin is not enabled. - ไม่ได้เปิดใช้งานถังรีไซเคิล - - - Location - ที่ตั้ง - - - Database created - ฐานข้อมูลได้รับการสร้าง - - - Last saved - บันทึกครั้งสุดท้าย - - - Unsaved changes - ความเปลี่ยนแปลงที่ยังไม่ได้บันทึก - - - yes - ใช่ - - - no - ไม่ - - - Number of groups - จำนวนกลุ่ม - - - Number of entries - จำนวนรายการ - - - Number of expired entries - จำนวนรายการที่หมดอายุ - - - Unique passwords - รหัสผ่านที่ไม่ซ้ำ - - - Non-unique passwords - รหัสผ่านที่ซ้ำ - - - Maximum password reuse - ใช้รหัสผ่านซ้ำได้สูงสุด - - - Number of short passwords - จำนวนรหัสผ่านขนาดสั้น - - - Number of weak passwords - จำนวนรหัสผ่านที่อ่อนแอ - - - Entries excluded from reports - รายการที่ไม่รวมอยู่ในรายงาน - - - Average password length - ความยาวของรหัสผ่านโดยสังเขป - - - %1 characters - %1 ตัวอักษร - Word count for the diceware passphrase. จำนวนคำสำหรับวลีรหัสผ่าน diceware @@ -7951,13 +6802,17 @@ Do you want to overwrite it? Invalid word count %1 จำนวนคำไม่ถูกรูปแบบ %1 + + The word list is too small (< 1000 items) + รายการคำศัพท์น้อยเกินไป (< 1,000 รายการ) + Title for the entry. - หัวเรื่องสำหรับรายการ + หัวข้อสำหรับรายการ title - หัวเรื่อง + หัวข้อ Edit an entry. @@ -7975,9 +6830,13 @@ Do you want to overwrite it? Enter new password for entry: ใส่รหัสผ่านใหม่สำหรับรายการ + + Writing the database failed: %1 + เขียนฐานข้อมูลล้มเหลว %1 + Successfully edited entry %1. - แก้ไขรายการ %1 สำเร็จ + แก้ไขรายการสำเร็จแล้ว %1 Perform advanced analysis on the password. @@ -8005,15 +6864,15 @@ Do you want to overwrite it? Multi-word extra bits %1 - บิตเพิ่มของ multi-word %1 + Multi-word บิตมากพิเศษ %1 Type: Bruteforce - ชนิด: ลองทุกความเป็นไปได้ + ชนิด บรู๊ทฟอร์ส Type: Dictionary - ชนิด: พจนานุกรม + ชนิด ไดเรคทอรี Type: Dict+Leet @@ -8021,11 +6880,11 @@ Do you want to overwrite it? Type: User Words - ชนิด: ชุดคำของผู้ใช้ + ชนิด: User Words Type: User+Leet - ชนิด: ผู้ใช้+ลีท + ชนิด: ผู้ใช้+ ลีท Type: Repeated @@ -8045,39 +6904,39 @@ Do you want to overwrite it? Type: Bruteforce(Rep) - ชนิด: Bruteforce(Rep) + ชนิด: บรู๊ทฟอร์ส(Rep) Type: Dictionary(Rep) - ชนิด: Dictionary(Rep) + พิมพ์: Dictionary(Rep) Type: Dict+Leet(Rep) - ชนิด: Dict+Leet(Rep) + พิมพ์: Dict+Leet(Rep) Type: User Words(Rep) - ชนิด: User Words(Rep) + พิมพ์: User Words(Rep) Type: User+Leet(Rep) - ชนิด: User+Leet(Rep) + พิมพ์: User+Leet(Rep) Type: Repeated(Rep) - ชนิด: Repeated(Rep) + พิมพ์: Repeated(Rep) Type: Sequence(Rep) - ชนิด: Sequence(Rep) + พิมพ์: Sequence(Rep) Type: Spatial(Rep) - ชนิด: Spatial(Rep) + พิมพ์: Spatial(Rep) Type: Date(Rep) - ชนิด: Date(Rep) + พิมพ์: Date(Rep) Type: Unknown (%1) @@ -8089,19 +6948,23 @@ Do you want to overwrite it? *** Password length (%1) != sum of length of parts (%2) *** - *** ความยาวรหัสผ่าน (%1) != ผลรวมของความยาวแต่ละส่วน (%2) *** + ***รหัสผ่านความยาว (%1) != sum of length of parts (%2) *** Exit interactive mode. ออกจากโหมดโต้ตอบ + + Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. + รูปแบบที่จะใช้เมื่อส่งออก ตัวเลือกที่ใช้ได้คือ 'xml' หรือ 'csv' ค่าเริ่มต้นคือ 'xml' + Exports the content of a database to standard output in the specified format. ส่งออกเนื้อหาของฐานข้อมูลไปยังเอาต์พุตมาตรฐานในรูปแบบที่ระบุ Unable to export database to XML: %1 - ไม่สามารถส่งออกฐานข้อมูลเป็น XML: %1 + ไม่สามารถส่องออกฐานข้อมูลเป็น XML: %1 Unsupported format %1 @@ -8195,6 +7058,106 @@ Do you want to overwrite it? Successfully imported database. การสร้างฐานข้อมูลใหม่ประสบความสำเร็จ + + Show a database's information. + แสดงฐานข้อมูลของรายการ + + + UUID: + UUID: + + + Name: + ชื่อ: + + + Description: + คำอธิบาย: + + + Cipher: + Cipher: + + + KDF: + KDF: + + + Recycle bin is enabled. + เปิดใช้งานถังรีไซเคิลแล้ว + + + Recycle bin is not enabled. + ไม่ได้เปิดใช้งานถังรีไซเคิล + + + Location + ที่ตั้ง + + + Database created + ฐานข้อมูลได้รับการสร้างเป็นที่เรียบร้อย + + + Last saved + บันทึกครั้งสุดท้าย + + + Unsaved changes + ความเปลี่ยนแปลงที่ยังไม่ได้บันทึก + + + yes + ใช่ + + + no + ไม่ + + + Number of groups + จำนวนกลุ่ม + + + Number of entries + จำนวนรายการ + + + Number of expired entries + จำนวนรายการที่หมดอายุ + + + Unique passwords + รหัสผ่านที่ไม่ซ้ำ + + + Non-unique passwords + รหัสผ่านที่ซ้ำ + + + Maximum password reuse + ใช้รหัสผ่านซ้ำได้สูงสุด + + + Number of short passwords + จำนวนรหัสผ่านขนาดสั้น + + + Number of weak passwords + จำนวนรหัสผ่านที่อ่อนแอ + + + Entries excluded from reports + รายการที่ไม่รวมอยู่ในรายงาน + + + Average password length + ความยาวของรหัสผ่านโดยสังเขป + + + %1 characters + %1 ตัวอักษร + Unknown command %1 คำสั่งที่ไม่รู้จัก %1 @@ -8239,15 +7202,15 @@ Available commands: Cannot find group %1. - ไม่พบกลุ่ม %1 + ไม่สามารถหากลุ่ม %1 Use the same credentials for both database files. - ใช้ข้อมูลยืนยันตัวชุดเดียวกันสำหรับทั้งสองแฟ้มฐานข้อมูล + ใช้ข้อมูลประจำตัวชุดเดียวกันเพื่อเข้าระบบสำหรับแฟ้มฐานข้อมูลทั้งคู่ Key file of the database to merge from. - แฟ้มกุญแจของฐานข้อมูลที่จะมาผสาน + แฟ้มกุญแจของฐานข้อมูลที่จะนำมาผสาน Deactivate password key for the database to merge from. @@ -8276,7 +7239,7 @@ Available commands: Error reading merge file: %1 - การอ่านแฟ้มผสานล้มเหลว: + การอ่านแฟ้มที่จะผสานล้มเหลว: %1 @@ -8329,11 +7292,11 @@ Available commands: Successfully recycled entry %1. - นำรายการ %1 กลับมาสำเร็จ + รายการรีไซเคิลสำเร็จ %1 Successfully deleted entry %1. - ลบรายการ %1 สำเร็จ + ลบรายการสำเร็จ %1 Path of the group to remove. @@ -8367,10 +7330,6 @@ Available commands: Show the protected attributes in clear text. แสดงแอตทริบิวต์ที่ได้รับการป้องกันในข้อความธรรมดา - - Show all the attributes of the entry. - แสดงคุณสมบัติทั้งหมดของรายการ - Show the attachments of the entry. แสดงเอกสารแนบของรายการ @@ -8421,7 +7380,7 @@ Available commands: Failed to load key file %1: %2 - การโหลดแฟ้มกุญแจ %1 ล้มเหลว: %2 + การโหลดแฟ้มกุญแจล้มเหลว %1: %2 WARNING: You are using an old key file format which KeePassXC may @@ -8441,10 +7400,6 @@ Please consider generating a new key file. Invalid YubiKey serial %1 เลขชุด YubiKey ไม่ถูกรูปแบบ %1 - - Please present or touch your YubiKey to continue. - กรุณาแสดงหรือสัมผัส YubiKey ของคุณเพื่อดำเนินการต่อ - Enter password to encrypt database (optional): ป้อนรหัสผ่านเพื่อเข้ารหัสฐานข้อมูล (ไม่บังคับ): @@ -8477,7 +7432,7 @@ Please consider generating a new key file. Loading KeyFile %1 failed: %2 - การโหลดแฟ้มกุญแจ %1 ล้มเหลว: %2 + การโหลดแฟ้มกุญแจ % 1 ล้มเหลว:% 2 HIBP file, line %1: parse error @@ -8541,7 +7496,7 @@ Please consider generating a new key file. Password will expire soon - รหัสผ่านกำลังจะหมดอายุเร็วๆ นี้ + รหัสผ่านกำลังจะหมดอายุเร็วๆนี้ Version %1 @@ -8549,7 +7504,7 @@ Please consider generating a new key file. Build Type: %1 - ชนิด build: %1 + ชนิดรุ่นที่สร้าง: %1 Revision: %1 @@ -8557,7 +7512,7 @@ Please consider generating a new key file. Distribution: %1 - ดิสทริบิวชัน: %1 + การจัดจำหน่าย: %1 Debugging mode is disabled. @@ -8681,7 +7636,19 @@ Kernel: %3 %4 file empty - แฟ้มว่างเปล่า + แฟ้มว่าง + + + malformed string + รูปแบบสตริงไม่ถูกต้อง + + + missing closing quote + เครื่องหมายปิดคำพูดหายไป + + + %1: (row, col) %2,%3 + %1: (row, col) %2,%3 AES 256-bit @@ -8713,11 +7680,11 @@ Kernel: %3 %4 Existing single-instance lock file is invalid. Launching new instance. - แฟ้มล็อกไม่ให้เริ่มโปรแกรมหลายตัวที่มีอยู่ไม่ถูกต้อง เริ่มการทำงานตัวใหม่ + แฟ้ม single-instance lock ที่มีอยู่ไม่ถูกต้อง เปิด instance ใหม่ The lock file could not be created. Single-instance mode disabled. - ไม่สามารถสร้างแฟ้มล็อกได้ โหมดการใช้งานโปรแกรมเพียงตัวเดียวถูกปิดอยู่ + ไม่สามารถสร้าง lock file ได้ โหมด Single-instance ถูกปิดใช้งาน Clearing the clipboard in %1 second(s)… @@ -8729,7 +7696,7 @@ Kernel: %3 %4 Title - หัวเรื่อง + หัวข้อ Username @@ -8791,7 +7758,7 @@ Kernel: %3 %4 Move entry(s) to recycle bin? - + ย้ายรายการไปยังถังขยะ Replace references to entry? @@ -8843,7 +7810,7 @@ Kernel: %3 %4 path to a custom config file - เส้นทางไปยังแฟ้มบันทึกการปรับแต่งที่กำหนดเอง + เส้นทางไปยังแฟ้มปรับแต่งที่กำหนดเอง path to a custom local config file @@ -8851,7 +7818,7 @@ Kernel: %3 %4 lock all open databases - ล็อคฐานข้อมูลเปิดทั้งหมด + ล็อกฐานข้อมูลที่เปิดอยู่ทั้งหมด key file of the database @@ -8861,17 +7828,21 @@ Kernel: %3 %4 read password of the database from stdin อ่านรหัสผ่านของฐานข้อมูลจาก stdin + + allow app screen recordering and screenshots + อนุญาตการบันทึกหน้าจอแอปและภาพหน้าจอ + + + Locked databases. + ฐานข้อมูลที่ถูกล็อก + Database failed to lock. - การล็อคฐานข้อมูลไม่สำเร็จ + ล็อกฐานข้อมูลไม่สำเร็จ Another instance of KeePassXC is already running. - แอป KeePassXC อีกตัวกำลังทำงานอยู่ - - - KeePassXC is not running. No open database to lock - KeePassXC ไม่ทำงาน ไม่มีฐานข้อมูลแบบเปิดให้ล็อก + อีกอินสแตนซ์ของ KeePassXC กำลังทำงานอยู่ Fatal error while testing the cryptographic functions. @@ -8916,299 +7887,70 @@ Kernel: %3 %4 KDF ไม่ถูกต้อง - Access to all entries is denied - + Please present or touch your YubiKey to continue. + กรุณาแสดงหรือสัมผัส YubiKey ของคุณเพื่อดำเนินการต่อ - allow screenshots and app recording (Windows/macOS) - + Show all the attributes of the entry. + แสดงคุณสมบัติทั้งหมดของรายการ + + + Edit a database. + แก้ไขฐานข้อมูล + + + Could not change the database key. + ไม่สามารถเปลี่ยนคีย์ฐานข้อมูล + + + Database was not modified. + ฐานข้อมูลไม่ถูกแก้ไข + + + Successfully edited the database. + แก้ไขฐานข้อมูลเรียบร้อยแล้ว + + + Loading the new key file failed: %1 + การโหลดไฟล์คีย์ใหม่ล้มเหลว: %1 + + + Unset the password for the database. + ยกเลิกการตั้งค่ารหัสผ่านสำหรับฐานข้อมูล + + + Unset the key file for the database. + ยกเลิกการตั้งค่าไฟล์คีย์สำหรับฐานข้อมูล + + + Cannot use %1 and %2 at the same time. + ไม่สามารถใช้ %1 และ %2 ในเวลาเดียวกัน + + + Cannot remove all the keys from a database. + ไม่สามารถลบคีย์ทั้งหมดออกจากฐานข้อมูลได้ + + + Cannot remove password: The database does not have a password. + ไม่สามารถลบรหัสผ่าน: ฐานข้อมูลไม่มีรหัสผ่าน + + + Cannot remove file key: The database does not have a file key. + ไม่สามารถลบคีย์ไฟล์: ฐานข้อมูลไม่มีคีย์ไฟล์ + + + Found unexpected Key type %1 + พบประเภทคีย์ที่ไม่คาดคิด %1 Set the key file for the database. -This option is deprecated, use --set-key-file instead. - +This options is deprecated, use --set-key-file instead. + ตั้งค่าไฟล์คีย์สำหรับฐานข้อมูล +ตัวเลือกนี้ถูกเลิกใช้งานแล้ว ใช้ --set-key-file แทน - Databases have been locked. - - - - Attestation not supported - - - - Credential is excluded - - - - Passkeys request canceled - - - - Invalid user verification - - - - Empty public key - - - - Invalid URL provided - - - - Passkeys - - - - AES initialization failed - - - - AES encrypt failed - - - - Failed to store in Linux Keyring - - - - Polkit returned an error: %1 - - - - Could not locate key in keyring - - - - Could not read key in keyring - - - - AES decrypt failed - - - - No Polkit authentication agent was available - - - - Polkit authorization failed - - - - No Quick Unlock provider is available - - - - Failed to init KeePassXC crypto. - ไม่สามารถเริ่มต้นการเข้ารหัสใน KeePassXC - - - Failed to encrypt key data. - เข้ารหัสกุญแจข้อมูลไม่สำเร็จ - - - Failed to get Windows Hello credential. - ไม่สามารถรับข้อมูลประจำตัวของบริการ Windows Hello - - - Failed to decrypt key data. - ถอดรหัสกุญแจข้อมูลไม่สำเร็จ - - - Origin is empty or not allowed - - - - Effective domain is not a valid domain - - - - Origin and RP ID do not match - - - - No supported algorithms were provided - - - - Wait for timer to expire - - - - Challenge is shorter than required minimum length - - - - user.id does not match the required length - - - - Favorite - Tag for favorite entries - - - - File does not exist. - ไม่มีแฟ้ม - - - Cannot open file: %1 - เปิดแฟ้มไม่ได้: %1 - - - Cannot parse file: %1 at position %2 - - - - Failed to decrypt json file: %1 - - - - Invalid encKeyValidation field - - - - Invalid cipher list within encKeyValidation field - - - - Wrong password - รหัสผ่านผิด - - - Invalid encrypted data field - - - - Invalid cipher list within encrypted data field - - - - Cannot initialize cipher - - - - Cannot decrypt data - - - - Bitwarden Import - - - - Archived - Tag for archived entries - - - - Invalid 1PUX file format: Not a valid ZIP file. - - - - Invalid 1PUX file format: Missing export.data - - - - 1Password Import - - - - Enter Shortcut - - - - Action - - - - Shortcuts - - - - Unknown passkeys error - - - - Invalid KDF iterations, cannot decrypt json file - - - - Unsupported format, ensure your Bitwarden export is password-protected - - - - Only PBKDF and Argon2 are supported, cannot decrypt json file - - - - Reset Shortcuts - - - - Double click an action to change its shortcut - - - - Filter... - - - - Shortcut Conflict - - - - Shortcut %1 conflicts with '%2'. Overwrite shortcut? - - - - Cannot generate valid passphrases because the wordlist is too short - - - - Encrypted files are not supported. - - - - Proton Pass Import - - - - Delete plugin data? - ลบข้อมูลโปรแกรมเสริมหรือไม่ - - - Delete plugin data from Entry(s)? - - - - Passkey - - - - Format to use when exporting. Available choices are 'xml', 'csv' or 'html'. Defaults to 'xml'. - - - - start minimized to the system tray - - - - malformed string, possible unescaped delimiter - - - - missing closing delimiter - - - - %1, row: %2, column: %3 - - - - Tags - แท็ก + KeePassXC is not running. No open database to lock + KeePassXC ไม่ทำงาน ไม่มีฐานข้อมูลแบบเปิดให้ล็อก @@ -9245,46 +7987,27 @@ This option is deprecated, use --set-key-file instead. ความผิดพลาดภายในของ zlib - - RemoteHandler - - Command `%1` did not finish in time. Process was killed. - - - - Failed to upload merged database. Command `%1` did not finish in time. Process was killed. - - - - Invalid download parameters provided. - - - - Command `%1` failed to download database. - - - - Invalid database pointer or upload parameters provided. - - - - Command `%1` exited with status code: %2 - - - - Failed to upload merged database. Command `%1` exited with status code: %2 - - - ReportsWidgetBrowserStatistics + + Exclude expired entries from the report + ซ่อนรายการที่หมดอายุแล้วจากรายงาน + + + Show only entries which have URL set + แสดงรายการที่มีที่อยู่เว็ปเท่านั้น + + + Show only entries which have browser settings in custom data + แสดงเฉพาะรายการที่มีการตั้งค่าเบราว์เซอร์ในข้อมูลที่กำหนดเอง + Double-click entries to edit. คลิก 2 ครั้ง ที่รายการเพื่อแก้ไข List of entry URLs - ที่อยู่เว็ปของการนำข้อมูลเข้าสู่ระบบ + ที่อยู่เว็ปของรายการ Entry has no URLs set @@ -9332,63 +8055,54 @@ This option is deprecated, use --set-key-file instead. Edit Entry… - แก้ไขการนำข้อมูลเข้าสู่ระบบ + แก้ไขรายการ Delete Entry(s)… - ลบรายการหรือไม่? + ลบรายการ... Exclude from reports ไม่นับรวมในรายงาน - - Expire Entry(s)… - - - - Only show entries that have a URL - - - - Only show entries that have been explicitly allowed or denied - - - - Show expired entries - แสดงรายการที่หมดอายุ - - - (Expired) - (หมดอายุ) - - - Delete plugin data from Entry(s)… - - ReportsWidgetHealthcheck - Show expired entries - แสดงรายการที่หมดอายุ + Exclude expired entries from the report + ซ่อนรายการที่หมดอายุแล้วจากรายงาน - (Expired) - (หมดอายุ) + Also show entries that have been excluded from reports + แสดงรายการที่ถูกกันออกไปจากรายงาน Hover over reason to show additional details. Double-click entries to edit. วางเมาส์เหนือเหตุผลเพื่อแสดงรายละเอียดเพิ่มเติม ดับเบิลคลิกที่รายการเพื่อแก้ไข + + Bad + Password quality + แย่ + Bad — password must be changed - เลวร้าย — ต้องเปลี่ยนรหัสผ่าน + แย่ — ต้องเปลี่ยนรหัสผ่าน + + + Poor + Password quality + แย่ Poor — password should be changed แย่ — ควรเปลี่ยนรหัสผ่าน + + Weak + Password quality + อ่อนแอ + Weak — consider changing the password อ่อนแอ — ควรพิจารณารหัสผ่านใหม่ @@ -9411,7 +8125,7 @@ This option is deprecated, use --set-key-file instead. Title - หัวเรื่อง + หัวข้อ Path @@ -9427,24 +8141,16 @@ This option is deprecated, use --set-key-file instead. Edit Entry… - แก้ไขการนำข้อมูลเข้าสู่ระบบ + แก้ไขรายการ Delete Entry(s)… - ลบรายการหรือไม่? + ลบรายการ... Exclude from reports ไม่นับรวมในรายงาน - - Expire Entry(s)… - - - - Show entries that have been excluded from reports - - ReportsWidgetHibp @@ -9470,7 +8176,7 @@ This option is deprecated, use --set-key-file instead. Title - หัวเรื่อง + หัวข้อ Path @@ -9526,54 +8232,7 @@ This option is deprecated, use --set-key-file instead. millions of times Password exposure amount - ได้หลายล้านเท่า - - - Edit Entry… - แก้ไขการนำข้อมูลเข้าสู่ระบบ - - - Delete Entry(s)… - ลบรายการหรือไม่? - - - Exclude from reports - ไม่นับรวมในรายงาน - - - Expire Entry(s)… - - - - - ReportsWidgetPasskeys - - Export - ส่งออก - - - Import - นำเข้า - - - List of entry URLs - ที่อยู่เว็ปของรายการ - - - Title - หัวข้อ - - - Path - เส้นทาง - - - Username - ชื่อผู้ใช้ - - - URLs - ที่อยู่เว็ป + ได้หลายล้านครั้ง Edit Entry… @@ -9584,32 +8243,8 @@ This option is deprecated, use --set-key-file instead. ลบรายการ... - Relying Party - - - - Show expired entries - แสดงรายการที่หมดอายุ - - - (Expired) - (หมดอายุ) - - - Export Confirmation - ยืนยันการส่งออก - - - The passkey file will be vulnerable to theft and unauthorized use, if left unsecured. Are you sure you want to continue? - - - - Please wait, list of entries with passkeys is being updated… - - - - No entries with passkeys. - + Exclude from reports + ไม่นับรวมในรายงาน @@ -9785,14 +8420,6 @@ This option is deprecated, use --set-key-file instead. No agent running, cannot list identities. ไม่มีตัวแทนทำงาน ไม่สามารถระบุตัวตนได้ - - Failed to remove all SSH identities from agent. - - - - All SSH identities removed from agent. - - SearchHelpWidget @@ -9859,10 +8486,6 @@ This option is deprecated, use --set-key-file instead. Search Help ตัวช่วยค้นหา - - Save Search - บันทึกการค้นหา - Search (%1)… Search placeholder text, %1 is the keyboard shortcut @@ -9876,6 +8499,10 @@ This option is deprecated, use --set-key-file instead. Limit search to selected group จำกัดการค้นไว้สำหรับเฉพาะกลุ่มที่เลือก + + Save Search + บันทึกการค้นหา + SettingsClientModel @@ -9937,10 +8564,35 @@ This option is deprecated, use --set-key-file instead. Confirm when passwords are retrieved by clients ยืนยันเมื่อลูกค้านำรหัสผ่านกลับมาได้สำเร็จ + + <html><head/><body><p><span style=" + font-family:'-apple-system','BlinkMacSystemFont','Segoe UI','Helvetica','Arial','sans-serif','Apple Color + Emoji','Segoe UI Emoji'; font-size:14px; color:#24292e; background-color:#ffffff;">This setting does + not override disabling recycle bin prompts</span></p></body></html> + + <html> <head/> <body> <p> <span style=" + font-family:'-apple-system','BlinkMacSystemFont','Segoe UI','Helvetica','Arial','sans-serif','สีแอปเปิล + อีโมจิ','Segoe UI Emoji'; ขนาดตัวอักษร:14px; สี:#24292e; สีพื้นหลัง:#ffffff;"> การตั้งค่านี้จะไม่ + แทนที่การปิดใช้งานถังรีไซเคิลพร้อมท์ </span> </p> </body> </html> + + Confirm when clients request entry deletion ยืนยันเมื่อลูกค้าร้องขอการลบรายการ + + <html><head/><body><p>This improves compatibility with certain applications + which search for password without unlocking the database first.</p><p>But enabling this may also + crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a + different value set in applications.)</p></body></html> + + <html> <head/> <body> <p> ซึ่งนี่อาจช่วยเพิ่มความเข้ากันได้กับแอปพลิเคชันบางอย่าง + ซึ่งสามารถค้นหารหัสผ่านได้โดยไม่ต้องปลดล็อคฐานข้อมูลก่อน</p> +<p> แต่การเปิดใช้งานนี้อาจ + ทำให้ไคลเอ็นต์ล้มเหลว หากไม่สามารถปลดล็อกฐานข้อมูลได้ภายในเวลาที่กำหนด (ปกติอยู่ที่ 25 วินาที แต่อาจจะมี + ค่าที่แตกต่างกันที่ตั้งไว้ในแอปพลิเคชัน)</p></body></html> + + Prompt to unlock database before searching แจ้งให้ปลดล็อกฐานข้อมูลก่อนค้นหา @@ -9965,14 +8617,6 @@ This option is deprecated, use --set-key-file instead. Save current changes to activate the plugin and enable editing of this section. บันทึกการเปลี่ยนแปลงปัจจุบันเพื่อเปิดใช้งานปลั๊กอิน และเปิดใช้งานการแก้ไขส่วนนี้ - - <html><head/><body><p>This setting does not override disabling recycle bin prompts </p></body></html> - - - - <html><head/><body><p>This improves compatibility with certain applications which search for password without unlocking the database first.</p><p>But enabling this may also crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a different value set in applications.) </p></body></html> - - SettingsWidgetKeeShare @@ -9986,7 +8630,7 @@ This option is deprecated, use --set-key-file instead. Allow import - อนุญาตให้นำเข้า + อนุญาติให้นำเข้า Allow KeeShare exports @@ -10018,7 +8662,7 @@ This option is deprecated, use --set-key-file instead. Fingerprint: - ลายนิ้วมือ: + ลายนิ้วมือ Signer name field @@ -10047,15 +8691,15 @@ This option is deprecated, use --set-key-file instead. ShareObserver Import from %1 failed (%2) - นำเข้าจาก %1 ล้มเหลว (%2) + นำเข้า 1% ล้มเหลว 2% Import from %1 successful (%2) - นำเข้าจาก %1 สำเร็จ (%2) + นำเข้าจาก 1% สำเร็จ 2% Imported from %1 - นำเข้าจาก %1 + นำเข้า จาก 1% Multiple import source path to %1 in %2 @@ -10080,14 +8724,6 @@ This option is deprecated, use --set-key-file instead. TagModel - - Clear Search - ล้างการค้นหา - - - All Entries - รายการทั้งหมด - Expired หมดอายุแล้ว @@ -10096,6 +8732,14 @@ This option is deprecated, use --set-key-file instead. Weak Passwords รหัสผ่านอ่อนแอ + + All Entries + รายการทั้งหมด + + + Clear Search + ล้างการค้นหา + TagView @@ -10171,7 +8815,7 @@ This option is deprecated, use --set-key-file instead. Default settings (RFC 6238) - การตั้งค่าเริ่มต้น + การตั้งค่าเริ่มต้น (RFC 6238) Steam® settings @@ -10273,6 +8917,26 @@ Example: JBSWY3DPEHPK3PXP Start storing your passwords securely in a KeePassXC database เริ่มเก็บรหัสผ่านของคุณให้ปลอดภัยในฐานข้อมูลของ KeePassXC + + Create new database + สร้างฐานข้อมูลใหม่ + + + Open existing database + เปิดฐานข้อมูลที่มีอยู่ + + + Import from KeePass 1 + นำเข้าจาก KeePass 1 + + + Import from 1Password + นำเข้าจาก 1Password + + + Import from CSV + นำเข้าจาก CSV + Recent databases ฐานข้อมูลที่เพิ่งใช้ @@ -10285,18 +8949,6 @@ Example: JBSWY3DPEHPK3PXP Welcome to KeePassXC %1 ยินดีต้อนรับสู่ KeePassXC %1 - - Create Database - สร้างฐานข้อมูล - - - Open Database - เปิดฐานข้อมูล - - - Import File - นำเข้าแฟ้ม - WinUtils @@ -10313,8 +8965,31 @@ Example: JBSWY3DPEHPK3PXP ไม่สามารถลงทะเบียนทางลัดของส่วนกลาง + + WindowsHello + + Failed to init KeePassXC crypto. + ไม่สามารถเริ่มต้นการเข้ารหัสใน KeePassXC + + + Failed to encrypt key data. + เข้ารหัสกุญแจข้อมูลไม่สำเร็จ + + + Failed to get Windows Hello credential. + ไม่สามารถรับข้อมูลประจำตัวของบริการ Windows Hello + + + Failed to decrypt key data. + ถอดรหัสกุญแจข้อมูลไม่สำเร็จ + + YubiKey + + %1 No interface, slot %2 + %1 ไม่มีช่องของส่วนติดต่อ %2 + General: ทั่วไป: @@ -10326,6 +9001,14 @@ Example: JBSWY3DPEHPK3PXP YubiKeyEditWidget + + Refresh hardware tokens + รีเฟรชฮาร์ดแวร์โทเค็น + + + Refresh + เรียกใหม่ + Hardware key slot selection การเลือกช่องคีย์ฮาร์ดแวร์ @@ -10358,6 +9041,10 @@ Example: JBSWY3DPEHPK3PXP Challenge-Response set, click to change or remove รหัสสอบถาม-รหัสตอบกลับ ได้ตั้งค่า คลิกเพื่อเปลี่ยนหรือลบ + + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + หากคุณเป็นเจ้าของ YubiKey หรือ OnlyKey คุณสามารถใช้มันเพื่อรักษาความปลอดภัยเพิ่มเติมได้ คีย์นี้ต้องใช้สล็อตใดช่องหนึ่งเพื่อตั้งโปรแกรมเป็น HMAC-SHA1 เช่นรหัสสอบถาม-รหัสตอบกลับ + Detecting hardware keys… กำลังตรวจหากุญแจฮาร์ดแวร์... @@ -10366,32 +9053,35 @@ Example: JBSWY3DPEHPK3PXP No hardware keys detected ตรวจไม่พบกุญแจฮาร์ดแวร์ + + + YubiKeyInterface - Refresh hardware keys - - - - <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed with <a href="https://keepassxc.org/docs/#faq-yubikey-howto">Challenge-Response</a>.</p> - - - - Hardware keys found, but no slots are configured - + %1 Invalid slot specified - %2 + %1 ช่องที่ไม่ถูกรูปแบบถูกระบุมา - %2 YubiKeyInterfacePCSC + + (PCSC) %1 [%2] Challenge-Response - Slot %3 + (PCSC) %1 [%2] รหัสสอบถาม-รหัสตอบกลับของช่องใส่ %3 + The YubiKey PCSC interface has not been initialized. ส่วนติดต่อของ YubiKey PCSC ยังไม่ได้เริ่มต้น + + Hardware key is currently in use. + ใช้กุญแจฮาร์ดแวร์อยู่ + Could not find or access hardware key with serial number %1. Please present it to continue. ไม่พบหรือเข้าถึงรหัสฮาร์ดแวร์ที่มีหมายเลขซีเรียล %1 โปรดแสดงมันเพื่อดำเนินการต่อ Hardware key is locked or timed out. Unlock or re-present it to continue. - กุญแจฮาร์ดแวร์ถูกล็อคหรือหมดเวลา กรุณาปลดล็อกหรือดำเนินการใหม่เพื่อดำเนินการต่อ + กุญแจฮาร์ดแวร์ถูกล็อกหรือหมดเวลา กรุณาปลดล็อกหรือแสดงใหม่เพื่อทำต่อ Hardware key was not found or is not configured. @@ -10401,21 +9091,6 @@ Example: JBSWY3DPEHPK3PXP Failed to complete a challenge-response, the PCSC error code was: %1 ดำเนินการไม่สำเร็จ รหัสสอบถาม-รหัสตอบกลับ, ข้อผิดพลาดของ PCSC: %1 - - (NFC) %1 [%2] - Slot %3, %4 - YubiKey display fields - - - - Press - USB Challenge-Response Key interaction request - กด - - - Passive - USB Challenge-Response Key no interaction required - แพสซีฟ - YubiKeyInterfaceUSB @@ -10423,6 +9098,14 @@ Example: JBSWY3DPEHPK3PXP Unknown ไม่รู้จัก + + (USB) %1 [%2] Configured Slot - %3 + (USB) %1 [%2] Slot mujdeหนดค่า %3 + + + (USB) %1 [%2] Challenge-Response - Slot %3 - %4 + (USB) %1 [%2]ร หัสสอบถาม-รหัสตอบกลับ - Slot %3 - %4 + Press USB Challenge-Response Key interaction request @@ -10437,6 +9120,10 @@ Example: JBSWY3DPEHPK3PXP The YubiKey USB interface has not been initialized. ส่วนติดต่อของ USB YubiKey ยังไม่ได้เริ่มต้น + + Hardware key is currently in use. + ใช้กุญแจฮาร์ดแวร์อยู่ + Could not find hardware key with serial number %1. Please plug it in to continue. ไม่สามารถค้นหา กุญแจฮาร์ดแวร์ ด้วยหมายเลขซีเรียลที่มี %1 กรุณาเสียบปลั๊กเพื่อดำเนินการต่อ @@ -10453,15 +9140,5 @@ Example: JBSWY3DPEHPK3PXP Failed to complete a challenge-response, the specific error was: %1 ข้อผิดพลาด รหัสสอบถาม-รหัสตอบกลับ ข้อผิดพลาดเฉพาะที่: 1 % - - %1 [%2] - Slot %3 - YubiKey NEO display fields - - - - %1 [%2] - Slot %3, %4 - YubiKey display fields - - \ No newline at end of file diff --git a/share/translations/keepassxc_tr.ts b/share/translations/keepassxc_tr.ts index f4c254f0a..bf24bb0b7 100644 --- a/share/translations/keepassxc_tr.ts +++ b/share/translations/keepassxc_tr.ts @@ -27,7 +27,7 @@ Contributors - Katkıda bulunanlar + Emeği geçenler <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> @@ -80,10 +80,6 @@ Details Ayrıntılar - - Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. - Kararınız, hem istekte bulunan istemci hem de KeePassXC çalışırken hatırlanacak. - Remember Hatırla @@ -92,6 +88,10 @@ Allow Selected Seçilmişlere izin ver + + Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. + Kararınız, hem istekte bulunan istemci hem de KeePassXC çalışırken hatırlanacak. + Deny All && Future Tümünü ve gelecektekileri reddet @@ -122,10 +122,6 @@ Use OpenSSH OpenSSH kullanılsın - - Use both agents - İki uygulama da kullanılsın - SSH_AUTH_SOCK override SSH_AUTH_SOCK değişikliği @@ -154,6 +150,10 @@ SSH Agent connection is working! SSH istemci bağlantısı çalışıyor! + + Use both agents + İki uygulama da kullanılsın + ApplicationSettingsWidget @@ -169,10 +169,6 @@ Security Güvenlik - - This setting cannot be enabled when minimize on unlock is enabled. - Kilit açıldığında küçültülsün seçeneği açıkken bu seçenek açılamaz. - Access error for config file %1 %1 yapılandırma dosyasına erişim sorunu @@ -215,51 +211,23 @@ You must restart the application to set the new language. Would you like to restart now? - Yeni dilin kullanıma alınması için uygulamayı yeniden başlatmalısınız. Şimdi yeniden başlatılsın mı? + Yeni dilin etkin olması için uygulamayı yeniden başlatmalısınız. Şimdi yeniden başlatılsın mı? + + + Reset Settings? + Ayarlar sıfırlansın mı? + + + Are you sure you want to reset all general and security settings to default? + Tüm genel ve güvenlik ayarlarını varsayılan değerlerine döndürmek istediğinize emin misiniz? Select backup storage directory Yedek kayıt klasörünü seçin - Confirm Reset - Sıfırlamayı onayla - - - Are you sure you want to reset all settings to default? - Tüm ayarları varsayılan değerlerine döndürmek istediğinize emin misiniz? - - - Import KeePassXC Settings - KeePassXC ayarlarını içe aktar - - - Failed to import settings from %1, not a valid settings file. - Ayarlar %1 üzerinden içe aktarılamadı. Dosya geçerli bir ayar dosyası değil. - - - Export KeePassXC Settings - KeePassXC ayarlarını dışa aktar - - - Small - Küçük - - - Normal - Normal - - - Medium - Orta - - - Large - Büyük - - - Custom - Özel + This setting cannot be enabled when minimize on unlock is enabled. + Kilit açıldığında küçültülsün seçeneği etkinken bu seçenek etkinleştirilemez. @@ -290,15 +258,11 @@ Remember previously used databases - Kullanılan veri tabanları hatırlansın - - - recent files - son kullanılan dosya + Kullanılan veritabanları hatırlansın Load previously open databases on startup - Başlangıçta son kullanılan veri tabanları yüklensin + Başlangıçta son kullanılan veritabanları yüklensin Remember database key files and security dongles @@ -312,6 +276,25 @@ Include beta releases when checking for updates Güncelleme denetimine beta sürümleri de katılsın + + On database unlock, show entries that + Veri tabanının kilidi açıldığında, şu kayıtlar görüntülensin + + + have expired + On database unlock, show entries that... + süresi geçmiş + + + days + On database unlock, show entries that will expire within %1 days + gün + + + will expire within + On database unlock, show entries that... + Süresinin geçmesine + File Management Dosya yönetimi @@ -330,16 +313,28 @@ Automatically reload the database when modified externally - Dışarıda değiştirildiğinde veri tabanını otomatik olarak yeniden yüklensin + Dışarıda değiştirildiğinde veri tabanı otomatik olarak yeniden yüklensin Backup database file before saving - Kaydetmeden önce veri tabanı dosyası yedeklensin + Kaydedilmeden önce veri tabanı dosyası yedeklensin + + + Backup destination + Yedek hedefi + + + Specifies the database backup file location. Occurrences of "{DB_FILENAME}" are replaced with the filename of the saved database without extension. {TIME:<format>} is replaced with the backup time, see https://doc.qt.io/qt-5/qdatetime.html#toString. <format> defaults to format string "dd_MM_yyyy_hh-mm-ss". + Veri tabanı yedek dosyasının konumunu belirtir. "{DB_FILENAME}" kodu, kayıtlı veri tabanının uzantısı olmayan dosya adı, {TIME:<format>} kodu, yedekleme zamanı ile değiştirilir. https://doc.qt.io/qt-5/qdatetime.html#toString adresine bakabilirsiniz.<format> Varsayılan biçem dizgesi "dd_MM_yyyy_hh-mm-ss". {DB_FILENAME}.old.kdbx {DB_FILENAME}.old.kdbx + + Choose... + Seçin… + Use alternative saving method (may solve problems with Dropbox, Google Drive, GVFS, etc.) Alternatif kayıt yöntemi kullanılsın (Dropbox, Google Drive, GVFS, vb ile yaşanan sorunları çözebilir) @@ -358,7 +353,7 @@ Use group icon on entry creation - Kayıt eklenirken grup simgesi kullanılsın + Kayıt oluşturulurken grup simgesi kullanılsın Minimize when opening a URL @@ -417,10 +412,6 @@ Toolbar button style: Araç çubuğu düğme biçemi: - - Show passwords in color - Parolalar renkli görüntülensin - Use monospaced font for notes Notlarda sabit aralıklı yazı tipi kullanılsın @@ -507,69 +498,12 @@ Son yazılmış kaydın hatırlanma süresi: - On database unlock, show entries that will expire within - Veri tabanının kilidi açıldığında, şu zaman içinde süresi dolacak kayıtlar görüntülensin + recent files + son kullanılan dosya - On database unlock, show entries that will expire within - Veri tabanının kilidi açıldığında, şu zaman içinde süresi dolacak kayıtlar görüntülensin - - - days - number of days warning for password expiration - gün - - - Destination format: - Hedef biçimi: - - - <html><head/><body><p><span style=" font-weight:600;">{DB_FILENAME}</span> is replaced with the filename of the saved database without extension</p><p><span style=" font-weight:600;">{TIME:&lt;format&gt;}</span> is replaced with the specified time format (default: dd_MM_yyyy_hh-mm-ss)</p><p>See the User Guide for more details</p></body></html> - <html><head/><body><p><span style=" font-weight:600;">{DB_FILENAME}</span> yerinde uzantısı olmadan kaydedilmiş veri tabanının dosya adı görüntülenir </p><p><span style=" font-weight:600;">{TIME:&lt;format&gt;}</span> yerinde belirtilen saat biçimi görüntülenir (varsayılan değer: dd_MM_yyyy_hh-mm-ss)</p><p>Ayrıntılı bilgi almak için kullanıcı rehberine bakın</p></body></html> - - - Choose folder... - Klasör seçin... - - - Show confirmation before moving entries to recycle bin - Kayıtlar geri dönüşüm kutusuna taşınmadan önce onay istensin - - - Copy data on double clicking field in entry view - Kayıt görünümünde alana çift tıklandığında veriler kopyalansın - - - Show toolbar - Araç çubuğunu görüntüle - - - Show the menu bar by pressing the Alt key - Alt tuşuna basıldığında menü çubuğu görüntülensin - - - Show menubar - Araç çubuğu görüntülensin - - - Import settings… - Ayarları içe aktar… - - - Export settings… - Ayarları dışa aktar… - - - Open browser on double clicking URL field in entry view - Kayıt görünümünde adres alanına çift tıklandığında tarayıcı açılsın - - - Font size: - Yazı boyutu: - - - Font size selection - Yazı boyutu seçimi + Show passwords in color + Parolalar renkli görüntülensin @@ -606,7 +540,7 @@ Lock databases after inactivity of - Veri tabanları şu kadar zaman sonra kilitlensin + Vertiabanları şu kadar zaman sonra kilitlensin Convenience @@ -614,15 +548,19 @@ Enable database quick unlock (Touch ID / Windows Hello) - Veri tabanı kilidi hızlı açılabilsin (Touch ID / Windows Hello) + Kilit hızlı açılabilsin (Touch ID / Windows Hello) Lock databases when session is locked or lid is closed - Oturum kilitlendiğinde ya da kapak kapatıldığında veri tabanları kilitlensin + Oturum kilitlendiğinde ya da kapak kapatıldığında veritabanları kilitlensin Lock databases after minimizing the window - Simge durumuna küçültüldüğünde veri tabanları kilitlensin + Simge durumuna küçültüldüğünde veritabanları kilitlensin + + + Require password repeat when it is visible + Görünür olduğunda parola yinelemesi istensin Hide passwords when editing them @@ -636,6 +574,18 @@ Hide passwords in the entry preview panel Kayıt ön izleme panosunda parolalar gizlensin + + Hide entry notes by default + Kayıt notları varsayılan olarak gizlensin + + + Move entries to recycle bin without confirmation + Kayıtlar çöp kutusuna atılırken onay istenmesin + + + Enable double click to copy the username/password entry columns + Kullanıcı adı/parola kaydı sütunlarını kopyalamak için çift tıklama kullanılsın + Privacy Gizlilik @@ -648,18 +598,6 @@ Hide TOTP in the entry preview panel Tek kullanımlık parola kayıt ön izleme panosunda gizlensin - - Lock databases when switching user - Kullanıcı değiştirildiğinde veri tabanları kilitlensin - - - Lock Options - Seçenekleri kilitle - - - Hide notes in the entry preview panel - Notlar kayıt ön izleme panosunda gizlensin - AutoType @@ -704,13 +642,27 @@ Çok uzun gecikme algılandı. En fazla %1: %2 - Entry does not have attribute for PICKCHARS: %1 - Kayıtta PICKCHARS için öznitelik yok: %1 + Invalid conversion type: %1 + Dönüşüm türü geçersiz: %1 + + + Invalid conversion syntax: %1 + Dönüşüm söz dizimi geçersiz: %1 + + + Invalid regular expression syntax %1 +%2 + Kurallı ifade sözdizimi geçersiz %1 +%2 Invalid placeholder: %1 Yer belirteci geçersiz: %1 + + Entry does not have attribute for PICKCHARS: %1 + Kayıtta PICKCHARS için öznitelik yok: %1 + AutoTypeAssociationsModel @@ -752,6 +704,10 @@ AutoTypePlatformX11 + + Trying to send invalid keysym. + Geçersiz keysym değeri gönderilmeye çalışıldı. + Sequence aborted: Caps Lock is on Sıra kesildi: Büyük harf tuşu açık @@ -764,10 +720,6 @@ Unable to get valid keycode for key: Tuş için geçerli bir tuş kodu alınamadı: - - Trying to send invalid keyboard symbol. - Geçersiz klavye simgesi gönderilmeye çalışıldı. - AutoTypeSelectDialog @@ -795,7 +747,7 @@ Ctrl+4 - Sanal klavyeyi kullan (yalnızca Windows)</p> Search all open databases - Tüm açık veri tabanlarında ara + Tüm açık veritabanlarında ara Search… @@ -870,15 +822,15 @@ Ctrl+4 - Sanal klavyeyi kullan (yalnızca Windows)</p> Disable for this site - Bu site için kapat - - - Undo - Geri al + Bu site için devre dışı bırak BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + KeePassXC-Browser kaydı kaydet + Ok Tamam @@ -893,82 +845,25 @@ Please select the correct database for saving credentials. Çok sayıda açık veri tabanı var. Lütfen kimlik bilgilerinin kaydedileceği doğru veri tabanını seçin. - - KeePassXC - Select Database - KeePassXC - Veri tabanını seçme - - - - BrowserPasskeysConfirmationDialog - - Cancel - İptal - - - Update - Güncelle - - - Authenticate - İzin ver - - - Register new - Yeni kaydet - - - Register - Kaydet - - - Timeout in <b>%n</b> seconds... - <b>%n</b> saniye sonra süresi dolacak...<b>%n</b> saniye sonra süresi dolacak... - - - Relying Party: %1 - Güvenilen taraf: %1 - - - Username: %1 - Kullanıcı adı: %1 - - - KeePassXC - Passkey credentials - KeePassXC - Geçiş anahtarı kimlik doğrulama bilgileri - - - Add to existing entry - Var olan kayda ekle - - - Existing passkey found. -Do you want to register a new passkey for: - Var olan bir geçiş anahtarı bulundu. -Şunun için yeni bir geçiş anahtarı kaydetmek ister misiniz: - - - Select the existing passkey and press Update to replace it. - Var olan geçiş anahtarını seçin ve değiştirmek için Güncelle üzerine basın. - - - Authenticate passkey credentials for: - Şunun için geçiş anahtarı kimlik doğrulama bilgilerine izin verilsin: - - - Do you want to register a passkey for: - Şunun için geçiş anahtarı kaydetmek ister misiniz: - BrowserService + + KeePassXC: Create a new group + KeePassXC: Yeni bir grup oluştur + A request for creating a new group "%1" has been received. Do you want to create this group? - "%1" adında yeni bir grup ekleme isteği alındı. -Bu grubun eklenmesini ister misiniz? + "%1" adında yeni bir grup oluşturma isteği alındı. +Bu grubun oluşturulmasını ister misiniz? + + KeePassXC: New key association request + KeePassXC: Yeni anahtar ilişkilendirme isteği + You have received an association request for the following database: %1 @@ -985,16 +880,28 @@ linux-laptop. Save and allow access Kaydet ve erişime izin ver + + KeePassXC: Overwrite existing key? + KeePassXC: Var olan anahtarın üzerine yazılsın mı? + A shared encryption key with the name "%1" already exists. Do you want to overwrite it? "%1" adıyla paylaşılan bir şifreleme anahtarı zaten var. Üzerine yazılmasını ister misiniz? + + KeePassXC: Update Entry + KeePassXC: Kaydı güncelle + Do you want to update the information in %1 - %2? %1 -%2 bilgilerini güncellemek istiyor musunuz? + + KeePassXC: Delete entry + KeePassXC: Kaydı sil + A request for deleting entry "%1" has been received. Do you want to delete the entry? @@ -1004,58 +911,50 @@ Bu kaydın silinmesini ister misiniz? - %1 (Passkey) - %1 (geçiş anahtarı) + Converting attributes to custom data… + Öznitelikler özel verilere dönüştürüyor… - KeePassXC - Create a new group - KeePassXC - Yeni bir grup ekle + Abort + Vazgeç - Disable - Kapat + KeePassXC: Converted KeePassHTTP attributes + KeePassXC: Dönüştürülmüş KeePassHTTP öznitelikleri - KeePassXC - Overwrite existing key? - KeePassXC - Var olan anahtarın üzerine yazılsın mı? + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + %1 kaydın öznitelikleri dönüştürüldü. +%2 anahtar özel verilere taşındı. + + + Successfully moved %n keys to custom data. + %n anahtar özel verilere taşındı.%n anahtar özel verilere taşındı. - KeePassXC - Update Entry - KeePassXC - Kaydı güncelle + KeePassXC: No entry with KeePassHTTP attributes found! + KeePassXC: KeePassHTTP özniteliklerine uyan bir kayıt bulunamadı! - KeePassXC - Delete entry - KeePassXC - Kaydı sil + The active database does not contain an entry with KeePassHTTP attributes. + Etkin veri tabanında KeePassHTTP özniteliklerine uyan bir kayıt bulunamadı. - KeePassXC - New key association request - KeePassXC - Yeni anahtar ilişkilendirme isteği + Don't show this warning again + Bu uyarı bir daha görüntülenmesin - Passkey - Geçiş anahtarı + KeePassXC: Legacy browser integration settings detected + KeePassXC: Eski tarayıcı bütünleşme ayarları algılandı - KeePassXC - Passkey credentials - KeePassXC - Geçiş anahtarı kimlik doğrulama bilgileri - - - Register a new passkey to this entry: - Şu kayıt için yeni bir geçiş anahtarı kaydet: - - - KeePassXC - Update passkey - KeePassXC - Geçiş anahtarı kaydını güncelle - - - Entry already has a passkey. -Do you want to overwrite the passkey in %1 - %2? - Kaydın zaten bir geçiş anahtarı kaydı var. -%1 - %2 geçiş anahtarı kaydını değiştirmek istiyor musunuz? - - - Register - Kaydet + 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? + KeePassXC-Browser ayarlarınızın veri tabanı ayarlarına taşınması gerekiyor. +Bu işlem, var olan tarayıcı bağlantılarınızın korunması için gereklidir. +Şimdi var olan ayarlarınızı taşımak ister misiniz? @@ -1066,7 +965,7 @@ Do you want to overwrite the passkey in %1 - %2? This is required for accessing your databases with KeePassXC-Browser - KeePassXC-Browser tarafından veri tabanlarınıza erişilmesi için gereklidir. + KeePassXC-Browser tarafından veritabanlarınıza erişilmesi için gereklidir. Enable browser integration @@ -1076,6 +975,10 @@ Do you want to overwrite the passkey in %1 - %2? General Genel + + Browsers installed as snaps are currently not supported. + Anlık olarak kurulan tarayıcılar henüz desteklenmiyor. + Enable integration for these browsers: Şu tarayıcılar için bütünleşme kullanılsın: @@ -1143,12 +1046,12 @@ Do you want to overwrite the passkey in %1 - %2? All databases connected to the extension will return matching credentials. - Eklentiye bağlı tüm veri tabanları uyan kimlik bilgilerini döndürür. + Uzantıya bağlı tüm veritabanları uyan kimlik bilgilerini döndürür. Search in all opened databases for matching credentials Credentials mean login data requested via browser extension - Tüm açık veri tabanlarında uygun kimlik bilgileri aransın + Tüm açık veritabanlarında uygun kimlik bilgileri aransın Advanced @@ -1241,11 +1144,31 @@ Do you want to overwrite the passkey in %1 - %2? Custom extension ID: - Özel eklenti kimliği: + Özel uzantı kimliği: Custom extension ID - Özel eklenti kimliği + Özel uzantı kimliği + + + Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 + Geçici kum havuzu kullanılması nedeniyle, tarayıcı bütünleşmesini kullanmak için bir betik çalıştırmalısınız.<br />Bu betiği %1 adresinden alabilirsiniz. + + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 + Tarayıcı bütünleşmesinin çalışması için KeePassXC-Browser gereklidir. <br />%1, %2 ve %3 tarayıcıları için indirebilirsiniz. %4 + + + Please see special instructions for browser extension use below + Lütfen aşağıdan tarayıcı uzantısı kullanımı ile ilgili özel yönergelere bakın + + + <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. + <b>Hata:</b> Özel vekil sunucu konumu bulunamadı!<br/>Tarayıcı bütünleşmesi vekil sunucu uygulaması olmadan ÇALIŞMAZ. + + + <b>Warning:</b> The following options can be dangerous! + <b>Uyarı:</b> Aşağıdaki seçenekler tehlikeli olabilir! Executable Files @@ -1263,46 +1186,6 @@ Do you want to overwrite the passkey in %1 - %2? Select native messaging host folder location Yerel iletişim sunucusu klasörünün konumunu seçin - - Allow keepassxc-proxy to list all entries with their title, URL and UUID in connected databases. - Bağlı veri tabanlarındaki tüm kayıtların başlıklarının, adreslerinin ve UUID değerlerinin keepassxc-proxy tarafından görülmesine izin verir. - - - Allow limited access to all entries in connected databases (ignores site access restrictions) - Bağlı veri tabanlarındaki tüm kayıtlara sınırlı erişim izin verilsin (site erişim kısıtlamalarını yok sayar) - - - <b>Warning:</b> Only adjust these settings if necessary. - <b>Uyarı:</b> Bu ayarları yalnızca gerekli olduğunda değiştirin. - - - The custom proxy location does not exist. - Özel vekil sunucu konumu bulunamadı. - - - <b>Error:</b> The custom proxy location does not exist. Correct this in the advanced settings tab. - <b>Hata:</b> Özel vekil sunucu konumu bulunamadı. Bu sorunu gelişmiş ayarlar sekmesinden düzeltin. - - - <b>Error:</b> The installed proxy executable is missing from the expected location: %1<br/>Please set a custom proxy location in the advanced settings or reinstall the application. - <b>Hata:</b> Kurulmuş vekil sunucunun çalıştırılan dosyası beklenen konumda değil: %1<br/>Lütfen gelişmiş ayarlar bölümünden bir özel vekil sunucu konumu ayarlayın ya da uygulamayı yeniden kurun. - - - Allows using insecure http://localhost with passkeys for testing purposes. - Deneme amacıyla geçiş anahtarları ile güvenli olmayan http://localhost kullanılabilsin. - - - Allow using localhost with passkeys - Geçiş anahtarları ile localhost kullanılabilsin - - - KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. - Tarayıcı bütünleşmesinin çalışması için KeePassXC-Browser gereklidir. <br />%1, %2 ve %3 tarayıcıları için indirebilirsiniz. - - - Browsers installed using Snap or Flatpak are not supported with exception to Firefox installed using Snap. - Snap veya Flatpak ile kurulan tarayıcılar, Snap ile kurulan Firefox dışında, desteklenmiyor. - CloneDialog @@ -1325,6 +1208,14 @@ Do you want to overwrite the passkey in %1 - %2? CsvImportWidget + + Import CSV fields + CSV alanlarını içe aktar + + + filename + dosya adı + size, rows, columns boyut, satır, sütun @@ -1433,43 +1324,50 @@ Do you want to overwrite the passkey in %1 - %2? Column %1 %1. sütun + + Imported from CSV file + CSV dosyasından içe aktarıldı + + + Original data: + Özgün veriler: + + + Error(s) detected in CSV file! + CSV dosyasında sorunlar bulundu! + [%n more message(s) skipped] [%n diğer ileti atlandı][%n diğer ileti atlandı] - Failed to parse CSV file: %1 - CSV dosyası işlenemedi: %1 + Error + Hata - Imported from CSV file: %1 - CSV dosyasından içe aktarıldı: %1 - - - No Title Selected - Herhangi bir başlık seçilmemiş - - - No title column was selected, entries will be hard to tell apart. -Are you sure you want to import? - Herhangi bir başlık sütunu seçilmemiş. Kayıtları ayırmak zor olacak. -İçe aktarmak istediğinize emin misiniz? - - - Tags - Etiketler + CSV import: writer has errors: +%1 + CSV içe aktarma: Yazıcı hataları var: +%1 CsvParserModel + + %1, %2, %3 + file info: bytes, rows, columns + %1, %2, %3 + + + %n byte(s) + %n bayt%n bayt + %n row(s) - CSV row count %n satır%n satır %n column(s) - CSV column count %n sütun%n sütun @@ -1522,14 +1420,6 @@ Yedek veri tabanının konumu %2 Recycle Bin Çöp kutusu - - Database file read error. - Veri tabanı dosyası okunurken sorun çıktı - - - No file path was provided. - Herhangi bir dosya yolu belirtilmemiş. - DatabaseOpenDialog @@ -1552,10 +1442,30 @@ Yedek veri tabanının konumu %2 Password field Parola alanı + + Enter Additional Credentials (if any): + Ek kimlik doğrulama bilgileri verin (varsa): + + + Key File: + Anahtar dosyası: + + + Key file help + Anahtar dosyası yardımı + Hardware key slot selection Donanımsal anahtar yuvası seçimi + + Hardware Key: + Donanımsal anahtar: + + + Hardware key help + Donanımsal anahtar yardımı + Key file to unlock the database Veri tabanını açacak anahtar dosyası @@ -1568,6 +1478,14 @@ Yedek veri tabanının konumu %2 Browse… Göz at… + + Refresh hardware tokens + Donanımsal doğrulayıcıları yenile + + + Refresh + Yenile + Unlock Database Veri tabanı kilidini aç @@ -1599,7 +1517,7 @@ We recommend you update your KeePassXC installation. Açmaya çalıştığınız veri tabanı büyük olasılıkla daha yeni bir KeePassXC sürümü tarafından oluşturulmuş. -Yine de açmayı deneyebilirsiniz. Ancak eksik olabilir ve +Yine de açmayı deneyebilirsiniz, ancak eksik olabilir ve herhangi bir değişikliği kaydetmek veri kaybına neden olabilir. KeePassXC kurulumunuzu güncellemeniz önerilir. @@ -1630,6 +1548,10 @@ Bu sorunu engellemek için, "Veri tabanı ayarları / Güvenlik" böl Retry with empty password Boş parola ile yeniden dene + + Failed to authenticate with Touch ID + Touch ID ile kimlik doğrulanamadı + Failed to open key file: %1 Anahtar dosyası açılamadı: %1 @@ -1662,69 +1584,41 @@ Bu sorunu engellemek için, "Veri tabanı ayarları / Güvenlik" böl Cannot use database file as key file Veri tabanı dosyası anahtar dosyası olarak kullanılamaz + + You cannot use your database file as a key file. +If you do not have a key file, please leave the field empty. + Veri tabanı dosyanızı bir anahtar dosyası olarak kullanamazsınız. +Bir anahtar dosyanız yoksa, lütfen alanı boş bırakın. + + + Detecting hardware keys… + Donanımsal anahtarlar algılanıyor… + + + No hardware keys detected + Herhangi bir donanımsal anahtar algılanamadı + + + Select hardware key… + Donanımsal anahtarı seçin… + + + <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information…</p> + <p>Veri tabanınızın güvenliğini artırmak için parolaya ek olarak gizli bir dosya kullanabilirsiniz. Bu dosyayı veri tabanınızın güvenlik ayarları bölümünden oluşturulabilirsiniz.</p><p>Bu dosya, *.kdbx veri tabanı dosyanızdan <strong>farklıdır</strong>. Bir anahtar dosyanız yoksa bu alanı boş bırakın.<p>Ayrıntılı bilgi almak için tıklayın…</p> + + + <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +<p>Click for more information…</p> + <p> <strong>YubiKey</strong> ya da <strong>OnlyKey</strong> gibi donanımsal güvenlik anahtarlarını HMAC-SHA1 için ayarlanmış yuvalarda kullanabilirsiniz.</p> +<p>Ayrıntılı bilgi almak için tıklayın…</p> + authenticate to access the database veri tabanına erişim kimlik doğrulaması - Failed to authenticate with Quick Unlock: %1 - Hızlı kilit açma için kimlik doğrulanamadı: %1 - - - Select Key File: - Anahtar dosyasını seçin: - - - <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!</p> - <p>Veri tabanınızın güvenliğini artırmak için parolaya ek olarak gizli bir dosya kullanabilirsiniz. Bu dosyayı veri tabanınızın güvenlik ayarları bölümünden oluşturabilirsiniz.</p><p>Bu dosya, *.kdbx veri tabanı dosyanız <strong>değildir</strong>. - - - Use hardware key [Serial: %1] - Donanımsal anahtar kullanılsın [Seri: %1] - - - Use hardware key - Donanımsal anahtar kullanılsın - - - Your database file is NOT a key file! -If you don't have a key file or don't know what that is, you don't have to select one. - Veri tabanı dosyanız bir anahtar dosyası DEĞİLDİR! -Anahtar dosyanız yoksa ya da ne olduğunu bilmiyorsanız bir şey seçmek zorunda değilsiniz. - - - KeePassXC database file selected - KeePassXC veri tabanı dosyası seçilmiş - - - The file you selected looks like a database file. -A database file is NOT a key file! - -Are you sure you want to continue with this file?. - Seçtiğiniz dosya bir veri tabanı dosyası gibi görünüyor. -Bir veri tabanı dosyası bir anahtar dosyası DEĞİLDİR! - -Bu dosya ile ilerlemek istediğinize emin misiniz? - - - No hardware keys found. - Herhangi bir donanımsal anahtar bulunamadı. - - - Refresh Hardware Keys - Donanımsal anahtarları yenile - - - Click to add a key file. - Bir anahtar dosyası eklemek için tıklayın. - - - <a href="#" style="text-decoration: underline">I have a key file</a> - <a href="#" style="text-decoration: underline">Bir anahtar dosyam var</a> - - - Hardware keys found, but no slots are configured. - Donanımsal anahtar bulundu. Ancak herhangi bir yuva yapılandırılmamış. + Failed to authenticate with Windows Hello: %1 + Windows Hello ile kimlik doğrulanamadı: %1 @@ -1736,6 +1630,10 @@ Bu dosya ile ilerlemek istediğinize emin misiniz? DatabaseSettingsDialog + + Advanced Settings + Gelişmiş ayarlar + General Genel @@ -1760,22 +1658,6 @@ Bu dosya ile ilerlemek istediğinize emin misiniz? Maintenance Bakım - - KeeShare - KeeShare - - - Secret Service Integration - Gizli hizmet bütünleşmesi - - - Remote Sync - Uzak eşitleme - - - Database Settings: %1 - Veri tabanı ayarları: %1 - DatabaseSettingsWidgetBrowser @@ -1783,6 +1665,18 @@ Bu dosya ile ilerlemek istediğinize emin misiniz? KeePassXC-Browser settings KeePassXC-Browser ayarları + + Convert KeePassHTTP data + KeePassHTTP verilerini dönüştür + + + Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data + Eski KeePassHTTP öznitelikleri KeePassXC-Browser uyumlu özel verilere taşınsın + + + Refresh database root group ID + Veri tabanı kök grup kimliğini yenile + Disconnect all browsers Tüm tarayıcıların bağlantısını kes @@ -1791,10 +1685,6 @@ Bu dosya ile ilerlemek istediğinize emin misiniz? Forget all site-specific settings on entries Kayıtlardaki tüm siteye özgü ayarlar unutulsun - - Refresh database root group ID - Veri tabanı kök grup kimliğini yenile - Stored keys Kaydedilmiş anahtarlar @@ -1818,8 +1708,8 @@ Bu dosya ile ilerlemek istediğinize emin misiniz? Do you really want to delete the selected key? This may prevent connection to the browser plugin. - Seçilmiş anahtarı kaldırmak istediğinize emin misiniz? -Bu işlem, tarayıcı eklentisi ile bağlantı kurulmasını engelleyebilir. + Seçilmiş anahtarı kaldırmak istediğinizden emin misiniz? +Bu işlem, tarayıcı uzantısı ile bağlantı kurulmasını engelleyebilir. Key @@ -1835,18 +1725,26 @@ Bu işlem, tarayıcı eklentisi ile bağlantı kurulmasını engelleyebilir. Enable Browser Integration to access these settings. - Bu ayarlara erişmek için tarayıcı bütünleşmesini açın. + Bu ayarlara erişmek için tarayıcı bütünleşmesini etkinleştirin. 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ı eklentisinin bağlantı kurmasını engelleyebilir. +Bu işlem, tarayıcı uzantısının bağlantı kurmasını engelleyebilir. + + + KeePassXC: No keys found + KeePassXC: Herhangi bir anahtar bulunamadı No shared encryption keys found in KeePassXC settings. KeePassXC ayarlarında paylaşılan bir şifreleme anahtarı bulunamadı. + + KeePassXC: Removed keys from database + KeePassXC: Anahtarlar veri tabanından kaldırıldı + Successfully removed %n encryption key(s) from KeePassXC settings. %n şifreleme anahtarı KeePassXC ayarlarından kaldırıldı.%n şifreleme anahtarı KeePassXC ayarlarından kaldırıldı. @@ -1865,13 +1763,31 @@ Kayıtlara erişme izinleri kaldırılacak. Abort İptal + + KeePassXC: Removed permissions + KeePassXC: İzinler kaldırıldı + Successfully removed permissions from %n entry(s). %n kaydın izinleri kaldırıldı.%n kaydın izinleri kaldırıldı. + + KeePassXC: No entry with permissions found! + KeePassXC: İzni olan bir kayıt bulunamadı! + The active database does not contain an entry with permissions. - Etkin veri tabanında, izinleri olan bir kayıt yok. + Etkin veri tabanında, izni olan bir kayıt yok. + + + Move KeePassHTTP attributes to custom data + KeePassHTTP özniteliklerini özel verilere taşı + + + Do you really want to convert 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 en son standarda taşımak istediğinize emin misiniz? +Bu işlem tarayıcı uzantısıyla uyumluluğu korumak için gereklidir. Refresh database ID @@ -1881,27 +1797,7 @@ Kayıtlara erişme izinleri kaldırılacak. Do you really want refresh the database ID? This is only necessary if your database is a copy of another and the browser extension cannot connect. Veri tabanı kimliğini yenilemek istediğiniz emin misiniz? -Bu işlem yalnızca veri tabanınız başka bir veri tabanının kopyası ise ve tarayıcı eklentisi bağlantı kuramıyorsa gerekir. - - - Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data - Eski KeePassHTTP öznitelikleri KeePassXC-Browser uyumlu özel verilere taşınsın - - - No keys found - Herhangi bir anahtar bulunamadı - - - Removed keys from database - Anahtarlar veri tabanından kaldırıldı - - - Removed permissions - İzinler kaldırıldı - - - No entry with permissions found! - İzinleri olan bir kayıt bulunamadı! +Bu işlem yalnızca veri tabanınız başka bir veri tabanının kopyası ise ve tarayıcı uzantısı bağlanmtı kuramıyorsa gerekir. @@ -1942,18 +1838,6 @@ Bir parola ayarlamadan ilerlemek istediğinize emin misiniz? Failed to change database credentials Veri tabanı kimlik doğrulama bilgileri değiştirilemedi - - Weak password - Parola kolay - - - This is a weak password! For better protection of your secrets, you should choose a stronger password. - Bu parola kolay! Bilgilerinizi daha iyi korumak için daha zor bir parola seçmelisiniz. - - - The provided password does not meet the minimum quality requirement. - Belirtilen parola en düşük kalite gereksinimini karşılamıyor. - DatabaseSettingsWidgetEncryption @@ -1961,13 +1845,21 @@ Bir parola ayarlamadan ilerlemek istediğinize emin misiniz? Decryption Time: Şifre çözme süresi: + + Change existing decryption time + Var olan şifre çözme süresini değiştir + + + Change + Değiştir + Decryption time in seconds Saniye olarak şifre çözme süresi Higher values offer more protection, but opening the database will take longer. - Daha yüksek değerler daha fazla koruma sağlar. Ancak veri tabanını açmak daha uzun sürer. + Daha yüksek değerler daha fazla koruma sağlar. Ancak veri tabanının açılması daha uzun sürer. Database format: @@ -2041,6 +1933,11 @@ Bir parola ayarlamadan ilerlemek istediğinize emin misiniz? KDBX 3 KDBX 3 + + unchanged + Database decryption time is unchanged + değişmedi + Number of rounds too high Key transformation rounds @@ -2093,18 +1990,6 @@ Bu değeri kullanmayı sürdürürseniz, veri tabanınız kaba kuvvet saldırıs Threads for parallel execution (KDF settings) işlem işlem - - Encryption Settings: - Şifreleme ayarları: - - - Basic - Temel - - - Advanced - Gelişmiş - DatabaseSettingsWidgetFdoSecrets @@ -2217,13 +2102,13 @@ the oldest history items of an entry will be removed such that the remaining history items add up to the specified amount at most. Bu ayar kaydedildiğinde ya da bir kayıt -düzenlenirken, bir kayıttaki en eski geçmiş -ögeleri, tutulacak geçmiş ögelerinin toplamı -en fazla belirtilen sayıda olacak şekilde kaldırılır. +düzenlendiğinde, bir kayıtta tutulacak +geçmiş ögeleri belirtilen sayıda olacak +şekilde en eski geçmiş ögeleri silinir. Limit the total size of history items per entry to: - Her kayıt için tutulacak toplam geçmiş ögesi sayısı: + Bir kayıt için tutulacak toplam geçmiş ögesi sayısı: Move entries to a recycle bin group @@ -2231,74 +2116,10 @@ instead of deleting them from the database. Entries deleted from the recycle bin are removed from the database. Kayıtları veri tabanından silmek yerine -çöp kutusu grubuna taşıyın. -Çöp kutusundan silinen kayıtlar +bir geri dönüşüm kutusu grubuna taşıyın. +Geri dönüşüm kutusundan silinen kayıtlar veri tabanından kaldırılır. - - Autosave delay since last change - Son değişiklikten sonraki otomatik kaydetme gecikmesi - - - Autosave delay - Otomatik kaydetme gecikmesi - - - Autosave delay since last change in minutes - Dakika olarak son değişiklikten sonraki otomatik kaydetme gecikmesi - - - min - dk - - - Autosave delay since last change checkbox - Son değişiklikten sonraki otomatik kaydetme gecikmesi işaret kutusu - - - Public Database Metadata - Herkese açık veri tabanı üst verileri - - - Warning: the following settings are not encrypted. - Uyarı: Şu ayarlar şifrelenmez. - - - Display name: - Görüntülenecek ad: - - - Publically visible display name used on the unlock dialog - Kilit açma penceresinde herkese açık olarak görüntülenen ad - - - Database public display name - Veri tabanının herkese açık görüntülenecek adı - - - Display color: - Görüntülenme rengi: - - - Publically visible color used on the unlock dialog - Kilit açma penceresinde herkese açık olarak görüntülenecek renk - - - Database public display color chooser - Veri tabanının herkese açık görüntülenecek renginin seçicisi - - - Clear - Temizle - - - Display icon: - Görüntülenecek simge: - - - Select Database Icon - Veri tabanı simgesini seçin - DatabaseSettingsWidgetKeeShare @@ -2394,141 +2215,6 @@ veri tabanından kaldırılır. Veri tabanı açıklama alanı - - DatabaseSettingsWidgetRemote - - Sync Commands - Eşitleme komutları - - - Remove - Kaldır - - - Command Settings - Komut ayarları - - - Name - Ad - - - Save - Kaydet - - - Download - İndir - - - Command: - Komut: - - - Download command field - İndirme komutu alanı - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - Örnek: "sftp kullaniciadi@sunucu" ya da "scp kullaniciadi@sunucu:UzakVeriTabanı.kdbx {TEMP_DATABASE}" - - - Input: - Giriş: - - - Download input field - İndirme giriş alanı - - - Upload - Yükle - - - Upload command field - Yükleme komutu alanı - - - e.g.: "sftp user@hostname" or "scp {TEMP_DATABASE} user@hostname:DatabaseOnRemote.kdbx" - Örnek: "sftp kullaniciadi@sunucu" ya da "scp {TEMP_DATABASE} kullaniciadi@sunucu:UzakVeriTabanı.kdbx" - - - Upload input field - Yükleme giriş alanı - - - Name cannot be empty. - Ad boş olamaz. - - - Test - Sına - - - Download command cannot be empty. - İndirme komutu boş olamaz. - - - Download failed with error: %1 - İndirme sırasında sorun çıktı: %1 - - - Download finished, but file %1 could not be found. - İndirme tamamlandı ancak %1 dosyası bulunamadı. - - - Download successful. - İndirme tamamlandı. - - - Save Remote Settings - Uzak ayarları kaydet - - - You have unsaved changes. Do you want to save them? - Kaydedilmemiş değişiklikler var. Kaydetmek ister misiniz? - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - Örnek: -get UzakVeriTabani.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} veri tabanını geçici bir konuma kaydetmek için yer belirtci olarak kullanılır -`sftp` kullanıldığında son komutun `exit` olması gerektiğinden, komutta exit bulunmalıdır. - - - - e.g.: -put {TEMP_DATABASE} DatabaseOnRemote.kdbx -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - Örnek: -put {TEMP_DATABASE} UzakVeriTabani.kdbx -exit ---- -{TEMP_DATABASE} veri tabanını geçici bir konuma kaydetmek için yer belirtci olarak kullanılır -`sftp` kullanıldığında son komutun `exit` olması gerektiğinden, komutta exit bulunmalıdır. - - - - Timeout: - Zaman aşımı: - - - seconds - saniye - - DatabaseTabWidget @@ -2561,10 +2247,26 @@ Bu kesinlikle bir uygulama hatasıdır. Lütfen geliştiricilere bildirin.CSV file CSV dosyası + + Select CSV file + CSV dosyası seçin + Merge database Veri tabanını birleştir + + KeePass 1 database + KeePass 1 veri tabanı + + + Open KeePass 1 database + KeePass 1 veri tabanı aç + + + Open OPVault + OPVault aç + Export database to CSV file Veri tabanını CSV olarak dışa aktar @@ -2577,6 +2279,28 @@ Bu kesinlikle bir uygulama hatasıdır. Lütfen geliştiricilere bildirin.Writing the HTML file failed. HTML dosyası yazılamadı. + + Export Confirmation + Dışa aktarım onayı + + + You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? + Veri tabanınızı şifrelenmemiş bir dosya olarak dışa aktarmak üzeresiniz. Bu işlem, parolalarınızı ve önemli bilgilerinizi korumasız kılacak! İlerlemek istediğinize emin misiniz? + + + New Database + Yeni veri tabanı + + + %1 [New Database] + Database tab name modifier + %1 [Yeni veri tabanı] + + + %1 [Locked] + Database tab name modifier + %1 [Kilitli] + Export database to XML file Veri tabanını XML dosyasına aktar @@ -2589,31 +2313,9 @@ Bu kesinlikle bir uygulama hatasıdır. Lütfen geliştiricilere bildirin.Writing the XML file failed XML dosyası yazılamadı - - Export Confirmation - Dışa aktarma onayı - - - You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? - Veri tabanınızı şifrelenmemiş bir dosya olarak dışa aktarmak üzeresiniz. Bu işlem, parolalarınızı ve önemli bilgilerinizi korumasız kılacak! İlerlemek istediğinize emin misiniz? - - - %1 [Locked] - Database tab name modifier - %1 [Kilitli] - - - %1 [Temporary] - Database tab name modifier - %1 [Temporary] - DatabaseWidget - - Searches and Tags - Aramalar ve etiketler - Searching… Aranıyor… @@ -2662,10 +2364,6 @@ Bu kesinlikle bir uygulama hatasıdır. Lütfen geliştiricilere bildirin.Expired entries Süresi geçmiş kayıtlar - - Entries expiring within %1 day(s) - %1 gün içinde süresi geçecek kayıtlar%1 gün içinde süresi geçecek kayıtlar - No current database. Geçerli bir veri tabanı yok. @@ -2690,18 +2388,6 @@ Bu kesinlikle bir uygulama hatasıdır. Lütfen geliştiricilere bildirin.No Results Uygun bir sonuç bulunamadı - - Save - Kaydet - - - Enter a unique name or overwrite an existing search from the list: - Eşsiz bir ad yazın ya da listede var olan bir aramayı değiştirin: - - - Save Search - Aramayı kaydet - Lock Database? Veri tabanı kilitlensin mi? @@ -2730,15 +2416,35 @@ Değişiklikler kaydedilsin mi? File has changed Dosya değişmiş + + The database file has changed. Do you want to load the changes? + Veri tabanı dosyası değiştirilmiş. Değişiklikleri yüklemek ister misiniz? + + + Merge Request + Birleştirme isteği + + + The database file has changed and you have unsaved changes. +Do you want to merge your changes? + Veri tabanı dosyası değiştirilmiş ve kaydedilmemiş değişiklikleriniz var. +Değişikliklerinizi birleştirmek ister misiniz? + + + Could not open the new database file while attempting to autoreload. +Error: %1 + Otomatik yüklenmeye çalışılırken yeni veri tabanı dosyası açılamadı. +Hata: %1 + Disable safe saves? - Güvenli kaydetme kapatılsın mı? + Güvenli kaydetme devre dışı bırakılsın mı? 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 birkaç kez veri tabanını kaydedemedi. Bu durum genellikle kaydedilen bir dosyayı kilitleyen dosya eşitleme hizmetlerinden kaynaklanır. -Güvenli kaydetme kapatılarak yeniden denensin mi? +Güvenli kaydetme devre dışı bırakılarak yeniden denensin mi? Writing the database failed: %1 @@ -2772,94 +2478,25 @@ Güvenli kaydetme kapatılarak yeniden denensin mi? Could not find database file: %1 Veri tabanı dosyası bulunamadı: %1 - - New Database - Yeni veri tabanı + + Entries expiring within %1 day(s) + %1 gün içinde süresi geçecek kayıtlar%1 gün içinde süresi geçecek kayıtlar - %1 [New Database] - Database tab name modifier - %1 [Yeni veri tabanı] + Searches and Tags + Aramalar ve etiketler - Remote Sync did not contain any download or upload commands. - Uzak eşitlemede herhangi bir indirme ya da yükleme komutu bulunmuyor. + Enter a unique name or overwrite an existing search from the list: + Eşsiz bir ad yazın ya da listede var olan bir aramayı değiştirin: - Remote sync '%1' completed successfully! - '%1' uzak eşitlemesi tamamlandı! + Save + Kaydet - Remote sync '%1' failed: %2 - '%1' uzak eşitlemesi tamamlanamadı: %2 - - - Error while saving database %1: %2 - %1 veri tabanı kaydedilirken sorun çıktı: %2 - - - Downloading... - İndiriliyor... - - - Uploading... - Yükleniyor... - - - Syncing... - Eşitleniyor... - - - Remove passkey from entry - Kaydın geçiş anahtarını kaldır - - - Do you want to remove the passkey from this entry? - Geçiş anahtarını bu kayıttan kaldırmak istediğinize emin misiniz? - - - The database file "%1" was modified externally - "%1" veri tabanı dosyası dışarıdan değiştirilmiş - - - Do you want to load the changes? - Değişiklikleri yüklemek ister misiniz? - - - Reload database - Veri tabanını yeniden yükle - - - Reloading database… - Veri tabanı yeniden yükleniyor… - - - Reload canceled - Yeniden yükleme iptal edildi - - - Reload successful - Yeniden yüklendi - - - Reload pending user action… - Yeniden yükleme için kullanıcı işlemi bekleniyor… - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes<br>Ignore the changes on disk until save<br>Discard unsaved changes - "%1" veri tabanı dosyası dışarıdan değiştirilmiş.<br>Nasıl ilerlemek istersiniz?<br><br>Tüm değişiklikler birleştirilsin<br>Kaydedilinceye kadar diskteki değişiklikler yok sayılsın<br>Kaydedilmemiş değişiklikler silinsin - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes then save<br>Overwrite the changes on disk<br>Discard unsaved changes - "%1" veri tabanı dosyası dışarıdan değiştirilmiş.<br>Nasıl ilerlemek istersiniz?<br><br>Tüm değişiklikler birleştirilsin ve kaydedilsin<br>Diskteki değişikliklerin üzerine yazılsın<br>Kaydedilmemiş değişiklikler silinsin - - - Database file overwritten. - Veri tabanı dosyasının üzerine yazıldı. - - - Database file on disk cannot be unlocked with current credentials.<br>Enter new credentials and/or present hardware key to continue. - Diskteki veri tabanı dosyası geçerli kimlik doğrulama bilgileriyle açılamadı.<br>İlerlemek için yeni kimlik doğrulama bilgilerini yazın ve/veya geçerli donanım anahtarını kullanın. + Save Search + Aramayı kaydet @@ -2912,6 +2549,10 @@ Güvenli kaydetme kapatılarak yeniden denensin mi? n/a yok + + (encrypted) + (şifrelenmiş) + Select private key Kişisel anahtarı seçin @@ -2939,8 +2580,8 @@ Güvenli kaydetme kapatılarak yeniden denensin mi? An external merge operation has invalidated this entry. Unfortunately, any changes made have been lost. - Bu kayıt bir dış birleştirme işlemi ile geçersiz kılınmış. -Ne yazık ki yapılmış değişiklikler kaybolacak. + Bu kayıt bir dış birleştirme işlemi ile devre dışı bırakılmış. +Maalesef yapılmış değişiklikler kaybolacak. Auto-Type Validation Error @@ -2998,10 +2639,6 @@ Düzeltmek ister misiniz? Hide Gizle - - %n hour(s) - %n saat%n saat - %n week(s) %n hafta%n hafta @@ -3014,9 +2651,9 @@ Düzeltmek ister misiniz? %n year(s) %n yıl%n yıl - - Failed to decrypt SSH key, ensure password is correct. - SSH anahtarının şifresi çözülemedi. Parolanın doğru olduğundan emin olun. + + %n hour(s) + %n saat%n saat @@ -3136,20 +2773,10 @@ Düzeltmek ister misiniz? Add new window association Yeni pencere ilişkilendirmesi ekle - - + - Add item - + - Remove selected window association Seçilmiş pencere ilişkilendirmesini kaldır - - - - Remove item - - - Window title: Pencere başlığı: @@ -3174,29 +2801,55 @@ Düzeltmek ister misiniz? Custom Auto-Type sequence for this window Bu pencere için özel otomatik yazma sırası + + + + Add item + + + + + - + Remove item + - + EditEntryWidgetBrowser + + These settings affect to the entry's behaviour with the browser extension. + Bu ayarlar, kaydın tarayıcı uzantısındaki davranışını etkiler. + General Genel Hide this entry from the browser extension - Bu kayıt tarayıcı eklentisinde gizlensin + Bu kayıt tarayıcı uzantısında gizlensin Skip Auto-Submit for this entry Bu kayıt için otomatik gönderim yapılmasın + + Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. + Bu ayar tarayıcıya yalnızca HRRP Auth pencereleri için gönderilir. Bu seçenek etkinleştirildiğinde, bu kayıt normal oturum açma formlarında seçilmek üzere görüntülenmez. + Use this entry only with HTTP Basic Auth Bu kayıt yalnızca HTTP temel kimlik doğrulaması ile kullanılsın + + Do not send this setting to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. + Bu ayar tarayıcıya HTTP kimlik doğrulama pencereleri için gönderilmez. Bu seçenek etkinleştirildiğinde, bu kayıt HTTP kimlik doğrulama pencerelerinde seçilmek üzere görüntülenmez. + Do not use this entry with HTTP Basic Auth Bu kayıt HTTP temel kimlik doğrulaması ile kullanılmasın + + Additional URL's + Ek adresler + Add Ekle @@ -3209,22 +2862,6 @@ Düzeltmek ister misiniz? Edit Düzenle - - These settings affect the entry's behaviour with the browser extension. - Bu ayarlar, kaydın tarayıcı eklentisindeki davranışını etkiler. - - - Additional URLs - Ek adresler - - - Only send this entry to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. - Bu kayıt tarayıcıya yalnızca HRRP Auth pencereleri için gönderilir. Bu seçenek açıldığında, bu kayıt normal oturum açma formlarında seçilmek üzere görüntülenmez. - - - Do not send this entry to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. - Bu kayıt tarayıcıya HTTP kimlik doğrulama pencereleri için gönderilmez. Bu seçenek açıldığında, bu kayıt HTTP kimlik doğrulama pencerelerinde seçilmek üzere görüntülenmez. - EditEntryWidgetHistory @@ -3390,6 +3027,19 @@ Düzeltmek ister misiniz? Private key Kişisel anahtar + + External file + Dış dosya + + + Browser for key file + Anahtar dosyası için tarayıcı + + + Browse… + Button for opening file dialog + Göz at… + Attachment Ek dosya @@ -3406,23 +3056,6 @@ Düzeltmek ister misiniz? Remove from agent Uygulamadan kaldır - - External file - Dış dosya - - - Browser for key file - Anahtar dosyası için tarayıcı - - - Browse… - Button for opening file dialog - Göz at… - - - Generate - Oluştur - Select attachment file Ek dosyayı seç @@ -3447,10 +3080,6 @@ Düzeltmek ister misiniz? seconds saniye - - Clear agent - Uygulamayı temizle - EditGroupWidget @@ -3462,6 +3091,10 @@ Düzeltmek ister misiniz? Icon Simge + + Browser Integration + Tarayıcı bütünleşmesi + Properties Özellikler @@ -3478,17 +3111,13 @@ Düzeltmek ister misiniz? Group has unsaved changes Grupta kaydedilmemiş değişiklikler var - - Browser Integration - Tarayıcı bütünleşmesi - Enable - + Etkinleştir Disable - Kapat + Devre dışı bırak Inherit from parent group (%1) @@ -3499,15 +3128,15 @@ Düzeltmek ister misiniz? EditGroupWidgetBrowser These settings affect to the group's behaviour with the browser extension. - Bu ayarlar, grubun tarayıcı eklentisindeki davranışını etkiler. + Bu ayarlar, grubun tarayıcı uzantısındaki davranışını etkiler. Hide entries from browser extension: - Tarayıcı eklentisinde gizlenecek kayıtlar: + Tarayıcı uzantısında gizlenecek kayıtlar: Hide entries from browser extension toggle for this and sub groups - Kayıtlar bu grup ve alt gruplarında tarayıcı eklentisinden gizlenir + Kayıtlar bu grup ve alt gruplarında tarayıcı uzantısından gizlenir Skip Auto-Submit for entries: @@ -3541,14 +3170,6 @@ Düzeltmek ister misiniz? Omit WWW subdomain from matching toggle for this and sub groups Bu alt grupları için WWW alt etki alanının eşleşmeye katılma durumunu değiştirir - - Restrict matching to given browser key: - Eşleşme belirtilen tarayıcı anahtarı ile kısıtlansın: - - - Restrict matching to given browser key toggle for this and sub groups - Eşleşmeyi belirtilen tarayıcı anahtarı ile kısıtlama bu ve alt grupları için değiştirilsin - EditGroupWidgetKeeShare @@ -3594,7 +3215,7 @@ Düzeltmek ister misiniz? Inactive - Etkisiz + Devre dışı Import @@ -3612,7 +3233,7 @@ Düzeltmek ister misiniz? Your KeePassXC version does not support sharing this container type. Supported extensions are: %1. Kullandığınız KeePassXC sürümü bu kapsayıcı türünün paylaşılmasını desteklemiyor. -Desteklenen eklentiler: %1. +Desteklenen uzantılar: %1. %1 is already being exported by this database. @@ -3629,15 +3250,15 @@ Desteklenen eklentiler: %1. KeeShare is currently disabled. You can enable import/export in the application settings. KeeShare is a proper noun - KeeShare şu anda kapalı. Uygulama ayarları bölümünden içe/dışa aktarmayı açabilirsiniz. + KeeShare şu anda devre dışı. Uygulama ayarları bölümünden içe/dışa aktarmayı etkinleştirebilirsiniz. Database export is currently disabled by application settings. - Veri tabanı dışa aktarma özelliği uygulama ayarlarından kapatılmış. + Veri tabanı dışa aktarma özelliği uygulama ayarlarından devre dışı bırakılmış. Database import is currently disabled by application settings. - Veri tabanı içe aktarma özelliği uygulama ayarlarından kapatılmış. + Veri tabanı içe aktarma özelliği uygulama ayarlarından devre dışı bırakılmış. KeeShare container @@ -3781,6 +3402,10 @@ Desteklenen eklentiler: %1. Unable to fetch favicon. Site simgesi alınamadı. + + You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security + DuckDuckGo site simgesi hizmetini Araçlar -> Ayarlar -> Güvenlik bölümünden etkinleştirebilirsiniz + Existing icon selected. Var olan simge seçildi. @@ -3813,10 +3438,6 @@ Desteklenen eklentiler: %1. The following icon(s) failed: Şu simgeler alınamadı:Şu simgeler alınamadı: - - You can enable the DuckDuckGo website icon service under Application Settings -> Security - DuckDuckGo site simgesi hizmetini Uygulama ayarları -> Güvenlik bölümünden açabilirsiniz - EditWidgetProperties @@ -3893,24 +3514,6 @@ Bu işlem etkilenecek eklentilerin bozulmasına neden olabilir. %1 - Clone Kopya - %1 - - Passkey - Geçiş anahtarı - - - Invalid conversion type: %1 - Dönüşüm türü geçersiz: %1 - - - Invalid conversion syntax: %1 - Dönüşüm söz dizimi geçersiz: %1 - - - Invalid regular expression syntax %1 -%2 - Kurallı ifade sözdizimi geçersiz %1 -%2 - EntryAttachments @@ -3919,21 +3522,6 @@ Bu işlem etkilenecek eklentilerin bozulmasına neden olabilir. "%1" dosyası açılamadı - - EntryAttachmentsDialog - - Form - Form - - - File name - Dosya adı - - - File contents... - Dosya içerikleri... - - EntryAttachmentsModel @@ -3971,6 +3559,14 @@ Bu işlem etkilenecek eklentilerin bozulmasına neden olabilir. Remove Kaldır + + Rename selected attachment + Seçilmiş ek dosyayı yeniden adlandır + + + Rename + Yeniden adlandır + Open selected attachment Seçilmiş ek dosyayı aç @@ -4046,6 +3642,12 @@ Bu işlem etkilenecek eklentilerin bozulmasına neden olabilir. Confirm Overwrite Attachment Ek dosya üzerine yazmayı onayla + + Attachment "%1" already exists. +Would you like to overwrite the existing attachment? + "%1" ek dosyası zaten var. +Var olan ek dosyanın üzerine yazılmasını ister misiniz? + Confirm Attachment Ek dosyayı onayla @@ -4080,24 +3682,6 @@ Error: %1 Güncellenmiş ek dosya kaydedilemedi. Hata: %1 - - Attachment "%1" already exists. -Would you like to overwrite the existing attachment? - "%1" ek dosyası zaten var. -Var olan ek dosyanın üzerine yazılmasını ister misiniz? - - - New - Yeni - - - Preview - Ön izleme - - - Failed to preview an attachment: Attachment not found - Bir ek dosya ön izlemesi görüntülenemedi: Ek dosya bulunamadı - EntryAttributesModel @@ -4262,7 +3846,7 @@ Var olan ek dosyanın üzerine yazılmasını ister misiniz? Entry expires at - Kaydın geçerlilik sonu + Kaydın geçerlilik süresi Creation date @@ -4292,14 +3876,6 @@ Var olan ek dosyanın üzerine yazılmasını ister misiniz? Has TOTP Tek kullanımlık parola var - - Background Color - Arka plan rengi - - - Group Path - Grup yolu - EntryPreviewWidget @@ -4320,8 +3896,8 @@ Var olan ek dosyanın üzerine yazılmasını ister misiniz? Parola - URL - Adres + Notes + Notlar Expiration @@ -4340,8 +3916,8 @@ Var olan ek dosyanın üzerine yazılmasını ister misiniz? Kullanıcı adı - Notes - Notlar + URL + Adres Advanced @@ -4391,21 +3967,17 @@ Var olan ek dosyanın üzerine yazılmasını ister misiniz? Never Asla - - Double click to copy value - Değeri kopyalamak için çift tıklayın - Enabled - Açık + Etkin Disabled - Kapalı + Devre dışı - Double click to copy to clipboard - Panoya kopyalamak için çift tıklayın + Double click to copy value + Değeri kopyalamak için çift tıklayın @@ -4414,10 +3986,6 @@ Var olan ek dosyanın üzerine yazılmasını ister misiniz? Invalid URL Geçersiz adres - - Duplicate URL - Adresi kopyala - EntryView @@ -4433,10 +4001,6 @@ Var olan ek dosyanın üzerine yazılmasını ister misiniz? Reset to defaults Varsayılanlara sıfırla - - + %1 entry(s)... - + %1 kayıt...+ %1 kayıt... - ExportDialog @@ -4508,7 +4072,7 @@ Bu işlem, parolalarınızı ve önemli bilgilerinizi korumasız kılacak! Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. - Başka bir gizli hizmet çalışıyor (%1).<br/>Gizli hizmet bütünleşmesini yeniden açmadan önce bu hizmeti durdurun ya da kaldırın. + Başka bir gizli hizmet çalışıyor (%1).<br/>Gizli hizmet bütünleşmesini yeniden etkinleştirmeden önce bu hizmeti durdurun ya da kaldırın. Failed to register DBus service at %1.<br/> @@ -4602,7 +4166,7 @@ Bu işlem, parolalarınızı ve önemli bilgilerinizi korumasız kılacak! HibpDownloader Online password validation failed - Parola çevrim içi olarak onaylanamadı + Parola çevrimiçi olarak onaylanamadı @@ -4619,7 +4183,7 @@ Bu işlem, parolalarınızı ve önemli bilgilerinizi korumasız kılacak! Having trouble downloading icons? You can enable the DuckDuckGo website icon service in the security section of the application settings. Simgeleri indirmede sorun mu yaşıyorsunuz? -Uygulama ayarlarındaki güvenlik bölümünden DuckDuckGo site simge hizmetini açın. +Uygulama ayarlarındaki güvenlik bölümünden DuckDuckGo site simge hizmetini etkinleştirin. Close @@ -4658,198 +4222,6 @@ Uygulama ayarlarındaki güvenlik bölümünden DuckDuckGo site simge hizmetini Site simgeleri indiriliyor (%1/%2)… - - ImportWizard - - Import Wizard - İçe aktarma yardımcısı - - - - ImportWizardPageReview - - WizardPage - Yardımcı sayfası - - - Entry count: %1 - Kayıt sayısı: %1 - - - Group - Grup - - - Title - Başlık - - - Username - Kullanıcı adı - - - Password - Parola - - - Url - Adres - - - Could not load key file. - Anahtar dosyası yüklenemedi. - - - Could not open remote database. Password or key file may be incorrect. - Uzak veri tabanı açılamadı. Parola ya da anahtar dosyası doğru olmayabilir. - - - - ImportWizardPageSelect - - Form - Form - - - Import File Selection - İçe aktarma dosyası seçimi - - - Password: - Parola: - - - Key File: - Anahtar dosyası: - - - Browse… - Göz at… - - - Import Into: - Şuraya içe aktar: - - - New Database - Yeni veri tabanı - - - No unlocked databases available - Kullanılabilecek kilitlenmemiş bir veri tabanı yok - - - Existing Database: - Var olan veri tabanı: - - - Import File: - İçe aktarma dosyası: - - - Comma Separated Values (.csv) - Virgül ile ayrılmış değerler (.csv) - - - 1Password Export (.1pux) - 1Password dışa aktarımı (.1pux) - - - 1Password Vault (.opvault) - 1Password kasası (.opvault) - - - Bitwarden (.json) - Bitwarden (.json) - - - KeePass 1 Database (.kdb) - KeePass 1 veri tabanı (.kdb) - - - Open OPVault - OPVault aç - - - Select import file - İçe aktarma dosyasını seçin - - - All files - Tüm dosyalar - - - Key files - Anahtar dosyaları - - - Select key file - Anahtar dosyasını seçin - - - Comma Separated Values - Virgül ile ayrılmış değerler - - - 1Password Export - 1Password dışa aktarımı - - - Bitwarden JSON Export - Bitwarden JSON dışa aktarımı - - - 1Password Vault - 1Password dışa aktarımı - - - KeePass1 Database - KeePass1 veri tabanı - - - Proton Pass (.json) - Proton Pass (.json) - - - Proton Pass JSON Export - Proton Pass JSON dışa aktarımı - - - Temporary Database - Geçici veri tabanı - - - Command: - Komut: - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - Örnek: "sftp kullaniciadi@sunucu" ya da "scp kullaniciadi@sunucu:UzakVeriTabanı.kdbx {TEMP_DATABASE}" - - - Input: - Giriş: - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last commend `exit` has to be sent - - Örnek: -get UzakVeriTabanı.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE}, veri tabanını geçici bir konumda depolamak için yer belirtici olarak kullanılır -Komuttan çıkılması gerekir. `sftp` durumunda son komut olarak `exit` gönderilmelidir - - - Remote Database (.kdbx) - Uzak veri tabanı (.kdbx) - - KMessageWidget @@ -5209,7 +4581,7 @@ Line %2, column %3 No entry uuid found - Kaydın eşsiz kodu bulunamadı + Kayıdın eşsiz kodu bulunamadı History element with different uuid @@ -5284,6 +4656,17 @@ Line %2, column %3 Kişisel anahtar açılamadı + + KeePass1OpenWidget + + Import KeePass1 Database + KeePass 1 veri tabanını içe aktar + + + Unable to open the database. + Veri tabanı açılamadı. + + KeePass1Reader @@ -5355,7 +4738,7 @@ Bu sorunla yeniden karşılaşırsanız, veri tabanı dosyası bozulmuş olabili Invalid group field type number - Grup alanı türü numarası geçersiz + Grup alanı türünün numarası geçersiz Invalid group field size @@ -5403,7 +4786,7 @@ Bu sorunla yeniden karşılaşırsanız, veri tabanı dosyası bozulmuş olabili Missing entry field type number - Kayıt alanı türü numarası eksik + Kayıt alanının türü numarası eksik Invalid entry field size @@ -5466,11 +4849,11 @@ Bu sorunla yeniden karşılaşırsanız, veri tabanı dosyası bozulmuş olabili Import is disabled in settings - İçe aktarma özelliği ayarlardan kapatılmış + İçe aktarma özelliği ayarlardan devre dışı bırakılmış Export is disabled in settings - Dışa aktarma özelliği ayarlardan kapatılmış + Dışa aktarma özelliği ayarlardan devre dışı bırakılmış Inactive share @@ -5638,7 +5021,11 @@ Bu dosyayı kullanarak ilerlemek istediğinize emin misiniz? &Recent Databases - &Son kullanılan veri tabanları + &Son kullanılan veritabanları + + + &Import + İç&e aktar &Export @@ -5660,10 +5047,6 @@ Bu dosyayı kullanarak ilerlemek istediğinize emin misiniz? TOTP Tek kullanımlık parola - - Tags - Etiketler - &Groups &Gruplar @@ -5708,18 +5091,34 @@ Bu dosyayı kullanarak ilerlemek istediğinize emin misiniz? &New Database… &Yeni veri tabanı… + + Create a new database + Yeni bir veri tabanı oluştur + &Merge From Database… &Veri tabanıyla birleştir… + + Merge from another KDBX database + Başka bir KDBX veri tabanıyla birleştir + &New Entry… Kayıt &ekle… + + Add a new entry + Yeni kayıt ekle + &Edit Entry… Kaydı &düzenle… + + View or edit entry + Kaydı görüntüle ya da düzenle + &Delete Entry… Kaydı &sil… @@ -5728,6 +5127,10 @@ Bu dosyayı kullanarak ilerlemek istediğinize emin misiniz? &New Group… Grup &ekle… + + Add a new group + Yeni bir grup ekle + &Edit Group… Grubu &düzenle… @@ -5760,10 +5163,18 @@ Bu dosyayı kullanarak ilerlemek istediğinize emin misiniz? Database &Reports… Veri tabanı &raporları… + + Statistics, health check, etc. + İstatistikler, sağlık taraması vb. + &Database Settings… &Veri tabanı ayarları… + + Database settings + Veri tabanı ayarları + &Clone Entry… Kaydı &kopyala… @@ -5772,18 +5183,34 @@ Bu dosyayı kullanarak ilerlemek istediğinize emin misiniz? Move u&p &Yukarı taşı + + Move entry one step up + Kaydı bir sıra yukarı taşır + Move do&wn &Aşağı taşı + + Move entry one step down + Kaydı bir sıra aşağı taşır + Copy &Username &Kullanıcı adını kopyala + + Copy username to clipboard + Kullanıcı adını panoya kopyala + Copy &Password &Parolayı kopyala + + Copy password to clipboard + Parolayı panoya kopyala + &Settings &Ayarlar @@ -5810,20 +5237,28 @@ Bu dosyayı kullanarak ilerlemek istediğinize emin misiniz? Lock &All Databases - &Tüm veri tabanlarını kilitle + &Tüm veritabanlarını kilitle &Title &Başlık - Copy &URL - &Adresi kopyala + Copy title to clipboard + Başlığı panoya kopyala + + + Copy URL to clipboard + Adresi panoya kopyala &Notes &Notlar + + Copy notes to clipboard + Notları panoya kopyala + &CSV File… &CSV dosyası… @@ -5836,14 +5271,26 @@ Bu dosyayı kullanarak ilerlemek istediğinize emin misiniz? KeePass 1 Database… KeePass 1 veri tabanı… + + Import a KeePass 1 database + KeePass 1 veri tabanını içe aktar + 1Password Vault… 1Password kasası… + + Import a 1Password Vault + 1Password kasasını içe aktar + CSV File… CSV dosyası… + + Import a CSV file + CSV dosyasını içe aktar + Show TOTP Tek kullanımlık parolayı görüntüle @@ -5860,10 +5307,6 @@ Bu dosyayı kullanarak ilerlemek istediğinize emin misiniz? Copy &TOTP &Tek kullanımlık parolayı kopyala - - Copy Password and TOTP - Parola ve tek kullanımlık parolayı kopyala - E&mpty recycle bin Çöpü b&oşalt @@ -5886,7 +5329,11 @@ Bu dosyayı kullanarak ilerlemek istediğinize emin misiniz? &Online Help - &Çevrim içi yardım + &Çevrimiçi yardım + + + Go to online documentation + Çevrimiçi belgelere git &User Guide @@ -5932,10 +5379,6 @@ Bu dosyayı kullanarak ilerlemek istediğinize emin misiniz? Classic (Platform-native) Klasik (sistem için doğal) - - Show Menubar - Menü çubuğu görüntülensin - Show Toolbar Araç çubuğu görüntülensin @@ -5960,10 +5403,6 @@ Bu dosyayı kullanarak ilerlemek istediğinize emin misiniz? Clone Group... Grubu kopyala… - - &XML File… - &XML dosyası… - Clear history Geçmişi temizle @@ -5991,8 +5430,10 @@ Expect some bugs and minor issues, this version is meant for testing purposes. - No Tags - Herhangi bir etiket yok + 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. + UYARI: Kullandığınız Qt sürümü KeePassXC ekran klavyesinin çökmesine neden olabilir. +KeePassXC indirme sayfasında bulunan AppImage paketini kullanmanız önerilir. Restore Entry(s) @@ -6022,10 +5463,6 @@ Bazı hatalar ve küçük sorunlarla karşılaşabilirsiniz. Bu sürüm deneme a Quit KeePassXC KeePassXC uygulamasından çık - - %1 Entry(s) - %1 kayıt%1 kayıt - Please present or touch your YubiKey to continue… Lütfen, ilerlemek için YubiKey anahtarını takın ya da üzerindeki düğmeye dokunun… @@ -6036,316 +5473,40 @@ Bazı hatalar ve küçük sorunlarla karşılaşabilirsiniz. Bu sürüm deneme a You must restart the application to apply this setting. Would you like to restart now? - Bu ayarın açılması için uygulamayı yeniden başlatmalısınız. Şimdi yeniden başlatmak ister misiniz ? + Bu ayarın etkin olması için uygulamayı yeniden başlatmalısınız. Şimdi yeniden başlatmak ister misiniz ? + + + Tags + Etiketler + + + No Tags + Herhangi bir etiket yok + + + %1 Entry(s) + %1 kayıt%1 kayıt + + + Copy Password and TOTP + Parola ve tek kullanımlık parolayı kopyala + + + &XML File… + &XML dosyası… + + + XML File… + XML dosyası… + + + Copy &URL + &Adresi kopyala Allow Screen Capture Ekran görüntüsü alınabilsin - - 1Password 1PUX... - 1Password 1PUX... - - - Import a 1Password 1PUX file - 1Password 1PUX dosyasını içe aktar - - - Import… - İçe aktar… - - - Passkeys… - Geçiş anahtarları… - - - Import Passkey - Geçiş anahtarı içe aktar - - - Remote S&ync… - &Uzak eşitleme… - - - Quit Application - Uygulamadan çık - - - Open About Dialog - Hakkında bilgilerini görüntüle - - - Open Database - Veri tabanını aç - - - Create Database - Veri tabanı oluştur - - - Merge From Database - Veri tabanından aktar - - - Create Entry - Kayıt ekle - - - Edit Entry - Kaydı düzenle - - - Delete Entry - Kaydı sil - - - Create Group - Grup ekle - - - Edit Group - Grubu düzenle - - - Delete Group - Grubu sil - - - Download All Favicons - Tüm site simgelerini indir - - - Sort Groups A-Z - Grupları sırala A-Z - - - Sort Groups Z-A - Grupları sırala Z-A - - - Save Database As - Veri tabanını farklı kaydet - - - Show Database Security - Veri tabanı güvenliğini görüntüle - - - Show Database Reports - Veri tabanı raporlarını görüntüle - - - Show Database Settings - Veri tabanı ayarlarını görüntüle - - - Show Passkeys - Geçiş anahtarlarını görüntüle - - - Clone Entry - Kaydı kopyala - - - Move Entry Up - Kaydı yukarı taşı - - - Move Entry Down - Kaydı aşağı taşı - - - Copy Username - Kullanıcı adını kopyala - - - Copy Password - Parolayı kopyala - - - Show Application Settings - Uygulama ayarlarını görüntüle - - - Show Password Generator - Parola oluşturucuyu görüntüle - - - Remove Passkey From Entry - Kaydın geçiş anahtarını kaldır - - - Perform Auto-Type: {USERNAME} - Otomatik yaz: {USERNAME} - - - Perform Auto-Type: {USERNAME}{ENTER} - Otomatik yaz: {USERNAME}{ENTER} - - - Perform Auto-Type: {PASSWORD} - Otomatik yaz: {PASSWORD} - - - Perform Auto-Type: {PASSWORD}{ENTER} - Otomatik yaz: {PASSWORD}{ENTER} - - - Perform Auto-Type: {TOTP} - Otomatik yaz: {TOTP} - - - Copy Title - Başlığı kopyala - - - Copy URL - Adresi kopyala - - - Copy Notes - Notları kopyala - - - Export to CSV - CSV olarak dışa aktar - - - Export to HTML - HTML olarak dışa aktar - - - Import KeePass1 Database - KeePass 1 veri tabanını içe aktar - - - Import 1Password Vault - 1Password kasasını içe aktar - - - Import CSV File - CSV dosyasından içe aktar - - - Show TOTP QR Code - Tek kullanımlık ya da QR kodu görüntüle - - - Set up TOTP - Tek kullanımlık parolayı ayarla - - - Empty Recycle Bin - Çöp kutusunu boşalt - - - Open Donation Website - Bağış sitesini aç - - - Open Bug Report - Hata bildirimini aç - - - Open Online Documentation - Çevrim içi belgeleri aç - - - Open Keyboard Shortcuts Guide - Klavye kısayolları rehberini aç - - - Save Database Backup - Veri tabanı yedeğini kaydet - - - SSH Agent: Add Key - SSH aracısı: Anahtar ekle - - - SSH Agent: Remove Key - SSH aracısı: Anahtarı kaldır - - - Toggle Compact Mode - Küçük kipi aç/kapat - - - Set Theme: Automatic - Temayı ayarla: Otomatik - - - Set Theme: Light - Temayı ayarla: Açık - - - Set Theme: Dark - Temayı ayarla: Koyu - - - Set Theme: Classic - Temayı ayarla: Klasik - - - Toggle Show Menubar - Menü çubuğunu görüntüle/gizle - - - Toggle Show Toolbar - Araç çubuğunu görüntüle/gizle - - - Toggle Show Preview Panel - Ön izleme panosunu görüntüle/gizle - - - Toggle Always on Top - Her zaman üstteyi aç/kapat - - - Toggle Hide Usernames - Kullanıcı adlarını görüntüle/gizle - - - Toggle Hide Passwords - Parolaları görüntüle/gizle - - - Export to XML - XML olarak dışa aktar - - - Toggle Allow Screen Capture - Ekran görüntüsü almayı aç/kapat - - - Show Group Panel - Grup panosu görüntülensin - - - Toggle Show Group Panel - Grup panosunu görüntüle/gizle - - - Setup Remote Sync… - Uzak eşitlemeyi kur... - - - Password Generator - Parola oluşturucu - - - E&xpire Entry… - Kayıt &geçerlilik süresi… - - - Clear SSH Agent - SSH uygulamasını temizle - - - Clear all identities in ssh-agent - SSH uygulamasındaki tüm kimlikleri temizle - ManageDatabase @@ -6403,6 +5564,26 @@ Bazı hatalar ve küçük sorunlarla karşılaşabilirsiniz. Bu sürüm deneme a Overwriting %1 [%2] %1 [%2] üzerine yazılıyor + + older entry merged from database "%1" + eski kayıt "%1" veri tabanıyla birleştirildi + + + Adding backup for older target %1 [%2] + %1 [%2] eski hedefi için yedek ekleniyor + + + Adding backup for older source %1 [%2] + %1 [%2] eski kaynağı için yedekleme ekleniyor + + + Reapplying older target entry on top of newer source %1 [%2] + %1 [%2] eski hedef kaydı yeni kaynağın üstüne yeniden uygulanıyor + + + Reapplying older source entry on top of newer target %1 [%2] + %1 [%2] eski kaynak kaydı yeni hedefin üstüne yeniden uygulanıyor + Synchronizing from newer source %1 [%2] %1 [%2] yeni kaynaktan eşitleniyor @@ -6462,6 +5643,14 @@ Bazı hatalar ve küçük sorunlarla karşılaşabilirsiniz. Bu sürüm deneme a Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. Veri tabanı şifreleme ayarlarını buradan düzenleyebilirsiniz. Endişelenmeyin, bu ayarları daha sonra veri tabanı ayarlarından değiştirebilirsiniz. + + Advanced Settings + Gelişmiş ayarlar + + + Simple Settings + Temel ayarlar + NewDatabaseWizardPageDatabaseKey @@ -6496,25 +5685,6 @@ Bazı hatalar ve küçük sorunlarla karşılaşabilirsiniz. Bu sürüm deneme a Lütfen yeni veri tabanı için görüntülenecek bir ad ve isteğe bağlı bir açıklama yazın: - - NewEntryAttachmentsDialog - - Attachment name cannot be empty - Ek dosya adı boş olamaz - - - Attachment with the same name already exists - Aynı adlı bir ek dosya zaten var - - - Save attachment - Ek dosyayı kaydet - - - New entry attachment - Yeni kayıt ek dosyası - - NixUtils @@ -6561,6 +5731,15 @@ Bazı hatalar ve küçük sorunlarla karşılaşabilirsiniz. Bu sürüm deneme a %1 bayt düz metin bekleniyordu, %2 bulundu + + OpVaultOpenWidget + + Read Database did not produce an instance +%1 + Veri tabanı okuması bir kopya oluşturmadı +%1 + + OpVaultReader @@ -6634,10 +5813,6 @@ Bazı hatalar ve küçük sorunlarla karşılaşabilirsiniz. Bu sürüm deneme a Unknown cipher: %1 Şifreleme bilinmiyor: %1 - - AES-256/GCM is currently not supported - AES-256/GCM şu anda desteklenmiyor - Passphrase is required to decrypt this key Bu anahtarın şifresini çözmek için parola ifadesi gerekiyor @@ -6703,183 +5878,8 @@ Bazı hatalar ve küçük sorunlarla karşılaşabilirsiniz. Bu sürüm deneme a Kişisel anahtar yazılırken dosya beklenmedik şekilde sonlandı - (encrypted) - (şifrelenmiş) - - - - OpenSSHKeyGenDialog - - SSH Key Generator - SSH anahtar oluşturucu - - - Type - Tür - - - Bits - Bit - - - Comment - Yorum - - - - PasskeyExportDialog - - KeePassXC - Passkey Export - KeePassXC - Geçiş anahtarı dışa aktar - - - Filenames will be generated with title and .passkey file extension. - Dosya adları başlık ve .passkey uzantısı ile oluşturulacak. - - - Export entries - Kayıtları dışa aktar - - - Export Selected - Seçilmişleri dışa aktar - - - Cancel - İptal - - - Export to folder - Klasöre dışa aktar - - - Export the following passkey entries. - Şu geçiş anahtarı kayıtlarını dışa aktar. - - - - PasskeyExporter - - KeePassXC: Passkey Export - KeePassXC: Geçiş anahtarı dışa aktarma - - - File "%1.passkey" already exists. -Do you want to overwrite it? - - "%1.passkey" dosyası zaten var. -Üzerine yazılmasını ister misiniz? - - - - Cannot open file - Dosya açılamadı - - - Cannot open file "%1" for writing. - "%1" dosyası yazılmak üzere açılamadı. - - - Cannot write to file - Dosyaya yazılamadı - - - - PasskeyImportDialog - - KeePassXC - Passkey Import - KeePassXC - Geçiş anahtarı içe aktarma - - - Username: %1 - Kullanıcı adı: %1 - - - Group - Grup - - - Database - Veri tabanı - - - Import Passkey - Geçiş anahtarı içe aktar - - - Import - İçe aktar - - - Cancel - İptal - - - Entry - Kayıt - - - Create new entry - Yeni kayıt ekle - - - Relying Party: %1 - Güvenilen taraf: %1 - - - Import the following passkey: - Şu geçiş anahtarı kaydını içe aktar: - - - Import the following passkey to this entry: - Bu kayıt için şu geçiş anahtarı kaydını içe aktar: - - - Default passkeys group (Imported Passkeys) - Varsayılan geçiş anahtarı grubu (içe aktarılmış geçiş anahtarları) - - - - PasskeyImporter - - Passkey file - Geçiş anahtarı dosyası - - - All files - Tüm dosyalar - - - Cannot open file - Dosya açılamadı - - - Cannot open file "%1" for reading. - "%1" dosyası okunmak üzere açılamadı. - - - Open passkey file - Geçiş anahtarı dosyasını aç - - - Cannot import passkey - Geçiş anahtarı içe aktarılamadı - - - Cannot import passkey file "%1". Data is missing. - "%1" geçiş anahtarı dosyası içe aktarılamadı. Veriler eksik. - - - Cannot import passkey file "%1". -The following data is missing: -%2 - "%1" geçiş anahtarı dosyası içe aktarılamadı. -Şu veriler eksik: -%2 - - - Cannot import passkey file "%1". Private key is missing or malformed. - "%1" geçiş anahtarı dosyası içe aktarılamadı. Kişisel anahtar eksik ya da bozuk. + AES-256/GCM is currently not supported + AES-256/GCM şu anda desteklenmiyor @@ -7084,6 +6084,10 @@ The following data is missing: Word Count: Sözcük sayısı: + + Character Count: + Karakter sayısı: + Word Case: Sözcük biçimi: @@ -7096,6 +6100,10 @@ The following data is missing: Add custom wordlist Özel sözcük listesi ekle + + character + karakter + Close Kapat @@ -7132,30 +6140,6 @@ The following data is missing: Entropy: %1 bit Entropi: %1 bit - - Password Quality: %1 - Parola kalitesi: %1 - - - Poor - Password quality - Çok kolay - - - Weak - Password quality - Kolay - - - Good - Password quality - Zor - - - Excellent - Password quality - Çok zor - Confirm Delete Wordlist Sözcük listesini silmeyi onayla @@ -7203,20 +6187,32 @@ Do you want to overwrite it? Özel karakterler - passwordLength - parolaUzunluğu + Password Quality: %1 + Parola kalitesi: %1 - Characters: %1 - Karakter sayısı: %1 + Poor + Password quality + Çok kolay - MIXED case - Büyük/küçük karışık + Weak + Password quality + Kolay - Excluded characters: "0", "1", "l", "I", "O", "|", "﹒", "B", "8", "G", "6" - Katılmayacak karakterler: "0", "1", "l", "I", "O", "|", "﹒", "B", "8", "G", "6" + Good + Password quality + Zor + + + Excellent + Password quality + Çok zor + + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + Katılmayacak karakterler: "0", "1", "l", "I", "O", "|", "﹒" @@ -7266,7 +6262,7 @@ Do you want to overwrite it? Çok zor - Toggle password visibility using Control + H. Open the password generator using Control + G. + Toggle password visibilty using Control + H. Open the password generator using Control + G. Control + H ile parola görünürlüğünü değiştirebilir, Control + G ile parola üretecini açabilirsiniz. @@ -7285,21 +6281,6 @@ Do you want to overwrite it? Karakterler arasında &Sekme gönderilsin - - PreviewEntryAttachmentsDialog - - Preview entry attachment - Kayıt ek dosyaları ön izlemesi - - - No preview available - Ön izleme yok - - - Image format not supported - Görsel biçimi desteklenmiyor - - QMessageBox @@ -7328,7 +6309,7 @@ Do you want to overwrite it? Disable - Kapat + Devre dışı bırak Merge @@ -7338,10 +6319,6 @@ Do you want to overwrite it? Continue İlerle - - Continue with weak password - Kolay parola ile ilerle - QObject @@ -7399,7 +6376,7 @@ Do you want to overwrite it? Cannot create new group - Yeni grup eklenemedi + Yeni grup oluşturulamadı No valid UUID provided @@ -7415,7 +6392,7 @@ Do you want to overwrite it? Browser Plugin Failure - Tarayıcı eklentisi sorunu + Tarayıcı uzantısı sorunu Could not save the native messaging script file for %1. @@ -7717,7 +6694,7 @@ Do you want to overwrite it? Deactivate password key for the database. - Veri tabanı için parola anahtarını etkisizleştirir. + Veri tabanı için parola anahtarını devre dışı bırakır. Yubikey slot and optional serial used to access the database (e.g., 1:7370001). @@ -7735,10 +6712,6 @@ Do you want to overwrite it? Too many arguments provided. Gerekenden fazla sayıda değişken belirtildi. - - Path of the database. - Veri tabanının yolu. - Target decryption time in MS for the database. Milisaniye olarak veri tabanı şifresini çözme süresi hedefi. @@ -7759,6 +6732,10 @@ Do you want to overwrite it? Create a new database. Yeni bir veri tabanı oluştur. + + Path of the database. + Veri tabanının yolu. + Invalid decryption time %1. %1 şifre çözme süresi geçersiz. @@ -7803,161 +6780,9 @@ Do you want to overwrite it? Successfully created new database. Yeni veri tabanı oluşturuldu. - - Unset the password for the database. - Veri tabanının parolasını kaldır. - - - Unset the key file for the database. - Veri tabanının anahtar dosyasını kaldır. - - - Edit a database. - Bir veri tabanını düzenle. - - - Cannot use %1 and %2 at the same time. - %1 ve %2 aynı anda kullanılamaz. - - - Could not change the database key. - Veri tabanı anahtarı değiştirilemedi. - - - Database was not modified. - Veri tabanı değiştirilmedi. - - - Writing the database failed: %1 - Veri tabanına yazılamadı: %1 - - - Successfully edited the database. - Veri tabanı düzenlendi. - - - Cannot remove password: The database does not have a password. - Parola kaldırılamadı. Veri tabanının bir parolası yok. - - - Cannot remove file key: The database does not have a file key. - Dosya anahtarı kaldırılamadı. Veri tabanının bir dosya anahtarı yok. - - - Loading the new key file failed: %1 - Yeni anahtar dosyası yüklenemedi: %1 - - - Found unexpected Key type %1 - Beklenmeyen %1 anahtar türü bulundu - - - Cannot remove all the keys from a database. - Bir veri tabanındaki tüm anahtarlar kaldırılamaz. - - - Show a database's information. - Bir veri tabanının bilgilerini görüntüler. - - - UUID: - Eşsiz kod: - - - Name: - Ad: - - - Description: - Açıklama: - - - Cipher: - Şifre: - - - KDF: - Anahtar türetme işlevi: - - - Recycle bin is enabled. - Çöp kutusu kullanılıyor. - - - Recycle bin is not enabled. - Çöp kutusu kullanılmıyor. - - - Location - Konum - - - Database created - Veri tabanı oluşturuldu - - - Last saved - Son kaydedilme - - - Unsaved changes - Kaydedilmemiş değişiklikler - - - yes - evet - - - no - hayır - - - Number of groups - Grup sayısı - - - Number of entries - Kayıt sayısı - - - Number of expired entries - Süresi geçmiş kayıt sayısı - - - Unique passwords - Eşsiz parolalar - - - Non-unique passwords - Eşsiz olmayan parolalar - - - Maximum password reuse - Aynı parolanın en fazla kullanımı - - - Number of short passwords - Kısa parola sayısı - - - Number of weak passwords - Kolay parola sayısı - - - Entries excluded from reports - Raporlara katılmayan kayıtlar - - - Average password length - Ortalama parola uzunluğu - - - %1 characters - %1 karakter - Word count for the diceware passphrase. - Zar atma parola ifadesindeki sözcük sayısı. + Diceware parola ifadesindeki sözcük sayısı. count @@ -7967,17 +6792,21 @@ Do you want to overwrite it? Wordlist for the diceware generator. [Default: EFF English] - Zar atma üreteci için sözcük listesi. + Diceware üreteci için sözcük listesi. [Varsayılan: EFF İngilizce] Generate a new random diceware passphrase. - Yeni bir rastgele zar atma parola ifadesi oluştur. + Yeni bir rastgele Diceware parola ifadesi oluştur. Invalid word count %1 Geçersiz sözcük sayısı %1 + + The word list is too small (< 1000 items) + Sözcük listesi çok küçük (< 1000 öge) + Title for the entry. Kaydın başlığı. @@ -8002,6 +6831,10 @@ Do you want to overwrite it? Enter new password for entry: Kayıt için yeni parolayı yazın: + + Writing the database failed: %1 + Veri tabanına yazılamadı: %1 + Successfully edited entry %1. %1 kaydı düzenlendi. @@ -8122,6 +6955,10 @@ Do you want to overwrite it? Exit interactive mode. Etkileşimli kipten çık. + + Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. + Dışa aktarmada kullanılacak biçim. Kullanılabilecek seçenekler 'xml' ya da 'csv'. Varsayılan biçim: 'xml'. + Exports the content of a database to standard output in the specified format. Bir veri tabanının içeriğini belirtilen biçimde standart çıkışa aktarır. @@ -8222,6 +7059,106 @@ Do you want to overwrite it? Successfully imported database. Veri tabanı içe aktarıldı. + + Show a database's information. + Bir veri tabanının bilgilerini görüntüler. + + + UUID: + Eşsiz kod: + + + Name: + Ad: + + + Description: + Açıklama: + + + Cipher: + Şifre: + + + KDF: + Anahtar türetme işlevi: + + + Recycle bin is enabled. + Çöp kutusu kullanılıyor. + + + Recycle bin is not enabled. + Çöp kutusu kullanılmıyor. + + + Location + Konum + + + Database created + Veri tabanı oluşturuldu + + + Last saved + Son kaydedilme + + + Unsaved changes + Kaydedilmemiş değişiklikler + + + yes + evet + + + no + hayır + + + Number of groups + Grup sayısı + + + Number of entries + Kayıt sayısı + + + Number of expired entries + Süresi geçmiş kayıt sayısı + + + Unique passwords + Eşsiz parolalar + + + Non-unique passwords + Eşsiz olmayan parolalar + + + Maximum password reuse + Aynı parolanın en fazla kullanımı + + + Number of short passwords + Kısa parola sayısı + + + Number of weak passwords + Kolay parola sayısı + + + Entries excluded from reports + Raporlara katılmayan kayıtlar + + + Average password length + Ortalama parola uzunluğu + + + %1 characters + %1 karakter + Unknown command %1 %1 komutu bilinmiyor @@ -8278,7 +7215,7 @@ Kullanılabilecek komutlar: Deactivate password key for the database to merge from. - Birleştirilecek veri tabanının parola anahtarını etkisizleştirir. + Birleştirilecek veri tabanının parola anahtarını devre dışı bırakır. Only print the changes detected by the merge operation. @@ -8394,10 +7331,6 @@ Kullanılabilecek komutlar: Show the protected attributes in clear text. Korumalı öznitelikleri düz metin olarak görüntüler. - - Show all the attributes of the entry. - Kaydın tüm özniteliklerini görüntüler. - Show the attachments of the entry. Kaydın ek dosyalarını görüntüler. @@ -8468,10 +7401,6 @@ Lütfen bu dosyayı kullanmak yerine yeni bir anahtar dosyası oluşturmayı de Invalid YubiKey serial %1 %1 YubiKey seri numarası geçersiz - - Please present or touch your YubiKey to continue. - Lütfen, ilerlemek için YubiKey anahtarını takın ya da üzerindeki düğmeye dokunun. - Enter password to encrypt database (optional): Veri tabanını şifrelemek için parolayı yazın (isteğe bağlı): @@ -8588,11 +7517,11 @@ Lütfen bu dosyayı kullanmak yerine yeni bir anahtar dosyası oluşturmayı de Debugging mode is disabled. - Hata ayıklama kipi kapalı. + Hata ayıklama kipi devre dışı. Debugging mode is enabled. - Hata ayıklama kipi açık. + Hata ayıklama kipi etkin. Operating system: %1 @@ -8632,7 +7561,7 @@ Kernel: %3 %4 Enabled extensions: - Kullanımdaki eklentiler: + Etkin eklentiler: over %1 year(s) @@ -8710,6 +7639,18 @@ Kernel: %3 %4 file empty dosya boş + + malformed string + dizge bozuk + + + missing closing quote + tırnak kapatma eksik + + + %1: (row, col) %2,%3 + %1: (satır, sütun) %2,%3 + AES 256-bit AES 256-bit @@ -8744,7 +7685,7 @@ Kernel: %3 %4 The lock file could not be created. Single-instance mode disabled. - Kilit dosyası oluşturulamadı. Tek kopya kipi kapatıldı. + Kilit dosyası oluşturulamadı. Tek kopya kipi devre dışı bırakıldı. Clearing the clipboard in %1 second(s)… @@ -8866,7 +7807,7 @@ Kernel: %3 %4 filenames of the password databases to open (*.kdbx) - açılacak parola veri tabanlarının dosya adları (*.kdbx) + açılacak parola veritabanlarının dosya adları (*.kdbx) path to a custom config file @@ -8878,7 +7819,7 @@ Kernel: %3 %4 lock all open databases - tüm açık veri tabanlarını kilitle + tüm açık veritabanlarını kilitle key file of the database @@ -8888,6 +7829,14 @@ Kernel: %3 %4 read password of the database from stdin veri tabanının parolası stdin üzerinden okunsun + + allow app screen recordering and screenshots + uygulamanın ekran kaydı yapmasına ve ekran görüntüleri almasına izin ver + + + Locked databases. + Kilitli veritabanları. + Database failed to lock. Veri tabanı kilitlenemedi. @@ -8896,10 +7845,6 @@ Kernel: %3 %4 Another instance of KeePassXC is already running. Başka bir KeePassXC kopyası zaten çalışıyor. - - KeePassXC is not running. No open database to lock - KeePassXC çalışmıyor. Kilitenebilecek bir açık veri tabanı yok - Fatal error while testing the cryptographic functions. Şifreleme işlevleri sınanırken ciddi bir sorun çıktı. @@ -8943,300 +7888,70 @@ Kernel: %3 %4 Anahtar türetme işlevi geçersiz - Access to all entries is denied - Tüm kayıtlara erişim reddedilsin + Please present or touch your YubiKey to continue. + Lütfen, ilerlemek için YubiKey anahtarını takın ya da üzerindeki düğmeye dokunun. - allow screenshots and app recording (Windows/macOS) - ekran görüntüsü ve uygulama kaydı alınabilsin (Windows/macOS) + Show all the attributes of the entry. + Kaydın tüm özniteliklerini görüntüler. + + + Edit a database. + Bir veri tabanını düzenle. + + + Could not change the database key. + Veri tabanı anahtarı değiştirilemedi. + + + Database was not modified. + Veri tabanı değiştirilmedi. + + + Successfully edited the database. + Veri tabanı düzenlendi. + + + Loading the new key file failed: %1 + Yeni anahtar dosyası yüklenemedi: %1 + + + Unset the password for the database. + Veri tabanının parolasını kaldır. + + + Unset the key file for the database. + Veri tabanının anahtar dosyasını kaldır. + + + Cannot use %1 and %2 at the same time. + %1 ve %2 aynı anda kullanılamaz. + + + Cannot remove all the keys from a database. + Bir veri tabanındaki tüm anahtarlar kaldırılamaz. + + + Cannot remove password: The database does not have a password. + Parola kaldırılamadı. Veri tabanının bir parolası yok. + + + Cannot remove file key: The database does not have a file key. + Dosya anahtarı kaldırılamadı. Veri tabanının bir dosya anahtarı yok. + + + Found unexpected Key type %1 + Beklenmeyen %1 anahtar türü bulundu Set the key file for the database. -This option is deprecated, use --set-key-file instead. +This options is deprecated, use --set-key-file instead. Veri tabanının anahtar dosyasını ayarla. Bu seçenekler kullanımdan kaldırıldı. yerine --set-key-file kullanın. - Databases have been locked. - Veri tabanları kilitlendi. - - - Attestation not supported - Sertifika desteklenmiyor - - - Credential is excluded - Kimlik doğrulama bilgileri katılmadı - - - Passkeys request canceled - Geçiş anahtarları isteği iptal edildi - - - Invalid user verification - Kullanıcı doğrulaması geçersiz - - - Empty public key - Herkese açık anahtar boş - - - Invalid URL provided - Belirtilen adres geçersiz - - - Passkeys - Geçiş anahtarları - - - AES initialization failed - AES hazırlanamadı - - - AES encrypt failed - AES şifreleme işlemi yapılamadı - - - Failed to store in Linux Keyring - Linux anahtarlığına kaydedilemedi - - - Polkit returned an error: %1 - Polkit sorunu çıktı: %1 - - - Could not locate key in keyring - Anahtar anahtarlıkta bulunamadı - - - Could not read key in keyring - Anahtar anahtarlıktan okunamadı - - - AES decrypt failed - AES şifre çözme işlemi yapılamadı - - - No Polkit authentication agent was available - Kullanılabilecek bir Polkit kimlik doğrulama aracısı yok - - - Polkit authorization failed - Polkit kimliği doğrulanamadı - - - No Quick Unlock provider is available - Kullanılabilecek bir hızlı kilit açma hizmeti sağlayıcısı yok - - - Failed to init KeePassXC crypto. - KeePassXC şifrelemesi hazırlanamadı. - - - Failed to encrypt key data. - Anahtar verileri şifrelenemedi. - - - Failed to get Windows Hello credential. - Windows Hello kimlik doğrulama bilgileri alınamadı - - - Failed to decrypt key data. - Anahtar verilerinin şifresi çözülemedi - - - Origin is empty or not allowed - Kaynak boş ya da izin verilmiyor - - - Effective domain is not a valid domain - Etkin etki alanı geçerli bir etki alanı değil - - - Origin and RP ID do not match - Kaynak ve RO kimliği aynı değil - - - No supported algorithms were provided - Desteklenen bir algoritma belirtilmemiş - - - Wait for timer to expire - Zamanlayıcının sona ermesini bekleyin - - - Challenge is shorter than required minimum length - Yanıt gerekli en kısa uzunluktan daha kısa - - - user.id does not match the required length - user.id istenilen uzunluğa uygun değil - - - Favorite - Tag for favorite entries - Sık kullanılanlara ekle - - - File does not exist. - Dosya bulunamadı - - - Cannot open file: %1 - Dosya açılamadı: %1 - - - Cannot parse file: %1 at position %2 - Dosya işlenemedi: %1, %2 konumunda - - - Failed to decrypt json file: %1 - JSON dosyasının kodu çözülemedi: %1 - - - Invalid encKeyValidation field - encKeyValidation alanı geçersiz - - - Invalid cipher list within encKeyValidation field - encKeyValidation alanındaki şifreleyici listesi geçersiz - - - Wrong password - Parola yanlış - - - Invalid encrypted data field - Şifrelenmiş veri alanı geçersiz - - - Invalid cipher list within encrypted data field - Şifrelenmiş veri alanındaki şifreleyici listesi geçersiz - - - Cannot initialize cipher - Şifreleyici hazırlanamadı - - - Cannot decrypt data - Verilerin şifresi çözülemedi - - - Bitwarden Import - Bitwarden içe aktarımı - - - Archived - Tag for archived entries - Arşivlenmiş - - - Invalid 1PUX file format: Not a valid ZIP file. - 1PUX dosyasının biçimi geçersiz: ZIP dosyası geçersiz. - - - Invalid 1PUX file format: Missing export.data - 1PUX dosyasının biçimi geçersiz: export.data eksik - - - 1Password Import - 1Password içe aktarımı - - - Enter Shortcut - Kısayolu yazın - - - Action - İşlem - - - Shortcuts - Kısayollar - - - Unknown passkeys error - Bilinmeyen geçiş anahtarları sorunu - - - Invalid KDF iterations, cannot decrypt json file - Anahtar türetme işlevi döngüleri geçersiz. JSON dosyasının şifresi çözülemedi - - - Unsupported format, ensure your Bitwarden export is password-protected - Biçim desteklenmiyor. Bitwarden dışa aktarımınızın parola ile korunduğundan emin olun - - - Only PBKDF and Argon2 are supported, cannot decrypt json file - Yalnızca PBKDF ve Argon2 desteklenir. JSON dosyasının şifresi çözülemedi - - - Reset Shortcuts - Kısayolları sıfırla - - - Double click an action to change its shortcut - Kısayolunu değiştirmek istediğiniz işleme çift tıklayın - - - Filter... - Süz... - - - Shortcut Conflict - Kısayol çakışması - - - Shortcut %1 conflicts with '%2'. Overwrite shortcut? - %1 kısayolu '%2' ile çakışıyor. Kısayol değiştirilsin mi? - - - Cannot generate valid passphrases because the wordlist is too short - Sözcük listesi çok kısa olduğundan geçerli parola ifadeleri oluşturulamıyor - - - Encrypted files are not supported. - Şifrelenmiş dosyalar desteklenmez. - - - Proton Pass Import - Proton Pass içe aktarma - - - Delete plugin data? - Eklenti verileri silinsin mi? - - - Delete plugin data from Entry(s)? - Kayıtlardan eklenti verileri silinsin mi?Kayıtlardan eklenti verileri silinsin mi? - - - Passkey - Geçiş anahtarı - - - Format to use when exporting. Available choices are 'xml', 'csv' or 'html'. Defaults to 'xml'. - Dışa aktarmada kullanılacak biçim. Kullanılabilecek seçenekler 'xml', 'csv' ya da 'html'. Varsayılan biçim: 'xml'. - - - start minimized to the system tray - sistem tepsisine küçültülmüş olarak başlatılsın - - - malformed string, possible unescaped delimiter - dizge bozuk, büyük olasılıkla kaçış karakteri olmayan tırnak var - - - missing closing delimiter - kapanış tırnağı eksik - - - %1, row: %2, column: %3 - %1, %2. satır, %3. sütun - - - Tags - Etiketler + KeePassXC is not running. No open database to lock + KeePassXC çalışmıyor. Kilitenebilecek bir açık veri tabanı yok @@ -9273,39 +7988,20 @@ Bu seçenekler kullanımdan kaldırıldı. yerine --set-key-file kullanın.İç zlib sorunu çıktı: - - RemoteHandler - - Command `%1` did not finish in time. Process was killed. - `%1` komutu zamanında tamamlanamadı. İşlem sonlandırıldı. - - - Failed to upload merged database. Command `%1` did not finish in time. Process was killed. - Birleştirilen veri tabanı yüklenemedi. `%1` komutu zamanında tamamlanamadı. İşlem sonlandırıldı. - - - Invalid download parameters provided. - Belirtilen indirme parametreleri geçersiz. - - - Command `%1` failed to download database. - `%1` komutu veri tabanını indiremedi. - - - Invalid database pointer or upload parameters provided. - Veri tabanı göstergesi ya da belirtilen yükleme parametreleri geçersiz. - - - Command `%1` exited with status code: %2 - `%1` komutundan şu durum kodu ile çıkıldı: %2 - - - Failed to upload merged database. Command `%1` exited with status code: %2 - Birleştirilen veri tabanı yüklenemedi. `%1` komutundan şu durum kodu ile çıkıldı: %2 - - ReportsWidgetBrowserStatistics + + Exclude expired entries from the report + Süresi geçmiş kayıtlar rapora katılmasın + + + Show only entries which have URL set + Yalnızca adresi olan kayıtlar görüntülensin + + + Show only entries which have browser settings in custom data + Yalnızca özel verilerinde tarayıcı ayarları olan kayıtlar görüntülensin + Double-click entries to edit. Düzenlemek için kayıtlara çift tıklayın. @@ -9344,7 +8040,7 @@ Bu seçenekler kullanımdan kaldırıldı. yerine --set-key-file kullanın. No entries with a URL, or none has browser extension settings saved. - Adresi olan bir kayıt yok ya da hiç bir kayıt için tarayıcı eklentisi ayarları yapılmamış. + Adresi olan bir kayıt yok ya da hiç bir kayıt için tarayıcı uzantısı ayarları yapılmamış. Title @@ -9370,53 +8066,44 @@ Bu seçenekler kullanımdan kaldırıldı. yerine --set-key-file kullanın.Exclude from reports Raporlara katılmasın - - Expire Entry(s)… - Kayıt geçerlilik süresi…Kayıtların geçerlilik süresi… - - - Only show entries that have a URL - Yalnızca adresi olan kayıtlar görüntülensin - - - Only show entries that have been explicitly allowed or denied - Yalnızca açıkça izin kabul ya da red edilen kayıtlar görüntülensin - - - Show expired entries - Süresi geçmiş kayıtlar görüntülensin - - - (Expired) - (Süresi geçmiş) - - - Delete plugin data from Entry(s)… - Kayıtlardan eklenti verileri silinsin…Kayıtlardan eklenti verileri silinsin… - ReportsWidgetHealthcheck - Show expired entries - Süresi geçmiş kayıtlar görüntülensin + Exclude expired entries from the report + Süresi geçmiş kayıtlar rapora katılmasın - (Expired) - (Süresi geçmiş) + Also show entries that have been excluded from reports + Raporlara katılmayan kayıtlar da görüntülensin Hover over reason to show additional details. Double-click entries to edit. Ayrıntıları görüntülemek için fareyi neden üzerinde gezdirin. Kaydı düzenlemek için çift tıklayın. + + Bad + Password quality + Kötü + Bad — password must be changed Kötü — Parola mutlaka değiştirilmeli + + Poor + Password quality + Çok kolay + Poor — password should be changed Çok kolay — Parola değiştirilmeli + + Weak + Password quality + Kolay + Weak — consider changing the password Kolay — Parolayı değiştirmeyi değerlendirin @@ -9465,24 +8152,16 @@ Bu seçenekler kullanımdan kaldırıldı. yerine --set-key-file kullanın.Exclude from reports Raporlara katılmasın - - Expire Entry(s)… - Kayıt geçerlilik süresi…Kayıtların geçerlilik süresi… - - - Show entries that have been excluded from reports - Raporlara katılmayan kayıtlar görüntülensin - ReportsWidgetHibp CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. - UYARI: Bu rapor için "Have I Been Pwned" çevrim içi hizmetine (https://haveibeenpwned.com) bilgi gönderilmesi gerekir. İlerlediğinizde, veri tabanı parolalarınız şifreli olarak karıştırılır ve bu karmanın ilk beş karakteri güvenli olarak bu hizmete gönderilir. Veri tabanınız güvende kalır ve gönderilen bilgiler ile yeniden oluşturulamaz. Yalnızca, gönderdiğiniz parolaların sayısı ve IP adresiniz bu hizmete bildirilir. + UYARI: Bu rapor için "Have I Been Pwned" çevrimiçi hizmetine (https://haveibeenpwned.com) bilgi gönderilmesi gerekir. İlerlediğinizde, veri tabanı parolalarınız şifreli olarak karıştırılır ve bu karmanın ilk beş karakteri güvenli olarak bu hizmete gönderilir. Veri tabanınız güvende kalır ve gönderilen bilgiler ile yeniden oluşturulamaz. Yalnızca, gönderdiğiniz parolaların sayısı ve IP adresiniz bu hizmete bildirilir. Perform Online Analysis - Çevrim içi incelemeden geçirin + Çevrimiçi incelemeden geçirin Also show entries that have been excluded from reports @@ -9490,7 +8169,7 @@ Bu seçenekler kullanımdan kaldırıldı. yerine --set-key-file kullanın. This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. - Bu KeePassXC yapımında ağ özellikleri bulunmaz. Parolalarınızın Have I Been Pwned veri tabanlarıyla incelenebilmesi için ağ özelliği gereklidir. + Bu KeePassXC yapımında ağ özellikleri bulunmaz. Parolalarınızın Have I Been Pwned veritabanlarıyla incelenebilmesi için ağ özelliği gereklidir. Congratulations, no exposed passwords! @@ -9568,77 +8247,6 @@ Bu seçenekler kullanımdan kaldırıldı. yerine --set-key-file kullanın.Exclude from reports Raporlara katılmasın - - Expire Entry(s)… - Kayıt geçerlilik süresi…Kayıtların geçerlilik süresi… - - - - ReportsWidgetPasskeys - - Export - Dışa aktar - - - Import - İçe aktar - - - List of entry URLs - Kayıt adreslerinin listesi - - - Title - Başlık - - - Path - Yol - - - Username - Kullanıcı adı - - - URLs - Adresler - - - Edit Entry… - Kaydı düzenle… - - - Delete Entry(s)… - Kaydı sil…Kayıtları sil… - - - Relying Party - Güvenilen taraf - - - Show expired entries - Süresi geçmiş kayıtlar görüntülensin - - - (Expired) - (Süresi geçmiş) - - - Export Confirmation - Dışa aktarma onayı - - - The passkey file will be vulnerable to theft and unauthorized use, if left unsecured. Are you sure you want to continue? - Geçiş anahtarı dosyası, güvenli duruma getirilmeden bırakılırsa hırsızlığa ve yetkisiz kullanıma karşı savunmasız kalır. İlerlemek istediğinize emin misiniz? - - - Please wait, list of entries with passkeys is being updated… - Lütfen geçiş anahtarı bulunan kayıtların listesi güncellenirken bekleyin... - - - No entries with passkeys. - Geçiş anahtarı bulunan bir kayıt yok. - ReportsWidgetStatistics @@ -9813,14 +8421,6 @@ Bu seçenekler kullanımdan kaldırıldı. yerine --set-key-file kullanın.No agent running, cannot list identities. Çalışan bir uygulama yok. Kimlikler listelenemedi. - - Failed to remove all SSH identities from agent. - Uygulamadaki tüm SSH kimlikleri silinemedi. - - - All SSH identities removed from agent. - Uygulamadaki tüm SSH kimlikleri silindi. - SearchHelpWidget @@ -9887,10 +8487,6 @@ Bu seçenekler kullanımdan kaldırıldı. yerine --set-key-file kullanın.Search Help Yardım ara - - Save Search - Aramayı kaydet - Search (%1)… Search placeholder text, %1 is the keyboard shortcut @@ -9904,6 +8500,10 @@ Bu seçenekler kullanımdan kaldırıldı. yerine --set-key-file kullanın.Limit search to selected group Arama seçilmiş grupla sınırlansın + + Save Search + Aramayı kaydet + SettingsClientModel @@ -9959,16 +8559,40 @@ Bu seçenekler kullanımdan kaldırıldı. yerine --set-key-file kullanın. <html><head/><body><p>If enabled, any attempt to read a password must be confirmed. Otherwise, clients can read passwords without confirmation when the database is unlocked.</p><p>This option only covers the access to the password of an entry. Clients can always enumerate the items of exposed databases and query their attributes.</p></body></html> - <html><head/><body><p>Bu seçenek açıldığında, herhangi bir parola okuma girişimi onaylanmalıdır. Yoksa, veri tabanı kilidi açıldığında uygulamalar parolaları onay almadan okuyabilir.</p><p>Bu seçenek yalnızca bir kaydın parolasına erişim iznini kapsar. Uygulamalar her zaman açıkta kalan veri tabanlarının ögelerini öğrenebilir ve özniteliklerini sorgulayabilir.</p></body></html> + <html><head/><body><p>Bu seçenek etkinleştirildiğinde, herhangi bir parola okuma girişimi onaylanmalıdır. Yoksa, veri tabanı kilidi açıldığında uygulamalar parolaları onay almadan okuyabilir.</p><p>Bu seçenek yalnızca bir kaydın parolasına erişim iznini kapsar. Uygualamalar her zaman açıkta kalan veri tabanlarının ögelerini öğrenebilir ve özniteliklerini sorgulayabilir.</p></body></html> Confirm when passwords are retrieved by clients Uygulamalar parola istediğinde onay sorulsun + + <html><head/><body><p><span style=" + font-family:'-apple-system','BlinkMacSystemFont','Segoe UI','Helvetica','Arial','sans-serif','Apple Color + Emoji','Segoe UI Emoji'; font-size:14px; color:#24292e; background-color:#ffffff;">This setting does + not override disabling recycle bin prompts</span></p></body></html> + + <html><head/><body><p><span style=" + font-family:'-apple-system','BlinkMacSystemFont','Segoe UI','Helvetica','Arial','sans-serif','Apple Color + Emoji','Segoe UI Emoji'; font-size:14px; color:#24292e; background-color:#ffffff;">Bu seçenek çöp + kutusu sorularını devre dışı bırakmaz</span></p></body></html> + + Confirm when clients request entry deletion Uygulamalar kayıt silmek istediğinde onay sorulsun + + <html><head/><body><p>This improves compatibility with certain applications + which search for password without unlocking the database first.</p><p>But enabling this may also + crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a + different value set in applications.)</p></body></html> + + <html><head/><body><p>Böylece, önce veri tabanı kilidini açmadan + parola arayan belirli uygulamalar ile daha iyi uyumluluk sağlanabilir.</p><p>Ancak bu seçenek etkinleştirildiğinde, + belirli bir süre içinde veri tabanının kilidi açılamazsa uygulama çökebilir. (Genellikle 25s. Ancak uygulamalarda + farklı bir değer ayarlanmış olabilir.)</p></body></html> + + Prompt to unlock database before searching Aramadan önce veri tabanı kilidinin açılması istensin @@ -9991,15 +8615,7 @@ Bu seçenekler kullanımdan kaldırıldı. yerine --set-key-file kullanın. Save current changes to activate the plugin and enable editing of this section. - Eklentiyi kullanıma almak için yapılmış değişiklikleri kaydedin ve bu bölümü düzenlemeyi açın. - - - <html><head/><body><p>This setting does not override disabling recycle bin prompts </p></body></html> - <html><head/><body><p>Bu ayar, geri dönüşüm kutusu sorularının kapatılmasını değiştirmez </p></body></html> - - - <html><head/><body><p>This improves compatibility with certain applications which search for password without unlocking the database first.</p><p>But enabling this may also crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a different value set in applications.) </p></body></html> - <html><head/><body><p>Böylece, önce veri tabanı kilidini açmadan parola arayan belirli uygulamalar ile daha iyi uyumluluk sağlanabilir.</p><p>Ancak bu seçenek açıldığında, belirli bir süre içinde veri tabanının kilidi açılamazsa uygulama çökebilir. (Genellikle 25s. Ancak uygulamalarda farklı bir değer ayarlanmış olabilir.)</p></body></html> + Eklentiyi etkinleştirmek için yapılmış değişiklikleri kaydedin ve bu bölümü düzenlemeyi etkinleştirin. @@ -10108,14 +8724,6 @@ Bu seçenekler kullanımdan kaldırıldı. yerine --set-key-file kullanın. TagModel - - Clear Search - Aramayı temizle - - - All Entries - Tüm kayıtlar - Expired Süresi geçmiş @@ -10124,6 +8732,14 @@ Bu seçenekler kullanımdan kaldırıldı. yerine --set-key-file kullanın.Weak Passwords Kolay parolalar + + All Entries + Tüm kayıtlar + + + Clear Search + Aramayı temizle + TagView @@ -10254,7 +8870,7 @@ Example: JBSWY3DPEHPK3PXP Are you sure you want to delete TOTP settings for this entry? - Bu kaydın tek kullanımlık parola ayarlarını silmek istediğinize emin misiniz ? + Bu kayıdın tek kullanımlık parola ayarlarını silmek istediğinize emin misiniz ? @@ -10301,9 +8917,29 @@ Example: JBSWY3DPEHPK3PXP Start storing your passwords securely in a KeePassXC database Parolalarınızı KeePassXC veri tabanında güvende tutmaya başlayın + + Create new database + Yeni veri tabanı oluştur + + + Open existing database + Var olan veri tabanını aç + + + Import from KeePass 1 + KeePass 1 içe aktar + + + Import from 1Password + 1Password içe aktar + + + Import from CSV + CSV içe aktar + Recent databases - Son veri tabanları + Son veritabanları Open a recent database @@ -10313,18 +8949,6 @@ Example: JBSWY3DPEHPK3PXP Welcome to KeePassXC %1 KeePassXC %1 sürümüne hoş geldiniz - - Create Database - Veri tabanı oluştur - - - Open Database - Veri tabanını aç - - - Import File - İçe aktarma dosyası - WinUtils @@ -10341,8 +8965,31 @@ Example: JBSWY3DPEHPK3PXP Genel kısayol kaydı oluşturulamadı + + WindowsHello + + Failed to init KeePassXC crypto. + KeePassXC şifrelemesi hazırlanamadı. + + + Failed to encrypt key data. + Anahtar verileri şifrelenemedi. + + + Failed to get Windows Hello credential. + Windows Hello kimlik doğrulama bilgileri alınamadı + + + Failed to decrypt key data. + Anahtar verilerinin şifresi çözülemedi + + YubiKey + + %1 No interface, slot %2 + %1 arabirimi yok, %2. yuva + General: Genel: @@ -10354,6 +9001,14 @@ Example: JBSWY3DPEHPK3PXP YubiKeyEditWidget + + Refresh hardware tokens + Donanımsal doğrulayıcıları yenile + + + Refresh + Yenile + Hardware key slot selection Donanımsal anahtar yuvası seçimi @@ -10386,6 +9041,10 @@ Example: JBSWY3DPEHPK3PXP Challenge-Response set, click to change or remove Soru/yanıt ayarlandı. Değiştirmek ya da kaldırmak için tıklayın + + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + <p>Bir <a href="https://www.yubico.com/">YubiKey</a> ya da <a href="https://onlykey.io">OnlyKey</a> aygıtınız varsa, ek güvenlik sağlamak için kullanabilirsiniz.</p><p>Anahtar yuvalarından birinin <a href="https://www.yubico.com/products/services-software/challenge-response/">HMAC-SHA1 soru/yanıt</a> olarak programlanması gerekir.</p> + Detecting hardware keys… Donanımsal anahtarlar algılanıyor... @@ -10394,25 +9053,28 @@ Example: JBSWY3DPEHPK3PXP No hardware keys detected Herhangi bir donanımsal anahtar algılanamadı + + + YubiKeyInterface - Refresh hardware keys - Donanımsal anahtarları yenile - - - <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed with <a href="https://keepassxc.org/docs/#faq-yubikey-howto">Challenge-Response</a>.</p> - <p>Bir <a href="https://www.yubico.com/">YubiKey</a> ya da <a href="https://onlykey.io">OnlyKey</a> aygıtınız varsa, ek güvenlik sağlamak için kullanabilirsiniz.</p><p>Anahtar yuvalarından birinin <a href="https://www.yubico.com/products/services-software/challenge-response/">soru/yanıt</a> olarak programlanması gerekir.</p> - - - Hardware keys found, but no slots are configured - Donanımsal anahtar bulundu. Ancak herhangi bir yuva yapılandırılmamış + %1 Invalid slot specified - %2 + %1 Belirtilen yuva geçersiz - %2 YubiKeyInterfacePCSC + + (PCSC) %1 [%2] Challenge-Response - Slot %3 + (PCSC) %1 [%2] soru/yanıt - %3. yuva + The YubiKey PCSC interface has not been initialized. YubiKey PCSC arayüzü başlatılamadı. + + Hardware key is currently in use. + Donanımsal anahtar kullanılıyor. + Could not find or access hardware key with serial number %1. Please present it to continue. %1 seri numaralı donanım anahtarı bulunamadı ya da erişilemiyor. Lütfen ilerlemek için anahtarı takın. @@ -10429,21 +9091,6 @@ Example: JBSWY3DPEHPK3PXP Failed to complete a challenge-response, the PCSC error code was: %1 Bir soru/yanıt tamamlanamadı. PCSC hata kodu: %1 - - (NFC) %1 [%2] - Slot %3, %4 - YubiKey display fields - (NFC) %1 [%2] - Yuva %3, %4 - - - Press - USB Challenge-Response Key interaction request - Basın - - - Passive - USB Challenge-Response Key no interaction required - Pasif - YubiKeyInterfaceUSB @@ -10451,6 +9098,14 @@ Example: JBSWY3DPEHPK3PXP Unknown Bilinmiyor + + (USB) %1 [%2] Configured Slot - %3 + (USB) %1 [%2] yapılandırılmış yuva - %3 + + + (USB) %1 [%2] Challenge-Response - Slot %3 - %4 + (USB) %1 [%2] soru/yanıt - %3. yuva - %4 + Press USB Challenge-Response Key interaction request @@ -10465,6 +9120,10 @@ Example: JBSWY3DPEHPK3PXP The YubiKey USB interface has not been initialized. YubiKey USB arayüzü başlatılamadı. + + Hardware key is currently in use. + Donanımsal anahtar kullanılıyor. + Could not find hardware key with serial number %1. Please plug it in to continue. %1 seri numaralı donanımsal anahtar bulunamadı. Lütfen ilerlemek için anahtarı takın. @@ -10481,15 +9140,5 @@ Example: JBSWY3DPEHPK3PXP Failed to complete a challenge-response, the specific error was: %1 Soru/yanıt tamamlanamadı. Oluşan hata: %1 - - %1 [%2] - Slot %3 - YubiKey NEO display fields - %1 [%2] - Yuva %3 - - - %1 [%2] - Slot %3, %4 - YubiKey display fields - %1 [%2] - Yuva %3, %4 - \ No newline at end of file diff --git a/share/translations/keepassxc_uk.ts b/share/translations/keepassxc_uk.ts index 8c34fa432..3c46be730 100644 --- a/share/translations/keepassxc_uk.ts +++ b/share/translations/keepassxc_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. @@ -35,7 +35,7 @@ Debug Info - Інформація з налагоджування + Зневаджувальна інформація Include the following information whenever you report a bug: @@ -50,7 +50,7 @@ AccessControlDialog KeePassXC - Access Request - KeePassXC – запит доступу + KeePassXC - Запит доступу Non-existing/inaccessible executable path. Please double-check the client is legit. @@ -58,7 +58,8 @@ <html><head/><body><p><span style=" font-weight:600;">%1 </span>is requesting access to the following entries:</p></body></html> - <html><head/><body><p><span style=" font-weight:600;">%1 </span>запитує доступ до таких записів:</p></body></html> + <html><head/><body><p><span style=" font-weight:600;">%1 </span>запитує доступ до таких записів: </p></body></html> + Name @@ -80,10 +81,6 @@ Details Подробиці - - Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. - Ваше рішення зберігатиметься поки клієнт, що виконує запит і KeePassXC запущені. - Remember Запам'ятати @@ -92,6 +89,10 @@ Allow Selected Дозволити вибрані + + Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. + Ваше рішення зберігатиметься поки клієнт, що виконує запит і KeePassXC запущені. + Deny All && Future Заборонити всі && майбутні @@ -122,17 +123,13 @@ Use OpenSSH Використовувати OpenSSH - - Use both agents - Використовувати обидва агенти - SSH_AUTH_SOCK override - Перевизначення SSH_AUTH_SOCK + перевизначення SSH_AUTH_SOCK SSH_AUTH_SOCK value - Значення SSH_AUTH_SOCK + значення SSH_AUTH_SOCK (empty) @@ -140,11 +137,11 @@ SSH_SK_PROVIDER value - Значення SSH_SK_PROVIDER + значення SSH_SK_PROVIDER SSH_SK_PROVIDER override - Перевизначення SSH_SK_PROVIDER + перевизначення SSH_SK_PROVIDER No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. @@ -154,6 +151,10 @@ SSH Agent connection is working! З'єднання з SSH Agent активне! + + Use both agents + Використовувати обидва агенти + ApplicationSettingsWidget @@ -169,10 +170,6 @@ Security Безпека - - This setting cannot be enabled when minimize on unlock is enabled. - Це налаштування не можна увімкнути, якщо увімкнено згортання чи розблокування. - Access error for config file %1 Помилка доступу до файлу конфігурації %1 @@ -217,49 +214,21 @@ You must restart the application to set the new language. Would you like to restart now? Для встановлення нової мови потрібно перезапустити програму. Бажаєте перезапустити зараз? + + Reset Settings? + Скинути налаштування? + + + Are you sure you want to reset all general and security settings to default? + Ви дійсно хочете відновити всі типові налаштування програми? + Select backup storage directory Виберіть каталог для резервного копіювання - Confirm Reset - Підтвердити скидання - - - Are you sure you want to reset all settings to default? - Впевнені, що хочете відновити всі налаштування за замовчуванням? - - - Import KeePassXC Settings - Імпортувати налаштування KeePassXC - - - Failed to import settings from %1, not a valid settings file. - Не вдалося імпортувати налаштування з %1, неправильний файл налаштувань. - - - Export KeePassXC Settings - Експортувати налаштування KeePassXC - - - Small - - - - Normal - - - - Medium - - - - Large - - - - Custom - + This setting cannot be enabled when minimize on unlock is enabled. + Це налаштування не можна увімкнути, якщо увімкнено згортання чи розблокування. @@ -292,10 +261,6 @@ Remember previously used databases Пам'ятати попередні бази даних - - recent files - недавні файли - Load previously open databases on startup Завантажувати раніше відкриті бази даних під час запуску @@ -310,7 +275,26 @@ Include beta releases when checking for updates - Пропонувати бета-версії для оновлення + Пропонувати бета випуски для оновлення + + + On database unlock, show entries that + При розблокуванні бази даних показати записи, які + + + have expired + On database unlock, show entries that... + протерміновані + + + days + On database unlock, show entries that will expire within %1 days + дні + + + will expire within + On database unlock, show entries that... + термін дії завершиться через File Management @@ -336,10 +320,22 @@ Backup database file before saving Створювати резервну копію бази даних перед збереженням + + Backup destination + Шлях резервного копіювання + + + Specifies the database backup file location. Occurrences of "{DB_FILENAME}" are replaced with the filename of the saved database without extension. {TIME:<format>} is replaced with the backup time, see https://doc.qt.io/qt-5/qdatetime.html#toString. <format> defaults to format string "dd_MM_yyyy_hh-mm-ss". + Вказує розташування файлу резервної копії бази даних. Входження "{DB_FILENAME}" замінюються назвою файлу збереженої бази даних без розширення файлу. {TIME:<format>} замінюється часом резервної копії. Перегляньте https://doc.qt.io/qt-5/qdatetime.html#toString. <format> типові значення рядка формату "dd_MM_yyyy_hh-mm-ss". + {DB_FILENAME}.old.kdbx {DB_FILENAME}.old.kdbx + + Choose... + Обрати... + Use alternative saving method (may solve problems with Dropbox, Google Drive, GVFS, etc.) Використовувати альтернативний спосіб збереження (може розв'язати проблеми з Dropbox, Google Диском, GVFS та ін.) @@ -378,7 +374,7 @@ Favicon download timeout: - Ліміт часу для завантаження піктограми: + Ліміт часу для завантаження фавікону: Website icon download timeout in seconds @@ -415,11 +411,7 @@ Toolbar button style: - Стиль кнопки в панелі інструментів: - - - Show passwords in color - Кольорові символи паролів + Стиль кнопок панелі інструментів: Use monospaced font for notes @@ -507,69 +499,12 @@ Пам'ятати останній введений запис для: - On database unlock, show entries that will expire within - При розблокуванні бази даних показувати записи, термін дії яких закінчується протягом + recent files + недавні файли - On database unlock, show entries that will expire within - При розблокуванні бази даних показувати записи, термін дії яких закінчується протягом - - - days - number of days warning for password expiration - дні - - - Destination format: - Формат призначення: - - - <html><head/><body><p><span style=" font-weight:600;">{DB_FILENAME}</span> is replaced with the filename of the saved database without extension</p><p><span style=" font-weight:600;">{TIME:&lt;format&gt;}</span> is replaced with the specified time format (default: dd_MM_yyyy_hh-mm-ss)</p><p>See the User Guide for more details</p></body></html> - <html><head/><body><p><span style=" font-weight:600;">{DB_FILENAME}</span> замінюється на ім'я файла збереженої бази даних без розширення</p><p><span style=" font-weight:600;">{TIME:&lt;format&gt;}</span> замінюється на вказаний формат часу (за замовчуванням: дд_ММ_рррр_чч-хх-сс)</p><p>Дивіться Посібник користувача для більш детальної інформації</p></body></html> - - - Choose folder... - Вибрати папку... - - - Show confirmation before moving entries to recycle bin - Показувати підтвердження перед переміщенням записів до кошика - - - Copy data on double clicking field in entry view - Копіювати дані подвійним кліком по полю перегляду записів - - - Show toolbar - Показати панель инструментів - - - Show the menu bar by pressing the Alt key - Показати рядок меню при натисканні клавіші Alt - - - Show menubar - Показати меню - - - Import settings… - Імпорт налаштувань... - - - Export settings… - Експорт налаштувань... - - - Open browser on double clicking URL field in entry view - Відкрити Браузер подвійним кліком на полі URL-адреси при перегляді записів - - - Font size: - - - - Font size selection - + Show passwords in color + Кольорові символи паролів @@ -624,6 +559,10 @@ Lock databases after minimizing the window Блокувати бази даних після згортання вікна + + Require password repeat when it is visible + Вимагати підтвердження пароля, якщо він не прихований + Hide passwords when editing them Приховувати паролі під час їх редагування @@ -636,6 +575,18 @@ Hide passwords in the entry preview panel Приховувати паролі на панелі перегляду запису + + Hide entry notes by default + Типово приховувати нотатки запису + + + Move entries to recycle bin without confirmation + Переміщувати записи до смітника без підтвердження + + + Enable double click to copy the username/password entry columns + Увімкнути подвійний клік, щоб скопіювати імʼя користувача/пароль + Privacy Приватність @@ -648,18 +599,6 @@ Hide TOTP in the entry preview panel Приховувати TOTP на панелі перегляду запису - - Lock databases when switching user - Блокування баз даних при зміні користувача - - - Lock Options - Параметри блокування - - - Hide notes in the entry preview panel - Приховати нотатки на панелі попереднього перегляду - AutoType @@ -704,13 +643,27 @@ Виявлено надто довгу затримку. Максимум %1: %2 - Entry does not have attribute for PICKCHARS: %1 - Запис не має атрибуту для PICKCHARS: %1 + Invalid conversion type: %1 + Неприпустимий тип перетворення: %1 + + + Invalid conversion syntax: %1 + Неприпустимий синтаксис перетворення: %1 + + + Invalid regular expression syntax %1 +%2 + Неприпустимий синтаксис регулярного виразу %1 +%2 Invalid placeholder: %1 Неприпустимий заповнювач: %1 + + Entry does not have attribute for PICKCHARS: %1 + Запис не має атрибуту для PICKCHARS: %1 + AutoTypeAssociationsModel @@ -752,22 +705,22 @@ AutoTypePlatformX11 + + Trying to send invalid keysym. + Спроба відправити недійсний keysym. + Sequence aborted: Caps Lock is on Послідовність перервано: Caps Lock увімкнено Sequence aborted: Modifier keys held by user - Послідовність перервано: функціональні клавіші утримуються користувачем + Послідовність перервано: Функціональні клавіші утримуються користувачем Unable to get valid keycode for key: Не вдається отримати дійсний код ключа: - - Trying to send invalid keyboard symbol. - Спроба надіслати недійсний символ клавіатури. - AutoTypeSelectDialog @@ -842,7 +795,7 @@ Ctrl+4 - Використати віртуальну клавіатуру (ті BrowserAccessControlDialog KeePassXC - Browser Access Request - KeePassXC – запит доступу до браузера + Запит доступу для KeePassXC-Browser %1 is requesting access to the following entries: @@ -872,13 +825,13 @@ Ctrl+4 - Використати віртуальну клавіатуру (ті Disable for this site Вимкнути для цього сайту - - Undo - Відмінити - BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + Зберегти запис KeePassXC-Browser + Ok Гаразд @@ -893,74 +846,13 @@ Please select the correct database for saving credentials. У вас відкрито декілька баз даних. Оберіть правильну базу даних для збереження облікових даних. - - KeePassXC - Select Database - KeePassXC - Вибір бази даних - - - - BrowserPasskeysConfirmationDialog - - Cancel - Скасувати - - - Update - Оновлення - - - Authenticate - Автентифікація - - - Register new - Зареєструвати новий - - - Register - Зареєструватися - - - Timeout in <b>%n</b> seconds... - Тайм-аут через <b>%n</b> секунду...Тайм-аут через <b>%n</b> секунди...Тайм-аут через <b>%n</b> секунд...Тайм-аут через <b>%n</b> секунд... - - - Relying Party: %1 - Довірена сторона: %1 - - - Username: %1 - Ім'я користувача: %1 - - - KeePassXC - Passkey credentials - KeePassXC - Облікові дані Passkey - - - Add to existing entry - Додати до існуючого запису - - - Existing passkey found. -Do you want to register a new passkey for: - Знайдено існуючий пароль. -Ви хочете зареєструвати новий пароль для: - - - Select the existing passkey and press Update to replace it. - Виберіть існуючий пароль і натисніть "Оновити", щоб замінити його. - - - Authenticate passkey credentials for: - Аутентифікувати облікові дані пароля для: - - - Do you want to register a passkey for: - Ви хочете зареєструвати пароль для: - BrowserService + + KeePassXC: Create a new group + KeePassXC: Створити нову групу + A request for creating a new group "%1" has been received. Do you want to create this group? @@ -969,6 +861,10 @@ Do you want to create this group? Ви хочете створити цю групу? + + KeePassXC: New key association request + KeePassXC: Новий запит на асоціацію ключа + You have received an association request for the following database: %1 @@ -985,15 +881,27 @@ chrome-ноутбук. 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? Спільний ключ шифрування з назвою "%1" вже існує. Хочете його перезаписати? + + KeePassXC: Update Entry + KeePassXC: Оновити запис + Do you want to update the information in %1 - %2? - Хочете оновити інформацію в %1 – %2? + Хочете оновити інформацію в %1 - %2? + + + KeePassXC: Delete entry + KeePassXC: Видалити запис A request for deleting entry "%1" has been received. @@ -1004,58 +912,50 @@ Do you want to delete the entry? - %1 (Passkey) - %1 (Passkey) + Converting attributes to custom data… + Конвертування атрибутів на користувацькі дані… - KeePassXC - Create a new group - KeePassXC - Створити нову групу + Abort + Скасувати - Disable - Вимкнути + KeePassXC: Converted KeePassHTTP attributes + KeePassXC: Атрибути KeePassHTTP конвертовано - KeePassXC - Overwrite existing key? - KeePassXC - Перезаписати наявний ключ? + 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 - Update Entry - KeePassXC - Оновити запис + KeePassXC: No entry with KeePassHTTP attributes found! + KeePassXC: Записів з атрибутами KeePassHTTP не знайдено! - KeePassXC - Delete entry - KeePassXC - Видалити запис + The active database does not contain an entry with KeePassHTTP attributes. + Активна база даних не містить запису з атрибутами KeePassHTTP. - KeePassXC - New key association request - KeePassXC - Запит на асоціацію нового ключа + Don't show this warning again + Більше не показувати це попередження - Passkey - Passkey + KeePassXC: Legacy browser integration settings detected + KeePassXC: виявлено застарілі налаштування інтеграції з браузером - KeePassXC - Passkey credentials - KeePassXC - Облікові дані ключа доступу - - - Register a new passkey to this entry: - Зареєструвати новий пароль для цього запису: - - - KeePassXC - Update passkey - KeePassXC - Оновити пароль - - - Entry already has a passkey. -Do you want to overwrite the passkey in %1 - %2? - Запис уже має пароль. -Ви хочете перезаписати пароль у %1 - %2? - - - Register - Зареєструватися + 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? + Слід перемістити параметри для KeePassXC-Browser до налаштувань бази даних. +Це потрібно для підтримання активного зв'язку з вашим браузером. +Бажаєте перемістити наявні налаштування? @@ -1076,6 +976,10 @@ Do you want to overwrite the passkey in %1 - %2? General Загальні + + Browsers installed as snaps are currently not supported. + Наразі не підтримуються браузери, встановлені як Snap. + Enable integration for these browsers: Увімкнути інтеграцію з такими браузерами: @@ -1247,6 +1151,26 @@ Do you want to overwrite the passkey in %1 - %2? Custom extension ID Власний ідентифікатор розширення + + Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 + Через заходи безпеки у Snap, ви маєте запустити скрипт для увімкнення інтеграції з браузером.<br />Ви можете знайти цей скрипт у %1 + + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 + Щоб запрацювала інтеграція з браузером, потрібне розширення KeePassXC-Browser. <br />Завантажте його для %1, %2 та %3. %4 + + + Please see special instructions for browser extension use below + Нижче ви можете переглянути інструкцію для користування розширенням браузера + + + <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. + <b>Помилка:</b> Неможливо знайти розташування власного проксі!<br/>Інтеграція з браузером НЕ ПРАЦЮВАТИМЕ без програми проксі. + + + <b>Warning:</b> The following options can be dangerous! + <b>Попередження:</b> ці параметри можуть бути небезпечними! + Executable Files Виконувані файли @@ -1263,46 +1187,6 @@ Do you want to overwrite the passkey in %1 - %2? Select native messaging host folder location Вибрати розташування теки для вузла власного обміну повідомленнями - - Allow keepassxc-proxy to list all entries with their title, URL and UUID in connected databases. - Дозволити keepassxc-proxy показувати всі записи з назвою, URL-адресою та UUID у під'єднаній базі даних. - - - Allow limited access to all entries in connected databases (ignores site access restrictions) - Дозволити обмежений доступ до всіх записів у під'єднаних базах даних (ігнорує обмеження доступу до сайтів) - - - <b>Warning:</b> Only adjust these settings if necessary. - <b>Попередження:</b> Змінюйте ці налаштування лише за необхідності. - - - The custom proxy location does not exist. - Користувацького розташування проксі не існує. - - - <b>Error:</b> The custom proxy location does not exist. Correct this in the advanced settings tab. - <b>Помилка:</b> Місцезнаходження користувацького проксі не існує. Виправте це на вкладці розширених налаштувань. - - - <b>Error:</b> The installed proxy executable is missing from the expected location: %1<br/>Please set a custom proxy location in the advanced settings or reinstall the application. - <b>Помилка:</b> Встановлений проксі відсутній: %1<br/> Встановіть проксі в додаткових налаштуваннях або переінсталюйте програму. - - - Allows using insecure http://localhost with passkeys for testing purposes. - Дозволяє використовувати небезпечний http://localhost з паролями для тестування. - - - Allow using localhost with passkeys - Дозволити використовувати localhost з паролями - - - KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. - KeePassXC-Browser потрібен для роботи інтеграції з браузером. <br />Завантажте його для %1 та %2 і %3. - - - Browsers installed using Snap or Flatpak are not supported with exception to Firefox installed using Snap. - - CloneDialog @@ -1325,6 +1209,14 @@ Do you want to overwrite the passkey in %1 - %2? CsvImportWidget + + Import CSV fields + Імпортувати поля CSV + + + filename + назва файлу + size, rows, columns розмір, рядки, стовпчики @@ -1433,43 +1325,50 @@ Do you want to overwrite the passkey in %1 - %2? Column %1 Стовпчик %1 + + Imported from CSV file + Імпортовано з файлу CSV + + + Original data: + Початкові дані: + + + Error(s) detected in CSV file! + У файлі CSV виявлено помилки! + [%n more message(s) skipped] [ще %n повідомлення пропущено][ще %n повідомлення пропущено][ще %n повідомлень пропущено][ще %n повідомлень пропущено] - Failed to parse CSV file: %1 - Не вдалося розібрати CSV файл: %1 + Error + Помилка - Imported from CSV file: %1 - Імпортовано з файлу CSV: %1 - - - No Title Selected - Назва не вибрана - - - No title column was selected, entries will be hard to tell apart. -Are you sure you want to import? - Не вибрано стовпець з назвою, записи буде важко розрізнити. -Ви впевнені, що хочете імпортувати? - - - Tags - Мітки + CSV import: writer has errors: +%1 + Імпортування CSV: засіб запису має помилки: +%1 CsvParserModel + + %1, %2, %3 + file info: bytes, rows, columns + %1, %2, %3 + + + %n byte(s) + %n байт%n байта%n байтів%n байта + %n row(s) - CSV row count %n рядок%n рядки%n рядків%n рядки %n column(s) - CSV column count %n стовпчик%n стовпчика%n стовпчиків%n стовпчика @@ -1522,20 +1421,12 @@ Backup database located at %2 Recycle Bin Смітник - - Database file read error. - - - - No file path was provided. - - DatabaseOpenDialog Unlock Database - KeePassXC - Розблокувати базу даних – KeePassXC + Розблокувати базу даних - KeePassXC @@ -1552,10 +1443,30 @@ Backup database located at %2 Password field Поле пароля + + Enter Additional Credentials (if any): + Введіть додаткові облікові дані (за наявності): + + + Key File: + Ключовий файл: + + + Key file help + Довідка щодо ключового файлу + Hardware key slot selection Вибір роз'єму апаратного ключа + + Hardware Key: + Апаратний ключ: + + + Hardware key help + Довідка щодо апаратного ключа + Key file to unlock the database Ключовий файл для розблокування бази даних @@ -1568,6 +1479,14 @@ Backup database located at %2 Browse… Огляд… + + Refresh hardware tokens + Оновити апаратні токени + + + Refresh + Оновити + Unlock Database Розблокувати базу даних @@ -1630,6 +1549,10 @@ To prevent this error from appearing, you must go to "Database Settings / S Retry with empty password Спробувати знову з порожнім паролем + + Failed to authenticate with Touch ID + Не вдалось авторизуватися з Touch ID + Failed to open key file: %1 Не вдалося відкрити ключовий файл: %1 @@ -1662,69 +1585,41 @@ To prevent this error from appearing, you must go to "Database Settings / S Cannot use database file as key file Неможливо використати файл бази даних як ключовий файл + + You cannot use your database file as a key file. +If you do not have a key file, please leave the field empty. + Не можна використати файл бази даних як ключовий файл. +Якщо у вас немає ключового файлу, залиште це поле порожнім. + + + Detecting hardware keys… + Виявлення апаратних ключів… + + + No hardware keys detected + Апаратних ключів не виявлено + + + Select hardware key… + Вибрати апаратний ключ… + + + <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information…</p> + <p>Щоб вдосконалити безпеку бази даних, на додачу до пароля ви можете використовувати секретний файл. Такий файл можна згенерувати в налаштуваннях безпеки бази даних.</p><p>Це <strong>not</strong> ваш файл бази даних *.kdbx!<br>Якщо у вас немає ключового файлу, залиште це поле порожнім.</p><p>Натисніть для докладнішої інформації…</p> + + + <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +<p>Click for more information…</p> + <p>Можна використовувати апаратний ключ безпеки, як-от <strong>YubiKey</strong> або <strong>OnlyKey</strong>, з налаштованими роз'ємами для HMAC-SHA1.</p> +<p>Натисніть для докладнішої інформації…</p> + authenticate to access the database автентифікуватися для доступу до бази даних - Failed to authenticate with Quick Unlock: %1 - Не вдалося аутентифікуватися за допомогою швидкого розблокування (Quick Unlock): %1 - - - Select Key File: - Виберіть файл-ключ: - - - <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!</p> - <p>На додачу до пароля, ви можете використовувати секретний файл, щоб підвищити безпеку вашої бази даних. Цей файл можна створити у налаштуваннях безпеки вашої бази даних.</p><p>Це <strong>не</strong> ваш файл бази даних *.kdbx!</p> - - - Use hardware key [Serial: %1] - Використовувати апаратний ключ [Серійний номер: %1] - - - Use hardware key - Виберіть апаратний ключ - - - Your database file is NOT a key file! -If you don't have a key file or don't know what that is, you don't have to select one. - Ваш файл бази даних НЕ є ключовим файлом! -Якщо у вас немає ключового файлу або ви не знаєте, що це таке, вам не потрібно нічого вибирати. - - - KeePassXC database file selected - Вибрано файл бази даних KeePassXC - - - The file you selected looks like a database file. -A database file is NOT a key file! - -Are you sure you want to continue with this file?. - Вибраний вами файл виглядає як файл бази даних. -Файл бази даних НЕ є ключовим файлом! - -Ви впевнені, що хочете продовжити з цим файлом? - - - No hardware keys found. - Апаратних ключів не виявлено. - - - Refresh Hardware Keys - Оновити апаратні ключі - - - Click to add a key file. - Натисніть, щоб додати файл ключа. - - - <a href="#" style="text-decoration: underline">I have a key file</a> - <a href="#" style="text-decoration: underline">У мене є файл ключа</a> - - - Hardware keys found, but no slots are configured. - Апаратні ключі знайдено, але жоден слот не налаштовано. + Failed to authenticate with Windows Hello: %1 + Не вдалося автентифікуватися через Windows Hello: %1 @@ -1736,6 +1631,10 @@ Are you sure you want to continue with this file?. DatabaseSettingsDialog + + Advanced Settings + Розширені налаштування + General Загальні @@ -1760,22 +1659,6 @@ Are you sure you want to continue with this file?. Maintenance Обслуговування - - KeeShare - KeeShare - - - Secret Service Integration - Сполучення зі «Службою таємниць». - - - Remote Sync - Віддалена синхронізація - - - Database Settings: %1 - Параметри бази даних: %1 - DatabaseSettingsWidgetBrowser @@ -1783,6 +1666,18 @@ Are you sure you want to continue with this file?. KeePassXC-Browser settings Налаштування KeePassXC-Browser + + Convert KeePassHTTP data + Конвертувати дані KeePassHTTP + + + Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data + Конвертувати застарілі атрибути KeePassHTTP у користувацькі дані, сумісні з KeePassXC-Browser + + + Refresh database root group ID + Оновити ідентифікатор кореневої групи бази даних + Disconnect all browsers Від'єднати всі браузери @@ -1791,10 +1686,6 @@ Are you sure you want to continue with this file?. Forget all site-specific settings on entries Забути налаштування сайтів у всіх записах - - Refresh database root group ID - Оновити ідентифікатор кореневої групи бази даних - Stored keys Збережені ключі @@ -1843,10 +1734,18 @@ This may prevent connection to the browser plugin. Ви дійсно хочете від'єднати всі браузери? Це може перешкодити з'єднанню з плагіном браузера. + + KeePassXC: No keys found + KeePassXC: Ключів не знайдено + No shared encryption keys found in KeePassXC settings. У налаштуваннях KeePassXC не знайдено спільних ключів шифрування. + + KeePassXC: Removed keys from database + KeePassXC: Ключі вилучено з бази даних + Successfully removed %n encryption key(s) from KeePassXC settings. З налаштувань KeePassXC успішно вилучено %n ключ шифрування.З налаштувань KeePassXC успішно вилучено %n ключі шифрування.З налаштувань KeePassXC успішно вилучено %n ключів шифрування.З налаштувань KeePassXC успішно вилучено %n ключів шифрування. @@ -1865,14 +1764,32 @@ Permissions to access entries will be revoked. 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. Активна база даних не містить запису з дозволами. + + Move KeePassHTTP attributes to custom data + Перемістити атрибути KeePassHTTP до користувацьких даних + + + Do you really want to convert all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + Ви дійсно хочете конвертувати всі застарілі дані інтеграції з браузером у найновіший стандарт? +Це потрібно для підтримки сумісності з плагіном браузера. + Refresh database ID Оновити ідентифікатор бази даних @@ -1883,26 +1800,6 @@ This is only necessary if your database is a copy of another and the browser ext Ви дійсно хочете оновити ідентифікатор бази даних? Це потрібно лише якщо ваша база даних є копією іншої та неможливо під'єднати розширення браузера. - - Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data - Конвертувати застарілі атрибути KeePassHTTP у користувацькі дані, сумісні з KeePassXC-Browser - - - No keys found - Не знайдено жодних ключів - - - Removed keys from database - Видалено ключі з бази даних - - - Removed permissions - Вилучено дозволи - - - No entry with permissions found! - Не знайдено записи з дозволами! - DatabaseSettingsWidgetDatabaseKey @@ -1942,18 +1839,6 @@ Are you sure you want to continue without a password? Failed to change database credentials Не вдалося змінити облікові дані бази даних - - Weak password - Слабкий пароль - - - This is a weak password! For better protection of your secrets, you should choose a stronger password. - Це слабкий пароль! Для кращого захисту ваших секретів, вам слід обрати складніший пароль. - - - The provided password does not meet the minimum quality requirement. - Наданий пароль не відповідає мінімальним вимогам до якості. - DatabaseSettingsWidgetEncryption @@ -1961,6 +1846,14 @@ Are you sure you want to continue without a password? Decryption Time: Час розшифрування: + + Change existing decryption time + Змінити наявний час розшифрування + + + Change + Змінити + Decryption time in seconds Час розшифрування в секундах @@ -2041,6 +1934,11 @@ Are you sure you want to continue without a password? KDBX 3 KDBX 3 + + unchanged + Database decryption time is unchanged + без змін + Number of rounds too high Key transformation rounds @@ -2093,18 +1991,6 @@ If you keep this number, your database will not be protected from brute force at Threads for parallel execution (KDF settings) потік потоки потоків потоків - - Encryption Settings: - Параметри шифрування: - - - Basic - Основний - - - Advanced - Додатково - DatabaseSettingsWidgetFdoSecrets @@ -2235,70 +2121,6 @@ removed from the database. Вилучені зі смітника записи остаточно вилучаються з бази даних. - - Autosave delay since last change - Затримка автозбереження з моменту останньої зміни - - - Autosave delay - Затримка автозбереження - - - Autosave delay since last change in minutes - Затримка автозбереження з моменту останньої зміни в хвилинах - - - min - хв - - - Autosave delay since last change checkbox - Прапорець затримки автозбереження з моменту останньої зміни - - - Public Database Metadata - Публічні метадані бази даних - - - Warning: the following settings are not encrypted. - Увага: наступні налаштування не зашифровані. - - - Display name: - Відображуване ім'я: - - - Publically visible display name used on the unlock dialog - Публічне ім'я, що використовується в діалоговому вікні розблокування - - - Database public display name - Публічне ім'я бази даних - - - Display color: - Відображуваний колір: - - - Publically visible color used on the unlock dialog - Публічний колір, що використовується в діалоговому вікні розблокування - - - Database public display color chooser - Публічний колір бази даних - - - Clear - Очистити - - - Display icon: - Піктограма: - - - Select Database Icon - Вибрати піктограму бази даних - DatabaseSettingsWidgetKeeShare @@ -2394,139 +2216,6 @@ removed from the database. Поле опису бази даних - - DatabaseSettingsWidgetRemote - - Sync Commands - Синхронізація команд - - - Remove - Вилучити - - - Command Settings - Налаштування команд - - - Name - Назва - - - Save - Зберегти - - - Download - Завантажити - - - Command: - Команда: - - - Download command field - Поле команди завантаження - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - наприклад: "sftp user@hostname" або "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - - - Input: - Введення: - - - Download input field - Поле введення завантаження - - - Upload - Завантажити - - - Upload command field - Поле команди завантаження - - - e.g.: "sftp user@hostname" or "scp {TEMP_DATABASE} user@hostname:DatabaseOnRemote.kdbx" - наприклад: "sftp user@hostname" або "scp {TEMP_DATABASE} user@hostname:DatabaseOnRemote.kdbx" - - - Upload input field - Поле команди вивантаження - - - Name cannot be empty. - Ім'я не може бути порожнім. - - - Test - Тест - - - Download command cannot be empty. - Команда завантаження не може бути порожньою. - - - Download failed with error: %1 - Помилка завантаження: %1 - - - Download finished, but file %1 could not be found. - Завантаження завершено, але файл %1 не вдалося знайти. - - - Download successful. - Успішне завантаження. - - - Save Remote Settings - Зберегти віддалені налаштування - - - You have unsaved changes. Do you want to save them? - У вас незбережені зміни. Хочете їх зберегти? - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - Наприклад: -отримати DatabaseOnRemote.kdbx {TEMP_DATABASE} -вийти ---- -{TEMP_DATABASE} використовується як заповнювач для зберігання бази даних у тимчасовому місці -Команда має вихід. У випадку з 'sftp' останньою командою має бути надіслано 'exit' - - - e.g.: -put {TEMP_DATABASE} DatabaseOnRemote.kdbx -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - Наприклад: -put {TEMP_DATABASE} DatabaseOnRemote.kdbx -вийти ---- -{TEMP_DATABASE} використовується як заповнювач для зберігання бази даних у тимчасовому місці -Команда має вихід. У випадку з 'sftp' останньою командою має бути надіслано 'exit' - - - Timeout: - Таймаут: - - - seconds - секунд - - DatabaseTabWidget @@ -2559,10 +2248,26 @@ This is definitely a bug, please report it to the developers. CSV file Файл CSV + + Select CSV file + Вибрати файл CSV + Merge database Об'єднати базу даних + + KeePass 1 database + База даних KeePass 1 + + + Open KeePass 1 database + Відкрити базу даних KeePass 1 + + + Open OPVault + Відкрити OPVault + Export database to CSV file Експортувати базу даних до файлу CSV @@ -2575,6 +2280,28 @@ This is definitely a bug, please report it to the developers. Writing the HTML file failed. Не вдалося записати файл HTML. + + Export Confirmation + Підтвердження експорту + + + You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? + Ви збираєтесь експортувати свою базу даних у незашифрований файл. Це зробить ваші паролі та важливу інформацію вразливими! Ви дійсно хочете продовжити? + + + New Database + Нова база даних + + + %1 [New Database] + Database tab name modifier + %1 [Нова база даних] + + + %1 [Locked] + Database tab name modifier + %1 [Заблоковано] + Export database to XML file Експортувати базу даних до файлу XML @@ -2587,31 +2314,9 @@ This is definitely a bug, please report it to the developers. Writing the XML file failed Не вдалося записати у файл XML - - Export Confirmation - Підтвердження експорту - - - You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? - Ви збираєтесь експортувати свою базу даних у незашифрований файл. Це зробить ваші паролі та важливу інформацію вразливими! Ви дійсно хочете продовжити? - - - %1 [Locked] - Database tab name modifier - %1 [Заблоковано] - - - %1 [Temporary] - Database tab name modifier - %1 [Тимчасово] - DatabaseWidget - - Searches and Tags - Пошук та мітки - Searching… Триває пошук… @@ -2660,10 +2365,6 @@ This is definitely a bug, please report it to the developers. Expired entries Протерміновані записи - - Entries expiring within %1 day(s) - Термін дії запису завершується через %1 деньТермін дії запису завершується через %1 дніТермін дії запису завершується через %1 днівТермін дії запису завершується через %1 дні - No current database. Немає поточної бази даних. @@ -2688,18 +2389,6 @@ This is definitely a bug, please report it to the developers. No Results Нічого не знайдено - - Save - Зберегти - - - Enter a unique name or overwrite an existing search from the list: - Введіть унікальну назву або перезапишіть наявний пошук зі списку: - - - Save Search - Зберегти пошук - Lock Database? Заблокувати базу даних? @@ -2728,6 +2417,26 @@ Save changes? 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? + Файл бази даних було змінено, у вас також є незбережені зміни. +Хочете об'єднати зміни? + + + Could not open the new database file while attempting to autoreload. +Error: %1 + Не вдалося відкрити новий файл бази даних під час автоматичного перезавантаження. +Помилка: %1 + Disable safe saves? Вимкнути безпечне збереження? @@ -2770,94 +2479,25 @@ Disable safe saves and try again? Could not find database file: %1 Не вдалося знайти файл бази даних: %1 - - New Database - Нова база даних + + Entries expiring within %1 day(s) + Термін дії запису завершується через %1 деньТермін дії запису завершується через %1 дніТермін дії запису завершується через %1 днівТермін дії запису завершується через %1 дні - %1 [New Database] - Database tab name modifier - %1 [Нова база даних] + Searches and Tags + Пошук та мітки - Remote Sync did not contain any download or upload commands. - Віддалена синхронізація не містила жодних команд завантаження або вивантаження. + Enter a unique name or overwrite an existing search from the list: + Введіть унікальну назву або перезапишіть наявний пошук зі списку: - Remote sync '%1' completed successfully! - Віддалена синхронізація '%1' успішно завершена! + Save + Зберегти - Remote sync '%1' failed: %2 - Не вдалося виконати віддалену синхронізацію '%1': %2 - - - Error while saving database %1: %2 - Помилка під час збереження бази даних %1: %2 - - - Downloading... - Завантаження... - - - Uploading... - Вивантаження... - - - Syncing... - Синхронізація... - - - Remove passkey from entry - Видалити пароль з запису - - - Do you want to remove the passkey from this entry? - Бажаєте видалити ключ доступу з цього запис? - - - The database file "%1" was modified externally - - - - Do you want to load the changes? - - - - Reload database - - - - Reloading database… - - - - Reload canceled - - - - Reload successful - - - - Reload pending user action… - - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes<br>Ignore the changes on disk until save<br>Discard unsaved changes - - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes then save<br>Overwrite the changes on disk<br>Discard unsaved changes - - - - Database file overwritten. - - - - Database file on disk cannot be unlocked with current credentials.<br>Enter new credentials and/or present hardware key to continue. - + Save Search + Зберегти пошук @@ -2910,6 +2550,10 @@ Disable safe saves and try again? n/a н/д + + (encrypted) + (зашифровано) + Select private key Вибрати приватний ключ @@ -2996,10 +2640,6 @@ Would you like to correct it? Hide Сховати - - %n hour(s) - %n година%n години%n годин%n години - %n week(s) %n тиждень%n тижні%n тижнів%n тижні @@ -3012,9 +2652,9 @@ Would you like to correct it? %n year(s) %n рік%n роки%n років%n роки - - Failed to decrypt SSH key, ensure password is correct. - Не вдалося розшифрувати SSH-ключ, перевірте правильність пароля. + + %n hour(s) + %n година%n години%n годин%n години @@ -3134,20 +2774,10 @@ Would you like to correct it? Add new window association Додати нову асоціацію вікна - - + - Add item - + - Remove selected window association Вилучити вибрану асоціацію вікна - - - - Remove item - - - Window title: Заголовок вікна: @@ -3172,9 +2802,23 @@ Would you like to correct it? Custom Auto-Type sequence for this window Власна послідовність автозаповнення для цього вікна + + + + Add item + + + + + - + Remove item + - + EditEntryWidgetBrowser + + These settings affect to the entry's behaviour with the browser extension. + Ці параметри впливають на поведінку запису в розширенні браузера. + General Загальні @@ -3187,14 +2831,26 @@ Would you like to correct it? Skip Auto-Submit for this entry Не надсилати автоматично дані цього запису + + Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. + Надсилати цей параметр до браузера лише в діалогах автентифікації HTTP. Якщо увімкнено, цей запис не пропонуватиметься для звичайних форм входу. + Use this entry only with HTTP Basic Auth Використовувати цей запис лише з HTTP Basic Auth + + Do not send this setting to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. + Не надсилати цей параметр до браузера в діалогах автентифікації HTTP. Якщо увімкнено, цей запис не пропонуватиметься для діалогів автентифікації HTTP. + Do not use this entry with HTTP Basic Auth Не використовувати цей запис для HTTP Basic Auth + + Additional URL's + Додаткові URL + Add Додати @@ -3207,22 +2863,6 @@ Would you like to correct it? Edit Редагувати - - These settings affect the entry's behaviour with the browser extension. - Ці налаштування впливають на поведінку запису в розширенні браузера. - - - Additional URLs - Додаткові URL-адреси - - - Only send this entry to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. - Надсилайте цей запис браузеру лише для діалогів HTTP-аутентифікації. Якщо увімкнено, звичайні форми входу не показуватимуть цей запис для вибору. - - - Do not send this entry to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. - Не надсилайте цей параметр браузеру для діалогів HTTP-авторизації. Якщо увімкнено, діалоги HTTP-автентифікації не показуватимуть цей пункт для вибору. - EditEntryWidgetHistory @@ -3319,35 +2959,35 @@ Would you like to correct it? &Username: - &Ім'я користувача: + &Title: - &Назва: + &Password: - &Пароль: + UR&L: - UR&L: + &Notes: - При&мітки: + Toggle notes visibility - Перемикання видимості приміток + T&ags: - Т&еги: + &Expires: - Термін &дії закінчується: + @@ -3388,6 +3028,19 @@ Would you like to correct it? Private key Приватний ключ + + External file + Зовнішній файл + + + Browser for key file + Переглядач ключових файлів + + + Browse… + Button for opening file dialog + Огляд… + Attachment Вкладення @@ -3404,23 +3057,6 @@ Would you like to correct it? Remove from agent Вилучити з агента - - External file - Зовнішній файл - - - Browser for key file - Переглядач ключових файлів - - - Browse… - Button for opening file dialog - Огляд… - - - Generate - Створити - Select attachment file Вибрати файл вкладення @@ -3445,10 +3081,6 @@ Would you like to correct it? seconds секунд - - Clear agent - - EditGroupWidget @@ -3460,6 +3092,10 @@ Would you like to correct it? Icon Піктограма + + Browser Integration + Інтеграція з браузером + Properties Властивості @@ -3476,10 +3112,6 @@ Would you like to correct it? Group has unsaved changes У групі є незбережені зміни - - Browser Integration - Інтеграція з браузером - Enable Увімкнути @@ -3539,14 +3171,6 @@ Would you like to correct it? Omit WWW subdomain from matching toggle for this and sub groups Перемкнути ігнорування WWW у збігах піддоменів для цієї групи та підгруп - - Restrict matching to given browser key: - Обмежити відповідність за даним ключем браузера: - - - Restrict matching to given browser key toggle for this and sub groups - Обмежити відповідність до вказаного ключа браузера для цієї групи та підгруп. - EditGroupWidgetKeeShare @@ -3779,6 +3403,10 @@ Supported extensions are: %1. Unable to fetch favicon. Неможливо дістати фавікон. + + You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security + Ви можете ввімкнути службу піктограм DuckDuckGo в меню Інструменти -> Налаштування -> Безпека + Existing icon selected. Вибрано наявну піктограму. @@ -3811,10 +3439,6 @@ Supported extensions are: %1. The following icon(s) failed: Такий значок зазнав невдачі:Такі значки зазнали невдачі:Такі значки зазнали невдачі:Такі значки зазнали невдачі: - - You can enable the DuckDuckGo website icon service under Application Settings -> Security - Ви можете увімкнути службу піктограм DuckDuckGo в меню Налаштування програми -> Безпека - EditWidgetProperties @@ -3891,24 +3515,6 @@ This may cause the affected plugins to malfunction. %1 - Clone %1 - Клон - - Passkey - Passkey - - - Invalid conversion type: %1 - Неприпустимий тип перетворення: %1 - - - Invalid conversion syntax: %1 - Неприпустимий синтаксис перетворення: %1 - - - Invalid regular expression syntax %1 -%2 - Неприпустимий синтаксис регулярного виразу %1 -%2 - EntryAttachments @@ -3917,21 +3523,6 @@ This may cause the affected plugins to malfunction. Неможливо відкрити файл "%1" - - EntryAttachmentsDialog - - Form - Форма - - - File name - - - - File contents... - - - EntryAttachmentsModel @@ -3969,6 +3560,14 @@ This may cause the affected plugins to malfunction. Remove Видалити + + Rename selected attachment + Перейменувати вибраний додаток + + + Rename + Перейменувати + Open selected attachment Відкрити вибраний додаток @@ -4046,6 +3645,12 @@ This may cause the affected plugins to malfunction. Confirm Overwrite Attachment Підтвердити перезапис вкладення + + Attachment "%1" already exists. +Would you like to overwrite the existing attachment? + Вкладення "%1" вже існує. +Хочете перезаписати наявне вкладення? + Confirm Attachment Схвалити долучення @@ -4080,24 +3685,6 @@ Error: %1 Не вдалося зберегти оновлене вкладення. Помилка: %1 - - Attachment "%1" already exists. -Would you like to overwrite the existing attachment? - Вкладення "%1" вже існує. -Хочете перезаписати наявне вкладення? - - - New - - - - Preview - Попередній перегляд - - - Failed to preview an attachment: Attachment not found - - EntryAttributesModel @@ -4292,14 +3879,6 @@ Would you like to overwrite the existing attachment? Has TOTP Має TOTP - - Background Color - Колір тла - - - Group Path - - EntryPreviewWidget @@ -4320,8 +3899,8 @@ Would you like to overwrite the existing attachment? Пароль - URL - URL-адреса + Notes + Нотатки Expiration @@ -4340,8 +3919,8 @@ Would you like to overwrite the existing attachment? Ім'я користувача - Notes - Нотатки + URL + URL-адреса Advanced @@ -4391,10 +3970,6 @@ Would you like to overwrite the existing attachment? Never Ніколи - - Double click to copy value - Клацніть двічі, щоб скопіювати значення - Enabled Увімкнено @@ -4404,8 +3979,8 @@ Would you like to overwrite the existing attachment? Вимкнено - Double click to copy to clipboard - Двічі клацніть, щоб скопіювати в буфер обміну + Double click to copy value + Клацніть двічі, щоб скопіювати значення @@ -4414,10 +3989,6 @@ Would you like to overwrite the existing attachment? Invalid URL Непридатний URL - - Duplicate URL - Дублікат URL - EntryView @@ -4433,10 +4004,6 @@ Would you like to overwrite the existing attachment? Reset to defaults Повернути до типового налаштування - - + %1 entry(s)... - + %1 запис+ %1 записи(ів)...+ %1 записів...+ %1 записів... - ExportDialog @@ -4658,199 +4225,6 @@ You can enable the DuckDuckGo website icon service in the security section of th Завантаження фавіконів (%1/%2)… - - ImportWizard - - Import Wizard - Майстер імпорту - - - - ImportWizardPageReview - - WizardPage - Сторінка майстера налаштування - - - Entry count: %1 - Кількість записів: %1 - - - Group - Група - - - Title - Заголовок - - - Username - Ім'я користувача - - - Password - Пароль - - - Url - URL-адреса - - - Could not load key file. - Не вдалося завантажити файл ключа. - - - Could not open remote database. Password or key file may be incorrect. - Не вдалося відкрити віддалену базу даних. пароль або ключовий файл можуть бути неправильними. - - - - ImportWizardPageSelect - - Form - Форма - - - Import File Selection - Вибір файла імпорту - - - Password: - Пароль: - - - Key File: - Ключовий файл: - - - Browse… - Огляд… - - - Import Into: - Імпортувати в : - - - New Database - Нова база даних - - - No unlocked databases available - Немає розблокованих баз даних - - - Existing Database: - Наявна база даних: - - - Import File: - Імпортувати файл: - - - Comma Separated Values (.csv) - Значення через кому (.csv) - - - 1Password Export (.1pux) - Експорт з 1Password (.1pux) - - - 1Password Vault (.opvault) - Сховище 1Password (.opvault) - - - Bitwarden (.json) - Bitwarden (.json) - - - KeePass 1 Database (.kdb) - База даних KeePass 1 (.kdb) - - - Open OPVault - Відкрити OPVault - - - Select import file - Виберіть файл для імпорту - - - All files - Усі файли - - - Key files - Ключові файли - - - Select key file - Виберіть ключовий файл - - - Comma Separated Values - Значення через кому - - - 1Password Export - Експорт з 1Password - - - Bitwarden JSON Export - Експорт з Bitwarden в JSON - - - 1Password Vault - Сховище 1Password - - - KeePass1 Database - База даних KeePass1 - - - Proton Pass (.json) - - - - Proton Pass JSON Export - - - - Temporary Database - Тимчасова база даних - - - Command: - Команда: - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - наприклад: "sftp user@hostname" або "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - - - Input: - Введення: - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last commend `exit` has to be sent - - Наприклад: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} використовується як заповнювач для зберігання бази даних у тимчасовому місці -Команда має завершитися. У випадку з 'sftp' останньою командою має бути надіслано 'exit' - - - - Remote Database (.kdbx) - Віддалена база даних (.kdbx) - - KMessageWidget @@ -5285,6 +4659,17 @@ Line %2, column %3 Відкриття таємного ключа зазнало невдачі + + KeePass1OpenWidget + + Import KeePass1 Database + Імпортувати базу даних KeePass1 + + + Unable to open the database. + Неможливо відкрити базу даних. + + KeePass1Reader @@ -5641,6 +5026,10 @@ Are you sure you want to continue with this file? &Recent Databases &Останні бази даних + + &Import + Імпортувати + &Export &Експортувати @@ -5661,10 +5050,6 @@ Are you sure you want to continue with this file? TOTP TOTP - - Tags - Мітки - &Groups &Групи @@ -5709,18 +5094,34 @@ Are you sure you want to continue with this file? &New Database… &Нова база даних… + + Create a new database + Створити нову базу даних + &Merge From Database… &Об'єднати з базою даних… + + Merge from another KDBX database + Об'єднати з іншою базою даних KDBX + &New Entry… Новий запис... + + Add a new entry + Додати новий запис + &Edit Entry… Змінити запис... + + View or edit entry + Переглянути або змінити запис + &Delete Entry… Видалити запис... @@ -5729,6 +5130,10 @@ Are you sure you want to continue with this file? &New Group… Нова група... + + Add a new group + Додати нову групу + &Edit Group… Змінити групу... @@ -5761,10 +5166,18 @@ Are you sure you want to continue with this file? Database &Reports… &Звіти бази даних… + + Statistics, health check, etc. + Статистика, перевіряння непошкодності тощо + &Database Settings… &Налаштування бази даних… + + Database settings + Налаштування бази даних + &Clone Entry… Склонувати запис... @@ -5773,18 +5186,34 @@ Are you sure you want to continue with this file? Move u&p Перемістити вгору + + Move entry one step up + Посунути запис на один крок вище + Move do&wn Перемістити вниз + + Move entry one step down + Посунути запис на один крок нижче + Copy &Username Скопіювати ім'я користувача + + Copy username to clipboard + Копіювати ім'я користувача в буфер обміну + Copy &Password Скопіювати пароль + + Copy password to clipboard + Копіювати пароль у буфер обміну + &Settings Нала&штування @@ -5818,13 +5247,21 @@ Are you sure you want to continue with this file? Заголовок - Copy &URL - Скопіювати &URL-адресу + Copy title to clipboard + Копіювати заголовок у буфер обміну + + + Copy URL to clipboard + Копіювати URL-адресу в буфер обміну &Notes &Нотатки + + Copy notes to clipboard + Копіювати нотатки в буфер обміну + &CSV File… &CSV-файл... @@ -5837,14 +5274,26 @@ Are you sure you want to continue with this file? KeePass 1 Database… База даних KeePass 1… + + Import a KeePass 1 database + Імпортувати базу даних KeePass 1 + 1Password Vault… Сховище 1Password… + + Import a 1Password Vault + Імпортувати сховище 1Password + CSV File… CSV-файл... + + Import a CSV file + Імпортувати файл CSV + Show TOTP Показати TOTP @@ -5861,10 +5310,6 @@ Are you sure you want to continue with this file? Copy &TOTP Копіювати TOTP - - Copy Password and TOTP - Копіювати пароль і TOTP - E&mpty recycle bin Спорожнити смітник @@ -5889,6 +5334,10 @@ Are you sure you want to continue with this file? &Online Help &Довідка в мережі... + + Go to online documentation + Перейти до документації в мережі + &User Guide Посібник &користувача @@ -5933,10 +5382,6 @@ Are you sure you want to continue with this file? Classic (Platform-native) Класична (тема платформи) - - Show Menubar - Показати рядок меню - Show Toolbar Показувати панель инструментів @@ -5961,10 +5406,6 @@ Are you sure you want to continue with this file? Clone Group... Клонувати групу... - - &XML File… - Файл &XML… - Clear history Очистити журнал @@ -5981,19 +5422,21 @@ Are you sure you want to continue with this file? WARNING: You are using an unstable build of KeePassXC. There is a high risk of corruption, maintain a backup of your databases. This version is not meant for production use. - УВАГА: ви користуєтеся нестабільною версією KeePassXC. + УВАГА: Ви користуєтеся нестабільною версією KeePassXC. Є високий ризик пошкодження даних, тому створіть резервну копію баз даних. Ця версія призначена лише для тестування. NOTE: You are using a pre-release version of KeePassXC. Expect some bugs and minor issues, this version is meant for testing purposes. - ПРИМІТКА: ви користуєтеся бета-версією KeePassXC. + ПРИМІТКА: Ви користуєтеся бета-версією KeePassXC. Можна помітити помилки чи незначні проблеми. Ця версія призначена лише для тестування. - No Tags - Без міток + 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, який ви можете отримати на нашій сторінці завантажень. Restore Entry(s) @@ -6023,10 +5466,6 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Quit KeePassXC Вийти з KeePassXC - - %1 Entry(s) - %1 запис%1 записи%1 записів%1 записів - Please present or touch your YubiKey to continue… Надайте свій YubiKey або торкніться до нього для продовження… @@ -6039,314 +5478,38 @@ Expect some bugs and minor issues, this version is meant for testing purposes.You must restart the application to apply this setting. Would you like to restart now? Ви мусите перезапустити програму, щоб застосувати цей параметр. Бажаєте перезапустити зараз? + + Tags + Мітки + + + No Tags + Без міток + + + %1 Entry(s) + %1 запис%1 записи%1 записів%1 записів + + + Copy Password and TOTP + Копіювати пароль і TOTP + + + &XML File… + Файл &XML… + + + XML File… + Файл XML… + + + Copy &URL + Скопіювати &URL-адресу + Allow Screen Capture Дозволити знімки екрана - - 1Password 1PUX... - 1Password 1PUX... - - - Import a 1Password 1PUX file - Імпортувати 1PUX файл з 1Password - - - Import… - Імпорт… - - - Passkeys… - Passkeys… - - - Import Passkey - Імпорт Passkey - - - Remote S&ync… - Віддалена с&инхронізація... - - - Quit Application - Вийти з програми - - - Open About Dialog - Відкрити вікно "Про програму". - - - Open Database - Відкрити базу даних - - - Create Database - Створити базу даних - - - Merge From Database - Об'єднати з базою даних - - - Create Entry - Створити запис - - - Edit Entry - Редагувати запис - - - Delete Entry - Видалити запис - - - Create Group - Створити групу - - - Edit Group - Змінити групу - - - Delete Group - Видалити групу - - - Download All Favicons - Завантажити всі Favicon'и - - - Sort Groups A-Z - Сортувати групи від А до Я - - - Sort Groups Z-A - Сортувати групи від Я до А - - - Save Database As - Зберегти базу даних як - - - Show Database Security - Показати налаштування безпеки бази даних - - - Show Database Reports - Показати звіти бази даних - - - Show Database Settings - Показати налаштування бази даних - - - Show Passkeys - Показати ключі доступу - - - Clone Entry - Клонувати запис - - - Move Entry Up - Перемістити запис вгору - - - Move Entry Down - Перемістити запис вниз - - - Copy Username - Копіювати ім'я користувача - - - Copy Password - Копіювати пароль - - - Show Application Settings - Налаштування програми - - - Show Password Generator - Генератор паролів - - - Remove Passkey From Entry - Видалити пароль з запису - - - Perform Auto-Type: {USERNAME} - Виконати автозаповнення: {USERNAME} - - - Perform Auto-Type: {USERNAME}{ENTER} - Виконати автозаповнення: {USERNAME}{ENTER} - - - Perform Auto-Type: {PASSWORD} - Виконати автозаповнення: {PASSWORD} - - - Perform Auto-Type: {PASSWORD}{ENTER} - Виконати автозаповнення: {PASSWORD}{ENTER} - - - Perform Auto-Type: {TOTP} - Виконати автозаповнення: {TOTP} - - - Copy Title - Копіювати заголовок - - - Copy URL - Скопіювати URL - - - Copy Notes - Копіювати нотатки - - - Export to CSV - Експорт в CSV - - - Export to HTML - Експорт в HTML - - - Import KeePass1 Database - Імпортувати базу даних KeePass1 - - - Import 1Password Vault - Імпортувати контейнер 1Password - - - Import CSV File - Імпортувати файл CSV - - - Show TOTP QR Code - Показати QR-код TOTP - - - Set up TOTP - Вказати ТОГ - - - Empty Recycle Bin - Спорожнити смітник - - - Open Donation Website - Відкрити веб-сайт для пожертвувань. - - - Open Bug Report - Відкритий звіт про помилку - - - Open Online Documentation - Відкрити онлайн документацію - - - Open Keyboard Shortcuts Guide - Відкрити посібник з клавіатурних скорочень - - - Save Database Backup - Зберегти резервну копію бази даних - - - SSH Agent: Add Key - SSH Агент: Додати ключ - - - SSH Agent: Remove Key - SSH Агент: Видалити ключ - - - Toggle Compact Mode - Переключити в компактний режим - - - Set Theme: Automatic - Встановити тему: Автоматично - - - Set Theme: Light - Встановити тему: Світла - - - Set Theme: Dark - Встановити тему: Темна - - - Set Theme: Classic - Встановити тему: Класична - - - Toggle Show Menubar - Перемикати показ рядка меню - - - Toggle Show Toolbar - Панель інструментів - - - Toggle Show Preview Panel - Показзувати панель попереднього перегляду - - - Toggle Always on Top - Завжди зверху - - - Toggle Hide Usernames - Приховувати імена користувачів - - - Toggle Hide Passwords - Приховувати паролі - - - Export to XML - Експорт в XML - - - Toggle Allow Screen Capture - Дозволити знімки екрану - - - Show Group Panel - Показати панель груп - - - Toggle Show Group Panel - Відображати панель груп - - - Setup Remote Sync… - Налаштувати віддалену синхронізацію... - - - Password Generator - Генератор паролів - - - E&xpire Entry… - - - - Clear SSH Agent - - - - Clear all identities in ssh-agent - - ManageDatabase @@ -6404,6 +5567,26 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Overwriting %1 [%2] Перезапис %1 [%2] + + older entry merged from database "%1" + об'єднано зі старішим записом бази даних "%1" + + + Adding backup for older target %1 [%2] + Створення резервної копії старішої цілі %1 [%2] + + + Adding backup for older source %1 [%2] + Створення резервної копії старішого джерела %1 [%2] + + + Reapplying older target entry on top of newer source %1 [%2] + Накладання старішого цільового запису на новіше джерело %1 [%2] + + + Reapplying older source entry on top of newer target %1 [%2] + Накладання новішого джерельного запису на старішу ціль %1 [%2] + Synchronizing from newer source %1 [%2] Узгодження з новішим джерелом %1 [%2] @@ -6463,6 +5646,14 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. Тут можна змінити параметри шифрування сховища. Не хвилюйтеся, ви зможете змінити ці параметри згодом у налаштуваннях бази даних. + + Advanced Settings + Розширене налаштування + + + Simple Settings + Просте налаштування + NewDatabaseWizardPageDatabaseKey @@ -6497,25 +5688,6 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Введіть назву та опис для своєї нової бази даних: - - NewEntryAttachmentsDialog - - Attachment name cannot be empty - - - - Attachment with the same name already exists - - - - Save attachment - Зберегти вкладення - - - New entry attachment - - - NixUtils @@ -6562,6 +5734,15 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Очікувалось %1 байтів відкритого текстку, знайдено %2 + + OpVaultOpenWidget + + Read Database did not produce an instance +%1 + Читання бази даних не створило екземпляр +%1 + + OpVaultReader @@ -6635,10 +5816,6 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Unknown cipher: %1 Невідомий шифр: %1 - - AES-256/GCM is currently not supported - AES-256/GCM наразі не підтримується - Passphrase is required to decrypt this key Для розшифрування цього ключа потрібен вираз пароля @@ -6704,182 +5881,8 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Несподіваний кінець файлу під час запису таємного ключа - (encrypted) - (зашифровано) - - - - OpenSSHKeyGenDialog - - SSH Key Generator - Генератор ключів SSH - - - Type - Тип - - - Bits - Біт - - - Comment - Коментар - - - - PasskeyExportDialog - - KeePassXC - Passkey Export - KeePassXC - Експорт ключа доступу - - - Filenames will be generated with title and .passkey file extension. - Файли будуть створені з назвою та розширенням .passkey. - - - Export entries - Експорт записів - - - Export Selected - Експортувати вибране - - - Cancel - Скасувати - - - Export to folder - Експорт до папки - - - Export the following passkey entries. - Експортувати наступні записи паролів. - - - - PasskeyExporter - - KeePassXC: Passkey Export - KeePassXC: Експорт ключа доступу - - - File "%1.passkey" already exists. -Do you want to overwrite it? - - Файл "%1.passkey" вже існує. -Хочете перезаписати його? - - - Cannot open file - Не вдається відкрити файл - - - Cannot open file "%1" for writing. - Не вдається відкрити файл "%1" для запису. - - - Cannot write to file - Не можу записати до файла - - - - PasskeyImportDialog - - KeePassXC - Passkey Import - KeePassXC - Імпорт ключа доступу - - - Username: %1 - Ім'я користувача: %1 - - - Group - Група - - - Database - Сховище - - - Import Passkey - Імпорт Passkey - - - Import - Імпортування - - - Cancel - Скасувати - - - Entry - Запис - - - Create new entry - Створити новий запис - - - Relying Party: %1 - Довірена сторона: %1 - - - Import the following passkey: - Імпортувати наступний пароль: - - - Import the following passkey to this entry: - Імпортувати наступний пароль до цього запису: - - - Default passkeys group (Imported Passkeys) - Група паролів за замовчуванням (Імпортовані паролі) - - - - PasskeyImporter - - Passkey file - Файл з ключем - - - All files - Усі файли - - - Cannot open file - Не вдається відкрити файл - - - Cannot open file "%1" for reading. - Не вдається відкрити файл "%1" для читання. - - - Open passkey file - Відкрити файл пароля - - - Cannot import passkey - Не вдалося імпортувати пароль - - - Cannot import passkey file "%1". Data is missing. - Не вдалося імпортувати файл пароля "%1". Дані відсутні. - - - Cannot import passkey file "%1". -The following data is missing: -%2 - Не вдалося імпортувати файл пароля "%1". -Відсутні такі дані: -%2 - - - Cannot import passkey file "%1". Private key is missing or malformed. - Не вдалося імпортувати файл пароля "%1". Відсутній або пошкоджений приватний ключ. + AES-256/GCM is currently not supported + AES-256/GCM наразі не підтримується @@ -7084,6 +6087,10 @@ The following data is missing: Word Count: Кількість слів: + + Character Count: + Кількість символів: + Word Case: Регістр слів: @@ -7096,6 +6103,10 @@ The following data is missing: Add custom wordlist Додати власний список слів + + character + символ + Close Закрити @@ -7132,30 +6143,6 @@ The following data is missing: Entropy: %1 bit Ентропія: %1 біт - - Password Quality: %1 - Якість пароля: %1 - - - Poor - Password quality - Погана - - - Weak - Password quality - Низька - - - Good - Password quality - Добра - - - Excellent - Password quality - Відмінна - Confirm Delete Wordlist Підтвердити видалення списку слів @@ -7203,20 +6190,32 @@ Do you want to overwrite it? Спеціальні символи - passwordLength - Довжина пароля + Password Quality: %1 + Якість пароля: %1 - Characters: %1 - Символи: %1 + Poor + Password quality + Погана - MIXED case - Змішаний варіант + Weak + Password quality + Низька - Excluded characters: "0", "1", "l", "I", "O", "|", "﹒", "B", "8", "G", "6" - Виключити символи: "0", "1", "l", "I", "O", "|", ".", "B", "8", "G", "6" + Good + Password quality + Добра + + + Excellent + Password quality + Відмінна + + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + Виключені знаки: "0", "1", "l", "I", "O", "|", "﹒" @@ -7266,15 +6265,15 @@ Do you want to overwrite it? Відмінна - Toggle password visibility using Control + H. Open the password generator using Control + G. - Видимість пароля – Control + H. Відкрити генератор паролів – Control + G. + Toggle password visibilty using Control + H. Open the password generator using Control + G. + PickcharsDialog KeePassXC - Pick Characters - KeePassXC – вибір символів + KeePassXC - Вибір символів Select characters to type, navigate with arrow keys, Ctrl + S submits. @@ -7285,21 +6284,6 @@ Do you want to overwrite it? Натискайте &Tab між символами - - PreviewEntryAttachmentsDialog - - Preview entry attachment - - - - No preview available - - - - Image format not supported - - - QMessageBox @@ -7338,10 +6322,6 @@ Do you want to overwrite it? Continue Продовжити - - Continue with weak password - Продовжити зі слабким паролем - QObject @@ -7735,10 +6715,6 @@ Do you want to overwrite it? Too many arguments provided. Надано забагато аргументів. - - Path of the database. - Шлях до бази даних. - Target decryption time in MS for the database. Цільовий час для розшифрування бази даних у мс. @@ -7759,6 +6735,10 @@ Do you want to overwrite it? Create a new database. Створити нову базу даних. + + Path of the database. + Шлях до бази даних. + Invalid decryption time %1. Непридатний час розшифрування %1. @@ -7803,158 +6783,6 @@ Do you want to overwrite it? Successfully created new database. Нову базу даних успішно створено. - - Unset the password for the database. - Вилучити пароль для бази даних. - - - Unset the key file for the database. - Вилучити ключовий файл для бази даних. - - - Edit a database. - Редагувати базу даних. - - - Cannot use %1 and %2 at the same time. - Неможливо використовувати %1 і %2 одночасно. - - - Could not change the database key. - Не вдалося змінити ключ бази даних. - - - Database was not modified. - База даних не була змінена. - - - Writing the database failed: %1 - Не вдалося записати в базу даних: %1 - - - Successfully edited the database. - База даних успішно редагована. - - - Cannot remove password: The database does not have a password. - Неможливо вилучити пароль: база даних не має пароля. - - - Cannot remove file key: The database does not have a file key. - Не вдалося вилучити ключовий файл: база даних не має ключового файлу. - - - Loading the new key file failed: %1 - Не вдалося завантажити новий ключовий файл: %1 - - - Found unexpected Key type %1 - Знайдено неочікуваний тип ключа %1 - - - Cannot remove all the keys from a database. - Неможливо вилучити всі ключі з бази даних. - - - Show a database's information. - Показати інформацію про базу даних. - - - UUID: - UUID: - - - Name: - Назва: - - - Description: - Опис: - - - Cipher: - Шифр: - - - KDF: - KDF: - - - Recycle bin is enabled. - Смітник увімкнено. - - - Recycle bin is not enabled. - Смітник вимкнено. - - - Location - Розташування - - - Database created - Базу даних створено - - - Last saved - Останнє збереження - - - Unsaved changes - Незбережені зміни - - - yes - так - - - no - ні - - - Number of groups - Кількість груп - - - Number of entries - Кількість записів - - - Number of expired entries - Кількість протермінованих записів - - - Unique passwords - Унікальні паролі - - - Non-unique passwords - Повторювані паролі - - - Maximum password reuse - Найбільша кількість повторень пароля - - - Number of short passwords - Кількість коротких паролів - - - Number of weak passwords - Кількість слабких паролів - - - Entries excluded from reports - Записи, виключені зі звітів - - - Average password length - Середня довжина пароля - - - %1 characters - %1 символів - Word count for the diceware passphrase. Кількість слів у виразі пароля. @@ -7978,6 +6806,10 @@ Do you want to overwrite it? Invalid word count %1 Непридатна кількість слів %1 + + The word list is too small (< 1000 items) + Список слів надто малий (< 1000 одиниць) + Title for the entry. Заголовок запису. @@ -8002,6 +6834,10 @@ Do you want to overwrite it? Enter new password for entry: Введіть новий пароль для запису: + + Writing the database failed: %1 + Не вдалося записати в базу даних: %1 + Successfully edited entry %1. Успішно змінено запис %1. @@ -8036,79 +6872,79 @@ Do you want to overwrite it? Type: Bruteforce - Тип: метод грубої сили + Тип: Метод грубої сили Type: Dictionary - Тип: словник + Тип: Словник Type: Dict+Leet - Тип: словник + Leet + Тип: Словник+Leet Type: User Words - Тип: користувацькі слова + Тип: Користувацькі слова Type: User+Leet - Тип: користувач + Leet + Тип: Користувач+Leet Type: Repeated - Тип: повторювання + Тип: Повторювання Type: Sequence - Тип: послідовність + Тип: Послідовність Type: Spatial - Тип: просторовий + Тип: Просторовий Type: Date - Тип: дата + Тип: Дата Type: Bruteforce(Rep) - Тип: метод грубої сили (повт.) + Тип: Метод грубої сили (повт.) Type: Dictionary(Rep) - Тип: словник (повт.) + Тип: Словник (повт.) Type: Dict+Leet(Rep) - Тип: словник + Leet (повт.) + Тип: Словник+Leet (повт.) Type: User Words(Rep) - Тип: користувацькі слова (повт.) + Тип: Користувацькі слова (повт.) Type: User+Leet(Rep) - Тип: користувач + Leet (повт.) + Тип: Користувач+Leet (повт.) Type: Repeated(Rep) - Тип: повторювання (повт.) + Тип: Повторювання (повт.) Type: Sequence(Rep) - Тип: послідовність (повт.) + Тип: Послідовність (повт.) Type: Spatial(Rep) - Тип: просторовий (повт.) + Тип: Просторовий (повт.) Type: Date(Rep) - Тип: дата (повт.) + Тип: Дата (повт.) Type: Unknown (%1) - Тип: невідомий (%1) + Тип: Невідомий (%1) Entropy %1 (%2) @@ -8122,6 +6958,10 @@ Do you want to overwrite it? Exit interactive mode. Вийти з діалогового режиму. + + Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. + Формат для експортування. Можливі формати: xml або csv. Типовий формат – xml. + Exports the content of a database to standard output in the specified format. Експортує вміст бази даних до стандартного виводу в зазначеному форматі. @@ -8222,6 +7062,106 @@ Do you want to overwrite it? Successfully imported database. Базу даних успішно імпортовано. + + Show a database's information. + Показати інформацію про базу даних. + + + UUID: + UUID: + + + Name: + Назва: + + + Description: + Опис: + + + Cipher: + Шифр: + + + KDF: + KDF: + + + Recycle bin is enabled. + Смітник увімкнено. + + + Recycle bin is not enabled. + Смітник вимкнено. + + + Location + Розташування + + + Database created + Базу даних створено + + + Last saved + Останнє збереження + + + Unsaved changes + Незбережені зміни + + + yes + так + + + no + ні + + + Number of groups + Кількість груп + + + Number of entries + Кількість записів + + + Number of expired entries + Кількість протермінованих записів + + + Unique passwords + Унікальні паролі + + + Non-unique passwords + Повторювані паролі + + + Maximum password reuse + Найбільша кількість повторень пароля + + + Number of short passwords + Кількість коротких паролів + + + Number of weak passwords + Кількість слабких паролів + + + Entries excluded from reports + Записи, виключені зі звітів + + + Average password length + Середня довжина пароля + + + %1 characters + %1 символів + Unknown command %1 Невідома команда %1 @@ -8242,7 +7182,7 @@ Available commands: Displays debugging information. - Показує інформацію щодо налагодження. + Показаує інформацію щодо зневадження. Invalid command %1. @@ -8394,10 +7334,6 @@ Available commands: Show the protected attributes in clear text. Показувати захищені атрибути звичайним текстом. - - Show all the attributes of the entry. - Показати всі атрибути запису. - Show the attachments of the entry. Показати вкладення запису. @@ -8455,7 +7391,7 @@ Available commands: stop supporting in the future. Please consider generating a new key file. - ПОПЕРЕДЖЕННЯ: ви використовуєте застарілий формат ключового файлу, який KeePassXC може + ПОПЕРЕДЖЕННЯ: Ви використовуєте застарілий формат ключового файлу, який KeePassXC може припинити підтримувати в майбутньому. Будь ласка, створіть новий ключовий файл. @@ -8468,10 +7404,6 @@ Please consider generating a new key file. Invalid YubiKey serial %1 Непридатний серійний номер YubiKey %1 - - Please present or touch your YubiKey to continue. - Надайте свій YubiKey або торкніться його для продовження. - Enter password to encrypt database (optional): Введіть пароль для шифрування бази даних (необов'язково): @@ -8486,7 +7418,7 @@ Please consider generating a new key file. Error: Passwords do not match. - Помилка: паролі відрізняються. + Помилка: паролі не збігаються. No program defined for clipboard manipulation @@ -8588,11 +7520,11 @@ Please consider generating a new key file. Debugging mode is disabled. - Режим налагодження вимкнено. + Режим зневадження вимкнено. Debugging mode is enabled. - Режим налагодження ввімкнено. + Режим зневадження ввімкнено. Operating system: %1 @@ -8676,11 +7608,11 @@ Kernel: %3 %4 SymmetricCipher::init: Invalid cipher mode. - SymmetricCipher::init: неприпустимий режим шифру. + SymmetricCipher::init: Неправильний режим шифру. SymmetricCipher::init: Invalid IV size of %1 for %2. - SymmetricCipher::init: неприпустимий розмір IV %1 для %2. + SymmetricCipher::init: Неправильний розмір IV %1 для %2. Cipher not initialized prior to use. @@ -8710,6 +7642,18 @@ Kernel: %3 %4 file empty порожній файл + + malformed string + хибне рядкове значення + + + missing closing quote + бракує закривальних лапок + + + %1: (row, col) %2,%3 + %1: (рядок, позиція) %2,%3 + AES 256-bit AES 256-біт @@ -8888,6 +7832,14 @@ Kernel: %3 %4 read password of the database from stdin отримати пароль до бази даних із stdin + + allow app screen recordering and screenshots + дозволити запис та знімки екрану програми + + + Locked databases. + Заблоковані бази даних. + Database failed to lock. Не вдалося заблокувати базу даних. @@ -8896,10 +7848,6 @@ Kernel: %3 %4 Another instance of KeePassXC is already running. Інший примірник KeePassXC вже запущено. - - KeePassXC is not running. No open database to lock - KeePassXC не працює. Не відкрита база даних для блокування - Fatal error while testing the cryptographic functions. Невиправна помилка в процесі тестування криптографічних функцій. @@ -8943,300 +7891,70 @@ Kernel: %3 %4 Недійсний KDF - Access to all entries is denied - У доступі до всіх записів відмовлено + Please present or touch your YubiKey to continue. + Надайте свій YubiKey або торкніться його для продовження. - allow screenshots and app recording (Windows/macOS) - дозволити скріншоти та запис програм (Windows/macOS) + Show all the attributes of the entry. + Показати всі атрибути запису. + + + Edit a database. + Редагувати базу даних. + + + Could not change the database key. + Не вдалося змінити ключ бази даних. + + + Database was not modified. + База даних не була змінена. + + + Successfully edited the database. + База даних успішно редагована. + + + Loading the new key file failed: %1 + Не вдалося завантажити новий ключовий файл: %1 + + + Unset the password for the database. + Вилучити пароль для бази даних. + + + Unset the key file for the database. + Вилучити ключовий файл для бази даних. + + + Cannot use %1 and %2 at the same time. + Неможливо використовувати %1 і %2 одночасно. + + + Cannot remove all the keys from a database. + Неможливо вилучити всі ключі з бази даних. + + + Cannot remove password: The database does not have a password. + Неможливо вилучити пароль: База даних не має пароля. + + + Cannot remove file key: The database does not have a file key. + Не вдалося вилучити ключовий файл: База даних не має ключового файлу. + + + Found unexpected Key type %1 + Знайдено неочікуваний тип ключа %1 Set the key file for the database. -This option is deprecated, use --set-key-file instead. - Встановіть файл ключа для бази даних. -Цю опцію застаріло, використовуйте замість цього --set-key-file. +This options is deprecated, use --set-key-file instead. + Налаштуйте ключовий файл для бази даних. +Ці параметри застарілі, використовуйте натомість --set-key-file. - Databases have been locked. - Бази даних були заблоковані. - - - Attestation not supported - Підтвердження не підтримується - - - Credential is excluded - Відсутній підтверджувальний запис - - - Passkeys request canceled - Запит на отримання ключів доступу скасовано - - - Invalid user verification - Перевірку користувача не пройдено - - - Empty public key - Порожній публічний ключ - - - Invalid URL provided - Надано хибну URL-адресу - - - Passkeys - Passkeys - - - AES initialization failed - AES ініціалізація не вдалася. - - - AES encrypt failed - AES шифрування не вдалося - - - Failed to store in Linux Keyring - Не вдалося зберегти в Linux Keyring. - - - Polkit returned an error: %1 - Polkit повернув помилку: %1 - - - Could not locate key in keyring - Не вдалося знайти ключ у ключниці. - - - Could not read key in keyring - Не вдалося прочитати ключ у ключниці - - - AES decrypt failed - AES дешифрування не вдалося - - - No Polkit authentication agent was available - Немає доступного агента аутентифікації Polkit - - - Polkit authorization failed - Помилка авторизації Polkit - - - No Quick Unlock provider is available - Немає доступного постачальника швидкого розблокування (Quick Unlock) - - - Failed to init KeePassXC crypto. - Не вдалося ініціювати KeePassXC crypto. - - - Failed to encrypt key data. - Не вдалося зашифрувати дані ключа. - - - Failed to get Windows Hello credential. - Не вдалося отримати облікові дані Windows Hello. - - - Failed to decrypt key data. - Не вдалося розшифрувати дані ключа. - - - Origin is empty or not allowed - Походження порожнє або не дозволене - - - Effective domain is not a valid domain - Діючий домен є недійсним доменом - - - Origin and RP ID do not match - Походження та RP ID не збігаються - - - No supported algorithms were provided - Не було надано підтримуваних алгоритмів - - - Wait for timer to expire - Зачекайте, поки таймер завершиться - - - Challenge is shorter than required minimum length - Виклик коротший за необхідну мінімальну довжину. - - - user.id does not match the required length - user.id не відповідає необхідній довжині. - - - Favorite - Tag for favorite entries - Вибране - - - File does not exist. - Файлу не існує. - - - Cannot open file: %1 - Не вдається відкрити файл: %1 - - - Cannot parse file: %1 at position %2 - Не вдалося розібрати файл: %1 на позиції %2 - - - Failed to decrypt json file: %1 - Не вдалося розшифрувати JSON-файл: %1 - - - Invalid encKeyValidation field - Недійсне поле encKeyValidation - - - Invalid cipher list within encKeyValidation field - Недійсний список шифрів у полі encKeyValidation - - - Wrong password - Неправильний пароль - - - Invalid encrypted data field - Недійсне зашифроване поле даних - - - Invalid cipher list within encrypted data field - Недійсний список шифрів у полі зашифрованих даних - - - Cannot initialize cipher - Не вдалося ініціалізувати шифр - - - Cannot decrypt data - Не вдалося розшифрувати дані - - - Bitwarden Import - Імпорт з Bitwarden - - - Archived - Tag for archived entries - Архівовано - - - Invalid 1PUX file format: Not a valid ZIP file. - Недійсний формат файлу 1PUX: не є дійсним ZIP-файлом. - - - Invalid 1PUX file format: Missing export.data - Недійсний формат файлу 1PUX: відсутній файл export.data - - - 1Password Import - Імпорт з 1Password - - - Enter Shortcut - Введіть скорочення - - - Action - Дія - - - Shortcuts - Скорочення - - - Unknown passkeys error - Невідома помилка паролів - - - Invalid KDF iterations, cannot decrypt json file - Недійсна кількість ітерацій KDF, не вдалося розшифрувати JSON-файл - - - Unsupported format, ensure your Bitwarden export is password-protected - Непідтримуваний формат, переконайтеся, що ваш експорт з Bitwarden захищений паролем. - - - Only PBKDF and Argon2 are supported, cannot decrypt json file - Підтримуються лише PBKDF та Argon2, не вдалося розшифрувати файл JSON. - - - Reset Shortcuts - Скинути ярлики - - - Double click an action to change its shortcut - Подвійний клік на дії, щоб змінити ярлик - - - Filter... - Фільтр... - - - Shortcut Conflict - Конфлікт ярликів - - - Shortcut %1 conflicts with '%2'. Overwrite shortcut? - Скорочення %1 конфліктує з '%2'. Перезаписати скорочення? - - - Cannot generate valid passphrases because the wordlist is too short - Не вдається згенерувати правильні парольні фрази, оскільки список слів занадто короткий - - - Encrypted files are not supported. - - - - Proton Pass Import - - - - Delete plugin data? - Видалити дані модуля? - - - Delete plugin data from Entry(s)? - Видалити дані плагіна з запису?Видалити дані плагіна із записів?Видалити дані плагіна із запиів?Видалити дані плагіна із запису(ів)? - - - Passkey - Passkey - - - Format to use when exporting. Available choices are 'xml', 'csv' or 'html'. Defaults to 'xml'. - - - - start minimized to the system tray - - - - malformed string, possible unescaped delimiter - - - - missing closing delimiter - - - - %1, row: %2, column: %3 - - - - Tags - Мітки + KeePassXC is not running. No open database to lock + KeePassXC не працює. Не відкрита база даних для блокування @@ -9273,39 +7991,20 @@ This option is deprecated, use --set-key-file instead. Внутрішня помилка zlib: - - RemoteHandler - - Command `%1` did not finish in time. Process was killed. - Команда «%1» не виконала вчасно. Процес було завершено. - - - Failed to upload merged database. Command `%1` did not finish in time. Process was killed. - Не вдалося завантажити об'єднану базу даних. Команда `%1` не встигла виконатись. Процес було завершено. - - - Invalid download parameters provided. - Вказано неприпустимі параметри завантаження. - - - Command `%1` failed to download database. - Команді '%1' не вдалося завантажити базу даних. - - - Invalid database pointer or upload parameters provided. - Хибний вказівник на базу даних або параметри завантаження. - - - Command `%1` exited with status code: %2 - Команду '%1' завершено з кодом стану: %2 - - - Failed to upload merged database. Command `%1` exited with status code: %2 - Не вдалося завантажити об'єднану базу даних. Команда `%1` завершилася з кодом стану: %2 - - ReportsWidgetBrowserStatistics + + Exclude expired entries from the report + Виключити протерміновані записи зі звіту + + + Show only entries which have URL set + Показувати лише записи з URL-адресою + + + Show only entries which have browser settings in custom data + Показувати лише записи, що мають параметри браузера у користувацьких даних + Double-click entries to edit. Редагування записів подвійним кліком. @@ -9370,53 +8069,44 @@ This option is deprecated, use --set-key-file instead. Exclude from reports Виключити зі звітів - - Expire Entry(s)… - - - - Only show entries that have a URL - Показати тільки записи, що містять URL - - - Only show entries that have been explicitly allowed or denied - Показати лише записи, що були явно дозволені або заборонені - - - Show expired entries - Показати прострочені записи - - - (Expired) - (Протерміновано) - - - Delete plugin data from Entry(s)… - Видалити дані плагіна з запису?Видалити дані плагіна з записів?Видалити дані плагіна з записів?Видалити дані плагіна із запису(ів)? - ReportsWidgetHealthcheck - Show expired entries - Показати прострочені записи + Exclude expired entries from the report + Виключити протерміновані записи зі звіту - (Expired) - (Протерміновано) + Also show entries that have been excluded from reports + Також показувати записи, які було виключено зі звітів Hover over reason to show additional details. Double-click entries to edit. Наведіть курсор на причину, щоб переглянути додаткові відомості. Клацніть двічі по запису для його редагування. + + Bad + Password quality + Погана + Bad — password must be changed Погана – пароль необхідно змінити + + Poor + Password quality + Погана + Poor — password should be changed Погана – пароль слід змінити + + Weak + Password quality + Слабка + Weak — consider changing the password Слабка – розгляньте можливість змінити пароль @@ -9465,14 +8155,6 @@ This option is deprecated, use --set-key-file instead. Exclude from reports Виключити зі звітів - - Expire Entry(s)… - - - - Show entries that have been excluded from reports - Показати записи, які було виключено зі звітів - ReportsWidgetHibp @@ -9568,77 +8250,6 @@ This option is deprecated, use --set-key-file instead. Exclude from reports Виключити зі звітів - - Expire Entry(s)… - - - - - ReportsWidgetPasskeys - - Export - Експортувати - - - Import - Імпортування - - - List of entry URLs - Список URL-адрес записів - - - Title - Заголовок - - - Path - Шлях - - - Username - Ім'я користувача - - - URLs - URL-адреси - - - Edit Entry… - Редагувати запис… - - - Delete Entry(s)… - Видалити запис…Видалити записи…Видалити записи…Видалити записи… - - - Relying Party - Довірена сторона - - - Show expired entries - Показати прострочені записи - - - (Expired) - (Протерміновано) - - - Export Confirmation - Підтвердження експорту - - - The passkey file will be vulnerable to theft and unauthorized use, if left unsecured. Are you sure you want to continue? - Файл пароля буде вразливим до крадіжки та несанкціонованого використання, якщо залишити його незахищеним. Ви впевнені, що хочете продовжити? - - - Please wait, list of entries with passkeys is being updated… - Будь ласка, зачекайте, список записів з паролями оновлюється… - - - No entries with passkeys. - Немає записів з паролями. - ReportsWidgetStatistics @@ -9736,7 +8347,7 @@ This option is deprecated, use --set-key-file instead. Recommended minimum password length is at least 8 characters. - Рекомендована найменша довжина пароля – 8 символів. + Рекомендована найменша довжина пароля — 8 символів. Number of weak passwords @@ -9813,14 +8424,6 @@ This option is deprecated, use --set-key-file instead. No agent running, cannot list identities. Немає запущеного посередника, неможливо відобразити перелік ключів. - - Failed to remove all SSH identities from agent. - - - - All SSH identities removed from agent. - - SearchHelpWidget @@ -9887,10 +8490,6 @@ This option is deprecated, use --set-key-file instead. Search Help Довідка з пошуку - - Save Search - Зберегти пошук - Search (%1)… Search placeholder text, %1 is the keyboard shortcut @@ -9904,6 +8503,10 @@ This option is deprecated, use --set-key-file instead. Limit search to selected group Обмежити пошук вибраною групою + + Save Search + Зберегти пошук + SettingsClientModel @@ -9965,10 +8568,34 @@ This option is deprecated, use --set-key-file instead. Confirm when passwords are retrieved by clients Підтверджувати отримання паролів клієнтами + + <html><head/><body><p><span style=" + font-family:'-apple-system','BlinkMacSystemFont','Segoe UI','Helvetica','Arial','sans-serif','Apple Color + Emoji','Segoe UI Emoji'; font-size:14px; color:#24292e; background-color:#ffffff;">This setting does + not override disabling recycle bin prompts</span></p></body></html> + + <html><head/><body><p><span style=" + font-family:'-apple-system','BlinkMacSystemFont','Segoe UI','Helvetica','Arial','sans-serif','Apple Color + Emoji','Segoe UI Emoji'; font-size:14px; color:#24292e; background-color:#ffffff;">Це налаштування + не перевизначає вимкнення запитів переміщення до смітника</span></p></body></html> + + Confirm when clients request entry deletion Підтверджувати видалення записів клієнтами + + <html><head/><body><p>This improves compatibility with certain applications + which search for password without unlocking the database first.</p><p>But enabling this may also + crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a + different value set in applications.)</p></body></html> + + <html><head/><body><p>Це вдосконалює сумісність із певними програмами, + які шукають пароль без попереднього розблокування бази даних..</p><p>Але увімкнення цього параметра також може + спричинити збій клієнта, якщо базу даних неможливо розблокувати впродовж певного періоду. (Зазвичай 25 секунд, але значення може + відрізнятися в різних програмах.)</p></body></html> + + Prompt to unlock database before searching Запитувати про розблокування бази даних перед пошуком @@ -9993,14 +8620,6 @@ This option is deprecated, use --set-key-file instead. Save current changes to activate the plugin and enable editing of this section. Збережіть поточні зміни, щоб увімкнути модуль і уможливити редагування в цьому розділі. - - <html><head/><body><p>This setting does not override disabling recycle bin prompts </p></body></html> - <html><head/><body><p>Це налаштування не перекриває вимкнення підказок кошика для сміття </p></body></html> - - - <html><head/><body><p>This improves compatibility with certain applications which search for password without unlocking the database first.</p><p>But enabling this may also crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a different value set in applications.) </p></body></html> - <html><head/><body><p>Це покращує сумісність з певними додатками, які шукають пароль без попереднього розблокування бази даних.</p><p>Але увімкнення цього може також призвести до збою клієнта, якщо базу даних не вдалося розблокувати протягом певного часу (зазвичай 25 секунд, але може бути інше значення, встановлене в додатках)</p></body></html> - SettingsWidgetKeeShare @@ -10108,14 +8727,6 @@ This option is deprecated, use --set-key-file instead. TagModel - - Clear Search - Очистити пошук - - - All Entries - Усі записи - Expired Протерміновано @@ -10124,6 +8735,14 @@ This option is deprecated, use --set-key-file instead. Weak Passwords Ненадійні паролі + + All Entries + Усі записи + + + Clear Search + Очистити пошук + TagView @@ -10168,7 +8787,7 @@ This option is deprecated, use --set-key-file instead. NOTE: These TOTP settings are custom and may not work with other authenticators. TOTP QR code dialog warning - ПРИМІТКА: таке налаштування TOTP є нестандартним і може не працювати з іншими автентифікаторами. + ПРИМІТКА: Таке налаштування TOTP є нестандартним і може не працювати з іншими автентифікаторами. There was an error creating the QR code. @@ -10301,6 +8920,26 @@ Example: JBSWY3DPEHPK3PXP Start storing your passwords securely in a KeePassXC database Почніть надійно зберігати свої паролі у базі даних KeePassXC + + Create new database + Створити нову базу даних + + + Open existing database + Відкрити наявну базу даних + + + Import from KeePass 1 + Імпортувати з KeePass 1 + + + Import from 1Password + Імпортувати з 1Password + + + Import from CSV + Імпортувати з CSV + Recent databases Останні бази даних @@ -10313,18 +8952,6 @@ Example: JBSWY3DPEHPK3PXP Welcome to KeePassXC %1 Ласкаво просимо до KeePassXC %1 - - Create Database - Створити базу даних - - - Open Database - Відкрити базу даних - - - Import File - Імпортувати файл - WinUtils @@ -10341,8 +8968,31 @@ Example: JBSWY3DPEHPK3PXP Не вдалося зареєструвати глобальну комбінацію клавіш + + WindowsHello + + Failed to init KeePassXC crypto. + Не вдалося ініціювати KeePassXC crypto. + + + Failed to encrypt key data. + Не вдалося зашифрувати дані ключа. + + + Failed to get Windows Hello credential. + Не вдалося отримати облікові дані Windows Hello. + + + Failed to decrypt key data. + Не вдалося розшифрувати дані ключа. + + YubiKey + + %1 No interface, slot %2 + %1 без інтерфейсу, слот %2 + General: Загальні: @@ -10354,6 +9004,14 @@ Example: JBSWY3DPEHPK3PXP YubiKeyEditWidget + + Refresh hardware tokens + Оновити апаратні токени + + + Refresh + Оновити + Hardware key slot selection Вибір гнізда апаратного захисту @@ -10386,6 +9044,10 @@ Example: JBSWY3DPEHPK3PXP Challenge-Response set, click to change or remove Виклик-відповідь встановлено. Натисніть, щоб змінити або вилучити + + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + <p>Якщо ви володієте <a href="https://www.yubico.com/">YubiKey</a> або <a href="https://onlykey.io">OnlyKey</a>, ви можете користуватися ним для розширеної безпеки.</p><p>Ключ вимагає програмування одного з його слотів як <a href="https://www.yubico.com/products/services-software/challenge-response/">виклик-відповідь HMAC-SHA1</a>.</p> + Detecting hardware keys… Виявлення апаратних ключів... @@ -10394,25 +9056,28 @@ Example: JBSWY3DPEHPK3PXP No hardware keys detected Апаратних ключів не виявлено + + + YubiKeyInterface - Refresh hardware keys - Оновити апаратні ключі - - - <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed with <a href="https://keepassxc.org/docs/#faq-yubikey-howto">Challenge-Response</a>.</p> - <p>Якщо у вас є <a href="https://www.yubico.com/">YubiKey</a> або <a href="https://onlykey.io">OnlyKey</a>, ви можете використовувати його для додаткової безпеки.</p><p>Для ключа потрібно, щоб один із його слотів був запрограмований на <a href="https://KeePassXC.org/docs/#faq-yubikey-howto">виклик-відповідь</a>.</p> - - - Hardware keys found, but no slots are configured - Апаратні ключі знайдено, але жоден слот не налаштовано. + %1 Invalid slot specified - %2 + %1 указано непридатне гніздо — %2 YubiKeyInterfacePCSC + + (PCSC) %1 [%2] Challenge-Response - Slot %3 + (PCSC) %1 [%2] Виклик-відповідь - Слот %3 + The YubiKey PCSC interface has not been initialized. Інтерфейс YubiKey PCSC не було ініціалізовано. + + Hardware key is currently in use. + Зараз використовується апаратний захист. + Could not find or access hardware key with serial number %1. Please present it to continue. Не вдалося знайти або отримати доступ до апаратного ключа з серійним номером %1. Будь ласка, надайте його, щоб продовжити. @@ -10429,21 +9094,6 @@ Example: JBSWY3DPEHPK3PXP Failed to complete a challenge-response, the PCSC error code was: %1 Не вдалося завершити виклик-відповідь. Код помилки PCSC: %1 - - (NFC) %1 [%2] - Slot %3, %4 - YubiKey display fields - (NFC) %1 [%2] - Слот %3, %4 - - - Press - USB Challenge-Response Key interaction request - Натиснути - - - Passive - USB Challenge-Response Key no interaction required - Пасивне - YubiKeyInterfaceUSB @@ -10451,6 +9101,14 @@ Example: JBSWY3DPEHPK3PXP Unknown Невідомий + + (USB) %1 [%2] Configured Slot - %3 + (USB) %1 [%2] Налаштований слот - %3 + + + (USB) %1 [%2] Challenge-Response - Slot %3 - %4 + (USB) %1 [%2] Виклик-відповідь - Слот %3 - %4 + Press USB Challenge-Response Key interaction request @@ -10465,6 +9123,10 @@ Example: JBSWY3DPEHPK3PXP The YubiKey USB interface has not been initialized. USB-інтерфейс для YubiKey не було ініціалізовано. + + Hardware key is currently in use. + Зараз використовується апаратний захист. + Could not find hardware key with serial number %1. Please plug it in to continue. Апаратний ключ з серійним номером %1 не знайдено. Будь ласка, встроміть його для продовження. @@ -10481,15 +9143,5 @@ Example: JBSWY3DPEHPK3PXP Failed to complete a challenge-response, the specific error was: %1 Не вдалося завершити виклик-відповідь, конкретна помилка: %1 - - %1 [%2] - Slot %3 - YubiKey NEO display fields - %1 [%2] - Слот %3 - - - %1 [%2] - Slot %3, %4 - YubiKey display fields - %1 [%2] - Слот %3, %4 - \ No newline at end of file diff --git a/share/translations/keepassxc_zh_CN.ts b/share/translations/keepassxc_zh_CN.ts index bc457df0a..45ef264ff 100644 --- a/share/translations/keepassxc_zh_CN.ts +++ b/share/translations/keepassxc_zh_CN.ts @@ -80,10 +80,6 @@ Details 详情 - - Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. - 在请求客户端与 KeePassXC 同时运行期间,您的选择会被记住。 - Remember 记住 @@ -92,6 +88,10 @@ Allow Selected 允许选定 + + Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. + 在请求客户端与 KeePassXC 同时运行期间,您的选择会被记住。 + Deny All && Future 禁止此后所有 @@ -122,13 +122,9 @@ Use OpenSSH 使用 OpenSSH - - Use both agents - 同时使用两种代理 - SSH_AUTH_SOCK override - SSH_AUTH_SOCK 覆写 + SSH_AUTH_SOCK 重写 SSH_AUTH_SOCK value @@ -148,12 +144,16 @@ No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. - 没有可用的 SSH 代理套接字。确保环境变量 SSH_AUTH_SOCK 存在或已设置覆写。 + 没有可用的 SSH 代理套接字。确保环境变量 SSH_AUTH_SOCK 存在或已设置重写。 SSH Agent connection is working! SSH 代理连接工作正常! + + Use both agents + 同时使用两种代理 + ApplicationSettingsWidget @@ -169,10 +169,6 @@ Security 安全 - - This setting cannot be enabled when minimize on unlock is enabled. - 如果启用解锁时最小化,则无法启用此设置。 - Access error for config file %1 访问配置文件 %1 错误 @@ -217,49 +213,21 @@ You must restart the application to set the new language. Would you like to restart now? 您必须重新启动应用才能应用新语言。要现在重新启动吗? + + Reset Settings? + 重置选项? + + + Are you sure you want to reset all general and security settings to default? + 您确定要将所有常规和安全设置重置为默认值吗? + Select backup storage directory 选择备份存储文件夹 - Confirm Reset - 确认重置 - - - Are you sure you want to reset all settings to default? - 您确定要将所有设置重置为默认值吗? - - - Import KeePassXC Settings - 导入 KeePassXC 设置 - - - Failed to import settings from %1, not a valid settings file. - 从 %1 导入设置失败,不是有效的设置文件。 - - - Export KeePassXC Settings - 导出 KeePassXC 设置 - - - Small - - - - Normal - 正常 - - - Medium - - - - Large - - - - Custom - 自定义 + This setting cannot be enabled when minimize on unlock is enabled. + 如果启用解锁时最小化,则无法启用此设置。 @@ -292,10 +260,6 @@ Remember previously used databases 记住以前使用的数据库 - - recent files - 最近的文件 - Load previously open databases on startup 启动时加载以前打开的数据库 @@ -312,6 +276,25 @@ Include beta releases when checking for updates 检查更新时包含 Beta 版本 + + On database unlock, show entries that + 解锁数据库时,显示符合条件的条目 + + + have expired + On database unlock, show entries that... + 已过期 + + + days + On database unlock, show entries that will expire within %1 days + 天内过期 + + + will expire within + On database unlock, show entries that... + 将在 + File Management 文件管理 @@ -336,10 +319,22 @@ Backup database file before saving 保存前备份数据库文件 + + Backup destination + 备份目的地 + + + Specifies the database backup file location. Occurrences of "{DB_FILENAME}" are replaced with the filename of the saved database without extension. {TIME:<format>} is replaced with the backup time, see https://doc.qt.io/qt-5/qdatetime.html#toString. <format> defaults to format string "dd_MM_yyyy_hh-mm-ss". + 指定数据库备份文件位置,其中 "{DB_FILENAME}" 会被替换为保存的数据库文件名,不包含扩展名。{TIME:<format>} 会被替换为备份时间,详见 https://doc.qt.io/qt-5/qdatetime.html#toString 。<format> 默认为格式字符串 "dd_MM_yyyy_hh-mm-ss"。 + {DB_FILENAME}.old.kdbx {DB_FILENAME}.old.kdbx + + Choose... + 选择... + Use alternative saving method (may solve problems with Dropbox, Google Drive, GVFS, etc.) 使用替代保存方式(可能会解决 Dropbox、Google Drive、GVFS 等问题) @@ -417,10 +412,6 @@ Toolbar button style: 工具栏按钮样式: - - Show passwords in color - 密码以彩色显示 - Use monospaced font for notes 备注使用等宽字体 @@ -507,69 +498,12 @@ 记住上次输入的条目: - On database unlock, show entries that will expire within - 解锁数据库时,显示即将过期的条目 + recent files + 最近的文件 - On database unlock, show entries that will expire within - 解锁数据库时,显示即将过期的条目 - - - days - number of days warning for password expiration - 天内过期 - - - Destination format: - 目标格式: - - - <html><head/><body><p><span style=" font-weight:600;">{DB_FILENAME}</span> is replaced with the filename of the saved database without extension</p><p><span style=" font-weight:600;">{TIME:&lt;format&gt;}</span> is replaced with the specified time format (default: dd_MM_yyyy_hh-mm-ss)</p><p>See the User Guide for more details</p></body></html> - <html><head/><body><p><span style=" font-weight:600;">{DB_FILENAME}</span> 将被替换为保存数据库的文件名,不含扩展名</p><p><span style=" font-weight:600;">{TIME:&lt;format&gt;}</span> 将被替换为指定的时间格式(默认:dd_MM_yyyy_hh-mm-ss)</p><p>查看用户指南了解详情</p></body></html> - - - Choose folder... - 选择文件夹... - - - Show confirmation before moving entries to recycle bin - 删除条目到回收站之前提示确认 - - - Copy data on double clicking field in entry view - 在条目视图中,双击字段复制数据 - - - Show toolbar - 显示工具栏 - - - Show the menu bar by pressing the Alt key - 按下 Alt 键显示菜单栏 - - - Show menubar - 显示菜单栏 - - - Import settings… - 导入设置… - - - Export settings… - 导出设置… - - - Open browser on double clicking URL field in entry view - 在条目视图中,双击 URL 字段打开浏览器 - - - Font size: - 字体大小: - - - Font size selection - 字体大小选择 + Show passwords in color + 密码以彩色显示 @@ -624,6 +558,10 @@ Lock databases after minimizing the window 在最小化窗口后锁定数据库 + + Require password repeat when it is visible + 当密码可见时,需要重复密码 + Hide passwords when editing them 编辑密码时隐藏密码 @@ -636,6 +574,18 @@ Hide passwords in the entry preview panel 在条目预览面板中隐藏密码 + + Hide entry notes by default + 默认情况下隐藏条目备注 + + + Move entries to recycle bin without confirmation + 删除到回收站无需确认 + + + Enable double click to copy the username/password entry columns + 启用双击复制条目的用户名/密码列 + Privacy 隐私 @@ -648,18 +598,6 @@ Hide TOTP in the entry preview panel 在条目预览面板隐藏 TOTP - - Lock databases when switching user - 切换用户时锁定数据库 - - - Lock Options - 锁定选项 - - - Hide notes in the entry preview panel - 在条目预览面板隐藏备注 - AutoType @@ -704,13 +642,27 @@ 检测到过长延迟,最大值为 %1:%2 - Entry does not have attribute for PICKCHARS: %1 - 条目不包含用于 PICKCHARS 的属性:%1 + Invalid conversion type: %1 + 无效的转换类型:%1 + + + Invalid conversion syntax: %1 + 无效的转换语法:%1 + + + Invalid regular expression syntax %1 +%2 + 无效的正则表达式语法 %1 +%2 Invalid placeholder: %1 无效的占位符:%1 + + Entry does not have attribute for PICKCHARS: %1 + 条目不包含用于 PICKCHARS 的属性:%1 + AutoTypeAssociationsModel @@ -752,6 +704,10 @@ AutoTypePlatformX11 + + Trying to send invalid keysym. + 正在尝试发送无效的键码。 + Sequence aborted: Caps Lock is on 序列中止:已打开大写锁定 @@ -764,10 +720,6 @@ Unable to get valid keycode for key: 无法为按键获得有效的键码: - - Trying to send invalid keyboard symbol. - 正在尝试发送无效的键盘符号。 - AutoTypeSelectDialog @@ -872,13 +824,13 @@ Ctrl+4 - 使用虚拟键盘(仅限 Windows)</p> Disable for this site 对此站点禁用 - - Undo - 撤销 - BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + KeePassXC-Browser 保存条目 + Ok 确定 @@ -893,74 +845,13 @@ Please select the correct database for saving credentials. 您打开了多个数据库。 请选择正确的数据库以保存凭据。 - - KeePassXC - Select Database - KeePassXC - 选择数据库 - - - - BrowserPasskeysConfirmationDialog - - Cancel - 取消 - - - Update - 更新 - - - Authenticate - 认证 - - - Register new - 新注册 - - - Register - 注册 - - - Timeout in <b>%n</b> seconds... - 在 <b>%n</b> 秒后超时… - - - Relying Party: %1 - 依赖方:%1 - - - Username: %1 - 用户名:%1 - - - KeePassXC - Passkey credentials - KeePassXC - 通行密钥凭据 - - - Add to existing entry - 添加到现有条目 - - - Existing passkey found. -Do you want to register a new passkey for: - 找到已存在的通行密钥。 -您是否要注册新通行密钥到: - - - Select the existing passkey and press Update to replace it. - 选择已存在的通行密钥并按下更新来替换。 - - - Authenticate passkey credentials for: - 认证通行密钥凭据: - - - Do you want to register a passkey for: - 您是否要注册通行密钥到: - BrowserService + + KeePassXC: Create a new group + KeePassXC:创建新群组 + A request for creating a new group "%1" has been received. Do you want to create this group? @@ -969,6 +860,10 @@ Do you want to create this group? 确认要创建群组吗? + + KeePassXC: New key association request + KeePassXC:新的密钥关联请求 + You have received an association request for the following database: %1 @@ -985,16 +880,28 @@ Chrome 笔记本电脑 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? 一个名为“%1”的共享加密密钥已存在。 确认要覆盖它吗? + + KeePassXC: Update Entry + KeePassXC:更新条目 + Do you want to update the information in %1 - %2? 您想更新 %1 - %2 中的信息吗? + + KeePassXC: Delete entry + KeePassXC:删除条目 + A request for deleting entry "%1" has been received. Do you want to delete the entry? @@ -1004,58 +911,50 @@ Do you want to delete the entry? - %1 (Passkey) - %1(通行密钥) + Converting attributes to custom data… + 将属性转换为自定义数据... - KeePassXC - Create a new group - KeePassXC - 创建新群组 + Abort + 中止 - Disable - 禁用 + KeePassXC: Converted KeePassHTTP attributes + KeePassXC:已转换为 KeePassHTTP 属性 - KeePassXC - Overwrite existing key? - KeePassXC - 覆盖现有的密钥吗? + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + 已成功转换 %1 个条目的属性。 +已移动 %2 个密钥到自定义数据。 + + + Successfully moved %n keys to custom data. + 已成功移动 %n 个密钥到自定义数据。 - KeePassXC - Update Entry - KeePassXC - 更新条目 + KeePassXC: No entry with KeePassHTTP attributes found! + KeePassXC:找不到含有 KeePassHTTP 属性的条目! - KeePassXC - Delete entry - KeePassXC - 删除条目 + The active database does not contain an entry with KeePassHTTP attributes. + 当前数据库中不存在有 KeePassHTTP 属性的条目。 - KeePassXC - New key association request - KeePassXC - 新的密钥关联请求 + Don't show this warning again + 不再显示此警告 - Passkey - 通行密钥 + KeePassXC: Legacy browser integration settings detected + KeePassXC:检测到旧版浏览器集成设置 - KeePassXC - Passkey credentials - KeePassXC - 通行密钥凭据 - - - Register a new passkey to this entry: - 注册新通行密钥到此条目: - - - KeePassXC - Update passkey - KeePassXC - 更新通行密钥 - - - Entry already has a passkey. -Do you want to overwrite the passkey in %1 - %2? - 条目已有一个通行密钥。 -您想要覆盖 %1 - %2 中的通行密钥吗? - - - Register - 注册 + 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? + 您的 KeePassXC-Browser 设置需要移动到数据库设置中。 +这对于保持当前浏览器连接是必需的。 +是否要立即迁移现有设置? @@ -1076,6 +975,10 @@ Do you want to overwrite the passkey in %1 - %2? General 常规 + + Browsers installed as snaps are currently not supported. + 以 Snap 软件包形式安装的浏览器目前不受支持。 + Enable integration for these browsers: 为这些浏览器开启集成: @@ -1247,6 +1150,26 @@ Do you want to overwrite the passkey in %1 - %2? Custom extension ID 自定义扩展 ID + + Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 + 由于 Snap 沙盒限制,您必须运行一个脚本才能启用浏览器集成。<br />您可以从 %1 获取此脚本 + + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 + 要启用浏览器集成,您必须安装 KeePassXC-Browser。<br />下载适用于 %1、%2 和 %3 的版本。%4 + + + Please see special instructions for browser extension use below + 请参阅下面的浏览器扩展使用特殊说明 + + + <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. + <b>错误:</b>找不到自定义代理位置!<br/>没有代理应用程序,浏览器集成将无法使用。 + + + <b>Warning:</b> The following options can be dangerous! + <b>警告:</b>以下选项可能有危险! + Executable Files 可执行文件 @@ -1263,46 +1186,6 @@ Do you want to overwrite the passkey in %1 - %2? Select native messaging host folder location 选择 Native Messaging 主机文件夹位置 - - Allow keepassxc-proxy to list all entries with their title, URL and UUID in connected databases. - 允许 keepassxc-proxy 列出已连接的数据库中的所有条目,包括标题、URL 和 UUID。 - - - Allow limited access to all entries in connected databases (ignores site access restrictions) - 允许对已连接的数据库中所有条目的受限访问(忽略站点访问限制) - - - <b>Warning:</b> Only adjust these settings if necessary. - <b>警告:</b>仅在必要时调整这些设置。 - - - The custom proxy location does not exist. - 自定义代理位置不存在。 - - - <b>Error:</b> The custom proxy location does not exist. Correct this in the advanced settings tab. - <b>错误:</b>自定义代理位置不存在。请前往高级设置页面修正。 - - - <b>Error:</b> The installed proxy executable is missing from the expected location: %1<br/>Please set a custom proxy location in the advanced settings or reinstall the application. - <b>错误:</b>已安装到此位置的代理程序可执行文件丢失:%1<br/>请在高级设置中修改自定义代理位置或重新安装应用。 - - - Allows using insecure http://localhost with passkeys for testing purposes. - 允许通行密钥使用不安全的 http://localhost 用于测试目的。 - - - Allow using localhost with passkeys - 允许通行密钥使用 localhost - - - KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. - 要启用浏览器集成,您必须安装 KeePassXC-Browser。<br />下载适用于 %1、%2 和 %3 的版本。 - - - Browsers installed using Snap or Flatpak are not supported with exception to Firefox installed using Snap. - 通过 Snap 或 Flatpak 安装的浏览器不受支持,但通过 Snap 安装的 Firefox 除外。 - CloneDialog @@ -1325,6 +1208,14 @@ Do you want to overwrite the passkey in %1 - %2? CsvImportWidget + + Import CSV fields + 导入 CSV 字段 + + + filename + 文件名 + size, rows, columns 大小、行、列 @@ -1433,43 +1324,50 @@ Do you want to overwrite the passkey in %1 - %2? Column %1 列 %1 + + Imported from CSV file + 从 CSV 文件中导入 + + + Original data: + 原始数据: + + + Error(s) detected in CSV file! + 在 CSV 文件中检测到错误! + [%n more message(s) skipped] [%n 条信息被跳过] - Failed to parse CSV file: %1 - 解析 CSV 文件失败:%1 + Error + 错误 - Imported from CSV file: %1 - 已从 CSV 文件导入:%1 - - - No Title Selected - 未选择标题 - - - No title column was selected, entries will be hard to tell apart. -Are you sure you want to import? - 未选择标题列,条目将难以区分。 -您确定要导入吗? - - - Tags - 标签 + CSV import: writer has errors: +%1 + CSV 导入:写入错误: +%1 CsvParserModel + + %1, %2, %3 + file info: bytes, rows, columns + %1,%2,%3 + + + %n byte(s) + %n 字节 + %n row(s) - CSV row count %n 行 %n column(s) - CSV column count %n 列 @@ -1522,14 +1420,6 @@ Backup database located at %2 Recycle Bin 回收站 - - Database file read error. - 数据库文件读取错误。 - - - No file path was provided. - 未提供文件路径。 - DatabaseOpenDialog @@ -1552,10 +1442,30 @@ Backup database located at %2 Password field 密码字段 + + Enter Additional Credentials (if any): + 输入附加凭据(如果有): + + + Key File: + 密钥文件: + + + Key file help + 密钥文件帮助 + Hardware key slot selection 选择硬件密钥的插槽 + + Hardware Key: + 硬件密钥: + + + Hardware key help + 硬件密钥帮助 + Key file to unlock the database 用于解锁数据库的密钥文件 @@ -1568,6 +1478,14 @@ Backup database located at %2 Browse… 浏览... + + Refresh hardware tokens + 刷新硬件令牌 + + + Refresh + 刷新 + Unlock Database 解锁数据库 @@ -1630,6 +1548,10 @@ To prevent this error from appearing, you must go to "Database Settings / S Retry with empty password 使用空密码重试 + + Failed to authenticate with Touch ID + Touch ID 验证失败 + Failed to open key file: %1 无法打开密钥文件:%1 @@ -1662,69 +1584,41 @@ To prevent this error from appearing, you must go to "Database Settings / S Cannot use database file as key file 无法使用数据库文件作为密钥 + + You cannot use your database file as a key file. +If you do not have a key file, please leave the field empty. + 您不能用您的数据库作为密钥文件。 +如果您没有密钥文件,请留空这个字段。 + + + Detecting hardware keys… + 正在检测硬件密钥... + + + No hardware keys detected + 未检测到硬件密钥 + + + Select hardware key… + 选择硬件密钥... + + + <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information…</p> + <p>除了密码之外,您还可以使用机密文件来增强数据库的安全性。此文件可以在数据库的安全设置中生成。</p><p>这<strong>不是</strong>您的 *.kdbx 数据库文件!<br>如果没有密钥文件,请将此字段留空。</p><p>点击获取更多信息…</p> + + + <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +<p>Click for more information…</p> + <p>您可以使用像 <strong>YubiKey</strong> 或 <strong>OnlyKey</strong> 这种带有 HMAC-SHA1 配置插槽的硬件安全密钥。</p> +<p>点击获取更多信息…</p> + authenticate to access the database 验证身份以访问数据库 - Failed to authenticate with Quick Unlock: %1 - 快速解锁验证失败:%1 - - - Select Key File: - 选择密钥文件: - - - <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!</p> - <p>除了密码之外,您还可以使用机密文件来增强数据库的安全性。此文件可以在数据库的安全设置中生成。</p><p>这<strong>不是</strong>您的 *.kdbx 数据库文件!</p> - - - Use hardware key [Serial: %1] - 使用硬件密钥 [序号:%1] - - - Use hardware key - 使用硬件密钥 - - - Your database file is NOT a key file! -If you don't have a key file or don't know what that is, you don't have to select one. - 您的数据库文件不是密钥文件! -如果您没有密钥文件,或者不知道这是什么,就不需要选择。 - - - KeePassXC database file selected - KeePassXC 数据库文件被选择 - - - The file you selected looks like a database file. -A database file is NOT a key file! - -Are you sure you want to continue with this file?. - 您选择的文件看起来是一份数据库文件。 -数据库文件不是密钥文件! - -您确定要继续使用此文件吗? - - - No hardware keys found. - 未找到硬件密钥。 - - - Refresh Hardware Keys - 刷新硬件密钥 - - - Click to add a key file. - 点击以添加密钥文件。 - - - <a href="#" style="text-decoration: underline">I have a key file</a> - <a href="#" style="text-decoration: underline">我有一份密钥文件</a> - - - Hardware keys found, but no slots are configured. - 硬件密钥已找到,但未配置任何插槽。 + Failed to authenticate with Windows Hello: %1 + Windows Hello 验证失败:%1 @@ -1736,6 +1630,10 @@ Are you sure you want to continue with this file?. DatabaseSettingsDialog + + Advanced Settings + 高级设置 + General 常规 @@ -1760,22 +1658,6 @@ Are you sure you want to continue with this file?. Maintenance 维护 - - KeeShare - KeeShare - - - Secret Service Integration - 保密服务集成 - - - Remote Sync - 远程同步 - - - Database Settings: %1 - 数据库设置:%1 - DatabaseSettingsWidgetBrowser @@ -1783,6 +1665,18 @@ Are you sure you want to continue with this file?. KeePassXC-Browser settings KeePassXC-Browser 设置 + + Convert KeePassHTTP data + 转换 KeePassHTTP 数据 + + + Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data + 将旧版 KeePassHTTP 属性转换为兼容 KeePassXC-Browser 的自定义数据 + + + Refresh database root group ID + 刷新数据库根群组 ID + Disconnect all browsers 断开与所有浏览器的关联 @@ -1791,10 +1685,6 @@ Are you sure you want to continue with this file?. Forget all site-specific settings on entries 取消条目上所有站点特定设置 - - Refresh database root group ID - 刷新数据库根群组 ID - Stored keys 存储的密钥 @@ -1843,10 +1733,18 @@ This may prevent connection to the browser plugin. 您确定要断开与所有浏览器的关联吗? 这可能会影响与浏览器插件的连接。 + + KeePassXC: No keys found + KeePassXC:未找到密钥 + No shared encryption keys found in KeePassXC settings. 未在 KeePassXC 设置中找到共享加密密钥。 + + KeePassXC: Removed keys from database + KeePassXC:已从数据库中删除密钥 + Successfully removed %n encryption key(s) from KeePassXC settings. 已成功从 KeePassXC 设置中删除了 %n 个加密密钥。 @@ -1865,14 +1763,32 @@ Permissions to access entries will be revoked. 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 convert all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + 您确定要将所有旧版浏览器集成数据转换到最新标准吗? +这对于保持与浏览器插件的兼容性是必要的。 + Refresh database ID 刷新数据库 ID @@ -1883,26 +1799,6 @@ This is only necessary if your database is a copy of another and the browser ext 是否要刷新数据库 ID? 只有当您的数据库是另一个数据库的副本并且浏览器扩展无法连接时,才有必要这样做。 - - Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data - 将旧版 KeePassHTTP 属性转换为兼容 KeePassXC-Browser 的自定义数据 - - - No keys found - 未找到密钥 - - - Removed keys from database - 从数据库中删除密钥 - - - Removed permissions - 已删除的权限 - - - No entry with permissions found! - 未找到有权限的条目! - DatabaseSettingsWidgetDatabaseKey @@ -1942,18 +1838,6 @@ Are you sure you want to continue without a password? Failed to change database credentials 更改数据库凭据失败 - - Weak password - 较弱密码 - - - This is a weak password! For better protection of your secrets, you should choose a stronger password. - 这是一个弱密码!为了更好地保护您的秘密,您应该选择更强的密码。 - - - The provided password does not meet the minimum quality requirement. - 提供的密码未达到最低强度要求。 - DatabaseSettingsWidgetEncryption @@ -1961,6 +1845,14 @@ Are you sure you want to continue without a password? Decryption Time: 解密时间: + + Change existing decryption time + 改变现在的解密时间 + + + Change + 更改 + Decryption time in seconds 解密时间秒数 @@ -2041,6 +1933,11 @@ Are you sure you want to continue without a password? KDBX 3 KDBX 3 + + unchanged + Database decryption time is unchanged + 无变化 + Number of rounds too high Key transformation rounds @@ -2093,18 +1990,6 @@ If you keep this number, your database will not be protected from brute force at Threads for parallel execution (KDF settings) 线程 - - Encryption Settings: - 加密设置: - - - Basic - 基本 - - - Advanced - 高级 - DatabaseSettingsWidgetFdoSecrets @@ -2235,70 +2120,6 @@ removed from the database. 从回收站中删除的条目将 会从数据库中删除。 - - Autosave delay since last change - 修改后自动保存延迟 - - - Autosave delay - 自动保存延迟 - - - Autosave delay since last change in minutes - 修改后自动保存延迟分钟 - - - min - - - - Autosave delay since last change checkbox - 修改后自动保存延迟复选框 - - - Public Database Metadata - 公开数据库元数据 - - - Warning: the following settings are not encrypted. - 警告:下列设置未被加密。 - - - Display name: - 显示名称: - - - Publically visible display name used on the unlock dialog - 在解锁对话框中公开显示的名称 - - - Database public display name - 数据库公开显示名称 - - - Display color: - 显示颜色: - - - Publically visible color used on the unlock dialog - 在解锁对话框中公开可见的颜色 - - - Database public display color chooser - 数据库公开显示颜色选择器 - - - Clear - 清空 - - - Display icon: - 显示图标: - - - Select Database Icon - 选择数据库图标 - DatabaseSettingsWidgetKeeShare @@ -2394,141 +2215,6 @@ removed from the database. 数据库描述字段 - - DatabaseSettingsWidgetRemote - - Sync Commands - 同步命令 - - - Remove - 删除 - - - Command Settings - 命令设置 - - - Name - 名称 - - - Save - 保存 - - - Download - 下载 - - - Command: - 命令: - - - Download command field - 下载命令字段 - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - 示例:“sftp user@hostname”或“scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}” - - - Input: - 输入: - - - Download input field - 下载输入字段 - - - Upload - 上传 - - - Upload command field - 上传命令字段 - - - e.g.: "sftp user@hostname" or "scp {TEMP_DATABASE} user@hostname:DatabaseOnRemote.kdbx" - 示例:“sftp user@hostname”或“scp {TEMP_DATABASE} user@hostname:DatabaseOnRemote.kdbx” - - - Upload input field - 上传输入字段 - - - Name cannot be empty. - 名称不能为空。 - - - Test - 测试 - - - Download command cannot be empty. - 下载命令不能为空。 - - - Download failed with error: %1 - 下载失败,错误为:%1 - - - Download finished, but file %1 could not be found. - 下载完成,但无法找到文件 %1。 - - - Download successful. - 下载成功。 - - - Save Remote Settings - 保存远程设置 - - - You have unsaved changes. Do you want to save them? - 您有未保存的更改。要保存它们吗? - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - 示例: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} 作为占位符,表示存储数据库的临时位置 -命令必须可以退出。如果最后一个命令是 `sftp` 则必须发送 `exit` 命令 - - - - e.g.: -put {TEMP_DATABASE} DatabaseOnRemote.kdbx -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - 示例: -put {TEMP_DATABASE} DatabaseOnRemote.kdbx -exit ---- -{TEMP_DATABASE} 作为占位符,表示存储数据库的临时位置 -命令必须可以退出。如果最后一个命令是 `sftp` 则必须发送 `exit` 命令 - - - - Timeout: - 超时: - - - seconds - - - DatabaseTabWidget @@ -2561,10 +2247,26 @@ This is definitely a bug, please report it to the developers. CSV file CSV 文件 + + Select CSV file + 选择 CSV 文件 + Merge database 合并数据库 + + KeePass 1 database + KeePass 1 数据库 + + + Open KeePass 1 database + 打开 KeePass 1 数据库 + + + Open OPVault + 打开 OPVault + Export database to CSV file 导出数据库到 CSV 文件 @@ -2577,6 +2279,28 @@ This is definitely a bug, please report it to the developers. Writing the HTML file failed. 写入 HTML 文件失败 + + Export Confirmation + 导出确认 + + + You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? + 您即将导出数据库到未加密文件,这将会直接暴露您的密码或敏感信息!确定要继续吗? + + + New Database + 新建数据库 + + + %1 [New Database] + Database tab name modifier + %1 [新建数据库] + + + %1 [Locked] + Database tab name modifier + %1 [锁定] + Export database to XML file 导出数据库到 XML 文件 @@ -2589,31 +2313,9 @@ This is definitely a bug, please report it to the developers. Writing the XML file failed 写入 XML 文件失败 - - Export Confirmation - 导出确认 - - - You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? - 您即将导出数据库到未加密文件,这将会直接暴露您的密码或敏感信息!确定要继续吗? - - - %1 [Locked] - Database tab name modifier - %1 [锁定] - - - %1 [Temporary] - Database tab name modifier - %1 [临时] - DatabaseWidget - - Searches and Tags - 搜索与标签 - Searching… 正在搜索… @@ -2662,10 +2364,6 @@ This is definitely a bug, please report it to the developers. Expired entries 已过期条目 - - Entries expiring within %1 day(s) - 将在 %1 天内过期的条目 - No current database. 未打开任何数据库。 @@ -2690,18 +2388,6 @@ This is definitely a bug, please report it to the developers. No Results 无结果 - - Save - 保存 - - - Enter a unique name or overwrite an existing search from the list: - 输入唯一名称或者覆盖列表中已存在的搜索: - - - Save Search - 保存搜索 - Lock Database? 锁定数据库? @@ -2730,6 +2416,26 @@ Save changes? 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? + 数据库文件已发生变化,并且您有未保存的更改。 +您想合并您的修改吗? + + + Could not open the new database file while attempting to autoreload. +Error: %1 + 尝试自动重载时无法打开新的数据库文件。 +错误:%1 + Disable safe saves? 禁用安全保存? @@ -2772,94 +2478,25 @@ Disable safe saves and try again? Could not find database file: %1 找不到数据库文件:%1 - - New Database - 新建数据库 + + Entries expiring within %1 day(s) + 将在 %1 天内过期的条目 - %1 [New Database] - Database tab name modifier - %1 [新建数据库] + Searches and Tags + 搜索与标签 - Remote Sync did not contain any download or upload commands. - 远程同步未包含任何下载或上传命令。 + Enter a unique name or overwrite an existing search from the list: + 输入唯一名称或者覆盖列表中已存在的搜索: - Remote sync '%1' completed successfully! - 远程同步“%1”成功完成! + Save + 保存 - Remote sync '%1' failed: %2 - 远程同步“%1”失败:%2 - - - Error while saving database %1: %2 - 保存数据库 %1 时出错:%2 - - - Downloading... - 正在下载... - - - Uploading... - 正在上传... - - - Syncing... - 正在同步... - - - Remove passkey from entry - 从条目内移除通行密钥 - - - Do you want to remove the passkey from this entry? - 是否从此条目中移除通行密钥? - - - The database file "%1" was modified externally - 数据库文件“%1”被外部修改 - - - Do you want to load the changes? - 您要加载这些变更吗? - - - Reload database - 重新加载数据库 - - - Reloading database… - 正在重新加载数据库… - - - Reload canceled - 重新加载已取消 - - - Reload successful - 重新加载成功 - - - Reload pending user action… - 重新加载正在等待用户操作… - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes<br>Ignore the changes on disk until save<br>Discard unsaved changes - 数据库文件“%1”被外部修改。<br>您想要怎样操作?<br><br>合并所有变更<br>在保存之前忽略磁盘上的变更<br>放弃未保存的变更 - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes then save<br>Overwrite the changes on disk<br>Discard unsaved changes - 数据库文件“%1”被外部修改。<br>您想要怎样操作?<br><br>合并所有变更并保存<br>覆盖磁盘上的变更<br>放弃未保存的变更 - - - Database file overwritten. - 数据库文件已覆盖。 - - - Database file on disk cannot be unlocked with current credentials.<br>Enter new credentials and/or present hardware key to continue. - 磁盘上的数据库文件无法被当前凭据解锁。<br>输入新凭据并/或提供硬件密钥以继续。 + Save Search + 保存搜索 @@ -2912,6 +2549,10 @@ Disable safe saves and try again? n/a + + (encrypted) + (已加密) + Select private key 选择私钥文件 @@ -2998,10 +2639,6 @@ Would you like to correct it? Hide 隐藏 - - %n hour(s) - %n 小时 - %n week(s) %n 周 @@ -3014,9 +2651,9 @@ Would you like to correct it? %n year(s) %n 年 - - Failed to decrypt SSH key, ensure password is correct. - 解密 SSH 密钥失败,请确认密码是否正确。 + + %n hour(s) + %n 小时 @@ -3136,20 +2773,10 @@ Would you like to correct it? Add new window association 添加一个新的窗口关联 - - + - Add item - + - Remove selected window association 删除所选窗口关联 - - - - Remove item - - - Window title: 窗口标题: @@ -3174,9 +2801,23 @@ Would you like to correct it? Custom Auto-Type sequence for this window 自定义此窗口的自动输入序列 + + + + Add item + + + + + - + Remove item + - + EditEntryWidgetBrowser + + These settings affect to the entry's behaviour with the browser extension. + 这些设置会影响启用浏览器扩展时此条目的行为。 + General 常规 @@ -3189,14 +2830,26 @@ Would you like to correct it? Skip Auto-Submit for this entry 跳过此条目的自动提交 + + Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. + 仅将此设置发送到浏览器的 HTTP 认证对话框。启用后,普通登录表单不会再显示此条目供选择。 + Use this entry only with HTTP Basic Auth 此条目仅用于 HTTP Basic 认证 + + Do not send this setting to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. + 不要将此设置发送到浏览器的 HTTP 认证对话框。启用后,HTTP 认证对话框不会再显示此条目供选择。 + Do not use this entry with HTTP Basic Auth 此条目不用于 HTTP Basic 认证 + + Additional URL's + 附加 URL + Add 添加 @@ -3209,22 +2862,6 @@ Would you like to correct it? Edit 编辑 - - These settings affect the entry's behaviour with the browser extension. - 这些设置会影响启用浏览器扩展时此条目的行为。 - - - Additional URLs - 附加 URL - - - Only send this entry to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. - 仅将此条目发送到浏览器的 HTTP 认证对话框。启用后,普通登录表单不会再显示此条目供选择。 - - - Do not send this entry to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. - 不要将此条目发送到浏览器的 HTTP 认证对话框。启用后,HTTP 认证对话框不会再显示此条目供选择。 - EditEntryWidgetHistory @@ -3390,6 +3027,19 @@ Would you like to correct it? Private key 私钥 + + External file + 外部文件 + + + Browser for key file + 浏览密钥文件 + + + Browse… + Button for opening file dialog + 浏览... + Attachment 附件 @@ -3406,23 +3056,6 @@ Would you like to correct it? Remove from agent 从代理中删除 - - External file - 外部文件 - - - Browser for key file - 浏览密钥文件 - - - Browse… - Button for opening file dialog - 浏览... - - - Generate - 生成 - Select attachment file 选择附件文件 @@ -3447,10 +3080,6 @@ Would you like to correct it? seconds - - Clear agent - 清除代理 - EditGroupWidget @@ -3462,6 +3091,10 @@ Would you like to correct it? Icon 图标 + + Browser Integration + 浏览器集成 + Properties 属性 @@ -3478,10 +3111,6 @@ Would you like to correct it? Group has unsaved changes 群组有未保存的更改 - - Browser Integration - 浏览器集成 - Enable 启用 @@ -3541,14 +3170,6 @@ Would you like to correct it? Omit WWW subdomain from matching toggle for this and sub groups 切换当前群组与子群组是否在匹配时省略 WWW 子域名 - - Restrict matching to given browser key: - 限制与指定的浏览器密钥匹配: - - - Restrict matching to given browser key toggle for this and sub groups - 限制当前群组和子群组与指定的浏览器密钥匹配 - EditGroupWidgetKeeShare @@ -3781,6 +3402,10 @@ Supported extensions are: %1. Unable to fetch favicon. 无法获取网站图标。 + + You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security + 您可以在“工具 -> 设置 -> 安全”中选择 DuckDuckGo 作为网站图标来源 + Existing icon selected. 已选择存在的图标。 @@ -3813,10 +3438,6 @@ Supported extensions are: %1. The following icon(s) failed: 以下图标失败: - - You can enable the DuckDuckGo website icon service under Application Settings -> Security - 您可以在“应用设置 -> 安全”中选择 DuckDuckGo 作为网站图标来源 - EditWidgetProperties @@ -3893,24 +3514,6 @@ This may cause the affected plugins to malfunction. %1 - Clone %1 - 副本 - - Passkey - 通行密钥 - - - Invalid conversion type: %1 - 无效的转换类型:%1 - - - Invalid conversion syntax: %1 - 无效的转换语法:%1 - - - Invalid regular expression syntax %1 -%2 - 无效的正则表达式语法 %1 -%2 - EntryAttachments @@ -3919,21 +3522,6 @@ This may cause the affected plugins to malfunction. 无法打开文件“%1” - - EntryAttachmentsDialog - - Form - 表单 - - - File name - 文件名 - - - File contents... - 文件内容… - - EntryAttachmentsModel @@ -3971,6 +3559,14 @@ This may cause the affected plugins to malfunction. Remove 删除 + + Rename selected attachment + 重命名所选附件 + + + Rename + 重命名 + Open selected attachment 打开所选附件 @@ -4044,6 +3640,12 @@ This may cause the affected plugins to malfunction. Confirm Overwrite Attachment 确认覆盖附件 + + Attachment "%1" already exists. +Would you like to overwrite the existing attachment? + 附件“%1”已存在。 +您要覆盖已存在的附件吗? + Confirm Attachment 确认附件 @@ -4078,24 +3680,6 @@ Error: %1 保存更新的附件失败。 错误:%1 - - Attachment "%1" already exists. -Would you like to overwrite the existing attachment? - 附件“%1”已存在。 -您要覆盖已存在的附件吗? - - - New - 新建 - - - Preview - 预览 - - - Failed to preview an attachment: Attachment not found - 预览附件失败:未找到附件 - EntryAttributesModel @@ -4290,14 +3874,6 @@ Would you like to overwrite the existing attachment? Has TOTP 有 TOTP - - Background Color - 背景色 - - - Group Path - 群组路径 - EntryPreviewWidget @@ -4318,8 +3894,8 @@ Would you like to overwrite the existing attachment? 密码 - URL - URL + Notes + 备注 Expiration @@ -4338,8 +3914,8 @@ Would you like to overwrite the existing attachment? 用户名 - Notes - 备注 + URL + URL Advanced @@ -4389,10 +3965,6 @@ Would you like to overwrite the existing attachment? Never 从不 - - Double click to copy value - 双击复制值 - Enabled 启用 @@ -4402,8 +3974,8 @@ Would you like to overwrite the existing attachment? 禁用 - Double click to copy to clipboard - 双击复制到剪贴板 + Double click to copy value + 双击复制值 @@ -4412,10 +3984,6 @@ Would you like to overwrite the existing attachment? Invalid URL 无效 URL - - Duplicate URL - 重复 URL - EntryView @@ -4431,10 +3999,6 @@ Would you like to overwrite the existing attachment? Reset to defaults 重置为默认值 - - + %1 entry(s)... - + %1 项条目… - ExportDialog @@ -4656,199 +4220,6 @@ You can enable the DuckDuckGo website icon service in the security section of th 正在下载网站图标(%1/%2)… - - ImportWizard - - Import Wizard - 导入向导 - - - - ImportWizardPageReview - - WizardPage - 向导页 - - - Entry count: %1 - 条目数:%1 - - - Group - 群组 - - - Title - 标题 - - - Username - 用户名 - - - Password - 密码 - - - Url - URL - - - Could not load key file. - 无法加载密钥文件。 - - - Could not open remote database. Password or key file may be incorrect. - 无法打开远程数据库。密码或密钥文件可能不正确。 - - - - ImportWizardPageSelect - - Form - 表单 - - - Import File Selection - 导入文件选择 - - - Password: - 密码: - - - Key File: - 密钥文件: - - - Browse… - 浏览... - - - Import Into: - 导入到: - - - New Database - 新建数据库 - - - No unlocked databases available - 没有可用的已解锁数据库 - - - Existing Database: - 存在数据库: - - - Import File: - 导入文件: - - - Comma Separated Values (.csv) - 逗号分隔值(.csv) - - - 1Password Export (.1pux) - 1Password 导出(.1pux) - - - 1Password Vault (.opvault) - 1Password 保险库(.opvault) - - - Bitwarden (.json) - Bitwarden(.json) - - - KeePass 1 Database (.kdb) - KeePass 1 数据库(.kdb) - - - Open OPVault - 打开 OPVault - - - Select import file - 选择导入文件 - - - All files - 所有文件 - - - Key files - 密钥文件 - - - Select key file - 选择密钥文件 - - - Comma Separated Values - 逗号分隔值 - - - 1Password Export - 1Password 导出 - - - Bitwarden JSON Export - Bitwarden JSON 导出 - - - 1Password Vault - 1Password 保险库 - - - KeePass1 Database - KeePass1 数据库 - - - Proton Pass (.json) - Proton Pass (.json) - - - Proton Pass JSON Export - Proton Pass JSON 导出 - - - Temporary Database - 临时数据库 - - - Command: - 命令: - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - 示例:“sftp user@hostname”或“scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}” - - - Input: - 输入: - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last commend `exit` has to be sent - - 示例: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} 作为占位符,表示存储数据库的临时位置 -命令必须可以退出。如果最后一个命令是 `sftp` 则必须发送 `exit` 命令 - - - - Remote Database (.kdbx) - 远程数据库(.kdbx) - - KMessageWidget @@ -5282,6 +4653,17 @@ Line %2, column %3 打开私钥失败 + + KeePass1OpenWidget + + Import KeePass1 Database + 导入 KeePass1 数据库 + + + Unable to open the database. + 无法打开数据库。 + + KeePass1Reader @@ -5638,6 +5020,10 @@ Are you sure you want to continue with this file? &Recent Databases 最近的数据库(&R) + + &Import + 导入(&I) + &Export 导出(&E) @@ -5658,10 +5044,6 @@ Are you sure you want to continue with this file? TOTP TOTP - - Tags - 标签 - &Groups 群组(&G) @@ -5706,18 +5088,34 @@ Are you sure you want to continue with this file? &New Database… 新建数据库(&N)... + + Create a new database + 创建一个新数据库 + &Merge From Database… 从数据库合并(&M)... + + Merge from another KDBX database + 从另一个 KDBX 数据库合并 + &New Entry… 新建条目(&N)... + + Add a new entry + 添加新条目 + &Edit Entry… 编辑条目(&E)... + + View or edit entry + 查看或编辑条目 + &Delete Entry… 删除条目(&D)... @@ -5726,6 +5124,10 @@ Are you sure you want to continue with this file? &New Group… 新建群组(&N)... + + Add a new group + 添加一个新群组 + &Edit Group… 编辑群组(&E)... @@ -5758,10 +5160,18 @@ Are you sure you want to continue with this file? Database &Reports… 数据库报告(&R)… + + Statistics, health check, etc. + 统计、健康检查等 + &Database Settings… 数据库设置(&D)... + + Database settings + 数据库设置 + &Clone Entry… 克隆条目(&C)... @@ -5770,18 +5180,34 @@ Are you sure you want to continue with this file? Move u&p 上移(&P) + + Move entry one step up + 向上移动条目 + Move do&wn 下移(&W) + + Move entry one step down + 向下移动条目 + Copy &Username 复制用户名(&U) + + Copy username to clipboard + 复制用户名到剪贴板 + Copy &Password 复制密码(&P) + + Copy password to clipboard + 复制密码到剪贴板 + &Settings 设置(&S) @@ -5815,13 +5241,21 @@ Are you sure you want to continue with this file? 标题(&T) - Copy &URL - 复制 &URL + Copy title to clipboard + 复制标题到剪贴板 + + + Copy URL to clipboard + 复制 URL 到剪贴板 &Notes 备注(&N) + + Copy notes to clipboard + 复制备注到剪贴板 + &CSV File… &CSV 文件... @@ -5834,14 +5268,26 @@ Are you sure you want to continue with this file? KeePass 1 Database… KeePass 1 数据库... + + Import a KeePass 1 database + 导入 KeePass 1 数据库 + 1Password Vault… 1Password 保险库... + + Import a 1Password Vault + 导入 1Password 保险库 + CSV File… CSV 文件... + + Import a CSV file + 导入 CSV 文件 + Show TOTP 显示 TOTP 密码 @@ -5858,10 +5304,6 @@ Are you sure you want to continue with this file? Copy &TOTP 复制 &TOTP - - Copy Password and TOTP - 复制密码和 TOTP - E&mpty recycle bin 清空回收站(&M) @@ -5886,6 +5328,10 @@ Are you sure you want to continue with this file? &Online Help 在线帮助(&O) + + Go to online documentation + 前往在线文档 + &User Guide 用户手册(&U) @@ -5930,10 +5376,6 @@ Are you sure you want to continue with this file? Classic (Platform-native) 经典(平台原生) - - Show Menubar - 显示菜单栏 - Show Toolbar 显示工具栏 @@ -5958,10 +5400,6 @@ Are you sure you want to continue with this file? Clone Group... 克隆群组... - - &XML File… - &XML 文件… - Clear history 清空历史 @@ -5989,8 +5427,9 @@ Expect some bugs and minor issues, this version is meant for testing purposes. - No Tags - 无标签 + 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。 Restore Entry(s) @@ -6020,10 +5459,6 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Quit KeePassXC 退出 KeePassXC - - %1 Entry(s) - %1 项条目 - Please present or touch your YubiKey to continue… 请感应或触摸您的 YubiKey 以继续… @@ -6036,314 +5471,38 @@ Expect some bugs and minor issues, this version is meant for testing purposes.You must restart the application to apply this setting. Would you like to restart now? 您必须重新启动应用才能应用此设置。要现在重新启动吗? + + Tags + 标签 + + + No Tags + 无标签 + + + %1 Entry(s) + %1 项条目 + + + Copy Password and TOTP + 复制密码和 TOTP + + + &XML File… + &XML 文件… + + + XML File… + XML 文件… + + + Copy &URL + 复制 &URL + Allow Screen Capture 允许屏幕截图 - - 1Password 1PUX... - 1Password 1PUX… - - - Import a 1Password 1PUX file - 导入 1Password 1PUX 文件 - - - Import… - 导入… - - - Passkeys… - 通行密钥… - - - Import Passkey - 导入通行密钥 - - - Remote S&ync… - 远程同步(&Y)… - - - Quit Application - 退出应用 - - - Open About Dialog - 打开关于对话框 - - - Open Database - 打开数据库 - - - Create Database - 新建数据库 - - - Merge From Database - 从数据库合并 - - - Create Entry - 新建条目 - - - Edit Entry - 编辑条目 - - - Delete Entry - 删除条目 - - - Create Group - 新建群组 - - - Edit Group - 编辑群组 - - - Delete Group - 删除群组 - - - Download All Favicons - 下载所有网站图标 - - - Sort Groups A-Z - 按 A-Z 排序群组 - - - Sort Groups Z-A - 按 Z-A 排序群组 - - - Save Database As - 另存为数据库 - - - Show Database Security - 显示数据库安全 - - - Show Database Reports - 显示数据库报告 - - - Show Database Settings - 显示数据库设置 - - - Show Passkeys - 显示通行密钥 - - - Clone Entry - 克隆条目 - - - Move Entry Up - 向上移动条目 - - - Move Entry Down - 向下移动条目 - - - Copy Username - 复制用户名 - - - Copy Password - 复制密码 - - - Show Application Settings - 显示应用程序设置 - - - Show Password Generator - 显示密码生成器 - - - Remove Passkey From Entry - 从条目内移除通行密钥 - - - Perform Auto-Type: {USERNAME} - 执行自动输入:{USERNAME} - - - Perform Auto-Type: {USERNAME}{ENTER} - 执行自动输入:{USERNAME}{ENTER} - - - Perform Auto-Type: {PASSWORD} - 执行自动输入:{PASSWORD} - - - Perform Auto-Type: {PASSWORD}{ENTER} - 执行自动输入:{PASSWORD}{ENTER} - - - Perform Auto-Type: {TOTP} - 执行自动输入:{TOTP} - - - Copy Title - 复制标题 - - - Copy URL - 复制 URL - - - Copy Notes - 复制备注 - - - Export to CSV - 导出到 CSV - - - Export to HTML - 导出到 HTML - - - Import KeePass1 Database - 导入 KeePass1 数据库 - - - Import 1Password Vault - 导入 1Passowrd 保险库 - - - Import CSV File - 导入 CSV 文件 - - - Show TOTP QR Code - 显示 TOTP 二维码 - - - Set up TOTP - 设置 TOTP - - - Empty Recycle Bin - 清空回收站 - - - Open Donation Website - 打开捐赠网站 - - - Open Bug Report - 打开错误报告 - - - Open Online Documentation - 打开在线文档 - - - Open Keyboard Shortcuts Guide - 打开键盘快捷键指南 - - - Save Database Backup - 保存数据库备份 - - - SSH Agent: Add Key - SSH 代理:添加密钥 - - - SSH Agent: Remove Key - SSH 代理:删除密钥 - - - Toggle Compact Mode - 切换紧凑模式 - - - Set Theme: Automatic - 设置主题:自动 - - - Set Theme: Light - 设置主题:亮色 - - - Set Theme: Dark - 设置主题:暗色 - - - Set Theme: Classic - 设置主题:经典 - - - Toggle Show Menubar - 切换显示菜单栏 - - - Toggle Show Toolbar - 切换显示工具栏 - - - Toggle Show Preview Panel - 切换显示预览面板 - - - Toggle Always on Top - 切换总在最前 - - - Toggle Hide Usernames - 切换隐藏用户名 - - - Toggle Hide Passwords - 切换隐藏密码 - - - Export to XML - 导出到 XML - - - Toggle Allow Screen Capture - 切换允许屏幕截图 - - - Show Group Panel - 显示群组面板 - - - Toggle Show Group Panel - 切换显示群组面板 - - - Setup Remote Sync… - 设置远程同步… - - - Password Generator - 密码生成器 - - - E&xpire Entry… - 过期条目(&X)… - - - Clear SSH Agent - 清除 SSH 代理 - - - Clear all identities in ssh-agent - 清除 ssh-agent 内的所有身份 - ManageDatabase @@ -6401,6 +5560,26 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Overwriting %1 [%2] 覆盖 %1 [%2] + + older entry merged from database "%1" + 从数据库“%1”合并的旧条目 + + + Adding backup for older target %1 [%2] + 为旧目标 %1 [%2] 添加备份 + + + Adding backup for older source %1 [%2] + 为旧来源 %1 [%2] 添加备份 + + + Reapplying older target entry on top of newer source %1 [%2] + 在新来源 %1 [%2] 上重新应用旧目标的条目 + + + Reapplying older source entry on top of newer target %1 [%2] + 在新目标 %1 [%2] 上重新应用旧来源的条目 + Synchronizing from newer source %1 [%2] 从新来源 %1 [%2] 同步 @@ -6460,6 +5639,14 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. 您可以在此处调整数据库加密设置。不用担心,您随时可以在数据库设置中更改它们。 + + Advanced Settings + 高级设置 + + + Simple Settings + 简单设置 + NewDatabaseWizardPageDatabaseKey @@ -6494,25 +5681,6 @@ Expect some bugs and minor issues, this version is meant for testing purposes.请填写新数据库的名称和可选的说明: - - NewEntryAttachmentsDialog - - Attachment name cannot be empty - 附件名称不能为空 - - - Attachment with the same name already exists - 同名附件已存在 - - - Save attachment - 保存附件 - - - New entry attachment - 新建条目附件 - - NixUtils @@ -6559,6 +5727,15 @@ Expect some bugs and minor issues, this version is meant for testing purposes.预期长度 %1 字节的明文数据,仅得到 %2 字节 + + OpVaultOpenWidget + + Read Database did not produce an instance +%1 + 读取数据库未生成实例 +%1 + + OpVaultReader @@ -6632,10 +5809,6 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Unknown cipher: %1 未知加密:%1 - - AES-256/GCM is currently not supported - AES-256/GCM 目前不支持 - Passphrase is required to decrypt this key 需要口令解密此密钥 @@ -6701,183 +5874,8 @@ Expect some bugs and minor issues, this version is meant for testing purposes.写入私钥时遇到意外的 EOF - (encrypted) - (已加密) - - - - OpenSSHKeyGenDialog - - SSH Key Generator - SSH Key 生成器 - - - Type - 类型 - - - Bits - 比特 - - - Comment - 注释 - - - - PasskeyExportDialog - - KeePassXC - Passkey Export - KeePassXC: 通行密钥导出 - - - Filenames will be generated with title and .passkey file extension. - 文件名将会以标题和 .passkey 扩展名生成。 - - - Export entries - 导出条目 - - - Export Selected - 导出选定 - - - Cancel - 取消 - - - Export to folder - 导出到文件夹 - - - Export the following passkey entries. - 导出以下通行密钥条目。 - - - - PasskeyExporter - - KeePassXC: Passkey Export - KeePassXC:通行密钥导出 - - - File "%1.passkey" already exists. -Do you want to overwrite it? - - 文件“%1.passkey”已经存在。 -您是否要覆盖它? - - - - Cannot open file - 无法打开文件 - - - Cannot open file "%1" for writing. - 无法打开文件“%1”以写入。 - - - Cannot write to file - 无法写入文件 - - - - PasskeyImportDialog - - KeePassXC - Passkey Import - KeePassXC - 通行密钥导入 - - - Username: %1 - 用户名:%1 - - - Group - 群组 - - - Database - 数据库 - - - Import Passkey - 导入通行密钥 - - - Import - 导入 - - - Cancel - 取消 - - - Entry - 条目 - - - Create new entry - 新建条目 - - - Relying Party: %1 - 依赖方:%1 - - - Import the following passkey: - 导入以下通行密钥: - - - Import the following passkey to this entry: - 导入以下通行密钥到此条目: - - - Default passkeys group (Imported Passkeys) - 默认通行密钥群组(导入的通行密钥) - - - - PasskeyImporter - - Passkey file - 通行密钥文件 - - - All files - 所有文件 - - - Cannot open file - 无法打开文件 - - - Cannot open file "%1" for reading. - 无法打开文件“%1”以读取。 - - - Open passkey file - 打开通行密钥文件 - - - Cannot import passkey - 无法导入通行密钥 - - - Cannot import passkey file "%1". Data is missing. - 无法导入通行密钥文件“%1”。数据缺失。 - - - Cannot import passkey file "%1". -The following data is missing: -%2 - 无法导入通行密钥文件“%1”。 -以下数据缺失: -%2 - - - Cannot import passkey file "%1". Private key is missing or malformed. - 无法导入通行密钥文件“%1”。私钥缺失或损坏。 + AES-256/GCM is currently not supported + AES-256/GCM 目前不支持 @@ -7082,6 +6080,10 @@ The following data is missing: Word Count: 词数: + + Character Count: + 字符数: + Word Case: 字符大小写: @@ -7094,6 +6096,10 @@ The following data is missing: Add custom wordlist 添加自定义词表 + + character + 字符 + Close 关闭 @@ -7130,30 +6136,6 @@ The following data is missing: Entropy: %1 bit 熵:%1 比特 - - Password Quality: %1 - 密码强度:%1 - - - Poor - Password quality - 差劲 - - - Weak - Password quality - 较弱 - - - Good - Password quality - 良好 - - - Excellent - Password quality - 优秀 - Confirm Delete Wordlist 确认删除词表 @@ -7201,20 +6183,32 @@ Do you want to overwrite it? 特殊字符 - passwordLength - 密码长度 + Password Quality: %1 + 密码强度:%1 - Characters: %1 - 字符:%1 + Poor + Password quality + 差劲 - MIXED case - 大小写混合 + Weak + Password quality + 较弱 - Excluded characters: "0", "1", "l", "I", "O", "|", "﹒", "B", "8", "G", "6" - 排除字符:“0”、“1”、“l”、“I”、“O”、“|”、“﹒”、“B”、“8”、“G”、“6” + Good + Password quality + 良好 + + + Excellent + Password quality + 优秀 + + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + 排除字符:“0”、“1”、“l”、“I”、“O”、“|”、“﹒” @@ -7264,7 +6258,7 @@ Do you want to overwrite it? 优秀 - Toggle password visibility using Control + H. Open the password generator using Control + G. + Toggle password visibilty using Control + H. Open the password generator using Control + G. 使用 Control + H 显示或隐藏密码。使用 Control + G 打开密码生成器。 @@ -7283,21 +6277,6 @@ Do you want to overwrite it? 在字符之间按 &Tab 键 - - PreviewEntryAttachmentsDialog - - Preview entry attachment - 预览条目附件 - - - No preview available - 预览不可用 - - - Image format not supported - 图像格式不支持 - - QMessageBox @@ -7336,10 +6315,6 @@ Do you want to overwrite it? Continue 继续 - - Continue with weak password - 使用弱密码继续 - QObject @@ -7733,10 +6708,6 @@ Do you want to overwrite it? Too many arguments provided. 提供的参数过多。 - - Path of the database. - 数据库路径。 - Target decryption time in MS for the database. 数据库的目标解密时间,单位为毫秒。 @@ -7757,6 +6728,10 @@ Do you want to overwrite it? Create a new database. 创建新数据库。 + + Path of the database. + 数据库路径。 + Invalid decryption time %1. 无效解密时间 %1。 @@ -7801,158 +6776,6 @@ Do you want to overwrite it? Successfully created new database. 已成功创建新数据库。 - - Unset the password for the database. - 删除数据库的密码。 - - - Unset the key file for the database. - 删除数据库的密钥文件。 - - - Edit a database. - 编辑一个数据库。 - - - Cannot use %1 and %2 at the same time. - 无法同时使用 %1 和 %2。 - - - Could not change the database key. - 无法更改数据库密钥。 - - - Database was not modified. - 数据库未被修改。 - - - Writing the database failed: %1 - 写入数据库失败:%1 - - - Successfully edited the database. - 已成功编辑数据库。 - - - Cannot remove password: The database does not have a password. - 无法删除密码:数据库不含密码。 - - - Cannot remove file key: The database does not have a file key. - 无法删除文件密钥:数据库不含文件密钥。 - - - Loading the new key file failed: %1 - 加载新密钥文件失败:%1 - - - Found unexpected Key type %1 - 发现意料之外的密钥类型 %1 - - - Cannot remove all the keys from a database. - 无法从数据库中删除所有密钥 。 - - - Show a database's information. - 显示数据库的信息。 - - - UUID: - UUID: - - - Name: - 名称: - - - Description: - 描述: - - - Cipher: - 加密: - - - KDF: - KDF: - - - Recycle bin is enabled. - 回收站已启用。 - - - Recycle bin is not enabled. - 回收站未启用。 - - - Location - 位置 - - - Database created - 数据库创建时间 - - - Last saved - 保存时间 - - - Unsaved changes - 尚未保存修改 - - - yes - - - - no - - - - Number of groups - 群组数 - - - Number of entries - 条目数 - - - Number of expired entries - 过期条目数 - - - Unique passwords - 唯一密码 - - - Non-unique passwords - 重复密码 - - - Maximum password reuse - 密码最高重复次数 - - - Number of short passwords - 短密码总数 - - - Number of weak passwords - 弱密码总数 - - - Entries excluded from reports - 报告中已排除条目 - - - Average password length - 平均密码长度 - - - %1 characters - %1 字符 - Word count for the diceware passphrase. Diceware 口令的词数。 @@ -7976,6 +6799,10 @@ Do you want to overwrite it? Invalid word count %1 无效的词数 %1 + + The word list is too small (< 1000 items) + 词表太小(少于 1000 项) + Title for the entry. 条目的标题。 @@ -8000,6 +6827,10 @@ Do you want to overwrite it? Enter new password for entry: 输入条目新密码: + + Writing the database failed: %1 + 写入数据库失败:%1 + Successfully edited entry %1. 已成功编辑条目 %1。 @@ -8120,6 +6951,10 @@ Do you want to overwrite it? Exit interactive mode. 退出交互模式。 + + Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. + 导出时使用的格式。可用的选项是“xml”或“csv”。默认值为“xml”。 + Exports the content of a database to standard output in the specified format. 将数据库内容按照指定的格式输出至标准输出。 @@ -8220,6 +7055,106 @@ Do you want to overwrite it? Successfully imported database. 已成功导入数据库。 + + Show a database's information. + 显示数据库的信息。 + + + UUID: + UUID: + + + Name: + 名称: + + + Description: + 描述: + + + Cipher: + 加密: + + + KDF: + KDF: + + + Recycle bin is enabled. + 回收站已启用。 + + + Recycle bin is not enabled. + 回收站未启用。 + + + Location + 位置 + + + Database created + 数据库创建时间 + + + Last saved + 保存时间 + + + Unsaved changes + 尚未保存修改 + + + yes + + + + no + + + + Number of groups + 群组数 + + + Number of entries + 条目数 + + + Number of expired entries + 过期条目数 + + + Unique passwords + 唯一密码 + + + Non-unique passwords + 重复密码 + + + Maximum password reuse + 密码最高重复次数 + + + Number of short passwords + 短密码总数 + + + Number of weak passwords + 弱密码总数 + + + Entries excluded from reports + 报告中已排除条目 + + + Average password length + 平均密码长度 + + + %1 characters + %1 字符 + Unknown command %1 未知命令 %1 @@ -8392,10 +7327,6 @@ Available commands: Show the protected attributes in clear text. 明文显示被保护的属性。 - - Show all the attributes of the entry. - 显示条目的所有属性。 - Show the attachments of the entry. 显示条目的附件。 @@ -8465,10 +7396,6 @@ Please consider generating a new key file. Invalid YubiKey serial %1 无效的 YubiKey 序号 %1 - - Please present or touch your YubiKey to continue. - 请感应或触摸您的 YubiKey 以继续。 - Enter password to encrypt database (optional): 输入用于加密数据库的密码(可选): @@ -8706,6 +7633,18 @@ CPU 架构:%2 file empty 文件为空 + + malformed string + 格式异常字符串 + + + missing closing quote + 缺少闭合引号 + + + %1: (row, col) %2,%3 + %1:(行,列)%2,%3 + AES 256-bit AES 256 位 @@ -8884,6 +7823,14 @@ CPU 架构:%2 read password of the database from stdin 从标准输入读取数据库的密码 + + allow app screen recordering and screenshots + 允许应用被录像或截图 + + + Locked databases. + 已锁定数据库。 + Database failed to lock. 锁定数据库失败。 @@ -8892,10 +7839,6 @@ CPU 架构:%2 Another instance of KeePassXC is already running. 另一个 KeePassXC 实例已在运行。 - - KeePassXC is not running. No open database to lock - KeePassXC 未在运行。没有可锁定的已打开数据库 - Fatal error while testing the cryptographic functions. 在测试加密函数时发生致命错误。 @@ -8939,300 +7882,70 @@ CPU 架构:%2 无效的 KDF - Access to all entries is denied - 对所有条目的访问已禁止 + Please present or touch your YubiKey to continue. + 请感应或触摸您的 YubiKey 以继续。 - allow screenshots and app recording (Windows/macOS) - 允许屏幕截图与应用录制(Windows/macOS) + Show all the attributes of the entry. + 显示条目的所有属性。 + + + Edit a database. + 编辑一个数据库。 + + + Could not change the database key. + 无法更改数据库密钥。 + + + Database was not modified. + 数据库未被修改。 + + + Successfully edited the database. + 已成功编辑数据库。 + + + Loading the new key file failed: %1 + 加载新密钥文件失败:%1 + + + Unset the password for the database. + 删除数据库的密码。 + + + Unset the key file for the database. + 删除数据库的密钥文件。 + + + Cannot use %1 and %2 at the same time. + 无法同时使用 %1 和 %2。 + + + Cannot remove all the keys from a database. + 无法从数据库中删除所有密钥 。 + + + Cannot remove password: The database does not have a password. + 无法删除密码:数据库不含密码。 + + + Cannot remove file key: The database does not have a file key. + 无法删除文件密钥:数据库不含文件密钥。 + + + Found unexpected Key type %1 + 发现意料之外的密钥类型 %1 Set the key file for the database. -This option is deprecated, use --set-key-file instead. +This options is deprecated, use --set-key-file instead. 设置数据库的密钥文件。 此选项已弃用,请用 --set-key-file 代替。 - Databases have been locked. - 数据库已被锁定。 - - - Attestation not supported - 认证不支持 - - - Credential is excluded - 凭据被排除 - - - Passkeys request canceled - 通行密钥请求被取消 - - - Invalid user verification - 无效的用户验证 - - - Empty public key - 空的公钥 - - - Invalid URL provided - 提供的 URL 无效 - - - Passkeys - 通行密钥 - - - AES initialization failed - AES 初始化失败 - - - AES encrypt failed - AES 加密失败 - - - Failed to store in Linux Keyring - 存入 Linux Keyring 失败 - - - Polkit returned an error: %1 - Polkit 返回了一个错误:%1 - - - Could not locate key in keyring - 无法在 Keyring 中定位密钥 - - - Could not read key in keyring - 无法在 Keyring 中读取密钥 - - - AES decrypt failed - AES 解密失败 - - - No Polkit authentication agent was available - 无可用的 Polkit 身份验证代理 - - - Polkit authorization failed - Polkit 授权失败 - - - No Quick Unlock provider is available - 无可用的快速解锁提供者 - - - Failed to init KeePassXC crypto. - 初始化 KeePassXC 加密失败。 - - - Failed to encrypt key data. - 加密密钥数据失败。 - - - Failed to get Windows Hello credential. - 获取 Windows Hello 凭据失败。 - - - Failed to decrypt key data. - 解密密钥数据失败。 - - - Origin is empty or not allowed - Origin 为空或不被允许 - - - Effective domain is not a valid domain - Effective Domain 不是有效的域名 - - - Origin and RP ID do not match - Origin 与 RP ID 不匹配 - - - No supported algorithms were provided - 未提供受支持的算法 - - - Wait for timer to expire - 等待计时器过期 - - - Challenge is shorter than required minimum length - 挑战短于所需最小长度 - - - user.id does not match the required length - user.id 不匹配所需长度 - - - Favorite - Tag for favorite entries - 收藏 - - - File does not exist. - 文件不存在。 - - - Cannot open file: %1 - 无法打开文件:%1 - - - Cannot parse file: %1 at position %2 - 无法解析文件:%1 在位置 %2 - - - Failed to decrypt json file: %1 - 解密 JSON 文件失败:%1 - - - Invalid encKeyValidation field - 无效的 encKeyValidation 字段 - - - Invalid cipher list within encKeyValidation field - encKeyValidation 字段内的加密方式列表无效 - - - Wrong password - 错误的密码 - - - Invalid encrypted data field - 无效的加密数据字段 - - - Invalid cipher list within encrypted data field - 加密数据字段内的加密方式列表无效 - - - Cannot initialize cipher - 无法初始化加密 - - - Cannot decrypt data - 无法解密数据 - - - Bitwarden Import - Bitwarden 导入 - - - Archived - Tag for archived entries - 归档 - - - Invalid 1PUX file format: Not a valid ZIP file. - 无效的 1PUX 文件格式:不是有效的 ZIP 文件。 - - - Invalid 1PUX file format: Missing export.data - 无效的 1PUX 文件格式:缺少 export.data - - - 1Password Import - 1Password 导入 - - - Enter Shortcut - 输入快捷键 - - - Action - 动作 - - - Shortcuts - 快捷键 - - - Unknown passkeys error - 未知通行密钥错误 - - - Invalid KDF iterations, cannot decrypt json file - 无效的 KDF 迭代数,无法解密 JSON 文件 - - - Unsupported format, ensure your Bitwarden export is password-protected - 不支持的格式,请确认您的 Bitwarden 导出文件受密码保护 - - - Only PBKDF and Argon2 are supported, cannot decrypt json file - 仅有 PBKDF 和 Argon2 受支持,无法解密 JSON 文件 - - - Reset Shortcuts - 重置快捷键 - - - Double click an action to change its shortcut - 双击一个动作以修改其快捷键 - - - Filter... - 过滤… - - - Shortcut Conflict - 快捷键冲突 - - - Shortcut %1 conflicts with '%2'. Overwrite shortcut? - 快捷键 %1 与 '%2' 冲突。是否覆盖快捷键? - - - Cannot generate valid passphrases because the wordlist is too short - 因为词表太短,无法生成有效的口令 - - - Encrypted files are not supported. - 加密文件不支持。 - - - Proton Pass Import - Proton Pass 导入 - - - Delete plugin data? - 是否删除插件数据? - - - Delete plugin data from Entry(s)? - 是否从条目中删除插件数据? - - - Passkey - 通行密钥 - - - Format to use when exporting. Available choices are 'xml', 'csv' or 'html'. Defaults to 'xml'. - 导出时使用的格式。可用的选项是“xml”、“csv”或“html”。默认值为“xml”。 - - - start minimized to the system tray - 启动时最小化到系统托盘 - - - malformed string, possible unescaped delimiter - 不合法的字符串,可能存在未转义的分隔符 - - - missing closing delimiter - 缺少闭合分隔符 - - - %1, row: %2, column: %3 - %1,行:%2,列:%3 - - - Tags - 标签 + KeePassXC is not running. No open database to lock + KeePassXC 未在运行。没有可锁定的已打开数据库 @@ -9269,39 +7982,20 @@ This option is deprecated, use --set-key-file instead. 内部 zlib 错误: - - RemoteHandler - - Command `%1` did not finish in time. Process was killed. - 命令 `%1` 未能及时完成。进程已被强制结束。 - - - Failed to upload merged database. Command `%1` did not finish in time. Process was killed. - 上传已合并的数据库失败。命令 `%1` 未能及时完成。进程已被强制结束。 - - - Invalid download parameters provided. - 提供的下载参数无效。 - - - Command `%1` failed to download database. - 命令 `%1` 下载数据库失败。 - - - Invalid database pointer or upload parameters provided. - 提供的数据库指针或上传参数无效。 - - - Command `%1` exited with status code: %2 - 命令 `%1` 以此状态码退出:%2 - - - Failed to upload merged database. Command `%1` exited with status code: %2 - 上传已合并的数据库失败。命令 `%1` 以此状态码退出:%2 - - ReportsWidgetBrowserStatistics + + Exclude expired entries from the report + 从报告中排除已过期条目 + + + Show only entries which have URL set + 仅显示设置了 URL 的条目 + + + Show only entries which have browser settings in custom data + 仅显示自定义数据中有浏览器设置的条目 + Double-click entries to edit. 双击条目以编辑。 @@ -9366,53 +8060,44 @@ This option is deprecated, use --set-key-file instead. Exclude from reports 从报告中排除 - - Expire Entry(s)… - 过期条目… - - - Only show entries that have a URL - 仅显示含有 URL 的条目 - - - Only show entries that have been explicitly allowed or denied - 仅显示明确允许或禁止的条目 - - - Show expired entries - 显示过期的条目 - - - (Expired) - (已过期) - - - Delete plugin data from Entry(s)… - 从条目中删除插件数据… - ReportsWidgetHealthcheck - Show expired entries - 显示过期的条目 + Exclude expired entries from the report + 从报告中排除已过期条目 - (Expired) - (已过期) + Also show entries that have been excluded from reports + 也显示已从报告中排除的条目 Hover over reason to show additional details. Double-click entries to edit. 将鼠标指针悬停在原因上以显示其他详细信息。双击条目以编辑。 + + Bad + Password quality + 极差 + Bad — password must be changed 极差 — 必须更改密码 + + Poor + Password quality + 差劲 + Poor — password should be changed 差劲 — 应该更改密码 + + Weak + Password quality + 较弱 + Weak — consider changing the password 较弱 — 可考虑更改密码 @@ -9461,14 +8146,6 @@ This option is deprecated, use --set-key-file instead. Exclude from reports 从报告中排除 - - Expire Entry(s)… - 过期条目… - - - Show entries that have been excluded from reports - 显示已从报告中排除的条目 - ReportsWidgetHibp @@ -9564,77 +8241,6 @@ This option is deprecated, use --set-key-file instead. Exclude from reports 从报告中排除 - - Expire Entry(s)… - 过期条目… - - - - ReportsWidgetPasskeys - - Export - 导出 - - - Import - 导入 - - - List of entry URLs - 条目 URL 列表 - - - Title - 标题 - - - Path - 路径 - - - Username - 用户名 - - - URLs - URL - - - Edit Entry… - 编辑条目… - - - Delete Entry(s)… - 删除条目… - - - Relying Party - 依赖方 - - - Show expired entries - 显示过期的条目 - - - (Expired) - (已过期) - - - Export Confirmation - 导出确认 - - - The passkey file will be vulnerable to theft and unauthorized use, if left unsecured. Are you sure you want to continue? - 如果不加保护,通行密钥文件就很容易被窃取或盗用。您确定要继续吗? - - - Please wait, list of entries with passkeys is being updated… - 请稍等,正在更新包含通行密钥的条目列表… - - - No entries with passkeys. - 无包含通行密钥的条目。 - ReportsWidgetStatistics @@ -9809,14 +8415,6 @@ This option is deprecated, use --set-key-file instead. No agent running, cannot list identities. 代理未在运行,无法列出身份。 - - Failed to remove all SSH identities from agent. - 从代理中删除所有 SSH 身份失败。 - - - All SSH identities removed from agent. - 已从代理中删除所有 SSH 身份。 - SearchHelpWidget @@ -9883,10 +8481,6 @@ This option is deprecated, use --set-key-file instead. Search Help 搜索帮助 - - Save Search - 保存搜索 - Search (%1)… Search placeholder text, %1 is the keyboard shortcut @@ -9900,6 +8494,10 @@ This option is deprecated, use --set-key-file instead. Limit search to selected group 仅搜索选中的群组 + + Save Search + 保存搜索 + SettingsClientModel @@ -9961,10 +8559,34 @@ This option is deprecated, use --set-key-file instead. Confirm when passwords are retrieved by clients 客户端获得密码需要确认 + + <html><head/><body><p><span style=" + font-family:'-apple-system','BlinkMacSystemFont','Segoe UI','Helvetica','Arial','sans-serif','Apple Color + Emoji','Segoe UI Emoji'; font-size:14px; color:#24292e; background-color:#ffffff;">This setting does + not override disabling recycle bin prompts</span></p></body></html> + + <html><head/><body><p><span style=" + font-family:'-apple-system','BlinkMacSystemFont','Segoe UI','Helvetica','Arial','sans-serif','Apple Color + Emoji','Segoe UI Emoji'; font-size:14px; color:#24292e; background-color:#ffffff;">此设置不会覆盖 + 禁用回收站提示</span></p></body></html> + + Confirm when clients request entry deletion 客户端请求删除条目需要确认 + + <html><head/><body><p>This improves compatibility with certain applications + which search for password without unlocking the database first.</p><p>But enabling this may also + crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a + different value set in applications.)</p></body></html> + + <html><head/><body><p>针对在搜索密码前不会解锁数据库的特定应用, + 此选项会增强兼容性。</p><p>但启用后,如果数据库不能在一定时间内解锁 + (通常为 25 秒,但应用可能会设置其他的值。), + 应用就可能会崩溃。</p></body></html> + + Prompt to unlock database before searching 搜索前提示解锁数据库 @@ -9989,14 +8611,6 @@ This option is deprecated, use --set-key-file instead. Save current changes to activate the plugin and enable editing of this section. 保存当前更改以激活插件,并启用此部分的编辑。 - - <html><head/><body><p>This setting does not override disabling recycle bin prompts </p></body></html> - <html><head/><body><p>此设置不会覆盖禁用回收站提示</p></body></html> - - - <html><head/><body><p>This improves compatibility with certain applications which search for password without unlocking the database first.</p><p>But enabling this may also crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a different value set in applications.) </p></body></html> - <html><head/><body><p>针对在搜索密码前不会解锁数据库的特定应用,此选项会增强兼容性。</p><p>但启用后,如果数据库不能在一定时间内解锁(通常为 25 秒,但应用可能会设置其他的值。),应用就可能会崩溃。</p></body></html> - SettingsWidgetKeeShare @@ -10104,14 +8718,6 @@ This option is deprecated, use --set-key-file instead. TagModel - - Clear Search - 清除搜索 - - - All Entries - 所有条目 - Expired 已过期 @@ -10120,6 +8726,14 @@ This option is deprecated, use --set-key-file instead. Weak Passwords 弱密码 + + All Entries + 所有条目 + + + Clear Search + 清除搜索 + TagView @@ -10288,7 +8902,7 @@ Example: JBSWY3DPEHPK3PXP You have the latest version of KeePassXC - 您的 KeePassXC 已经是最新版本 + 您的 KeePassXC 已经是最版本 @@ -10297,6 +8911,26 @@ Example: JBSWY3DPEHPK3PXP Start storing your passwords securely in a KeePassXC database 开始将您的密码安全地存储在 KeePassXC 数据库中 + + Create new database + 新建数据库 + + + Open existing database + 打开数据库 + + + Import from KeePass 1 + 从 KeePass 1 导入 + + + Import from 1Password + 从 1Password 导入 + + + Import from CSV + 从 CSV 文件导入 + Recent databases 最近的数据库 @@ -10309,18 +8943,6 @@ Example: JBSWY3DPEHPK3PXP Welcome to KeePassXC %1 欢迎使用 KeePassXC %1 - - Create Database - 新建数据库 - - - Open Database - 打开数据库 - - - Import File - 导入文件 - WinUtils @@ -10337,8 +8959,31 @@ Example: JBSWY3DPEHPK3PXP 无法注册全局快捷键 + + WindowsHello + + Failed to init KeePassXC crypto. + 初始化 KeePassXC 加密失败。 + + + Failed to encrypt key data. + 加密密钥数据失败。 + + + Failed to get Windows Hello credential. + 获取 Windows Hello 凭据失败。 + + + Failed to decrypt key data. + 解密密钥数据失败。 + + YubiKey + + %1 No interface, slot %2 + %1 号接口,插槽 %2 + General: 常规: @@ -10350,6 +8995,14 @@ Example: JBSWY3DPEHPK3PXP YubiKeyEditWidget + + Refresh hardware tokens + 刷新硬件令牌 + + + Refresh + 刷新 + Hardware key slot selection 选择硬件密钥的插槽 @@ -10382,6 +9035,10 @@ Example: JBSWY3DPEHPK3PXP Challenge-Response set, click to change or remove 质询响应已设置,点击以更改或删除 + + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + <p>如果您拥有 <a href="https://www.yubico.com/">YubiKey</a> 或 <a href="https://onlykey.io">OnlyKey</a>,则可以使用它来提高安全性。</p><p>硬件密钥要求将其中一个插槽编程为 <a href="https://www.yubico.com/products/services-software/challenge-response/">HMAC-SHA1 质询响应</a>。</p> + Detecting hardware keys… 正在检测硬件密钥... @@ -10390,25 +9047,28 @@ Example: JBSWY3DPEHPK3PXP No hardware keys detected 未检测到硬件密钥 + + + YubiKeyInterface - Refresh hardware keys - 刷新硬件密钥 - - - <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed with <a href="https://keepassxc.org/docs/#faq-yubikey-howto">Challenge-Response</a>.</p> - <p>如果您拥有 <a href="https://www.yubico.com/">YubiKey</a> 或 <a href="https://onlykey.io">OnlyKey</a>,则可以使用它来提高安全性。</p><p>硬件密钥要求将其中一个插槽以<a href="https://keepassxc.org/docs/#faq-yubikey-howto">质询响应</a>编程。</p> - - - Hardware keys found, but no slots are configured - 硬件密钥已找到,但未配置任何插槽 + %1 Invalid slot specified - %2 + %1 指定的插槽无效 - %2 YubiKeyInterfacePCSC + + (PCSC) %1 [%2] Challenge-Response - Slot %3 + (PCSC) %1 [%2] 质询响应 - 插槽 %3 + The YubiKey PCSC interface has not been initialized. YubiKey PCSC 接口尚未初始化。 + + Hardware key is currently in use. + 当前正在使用硬件密钥。 + Could not find or access hardware key with serial number %1. Please present it to continue. 无法找到或访问序列号为 %1 的硬件密钥。请感应后继续。 @@ -10425,21 +9085,6 @@ Example: JBSWY3DPEHPK3PXP Failed to complete a challenge-response, the PCSC error code was: %1 完成质询响应失败,PCSC 错误码为:%1 - - (NFC) %1 [%2] - Slot %3, %4 - YubiKey display fields - (NFC)%1 [%2] - 插槽 %3,%4 - - - Press - USB Challenge-Response Key interaction request - 按键 - - - Passive - USB Challenge-Response Key no interaction required - 被动 - YubiKeyInterfaceUSB @@ -10447,6 +9092,14 @@ Example: JBSWY3DPEHPK3PXP Unknown 未知 + + (USB) %1 [%2] Configured Slot - %3 + (USB) %1 [%2] 配置插槽 - %3 + + + (USB) %1 [%2] Challenge-Response - Slot %3 - %4 + (USB) %1 [%2] 质询响应 - 插槽 %3 - %4 + Press USB Challenge-Response Key interaction request @@ -10461,6 +9114,10 @@ Example: JBSWY3DPEHPK3PXP The YubiKey USB interface has not been initialized. YubiKey USB 接口尚未初始化。 + + Hardware key is currently in use. + 当前正在使用硬件密钥。 + Could not find hardware key with serial number %1. Please plug it in to continue. 找不到序列号为 %1 的硬件密钥。请插入后继续。 @@ -10477,15 +9134,5 @@ Example: JBSWY3DPEHPK3PXP Failed to complete a challenge-response, the specific error was: %1 质询响应失败,错误为:%1 - - %1 [%2] - Slot %3 - YubiKey NEO display fields - %1 [%2] - 插槽 %3 - - - %1 [%2] - Slot %3, %4 - YubiKey display fields - %1 [%2] - 插槽 %3,%4 - \ No newline at end of file diff --git a/share/translations/keepassxc_zh_TW.ts b/share/translations/keepassxc_zh_TW.ts index 228bfec93..c2fcf40ae 100644 --- a/share/translations/keepassxc_zh_TW.ts +++ b/share/translations/keepassxc_zh_TW.ts @@ -80,10 +80,6 @@ Details 詳情 - - Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. - 在請求客戶端與 KeePassXC 同時執行期間,您的選擇會被記住。 - Remember 記住 @@ -92,6 +88,10 @@ Allow Selected 允許所選 + + Your decision will be remembered for the duration while both the requesting client AND KeePassXC are running. + 在請求客戶端與 KeePassXC 同時執行期間,您的選擇會被記住。 + Deny All && Future 禁止之後所有 @@ -122,10 +122,6 @@ Use OpenSSH 使用 OpenSSH - - Use both agents - 同時使用兩種代理 - SSH_AUTH_SOCK override SSH_AUTH_SOCK 覆蓋值 @@ -154,6 +150,10 @@ SSH Agent connection is working! SSH 代理連線正在運作! + + Use both agents + 同時使用兩種代理 + ApplicationSettingsWidget @@ -169,10 +169,6 @@ Security 安全 - - This setting cannot be enabled when minimize on unlock is enabled. - 如果啟用解鎖時最小化,則無法啟用此設置。 - Access error for config file %1 設定檔 %1 存取錯誤 @@ -217,49 +213,21 @@ You must restart the application to set the new language. Would you like to restart now? 必須重啟應用程式以使用新語言。您是否要現在重新啟動? + + Reset Settings? + 重置設定? + + + Are you sure you want to reset all general and security settings to default? + 您確定要重置所有通用和安全設定回預設值? + Select backup storage directory 選擇備份存放目錄 - Confirm Reset - 確認重置 - - - Are you sure you want to reset all settings to default? - 您確定要重置所有設定回預設值? - - - Import KeePassXC Settings - 匯入 KeePassXC 設定 - - - Failed to import settings from %1, not a valid settings file. - 從 %1 匯入設定失敗,並非有效的設定檔案。 - - - Export KeePassXC Settings - 匯出 KeePassXC 設定 - - - Small - - - - Normal - 正常 - - - Medium - - - - Large - - - - Custom - 自定義 + This setting cannot be enabled when minimize on unlock is enabled. + 如果啟用解鎖時最小化,則無法啟用此設置。 @@ -292,10 +260,6 @@ Remember previously used databases 記住之前使用過的資料庫 - - recent files - 個最近檔案 - Load previously open databases on startup 啟動時載入之前開啟的資料庫 @@ -312,6 +276,25 @@ Include beta releases when checking for updates 檢查更新時包括 beta 版本 + + On database unlock, show entries that + 解鎖資料庫時,顯示符合條件的項目 + + + have expired + On database unlock, show entries that... + 已過期 + + + days + On database unlock, show entries that will expire within %1 days + + + + will expire within + On database unlock, show entries that... + 將過期於 + File Management 檔案管理 @@ -336,10 +319,22 @@ Backup database file before saving 儲存資料庫檔案前先備份 + + Backup destination + 備份目的地 + + + Specifies the database backup file location. Occurrences of "{DB_FILENAME}" are replaced with the filename of the saved database without extension. {TIME:<format>} is replaced with the backup time, see https://doc.qt.io/qt-5/qdatetime.html#toString. <format> defaults to format string "dd_MM_yyyy_hh-mm-ss". + 指定資料庫備份檔案位置。其中 "{DB_FILENAME}" 會被替換為保存資料庫的檔案名稱,不包含副檔名。{TIME:<format>} 會被替換為備份時間,詳見 https://doc.qt.io/qt-5/qdatetime.html#toString 。<format> 預設為格式字符串 "dd_MM_yyyy_hh-mm-ss"。 + {DB_FILENAME}.old.kdbx {DB_FILENAME}.old.kdbx + + Choose... + 選擇... + Use alternative saving method (may solve problems with Dropbox, Google Drive, GVFS, etc.) 使用替代儲存方案(或許能解決諸如 Dropbox、Google Drive、GVFS 的相關問題) @@ -417,10 +412,6 @@ Toolbar button style: 工具列按鈕樣式: - - Show passwords in color - 密碼以彩色顯示 - Use monospaced font for notes 備註使用等寛字體 @@ -467,7 +458,7 @@ Hide expired entries from Auto-Type - 從自動輸入隱藏過期的項目 + 從自動輸入隱藏已過期的項目 Re-lock previously locked database after performing Auto-Type @@ -507,69 +498,12 @@ 記住上次輸入的項目: - On database unlock, show entries that will expire within - 解鎖資料庫時,顯示即將過期的項目 + recent files + 最近的檔案 - On database unlock, show entries that will expire within - 解鎖資料庫時,顯示即將過期的項目 - - - days - number of days warning for password expiration - - - - Destination format: - 目標格式: - - - <html><head/><body><p><span style=" font-weight:600;">{DB_FILENAME}</span> is replaced with the filename of the saved database without extension</p><p><span style=" font-weight:600;">{TIME:&lt;format&gt;}</span> is replaced with the specified time format (default: dd_MM_yyyy_hh-mm-ss)</p><p>See the User Guide for more details</p></body></html> - <html><head/><body><p><span style=" font-weight:600;">{DB_FILENAME}</span> 將被替換爲儲存資料庫的檔案名稱,不含副檔名</p><p><span style=" font-weight:600;">{TIME:&lt;format&gt;}</span> 將被替換爲指定的時間格式 (預設:dd_MM_yyyy_hh-mm-ss)</p><p>查看使用者指南了解詳情</p></body></html> - - - Choose folder... - 選擇資料夾... - - - Show confirmation before moving entries to recycle bin - 移動項目至回收桶前提示確認 - - - Copy data on double clicking field in entry view - 在項目視區中,雙擊欄位複製資料 - - - Show toolbar - 顯示工具列 - - - Show the menu bar by pressing the Alt key - 按下 Alt 鍵顯示選單列 - - - Show menubar - 顯示選單列 - - - Import settings… - 匯入設定… - - - Export settings… - 匯出設定… - - - Open browser on double clicking URL field in entry view - 在項目視區中,雙擊 URL 打開瀏覽器 - - - Font size: - 字型: - - - Font size selection - 字型大小選擇 + Show passwords in color + 密碼以彩色顯示 @@ -624,6 +558,10 @@ Lock databases after minimizing the window 最小化視窗後鎖上資料庫 + + Require password repeat when it is visible + 密碼可見時仍要求重複輸入密碼 + Hide passwords when editing them 編輯密碼時將其隱藏 @@ -636,6 +574,18 @@ Hide passwords in the entry preview panel 隱藏項目預覽面板內的密碼 + + Hide entry notes by default + 預設隱藏項目備註 + + + Move entries to recycle bin without confirmation + 無需確認就移動項目到回收桶 + + + Enable double click to copy the username/password entry columns + 啟用滑鼠雙擊複製「使用者名稱/密碼」項目欄位 + Privacy 隱私 @@ -648,18 +598,6 @@ Hide TOTP in the entry preview panel 隱藏項目預覽面板上的 TOTP - - Lock databases when switching user - 切換使用者時鎖定資料庫 - - - Lock Options - 鎖定選項 - - - Hide notes in the entry preview panel - 隱藏項目預覽面板內的備註 - AutoType @@ -704,13 +642,27 @@ 偵測到過長的延遲,最大值為 %1: %2 - Entry does not have attribute for PICKCHARS: %1 - 項目不包含用於 PICKCHARS 的屬性:%1 + Invalid conversion type: %1 + 無效的轉換類型: %1 + + + Invalid conversion syntax: %1 + 無效的轉換語法: %1 + + + Invalid regular expression syntax %1 +%2 + 無效的正規表示式語法 %1 +%2 Invalid placeholder: %1 無效的佔位符: %1 + + Entry does not have attribute for PICKCHARS: %1 + 項目不包含用於 PICKCHARS 的屬性:%1 + AutoTypeAssociationsModel @@ -752,6 +704,10 @@ AutoTypePlatformX11 + + Trying to send invalid keysym. + 嘗試傳送無效的 keysym。 + Sequence aborted: Caps Lock is on 序列中止:Caps Lock 為開 @@ -764,10 +720,6 @@ Unable to get valid keycode for key: 無法得到有效的 keycode,按鍵為: - - Trying to send invalid keyboard symbol. - 嘗試傳送無效的鍵盤符號。 - AutoTypeSelectDialog @@ -872,13 +824,13 @@ Ctrl+4 - 使用虛擬鍵盤(僅限 Windows)</p> Disable for this site 對此網站停用 - - Undo - 撤銷 - BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + KeePassXC 瀏覽器擴充保存項目 + Ok 確定 @@ -893,74 +845,13 @@ Please select the correct database for saving credentials. 您有數個開啟的資料庫。 請選擇要保存憑證的資料庫。 - - KeePassXC - Select Database - KeePassXC - 選擇資料庫 - - - - BrowserPasskeysConfirmationDialog - - Cancel - 取消 - - - Update - 更新 - - - Authenticate - 認證 - - - Register new - 新註冊 - - - Register - 註冊 - - - Timeout in <b>%n</b> seconds... - 在 <b>%n</b> 秒後過期… - - - Relying Party: %1 - 依賴方:%1 - - - Username: %1 - 使用者名稱:%1 - - - KeePassXC - Passkey credentials - KeePassXC - 通行密鑰憑證 - - - Add to existing entry - 加入至現有項目 - - - Existing passkey found. -Do you want to register a new passkey for: - 發現既有的通行密鑰。 -是否要註冊新的通行密鑰: - - - Select the existing passkey and press Update to replace it. - 選擇既有的通行密鑰並按下「更新」來替換它。 - - - Authenticate passkey credentials for: - 驗證通行密鑰憑證: - - - Do you want to register a passkey for: - 是否要註冊通行密鑰: - BrowserService + + KeePassXC: Create a new group + KeePassXC: 建立新群組 + A request for creating a new group "%1" has been received. Do you want to create this group? @@ -969,6 +860,10 @@ Do you want to create this group? 是否要建立此群組? + + KeePassXC: New key association request + KeePassXC: 新的金鑰關聯要求 + You have received an association request for the following database: %1 @@ -985,16 +880,28 @@ chrome-laptop。 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? 已存在名稱為「%1」的共用加密金鑰。 是否要覆蓋它? + + KeePassXC: Update Entry + KeePassXC: 更新項目 + Do you want to update the information in %1 - %2? 是否要更新 %1 - %2 內的資訊? + + KeePassXC: Delete entry + KeePassXC: 刪除項目 + A request for deleting entry "%1" has been received. Do you want to delete the entry? @@ -1004,58 +911,50 @@ Do you want to delete the entry? - %1 (Passkey) - %1(通行密鑰) + Converting attributes to custom data… + 正在轉換屬性至自定義資料… - KeePassXC - Create a new group - KeePassXC - 建立新群組 + Abort + 中止 - Disable - 停用 + KeePassXC: Converted KeePassHTTP attributes + KeePassXC: 轉換 KeePassHTTP 屬性 - KeePassXC - Overwrite existing key? - KeePassXC - 覆蓋現有金鑰? + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + 已成功轉換 %1 個項目的屬性。 +已移動 %2 組金鑰至自定義資料。 + + + Successfully moved %n keys to custom data. + 已成功移動 %n 組金鑰至自定義資料。 - KeePassXC - Update Entry - KeePassXC - 更新項目 + KeePassXC: No entry with KeePassHTTP attributes found! + KeePassXC: 找不到擁有 KeePassHTTP 屬性的項目! - KeePassXC - Delete entry - KeePassXC - 刪除項目 + The active database does not contain an entry with KeePassHTTP attributes. + 目前作用的資料庫中沒有任何項目擁有 KeePassHTTP 屬性。 - KeePassXC - New key association request - KeePassXC - 新的金鑰關聯請求 + Don't show this warning again + 不再顯示此警告 - Passkey - 通行密鑰 + KeePassXC: Legacy browser integration settings detected + KeePassXC: 偵測到過時的瀏覽器整合設定 - KeePassXC - Passkey credentials - KeePassXC - 通行密鑰憑證 - - - Register a new passkey to this entry: - 註冊新的通行密鑰至此項目: - - - KeePassXC - Update passkey - KeePassXC - 更新通行密鑰 - - - Entry already has a passkey. -Do you want to overwrite the passkey in %1 - %2? - 項目已經擁有一組通行密鑰。 -是否要覆寫位於 %1 - %2 的通行密鑰? - - - Register - 註冊 + 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? + 需要將您的 KeePassXC 瀏覽器擴充設定移動至資料庫設定。 +這是為了保持您目前的瀏覽器連結。 +您是否要現在移轉既有設定? @@ -1076,6 +975,10 @@ Do you want to overwrite the passkey in %1 - %2? General 一般 + + Browsers installed as snaps are currently not supported. + 目前並不支援以 Snap 套件安裝的瀏覽器。 + Enable integration for these browsers: 為以下瀏覽器啟用整合功能: @@ -1135,7 +1038,7 @@ Do you want to overwrite the passkey in %1 - %2? Returns expired credentials. String [expired] is added to the title. - 可回傳過期的憑證。標題會加入 [過期] 字串。 + 可回傳過期的憑證。標題會加入 [已過期] 字串。 Allow returning expired credentials @@ -1247,6 +1150,26 @@ Do you want to overwrite the passkey in %1 - %2? Custom extension ID 自定義擴充 ID + + Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 + 由於 Snap 的沙盒機制,您必須執行一個腳本來啟用瀏覽器整合。<br />您可以從 %1 取得這個腳本 + + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 + 需要 KeePassXC 瀏覽器擴充才能使用整合功能。<br />可供 %1 和 %2 和 %3 下載。%4 + + + Please see special instructions for browser extension use below + 請參閱以下的具體指示,學習如何使用瀏覽器擴展 + + + <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. + <b>錯誤:</b>找不到自定義的代理位置!<br/>沒有代理程式,瀏覽器整合將 無 法 運 作 。 + + + <b>Warning:</b> The following options can be dangerous! + <b>警告:</b>以下選項存在一定風險! + Executable Files 可執行檔案 @@ -1263,46 +1186,6 @@ Do you want to overwrite the passkey in %1 - %2? Select native messaging host folder location 選擇本地消息主機的資料夾位置 - - Allow keepassxc-proxy to list all entries with their title, URL and UUID in connected databases. - 允許 keepassxc-proxy 列出連結資料庫下的所有項目,包含標題、URL 與 UUID - - - Allow limited access to all entries in connected databases (ignores site access restrictions) - 允許對連結資料庫下所有項目的受限制存取(忽略網站存取限制) - - - <b>Warning:</b> Only adjust these settings if necessary. - <b>警告:</b>只有在必要時才調整這些設定。 - - - The custom proxy location does not exist. - 自定義的代理位置不存在。 - - - <b>Error:</b> The custom proxy location does not exist. Correct this in the advanced settings tab. - <b>錯誤:</b>自定義的代理位置不存在。請至進階設定分頁修正它。 - - - <b>Error:</b> The installed proxy executable is missing from the expected location: %1<br/>Please set a custom proxy location in the advanced settings or reinstall the application. - <b>錯誤:</b>代理的執行檔遺失,之前曾安裝於此位置:%1<br/>請至進階設定調整自定義代理位置,或者重新安裝應用程序。 - - - Allows using insecure http://localhost with passkeys for testing purposes. - 允許通行密鑰使用不安全的 http://localhost 作為測試用途。 - - - Allow using localhost with passkeys - 允許通行密鑰使用 localhost - - - KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. - 需要 KeePassXC 瀏覽器擴充才能使用整合功能。<br />可供 %1 和 %2 和 %3 下載。 - - - Browsers installed using Snap or Flatpak are not supported with exception to Firefox installed using Snap. - 不支援用 Snap 或 Flatpak 安裝的瀏覽器;Snap 安裝的 Firefox 為例外。 - CloneDialog @@ -1325,6 +1208,14 @@ Do you want to overwrite the passkey in %1 - %2? CsvImportWidget + + Import CSV fields + 匯入 CSV 欄位 + + + filename + 檔案名稱 + size, rows, columns 大小、列、欄位 @@ -1433,43 +1324,50 @@ Do you want to overwrite the passkey in %1 - %2? Column %1 欄位 %1 + + Imported from CSV file + 已從 CSV 檔匯入 + + + Original data: + 原始資料: + + + Error(s) detected in CSV file! + 在 CSV 檔中偵測到錯誤! + [%n more message(s) skipped] [跳過額外 %n 項訊息] - Failed to parse CSV file: %1 - 剖析 CSV 檔失敗:%1 + Error + 錯誤 - Imported from CSV file: %1 - 匯入自 CSV 檔案:%1 - - - No Title Selected - 未選擇標題 - - - No title column was selected, entries will be hard to tell apart. -Are you sure you want to import? - 未選擇標題欄,項目將難以區分。 -您確定要匯入嗎? - - - Tags - 標籤 + CSV import: writer has errors: +%1 + CSV 匯入:寫入器出錯: +%1 CsvParserModel + + %1, %2, %3 + file info: bytes, rows, columns + %1、%2、%3 + + + %n byte(s) + %n 位元組 + %n row(s) - CSV row count %n 列 %n column(s) - CSV column count %n 個欄位 @@ -1522,14 +1420,6 @@ Backup database located at %2 Recycle Bin 回收桶 - - Database file read error. - 資料庫檔案讀取錯誤。 - - - No file path was provided. - 未提供檔案路徑。 - DatabaseOpenDialog @@ -1552,10 +1442,30 @@ Backup database located at %2 Password field 密碼欄位 + + Enter Additional Credentials (if any): + 輸入額外的驗證資訊(如有需要): + + + Key File: + 金鑰檔: + + + Key file help + 金鑰檔案幫助 + Hardware key slot selection 硬體金鑰槽位選擇 + + Hardware Key: + 硬體金鑰: + + + Hardware key help + 硬體金鑰幫助 + Key file to unlock the database 解鎖資料庫的金鑰檔案 @@ -1568,6 +1478,14 @@ Backup database located at %2 Browse… 瀏覽… + + Refresh hardware tokens + 更新硬體令牌 + + + Refresh + 更新 + Unlock Database 解鎖資料庫 @@ -1630,6 +1548,10 @@ To prevent this error from appearing, you must go to "Database Settings / S Retry with empty password 以空白密碼重試 + + Failed to authenticate with Touch ID + Touch ID 驗證失敗 + Failed to open key file: %1 開啟金鑰檔案失敗:%1 @@ -1662,69 +1584,41 @@ To prevent this error from appearing, you must go to "Database Settings / S Cannot use database file as key file 無法使用資料庫檔案作為金鑰檔案 + + You cannot use your database file as a key file. +If you do not have a key file, please leave the field empty. + 您不能使用資料庫作為自己的金鑰檔案。 +若您沒有金鑰檔案,請將欄位留空。 + + + Detecting hardware keys… + 正在偵測硬體金鑰… + + + No hardware keys detected + 未偵測到硬體金鑰 + + + Select hardware key… + 選擇硬體金鑰… + + + <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information…</p> + <p>除了密碼,您還可以使用一份袐密檔案來加強資料庫的安全性。使用資料庫的安全設定可以產生該檔案。</p><p>這個<strong>並不是</strong>您的 *.kdbx 資料庫檔案!<br>若您沒有金鑰檔案,則留空欄位。</p><p>點擊獲得更多資訊…</p> + + + <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +<p>Click for more information…</p> + <p>您可以使用諸如 <strong>YubiKey</strong> 或 <strong>OnlyKey</strong> 等實體安全金鑰,只要它們擁有可設置 HMAC-SHA1 的槽位。</p> +<p>點擊獲得更多資訊…</p> + authenticate to access the database 驗證以存取資料庫 - Failed to authenticate with Quick Unlock: %1 - 快速解鎖驗證失敗:%1 - - - Select Key File: - 選擇金鑰檔案: - - - <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!</p> - <p>除了密碼,您還可以使用一份袐密檔案來加強資料庫的安全性。此檔案可以透過資料庫的安全設定中生成。</p><p>這<strong>不是</strong>您的 *.kdbx 資料庫檔案!</p> - - - Use hardware key [Serial: %1] - 使用硬體金鑰 [序號: %1] - - - Use hardware key - 使用硬體金鑰 - - - Your database file is NOT a key file! -If you don't have a key file or don't know what that is, you don't have to select one. - 您的資料庫檔案「不能」作為金鑰檔案! -若您沒有任何金鑰檔案,或不清楚那是什麼,可以選擇不使用。 - - - KeePassXC database file selected - KeePassXC 資料庫檔案被選擇 - - - The file you selected looks like a database file. -A database file is NOT a key file! - -Are you sure you want to continue with this file?. - 您選擇的檔案似乎是一份資料庫檔。 -資料庫檔「不能」作為金鑰檔案! - -您確定要以此檔案繼續? - - - No hardware keys found. - 找不到硬體金鑰。 - - - Refresh Hardware Keys - 刷新硬體金鑰 - - - Click to add a key file. - 點擊以加入金鑰檔案。 - - - <a href="#" style="text-decoration: underline">I have a key file</a> - <a href="#" style="text-decoration: underline">我有一份金鑰檔案</a> - - - Hardware keys found, but no slots are configured. - 硬體金鑰已找到,但未配置任何槽位。 + Failed to authenticate with Windows Hello: %1 + 以 Windows Hello 驗證失敗: %1 @@ -1736,6 +1630,10 @@ Are you sure you want to continue with this file?. DatabaseSettingsDialog + + Advanced Settings + 進階設定 + General 通用 @@ -1760,22 +1658,6 @@ Are you sure you want to continue with this file?. Maintenance 維護 - - KeeShare - KeeShare - - - Secret Service Integration - 保密服務整合 - - - Remote Sync - 遠端同步 - - - Database Settings: %1 - 資料庫設定:%1 - DatabaseSettingsWidgetBrowser @@ -1783,6 +1665,18 @@ Are you sure you want to continue with this file?. KeePassXC-Browser settings KeePassXC 瀏覽器擴充設定 + + Convert KeePassHTTP data + 轉換 KeePassHTTP 資料 + + + Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data + 將舊版 KeePassHTTP 屬性轉換為相容於 KeePassXC-Browser 的自定義資料 + + + Refresh database root group ID + 更新資料庫的根群組 ID + Disconnect all browsers 中斷與所有瀏覽器的連結 @@ -1791,10 +1685,6 @@ Are you sure you want to continue with this file?. Forget all site-specific settings on entries 遺忘項目的網站個別設定 - - Refresh database root group ID - 刷新資料庫的根群組 ID - Stored keys 已保存金鑰 @@ -1843,10 +1733,18 @@ This may prevent connection to the browser plugin. 真的要中斷與所有瀏覽器的連結? 這可能導致與瀏覽器插件的連結受阻。 + + KeePassXC: No keys found + KeePassXC: 找不到金鑰 + No shared encryption keys found in KeePassXC settings. 在 KeePassXC 設定中找不到共享加密金鑰。 + + KeePassXC: Removed keys from database + KeePassXC: 從資料庫移除金鑰 + Successfully removed %n encryption key(s) from KeePassXC settings. 成功從 KeePassXC 設定中移除 %n 組加密金鑰。 @@ -1865,44 +1763,42 @@ Permissions to access entries will be revoked. 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 convert all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + 真的要將所有過時的瀏覽器整合資料轉換至最新標準? +這是為了維持與瀏覽器插件的相容性。 + Refresh database ID - 刷新資料庫 ID + 更新資料庫 ID Do you really want refresh the database ID? This is only necessary if your database is a copy of another and the browser extension cannot connect. - 真的要刷新資料庫的 ID? + 真的要更新資料庫的 ID? 只有當資料庫屬於另一份複本,且瀏覽器擴充無法連結時,才有必要進行。 - - Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data - 將舊版 KeePassHTTP 屬性轉換為相容於 KeePassXC-Browser 的自定義資料 - - - No keys found - 未找到金鑰 - - - Removed keys from database - 從資料庫移除金鑰 - - - Removed permissions - 已移除權限 - - - No entry with permissions found! - 找不到擁有權限的項目! - DatabaseSettingsWidgetDatabaseKey @@ -1942,18 +1838,6 @@ Are you sure you want to continue without a password? Failed to change database credentials 更改資料庫憑證失敗 - - Weak password - 弱密碼 - - - This is a weak password! For better protection of your secrets, you should choose a stronger password. - 這是一個弱密碼!為了更好地保護您的祕密,您應該選擇更強的密碼。 - - - The provided password does not meet the minimum quality requirement. - 提供的密碼未達到最低強度要求。 - DatabaseSettingsWidgetEncryption @@ -1961,6 +1845,14 @@ Are you sure you want to continue without a password? Decryption Time: 解密時間: + + Change existing decryption time + 更改目前解密時間 + + + Change + 更改 + Decryption time in seconds 解密時間,以秒計算 @@ -2041,6 +1933,11 @@ Are you sure you want to continue without a password? KDBX 3 KDBX 3 + + unchanged + Database decryption time is unchanged + 不變 + Number of rounds too high Key transformation rounds @@ -2093,18 +1990,6 @@ If you keep this number, your database will not be protected from brute force at Threads for parallel execution (KDF settings) 執行緒 - - Encryption Settings: - 加密設定: - - - Basic - 基本 - - - Advanced - 進階 - DatabaseSettingsWidgetFdoSecrets @@ -2235,70 +2120,6 @@ removed from the database. 在「回收桶」刪除的項目將 直接移除自資料庫。 - - Autosave delay since last change - 修改後自動儲存延遲 - - - Autosave delay - 自動儲存延遲 - - - Autosave delay since last change in minutes - 修改後自動儲存延遲,以分鐘計 - - - min - - - - Autosave delay since last change checkbox - 自動儲存延遲勾選框 - - - Public Database Metadata - 公開資料庫詮釋資料 - - - Warning: the following settings are not encrypted. - 警告:以下設定並未被加密。 - - - Display name: - 顯示名稱: - - - Publically visible display name used on the unlock dialog - 公開可見的顯示名稱,於解鎖對話框 - - - Database public display name - 資料庫的公開顯示名稱 - - - Display color: - 顯示顏色: - - - Publically visible color used on the unlock dialog - 公開可見的顏色,於解鎖對話框 - - - Database public display color chooser - 資料庫的公開顯示顏色選擇器 - - - Clear - 清除 - - - Display icon: - 顯示圖示: - - - Select Database Icon - 選擇資料庫圖示 - DatabaseSettingsWidgetKeeShare @@ -2360,7 +2181,7 @@ removed from the database. Custom Icons Are In Use - 正在使用的自定義圖示 + 正在使用自定義圖示 All custom icons are in use by at least one entry or group. @@ -2394,141 +2215,6 @@ removed from the database. 資料庫描述欄位 - - DatabaseSettingsWidgetRemote - - Sync Commands - 同步指令 - - - Remove - 移除 - - - Command Settings - 指令設定 - - - Name - 名稱 - - - Save - 儲存 - - - Download - 下載 - - - Command: - 指令: - - - Download command field - 下載指令欄 - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - 範例:"sftp user@hostname" 或者 "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - - - Input: - 輸入: - - - Download input field - 下載輸入欄 - - - Upload - 上傳 - - - Upload command field - 上傳指令欄 - - - e.g.: "sftp user@hostname" or "scp {TEMP_DATABASE} user@hostname:DatabaseOnRemote.kdbx" - 範例:"sftp user@hostname" 或者 "scp {TEMP_DATABASE} user@hostname:DatabaseOnRemote.kdbx" - - - Upload input field - 上傳輸入欄 - - - Name cannot be empty. - 名稱不可爲空。 - - - Test - 測試 - - - Download command cannot be empty. - 下載命令不可爲空。 - - - Download failed with error: %1 - 下載失敗,錯誤:%1 - - - Download finished, but file %1 could not be found. - 下載完成,但無法找到檔案 %1。 - - - Download successful. - 下載成功。 - - - Save Remote Settings - 儲存遠端設定 - - - You have unsaved changes. Do you want to save them? - 您有未保存的更改。是否要保存它們? - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - 範例: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} 作為占位符,表示保存資料庫的臨時位置 -命令必須可以退出。如果最後一個指令爲 `sftp` 則必須發送 `exit` 指令 - - - - e.g.: -put {TEMP_DATABASE} DatabaseOnRemote.kdbx -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - 範例: -put {TEMP_DATABASE} DatabaseOnRemote.kdbx -exit ---- -{TEMP_DATABASE} 作為占位符,表示保存資料庫的臨時位置 -命令必須可以退出。如果最後一個指令爲 `sftp` 則必須發送 `exit` 指令 - - - - Timeout: - 超時: - - - seconds - - - DatabaseTabWidget @@ -2561,10 +2247,26 @@ This is definitely a bug, please report it to the developers. CSV file CSV 檔 + + Select CSV file + 選擇 CSV 檔 + Merge database 合併資料庫 + + KeePass 1 database + KeePass 1 資料庫 + + + Open KeePass 1 database + 開啟 KeePass 1 資料庫 + + + Open OPVault + 開啟 OPVault + Export database to CSV file 匯出資料庫至 CSV 檔 @@ -2577,6 +2279,28 @@ This is definitely a bug, please report it to the developers. Writing the HTML file failed. 寫入 HTML 檔失敗。 + + Export Confirmation + 匯出確認 + + + You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? + 您正要匯出資料庫至未加密的檔案。您的密碼及敏感資料將不受任何保護!您確定要繼續進行? + + + New Database + 新資料庫 + + + %1 [New Database] + Database tab name modifier + %1 [新資料庫] + + + %1 [Locked] + Database tab name modifier + %1 [已鎖定] + Export database to XML file 匯出資料庫至 XML 檔 @@ -2589,31 +2313,9 @@ This is definitely a bug, please report it to the developers. Writing the XML file failed 寫入 XML 檔失敗 - - Export Confirmation - 匯出確認 - - - You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? - 您正要匯出資料庫至未加密的檔案。您的密碼及敏感資料將不受任何保護!您確定要繼續進行? - - - %1 [Locked] - Database tab name modifier - %1 [已鎖定] - - - %1 [Temporary] - Database tab name modifier - %1 [臨時] - DatabaseWidget - - Searches and Tags - 搜索與標籤 - Searching… 搜尋中… @@ -2660,11 +2362,7 @@ This is definitely a bug, please report it to the developers. Expired entries - 過期項目 - - - Entries expiring within %1 day(s) - 將在 %1 天內過期的項目 + 已過期項目 No current database. @@ -2690,18 +2388,6 @@ This is definitely a bug, please report it to the developers. No Results 無結果 - - Save - 儲存 - - - Enter a unique name or overwrite an existing search from the list: - 輸入唯一名稱,或是覆寫清單中已存在的搜索: - - - Save Search - 儲存搜索 - Lock Database? 鎖定資料庫? @@ -2730,6 +2416,26 @@ Save changes? 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? + 資料庫檔案已被修改,且您有尚未儲存的變更。 +是否合併您的變更? + + + Could not open the new database file while attempting to autoreload. +Error: %1 + 嘗試自動重新載入,無法開啓新的資料庫檔案。 +錯誤:%1 + Disable safe saves? 停用安全存檔? @@ -2772,94 +2478,25 @@ Disable safe saves and try again? Could not find database file: %1 未找到資料庫檔案:%1 - - New Database - 新資料庫 + + Entries expiring within %1 day(s) + 將在 %1 天內過期的項目 - %1 [New Database] - Database tab name modifier - %1 [新資料庫] + Searches and Tags + 搜索與標籤 - Remote Sync did not contain any download or upload commands. - 遠端同步未包含任何下載或上傳指令。 + Enter a unique name or overwrite an existing search from the list: + 輸入唯一名稱,或是覆寫清單中已存在的搜索: - Remote sync '%1' completed successfully! - 遠端同步「%1」成功完成! + Save + 儲存 - Remote sync '%1' failed: %2 - 遠端同步「%1」失敗:%2 - - - Error while saving database %1: %2 - 儲存資料庫 %1 時發生錯誤:%2 - - - Downloading... - 正在下載... - - - Uploading... - 正在上傳... - - - Syncing... - 正在同步... - - - Remove passkey from entry - 從項目移除通行密鑰 - - - Do you want to remove the passkey from this entry? - 是否要從此項目移除通行密鑰? - - - The database file "%1" was modified externally - 資料庫檔案「%1」被外部更動 - - - Do you want to load the changes? - 是否要載入變更? - - - Reload database - 重載資料庫 - - - Reloading database… - 正在重載資料庫… - - - Reload canceled - 重載取消 - - - Reload successful - 重載成功 - - - Reload pending user action… - 重載等待使用者行動… - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes<br>Ignore the changes on disk until save<br>Discard unsaved changes - 資料庫檔案「%1」曾被外部修改過 。<br>您希望如何進行?<br><br>合併所有變更<br>儲存前先忽略磁碟上的變更<br>丟棄未儲存的變更 - - - The database file "%1" was modified externally.<br>How would you like to proceed?<br><br>Merge all changes then save<br>Overwrite the changes on disk<br>Discard unsaved changes - 資料庫檔案「%1」曾被外部修改過 。<br>您希望如何進行?<br><br>合併所有變更並儲存<br>覆寫磁碟上的變更<br>丟棄未儲存的變更 - - - Database file overwritten. - 資料庫檔案被覆寫。 - - - Database file on disk cannot be unlocked with current credentials.<br>Enter new credentials and/or present hardware key to continue. - 磁碟上的資料庫檔案無法被現有憑證解鎖。<br>輸入新的憑證並/或出示硬體金鑰以繼續。 + Save Search + 儲存搜索 @@ -2912,6 +2549,10 @@ Disable safe saves and try again? n/a + + (encrypted) + (已加密) + Select private key 選擇私密金鑰 @@ -2998,10 +2639,6 @@ Would you like to correct it? Hide 隱藏 - - %n hour(s) - %n 小時 - %n week(s) %n 個禮拜 @@ -3014,9 +2651,9 @@ Would you like to correct it? %n year(s) %n 年 - - Failed to decrypt SSH key, ensure password is correct. - 解密 SSH 金鑰失敗,確認密碼是否正確。 + + %n hour(s) + %n 小時 @@ -3079,7 +2716,7 @@ Would you like to correct it? If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements. - 勾選後,項目將不會出現在「健康檢查」或 HIBP 等報告,即使它不符合強度要求。 + 勾選後,項目將不會出現在「健康檢查」或 HIBP 等報告,即使它不符合品質要求。 Exclude from database reports @@ -3136,20 +2773,10 @@ Would you like to correct it? Add new window association 加入新的視窗關聯 - - + - Add item - + - Remove selected window association 移除所選的視窗關聯 - - - - Remove item - - - Window title: 視窗標題: @@ -3174,9 +2801,23 @@ Would you like to correct it? Custom Auto-Type sequence for this window 自定義此視窗的自動輸入序列 + + + + Add item + + + + + - + Remove item + - + EditEntryWidgetBrowser + + These settings affect to the entry's behaviour with the browser extension. + 這些設定影響了項目在瀏覽器擴充下的行為。 + General 一般 @@ -3189,14 +2830,26 @@ Would you like to correct it? Skip Auto-Submit for this entry 為此項目跳過自動送出 + + Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. + 只有出現 HTTP 基本認證對話框才會傳送此設定至瀏覽器。啟用之後,將不會在一般的登入表格顯示此項目的選項。 + Use this entry only with HTTP Basic Auth 對此項目只使用 HTTP 基本認證 + + Do not send this setting to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. + 對 HTTP 基本認證對話框,不要傳送此設定至瀏覽器。啟用之後,HTTP 基本認證對話框將不會在選項中顯示此項目。 + Do not use this entry with HTTP Basic Auth HTTP 基本認證不要使用此項目 + + Additional URL's + 其他 URL + Add 加入 @@ -3209,22 +2862,6 @@ Would you like to correct it? Edit 編輯 - - These settings affect the entry's behaviour with the browser extension. - 這些設定影響了項目在瀏覧器擴充下的行為。 - - - Additional URLs - 其他 URL - - - Only send this entry to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. - 僅將此項目傳送到瀏覽器的 HTTP 認證對話框。啟用後,普通登入表格將不再顯示此項目供選擇。 - - - Do not send this entry to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. - 不要將此項目傳送到瀏覽器的 HTTP 認證對話框。啟用後,HTTP 認證對話框將不再顯示此項目供選擇。 - EditEntryWidgetHistory @@ -3321,7 +2958,7 @@ Would you like to correct it? &Username: - 使用者名稱(&U): + 使用者名稱(&U): &Title: @@ -3390,6 +3027,19 @@ Would you like to correct it? Private key 私密金鑰 + + External file + 外部檔案 + + + Browser for key file + 瀏覽金鑰檔案 + + + Browse… + Button for opening file dialog + 瀏覽… + Attachment 附件 @@ -3406,23 +3056,6 @@ Would you like to correct it? Remove from agent 從代理刪除 - - External file - 外部檔案 - - - Browser for key file - 瀏覽金鑰檔案 - - - Browse… - Button for opening file dialog - 瀏覽… - - - Generate - 產生 - Select attachment file 選擇附件檔案 @@ -3447,10 +3080,6 @@ Would you like to correct it? seconds - - Clear agent - 清除代理 - EditGroupWidget @@ -3462,6 +3091,10 @@ Would you like to correct it? Icon 圖示 + + Browser Integration + 瀏覽器整合 + Properties 屬性 @@ -3478,10 +3111,6 @@ Would you like to correct it? Group has unsaved changes 群組有尚未儲存的更改 - - Browser Integration - 瀏覽器整合 - Enable 啟用 @@ -3541,14 +3170,6 @@ Would you like to correct it? Omit WWW subdomain from matching toggle for this and sub groups 切換目前群組與其子群組是否在匹配時省略 WWW 子域名 - - Restrict matching to given browser key: - 限制與指定的瀏覽器金鑰匹配: - - - Restrict matching to given browser key toggle for this and sub groups - 限制群組和其子群組與指定的瀏覽器金鑰匹配 - EditGroupWidgetKeeShare @@ -3700,7 +3321,7 @@ Supported extensions are: %1. Notes: - 備註: + 附註: Default auto-type sequence field @@ -3781,6 +3402,10 @@ Supported extensions are: %1. Unable to fetch favicon. 無法擷取網站圖標。 + + You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security + 您可以到「工具」->「設定」->「安全」啟用 DuckDuckGo 的網站圖示服務 + Existing icon selected. 選擇了已存在的圖示。 @@ -3813,10 +3438,6 @@ Supported extensions are: %1. The following icon(s) failed: 以下圖示失敗: - - You can enable the DuckDuckGo website icon service under Application Settings -> Security - 您可以在「應用程式設定」->「安全」啟用 DuckDuckGo 網站圖示服務 - EditWidgetProperties @@ -3893,24 +3514,6 @@ This may cause the affected plugins to malfunction. %1 - Clone %1 - 複製 - - Passkey - 通行密鑰 - - - Invalid conversion type: %1 - 無效的轉換類型: %1 - - - Invalid conversion syntax: %1 - 無效的轉換語法: %1 - - - Invalid regular expression syntax %1 -%2 - 無效的正規表示式語法 %1 -%2 - EntryAttachments @@ -3919,21 +3522,6 @@ This may cause the affected plugins to malfunction. 無法開啟檔案「%1」 - - EntryAttachmentsDialog - - Form - 表單 - - - File name - 檔案名稱 - - - File contents... - 檔案內容... - - EntryAttachmentsModel @@ -3971,6 +3559,14 @@ This may cause the affected plugins to malfunction. Remove 移除 + + Rename selected attachment + 重新命名所選附件 + + + Rename + 重新命名 + Open selected attachment 開啟所選附件 @@ -4045,6 +3641,12 @@ This may cause the affected plugins to malfunction. Confirm Overwrite Attachment 確認覆蓋附件 + + Attachment "%1" already exists. +Would you like to overwrite the existing attachment? + 附件「%1」已存在。 +是否要覆改既存的附件? + Confirm Attachment 確認附件 @@ -4078,24 +3680,6 @@ Error: %1 儲存更新的附件失敗。 錯誤:%1 - - Attachment "%1" already exists. -Would you like to overwrite the existing attachment? - 附件「%1」已存在。 -是否要覆改既存的附件? - - - New - - - - Preview - 預覽 - - - Failed to preview an attachment: Attachment not found - 預覽附件失敗:找不到附件 - EntryAttributesModel @@ -4290,14 +3874,6 @@ Would you like to overwrite the existing attachment? Has TOTP 有 TOTP - - Background Color - 背景顏色 - - - Group Path - 群組路徑 - EntryPreviewWidget @@ -4318,8 +3894,8 @@ Would you like to overwrite the existing attachment? 密碼 - URL - URL + Notes + 備註 Expiration @@ -4338,8 +3914,8 @@ Would you like to overwrite the existing attachment? 使用者名稱 - Notes - 備註 + URL + URL Advanced @@ -4389,10 +3965,6 @@ Would you like to overwrite the existing attachment? Never 從不 - - Double click to copy value - 雙擊可複製值 - Enabled 啟用 @@ -4402,8 +3974,8 @@ Would you like to overwrite the existing attachment? 停用 - Double click to copy to clipboard - 雙擊以複製到剪貼板 + Double click to copy value + 雙擊可複製值 @@ -4412,10 +3984,6 @@ Would you like to overwrite the existing attachment? Invalid URL 無效的 URL - - Duplicate URL - 重複 URL - EntryView @@ -4431,10 +3999,6 @@ Would you like to overwrite the existing attachment? Reset to defaults 重置為預設值 - - + %1 entry(s)... - + %1 項目... - ExportDialog @@ -4656,199 +4220,6 @@ You can enable the DuckDuckGo website icon service in the security section of th 正在下載網站圖標 (%1/%2)… - - ImportWizard - - Import Wizard - 匯入精靈 - - - - ImportWizardPageReview - - WizardPage - 嚮導頁 - - - Entry count: %1 - 項目數:%1 - - - Group - 群組 - - - Title - 標題 - - - Username - 使用者名稱 - - - Password - 密碼 - - - Url - Url - - - Could not load key file. - 無法載入金鑰檔。 - - - Could not open remote database. Password or key file may be incorrect. - 無法開啟遠端資料庫。密碼或金鑰檔可能不正確。 - - - - ImportWizardPageSelect - - Form - 表單 - - - Import File Selection - 匯入檔案選擇 - - - Password: - 密碼: - - - Key File: - 金鑰檔: - - - Browse… - 瀏覽… - - - Import Into: - 匯入至: - - - New Database - 新資料庫 - - - No unlocked databases available - 沒有可用的已解鎖資料庫 - - - Existing Database: - 存在資料庫: - - - Import File: - 匯入檔案: - - - Comma Separated Values (.csv) - 逗號分隔值 (.csv) - - - 1Password Export (.1pux) - 1Password 匯出 (.1pux) - - - 1Password Vault (.opvault) - 1Password 保險庫 (.opvault) - - - Bitwarden (.json) - Bitwarden (.json) - - - KeePass 1 Database (.kdb) - KeePass 1 資料庫 (.kdb) - - - Open OPVault - 開啟 OPVault - - - Select import file - 選擇匯入檔案 - - - All files - 所有檔案 - - - Key files - 金鑰檔案 - - - Select key file - 選擇金鑰檔案 - - - Comma Separated Values - 逗號分隔值 - - - 1Password Export - 1Password 匯出 - - - Bitwarden JSON Export - Bitwarden JSON 匯出 - - - 1Password Vault - 1Password 保險庫 - - - KeePass1 Database - KeePass1 資料庫 - - - Proton Pass (.json) - Proton Pass (.json) - - - Proton Pass JSON Export - Proton Pass JSON 匯出 - - - Temporary Database - 臨時資料庫 - - - Command: - 指令: - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - 範例:"sftp user@hostname" 或者 "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - - - Input: - 輸入: - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last commend `exit` has to be sent - - 範例: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} 作為占位符,表示保存資料庫的臨時位置 -命令必須可以退出。如果最後一個指令爲 `sftp` 則必須發送 `exit` 指令 - - - - Remote Database (.kdbx) - 遠端資料庫 (.kdbx) - - KMessageWidget @@ -5283,6 +4654,17 @@ Line %2, column %3 無法打開私密金鑰 + + KeePass1OpenWidget + + Import KeePass1 Database + 匯入 KeePass1 資料庫 + + + Unable to open the database. + 無法開啟資料庫。 + + KeePass1Reader @@ -5639,6 +5021,10 @@ Are you sure you want to continue with this file? &Recent Databases 最近的資料庫 (&R) + + &Import + 匯入 (&I) + &Export 匯出 (&E) @@ -5659,10 +5045,6 @@ Are you sure you want to continue with this file? TOTP TOTP - - Tags - 標籤 - &Groups 群組 (&G) @@ -5707,18 +5089,34 @@ Are you sure you want to continue with this file? &New Database… 新建資料庫 (&N)… + + Create a new database + 建立新資料庫 + &Merge From Database… 從資料庫合併 (&M)… + + Merge from another KDBX database + 與其他 KDBX 資料庫合併 + &New Entry… 新建項目 (&N)… + + Add a new entry + 加入新項目 + &Edit Entry… 編輯項目 (&E)… + + View or edit entry + 檢視或編輯項目 + &Delete Entry… 刪除項目 (&D)… @@ -5727,6 +5125,10 @@ Are you sure you want to continue with this file? &New Group… 新建群組 (&N)… + + Add a new group + 加入新群組 + &Edit Group… 編輯群組 (&E)… @@ -5759,10 +5161,18 @@ Are you sure you want to continue with this file? Database &Reports… 資料庫報告 (&R)… + + Statistics, health check, etc. + 資料統計與健康檢查等 + &Database Settings… 資料庫設定 (&D)… + + Database settings + 資料庫設定 + &Clone Entry… 複製項目 (&C)… @@ -5771,18 +5181,34 @@ Are you sure you want to continue with this file? Move u&p 上移 (&P) + + Move entry one step up + 將項目向上移動一步 + Move do&wn 下移 (&W) + + Move entry one step down + 將項目向下移動一步 + Copy &Username 複製使用者名稱 (&U) + + Copy username to clipboard + 將使用者名稱複製到剪貼簿 + Copy &Password 複製密碼 (&P) + + Copy password to clipboard + 將密碼複製到剪貼簿 + &Settings 設定 (&S) @@ -5816,13 +5242,21 @@ Are you sure you want to continue with this file? 標題 (&T) - Copy &URL - 複製 &URL + Copy title to clipboard + 將標題複製到剪貼簿 + + + Copy URL to clipboard + 將 URL 複製到剪貼簿 &Notes 備註 (&N) + + Copy notes to clipboard + 將備註複製到剪貼簿 + &CSV File… &CSV 檔… @@ -5835,14 +5269,26 @@ Are you sure you want to continue with this file? KeePass 1 Database… KeePass 1 資料庫… + + Import a KeePass 1 database + 匯入 KeePass 1 資料庫 + 1Password Vault… 1Password 保險庫… + + Import a 1Password Vault + 匯入 1Password 保險庫 + CSV File… CSV 檔… + + Import a CSV file + 匯入 CSV 檔案 + Show TOTP 顯示 TOTP @@ -5859,10 +5305,6 @@ Are you sure you want to continue with this file? Copy &TOTP 複製 &TOTP - - Copy Password and TOTP - 複製密碼與 TOTP - E&mpty recycle bin 清空回收桶 (&M) @@ -5881,12 +5323,16 @@ Are you sure you want to continue with this file? Open Getting Started Guide - 打開「開始使用」指南 + 開啟「開始使用」指南 &Online Help 線上幫助 (&O) + + Go to online documentation + 前往線上文件 + &User Guide 使用者指南 (&U) @@ -5913,7 +5359,7 @@ Are you sure you want to continue with this file? Compact Mode - 緊湊模式 + 緊緻模式 Automatic @@ -5931,10 +5377,6 @@ Are you sure you want to continue with this file? Classic (Platform-native) 經典(平台原生) - - Show Menubar - 顯示選單列 - Show Toolbar 顯示工具列 @@ -5959,10 +5401,6 @@ Are you sure you want to continue with this file? Clone Group... 複製群組... - - &XML File… - &XML 檔… - Clear history 清除歷史記錄 @@ -5990,8 +5428,10 @@ Expect some bugs and minor issues, this version is meant for testing purposes. - No Tags - 無標籤 + 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。 Restore Entry(s) @@ -6021,10 +5461,6 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Quit KeePassXC 退出 KeePassXC - - %1 Entry(s) - %1 個項目 - Please present or touch your YubiKey to continue… 請感應或接觸您的 YubiKey 以繼續… @@ -6037,314 +5473,38 @@ Expect some bugs and minor issues, this version is meant for testing purposes.You must restart the application to apply this setting. Would you like to restart now? 必須重啟應用程式來套用此設定。您是否要現在重新啟動? + + Tags + 標籤 + + + No Tags + 無標籤 + + + %1 Entry(s) + %1 個項目 + + + Copy Password and TOTP + 複製密碼與 TOTP + + + &XML File… + &XML 檔… + + + XML File… + XML 檔… + + + Copy &URL + 複製 &URL + Allow Screen Capture 允許螢幕截圖 - - 1Password 1PUX... - 1Password 1PUX... - - - Import a 1Password 1PUX file - 匯入 1Password 1PUX 檔案 - - - Import… - 匯入… - - - Passkeys… - 通行密鑰… - - - Import Passkey - 匯入通行密鑰 - - - Remote S&ync… - 遠端同步(&Y)… - - - Quit Application - 退出應用程式 - - - Open About Dialog - 打開關於對話框 - - - Open Database - 開啟資料庫 - - - Create Database - 建立資料庫 - - - Merge From Database - 從資料庫合併 - - - Create Entry - 建立項目 - - - Edit Entry - 編輯項目 - - - Delete Entry - 刪除項目 - - - Create Group - 建立群組 - - - Edit Group - 編輯群組 - - - Delete Group - 刪除群組 - - - Download All Favicons - 下載所有網站圖標 - - - Sort Groups A-Z - 按 A-Z 排序分組 - - - Sort Groups Z-A - 按 Z-A 排序分組 - - - Save Database As - 儲存資料庫為 - - - Show Database Security - 顯示資料庫安全 - - - Show Database Reports - 顯示資料庫報告 - - - Show Database Settings - 顯示資料庫設定 - - - Show Passkeys - 顯示通行密鑰 - - - Clone Entry - 複製項目 - - - Move Entry Up - 向上移動項目 - - - Move Entry Down - 向下移動項目 - - - Copy Username - 複製使用者名稱 - - - Copy Password - 複製密碼 - - - Show Application Settings - 顯示應用程式設定 - - - Show Password Generator - 顯示密碼產生器 - - - Remove Passkey From Entry - 從項目移除通行密鑰 - - - Perform Auto-Type: {USERNAME} - 執行自動輸入:{USERNAME} - - - Perform Auto-Type: {USERNAME}{ENTER} - 執行自動輸入:{USERNAME}{ENTER} - - - Perform Auto-Type: {PASSWORD} - 執行自動輸入:{PASSWORD} - - - Perform Auto-Type: {PASSWORD}{ENTER} - 執行自動輸入:{PASSWORD}{ENTER} - - - Perform Auto-Type: {TOTP} - 執行自動輸入:{TOTP} - - - Copy Title - 複製標題 - - - Copy URL - 複製 URL - - - Copy Notes - 複製備註 - - - Export to CSV - 匯出至 CSV - - - Export to HTML - 匯出至 HTML - - - Import KeePass1 Database - 匯入 KeePass1 資料庫 - - - Import 1Password Vault - 匯入 1Password 保險庫 - - - Import CSV File - 匯入 CSV 檔 - - - Show TOTP QR Code - 顯示 TOTP QR 碼 - - - Set up TOTP - 設定 TOTP - - - Empty Recycle Bin - 清空回收桶 - - - Open Donation Website - 打開捐贈網站 - - - Open Bug Report - 打開錯誤報告 - - - Open Online Documentation - 打開線上文件 - - - Open Keyboard Shortcuts Guide - 打開「鍵盤快捷鍵」指南 - - - Save Database Backup - 儲存資料庫備份 - - - SSH Agent: Add Key - SSH 代理:加入金鑰 - - - SSH Agent: Remove Key - SSH 代理:移除金鑰 - - - Toggle Compact Mode - 切換緊湊模式 - - - Set Theme: Automatic - 設定主題:自動 - - - Set Theme: Light - 設定主題:淺色 - - - Set Theme: Dark - 設定主題:深色 - - - Set Theme: Classic - 設定主題:經典 - - - Toggle Show Menubar - 切換顯示選單列 - - - Toggle Show Toolbar - 切換顯示工具列 - - - Toggle Show Preview Panel - 切換顯示預覽面板 - - - Toggle Always on Top - 切換視窗置頂顯示 - - - Toggle Hide Usernames - 切換隱藏使用者名稱 - - - Toggle Hide Passwords - 切換隱藏密碼 - - - Export to XML - 匯出至 XML - - - Toggle Allow Screen Capture - 切換允許螢幕截圖 - - - Show Group Panel - 顯示群組面板 - - - Toggle Show Group Panel - 切換顯示群組面板 - - - Setup Remote Sync… - 設定遠端同步… - - - Password Generator - 密碼產生器 - - - E&xpire Entry… - 過期項目(&X)… - - - Clear SSH Agent - 清楚 SSH 代理 - - - Clear all identities in ssh-agent - 清楚 ssh-agent 內所有身份 - ManageDatabase @@ -6402,6 +5562,26 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Overwriting %1 [%2] 覆寫 %1 [%2] + + older entry merged from database "%1" + 較舊的項目從資料庫「%1」合併 + + + Adding backup for older target %1 [%2] + 為較舊的目標 %1 [%2] 添加備份 + + + Adding backup for older source %1 [%2] + 為較舊的來源 %1 [%2] 添加備份 + + + Reapplying older target entry on top of newer source %1 [%2] + 在較新的來源 %1 [%2] 之上重新應用較舊的目標項目 + + + Reapplying older source entry on top of newer target %1 [%2] + 在較新的目標 %1 [%2] 之上重新應用較舊的來源項目 + Synchronizing from newer source %1 [%2] 從較新的來源 %1 [%2] 同步 @@ -6461,6 +5641,14 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. 您可以在此調整資料庫的加密設定。別擔心,之後也可以到資料庫設定更改它們。 + + Advanced Settings + 進階設定 + + + Simple Settings + 簡單設定 + NewDatabaseWizardPageDatabaseKey @@ -6495,25 +5683,6 @@ Expect some bugs and minor issues, this version is meant for testing purposes.請為您的新資料庫填寫一個顯示名稱,及一個選擇性的說明: - - NewEntryAttachmentsDialog - - Attachment name cannot be empty - 附件名稱不能為空 - - - Attachment with the same name already exists - 已存在相同名稱的附件 - - - Save attachment - 儲存附件 - - - New entry attachment - 新項目附件 - - NixUtils @@ -6560,6 +5729,15 @@ Expect some bugs and minor issues, this version is meant for testing purposes.預期 %1 位元組的純文本,實際為 %2 + + OpVaultOpenWidget + + Read Database did not produce an instance +%1 + 讀取資料庫並未產生實體 +%1 + + OpVaultReader @@ -6633,10 +5811,6 @@ Expect some bugs and minor issues, this version is meant for testing purposes.Unknown cipher: %1 未知的密語:%1 - - AES-256/GCM is currently not supported - AES-256/GCM 目前不受支援 - Passphrase is required to decrypt this key 需要密碼短語以解密此金鑰 @@ -6702,183 +5876,8 @@ Expect some bugs and minor issues, this version is meant for testing purposes.寫入私密金鑰時出現意外的檔案結尾 - (encrypted) - (已加密) - - - - OpenSSHKeyGenDialog - - SSH Key Generator - SSH 金鑰產生器 - - - Type - 類型 - - - Bits - 位元 - - - Comment - 註解 - - - - PasskeyExportDialog - - KeePassXC - Passkey Export - KeePassXC - 通行密鑰匯出 - - - Filenames will be generated with title and .passkey file extension. - 檔案名稱將以標題與 .passkey 副檔名生成。 - - - Export entries - 匯出項目 - - - Export Selected - 匯出所選 - - - Cancel - 取消 - - - Export to folder - 匯出至資料夾 - - - Export the following passkey entries. - 匯出以下通行密鑰項目。 - - - - PasskeyExporter - - KeePassXC: Passkey Export - KeePassXC: 通行密鑰匯出 - - - File "%1.passkey" already exists. -Do you want to overwrite it? - - 檔案「%1.passkey」已經存在。 -是否要覆寫它? - - - - Cannot open file - 無法開啟檔案 - - - Cannot open file "%1" for writing. - 無法開啟檔案「%1」以寫入。 - - - Cannot write to file - 無法寫入檔案 - - - - PasskeyImportDialog - - KeePassXC - Passkey Import - KeePassXC - 通行密鑰匯入 - - - Username: %1 - 使用者名稱:%1 - - - Group - 群組 - - - Database - 資料庫 - - - Import Passkey - 匯入通行密鑰 - - - Import - 匯入 - - - Cancel - 取消 - - - Entry - 項目 - - - Create new entry - 建立新項目 - - - Relying Party: %1 - 依賴方:%1 - - - Import the following passkey: - 匯入以下通行密鑰: - - - Import the following passkey to this entry: - 將以下通行密鑰匯入至此項目: - - - Default passkeys group (Imported Passkeys) - 預設的通行密鑰群組(匯入的通行密鑰) - - - - PasskeyImporter - - Passkey file - 通行密鑰檔案 - - - All files - 所有檔案 - - - Cannot open file - 無法開啟檔案 - - - Cannot open file "%1" for reading. - 無法開啟檔案「%1」以讀取。 - - - Open passkey file - 開啟通行密鑰檔案 - - - Cannot import passkey - 無法匯入通行密鑰 - - - Cannot import passkey file "%1". Data is missing. - 無法匯入通行密鑰檔案「%1」。資料遺失。 - - - Cannot import passkey file "%1". -The following data is missing: -%2 - 無法匯入通行密鑰檔案「%1」。 -以下資料有遺失: -%2 - - - Cannot import passkey file "%1". Private key is missing or malformed. - 無法匯入通行密鑰檔案「%1」。私鑰遺失或格式有誤。 + AES-256/GCM is currently not supported + AES-256/GCM 目前不受支援 @@ -7083,6 +6082,10 @@ The following data is missing: Word Count: 詞彙數: + + Character Count: + 字元數: + Word Case: 字母大小寫: @@ -7095,6 +6098,10 @@ The following data is missing: Add custom wordlist 加入自定義詞彙表 + + character + 字元 + Close 關閉 @@ -7131,37 +6138,13 @@ The following data is missing: Entropy: %1 bit 資訊熵:%1 位元 - - Password Quality: %1 - 密碼強度:%1 - - - Poor - Password quality - 極弱 - - - Weak - Password quality - 較弱 - - - Good - Password quality - 較好 - - - Excellent - Password quality - 極好 - Confirm Delete Wordlist 確認刪除詞彙表 Do you really want to delete the wordlist "%1"? - 真的要刪除詞彙表「%1」? + 真的要刪除詞彙表 “%1"? Failed to delete wordlist @@ -7186,8 +6169,8 @@ The following data is missing: Wordlist "%1" already exists as a custom wordlist. Do you want to overwrite it? - 自定義的詞彙表「%1」已經存在。 -是否要覆寫它? + 自定義的詞彙表 "%1" 已經存在。 +要覆寫它嗎? Failed to add wordlist @@ -7202,20 +6185,32 @@ Do you want to overwrite it? 特殊字元 - passwordLength - 密碼長度 + Password Quality: %1 + 密碼品質:%1 - Characters: %1 - 字元:%1 + Poor + Password quality + 極弱 - MIXED case - 大小寫混合 + Weak + Password quality + 較弱 - Excluded characters: "0", "1", "l", "I", "O", "|", "﹒", "B", "8", "G", "6" - 排除字元:"0", "1", "l", "I", "O", "|", "﹒", "B", "8", "G", "6" + Good + Password quality + 較好 + + + Excellent + Password quality + 極好 + + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + 排除以下字元:"0", "1", "l", "I", "O", "|", "﹒" @@ -7242,7 +6237,7 @@ Do you want to overwrite it? Quality: %1 - 密碼強度:%1 + 密碼品質:%1 Poor @@ -7265,7 +6260,7 @@ Do you want to overwrite it? 極好 - Toggle password visibility using Control + H. Open the password generator using Control + G. + Toggle password visibilty using Control + H. Open the password generator using Control + G. 使用 Control + H 顯示或隱藏密碼。使用 Control + G 打開密碼產生器。 @@ -7284,21 +6279,6 @@ Do you want to overwrite it? 字元間按 &Tab - - PreviewEntryAttachmentsDialog - - Preview entry attachment - 預覽項目附件 - - - No preview available - 無適用的預覽 - - - Image format not supported - 圖像格式不受支援 - - QMessageBox @@ -7337,10 +6317,6 @@ Do you want to overwrite it? Continue 繼續 - - Continue with weak password - 以弱密碼繼續 - QObject @@ -7734,10 +6710,6 @@ Do you want to overwrite it? Too many arguments provided. 提供的參數過多。 - - Path of the database. - 資料庫的路徑。 - Target decryption time in MS for the database. 資料庫的目標解密時間,以「毫秒」計算。 @@ -7758,6 +6730,10 @@ Do you want to overwrite it? Create a new database. 建立新群組。 + + Path of the database. + 資料庫的路徑。 + Invalid decryption time %1. 無效的解密時間 %1。 @@ -7802,158 +6778,6 @@ Do you want to overwrite it? Successfully created new database. 成功建立新資料庫。 - - Unset the password for the database. - 刪除資料庫的密碼。 - - - Unset the key file for the database. - 刪除資料庫的金鑰檔案。 - - - Edit a database. - 編輯資料庫。 - - - Cannot use %1 and %2 at the same time. - 無法同時使用 %1 和 %2。 - - - Could not change the database key. - 無法更改資料庫金鑰。 - - - Database was not modified. - 資料庫未被修改。 - - - Writing the database failed: %1 - 寫入資料庫失敗:%1 - - - Successfully edited the database. - 已成功編輯資料庫。 - - - Cannot remove password: The database does not have a password. - 無法刪除密碼:資料庫不含密碼。 - - - Cannot remove file key: The database does not have a file key. - 無法刪除檔案金鑰:資料庫不含檔案金鑰。 - - - Loading the new key file failed: %1 - 載入新金鑰檔案失敗:%1 - - - Found unexpected Key type %1 - 發現未預期的金鑰類型 %1 - - - Cannot remove all the keys from a database. - 無法從資料庫移除所有金鑰。 - - - Show a database's information. - 顯示資料庫資訊。 - - - UUID: - UUID: - - - Name: - 名稱: - - - Description: - 描述: - - - Cipher: - 加密法: - - - KDF: - KDF: - - - Recycle bin is enabled. - 回收桶已啟用。 - - - Recycle bin is not enabled. - 回收桶尚未啟用。 - - - Location - 位置 - - - Database created - 資料庫已建立 - - - Last saved - 最近儲存於 - - - Unsaved changes - 未儲存變更 - - - yes - - - - no - - - - Number of groups - 群組數 - - - Number of entries - 項目數 - - - Number of expired entries - 過期項目數 - - - Unique passwords - 獨特的密碼 - - - Non-unique passwords - 非獨特的密碼 - - - Maximum password reuse - 最大密碼重複使用次數 - - - Number of short passwords - 過短密碼數 - - - Number of weak passwords - 弱密碼數 - - - Entries excluded from reports - 從報告排除的項目 - - - Average password length - 平均密碼長度 - - - %1 characters - %1 字元 - Word count for the diceware passphrase. Diceware 密碼短語字數統計 @@ -7966,7 +6790,7 @@ Do you want to overwrite it? Wordlist for the diceware generator. [Default: EFF English] - Diceware 產生器使用的詞彙表。 + Diceware 產生器使用的字詞表。 [預設:EFF English] @@ -7977,6 +6801,10 @@ Do you want to overwrite it? Invalid word count %1 無效的字數統計 %1 + + The word list is too small (< 1000 items) + 字詞清單過小(< 1000 個項目) + Title for the entry. 項目標題。 @@ -8001,6 +6829,10 @@ Do you want to overwrite it? Enter new password for entry: 為項目輸入新密碼: + + Writing the database failed: %1 + 寫入資料庫失敗:%1 + Successfully edited entry %1. 成功編輯項目 %1。 @@ -8121,6 +6953,10 @@ Do you want to overwrite it? Exit interactive mode. 離開互動模式。 + + Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. + 匯出所用的格式。可用選項為 'xml' 或 'csv'。預設為 'xml'。 + Exports the content of a database to standard output in the specified format. 以指定格式匯出資料庫內容至標準輸出。 @@ -8221,6 +7057,106 @@ Do you want to overwrite it? Successfully imported database. 成功匯入資料庫。 + + Show a database's information. + 顯示資料庫資訊。 + + + UUID: + UUID: + + + Name: + 名稱: + + + Description: + 描述: + + + Cipher: + 加密法: + + + KDF: + KDF: + + + Recycle bin is enabled. + 回收桶已啟用。 + + + Recycle bin is not enabled. + 回收桶尚未啟用。 + + + Location + 位置 + + + Database created + 資料庫已建立 + + + Last saved + 最近儲存於 + + + Unsaved changes + 未儲存變更 + + + yes + + + + no + + + + Number of groups + 群組數 + + + Number of entries + 項目數 + + + Number of expired entries + 已過期項目數 + + + Unique passwords + 獨特的密碼 + + + Non-unique passwords + 非獨特的密碼 + + + Maximum password reuse + 最大密碼重複使用次數 + + + Number of short passwords + 過短密碼數 + + + Number of weak passwords + 弱密碼數 + + + Entries excluded from reports + 從報告排除的項目 + + + Average password length + 平均密碼長度 + + + %1 characters + %1 字元 + Unknown command %1 未知的指令 %1 @@ -8393,10 +7329,6 @@ Available commands: Show the protected attributes in clear text. 以明文顯示被保護的屬性。 - - Show all the attributes of the entry. - 顯示項目的所有屬性。 - Show the attachments of the entry. 顯示項目的附件。 @@ -8467,10 +7399,6 @@ Please consider generating a new key file. Invalid YubiKey serial %1 無效的 YubiKey 序號 %1 - - Please present or touch your YubiKey to continue. - 請感應或接觸您的 YubiKey 以繼續。 - Enter password to encrypt database (optional): 輸入密碼以加密資料庫(選用): @@ -8709,6 +7637,18 @@ Kernel: %3 %4 file empty 檔案為空 + + malformed string + 格式不正確的字串 + + + missing closing quote + 缺少右引號 + + + %1: (row, col) %2,%3 + %1: (列, 行) %2,%3 + AES 256-bit AES 256-bit @@ -8887,6 +7827,14 @@ Kernel: %3 %4 read password of the database from stdin 從 stdin 讀取資料庫密碼 + + allow app screen recordering and screenshots + 允許應用進行螢幕錄製與擷圖 + + + Locked databases. + 已鎖定的資料庫。 + Database failed to lock. 資料庫鎖定失敗。 @@ -8895,10 +7843,6 @@ Kernel: %3 %4 Another instance of KeePassXC is already running. 其他 KeePassXC 程式正在運行中。 - - KeePassXC is not running. No open database to lock - KeePassXC 並未執行。沒有已開啟的資料庫要鎖定 - Fatal error while testing the cryptographic functions. 測試加密函數時發生重大錯誤。 @@ -8942,300 +7886,70 @@ Kernel: %3 %4 無效的 KDF - Access to all entries is denied - 存取所有項目被拒絕 + Please present or touch your YubiKey to continue. + 請感應或接觸您的 YubiKey 以繼續。 - allow screenshots and app recording (Windows/macOS) - 允許螢幕截圖與錄製 (Windows/macOS) + Show all the attributes of the entry. + 顯示項目的所有屬性。 + + + Edit a database. + 編輯資料庫。 + + + Could not change the database key. + 無法更改資料庫金鑰。 + + + Database was not modified. + 資料庫未被修改。 + + + Successfully edited the database. + 已成功編輯資料庫。 + + + Loading the new key file failed: %1 + 載入新金鑰檔案失敗:%1 + + + Unset the password for the database. + 刪除資料庫的密碼。 + + + Unset the key file for the database. + 刪除資料庫的金鑰檔案。 + + + Cannot use %1 and %2 at the same time. + 無法同時使用 %1 和 %2。 + + + Cannot remove all the keys from a database. + 無法從資料庫移除所有金鑰。 + + + Cannot remove password: The database does not have a password. + 無法刪除密碼:資料庫不含密碼。 + + + Cannot remove file key: The database does not have a file key. + 無法刪除檔案金鑰:資料庫不含檔案金鑰。 + + + Found unexpected Key type %1 + 發現未預期的金鑰類型 %1 Set the key file for the database. -This option is deprecated, use --set-key-file instead. +This options is deprecated, use --set-key-file instead. 設定資料庫的金鑰檔案。 -此選項已棄用,請用 --set-key-file 代替。 +此選項已經棄用,請用 --set-key-file 代替。 - Databases have been locked. - 資料庫已被鎖定。 - - - Attestation not supported - 證明不受支援 - - - Credential is excluded - 憑證被排除 - - - Passkeys request canceled - 通行密鑰請求被取消 - - - Invalid user verification - 無效的使用者驗證 - - - Empty public key - 空的公開金鑰 - - - Invalid URL provided - 提供的 URL 無效 - - - Passkeys - 通行密鑰 - - - AES initialization failed - AES 初始化失敗 - - - AES encrypt failed - AES 加密失敗 - - - Failed to store in Linux Keyring - 儲存至 Linux 鑰匙圈失敗 - - - Polkit returned an error: %1 - Polkit 回傳錯誤:%1 - - - Could not locate key in keyring - 無法定位鑰匙圈內的金鑰 - - - Could not read key in keyring - 無法讀取鑰匙圈內的金鑰 - - - AES decrypt failed - AES 解密失敗 - - - No Polkit authentication agent was available - 沒有可用的 Polkit 認證代理 - - - Polkit authorization failed - Polkit 認證失敗 - - - No Quick Unlock provider is available - 沒有可用的快速解鎖提供者 - - - Failed to init KeePassXC crypto. - 初始化 KeePassXC 加密失敗。 - - - Failed to encrypt key data. - 加密金鑰資料失敗。 - - - Failed to get Windows Hello credential. - 獲取 Windows Hello 憑證失敗。 - - - Failed to decrypt key data. - 解密金鑰資料失敗。 - - - Origin is empty or not allowed - Origin 為空或不被允許 - - - Effective domain is not a valid domain - Effective Domain 不是有效的域名 - - - Origin and RP ID do not match - Origin 與 RP ID 不匹配 - - - No supported algorithms were provided - 未提供受支持的演算法 - - - Wait for timer to expire - 等待計時器過期 - - - Challenge is shorter than required minimum length - 挑戰短於所需最小長度 - - - user.id does not match the required length - user.id 不匹配所需長度 - - - Favorite - Tag for favorite entries - 喜愛 - - - File does not exist. - 檔案不存在。 - - - Cannot open file: %1 - 無法開啟檔案:%1 - - - Cannot parse file: %1 at position %2 - 無法剖析檔案:%1 於位置 %2 - - - Failed to decrypt json file: %1 - 解密 json 檔案失敗:%1 - - - Invalid encKeyValidation field - 無效 encKeyValidation 欄 - - - Invalid cipher list within encKeyValidation field - 無效加密法列表出現於 encKeyValidation 欄 - - - Wrong password - 錯誤密碼 - - - Invalid encrypted data field - 無效的加密資料欄 - - - Invalid cipher list within encrypted data field - 無效加密法列表出現於加密資料欄 - - - Cannot initialize cipher - 無法初始化加密 - - - Cannot decrypt data - 無法解密資料 - - - Bitwarden Import - Bitwarden 匯入 - - - Archived - Tag for archived entries - 封存 - - - Invalid 1PUX file format: Not a valid ZIP file. - 無效 1PUX 檔案格式:不是有效 ZIP 檔案。 - - - Invalid 1PUX file format: Missing export.data - 無效 1PUX 檔案格式:遺失 export.data - - - 1Password Import - 1Password 匯入 - - - Enter Shortcut - 輸入快捷鍵 - - - Action - 動作 - - - Shortcuts - 快捷鍵 - - - Unknown passkeys error - 未知的通行密鑰錯誤 - - - Invalid KDF iterations, cannot decrypt json file - 無效的 KDF 迭代數,無法解密 JSON 檔案 - - - Unsupported format, ensure your Bitwarden export is password-protected - 不支援的格式,確保您的 Bitwarden 匯出檔爲密碼保護 - - - Only PBKDF and Argon2 are supported, cannot decrypt json file - 只支援 PBKDF 與 Argon2,無法解密 JSON 檔案 - - - Reset Shortcuts - 重置快捷鍵 - - - Double click an action to change its shortcut - 雙擊一個動作以修改其快捷鍵 - - - Filter... - 過濾... - - - Shortcut Conflict - 快捷鍵衝突 - - - Shortcut %1 conflicts with '%2'. Overwrite shortcut? - 快捷鍵 %1 與 '%2' 衝突。是否覆蓋快捷鍵? - - - Cannot generate valid passphrases because the wordlist is too short - 因為詞彙表過短,無法生成有效的密碼短語 - - - Encrypted files are not supported. - 尚未支援加密檔案。 - - - Proton Pass Import - Proton Pass 匯入 - - - Delete plugin data? - 刪除插件資料? - - - Delete plugin data from Entry(s)? - 是否從項目刪除插件資料? - - - Passkey - 通行密鑰 - - - Format to use when exporting. Available choices are 'xml', 'csv' or 'html'. Defaults to 'xml'. - 匯出所用的格式。可用選項為 'xml', 'csv' 或 'html'。預設為 'xml'。 - - - start minimized to the system tray - 啟動後最小化至系統列 - - - malformed string, possible unescaped delimiter - 不合規的字串,可能有未跳脫的分隔符 - - - missing closing delimiter - 缺少閉合分隔符 - - - %1, row: %2, column: %3 - %1,列:%2,欄:%3 - - - Tags - 標籤 + KeePassXC is not running. No open database to lock + KeePassXC 並未執行。沒有已開啟的資料庫要鎖定 @@ -9272,39 +7986,20 @@ This option is deprecated, use --set-key-file instead. 內部 zlib 錯誤: - - RemoteHandler - - Command `%1` did not finish in time. Process was killed. - 指令 `%1` 未能及時完成。程序已被強制結束。 - - - Failed to upload merged database. Command `%1` did not finish in time. Process was killed. - 上傳已合併的資料庫失敗。指令 `%1` 未能及時完成。程序已被強制結束。 - - - Invalid download parameters provided. - 提供的下載參數無效。 - - - Command `%1` failed to download database. - 指令 `%1` 下載資料庫失敗。 - - - Invalid database pointer or upload parameters provided. - 提供的資料庫指針或上傳參數無效。 - - - Command `%1` exited with status code: %2 - 指令 `%1` 以此狀態碼退出:%2 - - - Failed to upload merged database. Command `%1` exited with status code: %2 - 上傳已合併的資料庫失敗。指令 `%1` 以此狀態碼退出:%2 - - ReportsWidgetBrowserStatistics + + Exclude expired entries from the report + 從報告排除已過期的項目 + + + Show only entries which have URL set + 只顯示有設置 URL 的項目 + + + Show only entries which have browser settings in custom data + 只顯示自定義資料中有瀏覽器設置的項目 + Double-click entries to edit. 雙擊項目以編輯。 @@ -9369,53 +8064,44 @@ This option is deprecated, use --set-key-file instead. Exclude from reports 從報告排除 - - Expire Entry(s)… - 過期項目… - - - Only show entries that have a URL - 只顯示含有 URL 的項目 - - - Only show entries that have been explicitly allowed or denied - 只顯示明確允許或拒絕的項目 - - - Show expired entries - 顯示過期項目 - - - (Expired) - (過期) - - - Delete plugin data from Entry(s)… - 從項目刪除插件資料… - ReportsWidgetHealthcheck - Show expired entries - 顯示過期項目 + Exclude expired entries from the report + 從報告排除已過期的項目 - (Expired) - (過期) + Also show entries that have been excluded from reports + 也顯示已從報告排除的項目 Hover over reason to show additional details. Double-click entries to edit. 將游標懸浮於原因以顯示額外詳情。雙擊項目可編輯。 + + Bad + Password quality + 糟糕 + Bad — password must be changed 糟糕 — 密碼必須更改 + + Poor + Password quality + 極弱 + Poor — password should be changed 極弱 — 密碼應該更改 + + Weak + Password quality + 較弱 + Weak — consider changing the password 較弱 — 可考慮更改密碼 @@ -9464,14 +8150,6 @@ This option is deprecated, use --set-key-file instead. Exclude from reports 從報告排除 - - Expire Entry(s)… - 過期項目… - - - Show entries that have been excluded from reports - 顯示已從報告中排除的項目 - ReportsWidgetHibp @@ -9567,77 +8245,6 @@ This option is deprecated, use --set-key-file instead. Exclude from reports 從報告排除 - - Expire Entry(s)… - 過期項目… - - - - ReportsWidgetPasskeys - - Export - 匯出 - - - Import - 匯入 - - - List of entry URLs - 項目 URL 清單 - - - Title - 標題 - - - Path - 路徑 - - - Username - 使用者名稱 - - - URLs - URL - - - Edit Entry… - 編輯項目… - - - Delete Entry(s)… - 刪除項目… - - - Relying Party - 依賴方 - - - Show expired entries - 顯示過期項目 - - - (Expired) - (過期) - - - Export Confirmation - 匯出確認 - - - The passkey file will be vulnerable to theft and unauthorized use, if left unsecured. Are you sure you want to continue? - 通行密鑰檔案若不加上保護,將無法防止盜取或越權使用。您確定要繼續進行? - - - Please wait, list of entries with passkeys is being updated… - 請稍候,正在更新擁有通行密鑰的項目清單… - - - No entries with passkeys. - 沒有附帶通行密鑰的項目。 - ReportsWidgetStatistics @@ -9703,7 +8310,7 @@ This option is deprecated, use --set-key-file instead. Number of expired entries - 過期項目數 + 已過期項目數 The database contains entries that have expired. @@ -9812,14 +8419,6 @@ This option is deprecated, use --set-key-file instead. No agent running, cannot list identities. 代理尚未執行,無法列舉身份。 - - Failed to remove all SSH identities from agent. - 從代理移除所有 SSH 身份失敗。 - - - All SSH identities removed from agent. - 所有 SSH 身份已從代理移除。 - SearchHelpWidget @@ -9886,10 +8485,6 @@ This option is deprecated, use --set-key-file instead. Search Help 搜尋幫助 - - Save Search - 儲存搜索 - Search (%1)… Search placeholder text, %1 is the keyboard shortcut @@ -9903,6 +8498,10 @@ This option is deprecated, use --set-key-file instead. Limit search to selected group 限制只搜尋選定的群組 + + Save Search + 儲存搜索 + SettingsClientModel @@ -9964,10 +8563,34 @@ This option is deprecated, use --set-key-file instead. Confirm when passwords are retrieved by clients 客戶端收到密碼時確認 + + <html><head/><body><p><span style=" + font-family:'-apple-system','BlinkMacSystemFont','Segoe UI','Helvetica','Arial','sans-serif','Apple Color + Emoji','Segoe UI Emoji'; font-size:14px; color:#24292e; background-color:#ffffff;">This setting does + not override disabling recycle bin prompts</span></p></body></html> + + <html><head/><body><p><span style=" + font-family:'-apple-system','BlinkMacSystemFont','Segoe UI','Helvetica','Arial','sans-serif','Apple Color + Emoji','Segoe UI Emoji'; font-size:14px; color:#24292e; background-color:#ffffff;">此設定不會 + 覆蓋取消回收桶提示</span></p></body></html> + + Confirm when clients request entry deletion 客戶端要求刪除項目時確認 + + <html><head/><body><p>This improves compatibility with certain applications + which search for password without unlocking the database first.</p><p>But enabling this may also + crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a + different value set in applications.)</p></body></html> + + <html><head/><body><p>針對在搜尋密碼前不先解鎖資料庫的特定應用, + 此選項將提高其相容性。</p><p>但啟用後, + 若資料庫無法在一定時間內解鎖(通常為 25 秒,但此值 + 可能因應用程式的設定而有異),有可能導致客戶端崩潰。</p></body></html> + + Prompt to unlock database before searching 搜尋前提示解鎖資料庫 @@ -9992,14 +8615,6 @@ This option is deprecated, use --set-key-file instead. Save current changes to activate the plugin and enable editing of this section. 儲存目前變更,以啟用插件並編輯此區域。 - - <html><head/><body><p>This setting does not override disabling recycle bin prompts </p></body></html> - <html><head/><body><p>此設定不會覆蓋禁用回收桶提示</p></body></html> - - - <html><head/><body><p>This improves compatibility with certain applications which search for password without unlocking the database first.</p><p>But enabling this may also crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a different value set in applications.) </p></body></html> - <html><head/><body><p>針對在搜索密碼前不會解鎖資料庫的特定應用,此選項將提高其相容性。</p><p>但啟用後,如果資料庫無法在一定時間內解鎖(通常為 25 秒,但應用可能會設定不同的值),有可能導致客戶端崩潰。</p></body></html> - SettingsWidgetKeeShare @@ -10107,14 +8722,6 @@ This option is deprecated, use --set-key-file instead. TagModel - - Clear Search - 清除搜索 - - - All Entries - 所有項目 - Expired 已過期 @@ -10123,6 +8730,14 @@ This option is deprecated, use --set-key-file instead. Weak Passwords 弱密碼 + + All Entries + 所有項目 + + + Clear Search + 清除搜索 + TagView @@ -10267,7 +8882,7 @@ Example: JBSWY3DPEHPK3PXP UpdateCheckDialog Checking for updates - 更新檢查 + 正在檢查更新 Checking for updates… @@ -10300,6 +8915,26 @@ Example: JBSWY3DPEHPK3PXP Start storing your passwords securely in a KeePassXC database 從現在開始,將您的密碼安全地保存到 KeePassXC 資料庫 + + Create new database + 建立新資料庫 + + + Open existing database + 開啟現有資料庫 + + + Import from KeePass 1 + 從 KeePass 1 匯入 + + + Import from 1Password + 從 1Password 匯入 + + + Import from CSV + 從 CSV 匯入 + Recent databases 近期的資料庫 @@ -10312,18 +8947,6 @@ Example: JBSWY3DPEHPK3PXP Welcome to KeePassXC %1 歡迎來到 KeePassXC %1 - - Create Database - 建立資料庫 - - - Open Database - 開啟資料庫 - - - Import File - 匯入檔案 - WinUtils @@ -10340,19 +8963,50 @@ Example: JBSWY3DPEHPK3PXP 無法註冊全域快捷鍵 + + WindowsHello + + Failed to init KeePassXC crypto. + 初始化 KeePassXC 加密失敗。 + + + Failed to encrypt key data. + 加密金鑰資料失敗。 + + + Failed to get Windows Hello credential. + 獲取 Windows Hello 憑證失敗。 + + + Failed to decrypt key data. + 解密金鑰資料失敗。 + + YubiKey + + %1 No interface, slot %2 + %1 無介面,插槽 %2 + General: 一般: Could not find interface for hardware key with serial number %1. Please connect it to continue. - 找不到與序列號為 %1 的硬體金鑰對應的介面。請將它連接後繼續。 + 找不到與流水號為 %1 的硬體金鑰對應的介面。請將它連接後繼續。 YubiKeyEditWidget + + Refresh hardware tokens + 更新硬體令牌 + + + Refresh + 更新 + Hardware key slot selection 硬體金鑰槽位選擇 @@ -10385,6 +9039,10 @@ Example: JBSWY3DPEHPK3PXP Challenge-Response set, click to change or remove 挑戰應答已設定,點擊更改或移除 + + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + <p>若您擁有 <a href="https://www.yubico.com/">YubiKey</a> 或 <a href="https://onlykey.io">OnlyKey</a>,可以用它獲得額外保護。</p><p>需要將鑰匙其中一個槽位設置為 <a href="https://www.yubico.com/products/services-software/challenge-response/">HMAC-SHA1 挑戰應答</a>。</p> + Detecting hardware keys… 偵測硬體金鑰… @@ -10393,28 +9051,31 @@ Example: JBSWY3DPEHPK3PXP No hardware keys detected 未偵測到硬體金鑰 + + + YubiKeyInterface - Refresh hardware keys - 刷新硬體金鑰 - - - <p>If you own a <a href="https://www.yubico.com/">YubiKey</a> or <a href="https://onlykey.io">OnlyKey</a>, you can use it for additional security.</p><p>The key requires one of its slots to be programmed with <a href="https://keepassxc.org/docs/#faq-yubikey-howto">Challenge-Response</a>.</p> - <p>若您擁有 <a href="https://www.yubico.com/">YubiKey</a> 或 <a href="https://onlykey.io">OnlyKey</a>,可以用它獲得額外保護。</p><p>實體金鑰要求將其中一個槽位以 <a href="https://keepassxc.org/docs/#faq-yubikey-howto">挑戰應答</a>編程。</p> - - - Hardware keys found, but no slots are configured - 硬體金鑰已找到,但未配置任何槽位 + %1 Invalid slot specified - %2 + %1 無效的指定槽位 - %2 YubiKeyInterfacePCSC + + (PCSC) %1 [%2] Challenge-Response - Slot %3 + (PCSC) %1 [%2] 挑戰應答 - 插槽 %3 + The YubiKey PCSC interface has not been initialized. YubiKey PCSC 介面尚未初始化。 + + Hardware key is currently in use. + 硬體金鑰目前正在使用當中。 + Could not find or access hardware key with serial number %1. Please present it to continue. - 找不到或無法存取序列號為 %1 的硬體金鑰。請將它呈現後繼續。 + 找不到或無法存取流水號為 %1 的硬體金鑰。請將它呈現後繼續。 Hardware key is locked or timed out. Unlock or re-present it to continue. @@ -10428,21 +9089,6 @@ Example: JBSWY3DPEHPK3PXP Failed to complete a challenge-response, the PCSC error code was: %1 無法完成挑戰應答,PCSC 錯誤代碼為:%1 - - (NFC) %1 [%2] - Slot %3, %4 - YubiKey display fields - (NFC) %1 [%2] - 槽位 %3, %4 - - - Press - USB Challenge-Response Key interaction request - 按下 - - - Passive - USB Challenge-Response Key no interaction required - 被動 - YubiKeyInterfaceUSB @@ -10450,6 +9096,14 @@ Example: JBSWY3DPEHPK3PXP Unknown 未知 + + (USB) %1 [%2] Configured Slot - %3 + (USB) %1 [%2] 設定插槽 - %3 + + + (USB) %1 [%2] Challenge-Response - Slot %3 - %4 + (USB) %1 [%2] 挑戰應答 - 插槽 %3 - %4 + Press USB Challenge-Response Key interaction request @@ -10464,9 +9118,13 @@ Example: JBSWY3DPEHPK3PXP The YubiKey USB interface has not been initialized. YubiKey USB 介面尚未初始化。 + + Hardware key is currently in use. + 硬體金鑰目前正在使用當中。 + Could not find hardware key with serial number %1. Please plug it in to continue. - 找不到序列號為 %1 的硬體金鑰。請將它插入後繼續。 + 找不到流水號為 %1 的硬體金鑰。請將它插入後繼續。 Hardware key timed out waiting for user interaction. @@ -10480,15 +9138,5 @@ Example: JBSWY3DPEHPK3PXP Failed to complete a challenge-response, the specific error was: %1 無法完成挑戰應答,具體錯誤為:%1 - - %1 [%2] - Slot %3 - YubiKey NEO display fields - %1 [%2] - 槽位 %3 - - - %1 [%2] - Slot %3, %4 - YubiKey display fields - %1 [%2] - 槽位 %3, %4 - \ No newline at end of file diff --git a/share/windows/installer-banner.png b/share/windows/installer-banner.png index 615b663ec..efeaa2e8a 100644 Binary files a/share/windows/installer-banner.png and b/share/windows/installer-banner.png differ diff --git a/share/windows/installer-wizard.png b/share/windows/installer-wizard.png index abefed672..84cacea7a 100644 Binary files a/share/windows/installer-wizard.png and b/share/windows/installer-wizard.png differ diff --git a/share/windows/wix-template.xml b/share/windows/wix-template.xml index d90c6d51d..ae937ce70 100644 --- a/share/windows/wix-template.xml +++ b/share/windows/wix-template.xml @@ -73,7 +73,6 @@ Name="KeePassXC - User Guide" Target="[#CM_FP_share.docs.KeePassXC_UserGuide.html]" WorkingDirectory="INSTALL_ROOT" /> - @@ -93,9 +92,6 @@ - - - @@ -120,17 +116,12 @@ - - - - - - - + + + - diff --git a/share/wizard/background-pixmap.png b/share/wizard/background-pixmap.png index 90fa389f0..0651b38f5 100644 Binary files a/share/wizard/background-pixmap.png and b/share/wizard/background-pixmap.png differ diff --git a/share/wordlists/eff_large.wordlist b/share/wordlists/eff_large.wordlist index 1a5ae7862..f512e55d0 100644 --- a/share/wordlists/eff_large.wordlist +++ b/share/wordlists/eff_large.wordlist @@ -2006,6 +2006,7 @@ drizzly drone drool droop +drop-in dropforge dropkick droplet @@ -2524,6 +2525,7 @@ feed feel feisty feline +felt-tip feminine feminism feminist @@ -6635,6 +6637,7 @@ synthesis synthetic syrup system +t-shirt tabasco tabby tableful @@ -7742,6 +7745,7 @@ yiddish yield yin yippee +yo-yo yodel yoga yogurt diff --git a/snap/snapcraft.yaml b/snap/snapcraft.yaml index 598f07461..61e6e3051 100644 --- a/snap/snapcraft.yaml +++ b/snap/snapcraft.yaml @@ -10,7 +10,7 @@ apps: command: usr/bin/keepassxc common-id: org.keepassxc.KeePassXC.desktop extensions: [kde-neon] - plugs: [home, unity7, network, network-bind, removable-media, raw-usb, password-manager-service, browser-native-messaging] + plugs: [home, unity7, network, network-bind, removable-media, raw-usb, password-manager-service] autostart: org.keepassxc.KeePassXC.desktop cli: command: usr/bin/keepassxc-cli @@ -19,19 +19,8 @@ apps: proxy: command: usr/bin/keepassxc-proxy extensions: [kde-neon] - -plugs: - browser-native-messaging: - interface: personal-files - write: - - $HOME/.mozilla/native-messaging-hosts/org.keepassxc.keepassxc_browser.json - - $HOME/.config/chromium/NativeMessagingHosts/org.keepassxc.keepassxc_browser.json - - $HOME/.config/google-chrome/NativeMessagingHosts/org.keepassxc.keepassxc_browser.json - - $HOME/.config/microsoft-edge/NativeMessagingHosts/org.keepassxc.keepassxc_browser.json - - $HOME/.config/vivaldi/NativeMessagingHosts/org.keepassxc.keepassxc_browser.json - - $HOME/.config/BraveSoftware/Brave-Browser/NativeMessagingHosts/org.keepassxc.keepassxc_browser.json - - $HOME/.local/share/torbrowser/tbb/x86_64/tor-browser_en-US/Browser/TorBrowser/Data/Browser/.mozilla/native-messaging-hosts/org.keepassxc.keepassxc_browser.json - + plugs: [home] + slots: session-dbus-interface: interface: dbus @@ -64,8 +53,6 @@ parts: - libxi-dev - libxtst-dev - asciidoctor - - libfreetype-dev - - libkeyutils-dev stage-packages: - dbus - libbotan-2-19 @@ -75,11 +62,4 @@ parts: - libpcsclite1 - libminizip1 - libxtst6 - - libfreetype6 - xclip - - libkeyutils1 -lint: - ignore: - - library: - - lib/**/libhistory.so* - diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 9ddc46cf9..ddedca102 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (C) 2023 KeePassXC Team +# Copyright (C) 2018 KeePassXC Team # Copyright (C) 2010 Felix Geyer # # This program is free software: you can redistribute it and/or modify @@ -16,19 +16,21 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}) -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(Passkeys WITH_XC_BROWSER_PASSKEYS "Passkeys support for browser integration") -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(YubiKey WITH_XC_YUBIKEY "YubiKey HMAC-SHA1 challenge-response") -add_feature_info(UpdateCheck WITH_XC_UPDATECHECK "Automatic update checking") -if(UNIX AND NOT APPLE) - add_feature_info(FdoSecrets WITH_XC_FDOSECRETS "Implement freedesktop.org Secret Storage Spec server side API.") -endif() +find_library(ZXCVBN_LIBRARIES zxcvbn) +if(NOT ZXCVBN_LIBRARIES) + add_library(zxcvbn STATIC zxcvbn/zxcvbn.c) + # Disable error-level shadow issues + if(CC_HAS_Wshadow_compatible_local) + set_property(SOURCE zxcvbn/zxcvbn.c APPEND PROPERTY COMPILE_OPTIONS "-Wno-shadow-compatible-local") + endif() + if(CC_HAS_Wshadow_local) + set_property(SOURCE zxcvbn/zxcvbn.c APPEND PROPERTY COMPILE_OPTIONS "-Wno-shadow-local") + endif() + include_directories(${CMAKE_CURRENT_SOURCE_DIR}/zxcvbn) + set(ZXCVBN_LIBRARIES zxcvbn) +endif(NOT ZXCVBN_LIBRARIES) -set(core_SOURCES +set(keepassx_SOURCES core/Alloc.cpp core/AutoTypeAssociations.cpp core/Base32.cpp @@ -57,7 +59,6 @@ set(core_SOURCES core/TimeDelta.cpp core/TimeInfo.cpp core/Tools.cpp - core/Totp.cpp core/Translator.cpp cli/Utils.cpp cli/TextStream.cpp @@ -68,10 +69,8 @@ set(core_SOURCES crypto/kdf/Kdf.cpp crypto/kdf/AesKdf.cpp crypto/kdf/Argon2Kdf.cpp - format/BitwardenReader.cpp format/CsvExporter.cpp format/CsvParser.cpp - format/HtmlExporter.cpp format/KeePass1Reader.cpp format/KeePass2.cpp format/KeePass2RandomStream.cpp @@ -86,25 +85,10 @@ set(core_SOURCES format/Kdbx4Writer.cpp format/KdbxXmlWriter.cpp format/OpData01.cpp - format/OPUXReader.cpp format/OpVaultReader.cpp format/OpVaultReaderAttachments.cpp format/OpVaultReaderBandEntry.cpp format/OpVaultReaderSections.cpp - format/ProtonPassReader.cpp - keys/CompositeKey.cpp - keys/FileKey.cpp - keys/PasswordKey.cpp - keys/ChallengeResponseKey.cpp - streams/HashedBlockStream.cpp - streams/HashingStream.cpp - streams/HmacBlockStream.cpp - streams/LayeredStream.cpp - streams/qtiocompressor.cpp - streams/StoreDataStream.cpp - streams/SymmetricCipherStream.cpp) - -set(gui_SOURCES gui/styles/styles.qrc gui/styles/StateColorPalette.cpp gui/styles/base/phantomcolor.cpp @@ -112,7 +96,6 @@ set(gui_SOURCES gui/styles/dark/DarkStyle.cpp gui/styles/light/LightStyle.cpp gui/AboutDialog.cpp - gui/ActionCollection.cpp gui/Application.cpp gui/CategoryListWidget.cpp gui/Clipboard.cpp @@ -130,43 +113,35 @@ set(gui_SOURCES gui/FileDialog.cpp gui/Font.cpp gui/GuiTools.cpp - gui/HtmlGuiExporter.cpp + gui/HtmlExporter.cpp gui/IconModels.cpp + gui/KeePass1OpenWidget.cpp gui/KMessageWidget.cpp gui/MainWindow.cpp gui/MessageBox.cpp gui/MessageWidget.cpp + gui/OpVaultOpenWidget.cpp gui/PasswordWidget.cpp gui/PasswordGeneratorWidget.cpp gui/ApplicationSettingsWidget.cpp gui/Icons.cpp gui/SearchWidget.cpp - gui/SettingsWidget.cpp gui/SortFilterHideProxyModel.cpp gui/SquareSvgWidget.cpp - gui/ShortcutSettingsPage.cpp gui/TotpSetupDialog.cpp gui/TotpDialog.cpp gui/TotpExportSettingsDialog.cpp gui/DatabaseOpenDialog.cpp gui/URLEdit.cpp - gui/UrlTools.cpp gui/WelcomeWidget.cpp gui/csvImport/CsvImportWidget.cpp + gui/csvImport/CsvImportWizard.cpp gui/csvImport/CsvParserModel.cpp gui/entry/AutoTypeAssociationsModel.cpp gui/entry/EditEntryWidget.cpp gui/entry/EntryAttachmentsModel.cpp gui/entry/EntryAttachmentsWidget.cpp gui/entry/EntryAttributesModel.cpp - gui/entry/EditEntryAttachmentsDialog.cpp - gui/entry/PreviewEntryAttachmentsDialog.cpp - gui/entry/attachments/TextAttachmentsWidget.cpp - gui/entry/attachments/ImageAttachmentsWidget.cpp - gui/entry/attachments/ImageAttachmentsView.cpp - gui/entry/attachments/TextAttachmentsPreviewWidget.cpp - gui/entry/attachments/TextAttachmentsEditWidget.cpp - gui/entry/attachments/AttachmentWidget.cpp gui/entry/EntryHistoryModel.cpp gui/entry/EntryModel.cpp gui/entry/EntryView.cpp @@ -188,10 +163,6 @@ set(gui_SOURCES gui/dbsettings/DatabaseSettingsWidgetMetaDataSimple.cpp gui/dbsettings/DatabaseSettingsWidgetEncryption.cpp gui/dbsettings/DatabaseSettingsWidgetDatabaseKey.cpp - gui/remote/DatabaseSettingsWidgetRemote.cpp - gui/remote/RemoteHandler.cpp - gui/remote/RemoteProcess.cpp - gui/remote/RemoteSettings.cpp gui/reports/ReportsWidget.cpp gui/reports/ReportsDialog.cpp gui/reports/ReportsWidgetHealthcheck.cpp @@ -203,108 +174,84 @@ set(gui_SOURCES gui/osutils/OSUtilsBase.cpp gui/osutils/ScreenLockListener.cpp gui/osutils/ScreenLockListenerPrivate.cpp + gui/settings/SettingsWidget.cpp gui/widgets/ElidedLabel.cpp gui/widgets/KPToolBar.cpp gui/widgets/PopupHelpWidget.cpp - gui/widgets/ShortcutWidget.cpp - gui/wizard/ImportWizard.cpp - gui/wizard/ImportWizardPageReview.cpp - gui/wizard/ImportWizardPageSelect.cpp gui/wizard/NewDatabaseWizard.cpp gui/wizard/NewDatabaseWizardPage.cpp gui/wizard/NewDatabaseWizardPageMetaData.cpp gui/wizard/NewDatabaseWizardPageEncryption.cpp gui/wizard/NewDatabaseWizardPageDatabaseKey.cpp - quickunlock/QuickUnlockInterface.cpp - ../share/icons/icons.qrc - ../share/wizard/wizard.qrc) - + keys/CompositeKey.cpp + keys/FileKey.cpp + keys/PasswordKey.cpp + keys/ChallengeResponseKey.cpp + streams/HashedBlockStream.cpp + streams/HmacBlockStream.cpp + streams/LayeredStream.cpp + streams/qtiocompressor.cpp + streams/StoreDataStream.cpp + streams/SymmetricCipherStream.cpp + totp/totp.cpp) if(APPLE) - list(APPEND gui_SOURCES - gui/osutils/macutils/MacPasteboard.cpp + set(keepassx_SOURCES + ${keepassx_SOURCES} + core/MacPasteboard.cpp gui/osutils/macutils/MacUtils.cpp gui/osutils/macutils/ScreenLockListenerMac.cpp gui/osutils/macutils/AppKitImpl.mm - gui/osutils/macutils/AppKit.h - quickunlock/TouchID.mm) - - # TODO: Remove -Wno-error once deprecation warnings have been resolved. - set_source_files_properties(quickunlock/TouchID.mm PROPERTY COMPILE_FLAGS "-Wno-old-style-cast") + gui/osutils/macutils/AppKit.h) endif() - if(UNIX AND NOT APPLE) - list(APPEND gui_SOURCES + set(keepassx_SOURCES + ${keepassx_SOURCES} gui/osutils/nixutils/ScreenLockListenerDBus.cpp gui/osutils/nixutils/NixUtils.cpp) - if("${CMAKE_SYSTEM}" MATCHES "Linux") - list(APPEND core_SOURCES - quickunlock/Polkit.cpp - quickunlock/PolkitDbusTypes.cpp) - endif() if(WITH_XC_X11) - list(APPEND gui_SOURCES + list(APPEND keepassx_SOURCES gui/osutils/nixutils/X11Funcs.cpp) endif() - qt5_add_dbus_adaptor(gui_SOURCES + qt5_add_dbus_adaptor(keepassx_SOURCES gui/org.keepassxc.KeePassXC.MainWindow.xml gui/MainWindow.h MainWindow) - - set_source_files_properties( - quickunlock/dbus/org.freedesktop.PolicyKit1.Authority.xml - PROPERTIES - INCLUDE "quickunlock/PolkitDbusTypes.h" - ) - qt5_add_dbus_interface(core_SOURCES - quickunlock/dbus/org.freedesktop.PolicyKit1.Authority.xml - polkit_dbus - ) - - find_library(KEYUTILS_LIBRARIES NAMES keyutils) - if(NOT KEYUTILS_LIBRARIES) - message(FATAL_ERROR "Could not find libkeyutils") - endif() endif() - if(WIN32) - list(APPEND gui_SOURCES + set(keepassx_SOURCES + ${keepassx_SOURCES} gui/osutils/winutils/ScreenLockListenerWin.cpp gui/osutils/winutils/WinUtils.cpp) if (MSVC) - list(APPEND gui_SOURCES quickunlock/WindowsHello.cpp) + list(APPEND keepassx_SOURCES winhello/WindowsHello.cpp) endif() endif() -if(WITH_XC_YUBIKEY) - list(APPEND gui_SOURCES gui/osutils/DeviceListener.cpp) - if(APPLE) - list(APPEND gui_SOURCES gui/osutils/macutils/DeviceListenerMac.cpp) - elseif(UNIX) - list(APPEND gui_SOURCES gui/osutils/nixutils/DeviceListenerLibUsb.cpp) - elseif(WIN32) - list(APPEND gui_SOURCES gui/osutils/winutils/DeviceListenerWin.cpp) - endif() +set(keepassx_SOURCES ${keepassx_SOURCES} + ../share/icons/icons.qrc + ../share/wizard/wizard.qrc) + +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(SSHAgent WITH_XC_SSHAGENT "SSH agent integration compatible with KeeAgent") +add_feature_info(KeeShare WITH_XC_KEESHARE "Sharing integration with KeeShare") +add_feature_info(YubiKey WITH_XC_YUBIKEY "YubiKey HMAC-SHA1 challenge-response") +add_feature_info(UpdateCheck WITH_XC_UPDATECHECK "Automatic update checking") +if(UNIX AND NOT APPLE) + add_feature_info(FdoSecrets WITH_XC_FDOSECRETS "Implement freedesktop.org Secret Storage Spec server side API.") endif() add_subdirectory(browser) add_subdirectory(proxy) if(WITH_XC_BROWSER) - set(browser_LIB browser) - list(APPEND gui_SOURCES - gui/dbsettings/DatabaseSettingsWidgetBrowser.cpp - gui/entry/EntryURLModel.cpp - gui/reports/ReportsWidgetBrowserStatistics.cpp - gui/reports/ReportsPageBrowserStatistics.cpp) -endif() - -if(WITH_XC_BROWSER_PASSKEYS) - list(APPEND gui_SOURCES - gui/reports/ReportsWidgetPasskeys.cpp - gui/reports/ReportsPagePasskeys.cpp - gui/passkeys/PasskeyExporter.cpp - gui/passkeys/PasskeyExportDialog.cpp - gui/passkeys/PasskeyImporter.cpp - gui/passkeys/PasskeyImportDialog.cpp) + set(keepassxcbrowser_LIB keepassxcbrowser) + set(keepassx_SOURCES ${keepassx_SOURCES} gui/dbsettings/DatabaseSettingsWidgetBrowser.cpp) + set(keepassx_SOURCES ${keepassx_SOURCES} gui/entry/EntryURLModel.cpp) + set(keepassx_SOURCES ${keepassx_SOURCES} gui/reports/ReportsWidgetBrowserStatistics.cpp) + set(keepassx_SOURCES ${keepassx_SOURCES} gui/reports/ReportsPageBrowserStatistics.cpp) endif() add_subdirectory(autotype) @@ -330,114 +277,122 @@ endif() add_subdirectory(thirdparty) set(autotype_SOURCES + core/Tools.cpp autotype/AutoType.cpp autotype/AutoTypeAction.cpp autotype/AutoTypeMatchModel.cpp autotype/AutoTypeMatchView.cpp autotype/AutoTypeSelectDialog.cpp autotype/PickcharsDialog.cpp + autotype/ShortcutWidget.cpp autotype/WindowSelectComboBox.cpp) -add_library(autotype STATIC ${autotype_SOURCES}) -target_link_libraries(autotype Qt5::Core Qt5::Widgets) +if(WIN32) + set(keepassx_SOURCES_MAINEXE ${keepassx_SOURCES_MAINEXE} ${CMAKE_SOURCE_DIR}/share/windows/icon.rc) +endif() if(WITH_XC_YUBIKEY) - list(APPEND core_SOURCES + list(APPEND keepassx_SOURCES keys/drivers/YubiKey.h - keys/drivers/YubiKey.cpp - keys/drivers/YubiKeyInterface.cpp - keys/drivers/YubiKeyInterfaceUSB.cpp + keys/drivers/YubiKey.cpp + keys/drivers/YubiKeyInterface.cpp + keys/drivers/YubiKeyInterfaceUSB.cpp keys/drivers/YubiKeyInterfacePCSC.cpp) else() - list(APPEND core_SOURCES + list(APPEND keepassx_SOURCES keys/drivers/YubiKey.h keys/drivers/YubiKeyStub.cpp) endif() if(WITH_XC_NETWORKING) - list(APPEND gui_SOURCES - networking/HibpDownloader.cpp - networking/NetworkManager.cpp - networking/UpdateChecker.cpp + list(APPEND keepassx_SOURCES + core/HibpDownloader.cpp + core/NetworkManager.cpp gui/UpdateCheckDialog.cpp gui/IconDownloader.cpp - gui/IconDownloaderDialog.cpp) + gui/IconDownloaderDialog.cpp + updatecheck/UpdateChecker.cpp) +endif() + +if(APPLE) + list(APPEND keepassx_SOURCES touchid/TouchID.mm) + # TODO: Remove -Wno-error once deprecation warnings have been resolved. + set_source_files_properties(touchid/TouchID.mm PROPERTY COMPILE_FLAGS "-Wno-old-style-cast") endif() configure_file(config-keepassx.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-keepassx.h) configure_file(git-info.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/git-info.h) -# Core Library Definition -add_library(keepassxc_core STATIC ${core_SOURCES}) -set_target_properties(keepassxc_core PROPERTIES COMPILE_DEFINITIONS KEEPASSX_BUILDING_CORE) -target_link_libraries(keepassxc_core +add_library(autotype STATIC ${autotype_SOURCES}) +target_link_libraries(autotype Qt5::Core Qt5::Widgets) + +add_library(keepassx_core STATIC ${keepassx_SOURCES}) + +set_target_properties(keepassx_core PROPERTIES COMPILE_DEFINITIONS KEEPASSX_BUILDING_CORE) +target_link_libraries(keepassx_core + autotype + ${keepassxcbrowser_LIB} ${qrcode_LIB} + ${fdosecrets_LIB} Qt5::Core Qt5::Concurrent + Qt5::Network + Qt5::Widgets ${BOTAN_LIBRARIES} ${PCSC_LIBRARIES} ${ZXCVBN_LIBRARIES} ${ZLIB_LIBRARIES} - ${MINIZIP_LIBRARIES} ${ARGON2_LIBRARIES} - ${KEYUTILS_LIBRARIES} - ${thirdparty_LIBRARIES}) + ${thirdparty_LIBRARIES} + ) -# GUI Library Definition -add_library(keepassxc_gui STATIC ${gui_SOURCES}) -set_target_properties(keepassxc_gui PROPERTIES COMPILE_DEFINITIONS KEEPASSX_BUILDING_CORE) -target_link_libraries(keepassxc_gui - keepassxc_core - Qt5::Network - Qt5::Widgets - autotype - ${browser_LIB} - ${fdosecrets_LIB} - ${keeshare_LIB} - ${sshagent_LIB}) +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(keepassxc_gui "-framework Foundation -framework AppKit -framework Carbon -framework Security -framework LocalAuthentication -framework ScreenCaptureKit") + target_link_libraries(keepassx_core "-framework Foundation -framework AppKit -framework Carbon -framework Security -framework LocalAuthentication") if(Qt5MacExtras_FOUND) - target_link_libraries(keepassxc_gui Qt5::MacExtras) + target_link_libraries(keepassx_core Qt5::MacExtras) endif() endif() if(HAIKU) - target_link_libraries(keepassxc_gui network) + target_link_libraries(keepassx_core network) endif() if(UNIX AND NOT APPLE) - target_link_libraries(keepassxc_core Qt5::DBus ${LIBUSB_LIBRARIES}) + target_link_libraries(keepassx_core Qt5::DBus) if(WITH_XC_X11) - target_link_libraries(keepassxc_gui Qt5::X11Extras X11) + target_link_libraries(keepassx_core Qt5::X11Extras X11) endif() include_directories(${Qt5Gui_PRIVATE_INCLUDE_DIRS}) endif() if(WIN32) - target_link_libraries(keepassxc_gui Wtsapi32.lib Ws2_32.lib) + target_link_libraries(keepassx_core Wtsapi32.lib Ws2_32.lib) if (MSVC) - target_link_libraries(keepassxc_gui WindowsApp.lib) + target_link_libraries(keepassx_core WindowsApp.lib) endif() endif() -# Main Executable Definition if(WIN32) include(GenerateProductVersion) generate_product_version( - WIN32_ResourceFiles + WIN32_ProductVersionFiles NAME "KeePassXC" COMPANY_NAME "KeePassXC Team" VERSION_MAJOR ${KEEPASSXC_VERSION_MAJOR} VERSION_MINOR ${KEEPASSXC_VERSION_MINOR} VERSION_PATCH ${KEEPASSXC_VERSION_PATCH} ) - list(APPEND WIN32_ResourceFiles "${CMAKE_SOURCE_DIR}/share/windows/icon.rc") endif() -add_executable(${PROGNAME} WIN32 main.cpp ${WIN32_ResourceFiles}) -target_link_libraries(${PROGNAME} keepassxc_gui) +add_executable(${PROGNAME} WIN32 ${keepassx_SOURCES_MAINEXE} ${WIN32_ProductVersionFiles}) +target_link_libraries(${PROGNAME} keepassx_core) + set_target_properties(${PROGNAME} PROPERTIES ENABLE_EXPORTS ON) -# macOS App Bundle if(APPLE AND WITH_APP_BUNDLE) install(FILES ${CMAKE_SOURCE_DIR}/share/macosx/embedded.provisionprofile DESTINATION ${BUNDLE_INSTALL_DIR}) configure_file(${CMAKE_SOURCE_DIR}/share/macosx/Info.plist.cmake ${CMAKE_CURRENT_BINARY_DIR}/Info.plist) @@ -466,7 +421,6 @@ install(TARGETS ${PROGNAME} BUNDLE DESTINATION . COMPONENT Runtime RUNTIME DESTINATION ${BIN_INSTALL_DIR} COMPONENT Runtime) -# Windows Installer Definition if(WIN32) if(${CMAKE_SIZEOF_VOID_P} EQUAL "8") set(OUTPUT_FILE_POSTFIX "Win64") @@ -487,7 +441,6 @@ if(WIN32) string(REGEX REPLACE "-.*$" "" KEEPASSXC_VERSION_CLEAN ${KEEPASSXC_VERSION}) set(CPACK_GENERATOR "ZIP;WIX") - set(CPACK_COMPONENTS_ALL "") set(CPACK_STRIP_FILES OFF) set(CPACK_PACKAGE_FILE_NAME "${PROGNAME}-${KEEPASSXC_VERSION}-${OUTPUT_FILE_POSTFIX}") set(CPACK_PACKAGE_INSTALL_DIRECTORY ${PROGNAME}) @@ -547,7 +500,7 @@ if(WIN32) # install OpenSSL library if(WITH_XC_NETWORKING) find_file(OPENSSL_DLL - NAMES libssl-3.dll libssl-3-x64.dll + NAMES libssl-1_1.dll libssl-1_1-x64.dll HINTS "${OPENSSL_ROOT_DIR}/bin" ) if (NOT OPENSSL_DLL) @@ -555,7 +508,7 @@ if(WIN32) endif() find_file(CRYPTO_DLL - NAMES libcrypto-3.dll libcrypto-3-x64.dll + NAMES libcrypto-1_1.dll libcrypto-1_1-x64.dll HINTS "${OPENSSL_ROOT_DIR}/bin" ) if (NOT CRYPTO_DLL) @@ -578,5 +531,5 @@ if(WIN32) endif() # The install commands in this subdirectory will be executed after all the install commands in the -# current scope are ran. It is required for correct functioning of macdeployqt. +# current scope are ran. It is required for correct functtioning of macdeployqt. add_subdirectory(post_install) diff --git a/src/autotype/AutoType.cpp b/src/autotype/AutoType.cpp index c42333fba..750053955 100644 --- a/src/autotype/AutoType.cpp +++ b/src/autotype/AutoType.cpp @@ -21,7 +21,6 @@ #include #include #include -#include #include #include "config-keepassx.h" @@ -29,7 +28,6 @@ #include "autotype/AutoTypePlatformPlugin.h" #include "autotype/AutoTypeSelectDialog.h" #include "autotype/PickcharsDialog.h" -#include "core/Global.h" #include "core/Resources.h" #include "core/Tools.h" #include "gui/MainWindow.h" @@ -153,7 +151,6 @@ AutoType::AutoType(QObject* parent, bool test) #endif } - connect(this, SIGNAL(autotypeFinished()), SLOT(resetAutoTypeState())); connect(qApp, SIGNAL(aboutToQuit()), SLOT(unloadPlugin())); } @@ -228,7 +225,7 @@ void AutoType::createTestInstance() QStringList AutoType::windowTitles() { if (!m_plugin) { - return {}; + return QStringList(); } return m_plugin->windowTitles(); @@ -273,7 +270,7 @@ void AutoType::executeAutoTypeActions(const Entry* entry, MessageBox::critical(getMainWindow(), tr("Auto-Type Error"), errorMsg); } qWarning() << errorMsg; - emit autotypeFinished(); + emit autotypeRejected(); return; } @@ -320,13 +317,13 @@ void AutoType::executeAutoTypeActions(const Entry* entry, } for (const auto& action : asConst(actions)) { - // Cancel Auto-Type if the active window changed if (m_plugin->activeWindow() != window) { qWarning("Active window changed, interrupting auto-type."); - break; + emit autotypeRejected(); + m_inAutoType.unlock(); + return; } - bool failed = false; constexpr int max_retries = 5; for (int i = 1; i <= max_retries; i++) { auto result = action->exec(m_executor); @@ -341,26 +338,25 @@ void AutoType::executeAutoTypeActions(const Entry* entry, if (getMainWindow()) { MessageBox::critical(getMainWindow(), tr("Auto-Type Error"), result.errorString()); } - failed = true; - break; + emit autotypeRejected(); + m_inAutoType.unlock(); + return; } Tools::wait(delay); } - - // Last action failed to complete, cancel the rest of the sequence - if (failed) { - break; - } } + m_windowForGlobal = 0; + m_windowTitleForGlobal.clear(); + + emit autotypePerformed(); m_inAutoType.unlock(); - emit autotypeFinished(); } /** * Single Autotype entry-point function - * Look up the Auto-Type sequence for the given entry then perform Auto-Type in the active window + * Look up the Auto-Type sequence for the given entry then perfom Auto-Type in the active window */ void AutoType::performAutoType(const Entry* entry) { @@ -376,7 +372,7 @@ void AutoType::performAutoType(const Entry* entry) /** * Extra Autotype entry-point function - * Perform Auto-Type of the directly specified sequence in the active window + * Perfom Auto-Type of the directly specified sequence in the active window */ void AutoType::performAutoTypeWithSequence(const Entry* entry, const QString& sequence) { @@ -390,7 +386,7 @@ void AutoType::performAutoTypeWithSequence(const Entry* entry, const QString& se void AutoType::startGlobalAutoType(const QString& search) { // Never Auto-Type into KeePassXC itself - if (getMainWindow() && (qApp->activeWindow() || qApp->activeModalWidget())) { + if (qApp->focusWindow()) { return; } @@ -434,33 +430,38 @@ void AutoType::startGlobalAutoType(const QString& search) */ void AutoType::performGlobalAutoType(const QList>& dbList, const QString& search) { - if (!m_plugin || !m_inGlobalAutoTypeDialog.tryLock()) { + if (!m_plugin) { + return; + } + + if (!m_inGlobalAutoTypeDialog.tryLock()) { + return; + } + + if (m_windowTitleForGlobal.isEmpty()) { + m_inGlobalAutoTypeDialog.unlock(); return; } QList matchList; - // Generate entry/sequence match list if there is a valid window title - if (!m_windowTitleForGlobal.isEmpty()) { - bool hideExpired = config()->get(Config::AutoTypeHideExpiredEntry).toBool(); - for (const auto& db : dbList) { - const QList dbEntries = db->rootGroup()->entriesRecursive(); - for (auto entry : dbEntries) { - auto group = entry->group(); - if (!group || !group->resolveAutoTypeEnabled() || !entry->autoTypeEnabled()) { - continue; - } + bool hideExpired = config()->get(Config::AutoTypeHideExpiredEntry).toBool(); - if (hideExpired && entry->isExpired()) { - continue; - } - const QSet sequences = Tools::asSet(entry->autoTypeSequences(m_windowTitleForGlobal)); - for (const auto& sequence : sequences) { - matchList << AutoTypeMatch(entry, sequence); - } + for (const auto& db : dbList) { + const QList dbEntries = db->rootGroup()->entriesRecursive(); + for (auto entry : dbEntries) { + auto group = entry->group(); + if (!group || !group->resolveAutoTypeEnabled() || !entry->autoTypeEnabled()) { + continue; + } + + if (hideExpired && entry->isExpired()) { + continue; + } + auto sequences = entry->autoTypeSequences(m_windowTitleForGlobal).toSet(); + for (const auto& sequence : sequences) { + matchList << AutoTypeMatch(entry, sequence); } } - } else { - qWarning() << "Auto-Type: Window title was empty from the operating system"; } // Show the selection dialog if we always ask, have multiple matches, or no matches @@ -488,10 +489,12 @@ void AutoType::performGlobalAutoType(const QList>& dbLi m_windowForGlobal, virtualMode ? AutoTypeExecutor::Mode::VIRTUAL : AutoTypeExecutor::Mode::NORMAL); + resetAutoTypeState(); }); connect(selectDialog, &QDialog::rejected, this, [this] { restoreWindowState(); - emit autotypeFinished(); + resetAutoTypeState(); + emit autotypeRejected(); }); #ifdef Q_OS_MACOS @@ -504,9 +507,11 @@ void AutoType::performGlobalAutoType(const QList>& dbLi } else if (!matchList.isEmpty()) { // Only one match and not asking, do it! executeAutoTypeActions(matchList.first().first, matchList.first().second, m_windowForGlobal); + resetAutoTypeState(); } else { // We should never get here - emit autotypeFinished(); + resetAutoTypeState(); + emit autotypeRejected(); } } @@ -637,16 +642,10 @@ AutoType::parseSequence(const QString& entrySequence, const Entry* entry, QStrin // Platform-specific field clearing actions << QSharedPointer::create(); } else if (placeholder == "totp") { - if (entry->hasValidTotp()) { - // Entry totp (requires special handling) - QString totp = entry->totp(); - for (const auto& ch : totp) { - actions << QSharedPointer::create(ch); - } - } else if (entry->hasTotp()) { - // Entry has TOTP configured but invalid settings - error = tr("Entry has invalid TOTP settings"); - return {}; + // Entry totp (requires special handling) + QString totp = entry->totp(); + for (const auto& ch : totp) { + actions << QSharedPointer::create(ch); } } else if (placeholder.startsWith("pickchars")) { // Reset to the original capture to preserve case @@ -686,23 +685,74 @@ AutoType::parseSequence(const QString& entrySequence, const Entry* entry, QStrin } else if (placeholder.startsWith("t-conv:")) { // Reset to the original capture to preserve case placeholder = match.captured(3); - auto resolved = entry->resolveConversionPlaceholder(placeholder, &error); - if (!error.isEmpty()) { + placeholder.replace("t-conv:", "", Qt::CaseInsensitive); + if (!placeholder.isEmpty()) { + auto sep = placeholder[0]; + auto parts = placeholder.split(sep); + if (parts.size() >= 4) { + auto resolved = entry->resolveMultiplePlaceholders(parts[1]); + auto type = parts[2].toLower(); + + if (type == "base64") { + resolved = resolved.toUtf8().toBase64(); + } else if (type == "hex") { + resolved = resolved.toUtf8().toHex(); + } else if (type == "uri") { + resolved = QUrl::toPercentEncoding(resolved.toUtf8()); + } else if (type == "uri-dec") { + resolved = QUrl::fromPercentEncoding(resolved.toUtf8()); + } else if (type.startsWith("u")) { + resolved = resolved.toUpper(); + } else if (type.startsWith("l")) { + resolved = resolved.toLower(); + } else { + error = tr("Invalid conversion type: %1").arg(type); + return {}; + } + for (const QChar& ch : resolved) { + actions << QSharedPointer::create(ch); + } + } else { + error = tr("Invalid conversion syntax: %1").arg(fullPlaceholder); + return {}; + } + } else { + error = tr("Invalid conversion syntax: %1").arg(fullPlaceholder); return {}; } - for (const QChar& ch : resolved) { - actions << QSharedPointer::create(ch); - } } else if (placeholder.startsWith("t-replace-rx:")) { // Reset to the original capture to preserve case placeholder = match.captured(3); - auto resolved = entry->resolveRegexPlaceholder(placeholder, &error); - if (!error.isEmpty()) { + placeholder.replace("t-replace-rx:", "", Qt::CaseInsensitive); + if (!placeholder.isEmpty()) { + auto sep = placeholder[0]; + auto parts = placeholder.split(sep); + if (parts.size() >= 5) { + auto resolvedText = entry->resolveMultiplePlaceholders(parts[1]); + auto resolvedSearch = entry->resolveMultiplePlaceholders(parts[2]); + auto resolvedReplace = entry->resolveMultiplePlaceholders(parts[3]); + // Replace $ with \\ to support Qt substitutions + resolvedReplace.replace(QRegularExpression(R"(\$(\d+))"), R"(\\1)"); + + auto searchRegex = QRegularExpression(resolvedSearch); + if (!searchRegex.isValid()) { + error = tr("Invalid regular expression syntax %1\n%2") + .arg(resolvedSearch, searchRegex.errorString()); + return {}; + } + + auto resolved = resolvedText.replace(searchRegex, resolvedReplace); + for (const QChar& ch : resolved) { + actions << QSharedPointer::create(ch); + } + } else { + error = tr("Invalid conversion syntax: %1").arg(fullPlaceholder); + return {}; + } + } else { + error = tr("Invalid conversion syntax: %1").arg(fullPlaceholder); return {}; } - for (const QChar& ch : resolved) { - actions << QSharedPointer::create(ch); - } } else if (placeholder.startsWith("mode=")) { auto mode = AutoTypeExecutor::Mode::NORMAL; if (placeholder.endsWith("virtual")) { diff --git a/src/autotype/AutoType.h b/src/autotype/AutoType.h index 4708a7093..5fc07adab 100644 --- a/src/autotype/AutoType.h +++ b/src/autotype/AutoType.h @@ -60,13 +60,13 @@ public slots: signals: void globalAutoTypeTriggered(const QString& search); - void autotypeFinished(); + void autotypePerformed(); + void autotypeRejected(); void autotypeRetypeTimeout(); private slots: void startGlobalAutoType(const QString& search); void unloadPlugin(); - void resetAutoTypeState(); private: enum WindowState @@ -84,6 +84,7 @@ private: WId window = 0, AutoTypeExecutor::Mode mode = AutoTypeExecutor::Mode::NORMAL); void restoreWindowState(); + void resetAutoTypeState(); static QList> parseSequence(const QString& entrySequence, const Entry* entry, QString& error, bool syntaxOnly = false); diff --git a/src/autotype/AutoTypeAction.h b/src/autotype/AutoTypeAction.h index f68917f8f..082d0aea7 100644 --- a/src/autotype/AutoTypeAction.h +++ b/src/autotype/AutoTypeAction.h @@ -38,17 +38,17 @@ public: static Result Ok() { - return {true, false, QString()}; + return Result(true, false, QString()); } static Result Retry(const QString& error) { - return {false, true, error}; + return Result(false, true, error); } static Result Failed(const QString& error) { - return {false, false, error}; + return Result(false, false, error); } bool isOk() const diff --git a/src/autotype/AutoTypePlatformPlugin.h b/src/autotype/AutoTypePlatformPlugin.h index 1e1e7b846..7154dcdd7 100644 --- a/src/autotype/AutoTypePlatformPlugin.h +++ b/src/autotype/AutoTypePlatformPlugin.h @@ -25,7 +25,9 @@ class AutoTypePlatformInterface { public: - virtual ~AutoTypePlatformInterface() = default; + virtual ~AutoTypePlatformInterface() + { + } virtual bool isAvailable() = 0; virtual QStringList windowTitles() = 0; virtual WId activeWindow() = 0; diff --git a/src/autotype/AutoTypeSelectDialog.cpp b/src/autotype/AutoTypeSelectDialog.cpp index d06eaa1c3..4e31b61d0 100644 --- a/src/autotype/AutoTypeSelectDialog.cpp +++ b/src/autotype/AutoTypeSelectDialog.cpp @@ -21,8 +21,12 @@ #include #include -#include #include +#if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0) +#include +#else +#include +#endif #include "core/Config.h" #include "core/Database.h" @@ -85,14 +89,12 @@ AutoTypeSelectDialog::AutoTypeSelectDialog(QWidget* parent) connect(m_ui->action, &QToolButton::clicked, this, &AutoTypeSelectDialog::activateCurrentMatch); connect(m_ui->cancelButton, SIGNAL(clicked()), SLOT(reject())); - - auto sortColumn = config()->get(Config::AutoTypeDialogSortColumn).toInt(); - auto sortOrder = config()->get(Config::AutoTypeDialogSortOrder).toInt(); - m_ui->view->sortByColumn(sortColumn, sortOrder == 0 ? Qt::AscendingOrder : Qt::DescendingOrder); } // Required for QScopedPointer -AutoTypeSelectDialog::~AutoTypeSelectDialog() = default; +AutoTypeSelectDialog::~AutoTypeSelectDialog() +{ +} void AutoTypeSelectDialog::setMatches(const QList& matches, const QList>& dbs, @@ -264,7 +266,7 @@ void AutoTypeSelectDialog::updateActionMenu(const AutoTypeMatch& match) bool hasUsername = !match.first->username().isEmpty(); bool hasPassword = !match.first->password().isEmpty(); - bool hasTotp = match.first->hasValidTotp(); + bool hasTotp = match.first->hasTotp(); for (auto action : m_actionMenu->actions()) { auto prop = action->property(MENU_FIELD_PROP_NAME); @@ -324,7 +326,7 @@ void AutoTypeSelectDialog::buildActionMenu() submitAutoTypeMatch(match); }); -#if defined(Q_OS_WIN) || defined(Q_OS_MAC) +#ifdef Q_OS_WIN auto typeVirtualAction = new QAction(icons()->icon("auto-type"), tr("Use Virtual Keyboard"), nullptr); m_actionMenu->insertAction(copyUsernameAction, typeVirtualAction); typeVirtualAction->setShortcut(Qt::CTRL + Qt::Key_4); @@ -334,7 +336,17 @@ void AutoTypeSelectDialog::buildActionMenu() }); #endif - copyUsernameAction->setShortcut(Qt::CTRL + Qt::SHIFT + Qt::Key_1); +#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 + typeUsernameAction->setShortcutVisibleInContextMenu(true); + typePasswordAction->setShortcutVisibleInContextMenu(true); + typeTotpAction->setShortcutVisibleInContextMenu(true); +#ifdef Q_OS_WIN + typeVirtualAction->setShortcutVisibleInContextMenu(true); +#endif +#endif + copyUsernameAction->setProperty(MENU_FIELD_PROP_NAME, MENU_FIELD::USERNAME); connect(copyUsernameAction, &QAction::triggered, this, [&] { auto entry = m_ui->view->currentMatch().first; @@ -344,7 +356,6 @@ void AutoTypeSelectDialog::buildActionMenu() } }); - copyPasswordAction->setShortcut(Qt::CTRL + Qt::SHIFT + Qt::Key_2); copyPasswordAction->setProperty(MENU_FIELD_PROP_NAME, MENU_FIELD::PASSWORD); connect(copyPasswordAction, &QAction::triggered, this, [&] { auto entry = m_ui->view->currentMatch().first; @@ -354,7 +365,6 @@ void AutoTypeSelectDialog::buildActionMenu() } }); - copyTotpAction->setShortcut(Qt::CTRL + Qt::SHIFT + Qt::Key_3); copyTotpAction->setProperty(MENU_FIELD_PROP_NAME, MENU_FIELD::TOTP); connect(copyTotpAction, &QAction::triggered, this, [&] { auto entry = m_ui->view->currentMatch().first; @@ -363,30 +373,22 @@ void AutoTypeSelectDialog::buildActionMenu() reject(); } }); - - // Qt 5.10 introduced a new "feature" to hide shortcuts in context menus - // Unfortunately, Qt::AA_DontShowShortcutsInContextMenus is broken, have to manually enable them - typeUsernameAction->setShortcutVisibleInContextMenu(true); - typePasswordAction->setShortcutVisibleInContextMenu(true); - typeTotpAction->setShortcutVisibleInContextMenu(true); -#if defined(Q_OS_WIN) || defined(Q_OS_MAC) - typeVirtualAction->setShortcutVisibleInContextMenu(true); -#endif - copyUsernameAction->setShortcutVisibleInContextMenu(true); - copyPasswordAction->setShortcutVisibleInContextMenu(true); - copyTotpAction->setShortcutVisibleInContextMenu(true); } void AutoTypeSelectDialog::showEvent(QShowEvent* event) { QDialog::showEvent(event); +#if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0) auto screen = QApplication::screenAt(QCursor::pos()); if (!screen) { // screenAt can return a nullptr, default to the primary screen screen = QApplication::primaryScreen(); } QRect screenGeometry = screen->availableGeometry(); +#else + QRect screenGeometry = QApplication::desktop()->availableGeometry(QCursor::pos()); +#endif // Resize to last used size QSize size = config()->get(Config::GUI_AutoTypeSelectDialogSize).toSize(); @@ -401,8 +403,6 @@ void AutoTypeSelectDialog::showEvent(QShowEvent* event) void AutoTypeSelectDialog::hideEvent(QHideEvent* event) { config()->set(Config::GUI_AutoTypeSelectDialogSize, size()); - config()->set(Config::AutoTypeDialogSortColumn, m_ui->view->horizontalHeader()->sortIndicatorSection()); - config()->set(Config::AutoTypeDialogSortOrder, m_ui->view->horizontalHeader()->sortIndicatorOrder()); if (!m_accepted) { emit rejected(); } diff --git a/src/autotype/PickcharsDialog.cpp b/src/autotype/PickcharsDialog.cpp index 54ef34b5f..798f2e228 100644 --- a/src/autotype/PickcharsDialog.cpp +++ b/src/autotype/PickcharsDialog.cpp @@ -21,8 +21,12 @@ #include "gui/Icons.h" #include -#include #include +#if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0) +#include +#else +#include +#endif PickcharsDialog::PickcharsDialog(const QString& string, QWidget* parent) : QDialog(parent) @@ -153,11 +157,15 @@ void PickcharsDialog::showEvent(QShowEvent* event) QDialog::showEvent(event); // Center on active screen +#if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0) auto screen = QApplication::screenAt(QCursor::pos()); if (!screen) { // screenAt can return a nullptr, default to the primary screen screen = QApplication::primaryScreen(); } QRect screenGeometry = screen->availableGeometry(); +#else + QRect screenGeometry = QApplication::desktop()->availableGeometry(QCursor::pos()); +#endif move(screenGeometry.center().x() - (size().width() / 2), screenGeometry.center().y() - (size().height() / 2)); } diff --git a/src/gui/widgets/ShortcutWidget.cpp b/src/autotype/ShortcutWidget.cpp similarity index 81% rename from src/gui/widgets/ShortcutWidget.cpp rename to src/autotype/ShortcutWidget.cpp index 4f9c14476..91b2fda93 100644 --- a/src/gui/widgets/ShortcutWidget.cpp +++ b/src/autotype/ShortcutWidget.cpp @@ -20,8 +20,13 @@ #include #include +#include "autotype/AutoType.h" + ShortcutWidget::ShortcutWidget(QWidget* parent) : QLineEdit(parent) + , m_key(static_cast(0)) + , m_modifiers(nullptr) + , m_locked(false) { setReadOnly(true); } @@ -36,11 +41,6 @@ Qt::KeyboardModifiers ShortcutWidget::modifiers() const return m_modifiers; } -QKeySequence ShortcutWidget::sequence() const -{ - return (m_key == Qt::Key_unknown) ? QKeySequence() : QKeySequence(m_key | m_modifiers); -} - void ShortcutWidget::setShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) { m_key = key; @@ -48,15 +48,22 @@ void ShortcutWidget::setShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) m_locked = true; displayShortcut(m_key, m_modifiers); - emit shortcutChanged(m_key, m_modifiers); + + QString error; + if (autoType()->registerGlobalShortcut(m_key, m_modifiers, &error)) { + setStyleSheet(""); + } else { + QToolTip::showText(mapToGlobal(rect().bottomLeft()), error); + setStyleSheet("background-color: #FF9696;"); + } } void ShortcutWidget::resetShortcut() { - m_key = Qt::Key_unknown; - m_modifiers = Qt::NoModifier; + m_key = static_cast(0); + m_modifiers = nullptr; m_locked = false; - emit shortcutReset(); + autoType()->unregisterGlobalShortcut(); } void ShortcutWidget::keyPressEvent(QKeyEvent* event) @@ -83,7 +90,7 @@ void ShortcutWidget::keyEvent(QKeyEvent* event) return; } - auto key = static_cast(event->key()); + Qt::Key key = static_cast(event->key()); if (key <= 0 || key == Qt::Key_unknown) { return; @@ -109,11 +116,13 @@ void ShortcutWidget::keyEvent(QKeyEvent* event) setShortcut(key, modifiers); } else { resetShortcut(); + setStyleSheet(""); displayShortcut(key, modifiers); } } else { if (m_locked) { resetShortcut(); + setStyleSheet(""); } displayShortcut(static_cast(0), modifiers); diff --git a/src/gui/widgets/ShortcutWidget.h b/src/autotype/ShortcutWidget.h similarity index 82% rename from src/gui/widgets/ShortcutWidget.h rename to src/autotype/ShortcutWidget.h index 6ff9b3d77..60898ab7e 100644 --- a/src/gui/widgets/ShortcutWidget.h +++ b/src/autotype/ShortcutWidget.h @@ -18,7 +18,6 @@ #ifndef KEEPASSX_SHORTCUTWIDGET_H #define KEEPASSX_SHORTCUTWIDGET_H -#include #include class ShortcutWidget : public QLineEdit @@ -27,17 +26,10 @@ class ShortcutWidget : public QLineEdit public: explicit ShortcutWidget(QWidget* parent = nullptr); - Qt::Key key() const; Qt::KeyboardModifiers modifiers() const; - QKeySequence sequence() const; - void setShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers); -signals: - void shortcutChanged(Qt::Key key, Qt::KeyboardModifiers modifiers); - void shortcutReset(); - protected: void keyPressEvent(QKeyEvent* event) override; void keyReleaseEvent(QKeyEvent* event) override; @@ -47,9 +39,9 @@ private: void displayShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers); void resetShortcut(); - Qt::Key m_key = Qt::Key_unknown; - Qt::KeyboardModifiers m_modifiers = Qt::NoModifier; - bool m_locked = false; + Qt::Key m_key; + Qt::KeyboardModifiers m_modifiers; + bool m_locked; }; #endif // KEEPASSX_SHORTCUTWIDGET_H diff --git a/src/autotype/mac/AutoTypeMac.cpp b/src/autotype/mac/AutoTypeMac.cpp index 05a5d41de..815deeecc 100644 --- a/src/autotype/mac/AutoTypeMac.cpp +++ b/src/autotype/mac/AutoTypeMac.cpp @@ -250,10 +250,6 @@ AutoTypeAction::Result AutoTypeExecutorMac::execType(const AutoTypeKey* action) int ch = action->character.toUpper().toLatin1(); m_platform->sendKey(static_cast(ch), true, action->modifiers); m_platform->sendKey(static_cast(ch), false, action->modifiers); - } else if (mode == Mode::VIRTUAL) { - int ch = action->character.toLatin1(); - m_platform->sendKey(static_cast(ch), true, action->modifiers); - m_platform->sendKey(static_cast(ch), false, action->modifiers); } else { m_platform->sendChar(action->character, true); m_platform->sendChar(action->character, false); diff --git a/src/autotype/mac/CMakeLists.txt b/src/autotype/mac/CMakeLists.txt index ae1f5187f..e0df901fd 100644 --- a/src/autotype/mac/CMakeLists.txt +++ b/src/autotype/mac/CMakeLists.txt @@ -1,7 +1,7 @@ set(autotype_mac_SOURCES AutoTypeMac.cpp) add_library(keepassxc-autotype-cocoa MODULE ${autotype_mac_SOURCES}) -set_target_properties(keepassxc-autotype-cocoa PROPERTIES LINK_FLAGS "-framework Foundation -framework AppKit -framework Carbon -framework ScreenCaptureKit") +set_target_properties(keepassxc-autotype-cocoa PROPERTIES LINK_FLAGS "-framework Foundation -framework AppKit -framework Carbon") target_link_libraries(keepassxc-autotype-cocoa ${PROGNAME} Qt5::Core Qt5::Widgets) install(TARGETS keepassxc-autotype-cocoa diff --git a/src/autotype/test/AutoTypeTest.cpp b/src/autotype/test/AutoTypeTest.cpp index 641b9502a..69c71a53c 100644 --- a/src/autotype/test/AutoTypeTest.cpp +++ b/src/autotype/test/AutoTypeTest.cpp @@ -29,7 +29,7 @@ QString AutoTypePlatformTest::keyToString(Qt::Key key) QStringList AutoTypePlatformTest::windowTitles() { - return {}; + return QStringList(); } WId AutoTypePlatformTest::activeWindow() diff --git a/src/autotype/test/AutoTypeTestInterface.h b/src/autotype/test/AutoTypeTestInterface.h index 8b1b7f9ad..7681f2ecb 100644 --- a/src/autotype/test/AutoTypeTestInterface.h +++ b/src/autotype/test/AutoTypeTestInterface.h @@ -23,7 +23,9 @@ class AutoTypeTestInterface { public: - virtual ~AutoTypeTestInterface() = default; + 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 e27f2b1d9..453e36af5 100644 --- a/src/autotype/test/CMakeLists.txt +++ b/src/autotype/test/CMakeLists.txt @@ -1,4 +1,4 @@ set(autotype_test_SOURCES AutoTypeTest.cpp) add_library(keepassxc-autotype-test MODULE ${autotype_test_SOURCES}) -target_link_libraries(keepassxc-autotype-test keepassxc_gui ${autotype_LIB} Qt5::Core Qt5::Widgets) +target_link_libraries(keepassxc-autotype-test keepassx_core ${autotype_LIB} Qt5::Core Qt5::Widgets) diff --git a/src/autotype/windows/CMakeLists.txt b/src/autotype/windows/CMakeLists.txt index 5b9cbecff..33bd54c58 100644 --- a/src/autotype/windows/CMakeLists.txt +++ b/src/autotype/windows/CMakeLists.txt @@ -1,7 +1,7 @@ set(autotype_win_SOURCES AutoTypeWindows.cpp) add_library(keepassxc-autotype-windows MODULE ${autotype_win_SOURCES}) -target_link_libraries(keepassxc-autotype-windows keepassxc_gui ${autotype_LIB} Qt5::Core Qt5::Widgets) +target_link_libraries(keepassxc-autotype-windows keepassx_core ${autotype_LIB} Qt5::Core Qt5::Widgets) install(TARGETS keepassxc-autotype-windows BUNDLE DESTINATION . COMPONENT Runtime LIBRARY DESTINATION ${PLUGIN_INSTALL_DIR} COMPONENT Runtime) diff --git a/src/autotype/xcb/AutoTypeXCB.cpp b/src/autotype/xcb/AutoTypeXCB.cpp index af9c463ee..f2b967656 100644 --- a/src/autotype/xcb/AutoTypeXCB.cpp +++ b/src/autotype/xcb/AutoTypeXCB.cpp @@ -50,11 +50,14 @@ AutoTypePlatformX11::AutoTypePlatformX11() m_atomTransientFor = XInternAtom(m_dpy, "WM_TRANSIENT_FOR", True); m_atomWindow = XInternAtom(m_dpy, "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_xkb = nullptr; @@ -181,17 +184,17 @@ QString AutoTypePlatformX11::windowTitle(Window window, bool useBlacklist) if (useBlacklist && !title.isEmpty()) { if (window == m_rootWindow) { - return {}; + return QString(); } QString className = windowClassName(window); if (m_classBlacklist.contains(className)) { - return {}; + return QString(); } QList keepassxWindows = widgetsToX11Windows(QApplication::topLevelWidgets()); if (keepassxWindows.contains(window)) { - return {}; + return QString(); } } @@ -482,7 +485,7 @@ bool AutoTypePlatformX11::RemapKeycode(KeySym keysym) AutoTypeAction::Result AutoTypePlatformX11::sendKey(KeySym keysym, unsigned int modifiers) { if (keysym == NoSymbol) { - return AutoTypeAction::Result::Failed(tr("Trying to send invalid keyboard symbol.")); + return AutoTypeAction::Result::Failed(tr("Trying to send invalid keysym.")); } int keycode; @@ -603,8 +606,8 @@ AutoTypeAction::Result AutoTypeExecutorX11::execType(const AutoTypeKey* action) AutoTypeAction::Result AutoTypeExecutorX11::execClearField(const AutoTypeClearField* action) { Q_UNUSED(action); - execType(new AutoTypeKey(Qt::Key_Home)); - execType(new AutoTypeKey(Qt::Key_End, Qt::ShiftModifier)); + execType(new AutoTypeKey(Qt::Key_Home, Qt::ControlModifier)); + execType(new AutoTypeKey(Qt::Key_End, Qt::ControlModifier | Qt::ShiftModifier)); execType(new AutoTypeKey(Qt::Key_Backspace)); return AutoTypeAction::Result::Ok(); } diff --git a/src/autotype/xcb/CMakeLists.txt b/src/autotype/xcb/CMakeLists.txt index f14017f63..0704de639 100644 --- a/src/autotype/xcb/CMakeLists.txt +++ b/src/autotype/xcb/CMakeLists.txt @@ -3,7 +3,7 @@ include_directories(SYSTEM ${X11_X11_INCLUDE_PATH}) set(autotype_XCB_SOURCES AutoTypeXCB.cpp) add_library(keepassxc-autotype-xcb MODULE ${autotype_XCB_SOURCES}) -target_link_libraries(keepassxc-autotype-xcb keepassxc_gui Qt5::Core Qt5::Widgets Qt5::X11Extras ${X11_X11_LIB} ${X11_Xi_LIB} ${X11_XTest_LIB}) +target_link_libraries(keepassxc-autotype-xcb keepassx_core Qt5::Core Qt5::Widgets Qt5::X11Extras ${X11_X11_LIB} ${X11_Xi_LIB} ${X11_XTest_LIB}) install(TARGETS keepassxc-autotype-xcb BUNDLE DESTINATION . COMPONENT Runtime LIBRARY DESTINATION ${PLUGIN_INSTALL_DIR} COMPONENT Runtime) diff --git a/src/browser/BrowserAccessControlDialog.cpp b/src/browser/BrowserAccessControlDialog.cpp index b3d9944d3..3fce10c5c 100644 --- a/src/browser/BrowserAccessControlDialog.cpp +++ b/src/browser/BrowserAccessControlDialog.cpp @@ -1,6 +1,6 @@ /* - * Copyright (C) 2023 KeePassXC Team * Copyright (C) 2013 Francois Ferrand + * Copyright (C) 2022 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 @@ -21,11 +21,12 @@ #include #include "core/Entry.h" -#include "gui/Icons.h" +#include BrowserAccessControlDialog::BrowserAccessControlDialog(QWidget* parent) : QDialog(parent) , m_ui(new Ui::BrowserAccessControlDialog()) + , m_entriesAccepted(false) { setWindowFlags(windowFlags() | Qt::WindowStaysOnTopHint); @@ -33,22 +34,13 @@ BrowserAccessControlDialog::BrowserAccessControlDialog(QWidget* parent) connect(m_ui->allowButton, SIGNAL(clicked()), SLOT(accept())); connect(m_ui->denyButton, SIGNAL(clicked()), SLOT(reject())); - connect(m_ui->itemsTable, SIGNAL(cellDoubleClicked(int, int)), this, SLOT(accept())); - connect(m_ui->itemsTable->selectionModel(), - SIGNAL(selectionChanged(QItemSelection, QItemSelection)), - this, - SLOT(selectionChanged())); - connect(m_ui->itemsTable, SIGNAL(acceptSelections()), SLOT(accept())); - connect(m_ui->itemsTable, SIGNAL(focusInWithoutSelections()), this, SLOT(selectionChanged())); } BrowserAccessControlDialog::~BrowserAccessControlDialog() { } -void BrowserAccessControlDialog::setEntries(const QList& entriesToConfirm, - const QString& urlString, - bool httpAuth) +void BrowserAccessControlDialog::setItems(const QList& items, const QString& urlString, bool httpAuth) { QUrl url(urlString); m_ui->siteLabel->setText(m_ui->siteLabel->text().arg( @@ -57,115 +49,60 @@ void BrowserAccessControlDialog::setEntries(const QList& entriesToConfir m_ui->rememberDecisionCheckBox->setVisible(!httpAuth); m_ui->rememberDecisionCheckBox->setChecked(false); - m_ui->itemsTable->setRowCount(entriesToConfirm.count()); + m_ui->itemsTable->setRowCount(items.count()); m_ui->itemsTable->setColumnCount(2); int row = 0; - for (const auto& entry : entriesToConfirm) { - addEntryToList(entry, row); + for (const auto& entry : items) { + auto item = new QTableWidgetItem(); + item->setText(entry->title() + " - " + entry->username()); + item->setData(Qt::UserRole, row); + item->setCheckState(Qt::Checked); + item->setFlags(item->flags() | Qt::ItemIsUserCheckable); + m_ui->itemsTable->setItem(row, 0, item); + + auto disableButton = new QPushButton(tr("Disable for this site")); + disableButton->setAutoDefault(false); + connect(disableButton, &QAbstractButton::pressed, [&, item] { + emit disableAccess(item); + m_ui->itemsTable->removeRow(item->row()); + if (m_ui->itemsTable->rowCount() == 0) { + reject(); + } + }); + m_ui->itemsTable->setCellWidget(row, 1, disableButton); ++row; } m_ui->itemsTable->resizeColumnsToContents(); m_ui->itemsTable->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch); - m_ui->itemsTable->selectAll(); m_ui->allowButton->setFocus(); } -void BrowserAccessControlDialog::addEntryToList(Entry* entry, int row) -{ - auto item = new QTableWidgetItem(); - item->setText(entry->resolveMultiplePlaceholders(entry->title()) + " - " - + entry->resolveMultiplePlaceholders(entry->username())); - item->setData(Qt::UserRole, row); - item->setFlags(item->flags() | Qt::ItemIsSelectable); - m_ui->itemsTable->setItem(row, 0, item); - - auto disableButton = new QPushButton(); - disableButton->setIcon(icons()->icon("entry-delete")); - disableButton->setToolTip(tr("Disable for this site")); - - connect(disableButton, &QAbstractButton::pressed, [&, item, disableButton] { - auto font = item->font(); - if (item->flags() == Qt::NoItemFlags) { - item->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable); - item->setSelected(true); - - font.setStrikeOut(false); - item->setFont(font); - - disableButton->setIcon(icons()->icon("entry-delete")); - disableButton->setToolTip(tr("Disable for this site")); - m_ui->rememberDecisionCheckBox->setEnabled(true); - } else { - item->setFlags(Qt::NoItemFlags); - item->setSelected(false); - - font.setStrikeOut(true); - item->setFont(font); - - disableButton->setIcon(icons()->icon("entry-restore")); - disableButton->setToolTip(tr("Undo")); - - // Disable Remember checkbox if all items are disabled - auto areAllDisabled = BrowserAccessControlDialog::areAllDisabled(); - m_ui->rememberDecisionCheckBox->setEnabled(!areAllDisabled); - } - }); - - m_ui->itemsTable->setCellWidget(row, 1, disableButton); -} - bool BrowserAccessControlDialog::remember() const { return m_ui->rememberDecisionCheckBox->isChecked(); } -QList BrowserAccessControlDialog::getEntries(SelectionType selectionType) const +QList BrowserAccessControlDialog::getSelectedEntries() const { QList selected; - for (auto& item : getAllItems()) { - // Add to list depending on selection type and item status - if ((selectionType == SelectionType::Selected && item->isSelected()) - || (selectionType == SelectionType::NonSelected && !item->isSelected()) - || (selectionType == SelectionType::Disabled && item->flags() == Qt::NoItemFlags)) { + for (int i = 0; i < m_ui->itemsTable->rowCount(); ++i) { + auto item = m_ui->itemsTable->item(i, 0); + if (item->checkState() == Qt::Checked) { selected.append(item); } } return selected; } -void BrowserAccessControlDialog::selectionChanged() +QList BrowserAccessControlDialog::getNonSelectedEntries() const { - auto selectedRows = m_ui->itemsTable->selectionModel()->selectedRows(); - - m_ui->allowButton->setEnabled(!selectedRows.isEmpty()); - m_ui->allowButton->setDefault(!selectedRows.isEmpty()); - m_ui->allowButton->setAutoDefault(!selectedRows.isEmpty()); - - if (selectedRows.isEmpty()) { - m_ui->allowButton->clearFocus(); - m_ui->denyButton->setFocus(); - } -} - -bool BrowserAccessControlDialog::areAllDisabled() const -{ - auto areAllDisabled = true; - for (const auto& item : getAllItems()) { - if (item->flags() != Qt::NoItemFlags) { - areAllDisabled = false; - } - } - - return areAllDisabled; -} - -QList BrowserAccessControlDialog::getAllItems() const -{ - QList items; + QList notSelected; for (int i = 0; i < m_ui->itemsTable->rowCount(); ++i) { auto item = m_ui->itemsTable->item(i, 0); - items.append(item); + if (item->checkState() != Qt::Checked) { + notSelected.append(item); + } } - return items; + return notSelected; } diff --git a/src/browser/BrowserAccessControlDialog.h b/src/browser/BrowserAccessControlDialog.h index 3ecf5b506..28f75303b 100644 --- a/src/browser/BrowserAccessControlDialog.h +++ b/src/browser/BrowserAccessControlDialog.h @@ -1,6 +1,6 @@ /* - * Copyright (C) 2023 KeePassXC Team * Copyright (C) 2013 Francois Ferrand + * Copyright (C) 2022 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 @@ -16,8 +16,8 @@ * along with this program. If not, see . */ -#ifndef KEEPASSXC_BROWSERACCESSCONTROLDIALOG_H -#define KEEPASSXC_BROWSERACCESSCONTROLDIALOG_H +#ifndef BROWSERACCESSCONTROLDIALOG_H +#define BROWSERACCESSCONTROLDIALOG_H #include #include @@ -29,13 +29,6 @@ namespace Ui class BrowserAccessControlDialog; } -enum SelectionType -{ - Selected, - NonSelected, - Disabled -}; - class BrowserAccessControlDialog : public QDialog { Q_OBJECT @@ -44,24 +37,20 @@ public: explicit BrowserAccessControlDialog(QWidget* parent = nullptr); ~BrowserAccessControlDialog() override; - void setEntries(const QList& entriesToConfirm, const QString& urlString, bool httpAuth); + void setItems(const QList& items, const QString& urlString, bool httpAuth); bool remember() const; - QList getEntries(SelectionType selectionType) const; + + QList getSelectedEntries() const; + QList getNonSelectedEntries() const; signals: void disableAccess(QTableWidgetItem* item); -private slots: - void selectionChanged(); - -private: - void addEntryToList(Entry* entry, int row); - bool areAllDisabled() const; - QList getAllItems() const; - private: QScopedPointer m_ui; QList m_entriesToConfirm; + QList m_allowedEntries; + bool m_entriesAccepted; }; -#endif // KEEPASSXC_BROWSERACCESSCONTROLDIALOG_H +#endif // BROWSERACCESSCONTROLDIALOG_H diff --git a/src/browser/BrowserAccessControlDialog.ui b/src/browser/BrowserAccessControlDialog.ui old mode 100644 new mode 100755 index 63f264311..4224c1633 --- a/src/browser/BrowserAccessControlDialog.ui +++ b/src/browser/BrowserAccessControlDialog.ui @@ -31,7 +31,7 @@ - + QAbstractItemView::NoEditTriggers @@ -39,10 +39,7 @@ false - QAbstractItemView::ExtendedSelection - - - QAbstractItemView::SelectRows + QAbstractItemView::NoSelection false @@ -113,19 +110,6 @@ - - rememberDecisionCheckBox - allowButton - denyButton - - - - CustomTableWidget - QTableWidget -
    browser/CustomTableWidget.h
    - 1 -
    -
    diff --git a/src/browser/BrowserAction.cpp b/src/browser/BrowserAction.cpp index 67cf7f0df..9e555a43f 100644 --- a/src/browser/BrowserAction.cpp +++ b/src/browser/BrowserAction.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2024 KeePassXC Team + * Copyright (C) 2022 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,35 +17,20 @@ #include "BrowserAction.h" #include "BrowserMessageBuilder.h" -#ifdef WITH_XC_BROWSER_PASSKEYS -#include "BrowserPasskeys.h" -#include "PasskeyUtils.h" -#endif +#include "BrowserService.h" #include "BrowserSettings.h" +#include "BrowserShared.h" +#include "config-keepassx.h" #include "core/Global.h" #include "core/Tools.h" +#include #include +#include #include const int BrowserAction::MaxUrlLength = 256; -static const QString BROWSER_REQUEST_ASSOCIATE = QStringLiteral("associate"); -static const QString BROWSER_REQUEST_CHANGE_PUBLIC_KEYS = QStringLiteral("change-public-keys"); -static const QString BROWSER_REQUEST_CREATE_NEW_GROUP = QStringLiteral("create-new-group"); -static const QString BROWSER_REQUEST_DELETE_ENTRY = QStringLiteral("delete-entry"); -static const QString BROWSER_REQUEST_GENERATE_PASSWORD = QStringLiteral("generate-password"); -static const QString BROWSER_REQUEST_GET_DATABASEHASH = QStringLiteral("get-databasehash"); -static const QString BROWSER_REQUEST_GET_DATABASE_GROUPS = QStringLiteral("get-database-groups"); -static const QString BROWSER_REQUEST_GET_LOGINS = QStringLiteral("get-logins"); -static const QString BROWSER_REQUEST_GET_TOTP = QStringLiteral("get-totp"); -static const QString BROWSER_REQUEST_LOCK_DATABASE = QStringLiteral("lock-database"); -static const QString BROWSER_REQUEST_PASSKEYS_GET = QStringLiteral("passkeys-get"); -static const QString BROWSER_REQUEST_PASSKEYS_REGISTER = QStringLiteral("passkeys-register"); -static const QString BROWSER_REQUEST_REQUEST_AUTOTYPE = QStringLiteral("request-autotype"); -static const QString BROWSER_REQUEST_SET_LOGIN = QStringLiteral("set-login"); -static const QString BROWSER_REQUEST_TEST_ASSOCIATE = QStringLiteral("test-associate"); - QJsonObject BrowserAction::processClientMessage(QLocalSocket* socket, const QJsonObject& json) { if (json.isEmpty()) { @@ -53,17 +38,17 @@ QJsonObject BrowserAction::processClientMessage(QLocalSocket* socket, const QJso } bool triggerUnlock = false; - const auto trigger = json.value("triggerUnlock").toString(); + const QString trigger = json.value("triggerUnlock").toString(); if (!trigger.isEmpty() && trigger.compare(TRUE_STR) == 0) { triggerUnlock = true; } - const auto action = json.value("action").toString(); + const QString action = json.value("action").toString(); if (action.isEmpty()) { return getErrorReply(action, ERROR_KEEPASS_INCORRECT_ACTION); } - if (action.compare(BROWSER_REQUEST_CHANGE_PUBLIC_KEYS) != 0 && action.compare(BROWSER_REQUEST_REQUEST_AUTOTYPE) != 0 + if (action.compare("change-public-keys") != 0 && action.compare("request-autotype") != 0 && !browserService()->isDatabaseOpened()) { if (m_clientPublicKey.isEmpty()) { return getErrorReply(action, ERROR_KEEPASS_CLIENT_PUBLIC_KEY_NOT_RECEIVED); @@ -82,40 +67,32 @@ QJsonObject BrowserAction::handleAction(QLocalSocket* socket, const QJsonObject& { QString action = json.value("action").toString(); - if (action.compare(BROWSER_REQUEST_CHANGE_PUBLIC_KEYS) == 0) { + if (action.compare("change-public-keys") == 0) { return handleChangePublicKeys(json, action); - } else if (action.compare(BROWSER_REQUEST_GET_DATABASEHASH) == 0) { + } else if (action.compare("get-databasehash") == 0) { return handleGetDatabaseHash(json, action); - } else if (action.compare(BROWSER_REQUEST_ASSOCIATE) == 0) { + } else if (action.compare("associate") == 0) { return handleAssociate(json, action); - } else if (action.compare(BROWSER_REQUEST_TEST_ASSOCIATE) == 0) { + } else if (action.compare("test-associate") == 0) { return handleTestAssociate(json, action); - } else if (action.compare(BROWSER_REQUEST_GET_LOGINS) == 0) { + } else if (action.compare("get-logins") == 0) { return handleGetLogins(json, action); - } else if (action.compare(BROWSER_REQUEST_GENERATE_PASSWORD) == 0) { + } else if (action.compare("generate-password") == 0) { return handleGeneratePassword(socket, json, action); - } else if (action.compare(BROWSER_REQUEST_SET_LOGIN) == 0) { + } else if (action.compare("set-login") == 0) { return handleSetLogin(json, action); - } else if (action.compare(BROWSER_REQUEST_LOCK_DATABASE) == 0) { + } else if (action.compare("lock-database") == 0) { return handleLockDatabase(json, action); - } else if (action.compare(BROWSER_REQUEST_GET_DATABASE_GROUPS) == 0) { + } else if (action.compare("get-database-groups") == 0) { return handleGetDatabaseGroups(json, action); - } else if (action.compare(BROWSER_REQUEST_CREATE_NEW_GROUP) == 0) { + } else if (action.compare("create-new-group") == 0) { return handleCreateNewGroup(json, action); - } else if (action.compare(BROWSER_REQUEST_GET_TOTP) == 0) { + } else if (action.compare("get-totp") == 0) { return handleGetTotp(json, action); - } else if (action.compare(BROWSER_REQUEST_DELETE_ENTRY) == 0) { + } else if (action.compare("delete-entry") == 0) { return handleDeleteEntry(json, action); - } else if (action.compare(BROWSER_REQUEST_REQUEST_AUTOTYPE) == 0) { + } else if (action.compare("request-autotype") == 0) { return handleGlobalAutoType(json, action); - } else if (action.compare("get-database-entries", Qt::CaseSensitive) == 0) { - return handleGetDatabaseEntries(json, action); -#ifdef WITH_XC_BROWSER_PASSKEYS - } else if (action.compare(BROWSER_REQUEST_PASSKEYS_GET) == 0) { - return handlePasskeysGet(json, action); - } else if (action.compare(BROWSER_REQUEST_PASSKEYS_REGISTER) == 0) { - return handlePasskeysRegister(json, action); -#endif } // Action was not recognized @@ -124,8 +101,8 @@ QJsonObject BrowserAction::handleAction(QLocalSocket* socket, const QJsonObject& QJsonObject BrowserAction::handleChangePublicKeys(const QJsonObject& json, const QString& action) { - const auto nonce = json.value("nonce").toString(); - const auto clientPublicKey = json.value("publicKey").toString(); + const QString nonce = json.value("nonce").toString(); + const QString clientPublicKey = json.value("publicKey").toString(); if (clientPublicKey.isEmpty() || nonce.isEmpty()) { return getErrorReply(action, ERROR_KEEPASS_CLIENT_PUBLIC_KEY_NOT_RECEIVED); @@ -141,7 +118,7 @@ QJsonObject BrowserAction::handleChangePublicKeys(const QJsonObject& json, const m_publicKey = keyPair.first; m_secretKey = keyPair.second; - auto response = browserMessageBuilder()->buildMessage(browserMessageBuilder()->incrementNonce(nonce)); + QJsonObject response = browserMessageBuilder()->buildMessage(browserMessageBuilder()->incrementNonce(nonce)); response["action"] = action; response["publicKey"] = keyPair.first; @@ -150,19 +127,36 @@ QJsonObject BrowserAction::handleChangePublicKeys(const QJsonObject& json, const QJsonObject BrowserAction::handleGetDatabaseHash(const QJsonObject& json, const QString& action) { - const auto browserRequest = decodeRequest(json); - if (browserRequest.isEmpty()) { + const QString hash = browserService()->getDatabaseHash(); + const QString nonce = json.value("nonce").toString(); + const QString encrypted = json.value("message").toString(); + const QJsonObject decrypted = decryptMessage(encrypted, nonce); + + if (decrypted.isEmpty()) { return getErrorReply(action, ERROR_KEEPASS_CANNOT_DECRYPT_MESSAGE); } - if (browserRequest.hash.isEmpty()) { + if (hash.isEmpty()) { return getErrorReply(action, ERROR_KEEPASS_DATABASE_HASH_NOT_RECEIVED); } - const auto command = browserRequest.getString("action"); - if (!command.isEmpty() && command.compare(BROWSER_REQUEST_GET_DATABASEHASH) == 0) { - const Parameters params{{"hash", browserRequest.hash}}; - return buildResponse(action, browserRequest.incrementedNonce, params); + QString command = decrypted.value("action").toString(); + if (!command.isEmpty() && command.compare("get-databasehash") == 0) { + const QString newNonce = browserMessageBuilder()->incrementNonce(nonce); + + QJsonObject message = browserMessageBuilder()->buildMessage(newNonce); + message["hash"] = hash; + + // Update a legacy database hash if found + const QJsonArray hashes = decrypted.value("connectedKeys").toArray(); + if (!hashes.isEmpty()) { + const QString legacyHash = browserService()->getDatabaseHash(true); + if (hashes.contains(legacyHash)) { + message["oldHash"] = legacyHash; + } + } + + return buildResponse(action, message, newNonce); } return getErrorReply(action, ERROR_KEEPASS_CANNOT_DECRYPT_MESSAGE); @@ -170,12 +164,16 @@ QJsonObject BrowserAction::handleGetDatabaseHash(const QJsonObject& json, const QJsonObject BrowserAction::handleAssociate(const QJsonObject& json, const QString& action) { - const auto browserRequest = decodeRequest(json); - if (browserRequest.isEmpty()) { + const QString hash = browserService()->getDatabaseHash(); + const QString nonce = json.value("nonce").toString(); + const QString encrypted = json.value("message").toString(); + const QJsonObject decrypted = decryptMessage(encrypted, nonce); + + if (decrypted.isEmpty()) { return getErrorReply(action, ERROR_KEEPASS_CANNOT_DECRYPT_MESSAGE); } - const auto key = browserRequest.getString("key"); + const QString key = decrypted.value("key").toString(); if (key.isEmpty()) { return getErrorReply(action, ERROR_KEEPASS_ASSOCIATION_FAILED); } @@ -183,16 +181,19 @@ QJsonObject BrowserAction::handleAssociate(const QJsonObject& json, const QStrin if (key.compare(m_clientPublicKey) == 0) { // Check for identification key. If it's not found, ensure backwards compatibility and use the current public // key - const auto idKey = browserRequest.getString("idKey"); - const auto id = browserService()->storeKey((idKey.isEmpty() ? key : idKey)); + const QString idKey = decrypted.value("idKey").toString(); + const QString id = browserService()->storeKey((idKey.isEmpty() ? key : idKey)); if (id.isEmpty()) { return getErrorReply(action, ERROR_KEEPASS_ACTION_CANCELLED_OR_DENIED); } m_associated = true; + const QString newNonce = browserMessageBuilder()->incrementNonce(nonce); - const Parameters params{{"hash", browserRequest.hash}, {"id", id}}; - return buildResponse(action, browserRequest.incrementedNonce, params); + QJsonObject message = browserMessageBuilder()->buildMessage(newNonce); + message["hash"] = hash; + message["id"] = id; + return buildResponse(action, message, newNonce); } return getErrorReply(action, ERROR_KEEPASS_ASSOCIATION_FAILED); @@ -200,76 +201,97 @@ QJsonObject BrowserAction::handleAssociate(const QJsonObject& json, const QStrin QJsonObject BrowserAction::handleTestAssociate(const QJsonObject& json, const QString& action) { - const auto browserRequest = decodeRequest(json); - if (browserRequest.isEmpty()) { + const QString hash = browserService()->getDatabaseHash(); + const QString nonce = json.value("nonce").toString(); + const QString encrypted = json.value("message").toString(); + const QJsonObject decrypted = decryptMessage(encrypted, nonce); + + if (decrypted.isEmpty()) { return getErrorReply(action, ERROR_KEEPASS_CANNOT_DECRYPT_MESSAGE); } - const auto responseKey = browserRequest.getString("key"); - const auto id = browserRequest.getString("id"); + const QString responseKey = decrypted.value("key").toString(); + const QString id = decrypted.value("id").toString(); if (responseKey.isEmpty() || id.isEmpty()) { return getErrorReply(action, ERROR_KEEPASS_DATABASE_NOT_OPENED); } - const auto key = browserService()->getKey(id); + const QString key = browserService()->getKey(id); if (key.isEmpty() || key.compare(responseKey) != 0) { return getErrorReply(action, ERROR_KEEPASS_ASSOCIATION_FAILED); } m_associated = true; + const QString newNonce = browserMessageBuilder()->incrementNonce(nonce); - const Parameters params{{"hash", browserRequest.hash}, {"id", id}}; - return buildResponse(action, browserRequest.incrementedNonce, params); + QJsonObject message = browserMessageBuilder()->buildMessage(newNonce); + message["hash"] = hash; + message["id"] = id; + + return buildResponse(action, message, newNonce); } QJsonObject BrowserAction::handleGetLogins(const QJsonObject& json, const QString& action) { + const QString hash = browserService()->getDatabaseHash(); + const QString nonce = json.value("nonce").toString(); + const auto incrementedNonce = browserMessageBuilder()->incrementNonce(nonce); + const QString encrypted = json.value("message").toString(); + if (!m_associated) { return getErrorReply(action, ERROR_KEEPASS_ASSOCIATION_FAILED); } - const auto browserRequest = decodeRequest(json); - if (browserRequest.isEmpty()) { + const QJsonObject decrypted = decryptMessage(encrypted, nonce); + if (decrypted.isEmpty()) { return getErrorReply(action, ERROR_KEEPASS_CANNOT_DECRYPT_MESSAGE); } - const auto siteUrl = browserRequest.getString("url"); + const QString siteUrl = decrypted.value("url").toString(); if (siteUrl.isEmpty()) { return getErrorReply(action, ERROR_KEEPASS_NO_URL_PROVIDED); } - const auto id = browserRequest.getString("id"); - const auto formUrl = browserRequest.getString("submitUrl"); - const auto auth = browserRequest.getString("httpAuth"); + const QJsonArray keys = decrypted.value("keys").toArray(); + + StringPairList keyList; + for (const QJsonValue val : keys) { + const QJsonObject keyObject = val.toObject(); + keyList.push_back(qMakePair(keyObject.value("id").toString(), keyObject.value("key").toString())); + } + + const QString id = decrypted.value("id").toString(); + const QString formUrl = decrypted.value("submitUrl").toString(); + const QString auth = decrypted.value("httpAuth").toString(); const bool httpAuth = auth.compare(TRUE_STR) == 0; - const auto keyList = getConnectionKeys(browserRequest); - EntryParameters entryParameters; - entryParameters.dbid = id; - entryParameters.hash = browserRequest.hash; - entryParameters.siteUrl = siteUrl; - entryParameters.formUrl = formUrl; - entryParameters.httpAuth = httpAuth; - - bool entriesFound = false; - const auto entries = browserService()->findEntries(entryParameters, keyList, &entriesFound); - if (!entriesFound) { + const QJsonArray users = browserService()->findMatchingEntries(id, siteUrl, formUrl, "", keyList, httpAuth); + if (users.isEmpty()) { return getErrorReply(action, ERROR_KEEPASS_NO_LOGINS_FOUND); } - const Parameters params{ - {"count", entries.count()}, {"entries", entries}, {"hash", browserRequest.hash}, {"id", id}}; - return buildResponse(action, browserRequest.incrementedNonce, params); + QJsonObject message = browserMessageBuilder()->buildMessage(incrementedNonce); + message["count"] = users.count(); + message["entries"] = users; + message["hash"] = hash; + message["id"] = id; + + return buildResponse(action, message, incrementedNonce); } QJsonObject BrowserAction::handleGeneratePassword(QLocalSocket* socket, const QJsonObject& json, const QString& action) { - const auto browserRequest = decodeRequest(json); - if (browserRequest.isEmpty()) { + auto errorMessage = getErrorReply(action, ERROR_KEEPASS_ACTION_CANCELLED_OR_DENIED); + auto nonce = json.value("nonce").toString(); + auto incrementedNonce = browserMessageBuilder()->incrementNonce(nonce); + + const QString encrypted = json.value("message").toString(); + const QJsonObject decrypted = decryptMessage(encrypted, nonce); + if (decrypted.isEmpty()) { return getErrorReply(action, ERROR_KEEPASS_CANNOT_DECRYPT_MESSAGE); } - const auto requestId = browserRequest.getString("requestID"); + auto requestId = decrypted.value("requestID").toString(); // Do not allow multiple requests from the same client if (browserService()->isPasswordGeneratorRequested()) { @@ -280,85 +302,89 @@ QJsonObject BrowserAction::handleGeneratePassword(QLocalSocket* socket, const QJ errorReply["requestID"] = requestId; } - // Show the existing password generator - browserService()->showPasswordGenerator({}); return errorReply; } - KeyPairMessage keyPairMessage{socket, browserRequest.incrementedNonce, m_clientPublicKey, m_secretKey}; - - browserService()->showPasswordGenerator(keyPairMessage); - return {}; + browserService()->showPasswordGenerator(socket, incrementedNonce, m_clientPublicKey, m_secretKey); + return QJsonObject(); } QJsonObject BrowserAction::handleSetLogin(const QJsonObject& json, const QString& action) { + const QString hash = browserService()->getDatabaseHash(); + const QString nonce = json.value("nonce").toString(); + const QString encrypted = json.value("message").toString(); + if (!m_associated) { return getErrorReply(action, ERROR_KEEPASS_ASSOCIATION_FAILED); } - const auto browserRequest = decodeRequest(json); - if (browserRequest.isEmpty()) { + const QJsonObject decrypted = decryptMessage(encrypted, nonce); + if (decrypted.isEmpty()) { return getErrorReply(action, ERROR_KEEPASS_CANNOT_DECRYPT_MESSAGE); } - const auto url = browserRequest.getString("url"); + const QString url = decrypted.value("url").toString(); if (url.isEmpty()) { return getErrorReply(action, ERROR_KEEPASS_NO_URL_PROVIDED); } - const auto id = browserRequest.getString("id"); - const auto login = browserRequest.getString("login"); - const auto password = browserRequest.getString("password"); - const auto submitUrl = browserRequest.getString("submitUrl"); - const auto uuid = browserRequest.getString("uuid"); - const auto group = browserRequest.getString("group"); - const auto groupUuid = browserRequest.getString("groupUuid"); - const auto downloadFavicon = browserRequest.getString("downloadFavicon"); + const QString id = decrypted.value("id").toString(); + const QString login = decrypted.value("login").toString(); + 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 downloadFavicon = decrypted.value("downloadFavicon").toString(); const QString realm; - EntryParameters entryParameters; - entryParameters.dbid = id; - entryParameters.login = login; - entryParameters.password = password; - entryParameters.siteUrl = url; - entryParameters.formUrl = submitUrl; - entryParameters.realm = realm; - bool result = true; if (uuid.isEmpty()) { auto dlFavicon = !downloadFavicon.isEmpty() && downloadFavicon.compare(TRUE_STR) == 0; - browserService()->addEntry(entryParameters, group, groupUuid, dlFavicon); + browserService()->addEntry(id, login, password, url, submitUrl, realm, group, groupUuid, dlFavicon); } else { if (!Tools::isValidUuid(uuid)) { return getErrorReply(action, ERROR_KEEPASS_NO_VALID_UUID_PROVIDED); } - result = browserService()->updateEntry(entryParameters, uuid); + result = browserService()->updateEntry(id, uuid, login, password, url, submitUrl); } - const Parameters params{{"count", QJsonValue::Null}, - {"entries", QJsonValue::Null}, - {"error", result ? QStringLiteral("success") : QStringLiteral("error")}, - {"hash", browserRequest.hash}}; - return buildResponse(action, browserRequest.incrementedNonce, params); + const QString newNonce = browserMessageBuilder()->incrementNonce(nonce); + + QJsonObject message = browserMessageBuilder()->buildMessage(newNonce); + message["count"] = QJsonValue::Null; + message["entries"] = QJsonValue::Null; + message["error"] = result ? QStringLiteral("success") : QStringLiteral("error"); + message["hash"] = hash; + + return buildResponse(action, message, newNonce); } QJsonObject BrowserAction::handleLockDatabase(const QJsonObject& json, const QString& action) { - const auto browserRequest = decodeRequest(json); - if (browserRequest.isEmpty()) { + const QString hash = browserService()->getDatabaseHash(); + const QString nonce = json.value("nonce").toString(); + const QString encrypted = json.value("message").toString(); + const QJsonObject decrypted = decryptMessage(encrypted, nonce); + + if (decrypted.isEmpty()) { return getErrorReply(action, ERROR_KEEPASS_CANNOT_DECRYPT_MESSAGE); } - if (browserRequest.hash.isEmpty()) { + if (hash.isEmpty()) { return getErrorReply(action, ERROR_KEEPASS_DATABASE_HASH_NOT_RECEIVED); } - const auto command = browserRequest.getString("action"); - if (!command.isEmpty() && command.compare(BROWSER_REQUEST_LOCK_DATABASE) == 0) { + QString command = decrypted.value("action").toString(); + if (!command.isEmpty() && command.compare("lock-database") == 0) { browserService()->lockDatabase(); - return buildResponse(action, browserRequest.incrementedNonce); + + const QString newNonce = browserMessageBuilder()->incrementNonce(nonce); + QJsonObject message = browserMessageBuilder()->buildMessage(newNonce); + + return buildResponse(action, message, newNonce); } return getErrorReply(action, ERROR_KEEPASS_DATABASE_HASH_NOT_RECEIVED); @@ -366,228 +392,166 @@ QJsonObject BrowserAction::handleLockDatabase(const QJsonObject& json, const QSt QJsonObject BrowserAction::handleGetDatabaseGroups(const QJsonObject& json, const QString& action) { + const QString hash = browserService()->getDatabaseHash(); + const QString nonce = json.value("nonce").toString(); + const QString encrypted = json.value("message").toString(); + if (!m_associated) { return getErrorReply(action, ERROR_KEEPASS_ASSOCIATION_FAILED); } - const auto browserRequest = decodeRequest(json); - if (browserRequest.isEmpty()) { + const QJsonObject decrypted = decryptMessage(encrypted, nonce); + if (decrypted.isEmpty()) { return getErrorReply(action, ERROR_KEEPASS_CANNOT_DECRYPT_MESSAGE); } - const auto command = browserRequest.getString("action"); - if (command.isEmpty() || command.compare(BROWSER_REQUEST_GET_DATABASE_GROUPS) != 0) { + QString command = decrypted.value("action").toString(); + if (command.isEmpty() || command.compare("get-database-groups") != 0) { return getErrorReply(action, ERROR_KEEPASS_INCORRECT_ACTION); } - const auto groups = browserService()->getDatabaseGroups(); + const QJsonObject groups = browserService()->getDatabaseGroups(); if (groups.isEmpty()) { return getErrorReply(action, ERROR_KEEPASS_NO_GROUPS_FOUND); } - const Parameters params{{"groups", groups}}; - return buildResponse(action, browserRequest.incrementedNonce, params); -} + const QString newNonce = browserMessageBuilder()->incrementNonce(nonce); -QJsonObject BrowserAction::handleGetDatabaseEntries(const QJsonObject& json, const QString& action) -{ - if (!m_associated) { - return getErrorReply(action, ERROR_KEEPASS_ASSOCIATION_FAILED); - } + QJsonObject message = browserMessageBuilder()->buildMessage(newNonce); + message["groups"] = groups; - const auto browserRequest = decodeRequest(json); - if (browserRequest.isEmpty()) { - return getErrorReply(action, ERROR_KEEPASS_CANNOT_DECRYPT_MESSAGE); - } - - const auto command = browserRequest.getString("action"); - if (command.isEmpty() || command.compare("get-database-entries") != 0) { - return getErrorReply(action, ERROR_KEEPASS_INCORRECT_ACTION); - } - - if (!browserSettings()->allowGetDatabaseEntriesRequest()) { - return getErrorReply(action, ERROR_KEEPASS_ACCESS_TO_ALL_ENTRIES_DENIED); - } - - const QJsonArray entries = browserService()->getDatabaseEntries(); - if (entries.isEmpty()) { - return getErrorReply(action, ERROR_KEEPASS_NO_GROUPS_FOUND); - } - - const Parameters params{{"entries", entries}}; - - return buildResponse(action, browserRequest.incrementedNonce, params); + return buildResponse(action, message, newNonce); } QJsonObject BrowserAction::handleCreateNewGroup(const QJsonObject& json, const QString& action) { + const QString hash = browserService()->getDatabaseHash(); + const QString nonce = json.value("nonce").toString(); + const QString encrypted = json.value("message").toString(); + if (!m_associated) { return getErrorReply(action, ERROR_KEEPASS_ASSOCIATION_FAILED); } - const auto browserRequest = decodeRequest(json); - if (browserRequest.isEmpty()) { + const QJsonObject decrypted = decryptMessage(encrypted, nonce); + if (decrypted.isEmpty()) { return getErrorReply(action, ERROR_KEEPASS_CANNOT_DECRYPT_MESSAGE); } - const auto command = browserRequest.getString("action"); - if (command.isEmpty() || command.compare(BROWSER_REQUEST_CREATE_NEW_GROUP) != 0) { + QString command = decrypted.value("action").toString(); + if (command.isEmpty() || command.compare("create-new-group") != 0) { return getErrorReply(action, ERROR_KEEPASS_INCORRECT_ACTION); } - const auto group = browserRequest.getString("groupName"); - const auto newGroup = browserService()->createNewGroup(group); + QString group = decrypted.value("groupName").toString(); + const QJsonObject newGroup = browserService()->createNewGroup(group); if (newGroup.isEmpty() || newGroup["name"].toString().isEmpty() || newGroup["uuid"].toString().isEmpty()) { return getErrorReply(action, ERROR_KEEPASS_CANNOT_CREATE_NEW_GROUP); } - const Parameters params{{"name", newGroup["name"]}, {"uuid", newGroup["uuid"]}}; - return buildResponse(action, browserRequest.incrementedNonce, params); + const QString newNonce = browserMessageBuilder()->incrementNonce(nonce); + + QJsonObject message = browserMessageBuilder()->buildMessage(newNonce); + message["name"] = newGroup["name"]; + message["uuid"] = newGroup["uuid"]; + + return buildResponse(action, message, newNonce); } QJsonObject BrowserAction::handleGetTotp(const QJsonObject& json, const QString& action) { + const QString nonce = json.value("nonce").toString(); + const QString encrypted = json.value("message").toString(); + if (!m_associated) { return getErrorReply(action, ERROR_KEEPASS_ASSOCIATION_FAILED); } - const auto browserRequest = decodeRequest(json); - if (browserRequest.isEmpty()) { + const QJsonObject decrypted = decryptMessage(encrypted, nonce); + if (decrypted.isEmpty()) { return getErrorReply(action, ERROR_KEEPASS_CANNOT_DECRYPT_MESSAGE); } - const auto command = browserRequest.getString("action"); - if (command.isEmpty() || command.compare(BROWSER_REQUEST_GET_TOTP) != 0) { + QString command = decrypted.value("action").toString(); + if (command.isEmpty() || command.compare("get-totp") != 0) { return getErrorReply(action, ERROR_KEEPASS_INCORRECT_ACTION); } - const auto uuid = browserRequest.getString("uuid"); + const QString uuid = decrypted.value("uuid").toString(); if (!Tools::isValidUuid(uuid)) { return getErrorReply(action, ERROR_KEEPASS_NO_VALID_UUID_PROVIDED); } - const Parameters params{{"totp", browserService()->getCurrentTotp(uuid)}}; - return buildResponse(action, browserRequest.incrementedNonce, params); + // Get the current TOTP + const auto totp = browserService()->getCurrentTotp(uuid); + const QString newNonce = browserMessageBuilder()->incrementNonce(nonce); + + QJsonObject message = browserMessageBuilder()->buildMessage(newNonce); + message["totp"] = totp; + + return buildResponse(action, message, newNonce); } QJsonObject BrowserAction::handleDeleteEntry(const QJsonObject& json, const QString& action) { + const QString nonce = json.value("nonce").toString(); + const QString encrypted = json.value("message").toString(); + if (!m_associated) { return getErrorReply(action, ERROR_KEEPASS_ASSOCIATION_FAILED); } - const auto browserRequest = decodeRequest(json); - if (browserRequest.isEmpty()) { + const QJsonObject decrypted = decryptMessage(encrypted, nonce); + if (decrypted.isEmpty()) { return getErrorReply(action, ERROR_KEEPASS_CANNOT_DECRYPT_MESSAGE); } - const auto command = browserRequest.getString("action"); - if (command.isEmpty() || command.compare(BROWSER_REQUEST_DELETE_ENTRY) != 0) { + QString command = decrypted.value("action").toString(); + if (command.isEmpty() || command.compare("delete-entry") != 0) { return getErrorReply(action, ERROR_KEEPASS_INCORRECT_ACTION); } - const auto uuid = browserRequest.getString("uuid"); + const auto uuid = decrypted.value("uuid").toString(); if (!Tools::isValidUuid(uuid)) { return getErrorReply(action, ERROR_KEEPASS_NO_VALID_UUID_PROVIDED); } const auto result = browserService()->deleteEntry(uuid); - const Parameters params{{"success", result ? TRUE_STR : FALSE_STR}}; - return buildResponse(action, browserRequest.incrementedNonce, params); + const QString newNonce = browserMessageBuilder()->incrementNonce(nonce); + QJsonObject message = browserMessageBuilder()->buildMessage(newNonce); + message["success"] = result ? TRUE_STR : FALSE_STR; + + return buildResponse(action, message, newNonce); } QJsonObject BrowserAction::handleGlobalAutoType(const QJsonObject& json, const QString& action) { - const auto browserRequest = decodeRequest(json); - if (browserRequest.isEmpty()) { + const QString nonce = json.value("nonce").toString(); + const QString encrypted = json.value("message").toString(); + const QJsonObject decrypted = decryptMessage(encrypted, nonce); + + if (decrypted.isEmpty()) { return getErrorReply(action, ERROR_KEEPASS_CANNOT_DECRYPT_MESSAGE); } - const auto command = browserRequest.getString("action"); - if (command.isEmpty() || command.compare(BROWSER_REQUEST_REQUEST_AUTOTYPE) != 0) { + QString command = decrypted.value("action").toString(); + if (command.isEmpty() || command.compare("request-autotype") != 0) { return getErrorReply(action, ERROR_KEEPASS_INCORRECT_ACTION); } - const auto topLevelDomain = browserRequest.getString("search"); + const auto topLevelDomain = decrypted.value("search").toString(); if (topLevelDomain.length() > BrowserAction::MaxUrlLength) { return getErrorReply(action, ERROR_KEEPASS_NO_URL_PROVIDED); } browserService()->requestGlobalAutoType(topLevelDomain); - return buildResponse(action, browserRequest.incrementedNonce); + const QString newNonce = browserMessageBuilder()->incrementNonce(nonce); + QJsonObject message = browserMessageBuilder()->buildMessage(newNonce); + return buildResponse(action, message, newNonce); } -#ifdef WITH_XC_BROWSER_PASSKEYS -QJsonObject BrowserAction::handlePasskeysGet(const QJsonObject& json, const QString& action) -{ - if (!m_associated) { - return getErrorReply(action, ERROR_KEEPASS_ASSOCIATION_FAILED); - } - - const auto browserRequest = decodeRequest(json); - if (browserRequest.isEmpty()) { - return getErrorReply(action, ERROR_KEEPASS_CANNOT_DECRYPT_MESSAGE); - } - - const auto command = browserRequest.getString("action"); - if (command.isEmpty() || command.compare(BROWSER_REQUEST_PASSKEYS_GET) != 0) { - return getErrorReply(action, ERROR_KEEPASS_INCORRECT_ACTION); - } - - const auto publicKey = browserRequest.getObject("publicKey"); - if (publicKey.isEmpty()) { - return getErrorReply(action, ERROR_PASSKEYS_EMPTY_PUBLIC_KEY); - } - - const auto origin = browserRequest.getString("origin"); - if (!passkeyUtils()->isOriginAllowedWithLocalhost(browserSettings()->allowLocalhostWithPasskeys(), origin)) { - return getErrorReply(action, ERROR_PASSKEYS_INVALID_URL_PROVIDED); - } - - const auto keyList = getConnectionKeys(browserRequest); - const auto response = browserService()->showPasskeysAuthenticationPrompt(publicKey, origin, keyList); - - const Parameters params{{"response", response}}; - return buildResponse(action, browserRequest.incrementedNonce, params); -} - -QJsonObject BrowserAction::handlePasskeysRegister(const QJsonObject& json, const QString& action) -{ - if (!m_associated) { - return getErrorReply(action, ERROR_KEEPASS_ASSOCIATION_FAILED); - } - - const auto browserRequest = decodeRequest(json); - if (browserRequest.isEmpty()) { - return getErrorReply(action, ERROR_KEEPASS_CANNOT_DECRYPT_MESSAGE); - } - - const auto command = browserRequest.getString("action"); - if (command.isEmpty() || command.compare(BROWSER_REQUEST_PASSKEYS_REGISTER) != 0) { - return getErrorReply(action, ERROR_KEEPASS_INCORRECT_ACTION); - } - - const auto publicKey = browserRequest.getObject("publicKey"); - if (publicKey.isEmpty()) { - return getErrorReply(action, ERROR_PASSKEYS_EMPTY_PUBLIC_KEY); - } - - const auto origin = browserRequest.getString("origin"); - if (!passkeyUtils()->isOriginAllowedWithLocalhost(browserSettings()->allowLocalhostWithPasskeys(), origin)) { - return getErrorReply(action, ERROR_PASSKEYS_INVALID_URL_PROVIDED); - } - - const auto groupName = browserRequest.getString("groupName"); - const auto keyList = getConnectionKeys(browserRequest); - const auto response = browserService()->showPasskeysRegisterPrompt(publicKey, origin, groupName, keyList); - - const Parameters params{{"response", response}}; - return buildResponse(action, browserRequest.incrementedNonce, params); -} -#endif - QJsonObject BrowserAction::decryptMessage(const QString& message, const QString& nonce) { return browserMessageBuilder()->decryptMessage(message, nonce, m_clientPublicKey, m_secretKey); @@ -598,31 +562,7 @@ QJsonObject BrowserAction::getErrorReply(const QString& action, const int errorC return browserMessageBuilder()->getErrorReply(action, errorCode); } -QJsonObject BrowserAction::buildResponse(const QString& action, const QString& nonce, const Parameters& params) +QJsonObject BrowserAction::buildResponse(const QString& action, const QJsonObject& message, const QString& nonce) { - return browserMessageBuilder()->buildResponse(action, nonce, params, m_clientPublicKey, m_secretKey); -} - -BrowserRequest BrowserAction::decodeRequest(const QJsonObject& json) -{ - const auto nonce = json.value("nonce").toString(); - const auto encrypted = json.value("message").toString(); - - return {browserService()->getDatabaseHash(), - nonce, - browserMessageBuilder()->incrementNonce(nonce), - decryptMessage(encrypted, nonce)}; -} - -StringPairList BrowserAction::getConnectionKeys(const BrowserRequest& browserRequest) -{ - const auto keys = browserRequest.getArray("keys"); - - StringPairList keyList; - for (const auto val : keys) { - const auto keyObject = val.toObject(); - keyList.push_back(qMakePair(keyObject.value("id").toString(), keyObject.value("key").toString())); - } - - return keyList; + return browserMessageBuilder()->buildResponse(action, message, nonce, m_clientPublicKey, m_secretKey); } diff --git a/src/browser/BrowserAction.h b/src/browser/BrowserAction.h index 5c115f5f1..49c66b644 100644 --- a/src/browser/BrowserAction.h +++ b/src/browser/BrowserAction.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2023 KeePassXC Team + * Copyright (C) 2022 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 @@ -15,51 +15,14 @@ * along with this program. If not, see . */ -#ifndef KEEPASSXC_BROWSERACTION_H -#define KEEPASSXC_BROWSERACTION_H +#ifndef BROWSERACTION_H +#define BROWSERACTION_H -#include "BrowserMessageBuilder.h" -#include "BrowserService.h" - -#include -#include #include +class QJsonObject; class QLocalSocket; -struct BrowserRequest -{ - QString hash; - QString nonce; - QString incrementedNonce; - QJsonObject decrypted; - - inline bool isEmpty() const - { - return decrypted.isEmpty(); - } - - inline QJsonArray getArray(const QString& param) const - { - return decrypted.value(param).toArray(); - } - - inline bool getBool(const QString& param) const - { - return decrypted.value(param).toBool(); - } - - inline QJsonObject getObject(const QString& param) const - { - return decrypted.value(param).toObject(); - } - - inline QString getString(const QString& param) const - { - return decrypted.value(param).toString(); - } -}; - class BrowserAction { public: @@ -79,22 +42,16 @@ private: 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 handleGetDatabaseEntries(const QJsonObject& json, const QString& action); QJsonObject handleCreateNewGroup(const QJsonObject& json, const QString& action); QJsonObject handleGetTotp(const QJsonObject& json, const QString& action); QJsonObject handleDeleteEntry(const QJsonObject& json, const QString& action); QJsonObject handleGlobalAutoType(const QJsonObject& json, const QString& action); -#ifdef WITH_XC_BROWSER_PASSKEYS - QJsonObject handlePasskeysGet(const QJsonObject& json, const QString& action); - QJsonObject handlePasskeysRegister(const QJsonObject& json, const QString& action); -#endif private: - QJsonObject buildResponse(const QString& action, const QString& nonce, const Parameters& params = {}); + 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; QJsonObject decryptMessage(const QString& message, const QString& nonce); - BrowserRequest decodeRequest(const QJsonObject& json); - StringPairList getConnectionKeys(const BrowserRequest& browserRequest); private: static const int MaxUrlLength; @@ -107,4 +64,4 @@ private: friend class TestBrowser; }; -#endif // KEEPASSXC_BROWSERACTION_H +#endif // BROWSERACTION_H diff --git a/src/browser/BrowserCbor.cpp b/src/browser/BrowserCbor.cpp deleted file mode 100644 index 7b151c410..000000000 --- a/src/browser/BrowserCbor.cpp +++ /dev/null @@ -1,271 +0,0 @@ -/* - * Copyright (C) 2024 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 "BrowserCbor.h" -#include "BrowserMessageBuilder.h" -#include -#include -#include - -// https://w3c.github.io/webauthn/#sctn-none-attestation -// https://w3c.github.io/webauthn/#sctn-generating-an-attestation-object -QByteArray BrowserCbor::cborEncodeAttestation(const QByteArray& authData) const -{ - QByteArray result; - QCborStreamWriter writer(&result); - - writer.startMap(3); - - writer.append("fmt"); - writer.append("none"); - - writer.append("attStmt"); - writer.startMap(0); - writer.endMap(); - - writer.append("authData"); - writer.appendByteString(authData.constData(), authData.size()); - - writer.endMap(); - - return result; -} - -// https://w3c.github.io/webauthn/#authdata-attestedcredentialdata-credentialpublickey -QByteArray BrowserCbor::cborEncodePublicKey(int alg, const QByteArray& first, const QByteArray& second) const -{ - const auto keyType = getCoseKeyType(alg); - if (keyType == 0) { - return {}; - } - - const auto curveParameter = getCurveParameter(alg); - if ((alg == WebAuthnAlgorithms::ES256 || alg == WebAuthnAlgorithms::EDDSA) && curveParameter == 0) { - return {}; - } - - QByteArray result; - QCborStreamWriter writer(&result); - - if (alg == WebAuthnAlgorithms::ES256) { - writer.startMap(5); - - // Key type - writer.append(1); - writer.append(keyType); - - // Signature algorithm - writer.append(3); - writer.append(alg); - - // Curve parameter - writer.append(-1); - writer.append(curveParameter); - - // Key x-coordinate - writer.append(-2); - writer.append(first); - - // Key y-coordinate - writer.append(-3); - writer.append(second); - - writer.endMap(); - } else if (alg == WebAuthnAlgorithms::RS256) { - writer.startMap(4); - - // Key type - writer.append(1); - writer.append(keyType); - - // Signature algorithm - writer.append(3); - writer.append(alg); - - // Key modulus - writer.append(-1); - writer.append(first); - - // Key exponent - writer.append(-2); - writer.append(second); - - writer.endMap(); - } else if (alg == WebAuthnAlgorithms::EDDSA) { - writer.startMap(4); - - // Key type - writer.append(1); - writer.append(keyType); - - // Algorithm - writer.append(3); - writer.append(alg); - - // Curve parameter - writer.append(-1); - writer.append(curveParameter); - - // Public key - writer.append(-2); - writer.append(first); - - writer.endMap(); - } - - return result; -} - -// See: https://fidoalliance.org/specs/common-specs/fido-registry-v2.1-ps-20191217.html#user-verification-methods -QByteArray BrowserCbor::cborEncodeExtensionData(const QJsonObject& extensions) const -{ - if (extensions.empty()) { - return {}; - } - - QByteArray result; - QCborStreamWriter writer(&result); - - writer.startMap(extensions.keys().count()); - - // https://w3c.github.io/webauthn/#sctn-authenticator-credential-properties-extension - if (extensions["credProps"].toBool()) { - writer.append("credProps"); - writer.startMap(1); - writer.append("rk"); - writer.append(true); - writer.endMap(); - } - - // https://w3c.github.io/webauthn/#sctn-uvm-extension - if (extensions["uvm"].toBool()) { - writer.append("uvm"); - - writer.startArray(1); - writer.startArray(3); - - // userVerificationMethod (USER_VERIFY_PRESENCE_INTERNAL "presence_internal", 0x00000001) - writer.append(quint32(1)); - - // keyProtectionType (KEY_PROTECTION_SOFTWARE "software", 0x0001) - writer.append(quint16(1)); - - // matcherProtectionType (MATCHER_PROTECTION_SOFTWARE "software", 0x0001) - writer.append(quint16(1)); - - writer.endArray(); - writer.endArray(); - } - - writer.endMap(); - - return result; -} - -QJsonObject BrowserCbor::getJsonFromCborData(const QByteArray& byteArray) const -{ - auto reader = QCborStreamReader(byteArray); - auto contents = QCborValue::fromCbor(reader); - if (reader.lastError()) { - return {}; - } - - const auto ret = handleCborValue(contents); - - // Parse variant result to QJsonDocument - const auto jsonDocument = QJsonDocument::fromVariant(ret); - if (jsonDocument.isNull() || jsonDocument.isEmpty()) { - return {}; - } - - return jsonDocument.object(); -} - -QVariant BrowserCbor::handleCborArray(const QCborArray& array) const -{ - QVariantList result; - result.reserve(array.size()); - - for (auto a : array) { - result.append(handleCborValue(a)); - } - - return result; -} - -QVariant BrowserCbor::handleCborMap(const QCborMap& map) const -{ - QVariantMap result; - for (auto pair : map) { - result.insert(handleCborValue(pair.first).toString(), handleCborValue(pair.second)); - } - - return QVariant::fromValue(result); -} - -QVariant BrowserCbor::handleCborValue(const QCborValue& value) const -{ - if (value.isArray()) { - return handleCborArray(value.toArray()); - } else if (value.isMap()) { - return handleCborMap(value.toMap()); - } else if (value.isByteArray()) { - auto ba = value.toByteArray(); - - // Return base64 instead of raw byte array - auto base64Str = browserMessageBuilder()->getBase64FromArray(ba); - return QVariant::fromValue(base64Str); - } - - return value.toVariant(); -} - -// https://www.rfc-editor.org/rfc/rfc8152#section-13.1 -unsigned int BrowserCbor::getCurveParameter(int alg) const -{ - switch (alg) { - case WebAuthnAlgorithms::ES256: - return WebAuthnCurveKey::P256; - case WebAuthnAlgorithms::ES384: - return WebAuthnCurveKey::P384; - case WebAuthnAlgorithms::ES512: - return WebAuthnCurveKey::P521; - case WebAuthnAlgorithms::EDDSA: - return WebAuthnCurveKey::ED25519; - default: - return WebAuthnCurveKey::INVALID_CURVE_KEY; - } -} - -// See: https://www.rfc-editor.org/rfc/rfc8152 -// AES/HMAC/ChaCha20 etc. carries symmetric keys (4) and OKP not supported currently. -unsigned int BrowserCbor::getCoseKeyType(int alg) const -{ - switch (alg) { - case WebAuthnAlgorithms::ES256: - return WebAuthnCoseKeyType::EC2; - case WebAuthnAlgorithms::ES384: - case WebAuthnAlgorithms::ES512: - return WebAuthnCoseKeyType::INVALID_COSE_KEY_TYPE; - case WebAuthnAlgorithms::EDDSA: - return WebAuthnCoseKeyType::OKP; - case WebAuthnAlgorithms::RS256: - return WebAuthnCoseKeyType::RSA; - default: - return WebAuthnCoseKeyType::INVALID_COSE_KEY_TYPE; - } -} diff --git a/src/browser/BrowserCbor.h b/src/browser/BrowserCbor.h deleted file mode 100644 index 52baa4fc8..000000000 --- a/src/browser/BrowserCbor.h +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright (C) 2024 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 KEEPASSXC_BROWSERCBOR_H -#define KEEPASSXC_BROWSERCBOR_H - -#include -#include -#include -#include - -enum WebAuthnAlgorithms : int -{ - ES256 = -7, - EDDSA = -8, - ES384 = -35, - ES512 = -36, - RS256 = -257 -}; - -// https://www.rfc-editor.org/rfc/rfc9053#section-7.1 -enum WebAuthnCurveKey : int -{ - INVALID_CURVE_KEY = 0, - P256 = 1, // EC2, NIST P-256, also known as secp256r1 - P384 = 2, // EC2, NIST P-384, also known as secp384r1 - P521 = 3, // EC2, NIST P-521, also known as secp521r1 - X25519 = 4, // OKP, X25519 for use w/ ECDH only - X448 = 5, // OKP, X448 for use w/ ECDH only - ED25519 = 6, // OKP, Ed25519 for use w/ EdDSA only - ED448 = 7 // OKP, Ed448 for use w/ EdDSA only -}; - -// https://www.rfc-editor.org/rfc/rfc8152 -// For RSA: https://www.rfc-editor.org/rfc/rfc8230#section-4 -enum WebAuthnCoseKeyType : int -{ - INVALID_COSE_KEY_TYPE = 0, - OKP = 1, // Octet Keypair - EC2 = 2, // Elliptic Curve - RSA = 3 // RSA -}; - -class BrowserCbor -{ -public: - QByteArray cborEncodeAttestation(const QByteArray& authData) const; - QByteArray cborEncodePublicKey(int alg, const QByteArray& first, const QByteArray& second) const; - QByteArray cborEncodeExtensionData(const QJsonObject& extensions) const; - QJsonObject getJsonFromCborData(const QByteArray& byteArray) const; - QVariant handleCborArray(const QCborArray& array) const; - QVariant handleCborMap(const QCborMap& map) const; - QVariant handleCborValue(const QCborValue& value) const; - unsigned int getCoseKeyType(int alg) const; - unsigned int getCurveParameter(int alg) const; -}; - -#endif // KEEPASSXC_BROWSERCBOR_H diff --git a/src/browser/BrowserEntryConfig.cpp b/src/browser/BrowserEntryConfig.cpp index 63d3bd16b..a5bd3263f 100644 --- a/src/browser/BrowserEntryConfig.cpp +++ b/src/browser/BrowserEntryConfig.cpp @@ -19,7 +19,6 @@ #include "BrowserEntryConfig.h" #include "core/Entry.h" -#include "core/Global.h" #include "core/Tools.h" #include @@ -35,22 +34,22 @@ BrowserEntryConfig::BrowserEntryConfig(QObject* parent) QStringList BrowserEntryConfig::allowedHosts() const { - return m_allowedHosts.values(); + return m_allowedHosts.toList(); } void BrowserEntryConfig::setAllowedHosts(const QStringList& allowedHosts) { - m_allowedHosts = Tools::asSet(allowedHosts); + m_allowedHosts = allowedHosts.toSet(); } QStringList BrowserEntryConfig::deniedHosts() const { - return m_deniedHosts.values(); + return m_deniedHosts.toList(); } void BrowserEntryConfig::setDeniedHosts(const QStringList& deniedHosts) { - m_deniedHosts = Tools::asSet(deniedHosts); + m_deniedHosts = deniedHosts.toSet(); } bool BrowserEntryConfig::isAllowed(const QString& host) const diff --git a/src/browser/BrowserEntryConfig.h b/src/browser/BrowserEntryConfig.h index 2cb76d5f5..6de4b0bc5 100644 --- a/src/browser/BrowserEntryConfig.h +++ b/src/browser/BrowserEntryConfig.h @@ -16,8 +16,8 @@ * along with this program. If not, see . */ -#ifndef KEEPASSXC_BROWSERENTRYCONFIG_H -#define KEEPASSXC_BROWSERENTRYCONFIG_H +#ifndef BROWSERENTRYCONFIG_H +#define BROWSERENTRYCONFIG_H #include #include @@ -55,4 +55,4 @@ private: QString m_realm; }; -#endif // KEEPASSXC_BROWSERENTRYCONFIG_H +#endif // BROWSERENTRYCONFIG_H diff --git a/src/browser/BrowserEntrySaveDialog.h b/src/browser/BrowserEntrySaveDialog.h index 44b3d6601..8675e36fa 100644 --- a/src/browser/BrowserEntrySaveDialog.h +++ b/src/browser/BrowserEntrySaveDialog.h @@ -16,8 +16,8 @@ * along with this program. If not, see . */ -#ifndef KEEPASSXC_BROWSERENTRYSAVEDIALOG_H -#define KEEPASSXC_BROWSERENTRYSAVEDIALOG_H +#ifndef BROWSERENTRYSAVEDIALOG_H +#define BROWSERENTRYSAVEDIALOG_H #include "gui/DatabaseTabWidget.h" @@ -45,4 +45,4 @@ private: QScopedPointer m_ui; }; -#endif // KEEPASSXC_BROWSERENTRYSAVEDIALOG_H +#endif // BROWSERENTRYSAVEDIALOG_H diff --git a/src/browser/BrowserEntrySaveDialog.ui b/src/browser/BrowserEntrySaveDialog.ui old mode 100644 new mode 100755 index 2928f70ad..5beb6fab8 --- a/src/browser/BrowserEntrySaveDialog.ui +++ b/src/browser/BrowserEntrySaveDialog.ui @@ -11,7 +11,7 @@
    - KeePassXC - Select Database + KeePassXC-Browser Save Entry diff --git a/src/browser/BrowserHost.h b/src/browser/BrowserHost.h index f3620c04c..86f20f1e2 100644 --- a/src/browser/BrowserHost.h +++ b/src/browser/BrowserHost.h @@ -15,8 +15,8 @@ * along with this program. If not, see . */ -#ifndef KEEPASSXC_NATIVEMESSAGINGHOST_H -#define KEEPASSXC_NATIVEMESSAGINGHOST_H +#ifndef NATIVEMESSAGINGHOST_H +#define NATIVEMESSAGINGHOST_H #include #include @@ -56,4 +56,4 @@ private: QList m_socketList; }; -#endif // KEEPASSXC_NATIVEMESSAGINGHOST_H +#endif // NATIVEMESSAGINGHOST_H diff --git a/src/browser/BrowserMessageBuilder.cpp b/src/browser/BrowserMessageBuilder.cpp index e7b398c6a..e537205df 100644 --- a/src/browser/BrowserMessageBuilder.cpp +++ b/src/browser/BrowserMessageBuilder.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2023 KeePassXC Team + * Copyright (C) 2022 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,14 +19,11 @@ #include "BrowserShared.h" #include "config-keepassx.h" #include "core/Global.h" +#include "core/Tools.h" -#include #include #include #include -#ifdef QT_DEBUG -#include -#endif #include @@ -69,24 +66,17 @@ QJsonObject BrowserMessageBuilder::buildMessage(const QString& nonce) const } QJsonObject BrowserMessageBuilder::buildResponse(const QString& action, + const QJsonObject& message, const QString& nonce, - const Parameters& params, const QString& publicKey, const QString& secretKey) { - auto message = buildMessage(nonce); - - Parameters::const_iterator i; - for (i = params.constBegin(); i != params.constEnd(); ++i) { - message[i.key()] = QJsonValue::fromVariant(i.value()); - } - - const auto encryptedMessage = encryptMessage(message, nonce, publicKey, secretKey); + QJsonObject response; + QString encryptedMessage = encryptMessage(message, nonce, publicKey, secretKey); if (encryptedMessage.isEmpty()) { return getErrorReply(action, ERROR_KEEPASS_CANNOT_ENCRYPT_MESSAGE); } - QJsonObject response; response["action"] = action; response["message"] = encryptedMessage; response["nonce"] = nonce; @@ -126,36 +116,6 @@ QString BrowserMessageBuilder::getErrorMessage(const int errorCode) const return QObject::tr("Cannot create new group"); case ERROR_KEEPASS_NO_VALID_UUID_PROVIDED: return QObject::tr("No valid UUID provided"); - case ERROR_KEEPASS_ACCESS_TO_ALL_ENTRIES_DENIED: - return QObject::tr("Access to all entries is denied"); - case ERROR_PASSKEYS_ATTESTATION_NOT_SUPPORTED: - return QObject::tr("Attestation not supported"); - case ERROR_PASSKEYS_CREDENTIAL_IS_EXCLUDED: - return QObject::tr("Credential is excluded"); - case ERROR_PASSKEYS_REQUEST_CANCELED: - return QObject::tr("Passkeys request canceled"); - case ERROR_PASSKEYS_INVALID_USER_VERIFICATION: - return QObject::tr("Invalid user verification"); - case ERROR_PASSKEYS_EMPTY_PUBLIC_KEY: - return QObject::tr("Empty public key"); - case ERROR_PASSKEYS_INVALID_URL_PROVIDED: - return QObject::tr("Invalid URL provided"); - case ERROR_PASSKEYS_ORIGIN_NOT_ALLOWED: - return QObject::tr("Origin is empty or not allowed"); - case ERROR_PASSKEYS_DOMAIN_IS_NOT_VALID: - return QObject::tr("Effective domain is not a valid domain"); - case ERROR_PASSKEYS_DOMAIN_RPID_MISMATCH: - return QObject::tr("Origin and RP ID do not match"); - case ERROR_PASSKEYS_NO_SUPPORTED_ALGORITHMS: - return QObject::tr("No supported algorithms were provided"); - case ERROR_PASSKEYS_WAIT_FOR_LIFETIMER: - return QObject::tr("Wait for timer to expire"); - case ERROR_PASSKEYS_UNKNOWN_ERROR: - return QObject::tr("Unknown passkeys error"); - case ERROR_PASSKEYS_INVALID_CHALLENGE: - return QObject::tr("Challenge is shorter than required minimum length"); - case ERROR_PASSKEYS_INVALID_USER_ID: - return QObject::tr("user.id does not match the required length"); default: return QObject::tr("Unknown error"); } @@ -167,7 +127,7 @@ QString BrowserMessageBuilder::encryptMessage(const QJsonObject& message, const QString& secretKey) { if (message.isEmpty() || nonce.isEmpty()) { - return {}; + return QString(); } const QString reply(QJsonDocument(message).toJson()); @@ -175,7 +135,7 @@ QString BrowserMessageBuilder::encryptMessage(const QJsonObject& message, return encrypt(reply, nonce, publicKey, secretKey); } - return {}; + return QString(); } QJsonObject BrowserMessageBuilder::decryptMessage(const QString& message, @@ -184,12 +144,12 @@ QJsonObject BrowserMessageBuilder::decryptMessage(const QString& message, const QString& secretKey) { if (message.isEmpty() || nonce.isEmpty()) { - return {}; + return QJsonObject(); } QByteArray ba = decrypt(message, nonce, publicKey, secretKey); if (ba.isEmpty()) { - return {}; + return QJsonObject(); } return getJsonObject(ba); @@ -214,7 +174,7 @@ QString BrowserMessageBuilder::encrypt(const QString& plaintext, e.resize(BrowserShared::NATIVEMSG_MAX_LENGTH); if (m.empty() || n.empty() || ck.empty() || sk.empty()) { - return {}; + return QString(); } if (crypto_box_easy(e.data(), m.data(), m.size(), n.data(), ck.data(), sk.data()) == 0) { @@ -222,7 +182,7 @@ QString BrowserMessageBuilder::encrypt(const QString& plaintext, return res.toBase64(); } - return {}; + return QString(); } QByteArray BrowserMessageBuilder::decrypt(const QString& encrypted, @@ -244,14 +204,14 @@ QByteArray BrowserMessageBuilder::decrypt(const QString& encrypted, d.resize(BrowserShared::NATIVEMSG_MAX_LENGTH); if (m.empty() || n.empty() || ck.empty() || sk.empty()) { - return {}; + return QByteArray(); } 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 {}; + return QByteArray(); } QString BrowserMessageBuilder::getBase64FromKey(const uchar* array, const uint len) @@ -274,11 +234,6 @@ QJsonObject BrowserMessageBuilder::getJsonObject(const uchar* pArray, const uint QByteArray arr = getQByteArray(pArray, len); QJsonParseError err; QJsonDocument doc(QJsonDocument::fromJson(arr, &err)); -#ifdef QT_DEBUG - if (doc.isNull()) { - qWarning() << "Cannot create QJsonDocument: " << err.errorString(); - } -#endif return doc.object(); } @@ -286,12 +241,6 @@ QJsonObject BrowserMessageBuilder::getJsonObject(const QByteArray& ba) const { QJsonParseError err; QJsonDocument doc(QJsonDocument::fromJson(ba, &err)); -#ifdef QT_DEBUG - if (doc.isNull()) { - qWarning() << "Cannot create QJsonDocument: " << err.errorString(); - } -#endif - return doc.object(); } @@ -308,65 +257,3 @@ QString BrowserMessageBuilder::incrementNonce(const QString& nonce) sodium_increment(n.data(), n.size()); return getQByteArray(n.data(), n.size()).toBase64(); } - -QString BrowserMessageBuilder::getRandomBytesAsBase64(int bytes) const -{ - if (bytes == 0) { - return {}; - } - - std::shared_ptr buf(new unsigned char[bytes]); - Botan::Sodium::randombytes_buf(buf.get(), bytes); - - return getBase64FromArray(reinterpret_cast(buf.get()), bytes); -} - -QString BrowserMessageBuilder::getBase64FromArray(const char* arr, int len) const -{ - if (len < 1) { - return {}; - } - - auto data = QByteArray::fromRawData(arr, len); - return getBase64FromArray(data); -} - -// Returns URL encoded base64 with trailing removed -QString BrowserMessageBuilder::getBase64FromArray(const QByteArray& byteArray) const -{ - if (byteArray.length() < 1) { - return {}; - } - - return byteArray.toBase64(QByteArray::Base64UrlEncoding | QByteArray::OmitTrailingEquals); -} - -QString BrowserMessageBuilder::getBase64FromJson(const QJsonObject& jsonObject) const -{ - if (jsonObject.isEmpty()) { - return {}; - } - - const auto dataArray = QJsonDocument(jsonObject).toJson(QJsonDocument::Compact); - return getBase64FromArray(dataArray); -} - -QByteArray BrowserMessageBuilder::getArrayFromHexString(const QString& hexString) const -{ - return QByteArray::fromHex(hexString.toUtf8()); -} - -QByteArray BrowserMessageBuilder::getArrayFromBase64(const QString& base64str) const -{ - return QByteArray::fromBase64(base64str.toUtf8(), QByteArray::Base64UrlEncoding | QByteArray::OmitTrailingEquals); -} - -QByteArray BrowserMessageBuilder::getSha256Hash(const QString& str) const -{ - return QCryptographicHash::hash(str.toUtf8(), QCryptographicHash::Sha256); -} - -QString BrowserMessageBuilder::getSha256HashAsBase64(const QString& str) const -{ - return getBase64FromArray(QCryptographicHash::hash(str.toUtf8(), QCryptographicHash::Sha256)); -} diff --git a/src/browser/BrowserMessageBuilder.h b/src/browser/BrowserMessageBuilder.h index 5a2f96e16..9dc4f27f0 100644 --- a/src/browser/BrowserMessageBuilder.h +++ b/src/browser/BrowserMessageBuilder.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2024 KeePassXC Team + * Copyright (C) 2022 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 @@ -15,17 +15,14 @@ * along with this program. If not, see . */ -#ifndef KEEPASSXC_BROWSERMESSAGEBUILDER_H -#define KEEPASSXC_BROWSERMESSAGEBUILDER_H +#ifndef BROWSERMESSAGEBUILDER_H +#define BROWSERMESSAGEBUILDER_H #include #include -#include class QJsonObject; -typedef QMap Parameters; - namespace { enum @@ -47,22 +44,7 @@ namespace ERROR_KEEPASS_NO_LOGINS_FOUND = 15, ERROR_KEEPASS_NO_GROUPS_FOUND = 16, ERROR_KEEPASS_CANNOT_CREATE_NEW_GROUP = 17, - ERROR_KEEPASS_NO_VALID_UUID_PROVIDED = 18, - ERROR_KEEPASS_ACCESS_TO_ALL_ENTRIES_DENIED = 19, - ERROR_PASSKEYS_ATTESTATION_NOT_SUPPORTED = 20, - ERROR_PASSKEYS_CREDENTIAL_IS_EXCLUDED = 21, - ERROR_PASSKEYS_REQUEST_CANCELED = 22, - ERROR_PASSKEYS_INVALID_USER_VERIFICATION = 23, - ERROR_PASSKEYS_EMPTY_PUBLIC_KEY = 24, - ERROR_PASSKEYS_INVALID_URL_PROVIDED = 25, - ERROR_PASSKEYS_ORIGIN_NOT_ALLOWED = 26, - ERROR_PASSKEYS_DOMAIN_IS_NOT_VALID = 27, - ERROR_PASSKEYS_DOMAIN_RPID_MISMATCH = 28, - ERROR_PASSKEYS_NO_SUPPORTED_ALGORITHMS = 29, - ERROR_PASSKEYS_WAIT_FOR_LIFETIMER = 30, - ERROR_PASSKEYS_UNKNOWN_ERROR = 31, - ERROR_PASSKEYS_INVALID_CHALLENGE = 32, - ERROR_PASSKEYS_INVALID_USER_ID = 33, + ERROR_KEEPASS_NO_VALID_UUID_PROVIDED = 18 }; } @@ -73,10 +55,11 @@ public: static BrowserMessageBuilder* instance(); QPair getKeyPair(); + QJsonObject buildMessage(const QString& nonce) const; QJsonObject buildResponse(const QString& action, + const QJsonObject& message, const QString& nonce, - const Parameters& params, const QString& publicKey, const QString& secretKey); QJsonObject getErrorReply(const QString& action, const int errorCode) const; @@ -98,14 +81,6 @@ public: QJsonObject getJsonObject(const QByteArray& ba) const; QByteArray base64Decode(const QString& str); QString incrementNonce(const QString& nonce); - QString getRandomBytesAsBase64(int bytes) const; - QString getBase64FromArray(const char* arr, int len) const; - QString getBase64FromArray(const QByteArray& byteArray) const; - QString getBase64FromJson(const QJsonObject& jsonObject) const; - QByteArray getArrayFromHexString(const QString& hexString) const; - QByteArray getArrayFromBase64(const QString& base64str) const; - QByteArray getSha256Hash(const QString& str) const; - QString getSha256HashAsBase64(const QString& str) const; private: Q_DISABLE_COPY(BrowserMessageBuilder); @@ -118,4 +93,4 @@ static inline BrowserMessageBuilder* browserMessageBuilder() return BrowserMessageBuilder::instance(); } -#endif // KEEPASSXC_BROWSERMESSAGEBUILDER_H +#endif // BROWSERMESSAGEBUILDER_H diff --git a/src/browser/BrowserPasskeys.cpp b/src/browser/BrowserPasskeys.cpp deleted file mode 100644 index 287b42cca..000000000 --- a/src/browser/BrowserPasskeys.cpp +++ /dev/null @@ -1,454 +0,0 @@ -/* - * Copyright (C) 2025 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 "BrowserPasskeys.h" -#include "BrowserMessageBuilder.h" -#include "BrowserService.h" -#include "PasskeyUtils.h" -#include "config-keepassx.h" -#include "crypto/Random.h" -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -Q_GLOBAL_STATIC(BrowserPasskeys, s_browserPasskeys); - -// KeePassXC AAGUID: fdb141b2-5d84-443e-8a35-4698c205a502 -const QString BrowserPasskeys::AAGUID = QStringLiteral("fdb141b25d84443e8a354698c205a502"); - -// Authenticator capabilities -const QString BrowserPasskeys::ATTACHMENT_CROSS_PLATFORM = QStringLiteral("cross-platform"); -const QString BrowserPasskeys::ATTACHMENT_PLATFORM = QStringLiteral("platform"); -const QString BrowserPasskeys::AUTHENTICATOR_TRANSPORT_INTERNAL = QStringLiteral("internal"); -const QString BrowserPasskeys::AUTHENTICATOR_TRANSPORT_NFC = QStringLiteral("nfc"); -const QString BrowserPasskeys::AUTHENTICATOR_TRANSPORT_USB = QStringLiteral("usb"); -const bool BrowserPasskeys::SUPPORT_RESIDENT_KEYS = true; -const bool BrowserPasskeys::SUPPORT_USER_VERIFICATION = true; - -const QString BrowserPasskeys::PUBLIC_KEY = QStringLiteral("public-key"); -const QString BrowserPasskeys::REQUIREMENT_DISCOURAGED = QStringLiteral("discouraged"); -const QString BrowserPasskeys::REQUIREMENT_PREFERRED = QStringLiteral("preferred"); -const QString BrowserPasskeys::REQUIREMENT_REQUIRED = QStringLiteral("required"); - -const QString BrowserPasskeys::PASSKEYS_ATTESTATION_DIRECT = QStringLiteral("direct"); -const QString BrowserPasskeys::PASSKEYS_ATTESTATION_NONE = QStringLiteral("none"); - -BrowserPasskeys* BrowserPasskeys::instance() -{ - return s_browserPasskeys; -} - -PublicKeyCredential BrowserPasskeys::buildRegisterPublicKeyCredential(const QJsonObject& credentialCreationOptions, - const TestingVariables& testingVariables) -{ - if (!passkeyUtils()->checkCredentialCreationOptions(credentialCreationOptions)) { - return {}; - } - - const auto authenticatorAttachment = credentialCreationOptions["authenticatorAttachment"]; - const auto clientDataJson = credentialCreationOptions["clientDataJSON"].toString(); - const auto extensions = credentialCreationOptions["extensions"].toString(); - const auto credentialId = testingVariables.credentialId.isEmpty() - ? browserMessageBuilder()->getRandomBytesAsBase64(ID_BYTES) - : testingVariables.credentialId; - - // Credential private key - const auto alg = getAlgorithmFromPublicKey(credentialCreationOptions); - const auto privateKey = buildCredentialPrivateKey(alg, testingVariables.first, testingVariables.second); - if (privateKey.cborEncodedPublicKey.isEmpty() && privateKey.privateKeyPem.isEmpty()) { - // Key creation failed - return {}; - } - - // Attestation - const auto attestationObject = buildAttestationObject( - credentialCreationOptions, extensions, credentialId, privateKey.cborEncodedPublicKey, testingVariables); - if (attestationObject.isEmpty()) { - return {}; - } - - // Authenticator data - const auto authenticatorData = buildAuthenticatorData(credentialCreationOptions["rp"]["id"].toString(), extensions); - - // Response - QJsonObject responseObject; - responseObject["attestationObject"] = browserMessageBuilder()->getBase64FromArray(attestationObject); - responseObject["clientDataJSON"] = browserMessageBuilder()->getBase64FromArray(clientDataJson.toUtf8()); - responseObject["clientExtensionResults"] = credentialCreationOptions["clientExtensionResults"]; - - // Additions for extension side functions - responseObject["authenticatorData"] = browserMessageBuilder()->getBase64FromArray(authenticatorData); - responseObject["publicKeyAlgorithm"] = alg; - - // PublicKeyCredential - QJsonObject publicKeyCredential; - publicKeyCredential["authenticatorAttachment"] = authenticatorAttachment; - publicKeyCredential["id"] = credentialId; - publicKeyCredential["response"] = responseObject; - publicKeyCredential["type"] = PUBLIC_KEY; - - PublicKeyCredential result; - result.credentialId = credentialId; - result.key = privateKey.privateKeyPem; - result.response = publicKeyCredential; - return result; -} - -QJsonObject BrowserPasskeys::buildGetPublicKeyCredential(const QJsonObject& assertionOptions, - const QString& credentialId, - const QString& userHandle, - const QString& privateKeyPem) -{ - if (!passkeyUtils()->checkCredentialAssertionOptions(assertionOptions)) { - return {}; - } - - const auto authenticatorData = - buildAuthenticatorData(assertionOptions["rpId"].toString(), assertionOptions["extensions"].toString()); - const auto clientDataJson = assertionOptions["clientDataJson"].toString(); - const auto clientDataArray = clientDataJson.toUtf8(); - - const auto signature = buildSignature(authenticatorData, clientDataArray, privateKeyPem); - if (signature.isEmpty()) { - return {}; - } - - QJsonObject responseObject; - responseObject["authenticatorData"] = browserMessageBuilder()->getBase64FromArray(authenticatorData); - responseObject["clientDataJSON"] = browserMessageBuilder()->getBase64FromArray(clientDataArray); - responseObject["clientExtensionResults"] = assertionOptions["clientExtensionResults"]; - responseObject["signature"] = browserMessageBuilder()->getBase64FromArray(signature); - responseObject["userHandle"] = userHandle; - - QJsonObject publicKeyCredential; - publicKeyCredential["authenticatorAttachment"] = BrowserPasskeys::ATTACHMENT_PLATFORM; - publicKeyCredential["id"] = credentialId; - publicKeyCredential["response"] = responseObject; - publicKeyCredential["type"] = PUBLIC_KEY; - - return publicKeyCredential; -} - -// https://w3c.github.io/webauthn/#attestation-object -QByteArray BrowserPasskeys::buildAttestationObject(const QJsonObject& credentialCreationOptions, - const QString& extensions, - const QString& credentialId, - const QByteArray& cborEncodedPublicKey, - const TestingVariables& testingVariables) -{ - QByteArray result; - - // Create SHA256 hash from rpId - const auto rpIdHash = browserMessageBuilder()->getSha256Hash(credentialCreationOptions["rp"]["id"].toString()); - result.append(rpIdHash); - - // Use default flags - const auto flags = setFlagsFromJson(QJsonObject( - {{"ED", !extensions.isEmpty()}, {"AT", true}, {"BS", false}, {"BE", false}, {"UV", true}, {"UP", true}})); - result.append(flags); - - // Signature counter (not supported, always 0 - const char counter[4] = {0x00, 0x00, 0x00, 0x00}; - result.append(QByteArray::fromRawData(counter, 4)); - - // AAGUID - result.append(browserMessageBuilder()->getArrayFromHexString(AAGUID)); - - // Credential length - const char credentialLength[2] = {0x00, ID_BYTES}; - result.append(QByteArray::fromRawData(credentialLength, 2)); - - // Credential Id - result.append(QByteArray::fromBase64( - testingVariables.credentialId.isEmpty() ? credentialId.toUtf8() : testingVariables.credentialId.toUtf8(), - QByteArray::Base64UrlEncoding)); - - // Credential public key - result.append(cborEncodedPublicKey); - - // Add extension data if available - if (!extensions.isEmpty()) { - result.append(browserMessageBuilder()->getArrayFromBase64(extensions)); - } - - // The final result should be CBOR encoded - return m_browserCbor.cborEncodeAttestation(result); -} - -// Build a short version of the attestation object for webauthn.get -QByteArray BrowserPasskeys::buildAuthenticatorData(const QString& rpId, const QString& extensions) -{ - QByteArray result; - - const auto rpIdHash = browserMessageBuilder()->getSha256Hash(rpId); - result.append(rpIdHash); - - const auto flags = setFlagsFromJson(QJsonObject( - {{"ED", !extensions.isEmpty()}, {"AT", false}, {"BS", false}, {"BE", false}, {"UV", true}, {"UP", true}})); - result.append(flags); - - // Signature counter (not supported, always 0 - const char counter[4] = {0x00, 0x00, 0x00, 0x00}; - result.append(QByteArray::fromRawData(counter, 4)); - - if (!extensions.isEmpty()) { - result.append(browserMessageBuilder()->getArrayFromBase64(extensions)); - } - - return result; -} - -// See: https://w3c.github.io/webauthn/#sctn-encoded-credPubKey-examples -AttestationKeyPair -BrowserPasskeys::buildCredentialPrivateKey(int alg, const QString& predefinedFirst, const QString& predefinedSecond) -{ - // Only support -7, P256 (EC), -8 (EdDSA) and -257 (RSA) for now - if (alg != WebAuthnAlgorithms::ES256 && alg != WebAuthnAlgorithms::RS256 && alg != WebAuthnAlgorithms::EDDSA) { - return {}; - } - - QByteArray firstPart; - QByteArray secondPart; - QByteArray pem; - - if (!predefinedFirst.isEmpty() && !predefinedSecond.isEmpty()) { - firstPart = browserMessageBuilder()->getArrayFromBase64(predefinedFirst); - secondPart = browserMessageBuilder()->getArrayFromBase64(predefinedSecond); - } else { - if (alg == WebAuthnAlgorithms::ES256) { - try { - Botan::ECDSA_PrivateKey privateKey(*randomGen()->getRng(), Botan::EC_Group("secp256r1")); - const auto& publicPoint = privateKey.public_point(); - auto x = publicPoint.get_affine_x(); - auto y = publicPoint.get_affine_y(); - firstPart = bigIntToQByteArray(x); - secondPart = bigIntToQByteArray(y); - - auto privateKeyPem = Botan::PKCS8::PEM_encode(privateKey); - pem = QByteArray::fromStdString(privateKeyPem); - } catch (std::exception& e) { - qWarning("BrowserWebAuthn::buildCredentialPrivateKey: Could not create EC2 private key: %s", e.what()); - return {}; - } - } else if (alg == WebAuthnAlgorithms::RS256) { - try { - Botan::RSA_PrivateKey privateKey(*randomGen()->getRng(), RSA_BITS, RSA_EXPONENT); - auto modulus = privateKey.get_n(); - auto exponent = privateKey.get_e(); - firstPart = bigIntToQByteArray(modulus); - secondPart = bigIntToQByteArray(exponent); - - auto privateKeyPem = Botan::PKCS8::PEM_encode(privateKey); - pem = QByteArray::fromStdString(privateKeyPem); - } catch (std::exception& e) { - qWarning("BrowserWebAuthn::buildCredentialPrivateKey: Could not create RSA private key: %s", e.what()); - return {}; - } - } else if (alg == WebAuthnAlgorithms::EDDSA) { - try { - Botan::Ed25519_PrivateKey key(*randomGen()->getRng()); - auto publicKey = key.get_public_key(); -#ifdef WITH_XC_BOTAN3 - auto privateKey = key.raw_private_key_bits(); -#else - auto privateKey = key.get_private_key(); -#endif - firstPart = browserMessageBuilder()->getQByteArray(publicKey.data(), publicKey.size()); - secondPart = browserMessageBuilder()->getQByteArray(privateKey.data(), privateKey.size()); - - auto privateKeyPem = Botan::PKCS8::PEM_encode(key); - pem = QByteArray::fromStdString(privateKeyPem); - } catch (std::exception& e) { - qWarning("BrowserWebAuthn::buildCredentialPrivateKey: Could not create EdDSA private key: %s", - e.what()); - return {}; - } - } - } - - auto result = m_browserCbor.cborEncodePublicKey(alg, firstPart, secondPart); - if (result.isEmpty()) { - return {}; - } - - AttestationKeyPair attestationKeyPair; - attestationKeyPair.cborEncodedPublicKey = result; - attestationKeyPair.privateKeyPem = pem; - return attestationKeyPair; -} - -QByteArray BrowserPasskeys::buildSignature(const QByteArray& authenticatorData, - const QByteArray& clientData, - const QString& privateKeyPem) -{ - const auto clientDataHash = browserMessageBuilder()->getSha256Hash(clientData); - const auto attToBeSigned = authenticatorData + clientDataHash; - - try { - const auto privateKeyArray = privateKeyPem.toUtf8(); - Botan::DataSource_Memory dataSource(reinterpret_cast(privateKeyArray.constData()), - privateKeyArray.size()); - - const auto key = Botan::PKCS8::load_key(dataSource).release(); - const auto privateKeyBytes = key->private_key_bits(); - const auto algName = key->algo_name(); - const auto algId = key->algorithm_identifier(); - - std::vector rawSignature; - if (algName == "ECDSA") { - Botan::ECDSA_PrivateKey privateKey(algId, privateKeyBytes); -#ifdef WITH_XC_BOTAN3 - Botan::PK_Signer signer( - privateKey, *randomGen()->getRng(), "EMSA1(SHA-256)", Botan::Signature_Format::DerSequence); -#else - Botan::PK_Signer signer(privateKey, *randomGen()->getRng(), "EMSA1(SHA-256)", Botan::DER_SEQUENCE); -#endif - - signer.update(reinterpret_cast(attToBeSigned.constData()), attToBeSigned.size()); - rawSignature = signer.signature(*randomGen()->getRng()); - } else if (algName == "RSA") { - Botan::RSA_PrivateKey privateKey(algId, privateKeyBytes); - Botan::PK_Signer signer(privateKey, *randomGen()->getRng(), "EMSA3(SHA-256)"); - - signer.update(reinterpret_cast(attToBeSigned.constData()), attToBeSigned.size()); - rawSignature = signer.signature(*randomGen()->getRng()); - } else if (algName == "Ed25519") { - Botan::Ed25519_PrivateKey privateKey(algId, privateKeyBytes); - // "Pure" here means signing message directly. SHA-512 is only used with pre-hashed Ed25519 (Ed25519ph). - Botan::PK_Signer signer(privateKey, *randomGen()->getRng(), "Pure"); - - signer.update(reinterpret_cast(attToBeSigned.constData()), attToBeSigned.size()); - rawSignature = signer.signature(*randomGen()->getRng()); - } else { - qWarning("BrowserWebAuthn::buildSignature: Algorithm not supported"); - return {}; - } - - auto signature = QByteArray(reinterpret_cast(rawSignature.data()), rawSignature.size()); - return signature; - } catch (std::exception& e) { - qWarning("BrowserWebAuthn::buildSignature: Could not sign key: %s", e.what()); - return {}; - } -} - -// Parse authentication data byte array to JSON -// See: https://www.w3.org/TR/webauthn/images/fido-attestation-structures.svg -// And: https://w3c.github.io/webauthn/#attested-credential-data -QJsonObject BrowserPasskeys::parseAuthData(const QByteArray& authData) const -{ - auto rpIdHash = authData.mid(AuthDataOffsets::RPIDHASH, HASH_BYTES); - auto flags = authData.mid(AuthDataOffsets::FLAGS, 1); - auto counter = authData.mid(AuthDataOffsets::SIGNATURE_COUNTER, 4); - auto aaGuid = authData.mid(AuthDataOffsets::AAGUID, 16); - auto credentialLength = authData.mid(AuthDataOffsets::CREDENTIAL_LENGTH, 2); - auto credLen = qFromBigEndian(credentialLength.data()); - auto credentialId = authData.mid(AuthDataOffsets::CREDENTIAL_ID, credLen); - auto publicKey = authData.mid(AuthDataOffsets::CREDENTIAL_ID + credLen); - - QJsonObject credentialDataJson({{"aaguid", browserMessageBuilder()->getBase64FromArray(aaGuid)}, - {"credentialId", browserMessageBuilder()->getBase64FromArray(credentialId)}, - {"publicKey", m_browserCbor.getJsonFromCborData(publicKey)}}); - - QJsonObject result({{"credentialData", credentialDataJson}, - {"flags", parseFlags(flags)}, - {"rpIdHash", browserMessageBuilder()->getBase64FromArray(rpIdHash)}, - {"signatureCounter", QJsonValue(qFromBigEndian(counter))}}); - - return result; -} - -// See: https://w3c.github.io/webauthn/#table-authData -QJsonObject BrowserPasskeys::parseFlags(const QByteArray& flags) const -{ - if (flags.isEmpty()) { - return {}; - } - - auto flagsByte = static_cast(flags[0]); - std::bitset<8> flagBits(flagsByte); - - return QJsonObject({{"ED", flagBits.test(AuthenticatorFlags::ED)}, - {"AT", flagBits.test(AuthenticatorFlags::AT)}, - {"BS", flagBits.test(AuthenticatorFlags::BS)}, - {"BE", flagBits.test(AuthenticatorFlags::BE)}, - {"UV", flagBits.test(AuthenticatorFlags::UV)}, - {"UP", flagBits.test(AuthenticatorFlags::UP)}}); -} - -// https://w3c.github.io/webauthn/#table-authData -// ED - Extension Data, AT - Attested Credential, BS - Reserved -// BE - Reserved , UV - User Verified, UP - User Present -char BrowserPasskeys::setFlagsFromJson(const QJsonObject& flags) const -{ - if (flags.isEmpty()) { - return 0; - } - - char flagBits = 0x00; - auto setFlag = [&](const char* key, unsigned char bit) { - if (flags[key].toBool()) { - flagBits |= 1 << bit; - } - }; - - setFlag("ED", AuthenticatorFlags::ED); - setFlag("AT", AuthenticatorFlags::AT); - setFlag("BS", AuthenticatorFlags::BS); - setFlag("BE", AuthenticatorFlags::BE); - setFlag("UV", AuthenticatorFlags::UV); - setFlag("UP", AuthenticatorFlags::UP); - - return flagBits; -} - -// Returns the first supported algorithm from the pubKeyCredParams list (only support ES256, RS256 and EdDSA for now) -WebAuthnAlgorithms BrowserPasskeys::getAlgorithmFromPublicKey(const QJsonObject& credentialCreationOptions) const -{ - const auto pubKeyCredParams = credentialCreationOptions["credTypesAndPubKeyAlgs"].toArray(); - if (!pubKeyCredParams.isEmpty()) { - const auto alg = pubKeyCredParams.first()["alg"].toInt(); - if (alg == WebAuthnAlgorithms::ES256 || alg == WebAuthnAlgorithms::RS256 || alg == WebAuthnAlgorithms::EDDSA) { - return static_cast(alg); - } - } - - return WebAuthnAlgorithms::ES256; -} - -QByteArray BrowserPasskeys::bigIntToQByteArray(Botan::BigInt& bigInt) const -{ - auto hexString = QString(bigInt.to_hex_string().c_str()); - - // Botan might add a leading "0x" to the hex string depending on the version. Remove it. - if (hexString.startsWith(("0x"))) { - hexString.remove(0, 2); - } - - return browserMessageBuilder()->getArrayFromHexString(hexString); -} diff --git a/src/browser/BrowserPasskeys.h b/src/browser/BrowserPasskeys.h deleted file mode 100644 index 4955654c9..000000000 --- a/src/browser/BrowserPasskeys.h +++ /dev/null @@ -1,139 +0,0 @@ -/* - * Copyright (C) 2024 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 BROWSERPASSKEYS_H -#define BROWSERPASSKEYS_H - -#include "BrowserCbor.h" -#include -#include - -#include -#include - -#define ID_BYTES 32 -#define HASH_BYTES 32 -#define RSA_BITS 2048 -#define RSA_EXPONENT 65537 - -enum AuthDataOffsets : int -{ - RPIDHASH = 0, - FLAGS = 32, - SIGNATURE_COUNTER = 33, - AAGUID = 37, - CREDENTIAL_LENGTH = 53, - CREDENTIAL_ID = 55 -}; - -enum AuthenticatorFlags -{ - UP = 0, - UV = 2, - BE = 3, - BS = 4, - AT = 6, - ED = 7 -}; - -struct PublicKeyCredential -{ - QString credentialId; - QJsonObject response; - QByteArray key; -}; - -struct AttestationKeyPair -{ - QByteArray cborEncodedPublicKey; - QByteArray privateKeyPem; -}; - -// Predefined variables used for testing the class -struct TestingVariables -{ - QString credentialId; - QString first; - QString second; -}; - -class BrowserPasskeys : public QObject -{ - Q_OBJECT - -public: - explicit BrowserPasskeys() = default; - ~BrowserPasskeys() = default; - static BrowserPasskeys* instance(); - - PublicKeyCredential buildRegisterPublicKeyCredential(const QJsonObject& credentialCreationOptions, - const TestingVariables& predefinedVariables = {}); - QJsonObject buildGetPublicKeyCredential(const QJsonObject& assertionOptions, - const QString& credentialId, - const QString& userHandle, - const QString& privateKeyPem); - - static const QString AAGUID; - - static const QString ATTACHMENT_CROSS_PLATFORM; - static const QString ATTACHMENT_PLATFORM; - static const QString AUTHENTICATOR_TRANSPORT_INTERNAL; - static const QString AUTHENTICATOR_TRANSPORT_NFC; - static const QString AUTHENTICATOR_TRANSPORT_USB; - static const bool SUPPORT_RESIDENT_KEYS; - static const bool SUPPORT_USER_VERIFICATION; - - static const QString PUBLIC_KEY; - static const QString REQUIREMENT_DISCOURAGED; - static const QString REQUIREMENT_PREFERRED; - static const QString REQUIREMENT_REQUIRED; - - static const QString PASSKEYS_ATTESTATION_DIRECT; - static const QString PASSKEYS_ATTESTATION_NONE; - -private: - QByteArray buildAttestationObject(const QJsonObject& credentialCreationOptions, - const QString& extensions, - const QString& credentialId, - const QByteArray& cborEncodedPublicKey, - const TestingVariables& predefinedVariables = {}); - QByteArray buildAuthenticatorData(const QString& rpId, const QString& extensions); - AttestationKeyPair buildCredentialPrivateKey(int alg, - const QString& predefinedFirst = QString(), - const QString& predefinedSecond = QString()); - QByteArray - buildSignature(const QByteArray& authenticatorData, const QByteArray& clientData, const QString& privateKeyPem); - QJsonObject parseAuthData(const QByteArray& authData) const; - QJsonObject parseFlags(const QByteArray& flags) const; - char setFlagsFromJson(const QJsonObject& flags) const; - WebAuthnAlgorithms getAlgorithmFromPublicKey(const QJsonObject& credentialCreationOptions) const; - QByteArray bigIntToQByteArray(Botan::BigInt& bigInt) const; - - Q_DISABLE_COPY(BrowserPasskeys); - - friend class TestPasskeys; - -private: - BrowserCbor m_browserCbor; -}; - -static inline BrowserPasskeys* browserPasskeys() -{ - return BrowserPasskeys::instance(); -} - -#endif // BROWSERPASSKEYS_H diff --git a/src/browser/BrowserPasskeysClient.cpp b/src/browser/BrowserPasskeysClient.cpp deleted file mode 100644 index 64857a72a..000000000 --- a/src/browser/BrowserPasskeysClient.cpp +++ /dev/null @@ -1,175 +0,0 @@ -/* - * Copyright (C) 2024 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 "BrowserPasskeysClient.h" -#include "BrowserMessageBuilder.h" -#include "BrowserPasskeys.h" -#include "PasskeyUtils.h" - -#include - -Q_GLOBAL_STATIC(BrowserPasskeysClient, s_browserPasskeysClient); - -BrowserPasskeysClient* BrowserPasskeysClient::instance() -{ - return s_browserPasskeysClient; -} - -// Constructs CredentialCreationOptions from the original PublicKeyCredential -// https://www.w3.org/TR/2019/REC-webauthn-1-20190304/#createCredential -int BrowserPasskeysClient::getCredentialCreationOptions(const QJsonObject& publicKeyOptions, - const QString& origin, - QJsonObject* result) const -{ - if (!result || publicKeyOptions.isEmpty()) { - return ERROR_PASSKEYS_EMPTY_PUBLIC_KEY; - } - - // Check validity of some basic values - const auto checkResultError = passkeyUtils()->checkLimits(publicKeyOptions); - if (checkResultError > 0) { - return checkResultError; - } - - // Get effective domain - QString effectiveDomain; - const auto effectiveDomainResponse = passkeyUtils()->getEffectiveDomain(origin, &effectiveDomain); - if (effectiveDomainResponse > 0) { - return effectiveDomainResponse; - } - - // Validate RP ID - QString rpId; - const auto rpName = publicKeyOptions["rp"]["name"].toString(); - const auto rpIdResponse = passkeyUtils()->validateRpId(publicKeyOptions["rp"]["id"], effectiveDomain, &rpId); - if (rpIdResponse > 0) { - return rpIdResponse; - } - - // Check PublicKeyCredentialTypes - const auto pubKeyCredParams = passkeyUtils()->parseCredentialTypes(publicKeyOptions["pubKeyCredParams"].toArray()); - if (pubKeyCredParams.isEmpty() && !publicKeyOptions["pubKeyCredParams"].toArray().isEmpty()) { - return ERROR_PASSKEYS_NO_SUPPORTED_ALGORITHMS; - } - - // Check Attestation - const auto attestation = passkeyUtils()->parseAttestation(publicKeyOptions["attestation"].toString()); - - // Check validity of AuthenticatorSelection - auto authenticatorSelection = publicKeyOptions["authenticatorSelection"].toObject(); - const bool isAuthenticatorSelectionValid = passkeyUtils()->isAuthenticatorSelectionValid(authenticatorSelection); - if (!isAuthenticatorSelectionValid) { - return ERROR_PASSKEYS_WAIT_FOR_LIFETIMER; - } - - // Add default values for compatibility - if (authenticatorSelection.isEmpty()) { - authenticatorSelection = QJsonObject({{"userVerification", BrowserPasskeys::REQUIREMENT_PREFERRED}}); - } else if (authenticatorSelection["userVerification"].toString().isEmpty()) { - authenticatorSelection["userVerification"] = BrowserPasskeys::REQUIREMENT_PREFERRED; - } - - auto authenticatorAttachment = authenticatorSelection["authenticatorAttachment"].toString(); - if (authenticatorAttachment.isEmpty()) { - authenticatorAttachment = BrowserPasskeys::ATTACHMENT_PLATFORM; - } - - // Unknown values are ignored, but a warning will be still shown just in case - const auto userVerification = authenticatorSelection["userVerification"].toString(); - if (!passkeyUtils()->isUserVerificationValid(userVerification)) { - qWarning() << browserMessageBuilder()->getErrorMessage(ERROR_PASSKEYS_INVALID_USER_VERIFICATION); - } - - // Parse requireResidentKey and userVerification - const auto isResidentKeyRequired = passkeyUtils()->isResidentKeyRequired(authenticatorSelection); - const auto isUserVerificationRequired = passkeyUtils()->isUserVerificationRequired(authenticatorSelection); - - // Extensions - auto extensionObject = publicKeyOptions["extensions"].toObject(); - const auto extensionData = passkeyUtils()->buildExtensionData(extensionObject); - const auto extensions = browserMessageBuilder()->getBase64FromArray(extensionData.extensionData); - - // Construct the final object - QJsonObject credentialCreationOptions; - credentialCreationOptions["attestation"] = attestation; // Set this, even if only "none" is supported - credentialCreationOptions["authenticatorAttachment"] = authenticatorAttachment; - credentialCreationOptions["clientDataJSON"] = passkeyUtils()->buildClientDataJson(publicKeyOptions, origin, false); - credentialCreationOptions["clientExtensionResults"] = extensionData.extensionObject; - credentialCreationOptions["credTypesAndPubKeyAlgs"] = pubKeyCredParams; - credentialCreationOptions["excludeCredentials"] = publicKeyOptions["excludeCredentials"]; - credentialCreationOptions["extensions"] = extensions; - credentialCreationOptions["residentKey"] = isResidentKeyRequired; - credentialCreationOptions["rp"] = QJsonObject({{"id", rpId}, {"name", rpName}}); - credentialCreationOptions["user"] = publicKeyOptions["user"]; - credentialCreationOptions["userPresence"] = !isUserVerificationRequired; - credentialCreationOptions["userVerification"] = isUserVerificationRequired; - - *result = credentialCreationOptions; - return 0; -} - -// Use an existing credential -// https://www.w3.org/TR/2019/REC-webauthn-1-20190304/#getAssertion -int BrowserPasskeysClient::getAssertionOptions(const QJsonObject& publicKeyOptions, - const QString& origin, - QJsonObject* result) const -{ - if (!result || publicKeyOptions.isEmpty()) { - return ERROR_PASSKEYS_EMPTY_PUBLIC_KEY; - } - - // Get effective domain - QString effectiveDomain; - const auto effectiveDomainResponse = passkeyUtils()->getEffectiveDomain(origin, &effectiveDomain); - if (effectiveDomainResponse > 0) { - return effectiveDomainResponse; - } - - // Validate RP ID - QString rpId; - const auto rpIdResponse = passkeyUtils()->validateRpId(publicKeyOptions["rpId"], effectiveDomain, &rpId); - if (rpIdResponse > 0) { - return rpIdResponse; - } - - // Extensions - auto extensionObject = publicKeyOptions["extensions"].toObject(); - const auto extensionData = passkeyUtils()->buildExtensionData(extensionObject); - const auto extensions = browserMessageBuilder()->getBase64FromArray(extensionData.extensionData); - - // clientDataJson - const auto clientDataJson = passkeyUtils()->buildClientDataJson(publicKeyOptions, origin, true); - - // Unknown values are ignored, but a warning will be still shown just in case - const auto userVerification = publicKeyOptions["userVerification"].toString(); - if (!passkeyUtils()->isUserVerificationValid(userVerification)) { - qWarning() << browserMessageBuilder()->getErrorMessage(ERROR_PASSKEYS_INVALID_USER_VERIFICATION); - } - const auto isUserVerificationRequired = passkeyUtils()->isUserVerificationRequired(publicKeyOptions); - - QJsonObject assertionOptions; - assertionOptions["allowCredentials"] = publicKeyOptions["allowCredentials"]; - assertionOptions["clientDataJson"] = clientDataJson; - assertionOptions["clientExtensionResults"] = extensionData.extensionObject; - assertionOptions["extensions"] = extensions; - assertionOptions["rpId"] = rpId; - assertionOptions["userPresence"] = true; - assertionOptions["userVerification"] = isUserVerificationRequired; - - *result = assertionOptions; - return 0; -} diff --git a/src/browser/BrowserPasskeysClient.h b/src/browser/BrowserPasskeysClient.h deleted file mode 100644 index 24040bd3e..000000000 --- a/src/browser/BrowserPasskeysClient.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (C) 2024 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 BROWSERPASSKEYSCLIENT_H -#define BROWSERPASSKEYSCLIENT_H - -#include -#include -#include - -class BrowserPasskeysClient : public QObject -{ - Q_OBJECT - -public: - explicit BrowserPasskeysClient() = default; - ~BrowserPasskeysClient() = default; - static BrowserPasskeysClient* instance(); - - int - getCredentialCreationOptions(const QJsonObject& publicKeyOptions, const QString& origin, QJsonObject* result) const; - int getAssertionOptions(const QJsonObject& publicKeyOptions, const QString& origin, QJsonObject* result) const; - -private: - Q_DISABLE_COPY(BrowserPasskeysClient); - - friend class TestPasskeys; -}; - -static inline BrowserPasskeysClient* browserPasskeysClient() -{ - return BrowserPasskeysClient::instance(); -} - -#endif // BROWSERPASSKEYSCLIENT_H diff --git a/src/browser/BrowserPasskeysConfirmationDialog.cpp b/src/browser/BrowserPasskeysConfirmationDialog.cpp deleted file mode 100644 index aa0dcc532..000000000 --- a/src/browser/BrowserPasskeysConfirmationDialog.cpp +++ /dev/null @@ -1,158 +0,0 @@ -/* - * Copyright (C) 2024 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 "BrowserPasskeysConfirmationDialog.h" -#include "ui_BrowserPasskeysConfirmationDialog.h" - -#include "core/Entry.h" -#include -#include - -#define STEP 1000 - -BrowserPasskeysConfirmationDialog::BrowserPasskeysConfirmationDialog(QWidget* parent) - : QDialog(parent) - , m_ui(new Ui::BrowserPasskeysConfirmationDialog()) - , m_passkeyUpdated(false) -{ - setWindowFlags(windowFlags() | Qt::WindowStaysOnTopHint); - - m_ui->setupUi(this); - m_ui->verticalLayout->setAlignment(Qt::AlignTop); - - connect(m_ui->credentialsTable, SIGNAL(cellDoubleClicked(int, int)), this, SLOT(accept())); - connect(m_ui->confirmButton, SIGNAL(clicked()), SLOT(accept())); - connect(m_ui->cancelButton, SIGNAL(clicked()), SLOT(reject())); - connect(m_ui->updateButton, SIGNAL(clicked()), SLOT(updatePasskey())); - - connect(&m_timer, SIGNAL(timeout()), this, SLOT(updateProgressBar())); - connect(&m_timer, SIGNAL(timeout()), this, SLOT(updateSeconds())); -} - -BrowserPasskeysConfirmationDialog::~BrowserPasskeysConfirmationDialog() -{ -} - -void BrowserPasskeysConfirmationDialog::registerCredential(const QString& username, - const QString& relyingParty, - const QList& existingEntries, - int timeout) -{ - m_ui->firstLabel->setText(tr("Do you want to register a passkey for:")); - m_ui->relyingPartyLabel->setText(tr("Relying Party: %1").arg(relyingParty)); - m_ui->usernameLabel->setText(tr("Username: %1").arg(username)); - m_ui->updateButton->setVisible(true); - m_ui->secondLabel->setText(""); - - if (!existingEntries.isEmpty()) { - m_ui->firstLabel->setText(tr("Existing passkey found.\nDo you want to register a new passkey for:")); - m_ui->secondLabel->setText(tr("Select the existing passkey and press Update to replace it.")); - m_ui->updateButton->setText(tr("Update")); - m_ui->confirmButton->setText(tr("Register new")); - updateEntriesToTable(existingEntries); - } else { - m_ui->verticalLayout->setSizeConstraint(QLayout::SetFixedSize); - m_ui->confirmButton->setText(tr("Register")); - m_ui->updateButton->setText(tr("Add to existing entry")); - m_ui->credentialsTable->setVisible(false); - } - - startCounter(timeout); -} - -void BrowserPasskeysConfirmationDialog::authenticateCredential(const QList& entries, - const QString& relyingParty, - int timeout) -{ - m_ui->firstLabel->setText(tr("Authenticate passkey credentials for:")); - m_ui->relyingPartyLabel->setText(tr("Relying Party: %1").arg(relyingParty)); - m_ui->usernameLabel->setVisible(false); - m_ui->updateButton->setVisible(false); - m_ui->secondLabel->setText(""); - updateEntriesToTable(entries); - startCounter(timeout); -} - -Entry* BrowserPasskeysConfirmationDialog::getSelectedEntry() const -{ - auto selectedItem = m_ui->credentialsTable->currentItem(); - return selectedItem ? m_entries[selectedItem->row()] : nullptr; -} - -bool BrowserPasskeysConfirmationDialog::isPasskeyUpdated() const -{ - return m_passkeyUpdated; -} - -void BrowserPasskeysConfirmationDialog::updatePasskey() -{ - m_passkeyUpdated = true; - emit accept(); -} - -void BrowserPasskeysConfirmationDialog::updateProgressBar() -{ - if (m_counter < m_ui->progressBar->maximum()) { - m_ui->progressBar->setValue(m_ui->progressBar->maximum() - m_counter); - m_ui->progressBar->update(); - } else { - emit reject(); - } -} - -void BrowserPasskeysConfirmationDialog::updateSeconds() -{ - ++m_counter; - updateTimeoutLabel(); -} - -void BrowserPasskeysConfirmationDialog::startCounter(int timeout) -{ - m_counter = 0; - m_ui->progressBar->setMaximum(timeout / STEP); - updateProgressBar(); - updateTimeoutLabel(); - m_timer.start(STEP); -} - -void BrowserPasskeysConfirmationDialog::updateTimeoutLabel() -{ - m_ui->timeoutLabel->setText(tr("Timeout in %n seconds...", "", m_ui->progressBar->maximum() - m_counter)); -} - -void BrowserPasskeysConfirmationDialog::updateEntriesToTable(const QList& entries) -{ - m_entries = entries; - m_ui->credentialsTable->setRowCount(entries.count()); - m_ui->credentialsTable->setColumnCount(1); - - int row = 0; - for (const auto& entry : entries) { - auto item = new QTableWidgetItem(); - item->setText(entry->title() + " - " + entry->username()); - m_ui->credentialsTable->setItem(row, 0, item); - - if (row == 0) { - item->setSelected(true); - } - - ++row; - } - - m_ui->credentialsTable->resizeColumnsToContents(); - m_ui->credentialsTable->horizontalHeader()->setStretchLastSection(true); -} diff --git a/src/browser/BrowserPasskeysConfirmationDialog.h b/src/browser/BrowserPasskeysConfirmationDialog.h deleted file mode 100644 index 6e262ffda..000000000 --- a/src/browser/BrowserPasskeysConfirmationDialog.h +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright (C) 2023 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 KEEPASSXC_BROWSERPASSKEYSCONFIRMATIONDIALOG_H -#define KEEPASSXC_BROWSERPASSKEYSCONFIRMATIONDIALOG_H - -#include -#include -#include - -class Entry; - -namespace Ui -{ - class BrowserPasskeysConfirmationDialog; -} - -class BrowserPasskeysConfirmationDialog : public QDialog -{ - Q_OBJECT - -public: - explicit BrowserPasskeysConfirmationDialog(QWidget* parent = nullptr); - ~BrowserPasskeysConfirmationDialog() override; - - void registerCredential(const QString& username, - const QString& relyingParty, - const QList& existingEntries, - int timeout); - void authenticateCredential(const QList& entries, const QString& relyingParty, int timeout); - Entry* getSelectedEntry() const; - bool isPasskeyUpdated() const; - -private slots: - void updatePasskey(); - void updateProgressBar(); - void updateSeconds(); - -private: - void startCounter(int timeout); - void updateTimeoutLabel(); - void updateEntriesToTable(const QList& entries); - -private: - QScopedPointer m_ui; - QList m_entries; - QTimer m_timer; - int m_counter; - bool m_passkeyUpdated; -}; - -#endif // KEEPASSXC_BROWSERPASSKEYSCONFIRMATIONDIALOG_H diff --git a/src/browser/BrowserPasskeysConfirmationDialog.ui b/src/browser/BrowserPasskeysConfirmationDialog.ui deleted file mode 100644 index 2d8fee547..000000000 --- a/src/browser/BrowserPasskeysConfirmationDialog.ui +++ /dev/null @@ -1,163 +0,0 @@ - - - BrowserPasskeysConfirmationDialog - - - - 0 - 0 - 400 - 274 - - - - - 0 - 0 - - - - KeePassXC - Passkey credentials - - - - - - - - - true - - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop - - - - - - - Relying Party: %1 - - - Qt::PlainText - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - - - - - Username: %1 - - - Qt::PlainText - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - - - - - - true - - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop - - - - - - - - - - 0 - 0 - - - - QAbstractItemView::NoEditTriggers - - - false - - - QAbstractItemView::SingleSelection - - - false - - - false - - - false - - - - - - - 0 - - - false - - - - - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Cancel - - - true - - - - - - - Update - - - - - - - Authenticate - - - - - - - - - - diff --git a/src/browser/BrowserService.cpp b/src/browser/BrowserService.cpp index 775868a51..2953cf582 100644 --- a/src/browser/BrowserService.cpp +++ b/src/browser/BrowserService.cpp @@ -1,7 +1,6 @@ /* - * Copyright (C) 2025 KeePassXC Team - * Copyright (C) 2017 Sami Vänttinen * Copyright (C) 2013 Francois Ferrand + * Copyright (C) 2022 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 @@ -24,19 +23,10 @@ #include "BrowserHost.h" #include "BrowserMessageBuilder.h" #include "BrowserSettings.h" -#include "core/EntryAttributes.h" #include "core/Tools.h" #include "gui/MainWindow.h" #include "gui/MessageBox.h" -#include "gui/UrlTools.h" #include "gui/osutils/OSUtils.h" -#ifdef WITH_XC_BROWSER_PASSKEYS -#include "BrowserPasskeys.h" -#include "BrowserPasskeysClient.h" -#include "BrowserPasskeysConfirmationDialog.h" -#include "PasskeyUtils.h" -#include "gui/passkeys/PasskeyImporter.h" -#endif #ifdef Q_OS_MACOS #include "gui/osutils/macutils/MacUtils.h" #endif @@ -49,19 +39,13 @@ #include #include #include -#include #include -#include #include const QString BrowserService::KEEPASSXCBROWSER_NAME = QStringLiteral("KeePassXC-Browser Settings"); const QString BrowserService::KEEPASSXCBROWSER_OLD_NAME = QStringLiteral("keepassxc-browser Settings"); static const QString KEEPASSXCBROWSER_GROUP_NAME = QStringLiteral("KeePassXC-Browser Passwords"); static int KEEPASSXCBROWSER_DEFAULT_ICON = 1; -#ifdef WITH_XC_BROWSER_PASSKEYS -static int KEEPASSXCBROWSER_PASSKEY_ICON = 13; -static const QString PASSKEYS_DEFAULT_GROUP_NAME = QStringLiteral("KeePassXC-Browser Passkeys"); -#endif // These are for the settings and password conversion static const QString KEEPASSHTTP_NAME = QStringLiteral("KeePassHttp Settings"); static const QString KEEPASSHTTP_GROUP_NAME = QStringLiteral("KeePassHttp Passwords"); @@ -71,7 +55,8 @@ const QString BrowserService::OPTION_HIDE_ENTRY = QStringLiteral("BrowserHideEnt const QString BrowserService::OPTION_ONLY_HTTP_AUTH = QStringLiteral("BrowserOnlyHttpAuth"); const QString BrowserService::OPTION_NOT_HTTP_AUTH = QStringLiteral("BrowserNotHttpAuth"); const QString BrowserService::OPTION_OMIT_WWW = QStringLiteral("BrowserOmitWww"); -const QString BrowserService::OPTION_RESTRICT_KEY = QStringLiteral("BrowserRestrictKey"); +// Multiple URL's +const QString BrowserService::ADDITIONAL_URL = QStringLiteral("KP2A_URL"); Q_GLOBAL_STATIC(BrowserService, s_browserService); @@ -80,6 +65,7 @@ BrowserService::BrowserService() , m_browserHost(new BrowserHost) , m_dialogActive(false) , m_bringToFrontRequested(false) + , m_passwordGeneratorRequested(false) , m_prevWindowState(WindowState::Normal) , m_keepassBrowserUUID(Tools::hexToUuid("de887cc3036343b8974b5911b8816224")) { @@ -87,10 +73,6 @@ BrowserService::BrowserService() connect(getMainWindow(), &MainWindow::databaseUnlocked, this, &BrowserService::databaseUnlocked); connect(getMainWindow(), &MainWindow::databaseLocked, this, &BrowserService::databaseLocked); connect(getMainWindow(), &MainWindow::activeDatabaseChanged, this, &BrowserService::activeDatabaseChanged); - connect(getMainWindow(), - &MainWindow::databaseUnlockDialogFinished, - this, - &BrowserService::handleDatabaseUnlockDialogFinished); setEnabled(browserSettings()->isEnabled()); } @@ -132,7 +114,7 @@ bool BrowserService::openDatabase(bool triggerUnlock) return true; } - if (triggerUnlock && !m_bringToFrontRequested) { + if (triggerUnlock) { m_bringToFrontRequested = true; updateWindowState(); emit requestUnlock(); @@ -236,7 +218,7 @@ QJsonObject BrowserService::getDatabaseGroups() return result; } -QJsonArray BrowserService::getDatabaseEntries() +QJsonObject BrowserService::createNewGroup(const QString& groupName) { auto db = getDatabase(); if (!db) { @@ -248,39 +230,6 @@ QJsonArray BrowserService::getDatabaseEntries() return {}; } - QJsonArray entries; - for (const auto& group : rootGroup->groupsRecursive(true)) { - if (group == db->metadata()->recycleBin()) { - continue; - } - - for (const auto& entry : group->entries()) { - QJsonObject jentry; - jentry["title"] = entry->resolveMultiplePlaceholders(entry->title()); - jentry["uuid"] = entry->resolveMultiplePlaceholders(entry->uuidToHex()); - jentry["url"] = entry->resolveMultiplePlaceholders(entry->url()); - entries.push_back(jentry); - } - } - return entries; -} - -QJsonObject BrowserService::createNewGroup(const QString& groupName, bool isPasskeysGroup) -{ - if (groupName.isEmpty()) { - return {}; - } - - auto db = getDatabase(); - if (!db) { - return {}; - } - - Group* rootGroup = db->rootGroup(); - if (!rootGroup) { - return {}; - } - auto group = rootGroup->findGroupByPath(groupName); // Group already exists @@ -291,8 +240,8 @@ QJsonObject BrowserService::createNewGroup(const QString& groupName, bool isPass return result; } - auto dialogResult = MessageBox::warning(m_currentDatabaseWidget, - tr("KeePassXC - Create a new group"), + 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), @@ -320,17 +269,11 @@ QJsonObject BrowserService::createNewGroup(const QString& groupName, bool isPass QString gName = getGroupName(i); auto tempGroup = rootGroup->findGroupByPath(gName); if (!tempGroup) { - auto newGroup = new Group(); + Group* newGroup = new Group(); newGroup->setName(groups[i]); newGroup->setUuid(QUuid::createUuid()); newGroup->setParent(previousGroup); -#ifdef WITH_XC_BROWSER_PASSKEYS - if (isPasskeysGroup && i == groups.length() - 1) { - newGroup->setIcon(KEEPASSXCBROWSER_PASSKEY_ICON); - } -#endif name = newGroup->name(); - newGroup->setCustomDataTriState(BrowserService::OPTION_HIDE_ENTRY, Group::Disable); uuid = Tools::uuidToHex(newGroup->uuid()); previousGroup = newGroup; continue; @@ -370,32 +313,33 @@ QString BrowserService::getCurrentTotp(const QString& uuid) return {}; } -QJsonArray -BrowserService::findEntries(const EntryParameters& entryParameters, const StringPairList& keyList, bool* entriesFound) +QJsonArray BrowserService::findMatchingEntries(const QString& dbid, + const QString& siteUrl, + const QString& formUrl, + const QString& realm, + const StringPairList& keyList, + const bool httpAuth) { - if (entriesFound) { - *entriesFound = false; - } - + Q_UNUSED(dbid); const bool alwaysAllowAccess = browserSettings()->alwaysAllowAccess(); const bool ignoreHttpAuth = browserSettings()->httpAuthPermission(); - const QString siteHost = QUrl(entryParameters.siteUrl).host(); - const QString formHost = QUrl(entryParameters.formUrl).host(); + const QString siteHost = QUrl(siteUrl).host(); + const QString formHost = QUrl(formUrl).host(); // Check entries for authorization - QList entriesToConfirm; - QList allowedEntries; - for (auto* entry : searchEntries(entryParameters.siteUrl, entryParameters.formUrl, keyList)) { + QList pwEntriesToConfirm; + QList pwEntries; + for (auto* entry : searchEntries(siteUrl, formUrl, keyList)) { auto entryCustomData = entry->customData(); - if (!entryParameters.httpAuth + if (!httpAuth && ((entryCustomData->contains(BrowserService::OPTION_ONLY_HTTP_AUTH) && entryCustomData->value(BrowserService::OPTION_ONLY_HTTP_AUTH) == TRUE_STR) || entry->group()->resolveCustomDataTriState(BrowserService::OPTION_ONLY_HTTP_AUTH) == Group::Enable)) { continue; } - if (entryParameters.httpAuth + if (httpAuth && ((entryCustomData->contains(BrowserService::OPTION_NOT_HTTP_AUTH) && entryCustomData->value(BrowserService::OPTION_NOT_HTTP_AUTH) == TRUE_STR) || entry->group()->resolveCustomDataTriState(BrowserService::OPTION_NOT_HTTP_AUTH) == Group::Enable)) { @@ -403,38 +347,38 @@ BrowserService::findEntries(const EntryParameters& entryParameters, const String } // HTTP Basic Auth always needs a confirmation - if (!ignoreHttpAuth && entryParameters.httpAuth) { - entriesToConfirm.append(entry); + if (!ignoreHttpAuth && httpAuth) { + pwEntriesToConfirm.append(entry); continue; } - switch (checkAccess(entry, siteHost, formHost, entryParameters.realm)) { + switch (checkAccess(entry, siteHost, formHost, realm)) { case Denied: continue; case Unknown: if (alwaysAllowAccess) { - allowedEntries.append(entry); + pwEntries.append(entry); } else { - entriesToConfirm.append(entry); + pwEntriesToConfirm.append(entry); } break; case Allowed: - allowedEntries.append(entry); + pwEntries.append(entry); break; } } - if (entriesToConfirm.isEmpty() && allowedEntries.isEmpty()) { - return {}; + // Confirm entries + QList selectedEntriesToConfirm = + confirmEntries(pwEntriesToConfirm, siteUrl, siteHost, formHost, realm, httpAuth); + if (!selectedEntriesToConfirm.isEmpty()) { + pwEntries.append(selectedEntriesToConfirm); } - // Confirm entries - auto selectedEntriesToConfirm = - confirmEntries(entriesToConfirm, entryParameters, siteHost, formHost, entryParameters.httpAuth); - if (!selectedEntriesToConfirm.isEmpty()) { - allowedEntries.append(selectedEntriesToConfirm); + if (pwEntries.isEmpty()) { + return {}; } // Ensure that database is not locked when the popup was visible @@ -443,82 +387,51 @@ BrowserService::findEntries(const EntryParameters& entryParameters, const String } // Sort results - allowedEntries = sortEntries(allowedEntries, entryParameters.siteUrl, entryParameters.formUrl); + pwEntries = sortEntries(pwEntries, siteUrl, formUrl); // Fill the list - QJsonArray entries; - for (auto* entry : allowedEntries) { - entries.append(prepareEntry(entry)); + QJsonArray result; + for (auto* entry : pwEntries) { + result.append(prepareEntry(entry)); } - if (entriesFound != nullptr) { - *entriesFound = true; - } - - return entries; + return result; } -QList BrowserService::confirmEntries(QList& entriesToConfirm, - const EntryParameters& entryParameters, +QList BrowserService::confirmEntries(QList& pwEntriesToConfirm, + const QString& siteUrl, const QString& siteHost, const QString& formUrl, + const QString& realm, const bool httpAuth) { - if (entriesToConfirm.isEmpty() || m_dialogActive) { + if (pwEntriesToConfirm.isEmpty() || m_dialogActive) { return {}; } m_dialogActive = true; updateWindowState(); - BrowserAccessControlDialog accessControlDialog(m_currentDatabaseWidget); + BrowserAccessControlDialog accessControlDialog; connect(m_currentDatabaseWidget, SIGNAL(databaseLockRequested()), &accessControlDialog, SLOT(reject())); connect(&accessControlDialog, &BrowserAccessControlDialog::disableAccess, [&](QTableWidgetItem* item) { - auto entry = entriesToConfirm[item->row()]; - denyEntry(entry, siteHost, formUrl, entryParameters.realm); + auto entry = pwEntriesToConfirm[item->row()]; + denyEntry(entry, siteHost, formUrl, realm); }); - accessControlDialog.setEntries(entriesToConfirm, entryParameters.siteUrl, httpAuth); + accessControlDialog.setItems(pwEntriesToConfirm, siteUrl, httpAuth); QList allowedEntries; auto ret = accessControlDialog.exec(); - auto remember = accessControlDialog.remember(); - - // All are denied - if (ret == QDialog::Rejected && remember) { - for (auto& entry : entriesToConfirm) { - denyEntry(entry, siteHost, formUrl, entryParameters.realm); - } - } - - // Some/all are accepted if (ret == QDialog::Accepted) { - auto selectedEntries = accessControlDialog.getEntries(SelectionType::Selected); - for (auto& item : selectedEntries) { - auto entry = entriesToConfirm[item->row()]; + for (auto item : accessControlDialog.getSelectedEntries()) { + auto entry = pwEntriesToConfirm[item->row()]; + if (accessControlDialog.remember()) { + allowEntry(entry, siteHost, formUrl, realm); + } allowedEntries.append(entry); - - if (remember) { - allowEntry(entry, siteHost, formUrl, entryParameters.realm); - } } - - // Remembered non-selected entries must be denied - if (remember) { - auto nonSelectedEntries = accessControlDialog.getEntries(SelectionType::NonSelected); - for (auto& item : nonSelectedEntries) { - auto entry = entriesToConfirm[item->row()]; - denyEntry(entry, siteHost, formUrl, entryParameters.realm); - } - } - } - - // Handle disabled entries (returned Accept/Reject status does not matter) - auto disabledEntries = accessControlDialog.getEntries(SelectionType::Disabled); - for (auto& item : disabledEntries) { - auto entry = entriesToConfirm[item->row()]; - denyEntry(entry, siteHost, formUrl, entryParameters.realm); } // Re-hide the application if it wasn't visible before @@ -528,47 +441,49 @@ QList BrowserService::confirmEntries(QList& entriesToConfirm, return allowedEntries; } -void BrowserService::showPasswordGenerator(const KeyPairMessage& keyPairMessage) +void BrowserService::showPasswordGenerator(QLocalSocket* socket, + const QString& incrementedNonce, + const QString& publicKey, + const QString& secretKey) { if (!m_passwordGenerator) { - m_passwordGenerator = PasswordGeneratorWidget::popupGenerator(); + m_passwordGenerator.reset(PasswordGeneratorWidget::popupGenerator()); - connect(m_passwordGenerator.data(), - &PasswordGeneratorWidget::closed, - m_passwordGenerator.data(), - [this, keyPairMessage] { - if (!m_passwordGenerator->isPasswordGenerated()) { - auto errorMessage = browserMessageBuilder()->getErrorReply( - "generate-password", ERROR_KEEPASS_ACTION_CANCELLED_OR_DENIED); - m_browserHost->sendClientMessage(keyPairMessage.socket, errorMessage); - } + connect(m_passwordGenerator.data(), &PasswordGeneratorWidget::closed, m_passwordGenerator.data(), [=] { + if (!m_passwordGenerator->isPasswordGenerated()) { + auto errorMessage = browserMessageBuilder()->getErrorReply("generate-password", + ERROR_KEEPASS_ACTION_CANCELLED_OR_DENIED); + m_browserHost->sendClientMessage(socket, errorMessage); + } - QTimer::singleShot(50, this, [&] { hideWindow(); }); - }); + m_passwordGenerator.reset(); + hideWindow(); + m_passwordGeneratorRequested = false; + }); connect(m_passwordGenerator.data(), &PasswordGeneratorWidget::appliedPassword, m_passwordGenerator.data(), - [this, keyPairMessage](const QString& password) { - const Parameters params{{"password", password}}; - m_browserHost->sendClientMessage(keyPairMessage.socket, - browserMessageBuilder()->buildResponse("generate-password", - keyPairMessage.nonce, - params, - keyPairMessage.publicKey, - keyPairMessage.secretKey)); + [=](const QString& password) { + QJsonObject message = browserMessageBuilder()->buildMessage(incrementedNonce); + message["password"] = password; + m_browserHost->sendClientMessage( + socket, + browserMessageBuilder()->buildResponse( + "generate-password", message, incrementedNonce, publicKey, secretKey)); + hideWindow(); }); } + m_passwordGeneratorRequested = true; raiseWindow(); - m_passwordGenerator->show(); m_passwordGenerator->raise(); m_passwordGenerator->activateWindow(); } bool BrowserService::isPasswordGeneratorRequested() const { - return m_passwordGenerator && m_passwordGenerator->isVisible(); + return m_passwordGeneratorRequested; } QString BrowserService::storeKey(const QString& key) @@ -583,9 +498,9 @@ QString BrowserService::storeKey(const QString& key) QString id; do { - QInputDialog keyDialog(m_currentDatabaseWidget); + QInputDialog keyDialog; connect(m_currentDatabaseWidget, SIGNAL(databaseLockRequested()), &keyDialog, SLOT(reject())); - keyDialog.setWindowTitle(tr("KeePassXC - New key association request")); + keyDialog.setWindowTitle(tr("KeePassXC: New key association request")); keyDialog.setLabelText(tr("You have received an association request for the following database:\n%1\n\n" "Give the connection a unique name or ID, for example:\nchrome-laptop.") .arg(db->metadata()->name().toHtmlEscaped())); @@ -604,11 +519,10 @@ QString BrowserService::storeKey(const QString& key) return {}; } - contains = - db->metadata()->customData()->contains(CustomData::getKeyWithPrefix(CustomData::BrowserKeyPrefix, id)); + contains = db->metadata()->customData()->contains(CustomData::BrowserKeyPrefix + id); if (contains) { - dialogResult = MessageBox::warning(m_currentDatabaseWidget, - tr("KeePassXC - Overwrite existing key?"), + 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), @@ -618,9 +532,9 @@ QString BrowserService::storeKey(const QString& key) } while (contains && dialogResult == MessageBox::Cancel); hideWindow(); - db->metadata()->customData()->set(CustomData::getKeyWithPrefix(CustomData::BrowserKeyPrefix, id), key); - db->metadata()->customData()->set(CustomData::getKeyWithPrefix(CustomData::Created, id), - QLocale::system().toString(Clock::currentDateTime(), QLocale::ShortFormat)); + db->metadata()->customData()->set(CustomData::BrowserKeyPrefix + id, key); + db->metadata()->customData()->set(QString("%1_%2").arg(CustomData::Created, id), + Clock::currentDateTime().toString(Qt::SystemLocaleShortDate)); return id; } @@ -631,244 +545,22 @@ QString BrowserService::getKey(const QString& id) return {}; } - return db->metadata()->customData()->value(CustomData::getKeyWithPrefix(CustomData::BrowserKeyPrefix, id)); + return db->metadata()->customData()->value(CustomData::BrowserKeyPrefix + id); } -#ifdef WITH_XC_BROWSER_PASSKEYS -// Passkey registration -QJsonObject BrowserService::showPasskeysRegisterPrompt(const QJsonObject& publicKeyOptions, - const QString& origin, - const QString& groupName, - const StringPairList& keyList) -{ - auto db = selectedDatabase(); - if (!db) { - return getPasskeyError(ERROR_KEEPASS_DATABASE_NOT_OPENED); - } - - QJsonObject credentialCreationOptions; - const auto pkOptionsResult = - browserPasskeysClient()->getCredentialCreationOptions(publicKeyOptions, origin, &credentialCreationOptions); - if (pkOptionsResult > 0 || credentialCreationOptions.isEmpty()) { - return getPasskeyError(pkOptionsResult); - } - - const auto excludeCredentials = credentialCreationOptions["excludeCredentials"].toArray(); - const auto rpId = credentialCreationOptions["rp"].toObject()["id"].toString(); - const auto timeout = publicKeyOptions["timeout"].toInt(); - const auto username = credentialCreationOptions["user"].toObject()["name"].toString(); - const auto user = credentialCreationOptions["user"].toObject(); - const auto userId = user["id"].toString(); - - // Parse excludeCredentialDescriptorList - if (!excludeCredentials.isEmpty() && isPasskeyCredentialExcluded(excludeCredentials, rpId, keyList)) { - return getPasskeyError(ERROR_PASSKEYS_CREDENTIAL_IS_EXCLUDED); - } - - const auto existingEntries = getPasskeyEntriesWithUserHandle(rpId, userId, keyList); - - raiseWindow(); - BrowserPasskeysConfirmationDialog confirmDialog(m_currentDatabaseWidget); - confirmDialog.registerCredential(username, rpId, existingEntries, timeout); - - auto dialogResult = confirmDialog.exec(); - if (dialogResult == QDialog::Accepted) { - const auto publicKeyCredentials = - browserPasskeys()->buildRegisterPublicKeyCredential(credentialCreationOptions); - if (publicKeyCredentials.credentialId.isEmpty() || publicKeyCredentials.key.isEmpty() - || publicKeyCredentials.response.isEmpty()) { - return getPasskeyError(ERROR_PASSKEYS_UNKNOWN_ERROR); - } - - const auto rpName = publicKeyOptions["rp"]["name"].toString(); - if (confirmDialog.isPasskeyUpdated()) { - // If no entry is selected, show the import dialog for manual entry selection - auto selectedEntry = confirmDialog.getSelectedEntry(); - if (!selectedEntry) { - PasskeyImporter passkeyImporter(m_currentDatabaseWidget); - const auto result = passkeyImporter.showImportDialog(db, - nullptr, - origin, - rpId, - username, - publicKeyCredentials.credentialId, - userId, - publicKeyCredentials.key, - tr("KeePassXC - Passkey credentials"), - tr("Register a new passkey to this entry:"), - tr("Register")); - if (!result) { - return getPasskeyError(ERROR_PASSKEYS_REQUEST_CANCELED); - } - } else { - addPasskeyToEntry(selectedEntry, - rpId, - rpName, - username, - publicKeyCredentials.credentialId, - userId, - publicKeyCredentials.key); - } - } else { - // Handle new/existing group - const auto createResponse = - createNewGroup(groupName.isEmpty() ? PASSKEYS_DEFAULT_GROUP_NAME : groupName, true); - const auto group = db->rootGroup()->findGroupByUuid(Tools::hexToUuid(createResponse["uuid"].toString())); - - addPasskeyToGroup(db, - group, - origin, - rpId, - rpName, - username, - publicKeyCredentials.credentialId, - userId, - publicKeyCredentials.key); - } - - hideWindow(); - return publicKeyCredentials.response; - } - - hideWindow(); - return getPasskeyError(ERROR_PASSKEYS_REQUEST_CANCELED); -} - -// Passkey authentication -QJsonObject BrowserService::showPasskeysAuthenticationPrompt(const QJsonObject& publicKeyOptions, - const QString& origin, - const StringPairList& keyList) -{ - auto db = getDatabase(); - if (!db) { - return getPasskeyError(ERROR_KEEPASS_DATABASE_NOT_OPENED); - } - - QJsonObject assertionOptions; - const auto assertionResult = - browserPasskeysClient()->getAssertionOptions(publicKeyOptions, origin, &assertionOptions); - if (assertionResult > 0 || assertionOptions.isEmpty()) { - return getPasskeyError(assertionResult); - } - - // Get allowed entries from RP ID - const auto rpId = assertionOptions["rpId"].toString(); - const auto entries = getPasskeyAllowedEntries(assertionOptions, rpId, keyList); - if (entries.isEmpty()) { - return getPasskeyError(ERROR_KEEPASS_NO_LOGINS_FOUND); - } - - const auto timeout = publicKeyOptions["timeout"].toInt(); - - raiseWindow(); - BrowserPasskeysConfirmationDialog confirmDialog(m_currentDatabaseWidget); - confirmDialog.authenticateCredential(entries, rpId, timeout); - auto dialogResult = confirmDialog.exec(); - if (dialogResult == QDialog::Accepted) { - hideWindow(); - const auto selectedEntry = confirmDialog.getSelectedEntry(); - if (!selectedEntry) { - return getPasskeyError(ERROR_PASSKEYS_UNKNOWN_ERROR); - } - - const auto privateKeyPem = selectedEntry->attributes()->value(EntryAttributes::KPEX_PASSKEY_PRIVATE_KEY_PEM); - const auto credentialId = passkeyUtils()->getCredentialIdFromEntry(selectedEntry); - const auto userHandle = selectedEntry->attributes()->value(EntryAttributes::KPEX_PASSKEY_USER_HANDLE); - - auto publicKeyCredential = - browserPasskeys()->buildGetPublicKeyCredential(assertionOptions, credentialId, userHandle, privateKeyPem); - if (publicKeyCredential.isEmpty()) { - return getPasskeyError(ERROR_PASSKEYS_UNKNOWN_ERROR); - } - - return publicKeyCredential; - } - - hideWindow(); - return getPasskeyError(ERROR_PASSKEYS_REQUEST_CANCELED); -} - -void BrowserService::addPasskeyToGroup(const QSharedPointer& db, - Group* group, - const QString& url, - const QString& rpId, - const QString& rpName, - const QString& username, - const QString& credentialId, - const QString& userHandle, - const QString& privateKey) -{ - // If no group provided, use the default browser group of the selected database - if (!group) { - if (!db) { - return; - } - group = getDefaultEntryGroup(db); - } - - auto* entry = new Entry(); - entry->setUuid(QUuid::createUuid()); - entry->setGroup(group); - entry->setTitle(tr("%1 (Passkey)").arg(rpName)); - entry->setUsername(username); - entry->setUrl(url); - entry->setIcon(KEEPASSXCBROWSER_PASSKEY_ICON); - - addPasskeyToEntry(entry, rpId, rpName, username, credentialId, userHandle, privateKey); - - // Remove blank entry history - entry->removeHistoryItems(entry->historyItems()); -} - -void BrowserService::addPasskeyToEntry(Entry* entry, - const QString& rpId, - const QString& rpName, - const QString& username, - const QString& credentialId, - const QString& userHandle, - const QString& privateKey) -{ - // Reserved for future use - Q_UNUSED(rpName) - - Q_ASSERT(entry); - if (!entry) { - return; - } - - // Ask confirmation if entry already contains a Passkey - if (entry->hasPasskey()) { - if (MessageBox::question(m_currentDatabaseWidget, - tr("KeePassXC - Update passkey"), - tr("Entry already has a passkey.\nDo you want to overwrite the passkey in %1 - %2?") - .arg(entry->title(), passkeyUtils()->getUsernameFromEntry(entry)), - MessageBox::Overwrite | MessageBox::Cancel, - MessageBox::Cancel) - != MessageBox::Overwrite) { - return; - } - } - - entry->beginUpdate(); - - entry->attributes()->set(EntryAttributes::KPEX_PASSKEY_USERNAME, username); - entry->attributes()->set(EntryAttributes::KPEX_PASSKEY_CREDENTIAL_ID, credentialId, true); - entry->attributes()->set(EntryAttributes::KPEX_PASSKEY_PRIVATE_KEY_PEM, privateKey, true); - entry->attributes()->set(EntryAttributes::KPEX_PASSKEY_RELYING_PARTY, rpId); - entry->attributes()->set(EntryAttributes::KPEX_PASSKEY_USER_HANDLE, userHandle, true); - entry->addTag(tr("Passkey")); - - entry->endUpdate(); -} -#endif - -void BrowserService::addEntry(const EntryParameters& entryParameters, +void BrowserService::addEntry(const QString& dbid, + const QString& login, + const QString& password, + const QString& siteUrl, + const QString& formUrl, + const QString& realm, const QString& group, const QString& groupUuid, const bool downloadFavicon, const QSharedPointer& selectedDb) { // TODO: select database based on this key id + Q_UNUSED(dbid); auto db = selectedDb ? selectedDb : selectedDatabase(); if (!db) { return; @@ -876,11 +568,11 @@ void BrowserService::addEntry(const EntryParameters& entryParameters, auto* entry = new Entry(); entry->setUuid(QUuid::createUuid()); - entry->setTitle(entryParameters.title.isEmpty() ? QUrl(entryParameters.siteUrl).host() : entryParameters.title); - entry->setUrl(entryParameters.siteUrl); + entry->setTitle(QUrl(siteUrl).host()); + entry->setUrl(siteUrl); entry->setIcon(KEEPASSXCBROWSER_DEFAULT_ICON); - entry->setUsername(entryParameters.login); - entry->setPassword(entryParameters.password); + entry->setUsername(login); + entry->setPassword(password); // Select a group for the entry if (!group.isEmpty()) { @@ -896,16 +588,16 @@ void BrowserService::addEntry(const EntryParameters& entryParameters, entry->setGroup(getDefaultEntryGroup(db)); } - const QString host = QUrl(entryParameters.siteUrl).host(); - const QString submitHost = QUrl(entryParameters.formUrl).host(); + const QString host = QUrl(siteUrl).host(); + const QString submitHost = QUrl(formUrl).host(); BrowserEntryConfig config; config.allow(host); if (!submitHost.isEmpty()) { config.allow(submitHost); } - if (!entryParameters.realm.isEmpty()) { - config.setRealm(entryParameters.realm); + if (!realm.isEmpty()) { + config.setRealm(realm); } config.save(entry); @@ -914,18 +606,24 @@ void BrowserService::addEntry(const EntryParameters& entryParameters, } } -bool BrowserService::updateEntry(const EntryParameters& entryParameters, const QString& uuid) +bool BrowserService::updateEntry(const QString& dbid, + const QString& uuid, + const QString& login, + const QString& password, + const QString& siteUrl, + const QString& formUrl) { // TODO: select database based on this key id + Q_UNUSED(dbid); auto db = selectedDatabase(); if (!db) { return false; } - auto entry = db->rootGroup()->findEntryByUuid(Tools::hexToUuid(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(entryParameters, "", "", false, db); + addEntry(dbid, login, password, siteUrl, formUrl, "", "", "", db); return true; } @@ -940,31 +638,32 @@ bool BrowserService::updateEntry(const EntryParameters& entryParameters, const Q } } - auto username = entry->username(); + QString username = entry->username(); if (username.isEmpty()) { return false; } bool result = false; - if (username.compare(entryParameters.login, Qt::CaseSensitive) != 0 - || entry->password().compare(entryParameters.password, Qt::CaseSensitive) != 0) { + 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(m_currentDatabaseWidget, - tr("KeePassXC - Update Entry"), - tr("Do you want to update the information in %1 - %2?") - .arg(QUrl(entryParameters.siteUrl).host(), username), - MessageBox::Save | MessageBox::Cancel, - MessageBox::Cancel); + dialogResult = MessageBox::question( + nullptr, + tr("KeePassXC: Update Entry"), + tr("Do you want to update the information in %1 - %2?").arg(QUrl(siteUrl).host(), username), + MessageBox::Save | MessageBox::Cancel, + MessageBox::Cancel, + MessageBox::Raise); } if (browserSettings()->alwaysAllowUpdate() || dialogResult == MessageBox::Save) { entry->beginUpdate(); if (!entry->attributes()->isReference(EntryAttributes::UserNameKey)) { - entry->setUsername(entryParameters.login); + entry->setUsername(login); } - entry->setPassword(entryParameters.password); + entry->setPassword(password); entry->endUpdate(); result = true; } @@ -987,8 +686,8 @@ bool BrowserService::deleteEntry(const QString& uuid) return false; } - auto dialogResult = MessageBox::warning(m_currentDatabaseWidget, - tr("KeePassXC - Delete entry"), + auto dialogResult = MessageBox::warning(nullptr, + tr("KeePassXC: Delete entry"), tr("A request for deleting entry \"%1\" has been received.\n" "Do you want to delete the entry?\n") .arg(entry->title()), @@ -1001,20 +700,8 @@ bool BrowserService::deleteEntry(const QString& uuid) return true; } -void BrowserService::removePluginData(Entry* entry) const -{ - if (entry) { - entry->beginUpdate(); - entry->customData()->remove(BrowserService::KEEPASSXCBROWSER_NAME); - entry->endUpdate(); - } -} - -QList BrowserService::searchEntries(const QSharedPointer& db, - const QString& siteUrl, - const QString& formUrl, - const QStringList& keys, - bool passkey) +QList +BrowserService::searchEntries(const QSharedPointer& db, const QString& siteUrl, const QString& formUrl) { QList entries; auto* rootGroup = db->rootGroup(); @@ -1028,12 +715,6 @@ QList BrowserService::searchEntries(const QSharedPointer& db, continue; } - // If a key restriction is specified and not contained in the keys list then skip this group. - auto restrictKey = group->resolveCustomDataString(BrowserService::OPTION_RESTRICT_KEY); - if (!restrictKey.isEmpty() && !keys.contains(restrictKey)) { - continue; - } - const auto omitWwwSubdomain = group->resolveCustomDataTriState(BrowserService::OPTION_OMIT_WWW) == Group::Enable; @@ -1044,17 +725,10 @@ QList BrowserService::searchEntries(const QSharedPointer& db, continue; } - if (!passkey && !shouldIncludeEntry(entry, siteUrl, formUrl, omitWwwSubdomain)) { + if (!shouldIncludeEntry(entry, siteUrl, formUrl, omitWwwSubdomain)) { continue; } -#ifdef WITH_XC_BROWSER_PASSKEYS - // With Passkeys, check for the Relying Party instead of URL - if (passkey && entry->attributes()->value(EntryAttributes::KPEX_PASSKEY_RELYING_PARTY) != siteUrl) { - continue; - } -#endif - // Additional URL check may have already inserted the entry to the list if (!entries.contains(entry)) { entries.append(entry); @@ -1065,41 +739,33 @@ QList BrowserService::searchEntries(const QSharedPointer& db, return entries; } -QList BrowserService::searchEntries(const QString& siteUrl, - const QString& formUrl, - const StringPairList& keyList, - bool passkey) +QList +BrowserService::searchEntries(const QString& siteUrl, const QString& formUrl, const StringPairList& keyList) { - // Check if database is connected with KeePassXC-Browser. If so, return browser key (otherwise empty) + // Check if database is connected with KeePassXC-Browser auto databaseConnected = [&](const QSharedPointer& db) { for (const StringPair& keyPair : keyList) { - const auto key = db->metadata()->customData()->value( - CustomData::getKeyWithPrefix(CustomData::BrowserKeyPrefix, keyPair.first)); + QString key = db->metadata()->customData()->value(CustomData::BrowserKeyPrefix + keyPair.first); if (!key.isEmpty() && keyPair.second == key) { - return keyPair.first; + return true; } } - return QString(); + return false; }; // Get the list of databases to search QList> databases; - QStringList keys; if (browserSettings()->searchInAllDatabases()) { for (auto dbWidget : getMainWindow()->getOpenDatabases()) { auto db = dbWidget->database(); - auto key = databaseConnected(dbWidget->database()); - if (db && !key.isEmpty()) { + if (db && databaseConnected(dbWidget->database())) { databases << db; - keys << key; } } } else { const auto& db = getDatabase(); - auto key = databaseConnected(db); - if (!key.isEmpty()) { + if (databaseConnected(db)) { databases << db; - keys << key; } } @@ -1108,16 +774,84 @@ QList BrowserService::searchEntries(const QString& siteUrl, QList entries; do { for (const auto& db : databases) { - entries << searchEntries(db, siteUrl, formUrl, keys, passkey); + entries << searchEntries(db, siteUrl, formUrl); } } while (entries.isEmpty() && removeFirstDomain(hostname)); return entries; } -QString BrowserService::decodeCustomDataRestrictKey(const QString& key) +void BrowserService::convertAttributesToCustomData(QSharedPointer db) { - return key.isEmpty() ? tr("Disable") : key; + if (!db) { + return; + } + + QList entries = db->rootGroup()->entriesRecursive(); + QProgressDialog progress(tr("Converting attributes to custom data…"), tr("Abort"), 0, entries.count()); + progress.setWindowModality(Qt::WindowModal); + + int counter = 0; + int keyCounter = 0; + for (auto* entry : entries) { + if (progress.wasCanceled()) { + return; + } + + 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); + db->recycleEntry(entry); + } + + progress.setValue(progress.value() + 1); + } + progress.reset(); + + if (counter > 0) { + 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 { + 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; + } + + for (auto* g : rootGroup->groupsRecursive(true)) { + if (g->name() == KEEPASSHTTP_GROUP_NAME) { + g->setName(KEEPASSXCBROWSER_GROUP_NAME); + break; + } + } } void BrowserService::requestGlobalAutoType(const QString& search) @@ -1125,12 +859,12 @@ void BrowserService::requestGlobalAutoType(const QString& search) emit osUtils->globalShortcutTriggered("autotype", search); } -QList BrowserService::sortEntries(QList& entries, const QString& siteUrl, const QString& formUrl) +QList BrowserService::sortEntries(QList& pwEntries, const QString& siteUrl, const QString& formUrl) { // Build map of prioritized entries QMultiMap priorities; - for (auto* entry : entries) { - priorities.insert(sortPriority(entry->getAllUrls(), siteUrl, formUrl), entry); + for (auto* entry : pwEntries) { + priorities.insert(sortPriority(getEntryURLs(entry), siteUrl, formUrl), entry); } auto keys = priorities.uniqueKeys(); @@ -1192,7 +926,7 @@ QJsonObject BrowserService::prepareEntry(const Entry* entry) res["uuid"] = entry->resolveMultiplePlaceholders(entry->uuidToHex()); res["group"] = entry->resolveMultiplePlaceholders(entry->group()->name()); - if (entry->hasValidTotp()) { + if (entry->hasTotp()) { res["totp"] = entry->totp(); } @@ -1227,8 +961,8 @@ QJsonObject BrowserService::prepareEntry(const Entry* entry) BrowserService::Access BrowserService::checkAccess(const Entry* entry, const QString& siteHost, const QString& formHost, const QString& realm) { - if (entry->isExpired() && !browserSettings()->allowExpiredCredentials()) { - return Denied; + if (entry->isExpired()) { + return browserSettings()->allowExpiredCredentials() ? Unknown : Denied; } BrowserEntryConfig config; @@ -1346,6 +1080,18 @@ int BrowserService::sortPriority(const QStringList& urls, const QString& siteUrl return *std::max_element(priorityList.begin(), priorityList.end()); } +bool BrowserService::schemeFound(const QString& url) +{ + QUrl address(url); + return !address.scheme().isEmpty(); +} + +bool BrowserService::isIpAddress(const QString& host) const +{ + QHostAddress address(host); + return address.protocol() == QAbstractSocket::IPv4Protocol || address.protocol() == QAbstractSocket::IPv6Protocol; +} + bool BrowserService::removeFirstDomain(QString& hostname) { int pos = hostname.indexOf("."); @@ -1377,15 +1123,9 @@ bool BrowserService::shouldIncludeEntry(Entry* entry, return url.endsWith("by-path/" + entry->path()); } - // Handle the entry URL - if (handleURL(entry->resolveUrl(), url, submitUrl, omitWwwSubdomain)) { - return true; - } - - // Handle additional URLs - const auto additionalUrls = entry->getAdditionalUrls(); - for (const auto& additionalUrl : additionalUrls) { - if (handleURL(additionalUrl, url, submitUrl, omitWwwSubdomain, true)) { + const auto allEntryUrls = entry->getAllUrls(); + for (const auto& entryUrl : allEntryUrls) { + if (handleURL(entryUrl, url, submitUrl, omitWwwSubdomain)) { return true; } } @@ -1393,115 +1133,20 @@ bool BrowserService::shouldIncludeEntry(Entry* entry, return false; } -#ifdef WITH_XC_BROWSER_PASSKEYS -// Returns all Passkey entries for the current Relying Party -QList BrowserService::getPasskeyEntries(const QString& rpId, const StringPairList& keyList) -{ - QList entries; - for (const auto& entry : searchEntries(rpId, "", keyList, true)) { - if (entry->hasPasskey() && entry->attributes()->value(EntryAttributes::KPEX_PASSKEY_RELYING_PARTY) == rpId) { - entries << entry; - } - } - - return entries; -} - -// Returns all Passkey entries for the current Relying Party and identical user handle -QList BrowserService::getPasskeyEntriesWithUserHandle(const QString& rpId, - const QString& userId, - const StringPairList& keyList) -{ - QList entries; - for (const auto& entry : searchEntries(rpId, "", keyList, true)) { - if (entry->hasPasskey() && entry->attributes()->value(EntryAttributes::KPEX_PASSKEY_RELYING_PARTY) == rpId - && entry->attributes()->value(EntryAttributes::KPEX_PASSKEY_USER_HANDLE) == userId) { - entries << entry; - } - } - - return entries; -} - -// Get all entries for the site that are allowed by the server -QList BrowserService::getPasskeyAllowedEntries(const QJsonObject& assertionOptions, - const QString& rpId, - const StringPairList& keyList) -{ - QList entries; - const auto allowedCredentials = passkeyUtils()->getAllowedCredentialsFromAssertionOptions(assertionOptions); - if (!assertionOptions["allowCredentials"].toArray().isEmpty() && allowedCredentials.isEmpty()) { - return {}; - } - - for (const auto& entry : getPasskeyEntries(rpId, keyList)) { - // If allowedCredentials.isEmpty() check if entry contains an extra attribute for user handle. - // If that is found, the entry should be allowed. - // See: https://w3c.github.io/webauthn/#dom-authenticatorassertionresponse-userhandle - if (allowedCredentials.contains(passkeyUtils()->getCredentialIdFromEntry(entry)) - || (allowedCredentials.isEmpty() - && entry->attributes()->hasKey(EntryAttributes::KPEX_PASSKEY_USER_HANDLE))) { - entries << entry; - } - } - - return entries; -} - -// Checks if the same user ID already exists for the current RP ID -bool BrowserService::isPasskeyCredentialExcluded(const QJsonArray& excludeCredentials, - const QString& rpId, - const StringPairList& keyList) -{ - QStringList allIds; - for (const auto& cred : excludeCredentials) { - allIds << cred["id"].toString(); - } - - const auto passkeyEntries = getPasskeyEntries(rpId, keyList); - return std::any_of(passkeyEntries.begin(), passkeyEntries.end(), [&](const auto& entry) { - return allIds.contains(passkeyUtils()->getCredentialIdFromEntry(entry)); - }); -} - -QJsonObject BrowserService::getPasskeyError(int errorCode) const -{ - return QJsonObject({{"errorCode", errorCode}}); -} -#endif - bool BrowserService::handleURL(const QString& entryUrl, const QString& siteUrl, const QString& formUrl, - const bool omitWwwSubdomain, - const bool allowWildcards) + const bool omitWwwSubdomain) { if (entryUrl.isEmpty()) { return false; } - bool isWildcardUrl = false; - auto tempUrl = entryUrl; - - // Allows matching with exact URL and wildcards - if (allowWildcards) { - // Exact match where URL is wrapped inside " characters - if (entryUrl.startsWith("\"") && entryUrl.endsWith("\"")) { - return QStringView{entryUrl}.mid(1, entryUrl.length() - 2) == siteUrl; - } - - // Replace wildcards - isWildcardUrl = entryUrl.contains("*"); - if (isWildcardUrl) { - tempUrl = tempUrl.replace("*", UrlTools::URL_WILDCARD); - } - } - QUrl entryQUrl; if (entryUrl.contains("://")) { - entryQUrl = tempUrl; + entryQUrl = entryUrl; } else { - entryQUrl = QUrl::fromUserInput(tempUrl); + entryQUrl = QUrl::fromUserInput(entryUrl); if (browserSettings()->matchUrlScheme()) { entryQUrl.setScheme("https"); @@ -1541,13 +1186,8 @@ bool BrowserService::handleURL(const QString& entryUrl, return false; } - // Use wildcard matching instead - if (isWildcardUrl) { - return handleURLWithWildcards(entryQUrl, siteUrl); - } - // Match the base domain - if (urlTools()->getBaseDomainFromUrl(siteQUrl.host()) != urlTools()->getBaseDomainFromUrl(entryQUrl.host())) { + if (getTopLevelDomainFromUrl(siteQUrl.host()) != getTopLevelDomainFromUrl(entryQUrl.host())) { return false; } @@ -1557,76 +1197,44 @@ bool BrowserService::handleURL(const QString& entryUrl, } return false; -} +}; -bool BrowserService::handleURLWithWildcards(const QUrl& entryQUrl, const QString& siteUrl) +/** + * Gets the base domain of URL. + * + * Returns the base domain, e.g. https://another.example.co.uk -> example.co.uk + */ +QString BrowserService::getTopLevelDomainFromUrl(const QString& url) const { - auto matchWithRegex = [&](QString firstPart, const QString& secondPart, bool hostnameUsed = false) { - if (firstPart == secondPart) { - return true; - } + QUrl qurl = QUrl::fromUserInput(url); + QString host = qurl.host(); - // If there's no wildcard with hostname, just compare directly - if (hostnameUsed && !firstPart.contains(UrlTools::URL_WILDCARD) && firstPart != secondPart) { - return false; - } - - // Escape illegal characters - auto re = Tools::escapeRegex(firstPart); - - if (hostnameUsed) { - // Replace all host parts with wildcards - re = re.replace(QString("%1.").arg(UrlTools::URL_WILDCARD), "(.*?)\\."); - } - - // Append a + to the end of regex to match all paths after the last asterisk - if (re.endsWith(UrlTools::URL_WILDCARD)) { - re.append("+"); - } - - // Replace any remaining wildcards for paths - re = re.replace(UrlTools::URL_WILDCARD, "(.*?)"); - return QRegularExpression(re).match(secondPart).hasMatch(); - }; - - // Match hostname and path - QUrl siteQUrl = siteUrl; - if (!matchWithRegex(entryQUrl.host(), siteQUrl.host(), true) - || !matchWithRegex(entryQUrl.path(), siteQUrl.path())) { - return false; + // If the hostname is an IP address, return it directly + if (isIpAddress(host)) { + return host; } - return true; -} - -QSharedPointer BrowserService::getDatabase(const QUuid& rootGroupUuid) -{ - if (!rootGroupUuid.isNull()) { - const auto openDatabases = getOpenDatabases(); - for (const auto& db : openDatabases) { - if (db->rootGroup()->uuid() == rootGroupUuid) { - return db; - } - } + if (host.isEmpty() || !host.contains(qurl.topLevelDomain())) { + return {}; } + // Remove the top level domain part from the hostname, e.g. https://another.example.co.uk -> https://another.example + host.chop(qurl.topLevelDomain().length()); + // Split the URL and select the last part, e.g. https://another.example -> example + QString baseDomain = host.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 (m_currentDatabaseWidget) { return m_currentDatabaseWidget->database(); } return {}; } -QList> BrowserService::getOpenDatabases() -{ - QList> databaseList; - for (auto dbWidget : getMainWindow()->getOpenDatabases()) { - if (!dbWidget->isLocked()) { - databaseList << dbWidget->database(); - } - } - return databaseList; -} - QSharedPointer BrowserService::selectedDatabase() { QList databaseWidgets; @@ -1637,7 +1245,7 @@ QSharedPointer BrowserService::selectedDatabase() } } - BrowserEntrySaveDialog browserEntrySaveDialog(m_currentDatabaseWidget); + BrowserEntrySaveDialog browserEntrySaveDialog; int openDatabaseCount = browserEntrySaveDialog.setItems(databaseWidgets, m_currentDatabaseWidget); if (openDatabaseCount > 1) { int res = browserEntrySaveDialog.exec(); @@ -1656,6 +1264,99 @@ QSharedPointer BrowserService::selectedDatabase() return getDatabase(); } +bool BrowserService::moveSettingsToCustomData(Entry* entry, const QString& name) +{ + 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, QSharedPointer db) +{ + int keyCounter = 0; + for (const auto& key : entry->attributes()->keys()) { + if (key.contains(CustomData::BrowserLegacyKeyPrefix)) { + QString publicKey = key; + publicKey.remove(CustomData::BrowserLegacyKeyPrefix); + + // Add key to database custom data + if (db && !db->metadata()->customData()->contains(CustomData::BrowserKeyPrefix + publicKey)) { + db->metadata()->customData()->set(CustomData::BrowserKeyPrefix + publicKey, + entry->attributes()->value(key)); + ++keyCounter; + } + } + } + + return keyCounter; +} + +bool BrowserService::checkLegacySettings(QSharedPointer db) +{ + if (!db || !browserSettings()->isEnabled() || browserSettings()->noMigrationPrompt()) { + return false; + } + + bool legacySettingsFound = false; + QList entries = db->rootGroup()->entriesRecursive(); + for (const auto& e : entries) { + if (e->isRecycled()) { + continue; + } + + 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* checkbox = new QCheckBox(tr("Don't show this warning again")); + QObject::connect(checkbox, &QCheckBox::stateChanged, [&](int state) { + browserSettings()->setNoMigrationPrompt(static_cast(state) == Qt::CheckState::Checked); + }); + + 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, + MessageBox::NoButton, + MessageBox::Raise, + checkbox); + + return dialogResult == MessageBox::Yes; +} + +QStringList BrowserService::getEntryURLs(const Entry* entry) +{ + QStringList urlList; + urlList << entry->url(); + + // Handle additional URL's + for (const auto& key : entry->attributes()->keys()) { + if (key.startsWith(ADDITIONAL_URL)) { + urlList << entry->attributes()->value(key); + } + } + + return urlList; +} + void BrowserService::hideWindow() const { if (m_prevWindowState == WindowState::Minimized) { @@ -1739,6 +1440,11 @@ void BrowserService::databaseUnlocked(DatabaseWidget* dbWidget) QJsonObject msg; msg["action"] = QString("database-unlocked"); m_browserHost->broadcastClientMessage(msg); + + auto db = dbWidget->database(); + if (checkLegacySettings(db)) { + convertAttributesToCustomData(db); + } } } @@ -1755,15 +1461,6 @@ void BrowserService::activeDatabaseChanged(DatabaseWidget* dbWidget) m_currentDatabaseWidget = dbWidget; } -void BrowserService::handleDatabaseUnlockDialogFinished(bool accepted, DatabaseWidget* dbWidget) -{ - // User canceled the database open dialog - if (dbWidget && !accepted && m_bringToFrontRequested) { - m_bringToFrontRequested = false; - hideWindow(); - } -} - void BrowserService::processClientMessage(QLocalSocket* socket, const QJsonObject& message) { auto clientID = message["clientID"].toString(); diff --git a/src/browser/BrowserService.h b/src/browser/BrowserService.h index c59f9303d..b9e153248 100644 --- a/src/browser/BrowserService.h +++ b/src/browser/BrowserService.h @@ -1,7 +1,6 @@ /* - * Copyright (C) 2025 KeePassXC Team - * Copyright (C) 2017 Sami Vänttinen * Copyright (C) 2013 Francois Ferrand + * Copyright (C) 2022 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,11 +16,10 @@ * along with this program. If not, see . */ -#ifndef KEEPASSXC_BROWSERSERVICE_H -#define KEEPASSXC_BROWSERSERVICE_H +#ifndef BROWSERSERVICE_H +#define BROWSERSERVICE_H #include "BrowserAccessControlDialog.h" -#include "config-keepassx.h" #include "core/Entry.h" #include "gui/PasswordGeneratorWidget.h" @@ -35,27 +33,6 @@ enum max_length = 16 * 1024 }; -struct KeyPairMessage -{ - QLocalSocket* socket; - QString nonce; - QString publicKey; - QString secretKey; -}; - -struct EntryParameters -{ - QString dbid; - QString title; - QString login; - QString password; - QString realm; - QString hash; - QString siteUrl; - QString formUrl; - bool httpAuth; -}; - class DatabaseWidget; class BrowserHost; class BrowserAction; @@ -79,51 +56,39 @@ public: void lockDatabase(); QJsonObject getDatabaseGroups(); - QJsonArray getDatabaseEntries(); - QJsonObject createNewGroup(const QString& groupName, bool isPasskeysGroup = false); + QJsonObject createNewGroup(const QString& groupName); QString getCurrentTotp(const QString& uuid); - void showPasswordGenerator(const KeyPairMessage& keyPairMessage); + void showPasswordGenerator(QLocalSocket* socket, + const QString& nonce, + const QString& publicKey, + const QString& secretKey); bool isPasswordGeneratorRequested() const; - QSharedPointer getDatabase(const QUuid& rootGroupUuid = {}); - QSharedPointer selectedDatabase(); - QList> getOpenDatabases(); -#ifdef WITH_XC_BROWSER_PASSKEYS - QJsonObject showPasskeysRegisterPrompt(const QJsonObject& publicKeyOptions, - const QString& origin, - const QString& groupName, - const StringPairList& keyList); - QJsonObject showPasskeysAuthenticationPrompt(const QJsonObject& publicKeyOptions, - const QString& origin, - const StringPairList& keyList); - void addPasskeyToGroup(const QSharedPointer& db, - Group* group, - const QString& url, - const QString& rpId, - const QString& rpName, - const QString& username, - const QString& credentialId, - const QString& userHandle, - const QString& privateKey); - void addPasskeyToEntry(Entry* entry, - const QString& rpId, - const QString& rpName, - const QString& username, - const QString& credentialId, - const QString& userHandle, - const QString& privateKey); -#endif - void addEntry(const EntryParameters& entryParameters, + + void addEntry(const QString& dbid, + const QString& login, + const QString& password, + const QString& siteUrl, + const QString& formUrl, + const QString& realm, const QString& group, const QString& groupUuid, const bool downloadFavicon, const QSharedPointer& selectedDb = {}); - bool updateEntry(const EntryParameters& entryParameters, const QString& uuid); + bool updateEntry(const QString& dbid, + const QString& uuid, + const QString& login, + const QString& password, + const QString& siteUrl, + const QString& formUrl); bool deleteEntry(const QString& uuid); - void removePluginData(Entry* entry) const; - QJsonArray findEntries(const EntryParameters& entryParameters, const StringPairList& keyList, bool* entriesFound); + QJsonArray findMatchingEntries(const QString& dbid, + const QString& siteUrlStr, + const QString& formUrlStr, + const QString& realm, + const StringPairList& keyList, + const bool httpAuth = false); void requestGlobalAutoType(const QString& search); - - static QString decodeCustomDataRestrictKey(const QString& key); + static void convertAttributesToCustomData(QSharedPointer db); static const QString KEEPASSXCBROWSER_NAME; static const QString KEEPASSXCBROWSER_OLD_NAME; @@ -133,7 +98,6 @@ public: static const QString OPTION_NOT_HTTP_AUTH; static const QString OPTION_OMIT_WWW; static const QString ADDITIONAL_URL; - static const QString OPTION_RESTRICT_KEY; signals: void requestUnlock(); @@ -146,7 +110,6 @@ public slots: private slots: void processClientMessage(QLocalSocket* socket, const QJsonObject& message); - void handleDatabaseUnlockDialogFinished(bool accepted, DatabaseWidget* dbWidget); private: enum Access @@ -163,18 +126,14 @@ private: Hidden }; - QList searchEntries(const QSharedPointer& db, - const QString& siteUrl, - const QString& formUrl, - const QStringList& keys = {}, - bool passkey = false); - QList - searchEntries(const QString& siteUrl, const QString& formUrl, const StringPairList& keyList, bool passkey = false); - QList sortEntries(QList& entries, const QString& siteUrl, const QString& formUrl); - QList confirmEntries(QList& entriesToConfirm, - const EntryParameters& entryParameters, + QList searchEntries(const QSharedPointer& db, const QString& siteUrl, const QString& formUrl); + QList searchEntries(const QString& siteUrl, const QString& formUrl, const StringPairList& keyList); + QList sortEntries(QList& pwEntries, const QString& siteUrl, const QString& formUrl); + QList confirmEntries(QList& pwEntriesToConfirm, + const QString& siteUrl, const QString& siteHost, const QString& formUrl, + const QString& realm, const bool httpAuth); QJsonObject prepareEntry(const Entry* entry); void allowEntry(Entry* entry, const QString& siteHost, const QString& formUrl, const QString& realm); @@ -183,49 +142,46 @@ private: Access checkAccess(const Entry* entry, const QString& siteHost, const QString& formHost, const QString& realm); Group* getDefaultEntryGroup(const QSharedPointer& selectedDb = {}); int sortPriority(const QStringList& urls, const QString& siteUrl, const QString& formUrl); + bool schemeFound(const QString& url); + bool isIpAddress(const QString& host) const; bool removeFirstDomain(QString& hostname); bool shouldIncludeEntry(Entry* entry, const QString& url, const QString& submitUrl, const bool omitWwwSubdomain = false); -#ifdef WITH_XC_BROWSER_PASSKEYS - QList getPasskeyEntries(const QString& rpId, const StringPairList& keyList); - QList - getPasskeyEntriesWithUserHandle(const QString& rpId, const QString& userId, const StringPairList& keyList); - QList - getPasskeyAllowedEntries(const QJsonObject& assertionOptions, const QString& rpId, const StringPairList& keyList); - bool isPasskeyCredentialExcluded(const QJsonArray& excludeCredentials, - const QString& rpId, - const StringPairList& keyList); - QJsonObject getPasskeyError(int errorCode) const; -#endif bool handleURL(const QString& entryUrl, const QString& siteUrl, const QString& formUrl, - const bool omitWwwSubdomain = false, - const bool allowWildcards = false); - bool handleURLWithWildcards(const QUrl& entryQUrl, const QString& siteUrl); + const bool omitWwwSubdomain = false); + QString getTopLevelDomainFromUrl(const QString& url) const; + QString baseDomain(const QString& hostname) const; + QSharedPointer getDatabase(); + QSharedPointer selectedDatabase(); QString getDatabaseRootUuid(); QString getDatabaseRecycleBinUuid(); + bool checkLegacySettings(QSharedPointer db); + QStringList getEntryURLs(const Entry* entry); void hideWindow() const; void raiseWindow(const bool force = false); + void updateWindowState(); + static bool moveSettingsToCustomData(Entry* entry, const QString& name); + static int moveKeysToCustomData(Entry* entry, QSharedPointer db); + QPointer m_browserHost; QHash> m_browserClients; bool m_dialogActive; bool m_bringToFrontRequested; + bool m_passwordGeneratorRequested; WindowState m_prevWindowState; QUuid m_keepassBrowserUUID; QPointer m_currentDatabaseWidget; - QPointer m_passwordGenerator; + QScopedPointer m_passwordGenerator; Q_DISABLE_COPY(BrowserService); friend class TestBrowser; -#ifdef WITH_XC_BROWSER_PASSKEYS - friend class TestPasskeys; -#endif }; static inline BrowserService* browserService() @@ -233,4 +189,4 @@ static inline BrowserService* browserService() return BrowserService::instance(); } -#endif // KEEPASSXC_BROWSERSERVICE_H +#endif // BROWSERSERVICE_H diff --git a/src/browser/BrowserSettings.cpp b/src/browser/BrowserSettings.cpp index 0a8226c12..7b5704e78 100644 --- a/src/browser/BrowserSettings.cpp +++ b/src/browser/BrowserSettings.cpp @@ -1,7 +1,7 @@ /* - * Copyright (C) 2024 KeePassXC Team - * Copyright (C) 2017 Sami Vänttinen * Copyright (C) 2013 Francois Ferrand + * Copyright (C) 2017 Sami Vänttinen + * Copyright (C) 2021 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 @@ -145,16 +145,6 @@ void BrowserSettings::setNoMigrationPrompt(bool prompt) config()->set(Config::Browser_NoMigrationPrompt, prompt); } -bool BrowserSettings::allowLocalhostWithPasskeys() -{ - return config()->get(Config::Browser_AllowLocalhostWithPasskeys).toBool(); -} - -void BrowserSettings::setAllowLocalhostWithPasskeys(bool enabled) -{ - config()->set(Config::Browser_AllowLocalhostWithPasskeys, enabled); -} - bool BrowserSettings::useCustomProxy() { return config()->get(Config::Browser_UseCustomProxy).toBool(); @@ -210,11 +200,6 @@ QString BrowserSettings::proxyLocation() return m_nativeMessageInstaller.getProxyPath(); } -QString BrowserSettings::proxyLocationAsInstalled() const -{ - return m_nativeMessageInstaller.getInstalledProxyPath(); -} - #ifdef QT_DEBUG QString BrowserSettings::customExtensionId() { @@ -237,16 +222,6 @@ void BrowserSettings::setUpdateBinaryPath(bool enabled) config()->set(Config::Browser_UpdateBinaryPath, enabled); } -bool BrowserSettings::allowGetDatabaseEntriesRequest() -{ - return config()->get(Config::Browser_AllowGetDatabaseEntriesRequest).toBool(); -} - -void BrowserSettings::setAllowGetDatabaseEntriesRequest(bool enabled) -{ - config()->set(Config::Browser_AllowGetDatabaseEntriesRequest, enabled); -} - bool BrowserSettings::allowExpiredCredentials() { return config()->get(Config::Browser_AllowExpiredCredentials).toBool(); diff --git a/src/browser/BrowserSettings.h b/src/browser/BrowserSettings.h index 9c0b3718e..18ededb4c 100644 --- a/src/browser/BrowserSettings.h +++ b/src/browser/BrowserSettings.h @@ -1,7 +1,7 @@ /* - * Copyright (C) 2024 KeePassXC Team - * Copyright (C) 2017 Sami Vänttinen * Copyright (C) 2013 Francois Ferrand + * Copyright (C) 2017 Sami Vänttinen + * Copyright (C) 2021 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,8 +17,8 @@ * along with this program. If not, see . */ -#ifndef KEEPASSXC_BROWSERSETTINGS_H -#define KEEPASSXC_BROWSERSETTINGS_H +#ifndef BROWSERSETTINGS_H +#define BROWSERSETTINGS_H #include "NativeMessageInstaller.h" @@ -51,23 +51,18 @@ public: void setSupportKphFields(bool supportKphFields); bool noMigrationPrompt(); void setNoMigrationPrompt(bool prompt); - bool allowLocalhostWithPasskeys(); - void setAllowLocalhostWithPasskeys(bool enabled); bool useCustomProxy(); void setUseCustomProxy(bool enabled); QString customProxyLocation(); void setCustomProxyLocation(const QString& location); QString proxyLocation(); - QString proxyLocationAsInstalled() const; #ifdef QT_DEBUG QString customExtensionId(); void setCustomExtensionId(const QString& id); #endif bool updateBinaryPath(); void setUpdateBinaryPath(bool enabled); - bool allowGetDatabaseEntriesRequest(); - void setAllowGetDatabaseEntriesRequest(bool enabled); bool allowExpiredCredentials(); void setAllowExpiredCredentials(bool enabled); @@ -94,4 +89,4 @@ inline BrowserSettings* browserSettings() return BrowserSettings::instance(); } -#endif // KEEPASSXC_BROWSERSETTINGS_H +#endif // BROWSERSETTINGS_H diff --git a/src/browser/BrowserSettingsWidget.cpp b/src/browser/BrowserSettingsWidget.cpp index 5a4ccce8d..8dd26d324 100644 --- a/src/browser/BrowserSettingsWidget.cpp +++ b/src/browser/BrowserSettingsWidget.cpp @@ -20,7 +20,6 @@ #include "BrowserSettings.h" #include "config-keepassx.h" -#include "gui/styles/StateColorPalette.h" #include @@ -31,18 +30,31 @@ BrowserSettingsWidget::BrowserSettingsWidget(QWidget* parent) m_ui->setupUi(this); // clang-format off + QString snapInstructions; +#if defined(KEEPASSXC_DIST_SNAP) + snapInstructions = "

    " + + tr("Due to Snap sandboxing, you must run a script to enable browser integration." + "
    " + "You can obtain this script from %1") + .arg("
    https://keepassxc.org"); +#endif + m_ui->extensionLabel->setOpenExternalLinks(true); m_ui->extensionLabel->setText( - tr("KeePassXC-Browser is needed for the browser integration to work.
    Download it for %1 and %2 and %3.") + tr("KeePassXC-Browser is needed for the browser integration to work.
    Download it for %1 and %2 and %3. %4") .arg("Firefox", - "" + "" "Google Chrome / Chromium / Vivaldi / Brave", - "Microsoft Edge")); + "Microsoft Edge", + snapInstructions)); // clang-format on + m_ui->warningWidget->setCloseButtonVisible(false); + m_ui->warningWidget->setAutoHideTimeout(-1); + m_ui->warningWidget->setAnimate(false); + m_ui->tabWidget->setEnabled(m_ui->enableBrowserSupport->isChecked()); connect(m_ui->enableBrowserSupport, SIGNAL(toggled(bool)), m_ui->tabWidget, SLOT(setEnabled(bool))); - connect(m_ui->enableBrowserSupport, SIGNAL(toggled(bool)), SLOT(validateProxyLocation())); // Custom Browser option #ifdef Q_OS_WIN @@ -60,15 +72,10 @@ BrowserSettingsWidget::BrowserSettingsWidget(QWidget* parent) connect(m_ui->useCustomProxy, SIGNAL(toggled(bool)), m_ui->customProxyLocation, SLOT(setEnabled(bool))); connect(m_ui->useCustomProxy, SIGNAL(toggled(bool)), m_ui->customProxyLocationBrowseButton, SLOT(setEnabled(bool))); - connect(m_ui->useCustomProxy, SIGNAL(toggled(bool)), SLOT(validateProxyLocation())); - connect(m_ui->customProxyLocation, SIGNAL(editingFinished()), SLOT(validateProxyLocation())); + connect(m_ui->useCustomProxy, SIGNAL(toggled(bool)), SLOT(validateCustomProxyLocation())); + connect(m_ui->customProxyLocation, SIGNAL(editingFinished()), SLOT(validateCustomProxyLocation())); connect(m_ui->customProxyLocationBrowseButton, SIGNAL(clicked()), this, SLOT(showProxyLocationFileDialog())); - m_ui->messageWidget->setVisible(false); - m_ui->messageWidget->setCloseButtonVisible(false); - m_ui->messageWidget->setWordWrap(true); - m_ui->messageWidget->setAutoHideTimeout(MessageWidget::DisableAutoHide); - #ifndef Q_OS_LINUX m_ui->snapWarningLabel->setVisible(false); #endif @@ -83,6 +90,7 @@ BrowserSettingsWidget::BrowserSettingsWidget(QWidget* parent) m_ui->torBrowserSupport->setHidden(true); m_ui->firefoxSupport->setText("Firefox and Tor Browser"); #endif + m_ui->browserGlobalWarningWidget->setVisible(false); #ifndef QT_DEBUG m_ui->customExtensionId->setVisible(false); @@ -113,12 +121,10 @@ void BrowserSettingsWidget::loadSettings() m_ui->httpAuthPermission->setChecked(settings->httpAuthPermission()); m_ui->searchInAllDatabases->setChecked(settings->searchInAllDatabases()); m_ui->supportKphFields->setChecked(settings->supportKphFields()); - m_ui->allowLocalhostWithPasskeys->setChecked(settings->allowLocalhostWithPasskeys()); m_ui->noMigrationPrompt->setChecked(settings->noMigrationPrompt()); m_ui->useCustomProxy->setChecked(settings->useCustomProxy()); m_ui->customProxyLocation->setText(settings->replaceHomePath(settings->customProxyLocation())); m_ui->updateBinaryPath->setChecked(settings->updateBinaryPath()); - m_ui->allowGetDatabaseEntriesRequest->setChecked(settings->allowGetDatabaseEntriesRequest()); m_ui->allowExpiredCredentials->setChecked(settings->allowExpiredCredentials()); m_ui->chromeSupport->setChecked(settings->browserSupport(BrowserShared::CHROME)); m_ui->chromiumSupport->setChecked(settings->browserSupport(BrowserShared::CHROMIUM)); @@ -139,13 +145,23 @@ void BrowserSettingsWidget::loadSettings() m_ui->useCustomProxy->setVisible(false); m_ui->customProxyLocation->setVisible(false); m_ui->customProxyLocationBrowseButton->setVisible(false); + m_ui->browsersGroupBox->setVisible(false); + m_ui->browsersGroupBox->setEnabled(false); m_ui->updateBinaryPath->setChecked(false); m_ui->updateBinaryPath->setVisible(false); // No custom browser for snaps m_ui->customBrowserSupport->setVisible(false); m_ui->customBrowserGroupBox->setVisible(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 #ifdef KEEPASSXC_DIST_FLATPAK + // Guarantees proxy path works with different flatpak installations + m_ui->updateBinaryPath->setChecked(true); + m_ui->updateBinaryPath->setEnabled(false); // The sandbox makes custom proxy locations very unintuitive m_ui->useCustomProxy->setChecked(false); m_ui->useCustomProxy->setEnabled(false); @@ -170,53 +186,22 @@ void BrowserSettingsWidget::loadSettings() #ifdef QT_DEBUG m_ui->customExtensionId->setText(settings->customExtensionId()); #endif - // Validate the complete proxy location dependency - not only in case it is custom, - // to make trouble-shooting for both developer and user easier - validateProxyLocation(); + + validateCustomProxyLocation(); } -QString BrowserSettingsWidget::resolveCustomProxyLocation() +void BrowserSettingsWidget::validateCustomProxyLocation() { - auto settings = browserSettings(); - auto proxyLocation = m_ui->customProxyLocation->text().trimmed(); - proxyLocation = settings->replaceTildeHomePath(proxyLocation); - return proxyLocation; -} + auto path = browserSettings()->customProxyLocation(); -void BrowserSettingsWidget::validateProxyLocation() -{ -#if !defined(KEEPASSXC_DIST_SNAP) && !defined(KEEPASSXC_DIST_FLATPAK) - // Reset the UI - m_ui->messageWidget->setVisible(false); - m_ui->customProxyLocation->setStyleSheet(""); - m_ui->customProxyLocation->setToolTip(""); - - if (m_ui->enableBrowserSupport->isChecked()) { - // If we are using a custom proxy location, check if it exists and display warning if not - if (m_ui->useCustomProxy->isChecked()) { - if (!QFile::exists(resolveCustomProxyLocation())) { - StateColorPalette statePalette; - auto color = statePalette.color(StateColorPalette::ColorRole::Error); - m_ui->customProxyLocation->setStyleSheet(QString("QLineEdit { background: %1; }").arg(color.name())); - m_ui->customProxyLocation->setToolTip(tr("The custom proxy location does not exist.")); - - m_ui->messageWidget->showMessage(tr("Error: The custom proxy location does not exist. Correct " - "this in the advanced settings tab."), - MessageWidget::Error); - } - } else { - // Otherwise check if the installed proxy exists - auto expectedProxyLocation = browserSettings()->proxyLocationAsInstalled(); - if (!QFile::exists(expectedProxyLocation)) { - m_ui->messageWidget->showMessage( - tr("Error: The installed proxy executable is missing from the expected location: %1
    " - "Please set a custom proxy location in the advanced settings or reinstall the application.") - .arg(expectedProxyLocation), - MessageWidget::Error); - } - } + if (m_ui->useCustomProxy->isChecked() && !QFile::exists(path)) { + m_ui->warningWidget->showMessage(tr("Error: The custom proxy location cannot be found!" + "
    Browser integration WILL NOT WORK without the proxy application."), + MessageWidget::Error); + } else { + m_ui->warningWidget->showMessage(tr("Warning: The following options can be dangerous!"), + MessageWidget::Warning); } -#endif } void BrowserSettingsWidget::saveSettings() @@ -229,17 +214,15 @@ void BrowserSettingsWidget::saveSettings() settings->setMatchUrlScheme(m_ui->matchUrlScheme->isChecked()); settings->setUseCustomProxy(m_ui->useCustomProxy->isChecked()); - settings->setCustomProxyLocation(resolveCustomProxyLocation()); + settings->setCustomProxyLocation(browserSettings()->replaceTildeHomePath(m_ui->customProxyLocation->text())); settings->setUpdateBinaryPath(m_ui->updateBinaryPath->isChecked()); - settings->setAllowGetDatabaseEntriesRequest(m_ui->allowGetDatabaseEntriesRequest->isChecked()); settings->setAllowExpiredCredentials(m_ui->allowExpiredCredentials->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->setAllowLocalhostWithPasskeys(m_ui->allowLocalhostWithPasskeys->isChecked()); settings->setNoMigrationPrompt(m_ui->noMigrationPrompt->isChecked()); #ifdef QT_DEBUG @@ -272,25 +255,14 @@ void BrowserSettingsWidget::showProxyLocationFileDialog() #else QString fileTypeFilter(QString("%1 (*)").arg(tr("Executable Files"))); #endif + auto proxyLocation = QFileDialog::getOpenFileName(this, + tr("Select custom proxy location"), + QFileInfo(QCoreApplication::applicationDirPath()).filePath(), + fileTypeFilter); - auto initialFilePath = resolveCustomProxyLocation(); - if (QFileInfo::exists(initialFilePath)) { - initialFilePath = QFileInfo(initialFilePath).filePath(); - } else { - // ignore current status and set as it would be installed - initialFilePath = QFileInfo(browserSettings()->proxyLocationAsInstalled()).filePath(); - } - - QString proxyLocation = - QFileDialog::getOpenFileName(this, tr("Select custom proxy location"), initialFilePath, fileTypeFilter); - - if (!proxyLocation.isEmpty()) { - proxyLocation = browserSettings()->replaceHomePath(proxyLocation); - m_ui->customProxyLocation->setText(proxyLocation); - validateProxyLocation(); - } else { - // do not overwrite old proxy setting - } + proxyLocation = browserSettings()->replaceHomePath(proxyLocation); + m_ui->customProxyLocation->setText(proxyLocation); + validateCustomProxyLocation(); } void BrowserSettingsWidget::showCustomBrowserLocationFileDialog() diff --git a/src/browser/BrowserSettingsWidget.h b/src/browser/BrowserSettingsWidget.h index d6dec8ab1..d84051d0e 100644 --- a/src/browser/BrowserSettingsWidget.h +++ b/src/browser/BrowserSettingsWidget.h @@ -32,7 +32,7 @@ class BrowserSettingsWidget : public QWidget public: explicit BrowserSettingsWidget(QWidget* parent = nullptr); - ~BrowserSettingsWidget() override; + ~BrowserSettingsWidget(); public slots: void loadSettings(); @@ -40,12 +40,10 @@ public slots: private slots: void showProxyLocationFileDialog(); - void validateProxyLocation(); + void validateCustomProxyLocation(); void showCustomBrowserLocationFileDialog(); private: - QString resolveCustomProxyLocation(); - QScopedPointer m_ui; }; diff --git a/src/browser/BrowserSettingsWidget.ui b/src/browser/BrowserSettingsWidget.ui index 99db4ede6..1f8902be9 100644 --- a/src/browser/BrowserSettingsWidget.ui +++ b/src/browser/BrowserSettingsWidget.ui @@ -27,7 +27,7 @@ 0 - + @@ -52,7 +52,7 @@ - Browsers installed using Snap or Flatpak are not supported with exception to Firefox installed using Snap. + Browsers installed as snaps are currently not supported. @@ -267,15 +267,12 @@ - - - <b>Warning:</b> Only adjust these settings if necessary. - - - false - - - 2 + + + + 0 + 0 + @@ -310,16 +307,6 @@ - - - - Allows using insecure http://localhost with passkeys for testing purposes. - - - Allow using localhost with passkeys - - - @@ -340,16 +327,6 @@ - - - - Allow keepassxc-proxy to list all entries with their title, URL and UUID in connected databases. - - - Allow limited access to all entries in connected databases (ignores site access restrictions) - - - @@ -497,7 +474,7 @@ - + diff --git a/src/browser/CMakeLists.txt b/src/browser/CMakeLists.txt old mode 100644 new mode 100755 index 7942be430..9bd053857 --- a/src/browser/CMakeLists.txt +++ b/src/browser/CMakeLists.txt @@ -1,4 +1,5 @@ -# Copyright (C) 2024 KeePassXC Team +# Copyright (C) 2017 Sami Vänttinen +# Copyright (C) 2022 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 @@ -16,7 +17,7 @@ if(WITH_XC_BROWSER) include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}) - set(browser_SOURCES + set(keepassxcbrowser_SOURCES BrowserAccessControlDialog.cpp BrowserAction.cpp BrowserEntryConfig.cpp @@ -28,18 +29,9 @@ if(WITH_XC_BROWSER) BrowserService.cpp BrowserSettings.cpp BrowserShared.cpp - CustomTableWidget.cpp - NativeMessageInstaller.cpp) + NativeMessageInstaller.cpp + ) - if(WITH_XC_BROWSER_PASSKEYS) - list(APPEND browser_SOURCES - BrowserCbor.cpp - BrowserPasskeys.cpp - BrowserPasskeysClient.cpp - BrowserPasskeysConfirmationDialog.cpp - PasskeyUtils.cpp) - endif() - - add_library(browser STATIC ${browser_SOURCES}) - target_link_libraries(browser Qt5::Core Qt5::Concurrent Qt5::Widgets Qt5::Network ${BOTAN_LIBRARIES}) + add_library(keepassxcbrowser STATIC ${keepassxcbrowser_SOURCES}) + target_link_libraries(keepassxcbrowser Qt5::Core Qt5::Concurrent Qt5::Widgets Qt5::Network ${BOTAN_LIBRARIES}) endif() diff --git a/src/browser/CustomTableWidget.cpp b/src/browser/CustomTableWidget.cpp deleted file mode 100644 index 29009f4d5..000000000 --- a/src/browser/CustomTableWidget.cpp +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (C) 2023 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 "CustomTableWidget.h" - -CustomTableWidget::CustomTableWidget(QWidget* parent) - : QTableWidget(parent) -{ -} - -void CustomTableWidget::keyPressEvent(QKeyEvent* event) -{ - if ((event->key() == Qt::Key_Enter || event->key() == Qt::Key_Return) && !selectedItems().isEmpty()) { - emit acceptSelections(); - } else { - QTableView::keyPressEvent(event); - } -} - -void CustomTableWidget::focusInEvent(QFocusEvent* event) -{ - // For some reason accept button gets selected if table is clicked without any - // selections, even if the button is actually disabled. Connecting to this - // signal and adjusting the button focuses fixes the issue. - if (event->reason() == Qt::MouseFocusReason && selectedItems().isEmpty()) { - emit focusInWithoutSelections(); - } -} diff --git a/src/browser/CustomTableWidget.h b/src/browser/CustomTableWidget.h deleted file mode 100644 index 655475e9d..000000000 --- a/src/browser/CustomTableWidget.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (C) 2023 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 CUSTOMTABLEWIDGET_H -#define CUSTOMTABLEWIDGET_H - -#include -#include -#include - -class CustomTableWidget : public QTableWidget -{ - Q_OBJECT - -public: - CustomTableWidget(QWidget* parent); - -signals: - void acceptSelections(); - void focusInWithoutSelections(); - -protected: - void keyPressEvent(QKeyEvent* event) override; - void focusInEvent(QFocusEvent* event) override; -}; - -#endif // CUSTOMTABLEWIDGET_H diff --git a/src/browser/NativeMessageInstaller.cpp b/src/browser/NativeMessageInstaller.cpp index b8beba7ad..2d5054ec9 100644 --- a/src/browser/NativeMessageInstaller.cpp +++ b/src/browser/NativeMessageInstaller.cpp @@ -1,5 +1,6 @@ /* - * Copyright (C) 2025 KeePassXC Team + * Copyright (C) 2017 Sami Vänttinen + * Copyright (C) 2021 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,7 +19,6 @@ #include "NativeMessageInstaller.h" #include "BrowserSettings.h" #include "config-keepassx.h" -#include "core/Config.h" #include #include @@ -69,7 +69,7 @@ namespace const QString TARGET_DIR_FIREFOX = QStringLiteral("/.mozilla/native-messaging-hosts"); const QString TARGET_DIR_VIVALDI = QStringLiteral("/vivaldi/NativeMessagingHosts"); const QString TARGET_DIR_TOR_BROWSER = QStringLiteral( - "/torbrowser/tbb/x86_64/tor-browser/Browser/TorBrowser/Data/Browser/.mozilla/native-messaging-hosts"); + "/torbrowser/tbb/x86_64/tor-browser_en-US/Browser/TorBrowser/Data/Browser/.mozilla/native-messaging-hosts"); const QString TARGET_DIR_BRAVE = QStringLiteral("/BraveSoftware/Brave-Browser/NativeMessagingHosts"); const QString TARGET_DIR_EDGE = QStringLiteral("/microsoft-edge/NativeMessagingHosts"); #endif @@ -209,8 +209,8 @@ QString NativeMessageInstaller::getNativeMessagePath(SupportedBrowsers browser) QString basePath; #if defined(Q_OS_WIN) // If portable settings file exists save the JSON scripts to the application folder - if (Config::isPortable()) { - basePath = Config::portableConfigDir(); + if (QFile::exists(QCoreApplication::applicationDirPath() + QStringLiteral("/keepassxc.ini"))) { + basePath = QCoreApplication::applicationDirPath(); } else { basePath = QStandardPaths::writableLocation(QStandardPaths::DataLocation); } @@ -225,16 +225,6 @@ QString NativeMessageInstaller::getNativeMessagePath(SupportedBrowsers browser) } else { basePath = QDir::homePath() + "/.config"; } -#elif defined(KEEPASSXC_DIST_SNAP) - // Same as Flatpak above, with the exception that Snap also redefines $HOME - // Therefore we must explicitly reference $SNAP_REAL_HOME - if (browser == SupportedBrowsers::TOR_BROWSER) { - basePath = qEnvironmentVariable("SNAP_REAL_HOME") + "/.local/share"; - } else if (browser == SupportedBrowsers::FIREFOX) { - basePath = qEnvironmentVariable("SNAP_REAL_HOME"); - } else { - basePath = qEnvironmentVariable("SNAP_REAL_HOME") + "/.config"; - } #elif defined(Q_OS_LINUX) || (defined(Q_OS_UNIX) && !defined(Q_OS_MACOS)) if (browser == SupportedBrowsers::TOR_BROWSER) { basePath = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation); @@ -282,31 +272,22 @@ QString constructFlatpakPath() #endif /** - * Returns the effective proxy path used to build the native messaging JSON script + * Gets the path to keepassxc-proxy binary + * + * @param location Custom proxy path + * @return path Path to keepassxc-proxy */ QString NativeMessageInstaller::getProxyPath() const { - QString result; if (browserSettings()->useCustomProxy()) { - result = browserSettings()->customProxyLocation(); - } else { - result = getInstalledProxyPath(); + return browserSettings()->customProxyLocation(); } - return result; -} -/** - * Returns the original proxy path at the time of installation - */ -QString NativeMessageInstaller::getInstalledProxyPath() const -{ QString path; #if defined(KEEPASSXC_DIST_APPIMAGE) path = QProcessEnvironment::systemEnvironment().value("APPIMAGE"); #elif defined(KEEPASSXC_DIST_FLATPAK) path = constructFlatpakPath(); -#elif defined(KEEPASSXC_DIST_SNAP) - path = "/snap/bin/keepassxc.proxy"; #else path = QCoreApplication::applicationDirPath() + QStringLiteral("/keepassxc-proxy"); #ifdef Q_OS_WIN diff --git a/src/browser/NativeMessageInstaller.h b/src/browser/NativeMessageInstaller.h index f54d68885..256dd0c81 100644 --- a/src/browser/NativeMessageInstaller.h +++ b/src/browser/NativeMessageInstaller.h @@ -33,7 +33,6 @@ public: bool isBrowserEnabled(BrowserShared::SupportedBrowsers browser); QString getProxyPath() const; - QString getInstalledProxyPath() const; void updateBinaryPaths(); private: diff --git a/src/browser/PasskeyUtils.cpp b/src/browser/PasskeyUtils.cpp deleted file mode 100644 index b28c94dbb..000000000 --- a/src/browser/PasskeyUtils.cpp +++ /dev/null @@ -1,404 +0,0 @@ -/* - * Copyright (C) 2025 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 "PasskeyUtils.h" -#include "BrowserMessageBuilder.h" -#include "BrowserPasskeys.h" -#include "core/EntryAttributes.h" -#include "core/Tools.h" -#include "gui/UrlTools.h" - -#include -#include - -Q_GLOBAL_STATIC(PasskeyUtils, s_passkeyUtils); - -PasskeyUtils* PasskeyUtils::instance() -{ - return s_passkeyUtils; -} - -int PasskeyUtils::checkLimits(const QJsonObject& pkOptions) const -{ - const auto challenge = pkOptions["challenge"].toString(); - if (challenge.isEmpty() || challenge.length() < 16) { - return ERROR_PASSKEYS_INVALID_CHALLENGE; - } - - const auto userIdBase64 = pkOptions["user"]["id"].toString(); - const auto userId = browserMessageBuilder()->getArrayFromBase64(userIdBase64); - if (userId.isEmpty() || (userId.length() < 1 || userId.length() > 64)) { - return ERROR_PASSKEYS_INVALID_USER_ID; - } - - return PASSKEYS_SUCCESS; -} - -// Basic check for the object that it contains necessary variables in a correct form -bool PasskeyUtils::checkCredentialCreationOptions(const QJsonObject& credentialCreationOptions) const -{ - if (!credentialCreationOptions["attestation"].isString() - || credentialCreationOptions["attestation"].toString().isEmpty() - || !credentialCreationOptions["clientDataJSON"].isString() - || credentialCreationOptions["clientDataJSON"].toString().isEmpty() - || !credentialCreationOptions["rp"].isObject() || credentialCreationOptions["rp"].toObject().isEmpty() - || !credentialCreationOptions["user"].isObject() || credentialCreationOptions["user"].toObject().isEmpty() - || !credentialCreationOptions["residentKey"].isBool() || credentialCreationOptions["residentKey"].isUndefined() - || !credentialCreationOptions["userPresence"].isBool() - || credentialCreationOptions["userPresence"].isUndefined() - || !credentialCreationOptions["userVerification"].isBool() - || credentialCreationOptions["userVerification"].isUndefined() - || !credentialCreationOptions["credTypesAndPubKeyAlgs"].isArray() - || credentialCreationOptions["credTypesAndPubKeyAlgs"].toArray().isEmpty() - || !credentialCreationOptions["excludeCredentials"].isArray() - || credentialCreationOptions["excludeCredentials"].isUndefined()) { - return false; - } - - return true; -} - -// Basic check for the object that it contains necessary variables in a correct form -bool PasskeyUtils::checkCredentialAssertionOptions(const QJsonObject& assertionOptions) const -{ - if (!assertionOptions["clientDataJson"].isString() || assertionOptions["clientDataJson"].toString().isEmpty() - || !assertionOptions["rpId"].isString() || assertionOptions["rpId"].toString().isEmpty() - || !assertionOptions["userPresence"].isBool() || assertionOptions["userPresence"].isUndefined() - || !assertionOptions["userVerification"].isBool() || assertionOptions["userVerification"].isUndefined()) { - return false; - } - - return true; -} - -int PasskeyUtils::getEffectiveDomain(const QString& origin, QString* result) const -{ - if (!result) { - return ERROR_PASSKEYS_ORIGIN_NOT_ALLOWED; - } - - if (origin.isEmpty()) { - return ERROR_PASSKEYS_ORIGIN_NOT_ALLOWED; - } - - const auto effectiveDomain = QUrl::fromUserInput(origin).host(); - if (!isDomain(effectiveDomain)) { - return ERROR_PASSKEYS_DOMAIN_IS_NOT_VALID; - } - - *result = effectiveDomain; - return PASSKEYS_SUCCESS; -} - -int PasskeyUtils::validateRpId(const QJsonValue& rpIdValue, const QString& effectiveDomain, QString* result) const -{ - if (!result) { - return ERROR_PASSKEYS_DOMAIN_RPID_MISMATCH; - } - - if (effectiveDomain.isEmpty()) { - return ERROR_PASSKEYS_ORIGIN_NOT_ALLOWED; - } - - // The RP ID defaults to being the caller's origin's effective domain unless the caller has explicitly set - // options.rp.id - if (rpIdValue.isUndefined() || rpIdValue.isNull()) { - *result = effectiveDomain; - return PASSKEYS_SUCCESS; - } - - const auto rpId = rpIdValue.toString(); - if (!isRegistrableDomainSuffix(rpId, effectiveDomain)) { - return ERROR_PASSKEYS_DOMAIN_RPID_MISMATCH; - } - - if (rpId == effectiveDomain) { - *result = effectiveDomain; - return PASSKEYS_SUCCESS; - } - - *result = rpId; - return PASSKEYS_SUCCESS; -} - -// https://www.w3.org/TR/2021/REC-webauthn-2-20210408/#dom-publickeycredentialcreationoptions-attestation -QString PasskeyUtils::parseAttestation(const QString& attestation) const -{ - return attestation == BrowserPasskeys::PASSKEYS_ATTESTATION_DIRECT ? BrowserPasskeys::PASSKEYS_ATTESTATION_DIRECT - : BrowserPasskeys::PASSKEYS_ATTESTATION_NONE; -} - -QJsonArray PasskeyUtils::parseCredentialTypes(const QJsonArray& credentialTypes) const -{ - QJsonArray credTypesAndPubKeyAlgs; - - if (credentialTypes.isEmpty()) { - // Set default values - credTypesAndPubKeyAlgs.push_back(QJsonObject({ - {"type", BrowserPasskeys::PUBLIC_KEY}, - {"alg", WebAuthnAlgorithms::ES256}, - })); - credTypesAndPubKeyAlgs.push_back(QJsonObject({ - {"type", BrowserPasskeys::PUBLIC_KEY}, - {"alg", WebAuthnAlgorithms::RS256}, - })); - } else { - for (const auto current : credentialTypes) { - if (current["type"] != BrowserPasskeys::PUBLIC_KEY || current["alg"].isUndefined()) { - continue; - } - - const auto currentAlg = current["alg"].toInt(); - if (currentAlg != WebAuthnAlgorithms::ES256 && currentAlg != WebAuthnAlgorithms::RS256 - && currentAlg != WebAuthnAlgorithms::EDDSA) { - continue; - } - - credTypesAndPubKeyAlgs.push_back(QJsonObject({ - {"type", current["type"]}, - {"alg", currentAlg}, - })); - } - } - - return credTypesAndPubKeyAlgs; -} - -bool PasskeyUtils::isAuthenticatorSelectionValid(const QJsonObject& authenticatorSelection) const -{ - const auto authenticatorAttachment = authenticatorSelection["authenticatorAttachment"].toString(); - if (!authenticatorAttachment.isEmpty() && authenticatorAttachment != BrowserPasskeys::ATTACHMENT_PLATFORM - && authenticatorAttachment != BrowserPasskeys::ATTACHMENT_CROSS_PLATFORM) { - return false; - } - - const auto requireResidentKey = authenticatorSelection["requireResidentKey"].toBool(); - if (requireResidentKey && !BrowserPasskeys::SUPPORT_RESIDENT_KEYS) { - return false; - } - - const auto residentKey = authenticatorSelection["residentKey"].toString(); - if (residentKey == "required" && !BrowserPasskeys::SUPPORT_RESIDENT_KEYS) { - return false; - } - - if (residentKey.isEmpty() && requireResidentKey && !BrowserPasskeys::SUPPORT_RESIDENT_KEYS) { - return false; - } - - const auto userVerification = authenticatorSelection["userVerification"].toBool(); - if (userVerification && !BrowserPasskeys::SUPPORT_USER_VERIFICATION) { - return false; - } - - return true; -} - -bool PasskeyUtils::isRegistrableDomainSuffix(const QString& hostSuffixString, const QString& originalHost) const -{ - if (hostSuffixString.isEmpty()) { - return false; - } - - if (!isDomain(originalHost)) { - return false; - } - - const auto hostSuffix = QUrl::fromUserInput(hostSuffixString).host(); - if (hostSuffix == originalHost) { - return true; - } - - if (!isDomain(hostSuffix)) { - return false; - } - - const auto prefixedHostSuffix = QString(".%1").arg(hostSuffix); - if (!originalHost.endsWith(prefixedHostSuffix)) { - return false; - } - - if (hostSuffix == urlTools()->getTopLevelDomainFromUrl(hostSuffix)) { - return false; - } - - const auto originalPublicSuffix = urlTools()->getTopLevelDomainFromUrl(originalHost); - if (originalPublicSuffix.isEmpty()) { - return false; - } - - if (originalPublicSuffix.endsWith(prefixedHostSuffix)) { - return false; - } - - if (!hostSuffix.endsWith(QString(".%1").arg(originalPublicSuffix))) { - return false; - } - - return true; -} - -bool PasskeyUtils::isDomain(const QString& hostName) const -{ - const auto domain = QUrl::fromUserInput(hostName).host(); - return !domain.isEmpty() && !domain.endsWith('.') && Tools::isAsciiString(domain) - && !urlTools()->domainHasIllegalCharacters(domain) && !urlTools()->isIpAddress(hostName); -} - -bool PasskeyUtils::isUserVerificationValid(const QString& userVerification) const -{ - return QStringList({BrowserPasskeys::REQUIREMENT_PREFERRED, - BrowserPasskeys::REQUIREMENT_REQUIRED, - BrowserPasskeys::REQUIREMENT_DISCOURAGED}) - .contains(userVerification); -} - -bool PasskeyUtils::isOriginAllowedWithLocalhost(bool allowLocalhostWithPasskeys, const QString& origin) const -{ - if (origin.startsWith("https://") || (allowLocalhostWithPasskeys && origin.startsWith("file://"))) { - return true; - } - - if (!allowLocalhostWithPasskeys) { - return false; - } - - const auto host = QUrl::fromUserInput(origin).host(); - return host == "localhost" || host == "localhost." || host.endsWith(".localhost") || host.endsWith(".localhost."); -} - -bool PasskeyUtils::isResidentKeyRequired(const QJsonObject& authenticatorSelection) const -{ - if (authenticatorSelection.isEmpty()) { - return false; - } - - const auto residentKey = authenticatorSelection["residentKey"].toString(); - if (residentKey == BrowserPasskeys::REQUIREMENT_REQUIRED - || (BrowserPasskeys::SUPPORT_RESIDENT_KEYS && residentKey == BrowserPasskeys::REQUIREMENT_PREFERRED)) { - return true; - } else if (residentKey == BrowserPasskeys::REQUIREMENT_DISCOURAGED) { - return false; - } - - return authenticatorSelection["requireResidentKey"].toBool(); -} - -bool PasskeyUtils::isUserVerificationRequired(const QJsonObject& authenticatorSelection) const -{ - const auto userVerification = authenticatorSelection["userVerification"].toString(); - return userVerification == BrowserPasskeys::REQUIREMENT_REQUIRED - || (userVerification == BrowserPasskeys::REQUIREMENT_PREFERRED - && BrowserPasskeys::SUPPORT_USER_VERIFICATION); -} - -ExtensionResult PasskeyUtils::buildExtensionData(QJsonObject& extensionObject) const -{ - const QStringList allowedKeys = {"credProps", "uvm"}; - - // Remove unsupported keys - for (const auto& key : extensionObject.keys()) { - if (!allowedKeys.contains(key)) { - extensionObject.remove(key); - } - } - - // Create response object - QJsonObject extensionJSON; - - // https://w3c.github.io/webauthn/#sctn-authenticator-credential-properties-extension - if (extensionObject.contains("credProps") && extensionObject["credProps"].toBool()) { - extensionJSON["credProps"] = QJsonObject({{"rk", true}}); - } - - // https://w3c.github.io/webauthn/#sctn-uvm-extension - if (extensionObject.contains("uvm") && extensionObject["uvm"].toBool()) { - QJsonArray uvmResponse; - QJsonArray uvmArray = { - 1, // userVerificationMethod (USER_VERIFY_PRESENCE_INTERNAL "presence_internal", 0x00000001) - 1, // keyProtectionType (KEY_PROTECTION_SOFTWARE "software", 0x0001) - 1, // matcherProtectionType (MATCHER_PROTECTION_SOFTWARE "software", 0x0001) - }; - uvmResponse.append(uvmArray); - extensionJSON["uvm"] = uvmResponse; - } - - if (extensionJSON.isEmpty()) { - return {}; - } - - auto extensionData = m_browserCbor.cborEncodeExtensionData(extensionObject); - if (!extensionData.isEmpty()) { - ExtensionResult result; - result.extensionData = extensionData; - result.extensionObject = extensionJSON; - return result; - } - - return {}; -} - -// Serialization order: https://w3c.github.io/webauthn/#clientdatajson-serialization -QString PasskeyUtils::buildClientDataJson(const QJsonObject& publicKey, const QString& origin, bool get) const -{ - return QString("{\"type\":\"%1\",\"challenge\":\"%2\",\"origin\":\"%3\",\"crossOrigin\":false}") - .arg((get ? QString("webauthn.get") : QString("webauthn.create")), publicKey["challenge"].toString(), origin); -} - -QStringList PasskeyUtils::getAllowedCredentialsFromAssertionOptions(const QJsonObject& assertionOptions) const -{ - QStringList allowedCredentials; - for (const auto& credential : assertionOptions["allowCredentials"].toArray()) { - const auto cred = credential.toObject(); - const auto id = cred["id"].toString(); - const auto transports = cred["transports"].toArray(); - const auto hasSupportedTransport = transports.isEmpty() - || (transports.contains(BrowserPasskeys::AUTHENTICATOR_TRANSPORT_INTERNAL) - || transports.contains(BrowserPasskeys::AUTHENTICATOR_TRANSPORT_NFC) - || transports.contains(BrowserPasskeys::AUTHENTICATOR_TRANSPORT_USB)); - - if (cred["type"].toString() == BrowserPasskeys::PUBLIC_KEY && hasSupportedTransport && !id.isEmpty()) { - allowedCredentials << id; - } - } - - return allowedCredentials; -} - -// For compatibility with StrongBox (and other possible clients in the future) -QString PasskeyUtils::getCredentialIdFromEntry(const Entry* entry) const -{ - if (!entry) { - return {}; - } - - return entry->attributes()->hasKey(EntryAttributes::KPEX_PASSKEY_GENERATED_USER_ID) - ? entry->attributes()->value(EntryAttributes::KPEX_PASSKEY_GENERATED_USER_ID) - : entry->attributes()->value(EntryAttributes::KPEX_PASSKEY_CREDENTIAL_ID); -} - -// For compatibility with StrongBox (and other possible clients in the future) -QString PasskeyUtils::getUsernameFromEntry(const Entry* entry) const -{ - if (!entry) { - return {}; - } - - return entry->attributes()->hasKey(EntryAttributes::KPXC_PASSKEY_USERNAME) - ? entry->attributes()->value(EntryAttributes::KPXC_PASSKEY_USERNAME) - : entry->attributes()->value(EntryAttributes::KPEX_PASSKEY_USERNAME); -} diff --git a/src/browser/PasskeyUtils.h b/src/browser/PasskeyUtils.h deleted file mode 100644 index b1e6a48ab..000000000 --- a/src/browser/PasskeyUtils.h +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Copyright (C) 2025 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 PASSKEYUTILS_H -#define PASSKEYUTILS_H - -#include -#include -#include -#include - -#include "BrowserCbor.h" -#include "core/Entry.h" - -#define DEFAULT_TIMEOUT 300000 -#define DEFAULT_DISCOURAGED_TIMEOUT 120000 -#define PASSKEYS_SUCCESS 0 - -struct ExtensionResult -{ - QByteArray extensionData; - QJsonObject extensionObject; -}; - -class PasskeyUtils : public QObject -{ - Q_OBJECT - -public: - explicit PasskeyUtils() = default; - ~PasskeyUtils() = default; - static PasskeyUtils* instance(); - - int checkLimits(const QJsonObject& pkOptions) const; - bool checkCredentialCreationOptions(const QJsonObject& credentialCreationOptions) const; - bool checkCredentialAssertionOptions(const QJsonObject& assertionOptions) const; - int getEffectiveDomain(const QString& origin, QString* result) const; - int validateRpId(const QJsonValue& rpIdValue, const QString& effectiveDomain, QString* result) const; - QString parseAttestation(const QString& attestation) const; - QJsonArray parseCredentialTypes(const QJsonArray& credentialTypes) const; - bool isAuthenticatorSelectionValid(const QJsonObject& authenticatorSelection) const; - bool isUserVerificationValid(const QString& userVerification) const; - bool isResidentKeyRequired(const QJsonObject& authenticatorSelection) const; - bool isUserVerificationRequired(const QJsonObject& authenticatorSelection) const; - bool isOriginAllowedWithLocalhost(bool allowLocalhostWithPasskeys, const QString& origin) const; - ExtensionResult buildExtensionData(QJsonObject& extensionObject) const; - QString buildClientDataJson(const QJsonObject& publicKey, const QString& origin, bool get) const; - QStringList getAllowedCredentialsFromAssertionOptions(const QJsonObject& assertionOptions) const; - QString getCredentialIdFromEntry(const Entry* entry) const; - QString getUsernameFromEntry(const Entry* entry) const; - -private: - Q_DISABLE_COPY(PasskeyUtils); - - bool isRegistrableDomainSuffix(const QString& hostSuffixString, const QString& originalHost) const; - bool isDomain(const QString& hostName) const; - - friend class TestPasskeys; - -private: - BrowserCbor m_browserCbor; -}; - -static inline PasskeyUtils* passkeyUtils() -{ - return PasskeyUtils::instance(); -} - -#endif // PASSKEYUTILS_H diff --git a/src/cli/Add.cpp b/src/cli/Add.cpp index 43710b7a4..3bd9241d1 100644 --- a/src/cli/Add.cpp +++ b/src/cli/Add.cpp @@ -19,13 +19,13 @@ #include "Generate.h" #include "Utils.h" -#include "core/Global.h" #include "core/Group.h" #include "core/PasswordGenerator.h" #include -const QCommandLineOption Add::UsernameOption = QCommandLineOption(QStringList() << "u" << "username", +const QCommandLineOption Add::UsernameOption = QCommandLineOption(QStringList() << "u" + << "username", QObject::tr("Username for the entry."), QObject::tr("username")); @@ -36,10 +36,13 @@ const QCommandLineOption Add::NotesOption = QCommandLineOption(QStringList() << "notes", QObject::tr("Notes for the entry."), QObject::tr("Notes")); const QCommandLineOption Add::PasswordPromptOption = - QCommandLineOption(QStringList() << "p" << "password-prompt", QObject::tr("Prompt for the entry's password.")); + QCommandLineOption(QStringList() << "p" + << "password-prompt", + QObject::tr("Prompt for the entry's password.")); -const QCommandLineOption Add::GenerateOption = - QCommandLineOption(QStringList() << "g" << "generate", QObject::tr("Generate a password for the entry.")); +const QCommandLineOption Add::GenerateOption = QCommandLineOption(QStringList() << "g" + << "generate", + QObject::tr("Generate a password for the entry.")); Add::Add() { @@ -75,7 +78,7 @@ int Add::executeWithDatabase(QSharedPointer database, QSharedPointerisSet(Add::GenerateOption) && parser->isSet(Add::PasswordPromptOption)) { - err << QObject::tr("Cannot generate a password and prompt at the same time.") << Qt::endl; + err << QObject::tr("Cannot generate a password and prompt at the same time.") << endl; return EXIT_FAILURE; } @@ -91,7 +94,7 @@ int Add::executeWithDatabase(QSharedPointer database, QSharedPointerrootGroup()->addEntryWithPath(entryPath); if (!entry) { - err << QObject::tr("Could not create entry with path %1.").arg(entryPath) << Qt::endl; + err << QObject::tr("Could not create entry with path %1.").arg(entryPath) << endl; return EXIT_FAILURE; } @@ -109,7 +112,7 @@ int Add::executeWithDatabase(QSharedPointer database, QSharedPointerisSet(Add::PasswordPromptOption)) { if (!parser->isSet(Command::QuietOption)) { - out << QObject::tr("Enter password for new entry: ") << Qt::flush; + out << QObject::tr("Enter password for new entry: ") << flush; } QString password = Utils::getPassword(parser->isSet(Command::QuietOption)); entry->setPassword(password); @@ -120,12 +123,12 @@ int Add::executeWithDatabase(QSharedPointer database, QSharedPointersave(Database::Atomic, {}, &errorMessage)) { - err << QObject::tr("Writing the database failed %1.").arg(errorMessage) << Qt::endl; + err << QObject::tr("Writing the database failed %1.").arg(errorMessage) << endl; return EXIT_FAILURE; } if (!parser->isSet(Command::QuietOption)) { - out << QObject::tr("Successfully added entry %1.").arg(entry->title()) << Qt::endl; + out << QObject::tr("Successfully added entry %1.").arg(entry->title()) << endl; } return EXIT_SUCCESS; } diff --git a/src/cli/AddGroup.cpp b/src/cli/AddGroup.cpp index 2e4bbeac1..43431e8dc 100644 --- a/src/cli/AddGroup.cpp +++ b/src/cli/AddGroup.cpp @@ -18,7 +18,6 @@ #include "AddGroup.h" #include "Utils.h" -#include "core/Global.h" #include "core/Group.h" #include @@ -30,7 +29,9 @@ AddGroup::AddGroup() positionalArguments.append({QString("group"), QObject::tr("Path of the group to add."), QString("")}); } -AddGroup::~AddGroup() = default; +AddGroup::~AddGroup() +{ +} int AddGroup::executeWithDatabase(QSharedPointer database, QSharedPointer parser) { @@ -46,29 +47,29 @@ int AddGroup::executeWithDatabase(QSharedPointer database, QSharedPoin Group* group = database->rootGroup()->findGroupByPath(groupPath); if (group) { - err << QObject::tr("Group %1 already exists!").arg(groupPath) << Qt::endl; + err << QObject::tr("Group %1 already exists!").arg(groupPath) << endl; return EXIT_FAILURE; } Group* parentGroup = database->rootGroup()->findGroupByPath(parentGroupPath); if (!parentGroup) { - err << QObject::tr("Group %1 not found.").arg(parentGroupPath) << Qt::endl; + err << QObject::tr("Group %1 not found.").arg(parentGroupPath) << endl; return EXIT_FAILURE; } - auto newGroup = new Group(); + Group* newGroup = new Group(); newGroup->setUuid(QUuid::createUuid()); newGroup->setName(groupName); newGroup->setParent(parentGroup); QString errorMessage; if (!database->save(Database::Atomic, {}, &errorMessage)) { - err << QObject::tr("Writing the database failed %1.").arg(errorMessage) << Qt::endl; + err << QObject::tr("Writing the database failed %1.").arg(errorMessage) << endl; return EXIT_FAILURE; } if (!parser->isSet(Command::QuietOption)) { - out << QObject::tr("Successfully added group %1.").arg(groupName) << Qt::endl; + out << QObject::tr("Successfully added group %1.").arg(groupName) << endl; } return EXIT_SUCCESS; } diff --git a/src/cli/AddGroup.h b/src/cli/AddGroup.h index 7992f16bf..9976d5894 100644 --- a/src/cli/AddGroup.h +++ b/src/cli/AddGroup.h @@ -24,9 +24,9 @@ class AddGroup : public DatabaseCommand { public: AddGroup(); - ~AddGroup() override; + ~AddGroup(); - int executeWithDatabase(QSharedPointer db, QSharedPointer parser) override; + int executeWithDatabase(QSharedPointer db, QSharedPointer parser); }; #endif // KEEPASSXC_ADDGROUP_H diff --git a/src/cli/Analyze.cpp b/src/cli/Analyze.cpp index 44704014a..185339dc5 100644 --- a/src/cli/Analyze.cpp +++ b/src/cli/Analyze.cpp @@ -18,7 +18,6 @@ #include "Analyze.h" #include "Utils.h" -#include "core/Global.h" #include "core/Group.h" #include "core/HibpOffline.h" @@ -61,24 +60,23 @@ int Analyze::executeWithDatabase(QSharedPointer database, QSharedPoint auto okon = parser->value(Analyze::OkonOption); if (!okon.isEmpty()) { - out << QObject::tr("Evaluating database entries using okon…") << Qt::endl; + out << QObject::tr("Evaluating database entries using okon…") << endl; if (!HibpOffline::okonReport(database, okon, hibpDatabase, findings, &error)) { - err << error << Qt::endl; + err << error << endl; return EXIT_FAILURE; } } else { QFile hibpFile(hibpDatabase); if (!hibpFile.open(QFile::ReadOnly)) { - err << QObject::tr("Failed to open HIBP file %1: %2").arg(hibpDatabase).arg(hibpFile.errorString()) - << Qt::endl; + err << QObject::tr("Failed to open HIBP file %1: %2").arg(hibpDatabase).arg(hibpFile.errorString()) << endl; return EXIT_FAILURE; } - out << QObject::tr("Evaluating database entries against HIBP file, this will take a while…") << Qt::endl; + out << QObject::tr("Evaluating database entries against HIBP file, this will take a while…") << endl; if (!HibpOffline::report(database, hibpFile, findings, &error)) { - err << error << Qt::endl; + err << error << endl; return EXIT_FAILURE; } } @@ -93,10 +91,9 @@ int Analyze::executeWithDatabase(QSharedPointer database, QSharedPoint } if (count > 0) { - out << QObject::tr("Password for '%1' has been leaked %2 time(s)!", "", count).arg(path).arg(count) - << Qt::endl; + out << QObject::tr("Password for '%1' has been leaked %2 time(s)!", "", count).arg(path).arg(count) << endl; } else { - out << QObject::tr("Password for '%1' has been leaked!").arg(path) << Qt::endl; + out << QObject::tr("Password for '%1' has been leaked!").arg(path) << endl; } } diff --git a/src/cli/AttachmentExport.cpp b/src/cli/AttachmentExport.cpp index b4c88d902..46dc5f4b6 100644 --- a/src/cli/AttachmentExport.cpp +++ b/src/cli/AttachmentExport.cpp @@ -18,7 +18,6 @@ #include "AttachmentExport.h" #include "Utils.h" -#include "core/Global.h" #include "core/Group.h" #include @@ -50,7 +49,7 @@ int AttachmentExport::executeWithDatabase(QSharedPointer database, QSh auto entry = database->rootGroup()->findEntryByPath(entryPath); if (!entry) { - err << QObject::tr("Could not find entry with path %1.").arg(entryPath) << Qt::endl; + err << QObject::tr("Could not find entry with path %1.").arg(entryPath) << endl; return EXIT_FAILURE; } @@ -58,32 +57,32 @@ int AttachmentExport::executeWithDatabase(QSharedPointer database, QSh auto attachments = entry->attachments(); if (!attachments->hasKey(attachmentName)) { - err << QObject::tr("Could not find attachment with name %1.").arg(attachmentName) << Qt::endl; + err << QObject::tr("Could not find attachment with name %1.").arg(attachmentName) << endl; return EXIT_FAILURE; } if (parser->isSet(AttachmentExport::StdoutOption)) { // Output to STDOUT even in quiet mode - Utils::STDOUT << attachments->value(attachmentName) << Qt::flush; + Utils::STDOUT << attachments->value(attachmentName) << flush; return EXIT_SUCCESS; } if (args.size() < 4) { - err << QObject::tr("No export target given. Please use '--stdout' or specify an 'export-file'.") << Qt::endl; + err << QObject::tr("No export target given. Please use '--stdout' or specify an 'export-file'.") << endl; return EXIT_FAILURE; } auto exportFileName = args.at(3); QFile exportFile(exportFileName); if (!exportFile.open(QIODevice::WriteOnly)) { - err << QObject::tr("Could not open output file %1.").arg(exportFileName) << Qt::endl; + err << QObject::tr("Could not open output file %1.").arg(exportFileName) << endl; return EXIT_FAILURE; } exportFile.write(attachments->value(attachmentName)); out << QObject::tr("Successfully exported attachment %1 of entry %2 to %3.") .arg(attachmentName, entryPath, exportFileName) - << Qt::endl; + << endl; return EXIT_SUCCESS; } diff --git a/src/cli/AttachmentImport.cpp b/src/cli/AttachmentImport.cpp index 6fe6ce529..0700961d7 100644 --- a/src/cli/AttachmentImport.cpp +++ b/src/cli/AttachmentImport.cpp @@ -18,14 +18,15 @@ #include "AttachmentImport.h" #include "Utils.h" -#include "core/Global.h" #include "core/Group.h" #include #include const QCommandLineOption AttachmentImport::ForceOption = - QCommandLineOption(QStringList() << "f" << "force", QObject::tr("Overwrite existing attachments.")); + QCommandLineOption(QStringList() << "f" + << "force", + QObject::tr("Overwrite existing attachments.")); AttachmentImport::AttachmentImport() { @@ -49,7 +50,7 @@ int AttachmentImport::executeWithDatabase(QSharedPointer database, QSh auto entry = database->rootGroup()->findEntryByPath(entryPath); if (!entry) { - err << QObject::tr("Could not find entry with path %1.").arg(entryPath) << Qt::endl; + err << QObject::tr("Could not find entry with path %1.").arg(entryPath) << endl; return EXIT_FAILURE; } @@ -57,7 +58,7 @@ int AttachmentImport::executeWithDatabase(QSharedPointer database, QSh auto attachments = entry->attachments(); if (attachments->hasKey(attachmentName) && !parser->isSet(AttachmentImport::ForceOption)) { - err << QObject::tr("Attachment %1 already exists for entry %2.").arg(attachmentName, entryPath) << Qt::endl; + err << QObject::tr("Attachment %1 already exists for entry %2.").arg(attachmentName, entryPath) << endl; return EXIT_FAILURE; } @@ -65,7 +66,7 @@ int AttachmentImport::executeWithDatabase(QSharedPointer database, QSh QFile importFile(importFileName); if (!importFile.open(QIODevice::ReadOnly)) { - err << QObject::tr("Could not open attachment file %1.").arg(importFileName) << Qt::endl; + err << QObject::tr("Could not open attachment file %1.").arg(importFileName) << endl; return EXIT_FAILURE; } @@ -75,12 +76,12 @@ int AttachmentImport::executeWithDatabase(QSharedPointer database, QSh QString errorMessage; if (!database->save(Database::Atomic, {}, &errorMessage)) { - err << QObject::tr("Writing the database failed %1.").arg(errorMessage) << Qt::endl; + err << QObject::tr("Writing the database failed %1.").arg(errorMessage) << endl; return EXIT_FAILURE; } out << QObject::tr("Successfully imported attachment %1 as %2 to entry %3.") .arg(importFileName, attachmentName, entryPath) - << Qt::endl; + << endl; return EXIT_SUCCESS; } diff --git a/src/cli/AttachmentRemove.cpp b/src/cli/AttachmentRemove.cpp index c8ce4d46c..a609a8f22 100644 --- a/src/cli/AttachmentRemove.cpp +++ b/src/cli/AttachmentRemove.cpp @@ -18,7 +18,6 @@ #include "AttachmentRemove.h" #include "Utils.h" -#include "core/Global.h" #include "core/Group.h" #include @@ -42,7 +41,7 @@ int AttachmentRemove::executeWithDatabase(QSharedPointer database, QSh auto entry = database->rootGroup()->findEntryByPath(entryPath); if (!entry) { - err << QObject::tr("Could not find entry with path %1.").arg(entryPath) << Qt::endl; + err << QObject::tr("Could not find entry with path %1.").arg(entryPath) << endl; return EXIT_FAILURE; } @@ -50,7 +49,7 @@ int AttachmentRemove::executeWithDatabase(QSharedPointer database, QSh auto attachments = entry->attachments(); if (!attachments->hasKey(attachmentName)) { - err << QObject::tr("Could not find attachment with name %1.").arg(attachmentName) << Qt::endl; + err << QObject::tr("Could not find attachment with name %1.").arg(attachmentName) << endl; return EXIT_FAILURE; } @@ -60,10 +59,10 @@ int AttachmentRemove::executeWithDatabase(QSharedPointer database, QSh QString errorMessage; if (!database->save(Database::Atomic, {}, &errorMessage)) { - err << QObject::tr("Writing the database failed %1.").arg(errorMessage) << Qt::endl; + err << QObject::tr("Writing the database failed %1.").arg(errorMessage) << endl; return EXIT_FAILURE; } - out << QObject::tr("Successfully removed attachment %1 from entry %2.").arg(attachmentName, entryPath) << Qt::endl; + out << QObject::tr("Successfully removed attachment %1 from entry %2.").arg(attachmentName, entryPath) << endl; return EXIT_SUCCESS; } diff --git a/src/cli/CMakeLists.txt b/src/cli/CMakeLists.txt index ecd5da284..a3852c800 100644 --- a/src/cli/CMakeLists.txt +++ b/src/cli/CMakeLists.txt @@ -45,7 +45,7 @@ set(cli_SOURCES Show.cpp) add_library(cli STATIC ${cli_SOURCES}) -target_link_libraries(cli ${ZXCVBN_LIBRARIES} Qt5::Core) +target_link_libraries(cli Qt5::Core) find_package(Readline) @@ -58,7 +58,7 @@ add_executable(keepassxc-cli keepassxc-cli.cpp) target_link_libraries(keepassxc-cli ${GPGERROR_LIBRARIES} cli - keepassxc_core) + keepassx_core) install(TARGETS keepassxc-cli BUNDLE DESTINATION . COMPONENT Runtime diff --git a/src/cli/Clip.cpp b/src/cli/Clip.cpp index 364072fdd..47964b190 100644 --- a/src/cli/Clip.cpp +++ b/src/cli/Clip.cpp @@ -27,18 +27,21 @@ #define CLI_DEFAULT_CLIP_TIMEOUT 10 const QCommandLineOption Clip::AttributeOption = QCommandLineOption( - QStringList() << "a" << "attribute", + QStringList() << "a" + << "attribute", QObject::tr("Copy the given attribute to the clipboard. Defaults to \"password\" if not specified.", "Don't translate \"password\", it refers to the attribute."), "attr", "password"); const QCommandLineOption Clip::TotpOption = - QCommandLineOption(QStringList() << "t" << "totp", + QCommandLineOption(QStringList() << "t" + << "totp", QObject::tr("Copy the current TOTP to the clipboard (equivalent to \"-a totp\").")); const QCommandLineOption Clip::BestMatchOption = - QCommandLineOption(QStringList() << "b" << "best-match", + QCommandLineOption(QStringList() << "b" + << "best-match", QObject::tr("Must match only one entry, otherwise a list of possible matches is shown.")); Clip::Clip() @@ -69,7 +72,7 @@ int Clip::executeWithDatabase(QSharedPointer database, QSharedPointer< bool ok; timeout = args.at(2).toInt(&ok); if (!ok) { - err << QObject::tr("Invalid timeout value %1.").arg(args.at(2)) << Qt::endl; + err << QObject::tr("Invalid timeout value %1.").arg(args.at(2)) << endl; return EXIT_FAILURE; } } @@ -80,14 +83,14 @@ int Clip::executeWithDatabase(QSharedPointer database, QSharedPointer< const auto& searchTerm = args.at(1); const auto results = searcher.search(QString("title:%1").arg(searchTerm), database->rootGroup(), true); if (results.count() > 1) { - err << QObject::tr("Multiple entries matching:") << Qt::endl; + err << QObject::tr("Multiple entries matching:") << endl; for (const Entry* result : results) { - err << result->path().prepend('/') << Qt::endl; + err << result->path().prepend('/') << endl; } return EXIT_FAILURE; } else { entryPath = (results.isEmpty()) ? searchTerm : results[0]->path().prepend('/'); - out << QObject::tr("Using matching entry: %1").arg(entryPath) << Qt::endl; + out << QObject::tr("Using matching entry: %1").arg(entryPath) << endl; } } else { entryPath = args.at(1); @@ -95,12 +98,12 @@ int Clip::executeWithDatabase(QSharedPointer database, QSharedPointer< auto* entry = database->rootGroup()->findEntryByPath(entryPath); if (!entry) { - err << QObject::tr("Entry %1 not found.").arg(entryPath) << Qt::endl; + err << QObject::tr("Entry %1 not found.").arg(entryPath) << endl; return EXIT_FAILURE; } if (parser->isSet(AttributeOption) && parser->isSet(TotpOption)) { - err << QObject::tr("ERROR: Please specify one of --attribute or --totp, not both.") << Qt::endl; + err << QObject::tr("ERROR: Please specify one of --attribute or --totp, not both.") << endl; return EXIT_FAILURE; } @@ -109,7 +112,7 @@ int Clip::executeWithDatabase(QSharedPointer database, QSharedPointer< bool found = false; if (parser->isSet(TotpOption) || selectedAttribute == "totp") { if (!entry->hasTotp()) { - err << QObject::tr("Entry with path %1 has no TOTP set up.").arg(entryPath) << Qt::endl; + err << QObject::tr("Entry with path %1 has no TOTP set up.").arg(entryPath) << endl; return EXIT_FAILURE; } @@ -124,7 +127,7 @@ int Clip::executeWithDatabase(QSharedPointer database, QSharedPointer< if (attrs.size() > 1) { err << QObject::tr("ERROR: attribute %1 is ambiguous, it matches %2.") .arg(selectedAttribute, QLocale().createSeparatedList(attrs)) - << Qt::endl; + << endl; return EXIT_FAILURE; } else if (attrs.size() == 1) { found = true; @@ -134,7 +137,7 @@ int Clip::executeWithDatabase(QSharedPointer database, QSharedPointer< } if (!found) { - out << QObject::tr("Attribute \"%1\" not found.").arg(selectedAttribute) << Qt::endl; + out << QObject::tr("Attribute \"%1\" not found.").arg(selectedAttribute) << endl; return EXIT_FAILURE; } @@ -143,7 +146,7 @@ int Clip::executeWithDatabase(QSharedPointer database, QSharedPointer< return exitCode; } - out << QObject::tr("Entry's \"%1\" attribute copied to the clipboard!").arg(selectedAttribute) << Qt::endl; + out << QObject::tr("Entry's \"%1\" attribute copied to the clipboard!").arg(selectedAttribute) << endl; if (timeout <= 0) { return exitCode; @@ -153,13 +156,13 @@ int Clip::executeWithDatabase(QSharedPointer database, QSharedPointer< while (timeout > 0) { out << '\r' << QString(lastLine.size(), ' ') << '\r'; lastLine = QObject::tr("Clearing the clipboard in %1 second(s)...", "", timeout).arg(timeout); - out << lastLine << Qt::flush; + out << lastLine << flush; Tools::sleep(1000); --timeout; } Utils::clipText(""); out << '\r' << QString(lastLine.size(), ' ') << '\r'; - out << QObject::tr("Clipboard cleared!") << Qt::endl; + out << QObject::tr("Clipboard cleared!") << endl; return EXIT_SUCCESS; } diff --git a/src/cli/Command.cpp b/src/cli/Command.cpp index ae1020086..4bba8fff9 100644 --- a/src/cli/Command.cpp +++ b/src/cli/Command.cpp @@ -56,10 +56,12 @@ const QCommandLineOption Command::HelpOption = QCommandLineOption(QStringList() QObject::tr("Display this help.")); const QCommandLineOption Command::QuietOption = - QCommandLineOption(QStringList() << "q" << "quiet", + QCommandLineOption(QStringList() << "q" + << "quiet", QObject::tr("Silence password prompt and other secondary outputs.")); -const QCommandLineOption Command::KeyFileOption = QCommandLineOption(QStringList() << "k" << "key-file", +const QCommandLineOption Command::KeyFileOption = QCommandLineOption(QStringList() << "k" + << "key-file", QObject::tr("Key file of the database."), QObject::tr("path")); @@ -67,7 +69,8 @@ const QCommandLineOption Command::NoPasswordOption = QCommandLineOption(QStringList() << "no-password", QObject::tr("Deactivate password key for the database.")); const QCommandLineOption Command::YubiKeyOption = - QCommandLineOption(QStringList() << "y" << "yubikey", + QCommandLineOption(QStringList() << "y" + << "yubikey", QObject::tr("Yubikey slot and optional serial used to access the database (e.g., 1:7370001)."), QObject::tr("slot[:serial]")); @@ -100,7 +103,9 @@ Command::Command() options.append(Command::QuietOption); } -Command::~Command() = default; +Command::~Command() +{ +} QString Command::getDescriptionLine() { diff --git a/src/cli/DatabaseCreate.cpp b/src/cli/DatabaseCreate.cpp index de7b99b06..10b424825 100644 --- a/src/cli/DatabaseCreate.cpp +++ b/src/cli/DatabaseCreate.cpp @@ -18,20 +18,20 @@ #include "DatabaseCreate.h" #include "Utils.h" -#include "core/Global.h" #include "keys/FileKey.h" #include #include const QCommandLineOption DatabaseCreate::DecryptionTimeOption = - QCommandLineOption(QStringList() << "t" << "decryption-time", + QCommandLineOption(QStringList() << "t" + << "decryption-time", QObject::tr("Target decryption time in MS for the database."), QObject::tr("time")); const QCommandLineOption DatabaseCreate::SetKeyFileShortOption = QCommandLineOption( QStringList() << "k", - QObject::tr("Set the key file for the database.\nThis option is deprecated, use --set-key-file instead."), + QObject::tr("Set the key file for the database.\nThis options is deprecated, use --set-key-file instead."), QObject::tr("path")); const QCommandLineOption DatabaseCreate::SetKeyFileOption = @@ -40,7 +40,9 @@ const QCommandLineOption DatabaseCreate::SetKeyFileOption = QObject::tr("path")); const QCommandLineOption DatabaseCreate::SetPasswordOption = - QCommandLineOption(QStringList() << "p" << "set-password", QObject::tr("Set a password for the database.")); + QCommandLineOption(QStringList() << "p" + << "set-password", + QObject::tr("Set a password for the database.")); DatabaseCreate::DatabaseCreate() { @@ -68,13 +70,13 @@ QSharedPointer DatabaseCreate::initializeDatabaseFromOptions(const QSh if (decryptionTimeValue.length() != 0) { decryptionTime = decryptionTimeValue.toInt(); if (decryptionTime <= 0) { - err << QObject::tr("Invalid decryption time %1.").arg(decryptionTimeValue) << Qt::endl; + err << QObject::tr("Invalid decryption time %1.").arg(decryptionTimeValue) << endl; return {}; } if (decryptionTime < Kdf::MIN_ENCRYPTION_TIME || decryptionTime > Kdf::MAX_ENCRYPTION_TIME) { err << QObject::tr("Target decryption time must be between %1 and %2.") .arg(QString::number(Kdf::MIN_ENCRYPTION_TIME), QString::number(Kdf::MAX_ENCRYPTION_TIME)) - << Qt::endl; + << endl; return {}; } } @@ -84,7 +86,7 @@ QSharedPointer DatabaseCreate::initializeDatabaseFromOptions(const QSh if (parser->isSet(DatabaseCreate::SetPasswordOption)) { auto passwordKey = Utils::getConfirmedPassword(); if (passwordKey.isNull()) { - err << QObject::tr("Failed to set database password.") << Qt::endl; + err << QObject::tr("Failed to set database password.") << endl; return {}; } key->addKey(passwordKey); @@ -102,7 +104,7 @@ QSharedPointer DatabaseCreate::initializeDatabaseFromOptions(const QSh } if (!Utils::loadFileKey(keyFilePath, fileKey)) { - err << QObject::tr("Loading the key file failed") << Qt::endl; + err << QObject::tr("Loading the key file failed") << endl; return {}; } @@ -112,7 +114,7 @@ QSharedPointer DatabaseCreate::initializeDatabaseFromOptions(const QSh } if (key->isEmpty()) { - err << QObject::tr("No key is set. Aborting database creation.") << Qt::endl; + err << QObject::tr("No key is set. Aborting database creation.") << endl; return {}; } @@ -123,15 +125,15 @@ QSharedPointer DatabaseCreate::initializeDatabaseFromOptions(const QSh auto kdf = db->kdf(); Q_ASSERT(kdf); - out << QObject::tr("Benchmarking key derivation function for %1ms delay.").arg(decryptionTimeValue) << Qt::endl; + out << QObject::tr("Benchmarking key derivation function for %1ms delay.").arg(decryptionTimeValue) << endl; int rounds = kdf->benchmark(decryptionTime); - out << QObject::tr("Setting %1 rounds for key derivation function.").arg(QString::number(rounds)) << Qt::endl; + out << QObject::tr("Setting %1 rounds for key derivation function.").arg(QString::number(rounds)) << endl; kdf->setRounds(rounds); bool ok = db->changeKdf(kdf); if (!ok) { - err << QObject::tr("error while setting database key derivation settings.") << Qt::endl; + err << QObject::tr("error while setting database key derivation settings.") << endl; return {}; } } @@ -147,7 +149,7 @@ QSharedPointer DatabaseCreate::initializeDatabaseFromOptions(const QSh * 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 existent directory, the + * 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 @@ -166,7 +168,7 @@ int DatabaseCreate::execute(const QStringList& arguments) const QString& databaseFilename = args.at(0); if (QFileInfo::exists(databaseFilename)) { - err << QObject::tr("File %1 already exists.").arg(databaseFilename) << Qt::endl; + err << QObject::tr("File %1 already exists.").arg(databaseFilename) << endl; return EXIT_FAILURE; } @@ -177,10 +179,10 @@ int DatabaseCreate::execute(const QStringList& arguments) QString errorMessage; if (!db->saveAs(databaseFilename, Database::Atomic, {}, &errorMessage)) { - err << QObject::tr("Failed to save the database: %1.").arg(errorMessage) << Qt::endl; + err << QObject::tr("Failed to save the database: %1.").arg(errorMessage) << endl; return EXIT_FAILURE; } - out << QObject::tr("Successfully created new database.") << Qt::endl; + out << QObject::tr("Successfully created new database.") << endl; return EXIT_SUCCESS; } diff --git a/src/cli/DatabaseEdit.cpp b/src/cli/DatabaseEdit.cpp index 3df4d4b19..f5ca4ef2e 100644 --- a/src/cli/DatabaseEdit.cpp +++ b/src/cli/DatabaseEdit.cpp @@ -19,7 +19,6 @@ #include "Utils.h" #include "cli/DatabaseCreate.h" -#include "core/Global.h" #include "keys/ChallengeResponseKey.h" #include "keys/FileKey.h" #include "keys/PasswordKey.h" @@ -54,7 +53,7 @@ int DatabaseEdit::executeWithDatabase(QSharedPointer database, QShared err << QObject::tr("Cannot use %1 and %2 at the same time.") .arg(DatabaseCreate::SetPasswordOption.names().at(0)) .arg(DatabaseEdit::UnsetPasswordOption.names().at(0)) - << Qt::endl; + << endl; return EXIT_FAILURE; } @@ -62,7 +61,7 @@ int DatabaseEdit::executeWithDatabase(QSharedPointer database, QShared err << QObject::tr("Cannot use %1 and %2 at the same time.") .arg(DatabaseCreate::SetKeyFileOption.names().at(0)) .arg(DatabaseEdit::UnsetKeyFileOption.names().at(0)) - << Qt::endl; + << endl; return EXIT_FAILURE; } @@ -77,7 +76,7 @@ int DatabaseEdit::executeWithDatabase(QSharedPointer database, QShared parser->value(DatabaseCreate::SetKeyFileOption), parser->isSet(DatabaseEdit::UnsetKeyFileOption)); if (newDatabaseKey.isNull()) { - err << QObject::tr("Could not change the database key.") << Qt::endl; + err << QObject::tr("Could not change the database key.") << endl; return EXIT_FAILURE; } database->setKey(newDatabaseKey); @@ -85,17 +84,17 @@ int DatabaseEdit::executeWithDatabase(QSharedPointer database, QShared } if (!databaseWasChanged) { - out << QObject::tr("Database was not modified.") << Qt::endl; + out << QObject::tr("Database was not modified.") << endl; return EXIT_SUCCESS; } QString errorMessage; if (!database->save(Database::Atomic, {}, &errorMessage)) { - err << QObject::tr("Writing the database failed: %1").arg(errorMessage) << Qt::endl; + err << QObject::tr("Writing the database failed: %1").arg(errorMessage) << endl; return EXIT_FAILURE; } - out << QObject::tr("Successfully edited the database.") << Qt::endl; + out << QObject::tr("Successfully edited the database.") << endl; return EXIT_SUCCESS; } @@ -114,19 +113,19 @@ QSharedPointer DatabaseEdit::getNewDatabaseKey(QSharedPointerkey()->getChallengeResponseKey(ChallengeResponseKey::UUID); if (removePassword && currentPasswordKey.isNull()) { - err << QObject::tr("Cannot remove password: The database does not have a password.") << Qt::endl; + err << QObject::tr("Cannot remove password: The database does not have a password.") << endl; return {}; } if (removeKeyFile && currentFileKey.isNull()) { - err << QObject::tr("Cannot remove file key: The database does not have a file key.") << Qt::endl; + err << QObject::tr("Cannot remove file key: The database does not have a file key.") << endl; return {}; } if (updatePassword) { QSharedPointer newPasswordKey = Utils::getConfirmedPassword(); if (newPasswordKey.isNull()) { - err << QObject::tr("Failed to set database password.") << Qt::endl; + err << QObject::tr("Failed to set database password.") << endl; return {}; } newDatabaseKey->addKey(newPasswordKey); @@ -138,7 +137,7 @@ QSharedPointer DatabaseEdit::getNewDatabaseKey(QSharedPointer newFileKey = QSharedPointer::create(); QString errorMessage; if (!Utils::loadFileKey(newFileKeyPath, newFileKey)) { - err << QObject::tr("Loading the new key file failed: %1").arg(errorMessage) << Qt::endl; + err << QObject::tr("Loading the new key file failed: %1").arg(errorMessage) << endl; return {}; } newDatabaseKey->addKey(newFileKey); @@ -151,13 +150,13 @@ QSharedPointer DatabaseEdit::getNewDatabaseKey(QSharedPointer& key : database->key()->keys()) { if (key->uuid() != PasswordKey::UUID && key->uuid() != FileKey::UUID) { - err << QObject::tr("Found unexpected Key type %1").arg(key->uuid().toString()) << Qt::endl; + err << QObject::tr("Found unexpected Key type %1").arg(key->uuid().toString()) << endl; return {}; } } for (const QSharedPointer& key : database->key()->challengeResponseKeys()) { if (key->uuid() != ChallengeResponseKey::UUID) { - err << QObject::tr("Found unexpected Key type %1").arg(key->uuid().toString()) << Qt::endl; + err << QObject::tr("Found unexpected Key type %1").arg(key->uuid().toString()) << endl; return {}; } } @@ -167,7 +166,7 @@ QSharedPointer DatabaseEdit::getNewDatabaseKey(QSharedPointerkeys().isEmpty() && newDatabaseKey->challengeResponseKeys().isEmpty()) { - err << QObject::tr("Cannot remove all the keys from a database.") << Qt::endl; + err << QObject::tr("Cannot remove all the keys from a database.") << endl; return {}; } diff --git a/src/cli/DatabaseInfo.cpp b/src/cli/DatabaseInfo.cpp index 0b205157c..f0e5e0f03 100644 --- a/src/cli/DatabaseInfo.cpp +++ b/src/cli/DatabaseInfo.cpp @@ -18,7 +18,6 @@ #include "DatabaseInfo.h" #include "Utils.h" -#include "core/Clock.h" #include "core/DatabaseStats.h" #include "core/Global.h" #include "core/Group.h" @@ -36,39 +35,39 @@ int DatabaseInfo::executeWithDatabase(QSharedPointer database, QShared { auto& out = Utils::STDOUT; - out << QObject::tr("UUID: ") << database->uuid().toString() << Qt::endl; - out << QObject::tr("Name: ") << database->metadata()->name() << Qt::endl; - out << QObject::tr("Description: ") << database->metadata()->description() << Qt::endl; + out << QObject::tr("UUID: ") << database->uuid().toString() << endl; + out << QObject::tr("Name: ") << database->metadata()->name() << endl; + out << QObject::tr("Description: ") << database->metadata()->description() << endl; for (auto& cipher : asConst(KeePass2::CIPHERS)) { if (cipher == database->cipher()) { - out << QObject::tr("Cipher: ") << KeePass2::cipherToString(cipher) << Qt::endl; + out << QObject::tr("Cipher: ") << KeePass2::cipherToString(cipher) << endl; } } - out << QObject::tr("KDF: ") << database->kdf()->toString() << Qt::endl; + out << QObject::tr("KDF: ") << database->kdf()->toString() << endl; if (database->metadata()->recycleBinEnabled()) { - out << QObject::tr("Recycle bin is enabled.") << Qt::endl; + out << QObject::tr("Recycle bin is enabled.") << endl; } else { - out << QObject::tr("Recycle bin is not enabled.") << Qt::endl; + out << QObject::tr("Recycle bin is not enabled.") << endl; } DatabaseStats stats(database); - out << QObject::tr("Location") << ": " << database->filePath() << Qt::endl; - out << QObject::tr("Database created") << ": " << Clock::toString(database->rootGroup()->timeInfo().creationTime()) - << Qt::endl; - out << QObject::tr("Last saved") << ": " << Clock::toString(stats.modified) << Qt::endl; + out << QObject::tr("Location") << ": " << database->filePath() << endl; + out << QObject::tr("Database created") << ": " + << database->rootGroup()->timeInfo().creationTime().toString(Qt::DefaultLocaleShortDate) << endl; + out << QObject::tr("Last saved") << ": " << stats.modified.toString(Qt::DefaultLocaleShortDate) << endl; out << QObject::tr("Unsaved changes") << ": " << (database->isModified() ? QObject::tr("yes") : QObject::tr("no")) - << Qt::endl; - out << QObject::tr("Number of groups") << ": " << QString::number(stats.groupCount) << Qt::endl; - out << QObject::tr("Number of entries") << ": " << QString::number(stats.entryCount) << Qt::endl; - out << QObject::tr("Number of expired entries") << ": " << QString::number(stats.expiredEntries) << Qt::endl; - out << QObject::tr("Unique passwords") << ": " << QString::number(stats.uniquePasswords) << Qt::endl; - out << QObject::tr("Non-unique passwords") << ": " << QString::number(stats.reusedPasswords) << Qt::endl; - out << QObject::tr("Maximum password reuse") << ": " << QString::number(stats.maxPwdReuse()) << Qt::endl; - out << QObject::tr("Number of short passwords") << ": " << QString::number(stats.shortPasswords) << Qt::endl; - out << QObject::tr("Number of weak passwords") << ": " << QString::number(stats.weakPasswords) << Qt::endl; - out << QObject::tr("Entries excluded from reports") << ": " << QString::number(stats.excludedEntries) << Qt::endl; + << endl; + out << QObject::tr("Number of groups") << ": " << QString::number(stats.groupCount) << endl; + out << QObject::tr("Number of entries") << ": " << QString::number(stats.entryCount) << endl; + out << QObject::tr("Number of expired entries") << ": " << QString::number(stats.expiredEntries) << endl; + out << QObject::tr("Unique passwords") << ": " << QString::number(stats.uniquePasswords) << endl; + out << QObject::tr("Non-unique passwords") << ": " << QString::number(stats.reusedPasswords) << endl; + out << QObject::tr("Maximum password reuse") << ": " << QString::number(stats.maxPwdReuse()) << endl; + out << QObject::tr("Number of short passwords") << ": " << QString::number(stats.shortPasswords) << endl; + out << QObject::tr("Number of weak passwords") << ": " << QString::number(stats.weakPasswords) << endl; + out << QObject::tr("Entries excluded from reports") << ": " << QString::number(stats.excludedEntries) << endl; out << QObject::tr("Average password length") << ": " << QObject::tr("%1 characters").arg(stats.averagePwdLength()) - << Qt::endl; + << endl; return EXIT_SUCCESS; } diff --git a/src/cli/DatabaseInfo.h b/src/cli/DatabaseInfo.h index 42a48c86f..b7e959cc3 100644 --- a/src/cli/DatabaseInfo.h +++ b/src/cli/DatabaseInfo.h @@ -25,7 +25,7 @@ class DatabaseInfo : public DatabaseCommand public: DatabaseInfo(); - int executeWithDatabase(QSharedPointer db, QSharedPointer parser) override; + int executeWithDatabase(QSharedPointer db, QSharedPointer parser); }; #endif // KEEPASSXC_DATABASEINFO_H diff --git a/src/cli/Diceware.cpp b/src/cli/Diceware.cpp index 9b5cc2ed6..b6a65bd1e 100644 --- a/src/cli/Diceware.cpp +++ b/src/cli/Diceware.cpp @@ -18,18 +18,19 @@ #include "Diceware.h" #include "Utils.h" -#include "core/Global.h" #include "core/PassphraseGenerator.h" #include const QCommandLineOption Diceware::WordCountOption = - QCommandLineOption(QStringList() << "W" << "words", + QCommandLineOption(QStringList() << "W" + << "words", QObject::tr("Word count for the diceware passphrase."), QObject::tr("count", "CLI parameter")); const QCommandLineOption Diceware::WordListOption = - QCommandLineOption(QStringList() << "w" << "word-list", + QCommandLineOption(QStringList() << "w" + << "word-list", QObject::tr("Wordlist for the diceware generator.\n[Default: EFF English]"), QObject::tr("path")); @@ -57,7 +58,7 @@ int Diceware::execute(const QStringList& arguments) if (wordCount.isEmpty()) { dicewareGenerator.setWordCount(PassphraseGenerator::DefaultWordCount); } else if (wordCount.toInt() <= 0) { - err << QObject::tr("Invalid word count %1").arg(wordCount) << Qt::endl; + err << QObject::tr("Invalid word count %1").arg(wordCount) << endl; return EXIT_FAILURE; } else { dicewareGenerator.setWordCount(wordCount.toInt()); @@ -68,13 +69,15 @@ int Diceware::execute(const QStringList& arguments) dicewareGenerator.setWordList(wordListFile); } - // Show a warning if the wordlist is smaller than the recommended size - if (!dicewareGenerator.isWordListValid()) { - err << QObject::tr("Warning: the chosen wordlist is smaller than the minimum recommended size!") << Qt::endl; + if (!dicewareGenerator.isValid()) { + // We already validated the word count input so if the generator is invalid, it + // must be because the word list is too small. + err << QObject::tr("The word list is too small (< 1000 items)") << endl; + return EXIT_FAILURE; } QString password = dicewareGenerator.generatePassphrase(); - out << password << Qt::endl; + out << password << endl; return EXIT_SUCCESS; } diff --git a/src/cli/Edit.cpp b/src/cli/Edit.cpp index 680b45f0b..1154ce309 100644 --- a/src/cli/Edit.cpp +++ b/src/cli/Edit.cpp @@ -20,14 +20,15 @@ #include "Add.h" #include "Generate.h" #include "Utils.h" -#include "core/Global.h" #include "core/Group.h" #include "core/PasswordGenerator.h" #include -const QCommandLineOption Edit::TitleOption = - QCommandLineOption(QStringList() << "t" << "title", QObject::tr("Title for the entry."), QObject::tr("title")); +const QCommandLineOption Edit::TitleOption = QCommandLineOption(QStringList() << "t" + << "title", + QObject::tr("Title for the entry."), + QObject::tr("title")); Edit::Edit() { @@ -65,7 +66,7 @@ int Edit::executeWithDatabase(QSharedPointer database, QSharedPointer< // Cannot use those 2 options at the same time! if (parser->isSet(Add::GenerateOption) && parser->isSet(Add::PasswordPromptOption)) { - err << QObject::tr("Cannot generate a password and prompt at the same time.") << Qt::endl; + err << QObject::tr("Cannot generate a password and prompt at the same time.") << endl; return EXIT_FAILURE; } @@ -82,7 +83,7 @@ int Edit::executeWithDatabase(QSharedPointer database, QSharedPointer< Entry* entry = database->rootGroup()->findEntryByPath(entryPath); if (!entry) { - err << QObject::tr("Could not find entry with path %1.").arg(entryPath) << Qt::endl; + err << QObject::tr("Could not find entry with path %1.").arg(entryPath) << endl; return EXIT_FAILURE; } @@ -92,7 +93,7 @@ int Edit::executeWithDatabase(QSharedPointer database, QSharedPointer< QString title = parser->value(Edit::TitleOption); bool prompt = parser->isSet(Add::PasswordPromptOption); if (username.isEmpty() && url.isEmpty() && notes.isEmpty() && title.isEmpty() && !prompt && !generate) { - err << QObject::tr("Not changing any field for entry %1.").arg(entryPath) << Qt::endl; + err << QObject::tr("Not changing any field for entry %1.").arg(entryPath) << endl; return EXIT_FAILURE; } @@ -115,7 +116,7 @@ int Edit::executeWithDatabase(QSharedPointer database, QSharedPointer< } if (prompt) { - out << QObject::tr("Enter new password for entry: ") << Qt::flush; + out << QObject::tr("Enter new password for entry: ") << flush; QString password = Utils::getPassword(parser->isSet(Command::QuietOption)); entry->setPassword(password); } else if (generate) { @@ -127,10 +128,10 @@ int Edit::executeWithDatabase(QSharedPointer database, QSharedPointer< QString errorMessage; if (!database->save(Database::Atomic, {}, &errorMessage)) { - err << QObject::tr("Writing the database failed: %1").arg(errorMessage) << Qt::endl; + err << QObject::tr("Writing the database failed: %1").arg(errorMessage) << endl; return EXIT_FAILURE; } - out << QObject::tr("Successfully edited entry %1.").arg(entry->title()) << Qt::endl; + out << QObject::tr("Successfully edited entry %1.").arg(entry->title()) << endl; return EXIT_SUCCESS; } diff --git a/src/cli/Estimate.cpp b/src/cli/Estimate.cpp index b264967f0..094fcf36c 100644 --- a/src/cli/Estimate.cpp +++ b/src/cli/Estimate.cpp @@ -18,14 +18,15 @@ #include "Estimate.h" #include "Utils.h" -#include "core/Global.h" #include "core/PasswordHealth.h" #include #include const QCommandLineOption Estimate::AdvancedOption = - QCommandLineOption(QStringList() << "a" << "advanced", QObject::tr("Perform advanced analysis on the password.")); + QCommandLineOption(QStringList() << "a" + << "advanced", + QObject::tr("Perform advanced analysis on the password.")); Estimate::Estimate() { @@ -40,13 +41,13 @@ static void estimate(const char* pwd, bool advanced) { auto& out = Utils::STDOUT; - auto len = static_cast(strlen(pwd)); + int len = static_cast(strlen(pwd)); if (!advanced) { const auto e = PasswordHealth(pwd).entropy(); // 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) << Qt::endl; + << QObject::tr("Log10 %1").arg(e * 0.301029996, 0, 'f', 3) << endl; // clang-format on } else { int pwdLen = 0; @@ -61,7 +62,7 @@ static void estimate(const char* pwd, bool advanced) 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) << Qt::endl; + << QObject::tr("Multi-word extra bits %1").arg(m, 0, 'f', 1) << endl; // clang-format on p = info; pwdLen = 0; @@ -134,13 +135,13 @@ static void estimate(const char* pwd, bool advanced) for (n = 0; n < p->Length; ++n, ++pwd) { out << *pwd; } - out << Qt::endl; + out << endl; p = p->Next; } ZxcvbnFreeInfo(info); if (pwdLen != len) { out << QObject::tr("*** Password length (%1) != sum of length of parts (%2) ***").arg(len).arg(pwdLen) - << Qt::endl; + << endl; } } } diff --git a/src/cli/Export.cpp b/src/cli/Export.cpp index 36b38b1de..6456fe5b1 100644 --- a/src/cli/Export.cpp +++ b/src/cli/Export.cpp @@ -19,16 +19,15 @@ #include "TextStream.h" #include "Utils.h" -#include "core/Global.h" #include "format/CsvExporter.h" -#include "format/HtmlExporter.h" #include const QCommandLineOption Export::FormatOption = QCommandLineOption( - QStringList() << "f" << "format", - QObject::tr("Format to use when exporting. Available choices are 'xml', 'csv' or 'html'. Defaults to 'xml'."), - QStringLiteral("xml|csv|html")); + QStringList() << "f" + << "format", + QObject::tr("Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'."), + QStringLiteral("xml|csv")); Export::Export() { @@ -47,18 +46,15 @@ int Export::executeWithDatabase(QSharedPointer database, QSharedPointe QByteArray xmlData; QString errorMessage; if (!database->extract(xmlData, &errorMessage)) { - err << QObject::tr("Unable to export database to XML: %1").arg(errorMessage) << Qt::endl; + err << QObject::tr("Unable to export database to XML: %1").arg(errorMessage) << endl; return EXIT_FAILURE; } out.write(xmlData.constData()); } else if (format.startsWith(QStringLiteral("csv"), Qt::CaseInsensitive)) { CsvExporter csvExporter; out << csvExporter.exportDatabase(database); - } else if (format.startsWith(QStringLiteral("html"), Qt::CaseInsensitive)) { - HtmlExporter htmlExporter; - out << htmlExporter.exportDatabase(database); } else { - err << QObject::tr("Unsupported format %1").arg(format) << Qt::endl; + err << QObject::tr("Unsupported format %1").arg(format) << endl; return EXIT_FAILURE; } diff --git a/src/cli/Generate.cpp b/src/cli/Generate.cpp index 258ce79fa..8ce1a6116 100644 --- a/src/cli/Generate.cpp +++ b/src/cli/Generate.cpp @@ -18,36 +18,46 @@ #include "Generate.h" #include "Utils.h" -#include "core/Global.h" #include "core/PasswordGenerator.h" #include const QCommandLineOption Generate::PasswordLengthOption = - QCommandLineOption(QStringList() << "L" << "length", + QCommandLineOption(QStringList() << "L" + << "length", QObject::tr("Length of the generated password"), QObject::tr("length")); -const QCommandLineOption Generate::LowerCaseOption = - QCommandLineOption(QStringList() << "l" << "lower", QObject::tr("Use lowercase characters")); +const QCommandLineOption Generate::LowerCaseOption = QCommandLineOption(QStringList() << "l" + << "lower", + QObject::tr("Use lowercase characters")); -const QCommandLineOption Generate::UpperCaseOption = - QCommandLineOption(QStringList() << "U" << "upper", QObject::tr("Use uppercase characters")); +const QCommandLineOption Generate::UpperCaseOption = QCommandLineOption(QStringList() << "U" + << "upper", + QObject::tr("Use uppercase characters")); -const QCommandLineOption Generate::NumbersOption = - QCommandLineOption(QStringList() << "n" << "numeric", QObject::tr("Use numbers")); +const QCommandLineOption Generate::NumbersOption = QCommandLineOption(QStringList() << "n" + << "numeric", + QObject::tr("Use numbers")); -const QCommandLineOption Generate::SpecialCharsOption = - QCommandLineOption(QStringList() << "s" << "special", QObject::tr("Use special characters")); +const QCommandLineOption Generate::SpecialCharsOption = QCommandLineOption(QStringList() << "s" + << "special", + QObject::tr("Use special characters")); -const QCommandLineOption Generate::ExtendedAsciiOption = - QCommandLineOption(QStringList() << "e" << "extended", QObject::tr("Use extended ASCII")); +const QCommandLineOption Generate::ExtendedAsciiOption = QCommandLineOption(QStringList() << "e" + << "extended", + QObject::tr("Use extended ASCII")); -const QCommandLineOption Generate::ExcludeCharsOption = - QCommandLineOption(QStringList() << "x" << "exclude", QObject::tr("Exclude character set"), QObject::tr("chars")); +const QCommandLineOption Generate::ExcludeCharsOption = QCommandLineOption(QStringList() << "x" + << "exclude", + QObject::tr("Exclude character set"), + QObject::tr("chars")); const QCommandLineOption Generate::CustomCharacterSetOption = - QCommandLineOption(QStringList() << "c" << "custom", QObject::tr("Use custom character set"), QObject::tr("chars")); + QCommandLineOption(QStringList() << "c" + << "custom", + QObject::tr("Use custom character set"), + QObject::tr("chars")); const QCommandLineOption Generate::ExcludeSimilarCharsOption = QCommandLineOption(QStringList() << "exclude-similar", QObject::tr("Exclude similar looking characters")); @@ -82,13 +92,13 @@ QSharedPointer Generate::createGenerator(QSharedPointersetLength(PasswordGenerator::DefaultLength); } else if (passwordLength.toInt() <= 0) { - err << QObject::tr("Invalid password length %1").arg(passwordLength) << Qt::endl; - return {}; + err << QObject::tr("Invalid password length %1").arg(passwordLength) << endl; + return QSharedPointer(nullptr); } else { passwordGenerator->setLength(passwordLength.toInt()); } - PasswordGenerator::CharClasses classes; + PasswordGenerator::CharClasses classes = 0x0; if (parser->isSet(Generate::LowerCaseOption)) { classes |= PasswordGenerator::LowerLetters; @@ -106,7 +116,7 @@ QSharedPointer Generate::createGenerator(QSharedPointerisSet(Generate::ExcludeSimilarCharsOption)) { flags |= PasswordGenerator::ExcludeLookAlike; @@ -128,8 +138,8 @@ QSharedPointer Generate::createGenerator(QSharedPointersetExcludedCharacterSet(parser->value(Generate::ExcludeCharsOption)); if (!passwordGenerator->isValid()) { - err << QObject::tr("Invalid password generator after applying all options") << Qt::endl; - return {}; + err << QObject::tr("Invalid password generator after applying all options") << endl; + return QSharedPointer(nullptr); } return passwordGenerator; @@ -149,7 +159,7 @@ int Generate::execute(const QStringList& arguments) auto& out = Utils::STDOUT; QString password = passwordGenerator->generatePassword(); - out << password << Qt::endl; + out << password << endl; return EXIT_SUCCESS; } diff --git a/src/cli/Import.cpp b/src/cli/Import.cpp index 48f93d88c..cc74df767 100644 --- a/src/cli/Import.cpp +++ b/src/cli/Import.cpp @@ -20,8 +20,6 @@ #include "DatabaseCreate.h" #include "Utils.h" -#include "core/Global.h" - #include #include @@ -30,7 +28,7 @@ * A password can be specified to encrypt the database. * If none is specified the function will fail. * - * If the database is being saved in a non existent directory, the + * 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 @@ -63,7 +61,7 @@ int Import::execute(const QStringList& arguments) const QString& dbPath = args.at(1); if (QFileInfo::exists(dbPath)) { - err << QObject::tr("File %1 already exists.").arg(dbPath) << Qt::endl; + err << QObject::tr("File %1 already exists.").arg(dbPath) << endl; return EXIT_FAILURE; } @@ -74,15 +72,15 @@ int Import::execute(const QStringList& arguments) QString errorMessage; if (!db->import(xmlExportPath, &errorMessage)) { - err << QObject::tr("Unable to import XML database: %1").arg(errorMessage) << Qt::endl; + err << QObject::tr("Unable to import XML database: %1").arg(errorMessage) << endl; return EXIT_FAILURE; } if (!db->saveAs(dbPath, Database::Atomic, {}, &errorMessage)) { - err << QObject::tr("Failed to save the database: %1.").arg(errorMessage) << Qt::endl; + err << QObject::tr("Failed to save the database: %1.").arg(errorMessage) << endl; return EXIT_FAILURE; } - out << QObject::tr("Successfully imported database.") << Qt::endl; + out << QObject::tr("Successfully imported database.") << endl; return EXIT_SUCCESS; } diff --git a/src/cli/List.cpp b/src/cli/List.cpp index 89ddef5be..4140c1cd8 100644 --- a/src/cli/List.cpp +++ b/src/cli/List.cpp @@ -18,16 +18,18 @@ #include "List.h" #include "Utils.h" -#include "core/Global.h" #include "core/Group.h" #include const QCommandLineOption List::RecursiveOption = - QCommandLineOption(QStringList() << "R" << "recursive", QObject::tr("Recursively list the elements of the group.")); + QCommandLineOption(QStringList() << "R" + << "recursive", + QObject::tr("Recursively list the elements of the group.")); -const QCommandLineOption List::FlattenOption = - QCommandLineOption(QStringList() << "f" << "flatten", QObject::tr("Flattens the output to single lines.")); +const QCommandLineOption List::FlattenOption = QCommandLineOption(QStringList() << "f" + << "flatten", + QObject::tr("Flattens the output to single lines.")); List::List() { @@ -50,17 +52,17 @@ int List::executeWithDatabase(QSharedPointer database, QSharedPointer< // No group provided, defaulting to root group. if (args.size() == 1) { - out << database->rootGroup()->print(recursive, flatten) << Qt::flush; + out << database->rootGroup()->print(recursive, flatten) << flush; return EXIT_SUCCESS; } const QString& groupPath = args.at(1); Group* group = database->rootGroup()->findGroupByPath(groupPath); if (!group) { - err << QObject::tr("Cannot find group %1.").arg(groupPath) << Qt::endl; + err << QObject::tr("Cannot find group %1.").arg(groupPath) << endl; return EXIT_FAILURE; } - out << group->print(recursive, flatten) << Qt::flush; + out << group->print(recursive, flatten) << flush; return EXIT_SUCCESS; } diff --git a/src/cli/Merge.cpp b/src/cli/Merge.cpp index 6cf351c96..410892c9f 100644 --- a/src/cli/Merge.cpp +++ b/src/cli/Merge.cpp @@ -18,13 +18,13 @@ #include "Merge.h" #include "Utils.h" -#include "core/Global.h" #include "core/Merger.h" #include const QCommandLineOption Merge::SameCredentialsOption = - QCommandLineOption(QStringList() << "s" << "same-credentials", + QCommandLineOption(QStringList() << "s" + << "same-credentials", QObject::tr("Use the same credentials for both database files.")); const QCommandLineOption Merge::KeyFileFromOption = @@ -37,7 +37,7 @@ const QCommandLineOption Merge::NoPasswordFromOption = QObject::tr("Deactivate password key for the database to merge from.")); const QCommandLineOption Merge::DryRunOption = - QCommandLineOption(QStringList() << "d" << "dry-run", + QCommandLineOption(QStringList() << "dry-run", QObject::tr("Only print the changes detected by the merge operation.")); const QCommandLineOption Merge::YubiKeyFromOption(QStringList() << "yubikey-from", @@ -90,18 +90,18 @@ int Merge::executeWithDatabase(QSharedPointer database, QSharedPointer QStringList changeList = merger.merge(); for (auto& mergeChange : changeList) { - out << "\t" << mergeChange << Qt::endl; + out << "\t" << mergeChange << endl; } if (!changeList.isEmpty() && !parser->isSet(Merge::DryRunOption)) { QString errorMessage; if (!database->save(Database::Atomic, {}, &errorMessage)) { - err << QObject::tr("Unable to save database to file : %1").arg(errorMessage) << Qt::endl; + err << QObject::tr("Unable to save database to file : %1").arg(errorMessage) << endl; return EXIT_FAILURE; } - out << QObject::tr("Successfully merged %1 into %2.").arg(fromDatabasePath, toDatabasePath) << Qt::endl; + out << QObject::tr("Successfully merged %1 into %2.").arg(fromDatabasePath, toDatabasePath) << endl; } else { - out << QObject::tr("Database was not modified by merge operation.") << Qt::endl; + out << QObject::tr("Database was not modified by merge operation.") << endl; } return EXIT_SUCCESS; diff --git a/src/cli/Move.cpp b/src/cli/Move.cpp index 96407c680..a9ee78614 100644 --- a/src/cli/Move.cpp +++ b/src/cli/Move.cpp @@ -18,7 +18,6 @@ #include "Move.h" #include "Utils.h" -#include "core/Global.h" #include "core/Group.h" #include @@ -31,7 +30,9 @@ Move::Move() positionalArguments.append({QString("group"), QObject::tr("Path of the destination group."), QString("")}); } -Move::~Move() = default; +Move::~Move() +{ +} int Move::executeWithDatabase(QSharedPointer database, QSharedPointer parser) { @@ -44,18 +45,18 @@ int Move::executeWithDatabase(QSharedPointer database, QSharedPointer< Entry* entry = database->rootGroup()->findEntryByPath(entryPath); if (!entry) { - err << QObject::tr("Could not find entry with path %1.").arg(entryPath) << Qt::endl; + err << QObject::tr("Could not find entry with path %1.").arg(entryPath) << endl; return EXIT_FAILURE; } Group* destinationGroup = database->rootGroup()->findGroupByPath(destinationPath); if (!destinationGroup) { - err << QObject::tr("Could not find group with path %1.").arg(destinationPath) << Qt::endl; + err << QObject::tr("Could not find group with path %1.").arg(destinationPath) << endl; return EXIT_FAILURE; } if (destinationGroup == entry->parent()) { - err << QObject::tr("Entry is already in group %1.").arg(destinationPath) << Qt::endl; + err << QObject::tr("Entry is already in group %1.").arg(destinationPath) << endl; return EXIT_FAILURE; } @@ -65,10 +66,10 @@ int Move::executeWithDatabase(QSharedPointer database, QSharedPointer< QString errorMessage; if (!database->save(Database::Atomic, {}, &errorMessage)) { - err << QObject::tr("Writing the database failed %1.").arg(errorMessage) << Qt::endl; + err << QObject::tr("Writing the database failed %1.").arg(errorMessage) << endl; return EXIT_FAILURE; } - out << QObject::tr("Successfully moved entry %1 to group %2.").arg(entry->title(), destinationPath) << Qt::endl; + out << QObject::tr("Successfully moved entry %1 to group %2.").arg(entry->title(), destinationPath) << endl; return EXIT_SUCCESS; } diff --git a/src/cli/Move.h b/src/cli/Move.h index e87b0c795..c506085a5 100644 --- a/src/cli/Move.h +++ b/src/cli/Move.h @@ -24,9 +24,9 @@ class Move : public DatabaseCommand { public: Move(); - ~Move() override; + ~Move(); - int executeWithDatabase(QSharedPointer db, QSharedPointer parser) override; + int executeWithDatabase(QSharedPointer db, QSharedPointer parser); }; #endif // KEEPASSXC_MOVE_H diff --git a/src/cli/Remove.cpp b/src/cli/Remove.cpp index cc70be7d1..f383d1636 100644 --- a/src/cli/Remove.cpp +++ b/src/cli/Remove.cpp @@ -18,7 +18,6 @@ #include "Remove.h" #include "Utils.h" -#include "core/Global.h" #include "core/Group.h" #include "core/Metadata.h" @@ -36,10 +35,10 @@ int Remove::executeWithDatabase(QSharedPointer database, QSharedPointe auto& out = parser->isSet(Command::QuietOption) ? Utils::DEVNULL : Utils::STDOUT; auto& err = Utils::STDERR; - auto entryPath = parser->positionalArguments().at(1); + auto& entryPath = parser->positionalArguments().at(1); QPointer entry = database->rootGroup()->findEntryByPath(entryPath); if (!entry) { - err << QObject::tr("Entry %1 not found.").arg(entryPath) << Qt::endl; + err << QObject::tr("Entry %1 not found.").arg(entryPath) << endl; return EXIT_FAILURE; } @@ -51,18 +50,18 @@ int Remove::executeWithDatabase(QSharedPointer database, QSharedPointe recycled = false; } else { database->recycleEntry(entry); - } + }; QString errorMessage; if (!database->save(Database::Atomic, {}, &errorMessage)) { - err << QObject::tr("Unable to save database to file: %1").arg(errorMessage) << Qt::endl; + err << QObject::tr("Unable to save database to file: %1").arg(errorMessage) << endl; return EXIT_FAILURE; } if (recycled) { - out << QObject::tr("Successfully recycled entry %1.").arg(entryTitle) << Qt::endl; + out << QObject::tr("Successfully recycled entry %1.").arg(entryTitle) << endl; } else { - out << QObject::tr("Successfully deleted entry %1.").arg(entryTitle) << Qt::endl; + out << 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 640e94ea3..6019bfa16 100644 --- a/src/cli/Remove.h +++ b/src/cli/Remove.h @@ -25,7 +25,7 @@ class Remove : public DatabaseCommand public: Remove(); - int executeWithDatabase(QSharedPointer db, QSharedPointer parser) override; + int executeWithDatabase(QSharedPointer db, QSharedPointer parser); }; #endif // KEEPASSXC_REMOVE_H diff --git a/src/cli/RemoveGroup.cpp b/src/cli/RemoveGroup.cpp index 43446a0e7..6455af496 100644 --- a/src/cli/RemoveGroup.cpp +++ b/src/cli/RemoveGroup.cpp @@ -18,7 +18,6 @@ #include "RemoveGroup.h" #include "Utils.h" -#include "core/Global.h" #include "core/Group.h" #include "core/Metadata.h" @@ -31,7 +30,9 @@ RemoveGroup::RemoveGroup() positionalArguments.append({QString("group"), QObject::tr("Path of the group to remove."), QString("")}); } -RemoveGroup::~RemoveGroup() = default; +RemoveGroup::~RemoveGroup() +{ +} int RemoveGroup::executeWithDatabase(QSharedPointer database, QSharedPointer parser) { @@ -43,12 +44,12 @@ int RemoveGroup::executeWithDatabase(QSharedPointer database, QSharedP // Recursive option means were looking for a group to remove. QPointer group = database->rootGroup()->findGroupByPath(groupPath); if (!group) { - err << QObject::tr("Group %1 not found.").arg(groupPath) << Qt::endl; + err << QObject::tr("Group %1 not found.").arg(groupPath) << endl; return EXIT_FAILURE; } if (group == database->rootGroup()) { - err << QObject::tr("Cannot remove root group from database.") << Qt::endl; + err << QObject::tr("Cannot remove root group from database.") << endl; return EXIT_FAILURE; } @@ -63,14 +64,14 @@ int RemoveGroup::executeWithDatabase(QSharedPointer database, QSharedP QString errorMessage; if (!database->save(Database::Atomic, {}, &errorMessage)) { - err << QObject::tr("Unable to save database to file: %1").arg(errorMessage) << Qt::endl; + err << QObject::tr("Unable to save database to file: %1").arg(errorMessage) << endl; return EXIT_FAILURE; } if (recycled) { - out << QObject::tr("Successfully recycled group %1.").arg(groupPath) << Qt::endl; + out << QObject::tr("Successfully recycled group %1.").arg(groupPath) << endl; } else { - out << QObject::tr("Successfully deleted group %1.").arg(groupPath) << Qt::endl; + out << QObject::tr("Successfully deleted group %1.").arg(groupPath) << endl; } return EXIT_SUCCESS; diff --git a/src/cli/RemoveGroup.h b/src/cli/RemoveGroup.h index 20518a005..2b5194665 100644 --- a/src/cli/RemoveGroup.h +++ b/src/cli/RemoveGroup.h @@ -24,9 +24,9 @@ class RemoveGroup : public DatabaseCommand { public: RemoveGroup(); - ~RemoveGroup() override; + ~RemoveGroup(); - int executeWithDatabase(QSharedPointer db, QSharedPointer parser) override; + int executeWithDatabase(QSharedPointer db, QSharedPointer parser); }; #endif // KEEPASSXC_REMOVEGROUP_H diff --git a/src/cli/Search.cpp b/src/cli/Search.cpp index fcaeadd6a..44f1743e3 100644 --- a/src/cli/Search.cpp +++ b/src/cli/Search.cpp @@ -21,7 +21,6 @@ #include "Utils.h" #include "core/EntrySearcher.h" -#include "core/Global.h" #include "core/Group.h" Search::Search() @@ -41,12 +40,12 @@ int Search::executeWithDatabase(QSharedPointer database, QSharedPointe EntrySearcher searcher; auto results = searcher.search(args.at(1), database->rootGroup(), true); if (results.isEmpty()) { - err << "No results for that search term." << Qt::endl; + err << "No results for that search term." << endl; return EXIT_FAILURE; } for (const Entry* result : asConst(results)) { - out << result->path().prepend('/') << Qt::endl; + out << result->path().prepend('/') << endl; } return EXIT_SUCCESS; } diff --git a/src/cli/Show.cpp b/src/cli/Show.cpp index a65809a16..c8cb430ed 100644 --- a/src/cli/Show.cpp +++ b/src/cli/Show.cpp @@ -23,11 +23,13 @@ #include -const QCommandLineOption Show::TotpOption = - QCommandLineOption(QStringList() << "t" << "totp", QObject::tr("Show the entry's current TOTP.")); +const QCommandLineOption Show::TotpOption = QCommandLineOption(QStringList() << "t" + << "totp", + QObject::tr("Show the entry's current TOTP.")); const QCommandLineOption Show::ProtectedAttributesOption = - QCommandLineOption(QStringList() << "s" << "show-protected", + QCommandLineOption(QStringList() << "s" + << "show-protected", QObject::tr("Show the protected attributes in clear text.")); const QCommandLineOption Show::AllAttributesOption = @@ -37,7 +39,8 @@ const QCommandLineOption Show::AttachmentsOption = QCommandLineOption(QStringList() << "show-attachments", QObject::tr("Show the attachments of the entry.")); const QCommandLineOption Show::AttributesOption = QCommandLineOption( - QStringList() << "a" << "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. " @@ -70,12 +73,12 @@ int Show::executeWithDatabase(QSharedPointer database, QSharedPointer< Entry* entry = database->rootGroup()->findEntryByPath(entryPath); if (!entry) { - err << QObject::tr("Could not find entry with path %1.").arg(entryPath) << Qt::endl; + err << QObject::tr("Could not find entry with path %1.").arg(entryPath) << endl; return EXIT_FAILURE; } if (showTotp && !entry->hasTotp()) { - err << QObject::tr("Entry with path %1 has no TOTP set up.").arg(entryPath) << Qt::endl; + err << QObject::tr("Entry with path %1 has no TOTP set up.").arg(entryPath) << endl; return EXIT_FAILURE; } @@ -110,20 +113,20 @@ int Show::executeWithDatabase(QSharedPointer database, QSharedPointer< if (!attributesWereSpecified) { out << attributeName << ": "; } - out << Utils::getTopLevelField(entry, attributeName) << Qt::endl; + out << Utils::getTopLevelField(entry, attributeName) << endl; continue; } QStringList attrs = Utils::findAttributes(*entry->attributes(), attributeName); if (attrs.isEmpty()) { encounteredError = true; - err << QObject::tr("ERROR: unknown attribute %1.").arg(attributeName) << Qt::endl; + err << QObject::tr("ERROR: unknown attribute %1.").arg(attributeName) << endl; continue; } else if (attrs.size() > 1) { encounteredError = true; err << QObject::tr("ERROR: attribute %1 is ambiguous, it matches %2.") .arg(attributeName, QLocale().createSeparatedList(attrs)) - << Qt::endl; + << endl; continue; } QString canonicalName = attrs[0]; @@ -131,33 +134,33 @@ int Show::executeWithDatabase(QSharedPointer database, QSharedPointer< out << canonicalName << ": "; } if (entry->attributes()->isProtected(canonicalName) && !attributesWereSpecified && !showProtectedAttributes) { - out << "PROTECTED" << Qt::endl; + out << "PROTECTED" << endl; } else { - out << entry->resolveMultiplePlaceholders(entry->attributes()->value(canonicalName)) << Qt::endl; + out << entry->resolveMultiplePlaceholders(entry->attributes()->value(canonicalName)) << endl; } } if (parser->isSet(Show::AttachmentsOption)) { // Separate attachment output from attributes output via a newline. - out << Qt::endl; + out << endl; EntryAttachments* attachments = entry->attachments(); if (attachments->isEmpty()) { - out << QObject::tr("No attachments present.") << Qt::endl; + out << QObject::tr("No attachments present.") << endl; } else { - out << QObject::tr("Attachments:") << Qt::endl; + out << QObject::tr("Attachments:") << endl; // Iterate over the attachments and output their names and size line-by-line, indented. for (const QString& attachmentName : attachments->keys()) { // TODO: use QLocale::formattedDataSize when >= Qt 5.10 QString attachmentSize = Tools::humanReadableFileSize(attachments->value(attachmentName).size(), 1); - out << " " << attachmentName << " (" << attachmentSize << ")" << Qt::endl; + out << " " << attachmentName << " (" << attachmentSize << ")" << endl; } } } if (showTotp) { - out << entry->totp() << Qt::endl; + out << entry->totp() << endl; } return encounteredError ? EXIT_FAILURE : EXIT_SUCCESS; diff --git a/src/cli/Show.h b/src/cli/Show.h index ca00a815f..8af32937e 100644 --- a/src/cli/Show.h +++ b/src/cli/Show.h @@ -25,7 +25,7 @@ class Show : public DatabaseCommand public: Show(); - int executeWithDatabase(QSharedPointer db, QSharedPointer parser) override; + int executeWithDatabase(QSharedPointer db, QSharedPointer parser); static const QCommandLineOption TotpOption; static const QCommandLineOption AllAttributesOption; diff --git a/src/cli/Utils.cpp b/src/cli/Utils.cpp index ae4874c43..d8134de26 100644 --- a/src/cli/Utils.cpp +++ b/src/cli/Utils.cpp @@ -20,7 +20,6 @@ #include "core/Database.h" #include "core/Entry.h" #include "core/EntryAttributes.h" -#include "core/Global.h" #include "keys/FileKey.h" #ifdef WITH_XC_YUBIKEY #include "keys/ChallengeResponseKey.h" @@ -43,11 +42,6 @@ namespace Utils QTextStream STDIN; QTextStream DEVNULL; -#ifdef Q_OS_WIN - UINT origCodePage; - UINT origOutputCodePage; -#endif - void setDefaultTextStreams() { auto fd = new QFile(); @@ -71,9 +65,6 @@ namespace Utils DEVNULL.setDevice(fd); #ifdef Q_OS_WIN - origCodePage = GetConsoleCP(); - origOutputCodePage = GetConsoleOutputCP(); - // On Windows, we ask via keepassxc-cli.exe.manifest to use UTF-8, // but the console code-page isn't automatically changed to match. SetConsoleCP(GetACP()); @@ -81,14 +72,6 @@ namespace Utils #endif } - void resetTextStreams() - { -#ifdef Q_OS_WIN - SetConsoleCP(origCodePage); - SetConsoleOutputCP(origOutputCodePage); -#endif - } - void setStdinEcho(bool enable = true) { #ifdef Q_OS_WIN @@ -128,22 +111,22 @@ namespace Utils QFileInfo dbFileInfo(databaseFilename); if (dbFileInfo.canonicalFilePath().isEmpty()) { - err << QObject::tr("Failed to open database file %1: not found").arg(databaseFilename) << Qt::endl; + err << QObject::tr("Failed to open database file %1: not found").arg(databaseFilename) << endl; return {}; } if (!dbFileInfo.isFile()) { - err << QObject::tr("Failed to open database file %1: not a plain file").arg(databaseFilename) << Qt::endl; + err << QObject::tr("Failed to open database file %1: not a plain file").arg(databaseFilename) << endl; return {}; } if (!dbFileInfo.isReadable()) { - err << QObject::tr("Failed to open database file %1: not readable").arg(databaseFilename) << Qt::endl; + err << QObject::tr("Failed to open database file %1: not readable").arg(databaseFilename) << endl; return {}; } if (isPasswordProtected) { - err << QObject::tr("Enter password to unlock %1: ").arg(databaseFilename) << Qt::flush; + err << QObject::tr("Enter password to unlock %1: ").arg(databaseFilename) << flush; QString line = Utils::getPassword(quiet); auto passwordKey = QSharedPointer::create(); passwordKey->setPassword(line); @@ -155,7 +138,7 @@ namespace Utils QString errorMessage; // LCOV_EXCL_START if (!fileKey->load(keyFilename, &errorMessage)) { - err << QObject::tr("Failed to load key file %1: %2").arg(keyFilename, errorMessage) << Qt::endl; + err << QObject::tr("Failed to load key file %1: %2").arg(keyFilename, errorMessage) << endl; return {}; } @@ -163,7 +146,7 @@ namespace Utils err << QObject::tr("WARNING: You are using an old key file format which KeePassXC may\n" "stop supporting in the future.\n\n" "Please consider generating a new key file.") - << Qt::endl; + << endl; } // LCOV_EXCL_STOP @@ -180,20 +163,20 @@ namespace Utils slot = parts[0].toInt(&ok); if (!ok || (slot != 1 && slot != 2)) { - err << QObject::tr("Invalid YubiKey slot %1").arg(parts[0]) << Qt::endl; + err << QObject::tr("Invalid YubiKey slot %1").arg(parts[0]) << endl; return {}; } if (parts.size() > 1) { serial = parts[1].toUInt(&ok, 10); if (!ok) { - err << QObject::tr("Invalid YubiKey serial %1").arg(parts[1]) << Qt::endl; + err << QObject::tr("Invalid YubiKey serial %1").arg(parts[1]) << endl; return {}; } } QObject::connect(YubiKey::instance(), &YubiKey::userInteractionRequest, [&] { - err << QObject::tr("Please present or touch your YubiKey to continue.") << "\n\n" << Qt::flush; + err << QObject::tr("Please present or touch your YubiKey to continue.") << "\n\n" << flush; }); auto key = QSharedPointer(new ChallengeResponseKey({serial, slot})); @@ -210,7 +193,7 @@ namespace Utils if (db->open(databaseFilename, compositeKey, &error)) { return db; } else { - err << error << Qt::endl; + err << error << endl; return {}; } } @@ -226,7 +209,7 @@ namespace Utils #ifdef __AFL_COMPILER // Fuzz test build takes password from environment variable to // allow non-interactive operation - const auto env = getenv("KEEPASSXC_AFL_PASSWORD"); + const auto env = getenv("KEYPASSXC_AFL_PASSWORD"); return env ? env : ""; #else auto& in = STDIN; @@ -235,7 +218,7 @@ namespace Utils setStdinEcho(false); QString line = in.readLine(); setStdinEcho(true); - out << Qt::endl; + out << endl; return line; #endif // __AFL_COMPILER @@ -265,7 +248,7 @@ namespace Utils if (ans.toLower().startsWith("y")) { passwordKey = QSharedPointer::create(""); } - err << Qt::endl; + err << endl; } else { err << QObject::tr("Repeat password: "); err.flush(); @@ -274,7 +257,7 @@ namespace Utils if (password == repeat) { passwordKey = QSharedPointer::create(password); } else { - err << QObject::tr("Error: Passwords do not match.") << Qt::endl; + err << QObject::tr("Error: Passwords do not match.") << endl; } } @@ -320,7 +303,7 @@ namespace Utils QScopedPointer clipProcess(new QProcess(nullptr)); // Skip empty parts, otherwise the program may clip the empty string - QStringList progArgs = prog.second.split(" ", Qt::SkipEmptyParts); + QStringList progArgs = prog.second.split(" ", QString::SkipEmptyParts); clipProcess->start(prog.first, progArgs); clipProcess->waitForStarted(); @@ -346,8 +329,6 @@ namespace Utils if (clipProcess->exitCode() == EXIT_SUCCESS) { return EXIT_SUCCESS; - } else { - failedProgramNames.append(prog.first); } } @@ -403,7 +384,7 @@ namespace Utils if (fieldName == TagsFieldName) { return entry->tags(); } - return ""; + return QString(""); } QStringList findAttributes(const EntryAttributes& attributes, const QString& name) @@ -432,7 +413,7 @@ namespace Utils * * @param path Path to the key file to be loaded * @param fileKey Resulting fileKey - * @return true if the key file was loaded successfully + * @return true if the key file was loaded succesfully */ bool loadFileKey(const QString& path, QSharedPointer& fileKey) { @@ -444,13 +425,13 @@ namespace Utils fileKey->create(path, &error); if (!error.isEmpty()) { - err << QObject::tr("Creating KeyFile %1 failed: %2").arg(path, error) << Qt::endl; + 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) << Qt::endl; + err << QObject::tr("Loading KeyFile %1 failed: %2").arg(path, error) << endl; return false; } diff --git a/src/cli/Utils.h b/src/cli/Utils.h index 6a272fc62..84ddbbb4b 100644 --- a/src/cli/Utils.h +++ b/src/cli/Utils.h @@ -39,7 +39,6 @@ namespace Utils static const QStringList EntryFieldNames(QStringList() << UuidFieldName << TagsFieldName); void setDefaultTextStreams(); - void resetTextStreams(); void setStdinEcho(bool enable); bool loadFileKey(const QString& path, QSharedPointer& fileKey); diff --git a/src/cli/keepassxc-cli.cpp b/src/cli/keepassxc-cli.cpp index 2c4bd1aa2..120c70647 100644 --- a/src/cli/keepassxc-cli.cpp +++ b/src/cli/keepassxc-cli.cpp @@ -24,7 +24,6 @@ #include "Utils.h" #include "config-keepassx.h" #include "core/Bootstrap.h" -#include "core/Config.h" #include "core/Metadata.h" #include "core/Tools.h" #include "crypto/Crypto.h" @@ -154,7 +153,7 @@ int enterInteractiveMode(const QStringList& arguments) auto cmd = Commands::getCommand(args[0]); if (!cmd) { - err << QObject::tr("Unknown command %1").arg(args[0]) << Qt::endl; + err << QObject::tr("Unknown command %1").arg(args[0]) << endl; continue; } else if (cmd->name == "quit" || cmd->name == "exit") { break; @@ -181,10 +180,8 @@ int main(int argc, char** argv) QCoreApplication app(argc, argv); QCoreApplication::setApplicationVersion(KEEPASSXC_VERSION); - // Cleanup code pages after cli exits - QObject::connect(&app, &QCoreApplication::destroyed, &app, [] { Utils::resetTextStreams(); }); - Bootstrap::bootstrap(config()->get(Config::GUI_Language).toString()); + Bootstrap::bootstrap(); Utils::setDefaultTextStreams(); Commands::setupCommands(false); @@ -218,13 +215,11 @@ int main(int argc, char** argv) if (parser.positionalArguments().empty()) { if (parser.isSet("version")) { // Switch to parser.showVersion() when available (QT 5.4). - out << KEEPASSXC_VERSION << Qt::endl; + out << KEEPASSXC_VERSION << endl; return EXIT_SUCCESS; - } - - if (parser.isSet(debugInfoOption)) { + } else if (parser.isSet(debugInfoOption)) { QString debugInfo = Tools::debugInfo().append("\n").append(Crypto::debugInfo()); - out << debugInfo << Qt::endl; + out << debugInfo << endl; return EXIT_SUCCESS; } // showHelp exits the application immediately. @@ -238,7 +233,7 @@ int main(int argc, char** argv) auto command = Commands::getCommand(commandName); if (!command) { - err << QObject::tr("Invalid command %1.").arg(commandName) << Qt::endl; + err << QObject::tr("Invalid command %1.").arg(commandName) << endl; err << parser.helpText(); return EXIT_FAILURE; } diff --git a/src/config-keepassx.h.cmake b/src/config-keepassx.h.cmake index 1b45315f6..840ba0d5e 100644 --- a/src/config-keepassx.h.cmake +++ b/src/config-keepassx.h.cmake @@ -15,7 +15,6 @@ #cmakedefine WITH_XC_AUTOTYPE #cmakedefine WITH_XC_NETWORKING #cmakedefine WITH_XC_BROWSER -#cmakedefine WITH_XC_BROWSER_PASSKEYS #cmakedefine WITH_XC_YUBIKEY #cmakedefine WITH_XC_SSHAGENT #cmakedefine WITH_XC_KEESHARE diff --git a/src/core/Alloc.cpp b/src/core/Alloc.cpp index f9ec317cc..38ee8c182 100644 --- a/src/core/Alloc.cpp +++ b/src/core/Alloc.cpp @@ -25,7 +25,7 @@ #elif defined(HAVE_MALLOC_H) #include #else -#include +#include #endif #if defined(NDEBUG) && !defined(__cpp_sized_deallocation) diff --git a/src/core/AsyncTask.h b/src/core/AsyncTask.h index da7734c27..c12360231 100644 --- a/src/core/AsyncTask.h +++ b/src/core/AsyncTask.h @@ -61,7 +61,7 @@ namespace AsyncTask * * @param task std::function object to run * @param context QObject responsible for calling this function - * @param callback std::function object to run after the task completes + * @param callback std::function object to run after the task completess */ template void runThenCallback(FunctionObject task, QObject* context, FunctionObject2 callback) diff --git a/src/core/Base32.cpp b/src/core/Base32.cpp index d0a148eec..05841121a 100644 --- a/src/core/Base32.cpp +++ b/src/core/Base32.cpp @@ -50,7 +50,7 @@ QVariant Base32::decode(const QByteArray& encodedData) } if (encodedData.size() % 8 != 0) { - return {}; + return QVariant(); } int nPads = 0; @@ -119,7 +119,7 @@ QVariant Base32::decode(const QByteArray& encodedData) continue; } else { // illegal character - return {}; + return QVariant(); } } } @@ -145,7 +145,7 @@ QVariant Base32::decode(const QByteArray& encodedData) QByteArray Base32::encode(const QByteArray& data) { if (data.size() < 1) { - return {}; + return QByteArray(); } const int nBits = data.size() * 8; diff --git a/src/core/Bootstrap.cpp b/src/core/Bootstrap.cpp index 061cba136..aa359a29b 100644 --- a/src/core/Bootstrap.cpp +++ b/src/core/Bootstrap.cpp @@ -63,7 +63,7 @@ namespace Bootstrap * Perform early application bootstrapping that does not rely on a QApplication * being present. */ - void bootstrap(const QString& uiLanguage) + void bootstrap() { #ifdef QT_NO_DEBUG disableCoreDumps(); @@ -72,7 +72,7 @@ namespace Bootstrap setupSearchPaths(); applyEarlyQNetworkAccessManagerWorkaround(); - Translator::installTranslators(uiLanguage); + Translator::installTranslators(); } // LCOV_EXCL_START @@ -129,8 +129,6 @@ namespace Bootstrap DWORD cbBufferSize = 0; PSID pLocalSystemSid = nullptr; DWORD pLocalSystemSidSize = SECURITY_MAX_SID_SIZE; - PSID pOwnerRightsSid = nullptr; - DWORD pOwnerRightsSidSize = SECURITY_MAX_SID_SIZE; // Access control list PACL pACL = nullptr; @@ -167,21 +165,9 @@ namespace Bootstrap goto Cleanup; } - // Retrieve CreatorOwnerRights SID - pOwnerRightsSid = static_cast(HeapAlloc(GetProcessHeap(), 0, pOwnerRightsSidSize)); - if (pOwnerRightsSid == nullptr) { - goto Cleanup; - } - - if (!CreateWellKnownSid(WinCreatorOwnerRightsSid, nullptr, pOwnerRightsSid, &pOwnerRightsSidSize)) { - auto error = GetLastError(); - 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) + sizeof(ACCESS_ALLOWED_ACE) - + GetLengthSid(pOwnerRightsSid); + + sizeof(ACCESS_ALLOWED_ACE) + GetLengthSid(pLocalSystemSid); // Create and initialize an ACL pACL = static_cast(HeapAlloc(GetProcessHeap(), 0, cbACL)); @@ -203,11 +189,6 @@ namespace Bootstrap goto Cleanup; } - // Explicitly set "Process Owner" rights to Read Only. The default is Full Control. - if (!AddAccessAllowedAce(pACL, ACL_REVISION, READ_CONTROL, pOwnerRightsSid)) { - goto Cleanup; - } - #ifdef WITH_XC_SSHAGENT // OpenSSH for Windows ssh-agent service is running as LocalSystem if (!AddAccessAllowedAce(pACL, @@ -232,19 +213,16 @@ namespace Bootstrap Cleanup: - if (pACL) { + if (pACL != nullptr) { HeapFree(GetProcessHeap(), 0, pACL); } - if (pLocalSystemSid) { + if (pLocalSystemSid != nullptr) { HeapFree(GetProcessHeap(), 0, pLocalSystemSid); } - if (pOwnerRightsSid) { - HeapFree(GetProcessHeap(), 0, pOwnerRightsSid); - } - if (pTokenUser) { + if (pTokenUser != nullptr) { HeapFree(GetProcessHeap(), 0, pTokenUser); } - if (hToken) { + if (hToken != nullptr) { CloseHandle(hToken); } #endif diff --git a/src/core/Bootstrap.h b/src/core/Bootstrap.h index bd2006cbb..9ec0c5dc8 100644 --- a/src/core/Bootstrap.h +++ b/src/core/Bootstrap.h @@ -18,11 +18,9 @@ #ifndef KEEPASSXC_BOOTSTRAP_H #define KEEPASSXC_BOOTSTRAP_H -#include - namespace Bootstrap { - void bootstrap(const QString& uiLanguage = "system"); + void bootstrap(); void disableCoreDumps(); bool createWindowsDACL(); void setupSearchPaths(); diff --git a/src/core/Clock.cpp b/src/core/Clock.cpp index f501daee7..5704d4bff 100644 --- a/src/core/Clock.cpp +++ b/src/core/Clock.cpp @@ -16,8 +16,6 @@ */ #include "Clock.h" -#include - QSharedPointer Clock::m_instance; QDateTime Clock::currentDateTimeUtc() @@ -52,12 +50,12 @@ QDateTime Clock::serialized(const QDateTime& dateTime) QDateTime Clock::datetimeUtc(int year, int month, int day, int hour, int min, int second) { - return {QDate(year, month, day), QTime(hour, min, second), Qt::UTC}; + 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 {QDate(year, month, day), QTime(hour, min, second), Qt::LocalTime}; + return QDateTime(QDate(year, month, day), QTime(hour, min, second), Qt::LocalTime); } QDateTime Clock::datetimeUtc(qint64 msecSinceEpoch) @@ -80,15 +78,13 @@ QDateTime Clock::parse(const QString& text, const QString& format) return QDateTime::fromString(text, format); } -QString Clock::toString(const QDateTime& dateTime) +Clock::~Clock() { - static QLocale locale; - return locale.toString(dateTime, QLocale::ShortFormat); } -Clock::~Clock() = default; - -Clock::Clock() = default; +Clock::Clock() +{ +} QDateTime Clock::currentDateTimeUtcImpl() const { diff --git a/src/core/Clock.h b/src/core/Clock.h index ca2577e91..4d1ee2537 100644 --- a/src/core/Clock.h +++ b/src/core/Clock.h @@ -41,8 +41,6 @@ public: static QDateTime parse(const QString& text, Qt::DateFormat format = Qt::TextDate); static QDateTime parse(const QString& text, const QString& format); - static QString toString(const QDateTime& dateTime); - virtual ~Clock(); protected: diff --git a/src/core/Config.cpp b/src/core/Config.cpp index f1a78830d..ba7cccfd2 100644 --- a/src/core/Config.cpp +++ b/src/core/Config.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2024 KeePassXC Team + * Copyright (C) 2020 KeePassXC Team * Copyright (C) 2011 Felix Geyer * * This program is free software: you can redistribute it and/or modify @@ -66,7 +66,6 @@ static const QHash configStrings = { {Config::UseDirectWriteSaves,{QS("UseDirectWriteSaves"), Local, false}}, {Config::SearchLimitGroup,{QS("SearchLimitGroup"), Roaming, false}}, {Config::MinimizeOnOpenUrl,{QS("MinimizeOnOpenUrl"), Roaming, false}}, - {Config::OpenURLOnDoubleClick, {QS("OpenURLOnDoubleClick"), Roaming, true}}, {Config::HideWindowOnCopy,{QS("HideWindowOnCopy"), Roaming, false}}, {Config::MinimizeOnCopy,{QS("MinimizeOnCopy"), Roaming, true}}, {Config::MinimizeAfterUnlock,{QS("MinimizeAfterUnlock"), Roaming, false}}, @@ -77,8 +76,6 @@ static const QHash configStrings = { {Config::AutoTypeDelay,{QS("AutoTypeDelay"), Roaming, 25}}, {Config::AutoTypeStartDelay,{QS("AutoTypeStartDelay"), Roaming, 500}}, {Config::AutoTypeHideExpiredEntry,{QS("AutoTypeHideExpiredEntry"), Roaming, false}}, - {Config::AutoTypeDialogSortColumn,{QS("AutoTypeDialogSortColumn"), Roaming, 0}}, - {Config::AutoTypeDialogSortOrder,{QS("AutoTypeDialogSortOrder"), Roaming, Qt::AscendingOrder}}, {Config::GlobalAutoTypeKey,{QS("GlobalAutoTypeKey"), Roaming, 0}}, {Config::GlobalAutoTypeModifiers,{QS("GlobalAutoTypeModifiers"), Roaming, 0}}, {Config::GlobalAutoTypeRetypeTime,{QS("GlobalAutoTypeRetypeTime"), Roaming, 15}}, @@ -95,14 +92,11 @@ static const QHash configStrings = { // GUI {Config::GUI_Language, {QS("GUI/Language"), Roaming, QS("system")}}, - {Config::GUI_HideMenubar, {QS("GUI/HideMenubar"), Roaming, false}}, {Config::GUI_HideToolbar, {QS("GUI/HideToolbar"), Roaming, false}}, {Config::GUI_MovableToolbar, {QS("GUI/MovableToolbar"), Roaming, false}}, - {Config::GUI_HideGroupPanel, {QS("GUI/HideGroupPanel"), Roaming, false}}, {Config::GUI_HidePreviewPanel, {QS("GUI/HidePreviewPanel"), Roaming, false}}, {Config::GUI_AlwaysOnTop, {QS("GUI/GUI_AlwaysOnTop"), Local, false}}, {Config::GUI_ToolButtonStyle, {QS("GUI/ToolButtonStyle"), Roaming, Qt::ToolButtonIconOnly}}, - {Config::GUI_LaunchAtStartup, {QS("GUI/LaunchAtStartup"), Roaming, false}}, {Config::GUI_ShowTrayIcon, {QS("GUI/ShowTrayIcon"), Roaming, false}}, {Config::GUI_TrayIconAppearance, {QS("GUI/TrayIconAppearance"), Roaming, {}}}, {Config::GUI_MinimizeToTray, {QS("GUI/MinimizeToTray"), Roaming, false}}, @@ -110,6 +104,7 @@ static const QHash configStrings = { {Config::GUI_MinimizeOnClose, {QS("GUI/MinimizeOnClose"), Roaming, false}}, {Config::GUI_HideUsernames, {QS("GUI/HideUsernames"), Roaming, false}}, {Config::GUI_HidePasswords, {QS("GUI/HidePasswords"), Roaming, true}}, + {Config::GUI_AdvancedSettings, {QS("GUI/AdvancedSettings"), Roaming, false}}, {Config::GUI_ColorPasswords, {QS("GUI/ColorPasswords"), Roaming, false}}, {Config::GUI_MonospaceNotes, {QS("GUI/MonospaceNotes"), Roaming, false}}, {Config::GUI_ApplicationTheme, {QS("GUI/ApplicationTheme"), Roaming, QS("auto")}}, @@ -119,7 +114,6 @@ static const QHash configStrings = { {Config::GUI_CheckForUpdatesIncludeBetas, {QS("GUI/CheckForUpdatesIncludeBetas"), Roaming, false}}, {Config::GUI_ShowExpiredEntriesOnDatabaseUnlock, {QS("GUI/ShowExpiredEntriesOnDatabaseUnlock"), Roaming, true}}, {Config::GUI_ShowExpiredEntriesOnDatabaseUnlockOffsetDays, {QS("GUI/ShowExpiredEntriesOnDatabaseUnlockOffsetDays"), Roaming, 3}}, - {Config::GUI_FontSizeOffset, {QS("GUI/FontSizeOffset"), Local, 0}}, {Config::GUI_MainWindowGeometry, {QS("GUI/MainWindowGeometry"), Local, {}}}, {Config::GUI_MainWindowState, {QS("GUI/MainWindowState"), Local, {}}}, @@ -140,8 +134,8 @@ static const QHash configStrings = { {Config::Security_LockDatabaseIdleSeconds, {QS("Security/LockDatabaseIdleSeconds"), Roaming, 240}}, {Config::Security_LockDatabaseMinimize, {QS("Security/LockDatabaseMinimize"), Roaming, false}}, {Config::Security_LockDatabaseScreenLock, {QS("Security/LockDatabaseScreenLock"), Roaming, true}}, - {Config::Security_LockDatabaseOnUserSwitch, {QS("Security/LockDatabaseOnUserSwitch"), Roaming, true}}, {Config::Security_RelockAutoType, {QS("Security/RelockAutoType"), Roaming, false}}, + {Config::Security_PasswordsRepeatVisible, {QS("Security/PasswordsRepeatVisible"), Roaming, true}}, {Config::Security_PasswordsHidden, {QS("Security/PasswordsHidden"), Roaming, true}}, {Config::Security_PasswordEmptyPlaceholder, {QS("Security/PasswordEmptyPlaceholder"), Roaming, false}}, {Config::Security_HidePasswordPreviewPanel, {QS("Security/HidePasswordPreviewPanel"), Roaming, true}}, @@ -151,7 +145,6 @@ static const QHash configStrings = { {Config::Security_NoConfirmMoveEntryToRecycleBin,{QS("Security/NoConfirmMoveEntryToRecycleBin"), Roaming, true}}, {Config::Security_EnableCopyOnDoubleClick,{QS("Security/EnableCopyOnDoubleClick"), Roaming, false}}, {Config::Security_QuickUnlock, {QS("Security/QuickUnlock"), Local, true}}, - {Config::Security_DatabasePasswordMinimumQuality, {QS("Security/DatabasePasswordMinimumQuality"), Local, 0}}, // Browser {Config::Browser_Enabled, {QS("Browser/Enabled"), Roaming, false}}, @@ -163,7 +156,6 @@ static const QHash configStrings = { {Config::Browser_UseCustomProxy, {QS("Browser/UseCustomProxy"), Roaming, false}}, {Config::Browser_CustomProxyLocation, {QS("Browser/CustomProxyLocation"), Roaming, {}}}, {Config::Browser_UpdateBinaryPath, {QS("Browser/UpdateBinaryPath"), Roaming, true}}, - {Config::Browser_AllowGetDatabaseEntriesRequest, {QS("Browser/AllowGetDatabaseEntriesRequest"), Roaming, false}}, {Config::Browser_AllowExpiredCredentials, {QS("Browser/AllowExpiredCredentials"), Roaming, false}}, {Config::Browser_AlwaysAllowAccess, {QS("Browser/AlwaysAllowAccess"), Roaming, false}}, {Config::Browser_AlwaysAllowUpdate, {QS("Browser/AlwaysAllowUpdate"), Roaming, false}}, @@ -174,7 +166,6 @@ static const QHash configStrings = { {Config::Browser_UseCustomBrowser, {QS("Browser/UseCustomBrowser"), Local, false}}, {Config::Browser_CustomBrowserType, {QS("Browser/CustomBrowserType"), Local, -1}}, {Config::Browser_CustomBrowserLocation, {QS("Browser/CustomBrowserLocation"), Local, {}}}, - {Config::Browser_AllowLocalhostWithPasskeys, {QS("Browser/Browser_AllowLocalhostWithPasskeys"), Roaming, false}}, #ifdef QT_DEBUG {Config::Browser_CustomExtensionId, {QS("Browser/CustomExtensionId"), Local, {}}}, #endif @@ -225,6 +216,7 @@ static const QHash configStrings = { // Messages {Config::Messages_NoLegacyKeyFileWarning, {QS("Messages/NoLegacyKeyFileWarning"), Roaming, false}}, + {Config::Messages_Qt55CompatibilityWarning, {QS("Messages/Qt55CompatibilityWarning"), Local, false}}, {Config::Messages_HidePreReleaseWarning, {QS("Messages/HidePreReleaseWarning"), Local, {}}}}; // clang-format on @@ -307,45 +299,6 @@ void Config::resetToDefaults() } } -bool Config::importSettings(const QString& fileName) -{ - // Ensure file is valid ini with values - QSettings settings(fileName, QSettings::IniFormat); - if (settings.status() != QSettings::NoError || settings.allKeys().isEmpty()) { - return false; - } - - // Only import valid roaming settings - auto isValidSetting = [](const QString& key) { - for (const auto& value : configStrings.values()) { - if (value.type == ConfigType::Roaming && value.name == key) { - return true; - } - } - return false; - }; - - // Clear existing settings and set valid items - m_settings->clear(); - for (const auto& key : settings.allKeys()) { - if (isValidSetting(key)) { - m_settings->setValue(key, settings.value(key)); - } - } - - sync(); - - return true; -} - -void Config::exportSettings(const QString& fileName) const -{ - QSettings settings(fileName, QSettings::IniFormat); - for (const auto& key : m_settings->allKeys()) { - settings.setValue(key, m_settings->value(key)); - } -} - /** * Map of configuration file settings that are either deprecated, or have * had their name changed to their new config enum values. @@ -374,7 +327,7 @@ static const QHash deprecationMap = { {QS("security/passwordscleartext"), Config::Security_PasswordsHidden}, {QS("security/passwordemptynodots"), Config::Security_PasswordEmptyPlaceholder}, {QS("security/HidePasswordPreviewPanel"), Config::Security_HidePasswordPreviewPanel}, - {QS("security/passwordsrepeat"), Config::Deleted}, + {QS("security/passwordsrepeat"), Config::Security_PasswordsRepeatVisible}, {QS("security/hidenotes"), Config::Security_HideNotes}, {QS("KeeShare/Settings.own"), Config::KeeShare_Own}, {QS("KeeShare/Settings.foreign"), Config::KeeShare_Foreign}, @@ -404,7 +357,7 @@ static const QHash deprecationMap = { {QS("generator/WordList"), Config::PasswordGenerator_WordList}, {QS("generator/WordCase"), Config::PasswordGenerator_WordCase}, {QS("generator/Type"), Config::PasswordGenerator_Type}, - {QS("QtErrorMessageShown"), Config::Deleted}, + {QS("QtErrorMessageShown"), Config::Messages_Qt55CompatibilityWarning}, {QS("GUI/HidePasswords"), Config::Deleted}, {QS("GUI/DarkTrayIcon"), Config::Deleted}, @@ -417,11 +370,7 @@ static const QHash deprecationMap = { {QS("UseTouchID"), Config::Deleted}, {QS("Security/ResetTouchId"), Config::Deleted}, {QS("Security/ResetTouchIdTimeout"), Config::Deleted}, - {QS("Security/ResetTouchIdScreenlock"), Config::Deleted}, - - // 2.8.0 - {QS("GUI/AdvancedSettings"), Config::Deleted}, - {QS("Security/PasswordsRepeatVisible"), Config::Deleted}}; + {QS("Security/ResetTouchIdScreenlock"), Config::Deleted}}; /** * Migrate settings from previous versions. @@ -506,7 +455,9 @@ Config::Config(QObject* parent) init(configFiles.first, configFiles.second); } -Config::~Config() = default; +Config::~Config() +{ +} void Config::init(const QString& configFileName, const QString& localConfigFileName) { @@ -520,28 +471,6 @@ void Config::init(const QString& configFileName, const QString& localConfigFileN QDir().rmdir(QFileInfo(localConfigFileName).absolutePath()); } -#if defined(Q_OS_LINUX) - // Upgrade from previous KeePassXC version which stores its config - // in ~/.cache on Linux instead of ~/.local/state. - // Move file to correct location before continuing. - if (!QFile::exists(localConfigFileName)) { - QString oldLocalConfigPath = - QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation) + "/keepassxc"; - QString suffix; -#ifdef QT_DEBUG - suffix = "_debug"; -#endif - oldLocalConfigPath += QString("/keepassxc%1.ini").arg(suffix); - oldLocalConfigPath = QDir::toNativeSeparators(oldLocalConfigPath); - if (QFile::exists(oldLocalConfigPath)) { - QDir().mkpath(QFileInfo(localConfigFileName).absolutePath()); - QFile::copy(oldLocalConfigPath, localConfigFileName); - QFile::remove(oldLocalConfigPath); - QDir().rmdir(QFileInfo(oldLocalConfigPath).absolutePath()); - } - } -#endif - m_settings.reset(new QSettings(configFileName, QSettings::IniFormat)); if (!localConfigFileName.isEmpty() && configFileName != localConfigFileName) { m_localSettings.reset(new QSettings(localConfigFileName, QSettings::IniFormat)); @@ -554,8 +483,20 @@ void Config::init(const QString& configFileName, const QString& localConfigFileN QPair Config::defaultConfigFiles() { // Check if we are running in portable mode, if so store the config files local to the app - if (isPortable()) { - return {portableConfigDir().append("/keepassxc.ini"), portableConfigDir().append("/keepassxc_local.ini")}; +#ifdef Q_OS_WIN + // Enable QFileInfo::isWritable check on Windows + extern Q_CORE_EXPORT int qt_ntfs_permission_lookup; + qt_ntfs_permission_lookup++; +#endif + auto portablePath = QCoreApplication::applicationDirPath().append("/%1"); + auto portableFile = portablePath.arg(".portable"); + bool isPortable = QFile::exists(portableFile) && QFileInfo(portableFile).isWritable(); +#ifdef Q_OS_WIN + qt_ntfs_permission_lookup--; +#endif + + if (isPortable) { + return {portablePath.arg("config/keepassxc.ini"), portablePath.arg("config/keepassxc_local.ini")}; } QString configPath; @@ -570,16 +511,7 @@ QPair Config::defaultConfigFiles() #else // On case-sensitive Operating Systems, force use of lowercase app directories configPath = QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation) + "/keepassxc"; - // Qt does not support XDG_STATE_HOME yet, change this once XDG_STATE_HOME is added - QString xdgStateHome = QFile::decodeName(qgetenv("XDG_STATE_HOME")); - if (!xdgStateHome.startsWith(u'/')) { - xdgStateHome.clear(); // spec says relative paths should be ignored - } - if (xdgStateHome.isEmpty()) { - xdgStateHome = QDir::homePath() + "/.local/state"; - } - - localConfigPath = xdgStateHome + "/keepassxc"; + localConfigPath = QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation) + "/keepassxc"; #endif QString suffix; @@ -619,49 +551,17 @@ void Config::createConfigFromFile(const QString& configFileName, const QString& qApp); } -bool Config::isPortable() +void Config::createTempFileInstance() { -#ifdef Q_OS_WIN - // Enable QFileInfo::isWritable check on Windows - extern Q_CORE_EXPORT int qt_ntfs_permission_lookup; - qt_ntfs_permission_lookup++; -#endif - auto portablePath = QCoreApplication::applicationDirPath().append("/%1"); - auto portableFile = portablePath.arg(".portable"); - auto isPortable = QFile::exists(portableFile) && QFileInfo(portableFile).isWritable(); -#ifdef Q_OS_WIN - qt_ntfs_permission_lookup--; -#endif - return isPortable; -} - -QString Config::portableConfigDir() -{ - return QCoreApplication::applicationDirPath().append("/config"); -} - -QList Config::getShortcuts() const -{ - m_settings->beginGroup("Shortcuts"); - const auto keys = m_settings->childKeys(); - QList ret; - ret.reserve(keys.size()); - for (const auto& key : keys) { - const auto shortcut = m_settings->value(key).toString(); - ret.push_back(ShortcutEntry{key, shortcut}); + if (m_instance) { + delete m_instance; } - m_settings->endGroup(); - return ret; -} - -void Config::setShortcuts(const QList& shortcuts) -{ - m_settings->beginGroup("Shortcuts"); - m_settings->remove(""); // clear previous - for (const auto& shortcutEntry : shortcuts) { - m_settings->setValue(shortcutEntry.name, shortcutEntry.shortcut); - } - m_settings->endGroup(); + auto* tmpFile = new QTemporaryFile(); + bool openResult = tmpFile->open(); + Q_ASSERT(openResult); + Q_UNUSED(openResult); + m_instance = new Config(tmpFile->fileName(), "", qApp); + tmpFile->setParent(m_instance); } #undef QS diff --git a/src/core/Config.h b/src/core/Config.h index 5678bbc6e..344e5bae7 100644 --- a/src/core/Config.h +++ b/src/core/Config.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2024 KeePassXC Team + * Copyright (C) 2020 KeePassXC Team * Copyright (C) 2011 Felix Geyer * * This program is free software: you can redistribute it and/or modify @@ -21,7 +21,6 @@ #include #include -#include class QSettings; @@ -49,7 +48,6 @@ public: UseDirectWriteSaves, SearchLimitGroup, MinimizeOnOpenUrl, - OpenURLOnDoubleClick, HideWindowOnCopy, MinimizeOnCopy, MinimizeAfterUnlock, @@ -60,8 +58,6 @@ public: AutoTypeDelay, AutoTypeStartDelay, AutoTypeHideExpiredEntry, - AutoTypeDialogSortColumn, - AutoTypeDialogSortOrder, GlobalAutoTypeKey, GlobalAutoTypeModifiers, GlobalAutoTypeRetypeTime, @@ -77,14 +73,11 @@ public: LastDir, GUI_Language, - GUI_HideMenubar, GUI_HideToolbar, GUI_MovableToolbar, - GUI_HideGroupPanel, GUI_HidePreviewPanel, GUI_AlwaysOnTop, GUI_ToolButtonStyle, - GUI_LaunchAtStartup, GUI_ShowTrayIcon, GUI_TrayIconAppearance, GUI_MinimizeToTray, @@ -92,16 +85,15 @@ public: GUI_MinimizeOnClose, GUI_HideUsernames, GUI_HidePasswords, + GUI_AdvancedSettings, GUI_ColorPasswords, GUI_MonospaceNotes, GUI_ApplicationTheme, GUI_CompactMode, GUI_CheckForUpdates, GUI_CheckForUpdatesIncludeBetas, - SearchWaitForEnter, GUI_ShowExpiredEntriesOnDatabaseUnlock, GUI_ShowExpiredEntriesOnDatabaseUnlockOffsetDays, - GUI_FontSizeOffset, GUI_MainWindowGeometry, GUI_MainWindowState, @@ -122,8 +114,8 @@ public: Security_LockDatabaseIdleSeconds, Security_LockDatabaseMinimize, Security_LockDatabaseScreenLock, - Security_LockDatabaseOnUserSwitch, Security_RelockAutoType, + Security_PasswordsRepeatVisible, Security_PasswordsHidden, Security_PasswordEmptyPlaceholder, Security_HidePasswordPreviewPanel, @@ -133,7 +125,6 @@ public: Security_NoConfirmMoveEntryToRecycleBin, Security_EnableCopyOnDoubleClick, Security_QuickUnlock, - Security_DatabasePasswordMinimumQuality, Browser_Enabled, Browser_ShowNotification, @@ -144,7 +135,6 @@ public: Browser_UseCustomProxy, Browser_CustomProxyLocation, Browser_UpdateBinaryPath, - Browser_AllowGetDatabaseEntriesRequest, Browser_AllowExpiredCredentials, Browser_AlwaysAllowAccess, Browser_AlwaysAllowUpdate, @@ -155,7 +145,6 @@ public: Browser_UseCustomBrowser, Browser_CustomBrowserType, Browser_CustomBrowserLocation, - Browser_AllowLocalhostWithPasskeys, #ifdef QT_DEBUG Browser_CustomExtensionId, #endif @@ -201,18 +190,13 @@ public: PasswordGenerator_Type, Messages_NoLegacyKeyFileWarning, + Messages_Qt55CompatibilityWarning, Messages_HidePreReleaseWarning, // Special internal value Deleted }; - struct ShortcutEntry - { - QString name; - QString shortcut; - }; - ~Config() override; QVariant get(ConfigKey key); QVariant getDefault(ConfigKey key); @@ -223,16 +207,9 @@ public: void sync(); void resetToDefaults(); - bool importSettings(const QString& fileName); - void exportSettings(const QString& fileName) const; - - QList getShortcuts() const; - void setShortcuts(const QList& shortcuts); - static Config* instance(); static void createConfigFromFile(const QString& configFileName, const QString& localConfigFileName = {}); - static bool isPortable(); - static QString portableConfigDir(); + static void createTempFileInstance(); signals: void changed(ConfigKey key); diff --git a/src/core/CustomData.cpp b/src/core/CustomData.cpp index 3c734e65f..a9c5bcd3b 100644 --- a/src/core/CustomData.cpp +++ b/src/core/CustomData.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2024 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 @@ -21,12 +21,10 @@ #include "core/Global.h" const QString CustomData::LastModified = QStringLiteral("_LAST_MODIFIED"); -const QString CustomData::Created = QStringLiteral("_CREATED_"); +const QString CustomData::Created = QStringLiteral("_CREATED"); const QString CustomData::BrowserKeyPrefix = QStringLiteral("KPXC_BROWSER_"); +const QString CustomData::BrowserLegacyKeyPrefix = QStringLiteral("Public Key: "); const QString CustomData::ExcludeFromReportsLegacy = QStringLiteral("KnownBad"); -const QString CustomData::FdoSecretsExposedGroup = QStringLiteral("FDO_SECRETS_EXPOSED_GROUP"); -const QString CustomData::RandomSlug = QStringLiteral("KPXC_RANDOM_SLUG"); -const QString CustomData::RemoteProgramSettings = QStringLiteral("KPXC_REMOTE_SYNC_SETTINGS"); // Fallback item for return by reference static const CustomData::CustomDataItem NULL_ITEM{}; @@ -51,15 +49,6 @@ QString CustomData::value(const QString& key) const return m_data.value(key).value; } -QString CustomData::getKeyWithPrefix(const QString& prefix, const QString& key) -{ - QString keyWithPrefix; - keyWithPrefix.reserve(prefix.length() + key.length()); - keyWithPrefix.append(prefix); - keyWithPrefix.append(key); - return keyWithPrefix; -} - const CustomData::CustomDataItem& CustomData::item(const QString& key) const { auto item = m_data.find(key); @@ -199,13 +188,7 @@ void CustomData::updateLastModified(QDateTime lastModified) bool CustomData::isProtected(const QString& key) const { - return key.startsWith(BrowserKeyPrefix) || key == Created || key == FdoSecretsExposedGroup - || key == CustomData::RemoteProgramSettings; -} - -bool CustomData::isAutoGenerated(const QString& key) const -{ - return key == LastModified || key == RandomSlug; + return key.startsWith(CustomData::BrowserKeyPrefix) || key.startsWith(CustomData::Created); } bool CustomData::operator==(const CustomData& other) const diff --git a/src/core/CustomData.h b/src/core/CustomData.h index 3ee4d05ef..f67fc61db 100644 --- a/src/core/CustomData.h +++ b/src/core/CustomData.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2024 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 @@ -51,7 +51,6 @@ public: QDateTime lastModified() const; QDateTime lastModified(const QString& key) const; bool isProtected(const QString& key) const; - bool isAutoGenerated(const QString& key) const; void set(const QString& key, CustomDataItem item); void set(const QString& key, const QString& value, const QDateTime& lastModified = {}); void remove(const QString& key); @@ -64,15 +63,11 @@ public: bool operator==(const CustomData& other) const; bool operator!=(const CustomData& other) const; - static QString getKeyWithPrefix(const QString& prefix, const QString& key); - // Pre-defined keys static const QString LastModified; static const QString Created; static const QString BrowserKeyPrefix; - static const QString FdoSecretsExposedGroup; - static const QString RandomSlug; - static const QString RemoteProgramSettings; + static const QString BrowserLegacyKeyPrefix; // Pre-KDBX 4.1 static const QString ExcludeFromReportsLegacy; diff --git a/src/core/Database.cpp b/src/core/Database.cpp index 95f4f1e15..c42419536 100644 --- a/src/core/Database.cpp +++ b/src/core/Database.cpp @@ -21,11 +21,9 @@ #include "core/AsyncTask.h" #include "core/FileWatcher.h" #include "core/Group.h" -#include "crypto/Random.h" #include "format/KdbxXmlReader.h" #include "format/KeePass2Reader.h" #include "format/KeePass2Writer.h" -#include "streams/HashingStream.h" #include #include @@ -34,10 +32,6 @@ #include #include -#ifdef Q_OS_WIN -#include -#endif - QHash> Database::s_uuidMap; Database::Database() @@ -63,8 +57,8 @@ Database::Database() updateTagList(); }); connect(this, &Database::modified, this, [this] { updateTagList(); }); - connect(this, &Database::databaseSaved, this, [this] { updateCommonUsernames(); }); - connect(m_fileWatcher, &FileWatcher::fileChanged, this, [this] { emit databaseFileChanged(false); }); + connect(this, &Database::databaseSaved, this, [this]() { updateCommonUsernames(); }); + connect(m_fileWatcher, &FileWatcher::fileChanged, this, &Database::databaseFileChanged); // static uuid map s_uuidMap.insert(m_uuid, this); @@ -72,9 +66,9 @@ Database::Database() // block modified signal and set root group setEmitModified(false); - // Note: oldGroup is nullptr but need to respect return value capture - auto oldGroup = setRootGroup(new Group()); - Q_UNUSED(oldGroup) + setRootGroup(new Group()); + rootGroup()->setUuid(QUuid::createUuid()); + rootGroup()->setName(tr("Passwords", "Root group name")); m_modified = false; setEmitModified(true); @@ -107,6 +101,10 @@ QUuid Database::uuid() const */ bool Database::open(QSharedPointer key, QString* error) { + Q_ASSERT(!m_data.filePath.isEmpty()); + if (m_data.filePath.isEmpty()) { + return false; + } return open(m_data.filePath, std::move(key), error); } @@ -115,8 +113,6 @@ bool Database::open(QSharedPointer key, QString* error) * 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. * - * If key is provided as null, only headers will be read. - * * @param filePath path to the file * @param key composite key for unlocking the database * @param error error message in case of failure @@ -124,13 +120,6 @@ bool Database::open(QSharedPointer key, QString* error) */ bool Database::open(const QString& filePath, QSharedPointer key, QString* error) { - if (filePath.isEmpty()) { - if (error) { - *error = tr("No file path was provided."); - } - return false; - } - QFile dbFile(filePath); if (!dbFile.exists()) { if (error) { @@ -155,20 +144,6 @@ bool Database::open(const QString& filePath, QSharedPointer setEmitModified(false); - // update the hash of the first block - m_fileBlockHash.clear(); - auto fileBlockData = dbFile.peek(kFileBlockToHashSizeBytes); - if (fileBlockData.size() != kFileBlockToHashSizeBytes) { - if (dbFile.size() >= kFileBlockToHashSizeBytes) { - if (error) { - *error = tr("Database file read error."); - } - return false; - } - } else { - m_fileBlockHash = QCryptographicHash::hash(fileBlockData, QCryptographicHash::Md5); - } - KeePass2Reader reader; if (!reader.readDatabase(&dbFile, std::move(key), this)) { if (error) { @@ -278,54 +253,26 @@ bool Database::saveAs(const QString& filePath, SaveAction action, const QString& return false; } - // Make sure we don't overwrite external modifications unless explicitly allowed - if (!m_ignoreFileChangesUntilSaved && !m_fileBlockHash.isEmpty() && filePath == m_data.filePath) { - QFile dbFile(filePath); - if (dbFile.exists()) { - if (!dbFile.open(QIODevice::ReadOnly)) { - if (error) { - *error = tr("Unable to open file %1.").arg(filePath); - } - return false; - } - auto fileBlockData = dbFile.read(kFileBlockToHashSizeBytes); - if (fileBlockData.size() == kFileBlockToHashSizeBytes) { - auto hash = QCryptographicHash::hash(fileBlockData, QCryptographicHash::Md5); - if (m_fileBlockHash != hash) { - if (error) { - *error = tr("Database file has unmerged changes."); - } - // emit the databaseFileChanged(true) signal async - QMetaObject::invokeMethod(this, "databaseFileChanged", Qt::QueuedConnection, Q_ARG(bool, true)); - return false; - } - } else if (dbFile.size() >= kFileBlockToHashSizeBytes) { - if (error) { - *error = tr("Database file read error."); - } - return false; + if (filePath == m_data.filePath) { + // Fail-safe check to make sure we don't overwrite underlying file changes + // that have not yet triggered a file reload/merge operation. + if (!m_fileWatcher->hasSameFileChecksum()) { + if (error) { + *error = tr("Database file has unmerged changes."); } + return false; } } // Clear read-only flag m_fileWatcher->stop(); - // Add random data to prevent side-channel data deduplication attacks - int length = Random::instance()->randomUIntRange(64, 512); - m_metadata->customData()->set(CustomData::RandomSlug, Random::instance()->randomArray(length).toHex()); - // Prevent destructive operations while saving QMutexLocker locker(&m_saveMutex); QFileInfo fileInfo(filePath); auto realFilePath = fileInfo.exists() ? fileInfo.canonicalFilePath() : fileInfo.absoluteFilePath(); bool isNewFile = !QFile::exists(realFilePath); - -#ifdef Q_OS_WIN - bool isHidden = fileInfo.isHidden(); -#endif - bool ok = AsyncTask::runAndWaitForFuture([&] { return performSave(realFilePath, action, backupFilePath, error); }); if (ok) { setFilePath(filePath); @@ -333,13 +280,6 @@ bool Database::saveAs(const QString& filePath, SaveAction action, const QString& if (isNewFile) { QFile::setPermissions(realFilePath, QFile::ReadUser | QFile::WriteUser); } - -#ifdef Q_OS_WIN - if (isHidden) { - SetFileAttributes(realFilePath.toStdString().c_str(), FILE_ATTRIBUTE_HIDDEN); - } -#endif - m_ignoreFileChangesUntilSaved = false; m_fileWatcher->start(realFilePath, 30, 1); } else { // Saving failed, don't rewatch file since it does not represent our database @@ -355,29 +295,26 @@ bool Database::performSave(const QString& filePath, SaveAction action, const QSt backupDatabase(filePath, backupFilePath); } +#if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0) QFileInfo info(filePath); auto createTime = info.exists() ? info.birthTime() : QDateTime::currentDateTime(); +#endif switch (action) { case Atomic: { QSaveFile saveFile(filePath); if (saveFile.open(QIODevice::WriteOnly)) { - HashingStream hashingStream(&saveFile, QCryptographicHash::Md5, kFileBlockToHashSizeBytes); - if (!hashingStream.open(QIODevice::WriteOnly)) { - return false; - } // write the database to the file - if (!writeDatabase(&hashingStream, error)) { + if (!writeDatabase(&saveFile, error)) { return false; } +#if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0) // Retain original creation time saveFile.setFileTime(createTime, QFile::FileBirthTime); +#endif if (saveFile.commit()) { - // store the new hash - m_fileBlockHash = hashingStream.hashingResult(); - // successfully saved database file return true; } @@ -391,12 +328,8 @@ bool Database::performSave(const QString& filePath, SaveAction action, const QSt case TempFile: { QTemporaryFile tempFile; if (tempFile.open()) { - HashingStream hashingStream(&tempFile, QCryptographicHash::Md5, kFileBlockToHashSizeBytes); - if (!hashingStream.open(QIODevice::WriteOnly)) { - return false; - } // write the database to the file - if (!writeDatabase(&hashingStream, error)) { + if (!writeDatabase(&tempFile, error)) { return false; } tempFile.close(); // flush to disk @@ -412,10 +345,10 @@ bool Database::performSave(const QString& filePath, SaveAction action, const QSt // successfully saved the database tempFile.setAutoRemove(false); QFile::setPermissions(filePath, perms); - // Retain original creation time +#if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0) + // Retain orginal creation time tempFile.setFileTime(createTime, QFile::FileBirthTime); - // store the new hash - m_fileBlockHash = hashingStream.hashingResult(); +#endif return true; } else if (backupFilePath.isEmpty() || !restoreDatabase(filePath, backupFilePath)) { // Failed to copy new database in place, and @@ -434,26 +367,13 @@ bool Database::performSave(const QString& filePath, SaveAction action, const QSt break; } case DirectWrite: { - QBuffer dbBuffer; - dbBuffer.open(QIODevice::WriteOnly); - HashingStream hashingStream(&dbBuffer, QCryptographicHash::Md5, kFileBlockToHashSizeBytes); - if (!hashingStream.open(QIODevice::WriteOnly)) { - if (error) { - *error = hashingStream.errorString(); - } - return false; - } - if (!writeDatabase(&hashingStream, error)) { - return false; - } - // Open the original database file for direct-write QFile dbFile(filePath); if (dbFile.open(QIODevice::WriteOnly | QIODevice::Truncate)) { - dbFile.write(dbBuffer.data()); + if (!writeDatabase(&dbFile, error)) { + return false; + } dbFile.close(); - // store the new hash - m_fileBlockHash = hashingStream.hashingResult(); return true; } if (error) { @@ -469,9 +389,6 @@ bool Database::performSave(const QString& filePath, SaveAction action, const QSt bool Database::writeDatabase(QIODevice* device, QString* error) { - Q_ASSERT(m_data.key); - Q_ASSERT(m_data.transformedDatabaseKey); - PasswordKey oldTransformedKey; if (m_data.key->isEmpty()) { oldTransformedKey.setRawKey(m_data.transformedDatabaseKey->rawKey()); @@ -562,8 +479,9 @@ void Database::releaseData() m_data.clear(); m_metadata->clear(); - // Reset and delete the root group - auto oldGroup = setRootGroup(new Group()); + auto oldGroup = rootGroup(); + setRootGroup(new Group()); + // explicitly delete old group, otherwise it is only deleted when the database object is destructed delete oldGroup; m_fileWatcher->stop(); @@ -571,9 +489,6 @@ void Database::releaseData() m_deletedObjects.clear(); m_commonUsernames.clear(); m_tagList.clear(); - - m_fileBlockHash.clear(); - m_ignoreFileChangesUntilSaved = false; } /** @@ -642,12 +557,14 @@ const Group* Database::rootGroup() const return m_rootGroup; } -/* Set the root group of the database and return - * the old root group. It is the responsibility - * of the calling function to dispose of the old - * root group. +/** + * 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. */ -Group* Database::setRootGroup(Group* group) +void Database::setRootGroup(Group* group) { Q_ASSERT(group); @@ -655,17 +572,8 @@ Group* Database::setRootGroup(Group* group) emit databaseDiscarded(); } - auto oldRoot = m_rootGroup; m_rootGroup = group; m_rootGroup->setParent(this); - - // Initialize the root group if not done already - if (m_rootGroup->uuid().isNull()) { - m_rootGroup->setUuid(QUuid::createUuid()); - m_rootGroup->setName(tr("Passwords", "Root group name")); - } - - return oldRoot; } Metadata* Database::metadata() @@ -710,33 +618,10 @@ void Database::setFilePath(const QString& filePath) m_data.filePath = filePath; // Don't watch for changes until the next open or save operation m_fileWatcher->stop(); - m_ignoreFileChangesUntilSaved = false; emit filePathChanged(oldPath, filePath); } } -const QByteArray& Database::fileBlockHash() const -{ - return m_fileBlockHash; -} - -void Database::setIgnoreFileChangesUntilSaved(bool ignore) -{ - if (m_ignoreFileChangesUntilSaved != ignore) { - m_ignoreFileChangesUntilSaved = ignore; - if (ignore) { - m_fileWatcher->pause(); - } else { - m_fileWatcher->resume(); - } - } -} - -bool Database::ignoreFileChangesUntilSaved() const -{ - return m_ignoreFileChangesUntilSaved; -} - QList Database::deletedObjects() { return m_deletedObjects; @@ -825,13 +710,8 @@ void Database::updateTagList() } } - m_tagList = tagSet.values(); - - QCollator collator; - collator.setNumericMode(true); - collator.setCaseSensitivity(Qt::CaseInsensitive); - std::sort(m_tagList.begin(), m_tagList.end(), collator); - + m_tagList = tagSet.toList(); + m_tagList.sort(); emit tagListUpdated(); } @@ -858,29 +738,18 @@ Database::CompressionAlgorithm Database::compressionAlgorithm() const QByteArray Database::transformedDatabaseKey() const { - Q_ASSERT(m_data.transformedDatabaseKey); - if (!m_data.transformedDatabaseKey) { - return {}; - } return m_data.transformedDatabaseKey->rawKey(); } QByteArray Database::challengeResponseKey() const { - Q_ASSERT(m_data.challengeResponseKey); - if (!m_data.challengeResponseKey) { - return {}; - } return m_data.challengeResponseKey->rawKey(); } bool Database::challengeMasterSeed(const QByteArray& masterSeed) { - Q_ASSERT(m_data.key); - Q_ASSERT(m_data.masterSeed); - m_keyError.clear(); - if (m_data.key && m_data.masterSeed) { + if (m_data.key) { m_data.masterSeed->setRawKey(masterSeed); QByteArray response; bool ok = m_data.key->challenge(masterSeed, response, &m_keyError); @@ -926,7 +795,8 @@ bool Database::setKey(const QSharedPointer& key, m_keyError.clear(); if (!key) { - m_data.resetKeys(); + m_data.key.reset(); + m_data.transformedDatabaseKey.reset(new PasswordKey()); return true; } @@ -1069,7 +939,6 @@ void Database::markAsClean() void Database::markNonDataChange() { m_hasNonDataChange = true; - emit databaseNonDataChanged(); } /** @@ -1126,79 +995,3 @@ void Database::stopModifiedTimer() { QMetaObject::invokeMethod(&m_modifiedTimer, "stop"); } - -QUuid Database::publicUuid() -{ - // This feature requires KDBX4 - if (m_data.formatVersion < KeePass2::FILE_VERSION_4) { - // Return the file path hash as a UUID for KDBX3 - QCryptographicHash hasher(QCryptographicHash::Sha256); - hasher.addData(filePath().toUtf8()); - return QUuid::fromRfc4122(hasher.result().left(16)); - } - - if (!publicCustomData().contains("KPXC_PUBLIC_UUID")) { - publicCustomData().insert("KPXC_PUBLIC_UUID", QUuid::createUuid().toRfc4122()); - markAsModified(); - } - - return QUuid::fromRfc4122(publicCustomData()["KPXC_PUBLIC_UUID"].toByteArray()); -} - -QString Database::publicName() -{ - return publicCustomData().value("KPXC_PUBLIC_NAME").toString(); -} - -void Database::setPublicName(const QString& name) -{ - if (name.isEmpty()) { - publicCustomData().remove("KPXC_PUBLIC_NAME"); - } else { - publicCustomData().insert("KPXC_PUBLIC_NAME", name); - } - markAsModified(); -} - -QString Database::publicColor() -{ - return publicCustomData().value("KPXC_PUBLIC_COLOR").toString(); -} - -void Database::setPublicColor(const QString& color) -{ - if (color.isEmpty()) { - publicCustomData().remove("KPXC_PUBLIC_COLOR"); - } else { - publicCustomData().insert("KPXC_PUBLIC_COLOR", color); - } - markAsModified(); -} - -int Database::publicIcon() -{ - if (publicCustomData().contains("KPXC_PUBLIC_ICON")) { - return publicCustomData().value("KPXC_PUBLIC_ICON").toInt(); - } - return -1; -} - -void Database::setPublicIcon(int iconIndex) -{ - if (iconIndex < 0) { - publicCustomData().remove("KPXC_PUBLIC_ICON"); - } else { - publicCustomData().insert("KPXC_PUBLIC_ICON", iconIndex); - } - markAsModified(); -} - -void Database::markAsTemporaryDatabase() -{ - m_isTemporaryDatabase = true; -} - -bool Database::isTemporaryDatabase() -{ - return m_isTemporaryDatabase; -} diff --git a/src/core/Database.h b/src/core/Database.h index 0d183e778..e1bc2ec96 100644 --- a/src/core/Database.h +++ b/src/core/Database.h @@ -75,9 +75,6 @@ public: ~Database() override; private: - // size of the block of file data to hash for detecting external changes - static const quint32 kFileBlockToHashSizeBytes = 1024; // 1 KiB - bool writeDatabase(QIODevice* device, QString* error = nullptr); bool backupDatabase(const QString& filePath, const QString& destinationFilePath); bool restoreDatabase(const QString& filePath, const QString& fromBackupFilePath); @@ -105,28 +102,16 @@ public: bool hasNonDataChanges() const; bool isSaving(); - QUuid publicUuid(); QUuid uuid() const; QString filePath() const; QString canonicalFilePath() const; void setFilePath(const QString& filePath); - const QByteArray& fileBlockHash() const; - void setIgnoreFileChangesUntilSaved(bool ignore); - bool ignoreFileChangesUntilSaved() const; - - QString publicName(); - void setPublicName(const QString& name); - QString publicColor(); - void setPublicColor(const QString& color); - int publicIcon(); - void setPublicIcon(int iconIndex); - Metadata* metadata(); const Metadata* metadata() const; Group* rootGroup(); const Group* rootGroup() const; - Q_REQUIRED_RESULT Group* setRootGroup(Group* group); + void setRootGroup(Group* group); QVariantMap& publicCustomData(); const QVariantMap& publicCustomData() const; void setPublicCustomData(const QVariantMap& customData); @@ -164,9 +149,6 @@ public: bool changeKdf(const QSharedPointer& kdf); QByteArray transformedDatabaseKey() const; - void markAsTemporaryDatabase(); - bool isTemporaryDatabase(); - static Database* databaseByUuid(const QUuid& uuid); public slots: @@ -188,8 +170,7 @@ signals: void databaseOpened(); void databaseSaved(); void databaseDiscarded(); - void databaseFileChanged(bool triggeredBySave); - void databaseNonDataChanged(); + void databaseFileChanged(); void tagListUpdated(); private: @@ -205,33 +186,30 @@ private: QScopedPointer challengeResponseKey; QSharedPointer key; - QSharedPointer kdf; + QSharedPointer kdf = QSharedPointer::create(true); QVariantMap publicCustomData; DatabaseData() + : masterSeed(new PasswordKey()) + , transformedDatabaseKey(new PasswordKey()) + , challengeResponseKey(new PasswordKey()) { - clear(); + kdf->randomizeSeed(); } void clear() { - resetKeys(); filePath.clear(); - publicCustomData.clear(); - } - void resetKeys() - { - masterSeed.reset(new PasswordKey()); - transformedDatabaseKey.reset(new PasswordKey()); - challengeResponseKey.reset(new PasswordKey()); + masterSeed.reset(); + transformedDatabaseKey.reset(); + challengeResponseKey.reset(); key.reset(); + kdf.reset(); - // Default to AES KDF, KDBX4 databases overwrite this - kdf.reset(new AesKdf(true)); - kdf->randomizeSeed(); + publicCustomData.clear(); } }; @@ -240,8 +218,6 @@ private: void startModifiedTimer(); void stopModifiedTimer(); - QByteArray m_fileBlockHash; - bool m_ignoreFileChangesUntilSaved; QPointer const m_metadata; DatabaseData m_data; QPointer m_rootGroup; @@ -252,7 +228,6 @@ private: bool m_modified = false; bool m_hasNonDataChange = false; QString m_keyError; - bool m_isTemporaryDatabase = false; QStringList m_commonUsernames; QStringList m_tagList; diff --git a/src/core/Entry.cpp b/src/core/Entry.cpp index 1ef96aabe..92714f20c 100644 --- a/src/core/Entry.cpp +++ b/src/core/Entry.cpp @@ -1,6 +1,6 @@ /* - * Copyright (C) 2024 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 @@ -20,27 +20,20 @@ #include "core/Config.h" #include "core/Database.h" -#include "core/Global.h" #include "core/Group.h" #include "core/Metadata.h" #include "core/PasswordHealth.h" #include "core/Tools.h" -#include "core/Totp.h" +#include "totp/totp.h" #include #include -#include #include const int Entry::DefaultIconNumber = 0; - -namespace -{ - const int ResolveMaximumDepth = 10; - const QString AutoTypeSequenceUsername = "{USERNAME}{ENTER}"; - const QString AutoTypeSequencePassword = "{PASSWORD}{ENTER}"; - const QRegularExpression TagDelimiterRegex(R"([,;\t])"); -} // namespace +const int Entry::ResolveMaximumDepth = 10; +const QString Entry::AutoTypeSequenceUsername = "{USERNAME}{ENTER}"; +const QString Entry::AutoTypeSequencePassword = "{PASSWORD}{ENTER}"; Entry::Entry() : m_attributes(new EntryAttributes(this)) @@ -212,11 +205,6 @@ bool Entry::autoTypeEnabled() const return m_data.autoTypeEnabled; } -bool Entry::groupAutoTypeEnabled() const -{ - return group() && group()->resolveAutoTypeEnabled(); -} - int Entry::autoTypeObfuscation() const { return m_data.autoTypeObfuscation; @@ -293,7 +281,7 @@ QString Entry::effectiveAutoTypeSequence() const /** * Retrieve the Auto-Type sequences matches for a given windowTitle - * This returns a list with priority ordering. If you don't want duplicates, convert it to a QSet. + * This returns a list with priority ordering. If you don't want duplicates call .toSet() on it. */ QList Entry::autoTypeSequences(const QString& windowTitle) const { @@ -381,38 +369,19 @@ QString Entry::url() const return m_attributes->value(EntryAttributes::URLKey); } -QString Entry::resolveUrl() const -{ - const auto entryUrl = url(); - if (entryUrl.isEmpty()) { - return {}; - } - - return EntryAttributes::matchReference(entryUrl).hasMatch() ? resolveMultiplePlaceholders(entryUrl) : entryUrl; -} - QStringList Entry::getAllUrls() const { QStringList urlList; - const auto entryUrl = resolveUrl(); - if (!entryUrl.isEmpty()) { - urlList << entryUrl; + if (!url().isEmpty()) { + urlList << url(); } - return urlList << getAdditionalUrls(); -} - -QStringList Entry::getAdditionalUrls() const -{ - QStringList urlList; - for (const auto& key : m_attributes->keys()) { - if (key.startsWith(EntryAttributes::AdditionalUrlAttribute) - || key == QString("%1_RELYING_PARTY").arg(EntryAttributes::PasskeyAttribute)) { + if (key.startsWith("KP2A_URL")) { auto additionalUrl = m_attributes->value(key); if (!additionalUrl.isEmpty()) { - urlList << resolveMultiplePlaceholders(additionalUrl); + urlList << additionalUrl; } } } @@ -455,11 +424,14 @@ QString Entry::attribute(const QString& key) const int Entry::size() const { int size = 0; - size += attributes()->attributesSize(); - size += autoTypeAssociations()->associationsSize(); - size += attachments()->attachmentsSize(); - size += customData()->dataSize(); - for (const QString& tag : tags().split(TagDelimiterRegex, Qt::SkipEmptyParts)) { + const QRegularExpression delimiter(",|:|;"); + + size += this->attributes()->attributesSize(); + size += this->autoTypeAssociations()->associationsSize(); + size += this->attachments()->attachmentsSize(); + size += this->customData()->dataSize(); + const QStringList tags = this->tags().split(delimiter, QString::SkipEmptyParts); + for (const QString& tag : tags) { size += tag.toUtf8().size(); } @@ -476,12 +448,6 @@ bool Entry::willExpireInDays(int days) const return m_data.timeInfo.expires() && m_data.timeInfo.expiryTime() < Clock::currentDateTime().addDays(days); } -void Entry::expireNow() -{ - setExpiryTime(Clock::currentDateTimeUtc()); - setExpires(true); -} - bool Entry::isRecycled() const { const Database* db = database(); @@ -489,7 +455,7 @@ bool Entry::isRecycled() const return false; } - return m_group->isRecycled(); + return m_group == db->metadata()->recycleBin() || m_group->isRecycled(); } bool Entry::isAttributeReference(const QString& key) const @@ -508,7 +474,8 @@ bool Entry::isAttributeReferenceOf(const QString& key, const QUuid& uuid) const bool Entry::hasReferences() const { - for (const QString& key : EntryAttributes::DefaultAttributes) { + const QList keyList = EntryAttributes::DefaultAttributes; + for (const QString& key : keyList) { if (m_attributes->isReference(key)) { return true; } @@ -518,7 +485,8 @@ bool Entry::hasReferences() const bool Entry::hasReferencesTo(const QUuid& uuid) const { - for (const QString& key : EntryAttributes::DefaultAttributes) { + const QList keyList = EntryAttributes::DefaultAttributes; + for (const QString& key : keyList) { if (isAttributeReferenceOf(key, uuid)) { return true; } @@ -570,30 +538,10 @@ bool Entry::hasTotp() const return !m_data.totpSettings.isNull(); } -bool Entry::hasValidTotp() const -{ - auto error = Totp::checkValidSettings(m_data.totpSettings); - return error.isEmpty(); -} - -bool Entry::hasPasskey() const -{ - return m_attributes->hasPasskey(); -} - -void Entry::removePasskey() -{ - m_attributes->removePasskeyAttributes(); - removeTag(tr("Passkey")); -} - -QString Entry::totp(bool* isValid) const +QString Entry::totp() const { if (hasTotp()) { - return Totp::generateTotp(m_data.totpSettings, isValid); - } - if (isValid) { - *isValid = false; + return Totp::generateTotp(m_data.totpSettings); } return {}; } @@ -605,7 +553,7 @@ void Entry::setTotp(QSharedPointer settings) m_attributes->remove(Totp::ATTRIBUTE_SEED); m_attributes->remove(Totp::ATTRIBUTE_SETTINGS); - if (!settings || settings->key.isEmpty()) { + if (settings->key.isEmpty()) { m_data.totpSettings.reset(); } else { m_data.totpSettings = std::move(settings); @@ -628,11 +576,6 @@ void Entry::updateTotp() 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)); - } else if (m_attributes->contains(Totp::KP2_TOTP_SECRET)) { - m_data.totpSettings = Totp::fromKeePass2Totp(m_attributes->value(Totp::KP2_TOTP_SECRET), - m_attributes->value(Totp::KP2_TOTP_ALGORITHM), - m_attributes->value(Totp::KP2_TOTP_LENGTH), - m_attributes->value(Totp::KP2_TOTP_PERIOD)); } else { m_data.totpSettings.reset(); } @@ -708,13 +651,15 @@ void Entry::setOverrideUrl(const QString& url) void Entry::setTags(const QString& tags) { - auto taglist = tags.split(TagDelimiterRegex, Qt::SkipEmptyParts); + static QRegExp rx("(\\,|\\t|\\;)"); + auto taglist = tags.split(rx, QString::SkipEmptyParts); // Trim whitespace before/after tag text - for (auto& tag : taglist) { - tag = tag.trimmed(); + for (auto itr = taglist.begin(); itr != taglist.end(); ++itr) { + *itr = itr->trimmed(); } // Remove duplicates - taglist = Tools::asSet(taglist).values(); + auto tagSet = QSet::fromList(taglist); + taglist = tagSet.toList(); // Sort alphabetically taglist.sort(); set(m_data.tags, taglist); @@ -723,7 +668,7 @@ void Entry::setTags(const QString& tags) void Entry::addTag(const QString& tag) { auto cleanTag = tag.trimmed(); - cleanTag.remove(TagDelimiterRegex); + cleanTag.remove(QRegExp("(\\,|\\t|\\;)")); auto taglist = m_data.tags; if (!taglist.contains(cleanTag)) { @@ -736,7 +681,7 @@ void Entry::addTag(const QString& tag) void Entry::removeTag(const QString& tag) { auto cleanTag = tag.trimmed(); - cleanTag.remove(TagDelimiterRegex); + cleanTag.remove(QRegExp("(\\,|\\t|\\;)")); auto taglist = m_data.tags; if (taglist.removeAll(tag) > 0) { @@ -838,21 +783,10 @@ void Entry::addHistoryItem(Entry* entry) { Q_ASSERT(!entry->parent()); - entry->setHistoryOwner(this); m_history.append(entry); emitModified(); } -void Entry::setHistoryOwner(Entry* entry) -{ - m_historyOwner = entry; -} - -Entry* Entry::historyOwner() const -{ - return m_historyOwner; -} - void Entry::removeHistoryItems(const QList& historyEntries) { if (historyEntries.isEmpty()) { @@ -899,6 +833,7 @@ void Entry::truncateHistory() int histMaxSize = db->metadata()->historyMaxSize(); if (histMaxSize > -1) { int size = 0; + QSet foundAttachments = attachments()->values(); QMutableListIterator i(m_history); i.toBack(); @@ -908,6 +843,7 @@ void Entry::truncateHistory() // don't calculate size if it's already above the maximum if (size <= histMaxSize) { size += historyItem->size(); + foundAttachments += historyItem->attachments()->values(); } if (size > histMaxSize) { @@ -961,7 +897,7 @@ bool Entry::equals(const Entry* other, CompareItemOptions options) const Entry* Entry::clone(CloneFlags flags) const { - auto entry = new Entry(); + Entry* entry = new Entry(); entry->setUpdateTimeinfo(false); if (flags & CloneNewUuid) { entry->m_uuid = QUuid::createUuid(); @@ -1061,29 +997,31 @@ void Entry::updateModifiedSinceBegin() QString Entry::resolveMultiplePlaceholdersRecursive(const QString& str, int maxDepth) const { - static const QRegularExpression placeholderRegEx("({(?>[^{}]+?|(?1))+?})"); + static QRegularExpression placeholderRegEx("(\\{[^\\}]+?\\})", QRegularExpression::CaseInsensitiveOption); - if (--maxDepth < 0) { + if (maxDepth <= 0) { qWarning("Maximum depth of replacement has been reached. Entry uuid: %s", uuid().toString().toLatin1().data()); return str; } - QString result; + QString result = str; auto matches = placeholderRegEx.globalMatch(str); - int capEnd = 0; while (matches.hasNext()) { - const auto match = matches.next(); - result += str.midRef(capEnd, match.capturedStart() - capEnd); - result += resolvePlaceholderRecursive(match.captured(), maxDepth); - capEnd = match.capturedEnd(); + auto match = matches.next(); + const auto found = match.captured(1); + result.replace(found, resolvePlaceholderRecursive(found, maxDepth - 1)); } - result += str.rightRef(str.length() - capEnd); + + if (result != str) { + result = resolveMultiplePlaceholdersRecursive(result, maxDepth - 1); + } + return result; } QString Entry::resolvePlaceholderRecursive(const QString& placeholder, int maxDepth) const { - if (--maxDepth < 0) { + if (maxDepth <= 0) { qWarning("Maximum depth of replacement has been reached. Entry uuid: %s", uuid().toString().toLatin1().data()); return placeholder; } @@ -1091,20 +1029,33 @@ QString Entry::resolvePlaceholderRecursive(const QString& placeholder, int maxDe const PlaceholderType typeOfPlaceholder = placeholderType(placeholder); switch (typeOfPlaceholder) { case PlaceholderType::NotPlaceholder: - return resolveMultiplePlaceholdersRecursive(placeholder, maxDepth); - case PlaceholderType::Unknown: { - return "{" % resolveMultiplePlaceholdersRecursive(placeholder.mid(1, placeholder.length() - 2), maxDepth) % "}"; - } + case PlaceholderType::Unknown: + return resolveMultiplePlaceholdersRecursive(placeholder, maxDepth - 1); case PlaceholderType::Title: - return resolveMultiplePlaceholdersRecursive(title(), maxDepth); + if (placeholderType(title()) == PlaceholderType::Title) { + return title(); + } + return resolveMultiplePlaceholdersRecursive(title(), maxDepth - 1); case PlaceholderType::UserName: - return resolveMultiplePlaceholdersRecursive(username(), maxDepth); + if (placeholderType(username()) == PlaceholderType::UserName) { + return username(); + } + return resolveMultiplePlaceholdersRecursive(username(), maxDepth - 1); case PlaceholderType::Password: - return resolveMultiplePlaceholdersRecursive(password(), maxDepth); + if (placeholderType(password()) == PlaceholderType::Password) { + return password(); + } + return resolveMultiplePlaceholdersRecursive(password(), maxDepth - 1); case PlaceholderType::Notes: - return resolveMultiplePlaceholdersRecursive(notes(), maxDepth); + if (placeholderType(notes()) == PlaceholderType::Notes) { + return notes(); + } + return resolveMultiplePlaceholdersRecursive(notes(), maxDepth - 1); case PlaceholderType::Url: - return resolveMultiplePlaceholdersRecursive(url(), maxDepth); + if (placeholderType(url()) == PlaceholderType::Url) { + return url(); + } + return resolveMultiplePlaceholdersRecursive(url(), maxDepth - 1); case PlaceholderType::DbDir: { QFileInfo fileInfo(database()->filePath()); return fileInfo.absoluteDir().absolutePath(); @@ -1119,7 +1070,7 @@ QString Entry::resolvePlaceholderRecursive(const QString& placeholder, int maxDe case PlaceholderType::UrlUserInfo: case PlaceholderType::UrlUserName: case PlaceholderType::UrlPassword: { - const QString strUrl = resolveMultiplePlaceholdersRecursive(url(), maxDepth); + const QString strUrl = resolveMultiplePlaceholdersRecursive(url(), maxDepth - 1); return resolveUrlPlaceholder(strUrl, typeOfPlaceholder); } case PlaceholderType::Totp: @@ -1127,11 +1078,10 @@ QString Entry::resolvePlaceholderRecursive(const QString& placeholder, int maxDe return totp(); case PlaceholderType::CustomAttribute: { const QString key = placeholder.mid(3, placeholder.length() - 4); // {S:attr} => mid(3, len - 4) - return attributes()->hasKey(key) ? resolveMultiplePlaceholdersRecursive(attributes()->value(key), maxDepth) - : QString(); + return attributes()->hasKey(key) ? attributes()->value(key) : QString(); } case PlaceholderType::Reference: - return resolveReferencePlaceholderRecursive(placeholder, ++maxDepth); + return resolveReferencePlaceholderRecursive(placeholder, maxDepth); case PlaceholderType::DateTimeSimple: case PlaceholderType::DateTimeYear: case PlaceholderType::DateTimeMonth: @@ -1146,11 +1096,7 @@ QString Entry::resolvePlaceholderRecursive(const QString& placeholder, int maxDe case PlaceholderType::DateTimeUtcHour: case PlaceholderType::DateTimeUtcMinute: case PlaceholderType::DateTimeUtcSecond: - return resolveMultiplePlaceholdersRecursive(resolveDateTimePlaceholder(typeOfPlaceholder), maxDepth); - case PlaceholderType::Conversion: - return resolveMultiplePlaceholdersRecursive(resolveConversionPlaceholder(placeholder), maxDepth); - case PlaceholderType::Regex: - return resolveMultiplePlaceholdersRecursive(resolveRegexPlaceholder(placeholder), maxDepth); + return resolveMultiplePlaceholdersRecursive(resolveDateTimePlaceholder(typeOfPlaceholder), maxDepth - 1); } return placeholder; @@ -1158,134 +1104,65 @@ QString Entry::resolvePlaceholderRecursive(const QString& placeholder, int maxDe QString Entry::resolveDateTimePlaceholder(Entry::PlaceholderType placeholderType) const { - const QDateTime time = Clock::currentDateTime(); - const QDateTime time_utc = Clock::currentDateTimeUtc(); + QDateTime time = Clock::currentDateTime(); + QDateTime time_utc = Clock::currentDateTimeUtc(); + QString date_formatted{}; switch (placeholderType) { case PlaceholderType::DateTimeSimple: - return time.toString("yyyyMMddhhmmss"); + date_formatted = time.toString("yyyyMMddhhmmss"); + break; case PlaceholderType::DateTimeYear: - return time.toString("yyyy"); + date_formatted = time.toString("yyyy"); + break; case PlaceholderType::DateTimeMonth: - return time.toString("MM"); + date_formatted = time.toString("MM"); + break; case PlaceholderType::DateTimeDay: - return time.toString("dd"); + date_formatted = time.toString("dd"); + break; case PlaceholderType::DateTimeHour: - return time.toString("hh"); + date_formatted = time.toString("hh"); + break; case PlaceholderType::DateTimeMinute: - return time.toString("mm"); + date_formatted = time.toString("mm"); + break; case PlaceholderType::DateTimeSecond: - return time.toString("ss"); + date_formatted = time.toString("ss"); + break; case PlaceholderType::DateTimeUtcSimple: - return time_utc.toString("yyyyMMddhhmmss"); + date_formatted = time_utc.toString("yyyyMMddhhmmss"); + break; case PlaceholderType::DateTimeUtcYear: - return time_utc.toString("yyyy"); + date_formatted = time_utc.toString("yyyy"); + break; case PlaceholderType::DateTimeUtcMonth: - return time_utc.toString("MM"); + date_formatted = time_utc.toString("MM"); + break; case PlaceholderType::DateTimeUtcDay: - return time_utc.toString("dd"); + date_formatted = time_utc.toString("dd"); + break; case PlaceholderType::DateTimeUtcHour: - return time_utc.toString("hh"); + date_formatted = time_utc.toString("hh"); + break; case PlaceholderType::DateTimeUtcMinute: - return time_utc.toString("mm"); + date_formatted = time_utc.toString("mm"); + break; case PlaceholderType::DateTimeUtcSecond: - return time_utc.toString("ss"); + date_formatted = time_utc.toString("ss"); + break; default: { Q_ASSERT_X(false, "Entry::resolveDateTimePlaceholder", "Bad DateTime placeholder type"); break; } } - return {}; -} - -QString Entry::resolveConversionPlaceholder(const QString& str, QString* error) const -{ - if (error) { - error->clear(); - } - - // Extract the inner conversion from the placeholder - QRegularExpression conversionRegEx("^{?t-conv:(.*)}?$", QRegularExpression::CaseInsensitiveOption); - auto placeholder = conversionRegEx.match(str).captured(1); - if (!placeholder.isEmpty()) { - // Determine the separator character and split, include empty groups - auto sep = placeholder[0]; - auto parts = placeholder.split(sep); - if (parts.size() >= 4) { - auto resolved = resolveMultiplePlaceholders(parts[1]); - auto type = parts[2].toLower(); - - if (type == "base64") { - resolved = resolved.toUtf8().toBase64(); - } else if (type == "hex") { - resolved = resolved.toUtf8().toHex(); - } else if (type == "uri") { - resolved = QUrl::toPercentEncoding(resolved.toUtf8()); - } else if (type == "uri-dec") { - resolved = QUrl::fromPercentEncoding(resolved.toUtf8()); - } else if (type.startsWith("u")) { - resolved = resolved.toUpper(); - } else if (type.startsWith("l")) { - resolved = resolved.toLower(); - } else { - if (error) { - *error = tr("Invalid conversion type: %1").arg(type); - } - return {}; - } - return resolved; - } - } - - if (error) { - *error = tr("Invalid conversion syntax: %1").arg(str); - } - return {}; -} - -QString Entry::resolveRegexPlaceholder(const QString& str, QString* error) const -{ - if (error) { - error->clear(); - } - - // Extract the inner regex from the placeholder - QRegularExpression conversionRegEx("^{?t-replace-rx:(.*)}?$", QRegularExpression::CaseInsensitiveOption); - auto placeholder = conversionRegEx.match(str).captured(1); - if (!placeholder.isEmpty()) { - // Determine the separator character and split, include empty groups - auto sep = placeholder[0]; - auto parts = placeholder.split(sep); - if (parts.size() >= 5) { - auto resolvedText = resolveMultiplePlaceholders(parts[1]); - auto resolvedSearch = resolveMultiplePlaceholders(parts[2]); - auto resolvedReplace = resolveMultiplePlaceholders(parts[3]); - // Replace $ with \\ to support Qt substitutions - resolvedReplace.replace(QRegularExpression(R"(\$(\d+))"), R"(\\1)"); - - auto searchRegex = QRegularExpression(resolvedSearch); - if (!searchRegex.isValid()) { - if (error) { - *error = - tr("Invalid regular expression syntax %1\n%2").arg(resolvedSearch, searchRegex.errorString()); - } - return {}; - } - - return resolvedText.replace(searchRegex, resolvedReplace); - } - } - - if (error) { - *error = tr("Invalid conversion syntax: %1").arg(str); - } - return {}; + return date_formatted; } QString Entry::resolveReferencePlaceholderRecursive(const QString& placeholder, int maxDepth) const { - if (--maxDepth < 0) { + if (maxDepth <= 0) { qWarning("Maximum depth of replacement has been reached. Entry uuid: %s", uuid().toString().toLatin1().data()); return placeholder; } @@ -1293,7 +1170,7 @@ QString Entry::resolveReferencePlaceholderRecursive(const QString& placeholder, // resolving references in format: {REF:@:} // using format from http://keepass.info/help/base/fieldrefs.html at the time of writing - const QRegularExpressionMatch match = EntryAttributes::matchReference(placeholder); + QRegularExpressionMatch match = EntryAttributes::matchReference(placeholder); if (!match.hasMatch() || !m_group || !m_group->database()) { return placeholder; } @@ -1313,7 +1190,7 @@ QString Entry::resolveReferencePlaceholderRecursive(const QString& placeholder, // Referencing fields of other entries only works with standard fields, not with custom user strings. // If you want to reference a custom user string, you need to place a redirection in a standard field // of the entry with the custom string, using {S:}, and reference the standard field. - result = refEntry->resolveMultiplePlaceholdersRecursive(result, maxDepth); + result = refEntry->resolveMultiplePlaceholdersRecursive(result, maxDepth - 1); } return result; @@ -1337,7 +1214,7 @@ QString Entry::referenceFieldValue(EntryReferenceType referenceType) const default: break; } - return {}; + return QString(); } void Entry::moveUp() @@ -1389,11 +1266,11 @@ void Entry::setGroup(Group* group, bool trackPrevious) } } - QObject::setParent(group); - m_group = group; group->addEntry(this); + QObject::setParent(group); + if (m_updateTimeinfo) { m_data.timeInfo.setLocationChanged(Clock::currentDateTimeUtc()); } @@ -1422,7 +1299,9 @@ Database* Entry::database() QString Entry::maskPasswordPlaceholders(const QString& str) const { - return QString{str}.replace(QStringLiteral("{PASSWORD}"), QStringLiteral("******"), Qt::CaseInsensitive); + QString result = str; + result.replace(QRegExp("(\\{PASSWORD\\})", Qt::CaseInsensitive, QRegExp::RegExp2), "******"); + return result; } Entry* Entry::resolveReference(const QString& str) const @@ -1452,7 +1331,7 @@ QString Entry::resolvePlaceholder(const QString& placeholder) const QString Entry::resolveUrlPlaceholder(const QString& str, Entry::PlaceholderType placeholderType) const { if (str.isEmpty()) { - return {}; + return QString(); } const QUrl qurl(str); @@ -1483,26 +1362,20 @@ QString Entry::resolveUrlPlaceholder(const QString& str, Entry::PlaceholderType } } - return {}; + return QString(); } Entry::PlaceholderType Entry::placeholderType(const QString& placeholder) const { - if (!placeholder.startsWith(QStringLiteral("{")) || !placeholder.endsWith(QStringLiteral("}"))) { + if (!placeholder.startsWith(QLatin1Char('{')) || !placeholder.endsWith(QLatin1Char('}'))) { return PlaceholderType::NotPlaceholder; } - if (placeholder.startsWith(QStringLiteral("{S:"))) { + if (placeholder.startsWith(QLatin1Literal("{S:"))) { return PlaceholderType::CustomAttribute; } - if (placeholder.startsWith(QStringLiteral("{REF:"))) { + if (placeholder.startsWith(QLatin1Literal("{REF:"))) { return PlaceholderType::Reference; } - if (placeholder.startsWith(QStringLiteral("{T-CONV:"), Qt::CaseInsensitive)) { - return PlaceholderType::Conversion; - } - if (placeholder.startsWith(QStringLiteral("{T-REPLACE-RX:"), Qt::CaseInsensitive)) { - return PlaceholderType::Regex; - } static const QMap placeholders{ {QStringLiteral("{TITLE}"), PlaceholderType::Title}, @@ -1546,24 +1419,22 @@ QString Entry::resolveUrl(const QString& url) const { QString newUrl = url; - static const QRegularExpression fileRegEx(R"(^(?:[A-Za-z]:)?[\\/])"); - if (url.contains(fileRegEx)) { + 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 (url.startsWith("cmd://")) { + } else if (newUrl.startsWith("cmd://")) { QStringList cmdList = newUrl.split(" "); for (int i = 1; i < cmdList.size(); ++i) { - QString& cmd = cmdList[i]; // Don't pass arguments to the resolveUrl function (they look like URL's) - if (!cmd.startsWith("-") && !cmd.startsWith("/")) { - static const QRegularExpression quotesRegEx("['\"]"); - return resolveUrl(cmd.remove(quotesRegEx)); + if (!cmdList[i].startsWith("-") && !cmdList[i].startsWith("/")) { + return resolveUrl(cmdList[i].remove(QRegExp("'|\""))); } } // No URL in this command - return {}; + return QString(""); } if (!newUrl.isEmpty() && !newUrl.contains("://")) { @@ -1572,13 +1443,13 @@ QString Entry::resolveUrl(const QString& url) const } // Validate the URL - QUrl tempUrl(newUrl); + QUrl tempUrl = QUrl(newUrl); if (tempUrl.isValid() && (tempUrl.scheme() == "http" || tempUrl.scheme() == "https" || tempUrl.scheme() == "file")) { return tempUrl.url(); } - // No valid http URLs found + // No valid http URL's found return {}; } @@ -1667,7 +1538,7 @@ bool EntryData::equals(const EntryData& other, CompareItemOptions options) const return false; } } else if (totpSettings.isNull() != other.totpSettings.isNull()) { - // The existence of TOTP has changed between these entries + // The existance of TOTP has changed between these entries return false; } if (::compare(excludeFromReports, other.excludeFromReports, options) != 0) { diff --git a/src/core/Entry.h b/src/core/Entry.h index ddf6b21a6..11eb8fbbc 100644 --- a/src/core/Entry.h +++ b/src/core/Entry.h @@ -1,6 +1,6 @@ /* - * Copyright (C) 2025 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 @@ -79,7 +79,7 @@ class Entry : public ModifiableObject public: Entry(); - ~Entry() override; + ~Entry(); const QUuid& uuid() const; const QString uuidToHex() const; int iconNumber() const; @@ -91,7 +91,6 @@ public: QStringList tagList() const; const TimeInfo& timeInfo() const; bool autoTypeEnabled() const; - bool groupAutoTypeEnabled() const; int autoTypeObfuscation() const; QString defaultAutoTypeSequence() const; QString effectiveAutoTypeSequence() const; @@ -100,16 +99,14 @@ public: const AutoTypeAssociations* autoTypeAssociations() const; QString title() const; QString url() const; - QString resolveUrl() const; QStringList getAllUrls() const; - QStringList getAdditionalUrls() const; QString webUrl() const; QString displayUrl() const; QString username() const; QString password() const; QString notes() const; QString attribute(const QString& key) const; - QString totp(bool* isValid = nullptr) const; + QString totp() const; QString totpSettingsString() const; QSharedPointer totpSettings() const; Group* previousParentGroup(); @@ -122,14 +119,9 @@ public: bool excludeFromReports() const; void setExcludeFromReports(bool state); - bool hasPasskey() const; - void removePasskey(); - bool hasTotp() const; - bool hasValidTotp() const; bool isExpired() const; bool willExpireInDays(int days) const; - void expireNow(); bool isRecycled() const; bool isAttributeReference(const QString& key) const; bool isAttributeReferenceOf(const QString& key, const QUuid& uuid) const; @@ -172,8 +164,6 @@ public: QList historyItems(); const QList& historyItems() const; void addHistoryItem(Entry* entry); - void setHistoryOwner(Entry* entry); - Entry* historyOwner() const; void removeHistoryItems(const QList& historyEntries); void truncateHistory(); @@ -229,12 +219,13 @@ public: DateTimeUtcHour, DateTimeUtcMinute, DateTimeUtcSecond, - DbDir, - Conversion, - Regex + DbDir }; static const int DefaultIconNumber; + static const int ResolveMaximumDepth; + static const QString AutoTypeSequenceUsername; + static const QString AutoTypeSequencePassword; /** * Creates a duplicate of this entry except that the returned entry isn't @@ -250,8 +241,6 @@ public: QString resolvePlaceholder(const QString& str) const; QString resolveUrlPlaceholder(const QString& str, PlaceholderType placeholderType) const; QString resolveDateTimePlaceholder(PlaceholderType placeholderType) const; - QString resolveConversionPlaceholder(const QString& str, QString* error = nullptr) const; - QString resolveRegexPlaceholder(const QString& str, QString* error = nullptr) const; PlaceholderType placeholderType(const QString& placeholder) const; QString resolveUrl(const QString& url) const; @@ -304,7 +293,6 @@ private: QPointer m_autoTypeAssociations; QPointer m_customData; QList m_history; // Items sorted from oldest to newest - QPointer m_historyOwner; QScopedPointer m_tmpHistoryItem; bool m_modifiedSinceBegin; diff --git a/src/core/EntryAttachments.cpp b/src/core/EntryAttachments.cpp index 110d1e52b..c611f4413 100644 --- a/src/core/EntryAttachments.cpp +++ b/src/core/EntryAttachments.cpp @@ -19,13 +19,11 @@ #include "config-keepassx.h" #include "core/Global.h" -#include "core/Tools.h" #include "crypto/Random.h" #include #include #include -#include #include #include #include @@ -52,7 +50,7 @@ bool EntryAttachments::hasKey(const QString& key) const QSet EntryAttachments::values() const { - return Tools::asSet(m_attachments.values()); + return asConst(m_attachments).values().toSet(); } QByteArray EntryAttachments::value(const QString& key) const @@ -237,10 +235,8 @@ bool EntryAttachments::openAttachment(const QString& key, QString* errorMessage) const bool saveOk = tmpFile.open() && tmpFile.setPermissions(QFile::ReadOwner | QFile::WriteOwner) && tmpFile.write(attachmentData) == attachmentData.size() && tmpFile.flush(); - if (!saveOk) { - if (errorMessage) { - *errorMessage = QString("%1 - %2").arg(key, tmpFile.errorString()); - } + if (!saveOk && errorMessage) { + *errorMessage = QString("%1 - %2").arg(key, tmpFile.errorString()); return false; } @@ -253,35 +249,15 @@ bool EntryAttachments::openAttachment(const QString& key, QString* errorMessage) watcher->start(tmpFile.fileName(), 5); connect(watcher.data(), &FileWatcher::fileChanged, this, &EntryAttachments::attachmentFileModified); m_attachmentFileWatchers.insert(tmpFile.fileName(), watcher); - } else if (auto path = m_openedAttachments.value(key); m_attachmentFileWatchers.contains(path)) { - // If we are already watching an open attachment file, overwrite it with the information from the entry - auto watcher = m_attachmentFileWatchers.value(path); - watcher->stop(); - - QFile file(path); - auto finally = qScopeGuard([&file, &watcher, &path] { - file.close(); - watcher->start(path, 5); - }); - - const auto attachmentData = value(key); - const bool saveOk = file.open(QIODevice::WriteOnly) && file.setPermissions(QFile::ReadOwner | QFile::WriteOwner) - && file.write(attachmentData) == attachmentData.size() && file.flush(); - - if (!saveOk) { - if (errorMessage) { - *errorMessage = QString("%1 - %2").arg(key, file.errorString()); - } - return false; - } } const bool openOk = QDesktopServices::openUrl(QUrl::fromLocalFile(m_openedAttachments.value(key))); if (!openOk && errorMessage) { *errorMessage = tr("Cannot open file \"%1\"").arg(key); + return false; } - return openOk; + return true; } void EntryAttachments::attachmentFileModified(const QString& path) diff --git a/src/core/EntryAttachments.h b/src/core/EntryAttachments.h index c07c9cbf7..1fc35df89 100644 --- a/src/core/EntryAttachments.h +++ b/src/core/EntryAttachments.h @@ -34,7 +34,7 @@ class EntryAttachments : public ModifiableObject public: explicit EntryAttachments(QObject* parent = nullptr); - ~EntryAttachments() override; + virtual ~EntryAttachments(); QList keys() const; bool hasKey(const QString& key) const; QSet values() const; diff --git a/src/core/EntryAttributes.cpp b/src/core/EntryAttributes.cpp index 5c1e1c3a0..6dfc8adba 100644 --- a/src/core/EntryAttributes.cpp +++ b/src/core/EntryAttributes.cpp @@ -1,6 +1,6 @@ /* - * Copyright (C) 2024 KeePassXC Team * 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 @@ -17,8 +17,8 @@ */ #include "EntryAttributes.h" + #include "core/Global.h" -#include "core/Tools.h" #include #include @@ -35,21 +35,6 @@ const QString EntryAttributes::SearchInGroupName = "SearchIn"; const QString EntryAttributes::SearchTextGroupName = "SearchText"; const QString EntryAttributes::RememberCmdExecAttr = "_EXEC_CMD"; -const QString EntryAttributes::AdditionalUrlAttribute = "KP2A_URL"; - -// Passkey related attributes -const QString EntryAttributes::PasskeyAttribute = "KPEX_PASSKEY"; -const QString EntryAttributes::KPEX_PASSKEY_USERNAME = QStringLiteral("KPEX_PASSKEY_USERNAME"); -const QString EntryAttributes::KPEX_PASSKEY_CREDENTIAL_ID = QStringLiteral("KPEX_PASSKEY_CREDENTIAL_ID"); -const QString EntryAttributes::KPEX_PASSKEY_PRIVATE_KEY_PEM = QStringLiteral("KPEX_PASSKEY_PRIVATE_KEY_PEM"); -const QString EntryAttributes::KPEX_PASSKEY_RELYING_PARTY = QStringLiteral("KPEX_PASSKEY_RELYING_PARTY"); -const QString EntryAttributes::KPEX_PASSKEY_USER_HANDLE = QStringLiteral("KPEX_PASSKEY_USER_HANDLE"); -const QString EntryAttributes::KPEX_PASSKEY_PRIVATE_KEY_START = QStringLiteral("-----BEGIN PRIVATE KEY-----"); -const QString EntryAttributes::KPEX_PASSKEY_PRIVATE_KEY_END = QStringLiteral("-----END PRIVATE KEY-----"); - -// For compatibility with StrongBox -const QString EntryAttributes::KPEX_PASSKEY_GENERATED_USER_ID = QStringLiteral("KPEX_PASSKEY_GENERATED_USER_ID"); -const QString EntryAttributes::KPXC_PASSKEY_USERNAME = QStringLiteral("KPXC_PASSKEY_USERNAME"); EntryAttributes::EntryAttributes(QObject* parent) : ModifiableObject(parent) @@ -67,34 +52,12 @@ bool EntryAttributes::hasKey(const QString& key) const return m_attributes.contains(key); } -bool EntryAttributes::hasPasskey() const -{ - const auto keyList = keys(); - for (const auto& key : keyList) { - if (isPasskeyAttribute(key)) { - return true; - } - } - - return false; -} - -void EntryAttributes::removePasskeyAttributes() -{ - const auto keyList = keys(); - for (const auto& key : keyList) { - if (isPasskeyAttribute(key)) { - remove(key); - } - } -} - QList EntryAttributes::customKeys() const { QList customKeys; const QList keyList = keys(); for (const QString& key : keyList) { - if (!isDefaultAttribute(key) && !isPasskeyAttribute(key)) { + if (!isDefaultAttribute(key)) { customKeys.append(key); } } @@ -262,7 +225,7 @@ void EntryAttributes::copyCustomKeysFrom(const EntryAttributes* other) bool EntryAttributes::areCustomKeysDifferent(const EntryAttributes* other) { // check if they are equal ignoring the order of the keys - if (Tools::asSet(keys()) != Tools::asSet(other->keys())) { + if (keys().toSet() != other->keys().toSet()) { return true; } @@ -323,8 +286,8 @@ bool EntryAttributes::operator!=(const EntryAttributes& other) const QRegularExpressionMatch EntryAttributes::matchReference(const QString& text) { - static const QRegularExpression referenceRegExp( - R"(\{REF:(?[TUPANI])@(?[TUPANIO]):(?[^}]+)\})", + static QRegularExpression referenceRegExp( + "\\{REF:(?[TUPANI])@(?[TUPANIO]):(?[^}]+)\\}", QRegularExpression::CaseInsensitiveOption); return referenceRegExp.match(text); @@ -358,8 +321,3 @@ bool EntryAttributes::isDefaultAttribute(const QString& key) { return DefaultAttributes.contains(key); } - -bool EntryAttributes::isPasskeyAttribute(const QString& key) -{ - return key.startsWith(PasskeyAttribute); -} diff --git a/src/core/EntryAttributes.h b/src/core/EntryAttributes.h index d0767a4c1..a9fcf7f60 100644 --- a/src/core/EntryAttributes.h +++ b/src/core/EntryAttributes.h @@ -1,6 +1,6 @@ /* - * Copyright (C) 2024 KeePassXC Team * 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 @@ -33,8 +33,6 @@ public: explicit EntryAttributes(QObject* parent = nullptr); QList keys() const; bool hasKey(const QString& key) const; - bool hasPasskey() const; - void removePasskeyAttributes(); QList customKeys() const; QString value(const QString& key) const; QList values(const QList& keys) const; @@ -63,21 +61,7 @@ public: static const QString NotesKey; static const QStringList DefaultAttributes; static const QString RememberCmdExecAttr; - static const QString AdditionalUrlAttribute; - - static const QString PasskeyAttribute; - static const QString KPXC_PASSKEY_USERNAME; - static const QString KPEX_PASSKEY_USERNAME; - static const QString KPEX_PASSKEY_CREDENTIAL_ID; - static const QString KPEX_PASSKEY_GENERATED_USER_ID; - static const QString KPEX_PASSKEY_PRIVATE_KEY_PEM; - static const QString KPEX_PASSKEY_RELYING_PARTY; - static const QString KPEX_PASSKEY_USER_HANDLE; - static const QString KPEX_PASSKEY_PRIVATE_KEY_START; - static const QString KPEX_PASSKEY_PRIVATE_KEY_END; - static bool isDefaultAttribute(const QString& key); - static bool isPasskeyAttribute(const QString& key); static const QString WantedFieldGroupName; static const QString SearchInGroupName; diff --git a/src/core/EntrySearcher.cpp b/src/core/EntrySearcher.cpp index cb9e135fe..3292ca112 100644 --- a/src/core/EntrySearcher.cpp +++ b/src/core/EntrySearcher.cpp @@ -148,10 +148,7 @@ bool EntrySearcher::searchEntryImpl(const Entry* entry) auto attributes = QStringList(attributes_keys + entry->attributes()->values(attributes_keys)); auto attachments = QStringList(entry->attachments()->keys()); // Build a group hierarchy to allow searching for e.g. /group1/subgroup* - QString hierarchy; - if (entry->group()) { - hierarchy = entry->group()->hierarchy().join('/').prepend("/"); - } + auto hierarchy = entry->group()->hierarchy().join('/').prepend("/"); // By default, empty term matches every entry. // However when skipping protected fields, we will reject everything instead @@ -193,7 +190,7 @@ bool EntrySearcher::searchEntryImpl(const Entry* entry) // Match against the full hierarchy if the word contains a '/' otherwise just the group name if (term.word.contains('/')) { found = term.regex.match(hierarchy).hasMatch(); - } else if (entry->group()) { + } else { found = term.regex.match(entry->group()->name()).hasMatch(); } break; @@ -203,7 +200,7 @@ bool EntrySearcher::searchEntryImpl(const Entry* entry) case Field::Is: if (term.word.startsWith("expired", Qt::CaseInsensitive)) { auto days = 0; - auto parts = term.word.split("-", Qt::SkipEmptyParts); + auto parts = term.word.split("-", QString::SkipEmptyParts); if (parts.length() >= 2) { days = parts[1].toInt(); } @@ -221,16 +218,6 @@ bool EntrySearcher::searchEntryImpl(const Entry* entry) } found = false; break; - case Field::Has: - if (term.word.compare("totp", Qt::CaseInsensitive) == 0) { - found = entry->hasTotp(); - break; - } - found = false; - break; - case Field::Uuid: - found = term.regex.match(entry->uuidToHex()).hasMatch(); - break; default: // Terms without a specific field try to match title, username, url, and notes found = term.regex.match(entry->resolvePlaceholder(entry->title())).hasMatch() @@ -266,9 +253,7 @@ void EntrySearcher::parseSearchTerms(const QString& searchString) {QStringLiteral("url"), Field::Url}, {QStringLiteral("group"), Field::Group}, {QStringLiteral("tag"), Field::Tag}, - {QStringLiteral("is"), Field::Is}, - {QStringLiteral("has"), Field::Has}, - {QStringLiteral("uuid"), Field::Uuid}}; + {QStringLiteral("is"), Field::Is}}; // Group 1 = modifiers, Group 2 = field, Group 3 = quoted string, Group 4 = unquoted string static QRegularExpression termParser(R"re(([-!*+]+)?(?:(\w*):)?(?:(?=")"((?:[^"\\]|\\.)*)"|([^ ]*))( |$))re"); diff --git a/src/core/EntrySearcher.h b/src/core/EntrySearcher.h index a15916fb0..9376d10de 100644 --- a/src/core/EntrySearcher.h +++ b/src/core/EntrySearcher.h @@ -40,9 +40,7 @@ public: AttributeValue, Group, Tag, - Is, - Has, - Uuid + Is }; struct SearchTerm diff --git a/src/core/Exporter.h b/src/core/Exporter.h new file mode 100644 index 000000000..1dd24b3fb --- /dev/null +++ b/src/core/Exporter.h @@ -0,0 +1,16 @@ +#ifndef KEEPASSX_EXPORTER_H +#define KEEPASSX_EXPORTER_H + +class Database; +class Group; + +class Exporter +{ +public: + virtual Database* exportGroup(Group* group) = 0; + virtual ~Exporter() + { + } +}; + +#endif // KEEPASSX_EXPORTER_H diff --git a/src/core/FileWatcher.cpp b/src/core/FileWatcher.cpp index 3a3c6d83b..c919a64ef 100644 --- a/src/core/FileWatcher.cpp +++ b/src/core/FileWatcher.cpp @@ -79,18 +79,17 @@ void FileWatcher::stop() m_fileChecksum.clear(); m_fileChecksumTimer.stop(); m_fileChangeDelayTimer.stop(); - m_paused = false; } void FileWatcher::pause() { - m_paused = true; + m_ignoreFileChange = true; m_fileChangeDelayTimer.stop(); } void FileWatcher::resume() { - m_paused = false; + m_ignoreFileChange = false; // Add a short delay to start in the next event loop if (!m_fileIgnoreDelayTimer.isActive()) { m_fileIgnoreDelayTimer.start(0); @@ -99,7 +98,7 @@ void FileWatcher::resume() bool FileWatcher::shouldIgnoreChanges() { - return m_filePath.isEmpty() || m_ignoreFileChange || m_paused || m_fileIgnoreDelayTimer.isActive() + return m_filePath.isEmpty() || m_ignoreFileChange || m_fileIgnoreDelayTimer.isActive() || m_fileChangeDelayTimer.isActive(); } @@ -117,9 +116,9 @@ void FileWatcher::checkFileChanged() // Prevent reentrance m_ignoreFileChange = true; - AsyncTask::runThenCallback([this] { return calculateChecksum(); }, + AsyncTask::runThenCallback([=] { return calculateChecksum(); }, this, - [this](const QByteArray& checksum) { + [=](QByteArray checksum) { if (checksum != m_fileChecksum) { m_fileChecksum = checksum; m_fileChangeDelayTimer.start(0); @@ -132,7 +131,7 @@ void FileWatcher::checkFileChanged() QByteArray FileWatcher::calculateChecksum() { QFile file(m_filePath); - if (!m_filePath.isEmpty() && file.open(QFile::ReadOnly)) { + if (file.open(QFile::ReadOnly)) { QCryptographicHash hash(QCryptographicHash::Sha256); if (m_fileChecksumSizeBytes > 0) { hash.addData(file.read(m_fileChecksumSizeBytes)); diff --git a/src/core/FileWatcher.h b/src/core/FileWatcher.h index 7a5649764..27159d17a 100644 --- a/src/core/FileWatcher.h +++ b/src/core/FileWatcher.h @@ -56,7 +56,6 @@ private: QTimer m_fileChecksumTimer; int m_fileChecksumSizeBytes = -1; bool m_ignoreFileChange = false; - bool m_paused = false; }; #endif // KEEPASSXC_FILEWATCHER_H diff --git a/src/core/Global.h b/src/core/Global.h index 9630f2f73..e9a4db739 100644 --- a/src/core/Global.h +++ b/src/core/Global.h @@ -21,7 +21,6 @@ #define KEEPASSX_GLOBAL_H #include -#include #if defined(Q_OS_WIN) #if defined(KEEPASSX_BUILDING_CORE) @@ -43,23 +42,6 @@ #define FILE_CASE_SENSITIVE Qt::CaseSensitive #endif -#if QT_VERSION < QT_VERSION_CHECK(5, 14, 0) -// "Backport" a few things to the 'Qt' namespace as required for older Qt -// versions. -namespace Qt -{ - const QString::SplitBehavior SkipEmptyParts = QString::SkipEmptyParts; - inline QTextStream& endl(QTextStream& s) - { - return ::endl(s); - } - inline QTextStream& flush(QTextStream& s) - { - return ::flush(s); - } -} // namespace Qt -#endif - static const auto TRUE_STR = QStringLiteral("true"); static const auto FALSE_STR = QStringLiteral("false"); diff --git a/src/core/Group.cpp b/src/core/Group.cpp index b7182740f..bb2094e6c 100644 --- a/src/core/Group.cpp +++ b/src/core/Group.cpp @@ -131,19 +131,6 @@ QString Group::tags() const return m_data.tags; } -QString Group::fullPath() const -{ - QString fullPath; - auto group = this; - - do { - fullPath.insert(0, "/" + group->name()); - group = group->parentGroup(); - } while (group); - - return fullPath; -} - int Group::iconNumber() const { return m_data.iconNumber; @@ -180,7 +167,7 @@ QString Group::effectiveAutoTypeSequence() const const Group* group = this; do { if (group->autoTypeEnabled() == Group::Disable) { - return {}; + return QString(); } sequence = group->defaultAutoTypeSequence(); @@ -223,16 +210,18 @@ Entry* Group::lastTopVisibleEntry() const bool Group::isRecycled() const { auto group = this; - auto db = group->database(); - if (db) { - auto recycleBin = db->metadata()->recycleBin(); - do { - if (group == recycleBin) { + 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 = group->m_parent; + } while (group && group->m_parent && group->m_parent != group->m_db->rootGroup()); return false; } @@ -247,20 +236,6 @@ bool Group::isEmpty() const return !hasChildren() && m_entries.isEmpty(); } -// TODO: Refactor this when KeeShare is refactored -bool Group::isShared() const -{ - auto group = this; - do { - if (group->customData()->contains("KeeShare/Reference")) { - return true; - } - group = group->m_parent; - } while (group); - - return false; -} - CustomData* Group::customData() { return m_customData; @@ -300,21 +275,6 @@ void Group::setCustomDataTriState(const QString& key, const Group::TriState& val } } -// Note that this returns an empty string both if the key is missing *or* if the key is present but value is empty. -QString Group::resolveCustomDataString(const QString& key, bool checkParent) const -{ - // If not defined, check our parent up to the root group - if (!m_customData->contains(key)) { - if (!m_parent || !checkParent) { - return QString(); - } else { - return m_parent->resolveCustomDataString(key); - } - } - - return m_customData->value(key); -} - bool Group::equals(const Group* other, CompareItemOptions options) const { if (!other) { @@ -931,7 +891,7 @@ Group* Group::findChildByName(const QString& name) */ Group* Group::clone(Entry::CloneFlags entryFlags, Group::CloneFlags groupFlags) const { - auto clonedGroup = new Group(); + Group* clonedGroup = new Group(); clonedGroup->setUpdateTimeinfo(false); diff --git a/src/core/Group.h b/src/core/Group.h index 95489bc59..ab7212886 100644 --- a/src/core/Group.h +++ b/src/core/Group.h @@ -39,8 +39,11 @@ public: 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 applying deletions + Synchronize, // merge history keeping most recent as top entry and appling deletions }; enum CloneFlag @@ -75,14 +78,13 @@ public: }; Group(); - ~Group() override; + ~Group(); const QUuid& uuid() const; const QString uuidToHex() const; QString name() const; QString notes() const; QString tags() const; - QString fullPath() const; int iconNumber() const; const QUuid& iconUuid() const; const TimeInfo& timeInfo() const; @@ -98,12 +100,10 @@ public: bool isExpired() const; bool isRecycled() const; bool isEmpty() const; - bool isShared() const; CustomData* customData(); const CustomData* customData() const; Group::TriState resolveCustomDataTriState(const QString& key, bool checkParent = true) const; void setCustomDataTriState(const QString& key, const Group::TriState& value); - QString resolveCustomDataString(const QString& key, bool checkParent = true) const; const Group* previousParentGroup() const; QUuid previousParentGroupUuid() const; @@ -155,6 +155,7 @@ public: const QList& children() const; QList entries(); const QList& entries() const; + Entry* findEntryRecursive(const QString& text, EntryReferenceType referenceType, Group* group = nullptr); QList referencesRecursive(const Entry* entry) const; QList entriesRecursive(bool includeHistoryItems = false) const; QList groupsRecursive(bool includeSelf) const; @@ -228,7 +229,9 @@ private: bool m_updateTimeinfo; - friend Group* Database::setRootGroup(Group* group); + friend void Database::setRootGroup(Group* group); + friend Entry::~Entry(); + friend void Entry::setGroup(Group* group, bool trackPrevious); }; Q_DECLARE_OPERATORS_FOR_FLAGS(Group::CloneFlags) diff --git a/src/networking/HibpDownloader.cpp b/src/core/HibpDownloader.cpp similarity index 99% rename from src/networking/HibpDownloader.cpp rename to src/core/HibpDownloader.cpp index 8b09ce2c4..9ff181093 100644 --- a/src/networking/HibpDownloader.cpp +++ b/src/core/HibpDownloader.cpp @@ -16,7 +16,7 @@ */ #include "HibpDownloader.h" -#include "NetworkManager.h" +#include "core/NetworkManager.h" #include #include diff --git a/src/networking/HibpDownloader.h b/src/core/HibpDownloader.h similarity index 97% rename from src/networking/HibpDownloader.h rename to src/core/HibpDownloader.h index ccdc393ff..f8e66baf3 100644 --- a/src/networking/HibpDownloader.h +++ b/src/core/HibpDownloader.h @@ -62,6 +62,8 @@ private slots: void fetchReadyRead(); private: + void fetchPassword(const QString& password); + QStringList m_pwdsToTry; // The list of remaining passwords to validate QHash> m_replies; }; diff --git a/src/core/InactivityTimer.cpp b/src/core/InactivityTimer.cpp index 501db50b5..85c58d269 100644 --- a/src/core/InactivityTimer.cpp +++ b/src/core/InactivityTimer.cpp @@ -20,28 +20,28 @@ #include #include -namespace -{ - // Minimum timeout is 10 seconds - constexpr int MIN_TIMEOUT = 10000; -} // namespace - InactivityTimer::InactivityTimer(QObject* parent) : QObject(parent) , m_timer(new QTimer(this)) + , m_active(false) { - m_timer->setSingleShot(false); + m_timer->setSingleShot(true); connect(m_timer, SIGNAL(timeout()), SLOT(timeout())); } -void InactivityTimer::activate(int inactivityTimeout) +void InactivityTimer::setInactivityTimeout(int inactivityTimeout) +{ + Q_ASSERT(inactivityTimeout > 0); + + m_timer->setInterval(inactivityTimeout); +} + +void InactivityTimer::activate() { if (!m_active) { qApp->installEventFilter(this); } m_active = true; - m_resetBlocked = false; - m_timer->setInterval(qMax(MIN_TIMEOUT, inactivityTimeout)); m_timer->start(); } @@ -54,15 +54,12 @@ void InactivityTimer::deactivate() bool InactivityTimer::eventFilter(QObject* watched, QEvent* event) { - const auto type = event->type(); + const QEvent::Type type = event->type(); // clang-format off - if (!m_resetBlocked && - ((type >= QEvent::MouseButtonPress && type <= QEvent::KeyRelease) || - (type >= QEvent::HoverEnter && type <= QEvent::HoverMove) || - type == QEvent::Wheel)) { + if ((type >= QEvent::MouseButtonPress && type <= QEvent::KeyRelease) + || (type >= QEvent::HoverEnter && type <= QEvent::HoverMove) + || (type == QEvent::Wheel)) { m_timer->start(); - m_resetBlocked = true; - QTimer::singleShot(500, this, [this]() { m_resetBlocked = false; }); } // clang-format on @@ -76,7 +73,7 @@ void InactivityTimer::timeout() return; } - if (m_active) { + if (m_active && !m_timer->isActive()) { emit inactivityDetected(); } diff --git a/src/core/InactivityTimer.h b/src/core/InactivityTimer.h index c19a4b776..b9de80fb4 100644 --- a/src/core/InactivityTimer.h +++ b/src/core/InactivityTimer.h @@ -29,22 +29,22 @@ class InactivityTimer : public QObject public: explicit InactivityTimer(QObject* parent = nullptr); - void activate(int inactivityTimeout); + void setInactivityTimeout(int inactivityTimeout); + void activate(); void deactivate(); signals: void inactivityDetected(); protected: - bool eventFilter(QObject* watched, QEvent* event) override; + bool eventFilter(QObject* watched, QEvent* event); private slots: void timeout(); private: QTimer* m_timer; - bool m_active = false; - bool m_resetBlocked = false; + bool m_active; QMutex m_emitMutx; }; diff --git a/src/gui/entry/attachments/AttachmentTypes.h b/src/core/ListDeleter.h similarity index 63% rename from src/gui/entry/attachments/AttachmentTypes.h rename to src/core/ListDeleter.h index 9d63bc23e..6f289546f 100644 --- a/src/gui/entry/attachments/AttachmentTypes.h +++ b/src/core/ListDeleter.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2025 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 @@ -15,23 +15,25 @@ * along with this program. If not, see . */ -#pragma once +#ifndef KEEPASSX_LISTDELETER_H +#define KEEPASSX_LISTDELETER_H -#include -#include +#include -namespace attachments +template class ListDeleter { - struct Attachment +public: + inline explicit ListDeleter(QList* list) + : m_list(list) { - QString name; - QByteArray data; - }; - - enum class OpenMode + } + inline ~ListDeleter() { - ReadOnly, - ReadWrite - }; + qDeleteAll(*m_list); + } -} // namespace attachments +private: + QList* m_list; +}; + +#endif // KEEPASSX_LISTDELETER_H diff --git a/src/gui/osutils/macutils/MacPasteboard.cpp b/src/core/MacPasteboard.cpp similarity index 100% rename from src/gui/osutils/macutils/MacPasteboard.cpp rename to src/core/MacPasteboard.cpp diff --git a/src/gui/osutils/macutils/MacPasteboard.h b/src/core/MacPasteboard.h similarity index 100% rename from src/gui/osutils/macutils/MacPasteboard.h rename to src/core/MacPasteboard.h diff --git a/src/core/Merger.cpp b/src/core/Merger.cpp index 31da6e106..fd30da7aa 100644 --- a/src/core/Merger.cpp +++ b/src/core/Merger.cpp @@ -17,9 +17,7 @@ #include "Merger.h" -#include "core/Global.h" #include "core/Metadata.h" -#include "core/Tools.h" Merger::Merger(const Database* sourceDb, Database* targetDb) : m_mode(Group::Default) @@ -59,11 +57,6 @@ void Merger::resetForcedMergeMode() m_mode = Group::Default; } -void Merger::setSkipDatabaseCustomData(bool state) -{ - m_skipCustomData = state; -} - QStringList Merger::merge() { // Order of merge steps is important - it is possible that we @@ -165,6 +158,13 @@ Merger::resolveGroupConflict(const MergeContext& context, const Group* sourceChi 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); @@ -257,6 +257,76 @@ void Merger::eraseGroup(Group* group) 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, @@ -268,7 +338,6 @@ Merger::ChangeList Merger::resolveEntryConflict_MergeHistories(const MergeContex const int comparison = compare(targetEntry->timeInfo().lastModificationTime(), sourceEntry->timeInfo().lastModificationTime(), CompareItemIgnoreMilliseconds); - const int maxItems = targetEntry->database()->metadata()->historyMaxItems(); if (comparison < 0) { Group* currentGroup = targetEntry->group(); Entry* clonedEntry = sourceEntry->clone(Entry::CloneIncludeHistory); @@ -277,15 +346,15 @@ Merger::ChangeList Merger::resolveEntryConflict_MergeHistories(const MergeContex qPrintable(sourceEntry->title()), qPrintable(currentGroup->name())); changes << tr("Synchronizing from newer source %1 [%2]").arg(targetEntry->title(), targetEntry->uuidToHex()); - mergeHistory(targetEntry, clonedEntry, mergeMethod, maxItems); - eraseEntry(targetEntry); 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, maxItems); + const bool changed = mergeHistory(sourceEntry, targetEntry, mergeMethod); if (changed) { changes << tr("Synchronizing from older source %1 [%2]").arg(targetEntry->title(), targetEntry->uuidToHex()); @@ -297,18 +366,41 @@ Merger::ChangeList Merger::resolveEntryConflict_MergeHistories(const MergeContex 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; - return resolveEntryConflict_MergeHistories(context, sourceEntry, targetEntry, mergeMode); + 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, - const int maxItems) +bool Merger::mergeHistory(const Entry* sourceEntry, Entry* targetEntry, Group::MergeMode mergeMethod) { Q_UNUSED(mergeMethod); const auto targetHistoryItems = targetEntry->historyItems(); @@ -316,8 +408,8 @@ bool Merger::mergeHistory(const Entry* sourceEntry, const int comparison = compare(sourceEntry->timeInfo().lastModificationTime(), targetEntry->timeInfo().lastModificationTime(), CompareItemIgnoreMilliseconds); - const bool preferLocal = comparison < 0; - const bool preferRemote = comparison > 0; + const bool preferLocal = mergeMethod == Group::KeepLocal || comparison < 0; + const bool preferRemote = mergeMethod == Group::KeepRemote || comparison > 0; QMap merged; for (Entry* historyItem : targetHistoryItems) { @@ -381,6 +473,7 @@ bool Merger::mergeHistory(const Entry* sourceEntry, } 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); @@ -475,7 +568,7 @@ Merger::ChangeList Merger::mergeDeletions(const MergeContext& context) while (!groups.isEmpty()) { auto* group = groups.takeFirst(); - if (Tools::asSet(group->children()).intersects(Tools::asSet(groups))) { + 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; @@ -521,11 +614,6 @@ Merger::ChangeList Merger::mergeMetadata(const MergeContext& context) } } - // Some merges shouldn't modify the database custom data - if (m_skipCustomData) { - return changes; - } - // Merge Custom Data if source is newer const auto targetCustomDataModificationTime = targetMetadata->customData()->lastModified(); const auto sourceCustomDataModificationTime = sourceMetadata->customData()->lastModified(); @@ -547,8 +635,8 @@ Merger::ChangeList Merger::mergeMetadata(const MergeContext& context) // Transfer new/existing keys for (const auto& key : sourceCustomDataKeys) { - // Don't merge auto-generated keys - if (sourceMetadata->customData()->isAutoGenerated(key)) { + // Don't merge this meta field, it is updated automatically. + if (key == CustomData::LastModified) { continue; } diff --git a/src/core/Merger.h b/src/core/Merger.h index 9669e89e3..4b277f956 100644 --- a/src/core/Merger.h +++ b/src/core/Merger.h @@ -31,7 +31,6 @@ public: Merger(const Group* sourceGroup, Group* targetGroup); void setForcedMergeMode(Group::MergeMode mode); void resetForcedMergeMode(); - void setSkipDatabaseCustomData(bool state); QStringList merge(); private: @@ -50,15 +49,22 @@ private: ChangeList mergeGroup(const MergeContext& context); ChangeList mergeDeletions(const MergeContext& context); ChangeList mergeMetadata(const MergeContext& context); - bool mergeHistory(const Entry* sourceEntry, Entry* targetEntry, Group::MergeMode mergeMethod, const int maxItems); + 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 elimination of cloned entries + // 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 elimination of cloned entries + // 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, @@ -67,7 +73,6 @@ private: private: MergeContext m_context; Group::MergeMode m_mode; - bool m_skipCustomData = false; }; #endif // KEEPASSXC_MERGER_H diff --git a/src/core/Metadata.cpp b/src/core/Metadata.cpp index 8e714e0f2..52a615e28 100644 --- a/src/core/Metadata.cpp +++ b/src/core/Metadata.cpp @@ -28,17 +28,10 @@ const int Metadata::DefaultHistoryMaxItems = 10; const int Metadata::DefaultHistoryMaxSize = 6 * 1024 * 1024; -const int Metadata::DefaultAutosaveDelayMin = 0; // Fallback icon for return by reference static const Metadata::CustomIconData NULL_ICON{}; -namespace customDataKeys -{ - static const QString savedSearch = QStringLiteral("KPXC_SavedSearch"); - static const QString autosaveDelay = QStringLiteral("KPXC_autosaveDelayMin"); -}; // namespace customDataKeys - Metadata::Metadata(QObject* parent) : ModifiableObject(parent) , m_customData(new CustomData(this)) @@ -272,19 +265,6 @@ int Metadata::historyMaxSize() const return m_data.historyMaxSize; } -int Metadata::autosaveDelayMin() const -{ - QString autosaveDelayMinStr = m_customData->value(customDataKeys::autosaveDelay); - if (autosaveDelayMinStr.isNull()) { - // data is not set yet, use default - return Metadata::DefaultAutosaveDelayMin; - } - bool ok; // check for QString to int op failure - int autosaveDelayMin = autosaveDelayMinStr.toInt(&ok); - Q_ASSERT(ok); - return autosaveDelayMin; -} - CustomData* Metadata::customData() { return m_customData; @@ -498,12 +478,6 @@ void Metadata::setHistoryMaxSize(int value) set(m_data.historyMaxSize, value); } -void Metadata::setAutosaveDelayMin(int value) -{ - Q_ASSERT(value >= 0 && value <= 420000000); - m_customData->set(customDataKeys::autosaveDelay, QString::number(value)); -} - QDateTime Metadata::settingsChanged() const { return m_settingsChanged; @@ -520,7 +494,7 @@ void Metadata::addSavedSearch(const QString& name, const QString& searchtext) auto searches = savedSearches(); searches.insert(name, searchtext); auto json = QJsonDocument::fromVariant(searches); - m_customData->set(customDataKeys::savedSearch, json.toJson()); + m_customData->set("KPXC_SavedSearch", json.toJson()); } void Metadata::deleteSavedSearch(const QString& name) @@ -528,12 +502,12 @@ void Metadata::deleteSavedSearch(const QString& name) auto searches = savedSearches(); searches.remove(name); auto json = QJsonDocument::fromVariant(searches); - m_customData->set(customDataKeys::savedSearch, json.toJson()); + m_customData->set("KPXC_SavedSearch", json.toJson()); } QVariantMap Metadata::savedSearches() { - auto searches = m_customData->value(customDataKeys::savedSearch); + auto searches = m_customData->value("KPXC_SavedSearch"); auto json = QJsonDocument::fromJson(searches.toUtf8()); return json.toVariant().toMap(); } diff --git a/src/core/Metadata.h b/src/core/Metadata.h index 6e80ebc09..ccefdb1c8 100644 --- a/src/core/Metadata.h +++ b/src/core/Metadata.h @@ -109,13 +109,11 @@ public: int databaseKeyChangeForce() const; int historyMaxItems() const; int historyMaxSize() const; - int autosaveDelayMin() const; CustomData* customData(); const CustomData* customData() const; static const int DefaultHistoryMaxItems; static const int DefaultHistoryMaxSize; - static const int DefaultAutosaveDelayMin; void setGenerator(const QString& value); void setName(const QString& value); @@ -152,7 +150,6 @@ public: void setMasterKeyChangeForce(int value); void setHistoryMaxItems(int value); void setHistoryMaxSize(int value); - void setAutosaveDelayMin(int value); void setUpdateDatetime(bool value); void addSavedSearch(const QString& name, const QString& searchtext); void deleteSavedSearch(const QString& name); diff --git a/src/networking/NetworkManager.cpp b/src/core/NetworkManager.cpp similarity index 100% rename from src/networking/NetworkManager.cpp rename to src/core/NetworkManager.cpp diff --git a/src/networking/NetworkManager.h b/src/core/NetworkManager.h similarity index 100% rename from src/networking/NetworkManager.h rename to src/core/NetworkManager.h diff --git a/src/core/PassphraseGenerator.cpp b/src/core/PassphraseGenerator.cpp index 07e7a31bf..ef1d867e2 100644 --- a/src/core/PassphraseGenerator.cpp +++ b/src/core/PassphraseGenerator.cpp @@ -18,14 +18,12 @@ #include "PassphraseGenerator.h" #include -#include #include #include #include "core/Resources.h" #include "crypto/Random.h" -const int PassphraseGenerator::DefaultWordCount = 7; const char* PassphraseGenerator::DefaultSeparator = " "; const char* PassphraseGenerator::DefaultWordList = "eff_large.wordlist"; @@ -62,17 +60,14 @@ void PassphraseGenerator::setWordCase(PassphraseWordCase wordCase) void PassphraseGenerator::setWordList(const QString& path) { m_wordlist.clear(); - // Initially load wordlist into a set to avoid duplicates - QSet wordset; QFile file(path); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { - qWarning("Couldn't load passphrase wordlist: %s", qPrintable(path)); + qWarning("Couldn't load passphrase wordlist."); return; } QTextStream in(&file); - in.setCodec("UTF-8"); QString line = in.readLine(); bool isSigned = line.startsWith("-----BEGIN PGP SIGNED MESSAGE-----"); if (isSigned) { @@ -92,15 +87,14 @@ void PassphraseGenerator::setWordList(const QString& path) line = line.trimmed(); line.replace(rx, "\\2"); if (!line.isEmpty()) { - wordset.insert(line); + m_wordlist.append(line); } line = in.readLine(); } - m_wordlist = wordset.toList(); - - if (!isWordListValid()) { - qWarning("Wordlist is less than minimum acceptable size: %s", qPrintable(path)); + if (m_wordlist.size() < 4000) { + qWarning("Wordlist too short!"); + return; } } @@ -117,15 +111,18 @@ void PassphraseGenerator::setWordSeparator(const QString& separator) QString PassphraseGenerator::generatePassphrase() const { - if (m_wordlist.isEmpty()) { - return {}; + QString tmpWord; + Q_ASSERT(isValid()); + + // In case there was an error loading the wordlist + if (m_wordlist.length() == 0) { + return QString(); } QStringList words; - int randomIndex = randomGen()->randomUInt(static_cast(m_wordCount)); for (int i = 0; i < m_wordCount; ++i) { - int wordIndex = randomGen()->randomUInt(static_cast(m_wordlist.size())); - auto tmpWord = m_wordlist.at(wordIndex); + int wordIndex = randomGen()->randomUInt(static_cast(m_wordlist.length())); + tmpWord = m_wordlist.at(wordIndex); // convert case switch (m_wordCase) { @@ -135,10 +132,8 @@ QString PassphraseGenerator::generatePassphrase() const case TITLECASE: tmpWord = tmpWord.replace(0, 1, tmpWord.left(1).toUpper()); break; - case MIXEDCASE: - tmpWord = i == randomIndex ? tmpWord.toUpper() : tmpWord.toLower(); - break; case LOWERCASE: + default: tmpWord = tmpWord.toLower(); break; } @@ -148,7 +143,11 @@ QString PassphraseGenerator::generatePassphrase() const return words.join(m_separator); } -bool PassphraseGenerator::isWordListValid() const +bool PassphraseGenerator::isValid() const { - return m_wordlist.size() >= m_minWordListSize; + if (m_wordCount == 0) { + return false; + } + + return m_wordlist.size() >= 1000; } diff --git a/src/core/PassphraseGenerator.h b/src/core/PassphraseGenerator.h index 5d404c990..bb282f59b 100644 --- a/src/core/PassphraseGenerator.h +++ b/src/core/PassphraseGenerator.h @@ -18,7 +18,7 @@ #ifndef KEEPASSX_PASSPHRASEGENERATOR_H #define KEEPASSX_PASSPHRASEGENERATOR_H -#include +#include class PassphraseGenerator { @@ -30,8 +30,7 @@ public: { LOWERCASE, UPPERCASE, - TITLECASE, - MIXEDCASE + TITLECASE }; double estimateEntropy(int wordCount = 0); @@ -40,22 +39,19 @@ public: void setWordCase(PassphraseWordCase wordCase); void setDefaultWordList(); void setWordSeparator(const QString& separator); - bool isWordListValid() const; + bool isValid() const; QString generatePassphrase() const; - static const int DefaultWordCount; + static constexpr int DefaultWordCount = 7; static const char* DefaultSeparator; static const char* DefaultWordList; private: int m_wordCount; - int m_minWordListSize = 1296; PassphraseWordCase m_wordCase; QString m_separator; - QList m_wordlist; - - friend class TestPassphraseGenerator; + QVector m_wordlist; }; #endif // KEEPASSX_PASSPHRASEGENERATOR_H diff --git a/src/core/PasswordGenerator.cpp b/src/core/PasswordGenerator.cpp index aa0f3e717..01641bc80 100644 --- a/src/core/PasswordGenerator.cpp +++ b/src/core/PasswordGenerator.cpp @@ -261,10 +261,8 @@ QVector PasswordGenerator::passwordGroups() const if (!m_custom.isEmpty()) { PasswordGroup group; - for (const auto& ch : m_custom) { - if (!group.contains(ch)) { - group.append(ch); - } + for (auto ch : m_custom) { + group.append(ch); } passwordGroups.append(group); diff --git a/src/core/PasswordHealth.cpp b/src/core/PasswordHealth.cpp index 3a2e5571d..3225affb3 100644 --- a/src/core/PasswordHealth.cpp +++ b/src/core/PasswordHealth.cpp @@ -17,7 +17,6 @@ #include -#include "Clock.h" #include "Group.h" #include "PasswordHealth.h" #include "zxcvbn.h" @@ -172,8 +171,8 @@ QSharedPointer HealthChecker::evaluate(const Entry* entry) const if (entry->isExpired()) { health->setScore(0); health->addScoreReason(QObject::tr("Password has expired")); - health->addScoreDetails( - QObject::tr("Password expiry was %1").arg(Clock::toString(entry->timeInfo().expiryTime()))); + health->addScoreDetails(QObject::tr("Password expiry was %1") + .arg(entry->timeInfo().expiryTime().toString(Qt::DefaultLocaleShortDate))); } else if (entry->timeInfo().expires()) { const int days = QDateTime::currentDateTime().daysTo(entry->timeInfo().expiryTime()); if (days <= 30) { @@ -187,8 +186,8 @@ QSharedPointer HealthChecker::evaluate(const Entry* entry) const } health->adjustScore((30 - days) * -2); - health->addScoreDetails( - QObject::tr("Password expires on %1").arg(Clock::toString(entry->timeInfo().expiryTime()))); + health->addScoreDetails(QObject::tr("Password expires on %1") + .arg(entry->timeInfo().expiryTime().toString(Qt::DefaultLocaleShortDate))); if (days <= 2) { health->addScoreReason(QObject::tr("Password is about to expire")); } else if (days <= 10) { diff --git a/src/core/SignalMultiplexer.cpp b/src/core/SignalMultiplexer.cpp index 99f7fab15..d1ed89e30 100644 --- a/src/core/SignalMultiplexer.cpp +++ b/src/core/SignalMultiplexer.cpp @@ -19,7 +19,9 @@ #include "core/Global.h" -SignalMultiplexer::SignalMultiplexer() = default; +SignalMultiplexer::SignalMultiplexer() +{ +} SignalMultiplexer::~SignalMultiplexer() { diff --git a/src/core/TimeDelta.cpp b/src/core/TimeDelta.cpp index 94cea03c8..0037396f6 100644 --- a/src/core/TimeDelta.cpp +++ b/src/core/TimeDelta.cpp @@ -29,22 +29,22 @@ QDateTime operator+(const QDateTime& dateTime, const TimeDelta& delta) TimeDelta TimeDelta::fromHours(int hours) { - return {hours, 0, 0, 0}; + return TimeDelta(hours, 0, 0, 0); } TimeDelta TimeDelta::fromDays(int days) { - return {0, days, 0, 0}; + return TimeDelta(0, days, 0, 0); } TimeDelta TimeDelta::fromMonths(int months) { - return {0, 0, months, 0}; + return TimeDelta(0, 0, months, 0); } TimeDelta TimeDelta::fromYears(int years) { - return {0, 0, 0, years}; + return TimeDelta(0, 0, 0, years); } TimeDelta::TimeDelta() diff --git a/src/core/Tools.cpp b/src/core/Tools.cpp index 814233941..657797116 100644 --- a/src/core/Tools.cpp +++ b/src/core/Tools.cpp @@ -5,7 +5,7 @@ * Copyright (C) 2020 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, * author Giuseppe D'Angelo * Copyright (C) 2021 The Qt Company Ltd. - * Copyright (C) 2023 KeePassXC Team + * Copyright (C) 2021 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 @@ -35,7 +35,6 @@ #include #include #include -#include #include #include #include @@ -78,6 +77,7 @@ namespace Tools #endif debugInfo.append("\n"); +#if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0) debugInfo.append(QObject::tr("Operating system: %1\nCPU architecture: %2\nKernel: %3 %4") .arg(QSysInfo::prettyProductName(), QSysInfo::currentCpuArchitecture(), @@ -85,6 +85,7 @@ namespace Tools QSysInfo::kernelVersion())); debugInfo.append("\n\n"); +#endif QString extensions; #ifdef WITH_XC_AUTOTYPE @@ -93,9 +94,6 @@ namespace Tools #ifdef WITH_XC_BROWSER extensions += "\n- " + QObject::tr("Browser Integration"); #endif -#ifdef WITH_XC_BROWSER_PASSKEYS - extensions += "\n- " + QObject::tr("Passkeys"); -#endif #ifdef WITH_XC_SSHAGENT extensions += "\n- " + QObject::tr("SSH Agent"); #endif @@ -125,7 +123,10 @@ namespace Tools constexpr auto kibibyte = 1024; double size = bytes; - QStringList units = QStringList() << "B" << "KiB" << "MiB" << "GiB"; + QStringList units = QStringList() << "B" + << "KiB" + << "MiB" + << "GiB"; int i = 0; int maxI = units.size() - 1; @@ -134,9 +135,7 @@ namespace Tools i++; } - // do not display decimals for smallest unit bytes identified by index i==0 - const quint32 displayPrecision = (i == 0 ? 0 : precision); - return QString("%1 %2").arg(QLocale().toString(size, 'f', displayPrecision), units.at(i)); + return QString("%1 %2").arg(QLocale().toString(size, 'f', precision), units.at(i)); } QString humanReadableTimeDifference(qint64 seconds) @@ -228,13 +227,6 @@ namespace Tools return regexp.exactMatch(base64); } - bool isAsciiString(const QString& str) - { - constexpr auto pattern = R"(^[\x00-\x7F]+$)"; - QRegularExpression regexp(pattern, QRegularExpression::CaseInsensitiveOption); - return regexp.match(str).hasMatch(); - } - void sleep(int ms) { Q_ASSERT(ms >= 0); @@ -279,6 +271,35 @@ namespace Tools } } + bool checkUrlValid(const QString& urlField) + { + if (urlField.isEmpty() || urlField.startsWith("cmd://", Qt::CaseInsensitive) + || urlField.startsWith("kdbx://", Qt::CaseInsensitive) + || urlField.startsWith("{REF:A", Qt::CaseInsensitive)) { + return true; + } + + QUrl url; + if (urlField.contains("://")) { + url = urlField; + } else { + url = QUrl::fromUserInput(urlField); + } + + if (url.scheme() != "file" && url.host().isEmpty()) { + return false; + } + + // Check for illegal characters. Adds also the wildcard * to the list + QRegularExpression re("[<>\\^`{|}\\*]"); + auto match = re.match(urlField); + if (match.hasMatch()) { + return false; + } + + return true; + } + /**************************************************************************** * * Copyright (C) 2020 Giuseppe D'Angelo . @@ -416,16 +437,6 @@ namespace Tools return subbed; } - QString cleanFilename(QString filename) - { - // Remove forward slash from title on all platforms - filename.replace("/", "_"); - // Remove invalid characters - filename.remove(QRegularExpression("[:*?\"<>|]")); - - return filename.trimmed(); - } - QVariantMap qo2qvm(const QObject* object, const QStringList& ignoredProperties) { QVariantMap result; @@ -447,89 +458,34 @@ namespace Tools QString substituteBackupFilePath(QString pattern, const QString& databasePath) { + // Fail if substitution fails if (databasePath.isEmpty()) { return {}; } - const QString baseName = QFileInfo{databasePath}.completeBaseName(); + // Replace backup pattern + QFileInfo dbFileInfo(databasePath); + QString baseName = dbFileInfo.completeBaseName(); - pattern.replace(QStringLiteral("{DB_FILENAME}"), baseName); + pattern.replace(QString("{DB_FILENAME}"), baseName); - const QDateTime now = Clock::currentDateTime(); - - const QRegularExpression re(R"(\{TIME(?::([^\\{}]*))?\})"); + auto re = QRegularExpression(R"(\{TIME(?::([^\\]*))?\})"); auto match = re.match(pattern); while (match.hasMatch()) { - // Extract time format specifier, or use default value if absent - QString formatSpecifier = "dd_MM_yyyy_hh-mm-ss"; + // Extract time format specifier + auto formatSpecifier = QString("dd_MM_yyyy_hh-mm-ss"); if (!match.captured(1).isEmpty()) { formatSpecifier = match.captured(1); } - const auto replacement = now.toString(formatSpecifier); + auto replacement = Clock::currentDateTime().toString(formatSpecifier); pattern.replace(match.capturedStart(), match.capturedLength(), replacement); match = re.match(pattern); } // Replace escaped braces - pattern.replace(QStringLiteral("\\{"), QStringLiteral("{")); - pattern.replace(QStringLiteral("\\}"), QStringLiteral("}")); + pattern.replace("\\{", "{"); + pattern.replace("\\}", "}"); return pattern; } - - MimeType toMimeType(const QString& mimeName) - { - const static QStringList TextFormats = {"text/", - "application/json", - "application/xml", - "application/soap+xml", - "application/x-yaml", - "application/protobuf", - "application/x-zerosize"}; - const static QStringList HtmlFormats = {"text/html"}; - const static QStringList MarkdownFormats = {"text/markdown"}; - const static QStringList ImageFormats = {"image/"}; - - static auto isCompatible = [](const QString& format, const QStringList& list) { - return std::any_of( - list.cbegin(), list.cend(), [&format](const auto& item) { return format.startsWith(item); }); - }; - - if (isCompatible(mimeName, ImageFormats)) { - return MimeType::Image; - } - - if (isCompatible(mimeName, TextFormats)) { - if (isCompatible(mimeName, HtmlFormats)) { - return MimeType::Html; - } else if (isCompatible(mimeName, MarkdownFormats)) { - return MimeType::Markdown; - } - - return MimeType::PlainText; - } - - return MimeType::Unknown; - } - - MimeType getMimeType(const QByteArray& data) - { - QMimeDatabase mimeDb; - const auto mime = mimeDb.mimeTypeForData(data); - return toMimeType(mime.name()); - } - - MimeType getMimeType(const QFileInfo& fileInfo) - { - QMimeDatabase mimeDb; - const auto mime = mimeDb.mimeTypeForFile(fileInfo); - return toMimeType(mime.name()); - } - - bool isTextMimeType(MimeType mimeType) - { - return mimeType == Tools::MimeType::PlainText || mimeType == Tools::MimeType::Html - || mimeType == Tools::MimeType::Markdown; - } - } // namespace Tools diff --git a/src/core/Tools.h b/src/core/Tools.h index ee5ef612e..a8094d0a3 100644 --- a/src/core/Tools.h +++ b/src/core/Tools.h @@ -1,6 +1,6 @@ /* - * Copyright (C) 2024 KeePassXC Team * Copyright (C) 2012 Felix Geyer + * Copyright (C) 2021 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,10 +22,7 @@ #include "core/Global.h" #include -#include -#include #include -#include class QIODevice; class QRegularExpression; @@ -39,24 +36,14 @@ namespace Tools bool readAllFromDevice(QIODevice* device, QByteArray& data); bool isHex(const QByteArray& ba); bool isBase64(const QByteArray& ba); - bool isAsciiString(const QString& str); void sleep(int ms); void wait(int ms); + bool checkUrlValid(const QString& urlField); QString uuidToHex(const QUuid& uuid); QUuid hexToUuid(const QString& uuid); bool isValidUuid(const QString& uuidStr); QString envSubstitute(const QString& filepath, QProcessEnvironment environment = QProcessEnvironment::systemEnvironment()); - QString cleanFilename(QString filename); - - template QSet asSet(const QList& a) - { -#if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0) - return QSet(a.begin(), a.end()); -#else - return QSet::fromList(a); -#endif - } /** * Escapes all characters in regex such that they do not receive any special treatment when used @@ -99,37 +86,23 @@ namespace Tools } } - // Checks if all values are found inside the list. Returns a list of values not found. - template QList getMissingValuesFromList(const QList& list, const QList& required) + inline int qtRuntimeVersion() { - QList missingValues; - for (const auto& r : required) { - if (!list.contains(r)) { - missingValues << r; - } - } + // 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 missingValues; + return version; } QVariantMap qo2qvm(const QObject* object, const QStringList& ignoredProperties = {"objectName"}); QString substituteBackupFilePath(QString pattern, const QString& databasePath); - - enum class MimeType : uint8_t - { - Image, - PlainText, - Html, - Markdown, - Unknown - }; - - MimeType toMimeType(const QString& mimeName); - MimeType getMimeType(const QByteArray& data); - MimeType getMimeType(const QFileInfo& fileInfo); - bool isTextMimeType(MimeType mimeType); - } // namespace Tools #endif // KEEPASSX_TOOLS_H diff --git a/src/core/Translator.cpp b/src/core/Translator.cpp index 2101e8dc1..ac2072bf4 100644 --- a/src/core/Translator.cpp +++ b/src/core/Translator.cpp @@ -25,22 +25,25 @@ #include #include +#include "config-keepassx.h" +#include "core/Config.h" #include "core/Resources.h" /** * Install all KeePassXC and Qt translators. */ -void Translator::installTranslators(const QString& uiLanguage) +void Translator::installTranslators() { QStringList languages; - if (uiLanguage.isEmpty() || uiLanguage == "system") { + QString languageSetting = config()->get(Config::GUI_Language).toString(); + if (languageSetting.isEmpty() || languageSetting == "system") { // NOTE: this is a workaround for the terrible way Qt loads languages // using the QLocale::uiLanguages() approach. Instead, we search each // language and all country variants in order before moving to the next. QLocale locale; languages = locale.uiLanguages(); } else { - languages << uiLanguage; + languages << languageSetting; } // Always try to load english last diff --git a/src/core/Translator.h b/src/core/Translator.h index 3e073c172..af699ac90 100644 --- a/src/core/Translator.h +++ b/src/core/Translator.h @@ -19,12 +19,11 @@ #define KEEPASSX_TRANSLATOR_H #include -#include class Translator { public: - static void installTranslators(const QString& uiLanguage = "system"); + static void installTranslators(); static QList> availableLanguages(); private: diff --git a/src/crypto/CryptoHash.cpp b/src/crypto/CryptoHash.cpp index a1dc6595e..5177bb86f 100644 --- a/src/crypto/CryptoHash.cpp +++ b/src/crypto/CryptoHash.cpp @@ -106,7 +106,7 @@ QByteArray CryptoHash::result() const } else if (d->hashFunction) { result = d->hashFunction->final(); } - return {reinterpret_cast(result.data()), int(result.size())}; + return QByteArray(reinterpret_cast(result.data()), result.size()); } QByteArray CryptoHash::hash(const QByteArray& data, Algorithm algo) diff --git a/src/crypto/SymmetricCipher.cpp b/src/crypto/SymmetricCipher.cpp index 33e61aa4f..1253763bc 100644 --- a/src/crypto/SymmetricCipher.cpp +++ b/src/crypto/SymmetricCipher.cpp @@ -34,11 +34,7 @@ bool SymmetricCipher::init(Mode mode, Direction direction, const QByteArray& key try { auto botanMode = modeToString(mode); auto botanDirection = -#ifdef WITH_XC_BOTAN3 - (direction == SymmetricCipher::Encrypt ? Botan::Cipher_Dir::Encryption : Botan::Cipher_Dir::Decryption); -#else (direction == SymmetricCipher::Encrypt ? Botan::Cipher_Dir::ENCRYPTION : Botan::Cipher_Dir::DECRYPTION); -#endif auto cipher = Botan::Cipher_Mode::create_or_throw(botanMode.toStdString(), botanDirection); m_cipher.reset(cipher.release()); @@ -63,15 +59,15 @@ bool SymmetricCipher::init(Mode mode, Direction direction, const QByteArray& key return true; } -bool SymmetricCipher::isInitialized() const +bool SymmetricCipher::isInitalized() const { return m_cipher; } bool SymmetricCipher::process(char* data, int len) { - Q_ASSERT(isInitialized()); - if (!isInitialized()) { + Q_ASSERT(isInitalized()); + if (!isInitalized()) { m_error = QObject::tr("Cipher not initialized prior to use."); return false; } @@ -97,8 +93,8 @@ bool SymmetricCipher::process(QByteArray& data) bool SymmetricCipher::finish(QByteArray& data) { - Q_ASSERT(isInitialized()); - if (!isInitialized()) { + Q_ASSERT(isInitalized()); + if (!isInitalized()) { m_error = QObject::tr("Cipher not initialized prior to use."); return false; } @@ -121,7 +117,7 @@ bool SymmetricCipher::finish(QByteArray& data) void SymmetricCipher::reset() { m_error.clear(); - if (isInitialized()) { + if (isInitalized()) { m_cipher.reset(); } } diff --git a/src/crypto/SymmetricCipher.h b/src/crypto/SymmetricCipher.h index 224e8baa9..e18f623f3 100644 --- a/src/crypto/SymmetricCipher.h +++ b/src/crypto/SymmetricCipher.h @@ -52,7 +52,7 @@ public: explicit SymmetricCipher() = default; ~SymmetricCipher() = default; - bool isInitialized() const; + bool isInitalized() const; Q_REQUIRED_RESULT bool init(Mode mode, Direction direction, const QByteArray& key, const QByteArray& iv); Q_REQUIRED_RESULT bool process(char* data, int len); Q_REQUIRED_RESULT bool process(QByteArray& data); diff --git a/src/crypto/kdf/Argon2Kdf.cpp b/src/crypto/kdf/Argon2Kdf.cpp index f7b028ffe..fe2d5aa69 100644 --- a/src/crypto/kdf/Argon2Kdf.cpp +++ b/src/crypto/kdf/Argon2Kdf.cpp @@ -33,11 +33,11 @@ */ Argon2Kdf::Argon2Kdf(Type type) : Kdf::Kdf(type == Type::Argon2d ? KeePass2::KDF_ARGON2D : KeePass2::KDF_ARGON2ID) - , m_version(ARGON2_DEFAULT_VERSION) - , m_memory(ARGON2_DEFAULT_MEMORY) - , m_parallelism(qMin(QThread::idealThreadCount(), ARGON2_DEFAULT_PARALLELISM)) + , m_version(0x13) + , m_memory(1 << 16) + , m_parallelism(static_cast(QThread::idealThreadCount())) { - m_rounds = ARGON2_DEFAULT_ROUNDS; + m_rounds = 10; } quint32 Argon2Kdf::version() const @@ -52,7 +52,7 @@ bool Argon2Kdf::setVersion(quint32 version) m_version = version; return true; } - m_version = ARGON2_DEFAULT_VERSION; + m_version = 0x13; return false; } @@ -73,7 +73,7 @@ bool Argon2Kdf::setMemory(quint64 kibibytes) m_memory = kibibytes; return true; } - m_memory = ARGON2_DEFAULT_MEMORY; + m_memory = 16; return false; } @@ -89,7 +89,7 @@ bool Argon2Kdf::setParallelism(quint32 threads) m_parallelism = threads; return true; } - m_parallelism = ARGON2_DEFAULT_PARALLELISM; + m_parallelism = 1; return false; } diff --git a/src/crypto/kdf/Argon2Kdf.h b/src/crypto/kdf/Argon2Kdf.h index c56e5f9a2..b5881b45b 100644 --- a/src/crypto/kdf/Argon2Kdf.h +++ b/src/crypto/kdf/Argon2Kdf.h @@ -20,11 +20,6 @@ #include "Kdf.h" -constexpr auto ARGON2_DEFAULT_VERSION = 0x13; -constexpr auto ARGON2_DEFAULT_ROUNDS = 10; -constexpr auto ARGON2_DEFAULT_MEMORY = 1 << 16; -constexpr auto ARGON2_DEFAULT_PARALLELISM = 4; - class Argon2Kdf : public Kdf { public: @@ -52,15 +47,6 @@ public: int benchmark(int msec) const override; - static quint64 toMebibytes(quint64 kibibytes) - { - return kibibytes >> 10; - } - static quint64 toKibibytes(quint64 mebibits) - { - return mebibits << 10; - } - quint32 m_version; quint64 m_memory; quint32 m_parallelism; diff --git a/src/fdosecrets/CMakeLists.txt b/src/fdosecrets/CMakeLists.txt index 7489debef..ecdac8dc6 100644 --- a/src/fdosecrets/CMakeLists.txt +++ b/src/fdosecrets/CMakeLists.txt @@ -9,6 +9,7 @@ if(WITH_XC_FDOSECRETS) widgets/RowButtonHelper.cpp # per database settings page + DatabaseSettingsPageFdoSecrets.cpp widgets/DatabaseSettingsWidgetFdoSecrets.cpp # prompt dialog diff --git a/src/fdosecrets/DatabaseSettingsPageFdoSecrets.cpp b/src/fdosecrets/DatabaseSettingsPageFdoSecrets.cpp new file mode 100644 index 000000000..60528a798 --- /dev/null +++ b/src/fdosecrets/DatabaseSettingsPageFdoSecrets.cpp @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2019 Aetf + * + * 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 "DatabaseSettingsPageFdoSecrets.h" + +#include "fdosecrets/widgets/DatabaseSettingsWidgetFdoSecrets.h" + +#include "gui/Icons.h" + +QString DatabaseSettingsPageFdoSecrets::name() +{ + return QObject::tr("Secret Service Integration"); +} + +QIcon DatabaseSettingsPageFdoSecrets::icon() +{ + return icons()->icon(QStringLiteral("freedesktop")); +} + +QWidget* DatabaseSettingsPageFdoSecrets::createWidget() +{ + return new DatabaseSettingsWidgetFdoSecrets; +} + +void DatabaseSettingsPageFdoSecrets::loadSettings(QWidget* widget, QSharedPointer db) +{ + auto settingsWidget = qobject_cast(widget); + settingsWidget->loadSettings(db); +} + +void DatabaseSettingsPageFdoSecrets::saveSettings(QWidget* widget) +{ + auto settingsWidget = qobject_cast(widget); + settingsWidget->saveSettings(); +} diff --git a/src/gui/ShortcutSettingsPage.h b/src/fdosecrets/DatabaseSettingsPageFdoSecrets.h similarity index 54% rename from src/gui/ShortcutSettingsPage.h rename to src/fdosecrets/DatabaseSettingsPageFdoSecrets.h index c5ce5fa38..c54f5a276 100644 --- a/src/gui/ShortcutSettingsPage.h +++ b/src/fdosecrets/DatabaseSettingsPageFdoSecrets.h @@ -1,10 +1,10 @@ /* - * Copyright (C) 2024 KeePassXC Team + * Copyright (C) 2019 Aetf * * 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. + * 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 @@ -15,22 +15,22 @@ * along with this program. If not, see . */ -#ifndef KEEPASSXC_SHORTCUT_SETTINGSPAGE_H -#define KEEPASSXC_SHORTCUT_SETTINGSPAGE_H +#ifndef KEEPASSXC_DATABASESETTINGSPAGEFDOSECRETS_H +#define KEEPASSXC_DATABASESETTINGSPAGEFDOSECRETS_H -#include "gui/ApplicationSettingsWidget.h" +#include "gui/dbsettings/DatabaseSettingsDialog.h" -class ShortcutSettingsPage : public ISettingsPage +class DatabaseSettingsPageFdoSecrets : public IDatabaseSettingsPage { + Q_DISABLE_COPY(DatabaseSettingsPageFdoSecrets) public: - explicit ShortcutSettingsPage() = default; - ~ShortcutSettingsPage() override = default; + DatabaseSettingsPageFdoSecrets() = default; QString name() override; QIcon icon() override; QWidget* createWidget() override; - void loadSettings(QWidget* widget) override; + void loadSettings(QWidget* widget, QSharedPointer db) override; void saveSettings(QWidget* widget) override; }; -#endif // KEEPASSXC_BROWSERSETTINGSPAGE_H +#endif // KEEPASSXC_DATABASESETTINGSPAGEFDOSECRETS_H diff --git a/src/fdosecrets/FdoSecretsSettings.cpp b/src/fdosecrets/FdoSecretsSettings.cpp index d24bc69a1..2f1e95182 100644 --- a/src/fdosecrets/FdoSecretsSettings.cpp +++ b/src/fdosecrets/FdoSecretsSettings.cpp @@ -21,6 +21,15 @@ #include "core/Database.h" #include "core/Metadata.h" +namespace Keys +{ + namespace Db + { + constexpr auto FdoSecretsExposedGroup = "FDO_SECRETS_EXPOSED_GROUP"; + } // namespace Db + +} // namespace Keys + namespace FdoSecrets { @@ -89,19 +98,20 @@ namespace FdoSecrets return exposedGroup(db.data()); } - void FdoSecretsSettings::setExposedGroup(const QSharedPointer& db, const QUuid& group) + void FdoSecretsSettings::setExposedGroup(const QSharedPointer& db, + const QUuid& group) // clazy:exclude=function-args-by-value { setExposedGroup(db.data(), group); } QUuid FdoSecretsSettings::exposedGroup(Database* db) const { - return {db->metadata()->customData()->value(CustomData::FdoSecretsExposedGroup)}; + return {db->metadata()->customData()->value(Keys::Db::FdoSecretsExposedGroup)}; } - void FdoSecretsSettings::setExposedGroup(Database* db, const QUuid& group) + void FdoSecretsSettings::setExposedGroup(Database* db, const QUuid& group) // clazy:exclude=function-args-by-value { - db->metadata()->customData()->set(CustomData::FdoSecretsExposedGroup, group.toString()); + db->metadata()->customData()->set(Keys::Db::FdoSecretsExposedGroup, group.toString()); } } // namespace FdoSecrets diff --git a/src/fdosecrets/dbus/DBusMgr.cpp b/src/fdosecrets/dbus/DBusMgr.cpp index 3765e6f09..1a4b2b73c 100644 --- a/src/fdosecrets/dbus/DBusMgr.cpp +++ b/src/fdosecrets/dbus/DBusMgr.cpp @@ -26,11 +26,6 @@ #include "core/Entry.h" #include "core/Tools.h" -#ifdef __FreeBSD__ -#include -#include -#endif - namespace FdoSecrets { static const auto IntrospectionService = R"xml( @@ -180,18 +175,7 @@ namespace FdoSecrets // The /proc/pid/exe link is more reliable than /proc/pid/cmdline // It's still weak and if the application does a prctl(PR_SET_DUMPABLE, 0) this link cannot be accessed. - -#ifdef __FreeBSD__ - const int mib[] = {CTL_KERN, KERN_PROC, KERN_PROC_PATHNAME, static_cast(info.pid)}; - char buffer[2048]; - size_t size = sizeof(buffer); - if (sysctl(mib, 4, buffer, &size, NULL, 0) != 0) { - strlcpy(buffer, "Invalid path", sizeof(buffer)); - } - QFileInfo exe(buffer); -#else QFileInfo exe(QStringLiteral("/proc/%1/exe").arg(pid)); -#endif info.exePath = exe.canonicalFilePath(); // /proc/pid/cmdline gives full command line diff --git a/src/fdosecrets/objects/Collection.cpp b/src/fdosecrets/objects/Collection.cpp index 44b0f0361..4cc6ca537 100644 --- a/src/fdosecrets/objects/Collection.cpp +++ b/src/fdosecrets/objects/Collection.cpp @@ -408,7 +408,7 @@ namespace FdoSecrets auto newUuid = FdoSecrets::settings()->exposedGroup(m_backend->database()); auto newGroup = m_backend->database()->rootGroup()->findGroupByUuid(newUuid); - if (!newGroup || newGroup->isRecycled()) { + if (!newGroup || inRecycleBin(newGroup)) { // no exposed group, delete self removeFromDBus(); return; @@ -444,7 +444,7 @@ namespace FdoSecrets }); // Another possibility is the group being moved to recycle bin. connect(m_exposedGroup.data(), &Group::modified, this, [this]() { - if (m_exposedGroup->isRecycled()) { + if (inRecycleBin(m_exposedGroup)) { // reset the exposed group to none FdoSecrets::settings()->setExposedGroup(m_backend->database().data(), {}); } @@ -490,15 +490,11 @@ namespace FdoSecrets void Collection::onEntryAdded(Entry* entry, bool emitSignal) { - if (entry->isRecycled()) { + if (inRecycleBin(entry)) { return; } auto item = Item::Create(this, entry); - if (!item) { - return; - } - m_items << item; m_entryToItem[entry] = item; @@ -524,7 +520,7 @@ namespace FdoSecrets void Collection::connectGroupSignalRecursive(Group* group) { - if (group->isRecycled()) { + if (inRecycleBin(group)) { return; } @@ -627,7 +623,7 @@ namespace FdoSecrets bool Collection::doDeleteEntry(Entry* entry) { // Confirm entry removal before moving forward - bool permanent = entry->isRecycled() || !m_backend->database()->metadata()->recycleBinEnabled(); + bool permanent = inRecycleBin(entry) || !m_backend->database()->metadata()->recycleBinEnabled(); if (FdoSecrets::settings()->confirmDeleteItem() && !GuiTools::confirmDeleteEntries(m_backend, {entry}, permanent)) { return false; @@ -648,7 +644,7 @@ namespace FdoSecrets // groupPath can't be empty here, because otherwise it will match m_exposedGroup and was returned above Q_ASSERT(!groupPath.isEmpty()); - auto groups = groupPath.split('/', Qt::SkipEmptyParts); + auto groups = groupPath.split('/', QString::SkipEmptyParts); auto groupName = groups.takeLast(); // create parent group @@ -664,6 +660,29 @@ namespace FdoSecrets return group; } + bool Collection::inRecycleBin(Group* group) const + { + Q_ASSERT(m_backend); + Q_ASSERT(group); + + if (!m_backend->database()->metadata()) { + return false; + } + + auto recycleBin = m_backend->database()->metadata()->recycleBin(); + if (!recycleBin) { + return false; + } + + return group->uuid() == recycleBin->uuid() || group->isRecycled(); + } + + bool Collection::inRecycleBin(Entry* entry) const + { + Q_ASSERT(entry); + return inRecycleBin(entry->group()); + } + Item* Collection::doNewItem(const DBusClientPtr& client, QString itemPath) { Q_ASSERT(m_backend); diff --git a/src/fdosecrets/objects/Collection.h b/src/fdosecrets/objects/Collection.h index c8a49ef35..06e8467e5 100644 --- a/src/fdosecrets/objects/Collection.h +++ b/src/fdosecrets/objects/Collection.h @@ -107,6 +107,11 @@ namespace FdoSecrets DatabaseWidget* backend() const; QString backendFilePath() const; Service* service() const; + /** + * similar to Group::isRecycled, but we also return true when the group itself is the recycle bin + */ + bool inRecycleBin(Group* group) const; + bool inRecycleBin(Entry* entry) const; static EntrySearcher::SearchTerm attributeToTerm(const QString& key, const QString& value); diff --git a/src/fdosecrets/objects/Item.cpp b/src/fdosecrets/objects/Item.cpp index 373735205..2c6d13435 100644 --- a/src/fdosecrets/objects/Item.cpp +++ b/src/fdosecrets/objects/Item.cpp @@ -125,7 +125,7 @@ namespace FdoSecrets // add some informative and readonly attributes attrs[ItemAttributes::UuidKey] = m_backend->uuidToHex(); attrs[ItemAttributes::PathKey] = path(); - if (m_backend->hasValidTotp()) { + if (m_backend->hasTotp()) { attrs[ItemAttributes::TotpKey] = m_backend->totp(); } return {}; diff --git a/src/fdosecrets/objects/Prompt.cpp b/src/fdosecrets/objects/Prompt.cpp index e89cd499b..bd01de89c 100644 --- a/src/fdosecrets/objects/Prompt.cpp +++ b/src/fdosecrets/objects/Prompt.cpp @@ -23,7 +23,6 @@ #include "fdosecrets/objects/Session.h" #include "fdosecrets/widgets/AccessControlDialog.h" -#include "FdoSecretsSettings.h" #include "core/Entry.h" #include "gui/MessageBox.h" @@ -299,7 +298,7 @@ namespace FdoSecrets } auto entry = item->backend(); auto uuid = entry->uuid(); - if (client->itemKnown(uuid) || !FdoSecrets::settings()->confirmAccessItem()) { + if (client->itemKnown(uuid)) { if (!client->itemAuthorized(uuid)) { m_numRejected += 1; } diff --git a/src/fdosecrets/objects/Service.cpp b/src/fdosecrets/objects/Service.cpp index e3fcefeb5..ae1e9d4b6 100644 --- a/src/fdosecrets/objects/Service.cpp +++ b/src/fdosecrets/objects/Service.cpp @@ -543,7 +543,7 @@ namespace FdoSecrets } // switch selected to current m_databases->setCurrentWidget(dbWidget); - m_databases->showDatabaseSettings(true); + m_databases->showDatabaseSettings(); // open settings (switch from app settings to m_dbTabs) m_plugin->emitRequestSwitchToDatabases(); diff --git a/src/fdosecrets/widgets/AccessControlDialog.cpp b/src/fdosecrets/widgets/AccessControlDialog.cpp index c35fd8e0c..8e3a3e1d8 100644 --- a/src/fdosecrets/widgets/AccessControlDialog.cpp +++ b/src/fdosecrets/widgets/AccessControlDialog.cpp @@ -24,8 +24,6 @@ #include "fdosecrets/widgets/RowButtonHelper.h" #include "core/Entry.h" -#include "core/Global.h" -#include "core/Tools.h" #include "gui/Icons.h" #include @@ -103,7 +101,7 @@ AccessControlDialog::AccessControlDialog(QWindow* parent, connect(cancelButton, &QPushButton::clicked, this, [this]() { done(DenyAll); }); connect(allowButton, &QPushButton::clicked, this, [this]() { done(AllowSelected); }); connect(allowAllButton, &QPushButton::clicked, this, [this]() { done(AllowAll); }); - connect(detailsButton, &QPushButton::clicked, this, [this, detailsButton, detailsButtonText](bool checked) { + connect(detailsButton, &QPushButton::clicked, this, [=](bool checked) { m_ui->detailsContainer->setVisible(checked); if (checked) { detailsButton->setText(detailsButtonText + QStringLiteral(" <<")); @@ -208,7 +206,7 @@ QHash AccessControlDialog::decisions() const AccessControlDialog::EntryModel::EntryModel(QList entries, QObject* parent) : QAbstractTableModel(parent) , m_entries(std::move(entries)) - , m_selected(Tools::asSet(m_entries)) + , m_selected(QSet::fromList(m_entries)) { } diff --git a/src/fdosecrets/widgets/SettingsWidgetFdoSecrets.ui b/src/fdosecrets/widgets/SettingsWidgetFdoSecrets.ui index 9c7ddb007..bed666676 100644 --- a/src/fdosecrets/widgets/SettingsWidgetFdoSecrets.ui +++ b/src/fdosecrets/widgets/SettingsWidgetFdoSecrets.ui @@ -72,7 +72,11 @@ - <html><head/><body><p>This setting does not override disabling recycle bin prompts </p></body></html> + <html><head/><body><p><span style=" + font-family:'-apple-system','BlinkMacSystemFont','Segoe UI','Helvetica','Arial','sans-serif','Apple Color + Emoji','Segoe UI Emoji'; font-size:14px; color:#24292e; background-color:#ffffff;">This setting does + not override disabling recycle bin prompts</span></p></body></html> + Confirm when clients request entry deletion @@ -85,7 +89,11 @@ - <html><head/><body><p>This improves compatibility with certain applications which search for password without unlocking the database first.</p><p>But enabling this may also crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a different value set in applications.) </p></body></html> + <html><head/><body><p>This improves compatibility with certain applications + which search for password without unlocking the database first.</p><p>But enabling this may also + crash the client if the database can not be unlocked within a certain timeout. (Usually 25s, but may be a + different value set in applications.)</p></body></html> + Prompt to unlock database before searching diff --git a/src/format/BitwardenReader.cpp b/src/format/BitwardenReader.cpp deleted file mode 100644 index 5f729aa77..000000000 --- a/src/format/BitwardenReader.cpp +++ /dev/null @@ -1,403 +0,0 @@ -/* - * Copyright (C) 2024 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 "BitwardenReader.h" - -#include "core/Database.h" -#include "core/Entry.h" -#include "core/Group.h" -#include "core/Metadata.h" -#include "core/Tools.h" -#include "core/Totp.h" -#include "crypto/CryptoHash.h" -#include "crypto/SymmetricCipher.h" -#include "crypto/kdf/Argon2Kdf.h" - -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -namespace -{ - Entry* readItem(const QJsonObject& item, QString& folderId) - { - // Create the item map and extract the folder id - const auto itemMap = item.toVariantMap(); - folderId = itemMap.value("folderId").toString(); - if (folderId.isEmpty()) { - // Bitwarden organization vaults use collectionId instead of folderId - auto collectionIds = itemMap.value("collectionIds").toStringList(); - if (!collectionIds.empty()) { - folderId = collectionIds.first(); - } - } - - // Create entry and assign basic values - QScopedPointer entry(new Entry()); - entry->setUuid(QUuid::createUuid()); - entry->setTitle(itemMap.value("name").toString()); - entry->setNotes(itemMap.value("notes").toString()); - - if (itemMap.value("favorite").toBool()) { - entry->addTag(QObject::tr("Favorite", "Tag for favorite entries")); - } - - // Parse login details if present - if (itemMap.contains("login")) { - const auto loginMap = itemMap.value("login").toMap(); - entry->setUsername(loginMap.value("username").toString()); - entry->setPassword(loginMap.value("password").toString()); - if (loginMap.contains("totp")) { - auto totp = loginMap.value("totp").toString(); - if (!totp.startsWith("otpauth://")) { - QUrl url(QString("otpauth://totp/%1:%2?secret=%3") - .arg(QString(QUrl::toPercentEncoding(entry->title())), - QString(QUrl::toPercentEncoding(entry->username())), - QString(QUrl::toPercentEncoding(totp)))); - totp = url.toString(QUrl::FullyEncoded); - } - entry->setTotp(Totp::parseSettings(totp)); - } - - // Parse passkey - if (loginMap.contains("fido2Credentials")) { - const auto fido2CredentialsMap = loginMap.value("fido2Credentials").toList(); - for (const auto& fido2Credentials : fido2CredentialsMap) { - const auto passkey = fido2Credentials.toMap(); - - // Change from UUID to base64 byte array - const auto credentialIdValue = passkey.value("credentialId").toString(); - if (!credentialIdValue.isEmpty()) { - const auto credentialUuid = Tools::uuidToHex(credentialIdValue); - const auto credentialIdArray = QByteArray::fromHex(credentialUuid.toUtf8()); - const auto credentialId = - credentialIdArray.toBase64(QByteArray::Base64UrlEncoding | QByteArray::OmitTrailingEquals); - entry->attributes()->set(EntryAttributes::KPEX_PASSKEY_CREDENTIAL_ID, credentialId, true); - } - - // Base64 needs to be changed from URL encoding back to normal, and the result as PEM string - const auto keyValue = passkey.value("keyValue").toString(); - if (!keyValue.isEmpty()) { - const auto keyValueArray = - QByteArray::fromBase64(keyValue.toUtf8(), QByteArray::Base64UrlEncoding); - auto privateKey = keyValueArray.toBase64(QByteArray::Base64Encoding); - privateKey.insert(0, EntryAttributes::KPEX_PASSKEY_PRIVATE_KEY_START.toUtf8()); - privateKey.append(EntryAttributes::KPEX_PASSKEY_PRIVATE_KEY_END.toUtf8()); - entry->attributes()->set(EntryAttributes::KPEX_PASSKEY_PRIVATE_KEY_PEM, privateKey, true); - } - - entry->attributes()->set(EntryAttributes::KPEX_PASSKEY_USERNAME, - passkey.value("userName").toString()); - entry->attributes()->set(EntryAttributes::KPEX_PASSKEY_RELYING_PARTY, - passkey.value("rpId").toString()); - entry->attributes()->set( - EntryAttributes::KPEX_PASSKEY_USER_HANDLE, passkey.value("userHandle").toString(), true); - entry->addTag(QObject::tr("Passkey")); - } - } - - // Set the entry url(s) - int i = 1; - for (const auto& urlObj : loginMap.value("uris").toList()) { - const auto url = urlObj.toMap().value("uri").toString(); - if (entry->url().isEmpty()) { - // First url encountered is set as the primary url - entry->setUrl(url); - } else { - // Subsequent urls - entry->attributes()->set( - QString("%1_%2").arg(EntryAttributes::AdditionalUrlAttribute, QString::number(i)), url); - ++i; - } - } - } - - // Parse identity details if present - if (itemMap.contains("identity")) { - const auto idMap = itemMap.value("identity").toMap(); - - // Combine name attributes - auto attrs = QStringList({idMap.value("title").toString(), - idMap.value("firstName").toString(), - idMap.value("middleName").toString(), - idMap.value("lastName").toString()}); - attrs.removeAll(""); - entry->attributes()->set("identity_name", attrs.join(" ")); - - // Combine all the address attributes - attrs = QStringList({idMap.value("address1").toString(), - idMap.value("address2").toString(), - idMap.value("address3").toString()}); - attrs.removeAll(""); - auto address = attrs.join("\n") + "\n" + idMap.value("city").toString() + ", " - + idMap.value("state").toString() + " " + idMap.value("postalCode").toString() + "\n" - + idMap.value("country").toString(); - entry->attributes()->set("identity_address", address); - - // Add the remaining attributes - attrs = QStringList({"company", "email", "phone", "ssn", "passportNumber", "licenseNumber"}); - const QStringList sensitive({"ssn", "passportNumber", "licenseNumber"}); - for (const auto& attr : attrs) { - const auto value = idMap.value(attr).toString(); - if (!value.isEmpty()) { - entry->attributes()->set("identity_" + attr, value, sensitive.contains(attr)); - } - } - - // Set the username or push it into attributes if already set - const auto username = idMap.value("username").toString(); - if (!username.isEmpty()) { - if (entry->username().isEmpty()) { - entry->setUsername(username); - } else { - entry->attributes()->set("identity_username", username); - } - } - } - - // Parse card details if present - if (itemMap.contains("card")) { - const auto cardMap = itemMap.value("card").toMap(); - const QStringList attrs({"cardholderName", "brand", "number", "expMonth", "expYear", "code"}); - const QStringList sensitive({"code"}); - for (const auto& attr : attrs) { - auto value = cardMap.value(attr).toString(); - if (!value.isEmpty()) { - entry->attributes()->set("card_" + attr, value, sensitive.contains(attr)); - } - } - } - - // Parse remaining fields - for (const auto& field : itemMap.value("fields").toList()) { - // Derive a prefix for attribute names using the title or uuid if missing - const auto fieldMap = field.toMap(); - auto name = fieldMap.value("name").toString(); - if (entry->attributes()->hasKey(name)) { - name = QString("%1_%2").arg(name, QUuid::createUuid().toString().mid(1, 5)); - } - - const auto value = fieldMap.value("value").toString(); - const auto type = fieldMap.value("type").toInt(); - - entry->attributes()->set(name, value, type == 1); - } - - // Collapse any accumulated history - entry->removeHistoryItems(entry->historyItems()); - - return entry.take(); - } - - void writeVaultToDatabase(const QJsonObject& vault, QSharedPointer db) - { - auto folderField = QString("folders"); - if (!vault.contains(folderField)) { - // Handle Bitwarden organization vaults - folderField = "collections"; - } - - if (!vault.contains(folderField) || !vault.contains("items")) { - // Early out if the vault is missing critical items - return; - } - - // Create groups from folders and store a temporary map of id -> uuid - QMap folderMap; - for (const auto& folder : vault.value(folderField).toArray()) { - auto group = new Group(); - group->setUuid(QUuid::createUuid()); - group->setName(folder.toObject().value("name").toString()); - group->setParent(db->rootGroup()); - - folderMap.insert(folder.toObject().value("id").toString(), group); - } - - QString folderId; - const auto items = vault.value("items").toArray(); - for (const auto& item : items) { - auto entry = readItem(item.toObject(), folderId); - if (entry) { - entry->setGroup(folderMap.value(folderId, db->rootGroup()), false); - } - } - } -} // namespace - -bool BitwardenReader::hasError() -{ - return !m_error.isEmpty(); -} - -QString BitwardenReader::errorString() -{ - return m_error; -} - -QSharedPointer BitwardenReader::convert(const QString& path, const QString& password) -{ - m_error.clear(); - - QFileInfo fileinfo(path); - if (!fileinfo.exists()) { - m_error = QObject::tr("File does not exist.").arg(path); - return {}; - } - - // Bitwarden uses a json file format - QFile file(fileinfo.absoluteFilePath()); - if (!file.open(QFile::ReadOnly)) { - m_error = QObject::tr("Cannot open file: %1").arg(file.errorString()); - return {}; - } - - QJsonParseError error; - auto json = QJsonDocument::fromJson(file.readAll(), &error).object(); - if (error.error != QJsonParseError::NoError) { - m_error = - QObject::tr("Cannot parse file: %1 at position %2").arg(error.errorString(), QString::number(error.offset)); - return {}; - } - - file.close(); - - // Check if this is an encrypted json - if (json.contains("encrypted") && json.value("encrypted").toBool()) { - auto buildError = [](const QString& errorString) { - return QObject::tr("Failed to decrypt json file: %1").arg(errorString); - }; - - if (!json.contains("kdfType") || !json.contains("salt")) { - m_error = buildError(QObject::tr("Unsupported format, ensure your Bitwarden export is password-protected")); - return {}; - } - - QByteArray key(32, '\0'); - auto salt = json.value("salt").toString().toUtf8(); - auto kdfType = json.value("kdfType").toInt(); - - // Derive the Master Key - if (kdfType == 0) { - // PBKDF2 - auto iterations = json.value("kdfIterations").toInt(); - if (iterations <= 0) { - m_error = buildError(QObject::tr("Invalid KDF iterations, cannot decrypt json file")); - return {}; - } - auto pwd_fam = Botan::PasswordHashFamily::create_or_throw("PBKDF2(SHA-256)"); - auto pwd_hash = pwd_fam->from_params(iterations); - pwd_hash->derive_key(reinterpret_cast(key.data()), - key.size(), - password.toUtf8().data(), - password.toUtf8().size(), - reinterpret_cast(salt.data()), - salt.size()); - } else if (kdfType == 1) { - // Argon2 - // Bitwarden hashes the salt prior to use - CryptoHash saltHash(CryptoHash::Sha256); - saltHash.addData(salt); - salt = saltHash.result(); - - Argon2Kdf argon2(Argon2Kdf::Type::Argon2id); - argon2.setSeed(salt); - argon2.setRounds(json.value("kdfIterations").toInt()); - argon2.setMemory(json.value("kdfMemory").toInt() * 1024); - argon2.setParallelism(json.value("kdfParallelism").toInt()); - argon2.transform(password.toUtf8(), key); - } else { - m_error = buildError(QObject::tr("Only PBKDF and Argon2 are supported, cannot decrypt json file")); - return {}; - } - - auto hkdf = Botan::KDF::create_or_throw("HKDF-Expand(SHA-256)"); - - // Derive the MAC Key - auto stretched_mac = hkdf->derive_key(32, reinterpret_cast(key.data()), key.size(), "", "mac"); - auto mac = QByteArray(reinterpret_cast(stretched_mac.data()), stretched_mac.size()); - - // Stretch the Master Key - auto stretched_key = hkdf->derive_key(32, reinterpret_cast(key.data()), key.size(), "", "enc"); - key = QByteArray(reinterpret_cast(stretched_key.data()), stretched_key.size()); - - // Validate the encryption key - auto keyList = json.value("encKeyValidation_DO_NOT_EDIT").toString().split("."); - if (keyList.size() < 2) { - m_error = buildError(QObject::tr("Invalid encKeyValidation field")); - return {}; - } - auto cipherList = keyList[1].split("|"); - if (cipherList.size() < 3) { - m_error = buildError(QObject::tr("Invalid cipher list within encKeyValidation field")); - return {}; - } - CryptoHash hash(CryptoHash::Sha256, true); - hash.setKey(mac); - hash.addData(QByteArray::fromBase64(cipherList[0].toUtf8())); // iv - hash.addData(QByteArray::fromBase64(cipherList[1].toUtf8())); // ciphertext - if (hash.result().toBase64() != cipherList[2].toUtf8()) { - // Calculated MAC doesn't equal the Validation - m_error = buildError(QObject::tr("Wrong password")); - return {}; - } - - // Decrypt data field using AES-256-CBC - keyList = json.value("data").toString().split("."); - if (keyList.size() < 2) { - m_error = buildError(QObject::tr("Invalid encrypted data field")); - return {}; - } - cipherList = keyList[1].split("|"); - if (cipherList.size() < 2) { - m_error = buildError(QObject::tr("Invalid cipher list within encrypted data field")); - return {}; - } - auto iv = QByteArray::fromBase64(cipherList[0].toUtf8()); - auto data = QByteArray::fromBase64(cipherList[1].toUtf8()); - - SymmetricCipher cipher; - if (!cipher.init(SymmetricCipher::Aes256_CBC, SymmetricCipher::Decrypt, key, iv)) { - m_error = buildError(QObject::tr("Cannot initialize cipher")); - return {}; - } - if (!cipher.finish(data)) { - m_error = buildError(QObject::tr("Cannot decrypt data")); - return {}; - } - - json = QJsonDocument::fromJson(data, &error).object(); - if (error.error != QJsonParseError::NoError) { - m_error = buildError(error.errorString()); - return {}; - } - } - - auto db = QSharedPointer::create(); - db->rootGroup()->setName(QObject::tr("Bitwarden Import")); - - writeVaultToDatabase(json, db); - - return db; -} diff --git a/src/format/BitwardenReader.h b/src/format/BitwardenReader.h deleted file mode 100644 index 52e1e6f70..000000000 --- a/src/format/BitwardenReader.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (C) 2023 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 BITWARDEN_READER_H -#define BITWARDEN_READER_H - -#include - -class Database; - -/*! - * Imports a Bitwarden vault in JSON format: https://bitwarden.com/help/encrypted-export/ - */ -class BitwardenReader -{ -public: - explicit BitwardenReader() = default; - ~BitwardenReader() = default; - - QSharedPointer convert(const QString& path, const QString& password = {}); - - bool hasError(); - QString errorString(); - -private: - QString m_error; -}; - -#endif // BITWARDEN_READER_H diff --git a/src/format/CsvParser.cpp b/src/format/CsvParser.cpp index d5d3b319a..a376e3662 100644 --- a/src/format/CsvParser.cpp +++ b/src/format/CsvParser.cpp @@ -1,4 +1,4 @@ -/* +/* * Copyright (C) 2016 Enrico Mariotti * Copyright (C) 2017 KeePassXC Team * @@ -24,13 +24,20 @@ #include "core/Tools.h" CsvParser::CsvParser() - : m_comment('#') + : m_ch(0) + , m_comment('#') + , m_currCol(1) + , m_currRow(1) , m_isBackslashSyntax(false) + , m_isEof(false) , m_isFileLoaded(false) + , m_isGood(true) + , m_lastPos(-1) + , m_maxCols(0) , m_qualifier('"') , m_separator(',') + , m_statusMsg("") { - reset(); m_csv.setBuffer(&m_array); m_ts.setDevice(&m_csv); m_csv.open(QIODevice::ReadOnly); @@ -53,7 +60,7 @@ bool CsvParser::reparse() return parseFile(); } -bool CsvParser::parse(QIODevice* device) +bool CsvParser::parse(QFile* device) { clear(); if (!device) { @@ -66,7 +73,7 @@ bool CsvParser::parse(QIODevice* device) return parseFile(); } -bool CsvParser::readFile(QIODevice* device) +bool CsvParser::readFile(QFile* device) { if (device->isOpen()) { device->close(); @@ -79,7 +86,6 @@ bool CsvParser::readFile(QIODevice* device) } else { device->close(); - // Normalize on newline endings m_array.replace("\r\n", "\n"); m_array.replace("\r", "\n"); if (m_array.isEmpty()) { @@ -99,10 +105,10 @@ void CsvParser::reset() m_isGood = true; m_lastPos = -1; m_maxCols = 0; - m_statusMsg.clear(); + m_statusMsg = ""; m_ts.seek(0); m_table.clear(); - // the following can be overridden by the user + // the following are users' concern :) // m_comment = '#'; // m_backslashSyntax = false; // m_comment = '#'; @@ -122,7 +128,7 @@ bool CsvParser::parseFile() parseRecord(); while (!m_isEof) { if (!skipEndline()) { - appendStatusMsg(QObject::tr("malformed string, possible unescaped delimiter"), true); + appendStatusMsg(QObject::tr("malformed string"), true); } m_currRow++; m_currCol = 1; @@ -142,7 +148,7 @@ void CsvParser::parseRecord() do { parseField(row); getChar(m_ch); - } while (m_ch == m_separator && !m_isEof); + } while (isSeparator(m_ch) && !m_isEof); if (!m_isEof) { ungetChar(); @@ -162,7 +168,7 @@ void CsvParser::parseField(CsvRow& row) { QString field; peek(m_ch); - if (m_ch != m_separator && m_ch != '\n') { + if (!isTerminator(m_ch)) { if (isQualifier(m_ch)) { parseQuoted(field); } else { @@ -176,7 +182,7 @@ void CsvParser::parseSimple(QString& s) { QChar c; getChar(c); - while (c != '\n' && c != m_separator && !m_isEof) { + while ((isText(c)) && (!m_isEof)) { s.append(c); getChar(c); } @@ -191,7 +197,7 @@ void CsvParser::parseQuoted(QString& s) getChar(m_ch); parseEscaped(s); if (!isQualifier(m_ch)) { - appendStatusMsg(QObject::tr("missing closing delimiter"), true); + appendStatusMsg(QObject::tr("missing closing quote"), true); } } @@ -209,7 +215,7 @@ void CsvParser::parseEscaped(QString& s) void CsvParser::parseEscapedText(QString& s) { getChar(m_ch); - while (!isQualifier(m_ch) && !m_isEof) { + while ((!isQualifier(m_ch)) && !m_isEof) { s.append(m_ch); getChar(m_ch); } @@ -217,9 +223,10 @@ void CsvParser::parseEscapedText(QString& s) bool CsvParser::processEscapeMark(QString& s, QChar c) { + QChar buf; + peek(buf); QChar c2; - peek(c2); - if (m_isBackslashSyntax) { + if (true == m_isBackslashSyntax) { // escape-character syntax, e.g. \" if (c != '\\') { return false; @@ -230,24 +237,25 @@ bool CsvParser::processEscapeMark(QString& s, QChar c) c2 = '\\'; s.append('\\'); return false; - } - s.append(c2); - return true; - } - - // double quote syntax, e.g. "" - if (!isQualifier(c)) { - return false; - } - peek(c2); - if (!m_isEof) { // not EOF, can read one char - if (isQualifier(c2)) { + } else { s.append(c2); - getChar(c2); return true; } + } else { + // double quote syntax, e.g. "" + if (!isQualifier(c)) { + return false; + } + peek(c2); + if (!m_isEof) { // not EOF, can read one char + if (isQualifier(c2)) { + s.append(c2); + getChar(c2); + return true; + } + } + return false; } - return false; } void CsvParser::fillColumns() @@ -274,7 +282,7 @@ void CsvParser::skipLine() bool CsvParser::skipEndline() { getChar(m_ch); - return m_ch == '\n'; + return (m_ch == '\n'); } void CsvParser::getChar(QChar& c) @@ -304,10 +312,11 @@ void CsvParser::peek(QChar& c) bool CsvParser::isQualifier(const QChar& c) const { - if (m_isBackslashSyntax && c != m_qualifier) { - return c == '\\'; + if (true == m_isBackslashSyntax && (c != m_qualifier)) { + return (c == '\\'); + } else { + return (c == m_qualifier); } - return c == m_qualifier; } bool CsvParser::isComment() @@ -318,7 +327,7 @@ bool CsvParser::isComment() do { getChar(c2); - } while ((c2 == ' ' || c2 == '\t') && !m_isEof); + } while ((isSpace(c2) || isTab(c2)) && (!m_isEof)); if (c2 == m_comment) { result = true; @@ -327,16 +336,47 @@ bool CsvParser::isComment() return result; } +bool CsvParser::isText(QChar c) const +{ + return !((isCRLF(c)) || (isSeparator(c))); +} + bool CsvParser::isEmptyRow(const CsvRow& row) const { - for (auto it = row.constBegin(); it != row.constEnd(); ++it) { - if (*it != "\n" && *it != "") { + CsvRow::const_iterator it = row.constBegin(); + for (; it != row.constEnd(); ++it) { + if (((*it) != "\n") && ((*it) != "")) { return false; } } return true; } +bool CsvParser::isCRLF(const QChar& c) const +{ + return (c == '\n'); +} + +bool CsvParser::isSpace(const QChar& c) const +{ + return (c == ' '); +} + +bool CsvParser::isTab(const QChar& c) const +{ + return (c == '\t'); +} + +bool CsvParser::isSeparator(const QChar& c) const +{ + return (c == m_separator); +} + +bool CsvParser::isTerminator(const QChar& c) const +{ + return (isSeparator(c) || (c == '\n') || (c == '\r')); +} + void CsvParser::setBackslashSyntax(bool set) { m_isBackslashSyntax = set; @@ -367,7 +407,7 @@ int CsvParser::getFileSize() const return m_csv.size(); } -CsvTable CsvParser::getCsvTable() const +const CsvTable CsvParser::getCsvTable() const { return m_table; } @@ -381,8 +421,9 @@ int CsvParser::getCsvCols() const { if (!m_table.isEmpty() && !m_table.at(0).isEmpty()) { return m_table.at(0).size(); + } else { + return 0; } - return 0; } int CsvParser::getCsvRows() const @@ -392,12 +433,6 @@ int CsvParser::getCsvRows() const void CsvParser::appendStatusMsg(const QString& s, bool isCritical) { - if (!m_statusMsg.isEmpty()) { - m_statusMsg.append("\n"); - } - - m_statusMsg += - QObject::tr("%1, row: %2, column: %3").arg(s, QString::number(m_currRow), QString::number(m_currCol)); - + m_statusMsg += QObject::tr("%1: (row, col) %2,%3").arg(s, m_currRow, m_currCol).append("\n"); m_isGood = !isCritical; } diff --git a/src/format/CsvParser.h b/src/format/CsvParser.h index 608d71c14..73fb13d24 100644 --- a/src/format/CsvParser.h +++ b/src/format/CsvParser.h @@ -22,7 +22,7 @@ #include #include -class QIODevice; +class QFile; typedef QStringList CsvRow; typedef QList CsvTable; @@ -34,7 +34,7 @@ public: CsvParser(); ~CsvParser(); // read data from device and parse it - bool parse(QIODevice* device); + bool parse(QFile* device); bool isFileLoaded(); // reparse the same buffer (device is not opened again) bool reparse(); @@ -47,7 +47,7 @@ public: int getCsvRows() const; int getCsvCols() const; QString getStatus() const; - CsvTable getCsvTable() const; + const CsvTable getCsvTable() const; protected: CsvTable m_table; @@ -74,9 +74,15 @@ private: void ungetChar(); 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 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(const CsvRow& row) const; bool parseFile(); void parseRecord(); @@ -85,7 +91,7 @@ private: void parseQuoted(QString& s); void parseEscaped(QString& s); void parseEscapedText(QString& s); - bool readFile(QIODevice* device); + bool readFile(QFile* device); void reset(); void clear(); bool skipEndline(); diff --git a/src/format/Kdbx4Writer.cpp b/src/format/Kdbx4Writer.cpp index 1c728ac81..08a0df013 100644 --- a/src/format/Kdbx4Writer.cpp +++ b/src/format/Kdbx4Writer.cpp @@ -19,9 +19,9 @@ #include -#include "config-keepassx.h" #include "crypto/CryptoHash.h" #include "crypto/Random.h" +#include "format/KdbxXmlWriter.h" #include "format/KeePass2RandomStream.h" #include "streams/HmacBlockStream.h" #include "streams/SymmetricCipherStream.h" @@ -156,7 +156,7 @@ bool Kdbx4Writer::writeDatabase(QIODevice* device, Database* db) writeInnerHeaderField(outputDevice, KeePass2::InnerHeaderFieldID::InnerRandomStreamKey, protectedStreamKey)); // Write attachments to the inner header - auto idxMap = writeAttachments(outputDevice, db); + writeAttachments(outputDevice, db); CHECK_RETURN_FALSE(writeInnerHeaderField(outputDevice, KeePass2::InnerHeaderFieldID::End, QByteArray())); @@ -166,7 +166,7 @@ bool Kdbx4Writer::writeDatabase(QIODevice* device, Database* db) return false; } - KdbxXmlWriter xmlWriter(db->formatVersion(), idxMap); + KdbxXmlWriter xmlWriter(db->formatVersion()); xmlWriter.writeDatabase(outputDevice, db, &randomStream, headerHash); // Explicitly close/reset streams so they are flushed and we can detect @@ -211,46 +211,25 @@ bool Kdbx4Writer::writeInnerHeaderField(QIODevice* device, KeePass2::InnerHeader return true; } -KdbxXmlWriter::BinaryIdxMap Kdbx4Writer::writeAttachments(QIODevice* device, Database* db) +void Kdbx4Writer::writeAttachments(QIODevice* device, Database* db) { const QList allEntries = db->rootGroup()->entriesRecursive(true); - QHash writtenAttachments; - KdbxXmlWriter::BinaryIdxMap idxMap; - qint64 nextIdx = 0; + QSet writtenAttachments; - for (const Entry* entry : allEntries) { + for (Entry* entry : allEntries) { const QList attachmentKeys = entry->attachments()->keys(); for (const QString& key : attachmentKeys) { QByteArray data("\x01"); data.append(entry->attachments()->value(key)); - CryptoHash hash(CryptoHash::Sha256); -#ifdef WITH_XC_KEESHARE - // Namespace KeeShare attachments so they don't get deduplicated together with attachments - // from other databases. Prevents potential filesize side channels. - auto group = entry->group(); - if (!group && entry->historyOwner()) { - group = entry->historyOwner()->group(); + if (writtenAttachments.contains(data)) { + continue; } - if (group && group->isShared()) { - hash.addData(group->uuid().toByteArray()); - } else { - hash.addData(db->uuid().toByteArray()); - } -#endif - hash.addData(data); - // Deduplicate attachments with the same hash - const auto hashResult = hash.result(); - if (!writtenAttachments.contains(hashResult)) { - writeInnerHeaderField(device, KeePass2::InnerHeaderFieldID::Binary, data); - writtenAttachments.insert(hashResult, nextIdx++); - } - idxMap.insert(qMakePair(entry, key), writtenAttachments[hashResult]); + writeInnerHeaderField(device, KeePass2::InnerHeaderFieldID::Binary, data); + writtenAttachments.insert(data); } } - - return idxMap; } /** diff --git a/src/format/Kdbx4Writer.h b/src/format/Kdbx4Writer.h index 7b6af2f5d..c8540245b 100644 --- a/src/format/Kdbx4Writer.h +++ b/src/format/Kdbx4Writer.h @@ -19,7 +19,6 @@ #define KEEPASSX_KDBX4WRITER_H #include "KdbxWriter.h" -#include "format/KdbxXmlWriter.h" /** * KDBX4 writer implementation. @@ -33,7 +32,7 @@ public: private: bool writeInnerHeaderField(QIODevice* device, KeePass2::InnerHeaderFieldID fieldId, const QByteArray& data); - KdbxXmlWriter::BinaryIdxMap writeAttachments(QIODevice* device, Database* db); + void writeAttachments(QIODevice* device, Database* db); static bool serializeVariantMap(const QVariantMap& map, QByteArray& outputBytes); }; diff --git a/src/format/KdbxReader.cpp b/src/format/KdbxReader.cpp index b552bd1cb..5610897c8 100644 --- a/src/format/KdbxReader.cpp +++ b/src/format/KdbxReader.cpp @@ -27,8 +27,6 @@ /** * Read KDBX magic header numbers from a device. * - * Passing a null key will only read in the unprotected headers. - * * @param device input device * @param sig1 KDBX signature 1 * @param sig2 KDBX signature 2 @@ -57,8 +55,6 @@ bool KdbxReader::readMagicNumbers(QIODevice* device, quint32& sig1, quint32& sig * Read KDBX stream from device. * The device will automatically be reset to 0 before reading. * - * Passing a null key will only read in the unprotected headers. - * * @param device input device * @param key database encryption composite key * @param db database to read into @@ -95,11 +91,6 @@ bool KdbxReader::readDatabase(QIODevice* device, QSharedPointerformatVersion(), idxMap); + KdbxXmlWriter writer(db->formatVersion()); writer.disableInnerStreamProtection(true); writer.writeDatabase(&buffer, db); } diff --git a/src/format/KdbxXmlReader.cpp b/src/format/KdbxXmlReader.cpp index e6c212bbc..e66e12174 100644 --- a/src/format/KdbxXmlReader.cpp +++ b/src/format/KdbxXmlReader.cpp @@ -19,7 +19,6 @@ #include "KeePass2RandomStream.h" #include "core/Clock.h" #include "core/Endian.h" -#include "core/Global.h" #include "core/Group.h" #include "core/Tools.h" #include "streams/qtiocompressor.h" @@ -121,8 +120,8 @@ void KdbxXmlReader::readDatabase(QIODevice* device, Database* db, KeePass2Random qWarning("KdbxXmlReader::readDatabase: found %d invalid entry reference(s)", m_tmpParent->children().size()); } - const QSet poolKeys = Tools::asSet(m_binaryPool.keys()); - const QSet entryKeys = Tools::asSet(m_binaryMap.keys()); + 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; @@ -134,7 +133,7 @@ void KdbxXmlReader::readDatabase(QIODevice* device, Database* db, KeePass2Random qWarning("KdbxXmlReader::readDatabase: found unused key \"%s\"", qPrintable(key)); } - QMultiHash>::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()]); @@ -184,7 +183,7 @@ QString KdbxXmlReader::errorString() const .arg(m_xml.lineNumber()) .arg(m_xml.columnNumber()); } - return {}; + return QString(); } bool KdbxXmlReader::isTrueValue(const QStringRef& value) @@ -464,7 +463,8 @@ bool KdbxXmlReader::parseRoot() Group* rootGroup = parseGroup(); if (rootGroup) { - auto oldRoot = m_db->setRootGroup(rootGroup); + Group* oldRoot = m_db->rootGroup(); + m_db->setRootGroup(rootGroup); delete oldRoot; groupParsedSuccessfully = true; } @@ -815,7 +815,7 @@ Entry* KdbxXmlReader::parseEntry(bool history) } for (const StringPair& ref : asConst(binaryRefs)) { - m_binaryMap.insert(ref.first, qMakePair(entry, ref.second)); + m_binaryMap.insertMulti(ref.first, qMakePair(entry, ref.second)); } return entry; @@ -1117,13 +1117,13 @@ QUuid KdbxXmlReader::readUuid() { QByteArray uuidBin = readBinary(); if (uuidBin.isEmpty()) { - return {}; + return QUuid(); } if (uuidBin.length() != UUID_LENGTH) { if (m_strictMode) { raiseError(tr("Invalid uuid value")); } - return {}; + return QUuid(); } return QUuid::fromRfc4122(uuidBin); } diff --git a/src/format/KdbxXmlReader.h b/src/format/KdbxXmlReader.h index 1b6305eea..44978b083 100644 --- a/src/format/KdbxXmlReader.h +++ b/src/format/KdbxXmlReader.h @@ -22,7 +22,6 @@ #include "core/Metadata.h" #include -#include #include class QIODevice; @@ -110,7 +109,7 @@ protected: QHash m_entries; QHash m_binaryPool; - QMultiHash> m_binaryMap; + QHash> m_binaryMap; QByteArray m_headerHash; bool m_error = false; diff --git a/src/format/KdbxXmlWriter.cpp b/src/format/KdbxXmlWriter.cpp index 142f4b7e3..35ed5ffdb 100644 --- a/src/format/KdbxXmlWriter.cpp +++ b/src/format/KdbxXmlWriter.cpp @@ -19,10 +19,8 @@ #include #include -#include #include "core/Endian.h" -#include "crypto/CryptoHash.h" #include "format/KeePass2RandomStream.h" #include "streams/qtiocompressor.h" @@ -31,15 +29,6 @@ */ KdbxXmlWriter::KdbxXmlWriter(quint32 version) : m_kdbxVersion(version) -{ - Q_ASSERT_X(m_kdbxVersion < KeePass2::FILE_VERSION_4, - "KDBX version", - "KDBX version >= 4 requires explicit binary index map."); -} - -KdbxXmlWriter::KdbxXmlWriter(quint32 version, KdbxXmlWriter::BinaryIdxMap binaryIdxMap) - : m_kdbxVersion(version) - , m_binaryIdxMap(std::move(binaryIdxMap)) { } @@ -57,9 +46,7 @@ void KdbxXmlWriter::writeDatabase(QIODevice* device, m_xml.setAutoFormattingIndent(-1); // 1 tab m_xml.setCodec("UTF-8"); - if (m_kdbxVersion < KeePass2::FILE_VERSION_4) { - fillBinaryIdxMap(); - } + generateIdMap(); m_xml.setDevice(device); m_xml.writeStartDocument("1.0", true); @@ -93,42 +80,18 @@ QString KdbxXmlWriter::errorString() return m_errorStr; } -/** - * Generate a map of entry attachments to deduplicated attachment index IDs. - * This is basically duplicated code from Kdbx4Writer.cpp for KDBX 3 compatibility. - * I don't have a good solution for getting rid of this duplication without getting rid of KDBX 3. - */ -void KdbxXmlWriter::fillBinaryIdxMap() +void KdbxXmlWriter::generateIdMap() { const QList allEntries = m_db->rootGroup()->entriesRecursive(true); - QHash writtenAttachments; - qint64 nextIdx = 0; + int nextId = 0; for (Entry* entry : allEntries) { const QList attachmentKeys = entry->attachments()->keys(); for (const QString& key : attachmentKeys) { QByteArray data = entry->attachments()->value(key); - CryptoHash hash(CryptoHash::Sha256); -#ifdef WITH_XC_KEESHARE - // Namespace KeeShare attachments so they don't get deduplicated together with attachments - // from other databases. Prevents potential filesize side channels. - auto group = entry->group(); - if (!group && entry->historyOwner()) { - group = entry->historyOwner()->group(); + if (!m_idMap.contains(data)) { + m_idMap.insert(data, nextId++); } - if (group && group->isShared()) { - hash.addData(group->uuid().toByteArray()); - } else { - hash.addData(m_db->uuid().toByteArray()); - } -#endif - hash.addData(data); - - const auto hashResult = hash.result(); - if (!writtenAttachments.contains(hashResult)) { - writtenAttachments.insert(hashResult, nextIdx++); - } - m_binaryIdxMap.insert(qMakePair(entry, key), writtenAttachments.value(hashResult)); } } } @@ -218,19 +181,13 @@ void KdbxXmlWriter::writeIcon(const QUuid& uuid, const Metadata::CustomIconData& void KdbxXmlWriter::writeBinaries() { - // Reverse binary index map - QMap binaries; - for (auto i = m_binaryIdxMap.constBegin(); i != m_binaryIdxMap.constEnd(); ++i) { - if (!binaries.contains(i.value())) { - binaries.insert(i.value(), i.key().first->attachments()->value(i.key().second)); - } - } - m_xml.writeStartElement("Binaries"); - for (auto i = binaries.constBegin(); i != binaries.constEnd(); ++i) { + QHash::const_iterator i; + for (i = m_idMap.constBegin(); i != m_idMap.constEnd(); ++i) { m_xml.writeStartElement("Binary"); - m_xml.writeAttribute("ID", QString::number(i.key())); + + m_xml.writeAttribute("ID", QString::number(i.value())); QByteArray data; if (m_db->compressionAlgorithm() == Database::CompressionGZip) { @@ -243,15 +200,15 @@ void KdbxXmlWriter::writeBinaries() compressor.setStreamFormat(QtIOCompressor::GzipFormat); compressor.open(QIODevice::WriteOnly); - qint64 bytesWritten = compressor.write(i.value()); - Q_ASSERT(bytesWritten == i.value().size()); + qint64 bytesWritten = compressor.write(i.key()); + Q_ASSERT(bytesWritten == i.key().size()); Q_UNUSED(bytesWritten); compressor.close(); buffer.seek(0); data = buffer.readAll(); } else { - data = i.value(); + data = i.key(); } if (!data.isEmpty()) { @@ -465,7 +422,7 @@ void KdbxXmlWriter::writeEntry(const Entry* entry) writeString("Key", key); m_xml.writeStartElement("Value"); - m_xml.writeAttribute("Ref", QString::number(m_binaryIdxMap[qMakePair(entry, key)])); + m_xml.writeAttribute("Ref", QString::number(m_idMap[entry->attachments()->value(key)])); m_xml.writeEndElement(); m_xml.writeEndElement(); diff --git a/src/format/KdbxXmlWriter.h b/src/format/KdbxXmlWriter.h index d36151942..181e007ba 100644 --- a/src/format/KdbxXmlWriter.h +++ b/src/format/KdbxXmlWriter.h @@ -30,13 +30,7 @@ class KeePass2RandomStream; class KdbxXmlWriter { public: - /** - * Map of entry + attachment key to KDBX 4 inner header binary index. - */ - typedef QHash, qint64> BinaryIdxMap; - explicit KdbxXmlWriter(quint32 version); - explicit KdbxXmlWriter(quint32 version, KdbxXmlWriter::BinaryIdxMap binaryIdxMap); void writeDatabase(QIODevice* device, const Database* db, @@ -49,7 +43,7 @@ public: QString errorString(); private: - void fillBinaryIdxMap(); + void generateIdMap(); void writeMetadata(); void writeMemoryProtection(); @@ -91,7 +85,7 @@ private: QPointer m_db; QPointer m_meta; KeePass2RandomStream* m_randomStream = nullptr; - BinaryIdxMap m_binaryIdxMap; + QHash m_idMap; QByteArray m_headerHash; bool m_error = false; diff --git a/src/format/KeePass1Reader.cpp b/src/format/KeePass1Reader.cpp index a7d8038df..0b7f168a4 100644 --- a/src/format/KeePass1Reader.cpp +++ b/src/format/KeePass1Reader.cpp @@ -18,7 +18,6 @@ #include "KeePass1Reader.h" #include -#include #include #include "core/Endian.h" @@ -276,10 +275,6 @@ KeePass1Reader::readDatabase(const QString& filename, const QString& password, c return {}; } - if (db) { - db->metadata()->setName(QFileInfo(filename).completeBaseName()); - } - return db; } @@ -396,7 +391,7 @@ QByteArray KeePass1Reader::key(const QByteArray& password, const QByteArray& key if (!result) { raiseError(tr("Key transformation failed")); - return {}; + return QByteArray(); } CryptoHash hash(CryptoHash::Sha256); @@ -437,13 +432,13 @@ Group* KeePass1Reader::readGroup(QIODevice* cipherStream) bool reachedEnd = false; do { - auto fieldType = Endian::readSizedInt(cipherStream, KeePass1::BYTEORDER, &ok); + quint16 fieldType = Endian::readSizedInt(cipherStream, KeePass1::BYTEORDER, &ok); if (!ok) { raiseError(tr("Invalid group field type number")); return nullptr; } - auto fieldSize = static_cast(Endian::readSizedInt(cipherStream, KeePass1::BYTEORDER, &ok)); + int fieldSize = static_cast(Endian::readSizedInt(cipherStream, KeePass1::BYTEORDER, &ok)); if (!ok) { raiseError(tr("Invalid group field size")); return nullptr; @@ -518,7 +513,7 @@ Group* KeePass1Reader::readGroup(QIODevice* cipherStream) raiseError(tr("Incorrect group icon field size")); return nullptr; } - auto iconNumber = Endian::bytesToSizedInt(fieldData, KeePass1::BYTEORDER); + quint32 iconNumber = Endian::bytesToSizedInt(fieldData, KeePass1::BYTEORDER); group->setIcon(iconNumber); break; } @@ -569,13 +564,13 @@ Entry* KeePass1Reader::readEntry(QIODevice* cipherStream) bool reachedEnd = false; do { - auto fieldType = Endian::readSizedInt(cipherStream, KeePass1::BYTEORDER, &ok); + quint16 fieldType = Endian::readSizedInt(cipherStream, KeePass1::BYTEORDER, &ok); if (!ok) { raiseError(tr("Missing entry field type number")); return nullptr; } - auto fieldSize = static_cast(Endian::readSizedInt(cipherStream, KeePass1::BYTEORDER, &ok)); + int fieldSize = static_cast(Endian::readSizedInt(cipherStream, KeePass1::BYTEORDER, &ok)); if (!ok) { raiseError(tr("Invalid entry field size")); return nullptr; @@ -603,7 +598,7 @@ Entry* KeePass1Reader::readEntry(QIODevice* cipherStream) raiseError(tr("Invalid entry group id field size")); return nullptr; } - auto groupId = Endian::bytesToSizedInt(fieldData, KeePass1::BYTEORDER); + quint32 groupId = Endian::bytesToSizedInt(fieldData, KeePass1::BYTEORDER); m_entryGroupIds.insert(entry.data(), groupId); break; } @@ -612,7 +607,7 @@ Entry* KeePass1Reader::readEntry(QIODevice* cipherStream) raiseError(tr("Invalid entry icon field size")); return nullptr; } - auto iconNumber = Endian::bytesToSizedInt(fieldData, KeePass1::BYTEORDER); + quint32 iconNumber = Endian::bytesToSizedInt(fieldData, KeePass1::BYTEORDER); entry->setIcon(iconNumber); break; } @@ -811,7 +806,7 @@ bool KeePass1Reader::parseGroupTreeState(const QByteArray& data) } int pos = 0; - auto num = Endian::bytesToSizedInt(data.mid(pos, 4), KeePass1::BYTEORDER); + quint32 num = Endian::bytesToSizedInt(data.mid(pos, 4), KeePass1::BYTEORDER); pos += 4; if (static_cast(data.size() - 4) != (num * 5)) { @@ -819,7 +814,7 @@ bool KeePass1Reader::parseGroupTreeState(const QByteArray& data) } for (quint32 i = 0; i < num; i++) { - auto groupId = Endian::bytesToSizedInt(data.mid(pos, 4), KeePass1::BYTEORDER); + quint32 groupId = Endian::bytesToSizedInt(data.mid(pos, 4), KeePass1::BYTEORDER); pos += 4; bool expanded = data.at(pos); @@ -841,13 +836,13 @@ bool KeePass1Reader::parseCustomIcons4(const QByteArray& data) int pos = 0; - auto numIcons = Endian::bytesToSizedInt(data.mid(pos, 4), KeePass1::BYTEORDER); + quint32 numIcons = Endian::bytesToSizedInt(data.mid(pos, 4), KeePass1::BYTEORDER); pos += 4; - auto numEntries = Endian::bytesToSizedInt(data.mid(pos, 4), KeePass1::BYTEORDER); + quint32 numEntries = Endian::bytesToSizedInt(data.mid(pos, 4), KeePass1::BYTEORDER); pos += 4; - auto numGroups = Endian::bytesToSizedInt(data.mid(pos, 4), KeePass1::BYTEORDER); + quint32 numGroups = Endian::bytesToSizedInt(data.mid(pos, 4), KeePass1::BYTEORDER); pos += 4; QList iconUuids; @@ -856,7 +851,7 @@ bool KeePass1Reader::parseCustomIcons4(const QByteArray& data) if (data.size() < (pos + 4)) { return false; } - auto iconSize = Endian::bytesToSizedInt(data.mid(pos, 4), KeePass1::BYTEORDER); + quint32 iconSize = Endian::bytesToSizedInt(data.mid(pos, 4), KeePass1::BYTEORDER); pos += 4; if (static_cast(data.size()) < (pos + iconSize)) { @@ -878,7 +873,7 @@ bool KeePass1Reader::parseCustomIcons4(const QByteArray& data) QByteArray entryUuid = data.mid(pos, 16); pos += 16; - auto iconId = Endian::bytesToSizedInt(data.mid(pos, 4), KeePass1::BYTEORDER); + quint32 iconId = Endian::bytesToSizedInt(data.mid(pos, 4), KeePass1::BYTEORDER); pos += 4; if (m_entryUuids.contains(entryUuid) && (iconId < static_cast(iconUuids.size()))) { @@ -891,10 +886,10 @@ bool KeePass1Reader::parseCustomIcons4(const QByteArray& data) } for (quint32 i = 0; i < numGroups; i++) { - auto groupId = Endian::bytesToSizedInt(data.mid(pos, 4), KeePass1::BYTEORDER); + quint32 groupId = Endian::bytesToSizedInt(data.mid(pos, 4), KeePass1::BYTEORDER); pos += 4; - auto iconId = Endian::bytesToSizedInt(data.mid(pos, 4), KeePass1::BYTEORDER); + quint32 iconId = Endian::bytesToSizedInt(data.mid(pos, 4), KeePass1::BYTEORDER); pos += 4; if (m_groupIds.contains(groupId) && (iconId < static_cast(iconUuids.size()))) { @@ -932,7 +927,7 @@ 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 {}; + return QDateTime(); } else { return dateTime; } @@ -948,13 +943,13 @@ bool KeePass1Reader::isMetaStream(const Entry* entry) QByteArray KeePass1Reader::readKeyfile(QIODevice* device) { if (device->size() == 0) { - return {}; + return QByteArray(); } if (device->size() == 32) { QByteArray data = device->read(32); if (data.size() != 32) { - return {}; + return QByteArray(); } return data; @@ -964,7 +959,7 @@ QByteArray KeePass1Reader::readKeyfile(QIODevice* device) QByteArray data = device->read(64); if (data.size() != 64) { - return {}; + return QByteArray(); } if (Tools::isHex(data)) { @@ -979,7 +974,7 @@ QByteArray KeePass1Reader::readKeyfile(QIODevice* device) do { if (!Tools::readFromDevice(device, buffer)) { - return {}; + return QByteArray(); } cryptoHash.addData(buffer); } while (!buffer.isEmpty()); diff --git a/src/format/KeePass2.cpp b/src/format/KeePass2.cpp index c068384ad..b19316741 100644 --- a/src/format/KeePass2.cpp +++ b/src/format/KeePass2.cpp @@ -49,8 +49,10 @@ const QString KeePass2::KDFPARAM_ARGON2_ASSOCDATA("A"); const QList KeePass2::CIPHERS{KeePass2::CIPHER_AES256, KeePass2::CIPHER_TWOFISH, KeePass2::CIPHER_CHACHA20}; -const QList KeePass2::KDBX4_KDFS{KeePass2::KDF_ARGON2D, KeePass2::KDF_ARGON2ID, KeePass2::KDF_AES_KDBX4}; -const QList KeePass2::KDBX3_KDFS{KeePass2::KDF_AES_KDBX3}; +const QList KeePass2::KDFS{KeePass2::KDF_ARGON2D, + KeePass2::KDF_ARGON2ID, + KeePass2::KDF_AES_KDBX4, + KeePass2::KDF_AES_KDBX3}; QByteArray KeePass2::hmacKey(const QByteArray& masterSeed, const QByteArray& transformedMasterKey) { diff --git a/src/format/KeePass2.h b/src/format/KeePass2.h index 82b6e1674..1d18a18ba 100644 --- a/src/format/KeePass2.h +++ b/src/format/KeePass2.h @@ -67,8 +67,7 @@ namespace KeePass2 extern const QString KDFPARAM_ARGON2_ASSOCDATA; extern const QList CIPHERS; - extern const QList KDBX4_KDFS; - extern const QList KDBX3_KDFS; + extern const QList KDFS; enum class HeaderFieldID { diff --git a/src/format/KeePass2RandomStream.cpp b/src/format/KeePass2RandomStream.cpp index da6df20ad..509e32513 100644 --- a/src/format/KeePass2RandomStream.cpp +++ b/src/format/KeePass2RandomStream.cpp @@ -50,7 +50,7 @@ QByteArray KeePass2RandomStream::randomBytes(int size, bool* ok) if (m_buffer.size() == m_offset) { if (!loadBlock()) { *ok = false; - return {}; + return QByteArray(); } } @@ -71,7 +71,7 @@ QByteArray KeePass2RandomStream::process(const QByteArray& data, bool* ok) QByteArray randomData = randomBytes(data.size(), &randomBytesOk); if (!randomBytesOk) { *ok = false; - return {}; + return QByteArray(); } QByteArray result; diff --git a/src/format/KeePass2Writer.cpp b/src/format/KeePass2Writer.cpp index 76e8cacc3..4cf0d4ad6 100644 --- a/src/format/KeePass2Writer.cpp +++ b/src/format/KeePass2Writer.cpp @@ -184,7 +184,7 @@ void KeePass2Writer::raiseError(const QString& errorMessage) */ QSharedPointer KeePass2Writer::writer() const { - return {}; + return QSharedPointer(); } /** diff --git a/src/format/OPUXReader.cpp b/src/format/OPUXReader.cpp deleted file mode 100644 index e1a0579cf..000000000 --- a/src/format/OPUXReader.cpp +++ /dev/null @@ -1,297 +0,0 @@ -/* - * Copyright (C) 2023 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 "OPUXReader.h" - -#include "core/Database.h" -#include "core/Entry.h" -#include "core/Group.h" -#include "core/Metadata.h" -#include "core/Totp.h" - -#include -#include -#include -#include -#include -#include - -#include - -namespace -{ - QByteArray extractFile(unzFile uf, QString filename) - { - if (unzLocateFile(uf, filename.toLatin1(), 2) != UNZ_OK) { - qWarning("Failed to extract 1PUX document: %s", qPrintable(filename)); - return {}; - } - - // Read export.data into memory - int bytes, bytesRead = 0; - QByteArray data; - unzOpenCurrentFile(uf); - do { - data.resize(data.size() + 8192); - bytes = unzReadCurrentFile(uf, data.data() + bytesRead, 8192); - if (bytes > 0) { - bytesRead += bytes; - } - } while (bytes > 0); - unzCloseCurrentFile(uf); - data.truncate(bytesRead); - - return data; - } - - Entry* readItem(const QJsonObject& item, unzFile uf = nullptr) - { - const auto itemMap = item.toVariantMap(); - const auto overviewMap = itemMap.value("overview").toMap(); - const auto detailsMap = itemMap.value("details").toMap(); - - // Create entry and assign basic values - QScopedPointer entry(new Entry()); - entry->setUuid(QUuid::createUuid()); - entry->setTitle(overviewMap.value("title").toString()); - entry->setUrl(overviewMap.value("url").toString()); - if (overviewMap.contains("urls")) { - int i = 1; - for (const auto& urlRaw : overviewMap.value("urls").toList()) { - const auto urlMap = urlRaw.toMap(); - const auto url = urlMap.value("url").toString(); - if (entry->url() != url) { - entry->attributes()->set( - QString("%1_%2").arg(EntryAttributes::AdditionalUrlAttribute, QString::number(i)), url); - ++i; - } - } - } - if (overviewMap.contains("tags")) { - entry->setTags(overviewMap.value("tags").toStringList().join(",")); - } - if (itemMap.value("favIndex").toString() == "1") { - entry->addTag(QObject::tr("Favorite", "Tag for favorite entries")); - } - if (itemMap.value("state").toString() == "archived") { - entry->addTag(QObject::tr("Archived", "Tag for archived entries")); - } - - // Parse the details map by setting the username, password, and notes first - const auto loginFields = detailsMap.value("loginFields").toList(); - for (const auto& field : loginFields) { - const auto fieldMap = field.toMap(); - const auto designation = fieldMap.value("designation").toString(); - if (designation.compare("username", Qt::CaseInsensitive) == 0) { - entry->setUsername(fieldMap.value("value").toString()); - } else if (designation.compare("password", Qt::CaseInsensitive) == 0) { - entry->setPassword(fieldMap.value("value").toString()); - } - } - if (entry->password().isEmpty() && detailsMap.contains("password")) { - entry->setPassword(detailsMap.value("password").toString()); - } - entry->setNotes(detailsMap.value("notesPlain").toString()); - - // Dive into the item sections to pull out advanced attributes - const auto sections = detailsMap.value("sections").toList(); - for (const auto& section : sections) { - // Derive a prefix for attribute names using the title or uuid if missing - const auto sectionMap = section.toMap(); - auto prefix = sectionMap.value("title").toString(); - if (prefix.isEmpty()) { - prefix = QUuid::createUuid().toString().mid(1, 5); - } - - for (const auto& field : sectionMap.value("fields").toList()) { - // Form the name of the attribute using the prefix and title or id - const auto fieldMap = field.toMap(); - auto name = fieldMap.value("title").toString(); - if (name.isEmpty()) { - name = fieldMap.value("id").toString(); - } - name = QString("%1_%2").arg(prefix, name); - - const auto valueMap = fieldMap.value("value").toMap(); - const auto key = valueMap.firstKey(); - if (key == "totp") { - auto totp = valueMap.value(key).toString(); - if (!totp.startsWith("otpauth://")) { - // Build otpauth url - QUrl url(QString("otpauth://totp/%1:%2?secret=%3") - .arg(QString(QUrl::toPercentEncoding(entry->title())), - QString(QUrl::toPercentEncoding(entry->username())), - QString(QUrl::toPercentEncoding(totp)))); - totp = url.toString(QUrl::FullyEncoded); - } - - if (entry->hasTotp()) { - // Store multiple TOTP definitions as additional otp attributes - int i = 0; - name = "otp"; - const auto attributes = entry->attributes()->keys(); - while (attributes.contains(name)) { - name = QString("otp_%1").arg(++i); - } - entry->attributes()->set(name, totp, true); - } else { - // First otp value encountered gets formal storage - entry->setTotp(Totp::parseSettings(totp)); - } - } else if (key == "file") { - // Add a file to the entry attachments - const auto fileMap = valueMap.value(key).toMap(); - const auto fileName = fileMap.value("fileName").toString(); - const auto docId = fileMap.value("documentId").toString(); - const auto data = extractFile(uf, QString("files/%1__%2").arg(docId, fileName)); - if (!data.isNull()) { - entry->attachments()->set(fileName, data); - } - } else { - auto value = valueMap.value(key).toString(); - if (key == "date") { - // Convert date fields from Unix time - value = QDateTime::fromSecsSinceEpoch(valueMap.value(key).toULongLong(), Qt::UTC).toString(); - } else if (key == "email") { - // Email address is buried in a sub-value - value = valueMap.value(key).toMap().value("email_address").toString(); - } else if (key == "address") { - // Combine all the address attributes into a fully formed structure - const auto address = valueMap.value(key).toMap(); - value = address.value("street").toString() + "\n" + address.value("city").toString() + ", " - + address.value("state").toString() + " " + address.value("zip").toString() + "\n" - + address.value("country").toString(); - } - - if (!value.isEmpty()) { - entry->attributes()->set(name, value, key == "concealed"); - } - } - } - } - - // Add a document attachment if defined - if (detailsMap.contains("documentAttributes")) { - const auto document = detailsMap.value("documentAttributes").toMap(); - const auto fileName = document.value("fileName").toString(); - const auto docId = document.value("documentId").toString(); - const auto data = extractFile(uf, QString("files/%1__%2").arg(docId, fileName)); - if (!data.isNull()) { - entry->attachments()->set(fileName, data); - } - } - - // Collapse any accumulated history - entry->removeHistoryItems(entry->historyItems()); - - // Adjust the created and modified times - auto timeInfo = entry->timeInfo(); - const auto createdTime = QDateTime::fromSecsSinceEpoch(itemMap.value("createdAt").toULongLong(), Qt::UTC); - const auto modifiedTime = QDateTime::fromSecsSinceEpoch(itemMap.value("updatedAt").toULongLong(), Qt::UTC); - timeInfo.setCreationTime(createdTime); - timeInfo.setLastModificationTime(modifiedTime); - timeInfo.setLastAccessTime(modifiedTime); - entry->setTimeInfo(timeInfo); - - return entry.take(); - } - - void writeVaultToDatabase(const QJsonObject& vault, QSharedPointer db, unzFile uf = nullptr) - { - if (!vault.contains("attrs") || !vault.contains("items")) { - // Early out if the vault is missing critical items - return; - } - - const auto attr = vault.value("attrs").toObject().toVariantMap(); - - // Create group and assign basic values - auto group = new Group(); - group->setUuid(QUuid::createUuid()); - group->setName(attr.value("name").toString()); - group->setParent(db->rootGroup()); - - const auto items = vault.value("items").toArray(); - for (const auto& item : items) { - auto entry = readItem(item.toObject(), uf); - if (entry) { - entry->setGroup(group, false); - } - } - - // Add the group icon if present - const auto icon = attr.value("avatar").toString(); - if (!icon.isEmpty()) { - auto data = extractFile(uf, QString("files/%1").arg(icon)); - if (!data.isNull()) { - const auto uuid = QUuid::createUuid(); - db->metadata()->addCustomIcon(uuid, data); - group->setIcon(uuid); - } - } - } -} // namespace - -bool OPUXReader::hasError() -{ - return !m_error.isEmpty(); -} - -QString OPUXReader::errorString() -{ - return m_error; -} - -QSharedPointer OPUXReader::convert(const QString& path) -{ - m_error.clear(); - - QFileInfo fileinfo(path); - if (!fileinfo.exists()) { - m_error = QObject::tr("File does not exist.").arg(path); - return {}; - } - - // 1PUX is a zip file format, open it and process the contents in memory - auto uf = unzOpen64(fileinfo.absoluteFilePath().toLatin1().constData()); - if (!uf) { - m_error = QObject::tr("Invalid 1PUX file format: Not a valid ZIP file."); - return {}; - } - - // Find the export.data file, if not found this isn't a 1PUX file - auto data = extractFile(uf, "export.data"); - if (data.isNull()) { - m_error = QObject::tr("Invalid 1PUX file format: Missing export.data"); - unzClose(uf); - return {}; - } - - auto db = QSharedPointer::create(); - db->rootGroup()->setName(QObject::tr("1Password Import")); - const auto json = QJsonDocument::fromJson(data); - - const auto account = json.object().value("accounts").toArray().first().toObject(); - const auto vaults = account.value("vaults").toArray(); - - for (const auto& vault : vaults) { - writeVaultToDatabase(vault.toObject(), db, uf); - } - - unzClose(uf); - return db; -} diff --git a/src/format/OPUXReader.h b/src/format/OPUXReader.h deleted file mode 100644 index e2779c814..000000000 --- a/src/format/OPUXReader.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (C) 2023 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 OPUX_READER_H -#define OPUX_READER_H - -#include - -class Database; - -/*! - * Imports a 1Password vault in 1PUX format: https://support.1password.com/1pux-format/ - */ -class OPUXReader -{ -public: - explicit OPUXReader() = default; - ~OPUXReader() = default; - - QSharedPointer convert(const QString& path); - - bool hasError(); - QString errorString(); - -private: - QString m_error; -}; - -#endif // OPUX_READER_H diff --git a/src/format/OpData01.cpp b/src/format/OpData01.cpp index a51ff8fdb..3ded0288c 100644 --- a/src/format/OpData01.cpp +++ b/src/format/OpData01.cpp @@ -27,7 +27,9 @@ OpData01::OpData01(QObject* parent) { } -OpData01::~OpData01() = default; +OpData01::~OpData01() +{ +} bool OpData01::decodeBase64(QString const& b64String, const QByteArray& key, const QByteArray& hmacKey) { diff --git a/src/format/OpData01.h b/src/format/OpData01.h index 960c67b1f..df6a0b442 100644 --- a/src/format/OpData01.h +++ b/src/format/OpData01.h @@ -22,7 +22,7 @@ /*! * Packages and transports the AgileBits data structure called \c OpData01 - * used to encrypt and provide HMAC for encrypted data. + * used to encypt and provide HMAC for encrypted data. * \sa https://support.1password.com/opvault-design/#opdata01 */ class OpData01 : public QObject diff --git a/src/format/OpVaultReader.cpp b/src/format/OpVaultReader.cpp index 779e25fda..201354bce 100644 --- a/src/format/OpVaultReader.cpp +++ b/src/format/OpVaultReader.cpp @@ -31,49 +31,70 @@ OpVaultReader::OpVaultReader(QObject* parent) : QObject(parent) + , m_error(false) { } -OpVaultReader::~OpVaultReader() = default; +OpVaultReader::~OpVaultReader() +{ +} -QSharedPointer OpVaultReader::convert(QDir& opdataDir, const QString& password) +Database* OpVaultReader::readDatabase(QDir& opdataDir, const QString& password) { if (!opdataDir.exists()) { - m_error = tr("Directory .opvault must exist"); - return {}; + m_error = true; + m_errorStr = tr("Directory .opvault must exist"); + return nullptr; } if (!opdataDir.isReadable()) { - m_error = tr("Directory .opvault must be readable"); - return {}; + m_error = true; + m_errorStr = tr("Directory .opvault must be readable"); + return nullptr; } // https://support.1password.com/opvault-design/#directory-layout QDir defaultDir = QDir(opdataDir); if (!defaultDir.cd("default")) { - m_error = tr("Directory .opvault/default must exist"); - return {}; + m_error = true; + m_errorStr = tr("Directory .opvault/default must exist"); + return nullptr; } if (!defaultDir.isReadable()) { - m_error = tr("Directory .opvault/default must be readable"); - return {}; + m_error = true; + m_errorStr = tr("Directory .opvault/default must be readable"); + return nullptr; } auto vaultName = opdataDir.dirName(); - auto db = QSharedPointer::create(); + auto key = QSharedPointer::create(); + key->addKey(QSharedPointer::create(password)); + + QScopedPointer db(new Database()); + db->setKdf(KeePass2::uuidToKdf(KeePass2::KDF_ARGON2D)); + db->setCipher(KeePass2::CIPHER_AES256); + db->setKey(key, true, false); + db->metadata()->setName(vaultName); + auto rootGroup = db->rootGroup(); + rootGroup->setTimeInfo({}); + rootGroup->setUpdateTimeinfo(false); rootGroup->setName(vaultName.remove(".opvault")); + rootGroup->setUuid(QUuid::createUuid()); populateCategoryGroups(rootGroup); QFile profileJsFile(defaultDir.absoluteFilePath("profile.js")); QJsonObject profileJson = readAndAssertJsonFile(profileJsFile, "var profile=", ";"); if (profileJson.isEmpty()) { - return {}; + return nullptr; } if (!processProfileJson(profileJson, password, rootGroup)) { zeroKeys(); - return {}; + return nullptr; + } + if (profileJson.contains("uuid") and profileJson["uuid"].isString()) { + rootGroup->setUuid(Tools::hexToUuid(profileJson["uuid"].toString())); } QFile foldersJsFile(defaultDir.filePath("folders.js")); @@ -81,7 +102,7 @@ QSharedPointer OpVaultReader::convert(QDir& opdataDir, const QString& QJsonObject foldersJs = readAndAssertJsonFile(foldersJsFile, "loadFolders(", ");"); if (!processFolderJson(foldersJs, rootGroup)) { zeroKeys(); - return {}; + return nullptr; } } @@ -131,17 +152,17 @@ QSharedPointer OpVaultReader::convert(QDir& opdataDir, const QString& } zeroKeys(); - return db; + return db.take(); } bool OpVaultReader::hasError() { - return !m_error.isEmpty(); + return m_error; } QString OpVaultReader::errorString() { - return m_error; + return m_errorStr; } bool OpVaultReader::processProfileJson(QJsonObject& profileJson, const QString& password, Group* rootGroup) @@ -163,29 +184,38 @@ bool OpVaultReader::processProfileJson(QJsonObject& profileJson, const QString& rootGroupTime.setLastModificationTime(QDateTime::fromTime_t(updatedAt, Qt::UTC)); rootGroup->setUuid(Tools::hexToUuid(profileJson["uuid"].toString())); - QScopedPointer derivedKeys(deriveKeysFromPassPhrase(salt, password, iterations)); - if (!derivedKeys->error.isEmpty()) { - m_error = derivedKeys->error; + const auto derivedKeys = deriveKeysFromPassPhrase(salt, password, iterations); + if (derivedKeys->error) { + m_error = true; + m_errorStr = derivedKeys->errorStr; + delete derivedKeys; return false; } QByteArray encKey = derivedKeys->encrypt; QByteArray hmacKey = derivedKeys->hmac; + delete derivedKeys; - QScopedPointer masterKeys(decodeB64CompositeKeys(masterKeyB64, encKey, hmacKey)); - if (!masterKeys->error.isEmpty()) { - m_error = masterKeys->error; + auto masterKeys = decodeB64CompositeKeys(masterKeyB64, encKey, hmacKey); + if (masterKeys->error) { + m_error = true; + m_errorStr = masterKeys->errorStr; + delete masterKeys; return false; } m_masterKey = masterKeys->encrypt; m_masterHmacKey = masterKeys->hmac; - QScopedPointer overviewKeys(decodeB64CompositeKeys(overviewKeyB64, encKey, hmacKey)); - if (!overviewKeys->error.isEmpty()) { - m_error = overviewKeys->error; + delete masterKeys; + auto overviewKeys = decodeB64CompositeKeys(overviewKeyB64, encKey, hmacKey); + if (overviewKeys->error) { + m_error = true; + m_errorStr = overviewKeys->errorStr; + delete overviewKeys; return false; } m_overviewKey = overviewKeys->encrypt; m_overviewHmacKey = overviewKeys->hmac; + delete overviewKeys; return true; } @@ -271,11 +301,11 @@ QJsonObject OpVaultReader::readAndAssertJsonFile(QFile& file, const QString& str auto absFilePath = fileInfo.absoluteFilePath(); if (!fileInfo.exists()) { qCritical() << QString("File \"%1\" must exist").arg(absFilePath); - return {}; + return QJsonObject(); } if (!fileInfo.isReadable()) { qCritical() << QString("File \"%1\" must be readable").arg(absFilePath); - return {}; + return QJsonObject(); } if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { @@ -301,7 +331,7 @@ QJsonObject OpVaultReader::readAndAssertJsonFile(QFile& file, const QString& str QJsonDocument jDoc = QJsonDocument::fromJson(filePayload, error); if (!jDoc.isObject()) { qCritical() << "Expected " << filePayload << "to be a JSON Object"; - return {}; + return QJsonObject(); } return jDoc.object(); } @@ -310,13 +340,15 @@ QJsonObject OpVaultReader::readAndAssertJsonFile(QFile& file, const QString& str OpVaultReader::DerivedKeyHMAC* OpVaultReader::decodeB64CompositeKeys(const QString& b64, const QByteArray& encKey, const QByteArray& hmacKey) { + auto result = new DerivedKeyHMAC(); OpData01 keyKey01; if (!keyKey01.decodeBase64(b64, encKey, hmacKey)) { - auto result = new DerivedKeyHMAC(); - result->error = tr("Unable to decode masterKey: %1").arg(keyKey01.errorString()); + result->error = true; + result->errorStr = tr("Unable to decode masterKey: %1").arg(keyKey01.errorString()); return result; } + delete result; const QByteArray keyKey = keyKey01.getClearText(); @@ -334,6 +366,7 @@ OpVaultReader::decodeB64CompositeKeys(const QString& b64, const QByteArray& encK OpVaultReader::DerivedKeyHMAC* OpVaultReader::decodeCompositeKeys(const QByteArray& keyKey) { auto result = new DerivedKeyHMAC; + result->error = false; auto digest = CryptoHash::hash(keyKey, CryptoHash::Sha512); result->encrypt = digest.left(32); @@ -352,6 +385,7 @@ OpVaultReader::DerivedKeyHMAC* OpVaultReader::deriveKeysFromPassPhrase(QByteArray& salt, const QString& password, unsigned long iterations) { auto result = new DerivedKeyHMAC; + result->error = false; QByteArray out(64, '\0'); try { @@ -363,7 +397,8 @@ OpVaultReader::deriveKeysFromPassPhrase(QByteArray& salt, const QString& passwor reinterpret_cast(salt.constData()), salt.size()); } catch (std::exception& e) { - result->error = tr("Unable to derive master key: %1").arg(e.what()); + result->error = true; + result->errorStr = tr("Unable to derive master key: %1").arg(e.what()); return result; } diff --git a/src/format/OpVaultReader.h b/src/format/OpVaultReader.h index 50ccf0b96..0dff45c2d 100644 --- a/src/format/OpVaultReader.h +++ b/src/format/OpVaultReader.h @@ -39,7 +39,7 @@ public: explicit OpVaultReader(QObject* parent = nullptr); ~OpVaultReader() override; - QSharedPointer convert(QDir& opdataDir, const QString& password); + Database* readDatabase(QDir& opdataDir, const QString& password); bool hasError(); QString errorString(); @@ -49,7 +49,8 @@ private: { QByteArray encrypt; QByteArray hmac; - QString error; + bool error; + QString errorStr; }; QJsonObject readAndAssertJsonFile(QFile& file, const QString& stripLeading, const QString& stripTrailing); @@ -105,14 +106,15 @@ private: /*! Used to blank the memory after the keys have been used. */ void zeroKeys(); - QString m_error; + bool m_error; + QString m_errorStr; QByteArray m_masterKey; QByteArray m_masterHmacKey; /*! Used to decrypt overview text, such as folder names. */ QByteArray m_overviewKey; QByteArray m_overviewHmacKey; - friend class TestImports; + friend class TestOpVaultReader; }; #endif /* OPVAULT_READER_H_ */ diff --git a/src/format/OpVaultReaderAttachments.cpp b/src/format/OpVaultReaderAttachments.cpp index c9dc6c76e..7c65b7f5a 100644 --- a/src/format/OpVaultReaderAttachments.cpp +++ b/src/format/OpVaultReaderAttachments.cpp @@ -229,10 +229,6 @@ void OpVaultReader::fillAttachment(Entry* entry, qWarning() << QString("Unexpected type of attachment \"filename\": %1").arg(attFilename.type()); } } - if (entry->attachments()->hasKey(attachKey)) { - // Prepend a random string to the attachment name to avoid collisions - attachKey.prepend(QString("%1_").arg(QUuid::createUuid().toString().mid(1, 5))); - } entry->attachments()->set(attachKey, attachPayload); } diff --git a/src/format/OpVaultReaderBandEntry.cpp b/src/format/OpVaultReaderBandEntry.cpp index 3a9774b68..6f79dd637 100644 --- a/src/format/OpVaultReaderBandEntry.cpp +++ b/src/format/OpVaultReaderBandEntry.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2023 KeePassXC Team + * Copyright (C) 2019 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 @@ -243,8 +243,7 @@ bool OpVaultReader::fillAttributes(Entry* entry, const QJsonObject& bandEntry) auto newUrl = urlObj["u"].toString(); if (newUrl != url) { // Add this url if it isn't the base one - entry->attributes()->set( - QString("%1_%2").arg(EntryAttributes::AdditionalUrlAttribute, QString::number(i)), newUrl); + entry->attributes()->set(QString("KP2A_URL_%1").arg(i), newUrl); ++i; } } diff --git a/src/format/OpVaultReaderSections.cpp b/src/format/OpVaultReaderSections.cpp index 02566a542..661b9d6c3 100644 --- a/src/format/OpVaultReaderSections.cpp +++ b/src/format/OpVaultReaderSections.cpp @@ -18,12 +18,11 @@ #include "OpVaultReader.h" #include "core/Entry.h" -#include "core/Totp.h" +#include "totp/totp.h" #include #include #include -#include #include namespace @@ -93,7 +92,7 @@ void OpVaultReader::fillFromSectionField(Entry* entry, const QString& sectionNam while (attributes.contains(name)) { name = QString("otp_%1").arg(++i); } - entry->attributes()->set(name, attrValue, true); + entry->attributes()->set(name, attrValue); } else if (attrValue.startsWith("otpauth://")) { QUrlQuery query(attrValue); // at least as of 1Password 7, they don't append the digits= and period= which totp.cpp requires @@ -121,7 +120,7 @@ void OpVaultReader::fillFromSectionField(Entry* entry, const QString& sectionNam if (kind == "date" || kind == "monthYear") { QDateTime date = resolveDate(kind, field.value("v")); if (date.isValid()) { - entry->attributes()->set(attrName, QLocale::system().toString(date, QLocale::ShortFormat)); + entry->attributes()->set(attrName, date.toString(Qt::SystemLocaleShortDate)); } else { qWarning() << QString("[%1] Invalid date attribute found: %2 = %3").arg(entry->title(), attrName, attrValue); @@ -129,14 +128,10 @@ void OpVaultReader::fillFromSectionField(Entry* entry, const QString& sectionNam } else if (kind == "address") { // Expand address into multiple attributes auto addrFields = field.value("v").toObject().toVariantMap(); - for (auto& part : addrFields.keys()) { + for (auto part : addrFields.keys()) { entry->attributes()->set(attrName + QString("_%1").arg(part), addrFields.value(part).toString()); } } else { - if (entry->attributes()->hasKey(attrName)) { - // Append a random string to the attribute name to avoid collisions - attrName += QString("_%1").arg(QUuid::createUuid().toString().mid(1, 5)); - } entry->attributes()->set(attrName, attrValue, (kind == "password" || kind == "concealed")); } } diff --git a/src/format/ProtonPassReader.cpp b/src/format/ProtonPassReader.cpp deleted file mode 100644 index b835406ee..000000000 --- a/src/format/ProtonPassReader.cpp +++ /dev/null @@ -1,227 +0,0 @@ -/* - * Copyright (C) 2024 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 "ProtonPassReader.h" - -#include "core/Database.h" -#include "core/Entry.h" -#include "core/Group.h" -#include "core/Metadata.h" -#include "core/Tools.h" -#include "core/Totp.h" -#include "crypto/CryptoHash.h" - -#include -#include -#include -#include -#include -#include -#include -#include - -namespace -{ - Entry* readItem(const QJsonObject& item) - { - const auto itemMap = item.toVariantMap(); - const auto dataMap = itemMap.value("data").toMap(); - const auto metadataMap = dataMap.value("metadata").toMap(); - - // Create entry and assign basic values - QScopedPointer entry(new Entry()); - entry->setUuid(QUuid::createUuid()); - entry->setTitle(metadataMap.value("name").toString()); - entry->setNotes(metadataMap.value("note").toString()); - - if (itemMap.value("pinned").toBool()) { - entry->addTag(QObject::tr("Favorite", "Tag for favorite entries")); - } - - // Handle specific item types - auto type = dataMap.value("type").toString(); - - // Login - if (type.compare("login", Qt::CaseInsensitive) == 0) { - const auto loginMap = dataMap.value("content").toMap(); - entry->setUsername(loginMap.value("itemUsername").toString()); - entry->setPassword(loginMap.value("password").toString()); - if (loginMap.contains("totpUri")) { - auto totp = loginMap.value("totpUri").toString(); - if (!totp.startsWith("otpauth://")) { - QUrl url(QString("otpauth://totp/%1:%2?secret=%3") - .arg(QString(QUrl::toPercentEncoding(entry->title())), - QString(QUrl::toPercentEncoding(entry->username())), - QString(QUrl::toPercentEncoding(totp)))); - totp = url.toString(QUrl::FullyEncoded); - } - entry->setTotp(Totp::parseSettings(totp)); - } - - if (loginMap.contains("itemEmail")) { - // Place the email value as the username if empty, otherwise set it as an attribute - const auto email = loginMap.value("itemEmail").toString(); - if (entry->username().isEmpty()) { - entry->setUsername(email); - } else if (!email.isEmpty()) { - entry->attributes()->set("login_email", email); - } - } - - // Set the entry url(s) - int i = 1; - for (const auto& urlObj : loginMap.value("urls").toList()) { - const auto url = urlObj.toString(); - if (entry->url().isEmpty()) { - // First url encountered is set as the primary url - entry->setUrl(url); - } else { - // Subsequent urls - entry->attributes()->set( - QString("%1_%2").arg(EntryAttributes::AdditionalUrlAttribute, QString::number(i)), url); - ++i; - } - } - } - // Credit Card - else if (type.compare("creditCard", Qt::CaseInsensitive) == 0) { - const auto cardMap = dataMap.value("content").toMap(); - entry->setUsername(cardMap.value("number").toString()); - entry->setPassword(cardMap.value("verificationNumber").toString()); - const QStringList attrs({"cardholderName", "pin", "expirationDate"}); - const QStringList sensitive({"pin"}); - for (const auto& attr : attrs) { - auto value = cardMap.value(attr).toString(); - if (!value.isEmpty()) { - entry->attributes()->set("card_" + attr, value, sensitive.contains(attr)); - } - } - } - - // Parse extra fields - for (const auto& field : dataMap.value("extraFields").toList()) { - // Derive a prefix for attribute names using the title or uuid if missing - const auto fieldMap = field.toMap(); - auto name = fieldMap.value("fieldName").toString(); - if (entry->attributes()->hasKey(name)) { - name = QString("%1_%2").arg(name, QUuid::createUuid().toString().mid(1, 5)); - } - - QString value; - const auto fieldType = fieldMap.value("type").toString(); - if (fieldType.compare("totp", Qt::CaseInsensitive) == 0) { - value = fieldMap.value("data").toJsonObject().value("totpUri").toString(); - } else { - value = fieldMap.value("data").toJsonObject().value("content").toString(); - } - - entry->attributes()->set(name, value, fieldType.compare("hidden", Qt::CaseInsensitive) == 0); - } - - // Checked expired/deleted state - if (itemMap.value("state").toInt() == 2) { - entry->setExpires(true); - entry->setExpiryTime(QDateTime::currentDateTimeUtc()); - } - - // Collapse any accumulated history - entry->removeHistoryItems(entry->historyItems()); - - // Adjust the created and modified times - auto timeInfo = entry->timeInfo(); - const auto createdTime = QDateTime::fromSecsSinceEpoch(itemMap.value("createTime").toULongLong(), Qt::UTC); - const auto modifiedTime = QDateTime::fromSecsSinceEpoch(itemMap.value("modifyTime").toULongLong(), Qt::UTC); - timeInfo.setCreationTime(createdTime); - timeInfo.setLastModificationTime(modifiedTime); - timeInfo.setLastAccessTime(modifiedTime); - entry->setTimeInfo(timeInfo); - - return entry.take(); - } - - void writeVaultToDatabase(const QJsonObject& vault, QSharedPointer db) - { - // Create groups from vaults and store a temporary map of id -> uuid - const auto vaults = vault.value("vaults").toObject().toVariantMap(); - for (const auto& vaultId : vaults.keys()) { - auto vaultObj = vaults.value(vaultId).toJsonObject(); - auto group = new Group(); - group->setUuid(QUuid::createUuid()); - group->setName(vaultObj.value("name").toString()); - group->setNotes(vaultObj.value("description").toString()); - group->setParent(db->rootGroup()); - - const auto items = vaultObj.value("items").toArray(); - for (const auto& item : items) { - auto entry = readItem(item.toObject()); - if (entry) { - entry->setGroup(group, false); - } - } - } - } -} // namespace - -bool ProtonPassReader::hasError() -{ - return !m_error.isEmpty(); -} - -QString ProtonPassReader::errorString() -{ - return m_error; -} - -QSharedPointer ProtonPassReader::convert(const QString& path) -{ - m_error.clear(); - - QFileInfo fileinfo(path); - if (!fileinfo.exists()) { - m_error = QObject::tr("File does not exist.").arg(path); - return {}; - } - - // Bitwarden uses a json file format - QFile file(fileinfo.absoluteFilePath()); - if (!file.open(QFile::ReadOnly)) { - m_error = QObject::tr("Cannot open file: %1").arg(file.errorString()); - return {}; - } - - QJsonParseError error; - auto json = QJsonDocument::fromJson(file.readAll(), &error).object(); - if (error.error != QJsonParseError::NoError) { - m_error = - QObject::tr("Cannot parse file: %1 at position %2").arg(error.errorString(), QString::number(error.offset)); - return {}; - } - - file.close(); - - if (json.value("encrypted").toBool()) { - m_error = QObject::tr("Encrypted files are not supported."); - return {}; - } - - auto db = QSharedPointer::create(); - db->rootGroup()->setName(QObject::tr("Proton Pass Import")); - - writeVaultToDatabase(json, db); - - return db; -} diff --git a/src/format/ProtonPassReader.h b/src/format/ProtonPassReader.h deleted file mode 100644 index 74764b890..000000000 --- a/src/format/ProtonPassReader.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (C) 2024 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 PROTONPASS_READER_H -#define PROTONPASS_READER_H - -#include - -class Database; - -/*! - * Imports a Proton Pass vault in JSON format: https://proton.me/support/pass-export - */ -class ProtonPassReader -{ -public: - explicit ProtonPassReader() = default; - ~ProtonPassReader() = default; - - QSharedPointer convert(const QString& path); - - bool hasError(); - QString errorString(); - -private: - QString m_error; -}; - -#endif // PROTONPASS_READER_H diff --git a/src/gui/AboutDialog.cpp b/src/gui/AboutDialog.cpp index bc3960d11..00d12c65e 100644 --- a/src/gui/AboutDialog.cpp +++ b/src/gui/AboutDialog.cpp @@ -250,7 +250,7 @@ static const QString aboutContributors = R"(
  • עברית (Hebrew): avimar, ronyala, shemeshg, shmag18, ThunderB0lt, tryandtry, ztwersky
  • magyar (Hungarian): andras_tim, bubu, entaevau, kempelen, meskobalazs, spammy, typingseashell, urbalazs
  • Íslenska (Icelandic): MannVera
  • -
  • Bahasa Indonesia (Indonesian): achmad, algustionesa, bora_ach, racrbmr, zk
  • +
  • Bahasa (Indonesian): achmad, algustionesa, bora_ach, racrbmr, zk
  • Italiano (Italian): aleb2000, amaxis, bovirus, duncanmid, FranzMari, Gringoarg, idetao, lucaim, NITAL, Peo, Pietrog, salvatorecordiano, seatedscribe, Stemby, the.sailor, tosky, VosaxAlo
  • 日本語 (Japanese): AlCooo, gojpdchx, helloguys, masoo, p2635, Shinichirou_Yamada, shortarrow, ssuhung, tadasu, @@ -327,7 +327,9 @@ AboutDialog::AboutDialog(QWidget* parent) m_ui->buttonBox->button(QDialogButtonBox::Close)->setDefault(true); } -AboutDialog::~AboutDialog() = default; +AboutDialog::~AboutDialog() +{ +} void AboutDialog::copyToClipboard() { diff --git a/src/gui/AboutDialog.h b/src/gui/AboutDialog.h index 645fcef92..9ea0dc802 100644 --- a/src/gui/AboutDialog.h +++ b/src/gui/AboutDialog.h @@ -32,7 +32,7 @@ class AboutDialog : public QDialog public: explicit AboutDialog(QWidget* parent = nullptr); - ~AboutDialog() override; + ~AboutDialog(); protected slots: void copyToClipboard(); diff --git a/src/gui/ActionCollection.cpp b/src/gui/ActionCollection.cpp deleted file mode 100644 index 3db86a899..000000000 --- a/src/gui/ActionCollection.cpp +++ /dev/null @@ -1,119 +0,0 @@ -/* - * Copyright (C) 2024 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 "ActionCollection.h" -#include "core/Config.h" - -#include - -ActionCollection* ActionCollection::instance() -{ - static ActionCollection ac; - return ∾ -} - -QList ActionCollection::actions() const -{ - return m_actions; -} - -void ActionCollection::addAction(QAction* action) -{ - if (!m_actions.contains(action)) { - m_actions << action; - } -} - -void ActionCollection::addActions(const QList& actions) -{ - for (auto a : actions) { - addAction(a); - } -} - -QKeySequence ActionCollection::defaultShortcut(const QAction* action) const -{ - auto shortcuts = defaultShortcuts(action); - return shortcuts.isEmpty() ? QKeySequence() : shortcuts.first(); -} - -QList ActionCollection::defaultShortcuts(const QAction* action) const -{ - return action->property("defaultShortcuts").value>(); -} - -void ActionCollection::setDefaultShortcut(QAction* action, const QKeySequence& shortcut) -{ - setDefaultShortcuts(action, {shortcut}); -} - -void ActionCollection::setDefaultShortcut(QAction* action, QKeySequence::StandardKey standard) -{ - if (!QKeySequence::keyBindings(standard).isEmpty()) { - setDefaultShortcuts(action, QKeySequence::keyBindings(standard)); - } -} - -void ActionCollection::setDefaultShortcuts(QAction* action, const QList& shortcuts) -{ - action->setShortcuts(shortcuts); - action->setProperty("defaultShortcuts", QVariant::fromValue(shortcuts)); -} - -void ActionCollection::restoreShortcuts() -{ - const auto shortcuts = Config::instance()->getShortcuts(); - QHash actionsByName; - for (auto action : m_actions) { - actionsByName.insert(action->objectName(), action); - } - for (const auto& shortcut : shortcuts) { - if (actionsByName.contains(shortcut.name)) { - const auto key = QKeySequence::fromString(shortcut.shortcut); - actionsByName.value(shortcut.name)->setShortcut(key); - } - } -} - -void ActionCollection::saveShortcuts() -{ - QList shortcuts; - shortcuts.reserve(m_actions.size()); - for (auto a : m_actions) { - // Only store non-default shortcut assignments - if (a->shortcut() != defaultShortcut(a)) { - shortcuts << Config::ShortcutEntry{a->objectName(), a->shortcut().toString()}; - } - } - Config::instance()->setShortcuts(shortcuts); -} - -QAction* ActionCollection::isConflictingShortcut(const QAction* action, const QKeySequence& seq) const -{ - // Empty sequences don't conflict with anything - if (seq.isEmpty()) { - return nullptr; - } - - for (auto a : m_actions) { - if (a != action && a->shortcut() == seq) { - return a; - } - } - - return nullptr; -} diff --git a/src/gui/ActionCollection.h b/src/gui/ActionCollection.h deleted file mode 100644 index c9045b552..000000000 --- a/src/gui/ActionCollection.h +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (C) 2024 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 KEEPASSXC_ACTION_COLLECTION_H -#define KEEPASSXC_ACTION_COLLECTION_H - -#include -#include -#include - -/** - * This class manages all actions that are shortcut configurable. - * It also allows you to access the actions inside it from anywhere - * in the gui code. - */ -class ActionCollection : public QObject -{ - Q_OBJECT - ActionCollection() = default; - -public: - static ActionCollection* instance(); - - QList actions() const; - - void addAction(QAction* action); - void addActions(const QList& actions); - - QKeySequence defaultShortcut(const QAction* a) const; - QList defaultShortcuts(const QAction* a) const; - - void setDefaultShortcut(QAction* a, const QKeySequence& shortcut); - void setDefaultShortcut(QAction* a, QKeySequence::StandardKey standard); - void setDefaultShortcuts(QAction* a, const QList& shortcut); - - // Check if any action conflicts with @p seq and return the conflicting action - QAction* isConflictingShortcut(const QAction* action, const QKeySequence& seq) const; - -public slots: - void restoreShortcuts(); - void saveShortcuts(); - -private: - QList m_actions; -}; - -#endif diff --git a/src/gui/Application.cpp b/src/gui/Application.cpp index 01553ad91..a73fbda60 100644 --- a/src/gui/Application.cpp +++ b/src/gui/Application.cpp @@ -35,7 +35,7 @@ #include #if defined(Q_OS_UNIX) -#include +#include #include #include #endif @@ -44,7 +44,6 @@ namespace { constexpr int WaitTimeoutMSec = 150; const char BlockSizeProperty[] = "blockSize"; - int g_OriginalFontSize = 0; } // namespace Application::Application(int& argc, char** argv) @@ -148,11 +147,16 @@ Application::~Application() * configuration OS security properties, and loading translators. * A QApplication object has to be instantiated before calling this function. */ -void Application::bootstrap(const QString& uiLanguage) +void Application::bootstrap() { - Bootstrap::bootstrap(uiLanguage); + Bootstrap::bootstrap(); - applyFontSize(); +#ifdef Q_OS_WIN + // Qt on Windows uses "MS Shell Dlg 2" as the default font for many widgets, which resolves + // to Tahoma 8pt, whereas the correct font would be "Segoe UI" 9pt. + // Apparently, some widgets are already using the correct font. Thanks, MuseScore for this neat fix! + QApplication::setFont(QApplication::font("QMessageBox")); +#endif osUtils->registerNativeEventFilter(); MessageBox::initializeButtonDefs(); @@ -201,28 +205,6 @@ void Application::applyTheme() } } -void Application::applyFontSize() -{ - auto font = QApplication::font(); - - // Store the original font size on first call - if (g_OriginalFontSize <= 0) { -#ifdef Q_OS_WIN - // Qt on Windows uses "MS Shell Dlg 2" as the default font for many widgets, which resolves - // to Tahoma 8pt, whereas the correct font would be "Segoe UI" 9pt. - // Apparently, some widgets are already using the correct font. Thanks, MuseScore for this neat fix! - font = QApplication::font("QMessageBox"); -#endif - g_OriginalFontSize = font.pointSize(); - } - - // Adjust application wide default font size - auto newSize = g_OriginalFontSize + qBound(-2, config()->get(Config::GUI_FontSizeOffset).toInt(), 4); - font.setPointSize(newSize); - QApplication::setFont(font); - QApplication::setFont(font, "QWidget"); -} - bool Application::event(QEvent* event) { // Handle Apple QFileOpenEvent from finder (double click on .kdbx file) @@ -302,7 +284,7 @@ void Application::processIncomingConnection() void Application::socketReadyRead() { - auto socket = qobject_cast(sender()); + QLocalSocket* socket = qobject_cast(sender()); if (!socket) { return; } diff --git a/src/gui/Application.h b/src/gui/Application.h index 349c93923..9cbf48e59 100644 --- a/src/gui/Application.h +++ b/src/gui/Application.h @@ -21,7 +21,6 @@ #define KEEPASSX_APPLICATION_H #include -#include #include #if defined(Q_OS_WIN) || (defined(Q_OS_UNIX) && !defined(Q_OS_MACOS)) @@ -41,8 +40,7 @@ public: Application(int& argc, char** argv); ~Application() override; - static void bootstrap(const QString& uiLanguage = "system"); - static void applyFontSize(); + static void bootstrap(); void applyTheme(); diff --git a/src/gui/ApplicationSettingsWidget.cpp b/src/gui/ApplicationSettingsWidget.cpp index 8d53d6f0f..b48aaf0a1 100644 --- a/src/gui/ApplicationSettingsWidget.cpp +++ b/src/gui/ApplicationSettingsWidget.cpp @@ -1,6 +1,6 @@ /* - * Copyright (C) 2023 KeePassXC Team * 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 @@ -21,7 +21,6 @@ #include "ui_ApplicationSettingsWidgetSecurity.h" #include #include -#include #include "config-keepassx.h" @@ -30,12 +29,14 @@ #include "gui/Icons.h" #include "gui/MainWindow.h" #include "gui/osutils/OSUtils.h" -#include "quickunlock/QuickUnlockInterface.h" #include "FileDialog.h" #include "MessageBox.h" -#ifdef WITH_XC_BROWSER -#include "browser/BrowserSettingsPage.h" +#ifdef Q_OS_MACOS +#include "touchid/TouchID.h" +#endif +#ifdef Q_CC_MSVC +#include "winhello/WindowsHello.h" #endif class ApplicationSettingsWidget::ExtraPage @@ -100,9 +101,6 @@ ApplicationSettingsWidget::ApplicationSettingsWidget(QWidget* parent) m_generalUi->setupUi(m_generalWidget); addPage(tr("General"), icons()->icon("preferences-other"), m_generalWidget); addPage(tr("Security"), icons()->icon("security-high"), m_secWidget); -#ifdef WITH_XC_BROWSER - addSettingsPage(new BrowserSettingsPage()); -#endif if (!autoType()->isAvailable()) { m_generalUi->generalSettingsTabWidget->removeTab(1); @@ -117,8 +115,6 @@ ApplicationSettingsWidget::ApplicationSettingsWidget(QWidget* parent) connect(m_generalUi->systrayShowCheckBox, SIGNAL(toggled(bool)), SLOT(systrayToggled(bool))); connect(m_generalUi->rememberLastDatabasesCheckBox, SIGNAL(toggled(bool)), SLOT(rememberDatabasesToggled(bool))); connect(m_generalUi->resetSettingsButton, SIGNAL(clicked()), SLOT(resetSettings())); - connect(m_generalUi->importSettingsButton, SIGNAL(clicked()), SLOT(importSettings())); - connect(m_generalUi->exportSettingsButton, SIGNAL(clicked()), SLOT(exportSettings())); connect(m_generalUi->useAlternativeSaveCheckBox, SIGNAL(toggled(bool)), m_generalUi->alternativeSaveComboBox, SLOT(setEnabled(bool))); @@ -147,22 +143,6 @@ ApplicationSettingsWidget::ApplicationSettingsWidget(QWidget* parent) m_secUi->lockDatabaseMinimizeCheckBox->setEnabled(!state); }); - // Set Auto-Type shortcut when changed - connect( - m_generalUi->autoTypeShortcutWidget, &ShortcutWidget::shortcutChanged, this, [this](auto key, auto modifiers) { - QString error; - if (autoType()->registerGlobalShortcut(key, modifiers, &error)) { - m_generalUi->autoTypeShortcutWidget->setStyleSheet(""); - } else { - QToolTip::showText(mapToGlobal(rect().bottomLeft()), error); - m_generalUi->autoTypeShortcutWidget->setStyleSheet("background-color: #FF9696;"); - } - }); - connect(m_generalUi->autoTypeShortcutWidget, &ShortcutWidget::shortcutReset, this, [this] { - autoType()->unregisterGlobalShortcut(); - m_generalUi->autoTypeShortcutWidget->setStyleSheet(""); - }); - // Disable mouse wheel grab when scrolling // This prevents combo box and spinner values from changing without explicit focus auto mouseWheelFilter = new MouseWheelEventFilter(this); @@ -170,7 +150,6 @@ ApplicationSettingsWidget::ApplicationSettingsWidget(QWidget* parent) m_generalUi->toolButtonStyleComboBox->installEventFilter(mouseWheelFilter); m_generalUi->languageComboBox->installEventFilter(mouseWheelFilter); m_generalUi->trayIconAppearance->installEventFilter(mouseWheelFilter); - m_generalUi->fontSizeComboBox->installEventFilter(mouseWheelFilter); #ifdef WITH_XC_UPDATECHECK connect(m_generalUi->checkForUpdatesOnStartupCheckBox, SIGNAL(toggled(bool)), SLOT(checkUpdatesToggled(bool))); @@ -185,9 +164,20 @@ ApplicationSettingsWidget::ApplicationSettingsWidget(QWidget* parent) m_generalUi->faviconTimeoutLabel->setVisible(false); m_generalUi->faviconTimeoutSpinBox->setVisible(false); #endif + + bool showQuickUnlock = false; +#if defined(Q_OS_MACOS) + showQuickUnlock = TouchID::getInstance().isAvailable(); +#elif defined(Q_CC_MSVC) + showQuickUnlock = getWindowsHello()->isAvailable(); + connect(getWindowsHello(), &WindowsHello::availableChanged, m_secUi->quickUnlockCheckBox, &QCheckBox::setVisible); +#endif + m_secUi->quickUnlockCheckBox->setVisible(showQuickUnlock); } -ApplicationSettingsWidget::~ApplicationSettingsWidget() = default; +ApplicationSettingsWidget::~ApplicationSettingsWidget() +{ +} void ApplicationSettingsWidget::addSettingsPage(ISettingsPage* page) { @@ -226,7 +216,6 @@ void ApplicationSettingsWidget::loadSettings() m_generalUi->autoReloadOnChangeCheckBox->setChecked(config()->get(Config::AutoReloadOnChange).toBool()); m_generalUi->minimizeAfterUnlockCheckBox->setChecked(config()->get(Config::MinimizeAfterUnlock).toBool()); m_generalUi->minimizeOnOpenUrlCheckBox->setChecked(config()->get(Config::MinimizeOnOpenUrl).toBool()); - m_generalUi->openUrlOnDoubleClick->setChecked(config()->get(Config::OpenURLOnDoubleClick).toBool()); m_generalUi->hideWindowOnCopyCheckBox->setChecked(config()->get(Config::HideWindowOnCopy).toBool()); hideWindowOnCopyCheckBoxToggled(m_generalUi->hideWindowOnCopyCheckBox->isChecked()); m_generalUi->minimizeOnCopyRadioButton->setChecked(config()->get(Config::MinimizeOnCopy).toBool()); @@ -237,10 +226,6 @@ void ApplicationSettingsWidget::loadSettings() m_generalUi->autoTypeEntryURLMatchCheckBox->setChecked(config()->get(Config::AutoTypeEntryURLMatch).toBool()); m_generalUi->autoTypeHideExpiredEntryCheckBox->setChecked(config()->get(Config::AutoTypeHideExpiredEntry).toBool()); m_generalUi->faviconTimeoutSpinBox->setValue(config()->get(Config::FaviconDownloadTimeout).toInt()); - m_generalUi->ConfirmMoveEntryToRecycleBinCheckBox->setChecked( - !config()->get(Config::Security_NoConfirmMoveEntryToRecycleBin).toBool()); - m_generalUi->EnableCopyOnDoubleClickCheckBox->setChecked( - config()->get(Config::Security_EnableCopyOnDoubleClick).toBool()); m_generalUi->languageComboBox->clear(); QList> languages = Translator::availableLanguages(); @@ -252,8 +237,6 @@ void ApplicationSettingsWidget::loadSettings() m_generalUi->languageComboBox->setCurrentIndex(defaultIndex); } - m_generalUi->menubarShowCheckBox->setChecked(!config()->get(Config::GUI_HideMenubar).toBool()); - m_generalUi->toolbarShowCheckBox->setChecked(!config()->get(Config::GUI_HideToolbar).toBool()); m_generalUi->toolbarMovableCheckBox->setChecked(config()->get(Config::GUI_MovableToolbar).toBool()); m_generalUi->monospaceNotesCheckBox->setChecked(config()->get(Config::GUI_MonospaceNotes).toBool()); m_generalUi->colorPasswordsCheckBox->setChecked(config()->get(Config::GUI_ColorPasswords).toBool()); @@ -266,25 +249,10 @@ void ApplicationSettingsWidget::loadSettings() m_generalUi->toolButtonStyleComboBox->addItem(tr("Follow style"), Qt::ToolButtonFollowStyle); int toolButtonStyleIndex = m_generalUi->toolButtonStyleComboBox->findData(config()->get(Config::GUI_ToolButtonStyle)); - if (toolButtonStyleIndex >= 0) { + if (toolButtonStyleIndex > 0) { m_generalUi->toolButtonStyleComboBox->setCurrentIndex(toolButtonStyleIndex); } - m_generalUi->fontSizeComboBox->clear(); - m_generalUi->fontSizeComboBox->addItem(tr("Small"), -1); - m_generalUi->fontSizeComboBox->addItem(tr("Normal"), 0); - m_generalUi->fontSizeComboBox->addItem(tr("Medium"), 1); - m_generalUi->fontSizeComboBox->addItem(tr("Large"), 2); - - int fontSizeIndex = m_generalUi->fontSizeComboBox->findData(config()->get(Config::GUI_FontSizeOffset)); - if (fontSizeIndex >= 0) { - m_generalUi->fontSizeComboBox->setCurrentIndex(fontSizeIndex); - } else { - // Custom value entered into config file, add it to the list and select it - m_generalUi->fontSizeComboBox->addItem(tr("Custom"), config()->get(Config::GUI_FontSizeOffset).toInt()); - m_generalUi->fontSizeComboBox->setCurrentIndex(m_generalUi->fontSizeComboBox->count() - 1); - } - m_generalUi->systrayShowCheckBox->setChecked(config()->get(Config::GUI_ShowTrayIcon).toBool()); systrayToggled(m_generalUi->systrayShowCheckBox->isChecked()); m_generalUi->systrayMinimizeToTrayCheckBox->setChecked(config()->get(Config::GUI_MinimizeToTray).toBool()); @@ -342,13 +310,6 @@ void ApplicationSettingsWidget::loadSettings() && config()->get(Config::Security_LockDatabaseMinimize).toBool()); m_secUi->lockDatabaseOnScreenLockCheckBox->setChecked( config()->get(Config::Security_LockDatabaseScreenLock).toBool()); -#if defined(Q_OS_MACOS) - m_secUi->lockDatabasesOnUserSwitchCheckBox->setVisible(true); -#else - m_secUi->lockDatabasesOnUserSwitchCheckBox->setVisible(false); -#endif - m_secUi->lockDatabasesOnUserSwitchCheckBox->setChecked( - config()->get(Config::Security_LockDatabaseOnUserSwitch).toBool()); m_secUi->fallbackToSearch->setChecked(config()->get(Config::Security_IconDownloadFallback).toBool()); m_secUi->passwordsHiddenCheckBox->setChecked(config()->get(Config::Security_PasswordsHidden).toBool()); @@ -356,9 +317,14 @@ void ApplicationSettingsWidget::loadSettings() m_secUi->passwordPreviewCleartextCheckBox->setChecked( config()->get(Config::Security_HidePasswordPreviewPanel).toBool()); m_secUi->hideTotpCheckBox->setChecked(config()->get(Config::Security_HideTotpPreviewPanel).toBool()); + m_secUi->passwordsRepeatVisibleCheckBox->setChecked( + config()->get(Config::Security_PasswordsRepeatVisible).toBool()); m_secUi->hideNotesCheckBox->setChecked(config()->get(Config::Security_HideNotes).toBool()); + m_secUi->NoConfirmMoveEntryToRecycleBinCheckBox->setChecked( + config()->get(Config::Security_NoConfirmMoveEntryToRecycleBin).toBool()); + m_secUi->EnableCopyOnDoubleClickCheckBox->setChecked( + config()->get(Config::Security_EnableCopyOnDoubleClick).toBool()); - m_secUi->quickUnlockCheckBox->setEnabled(getQuickUnlock()->isAvailable()); m_secUi->quickUnlockCheckBox->setChecked(config()->get(Config::Security_QuickUnlock).toBool()); for (const ExtraPage& page : asConst(m_extraPages)) { @@ -399,7 +365,6 @@ void ApplicationSettingsWidget::saveSettings() config()->set(Config::AutoReloadOnChange, m_generalUi->autoReloadOnChangeCheckBox->isChecked()); config()->set(Config::MinimizeAfterUnlock, m_generalUi->minimizeAfterUnlockCheckBox->isChecked()); config()->set(Config::MinimizeOnOpenUrl, m_generalUi->minimizeOnOpenUrlCheckBox->isChecked()); - config()->set(Config::OpenURLOnDoubleClick, m_generalUi->openUrlOnDoubleClick->isChecked()); config()->set(Config::HideWindowOnCopy, m_generalUi->hideWindowOnCopyCheckBox->isChecked()); config()->set(Config::MinimizeOnCopy, m_generalUi->minimizeOnCopyRadioButton->isChecked()); config()->set(Config::DropToBackgroundOnCopy, m_generalUi->dropToBackgroundOnCopyRadioButton->isChecked()); @@ -408,9 +373,6 @@ void ApplicationSettingsWidget::saveSettings() config()->set(Config::AutoTypeEntryURLMatch, m_generalUi->autoTypeEntryURLMatchCheckBox->isChecked()); config()->set(Config::AutoTypeHideExpiredEntry, m_generalUi->autoTypeHideExpiredEntryCheckBox->isChecked()); config()->set(Config::FaviconDownloadTimeout, m_generalUi->faviconTimeoutSpinBox->value()); - config()->set(Config::Security_NoConfirmMoveEntryToRecycleBin, - !m_generalUi->ConfirmMoveEntryToRecycleBinCheckBox->isChecked()); - config()->set(Config::Security_EnableCopyOnDoubleClick, m_generalUi->EnableCopyOnDoubleClickCheckBox->isChecked()); auto language = m_generalUi->languageComboBox->currentData().toString(); if (config()->get(Config::GUI_Language) != language) { @@ -421,14 +383,11 @@ void ApplicationSettingsWidget::saveSettings() } config()->set(Config::GUI_Language, language); - config()->set(Config::GUI_HideMenubar, !m_generalUi->menubarShowCheckBox->isChecked()); - config()->set(Config::GUI_HideToolbar, !m_generalUi->toolbarShowCheckBox->isChecked()); config()->set(Config::GUI_MovableToolbar, m_generalUi->toolbarMovableCheckBox->isChecked()); config()->set(Config::GUI_MonospaceNotes, m_generalUi->monospaceNotesCheckBox->isChecked()); config()->set(Config::GUI_ColorPasswords, m_generalUi->colorPasswordsCheckBox->isChecked()); config()->set(Config::GUI_ToolButtonStyle, m_generalUi->toolButtonStyleComboBox->currentData().toString()); - config()->set(Config::GUI_FontSizeOffset, m_generalUi->fontSizeComboBox->currentData().toInt()); config()->set(Config::GUI_ShowTrayIcon, m_generalUi->systrayShowCheckBox->isChecked()); config()->set(Config::GUI_TrayIconAppearance, m_generalUi->trayIconAppearance->currentData().toString()); @@ -465,7 +424,6 @@ void ApplicationSettingsWidget::saveSettings() config()->set(Config::Security_LockDatabaseIdleSeconds, m_secUi->lockDatabaseIdleSpinBox->value()); config()->set(Config::Security_LockDatabaseMinimize, m_secUi->lockDatabaseMinimizeCheckBox->isChecked()); config()->set(Config::Security_LockDatabaseScreenLock, m_secUi->lockDatabaseOnScreenLockCheckBox->isChecked()); - config()->set(Config::Security_LockDatabaseOnUserSwitch, m_secUi->lockDatabasesOnUserSwitchCheckBox->isChecked()); config()->set(Config::Security_IconDownloadFallback, m_secUi->fallbackToSearch->isChecked()); config()->set(Config::Security_PasswordsHidden, m_secUi->passwordsHiddenCheckBox->isChecked()); @@ -473,11 +431,13 @@ void ApplicationSettingsWidget::saveSettings() config()->set(Config::Security_HidePasswordPreviewPanel, m_secUi->passwordPreviewCleartextCheckBox->isChecked()); config()->set(Config::Security_HideTotpPreviewPanel, m_secUi->hideTotpCheckBox->isChecked()); + config()->set(Config::Security_PasswordsRepeatVisible, m_secUi->passwordsRepeatVisibleCheckBox->isChecked()); config()->set(Config::Security_HideNotes, m_secUi->hideNotesCheckBox->isChecked()); + config()->set(Config::Security_NoConfirmMoveEntryToRecycleBin, + m_secUi->NoConfirmMoveEntryToRecycleBinCheckBox->isChecked()); + config()->set(Config::Security_EnableCopyOnDoubleClick, m_secUi->EnableCopyOnDoubleClickCheckBox->isChecked()); - if (m_secUi->quickUnlockCheckBox->isEnabled()) { - config()->set(Config::Security_QuickUnlock, m_secUi->quickUnlockCheckBox->isChecked()); - } + config()->set(Config::Security_QuickUnlock, m_secUi->quickUnlockCheckBox->isChecked()); // Security: clear storage if related settings are disabled if (!config()->get(Config::RememberLastDatabases).toBool()) { @@ -501,8 +461,8 @@ void ApplicationSettingsWidget::resetSettings() { // Confirm reset auto ans = MessageBox::question(this, - tr("Confirm Reset"), - tr("Are you sure you want to reset all settings to default?"), + tr("Reset Settings?"), + tr("Are you sure you want to reset all general and security settings to default?"), MessageBox::Reset | MessageBox::Cancel, MessageBox::Cancel); if (ans == MessageBox::Cancel) { @@ -537,33 +497,6 @@ void ApplicationSettingsWidget::resetSettings() emit settingsReset(); } -void ApplicationSettingsWidget::importSettings() -{ - auto file = fileDialog()->getOpenFileName(this, tr("Import KeePassXC Settings"), {}, "*.ini"); - if (file.isEmpty()) { - return; - } - - if (!config()->importSettings(file)) { - showMessage(tr("Failed to import settings from %1, not a valid settings file.").arg(file), - MessageWidget::Error); - return; - } - - loadSettings(); - emit settingsReset(); -} - -void ApplicationSettingsWidget::exportSettings() -{ - auto file = fileDialog()->getSaveFileName(this, tr("Export KeePassXC Settings"), {}, "*.ini"); - if (file.isEmpty()) { - return; - } - - config()->exportSettings(file); -} - void ApplicationSettingsWidget::reject() { // register the old key again as it might have changed @@ -626,4 +559,4 @@ void ApplicationSettingsWidget::selectBackupDirectory() m_generalUi->backupFilePath->setText( QDir(backupDirectory).filePath(config()->getDefault(Config::BackupFilePathPattern).toString())); } -} +} \ No newline at end of file diff --git a/src/gui/ApplicationSettingsWidget.h b/src/gui/ApplicationSettingsWidget.h index 7e43196b1..15fc5a344 100644 --- a/src/gui/ApplicationSettingsWidget.h +++ b/src/gui/ApplicationSettingsWidget.h @@ -30,7 +30,9 @@ namespace Ui class ISettingsPage { public: - virtual ~ISettingsPage() = default; + virtual ~ISettingsPage() + { + } virtual QString name() = 0; virtual QIcon icon() = 0; virtual QWidget* createWidget() = 0; @@ -44,7 +46,7 @@ class ApplicationSettingsWidget : public EditWidget public: explicit ApplicationSettingsWidget(QWidget* parent = nullptr); - ~ApplicationSettingsWidget() override; + ~ApplicationSettingsWidget(); void addSettingsPage(ISettingsPage* page); void loadSettings(); @@ -54,8 +56,6 @@ signals: private slots: void saveSettings(); void resetSettings(); - void importSettings(); - void exportSettings(); void reject(); void autoSaveToggled(bool checked); void hideWindowOnCopyCheckBoxToggled(bool checked); diff --git a/src/gui/ApplicationSettingsWidgetGeneral.ui b/src/gui/ApplicationSettingsWidgetGeneral.ui index eb69f2615..53bf9f724 100644 --- a/src/gui/ApplicationSettingsWidgetGeneral.ui +++ b/src/gui/ApplicationSettingsWidgetGeneral.ui @@ -7,7 +7,7 @@ 0 0 605 - 969 + 968 @@ -58,13 +58,13 @@ 0 0 - 568 - 1202 + 564 + 930 - 20 + 0 0 @@ -268,46 +268,58 @@ - - - 6 - + QLayout::SetMaximumSize - + + 6 + + - On database unlock, show entries that will expire within + On database unlock, show entries that - + true + + + 0 + 0 + + Qt::StrongFocus - On database unlock, show entries that will expire within + On database unlock, show entries that + + + have expired - days + days + + + will expire within 0 - 90 + 30 - 3 + 0 - + Qt::Horizontal @@ -368,25 +380,6 @@ - - 0 - - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 30 - 20 - - - - @@ -396,70 +389,41 @@ - Destination format: + Backup destination backupFilePath - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 6 - 20 - - - - false - <html><head/><body><p><span style=" font-weight:600;">{DB_FILENAME}</span> is replaced with the filename of the saved database without extension</p><p><span style=" font-weight:600;">{TIME:&lt;format&gt;}</span> is replaced with the specified time format (default: dd_MM_yyyy_hh-mm-ss)</p><p>See the User Guide for more details</p></body></html> + Specifies the database backup file location. Occurrences of "{DB_FILENAME}" are replaced with the filename of the saved database without extension. {TIME:<format>} is replaced with the backup time, see https://doc.qt.io/qt-5/qdatetime.html#toString. <format> defaults to format string "dd_MM_yyyy_hh-mm-ss". {DB_FILENAME}.old.kdbx - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 6 - 20 - - - - false - Choose folder... + Choose... + + + @@ -493,9 +457,6 @@ false - - QComboBox::AdjustToContents - Temporary file moved into place @@ -532,30 +493,6 @@ Entry Management - - - - Show confirmation before moving entries to recycle bin - - - - - - - Copy data on double clicking field in entry view - - - - - - - Open browser on double clicking URL field in entry view - - - true - - - @@ -712,18 +649,56 @@ 10 - - - - Qt::Horizontal + + + + + 0 + 0 + - - - 40 - 20 - + + Qt::StrongFocus - + + Toolbar button style + + + QComboBox::AdjustToContents + + + + + + + true + + + + 0 + 0 + + + + Movable toolbar + + + + + + + + 0 + 0 + + + + Qt::StrongFocus + + + Language selection + + @@ -744,59 +719,25 @@ - - - - true - - - - 0 - 0 - - + + - Movable toolbar + (restart program to activate) - - - - - 0 - 0 - + + + + Qt::Horizontal - - Qt::StrongFocus + + + 40 + 20 + - - Toolbar button style - - - QComboBox::AdjustToContents - - - - - - - - 0 - 0 - - - - Qt::StrongFocus - - - Language selection - - - QComboBox::AdjustToContents - - + @@ -809,6 +750,9 @@ 0 + + margin-right: 5px + Toolbar button style: @@ -820,58 +764,8 @@ - - - - (restart program to activate) - - - - - - - Font size: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - fontSizeComboBox - - - - - - - Qt::StrongFocus - - - Font size selection - - - QComboBox::AdjustToContents - - - - - - - Show toolbar - - - - - - - Show the menu bar by pressing the Alt key - - - Show menubar - - - @@ -941,9 +835,6 @@ Tray icon type - - QComboBox::AdjustToContents - @@ -1053,10 +944,26 @@ + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 10 + + + + - 6 + 0 QLayout::SetMaximumSize @@ -1069,32 +976,21 @@ - + Qt::Horizontal + + QSizePolicy::Expanding + - 40 + 50 20 - - - - Import settings… - - - - - - - Export settings… - - - @@ -1364,7 +1260,7 @@ ShortcutWidget QLineEdit -
    gui/widgets/ShortcutWidget.h
    +
    autotype/ShortcutWidget.h
    @@ -1391,9 +1287,6 @@ backupFilePathPicker useAlternativeSaveCheckBox alternativeSaveComboBox - ConfirmMoveEntryToRecycleBinCheckBox - EnableCopyOnDoubleClickCheckBox - openUrlOnDoubleClick useGroupIconOnEntryCreationCheckBox minimizeOnOpenUrlCheckBox hideWindowOnCopyCheckBox @@ -1403,17 +1296,12 @@ languageComboBox toolButtonStyleComboBox toolbarMovableCheckBox - toolbarShowCheckBox - menubarShowCheckBox - colorPasswordsCheckBox monospaceNotesCheckBox minimizeOnCloseCheckBox systrayShowCheckBox trayIconAppearance systrayMinimizeToTrayCheckBox resetSettingsButton - importSettingsButton - exportSettingsButton autoTypeEntryTitleMatchCheckBox autoTypeEntryURLMatchCheckBox autoTypeAskCheckBox diff --git a/src/gui/ApplicationSettingsWidgetSecurity.ui b/src/gui/ApplicationSettingsWidgetSecurity.ui index c4cb0e01f..10d353e11 100644 --- a/src/gui/ApplicationSettingsWidgetSecurity.ui +++ b/src/gui/ApplicationSettingsWidgetSecurity.ui @@ -7,13 +7,10 @@ 0 0 364 - 505 + 493 - - 20 - 0 @@ -31,7 +28,7 @@ Timeouts - + @@ -160,11 +157,11 @@ - + - Lock Options + Convenience - + @@ -179,13 +176,6 @@ - - - - Lock databases when switching user - - - @@ -193,19 +183,10 @@ - - - - - - - Convenience - - - + - Use placeholder for empty password fields + Require password repeat when it is visible @@ -216,6 +197,13 @@ + + + + Use placeholder for empty password fields + + + @@ -233,7 +221,21 @@ - Hide notes in the entry preview panel + Hide entry notes by default + + + + + + + Move entries to recycle bin without confirmation + + + + + + + Enable double click to copy the username/password entry columns @@ -281,14 +283,12 @@ lockDatabaseIdleSpinBox clearSearchCheckBox clearSearchSpinBox - quickUnlockCheckBox lockDatabaseOnScreenLockCheckBox - lockDatabasesOnUserSwitchCheckBox lockDatabaseMinimizeCheckBox - passwordShowDotsCheckBox + passwordsRepeatVisibleCheckBox passwordsHiddenCheckBox + passwordShowDotsCheckBox passwordPreviewCleartextCheckBox - hideTotpCheckBox hideNotesCheckBox fallbackToSearch diff --git a/src/gui/CategoryListWidget.cpp b/src/gui/CategoryListWidget.cpp index cae806f62..3145fbe25 100644 --- a/src/gui/CategoryListWidget.cpp +++ b/src/gui/CategoryListWidget.cpp @@ -43,7 +43,9 @@ CategoryListWidget::CategoryListWidget(QWidget* parent) // clang-format on } -CategoryListWidget::~CategoryListWidget() = default; +CategoryListWidget::~CategoryListWidget() +{ +} QSize CategoryListWidget::sizeHint() const { @@ -62,13 +64,13 @@ QSize CategoryListWidget::sizeHint() const QSize CategoryListWidget::minimumSizeHint() const { - return {m_itemDelegate->minWidth() + m_ui->categoryList->frameWidth() * 2, - m_ui->categoryList->sizeHintForRow(0) * 2}; + return QSize(m_itemDelegate->minWidth() + m_ui->categoryList->frameWidth() * 2, + m_ui->categoryList->sizeHintForRow(0) * 2); } int CategoryListWidget::addCategory(const QString& labelText, const QIcon& icon) { - auto item = new QListWidgetItem(m_ui->categoryList); + QListWidgetItem* item = new QListWidgetItem(m_ui->categoryList); item->setText(labelText); item->setIcon(icon); m_ui->categoryList->addItem(item); diff --git a/src/gui/CategoryListWidget.h b/src/gui/CategoryListWidget.h index aa182fa48..cbf0ef0eb 100644 --- a/src/gui/CategoryListWidget.h +++ b/src/gui/CategoryListWidget.h @@ -35,7 +35,7 @@ class CategoryListWidget : public QWidget public: CategoryListWidget(QWidget* parent = nullptr); - ~CategoryListWidget() override; + ~CategoryListWidget(); int currentCategory(); void setCurrentCategory(int index); diff --git a/src/gui/Clipboard.cpp b/src/gui/Clipboard.cpp index 1c699f67e..f0fbf01ab 100644 --- a/src/gui/Clipboard.cpp +++ b/src/gui/Clipboard.cpp @@ -21,7 +21,6 @@ #include #include #include -#include #include #include "core/Config.h" @@ -60,8 +59,6 @@ void Clipboard::setText(const QString& text, bool clear) mime->setData("x-kde-passwordManagerHint", QByteArrayLiteral("secret")); #elif defined(Q_OS_WIN) mime->setData("ExcludeClipboardContentFromMonitorProcessing", QByteArrayLiteral("1")); - mime->setData("CanIncludeInClipboardHistory", {4, '\0'}); - mime->setData("CanUploadToCloudClipboard ", {4, '\0'}); #endif if (clipboard->supportsSelection()) { @@ -104,12 +101,6 @@ void Clipboard::clearCopiedText() || m_lastCopied == clipboard->text(QClipboard::Selection)) { clipboard->clear(QClipboard::Clipboard); clipboard->clear(QClipboard::Selection); -#ifdef Q_OS_UNIX - // Gnome Wayland doesn't let apps modify the clipboard when not in focus, so force clear - if (QProcessEnvironment::systemEnvironment().contains("WAYLAND_DISPLAY")) { - QProcess::startDetached("wl-copy", {"-c"}); - } -#endif } m_lastCopied.clear(); diff --git a/src/gui/Clipboard.h b/src/gui/Clipboard.h index 147b65aff..4dc2f3127 100644 --- a/src/gui/Clipboard.h +++ b/src/gui/Clipboard.h @@ -22,7 +22,7 @@ #include #include #ifdef Q_OS_MACOS -#include "gui/osutils/macutils/MacPasteboard.h" +#include "core/MacPasteboard.h" #include #endif diff --git a/src/gui/CloneDialog.cpp b/src/gui/CloneDialog.cpp index 3e3c85347..72199ae5a 100644 --- a/src/gui/CloneDialog.cpp +++ b/src/gui/CloneDialog.cpp @@ -29,7 +29,11 @@ CloneDialog::CloneDialog(DatabaseWidget* parent, Database* db, Entry* entry) m_ui->setupUi(this); window()->layout()->setSizeConstraint(QLayout::SetFixedSize); +#if QT_VERSION >= QT_VERSION_CHECK(5, 9, 0) setWindowFlag(Qt::WindowContextHelpButtonHint, false); +#else + setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); +#endif setAttribute(Qt::WA_DeleteOnClose); connect(m_ui->buttonBox, SIGNAL(rejected()), SLOT(close())); @@ -60,4 +64,6 @@ void CloneDialog::cloneEntry() close(); } -CloneDialog::~CloneDialog() = default; +CloneDialog::~CloneDialog() +{ +} diff --git a/src/gui/CloneDialog.h b/src/gui/CloneDialog.h index 8e76a8d10..4f72e9011 100644 --- a/src/gui/CloneDialog.h +++ b/src/gui/CloneDialog.h @@ -18,8 +18,6 @@ #ifndef KEEPASSX_CLONEDIALOG_H #define KEEPASSX_CLONEDIALOG_H -#include - #include "core/Database.h" #include "gui/DatabaseWidget.h" @@ -34,7 +32,7 @@ class CloneDialog : public QDialog public: explicit CloneDialog(DatabaseWidget* parent = nullptr, Database* db = nullptr, Entry* entry = nullptr); - ~CloneDialog() override; + ~CloneDialog(); signals: void entryCloned(Entry* clone); diff --git a/src/gui/DatabaseOpenDialog.cpp b/src/gui/DatabaseOpenDialog.cpp index 881db4087..366f7a9cc 100644 --- a/src/gui/DatabaseOpenDialog.cpp +++ b/src/gui/DatabaseOpenDialog.cpp @@ -36,7 +36,11 @@ DatabaseOpenDialog::DatabaseOpenDialog(QWidget* parent) { setWindowTitle(tr("Unlock Database - KeePassXC")); setWindowFlags(Qt::Dialog); +#if QT_VERSION >= QT_VERSION_CHECK(5, 9, 0) setWindowFlag(Qt::WindowContextHelpButtonHint, false); +#else + setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); +#endif #ifdef Q_OS_LINUX // Linux requires this to overcome some Desktop Environments (also no Quick Unlock) setWindowFlags(windowFlags() | Qt::WindowStaysOnTopHint); @@ -80,16 +84,6 @@ DatabaseOpenDialog::DatabaseOpenDialog(QWidget* parent) connect(shortcut, &QShortcut::activated, this, [this]() { selectTabOffset(1); }); } -void DatabaseOpenDialog::showEvent(QShowEvent* event) -{ - QDialog::showEvent(event); - QTimer::singleShot(100, this, [this] { - if (m_view->isOnQuickUnlockScreen() && !m_view->unlockingDatabase()) { - m_view->triggerQuickUnlock(); - } - }); -} - void DatabaseOpenDialog::selectTabOffset(int offset) { if (offset == 0 || m_tabBar->count() <= 1) { @@ -192,52 +186,22 @@ void DatabaseOpenDialog::clearForms() m_tabBar->blockSignals(false); } -void DatabaseOpenDialog::showMessage(const QString& text, MessageWidget::MessageType type, int autoHideTimeout) -{ - m_view->showMessage(text, type, autoHideTimeout); -} - QSharedPointer DatabaseOpenDialog::database() const { return m_db; } -void DatabaseOpenDialog::done(int result) -{ - hide(); - - emit dialogFinished(result == QDialog::Accepted, m_currentDbWidget); - clearForms(); - - QDialog::done(result); - -#if QT_VERSION < QT_VERSION_CHECK(6, 3, 0) - // CDialogs are not really closed, just hidden, pre Qt 6.3? - if (testAttribute(Qt::WA_DeleteOnClose)) { - setAttribute(Qt::WA_DeleteOnClose, false); - deleteLater(); - } -#endif -} - void DatabaseOpenDialog::complete(bool accepted) { // save DB, since DatabaseOpenWidget will reset its data after accept() is called m_db = m_view->database(); - if (m_db && m_intent == Intent::RemoteSync) { - m_db->markAsTemporaryDatabase(); - } if (accepted) { accept(); } else { reject(); } -} -void DatabaseOpenDialog::closeEvent(QCloseEvent* e) -{ - emit dialogFinished(false, m_currentDbWidget); + emit dialogFinished(accepted, m_currentDbWidget); clearForms(); - QDialog::closeEvent(e); } diff --git a/src/gui/DatabaseOpenDialog.h b/src/gui/DatabaseOpenDialog.h index ba6fcb4e8..5fcee76a9 100644 --- a/src/gui/DatabaseOpenDialog.h +++ b/src/gui/DatabaseOpenDialog.h @@ -19,7 +19,6 @@ #define KEEPASSX_UNLOCKDATABASEDIALOG_H #include "core/Global.h" -#include "gui/MessageWidget.h" #include #include @@ -40,7 +39,6 @@ public: None, AutoType, Merge, - RemoteSync, Browser }; @@ -52,21 +50,15 @@ public: Intent intent() const; QSharedPointer database() const; void clearForms(); - void showMessage(const QString& text, MessageWidget::MessageType type, int autoHideTimeout); signals: void dialogFinished(bool accepted, DatabaseWidget* dbWidget); public slots: - void done(int result) override; void complete(bool accepted); void tabChanged(int index); -protected: - void showEvent(QShowEvent* event) override; - private: - void closeEvent(QCloseEvent* e) override; void selectTabOffset(int offset); QPointer m_view; diff --git a/src/gui/DatabaseOpenWidget.cpp b/src/gui/DatabaseOpenWidget.cpp index 7cf5dcb15..a98d0dba8 100644 --- a/src/gui/DatabaseOpenWidget.cpp +++ b/src/gui/DatabaseOpenWidget.cpp @@ -19,16 +19,20 @@ #include "DatabaseOpenWidget.h" #include "ui_DatabaseOpenWidget.h" +#include "config-keepassx.h" #include "gui/FileDialog.h" #include "gui/Icons.h" #include "gui/MainWindow.h" #include "gui/MessageBox.h" #include "keys/ChallengeResponseKey.h" #include "keys/FileKey.h" -#ifdef WITH_XC_YUBIKEY -#include "keys/drivers/YubiKeyInterfaceUSB.h" + +#ifdef Q_OS_MACOS +#include "touchid/TouchID.h" +#endif +#ifdef Q_CC_MSVC +#include "winhello/WindowsHello.h" #endif -#include "quickunlock/QuickUnlockInterface.h" #include #include @@ -42,19 +46,33 @@ namespace bool isQuickUnlockAvailable() { if (config()->get(Config::Security_QuickUnlock).toBool()) { - return getQuickUnlock()->isAvailable(); +#if defined(Q_CC_MSVC) + return getWindowsHello()->isAvailable(); +#elif defined(Q_OS_MACOS) + return TouchID::getInstance().isAvailable(); +#endif } return false; } + + bool canPerformQuickUnlock(const QString& filename) + { + if (isQuickUnlockAvailable()) { +#if defined(Q_CC_MSVC) + return getWindowsHello()->hasKey(filename); +#elif defined(Q_OS_MACOS) + return TouchID::getInstance().containsKey(filename); +#endif + } + Q_UNUSED(filename); + return false; + } } // namespace DatabaseOpenWidget::DatabaseOpenWidget(QWidget* parent) : DialogyWidget(parent) , m_ui(new Ui::DatabaseOpenWidget()) , m_db(nullptr) -#ifdef WITH_XC_YUBIKEY - , m_deviceListener(new DeviceListener(this)) -#endif { m_ui->setupUi(this); @@ -72,6 +90,7 @@ DatabaseOpenWidget::DatabaseOpenWidget(QWidget* parent) font.setPointSize(font.pointSize() + 4); font.setBold(true); m_ui->labelHeadline->setFont(font); + m_ui->labelHeadline->setText(tr("Unlock KeePassXC Database")); m_ui->quickUnlockButton->setFont(font); m_ui->quickUnlockButton->setIcon( @@ -86,23 +105,18 @@ DatabaseOpenWidget::DatabaseOpenWidget(QWidget* parent) connect(m_ui->buttonBox, SIGNAL(accepted()), SLOT(openDatabase())); connect(m_ui->buttonBox, SIGNAL(rejected()), SLOT(reject())); - connect(m_ui->addKeyFileLinkLabel, &QLabel::linkActivated, this, &DatabaseOpenWidget::browseKeyFile); - connect(m_ui->keyFileLineEdit, &PasswordWidget::textChanged, this, [&](const QString& text) { - bool state = !text.isEmpty(); - m_ui->addKeyFileLinkLabel->setVisible(!state); - m_ui->selectKeyFileComponent->setVisible(state); - }); - connect(m_ui->useHardwareKeyCheckBox, &QCheckBox::toggled, m_ui->hardwareKeyCombo, &QComboBox::setEnabled); - - m_ui->selectKeyFileComponent->setVisible(false); - toggleHardwareKeyComponent(false); + m_ui->hardwareKeyLabelHelp->setIcon(icons()->icon("system-help").pixmap(QSize(12, 12))); + connect(m_ui->hardwareKeyLabelHelp, SIGNAL(clicked(bool)), SLOT(openHardwareKeyHelp())); + m_ui->keyFileLabelHelp->setIcon(icons()->icon("system-help").pixmap(QSize(12, 12))); + connect(m_ui->keyFileLabelHelp, SIGNAL(clicked(bool)), SLOT(openKeyFileHelp())); +#ifdef WITH_XC_YUBIKEY + m_ui->hardwareKeyProgress->setVisible(false); QSizePolicy sp = m_ui->hardwareKeyProgress->sizePolicy(); sp.setRetainSizeWhenHidden(true); m_ui->hardwareKeyProgress->setSizePolicy(sp); -#ifdef WITH_XC_YUBIKEY - connect(m_deviceListener, &DeviceListener::devicePlugged, this, [this] { pollHardwareKey(false, 500); }); + connect(m_ui->buttonRedetectYubikey, SIGNAL(clicked()), SLOT(pollHardwareKey())); connect(YubiKey::instance(), SIGNAL(detectComplete(bool)), SLOT(hardwareKeyResponse(bool)), Qt::QueuedConnection); connect(YubiKey::instance(), &YubiKey::userInteractionRequest, this, [this] { @@ -114,128 +128,45 @@ DatabaseOpenWidget::DatabaseOpenWidget(QWidget* parent) } }); connect(YubiKey::instance(), &YubiKey::challengeCompleted, this, [this] { m_ui->messageWidget->hide(); }); - - m_ui->noHardwareKeysFoundLabel->setVisible(false); - m_ui->refreshHardwareKeys->setIcon(icons()->icon("yubikey-refresh", true)); - connect(m_ui->refreshHardwareKeys, &QPushButton::clicked, this, [this] { pollHardwareKey(true); }); - m_hideNoHardwareKeysFoundTimer.setInterval(2000); - connect(&m_hideNoHardwareKeysFoundTimer, &QTimer::timeout, this, [this] { - m_ui->noHardwareKeysFoundLabel->setVisible(false); - }); #else - m_ui->noHardwareKeysFoundLabel->setVisible(false); - m_ui->refreshHardwareKeys->setVisible(false); + m_ui->hardwareKeyLabel->setVisible(false); + m_ui->hardwareKeyLabelHelp->setVisible(false); + m_ui->buttonRedetectYubikey->setVisible(false); + m_ui->challengeResponseCombo->setVisible(false); + m_ui->hardwareKeyProgress->setVisible(false); #endif // QuickUnlock actions connect(m_ui->quickUnlockButton, &QPushButton::pressed, this, [this] { openDatabase(); }); connect(m_ui->resetQuickUnlockButton, &QPushButton::pressed, this, [this] { resetQuickUnlock(); }); - m_ui->resetQuickUnlockButton->setShortcut(Qt::Key_Escape); } -DatabaseOpenWidget::~DatabaseOpenWidget() = default; - -void DatabaseOpenWidget::toggleHardwareKeyComponent(bool state) +DatabaseOpenWidget::~DatabaseOpenWidget() { - m_ui->hardwareKeyProgress->setVisible(false); - m_ui->hardwareKeyComponent->setVisible(state); - m_ui->hardwareKeyCombo->setVisible(state && m_ui->hardwareKeyCombo->count() != 1); - - m_ui->noHardwareKeysFoundLabel->setVisible(!state && m_manualHardwareKeyRefresh); - m_ui->noHardwareKeysFoundLabel->setText(YubiKey::instance()->connectedKeys() > 0 - ? tr("Hardware keys found, but no slots are configured.") - : tr("No hardware keys found.")); - - if (!state) { - m_ui->useHardwareKeyCheckBox->setChecked(false); - } - if (m_ui->hardwareKeyCombo->count() == 1) { - m_ui->useHardwareKeyCheckBox->setText( - tr("Use hardware key [Serial: %1]") - .arg(m_ui->hardwareKeyCombo->itemData(m_ui->hardwareKeyCombo->currentIndex()) - .value() - .first)); - } else { - m_ui->useHardwareKeyCheckBox->setText(tr("Use hardware key")); - } -} -void DatabaseOpenWidget::closeDatabase() -{ - int closeWarningInterval = 3000; - - if (!m_triedToQuit && window() == getMainWindow()) { - m_triedToQuit = true; - m_ui->messageWidget->showMessage( - tr("Press ESC again to close this database"), MessageWidget::Warning, closeWarningInterval); - - QTimer::singleShot(closeWarningInterval, this, [this]() { m_triedToQuit = false; }); - return; - } - reject(); } -void DatabaseOpenWidget::keyPressEvent(QKeyEvent* event) +void DatabaseOpenWidget::showEvent(QShowEvent* event) { - if (event->key() == Qt::Key_Escape) { - closeDatabase(); - } else { - DialogyWidget::keyPressEvent(event); - } -} - -bool DatabaseOpenWidget::event(QEvent* event) -{ - bool ret = DialogyWidget::event(event); - auto type = event->type(); - - if (type == QEvent::Show || type == QEvent::WindowActivate) { - if (isOnQuickUnlockScreen() && (m_db.isNull() || !canPerformQuickUnlock())) { + DialogyWidget::showEvent(event); + if (isOnQuickUnlockScreen()) { + m_ui->quickUnlockButton->setFocus(); + if (!canPerformQuickUnlock(m_filename)) { resetQuickUnlock(); } - toggleQuickUnlockScreen(); - - if (type == QEvent::Show) { -#ifdef WITH_XC_YUBIKEY -#ifdef Q_OS_WIN - m_deviceListener->registerHotplugCallback(true, - true, - YubiKeyInterfaceUSB::YUBICO_USB_VID, - DeviceListener::MATCH_ANY, - &DeviceListenerWin::DEV_CLS_KEYBOARD); - m_deviceListener->registerHotplugCallback(true, - true, - YubiKeyInterfaceUSB::ONLYKEY_USB_VID, - DeviceListener::MATCH_ANY, - &DeviceListenerWin::DEV_CLS_KEYBOARD); -#else - m_deviceListener->registerHotplugCallback(true, true, YubiKeyInterfaceUSB::YUBICO_USB_VID); - m_deviceListener->registerHotplugCallback(true, true, YubiKeyInterfaceUSB::ONLYKEY_USB_VID); -#endif -#endif - } - - if (isVisible()) { - m_hideTimer.stop(); - pollHardwareKey(); - } - - ret = true; - } else if (type == QEvent::Hide || type == QEvent::WindowDeactivate) { - // Schedule form clearing if we are hidden - if (!m_hideTimer.isActive()) { - m_hideTimer.start(); - } - -#ifdef WITH_XC_YUBIKEY - if (type == QEvent::Hide) { - m_deviceListener->deregisterAllHotplugCallbacks(); - } -#endif - - ret = true; + } else { + m_ui->editPassword->setFocus(); } + m_hideTimer.stop(); +} - return ret; +void DatabaseOpenWidget::hideEvent(QHideEvent* event) +{ + DialogyWidget::hideEvent(event); + + // Schedule form clearing if we are hidden + if (!isVisible()) { + m_hideTimer.start(); + } } bool DatabaseOpenWidget::unlockingDatabase() @@ -243,49 +174,13 @@ bool DatabaseOpenWidget::unlockingDatabase() return m_unlockingDatabase; } -void DatabaseOpenWidget::showMessage(const QString& text, MessageWidget::MessageType type, int autoHideTimeout) -{ - m_ui->messageWidget->showMessage(text, type, autoHideTimeout); -} - void DatabaseOpenWidget::load(const QString& filename) { clearForms(); m_filename = filename; - - // Read public headers - QString error; - m_db.reset(new Database()); - m_db->open(m_filename, nullptr, &error); - m_ui->fileNameLabel->setRawText(m_filename); - // Set the public name if defined - auto label = tr("Unlock KeePassXC Database"); - if (!m_db->publicName().isEmpty()) { - label.append(QString(": %1").arg(m_db->publicName())); - } - m_ui->labelHeadline->setText(label); - - // Apply the public color to the central unlock stack if defined - auto color = m_db->publicColor(); - if (!color.isEmpty()) { - m_ui->centralStack->setStyleSheet(QString("QStackedWidget {border: 4px solid %1}").arg(color)); - } else { - m_ui->centralStack->setStyleSheet(""); - } - - // Show the database icon if defined - auto iconIndex = m_db->publicIcon(); - if (iconIndex >= 0 && iconIndex < databaseIcons()->count()) { - m_ui->dbIconLabel->setPixmap(databaseIcons()->icon(iconIndex, IconSize::Large)); - m_ui->dbIconLabel->setVisible(true); - } else { - m_ui->dbIconLabel->setPixmap({}); - m_ui->dbIconLabel->setVisible(false); - } - if (config()->get(Config::RememberLastKeyFiles).toBool()) { auto lastKeyFiles = config()->get(Config::LastKeyFiles).toHash(); if (lastKeyFiles.contains(m_filename)) { @@ -293,11 +188,21 @@ void DatabaseOpenWidget::load(const QString& filename) } } - toggleQuickUnlockScreen(); + if (canPerformQuickUnlock(m_filename)) { + m_ui->centralStack->setCurrentIndex(1); + m_ui->quickUnlockButton->setFocus(); + } else { + m_ui->editPassword->setFocus(); + } #ifdef WITH_XC_YUBIKEY - // Do initial auto-poll - pollHardwareKey(); + // Only auto-poll for hardware keys if we previously used one with this database file + if (config()->get(Config::RememberLastKeyFiles).toBool()) { + auto lastChallengeResponse = config()->get(Config::LastChallengeResponse).toHash(); + if (lastChallengeResponse.contains(m_filename)) { + pollHardwareKey(); + } + } #endif } @@ -309,11 +214,9 @@ void DatabaseOpenWidget::clearForms() m_ui->keyFileLineEdit->clear(); m_ui->keyFileLineEdit->setShowPassword(false); m_ui->keyFileLineEdit->setClearButtonEnabled(true); - m_ui->hardwareKeyCombo->clear(); - toggleHardwareKeyComponent(false); - toggleQuickUnlockScreen(); - - m_db.reset(new Database(m_filename)); + m_ui->challengeResponseCombo->clear(); + m_ui->centralStack->setCurrentIndex(0); + m_db.reset(); } QSharedPointer DatabaseOpenWidget::database() @@ -328,11 +231,6 @@ QString DatabaseOpenWidget::filename() void DatabaseOpenWidget::enterKey(const QString& pw, const QString& keyFile) { - if (unlockingDatabase()) { - qWarning("Ignoring unlock request for %s because of running unlock action.", qPrintable(m_filename)); - return; - } - m_ui->editPassword->setText(pw); m_ui->keyFileLineEdit->setText(keyFile); m_blockQuickUnlock = true; @@ -374,12 +272,9 @@ void DatabaseOpenWidget::openDatabase() auto btn = msgBox->addButton(tr("Open database anyway"), QMessageBox::ButtonRole::AcceptRole); msgBox->setDefaultButton(btn); msgBox->addButton(QMessageBox::Cancel); - msgBox->layout()->setSizeConstraint(QLayout::SetMinimumSize); msgBox->exec(); if (msgBox->clickedButton() != btn) { m_db.reset(new Database()); - m_db->open(m_filename, nullptr, &error); - m_ui->messageWidget->showMessage(tr("Database unlock canceled."), MessageWidget::MessageType::Error); setUserInteractionLock(false); return; @@ -389,7 +284,13 @@ void DatabaseOpenWidget::openDatabase() // Save Quick Unlock credentials if available if (!blockQuickUnlock && isQuickUnlockAvailable()) { auto keyData = databaseKey->serialize(); - getQuickUnlock()->setKey(m_db->publicUuid(), keyData); +#if defined(Q_CC_MSVC) + // Store the password using Windows Hello + getWindowsHello()->storeKey(m_filename, keyData); +#elif defined(Q_OS_MACOS) + // Store the password using TouchID + TouchID::getInstance().storeKey(m_filename, keyData); +#endif m_ui->messageWidget->hideMessage(); } @@ -434,15 +335,27 @@ QSharedPointer DatabaseOpenWidget::buildDatabaseKey() { auto databaseKey = QSharedPointer::create(); - if (!m_db.isNull() && canPerformQuickUnlock()) { + if (canPerformQuickUnlock(m_filename)) { // try to retrieve the stored password using Windows Hello QByteArray keyData; - if (!getQuickUnlock()->getKey(m_db->publicUuid(), keyData)) { - m_ui->messageWidget->showMessage( - tr("Failed to authenticate with Quick Unlock: %1").arg(getQuickUnlock()->errorString()), - MessageWidget::Error); +#ifdef Q_CC_MSVC + if (!getWindowsHello()->getKey(m_filename, keyData)) { + // Failed to retrieve Quick Unlock data + auto error = getWindowsHello()->errorString(); + if (!error.isEmpty()) { + m_ui->messageWidget->showMessage(tr("Failed to authenticate with Windows Hello: %1").arg(error), + MessageWidget::Error); + resetQuickUnlock(); + } return {}; } +#elif defined(Q_OS_MACOS) + if (!TouchID::getInstance().getKey(m_filename, keyData)) { + // Failed to retrieve Quick Unlock data + m_ui->messageWidget->showMessage(tr("Failed to authenticate with Touch ID"), MessageWidget::Error); + return {}; + } +#endif databaseKey->setRawKey(keyData); return databaseKey; } @@ -493,9 +406,9 @@ QSharedPointer DatabaseOpenWidget::buildDatabaseKey() auto lastChallengeResponse = config()->get(Config::LastChallengeResponse).toHash(); lastChallengeResponse.remove(m_filename); - int selectionIndex = m_ui->hardwareKeyCombo->currentIndex(); - if (m_ui->useHardwareKeyCheckBox->isChecked()) { - auto slot = m_ui->hardwareKeyCombo->itemData(selectionIndex).value(); + int selectionIndex = m_ui->challengeResponseCombo->currentIndex(); + if (selectionIndex > 0) { + auto slot = m_ui->challengeResponseCombo->itemData(selectionIndex).value(); auto crKey = QSharedPointer(new ChallengeResponseKey(slot)); databaseKey->addChallengeResponseKey(crKey); @@ -516,71 +429,55 @@ void DatabaseOpenWidget::reject() emit dialogFinished(false); } -bool DatabaseOpenWidget::browseKeyFile() +void DatabaseOpenWidget::browseKeyFile() { QString filters = QString("%1 (*);;%2 (*.keyx; *.key)").arg(tr("All files"), tr("Key files")); - QString filename = - fileDialog()->getOpenFileName(this, tr("Select key file"), FileDialog::getLastDir("keyfile"), filters); - if (filename.isEmpty()) { - return false; - } - if (config()->get(Config::RememberLastKeyFiles).toBool()) { - FileDialog::saveLastDir("keyfile", filename, true); - } else { - FileDialog::saveLastDir("keyfile", {}); - } + QString filename = fileDialog()->getOpenFileName(this, tr("Select key file"), QString(), filters); if (QFileInfo(filename).canonicalFilePath() == QFileInfo(m_filename).canonicalFilePath()) { MessageBox::warning(this, tr("Cannot use database file as key file"), - tr("Your database file is NOT a key file!\nIf you don't have a key file or don't know what " - "that is, you don't have to select one."), + tr("You cannot use your database file as a key file.\nIf you do not have a key file, " + "please leave the field empty."), MessageBox::Button::Ok); - return false; - } - if (filename.endsWith(".kdbx") - && MessageBox::warning(this, - tr("KeePassXC database file selected"), - tr("The file you selected looks like a database file.\nA database file is NOT a key " - "file!\n\nAre you sure you want to continue with this file?."), - MessageBox::Button::Yes | MessageBox::Button::Cancel, - MessageBox::Button::Cancel) - != MessageBox::Yes) { - return false; + filename = ""; } - m_ui->keyFileLineEdit->setText(filename); - return true; + if (!filename.isEmpty()) { + m_ui->keyFileLineEdit->setText(filename); + } } -void DatabaseOpenWidget::pollHardwareKey(bool manualTrigger, int delay) +void DatabaseOpenWidget::pollHardwareKey() { if (m_pollingHardwareKey) { return; } - m_ui->hardwareKeyCombo->setEnabled(false); - m_ui->useHardwareKeyCheckBox->setEnabled(false); - m_ui->hardwareKeyProgress->setVisible(true); - m_ui->refreshHardwareKeys->setEnabled(false); - m_ui->noHardwareKeysFoundLabel->setVisible(false); - m_pollingHardwareKey = true; - m_manualHardwareKeyRefresh = manualTrigger; + m_ui->challengeResponseCombo->clear(); + m_ui->challengeResponseCombo->addItem(tr("Detecting hardware keys…")); - QTimer::singleShot(delay, this, [] { YubiKey::instance()->findValidKeysAsync(); }); + m_ui->buttonRedetectYubikey->setEnabled(false); + m_ui->challengeResponseCombo->setEnabled(false); + m_ui->hardwareKeyProgress->setVisible(true); + m_pollingHardwareKey = true; + + YubiKey::instance()->findValidKeysAsync(); } void DatabaseOpenWidget::hardwareKeyResponse(bool found) { - m_ui->useHardwareKeyCheckBox->setEnabled(true); + m_ui->challengeResponseCombo->clear(); + m_ui->buttonRedetectYubikey->setEnabled(true); m_ui->hardwareKeyProgress->setVisible(false); - m_ui->refreshHardwareKeys->setEnabled(true); - m_ui->hardwareKeyCombo->clear(); m_pollingHardwareKey = false; if (!found) { - toggleHardwareKeyComponent(false); + m_ui->challengeResponseCombo->addItem(tr("No hardware keys detected")); + m_ui->challengeResponseCombo->setEnabled(false); return; + } else { + m_ui->challengeResponseCombo->addItem(tr("Select hardware key…")); } YubiKeySlot lastUsedSlot; @@ -592,24 +489,31 @@ void DatabaseOpenWidget::hardwareKeyResponse(bool found) if (split.size() > 1) { lastUsedSlot = YubiKeySlot(split[0].toUInt(), split[1].toInt()); } - m_ui->useHardwareKeyCheckBox->setChecked(true); } } int selectedIndex = 0; - const auto foundKeys = YubiKey::instance()->foundKeys(); - for (auto i = foundKeys.cbegin(); i != foundKeys.cend(); ++i) { + for (auto& slot : YubiKey::instance()->foundKeys()) { // add detected YubiKey to combo box - m_ui->hardwareKeyCombo->addItem(i.value(), QVariant::fromValue(i.key())); + m_ui->challengeResponseCombo->addItem(YubiKey::instance()->getDisplayName(slot), QVariant::fromValue(slot)); // Select this YubiKey + Slot if we used it in the past - if (lastUsedSlot == i.key()) { - selectedIndex = m_ui->hardwareKeyCombo->count() - 1; + if (lastUsedSlot == slot) { + selectedIndex = m_ui->challengeResponseCombo->count() - 1; } } - toggleHardwareKeyComponent(true); - m_ui->hardwareKeyCombo->setEnabled(m_ui->useHardwareKeyCheckBox->isChecked()); - m_ui->hardwareKeyCombo->setCurrentIndex(selectedIndex); + m_ui->challengeResponseCombo->setCurrentIndex(selectedIndex); + m_ui->challengeResponseCombo->setEnabled(true); +} + +void DatabaseOpenWidget::openHardwareKeyHelp() +{ + QDesktopServices::openUrl(QUrl("https://keepassxc.org/docs#faq-cat-yubikey")); +} + +void DatabaseOpenWidget::openKeyFileHelp() +{ + QDesktopServices::openUrl(QUrl("https://keepassxc.org/docs#faq-cat-keyfile")); } void DatabaseOpenWidget::setUserInteractionLock(bool state) @@ -627,40 +531,11 @@ void DatabaseOpenWidget::setUserInteractionLock(bool state) m_unlockingDatabase = state; } -bool DatabaseOpenWidget::canPerformQuickUnlock() const -{ - return !m_db.isNull() && isQuickUnlockAvailable() && getQuickUnlock()->hasKey(m_db->publicUuid()); -} - -bool DatabaseOpenWidget::isOnQuickUnlockScreen() const +bool DatabaseOpenWidget::isOnQuickUnlockScreen() { return m_ui->centralStack->currentIndex() == 1; } -void DatabaseOpenWidget::toggleQuickUnlockScreen() -{ - if (canPerformQuickUnlock()) { - m_ui->centralStack->setCurrentIndex(1); - // Work around qt issue where focus is stolen even if not visible - if (m_ui->quickUnlockButton->isVisible()) { - m_ui->quickUnlockButton->setFocus(); - } - } else { - m_ui->centralStack->setCurrentIndex(0); - // Work around qt issue where focus is stolen even if not visible - if (m_ui->editPassword->isVisible()) { - m_ui->editPassword->setFocus(); - } - } -} - -void DatabaseOpenWidget::triggerQuickUnlock() -{ - if (isOnQuickUnlockScreen()) { - m_ui->quickUnlockButton->click(); - } -} - /** * Reset installed quick unlock secrets. * @@ -668,11 +543,10 @@ void DatabaseOpenWidget::triggerQuickUnlock() */ void DatabaseOpenWidget::resetQuickUnlock() { - if (!isQuickUnlockAvailable()) { - return; - } - if (!m_db.isNull()) { - getQuickUnlock()->reset(m_db->publicUuid()); - } +#if defined(Q_CC_MSVC) + getWindowsHello()->reset(m_filename); +#elif defined(Q_OS_MACOS) + TouchID::getInstance().reset(m_filename); +#endif load(m_filename); } diff --git a/src/gui/DatabaseOpenWidget.h b/src/gui/DatabaseOpenWidget.h index d730634b3..a55adf196 100644 --- a/src/gui/DatabaseOpenWidget.h +++ b/src/gui/DatabaseOpenWidget.h @@ -19,16 +19,10 @@ #ifndef KEEPASSX_DATABASEOPENWIDGET_H #define KEEPASSX_DATABASEOPENWIDGET_H -#include #include #include -#include "config-keepassx.h" #include "gui/DialogyWidget.h" -#include "gui/MessageWidget.h" -#ifdef WITH_XC_YUBIKEY -#include "osutils/DeviceListener.h" -#endif class CompositeKey; class Database; @@ -45,30 +39,25 @@ class DatabaseOpenWidget : public DialogyWidget public: explicit DatabaseOpenWidget(QWidget* parent = nullptr); - ~DatabaseOpenWidget() override; + ~DatabaseOpenWidget(); void load(const QString& filename); QString filename(); void clearForms(); void enterKey(const QString& pw, const QString& keyFile); QSharedPointer database(); - bool unlockingDatabase(); - void showMessage(const QString& text, MessageWidget::MessageType type, int autoHideTimeout); - - // Quick Unlock helper functions - bool canPerformQuickUnlock() const; - bool isOnQuickUnlockScreen() const; - void toggleQuickUnlockScreen(); - void triggerQuickUnlock(); void resetQuickUnlock(); + bool unlockingDatabase(); signals: void dialogFinished(bool accepted); protected: - bool event(QEvent* event) override; - void keyPressEvent(QKeyEvent* event) override; + void showEvent(QShowEvent* event) override; + void hideEvent(QHideEvent* event) override; QSharedPointer buildDatabaseKey(); void setUserInteractionLock(bool state); + // Quick Unlock helper functions + bool isOnQuickUnlockScreen(); const QScopedPointer m_ui; QSharedPointer m_db; @@ -80,23 +69,17 @@ protected slots: void reject(); private slots: - bool browseKeyFile(); - void toggleHardwareKeyComponent(bool state); - void closeDatabase(); - void pollHardwareKey(bool manualTrigger = false, int delay = 0); + void browseKeyFile(); + void pollHardwareKey(); void hardwareKeyResponse(bool found); + void openHardwareKeyHelp(); + void openKeyFileHelp(); private: -#ifdef WITH_XC_YUBIKEY - QPointer m_deviceListener; -#endif bool m_pollingHardwareKey = false; - bool m_manualHardwareKeyRefresh = false; bool m_blockQuickUnlock = false; bool m_unlockingDatabase = false; - bool m_triedToQuit = false; QTimer m_hideTimer; - QTimer m_hideNoHardwareKeysFoundTimer; Q_DISABLE_COPY(DatabaseOpenWidget) }; diff --git a/src/gui/DatabaseOpenWidget.ui b/src/gui/DatabaseOpenWidget.ui index 1ef04a528..ad4d4af7a 100644 --- a/src/gui/DatabaseOpenWidget.ui +++ b/src/gui/DatabaseOpenWidget.ui @@ -6,8 +6,8 @@ 0 0 - 745 - 544 + 520 + 436 @@ -18,7 +18,7 @@
    - + 0 @@ -40,6 +40,18 @@ + + + 500 + 400 + + + + + 700 + 16777215 + + @@ -55,54 +67,18 @@ - - - 9 + + + + 12 + 75 + true + - - - - - 32 - 32 - - - - - - - true - - - - - - - - 12 - 75 - true - - - - Unlock KeePassXC Database - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - + + Unlock KeePassXC Database + + @@ -131,8 +107,8 @@ - 650 - 0 + 0 + 250 @@ -146,223 +122,172 @@ - - 5 - - 30 + 20 - 25 + 15 - 30 + 20 - 25 + 15 - - - 0 + + + Enter Password: + + + editPassword - - - 10 - - - 0 - - - 0 - - - 0 - - - 10 - - - - - Enter Password: - - - - - - - 2 - - - - - Qt::StrongFocus - - - Password field - - - - - - - - 16777215 - 4 - - - - 0 - - - 0 - - - -1 - - - false - - - - - - - - - QFrame::NoFrame + + + Qt::StrongFocus - - QFrame::Plain + + Password field - - 0 - - - - 10 - - - 0 - - - 0 - - - 0 - - - 10 - - - - - Select Key File: - - - - - - - - - - 0 - 0 - - - - Qt::StrongFocus - - - Key file to unlock the database - - - - - - - Browse for key file - - - Browse for key file - - - Browse… - - - - - - - - - 0 + + + Qt::Vertical - - - QLayout::SetMinimumSize - - - 0 - - - 0 - - - 0 - - - 0 - - - - + + QSizePolicy::Fixed + + + + 20 + 5 + + + + + + + + Enter Additional Credentials (if any): + + + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 15 + 20 + + + + + + + + 3 + + + 5 - - 0 - - - 0 - - - 0 - - - 0 - - + - Use Hardware Security Key [Serial: 11111111] + Key File: + + + keyFileLineEdit - + + + PointingHandCursor + + + Qt::ClickFocus + + + <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information…</p> + + + Key file help + + + QToolButton { + border: none; + background: none; +} + + + ? + + + + 12 + 12 + + + + QToolButton::InstantPopup + + + + + + + + + 0 + + + + + + 16777215 + 2 + + + + 0 + + + 0 + + + -1 + + + false + + + + + false - - - 200 - 0 - - - - - 300 - 16777215 - + + + 0 + 0 + Hardware key slot selection @@ -373,97 +298,165 @@ - - - - - - - 0 - 0 - - - - No hardware keys found. - - - 1 - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - PointingHandCursor - - - Refresh Hardware Keys - - - Refresh Hardware Keys - - - QPushButton { background-color: transparent; border: none; } - - - - - - - - - - PointingHandCursor - - - Qt::TabFocus - - - <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!</p> - - - Click to add a key file. - - - <a href="#" style="text-decoration: underline">I have a key file</a> - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - 1 - - - Qt::LinksAccessibleByKeyboard|Qt::LinksAccessibleByMouse - - - - - + + + + + 2 + + + + + 5 + + + + + Hardware Key: + + + challengeResponseCombo + + + + + + + PointingHandCursor + + + Qt::ClickFocus + + + <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +<p>Click for more information…</p> + + + Hardware key help + + + QToolButton { + border: none; + background: none; +} + + + ? + + + + 12 + 12 + + + + QToolButton::InstantPopup + + + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 0 + 2 + + + + + + + + + + 0 + + + + + + 0 + 0 + + + + Qt::StrongFocus + + + Key file to unlock the database + + + + + + + + + Browse for key file + + + Browse for key file + + + Browse… + + + + + + + 0 + + + + + true + + + Refresh hardware tokens + + + Refresh hardware tokens + + + Refresh + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 0 + 2 + + + + + + + + + - - 0 - - 25 - - - 5 + 15 @@ -481,20 +474,17 @@ - - 0 - - 10 + 20 - 10 + 15 - 10 + 20 - 10 + 15 @@ -503,8 +493,8 @@ - 30 - 0 + 40 + 20 @@ -518,8 +508,8 @@ - 0 - 10 + 20 + 40 @@ -561,8 +551,8 @@ - 0 - 10 + 20 + 40 @@ -576,8 +566,8 @@ - 30 - 0 + 40 + 20 @@ -645,16 +635,13 @@ - quickUnlockButton - resetQuickUnlockButton editPassword keyFileLineEdit buttonBrowseFile - useHardwareKeyCheckBox - hardwareKeyCombo - refreshHardwareKeys - addKeyFileLinkLabel - buttonBox + challengeResponseCombo + buttonRedetectYubikey + quickUnlockButton + resetQuickUnlockButton diff --git a/src/gui/DatabaseTabWidget.cpp b/src/gui/DatabaseTabWidget.cpp index c8639eb44..531d14212 100644 --- a/src/gui/DatabaseTabWidget.cpp +++ b/src/gui/DatabaseTabWidget.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2024 KeePassXC Team + * Copyright (C) 2021 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 @@ -21,15 +21,14 @@ #include #include "autotype/AutoType.h" -#include "core/Merger.h" #include "core/Tools.h" #include "format/CsvExporter.h" #include "gui/Clipboard.h" -#include "gui/DatabaseIcons.h" #include "gui/DatabaseOpenDialog.h" #include "gui/DatabaseWidget.h" #include "gui/DatabaseWidgetStateSync.h" #include "gui/FileDialog.h" +#include "gui/HtmlExporter.h" #include "gui/MessageBox.h" #include "gui/export/ExportDialog.h" #ifdef Q_OS_MACOS @@ -42,8 +41,6 @@ DatabaseTabWidget::DatabaseTabWidget(QWidget* parent) , m_dbWidgetStateSync(new DatabaseWidgetStateSync(this)) , m_dbWidgetPendingLock(nullptr) , m_databaseOpenDialog(new DatabaseOpenDialog(this)) - , m_importWizard(nullptr) - , m_databaseOpenInProgress(false) { auto* tabBar = new QTabBar(this); tabBar->setAcceptDrops(true); @@ -58,20 +55,22 @@ DatabaseTabWidget::DatabaseTabWidget(QWidget* parent) m_dbWidgetStateSync, SLOT(setActive(DatabaseWidget*))); connect(autoType(), SIGNAL(globalAutoTypeTriggered(const QString&)), SLOT(performGlobalAutoType(const QString&))); connect(autoType(), SIGNAL(autotypeRetypeTimeout()), SLOT(relockPendingDatabase())); - connect(autoType(), SIGNAL(autotypeFinished()), SLOT(relockPendingDatabase())); + connect(autoType(), SIGNAL(autotypeRejected()), SLOT(relockPendingDatabase())); connect(m_databaseOpenDialog.data(), &DatabaseOpenDialog::dialogFinished, this, &DatabaseTabWidget::handleDatabaseUnlockDialogFinished); // clang-format on #ifdef Q_OS_MACOS - connect(macUtils(), SIGNAL(userSwitched()), SLOT(lockDatabasesOnUserSwitch())); + connect(macUtils(), SIGNAL(lockDatabases()), SLOT(lockDatabases())); #endif m_lockDelayTimer.setSingleShot(true); connect(&m_lockDelayTimer, &QTimer::timeout, this, [this] { lockDatabases(); }); } -DatabaseTabWidget::~DatabaseTabWidget() = default; +DatabaseTabWidget::~DatabaseTabWidget() +{ +} void DatabaseTabWidget::toggleTabbar() { @@ -185,7 +184,7 @@ void DatabaseTabWidget::addDatabaseTab(const QString& filePath, auto* dbWidget = new DatabaseWidget(QSharedPointer::create(cleanFilePath), this); addDatabaseTab(dbWidget, inBackground); dbWidget->performUnlockDatabase(password, keyfile); - updateLastDatabases(dbWidget->database()); + updateLastDatabases(cleanFilePath); } /** @@ -250,74 +249,26 @@ void DatabaseTabWidget::addDatabaseTab(DatabaseWidget* dbWidget, bool inBackgrou connect(dbWidget, SIGNAL(databaseUnlocked()), SLOT(emitDatabaseLockChanged())); connect(dbWidget, SIGNAL(databaseLocked()), SLOT(updateTabName())); connect(dbWidget, SIGNAL(databaseLocked()), SLOT(emitDatabaseLockChanged())); - connect(dbWidget, - &DatabaseWidget::unlockDatabaseInDialogForSync, - this, - &DatabaseTabWidget::unlockDatabaseInDialogForSync); } -void DatabaseTabWidget::importFile() +void DatabaseTabWidget::importCsv() { - // Show the import wizard - m_importWizard = new ImportWizard(this); + auto filter = QString("%1 (*.csv);;%2 (*)").arg(tr("CSV file"), tr("All files")); + auto fileName = fileDialog()->getOpenFileName(this, tr("Select CSV file"), FileDialog::getLastDir("csv"), filter); + if (fileName.isEmpty()) { + return; + } - connect(m_importWizard.data(), &QWizard::finished, [&](int result) { - if (result != QDialog::Accepted) { - return; - } + FileDialog::saveLastDir("csv", fileName, true); - auto db = m_importWizard->database(); - if (!db) { - // Import wizard was cancelled - return; - } + auto db = execNewDatabaseWizard(); + if (!db) { + return; + } - switch (m_importWizard->importIntoType()) { - case ImportWizard::EXISTING_DATABASE: - for (int i = 0, c = count(); i < c; ++i) { - auto importInto = m_importWizard->importInto(); - // Find the database and group to import into based on import wizard choice - auto dbWidget = databaseWidgetFromIndex(i); - if (!dbWidget->isLocked() && dbWidget->database()->uuid() == importInto.first) { - auto group = dbWidget->database()->rootGroup()->findGroupByUuid(importInto.second); - if (group) { - // Extract the root group from the import database - auto importGroup = db->setRootGroup(new Group()); - importGroup->setParent(group); - setCurrentIndex(i); - return; - } - } - } - break; - case ImportWizard::TEMPORARY_DATABASE: { - // Use the already created database as temporary database - auto dbWidget = new DatabaseWidget(db, this); - addDatabaseTab(dbWidget); - return; - } - default: - // Start the new database wizard with the imported database - auto newDb = execNewDatabaseWizard(); - if (newDb) { - // Merge the imported db into the new one - Merger merger(db.data(), newDb.data()); - merger.setSkipDatabaseCustomData(true); - merger.merge(); - // Transfer the root group data - newDb->rootGroup()->setName(db->rootGroup()->name()); - newDb->rootGroup()->setNotes(db->rootGroup()->notes()); - // Show the new database - auto dbWidget = new DatabaseWidget(newDb, this); - addDatabaseTab(dbWidget); - newDb->markAsModified(); - return; - } - } - }); - - // use `open` instead of `exec`. `exec` should not be used, see https://doc.qt.io/qt-6/qdialog.html#exec - m_importWizard->show(); + auto* dbWidget = new DatabaseWidget(db, this); + addDatabaseTab(dbWidget); + dbWidget->switchToCsvImport(fileName); } void DatabaseTabWidget::mergeDatabase() @@ -339,11 +290,49 @@ void DatabaseTabWidget::mergeDatabase(const QString& filePath) unlockDatabaseInDialog(currentDatabaseWidget(), DatabaseOpenDialog::Intent::Merge, filePath); } +void DatabaseTabWidget::importKeePass1Database() +{ + auto filter = QString("%1 (*.kdb);;%2 (*)").arg(tr("KeePass 1 database"), tr("All files")); + auto fileName = + fileDialog()->getOpenFileName(this, tr("Open KeePass 1 database"), FileDialog::getLastDir("kp1"), filter); + if (fileName.isEmpty()) { + return; + } + + FileDialog::saveLastDir("kp1", fileName, true); + + auto db = QSharedPointer::create(); + auto* dbWidget = new DatabaseWidget(db, this); + addDatabaseTab(dbWidget); + dbWidget->switchToImportKeepass1(fileName); +} + +void DatabaseTabWidget::importOpVaultDatabase() +{ + auto defaultDir = FileDialog::getLastDir("opvault"); +#ifdef Q_OS_MACOS + QString fileName = fileDialog()->getOpenFileName(this, tr("Open OPVault"), defaultDir, "OPVault (*.opvault)"); +#else + QString fileName = fileDialog()->getExistingDirectory(this, tr("Open OPVault"), defaultDir); +#endif + + if (fileName.isEmpty()) { + return; + } + + FileDialog::saveLastDir("opvault", fileName); + + auto db = QSharedPointer::create(); + auto* dbWidget = new DatabaseWidget(db, this); + addDatabaseTab(dbWidget); + dbWidget->switchToImportOpVault(fileName); +} + /** * 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 successfully + * @return true if database was closed successully */ bool DatabaseTabWidget::closeCurrentDatabaseTab() { @@ -354,7 +343,7 @@ bool DatabaseTabWidget::closeCurrentDatabaseTab() * 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 successfully + * @return true if database was closed successully */ bool DatabaseTabWidget::closeDatabaseTabFromSender() { @@ -365,7 +354,7 @@ bool DatabaseTabWidget::closeDatabaseTabFromSender() * 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 successfully + * @return true if database was closed successully */ bool DatabaseTabWidget::closeDatabaseTab(int index) { @@ -376,7 +365,7 @@ bool DatabaseTabWidget::closeDatabaseTab(int index) * Attempt to close a database and remove its tab afterwards. * * @param dbWidget \link DatabaseWidget to close - * @return true if database was closed successfully + * @return true if database was closed successully */ bool DatabaseTabWidget::closeDatabaseTab(DatabaseWidget* dbWidget) { @@ -436,7 +425,7 @@ bool DatabaseTabWidget::saveDatabaseAs(int index) auto* dbWidget = databaseWidgetFromIndex(index); bool ok = dbWidget->saveAs(); if (ok) { - updateLastDatabases(dbWidget->database()); + updateLastDatabases(dbWidget->database()->filePath()); } return ok; } @@ -450,7 +439,7 @@ bool DatabaseTabWidget::saveDatabaseBackup(int index) auto* dbWidget = databaseWidgetFromIndex(index); bool ok = dbWidget->saveBackup(); if (ok) { - updateLastDatabases(dbWidget->database()); + updateLastDatabases(dbWidget->database()->filePath()); } return ok; } @@ -553,51 +542,21 @@ bool DatabaseTabWidget::warnOnExport() return ans == MessageBox::Yes; } -void DatabaseTabWidget::showDatabaseReports(bool state) -{ - if (state) { - currentDatabaseWidget()->switchToDatabaseReports(); - } else { - currentDatabaseWidget()->switchToMainView(); - } -} - -void DatabaseTabWidget::showDatabaseSettings(bool state) -{ - if (state) { - currentDatabaseWidget()->switchToDatabaseSettings(); - } else { - currentDatabaseWidget()->switchToMainView(); - } -} - void DatabaseTabWidget::showDatabaseSecurity() { currentDatabaseWidget()->switchToDatabaseSecurity(); } -#ifdef WITH_XC_BROWSER_PASSKEYS -void DatabaseTabWidget::showPasskeys() +void DatabaseTabWidget::showDatabaseReports() { - currentDatabaseWidget()->switchToPasskeys(); + currentDatabaseWidget()->switchToDatabaseReports(); } -void DatabaseTabWidget::importPasskey() +void DatabaseTabWidget::showDatabaseSettings() { - currentDatabaseWidget()->showImportPasskeyDialog(); + currentDatabaseWidget()->switchToDatabaseSettings(); } -void DatabaseTabWidget::importPasskeyToEntry() -{ - currentDatabaseWidget()->showImportPasskeyDialog(true); -} - -void DatabaseTabWidget::removePasskeyFromEntry() -{ - currentDatabaseWidget()->removePasskeyFromEntry(); -} -#endif - bool DatabaseTabWidget::isModified(int index) const { if (count() == 0) { @@ -636,23 +595,43 @@ bool DatabaseTabWidget::hasLockableDatabases() const */ QString DatabaseTabWidget::tabName(int index) { - auto dbWidget = databaseWidgetFromIndex(index); - if (!dbWidget) { - return {}; + if (index == -1 || index > count()) { + return ""; } - auto tabName = dbWidget->displayName(); + auto* dbWidget = databaseWidgetFromIndex(index); + + auto db = dbWidget->database(); + Q_ASSERT(db); + if (!db) { + return ""; + } + + QString tabName; + + if (!db->filePath().isEmpty()) { + QFileInfo fileInfo(db->filePath()); + + if (db->metadata()->name().isEmpty()) { + tabName = fileInfo.fileName(); + } else { + tabName = db->metadata()->name(); + } + + setTabToolTip(index, fileInfo.absoluteFilePath()); + } else { + if (db->metadata()->name().isEmpty()) { + tabName = tr("New Database"); + } else { + tabName = tr("%1 [New Database]", "Database tab name modifier").arg(db->metadata()->name()); + } + } if (dbWidget->isLocked()) { tabName = tr("%1 [Locked]", "Database tab name modifier").arg(tabName); } - if (dbWidget->database()->isTemporaryDatabase()) { - tabName = tr("%1 [Temporary]", "Database tab name modifier").arg(tabName); - } - - // needs to be last check, as MainWindow may remove the asterisk again - if (dbWidget->database()->isModified()) { + if (db->isModified()) { tabName.append("*"); } @@ -675,13 +654,6 @@ void DatabaseTabWidget::updateTabName(int index) } index = indexOf(dbWidget); setTabText(index, tabName(index)); - setTabToolTip(index, dbWidget->displayFilePath()); - auto iconIndex = dbWidget->database()->publicIcon(); - if (iconIndex >= 0 && iconIndex < databaseIcons()->count()) { - setTabIcon(index, databaseIcons()->icon(iconIndex)); - } else { - setTabIcon(index, {}); - } emit tabNameChanged(); } @@ -730,13 +702,6 @@ void DatabaseTabWidget::lockDatabasesDelayed() } } -void DatabaseTabWidget::lockDatabasesOnUserSwitch() -{ - if (config()->get(Config::Security_LockDatabaseOnUserSwitch).toBool()) { - lockDatabases(); - } -} - /** * Unlock a database with an unlock popup dialog. * @@ -788,11 +753,6 @@ void DatabaseTabWidget::unlockAnyDatabaseInDialog(DatabaseOpenDialog::Intent int displayUnlockDialog(); } -void DatabaseTabWidget::unlockDatabaseInDialogForSync(const QString& filePath) -{ - unlockDatabaseInDialog(currentDatabaseWidget(), DatabaseOpenDialog::Intent::RemoteSync, filePath); -} - /** * Display the unlock dialog after it's been initialized. * This is an internal method, it should only be called by unlockDatabaseInDialog or unlockAnyDatabaseInDialog. @@ -819,7 +779,7 @@ void DatabaseTabWidget::handleDatabaseUnlockDialogFinished(bool accepted, Databa { // change the active tab to the database that was just unlocked in the dialog auto intent = m_databaseOpenDialog->intent(); - if (accepted && intent != DatabaseOpenDialog::Intent::Merge && intent != DatabaseOpenDialog::Intent::RemoteSync) { + if (accepted && intent != DatabaseOpenDialog::Intent::Merge) { int index = indexOf(dbWidget); if (index != -1) { setCurrentIndex(index); @@ -831,9 +791,6 @@ void DatabaseTabWidget::handleDatabaseUnlockDialogFinished(bool accepted, Databa m_dbWidgetPendingLock = dbWidget; } - // If browser extension requested the unlock make sure cancel is handled - m_databaseOpenInProgress = false; - // signal other objects that the dialog finished emit databaseUnlockDialogFinished(accepted, dbWidget); } @@ -857,12 +814,8 @@ void DatabaseTabWidget::relockPendingDatabase() m_dbWidgetPendingLock = nullptr; } -void DatabaseTabWidget::updateLastDatabases(const QSharedPointer& database) +void DatabaseTabWidget::updateLastDatabases(const QString& filename) { - if (database->isTemporaryDatabase() || database->filePath().isEmpty()) { - return; - } - auto filename = database->filePath(); if (!config()->get(Config::RememberLastDatabases).toBool()) { config()->remove(Config::LastDatabases); } else { @@ -882,7 +835,10 @@ void DatabaseTabWidget::updateLastDatabases() auto dbWidget = currentDatabaseWidget(); if (dbWidget) { - updateLastDatabases(dbWidget->database()); + auto filePath = dbWidget->database()->filePath(); + if (!filePath.isEmpty()) { + updateLastDatabases(filePath); + } } } @@ -903,7 +859,6 @@ void DatabaseTabWidget::emitDatabaseLockChanged() emit databaseLocked(dbWidget); } else { emit databaseUnlocked(dbWidget); - m_databaseOpenInProgress = false; } } @@ -936,11 +891,6 @@ void DatabaseTabWidget::performGlobalAutoType(const QString& search) void DatabaseTabWidget::performBrowserUnlock() { - if (m_databaseOpenInProgress) { - return; - } - - m_databaseOpenInProgress = true; auto dbWidget = currentDatabaseWidget(); if (dbWidget && dbWidget->isLocked()) { unlockAnyDatabaseInDialog(DatabaseOpenDialog::Intent::Browser); diff --git a/src/gui/DatabaseTabWidget.h b/src/gui/DatabaseTabWidget.h index a5074a84c..3a6791a80 100644 --- a/src/gui/DatabaseTabWidget.h +++ b/src/gui/DatabaseTabWidget.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2024 KeePassXC Team + * Copyright (C) 2021 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,9 +19,7 @@ #define KEEPASSX_DATABASETABWIDGET_H #include "DatabaseOpenDialog.h" -#include "config-keepassx.h" #include "gui/MessageWidget.h" -#include "wizard/ImportWizard.h" #include #include @@ -65,7 +63,9 @@ public slots: DatabaseWidget* newDatabase(); void openDatabase(); void mergeDatabase(); - void importFile(); + void importCsv(); + void importKeePass1Database(); + void importOpVaultDatabase(); bool saveDatabase(int index = -1); bool saveDatabaseAs(int index = -1); bool saveDatabaseBackup(int index = -1); @@ -75,23 +75,15 @@ public slots: bool lockDatabases(); void lockDatabasesDelayed(); - void lockDatabasesOnUserSwitch(); void closeDatabaseFromSender(); void unlockDatabaseInDialog(DatabaseWidget* dbWidget, DatabaseOpenDialog::Intent intent); void unlockDatabaseInDialog(DatabaseWidget* dbWidget, DatabaseOpenDialog::Intent intent, const QString& filePath); - void unlockDatabaseInDialogForSync(const QString& filePath); void unlockAnyDatabaseInDialog(DatabaseOpenDialog::Intent intent); void relockPendingDatabase(); - void showDatabaseReports(bool state); - void showDatabaseSettings(bool state); void showDatabaseSecurity(); -#ifdef WITH_XC_BROWSER_PASSKEYS - void showPasskeys(); - void importPasskey(); - void importPasskeyToEntry(); - void removePasskeyFromEntry(); -#endif + void showDatabaseReports(); + void showDatabaseSettings(); void performGlobalAutoType(const QString& search); void performBrowserUnlock(); @@ -117,16 +109,14 @@ private slots: private: QSharedPointer execNewDatabaseWizard(); - void updateLastDatabases(const QSharedPointer& database); + void updateLastDatabases(const QString& filename); bool warnOnExport(); void displayUnlockDialog(); QPointer m_dbWidgetStateSync; QPointer m_dbWidgetPendingLock; QPointer m_databaseOpenDialog; - QPointer m_importWizard; QTimer m_lockDelayTimer; - bool m_databaseOpenInProgress; }; #endif // KEEPASSX_DATABASETABWIDGET_H diff --git a/src/gui/DatabaseWidget.cpp b/src/gui/DatabaseWidget.cpp index a9f7f5a81..815a71688 100644 --- a/src/gui/DatabaseWidget.cpp +++ b/src/gui/DatabaseWidget.cpp @@ -1,6 +1,6 @@ /* - * Copyright (C) 2024 KeePassXC Team * Copyright (C) 2010 Felix Geyer + * Copyright (C) 2021 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 @@ -30,21 +30,20 @@ #include #include #include +#include #include "autotype/AutoType.h" -#include "core/AsyncTask.h" #include "core/EntrySearcher.h" #include "core/Merger.h" -#include "core/Tools.h" #include "gui/Clipboard.h" #include "gui/CloneDialog.h" -#include "gui/DatabaseOpenDialog.h" -#include "gui/DatabaseOpenWidget.h" #include "gui/EntryPreviewWidget.h" #include "gui/FileDialog.h" #include "gui/GuiTools.h" +#include "gui/KeePass1OpenWidget.h" #include "gui/MainWindow.h" #include "gui/MessageBox.h" +#include "gui/OpVaultOpenWidget.h" #include "gui/TotpDialog.h" #include "gui/TotpExportSettingsDialog.h" #include "gui/TotpSetupDialog.h" @@ -54,10 +53,7 @@ #include "gui/group/GroupView.h" #include "gui/reports/ReportsDialog.h" #include "gui/tag/TagView.h" -#include "gui/widgets/ElidedLabel.h" #include "keeshare/KeeShare.h" -#include "remote/RemoteHandler.h" -#include "remote/RemoteSettings.h" #ifdef WITH_XC_NETWORKING #include "gui/IconDownloaderDialog.h" @@ -67,10 +63,6 @@ #include "sshagent/SSHAgent.h" #endif -#ifdef WITH_XC_BROWSER_PASSKEYS -#include "gui/passkeys/PasskeyImporter.h" -#endif - DatabaseWidget::DatabaseWidget(QSharedPointer db, QWidget* parent) : QStackedWidget(parent) , m_db(std::move(db)) @@ -81,26 +73,23 @@ DatabaseWidget::DatabaseWidget(QSharedPointer db, QWidget* parent) , m_previewView(new EntryPreviewWidget(this)) , m_previewSplitter(new QSplitter(m_mainWidget)) , m_searchingLabel(new QLabel(this)) - , m_shareLabel(new ElidedLabel(this)) + , m_shareLabel(new QLabel(this)) + , m_csvImportWizard(new CsvImportWizard(this)) , m_editEntryWidget(new EditEntryWidget(this)) , m_editGroupWidget(new EditGroupWidget(this)) , m_historyEditEntryWidget(new EditEntryWidget(this)) , m_reportsDialog(new ReportsDialog(this)) , m_databaseSettingDialog(new DatabaseSettingsDialog(this)) , m_databaseOpenWidget(new DatabaseOpenWidget(this)) + , m_keepass1OpenWidget(new KeePass1OpenWidget(this)) + , m_opVaultOpenWidget(new OpVaultOpenWidget(this)) , m_groupView(new GroupView(m_db.data(), this)) , m_tagView(new TagView(this)) , m_saveAttempts(0) - , m_remoteSettings(new RemoteSettings(m_db, this)) , m_entrySearcher(new EntrySearcher(false)) { Q_ASSERT(m_db); - // Read public headers if the database hasn't been opened yet - if (!m_db->isInitialized()) { - m_db->open(nullptr); - } - m_messageWidget->setHidden(true); auto mainLayout = new QVBoxLayout(); @@ -130,11 +119,8 @@ DatabaseWidget::DatabaseWidget(QSharedPointer db, QWidget* parent) m_groupSplitter->setChildrenCollapsible(true); m_groupSplitter->addWidget(m_groupView); m_groupSplitter->addWidget(tagsWidget); - m_groupSplitter->setStretchFactor(0, 100); - m_groupSplitter->setStretchFactor(1, 0); - m_groupSplitter->setSizes({1, 1}); - // Initial visibility based on config value - m_groupSplitter->setVisible(!config()->get(Config::GUI_HideGroupPanel).toBool()); + m_groupSplitter->setStretchFactor(0, 70); + m_groupSplitter->setStretchFactor(1, 30); auto rightHandSideWidget = new QWidget(m_mainSplitter); auto rightHandSideVBox = new QVBoxLayout(); @@ -147,12 +133,11 @@ DatabaseWidget::DatabaseWidget(QSharedPointer db, QWidget* parent) rightHandSideWidget->setLayout(rightHandSideVBox); m_entryView = new EntryView(rightHandSideWidget); - m_mainSplitter->setChildrenCollapsible(false); + m_mainSplitter->setChildrenCollapsible(true); m_mainSplitter->addWidget(m_groupSplitter); m_mainSplitter->addWidget(rightHandSideWidget); - m_mainSplitter->setStretchFactor(0, 0); - m_mainSplitter->setStretchFactor(1, 100); - m_mainSplitter->setSizes({1, 1}); + m_mainSplitter->setStretchFactor(0, 30); + m_mainSplitter->setStretchFactor(1, 70); m_previewSplitter->setOrientation(Qt::Vertical); m_previewSplitter->setChildrenCollapsible(true); @@ -174,7 +159,7 @@ DatabaseWidget::DatabaseWidget(QSharedPointer db, QWidget* parent) #ifdef WITH_XC_KEESHARE m_shareLabel->setObjectName("KeeShareBanner"); - m_shareLabel->setRawText(tr("Shared group…")); + m_shareLabel->setText(tr("Shared group…")); m_shareLabel->setAlignment(Qt::AlignCenter); m_shareLabel->setVisible(false); #endif @@ -188,11 +173,13 @@ DatabaseWidget::DatabaseWidget(QSharedPointer db, QWidget* parent) m_previewSplitter->setSizes({1, 1}); m_editEntryWidget->setObjectName("editEntryWidget"); - m_historyEditEntryWidget->setObjectName("editEntryHistoryWidget"); m_editGroupWidget->setObjectName("editGroupWidget"); + m_csvImportWizard->setObjectName("csvImportWizard"); m_reportsDialog->setObjectName("reportsDialog"); m_databaseSettingDialog->setObjectName("databaseSettingsDialog"); m_databaseOpenWidget->setObjectName("databaseOpenWidget"); + m_keepass1OpenWidget->setObjectName("keepass1OpenWidget"); + m_opVaultOpenWidget->setObjectName("opVaultOpenWidget"); addChildWidget(m_mainWidget); addChildWidget(m_editEntryWidget); @@ -201,6 +188,9 @@ DatabaseWidget::DatabaseWidget(QSharedPointer db, QWidget* parent) addChildWidget(m_databaseSettingDialog); addChildWidget(m_historyEditEntryWidget); addChildWidget(m_databaseOpenWidget); + addChildWidget(m_csvImportWizard); + addChildWidget(m_keepass1OpenWidget); + addChildWidget(m_opVaultOpenWidget); // clang-format off connect(m_mainSplitter, SIGNAL(splitterMoved(int,int)), SIGNAL(splitterSizesChanged())); @@ -208,7 +198,6 @@ DatabaseWidget::DatabaseWidget(QSharedPointer db, QWidget* parent) connect(m_previewSplitter, SIGNAL(splitterMoved(int,int)), SIGNAL(splitterSizesChanged())); connect(this, SIGNAL(currentModeChanged(DatabaseWidget::Mode)), m_previewView, SLOT(setDatabaseMode(DatabaseWidget::Mode))); connect(m_previewView, SIGNAL(entryUrlActivated(Entry*)), SLOT(openUrlForEntry(Entry*))); - connect(m_previewView, SIGNAL(copyTextRequested(const QString&)), SLOT(setClipboardTextAndMinimize(const QString&))); connect(m_entryView, SIGNAL(viewStateChanged()), SIGNAL(entryViewStateChanged())); connect(m_groupView, SIGNAL(groupSelectionChanged()), SLOT(onGroupChanged())); connect(m_groupView, &GroupView::groupFocused, this, [this] { m_previewView->setGroup(currentGroup()); }); @@ -222,19 +211,16 @@ DatabaseWidget::DatabaseWidget(QSharedPointer db, QWidget* parent) connect(m_reportsDialog, 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_opVaultOpenWidget, SIGNAL(dialogFinished(bool)), SLOT(loadDatabase(bool))); + connect(m_csvImportWizard, SIGNAL(importFinished(bool)), SLOT(csvImportFinished(bool))); connect(this, SIGNAL(currentChanged(int)), SLOT(emitCurrentModeChanged())); connect(this, SIGNAL(requestGlobalAutoType(const QString&)), parent, SLOT(performGlobalAutoType(const QString&))); - connect(config(), &Config::changed, this, &DatabaseWidget::onConfigChanged); // clang-format on connectDatabaseSignals(); m_blockAutoSave = false; - m_reloading = false; - - m_autosaveTimer = new QTimer(this); - m_autosaveTimer->setSingleShot(true); - connect(m_autosaveTimer, SIGNAL(timeout()), this, SLOT(onAutosaveDelayTimeout())); m_searchLimitGroup = config()->get(Config::SearchLimitGroup).toBool(); @@ -274,26 +260,17 @@ QSharedPointer DatabaseWidget::database() const DatabaseWidget::Mode DatabaseWidget::currentMode() const { - auto mode = Mode::None; - auto widget = currentWidget(); - if (widget == m_mainWidget) { - mode = Mode::ViewMode; - } else if (widget == m_databaseOpenWidget) { - mode = Mode::LockedMode; - } else if (widget == m_reportsDialog) { - mode = Mode::ReportsMode; - } else if (widget == m_databaseSettingDialog) { - mode = Mode::DatabaseSettingsMode; - } else if (widget == m_editEntryWidget || widget == m_historyEditEntryWidget) { - mode = Mode::EditEntryMode; - } else if (widget == m_editGroupWidget) { - mode = Mode::EditGroupMode; + if (currentWidget() == nullptr) { + return Mode::None; + } else if (currentWidget() == m_mainWidget) { + return Mode::ViewMode; + } else if (currentWidget() == m_databaseOpenWidget || currentWidget() == m_keepass1OpenWidget) { + return Mode::LockedMode; + } else if (currentWidget() == m_csvImportWizard) { + return Mode::ImportMode; } else { - // We are missing a condition if we reach here - Q_ASSERT(false); + return Mode::EditMode; } - - return mode; } bool DatabaseWidget::isLocked() const @@ -341,45 +318,6 @@ bool DatabaseWidget::isEditWidgetModified() const return false; } -QString DatabaseWidget::displayName() const -{ - if (!m_db) { - return {}; - } - - auto displayName = m_db->metadata()->name(); - if (!m_db->filePath().isEmpty()) { - if (displayName.isEmpty()) { - displayName = displayFileName(); - } - } else { - if (displayName.isEmpty()) { - displayName = tr("New Database"); - } else { - displayName = tr("%1 [New Database]", "Database tab name modifier").arg(displayName); - } - } - - return displayName; -} - -QString DatabaseWidget::displayFileName() const -{ - if (m_db) { - QFileInfo fileinfo(m_db->filePath()); - return fileinfo.fileName(); - } - return {}; -} - -QString DatabaseWidget::displayFilePath() const -{ - if (m_db) { - return m_db->canonicalFilePath(); - } - return {}; -} - QHash> DatabaseWidget::splitterSizes() const { return {{Config::GUI_SplitterState, m_mainSplitter->sizes()}, @@ -389,27 +327,20 @@ QHash> DatabaseWidget::splitterSizes() const void DatabaseWidget::setSplitterSizes(const QHash>& sizes) { - // Set the splitter sizes, if the size is invalid set a default ratio based on this widget size for (auto itr = sizes.constBegin(); itr != sizes.constEnd(); ++itr) { - auto value = itr.value(); + // Less than two sizes indicates an invalid value + if (itr.value().size() < 2) { + continue; + } switch (itr.key()) { case Config::GUI_SplitterState: - if (value.size() < 2) { - value = QList({static_cast(width() * 0.25), static_cast(width() * 0.75)}); - } - m_mainSplitter->setSizes(value); + m_mainSplitter->setSizes(itr.value()); break; case Config::GUI_PreviewSplitterState: - if (value.size() < 2) { - value = QList({static_cast(height() * 0.8), static_cast(height() * 0.2)}); - } - m_previewSplitter->setSizes(value); + m_previewSplitter->setSizes(itr.value()); break; case Config::GUI_GroupSplitterState: - if (value.size() < 2) { - value = QList({static_cast(height() * 0.6), static_cast(height() * 0.4)}); - } - m_groupSplitter->setSizes(value); + m_groupSplitter->setSizes(itr.value()); break; default: break; @@ -417,15 +348,6 @@ void DatabaseWidget::setSplitterSizes(const QHash> } } -void DatabaseWidget::onConfigChanged(Config::ConfigKey key) -{ - if (key == Config::GUI_HideGroupPanel) { - // Toggle the group splitter visibility and reset the size - m_groupSplitter->setVisible(!config()->get(Config::GUI_HideGroupPanel).toBool()); - setSplitterSizes({{Config::GUI_SplitterState, QList({})}}); - } -} - void DatabaseWidget::setSearchStringForAutoType(const QString& search) { m_searchStringForAutoType = search; @@ -494,7 +416,6 @@ void DatabaseWidget::replaceDatabase(QSharedPointer db) connectDatabaseSignals(); m_groupView->changeDatabase(m_db); m_tagView->setDatabase(m_db); - m_remoteSettings->setDatabase(m_db); // Restore the new parent group pointer, if not found default to the root group // this prevents data loss when merging a database while creating a new entry @@ -567,25 +488,10 @@ void DatabaseWidget::setupTotp() auto setupTotpDialog = new TotpSetupDialog(this, currentEntry); connect(setupTotpDialog, SIGNAL(totpUpdated()), SIGNAL(entrySelectionChanged())); - if (currentWidget() == m_editEntryWidget) { - // Entry is being edited, tell it when we are finished updating TOTP - connect(setupTotpDialog, SIGNAL(totpUpdated()), m_editEntryWidget, SLOT(updateTotp())); - } connect(this, &DatabaseWidget::databaseLockRequested, setupTotpDialog, &TotpSetupDialog::close); setupTotpDialog->open(); } -void DatabaseWidget::expireSelectedEntries() -{ - const QModelIndexList selected = m_entryView->selectionModel()->selectedRows(); - for (const auto& index : selected) { - auto entry = m_entryView->entryFromIndex(index); - if (entry) { - entry->expireNow(); - } - } -} - void DatabaseWidget::deleteSelectedEntries() { const QModelIndexList selected = m_entryView->selectionModel()->selectedRows(); @@ -714,6 +620,29 @@ void DatabaseWidget::copyUsername() void DatabaseWidget::copyPassword() { + // Some platforms do not properly trap Ctrl+C copy shortcut + // if a text edit or label has focus pass the copy operation to it + + bool clearClipboard = config()->get(Config::Security_ClearClipboard).toBool(); + + auto plainTextEdit = qobject_cast(focusWidget()); + if (plainTextEdit && plainTextEdit->textCursor().hasSelection()) { + clipboard()->setText(plainTextEdit->textCursor().selectedText(), clearClipboard); + return; + } + + auto label = qobject_cast(focusWidget()); + if (label && label->hasSelectedText()) { + clipboard()->setText(label->selectedText(), clearClipboard); + return; + } + + auto textEdit = qobject_cast(focusWidget()); + if (textEdit && textEdit->textCursor().hasSelection()) { + clipboard()->setText(textEdit->textCursor().selection().toPlainText(), clearClipboard); + return; + } + auto currentEntry = currentSelectedEntry(); if (currentEntry) { setClipboardTextAndMinimize(currentEntry->resolveMultiplePlaceholders(currentEntry->password())); @@ -754,34 +683,6 @@ void DatabaseWidget::copyAttribute(QAction* action) } } -bool DatabaseWidget::copyFocusedTextSelection() -{ - // If a focused child widget has text selected, copy that text to the clipboard - // and return true. Otherwise, return false. - - const bool clearClipboard = config()->get(Config::Security_ClearClipboard).toBool(); - - const auto plainTextEdit = qobject_cast(focusWidget()); - if (plainTextEdit && plainTextEdit->textCursor().hasSelection()) { - clipboard()->setText(plainTextEdit->textCursor().selectedText(), clearClipboard); - return true; - } - - const auto label = qobject_cast(focusWidget()); - if (label && label->hasSelectedText()) { - clipboard()->setText(label->selectedText(), clearClipboard); - return true; - } - - const auto textEdit = qobject_cast(focusWidget()); - if (textEdit && textEdit->textCursor().hasSelection()) { - clipboard()->setText(textEdit->textCursor().selection().toPlainText(), clearClipboard); - return true; - } - - return false; -} - void DatabaseWidget::filterByTag() { QStringList searchTerms; @@ -1003,7 +904,7 @@ void DatabaseWidget::openUrlForEntry(Entry* entry) this); msgbox.setDefaultButton(QMessageBox::No); - auto checkbox = new QCheckBox(tr("Remember my choice"), &msgbox); + QCheckBox* checkbox = new QCheckBox(tr("Remember my choice"), &msgbox); msgbox.setCheckBox(checkbox); bool remember = false; QObject::connect(checkbox, &QCheckBox::stateChanged, [&](int state) { @@ -1021,16 +922,7 @@ void DatabaseWidget::openUrlForEntry(Entry* entry) } if (launch) { - const QString cmd = cmdString.mid(6); -#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0) - QStringList cmdList = QProcess::splitCommand(cmd); - if (!cmdList.isEmpty()) { - const QString program = cmdList.takeFirst(); - QProcess::startDetached(program, cmdList); - } -#else - QProcess::startDetached(cmd); -#endif + QProcess::startDetached(cmdString.mid(6)); if (config()->get(Config::MinimizeOnOpenUrl).toBool()) { getMainWindow()->minimizeOrHide(); @@ -1041,11 +933,7 @@ void DatabaseWidget::openUrlForEntry(Entry* entry) } else { QUrl url = QUrl::fromUserInput(entry->resolveMultiplePlaceholders(entry->url())); if (!url.isEmpty()) { -#ifdef KEEPASSXC_DIST_APPIMAGE - QProcess::execute("xdg-open", {url.toString(QUrl::FullyEncoded)}); -#else QDesktopServices::openUrl(url); -#endif if (config()->get(Config::MinimizeOnOpenUrl).toBool()) { getMainWindow()->minimizeOrHide(); @@ -1054,7 +942,7 @@ void DatabaseWidget::openUrlForEntry(Entry* entry) } } -Entry* DatabaseWidget::currentSelectedEntry() const +Entry* DatabaseWidget::currentSelectedEntry() { if (currentWidget() == m_editEntryWidget) { return m_editEntryWidget->currentEntry(); @@ -1134,87 +1022,6 @@ int DatabaseWidget::addChildWidget(QWidget* w) return index; } -void DatabaseWidget::syncWithRemote(const RemoteParams* params) -{ - setDisabled(true); - emit databaseSyncInProgress(); - - QScopedPointer remoteHandler(new RemoteHandler(this)); - RemoteHandler::RemoteResult result; - result.success = false; - result.errorMessage = tr("Remote Sync did not contain any download or upload commands."); - - // Download the database - if (!params->downloadCommand.isEmpty()) { - emit updateSyncProgress(25, tr("Downloading...")); - // Start a download first then merge and upload in the callback - result = remoteHandler->download(params); - if (result.success) { - QString error; - QSharedPointer remoteDb = QSharedPointer::create(); - if (!remoteDb->open(result.filePath, m_db->key(), &error)) { - // Failed to open downloaded remote database with same key - // Unlock downloaded remote database via dialog - syncDatabaseWithLockedDatabase(result.filePath, params); - return; - } - remoteDb->markAsTemporaryDatabase(); - if (!syncWithDatabase(remoteDb, error)) { - // Something failed during the sync process - result.success = false; - result.errorMessage = error; - } - } - } - - uploadAndFinishSync(params, result); -} - -void DatabaseWidget::syncDatabaseWithLockedDatabase(const QString& filePath, const RemoteParams* params) -{ - // disconnect any previously added slots to these signal - disconnect(this, &DatabaseWidget::databaseSyncUnlocked, nullptr, nullptr); - disconnect(this, &DatabaseWidget::databaseSyncUnlockFailed, nullptr, nullptr); - - connect(this, &DatabaseWidget::databaseSyncUnlocked, [this, params](const RemoteHandler::RemoteResult& result) { - uploadAndFinishSync(params, result); - }); - connect(this, &DatabaseWidget::databaseSyncUnlockFailed, [this, params](const RemoteHandler::RemoteResult& result) { - finishSync(params, result); - }); - - emit unlockDatabaseInDialogForSync(filePath); -} - -void DatabaseWidget::uploadAndFinishSync(const RemoteParams* params, RemoteHandler::RemoteResult result) -{ - QScopedPointer remoteHandler(new RemoteHandler(this)); - if (result.success && !params->uploadCommand.isEmpty()) { - emit updateSyncProgress(75, tr("Uploading...")); - result = remoteHandler->upload(result.filePath, params); - } - - finishSync(params, result); -} - -void DatabaseWidget::finishSync(const RemoteParams* params, RemoteHandler::RemoteResult result) -{ - setDisabled(false); - emit updateSyncProgress(-1, ""); - if (result.success) { - emit databaseSyncCompleted(params->name); - showMessage(tr("Remote sync '%1' completed successfully!").arg(params->name), MessageWidget::Positive, false); - } else { - emit databaseSyncFailed(params->name, result.errorMessage); - showErrorMessage(tr("Remote sync '%1' failed: %2").arg(params->name, result.errorMessage)); - } -} - -QList DatabaseWidget::getRemoteParams() const -{ - return m_remoteSettings->getAllRemoteParams(); -} - void DatabaseWidget::switchToMainView(bool previousDialogAccepted) { setCurrentWidget(m_mainWidget); @@ -1300,8 +1107,6 @@ void DatabaseWidget::connectDatabaseSignals() connect(m_db.data(), &Database::modified, this, &DatabaseWidget::onDatabaseModified); connect(m_db.data(), &Database::databaseSaved, this, &DatabaseWidget::databaseSaved); connect(m_db.data(), &Database::databaseFileChanged, this, &DatabaseWidget::reloadDatabaseFile); - connect(m_db.data(), &Database::databaseNonDataChanged, this, &DatabaseWidget::databaseNonDataChanged); - connect(m_db.data(), &Database::databaseNonDataChanged, this, &DatabaseWidget::onDatabaseNonDataChanged); } void DatabaseWidget::loadDatabase(bool accepted) @@ -1313,7 +1118,6 @@ void DatabaseWidget::loadDatabase(bool accepted) } if (accepted) { - emit databaseAboutToUnlock(); replaceDatabase(openWidget->database()); switchToMainView(); processAutoOpen(); @@ -1385,59 +1189,6 @@ void DatabaseWidget::mergeDatabase(bool accepted) emit databaseMerged(m_db); } -void DatabaseWidget::syncUnlockedDatabase(bool accepted) -{ - if (accepted) { - if (!m_db) { - showMessage(tr("No current database."), MessageWidget::Error); - return; - } - - auto* senderDialog = qobject_cast(sender()); - - Q_ASSERT(senderDialog); - if (!senderDialog) { - return; - } - auto destinationDb = senderDialog->database(); - - if (!destinationDb) { - showMessage(tr("No source database, nothing to do."), MessageWidget::Error); - return; - } - - RemoteHandler::RemoteResult result; - QString error; - result.success = syncWithDatabase(destinationDb, error); - result.errorMessage = error; - result.filePath = destinationDb->filePath(); - - emit databaseSyncUnlocked(result); - } - switchToMainView(); -} - -bool DatabaseWidget::syncWithDatabase(const QSharedPointer& otherDb, QString& error) -{ - emit updateSyncProgress(50, tr("Syncing...")); - Merger firstMerge(m_db.data(), otherDb.data()); - Merger secondMerge(otherDb.data(), m_db.data()); - QStringList changeList = firstMerge.merge() + secondMerge.merge(); - - if (!changeList.isEmpty()) { - // Save synced databases - if (!save()) { - error = tr("Error while saving database %1: %2").arg(m_db->filePath(), error); - return false; - } - if (!otherDb->save(Database::Atomic, {}, &error)) { - error = tr("Error while saving database %1: %2").arg(otherDb->filePath(), error); - return false; - } - } - return true; -} - /** * Unlock the database. * @@ -1451,26 +1202,14 @@ void DatabaseWidget::unlockDatabase(bool accepted) if (!senderDialog && (!m_db || !m_db->isInitialized())) { emit closeRequest(); } - if (senderDialog && senderDialog->intent() == DatabaseOpenDialog::Intent::RemoteSync) { - RemoteHandler::RemoteResult result; - result.success = false; - result.errorMessage = "Remote database unlock cancelled."; - emit databaseSyncUnlockFailed(result); - } return; } - if (senderDialog) { - if (senderDialog->intent() == DatabaseOpenDialog::Intent::Merge) { - mergeDatabase(accepted); - return; - } else if (senderDialog->intent() == DatabaseOpenDialog::Intent::RemoteSync) { - syncUnlockedDatabase(accepted); - return; - } + if (senderDialog && senderDialog->intent() == DatabaseOpenDialog::Intent::Merge) { + mergeDatabase(accepted); + return; } - emit databaseAboutToUnlock(); QSharedPointer db; if (senderDialog) { db = senderDialog->database(); @@ -1526,8 +1265,13 @@ void DatabaseWidget::entryActivationSignalReceived(Entry* entry, EntryModel::Mod switchToEntryEdit(entry); } break; + case EntryModel::Url: + if (!entry->url().isEmpty()) { + openUrlForEntry(entry); + } + break; case EntryModel::Totp: - if (entry->hasValidTotp()) { + if (entry->hasTotp()) { setClipboardTextAndMinimize(entry->totp()); } else { setupTotp(); @@ -1546,13 +1290,6 @@ void DatabaseWidget::entryActivationSignalReceived(Entry* entry, EntryModel::Mod // TODO: switch to 'Attachments' tab in details view/pane // case EntryModel::Attachments: // break; - case EntryModel::Url: - if (!entry->url().isEmpty() && config()->get(Config::OpenURLOnDoubleClick).toBool()) { - openUrlForEntry(entry); - break; - } - // Note, order matters here. We want to fall into the default case. - [[fallthrough]]; default: switchToEntryEdit(entry); } @@ -1560,18 +1297,14 @@ void DatabaseWidget::entryActivationSignalReceived(Entry* entry, EntryModel::Mod void DatabaseWidget::switchToDatabaseReports() { - if (currentMode() != Mode::ReportsMode) { - m_reportsDialog->load(m_db); - setCurrentWidget(m_reportsDialog); - } + m_reportsDialog->load(m_db); + setCurrentWidget(m_reportsDialog); } void DatabaseWidget::switchToDatabaseSettings() { - if (currentMode() != Mode::DatabaseSettingsMode) { - m_databaseSettingDialog->load(m_db); - setCurrentWidget(m_databaseSettingDialog); - } + m_databaseSettingDialog->load(m_db); + setCurrentWidget(m_databaseSettingDialog); } void DatabaseWidget::switchToOpenDatabase() @@ -1593,6 +1326,33 @@ void DatabaseWidget::switchToOpenDatabase(const QString& filePath, const QString m_databaseOpenWidget->enterKey(password, keyFile); } +void DatabaseWidget::switchToCsvImport(const QString& filePath) +{ + setCurrentWidget(m_csvImportWizard); + m_csvImportWizard->load(filePath, m_db.data()); +} + +void DatabaseWidget::csvImportFinished(bool accepted) +{ + if (!accepted) { + emit closeRequest(); + } else { + switchToMainView(); + } +} + +void DatabaseWidget::switchToImportKeepass1(const QString& filePath) +{ + m_keepass1OpenWidget->load(filePath); + setCurrentWidget(m_keepass1OpenWidget); +} + +void DatabaseWidget::switchToImportOpVault(const QString& fileName) +{ + m_opVaultOpenWidget->load(fileName); + setCurrentWidget(m_opVaultOpenWidget); +} + void DatabaseWidget::switchToEntryEdit() { auto entry = m_entryView->currentEntry(); @@ -1629,52 +1389,6 @@ void DatabaseWidget::switchToDatabaseSecurity() m_databaseSettingDialog->showDatabaseKeySettings(); } -void DatabaseWidget::switchToRemoteSettings() -{ - switchToDatabaseSettings(); - m_databaseSettingDialog->showRemoteSettings(); -} - -#ifdef WITH_XC_BROWSER_PASSKEYS -void DatabaseWidget::switchToPasskeys() -{ - switchToDatabaseReports(); - m_reportsDialog->activatePasskeysPage(); -} - -void DatabaseWidget::showImportPasskeyDialog(bool isEntry) -{ - PasskeyImporter passkeyImporter(this); - - if (isEntry) { - auto currentEntry = currentSelectedEntry(); - if (!currentEntry) { - return; - } - - passkeyImporter.importPasskey(m_db, currentEntry); - } else { - passkeyImporter.importPasskey(m_db); - } -} - -void DatabaseWidget::removePasskeyFromEntry() -{ - auto currentEntry = currentSelectedEntry(); - if (!currentEntry) { - return; - } - - auto result = MessageBox::question(this, - tr("Remove passkey from entry"), - tr("Do you want to remove the passkey from this entry?"), - MessageBox::Remove | MessageBox::Cancel); - if (result == MessageBox::Remove) { - currentEntry->removePasskey(); - } -} -#endif - void DatabaseWidget::performUnlockDatabase(const QString& password, const QString& keyfile) { if (password.isEmpty() && keyfile.isEmpty()) { @@ -1802,7 +1516,7 @@ void DatabaseWidget::onGroupChanged() #ifdef WITH_XC_KEESHARE auto shareLabel = KeeShare::sharingLabel(group); if (!shareLabel.isEmpty()) { - m_shareLabel->setRawText(shareLabel); + m_shareLabel->setText(shareLabel); m_shareLabel->setVisible(true); } else { m_shareLabel->setVisible(false); @@ -1814,51 +1528,13 @@ void DatabaseWidget::onGroupChanged() void DatabaseWidget::onDatabaseModified() { + if (!m_blockAutoSave && config()->get(Config::AutoSaveAfterEveryChange).toBool()) { + save(); + } else { + // Only block once, then reset + m_blockAutoSave = false; + } refreshSearch(); - m_remoteSettings->loadSettings(); - int autosaveDelayMs = m_db->metadata()->autosaveDelayMin() * 60 * 1000; // min to msec for QTimer - bool autosaveAfterEveryChangeConfig = config()->get(Config::AutoSaveAfterEveryChange).toBool(); - if (autosaveDelayMs > 0 && autosaveAfterEveryChangeConfig) { - // reset delay when modified - m_autosaveTimer->start(autosaveDelayMs); - return; - } - if (!m_blockAutoSave && autosaveAfterEveryChangeConfig) { - save(); - } else { - // Only block once, then reset - m_blockAutoSave = false; - } -} - -void DatabaseWidget::onAutosaveDelayTimeout() -{ - const bool isAutosaveDelayEnabled = m_db->metadata()->autosaveDelayMin() > 0; - const bool autosaveAfterEveryChangeConfig = config()->get(Config::AutoSaveAfterEveryChange).toBool(); - if (!(isAutosaveDelayEnabled && autosaveAfterEveryChangeConfig)) { - // User might disable the delay/autosave while the timer is running - return; - } - if (!m_blockAutoSave) { - save(); - } else { - // Only block once, then reset - m_blockAutoSave = false; - } -} - -void DatabaseWidget::triggerAutosaveTimer() -{ - m_autosaveTimer->stop(); - QMetaObject::invokeMethod(m_autosaveTimer, "timeout"); -} - -void DatabaseWidget::onDatabaseNonDataChanged() -{ - // Force mark the database modified if we are not auto-saving non-data changes - if (!config()->get(Config::AutoSaveNonDataChanges).toBool()) { - m_db->markAsModified(); - } } QString DatabaseWidget::getCurrentSearch() @@ -1913,13 +1589,16 @@ void DatabaseWidget::onEntryChanged(Entry* entry) bool DatabaseWidget::canCloneCurrentGroup() const { - auto currentGroup = m_groupView->currentGroup(); - return currentGroup != m_db->rootGroup() && currentGroup != m_db->metadata()->recycleBin(); + bool isRootGroup = m_db->rootGroup() == m_groupView->currentGroup(); + // bool isRecycleBin = isRecycleBinSelected(); + + return !isRootGroup; } bool DatabaseWidget::canDeleteCurrentGroup() const { - return currentGroup() != m_db->rootGroup(); + bool isRootGroup = m_db->rootGroup() == m_groupView->currentGroup(); + return !isRootGroup; } Group* DatabaseWidget::currentGroup() const @@ -1986,13 +1665,8 @@ bool DatabaseWidget::focusNextPrevChild(bool next) bool DatabaseWidget::lock() { - if (isLocked() || m_attemptingLock) { - return isLocked(); - } - - // ignore when reloading - if (m_reloading) { - return false; + if (isLocked()) { + return true; } // Don't try to lock the database while saving, this will cause a deadlock @@ -2001,21 +1675,11 @@ bool DatabaseWidget::lock() return false; } - m_attemptingLock = true; - emit databaseLockRequested(); - // Force close any modal widgets associated with this widget - auto modalWidget = QApplication::activeModalWidget(); - if (modalWidget) { - auto parent = modalWidget->parentWidget(); - while (parent) { - if (parent == this) { - modalWidget->close(); - break; - } - parent = parent->parentWidget(); - } + // ignore event if we are active and a modal dialog is still open (such as a message box or file dialog) + if (isVisible() && QApplication::activeModalWidget()) { + return false; } clipboard()->clearCopiedText(); @@ -2027,7 +1691,6 @@ bool DatabaseWidget::lock() MessageBox::Discard | MessageBox::Cancel, MessageBox::Cancel); if (result == MessageBox::Cancel) { - m_attemptingLock = false; return false; } } @@ -2038,18 +1701,6 @@ bool DatabaseWidget::lock() if (config()->get(Config::AutoSaveOnExit).toBool() || config()->get(Config::AutoSaveAfterEveryChange).toBool()) { saved = save(); - - if (!saved) { - // detect if a reload was triggered - bool reloadTriggered = false; - auto connection = - connect(this, &DatabaseWidget::reloadBegin, [&reloadTriggered] { reloadTriggered = true; }); - QApplication::processEvents(); - disconnect(connection); - if (reloadTriggered) { - return false; - } - } } if (!saved) { @@ -2066,11 +1717,9 @@ bool DatabaseWidget::lock() MessageBox::Save); if (result == MessageBox::Save) { if (!save()) { - m_attemptingLock = false; return false; } } else if (result == MessageBox::Cancel) { - m_attemptingLock = false; return false; } } @@ -2100,85 +1749,59 @@ bool DatabaseWidget::lock() switchToOpenDatabase(m_db->filePath()); auto newDb = QSharedPointer::create(m_db->filePath()); - newDb->open(nullptr); replaceDatabase(newDb); - m_attemptingLock = false; emit databaseLocked(); return true; } -void DatabaseWidget::reloadDatabaseFile(bool triggeredBySave) +void DatabaseWidget::reloadDatabaseFile() { - if (triggeredBySave) { - // not a failed save attempt due to file locking - m_saveAttempts = 0; - } - // Ignore reload if we are locked, saving, reloading, or currently editing an entry or group - if (!m_db || isLocked() || isEntryEditActive() || isGroupEditActive() || isSaving() || m_reloading) { + // Ignore reload if we are locked, saving, or currently editing an entry or group + if (!m_db || isLocked() || isEntryEditActive() || isGroupEditActive() || isSaving()) { return; } m_blockAutoSave = true; - m_reloading = true; - emit reloadBegin(); - - if (!triggeredBySave && !config()->get(Config::AutoReloadOnChange).toBool()) { + if (!config()->get(Config::AutoReloadOnChange).toBool()) { // Ask if we want to reload the db - auto result = MessageBox::question( - this, - tr("File has changed"), - QString("%1.\n%2").arg(tr("The database file \"%1\" was modified externally").arg(displayFileName()), - tr("Do you want to load the changes?")), - MessageBox::Yes | MessageBox::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 (result == MessageBox::No) { // Notify everyone the database does not match the file m_db->markAsModified(); - m_reloading = false; - - emit reloadEnd(); return; } } - // Remove any latent error messages and switch to progress updates - hideMessage(); - emit updateSyncProgress(0, tr("Reloading database…")); - // Lock out interactions m_entryView->setDisabled(true); m_groupView->setDisabled(true); m_tagView->setDisabled(true); QApplication::processEvents(); - auto reloadFinish = [this](bool hideMsg = true) { - // Return control - m_entryView->setDisabled(false); - m_groupView->setDisabled(false); - m_tagView->setDisabled(false); + QString error; + auto db = QSharedPointer::create(m_db->filePath()); + if (db->open(database()->key(), &error)) { + if (m_db->isModified() || db->hasNonDataChanges()) { + // 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::Discard, + MessageBox::Merge); - m_reloading = false; - - // Keep the previous message visible for 2 seconds if not hiding - QTimer::singleShot(hideMsg ? 0 : 2000, this, [this] { emit updateSyncProgress(-1, ""); }); - - emit reloadEnd(); - }; - auto reloadCanceled = [this, reloadFinish] { - // Mark db as modified since existing data may differ from file or file was deleted - m_db->markAsModified(); - - emit updateSyncProgress(100, tr("Reload canceled")); - reloadFinish(false); - }; - auto reloadContinue = [this, triggeredBySave, reloadFinish](QSharedPointer db, bool merge) { - if (merge) { - // Merge the old database into the new one - Merger merger(m_db.data(), db.data()); - merger.merge(); + if (result == MessageBox::Merge) { + // Merge the old database into the new one + Merger merger(m_db.data(), db.data()); + merger.merge(); + } } QUuid groupBeforeReload = m_db->rootGroup()->uuid(); @@ -2195,108 +1818,17 @@ void DatabaseWidget::reloadDatabaseFile(bool triggeredBySave) processAutoOpen(); restoreGroupEntryFocus(groupBeforeReload, entryBeforeReload); m_blockAutoSave = false; - - emit updateSyncProgress(100, tr("Reload successful")); - reloadFinish(false); - - // If triggered by save, attempt another save - if (triggeredBySave) { - save(); - } - }; - - auto db = QSharedPointer::create(m_db->filePath()); - bool openResult = db->open(database()->key()); - - // skip if the db is unchanged, or the db file is gone or for sure not a kp-db - if (bool sameHash = db->fileBlockHash() == m_db->fileBlockHash() || db->fileBlockHash().isEmpty()) { - if (!sameHash) { - // db file gone or invalid so mark modified - m_db->markAsModified(); - } - m_blockAutoSave = false; - reloadFinish(); - return; + } else { + 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->markAsModified(); } - bool merge = false; - QString changesActionStr; - if (triggeredBySave || m_db->isModified() || m_db->hasNonDataChanges()) { - emit updateSyncProgress(50, tr("Reload pending user action…")); - - // Ask how to proceed - auto message = tr("The database file \"%1\" was modified externally.
    " - "How would you like to proceed?

    " - "Merge all changes
    " - "Ignore the changes on disk until save
    " - "Discard unsaved changes") - .arg(displayFileName()); - auto buttons = MessageBox::Merge | MessageBox::Discard | MessageBox::Ignore | MessageBox::Cancel; - // Different message if we are attempting to save - if (triggeredBySave) { - message = tr("The database file \"%1\" was modified externally.
    " - "How would you like to proceed?

    " - "Merge all changes then save
    " - "Overwrite the changes on disk
    " - "Discard unsaved changes") - .arg(displayFileName()); - buttons = MessageBox::Merge | MessageBox::Discard | MessageBox::Overwrite | MessageBox::Cancel; - } - - auto result = MessageBox::question(this, tr("Reload database"), message, buttons, MessageBox::Merge); - switch (result) { - case MessageBox::Cancel: - reloadCanceled(); - return; - case MessageBox::Overwrite: - case MessageBox::Ignore: - m_db->setIgnoreFileChangesUntilSaved(true); - m_blockAutoSave = false; - reloadFinish(!triggeredBySave); - // If triggered by save, attempt another save - if (triggeredBySave) { - save(); - emit updateSyncProgress(100, tr("Database file overwritten.")); - } - return; - case MessageBox::Merge: - merge = true; - default: - break; - } - } - - // Database file on disk previously opened successfully - if (openResult) { - reloadContinue(std::move(db), merge); - return; - } - - // The user needs to provide credentials - auto dbWidget = new DatabaseWidget(std::move(db)); - auto openDialog = new DatabaseOpenDialog(this); - connect(openDialog, &QObject::destroyed, [=](QObject*) { dbWidget->deleteLater(); }); - connect(openDialog, &DatabaseOpenDialog::dialogFinished, this, [=](bool accepted, DatabaseWidget*) { - if (accepted) { - reloadContinue(openDialog->database(), merge); - } else { - reloadCanceled(); - } - }); - openDialog->setAttribute(Qt::WA_DeleteOnClose); - openDialog->addDatabaseTab(dbWidget); - openDialog->setActiveDatabaseTab(dbWidget); - openDialog->showMessage(tr("Database file on disk cannot be unlocked with current credentials.
    " - "Enter new credentials and/or present hardware key to continue."), - MessageWidget::Error, - MessageWidget::DisableAutoHide); - - // ensure the main window is visible for this - getMainWindow()->bringToFront(); - // show the unlock dialog - openDialog->show(); - openDialog->raise(); - openDialog->activateWindow(); + // Return control + m_entryView->setDisabled(false); + m_groupView->setDisabled(false); + m_tagView->setDisabled(false); } int DatabaseWidget::numberOfSelectedEntries() const @@ -2313,7 +1845,7 @@ QStringList DatabaseWidget::customEntryAttributes() const { Entry* entry = m_entryView->currentEntry(); if (!entry) { - return {}; + return QStringList(); } return entry->attributes()->customKeys(); @@ -2386,7 +1918,7 @@ bool DatabaseWidget::currentEntryHasTotp() if (!currentEntry) { return false; } - return currentEntry->hasValidTotp(); + return currentEntry->hasTotp(); } #ifdef WITH_XC_SSHAGENT @@ -2402,14 +1934,6 @@ bool DatabaseWidget::currentEntryHasSshKey() } #endif -#ifdef WITH_XC_BROWSER_PASSKEYS -bool DatabaseWidget::currentEntryHasPasskey() -{ - auto currentEntry = m_entryView->currentEntry(); - return currentEntry && currentEntry->hasPasskey(); -} -#endif - bool DatabaseWidget::currentEntryHasNotes() { auto currentEntry = currentSelectedEntry(); @@ -2420,16 +1944,6 @@ bool DatabaseWidget::currentEntryHasNotes() return !currentEntry->resolveMultiplePlaceholders(currentEntry->notes()).isEmpty(); } -bool DatabaseWidget::currentEntryHasAutoTypeEnabled() -{ - auto currentEntry = currentSelectedEntry(); - if (!currentEntry) { - return false; - } - - return currentEntry->autoTypeEnabled() && currentEntry->groupAutoTypeEnabled(); -} - GroupView* DatabaseWidget::groupView() { return m_groupView; @@ -2459,11 +1973,6 @@ bool DatabaseWidget::save() return true; } - // Do no try to save if the database is being reloaded - if (m_reloading) { - return false; - } - // Read-only and new databases ask for filename if (m_db->filePath().isEmpty()) { return saveAs(); @@ -2477,8 +1986,6 @@ bool DatabaseWidget::save() if (performSave(errorMessage)) { m_saveAttempts = 0; m_blockAutoSave = false; - m_autosaveTimer->stop(); // stop autosave delay to avoid triggering another save - hideMessage(); return true; } @@ -2520,11 +2027,6 @@ bool DatabaseWidget::saveAs() return true; } - // Do no try to save if the database is being reloaded - if (m_reloading) { - return false; - } - QString oldFilePath = m_db->filePath(); if (!QFileInfo::exists(oldFilePath)) { QString defaultFileName = config()->get(Config::DefaultDatabaseFileName).toString(); @@ -2533,7 +2035,7 @@ bool DatabaseWidget::saveAs() + (defaultFileName.isEmpty() ? tr("Passwords").append(".kdbx") : defaultFileName)); } const QString newFilePath = fileDialog()->getSaveFileName( - this, tr("Save database as"), oldFilePath, tr("KeePass 2 Database").append(" (*.kdbx)")); + this, tr("Save database as"), oldFilePath, tr("KeePass 2 Database").append(" (*.kdbx)"), nullptr, nullptr); bool ok = false; if (!newFilePath.isEmpty()) { @@ -2554,10 +2056,9 @@ bool DatabaseWidget::performSave(QString& errorMessage, const QString& fileName) QPointer focusWidget(qApp->focusWidget()); // Lock out interactions - auto mainWindow = getMainWindow(); - if (mainWindow) { - mainWindow->setDisabled(true); - } + m_entryView->setDisabled(true); + m_groupView->setDisabled(true); + m_tagView->setDisabled(true); QApplication::processEvents(); Database::SaveAction saveAction = Database::Atomic; @@ -2597,11 +2098,11 @@ bool DatabaseWidget::performSave(QString& errorMessage, const QString& fileName) } // Return control - if (mainWindow) { - mainWindow->setDisabled(false); - } + m_entryView->setDisabled(false); + m_groupView->setDisabled(false); + m_tagView->setDisabled(false); - if (focusWidget && focusWidget->isVisible()) { + if (focusWidget) { focusWidget->setFocus(); } @@ -2615,45 +2116,47 @@ bool DatabaseWidget::performSave(QString& errorMessage, const QString& fileName) */ bool DatabaseWidget::saveBackup() { - QString oldFilePath = m_db->filePath(); - if (!QFileInfo::exists(oldFilePath)) { - QString defaultFileName = config()->get(Config::DefaultDatabaseFileName).toString(); - oldFilePath = - QDir::toNativeSeparators(FileDialog::getLastDir("db") + "/" - + (defaultFileName.isEmpty() ? tr("Passwords").append(".kdbx") : defaultFileName)); - } + while (true) { + QString oldFilePath = m_db->filePath(); + if (!QFileInfo::exists(oldFilePath)) { + QString defaultFileName = config()->get(Config::DefaultDatabaseFileName).toString(); + oldFilePath = QDir::toNativeSeparators( + FileDialog::getLastDir("db") + "/" + + (defaultFileName.isEmpty() ? tr("Passwords").append(".kdbx") : defaultFileName)); + } - const QString newFilePath = fileDialog()->getSaveFileName(this, - tr("Save database backup"), - FileDialog::getLastDir("backup", oldFilePath), - tr("KeePass 2 Database").append(" (*.kdbx)")); + const QString newFilePath = fileDialog()->getSaveFileName(this, + tr("Save database backup"), + FileDialog::getLastDir("backup", oldFilePath), + tr("KeePass 2 Database").append(" (*.kdbx)"), + nullptr, + nullptr); - // Early out if we canceled the file selection - if (newFilePath.isEmpty()) { + if (!newFilePath.isEmpty()) { + // Ensure we don't recurse back into this function + m_db->setFilePath(newFilePath); + m_saveAttempts = 0; + + bool modified = m_db->isModified(); + + if (!save()) { + // Failed to save, try again + m_db->setFilePath(oldFilePath); + continue; + } + + m_db->setFilePath(oldFilePath); + if (modified) { + // Source database is marked as clean when copy is saved, even if source has unsaved changes + m_db->markAsModified(); + } + FileDialog::saveLastDir("backup", newFilePath, true); + return true; + } + + // Canceled file selection return false; } - - // Record modified state so we can restore after save - bool modified = m_db->isModified(); - - QString error; - bool ok = m_db->saveAs(newFilePath, Database::DirectWrite, {}, &error); - - // Restore database to original state - m_db->setFilePath(oldFilePath); - if (modified) { - // Source database is marked as clean when copy is saved, even if source has unsaved changes - m_db->markAsModified(); - } - - if (!ok) { - // Failed to save backup, post the error - showErrorMessage(tr("Failed to save backup database: %1").arg(error)); - return false; - } - - FileDialog::saveLastDir("backup", newFilePath, true); - return true; } void DatabaseWidget::showMessage(const QString& text, @@ -2679,9 +2182,7 @@ void DatabaseWidget::hideMessage() bool DatabaseWidget::isRecycleBinSelected() const { - auto group = currentGroup(); - auto entry = currentSelectedEntry(); - return (group && group->isRecycled()) || (entry && entry->isRecycled()); + return m_groupView->currentGroup() && m_groupView->currentGroup() == m_db->metadata()->recycleBin(); } void DatabaseWidget::emptyRecycleBin() diff --git a/src/gui/DatabaseWidget.h b/src/gui/DatabaseWidget.h index a96c9d488..daca949e1 100644 --- a/src/gui/DatabaseWidget.h +++ b/src/gui/DatabaseWidget.h @@ -1,6 +1,6 @@ /* - * Copyright (C) 2024 KeePassXC Team * Copyright (C) 2010 Felix Geyer + * Copyright (C) 2021 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,34 +19,37 @@ #ifndef KEEPASSX_DATABASEWIDGET_H #define KEEPASSX_DATABASEWIDGET_H +#include +#include #include -#include "core/Database.h" -#include "core/Group.h" -#include "core/Metadata.h" +#include "DatabaseOpenDialog.h" +#include "config-keepassx.h" #include "gui/MessageWidget.h" +#include "gui/csvImport/CsvImportWizard.h" #include "gui/entry/EntryModel.h" -#include "remote/RemoteHandler.h" -class DatabaseOpenDialog; class DatabaseOpenWidget; +class KeePass1OpenWidget; +class OpVaultOpenWidget; class DatabaseSettingsDialog; class ReportsDialog; +class Database; class FileWatcher; class EditEntryWidget; class EditGroupWidget; +class Entry; class EntryView; class EntrySearcher; +class Group; class GroupView; class QFile; class QMenu; class QSplitter; class QLabel; +class MessageWidget; class EntryPreviewWidget; class TagView; -class ElidedLabel; -class RemoteSettings; -struct RemoteParams; namespace Ui { @@ -63,12 +66,10 @@ public: enum class Mode { None, + ImportMode, ViewMode, - EditEntryMode, - EditGroupMode, - LockedMode, - ReportsMode, - DatabaseSettingsMode + EditMode, + LockedMode }; explicit DatabaseWidget(QSharedPointer db, QWidget* parent = nullptr); @@ -102,14 +103,10 @@ public: int numberOfSelectedEntries() const; int currentEntryIndex() const; - QString displayName() const; - QString displayFileName() const; - QString displayFilePath() const; - QStringList customEntryAttributes() const; bool isEditWidgetModified() const; void clearAllWidgets(); - Entry* currentSelectedEntry() const; + Entry* currentSelectedEntry(); bool currentEntryHasTitle(); bool currentEntryHasUsername(); bool currentEntryHasPassword(); @@ -119,7 +116,6 @@ public: #ifdef WITH_XC_SSHAGENT bool currentEntryHasSshKey(); #endif - bool currentEntryHasAutoTypeEnabled(); QByteArray entryViewState() const; bool setEntryViewState(const QByteArray& state) const; @@ -127,17 +123,11 @@ public: void setSplitterSizes(const QHash>& sizes); void setSearchStringForAutoType(const QString& search); - void syncWithRemote(const RemoteParams* params); - void syncDatabaseWithLockedDatabase(const QString& filePath, const RemoteParams* params); - QList getRemoteParams() const; - signals: // relayed Database signals void databaseFilePathChanged(const QString& oldPath, const QString& newPath); void databaseModified(); - void databaseNonDataChanged(); void databaseSaved(); - void databaseAboutToUnlock(); void databaseUnlocked(); void databaseLockRequested(); void databaseLocked(); @@ -152,13 +142,6 @@ signals: void requestOpenDatabase(const QString& filePath, bool inBackground, const QString& password, const QString& keyFile); void databaseMerged(QSharedPointer mergedDb); - void databaseSyncInProgress(); - void databaseSyncCompleted(const QString& syncName); - void databaseSyncFailed(const QString& syncName, const QString& error); - void databaseSyncUnlockFailed(const RemoteHandler::RemoteResult& result); - void databaseSyncUnlocked(const RemoteHandler::RemoteResult& result); - void unlockDatabaseInDialogForSync(const QString& filePath); - void updateSyncProgress(int percentage, QString message); void groupContextMenuRequested(const QPoint& globalPos); void entryContextMenuRequested(const QPoint& globalPos); void listModeAboutToActivate(); @@ -170,8 +153,6 @@ signals: void clearSearch(); void requestGlobalAutoType(const QString& search); void requestSearch(const QString& search); - void reloadBegin(); - void reloadEnd(); public slots: bool lock(); @@ -182,7 +163,6 @@ public slots: void replaceDatabase(QSharedPointer db); void createEntry(); void cloneEntry(); - void expireSelectedEntries(); void deleteSelectedEntries(); void restoreSelectedEntries(); void deleteEntries(QList entries, bool confirm = true); @@ -196,7 +176,6 @@ public slots: void copyURL(); void copyNotes(); void copyAttribute(QAction* action); - bool copyFocusedTextSelection(); void filterByTag(); void setTag(QAction* action); void showTotp(); @@ -214,7 +193,6 @@ public slots: void performAutoTypePassword(); void performAutoTypePasswordEnter(); void performAutoTypeTOTP(); - void setClipboardTextAndMinimize(const QString& text); void openUrl(); void downloadSelectedFavicons(); void downloadAllFavicons(); @@ -231,17 +209,14 @@ public slots: void switchToDatabaseSecurity(); void switchToDatabaseReports(); void switchToDatabaseSettings(); - void switchToRemoteSettings(); -#ifdef WITH_XC_BROWSER_PASSKEYS - void switchToPasskeys(); - void showImportPasskeyDialog(bool isEntry = false); - void removePasskeyFromEntry(); - bool currentEntryHasPasskey(); -#endif void switchToOpenDatabase(); void switchToOpenDatabase(const QString& filePath); void switchToOpenDatabase(const QString& filePath, const QString& password, const QString& keyFile); + void switchToCsvImport(const QString& filePath); void performUnlockDatabase(const QString& password, const QString& keyfile = {}); + void csvImportFinished(bool accepted); + void switchToImportKeepass1(const QString& filePath); + void switchToImportOpVault(const QString& fileName); void emptyRecycleBin(); // Search related slots @@ -258,7 +233,6 @@ public slots: int autoHideTimeout = MessageWidget::DefaultAutoHideTimeout); void showErrorMessage(const QString& errorMessage); void hideMessage(); - void triggerAutosaveTimer(); protected: void closeEvent(QCloseEvent* event) override; @@ -277,24 +251,18 @@ private slots: void onEntryChanged(Entry* entry); void onGroupChanged(); void onDatabaseModified(); - void onDatabaseNonDataChanged(); - void onAutosaveDelayTimeout(); void connectDatabaseSignals(); void loadDatabase(bool accepted); void unlockDatabase(bool accepted); void mergeDatabase(bool accepted); - void syncUnlockedDatabase(bool accepted); - bool syncWithDatabase(const QSharedPointer& otherDb, QString& error); - void uploadAndFinishSync(const RemoteParams* params, RemoteHandler::RemoteResult result); - void finishSync(const RemoteParams* params, RemoteHandler::RemoteResult result); void emitCurrentModeChanged(); // Database autoreload slots - void reloadDatabaseFile(bool triggeredBySave); + void reloadDatabaseFile(); void restoreGroupEntryFocus(const QUuid& groupUuid, const QUuid& EntryUuid); - void onConfigChanged(Config::ConfigKey key); private: int addChildWidget(QWidget* w); + void setClipboardTextAndMinimize(const QString& text); void processAutoOpen(); void openDatabaseFromEntry(const Entry* entry, bool inBackground = true); void performIconDownloads(const QList& entries, bool force = false, bool downloadInBackground = false); @@ -309,13 +277,16 @@ private: QPointer m_previewView; QPointer m_previewSplitter; QPointer m_searchingLabel; - QPointer m_shareLabel; + QPointer m_shareLabel; + QPointer m_csvImportWizard; QPointer m_editEntryWidget; QPointer m_editGroupWidget; QPointer m_historyEditEntryWidget; QPointer m_reportsDialog; QPointer m_databaseSettingDialog; QPointer m_databaseOpenWidget; + QPointer m_keepass1OpenWidget; + QPointer m_opVaultOpenWidget; QPointer m_groupView; QPointer m_tagView; QPointer m_entryView; @@ -328,9 +299,6 @@ private: QUuid m_entryBeforeLock; int m_saveAttempts; - bool m_attemptingLock = false; - - QScopedPointer m_remoteSettings; // Search state QScopedPointer m_entrySearcher; @@ -340,10 +308,6 @@ private: // Autoreload bool m_blockAutoSave; - bool m_reloading; - - // Autosave delay - QPointer m_autosaveTimer; // Auto-Type related QString m_searchStringForAutoType; diff --git a/src/gui/DatabaseWidgetStateSync.cpp b/src/gui/DatabaseWidgetStateSync.cpp index 52458b5ab..9cc22254f 100644 --- a/src/gui/DatabaseWidgetStateSync.cpp +++ b/src/gui/DatabaseWidgetStateSync.cpp @@ -33,19 +33,18 @@ DatabaseWidgetStateSync::DatabaseWidgetStateSync(QObject* parent) m_listViewState = config()->get(Config::GUI_ListViewState).toByteArray(); m_searchViewState = config()->get(Config::GUI_SearchViewState).toByteArray(); - m_syncTimer.setSingleShot(true); - m_syncTimer.setInterval(100); - connect(&m_syncTimer, &QTimer::timeout, this, &DatabaseWidgetStateSync::sync); + connect(qApp, &QCoreApplication::aboutToQuit, this, &DatabaseWidgetStateSync::sync); } -DatabaseWidgetStateSync::~DatabaseWidgetStateSync() = default; +DatabaseWidgetStateSync::~DatabaseWidgetStateSync() +{ +} /** * Sync state with persistent storage. */ void DatabaseWidgetStateSync::sync() { - m_syncTimer.stop(); config()->set(Config::GUI_SplitterState, intListToVariant(m_splitterSizes.value(Config::GUI_SplitterState))); config()->set(Config::GUI_PreviewSplitterState, intListToVariant(m_splitterSizes.value(Config::GUI_PreviewSplitterState))); @@ -59,71 +58,72 @@ void DatabaseWidgetStateSync::sync() void DatabaseWidgetStateSync::setActive(DatabaseWidget* dbWidget) { if (m_activeDbWidget) { - if (m_activeDbWidget->currentMode() != DatabaseWidget::Mode::LockedMode) { - // Update settings from previously active database if unlocked - updateAll(); - } disconnect(m_activeDbWidget, nullptr, this, nullptr); } m_activeDbWidget = dbWidget; if (m_activeDbWidget) { - if (m_activeDbWidget->currentMode() != DatabaseWidget::Mode::LockedMode) { - // Immediately apply settings to active database if already unlocked - applySplitterSizes(); - applyViewState(); + m_blockUpdates = true; + + m_activeDbWidget->setSplitterSizes(m_splitterSizes); + + if (m_activeDbWidget->isSearchActive()) { + restoreSearchView(); + } else { + restoreListView(); } - connect(m_activeDbWidget, SIGNAL(databaseAboutToUnlock()), SLOT(blockUpdates())); - connect(m_activeDbWidget, SIGNAL(databaseUnlocked()), SLOT(applySplitterSizes())); - connect(m_activeDbWidget, SIGNAL(databaseUnlocked()), SLOT(applyViewState())); - connect(m_activeDbWidget, &DatabaseWidget::databaseLocked, this, [this] { updateAll(true); }); + m_blockUpdates = false; + connect(m_activeDbWidget, SIGNAL(splitterSizesChanged()), SLOT(updateSplitterSizes())); connect(m_activeDbWidget, SIGNAL(entryViewStateChanged()), SLOT(updateViewState())); - connect(m_activeDbWidget, SIGNAL(listModeActivated()), SLOT(applyViewState())); - connect(m_activeDbWidget, SIGNAL(searchModeActivated()), SLOT(applyViewState())); + 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())); } } -void DatabaseWidgetStateSync::applySplitterSizes() -{ - if (!m_activeDbWidget) { - return; - } - - m_blockUpdates = true; - - m_activeDbWidget->setSplitterSizes(m_splitterSizes); - - m_blockUpdates = false; -} - /** * Restore entry view list view state * * NOTE: + * States of entry view 'Hide Usernames'/'Hide Passwords' settings are global, + * i.e. they are the same for both list and search mode + * + * NOTE: * If m_listViewState is empty, the list view has been activated for the first * time after starting with a clean (or invalid) config. */ -void DatabaseWidgetStateSync::applyViewState() +void DatabaseWidgetStateSync::restoreListView() { - if (!m_activeDbWidget) { - return; + if (!m_listViewState.isEmpty()) { + m_activeDbWidget->setEntryViewState(m_listViewState); } - m_blockUpdates = true; + m_blockUpdates = false; +} - if (m_activeDbWidget->isSearchActive()) { - if (!m_searchViewState.isEmpty()) { - m_activeDbWidget->setEntryViewState(m_searchViewState); - } +/** + * Restore entry view search view state + * + * NOTE: + * States of entry view 'Hide Usernames'/'Hide Passwords' settings are global, + * i.e. they are the same for both list and search mode + * + * NOTE: + * If m_searchViewState is empty, the search view has been activated for the + * first time after starting with a clean (or invalid) config. Thus, save the + * current state. Without this, m_searchViewState would remain empty until + * there is an actual view state change (e.g. column is resized) + */ +void DatabaseWidgetStateSync::restoreSearchView() +{ + if (!m_searchViewState.isEmpty()) { + m_activeDbWidget->setEntryViewState(m_searchViewState); } else { - if (!m_listViewState.isEmpty()) { - m_activeDbWidget->setEntryViewState(m_listViewState); - } + m_searchViewState = m_activeDbWidget->entryViewState(); } m_blockUpdates = false; @@ -134,25 +134,19 @@ void DatabaseWidgetStateSync::blockUpdates() m_blockUpdates = true; } -void DatabaseWidgetStateSync::updateAll(bool forceSync) -{ - updateSplitterSizes(); - updateViewState(); - if (forceSync) { - sync(); - } -} - void DatabaseWidgetStateSync::updateSplitterSizes() { if (!m_blockUpdates) { m_splitterSizes = m_activeDbWidget->splitterSizes(); - m_syncTimer.start(); } } /** * Update entry view list/search view state + * + * NOTE: + * States of entry view 'Hide Usernames'/'Hide Passwords' settings are global, + * i.e. they are the same for both list and search mode */ void DatabaseWidgetStateSync::updateViewState() { @@ -166,7 +160,7 @@ void DatabaseWidgetStateSync::updateViewState() m_listViewState = m_activeDbWidget->entryViewState(); } - m_syncTimer.start(); + sync(); } QList DatabaseWidgetStateSync::variantToIntList(const QVariant& variant) diff --git a/src/gui/DatabaseWidgetStateSync.h b/src/gui/DatabaseWidgetStateSync.h index b9e53fdc6..8f8aef6dc 100644 --- a/src/gui/DatabaseWidgetStateSync.h +++ b/src/gui/DatabaseWidgetStateSync.h @@ -32,14 +32,13 @@ public: public slots: void setActive(DatabaseWidget* dbWidget); - void applySplitterSizes(); - void applyViewState(); + void restoreListView(); + void restoreSearchView(); private slots: void blockUpdates(); void updateSplitterSizes(); void updateViewState(); - void updateAll(bool forceSync = false); void sync(); private: @@ -49,8 +48,6 @@ private: QPointer m_activeDbWidget; bool m_blockUpdates; - QTimer m_syncTimer; - QHash> m_splitterSizes; QByteArray m_listViewState; diff --git a/src/gui/EditWidget.cpp b/src/gui/EditWidget.cpp index 1a79d9bad..92e221607 100644 --- a/src/gui/EditWidget.cpp +++ b/src/gui/EditWidget.cpp @@ -31,7 +31,6 @@ EditWidget::EditWidget(QWidget* parent) setModified(false); m_ui->messageWidget->setHidden(true); - m_ui->headerLabel->setHidden(true); QFont headerLabelFont = m_ui->headerLabel->font(); headerLabelFont.setBold(true); @@ -46,7 +45,9 @@ EditWidget::EditWidget(QWidget* parent) connect(m_ui->buttonBox, SIGNAL(clicked(QAbstractButton*)), SLOT(buttonClicked(QAbstractButton*))); } -EditWidget::~EditWidget() = default; +EditWidget::~EditWidget() +{ +} void EditWidget::addPage(const QString& labelText, const QIcon& icon, QWidget* widget) { @@ -71,25 +72,16 @@ void EditWidget::addPage(const QString& labelText, const QIcon& icon, QWidget* w m_ui->categoryList->addCategory(labelText, icon); } -bool EditWidget::hasPage(const QWidget* widget) const +bool EditWidget::hasPage(QWidget* widget) { - return pageIndex(widget) >= 0; -} - -int EditWidget::pageIndex(const QWidget* widget) const -{ - if (!widget) { - return -1; - } - for (int i = 0; i < m_ui->stackedWidget->count(); i++) { auto* scrollArea = qobject_cast(m_ui->stackedWidget->widget(i)); - if (scrollArea && (scrollArea == widget || scrollArea->widget() == widget)) { - return i; + if (scrollArea && scrollArea->widget() == widget) { + return true; } } - return -1; + return false; } void EditWidget::setPageHidden(QWidget* widget, bool hidden) @@ -104,19 +96,16 @@ void EditWidget::setPageHidden(QWidget* widget, bool hidden) } } - if (index == -1) { - return; + if (index != -1) { + m_ui->categoryList->setCategoryHidden(index, hidden); } - bool changed = m_ui->categoryList->isCategoryHidden(index) != hidden; - m_ui->categoryList->setCategoryHidden(index, hidden); - - if (changed && index == m_ui->stackedWidget->currentIndex()) { + if (index == m_ui->stackedWidget->currentIndex()) { int newIndex = m_ui->stackedWidget->currentIndex() - 1; if (newIndex < 0) { newIndex = m_ui->stackedWidget->count() - 1; } - m_ui->categoryList->setCurrentCategory(newIndex); + m_ui->stackedWidget->setCurrentIndex(newIndex); } } @@ -128,7 +117,6 @@ void EditWidget::setCurrentPage(int index) void EditWidget::setHeadline(const QString& text) { - m_ui->headerLabel->setHidden(text.isEmpty()); m_ui->headerLabel->setText(text); } diff --git a/src/gui/EditWidget.h b/src/gui/EditWidget.h index 4839d5877..c4997abae 100644 --- a/src/gui/EditWidget.h +++ b/src/gui/EditWidget.h @@ -39,11 +39,10 @@ class EditWidget : public DialogyWidget public: explicit EditWidget(QWidget* parent = nullptr); - ~EditWidget() override; + ~EditWidget(); void addPage(const QString& labelText, const QIcon& icon, QWidget* widget); - bool hasPage(const QWidget* widget) const; - int pageIndex(const QWidget* widget) const; + bool hasPage(QWidget* widget); void setPageHidden(QWidget* widget, bool hidden); void setCurrentPage(int index); void setHeadline(const QString& text); diff --git a/src/gui/EditWidgetIcons.cpp b/src/gui/EditWidgetIcons.cpp index f23d14ce7..25542730c 100644 --- a/src/gui/EditWidgetIcons.cpp +++ b/src/gui/EditWidgetIcons.cpp @@ -86,7 +86,9 @@ EditWidgetIcons::EditWidgetIcons(QWidget* parent) #endif } -EditWidgetIcons::~EditWidgetIcons() = default; +EditWidgetIcons::~EditWidgetIcons() +{ +} IconStruct EditWidgetIcons::state() { @@ -220,7 +222,7 @@ void EditWidgetIcons::iconReceived(const QString& url, const QImage& icon) QString message(tr("Unable to fetch favicon.")); if (!config()->get(Config::Security_IconDownloadFallback).toBool()) { message.append("\n").append( - tr("You can enable the DuckDuckGo website icon service under Application Settings -> Security")); + tr("You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security")); } emit messageEditEntry(message, MessageWidget::Error); return; diff --git a/src/gui/EditWidgetIcons.h b/src/gui/EditWidgetIcons.h index 3b40fae41..15e927d6c 100644 --- a/src/gui/EditWidgetIcons.h +++ b/src/gui/EditWidgetIcons.h @@ -62,7 +62,7 @@ class EditWidgetIcons : public QWidget public: explicit EditWidgetIcons(QWidget* parent = nullptr); - ~EditWidgetIcons() override; + ~EditWidgetIcons(); IconStruct state(); void reset(); diff --git a/src/gui/EditWidgetProperties.cpp b/src/gui/EditWidgetProperties.cpp index 4aea1510c..3e26352d3 100644 --- a/src/gui/EditWidgetProperties.cpp +++ b/src/gui/EditWidgetProperties.cpp @@ -41,7 +41,9 @@ EditWidgetProperties::EditWidgetProperties(QWidget* parent) connect(m_ui->removeCustomDataButton, SIGNAL(clicked()), SLOT(removeSelectedPluginData())); } -EditWidgetProperties::~EditWidgetProperties() = default; +EditWidgetProperties::~EditWidgetProperties() +{ +} void EditWidgetProperties::setFields(const TimeInfo& timeInfo, const QUuid& uuid) { diff --git a/src/gui/EditWidgetProperties.h b/src/gui/EditWidgetProperties.h index 679a14501..30a983e98 100644 --- a/src/gui/EditWidgetProperties.h +++ b/src/gui/EditWidgetProperties.h @@ -38,7 +38,7 @@ class EditWidgetProperties : public QWidget public: explicit EditWidgetProperties(QWidget* parent = nullptr); - ~EditWidgetProperties() override; + ~EditWidgetProperties(); void setFields(const TimeInfo& timeInfo, const QUuid& uuid); void setCustomData(CustomData* customData); diff --git a/src/gui/EditWidgetProperties.ui b/src/gui/EditWidgetProperties.ui index 510e4fffa..0caa9ef27 100644 --- a/src/gui/EditWidgetProperties.ui +++ b/src/gui/EditWidgetProperties.ui @@ -58,7 +58,7 @@
    - + Modified: diff --git a/src/gui/EntryPreviewWidget.cpp b/src/gui/EntryPreviewWidget.cpp index 02ab3622f..142ffec5b 100644 --- a/src/gui/EntryPreviewWidget.cpp +++ b/src/gui/EntryPreviewWidget.cpp @@ -1,6 +1,6 @@ /* - * Copyright (C) 2023 KeePassXC Team * 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 @@ -20,18 +20,16 @@ #include "ui_EntryPreviewWidget.h" #include "Application.h" -#include "core/Clock.h" #include "core/Config.h" -#include "core/Totp.h" +#include "gui/Clipboard.h" #include "gui/Font.h" #include "gui/Icons.h" +#include "totp/totp.h" #if defined(WITH_XC_KEESHARE) #include "keeshare/KeeShare.h" #include "keeshare/KeeShareSettings.h" #endif -#include -#include namespace { constexpr int GeneralTabIndex = 0; @@ -50,7 +48,7 @@ EntryPreviewWidget::EntryPreviewWidget(QWidget* parent) // Entry m_ui->entryTotpButton->setIcon(icons()->icon("totp")); - m_ui->entryCloseButton->setIcon(icons()->icon("arrow-collapse-down")); + m_ui->entryCloseButton->setIcon(icons()->icon("dialog-close")); m_ui->toggleUsernameButton->setIcon(icons()->onOffIcon("password-show", true)); m_ui->togglePasswordButton->setIcon(icons()->onOffIcon("password-show", true)); m_ui->toggleEntryNotesButton->setIcon(icons()->onOffIcon("password-show", true)); @@ -68,9 +66,8 @@ EntryPreviewWidget::EntryPreviewWidget(QWidget* parent) m_ui->entryNotesTextEdit->document()->setDocumentMargin(0); m_ui->groupNotesTextEdit->document()->setDocumentMargin(0); - m_ui->entryTotpLabel->installEventFilter(this); - - connect(m_ui->entryTotpButton, SIGNAL(toggled(bool)), m_ui->entryTotp, SLOT(setVisible(bool))); + connect(m_ui->entryTotpButton, SIGNAL(toggled(bool)), m_ui->entryTotpLabel, SLOT(setVisible(bool))); + connect(m_ui->entryTotpButton, SIGNAL(toggled(bool)), m_ui->entryTotpProgress, SLOT(setVisible(bool))); connect(m_ui->entryCloseButton, SIGNAL(clicked()), SLOT(hide())); connect(m_ui->toggleUsernameButton, SIGNAL(clicked(bool)), SLOT(setUsernameVisible(bool))); connect(m_ui->togglePasswordButton, SIGNAL(clicked(bool)), SLOT(setPasswordVisible(bool))); @@ -84,18 +81,16 @@ EntryPreviewWidget::EntryPreviewWidget(QWidget* parent) }); connect(&m_totpTimer, SIGNAL(timeout()), SLOT(updateTotpLabel())); - connect(m_ui->entryAttributesTable, &QTableWidget::itemDoubleClicked, this, [this](QTableWidgetItem* item) { + connect(m_ui->entryAttributesTable, &QTableWidget::itemDoubleClicked, this, [](QTableWidgetItem* item) { auto userData = item->data(Qt::UserRole); if (userData.isValid()) { - emit copyTextRequested(userData.toString()); + clipboard()->setText(userData.toString()); } }); connect(config(), &Config::changed, this, [this](Config::ConfigKey key) { if (key == Config::GUI_HidePreviewPanel) { setVisible(!config()->get(Config::GUI_HidePreviewPanel).toBool()); - } else if (key == Config::Security_HideTotpPreviewPanel) { - m_ui->entryTotpButton->setChecked(!config()->get(Config::Security_HideTotpPreviewPanel).toBool()); } refresh(); }); @@ -112,18 +107,8 @@ EntryPreviewWidget::EntryPreviewWidget(QWidget* parent) #endif } -EntryPreviewWidget::~EntryPreviewWidget() = default; - -bool EntryPreviewWidget::eventFilter(QObject* object, QEvent* event) +EntryPreviewWidget::~EntryPreviewWidget() { - if (object == m_ui->entryTotpLabel && event->type() == QEvent::MouseButtonDblClick) { - if (m_currentEntry && m_currentEntry->hasTotp()) { - emit copyTextRequested(m_currentEntry->totp()); - m_ui->entryTotpLabel->clearFocus(); - return true; - } - } - return QWidget::eventFilter(object, event); } void EntryPreviewWidget::clear() @@ -260,9 +245,9 @@ void EntryPreviewWidget::updateEntryTotp() m_totpTimer.start(1000); m_ui->entryTotpProgress->setMaximum(m_currentEntry->totpSettings()->step); updateTotpLabel(); - m_ui->entryTotp->setVisible(m_ui->entryTotpButton->isChecked()); } else { - m_ui->entryTotp->hide(); + m_ui->entryTotpLabel->hide(); + m_ui->entryTotpProgress->hide(); m_ui->entryTotpButton->setChecked(false); m_ui->entryTotpLabel->clear(); m_totpTimer.stop(); @@ -303,29 +288,23 @@ void EntryPreviewWidget::setPasswordVisible(bool state) html += "" + QString(c).toHtmlEscaped() + ""; } // clang-format on - m_ui->entryPasswordLabel->setTextFormat(Qt::RichText); - m_ui->entryPasswordLabel->setText(html); + m_ui->entryPasswordLabel->setHtml(html); } else { // No color - m_ui->entryPasswordLabel->setTextFormat(Qt::PlainText); - m_ui->entryPasswordLabel->setText(password); + m_ui->entryPasswordLabel->setPlainText(password); } } else if (password.isEmpty() && !config()->get(Config::Security_PasswordEmptyPlaceholder).toBool()) { - m_ui->entryPasswordLabel->setText(""); + m_ui->entryPasswordLabel->setPlainText(""); } else { - m_ui->entryPasswordLabel->setText(QString("\u25cf").repeated(6)); + m_ui->entryPasswordLabel->setPlainText(QString("\u25cf").repeated(6)); } - m_ui->passwordScrollArea->setMaximumHeight(m_ui->entryPasswordLabel->sizeHint().height() - + m_ui->passwordScrollArea->horizontalScrollBar()->sizeHint().height()); - m_ui->togglePasswordButton->setIcon(icons()->onOffIcon("password-show", state)); } void EntryPreviewWidget::setEntryNotesVisible(bool state) { - setNotesVisible( - m_ui->entryNotesTextEdit, m_currentEntry->resolveMultiplePlaceholders(m_currentEntry->notes()), state); + setNotesVisible(m_ui->entryNotesTextEdit, m_currentEntry->notes(), state); m_ui->toggleEntryNotesButton->setIcon(icons()->onOffIcon("password-show", state)); } @@ -390,7 +369,7 @@ void EntryPreviewWidget::updateEntryGeneralTab() m_ui->entryNotesTextEdit->setFont(Font::defaultFont()); } - m_ui->entryUrlLabel->setRawText(m_currentEntry->displayUrl().toHtmlEscaped()); + m_ui->entryUrlLabel->setRawText(m_currentEntry->displayUrl()); const QString url = m_currentEntry->url(); if (!url.isEmpty()) { // URL is well formed and can be opened in a browser @@ -403,7 +382,8 @@ void EntryPreviewWidget::updateEntryGeneralTab() } const TimeInfo entryTime = m_currentEntry->timeInfo(); - const QString expires = entryTime.expires() ? Clock::toString(entryTime.expiryTime().toLocalTime()) : tr("Never"); + const QString expires = + entryTime.expires() ? entryTime.expiryTime().toLocalTime().toString(Qt::DefaultLocaleShortDate) : tr("Never"); m_ui->entryExpirationLabel->setText(expires); m_ui->entryTagsList->tags(m_currentEntry->tagList()); m_ui->entryTagsList->setReadOnly(true); @@ -431,8 +411,6 @@ void EntryPreviewWidget::updateEntryAdvancedTab() m_ui->entryAttributesTable->item(i, 0)->setFont(font); m_ui->entryAttributesTable->item(i, 0)->setTextAlignment(Qt::AlignTop | Qt::AlignLeft); - auto value = m_currentEntry->resolveMultiplePlaceholders(attributes->value(key)); - if (attributes->isProtected(key)) { // only show the reveal button on protected attributes auto button = new QToolButton(); @@ -459,10 +437,10 @@ void EntryPreviewWidget::updateEntryAdvancedTab() m_ui->entryAttributesTable->setCellWidget(i, 1, button); m_ui->entryAttributesTable->setItem(i, 2, new QTableWidgetItem(QString("\u25cf").repeated(6))); } else { - m_ui->entryAttributesTable->setItem(i, 2, new QTableWidgetItem(value)); + m_ui->entryAttributesTable->setItem(i, 2, new QTableWidgetItem(attributes->value(key))); } - m_ui->entryAttributesTable->item(i, 2)->setData(Qt::UserRole, value); + m_ui->entryAttributesTable->item(i, 2)->setData(Qt::UserRole, attributes->value(key)); m_ui->entryAttributesTable->item(i, 2)->setToolTip(tr("Double click to copy value")); m_ui->entryAttributesTable->item(i, 2)->setTextAlignment(Qt::AlignTop | Qt::AlignLeft); @@ -492,9 +470,7 @@ void EntryPreviewWidget::updateEntryAutotypeTab() } m_ui->entryAutotypeTree->addTopLevelItems(items); - setTabEnabled(m_ui->entryTabWidget, - m_ui->entryAutotypeTab, - m_currentEntry->autoTypeEnabled() && m_currentEntry->groupAutoTypeEnabled()); + setTabEnabled(m_ui->entryTabWidget, m_ui->entryAutotypeTab, m_currentEntry->autoTypeEnabled()); } void EntryPreviewWidget::updateGroupHeaderLine() @@ -514,7 +490,8 @@ void EntryPreviewWidget::updateGroupGeneralTab() m_ui->groupAutotypeLabel->setText(autotypeText); const TimeInfo groupTime = m_currentGroup->timeInfo(); - const QString expiresText = groupTime.expires() ? Clock::toString(groupTime.expiryTime()) : tr("Never"); + const QString expiresText = + groupTime.expires() ? groupTime.expiryTime().toString(Qt::DefaultLocaleShortDate) : tr("Never"); m_ui->groupExpirationLabel->setText(expiresText); if (config()->get(Config::Security_HideNotes).toBool()) { @@ -547,23 +524,16 @@ void EntryPreviewWidget::updateGroupSharingTab() void EntryPreviewWidget::updateTotpLabel() { if (!m_locked && m_currentEntry && m_currentEntry->hasTotp()) { - bool isValid = false; - auto totpCode = m_currentEntry->totp(&isValid); - if (isValid) { - totpCode.insert(totpCode.size() / 2, " "); - - auto step = m_currentEntry->totpSettings()->step; - auto timeleft = step - (Clock::currentSecondsSinceEpoch() % step); - m_ui->entryTotpProgress->setValue(timeleft); - m_ui->entryTotpProgress->update(); - } else { - m_totpTimer.stop(); - } - - m_ui->entryTotpProgress->setVisible(isValid); + auto totpCode = m_currentEntry->totp(); + totpCode.insert(totpCode.size() / 2, " "); m_ui->entryTotpLabel->setText(totpCode); + + auto step = m_currentEntry->totpSettings()->step; + auto timeleft = step - (Clock::currentSecondsSinceEpoch() % step); + m_ui->entryTotpProgress->setValue(timeleft); + m_ui->entryTotpProgress->update(); } else { - m_ui->entryTotp->setVisible(false); + m_ui->entryTotpLabel->clear(); m_totpTimer.stop(); } } diff --git a/src/gui/EntryPreviewWidget.h b/src/gui/EntryPreviewWidget.h index b5c497a76..901b4a097 100644 --- a/src/gui/EntryPreviewWidget.h +++ b/src/gui/EntryPreviewWidget.h @@ -26,7 +26,6 @@ namespace Ui class EntryPreviewWidget; } -class QTabWidget; class QTextEdit; class EntryPreviewWidget : public QWidget @@ -46,10 +45,6 @@ public slots: signals: void entryUrlActivated(Entry* entry); - void copyTextRequested(const QString& text); - -protected: - bool eventFilter(QObject* object, QEvent* event) override; private slots: void updateEntryHeaderLine(); diff --git a/src/gui/EntryPreviewWidget.ui b/src/gui/EntryPreviewWidget.ui index e44218b3e..c251da3f5 100644 --- a/src/gui/EntryPreviewWidget.ui +++ b/src/gui/EntryPreviewWidget.ui @@ -100,7 +100,7 @@ Qt::ClickFocus - Qt::PlainText + Qt::AutoText Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse @@ -110,66 +110,44 @@
    - - - - 0 - 0 - + + + 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - 10 - true - - - - Double click to copy to clipboard - - - 1234567 - - - Qt::TextInteractionFlag::LinksAccessibleByMouse|Qt::TextInteractionFlag::TextSelectableByKeyboard|Qt::TextInteractionFlag::TextSelectableByMouse - - - - - - - - 57 - 4 - - - - 50 - - - false - - - - - + + + + + 10 + 75 + true + + + + 1234567 + + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + + + + + + + + 57 + 4 + + + + 50 + + + false + + + + @@ -182,9 +160,6 @@ true - - true - @@ -202,7 +177,7 @@ - 0 + 2 false @@ -220,7 +195,7 @@ - + 0 @@ -239,160 +214,6 @@ 6 - - - - - - - - - - 14 - 14 - - - - true - - - - - - - QFrame::NoFrame - - - QFrame::Plain - - - Qt::ScrollBarAlwaysOff - - - QAbstractScrollArea::AdjustToContents - - - true - - - - - 0 - 0 - 157 - 63 - - - - - 6 - - - 0 - - - 0 - - - 0 - - - - - Qt::ClickFocus - - - TextLabel - - - Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse - - - true - - - - - - - - - - - - - - 0 - 0 - - - - - 150 - 0 - - - - PointingHandCursor - - - Qt::ClickFocus - - - https://example.com - - - Qt::RichText - - - Qt::TextBrowserInteraction - - - true - - - - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 10 - 20 - - - - - - - - - 0 - 0 - - - - - 75 - true - - - - Qt::LeftToRight - - - Username - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - @@ -434,10 +255,171 @@ true - - 10.000000000000000 + + + + + + + + + 0 + 0 + + + + + 75 + true + + + + Password + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + + 75 + true + + + + URL + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + Qt::ClickFocus + + + expired + + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 10 + 20 + + + + + + + + + 0 + 0 + + + + + 75 + true + + + + Expiration + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + 6 + + + + + - + + + 14 + 14 + + + + true + + + + + + + + 150 + 0 + + + + + 16777215 + 30 + + + + Qt::ClickFocus + + + QFrame::NoFrame + + + QFrame::Plain + + + 0 + + + Qt::ScrollBarAlwaysOff + + + true + + + false + + + QTextEdit::NoWrap + + true @@ -466,6 +448,107 @@ + + + + Qt::ClickFocus + + + Tags list + + + + + + + + 0 + 0 + + + + + 150 + 0 + + + + PointingHandCursor + + + Qt::ClickFocus + + + https://example.com + + + Qt::TextBrowserInteraction + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 10 + 20 + + + + + + + + + 0 + 0 + + + + + 75 + true + + + + Qt::LeftToRight + + + Username + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + + 75 + true + + + + Notes + + + Qt::AlignRight|Qt::AlignTop|Qt::AlignTrailing + + + @@ -513,155 +596,10 @@ true - - true - - - - - Qt::ClickFocus - - - Tags list - - - true - - - - - - - - 0 - 0 - - - - Qt::ClickFocus - - - expired - - - Qt::PlainText - - - Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse - - - true - - - - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 10 - 20 - - - - - - - - - 0 - 0 - - - - - 75 - true - - - - Password - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 0 - 0 - - - - - 75 - true - - - - Notes - - - Qt::AlignRight|Qt::AlignTop|Qt::AlignTrailing - - - - - - - - 0 - 0 - - - - - 75 - true - - - - Expiration - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 0 - 0 - - - - - 75 - true - - - - URL - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - @@ -1149,9 +1087,6 @@ true - - true - diff --git a/src/gui/FileDialog.cpp b/src/gui/FileDialog.cpp index 96ee2b206..5129e2755 100644 --- a/src/gui/FileDialog.cpp +++ b/src/gui/FileDialog.cpp @@ -23,7 +23,9 @@ FileDialog* FileDialog::m_instance(nullptr); -FileDialog::FileDialog() = default; +FileDialog::FileDialog() +{ +} QString FileDialog::getOpenFileName(QWidget* parent, const QString& caption, diff --git a/src/gui/Font.cpp b/src/gui/Font.cpp index bb02b12ac..8bb54863b 100644 --- a/src/gui/Font.cpp +++ b/src/gui/Font.cpp @@ -28,21 +28,19 @@ QFont Font::defaultFont() QFont Font::fixedFont() { auto fixedFont = QFontDatabase::systemFont(QFontDatabase::FixedFont); - fixedFont.setPointSize(defaultFont().pointSize()); #ifdef Q_OS_WIN // try to use Consolas on Windows, because the default Courier New has too many similar characters - auto consolasFont = QFontDatabase().font("Consolas", fixedFont.styleName(), defaultFont().pointSize()); + auto consolasFont = QFontDatabase().font("Consolas", fixedFont.styleName(), fixedFont.pointSize()); if (consolasFont.family().contains("consolas", Qt::CaseInsensitive)) { fixedFont = consolasFont; - // Bump up the font size by one point to better match the default font on Windows - fixedFont.setPointSize(defaultFont().pointSize() + 1); } #endif #ifdef Q_OS_MACOS // Qt doesn't choose a monospace font correctly on macOS - fixedFont = QFontDatabase().font("Menlo", fixedFont.styleName(), defaultFont().pointSize()); - fixedFont.setPointSize(defaultFont().pointSize()); + fixedFont = QFontDatabase().font("Menlo", fixedFont.styleName(), fixedFont.pointSize()); #endif + + fixedFont.setPointSize(qApp->font().pointSize()); return fixedFont; } diff --git a/src/gui/Font.h b/src/gui/Font.h index 878dbb53d..d53f0c407 100644 --- a/src/gui/Font.h +++ b/src/gui/Font.h @@ -27,7 +27,9 @@ public: static QFont fixedFont(); private: - Font() = default; + Font() + { + } }; #endif // KEEPASSX_FONT_H diff --git a/src/gui/GuiTools.cpp b/src/gui/GuiTools.cpp index b2dfa63f3..30963b374 100644 --- a/src/gui/GuiTools.cpp +++ b/src/gui/GuiTools.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2024 KeePassXC Team + * Copyright (C) 2021 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 @@ -66,21 +66,6 @@ namespace GuiTools } } - bool confirmDeletePluginData(QWidget* parent, const QList& entries) - { - if (!parent || entries.isEmpty()) { - return false; - } - - auto answer = MessageBox::question(parent, - QObject::tr("Delete plugin data?"), - QObject::tr("Delete plugin data from Entry(s)?", "", entries.size()), - MessageBox::Delete | MessageBox::Cancel, - MessageBox::Cancel); - - return answer == MessageBox::Delete; - } - size_t deleteEntriesResolveReferences(QWidget* parent, const QList& entries, bool permanent) { if (!parent || entries.isEmpty()) { diff --git a/src/gui/GuiTools.h b/src/gui/GuiTools.h index c5e710896..814537382 100644 --- a/src/gui/GuiTools.h +++ b/src/gui/GuiTools.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2024 KeePassXC Team + * Copyright (C) 2021 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 @@ -26,7 +26,6 @@ class Entry; namespace GuiTools { bool confirmDeleteEntries(QWidget* parent, const QList& entries, bool permanent); - bool confirmDeletePluginData(QWidget* parent, const QList& entries); size_t deleteEntriesResolveReferences(QWidget* parent, const QList& entries, bool permanent); } // namespace GuiTools #endif // KEEPASSXC_GUITOOLS_H diff --git a/src/format/HtmlExporter.cpp b/src/gui/HtmlExporter.cpp similarity index 81% rename from src/format/HtmlExporter.cpp rename to src/gui/HtmlExporter.cpp index 933df4e35..654909463 100644 --- a/src/format/HtmlExporter.cpp +++ b/src/gui/HtmlExporter.cpp @@ -17,13 +17,28 @@ #include "HtmlExporter.h" +#include #include #include "core/Group.h" #include "core/Metadata.h" +#include "gui/Icons.h" namespace { + QString PixmapToHTML(const QPixmap& pixmap) + { + if (pixmap.isNull()) { + return ""; + } + + // Based on https://stackoverflow.com/a/6621278 + QByteArray a; + QBuffer buffer(&a); + pixmap.save(&buffer, "PNG"); + return QString(""; + } + QString formatEntry(const Entry& entry) { // Here we collect the table rows with this entry's data fields @@ -112,62 +127,15 @@ QString HtmlExporter::errorString() const return m_error; } -QString HtmlExporter::groupIconToHtml(const Group* /* group */) -{ - return ""; -} - -QString HtmlExporter::entryIconToHtml(const Entry* /* entry */) -{ - return ""; -} - bool HtmlExporter::exportDatabase(QIODevice* device, const QSharedPointer& db, bool sorted, bool ascending) -{ - if (device->write(exportHeader(db).toUtf8()) == -1) { - m_error = device->errorString(); - return false; - } - - if (db->rootGroup()) { - if (device->write(exportGroup(*db->rootGroup(), QString(), sorted, ascending).toUtf8()) == -1) { - m_error = device->errorString(); - return false; - } - } - - if (device->write(exportFooter().toUtf8()) == -1) { - m_error = device->errorString(); - return false; - } - - return true; -} - -QString HtmlExporter::exportDatabase(const QSharedPointer& db, bool sorted, bool ascending) -{ - QString response; - - response = exportHeader(db); - if (!response.isEmpty()) { - if (db->rootGroup()) { - response.append(exportGroup(*db->rootGroup(), QString(), sorted, ascending)); - } - response.append(exportFooter()); - } - - return response; -} - -QString HtmlExporter::exportHeader(const QSharedPointer& db) { const auto meta = db->metadata(); if (!meta) { m_error = "Internal error: metadata is NULL"; - return ""; + return false; } const auto header = QString("" @@ -181,6 +149,8 @@ QString HtmlExporter::exportHeader(const QSharedPointer& db) "{ font-family: \"Open Sans\", Helvetica, Arial, sans-serif; }" "h3 " "{ margin-left: 2em; }" + "table " + "{ margin-left: 1em; } " "caption " "{ text-align: left; font-weight: bold; font-size: 150%; border-bottom: .15em solid " "#4ca; margin-bottom: .5em;} " @@ -189,7 +159,7 @@ QString HtmlExporter::exportHeader(const QSharedPointer& db) "th " "{ min-width: 7em; width: 15%; } " ".username, .password, .url, .attr " - "{ font-size: larger; font-family: monospace; overflow-wrap: anywhere;} " + "{ font-size: larger; font-family: monospace; } " ".notes " "{ font-size: small; } " "" @@ -203,23 +173,33 @@ QString HtmlExporter::exportHeader(const QSharedPointer& db) + "

    " "

    " + db->filePath().toHtmlEscaped() + "

    "); - return header; -} - -QString HtmlExporter::exportFooter() -{ const auto footer = QString("" ""); - return footer; + + if (device->write(header.toUtf8()) == -1) { + m_error = device->errorString(); + return false; + } + + if (db->rootGroup()) { + if (!writeGroup(*device, *db->rootGroup(), QString(), sorted, ascending)) { + return false; + } + } + + if (device->write(footer.toUtf8()) == -1) { + m_error = device->errorString(); + return false; + } + + return true; } -QString HtmlExporter::exportGroup(const Group& group, QString path, bool sorted, bool ascending) +bool HtmlExporter::writeGroup(QIODevice& device, const Group& group, QString path, bool sorted, bool ascending) { - QString response = ""; - // Don't output the recycle bin if (&group == group.database()->metadata()->recycleBin()) { - return response; + return true; } if (!path.isEmpty()) { @@ -234,11 +214,8 @@ QString HtmlExporter::exportGroup(const Group& group, QString path, bool sorted, if (!group.entries().empty() || !notes.isEmpty()) { // Header line auto header = QString("

    "); - auto groupIcon = this->groupIconToHtml(&group); - if (!groupIcon.isEmpty()) { - header.append(groupIcon); - header.append(" "); - } + header.append(PixmapToHTML(Icons::groupIconPixmap(&group, IconSize::Medium))); + header.append(" "); header.append(path); header.append("

    \n"); @@ -249,8 +226,11 @@ QString HtmlExporter::exportGroup(const Group& group, QString path, bool sorted, header.append("

    "); } - // Append it to the output - response.append(header); + // Output it + if (device.write(header.toUtf8()) == -1) { + m_error = device.errorString(); + return false; + } } // Begin the table for the entries in this group @@ -264,7 +244,7 @@ QString HtmlExporter::exportGroup(const Group& group, QString path, bool sorted, }); } - // Append to the output the entries in this group + // Output the entries in this group for (const auto* entry : entries) { auto formatted_entry = formatEntry(*entry); @@ -274,10 +254,7 @@ QString HtmlExporter::exportGroup(const Group& group, QString path, bool sorted, // Output it into our table. First the left side with // icon and entry title ... table += ""; - auto entryIcon = this->entryIconToHtml(entry); - if (!entryIcon.isEmpty()) { - table += "" + entryIcon + ""; - } + table += "" + PixmapToHTML(Icons::entryIconPixmap(entry, IconSize::Medium)) + ""; auto caption = "" + entry->title().toHtmlEscaped() + ""; // ... then the right side with the data fields @@ -286,9 +263,12 @@ QString HtmlExporter::exportGroup(const Group& group, QString path, bool sorted, table += ""; } - // Append the complete table of this group to the output + // Output the complete table of this group table.append("\n"); - response.append(table); + if (device.write(table.toUtf8()) == -1) { + m_error = device.errorString(); + return false; + } auto children = group.children(); if (sorted) { @@ -298,12 +278,12 @@ QString HtmlExporter::exportGroup(const Group& group, QString path, bool sorted, }); } - // Recursively append to the output the child groups + // Recursively output the child groups for (const auto* child : children) { - if (child) { - response.append(exportGroup(*child, path, sorted, ascending)); + if (child && !writeGroup(device, *child, path, sorted, ascending)) { + return false; } } - return response; + return true; } diff --git a/src/format/HtmlExporter.h b/src/gui/HtmlExporter.h similarity index 73% rename from src/format/HtmlExporter.h rename to src/gui/HtmlExporter.h index 0fd2612c7..1ee9b4448 100644 --- a/src/format/HtmlExporter.h +++ b/src/gui/HtmlExporter.h @@ -21,8 +21,6 @@ #include #include -#include "core/Group.h" - class Database; class Group; class QIODevice; @@ -34,23 +32,18 @@ public: const QSharedPointer& db, bool sorted = true, bool ascending = true); + QString errorString() const; + +private: bool exportDatabase(QIODevice* device, const QSharedPointer& db, bool sorted = true, bool ascending = true); - QString exportDatabase(const QSharedPointer& db, bool sorted = true, bool ascending = true); - QString errorString() const; - - virtual ~HtmlExporter() = default; - -protected: - virtual QString groupIconToHtml(const Group* group); - virtual QString entryIconToHtml(const Entry* entry); - -private: - QString exportGroup(const Group& group, QString path = QString(), bool sorted = true, bool ascending = true); - QString exportHeader(const QSharedPointer& db); - QString exportFooter(); + bool writeGroup(QIODevice& device, + const Group& group, + QString path = QString(), + bool sorted = true, + bool ascending = true); QString m_error; }; diff --git a/src/gui/HtmlGuiExporter.cpp b/src/gui/HtmlGuiExporter.cpp deleted file mode 100644 index 75175e3f0..000000000 --- a/src/gui/HtmlGuiExporter.cpp +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright (C) 2019 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 "HtmlGuiExporter.h" - -#include - -#include "gui/Icons.h" - -namespace -{ - QString PixmapToHTML(const QPixmap& pixmap) - { - if (pixmap.isNull()) { - return ""; - } - - // Based on https://stackoverflow.com/a/6621278 - QByteArray a; - QBuffer buffer(&a); - pixmap.save(&buffer, "PNG"); - return QString(""; - } -} // namespace - -QString HtmlGuiExporter::groupIconToHtml(const Group* group) -{ - return PixmapToHTML(Icons::groupIconPixmap(group, IconSize::Medium)); -} - -QString HtmlGuiExporter::entryIconToHtml(const Entry* entry) -{ - return PixmapToHTML(Icons::entryIconPixmap(entry, IconSize::Medium)); -} diff --git a/src/gui/IconDownloader.cpp b/src/gui/IconDownloader.cpp index b07856862..7e3fff0ae 100644 --- a/src/gui/IconDownloader.cpp +++ b/src/gui/IconDownloader.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2023 KeePassXC Team + * Copyright (C) 2019 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,8 +17,7 @@ #include "IconDownloader.h" #include "core/Config.h" -#include "gui/UrlTools.h" -#include "networking/NetworkManager.h" +#include "core/NetworkManager.h" #include #include @@ -41,6 +40,37 @@ IconDownloader::~IconDownloader() abortDownload(); } +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(const QUrl& url) + { + QString fqdn = url.host(); + fqdn.truncate(fqdn.length() - url.topLevelDomain().length()); + QStringList parts = fqdn.split('.'); + QString newdom = parts.takeLast() + url.topLevelDomain(); + return newdom; + } + + QUrl convertVariantToUrl(const QVariant& var) + { + QUrl url; + if (var.canConvert()) { + url = var.toUrl(); + } + return url; + } + + QUrl getRedirectTarget(QNetworkReply* reply) + { + QVariant var = reply->attribute(QNetworkRequest::RedirectionTargetAttribute); + QUrl url = convertVariantToUrl(var); + return url; + } +} // namespace + void IconDownloader::setUrl(const QString& entryUrl) { m_url = entryUrl; @@ -75,16 +105,16 @@ void IconDownloader::setUrl(const QString& entryUrl) // 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 hostAddresses = QHostInfo::fromName(fullyQualifiedDomain).addresses(); + QList hostAddressess = QHostInfo::fromName(fullyQualifiedDomain).addresses(); hostIsIp = - std::any_of(hostAddresses.begin(), hostAddresses.end(), [&fullyQualifiedDomain](const QHostAddress& addr) { + std::any_of(hostAddressess.begin(), hostAddressess.end(), [&fullyQualifiedDomain](const QHostAddress& addr) { return addr.toString() == fullyQualifiedDomain; }); // Determine the second-level domain, if available QString secondLevelDomain; if (!hostIsIp) { - secondLevelDomain = urlTools()->getBaseDomainFromUrl(url.toString()); + secondLevelDomain = getSecondLevelDomain(url); } // Start with the "fallback" url (if enabled) to try to get the best favicon @@ -172,7 +202,7 @@ void IconDownloader::fetchFinished() QString url = m_url; bool error = (m_reply->error() != QNetworkReply::NoError); - QUrl redirectTarget = urlTools()->getRedirectTarget(m_reply); + QUrl redirectTarget = getRedirectTarget(m_reply); m_reply->deleteLater(); m_reply = nullptr; diff --git a/src/gui/IconDownloader.h b/src/gui/IconDownloader.h index 8d32f787f..54d9295e8 100644 --- a/src/gui/IconDownloader.h +++ b/src/gui/IconDownloader.h @@ -60,4 +60,4 @@ private: friend class TestIconDownloader; }; -#endif // KEEPASSXC_ICONDOWNLOADER_H +#endif // KEEPASSXC_ICONDOWNLOADER_H \ No newline at end of file diff --git a/src/gui/IconDownloaderDialog.cpp b/src/gui/IconDownloaderDialog.cpp index 72e96785b..929146bd3 100644 --- a/src/gui/IconDownloaderDialog.cpp +++ b/src/gui/IconDownloaderDialog.cpp @@ -38,6 +38,7 @@ IconDownloaderDialog::IconDownloaderDialog(QWidget* parent) , m_ui(new Ui::IconDownloaderDialog()) , m_dataModel(new QStandardItemModel(this)) { + setWindowFlags(Qt::Window); setAttribute(Qt::WA_DeleteOnClose); m_ui->setupUi(this); diff --git a/src/gui/IconModels.cpp b/src/gui/IconModels.cpp index 1d1eefb42..ab435aedc 100644 --- a/src/gui/IconModels.cpp +++ b/src/gui/IconModels.cpp @@ -38,7 +38,7 @@ int DefaultIconModel::rowCount(const QModelIndex& parent) const QVariant DefaultIconModel::data(const QModelIndex& index, int role) const { if (!index.isValid()) { - return {}; + return QVariant(); } Q_ASSERT(index.row() < databaseIcons()->count()); @@ -47,7 +47,7 @@ QVariant DefaultIconModel::data(const QModelIndex& index, int role) const return databaseIcons()->icon(index.row(), IconSize::Medium); } - return {}; + return QVariant(); } CustomIconModel::CustomIconModel(QObject* parent) @@ -78,7 +78,7 @@ int CustomIconModel::rowCount(const QModelIndex& parent) const QVariant CustomIconModel::data(const QModelIndex& index, int role) const { if (!index.isValid()) { - return {}; + return QVariant(); } if (role == Qt::DecorationRole) { @@ -86,7 +86,7 @@ QVariant CustomIconModel::data(const QModelIndex& index, int role) const return m_icons.value(uuid); } - return {}; + return QVariant(); } QUuid CustomIconModel::uuidFromIndex(const QModelIndex& index) const diff --git a/src/gui/Icons.cpp b/src/gui/Icons.cpp index 7cccf406a..4f4742071 100644 --- a/src/gui/Icons.cpp +++ b/src/gui/Icons.cpp @@ -18,7 +18,6 @@ #include "Icons.h" -#include #include #include #include @@ -26,7 +25,6 @@ #include "config-keepassx.h" #include "core/Config.h" -#include "core/Database.h" #include "gui/DatabaseIcons.h" #include "gui/MainWindow.h" #include "gui/osutils/OSUtils.h" @@ -50,14 +48,16 @@ private: Icons* Icons::m_instance(nullptr); -Icons::Icons() = default; +Icons::Icons() +{ +} QString Icons::applicationIconName() { #ifdef KEEPASSXC_DIST_FLATPAK - return "org.keepassxc.KeePassXC"; + return QString("org.keepassxc.KeePassXC"); #else - return "keepassxc"; + return QString("keepassxc"); #endif } @@ -79,36 +79,50 @@ QString Icons::trayIconAppearance() const return iconAppearance; } -QIcon Icons::trayIcon(bool unlocked) +QIcon Icons::trayIcon(QString style) { - QString suffix; - if (!unlocked) { - suffix = "-locked"; + if (style == "unlocked") { + style.clear(); + } + if (!style.isEmpty()) { + style = "-" + style; } - auto iconAppearance = trayIconAppearance(); - if (!iconAppearance.startsWith("monochrome")) { - return icon(QString("%1%2").arg(applicationIconName(), suffix), false); + auto iconApperance = trayIconAppearance(); + if (!iconApperance.startsWith("monochrome")) { + return icon(QString("%1%2").arg(applicationIconName(), style), false); } QIcon i; #if defined(Q_OS_MACOS) || defined(Q_OS_WIN) if (osUtils->isStatusBarDark()) { - i = icon(QString("keepassxc-monochrome-light%1").arg(suffix), false); + i = icon(QString("keepassxc-monochrome-light%1").arg(style), false); } else { - i = icon(QString("keepassxc-monochrome-dark%1").arg(suffix), false); + i = icon(QString("keepassxc-monochrome-dark%1").arg(style), false); } #else - i = icon(QString("%1-%2%3").arg(applicationIconName(), iconAppearance, suffix), false); + i = icon(QString("%1-%2%3").arg(applicationIconName(), iconApperance, style), false); #endif +#if QT_VERSION >= QT_VERSION_CHECK(5, 6, 0) // Set as mask to allow the operating system to recolour the tray icon. This may look weird // if we failed to detect the status bar background colour correctly, but it is certainly // better than a barely visible icon and even if we did guess correctly, it allows for better // integration should the system's preferred colours not be 100% black or white. i.setIsMask(true); +#endif return i; } +QIcon Icons::trayIconLocked() +{ + return trayIcon("locked"); +} + +QIcon Icons::trayIconUnlocked() +{ + return trayIcon("unlocked"); +} + AdaptiveIconEngine::AdaptiveIconEngine(QIcon baseIcon, QColor overrideColor) : QIconEngine() , m_baseIcon(std::move(baseIcon)) @@ -119,7 +133,11 @@ AdaptiveIconEngine::AdaptiveIconEngine(QIcon baseIcon, QColor overrideColor) void AdaptiveIconEngine::paint(QPainter* painter, const QRect& rect, QIcon::Mode mode, QIcon::State state) { // Temporary image canvas to ensure that the background is transparent and alpha blending works. +#if QT_VERSION >= QT_VERSION_CHECK(5, 6, 0) auto scale = painter->device()->devicePixelRatioF(); +#else + auto scale = painter->device()->devicePixelRatio(); +#endif QImage img(rect.size() * scale, QImage::Format_ARGB32_Premultiplied); img.fill(0); QPainter p(&img); @@ -185,7 +203,9 @@ QIcon Icons::icon(const QString& name, bool recolor, const QColor& overrideColor icon = QIcon::fromTheme(name); if (recolor) { icon = QIcon(new AdaptiveIconEngine(icon, overrideColor)); +#if QT_VERSION >= QT_VERSION_CHECK(5, 6, 0) icon.setIsMask(true); +#endif } m_iconCache.insert(cacheName, icon); diff --git a/src/gui/Icons.h b/src/gui/Icons.h index 15b3b1be9..db342ae19 100644 --- a/src/gui/Icons.h +++ b/src/gui/Icons.h @@ -29,7 +29,9 @@ class Icons public: QString applicationIconName(); QIcon applicationIcon(); - QIcon trayIcon(bool unlocked = true); + QIcon trayIcon(QString style = "unlocked"); + QIcon trayIconLocked(); + QIcon trayIconUnlocked(); QString trayIconAppearance() const; QIcon icon(const QString& name, bool recolor = true, const QColor& overrideColor = QColor::Invalid); QIcon onOffIcon(const QString& name, bool on, bool recolor = true); diff --git a/src/gui/KMessageWidget.cpp b/src/gui/KMessageWidget.cpp index 6b402f313..a7e723692 100644 --- a/src/gui/KMessageWidget.cpp +++ b/src/gui/KMessageWidget.cpp @@ -88,7 +88,7 @@ void KMessageWidgetPrivate::init(KMessageWidget *q_ptr) QObject::connect(textLabel, SIGNAL(linkActivated(QString)), q, SIGNAL(linkActivated(QString))); QObject::connect(textLabel, SIGNAL(linkHovered(QString)), q, SIGNAL(linkHovered(QString))); - auto closeAction = new QAction(q); + QAction *closeAction = new QAction(q); closeAction->setText(KMessageWidget::tr("&Close")); closeAction->setToolTip(KMessageWidget::tr("Close message")); closeAction->setIcon(icons()->icon("message-close")); @@ -114,7 +114,7 @@ void KMessageWidgetPrivate::createLayout() const auto actions = q->actions(); for (QAction *action: actions) { - auto button = new QToolButton(content); + QToolButton *button = new QToolButton(content); button->setDefaultAction(action); button->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); buttons.append(button); @@ -126,12 +126,12 @@ void KMessageWidgetPrivate::createLayout() closeButton->setAutoRaise(buttons.isEmpty()); if (wordWrap) { - auto layout = new QGridLayout(content); + QGridLayout *layout = new QGridLayout(content); // Set alignment to make sure icon does not move down if text wraps layout->addWidget(iconLabel, 0, 0, 1, 1, Qt::AlignHCenter | Qt::AlignTop); layout->addWidget(textLabel, 0, 1); - auto buttonLayout = new QHBoxLayout; + QHBoxLayout *buttonLayout = new QHBoxLayout; buttonLayout->addStretch(); for (QToolButton* button: asConst(buttons)) { // For some reason, calling show() is necessary if wordwrap is true, @@ -143,7 +143,7 @@ void KMessageWidgetPrivate::createLayout() buttonLayout->addWidget(closeButton); layout->addItem(buttonLayout, 1, 0, 1, 2); } else { - auto layout = new QHBoxLayout(content); + QHBoxLayout *layout = new QHBoxLayout(content); layout->addWidget(iconLabel); layout->addWidget(textLabel); @@ -280,11 +280,7 @@ void KMessageWidget::setMessageType(KMessageWidget::MessageType type) auto closeButtonPixmap = d->closeButtonPixmap; QPainter painter; painter.begin(&closeButtonPixmap); -#if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0) - painter.setRenderHints(QPainter::Antialiasing); -#else painter.setRenderHints(QPainter::HighQualityAntialiasing); -#endif painter.setCompositionMode(QPainter::CompositionMode_SourceIn); painter.fillRect(QRect(0, 0, 16, 16), fg); painter.end(); diff --git a/src/gui/KMessageWidget.h b/src/gui/KMessageWidget.h index d97089ac9..d47e78f9c 100644 --- a/src/gui/KMessageWidget.h +++ b/src/gui/KMessageWidget.h @@ -119,19 +119,19 @@ public: /** * Constructs a KMessageWidget with the specified @p parent. */ - explicit KMessageWidget(QWidget* parent = nullptr); - + explicit KMessageWidget(QWidget *parent = 0); + /** * Constructs a KMessageWidget with the specified @p parent and * contents @p text. */ - explicit KMessageWidget(const QString& text, QWidget* parent = nullptr); - + explicit KMessageWidget(const QString &text, QWidget *parent = 0); + /** * Destructor. */ - ~KMessageWidget() override; - + ~KMessageWidget(); + /** * Get the text of this message widget. * @see setText() diff --git a/src/gui/KeePass1OpenWidget.cpp b/src/gui/KeePass1OpenWidget.cpp new file mode 100644 index 000000000..9a485a7f1 --- /dev/null +++ b/src/gui/KeePass1OpenWidget.cpp @@ -0,0 +1,63 @@ +/* + * 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 "KeePass1OpenWidget.h" +#include "ui_DatabaseOpenWidget.h" + +#include + +#include "core/Database.h" +#include "core/Metadata.h" +#include "format/KeePass1Reader.h" + +KeePass1OpenWidget::KeePass1OpenWidget(QWidget* parent) + : DatabaseOpenWidget(parent) +{ + m_ui->labelHeadline->setText(tr("Import KeePass1 Database")); +} + +void KeePass1OpenWidget::openDatabase() +{ + KeePass1Reader reader; + + QString password; + QString keyFileName = m_ui->keyFileLineEdit->text(); + + if (!m_ui->editPassword->text().isEmpty() || m_retryUnlockWithEmptyPassword) { + password = m_ui->editPassword->text(); + } + + 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; + } + + 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 dialogFinished(true); + clearForms(); + } else { + m_ui->messageWidget->showMessage(tr("Unable to open the database.").append("\n").append(reader.errorString()), + MessageWidget::Error); + } +} diff --git a/tests/gui/attachments/TestTextAttachmentsPreviewWidget.h b/src/gui/KeePass1OpenWidget.h similarity index 64% rename from tests/gui/attachments/TestTextAttachmentsPreviewWidget.h rename to src/gui/KeePass1OpenWidget.h index 8e34a8d9b..203b78632 100644 --- a/tests/gui/attachments/TestTextAttachmentsPreviewWidget.h +++ b/src/gui/KeePass1OpenWidget.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2025 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 @@ -15,22 +15,20 @@ * along with this program. If not, see . */ -#pragma once +#ifndef KEEPASSX_KEEPASS1OPENWIDGET_H +#define KEEPASSX_KEEPASS1OPENWIDGET_H -#include +#include "gui/DatabaseOpenWidget.h" -#include -#include - -class TestTextAttachmentsPreviewWidget : public QObject +class KeePass1OpenWidget : public DatabaseOpenWidget { Q_OBJECT -private slots: - void initTestCase(); +public: + explicit KeePass1OpenWidget(QWidget* parent = nullptr); - void testDetectMimeByFile(); - -private: - QScopedPointer m_widget{}; +protected: + void openDatabase() override; }; + +#endif // KEEPASSX_KEEPASS1OPENWIDGET_H diff --git a/src/gui/MainWindow.cpp b/src/gui/MainWindow.cpp index 3abb8f12f..bb82b184b 100644 --- a/src/gui/MainWindow.cpp +++ b/src/gui/MainWindow.cpp @@ -1,6 +1,6 @@ /* - * Copyright (C) 2024 KeePassXC Team * Copyright (C) 2010 Felix Geyer + * Copyright (C) 2020 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 @@ -38,19 +38,17 @@ #include "autotype/AutoType.h" #include "core/InactivityTimer.h" #include "core/Resources.h" +#include "core/Tools.h" #include "gui/AboutDialog.h" -#include "gui/ActionCollection.h" #include "gui/Icons.h" #include "gui/MessageBox.h" #include "gui/SearchWidget.h" -#include "gui/ShortcutSettingsPage.h" #include "gui/entry/EntryView.h" #include "gui/osutils/OSUtils.h" -#include "gui/remote/RemoteSettings.h" #ifdef WITH_XC_UPDATECHECK #include "gui/UpdateCheckDialog.h" -#include "networking/UpdateChecker.h" +#include "updatecheck/UpdateChecker.h" #endif #ifdef WITH_XC_SSHAGENT @@ -72,6 +70,7 @@ #ifdef WITH_XC_BROWSER #include "browser/BrowserService.h" +#include "browser/BrowserSettingsPage.h" #endif #if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) && !defined(QT_NO_DBUS) @@ -127,8 +126,6 @@ MainWindow::MainWindow() m_entryContextMenu = new QMenu(this); m_entryContextMenu->setSeparatorsCollapsible(true); - m_entryContextMenu->addAction(m_ui->actionEntryRestore); - m_entryContextMenu->addSeparator(); m_entryContextMenu->addAction(m_ui->actionEntryCopyUsername); m_entryContextMenu->addAction(m_ui->actionEntryCopyPassword); m_entryContextMenu->addAction(m_ui->actionEntryCopyURL); @@ -138,13 +135,7 @@ MainWindow::MainWindow() m_entryContextMenu->addSeparator(); m_entryContextMenu->addAction(m_ui->actionEntryAutoType); m_entryContextMenu->addSeparator(); -#ifdef WITH_XC_BROWSER_PASSKEYS - m_entryContextMenu->addAction(m_ui->actionEntryImportPasskey); - m_entryContextMenu->addAction(m_ui->actionEntryRemovePasskey); - m_entryContextMenu->addSeparator(); -#endif m_entryContextMenu->addAction(m_ui->actionEntryEdit); - m_entryContextMenu->addAction(m_ui->actionEntryExpire); m_entryContextMenu->addAction(m_ui->actionEntryClone); m_entryContextMenu->addAction(m_ui->actionEntryDelete); m_entryContextMenu->addAction(m_ui->actionEntryNew); @@ -157,12 +148,12 @@ MainWindow::MainWindow() m_entryContextMenu->addSeparator(); m_entryContextMenu->addAction(m_ui->actionEntryAddToAgent); m_entryContextMenu->addAction(m_ui->actionEntryRemoveFromAgent); + m_entryContextMenu->addSeparator(); + m_entryContextMenu->addAction(m_ui->actionEntryRestore); m_entryNewContextMenu = new QMenu(this); m_entryNewContextMenu->addAction(m_ui->actionEntryNew); - connect(m_ui->menuRemoteSync, &QMenu::aboutToShow, this, &MainWindow::updateRemoteSyncMenuEntries); - // Build Entry Level Auto-Type menu auto autotypeMenu = new QMenu({}, this); autotypeMenu->addAction(m_ui->actionEntryAutoTypeSequence); @@ -193,17 +184,9 @@ MainWindow::MainWindow() connect(m_ui->tabWidget, &DatabaseTabWidget::databaseLocked, this, &MainWindow::databaseLocked); connect(m_ui->tabWidget, &DatabaseTabWidget::databaseUnlocked, this, &MainWindow::databaseUnlocked); connect(m_ui->tabWidget, &DatabaseTabWidget::activeDatabaseChanged, this, &MainWindow::activeDatabaseChanged); - connect(m_ui->tabWidget, - &DatabaseTabWidget::databaseUnlockDialogFinished, - this, - &MainWindow::databaseUnlockDialogFinished); - - initViewMenu(); - initActionCollection(); - - m_ui->settingsWidget->addSettingsPage(new ShortcutSettingsPage()); #ifdef WITH_XC_BROWSER + m_ui->settingsWidget->addSettingsPage(new BrowserSettingsPage()); connect( browserService(), &BrowserService::requestUnlock, m_ui->tabWidget, &DatabaseTabWidget::performBrowserUnlock); #endif @@ -211,12 +194,11 @@ MainWindow::MainWindow() #ifdef WITH_XC_SSHAGENT connect(sshAgent(), SIGNAL(error(QString)), this, SLOT(showErrorMessage(QString))); connect(sshAgent(), SIGNAL(enabledChanged(bool)), this, SLOT(agentEnabled(bool))); - connect(m_ui->actionClearSSHAgent, SIGNAL(triggered()), SLOT(clearSSHAgent())); m_ui->settingsWidget->addSettingsPage(new AgentSettingsPage()); -#else - agentEnabled(false); #endif + initViewMenu(); + #if defined(WITH_XC_KEESHARE) KeeShare::init(this); m_ui->settingsWidget->addSettingsPage(new SettingsPageKeeShare(m_ui->tabWidget)); @@ -273,14 +255,53 @@ MainWindow::MainWindow() m_ui->actionAllowScreenCapture->setVisible(osUtils->canPreventScreenCapture()); m_inactivityTimer = new InactivityTimer(this); - connect(m_inactivityTimer, SIGNAL(inactivityDetected()), this, SLOT(lockAllDatabases())); + connect(m_inactivityTimer, SIGNAL(inactivityDetected()), this, SLOT(lockDatabasesAfterInactivity())); 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, Qt::CTRL + Qt::SHIFT + Qt::Key_S); + setShortcut(m_ui->actionDatabaseClose, QKeySequence::Close, Qt::CTRL + Qt::Key_W); + m_ui->actionDatabaseSettings->setShortcut(Qt::CTRL + Qt::SHIFT + Qt::Key_Comma); + m_ui->actionReports->setShortcut(Qt::CTRL + Qt::SHIFT + Qt::Key_R); + setShortcut(m_ui->actionSettings, QKeySequence::Preferences, Qt::CTRL + Qt::Key_Comma); + m_ui->actionLockDatabase->setShortcut(Qt::CTRL + Qt::Key_L); + m_ui->actionLockAllDatabases->setShortcut(Qt::CTRL + Qt::SHIFT + Qt::Key_L); + setShortcut(m_ui->actionQuit, QKeySequence::Quit, Qt::CTRL + Qt::Key_Q); + setShortcut(m_ui->actionEntryNew, QKeySequence::New, Qt::CTRL + Qt::Key_N); + m_ui->actionEntryEdit->setShortcut(Qt::CTRL + Qt::Key_E); + m_ui->actionEntryDelete->setShortcut(Qt::CTRL + Qt::Key_D); + m_ui->actionEntryDelete->setShortcut(Qt::Key_Delete); + m_ui->actionEntryClone->setShortcut(Qt::CTRL + Qt::Key_K); + m_ui->actionEntryTotp->setShortcut(Qt::CTRL + Qt::SHIFT + Qt::Key_T); + m_ui->actionEntryDownloadIcon->setShortcut(Qt::CTRL + Qt::SHIFT + Qt::Key_D); + m_ui->actionEntryCopyTotp->setShortcut(Qt::CTRL + Qt::Key_T); + m_ui->actionEntryCopyPasswordTotp->setShortcut(Qt::CTRL + Qt::Key_Y); + m_ui->actionEntryMoveUp->setShortcut(Qt::CTRL + Qt::ALT + Qt::Key_Up); + m_ui->actionEntryMoveDown->setShortcut(Qt::CTRL + Qt::ALT + Qt::Key_Down); + m_ui->actionEntryCopyUsername->setShortcut(Qt::CTRL + Qt::Key_B); + m_ui->actionEntryCopyPassword->setShortcut(Qt::CTRL + Qt::Key_C); + m_ui->actionEntryCopyTitle->setShortcut(Qt::CTRL + Qt::Key_I); + m_ui->actionEntryAutoTypeSequence->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); + m_ui->actionEntryRestore->setShortcut(Qt::CTRL + Qt::Key_R); + + // Prevent conflicts with global Mac shortcuts (force Control on all platforms) +#ifdef Q_OS_MAC + auto modifier = Qt::META; +#else + auto modifier = Qt::CTRL; +#endif + m_ui->actionEntryAddToAgent->setShortcut(modifier + Qt::Key_H); + m_ui->actionEntryRemoveFromAgent->setShortcut(modifier + Qt::SHIFT + Qt::Key_H); + +#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->actionEntryExpire->setShortcutVisibleInContextMenu(true); m_ui->actionEntryDelete->setShortcutVisibleInContextMenu(true); m_ui->actionEntryRestore->setShortcutVisibleInContextMenu(true); m_ui->actionEntryClone->setShortcutVisibleInContextMenu(true); @@ -298,6 +319,7 @@ MainWindow::MainWindow() m_ui->actionEntryCopyTitle->setShortcutVisibleInContextMenu(true); m_ui->actionEntryAddToAgent->setShortcutVisibleInContextMenu(true); m_ui->actionEntryRemoveFromAgent->setShortcutVisibleInContextMenu(true); +#endif connect(m_ui->menuEntries, SIGNAL(aboutToShow()), SLOT(obtainContextFocusLock())); connect(m_ui->menuEntries, SIGNAL(aboutToHide()), SLOT(releaseContextFocusLock())); @@ -355,29 +377,19 @@ MainWindow::MainWindow() m_ui->actionDatabaseSaveBackup->setIcon(icons()->icon("document-save-copy")); m_ui->actionDatabaseClose->setIcon(icons()->icon("document-close")); m_ui->actionReports->setIcon(icons()->icon("reports")); - m_ui->actionDatabaseSettings->setIcon(icons()->icon("database-settings")); + m_ui->actionDatabaseSettings->setIcon(icons()->icon("document-edit")); m_ui->actionDatabaseSecurity->setIcon(icons()->icon("database-change-key")); - m_ui->actionPasskeys->setIcon(icons()->icon("passkey")); - m_ui->actionImportPasskey->setIcon(icons()->icon("document-import")); m_ui->actionLockDatabase->setIcon(icons()->icon("database-lock")); m_ui->actionLockDatabaseToolbar->setIcon(icons()->icon("database-lock")); m_ui->actionLockAllDatabases->setIcon(icons()->icon("database-lock-all")); m_ui->actionQuit->setIcon(icons()->icon("application-exit")); m_ui->actionDatabaseMerge->setIcon(icons()->icon("database-merge")); - m_ui->menuRemoteSync->setIcon(icons()->icon("remote-sync")); - m_ui->actionImport->setIcon(icons()->icon("document-import")); + m_ui->menuImport->setIcon(icons()->icon("document-import")); m_ui->menuExport->setIcon(icons()->icon("document-export")); -#ifndef WITH_XC_BROWSER_PASSKEYS - m_ui->actionPasskeys->setVisible(false); - m_ui->actionImportPasskey->setVisible(false); - m_ui->actionEntryImportPasskey->setVisible(false); -#endif - m_ui->actionEntryNew->setIcon(icons()->icon("entry-new")); m_ui->actionEntryClone->setIcon(icons()->icon("entry-clone")); m_ui->actionEntryEdit->setIcon(icons()->icon("entry-edit")); - m_ui->actionEntryExpire->setIcon(icons()->icon("entry-expire")); m_ui->actionEntryDelete->setIcon(icons()->icon("entry-delete")); m_ui->actionEntryRestore->setIcon(icons()->icon("entry-restore")); m_ui->actionEntryAutoType->setIcon(icons()->icon("auto-type")); @@ -399,7 +411,6 @@ MainWindow::MainWindow() m_ui->actionEntryCopyPasswordTotp->setIcon(icons()->icon("totp-copy-password")); m_ui->actionEntryTotpQRCode->setIcon(icons()->icon("qrcode")); m_ui->actionEntrySetupTotp->setIcon(icons()->icon("totp-edit")); - m_ui->actionEntryImportPasskey->setIcon(icons()->icon("document-import")); m_ui->actionEntryAddToAgent->setIcon(icons()->icon("utilities-terminal")); m_ui->actionEntryRemoveFromAgent->setIcon(icons()->icon("utilities-terminal")); m_ui->menuTags->setIcon(icons()->icon("tag-multiple")); @@ -417,7 +428,6 @@ MainWindow::MainWindow() m_ui->actionSettings->setIcon(icons()->icon("configure")); m_ui->actionPasswordGenerator->setIcon(icons()->icon("password-generator")); - m_ui->actionClearSSHAgent->setIcon(icons()->icon("utilities-terminal")); m_ui->actionAbout->setIcon(icons()->icon("help-about")); m_ui->actionDonate->setIcon(icons()->icon("donate")); @@ -428,17 +438,10 @@ MainWindow::MainWindow() m_ui->actionKeyboardShortcuts->setIcon(icons()->icon("keyboard-shortcuts")); m_ui->actionCheckForUpdates->setIcon(icons()->icon("system-software-update")); -#ifdef WITH_XC_BROWSER_PASSKEYS - m_ui->actionPasskeys->setIcon(icons()->icon("passkey")); - m_ui->actionImportPasskey->setIcon(icons()->icon("document-import")); - m_ui->actionEntryImportPasskey->setIcon(icons()->icon("document-import")); - m_ui->actionEntryRemovePasskey->setIcon(icons()->icon("document-close")); -#endif - - m_actionMultiplexer.connect(SIGNAL(currentModeChanged(DatabaseWidget::Mode)), this, SLOT(updateMenuActionState())); - m_actionMultiplexer.connect(SIGNAL(groupChanged()), this, SLOT(updateMenuActionState())); - m_actionMultiplexer.connect(SIGNAL(entrySelectionChanged()), this, SLOT(updateMenuActionState())); - m_actionMultiplexer.connect(SIGNAL(databaseNonDataChanged()), this, SLOT(updateMenuActionState())); + 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(groupChanged()), this, SLOT(updateEntryCountLabel())); @@ -457,11 +460,11 @@ MainWindow::MainWindow() 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(updateMenuActionState())); + 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(tabVisibilityChanged(bool)), SLOT(updateToolbarSeparatorVisibility())); - connect(m_ui->stackedWidget, SIGNAL(currentChanged(int)), SLOT(updateMenuActionState())); + connect(m_ui->stackedWidget, SIGNAL(currentChanged(int)), SLOT(setMenuActionState())); connect(m_ui->stackedWidget, SIGNAL(currentChanged(int)), SLOT(updateWindowTitle())); connect(m_ui->stackedWidget, SIGNAL(currentChanged(int)), SLOT(updateToolbarSeparatorVisibility())); connect(m_ui->settingsWidget, SIGNAL(accepted()), SLOT(applySettingsChanges())); @@ -476,16 +479,12 @@ MainWindow::MainWindow() connect(m_ui->actionDatabaseSaveBackup, SIGNAL(triggered()), m_ui->tabWidget, SLOT(saveDatabaseBackup())); 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->actionDatabaseSettings, SIGNAL(toggled(bool)), m_ui->tabWidget, SLOT(showDatabaseSettings(bool))); connect(m_ui->actionDatabaseSecurity, SIGNAL(triggered()), m_ui->tabWidget, SLOT(showDatabaseSecurity())); - connect(m_ui->actionReports, SIGNAL(toggled(bool)), m_ui->tabWidget, SLOT(showDatabaseReports(bool))); -#ifdef WITH_XC_BROWSER_PASSKEYS - connect(m_ui->actionPasskeys, SIGNAL(triggered()), m_ui->tabWidget, SLOT(showPasskeys())); - connect(m_ui->actionImportPasskey, SIGNAL(triggered()), m_ui->tabWidget, SLOT(importPasskey())); - connect(m_ui->actionEntryImportPasskey, SIGNAL(triggered()), m_ui->tabWidget, SLOT(importPasskeyToEntry())); - connect(m_ui->actionEntryRemovePasskey, SIGNAL(triggered()), m_ui->tabWidget, SLOT(removePasskeyFromEntry())); -#endif - connect(m_ui->actionImport, SIGNAL(triggered()), m_ui->tabWidget, SLOT(importFile())); + connect(m_ui->actionReports, SIGNAL(triggered()), m_ui->tabWidget, SLOT(showDatabaseReports())); + connect(m_ui->actionDatabaseSettings, SIGNAL(triggered()), m_ui->tabWidget, SLOT(showDatabaseSettings())); + 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->actionImportOpVault, SIGNAL(triggered()), m_ui->tabWidget, SLOT(importOpVaultDatabase())); connect(m_ui->actionExportCsv, SIGNAL(triggered()), m_ui->tabWidget, SLOT(exportToCsv())); connect(m_ui->actionExportHtml, SIGNAL(triggered()), m_ui->tabWidget, SLOT(exportToHtml())); connect(m_ui->actionExportXML, SIGNAL(triggered()), m_ui->tabWidget, SLOT(exportToXML())); @@ -496,9 +495,8 @@ MainWindow::MainWindow() connect(m_ui->actionQuit, SIGNAL(triggered()), SLOT(appExit())); m_actionMultiplexer.connect(m_ui->actionEntryNew, SIGNAL(triggered()), SLOT(createEntry())); - m_actionMultiplexer.connect(m_ui->actionEntryEdit, SIGNAL(triggered()), SLOT(switchToEntryEdit())); - m_actionMultiplexer.connect(m_ui->actionEntryExpire, SIGNAL(triggered()), SLOT(expireSelectedEntries())); 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->actionEntryRestore, SIGNAL(triggered()), SLOT(restoreSelectedEntries())); @@ -552,7 +550,9 @@ MainWindow::MainWindow() connect(m_ui->welcomeWidget, SIGNAL(newDatabase()), SLOT(switchToNewDatabase())); connect(m_ui->welcomeWidget, SIGNAL(openDatabase()), SLOT(switchToOpenDatabase())); connect(m_ui->welcomeWidget, SIGNAL(openDatabaseFile(QString)), SLOT(switchToDatabaseFile(QString))); - connect(m_ui->welcomeWidget, SIGNAL(importFile()), m_ui->tabWidget, SLOT(importFile())); + connect(m_ui->welcomeWidget, SIGNAL(importKeePass1Database()), SLOT(switchToKeePass1Database())); + connect(m_ui->welcomeWidget, SIGNAL(importOpVaultDatabase()), SLOT(switchToOpVaultDatabase())); + connect(m_ui->welcomeWidget, SIGNAL(importCsv()), SLOT(switchToCsvImport())); connect(m_ui->actionAbout, SIGNAL(triggered()), SLOT(showAboutDialog())); connect(m_ui->actionDonate, SIGNAL(triggered()), SLOT(openDonateUrl())); @@ -565,12 +565,13 @@ MainWindow::MainWindow() connect(osUtils, &OSUtilsBase::statusbarThemeChanged, this, &MainWindow::updateTrayIcon); - // Install event filter for empty-area drag and menubar toggle +#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0) + // Install event filter for empty-area drag auto* eventFilter = new MainWindowEventFilter(this); m_ui->menubar->installEventFilter(eventFilter); m_ui->toolBar->installEventFilter(eventFilter); m_ui->tabWidget->tabBar()->installEventFilter(eventFilter); - installEventFilter(eventFilter); +#endif #ifdef Q_OS_MACOS setUnifiedTitleAndToolBarOnMac(true); @@ -657,6 +658,15 @@ MainWindow::MainWindow() MessageWidget::Information, -1); } +#elif (QT_VERSION >= QT_VERSION_CHECK(5, 5, 0) && QT_VERSION < QT_VERSION_CHECK(5, 6, 0)) + if (!config()->get(Config::Messages_Qt55CompatibilityWarning).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); + config()->set(Config::Messages_Qt55CompatibilityWarning, true); + } #endif connect(qApp, SIGNAL(anotherInstanceStarted()), this, SLOT(bringToFront())); @@ -676,17 +686,13 @@ MainWindow::MainWindow() m_progressBar->setFixedHeight(15); m_progressBar->setMaximum(100); statusBar()->addPermanentWidget(m_progressBar); - connect(clipboard(), &Clipboard::updateCountdown, this, &MainWindow::updateProgressBar); - m_actionMultiplexer.connect(SIGNAL(updateSyncProgress(int, QString)), this, SLOT(updateProgressBar(int, QString))); - m_actionMultiplexer.connect(SIGNAL(databaseSyncInProgress()), this, SLOT(disableMenuAndToolbar())); - m_actionMultiplexer.connect(SIGNAL(databaseSyncCompleted(QString)), this, SLOT(enableMenuAndToolbar())); - m_actionMultiplexer.connect(SIGNAL(databaseSyncFailed(QString, const QString)), this, SLOT(enableMenuAndToolbar())); + connect(clipboard(), SIGNAL(updateCountdown(int, QString)), this, SLOT(updateProgressBar(int, QString))); m_statusBarLabel = new QLabel(statusBar()); m_statusBarLabel->setObjectName("statusBarLabel"); statusBar()->addPermanentWidget(m_statusBarLabel); restoreConfigState(); - updateMenuActionState(); + setMenuActionState(); } MainWindow::~MainWindow() @@ -701,6 +707,13 @@ MainWindow::~MainWindow() */ void MainWindow::restoreConfigState() { + // start minimized if configured + if (config()->get(Config::GUI_MinimizeOnStartup).toBool()) { + hideWindow(); + } else { + bringToFront(); + } + if (config()->get(Config::OpenPreviousDatabasesOnStartup).toBool()) { const QStringList fileNames = config()->get(Config::LastOpenedDatabases).toStringList(); for (const QString& filename : fileNames) { @@ -737,7 +750,7 @@ void MainWindow::appExit() /** * Returns if application was built with hardware key support. - * Intended to be used by 3rd-party applications using DBus. + * Intented to be used by 3rd-party applications using DBus. * * @return True if built with hardware key support, false otherwise */ @@ -753,7 +766,7 @@ bool MainWindow::isHardwareKeySupported() /** * Refreshes list of hardware keys known. * Triggers the DatabaseOpenWidget to automatically select the key last used for a database if found. - * Intended to be used by 3rd-party applications using DBus. + * Intented to be used by 3rd-party applications using DBus. * * @return True if any key was found, false otherwise or if application lacks hardware key support */ @@ -812,51 +825,31 @@ void MainWindow::updateCopyAttributesMenu() void MainWindow::updateSetTagsMenu() { - auto actionForTag = [](const QMenu* menu, const QString& tag) -> QAction* { - for (const auto action : menu->actions()) { - if (action->text() == tag) { - return action; - } - } - return nullptr; - }; - - m_ui->menuTags->setTearOffEnabled(true); + // Remove all existing actions + m_ui->menuTags->clear(); auto dbWidget = m_ui->tabWidget->currentDatabaseWidget(); if (dbWidget) { // Enumerate tags applied to the selected entries QSet selectedTags; - for (const auto entry : dbWidget->entryView()->selectedEntries()) { - for (const auto& tag : entry->tagList()) { + for (auto entry : dbWidget->entryView()->selectedEntries()) { + for (auto tag : entry->tagList()) { selectedTags.insert(tag); } } - // Remove missing tags - const auto tagList = dbWidget->database()->tagList(); - for (const auto action : m_ui->menuTags->actions()) { - if (!tagList.contains(action->text()) || !action->isEnabled()) { - delete action; - } - } - // Add known database tags as actions and set checked if // a selected entry has that tag - for (const auto& tag : tagList) { - auto action = actionForTag(m_ui->menuTags, tag); - if (!action) { - action = m_ui->menuTags->addAction(icons()->icon("tag"), tag); - action->setCheckable(true); - m_setTagsMenuActions->addAction(action); - } + for (auto tag : dbWidget->database()->tagList()) { + auto action = m_ui->menuTags->addAction(icons()->icon("tag"), tag); + action->setCheckable(true); action->setChecked(selectedTags.contains(tag)); + m_setTagsMenuActions->addAction(action); } } // If no tags exist in the database then show a tip to the user if (m_ui->menuTags->isEmpty()) { - m_ui->menuTags->setTearOffEnabled(false); auto action = m_ui->menuTags->addAction(tr("No Tags")); action->setEnabled(false); } @@ -882,160 +875,228 @@ void MainWindow::openDatabase(const QString& filePath, const QString& password, m_ui->tabWidget->addDatabaseTab(filePath, false, password, keyfile); } -void MainWindow::updateMenuActionState() +void MainWindow::setMenuActionState(DatabaseWidget::Mode mode) { - // MainWindow State int currentIndex = m_ui->stackedWidget->currentIndex(); - bool hasLockableDatabase = m_ui->tabWidget->hasLockableDatabases(); - bool inAppSettings = (currentIndex == SettingsScreen); - bool inPasswordGenerator = (currentIndex == PasswordGeneratorScreen); - auto dbWidget = (currentIndex == DatabaseTabScreen ? m_ui->tabWidget->currentDatabaseWidget() : nullptr); - auto dbMode = (dbWidget ? dbWidget->currentMode() : DatabaseWidget::Mode::None); + bool inDatabaseTabWidget = (currentIndex == DatabaseTabScreen); + bool inWelcomeWidget = (currentIndex == WelcomeScreen); + bool inDatabaseTabWidgetOrWelcomeWidget = inDatabaseTabWidget || inWelcomeWidget; - // Database State - bool databaseUnlocked = (dbWidget && !dbWidget->isLocked()); - bool inDatabase = (dbMode == DatabaseWidget::Mode::ViewMode); - bool inDatabaseSettings = (dbMode == DatabaseWidget::Mode::DatabaseSettingsMode); - bool inReports = (dbMode == DatabaseWidget::Mode::ReportsMode); - bool editingEntry = (dbMode == DatabaseWidget::Mode::EditEntryMode); + m_ui->actionDatabaseClose->setEnabled(true); + 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->actionLockDatabase->setEnabled(m_ui->tabWidget->hasLockableDatabases()); + m_ui->actionLockDatabaseToolbar->setEnabled(m_ui->tabWidget->hasLockableDatabases()); + m_ui->actionLockAllDatabases->setEnabled(m_ui->tabWidget->hasLockableDatabases()); - // Synchronize toggle buttons - m_ui->actionDatabaseSettings->blockSignals(true); - m_ui->actionPasswordGenerator->blockSignals(true); - m_ui->actionReports->blockSignals(true); - m_ui->actionSettings->blockSignals(true); + if (inDatabaseTabWidget && m_ui->tabWidget->currentIndex() != -1) { + DatabaseWidget* dbWidget = m_ui->tabWidget->currentDatabaseWidget(); + Q_ASSERT(dbWidget); - m_ui->actionDatabaseSettings->setChecked(inDatabaseSettings); - m_ui->actionPasswordGenerator->setChecked(inPasswordGenerator); - m_ui->actionReports->setChecked(inReports); - m_ui->actionSettings->setChecked(inAppSettings); - - m_ui->actionDatabaseSettings->blockSignals(false); - m_ui->actionPasswordGenerator->blockSignals(false); - m_ui->actionReports->blockSignals(false); - m_ui->actionSettings->blockSignals(false); - - // Entry State - bool singleEntrySelected = (inDatabase && dbWidget->numberOfSelectedEntries() == 1); - bool singleEntryOrEditing = (singleEntrySelected || editingEntry); - bool multiEntrySelected = (inDatabase && dbWidget->numberOfSelectedEntries() > 0); - - // Group State - bool groupSelected = (inDatabase && dbWidget->isGroupSelected()); - bool groupHasChildren = (groupSelected && dbWidget->currentGroup()->hasChildren()); - bool groupHasEntries = (groupSelected && !dbWidget->currentGroup()->entries().isEmpty()); - bool inRecycleBin = (inDatabase && dbWidget->isRecycleBinSelected()); - - bool entryViewSorted = (inDatabase && dbWidget->isSorted()); - bool entryViewAtTop = (inDatabase && dbWidget->currentEntryIndex() == 0); - bool entryViewAtBottom = - (groupSelected && dbWidget->currentEntryIndex() == dbWidget->currentGroup()->entries().size() - 1); - - m_ui->actionEntryNew->setEnabled(inDatabase && !inRecycleBin); - m_ui->actionEntryClone->setEnabled(singleEntrySelected && !inRecycleBin); - m_ui->actionEntryEdit->setEnabled(singleEntrySelected); - m_ui->actionEntryExpire->setEnabled(multiEntrySelected); - m_ui->actionEntryDelete->setEnabled(multiEntrySelected); - m_ui->actionEntryRestore->setVisible(multiEntrySelected && inRecycleBin); - m_ui->actionEntryRestore->setEnabled(multiEntrySelected && inRecycleBin); - if (dbWidget) { - m_ui->actionEntryRestore->setText(tr("Restore Entry(s)", "", dbWidget->numberOfSelectedEntries())); - m_ui->actionEntryRestore->setToolTip(tr("Restore Entry(s)", "", dbWidget->numberOfSelectedEntries())); - } - m_ui->actionEntryMoveUp->setVisible(inDatabase && !entryViewSorted); - m_ui->actionEntryMoveDown->setVisible(inDatabase && !entryViewSorted); - m_ui->actionEntryMoveUp->setEnabled(singleEntrySelected && !entryViewSorted && !entryViewAtTop); - m_ui->actionEntryMoveDown->setEnabled(singleEntrySelected && !entryViewSorted && !entryViewAtBottom); - m_ui->actionEntryCopyTitle->setEnabled(singleEntryOrEditing && dbWidget->currentEntryHasTitle()); - m_ui->actionEntryCopyUsername->setEnabled(singleEntryOrEditing && dbWidget->currentEntryHasUsername()); - // NOTE: Copy password is enabled even if the selected entry's password is blank to prevent Ctrl+C - // from copying information from the currently selected cell in the entry view table. - m_ui->actionEntryCopyPassword->setEnabled(singleEntryOrEditing); - m_ui->actionEntryCopyURL->setEnabled(singleEntryOrEditing && dbWidget->currentEntryHasUrl()); - m_ui->actionEntryCopyNotes->setEnabled(singleEntryOrEditing && dbWidget->currentEntryHasNotes()); - m_ui->menuEntryCopyAttribute->setEnabled(singleEntryOrEditing); - m_ui->menuEntryTotp->setEnabled(singleEntrySelected); - m_ui->menuTags->setEnabled(multiEntrySelected); - // Handle tear-off tags menu - if (m_ui->menuTags->isTearOffMenuVisible()) { - if (!databaseUnlocked) { - m_ui->menuTags->hideTearOffMenu(); - } else { - updateSetTagsMenu(); + if (mode == DatabaseWidget::Mode::None) { + mode = dbWidget->currentMode(); } - } - m_ui->actionEntryAutoType->setEnabled(singleEntrySelected && dbWidget->currentEntryHasAutoTypeEnabled()); - m_ui->actionEntryAutoType->menu()->setEnabled(singleEntrySelected && dbWidget->currentEntryHasAutoTypeEnabled()); - m_ui->actionEntryAutoTypeSequence->setText(singleEntrySelected - ? dbWidget->currentSelectedEntry()->effectiveAutoTypeSequence() - : Group::RootAutoTypeSequence); - m_ui->actionEntryAutoTypeSequence->setEnabled(singleEntrySelected); - m_ui->actionEntryAutoTypeUsername->setEnabled(singleEntrySelected && dbWidget->currentEntryHasUsername()); - m_ui->actionEntryAutoTypeUsernameEnter->setEnabled(singleEntrySelected && dbWidget->currentEntryHasUsername()); - m_ui->actionEntryAutoTypePassword->setEnabled(singleEntrySelected && dbWidget->currentEntryHasPassword()); - m_ui->actionEntryAutoTypePasswordEnter->setEnabled(singleEntrySelected && dbWidget->currentEntryHasPassword()); - m_ui->actionEntryAutoTypeTOTP->setEnabled(singleEntrySelected && dbWidget->currentEntryHasTotp()); - m_ui->actionEntryAutoTypeTOTP->setVisible(singleEntrySelected && dbWidget->currentEntryHasTotp()); - m_ui->actionEntryOpenUrl->setEnabled(singleEntryOrEditing && dbWidget->currentEntryHasUrl()); - m_ui->actionEntryTotp->setEnabled(singleEntrySelected && dbWidget->currentEntryHasTotp()); - m_ui->actionEntryCopyTotp->setEnabled(singleEntrySelected && dbWidget->currentEntryHasTotp()); - m_ui->actionEntryCopyPasswordTotp->setEnabled(singleEntrySelected && dbWidget->currentEntryHasTotp()); - m_ui->actionEntrySetupTotp->setEnabled(singleEntrySelected); - m_ui->actionEntryTotpQRCode->setEnabled(singleEntrySelected && dbWidget->currentEntryHasTotp()); - m_ui->actionEntryDownloadIcon->setEnabled((multiEntrySelected && !singleEntrySelected) - || (singleEntrySelected && dbWidget->currentEntryHasUrl())); -#ifdef WITH_XC_BROWSER_PASSKEYS - m_ui->actionEntryImportPasskey->setVisible(singleEntrySelected); - m_ui->actionEntryImportPasskey->setEnabled(singleEntrySelected); - m_ui->actionEntryRemovePasskey->setVisible(singleEntrySelected && dbWidget->currentEntryHasPasskey()); - m_ui->actionEntryRemovePasskey->setEnabled(singleEntrySelected && dbWidget->currentEntryHasPasskey()); -#endif -#ifdef WITH_XC_SSHAGENT - bool hasSSHKey = singleEntrySelected && sshAgent()->isEnabled() && dbWidget->currentEntryHasSshKey(); - m_ui->actionEntryAddToAgent->setVisible(hasSSHKey); - m_ui->actionEntryAddToAgent->setEnabled(hasSSHKey); - m_ui->actionEntryRemoveFromAgent->setVisible(hasSSHKey); - m_ui->actionEntryRemoveFromAgent->setEnabled(hasSSHKey); - m_ui->actionClearSSHAgent->setVisible(sshAgent()->isEnabled()); - m_ui->actionClearSSHAgent->setEnabled(sshAgent()->isEnabled()); -#endif - m_ui->actionGroupNew->setEnabled(groupSelected && !inRecycleBin); - m_ui->actionGroupEdit->setEnabled(groupSelected); - m_ui->actionGroupClone->setEnabled(groupSelected && dbWidget->canCloneCurrentGroup()); - m_ui->actionGroupDelete->setEnabled(groupSelected && dbWidget->canDeleteCurrentGroup()); - m_ui->actionGroupSortAsc->setVisible(groupHasChildren); - m_ui->actionGroupSortAsc->setEnabled(groupHasChildren); - m_ui->actionGroupSortDesc->setVisible(groupHasChildren); - m_ui->actionGroupSortDesc->setEnabled(groupHasChildren); - m_ui->actionGroupEmptyRecycleBin->setVisible(inRecycleBin); - m_ui->actionGroupEmptyRecycleBin->setEnabled(inRecycleBin); + switch (mode) { + case DatabaseWidget::Mode::ViewMode: { + bool singleEntrySelected = dbWidget->numberOfSelectedEntries() == 1; + bool entriesSelected = dbWidget->numberOfSelectedEntries() > 0; + bool groupSelected = dbWidget->isGroupSelected(); + bool currentGroupHasChildren = dbWidget->currentGroup()->hasChildren(); + bool currentGroupHasEntries = !dbWidget->currentGroup()->entries().isEmpty(); + bool recycleBinSelected = dbWidget->isRecycleBinSelected(); + bool sorted = dbWidget->isSorted(); + int entryIndex = dbWidget->currentEntryIndex(); + int numEntries = dbWidget->currentGroup()->entries().size(); + + m_ui->actionEntryNew->setEnabled(true); + m_ui->actionEntryClone->setEnabled(singleEntrySelected); + m_ui->actionEntryEdit->setEnabled(singleEntrySelected); + m_ui->actionEntryDelete->setEnabled(entriesSelected); + m_ui->actionEntryRestore->setVisible(entriesSelected && recycleBinSelected); + m_ui->actionEntryRestore->setEnabled(entriesSelected && recycleBinSelected); + m_ui->actionEntryRestore->setText(tr("Restore Entry(s)", "", dbWidget->numberOfSelectedEntries())); + m_ui->actionEntryRestore->setToolTip(tr("Restore Entry(s)", "", dbWidget->numberOfSelectedEntries())); + m_ui->actionEntryMoveUp->setVisible(!sorted); + m_ui->actionEntryMoveDown->setVisible(!sorted); + m_ui->actionEntryMoveUp->setEnabled(singleEntrySelected && !sorted && entryIndex > 0); + m_ui->actionEntryMoveDown->setEnabled(singleEntrySelected && !sorted && entryIndex >= 0 + && entryIndex < numEntries - 1); + m_ui->actionEntryCopyTitle->setEnabled(singleEntrySelected && dbWidget->currentEntryHasTitle()); + m_ui->actionEntryCopyUsername->setEnabled(singleEntrySelected && dbWidget->currentEntryHasUsername()); + // NOTE: Copy password is enabled even if the selected entry's password is blank to prevent Ctrl+C + // from copying information from the currently selected cell in the entry view table. + m_ui->actionEntryCopyPassword->setEnabled(singleEntrySelected); + m_ui->actionEntryCopyURL->setEnabled(singleEntrySelected && dbWidget->currentEntryHasUrl()); + m_ui->actionEntryCopyNotes->setEnabled(singleEntrySelected && dbWidget->currentEntryHasNotes()); + m_ui->menuEntryCopyAttribute->setEnabled(singleEntrySelected); + m_ui->menuEntryTotp->setEnabled(singleEntrySelected); + m_ui->menuTags->setEnabled(entriesSelected); + m_ui->actionEntryAutoType->setEnabled(singleEntrySelected); + m_ui->actionEntryAutoType->menu()->setEnabled(singleEntrySelected); + m_ui->actionEntryAutoTypeSequence->setText( + singleEntrySelected ? dbWidget->currentSelectedEntry()->effectiveAutoTypeSequence() + : Group::RootAutoTypeSequence); + m_ui->actionEntryAutoTypeSequence->setEnabled(singleEntrySelected); + m_ui->actionEntryAutoTypeUsername->setEnabled(singleEntrySelected && dbWidget->currentEntryHasUsername()); + m_ui->actionEntryAutoTypeUsernameEnter->setEnabled(singleEntrySelected + && dbWidget->currentEntryHasUsername()); + m_ui->actionEntryAutoTypePassword->setEnabled(singleEntrySelected && dbWidget->currentEntryHasPassword()); + m_ui->actionEntryAutoTypePasswordEnter->setEnabled(singleEntrySelected + && dbWidget->currentEntryHasPassword()); + m_ui->actionEntryAutoTypeTOTP->setEnabled(singleEntrySelected && dbWidget->currentEntryHasTotp()); + m_ui->actionEntryAutoTypeTOTP->setVisible(singleEntrySelected && dbWidget->currentEntryHasTotp()); + m_ui->actionEntryOpenUrl->setEnabled(singleEntrySelected && dbWidget->currentEntryHasUrl()); + m_ui->actionEntryTotp->setEnabled(singleEntrySelected && dbWidget->currentEntryHasTotp()); + m_ui->actionEntryCopyTotp->setEnabled(singleEntrySelected && dbWidget->currentEntryHasTotp()); + m_ui->actionEntryCopyPasswordTotp->setEnabled(singleEntrySelected && dbWidget->currentEntryHasTotp()); + m_ui->actionEntrySetupTotp->setEnabled(singleEntrySelected); + m_ui->actionEntryTotpQRCode->setEnabled(singleEntrySelected && dbWidget->currentEntryHasTotp()); + m_ui->actionEntryDownloadIcon->setEnabled((entriesSelected && !singleEntrySelected) + || (singleEntrySelected && dbWidget->currentEntryHasUrl())); + m_ui->actionGroupNew->setEnabled(groupSelected); + m_ui->actionGroupEdit->setEnabled(groupSelected); + m_ui->actionGroupClone->setEnabled(groupSelected && dbWidget->canCloneCurrentGroup()); + m_ui->actionGroupDelete->setEnabled(groupSelected && dbWidget->canDeleteCurrentGroup()); + m_ui->actionGroupSortAsc->setEnabled(groupSelected && currentGroupHasChildren); + m_ui->actionGroupSortDesc->setEnabled(groupSelected && currentGroupHasChildren); + m_ui->actionGroupEmptyRecycleBin->setVisible(recycleBinSelected); + m_ui->actionGroupEmptyRecycleBin->setEnabled(recycleBinSelected); #ifdef WITH_XC_NETWORKING - m_ui->actionGroupDownloadFavicons->setVisible(!inRecycleBin); + m_ui->actionGroupDownloadFavicons->setVisible(!recycleBinSelected); #endif - m_ui->actionGroupDownloadFavicons->setEnabled(groupSelected && groupHasEntries && !inRecycleBin); - - // Database Menu - m_ui->actionDatabaseSave->setEnabled(databaseUnlocked && m_ui->tabWidget->canSave()); - m_ui->actionDatabaseSaveAs->setEnabled(databaseUnlocked); - m_ui->actionDatabaseSaveBackup->setEnabled(databaseUnlocked); - m_ui->actionDatabaseClose->setEnabled(dbWidget); - m_ui->actionLockDatabase->setEnabled(databaseUnlocked); - m_ui->actionLockAllDatabases->setEnabled(hasLockableDatabase); - m_ui->actionLockDatabaseToolbar->setEnabled(hasLockableDatabase); - m_ui->actionDatabaseSettings->setEnabled(inDatabase || inDatabaseSettings); - m_ui->actionDatabaseSecurity->setEnabled(inDatabase || inDatabaseSettings); - m_ui->actionReports->setEnabled(inDatabase || inReports); - m_ui->menuRemoteSync->setEnabled(inDatabase || inDatabaseSettings); - m_ui->menuExport->setEnabled(inDatabase); - m_ui->actionDatabaseMerge->setEnabled(inDatabase); -#ifdef WITH_XC_BROWSER_PASSKEYS - m_ui->actionPasskeys->setEnabled(inDatabase || inReports); - m_ui->actionImportPasskey->setEnabled(inDatabase); + m_ui->actionGroupDownloadFavicons->setEnabled(groupSelected && currentGroupHasEntries + && !recycleBinSelected); + m_ui->actionDatabaseSecurity->setEnabled(true); + m_ui->actionReports->setEnabled(true); + m_ui->actionDatabaseSettings->setEnabled(true); + m_ui->actionDatabaseSave->setEnabled(m_ui->tabWidget->canSave()); + m_ui->actionDatabaseSaveAs->setEnabled(true); + m_ui->actionDatabaseSaveBackup->setEnabled(true); + m_ui->menuExport->setEnabled(true); + m_ui->actionExportCsv->setEnabled(true); + m_ui->actionExportHtml->setEnabled(true); + m_ui->actionExportXML->setEnabled(true); + m_ui->actionDatabaseMerge->setEnabled(m_ui->tabWidget->currentIndex() != -1); +#ifdef WITH_XC_SSHAGENT + bool singleEntryHasSshKey = + singleEntrySelected && sshAgent()->isEnabled() && dbWidget->currentEntryHasSshKey(); + m_ui->actionEntryAddToAgent->setVisible(singleEntryHasSshKey); + m_ui->actionEntryAddToAgent->setEnabled(singleEntryHasSshKey); + m_ui->actionEntryRemoveFromAgent->setVisible(singleEntryHasSshKey); + m_ui->actionEntryRemoveFromAgent->setEnabled(singleEntryHasSshKey); #endif - m_searchWidgetAction->setEnabled(inDatabase); + m_searchWidgetAction->setEnabled(true); + + break; + } + case DatabaseWidget::Mode::EditMode: + case DatabaseWidget::Mode::ImportMode: + case DatabaseWidget::Mode::LockedMode: { + // Enable select actions when editing an entry + bool editEntryActive = dbWidget->isEntryEditActive(); + const auto editEntryActionsMask = QList({m_ui->actionEntryCopyUsername, + m_ui->actionEntryCopyPassword, + m_ui->actionEntryCopyURL, + m_ui->actionEntryOpenUrl, + m_ui->actionEntryAutoType, + m_ui->actionEntryDownloadIcon, + m_ui->actionEntryCopyNotes, + m_ui->actionEntryCopyTitle, + m_ui->menuEntryCopyAttribute->menuAction(), + m_ui->menuEntryTotp->menuAction(), + m_ui->actionEntrySetupTotp}); + + auto entryActions = m_ui->menuEntries->actions(); + entryActions << m_ui->menuEntryCopyAttribute->actions(); + entryActions << m_ui->menuEntryTotp->actions(); + for (auto action : entryActions) { + bool enabled = editEntryActive && editEntryActionsMask.contains(action); + if (action->menu()) { + action->menu()->setEnabled(enabled); + } + action->setEnabled(enabled); + } + + const auto groupActions = m_ui->menuGroups->actions(); + for (auto action : groupActions) { + action->setEnabled(false); + } + + m_ui->actionDatabaseSecurity->setEnabled(false); + m_ui->actionReports->setEnabled(false); + m_ui->actionDatabaseSettings->setEnabled(false); + m_ui->actionDatabaseSave->setEnabled(false); + m_ui->actionDatabaseSaveAs->setEnabled(false); + m_ui->actionDatabaseSaveBackup->setEnabled(false); + m_ui->menuExport->setEnabled(false); + m_ui->actionExportCsv->setEnabled(false); + m_ui->actionExportHtml->setEnabled(false); + m_ui->actionDatabaseMerge->setEnabled(false); + // Only disable the action in the database menu so that the + // menu remains active in the toolbar, if necessary + m_ui->actionLockDatabase->setEnabled(false); + // Never show in these modes + m_ui->actionEntryMoveUp->setVisible(false); + m_ui->actionEntryMoveDown->setVisible(false); + m_ui->actionEntryRestore->setVisible(false); + m_ui->actionEntryAddToAgent->setVisible(false); + m_ui->actionEntryRemoveFromAgent->setVisible(false); + m_ui->actionGroupEmptyRecycleBin->setVisible(false); + + m_searchWidgetAction->setEnabled(false); + break; + } + default: + Q_ASSERT(false); + } + } else { + const auto entryActions = m_ui->menuEntries->actions(); + for (auto action : entryActions) { + action->setEnabled(false); + } + + const auto groupActions = m_ui->menuGroups->actions(); + for (auto action : groupActions) { + action->setEnabled(false); + } + + m_ui->actionDatabaseSecurity->setEnabled(false); + m_ui->actionReports->setEnabled(false); + m_ui->actionDatabaseSettings->setEnabled(false); + m_ui->actionDatabaseSave->setEnabled(false); + m_ui->actionDatabaseSaveAs->setEnabled(false); + m_ui->actionDatabaseSaveBackup->setEnabled(false); + m_ui->actionDatabaseClose->setEnabled(false); + m_ui->menuExport->setEnabled(false); + m_ui->actionExportCsv->setEnabled(false); + m_ui->actionExportHtml->setEnabled(false); + m_ui->actionDatabaseMerge->setEnabled(false); + // Hide entry-specific actions + m_ui->actionEntryMoveUp->setVisible(false); + m_ui->actionEntryMoveDown->setVisible(false); + m_ui->actionEntryRestore->setVisible(false); + m_ui->actionEntryAddToAgent->setVisible(false); + m_ui->actionEntryRemoveFromAgent->setVisible(false); + m_ui->actionGroupEmptyRecycleBin->setVisible(false); + + m_searchWidgetAction->setEnabled(false); + } + + if ((currentIndex == PasswordGeneratorScreen) != m_ui->actionPasswordGenerator->isChecked()) { + bool blocked = m_ui->actionPasswordGenerator->blockSignals(true); + m_ui->actionPasswordGenerator->toggle(); + m_ui->actionPasswordGenerator->blockSignals(blocked); + } else if ((currentIndex == SettingsScreen) != m_ui->actionSettings->isChecked()) { + bool blocked = m_ui->actionSettings->blockSignals(true); + m_ui->actionSettings->toggle(); + m_ui->actionSettings->blockSignals(blocked); + } } void MainWindow::updateToolbarSeparatorVisibility() @@ -1067,23 +1128,28 @@ void MainWindow::updateWindowTitle() if (stackedWidgetIndex == DatabaseTabScreen && tabWidgetIndex != -1) { customWindowTitlePart = m_ui->tabWidget->tabName(tabWidgetIndex); - if (isModified && customWindowTitlePart.endsWith("*")) { + if (isModified) { + // remove asterisk '*' from title customWindowTitlePart.remove(customWindowTitlePart.size() - 1, 1); } m_ui->actionDatabaseSave->setEnabled(m_ui->tabWidget->canSave(tabWidgetIndex)); - } else if (stackedWidgetIndex == StackedWidgetIndex::SettingsScreen) { + } else if (stackedWidgetIndex == 1) { customWindowTitlePart = tr("Settings"); - } else if (stackedWidgetIndex == StackedWidgetIndex::PasswordGeneratorScreen) { - customWindowTitlePart = tr("Password Generator"); } QString windowTitle; if (customWindowTitlePart.isEmpty()) { - windowTitle = QString("%1[*]").arg(BaseWindowTitle); + windowTitle = BaseWindowTitle; } else { windowTitle = QString("%1[*] - %2").arg(customWindowTitlePart, BaseWindowTitle); } + if (customWindowTitlePart.isEmpty() || stackedWidgetIndex == 1) { + setWindowFilePath(""); + } else { + setWindowFilePath(m_ui->tabWidget->databaseWidgetFromIndex(tabWidgetIndex)->database()->filePath()); + } + setWindowTitle(windowTitle); setWindowModified(isModified); @@ -1152,11 +1218,7 @@ void MainWindow::showUpdateCheckDialog() void MainWindow::customOpenUrl(QString url) { -#ifdef KEEPASSXC_DIST_APPIMAGE - QProcess::execute("xdg-open", {url}); -#else QDesktopServices::openUrl(QUrl(url)); -#endif } void MainWindow::openDonateUrl() @@ -1193,10 +1255,8 @@ void MainWindow::switchToDatabases() { if (m_ui->tabWidget->currentIndex() == -1) { m_ui->stackedWidget->setCurrentIndex(WelcomeScreen); - statusBar()->setAutoFillBackground(false); } else { m_ui->stackedWidget->setCurrentIndex(DatabaseTabScreen); - statusBar()->setAutoFillBackground(true); } } @@ -1205,7 +1265,6 @@ void MainWindow::switchToSettings(bool enabled) if (enabled) { m_ui->settingsWidget->loadSettings(); m_ui->stackedWidget->setCurrentIndex(SettingsScreen); - statusBar()->setAutoFillBackground(true); } else { switchToDatabases(); } @@ -1217,7 +1276,6 @@ void MainWindow::togglePasswordGenerator(bool enabled) m_ui->passwordGeneratorWidget->loadSettings(); m_ui->passwordGeneratorWidget->regeneratePassword(); m_ui->stackedWidget->setCurrentIndex(PasswordGeneratorScreen); - statusBar()->setAutoFillBackground(false); } else { m_ui->passwordGeneratorWidget->saveSettings(); switchToDatabases(); @@ -1242,25 +1300,22 @@ void MainWindow::switchToDatabaseFile(const QString& file) switchToDatabases(); } -void MainWindow::updateRemoteSyncMenuEntries() +void MainWindow::switchToKeePass1Database() { - m_ui->menuRemoteSync->clear(); + m_ui->tabWidget->importKeePass1Database(); + switchToDatabases(); +} - auto dbWidget = m_ui->tabWidget->currentDatabaseWidget(); - if (dbWidget) { - // Setup sync shortcut - auto action = m_ui->menuRemoteSync->addAction(tr("Setup Remote Sync…")); - connect(action, &QAction::triggered, dbWidget, &DatabaseWidget::switchToRemoteSettings); +void MainWindow::switchToOpVaultDatabase() +{ + m_ui->tabWidget->importOpVaultDatabase(); + switchToDatabases(); +} - m_ui->menuRemoteSync->addSeparator(); - - // Build remote sync menu - for (const auto params : dbWidget->getRemoteParams()) { - auto* remoteSyncAction = new QAction(params->name, this); - m_ui->menuRemoteSync->addAction(remoteSyncAction); - connect(remoteSyncAction, &QAction::triggered, dbWidget, [=] { dbWidget->syncWithRemote(params); }); - } - } +void MainWindow::switchToCsvImport() +{ + m_ui->tabWidget->importCsv(); + switchToDatabases(); } void MainWindow::databaseStatusChanged(DatabaseWidget* dbWidget) @@ -1307,64 +1362,12 @@ void MainWindow::databaseTabChanged(int tabIndex) { if (tabIndex != -1 && m_ui->stackedWidget->currentIndex() == WelcomeScreen) { m_ui->stackedWidget->setCurrentIndex(DatabaseTabScreen); - statusBar()->setAutoFillBackground(true); } else if (tabIndex == -1 && m_ui->stackedWidget->currentIndex() == DatabaseTabScreen) { m_ui->stackedWidget->setCurrentIndex(WelcomeScreen); - statusBar()->setAutoFillBackground(false); } m_actionMultiplexer.setCurrentObject(m_ui->tabWidget->currentDatabaseWidget()); updateEntryCountLabel(); - - // Clear the tags menu to prevent re-use between databases - for (const auto action : m_ui->menuTags->actions()) { - delete action; - } -} - -bool MainWindow::event(QEvent* event) -{ - if (event->type() == QEvent::ShortcutOverride) { - const auto keyevent = static_cast(event); - // Did we get a ShortcutOverride event with the same key sequence as the OS default - // copy-to-clipboard shortcut? - if (keyevent->matches(QKeySequence::Copy)) { - // If so, we ask the database widget to check if any of its sub-widgets has - // text selected, and to copy it to the clipboard if that is the case. - // We do this because that is what the user likely expects to happen, yet Qt does not - // behave like that (at least on some platforms). - auto dbWidget = m_ui->tabWidget->currentDatabaseWidget(); - if (dbWidget && dbWidget->copyFocusedTextSelection()) { - // Note: instead of actively copying the selected text to the clipboard - // above, simply accepting the event would have a similar effect (Qt - // would deliver it as a key press to the current widget, which would - // trigger the built-in copy-to-clipboard behaviour). However, that - // would not come with our special (configurable) behaviour of - // clearing the clipboard after a certain time period. - keyevent->accept(); - return true; - } - } - } - return QMainWindow::event(event); -} - -void MainWindow::showEvent(QShowEvent* event) -{ - Q_UNUSED(event) -#ifdef Q_OS_WIN - // Qt Hack - Prevent white flicker when showing window - QTimer::singleShot(50, this, [=] { setProperty("windowOpacity", 1.0); }); -#endif -} - -void MainWindow::hideEvent(QHideEvent* event) -{ - Q_UNUSED(event) -#ifdef Q_OS_WIN - // Qt Hack - Prevent white flicker when showing window - setProperty("windowOpacity", 0.0); -#endif } void MainWindow::closeEvent(QCloseEvent* event) @@ -1434,7 +1437,7 @@ void MainWindow::keyPressEvent(QKeyEvent* event) } } - QMainWindow::keyPressEvent(event); + QWidget::keyPressEvent(event); } bool MainWindow::focusNextPrevChild(bool next) @@ -1484,27 +1487,6 @@ void MainWindow::focusSearchWidget() } } -void MainWindow::enableMenuAndToolbar() -{ - m_ui->toolBar->setDisabled(false); - m_ui->menubar->setDisabled(false); -} - -void MainWindow::disableMenuAndToolbar() -{ - m_ui->toolBar->setDisabled(true); - m_ui->menubar->setDisabled(true); -} - -void MainWindow::clearSSHAgent() -{ -#ifdef WITH_XC_SSHAGENT - auto agent = SSHAgent::instance(); - auto ret = agent->clearAllAgentIdentities(); - displayGlobalMessage(agent->errorString(), ret ? MessageWidget::Positive : KMessageWidget::Error, false); -#endif -} - void MainWindow::saveWindowInformation() { if (isVisible()) { @@ -1517,7 +1499,7 @@ bool MainWindow::saveLastDatabases() { if (config()->get(Config::OpenPreviousDatabasesOnStartup).toBool()) { auto currentDbWidget = m_ui->tabWidget->currentDatabaseWidget(); - if (currentDbWidget && !currentDbWidget->database()->isTemporaryDatabase()) { + if (currentDbWidget) { config()->set(Config::LastActiveDatabase, currentDbWidget->database()->filePath()); } else { config()->remove(Config::LastActiveDatabase); @@ -1526,9 +1508,7 @@ bool MainWindow::saveLastDatabases() QStringList openDatabases; for (int i = 0; i < m_ui->tabWidget->count(); ++i) { auto dbWidget = m_ui->tabWidget->databaseWidgetFromIndex(i); - if (!dbWidget->database()->isTemporaryDatabase()) { - openDatabases.append(QDir::toNativeSeparators(dbWidget->database()->filePath())); - } + openDatabases.append(QDir::toNativeSeparators(dbWidget->database()->filePath())); } config()->set(Config::LastOpenedDatabases, openDatabases); @@ -1568,8 +1548,12 @@ void MainWindow::updateTrayIcon() connect(actionToggle, SIGNAL(triggered()), SLOT(toggleWindow())); } - bool showUnlocked = m_ui->tabWidget->hasLockableDatabases(); - m_trayIcon->setIcon(icons()->trayIcon(showUnlocked)); + if (m_ui->tabWidget->hasLockableDatabases()) { + m_trayIcon->setIcon(icons()->trayIconUnlocked()); + } else { + m_trayIcon->setIcon(icons()->trayIconLocked()); + } + m_trayIcon->setToolTip(windowTitle().replace("[*]", isWindowModified() ? "*" : "")); m_trayIcon->show(); @@ -1630,8 +1614,6 @@ void MainWindow::agentEnabled(bool enabled) { m_ui->actionEntryAddToAgent->setVisible(enabled); m_ui->actionEntryRemoveFromAgent->setVisible(enabled); - m_ui->actionClearSSHAgent->setEnabled(enabled); - m_ui->actionClearSSHAgent->setVisible(enabled); } void MainWindow::showEntryContextMenu(const QPoint& globalPos) @@ -1654,25 +1636,31 @@ void MainWindow::showGroupContextMenu(const QPoint& globalPos) m_ui->menuGroups->popup(globalPos); } +void MainWindow::setShortcut(QAction* action, QKeySequence::StandardKey standard, int fallback) +{ + if (!QKeySequence::keyBindings(standard).isEmpty()) { + action->setShortcuts(standard); + } else if (fallback != 0) { + action->setShortcut(QKeySequence(fallback)); + } +} + void MainWindow::applySettingsChanges() { + int timeout = config()->get(Config::Security_LockDatabaseIdleSeconds).toInt() * 1000; + if (timeout <= 0) { + timeout = 60; + } + + m_inactivityTimer->setInactivityTimeout(timeout); if (config()->get(Config::Security_LockDatabaseIdle).toBool()) { - auto timeout = config()->get(Config::Security_LockDatabaseIdleSeconds).toInt() * 1000; - m_inactivityTimer->activate(timeout); + m_inactivityTimer->activate(); } else { m_inactivityTimer->deactivate(); } - m_ui->actionShowToolbar->setChecked(!config()->get(Config::GUI_HideToolbar).toBool()); - m_ui->actionShowMenubar->setChecked(!config()->get(Config::GUI_HideMenubar).toBool()); - m_ui->menubar->setHidden(config()->get(Config::GUI_HideMenubar).toBool()); m_ui->toolBar->setHidden(config()->get(Config::GUI_HideToolbar).toBool()); - auto movable = config()->get(Config::GUI_MovableToolbar).toBool(); - m_ui->toolBar->setMovable(movable); - if (!movable) { - // Move the toolbar back to the top of the main window - addToolBar(Qt::TopToolBarArea, m_ui->toolBar); - } + m_ui->toolBar->setMovable(config()->get(Config::GUI_MovableToolbar).toBool()); bool isOk = false; const auto toolButtonStyle = @@ -1682,8 +1670,6 @@ void MainWindow::applySettingsChanges() } updateTrayIcon(); - - kpxcApp->applyFontSize(); } void MainWindow::setAllowScreenCapture(bool state) @@ -1772,7 +1758,7 @@ void MainWindow::hide() { #ifndef Q_OS_WIN qint64 current_time = Clock::currentMilliSecondsSinceEpoch(); - if (current_time - m_lastShowTime < 250) { + if (current_time - m_lastShowTime < 50) { return; } #endif @@ -1818,6 +1804,27 @@ void MainWindow::toggleWindow() hideWindow(); } else { bringToFront(); + +#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 + static const 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")); + msg.setArguments(args); + QDBusConnection::sessionBus().send(msg); + } +#endif } } @@ -1828,6 +1835,11 @@ void MainWindow::closeModalWindow() } } +void MainWindow::lockDatabasesAfterInactivity() +{ + m_ui->tabWidget->lockDatabases(); +} + bool MainWindow::isTrayIconEnabled() const { return m_trayIcon && m_trayIcon->isVisible(); @@ -1882,7 +1894,7 @@ void MainWindow::bringToFront() void MainWindow::handleScreenLock() { if (config()->get(Config::Security_LockDatabaseScreenLock).toBool()) { - lockAllDatabases(); + lockDatabasesAfterInactivity(); } } @@ -1932,7 +1944,7 @@ void MainWindow::closeAllDatabases() void MainWindow::lockAllDatabases() { - m_ui->tabWidget->lockDatabases(); + lockDatabasesAfterInactivity(); } void MainWindow::displayDesktopNotification(const QString& msg, QString title, int msTimeoutHint) @@ -1945,7 +1957,11 @@ void MainWindow::displayDesktopNotification(const QString& msg, QString title, i title = BaseWindowTitle; } +#if QT_VERSION >= QT_VERSION_CHECK(5, 9, 0) m_trayIcon->showMessage(title, msg, icons()->applicationIcon(), msTimeoutHint); +#else + m_trayIcon->showMessage(title, msg, QSystemTrayIcon::Information, msTimeoutHint); +#endif } void MainWindow::restartApp(const QString& message) @@ -2000,27 +2016,12 @@ void MainWindow::initViewMenu() } }); -#ifdef Q_OS_MACOS - m_ui->actionShowMenubar->setVisible(false); -#else - m_ui->actionShowMenubar->setChecked(!config()->get(Config::GUI_HideMenubar).toBool()); - connect(m_ui->actionShowMenubar, &QAction::toggled, this, [this](bool checked) { - config()->set(Config::GUI_HideMenubar, !checked); - applySettingsChanges(); - }); -#endif - m_ui->actionShowToolbar->setChecked(!config()->get(Config::GUI_HideToolbar).toBool()); connect(m_ui->actionShowToolbar, &QAction::toggled, this, [this](bool checked) { config()->set(Config::GUI_HideToolbar, !checked); applySettingsChanges(); }); - m_ui->actionShowGroupPanel->setChecked(!config()->get(Config::GUI_HideGroupPanel).toBool()); - connect(m_ui->actionShowGroupPanel, &QAction::toggled, this, [](bool checked) { - config()->set(Config::GUI_HideGroupPanel, !checked); - }); - m_ui->actionShowPreviewPanel->setChecked(!config()->get(Config::GUI_HidePreviewPanel).toBool()); connect(m_ui->actionShowPreviewPanel, &QAction::toggled, this, [](bool checked) { config()->set(Config::GUI_HidePreviewPanel, !checked); @@ -2049,153 +2050,15 @@ void MainWindow::initViewMenu() }); } -void MainWindow::initActionCollection() -{ - auto ac = ActionCollection::instance(); - ac->addActions({// Database Menu - m_ui->actionDatabaseNew, - m_ui->actionDatabaseOpen, - m_ui->actionDatabaseSave, - m_ui->actionDatabaseSaveAs, - m_ui->actionDatabaseSaveBackup, - m_ui->actionDatabaseClose, - m_ui->actionLockDatabase, - m_ui->actionLockAllDatabases, - m_ui->actionDatabaseSettings, - m_ui->actionDatabaseSecurity, - m_ui->actionReports, - m_ui->actionPasskeys, - m_ui->actionDatabaseMerge, - m_ui->actionImportPasskey, - m_ui->actionImportCsv, - m_ui->actionImportOpVault, - m_ui->actionImportKeePass1, - m_ui->actionExportCsv, - m_ui->actionExportHtml, - m_ui->actionExportXML, - m_ui->actionQuit, - // Entry Menu - m_ui->actionEntryNew, - m_ui->actionEntryEdit, - m_ui->actionEntryClone, - m_ui->actionEntryDelete, - m_ui->actionEntryCopyUsername, - m_ui->actionEntryCopyPassword, - m_ui->actionEntryCopyURL, - m_ui->actionEntryCopyTitle, - m_ui->actionEntryCopyNotes, - m_ui->actionEntryTotp, - m_ui->actionEntryTotpQRCode, - m_ui->actionEntrySetupTotp, - m_ui->actionEntryCopyTotp, - m_ui->actionEntryCopyPasswordTotp, - m_ui->actionEntryAutoTypeSequence, - m_ui->actionEntryAutoTypeUsername, - m_ui->actionEntryAutoTypeUsernameEnter, - m_ui->actionEntryAutoTypePassword, - m_ui->actionEntryAutoTypePasswordEnter, - m_ui->actionEntryAutoTypeTOTP, - m_ui->actionEntryDownloadIcon, - m_ui->actionEntryOpenUrl, - m_ui->actionEntryMoveUp, - m_ui->actionEntryMoveDown, - m_ui->actionEntryAddToAgent, - m_ui->actionEntryRemoveFromAgent, - m_ui->actionEntryRestore, - // Group Menu - m_ui->actionGroupNew, - m_ui->actionGroupEdit, - m_ui->actionGroupClone, - m_ui->actionGroupDelete, - m_ui->actionGroupDownloadFavicons, - m_ui->actionGroupSortAsc, - m_ui->actionGroupSortDesc, - m_ui->actionGroupEmptyRecycleBin, - // Tools Menu - m_ui->actionPasswordGenerator, - m_ui->actionClearSSHAgent, - m_ui->actionSettings, - // View Menu - m_ui->actionThemeAuto, - m_ui->actionThemeLight, - m_ui->actionThemeDark, - m_ui->actionThemeClassic, - m_ui->actionCompactMode, -#ifndef Q_OS_MACOS - m_ui->actionShowMenubar, -#endif - m_ui->actionShowToolbar, - m_ui->actionShowGroupPanel, - m_ui->actionShowPreviewPanel, - m_ui->actionAllowScreenCapture, - m_ui->actionAlwaysOnTop, - m_ui->actionHideUsernames, - m_ui->actionHidePasswords, - // Help Menu - m_ui->actionGettingStarted, - m_ui->actionUserGuide, - m_ui->actionKeyboardShortcuts, - m_ui->actionOnlineHelp, - m_ui->actionCheckForUpdates, - m_ui->actionDonate, - m_ui->actionBugReport, - m_ui->actionAbout}); - - // Register as default any shortcuts that were set in the .ui file - for (const auto action : ac->actions()) { - if (!action->shortcut().isEmpty()) { - ac->setDefaultShortcut(action, action->shortcut()); - } - } - - // Actions with standard shortcuts (if no standard shortcut exists, leave the existing - // shortcuts from the .ui file in place) - ac->setDefaultShortcut(m_ui->actionDatabaseOpen, QKeySequence::Open); - ac->setDefaultShortcut(m_ui->actionDatabaseSave, QKeySequence::Save); - ac->setDefaultShortcut(m_ui->actionDatabaseSaveAs, QKeySequence::SaveAs); - ac->setDefaultShortcut(m_ui->actionDatabaseClose, QKeySequence::Close); - ac->setDefaultShortcut(m_ui->actionSettings, QKeySequence::Preferences); - ac->setDefaultShortcut(m_ui->actionQuit, QKeySequence::Quit); - ac->setDefaultShortcut(m_ui->actionEntryNew, QKeySequence::New); - - // Prevent conflicts with global Mac shortcuts (force Control on all platforms) - // Note: Qt::META means Ctrl on Mac. -#ifdef Q_OS_MAC - ac->setDefaultShortcut(m_ui->actionEntryAddToAgent, Qt::META + Qt::Key_H); - ac->setDefaultShortcut(m_ui->actionEntryRemoveFromAgent, Qt::META + Qt::SHIFT + Qt::Key_H); -#endif - - QTimer::singleShot(1, ac, &ActionCollection::restoreShortcuts); -} +#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0) MainWindowEventFilter::MainWindowEventFilter(QObject* parent) : QObject(parent) { - m_altCoolDown.setInterval(250); - m_altCoolDown.setSingleShot(true); - - m_menubarTimer.setInterval(250); - m_menubarTimer.setSingleShot(false); - connect(&m_menubarTimer, &QTimer::timeout, this, [this] { - auto mainwindow = getMainWindow(); - if (mainwindow && mainwindow->m_ui->menubar->isVisible() && config()->get(Config::GUI_HideMenubar).toBool()) { - // If the menu bar is visible with no active menu, hide it - if (!mainwindow->m_ui->menubar->activeAction()) { - mainwindow->m_ui->menubar->setVisible(false); - m_altCoolDown.start(); - m_menubarTimer.stop(); - } - // Conditions to hide the menubar or stop the timer have not been met - return; - } - // We no longer need the timer - m_menubarTimer.stop(); - }); } /** * MainWindow event filter to initiate empty-area drag on the toolbar, menubar, and tabbar. - * Also shows menubar with Alt when menubar itself is hidden. */ bool MainWindowEventFilter::eventFilter(QObject* watched, QEvent* event) { @@ -2204,13 +2067,10 @@ bool MainWindowEventFilter::eventFilter(QObject* watched, QEvent* event) return QObject::eventFilter(watched, event); } - auto eventType = event->type(); - if (eventType == QEvent::MouseButtonPress) { -#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0) - // startSystemMove was introduced in Qt 5.15 - auto mouseEvent = dynamic_cast(event); + if (event->type() == QEvent::MouseButtonPress) { if (watched == mainWindow->m_ui->menubar) { - if (!mainWindow->m_ui->menubar->actionAt(mouseEvent->pos())) { + auto* m = static_cast(event); + if (!mainWindow->m_ui->menubar->actionAt(m->pos())) { mainWindow->windowHandle()->startSystemMove(); return false; } @@ -2220,36 +2080,15 @@ bool MainWindowEventFilter::eventFilter(QObject* watched, QEvent* event) return false; } } else if (watched == mainWindow->m_ui->tabWidget->tabBar()) { - if (mainWindow->m_ui->tabWidget->tabBar()->tabAt(mouseEvent->pos()) == -1) { + auto* m = static_cast(event); + if (mainWindow->m_ui->tabWidget->tabBar()->tabAt(m->pos()) == -1) { mainWindow->windowHandle()->startSystemMove(); return true; } } -#endif - } else if (eventType == QEvent::KeyRelease && watched == mainWindow) { - auto keyEvent = dynamic_cast(event); -#ifdef Q_OS_WIN - // Windows translates AltGr into CTRL + ALT, this breaks using AltGr when the menubar is hidden - // Prevent this by activating the ALT cooldown to ignore the next key event which will be an ALT key - if (keyEvent->key() == Qt::Key_Control && keyEvent->modifiers() == Qt::AltModifier - && config()->get(Config::GUI_HideMenubar).toBool()) { - m_altCoolDown.start(); - return false; - } -#endif - if (keyEvent->key() == Qt::Key_Alt && !keyEvent->modifiers() && config()->get(Config::GUI_HideMenubar).toBool() - && !m_altCoolDown.isActive()) { - auto menubar = mainWindow->m_ui->menubar; - menubar->setVisible(!menubar->isVisible()); - if (menubar->isVisible()) { - menubar->setActiveAction(mainWindow->m_ui->menuFile->menuAction()); - m_menubarTimer.start(); - } else { - m_menubarTimer.stop(); - } - return true; - } } return QObject::eventFilter(watched, event); } + +#endif diff --git a/src/gui/MainWindow.h b/src/gui/MainWindow.h index 229106c52..2b0a05231 100644 --- a/src/gui/MainWindow.h +++ b/src/gui/MainWindow.h @@ -1,6 +1,6 @@ /* - * Copyright (C) 2024 KeePassXC Team * Copyright (C) 2010 Felix Geyer + * Copyright (C) 2020 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 @@ -24,7 +24,6 @@ #include #include #include -#include #include "core/SignalMultiplexer.h" #include "gui/DatabaseWidget.h" @@ -49,7 +48,7 @@ class MainWindow : public QMainWindow public: MainWindow(); - ~MainWindow() override; + ~MainWindow(); QList getOpenDatabases(); void restoreConfigState(); @@ -67,7 +66,6 @@ signals: void databaseUnlocked(DatabaseWidget* dbWidget); void databaseLocked(DatabaseWidget* dbWidget); void activeDatabaseChanged(DatabaseWidget* dbWidget); - void databaseUnlockDialogFinished(bool accepted, DatabaseWidget* dbWidget); public slots: void openDatabase(const QString& filePath, const QString& password = {}, const QString& keyfile = {}); @@ -98,16 +96,13 @@ public slots: void restartApp(const QString& message); protected: - bool event(QEvent* event) override; - void showEvent(QShowEvent* event) override; - void hideEvent(QHideEvent* event) override; void closeEvent(QCloseEvent* event) override; void changeEvent(QEvent* event) override; void keyPressEvent(QKeyEvent* event) override; bool focusNextPrevChild(bool next) override; private slots: - void updateMenuActionState(); + void setMenuActionState(DatabaseWidget::Mode mode = DatabaseWidget::Mode::None); void updateToolbarSeparatorVisibility(); void updateWindowTitle(); void showAboutDialog(); @@ -127,7 +122,9 @@ private slots: void switchToNewDatabase(); void switchToOpenDatabase(); void switchToDatabaseFile(const QString& file); - void updateRemoteSyncMenuEntries(); + void switchToKeePass1Database(); + void switchToOpVaultDatabase(); + void switchToCsvImport(); void databaseStatusChanged(DatabaseWidget* dbWidget); void databaseTabChanged(int tabIndex); void openRecentDatabase(QAction* action); @@ -140,6 +137,7 @@ private slots: void applySettingsChanges(); void trayIconTriggered(QSystemTrayIcon::ActivationReason reason); void processTrayIconTrigger(); + void lockDatabasesAfterInactivity(); void handleScreenLock(); void showErrorMessage(const QString& message); void selectNextDatabaseTab(); @@ -152,11 +150,10 @@ private slots: void updateProgressBar(int percentage, QString message); void updateEntryCountLabel(); void focusSearchWidget(); - void enableMenuAndToolbar(); - void disableMenuAndToolbar(); - void clearSSHAgent(); private: + static void setShortcut(QAction* action, QKeySequence::StandardKey standard, int fallback = 0); + static const QString BaseWindowTitle; void saveWindowInformation(); @@ -169,7 +166,6 @@ private: void dropEvent(QDropEvent* event) override; void initViewMenu(); - void initActionCollection(); const QScopedPointer m_ui; SignalMultiplexer m_actionMultiplexer; @@ -207,6 +203,7 @@ private: friend class MainWindowEventFilter; }; +#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0) class MainWindowEventFilter : public QObject { Q_OBJECT @@ -214,11 +211,8 @@ class MainWindowEventFilter : public QObject public: explicit MainWindowEventFilter(QObject* parent); bool eventFilter(QObject* watched, QEvent* event) override; - -private: - QTimer m_menubarTimer; - QTimer m_altCoolDown; }; +#endif /** * Return instance of MainWindow created on app load diff --git a/src/gui/MainWindow.ui b/src/gui/MainWindow.ui index 283bfd999..cbaea45a3 100644 --- a/src/gui/MainWindow.ui +++ b/src/gui/MainWindow.ui @@ -231,6 +231,14 @@ &Recent Databases + + + &Import + + + + + &Export @@ -239,12 +247,6 @@ - - - Remote S&ync… - - - @@ -256,16 +258,12 @@ + - - - - - - + @@ -293,6 +291,9 @@ true + + false + @@ -304,6 +305,9 @@ + + false + TOTP @@ -314,17 +318,12 @@ - - true - Tags - - @@ -340,9 +339,6 @@ - - - @@ -355,24 +351,22 @@ &Groups - - + + + - - &Tools - @@ -392,13 +386,8 @@ - - - - - @@ -441,9 +430,6 @@ - - - @@ -452,12 +438,6 @@ &Quit - - Quit Application - - - Ctrl+Q - QAction::QuitRole @@ -466,9 +446,6 @@ &About - - Open About Dialog - QAction::AboutRole @@ -485,38 +462,29 @@ &Open Database… - - Open Database - - - Ctrl+O - + + false + &Save Database - - Ctrl+S - + + false + &Close Database - - Ctrl+W - &New Database… - Create Database - - - Ctrl+Shift+N + Create a new database @@ -524,226 +492,184 @@ &Merge From Database… - Merge From Database + Merge from another KDBX database - - &New Entry… - - - Create Entry - - - Ctrl+N - - - - - &Edit Entry… - - - Edit Entry - - - Ctrl+E - - - false - E&xpire Entry… + &New Entry… + + + Add a new entry + + + + + false + + + &Edit Entry… + + + View or edit entry + + false + &Delete Entry… - - Delete Entry - - - Del - + + false + &New Group… - Create Group + Add a new group + + false + &Edit Group… - - Edit Group - + + false + &Delete Group… - - Delete Group - + + false + Download All &Favicons… - - Download All Favicons - + + false + Sort &A-Z - - Sort Groups A-Z - + + false + Sort &Z-A - - Sort Groups Z-A - + + false + Sa&ve Database As… - - Save Database As - - - Ctrl+Shift+S - + + false + Database &Security… - - Show Database Security - - - true + + false Database &Reports… - Show Database Reports - - - Ctrl+Shift+R + Statistics, health check, etc. QAction::NoRole - - true + + false &Database Settings… - Show Database Settings - - - Ctrl+Shift+, - - - QAction::NoRole - - - - - Passkeys… - - - Show Passkeys - - - QAction::NoRole - - - - - Import Passkey - - - Import Passkey + Database settings QAction::NoRole + + false + &Clone Entry… - - Clone Entry - - - Ctrl+D - + + false + Move u&p - Move Entry Up - - - Alt+Up + Move entry one step up + + false + Move do&wn - Move Entry Down - - - Alt+Down + Move entry one step down + + false + Copy &Username - Copy Username - - - Ctrl+B + Copy username to clipboard + + false + Copy &Password - Copy Password - - - Ctrl+C + Copy password to clipboard @@ -753,12 +679,6 @@ &Settings - - Show Application Settings - - - Ctrl+, - QAction::PreferencesRole @@ -770,25 +690,15 @@ &Password Generator - - Show Password Generator - + + false + Perform &Auto-Type - - - Import Passkey - - - - - Remove Passkey From Entry - - false @@ -800,7 +710,7 @@ {USERNAME} - Perform Auto-Type: {USERNAME} + {USERNAME} @@ -814,7 +724,7 @@ {USERNAME}{ENTER} - Perform Auto-Type: {USERNAME}{ENTER} + {USERNAME}{ENTER} @@ -828,7 +738,7 @@ {PASSWORD} - Perform Auto-Type: {PASSWORD} + {PASSWORD} @@ -842,7 +752,7 @@ {PASSWORD}{ENTER} - Perform Auto-Type: {PASSWORD}{ENTER} + {PASSWORD}{ENTER} @@ -856,93 +766,93 @@ {TOTP} - Perform Auto-Type: {TOTP} + {TOTP} Download &Favicon - - Ctrl+Shift+D - + + false + Open &URL - - Ctrl+Shift+U - + + false + &Lock Database - - Ctrl+L - + + false + Lock &All Databases - - Ctrl+Shift+L - + + false + &Title - Copy Title - - - Ctrl+I + Copy title to clipboard + + false + Copy &URL - Copy URL - - - Ctrl+U + Copy URL to clipboard + + false + &Notes - Copy Notes + Copy notes to clipboard + + false + &CSV File… - - Export to CSV - + + false + &HTML File… - - Export to HTML - KeePass 1 Database… - Import KeePass1 Database + Import a KeePass 1 database @@ -950,7 +860,7 @@ 1Password Vault… - Import 1Password Vault + Import a 1Password Vault @@ -958,72 +868,51 @@ CSV File… - Import CSV File + Import a CSV file Show TOTP - - Ctrl+Shift+T - Show QR Code - - Show TOTP QR Code - Set up TOTP… - - Set up TOTP - Copy &TOTP - - Ctrl+T - Copy Password and TOTP - - Ctrl+Y - E&mpty recycle bin - - Empty Recycle Bin + + false &Donate - - Open Donation Website - Report a &Bug - - Open Bug Report - @@ -1038,7 +927,7 @@ &Online Help - Open Online Documentation + Go to online documentation @@ -1053,42 +942,27 @@ &Keyboard Shortcuts - - Open Keyboard Shortcuts Guide - Ctrl+/ + + false + Save Database Backup… - - Save Database Backup - Add key to SSH Agent - - SSH Agent: Add Key - - - Ctrl+H - Remove key from SSH Agent - - SSH Agent: Remove Key - - - Ctrl+Shift+H - @@ -1097,9 +971,6 @@ Compact Mode - - Toggle Compact Mode - @@ -1111,9 +982,6 @@ Automatic - - Set Theme: Automatic - @@ -1122,9 +990,6 @@ Light - - Set Theme: Light - @@ -1133,9 +998,6 @@ Dark - - Set Theme: Dark - @@ -1144,23 +1006,6 @@ Classic (Platform-native) - - Set Theme: Classic - - - - - true - - - true - - - Show Menubar - - - Toggle Show Menubar - @@ -1172,9 +1017,6 @@ Show Toolbar - - Toggle Show Toolbar - @@ -1186,9 +1028,6 @@ Show Preview Panel - - Toggle Show Preview Panel - @@ -1197,9 +1036,6 @@ Always on Top - - Toggle Always on Top - Ctrl+Shift+A @@ -1211,9 +1047,6 @@ Hide Usernames - - Toggle Hide Usernames - Ctrl+Shift+B @@ -1228,9 +1061,6 @@ Hide Passwords - - Toggle Hide Passwords - Ctrl+Shift+C @@ -1243,13 +1073,13 @@ {USERNAME}{TAB}{PASSWORD}{ENTER} - Perform Auto-Type: Entry Default - - - Ctrl+Shift+V + {USERNAME}{TAB}{PASSWORD}{ENTER} + + false + Clone Group... @@ -1259,23 +1089,29 @@ Restore Entry(s) - Restore Entry + Restore Entry(s) Ctrl+R + + false + &Lock Database + + false + &XML File… - Export to XML + XML File… @@ -1285,47 +1121,6 @@ Allow Screen Capture - - Toggle Allow Screen Capture - - - - - 1Password 1PUX... - - - Import a 1Password 1PUX file - - - - - Import… - - - - - true - - - true - - - Show Group Panel - - - Toggle Show Group Panel - - - - - Clear SSH Agent - - - Clear all identities in ssh-agent - - - QAction::TextHeuristicRole - diff --git a/src/gui/MessageBox.cpp b/src/gui/MessageBox.cpp index 87898ff5c..04e6ccb29 100644 --- a/src/gui/MessageBox.cpp +++ b/src/gui/MessageBox.cpp @@ -19,7 +19,6 @@ #include "MessageBox.h" #include -#include #include #include #include @@ -67,7 +66,6 @@ void MessageBox::initializeButtonDefs() {Disable, {QMessageBox::tr("Disable"), QMessageBox::ButtonRole::AcceptRole}}, {Merge, {QMessageBox::tr("Merge"), QMessageBox::ButtonRole::AcceptRole}}, {Continue, {QMessageBox::tr("Continue"), QMessageBox::ButtonRole::AcceptRole}}, - {ContinueWithWeakPass, {QMessageBox::tr("Continue with weak password"), QMessageBox::ButtonRole::AcceptRole}}, }; } @@ -88,12 +86,9 @@ MessageBox::Button MessageBox::messageBox(QWidget* parent, { if (m_nextAnswer == MessageBox::NoButton) { QMessageBox msgBox(parent); - msgBox.setTextFormat(Qt::RichText); msgBox.setIcon(icon); msgBox.setWindowTitle(title); - // Replace newlines with HTML line breaks - auto fixedText = text; - msgBox.setText(fixedText.replace("\n", "
    ")); + msgBox.setText(text); if (m_overrideParent) { // Force the creation of the QWindow, without this windowHandle() will return nullptr @@ -130,7 +125,6 @@ MessageBox::Button MessageBox::messageBox(QWidget* parent, msgBox.activateWindow(); msgBox.raise(); } - msgBox.layout()->setSizeConstraint(QLayout::SetMinimumSize); msgBox.exec(); Button returnButton = m_addedButtonLookup[msgBox.clickedButton()]; diff --git a/src/gui/MessageBox.h b/src/gui/MessageBox.h index 1dbcc2076..46939a535 100644 --- a/src/gui/MessageBox.h +++ b/src/gui/MessageBox.h @@ -58,11 +58,10 @@ public: Disable = 1 << 25, Merge = 1 << 26, Continue = 1 << 27, - ContinueWithWeakPass = 1 << 28, // Internal loop markers. Update Last when new KeePassXC button is added First = Ok, - Last = ContinueWithWeakPass, + Last = Continue, }; enum Action diff --git a/src/gui/OpVaultOpenWidget.cpp b/src/gui/OpVaultOpenWidget.cpp new file mode 100644 index 000000000..cae569cf2 --- /dev/null +++ b/src/gui/OpVaultOpenWidget.cpp @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2019 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 "OpVaultOpenWidget.h" + +#include "core/Database.h" +#include "format/OpVaultReader.h" +#include "ui_DatabaseOpenWidget.h" + +OpVaultOpenWidget::OpVaultOpenWidget(QWidget* parent) + : DatabaseOpenWidget(parent) +{ + m_ui->labelHeadline->setText("Import 1Password Database"); +} + +void OpVaultOpenWidget::openDatabase() +{ + OpVaultReader reader; + + QString password; + password = m_ui->editPassword->text(); + + QDir opVaultDir(m_filename); + + QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); + m_db.reset(reader.readDatabase(opVaultDir, password)); + QApplication::restoreOverrideCursor(); + + if (m_db) { + emit dialogFinished(true); + } else { + m_ui->messageWidget->showMessage(tr("Read Database did not produce an instance\n%1").arg(reader.errorString()), + MessageWidget::Error); + m_ui->editPassword->clear(); + } +} diff --git a/src/gui/HtmlGuiExporter.h b/src/gui/OpVaultOpenWidget.h similarity index 69% rename from src/gui/HtmlGuiExporter.h rename to src/gui/OpVaultOpenWidget.h index 9979996a1..aed96caba 100644 --- a/src/gui/HtmlGuiExporter.h +++ b/src/gui/OpVaultOpenWidget.h @@ -15,16 +15,20 @@ * along with this program. If not, see . */ -#ifndef KEEPASSX_HTMLGUIEXPORTER_H -#define KEEPASSX_HTMLGUIEXPORTER_H +#ifndef KEEPASSXC_OPVAULTOPENWIDGET_H +#define KEEPASSXC_OPVAULTOPENWIDGET_H -#include "format/HtmlExporter.h" +#include "gui/DatabaseOpenWidget.h" -class HtmlGuiExporter : public HtmlExporter +class OpVaultOpenWidget : public DatabaseOpenWidget { + Q_OBJECT + +public: + explicit OpVaultOpenWidget(QWidget* parent = nullptr); + protected: - QString groupIconToHtml(const Group* group) override; - QString entryIconToHtml(const Entry* entry) override; + void openDatabase() override; }; -#endif // KEEPASSX_HTMLGUIEXPORTER_H +#endif // KEEPASSXC_OPVAULTOPENWIDGET_H diff --git a/src/gui/PasswordGeneratorWidget.cpp b/src/gui/PasswordGeneratorWidget.cpp index d3dd7d699..b1e684410 100644 --- a/src/gui/PasswordGeneratorWidget.cpp +++ b/src/gui/PasswordGeneratorWidget.cpp @@ -57,7 +57,6 @@ PasswordGeneratorWidget::PasswordGeneratorWidget(QWidget* parent) connect(m_ui->editNewPassword, SIGNAL(textChanged(QString)), SLOT(updateButtonsEnabled(QString))); connect(m_ui->editNewPassword, SIGNAL(textChanged(QString)), SLOT(updatePasswordStrength())); - connect(m_ui->editNewPassword, SIGNAL(textChanged(QString)), SLOT(updatePasswordLengthLabel(QString))); connect(m_ui->buttonAdvancedMode, SIGNAL(toggled(bool)), SLOT(setAdvancedMode(bool))); connect(m_ui->buttonAddHex, SIGNAL(clicked()), SLOT(excludeHexChars())); connect(m_ui->editAdditionalChars, SIGNAL(textChanged(QString)), SLOT(updateGenerator())); @@ -65,7 +64,7 @@ PasswordGeneratorWidget::PasswordGeneratorWidget(QWidget* parent) connect(m_ui->buttonApply, SIGNAL(clicked()), SLOT(applyPassword())); connect(m_ui->buttonCopy, SIGNAL(clicked()), SLOT(copyPassword())); connect(m_ui->buttonGenerate, SIGNAL(clicked()), SLOT(regeneratePassword())); - connect(m_ui->buttonDeleteWordList, SIGNAL(clicked()), SLOT(removeCustomWordList())); + connect(m_ui->buttonDeleteWordList, SIGNAL(clicked()), SLOT(deleteWordList())); connect(m_ui->buttonAddWordList, SIGNAL(clicked()), SLOT(addWordList())); connect(m_ui->buttonClose, SIGNAL(clicked()), SIGNAL(closed())); @@ -81,15 +80,14 @@ PasswordGeneratorWidget::PasswordGeneratorWidget(QWidget* parent) connect(m_ui->tabWidget, SIGNAL(currentChanged(int)), SLOT(updateGenerator())); connect(m_ui->wordCaseComboBox, SIGNAL(currentIndexChanged(int)), SLOT(updateGenerator())); - // set font size of password quality, characters, and entropy labels dynamically to 80% of + // set font size of password quality and entropy labels dynamically to 80% of // the default font size, but make it no smaller than 8pt QFont defaultFont; - auto smallerSize = static_cast(defaultFont.pointSize() * 0.8f); + int smallerSize = static_cast(defaultFont.pointSize() * 0.8f); if (smallerSize >= 8) { defaultFont.setPointSize(smallerSize); m_ui->entropyLabel->setFont(defaultFont); m_ui->strengthLabel->setFont(defaultFont); - m_ui->passwordLengthLabel->setFont(defaultFont); } // set default separator to Space @@ -99,7 +97,6 @@ PasswordGeneratorWidget::PasswordGeneratorWidget(QWidget* parent) m_ui->wordCaseComboBox->addItem(tr("lower case"), PassphraseGenerator::LOWERCASE); m_ui->wordCaseComboBox->addItem(tr("UPPER CASE"), PassphraseGenerator::UPPERCASE); m_ui->wordCaseComboBox->addItem(tr("Title Case"), PassphraseGenerator::TITLECASE); - m_ui->wordCaseComboBox->addItem(tr("MIXED case"), PassphraseGenerator::MIXEDCASE); // load system-wide wordlists QDir path(resources()->wordlistPath("")); @@ -115,11 +112,6 @@ PasswordGeneratorWidget::PasswordGeneratorWidget(QWidget* parent) m_ui->comboBoxWordList->addItem(fileName, path.absolutePath() + QDir::separator() + fileName); } - // Set color of wordlist warning - StateColorPalette statePalette; - auto color = statePalette.color(StateColorPalette::ColorRole::False); - m_ui->labelWordListWarning->setStyleSheet(QString("QLabel { color: %1; }").arg(color.name())); - loadSettings(); } @@ -129,7 +121,7 @@ void PasswordGeneratorWidget::closeEvent(QCloseEvent* event) { // Emits closed signal when clicking X from title bar emit closed(); - QWidget::closeEvent(event); + event->accept(); } PasswordGeneratorWidget* PasswordGeneratorWidget::popupGenerator(QWidget* parent) @@ -262,7 +254,9 @@ void PasswordGeneratorWidget::regeneratePassword() m_ui->editNewPassword->setText(m_passwordGenerator->generatePassword()); } } else { - m_ui->editNewPassword->setText(m_dicewareGenerator->generatePassphrase()); + if (m_dicewareGenerator->isValid()) { + m_ui->editNewPassword->setText(m_dicewareGenerator->generatePassphrase()); + } } } @@ -280,6 +274,7 @@ void PasswordGeneratorWidget::updatePasswordStrength() PasswordHealth passwordHealth(0); if (m_ui->tabWidget->currentIndex() == Diceware) { passwordHealth.init(m_dicewareGenerator->estimateEntropy()); + m_ui->charactersInPassphraseLabel->setText(QString::number(m_ui->editNewPassword->text().length())); } else { passwordHealth = PasswordHealth(m_ui->editNewPassword->text()); } @@ -321,11 +316,6 @@ void PasswordGeneratorWidget::updatePasswordStrength() } } -void PasswordGeneratorWidget::updatePasswordLengthLabel(const QString& password) -{ - m_ui->passwordLengthLabel->setText(tr("Characters: %1").arg(QString::number(password.length()))); -} - void PasswordGeneratorWidget::applyPassword() { saveSettings(); @@ -382,28 +372,33 @@ bool PasswordGeneratorWidget::isPasswordGenerated() const return m_passwordGenerated; } -void PasswordGeneratorWidget::removeCustomWordList() +void PasswordGeneratorWidget::deleteWordList() { if (m_ui->comboBoxWordList->currentIndex() < m_firstCustomWordlistIndex) { return; } - auto wordlist = m_ui->comboBoxWordList->currentText(); - auto result = MessageBox::question(this, - tr("Confirm Remove Wordlist"), - tr("Do you really want to remove the wordlist \"%1\"?").arg(wordlist), - MessageBox::Remove | MessageBox::Cancel, - MessageBox::Cancel); - - if (result == MessageBox::Remove) { - QFile file(m_ui->comboBoxWordList->currentData().toString()); - if (file.exists() && !file.remove()) { - MessageBox::critical(this, tr("Failed to delete wordlist"), file.errorString()); - } - - m_ui->comboBoxWordList->removeItem(m_ui->comboBoxWordList->currentIndex()); - updateGenerator(); + QFile file(m_ui->comboBoxWordList->currentData().toString()); + if (!file.exists()) { + return; } + + auto result = MessageBox::question(this, + tr("Confirm Delete Wordlist"), + tr("Do you really want to delete the wordlist \"%1\"?").arg(file.fileName()), + MessageBox::Delete | MessageBox::Cancel, + MessageBox::Cancel); + if (result != MessageBox::Delete) { + return; + } + + if (!file.remove()) { + MessageBox::critical(this, tr("Failed to delete wordlist"), file.errorString()); + return; + } + + m_ui->comboBoxWordList->removeItem(m_ui->comboBoxWordList->currentIndex()); + updateGenerator(); } void PasswordGeneratorWidget::addWordList() @@ -587,7 +582,11 @@ void PasswordGeneratorWidget::updateGenerator() } m_passwordGenerator->setFlags(flags); - m_ui->buttonGenerate->setEnabled(m_passwordGenerator->isValid()); + if (m_passwordGenerator->isValid()) { + m_ui->buttonGenerate->setEnabled(true); + } else { + m_ui->buttonGenerate->setEnabled(false); + } } else { m_dicewareGenerator->setWordCase( static_cast(m_ui->wordCaseComboBox->currentData().toInt())); @@ -604,8 +603,11 @@ void PasswordGeneratorWidget::updateGenerator() m_dicewareGenerator->setWordSeparator(m_ui->editWordSeparator->text()); - m_ui->labelWordListWarning->setVisible(!m_dicewareGenerator->isWordListValid()); - m_ui->buttonGenerate->setEnabled(true); + if (m_dicewareGenerator->isValid()) { + m_ui->buttonGenerate->setEnabled(true); + } else { + m_ui->buttonGenerate->setEnabled(false); + } } regeneratePassword(); diff --git a/src/gui/PasswordGeneratorWidget.h b/src/gui/PasswordGeneratorWidget.h index d7496365a..e272e674d 100644 --- a/src/gui/PasswordGeneratorWidget.h +++ b/src/gui/PasswordGeneratorWidget.h @@ -46,7 +46,7 @@ public: }; explicit PasswordGeneratorWidget(QWidget* parent = nullptr); - ~PasswordGeneratorWidget() override; + ~PasswordGeneratorWidget(); void loadSettings(); void saveSettings(); @@ -67,16 +67,12 @@ public slots: void applyPassword(); void copyPassword(); void setPasswordVisible(bool visible); - void removeCustomWordList(); + void deleteWordList(); void addWordList(); -protected: - void closeEvent(QCloseEvent* event) override; - private slots: void updateButtonsEnabled(const QString& password); void updatePasswordStrength(); - void updatePasswordLengthLabel(const QString& password); void setAdvancedMode(bool advanced); void excludeHexChars(); @@ -90,6 +86,7 @@ private: bool m_passwordGenerated = false; int m_firstCustomWordlistIndex; + void closeEvent(QCloseEvent* event); PasswordGenerator::CharClasses charClasses(); PasswordGenerator::GeneratorFlags generatorFlags(); diff --git a/src/gui/PasswordGeneratorWidget.ui b/src/gui/PasswordGeneratorWidget.ui index eac5421cd..642129de6 100644 --- a/src/gui/PasswordGeneratorWidget.ui +++ b/src/gui/PasswordGeneratorWidget.ui @@ -7,7 +7,7 @@ 0 0 729 - 433 + 427 @@ -59,50 +59,6 @@ - - - - - 0 - 0 - - - - - 70 - 0 - - - - - 16777215 - 30 - - - - passwordLength - - - Qt::AlignRight|Qt::AlignTop|Qt::AlignTrailing - - - 3 - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - @@ -252,9 +208,6 @@ QProgressBar::chunk { Password - - 10 - @@ -716,10 +669,7 @@ QProgressBar::chunk { - Excluded characters: "0", "1", "l", "I", "O", "|", "﹒", "B", "8", "G", "6" - - - Excluded characters: "0", "1", "l", "I", "O", "|", "﹒", "B", "8", "G", "6" + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" Exclude look-alike characters @@ -769,7 +719,14 @@ QProgressBar::chunk { - + + + + Word Separator: + + + + @@ -782,100 +739,7 @@ QProgressBar::chunk { - - - - - - - 0 - 0 - - - - - 20 - 0 - - - - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - Word Count: - - - spinBoxLength - - - - - - - Word Case: - - - - - - - - - 0 - 0 - - - - - - - - Qt::TabFocus - - - Delete selected wordlist - - - Delete selected wordlist - - - - - - - Qt::TabFocus - - - Add custom wordlist - - - Add custom wordlist - - - - - - QLayout::SetMinimumSize @@ -920,7 +784,31 @@ QProgressBar::chunk { - + + + + Word Count: + + + spinBoxLength + + + + + + + Character Count: + + + + + + + Word Case: + + + + @@ -940,23 +828,86 @@ QProgressBar::chunk { - - - - Word Separator: - - + + + + + + + 0 + 0 + + + + + 20 + 0 + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + - - - - 75 - true - - + + + + + + 0 + 0 + + + + + + + + Qt::TabFocus + + + Delete selected wordlist + + + Delete selected wordlist + + + + + + + Qt::TabFocus + + + Add custom wordlist + + + Add custom wordlist + + + + + + + - Warning: the chosen wordlist is smaller than the minimum recommended size! + character diff --git a/src/gui/PasswordWidget.cpp b/src/gui/PasswordWidget.cpp index 2568ff67b..e1fc20c6b 100644 --- a/src/gui/PasswordWidget.cpp +++ b/src/gui/PasswordWidget.cpp @@ -38,7 +38,6 @@ PasswordWidget::PasswordWidget(QWidget* parent) { m_ui->setupUi(this); setFocusProxy(m_ui->passwordEdit); - m_ui->passwordEdit->installEventFilter(this); const QIcon errorIcon = icons()->icon("dialog-error"); m_errorAction = m_ui->passwordEdit->addAction(errorIcon, QLineEdit::TrailingPosition); @@ -149,6 +148,8 @@ void PasswordWidget::setRepeatPartner(PasswordWidget* repeatPartner) m_repeatPasswordWidget = repeatPartner; m_repeatPasswordWidget->setParentPasswordEdit(this); + connect( + m_ui->passwordEdit, SIGNAL(textChanged(QString)), m_repeatPasswordWidget, SLOT(autocompletePassword(QString))); connect(m_ui->passwordEdit, SIGNAL(textChanged(QString)), m_repeatPasswordWidget, SLOT(updateRepeatStatus())); } @@ -177,6 +178,12 @@ void PasswordWidget::setShowPassword(bool show) if (m_repeatPasswordWidget) { m_repeatPasswordWidget->setEchoMode(show ? QLineEdit::Normal : QLineEdit::Password); + if (!config()->get(Config::Security_PasswordsRepeatVisible).toBool()) { + m_repeatPasswordWidget->setEnabled(!show); + m_repeatPasswordWidget->setText(text()); + } else { + m_repeatPasswordWidget->setEnabled(true); + } } } @@ -224,19 +231,22 @@ void PasswordWidget::updateRepeatStatus() } } -bool PasswordWidget::eventFilter(QObject* watched, QEvent* event) +void PasswordWidget::autocompletePassword(const QString& password) { - if (watched == m_ui->passwordEdit) { - auto type = event->type(); - if (isVisible() && (type == QEvent::KeyPress || type == QEvent::KeyRelease || type == QEvent::FocusIn)) { - checkCapslockState(); - } - if (type == QEvent::FocusIn || type == QEvent::FocusOut || type == QEvent::Hide) { - osUtils->setUserInputProtection(type == QEvent::FocusIn); - } + if (!config()->get(Config::Security_PasswordsRepeatVisible).toBool() + && m_ui->passwordEdit->echoMode() == QLineEdit::Normal) { + setText(password); } - // Continue with normal operations - return false; +} + +bool PasswordWidget::event(QEvent* event) +{ + if (isVisible() + && (event->type() == QEvent::KeyPress || event->type() == QEvent::KeyRelease + || event->type() == QEvent::FocusIn)) { + checkCapslockState(); + } + return QWidget::event(event); } void PasswordWidget::checkCapslockState() @@ -312,4 +322,4 @@ void PasswordWidget::updatePasswordStrength(const QString& password) break; } -} +} \ No newline at end of file diff --git a/src/gui/PasswordWidget.h b/src/gui/PasswordWidget.h index 6049d2908..0014b696f 100644 --- a/src/gui/PasswordWidget.h +++ b/src/gui/PasswordWidget.h @@ -33,7 +33,6 @@ class PasswordWidget : public QWidget { Q_OBJECT - Q_PROPERTY(QString text READ text WRITE setText NOTIFY textChanged USER true) public: explicit PasswordWidget(QWidget* parent = nullptr); ~PasswordWidget() override; @@ -44,8 +43,6 @@ public: bool isPasswordVisible() const; QString text(); - bool eventFilter(QObject* watched, QEvent* event) override; - signals: void textChanged(QString text); @@ -59,7 +56,11 @@ public slots: void setEchoMode(QLineEdit::EchoMode mode); void setClearButtonEnabled(bool enabled); +protected: + bool event(QEvent* event) override; + private slots: + void autocompletePassword(const QString& password); void popupPasswordGenerator(); void updateRepeatStatus(); void updatePasswordStrength(const QString& password); diff --git a/src/gui/PasswordWidget.ui b/src/gui/PasswordWidget.ui index 97fe71e08..34cae29e1 100644 --- a/src/gui/PasswordWidget.ui +++ b/src/gui/PasswordWidget.ui @@ -29,7 +29,7 @@ - Toggle password visibility using Control + H. Open the password generator using Control + G. + Toggle password visibilty using Control + H. Open the password generator using Control + G. diff --git a/src/gui/SearchHelpWidget.ui b/src/gui/SearchHelpWidget.ui index d9778fd22..bd8731eb9 100644 --- a/src/gui/SearchHelpWidget.ui +++ b/src/gui/SearchHelpWidget.ui @@ -214,13 +214,6 @@ - - - - uuid - - - @@ -388,7 +381,7 @@ - + 0 diff --git a/src/gui/SearchWidget.cpp b/src/gui/SearchWidget.cpp index 5fce8a5aa..cfeba57c1 100644 --- a/src/gui/SearchWidget.cpp +++ b/src/gui/SearchWidget.cpp @@ -16,13 +16,11 @@ */ #include "SearchWidget.h" -#include "gui/MainWindow.h" #include "ui_SearchHelpWidget.h" #include "ui_SearchWidget.h" #include #include -#include #include #include "core/SignalMultiplexer.h" @@ -45,8 +43,6 @@ SearchWidget::SearchWidget(QWidget* parent) m_searchTimer->setSingleShot(true); m_clearSearchTimer->setSingleShot(true); - new QShortcut(Qt::CTRL + Qt::Key_J, this, SLOT(toggleHelp()), nullptr, Qt::WidgetWithChildrenShortcut); - connect(m_ui->searchEdit, SIGNAL(textChanged(QString)), SLOT(startSearchTimer())); connect(m_ui->helpIcon, SIGNAL(triggered()), SLOT(toggleHelp())); connect(m_ui->searchIcon, SIGNAL(triggered()), SLOT(showSearchMenu())); @@ -54,7 +50,6 @@ SearchWidget::SearchWidget(QWidget* parent) connect(m_searchTimer, SIGNAL(timeout()), SLOT(startSearch())); connect(m_clearSearchTimer, SIGNAL(timeout()), SLOT(clearSearch())); connect(this, SIGNAL(escapePressed()), SLOT(clearSearch())); - connect(m_ui->searchEdit, &QLineEdit::returnPressed, this, &SearchWidget::onReturnPressed); m_ui->searchEdit->setPlaceholderText(tr("Search (%1)…", "Search placeholder text, %1 is the keyboard shortcut") .arg(QKeySequence(QKeySequence::Find).toString(QKeySequence::NativeText))); @@ -70,12 +65,6 @@ SearchWidget::SearchWidget(QWidget* parent) m_actionLimitGroup->setCheckable(true); m_actionLimitGroup->setChecked(config()->get(Config::SearchLimitGroup).toBool()); - m_actionWaitForEnter = m_searchMenu->addAction( - tr("Press Enter to search"), this, [](bool state) { config()->set(Config::SearchWaitForEnter, state); }); - m_actionWaitForEnter->setObjectName("actionSearchWaitForEnter"); - m_actionWaitForEnter->setCheckable(true); - m_actionWaitForEnter->setChecked(config()->get(Config::SearchWaitForEnter).toBool()); - m_ui->searchIcon->setIcon(icons()->icon("system-search")); m_ui->searchEdit->addAction(m_ui->searchIcon, QLineEdit::LeadingPosition); @@ -92,31 +81,22 @@ SearchWidget::SearchWidget(QWidget* parent) } } -SearchWidget::~SearchWidget() = default; +SearchWidget::~SearchWidget() +{ +} bool SearchWidget::eventFilter(QObject* obj, QEvent* event) { if (event->type() == QEvent::KeyPress) { - auto keyEvent = static_cast(event); + QKeyEvent* keyEvent = static_cast(event); if (keyEvent->key() == Qt::Key_Escape) { emit escapePressed(); return true; } else if (keyEvent->matches(QKeySequence::Copy)) { - // If the system Copy shortcut (typically Ctrl+C or Cmd+C) is pressed - // in the search edit when no text is selected, route the event to the - // main window. With the default shortcut configuration, this will copy - // the password of the current entry to the clipboard. + // If Control+C is pressed in the search edit when no text + // is selected, copy the password of the current entry. if (!m_ui->searchEdit->hasSelectedText()) { - // Prevent infinite recursion, in case the main window ends up - // sending this event back to us. This hasn't actually been observed - // in practice and is just a precaution. - static bool sendingCopyShortcutEvent = false; - if (sendingCopyShortcutEvent) { - return true; - } - sendingCopyShortcutEvent = true; - QCoreApplication::sendEvent(getMainWindow(), event); - sendingCopyShortcutEvent = false; + emit copyPressed(); return true; } } else if (keyEvent->matches(QKeySequence::MoveToNextLine)) { @@ -154,18 +134,19 @@ void SearchWidget::connectSignals(SignalMultiplexer& mx) mx.connect(this, SIGNAL(saveSearch(QString)), SLOT(saveSearch(QString))); mx.connect(this, SIGNAL(caseSensitiveChanged(bool)), SLOT(setSearchCaseSensitive(bool))); mx.connect(this, SIGNAL(limitGroupChanged(bool)), SLOT(setSearchLimitGroup(bool))); + mx.connect(this, SIGNAL(copyPressed()), SLOT(copyPassword())); mx.connect(this, SIGNAL(downPressed()), SLOT(focusOnEntries())); mx.connect(SIGNAL(requestSearch(QString)), m_ui->searchEdit, SLOT(setText(QString))); mx.connect(SIGNAL(clearSearch()), this, SLOT(clearSearch())); mx.connect(SIGNAL(entrySelectionChanged()), this, SLOT(resetSearchClearTimer())); mx.connect(SIGNAL(currentModeChanged(DatabaseWidget::Mode)), this, SLOT(resetSearchClearTimer())); mx.connect(SIGNAL(databaseUnlocked()), this, SLOT(focusSearch())); - mx.connect(this, SIGNAL(enterPressed()), SLOT(switchToEntryEdit())); + mx.connect(m_ui->searchEdit, SIGNAL(returnPressed()), SLOT(switchToEntryEdit())); } void SearchWidget::databaseChanged(DatabaseWidget* dbWidget) { - if (dbWidget) { + if (dbWidget != nullptr) { // Set current search text from this database m_ui->searchEdit->setText(dbWidget->getCurrentSearch()); // Enforce search policy @@ -178,15 +159,18 @@ void SearchWidget::databaseChanged(DatabaseWidget* dbWidget) void SearchWidget::startSearchTimer() { - if (m_actionWaitForEnter->isChecked()) { + if (!m_searchTimer->isActive()) { m_searchTimer->stop(); - } else { - m_searchTimer->start(500); } + m_searchTimer->start(100); } void SearchWidget::startSearch() { + if (!m_searchTimer->isActive()) { + m_searchTimer->stop(); + } + m_ui->saveIcon->setVisible(true); search(m_ui->searchEdit->text()); } @@ -204,18 +188,18 @@ void SearchWidget::updateCaseSensitive() emit caseSensitiveChanged(m_actionCaseSensitive->isChecked()); } -void SearchWidget::updateLimitGroup() -{ - config()->set(Config::SearchLimitGroup, m_actionLimitGroup->isChecked()); - emit limitGroupChanged(m_actionLimitGroup->isChecked()); -} - void SearchWidget::setCaseSensitive(bool state) { m_actionCaseSensitive->setChecked(state); updateCaseSensitive(); } +void SearchWidget::updateLimitGroup() +{ + config()->set(Config::SearchLimitGroup, m_actionLimitGroup->isChecked()); + emit limitGroupChanged(m_actionLimitGroup->isChecked()); +} + void SearchWidget::setLimitGroup(bool state) { m_actionLimitGroup->setChecked(state); @@ -248,12 +232,3 @@ void SearchWidget::showSearchMenu() { m_searchMenu->exec(m_ui->searchEdit->mapToGlobal(m_ui->searchEdit->rect().bottomLeft())); } - -void SearchWidget::onReturnPressed() -{ - if (m_actionWaitForEnter->isChecked()) { - emit search(m_ui->searchEdit->text()); - } else { - emit enterPressed(); - } -} diff --git a/src/gui/SearchWidget.h b/src/gui/SearchWidget.h index 1d048d12b..55edad583 100644 --- a/src/gui/SearchWidget.h +++ b/src/gui/SearchWidget.h @@ -57,6 +57,7 @@ signals: void caseSensitiveChanged(bool state); void limitGroupChanged(bool state); void escapePressed(); + void copyPressed(); void downPressed(); void enterPressed(); void lostFocus(); @@ -68,7 +69,6 @@ public slots: void clearSearch(); private slots: - void onReturnPressed(); void startSearchTimer(); void startSearch(); void updateCaseSensitive(); @@ -84,7 +84,6 @@ private: QTimer* m_clearSearchTimer; QAction* m_actionCaseSensitive; QAction* m_actionLimitGroup; - QAction* m_actionWaitForEnter; QMenu* m_searchMenu; }; diff --git a/src/gui/SettingsWidget.cpp b/src/gui/SettingsWidget.cpp deleted file mode 100644 index fac3362c6..000000000 --- a/src/gui/SettingsWidget.cpp +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright (C) 2023 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 "SettingsWidget.h" - -SettingsWidget::SettingsWidget(QWidget* parent) - : QWidget(parent) -{ -} - -void SettingsWidget::discard() -{ -} diff --git a/src/gui/ShortcutSettingsPage.cpp b/src/gui/ShortcutSettingsPage.cpp deleted file mode 100644 index ffc6d32e8..000000000 --- a/src/gui/ShortcutSettingsPage.cpp +++ /dev/null @@ -1,280 +0,0 @@ -/* - * Copyright (C) 2024 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 "ShortcutSettingsPage.h" - -#include "core/Config.h" -#include "gui/ActionCollection.h" -#include "gui/Icons.h" -#include "gui/MessageBox.h" -#include "gui/widgets/ShortcutWidget.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -class KeySequenceDialog final : public QDialog -{ -public: - explicit KeySequenceDialog(QWidget* parent = nullptr) - : QDialog(parent) - , m_keySeqEdit(new ShortcutWidget(this)) - , m_btnBox(new QDialogButtonBox(QDialogButtonBox::Save | QDialogButtonBox::Cancel - | QDialogButtonBox::RestoreDefaults, - this)) - { - auto* l = new QVBoxLayout(this); - connect(m_btnBox, &QDialogButtonBox::accepted, this, &QDialog::accept); - connect(m_btnBox, &QDialogButtonBox::rejected, this, &QDialog::reject); - connect(m_btnBox, &QDialogButtonBox::clicked, this, &KeySequenceDialog::restoreDefault); - - auto hLayout = new QHBoxLayout(); - l->addLayout(hLayout); - hLayout->addWidget(new QLabel(QObject::tr("Enter Shortcut"))); - hLayout->addWidget(m_keySeqEdit); - - l->addStretch(); - l->addWidget(m_btnBox); - - setFocusProxy(m_keySeqEdit); - } - - QKeySequence keySequence() const - { - return m_keySeqEdit->sequence(); - } - - bool shouldRestoreDefault() const - { - return m_restoreDefault; - } - -private: - void restoreDefault(QAbstractButton* btn) - { - if (m_btnBox->standardButton(btn) == QDialogButtonBox::RestoreDefaults) { - m_restoreDefault = true; - reject(); - } - } - - bool m_restoreDefault = false; - ShortcutWidget* const m_keySeqEdit; - QDialogButtonBox* const m_btnBox; -}; - -class ShortcutSettingsWidget final : public QWidget -{ -public: - explicit ShortcutSettingsWidget(QWidget* parent = nullptr) - : QWidget(parent) - , m_tableView(new QTableView(this)) - , m_filterLineEdit(new QLineEdit(this)) - , m_resetShortcutsButton(new QPushButton(QObject::tr("Reset Shortcuts"), this)) - { - auto h = new QHBoxLayout(); - h->addWidget(m_filterLineEdit); - h->addWidget(m_resetShortcutsButton); - h->setStretch(0, 1); - - auto l = new QVBoxLayout(this); - l->addWidget(new QLabel(QObject::tr("Double click an action to change its shortcut"))); - l->addLayout(h); - l->addWidget(m_tableView); - - m_model.setColumnCount(2); - m_model.setHorizontalHeaderLabels({QObject::tr("Action"), QObject::tr("Shortcuts")}); - - m_proxy.setFilterKeyColumn(-1); - m_proxy.setFilterCaseSensitivity(Qt::CaseInsensitive); - m_proxy.setSourceModel(&m_model); - - m_filterLineEdit->setPlaceholderText(QObject::tr("Filter...")); - connect(m_filterLineEdit, &QLineEdit::textChanged, &m_proxy, &QSortFilterProxyModel::setFilterFixedString); - - connect(m_resetShortcutsButton, &QPushButton::clicked, this, [this]() { - auto ac = ActionCollection::instance(); - for (auto action : ac->actions()) { - action->setShortcut(ac->defaultShortcut(action)); - } - loadSettings(); - }); - - m_tableView->setModel(&m_proxy); - m_tableView->setSortingEnabled(true); - m_tableView->sortByColumn(0, Qt::AscendingOrder); - m_tableView->horizontalHeader()->setSectionResizeMode(0, QHeaderView::ResizeToContents); - m_tableView->horizontalHeader()->setSectionResizeMode(1, QHeaderView::Stretch); - m_tableView->verticalHeader()->hide(); - m_tableView->setEditTriggers(QAbstractItemView::NoEditTriggers); - m_tableView->setSelectionMode(QAbstractItemView::SingleSelection); - m_tableView->setSelectionBehavior(QAbstractItemView::SelectRows); - - connect(m_tableView, &QTableView::doubleClicked, this, &ShortcutSettingsWidget::onDoubleClicked); - } - - void loadSettings() - { - m_changedActions.clear(); - m_filterLineEdit->clear(); - m_model.setRowCount(0); - const auto& actions = ActionCollection::instance()->actions(); - for (auto a : actions) { - auto name = a->toolTip().isEmpty() ? acceleratorsStrippedText(a->text()) : a->toolTip(); - auto col1 = new QStandardItem(name); - col1->setData(QVariant::fromValue(a), Qt::UserRole); - auto col2 = new QStandardItem(a->shortcut().toString()); - m_model.appendRow({col1, col2}); - } - } - - void saveSettings() - { - if (m_changedActions.count()) { - for (const auto& action : m_changedActions.keys()) { - action->setShortcut(m_changedActions.value(action)); - } - ActionCollection::instance()->saveShortcuts(); - } - m_changedActions.clear(); - m_filterLineEdit->clear(); - } - -private: - static QString acceleratorsStrippedText(QString text) - { - for (int i = 0; i < text.size(); ++i) { - if (text.at(i) == QLatin1Char('&') && i + 1 < text.size() && text.at(i + 1) != QLatin1Char('&')) { - text.remove(i, 1); - } - } - return text; - } - - void onDoubleClicked(QModelIndex index) - { - if (index.column() != 0) { - index = index.sibling(index.row(), 0); - } - index = m_proxy.mapToSource(index); - auto action = index.data(Qt::UserRole).value(); - - KeySequenceDialog dialog(this); - int ret = dialog.exec(); - - QKeySequence change; - if (ret == QDialog::Accepted) { - change = dialog.keySequence(); - } else if (dialog.shouldRestoreDefault()) { - change = ActionCollection::instance()->defaultShortcut(action); - } else { - // Rejected - return; - } - - auto conflict = ActionCollection::instance()->isConflictingShortcut(action, change); - bool hasConflict = false; - if (conflict) { - // we conflicted with an action inside action collection - // check if the conflicted action is updated here - if (!m_changedActions.contains(conflict)) { - hasConflict = true; - } else { - if (m_changedActions.value(conflict) == change) { - hasConflict = true; - } - } - } else if (!change.isEmpty()) { - // we did not conflict with any shortcut inside action collection - // check if we conflict with any locally modified action - for (auto chAction : m_changedActions.keys()) { - if (m_changedActions.value(chAction) == change) { - hasConflict = true; - conflict = chAction; - break; - } - } - } - - if (hasConflict) { - auto conflictName = - conflict->toolTip().isEmpty() ? acceleratorsStrippedText(conflict->text()) : conflict->toolTip(); - auto conflictSeq = change.toString(); - - auto ans = MessageBox::question( - this, - QObject::tr("Shortcut Conflict"), - QObject::tr("Shortcut %1 conflicts with '%2'. Overwrite shortcut?").arg(conflictSeq, conflictName), - MessageBox::Overwrite | MessageBox::Discard, - MessageBox::Discard); - if (ans == MessageBox::Discard) { - // Bail out before making any changes - return; - } - - // Reset the conflict shortcut - m_changedActions[conflict] = {}; - for (auto item : m_model.findItems(conflictSeq, Qt::MatchExactly, 1)) { - item->setText(""); - } - } - - m_changedActions[action] = change; - auto item = m_model.itemFromIndex(index.sibling(index.row(), 1)); - item->setText(change.toString()); - } - - QTableView* m_tableView; - QLineEdit* m_filterLineEdit; - QPushButton* m_resetShortcutsButton; - QStandardItemModel m_model; - QSortFilterProxyModel m_proxy; - QHash m_changedActions; -}; - -QString ShortcutSettingsPage::name() -{ - return QObject::tr("Shortcuts"); -} - -QIcon ShortcutSettingsPage::icon() -{ - return icons()->icon("auto-type"); -} - -QWidget* ShortcutSettingsPage::createWidget() -{ - return new ShortcutSettingsWidget(); -} - -void ShortcutSettingsPage::loadSettings(QWidget* widget) -{ - static_cast(widget)->loadSettings(); -} - -void ShortcutSettingsPage::saveSettings(QWidget* widget) -{ - static_cast(widget)->saveSettings(); -} diff --git a/src/gui/TotpDialog.cpp b/src/gui/TotpDialog.cpp index 7b794c08d..e856f5d6a 100644 --- a/src/gui/TotpDialog.cpp +++ b/src/gui/TotpDialog.cpp @@ -20,9 +20,9 @@ #include "ui_TotpDialog.h" #include "core/Clock.h" -#include "core/Totp.h" #include "gui/Clipboard.h" #include "gui/MainWindow.h" +#include "totp/totp.h" #include #include @@ -39,7 +39,6 @@ TotpDialog::TotpDialog(QWidget* parent, Entry* entry) m_step = m_entry->totpSettings()->step; resetCounter(); updateProgressBar(); - updateSeconds(); connect(&m_totpUpdateTimer, SIGNAL(timeout()), this, SLOT(updateProgressBar())); connect(&m_totpUpdateTimer, SIGNAL(timeout()), this, SLOT(updateSeconds())); @@ -54,7 +53,9 @@ TotpDialog::TotpDialog(QWidget* parent, Entry* entry) connect(m_ui->buttonBox, SIGNAL(accepted()), SLOT(copyToClipboard())); } -TotpDialog::~TotpDialog() = default; +TotpDialog::~TotpDialog() +{ +} void TotpDialog::copyToClipboard() { @@ -89,15 +90,10 @@ void TotpDialog::updateSeconds() void TotpDialog::updateTotp() { - bool isValid = false; - QString totpCode = m_entry->totp(&isValid); - if (isValid) { - totpCode.insert(totpCode.size() / 2, " "); - } - m_ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(isValid); - m_ui->progressBar->setVisible(isValid); - m_ui->timerLabel->setVisible(isValid); - m_ui->totpLabel->setText(totpCode); + QString totpCode = m_entry->totp(); + QString firstHalf = totpCode.left(totpCode.size() / 2); + QString secondHalf = totpCode.mid(totpCode.size() / 2); + m_ui->totpLabel->setText(firstHalf + " " + secondHalf); } void TotpDialog::resetCounter() diff --git a/src/gui/TotpDialog.h b/src/gui/TotpDialog.h index cc30a081e..1782c2de8 100644 --- a/src/gui/TotpDialog.h +++ b/src/gui/TotpDialog.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2017 Weslly Honorato + * Copyright (C) 2017 Weslly Honorato <weslly@protonmail.com> * Copyright (C) 2017 KeePassXC Team * * This program is free software: you can redistribute it and/or modify @@ -19,8 +19,6 @@ #ifndef KEEPASSX_TOTPDIALOG_H #define KEEPASSX_TOTPDIALOG_H -#include - #include "core/Database.h" #include "gui/DatabaseWidget.h" diff --git a/src/gui/TotpExportSettingsDialog.cpp b/src/gui/TotpExportSettingsDialog.cpp index 66d6fb1d2..1ac5231d4 100644 --- a/src/gui/TotpExportSettingsDialog.cpp +++ b/src/gui/TotpExportSettingsDialog.cpp @@ -17,15 +17,14 @@ #include "TotpExportSettingsDialog.h" -#include "core/Totp.h" #include "gui/Clipboard.h" #include "gui/MainWindow.h" #include "gui/SquareSvgWidget.h" #include "qrcode/QrCode.h" +#include "totp/totp.h" #include #include -#include #include #include #include @@ -71,7 +70,7 @@ TotpExportSettingsDialog::TotpExportSettingsDialog(DatabaseWidget* parent, Entry m_timer->start(1000); const auto totpSettings = entry->totpSettings(); - if (Totp::hasCustomSettings(totpSettings) || !totpSettings->encoder.shortName.isEmpty()) { + if (totpSettings->custom || !totpSettings->encoder.shortName.isEmpty()) { m_warningLabel->setWordWrap(true); m_warningLabel->setMargin(5); m_warningLabel->setText(tr("NOTE: These TOTP settings are custom and may not work with other authenticators.", @@ -87,7 +86,7 @@ TotpExportSettingsDialog::TotpExportSettingsDialog(DatabaseWidget* parent, Entry QBuffer buffer; qrc.writeSvg(&buffer, logicalDpiX()); m_totpSvgWidget->load(buffer.data()); - const auto minsize = static_cast(logicalDpiX() * 2.5); + const int minsize = static_cast(logicalDpiX() * 2.5); m_totpSvgWidget->setMinimumSize(minsize, minsize); } else { auto errorBox = new QMessageBox(parent); diff --git a/src/gui/TotpExportSettingsDialog.h b/src/gui/TotpExportSettingsDialog.h index c36836f1a..8c80c9be5 100644 --- a/src/gui/TotpExportSettingsDialog.h +++ b/src/gui/TotpExportSettingsDialog.h @@ -18,8 +18,6 @@ #ifndef KEEPASSX_TotpExportSettingsDialog_H #define KEEPASSX_TotpExportSettingsDialog_H -#include - #include "core/Database.h" #include "gui/DatabaseWidget.h" @@ -34,7 +32,7 @@ class TotpExportSettingsDialog : public QDialog public: explicit TotpExportSettingsDialog(DatabaseWidget* parent = nullptr, Entry* entry = nullptr); - ~TotpExportSettingsDialog() override; + ~TotpExportSettingsDialog(); private slots: void copyToClipboard(); diff --git a/src/gui/TotpSetupDialog.cpp b/src/gui/TotpSetupDialog.cpp index e7e0bd749..d33d9ce39 100644 --- a/src/gui/TotpSetupDialog.cpp +++ b/src/gui/TotpSetupDialog.cpp @@ -19,8 +19,8 @@ #include "ui_TotpSetupDialog.h" #include "core/Base32.h" -#include "core/Totp.h" #include "gui/MessageBox.h" +#include "totp/totp.h" TotpSetupDialog::TotpSetupDialog(QWidget* parent, Entry* entry) : QDialog(parent) @@ -29,7 +29,11 @@ TotpSetupDialog::TotpSetupDialog(QWidget* parent, Entry* entry) { m_ui->setupUi(this); setAttribute(Qt::WA_DeleteOnClose); +#if QT_VERSION >= QT_VERSION_CHECK(5, 9, 0) setWindowFlag(Qt::WindowContextHelpButtonHint, false); +#else + setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); +#endif setFixedSize(sizeHint()); connect(m_ui->buttonBox, SIGNAL(rejected()), SLOT(close())); @@ -39,7 +43,9 @@ TotpSetupDialog::TotpSetupDialog(QWidget* parent, Entry* entry) init(); } -TotpSetupDialog::~TotpSetupDialog() = default; +TotpSetupDialog::~TotpSetupDialog() +{ +} void TotpSetupDialog::saveSettings() { @@ -108,7 +114,6 @@ void TotpSetupDialog::init() m_ui->algorithmComboBox->addItem(item.first, item.second); } m_ui->algorithmComboBox->setCurrentIndex(0); - m_ui->invalidKeyLabel->setVisible(false); // Read entry totp settings auto settings = m_entry->totpSettings(); @@ -120,7 +125,7 @@ void TotpSetupDialog::init() if (settings->encoder.shortName == Totp::STEAM_SHORTNAME) { m_ui->radioSteam->setChecked(true); - } else if (Totp::hasCustomSettings(settings)) { + } else if (settings->custom) { m_ui->radioCustom->setChecked(true); m_ui->digitsSpinBox->setValue(settings->digits); int index = m_ui->algorithmComboBox->findData(settings->algorithm); @@ -128,8 +133,5 @@ void TotpSetupDialog::init() m_ui->algorithmComboBox->setCurrentIndex(index); } } - - auto error = Totp::checkValidSettings(settings); - m_ui->invalidKeyLabel->setVisible(!error.isEmpty()); } } diff --git a/src/gui/TotpSetupDialog.h b/src/gui/TotpSetupDialog.h index 8b88cb8e0..9781b3954 100644 --- a/src/gui/TotpSetupDialog.h +++ b/src/gui/TotpSetupDialog.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2017 Weslly Honorato + * Copyright (C) 2017 Weslly Honorato <weslly@protonmail.com> * Copyright (C) 2017 KeePassXC Team * * This program is free software: you can redistribute it and/or modify @@ -19,8 +19,6 @@ #ifndef KEEPASSX_SETUPTOTPDIALOG_H #define KEEPASSX_SETUPTOTPDIALOG_H -#include - #include "core/Database.h" #include "gui/DatabaseWidget.h" diff --git a/src/gui/TotpSetupDialog.ui b/src/gui/TotpSetupDialog.ui index f8c95f4c4..ab15b8ea8 100644 --- a/src/gui/TotpSetupDialog.ui +++ b/src/gui/TotpSetupDialog.ui @@ -14,22 +14,6 @@ Setup TOTP - - - - - 75 - true - - - - Error: secret key is invalid - - - Qt::AlignCenter - - - @@ -226,7 +210,6 @@ customSettingsGroup buttonBox groupBox - invalidKeyLabel seedEdit diff --git a/src/gui/URLEdit.cpp b/src/gui/URLEdit.cpp index fed277f00..d249ddd85 100644 --- a/src/gui/URLEdit.cpp +++ b/src/gui/URLEdit.cpp @@ -1,6 +1,6 @@ /* - * Copyright (C) 2023 KeePassXC Team * Copyright (C) 2014 Felix Geyer + * Copyright (C) 2020 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,8 +18,8 @@ #include "URLEdit.h" +#include "core/Tools.h" #include "gui/Icons.h" -#include "gui/UrlTools.h" #include "gui/styles/StateColorPalette.h" URLEdit::URLEdit(QWidget* parent) @@ -44,7 +44,7 @@ void URLEdit::updateStylesheet() { const QString stylesheetTemplate("QLineEdit { background: %1; }"); - if (!urlTools()->isUrlValid(text())) { + if (!Tools::checkUrlValid(text())) { StateColorPalette statePalette; QColor color = statePalette.color(StateColorPalette::ColorRole::Error); setStyleSheet(stylesheetTemplate.arg(color.name())); diff --git a/src/gui/UpdateCheckDialog.cpp b/src/gui/UpdateCheckDialog.cpp index 6d7015f73..da3169901 100644 --- a/src/gui/UpdateCheckDialog.cpp +++ b/src/gui/UpdateCheckDialog.cpp @@ -22,7 +22,7 @@ #include "config-keepassx.h" #include "gui/Icons.h" -#include "networking/UpdateChecker.h" +#include "updatecheck/UpdateChecker.h" UpdateCheckDialog::UpdateCheckDialog(QWidget* parent) : QDialog(parent) diff --git a/src/gui/UrlTools.cpp b/src/gui/UrlTools.cpp deleted file mode 100644 index 917f2048c..000000000 --- a/src/gui/UrlTools.cpp +++ /dev/null @@ -1,218 +0,0 @@ -/* - * Copyright (C) 2025 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 "UrlTools.h" -#if defined(WITH_XC_NETWORKING) || defined(WITH_XC_BROWSER) -#include -#include -#include -#endif -#include -#include - -const QString UrlTools::URL_WILDCARD = "1kpxcwc1"; - -Q_GLOBAL_STATIC(UrlTools, s_urlTools) - -UrlTools* UrlTools::instance() -{ - return s_urlTools; -} - -QUrl UrlTools::convertVariantToUrl(const QVariant& var) const -{ - QUrl url; - if (var.canConvert()) { - url = var.toUrl(); - } - return url; -} - -#if defined(WITH_XC_NETWORKING) || defined(WITH_XC_BROWSER) -QUrl UrlTools::getRedirectTarget(QNetworkReply* reply) const -{ - QVariant var = reply->attribute(QNetworkRequest::RedirectionTargetAttribute); - QUrl url = convertVariantToUrl(var); - return url; -} - -/** - * Gets the base domain of URL or hostname. - * - * Returns the base domain, e.g. https://another.example.co.uk -> example.co.uk - * Up-to-date list can be found: https://publicsuffix.org/list/public_suffix_list.dat - */ -QString UrlTools::getBaseDomainFromUrl(const QString& url) const -{ - auto qUrl = QUrl::fromUserInput(url); - - auto host = qUrl.host(); - if (isIpAddress(host)) { - return host; - } - - const auto tld = getTopLevelDomainFromUrl(qUrl.toString()); - if (tld.isEmpty() || tld.length() + 1 >= host.length()) { - return host; - } - - // Remove the top level domain part from the hostname, e.g. https://another.example.co.uk -> https://another.example - host.chop(tld.length() + 1); - // Split the URL and select the last part, e.g. https://another.example -> example - QString baseDomain = host.split('.').last(); - // Append the top level domain back to the URL, e.g. example -> example.co.uk - baseDomain.append(QString(".%1").arg(tld)); - - return baseDomain; -} - -/** - * Gets the top level domain from URL. - * - * Returns the TLD e.g. https://another.example.co.uk -> co.uk - */ -QString UrlTools::getTopLevelDomainFromUrl(const QString& url) const -{ - auto host = QUrl::fromUserInput(url).host(); - if (isIpAddress(host)) { - return host; - } - - const auto numberOfDomainParts = host.split('.').length(); - static const auto dummy = QByteArrayLiteral(""); - - // Only loop the amount of different parts found - for (auto i = 0; i < numberOfDomainParts; ++i) { - // Cut the first part from host - host = host.mid(host.indexOf('.') + 1); - - QNetworkCookie cookie(dummy, dummy); - cookie.setDomain(host); - - // Check if dummy cookie's domain/TLD matches with public suffix list - if (!QNetworkCookieJar{}.setCookiesFromUrl(QList{cookie}, QUrl::fromUserInput(url))) { - return host; - } - } - - return host; -} - -bool UrlTools::isIpAddress(const QString& host) const -{ - // Handle IPv6 host with brackets, e.g [::1] - const auto hostAddress = host.startsWith('[') && host.endsWith(']') ? host.mid(1, host.length() - 2) : host; - QHostAddress address(hostAddress); - return address.protocol() == QAbstractSocket::IPv4Protocol || address.protocol() == QAbstractSocket::IPv6Protocol; -} -#endif - -// Returns true if URLs are identical. Paths with "/" are removed during comparison. -// URLs without scheme reverts to https. -// Special handling is needed because QUrl::matches() with QUrl::StripTrailingSlash does not strip "/" paths. -bool UrlTools::isUrlIdentical(const QString& first, const QString& second) const -{ - auto trimUrl = [](QString url) { - url = url.trimmed(); - if (url.endsWith("/")) { - url.remove(url.length() - 1, 1); - } - - return url; - }; - - if (first.isEmpty() || second.isEmpty()) { - return false; - } - - // Replace URL wildcards for comparison if found - const auto firstUrl = trimUrl(QString(first).replace("*", UrlTools::URL_WILDCARD)); - const auto secondUrl = trimUrl(QString(second).replace("*", UrlTools::URL_WILDCARD)); - if (firstUrl == secondUrl) { - return true; - } - - return QUrl(firstUrl).matches(QUrl(secondUrl), QUrl::StripTrailingSlash); -} - -bool UrlTools::isUrlValid(const QString& urlField, bool looseComparison) const -{ - if (urlField.isEmpty() || urlField.startsWith("cmd://", Qt::CaseInsensitive) - || urlField.startsWith("kdbx://", Qt::CaseInsensitive) || urlField.startsWith("{REF:A", Qt::CaseInsensitive)) { - return true; - } - - auto url = urlField; - - // Loose comparison that allows wildcards and exact URL inside " characters - if (looseComparison) { - // Exact URL - if (url.startsWith("\"") && url.endsWith("\"")) { - // Do not allow exact URL with wildcards, or empty exact URL - if (url.contains("*") || url.length() == 2) { - return false; - } - - // Get the URL inside "" - url.remove(0, 1); - url.remove(url.length() - 1, 1); - } else { - // Do not allow URL with just wildcards, or double wildcards - if (url.length() == url.count("*") || url.contains("**") || url.contains("*.*")) { - return false; - } - - url.replace("*", UrlTools::URL_WILDCARD); - } - } - - QUrl qUrl; - if (urlField.contains("://")) { - qUrl = url; - } else { - qUrl = QUrl::fromUserInput(url); - } - - if (qUrl.scheme() != "file" && qUrl.host().isEmpty()) { - return false; - } - -#if defined(WITH_XC_NETWORKING) || defined(WITH_XC_BROWSER) - // Prevent TLD wildcards - if (looseComparison && url.contains(UrlTools::URL_WILDCARD)) { - const auto tld = getTopLevelDomainFromUrl(url); - if (tld.contains(UrlTools::URL_WILDCARD) || qUrl.host() == QString("%1.%2").arg(UrlTools::URL_WILDCARD, tld)) { - return false; - } - } -#endif - - // Check for illegal characters. Adds also the wildcard * to the list - QRegularExpression re("[<>\\^`{|}\\*]"); - auto match = re.match(url); - if (match.hasMatch()) { - return false; - } - - return true; -} - -bool UrlTools::domainHasIllegalCharacters(const QString& domain) const -{ - QRegularExpression re(R"([\s\^#|/:<>\?@\[\]\\])"); - return re.match(domain).hasMatch(); -} diff --git a/src/gui/UrlTools.h b/src/gui/UrlTools.h deleted file mode 100644 index 5cadb45d8..000000000 --- a/src/gui/UrlTools.h +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (C) 2025 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_URLTOOLS_H -#define KEEPASSXC_URLTOOLS_H - -#include "config-keepassx.h" -#include -#include -#include -#if defined(WITH_XC_NETWORKING) || defined(WITH_XC_BROWSER) -#include -#endif - -class UrlTools : public QObject -{ - Q_OBJECT - -public: - explicit UrlTools() = default; - static UrlTools* instance(); - -#if defined(WITH_XC_NETWORKING) || defined(WITH_XC_BROWSER) - QUrl getRedirectTarget(QNetworkReply* reply) const; - QString getBaseDomainFromUrl(const QString& url) const; - QString getTopLevelDomainFromUrl(const QString& url) const; - bool isIpAddress(const QString& host) const; -#endif - bool isUrlIdentical(const QString& first, const QString& second) const; - bool isUrlValid(const QString& urlField, bool looseComparison = false) const; - bool domainHasIllegalCharacters(const QString& domain) const; - - static const QString URL_WILDCARD; - -private: - QUrl convertVariantToUrl(const QVariant& var) const; - -private: - Q_DISABLE_COPY(UrlTools); -}; - -static inline UrlTools* urlTools() -{ - return UrlTools::instance(); -} - -#endif // KEEPASSXC_URLTOOLS_H diff --git a/src/gui/WelcomeWidget.cpp b/src/gui/WelcomeWidget.cpp index 98b0e360e..49563ff73 100644 --- a/src/gui/WelcomeWidget.cpp +++ b/src/gui/WelcomeWidget.cpp @@ -37,25 +37,23 @@ WelcomeWidget::WelcomeWidget(QWidget* parent) m_ui->welcomeLabel->setFont(welcomeLabelFont); m_ui->iconLabel->setPixmap(icons()->applicationIcon().pixmap(64)); - m_ui->buttonNewDatabase->setIcon(icons()->icon("document-new")); - m_ui->buttonNewDatabase->setStyleSheet("text-align:center;"); - m_ui->buttonOpenDatabase->setIcon(icons()->icon("document-open")); - m_ui->buttonOpenDatabase->setStyleSheet("text-align:center;"); - m_ui->buttonImport->setIcon(icons()->icon("document-import")); - m_ui->buttonImport->setStyleSheet("text-align:center;"); refreshLastDatabases(); connect(m_ui->buttonNewDatabase, SIGNAL(clicked()), SIGNAL(newDatabase())); connect(m_ui->buttonOpenDatabase, SIGNAL(clicked()), SIGNAL(openDatabase())); - connect(m_ui->buttonImport, SIGNAL(clicked()), SIGNAL(importFile())); + connect(m_ui->buttonImportKeePass1, SIGNAL(clicked()), SIGNAL(importKeePass1Database())); + connect(m_ui->buttonImportOpVault, SIGNAL(clicked()), SIGNAL(importOpVaultDatabase())); + connect(m_ui->buttonImportCSV, SIGNAL(clicked()), SIGNAL(importCsv())); connect(m_ui->recentListWidget, SIGNAL(itemActivated(QListWidgetItem*)), this, SLOT(openDatabaseFromFile(QListWidgetItem*))); } -WelcomeWidget::~WelcomeWidget() = default; +WelcomeWidget::~WelcomeWidget() +{ +} void WelcomeWidget::openDatabaseFromFile(QListWidgetItem* item) { @@ -84,7 +82,7 @@ void WelcomeWidget::refreshLastDatabases() m_ui->recentListWidget->clear(); const QStringList lastDatabases = config()->get(Config::LastDatabases).toStringList(); for (const QString& database : lastDatabases) { - auto itm = new QListWidgetItem; + QListWidgetItem* itm = new QListWidgetItem; itm->setText(database); m_ui->recentListWidget->addItem(itm); } diff --git a/src/gui/WelcomeWidget.h b/src/gui/WelcomeWidget.h index ed92c7b4b..15f93466c 100644 --- a/src/gui/WelcomeWidget.h +++ b/src/gui/WelcomeWidget.h @@ -32,14 +32,16 @@ class WelcomeWidget : public QWidget public: explicit WelcomeWidget(QWidget* parent = nullptr); - ~WelcomeWidget() override; + ~WelcomeWidget(); void refreshLastDatabases(); signals: void newDatabase(); void openDatabase(); void openDatabaseFile(QString); - void importFile(); + void importKeePass1Database(); + void importOpVaultDatabase(); + void importCsv(); protected: void keyPressEvent(QKeyEvent* event) override; diff --git a/src/gui/WelcomeWidget.ui b/src/gui/WelcomeWidget.ui index 7a753e010..8b72df840 100644 --- a/src/gui/WelcomeWidget.ui +++ b/src/gui/WelcomeWidget.ui @@ -70,22 +70,6 @@ - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 20 - 20 - - - - @@ -119,26 +103,40 @@ + + + + Create new database + + + + + + + Open existing database + + + - + - Create Database + Import from KeePass 1 - + - Open Database + Import from 1Password - + - Import File + Import from CSV @@ -150,12 +148,12 @@ Qt::Vertical - QSizePolicy::Fixed + QSizePolicy::Minimum 0 - 20 + 5 @@ -195,7 +193,11 @@ - buttonImport + buttonNewDatabase + buttonOpenDatabase + buttonImportKeePass1 + buttonImportOpVault + buttonImportCSV recentListWidget diff --git a/src/gui/csvImport/CsvImportWidget.cpp b/src/gui/csvImport/CsvImportWidget.cpp index cbabd3138..a3a30e4c3 100644 --- a/src/gui/csvImport/CsvImportWidget.cpp +++ b/src/gui/csvImport/CsvImportWidget.cpp @@ -1,4 +1,4 @@ -/* +/* * Copyright (C) 2016 Enrico Mariotti * Copyright (C) 2017 KeePassXC Team * @@ -17,72 +17,43 @@ */ #include "CsvImportWidget.h" - #include "ui_CsvImportWidget.h" -#include "core/Clock.h" -#include "core/Database.h" -#include "core/Group.h" -#include "core/Totp.h" -#include "format/CsvParser.h" -#include "format/KeePass2Writer.h" -#include "gui/MessageBox.h" -#include "gui/csvImport/CsvParserModel.h" - #include -namespace -{ - // Extract group names from nested path and return the last group created - Group* createGroupStructure(Database* db, const QString& groupPath) - { - auto group = db->rootGroup(); - if (!group || groupPath.isEmpty()) { - return group; - } +#include "core/Clock.h" +#include "format/KeePass2Writer.h" +#include "gui/MessageBox.h" +#include "totp/totp.h" - auto nameList = groupPath.split("/", Qt::SkipEmptyParts); - // Skip over first group name if root - if (nameList.first().compare("root", Qt::CaseInsensitive) == 0) { - nameList.removeFirst(); - } - - for (const auto& name : qAsConst(nameList)) { - auto child = group->findChildByName(name); - if (!child) { - auto newGroup = new Group(); - newGroup->setUuid(QUuid::createUuid()); - newGroup->setName(name); - newGroup->setParent(group); - group = newGroup; - } else { - group = child; - } - } - return group; - } -} // namespace +// I wanted to make the CSV import GUI future-proof, so if one day you need a new field, +// all you have to do is add a field to m_columnHeader, and the GUI will follow: +// dynamic generation of comboBoxes, labels, placement and so on. Try it for immense fun! CsvImportWidget::CsvImportWidget(QWidget* parent) : QWidget(parent) , m_ui(new Ui::CsvImportWidget()) , m_parserModel(new CsvParserModel(this)) , m_comboModel(new QStringListModel(this)) + , m_columnHeader(QStringList() << QObject::tr("Group") << QObject::tr("Title") << QObject::tr("Username") + << QObject::tr("Password") << QObject::tr("URL") << QObject::tr("Notes") + << QObject::tr("TOTP") << QObject::tr("Icon") << QObject::tr("Last Modified") + << QObject::tr("Created")) + , m_fieldSeparatorList(QStringList() << "," + << ";" + << "-" + << ":" + << "." + << "\t") { m_ui->setupUi(this); m_ui->tableViewFields->setSelectionMode(QAbstractItemView::NoSelection); m_ui->tableViewFields->setFocusPolicy(Qt::NoFocus); - - m_columnHeader << QObject::tr("Group") << QObject::tr("Title") << QObject::tr("Username") << QObject::tr("Password") - << QObject::tr("URL") << QObject::tr("Tags") << QObject::tr("Notes") << QObject::tr("TOTP") - << QObject::tr("Icon") << QObject::tr("Last Modified") << QObject::tr("Created"); - - m_fieldSeparatorList << "," << ";" << "-" << ":" << "." << "\t"; + m_ui->messageWidget->setHidden(true); m_combos << m_ui->groupCombo << m_ui->titleCombo << m_ui->usernameCombo << m_ui->passwordCombo << m_ui->urlCombo - << m_ui->tagsCombo << m_ui->notesCombo << m_ui->totpCombo << m_ui->iconCombo << m_ui->lastModifiedCombo - << m_ui->createdCombo; + << m_ui->notesCombo << m_ui->totpCombo << m_ui->iconCombo << m_ui->lastModifiedCombo << m_ui->createdCombo; for (auto combo : m_combos) { combo->setModel(m_comboModel); @@ -99,12 +70,15 @@ CsvImportWidget::CsvImportWidget(QWidget* parent) connect(m_ui->comboBoxFieldSeparator, SIGNAL(currentIndexChanged(int)), SLOT(parse())); connect(m_ui->checkBoxBackslash, SIGNAL(toggled(bool)), SLOT(parse())); connect(m_ui->checkBoxFieldNames, SIGNAL(toggled(bool)), SLOT(updatePreview())); + + connect(m_ui->buttonBox, SIGNAL(accepted()), this, SLOT(writeDatabase())); + connect(m_ui->buttonBox, SIGNAL(rejected()), this, SLOT(reject())); } void CsvImportWidget::comboChanged(int index) { // this line is the one that actually updates GUI table - m_parserModel->mapColumns(index - 1, m_combos.indexOf(qobject_cast(sender()))); + m_parserModel->mapColumns(index, m_combos.indexOf(qobject_cast(sender()))); updateTableview(); } @@ -114,171 +88,141 @@ void CsvImportWidget::skippedChanged(int rows) updateTableview(); } -CsvImportWidget::~CsvImportWidget() = default; +CsvImportWidget::~CsvImportWidget() +{ +} void CsvImportWidget::configParser() { - auto parser = m_parserModel->parser(); - parser->setBackslashSyntax(m_ui->checkBoxBackslash->isChecked()); - parser->setComment(m_ui->comboBoxComment->currentText().at(0)); - parser->setTextQualifier(m_ui->comboBoxTextQualifier->currentText().at(0)); - parser->setCodec(m_ui->comboBoxCodec->currentText()); - parser->setFieldSeparator(m_fieldSeparatorList.at(m_ui->comboBoxFieldSeparator->currentIndex()).at(0)); + m_parserModel->setBackslashSyntax(m_ui->checkBoxBackslash->isChecked()); + m_parserModel->setComment(m_ui->comboBoxComment->currentText().at(0)); + m_parserModel->setTextQualifier(m_ui->comboBoxTextQualifier->currentText().at(0)); + m_parserModel->setCodec(m_ui->comboBoxCodec->currentText()); + m_parserModel->setFieldSeparator(m_fieldSeparatorList.at(m_ui->comboBoxFieldSeparator->currentIndex()).at(0)); } void CsvImportWidget::updateTableview() { - if (!m_buildingPreview) { - m_ui->tableViewFields->resizeRowsToContents(); - m_ui->tableViewFields->resizeColumnsToContents(); + m_ui->tableViewFields->resizeRowsToContents(); + m_ui->tableViewFields->resizeColumnsToContents(); - for (int c = 0; c < m_ui->tableViewFields->horizontalHeader()->count(); ++c) { - m_ui->tableViewFields->horizontalHeader()->setSectionResizeMode(c, QHeaderView::Stretch); - } + for (int c = 0; c < m_ui->tableViewFields->horizontalHeader()->count(); ++c) { + m_ui->tableViewFields->horizontalHeader()->setSectionResizeMode(c, QHeaderView::Stretch); } } void CsvImportWidget::updatePreview() { - m_buildingPreview = true; - - int minSkip = m_ui->checkBoxFieldNames->isChecked() ? 1 : 0; + int minSkip = 0; + if (m_ui->checkBoxFieldNames->isChecked()) { + minSkip = 1; + } m_ui->labelSizeRowsCols->setText(m_parserModel->getFileInfo()); m_ui->spinBoxSkip->setRange(minSkip, qMax(minSkip, m_parserModel->rowCount() - 1)); m_ui->spinBoxSkip->setValue(minSkip); - // Store the previous column information for comparison later - auto prevColumns = m_comboModel->stringList(); - QList prevComboIndexes; - for (auto combo : m_combos) { - prevComboIndexes << combo->currentIndex(); - } - - QStringList csvColumns(tr("Not Present")); - auto parser = m_parserModel->parser(); - for (int i = 0; i < parser->getCsvCols(); ++i) { + QStringList list(tr("Not Present")); + for (int i = 1; i < m_parserModel->getCsvCols(); ++i) { if (m_ui->checkBoxFieldNames->isChecked()) { - auto columnName = parser->getCsvTable().at(0).at(i); + auto columnName = m_parserModel->getCsvTable().at(0).at(i); if (columnName.isEmpty()) { - csvColumns << QString(tr("Column %1").arg(i)); + list << QString(tr("Column %1").arg(i)); } else { - csvColumns << columnName; + list << columnName; } } else { - csvColumns << QString(tr("Column %1").arg(i)); + list << QString(tr("Column %1").arg(i)); } } - // Before setting new columns, see if they changed - bool newColumns = prevColumns != csvColumns; - m_comboModel->setStringList(csvColumns); + m_comboModel->setStringList(list); - // Try to match named columns to the combo boxes - for (int i = 0; i < m_columnHeader.size(); ++i) { - if (i >= m_combos.size()) { - // This should not happen, it is a programming error otherwise - Q_ASSERT(false); - break; - } - - bool found = false; - for (int j = 0; j < csvColumns.size(); ++j) { - if (m_columnHeader.at(i).compare(csvColumns.at(j), Qt::CaseInsensitive) == 0) { - m_combos.at(i)->setCurrentIndex(j); - found = true; - break; - } - } - // Named column not found, default to "Not Present" or previous index - if (!found) { - auto idx = newColumns ? 0 : prevComboIndexes.at(i); - m_combos.at(i)->setCurrentIndex(idx); + int j = 1; + for (QComboBox* b : m_combos) { + if (j < m_parserModel->getCsvCols()) { + b->setCurrentIndex(j); + } else { + b->setCurrentIndex(0); } + ++j; } - - m_buildingPreview = false; - updateTableview(); } -void CsvImportWidget::load(const QString& filename) +void CsvImportWidget::load(const QString& filename, Database* const db) { - m_filename = filename; + // QApplication::processEvents(); + m_db = db; m_parserModel->setFilename(filename); + m_ui->labelFilename->setText(filename); + Group* group = m_db->rootGroup(); + group->setUuid(QUuid::createUuid()); + group->setNotes(tr("Imported from CSV file").append("\n").append(tr("Original data: ")) + filename); parse(); } void CsvImportWidget::parse() { - // Hide any previous messages - emit message(""); - - QApplication::setOverrideCursor(Qt::WaitCursor); - QApplication::processEvents(); - configParser(); - if (!m_parserModel->parse()) { - emit message(tr("Failed to parse CSV file: %1").arg(formatStatusText())); - } + QApplication::setOverrideCursor(Qt::WaitCursor); + // QApplication::processEvents(); + bool good = m_parserModel->parse(); updatePreview(); - QApplication::restoreOverrideCursor(); + if (!good) { + m_ui->messageWidget->showMessage(tr("Error(s) detected in CSV file!").append("\n").append(formatStatusText()), + MessageWidget::Warning); + } else { + m_ui->messageWidget->setHidden(true); + } } -QSharedPointer CsvImportWidget::buildDatabase() +QString CsvImportWidget::formatStatusText() const { - // Warn if the title column wasn't specified - if (m_combos[1]->currentIndex() == 0) { - auto ans = MessageBox::question( - this, - tr("No Title Selected"), - tr("No title column was selected, entries will be hard to tell apart.\nAre you sure you want to import?"), - MessageBox::Continue | MessageBox::Cancel); - if (ans == MessageBox::Cancel) { - return {}; - } + QString text = m_parserModel->getStatus(); + int items = text.count('\n'); + if (items > 2) { + return text.section('\n', 0, 1).append("\n").append(tr("[%n more message(s) skipped]", "", items - 2)); } + if (items == 1) { + text.append(QString("\n")); + } + return text; +} - auto db = QSharedPointer::create(); - db->rootGroup()->setNotes(tr("Imported from CSV file: %1").arg(m_filename)); - - auto rows = m_parserModel->rowCount() - m_parserModel->skippedRows(); - for (int r = 0; r < rows; ++r) { - auto group = createGroupStructure(db.data(), m_parserModel->data(m_parserModel->index(r, 0)).toString()); - if (!group) { +void CsvImportWidget::writeDatabase() +{ + setRootGroup(); + for (int r = 0; r < m_parserModel->rowCount(); ++r) { + // use validity of second column as a GO/NOGO for all others fields + if (not m_parserModel->data(m_parserModel->index(r, 1)).isValid()) { continue; } - - // Standard entry fields - auto entry = new Entry(); + Entry* entry = new Entry(); entry->setUuid(QUuid::createUuid()); - entry->setGroup(group); + entry->setGroup(splitGroups(m_parserModel->data(m_parserModel->index(r, 0)).toString())); entry->setTitle(m_parserModel->data(m_parserModel->index(r, 1)).toString()); entry->setUsername(m_parserModel->data(m_parserModel->index(r, 2)).toString()); entry->setPassword(m_parserModel->data(m_parserModel->index(r, 3)).toString()); entry->setUrl(m_parserModel->data(m_parserModel->index(r, 4)).toString()); - entry->setTags(m_parserModel->data(m_parserModel->index(r, 5)).toString()); - entry->setNotes(m_parserModel->data(m_parserModel->index(r, 6)).toString()); + entry->setNotes(m_parserModel->data(m_parserModel->index(r, 5)).toString()); - // TOTP - auto otpString = m_parserModel->data(m_parserModel->index(r, 7)); + auto otpString = m_parserModel->data(m_parserModel->index(r, 6)); if (otpString.isValid() && !otpString.toString().isEmpty()) { auto totp = Totp::parseSettings(otpString.toString()); - if (!totp || totp->key.isEmpty()) { + if (totp->key.isEmpty()) { // Bare secret, use default TOTP settings totp = Totp::parseSettings({}, otpString.toString()); } entry->setTotp(totp); } - // Icon bool ok; - int icon = m_parserModel->data(m_parserModel->index(r, 8)).toInt(&ok); + int icon = m_parserModel->data(m_parserModel->index(r, 7)).toInt(&ok); if (ok) { entry->setIcon(icon); } - // Modified Time TimeInfo timeInfo; - if (m_parserModel->data(m_parserModel->index(r, 9)).isValid()) { + if (m_parserModel->data(m_parserModel->index(r, 8)).isValid()) { auto datetime = m_parserModel->data(m_parserModel->index(r, 8)).toString(); if (datetime.contains(QRegularExpression("^\\d+$"))) { auto t = datetime.toLongLong(); @@ -296,8 +240,7 @@ QSharedPointer CsvImportWidget::buildDatabase() } } } - // Creation Time - if (m_parserModel->data(m_parserModel->index(r, 10)).isValid()) { + if (m_parserModel->data(m_parserModel->index(r, 9)).isValid()) { auto datetime = m_parserModel->data(m_parserModel->index(r, 9)).toString(); if (datetime.contains(QRegularExpression("^\\d+$"))) { auto t = datetime.toLongLong(); @@ -314,19 +257,99 @@ QSharedPointer CsvImportWidget::buildDatabase() } entry->setTimeInfo(timeInfo); } + QBuffer buffer; + buffer.open(QBuffer::ReadWrite); - return db; + KeePass2Writer writer; + writer.writeDatabase(&buffer, m_db); + if (writer.hasError()) { + MessageBox::warning(this, + tr("Error"), + tr("CSV import: writer has errors:\n%1").arg(writer.errorString()), + MessageBox::Ok, + MessageBox::Ok); + } + emit editFinished(true); } -QString CsvImportWidget::formatStatusText() const +void CsvImportWidget::setRootGroup() { - QString text = m_parserModel->parser()->getStatus(); - int items = text.count('\n'); - if (items > 2) { - return text.section('\n', 0, 1).append("\n").append(tr("[%n more message(s) skipped]", "", items - 2)); + QString groupLabel; + QStringList groupList; + bool is_root = false; + bool is_empty = false; + bool is_label = false; + + for (int r = 0; r < m_parserModel->rowCount(); ++r) { + // use validity of second column as a GO/NOGO for all others fields + if (not m_parserModel->data(m_parserModel->index(r, 1)).isValid()) { + continue; + } + groupLabel = m_parserModel->data(m_parserModel->index(r, 0)).toString(); + // check if group name is either "root", "" (empty) or some other label + groupList = groupLabel.split("/", QString::SkipEmptyParts); + if (groupList.isEmpty()) { + is_empty = true; + } else if (not groupList.first().compare("Root", Qt::CaseSensitive)) { + is_root = true; + } else if (not groupLabel.compare("")) { + is_empty = true; + } else { + is_label = true; + } + + groupList.clear(); } - if (items == 1) { - text.append(QString("\n")); + + if ((is_empty and is_root) or (is_label and not is_empty and is_root)) { + m_db->rootGroup()->setName("CSV IMPORTED"); + } else { + m_db->rootGroup()->setName("Root"); } - return text; +} + +Group* CsvImportWidget::splitGroups(const QString& label) +{ + // extract group names from nested path provided in "label" + Group* current = m_db->rootGroup(); + if (label.isEmpty()) { + return current; + } + + QStringList groupList = label.split("/", QString::SkipEmptyParts); + // avoid the creation of a subgroup with the same name as Root + if (m_db->rootGroup()->name() == "Root" && groupList.first() == "Root") { + groupList.removeFirst(); + } + + for (const QString& groupName : groupList) { + Group* children = hasChildren(current, groupName); + if (children == nullptr) { + Group* brandNew = new Group(); + brandNew->setParent(current); + brandNew->setName(groupName); + brandNew->setUuid(QUuid::createUuid()); + current = brandNew; + } else { + Q_ASSERT(children != nullptr); + current = children; + } + } + return current; +} + +Group* CsvImportWidget::hasChildren(Group* current, const QString& groupName) +{ + // returns the group whose name is "groupName" and is child of "current" group + for (Group* group : current->children()) { + if (group->name() == groupName) { + return group; + } + } + return nullptr; +} + +void CsvImportWidget::reject() +{ + emit editFinished(false); } diff --git a/src/gui/csvImport/CsvImportWidget.h b/src/gui/csvImport/CsvImportWidget.h index c428d7200..1711e32a6 100644 --- a/src/gui/csvImport/CsvImportWidget.h +++ b/src/gui/csvImport/CsvImportWidget.h @@ -19,13 +19,12 @@ #ifndef KEEPASSX_CSVIMPORTWIDGET_H #define KEEPASSX_CSVIMPORTWIDGET_H -#include -#include +#include -class CsvParserModel; -class Database; -class Group; -class QComboBox; +#include "core/Metadata.h" +#include "gui/csvImport/CsvParserModel.h" + +class QStringListModel; namespace Ui { @@ -38,36 +37,36 @@ class CsvImportWidget : public QWidget public: explicit CsvImportWidget(QWidget* parent = nullptr); - ~CsvImportWidget() override; - - void load(const QString& filename); - QSharedPointer buildDatabase(); + ~CsvImportWidget(); + void load(const QString& filename, Database* const db); signals: - void message(QString msg); + void editFinished(bool accepted); private slots: void parse(); void comboChanged(int index); void skippedChanged(int rows); + void writeDatabase(); void updatePreview(); + void setRootGroup(); + void reject(); private: + Q_DISABLE_COPY(CsvImportWidget) + const QScopedPointer m_ui; + CsvParserModel* const m_parserModel; + QStringListModel* const m_comboModel; + QList m_combos; + Database* m_db; + + const QStringList m_columnHeader; + QStringList m_fieldSeparatorList; void configParser(); void updateTableview(); + Group* splitGroups(const QString& label); + Group* hasChildren(Group* current, const QString& groupName); QString formatStatusText() const; - - QScopedPointer m_ui; - - CsvParserModel* m_parserModel; - QStringListModel* m_comboModel; - QList m_combos; - QStringList m_columnHeader; - QStringList m_fieldSeparatorList; - QString m_filename; - bool m_buildingPreview = false; - - Q_DISABLE_COPY(CsvImportWidget) }; #endif // KEEPASSX_CSVIMPORTWIDGET_H diff --git a/src/gui/csvImport/CsvImportWidget.ui b/src/gui/csvImport/CsvImportWidget.ui index 6fb21e595..7a5627d98 100644 --- a/src/gui/csvImport/CsvImportWidget.ui +++ b/src/gui/csvImport/CsvImportWidget.ui @@ -6,806 +6,763 @@ 0 0 - 820 - 523 + 788 + 530 - - 0 - - - 0 - - - 0 - - - 0 - - - - - - - 75 - true - - - - Column Association - - - - - - - 200 - 16777215 - - - - QComboBox::AdjustToContents - - - - - - - - 200 - 16777215 - - - - QComboBox::AdjustToContents - - - - - - - - 50 - false - - - - Group - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - 2 - - - - - - - - 50 - false - - - - Notes - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - 2 - - - - - - - - 50 - false - - - - Username - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - 2 - - - - - - - - 200 - 16777215 - - - - QComboBox::AdjustToContents - - - - - - - - 200 - 16777215 - - - - QComboBox::AdjustToContents - - - - - - - - 200 - 16777215 - - - - QComboBox::AdjustToContents - - - - - - - - 50 - false - - - - Last Modified - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - 2 - - - - - - - - 200 - 16777215 - - - - QComboBox::AdjustToContents - - - - - - - - 200 - 16777215 - - - - QComboBox::AdjustToContents - - - - - - - - 50 - false - - - - Password - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - 2 - - - - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 6 - 20 - - - - - - - - - 50 - false - - - - Created - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - 2 - - - - - - - - 200 - 16777215 - - - - QComboBox::AdjustToContents - - - - - - - - 50 - false - - - - URL - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - 2 - - - - - - - - 50 - false - - - - TOTP - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - 2 - - - - - - - - 200 - 16777215 - - - - QComboBox::AdjustToContents - - - - - - - - 50 - false - - - - Icon - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - 2 - - - - - - - - 50 - false - - - - Title - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - 2 - - - - - - - - 200 - 16777215 - - - - QComboBox::AdjustToContents - - - - - - - - 50 - false - - - - Tags - - - 2 - - - - - - - - 200 - 16777215 - - - - QComboBox::AdjustToContents - - - - - - - - - - - 75 - true - - - - Encoding - - - - - - - 50 - false - - - - Codec - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 50 - false - - - - Codec - - - false - - - UTF-8 - - - - UTF-8 - - - - - Windows-1252 - - - - - UTF-16 - - - - - UTF-16LE - - - - - - - - - 50 - false - - - - Text is qualified by - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 50 - false - - - - Text qualification - - - false - - - " - - - - " - - - - - ' - - - - - : - - - - - . - - - - - | - - - - - - - - - 50 - false - - - - Fields are separated by - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 50 - false - - - - Field separation - - - false - - - , - - - - , - - - - - ; - - - - - - - - - - - : - - - - - . - - - - - TAB (\t) - - - - - - - - - 50 - false - - - - Comments start with - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 50 - false - - - - Comments start with - - - false - - - # - - - - # - - - - - ; - - - - - : - - - - - @ - - - - - - - - - 50 - false - - - - Header lines skipped - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 50 - false - - - - Number of header lines to discard - - - - - - - - 50 - false - - - - Consider '\' an escape character - - - - - - - - 50 - false - - - - First line has field names - - - true - - - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - + - - - - 75 - true - + + + Qt::ScrollBarAlwaysOff - - Preview + + true - + + + + 0 + 0 + 753 + 615 + + + + + + + + 11 + 75 + true + + + + Import CSV fields + + + + + + + + + filename + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + size, rows, columns + + + + + + + + + + + + 75 + true + + + + Column Association + + + + + + + + + + + + 50 + false + + + + Password + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 2 + + + + + + + + 50 + false + + + + Username + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 2 + + + + + + + + + + + + + + 50 + false + + + + Title + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 2 + + + + + + + + + + + 50 + false + + + + Group + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 2 + + + + + + + + 50 + false + + + + URL + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 2 + + + + + + + + + + + 50 + false + + + + Notes + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 2 + + + + + + + + + + + 50 + false + + + + TOTP + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 2 + + + + + + + + + + + + + + 50 + false + + + + Created + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 2 + + + + + + + + 50 + false + + + + Last Modified + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 2 + + + + + + + + + + + 50 + false + + + + Icon + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 2 + + + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + + 75 + true + + + + Encoding + + + + + + + 50 + false + + + + Codec + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 50 + false + + + + Codec + + + false + + + UTF-8 + + + + UTF-8 + + + + + Windows-1252 + + + + + UTF-16 + + + + + UTF-16LE + + + + + + + + + 50 + false + + + + Text is qualified by + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 50 + false + + + + Text qualification + + + false + + + " + + + + " + + + + + ' + + + + + : + + + + + . + + + + + | + + + + + + + + + 50 + false + + + + Fields are separated by + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 50 + false + + + + Field separation + + + false + + + , + + + + , + + + + + ; + + + + + - + + + + + : + + + + + . + + + + + TAB (\t) + + + + + + + + + 50 + false + + + + Comments start with + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 50 + false + + + + Comments start with + + + false + + + # + + + + # + + + + + ; + + + + + : + + + + + @ + + + + + + + + + 50 + false + + + + Header lines skipped + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + + + 50 + false + + + + Number of header lines to discard + + + + + + + Qt::Horizontal + + + + 122 + 20 + + + + + + + + + + + 50 + false + + + + First line has field names + + + + + + + + 50 + false + + + + Consider '\' an escape character + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + 75 + true + + + + Preview + + + false + + + + + + + 0 + 0 + + + + + 0 + 300 + + + + + 50 + false + + + + CSV import preview + + + false + + + true + + + + + + + + + + + + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + false - - - 3 - - - 0 - - - - - - 50 - false - - - - size, rows, columns - - - - - - - - 0 - 0 - - - - - 800 - 300 - - - - - 50 - false - - - - CSV import preview - - - false - - - true - - - - + + + MessageWidget + QWidget +
    gui/MessageWidget.h
    + 1 +
    +
    + scrollArea + groupCombo + titleCombo + usernameCombo + passwordCombo + urlCombo + notesCombo + totpCombo + iconCombo + lastModifiedCombo + createdCombo comboBoxCodec comboBoxTextQualifier comboBoxFieldSeparator comboBoxComment + spinBoxSkip + checkBoxFieldNames + checkBoxBackslash tableViewFields diff --git a/src/gui/csvImport/CsvImportWizard.cpp b/src/gui/csvImport/CsvImportWizard.cpp new file mode 100644 index 000000000..4595c06d9 --- /dev/null +++ b/src/gui/csvImport/CsvImportWizard.cpp @@ -0,0 +1,45 @@ +/* + * Copyright (C) 2016 Enrico Mariotti + * 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 "CsvImportWizard.h" + +#include + +CsvImportWizard::CsvImportWizard(QWidget* parent) + : DialogyWidget(parent) +{ + m_layout = new QGridLayout(this); + m_layout->addWidget(m_parse = new CsvImportWidget(this), 0, 0); + + connect(m_parse, SIGNAL(editFinished(bool)), this, SLOT(parseFinished(bool))); +} + +CsvImportWizard::~CsvImportWizard() +{ +} + +void CsvImportWizard::load(const QString& filename, Database* database) +{ + m_db = database; + m_parse->load(filename, database); +} + +void CsvImportWizard::parseFinished(bool accepted) +{ + emit importFinished(accepted); +} diff --git a/src/sshagent/OpenSSHKeyGenDialog.h b/src/gui/csvImport/CsvImportWizard.h similarity index 50% rename from src/sshagent/OpenSSHKeyGenDialog.h rename to src/gui/csvImport/CsvImportWizard.h index f46a1abe3..084d8794d 100644 --- a/src/sshagent/OpenSSHKeyGenDialog.h +++ b/src/gui/csvImport/CsvImportWizard.h @@ -1,5 +1,6 @@ /* - * Copyright (C) 2021 Team KeePassXC + * Copyright (C) 2016 Enrico Mariotti + * 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 @@ -15,34 +16,36 @@ * along with this program. If not, see . */ -#ifndef KEEPASSXC_OPENSSHKEYGENDIALOG_H -#define KEEPASSXC_OPENSSHKEYGENDIALOG_H +#ifndef KEEPASSX_CSVIMPORTWIZARD_H +#define KEEPASSX_CSVIMPORTWIZARD_H -#include -class OpenSSHKey; +#include "CsvImportWidget.h" -namespace Ui -{ - class OpenSSHKeyGenDialog; -} +#include "gui/DialogyWidget.h" -class OpenSSHKeyGenDialog : public QDialog +class QGridLayout; + +class CsvImportWidget; + +class CsvImportWizard : public DialogyWidget { Q_OBJECT public: - explicit OpenSSHKeyGenDialog(QWidget* parent = nullptr); - ~OpenSSHKeyGenDialog() override; + explicit CsvImportWizard(QWidget* parent = nullptr); + ~CsvImportWizard() override; + void load(const QString& filename, Database* database); - void accept() override; - void setKey(OpenSSHKey* key); +signals: + void importFinished(bool accepted); private slots: - void typeChanged(); + void parseFinished(bool accepted); private: - QScopedPointer m_ui; - OpenSSHKey* m_key; + QPointer m_db; + CsvImportWidget* m_parse; + QGridLayout* m_layout; }; -#endif // KEEPASSXC_OPENSSHKEYGENDIALOG_H +#endif // KEEPASSX_CSVIMPORTWIZARD_H diff --git a/src/gui/csvImport/CsvParserModel.cpp b/src/gui/csvImport/CsvParserModel.cpp index 892b8917b..77abb5931 100644 --- a/src/gui/csvImport/CsvParserModel.cpp +++ b/src/gui/csvImport/CsvParserModel.cpp @@ -18,23 +18,16 @@ #include "CsvParserModel.h" -#include "core/Tools.h" -#include "format/CsvParser.h" - #include CsvParserModel::CsvParserModel(QObject* parent) : QAbstractTableModel(parent) - , m_parser(new CsvParser()) , m_skipped(0) { } -CsvParserModel::~CsvParserModel() = default; - -CsvParser* CsvParserModel::parser() +CsvParserModel::~CsvParserModel() { - return m_parser; } void CsvParserModel::setFilename(const QString& filename) @@ -44,10 +37,11 @@ void CsvParserModel::setFilename(const QString& filename) QString CsvParserModel::getFileInfo() { - return QString("%1, %2, %3") - .arg(Tools::humanReadableFileSize(m_parser->getFileSize()), - tr("%n row(s)", "CSV row count", m_parser->getCsvRows()), - tr("%n column(s)", "CSV column count", qMax(0, m_parser->getCsvCols() - 1))); + QString a(tr("%1, %2, %3", "file info: bytes, rows, columns") + .arg(tr("%n byte(s)", nullptr, getFileSize()), + tr("%n row(s)", nullptr, getCsvRows()), + tr("%n column(s)", nullptr, qMax(0, getCsvCols() - 1)))); + return a; } bool CsvParserModel::parse() @@ -55,28 +49,37 @@ bool CsvParserModel::parse() bool r; beginResetModel(); m_columnMap.clear(); - if (m_parser->isFileLoaded()) { - r = m_parser->reparse(); + if (CsvParser::isFileLoaded()) { + r = CsvParser::reparse(); } else { QFile csv(m_filename); - r = m_parser->parse(&csv); + r = CsvParser::parse(&csv); } for (int i = 0; i < columnCount(); ++i) { m_columnMap.insert(i, 0); } + addEmptyColumn(); endResetModel(); return r; } +void CsvParserModel::addEmptyColumn() +{ + for (int i = 0; i < m_table.size(); ++i) { + CsvRow r = m_table.at(i); + r.prepend(QString("")); + m_table.replace(i, r); + } +} + void CsvParserModel::mapColumns(int csvColumn, int dbColumn) { - if (dbColumn < 0 || dbColumn >= m_columnMap.size()) { + if ((csvColumn < 0) || (dbColumn < 0)) { return; } beginResetModel(); - if (csvColumn < 0 || csvColumn >= m_parser->getCsvCols()) { - // This indicates a blank cell - m_columnMap[dbColumn] = -1; + if (csvColumn >= getCsvCols()) { + m_columnMap[dbColumn] = 0; // map to the empty column } else { m_columnMap[dbColumn] = csvColumn; } @@ -92,11 +95,6 @@ void CsvParserModel::setSkippedRows(int skipped) emit layoutChanged(); } -int CsvParserModel::skippedRows() const -{ - return m_skipped; -} - void CsvParserModel::setHeaderLabels(const QStringList& labels) { m_columnHeader = labels; @@ -107,7 +105,7 @@ int CsvParserModel::rowCount(const QModelIndex& parent) const if (parent.isValid()) { return 0; } - return m_parser->getCsvRows(); + return getCsvRows(); } int CsvParserModel::columnCount(const QModelIndex& parent) const @@ -120,30 +118,29 @@ int CsvParserModel::columnCount(const QModelIndex& parent) const QVariant CsvParserModel::data(const QModelIndex& index, int role) const { - if (index.column() >= m_columnHeader.size() || index.row() + m_skipped >= rowCount() || !index.isValid()) { - return {}; + if ((index.column() >= m_columnHeader.size()) || (index.row() + m_skipped >= rowCount()) || !index.isValid()) { + return QVariant(); } if (role == Qt::DisplayRole) { - auto column = m_columnMap[index.column()]; - if (column >= 0) { - return m_parser->getCsvTable().at(index.row() + m_skipped).at(column); - } + return m_table.at(index.row() + m_skipped).at(m_columnMap[index.column()]); } - return {}; + return QVariant(); } QVariant CsvParserModel::headerData(int section, Qt::Orientation orientation, int role) const { if (role == Qt::DisplayRole) { if (orientation == Qt::Horizontal) { - if (section >= 0 && section < m_columnHeader.size()) { - return m_columnHeader.at(section); + if ((section < 0) || (section >= m_columnHeader.size())) { + return QVariant(); } + return m_columnHeader.at(section); } else if (orientation == Qt::Vertical) { - if (section + m_skipped < rowCount()) { - return QString::number(section + 1); + if (section + m_skipped >= rowCount()) { + return QVariant(); } + return QString::number(section + 1); } } - return {}; + return QVariant(); } diff --git a/src/gui/csvImport/CsvParserModel.h b/src/gui/csvImport/CsvParserModel.h index d9fb4af46..5e979421c 100644 --- a/src/gui/csvImport/CsvParserModel.h +++ b/src/gui/csvImport/CsvParserModel.h @@ -21,22 +21,20 @@ #include -class CsvParser; +#include "core/Group.h" +#include "format/CsvParser.h" -class CsvParserModel : public QAbstractTableModel +class CsvParserModel : public QAbstractTableModel, public CsvParser { Q_OBJECT public: explicit CsvParserModel(QObject* parent = nullptr); - ~CsvParserModel() override; - + ~CsvParserModel(); void setFilename(const QString& filename); QString getFileInfo(); bool parse(); - CsvParser* parser(); - void setHeaderLabels(const QStringList& labels); void mapColumns(int csvColumn, int dbColumn); @@ -45,16 +43,16 @@ public: QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override; QVariant headerData(int section, Qt::Orientation orientation, int role) const override; +public slots: void setSkippedRows(int skipped); - int skippedRows() const; private: - CsvParser* m_parser; int m_skipped; QString m_filename; QStringList m_columnHeader; // first column of model must be empty (aka combobox row "Not present in CSV file") void addEmptyColumn(); + // mapping CSV columns to keepassx columns QMap m_columnMap; }; diff --git a/src/gui/databasekey/KeyComponentWidget.cpp b/src/gui/databasekey/KeyComponentWidget.cpp index 1fad34427..e0cdc0f8a 100644 --- a/src/gui/databasekey/KeyComponentWidget.cpp +++ b/src/gui/databasekey/KeyComponentWidget.cpp @@ -43,7 +43,9 @@ KeyComponentWidget::KeyComponentWidget(QWidget* parent) m_ui->stackedWidget->blockSignals(prev); } -KeyComponentWidget::~KeyComponentWidget() = default; +KeyComponentWidget::~KeyComponentWidget() +{ +} void KeyComponentWidget::setComponentAdded(bool added) { @@ -73,10 +75,6 @@ KeyComponentWidget::Page KeyComponentWidget::visiblePage() const void KeyComponentWidget::updateAddStatus(bool added) { - if (m_ui->stackedWidget->currentIndex() == Page::Edit) { - emit editCanceled(); - } - if (added) { m_ui->stackedWidget->setCurrentIndex(Page::LeaveOrRemove); } else { @@ -105,6 +103,12 @@ void KeyComponentWidget::cancelEdit() emit editCanceled(); } +void KeyComponentWidget::showEvent(QShowEvent* event) +{ + resetComponentEditWidget(); + QWidget::showEvent(event); +} + void KeyComponentWidget::resetComponentEditWidget() { if (!m_componentWidget || static_cast(m_ui->stackedWidget->currentIndex()) == Page::Edit) { diff --git a/src/gui/databasekey/KeyComponentWidget.h b/src/gui/databasekey/KeyComponentWidget.h index d207e494d..9ea53da96 100644 --- a/src/gui/databasekey/KeyComponentWidget.h +++ b/src/gui/databasekey/KeyComponentWidget.h @@ -104,6 +104,9 @@ signals: void editCanceled(); void componentRemovalRequested(); +protected: + void showEvent(QShowEvent* event) override; + private slots: void updateAddStatus(bool added); void doAdd(); diff --git a/src/gui/databasekey/KeyFileEditWidget.cpp b/src/gui/databasekey/KeyFileEditWidget.cpp index dfaef273c..dc38d05d7 100644 --- a/src/gui/databasekey/KeyFileEditWidget.cpp +++ b/src/gui/databasekey/KeyFileEditWidget.cpp @@ -33,7 +33,9 @@ KeyFileEditWidget::KeyFileEditWidget(DatabaseSettingsWidget* parent) initComponent(); } -KeyFileEditWidget::~KeyFileEditWidget() = default; +KeyFileEditWidget::~KeyFileEditWidget() +{ +} bool KeyFileEditWidget::addToCompositeKey(QSharedPointer key) { diff --git a/src/gui/databasekey/PasswordEditWidget.cpp b/src/gui/databasekey/PasswordEditWidget.cpp index e04f6e0b1..5ed6b6328 100644 --- a/src/gui/databasekey/PasswordEditWidget.cpp +++ b/src/gui/databasekey/PasswordEditWidget.cpp @@ -27,12 +27,11 @@ PasswordEditWidget::PasswordEditWidget(QWidget* parent) , m_compUi(new Ui::PasswordEditWidget()) { initComponent(); - - // Explicitly clear password on cancel - connect(this, &PasswordEditWidget::editCanceled, this, [this] { setPassword({}); }); } -PasswordEditWidget::~PasswordEditWidget() = default; +PasswordEditWidget::~PasswordEditWidget() +{ +} bool PasswordEditWidget::addToCompositeKey(QSharedPointer key) { @@ -62,15 +61,7 @@ bool PasswordEditWidget::isPasswordVisible() const bool PasswordEditWidget::isEmpty() const { - return m_compUi->enterPasswordEdit->text().isEmpty(); -} - -PasswordHealth::Quality PasswordEditWidget::getPasswordQuality() const -{ - QString pwd = m_compUi->enterPasswordEdit->text(); - PasswordHealth passwordHealth(pwd); - - return passwordHealth.quality(); + return (visiblePage() == Page::Edit) && m_compUi->enterPasswordEdit->text().isEmpty(); } QWidget* PasswordEditWidget::componentEditWidget() @@ -86,7 +77,8 @@ void PasswordEditWidget::initComponentEditWidget(QWidget* widget) { Q_UNUSED(widget); Q_ASSERT(m_compEditWidget); - setFocusProxy(m_compUi->enterPasswordEdit); + m_compUi->enterPasswordEdit->setFocus(); + m_compUi->enterPasswordEdit->setQualityVisible(true); m_compUi->repeatPasswordEdit->setQualityVisible(false); } @@ -105,6 +97,16 @@ void PasswordEditWidget::initComponent() "

    Good passwords are long and unique. KeePassXC can generate one for you.

    ")); } +void PasswordEditWidget::hideEvent(QHideEvent* event) +{ + if (!isVisible() && m_compUi->enterPasswordEdit) { + m_compUi->enterPasswordEdit->setText(""); + m_compUi->repeatPasswordEdit->setText(""); + } + + QWidget::hideEvent(event); +} + bool PasswordEditWidget::validate(QString& errorMessage) const { if (m_compUi->enterPasswordEdit->text() != m_compUi->repeatPasswordEdit->text()) { diff --git a/src/gui/databasekey/PasswordEditWidget.h b/src/gui/databasekey/PasswordEditWidget.h index 14dfe1d81..6fc9370ad 100644 --- a/src/gui/databasekey/PasswordEditWidget.h +++ b/src/gui/databasekey/PasswordEditWidget.h @@ -20,8 +20,6 @@ #include "KeyComponentWidget.h" -#include "core/PasswordHealth.h" - namespace Ui { class PasswordEditWidget; @@ -40,13 +38,13 @@ public: void setPasswordVisible(bool visible); bool isPasswordVisible() const; bool isEmpty() const; - PasswordHealth::Quality getPasswordQuality() const; bool validate(QString& errorMessage) const override; protected: QWidget* componentEditWidget() override; void initComponentEditWidget(QWidget* widget) override; void initComponent() override; + void hideEvent(QHideEvent* event) override; private slots: void setPassword(const QString& password); diff --git a/src/gui/databasekey/YubiKeyEditWidget.cpp b/src/gui/databasekey/YubiKeyEditWidget.cpp index edac12af0..2e6cf4ff3 100644 --- a/src/gui/databasekey/YubiKeyEditWidget.cpp +++ b/src/gui/databasekey/YubiKeyEditWidget.cpp @@ -16,33 +16,26 @@ */ #include "YubiKeyEditWidget.h" - #include "ui_KeyComponentWidget.h" #include "ui_YubiKeyEditWidget.h" +#include "config-keepassx.h" #include "core/AsyncTask.h" -#include "gui/Icons.h" #include "keys/ChallengeResponseKey.h" #include "keys/CompositeKey.h" -#ifdef WITH_XC_YUBIKEY -#include "keys/drivers/YubiKeyInterfaceUSB.h" -#endif YubiKeyEditWidget::YubiKeyEditWidget(QWidget* parent) : KeyComponentWidget(parent) , m_compUi(new Ui::YubiKeyEditWidget()) -#ifdef WITH_XC_YUBIKEY - , m_deviceListener(new DeviceListener(this)) -#endif { initComponent(); -#ifdef WITH_XC_YUBIKEY + connect(YubiKey::instance(), SIGNAL(detectComplete(bool)), SLOT(hardwareKeyResponse(bool)), Qt::QueuedConnection); - connect(m_deviceListener, &DeviceListener::devicePlugged, this, [&](bool, void*, void*) { pollYubikey(); }); -#endif } -YubiKeyEditWidget::~YubiKeyEditWidget() = default; +YubiKeyEditWidget::~YubiKeyEditWidget() +{ +} bool YubiKeyEditWidget::addToCompositeKey(QSharedPointer key) { @@ -83,48 +76,19 @@ QWidget* YubiKeyEditWidget::componentEditWidget() m_compUi->yubikeyProgress->setSizePolicy(sp); m_compUi->yubikeyProgress->setVisible(false); +#ifdef WITH_XC_YUBIKEY + connect(m_compUi->buttonRedetectYubikey, SIGNAL(clicked()), SLOT(pollYubikey())); + pollYubikey(); +#endif + return m_compEditWidget; } -void YubiKeyEditWidget::showEvent(QShowEvent* event) -{ - KeyComponentWidget::showEvent(event); - -#ifdef WITH_XC_YUBIKEY -#ifdef Q_OS_WIN - m_deviceListener->registerHotplugCallback(true, - true, - YubiKeyInterfaceUSB::YUBICO_USB_VID, - DeviceListener::MATCH_ANY, - &DeviceListenerWin::DEV_CLS_KEYBOARD); - m_deviceListener->registerHotplugCallback(true, - true, - YubiKeyInterfaceUSB::ONLYKEY_USB_VID, - DeviceListener::MATCH_ANY, - &DeviceListenerWin::DEV_CLS_KEYBOARD); -#else - m_deviceListener->registerHotplugCallback(true, true, YubiKeyInterfaceUSB::YUBICO_USB_VID); - m_deviceListener->registerHotplugCallback(true, true, YubiKeyInterfaceUSB::ONLYKEY_USB_VID); -#endif -#endif -} - -void YubiKeyEditWidget::hideEvent(QHideEvent* event) -{ - KeyComponentWidget::hideEvent(event); -#ifdef WITH_XC_YUBIKEY - m_deviceListener->deregisterAllHotplugCallbacks(); -#endif -} - void YubiKeyEditWidget::initComponentEditWidget(QWidget* widget) { Q_UNUSED(widget); Q_ASSERT(m_compEditWidget); m_compUi->comboChallengeResponse->setFocus(); - m_compUi->refreshHardwareKeys->setIcon(icons()->icon("yubikey-refresh", true)); - connect(m_compUi->refreshHardwareKeys, &QPushButton::clicked, this, &YubiKeyEditWidget::pollYubikey); - pollYubikey(); } void YubiKeyEditWidget::initComponent() @@ -139,9 +103,9 @@ void YubiKeyEditWidget::initComponent() m_ui->componentDescription->setText( tr("

    If you own a YubiKey or " "OnlyKey, you can use it for additional security.

    " - "

    The key requires one of its slots to be programmed with " - "" - "Challenge-Response.

    ")); + "

    The key requires one of its slots to be programmed as " + "" + "HMAC-SHA1 Challenge-Response.

    ")); } void YubiKeyEditWidget::pollYubikey() @@ -154,9 +118,9 @@ void YubiKeyEditWidget::pollYubikey() m_isDetected = false; m_compUi->comboChallengeResponse->clear(); m_compUi->comboChallengeResponse->addItem(tr("Detecting hardware keys…")); + m_compUi->buttonRedetectYubikey->setEnabled(false); m_compUi->comboChallengeResponse->setEnabled(false); m_compUi->yubikeyProgress->setVisible(true); - m_compUi->refreshHardwareKeys->setEnabled(false); YubiKey::instance()->findValidKeysAsync(); #endif @@ -169,24 +133,20 @@ void YubiKeyEditWidget::hardwareKeyResponse(bool found) } m_compUi->comboChallengeResponse->clear(); - m_compUi->refreshHardwareKeys->setEnabled(true); + m_compUi->buttonRedetectYubikey->setEnabled(true); + m_compUi->yubikeyProgress->setVisible(false); if (!found) { - m_compUi->yubikeyProgress->setVisible(false); - m_compUi->comboChallengeResponse->addItem(YubiKey::instance()->connectedKeys() > 0 - ? tr("Hardware keys found, but no slots are configured") - : tr("No hardware keys detected")); + m_compUi->comboChallengeResponse->addItem(tr("No hardware keys detected")); m_isDetected = false; return; } - const auto foundKeys = YubiKey::instance()->foundKeys(); - for (auto i = foundKeys.cbegin(); i != foundKeys.cend(); ++i) { + for (auto& slot : YubiKey::instance()->foundKeys()) { // add detected YubiKey to combo box and encode blocking mode in LSB, slot number in second LSB - m_compUi->comboChallengeResponse->addItem(i.value(), QVariant::fromValue(i.key())); + m_compUi->comboChallengeResponse->addItem(YubiKey::instance()->getDisplayName(slot), QVariant::fromValue(slot)); } m_isDetected = true; - m_compUi->yubikeyProgress->setVisible(false); m_compUi->comboChallengeResponse->setEnabled(true); } diff --git a/src/gui/databasekey/YubiKeyEditWidget.h b/src/gui/databasekey/YubiKeyEditWidget.h index fc63f1946..e21b632a6 100644 --- a/src/gui/databasekey/YubiKeyEditWidget.h +++ b/src/gui/databasekey/YubiKeyEditWidget.h @@ -19,10 +19,6 @@ #define KEEPASSXC_YUBIKEYEDITWIDGET_H #include "KeyComponentWidget.h" -#include "config-keepassx.h" -#ifdef WITH_XC_YUBIKEY -#include "gui/osutils/DeviceListener.h" -#endif namespace Ui { @@ -47,8 +43,6 @@ protected: QWidget* componentEditWidget() override; void initComponentEditWidget(QWidget* widget) override; void initComponent() override; - void showEvent(QShowEvent* event) override; - void hideEvent(QHideEvent* event) override; private slots: void hardwareKeyResponse(bool found); @@ -57,9 +51,6 @@ private slots: private: const QScopedPointer m_compUi; QPointer m_compEditWidget; -#ifdef WITH_XC_YUBIKEY - QPointer m_deviceListener; -#endif bool m_isDetected = false; }; diff --git a/src/gui/databasekey/YubiKeyEditWidget.ui b/src/gui/databasekey/YubiKeyEditWidget.ui index 02881817f..fa150084b 100644 --- a/src/gui/databasekey/YubiKeyEditWidget.ui +++ b/src/gui/databasekey/YubiKeyEditWidget.ui @@ -24,84 +24,51 @@ 0 - - - 6 + + + 0 - - - - 0 + + + + Refresh hardware tokens - - - - - 0 - 0 - - - - Hardware key slot selection - - - - - - - - 16777215 - 2 - - - - 0 - - - -1 - - - false - - - - + + Refresh + + - - - + + + + + 0 + 0 + + + + Hardware key slot selection + + + + + + + + 16777215 + 2 + + + 0 - - - - Refresh hardware keys - - - Refresh hardware keys - - - - - - - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 0 - 2 - - - - - + + -1 + + + false + + @@ -120,6 +87,10 @@
    + + comboChallengeResponse + buttonRedetectYubikey + diff --git a/src/gui/dbsettings/DatabaseSettingsDialog.cpp b/src/gui/dbsettings/DatabaseSettingsDialog.cpp index fd772c291..6d96dd769 100644 --- a/src/gui/dbsettings/DatabaseSettingsDialog.cpp +++ b/src/gui/dbsettings/DatabaseSettingsDialog.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2023 KeePassXC Team + * Copyright (C) 2018 KeePassXC Team * Copyright (C) 2012 Felix Geyer * * This program is free software: you can redistribute it and/or modify @@ -17,50 +17,73 @@ */ #include "DatabaseSettingsDialog.h" +#include "ui_DatabaseSettingsDialog.h" + #include "DatabaseSettingsWidgetDatabaseKey.h" #include "DatabaseSettingsWidgetEncryption.h" #include "DatabaseSettingsWidgetGeneral.h" #ifdef WITH_XC_BROWSER #include "DatabaseSettingsWidgetBrowser.h" #endif -#include "../remote/DatabaseSettingsWidgetRemote.h" #include "DatabaseSettingsWidgetMaintenance.h" #ifdef WITH_XC_KEESHARE -#include "keeshare/DatabaseSettingsWidgetKeeShare.h" +#include "keeshare/DatabaseSettingsPageKeeShare.h" #endif #ifdef WITH_XC_FDOSECRETS -#include "fdosecrets/widgets/DatabaseSettingsWidgetFdoSecrets.h" +#include "fdosecrets/DatabaseSettingsPageFdoSecrets.h" #endif +#include "core/Config.h" #include "core/Database.h" #include "core/Global.h" #include "gui/Icons.h" #include +class DatabaseSettingsDialog::ExtraPage +{ +public: + ExtraPage(IDatabaseSettingsPage* page, QWidget* widget) + : settingsPage(page) + , widget(widget) + { + } + void loadSettings(QSharedPointer db) const + { + settingsPage->loadSettings(widget, db); + } + void saveSettings() const + { + settingsPage->saveSettings(widget); + } + +private: + QSharedPointer settingsPage; + QWidget* widget; +}; + DatabaseSettingsDialog::DatabaseSettingsDialog(QWidget* parent) - : EditWidget(parent) + : DialogyWidget(parent) + , m_ui(new Ui::DatabaseSettingsDialog()) , m_generalWidget(new DatabaseSettingsWidgetGeneral(this)) , m_securityTabWidget(new QTabWidget(this)) , m_databaseKeyWidget(new DatabaseSettingsWidgetDatabaseKey(this)) , m_encryptionWidget(new DatabaseSettingsWidgetEncryption(this)) #ifdef WITH_XC_BROWSER , m_browserWidget(new DatabaseSettingsWidgetBrowser(this)) -#endif -#ifdef WITH_XC_KEESHARE - , m_keeShareWidget(new DatabaseSettingsWidgetKeeShare(this)) -#endif -#ifdef WITH_XC_FDOSECRETS - , m_fdoSecretsWidget(new DatabaseSettingsWidgetFdoSecrets(this)) #endif , m_maintenanceWidget(new DatabaseSettingsWidgetMaintenance(this)) - , m_remoteWidget(new DatabaseSettingsWidgetRemote(this)) { - connect(this, SIGNAL(accepted()), SLOT(save())); - connect(this, SIGNAL(rejected()), SLOT(reject())); + m_ui->setupUi(this); - addPage(tr("General"), icons()->icon("preferences-other"), m_generalWidget); - addPage(tr("Security"), icons()->icon("security-high"), m_securityTabWidget); + connect(m_ui->buttonBox, SIGNAL(accepted()), SLOT(save())); + connect(m_ui->buttonBox, SIGNAL(rejected()), SLOT(reject())); + + m_ui->categoryList->addCategory(tr("General"), icons()->icon("preferences-other")); + m_ui->categoryList->addCategory(tr("Security"), icons()->icon("security-high")); + m_ui->stackedWidget->addWidget(m_generalWidget); + + m_ui->stackedWidget->addWidget(m_securityTabWidget); auto* scrollArea = new QScrollArea(parent); scrollArea->setFrameShape(QFrame::NoFrame); @@ -69,117 +92,131 @@ DatabaseSettingsDialog::DatabaseSettingsDialog(QWidget* parent) scrollArea->setSizeAdjustPolicy(QScrollArea::AdjustToContents); scrollArea->setWidgetResizable(true); scrollArea->setWidget(m_databaseKeyWidget); - - m_securityTabWidget->setObjectName("securityTabWidget"); m_securityTabWidget->addTab(scrollArea, tr("Database Credentials")); + m_securityTabWidget->addTab(m_encryptionWidget, tr("Encryption Settings")); +#if defined(WITH_XC_KEESHARE) + addSettingsPage(new DatabaseSettingsPageKeeShare()); +#endif + +#if defined(WITH_XC_FDOSECRETS) + addSettingsPage(new DatabaseSettingsPageFdoSecrets()); +#endif + + m_ui->stackedWidget->setCurrentIndex(0); m_securityTabWidget->setCurrentIndex(0); - addPage(tr("Remote Sync"), icons()->icon("remote-sync"), m_remoteWidget); + connect(m_securityTabWidget, SIGNAL(currentChanged(int)), SLOT(pageChanged())); + connect(m_ui->categoryList, SIGNAL(categoryChanged(int)), m_ui->stackedWidget, SLOT(setCurrentIndex(int))); + connect(m_ui->advancedSettingsToggle, SIGNAL(toggled(bool)), SLOT(toggleAdvancedMode(bool))); #ifdef WITH_XC_BROWSER - addPage(tr("Browser Integration"), icons()->icon("internet-web-browser"), m_browserWidget); + m_ui->categoryList->addCategory(tr("Browser Integration"), icons()->icon("internet-web-browser")); + m_ui->stackedWidget->addWidget(m_browserWidget); #endif -#ifdef WITH_XC_KEESHARE - addPage(tr("KeeShare"), icons()->icon("preferences-system-network-sharing"), m_keeShareWidget); -#endif + m_ui->categoryList->addCategory(tr("Maintenance"), icons()->icon("hammer-wrench")); + m_ui->stackedWidget->addWidget(m_maintenanceWidget); -#ifdef WITH_XC_FDOSECRETS - addPage(tr("Secret Service Integration"), icons()->icon(QStringLiteral("freedesktop")), m_fdoSecretsWidget); -#endif - - addPage(tr("Maintenance"), icons()->icon("hammer-wrench"), m_maintenanceWidget); - - setCurrentPage(0); + pageChanged(); } -DatabaseSettingsDialog::~DatabaseSettingsDialog() = default; +DatabaseSettingsDialog::~DatabaseSettingsDialog() +{ +} void DatabaseSettingsDialog::load(const QSharedPointer& db) { - // Default to the main page on load - setCurrentPage(0); - setHeadline(tr("Database Settings: %1").arg(db->canonicalFilePath())); - - m_generalWidget->loadSettings(db); - m_databaseKeyWidget->loadSettings(db); - m_encryptionWidget->loadSettings(db); - m_remoteWidget->loadSettings(db); + m_ui->categoryList->setCurrentCategory(0); + m_generalWidget->load(db); + m_databaseKeyWidget->load(db); + m_encryptionWidget->load(db); #ifdef WITH_XC_BROWSER - m_browserWidget->loadSettings(db); + m_browserWidget->load(db); #endif -#ifdef WITH_XC_KEESHARE - m_keeShareWidget->loadSettings(db); -#endif -#ifdef WITH_XC_FDOSECRETS - m_fdoSecretsWidget->loadSettings(db); -#endif - m_maintenanceWidget->loadSettings(db); - + m_maintenanceWidget->load(db); + for (const ExtraPage& page : asConst(m_extraPages)) { + page.loadSettings(db); + } + m_ui->advancedSettingsToggle->setChecked(config()->get(Config::GUI_AdvancedSettings).toBool()); m_db = db; } +void DatabaseSettingsDialog::addSettingsPage(IDatabaseSettingsPage* page) +{ + const int category = m_ui->categoryList->currentCategory(); + QWidget* widget = page->createWidget(); + widget->setParent(this); + m_extraPages.append(ExtraPage(page, widget)); + m_ui->stackedWidget->addWidget(widget); + m_ui->categoryList->addCategory(page->name(), page->icon()); + m_ui->categoryList->setCurrentCategory(category); +} + /** * Show page and tab with database database key settings. */ -void DatabaseSettingsDialog::showDatabaseKeySettings(int index) +void DatabaseSettingsDialog::showDatabaseKeySettings() { - setCurrentPage(1); - m_securityTabWidget->setCurrentIndex(index); -} - -void DatabaseSettingsDialog::showRemoteSettings() -{ - setCurrentPage(2); + m_ui->categoryList->setCurrentCategory(1); + m_securityTabWidget->setCurrentIndex(0); } void DatabaseSettingsDialog::save() { - if (!m_generalWidget->saveSettings()) { - setCurrentPage(0); + if (!m_generalWidget->save()) { return; } - if (!m_databaseKeyWidget->saveSettings()) { - setCurrentPage(1); - m_securityTabWidget->setCurrentIndex(0); + if (!m_databaseKeyWidget->save()) { return; } - if (!m_encryptionWidget->saveSettings()) { - setCurrentPage(1); - m_securityTabWidget->setCurrentIndex(1); + if (!m_encryptionWidget->save()) { return; } - if (!m_remoteWidget->saveSettings()) { - setCurrentPage(2); - return; + for (const ExtraPage& extraPage : asConst(m_extraPages)) { + extraPage.saveSettings(); } - // Browser settings don't have anything to save - -#ifdef WITH_XC_KEESHARE - m_keeShareWidget->saveSettings(); -#endif -#ifdef WITH_XC_FDOSECRETS - m_fdoSecretsWidget->saveSettings(); -#endif - emit editFinished(true); } void DatabaseSettingsDialog::reject() { - m_generalWidget->discard(); - m_databaseKeyWidget->discard(); - m_encryptionWidget->discard(); - m_remoteWidget->discard(); -#ifdef WITH_XC_BROWSER - m_browserWidget->discard(); -#endif - emit editFinished(false); } + +void DatabaseSettingsDialog::pageChanged() +{ + int pageIndex = m_ui->stackedWidget->currentIndex(); + + bool enabled = (pageIndex == Page::General && m_generalWidget->hasAdvancedMode()); + + if (Page::Security == pageIndex) { + int tabIndex = m_securityTabWidget->currentIndex(); + enabled = (tabIndex == 0 && m_databaseKeyWidget->hasAdvancedMode()); + enabled |= (tabIndex == 1 && m_encryptionWidget->hasAdvancedMode()); + } + + m_ui->advancedSettingsToggle->setEnabled(enabled); +} + +void DatabaseSettingsDialog::toggleAdvancedMode(bool advanced) +{ + if (m_generalWidget->hasAdvancedMode()) { + m_generalWidget->setAdvancedMode(advanced); + } + + if (m_databaseKeyWidget->hasAdvancedMode()) { + m_databaseKeyWidget->setAdvancedMode(advanced); + } + + if (m_encryptionWidget->hasAdvancedMode()) { + m_encryptionWidget->setAdvancedMode(advanced); + } + + config()->set(Config::GUI_AdvancedSettings, advanced); +} diff --git a/src/gui/dbsettings/DatabaseSettingsDialog.h b/src/gui/dbsettings/DatabaseSettingsDialog.h index 83bc56abe..512c47a1a 100644 --- a/src/gui/dbsettings/DatabaseSettingsDialog.h +++ b/src/gui/dbsettings/DatabaseSettingsDialog.h @@ -1,5 +1,4 @@ /* - * Copyright (C) 2023 KeePassXC Team * Copyright (C) 2012 Felix Geyer * * This program is free software: you can redistribute it and/or modify @@ -16,11 +15,11 @@ * along with this program. If not, see . */ -#ifndef KEEPASSXC_DATABASESETTINGSDIALOG_H -#define KEEPASSXC_DATABASESETTINGSDIALOG_H +#ifndef KEEPASSX_DATABASESETTINGSWIDGET_H +#define KEEPASSX_DATABASESETTINGSWIDGET_H #include "config-keepassx.h" -#include "gui/EditWidget.h" +#include "gui/DialogyWidget.h" #include @@ -31,17 +30,28 @@ class DatabaseSettingsWidgetDatabaseKey; #ifdef WITH_XC_BROWSER class DatabaseSettingsWidgetBrowser; #endif -#ifdef WITH_XC_KEESHARE -class DatabaseSettingsWidgetKeeShare; -#endif -#ifdef WITH_XC_FDOSECRETS -class DatabaseSettingsWidgetFdoSecrets; -#endif class DatabaseSettingsWidgetMaintenance; -class DatabaseSettingsWidgetRemote; class QTabWidget; -class DatabaseSettingsDialog : public EditWidget +namespace Ui +{ + class DatabaseSettingsDialog; +} + +class IDatabaseSettingsPage +{ +public: + virtual ~IDatabaseSettingsPage() + { + } + virtual QString name() = 0; + virtual QIcon icon() = 0; + virtual QWidget* createWidget() = 0; + virtual void loadSettings(QWidget* widget, QSharedPointer db) = 0; + virtual void saveSettings(QWidget* widget) = 0; +}; + +class DatabaseSettingsDialog : public DialogyWidget { Q_OBJECT @@ -51,8 +61,8 @@ public: Q_DISABLE_COPY(DatabaseSettingsDialog); void load(const QSharedPointer& db); - void showDatabaseKeySettings(int index = 0); - void showRemoteSettings(); + void addSettingsPage(IDatabaseSettingsPage* page); + void showDatabaseKeySettings(); signals: void editFinished(bool accepted); @@ -60,24 +70,29 @@ signals: private slots: void save(); void reject(); + void pageChanged(); + void toggleAdvancedMode(bool advanced); private: + enum Page + { + General = 0, + Security = 1 + }; + QSharedPointer m_db; + const QScopedPointer m_ui; QPointer m_generalWidget; QPointer m_securityTabWidget; QPointer m_databaseKeyWidget; QPointer m_encryptionWidget; #ifdef WITH_XC_BROWSER QPointer m_browserWidget; -#endif -#ifdef WITH_XC_KEESHARE - QPointer m_keeShareWidget; -#endif -#ifdef WITH_XC_FDOSECRETS - QPointer m_fdoSecretsWidget; #endif QPointer m_maintenanceWidget; - QPointer m_remoteWidget; + + class ExtraPage; + QList m_extraPages; }; -#endif // KEEPASSXC_DATABASESETTINGSDIALOG_H +#endif // KEEPASSX_DATABASESETTINGSWIDGET_H diff --git a/src/gui/dbsettings/DatabaseSettingsDialog.ui b/src/gui/dbsettings/DatabaseSettingsDialog.ui new file mode 100644 index 000000000..1e10e4f1d --- /dev/null +++ b/src/gui/dbsettings/DatabaseSettingsDialog.ui @@ -0,0 +1,50 @@ + + + DatabaseSettingsDialog + + + + + + + + + + + -1 + + + + + + + + + + + Advanced Settings + + + + + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + + + CategoryListWidget + QWidget +
    gui/CategoryListWidget.h
    + 1 +
    +
    + + +
    diff --git a/src/gui/dbsettings/DatabaseSettingsWidget.cpp b/src/gui/dbsettings/DatabaseSettingsWidget.cpp index 99d6fff11..b2536f203 100644 --- a/src/gui/dbsettings/DatabaseSettingsWidget.cpp +++ b/src/gui/dbsettings/DatabaseSettingsWidget.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2023 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 @@ -23,7 +23,9 @@ DatabaseSettingsWidget::DatabaseSettingsWidget(QWidget* parent) { } -DatabaseSettingsWidget::~DatabaseSettingsWidget() = default; +DatabaseSettingsWidget::~DatabaseSettingsWidget() +{ +} /** * Load the database to be configured by this page and initialize the page. @@ -31,7 +33,7 @@ DatabaseSettingsWidget::~DatabaseSettingsWidget() = default; * * @param db database object to be configured */ -void DatabaseSettingsWidget::loadSettings(QSharedPointer db) +void DatabaseSettingsWidget::load(QSharedPointer db) { m_db = std::move(db); initialize(); diff --git a/src/gui/dbsettings/DatabaseSettingsWidget.h b/src/gui/dbsettings/DatabaseSettingsWidget.h index 89c048a8d..243245138 100644 --- a/src/gui/dbsettings/DatabaseSettingsWidget.h +++ b/src/gui/dbsettings/DatabaseSettingsWidget.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2023 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 @@ -18,7 +18,7 @@ #ifndef KEEPASSXC_DATABASESETTINGSWIDGET_H #define KEEPASSXC_DATABASESETTINGSWIDGET_H -#include "gui/SettingsWidget.h" +#include "gui/settings/SettingsWidget.h" class Database; @@ -34,7 +34,7 @@ public: Q_DISABLE_COPY(DatabaseSettingsWidget); ~DatabaseSettingsWidget() override; - virtual void loadSettings(QSharedPointer db); + virtual void load(QSharedPointer db); const QSharedPointer getDatabase() const; diff --git a/src/gui/dbsettings/DatabaseSettingsWidgetBrowser.cpp b/src/gui/dbsettings/DatabaseSettingsWidgetBrowser.cpp index fa52c8b8f..aa91fa451 100644 --- a/src/gui/dbsettings/DatabaseSettingsWidgetBrowser.cpp +++ b/src/gui/dbsettings/DatabaseSettingsWidgetBrowser.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2024 KeePassXC Team + * Copyright (C) 2018 KeePassXC Team * Copyright (C) 2018 Sami Vänttinen * * This program is free software: you can redistribute it and/or modify @@ -48,6 +48,8 @@ DatabaseSettingsWidgetBrowser::DatabaseSettingsWidgetBrowser(QWidget* parent) // clang-format on connect(m_ui->removeCustomDataButton, SIGNAL(clicked()), SLOT(removeSelectedKey())); + connect(m_ui->convertToCustomData, SIGNAL(clicked()), this, SLOT(convertAttributesToCustomData())); + connect(m_ui->convertToCustomData, SIGNAL(clicked()), this, SLOT(updateSharedKeyList())); connect(m_ui->removeSharedEncryptionKeys, SIGNAL(clicked()), this, SLOT(removeSharedEncryptionKeys())); connect(m_ui->removeSharedEncryptionKeys, SIGNAL(clicked()), this, SLOT(updateSharedKeyList())); connect(m_ui->removeStoredPermissions, SIGNAL(clicked()), this, SLOT(removeStoredPermissions())); @@ -82,7 +84,7 @@ void DatabaseSettingsWidgetBrowser::showEvent(QShowEvent* event) QWidget::showEvent(event); } -bool DatabaseSettingsWidgetBrowser::saveSettings() +bool DatabaseSettingsWidgetBrowser::save() { return true; } @@ -102,10 +104,9 @@ void DatabaseSettingsWidgetBrowser::removeSelectedKey() const QItemSelectionModel* itemSelectionModel = m_ui->customDataTable->selectionModel(); if (itemSelectionModel) { for (const QModelIndex& index : itemSelectionModel->selectedRows(0)) { - const auto key = CustomData::getKeyWithPrefix(CustomData::BrowserKeyPrefix, index.data().toString()); - const auto createdKey = CustomData::getKeyWithPrefix(CustomData::Created, index.data().toString()); + QString key = index.data().toString(); + key.insert(0, CustomData::BrowserKeyPrefix); customData()->remove(key); - customData()->remove(createdKey); } updateModel(); } @@ -125,7 +126,7 @@ void DatabaseSettingsWidgetBrowser::updateModel() if (key.startsWith(CustomData::BrowserKeyPrefix)) { QString strippedKey = key; strippedKey.remove(CustomData::BrowserKeyPrefix); - auto created = customData()->value(CustomData::getKeyWithPrefix(CustomData::Created, strippedKey)); + auto created = customData()->value(QString("%1_%2").arg(CustomData::Created, strippedKey)); auto createdItem = new QStandardItem(created); createdItem->setEditable(false); m_customDataModel->appendRow(QList() @@ -140,6 +141,7 @@ void DatabaseSettingsWidgetBrowser::updateModel() void DatabaseSettingsWidgetBrowser::settingsWarning() { if (!browserSettings()->isEnabled()) { + m_ui->convertToCustomData->setEnabled(false); m_ui->removeSharedEncryptionKeys->setEnabled(false); m_ui->removeStoredPermissions->setEnabled(false); m_ui->customDataTable->setEnabled(false); @@ -148,6 +150,7 @@ void DatabaseSettingsWidgetBrowser::settingsWarning() m_ui->warningWidget->setCloseButtonVisible(false); m_ui->warningWidget->setAutoHideTimeout(-1); } else { + m_ui->convertToCustomData->setEnabled(true); m_ui->removeSharedEncryptionKeys->setEnabled(true); m_ui->removeStoredPermissions->setEnabled(true); m_ui->customDataTable->setEnabled(true); @@ -175,8 +178,10 @@ void DatabaseSettingsWidgetBrowser::removeSharedEncryptionKeys() } if (keysToRemove.isEmpty()) { - MessageBox::information( - this, tr("No keys found"), tr("No shared encryption keys found in KeePassXC settings."), MessageBox::Ok); + MessageBox::information(this, + tr("KeePassXC: No keys found"), + tr("No shared encryption keys found in KeePassXC settings."), + MessageBox::Ok); return; } @@ -186,7 +191,7 @@ void DatabaseSettingsWidgetBrowser::removeSharedEncryptionKeys() const int count = keysToRemove.count(); MessageBox::information(this, - tr("Removed keys from database"), + tr("KeePassXC: Removed keys from database"), tr("Successfully removed %n encryption key(s) from KeePassXC settings.", "", count), MessageBox::Ok); } @@ -215,7 +220,9 @@ void DatabaseSettingsWidgetBrowser::removeStoredPermissions() } if (entry->customData()->contains(BrowserService::KEEPASSXCBROWSER_NAME)) { - browserService()->removePluginData(entry); + entry->beginUpdate(); + entry->customData()->remove(BrowserService::KEEPASSXCBROWSER_NAME); + entry->endUpdate(); ++counter; } progress.setValue(progress.value() + 1); @@ -224,17 +231,33 @@ void DatabaseSettingsWidgetBrowser::removeStoredPermissions() if (counter > 0) { MessageBox::information(this, - tr("Removed permissions"), + tr("KeePassXC: Removed permissions"), tr("Successfully removed permissions from %n entry(s).", "", counter), MessageBox::Ok); } else { MessageBox::information(this, - tr("No entry with permissions found!"), + tr("KeePassXC: No entry with permissions found!"), tr("The active database does not contain an entry with permissions."), MessageBox::Ok); } } +void DatabaseSettingsWidgetBrowser::convertAttributesToCustomData() +{ + if (MessageBox::Yes + != MessageBox::question( + this, + tr("Move KeePassHTTP attributes to custom data"), + tr("Do you really want to convert all legacy browser integration data to the latest standard?\n" + "This is necessary to maintain compatibility with the browser plugin."), + MessageBox::Yes | MessageBox::Cancel, + MessageBox::Cancel)) { + return; + } + + BrowserService::convertAttributesToCustomData(m_db); +} + void DatabaseSettingsWidgetBrowser::refreshDatabaseID() { if (MessageBox::Yes @@ -268,16 +291,18 @@ void DatabaseSettingsWidgetBrowser::editFinished(QStandardItem* item) if (itemSelectionModel) { auto indexList = itemSelectionModel->selectedRows(item->column()); - if (!indexList.isEmpty()) { - auto newValue = item->index().data().toString(); + if (indexList.length() > 0) { + QString newValue = item->index().data().toString(); // The key is edited if (item->column() == 0) { - // Update created timestamp with the new key - replaceKey(CustomData::Created, m_valueInEdit, newValue); - // Get the old key/value pair, remove it and replace it - replaceKey(CustomData::BrowserKeyPrefix, m_valueInEdit, newValue); + m_valueInEdit.insert(0, CustomData::BrowserKeyPrefix); + auto tempValue = customData()->value(m_valueInEdit); + newValue.insert(0, CustomData::BrowserKeyPrefix); + + m_db->metadata()->customData()->remove(m_valueInEdit); + m_db->metadata()->customData()->set(newValue, tempValue); } else { // Replace just the value for (const QString& key : m_db->metadata()->customData()->keys()) { @@ -300,15 +325,3 @@ void DatabaseSettingsWidgetBrowser::updateSharedKeyList() { updateModel(); } - -// Replaces a key and the created timestamp for it -void DatabaseSettingsWidgetBrowser::replaceKey(const QString& prefix, - const QString& oldName, - const QString& newName) const -{ - const auto oldKey = CustomData::getKeyWithPrefix(prefix, oldName); - const auto newKey = CustomData::getKeyWithPrefix(prefix, newName); - const auto tempValue = customData()->value(oldKey); - m_db->metadata()->customData()->remove(oldKey); - m_db->metadata()->customData()->set(newKey, tempValue); -} diff --git a/src/gui/dbsettings/DatabaseSettingsWidgetBrowser.h b/src/gui/dbsettings/DatabaseSettingsWidgetBrowser.h index 25664a71f..9beb40466 100644 --- a/src/gui/dbsettings/DatabaseSettingsWidgetBrowser.h +++ b/src/gui/dbsettings/DatabaseSettingsWidgetBrowser.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2024 KeePassXC Team + * Copyright (C) 2018 KeePassXC Team * Copyright (C) 2018 Sami Vänttinen * * This program is free software: you can redistribute it and/or modify @@ -43,11 +43,15 @@ public: ~DatabaseSettingsWidgetBrowser() override; CustomData* customData() const; + inline bool hasAdvancedMode() const override + { + return false; + } public slots: void initialize() override; void uninitialize() override; - bool saveSettings() override; + bool save() override; private slots: void removeSelectedKey(); @@ -55,6 +59,7 @@ private slots: void updateSharedKeyList(); void removeSharedEncryptionKeys(); void removeStoredPermissions(); + void convertAttributesToCustomData(); void refreshDatabaseID(); void editIndex(const QModelIndex& index); void editFinished(QStandardItem* item); @@ -62,7 +67,6 @@ private slots: private: void updateModel(); void settingsWarning(); - void replaceKey(const QString& prefix, const QString& oldName, const QString& newName) const; protected: void showEvent(QShowEvent* event) override; diff --git a/src/gui/dbsettings/DatabaseSettingsWidgetBrowser.ui b/src/gui/dbsettings/DatabaseSettingsWidgetBrowser.ui index d323e2b47..7d6dc00d2 100644 --- a/src/gui/dbsettings/DatabaseSettingsWidgetBrowser.ui +++ b/src/gui/dbsettings/DatabaseSettingsWidgetBrowser.ui @@ -23,9 +23,6 @@ - - 20 - 0 @@ -54,6 +51,35 @@ KeePassXC-Browser settings + + + + + 0 + 0 + + + + Convert KeePassHTTP data + + + Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data + + + + + + + + 0 + 0 + + + + Refresh database root group ID + + + @@ -62,9 +88,6 @@ 0 - - Convert legacy KeePassHTTP attributes to KeePassXC-Browser compatible custom data - Disconnect all browsers @@ -83,19 +106,6 @@ - - - - - 0 - 0 - - - - Refresh database root group ID - - - @@ -176,6 +186,7 @@ removeSharedEncryptionKeys removeStoredPermissions + convertToCustomData refreshDatabaseID customDataTable removeCustomDataButton diff --git a/src/gui/dbsettings/DatabaseSettingsWidgetDatabaseKey.cpp b/src/gui/dbsettings/DatabaseSettingsWidgetDatabaseKey.cpp index a74b20ead..2dae5cbb5 100644 --- a/src/gui/dbsettings/DatabaseSettingsWidgetDatabaseKey.cpp +++ b/src/gui/dbsettings/DatabaseSettingsWidgetDatabaseKey.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2023 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 @@ -17,9 +17,7 @@ #include "DatabaseSettingsWidgetDatabaseKey.h" -#include "core/Config.h" #include "core/Database.h" -#include "core/PasswordHealth.h" #include "gui/MessageBox.h" #include "gui/databasekey/KeyFileEditWidget.h" #include "gui/databasekey/PasswordEditWidget.h" @@ -27,7 +25,13 @@ #include "keys/ChallengeResponseKey.h" #include "keys/FileKey.h" #include "keys/PasswordKey.h" -#include "quickunlock/QuickUnlockInterface.h" + +#ifdef Q_OS_MACOS +#include "touchid/TouchID.h" +#endif +#ifdef Q_CC_MSVC +#include "winhello/WindowsHello.h" +#endif #include #include @@ -44,19 +48,17 @@ DatabaseSettingsWidgetDatabaseKey::DatabaseSettingsWidgetDatabaseKey(QWidget* pa { auto* vbox = new QVBoxLayout(this); vbox->setSizeConstraint(QLayout::SetMinimumSize); - vbox->setSpacing(20); - // Primary password option + // primary password option vbox->addWidget(m_passwordEditWidget); - // Additional key options + // additional key options m_additionalKeyOptionsToggle->setObjectName("additionalKeyOptionsToggle"); vbox->addWidget(m_additionalKeyOptionsToggle); vbox->addWidget(m_additionalKeyOptions); vbox->setSizeConstraint(QLayout::SetMinimumSize); m_additionalKeyOptions->setLayout(new QVBoxLayout()); m_additionalKeyOptions->layout()->setMargin(0); - m_additionalKeyOptions->layout()->setSpacing(20); m_additionalKeyOptions->layout()->addWidget(m_keyFileEditWidget); #ifdef WITH_XC_YUBIKEY m_additionalKeyOptions->layout()->addWidget(m_yubiKeyEditWidget); @@ -69,39 +71,40 @@ DatabaseSettingsWidgetDatabaseKey::DatabaseSettingsWidgetDatabaseKey(QWidget* pa setLayout(vbox); } -DatabaseSettingsWidgetDatabaseKey::~DatabaseSettingsWidgetDatabaseKey() = default; - -void DatabaseSettingsWidgetDatabaseKey::loadSettings(QSharedPointer db) +DatabaseSettingsWidgetDatabaseKey::~DatabaseSettingsWidgetDatabaseKey() { - DatabaseSettingsWidget::loadSettings(db); +} + +void DatabaseSettingsWidgetDatabaseKey::load(QSharedPointer db) +{ + DatabaseSettingsWidget::load(db); if (!m_db->key() || m_db->key()->keys().isEmpty()) { - // Database has no key, we are about to add a new one + // database has no key, we are about to add a new one m_passwordEditWidget->changeVisiblePage(KeyComponentWidget::Page::Edit); - // Focus won't work until the UI settles - QTimer::singleShot(0, m_passwordEditWidget, SLOT(setFocus())); - } else { - bool hasAdditionalKeys = false; - for (const auto& key : m_db->key()->keys()) { - if (key->uuid() == PasswordKey::UUID) { - m_passwordEditWidget->setComponentAdded(true); - } else if (key->uuid() == FileKey::UUID) { - m_keyFileEditWidget->setComponentAdded(true); - hasAdditionalKeys = true; - } + m_passwordEditWidget->setPasswordVisible(true); + } + + bool hasAdditionalKeys = false; + for (const auto& key : m_db->key()->keys()) { + if (key->uuid() == PasswordKey::UUID) { + m_passwordEditWidget->setComponentAdded(true); + } else if (key->uuid() == FileKey::UUID) { + m_keyFileEditWidget->setComponentAdded(true); + hasAdditionalKeys = true; } + } #ifdef WITH_XC_YUBIKEY - for (const auto& key : m_db->key()->challengeResponseKeys()) { - if (key->uuid() == ChallengeResponseKey::UUID) { - m_yubiKeyEditWidget->setComponentAdded(true); - hasAdditionalKeys = true; - } + for (const auto& key : m_db->key()->challengeResponseKeys()) { + if (key->uuid() == ChallengeResponseKey::UUID) { + m_yubiKeyEditWidget->setComponentAdded(true); + hasAdditionalKeys = true; } + } #endif - setAdditionalKeyOptionsVisible(hasAdditionalKeys); - } + setAdditionalKeyOptionsVisible(hasAdditionalKeys); connect(m_passwordEditWidget->findChild("removeButton"), SIGNAL(clicked()), SLOT(markDirty())); connect(m_keyFileEditWidget->findChild("removeButton"), SIGNAL(clicked()), SLOT(markDirty())); @@ -125,7 +128,7 @@ void DatabaseSettingsWidgetDatabaseKey::uninitialize() { } -bool DatabaseSettingsWidgetDatabaseKey::saveSettings() +bool DatabaseSettingsWidgetDatabaseKey::save() { m_isDirty |= (m_passwordEditWidget->visiblePage() == KeyComponentWidget::Page::Edit); m_isDirty |= (m_keyFileEditWidget->visiblePage() == KeyComponentWidget::Page::Edit); @@ -134,7 +137,7 @@ bool DatabaseSettingsWidgetDatabaseKey::saveSettings() #endif if (m_db->key() && !m_db->key()->keys().isEmpty() && !m_isDirty) { - // Key unchanged + // key unchanged return true; } @@ -158,10 +161,7 @@ bool DatabaseSettingsWidgetDatabaseKey::saveSettings() } } - // Show warning if database password has not been set - if (m_passwordEditWidget->visiblePage() == KeyComponentWidget::Page::AddNew - || (m_passwordEditWidget->visiblePage() == KeyComponentWidget::Page::Edit && m_passwordEditWidget->isEmpty())) { - + if (m_passwordEditWidget->visiblePage() == KeyComponentWidget::Page::AddNew || m_passwordEditWidget->isEmpty()) { QScopedPointer msgBox(new QMessageBox(this)); msgBox->setIcon(QMessageBox::Warning); msgBox->setWindowTitle(tr("No password set")); @@ -171,7 +171,6 @@ bool DatabaseSettingsWidgetDatabaseKey::saveSettings() auto btn = msgBox->addButton(tr("Continue without password"), QMessageBox::ButtonRole::AcceptRole); msgBox->addButton(QMessageBox::Cancel); msgBox->setDefaultButton(QMessageBox::Cancel); - msgBox->layout()->setSizeConstraint(QLayout::SetMinimumSize); msgBox->exec(); if (msgBox->clickedButton() != btn) { return false; @@ -180,34 +179,6 @@ bool DatabaseSettingsWidgetDatabaseKey::saveSettings() return false; } - if (m_passwordEditWidget->visiblePage() == KeyComponentWidget::Page::Edit && !m_passwordEditWidget->isEmpty()) { - // Prevent setting password with a quality less than the minimum required - auto minQuality = qBound(0, config()->get(Config::Security_DatabasePasswordMinimumQuality).toInt(), 4); - if (m_passwordEditWidget->getPasswordQuality() < static_cast(minQuality)) { - MessageBox::critical(this, - tr("Weak password"), - tr("The provided password does not meet the minimum quality requirement."), - MessageBox::Ok, - MessageBox::Ok); - return false; - } - - // Show warning if database password is weak or poor - if (m_passwordEditWidget->getPasswordQuality() < PasswordHealth::Quality::Good) { - auto dialogResult = - MessageBox::warning(this, - tr("Weak password"), - tr("This is a weak password! For better protection of your secrets, " - "you should choose a stronger password."), - MessageBox::ContinueWithWeakPass | MessageBox::Cancel, - MessageBox::Cancel); - - if (dialogResult == MessageBox::Cancel) { - return false; - } - } - } - if (!addToCompositeKey(m_keyFileEditWidget, newKey, oldFileKey)) { return false; } @@ -229,23 +200,22 @@ bool DatabaseSettingsWidgetDatabaseKey::saveSettings() m_db->setKey(newKey, true, false, false); - getQuickUnlock()->reset(m_db->publicUuid()); +#if defined(Q_OS_MACOS) + TouchID::getInstance().reset(m_db->filePath()); +#elif defined(Q_CC_MSVC) + getWindowsHello()->reset(m_db->filePath()); +#endif emit editFinished(true); if (m_isDirty) { m_db->markAsModified(); } - // Reset fields - initialize(); - return true; } void DatabaseSettingsWidgetDatabaseKey::discard() { - // Reset fields - initialize(); emit editFinished(false); } diff --git a/src/gui/dbsettings/DatabaseSettingsWidgetDatabaseKey.h b/src/gui/dbsettings/DatabaseSettingsWidgetDatabaseKey.h index 3e4bcdc73..a7d90e43e 100644 --- a/src/gui/dbsettings/DatabaseSettingsWidgetDatabaseKey.h +++ b/src/gui/dbsettings/DatabaseSettingsWidgetDatabaseKey.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2023 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 @@ -15,8 +15,8 @@ * along with this program. If not, see . */ -#ifndef KEEPASSXC_DATABASESETTINGSWIDGETDATABASEKEY_H -#define KEEPASSXC_DATABASESETTINGSWIDGETDATABASEKEY_H +#ifndef KEEPASSXC_DATABASESETTINGSPAGECHANGEDBKEY_H +#define KEEPASSXC_DATABASESETTINGSPAGECHANGEDBKEY_H #include "DatabaseSettingsWidget.h" #include "config-keepassx.h" @@ -42,12 +42,17 @@ public: Q_DISABLE_COPY(DatabaseSettingsWidgetDatabaseKey); ~DatabaseSettingsWidgetDatabaseKey() override; - void loadSettings(QSharedPointer db) override; + void load(QSharedPointer db) override; + + inline bool hasAdvancedMode() const override + { + return false; + } public slots: void initialize() override; void uninitialize() override; - bool saveSettings() override; + bool save() override; void discard() override; private slots: @@ -77,4 +82,4 @@ private: #endif }; -#endif // KEEPASSXC_DATABASESETTINGSWIDGETDATABASEKEY_H +#endif // KEEPASSXC_DATABASESETTINGSPAGECHANGEDBKEY_H diff --git a/src/gui/dbsettings/DatabaseSettingsWidgetEncryption.cpp b/src/gui/dbsettings/DatabaseSettingsWidgetEncryption.cpp index 7ccf6bc57..76f86fcae 100644 --- a/src/gui/dbsettings/DatabaseSettingsWidgetEncryption.cpp +++ b/src/gui/dbsettings/DatabaseSettingsWidgetEncryption.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2023 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 @@ -27,24 +27,8 @@ #include "format/KeePass2Writer.h" #include "gui/MessageBox.h" -#include - const char* DatabaseSettingsWidgetEncryption::CD_DECRYPTION_TIME_PREFERENCE_KEY = "KPXC_DECRYPTION_TIME_PREFERENCE"; -#define IS_ARGON2(uuid) (uuid == KeePass2::KDF_ARGON2D || uuid == KeePass2::KDF_ARGON2ID) -#define IS_AES_KDF(uuid) (uuid == KeePass2::KDF_AES_KDBX3 || uuid == KeePass2::KDF_AES_KDBX4) - -namespace -{ - QString getTextualEncryptionTime(int millisecs) - { - if (millisecs < 1000) { - return QObject::tr("%1 ms", "milliseconds", millisecs).arg(millisecs); - } - return QObject::tr("%1 s", "seconds", millisecs / 1000).arg(millisecs / 1000.0, 0, 'f', 1); - } -} // namespace - DatabaseSettingsWidgetEncryption::DatabaseSettingsWidgetEncryption(QWidget* parent) : DatabaseSettingsWidget(parent) , m_ui(new Ui::DatabaseSettingsWidgetEncryption()) @@ -52,30 +36,33 @@ DatabaseSettingsWidgetEncryption::DatabaseSettingsWidgetEncryption(QWidget* pare m_ui->setupUi(this); connect(m_ui->transformBenchmarkButton, SIGNAL(clicked()), SLOT(benchmarkTransformRounds())); - connect(m_ui->kdfComboBox, SIGNAL(currentIndexChanged(int)), SLOT(updateKdfFields())); - connect(m_ui->compatibilitySelection, SIGNAL(currentIndexChanged(int)), SLOT(loadKdfAlgorithms())); + connect(m_ui->kdfComboBox, SIGNAL(currentIndexChanged(int)), SLOT(changeKdf(int))); m_ui->formatCannotBeChanged->setVisible(false); connect(m_ui->memorySpinBox, SIGNAL(valueChanged(int)), this, SLOT(memoryChanged(int))); connect(m_ui->parallelismSpinBox, SIGNAL(valueChanged(int)), this, SLOT(parallelismChanged(int))); - m_ui->compatibilitySelection->addItem(tr("KDBX 4 (recommended)"), KeePass2::KDF_ARGON2D); - m_ui->compatibilitySelection->addItem(tr("KDBX 3"), KeePass2::KDF_AES_KDBX3); + m_ui->compatibilitySelection->addItem(tr("KDBX 4 (recommended)"), KeePass2::KDF_ARGON2D.toByteArray()); + m_ui->compatibilitySelection->addItem(tr("KDBX 3"), KeePass2::KDF_AES_KDBX3.toByteArray()); m_ui->decryptionTimeSlider->setMinimum(Kdf::MIN_ENCRYPTION_TIME / 100); m_ui->decryptionTimeSlider->setMaximum(Kdf::MAX_ENCRYPTION_TIME / 100); m_ui->decryptionTimeSlider->setValue(Kdf::DEFAULT_ENCRYPTION_TIME / 100); updateDecryptionTime(m_ui->decryptionTimeSlider->value()); m_ui->transformBenchmarkButton->setText( - QObject::tr("Benchmark %1 delay").arg(getTextualEncryptionTime(Kdf::DEFAULT_ENCRYPTION_TIME))); - m_ui->minTimeLabel->setText(getTextualEncryptionTime(Kdf::MIN_ENCRYPTION_TIME)); - m_ui->maxTimeLabel->setText(getTextualEncryptionTime(Kdf::MAX_ENCRYPTION_TIME)); + QObject::tr("Benchmark %1 delay") + .arg(DatabaseSettingsWidgetEncryption::getTextualEncryptionTime(Kdf::DEFAULT_ENCRYPTION_TIME))); + m_ui->minTimeLabel->setText(DatabaseSettingsWidgetEncryption::getTextualEncryptionTime(Kdf::MIN_ENCRYPTION_TIME)); + m_ui->maxTimeLabel->setText(DatabaseSettingsWidgetEncryption::getTextualEncryptionTime(Kdf::MAX_ENCRYPTION_TIME)); + connect(m_ui->activateChangeDecryptionTimeButton, SIGNAL(clicked()), SLOT(activateChangeDecryptionTime())); connect(m_ui->decryptionTimeSlider, SIGNAL(valueChanged(int)), SLOT(updateDecryptionTime(int))); + connect(m_ui->compatibilitySelection, SIGNAL(currentIndexChanged(int)), SLOT(updateFormatCompatibility(int))); - // Conditions under which a key re-transformation is needed + // conditions under which a key re-transformation is needed connect(m_ui->decryptionTimeSlider, SIGNAL(valueChanged(int)), SLOT(markDirty())); connect(m_ui->compatibilitySelection, SIGNAL(currentIndexChanged(int)), SLOT(markDirty())); + connect(m_ui->activateChangeDecryptionTimeButton, SIGNAL(clicked()), SLOT(markDirty())); connect(m_ui->algorithmComboBox, SIGNAL(currentIndexChanged(int)), SLOT(markDirty())); connect(m_ui->kdfComboBox, SIGNAL(currentIndexChanged(int)), SLOT(markDirty())); connect(m_ui->transformRoundsSpinBox, SIGNAL(valueChanged(int)), SLOT(markDirty())); @@ -83,16 +70,13 @@ DatabaseSettingsWidgetEncryption::DatabaseSettingsWidgetEncryption(QWidget* pare connect(m_ui->parallelismSpinBox, SIGNAL(valueChanged(int)), SLOT(markDirty())); } -DatabaseSettingsWidgetEncryption::~DatabaseSettingsWidgetEncryption() = default; - -void DatabaseSettingsWidgetEncryption::showBasicEncryption(int decryptionMillisecs) +DatabaseSettingsWidgetEncryption::~DatabaseSettingsWidgetEncryption() { - // Show the basic encryption settings tab and set the slider to the stored values - m_ui->decryptionTimeSlider->setValue(decryptionMillisecs / 100); - m_ui->encryptionSettingsTabWidget->setCurrentWidget(m_ui->basicTab); - m_initWithAdvanced = false; } +#define IS_ARGON2(uuid) (uuid == KeePass2::KDF_ARGON2D || uuid == KeePass2::KDF_ARGON2ID) +#define IS_AES_KDF(uuid) (uuid == KeePass2::KDF_AES_KDBX3 || uuid == KeePass2::KDF_AES_KDBX4) + void DatabaseSettingsWidgetEncryption::initialize() { Q_ASSERT(m_db); @@ -100,20 +84,18 @@ void DatabaseSettingsWidgetEncryption::initialize() return; } - bool isNewDatabase = false; + bool isDirty = false; - // Check for uninitialized database parameters and set initial values accordingly + if (!m_db->kdf()) { + m_db->setKdf(KeePass2::uuidToKdf(KeePass2::KDF_ARGON2D)); + isDirty = true; + } if (!m_db->key()) { m_db->setKey(QSharedPointer::create(), true, false, false); - m_db->setKdf(KeePass2::uuidToKdf(KeePass2::KDF_ARGON2D)); m_db->setCipher(KeePass2::CIPHER_AES256); - isNewDatabase = true; - } else if (!m_db->kdf()) { - m_db->setKdf(KeePass2::uuidToKdf(KeePass2::KDF_ARGON2D)); - isNewDatabase = true; + isDirty = true; } - - // Initialize the basic settings tab + bool kdbx3Enabled = KeePass2Writer::kdbxVersionRequired(m_db.data(), true, true) <= KeePass2::FILE_VERSION_3_1; // check if the DB's custom data has a decryption time setting stored // and set the slider to it, otherwise just state that the time is unchanged @@ -121,50 +103,30 @@ void DatabaseSettingsWidgetEncryption::initialize() auto* cd = m_db->metadata()->customData(); if (cd->hasKey(CD_DECRYPTION_TIME_PREFERENCE_KEY)) { int decryptionTime = qMax(100, cd->value(CD_DECRYPTION_TIME_PREFERENCE_KEY).toInt()); - showBasicEncryption(decryptionTime); - } else if (isNewDatabase) { - showBasicEncryption(); + bool block = m_ui->decryptionTimeSlider->blockSignals(true); + m_ui->decryptionTimeSlider->setValue(decryptionTime / 100); + updateDecryptionTime(decryptionTime / 100); + m_ui->decryptionTimeSlider->blockSignals(block); + m_ui->activateChangeDecryptionTimeButton->setVisible(false); } else { - // Set default basic decryption time - m_ui->decryptionTimeSlider->setValue(Kdf::DEFAULT_ENCRYPTION_TIME / 100); - // Show the advanced encryption settings tab - m_ui->encryptionSettingsTabWidget->setCurrentWidget(m_ui->advancedTab); - m_initWithAdvanced = true; + m_ui->decryptionTimeSettings->setVisible(isDirty); + m_ui->activateChangeDecryptionTimeButton->setVisible(!isDirty); + if (!isDirty) { + m_ui->decryptionTimeValueLabel->setText(tr("unchanged", "Database decryption time is unchanged")); + } } - // Initialize the advanced settings tab + updateFormatCompatibility(m_db->kdf()->uuid() == KeePass2::KDF_AES_KDBX3 ? KDBX3 : KDBX4, isDirty); + setupAlgorithmComboBox(); + setupKdfComboBox(kdbx3Enabled); + loadKdfParameters(); - // Set up the KDBX version selector - bool isKdbx3 = m_db->formatVersion() <= KeePass2::FILE_VERSION_3_1; - m_ui->compatibilitySelection->blockSignals(true); - m_ui->compatibilitySelection->setCurrentIndex(isKdbx3 ? KDBX3 : KDBX4); - m_ui->compatibilitySelection->blockSignals(false); - - // Disable KDBX selector if downgrading would lose data - if (!isKdbx3 && KeePass2Writer::kdbxVersionRequired(m_db.data(), true, true) >= KeePass2::FILE_VERSION_4) { + if (!kdbx3Enabled) { m_ui->compatibilitySelection->setEnabled(false); m_ui->formatCannotBeChanged->setVisible(true); } - // Set up encryption ciphers - m_ui->algorithmComboBox->clear(); - for (auto& cipher : asConst(KeePass2::CIPHERS)) { - m_ui->algorithmComboBox->addItem(KeePass2::cipherToString(cipher), cipher); - } - int cipherIndex = m_ui->algorithmComboBox->findData(m_db->cipher()); - if (cipherIndex > -1) { - m_ui->algorithmComboBox->setCurrentIndex(cipherIndex); - } - - // Set up KDF algorithms - loadKdfAlgorithms(); - - if (isNewDatabase) { - benchmarkTransformRounds(); - } - - // New databases always require saving - m_isDirty = isNewDatabase; + m_isDirty = isDirty; } void DatabaseSettingsWidgetEncryption::uninitialize() @@ -174,76 +136,79 @@ void DatabaseSettingsWidgetEncryption::uninitialize() void DatabaseSettingsWidgetEncryption::showEvent(QShowEvent* event) { QWidget::showEvent(event); + m_ui->decryptionTimeSlider->setFocus(); +} - if (m_ui->decryptionTimeSlider->isVisible()) { - m_ui->decryptionTimeSlider->setFocus(); - } else { - m_ui->transformRoundsSpinBox->setFocus(); +void DatabaseSettingsWidgetEncryption::setupAlgorithmComboBox() +{ + m_ui->algorithmComboBox->clear(); + for (auto& cipher : asConst(KeePass2::CIPHERS)) { + m_ui->algorithmComboBox->addItem(KeePass2::cipherToString(cipher), cipher.toByteArray()); + } + int cipherIndex = m_ui->algorithmComboBox->findData(m_db->cipher().toByteArray()); + if (cipherIndex > -1) { + m_ui->algorithmComboBox->setCurrentIndex(cipherIndex); } } -void DatabaseSettingsWidgetEncryption::loadKdfAlgorithms() +void DatabaseSettingsWidgetEncryption::setupKdfComboBox(bool enableKdbx3) { - bool isKdbx3 = m_ui->compatibilitySelection->currentIndex() == KDBX3; - - m_ui->kdfComboBox->blockSignals(true); + // Set up kdf combo box + bool block = m_ui->kdfComboBox->blockSignals(true); m_ui->kdfComboBox->clear(); - const auto& kdfs = isKdbx3 ? KeePass2::KDBX3_KDFS : KeePass2::KDBX4_KDFS; - for (auto& kdf : kdfs) { - m_ui->kdfComboBox->addItem(KeePass2::kdfToString(kdf), kdf); - // Set current index to the current database KDF if it matches - if (m_db && m_db->kdf() && m_db->kdf()->uuid() == kdf) { - m_ui->kdfComboBox->setCurrentIndex(m_ui->kdfComboBox->count() - 1); + for (auto& kdf : asConst(KeePass2::KDFS)) { + if (kdf != KeePass2::KDF_AES_KDBX3 or enableKdbx3) { + m_ui->kdfComboBox->addItem(KeePass2::kdfToString(kdf), kdf.toByteArray()); } } - m_ui->kdfComboBox->blockSignals(false); - - // Ensure consistency with current index - updateKdfFields(); + m_ui->kdfComboBox->blockSignals(block); } void DatabaseSettingsWidgetEncryption::loadKdfParameters() { + Q_ASSERT(m_db); if (!m_db) { return; } auto kdf = m_db->kdf(); + Q_ASSERT(kdf); if (!kdf) { return; } - // Load database KDF parameters if equal to current choice - bool dbIsArgon2 = IS_ARGON2(kdf->uuid()); - bool kdfIsArgon2 = IS_ARGON2(m_ui->kdfComboBox->currentData().toUuid()); - if (dbIsArgon2 && kdfIsArgon2) { - // Set Argon2 parameters - auto argon2Kdf = kdf.staticCast(); - m_ui->transformRoundsSpinBox->setValue(argon2Kdf->rounds()); - m_ui->memorySpinBox->setValue(Argon2Kdf::toMebibytes(argon2Kdf->memory())); - m_ui->parallelismSpinBox->setValue(argon2Kdf->parallelism()); - } else if (!dbIsArgon2 && !kdfIsArgon2) { - // Set AES KDF parameters - m_ui->transformRoundsSpinBox->setValue(kdf->rounds()); - } else { - // Set reasonable defaults and then benchmark - if (kdfIsArgon2) { - m_ui->memorySpinBox->setValue(Argon2Kdf::toMebibytes(ARGON2_DEFAULT_MEMORY)); - m_ui->parallelismSpinBox->setValue(ARGON2_DEFAULT_PARALLELISM); - } - benchmarkTransformRounds(); + int kdfIndex = m_ui->kdfComboBox->findData(m_db->kdf()->uuid().toByteArray()); + if (kdfIndex > -1) { + bool block = m_ui->kdfComboBox->blockSignals(true); + m_ui->kdfComboBox->setCurrentIndex(kdfIndex); + m_ui->kdfComboBox->blockSignals(block); } + + m_ui->transformRoundsSpinBox->setValue(kdf->rounds()); + if (IS_ARGON2(m_db->kdf()->uuid())) { + auto argon2Kdf = kdf.staticCast(); + m_ui->memorySpinBox->setValue(static_cast(argon2Kdf->memory()) / (1 << 10)); + m_ui->parallelismSpinBox->setValue(argon2Kdf->parallelism()); + } + + updateKdfFields(); } void DatabaseSettingsWidgetEncryption::updateKdfFields() { - bool isArgon2 = IS_ARGON2(m_ui->kdfComboBox->currentData().toUuid()); - m_ui->memoryUsageLabel->setVisible(isArgon2); - m_ui->memorySpinBox->setVisible(isArgon2); - m_ui->parallelismLabel->setVisible(isArgon2); - m_ui->parallelismSpinBox->setVisible(isArgon2); + QUuid id = m_db->kdf()->uuid(); - loadKdfParameters(); + m_ui->memoryUsageLabel->setVisible(IS_ARGON2(id)); + m_ui->memorySpinBox->setVisible(IS_ARGON2(id)); + m_ui->parallelismLabel->setVisible(IS_ARGON2(id)); + m_ui->parallelismSpinBox->setVisible(IS_ARGON2(id)); +} + +void DatabaseSettingsWidgetEncryption::activateChangeDecryptionTime() +{ + m_ui->decryptionTimeSettings->setVisible(true); + m_ui->activateChangeDecryptionTimeButton->setVisible(false); + updateDecryptionTime(m_ui->decryptionTimeSlider->value()); } void DatabaseSettingsWidgetEncryption::markDirty() @@ -251,34 +216,31 @@ void DatabaseSettingsWidgetEncryption::markDirty() m_isDirty = true; } -bool DatabaseSettingsWidgetEncryption::saveSettings() +bool DatabaseSettingsWidgetEncryption::save() { Q_ASSERT(m_db); if (!m_db) { return false; } - if (m_initWithAdvanced != isAdvancedMode()) { - // Switched from basic <-> advanced mode, need to recalculate everything - m_isDirty = true; - } - if (m_db->key() && !m_db->key()->keys().isEmpty() && !m_isDirty) { - // Nothing has changed, don't re-transform + // nothing has changed, don't re-transform return true; } - if (!isAdvancedMode()) { - // Basic mode maintains current database KDF - auto kdf = m_db->kdf(); - Q_ASSERT(kdf); + auto kdf = m_db->kdf(); + Q_ASSERT(kdf); + + if (!advancedMode()) { if (kdf && !m_isDirty && !m_ui->decryptionTimeSettings->isVisible()) { return true; } + int time = m_ui->decryptionTimeSlider->value() * 100; + updateFormatCompatibility(m_ui->compatibilitySelection->currentIndex(), false); + QApplication::setOverrideCursor(Qt::BusyCursor); - int time = m_ui->decryptionTimeSlider->value() * 100; int rounds = AsyncTask::runAndWaitForFuture([&kdf, time]() { return kdf->benchmark(time); }); kdf->setRounds(rounds); @@ -293,11 +255,12 @@ bool DatabaseSettingsWidgetEncryption::saveSettings() return ok; } - // Advanced mode sets KDF - auto kdfChoice = m_ui->kdfComboBox->currentData().toUuid(); + // remove a stored decryption time from custom data when advanced settings are used + // we don't know it until we actually run the KDF + m_db->metadata()->customData()->remove(CD_DECRYPTION_TIME_PREFERENCE_KEY); // first perform safety check for KDF rounds - if (IS_ARGON2(kdfChoice) && m_ui->transformRoundsSpinBox->value() > 10000) { + if (IS_ARGON2(kdf->uuid()) && m_ui->transformRoundsSpinBox->value() > 10000) { QMessageBox warning; warning.setIcon(QMessageBox::Warning); warning.setWindowTitle(tr("Number of rounds too high", "Key transformation rounds")); @@ -306,12 +269,11 @@ bool DatabaseSettingsWidgetEncryption::saveSettings() auto ok = warning.addButton(tr("Understood, keep number"), QMessageBox::ButtonRole::AcceptRole); auto cancel = warning.addButton(tr("Cancel"), QMessageBox::ButtonRole::RejectRole); warning.setDefaultButton(cancel); - warning.layout()->setSizeConstraint(QLayout::SetMinimumSize); warning.exec(); if (warning.clickedButton() != ok) { return false; } - } else if (IS_AES_KDF(kdfChoice) && m_ui->transformRoundsSpinBox->value() < 100000) { + } else if (IS_AES_KDF(kdf->uuid()) && m_ui->transformRoundsSpinBox->value() < 100000) { QMessageBox warning; warning.setIcon(QMessageBox::Warning); warning.setWindowTitle(tr("Number of rounds too low", "Key transformation rounds")); @@ -320,25 +282,19 @@ bool DatabaseSettingsWidgetEncryption::saveSettings() auto ok = warning.addButton(tr("Understood, keep number"), QMessageBox::ButtonRole::AcceptRole); auto cancel = warning.addButton(tr("Cancel"), QMessageBox::ButtonRole::RejectRole); warning.setDefaultButton(cancel); - warning.layout()->setSizeConstraint(QLayout::SetMinimumSize); warning.exec(); if (warning.clickedButton() != ok) { return false; } } - m_db->setCipher(m_ui->algorithmComboBox->currentData().toUuid()); - - // remove a stored decryption time from custom data when advanced settings are used - // we don't know it until we actually run the KDF - m_db->metadata()->customData()->remove(CD_DECRYPTION_TIME_PREFERENCE_KEY); + m_db->setCipher(QUuid(m_ui->algorithmComboBox->currentData().toByteArray())); // Save kdf parameters - auto kdf = KeePass2::uuidToKdf(kdfChoice); kdf->setRounds(m_ui->transformRoundsSpinBox->value()); if (IS_ARGON2(kdf->uuid())) { auto argon2Kdf = kdf.staticCast(); - argon2Kdf->setMemory(Argon2Kdf::toKibibytes(m_ui->memorySpinBox->value())); + argon2Kdf->setMemory(static_cast(m_ui->memorySpinBox->value()) * (1 << 10)); argon2Kdf->setParallelism(static_cast(m_ui->parallelismSpinBox->value())); } @@ -362,18 +318,17 @@ void DatabaseSettingsWidgetEncryption::benchmarkTransformRounds(int millisecs) { QApplication::setOverrideCursor(Qt::BusyCursor); m_ui->transformBenchmarkButton->setEnabled(false); - m_ui->transformRoundsSpinBox->setEnabled(false); - m_ui->transformRoundsSpinBox->clear(); + m_ui->transformRoundsSpinBox->setFocus(); // Create a new kdf with the current parameters - auto kdf = KeePass2::uuidToKdf(m_ui->kdfComboBox->currentData().toUuid()); + auto kdf = KeePass2::uuidToKdf(QUuid(m_ui->kdfComboBox->currentData().toByteArray())); kdf->setRounds(m_ui->transformRoundsSpinBox->value()); if (IS_ARGON2(kdf->uuid())) { auto argon2Kdf = kdf.staticCast(); // Set a small static number of rounds for the benchmark argon2Kdf->setRounds(4); - if (!argon2Kdf->setMemory(Argon2Kdf::toKibibytes(m_ui->memorySpinBox->value()))) { - m_ui->memorySpinBox->setValue(Argon2Kdf::toMebibytes(argon2Kdf->memory())); + if (!argon2Kdf->setMemory(static_cast(m_ui->memorySpinBox->value()) * (1 << 10))) { + m_ui->memorySpinBox->setValue(static_cast(argon2Kdf->memory() / (1 << 10))); } if (!argon2Kdf->setParallelism(static_cast(m_ui->parallelismSpinBox->value()))) { m_ui->parallelismSpinBox->setValue(argon2Kdf->parallelism()); @@ -385,12 +340,24 @@ void DatabaseSettingsWidgetEncryption::benchmarkTransformRounds(int millisecs) m_ui->transformRoundsSpinBox->setValue(rounds); m_ui->transformBenchmarkButton->setEnabled(true); - m_ui->transformRoundsSpinBox->setEnabled(true); - m_ui->transformRoundsSpinBox->setFocus(); m_ui->decryptionTimeSlider->setValue(millisecs / 100); QApplication::restoreOverrideCursor(); } +void DatabaseSettingsWidgetEncryption::changeKdf(int index) +{ + Q_ASSERT(m_db); + if (!m_db) { + return; + } + + QUuid id(m_ui->kdfComboBox->itemData(index).toByteArray()); + m_db->setKdf(KeePass2::uuidToKdf(id)); + updateKdfFields(); + activateChangeDecryptionTime(); + benchmarkTransformRounds(); +} + /** * Update memory spin box suffix on value change. */ @@ -407,12 +374,59 @@ void DatabaseSettingsWidgetEncryption::parallelismChanged(int value) m_ui->parallelismSpinBox->setSuffix(tr(" thread(s)", "Threads for parallel execution (KDF settings)", value)); } -bool DatabaseSettingsWidgetEncryption::isAdvancedMode() +void DatabaseSettingsWidgetEncryption::setAdvancedMode(bool advanced) { - return m_ui->encryptionSettingsTabWidget->currentWidget() == m_ui->advancedTab; + DatabaseSettingsWidget::setAdvancedMode(advanced); + + if (advanced) { + loadKdfParameters(); + m_ui->stackedWidget->setCurrentIndex(1); + } else { + m_ui->compatibilitySelection->setCurrentIndex(m_db->kdf()->uuid() == KeePass2::KDF_AES_KDBX3 ? KDBX3 : KDBX4); + m_ui->stackedWidget->setCurrentIndex(0); + } } void DatabaseSettingsWidgetEncryption::updateDecryptionTime(int value) { - m_ui->decryptionTimeValueLabel->setText(getTextualEncryptionTime(value * 100)); + m_ui->decryptionTimeValueLabel->setText(DatabaseSettingsWidgetEncryption::getTextualEncryptionTime(value * 100)); +} + +void DatabaseSettingsWidgetEncryption::updateFormatCompatibility(int index, bool retransform) +{ + Q_ASSERT(m_db); + if (!m_db) { + return; + } + + if (m_ui->compatibilitySelection->currentIndex() != index) { + bool block = m_ui->compatibilitySelection->blockSignals(true); + m_ui->compatibilitySelection->setCurrentIndex(index); + m_ui->compatibilitySelection->blockSignals(block); + } + + QUuid kdfUuid(m_ui->compatibilitySelection->itemData(index).toByteArray()); + if (retransform) { + auto kdf = KeePass2::uuidToKdf(kdfUuid); + m_db->setKdf(kdf); + + if (IS_ARGON2(kdf->uuid())) { + auto argon2Kdf = kdf.staticCast(); + // Default to 64 MiB of memory and 2 threads + // these settings are safe for desktop and mobile devices + argon2Kdf->setMemory(1 << 16); + argon2Kdf->setParallelism(2); + } + + activateChangeDecryptionTime(); + } +} + +QString DatabaseSettingsWidgetEncryption::getTextualEncryptionTime(int millisecs) +{ + if (millisecs < 1000) { + return QObject::tr("%1 ms", "milliseconds", millisecs).arg(millisecs); + } else { + return QObject::tr("%1 s", "seconds", millisecs / 1000).arg(millisecs / 1000.0, 0, 'f', 1); + } } diff --git a/src/gui/dbsettings/DatabaseSettingsWidgetEncryption.h b/src/gui/dbsettings/DatabaseSettingsWidgetEncryption.h index 6b87bd462..c3d7ccf74 100644 --- a/src/gui/dbsettings/DatabaseSettingsWidgetEncryption.h +++ b/src/gui/dbsettings/DatabaseSettingsWidgetEncryption.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2023 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 @@ -37,28 +37,37 @@ public: Q_DISABLE_COPY(DatabaseSettingsWidgetEncryption); ~DatabaseSettingsWidgetEncryption() override; + inline bool hasAdvancedMode() const override + { + return true; + } + void setAdvancedMode(bool advanced) override; + public slots: void initialize() override; void uninitialize() override; - bool saveSettings() override; + bool save() override; + + static QString getTextualEncryptionTime(int millisecs); protected: void showEvent(QShowEvent* event) override; private slots: void benchmarkTransformRounds(int millisecs = Kdf::DEFAULT_ENCRYPTION_TIME); + void changeKdf(int index); void memoryChanged(int value); void parallelismChanged(int value); void updateDecryptionTime(int value); - void loadKdfAlgorithms(); + void updateFormatCompatibility(int index, bool retransform = true); + void setupAlgorithmComboBox(); + void setupKdfComboBox(bool enableKdbx3); void loadKdfParameters(); void updateKdfFields(); + void activateChangeDecryptionTime(); void markDirty(); private: - bool isAdvancedMode(); - void showBasicEncryption(int decryptionMillisecs = Kdf::DEFAULT_ENCRYPTION_TIME); - enum FormatSelection { KDBX4, @@ -67,7 +76,7 @@ private: static const char* CD_DECRYPTION_TIME_PREFERENCE_KEY; bool m_isDirty = false; - bool m_initWithAdvanced = false; + bool m_formatCompatibilityDirty = false; const QScopedPointer m_ui; }; diff --git a/src/gui/dbsettings/DatabaseSettingsWidgetEncryption.ui b/src/gui/dbsettings/DatabaseSettingsWidgetEncryption.ui index dd5efe671..f43bf9ddb 100644 --- a/src/gui/dbsettings/DatabaseSettingsWidgetEncryption.ui +++ b/src/gui/dbsettings/DatabaseSettingsWidgetEncryption.ui @@ -6,40 +6,23 @@ 0 0 - 451 - 329 + 585 + 339 - + - - - QFrame::NoFrame + + + 0 - - QFrame::Plain - - - true - - - - - 0 - 0 - 433 - 311 - - - - - 6 - + + 0 - 10 + 0 0 @@ -47,60 +30,6 @@ 0 - - - - QFormLayout::DontWrapRows - - - 2 - - - - - - 75 - true - - - - Database format: - - - - - - - - 0 - 0 - - - - Unless you need to open your database with other programs, always use the latest format. - - - Database format - - - - - - - - true - - - - Format cannot be changed: Your database uses KDBX 4 features - - - true - - - - - @@ -117,427 +46,405 @@ + + + + + + Decryption Time: + + + + + + + ?? s + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Change existing decryption time + + + Change + + + + + + + + + + + + Decryption time in seconds + + + 1 + + + 10 + + + 10 + + + Qt::Horizontal + + + QSlider::TicksBelow + + + 5 + + + + + + + + + ?? ms + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + ? s + + + + + + + + + + 0 + 0 + + + + Higher values offer more protection, but opening the database will take longer. + + + true + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 20 + + + + + + + + + + + 2 + + + + + Database format: + + + + + + + + 0 + 0 + + + + Database format + + + + + + + + true + + + + Format cannot be changed: Your database uses KDBX 4 features + + + + + - - - 75 - true - - - Encryption Settings: + Unless you need to open your database with other programs, always use the latest format. - - - - QTabWidget::North + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Encryption Algorithm: - - QTabWidget::Rounded - - - 0 - - - - Basic - - - - 6 - - - 9 - - - 6 - - - 9 - - - 6 - - - - - - - - 75 - true - - - - Decryption Time: - - - - - - - - 50 - false - - - - ?? s - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - 6 - - - 0 - - - 6 - - - 9 - - - - - Decryption time in seconds - - - 1 - - - 10 - - - 10 - - - Qt::Horizontal - - - QSlider::TicksBelow - - - 5 - - - - - - - - - ?? ms - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - ? s - - - - - - - - - - 0 - 0 - - - - Higher values offer more protection, but opening the database will take longer. - - - true - - - - - - - Qt::Vertical - - - - 20 - 0 - - - - - - - - - - - - Advanced - - - - 6 - - - 6 - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - 150 - 0 - - - - - 150 - 16777215 - - - - Parallelism - - - 1 - - - 128 - - - - - - - Parallelism: - - - - - - - - 150 - 0 - - - - - 150 - 16777215 - - - - Memory usage - - - 1 - - - 1048576 - - - - - - - Memory Usage: - - - - - - - - - - 150 - 0 - - - - - 150 - 16777215 - - - - Transform rounds - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - 1 - - - 1000000000 - - - - - - - Qt::WheelFocus - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - Transform rounds: - - - - - - - - 0 - 0 - - - - Key derivation function - - - - - - - Key Derivation Function: - - - - - - - - 0 - 0 - - - - Encryption algorithm - - - - AES: 256 Bit (default) - - - - - Twofish: 256 Bit - - - - - - - - Encryption Algorithm: - - - - - - - - - Qt::Vertical + + + + + 0 + 0 + - + + Encryption algorithm + + + + AES: 256 Bit (default) + + + + + Twofish: 256 Bit + + + + + + + + Key Derivation Function: + + + + + + + + 0 + 0 + + + + Key derivation function + + + + + + + Transform rounds: + + + + + + + + + + 150 + 0 + + + + + 150 + 16777215 + + + + Transform rounds + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + 1 + + + 1000000000 + + + + + + + Qt::WheelFocus + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + Memory Usage: + + + + + + - 20 + 150 0 - + + + 150 + 16777215 + + + + Memory usage + + + 1 + + + 1048576 + + + + + + + Parallelism: + + + + + + + + 150 + 0 + + + + + 150 + 16777215 + + + + Parallelism + + + 1 + + + 128 + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + activateChangeDecryptionTimeButton decryptionTimeSlider + compatibilitySelection algorithmComboBox kdfComboBox transformRoundsSpinBox transformBenchmarkButton memorySpinBox parallelismSpinBox - advancedSettingsButton diff --git a/src/gui/dbsettings/DatabaseSettingsWidgetGeneral.cpp b/src/gui/dbsettings/DatabaseSettingsWidgetGeneral.cpp index c8a9ec8dc..43b0a72af 100644 --- a/src/gui/dbsettings/DatabaseSettingsWidgetGeneral.cpp +++ b/src/gui/dbsettings/DatabaseSettingsWidgetGeneral.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2023 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 @@ -18,16 +18,9 @@ #include "DatabaseSettingsWidgetGeneral.h" #include "ui_DatabaseSettingsWidgetGeneral.h" -#include -#include -#include -#include - #include "core/Clock.h" #include "core/Group.h" #include "core/Metadata.h" -#include "gui/DatabaseIcons.h" -#include "gui/IconModels.h" #include "gui/MessageBox.h" DatabaseSettingsWidgetGeneral::DatabaseSettingsWidgetGeneral(QWidget* parent) @@ -36,17 +29,13 @@ DatabaseSettingsWidgetGeneral::DatabaseSettingsWidgetGeneral(QWidget* parent) { m_ui->setupUi(this); - connect(m_ui->dbPublicColorButton, &QPushButton::clicked, this, &DatabaseSettingsWidgetGeneral::pickPublicColor); - connect(m_ui->dbPublicColorClearButton, &QPushButton::clicked, this, [this] { setupPublicColorButton({}); }); - connect(m_ui->dbPublicIconButton, &QPushButton::clicked, this, &DatabaseSettingsWidgetGeneral::pickPublicIcon); - connect(m_ui->dbPublicIconClearButton, &QPushButton::clicked, this, [this] { setupPublicIconButton(-1); }); - connect(m_ui->historyMaxItemsCheckBox, SIGNAL(toggled(bool)), m_ui->historyMaxItemsSpinBox, SLOT(setEnabled(bool))); connect(m_ui->historyMaxSizeCheckBox, SIGNAL(toggled(bool)), m_ui->historyMaxSizeSpinBox, SLOT(setEnabled(bool))); - connect(m_ui->autosaveDelayCheckBox, SIGNAL(toggled(bool)), m_ui->autosaveDelaySpinBox, SLOT(setEnabled(bool))); } -DatabaseSettingsWidgetGeneral::~DatabaseSettingsWidgetGeneral() = default; +DatabaseSettingsWidgetGeneral::~DatabaseSettingsWidgetGeneral() +{ +} void DatabaseSettingsWidgetGeneral::initialize() { @@ -58,10 +47,6 @@ void DatabaseSettingsWidgetGeneral::initialize() m_ui->defaultUsernameEdit->setText(meta->defaultUserName()); m_ui->compressionCheckbox->setChecked(m_db->compressionAlgorithm() != Database::CompressionNone); - m_ui->dbPublicName->setText(m_db->publicName()); - setupPublicColorButton(m_db->publicColor()); - setupPublicIconButton(m_db->publicIcon()); - if (meta->historyMaxItems() > -1) { m_ui->historyMaxItemsSpinBox->setValue(meta->historyMaxItems()); m_ui->historyMaxItemsCheckBox->setChecked(true); @@ -79,13 +64,6 @@ void DatabaseSettingsWidgetGeneral::initialize() m_ui->historyMaxSizeSpinBox->setEnabled(false); m_ui->historyMaxSizeCheckBox->setChecked(false); } - if (meta->autosaveDelayMin() > 0) { - m_ui->autosaveDelaySpinBox->setValue(meta->autosaveDelayMin()); - m_ui->autosaveDelayCheckBox->setChecked(true); - } else { - m_ui->autosaveDelayCheckBox->setChecked(false); - m_ui->autosaveDelaySpinBox->setEnabled(false); - } } void DatabaseSettingsWidgetGeneral::uninitialize() @@ -98,7 +76,7 @@ void DatabaseSettingsWidgetGeneral::showEvent(QShowEvent* event) m_ui->dbNameEdit->setFocus(); } -bool DatabaseSettingsWidgetGeneral::saveSettings() +bool DatabaseSettingsWidgetGeneral::save() { auto* meta = m_db->metadata(); @@ -132,10 +110,6 @@ bool DatabaseSettingsWidgetGeneral::saveSettings() meta->setRecycleBinEnabled(m_ui->recycleBinEnabledCheckBox->isChecked()); meta->setSettingsChanged(Clock::currentDateTimeUtc()); - m_db->setPublicName(m_ui->dbPublicName->text()); - m_db->setPublicColor(m_ui->dbPublicColorButton->property("color").toString()); - m_db->setPublicIcon(m_ui->dbPublicIconButton->property("iconIndex").toInt()); - bool truncate = false; int historyMaxItems; @@ -160,12 +134,6 @@ bool DatabaseSettingsWidgetGeneral::saveSettings() truncate = true; } - int autosaveDelayMin = 0; - if (m_ui->autosaveDelayCheckBox->isChecked()) { - autosaveDelayMin = m_ui->autosaveDelaySpinBox->value(); - } - meta->setAutosaveDelayMin(autosaveDelayMin); - if (truncate) { const QList allEntries = m_db->rootGroup()->entriesRecursive(false); for (Entry* entry : allEntries) { @@ -175,79 +143,3 @@ bool DatabaseSettingsWidgetGeneral::saveSettings() return true; } - -void DatabaseSettingsWidgetGeneral::pickPublicColor() -{ - auto oldColor = QColor(m_ui->dbPublicColorButton->property("color").toString()); - auto newColor = QColorDialog::getColor(oldColor); - if (newColor.isValid()) { - setupPublicColorButton(newColor); - } -} - -void DatabaseSettingsWidgetGeneral::setupPublicColorButton(const QColor& color) -{ - m_ui->dbPublicColorClearButton->setVisible(color.isValid()); - if (color.isValid()) { - m_ui->dbPublicColorButton->setStyleSheet(QString("background-color:%1").arg(color.name())); - m_ui->dbPublicColorButton->setProperty("color", color.name()); - } else { - m_ui->dbPublicColorButton->setStyleSheet(""); - m_ui->dbPublicColorButton->setProperty("color", {}); - } -} - -void DatabaseSettingsWidgetGeneral::pickPublicIcon() -{ - QDialog dialog(this); - dialog.setSizeGripEnabled(false); - dialog.setWindowTitle(tr("Select Database Icon")); - - auto iconList = new QListView; - iconList->setFlow(QListView::LeftToRight); - iconList->setMovement(QListView::Static); - iconList->setResizeMode(QListView::Adjust); - iconList->setWrapping(true); - iconList->setSpacing(4); - - auto iconModel = new DefaultIconModel; - iconList->setModel(iconModel); - if (m_ui->dbPublicIconButton->property("iconIndex").toInt() >= 0) { - iconList->setCurrentIndex(iconModel->index(m_ui->dbPublicIconButton->property("iconIndex").toInt(), 0)); - } else { - iconList->setCurrentIndex(iconModel->index(0, 0)); - } - - auto buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); - auto layout = new QVBoxLayout(&dialog); - layout->addWidget(iconList); - layout->addWidget(buttonBox); - - // Resize the dialog to fit the default icon list - auto cellSize = iconList->sizeHintForIndex(iconModel->index(0, 0)); - auto spacing = iconList->spacing() * 2; - dialog.resize((cellSize.width() + spacing) * 15, (cellSize.height() + spacing) * 6 + 16); - - connect(iconList, &QListView::doubleClicked, &dialog, &QDialog::accept); - connect(buttonBox, &QDialogButtonBox::accepted, &dialog, &QDialog::accept); - connect(buttonBox, &QDialogButtonBox::rejected, &dialog, &QDialog::reject); - connect( - &dialog, &QDialog::accepted, this, [this, iconList] { setupPublicIconButton(iconList->currentIndex().row()); }); - - dialog.exec(); -} - -void DatabaseSettingsWidgetGeneral::setupPublicIconButton(int iconIndex) -{ - auto valid = iconIndex >= 0 && iconIndex < databaseIcons()->count(); - m_ui->dbPublicIconClearButton->setVisible(valid); - if (valid) { - m_ui->dbPublicIconButton->setIcon(databaseIcons()->icon(iconIndex)); - m_ui->dbPublicIconButton->setProperty("iconIndex", iconIndex); - m_ui->dbPublicIconClearButton->setVisible(true); - } else { - m_ui->dbPublicIconButton->setIcon(QIcon()); - m_ui->dbPublicIconButton->setProperty("iconIndex", -1); - m_ui->dbPublicIconClearButton->setVisible(false); - } -} diff --git a/src/gui/dbsettings/DatabaseSettingsWidgetGeneral.h b/src/gui/dbsettings/DatabaseSettingsWidgetGeneral.h index 7c0c1ebe9..9e18d4277 100644 --- a/src/gui/dbsettings/DatabaseSettingsWidgetGeneral.h +++ b/src/gui/dbsettings/DatabaseSettingsWidgetGeneral.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2023 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 @@ -20,8 +20,6 @@ #include "DatabaseSettingsWidget.h" -#include - class Database; namespace Ui { @@ -37,21 +35,19 @@ public: Q_DISABLE_COPY(DatabaseSettingsWidgetGeneral); ~DatabaseSettingsWidgetGeneral() override; + inline bool hasAdvancedMode() const override + { + return false; + } + public slots: void initialize() override; void uninitialize() override; - bool saveSettings() override; + bool save() override; protected: void showEvent(QShowEvent* event) override; -private slots: - void pickPublicColor(); - void setupPublicColorButton(const QColor& color); - void pickPublicIcon(); - void setupPublicIconButton(int iconIndex); - -private: const QScopedPointer m_ui; }; diff --git a/src/gui/dbsettings/DatabaseSettingsWidgetGeneral.ui b/src/gui/dbsettings/DatabaseSettingsWidgetGeneral.ui index 324ae6d3d..952b444b1 100644 --- a/src/gui/dbsettings/DatabaseSettingsWidgetGeneral.ui +++ b/src/gui/dbsettings/DatabaseSettingsWidgetGeneral.ui @@ -7,7 +7,7 @@ 0 0 453 - 647 + 374 @@ -23,9 +23,6 @@ - - 20 - 0 @@ -92,151 +89,6 @@ - - - - Public Database Metadata - - - - - - - true - - - - Warning: the following settings are not encrypted. - - - - - - - 0 - - - - - Display name: - - - - - - - Publically visible display name used on the unlock dialog - - - Database public display name - - - - - - - Display color: - - - - - - - - - - 30 - 30 - - - - Publically visible color used on the unlock dialog - - - Database public display color chooser - - - - - - - - - - Clear - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - Display icon: - - - - - - - - - - 30 - 30 - - - - - - - - 30 - 30 - - - - - - - - Clear - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - @@ -258,19 +110,6 @@ of entries remain at most. - - - - Move entries to a recycle bin group -instead of deleting them from the database. -Entries deleted from the recycle bin are -removed from the database. - - - Use recycle bin - - - @@ -316,6 +155,19 @@ add up to the specified amount at most. + + + + Move entries to a recycle bin group +instead of deleting them from the database. +Entries deleted from the recycle bin are +removed from the database. + + + Use recycle bin + + + @@ -350,58 +202,6 @@ add up to the specified amount at most. - - - - - - Autosave delay since last change - - - Autosave delay since last change checkbox - - - Autosave delay - - - - - - - Autosave delay since last change in minutes - - - Autosave delay since last change in minutes - - - min - - - 0 - - - 420000000 - - - 5 - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - diff --git a/src/gui/dbsettings/DatabaseSettingsWidgetMaintenance.cpp b/src/gui/dbsettings/DatabaseSettingsWidgetMaintenance.cpp index fea6bc2a3..09650c6b0 100644 --- a/src/gui/dbsettings/DatabaseSettingsWidgetMaintenance.cpp +++ b/src/gui/dbsettings/DatabaseSettingsWidgetMaintenance.cpp @@ -42,7 +42,9 @@ DatabaseSettingsWidgetMaintenance::DatabaseSettingsWidgetMaintenance(QWidget* pa SLOT(selectionChanged())); } -DatabaseSettingsWidgetMaintenance::~DatabaseSettingsWidgetMaintenance() = default; +DatabaseSettingsWidgetMaintenance::~DatabaseSettingsWidgetMaintenance() +{ +} void DatabaseSettingsWidgetMaintenance::populateIcons(QSharedPointer db) { diff --git a/src/gui/dbsettings/DatabaseSettingsWidgetMaintenance.h b/src/gui/dbsettings/DatabaseSettingsWidgetMaintenance.h index 463ad89a8..5ee6d55fb 100644 --- a/src/gui/dbsettings/DatabaseSettingsWidgetMaintenance.h +++ b/src/gui/dbsettings/DatabaseSettingsWidgetMaintenance.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2023 KeePassXC Team + * Copyright (C) 2021 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 @@ -37,10 +37,15 @@ public: Q_DISABLE_COPY(DatabaseSettingsWidgetMaintenance); ~DatabaseSettingsWidgetMaintenance() override; + inline bool hasAdvancedMode() const override + { + return false; + } + public slots: void initialize() override; - void uninitialize() override {}; - inline bool saveSettings() override + void uninitialize() override{}; + inline bool save() override { return true; }; diff --git a/src/gui/dbsettings/DatabaseSettingsWidgetMaintenance.ui b/src/gui/dbsettings/DatabaseSettingsWidgetMaintenance.ui index d5824e67b..e1d06f6f5 100644 --- a/src/gui/dbsettings/DatabaseSettingsWidgetMaintenance.ui +++ b/src/gui/dbsettings/DatabaseSettingsWidgetMaintenance.ui @@ -23,9 +23,6 @@ - - 20 - 0 diff --git a/src/gui/dbsettings/DatabaseSettingsWidgetMetaDataSimple.cpp b/src/gui/dbsettings/DatabaseSettingsWidgetMetaDataSimple.cpp index f474fe8d6..0a1dccb5f 100644 --- a/src/gui/dbsettings/DatabaseSettingsWidgetMetaDataSimple.cpp +++ b/src/gui/dbsettings/DatabaseSettingsWidgetMetaDataSimple.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2023 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 @@ -28,7 +28,9 @@ DatabaseSettingWidgetMetaData::DatabaseSettingWidgetMetaData(QWidget* parent) m_ui->setupUi(this); } -DatabaseSettingWidgetMetaData::~DatabaseSettingWidgetMetaData() = default; +DatabaseSettingWidgetMetaData::~DatabaseSettingWidgetMetaData() +{ +} void DatabaseSettingWidgetMetaData::initialize() { @@ -51,7 +53,7 @@ void DatabaseSettingWidgetMetaData::uninitialize() { } -bool DatabaseSettingWidgetMetaData::saveSettings() +bool DatabaseSettingWidgetMetaData::save() { Metadata* meta = m_db->metadata(); meta->setName(m_ui->databaseName->text()); diff --git a/src/gui/dbsettings/DatabaseSettingsWidgetMetaDataSimple.h b/src/gui/dbsettings/DatabaseSettingsWidgetMetaDataSimple.h index 2aee80813..d2b739474 100644 --- a/src/gui/dbsettings/DatabaseSettingsWidgetMetaDataSimple.h +++ b/src/gui/dbsettings/DatabaseSettingsWidgetMetaDataSimple.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2023 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 @@ -35,10 +35,15 @@ public: Q_DISABLE_COPY(DatabaseSettingWidgetMetaData); ~DatabaseSettingWidgetMetaData() override; + inline bool hasAdvancedMode() const override + { + return false; + } + public slots: void initialize() override; void uninitialize() override; - bool saveSettings() override; + bool save() override; protected: void showEvent(QShowEvent* event) override; diff --git a/src/gui/entry/AutoTypeAssociationsModel.cpp b/src/gui/entry/AutoTypeAssociationsModel.cpp index 03eedae25..6e7b08bc0 100644 --- a/src/gui/entry/AutoTypeAssociationsModel.cpp +++ b/src/gui/entry/AutoTypeAssociationsModel.cpp @@ -79,14 +79,14 @@ QVariant AutoTypeAssociationsModel::headerData(int section, Qt::Orientation orie return tr("Sequence"); } } else { - return {}; + return QVariant(); } } QVariant AutoTypeAssociationsModel::data(const QModelIndex& index, int role) const { if (!index.isValid()) { - return {}; + return QVariant(); } if (role == Qt::DisplayRole) { @@ -108,7 +108,7 @@ QVariant AutoTypeAssociationsModel::data(const QModelIndex& index, int role) con return sequence; } } else { - return {}; + return QVariant(); } } diff --git a/src/gui/entry/EditEntryAttachmentsDialog.cpp b/src/gui/entry/EditEntryAttachmentsDialog.cpp deleted file mode 100644 index 047f0a6b4..000000000 --- a/src/gui/entry/EditEntryAttachmentsDialog.cpp +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright (C) 2025 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 "EditEntryAttachmentsDialog.h" -#include "ui_EditEntryAttachmentsDialog.h" - -#include - -#include -#include -#include -#include - -EditEntryAttachmentsDialog::EditEntryAttachmentsDialog(QWidget* parent) - : QDialog(parent) - , m_ui(new Ui::EditEntryAttachmentsDialog) -{ - m_ui->setupUi(this); - - m_ui->dialogButtons->setStandardButtons(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); - - connect(m_ui->dialogButtons, &QDialogButtonBox::accepted, this, &EditEntryAttachmentsDialog::accept); - connect(m_ui->dialogButtons, &QDialogButtonBox::rejected, this, &EditEntryAttachmentsDialog::reject); -} - -EditEntryAttachmentsDialog::~EditEntryAttachmentsDialog() = default; - -void EditEntryAttachmentsDialog::setAttachment(attachments::Attachment attachment) -{ - setWindowTitle(tr("Edit: %1").arg(attachment.name)); - - m_ui->attachmentWidget->openAttachment(std::move(attachment), attachments::OpenMode::ReadWrite); -} - -attachments::Attachment EditEntryAttachmentsDialog::getAttachment() const -{ - return m_ui->attachmentWidget->getAttachment(); -} diff --git a/src/gui/entry/EditEntryAttachmentsDialog.h b/src/gui/entry/EditEntryAttachmentsDialog.h deleted file mode 100644 index 38c77179a..000000000 --- a/src/gui/entry/EditEntryAttachmentsDialog.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (C) 2025 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 . - */ - -#pragma once - -#include "attachments/AttachmentTypes.h" - -#include -#include - -namespace Ui -{ - class EditEntryAttachmentsDialog; -} - -class EntryAttachments; - -class EditEntryAttachmentsDialog : public QDialog -{ - Q_OBJECT - -public: - explicit EditEntryAttachmentsDialog(QWidget* parent = nullptr); - ~EditEntryAttachmentsDialog() override; - - void setAttachment(attachments::Attachment attachment); - attachments::Attachment getAttachment() const; - -private: - QScopedPointer m_ui; -}; diff --git a/src/gui/entry/EditEntryAttachmentsDialog.ui b/src/gui/entry/EditEntryAttachmentsDialog.ui deleted file mode 100644 index b958f966d..000000000 --- a/src/gui/entry/EditEntryAttachmentsDialog.ui +++ /dev/null @@ -1,46 +0,0 @@ - - - EditEntryAttachmentsDialog - - - - 0 - 0 - 447 - 424 - - - - - - - - - - - 0 - 0 - - - - - - - - QDialogButtonBox::Cancel|QDialogButtonBox::Ok - - - - - - - - AttachmentWidget - QWidget -
    gui/entry/attachments/AttachmentWidget.h
    - 1 -
    -
    - - -
    diff --git a/src/gui/entry/EditEntryWidget.cpp b/src/gui/entry/EditEntryWidget.cpp index d2213a669..263122ae2 100644 --- a/src/gui/entry/EditEntryWidget.cpp +++ b/src/gui/entry/EditEntryWidget.cpp @@ -1,6 +1,6 @@ /* - * Copyright (C) 2023 KeePassXC Team * Copyright (C) 2010 Felix Geyer + * Copyright (C) 2021 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 @@ -41,7 +41,6 @@ #include "core/TimeDelta.h" #ifdef WITH_XC_SSHAGENT #include "sshagent/OpenSSHKey.h" -#include "sshagent/OpenSSHKeyGenDialog.h" #include "sshagent/SSHAgent.h" #endif #ifdef WITH_XC_BROWSER @@ -115,7 +114,6 @@ EditEntryWidget::EditEntryWidget(QWidget* parent) m_entryModifiedTimer.setSingleShot(true); m_entryModifiedTimer.setInterval(0); connect(&m_entryModifiedTimer, &QTimer::timeout, this, [this] { - // TODO: Upon refactor of this widget, this needs to merge unsaved changes in the UI if (isVisible() && m_entry) { setForms(m_entry); } @@ -137,47 +135,8 @@ EditEntryWidget::EditEntryWidget(QWidget* parent) m_mainUi->passwordEdit->setQualityVisible(true); } -EditEntryWidget::~EditEntryWidget() = default; - -bool EditEntryWidget::switchToPage(Page page) +EditEntryWidget::~EditEntryWidget() { - auto index = pageIndex(widgetForPage(page)); - if (index >= 0) { - setCurrentPage(index); - return true; - } - return false; -} - -QWidget* EditEntryWidget::widgetForPage(Page page) const -{ - switch (page) { - case Page::Main: - return m_mainWidget; - case Page::Advanced: - return m_advancedWidget; - case Page::Icon: - return m_iconsWidget; - case Page::AutoType: - return m_autoTypeWidget; - case Page::Browser: -#ifdef WITH_XC_BROWSER - return m_browserWidget; -#else - return nullptr; -#endif - case Page::SSHAgent: -#ifdef WITH_XC_SSHAGENT - return m_sshAgentWidget; -#else - return nullptr; -#endif - case Page::Properties: - return m_editWidgetProperties; - case Page::History: - return m_historyWidget; - } - return nullptr; } void EditEntryWidget::setupMain() @@ -202,9 +161,6 @@ void EditEntryWidget::setupMain() connect(m_mainUi->fetchFaviconButton, SIGNAL(clicked()), m_iconsWidget, SLOT(downloadFavicon())); connect(m_mainUi->urlEdit, SIGNAL(textChanged(QString)), m_iconsWidget, SLOT(setUrl(QString))); m_mainUi->urlEdit->enableVerifyMode(); -#endif -#ifdef WITH_XC_BROWSER - connect(m_mainUi->urlEdit, SIGNAL(textChanged(QString)), this, SLOT(entryURLEdited(const QString&))); #endif connect(m_mainUi->expireCheck, &QCheckBox::toggled, [&](bool enabled) { m_mainUi->expireDatePicker->setEnabled(enabled); @@ -371,18 +327,17 @@ void EditEntryWidget::insertURL() { Q_ASSERT(!m_history); - QString name(EntryAttributes::AdditionalUrlAttribute); + QString name("KP2A_URL"); int i = 1; while (m_entryAttributes->keys().contains(name)) { - name = QString("%1_%2").arg(EntryAttributes::AdditionalUrlAttribute, QString::number(i)); + name = QString("KP2A_URL_%1").arg(i); i++; } m_entryAttributes->set(name, tr("")); QModelIndex index = m_additionalURLsDataModel->indexByKey(name); - m_additionalURLsDataModel->setEntryUrl(m_entry->url()); m_browserUi->additionalURLsView->setCurrentIndex(index); m_browserUi->additionalURLsView->edit(index); @@ -443,11 +398,6 @@ void EditEntryWidget::updateCurrentURL() m_browserUi->removeURLButton->setEnabled(false); } } - -void EditEntryWidget::entryURLEdited(const QString& url) -{ - m_additionalURLsDataModel->setEntryUrl(url); -} #endif void EditEntryWidget::setupProperties() @@ -587,7 +537,6 @@ void EditEntryWidget::updateHistoryButtons(const QModelIndex& current, const QMo #ifdef WITH_XC_SSHAGENT void EditEntryWidget::setupSSHAgent() { - m_pendingPrivateKey = ""; m_sshAgentUi->setupUi(m_sshAgentWidget); QFont fixedFont = Font::fixedFont(); @@ -606,10 +555,8 @@ void EditEntryWidget::setupSSHAgent() connect(m_sshAgentUi->browseButton, &QPushButton::clicked, this, &EditEntryWidget::browsePrivateKey); connect(m_sshAgentUi->addToAgentButton, &QPushButton::clicked, this, &EditEntryWidget::addKeyToAgent); connect(m_sshAgentUi->removeFromAgentButton, &QPushButton::clicked, this, &EditEntryWidget::removeKeyFromAgent); - connect(m_sshAgentUi->clearAgentButton, &QPushButton::clicked, this, &EditEntryWidget::clearAgent); connect(m_sshAgentUi->decryptButton, &QPushButton::clicked, this, &EditEntryWidget::decryptPrivateKey); connect(m_sshAgentUi->copyToClipboardButton, &QPushButton::clicked, this, &EditEntryWidget::copyPublicKey); - connect(m_sshAgentUi->generateButton, &QPushButton::clicked, this, &EditEntryWidget::generatePrivateKey); connect(m_attachments.data(), &EntryAttachments::modified, this, &EditEntryWidget::updateSSHAgentAttachments); @@ -637,12 +584,6 @@ void EditEntryWidget::updateSSHAgent() m_sshAgentSettings.fromEntry(m_entry); setSSHAgentSettings(); - if (!m_pendingPrivateKey.isEmpty()) { - m_sshAgentSettings.setAttachmentName(m_pendingPrivateKey); - m_sshAgentSettings.setSelectedType("attachment"); - m_pendingPrivateKey = ""; - } - updateSSHAgentAttachments(); } @@ -703,24 +644,29 @@ void EditEntryWidget::updateSSHAgentKeyInfo() if (!key.fingerprint().isEmpty()) { m_sshAgentUi->fingerprintTextLabel->setText(key.fingerprint(QCryptographicHash::Md5) + "\n" + key.fingerprint(QCryptographicHash::Sha256)); + } else { + m_sshAgentUi->fingerprintTextLabel->setText(tr("(encrypted)")); } - if (!key.comment().isEmpty()) { + if (!key.comment().isEmpty() || !key.encrypted()) { m_sshAgentUi->commentTextLabel->setText(key.comment()); + } else { + m_sshAgentUi->commentTextLabel->setText(tr("(encrypted)")); + m_sshAgentUi->decryptButton->setEnabled(true); } - m_sshAgentUi->decryptButton->setEnabled(key.encrypted()); - if (!key.publicKey().isEmpty()) { m_sshAgentUi->publicKeyEdit->document()->setPlainText(key.publicKey()); m_sshAgentUi->copyToClipboardButton->setEnabled(true); + } else { + m_sshAgentUi->publicKeyEdit->document()->setPlainText(tr("(encrypted)")); + m_sshAgentUi->copyToClipboardButton->setDisabled(true); } // enable agent buttons only if we have an agent running if (sshAgent()->isAgentRunning()) { m_sshAgentUi->addToAgentButton->setEnabled(true); m_sshAgentUi->removeFromAgentButton->setEnabled(true); - m_sshAgentUi->clearAgentButton->setEnabled(true); sshAgent()->setAutoRemoveOnLock(key, m_sshAgentUi->removeKeyFromAgentCheckBox->isChecked()); } @@ -749,13 +695,6 @@ void EditEntryWidget::toKeeAgentSettings(KeeAgentSettings& settings) const settings.setSaveAttachmentToTempFile(m_sshAgentSettings.saveAttachmentToTempFile()); } -void EditEntryWidget::updateTotp() -{ - if (m_entry) { - m_attributesModel->setEntryAttributes(m_entry->attributes()); - } -} - void EditEntryWidget::browsePrivateKey() { auto fileName = fileDialog()->getOpenFileName(this, tr("Select private key"), FileDialog::getLastDir("sshagent")); @@ -823,18 +762,11 @@ void EditEntryWidget::removeKeyFromAgent() } } -void EditEntryWidget::clearAgent() -{ - auto ret = sshAgent()->clearAllAgentIdentities(); - showMessage(sshAgent()->errorString(), ret ? MessageWidget::Positive : KMessageWidget::Error); -} - void EditEntryWidget::decryptPrivateKey() { OpenSSHKey key; if (!getOpenSSHKey(key, true)) { - showMessage(tr("Failed to decrypt SSH key, ensure password is correct."), MessageWidget::Error); return; } @@ -848,51 +780,18 @@ void EditEntryWidget::decryptPrivateKey() + key.fingerprint(QCryptographicHash::Sha256)); m_sshAgentUi->publicKeyEdit->document()->setPlainText(key.publicKey()); m_sshAgentUi->copyToClipboardButton->setEnabled(true); - m_sshAgentUi->decryptButton->setEnabled(false); } void EditEntryWidget::copyPublicKey() { clipboard()->setText(m_sshAgentUi->publicKeyEdit->document()->toPlainText()); } - -void EditEntryWidget::generatePrivateKey() -{ - auto dialog = new OpenSSHKeyGenDialog(this); - - OpenSSHKey key; - dialog->setKey(&key); - - if (dialog->exec()) { - // derive openssh naming from type - QString keyPrefix = key.type(); - if (keyPrefix.startsWith("ecdsa")) { - keyPrefix = "id_ecdsa"; - } else { - keyPrefix.replace("ssh-", "id_"); - } - - for (int i = 0; i < 10; i++) { - QString keyName = keyPrefix; - - if (i > 0) { - keyName += "." + QString::number(i); - } - - if (!m_entry->attachments()->hasKey(keyName)) { - m_pendingPrivateKey = keyName; - m_entry->attachments()->set(m_pendingPrivateKey, key.privateKey().toUtf8()); - break; - } - } - } -} #endif void EditEntryWidget::useExpiryPreset(QAction* action) { m_mainUi->expireCheck->setChecked(true); - auto delta = action->data().value(); + TimeDelta delta = action->data().value(); QDateTime now = Clock::currentDateTime(); QDateTime expiryDateTime = now + delta; m_mainUi->expireDatePicker->setDateTime(expiryDateTime); @@ -920,6 +819,8 @@ void EditEntryWidget::loadEntry(Entry* entry, m_create = create; m_history = history; + connect(m_entry, &Entry::modified, this, [this] { m_entryModifiedTimer.start(); }); + if (history) { setHeadline(QString("%1 \u2022 %2").arg(parentName, tr("Entry history"))); } else { @@ -927,15 +828,13 @@ void EditEntryWidget::loadEntry(Entry* entry, setHeadline(QString("%1 \u2022 %2").arg(parentName, tr("Add entry"))); } else { setHeadline(QString("%1 \u2022 %2 \u2022 %3").arg(parentName, entry->title(), tr("Edit entry"))); - // Reload entry details if changed outside of the edit dialog - connect(m_entry, &Entry::modified, this, [this] { m_entryModifiedTimer.start(); }); } } setForms(entry); setReadOnly(m_history); - switchToPage(Page::Main); + setCurrentPage(0); setPageHidden(m_historyWidget, m_history || m_entry->historyItems().count() < 1); #ifdef WITH_XC_SSHAGENT setPageHidden(m_sshAgentWidget, !sshAgent()->isEnabled()); @@ -962,7 +861,6 @@ void EditEntryWidget::setForms(Entry* entry, bool restore) m_mainUi->expireDatePicker->setReadOnly(m_history); m_mainUi->revealNotesButton->setIcon(icons()->onOffIcon("password-show", false)); m_mainUi->revealNotesButton->setVisible(config()->get(Config::Security_HideNotes).toBool()); - m_mainUi->revealNotesButton->setChecked(false); m_mainUi->notesEdit->setReadOnly(m_history); m_mainUi->notesEdit->setVisible(!config()->get(Config::Security_HideNotes).toBool()); if (config()->get(Config::GUI_MonospaceNotes).toBool()) { @@ -1180,7 +1078,7 @@ bool EditEntryWidget::commitEntry() MessageBox::Yes | MessageBox::No, MessageBox::Yes); if (res == MessageBox::Yes) { - switchToPage(Page::AutoType); + setCurrentPage(3); return false; } } @@ -1195,7 +1093,7 @@ bool EditEntryWidget::commitEntry() MessageBox::Yes | MessageBox::No, MessageBox::Yes); if (res == MessageBox::Yes) { - switchToPage(Page::AutoType); + setCurrentPage(3); return false; } } @@ -1219,33 +1117,27 @@ bool EditEntryWidget::commitEntry() toKeeAgentSettings(m_sshAgentSettings); #endif - // Begin entry update - if (!m_create) { - m_entry->beginUpdate(); - } - #ifdef WITH_XC_BROWSER if (config()->get(Config::Browser_Enabled).toBool()) { updateBrowser(); } #endif + if (!m_create) { + m_entry->beginUpdate(); + } + updateEntryData(m_entry); if (!m_create) { m_entry->endUpdate(); } - // End entry update m_historyModel->setEntries(m_entry->historyItems(), m_entry); - setPageHidden(m_historyWidget, m_history || m_entry->historyItems().count() < 1); m_advancedUi->attachmentsWidget->linkAttachments(m_entry->attachments()); showMessage(tr("Entry updated successfully."), MessageWidget::Positive); setModified(false); - // Prevent a reload due to entry modified signals - m_entryModifiedTimer.stop(); - return true; } @@ -1270,10 +1162,7 @@ void EditEntryWidget::updateEntryData(Entry* entry) const entry->setPassword(m_mainUi->passwordEdit->text()); entry->setExpires(m_mainUi->expireCheck->isChecked()); entry->setExpiryTime(m_mainUi->expireDatePicker->dateTime().toUTC()); - - QStringList uniqueTags(m_mainUi->tagsList->tags()); - uniqueTags.removeDuplicates(); - entry->setTags(uniqueTags.join(";")); + entry->setTags(m_mainUi->tagsList->tags().toSet().toList().join(";")); // remove repeated tags entry->setNotes(m_mainUi->notesEdit->toPlainText()); diff --git a/src/gui/entry/EditEntryWidget.h b/src/gui/entry/EditEntryWidget.h index 3fce4d56d..89422c0d4 100644 --- a/src/gui/entry/EditEntryWidget.h +++ b/src/gui/entry/EditEntryWidget.h @@ -77,19 +77,6 @@ public: Entry* currentEntry() const; void clear(); - enum class Page - { - Main, - Advanced, - Icon, - AutoType, - Browser, - SSHAgent, - Properties, - History - }; - bool switchToPage(Page page); - signals: void editFinished(bool accepted); void historyEntryActivated(Entry* entry); @@ -131,14 +118,11 @@ private slots: void updateSSHAgentAttachment(); void updateSSHAgentAttachments(); void updateSSHAgentKeyInfo(); - void updateTotp(); void browsePrivateKey(); void addKeyToAgent(); void removeKeyFromAgent(); - void clearAgent(); void decryptPrivateKey(); void copyPublicKey(); - void generatePrivateKey(); #endif #ifdef WITH_XC_BROWSER void updateBrowserModified(); @@ -147,7 +131,6 @@ private slots: void removeCurrentURL(); void editCurrentURL(); void updateCurrentURL(); - void entryURLEdited(const QString& url); #endif private: @@ -166,6 +149,7 @@ private: void setupEntryUpdate(); void setupColorButton(bool foreground, const QColor& color); + bool passwordsEqual(); void setForms(Entry* entry, bool restore = false); QMenu* createPresetsMenu(); void updateEntryData(Entry* entry) const; @@ -176,8 +160,6 @@ private: void displayAttribute(QModelIndex index, bool showProtected); - QWidget* widgetForPage(Page page) const; - QPointer m_entry; QSharedPointer m_db; @@ -185,7 +167,6 @@ private: bool m_history; #ifdef WITH_XC_SSHAGENT KeeAgentSettings m_sshAgentSettings; - QString m_pendingPrivateKey; #endif const QScopedPointer m_mainUi; const QScopedPointer m_advancedUi; diff --git a/src/gui/entry/EditEntryWidgetBrowser.ui b/src/gui/entry/EditEntryWidgetBrowser.ui index 7b4d5016b..093d141e8 100644 --- a/src/gui/entry/EditEntryWidgetBrowser.ui +++ b/src/gui/entry/EditEntryWidgetBrowser.ui @@ -6,7 +6,7 @@ 0 0 - 374 + 400 348 @@ -26,7 +26,7 @@ - These settings affect the entry's behaviour with the browser extension. + These settings affect to the entry's behaviour with the browser extension. @@ -63,7 +63,7 @@ - Only send this entry to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. + Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. Use this entry only with HTTP Basic Auth @@ -73,7 +73,7 @@ - Do not send this entry to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. + Do not send this setting to the browser for HTTP Auth dialogs. If enabled, HTTP Auth dialogs will not show this entry for selection. Do not use this entry with HTTP Basic Auth @@ -86,7 +86,7 @@ - Additional URLs + Additional URL's diff --git a/src/gui/entry/EditEntryWidgetMain.ui b/src/gui/entry/EditEntryWidgetMain.ui index 6816b090f..6fe6637e7 100644 --- a/src/gui/entry/EditEntryWidgetMain.ui +++ b/src/gui/entry/EditEntryWidgetMain.ui @@ -105,9 +105,6 @@ Notes field - - 10.000000000000000 -
    diff --git a/src/gui/entry/EditEntryWidgetSSHAgent.ui b/src/gui/entry/EditEntryWidgetSSHAgent.ui index 3215c1a27..81fac082a 100644 --- a/src/gui/entry/EditEntryWidgetSSHAgent.ui +++ b/src/gui/entry/EditEntryWidgetSSHAgent.ui @@ -118,6 +118,23 @@ Private key + + + + External file + + + + + + + Browser for key file + + + Browse… + + + @@ -128,7 +145,7 @@ - + Qt::ClickFocus @@ -138,8 +155,8 @@ - - + + @@ -154,40 +171,9 @@ - - - - Clear agent - - - - - - - External file - - - - - - - Browser for key file - - - Browse… - - - - - - - Generate - - - - + @@ -339,6 +325,7 @@ lifetimeCheckBox lifetimeSpinBox attachmentRadioButton + attachmentComboBox externalFileRadioButton browseButton addToAgentButton diff --git a/src/gui/entry/EntryAttachmentsModel.cpp b/src/gui/entry/EntryAttachmentsModel.cpp index 96a55ed72..c5d0ff073 100644 --- a/src/gui/entry/EntryAttachmentsModel.cpp +++ b/src/gui/entry/EntryAttachmentsModel.cpp @@ -79,7 +79,7 @@ QVariant EntryAttachmentsModel::headerData(int section, Qt::Orientation orientat QVariant EntryAttachmentsModel::data(const QModelIndex& index, int role) const { if (!index.isValid()) { - return {}; + return QVariant(); } if (role == Qt::DisplayRole || role == Qt::EditRole) { @@ -96,7 +96,7 @@ QVariant EntryAttachmentsModel::data(const QModelIndex& index, int role) const } } - return {}; + return QVariant(); } bool EntryAttachmentsModel::setData(const QModelIndex& index, const QVariant& value, int role) @@ -124,21 +124,12 @@ Qt::ItemFlags EntryAttachmentsModel::flags(const QModelIndex& index) const QString EntryAttachmentsModel::keyByIndex(const QModelIndex& index) const { if (!index.isValid()) { - return {}; + return QString(); } return m_entryAttachments->keys().at(index.row()); } -int EntryAttachmentsModel::rowByKey(const QString& key) const -{ - if (!m_entryAttachments) { - return -1; - } - - return m_entryAttachments->keys().indexOf(key); -} - void EntryAttachmentsModel::attachmentChange(const QString& key) { int row = m_entryAttachments->keys().indexOf(key); diff --git a/src/gui/entry/EntryAttachmentsModel.h b/src/gui/entry/EntryAttachmentsModel.h index ea541ebf7..d155f25ca 100644 --- a/src/gui/entry/EntryAttachmentsModel.h +++ b/src/gui/entry/EntryAttachmentsModel.h @@ -44,7 +44,6 @@ public: bool setData(const QModelIndex& index, const QVariant& value, int role = Qt::EditRole) override; Qt::ItemFlags flags(const QModelIndex& index) const override; QString keyByIndex(const QModelIndex& index) const; - int rowByKey(const QString& key) const; private slots: void attachmentChange(const QString& key); diff --git a/src/gui/entry/EntryAttachmentsWidget.cpp b/src/gui/entry/EntryAttachmentsWidget.cpp index a3b7fc763..d8634f275 100644 --- a/src/gui/entry/EntryAttachmentsWidget.cpp +++ b/src/gui/entry/EntryAttachmentsWidget.cpp @@ -16,42 +16,21 @@ */ #include "EntryAttachmentsWidget.h" - -#include "EditEntryAttachmentsDialog.h" -#include "EntryAttachmentsModel.h" -#include "PreviewEntryAttachmentsDialog.h" #include "ui_EntryAttachmentsWidget.h" -#include +#include #include -#include -#include #include #include #include +#include "EntryAttachmentsModel.h" +#include "core/Config.h" #include "core/EntryAttachments.h" #include "core/Tools.h" #include "gui/FileDialog.h" #include "gui/MessageBox.h" -namespace -{ - constexpr const char* DefaultName = "New Attachment"; - constexpr const char* Suffix = ".txt"; - - QString generateUniqueName(const QString& name, const QStringList& existingNames) - { - uint64_t i = 0; - QString newName = QStringLiteral("%1%2").arg(name).arg(Suffix); - while (existingNames.contains(newName)) { - newName = QStringLiteral("%1_%2%3").arg(name).arg(++i).arg(Suffix); - } - return newName; - } - -} // namespace - EntryAttachmentsWidget::EntryAttachmentsWidget(QWidget* parent) : QWidget(parent) , m_ui(new Ui::EntryAttachmentsWidget) @@ -67,12 +46,12 @@ EntryAttachmentsWidget::EntryAttachmentsWidget(QWidget* parent) m_ui->attachmentsView->viewport()->installEventFilter(this); m_ui->attachmentsView->setModel(m_attachmentsModel); - m_ui->attachmentsView->horizontalHeader()->setMinimumSectionSize(70); - m_ui->attachmentsView->horizontalHeader()->setSectionResizeMode(EntryAttachmentsModel::NameColumn, - QHeaderView::Stretch); - m_ui->attachmentsView->horizontalHeader()->setSectionResizeMode(EntryAttachmentsModel::SizeColumn, - QHeaderView::ResizeToContents); - m_ui->attachmentsView->verticalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents); + m_ui->attachmentsView->verticalHeader()->hide(); + m_ui->attachmentsView->horizontalHeader()->setStretchLastSection(true); + m_ui->attachmentsView->horizontalHeader()->resizeSection(EntryAttachmentsModel::NameColumn, 400); + m_ui->attachmentsView->setSelectionBehavior(QAbstractItemView::SelectRows); + m_ui->attachmentsView->setSelectionMode(QAbstractItemView::ExtendedSelection); + m_ui->attachmentsView->setEditTriggers(QAbstractItemView::SelectedClicked); connect(this, SIGNAL(buttonsVisibleChanged(bool)), this, SLOT(updateButtonsVisible())); connect(this, SIGNAL(readOnlyChanged(bool)), SLOT(updateButtonsEnabled())); @@ -85,35 +64,20 @@ EntryAttachmentsWidget::EntryAttachmentsWidget(QWidget* parent) // clang-format on connect(this, SIGNAL(readOnlyChanged(bool)), m_attachmentsModel, SLOT(setReadOnly(bool))); - connect(m_ui->attachmentsView, &QAbstractItemView::doubleClicked, [this](const QModelIndex&) { - m_readOnly ? previewSelectedAttachment() : editSelectedAttachment(); - }); - - connect(m_ui->attachmentsView->itemDelegate(), &QAbstractItemDelegate::commitData, [this](QWidget* editor) { - if (auto lineEdit = qobject_cast(editor)) { - auto index = m_attachmentsModel->rowByKey(lineEdit->text()); - m_ui->attachmentsView->setCurrentIndex(m_attachmentsModel->index(index, 0)); - } - }); - + connect(m_ui->attachmentsView, SIGNAL(doubleClicked(QModelIndex)), SLOT(openAttachment(QModelIndex))); connect(m_ui->saveAttachmentButton, SIGNAL(clicked()), SLOT(saveSelectedAttachments())); connect(m_ui->openAttachmentButton, SIGNAL(clicked()), SLOT(openSelectedAttachments())); connect(m_ui->addAttachmentButton, SIGNAL(clicked()), SLOT(insertAttachments())); - connect(m_ui->editAttachmentButton, SIGNAL(clicked()), SLOT(editSelectedAttachment())); - connect(m_ui->previewAttachmentButton, SIGNAL(clicked()), SLOT(previewSelectedAttachment())); connect(m_ui->removeAttachmentButton, SIGNAL(clicked()), SLOT(removeSelectedAttachments())); - - auto addButtonMenu = new QMenu(this); - addButtonMenu->addAction(tr("New Text Document"), this, &EntryAttachmentsWidget::newAttachments); - addButtonMenu->addAction(tr("Load from Disk…"), this, QOverload<>::of(&EntryAttachmentsWidget::insertAttachments)); - - m_ui->addAttachmentButton->setMenu(addButtonMenu); + connect(m_ui->renameAttachmentButton, SIGNAL(clicked()), SLOT(renameSelectedAttachments())); updateButtonsVisible(); updateButtonsEnabled(); } -EntryAttachmentsWidget::~EntryAttachmentsWidget() = default; +EntryAttachmentsWidget::~EntryAttachmentsWidget() +{ +} const EntryAttachments* EntryAttachmentsWidget::attachments() const { @@ -201,117 +165,6 @@ void EntryAttachmentsWidget::insertAttachments() emit widgetUpdated(); } -void EntryAttachmentsWidget::newAttachments() -{ - Q_ASSERT(m_entryAttachments); - Q_ASSERT(!isReadOnly()); - if (isReadOnly()) { - return; - } - - // Create a temporary file to allow the user to edit the attachment - auto newFileName = generateUniqueName(DefaultName, m_entryAttachments->keys()); - m_entryAttachments->set(newFileName, QByteArray()); - - auto currentIndex = m_attachmentsModel->index(m_attachmentsModel->rowByKey(newFileName), 0); - m_ui->attachmentsView->setCurrentIndex(currentIndex); - m_ui->attachmentsView->edit(currentIndex); -} - -void EntryAttachmentsWidget::previewSelectedAttachment() -{ - Q_ASSERT(m_entryAttachments); - - const auto selectionModel = m_ui->attachmentsView->selectionModel(); - if (!selectionModel) { - qWarning() << "Failed to preview an attachment: No selection model"; - return; - } - - auto indexes = selectionModel->selectedIndexes(); - if (indexes.empty()) { - qWarning() << "Failed to edit an attachment: No attachment selected"; - return; - } - - const auto index = indexes.first(); - if (!index.isValid()) { - qWarning() << "Failed to preview an attachment: Attachment not found"; - return; - } - - // Set selection to the first - m_ui->attachmentsView->setCurrentIndex(index); - - auto name = m_attachmentsModel->keyByIndex(index); - auto data = m_entryAttachments->value(name); - - PreviewEntryAttachmentsDialog previewDialog(this); - previewDialog.setAttachment({name, data}); - - connect(&previewDialog, SIGNAL(openAttachment(QString)), SLOT(openSelectedAttachments())); - connect(&previewDialog, SIGNAL(saveAttachment(QString)), SLOT(saveSelectedAttachments())); - // Refresh the preview if the attachment changes - connect(m_entryAttachments, - &EntryAttachments::keyModified, - &previewDialog, - [&previewDialog, &name, this](const QString& key) { - if (key == name) { - previewDialog.setAttachment({name, m_entryAttachments->value(name)}); - } - }); - - previewDialog.exec(); - - // Set focus back to the widget to allow keyboard navigation - setFocus(); -} - -void EntryAttachmentsWidget::editSelectedAttachment() -{ - Q_ASSERT(m_entryAttachments); - - const auto selectionModel = m_ui->attachmentsView->selectionModel(); - if (!selectionModel) { - qWarning() << "Failed to edit an attachment: No selection model"; - return; - } - - const auto selectedIndexes = selectionModel->selectedIndexes(); - if (selectedIndexes.isEmpty()) { - qWarning() << "Failed to edit an attachment: No attachment selected"; - return; - } - - const auto index = selectedIndexes.first(); - - if (!index.isValid()) { - qWarning() << "Failed to edit an attachment: Attachment not found"; - return; - } - - // Set selection to the first - m_ui->attachmentsView->setCurrentIndex(index); - - auto name = m_attachmentsModel->keyByIndex(index); - auto data = m_entryAttachments->value(name); - - EditEntryAttachmentsDialog editDialog(this); - editDialog.setAttachment({name, data}); - - if (editDialog.exec() == QDialog::Accepted) { - auto attachment = editDialog.getAttachment(); - - // Edit dialog cannot change the name of the attachment - if (attachment.name == name) { - m_entryAttachments->set(attachment.name, attachment.data); - } - } - - // Set focus back to the widget to allow keyboard navigation - setFocus(); -} - void EntryAttachmentsWidget::removeSelectedAttachments() { Q_ASSERT(m_entryAttachments); @@ -341,6 +194,12 @@ void EntryAttachmentsWidget::removeSelectedAttachments() } } +void EntryAttachmentsWidget::renameSelectedAttachments() +{ + Q_ASSERT(m_entryAttachments); + m_ui->attachmentsView->edit(m_ui->attachmentsView->selectionModel()->selectedIndexes().first()); +} + void EntryAttachmentsWidget::saveSelectedAttachments() { Q_ASSERT(m_entryAttachments); @@ -430,7 +289,7 @@ void EntryAttachmentsWidget::openSelectedAttachments() if (!m_entryAttachments->openAttachment(m_attachmentsModel->keyByIndex(index), &errorMessage)) { const QString filename = m_attachmentsModel->keyByIndex(index); errors.append(QString("%1 - %2").arg(filename, errorMessage)); - } + }; } if (!errors.isEmpty()) { @@ -440,38 +299,21 @@ void EntryAttachmentsWidget::openSelectedAttachments() void EntryAttachmentsWidget::updateButtonsEnabled() { - const auto selectionModel = m_ui->attachmentsView->selectionModel(); - const bool hasSelection = selectionModel && selectionModel->hasSelection(); + const bool hasSelection = m_ui->attachmentsView->selectionModel()->hasSelection(); m_ui->addAttachmentButton->setEnabled(!m_readOnly); m_ui->removeAttachmentButton->setEnabled(hasSelection && !m_readOnly); - - m_ui->editAttachmentButton->setEnabled(hasSelection && !m_readOnly); - if (const auto indexes = selectionModel ? selectionModel->selectedIndexes() : QModelIndexList{}; !indexes.empty()) { - auto mimeType = Tools::getMimeType(m_entryAttachments->value(m_attachmentsModel->keyByIndex(indexes.first()))); - m_ui->editAttachmentButton->setEnabled(hasSelection && !m_readOnly && Tools::isTextMimeType(mimeType)); - } + m_ui->renameAttachmentButton->setEnabled(hasSelection && !m_readOnly); m_ui->saveAttachmentButton->setEnabled(hasSelection); - m_ui->previewAttachmentButton->setEnabled(hasSelection); m_ui->openAttachmentButton->setEnabled(hasSelection); - - updateLinesVisibility(); -} - -void EntryAttachmentsWidget::updateLinesVisibility() -{ - m_ui->editPreviewLine->setVisible(m_buttonsVisible && !m_readOnly); - m_ui->previewRemoveLine->setVisible(m_buttonsVisible && !m_readOnly); } void EntryAttachmentsWidget::updateButtonsVisible() { m_ui->addAttachmentButton->setVisible(m_buttonsVisible && !m_readOnly); - m_ui->editAttachmentButton->setVisible(m_buttonsVisible && !m_readOnly); m_ui->removeAttachmentButton->setVisible(m_buttonsVisible && !m_readOnly); - - updateLinesVisibility(); + m_ui->renameAttachmentButton->setVisible(m_buttonsVisible && !m_readOnly); } bool EntryAttachmentsWidget::insertAttachments(const QStringList& filenames, QString& errorMessage) @@ -549,14 +391,14 @@ bool EntryAttachmentsWidget::eventFilter(QObject* watched, QEvent* e) if (watched == m_ui->attachmentsView->viewport() && !isReadOnly()) { const QEvent::Type eventType = e->type(); if (eventType == QEvent::DragEnter || eventType == QEvent::DragMove) { - auto dropEv = static_cast(e); + QDropEvent* dropEv = static_cast(e); const QMimeData* mimeData = dropEv->mimeData(); if (mimeData->hasUrls()) { dropEv->acceptProposedAction(); return true; } } else if (eventType == QEvent::Drop) { - auto dropEv = static_cast(e); + QDropEvent* dropEv = static_cast(e); const QMimeData* mimeData = dropEv->mimeData(); if (mimeData->hasUrls()) { dropEv->acceptProposedAction(); diff --git a/src/gui/entry/EntryAttachmentsWidget.h b/src/gui/entry/EntryAttachmentsWidget.h index 8d82d02d8..9d64ed31b 100644 --- a/src/gui/entry/EntryAttachmentsWidget.h +++ b/src/gui/entry/EntryAttachmentsWidget.h @@ -37,7 +37,7 @@ class EntryAttachmentsWidget : public QWidget Q_PROPERTY(bool isButtonsVisible READ isButtonsVisible WRITE setButtonsVisible NOTIFY buttonsVisibleChanged) public: explicit EntryAttachmentsWidget(QWidget* parent = nullptr); - ~EntryAttachmentsWidget() override; + ~EntryAttachmentsWidget(); const EntryAttachments* attachments() const; bool isReadOnly() const; @@ -57,10 +57,8 @@ signals: private slots: void insertAttachments(); - void newAttachments(); - void editSelectedAttachment(); - void previewSelectedAttachment(); void removeSelectedAttachments(); + void renameSelectedAttachments(); void saveSelectedAttachments(); void openAttachment(const QModelIndex& index); void openSelectedAttachments(); @@ -69,8 +67,6 @@ private slots: void attachmentModifiedExternally(const QString& key, const QString& filePath); private: - void updateLinesVisibility(); - bool insertAttachments(const QStringList& fileNames, QString& errorMessage); QStringList confirmAttachmentSelection(const QStringList& filenames); diff --git a/src/gui/entry/EntryAttachmentsWidget.ui b/src/gui/entry/EntryAttachmentsWidget.ui index 7fd960972..e685813b3 100644 --- a/src/gui/entry/EntryAttachmentsWidget.ui +++ b/src/gui/entry/EntryAttachmentsWidget.ui @@ -6,8 +6,8 @@ 0 0 - 332 - 312 + 337 + 289 @@ -34,20 +34,11 @@ QAbstractItemView::EditKeyPressed|QAbstractItemView::SelectedClicked - - QAbstractItemView::SelectRows - - - false - - - false - - + 0 @@ -69,34 +60,33 @@ Add new attachment - Add file… + Add - + false + + Remove selected attachment + - Edit + Remove - - - Qt::Horizontal - - - - - + false + + Rename selected attachment + - Preview + Rename @@ -122,45 +112,19 @@ Save selected attachment to disk - Save… + Save - - - true - - - Qt::Horizontal - - - - - - - false - - - Remove selected attachment - - - Remove - - - - - + Qt::Vertical - - QSizePolicy::Expanding - 20 - 0 + 173 diff --git a/src/gui/entry/EntryAttributesModel.cpp b/src/gui/entry/EntryAttributesModel.cpp index 604f9af64..90ef21bb3 100644 --- a/src/gui/entry/EntryAttributesModel.cpp +++ b/src/gui/entry/EntryAttributesModel.cpp @@ -24,7 +24,6 @@ EntryAttributesModel::EntryAttributesModel(QObject* parent) , m_entryAttributes(nullptr) , m_nextRenameDataChange(false) { - m_collator.setNumericMode(true); } void EntryAttributesModel::setEntryAttributes(EntryAttributes* entryAttributes) @@ -81,14 +80,14 @@ QVariant EntryAttributesModel::headerData(int section, Qt::Orientation orientati if ((orientation == Qt::Horizontal) && (role == Qt::DisplayRole) && (section == 0)) { return tr("Name"); } else { - return {}; + return QVariant(); } } QVariant EntryAttributesModel::data(const QModelIndex& index, int role) const { if (!index.isValid() || (role != Qt::DisplayRole && role != Qt::EditRole)) { - return {}; + return QVariant(); } return m_attributes.at(index.row()); @@ -125,7 +124,7 @@ QModelIndex EntryAttributesModel::indexByKey(const QString& key) const int row = m_attributes.indexOf(key); if (row == -1) { - return {}; + return QModelIndex(); } else { return index(row, 0); } @@ -134,7 +133,7 @@ QModelIndex EntryAttributesModel::indexByKey(const QString& key) const QString EntryAttributesModel::keyByIndex(const QModelIndex& index) const { if (!index.isValid()) { - return {}; + return QString(); } else { return m_attributes.at(index.row()); } @@ -151,7 +150,7 @@ void EntryAttributesModel::attributeAboutToAdd(const QString& key) { QList rows = m_attributes; rows.append(key); - std::sort(rows.begin(), rows.end(), m_collator); + std::sort(rows.begin(), rows.end()); int row = rows.indexOf(key); beginInsertRows(QModelIndex(), row, row); } @@ -181,7 +180,7 @@ void EntryAttributesModel::attributeAboutToRename(const QString& oldKey, const Q QList rows = m_attributes; rows.removeOne(oldKey); rows.append(newKey); - std::sort(rows.begin(), rows.end(), m_collator); + std::sort(rows.begin(), rows.end()); int newRow = rows.indexOf(newKey); if (newRow > oldRow) { newRow++; @@ -233,5 +232,4 @@ void EntryAttributesModel::updateAttributes() m_attributes.append(key); } } - std::sort(m_attributes.begin(), m_attributes.end(), m_collator); } diff --git a/src/gui/entry/EntryAttributesModel.h b/src/gui/entry/EntryAttributesModel.h index 650426c32..7d613c1f0 100644 --- a/src/gui/entry/EntryAttributesModel.h +++ b/src/gui/entry/EntryAttributesModel.h @@ -19,7 +19,6 @@ #define KEEPASSX_ENTRYATTRIBUTESMODEL_H #include -#include class EntryAttributes; @@ -56,7 +55,6 @@ private: EntryAttributes* m_entryAttributes; QList m_attributes; bool m_nextRenameDataChange; - QCollator m_collator; }; #endif // KEEPASSX_ENTRYATTRIBUTESMODEL_H diff --git a/src/gui/entry/EntryHistoryModel.cpp b/src/gui/entry/EntryHistoryModel.cpp index 57cac8d9f..acde63cb5 100644 --- a/src/gui/entry/EntryHistoryModel.cpp +++ b/src/gui/entry/EntryHistoryModel.cpp @@ -26,7 +26,6 @@ EntryHistoryModel::EntryHistoryModel(QObject* parent) : QAbstractTableModel(parent) - , m_systemLocale(QLocale::system()) { } @@ -68,7 +67,7 @@ QVariant EntryHistoryModel::data(const QModelIndex& index, int role) const switch (index.column()) { case 0: if (role == Qt::DisplayRole) { - return m_systemLocale.toString(lastModified, QLocale::ShortFormat); + return lastModified.toString(Qt::SystemLocaleShortDate); } else { return lastModified; } @@ -159,10 +158,9 @@ void EntryHistoryModel::deleteIndex(QModelIndex index) { auto entry = entryFromIndex(index); if (entry) { - beginRemoveRows(QModelIndex(), index.row(), index.row()); - m_historyEntries.removeAt(index.row()); + beginRemoveRows(QModelIndex(), m_historyEntries.indexOf(entry), m_historyEntries.indexOf(entry)); + m_historyEntries.removeAll(entry); m_deletedHistoryEntries << entry; - calculateHistoryModifications(); endRemoveRows(); } } diff --git a/src/gui/entry/EntryHistoryModel.h b/src/gui/entry/EntryHistoryModel.h index 101e4ac93..21897ec07 100644 --- a/src/gui/entry/EntryHistoryModel.h +++ b/src/gui/entry/EntryHistoryModel.h @@ -19,7 +19,6 @@ #define KEEPASSX_ENTRYHISTORYMODEL_H #include -#include class Entry; @@ -46,7 +45,6 @@ public: private: void calculateHistoryModifications(); - QLocale m_systemLocale; QList m_historyEntries; QList m_deletedHistoryEntries; QStringList m_historyModifications; diff --git a/src/gui/entry/EntryModel.cpp b/src/gui/entry/EntryModel.cpp index 218da6ca8..95c9cefb2 100644 --- a/src/gui/entry/EntryModel.cpp +++ b/src/gui/entry/EntryModel.cpp @@ -21,7 +21,6 @@ #include #include -#include "core/Clock.h" #include "core/Entry.h" #include "core/Group.h" #include "core/Metadata.h" @@ -37,6 +36,7 @@ EntryModel::EntryModel(QObject* parent) : QAbstractTableModel(parent) , m_group(nullptr) , HiddenContentDisplay(QString("\u25cf").repeated(6)) + , DateFormat(Qt::DefaultLocaleShortDate) { connect(config(), &Config::changed, this, &EntryModel::onConfigChanged); } @@ -116,13 +116,13 @@ int EntryModel::columnCount(const QModelIndex& parent) const return 0; } - return 17; + return 15; } QVariant EntryModel::data(const QModelIndex& index, int role) const { if (!index.isValid()) { - return {}; + return QVariant(); } Entry* entry = entryFromIndex(index); @@ -136,11 +136,6 @@ QVariant EntryModel::data(const QModelIndex& index, int role) const return entry->group()->name(); } break; - case ParentGroupPath: - if (entry->group()) { - return entry->group()->fullPath(); - } - break; case Title: result = entry->resolveMultiplePlaceholders(entry->title()); if (attr->isReference(EntryAttributes::TitleKey)) { @@ -194,17 +189,18 @@ QVariant EntryModel::data(const QModelIndex& index, int role) const return result; case Expires: // Display either date of expiry or 'Never' - result = entry->timeInfo().expires() ? Clock::toString(entry->timeInfo().expiryTime().toLocalTime()) - : tr("Never"); + result = entry->timeInfo().expires() + ? entry->timeInfo().expiryTime().toLocalTime().toString(EntryModel::DateFormat) + : tr("Never"); return result; case Created: - result = Clock::toString(entry->timeInfo().creationTime().toLocalTime()); + result = entry->timeInfo().creationTime().toLocalTime().toString(EntryModel::DateFormat); return result; case Modified: - result = Clock::toString(entry->timeInfo().lastModificationTime().toLocalTime()); + result = entry->timeInfo().lastModificationTime().toLocalTime().toString(EntryModel::DateFormat); return result; case Accessed: - result = Clock::toString(entry->timeInfo().lastAccessTime().toLocalTime()); + result = entry->timeInfo().lastAccessTime().toLocalTime().toString(EntryModel::DateFormat); return result; case Attachments: { // Display comma-separated list of attachments @@ -234,13 +230,6 @@ QVariant EntryModel::data(const QModelIndex& index, int role) const return result; } - case Color: - QColor backgroundColor; - backgroundColor.setNamedColor(entry->backgroundColor()); - if (backgroundColor.isValid()) { - result = "▍"; - return result; - } } } else if (role == Qt::UserRole) { // Qt::UserRole is used as sort role, see EntryView::EntryView() switch (index.column()) { @@ -255,13 +244,8 @@ QVariant EntryModel::data(const QModelIndex& index, int role) const return 0; } case Expires: - return entry->timeInfo().expires() ? entry->timeInfo().expiryTime() // There seems to be no better way of expressing 'infinity' -#if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0) - : QDate(9999, 1, 1).startOfDay(); -#else - : QDateTime(QDate(9999, 1, 1)); -#endif + return entry->timeInfo().expires() ? entry->timeInfo().expiryTime() : QDateTime(QDate(9999, 1, 1)); case Created: return entry->timeInfo().creationTime(); case Modified: @@ -297,35 +281,29 @@ QVariant EntryModel::data(const QModelIndex& index, int role) const break; case Totp: if (entry->hasTotp()) { - return entry->hasValidTotp() ? icons()->icon("totp") : icons()->icon("totp-invalid"); + return icons()->icon("totp"); } break; case PasswordStrength: if (!entry->password().isEmpty() && !entry->excludeFromReports()) { - QString iconName = "lock-question"; StateColorPalette statePalette; QColor color = statePalette.color(StateColorPalette::Error); switch (entry->passwordHealth()->quality()) { case PasswordHealth::Quality::Bad: case PasswordHealth::Quality::Poor: - iconName = "lock-open-alert"; color = statePalette.color(StateColorPalette::HealthCritical); break; case PasswordHealth::Quality::Weak: - iconName = "lock-open"; color = statePalette.color(StateColorPalette::HealthBad); break; case PasswordHealth::Quality::Good: case PasswordHealth::Quality::Excellent: - iconName = "lock"; color = statePalette.color(StateColorPalette::HealthExcellent); break; } - if (color.isValid()) { - return icons()->icon(iconName, true, color); - } + return color; } break; } @@ -336,15 +314,6 @@ QVariant EntryModel::data(const QModelIndex& index, int role) const } return font; } else if (role == Qt::ForegroundRole) { - - if (index.column() == Color) { - QColor backgroundColor; - backgroundColor.setNamedColor(entry->backgroundColor()); - if (backgroundColor.isValid()) { - return backgroundColor; - } - } - QColor foregroundColor; foregroundColor.setNamedColor(entry->foregroundColor()); if (entry->hasReferences()) { @@ -358,12 +327,10 @@ QVariant EntryModel::data(const QModelIndex& index, int role) const return QVariant(foregroundColor); } } else if (role == Qt::BackgroundRole) { - if (m_backgroundColorVisible) { - QColor backgroundColor; - backgroundColor.setNamedColor(entry->backgroundColor()); - if (backgroundColor.isValid()) { - return QVariant(backgroundColor); - } + QColor backgroundColor; + backgroundColor.setNamedColor(entry->backgroundColor()); + if (backgroundColor.isValid()) { + return QVariant(backgroundColor); } } else if (role == Qt::ToolTipRole) { if (index.column() == PasswordStrength && !entry->password().isEmpty() && !entry->excludeFromReports()) { @@ -371,7 +338,7 @@ QVariant EntryModel::data(const QModelIndex& index, int role) const } } - return {}; + return QVariant(); } QVariant EntryModel::headerData(int section, Qt::Orientation orientation, int role) const @@ -382,8 +349,6 @@ QVariant EntryModel::headerData(int section, Qt::Orientation orientation, int ro switch (section) { case ParentGroup: return tr("Group"); - case ParentGroupPath: - return tr("Group Path"); case Title: return tr("Title"); case Username: @@ -421,8 +386,6 @@ QVariant EntryModel::headerData(int section, Qt::Orientation orientation, int ro switch (section) { case ParentGroup: return tr("Group name"); - case ParentGroupPath: - return tr("Group Path"); case Title: return tr("Entry title"); case Username: @@ -451,8 +414,6 @@ QVariant EntryModel::headerData(int section, Qt::Orientation orientation, int ro return tr("Has attachments"); case Totp: return tr("Has TOTP"); - case Color: - return tr("Background Color"); } } @@ -491,7 +452,7 @@ QMimeData* EntryModel::mimeData(const QModelIndexList& indexes) const return nullptr; } - auto data = new QMimeData(); + QMimeData* data = new QMimeData(); QByteArray encoded; QDataStream stream(&encoded, QIODevice::WriteOnly); @@ -635,7 +596,3 @@ void EntryModel::makeConnections(const Group* group) connect(group, SIGNAL(entryMovedDown()), SLOT(entryMovedDown())); connect(group, SIGNAL(entryDataChanged(Entry*)), SLOT(entryDataChanged(Entry*))); } -void EntryModel::setBackgroundColorVisible(bool visible) -{ - m_backgroundColorVisible = visible; -} diff --git a/src/gui/entry/EntryModel.h b/src/gui/entry/EntryModel.h index 7b7f17a1f..8e79be384 100644 --- a/src/gui/entry/EntryModel.h +++ b/src/gui/entry/EntryModel.h @@ -48,9 +48,7 @@ public: Attachments = 11, Totp = 12, Size = 13, - PasswordStrength = 14, - Color = 15, - ParentGroupPath = 16 + PasswordStrength = 14 }; explicit EntryModel(QObject* parent = nullptr); @@ -69,7 +67,6 @@ public: void setGroup(Group* group); void setEntries(const QList& entries); - void setBackgroundColorVisible(bool visible); private slots: void entryAboutToAdd(Entry* entry); @@ -88,13 +85,13 @@ private: void severConnections(); void makeConnections(const Group* group); - bool m_backgroundColorVisible = true; Group* m_group; QList m_entries; QList m_orgEntries; QSet m_allGroups; const QString HiddenContentDisplay; + const Qt::DateFormat DateFormat; }; #endif // KEEPASSX_ENTRYMODEL_H diff --git a/src/gui/entry/EntryURLModel.cpp b/src/gui/entry/EntryURLModel.cpp index d0201562b..3222c7d30 100644 --- a/src/gui/entry/EntryURLModel.cpp +++ b/src/gui/entry/EntryURLModel.cpp @@ -1,6 +1,6 @@ /* - * Copyright (C) 2025 KeePassXC Team * Copyright (C) 2012 Felix Geyer + * Copyright (C) 2019 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,10 +18,9 @@ #include "EntryURLModel.h" -#include "browser/BrowserService.h" #include "core/EntryAttributes.h" +#include "core/Tools.h" #include "gui/Icons.h" -#include "gui/UrlTools.h" #include "gui/styles/StateColorPalette.h" EntryURLModel::EntryURLModel(QObject* parent) @@ -67,23 +66,15 @@ QVariant EntryURLModel::data(const QModelIndex& index, int role) const } const auto value = m_entryAttributes->value(key); - const auto urlValid = urlTools()->isUrlValid(value, true); + const auto urlValid = Tools::checkUrlValid(value); - // Check for duplicate URLs in the attribute list. Excludes the current key/value from the comparison. - auto customAttributeKeys = m_entryAttributes->customKeys().filter(EntryAttributes::AdditionalUrlAttribute); - customAttributeKeys.removeOne(key); - - const auto duplicateUrl = - m_entryAttributes->values(customAttributeKeys).contains(value) || urlTools()->isUrlIdentical(value, m_entryUrl); - if (role == Qt::BackgroundRole && (!urlValid || duplicateUrl)) { + if (role == Qt::BackgroundRole && !urlValid) { StateColorPalette statePalette; return statePalette.color(StateColorPalette::ColorRole::Error); - } else if (role == Qt::DecorationRole && (!urlValid || duplicateUrl)) { + } else if (role == Qt::DecorationRole && !urlValid) { return m_errorIcon; } else if (role == Qt::DisplayRole || role == Qt::EditRole) { return value; - } else if (role == Qt::ToolTipRole && duplicateUrl) { - return tr("Duplicate URL"); } else if (role == Qt::ToolTipRole && !urlValid) { return tr("Invalid URL"); } @@ -91,21 +82,17 @@ QVariant EntryURLModel::data(const QModelIndex& index, int role) const return {}; } -void EntryURLModel::setEntryUrl(const QString& entryUrl) -{ - m_entryUrl = entryUrl; -} - bool EntryURLModel::setData(const QModelIndex& index, const QVariant& value, int role) { if (!index.isValid() || role != Qt::EditRole || value.type() != QVariant::String || value.toString().isEmpty()) { return false; } - const auto row = index.row(); - const auto key = m_urls.at(row).first; + const int row = index.row(); + const QString key = m_urls.at(row).first; + const QString oldValue = m_urls.at(row).second; - if (EntryAttributes::isDefaultAttribute(key)) { + if (EntryAttributes::isDefaultAttribute(key) || m_entryAttributes->containsValue(value.toString())) { return false; } @@ -126,7 +113,7 @@ QModelIndex EntryURLModel::indexByKey(const QString& key) const } if (row == -1) { - return {}; + return QModelIndex(); } else { return index(row, 0); } @@ -135,7 +122,7 @@ QModelIndex EntryURLModel::indexByKey(const QString& key) const QString EntryURLModel::keyByIndex(const QModelIndex& index) const { if (!index.isValid()) { - return {}; + return QString(); } else { return m_urls.at(index.row()).first; } @@ -146,9 +133,9 @@ void EntryURLModel::updateAttributes() clear(); m_urls.clear(); - const auto attributesKeyList = m_entryAttributes->keys(); - for (const auto& key : attributesKeyList) { - if (!EntryAttributes::isDefaultAttribute(key) && key.contains(EntryAttributes::AdditionalUrlAttribute)) { + const QList attributesKeyList = m_entryAttributes->keys(); + for (const QString& key : attributesKeyList) { + if (!EntryAttributes::isDefaultAttribute(key) && key.contains("KP2A_URL")) { const auto value = m_entryAttributes->value(key); m_urls.append(qMakePair(key, value)); diff --git a/src/gui/entry/EntryURLModel.h b/src/gui/entry/EntryURLModel.h index 8fd5ef119..f9ffa4828 100644 --- a/src/gui/entry/EntryURLModel.h +++ b/src/gui/entry/EntryURLModel.h @@ -1,6 +1,6 @@ /* - * Copyright (C) 2023 KeePassXC Team * Copyright (C) 2012 Felix Geyer + * Copyright (C) 2019 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,7 +19,6 @@ #ifndef KEEPASSXC_ENTRYURLMODEL_H #define KEEPASSXC_ENTRYURLMODEL_H -#include "core/Entry.h" #include #include @@ -44,9 +43,8 @@ class EntryURLModel : public QStandardItemModel public: explicit EntryURLModel(QObject* parent = nullptr); - void setEntryAttributes(EntryAttributes* entryAttributes); - void setEntryUrl(const QString& entryUrl); + void insertRow(const QString& key, const QString& value); bool setData(const QModelIndex& index, const QVariant& value, int role = Qt::EditRole) override; QVariant data(const QModelIndex& index, int role) const override; QModelIndex indexByKey(const QString& key) const; @@ -59,7 +57,6 @@ private: QList> m_urls; EntryAttributes* m_entryAttributes; QIcon m_errorIcon; - QString m_entryUrl; }; #endif // KEEPASSXC_ENTRYURLMODEL_H diff --git a/src/gui/entry/EntryView.cpp b/src/gui/entry/EntryView.cpp index 5fdad83b3..0df283f65 100644 --- a/src/gui/entry/EntryView.cpp +++ b/src/gui/entry/EntryView.cpp @@ -19,18 +19,12 @@ #include "EntryView.h" #include -#include -#include #include -#include #include #include -#include #include #include -#include -#include "gui/Icons.h" #include "gui/SortFilterHideProxyModel.h" #define ICON_ONLY_SECTION_SIZE 26 @@ -219,12 +213,11 @@ void EntryView::displaySearch(const QList& entries) m_model->setEntries(entries); header()->showSection(EntryModel::ParentGroup); - setFirstEntryActive(); - // Reset sort column to 'Group', overrides DatabaseWidgetStateSync m_sortModel->sort(EntryModel::ParentGroup, Qt::AscendingOrder); sortByColumn(EntryModel::ParentGroup, Qt::AscendingOrder); + setFirstEntryActive(); m_inSearchMode = true; } @@ -336,7 +329,6 @@ bool EntryView::setViewState(const QByteArray& state) bool status = header()->restoreState(state); resetFixedColumns(); m_columnsNeedRelayout = state.isEmpty(); - onHeaderChanged(); return status; } @@ -377,9 +369,6 @@ void EntryView::toggleColumnVisibility(QAction* action) // least one visible column remains, as the table header will disappear // entirely when all columns are hidden int columnIndex = action->data().toInt(); - if (columnIndex == EntryModel::Color) { - m_model->setBackgroundColorVisible(!action->isChecked()); - } if (action->isChecked()) { header()->showSection(columnIndex); if (header()->sectionSize(columnIndex) == 0) { @@ -451,8 +440,6 @@ void EntryView::resetFixedColumns() header()->resizeSection(col, width); } } - header()->setMinimumSectionSize(1); - header()->resizeSection(EntryModel::Color, ICON_ONLY_SECTION_SIZE); } /** @@ -481,9 +468,6 @@ void EntryView::resetViewToDefaults() header()->hideSection(EntryModel::Attachments); header()->hideSection(EntryModel::Size); header()->hideSection(EntryModel::PasswordStrength); - header()->hideSection(EntryModel::Color); - header()->hideSection(EntryModel::ParentGroupPath); - onHeaderChanged(); // Reset column order to logical indices for (int i = 0; i < header()->count(); ++i) { @@ -511,11 +495,6 @@ void EntryView::resetViewToDefaults() } } -void EntryView::onHeaderChanged() -{ - m_model->setBackgroundColorVisible(isColumnHidden(EntryModel::Color)); -} - void EntryView::showEvent(QShowEvent* event) { QTreeView::showEvent(event); @@ -528,69 +507,6 @@ void EntryView::showEvent(QShowEvent* event) } } -void EntryView::startDrag(Qt::DropActions supportedActions) -{ - auto selectedIndexes = selectionModel()->selectedRows(EntryModel::Title); - if (selectedIndexes.isEmpty()) { - return; - } - - // Create a mime data object for the selected rows - auto mimeData = m_sortModel->mimeData(selectedIndexes); - if (!mimeData) { - return; - } - - // Create a temporary list widget to display the dragged items - int i = 0; - QListWidget listWidget; - for (auto& index : selectedIndexes) { - if (++i > 4) { - int remaining = selectedIndexes.size() - i + 1; - listWidget.addItem(tr("+ %1 entry(s)...", nullptr, remaining).arg(remaining)); - break; - } - - QIcon icon; - icon.addPixmap(m_sortModel->data(index, Qt::DecorationRole).value()); - - auto item = new QListWidgetItem; - item->setText(m_sortModel->data(index, Qt::DisplayRole).toString()); - item->setIcon(icon); - listWidget.addItem(item); - } - - listWidget.setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); - listWidget.setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); - listWidget.setStyleSheet("QListWidget { background-color: palette(highlight); border: 1px solid palette(dark); " - "padding: 4px; color: palette(highlighted-text); }"); - auto width = listWidget.sizeHintForColumn(0) + 2 * listWidget.frameWidth(); - auto height = listWidget.sizeHintForRow(0) * listWidget.count() + 2 * listWidget.frameWidth(); - listWidget.setFixedWidth(width); - listWidget.setFixedHeight(height); - - // Grab the screen pixel ratio where the window resides - // TODO: Use direct call to screen() when moving to Qt 6 - auto screen = QGuiApplication::screenAt(window()->geometry().center()); - if (!screen) { - screen = QGuiApplication::primaryScreen(); - } - - auto pixelRatio = screen->devicePixelRatio(); - - // Render the list widget to a pixmap - QPixmap pixmap(QSize(width, height) * pixelRatio); - pixmap.fill(Qt::transparent); - pixmap.setDevicePixelRatio(pixelRatio); - listWidget.render(&pixmap); - - // Create a drag object and start the drag - auto drag = new QDrag(this); - drag->setMimeData(mimeData); - drag->setPixmap(pixmap); - drag->exec(supportedActions, defaultDropAction()); -} - bool EntryView::isColumnHidden(int logicalIndex) { return header()->isSectionHidden(logicalIndex) || header()->sectionSize(logicalIndex) == 0; diff --git a/src/gui/entry/EntryView.h b/src/gui/entry/EntryView.h index 759097b34..c7136383a 100644 --- a/src/gui/entry/EntryView.h +++ b/src/gui/entry/EntryView.h @@ -61,7 +61,6 @@ protected: void keyPressEvent(QKeyEvent* event) override; void focusInEvent(QFocusEvent* event) override; void showEvent(QShowEvent* event) override; - void startDrag(Qt::DropActions supportedActions) override; private slots: void emitEntryActivated(const QModelIndex& index); @@ -76,7 +75,6 @@ private slots: private: void resetFixedColumns(); bool isColumnHidden(int logicalIndex); - void onHeaderChanged(); EntryModel* const m_model; SortFilterHideProxyModel* const m_sortModel; diff --git a/src/gui/entry/PreviewEntryAttachmentsDialog.cpp b/src/gui/entry/PreviewEntryAttachmentsDialog.cpp deleted file mode 100644 index 62be2bd34..000000000 --- a/src/gui/entry/PreviewEntryAttachmentsDialog.cpp +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright (C) 2025 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 "PreviewEntryAttachmentsDialog.h" -#include "ui_PreviewEntryAttachmentsDialog.h" - -#include -#include -#include -#include - -PreviewEntryAttachmentsDialog::PreviewEntryAttachmentsDialog(QWidget* parent) - : QDialog(parent) - , m_ui(new Ui::PreviewEntryAttachmentsDialog) -{ - m_ui->setupUi(this); - - // Disable the help button in the title bar - setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); - - // Initialize dialog buttons - m_ui->dialogButtons->setStandardButtons(QDialogButtonBox::Close | QDialogButtonBox::Open | QDialogButtonBox::Save); - auto closeButton = m_ui->dialogButtons->button(QDialogButtonBox::Close); - closeButton->setDefault(true); - - auto saveButton = m_ui->dialogButtons->button(QDialogButtonBox::Save); - saveButton->setText(tr("Save…")); - - connect(m_ui->dialogButtons, &QDialogButtonBox::rejected, this, &PreviewEntryAttachmentsDialog::reject); - connect(m_ui->dialogButtons, &QDialogButtonBox::clicked, [this](QAbstractButton* button) { - auto pressedButton = m_ui->dialogButtons->standardButton(button); - - const auto attachment = m_ui->attachmentWidget->getAttachment(); - if (pressedButton == QDialogButtonBox::Open) { - emit openAttachment(attachment.name); - } else if (pressedButton == QDialogButtonBox::Save) { - emit saveAttachment(attachment.name); - } - }); -} - -PreviewEntryAttachmentsDialog::~PreviewEntryAttachmentsDialog() = default; - -void PreviewEntryAttachmentsDialog::setAttachment(attachments::Attachment attachment) -{ - setWindowTitle(tr("Preview: %1").arg(attachment.name)); - - m_ui->attachmentWidget->openAttachment(std::move(attachment), attachments::OpenMode::ReadOnly); -} diff --git a/src/gui/entry/PreviewEntryAttachmentsDialog.h b/src/gui/entry/PreviewEntryAttachmentsDialog.h deleted file mode 100644 index cee23ea13..000000000 --- a/src/gui/entry/PreviewEntryAttachmentsDialog.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright (C) 2025 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 . - */ - -#pragma once - -#include "attachments/AttachmentTypes.h" - -#include - -#include -#include - -namespace Ui -{ - class PreviewEntryAttachmentsDialog; -} - -class PreviewEntryAttachmentsDialog : public QDialog -{ - Q_OBJECT - -public: - explicit PreviewEntryAttachmentsDialog(QWidget* parent = nullptr); - ~PreviewEntryAttachmentsDialog() override; - - void setAttachment(attachments::Attachment attachment); - -signals: - void openAttachment(const QString& name); - void saveAttachment(const QString& name); - -private: - QScopedPointer m_ui; -}; diff --git a/src/gui/entry/PreviewEntryAttachmentsDialog.ui b/src/gui/entry/PreviewEntryAttachmentsDialog.ui deleted file mode 100644 index d7f8fd31c..000000000 --- a/src/gui/entry/PreviewEntryAttachmentsDialog.ui +++ /dev/null @@ -1,58 +0,0 @@ - - - PreviewEntryAttachmentsDialog - - - - 0 - 0 - 557 - 454 - - - - Form - - - - 6 - - - 6 - - - 6 - - - 6 - - - - - - 0 - 0 - - - - - - - - QDialogButtonBox::Cancel|QDialogButtonBox::Ok - - - - - - - - AttachmentWidget - QWidget -
    gui/entry/attachments/AttachmentWidget.h
    - 1 -
    -
    - - -
    diff --git a/src/gui/entry/attachments/AttachmentWidget.cpp b/src/gui/entry/attachments/AttachmentWidget.cpp deleted file mode 100644 index f68df2d00..000000000 --- a/src/gui/entry/attachments/AttachmentWidget.cpp +++ /dev/null @@ -1,89 +0,0 @@ -/* - * Copyright (C) 2025 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 "AttachmentWidget.h" - -#include "ImageAttachmentsWidget.h" -#include "TextAttachmentsWidget.h" - -#include - -#include -#include - -AttachmentWidget::AttachmentWidget(QWidget* parent) - : QWidget(parent) -{ - setWindowTitle(tr("Attachment Viewer")); - - auto verticalLayout = new QVBoxLayout(this); - verticalLayout->setSpacing(0); - verticalLayout->setObjectName(QString::fromUtf8("verticalLayout")); - verticalLayout->setContentsMargins(0, 0, 0, 0); - verticalLayout->setAlignment(Qt::AlignCenter); -} - -AttachmentWidget::~AttachmentWidget() = default; - -void AttachmentWidget::openAttachment(attachments::Attachment attachment, attachments::OpenMode mode) -{ - m_attachment = std::move(attachment); - m_mode = mode; - - updateUi(); -} - -void AttachmentWidget::updateUi() -{ - auto type = Tools::getMimeType(m_attachment.data); - - if (m_attachmentWidget) { - layout()->removeWidget(m_attachmentWidget); - m_attachmentWidget->deleteLater(); - } - - if (Tools::isTextMimeType(type)) { - auto widget = new TextAttachmentsWidget(this); - widget->openAttachment(m_attachment, m_mode); - - m_attachmentWidget = widget; - } else if (type == Tools::MimeType::Image) { - auto widget = new ImageAttachmentsWidget(this); - widget->openAttachment(m_attachment, m_mode); - - m_attachmentWidget = widget; - } else { - auto label = new QLabel(tr("Unknown attachment type"), this); - label->setAlignment(Qt::AlignCenter); - - m_attachmentWidget = label; - } - - Q_ASSERT(m_attachmentWidget); - m_attachmentWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); - layout()->addWidget(m_attachmentWidget); -} - -attachments::Attachment AttachmentWidget::getAttachment() const -{ - // Text attachments can be edited at this time so pass this call forward - if (auto textWidget = qobject_cast(m_attachmentWidget)) { - return textWidget->getAttachment(); - } - - return m_attachment; -} diff --git a/src/gui/entry/attachments/AttachmentWidget.h b/src/gui/entry/attachments/AttachmentWidget.h deleted file mode 100644 index 73dd5b2b5..000000000 --- a/src/gui/entry/attachments/AttachmentWidget.h +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright (C) 2025 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 . - */ - -#pragma once - -#include "AttachmentTypes.h" - -#include - -#include -#include -#include - -namespace Ui -{ - class AttachmentWidget; -} - -/** - * @brief The AttachmentWidget class provides a way to manage attachments in a GUI application. - * - */ -class AttachmentWidget : public QWidget -{ - Q_OBJECT - -public: - explicit AttachmentWidget(QWidget* parent = nullptr); - ~AttachmentWidget() override; - - /** - * @brief Opens an attachment in the specified mode. - * - * @param attachment - The attachment to be opened. - * @param mode - The mode in which to open the attachment (read-only or read-write). - */ - void openAttachment(attachments::Attachment attachment, attachments::OpenMode mode); - - /** - * @brief Get the current attachment. - * - * @return Attachment - The current attachment. - */ - attachments::Attachment getAttachment() const; - -private: - void updateUi(); - - QPointer m_attachmentWidget; - - attachments::Attachment m_attachment; - attachments::OpenMode m_mode; -}; diff --git a/src/gui/entry/attachments/ImageAttachmentsView.cpp b/src/gui/entry/attachments/ImageAttachmentsView.cpp deleted file mode 100644 index fea7a2d5f..000000000 --- a/src/gui/entry/attachments/ImageAttachmentsView.cpp +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Copyright (C) 2025 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 "ImageAttachmentsView.h" - -#include -#include - -#include - -ImageAttachmentsView::ImageAttachmentsView(QWidget* parent) - : QGraphicsView(parent) -{ -} - -void ImageAttachmentsView::wheelEvent(QWheelEvent* event) -{ - if (event->modifiers() == Qt::ControlModifier) { - emit ctrlWheelEvent(event); - return; - } - - QGraphicsView::wheelEvent(event); -} - -void ImageAttachmentsView::resizeEvent(QResizeEvent* event) -{ - QGraphicsView::resizeEvent(event); - - if (m_autoFitInView) { - fitSceneInView(); - } -} - -void ImageAttachmentsView::showEvent(QShowEvent* event) -{ - if (m_autoFitInView) { - fitSceneInView(); - } - - QGraphicsView::showEvent(event); -} - -void ImageAttachmentsView::fitSceneInView() -{ - if (auto scene = ImageAttachmentsView::scene()) { - ImageAttachmentsView::fitInView(scene->itemsBoundingRect(), Qt::KeepAspectRatio); - } -} - -void ImageAttachmentsView::enableAutoFitInView() -{ - m_autoFitInView = true; - fitSceneInView(); -} - -void ImageAttachmentsView::disableAutoFitInView() -{ - m_autoFitInView = false; -} - -bool ImageAttachmentsView::isAutoFitInViewActivated() const -{ - return m_autoFitInView; -} - -double ImageAttachmentsView::calculateFitInViewFactor() const -{ - auto viewPort = viewport(); - if (auto currentScene = scene(); currentScene && viewPort) { - const auto itemsRect = currentScene->itemsBoundingRect().size(); - - // If the image rect is empty - if (itemsRect.isEmpty()) { - return std::numeric_limits::quiet_NaN(); - } - - const auto viewPortSize = viewPort->size(); - // Calculate the zoom factor based on the current size and the image rect - return std::min(viewPortSize.width() / itemsRect.width(), viewPortSize.height() / itemsRect.height()); - } - - return std::numeric_limits::quiet_NaN(); -} diff --git a/src/gui/entry/attachments/ImageAttachmentsView.h b/src/gui/entry/attachments/ImageAttachmentsView.h deleted file mode 100644 index 3fa4f76b6..000000000 --- a/src/gui/entry/attachments/ImageAttachmentsView.h +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (C) 2025 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 . - */ - -#pragma once - -#include - -class ImageAttachmentsView : public QGraphicsView -{ - Q_OBJECT -public: - explicit ImageAttachmentsView(QWidget* parent = nullptr); - - void enableAutoFitInView(); - void disableAutoFitInView(); - bool isAutoFitInViewActivated() const; - - double calculateFitInViewFactor() const; - -signals: - void ctrlWheelEvent(QWheelEvent* event); - -protected: - void wheelEvent(QWheelEvent* event) override; - void showEvent(QShowEvent* event) override; - void resizeEvent(QResizeEvent* event) override; - -private: - void fitSceneInView(); - - bool m_autoFitInView = false; -}; diff --git a/src/gui/entry/attachments/ImageAttachmentsWidget.cpp b/src/gui/entry/attachments/ImageAttachmentsWidget.cpp deleted file mode 100644 index 3d547433c..000000000 --- a/src/gui/entry/attachments/ImageAttachmentsWidget.cpp +++ /dev/null @@ -1,258 +0,0 @@ -/* - * Copyright (C) 2025 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 "ImageAttachmentsWidget.h" - -#include "ui_ImageAttachmentsWidget.h" - -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -namespace -{ - // Predefined zoom levels must be in ascending order - constexpr std::array ZoomList = {0.25, 0.5, 0.75, 1.0, 2.0}; - constexpr double WheelZoomStep = 1.1; - - const QString FitText = QObject::tr("Fit"); - - QString formatZoomText(double zoomFactor) - { - return QString("%1%").arg(QString::number(zoomFactor * 100, 'f', 0)); - } - - double parseZoomText(const QString& zoomText) - { - auto zoomTextTrimmed = zoomText.trimmed(); - - if (auto percentIndex = zoomTextTrimmed.indexOf('%'); percentIndex != -1) { - // Remove the '%' character and parse the number - zoomTextTrimmed = zoomTextTrimmed.left(percentIndex).trimmed(); - } - - bool ok; - double zoomFactor = zoomTextTrimmed.toDouble(&ok); - if (!ok) { - qWarning() << "Failed to parse zoom text:" << zoomText; - return std::numeric_limits::quiet_NaN(); - } - return zoomFactor / 100.0; - } - -} // namespace - -ImageAttachmentsWidget::ImageAttachmentsWidget(QWidget* parent) - : QWidget(parent) - , m_ui(new Ui::ImageAttachmentsWidget) -{ - m_ui->setupUi(this); - - m_scene = new QGraphicsScene(this); - m_ui->imagesView->setScene(m_scene); - m_ui->imagesView->setDragMode(QGraphicsView::ScrollHandDrag); - m_ui->imagesView->setHorizontalScrollBarPolicy(Qt::ScrollBarPolicy::ScrollBarAlwaysOff); - m_ui->imagesView->setVerticalScrollBarPolicy(Qt::ScrollBarPolicy::ScrollBarAlwaysOff); - - connect(m_ui->imagesView, &ImageAttachmentsView::ctrlWheelEvent, this, &ImageAttachmentsWidget::onWheelZoomEvent); - - static_assert(ZoomList.size() > 0, "ZoomList must not be empty"); - static_assert(ZoomList.front() < ZoomList.back(), "ZoomList must be in ascending order"); - m_zoomHelper = new ZoomHelper(1.0, WheelZoomStep, ZoomList.front(), ZoomList.back(), this); - connect(m_zoomHelper, &ZoomHelper::zoomChanged, this, &ImageAttachmentsWidget::onZoomFactorChanged); - - initZoomComboBox(); -} - -ImageAttachmentsWidget::~ImageAttachmentsWidget() = default; - -void ImageAttachmentsWidget::initZoomComboBox() -{ - m_ui->zoomComboBox->clear(); - - auto textWidth = m_ui->zoomComboBox->fontMetrics().horizontalAdvance(FitText); - - m_ui->zoomComboBox->addItem(FitText, 0.0); - - for (const auto& zoom : ZoomList) { - auto zoomText = formatZoomText(zoom); - textWidth = std::max(textWidth, m_ui->zoomComboBox->fontMetrics().horizontalAdvance(zoomText)); - - m_ui->zoomComboBox->addItem(zoomText, zoom); - } - - constexpr int minWidth = 50; - m_ui->zoomComboBox->setMinimumWidth(textWidth + minWidth); - - connect(m_ui->zoomComboBox, &QComboBox::currentTextChanged, this, &ImageAttachmentsWidget::onZoomChanged); - - connect(m_ui->zoomComboBox->lineEdit(), &QLineEdit::editingFinished, [this]() { - onZoomChanged(m_ui->zoomComboBox->lineEdit()->text()); - }); - - // Fit by default - m_ui->zoomComboBox->setCurrentIndex(m_ui->zoomComboBox->findData(0.0)); - onZoomChanged(m_ui->zoomComboBox->currentText()); -} - -void ImageAttachmentsWidget::onWheelZoomEvent(QWheelEvent* event) -{ - m_ui->imagesView->disableAutoFitInView(); - - auto finInViewFactor = m_ui->imagesView->calculateFitInViewFactor(); - // Limit the fit-in-view factor to a maximum of 100% - m_zoomHelper->setMinZoomOutFactor(std::isnan(finInViewFactor) ? 1.0 : std::min(finInViewFactor, 1.0)); - - event->angleDelta().y() > 0 ? m_zoomHelper->zoomIn() : m_zoomHelper->zoomOut(); -} - -void ImageAttachmentsWidget::onZoomFactorChanged(double zoomFactor) -{ - if (m_ui->imagesView->isAutoFitInViewActivated()) { - return; - } - - m_ui->imagesView->setTransform(QTransform::fromScale(zoomFactor, zoomFactor)); - - // Update the zoom combo box to reflect the current zoom factor - if (!m_ui->zoomComboBox->lineEdit()->hasFocus()) { - m_ui->zoomComboBox->setCurrentText(formatZoomText(zoomFactor)); - } -} - -void ImageAttachmentsWidget::onZoomChanged(const QString& zoomText) -{ - auto zoomFactor = 1.0; - - if (zoomText == FitText) { - m_ui->imagesView->enableAutoFitInView(); - - zoomFactor = std::min(m_ui->imagesView->calculateFitInViewFactor(), zoomFactor); - } else { - zoomFactor = parseZoomText(zoomText); - if (!std::isnan(zoomFactor)) { - m_ui->imagesView->disableAutoFitInView(); - } - } - - if (std::isnan(zoomFactor)) { - return; - } - - m_zoomHelper->setZoomFactor(zoomFactor); -} - -void ImageAttachmentsWidget::openAttachment(attachments::Attachment attachment, attachments::OpenMode mode) -{ - m_attachment = std::move(attachment); - - if (mode == attachments::OpenMode::ReadWrite) { - qWarning() << "Read-write mode is not supported for image attachments"; - } - - loadImage(); -} - -void ImageAttachmentsWidget::loadImage() -{ - QPixmap pixmap{}; - pixmap.loadFromData(m_attachment.data); - if (pixmap.isNull()) { - qWarning() << "Failed to load image from data"; - return; - } - - m_scene->clear(); - m_scene->addPixmap(std::move(pixmap)); -} - -attachments::Attachment ImageAttachmentsWidget::getAttachment() const -{ - return m_attachment; -} - -// Zoom helper -ZoomHelper::ZoomHelper(double zoomFactor, double step, double min, double max, QObject* parent) - : QObject(parent) - , m_step(step) - , m_minZoomOut(min) - , m_maxZoomIn(max) -{ - Q_ASSERT(!std::isnan(step) && step > 0); - Q_ASSERT(!std::isnan(zoomFactor)); - Q_ASSERT(!std::isnan(min)); - Q_ASSERT(!std::isnan(max)); - Q_ASSERT(min < max); - - setZoomFactor(zoomFactor); -} - -void ZoomHelper::zoomIn() -{ - const auto newZoomFactor = m_zoomFactor * m_step; - setZoomFactor(std::isgreater(newZoomFactor, m_maxZoomIn) ? m_zoomFactor : newZoomFactor); -} - -void ZoomHelper::zoomOut() -{ - const auto newZoomFactor = m_zoomFactor / m_step; - setZoomFactor(std::isless(newZoomFactor, m_minZoomOut) ? m_zoomFactor : newZoomFactor); -} - -void ZoomHelper::setZoomFactor(double zoomFactor) -{ - if (std::isnan(zoomFactor)) { - qWarning() << "Failed to set NaN zoom factor"; - return; - } - - auto oldValue = std::exchange(m_zoomFactor, zoomFactor); - if (std::isless(oldValue, m_zoomFactor) || std::isgreater(oldValue, m_zoomFactor)) { - Q_EMIT zoomChanged(m_zoomFactor); - } -} - -double ZoomHelper::getZoomFactor() const -{ - return m_zoomFactor; -} - -void ZoomHelper::setMinZoomOutFactor(double zoomFactor) -{ - if (std::isgreater(zoomFactor, m_maxZoomIn)) { - std::swap(m_maxZoomIn, zoomFactor); - } - - m_minZoomOut = zoomFactor; -} - -void ZoomHelper::setMaxZoomInFactor(double zoomFactor) -{ - if (std::isless(zoomFactor, m_minZoomOut)) { - std::swap(m_minZoomOut, zoomFactor); - } - - m_maxZoomIn = zoomFactor; -} diff --git a/src/gui/entry/attachments/ImageAttachmentsWidget.h b/src/gui/entry/attachments/ImageAttachmentsWidget.h deleted file mode 100644 index 6c5ab95a3..000000000 --- a/src/gui/entry/attachments/ImageAttachmentsWidget.h +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright (C) 2025 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 . - */ - -#pragma once - -#include "AttachmentTypes.h" - -#include -#include -#include - -namespace Ui -{ - class ImageAttachmentsWidget; -} - -class QGraphicsView; -class QGraphicsScene; - -class ZoomHelper : public QObject -{ - Q_OBJECT -public: - explicit ZoomHelper(double zoomFactor, double step, double min, double max, QObject* parent = nullptr); - - void zoomIn(); - void zoomOut(); - - void setZoomFactor(double zoomFactor); - double getZoomFactor() const; - - void setMinZoomOutFactor(double zoomFactor); - void setMaxZoomInFactor(double zoomFactor); - -signals: - void zoomChanged(double zoomFactor); - -private: - double m_zoomFactor; - double m_step; - - double m_minZoomOut; - double m_maxZoomIn; -}; - -class ImageAttachmentsWidget : public QWidget -{ - Q_OBJECT -public: - explicit ImageAttachmentsWidget(QWidget* parent = nullptr); - ~ImageAttachmentsWidget() override; - - void openAttachment(attachments::Attachment attachment, attachments::OpenMode mode); - attachments::Attachment getAttachment() const; - -private slots: - void onZoomChanged(const QString& zoomText); - void onWheelZoomEvent(QWheelEvent* event); - void onZoomFactorChanged(double zoomFactor); - -private: - void loadImage(); - - void initZoomComboBox(); - - QScopedPointer m_ui; - attachments::Attachment m_attachment; - - QPointer m_scene; - QPointer m_zoomHelper; -}; diff --git a/src/gui/entry/attachments/ImageAttachmentsWidget.ui b/src/gui/entry/attachments/ImageAttachmentsWidget.ui deleted file mode 100644 index d95f6ea9a..000000000 --- a/src/gui/entry/attachments/ImageAttachmentsWidget.ui +++ /dev/null @@ -1,90 +0,0 @@ - - - ImageAttachmentsWidget - - - - 0 - 0 - 400 - 300 - - - - - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - - Zoom: - - - - - - - - 0 - 0 - - - - true - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - Qt::Horizontal - - - - - - - - - - - ImageAttachmentsView - QGraphicsView -
    gui/entry/attachments/ImageAttachmentsView.h
    -
    -
    - - -
    diff --git a/src/gui/entry/attachments/TextAttachmentsEditWidget.cpp b/src/gui/entry/attachments/TextAttachmentsEditWidget.cpp deleted file mode 100644 index 1c0bcd223..000000000 --- a/src/gui/entry/attachments/TextAttachmentsEditWidget.cpp +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (C) 2025 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 "TextAttachmentsEditWidget.h" -#include "ui_TextAttachmentsEditWidget.h" - -#include -#include -#include - -TextAttachmentsEditWidget::TextAttachmentsEditWidget(QWidget* parent) - : QWidget(parent) - , m_ui(new Ui::TextAttachmentsEditWidget()) -{ - m_ui->setupUi(this); - - connect(m_ui->attachmentsTextEdit, &QTextEdit::textChanged, this, &TextAttachmentsEditWidget::textChanged); - connect(m_ui->previewPushButton, &QPushButton::clicked, this, &TextAttachmentsEditWidget::previewButtonClicked); -} - -TextAttachmentsEditWidget::~TextAttachmentsEditWidget() = default; - -void TextAttachmentsEditWidget::openAttachment(attachments::Attachment attachments, attachments::OpenMode mode) -{ - m_attachment = std::move(attachments); - m_mode = mode; - - updateUi(); -} - -attachments::Attachment TextAttachmentsEditWidget::getAttachment() const -{ - return {m_attachment.name, m_ui->attachmentsTextEdit->toPlainText().toUtf8()}; -} - -void TextAttachmentsEditWidget::updateUi() -{ - m_ui->attachmentsTextEdit->setPlainText(m_attachment.data); - m_ui->attachmentsTextEdit->setReadOnly(m_mode == attachments::OpenMode::ReadOnly); -} diff --git a/src/gui/entry/attachments/TextAttachmentsEditWidget.h b/src/gui/entry/attachments/TextAttachmentsEditWidget.h deleted file mode 100644 index 0879d9251..000000000 --- a/src/gui/entry/attachments/TextAttachmentsEditWidget.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (C) 2025 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 . - */ - -#pragma once - -#include "AttachmentTypes.h" - -#include -#include - -namespace Ui -{ - class TextAttachmentsEditWidget; -} - -class TextAttachmentsEditWidget : public QWidget -{ - Q_OBJECT -public: - explicit TextAttachmentsEditWidget(QWidget* parent = nullptr); - ~TextAttachmentsEditWidget() override; - - void openAttachment(attachments::Attachment attachment, attachments::OpenMode mode); - attachments::Attachment getAttachment() const; - -signals: - void textChanged(); - void previewButtonClicked(bool isChecked); - -private: - void updateUi(); - - QScopedPointer m_ui; - - attachments::Attachment m_attachment; - attachments::OpenMode m_mode; -}; diff --git a/src/gui/entry/attachments/TextAttachmentsEditWidget.ui b/src/gui/entry/attachments/TextAttachmentsEditWidget.ui deleted file mode 100644 index e73894d15..000000000 --- a/src/gui/entry/attachments/TextAttachmentsEditWidget.ui +++ /dev/null @@ -1,66 +0,0 @@ - - - TextAttachmentsEditWidget - - - - 0 - 0 - 400 - 300 - - - - - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - - Preview - - - false - - - false - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - - - - diff --git a/src/gui/entry/attachments/TextAttachmentsPreviewWidget.cpp b/src/gui/entry/attachments/TextAttachmentsPreviewWidget.cpp deleted file mode 100644 index 4775f289e..000000000 --- a/src/gui/entry/attachments/TextAttachmentsPreviewWidget.cpp +++ /dev/null @@ -1,133 +0,0 @@ -/* - * Copyright (C) 2025 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 "TextAttachmentsPreviewWidget.h" -#include "ui_TextAttachmentsPreviewWidget.h" - -#include - -#include -#include -#include -#include -#include - -namespace -{ - constexpr TextAttachmentsPreviewWidget::PreviewTextType ConvertToPreviewTextType(Tools::MimeType mimeType) noexcept - { - if (mimeType == Tools::MimeType::Html) { - return TextAttachmentsPreviewWidget::Html; - } - -#if (QT_VERSION >= QT_VERSION_CHECK(5, 14, 0)) - if (mimeType == Tools::MimeType::Markdown) { - return TextAttachmentsPreviewWidget::Markdown; - } -#endif - - return TextAttachmentsPreviewWidget::PlainText; - } - -} // namespace - -TextAttachmentsPreviewWidget::TextAttachmentsPreviewWidget(QWidget* parent) - : QWidget(parent) - , m_ui(new Ui::TextAttachmentsPreviewWidget()) -{ - m_ui->setupUi(this); - - initTypeCombobox(); -} - -TextAttachmentsPreviewWidget::~TextAttachmentsPreviewWidget() = default; - -void TextAttachmentsPreviewWidget::openAttachment(attachments::Attachment attachments, attachments::OpenMode mode) -{ - if (mode == attachments::OpenMode::ReadWrite) { - qWarning() << "Read-write mode is not supported for text preview attachments"; - } - - m_attachment = std::move(attachments); - - updateUi(); -} - -attachments::Attachment TextAttachmentsPreviewWidget::getAttachment() const -{ - return m_attachment; -} - -void TextAttachmentsPreviewWidget::initTypeCombobox() -{ - QStandardItemModel* model = new QStandardItemModel(this); - - const auto metaEnum = QMetaEnum::fromType(); - for (int i = 0; i < metaEnum.keyCount(); ++i) { - QStandardItem* item = new QStandardItem(metaEnum.key(i)); - item->setData(metaEnum.value(i), Qt::UserRole); - model->appendRow(item); - } - - QSortFilterProxyModel* filterProxyMode = new QSortFilterProxyModel(this); - filterProxyMode->setSourceModel(model); - filterProxyMode->sort(0, Qt::SortOrder::DescendingOrder); - m_ui->typeComboBox->setModel(filterProxyMode); - - connect(m_ui->typeComboBox, - QOverload::of(&QComboBox::currentIndexChanged), - this, - &TextAttachmentsPreviewWidget::onTypeChanged); - - m_ui->typeComboBox->setCurrentIndex(m_ui->typeComboBox->findData(PlainText)); - - onTypeChanged(m_ui->typeComboBox->currentIndex()); -} - -void TextAttachmentsPreviewWidget::updateUi() -{ - if (!m_attachment.name.isEmpty()) { - const auto mimeType = Tools::getMimeType(QFileInfo(m_attachment.name)); - - auto index = m_ui->typeComboBox->findData(ConvertToPreviewTextType(mimeType)); - m_ui->typeComboBox->setCurrentIndex(index); - } - - onTypeChanged(m_ui->typeComboBox->currentIndex()); -} - -void TextAttachmentsPreviewWidget::onTypeChanged(int index) -{ - if (index < 0) { - qWarning() << "TextAttachmentsPreviewWidget: Unknown text format"; - } - - const auto fileType = m_ui->typeComboBox->itemData(index).toInt(); - if (fileType == TextAttachmentsPreviewWidget::PreviewTextType::PlainText) { - m_ui->previewTextBrowser->setPlainText(m_attachment.data); - } - - if (fileType == TextAttachmentsPreviewWidget::PreviewTextType::Html) { - m_ui->previewTextBrowser->setHtml(m_attachment.data); - } - -#if (QT_VERSION >= QT_VERSION_CHECK(5, 14, 0)) - if (fileType == TextAttachmentsPreviewWidget::PreviewTextType::Markdown) { - m_ui->previewTextBrowser->setMarkdown(m_attachment.data); - } -#endif -} diff --git a/src/gui/entry/attachments/TextAttachmentsPreviewWidget.h b/src/gui/entry/attachments/TextAttachmentsPreviewWidget.h deleted file mode 100644 index c7d20eb9d..000000000 --- a/src/gui/entry/attachments/TextAttachmentsPreviewWidget.h +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (C) 2025 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 . - */ - -#pragma once - -#include "AttachmentTypes.h" - -#include -#include - -namespace Ui -{ - class TextAttachmentsPreviewWidget; -} - -class TextAttachmentsPreviewWidget : public QWidget -{ - Q_OBJECT -public: - explicit TextAttachmentsPreviewWidget(QWidget* parent = nullptr); - ~TextAttachmentsPreviewWidget() override; - - void openAttachment(attachments::Attachment attachment, attachments::OpenMode mode); - attachments::Attachment getAttachment() const; - - enum PreviewTextType : int - { - Html, - PlainText, -#if (QT_VERSION >= QT_VERSION_CHECK(5, 14, 0)) - Markdown -#endif - }; - - Q_ENUM(PreviewTextType) - -private slots: - void onTypeChanged(int index); - -private: - void initTypeCombobox(); - void updateUi(); - - QScopedPointer m_ui; - - attachments::Attachment m_attachment; -}; diff --git a/src/gui/entry/attachments/TextAttachmentsPreviewWidget.ui b/src/gui/entry/attachments/TextAttachmentsPreviewWidget.ui deleted file mode 100644 index 2ee97aa22..000000000 --- a/src/gui/entry/attachments/TextAttachmentsPreviewWidget.ui +++ /dev/null @@ -1,70 +0,0 @@ - - - TextAttachmentsPreviewWidget - - - - 0 - 0 - 400 - 300 - - - - Form - - - - 6 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - - Type: - - - - - - - false - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - - - - diff --git a/src/gui/entry/attachments/TextAttachmentsWidget.cpp b/src/gui/entry/attachments/TextAttachmentsWidget.cpp deleted file mode 100644 index d0935c6af..000000000 --- a/src/gui/entry/attachments/TextAttachmentsWidget.cpp +++ /dev/null @@ -1,105 +0,0 @@ -/* - * Copyright (C) 2025 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 "TextAttachmentsWidget.h" -#include "TextAttachmentsEditWidget.h" -#include "TextAttachmentsPreviewWidget.h" - -#include "ui_TextAttachmentsWidget.h" - -#include -#include -#include - -TextAttachmentsWidget::TextAttachmentsWidget(QWidget* parent) - : QWidget(parent) - , m_ui(new Ui::TextAttachmentsWidget()) - , m_previewUpdateTimer(new QTimer(this)) - , m_mode(attachments::OpenMode::ReadOnly) -{ - m_ui->setupUi(this); - initWidget(); -} - -TextAttachmentsWidget::~TextAttachmentsWidget() = default; - -void TextAttachmentsWidget::openAttachment(attachments::Attachment attachment, attachments::OpenMode mode) -{ - m_attachment = std::move(attachment); - m_mode = mode; - - updateWidget(); -} - -attachments::Attachment TextAttachmentsWidget::getAttachment() const -{ - if (m_mode == attachments::OpenMode::ReadWrite) { - return m_editWidget->getAttachment(); - } - - return m_attachment; -} - -void TextAttachmentsWidget::updateWidget() -{ - if (m_mode == attachments::OpenMode::ReadOnly) { - m_splitter->setSizes({0, 1}); - m_editWidget->hide(); - } else { - m_splitter->setSizes({1, 0}); - m_editWidget->show(); - } - - m_editWidget->openAttachment(m_attachment, m_mode); - m_previewWidget->openAttachment(m_attachment, attachments::OpenMode::ReadOnly); -} - -void TextAttachmentsWidget::initWidget() -{ - m_splitter = new QSplitter(this); - m_editWidget = new TextAttachmentsEditWidget(this); - m_previewWidget = new TextAttachmentsPreviewWidget(this); - - m_previewUpdateTimer->setSingleShot(true); - m_previewUpdateTimer->setInterval(500); - - // Only update the preview after a set timeout and if it is visible - connect(m_previewUpdateTimer, &QTimer::timeout, this, [this] { - if (m_previewWidget->width() > 0) { - m_attachment = m_editWidget->getAttachment(); - m_previewWidget->openAttachment(m_attachment, attachments::OpenMode::ReadOnly); - } - }); - - connect( - m_editWidget, &TextAttachmentsEditWidget::textChanged, m_previewUpdateTimer, QOverload<>::of(&QTimer::start)); - - connect(m_editWidget, &TextAttachmentsEditWidget::previewButtonClicked, [this] { - const auto sizes = m_splitter->sizes(); - const auto previewSize = sizes.value(1, 0) > 0 ? 0 : 1; - m_splitter->setSizes({1, previewSize}); - }); - - m_splitter->addWidget(m_editWidget); - m_splitter->addWidget(m_previewWidget); - // Prevent collapsing of the edit widget - m_splitter->setCollapsible(0, false); - - m_ui->verticalLayout->addWidget(m_splitter); - - updateWidget(); -} diff --git a/src/gui/entry/attachments/TextAttachmentsWidget.h b/src/gui/entry/attachments/TextAttachmentsWidget.h deleted file mode 100644 index f4709823f..000000000 --- a/src/gui/entry/attachments/TextAttachmentsWidget.h +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright (C) 2025 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 . - */ - -#pragma once - -#include "AttachmentTypes.h" - -#include -#include -#include - -namespace Ui -{ - class TextAttachmentsWidget; -} - -class QSplitter; -class QTimer; -class TextAttachmentsPreviewWidget; -class TextAttachmentsEditWidget; - -class TextAttachmentsWidget : public QWidget -{ - Q_OBJECT -public: - explicit TextAttachmentsWidget(QWidget* parent = nullptr); - ~TextAttachmentsWidget() override; - - void openAttachment(attachments::Attachment attachment, attachments::OpenMode mode); - attachments::Attachment getAttachment() const; - -private: - void updateWidget(); - void initWidget(); - - QScopedPointer m_ui; - QPointer m_splitter; - QPointer m_editWidget; - QPointer m_previewWidget; - QPointer m_previewUpdateTimer; - - attachments::Attachment m_attachment; - attachments::OpenMode m_mode; -}; diff --git a/src/gui/entry/attachments/TextAttachmentsWidget.ui b/src/gui/entry/attachments/TextAttachmentsWidget.ui deleted file mode 100644 index 9c18a7c60..000000000 --- a/src/gui/entry/attachments/TextAttachmentsWidget.ui +++ /dev/null @@ -1,36 +0,0 @@ - - - TextAttachmentsWidget - - - - 0 - 0 - 732 - 432 - - - - - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - diff --git a/src/gui/export/ExportDialog.cpp b/src/gui/export/ExportDialog.cpp index 4c2c2e6b5..3537505cc 100644 --- a/src/gui/export/ExportDialog.cpp +++ b/src/gui/export/ExportDialog.cpp @@ -19,7 +19,7 @@ #include "ui_ExportDialog.h" #include "gui/FileDialog.h" -#include "gui/HtmlGuiExporter.h" +#include "gui/HtmlExporter.h" ExportDialog::ExportDialog(QSharedPointer db, DatabaseTabWidget* parent) : QDialog(parent) @@ -44,7 +44,9 @@ ExportDialog::ExportDialog(QSharedPointer db, DatabaseTabWidget* MessageWidget::Warning); } -ExportDialog::~ExportDialog() = default; +ExportDialog::~ExportDialog() +{ +} QString ExportDialog::getStrategyName(ExportSortingStrategy strategy) { @@ -72,7 +74,7 @@ void ExportDialog::exportDatabase() FileDialog::saveLastDir("html", fileName, true); - HtmlGuiExporter htmlExporter; + HtmlExporter htmlExporter; if (!htmlExporter.exportDatabase( fileName, m_db, sortBy != ExportSortingStrategy::BY_DATABASE_ORDER, ascendingOrder)) { emit exportFailed(htmlExporter.errorString()); diff --git a/src/gui/group/EditGroupWidget.cpp b/src/gui/group/EditGroupWidget.cpp index bf38caf2e..39f5bc445 100644 --- a/src/gui/group/EditGroupWidget.cpp +++ b/src/gui/group/EditGroupWidget.cpp @@ -112,7 +112,9 @@ EditGroupWidget::EditGroupWidget(QWidget* parent) setupModifiedTracking(); } -EditGroupWidget::~EditGroupWidget() = default; +EditGroupWidget::~EditGroupWidget() +{ +} void EditGroupWidget::setupModifiedTracking() { @@ -196,7 +198,6 @@ void EditGroupWidget::loadGroup(Group* group, bool create, const QSharedPointer< auto inheritOnlyHttp = false; auto inheritNoHttp = false; auto inheritOmitWww = false; - auto inheritRestrictKey = QString(); auto parent = group->parentGroup(); if (parent) { @@ -205,7 +206,6 @@ void EditGroupWidget::loadGroup(Group* group, bool create, const QSharedPointer< inheritOnlyHttp = parent->resolveCustomDataTriState(BrowserService::OPTION_ONLY_HTTP_AUTH); inheritNoHttp = parent->resolveCustomDataTriState(BrowserService::OPTION_NOT_HTTP_AUTH); inheritOmitWww = parent->resolveCustomDataTriState(BrowserService::OPTION_OMIT_WWW); - inheritRestrictKey = parent->resolveCustomDataString(BrowserService::OPTION_RESTRICT_KEY); } // If the page has not been created at all, some of the elements are null @@ -221,7 +221,6 @@ void EditGroupWidget::loadGroup(Group* group, bool create, const QSharedPointer< addTriStateItems(m_browserUi->browserIntegrationOnlyHttpAuthComboBox, inheritOnlyHttp); addTriStateItems(m_browserUi->browserIntegrationNotHttpAuthComboBox, inheritNoHttp); addTriStateItems(m_browserUi->browserIntegrationOmitWwwCombobox, inheritOmitWww); - addRestrictKeyComboBoxItems(m_db->metadata()->customData()->keys(), inheritRestrictKey); m_browserUi->browserIntegrationHideEntriesComboBox->setCurrentIndex( indexFromTriState(group->resolveCustomDataTriState(BrowserService::OPTION_HIDE_ENTRY, false))); @@ -233,7 +232,6 @@ void EditGroupWidget::loadGroup(Group* group, bool create, const QSharedPointer< indexFromTriState(group->resolveCustomDataTriState(BrowserService::OPTION_NOT_HTTP_AUTH, false))); m_browserUi->browserIntegrationOmitWwwCombobox->setCurrentIndex( indexFromTriState(group->resolveCustomDataTriState(BrowserService::OPTION_OMIT_WWW, false))); - setRestrictKeyComboBoxIndex(group); } else if (hasPage(m_browserWidget)) { setPageHidden(m_browserWidget, true); } @@ -307,7 +305,6 @@ void EditGroupWidget::apply() m_temporaryGroup->setCustomDataTriState( BrowserService::OPTION_OMIT_WWW, triStateFromIndex(m_browserUi->browserIntegrationOmitWwwCombobox->currentIndex())); - setRestrictKeyCustomData(m_temporaryGroup->customData()); } #endif @@ -449,58 +446,3 @@ Group::TriState EditGroupWidget::triStateFromIndex(int index) return Group::Inherit; } } - -#ifdef WITH_XC_BROWSER -void EditGroupWidget::addRestrictKeyComboBoxItems(QStringList const& keyList, QString inheritValue) -{ - auto comboBox = m_browserUi->browserIntegrationRestrictKeyCombobox; - - comboBox->clear(); - comboBox->addItem( - tr("Inherit from parent group (%1)").arg(BrowserService::decodeCustomDataRestrictKey(inheritValue))); - comboBox->addItem(tr("Disable")); - - comboBox->insertSeparator(2); - - // Add all the browser keys to the combobox - for (const QString& key : keyList) { - if (key.startsWith(CustomData::BrowserKeyPrefix)) { - auto strippedKey = key; - strippedKey.remove(CustomData::BrowserKeyPrefix); - comboBox->addItem(strippedKey); - } - } -} - -void EditGroupWidget::setRestrictKeyComboBoxIndex(const Group* group) -{ - auto comboBox = m_browserUi->browserIntegrationRestrictKeyCombobox; - - if (!group || !group->customData()->contains(BrowserService::OPTION_RESTRICT_KEY)) { - comboBox->setCurrentIndex(0); - return; - } - - auto key = group->customData()->value(BrowserService::OPTION_RESTRICT_KEY); - if (key.isEmpty()) { - comboBox->setCurrentIndex(1); - } else { - comboBox->setCurrentText(key); - } -} - -// Set the customData regarding OPTION_RESTRICT_KEY -void EditGroupWidget::setRestrictKeyCustomData(CustomData* customData) -{ - auto comboBox = m_browserUi->browserIntegrationRestrictKeyCombobox; - auto key = BrowserService::OPTION_RESTRICT_KEY; - auto idx = comboBox->currentIndex(); - if (idx == 0) { - customData->remove(key); - } else if (idx == 1) { - customData->set(key, QString()); - } else { - customData->set(key, comboBox->currentText()); - } -} -#endif diff --git a/src/gui/group/EditGroupWidget.h b/src/gui/group/EditGroupWidget.h index 35a84d768..1481d2500 100644 --- a/src/gui/group/EditGroupWidget.h +++ b/src/gui/group/EditGroupWidget.h @@ -39,7 +39,9 @@ namespace Ui class IEditGroupPage { public: - virtual ~IEditGroupPage() = default; + virtual ~IEditGroupPage() + { + } virtual QString name() = 0; virtual QIcon icon() = 0; virtual QWidget* createWidget() = 0; @@ -53,7 +55,7 @@ class EditGroupWidget : public EditWidget public: explicit EditGroupWidget(QWidget* parent = nullptr); - ~EditGroupWidget() override; + ~EditGroupWidget(); void loadGroup(Group* group, bool create, const QSharedPointer& database); void clear(); @@ -81,10 +83,6 @@ private: Group::TriState triStateFromIndex(int index); void setupModifiedTracking(); - void addRestrictKeyComboBoxItems(QStringList const& keyList, QString inheritValue); - void setRestrictKeyComboBoxIndex(const Group* group); - void setRestrictKeyCustomData(CustomData* customData); - const QScopedPointer m_mainUi; QPointer m_editGroupWidgetMain; diff --git a/src/gui/group/EditGroupWidgetBrowser.ui b/src/gui/group/EditGroupWidgetBrowser.ui index 8d94693fd..dfe4b5971 100644 --- a/src/gui/group/EditGroupWidgetBrowser.ui +++ b/src/gui/group/EditGroupWidgetBrowser.ui @@ -136,23 +136,6 @@
    - - - Restrict matching to given browser key: - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - Restrict matching to given browser key toggle for this and sub groups - - - - Qt::Vertical @@ -175,7 +158,6 @@ browserIntegrationOnlyHttpAuthComboBox browserIntegrationNotHttpAuthComboBox browserIntegrationOmitWwwCombobox - browserIntegrationRestrictKeyCombobox diff --git a/src/gui/group/GroupModel.cpp b/src/gui/group/GroupModel.cpp index 18b926dc2..57ea56235 100644 --- a/src/gui/group/GroupModel.cpp +++ b/src/gui/group/GroupModel.cpp @@ -74,7 +74,7 @@ int GroupModel::columnCount(const QModelIndex& parent) const QModelIndex GroupModel::index(int row, int column, const QModelIndex& parent) const { if (!hasIndex(row, column, parent)) { - return {}; + return QModelIndex(); } Group* group; @@ -91,7 +91,7 @@ QModelIndex GroupModel::index(int row, int column, const QModelIndex& parent) co QModelIndex GroupModel::parent(const QModelIndex& index) const { if (!index.isValid()) { - return {}; + return QModelIndex(); } return parent(groupFromIndex(index)); @@ -103,7 +103,7 @@ QModelIndex GroupModel::parent(Group* group) const if (!parentGroup) { // index is already the root group - return {}; + return QModelIndex(); } else { const Group* grandParentGroup = parentGroup->parentGroup(); if (!grandParentGroup) { @@ -118,7 +118,7 @@ QModelIndex GroupModel::parent(Group* group) const QVariant GroupModel::data(const QModelIndex& index, int role) const { if (!index.isValid()) { - return {}; + return QVariant(); } Group* group = groupFromIndex(index); @@ -145,7 +145,7 @@ QVariant GroupModel::data(const QModelIndex& index, int role) const } return tooltip; } else { - return {}; + return QVariant(); } } @@ -155,7 +155,7 @@ QVariant GroupModel::headerData(int section, Qt::Orientation orientation, int ro Q_UNUSED(orientation); Q_UNUSED(role); - return {}; + return QVariant(); } QModelIndex GroupModel::index(Group* group) const @@ -333,7 +333,7 @@ QMimeData* GroupModel::mimeData(const QModelIndexList& indexes) const return nullptr; } - auto data = new QMimeData(); + QMimeData* data = new QMimeData(); QByteArray encoded; QDataStream stream(&encoded, QIODevice::WriteOnly); diff --git a/src/gui/group/GroupView.cpp b/src/gui/group/GroupView.cpp index 46cc0af6a..5ffcc5d94 100644 --- a/src/gui/group/GroupView.cpp +++ b/src/gui/group/GroupView.cpp @@ -33,7 +33,6 @@ GroupView::GroupView(Database* db, QWidget* parent) QTreeView::setModel(m_model); setHeaderHidden(true); setUniformRowHeights(true); - setTextElideMode(Qt::ElideNone); // clang-format off connect(this, SIGNAL(expanded(QModelIndex)), SLOT(expandedChanged(QModelIndex))); @@ -45,15 +44,12 @@ GroupView::GroupView(Database* db, QWidget* parent) // clang-format on new QShortcut(Qt::CTRL + Qt::Key_F10, this, SLOT(contextMenuShortcutPressed()), nullptr, Qt::WidgetShortcut); - new QShortcut( - Qt::CTRL + Qt::SHIFT + Qt::Key_PageUp, this, SLOT(selectPreviousGroup()), nullptr, Qt::WindowShortcut); - new QShortcut(Qt::CTRL + Qt::SHIFT + Qt::Key_PageDown, this, SLOT(selectNextGroup()), nullptr, Qt::WindowShortcut); // keyboard shortcuts to sort children of a group - auto shortcut = new QShortcut(Qt::CTRL + Qt::Key_Down, this, nullptr, nullptr, Qt::WidgetShortcut); + auto shortcut = new QShortcut(Qt::CTRL + Qt::Key_Down, this); connect(shortcut, &QShortcut::activated, this, [this]() { sortGroups(false); }); - shortcut = new QShortcut(Qt::CTRL + Qt::Key_Up, this, nullptr, nullptr, Qt::WidgetShortcut); + shortcut = new QShortcut(Qt::CTRL + Qt::Key_Up, this); connect(shortcut, &QShortcut::activated, this, [this]() { sortGroups(true); }); modelReset(); @@ -64,24 +60,6 @@ GroupView::GroupView(Database* db, QWidget* parent) setDefaultDropAction(Qt::MoveAction); } -void GroupView::selectPreviousGroup() -{ - auto previousIndex = indexAbove(currentIndex()); - if (previousIndex.isValid()) { - auto previousGroup = m_model->groupFromIndex(previousIndex); - setCurrentGroup(previousGroup); - } -} - -void GroupView::selectNextGroup() -{ - auto nextIndex = indexBelow(currentIndex()); - if (nextIndex.isValid()) { - auto nextGroup = m_model->groupFromIndex(nextIndex); - setCurrentGroup(nextGroup); - } -} - void GroupView::contextMenuShortcutPressed() { auto index = currentIndex(); @@ -93,7 +71,6 @@ void GroupView::contextMenuShortcutPressed() void GroupView::changeDatabase(const QSharedPointer& newDb) { m_model->changeDatabase(newDb.data()); - setColumnWidth(0, sizeHintForColumn(0)); } void GroupView::dragMoveEvent(QDragMoveEvent* event) @@ -136,7 +113,6 @@ void GroupView::expandedChanged(const QModelIndex& index) Group* group = m_model->groupFromIndex(index); group->setExpanded(isExpanded(index)); - setColumnWidth(0, sizeHintForColumn(0)); } void GroupView::recInitExpanded(Group* group) diff --git a/src/gui/group/GroupView.h b/src/gui/group/GroupView.h index 15df853ff..aa4fd85de 100644 --- a/src/gui/group/GroupView.h +++ b/src/gui/group/GroupView.h @@ -46,8 +46,6 @@ private slots: void syncExpandedState(const QModelIndex& parent, int start, int end); void modelReset(); void contextMenuShortcutPressed(); - void selectPreviousGroup(); - void selectNextGroup(); protected: void dragMoveEvent(QDragMoveEvent* event) override; diff --git a/src/gui/osutils/DeviceListener.cpp b/src/gui/osutils/DeviceListener.cpp deleted file mode 100644 index d48039308..000000000 --- a/src/gui/osutils/DeviceListener.cpp +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Copyright (C) 2023 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 "DeviceListener.h" -#include - -DeviceListener::DeviceListener(QWidget* parent) - : QWidget(parent) -{ -#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) - m_listeners[0] = new DEVICELISTENER_IMPL(this); - connectSignals(m_listeners[0]); -#endif -} - -DeviceListener::~DeviceListener() -{ -} - -void DeviceListener::connectSignals(DEVICELISTENER_IMPL* listener) -{ - connect(listener, &DEVICELISTENER_IMPL::devicePlugged, this, [&](bool state, void* ctx, void* device) { - // Wait a few ms to prevent USB device access conflicts - QTimer::singleShot(50, this, [&] { emit devicePlugged(state, ctx, device); }); - }); -} - -DeviceListener::Handle -DeviceListener::registerHotplugCallback(bool arrived, bool left, int vendorId, int productId, const QUuid* deviceClass) -{ -#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) - const Handle handle = m_listeners[0]->registerHotplugCallback(arrived, left, vendorId, productId, deviceClass); -#else - auto* listener = new DEVICELISTENER_IMPL(this); - const auto handle = reinterpret_cast(listener); - m_listeners[handle] = listener; - m_listeners[handle]->registerHotplugCallback(arrived, left, vendorId, productId, deviceClass); - connectSignals(m_listeners[handle]); -#endif - return handle; -} - -void DeviceListener::deregisterHotplugCallback(Handle handle) -{ -#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) - m_listeners[0]->deregisterHotplugCallback(handle); -#else - if (m_listeners.contains(handle)) { - m_listeners[handle]->deregisterHotplugCallback(); - m_listeners.remove(handle); - } -#endif -} - -void DeviceListener::deregisterAllHotplugCallbacks() -{ -#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) - m_listeners[0]->deregisterAllHotplugCallbacks(); -#else - while (!m_listeners.isEmpty()) { - deregisterHotplugCallback(m_listeners.constBegin().key()); - } -#endif -} diff --git a/src/gui/osutils/DeviceListener.h b/src/gui/osutils/DeviceListener.h deleted file mode 100644 index 831e6ddca..000000000 --- a/src/gui/osutils/DeviceListener.h +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Copyright (C) 2023 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 DEVICELISTENER_H -#define DEVICELISTENER_H - -#include -#include -#include -#include - -#if defined(Q_OS_WIN) -#include "winutils/DeviceListenerWin.h" -#elif defined(Q_OS_MACOS) -#include "macutils/DeviceListenerMac.h" -#elif defined(Q_OS_UNIX) -#include "nixutils/DeviceListenerLibUsb.h" -#endif - -class QUuid; - -class DeviceListener : public QWidget -{ - Q_OBJECT - -public: - typedef qintptr Handle; - static constexpr int MATCH_ANY = -1; - - explicit DeviceListener(QWidget* parent); - DeviceListener(const DeviceListener&) = delete; - ~DeviceListener() override; - - /** - * Register a hotplug notification callback. - * - * Fires devicePlugged() or deviceUnplugged() when the state of a matching device changes. - * The signals are supplied with the platform-specific context and ID of the firing device. - * Registering a new callback with the same DeviceListener will unregister any previous callbacks. - * - * @param arrived listen for new devices - * @param left listen for device unplug - * @param vendorId vendor ID to listen for or DeviceListener::MATCH_ANY - * @param productId product ID to listen for or DeviceListener::MATCH_ANY - * @param deviceClass device class GUID (Windows only) - * @return callback handle - */ - Handle registerHotplugCallback(bool arrived, - bool left, - int vendorId = MATCH_ANY, - int productId = MATCH_ANY, - const QUuid* deviceClass = nullptr); - void deregisterHotplugCallback(Handle handle); - void deregisterAllHotplugCallbacks(); - -signals: - void devicePlugged(bool state, void* ctx, void* device); - -private: - QHash> m_listeners; - void connectSignals(DEVICELISTENER_IMPL* listener); -}; - -#endif // DEVICELISTENER_H diff --git a/src/gui/osutils/OSUtilsBase.cpp b/src/gui/osutils/OSUtilsBase.cpp index 8a95b7f55..63ce71247 100644 --- a/src/gui/osutils/OSUtilsBase.cpp +++ b/src/gui/osutils/OSUtilsBase.cpp @@ -22,7 +22,9 @@ OSUtilsBase::OSUtilsBase(QObject* parent) { } -OSUtilsBase::~OSUtilsBase() = default; +OSUtilsBase::~OSUtilsBase() +{ +} bool OSUtilsBase::setPreventScreenCapture(QWindow*, bool) const { diff --git a/src/gui/osutils/OSUtilsBase.h b/src/gui/osutils/OSUtilsBase.h index 11d739fde..080a53413 100644 --- a/src/gui/osutils/OSUtilsBase.h +++ b/src/gui/osutils/OSUtilsBase.h @@ -56,11 +56,6 @@ public: */ virtual bool isCapslockEnabled() = 0; - /** - * @param enable Toggle protection on user input (if available). - */ - virtual void setUserInputProtection(bool enable) = 0; - virtual void registerNativeEventFilter() = 0; virtual bool registerGlobalShortcut(const QString& name, @@ -87,7 +82,7 @@ signals: protected: explicit OSUtilsBase(QObject* parent = nullptr); - ~OSUtilsBase() override; + virtual ~OSUtilsBase(); }; #endif // KEEPASSXC_OSUTILSBASE_H diff --git a/src/gui/osutils/ScreenLockListener.cpp b/src/gui/osutils/ScreenLockListener.cpp index 1e3e4e47c..2c1ba055a 100644 --- a/src/gui/osutils/ScreenLockListener.cpp +++ b/src/gui/osutils/ScreenLockListener.cpp @@ -25,4 +25,6 @@ ScreenLockListener::ScreenLockListener(QWidget* parent) connect(m_listener, SIGNAL(screenLocked()), this, SIGNAL(screenLocked())); } -ScreenLockListener::~ScreenLockListener() = default; +ScreenLockListener::~ScreenLockListener() +{ +} diff --git a/src/gui/osutils/ScreenLockListener.h b/src/gui/osutils/ScreenLockListener.h index 326bacd2e..107d342a6 100644 --- a/src/gui/osutils/ScreenLockListener.h +++ b/src/gui/osutils/ScreenLockListener.h @@ -26,8 +26,8 @@ class ScreenLockListener : public QObject Q_OBJECT public: - explicit ScreenLockListener(QWidget* parent); - ~ScreenLockListener() override; + ScreenLockListener(QWidget* parent = nullptr); + ~ScreenLockListener(); signals: void screenLocked(); diff --git a/src/gui/osutils/ScreenLockListenerPrivate.h b/src/gui/osutils/ScreenLockListenerPrivate.h index 34511f168..8f509280b 100644 --- a/src/gui/osutils/ScreenLockListenerPrivate.h +++ b/src/gui/osutils/ScreenLockListenerPrivate.h @@ -17,7 +17,7 @@ #ifndef SCREENLOCKLISTENERPRIVATE_H #define SCREENLOCKLISTENERPRIVATE_H -#include +#include class ScreenLockListenerPrivate : public QObject { @@ -26,7 +26,7 @@ public: static ScreenLockListenerPrivate* instance(QWidget* parent = nullptr); protected: - explicit ScreenLockListenerPrivate(QWidget* parent = nullptr); + ScreenLockListenerPrivate(QWidget* parent = nullptr); signals: void screenLocked(); diff --git a/src/gui/osutils/macutils/AppKit.h b/src/gui/osutils/macutils/AppKit.h index 260b6c208..309c05b90 100644 --- a/src/gui/osutils/macutils/AppKit.h +++ b/src/gui/osutils/macutils/AppKit.h @@ -1,6 +1,6 @@ /* - * Copyright (C) 2023 KeePassXC Team * Copyright (C) 2016 Lennart Glauer + * 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,8 +19,8 @@ #ifndef KEEPASSX_APPKIT_H #define KEEPASSX_APPKIT_H -#include #include +#include #include class QWindow; @@ -47,7 +47,7 @@ public: void setWindowSecurity(QWindow* window, bool state); signals: - void userSwitched(); + void lockDatabases(); void interfaceThemeChanged(); private: diff --git a/src/gui/osutils/macutils/AppKitImpl.mm b/src/gui/osutils/macutils/AppKitImpl.mm index a2b30e553..c700c06d5 100644 --- a/src/gui/osutils/macutils/AppKitImpl.mm +++ b/src/gui/osutils/macutils/AppKitImpl.mm @@ -1,6 +1,6 @@ /* - * Copyright (C) 2024 KeePassXC Team * Copyright (C) 2016 Lennart Glauer + * 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,9 +19,6 @@ #import "AppKitImpl.h" #import #import -#if __clang_major__ >= 13 && MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_VERSION_12_3 -#import -#endif @implementation AppKitImpl @@ -35,13 +32,21 @@ selector:@selector(didDeactivateApplicationObserver:) name:NSWorkspaceDidDeactivateApplicationNotification object:nil]; - + [[[NSWorkspace sharedWorkspace] notificationCenter] addObserver:self selector:@selector(userSwitchHandler:) name:NSWorkspaceSessionDidResignActiveNotification object:nil]; [NSApp addObserver:self forKeyPath:@"effectiveAppearance" options:NSKeyValueObservingOptionNew context:nil]; + + // Unfortunately, there is no notification for a wallpaper change, which affects + // the status bar colour on macOS Big Sur, but we can at least subscribe to this. + [[NSDistributedNotificationCenter defaultCenter] addObserver:self + selector:@selector(interfaceThemeChanged:) + name:@"AppleColorPreferencesChangedNotification" + object:nil]; + } return self; } @@ -163,7 +168,7 @@ { if ([[notification name] isEqualToString:NSWorkspaceSessionDidResignActiveNotification] && m_appkit) { - emit m_appkit->userSwitched(); + emit m_appkit->lockDatabases(); } } @@ -184,37 +189,28 @@ // // Check if screen recording is enabled, may show an popup asking for permissions // -- (bool) enableScreenRecording +- (bool) enableScreenRecording { -#if __clang_major__ >= 13 && MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_VERSION_12_3 - if (@available(macOS 12.3, *)) { - __block BOOL hasPermission = NO; - dispatch_semaphore_t sema = dispatch_semaphore_create(0); - - // Attempt to use SCShareableContent to check for screen recording permission - [SCShareableContent getShareableContentWithCompletionHandler:^(SCShareableContent * _Nullable content, - NSError * _Nullable error) { - Q_UNUSED(error); - if (content) { - // Successfully obtained content, indicating permission is granted - hasPermission = YES; - } else { - // No permission or other error occurred - hasPermission = NO; - } - // Notify the semaphore that the asynchronous task is complete - dispatch_semaphore_signal(sema); - }]; - - // Wait for the asynchronous callback to complete - dispatch_time_t timeout = dispatch_time(DISPATCH_TIME_NOW, 5 * NSEC_PER_SEC); - dispatch_semaphore_wait(sema, timeout); - - // Return the final result - return hasPermission; +#if __clang_major__ >= 9 && MAC_OS_X_VERSION_MIN_REQUIRED >= 1080 + if (@available(macOS 10.15, *)) { + // Request screen recording permission on macOS 10.15+ + // This is necessary to get the current window title + CGDisplayStreamRef stream = CGDisplayStreamCreate(CGMainDisplayID(), 1, 1, kCVPixelFormatType_32BGRA, nil, + ^(CGDisplayStreamFrameStatus status, uint64_t displayTime, + IOSurfaceRef frameSurface, CGDisplayStreamUpdateRef updateRef) { + Q_UNUSED(status); + Q_UNUSED(displayTime); + Q_UNUSED(frameSurface); + Q_UNUSED(updateRef); + }); + if (stream) { + CFRelease(stream); + } else { + return NO; + } } #endif - return YES; // Return YES for macOS versions that do not support ScreenCaptureKit + return YES; } - (void) toggleForegroundApp:(bool) foreground @@ -247,7 +243,6 @@ AppKit::~AppKit() { [[[NSWorkspace sharedWorkspace] notificationCenter] removeObserver:static_cast(self)]; [[NSDistributedNotificationCenter defaultCenter] removeObserver:static_cast(self)]; - [NSApp removeObserver:static_cast(self) forKeyPath:@"effectiveAppearance"]; [static_cast(self) dealloc]; } diff --git a/src/gui/osutils/macutils/DeviceListenerMac.cpp b/src/gui/osutils/macutils/DeviceListenerMac.cpp deleted file mode 100644 index e3785a04a..000000000 --- a/src/gui/osutils/macutils/DeviceListenerMac.cpp +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Copyright (C) 2023 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 "DeviceListenerMac.h" - -#include -#include - -DeviceListenerMac::DeviceListenerMac(QObject* parent) - : QObject(parent) - , m_mgr(nullptr) -{ -} - -DeviceListenerMac::~DeviceListenerMac() -{ - if (m_mgr) { - IOHIDManagerUnscheduleFromRunLoop(m_mgr, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode); - IOHIDManagerClose(m_mgr, kIOHIDOptionsTypeNone); - CFRelease(m_mgr); - } -} - -void DeviceListenerMac::registerHotplugCallback(bool arrived, bool left, int vendorId, int productId, const QUuid*) -{ - if (!m_mgr) { - m_mgr = IOHIDManagerCreate(kCFAllocatorDefault, kIOHIDManagerOptionNone); - if (!m_mgr) { - qWarning("Failed to create IOHIDManager."); - return; - } - IOHIDManagerScheduleWithRunLoop(m_mgr, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode); - } - - if (vendorId > 0 || productId > 0) { - CFMutableDictionaryRef matchingDict = IOServiceMatching(kIOHIDDeviceKey); - if (vendorId > 0) { - auto vid = CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt32Type, &vendorId); - CFDictionaryAddValue(matchingDict, CFSTR(kIOHIDVendorIDKey), vid); - CFRelease(vid); - } - if (productId > 0) { - auto pid = CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt32Type, &productId); - CFDictionaryAddValue(matchingDict, CFSTR(kIOHIDProductIDKey), pid); - CFRelease(pid); - } - IOHIDManagerSetDeviceMatching(m_mgr, matchingDict); - CFRelease(matchingDict); - } else { - IOHIDManagerSetDeviceMatching(m_mgr, nullptr); - } - - QPointer that = this; - if (arrived) { - IOHIDManagerRegisterDeviceMatchingCallback(m_mgr, [](void* ctx, IOReturn, void*, IOHIDDeviceRef device) { - static_cast(ctx)->onDeviceStateChanged(true, device); - }, that); - } - if (left) { - IOHIDManagerRegisterDeviceRemovalCallback(m_mgr, [](void* ctx, IOReturn, void*, IOHIDDeviceRef device) { - static_cast(ctx)->onDeviceStateChanged(true, device); - }, that); - } - - if (IOHIDManagerOpen(m_mgr, kIOHIDOptionsTypeNone) != kIOReturnSuccess) { - qWarning("Could not open enumerated devices."); - } -} - -void DeviceListenerMac::deregisterHotplugCallback() -{ - if (m_mgr) { - IOHIDManagerRegisterDeviceMatchingCallback(m_mgr, nullptr, this); - IOHIDManagerRegisterDeviceRemovalCallback(m_mgr, nullptr, this); - } -} - -void DeviceListenerMac::onDeviceStateChanged(bool state, void* device) -{ - emit devicePlugged(state, m_mgr, device); -} diff --git a/src/gui/osutils/macutils/DeviceListenerMac.h b/src/gui/osutils/macutils/DeviceListenerMac.h deleted file mode 100644 index dae0886e8..000000000 --- a/src/gui/osutils/macutils/DeviceListenerMac.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (C) 2023 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 DEVICELISTENER_MAC_H -#define DEVICELISTENER_MAC_H - -#define DEVICELISTENER_IMPL DeviceListenerMac - -#include -#include - -class QUuid; - -class DeviceListenerMac : public QObject -{ - Q_OBJECT - -public: - explicit DeviceListenerMac(QObject* parent); - DeviceListenerMac(const DeviceListenerMac&) = delete; - ~DeviceListenerMac() override; - - void registerHotplugCallback(bool arrived, - bool left, - int vendorId = -1, - int productId = -1, const QUuid* = nullptr); - void deregisterHotplugCallback(); - -signals: - void devicePlugged(bool state, void* ctx, void* device); - -private: - void onDeviceStateChanged(bool state, void* device); - IOHIDManagerRef m_mgr; -}; - -#endif // DEVICELISTENER_MAC_H diff --git a/src/gui/osutils/macutils/MacUtils.cpp b/src/gui/osutils/macutils/MacUtils.cpp index b943561dc..0f2cc6161 100644 --- a/src/gui/osutils/macutils/MacUtils.cpp +++ b/src/gui/osutils/macutils/MacUtils.cpp @@ -1,6 +1,6 @@ /* - * Copyright (C) 2023 KeePassXC Team * Copyright (C) 2012 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 @@ -39,7 +39,7 @@ MacUtils::MacUtils(QObject* parent) : OSUtilsBase(parent) , m_appkit(new AppKit()) { - connect(m_appkit.data(), SIGNAL(userSwitched()), SIGNAL(userSwitched())); + connect(m_appkit.data(), SIGNAL(lockDatabases()), SIGNAL(lockDatabases())); connect(m_appkit.data(), SIGNAL(interfaceThemeChanged()), SIGNAL(interfaceThemeChanged())); connect(m_appkit.data(), &AppKit::interfaceThemeChanged, this, [this]() { // Emit with delay, since isStatusBarDark() still returns the old value @@ -130,8 +130,6 @@ void MacUtils::setLaunchAtStartup(bool enable) if (enable) { QSettings agent(getLaunchAgentFilename(), QSettings::NativeFormat); agent.setValue("Label", qApp->property("KPXC_QUALIFIED_APPNAME").toString()); - agent.setValue("AssociatedBundleIdentifiers", qApp->property("KPXC_QUALIFIED_APPNAME").toString()); - agent.setValue("Program", QApplication::applicationFilePath()); agent.setValue("ProgramArguments", QStringList() << QApplication::applicationFilePath()); agent.setValue("RunAtLoad", true); agent.setValue("StandardErrorPath", "/dev/null"); @@ -150,26 +148,6 @@ bool MacUtils::isCapslockEnabled() #endif } -void MacUtils::setUserInputProtection(bool enable) -{ - static bool secureInputEnabled = false; - if (enable) { - /* - * MacOS keeps a single counter over all apps that needs to be zero to disable secure input. By never going - * higher than 1 internally this makes sure secure input doesn't stay active after calling this function - * multiple times. - */ - if (secureInputEnabled) { - DisableSecureEventInput(); - } - EnableSecureEventInput(); - } else { - DisableSecureEventInput(); - } - // Store our last known state - secureInputEnabled = enable; -} - /** * Toggle application state between foreground app and UIElement app. * Foreground apps have dock icons, UIElement apps do not. diff --git a/src/gui/osutils/macutils/MacUtils.h b/src/gui/osutils/macutils/MacUtils.h index 5e0e121d5..1281aa072 100644 --- a/src/gui/osutils/macutils/MacUtils.h +++ b/src/gui/osutils/macutils/MacUtils.h @@ -1,6 +1,6 @@ /* - * Copyright (C) 2023 KeePassXC Team * 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 @@ -40,7 +40,6 @@ public: bool isLaunchAtStartupEnabled() const override; void setLaunchAtStartup(bool enable) override; bool isCapslockEnabled() override; - void setUserInputProtection(bool enable) override; WId activeWindow(); bool raiseWindow(WId pid); @@ -67,7 +66,7 @@ public: bool setPreventScreenCapture(QWindow* window, bool prevent) const override; signals: - void userSwitched(); + void lockDatabases(); protected: explicit MacUtils(QObject* parent = nullptr); diff --git a/src/gui/osutils/nixutils/DeviceListenerLibUsb.cpp b/src/gui/osutils/nixutils/DeviceListenerLibUsb.cpp deleted file mode 100644 index 97233fbb0..000000000 --- a/src/gui/osutils/nixutils/DeviceListenerLibUsb.cpp +++ /dev/null @@ -1,134 +0,0 @@ -/* - * Copyright (C) 2023 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 "DeviceListenerLibUsb.h" -#include "core/Tools.h" - -#include -#include -#include -#include - -DeviceListenerLibUsb::DeviceListenerLibUsb(QWidget* parent) - : QObject(parent) - , m_ctx(nullptr) - , m_completed(false) -{ -} - -DeviceListenerLibUsb::~DeviceListenerLibUsb() -{ - if (m_ctx) { - deregisterAllHotplugCallbacks(); - libusb_exit(static_cast(m_ctx)); - m_ctx = nullptr; - } -} - -namespace -{ - void handleUsbEvents(libusb_context* ctx, QAtomicInt* completed) - { - while (!*completed) { - libusb_handle_events_completed(ctx, reinterpret_cast(completed)); - Tools::sleep(100); - } - } -} // namespace - -DeviceListenerLibUsb::Handle -DeviceListenerLibUsb::registerHotplugCallback(bool arrived, bool left, int vendorId, int productId, const QUuid*) -{ - if (!m_ctx) { - if (libusb_init(reinterpret_cast(&m_ctx)) != LIBUSB_SUCCESS) { - qWarning("Unable to initialize libusb. USB devices may not be detected properly."); - return 0; - } - } - - int events = 0; - if (arrived) { - events |= LIBUSB_HOTPLUG_EVENT_DEVICE_ARRIVED; - } - if (left) { - events |= LIBUSB_HOTPLUG_EVENT_DEVICE_LEFT; - } - - Handle handle = 0; - auto* handleNative = reinterpret_cast(&handle); - const QPointer that = this; - const int ret = libusb_hotplug_register_callback( - static_cast(m_ctx), - static_cast(events), - static_cast(0), - vendorId, - productId, - LIBUSB_HOTPLUG_MATCH_ANY, - [](libusb_context* ctx, libusb_device* device, libusb_hotplug_event event, void* userData) -> int { - if (!ctx) { - return true; - } - emit static_cast(userData)->devicePlugged( - event == LIBUSB_HOTPLUG_EVENT_DEVICE_ARRIVED, ctx, device); - return false; - }, - that, - handleNative); - if (ret != LIBUSB_SUCCESS) { - qWarning("Failed to register USB listener callback."); - handle = 0; - } - - if (m_completed && m_usbEvents.isRunning()) { - // Avoid race conditions - m_usbEvents.waitForFinished(); - } - if (handle > 0) { - m_callbackHandles.insert(handle); - if (!m_usbEvents.isRunning()) { - m_completed = false; - m_usbEvents = QtConcurrent::run(handleUsbEvents, static_cast(m_ctx), &m_completed); - } - } - return handle; -} - -void DeviceListenerLibUsb::deregisterHotplugCallback(Handle handle) -{ - if (!m_ctx || !m_callbackHandles.contains(handle)) { - return; - } -#ifdef Q_OS_FREEBSD - auto* handleNative = reinterpret_cast(handle); -#else - auto handleNative = static_cast(handle); -#endif - libusb_hotplug_deregister_callback(static_cast(m_ctx), handleNative); - m_callbackHandles.remove(handle); - - if (m_callbackHandles.isEmpty() && m_usbEvents.isRunning()) { - m_completed = true; - m_usbEvents.waitForFinished(); - } -} - -void DeviceListenerLibUsb::deregisterAllHotplugCallbacks() -{ - while (!m_callbackHandles.isEmpty()) { - deregisterHotplugCallback(*m_callbackHandles.constBegin()); - } -} diff --git a/src/gui/osutils/nixutils/DeviceListenerLibUsb.h b/src/gui/osutils/nixutils/DeviceListenerLibUsb.h deleted file mode 100644 index 4d207c847..000000000 --- a/src/gui/osutils/nixutils/DeviceListenerLibUsb.h +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (C) 2023 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 DEVICELISTENER_LIBUSB_H -#define DEVICELISTENER_LIBUSB_H - -#define DEVICELISTENER_IMPL DeviceListenerLibUsb - -#include -#include -#include -#include - -class QUuid; - -class DeviceListenerLibUsb : public QObject -{ - Q_OBJECT - -public: - typedef qintptr Handle; - explicit DeviceListenerLibUsb(QWidget* parent); - DeviceListenerLibUsb(const DeviceListenerLibUsb&) = delete; - ~DeviceListenerLibUsb() override; - - Handle - registerHotplugCallback(bool arrived, bool left, int vendorId = -1, int productId = -1, const QUuid* = nullptr); - void deregisterHotplugCallback(Handle handle); - void deregisterAllHotplugCallbacks(); - -signals: - void devicePlugged(bool state, void* ctx, void* device); - -private: - void* m_ctx; - QSet m_callbackHandles; - QFuture m_usbEvents; - QAtomicInt m_completed; -}; - -#endif // DEVICELISTENER_LIBUSB_H diff --git a/src/gui/osutils/nixutils/NixUtils.cpp b/src/gui/osutils/nixutils/NixUtils.cpp index 30b7e21e4..030b54582 100644 --- a/src/gui/osutils/nixutils/NixUtils.cpp +++ b/src/gui/osutils/nixutils/NixUtils.cpp @@ -18,15 +18,11 @@ #include "NixUtils.h" #include "config-keepassx.h" -#include "core/Config.h" -#include "core/Global.h" #include #include -#include #include #include -#include #include #include #include @@ -87,7 +83,9 @@ NixUtils::NixUtils(QObject* parent) sessionBus.callWithCallback(msg, this, SLOT(handleColorSchemeRead(QDBusVariant))); } -NixUtils::~NixUtils() = default; +NixUtils::~NixUtils() +{ +} bool NixUtils::isDarkMode() const { @@ -126,16 +124,12 @@ QString NixUtils::getAutostartDesktopFilename(bool createDirs) const bool NixUtils::isLaunchAtStartupEnabled() const { -#ifndef KEEPASSXC_DIST_FLATPAK return QFile::exists(getAutostartDesktopFilename()); -#else - return config()->get(Config::GUI_LaunchAtStartup).toBool(); -#endif + ; } void NixUtils::setLaunchAtStartup(bool enable) { -#ifndef KEEPASSXC_DIST_FLATPAK if (enable) { QFile desktopFile(getAutostartDesktopFilename(true)); if (!desktopFile.open(QIODevice::WriteOnly)) { @@ -165,51 +159,11 @@ void NixUtils::setLaunchAtStartup(bool enable) << QStringLiteral("X-GNOME-Autostart-enabled=true") << '\n' << QStringLiteral("X-GNOME-Autostart-Delay=2") << '\n' << QStringLiteral("X-KDE-autostart-after=panel") << '\n' - << QStringLiteral("X-LXQt-Need-Tray=true") << Qt::endl; + << QStringLiteral("X-LXQt-Need-Tray=true") << endl; desktopFile.close(); } else if (isLaunchAtStartupEnabled()) { QFile::remove(getAutostartDesktopFilename()); } -#else - QDBusConnection sessionBus = QDBusConnection::sessionBus(); - QDBusMessage msg = QDBusMessage::createMethodCall("org.freedesktop.portal.Desktop", - "/org/freedesktop/portal/desktop", - "org.freedesktop.portal.Background", - "RequestBackground"); - - QMap options; - options["autostart"] = QVariant(enable); - options["reason"] = QVariant("Launch KeePassXC at startup"); - int token = QRandomGenerator::global()->bounded(1000, 9999); - options["handle_token"] = QVariant(QString("org/keepassxc/KeePassXC/%1").arg(token)); - - msg << "" << options; - - QDBusMessage response = sessionBus.call(msg); - - QDBusObjectPath handle = response.arguments().at(0).value(); - - bool res = sessionBus.connect("org.freedesktop.portal.Desktop", - handle.path(), - "org.freedesktop.portal.Request", - "Response", - this, - SLOT(launchAtStartupRequested(uint, QVariantMap))); - - if (!res) { - qDebug() << "DBus Error: could not connect to org.freedesktop.portal.Request"; - } -#endif -} - -void NixUtils::launchAtStartupRequested(uint response, const QVariantMap& results) -{ - if (response > 0) { - qDebug() << "DBus Error: the request to autostart was cancelled."; - return; - } - - config()->set(Config::GUI_LaunchAtStartup, results["autostart"].value()); } bool NixUtils::isCapslockEnabled() @@ -235,12 +189,6 @@ bool NixUtils::isCapslockEnabled() return false; } -void NixUtils::setUserInputProtection(bool enable) -{ - // Linux does not support this feature - Q_UNUSED(enable) -} - void NixUtils::registerNativeEventFilter() { qApp->installNativeEventFilter(this); @@ -377,37 +325,3 @@ void NixUtils::setColorScheme(QDBusVariant value) m_systemColorschemePrefExists = true; emit interfaceThemeChanged(); } - -quint64 NixUtils::getProcessStartTime() const -{ - QString processStatPath = QString("/proc/%1/stat").arg(QCoreApplication::applicationPid()); - QFile processStatFile(processStatPath); - - if (!processStatFile.open(QIODevice::ReadOnly | QIODevice::Text)) { - qDebug() << "nixutils: failed to open " << processStatPath; - return 0; - } - - QTextStream processStatStream(&processStatFile); - QString processStatInfo = processStatStream.readLine(); - processStatFile.close(); - - auto startIndex = processStatInfo.lastIndexOf(')'); - if (startIndex != -1) { - auto tokens = processStatInfo.midRef(startIndex + 2).split(' '); - if (tokens.size() >= 20) { - bool ok; - auto time = tokens[19].toULongLong(&ok); - if (!ok) { - qDebug() << "nixutils: failed to convert " << tokens[19] << " to an integer in " << processStatPath; - return 0; - } - return time; - } - qDebug() << "nixutils: failed to find at least 20 values in " << processStatPath; - return 0; - } - - qDebug() << "nixutils: failed to find ')' in " << processStatPath; - return 0; -} diff --git a/src/gui/osutils/nixutils/NixUtils.h b/src/gui/osutils/nixutils/NixUtils.h index 9be835ff9..e3a17b950 100644 --- a/src/gui/osutils/nixutils/NixUtils.h +++ b/src/gui/osutils/nixutils/NixUtils.h @@ -35,7 +35,6 @@ public: bool isLaunchAtStartupEnabled() const override; void setLaunchAtStartup(bool enable) override; bool isCapslockEnabled() override; - void setUserInputProtection(bool enable) override; void registerNativeEventFilter() override; @@ -50,12 +49,9 @@ public: return false; } - quint64 getProcessStartTime() const; - private slots: void handleColorSchemeRead(QDBusVariant value); void handleColorSchemeChanged(QString ns, QString key, QDBusVariant value); - void launchAtStartupRequested(uint response, const QVariantMap& results); private: explicit NixUtils(QObject* parent = nullptr); @@ -84,7 +80,7 @@ private: PreferLight }; ColorschemePref m_systemColorschemePref = ColorschemePref::PreferNone; - bool m_systemColorschemePrefExists = false; + bool m_systemColorschemePrefExists; void setColorScheme(QDBusVariant value); diff --git a/src/gui/osutils/nixutils/ScreenLockListenerDBus.cpp b/src/gui/osutils/nixutils/ScreenLockListenerDBus.cpp index 1da87b997..be9b59fd1 100644 --- a/src/gui/osutils/nixutils/ScreenLockListenerDBus.cpp +++ b/src/gui/osutils/nixutils/ScreenLockListenerDBus.cpp @@ -91,7 +91,7 @@ void ScreenLockListenerDBus::login1SessionObjectReceived(QDBusMessage response) qDebug() << "org.freedesktop.login1.Manager.GetSession did not return a QDBusObjectPath"; return; } - auto path = arg0.value(); + QDBusObjectPath path = arg0.value(); QDBusConnection systemBus = QDBusConnection::systemBus(); systemBus.connect("", // service diff --git a/src/gui/osutils/nixutils/ScreenLockListenerDBus.h b/src/gui/osutils/nixutils/ScreenLockListenerDBus.h index 4ece8134f..e8ba127aa 100644 --- a/src/gui/osutils/nixutils/ScreenLockListenerDBus.h +++ b/src/gui/osutils/nixutils/ScreenLockListenerDBus.h @@ -17,7 +17,6 @@ #ifndef SCREENLOCKLISTENERDBUS_H #define SCREENLOCKLISTENERDBUS_H - #include "gui/osutils/ScreenLockListenerPrivate.h" #include @@ -25,7 +24,7 @@ class ScreenLockListenerDBus : public ScreenLockListenerPrivate { Q_OBJECT public: - explicit ScreenLockListenerDBus(QWidget* parent); + explicit ScreenLockListenerDBus(QWidget* parent = nullptr); private slots: void gnomeSessionStatusChanged(uint status); diff --git a/src/gui/osutils/winutils/DeviceListenerWin.cpp b/src/gui/osutils/winutils/DeviceListenerWin.cpp deleted file mode 100644 index 408bf9d06..000000000 --- a/src/gui/osutils/winutils/DeviceListenerWin.cpp +++ /dev/null @@ -1,106 +0,0 @@ -/* - * Copyright (C) 2023 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 "DeviceListenerWin.h" - -#include - -#include -#include - -#include - -DeviceListenerWin::DeviceListenerWin(QWidget* parent) - : QObject(parent) -{ - // Event listeners need a valid window reference - Q_ASSERT(parent); - QCoreApplication::instance()->installNativeEventFilter(this); -} - -DeviceListenerWin::~DeviceListenerWin() -{ - deregisterHotplugCallback(); -} - -void DeviceListenerWin::registerHotplugCallback(bool arrived, - bool left, - int vendorId, - int productId, - const QUuid* deviceClass) -{ - Q_ASSERT(deviceClass); - - if (m_deviceNotifyHandle) { - deregisterHotplugCallback(); - } - - QString regex = R"(^\\{2}\?\\[A-Z]+#)"; - if (vendorId > 0) { - regex += QString("VID_%1&").arg(vendorId, 0, 16).toUpper(); - if (productId > 0) { - regex += QString("PID_%1&").arg(productId, 0, 16).toUpper(); - } - } - regex += QString(".*$"); // Qt won't match otherwise - m_deviceIdMatch = QRegularExpression(regex); - - DEV_BROADCAST_DEVICEINTERFACE_W notificationFilter{ - sizeof(DEV_BROADCAST_DEVICEINTERFACE_W), DBT_DEVTYP_DEVICEINTERFACE, 0u, *deviceClass, {0x00}}; - auto w = reinterpret_cast(qobject_cast(parent())->winId()); - m_deviceNotifyHandle = RegisterDeviceNotificationW(w, ¬ificationFilter, DEVICE_NOTIFY_WINDOW_HANDLE); - if (!m_deviceNotifyHandle) { - qWarning("Failed to register device notification handle."); - return; - } - m_handleArrival = arrived; - m_handleRemoval = left; -} - -void DeviceListenerWin::deregisterHotplugCallback() -{ - if (m_deviceNotifyHandle) { - UnregisterDeviceNotification(m_deviceNotifyHandle); - m_deviceNotifyHandle = nullptr; - m_handleArrival = false; - m_handleRemoval = false; - } -} - -bool DeviceListenerWin::nativeEventFilter(const QByteArray& eventType, void* message, long*) -{ - if (eventType != "windows_generic_MSG") { - return false; - } - - const auto* m = static_cast(message); - if (m->message != WM_DEVICECHANGE) { - return false; - } - if ((m_handleArrival && m->wParam == DBT_DEVICEARRIVAL) - || (m_handleRemoval && m->wParam == DBT_DEVICEREMOVECOMPLETE)) { - const auto pBrHdr = reinterpret_cast(m->lParam); - const auto pDevIface = reinterpret_cast(pBrHdr); - const auto name = QString::fromWCharArray(pDevIface->dbcc_name, pDevIface->dbcc_size); - if (m_deviceIdMatch.match(name).hasMatch()) { - emit devicePlugged(m->wParam == DBT_DEVICEARRIVAL, nullptr, pDevIface); - return true; - } - } - - return false; -} diff --git a/src/gui/osutils/winutils/DeviceListenerWin.h b/src/gui/osutils/winutils/DeviceListenerWin.h deleted file mode 100644 index 527555d2f..000000000 --- a/src/gui/osutils/winutils/DeviceListenerWin.h +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright (C) 2023 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 DEVICELISTENER_WIN_H -#define DEVICELISTENER_WIN_H - -#define DEVICELISTENER_IMPL DeviceListenerWin - -#include -#include -#include -#include - -class DeviceListenerWin : public QObject, public QAbstractNativeEventFilter -{ - Q_OBJECT - -public: - static constexpr QUuid DEV_CLS_USB = - QUuid(0xa5dcbf10L, 0x6530, 0x11d2, 0x90, 0x1f, 0x00, 0xc0, 0x4f, 0xB9, 0x51, 0xed); - static constexpr QUuid DEV_CLS_KEYBOARD = - QUuid(0x884b96c3L, 0x56ef, 0x11d1, 0xbc, 0x8c, 0x00, 0xa0, 0xc9, 0x14, 0x05, 0xdd); - static constexpr QUuid DEV_CLS_CCID = - QUuid(0x50dd5230L, 0xba8a, 0x11d1, 0xbf, 0x5d, 0x00, 0x00, 0xf8, 0x05, 0xf5, 0x30); - - explicit DeviceListenerWin(QWidget* parent); - DeviceListenerWin(const DeviceListenerWin&) = delete; - ~DeviceListenerWin() override; - - void registerHotplugCallback(bool arrived, - bool left, - int vendorId = -1, - int productId = -1, - const QUuid* deviceClass = nullptr); - void deregisterHotplugCallback(); - - bool nativeEventFilter(const QByteArray& eventType, void* message, long*) override; - -signals: - void devicePlugged(bool state, void* ctx, void* device); - -private: - void* m_deviceNotifyHandle = nullptr; - bool m_handleArrival = false; - bool m_handleRemoval = false; - QRegularExpression m_deviceIdMatch; -}; - -#endif // DEVICELISTENER_WIN_H diff --git a/src/gui/osutils/winutils/ScreenLockListenerWin.h b/src/gui/osutils/winutils/ScreenLockListenerWin.h index e33f0e354..edf6c2936 100644 --- a/src/gui/osutils/winutils/ScreenLockListenerWin.h +++ b/src/gui/osutils/winutils/ScreenLockListenerWin.h @@ -17,8 +17,8 @@ #ifndef SCREENLOCKLISTENERWIN_H #define SCREENLOCKLISTENERWIN_H - #include +#include #include #include "gui/osutils/ScreenLockListenerPrivate.h" @@ -27,9 +27,9 @@ class ScreenLockListenerWin : public ScreenLockListenerPrivate, public QAbstract { Q_OBJECT public: - explicit ScreenLockListenerWin(QWidget* parent); + explicit ScreenLockListenerWin(QWidget* parent = nullptr); ~ScreenLockListenerWin(); - virtual bool nativeEventFilter(const QByteArray& eventType, void* message, long* result) override; + bool nativeEventFilter(const QByteArray& eventType, void* message, long*) override; private: void* m_powerNotificationHandle; diff --git a/src/gui/osutils/winutils/WinUtils.cpp b/src/gui/osutils/winutils/WinUtils.cpp index a15976932..188b91348 100644 --- a/src/gui/osutils/winutils/WinUtils.cpp +++ b/src/gui/osutils/winutils/WinUtils.cpp @@ -136,12 +136,6 @@ bool WinUtils::isCapslockEnabled() return GetKeyState(VK_CAPITAL) == 1; } -void WinUtils::setUserInputProtection(bool enable) -{ - // Windows does not support this feature - Q_UNUSED(enable) -} - bool WinUtils::isHighContrastMode() const { QSettings settings(R"(HKEY_CURRENT_USER\Control Panel\Accessibility\HighContrast)", QSettings::NativeFormat); @@ -240,8 +234,6 @@ WORD WinUtils::qtToNativeKeyCode(Qt::Key key) return VK_SHIFT; // 0x10 case Qt::Key_Control: return VK_CONTROL; // 0x11 - case Qt::Key_Alt: - return VK_MENU; // 0x12 case Qt::Key_Pause: return VK_PAUSE; // 0x13 case Qt::Key_CapsLock: diff --git a/src/gui/osutils/winutils/WinUtils.h b/src/gui/osutils/winutils/WinUtils.h index 9278c9d60..9e4492a5f 100644 --- a/src/gui/osutils/winutils/WinUtils.h +++ b/src/gui/osutils/winutils/WinUtils.h @@ -44,7 +44,6 @@ public: bool isLaunchAtStartupEnabled() const override; void setLaunchAtStartup(bool enable) override; bool isCapslockEnabled() override; - void setUserInputProtection(bool enable) override; bool isHighContrastMode() const; void registerNativeEventFilter() override; diff --git a/src/gui/passkeys/PasskeyExportDialog.cpp b/src/gui/passkeys/PasskeyExportDialog.cpp deleted file mode 100644 index 84e984df6..000000000 --- a/src/gui/passkeys/PasskeyExportDialog.cpp +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright (C) 2023 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 "PasskeyExportDialog.h" -#include "ui_PasskeyExportDialog.h" - -#include "core/Entry.h" -#include "gui/FileDialog.h" - -PasskeyExportDialog::PasskeyExportDialog(QWidget* parent) - : QDialog(parent) - , m_ui(new Ui::PasskeyExportDialog()) -{ - setWindowFlags(windowFlags() | Qt::WindowStaysOnTopHint); - - m_ui->setupUi(this); - - connect(m_ui->exportButton, SIGNAL(clicked()), SLOT(accept())); - connect(m_ui->cancelButton, SIGNAL(clicked()), SLOT(reject())); - connect(m_ui->itemsTable->selectionModel(), - SIGNAL(selectionChanged(QItemSelection, QItemSelection)), - this, - SLOT(selectionChanged())); -} - -PasskeyExportDialog::~PasskeyExportDialog() -{ -} - -void PasskeyExportDialog::setEntries(const QList& items) -{ - m_ui->itemsTable->setRowCount(items.count()); - m_ui->itemsTable->setColumnCount(1); - - int row = 0; - for (const auto& entry : items) { - auto item = new QTableWidgetItem(); - item->setText(entry->title() + " - " + entry->username()); - item->setData(Qt::UserRole, row); - item->setFlags(item->flags() | Qt::ItemIsSelectable); - m_ui->itemsTable->setItem(row, 0, item); - - ++row; - } - m_ui->itemsTable->resizeColumnsToContents(); - m_ui->itemsTable->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch); - m_ui->itemsTable->selectAll(); - m_ui->exportButton->setFocus(); -} - -QList PasskeyExportDialog::getSelectedItems() const -{ - QList selected; - for (int i = 0; i < m_ui->itemsTable->rowCount(); ++i) { - auto item = m_ui->itemsTable->item(i, 0); - if (item->isSelected()) { - selected.append(item); - } - } - return selected; -} - -void PasskeyExportDialog::selectionChanged() -{ - auto indexes = m_ui->itemsTable->selectionModel()->selectedIndexes(); - m_ui->exportButton->setEnabled(!indexes.isEmpty()); - - if (indexes.isEmpty()) { - m_ui->exportButton->clearFocus(); - m_ui->cancelButton->setFocus(); - } -} - -QString PasskeyExportDialog::selectExportFolder() -{ - return fileDialog()->getExistingDirectory(this, tr("Export to folder"), FileDialog::getLastDir("passkey")); -} diff --git a/src/gui/passkeys/PasskeyExportDialog.h b/src/gui/passkeys/PasskeyExportDialog.h deleted file mode 100644 index 7104583ad..000000000 --- a/src/gui/passkeys/PasskeyExportDialog.h +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright (C) 2023 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 KEEPASSXC_PASSKEYEXPORTDIALOG_H -#define KEEPASSXC_PASSKEYEXPORTDIALOG_H - -#include -#include - -class Entry; - -namespace Ui -{ - class PasskeyExportDialog; -} - -class PasskeyExportDialog : public QDialog -{ - Q_OBJECT - -public: - explicit PasskeyExportDialog(QWidget* parent = nullptr); - ~PasskeyExportDialog() override; - - void setEntries(const QList& items); - QList getSelectedItems() const; - QString selectExportFolder(); - -private slots: - void selectionChanged(); - -private: - QScopedPointer m_ui; - QList m_entriesToConfirm; - QList m_allowedEntries; -}; - -#endif // KEEPASSXC_PASSKEYEXPORTDIALOG_H diff --git a/src/gui/passkeys/PasskeyExportDialog.ui b/src/gui/passkeys/PasskeyExportDialog.ui deleted file mode 100644 index bf9f4c42d..000000000 --- a/src/gui/passkeys/PasskeyExportDialog.ui +++ /dev/null @@ -1,121 +0,0 @@ - - - PasskeyExportDialog - - - - 0 - 0 - 540 - 320 - - - - KeePassXC - Passkey Export - - - - - - - 75 - true - - - - Export the following passkey entries. - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - - - - - - 75 - true - - - - Filenames will be generated with title and .passkey file extension. - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - - - - - QAbstractItemView::NoEditTriggers - - - false - - - QAbstractItemView::ExtendedSelection - - - QAbstractItemView::SelectRows - - - false - - - false - - - false - - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Cancel - - - true - - - - - - - Export entries - - - Export Selected - - - true - - - true - - - - - - - - - - diff --git a/src/gui/passkeys/PasskeyExporter.cpp b/src/gui/passkeys/PasskeyExporter.cpp deleted file mode 100644 index 4ff84e5f8..000000000 --- a/src/gui/passkeys/PasskeyExporter.cpp +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Copyright (C) 2024 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 "PasskeyExporter.h" -#include "PasskeyExportDialog.h" - -#include "browser/BrowserPasskeys.h" -#include "browser/PasskeyUtils.h" -#include "core/Entry.h" -#include "core/EntryAttributes.h" -#include "core/Tools.h" -#include "gui/MessageBox.h" -#include -#include -#include - -PasskeyExporter::PasskeyExporter(QWidget* parent) - : m_parent(parent) -{ -} - -void PasskeyExporter::showExportDialog(const QList& items) -{ - if (items.isEmpty()) { - return; - } - - PasskeyExportDialog passkeyExportDialog(m_parent); - passkeyExportDialog.setEntries(items); - auto ret = passkeyExportDialog.exec(); - - if (ret == QDialog::Accepted) { - // Select folder - auto folder = passkeyExportDialog.selectExportFolder(); - if (folder.isEmpty()) { - return; - } - - const auto selectedItems = passkeyExportDialog.getSelectedItems(); - for (const auto& item : selectedItems) { - auto entry = items[item->row()]; - exportSelectedEntry(entry, folder); - } - } -} - -/** - * Creates an export file for a Passkey credential - * - * File contents in JSON: - * { - * "privateKey": , - * "relyingParty: , - * "url": , - * "userHandle": , - * "credentialId": , - * "username:" - * } - */ -void PasskeyExporter::exportSelectedEntry(const Entry* entry, const QString& folder) -{ - const auto fullPath = QString("%1/%2.passkey").arg(folder, Tools::cleanFilename(entry->title())); - if (QFile::exists(fullPath)) { - auto dialogResult = MessageBox::warning(m_parent, - tr("KeePassXC: Passkey Export"), - tr("File \"%1.passkey\" already exists.\n" - "Do you want to overwrite it?\n") - .arg(entry->title()), - MessageBox::Yes | MessageBox::No); - - if (dialogResult != MessageBox::Yes) { - return; - } - } - - QFile passkeyFile(fullPath); - if (!passkeyFile.open(QIODevice::WriteOnly)) { - MessageBox::information( - m_parent, tr("Cannot open file"), tr("Cannot open file \"%1\" for writing.").arg(fullPath)); - return; - } - - QJsonObject passkeyObject; - passkeyObject["relyingParty"] = entry->attributes()->value(EntryAttributes::KPEX_PASSKEY_RELYING_PARTY); - passkeyObject["url"] = entry->url(); - passkeyObject["username"] = passkeyUtils()->getUsernameFromEntry(entry); - passkeyObject["credentialId"] = passkeyUtils()->getCredentialIdFromEntry(entry); - passkeyObject["userHandle"] = entry->attributes()->value(EntryAttributes::KPEX_PASSKEY_USER_HANDLE); - passkeyObject["privateKey"] = entry->attributes()->value(EntryAttributes::KPEX_PASSKEY_PRIVATE_KEY_PEM); - - QJsonDocument document(passkeyObject); - if (passkeyFile.write(document.toJson()) < 0) { - MessageBox::information( - nullptr, tr("Cannot write to file"), tr("Cannot open file \"%1\" for writing.").arg(fullPath)); - } - - passkeyFile.close(); -} diff --git a/src/gui/passkeys/PasskeyExporter.h b/src/gui/passkeys/PasskeyExporter.h deleted file mode 100644 index ca59ea4b3..000000000 --- a/src/gui/passkeys/PasskeyExporter.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (C) 2024 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 KEEPASSXC_PASSKEYEXPORTER_H -#define KEEPASSXC_PASSKEYEXPORTER_H - -#include -#include -#include -#include - -class Entry; - -class PasskeyExporter : public QObject -{ - Q_OBJECT - -public: - explicit PasskeyExporter(QWidget* parent = nullptr); - - void showExportDialog(const QList& items); - -private: - void exportSelectedEntry(const Entry* entry, const QString& folder); - -private: - QPointer m_parent; -}; - -#endif // KEEPASSXC_PASSKEYEXPORTER_H diff --git a/src/gui/passkeys/PasskeyImportDialog.cpp b/src/gui/passkeys/PasskeyImportDialog.cpp deleted file mode 100644 index 179b2ed96..000000000 --- a/src/gui/passkeys/PasskeyImportDialog.cpp +++ /dev/null @@ -1,200 +0,0 @@ -/* - * Copyright (C) 2024 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 "PasskeyImportDialog.h" -#include "ui_PasskeyImportDialog.h" - -#include "browser/BrowserService.h" -#include "core/Metadata.h" -#include "gui/MainWindow.h" -#include -#include - -PasskeyImportDialog::PasskeyImportDialog(QWidget* parent) - : QDialog(parent) - , m_ui(new Ui::PasskeyImportDialog()) -{ - setWindowFlags(windowFlags() | Qt::WindowStaysOnTopHint); - - m_ui->setupUi(this); - - connect(this, SIGNAL(updateGroups()), this, SLOT(addGroups())); - connect(this, SIGNAL(updateEntries()), this, SLOT(addEntries())); - connect(m_ui->importButton, SIGNAL(clicked()), SLOT(accept())); - connect(m_ui->cancelButton, SIGNAL(clicked()), SLOT(reject())); - connect(m_ui->selectDatabaseCombobBox, SIGNAL(currentIndexChanged(int)), SLOT(changeDatabase(int))); - connect(m_ui->selectEntryComboBox, SIGNAL(currentIndexChanged(int)), SLOT(changeEntry(int))); - connect(m_ui->selectGroupComboBox, SIGNAL(currentIndexChanged(int)), SLOT(changeGroup(int))); -} - -PasskeyImportDialog::~PasskeyImportDialog() -{ -} - -void PasskeyImportDialog::setInfo(const QString& relyingParty, - const QString& username, - const QSharedPointer& database, - bool isEntry, - const QString& titleText, - const QString& infoText, - const QString& importButtonText) -{ - m_ui->relyingPartyLabel->setText(tr("Relying Party: %1").arg(relyingParty)); - m_ui->usernameLabel->setText(tr("Username: %1").arg(username)); - - if (isEntry) { - m_ui->verticalLayout->setSizeConstraint(QLayout::SetFixedSize); - m_ui->infoLabel->setText(tr("Import the following passkey to this entry:")); - m_ui->groupBox->setVisible(false); - } - - m_selectedDatabase = database; - addDatabases(); - addGroups(); - - auto openDatabaseCount = 0; - for (auto dbWidget : getMainWindow()->getOpenDatabases()) { - if (dbWidget && !dbWidget->isLocked()) { - openDatabaseCount++; - } - } - m_ui->selectDatabaseCombobBox->setEnabled(openDatabaseCount > 1); - - if (!titleText.isEmpty()) { - setWindowTitle(titleText); - } - - if (!infoText.isEmpty()) { - m_ui->infoLabel->setText(infoText); - } - - if (!importButtonText.isEmpty()) { - m_ui->importButton->setText(importButtonText); - } -} - -QSharedPointer PasskeyImportDialog::getSelectedDatabase() const -{ - return m_selectedDatabase; -} - -QUuid PasskeyImportDialog::getSelectedEntryUuid() const -{ - return m_selectedEntryUuid; -} - -QUuid PasskeyImportDialog::getSelectedGroupUuid() const -{ - return m_selectedGroupUuid; -} - -bool PasskeyImportDialog::useDefaultGroup() const -{ - return m_selectedGroupUuid.isNull(); -} - -bool PasskeyImportDialog::createNewEntry() const -{ - return m_selectedEntryUuid.isNull(); -} - -void PasskeyImportDialog::addDatabases() -{ - auto currentDatabaseIndex = 0; - const auto openDatabases = browserService()->getOpenDatabases(); - const auto currentDatabase = browserService()->getDatabase(); - - m_ui->selectDatabaseCombobBox->clear(); - for (const auto& db : openDatabases) { - m_ui->selectDatabaseCombobBox->addItem(db->metadata()->name(), db->rootGroup()->uuid()); - if (db->rootGroup()->uuid() == currentDatabase->rootGroup()->uuid()) { - currentDatabaseIndex = m_ui->selectDatabaseCombobBox->count() - 1; - } - } - - m_ui->selectDatabaseCombobBox->setCurrentIndex(currentDatabaseIndex); -} - -void PasskeyImportDialog::addEntries() -{ - if (!m_selectedDatabase || !m_selectedDatabase->rootGroup()) { - return; - } - - m_ui->selectEntryComboBox->clear(); - m_ui->selectEntryComboBox->addItem(tr("Create new entry"), {}); - - const auto group = m_selectedDatabase->rootGroup()->findGroupByUuid(m_selectedGroupUuid); - if (!group) { - return; - } - - // Collect all entries in the group and resolve the title - QList> entries; - for (const auto entry : group->entries()) { - if (!entry || entry->isRecycled()) { - continue; - } - entries.append({entry->resolveMultiplePlaceholders(entry->title()), entry->uuid()}); - } - - // Sort entries by title - std::sort(entries.begin(), entries.end(), [](const auto& a, const auto& b) { - return a.first.compare(b.first, Qt::CaseInsensitive) < 0; - }); - - // Add sorted entries to the combobox - for (const auto& pair : entries) { - m_ui->selectEntryComboBox->addItem(pair.first, pair.second); - } -} - -void PasskeyImportDialog::addGroups() -{ - if (!m_selectedDatabase) { - return; - } - - m_ui->selectGroupComboBox->clear(); - m_ui->selectGroupComboBox->addItem(tr("Default passkeys group (Imported Passkeys)"), {}); - - for (const auto& group : m_selectedDatabase->rootGroup()->groupsRecursive(true)) { - if (!group || group->isRecycled() || group == m_selectedDatabase->metadata()->recycleBin()) { - continue; - } - - m_ui->selectGroupComboBox->addItem(group->fullPath(), group->uuid()); - } -} - -void PasskeyImportDialog::changeDatabase(int index) -{ - m_selectedDatabaseUuid = m_ui->selectDatabaseCombobBox->itemData(index).value(); - m_selectedDatabase = browserService()->getDatabase(m_selectedDatabaseUuid); - emit updateGroups(); -} - -void PasskeyImportDialog::changeEntry(int index) -{ - m_selectedEntryUuid = m_ui->selectEntryComboBox->itemData(index).value(); -} - -void PasskeyImportDialog::changeGroup(int index) -{ - m_selectedGroupUuid = m_ui->selectGroupComboBox->itemData(index).value(); - emit updateEntries(); -} diff --git a/src/gui/passkeys/PasskeyImportDialog.h b/src/gui/passkeys/PasskeyImportDialog.h deleted file mode 100644 index 920a6a020..000000000 --- a/src/gui/passkeys/PasskeyImportDialog.h +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright (C) 2024 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 KEEPASSXC_PASSKEYIMPORTDIALOG_H -#define KEEPASSXC_PASSKEYIMPORTDIALOG_H - -#include "core/Database.h" -#include "core/Group.h" -#include -#include - -namespace Ui -{ - class PasskeyImportDialog; -} - -class PasskeyImportDialog : public QDialog -{ - Q_OBJECT - -public: - explicit PasskeyImportDialog(QWidget* parent = nullptr); - ~PasskeyImportDialog() override; - - void setInfo(const QString& relyingParty, - const QString& username, - const QSharedPointer& database, - bool isEntry, - const QString& titleText = {}, - const QString& infoText = {}, - const QString& importButtonText = {}); - QSharedPointer getSelectedDatabase() const; - QUuid getSelectedEntryUuid() const; - QUuid getSelectedGroupUuid() const; - bool useDefaultGroup() const; - bool createNewEntry() const; - -private: - void addDatabases(); - -signals: - void updateEntries(); - void updateGroups(); - -private slots: - void addEntries(); - void addGroups(); - void changeDatabase(int index); - void changeEntry(int index); - void changeGroup(int index); - -private: - QScopedPointer m_ui; - QSharedPointer m_selectedDatabase; - QUuid m_selectedDatabaseUuid; - QUuid m_selectedEntryUuid; - QUuid m_selectedGroupUuid; -}; - -#endif // KEEPASSXC_PASSKEYIMPORTDIALOG_H diff --git a/src/gui/passkeys/PasskeyImportDialog.ui b/src/gui/passkeys/PasskeyImportDialog.ui deleted file mode 100644 index 3b0080997..000000000 --- a/src/gui/passkeys/PasskeyImportDialog.ui +++ /dev/null @@ -1,174 +0,0 @@ - - - PasskeyImportDialog - - - - 0 - 0 - 500 - 300 - - - - - 0 - 0 - - - - - 400 - 300 - - - - KeePassXC - Passkey Import - - - - - - - - - true - - - - Import the following passkey: - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - - - - - Relying Party: %1 - - - Qt::PlainText - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - - - - - Username: %1 - - - Qt::PlainText - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - - - - - - - - - - Database - - - - - - - - - - Group - - - - - - - - - - Entry - - - - - - - - - - - - - - - - - Qt::Vertical - - - - 20 - 10 - - - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Cancel - - - true - - - - - - - Import Passkey - - - Import - - - true - - - true - - - - - - - - - - diff --git a/src/gui/passkeys/PasskeyImporter.cpp b/src/gui/passkeys/PasskeyImporter.cpp deleted file mode 100644 index df4042069..000000000 --- a/src/gui/passkeys/PasskeyImporter.cpp +++ /dev/null @@ -1,177 +0,0 @@ -/* - * Copyright (C) 2024 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 "PasskeyImporter.h" -#include "PasskeyImportDialog.h" -#include "browser/BrowserMessageBuilder.h" -#include "browser/BrowserPasskeys.h" -#include "browser/BrowserService.h" -#include "core/Entry.h" -#include "core/Group.h" -#include "core/Tools.h" -#include "gui/FileDialog.h" -#include "gui/MessageBox.h" -#include -#include - -static const QString IMPORTED_PASSKEYS_GROUP = QStringLiteral("Imported Passkeys"); - -PasskeyImporter::PasskeyImporter(QWidget* parent) - : m_parent(parent) -{ -} - -void PasskeyImporter::importPasskey(QSharedPointer& database, Entry* entry) -{ - auto filter = QString("%1 (*.passkey);;%2 (*)").arg(tr("Passkey file"), tr("All files")); - auto fileName = - fileDialog()->getOpenFileName(m_parent, tr("Open passkey file"), FileDialog::getLastDir("passkey"), filter); - if (fileName.isEmpty()) { - return; - } - - FileDialog::saveLastDir("passkey", fileName, true); - - QFile file(fileName); - if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { - MessageBox::information( - nullptr, tr("Cannot open file"), tr("Cannot open file \"%1\" for reading.").arg(fileName)); - return; - } - - importSelectedFile(file, database, entry); -} - -void PasskeyImporter::importSelectedFile(QFile& file, QSharedPointer& database, Entry* entry) -{ - const auto fileData = file.readAll(); - const auto passkeyObject = browserMessageBuilder()->getJsonObject(fileData); - if (passkeyObject.isEmpty()) { - MessageBox::information(m_parent, - tr("Cannot import passkey"), - tr("Cannot import passkey file \"%1\". Data is missing.").arg(file.fileName())); - return; - } - - const auto privateKey = passkeyObject["privateKey"].toString(); - const auto missingKeys = Tools::getMissingValuesFromList( - passkeyObject.keys(), - QStringList() << "relyingParty" << "url" << "username" << "credentialId" << "userHandle" << "privateKey"); - if (!missingKeys.isEmpty()) { - MessageBox::information(m_parent, - tr("Cannot import passkey"), - tr("Cannot import passkey file \"%1\".\nThe following data is missing:\n%2") - .arg(file.fileName(), missingKeys.join(", "))); - } else if (!privateKey.startsWith(EntryAttributes::KPEX_PASSKEY_PRIVATE_KEY_START) - || !privateKey.trimmed().endsWith(EntryAttributes::KPEX_PASSKEY_PRIVATE_KEY_END)) { - MessageBox::information( - m_parent, - tr("Cannot import passkey"), - tr("Cannot import passkey file \"%1\". Private key is missing or malformed.").arg(file.fileName())); - } else { - const auto relyingParty = passkeyObject["relyingParty"].toString(); - const auto url = passkeyObject["url"].toString(); - const auto username = passkeyObject["username"].toString(); - const auto credentialId = passkeyObject["credentialId"].toString(); - const auto userHandle = passkeyObject["userHandle"].toString(); - showImportDialog(database, entry, url, relyingParty, username, credentialId, userHandle, privateKey); - } -} - -bool PasskeyImporter::showImportDialog(QSharedPointer& database, - Entry* entry, - const QString& url, - const QString& relyingParty, - const QString& username, - const QString& credentialId, - const QString& userHandle, - const QString& privateKey, - const QString& titleText, - const QString& infoText, - const QString& importButtonText) -{ - PasskeyImportDialog passkeyImportDialog(m_parent); - passkeyImportDialog.setInfo( - relyingParty, username, database, entry != nullptr, titleText, infoText, importButtonText); - - auto ret = passkeyImportDialog.exec(); - if (ret != QDialog::Accepted) { - return false; - } - - auto db = passkeyImportDialog.getSelectedDatabase(); - if (!db) { - db = database; - } - - // Store to entry if given directly - if (entry) { - browserService()->addPasskeyToEntry( - entry, relyingParty, relyingParty, username, credentialId, userHandle, privateKey); - return true; - } - - // Import to entry selected instead of creating a new one - if (!passkeyImportDialog.createNewEntry()) { - auto groupUuid = passkeyImportDialog.getSelectedGroupUuid(); - auto group = db->rootGroup()->findGroupByUuid(groupUuid); - - if (group) { - auto selectedEntry = group->findEntryByUuid(passkeyImportDialog.getSelectedEntryUuid()); - if (selectedEntry) { - browserService()->addPasskeyToEntry( - selectedEntry, relyingParty, relyingParty, username, credentialId, userHandle, privateKey); - } - } - - return true; - } - - // Group settings. Use default group "Imported Passkeys" if user did not select a specific one. - Group* group = nullptr; - - // Attempt to use the selected group - if (!passkeyImportDialog.useDefaultGroup()) { - auto groupUuid = passkeyImportDialog.getSelectedGroupUuid(); - group = db->rootGroup()->findGroupByUuid(groupUuid); - } - - // Use default group if requested or if the selected group does not exist - if (!group) { - group = getDefaultGroup(db); - } - - browserService()->addPasskeyToGroup( - db, group, url, relyingParty, relyingParty, username, credentialId, userHandle, privateKey); - - return true; -} - -Group* PasskeyImporter::getDefaultGroup(QSharedPointer& database) const -{ - auto defaultGroup = database->rootGroup()->findGroupByPath(IMPORTED_PASSKEYS_GROUP); - - // Create the default group if it does not exist - if (!defaultGroup) { - defaultGroup = new Group(); - defaultGroup->setName(IMPORTED_PASSKEYS_GROUP); - defaultGroup->setUuid(QUuid::createUuid()); - defaultGroup->setParent(database->rootGroup()); - } - - return defaultGroup; -} diff --git a/src/gui/passkeys/PasskeyImporter.h b/src/gui/passkeys/PasskeyImporter.h deleted file mode 100644 index 9fd7097d5..000000000 --- a/src/gui/passkeys/PasskeyImporter.h +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright (C) 2024 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 KEEPASSXC_PASSKEYIMPORTER_H -#define KEEPASSXC_PASSKEYIMPORTER_H - -#include "core/Database.h" -#include -#include -#include -#include -#include - -class Entry; - -class PasskeyImporter : public QObject -{ - Q_OBJECT - -public: - explicit PasskeyImporter(QWidget* parent = nullptr); - - void importPasskey(QSharedPointer& database, Entry* entry = nullptr); - bool showImportDialog(QSharedPointer& database, - Entry* entry, - const QString& url, - const QString& relyingParty, - const QString& username, - const QString& credentialId, - const QString& userHandle, - const QString& privateKey, - const QString& titleText = {}, - const QString& infoText = {}, - const QString& importButtonText = {}); - -private: - void importSelectedFile(QFile& file, QSharedPointer& database, Entry* entry); - Group* getDefaultGroup(QSharedPointer& database) const; - -private: - QPointer m_parent; -}; - -#endif // KEEPASSXC_PASSKEYIMPORTER_H diff --git a/src/gui/remote/DatabaseSettingsWidgetRemote.cpp b/src/gui/remote/DatabaseSettingsWidgetRemote.cpp deleted file mode 100644 index f66edba7e..000000000 --- a/src/gui/remote/DatabaseSettingsWidgetRemote.cpp +++ /dev/null @@ -1,209 +0,0 @@ -/* - * Copyright (C) 2023 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 "DatabaseSettingsWidgetRemote.h" -#include "ui_DatabaseSettingsWidgetRemote.h" - -#include "core/Global.h" -#include "core/Metadata.h" - -#include "RemoteHandler.h" -#include "RemoteSettings.h" -#include "gui/MessageBox.h" - -DatabaseSettingsWidgetRemote::DatabaseSettingsWidgetRemote(QWidget* parent) - : DatabaseSettingsWidget(parent) - , m_remoteSettings(new RemoteSettings(nullptr, this)) - , m_ui(new Ui::DatabaseSettingsWidgetRemote()) -{ - m_ui->setupUi(this); - m_ui->messageWidget->setHidden(true); - - connect(m_ui->saveSettingsButton, &QPushButton::clicked, this, &DatabaseSettingsWidgetRemote::saveCurrentSettings); - connect( - m_ui->removeSettingsButton, &QPushButton::clicked, this, &DatabaseSettingsWidgetRemote::removeCurrentSettings); - connect(m_ui->settingsListWidget, - &QListWidget::itemSelectionChanged, - this, - &DatabaseSettingsWidgetRemote::editCurrentSettings); - connect(m_ui->testDownloadCommandButton, &QPushButton::clicked, this, &DatabaseSettingsWidgetRemote::testDownload); - - auto setModified = [this]() { m_modified = true; }; - connect(m_ui->nameLineEdit, &QLineEdit::textChanged, setModified); - connect(m_ui->downloadCommand, &QLineEdit::textChanged, setModified); - connect(m_ui->inputForDownload, &QPlainTextEdit::textChanged, setModified); - connect(m_ui->downloadTimeoutSec, QOverload::of(&QSpinBox::valueChanged), setModified); - connect(m_ui->uploadCommand, &QLineEdit::textChanged, setModified); - connect(m_ui->inputForUpload, &QPlainTextEdit::textChanged, setModified); - connect(m_ui->uploadTimeoutSec, QOverload::of(&QSpinBox::valueChanged), setModified); -} - -DatabaseSettingsWidgetRemote::~DatabaseSettingsWidgetRemote() = default; - -void DatabaseSettingsWidgetRemote::initialize() -{ - clearFields(); - m_remoteSettings->setDatabase(m_db); - updateSettingsList(); - if (m_ui->settingsListWidget->count() > 0) { - m_ui->settingsListWidget->setCurrentRow(0); - m_ui->removeSettingsButton->setEnabled(true); - } else { - m_ui->removeSettingsButton->setDisabled(true); - } -} - -void DatabaseSettingsWidgetRemote::uninitialize() -{ -} - -bool DatabaseSettingsWidgetRemote::saveSettings() -{ - if (m_modified) { - auto ans = MessageBox::question(this, - tr("Save Remote Settings"), - tr("You have unsaved changes. Do you want to save them?"), - MessageBox::Save | MessageBox::Discard | MessageBox::Cancel, - MessageBox::Save); - if (ans == MessageBox::Save) { - saveCurrentSettings(); - } else if (ans == MessageBox::Cancel) { - return false; - } - } - - m_remoteSettings->saveSettings(); - return true; -} - -void DatabaseSettingsWidgetRemote::saveCurrentSettings() -{ - QString name = m_ui->nameLineEdit->text(); - if (name.isEmpty()) { - m_ui->messageWidget->showMessage(tr("Name cannot be empty."), MessageWidget::Warning); - return; - } - - auto* params = new RemoteParams(); - params->name = m_ui->nameLineEdit->text(); - params->downloadCommand = m_ui->downloadCommand->text(); - params->downloadInput = m_ui->inputForDownload->toPlainText(); - params->downloadTimeoutMsec = m_ui->downloadTimeoutSec->value() * 1000; - params->uploadCommand = m_ui->uploadCommand->text(); - params->uploadInput = m_ui->inputForUpload->toPlainText(); - params->uploadTimeoutMsec = m_ui->uploadTimeoutSec->value() * 1000; - - m_remoteSettings->addRemoteParams(params); - updateSettingsList(); - - auto item = findItemByName(name); - m_ui->settingsListWidget->setCurrentItem(item); - m_ui->removeSettingsButton->setEnabled(true); - m_modified = false; -} - -QListWidgetItem* DatabaseSettingsWidgetRemote::findItemByName(const QString& name) -{ - return m_ui->settingsListWidget->findItems(name, Qt::MatchExactly).first(); -} - -void DatabaseSettingsWidgetRemote::removeCurrentSettings() -{ - m_remoteSettings->removeRemoteParams(m_ui->nameLineEdit->text()); - updateSettingsList(); - if (!m_remoteSettings->getAllRemoteParams().empty()) { - m_ui->settingsListWidget->setCurrentRow(0); - m_ui->removeSettingsButton->setEnabled(true); - } else { - clearFields(); - m_ui->removeSettingsButton->setDisabled(true); - } -} - -void DatabaseSettingsWidgetRemote::editCurrentSettings() -{ - if (!m_ui->settingsListWidget->currentItem()) { - return; - } - - QString name = m_ui->settingsListWidget->currentItem()->text(); - auto* params = m_remoteSettings->getRemoteParams(name); - if (!params) { - return; - } - - m_ui->nameLineEdit->setText(params->name); - m_ui->downloadCommand->setText(params->downloadCommand); - m_ui->inputForDownload->setPlainText(params->downloadInput); - m_ui->downloadTimeoutSec->setValue(params->downloadTimeoutMsec / 1000); - m_ui->uploadCommand->setText(params->uploadCommand); - m_ui->inputForUpload->setPlainText(params->uploadInput); - m_ui->uploadTimeoutSec->setValue(params->uploadTimeoutMsec / 1000); - m_modified = false; -} - -void DatabaseSettingsWidgetRemote::updateSettingsList() -{ - m_ui->settingsListWidget->clear(); - for (auto params : m_remoteSettings->getAllRemoteParams()) { - auto* item = new QListWidgetItem(m_ui->settingsListWidget); - item->setText(params->name); - m_ui->settingsListWidget->addItem(item); - } -} - -void DatabaseSettingsWidgetRemote::clearFields() -{ - m_ui->nameLineEdit->setText(""); - m_ui->downloadCommand->setText(""); - m_ui->inputForDownload->setPlainText(""); - m_ui->downloadTimeoutSec->setValue(10); - m_ui->uploadCommand->setText(""); - m_ui->inputForUpload->setPlainText(""); - m_ui->uploadTimeoutSec->setValue(10); - m_modified = false; -} - -void DatabaseSettingsWidgetRemote::testDownload() -{ - auto* params = new RemoteParams(); - params->name = m_ui->nameLineEdit->text(); - params->downloadCommand = m_ui->downloadCommand->text(); - params->downloadInput = m_ui->inputForDownload->toPlainText(); - params->downloadTimeoutMsec = m_ui->downloadTimeoutSec->value() * 1000; - - QScopedPointer remoteHandler(new RemoteHandler(this)); - if (params->downloadCommand.isEmpty()) { - m_ui->messageWidget->showMessage(tr("Download command cannot be empty."), MessageWidget::Warning); - return; - } - - RemoteHandler::RemoteResult result = remoteHandler->download(params); - if (!result.success) { - m_ui->messageWidget->showMessage(tr("Download failed with error: %1").arg(result.errorMessage), - MessageWidget::Error); - return; - } - - if (!QFile::exists(result.filePath)) { - m_ui->messageWidget->showMessage(tr("Download finished, but file %1 could not be found.").arg(result.filePath), - MessageWidget::Error); - return; - } - - m_ui->messageWidget->showMessage(tr("Download successful."), MessageWidget::Positive); -} diff --git a/src/gui/remote/DatabaseSettingsWidgetRemote.h b/src/gui/remote/DatabaseSettingsWidgetRemote.h deleted file mode 100644 index 6184e4bd9..000000000 --- a/src/gui/remote/DatabaseSettingsWidgetRemote.h +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright (C) 2023 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_DATABASESETTINGSWIDGETREMOTE_H -#define KEEPASSX_DATABASESETTINGSWIDGETREMOTE_H - -#include "gui/dbsettings/DatabaseSettingsWidget.h" - -#include -#include - -class Database; -class RemoteSettings; - -namespace Ui -{ - class DatabaseSettingsWidgetRemote; -} - -class DatabaseSettingsWidgetRemote : public DatabaseSettingsWidget -{ - Q_OBJECT - -public: - explicit DatabaseSettingsWidgetRemote(QWidget* parent = nullptr); - Q_DISABLE_COPY(DatabaseSettingsWidgetRemote); - ~DatabaseSettingsWidgetRemote() override; - -public slots: - void initialize() override; - void uninitialize() override; - bool saveSettings() override; - -private slots: - void saveCurrentSettings(); - void removeCurrentSettings(); - void editCurrentSettings(); - void testDownload(); - -private: - void updateSettingsList(); - QListWidgetItem* findItemByName(const QString& name); - void clearFields(); - - QScopedPointer m_remoteSettings; - const QScopedPointer m_ui; - bool m_modified = false; -}; - -#endif // KEEPASSX_DATABASESETTINGSWIDGETREMOTE_H diff --git a/src/gui/remote/DatabaseSettingsWidgetRemote.ui b/src/gui/remote/DatabaseSettingsWidgetRemote.ui deleted file mode 100644 index 1ab5d8b8f..000000000 --- a/src/gui/remote/DatabaseSettingsWidgetRemote.ui +++ /dev/null @@ -1,306 +0,0 @@ - - - DatabaseSettingsWidgetRemote - - - - 0 - 0 - 652 - 516 - - - - - 0 - 0 - - - - - 450 - 0 - - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - 0 - 0 - - - - - - - - Sync Commands - - - - - - - - - - - Qt::LeftToRight - - - Remove - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - - - - - - 0 - 0 - - - - Command Settings - - - - QLayout::SetMinimumSize - - - - - - - Name - - - - - - - - - - - - Save - - - - - - - - - 0 - - - - Download - - - - - - Input: - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop - - - - - - - Command: - - - - - - - Download input field - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - - - - - - - - - Download command field - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - - - - - - - Test - - - - - - - - - Timeout: - - - - - - - seconds - - - 1 - - - 300 - - - 10 - - - - - - - - Upload - - - - - - Upload input field - - - e.g.: -put {TEMP_DATABASE} DatabaseOnRemote.kdbx -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last command `exit` has to be sent - - - - - - - - Input: - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop - - - - - - - Upload command field - - - e.g.: "sftp user@hostname" or "scp {TEMP_DATABASE} user@hostname:DatabaseOnRemote.kdbx" - - - - - - - Command: - - - - - - - Timeout: - - - - - - - seconds - - - 1 - - - 300 - - - 10 - - - - - - - - - - - - - - - - - MessageWidget - QWidget -
    gui/MessageWidget.h
    - 1 -
    -
    - - -
    diff --git a/src/gui/remote/RemoteHandler.cpp b/src/gui/remote/RemoteHandler.cpp deleted file mode 100644 index c3bb857dd..000000000 --- a/src/gui/remote/RemoteHandler.cpp +++ /dev/null @@ -1,145 +0,0 @@ -/* - * Copyright (C) 2023 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 "RemoteHandler.h" - -#include "RemoteProcess.h" -#include "RemoteSettings.h" - -#include "core/AsyncTask.h" -#include "core/Database.h" - -namespace -{ - QString getTempFileLocation() - { - QString uuid = QUuid::createUuid().toString().remove(0, 1); - uuid.chop(1); - return QDir::toNativeSeparators(QDir::temp().absoluteFilePath("RemoteDatabase-" + uuid + ".kdbx")); - } -} // namespace - -std::function(QObject*)> RemoteHandler::m_createRemoteProcess([](QObject* parent) { - return QScopedPointer(new RemoteProcess(parent)); -}); - -RemoteHandler::RemoteHandler(QObject* parent) - : QObject(parent) -{ -} - -void RemoteHandler::setRemoteProcessFunc(std::function(QObject*)> func) -{ - m_createRemoteProcess = std::move(func); -} - -RemoteHandler::RemoteResult RemoteHandler::download(const RemoteParams* params) -{ - return AsyncTask::runAndWaitForFuture([params] { - RemoteResult result; - if (!params) { - result.success = false; - result.errorMessage = tr("Invalid download parameters provided."); - return result; - } - - auto filePath = getTempFileLocation(); - auto remoteProcess = m_createRemoteProcess(nullptr); // use nullptr parent, otherwise there is a warning - remoteProcess->setTempFileLocation(filePath); - remoteProcess->start(params->downloadCommand); - if (!params->downloadInput.isEmpty()) { - remoteProcess->write(params->downloadInput + "\n"); - remoteProcess->waitForBytesWritten(); - remoteProcess->closeWriteChannel(); - } - - bool finished = remoteProcess->waitForFinished(params->downloadTimeoutMsec); - int statusCode = remoteProcess->exitCode(); - - // TODO: For future use - result.stdOutput = remoteProcess->readOutput(); - result.stdError = remoteProcess->readError(); - - if (finished && statusCode == 0) { - // Check if the file actually downloaded - QFileInfo fileInfo(filePath); - if (!fileInfo.exists() || fileInfo.size() == 0) { - result.success = false; - result.errorMessage = tr("Command `%1` failed to download database.").arg(params->downloadCommand); - } else { - result.success = true; - result.filePath = filePath; - } - } else if (finished) { - result.success = false; - result.errorMessage = - tr("Command `%1` exited with status code: %2").arg(params->downloadCommand).arg(statusCode); - } else { - remoteProcess->kill(); - result.success = false; - result.errorMessage = - tr("Command `%1` did not finish in time. Process was killed.").arg(params->downloadCommand); - } - - return result; - }); -} - -RemoteHandler::RemoteResult RemoteHandler::upload(const QString& filePath, const RemoteParams* params) -{ - return AsyncTask::runAndWaitForFuture([filePath, params] { - RemoteResult result; - if (!params) { - result.success = false; - result.errorMessage = tr("Invalid database pointer or upload parameters provided."); - return result; - } - - auto remoteProcess = m_createRemoteProcess(nullptr); // use nullptr parent, otherwise there is a warning - remoteProcess->setTempFileLocation(filePath); - remoteProcess->start(params->uploadCommand); - if (!params->uploadInput.isEmpty()) { - remoteProcess->write(params->uploadInput + "\n"); - remoteProcess->waitForBytesWritten(); - remoteProcess->closeWriteChannel(); - } - - bool finished = remoteProcess->waitForFinished(params->uploadTimeoutMsec); - int statusCode = remoteProcess->exitCode(); - - // TODO: For future use - result.stdOutput = remoteProcess->readOutput(); - result.stdError = remoteProcess->readError(); - - if (finished && statusCode == 0) { - result.success = true; - } else if (finished) { - result.success = false; - result.errorMessage = tr("Failed to upload merged database. Command `%1` exited with status code: %2") - .arg(params->uploadCommand) - .arg(statusCode); - } else { - remoteProcess->kill(); - result.success = false; - result.errorMessage = - tr("Failed to upload merged database. Command `%1` did not finish in time. Process was killed.") - .arg(params->uploadCommand); - } - - return result; - }); -} diff --git a/src/gui/remote/RemoteHandler.h b/src/gui/remote/RemoteHandler.h deleted file mode 100644 index a46ee8c19..000000000 --- a/src/gui/remote/RemoteHandler.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright (C) 2023 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_REMOTEHANDLER_H -#define KEEPASSXC_REMOTEHANDLER_H - -#include - -class Database; -class RemoteProcess; -struct RemoteParams; - -class RemoteHandler : public QObject -{ - Q_OBJECT - -public: - explicit RemoteHandler(QObject* parent = nullptr); - ~RemoteHandler() override = default; - - struct RemoteResult - { - bool success; - QString errorMessage; - QString filePath; - QString stdOutput; - QString stdError; - }; - - RemoteResult download(const RemoteParams* params); - RemoteResult upload(const QString& filePath, const RemoteParams* params); - - // Used for testing only - static void setRemoteProcessFunc(std::function(QObject*)> func); - -private: - static std::function(QObject*)> m_createRemoteProcess; - static QString m_tempFileLocation; - - Q_DISABLE_COPY(RemoteHandler) -}; - -#endif // KEEPASSXC_REMOTEHANDLER_H diff --git a/src/gui/remote/RemoteProcess.cpp b/src/gui/remote/RemoteProcess.cpp deleted file mode 100644 index 6b2f60717..000000000 --- a/src/gui/remote/RemoteProcess.cpp +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Copyright (C) 2023 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 "RemoteProcess.h" - -#include -#include - -RemoteProcess::RemoteProcess(QObject* parent) - : m_process(new QProcess(parent)) -{ -} - -RemoteProcess::~RemoteProcess() -{ -} - -void RemoteProcess::setTempFileLocation(const QString& tempFile) -{ - m_tempFileLocation = tempFile; -} - -void RemoteProcess::start(const QString& command) -{ - const QString commandResolved = resolveTemplateVariables(command); -#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0) - QStringList cmdList = QProcess::splitCommand(commandResolved); - if (!cmdList.isEmpty()) { - const QString program = cmdList.takeFirst(); - m_process->start(program, cmdList); - } -#else - m_process->start(resolveTemplateVariables(commandResolved)); -#endif - - m_process->waitForStarted(); -} - -qint64 RemoteProcess::write(const QString& input) -{ - auto resolved = resolveTemplateVariables(input); - return m_process->write(resolved.toUtf8()); -} - -bool RemoteProcess::waitForBytesWritten() -{ - return m_process->waitForBytesWritten(); -} - -void RemoteProcess::closeWriteChannel() -{ - m_process->closeWriteChannel(); -} - -bool RemoteProcess::waitForFinished(int msecs) -{ - return m_process->waitForFinished(msecs); -} - -int RemoteProcess::exitCode() const -{ - return m_process->exitCode(); -} - -QString RemoteProcess::readOutput() -{ - return m_process->readAllStandardOutput(); -} - -QString RemoteProcess::readError() -{ - return m_process->readAllStandardError(); -} - -void RemoteProcess::kill() const -{ - m_process->kill(); -} - -QString RemoteProcess::resolveTemplateVariables(const QString& input) const -{ - QString resolved = input; - return resolved.replace("{TEMP_DATABASE}", m_tempFileLocation); -} diff --git a/src/gui/remote/RemoteProcess.h b/src/gui/remote/RemoteProcess.h deleted file mode 100644 index fb43d0430..000000000 --- a/src/gui/remote/RemoteProcess.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright (C) 2023 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_REMOTEPROCESS_H -#define KEEPASSXC_REMOTEPROCESS_H - -#include - -class RemoteProcess -{ -public: - explicit RemoteProcess(QObject* parent); - virtual ~RemoteProcess(); - - virtual void setTempFileLocation(const QString& tempFile); - - virtual void start(const QString& command); - virtual qint64 write(const QString& input); - virtual bool waitForBytesWritten(); - virtual void closeWriteChannel(); - virtual bool waitForFinished(int msecs); - virtual QString readOutput(); - virtual QString readError(); - virtual int exitCode() const; - void kill() const; - -protected: - QString m_tempFileLocation; - -private: - QString resolveTemplateVariables(const QString& input) const; - - QScopedPointer m_process; -}; - -#endif // KEEPASSXC_REMOTEPROCESS_H diff --git a/src/gui/remote/RemoteSettings.cpp b/src/gui/remote/RemoteSettings.cpp deleted file mode 100644 index f5af3b1e1..000000000 --- a/src/gui/remote/RemoteSettings.cpp +++ /dev/null @@ -1,120 +0,0 @@ -/* - * Copyright (C) 2023 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 "RemoteSettings.h" - -#include "core/Database.h" -#include "core/Metadata.h" - -#include -#include -#include -#include - -RemoteSettings::RemoteSettings(const QSharedPointer& db, QObject* parent) - : QObject(parent) -{ - setDatabase(db); -} - -RemoteSettings::~RemoteSettings() = default; - -void RemoteSettings::setDatabase(const QSharedPointer& db) -{ - m_remoteParams.clear(); - m_db = db; - loadSettings(); -} - -void RemoteSettings::addRemoteParams(RemoteParams* params) -{ - if (params->name.isEmpty()) { - qWarning() << "RemoteSettings::addRemoteParams: Remote parameters name is empty"; - return; - } - m_remoteParams.insert(params->name, params); -} - -void RemoteSettings::removeRemoteParams(const QString& name) -{ - m_remoteParams.remove(name); -} - -RemoteParams* RemoteSettings::getRemoteParams(const QString& name) const -{ - if (m_remoteParams.contains(name)) { - return m_remoteParams.value(name); - } - return nullptr; -} - -QList RemoteSettings::getAllRemoteParams() const -{ - return m_remoteParams.values(); -} - -void RemoteSettings::loadSettings() -{ - if (m_db) { - fromConfig(m_db->metadata()->customData()->value(CustomData::RemoteProgramSettings)); - } -} - -void RemoteSettings::saveSettings() const -{ - if (m_db) { - m_db->metadata()->customData()->set(CustomData::RemoteProgramSettings, toConfig()); - } -} - -QString RemoteSettings::toConfig() const -{ - QJsonArray config; - for (const auto params : m_remoteParams.values()) { - QJsonObject object; - object["name"] = params->name; - object["downloadCommand"] = params->downloadCommand; - object["downloadCommandInput"] = params->downloadInput; - object["downloadTimeoutMsec"] = params->downloadTimeoutMsec; - object["uploadCommand"] = params->uploadCommand; - object["uploadCommandInput"] = params->uploadInput; - object["uploadTimeoutMsec"] = params->uploadTimeoutMsec; - config << object; - } - QJsonDocument doc(config); - return doc.toJson(QJsonDocument::Compact); -} - -void RemoteSettings::fromConfig(const QString& data) -{ - m_remoteParams.clear(); - - QJsonDocument json = QJsonDocument::fromJson(data.toUtf8()); - for (const auto& item : json.array().toVariantList()) { - auto itemMap = item.toMap(); - auto* params = new RemoteParams(); - params->name = itemMap["name"].toString(); - params->downloadCommand = itemMap["downloadCommand"].toString(); - params->downloadInput = itemMap["downloadCommandInput"].toString(); - params->downloadTimeoutMsec = itemMap.value("downloadTimeoutMsec", 10000).toInt(); - params->uploadCommand = itemMap["uploadCommand"].toString(); - params->uploadInput = itemMap["uploadCommandInput"].toString(); - params->uploadTimeoutMsec = itemMap.value("uploadTimeoutMsec", 10000).toInt(); - - m_remoteParams.insert(params->name, params); - } -} diff --git a/src/gui/remote/RemoteSettings.h b/src/gui/remote/RemoteSettings.h deleted file mode 100644 index 4b414494c..000000000 --- a/src/gui/remote/RemoteSettings.h +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright (C) 2024 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_REMOTESETTINGS_H -#define KEEPASSXC_REMOTESETTINGS_H - -#include -#include - -class Database; - -struct RemoteParams -{ - QString name; - QString downloadCommand; - QString downloadInput; - int downloadTimeoutMsec; - QString uploadCommand; - QString uploadInput; - int uploadTimeoutMsec; -}; -Q_DECLARE_METATYPE(RemoteParams) - -class RemoteSettings : public QObject -{ - Q_OBJECT -public: - explicit RemoteSettings(const QSharedPointer& db, QObject* parent = nullptr); - ~RemoteSettings() override; - - void setDatabase(const QSharedPointer& db); - - void addRemoteParams(RemoteParams* params); - void removeRemoteParams(const QString& name); - RemoteParams* getRemoteParams(const QString& name) const; - QList getAllRemoteParams() const; - - void loadSettings(); - void saveSettings() const; - -private: - void fromConfig(const QString& data); - QString toConfig() const; - - QHash m_remoteParams; - QSharedPointer m_db; -}; - -#endif // KEEPASSXC_REMOTESETTINGS_H diff --git a/src/gui/reports/ReportsDialog.cpp b/src/gui/reports/ReportsDialog.cpp index 1d32c2322..e1da39839 100644 --- a/src/gui/reports/ReportsDialog.cpp +++ b/src/gui/reports/ReportsDialog.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2023 KeePassXC Team + * Copyright (C) 2021 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 @@ -25,15 +25,14 @@ #include "ReportsPageBrowserStatistics.h" #include "ReportsWidgetBrowserStatistics.h" #endif -#ifdef WITH_XC_BROWSER_PASSKEYS -#include "ReportsPagePasskeys.h" -#include "ReportsWidgetPasskeys.h" -#endif #include "ReportsWidgetHealthcheck.h" #include "ReportsWidgetHibp.h" #include "core/Global.h" #include "core/Group.h" +#ifdef Q_OS_MACOS +#include "touchid/TouchID.h" +#endif class ReportsDialog::ExtraPage { @@ -65,9 +64,6 @@ ReportsDialog::ReportsDialog(QWidget* parent) , m_statPage(new ReportsPageStatistics()) #ifdef WITH_XC_BROWSER , m_browserStatPage(new ReportsPageBrowserStatistics()) -#endif -#ifdef WITH_XC_BROWSER_PASSKEYS - , m_passkeysPage(new ReportsPagePasskeys()) #endif , m_editEntryWidget(new EditEntryWidget(this)) { @@ -75,13 +71,10 @@ ReportsDialog::ReportsDialog(QWidget* parent) connect(m_ui->buttonBox, SIGNAL(rejected()), SLOT(reject())); addPage(m_statPage); - addPage(m_healthPage); -#ifdef WITH_XC_BROWSER_PASSKEYS - addPage(m_passkeysPage); -#endif #ifdef WITH_XC_BROWSER addPage(m_browserStatPage); #endif + addPage(m_healthPage); addPage(m_hibpPage); m_ui->stackedWidget->setCurrentIndex(0); @@ -98,15 +91,13 @@ ReportsDialog::ReportsDialog(QWidget* parent) connect(m_browserStatPage->m_browserWidget, SIGNAL(entryActivated(Entry*)), SLOT(entryActivationSignalReceived(Entry*))); -#endif -#ifdef WITH_XC_BROWSER_PASSKEYS - connect( - m_passkeysPage->m_passkeysWidget, SIGNAL(entryActivated(Entry*)), SLOT(entryActivationSignalReceived(Entry*))); #endif connect(m_editEntryWidget, SIGNAL(editFinished(bool)), SLOT(switchToMainView(bool))); } -ReportsDialog::~ReportsDialog() = default; +ReportsDialog::~ReportsDialog() +{ +} void ReportsDialog::load(const QSharedPointer& db) { @@ -128,24 +119,6 @@ void ReportsDialog::addPage(QSharedPointer page) m_ui->categoryList->setCurrentCategory(category); } -void ReportsDialog::activatePasskeysPage() -{ -#ifdef WITH_XC_BROWSER_PASSKEYS - m_ui->stackedWidget->setCurrentWidget(m_passkeysPage->m_passkeysWidget); - auto index = m_ui->stackedWidget->currentIndex(); - m_ui->categoryList->setCurrentCategory(index); -#endif -} - -bool ReportsDialog::onPassKeysPage() -{ -#ifdef WITH_XC_BROWSER_PASSKEYS - return m_ui->stackedWidget->currentWidget() == m_passkeysPage->m_passkeysWidget; -#else - return false; -#endif -} - void ReportsDialog::reject() { emit editFinished(true); @@ -153,7 +126,7 @@ void ReportsDialog::reject() void ReportsDialog::entryActivationSignalReceived(Entry* entry) { - m_sender = qobject_cast(sender()); + m_sender = static_cast(sender()); m_editEntryWidget->loadEntry(entry, false, false, entry->group()->hierarchy().join(" > "), m_db); m_ui->stackedWidget->setCurrentWidget(m_editEntryWidget); } @@ -180,11 +153,6 @@ void ReportsDialog::switchToMainView(bool previousDialogAccepted) if (m_sender == m_browserStatPage->m_browserWidget) { m_browserStatPage->m_browserWidget->calculateBrowserStatistics(); } -#endif -#ifdef WITH_XC_BROWSER_PASSKEYS - if (m_sender == m_passkeysPage->m_passkeysWidget) { - m_passkeysPage->m_passkeysWidget->updateEntries(); - } #endif } diff --git a/src/gui/reports/ReportsDialog.h b/src/gui/reports/ReportsDialog.h index abeaab481..25cb623eb 100644 --- a/src/gui/reports/ReportsDialog.h +++ b/src/gui/reports/ReportsDialog.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2023 KeePassXC Team + * Copyright (C) 2021 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 @@ -32,9 +32,6 @@ class ReportsPageStatistics; #ifdef WITH_XC_BROWSER class ReportsPageBrowserStatistics; #endif -#ifdef WITH_XC_BROWSER_PASSKEYS -class ReportsPagePasskeys; -#endif namespace Ui { @@ -44,7 +41,9 @@ namespace Ui class IReportsPage { public: - virtual ~IReportsPage() = default; + virtual ~IReportsPage() + { + } virtual QString name() = 0; virtual QIcon icon() = 0; virtual QWidget* createWidget() = 0; @@ -63,8 +62,6 @@ public: void load(const QSharedPointer& db); void addPage(QSharedPointer page); - void activatePasskeysPage(); - bool onPassKeysPage(); signals: void editFinished(bool accepted); @@ -82,9 +79,6 @@ private: const QSharedPointer m_statPage; #ifdef WITH_XC_BROWSER const QSharedPointer m_browserStatPage; -#endif -#ifdef WITH_XC_BROWSER_PASSKEYS - const QSharedPointer m_passkeysPage; #endif QPointer m_editEntryWidget; QWidget* m_sender = nullptr; diff --git a/src/gui/reports/ReportsPagePasskeys.cpp b/src/gui/reports/ReportsPagePasskeys.cpp deleted file mode 100644 index 01af72266..000000000 --- a/src/gui/reports/ReportsPagePasskeys.cpp +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright (C) 2023 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 "ReportsPagePasskeys.h" -#include "ReportsWidgetPasskeys.h" -#include "gui/Icons.h" - -ReportsPagePasskeys::ReportsPagePasskeys() - : m_passkeysWidget(new ReportsWidgetPasskeys()) -{ -} - -QString ReportsPagePasskeys::name() -{ - return QObject::tr("Passkeys"); -} - -QIcon ReportsPagePasskeys::icon() -{ - return icons()->icon("passkey"); -} - -QWidget* ReportsPagePasskeys::createWidget() -{ - return m_passkeysWidget; -} - -void ReportsPagePasskeys::loadSettings(QWidget* widget, QSharedPointer db) -{ - const auto settingsWidget = reinterpret_cast(widget); - settingsWidget->loadSettings(db); -} - -void ReportsPagePasskeys::saveSettings(QWidget* widget) -{ - const auto settingsWidget = reinterpret_cast(widget); - settingsWidget->saveSettings(); -} diff --git a/src/gui/reports/ReportsPageStatistics.cpp b/src/gui/reports/ReportsPageStatistics.cpp index 57497d19c..f7fb2f170 100644 --- a/src/gui/reports/ReportsPageStatistics.cpp +++ b/src/gui/reports/ReportsPageStatistics.cpp @@ -37,12 +37,12 @@ QWidget* ReportsPageStatistics::createWidget() void ReportsPageStatistics::loadSettings(QWidget* widget, QSharedPointer db) { - auto settingsWidget = reinterpret_cast(widget); + ReportsWidgetStatistics* settingsWidget = reinterpret_cast(widget); settingsWidget->loadSettings(db); } void ReportsPageStatistics::saveSettings(QWidget* widget) { - auto settingsWidget = reinterpret_cast(widget); + ReportsWidgetStatistics* settingsWidget = reinterpret_cast(widget); settingsWidget->saveSettings(); } diff --git a/src/gui/reports/ReportsWidget.cpp b/src/gui/reports/ReportsWidget.cpp index c822f4782..184434116 100644 --- a/src/gui/reports/ReportsWidget.cpp +++ b/src/gui/reports/ReportsWidget.cpp @@ -22,7 +22,9 @@ ReportsWidget::ReportsWidget(QWidget* parent) { } -ReportsWidget::~ReportsWidget() = default; +ReportsWidget::~ReportsWidget() +{ +} /** * Load the database to be configured by this page and initialize the page. diff --git a/src/gui/reports/ReportsWidget.h b/src/gui/reports/ReportsWidget.h index c80c5eb65..59609acf9 100644 --- a/src/gui/reports/ReportsWidget.h +++ b/src/gui/reports/ReportsWidget.h @@ -18,7 +18,7 @@ #ifndef KEEPASSXC_REPORTSWIDGET_H #define KEEPASSXC_REPORTSWIDGET_H -#include "gui/SettingsWidget.h" +#include "gui/settings/SettingsWidget.h" class Database; diff --git a/src/gui/reports/ReportsWidgetBrowserStatistics.cpp b/src/gui/reports/ReportsWidgetBrowserStatistics.cpp index 63267d77f..1a3ad5d7e 100644 --- a/src/gui/reports/ReportsWidgetBrowserStatistics.cpp +++ b/src/gui/reports/ReportsWidgetBrowserStatistics.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2024 KeePassXC Team + * Copyright (C) 2021 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 @@ -27,6 +27,7 @@ #include "gui/styles/StateColorPalette.h" #include +#include #include #include #include @@ -111,8 +112,8 @@ ReportsWidgetBrowserStatistics::ReportsWidgetBrowserStatistics(QWidget* parent) connect( m_ui->browserStatisticsTableView, SIGNAL(doubleClicked(QModelIndex)), SLOT(emitEntryActivated(QModelIndex))); connect(m_ui->showEntriesWithUrlOnlyCheckBox, SIGNAL(stateChanged(int)), this, SLOT(calculateBrowserStatistics())); - connect(m_ui->showAllowDenyCheckBox, SIGNAL(stateChanged(int)), this, SLOT(calculateBrowserStatistics())); - connect(m_ui->showExpired, SIGNAL(stateChanged(int)), this, SLOT(calculateBrowserStatistics())); + connect(m_ui->showConnectedOnlyCheckBox, SIGNAL(stateChanged(int)), this, SLOT(calculateBrowserStatistics())); + connect(m_ui->excludeExpired, SIGNAL(stateChanged(int)), this, SLOT(calculateBrowserStatistics())); new QShortcut(Qt::Key_Delete, this, SLOT(deleteSelectedEntries())); } @@ -143,9 +144,6 @@ void ReportsWidgetBrowserStatistics::addStatisticsRow(bool hasUrls, if (excluded) { title.append(tr(" (Excluded)")); } - if (entry->isExpired()) { - title.append(tr(" (Expired)")); - } auto row = QList(); row << new QStandardItem(Icons::entryIconPixmap(entry), title); @@ -198,15 +196,16 @@ void ReportsWidgetBrowserStatistics::calculateBrowserStatistics() const QScopedPointer browserStatistics( AsyncTask::runAndWaitForFuture([this] { return new BrowserStatistics(m_db); })); - const auto showExpired = m_ui->showExpired->isChecked(); + const auto showExcluded = m_ui->showConnectedOnlyCheckBox->isChecked(); const auto showEntriesWithUrlOnly = m_ui->showEntriesWithUrlOnlyCheckBox->isChecked(); - const auto showOnlyEntriesWithSettings = m_ui->showAllowDenyCheckBox->isChecked(); + const auto showOnlyEntriesWithSettings = m_ui->showConnectedOnlyCheckBox->isChecked(); // Display the entries m_rowToEntry.clear(); for (const auto& item : browserStatistics->items()) { - // Check if the entry should be displayed - if (!showExpired && item->entry->isExpired()) { + auto excluded = item->exclude || (item->entry->isExpired() && m_ui->excludeExpired->isChecked()); + if (excluded && !showExcluded) { + // Exclude this entry from the report continue; } @@ -275,25 +274,10 @@ void ReportsWidgetBrowserStatistics::customMenuRequested(QPoint pos) }); } - // Create the "expire entry" menu item - const auto expEntry = new QAction(icons()->icon("entry-expire"), tr("Expire Entry(s)…", "", selected.size()), this); - menu->addAction(expEntry); - connect(expEntry, &QAction::triggered, this, &ReportsWidgetBrowserStatistics::expireSelectedEntries); - // Create the "delete entry" menu item - const auto deleteEntry = - new QAction(icons()->icon("entry-delete"), tr("Delete Entry(s)…", "", selected.size()), this); - menu->addAction(deleteEntry); - connect(deleteEntry, &QAction::triggered, this, &ReportsWidgetBrowserStatistics::deleteSelectedEntries); - - // Create the "delete plugin data" menu item - const auto deletePluginData = - new QAction(icons()->icon("entry-delete"), tr("Delete plugin data from Entry(s)…", "", selected.size()), this); - menu->addAction(deletePluginData); - connect(deletePluginData, - &QAction::triggered, - this, - &ReportsWidgetBrowserStatistics::deletePluginDataFromSelectedEntries); + const auto delEntry = new QAction(icons()->icon("entry-delete"), tr("Delete Entry(s)…", "", selected.size()), this); + menu->addAction(delEntry); + connect(delEntry, &QAction::triggered, this, &ReportsWidgetBrowserStatistics::deleteSelectedEntries); // Create the "exclude from reports" menu item const auto exclude = new QAction(icons()->icon("reports-exclude"), tr("Exclude from reports"), this); @@ -332,7 +316,7 @@ void ReportsWidgetBrowserStatistics::saveSettings() // Nothing to do - the tab is passive } -QList ReportsWidgetBrowserStatistics::getSelectedEntries() +void ReportsWidgetBrowserStatistics::deleteSelectedEntries() { QList selectedEntries; for (auto index : m_ui->browserStatisticsTableView->selectionModel()->selectedRows()) { @@ -342,23 +326,8 @@ QList ReportsWidgetBrowserStatistics::getSelectedEntries() selectedEntries << entry; } } - return selectedEntries; -} -void ReportsWidgetBrowserStatistics::expireSelectedEntries() -{ - for (auto entry : getSelectedEntries()) { - entry->expireNow(); - } - - calculateBrowserStatistics(); -} - -void ReportsWidgetBrowserStatistics::deleteSelectedEntries() -{ - const auto& selectedEntries = getSelectedEntries(); bool permanent = !m_db->metadata()->recycleBinEnabled(); - if (GuiTools::confirmDeleteEntries(this, selectedEntries, permanent)) { GuiTools::deleteEntriesResolveReferences(this, selectedEntries, permanent); } @@ -366,18 +335,6 @@ void ReportsWidgetBrowserStatistics::deleteSelectedEntries() calculateBrowserStatistics(); } -void ReportsWidgetBrowserStatistics::deletePluginDataFromSelectedEntries() -{ - const auto& selectedEntries = getSelectedEntries(); - if (GuiTools::confirmDeletePluginData(this, selectedEntries)) { - for (auto& entry : selectedEntries) { - browserService()->removePluginData(entry); - } - } - - calculateBrowserStatistics(); -} - QMap ReportsWidgetBrowserStatistics::getBrowserConfigFromEntry(Entry* entry) const { QMap configList; @@ -413,17 +370,3 @@ QMap ReportsWidgetBrowserStatistics::getBrowserConfigFromE return configList; } - -QList ReportsWidgetBrowserStatistics::getSelectedEntries() const -{ - QList selectedEntries; - for (auto index : m_ui->browserStatisticsTableView->selectionModel()->selectedRows()) { - auto row = m_modelProxy->mapToSource(index).row(); - auto entry = m_rowToEntry[row].second; - if (entry) { - selectedEntries << entry; - } - } - - return selectedEntries; -} diff --git a/src/gui/reports/ReportsWidgetBrowserStatistics.h b/src/gui/reports/ReportsWidgetBrowserStatistics.h index 9b1cc7d60..8aa6651ee 100644 --- a/src/gui/reports/ReportsWidgetBrowserStatistics.h +++ b/src/gui/reports/ReportsWidgetBrowserStatistics.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2024 KeePassXC Team + * Copyright (C) 2021 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 @@ -53,14 +53,10 @@ public slots: void calculateBrowserStatistics(); void emitEntryActivated(const QModelIndex& index); void customMenuRequested(QPoint); - QList getSelectedEntries(); - void expireSelectedEntries(); void deleteSelectedEntries(); - void deletePluginDataFromSelectedEntries(); private: void addStatisticsRow(bool hasUrls, bool hasSettings, Group*, Entry*, bool); - QList getSelectedEntries() const; QMap getBrowserConfigFromEntry(Entry* entry) const; QScopedPointer m_ui; diff --git a/src/gui/reports/ReportsWidgetBrowserStatistics.ui b/src/gui/reports/ReportsWidgetBrowserStatistics.ui index 9f631bef6..4236da6e1 100644 --- a/src/gui/reports/ReportsWidgetBrowserStatistics.ui +++ b/src/gui/reports/ReportsWidgetBrowserStatistics.ui @@ -10,7 +10,7 @@ 379
    - + 0 @@ -54,27 +54,24 @@
    + + + + Exclude expired entries from the report + + + - Only show entries that have a URL - - - true + Show only entries which have URL set - + - Only show entries that have been explicitly allowed or denied - - - - - - - Show expired entries + Show only entries which have browser settings in custom data @@ -94,8 +91,9 @@ browserStatisticsTableView + excludeExpired showEntriesWithUrlOnlyCheckBox - showAllowDenyCheckBox + showConnectedOnlyCheckBox diff --git a/src/gui/reports/ReportsWidgetHealthcheck.cpp b/src/gui/reports/ReportsWidgetHealthcheck.cpp index 1c34c2f36..d23829031 100644 --- a/src/gui/reports/ReportsWidgetHealthcheck.cpp +++ b/src/gui/reports/ReportsWidgetHealthcheck.cpp @@ -64,16 +64,16 @@ namespace return m_items; } - bool anyExcludedEntries() const + bool anyKnownBad() const { - return m_anyExcludedEntries; + return m_anyKnownBad; } private: QSharedPointer m_db; HealthChecker m_checker; QList> m_items; - bool m_anyExcludedEntries = false; + bool m_anyKnownBad = false; }; class ReportSortProxyModel : public QSortFilterProxyModel @@ -121,7 +121,7 @@ Health::Health(QSharedPointer db) // Evaluate this entry const auto item = QSharedPointer(new Item(group, entry, m_checker.evaluate(entry))); if (item->exclude) { - m_anyExcludedEntries = true; + m_anyKnownBad = true; } // Add entry if its password isn't at least "good" @@ -152,59 +152,57 @@ ReportsWidgetHealthcheck::ReportsWidgetHealthcheck(QWidget* parent) connect(m_ui->healthcheckTableView, SIGNAL(customContextMenuRequested(QPoint)), SLOT(customMenuRequested(QPoint))); connect(m_ui->healthcheckTableView, SIGNAL(doubleClicked(QModelIndex)), SLOT(emitEntryActivated(QModelIndex))); - connect(m_ui->showExcluded, SIGNAL(stateChanged(int)), this, SLOT(calculateHealth())); - connect(m_ui->showExpired, SIGNAL(stateChanged(int)), this, SLOT(calculateHealth())); + connect(m_ui->showKnownBadCheckBox, SIGNAL(stateChanged(int)), this, SLOT(calculateHealth())); + connect(m_ui->excludeExpired, SIGNAL(stateChanged(int)), this, SLOT(calculateHealth())); new QShortcut(Qt::Key_Delete, this, SLOT(deleteSelectedEntries())); } -ReportsWidgetHealthcheck::~ReportsWidgetHealthcheck() = default; +ReportsWidgetHealthcheck::~ReportsWidgetHealthcheck() +{ +} void ReportsWidgetHealthcheck::addHealthRow(QSharedPointer health, Group* group, Entry* entry, - bool excluded) + bool knownBad) { - QString tip; - QString iconName = "lock-question"; + QString descr, tip; QColor qualityColor; StateColorPalette statePalette; const auto quality = health->quality(); switch (quality) { case PasswordHealth::Quality::Bad: + descr = tr("Bad", "Password quality"); tip = tr("Bad — password must be changed"); - iconName = "lock-open-alert"; qualityColor = statePalette.color(StateColorPalette::HealthCritical); break; + case PasswordHealth::Quality::Poor: + descr = tr("Poor", "Password quality"); tip = tr("Poor — password should be changed"); - iconName = "lock-open-alert"; qualityColor = statePalette.color(StateColorPalette::HealthBad); break; case PasswordHealth::Quality::Weak: + descr = tr("Weak", "Password quality"); tip = tr("Weak — consider changing the password"); - iconName = "lock-open"; qualityColor = statePalette.color(StateColorPalette::HealthWeak); break; case PasswordHealth::Quality::Good: case PasswordHealth::Quality::Excellent: - iconName = "lock"; qualityColor = statePalette.color(StateColorPalette::HealthOk); break; } auto title = entry->title(); - if (excluded) { + if (knownBad) { title.append(tr(" (Excluded)")); } - if (entry->isExpired()) { - title.append(tr(" (Expired)")); - } auto row = QList(); - row << new QStandardItem(Icons::instance()->icon(iconName, true, qualityColor), ""); + row << new QStandardItem(descr); row << new QStandardItem(Icons::entryIconPixmap(entry), title); row << new QStandardItem(Icons::groupIconPixmap(group), group->hierarchy().join("/")); row << new QStandardItem(QString::number(health->score())); @@ -215,10 +213,11 @@ void ReportsWidgetHealthcheck::addHealthRow(QSharedPointer healt // invisible, it's just for screen readers etc. QBrush brush(qualityColor); row[0]->setForeground(brush); + row[0]->setBackground(brush); // Set tooltips row[0]->setToolTip(tip); - if (excluded) { + if (knownBad) { row[1]->setToolTip(tr("This entry is being excluded from reports")); } row[4]->setToolTip(health->scoreDetails()); @@ -238,8 +237,6 @@ void ReportsWidgetHealthcheck::loadSettings(QSharedPointer db) auto row = QList(); row << new QStandardItem(tr("Please wait, health data is being calculated…")); m_referencesModel->appendRow(row); - // Default sort by first column (health score) - m_ui->healthcheckTableView->sortByColumn(0, Qt::AscendingOrder); } void ReportsWidgetHealthcheck::showEvent(QShowEvent* event) @@ -255,22 +252,20 @@ void ReportsWidgetHealthcheck::showEvent(QShowEvent* event) void ReportsWidgetHealthcheck::calculateHealth() { - // Save current sort order before clearing the model so we can restore it later - int sortColumn = m_ui->healthcheckTableView->horizontalHeader()->sortIndicatorSection(); - Qt::SortOrder sortOrder = m_ui->healthcheckTableView->horizontalHeader()->sortIndicatorOrder(); - - // Safe to clear m_referencesModel->clear(); // Perform the health check const QScopedPointer health(AsyncTask::runAndWaitForFuture([this] { return new Health(m_db); })); + // Display entries that are marked as "known bad"? + const auto showExcluded = m_ui->showKnownBadCheckBox->isChecked(); + // Display the entries m_rowToEntry.clear(); for (const auto& item : health->items()) { - // Check if the entry should be displayed - if ((!m_ui->showExcluded->isChecked() && item->exclude) - || (!m_ui->showExpired->isChecked() && item->entry->isExpired())) { + auto excluded = item->exclude || (item->entry->isExpired() && m_ui->excludeExpired->isChecked()); + if (excluded && !showExcluded) { + // Exclude this entry from the report continue; } @@ -284,16 +279,19 @@ void ReportsWidgetHealthcheck::calculateHealth() } else { m_referencesModel->setHorizontalHeaderLabels(QStringList() << tr("") << tr("Title") << tr("Path") << tr("Score") << tr("Reason")); + m_ui->healthcheckTableView->sortByColumn(0, Qt::AscendingOrder); } - // Restore sorting options that was stored before the model was cleared - m_ui->healthcheckTableView->sortByColumn(sortColumn, sortOrder); - m_ui->healthcheckTableView->resizeColumnsToContents(); m_ui->healthcheckTableView->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Fixed); - // Only show the "show excluded" checkbox if there are any excluded entries in the database - m_ui->showExcluded->setVisible(health->anyExcludedEntries()); + // Show the "show known bad entries" checkbox if there's any known + // bad entry in the database. + if (health->anyKnownBad()) { + m_ui->showKnownBadCheckBox->show(); + } else { + m_ui->showKnownBadCheckBox->hide(); + } } void ReportsWidgetHealthcheck::emitEntryActivated(const QModelIndex& index) @@ -332,11 +330,6 @@ void ReportsWidgetHealthcheck::customMenuRequested(QPoint pos) }); } - // Create the "Expire entry" menu item - const auto expEntry = new QAction(icons()->icon("entry-expire"), tr("Expire Entry(s)…", "", selected.size()), this); - menu->addAction(expEntry); - connect(expEntry, &QAction::triggered, this, &ReportsWidgetHealthcheck::expireSelectedEntries); - // Create the "delete entry" menu item const auto delEntry = new QAction(icons()->icon("entry-delete"), tr("Delete Entry(s)…", "", selected.size()), this); menu->addAction(delEntry); @@ -379,7 +372,7 @@ void ReportsWidgetHealthcheck::saveSettings() // nothing to do - the tab is passive } -QList ReportsWidgetHealthcheck::getSelectedEntries() +void ReportsWidgetHealthcheck::deleteSelectedEntries() { QList selectedEntries; for (auto index : m_ui->healthcheckTableView->selectionModel()->selectedRows()) { @@ -389,21 +382,7 @@ QList ReportsWidgetHealthcheck::getSelectedEntries() selectedEntries << entry; } } - return selectedEntries; -} -void ReportsWidgetHealthcheck::expireSelectedEntries() -{ - for (auto entry : getSelectedEntries()) { - entry->expireNow(); - } - - calculateHealth(); -} - -void ReportsWidgetHealthcheck::deleteSelectedEntries() -{ - QList selectedEntries = getSelectedEntries(); bool permanent = !m_db->metadata()->recycleBinEnabled(); if (GuiTools::confirmDeleteEntries(this, selectedEntries, permanent)) { GuiTools::deleteEntriesResolveReferences(this, selectedEntries, permanent); diff --git a/src/gui/reports/ReportsWidgetHealthcheck.h b/src/gui/reports/ReportsWidgetHealthcheck.h index 9a46b36b1..2046326a1 100644 --- a/src/gui/reports/ReportsWidgetHealthcheck.h +++ b/src/gui/reports/ReportsWidgetHealthcheck.h @@ -53,12 +53,10 @@ public slots: void calculateHealth(); void emitEntryActivated(const QModelIndex& index); void customMenuRequested(QPoint); - QList getSelectedEntries(); - void expireSelectedEntries(); void deleteSelectedEntries(); private: - void addHealthRow(QSharedPointer, Group*, Entry*, bool excluded); + void addHealthRow(QSharedPointer, Group*, Entry*, bool knownBad); QScopedPointer m_ui; diff --git a/src/gui/reports/ReportsWidgetHealthcheck.ui b/src/gui/reports/ReportsWidgetHealthcheck.ui index 5bc2aa118..e2ed44e1b 100644 --- a/src/gui/reports/ReportsWidgetHealthcheck.ui +++ b/src/gui/reports/ReportsWidgetHealthcheck.ui @@ -55,16 +55,16 @@ - + - Show expired entries + Exclude expired entries from the report - + - Show entries that have been excluded from reports + Also show entries that have been excluded from reports @@ -84,7 +84,7 @@ healthcheckTableView - showExcluded + showKnownBadCheckBox diff --git a/src/gui/reports/ReportsWidgetHibp.cpp b/src/gui/reports/ReportsWidgetHibp.cpp index a559208aa..86be3d92f 100644 --- a/src/gui/reports/ReportsWidgetHibp.cpp +++ b/src/gui/reports/ReportsWidgetHibp.cpp @@ -29,8 +29,6 @@ #include #include -#include - namespace { class ReportSortProxyModel : public QSortFilterProxyModel @@ -81,7 +79,9 @@ ReportsWidgetHibp::ReportsWidgetHibp(QWidget* parent) new QShortcut(Qt::Key_Delete, this, SLOT(deleteSelectedEntries())); } -ReportsWidgetHibp::~ReportsWidgetHibp() = default; +ReportsWidgetHibp::~ReportsWidgetHibp() +{ +} void ReportsWidgetHibp::loadSettings(QSharedPointer db) { @@ -133,8 +133,8 @@ void ReportsWidgetHibp::makeHibpTable() } } - // Sort descending by the number the password has been exposed - std::sort(items.begin(), items.end(), [](QPair& lhs, QPair& rhs) { + // Sort decending by the number the password has been exposed + qSort(items.begin(), items.end(), [](QPair& lhs, QPair& rhs) { return lhs.second > rhs.second; }); @@ -374,11 +374,6 @@ void ReportsWidgetHibp::customMenuRequested(QPoint pos) }); } - // Create the "Expire entry" menu item - const auto expEntry = new QAction(icons()->icon("entry-expire"), tr("Expire Entry(s)…", "", selected.size()), this); - menu->addAction(expEntry); - connect(expEntry, &QAction::triggered, this, &ReportsWidgetHibp::expireSelectedEntries); - // Create the "delete entry" menu item const auto delEntry = new QAction(icons()->icon("entry-delete"), tr("Delete Entry(s)…", "", selected.size()), this); menu->addAction(delEntry); @@ -416,7 +411,7 @@ void ReportsWidgetHibp::customMenuRequested(QPoint pos) menu->popup(m_ui->hibpTableView->viewport()->mapToGlobal(pos)); } -QList ReportsWidgetHibp::getSelectedEntries() +void ReportsWidgetHibp::deleteSelectedEntries() { QList selectedEntries; for (auto index : m_ui->hibpTableView->selectionModel()->selectedRows()) { @@ -426,21 +421,7 @@ QList ReportsWidgetHibp::getSelectedEntries() selectedEntries << entry; } } - return selectedEntries; -} -void ReportsWidgetHibp::expireSelectedEntries() -{ - for (auto entry : getSelectedEntries()) { - entry->expireNow(); - } - - makeHibpTable(); -} - -void ReportsWidgetHibp::deleteSelectedEntries() -{ - QList selectedEntries = getSelectedEntries(); bool permanent = !m_db->metadata()->recycleBinEnabled(); if (GuiTools::confirmDeleteEntries(this, selectedEntries, permanent)) { GuiTools::deleteEntriesResolveReferences(this, selectedEntries, permanent); diff --git a/src/gui/reports/ReportsWidgetHibp.h b/src/gui/reports/ReportsWidgetHibp.h index 8e0d5e47b..2955358ad 100644 --- a/src/gui/reports/ReportsWidgetHibp.h +++ b/src/gui/reports/ReportsWidgetHibp.h @@ -24,7 +24,7 @@ #include #ifdef WITH_XC_NETWORKING -#include "networking/HibpDownloader.h" +#include "core/HibpDownloader.h" #endif class Database; @@ -43,7 +43,7 @@ class ReportsWidgetHibp : public QWidget Q_OBJECT public: explicit ReportsWidgetHibp(QWidget* parent = nullptr); - ~ReportsWidgetHibp() override; + ~ReportsWidgetHibp(); void loadSettings(QSharedPointer db); void saveSettings(); @@ -58,8 +58,6 @@ public slots: void fetchFailed(const QString& error); void makeHibpTable(); void customMenuRequested(QPoint); - QList getSelectedEntries(); - void expireSelectedEntries(); void deleteSelectedEntries(); private: diff --git a/src/gui/reports/ReportsWidgetPasskeys.cpp b/src/gui/reports/ReportsWidgetPasskeys.cpp deleted file mode 100644 index 831f4c721..000000000 --- a/src/gui/reports/ReportsWidgetPasskeys.cpp +++ /dev/null @@ -1,307 +0,0 @@ -/* - * Copyright (C) 2024 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 "ReportsWidgetPasskeys.h" -#include "ui_ReportsWidgetPasskeys.h" - -#include "browser/BrowserPasskeys.h" -#include "browser/PasskeyUtils.h" -#include "core/AsyncTask.h" -#include "core/EntryAttributes.h" -#include "core/Group.h" -#include "core/Metadata.h" -#include "gui/GuiTools.h" -#include "gui/Icons.h" -#include "gui/MessageBox.h" -#include "gui/passkeys/PasskeyExporter.h" -#include "gui/passkeys/PasskeyImporter.h" -#include "gui/styles/StateColorPalette.h" - -#include -#include -#include -#include - -namespace -{ - class PasskeyList - { - public: - struct Item - { - QPointer group; - QPointer entry; - - Item(Group* g, Entry* e) - : group(g) - , entry(e) - { - } - }; - - explicit PasskeyList(const QSharedPointer&); - - const QList>& items() const - { - return m_items; - } - - private: - QSharedPointer m_db; - QList> m_items; - }; -} // namespace - -PasskeyList::PasskeyList(const QSharedPointer& db) - : m_db(db) -{ - for (auto group : db->rootGroup()->groupsRecursive(true)) { - // Skip recycle bin - if (group->isRecycled()) { - continue; - } - - for (auto entry : group->entries()) { - if (entry->isRecycled() || !entry->attributes()->hasKey(EntryAttributes::KPEX_PASSKEY_PRIVATE_KEY_PEM)) { - continue; - } - - const auto item = QSharedPointer(new Item(group, entry)); - m_items.append(item); - } - } -} - -ReportsWidgetPasskeys::ReportsWidgetPasskeys(QWidget* parent) - : QWidget(parent) - , m_ui(new Ui::ReportsWidgetPasskeys()) - , m_referencesModel(new QStandardItemModel(this)) - , m_modelProxy(new QSortFilterProxyModel(this)) -{ - m_ui->setupUi(this); - - m_modelProxy->setSourceModel(m_referencesModel.data()); - m_modelProxy->setSortLocaleAware(true); - m_ui->passkeysTableView->setModel(m_modelProxy.data()); - m_ui->passkeysTableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Interactive); - m_ui->passkeysTableView->verticalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents); - - connect(m_ui->passkeysTableView, SIGNAL(customContextMenuRequested(QPoint)), SLOT(customMenuRequested(QPoint))); - connect(m_ui->passkeysTableView, SIGNAL(doubleClicked(QModelIndex)), SLOT(emitEntryActivated(QModelIndex))); - connect(m_ui->passkeysTableView->selectionModel(), - SIGNAL(selectionChanged(QItemSelection, QItemSelection)), - this, - SLOT(selectionChanged())); - connect(m_ui->showExpired, SIGNAL(stateChanged(int)), this, SLOT(updateEntries())); - connect(m_ui->exportButton, SIGNAL(clicked(bool)), this, SLOT(exportPasskey())); - connect(m_ui->importButton, SIGNAL(clicked(bool)), this, SLOT(importPasskey())); - - m_ui->exportButton->setEnabled(false); - - new QShortcut(Qt::Key_Delete, this, SLOT(deleteSelectedEntries())); -} - -ReportsWidgetPasskeys::~ReportsWidgetPasskeys() -{ -} - -void ReportsWidgetPasskeys::addPasskeyRow(Group* group, Entry* entry) -{ - StateColorPalette statePalette; - - auto urlList = entry->getAllUrls(); - auto urlToolTip = tr("List of entry URLs"); - - auto title = entry->title(); - if (entry->isExpired()) { - title.append(tr(" (Expired)")); - } - - auto row = QList(); - row << new QStandardItem(Icons::entryIconPixmap(entry), title); - row << new QStandardItem(Icons::groupIconPixmap(group), group->hierarchy().join("/")); - row << new QStandardItem(passkeyUtils()->getUsernameFromEntry(entry)); - row << new QStandardItem(entry->attributes()->value(EntryAttributes::KPEX_PASSKEY_RELYING_PARTY)); - row << new QStandardItem(urlList.join('\n')); - - // Set tooltips - row[2]->setToolTip(urlToolTip); - - // Store entry pointer per table row (used in double click handler) - m_referencesModel->appendRow(row); - m_rowToEntry.append({group, entry}); -} - -void ReportsWidgetPasskeys::loadSettings(QSharedPointer db) -{ - m_db = std::move(db); - m_entriesUpdated = false; - m_referencesModel->clear(); - m_rowToEntry.clear(); - - auto row = QList(); - row << new QStandardItem(tr("Please wait, list of entries with passkeys is being updated…")); - m_referencesModel->appendRow(row); -} - -void ReportsWidgetPasskeys::showEvent(QShowEvent* event) -{ - QWidget::showEvent(event); - - if (!m_entriesUpdated) { - // Perform stats calculation on next event loop to allow widget to appear - m_entriesUpdated = true; - QTimer::singleShot(0, this, SLOT(updateEntries())); - } -} - -void ReportsWidgetPasskeys::updateEntries() -{ - m_referencesModel->clear(); - - // Perform the statistics check - const QScopedPointer browserStatistics( - AsyncTask::runAndWaitForFuture([this] { return new PasskeyList(m_db); })); - - // Display the entries - m_rowToEntry.clear(); - for (const auto& item : browserStatistics->items()) { - // Exclude expired entries from report if not requested - if (!m_ui->showExpired->isChecked() && item->entry->isExpired()) { - continue; - } - - addPasskeyRow(item->group, item->entry); - } - - // Set the table header - if (m_referencesModel->rowCount() == 0) { - m_referencesModel->setHorizontalHeaderLabels(QStringList() << tr("No entries with passkeys.")); - } else { - m_referencesModel->setHorizontalHeaderLabels(QStringList() << tr("Title") << tr("Path") << tr("Username") - << tr("Relying Party") << tr("URLs")); - m_ui->passkeysTableView->sortByColumn(0, Qt::AscendingOrder); - } - - m_ui->passkeysTableView->resizeColumnsToContents(); -} - -void ReportsWidgetPasskeys::emitEntryActivated(const QModelIndex& index) -{ - if (!index.isValid()) { - return; - } - - auto mappedIndex = m_modelProxy->mapToSource(index); - const auto row = m_rowToEntry[mappedIndex.row()]; - const auto group = row.first; - const auto entry = row.second; - - if (group && entry) { - emit entryActivated(entry); - } -} - -void ReportsWidgetPasskeys::customMenuRequested(QPoint pos) -{ - auto selected = m_ui->passkeysTableView->selectionModel()->selectedRows(); - if (selected.isEmpty()) { - return; - } - - // Create the context menu - const auto menu = new QMenu(this); - - // Create the "edit entry" menu item (only if 1 row is selected) - if (selected.size() == 1) { - const auto edit = new QAction(icons()->icon("entry-edit"), tr("Edit Entry…"), this); - menu->addAction(edit); - connect(edit, &QAction::triggered, edit, [this, selected] { - auto row = m_modelProxy->mapToSource(selected[0]).row(); - auto entry = m_rowToEntry[row].second; - emit entryActivated(entry); - }); - } - - // Create the "delete entry" menu item - const auto delEntry = new QAction(icons()->icon("entry-delete"), tr("Delete Entry(s)…", "", selected.size()), this); - menu->addAction(delEntry); - connect(delEntry, &QAction::triggered, this, &ReportsWidgetPasskeys::deleteSelectedEntries); - - // Show the context menu - menu->popup(m_ui->passkeysTableView->viewport()->mapToGlobal(pos)); -} - -void ReportsWidgetPasskeys::saveSettings() -{ - // Nothing to do - the tab is passive -} - -void ReportsWidgetPasskeys::deleteSelectedEntries() -{ - auto selectedEntries = getSelectedEntries(); - bool permanent = !m_db->metadata()->recycleBinEnabled(); - - if (GuiTools::confirmDeleteEntries(this, selectedEntries, permanent)) { - GuiTools::deleteEntriesResolveReferences(this, selectedEntries, permanent); - } - - updateEntries(); -} - -QList ReportsWidgetPasskeys::getSelectedEntries() -{ - QList selectedEntries; - for (auto index : m_ui->passkeysTableView->selectionModel()->selectedRows()) { - auto row = m_modelProxy->mapToSource(index).row(); - auto entry = m_rowToEntry[row].second; - if (entry) { - selectedEntries << entry; - } - } - - return selectedEntries; -} - -void ReportsWidgetPasskeys::selectionChanged() -{ - m_ui->exportButton->setEnabled(!m_ui->passkeysTableView->selectionModel()->selectedIndexes().isEmpty()); -} - -void ReportsWidgetPasskeys::importPasskey() -{ - PasskeyImporter passkeyImporter(this); - passkeyImporter.importPasskey(m_db); - - updateEntries(); -} - -void ReportsWidgetPasskeys::exportPasskey() -{ - auto answer = MessageBox::question(this, - tr("Export Confirmation"), - tr("The passkey file will be vulnerable to theft and unauthorized use, if left " - "unsecured. Are you sure you want to continue?"), - MessageBox::Yes | MessageBox::No, - MessageBox::No); - if (answer != MessageBox::Yes) { - return; - } - - PasskeyExporter passkeyExporter(this); - passkeyExporter.showExportDialog(getSelectedEntries()); -} diff --git a/src/gui/reports/ReportsWidgetPasskeys.h b/src/gui/reports/ReportsWidgetPasskeys.h deleted file mode 100644 index 3d0593350..000000000 --- a/src/gui/reports/ReportsWidgetPasskeys.h +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Copyright (C) 2023 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_REPORTSWIDGETPASSKEYS_H -#define KEEPASSXC_REPORTSWIDGETPASSKEYS_H - -#include "gui/entry/EntryModel.h" -#include - -class Database; -class Entry; -class Group; -class PasswordHealth; -class QSortFilterProxyModel; -class QStandardItemModel; - -namespace Ui -{ - class ReportsWidgetPasskeys; -} - -class ReportsWidgetPasskeys : public QWidget -{ - Q_OBJECT -public: - explicit ReportsWidgetPasskeys(QWidget* parent = nullptr); - ~ReportsWidgetPasskeys() override; - - void loadSettings(QSharedPointer db); - void saveSettings(); - -protected: - void showEvent(QShowEvent* event) override; - -signals: - void entryActivated(Entry*); - -public slots: - void updateEntries(); - void emitEntryActivated(const QModelIndex& index); - void customMenuRequested(QPoint); - void deleteSelectedEntries(); - -private slots: - void selectionChanged(); - void importPasskey(); - void exportPasskey(); - -private: - void addPasskeyRow(Group*, Entry*); - QList getSelectedEntries(); - - QScopedPointer m_ui; - - bool m_entriesUpdated = false; - QScopedPointer m_referencesModel; - QScopedPointer m_modelProxy; - QSharedPointer m_db; - QList> m_rowToEntry; -}; - -#endif // KEEPASSXC_REPORTSWIDGETPASSKEYS_H diff --git a/src/gui/reports/ReportsWidgetPasskeys.ui b/src/gui/reports/ReportsWidgetPasskeys.ui deleted file mode 100644 index c1e321fc8..000000000 --- a/src/gui/reports/ReportsWidgetPasskeys.ui +++ /dev/null @@ -1,102 +0,0 @@ - - - ReportsWidgetPasskeys - - - - 0 - 0 - 505 - 379 - - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - Qt::CustomContextMenu - - - QAbstractScrollArea::AdjustToContents - - - QAbstractItemView::NoEditTriggers - - - false - - - true - - - QAbstractItemView::SelectRows - - - Qt::ElideRight - - - true - - - true - - - false - - - - - - - Show expired entries - - - - - - - - - Import - - - - - - - Export - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - diff --git a/src/gui/reports/ReportsWidgetStatistics.cpp b/src/gui/reports/ReportsWidgetStatistics.cpp index 2f1759cd7..280ed4de5 100644 --- a/src/gui/reports/ReportsWidgetStatistics.cpp +++ b/src/gui/reports/ReportsWidgetStatistics.cpp @@ -19,7 +19,6 @@ #include "ui_ReportsWidgetStatistics.h" #include "core/AsyncTask.h" -#include "core/Clock.h" #include "core/DatabaseStats.h" #include "core/Group.h" #include "core/Metadata.h" @@ -42,7 +41,9 @@ ReportsWidgetStatistics::ReportsWidgetStatistics(QWidget* parent) m_ui->statisticsTableView->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents); } -ReportsWidgetStatistics::~ReportsWidgetStatistics() = default; +ReportsWidgetStatistics::~ReportsWidgetStatistics() +{ +} void ReportsWidgetStatistics::addStatsRow(QString name, QString value, bool bad, QString badMsg) { @@ -87,8 +88,9 @@ void ReportsWidgetStatistics::calculateStats() addStatsRow(tr("Database name"), m_db->metadata()->name()); addStatsRow(tr("Description"), m_db->metadata()->description()); addStatsRow(tr("Location"), m_db->filePath()); - addStatsRow(tr("Database created"), Clock::toString(m_db->rootGroup()->timeInfo().creationTime())); - addStatsRow(tr("Last saved"), Clock::toString(stats->modified)); + addStatsRow(tr("Database created"), + m_db->rootGroup()->timeInfo().creationTime().toString(Qt::DefaultLocaleShortDate)); + addStatsRow(tr("Last saved"), stats->modified.toString(Qt::DefaultLocaleShortDate)); addStatsRow(tr("Unsaved changes"), m_db->isModified() ? tr("yes") : tr("no"), m_db->isModified(), diff --git a/src/gui/reports/ReportsWidgetStatistics.h b/src/gui/reports/ReportsWidgetStatistics.h index 02931891c..cc11a75f5 100644 --- a/src/gui/reports/ReportsWidgetStatistics.h +++ b/src/gui/reports/ReportsWidgetStatistics.h @@ -34,7 +34,7 @@ class ReportsWidgetStatistics : public QWidget Q_OBJECT public: explicit ReportsWidgetStatistics(QWidget* parent = nullptr); - ~ReportsWidgetStatistics() override; + ~ReportsWidgetStatistics(); void loadSettings(QSharedPointer db); void saveSettings(); diff --git a/src/gui/settings/SettingsWidget.cpp b/src/gui/settings/SettingsWidget.cpp new file mode 100644 index 000000000..5053bf983 --- /dev/null +++ b/src/gui/settings/SettingsWidget.cpp @@ -0,0 +1,53 @@ +/* + * 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 "SettingsWidget.h" + +SettingsWidget::SettingsWidget(QWidget* parent) + : QWidget(parent) +{ +} + +SettingsWidget::~SettingsWidget() +{ +} + +/** + * Switch between simple mode (the default) and advanced mode. + * Subclasses which implement an advanced mode, need to override this method, + * \link advancedMode() and \link hasAdvancedMode. + * + * When overriding this method, make sure to also emit the + * \link advancedModeChanged() signal. + * + * @param advanced whether advanced mode is enabled + */ +void SettingsWidget::setAdvancedMode(bool advanced) +{ + if (hasAdvancedMode() && advanced != advancedMode()) { + m_advancedMode = advanced; + emit advancedModeChanged(advanced); + } +} + +/** + * @return true if advanced mode is on (default: false) + */ +bool SettingsWidget::advancedMode() const +{ + return m_advancedMode; +} diff --git a/src/gui/SettingsWidget.h b/src/gui/settings/SettingsWidget.h similarity index 79% rename from src/gui/SettingsWidget.h rename to src/gui/settings/SettingsWidget.h index cdbcf9cbc..8c55c5221 100644 --- a/src/gui/SettingsWidget.h +++ b/src/gui/settings/SettingsWidget.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2023 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 @@ -31,7 +31,15 @@ class SettingsWidget : public QWidget public: explicit SettingsWidget(QWidget* parent = nullptr); - ~SettingsWidget() override = default; + Q_DISABLE_COPY(SettingsWidget); + ~SettingsWidget() override; + + /** + * @return true if widget has an advanced mode + */ + virtual bool hasAdvancedMode() const = 0; + virtual void setAdvancedMode(bool advanced); + virtual bool advancedMode() const; public slots: /** @@ -49,20 +57,19 @@ public slots: * * @return true on success, false on failure */ - virtual bool saveSettings() = 0; + virtual bool save() = 0; /** * Discard settings. */ - virtual void discard(); + virtual void discard(){}; signals: void editFinished(bool saved); + void advancedModeChanged(bool advanced); private: bool m_advancedMode = false; - - Q_DISABLE_COPY(SettingsWidget); }; #endif // KEEPASSXC_SETTINGSWIDGET_H diff --git a/src/gui/styles/base/BaseStyle.cpp b/src/gui/styles/base/BaseStyle.cpp index 8fa8f64bb..60df4a2ee 100644 --- a/src/gui/styles/base/BaseStyle.cpp +++ b/src/gui/styles/base/BaseStyle.cpp @@ -41,8 +41,10 @@ #ifdef Q_OS_MACOS #include +#if QT_VERSION >= QT_VERSION_CHECK(5, 9, 0) #include #endif +#endif #include "gui/Icons.h" @@ -50,6 +52,15 @@ QT_BEGIN_NAMESPACE Q_GUI_EXPORT int qt_defaultDpiX(); QT_END_NAMESPACE +// Redefine Q_FALLTHROUGH for older Qt versions +#ifndef Q_FALLTHROUGH +#if (defined(Q_CC_GNU) && Q_CC_GNU >= 700) && !defined(Q_CC_INTEL) +#define Q_FALLTHROUGH() __attribute__((fallthrough)) +#else +#define Q_FALLTHROUGH() (void)0 +#endif +#endif + namespace Phantom { namespace @@ -582,7 +593,7 @@ namespace Phantom } else { // Remove the oldest guy from the cache. Remember that because we may // re-enter QStyle functions multiple times when drawing or calculating - // something, we may have to load several switches derived from + // something, we may have to load several swaitches derived from // different QPalettes on different stack frames at the same time. But as // an extra cost-savings measure, we'll check and see if something else // has a reference to the removed guy. If there aren't any references to @@ -762,7 +773,9 @@ namespace Phantom static MenuItemMetrics ofFontHeight(int fontHeight); private: - MenuItemMetrics() = default; + MenuItemMetrics() + { + } }; MenuItemMetrics MenuItemMetrics::ofFontHeight(int fontHeight) @@ -775,7 +788,7 @@ namespace Phantom m.rightMarginForArrow = static_cast(fontHeight * MenuItem_RightMarginForArrowFontRatio); m.topMargin = static_cast(fontHeight * MenuItem_VerticalMarginsFontRatio); m.bottomMargin = static_cast(fontHeight * MenuItem_VerticalMarginsFontRatio); - auto checkVMargin = static_cast(fontHeight * MenuItem_CheckMarkVerticalInsetFontRatio); + int checkVMargin = static_cast(fontHeight * MenuItem_CheckMarkVerticalInsetFontRatio); int checkHeight = fontHeight - checkVMargin * 2; if (checkHeight < 0) checkHeight = 0; @@ -804,7 +817,7 @@ namespace Phantom menuItemCheckRect(const MenuItemMetrics& metrics, Qt::LayoutDirection direction, QRect itemRect, bool hasArrow) { QRect r = menuItemContentRect(metrics, itemRect, hasArrow); - auto checkVMargin = static_cast(metrics.fontHeight * MenuItem_CheckMarkVerticalInsetFontRatio); + int checkVMargin = static_cast(metrics.fontHeight * MenuItem_CheckMarkVerticalInsetFontRatio); if (checkVMargin < 0) checkVMargin = 0; r.setSize(QSize(metrics.checkWidth, metrics.fontHeight)); @@ -1022,6 +1035,15 @@ namespace Phantom painter->restore(); } + int fontMetricsWidth(const QFontMetrics& fontMetrics, const QString& text) + { +#if QT_VERSION < QT_VERSION_CHECK(5, 11, 0) + return fontMetrics.width(text, text.size(), Qt::TextBypassShaping); +#else + return fontMetrics.horizontalAdvance(text); +#endif + } + // This always draws the arrow with the correct aspect ratio, even if the // provided bounding rect is non-square. The base edge of the triangle is // snapped to a whole pixel to avoid anti-aliasing making it look soft. @@ -1029,7 +1051,7 @@ namespace Phantom // Expected time (release): 5usecs for regular-sized arrows Q_NEVER_INLINE void drawArrow(QPainter* p, QRect rect, Qt::ArrowType arrowDirection, const QBrush& brush) { - const qreal ArrowBaseRatio = 1.0; + const qreal ArrowBaseRatio = 0.9; qreal irx, iry, irw, irh; QRectF(rect).getRect(&irx, &iry, &irw, &irh); if (irw < 1.0 || irh < 1.0) @@ -1134,11 +1156,11 @@ namespace Phantom points[0] = QPointF(0.0, 0.55); points[1] = QPointF(0.4, 1.0); points[2] = QPointF(1.0, 0); - for (auto& point : points) { - QPointF pnt = point; + for (int i = 0; i < 3; ++i) { + QPointF pnt = points[i]; pnt.setX(pnt.x() * dimx + x); pnt.setY(pnt.y() * dimy + y); - point = pnt; + points[i] = pnt; } scratchPen.setBrush(swatch.brush(color)); scratchPen.setCapStyle(Qt::RoundCap); @@ -1456,13 +1478,13 @@ void BaseStyle::drawPrimitive(PrimitiveElement elem, } case PE_FrameDockWidget: { painter->save(); - QColor softshadow = option->palette.window().color().darker(120); + QColor softshadow = option->palette.background().color().darker(120); QRect r = option->rect; painter->setPen(softshadow); painter->drawRect(r.adjusted(0, 0, -1, -1)); painter->setPen(QPen(option->palette.light(), 1)); painter->drawLine(QPoint(r.left() + 1, r.top() + 1), QPoint(r.left() + 1, r.bottom() - 1)); - painter->setPen(QPen(option->palette.window().color().darker(120))); + painter->setPen(QPen(option->palette.background().color().darker(120))); painter->drawLine(QPoint(r.left() + 1, r.bottom() - 1), QPoint(r.right() - 2, r.bottom() - 1)); painter->drawLine(QPoint(r.right() - 1, r.top() + 1), QPoint(r.right() - 1, r.bottom() - 1)); painter->restore(); @@ -1649,7 +1671,7 @@ void BaseStyle::drawPrimitive(PrimitiveElement elem, if (arrow == Qt::DownArrow && !qstyleoption_cast(option) && widget) { auto tbutton = qobject_cast(widget); if (tbutton && tbutton->popupMode() != QToolButton::InstantPopup && tbutton->defaultAction()) { - auto dim = static_cast(qMin(rw, rh) * 0.25); + int dim = static_cast(qMin(rw, rh) * 0.25); aw -= dim; ah -= dim; // We have another hack in PE_IndicatorButtonDropDown where we shift @@ -1714,12 +1736,12 @@ void BaseStyle::drawPrimitive(PrimitiveElement elem, // TODO replace with new code const int margin = 6; const int offset = r.height() / 2; - painter->setPen(QPen(option->palette.window().color().darker(110))); + painter->setPen(QPen(option->palette.background().color().darker(110))); painter->drawLine(r.topLeft().x() + margin, r.topLeft().y() + offset, r.topRight().x() - margin, r.topRight().y() + offset); - painter->setPen(QPen(option->palette.window().color().lighter(110))); + painter->setPen(QPen(option->palette.background().color().lighter(110))); painter->drawLine(r.topLeft().x() + margin, r.topLeft().y() + offset + 1, r.topRight().x() - margin, @@ -2450,7 +2472,7 @@ void BaseStyle::drawControl(ControlElement element, QPixmap pixmap = header->icon.pixmap(window, QSize(iconExtent, iconExtent), (header->state & State_Enabled) ? QIcon::Normal : QIcon::Disabled); - auto pixw = static_cast(pixmap.width() / pixmap.devicePixelRatio()); + int pixw = static_cast(pixmap.width() / pixmap.devicePixelRatio()); QRect aligned = alignedRect( header->direction, QFlag(header->iconAlignment), pixmap.size() / pixmap.devicePixelRatio(), rect); QRect inter = aligned.intersected(rect); @@ -2636,21 +2658,7 @@ void BaseStyle::drawControl(ControlElement element, } break; } - case CE_MenuTearoff: { - if (option->state & State_Selected) { - painter->fillRect(option->rect, option->palette.brush(QPalette::Highlight)); - painter->setPen(QPen(option->palette.highlightedText().color(), 1, Qt::DashLine)); - } else { - painter->fillRect(option->rect, option->palette.brush(QPalette::Button)); - painter->setPen(QPen(option->palette.buttonText().color(), 1, Qt::DashLine)); - } - painter->drawLine(option->rect.x() + 2, - option->rect.y() + option->rect.height() / 2, - option->rect.x() + option->rect.width() - 4, - option->rect.y() + option->rect.height() / 2); - break; - } case CE_MenuItem: { auto menuItem = qstyleoption_cast(option); if (!menuItem) @@ -2737,8 +2745,8 @@ void BaseStyle::drawControl(ControlElement element, } QWindow* window = widget ? widget->windowHandle() : nullptr; QPixmap pixmap = menuItem->icon.pixmap(window, iconSize, mode, state); - const auto pixw = static_cast(pixmap.width() / pixmap.devicePixelRatio()); - const auto pixh = static_cast(pixmap.height() / pixmap.devicePixelRatio()); + const int pixw = static_cast(pixmap.width() / pixmap.devicePixelRatio()); + const int pixh = static_cast(pixmap.height() / pixmap.devicePixelRatio()); QRect pixmapRect = QStyle::alignedRect(option->direction, Qt::AlignCenter, QSize(pixw, pixh), iconRect); painter->drawPixmap(pixmapRect.topLeft(), pixmap); } @@ -2764,7 +2772,7 @@ void BaseStyle::drawControl(ControlElement element, // that when it is resolved against the device, this font will win. This // is mainly to handle cases where someone sets the font on the window // and then the combo inherits it and passes it onward. At that point the - // resolve mask is very, very weak. This makes it stronger. + // resolve mask is very, very weak. This makes it stonger. #if 0 QFont font = menuItem->font; font.setPointSizeF(QFontInfo(menuItem->font).pointSizeF()); @@ -2875,8 +2883,8 @@ void BaseStyle::drawControl(ControlElement element, QIcon::State state = button->state & State_On ? QIcon::On : QIcon::Off; auto window = widget ? widget->window()->windowHandle() : nullptr; QPixmap pixmap = button->icon.pixmap(window, button->iconSize, mode, state); - auto pixmapWidth = static_cast(pixmap.width() / pixmap.devicePixelRatio()); - auto pixmapHeight = static_cast(pixmap.height() / pixmap.devicePixelRatio()); + int pixmapWidth = static_cast(pixmap.width() / pixmap.devicePixelRatio()); + int pixmapHeight = static_cast(pixmap.height() / pixmap.devicePixelRatio()); int labelWidth = pixmapWidth; int labelHeight = pixmapHeight; // 4 is hardcoded in QPushButton::sizeHint() @@ -3262,13 +3270,13 @@ void BaseStyle::drawComplexControl(ComplexControl control, QColor outline = option->palette.dark().color(); QColor titleBarFrameBorder(active ? highlight.darker(180) : outline.darker(110)); - QColor titleBarHighlight(active ? highlight.lighter(120) : palette.window().color().lighter(120)); + QColor titleBarHighlight(active ? highlight.lighter(120) : palette.background().color().lighter(120)); QColor textColor(active ? 0xffffff : 0xff000000); QColor textAlphaColor(active ? 0xffffff : 0xff000000); { // Fill title - auto titlebarColor = QColor(active ? highlight : palette.window().color()); + QColor titlebarColor = QColor(active ? highlight : palette.background().color()); painter->fillRect(option->rect.adjusted(1, 1, -1, 0), titlebarColor); // Frame and rounded corners painter->setPen(titleBarFrameBorder); @@ -3880,9 +3888,11 @@ int BaseStyle::pixelMetric(PixelMetric metric, const QStyleOption* option, const case PM_DockWidgetTitleBarButtonMargin: val = 2; break; +#if (QT_VERSION >= QT_VERSION_CHECK(5, 8, 0)) case PM_TitleBarButtonSize: val = 19; break; +#endif case PM_MaximumDragDistance: return -1; // Do not dpi-scale because the value is magic case PM_TabCloseIndicatorWidth: @@ -3969,14 +3979,14 @@ QSize BaseStyle::sizeFromContents(ContentsType type, if (!btn->icon.isNull() || !btn->text.isEmpty()) margins = proxy()->pixelMetric(isRadio ? PM_RadioButtonLabelSpacing : PM_CheckBoxLabelSpacing, option, widget); - return {size.width() + w + margins, qMax(size.height(), h)}; + return QSize(size.width() + w + margins, qMax(size.height(), h)); } case CT_MenuBarItem: { int fontHeight = option ? option->fontMetrics.height() : size.height(); - auto w = static_cast(fontHeight * Ph::MenuBar_HorizontalPaddingFontRatio); - auto h = static_cast(fontHeight * Ph::MenuBar_VerticalPaddingFontRatio); + int w = static_cast(fontHeight * Ph::MenuBar_HorizontalPaddingFontRatio); + int h = static_cast(fontHeight * Ph::MenuBar_VerticalPaddingFontRatio); int line = Ph::dpiScaled(1); - return {size.width() + w * 2, size.height() + h * 2 + line}; + return QSize(size.width() + w * 2, size.height() + h * 2 + line); } case CT_MenuItem: { auto menuItem = qstyleoption_cast(option); @@ -4103,7 +4113,7 @@ QSize BaseStyle::sizeFromContents(ContentsType type, xadd += 2; yadd += 2; } - return {size.width() + xadd, size.height() + yadd}; + return QSize(size.width() + xadd, size.height() + yadd); } case CT_ItemViewItem: { auto vopt = qstyleoption_cast(option); @@ -4166,8 +4176,7 @@ QSize BaseStyle::sizeFromContents(ContentsType type, auto pbopt = qstyleoption_cast(option); if (!pbopt || pbopt->text.isEmpty()) break; - auto hpad = - static_cast(pbopt->fontMetrics.height() * Phantom::PushButton_HorizontalPaddingFontHeightRatio); + int hpad = static_cast(pbopt->fontMetrics.height() * Phantom::PushButton_HorizontalPaddingFontHeightRatio); newSize.rwidth() += hpad * 2; if (widget && qobject_cast(widget->parent())) { int dialogButtonMinWidth = Phantom::dpiScaled(80); @@ -4325,7 +4334,7 @@ QRect BaseStyle::subControlRect(ComplexControl control, break; case SC_SpinBoxDown: if (spinbox->buttonSymbols == QAbstractSpinBox::NoButtons) - return {}; + return QRect(); rect = QRect(x, center, buttonWidth, spinbox->rect.bottom() - center - fw + 1); break; @@ -4373,7 +4382,7 @@ QRect BaseStyle::subControlRect(ComplexControl control, int textHeight = option->fontMetrics.height(); // width()/horizontalAdvance() is faster than size() and good enough for // us, since we only support a single line of text here anyway. - int textWidth = option->fontMetrics.horizontalAdvance(groupBox->text); + int textWidth = Phantom::fontMetricsWidth(option->fontMetrics, groupBox->text); int indicatorWidth = proxy()->pixelMetric(PM_IndicatorWidth, option, widget); int indicatorHeight = proxy()->pixelMetric(PM_IndicatorHeight, option, widget); int margin = 0; @@ -4419,13 +4428,13 @@ QRect BaseStyle::subControlRect(ComplexControl control, case CC_ComboBox: { auto cb = qstyleoption_cast(option); if (!cb) - return {}; + return QRect(); int frame = cb->frame ? proxy()->pixelMetric(PM_ComboBoxFrameWidth, cb, widget) : 0; QRect r = option->rect; r.adjust(frame, frame, -frame, -frame); int dim = qMin(r.width(), r.height()); if (dim < 1) - return {}; + return QRect(); switch (subControl) { case SC_ComboBoxFrame: return cb->rect; @@ -4616,8 +4625,10 @@ int BaseStyle::styleHint(StyleHint hint, return Phantom::ShowItemViewDecorationSelected; case SH_ItemView_MovementWithoutUpdatingSelection: return 1; +#if (QT_VERSION >= QT_VERSION_CHECK(5, 7, 0)) case SH_ItemView_ScrollMode: return QAbstractItemView::ScrollPerPixel; +#endif case SH_ScrollBar_ContextMenu: #ifdef Q_OS_MAC return 0; diff --git a/src/gui/styles/base/basestyle.qss b/src/gui/styles/base/basestyle.qss index d5211e90a..fa6858989 100644 --- a/src/gui/styles/base/basestyle.qss +++ b/src/gui/styles/base/basestyle.qss @@ -17,14 +17,12 @@ QSpinBox { min-width: 90px; } -QCheckBox, QRadioButton { - spacing: 10px; +QDialogButtonBox QPushButton { + min-width: 55px; } -ReportsDialog QTableView::item, -EntryAttachmentsWidget QTableView::item -{ - padding: 4px; +QCheckBox, QRadioButton { + spacing: 10px; } DatabaseWidget, DatabaseWidget #groupView, DatabaseWidget #tagView { @@ -32,24 +30,27 @@ DatabaseWidget, DatabaseWidget #groupView, DatabaseWidget #tagView { border: none; } -EntryPreviewWidget *[blendIn="true"] +EntryPreviewWidget QLineEdit, EntryPreviewWidget QTextEdit, +EntryPreviewWidget TagsEdit { background-color: palette(window); border: none; padding-left: 0px; } -DatabaseOpenWidget #centralStack, DatabaseOpenWidget #publicSummaryLabel { +DatabaseOpenWidget #centralStack { border: 1px solid palette(mid); background: palette(light); } QGroupBox { + margin-top: 1.4em; + margin-bottom: 1.4em; font-weight: bold; } QGroupBox::title { - margin-top: -.4em; + margin-top: -3.35em; margin-left: -.4em; subcontrol-origin: padding; } @@ -72,6 +73,10 @@ QPlainTextEdit, QTextEdit { padding-left: 4px; } +QStatusBar { + background-color: palette(window); +} + *[title="true"] { font-weight: bold; } diff --git a/src/gui/styles/base/classicstyle.qss b/src/gui/styles/base/classicstyle.qss index 72308f39e..f7d3c0fb4 100644 --- a/src/gui/styles/base/classicstyle.qss +++ b/src/gui/styles/base/classicstyle.qss @@ -1,4 +1,4 @@ -DatabaseOpenWidget #centralStack, DatabaseOpenWidget #publicSummaryLabel { +DatabaseOpenWidget #centralStack { border: 2px groove palette(mid); background: palette(light); } @@ -9,9 +9,8 @@ QToolTip { DatabaseWidget #SearchBanner, DatabaseWidget #KeeShareBanner { font-weight: bold; - background-color: palette(highlight); - color: palette(highlighted-text); - border: 1px solid palette(dark); + background-color: rgb(94, 161, 14); + border: 1px solid rgb(190, 190, 190); padding: 2px; } diff --git a/src/gui/styles/base/phantomcolor.cpp b/src/gui/styles/base/phantomcolor.cpp index a53da3a46..a11ab3c92 100644 --- a/src/gui/styles/base/phantomcolor.cpp +++ b/src/gui/styles/base/phantomcolor.cpp @@ -27,8 +27,8 @@ */ #include "phantomcolor.h" -#include #include +#include namespace Phantom { @@ -398,9 +398,9 @@ namespace Phantom QColor qcolor_of_rgb(qreal r, qreal g, qreal b) { - auto r_ = static_cast(std::lround(srgb_of_linear(r) * 255.0)); - auto g_ = static_cast(std::lround(srgb_of_linear(g) * 255.0)); - auto b_ = static_cast(std::lround(srgb_of_linear(b) * 255.0)); + int r_ = static_cast(std::lround(srgb_of_linear(r) * 255.0)); + int g_ = static_cast(std::lround(srgb_of_linear(g) * 255.0)); + int b_ = static_cast(std::lround(srgb_of_linear(b) * 255.0)); return {r_, g_, b_}; } diff --git a/src/gui/styles/base/phantomcolor.h b/src/gui/styles/base/phantomcolor.h index 8eed357ab..f9573ba65 100644 --- a/src/gui/styles/base/phantomcolor.h +++ b/src/gui/styles/base/phantomcolor.h @@ -42,7 +42,9 @@ namespace Phantom struct Rgb { qreal r, g, b; - Rgb() = default; + Rgb() + { + } Rgb(qreal r, qreal g, qreal b) : r(r) , g(g) @@ -76,7 +78,9 @@ namespace Phantom struct Hsl { qreal h, s, l; - Hsl() = default; + Hsl() + { + } Hsl(qreal h, qreal s, qreal l) : h(h) , s(s) @@ -109,7 +113,7 @@ namespace Phantom return (1.0 - a) * x + a * y; } - // Linearly interpolate two QColors after transforming them to linear color + // Linearly interpolate two QColors after trasnforming them to linear color // space, treating the QColor values as if they were in sRGB space. The // returned QColor is converted back to sRGB space. QColor lerpQColor(const QColor& x, const QColor& y, qreal a); diff --git a/src/gui/styles/dark/DarkStyle.cpp b/src/gui/styles/dark/DarkStyle.cpp index daf16aaac..3c4731b2d 100644 --- a/src/gui/styles/dark/DarkStyle.cpp +++ b/src/gui/styles/dark/DarkStyle.cpp @@ -51,9 +51,11 @@ QPalette DarkStyle::standardPalette() const palette.setColor(QPalette::Inactive, QPalette::Text, QRgb(0xC8C8C6)); palette.setColor(QPalette::Disabled, QPalette::Text, QRgb(0x707070)); +#if (QT_VERSION >= QT_VERSION_CHECK(5, 12, 0)) palette.setColor(QPalette::Active, QPalette::PlaceholderText, QRgb(0x7D7D82)); palette.setColor(QPalette::Inactive, QPalette::PlaceholderText, QRgb(0x87888C)); palette.setColor(QPalette::Disabled, QPalette::PlaceholderText, QRgb(0x737373)); +#endif palette.setColor(QPalette::Active, QPalette::BrightText, QRgb(0x252627)); palette.setColor(QPalette::Inactive, QPalette::BrightText, QRgb(0x2D2D2F)); @@ -113,7 +115,7 @@ QString DarkStyle::getAppStyleSheet() const void DarkStyle::polish(QWidget* widget) { if (qobject_cast(widget) || qobject_cast(widget) || qobject_cast(widget) - || qobject_cast(widget)) { + || qobject_cast(widget) || qobject_cast(widget)) { auto palette = widget->palette(); #if defined(Q_OS_MACOS) if (!osUtils->isDarkMode()) { diff --git a/src/gui/styles/dark/darkstyle.qss b/src/gui/styles/dark/darkstyle.qss index 716430113..23bcfd927 100644 --- a/src/gui/styles/dark/darkstyle.qss +++ b/src/gui/styles/dark/darkstyle.qss @@ -1,24 +1,15 @@ -DatabaseWidget:!active, -DatabaseWidget #groupView:!active, DatabaseWidget #tagView:!active, -EntryPreviewWidget *:!active[blendIn="true"] { +DatabaseWidget:!active, GroupView:!active, +EntryPreviewWidget QLineEdit:!active, EntryPreviewWidget QTextEdit:!active, +EntryPreviewWidget TagsEdit:!active { background-color: #404042; } -DatabaseWidget:disabled, -DatabaseWidget #groupView:disabled, DatabaseWidget #tagView:disabled, -EntryPreviewWidget *:disabled[blendIn="true"] { +DatabaseWidget:disabled, GroupView:disabled, +EntryPreviewWidget QLineEdit:disabled, EntryPreviewWidget QTextEdit:disabled, +EntryPreviewWidget TagsEdit:disabled { background-color: #424242; } -QMenu { - border: 1px solid #56565A; -} - -QMenu::separator { - height: 1px; - background-color: #56565A; -} - QPushButton:!default:hover { /* Using slightly darker shade from palette(button) */ background: #252528; @@ -29,10 +20,6 @@ QPushButton:default:hover, QPushButton:checked:hover { background: #2E582E; } -QSplitterHandle { - background-color: #56565A; -} - QToolTip { color: #BFBFBF; background-color: #2D532D; diff --git a/src/gui/styles/light/LightStyle.cpp b/src/gui/styles/light/LightStyle.cpp index f73995412..93cfeb632 100644 --- a/src/gui/styles/light/LightStyle.cpp +++ b/src/gui/styles/light/LightStyle.cpp @@ -51,9 +51,11 @@ QPalette LightStyle::standardPalette() const palette.setColor(QPalette::Inactive, QPalette::Text, QRgb(0x252528)); palette.setColor(QPalette::Disabled, QPalette::Text, QRgb(0x8C8C92)); +#if (QT_VERSION >= QT_VERSION_CHECK(5, 12, 0)) palette.setColor(QPalette::Active, QPalette::PlaceholderText, QRgb(0x71727D)); palette.setColor(QPalette::Inactive, QPalette::PlaceholderText, QRgb(0x878893)); palette.setColor(QPalette::Disabled, QPalette::PlaceholderText, QRgb(0xA3A4AC)); +#endif palette.setColor(QPalette::Active, QPalette::BrightText, QRgb(0xF3F3F4)); palette.setColor(QPalette::Inactive, QPalette::BrightText, QRgb(0xEAEAEB)); @@ -113,7 +115,7 @@ QString LightStyle::getAppStyleSheet() const void LightStyle::polish(QWidget* widget) { if (qobject_cast(widget) || qobject_cast(widget) || qobject_cast(widget) - || qobject_cast(widget)) { + || qobject_cast(widget) || qobject_cast(widget)) { auto palette = widget->palette(); #if defined(Q_OS_MACOS) if (osUtils->isDarkMode()) { diff --git a/src/gui/styles/light/lightstyle.qss b/src/gui/styles/light/lightstyle.qss index 123267c30..2764a56b0 100644 --- a/src/gui/styles/light/lightstyle.qss +++ b/src/gui/styles/light/lightstyle.qss @@ -1,12 +1,12 @@ -DatabaseWidget:!active, -DatabaseWidget #groupView:!active, DatabaseWidget #tagView:!active, -EntryPreviewWidget *:!active[blendIn="true"] { +DatabaseWidget:!active, GroupView:!active, +EntryPreviewWidget QLineEdit:!active, EntryPreviewWidget QTextEdit:!active, +EntryPreviewWidget TagsEdit:!active { background-color: #FCFCFC; } -DatabaseWidget:disabled, -DatabaseWidget #groupView:disabled, DatabaseWidget #tagView:disabled, -EntryPreviewWidget *:disabled[blendIn="true"] { +DatabaseWidget:disabled, GroupView:disabled, +EntryPreviewWidget QLineEdit:disabled, EntryPreviewWidget QTextEdit:disabled, +EntryPreviewWidget TagsEdit:disabled { background-color: #EDEDED; } diff --git a/src/gui/tag/TagModel.cpp b/src/gui/tag/TagModel.cpp index a19f263d8..99f253270 100644 --- a/src/gui/tag/TagModel.cpp +++ b/src/gui/tag/TagModel.cpp @@ -30,11 +30,12 @@ TagModel::TagModel(QObject* parent) { m_defaultSearches << qMakePair(tr("Clear Search"), QString("")) << qMakePair(tr("All Entries"), QString("*")) << qMakePair(tr("Expired"), QString("is:expired")) - << qMakePair(tr("Weak Passwords"), QString("is:weak")) - << qMakePair(tr("TOTP Entries"), QString("has:totp")); + << qMakePair(tr("Weak Passwords"), QString("is:weak")); } -TagModel::~TagModel() = default; +TagModel::~TagModel() +{ +} void TagModel::setDatabase(QSharedPointer db) { diff --git a/src/gui/tag/TagView.cpp b/src/gui/tag/TagView.cpp index 033061292..8afdac44a 100644 --- a/src/gui/tag/TagView.cpp +++ b/src/gui/tag/TagView.cpp @@ -20,7 +20,6 @@ #include "TagModel.h" #include "core/Database.h" #include "core/Metadata.h" -#include "gui/Application.h" #include "gui/Icons.h" #include "gui/MessageBox.h" @@ -40,11 +39,7 @@ public: if (index.data(Qt::UserRole + 1).toBool()) { QRect bounds = option.rect; bounds.setY(bounds.bottom()); - if (kpxcApp->isDarkTheme()) { - painter->fillRect(bounds, option.palette.mid().color().lighter(185)); - } else { - painter->fillRect(bounds, option.palette.mid()); - } + painter->fillRect(bounds, option.palette.mid()); } } }; diff --git a/src/gui/tag/TagsEdit.cpp b/src/gui/tag/TagsEdit.cpp index 1d6bcfa73..7d5b657ce 100644 --- a/src/gui/tag/TagsEdit.cpp +++ b/src/gui/tag/TagsEdit.cpp @@ -24,7 +24,6 @@ #include "TagsEdit.h" #include "gui/MainWindow.h" -#include #include #include #include @@ -39,6 +38,12 @@ #include +#if QT_VERSION < QT_VERSION_CHECK(5, 11, 0) +#define FONT_METRICS_WIDTH(fmt, ...) fmt.width(__VA_ARGS__) +#else +#define FONT_METRICS_WIDTH(fmt, ...) fmt.horizontalAdvance(__VA_ARGS__) +#endif + namespace { @@ -233,11 +238,11 @@ struct TagsEdit::Impl auto const e = std::end(tags); if (cursorVisible()) { auto const m = b + static_cast(editing_index); - calcRects(lt, row, r, fm, std::pair(b, m)); + calcRects(lt, row, r, fm, std::make_pair(b, m)); calcEditorRect(lt, row, r, fm, m); - calcRects(lt, row, r, fm, std::pair(m + 1, e)); + calcRects(lt, row, r, fm, std::make_pair(m + 1, e)); } else { - calcRects(lt, row, r, fm, std::pair(b, e)); + calcRects(lt, row, r, fm, std::make_pair(b, e)); } r.setBottom(lt.y() + fm.height() + fm.leading() + tag_inner.top() + tag_inner.bottom() - 1); @@ -249,7 +254,7 @@ struct TagsEdit::Impl { for (auto it = range.first; it != range.second; ++it) { // calc text rect - const auto text_w = fm.horizontalAdvance(it->text); + const auto text_w = FONT_METRICS_WIDTH(fm, it->text); auto const text_h = fm.height() + fm.leading(); auto const w = cross_deleter ? tag_inner.left() + tag_inner.right() + tag_cross_padding * 2 + tag_cross_width @@ -274,7 +279,7 @@ struct TagsEdit::Impl template void calcEditorRect(QPoint& lt, size_t& row, QRect r, QFontMetrics const& fm, It it) const { - auto const text_w = fm.horizontalAdvance(text_layout.text()); + auto const text_w = FONT_METRICS_WIDTH(fm, text_layout.text()); auto const text_h = fm.height() + fm.leading(); auto const w = tag_inner.left() + tag_inner.right(); auto const h = tag_inner.top() + tag_inner.bottom(); @@ -337,7 +342,7 @@ struct TagsEdit::Impl assert(i < tags.size()); auto occurrencesOfCurrentText = std::count_if(tags.cbegin(), tags.cend(), [this](const auto& tag) { return tag.text == currentText(); }); - if (tags.size() > 1 && (currentText().isEmpty() || occurrencesOfCurrentText > 1)) { + if (currentText().isEmpty() || occurrencesOfCurrentText > 1) { tags.erase(std::next(tags.begin(), std::ptrdiff_t(editing_index))); if (editing_index <= i) { // Do we shift positions after `i`? --i; @@ -408,7 +413,6 @@ struct TagsEdit::Impl void setupCompleter() { completer->setWidget(ifce); - completer->setCaseSensitivity(Qt::CaseInsensitive); connect(completer.get(), static_cast(&QCompleter::activated), [this](QString const& text) { currentText(text); }); @@ -663,7 +667,8 @@ void TagsEdit::paintEvent(QPaintEvent*) // tags impl->drawTags( - p, std::pair(impl->tags.cbegin(), std::next(impl->tags.cbegin(), std::ptrdiff_t(impl->editing_index)))); + p, + std::make_pair(impl->tags.cbegin(), std::next(impl->tags.cbegin(), std::ptrdiff_t(impl->editing_index)))); // draw not terminated tag auto const formatting = impl->formatting(); @@ -678,10 +683,12 @@ void TagsEdit::paintEvent(QPaintEvent*) // tags impl->drawTags( - p, std::pair(std::next(impl->tags.cbegin(), std::ptrdiff_t(impl->editing_index + 1)), impl->tags.cend())); + p, + std::make_pair(std::next(impl->tags.cbegin(), std::ptrdiff_t(impl->editing_index + 1)), impl->tags.cend())); } else { - impl->drawTags( - p, std::pair(EmptySkipIterator(impl->tags.begin(), impl->tags.end()), EmptySkipIterator(impl->tags.end()))); + impl->drawTags(p, + std::make_pair(EmptySkipIterator(impl->tags.begin(), impl->tags.end()), + EmptySkipIterator(impl->tags.end()))); } } diff --git a/src/gui/widgets/ElidedLabel.h b/src/gui/widgets/ElidedLabel.h index 1f90d056e..5dd14891d 100644 --- a/src/gui/widgets/ElidedLabel.h +++ b/src/gui/widgets/ElidedLabel.h @@ -51,7 +51,7 @@ private slots: void updateElidedText(); private: - void resizeEvent(QResizeEvent* event) override; + void resizeEvent(QResizeEvent* event); Qt::TextElideMode m_elideMode; QString m_rawText; diff --git a/src/gui/wizard/ImportWizard.cpp b/src/gui/wizard/ImportWizard.cpp deleted file mode 100644 index ff3769347..000000000 --- a/src/gui/wizard/ImportWizard.cpp +++ /dev/null @@ -1,89 +0,0 @@ -/* - * 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 "ImportWizard.h" -#include "ImportWizardPageReview.h" -#include "ImportWizardPageSelect.h" - -#include "core/Global.h" -#include "core/Group.h" - -#include -#include - -ImportWizard::ImportWizard(QWidget* parent) - : QWizard(parent) - , m_pageSelect(new ImportWizardPageSelect) - , m_pageReview(new ImportWizardPageReview) -{ - setWizardStyle(MacStyle); - setOption(HaveHelpButton, false); - setOption(NoDefaultButton, false); // Needed for macOS - - addPage(m_pageSelect.data()); - addPage(m_pageReview.data()); - - setWindowTitle(tr("Import Wizard")); - - Q_INIT_RESOURCE(wizard); - setPixmap(BackgroundPixmap, QPixmap(":/wizard/background-pixmap.png")); - - // Fix MacStyle QWizard page frame too bright in dark mode (QTBUG-70346, QTBUG-71696) - QPalette defaultPalette; - auto windowColor = defaultPalette.color(QPalette::Window); - windowColor.setAlpha(153); - auto baseColor = defaultPalette.color(QPalette::Base); - baseColor.setAlpha(153); - - auto* pageFrame = findChildren()[0]; - auto framePalette = pageFrame->palette(); - framePalette.setBrush(QPalette::Window, windowColor.lighter(120)); - framePalette.setBrush(QPalette::Base, baseColor.lighter(120)); - pageFrame->setPalette(framePalette); -} - -ImportWizard::~ImportWizard() -{ -} - -bool ImportWizard::validateCurrentPage() -{ - bool ret = QWizard::validateCurrentPage(); - if (ret && currentPage() == m_pageReview) { - m_db = m_pageReview->database(); - } - return ret; -} - -ImportWizard::ImportIntoType ImportWizard::importIntoType() -{ - return static_cast(field("ImportIntoType").toInt()); -} - -QPair ImportWizard::importInto() -{ - auto list = field("ImportInto").toList(); - if (list.size() >= 2) { - return qMakePair(QUuid(list[0].toString()), QUuid(list[1].toString())); - } - return {}; -} - -QSharedPointer ImportWizard::database() -{ - return m_db; -} diff --git a/src/gui/wizard/ImportWizard.h b/src/gui/wizard/ImportWizard.h deleted file mode 100644 index db27e3d5a..000000000 --- a/src/gui/wizard/ImportWizard.h +++ /dev/null @@ -1,72 +0,0 @@ -/* - * 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_IMPORTWIZARD_H -#define KEEPASSXC_IMPORTWIZARD_H - -#include -#include -#include - -class Database; -class ImportWizardPageSelect; -class ImportWizardPageReview; - -/** - * Setup wizard for importing a file into a database. - */ -class ImportWizard : public QWizard -{ - Q_OBJECT - -public: - explicit ImportWizard(QWidget* parent = nullptr); - ~ImportWizard() override; - - bool validateCurrentPage() override; - - QSharedPointer database(); - - enum ImportType - { - IMPORT_NONE = 0, - IMPORT_CSV, - IMPORT_OPVAULT, - IMPORT_OPUX, - IMPORT_BITWARDEN, - IMPORT_PROTONPASS, - IMPORT_KEEPASS1, - IMPORT_REMOTE, - }; - - enum ImportIntoType - { - NEW_DATABASE = 1, - EXISTING_DATABASE, - TEMPORARY_DATABASE, - }; - - ImportWizard::ImportIntoType importIntoType(); - QPair importInto(); - -private: - QSharedPointer m_db; - QPointer m_pageSelect; - QPointer m_pageReview; -}; - -#endif // KEEPASSXC_IMPORTWIZARD_H diff --git a/src/gui/wizard/ImportWizardPageReview.cpp b/src/gui/wizard/ImportWizardPageReview.cpp deleted file mode 100644 index 3c894e261..000000000 --- a/src/gui/wizard/ImportWizardPageReview.cpp +++ /dev/null @@ -1,282 +0,0 @@ -/* - * Copyright (C) 2023 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 "ImportWizardPageReview.h" -#include "ui_ImportWizardPageReview.h" - -#include "core/Database.h" -#include "core/Group.h" -#include "format/BitwardenReader.h" -#include "format/KeePass1Reader.h" -#include "format/OPUXReader.h" -#include "format/OpVaultReader.h" -#include "format/ProtonPassReader.h" -#include "gui/csvImport/CsvImportWidget.h" -#include "gui/wizard/ImportWizard.h" - -#include "cli/Utils.h" -#include "keys/FileKey.h" -#include "keys/PasswordKey.h" - -#include -#include -#include -#include - -#include "gui/remote/RemoteSettings.h" - -struct RemoteParams; - -ImportWizardPageReview::ImportWizardPageReview(QWidget* parent) - : QWizardPage(parent) - , m_ui(new Ui::ImportWizardPageReview) - , m_remoteHandler(new RemoteHandler(this)) -{ -} - -ImportWizardPageReview::~ImportWizardPageReview() -{ -} - -void ImportWizardPageReview::initializePage() -{ - m_db.reset(); - - // Reset the widget in case we changed the import type - for (auto child : children()) { - delete child; - } - m_ui->setupUi(this); - - auto filename = field("ImportFile").toString(); - m_ui->filenameLabel->setText(filename); - - m_ui->messageWidget->hideMessage(); - m_ui->messageWidget->setAnimate(false); - m_ui->messageWidget->setCloseButtonVisible(false); - - auto importType = field("ImportType").toInt(); - switch (importType) { - case ImportWizard::IMPORT_CSV: - setupCsvImport(filename); - break; - case ImportWizard::IMPORT_OPVAULT: - m_db = importOPVault(filename, field("ImportPassword").toString()); - break; - case ImportWizard::IMPORT_OPUX: - m_db = importOPUX(filename); - break; - case ImportWizard::IMPORT_KEEPASS1: - m_db = importKeePass1(filename, field("ImportPassword").toString(), field("ImportKeyFile").toString()); - break; - case ImportWizard::IMPORT_BITWARDEN: - m_db = importBitwarden(filename, field("ImportPassword").toString()); - break; - case ImportWizard::IMPORT_PROTONPASS: - m_db = importProtonPass(filename); - break; - case ImportWizard::IMPORT_REMOTE: - m_db = importRemote(field("DownloadCommand").toString(), - field("DownloadInput").toString(), - field("ImportPassword").toString(), - field("ImportKeyFile").toString()); - break; - default: - break; - } - - setupDatabasePreview(); -} - -bool ImportWizardPageReview::validatePage() -{ - if (isCsvImport()) { - m_db = m_csvWidget->buildDatabase(); - } - return !m_db.isNull(); -} - -QSharedPointer ImportWizardPageReview::database() -{ - return m_db; -} - -void ImportWizardPageReview::setupCsvImport(const QString& filename) -{ - // No need for this label with CSV - m_ui->previewLabel->hide(); - - m_csvWidget = new CsvImportWidget(); - connect(m_csvWidget, &CsvImportWidget::message, m_ui->messageWidget, [this](QString message) { - if (message.isEmpty()) { - m_ui->messageWidget->hideMessage(); - } else { - m_ui->messageWidget->showMessage(message, MessageWidget::Error, -1); - } - }); - - m_csvWidget->load(filename); -} - -void ImportWizardPageReview::setupDatabasePreview() -{ - // CSV preview is handled by the import widget - if (isCsvImport()) { - // Qt does not automatically resize a QScrollWidget in a QWizard... - m_ui->scrollAreaContents->layout()->addWidget(m_csvWidget); - m_ui->scrollArea->setMinimumSize(m_csvWidget->width() + 50, m_csvWidget->height() + 100); - return; - } - - if (!m_db) { - m_ui->scrollArea->setVisible(false); - return; - } - - auto entryList = m_db->rootGroup()->entriesRecursive(); - m_ui->previewLabel->setText(tr("Entry count: %1").arg(entryList.count())); - - QStringList headerLabels({tr("Group"), tr("Title"), tr("Username"), tr("Password"), tr("Url")}); - - auto tableWidget = new QTableWidget(entryList.count(), headerLabels.count()); - tableWidget->setHorizontalHeaderLabels(headerLabels); - - int row = 0; - for (auto entry : entryList) { - QList items({new QTableWidgetItem(entry->group()->name()), - new QTableWidgetItem(entry->title()), - new QTableWidgetItem(entry->username()), - new QTableWidgetItem(entry->password()), - new QTableWidgetItem(entry->url())}); - int column = 0; - for (auto item : items) { - tableWidget->setItem(row, column++, item); - } - ++row; - } - - tableWidget->setSortingEnabled(true); - tableWidget->setSelectionMode(QTableWidget::NoSelection); - tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers); - tableWidget->setWordWrap(true); - tableWidget->horizontalHeader()->setMaximumSectionSize(200); - tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents); - tableWidget->horizontalHeader()->setStretchLastSection(true); - - m_ui->scrollAreaContents->layout()->addWidget(tableWidget); -} - -QSharedPointer ImportWizardPageReview::importOPUX(const QString& filename) -{ - OPUXReader reader; - auto db = reader.convert(filename); - if (reader.hasError()) { - m_ui->messageWidget->showMessage(reader.errorString(), KMessageWidget::Error, -1); - } - return db; -} - -QSharedPointer ImportWizardPageReview::importBitwarden(const QString& filename, const QString& password) -{ - BitwardenReader reader; - auto db = reader.convert(filename, password); - if (reader.hasError()) { - m_ui->messageWidget->showMessage(reader.errorString(), KMessageWidget::Error, -1); - } - return db; -} - -QSharedPointer ImportWizardPageReview::importOPVault(const QString& filename, const QString& password) -{ - OpVaultReader reader; - QDir opVault(filename); - auto db = reader.convert(opVault, password); - if (reader.hasError()) { - m_ui->messageWidget->showMessage(reader.errorString(), KMessageWidget::Error, -1); - } - return db; -} - -QSharedPointer -ImportWizardPageReview::importKeePass1(const QString& filename, const QString& password, const QString& keyfile) -{ - KeePass1Reader reader; - - // TODO: Handle case of empty password? - - auto db = reader.readDatabase(filename, password, keyfile); - if (reader.hasError()) { - m_ui->messageWidget->showMessage(reader.errorString(), KMessageWidget::Error, -1); - } - - return db; -} - -QSharedPointer ImportWizardPageReview::importProtonPass(const QString& filename) -{ - ProtonPassReader reader; - auto db = reader.convert(filename); - if (reader.hasError()) { - m_ui->messageWidget->showMessage(reader.errorString(), KMessageWidget::Error, -1); - } - return db; -} - -bool ImportWizardPageReview::isCsvImport() const -{ - return m_csvWidget && field("ImportType").toInt() == ImportWizard::IMPORT_CSV; -} - -QSharedPointer ImportWizardPageReview::importRemote(const QString& downloadCommand, - const QString& downloadInput, - const QString& password, - const QString& keyfile) -{ - auto* params = new RemoteParams(); - params->downloadCommand = downloadCommand; - params->downloadInput = downloadInput; - - auto result = m_remoteHandler->download(params); - - if (!result.success) { - m_ui->messageWidget->showMessage(result.errorMessage, KMessageWidget::Error, -1); - } - - auto key = QSharedPointer::create(); - - if (!password.isEmpty()) { - key->addKey(QSharedPointer::create(password)); - } - if (!keyfile.isEmpty()) { - QSharedPointer fileKey = QSharedPointer::create(); - if (Utils::loadFileKey(keyfile, fileKey)) { - key->addKey(fileKey); - } else { - m_ui->messageWidget->showMessage(tr("Could not load key file."), KMessageWidget::Error, -1); - } - } - - QString error; - QSharedPointer remoteDb = QSharedPointer::create(); - remoteDb->markAsTemporaryDatabase(); - if (!remoteDb->open(result.filePath, key, &error)) { - m_ui->messageWidget->showMessage( - tr("Could not open remote database. Password or key file may be incorrect."), KMessageWidget::Error, -1); - } - - return remoteDb; -} diff --git a/src/gui/wizard/ImportWizardPageReview.h b/src/gui/wizard/ImportWizardPageReview.h deleted file mode 100644 index 17f85a1a5..000000000 --- a/src/gui/wizard/ImportWizardPageReview.h +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright (C) 2023 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_IMPORTWIZARDPAGEREVIEW_H -#define KEEPASSXC_IMPORTWIZARDPAGEREVIEW_H - -#include -#include - -#include -#include -#include - -#include "../remote/RemoteHandler.h" - -class CsvImportWidget; -class Database; -namespace Ui -{ - class ImportWizardPageReview; -}; - -class ImportWizardPageReview : public QWizardPage -{ - Q_OBJECT - -public: - explicit ImportWizardPageReview(QWidget* parent = nullptr); - Q_DISABLE_COPY(ImportWizardPageReview) - ~ImportWizardPageReview() override; - - void initializePage() override; - bool validatePage() override; - - QSharedPointer database(); - -private: - bool isCsvImport() const; - void setupCsvImport(const QString& filename); - QSharedPointer importOPUX(const QString& filename); - QSharedPointer importBitwarden(const QString& filename, const QString& password); - QSharedPointer importOPVault(const QString& filename, const QString& password); - QSharedPointer importKeePass1(const QString& filename, const QString& password, const QString& keyfile); - QSharedPointer importProtonPass(const QString& filename); - QSharedPointer importRemote(const QString& downloadCommand, - const QString& downloadInput, - const QString& password, - const QString& keyfile); - - void setupDatabasePreview(); - - QScopedPointer m_ui; - - QSharedPointer m_db; - QPointer m_csvWidget; - QPointer m_remoteHandler; -}; - -#endif diff --git a/src/gui/wizard/ImportWizardPageReview.ui b/src/gui/wizard/ImportWizardPageReview.ui deleted file mode 100644 index 6872ec4ea..000000000 --- a/src/gui/wizard/ImportWizardPageReview.ui +++ /dev/null @@ -1,95 +0,0 @@ - - - ImportWizardPageReview - - - - 0 - 0 - 518 - 334 - - - - WizardPage - - - - - - - - - - 500 - 300 - - - - Qt::ScrollBarAlwaysOff - - - QAbstractScrollArea::AdjustToContentsOnFirstShow - - - true - - - - - 0 - 0 - 498 - 298 - - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - 75 - true - - - - filename - - - - - - - Entry count: %1 - - - - - - - - - - - - MessageWidget - QWidget -
    gui/MessageWidget.h
    - 1 -
    -
    - - -
    diff --git a/src/gui/wizard/ImportWizardPageSelect.cpp b/src/gui/wizard/ImportWizardPageSelect.cpp deleted file mode 100644 index ba5f28521..000000000 --- a/src/gui/wizard/ImportWizardPageSelect.cpp +++ /dev/null @@ -1,314 +0,0 @@ -/* - * Copyright (C) 2023 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 "ImportWizardPageSelect.h" -#include "ui_ImportWizardPageSelect.h" - -#include "ImportWizard.h" - -#include "gui/DatabaseWidget.h" -#include "gui/FileDialog.h" -#include "gui/Icons.h" -#include "gui/MainWindow.h" - -#include - -ImportWizardPageSelect::ImportWizardPageSelect(QWidget* parent) - : QWizardPage(parent) - , m_ui(new Ui::ImportWizardPageSelect()) -{ - m_ui->setupUi(this); - - new QListWidgetItem(icons()->icon("csv"), tr("Comma Separated Values (.csv)"), m_ui->importTypeList); - new QListWidgetItem(icons()->icon("onepassword"), tr("1Password Export (.1pux)"), m_ui->importTypeList); - new QListWidgetItem(icons()->icon("onepassword"), tr("1Password Vault (.opvault)"), m_ui->importTypeList); - new QListWidgetItem(icons()->icon("bitwarden"), tr("Bitwarden (.json)"), m_ui->importTypeList); - new QListWidgetItem(icons()->icon("proton"), tr("Proton Pass (.json)"), m_ui->importTypeList); - new QListWidgetItem(icons()->icon("web"), tr("Remote Database (.kdbx)"), m_ui->importTypeList); - new QListWidgetItem(icons()->icon("object-locked"), tr("KeePass 1 Database (.kdb)"), m_ui->importTypeList); - - m_ui->importTypeList->item(0)->setData(Qt::UserRole, ImportWizard::IMPORT_CSV); - m_ui->importTypeList->item(1)->setData(Qt::UserRole, ImportWizard::IMPORT_OPUX); - m_ui->importTypeList->item(2)->setData(Qt::UserRole, ImportWizard::IMPORT_OPVAULT); - m_ui->importTypeList->item(3)->setData(Qt::UserRole, ImportWizard::IMPORT_BITWARDEN); - m_ui->importTypeList->item(4)->setData(Qt::UserRole, ImportWizard::IMPORT_PROTONPASS); - m_ui->importTypeList->item(5)->setData(Qt::UserRole, ImportWizard::IMPORT_REMOTE); - m_ui->importTypeList->item(6)->setData(Qt::UserRole, ImportWizard::IMPORT_KEEPASS1); - - connect(m_ui->importTypeList, &QListWidget::currentItemChanged, this, &ImportWizardPageSelect::itemSelected); - m_ui->importTypeList->setCurrentRow(0); - - connect(m_ui->importFileButton, &QAbstractButton::clicked, this, &ImportWizardPageSelect::chooseImportFile); - connect(m_ui->keyFileButton, &QAbstractButton::clicked, this, &ImportWizardPageSelect::chooseKeyFile); - connect(m_ui->existingDatabaseRadio, &QRadioButton::toggled, this, [this](bool state) { - m_ui->existingDatabaseChoice->setEnabled(state); - }); - - updateDatabaseChoices(); - - m_ui->downloadCommandHelpButton->setIcon(icons()->icon("system-help")); - connect(m_ui->downloadCommandHelpButton, &QToolButton::clicked, this, [] { - QDesktopServices::openUrl(QUrl("https://keepassxc.org/docs/KeePassXC_UserGuide#_remote_database_support")); - }); - - connect(m_ui->importFileEdit, &QLineEdit::textChanged, this, &QWizardPage::completeChanged); - connect(m_ui->downloadCommand, &QLineEdit::textChanged, this, &QWizardPage::completeChanged); - - registerField("ImportType", this); - registerField("ImportFile", m_ui->importFileEdit); - registerField("ImportIntoType", m_ui->importIntoGroupBox); // This is intentional - registerField("ImportInto", m_ui->importIntoLabel); // This is intentional - registerField("ImportPassword", m_ui->passwordEdit, "text", "textChanged"); - registerField("ImportKeyFile", m_ui->keyFileEdit); - registerField("DownloadCommand", m_ui->downloadCommand); - registerField("DownloadInput", m_ui->downloadCommandInput, "plainText", "textChanged"); -} - -ImportWizardPageSelect::~ImportWizardPageSelect() -{ -} - -void ImportWizardPageSelect::initializePage() -{ - setField("ImportType", m_ui->importTypeList->currentItem()->data(Qt::UserRole).toInt()); - adjustSize(); -} - -bool ImportWizardPageSelect::validatePage() -{ - if (m_ui->existingDatabaseRadio->isChecked()) { - if (m_ui->existingDatabaseChoice->currentIndex() == -1) { - return false; - } - setField("ImportIntoType", ImportWizard::EXISTING_DATABASE); - setField("ImportInto", m_ui->existingDatabaseChoice->currentData()); - } else if (m_ui->temporaryDatabaseRadio->isChecked()) { - setField("ImportIntoType", ImportWizard::TEMPORARY_DATABASE); - setField("ImportInto", {}); - } else { - setField("ImportIntoType", ImportWizard::NEW_DATABASE); - setField("ImportInto", {}); - } - - return true; -} - -bool ImportWizardPageSelect::isComplete() const -{ - if (field("ImportType").toInt() == ImportWizard::IMPORT_REMOTE) { - return !field("DownloadCommand").toString().isEmpty(); - } - return !field("ImportFile").toString().isEmpty(); -} - -void ImportWizardPageSelect::itemSelected(QListWidgetItem* current, QListWidgetItem* previous) -{ - Q_UNUSED(previous) - - if (!current) { - setCredentialState(false); - return; - } - - m_ui->importFileEdit->clear(); - m_ui->passwordEdit->clear(); - m_ui->keyFileEdit->clear(); - - auto type = current->data(Qt::UserRole).toInt(); - setField("ImportType", type); - switch (type) { - // Unencrypted types - case ImportWizard::IMPORT_CSV: - case ImportWizard::IMPORT_OPUX: - case ImportWizard::IMPORT_PROTONPASS: - setCredentialState(false); - setDownloadCommand(false); - break; - // Password may be required - case ImportWizard::IMPORT_BITWARDEN: - case ImportWizard::IMPORT_OPVAULT: - setCredentialState(true); - setDownloadCommand(false); - break; - // Password and/or Key File may be required - case ImportWizard::IMPORT_KEEPASS1: - setCredentialState(true, true); - setDownloadCommand(false); - break; - case ImportWizard::IMPORT_REMOTE: - setCredentialState(true, true); - setDownloadCommand(true); - break; - default: - Q_ASSERT(false); - } -} - -void ImportWizardPageSelect::updateDatabaseChoices() const -{ - m_ui->existingDatabaseChoice->clear(); - auto mainWindow = getMainWindow(); - if (mainWindow) { - for (auto dbWidget : mainWindow->getOpenDatabases()) { - // Remove all connections - disconnect(dbWidget, nullptr, this, nullptr); - - // Skip over locked databases - if (dbWidget->isLocked()) { - continue; - } - - connect(dbWidget, &DatabaseWidget::databaseLocked, this, &ImportWizardPageSelect::updateDatabaseChoices); - connect(dbWidget, &DatabaseWidget::databaseModified, this, &ImportWizardPageSelect::updateDatabaseChoices); - - // Enable the selection of an existing database - m_ui->existingDatabaseRadio->setEnabled(true); - m_ui->existingDatabaseRadio->setToolTip(""); - - // Add a separator between databases - if (m_ui->existingDatabaseChoice->count() > 0) { - m_ui->existingDatabaseChoice->insertSeparator(m_ui->existingDatabaseChoice->count()); - } - - // Add the root group as a special line item - auto db = dbWidget->database(); - m_ui->existingDatabaseChoice->addItem( - QString("%1 (%2)").arg(dbWidget->displayName(), db->rootGroup()->name()), - QList() << db->uuid() << db->rootGroup()->uuid()); - - if (dbWidget->isVisible()) { - m_ui->existingDatabaseChoice->setCurrentIndex(m_ui->existingDatabaseChoice->count() - 1); - } - - // Add remaining groups - for (const auto& group : db->rootGroup()->groupsRecursive(false)) { - if (!group->isRecycled()) { - auto path = group->hierarchy(); - path.removeFirst(); - m_ui->existingDatabaseChoice->addItem(QString(" / %1").arg(path.join(" / ")), - QList() << db->uuid() << group->uuid()); - } - } - } - } - - if (m_ui->existingDatabaseChoice->count() == 0) { - m_ui->existingDatabaseRadio->setEnabled(false); - m_ui->newDatabaseRadio->setChecked(true); - } -} - -void ImportWizardPageSelect::chooseImportFile() -{ - QString file; -#ifndef Q_OS_MACOS - // OPVault is a folder except on macOS - if (field("ImportType").toInt() == ImportWizard::IMPORT_OPVAULT) { - file = fileDialog()->getExistingDirectory(this, tr("Open OPVault"), QDir::homePath()); - } else { -#endif - file = fileDialog()->getOpenFileName(this, tr("Select import file"), QDir::homePath(), importFileFilter()); -#ifndef Q_OS_MACOS - } -#endif - - if (!file.isEmpty()) { - m_ui->importFileEdit->setText(file); - } -} - -void ImportWizardPageSelect::chooseKeyFile() -{ - auto filter = QString("%1 (*);;%2 (*.keyx; *.key)").arg(tr("All files"), tr("Key files")); - auto file = fileDialog()->getOpenFileName(this, tr("Select key file"), QDir::homePath(), filter); - if (!file.isEmpty()) { - m_ui->keyFileEdit->setText(file); - } -} - -void ImportWizardPageSelect::setCredentialState(bool passwordEnabled, bool keyFileEnable) -{ - bool passwordStateChanged = m_ui->passwordLabel->isVisible() != passwordEnabled; - m_ui->passwordLabel->setVisible(passwordEnabled); - m_ui->passwordEdit->setVisible(passwordEnabled); - - bool keyFileStateChanged = m_ui->keyFileLabel->isVisible() != keyFileEnable; - m_ui->keyFileLabel->setVisible(keyFileEnable); - m_ui->keyFileEdit->setVisible(keyFileEnable); - m_ui->keyFileButton->setVisible(keyFileEnable); - - // Workaround Qt bug where the wizard window is not updated when the internal layout changes - if (window()) { - int height = window()->height(); - if (passwordStateChanged) { - auto diff = m_ui->passwordEdit->height() + m_ui->inputFields->layout()->spacing(); - height += passwordEnabled ? diff : -diff; - } - if (keyFileStateChanged) { - auto diff = m_ui->keyFileEdit->height() + m_ui->inputFields->layout()->spacing(); - height += keyFileEnable ? diff : -diff; - } - window()->resize(window()->width(), height); - } -} - -void ImportWizardPageSelect::setDownloadCommand(bool downloadCommandEnabled) -{ - bool downloadCommandStateChanged = m_ui->downloadCommandLabel->isVisible() != downloadCommandEnabled; - m_ui->downloadCommandLabel->setVisible(downloadCommandEnabled); - m_ui->downloadCommand->setVisible(downloadCommandEnabled); - m_ui->downloadCommandInputLabel->setVisible(downloadCommandEnabled); - m_ui->downloadCommandInput->setVisible(downloadCommandEnabled); - m_ui->downloadCommandHelpButton->setVisible(downloadCommandEnabled); - - m_ui->temporaryDatabaseRadio->setVisible(downloadCommandEnabled); - - m_ui->importFileLabel->setVisible(!downloadCommandEnabled); - m_ui->importFileEdit->setVisible(!downloadCommandEnabled); - m_ui->importFileButton->setVisible(!downloadCommandEnabled); - - // Workaround Qt bug where the wizard window is not updated when the internal layout changes - if (window()) { - int height = window()->height(); - if (downloadCommandStateChanged) { - auto diff = m_ui->downloadCommand->height() + m_ui->downloadCommandInput->height() - + m_ui->temporaryDatabaseRadio->height() + m_ui->inputFields->layout()->spacing(); - height += downloadCommandEnabled ? diff : -diff; - } - window()->resize(window()->width(), height); - } -} - -QString ImportWizardPageSelect::importFileFilter() -{ - switch (field("ImportType").toInt()) { - case ImportWizard::IMPORT_CSV: - return QString("%1 (*.csv);;%2 (*)").arg(tr("Comma Separated Values"), tr("All files")); - case ImportWizard::IMPORT_OPUX: - return QString("%1 (*.1pux)").arg(tr("1Password Export")); - case ImportWizard::IMPORT_BITWARDEN: - return QString("%1 (*.json)").arg(tr("Bitwarden JSON Export")); - case ImportWizard::IMPORT_PROTONPASS: - return QString("%1 (*.json)").arg(tr("Proton Pass JSON Export")); - case ImportWizard::IMPORT_OPVAULT: - return QString("%1 (*.opvault)").arg(tr("1Password Vault")); - case ImportWizard::IMPORT_KEEPASS1: - return QString("%1 (*.kdb)").arg(tr("KeePass1 Database")); - default: - return {}; - } -} diff --git a/src/gui/wizard/ImportWizardPageSelect.h b/src/gui/wizard/ImportWizardPageSelect.h deleted file mode 100644 index 5c4024ea5..000000000 --- a/src/gui/wizard/ImportWizardPageSelect.h +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright (C) 2023 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_IMPORTWIZARDPAGESELECT_H -#define KEEPASSXC_IMPORTWIZARDPAGESELECT_H - -#include -#include - -class QListWidgetItem; - -namespace Ui -{ - class ImportWizardPageSelect; -} - -class ImportWizardPageSelect : public QWizardPage -{ - Q_OBJECT - -public: - explicit ImportWizardPageSelect(QWidget* parent = nullptr); - Q_DISABLE_COPY(ImportWizardPageSelect) - ~ImportWizardPageSelect() override; - - void initializePage() override; - bool validatePage() override; - bool isComplete() const override; - -private slots: - void itemSelected(QListWidgetItem* current, QListWidgetItem* previous); - void chooseImportFile(); - void chooseKeyFile(); - void updateDatabaseChoices() const; - -private: - QString importFileFilter(); - void setCredentialState(bool passwordEnabled, bool keyFileEnable = false); - void setDownloadCommand(bool downloadCommandEnabled); - - QScopedPointer m_ui; -}; - -#endif diff --git a/src/gui/wizard/ImportWizardPageSelect.ui b/src/gui/wizard/ImportWizardPageSelect.ui deleted file mode 100644 index ca37fec71..000000000 --- a/src/gui/wizard/ImportWizardPageSelect.ui +++ /dev/null @@ -1,331 +0,0 @@ - - - ImportWizardPageSelect - - - - 0 - 0 - 500 - 388 - - - - Form - - - Import File Selection - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - 0 - 0 - - - - - 500 - 125 - - - - QAbstractScrollArea::AdjustToContents - - - QAbstractItemView::NoEditTriggers - - - true - - - QAbstractItemView::SelectRows - - - Qt::ElideNone - - - - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 20 - 10 - - - - - - - - - 0 - 0 - - - - - 400 - 0 - - - - - QLayout::SetMinimumSize - - - - - Import File: - - - - - - - - - - - - Browse… - - - - - - - - - Password: - - - - - - - - - - Key File: - - - - - - - - - - - - Browse… - - - - - - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 20 - 15 - - - - - - - - Import Into: - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop - - - - - - - - 0 - 0 - - - - - 0 - 60 - - - - - - - - QLayout::SetMinimumSize - - - 6 - - - 6 - - - 6 - - - 6 - - - - - New Database - - - true - - - - - - - - - false - - - No unlocked databases available - - - Existing Database: - - - - - - - false - - - - - - - - - Temporary Database - - - - - - - - - - Command: - - - - - - - - - e.g.: "sftp user@hostname" or "scp user@hostname:DatabaseOnRemote.kdbx {TEMP_DATABASE}" - - - - - - - - - - - - - - - - Input: - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop - - - - - - - e.g.: -get DatabaseOnRemote.kdbx {TEMP_DATABASE} -exit ---- -{TEMP_DATABASE} is used as placeholder to store the database in a temporary location -The command has to exit. In case of `sftp` as last commend `exit` has to be sent - - - - - - - - - - - Qt::Vertical - - - QSizePolicy::MinimumExpanding - - - - 20 - 40 - - - - - - - - - PasswordWidget - QWidget -
    gui/PasswordWidget.h
    - 1 -
    -
    - - -
    diff --git a/src/gui/wizard/NewDatabaseWizard.cpp b/src/gui/wizard/NewDatabaseWizard.cpp index 7394e1fc5..03bede632 100644 --- a/src/gui/wizard/NewDatabaseWizard.cpp +++ b/src/gui/wizard/NewDatabaseWizard.cpp @@ -63,7 +63,9 @@ NewDatabaseWizard::NewDatabaseWizard(QWidget* parent) pageFrame->setPalette(framePalette); } -NewDatabaseWizard::~NewDatabaseWizard() = default; +NewDatabaseWizard::~NewDatabaseWizard() +{ +} bool NewDatabaseWizard::validateCurrentPage() { diff --git a/src/gui/wizard/NewDatabaseWizardPage.cpp b/src/gui/wizard/NewDatabaseWizardPage.cpp index 17dcaa673..dd2d69d39 100644 --- a/src/gui/wizard/NewDatabaseWizardPage.cpp +++ b/src/gui/wizard/NewDatabaseWizardPage.cpp @@ -1,6 +1,6 @@ /* - * Copyright (C) 2023 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 @@ -27,9 +27,13 @@ NewDatabaseWizardPage::NewDatabaseWizardPage(QWidget* parent) , m_ui(new Ui::NewDatabaseWizardPage()) { m_ui->setupUi(this); + + connect(m_ui->advancedSettingsButton, SIGNAL(clicked()), SLOT(toggleAdvancedSettings())); } -NewDatabaseWizardPage::~NewDatabaseWizardPage() = default; +NewDatabaseWizardPage::~NewDatabaseWizardPage() +{ +} /** * Set the database settings page widget for this wizard page. @@ -41,6 +45,7 @@ void NewDatabaseWizardPage::setPageWidget(DatabaseSettingsWidget* page) { m_pageWidget = page; m_ui->pageContent->setWidget(m_pageWidget); + m_ui->advancedSettingsButton->setVisible(m_pageWidget->hasAdvancedMode()); } /** @@ -69,7 +74,7 @@ void NewDatabaseWizardPage::initializePage() return; } - m_pageWidget->loadSettings(m_db); + m_pageWidget->load(m_db); } bool NewDatabaseWizardPage::validatePage() @@ -79,7 +84,25 @@ bool NewDatabaseWizardPage::validatePage() return false; } - bool valid = m_pageWidget->saveSettings(); + bool valid = m_pageWidget->save(); m_pageWidget->uninitialize(); return valid; } + +/** + * Toggle settings page widget between simple and advanced mode. + */ +void NewDatabaseWizardPage::toggleAdvancedSettings() +{ + if (!m_pageWidget || !m_pageWidget->hasAdvancedMode()) { + return; + } + + if (m_pageWidget->advancedMode()) { + m_pageWidget->setAdvancedMode(false); + m_ui->advancedSettingsButton->setText(tr("Advanced Settings")); + } else { + m_pageWidget->setAdvancedMode(true); + m_ui->advancedSettingsButton->setText(tr("Simple Settings")); + } +} diff --git a/src/gui/wizard/NewDatabaseWizardPage.h b/src/gui/wizard/NewDatabaseWizardPage.h index 2e26cfd10..185e6f8ca 100644 --- a/src/gui/wizard/NewDatabaseWizardPage.h +++ b/src/gui/wizard/NewDatabaseWizardPage.h @@ -47,6 +47,9 @@ public: void initializePage() override; bool validatePage() override; +public slots: + void toggleAdvancedSettings(); + protected: QPointer m_pageWidget; QSharedPointer m_db; diff --git a/src/gui/wizard/NewDatabaseWizardPage.ui b/src/gui/wizard/NewDatabaseWizardPage.ui index 1f347d059..a91b653d0 100644 --- a/src/gui/wizard/NewDatabaseWizardPage.ui +++ b/src/gui/wizard/NewDatabaseWizardPage.ui @@ -25,7 +25,7 @@ Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. - + @@ -66,12 +66,49 @@ QScrollArea > QWidget > QScrollBar { background: 1; } 0 0 560 - 392 + 349 + + + + Qt::Vertical + + + + 20 + 6 + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Advanced Settings + + + + + diff --git a/src/gui/wizard/NewDatabaseWizardPageDatabaseKey.cpp b/src/gui/wizard/NewDatabaseWizardPageDatabaseKey.cpp index b8847a141..3cd2abd31 100644 --- a/src/gui/wizard/NewDatabaseWizardPageDatabaseKey.cpp +++ b/src/gui/wizard/NewDatabaseWizardPageDatabaseKey.cpp @@ -27,4 +27,6 @@ NewDatabaseWizardPageDatabaseKey::NewDatabaseWizardPageDatabaseKey(QWidget* pare setSubTitle(tr("A set of credentials known only to you that protects your database.")); } -NewDatabaseWizardPageDatabaseKey::~NewDatabaseWizardPageDatabaseKey() = default; +NewDatabaseWizardPageDatabaseKey::~NewDatabaseWizardPageDatabaseKey() +{ +} diff --git a/src/gui/wizard/NewDatabaseWizardPageEncryption.cpp b/src/gui/wizard/NewDatabaseWizardPageEncryption.cpp index d97abf1f4..743f7bcc2 100644 --- a/src/gui/wizard/NewDatabaseWizardPageEncryption.cpp +++ b/src/gui/wizard/NewDatabaseWizardPageEncryption.cpp @@ -28,4 +28,6 @@ NewDatabaseWizardPageEncryption::NewDatabaseWizardPageEncryption(QWidget* parent "Don't worry, you can change them later in the database settings.")); } -NewDatabaseWizardPageEncryption::~NewDatabaseWizardPageEncryption() = default; +NewDatabaseWizardPageEncryption::~NewDatabaseWizardPageEncryption() +{ +} diff --git a/src/gui/wizard/NewDatabaseWizardPageMetaData.cpp b/src/gui/wizard/NewDatabaseWizardPageMetaData.cpp index 4be680427..f4e2712fb 100644 --- a/src/gui/wizard/NewDatabaseWizardPageMetaData.cpp +++ b/src/gui/wizard/NewDatabaseWizardPageMetaData.cpp @@ -27,4 +27,6 @@ NewDatabaseWizardPageMetaData::NewDatabaseWizardPageMetaData(QWidget* parent) setSubTitle(tr("Please fill in the display name and an optional description for your new database:")); } -NewDatabaseWizardPageMetaData::~NewDatabaseWizardPageMetaData() = default; +NewDatabaseWizardPageMetaData::~NewDatabaseWizardPageMetaData() +{ +} \ No newline at end of file diff --git a/src/keeshare/CMakeLists.txt b/src/keeshare/CMakeLists.txt index 5fe739b36..3adf272ad 100644 --- a/src/keeshare/CMakeLists.txt +++ b/src/keeshare/CMakeLists.txt @@ -2,6 +2,7 @@ if(WITH_XC_KEESHARE) set(keeshare_SOURCES SettingsPageKeeShare.cpp SettingsWidgetKeeShare.cpp + DatabaseSettingsPageKeeShare.cpp DatabaseSettingsWidgetKeeShare.cpp group/EditGroupWidgetKeeShare.cpp group/EditGroupPageKeeShare.cpp @@ -12,6 +13,8 @@ if(WITH_XC_KEESHARE) ShareObserver.cpp ) + find_package(Minizip REQUIRED) + add_library(keeshare STATIC ${keeshare_SOURCES}) target_link_libraries(keeshare PUBLIC Qt5::Core Qt5::Widgets ${BOTAN_LIBRARIES} ${ZLIB_LIBRARIES} PRIVATE ${MINIZIP_LIBRARIES}) include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}) diff --git a/src/keeshare/DatabaseSettingsPageKeeShare.cpp b/src/keeshare/DatabaseSettingsPageKeeShare.cpp new file mode 100644 index 000000000..f197c3e66 --- /dev/null +++ b/src/keeshare/DatabaseSettingsPageKeeShare.cpp @@ -0,0 +1,49 @@ +/* + * 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 "DatabaseSettingsPageKeeShare.h" + +#include "core/Database.h" +#include "gui/Icons.h" +#include "keeshare/DatabaseSettingsWidgetKeeShare.h" + +QString DatabaseSettingsPageKeeShare::name() +{ + return "KeeShare"; +} + +QIcon DatabaseSettingsPageKeeShare::icon() +{ + return icons()->icon("preferences-system-network-sharing"); +} + +QWidget* DatabaseSettingsPageKeeShare::createWidget() +{ + return new DatabaseSettingsWidgetKeeShare(); +} + +void DatabaseSettingsPageKeeShare::loadSettings(QWidget* widget, QSharedPointer db) +{ + DatabaseSettingsWidgetKeeShare* settingsWidget = reinterpret_cast(widget); + settingsWidget->loadSettings(db); +} + +void DatabaseSettingsPageKeeShare::saveSettings(QWidget* widget) +{ + DatabaseSettingsWidgetKeeShare* settingsWidget = reinterpret_cast(widget); + settingsWidget->saveSettings(); +} diff --git a/src/gui/reports/ReportsPagePasskeys.h b/src/keeshare/DatabaseSettingsPageKeeShare.h similarity index 68% rename from src/gui/reports/ReportsPagePasskeys.h rename to src/keeshare/DatabaseSettingsPageKeeShare.h index 8be0aa7d0..1de48eae8 100644 --- a/src/gui/reports/ReportsPagePasskeys.h +++ b/src/keeshare/DatabaseSettingsPageKeeShare.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2023 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 @@ -15,21 +15,14 @@ * along with this program. If not, see . */ -#ifndef KEEPASSXC_REPORTSPAGEPASSKEYS_H -#define KEEPASSXC_REPORTSPAGEPASSKEYS_H +#ifndef KEEPASSXC_DATABASESETTINGSPAGEKEESHARE_H +#define KEEPASSXC_DATABASESETTINGSPAGEKEESHARE_H -#include "ReportsDialog.h" -#include "ReportsWidgetPasskeys.h" +#include "gui/dbsettings/DatabaseSettingsDialog.h" -class ReportsWidgetBrowserStatistics; - -class ReportsPagePasskeys : public IReportsPage +class DatabaseSettingsPageKeeShare : public IDatabaseSettingsPage { public: - ReportsWidgetPasskeys* m_passkeysWidget; - - ReportsPagePasskeys(); - QString name() override; QIcon icon() override; QWidget* createWidget() override; @@ -37,4 +30,4 @@ public: void saveSettings(QWidget* widget) override; }; -#endif // KEEPASSXC_REPORTSPAGEPASSKEYS_H +#endif // KEEPASSXC_DATABASESETTINGSPAGEKEESHARE_H diff --git a/src/keeshare/DatabaseSettingsWidgetKeeShare.cpp b/src/keeshare/DatabaseSettingsWidgetKeeShare.cpp index c0fdc4985..e72a86384 100644 --- a/src/keeshare/DatabaseSettingsWidgetKeeShare.cpp +++ b/src/keeshare/DatabaseSettingsWidgetKeeShare.cpp @@ -1,6 +1,6 @@ /* - * Copyright (C) 2023 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 @@ -36,7 +36,7 @@ DatabaseSettingsWidgetKeeShare::~DatabaseSettingsWidgetKeeShare() { } -void DatabaseSettingsWidgetKeeShare::loadSettings(const QSharedPointer& db) +void DatabaseSettingsWidgetKeeShare::loadSettings(QSharedPointer db) { m_db = db; diff --git a/src/keeshare/DatabaseSettingsWidgetKeeShare.h b/src/keeshare/DatabaseSettingsWidgetKeeShare.h index 765bc3a36..bebc0feeb 100644 --- a/src/keeshare/DatabaseSettingsWidgetKeeShare.h +++ b/src/keeshare/DatabaseSettingsWidgetKeeShare.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2023 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 @@ -37,7 +37,7 @@ public: explicit DatabaseSettingsWidgetKeeShare(QWidget* parent = nullptr); ~DatabaseSettingsWidgetKeeShare(); - void loadSettings(const QSharedPointer& db); + void loadSettings(QSharedPointer db); void saveSettings(); private: diff --git a/src/keeshare/ShareExport.cpp b/src/keeshare/ShareExport.cpp index 1a64ccde0..670a2911e 100644 --- a/src/keeshare/ShareExport.cpp +++ b/src/keeshare/ShareExport.cpp @@ -53,7 +53,7 @@ namespace continue; } // We could do more sophisticated **** trying to point the reference to the next in-scope reference - // but those cases with high probability constructed examples and very rare in real usage + // but those cases with high propability constructed examples and very rare in real usage const auto* sourceReference = sourceDb->rootGroup()->findEntryByUuid(targetEntry->uuid()); const auto resolvedValue = sourceReference->resolveMultiplePlaceholders(standardValue); targetEntry->setUpdateTimeinfo(false); @@ -92,7 +92,8 @@ namespace key->addKey(QSharedPointer::create(reference.password)); targetDb->setKey(key); - auto obsoleteRoot = targetDb->setRootGroup(targetRoot); + auto* obsoleteRoot = targetDb->rootGroup(); + targetDb->setRootGroup(targetRoot); delete obsoleteRoot; targetDb->metadata()->setName(sourceRoot->name()); @@ -172,7 +173,7 @@ ShareObserver::Result ShareExport::intoContainer(const QString& resolvedPath, KeePass2Writer writer; if (!writer.writeDatabase(&buffer, targetDb.data())) { - qWarning("Serializing export database failed: %s.", writer.errorString().toLatin1().data()); + qWarning("Serializing export dabase failed: %s.", writer.errorString().toLatin1().data()); return {reference.path, ShareObserver::Result::Error, writer.errorString()}; } @@ -201,7 +202,7 @@ ShareObserver::Result ShareExport::intoContainer(const QString& resolvedPath, } else { QString error; if (!targetDb->saveAs(resolvedPath, Database::Atomic, {}, &error)) { - qWarning("Exporting database failed: %s.", error.toLatin1().data()); + qWarning("Exporting dabase failed: %s.", error.toLatin1().data()); return {resolvedPath, ShareObserver::Result::Error, error}; } } diff --git a/src/keeshare/ShareImport.cpp b/src/keeshare/ShareImport.cpp index da978423f..eb93912e7 100644 --- a/src/keeshare/ShareImport.cpp +++ b/src/keeshare/ShareImport.cpp @@ -80,12 +80,10 @@ ShareObserver::Result ShareImport::containerInto(const QString& resolvedPath, auto key = QSharedPointer::create(); key->addKey(QSharedPointer::create(reference.password)); auto sourceDb = QSharedPointer::create(); - sourceDb->setEmitModified(false); if (!reader.readDatabase(&buffer, key, sourceDb.data())) { qCritical("Error while parsing the database: %s", qPrintable(reader.errorString())); return {reference.path, ShareObserver::Result::Error, reader.errorString()}; } - sourceDb->setEmitModified(true); qDebug("Synchronize %s %s with %s", qPrintable(reference.path), @@ -94,7 +92,6 @@ ShareObserver::Result ShareImport::containerInto(const QString& resolvedPath, Merger merger(sourceDb->rootGroup(), targetGroup); merger.setForcedMergeMode(Group::Synchronize); - merger.setSkipDatabaseCustomData(true); auto changelist = merger.merge(); if (!changelist.isEmpty()) { return {reference.path, ShareObserver::Result::Success, ShareImport::tr("Successful import")}; diff --git a/src/keeshare/ShareObserver.cpp b/src/keeshare/ShareObserver.cpp index 5a0da292d..ac1c44baa 100644 --- a/src/keeshare/ShareObserver.cpp +++ b/src/keeshare/ShareObserver.cpp @@ -54,7 +54,6 @@ ShareObserver::ShareObserver(QSharedPointer db, QObject* parent) ShareObserver::~ShareObserver() { - m_db->disconnect(this); } void ShareObserver::deinitialize() diff --git a/src/keys/ChallengeResponseKey.cpp b/src/keys/ChallengeResponseKey.cpp index eb52b7d09..6502e3714 100644 --- a/src/keys/ChallengeResponseKey.cpp +++ b/src/keys/ChallengeResponseKey.cpp @@ -30,7 +30,7 @@ ChallengeResponseKey::ChallengeResponseKey(YubiKeySlot keySlot) QByteArray ChallengeResponseKey::rawKey() const { - return {m_key.data(), static_cast(m_key.size())}; + return QByteArray(m_key.data(), m_key.size()); } void ChallengeResponseKey::setRawKey(const QByteArray&) diff --git a/src/keys/FileKey.cpp b/src/keys/FileKey.cpp index 167b0462d..b50ffb30a 100644 --- a/src/keys/FileKey.cpp +++ b/src/keys/FileKey.cpp @@ -161,7 +161,7 @@ bool FileKey::load(const QString& fileName, QString* errorMsg) */ QByteArray FileKey::rawKey() const { - return {m_key.data(), int(m_key.size())}; + return QByteArray(m_key.data(), m_key.size()); } void FileKey::setRawKey(const QByteArray& data) diff --git a/src/keys/FileKey.h b/src/keys/FileKey.h index 65cd955a7..795f03bdb 100644 --- a/src/keys/FileKey.h +++ b/src/keys/FileKey.h @@ -19,7 +19,6 @@ #ifndef KEEPASSX_FILEKEY_H #define KEEPASSX_FILEKEY_H -#include #include #include "keys/Key.h" diff --git a/src/keys/PasswordKey.cpp b/src/keys/PasswordKey.cpp index 7e0670647..60006dc30 100644 --- a/src/keys/PasswordKey.cpp +++ b/src/keys/PasswordKey.cpp @@ -44,7 +44,7 @@ QByteArray PasswordKey::rawKey() const if (!m_isInitialized) { return {}; } - return {m_key.data(), int(m_key.size())}; + return QByteArray(m_key.data(), m_key.size()); } void PasswordKey::setRawKey(const QByteArray& data) diff --git a/src/keys/drivers/YubiKey.cpp b/src/keys/drivers/YubiKey.cpp index c07bcc072..f735c5dba 100644 --- a/src/keys/drivers/YubiKey.cpp +++ b/src/keys/drivers/YubiKey.cpp @@ -20,13 +20,10 @@ #include "YubiKeyInterfacePCSC.h" #include "YubiKeyInterfaceUSB.h" -#include -#include #include -QMutex YubiKey::s_interfaceMutex; - YubiKey::YubiKey() + : m_interfaces_detect_mutex(QMutex::Recursive) { int num_interfaces = 0; @@ -73,48 +70,78 @@ bool YubiKey::isInitialized() bool YubiKey::findValidKeys() { - QMutexLocker lock(&s_interfaceMutex); - - findValidKeys(lock); - - return !m_usbKeys.isEmpty() || !m_pcscKeys.isEmpty(); -} - -void YubiKey::findValidKeys(const QMutexLocker& locker) -{ - // Check QMutexLocker since version 6.4 - Q_UNUSED(locker); - - m_connectedKeys = 0; - m_usbKeys = YubiKeyInterfaceUSB::instance()->findValidKeys(m_connectedKeys); - m_pcscKeys = YubiKeyInterfacePCSC::instance()->findValidKeys(m_connectedKeys); + bool found = false; + if (m_interfaces_detect_mutex.tryLock(1000)) { + found |= YubiKeyInterfaceUSB::instance()->findValidKeys(); + found |= YubiKeyInterfacePCSC::instance()->findValidKeys(); + m_interfaces_detect_mutex.unlock(); + } + return found; } void YubiKey::findValidKeysAsync() { - QtConcurrent::run([this] { emit detectComplete(findValidKeys()); }); + QtConcurrent::run([this] { + bool found = findValidKeys(); + emit detectComplete(found); + }); } -YubiKey::KeyMap YubiKey::foundKeys() +QList YubiKey::foundKeys() { - QMutexLocker lock(&s_interfaceMutex); - KeyMap foundKeys = m_usbKeys; - foundKeys.unite(m_pcscKeys); + QList foundKeys; + + auto keys = YubiKeyInterfaceUSB::instance()->foundKeys(); + QList handledSerials = keys.uniqueKeys(); + for (auto serial : handledSerials) { + for (const auto& key : keys.values(serial)) { + foundKeys.append({serial, key.first}); + } + } + + keys = YubiKeyInterfacePCSC::instance()->foundKeys(); + for (auto serial : keys.uniqueKeys()) { + // Ignore keys that were detected on USB interface already + if (handledSerials.contains(serial)) { + continue; + } + + for (const auto& key : keys.values(serial)) { + foundKeys.append({serial, key.first}); + } + } return foundKeys; } -int YubiKey::connectedKeys() +QString YubiKey::getDisplayName(YubiKeySlot slot) { - QMutexLocker lock(&s_interfaceMutex); + QString name; + name.clear(); - return m_connectedKeys; + if (YubiKeyInterfaceUSB::instance()->hasFoundKey(slot)) { + name += YubiKeyInterfaceUSB::instance()->getDisplayName(slot); + } + + if (YubiKeyInterfacePCSC::instance()->hasFoundKey(slot)) { + // In some cases, the key might present on two interfaces + // This should usually never happen, because the PCSC interface + // filters the "virtual yubikey reader device". + if (!name.isNull()) { + name += " = "; + } + name += YubiKeyInterfacePCSC::instance()->getDisplayName(slot); + } + + if (!name.isNull()) { + return name; + } + + return tr("%1 No interface, slot %2").arg(QString::number(slot.first), QString::number(slot.second)); } QString YubiKey::errorMessage() { - QMutexLocker lock(&s_interfaceMutex); - QString error; error.clear(); if (!m_error.isNull()) { @@ -150,13 +177,11 @@ QString YubiKey::errorMessage() */ bool YubiKey::testChallenge(YubiKeySlot slot, bool* wouldBlock) { - QMutexLocker lock(&s_interfaceMutex); - - if (m_usbKeys.contains(slot)) { + if (YubiKeyInterfaceUSB::instance()->hasFoundKey(slot)) { return YubiKeyInterfaceUSB::instance()->testChallenge(slot, wouldBlock); } - if (m_pcscKeys.contains(slot)) { + if (YubiKeyInterfacePCSC::instance()->hasFoundKey(slot)) { return YubiKeyInterfacePCSC::instance()->testChallenge(slot, wouldBlock); } @@ -175,25 +200,23 @@ bool YubiKey::testChallenge(YubiKeySlot slot, bool* wouldBlock) YubiKey::ChallengeResult YubiKey::challenge(YubiKeySlot slot, const QByteArray& challenge, Botan::secure_vector& response) { - QMutexLocker lock(&s_interfaceMutex); - m_error.clear(); // Make sure we tried to find available keys - if (m_usbKeys.isEmpty() && m_pcscKeys.isEmpty()) { - findValidKeys(lock); + if (foundKeys().isEmpty()) { + findValidKeys(); } - if (m_usbKeys.contains(slot)) { + if (YubiKeyInterfaceUSB::instance()->hasFoundKey(slot)) { return YubiKeyInterfaceUSB::instance()->challenge(slot, challenge, response); } - if (m_pcscKeys.contains(slot)) { + if (YubiKeyInterfacePCSC::instance()->hasFoundKey(slot)) { return YubiKeyInterfacePCSC::instance()->challenge(slot, challenge, response); } m_error = tr("Could not find interface for hardware key with serial number %1. Please connect it to continue.") .arg(slot.first); - return ChallengeResult::YCR_ERROR; + return YubiKey::ChallengeResult::YCR_ERROR; } diff --git a/src/keys/drivers/YubiKey.h b/src/keys/drivers/YubiKey.h index 5578fd8df..312dea897 100644 --- a/src/keys/drivers/YubiKey.h +++ b/src/keys/drivers/YubiKey.h @@ -20,11 +20,9 @@ #define KEEPASSX_YUBIKEY_H #include -#include #include #include #include - #include typedef QPair YubiKeySlot; @@ -38,8 +36,6 @@ class YubiKey : public QObject Q_OBJECT public: - using KeyMap = QMap; - enum class ChallengeResult : int { YCR_ERROR = 0, @@ -53,8 +49,8 @@ public: bool findValidKeys(); void findValidKeysAsync(); - KeyMap foundKeys(); - int connectedKeys(); + QList foundKeys(); + QString getDisplayName(YubiKeySlot slot); ChallengeResult challenge(YubiKeySlot slot, const QByteArray& challenge, Botan::secure_vector& response); bool testChallenge(YubiKeySlot slot, bool* wouldBlock = nullptr); @@ -84,20 +80,12 @@ signals: private: explicit YubiKey(); - void findValidKeys(const QMutexLocker& locker); - static YubiKey* m_instance; QTimer m_interactionTimer; bool m_initialized = false; QString m_error; - - static QMutex s_interfaceMutex; - - KeyMap m_usbKeys; - KeyMap m_pcscKeys; - - int m_connectedKeys = 0; + QMutex m_interfaces_detect_mutex; Q_DISABLE_COPY(YubiKey) }; diff --git a/src/keys/drivers/YubiKeyInterface.cpp b/src/keys/drivers/YubiKeyInterface.cpp index 5f7487a91..fe7f984b7 100644 --- a/src/keys/drivers/YubiKeyInterface.cpp +++ b/src/keys/drivers/YubiKeyInterface.cpp @@ -19,7 +19,10 @@ #include "YubiKeyInterface.h" YubiKeyInterface::YubiKeyInterface() + : m_mutex(QMutex::Recursive) { + m_interactionTimer.setSingleShot(true); + m_interactionTimer.setInterval(300); } bool YubiKeyInterface::isInitialized() const @@ -27,6 +30,36 @@ bool YubiKeyInterface::isInitialized() const return m_initialized; } +QMultiMap> YubiKeyInterface::foundKeys() +{ + return m_foundKeys; +} + +bool YubiKeyInterface::hasFoundKey(YubiKeySlot slot) +{ + // A serial number of 0 implies use the first key + if (slot.first == 0 && !m_foundKeys.isEmpty()) { + return true; + } + + for (const auto& key : m_foundKeys.values(slot.first)) { + if (slot.second == key.first) { + return true; + } + } + return false; +} + +QString YubiKeyInterface::getDisplayName(YubiKeySlot slot) +{ + for (const auto& key : m_foundKeys.values(slot.first)) { + if (slot.second == key.first) { + return key.second; + } + } + return tr("%1 Invalid slot specified - %2").arg(QString::number(slot.first), QString::number(slot.second)); +} + QString YubiKeyInterface::errorMessage() { return m_error; diff --git a/src/keys/drivers/YubiKeyInterface.h b/src/keys/drivers/YubiKeyInterface.h index 276f520a6..6a7294616 100644 --- a/src/keys/drivers/YubiKeyInterface.h +++ b/src/keys/drivers/YubiKeyInterface.h @@ -20,6 +20,7 @@ #define KEEPASSX_YUBIKEY_INTERFACE_H #include "YubiKey.h" + #include /** @@ -31,8 +32,11 @@ class YubiKeyInterface : public QObject public: bool isInitialized() const; + QMultiMap> foundKeys(); + bool hasFoundKey(YubiKeySlot slot); + QString getDisplayName(YubiKeySlot slot); - virtual YubiKey::KeyMap findValidKeys(int& connectedKeys) = 0; + virtual bool findValidKeys() = 0; virtual YubiKey::ChallengeResult challenge(YubiKeySlot slot, const QByteArray& challenge, Botan::secure_vector& response) = 0; virtual bool testChallenge(YubiKeySlot slot, bool* wouldBlock) = 0; @@ -56,6 +60,7 @@ signals: protected: explicit YubiKeyInterface(); + virtual YubiKey::ChallengeResult performChallenge(void* key, int slot, bool mayBlock, @@ -63,6 +68,10 @@ protected: Botan::secure_vector& response) = 0; virtual bool performTestChallenge(void* key, int slot, bool* wouldBlock) = 0; + QMultiMap> m_foundKeys; + + QMutex m_mutex; + QTimer m_interactionTimer; bool m_initialized = false; QString m_error; diff --git a/src/keys/drivers/YubiKeyInterfacePCSC.cpp b/src/keys/drivers/YubiKeyInterfacePCSC.cpp index 765d3d0d8..e871d63d4 100644 --- a/src/keys/drivers/YubiKeyInterfacePCSC.cpp +++ b/src/keys/drivers/YubiKeyInterfacePCSC.cpp @@ -20,8 +20,6 @@ #include "core/Tools.h" #include "crypto/Random.h" -#include - // MSYS2 does not define these macros // So set them to the value used by pcsc-lite #ifndef MAX_ATR_SIZE @@ -72,8 +70,7 @@ namespace rv = SCardListReaders(context, nullptr, nullptr, &dwReaders); // On windows, USB hot-plugging causes the underlying API server to die // So on every USB unplug event, the API context has to be recreated - // On Linux, restarting the pcsc daemon causes the API server to die as well - if (rv == SCARD_E_SERVICE_STOPPED || rv == SCARD_E_NO_SERVICE) { + if (rv == SCARD_E_SERVICE_STOPPED) { // Dont care if the release works since the handle might be broken SCardReleaseContext(context); rv = SCardEstablishContext(SCARD_SCOPE_SYSTEM, nullptr, nullptr, &context); @@ -110,7 +107,7 @@ namespace rv = SCardListReaders(context, nullptr, mszReaders, &dwReaders); if (rv == SCARD_S_SUCCESS) { char* readhead = mszReaders; - // Names are separated by a null byte + // Names are seperated by a null byte // The list is terminated by two null bytes while (*readhead != '\0') { QString reader = QString::fromUtf8(readhead); @@ -245,68 +242,23 @@ namespace if (rv == SCARD_S_SUCCESS) { // Write to and read from the card // pioRecvPci is nullptr because we do not expect any PCI response header - const SCUINT dwRecvBufferSize = dwRecvLength; rv = SCardTransmit(handle, pioSendPci, pbSendBuffer, dwSendLength, nullptr, pbRecvBuffer, &dwRecvLength); - - if (dwRecvLength < 2) { - // Any valid response should be at least 2 bytes (response status) - // However the protocol itself could fail - return SCARD_E_UNEXPECTED; - } - - uint8_t SW1 = pbRecvBuffer[dwRecvLength - 2]; - // Check for the MoreDataAvailable SW1 code. If present, send GetResponse command repeatedly, until success - // SW, or filling the receiving buffer. - if (SW1 == SW_MORE_DATA_HIGH) { - while (true) { - if (dwRecvBufferSize < dwRecvLength) { - // No free buffer space remaining - return SCARD_E_UNEXPECTED; - } - // Overwrite Status Word in the receiving buffer - dwRecvLength -= 2; - SCUINT dwRecvLength_sr = dwRecvBufferSize - dwRecvLength; // at least 2 bytes for SW are available - const uint8_t bRecvDataSize = - qBound(static_cast(0), dwRecvLength_sr - 2, static_cast(255)); - uint8_t pbSendBuffer_sr[] = {CLA_ISO, INS_GET_RESPONSE, 0, 0, bRecvDataSize}; - rv = SCardTransmit(handle, - pioSendPci, - pbSendBuffer_sr, - sizeof pbSendBuffer_sr, - nullptr, - pbRecvBuffer + dwRecvLength, - &dwRecvLength_sr); - - // Check if any new data are received. Break if the smart card's status is other than success, - // or no new bytes were received. - if (!(rv == SCARD_S_SUCCESS && dwRecvLength_sr >= 2)) { - break; - } - - dwRecvLength += dwRecvLength_sr; - SW1 = pbRecvBuffer[dwRecvLength - 2]; - // Break the loop if there is no continuation status - if (SW1 != SW_MORE_DATA_HIGH) { - break; - } - } - } - if (rv == SCARD_S_SUCCESS) { if (dwRecvLength < 2) { // Any valid response should be at least 2 bytes (response status) // However the protocol itself could fail rv = SCARD_E_UNEXPECTED; } else { - const uint8_t SW_HIGH = pbRecvBuffer[dwRecvLength - 2]; - const uint8_t SW_LOW = pbRecvBuffer[dwRecvLength - 1]; - if (SW_HIGH == SW_OK_HIGH && SW_LOW == SW_OK_LOW) { + if (pbRecvBuffer[dwRecvLength - 2] == SW_OK_HIGH && pbRecvBuffer[dwRecvLength - 1] == SW_OK_LOW) { rv = SCARD_S_SUCCESS; - } else if (SW_HIGH == SW_PRECOND_HIGH && SW_LOW == SW_PRECOND_LOW) { + } else if (pbRecvBuffer[dwRecvLength - 2] == SW_PRECOND_HIGH + && pbRecvBuffer[dwRecvLength - 1] == SW_PRECOND_LOW) { // This happens if the key requires eg. a button press or if the applet times out // Solution: Re-present the card to the reader rv = SCARD_W_CARD_NOT_AUTHENTICATED; - } else if ((SW_HIGH == SW_NOTFOUND_HIGH && SW_LOW == SW_NOTFOUND_LOW) || SW_HIGH == SW_UNSUP_HIGH) { + } else if ((pbRecvBuffer[dwRecvLength - 2] == SW_NOTFOUND_HIGH + && pbRecvBuffer[dwRecvLength - 1] == SW_NOTFOUND_LOW) + || pbRecvBuffer[dwRecvLength - 2] == SW_UNSUP_HIGH) { // This happens eg. during a select command when the AID is not found rv = SCARD_E_FILE_NOT_FOUND; } else { @@ -333,10 +285,9 @@ namespace auto pbSendBuffer = new uint8_t[5 + handle.second.size()]; memcpy(pbSendBuffer, pbSendBuffer_head, 5); memcpy(pbSendBuffer + 5, handle.second.constData(), handle.second.size()); - // Give it more space in case custom implementations have longer answer to select - uint8_t pbRecvBuffer[64] = { + uint8_t pbRecvBuffer[12] = { 0}; // 3 bytes version, 1 byte program counter, other stuff for various implementations, 2 bytes status - SCUINT dwRecvLength = sizeof pbRecvBuffer; + SCUINT dwRecvLength = 12; auto rv = transmit(handle.first, pbSendBuffer, 5 + handle.second.size(), pbRecvBuffer, dwRecvLength); @@ -469,6 +420,40 @@ namespace return SCARD_E_NO_SMARTCARD; } + /*** + * @brief Reads the status of a key + * + * The status is used for the firmware version only atm. + * + * @param handle Smartcard handle and applet ID bytestring pair + * @param version The firmware version in [major, minor, patch] format + * + * @return SCARD_S_SUCCESS on success + */ + RETVAL getStatus(const SCardAID& handle, uint8_t version[3]) + { + // Ensure the transmission is retransmitted after card resets + return transactRetry(handle.first, [&handle, &version]() { + auto rv = selectApplet(handle); + + // Ensure that the card is always selected before sending the command + if (rv != SCARD_S_SUCCESS) { + return rv; + } + + uint8_t pbSendBuffer[5] = {CLA_ISO, INS_STATUS, 0, 0, 6}; + uint8_t pbRecvBuffer[8] = {0}; // 4 bytes serial, 2 bytes other stuff, 2 bytes status + SCUINT dwRecvLength = 8; + + rv = transmit(handle.first, pbSendBuffer, 5, pbRecvBuffer, dwRecvLength); + if (rv == SCARD_S_SUCCESS && dwRecvLength >= 3) { + memcpy(version, pbRecvBuffer, 3); + } + + return rv; + }); + } + /*** * @brief Performs a challenge-response transmission * @@ -513,6 +498,7 @@ namespace return rv; }); } + } // namespace YubiKeyInterfacePCSC::YubiKeyInterfacePCSC() @@ -543,17 +529,19 @@ YubiKeyInterfacePCSC* YubiKeyInterfacePCSC::instance() return m_instance; } -YubiKey::KeyMap YubiKeyInterfacePCSC::findValidKeys(int& connectedKeys) +bool YubiKeyInterfacePCSC::findValidKeys() { m_error.clear(); if (!isInitialized()) { - return {}; + return false; } - - YubiKey::KeyMap foundKeys; + // Remove all known keys + m_foundKeys.clear(); // Connect to each reader and look for cards - for (const auto& reader_name : getReaders(m_sc_context)) { + auto readers_list = getReaders(m_sc_context); + foreach (const QString& reader_name, readers_list) { + /* Some Yubikeys present their PCSC interface via USB as well Although this would not be a problem in itself, we filter these connections because in USB mode, @@ -574,74 +562,65 @@ YubiKey::KeyMap YubiKeyInterfacePCSC::findValidKeys(int& connectedKeys) &hCard, &dwActiveProtocol); - if (rv != SCARD_S_SUCCESS) { - // Cannot connect to the reader - continue; - } + if (rv == SCARD_S_SUCCESS) { + // Read the potocol and the ATR record + char pbReader[MAX_READERNAME] = {0}; + SCUINT dwReaderLen = sizeof(pbReader); + SCUINT dwState = 0; + SCUINT dwProt = SCARD_PROTOCOL_UNDEFINED; + uint8_t pbAtr[MAX_ATR_SIZE] = {0}; + SCUINT dwAtrLen = sizeof(pbAtr); - auto finally = qScopeGuard([hCard]() { SCardDisconnect(hCard, SCARD_LEAVE_CARD); }); + rv = SCardStatus(hCard, pbReader, &dwReaderLen, &dwState, &dwProt, pbAtr, &dwAtrLen); + if (rv == SCARD_S_SUCCESS && (dwProt == SCARD_PROTOCOL_T0 || dwProt == SCARD_PROTOCOL_T1)) { + // Find which AID to use + SCardAID satr; + if (findAID(hCard, m_aid_codes, satr)) { + // Build the UI name using the display name found in the ATR map + QByteArray atr(reinterpret_cast(pbAtr), dwAtrLen); + QString name("Unknown Key"); + if (m_atr_names.contains(atr)) { + name = m_atr_names.value(atr); + } + // Add the firmware version and the serial number + uint8_t version[3] = {0}; + getStatus(satr, version); + name += + QString(" v%1.%2.%3") + .arg(QString::number(version[0]), QString::number(version[1]), QString::number(version[2])); - // Read the protocol and the ATR record - char pbReader[MAX_READERNAME] = {0}; - SCUINT dwReaderLen = sizeof(pbReader); - SCUINT dwState = 0; - SCUINT dwProt = SCARD_PROTOCOL_UNDEFINED; - uint8_t pbAtr[MAX_ATR_SIZE] = {0}; - SCUINT dwAtrLen = sizeof(pbAtr); + unsigned int serial = 0; + getSerial(satr, serial); - rv = SCardStatus(hCard, pbReader, &dwReaderLen, &dwState, &dwProt, pbAtr, &dwAtrLen); - if (rv != SCARD_S_SUCCESS || (dwProt != SCARD_PROTOCOL_T0 && dwProt != SCARD_PROTOCOL_T1)) { - // Could not read the ATR record or the protocol is not supported - continue; - } - - // Find which AID to use - SCardAID satr; - if (findAID(hCard, m_aid_codes, satr)) { - // Build the UI name using the display name found in the ATR map - QByteArray atr(reinterpret_cast(pbAtr), dwAtrLen); - QString name("Unknown Key"); - if (m_atr_names.contains(atr)) { - name = m_atr_names.value(atr); - } - - unsigned int serial = 0; - getSerial(satr, serial); - - ++connectedKeys; - - /* This variable indicates that the key is locked / timed out. - When using the key via NFC, the user has to re-present the key to clear the timeout. - Also, the key can be programmatically reset (see below). - When using the key via USB (where the Yubikey presents as a PCSC reader in itself), - the non-HMAC-SHA1 slots (eg. OTP) are incorrectly recognized as locked HMAC-SHA1 slots. - Due to this conundrum, we exclude "locked" keys from the key enumeration, - but only if the reader is the "virtual yubikey reader device". - This also has the nice side effect of de-duplicating interfaces when a key - Is connected via USB and also accessible via PCSC */ - bool wouldBlock = false; - /* When the key is used via NFC, the lock state / time-out is cleared when - the smartcard connection is re-established / the applet is selected - so the next call to performTestChallenge actually clears the lock. - Due to this the key is unlocked, and we display it as such. - When the key times out in the time between the key listing and - the database unlock /save, an interaction request will be displayed. */ - for (int slot = 1; slot <= 2; ++slot) { - if (performTestChallenge(&satr, slot, &wouldBlock)) { - auto display = - tr("(NFC) %1 [%2] - Slot %3, %4", "YubiKey display fields") - .arg(name, - QString::number(serial), - QString::number(slot), - wouldBlock ? tr("Press", "USB Challenge-Response Key interaction request") - : tr("Passive", "USB Challenge-Response Key no interaction required")); - foundKeys.insert({serial, slot}, display); + /* This variable indicates that the key is locked / timed out. + When using the key via NFC, the user has to re-present the key to clear the timeout. + Also, the key can be programmatically reset (see below). + When using the key via USB (where the Yubikey presents as a PCSC reader in itself), + the non-HMAC-SHA1 slots (eg. OTP) are incorrectly recognized as locked HMAC-SHA1 slots. + Due to this conundrum, we exclude "locked" keys from the key enumeration, + but only if the reader is the "virtual yubikey reader device". + This also has the nice side effect of de-duplicating interfaces when a key + Is connected via USB and also accessible via PCSC */ + bool wouldBlock = false; + /* When the key is used via NFC, the lock state / time-out is cleared when + the smartcard connection is re-established / the applet is selected + so the next call to performTestChallenge actually clears the lock. + Due to this the key is unlocked, and we display it as such. + When the key times out in the time between the key listing and + the database unlock /save, an interaction request will be displayed. */ + for (int slot = 1; slot <= 2; ++slot) { + if (performTestChallenge(&satr, slot, &wouldBlock)) { + auto display = tr("(PCSC) %1 [%2] Challenge-Response - Slot %3") + .arg(name, QString::number(serial), QString::number(slot)); + m_foundKeys.insert(serial, {slot, display}); + } + } } } } } - return foundKeys; + return !m_foundKeys.isEmpty(); } bool YubiKeyInterfacePCSC::testChallenge(YubiKeySlot slot, bool* wouldBlock) @@ -682,6 +661,12 @@ YubiKeyInterfacePCSC::challenge(YubiKeySlot slot, const QByteArray& challenge, B return YubiKey::ChallengeResult::YCR_ERROR; } + // Try to grab a lock for 1 second, fail out if not possible + if (!m_mutex.tryLock(1000)) { + m_error = tr("Hardware key is currently in use."); + return YubiKey::ChallengeResult::YCR_ERROR; + } + // Try for a few seconds to find the key emit challengeStarted(); @@ -698,9 +683,10 @@ YubiKeyInterfacePCSC::challenge(YubiKeySlot slot, const QByteArray& challenge, B So we wait for the user to re-present it to clear the time-out This condition usually only happens when the key times out after the initial key listing, because performTestChallenge implicitly - resets the key (see comment above) */ + resets the key (see commnt above) */ if (ret == YubiKey::ChallengeResult::YCR_SUCCESS) { emit challengeCompleted(); + m_mutex.unlock(); return ret; } } @@ -714,6 +700,7 @@ YubiKeyInterfacePCSC::challenge(YubiKeySlot slot, const QByteArray& challenge, B .arg(slot.first) + m_error; emit challengeCompleted(); + m_mutex.unlock(); return YubiKey::ChallengeResult::YCR_ERROR; } @@ -741,7 +728,7 @@ YubiKey::ChallengeResult YubiKeyInterfacePCSC::performChallenge(void* key, * configurations even work, some docs say avoid it. * * In fact, the Yubikey always assumes the last byte (nr. 64) - * and all bytes of the same value preceding it to be padding. + * and all bytes of the same value preceeding it to be padding. * This does not conform fully to PKCS7, because the the actual value * of the padding bytes is ignored. */ diff --git a/src/keys/drivers/YubiKeyInterfacePCSC.h b/src/keys/drivers/YubiKeyInterfacePCSC.h index b91efe38e..e8e6307c9 100644 --- a/src/keys/drivers/YubiKeyInterfacePCSC.h +++ b/src/keys/drivers/YubiKeyInterfacePCSC.h @@ -24,7 +24,6 @@ #define CLA_ISO 0x00 #define INS_SELECT 0xA4 -#define INS_GET_RESPONSE 0xC0 #define SEL_APP_AID 0x04 #define INS_API_REQ 0x01 #define INS_STATUS 0x03 @@ -38,7 +37,6 @@ #define SW_NOTFOUND_HIGH 0x6A #define SW_NOTFOUND_LOW 0x82 #define SW_UNSUP_HIGH 0x6D -#define SW_MORE_DATA_HIGH 0x61 typedef QPair SCardAID; @@ -52,7 +50,7 @@ class YubiKeyInterfacePCSC : public YubiKeyInterface public: static YubiKeyInterfacePCSC* instance(); - YubiKey::KeyMap findValidKeys(int& connectedKeys) override; + bool findValidKeys() override; YubiKey::ChallengeResult challenge(YubiKeySlot slot, const QByteArray& challenge, Botan::secure_vector& response) override; @@ -71,13 +69,12 @@ private: Botan::secure_vector& response) override; bool performTestChallenge(void* key, int slot, bool* wouldBlock) override; - SCARDCONTEXT m_sc_context{}; + SCARDCONTEXT m_sc_context; // This list contains all the AID (application identifier) codes for the Yubikey HMAC-SHA1 applet // and also for compatible third-party ones. They will be tried one by one. const QList m_aid_codes = { QByteArrayLiteral("\xA0\x00\x00\x05\x27\x20\x01"), // Yubico Yubikey - QByteArrayLiteral("\xA0\x00\x00\x05\x27\x21\x01"), // Yubico Yubikey OATH AID / Nitrokey 3 Secrets App QByteArrayLiteral("\xA0\x00\x00\x06\x17\x00\x07\x53\x4E\xAF\x01") // Fidesmo development }; @@ -86,13 +83,16 @@ private: const QHash m_atr_names = { // Yubico Yubikeys {QByteArrayLiteral("\x3B\x8C\x80\x01\x59\x75\x62\x69\x6B\x65\x79\x4E\x45\x4F\x72\x33\x58"), "YubiKey NEO"}, - {QByteArrayLiteral("\x3B\x8C\x80\x01\x59\x75\x62\x69\x6B\x65\x79\x4E\x45\x4F\x72\xFF\x94"), "YubiKey NEO"}, - {QByteArrayLiteral("\x3B\x8D\x80\x01\x80\x73\xC0\x21\xC0\x57\x59\x75\x62\x69\x4B\x65\x79\xF9"), "YubiKey 5"}, - {QByteArrayLiteral("\x3B\x8D\x80\x01\x80\x73\xC0\x21\xC0\x57\x59\x75\x62\x69\x4B\x65\xFF\x7F"), "YubiKey 5"}, + {QByteArrayLiteral("\x3B\x8C\x80\x01\x59\x75\x62\x69\x6B\x65\x79\x4E\x45\x4F\x72\xFF\x94"), + "YubiKey NEO via NFC"}, + {QByteArrayLiteral("\x3B\x8D\x80\x01\x80\x73\xC0\x21\xC0\x57\x59\x75\x62\x69\x4B\x65\x79\xF9"), + "YubiKey 5 NFC via NFC"}, + {QByteArrayLiteral("\x3B\x8D\x80\x01\x80\x73\xC0\x21\xC0\x57\x59\x75\x62\x69\x4B\x65\xFF\x7F"), + "YubiKey 5 NFC via ACR122U"}, {QByteArrayLiteral("\x3B\xF8\x13\x00\x00\x81\x31\xFE\x15\x59\x75\x62\x69\x6B\x65\x79\x34\xD4"), - "YubiKey 4 - OTP+CCID"}, + "YubiKey 4 OTP+CCID"}, {QByteArrayLiteral("\x3B\xF9\x18\x00\xFF\x81\x31\xFE\x45\x50\x56\x5F\x4A\x33\x41\x30\x34\x30\x40"), - "YubiKey NEO - OTP+U2F+CCID (PKI)"}, + "YubiKey NEO OTP+U2F+CCID (PKI)"}, {QByteArrayLiteral("\x3B\xFA\x13\x00\x00\x81\x31\xFE\x15\x59\x75\x62\x69\x6B\x65\x79\x4E\x45\x4F\xA6"), "YubiKey NEO"}, {QByteArrayLiteral("\x3B\xFC\x13\x00\x00\x81\x31\xFE\x15\x59\x75\x62\x69\x6B\x65\x79\x4E\x45\x4F\x72\x33\xE1"), @@ -101,7 +101,7 @@ private: "YubiKey NEO"}, {QByteArrayLiteral( "\x3B\xFD\x13\x00\x00\x81\x31\xFE\x15\x80\x73\xC0\x21\xC0\x57\x59\x75\x62\x69\x4B\x65\x79\x40"), - "YubiKey 5 (PKI)"}, + "YubiKey 5 NFC (PKI)"}, {QByteArrayLiteral( "\x3B\xFD\x13\x00\x00\x81\x31\xFE\x45\x41\x37\x30\x30\x36\x43\x47\x20\x32\x34\x32\x52\x31\xD6"), "YubiKey NEO (token)"}, @@ -109,10 +109,7 @@ private: {QByteArrayLiteral("\x3B\x80\x80\x01\x01"), "Fidesmo Card 2.0"}, {QByteArrayLiteral("\x3B\x8A\x80\x01\x00\x31\xC1\x73\xC8\x40\x00\x00\x90\x00\x90"), "VivoKey Apex"}, {QByteArrayLiteral("\x3B\x8D\x80\x01\x00\x31\xC1\x73\xC8\x40\x00\x52\xA5\x10\x00\x90\x00\x70"), - "Dangerous Things FlexSecure"}, - {QByteArrayLiteral("\x3b\x8f\x01\x80\x5d\x4e\x69\x74\x72\x6f\x6b\x65\x79\x00\x00\x00\x00\x00\x6a"), - "Nitrokey 3"}, - }; + "Dangerous Things FlexSecure"}}; }; #endif // KEEPASSX_YUBIKEY_INTERFACE_PCSC_H diff --git a/src/keys/drivers/YubiKeyInterfaceUSB.cpp b/src/keys/drivers/YubiKeyInterfaceUSB.cpp index a39b39dce..ffbceeebb 100644 --- a/src/keys/drivers/YubiKeyInterfaceUSB.cpp +++ b/src/keys/drivers/YubiKeyInterfaceUSB.cpp @@ -18,23 +18,17 @@ #include "YubiKeyInterfaceUSB.h" +#include "core/Tools.h" #include "crypto/Random.h" #include "thirdparty/ykcore/ykcore.h" +#include "thirdparty/ykcore/ykdef.h" #include "thirdparty/ykcore/ykstatus.h" namespace { constexpr int MAX_KEYS = 4; - void closeKey(YK_KEY* key) - { - yk_close_key(key); - } - - using Yubikey = std::unique_ptr; - using YubikeyStatus = std::unique_ptr; - - Yubikey openKey(int index) + YK_KEY* openKey(int index) { static const int vids[] = {YUBICO_VID, ONLYKEY_VID}; static const int pids[] = {YUBIKEY_PID, @@ -49,52 +43,46 @@ namespace PLUS_U2F_OTP_PID, ONLYKEY_PID}; - return Yubikey{ - yk_open_key_vid_pid(vids, sizeof(vids) / sizeof(vids[0]), pids, sizeof(pids) / sizeof(pids[0]), index), - &closeKey}; + return yk_open_key_vid_pid(vids, sizeof(vids) / sizeof(vids[0]), pids, sizeof(pids) / sizeof(pids[0]), index); } - void printError() + void closeKey(YK_KEY* key) { - if (yk_errno == YK_EUSBERR) { - qWarning("Hardware key USB error: %s", yk_usb_strerror()); - } else { - qWarning("Hardware key error: %s", yk_strerror(yk_errno)); - } + yk_close_key(key); } unsigned int getSerial(YK_KEY* key) { unsigned int serial; - if (!yk_get_serial(key, 1, 0, &serial)) { - printError(); - return 0; - } + yk_get_serial(key, 1, 0, &serial); return serial; } - Yubikey openKeySerial(unsigned int serial) + YK_KEY* openKeySerial(unsigned int serial) { for (int i = 0; i < MAX_KEYS; ++i) { - auto key = openKey(i); - if (key) { + auto* yk_key = openKey(i); + if (yk_key) { // If the provided serial number is 0, or the key matches the serial, return it - if (serial == 0 || getSerial(key.get()) == serial) { - return key; + if (serial == 0 || getSerial(yk_key) == serial) { + return yk_key; } + closeKey(yk_key); } else if (yk_errno == YK_ENOKEY) { // No more connected keys break; + } else if (yk_errno == YK_EUSBERR) { + qWarning("Hardware key USB error: %s", yk_usb_strerror()); + } else { + qWarning("Hardware key error: %s", yk_strerror(yk_errno)); } - printError(); } - - return Yubikey{nullptr, &closeKey}; + return nullptr; } - } // namespace YubiKeyInterfaceUSB::YubiKeyInterfaceUSB() + : YubiKeyInterface() { if (!yk_init()) { qDebug("YubiKey: Failed to initialize USB interface."); @@ -119,63 +107,69 @@ YubiKeyInterfaceUSB* YubiKeyInterfaceUSB::instance() return m_instance; } -YubiKey::KeyMap YubiKeyInterfaceUSB::findValidKeys(int& connectedKeys) +bool YubiKeyInterfaceUSB::findValidKeys() { m_error.clear(); if (!isInitialized()) { - return {}; + return false; } - YubiKey::KeyMap keyMap; + // Remove all known keys + m_foundKeys.clear(); // Try to detect up to 4 connected hardware keys for (int i = 0; i < MAX_KEYS; ++i) { auto yk_key = openKey(i); if (yk_key) { - auto serial = getSerial(yk_key.get()); + auto serial = getSerial(yk_key); if (serial == 0) { + closeKey(yk_key); continue; } - ++connectedKeys; - - YubikeyStatus st{ykds_alloc(), &ykds_free}; - yk_get_status(yk_key.get(), st.get()); + auto st = ykds_alloc(); + yk_get_status(yk_key, st); int vid, pid; - yk_get_key_vid_pid(yk_key.get(), &vid, &pid); + yk_get_key_vid_pid(yk_key, &vid, &pid); QString name = m_pid_names.value(pid, tr("Unknown")); - if (vid == ONLYKEY_VID) { - name = QStringLiteral("OnlyKey %ver"); - } - if (name.contains("%ver")) { - name = name.replace("%ver", QString::number(ykds_version_major(st.get()))); + if (vid == 0x1d50) { + name = QStringLiteral("OnlyKey"); } + name += QString(" v%1.%2.%3") + .arg(QString::number(ykds_version_major(st)), + QString::number(ykds_version_minor(st)), + QString::number(ykds_version_build(st))); bool wouldBlock; for (int slot = 1; slot <= 2; ++slot) { auto config = (slot == 1 ? CONFIG1_VALID : CONFIG2_VALID); - if (!(ykds_touch_level(st.get()) & config)) { + if (!(ykds_touch_level(st) & config)) { // Slot is not configured continue; } // Don't actually challenge a YubiKey Neo or below, they always require button press // if it is enabled for the slot resulting in failed detection if (pid <= NEO_OTP_U2F_CCID_PID) { - auto display = tr("%1 [%2] - Slot %3", "YubiKey NEO display fields") + auto display = tr("(USB) %1 [%2] Configured Slot - %3") .arg(name, QString::number(serial), QString::number(slot)); - keyMap.insert({serial, slot}, display); - } else if (performTestChallenge(yk_key.get(), slot, &wouldBlock)) { + m_foundKeys.insert(serial, {slot, display}); + } else if (performTestChallenge(yk_key, slot, &wouldBlock)) { auto display = - tr("%1 [%2] - Slot %3, %4", "YubiKey display fields") + tr("(USB) %1 [%2] Challenge-Response - Slot %3 - %4") .arg(name, QString::number(serial), QString::number(slot), wouldBlock ? tr("Press", "USB Challenge-Response Key interaction request") : tr("Passive", "USB Challenge-Response Key no interaction required")); - keyMap.insert({serial, slot}, display); + m_foundKeys.insert(serial, {slot, display}); } } + + ykds_free(st); + closeKey(yk_key); + + Tools::wait(100); } else if (yk_errno == YK_ENOKEY) { // No more keys are connected break; @@ -186,7 +180,7 @@ YubiKey::KeyMap YubiKeyInterfaceUSB::findValidKeys(int& connectedKeys) } } - return keyMap; + return !m_foundKeys.isEmpty(); } /** @@ -200,11 +194,10 @@ YubiKey::KeyMap YubiKeyInterfaceUSB::findValidKeys(int& connectedKeys) bool YubiKeyInterfaceUSB::testChallenge(YubiKeySlot slot, bool* wouldBlock) { bool ret = false; - auto yk_key = openKeySerial(slot.first); + auto* yk_key = openKeySerial(slot.first); if (yk_key) { - ret = performTestChallenge(yk_key.get(), slot.second, wouldBlock); + ret = performTestChallenge(yk_key, slot.second, wouldBlock); } - return ret; } @@ -240,18 +233,27 @@ YubiKeyInterfaceUSB::challenge(YubiKeySlot slot, const QByteArray& challenge, Bo return YubiKey::ChallengeResult::YCR_ERROR; } - auto yk_key = openKeySerial(slot.first); + // Try to grab a lock for 1 second, fail out if not possible + if (!m_mutex.tryLock(1000)) { + m_error = tr("Hardware key is currently in use."); + return YubiKey::ChallengeResult::YCR_ERROR; + } + + auto* yk_key = openKeySerial(slot.first); if (!yk_key) { // Key with specified serial number is not connected m_error = tr("Could not find hardware key with serial number %1. Please plug it in to continue.").arg(slot.first); + m_mutex.unlock(); return YubiKey::ChallengeResult::YCR_ERROR; } emit challengeStarted(); - auto ret = performChallenge(yk_key.get(), slot.second, true, challenge, response); + auto ret = performChallenge(yk_key, slot.second, true, challenge, response); + closeKey(yk_key); emit challengeCompleted(); + m_mutex.unlock(); return ret; } diff --git a/src/keys/drivers/YubiKeyInterfaceUSB.h b/src/keys/drivers/YubiKeyInterfaceUSB.h index 9d5835f07..885188615 100644 --- a/src/keys/drivers/YubiKeyInterfaceUSB.h +++ b/src/keys/drivers/YubiKeyInterfaceUSB.h @@ -32,10 +32,8 @@ class YubiKeyInterfaceUSB : public YubiKeyInterface public: static YubiKeyInterfaceUSB* instance(); - static constexpr int YUBICO_USB_VID = YUBICO_VID; - static constexpr int ONLYKEY_USB_VID = ONLYKEY_VID; - YubiKey::KeyMap findValidKeys(int& connectedKeys) override; + bool findValidKeys() override; YubiKey::ChallengeResult challenge(YubiKeySlot slot, const QByteArray& challenge, Botan::secure_vector& response) override; @@ -55,22 +53,22 @@ private: bool performTestChallenge(void* key, int slot, bool* wouldBlock) override; // This map provides display names for the various USB PIDs of the Yubikeys - const QHash m_pid_names = {{YUBIKEY_PID, "YubiKey %ver"}, - {NEO_OTP_PID, "YubiKey NEO - OTP"}, - {NEO_OTP_CCID_PID, "YubiKey NEO - OTP+CCID"}, - {NEO_CCID_PID, "YubiKey NEO - CCID"}, - {NEO_U2F_PID, "YubiKey NEO - FIDO"}, - {NEO_OTP_U2F_PID, "YubiKey NEO - OTP+FIDO"}, - {NEO_U2F_CCID_PID, "YubiKey NEO - FIDO+CCID"}, - {NEO_OTP_U2F_CCID_PID, "YubiKey NEO - OTP+FIDO+CCID"}, - {YK4_OTP_PID, "YubiKey %ver - OTP"}, - {YK4_U2F_PID, "YubiKey %ver - U2F"}, - {YK4_OTP_U2F_PID, "YubiKey %ver - OTP+FIDO"}, - {YK4_CCID_PID, "YubiKey %ver - CCID"}, - {YK4_OTP_CCID_PID, "YubiKey %ver - OTP+CCID"}, - {YK4_U2F_CCID_PID, "YubiKey %ver - FIDO+CCID"}, - {YK4_OTP_U2F_CCID_PID, "YubiKey %ver - OTP+FIDO+CCID"}, - {PLUS_U2F_OTP_PID, "YubiKey plus - OTP+FIDO"}}; + const QHash m_pid_names = {{YUBIKEY_PID, "YubiKey 1/2"}, + {NEO_OTP_PID, "YubiKey NEO - OTP only"}, + {NEO_OTP_CCID_PID, "YubiKey NEO - OTP and CCID"}, + {NEO_CCID_PID, "YubiKey NEO - CCID only"}, + {NEO_U2F_PID, "YubiKey NEO - U2F only"}, + {NEO_OTP_U2F_PID, "YubiKey NEO - OTP and U2F"}, + {NEO_U2F_CCID_PID, "YubiKey NEO - U2F and CCID"}, + {NEO_OTP_U2F_CCID_PID, "YubiKey NEO - OTP, U2F and CCID"}, + {YK4_OTP_PID, "YubiKey 4/5 - OTP only"}, + {YK4_U2F_PID, "YubiKey 4/5 - U2F only"}, + {YK4_OTP_U2F_PID, "YubiKey 4/5 - OTP and U2F"}, + {YK4_CCID_PID, "YubiKey 4/5 - CCID only"}, + {YK4_OTP_CCID_PID, "YubiKey 4/5 - OTP and CCID"}, + {YK4_U2F_CCID_PID, "YubiKey 4/5 - U2F and CCID"}, + {YK4_OTP_U2F_CCID_PID, "YubiKey 4/5 - OTP, U2F and CCID"}, + {PLUS_U2F_OTP_PID, "YubiKey plus - OTP+U2F"}}; }; #endif // KEEPASSX_YUBIKEY_INTERFACE_USB_H diff --git a/src/keys/drivers/YubiKeyStub.cpp b/src/keys/drivers/YubiKeyStub.cpp index 64771e77d..5609c4b4a 100644 --- a/src/keys/drivers/YubiKeyStub.cpp +++ b/src/keys/drivers/YubiKeyStub.cpp @@ -18,7 +18,9 @@ #include "YubiKey.h" -YubiKey::YubiKey() = default; +YubiKey::YubiKey() +{ +} YubiKey* YubiKey::m_instance(Q_NULLPTR); @@ -45,14 +47,15 @@ void YubiKey::findValidKeysAsync() { } -YubiKey::KeyMap YubiKey::foundKeys() +QList YubiKey::foundKeys() { return {}; } -int YubiKey::connectedKeys() +QString YubiKey::getDisplayName(YubiKeySlot slot) { - return 0; + Q_UNUSED(slot); + return {}; } QString YubiKey::errorMessage() diff --git a/src/main.cpp b/src/main.cpp index 2c4da4c1f..3797e8998 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -19,7 +19,6 @@ #include #include #include -#include #include #include "cli/Utils.h" @@ -53,8 +52,10 @@ int main(int argc, char** argv) { QT_REQUIRE_VERSION(argc, argv, QT_VERSION_STR) +#if QT_VERSION >= QT_VERSION_CHECK(5, 6, 0) QApplication::setAttribute(Qt::AA_EnableHighDpiScaling); QGuiApplication::setAttribute(Qt::AA_UseHighDpiPixmaps); +#endif #if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0) && defined(Q_OS_WIN) QGuiApplication::setHighDpiScaleFactorRoundingPolicy(Qt::HighDpiScaleFactorRoundingPolicy::PassThrough); #endif @@ -65,12 +66,6 @@ int main(int argc, char** argv) Application::setApplicationVersion(KEEPASSXC_VERSION); app.setProperty("KPXC_QUALIFIED_APPNAME", "org.keepassxc.KeePassXC"); - // HACK: Prevent long-running threads from deadlocking the program with only 1 CPU - // See https://github.com/keepassxreboot/keepassxc/issues/10391 - if (QThreadPool::globalInstance()->maxThreadCount() < 2) { - QThreadPool::globalInstance()->setMaxThreadCount(2); - } - QCommandLineParser parser; parser.setApplicationDescription(QObject::tr("KeePassXC - cross-platform password manager")); parser.addPositionalArgument( @@ -83,8 +78,7 @@ int main(int argc, char** argv) QCommandLineOption keyfileOption("keyfile", QObject::tr("key file of the database"), "keyfile"); QCommandLineOption pwstdinOption("pw-stdin", QObject::tr("read password of the database from stdin")); QCommandLineOption allowScreenCaptureOption("allow-screencapture", - QObject::tr("allow screenshots and app recording (Windows/macOS)")); - QCommandLineOption startMinimized("minimized", QObject::tr("start minimized to the system tray")); + QObject::tr("allow app screen recordering and screenshots")); QCommandLineOption helpOption = parser.addHelpOption(); QCommandLineOption versionOption = parser.addVersionOption(); @@ -95,8 +89,10 @@ int main(int argc, char** argv) parser.addOption(keyfileOption); parser.addOption(pwstdinOption); parser.addOption(debugInfoOption); - parser.addOption(allowScreenCaptureOption); - parser.addOption(startMinimized); + + if (osUtils->canPreventScreenCapture()) { + parser.addOption(allowScreenCaptureOption); + } parser.process(app); @@ -109,7 +105,7 @@ int main(int argc, char** argv) if (parser.isSet(debugInfoOption)) { QTextStream out(stdout, QIODevice::WriteOnly); QString debugInfo = Tools::debugInfo().append("\n").append(Crypto::debugInfo()); - out << debugInfo << Qt::endl; + out << debugInfo << endl; return EXIT_SUCCESS; } @@ -145,7 +141,7 @@ int main(int argc, char** argv) if (app.isAlreadyRunning()) { if (parser.isSet(lockOption)) { if (app.sendLockToInstance()) { - qInfo() << QObject::tr("Databases have been locked.").toUtf8().constData(); + qInfo() << QObject::tr("Locked databases.").toUtf8().constData(); } else { qWarning() << QObject::tr("Database failed to lock.").toUtf8().constData(); return EXIT_FAILURE; @@ -176,46 +172,37 @@ int main(int argc, char** argv) return EXIT_FAILURE; } - Utils::setDefaultTextStreams(); - // Apply the configured theme before creating any GUI elements app.applyTheme(); +#if QT_VERSION >= QT_VERSION_CHECK(5, 7, 0) QGuiApplication::setDesktopFileName(app.property("KPXC_QUALIFIED_APPNAME").toString() + QStringLiteral(".desktop")); +#endif - Application::bootstrap(config()->get(Config::GUI_Language).toString()); + Application::bootstrap(); MainWindow mainWindow; -#ifdef Q_OS_WIN - // Qt Hack - Prevent white flicker when showing window - mainWindow.setProperty("windowOpacity", 0.0); -#endif // Disable screen capture if not explicitly allowed // This ensures any top-level windows (Main Window, Modal Dialogs, etc.) are excluded from screenshots mainWindow.setAllowScreenCapture(parser.isSet(allowScreenCaptureOption)); const bool pwstdin = parser.isSet(pwstdinOption); + if (!fileNames.isEmpty() && pwstdin) { + Utils::setDefaultTextStreams(); + } for (const QString& filename : fileNames) { QString password; if (pwstdin) { // we always need consume a line of STDIN if --pw-stdin is set to clear out the // buffer for native messaging, even if the specified file does not exist QTextStream out(stdout, QIODevice::WriteOnly); - out << QObject::tr("Database password: ") << Qt::flush; + out << QObject::tr("Database password: ") << flush; password = Utils::getPassword(); } mainWindow.openDatabase(filename, password, parser.value(keyfileOption)); } - // start minimized if configured - if (parser.isSet(startMinimized) || config()->get(Config::GUI_MinimizeOnStartup).toBool()) { - mainWindow.hideWindow(); - } else { - mainWindow.bringToFront(); - Application::processEvents(); - } - int exitCode = Application::exec(); // Check if restart was requested @@ -229,7 +216,5 @@ int main(int argc, char** argv) __lsan_disable(); #endif - Utils::resetTextStreams(); - return exitCode; } diff --git a/src/post_install/CMakeLists.txt b/src/post_install/CMakeLists.txt index 1adc4740b..359c891f3 100644 --- a/src/post_install/CMakeLists.txt +++ b/src/post_install/CMakeLists.txt @@ -1,5 +1,5 @@ # The install commands in this subdirectory will be executed after all the install commands in the -# current scope are ran. It is required for correct functioning of macdeployqt. +# current scope are ran. It is required for correct functtioning of macdeployqt. if(APPLE AND WITH_APP_BUNDLE) # Run macdeloyqt on the main app and any extra binaries and plugins as specified by the diff --git a/src/proxy/CMakeLists.txt b/src/proxy/CMakeLists.txt old mode 100644 new mode 100755 diff --git a/src/quickunlock/Polkit.cpp b/src/quickunlock/Polkit.cpp deleted file mode 100644 index d73a7c71b..000000000 --- a/src/quickunlock/Polkit.cpp +++ /dev/null @@ -1,247 +0,0 @@ -/* - * Copyright (C) 2023 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 "Polkit.h" - -#include "crypto/CryptoHash.h" -#include "crypto/Random.h" -#include "crypto/SymmetricCipher.h" -#include "gui/osutils/nixutils/NixUtils.h" - -#include -#include -#include -#include -#include - -extern "C" { -#include -} - -const QString polkit_service = "org.freedesktop.PolicyKit1"; -const QString polkit_object = "/org/freedesktop/PolicyKit1/Authority"; - -namespace -{ - QString getKeyName(const QUuid& dbUuid) - { - static const QString keyPrefix = "keepassxc_polkit_keys_"; - return keyPrefix + dbUuid.toString(); - } -} // namespace - -Polkit::Polkit() -{ - PolkitSubject::registerMetaType(); - PolkitAuthorizationResults::registerMetaType(); - - /* Note we explicitly use our own dbus path here, as the ::systemBus() method could be overridden - through an environment variable to return an alternative bus path. This bus could have an application - pretending to be polkit running on it, which could approve every authentication request - - Most Linux distros place the system bus at this exact path, so it is hard-coded. - For any other distros, this path will need to be patched before compilation. - */ - QDBusConnection bus = - QDBusConnection::connectToBus("unix:path=/run/dbus/system_bus_socket", "keepassxc_polkit_dbus"); - - m_available = bus.isConnected(); - if (!m_available) { - qDebug() << "polkit: Failed to connect to system dbus (this may be due to a non-standard dbus path)"; - return; - } - - m_available = bus.interface()->isServiceRegistered(polkit_service); - - if (!m_available) { - qDebug() << "polkit: Polkit is not registered on dbus"; - return; - } - - m_polkit.reset(new org::freedesktop::PolicyKit1::Authority(polkit_service, polkit_object, bus)); -} - -Polkit::~Polkit() -{ -} - -void Polkit::reset(const QUuid& dbUuid) -{ - m_encryptedMasterKeys.remove(dbUuid); -} - -bool Polkit::isAvailable() const -{ - return m_available; -} - -QString Polkit::errorString() const -{ - return m_error; -} - -void Polkit::reset() -{ - m_encryptedMasterKeys.clear(); -} - -bool Polkit::setKey(const QUuid& dbUuid, const QByteArray& key) -{ - reset(dbUuid); - - // Generate a random iv/key pair to encrypt the master password with - QByteArray randomKey = randomGen()->randomArray(SymmetricCipher::keySize(SymmetricCipher::Aes256_GCM)); - QByteArray randomIV = randomGen()->randomArray(SymmetricCipher::defaultIvSize(SymmetricCipher::Aes256_GCM)); - QByteArray keychainKeyValue = randomKey + randomIV; - - SymmetricCipher aes256Encrypt; - if (!aes256Encrypt.init(SymmetricCipher::Aes256_GCM, SymmetricCipher::Encrypt, randomKey, randomIV)) { - m_error = QObject::tr("AES initialization failed"); - return false; - } - - // Encrypt the master password - QByteArray encryptedMasterKey = key; - if (!aes256Encrypt.finish(encryptedMasterKey)) { - m_error = QObject::tr("AES encrypt failed"); - qDebug() << "polkit aes encrypt failed: " << aes256Encrypt.errorString(); - return false; - } - - // Add the iv/key pair into the linux keyring - key_serial_t key_serial = add_key("user", - getKeyName(dbUuid).toStdString().c_str(), - keychainKeyValue.constData(), - keychainKeyValue.size(), - KEY_SPEC_PROCESS_KEYRING); - if (key_serial < 0) { - m_error = QObject::tr("Failed to store in Linux Keyring"); - qDebug() << "polkit keyring failed to store: " << errno; - return false; - } - - // Scrub the keys from ram - Botan::secure_scrub_memory(randomKey.data(), randomKey.size()); - Botan::secure_scrub_memory(randomIV.data(), randomIV.size()); - Botan::secure_scrub_memory(keychainKeyValue.data(), keychainKeyValue.size()); - - // Store encrypted master password and return - m_encryptedMasterKeys.insert(dbUuid, encryptedMasterKey); - return true; -} - -bool Polkit::getKey(const QUuid& dbUuid, QByteArray& key) -{ - if (!m_polkit || !hasKey(dbUuid)) { - return false; - } - - PolkitSubject subject; - subject.kind = "unix-process"; - subject.details.insert("pid", static_cast(QCoreApplication::applicationPid())); - subject.details.insert("start-time", nixUtils()->getProcessStartTime()); - - QMap details; - - auto result = m_polkit->CheckAuthorization( - subject, - "org.keepassxc.KeePassXC.unlockDatabase", - details, - 0x00000001, - // AllowUserInteraction - wait for user to authenticate - // https://www.freedesktop.org/software/polkit/docs/0.105/eggdbus-interface-org.freedesktop.PolicyKit1.Authority.html#eggdbus-enum-CheckAuthorizationFlags - ""); - - // A general error occurred - if (result.isError()) { - auto msg = result.error().message(); - m_error = QObject::tr("Polkit returned an error: %1").arg(msg); - qDebug() << "polkit returned an error: " << msg; - return false; - } - - PolkitAuthorizationResults authResult = result.value(); - if (authResult.is_authorized) { - QByteArray encryptedMasterKey = m_encryptedMasterKeys.value(dbUuid); - key_serial_t keySerial = - find_key_by_type_and_desc("user", getKeyName(dbUuid).toStdString().c_str(), KEY_SPEC_PROCESS_KEYRING); - - if (keySerial == -1) { - m_error = QObject::tr("Could not locate key in keyring"); - qDebug() << "polkit keyring failed to find: " << errno; - return false; - } - - void* keychainBuffer; - long keychainDataSize = keyctl_read_alloc(keySerial, &keychainBuffer); - - if (keychainDataSize == -1) { - m_error = QObject::tr("Could not read key in keyring"); - qDebug() << "polkit keyring failed to read: " << errno; - return false; - } - - QByteArray keychainBytes(static_cast(keychainBuffer), keychainDataSize); - - Botan::secure_scrub_memory(keychainBuffer, keychainDataSize); - free(keychainBuffer); - - QByteArray keychainKey = keychainBytes.left(SymmetricCipher::keySize(SymmetricCipher::Aes256_GCM)); - QByteArray keychainIv = keychainBytes.right(SymmetricCipher::defaultIvSize(SymmetricCipher::Aes256_GCM)); - - SymmetricCipher aes256Decrypt; - if (!aes256Decrypt.init(SymmetricCipher::Aes256_GCM, SymmetricCipher::Decrypt, keychainKey, keychainIv)) { - m_error = QObject::tr("AES initialization failed"); - qDebug() << "polkit aes init failed"; - return false; - } - - key = encryptedMasterKey; - if (!aes256Decrypt.finish(key)) { - key.clear(); - m_error = QObject::tr("AES decrypt failed"); - qDebug() << "polkit aes decrypt failed: " << aes256Decrypt.errorString(); - return false; - } - - // Scrub the keys from ram - Botan::secure_scrub_memory(keychainKey.data(), keychainKey.size()); - Botan::secure_scrub_memory(keychainIv.data(), keychainIv.size()); - Botan::secure_scrub_memory(keychainBytes.data(), keychainBytes.size()); - Botan::secure_scrub_memory(encryptedMasterKey.data(), encryptedMasterKey.size()); - - return true; - } - - // Failed to authenticate - if (authResult.is_challenge) { - m_error = QObject::tr("No Polkit authentication agent was available"); - } else { - m_error = QObject::tr("Polkit authorization failed"); - } - - return false; -} - -bool Polkit::hasKey(const QUuid& dbUuid) const -{ - if (!m_encryptedMasterKeys.contains(dbUuid)) { - return false; - } - - return find_key_by_type_and_desc("user", getKeyName(dbUuid).toStdString().c_str(), KEY_SPEC_PROCESS_KEYRING) != -1; -} diff --git a/src/quickunlock/Polkit.h b/src/quickunlock/Polkit.h deleted file mode 100644 index 7dfc2db7b..000000000 --- a/src/quickunlock/Polkit.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright (C) 2023 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_POLKIT_H -#define KEEPASSX_POLKIT_H - -#include "QuickUnlockInterface.h" -#include "polkit_dbus.h" -#include -#include - -class Polkit : public QuickUnlockInterface -{ -public: - Polkit(); - ~Polkit() override; - - bool isAvailable() const override; - QString errorString() const override; - - bool setKey(const QUuid& dbUuid, const QByteArray& key) override; - bool getKey(const QUuid& dbUuid, QByteArray& key) override; - bool hasKey(const QUuid& dbUuid) const override; - - void reset(const QUuid& dbUuid) override; - void reset() override; - -private: - bool m_available; - QString m_error; - QHash m_encryptedMasterKeys; - - QScopedPointer m_polkit; -}; - -#endif // KEEPASSX_POLKIT_H diff --git a/src/quickunlock/PolkitDbusTypes.cpp b/src/quickunlock/PolkitDbusTypes.cpp deleted file mode 100644 index a4305dc44..000000000 --- a/src/quickunlock/PolkitDbusTypes.cpp +++ /dev/null @@ -1,45 +0,0 @@ -#include "PolkitDbusTypes.h" - -void PolkitSubject::registerMetaType() -{ - qRegisterMetaType("PolkitSubject"); - qDBusRegisterMetaType(); -} - -QDBusArgument& operator<<(QDBusArgument& argument, const PolkitSubject& subject) -{ - argument.beginStructure(); - argument << subject.kind << subject.details; - argument.endStructure(); - return argument; -} - -const QDBusArgument& operator>>(const QDBusArgument& argument, PolkitSubject& subject) -{ - argument.beginStructure(); - argument >> subject.kind >> subject.details; - argument.endStructure(); - return argument; -} - -void PolkitAuthorizationResults::registerMetaType() -{ - qRegisterMetaType("PolkitAuthorizationResults"); - qDBusRegisterMetaType(); -} - -QDBusArgument& operator<<(QDBusArgument& argument, const PolkitAuthorizationResults& res) -{ - argument.beginStructure(); - argument << res.is_authorized << res.is_challenge << res.details; - argument.endStructure(); - return argument; -} - -const QDBusArgument& operator>>(const QDBusArgument& argument, PolkitAuthorizationResults& res) -{ - argument.beginStructure(); - argument >> res.is_authorized >> res.is_challenge >> res.details; - argument.endStructure(); - return argument; -} diff --git a/src/quickunlock/PolkitDbusTypes.h b/src/quickunlock/PolkitDbusTypes.h deleted file mode 100644 index 83eb23889..000000000 --- a/src/quickunlock/PolkitDbusTypes.h +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef KEEPASSX_POLKITDBUSTYPES_H -#define KEEPASSX_POLKITDBUSTYPES_H - -#include - -class PolkitSubject -{ -public: - QString kind; - QVariantMap details; - - static void registerMetaType(); - - friend QDBusArgument& operator<<(QDBusArgument& argument, const PolkitSubject& subject); - - friend const QDBusArgument& operator>>(const QDBusArgument& argument, PolkitSubject& subject); -}; - -class PolkitAuthorizationResults -{ -public: - bool is_authorized; - bool is_challenge; - QMap details; - - static void registerMetaType(); - - friend QDBusArgument& operator<<(QDBusArgument& argument, const PolkitAuthorizationResults& subject); - - friend const QDBusArgument& operator>>(const QDBusArgument& argument, PolkitAuthorizationResults& subject); -}; - -Q_DECLARE_METATYPE(PolkitSubject); -Q_DECLARE_METATYPE(PolkitAuthorizationResults); - -#endif // KEEPASSX_POLKITDBUSTYPES_H diff --git a/src/quickunlock/QuickUnlockInterface.cpp b/src/quickunlock/QuickUnlockInterface.cpp deleted file mode 100644 index 0e24736e8..000000000 --- a/src/quickunlock/QuickUnlockInterface.cpp +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright (C) 2023 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 "QuickUnlockInterface.h" -#include - -#if defined(Q_OS_MACOS) -#include "TouchID.h" -#define QUICKUNLOCK_IMPLEMENTATION TouchID -#elif defined(Q_CC_MSVC) -#include "WindowsHello.h" -#define QUICKUNLOCK_IMPLEMENTATION WindowsHello -#elif defined(Q_OS_LINUX) -#include "Polkit.h" -#define QUICKUNLOCK_IMPLEMENTATION Polkit -#else -#define QUICKUNLOCK_IMPLEMENTATION NoQuickUnlock -#endif - -QUICKUNLOCK_IMPLEMENTATION* quickUnlockInstance = {nullptr}; - -QuickUnlockInterface* getQuickUnlock() -{ - if (!quickUnlockInstance) { - quickUnlockInstance = new QUICKUNLOCK_IMPLEMENTATION(); - } - return quickUnlockInstance; -} - -bool NoQuickUnlock::isAvailable() const -{ - return false; -} - -QString NoQuickUnlock::errorString() const -{ - return QObject::tr("No Quick Unlock provider is available"); -} - -void NoQuickUnlock::reset() -{ -} - -bool NoQuickUnlock::setKey(const QUuid& dbUuid, const QByteArray& key) -{ - Q_UNUSED(dbUuid) - Q_UNUSED(key) - return false; -} - -bool NoQuickUnlock::getKey(const QUuid& dbUuid, QByteArray& key) -{ - Q_UNUSED(dbUuid) - Q_UNUSED(key) - return false; -} - -bool NoQuickUnlock::hasKey(const QUuid& dbUuid) const -{ - Q_UNUSED(dbUuid) - return false; -} - -void NoQuickUnlock::reset(const QUuid& dbUuid) -{ - Q_UNUSED(dbUuid) -} diff --git a/src/quickunlock/QuickUnlockInterface.h b/src/quickunlock/QuickUnlockInterface.h deleted file mode 100644 index 54aeb8a62..000000000 --- a/src/quickunlock/QuickUnlockInterface.h +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright (C) 2023 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_QUICKUNLOCKINTERFACE_H -#define KEEPASSXC_QUICKUNLOCKINTERFACE_H - -#include - -class QuickUnlockInterface -{ - Q_DISABLE_COPY(QuickUnlockInterface) - -public: - QuickUnlockInterface() = default; - virtual ~QuickUnlockInterface() = default; - - virtual bool isAvailable() const = 0; - virtual QString errorString() const = 0; - - virtual bool setKey(const QUuid& dbUuid, const QByteArray& key) = 0; - virtual bool getKey(const QUuid& dbUuid, QByteArray& key) = 0; - virtual bool hasKey(const QUuid& dbUuid) const = 0; - - virtual void reset(const QUuid& dbUuid) = 0; - virtual void reset() = 0; -}; - -class NoQuickUnlock : public QuickUnlockInterface -{ -public: - bool isAvailable() const override; - QString errorString() const override; - - bool setKey(const QUuid& dbUuid, const QByteArray& key) override; - bool getKey(const QUuid& dbUuid, QByteArray& key) override; - bool hasKey(const QUuid& dbUuid) const override; - - void reset(const QUuid& dbUuid) override; - void reset() override; -}; - -QuickUnlockInterface* getQuickUnlock(); - -#endif // KEEPASSXC_QUICKUNLOCKINTERFACE_H diff --git a/src/quickunlock/TouchID.h b/src/quickunlock/TouchID.h deleted file mode 100644 index 74e5d9474..000000000 --- a/src/quickunlock/TouchID.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (C) 2023 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_TOUCHID_H -#define KEEPASSX_TOUCHID_H - -#include "QuickUnlockInterface.h" -#include - -class TouchID : public QuickUnlockInterface -{ -public: - bool isAvailable() const override; - QString errorString() const override; - - bool setKey(const QUuid& dbUuid, const QByteArray& passwordKey) override; - bool getKey(const QUuid& dbUuid, QByteArray& passwordKey) override; - bool hasKey(const QUuid& dbUuid) const override; - - void reset(const QUuid& dbUuid = "") override; - void reset() override; - -private: - static bool isWatchAvailable(); - static bool isTouchIdAvailable(); - static bool isPasswordFallbackPossible(); - bool setKey(const QUuid& dbUuid, const QByteArray& passwordKey, const bool ignoreTouchID); - - static void deleteKeyEntry(const QString& accountName); - static QString databaseKeyName(const QUuid& dbUuid); - - QHash m_encryptedMasterKeys; -}; - -#endif // KEEPASSX_TOUCHID_H diff --git a/src/quickunlock/dbus/org.freedesktop.PolicyKit1.Authority.xml b/src/quickunlock/dbus/org.freedesktop.PolicyKit1.Authority.xml deleted file mode 100644 index d46d71d2a..000000000 --- a/src/quickunlock/dbus/org.freedesktop.PolicyKit1.Authority.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - > - - - - - - - diff --git a/src/sshagent/AgentSettingsWidget.cpp b/src/sshagent/AgentSettingsWidget.cpp index bdad6e30e..1a55e14fa 100644 --- a/src/sshagent/AgentSettingsWidget.cpp +++ b/src/sshagent/AgentSettingsWidget.cpp @@ -90,9 +90,9 @@ void AgentSettingsWidget::loadSettings() void AgentSettingsWidget::saveSettings() { - auto sshAuthSockOverride = m_ui->sshAuthSockOverrideEdit->text().trimmed(); + auto sshAuthSockOverride = m_ui->sshAuthSockOverrideEdit->text(); sshAgent()->setAuthSockOverride(sshAuthSockOverride); - auto sshSecurityKeyProviderOverride = m_ui->sshSecurityKeyProviderOverrideEdit->text().trimmed(); + auto sshSecurityKeyProviderOverride = m_ui->sshSecurityKeyProviderOverrideEdit->text(); sshAgent()->setSecurityKeyProviderOverride(sshSecurityKeyProviderOverride); #ifdef Q_OS_WIN sshAgent()->setUsePageant(m_ui->usePageantRadioButton->isChecked() || m_ui->useBothRadioButton->isChecked()); diff --git a/src/sshagent/BinaryStream.cpp b/src/sshagent/BinaryStream.cpp index 2ac93943c..3ba4c1a81 100644 --- a/src/sshagent/BinaryStream.cpp +++ b/src/sshagent/BinaryStream.cpp @@ -21,12 +21,14 @@ BinaryStream::BinaryStream(QIODevice* device) : QObject(device) + , m_timeout(-1) , m_device(device) { } BinaryStream::BinaryStream(QByteArray* ba, QObject* parent) : QObject(parent) + , m_timeout(-1) { m_buffer.reset(new QBuffer(ba)); m_buffer->open(QIODevice::ReadWrite); diff --git a/src/sshagent/BinaryStream.h b/src/sshagent/BinaryStream.h index 572f57427..0bc06e845 100644 --- a/src/sshagent/BinaryStream.h +++ b/src/sshagent/BinaryStream.h @@ -55,7 +55,7 @@ protected: bool write(const char* ptr, qint64 len); private: - int m_timeout = 3000; + int m_timeout; QString m_error; QIODevice* m_device; QScopedPointer m_buffer; diff --git a/src/sshagent/CMakeLists.txt b/src/sshagent/CMakeLists.txt index 6bbb9c94d..969467415 100644 --- a/src/sshagent/CMakeLists.txt +++ b/src/sshagent/CMakeLists.txt @@ -8,8 +8,6 @@ if(WITH_XC_SSHAGENT) BinaryStream.cpp KeeAgentSettings.cpp OpenSSHKey.cpp - OpenSSHKeyGen.cpp - OpenSSHKeyGenDialog.cpp SSHAgent.cpp ) diff --git a/src/sshagent/KeeAgentSettings.cpp b/src/sshagent/KeeAgentSettings.cpp index a794eac93..272fb7edf 100644 --- a/src/sshagent/KeeAgentSettings.cpp +++ b/src/sshagent/KeeAgentSettings.cpp @@ -490,7 +490,11 @@ bool KeeAgentSettings::toOpenSSHKey(const QString& username, } if (key.comment().isEmpty()) { - key.setComment(QString("%1@%2").arg(username, fileName)); + key.setComment(username); + } + + if (key.comment().isEmpty()) { + key.setComment(fileName); } return true; diff --git a/src/sshagent/OpenSSHKey.cpp b/src/sshagent/OpenSSHKey.cpp index 7df1c4287..e6b21c863 100644 --- a/src/sshagent/OpenSSHKey.cpp +++ b/src/sshagent/OpenSSHKey.cpp @@ -20,8 +20,6 @@ #include "ASN1Key.h" #include "BinaryStream.h" -#include "core/Global.h" -#include "crypto/Random.h" #include "crypto/SymmetricCipher.h" #include @@ -36,7 +34,6 @@ const QString OpenSSHKey::OPENSSH_CIPHER_SUFFIX = "@openssh.com"; OpenSSHKey::OpenSSHKey(QObject* parent) : QObject(parent) - , m_check(0) , m_type(QString()) , m_cipherName(QString("none")) , m_kdfName(QString("none")) @@ -52,7 +49,6 @@ OpenSSHKey::OpenSSHKey(QObject* parent) OpenSSHKey::OpenSSHKey(const OpenSSHKey& other) : QObject(nullptr) - , m_check(other.m_check) , m_type(other.m_type) , m_cipherName(other.m_cipherName) , m_kdfName(other.m_kdfName) @@ -85,7 +81,7 @@ const QString OpenSSHKey::type() const const QString OpenSSHKey::fingerprint(QCryptographicHash::Algorithm algo) const { if (m_rawPublicData.isEmpty()) { - return tr("(encrypted)"); + return {}; } QByteArray publicKey; @@ -130,64 +126,6 @@ const QString OpenSSHKey::publicKey() const return m_type + " " + QString::fromLatin1(publicKey.toBase64()) + " " + m_comment; } -const QString OpenSSHKey::privateKey() -{ - QByteArray sshKey; - BinaryStream stream(&sshKey); - - // magic - stream.write(QString("openssh-key-v1").toUtf8()); - stream.write(static_cast(0)); - - // cipher name - stream.writeString(QString("none")); - - // kdf name - stream.writeString(QString("none")); - - // kdf options - stream.writeString(QString("")); - - // number of keys - stream.write(static_cast(1)); - - // string wrapped public key - QByteArray publicKey; - BinaryStream publicStream(&publicKey); - writePublic(publicStream); - stream.writeString(publicKey); - - // string wrapper private key - QByteArray privateKey; - BinaryStream privateStream(&privateKey); - - // integrity check value - privateStream.write(m_check); - privateStream.write(m_check); - - writePrivate(privateStream); - - // padding for unencrypted key - for (quint8 i = 1; i <= privateKey.size() % 8; i++) { - privateStream.write(i); - } - - stream.writeString(privateKey); - - // encode to PEM format - QString out; - out += "-----BEGIN OPENSSH PRIVATE KEY-----\n"; - - auto base64Key = QString::fromUtf8(sshKey.toBase64()); - for (int i = 0; i < base64Key.size(); i += 70) { - out += base64Key.midRef(i, 70); - out += "\n"; - } - - out += "-----END OPENSSH PRIVATE KEY-----\n"; - return out; -} - const QString OpenSSHKey::errorString() const { return m_error; @@ -198,11 +136,6 @@ void OpenSSHKey::setType(const QString& type) m_type = type; } -void OpenSSHKey::setCheck(quint32 check) -{ - m_check = check; -} - void OpenSSHKey::setPublicData(const QByteArray& data) { m_rawPublicData = data; @@ -227,7 +160,7 @@ void OpenSSHKey::clearPrivate() bool OpenSSHKey::extractPEM(const QByteArray& in, QByteArray& out) { QString pem = QString::fromLatin1(in); - QStringList rows = pem.split(QRegularExpression("(?:\r?\n|\r)"), Qt::SkipEmptyParts); + QStringList rows = pem.split(QRegularExpression("(?:\r?\n|\r)"), QString::SkipEmptyParts); if (rows.length() < 3) { m_error = tr("Invalid key file, expecting an OpenSSH key"); @@ -352,8 +285,6 @@ bool OpenSSHKey::parsePKCS1PEM(const QByteArray& in) // load private if no encryption if (!encrypted()) { return openKey(); - } else { - m_comment = tr("(encrypted)"); } return true; @@ -498,8 +429,6 @@ bool OpenSSHKey::openKey(const QString& passphrase) return false; } - m_check = checkInt1; - return readPrivate(keyStream); } diff --git a/src/sshagent/OpenSSHKey.h b/src/sshagent/OpenSSHKey.h index c2c831939..a42e433de 100644 --- a/src/sshagent/OpenSSHKey.h +++ b/src/sshagent/OpenSSHKey.h @@ -41,11 +41,9 @@ public: const QString fingerprint(QCryptographicHash::Algorithm algo = QCryptographicHash::Sha256) const; const QString comment() const; const QString publicKey() const; - const QString privateKey(); const QString errorString() const; void setType(const QString& type); - void setCheck(quint32 check); void setPublicData(const QByteArray& data); void setPrivateData(const QByteArray& data); void setComment(const QString& comment); @@ -72,7 +70,6 @@ private: bool extractPEM(const QByteArray& in, QByteArray& out); - quint32 m_check; QString m_type; QString m_cipherName; QByteArray m_cipherIV; diff --git a/src/sshagent/OpenSSHKeyGen.cpp b/src/sshagent/OpenSSHKeyGen.cpp deleted file mode 100644 index a3d88807f..000000000 --- a/src/sshagent/OpenSSHKeyGen.cpp +++ /dev/null @@ -1,146 +0,0 @@ -/* - * Copyright (C) 2021 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 "OpenSSHKeyGen.h" -#include "BinaryStream.h" -#include "OpenSSHKey.h" -#include "config-keepassx.h" -#include "crypto/Random.h" - -#include -#include -#include - -namespace OpenSSHKeyGen -{ - namespace - { - void bigIntToStream(const Botan::BigInt& i, BinaryStream& stream, int padding = 0) - { - QByteArray ba(i.bytes() + padding, 0); - i.binary_encode(reinterpret_cast(ba.data() + padding), ba.size() - padding); - stream.writeString(ba); - } - - void vectorToStream(const std::vector& v, BinaryStream& stream) - { - QByteArray ba(reinterpret_cast(v.data()), v.size()); - stream.writeString(ba); - } - - void vectorToStream(const Botan::secure_vector& v, BinaryStream& stream) - { - QByteArray ba(reinterpret_cast(v.data()), v.size()); - stream.writeString(ba); - } - } // namespace - - bool generateRSA(OpenSSHKey& key, int bits) - { - auto rng = randomGen()->getRng(); - - try { - Botan::RSA_PrivateKey rsaKey(*rng, bits); - - QByteArray publicData; - BinaryStream publicStream(&publicData); - // intentionally flipped n e -> e n - bigIntToStream(rsaKey.get_e(), publicStream); - bigIntToStream(rsaKey.get_n(), publicStream, 1); - - QByteArray privateData; - BinaryStream privateStream(&privateData); - bigIntToStream(rsaKey.get_n(), privateStream, 1); - bigIntToStream(rsaKey.get_e(), privateStream); - bigIntToStream(rsaKey.get_d(), privateStream, 1); - bigIntToStream(rsaKey.get_c(), privateStream, 1); - bigIntToStream(rsaKey.get_p(), privateStream, 1); - bigIntToStream(rsaKey.get_q(), privateStream, 1); - - key.setType("ssh-rsa"); - key.setCheck(randomGen()->randomUInt(std::numeric_limits::max() - 1) + 1); - key.setPublicData(publicData); - key.setPrivateData(privateData); - key.setComment("id_rsa"); - return true; - } catch (std::exception& e) { - return false; - } - } - - bool generateECDSA(OpenSSHKey& key, int bits) - { - auto rng = randomGen()->getRng(); - QString group = QString("nistp%1").arg(bits); - - try { - Botan::EC_Group domain(QString("secp%1r1").arg(bits).toStdString()); - Botan::ECDSA_PrivateKey ecdsaKey(*rng, domain); - - QByteArray publicData; - BinaryStream publicStream(&publicData); - publicStream.writeString(group); - vectorToStream(ecdsaKey.public_key_bits(), publicStream); - - QByteArray privateData; - BinaryStream privateStream(&privateData); - privateStream.writeString(group); - vectorToStream(ecdsaKey.public_key_bits(), privateStream); - bigIntToStream(ecdsaKey.private_value(), privateStream, 1); - - key.setType("ecdsa-sha2-" + group); - key.setCheck(randomGen()->randomUInt(std::numeric_limits::max() - 1) + 1); - key.setPublicData(publicData); - key.setPrivateData(privateData); - key.setComment("id_ecdsa"); - return true; - } catch (std::exception& e) { - return false; - } - } - - bool generateEd25519(OpenSSHKey& key) - { - auto rng = randomGen()->getRng(); - - try { - Botan::Ed25519_PrivateKey ed25519Key(*rng); - - QByteArray publicData; - BinaryStream publicStream(&publicData); - vectorToStream(ed25519Key.get_public_key(), publicStream); - - QByteArray privateData; - BinaryStream privateStream(&privateData); - vectorToStream(ed25519Key.get_public_key(), privateStream); -#ifdef WITH_XC_BOTAN3 - vectorToStream(ed25519Key.raw_private_key_bits(), privateStream); -#else - vectorToStream(ed25519Key.get_private_key(), privateStream); -#endif - - key.setType("ssh-ed25519"); - key.setCheck(randomGen()->randomUInt(std::numeric_limits::max() - 1) + 1); - key.setPublicData(publicData); - key.setPrivateData(privateData); - key.setComment("id_ed25519"); - return true; - } catch (std::exception& e) { - return false; - } - } -} // namespace OpenSSHKeyGen diff --git a/src/sshagent/OpenSSHKeyGen.h b/src/sshagent/OpenSSHKeyGen.h deleted file mode 100644 index dfe122ac0..000000000 --- a/src/sshagent/OpenSSHKeyGen.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright (C) 2021 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_OPENSSHKEYGEN_H -#define KEEPASSXC_OPENSSHKEYGEN_H - -class OpenSSHKey; - -namespace OpenSSHKeyGen -{ - bool generateRSA(OpenSSHKey& key, int bits); - bool generateECDSA(OpenSSHKey& key, int bits); - bool generateEd25519(OpenSSHKey& key); -} // namespace OpenSSHKeyGen - -#endif diff --git a/src/sshagent/OpenSSHKeyGenDialog.cpp b/src/sshagent/OpenSSHKeyGenDialog.cpp deleted file mode 100644 index df06879e9..000000000 --- a/src/sshagent/OpenSSHKeyGenDialog.cpp +++ /dev/null @@ -1,99 +0,0 @@ -/* - * Copyright (C) 2021 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 "OpenSSHKeyGenDialog.h" -#include "OpenSSHKey.h" -#include "OpenSSHKeyGen.h" -#include "gui/Icons.h" -#include "ui_OpenSSHKeyGenDialog.h" -#include -#include - -OpenSSHKeyGenDialog::OpenSSHKeyGenDialog(QWidget* parent) - : QDialog(parent) - , m_ui(new Ui::OpenSSHKeyGenDialog()) - , m_key(nullptr) -{ - setAttribute(Qt::WA_DeleteOnClose); - setWindowIcon(icons()->icon("password-generator")); - - m_ui->setupUi(this); - - m_ui->typeComboBox->clear(); - m_ui->typeComboBox->addItem("Ed25519"); - m_ui->typeComboBox->addItem("RSA"); - m_ui->typeComboBox->addItem("ECDSA"); - - QString user = QProcessEnvironment::systemEnvironment().value("USER"); - m_ui->commentLineEdit->setText(user + "@" + QHostInfo::localHostName()); - - connect(m_ui->typeComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(typeChanged())); - - typeChanged(); -} - -// Required for QScopedPointer -OpenSSHKeyGenDialog::~OpenSSHKeyGenDialog() -{ -} - -void OpenSSHKeyGenDialog::typeChanged() -{ - m_ui->bitsComboBox->clear(); - - if (m_ui->typeComboBox->currentText() == QString("Ed25519")) { - m_ui->bitsComboBox->addItem("32"); - } else if (m_ui->typeComboBox->currentText() == QString("RSA")) { - m_ui->bitsComboBox->addItem("2048"); - m_ui->bitsComboBox->addItem("3072"); - m_ui->bitsComboBox->addItem("4096"); - m_ui->bitsComboBox->setCurrentText("3072"); - } else if (m_ui->typeComboBox->currentText() == QString("ECDSA")) { - m_ui->bitsComboBox->addItem("256"); - m_ui->bitsComboBox->addItem("384"); - m_ui->bitsComboBox->addItem("521"); - m_ui->bitsComboBox->setCurrentText("256"); - } -} - -void OpenSSHKeyGenDialog::accept() -{ - // disable form and try to process this update before blocking in key generation - setEnabled(false); - QCoreApplication::processEvents(); - - int bits = m_ui->bitsComboBox->currentText().toInt(); - - if (m_ui->typeComboBox->currentText() == QString("Ed25519")) { - OpenSSHKeyGen::generateEd25519(*m_key); - } else if (m_ui->typeComboBox->currentText() == QString("RSA")) { - OpenSSHKeyGen::generateRSA(*m_key, bits); - } else if (m_ui->typeComboBox->currentText() == QString("ECDSA")) { - OpenSSHKeyGen::generateECDSA(*m_key, bits); - } else { - reject(); - return; - } - - m_key->setComment(m_ui->commentLineEdit->text()); - QDialog::accept(); -} - -void OpenSSHKeyGenDialog::setKey(OpenSSHKey* key) -{ - m_key = key; -} diff --git a/src/sshagent/OpenSSHKeyGenDialog.ui b/src/sshagent/OpenSSHKeyGenDialog.ui deleted file mode 100644 index 1f9e483dd..000000000 --- a/src/sshagent/OpenSSHKeyGenDialog.ui +++ /dev/null @@ -1,138 +0,0 @@ - - - OpenSSHKeyGenDialog - - - - 0 - 0 - 200 - 100 - - - - - 0 - 0 - - - - SSH Key Generator - - - true - - - - - - - 0 - 0 - - - - QComboBox::AdjustToContents - - - - - - - - 0 - 0 - - - - Type - - - - - - - - 0 - 0 - - - - Bits - - - - - - - Comment - - - - - - - - 0 - 0 - - - - QComboBox::AdjustToContents - - - 4 - - - - - - - - - - Qt::Horizontal - - - QDialogButtonBox::Cancel|QDialogButtonBox::Ok - - - - - - - - - buttonBox - accepted() - OpenSSHKeyGenDialog - accept() - - - 248 - 254 - - - 157 - 274 - - - - - buttonBox - rejected() - OpenSSHKeyGenDialog - reject() - - - 316 - 260 - - - 286 - 274 - - - - - diff --git a/src/sshagent/SSHAgent.cpp b/src/sshagent/SSHAgent.cpp index a8aa695ce..847691221 100644 --- a/src/sshagent/SSHAgent.cpp +++ b/src/sshagent/SSHAgent.cpp @@ -363,48 +363,6 @@ bool SSHAgent::removeIdentity(OpenSSHKey& key) return sendMessage(requestData, responseData); } -/** - * Remove all identities from the SSH agent. - * - * Since the agent might be forwarded, old or non-OpenSSH, when asked - * to remove all keys, attempt to remove both protocol v.1 and v.2 - * keys. - * - * @return true on success - */ -bool SSHAgent::clearAllAgentIdentities() -{ - if (!isAgentRunning()) { - m_error = tr("No agent running, cannot remove identity."); - return false; - } - - bool ret = true; - QByteArray requestData; - QByteArray responseData; - BinaryStream request(&requestData); - - // SSH2 Identity Removal - request.write(SSH2_AGENTC_REMOVE_ALL_IDENTITIES); - - if (!sendMessage(requestData, responseData)) { - m_error = tr("Failed to remove all SSH identities from agent."); - ret = false; - } - - request.flush(); - responseData.clear(); - - // SSH1 Identity Removal - request.write(SSH_AGENTC_REMOVE_ALL_RSA_IDENTITIES); - - // ignore error-code for ssh1 - sendMessage(requestData, responseData); - - m_error = tr("All SSH identities removed from agent."); - return ret; -} - /** * Get a list of identities from the SSH agent. * @@ -475,7 +433,7 @@ bool SSHAgent::listIdentities(QList>& list) * Check if this identity is loaded in the SSH Agent. * * @param key identity to remove - * @param loaded is the key loaded + * @param loaded is the key laoded * @return true on success */ bool SSHAgent::checkIdentity(const OpenSSHKey& key, bool& loaded) @@ -528,7 +486,7 @@ void SSHAgent::setAutoRemoveOnLock(const OpenSSHKey& key, bool autoRemove) } } -void SSHAgent::databaseLocked(const QSharedPointer& db) +void SSHAgent::databaseLocked(QSharedPointer db) { if (!db) { return; @@ -550,20 +508,20 @@ void SSHAgent::databaseLocked(const QSharedPointer& db) } } -void SSHAgent::databaseUnlocked(const QSharedPointer& db) +void SSHAgent::databaseUnlocked(QSharedPointer db) { if (!db || !isEnabled()) { return; } - for (auto entry : db->rootGroup()->entriesRecursive()) { - if (entry->isRecycled()) { + for (Entry* e : db->rootGroup()->entriesRecursive()) { + if (db->metadata()->recycleBinEnabled() && e->group() == db->metadata()->recycleBin()) { continue; } KeeAgentSettings settings; - if (!settings.fromEntry(entry)) { + if (!settings.fromEntry(e)) { continue; } @@ -573,7 +531,7 @@ void SSHAgent::databaseUnlocked(const QSharedPointer& db) OpenSSHKey key; - if (!settings.toOpenSSHKey(entry, key, true)) { + if (!settings.toOpenSSHKey(e, key, true)) { continue; } diff --git a/src/sshagent/SSHAgent.h b/src/sshagent/SSHAgent.h index d3eeb4ebc..032438613 100644 --- a/src/sshagent/SSHAgent.h +++ b/src/sshagent/SSHAgent.h @@ -56,7 +56,6 @@ public: bool checkIdentity(const OpenSSHKey& key, bool& loaded); bool removeIdentity(OpenSSHKey& key); void removeAllIdentities(); - bool clearAllAgentIdentities(); void setAutoRemoveOnLock(const OpenSSHKey& key, bool autoRemove); signals: @@ -64,8 +63,8 @@ signals: void enabledChanged(bool enabled); public slots: - void databaseLocked(const QSharedPointer& db); - void databaseUnlocked(const QSharedPointer& db); + void databaseLocked(QSharedPointer db); + void databaseUnlocked(QSharedPointer db); private: const quint8 SSH_AGENT_FAILURE = 5; @@ -75,8 +74,6 @@ private: const quint8 SSH_AGENTC_ADD_IDENTITY = 17; const quint8 SSH_AGENTC_REMOVE_IDENTITY = 18; const quint8 SSH_AGENTC_ADD_ID_CONSTRAINED = 25; - const quint8 SSH_AGENTC_REMOVE_ALL_RSA_IDENTITIES = 9; - const quint8 SSH2_AGENTC_REMOVE_ALL_IDENTITIES = 19; const quint8 SSH_AGENT_CONSTRAIN_LIFETIME = 1; const quint8 SSH_AGENT_CONSTRAIN_CONFIRM = 2; diff --git a/src/streams/HashedBlockStream.cpp b/src/streams/HashedBlockStream.cpp index d04b42dfb..7cc25d1ea 100644 --- a/src/streams/HashedBlockStream.cpp +++ b/src/streams/HashedBlockStream.cpp @@ -126,7 +126,7 @@ bool HashedBlockStream::readHashedBlock() { bool ok; - auto index = Endian::readSizedInt(m_baseDevice, ByteOrder, &ok); + quint32 index = Endian::readSizedInt(m_baseDevice, ByteOrder, &ok); if (!ok || index != m_blockIndex) { m_error = true; setErrorString("Invalid block index."); diff --git a/src/streams/HashedBlockStream.h b/src/streams/HashedBlockStream.h index dc1c16a1a..e107c2cce 100644 --- a/src/streams/HashedBlockStream.h +++ b/src/streams/HashedBlockStream.h @@ -29,7 +29,7 @@ class HashedBlockStream : public LayeredStream public: explicit HashedBlockStream(QIODevice* baseDevice); HashedBlockStream(QIODevice* baseDevice, qint32 blockSize); - ~HashedBlockStream() override; + ~HashedBlockStream(); bool reset() override; void close() override; diff --git a/src/streams/HashingStream.cpp b/src/streams/HashingStream.cpp deleted file mode 100644 index 5139dae87..000000000 --- a/src/streams/HashingStream.cpp +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Copyright (C) 2024 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 "HashingStream.h" - -HashingStream::HashingStream(QIODevice* baseDevice) - : LayeredStream(baseDevice) - , m_hash(QCryptographicHash::Md5) - , m_sizeToHash(0) -{ - init(); -} - -HashingStream::HashingStream(QIODevice* baseDevice, QCryptographicHash::Algorithm hashAlgo, qint64 sizeToHash) - : LayeredStream(baseDevice) - , m_hash(hashAlgo) - , m_sizeToHash(sizeToHash) -{ - init(); -} - -HashingStream::~HashingStream() -{ - close(); -} - -void HashingStream::init() -{ - m_sizeHashed = 0; - m_sizeStreamed = 0; - m_hashFinalized = false; -} - -bool HashingStream::reset() -{ - init(); - m_hash.reset(); - return LayeredStream::reset(); -} - -QByteArray HashingStream::hashingResult() -{ - if (m_sizeHashed <= 0 || (m_sizeToHash > 0 && m_sizeHashed != m_sizeToHash)) { - setErrorString("Not enough data to compute hash"); - return {}; - } - m_hashFinalized = true; - return m_hash.result(); -} - -qint64 HashingStream::readData(char* data, qint64 maxSize) -{ - auto sizeRead = LayeredStream::readData(data, maxSize); - if (sizeRead > 0) { - if (!m_hashFinalized) { - qint64 sizeToHash = sizeRead; - if (m_sizeToHash > 0) { - sizeToHash = qMin(m_sizeToHash - m_sizeStreamed, sizeRead); - } - if (sizeToHash > 0) { - m_hash.addData(data, sizeToHash); - m_sizeHashed += sizeToHash; - } - } - m_sizeStreamed += sizeRead; - } - return sizeRead; -} - -qint64 HashingStream::writeData(const char* data, qint64 maxSize) -{ - auto sizeWritten = LayeredStream::writeData(data, maxSize); - if (sizeWritten > 0) { - if (!m_hashFinalized) { - qint64 sizeToHash = sizeWritten; - if (m_sizeToHash > 0) { - sizeToHash = qMin(m_sizeToHash - m_sizeStreamed, sizeWritten); - } - if (sizeToHash > 0) { - m_hash.addData(data, sizeToHash); - m_sizeHashed += sizeToHash; - } - } - m_sizeStreamed += sizeWritten; - } - return sizeWritten; -} diff --git a/src/streams/HashingStream.h b/src/streams/HashingStream.h deleted file mode 100644 index f35374728..000000000 --- a/src/streams/HashingStream.h +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright (C) 2024 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_HASHINGSTREAM_H -#define KEEPASSX_HASHINGSTREAM_H - -#include - -#include "streams/LayeredStream.h" - -class HashingStream : public LayeredStream -{ - Q_OBJECT - -public: - explicit HashingStream(QIODevice* baseDevice); - HashingStream(QIODevice* baseDevice, QCryptographicHash::Algorithm hashAlgo, qint64 sizeToHash); - ~HashingStream() override; - - bool reset() override; - - QByteArray hashingResult(); - -protected: - void init(); - - qint64 readData(char* data, qint64 maxSize) override; - qint64 writeData(const char* data, qint64 maxSize) override; - -protected: - QCryptographicHash m_hash; - bool m_hashFinalized; - qint64 m_sizeToHash; - qint64 m_sizeHashed; - qint64 m_sizeStreamed; -}; - -#endif // KEEPASSX_HASHINGSTREAM_H diff --git a/src/streams/HmacBlockStream.h b/src/streams/HmacBlockStream.h index 691aa1e16..18f5e5301 100644 --- a/src/streams/HmacBlockStream.h +++ b/src/streams/HmacBlockStream.h @@ -29,7 +29,7 @@ class HmacBlockStream : public LayeredStream public: explicit HmacBlockStream(QIODevice* baseDevice, QByteArray key); HmacBlockStream(QIODevice* baseDevice, QByteArray key, qint32 blockSize); - ~HmacBlockStream() override; + ~HmacBlockStream(); bool reset() override; void close() override; diff --git a/src/streams/LayeredStream.h b/src/streams/LayeredStream.h index 643ddfb45..0e1156d70 100644 --- a/src/streams/LayeredStream.h +++ b/src/streams/LayeredStream.h @@ -26,7 +26,7 @@ class LayeredStream : public QIODevice public: explicit LayeredStream(QIODevice* baseDevice); - ~LayeredStream() override; + virtual ~LayeredStream(); bool isSequential() const override; bool open(QIODevice::OpenMode mode) override; diff --git a/src/streams/SymmetricCipherStream.h b/src/streams/SymmetricCipherStream.h index 10c6e4774..3f11dc8bd 100644 --- a/src/streams/SymmetricCipherStream.h +++ b/src/streams/SymmetricCipherStream.h @@ -30,7 +30,7 @@ class SymmetricCipherStream : public LayeredStream public: SymmetricCipherStream(QIODevice* baseDevice); - ~SymmetricCipherStream() override; + ~SymmetricCipherStream(); bool init(SymmetricCipher::Mode mode, SymmetricCipher::Direction direction, const QByteArray& key, const QByteArray& iv); bool open(QIODevice::OpenMode mode) override; diff --git a/src/streams/qtiocompressor.h b/src/streams/qtiocompressor.h index 458b2991d..cebd98293 100644 --- a/src/streams/qtiocompressor.h +++ b/src/streams/qtiocompressor.h @@ -56,20 +56,18 @@ Q_OBJECT public: enum StreamFormat { ZlibFormat, GzipFormat, RawZipFormat }; QtIOCompressor(QIODevice *device, int compressionLevel = 6, int bufferSize = 65500); - ~QtIOCompressor() override; + ~QtIOCompressor(); void setStreamFormat(StreamFormat format); StreamFormat streamFormat() const; static bool isGzipSupported(); - bool isSequential() const override; - bool open(OpenMode mode) override; - void close() override; + bool isSequential() const; + bool open(OpenMode mode); + void close(); void flush(); - qint64 bytesAvailable() const override; - + qint64 bytesAvailable() const; protected: - qint64 readData(char* data, qint64 maxSize) override; - qint64 writeData(const char* data, qint64 maxSize) override; - + qint64 readData(char * data, qint64 maxSize); + qint64 writeData(const char * data, qint64 maxSize); private: static bool checkGzipSupport(const char * const versionString); QtIOCompressorPrivate *d_ptr; diff --git a/src/thirdparty/ykcore/CMakeLists.txt b/src/thirdparty/ykcore/CMakeLists.txt index ecf3ab2b2..103349f22 100644 --- a/src/thirdparty/ykcore/CMakeLists.txt +++ b/src/thirdparty/ykcore/CMakeLists.txt @@ -40,5 +40,5 @@ elseif(UNIX AND NOT APPLE) target_compile_definitions(ykcore PRIVATE _GNU_SOURCE) elseif(APPLE) target_sources(ykcore PRIVATE ykcore_osx.c) - target_link_libraries(ykcore PUBLIC "-framework IOKit -framework Foundation") + target_link_libraries(ykcore PUBLIC "-framework IOKit") endif() diff --git a/src/thirdparty/ykcore/ykcore.c b/src/thirdparty/ykcore/ykcore.c index c4fc4f4d4..cfab2425a 100644 --- a/src/thirdparty/ykcore/ykcore.c +++ b/src/thirdparty/ykcore/ykcore.c @@ -155,7 +155,7 @@ int yk_get_status(YK_KEY *k, YK_STATUS *status) } /* Read the factory programmed serial number from a YubiKey. - * The possibility to retrieve the serial number might be disabled + * The possibility to retreive the serial number might be disabled * using configuration, so it should not be considered a fatal error * to not be able to read the serial number using this function. * diff --git a/src/thirdparty/ykcore/ykcore.h b/src/thirdparty/ykcore/ykcore.h index e0f3db5e3..37e34e1f3 100644 --- a/src/thirdparty/ykcore/ykcore.h +++ b/src/thirdparty/ykcore/ykcore.h @@ -78,7 +78,7 @@ extern int yk_release(void); * Functions to get and release the key itself. * ****/ -/* opens first key available. For backwards compatibility */ +/* opens first key available. For backwards compatability */ extern YK_KEY *yk_open_first_key(void); extern YK_KEY *yk_open_key(int); /* opens nth key available */ extern YK_KEY *yk_open_key_vid_pid(const int*, size_t, const int*, size_t, int); @@ -147,7 +147,7 @@ int yk_write_device_info(YK_KEY *yk, unsigned char *buf, unsigned int len); /************************************************************************* * - * Error handling functions + * Error handling fuctions * ****/ extern int * _yk_errno_location(void); diff --git a/src/thirdparty/ykcore/ykcore_lcl.h b/src/thirdparty/ykcore/ykcore_lcl.h index 783c1bfff..53619acb9 100644 --- a/src/thirdparty/ykcore/ykcore_lcl.h +++ b/src/thirdparty/ykcore/ykcore_lcl.h @@ -48,7 +48,7 @@ ** ** = = = = = = = = = B I G F A T W A R N I N G = = = = = = = = = ** - ** DO NOT USE THE FOLLOWING FUNCTIONS DIRECTLY UNLESS YOU WRITE CORE ROUTINES! + ** DO NOT USE THE FOLLOWING FUCTIONS DIRECTLY UNLESS YOU WRITE CORE ROUTINES! ** ** These functions are declared here only to make sure they get defined ** correctly internally. diff --git a/src/thirdparty/ykcore/ykdef.h b/src/thirdparty/ykcore/ykdef.h index 80cdce6c9..b645dd996 100644 --- a/src/thirdparty/ykcore/ykdef.h +++ b/src/thirdparty/ykcore/ykdef.h @@ -146,7 +146,7 @@ struct config_st { /* Yubikey 2 and above */ #define CFGFLAG_SHORT_TICKET 0x02 /* Send truncated ticket (half length) */ #define CFGFLAG_STRONG_PW1 0x10 /* Strong password policy flag #1 (mixed case) */ -#define CFGFLAG_STRONG_PW2 0x40 /* Strong password policy flag #2 (substitute 0..7 to digits) */ +#define CFGFLAG_STRONG_PW2 0x40 /* Strong password policy flag #2 (subtitute 0..7 to digits) */ #define CFGFLAG_MAN_UPDATE 0x80 /* Allow manual (local) update of static OTP */ /* Yubikey 2.1 and above */ @@ -299,7 +299,7 @@ struct status_st { #define YK4_CAPA_TAG 0x01 /* TAG for capabilities */ #define YK4_SERIAL_TAG 0x02 /* TAG for serial number */ -#define YK4_CAPA1_OTP 0x01 /* Capability bit for OTP functionality */ +#define YK4_CAPA1_OTP 0x01 /* Capability bit for OTP functonality */ #define YK4_CAPA1_U2F 0x02 /* Capability bit for U2F functionality */ #define YK4_CAPA1_CCID 0x04 /* Capability bit for CCID functionality */ #define YK4_CAPA1_OPGP 0x08 /* Capability bit for OpenPGP functionality */ diff --git a/src/thirdparty/zxcvbn/CMakeLists.txt b/src/thirdparty/zxcvbn/CMakeLists.txt deleted file mode 100644 index dcc2a5efd..000000000 --- a/src/thirdparty/zxcvbn/CMakeLists.txt +++ /dev/null @@ -1,9 +0,0 @@ -add_library(zxcvbn STATIC zxcvbn.c) -# Disable error-level shadow issues -if(CC_HAS_Wshadow_compatible_local) - set_property(SOURCE zxcvbn.c APPEND PROPERTY COMPILE_OPTIONS "-Wno-shadow-compatible-local") -endif() -if(CC_HAS_Wshadow_local) - set_property(SOURCE zxcvbn.c APPEND PROPERTY COMPILE_OPTIONS "-Wno-shadow-local") -endif() -target_include_directories(zxcvbn PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) diff --git a/src/core/Totp.cpp b/src/totp/totp.cpp similarity index 81% rename from src/core/Totp.cpp rename to src/totp/totp.cpp index ed15a9fb8..dc58f158d 100644 --- a/src/core/Totp.cpp +++ b/src/totp/totp.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2017 Weslly Honorato + * Copyright (C) 2017 Weslly Honorato <weslly@protonmail.com> * Copyright (C) 2017 KeePassXC Team * * This program is free software: you can redistribute it and/or modify @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -#include "Totp.h" +#include "totp.h" #include "core/Base32.h" #include "core/Clock.h" @@ -36,11 +36,10 @@ static QList totpEncoders{ static Totp::Algorithm getHashTypeByName(const QString& name) { - auto nameUpper = name.toUpper(); - if (nameUpper == "SHA512" || nameUpper == "HMAC-SHA-512") { + if (name.compare(QString("SHA512"), Qt::CaseInsensitive) == 0) { return Totp::Algorithm::Sha512; } - if (nameUpper == "SHA256" || nameUpper == "HMAC-SHA-256") { + if (name.compare(QString("SHA256"), Qt::CaseInsensitive) == 0) { return Totp::Algorithm::Sha256; } return Totp::Algorithm::Sha1; @@ -50,47 +49,18 @@ static QString getNameForHashType(const Totp::Algorithm hashType) { switch (hashType) { case Totp::Algorithm::Sha512: - return "SHA512"; + return QString("SHA512"); case Totp::Algorithm::Sha256: - return "SHA256"; + return QString("SHA256"); default: - return "SHA1"; + return QString("SHA1"); } } -QSharedPointer -Totp::fromKeePass2Totp(const QString& secret, const QString& algorithm, const QString& length, const QString& period) -{ - // Must have at least a secret to continue - if (secret.isEmpty()) { - return {}; - } - - // Create default settings - auto settings = createSettings(secret); - - if (!algorithm.isEmpty()) { - settings->algorithm = getHashTypeByName(algorithm); - } - if (!length.isEmpty()) { - settings->digits = length.toUInt(); - } - if (!period.isEmpty()) { - settings->step = period.toUInt(); - } - - return settings; -} - QSharedPointer Totp::parseSettings(const QString& rawSettings, const QString& key) { - // Early out if both strings are empty - if (rawSettings.isEmpty() && key.isEmpty()) { - return {}; - } - // Create default settings - auto settings = createSettings(key); + auto settings = createSettings(key, DEFAULT_DIGITS, DEFAULT_STEP); QUrl url(rawSettings); if (url.isValid() && url.scheme() == "otpauth") { @@ -126,11 +96,6 @@ QSharedPointer Totp::parseSettings(const QString& rawSettings, c settings->algorithm = getHashTypeByName(query.queryItemValue("otpHashMode")); } } else { - if (settings->key.isEmpty()) { - // Legacy format cannot work with an empty key - return {}; - } - // Parse semi-colon separated values ([step];[digits|S]) settings->format = StorageFormat::LEGACY; auto vars = rawSettings.split(";"); @@ -138,7 +103,6 @@ QSharedPointer Totp::parseSettings(const QString& rawSettings, c if (vars[1] == STEAM_SHORTNAME) { // Explicit steam encoder settings->encoder = steamEncoder(); - settings->digits = STEAM_DIGITS; } else { // Extract step and digits settings->step = vars[0].toUInt(); @@ -152,6 +116,13 @@ QSharedPointer Totp::parseSettings(const QString& rawSettings, c settings->digits = qBound(1u, settings->digits, 10u); settings->step = qBound(1u, settings->step, 86400u); + // Detect custom settings, used by setup GUI + if (settings->encoder.shortName.isEmpty() + && (settings->digits != DEFAULT_DIGITS || settings->step != DEFAULT_STEP + || settings->algorithm != DEFAULT_ALGORITHM)) { + settings->custom = true; + } + return settings; } @@ -162,8 +133,9 @@ QSharedPointer Totp::createSettings(const QString& key, const QString& encoderShortName, const Totp::Algorithm algorithm) { + bool isCustom = digits != DEFAULT_DIGITS || step != DEFAULT_STEP || algorithm != DEFAULT_ALGORITHM; return QSharedPointer( - new Totp::Settings{format, getEncoderByShortName(encoderShortName), algorithm, key, digits, step}); + new Totp::Settings{format, getEncoderByShortName(encoderShortName), algorithm, key, isCustom, digits, step}); } QString Totp::writeSettings(const QSharedPointer& settings, @@ -210,37 +182,16 @@ QString Totp::writeSettings(const QSharedPointer& settings, } } -QString Totp::checkValidSettings(const QSharedPointer& settings) +QString Totp::generateTotp(const QSharedPointer& settings, const quint64 time) { + Q_ASSERT(!settings.isNull()); if (settings.isNull()) { return QObject::tr("Invalid Settings", "TOTP"); } - QVariant secret = Base32::decode(Base32::sanitizeInput(settings->key.toLatin1())); - if (secret.isNull()) { - return QObject::tr("Invalid Key", "TOTP"); - } - if (settings->step == 0) { - return QObject::tr("Invalid Step", "TOTP"); - } - if (settings->digits == 0) { - return QObject::tr("Invalid Digits", "TOTP"); - } - return {}; -} - -QString Totp::generateTotp(const QSharedPointer& settings, bool* isValid, const quint64 time) -{ - auto error = checkValidSettings(settings); - if (!error.isEmpty()) { - if (isValid) { - *isValid = false; - } - return error; - } const Encoder& encoder = settings->encoder; - uint step = settings->step; - uint digits = settings->digits; + uint step = settings->custom ? settings->step : encoder.step; + uint digits = settings->custom ? settings->digits : encoder.digits; quint64 current; if (time == 0) { @@ -250,6 +201,9 @@ QString Totp::generateTotp(const QSharedPointer& settings, bool* } QVariant secret = Base32::decode(Base32::sanitizeInput(settings->key.toLatin1())); + if (secret.isNull()) { + return QObject::tr("Invalid Key", "TOTP"); + } QCryptographicHash::Algorithm cryptoHash; switch (settings->algorithm) { @@ -292,9 +246,6 @@ QString Totp::generateTotp(const QSharedPointer& settings, bool* retval[pos] = encoder.alphabet[int(password % encoder.alphabet.size())]; password /= encoder.alphabet.size(); } - if (isValid) { - *isValid = true; - } return retval; } @@ -316,13 +267,6 @@ QList> Totp::supportedAlgorithms() return algorithms; } -bool Totp::hasCustomSettings(const QSharedPointer& settings) -{ - return settings - && (settings->digits != DEFAULT_DIGITS || settings->step != DEFAULT_STEP - || settings->algorithm != DEFAULT_ALGORITHM); -} - Totp::Encoder& Totp::defaultEncoder() { // The first encoder is always the default diff --git a/src/core/Totp.h b/src/totp/totp.h similarity index 76% rename from src/core/Totp.h rename to src/totp/totp.h index da857aef2..c34ac164d 100644 --- a/src/core/Totp.h +++ b/src/totp/totp.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2017 Weslly Honorato + * Copyright (C) 2017 Weslly Honorato <weslly@protonmail.com> * Copyright (C) 2017 KeePassXC Team * * This program is free software: you can redistribute it and/or modify @@ -56,6 +56,7 @@ namespace Totp Totp::Encoder encoder; Totp::Algorithm algorithm; QString key; + bool custom; uint digits; uint step; }; @@ -71,19 +72,10 @@ namespace Totp static const QString ATTRIBUTE_SEED = "TOTP Seed"; static const QString ATTRIBUTE_SETTINGS = "TOTP Settings"; - // Support for KeePass2 TOTP - static const QString KP2_TOTP_SECRET = "TimeOtp-Secret-Base32"; - static const QString KP2_TOTP_ALGORITHM = "TimeOtp-Algorithm"; - static const QString KP2_TOTP_LENGTH = "TimeOtp-Length"; - static const QString KP2_TOTP_PERIOD = "TimeOtp-Period"; - - QSharedPointer - fromKeePass2Totp(const QString& secret, const QString& algorithm, const QString& length, const QString& period); - QSharedPointer parseSettings(const QString& rawSettings, const QString& key = {}); QSharedPointer createSettings(const QString& key, - const uint digits = DEFAULT_DIGITS, - const uint step = DEFAULT_STEP, + const uint digits, + const uint step, const Totp::StorageFormat format = DEFAULT_FORMAT, const QString& encoderShortName = {}, const Totp::Algorithm algorithm = DEFAULT_ALGORITHM); @@ -91,12 +83,8 @@ namespace Totp const QString& title = {}, const QString& username = {}, bool forceOtp = false); - // Returns an empty string if settings are valid, otherwise an error message is supplied - QString checkValidSettings(const QSharedPointer& settings); - QString - generateTotp(const QSharedPointer& settings, bool* isValid = nullptr, const quint64 time = 0ull); - bool hasCustomSettings(const QSharedPointer& settings); + QString generateTotp(const QSharedPointer& settings, const quint64 time = 0ull); QList> supportedEncoders(); QList> supportedAlgorithms(); diff --git a/src/touchid/TouchID.h b/src/touchid/TouchID.h new file mode 100644 index 000000000..e32f1fa12 --- /dev/null +++ b/src/touchid/TouchID.h @@ -0,0 +1,39 @@ +#ifndef KEEPASSX_TOUCHID_H +#define KEEPASSX_TOUCHID_H + +#include + +class TouchID +{ +public: + static TouchID& getInstance(); + +private: + TouchID() + { + // Nothing to do here + } + +public: + TouchID(TouchID const&) = delete; + void operator=(TouchID const&) = delete; + + bool storeKey(const QString& databasePath, const QByteArray& passwordKey); + bool getKey(const QString& databasePath, QByteArray& passwordKey) const; + bool containsKey(const QString& databasePath) const; + void reset(const QString& databasePath = ""); + + bool isAvailable(); + +private: + static bool isWatchAvailable(); + static bool isTouchIdAvailable(); + + static void deleteKeyEntry(const QString& accountName); + static QString databaseKeyName(const QString& databasePath); + +private: + QHash m_encryptedMasterKeys; +}; + +#endif // KEEPASSX_TOUCHID_H diff --git a/src/quickunlock/TouchID.mm b/src/touchid/TouchID.mm similarity index 72% rename from src/quickunlock/TouchID.mm rename to src/touchid/TouchID.mm index 6368d7e6b..688ddc451 100644 --- a/src/quickunlock/TouchID.mm +++ b/src/touchid/TouchID.mm @@ -1,4 +1,4 @@ -#include "quickunlock/TouchID.h" +#include "touchid/TouchID.h" #include "crypto/Random.h" #include "crypto/SymmetricCipher.h" @@ -13,7 +13,6 @@ #include #include -#include #define TOUCH_ID_ENABLE_DEBUG_LOGS() 0 #if TOUCH_ID_ENABLE_DEBUG_LOGS() @@ -55,6 +54,16 @@ inline CFMutableDictionaryRef makeDictionary() { return CFDictionaryCreateMutable(NULL, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); } +/** + * Singleton + */ +TouchID& TouchID::getInstance() +{ + static TouchID instance; // Guaranteed to be destroyed. + // Instantiated on first use. + return instance; +} + //! Try to delete an existing keychain entry void TouchID::deleteKeyEntry(const QString& accountName) { @@ -68,38 +77,30 @@ void TouchID::deleteKeyEntry(const QString& accountName) // get data from the KeyChain OSStatus status = SecItemDelete(query); - LogStatusError("TouchID::deleteKeyEntry - Status deleting existing entry", status); + LogStatusError("TouchID::storeKey - Status deleting existing entry", status); } -QString TouchID::databaseKeyName(const QUuid& dbUuid) +QString TouchID::databaseKeyName(const QString &databasePath) { static const QString keyPrefix = "KeepassXC_TouchID_Keys_"; - return keyPrefix + dbUuid.toString(); + const QByteArray pathHash = CryptoHash::hash(databasePath.toUtf8(), CryptoHash::Sha256).toHex(); + return keyPrefix + pathHash; } -QString TouchID::errorString() const +/** + * Generates a random AES 256bit key and uses it to encrypt the PasswordKey that + * protects the database. The encrypted PasswordKey is kept in memory while the + * AES key is stored in the macOS KeyChain protected by either TouchID or Apple Watch. + */ +bool TouchID::storeKey(const QString& databasePath, const QByteArray& passwordKey) { - // TODO - return ""; -} - -void TouchID::reset() -{ - m_encryptedMasterKeys.clear(); -} - - - - -bool TouchID::setKey(const QUuid& dbUuid, const QByteArray& passwordKey, const bool ignoreTouchID) -{ - if (passwordKey.isEmpty()) { - debug("TouchID::setKey - illegal arguments"); + if (databasePath.isEmpty() || passwordKey.isEmpty()) { + debug("TouchID::storeKey - illegal arguments"); return false; } - if (m_encryptedMasterKeys.contains(dbUuid)) { - debug("TouchID::setKey - Already stored key for this database"); + if (m_encryptedMasterKeys.contains(databasePath)) { + debug("TouchID::storeKey - Already stored key for this database"); return true; } @@ -109,7 +110,7 @@ bool TouchID::setKey(const QUuid& dbUuid, const QByteArray& passwordKey, const b SymmetricCipher aes256Encrypt; if (!aes256Encrypt.init(SymmetricCipher::Aes256_GCM, SymmetricCipher::Encrypt, randomKey, randomIV)) { - debug("TouchID::setKey - AES initialisation failed"); + debug("TouchID::storeKey - AES initialisation falied"); return false; } @@ -120,7 +121,7 @@ bool TouchID::setKey(const QUuid& dbUuid, const QByteArray& passwordKey, const b return false; } - const QString keyName = databaseKeyName(dbUuid); + const QString keyName = databaseKeyName(databasePath); deleteKeyEntry(keyName); // Try to delete the existing key entry @@ -129,47 +130,29 @@ bool TouchID::setKey(const QUuid& dbUuid, const QByteArray& passwordKey, const b // We need both runtime and compile time checks here to solve the following problems: // - Not all flags are available in all OS versions, so we have to check it at compile time - // - Requesting Biometry/TouchID/DevicePassword when to fingerprint sensor is available will result in runtime error + // - Requesting Biometry/TouchID when to fingerprint sensor is available will result in runtime error SecAccessControlCreateFlags accessControlFlags = 0; + if (isTouchIdAvailable()) { #if XC_COMPILER_SUPPORT(APPLE_BIOMETRY) - // Needs a special check to work with SecItemAdd, when TouchID is not enrolled and the flag - // is set, the method call fails with an error. But we want to still set this flag if TouchID is - // enrolled but temporarily unavailable due to closed lid - // - // At least on a Hackintosh the enrolled-check does not work, there LAErrorBiometryNotAvailable gets returned instead of - // LAErrorBiometryNotEnrolled. - // - // Thats kinda unfortunate, because now you cannot know for sure if TouchID hardware is either temporarily unavailable or not present - // at all, because LAErrorBiometryNotAvailable is used for both cases. - // - // So to make quick unlock fallbacks possible on these machines you have to try to save the key a second time without this flag, if the - // first try fails with an error. - if (!ignoreTouchID) { - // Prefer the non-deprecated flag when available - accessControlFlags = kSecAccessControlBiometryCurrentSet; - } + // Prefer the non-deprecated flag when available + accessControlFlags = kSecAccessControlBiometryCurrentSet; #elif XC_COMPILER_SUPPORT(TOUCH_ID) - if (!ignoreTouchID) { - accessControlFlags = kSecAccessControlTouchIDCurrentSet; - } + accessControlFlags = kSecAccessControlTouchIDCurrentSet; #endif + } + if (isWatchAvailable()) { #if XC_COMPILER_SUPPORT(WATCH_UNLOCK) accessControlFlags = accessControlFlags | kSecAccessControlOr | kSecAccessControlWatch; #endif - -#if XC_COMPILER_SUPPORT(TOUCH_ID) - if (isPasswordFallbackPossible()) { - accessControlFlags = accessControlFlags | kSecAccessControlOr | kSecAccessControlDevicePasscode; } -#endif SecAccessControlRef sacObject = SecAccessControlCreateWithFlags( kCFAllocatorDefault, kSecAttrAccessibleWhenUnlockedThisDeviceOnly, accessControlFlags, &error); if (sacObject == NULL || error != NULL) { NSError* e = (__bridge NSError*) error; - debug("TouchID::setKey - Error creating security flags: %s", e.localizedDescription.UTF8String); + debug("TouchID::storeKey - Error creating security flags: %s", e.localizedDescription.UTF8String); return false; } @@ -191,49 +174,38 @@ bool TouchID::setKey(const QUuid& dbUuid, const QByteArray& passwordKey, const b // add to KeyChain OSStatus status = SecItemAdd(attributes, NULL); - LogStatusError("TouchID::setKey - Status adding new entry", status); + LogStatusError("TouchID::storeKey - Status adding new entry", status); CFRelease(sacObject); CFRelease(attributes); - - // Cleanse the key information from the memory - Botan::secure_scrub_memory(randomKey.data(), randomKey.size()); - Botan::secure_scrub_memory(randomIV.data(), randomIV.size()); if (status != errSecSuccess) { return false; } - // memorize which database the stored key is for - m_encryptedMasterKeys.insert(dbUuid, encryptedMasterKey); - debug("TouchID::setKey - Success!"); - return true; -} + // Cleanse the key information from the memory + Botan::secure_scrub_memory(randomKey.data(), randomKey.size()); + Botan::secure_scrub_memory(randomIV.data(), randomIV.size()); -/** - * Generates a random AES 256bit key and uses it to encrypt the PasswordKey that - * protects the database. The encrypted PasswordKey is kept in memory while the - * AES key is stored in the macOS KeyChain protected by either TouchID or Apple Watch. - */ -bool TouchID::setKey(const QUuid& dbUuid, const QByteArray& passwordKey) -{ - if (!setKey(dbUuid,passwordKey, false)) { - debug("TouchID::setKey failed with error trying fallback method without TouchID flag"); - return setKey(dbUuid, passwordKey, true); - } else { - return true; - } + // memorize which database the stored key is for + m_encryptedMasterKeys.insert(databasePath, encryptedMasterKey); + debug("TouchID::storeKey - Success!"); + return true; } /** * Checks if an encrypted PasswordKey is available for the given database, tries to * decrypt it using the KeyChain and if successful, returns it. */ -bool TouchID::getKey(const QUuid& dbUuid, QByteArray& passwordKey) +bool TouchID::getKey(const QString& databasePath, QByteArray& passwordKey) const { passwordKey.clear(); + if (databasePath.isEmpty()) { + debug("TouchID::getKey - missing database path"); + return false; + } - if (!hasKey(dbUuid)) { + if (!containsKey(databasePath)) { debug("TouchID::getKey - No stored key found"); return false; } @@ -241,7 +213,7 @@ bool TouchID::getKey(const QUuid& dbUuid, QByteArray& passwordKey) // query the KeyChain for the AES key CFMutableDictionaryRef query = makeDictionary(); - const QString keyName = databaseKeyName(dbUuid); + const QString keyName = databaseKeyName(databasePath); NSString* accountName = keyName.toNSString(); // The NSString is released by Qt NSString* touchPromptMessage = QCoreApplication::translate("DatabaseOpenWidget", "authenticate to access the database") @@ -282,7 +254,7 @@ bool TouchID::getKey(const QUuid& dbUuid, QByteArray& passwordKey) } // decrypt PasswordKey from memory using AES - passwordKey = m_encryptedMasterKeys[dbUuid]; + passwordKey = m_encryptedMasterKeys[databasePath]; if (!aes256Decrypt.finish(passwordKey)) { passwordKey.clear(); debug("TouchID::getKey - AES decrypt failed: %s", aes256Decrypt.errorString().toUtf8().constData()); @@ -296,9 +268,9 @@ bool TouchID::getKey(const QUuid& dbUuid, QByteArray& passwordKey) return true; } -bool TouchID::hasKey(const QUuid& dbUuid) const +bool TouchID::containsKey(const QString& dbPath) const { - return m_encryptedMasterKeys.contains(dbUuid); + return m_encryptedMasterKeys.contains(dbPath); } // TODO: Both functions below should probably handle the returned errors to @@ -363,46 +335,26 @@ bool TouchID::isTouchIdAvailable() #endif } -bool TouchID::isPasswordFallbackPossible() -{ -#if XC_COMPILER_SUPPORT(TOUCH_ID) - @try { - LAContext *context = [[LAContext alloc] init]; - - LAPolicy policyCode = LAPolicyDeviceOwnerAuthentication; - NSError *error; - - bool canAuthenticate = [context canEvaluatePolicy:policyCode error:&error]; - [context release]; - if (error) { - debug("Password fallback available: %d (%ld / %s / %s)", canAuthenticate, - (long)error.code, error.description.UTF8String, - error.localizedDescription.UTF8String); - } else { - debug("Password fallback available: %d", canAuthenticate); - } - return canAuthenticate; - } @catch (NSException *) { - return false; - } -#else - return false; -#endif -} - //! @return true if either TouchID or Apple Watch is available at the moment. -bool TouchID::isAvailable() const +bool TouchID::isAvailable() { // note: we cannot cache the check results because the configuration // is dynamic in its nature. User can close the laptop lid or take off // the watch, thus making one (or both) of the authentication types unavailable. - return isWatchAvailable() || isTouchIdAvailable() || isPasswordFallbackPossible(); + const bool watchAvailable = isWatchAvailable(); + const bool touchIdAvailable = isTouchIdAvailable(); + return watchAvailable || touchIdAvailable; } /** * Resets the inner state either for all or for the given database */ -void TouchID::reset(const QUuid& dbUuid) +void TouchID::reset(const QString& databasePath) { - m_encryptedMasterKeys.remove(dbUuid); + if (databasePath.isEmpty()) { + m_encryptedMasterKeys.clear(); + return; + } + + m_encryptedMasterKeys.remove(databasePath); } diff --git a/src/networking/UpdateChecker.cpp b/src/updatecheck/UpdateChecker.cpp similarity index 99% rename from src/networking/UpdateChecker.cpp rename to src/updatecheck/UpdateChecker.cpp index ea3d435df..ff2240628 100644 --- a/src/networking/UpdateChecker.cpp +++ b/src/updatecheck/UpdateChecker.cpp @@ -17,10 +17,10 @@ #include "UpdateChecker.h" -#include "NetworkManager.h" #include "config-keepassx.h" #include "core/Clock.h" #include "core/Config.h" +#include "core/NetworkManager.h" #include #include diff --git a/src/networking/UpdateChecker.h b/src/updatecheck/UpdateChecker.h similarity index 100% rename from src/networking/UpdateChecker.h rename to src/updatecheck/UpdateChecker.h diff --git a/src/quickunlock/WindowsHello.cpp b/src/winhello/WindowsHello.cpp similarity index 82% rename from src/quickunlock/WindowsHello.cpp rename to src/winhello/WindowsHello.cpp index 890e3499a..bc244cc26 100644 --- a/src/quickunlock/WindowsHello.cpp +++ b/src/winhello/WindowsHello.cpp @@ -99,10 +99,28 @@ namespace } } // namespace +WindowsHello* WindowsHello::m_instance{nullptr}; +WindowsHello* WindowsHello::instance() +{ + if (!m_instance) { + m_instance = new WindowsHello(); + } + return m_instance; +} + +WindowsHello::WindowsHello(QObject* parent) + : QObject(parent) +{ + concurrency::create_task([this] { + bool state = KeyCredentialManager::IsSupportedAsync().get(); + m_available = state; + emit availableChanged(m_available); + }); +} + bool WindowsHello::isAvailable() const { - auto task = concurrency::create_task([] { return KeyCredentialManager::IsSupportedAsync().get(); }); - return task.get(); + return m_available; } QString WindowsHello::errorString() const @@ -110,7 +128,7 @@ QString WindowsHello::errorString() const return m_error; } -bool WindowsHello::setKey(const QUuid& dbUuid, const QByteArray& data) +bool WindowsHello::storeKey(const QString& dbPath, const QByteArray& data) { queueSecurityPromptFocus(); @@ -126,26 +144,26 @@ bool WindowsHello::setKey(const QUuid& dbUuid, const QByteArray& data) // Encrypt the data using AES-256-CBC SymmetricCipher cipher; if (!cipher.init(SymmetricCipher::Aes256_GCM, SymmetricCipher::Encrypt, key, challenge)) { - m_error = QObject::tr("Failed to init KeePassXC crypto."); + m_error = tr("Failed to init KeePassXC crypto."); return false; } QByteArray encrypted = data; if (!cipher.finish(encrypted)) { - m_error = QObject::tr("Failed to encrypt key data."); + m_error = tr("Failed to encrypt key data."); return false; } // Prepend the challenge/IV to the encrypted data encrypted.prepend(challenge); - m_encryptedKeys.insert(dbUuid, encrypted); + m_encryptedKeys.insert(dbPath, encrypted); return true; } -bool WindowsHello::getKey(const QUuid& dbUuid, QByteArray& data) +bool WindowsHello::getKey(const QString& dbPath, QByteArray& data) { data.clear(); - if (!hasKey(dbUuid)) { - m_error = QObject::tr("Failed to get Windows Hello credential."); + if (!hasKey(dbPath)) { + m_error = tr("Failed to get Windows Hello credential."); return false; } @@ -153,7 +171,7 @@ bool WindowsHello::getKey(const QUuid& dbUuid, QByteArray& data) // Read the previously used challenge and encrypted data auto ivSize = SymmetricCipher::defaultIvSize(SymmetricCipher::Aes256_GCM); - const auto& keydata = m_encryptedKeys.value(dbUuid); + const auto& keydata = m_encryptedKeys.value(dbPath); auto challenge = keydata.left(ivSize); auto encrypted = keydata.mid(ivSize); QByteArray key; @@ -165,7 +183,7 @@ bool WindowsHello::getKey(const QUuid& dbUuid, QByteArray& data) // Decrypt the data using the generated key and IV from above SymmetricCipher cipher; if (!cipher.init(SymmetricCipher::Aes256_GCM, SymmetricCipher::Decrypt, key, challenge)) { - m_error = QObject::tr("Failed to init KeePassXC crypto."); + m_error = tr("Failed to init KeePassXC crypto."); return false; } @@ -173,21 +191,21 @@ bool WindowsHello::getKey(const QUuid& dbUuid, QByteArray& data) data = encrypted; if (!cipher.finish(data)) { data.clear(); - m_error = QObject::tr("Failed to decrypt key data."); + m_error = tr("Failed to decrypt key data."); return false; } return true; } -void WindowsHello::reset(const QUuid& dbUuid) +void WindowsHello::reset(const QString& dbPath) { - m_encryptedKeys.remove(dbUuid); + m_encryptedKeys.remove(dbPath); } -bool WindowsHello::hasKey(const QUuid& dbUuid) const +bool WindowsHello::hasKey(const QString& dbPath) const { - return m_encryptedKeys.contains(dbUuid); + return m_encryptedKeys.contains(dbPath); } void WindowsHello::reset() diff --git a/src/quickunlock/WindowsHello.h b/src/winhello/WindowsHello.h similarity index 57% rename from src/quickunlock/WindowsHello.h rename to src/winhello/WindowsHello.h index 9da6e4160..5faf7eb25 100644 --- a/src/quickunlock/WindowsHello.h +++ b/src/winhello/WindowsHello.h @@ -18,28 +18,41 @@ #ifndef KEEPASSXC_WINDOWSHELLO_H #define KEEPASSXC_WINDOWSHELLO_H -#include "QuickUnlockInterface.h" - #include #include -class WindowsHello : public QuickUnlockInterface +class WindowsHello : public QObject { -public: - WindowsHello() = default; - bool isAvailable() const override; - QString errorString() const override; - void reset() override; + Q_OBJECT - bool setKey(const QUuid& dbUuid, const QByteArray& key) override; - bool getKey(const QUuid& dbUuid, QByteArray& key) override; - bool hasKey(const QUuid& dbUuid) const override; - void reset(const QUuid& dbUuid) override; +public: + static WindowsHello* instance(); + bool isAvailable() const; + QString errorString() const; + void reset(); + + bool storeKey(const QString& dbPath, const QByteArray& key); + bool getKey(const QString& dbPath, QByteArray& key); + bool hasKey(const QString& dbPath) const; + void reset(const QString& dbPath); + +signals: + void availableChanged(bool state); private: + bool m_available = false; QString m_error; - QHash m_encryptedKeys; + QHash m_encryptedKeys; + + static WindowsHello* m_instance; + WindowsHello(QObject* parent = nullptr); + ~WindowsHello() override = default; Q_DISABLE_COPY(WindowsHello); }; +inline WindowsHello* getWindowsHello() +{ + return WindowsHello::instance(); +} + #endif // KEEPASSXC_WINDOWSHELLO_H diff --git a/src/thirdparty/zxcvbn/dict-src.h b/src/zxcvbn/dict-src.h similarity index 100% rename from src/thirdparty/zxcvbn/dict-src.h rename to src/zxcvbn/dict-src.h diff --git a/src/thirdparty/zxcvbn/zxcvbn.c b/src/zxcvbn/zxcvbn.c similarity index 99% rename from src/thirdparty/zxcvbn/zxcvbn.c rename to src/zxcvbn/zxcvbn.c index 28d53af22..23792b4d6 100644 --- a/src/thirdparty/zxcvbn/zxcvbn.c +++ b/src/zxcvbn/zxcvbn.c @@ -60,7 +60,7 @@ /* Additional entropy to add when password is made of multiple matches. Use different * amounts depending on whether the match is at the end of the password, or in the - * middle. If the match is at the beginning then there is no additional entropy. + * middle. If the match is at the begining then there is no additional entropy. */ #define MULTI_END_ADDITION 1.0 #define MULTI_MID_ADDITION 1.75 @@ -169,7 +169,7 @@ static ZxcMatch_t *AllocMatch() static void AddResult(ZxcMatch_t **HeadRef, ZxcMatch_t *Nu, int MaxLen) { /* Adjust the entropy to be used for calculations depending on whether the passed match is - * at the beginning, middle or end of the password + * at the begining, middle or end of the password */ if (Nu->Begin) { @@ -546,7 +546,7 @@ static void AddLeetChr(uint8_t c, int IsLeet, uint8_t *Leeted, uint8_t *UnLeet) /********************************************************************************** * Given details of a word match, update it with the entropy (as natural log of - * number of possibilities) + * number of possiblities) */ static void DictionaryEntropy(ZxcMatch_t *m, DictMatchInfo_t *Extra, const uint8_t *Pwd) { @@ -1244,7 +1244,7 @@ static const char *Formats[] = 0 }; /* Possible separator characters that could be used */ -static const char DateSeparators[] = "/\\-_. "; +static const char DateSeperators[] = "/\\-_. "; /********************************************************************************** * Try to match the password with the formats above. @@ -1273,7 +1273,7 @@ static void DateMatch(ZxcMatch_t **Result, const uint8_t *Passwd, int Start, int { if (*Fmt == '?') { - if (!Sep && strchr(DateSeparators, *p)) + if (!Sep && strchr(DateSeperators, *p)) Sep = *p; Fail = (*p != Sep); } @@ -1370,7 +1370,7 @@ static void RepeatMatch(ZxcMatch_t **Result, const uint8_t *Passwd, int Start, i int Len, i; uint8_t c; Passwd += Start; - /* Remember first char and the count its occurrences */ + /* Remember first char and the count its occurances */ c = *Passwd; for(Len = 1; (Len < MaxLen) && (c == Passwd[Len]); ++Len) { } @@ -1533,9 +1533,9 @@ static void SequenceMatch(ZxcMatch_t **Result, const uint8_t *Passwd, int Start, /********************************************************************************** * Matching a password is treated as a problem of finding the minimum distance - * between two vertices in a graph. This is solved using Dijkstra's algorithm. + * between two vertexes in a graph. This is solved using Dijkstra's algorithm. * - * There are a series of nodes (or vertices in graph terminology) which correspond + * There are a series of nodes (or vertexes in graph terminology) which correspond * to points between each character of the password. Also there is a start node * before the first character and an end node after the last character. * @@ -1546,7 +1546,7 @@ static void SequenceMatch(ZxcMatch_t **Result, const uint8_t *Passwd, int Start, * end node. * * Dijkstra's algorithm finds the combination of these part matches (or paths) - * which gives the lowest entropy (or smallest distance) from beginning to end + * which gives the lowest entropy (or smallest distance) from begining to end * of the password. */ diff --git a/src/thirdparty/zxcvbn/zxcvbn.h b/src/zxcvbn/zxcvbn.h similarity index 95% rename from src/thirdparty/zxcvbn/zxcvbn.h rename to src/zxcvbn/zxcvbn.h index 550680505..9500c7a95 100644 --- a/src/thirdparty/zxcvbn/zxcvbn.h +++ b/src/zxcvbn/zxcvbn.h @@ -68,7 +68,7 @@ typedef enum /* Linked list of information returned in the Info arg to ZxcvbnMatch */ struct ZxcMatch { - int Begin; /* Char position of beginning of match */ + int Begin; /* Char position of begining of match */ int Length; /* Number of chars in the match */ double Entrpy; /* The entropy of the match */ double MltEnpy; /* Entropy with additional allowance for multipart password */ @@ -85,13 +85,13 @@ extern "C" { #ifdef USE_DICT_FILE /********************************************************************************** - * Read the dictionary data from the given file. Returns 1 if OK, 0 if error. + * Read the dictionnary data from the given file. Returns 1 if OK, 0 if error. * Called once at program startup. */ int ZxcvbnInit(const char *); /********************************************************************************** - * Free the dictionary data after use. Called once at program shutdown. + * Free the dictionnary data after use. Called once at program shutdown. */ void ZxcvbnUnInit(); @@ -107,7 +107,7 @@ void ZxcvbnUnInit(); * The main password matching function. May be called multiple times. * The parameters are: * Passwd The password to be tested. Null terminated string. - * UserDict User supplied dictionary words to be considered particularly bad. Passed + * UserDict User supplied dictionary words to be considered particulary bad. Passed * as a pointer to array of string pointers, with null last entry (like * the argv parameter to main()). May be null or point to empty array when * there are no user dictionary words. diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 25b116d8e..b84869c19 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (C) 2023 KeePassXC Team +# Copyright (C) 2018 KeePassXC Team # Copyright (C) 2010 Felix Geyer # # This program is free software: you can redistribute it and/or modify @@ -75,8 +75,6 @@ macro(add_unit_test) add_test(${_test_NAME} ${_test_LAUNCHER} ${_test_NAME}) endif(KDE4_TEST_OUTPUT STREQUAL "xml") - set_tests_properties(${_test_NAME} PROPERTIES ENVIRONMENT "LANG=en_US.UTF-8") - if(NOT MSVC_IDE) #not needed for the ide # if the tests are EXCLUDE_FROM_ALL, add a target "buildtests" to build all tests if(NOT WITH_TESTS) @@ -90,7 +88,7 @@ macro(add_unit_test) endif() endmacro(add_unit_test) -set(TEST_LIBRARIES keepassxc_gui Qt5::Test) +set(TEST_LIBRARIES keepassx_core Qt5::Test) set(testsupport_SOURCES modeltest.cpp @@ -142,8 +140,8 @@ add_unit_test(NAME testdeletedobjects SOURCES TestDeletedObjects.cpp add_unit_test(NAME testkeepass1reader SOURCES TestKeePass1Reader.cpp LIBS ${TEST_LIBRARIES}) -add_unit_test(NAME testimports SOURCES TestImports.cpp - LIBS ${TEST_LIBRARIES}) +add_unit_test(NAME testopvaultreader SOURCES TestOpVaultReader.cpp + LIBS ${TEST_LIBRARIES}) if(WITH_XC_NETWORKING) add_unit_test(NAME testupdatecheck SOURCES TestUpdateCheck.cpp @@ -154,16 +152,16 @@ endif() if(WITH_XC_AUTOTYPE) add_unit_test(NAME testautotype SOURCES TestAutoType.cpp - LIBS testsupport ${TEST_LIBRARIES}) + LIBS ${TEST_LIBRARIES}) set_target_properties(testautotype PROPERTIES ENABLE_EXPORTS ON) endif() if(WITH_XC_SSHAGENT) add_unit_test(NAME testopensshkey SOURCES TestOpenSSHKey.cpp - LIBS sshagent testsupport ${TEST_LIBRARIES}) + LIBS sshagent ${TEST_LIBRARIES}) if(NOT WIN32) add_unit_test(NAME testsshagent SOURCES TestSSHAgent.cpp - LIBS sshagent testsupport ${TEST_LIBRARIES}) + LIBS ${TEST_LIBRARIES}) endif() endif() @@ -195,7 +193,7 @@ add_unit_test(NAME testcsvparser SOURCES TestCsvParser.cpp LIBS ${TEST_LIBRARIES}) add_unit_test(NAME testrandomgenerator SOURCES TestRandomGenerator.cpp - LIBS testsupport ${TEST_LIBRARIES}) + LIBS testsupport ${TEST_LIBRARIES}) add_unit_test(NAME testentrysearcher SOURCES TestEntrySearcher.cpp LIBS ${TEST_LIBRARIES}) @@ -225,25 +223,16 @@ add_unit_test(NAME testconfig SOURCES TestConfig.cpp if(WITH_XC_FDOSECRETS) add_unit_test(NAME testfdosecrets SOURCES TestFdoSecrets.cpp - LIBS testsupport fdosecrets ${TEST_LIBRARIES}) + LIBS testsupport ${TEST_LIBRARIES}) endif() if(WITH_XC_BROWSER) add_unit_test(NAME testbrowser SOURCES TestBrowser.cpp - LIBS browser ${TEST_LIBRARIES}) - - if(WITH_XC_BROWSER_PASSKEYS) - add_unit_test(NAME testpasskeys SOURCES TestPasskeys.cpp - LIBS browser ${TEST_LIBRARIES}) - endif() -endif() - -if(WITH_XC_NETWORKING OR WITH_XC_BROWSER) - add_unit_test(NAME testurltools SOURCES TestUrlTools.cpp LIBS ${TEST_LIBRARIES}) + LIBS ${TEST_LIBRARIES}) endif() add_unit_test(NAME testcli SOURCES TestCli.cpp - LIBS testsupport cli ${ZXCVBN_LIBRARIES} ${TEST_LIBRARIES}) + LIBS testsupport cli ${TEST_LIBRARIES}) target_compile_definitions(testcli PRIVATE KEEPASSX_CLI_PATH="$") if(WITH_GUI_TESTS) diff --git a/tests/TestAutoType.cpp b/tests/TestAutoType.cpp index 91bd7d0a4..445735f9f 100644 --- a/tests/TestAutoType.cpp +++ b/tests/TestAutoType.cpp @@ -30,15 +30,13 @@ #include "crypto/Crypto.h" #include "gui/MessageBox.h" #include "gui/osutils/OSUtils.h" -#include "util/TemporaryFile.h" QTEST_GUILESS_MAIN(TestAutoType) void TestAutoType::initTestCase() { QVERIFY(Crypto::init()); - // Create temporary config file - Config::createConfigFromFile(TemporaryFile::createTempConfigFile(), {}); + Config::createTempFileInstance(); config()->set(Config::AutoTypeDelay, 1); config()->set(Config::Security_AutoTypeAsk, false); AutoType::createTestInstance(); @@ -64,7 +62,8 @@ void TestAutoType::init() m_db = QSharedPointer::create(); m_dbList.clear(); m_dbList.append(m_db); - m_group = m_db->rootGroup(); + m_group = new Group(); + m_db->setRootGroup(m_group); AutoTypeAssociations::Association association; diff --git a/tests/TestBrowser.cpp b/tests/TestBrowser.cpp index a2610748a..4ad39a4f7 100644 --- a/tests/TestBrowser.cpp +++ b/tests/TestBrowser.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2025 KeePassXC Team + * Copyright (C) 2021 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 @@ -37,7 +37,6 @@ const QString SECRETKEY = "B8ei4ZjQJkWzZU2SK/tBsrYRwp+6ztEMf5GFQV+i0yI="; const QString SERVERPUBLICKEY = "lKnbLhrVCOqzEjuNoUz1xj9EZlz8xeO4miZBvLrUPVQ="; const QString SERVERSECRETKEY = "tbPQcghxfOgbmsnEqG2qMIj1W2+nh+lOJcNsHncaz1Q="; const QString NONCE = "zBKdvTjL5bgWaKMCTut/8soM/uoMrFoZ"; -const QString INCREMENTEDNONCE = "zRKdvTjL5bgWaKMCTut/8soM/uoMrFoZ"; const QString CLIENTID = "testClient"; void TestBrowser::initTestCase() @@ -108,40 +107,55 @@ void TestBrowser::testGetBase64FromKey() void TestBrowser::testIncrementNonce() { auto result = browserMessageBuilder()->incrementNonce(NONCE); - QCOMPARE(result, INCREMENTEDNONCE); + QCOMPARE(result, QString("zRKdvTjL5bgWaKMCTut/8soM/uoMrFoZ")); } -void TestBrowser::testBuildResponse() +/** + * Tests for BrowserService + */ +void TestBrowser::testTopLevelDomain() { - const auto object = QJsonObject{{"test", true}}; - const QJsonArray arr = {QJsonObject{{"test", true}}}; - const auto val = QString("value1"); + QString url1 = "https://another.example.co.uk"; + QString url2 = "https://www.example.com"; + QString url3 = "http://test.net"; + QString url4 = "http://so.many.subdomains.co.jp"; + QString url5 = "https://192.168.0.1"; + QString url6 = "https://192.168.0.1:8000"; - // Note: Passing a const QJsonObject will fail - const Parameters params{ - {"test-param-1", val}, {"test-param-2", 2}, {"test-param-3", false}, {"object", object}, {"arr", arr}}; + QString res1 = m_browserService->getTopLevelDomainFromUrl(url1); + QString res2 = m_browserService->getTopLevelDomainFromUrl(url2); + QString res3 = m_browserService->getTopLevelDomainFromUrl(url3); + QString res4 = m_browserService->getTopLevelDomainFromUrl(url4); + QString res5 = m_browserService->getTopLevelDomainFromUrl(url5); + QString res6 = m_browserService->getTopLevelDomainFromUrl(url6); - const auto action = QString("test-action"); - const auto message = browserMessageBuilder()->buildResponse(action, NONCE, params, PUBLICKEY, SERVERSECRETKEY); - QVERIFY(!message.isEmpty()); - QCOMPARE(message["action"].toString(), action); - QCOMPARE(message["nonce"].toString(), NONCE); + QCOMPARE(res1, QString("example.co.uk")); + QCOMPARE(res2, QString("example.com")); + QCOMPARE(res3, QString("test.net")); + QCOMPARE(res4, QString("subdomains.co.jp")); + QCOMPARE(res5, QString("192.168.0.1")); + QCOMPARE(res6, QString("192.168.0.1")); +} - const auto decrypted = - browserMessageBuilder()->decryptMessage(message["message"].toString(), NONCE, PUBLICKEY, SERVERSECRETKEY); - QVERIFY(!decrypted.isEmpty()); - QCOMPARE(decrypted["test-param-1"].toString(), QString("value1")); - QCOMPARE(decrypted["test-param-2"].toInt(), 2); - QCOMPARE(decrypted["test-param-3"].toBool(), false); +void TestBrowser::testIsIpAddress() +{ + auto host1 = "example.com"; // Not valid + auto host2 = "192.168.0.1"; + auto host3 = "278.21.2.0"; // Not valid + auto host4 = "2001:0db8:85a3:0000:0000:8a2e:0370:7334"; + auto host5 = "2001:db8:0:1:1:1:1:1"; + auto host6 = "fe80::1ff:fe23:4567:890a"; + auto host7 = "2001:20::1"; + auto host8 = "2001:0db8:85y3:0000:0000:8a2e:0370:7334"; // Not valid - const auto objectResult = decrypted["object"].toObject(); - QCOMPARE(objectResult["test"].toBool(), true); - - const auto arrResult = decrypted["arr"].toArray(); - QCOMPARE(arrResult.size(), 1); - - const auto firstArr = arrResult[0].toObject(); - QCOMPARE(firstArr["test"].toBool(), true); + QVERIFY(!m_browserService->isIpAddress(host1)); + QVERIFY(m_browserService->isIpAddress(host2)); + QVERIFY(!m_browserService->isIpAddress(host3)); + QVERIFY(m_browserService->isIpAddress(host4)); + QVERIFY(m_browserService->isIpAddress(host5)); + QVERIFY(m_browserService->isIpAddress(host6)); + QVERIFY(m_browserService->isIpAddress(host7)); + QVERIFY(!m_browserService->isIpAddress(host8)); } void TestBrowser::testSortPriority() @@ -154,7 +168,8 @@ void TestBrowser::testSortPriority() QScopedPointer entry(new Entry()); entry->setUrl(entryUrl); - QCOMPARE(m_browserService->sortPriority(entry->getAllUrls(), siteUrl, formUrl), expectedScore); + QCOMPARE(m_browserService->sortPriority(m_browserService->getEntryURLs(entry.data()), siteUrl, formUrl), + expectedScore); } void TestBrowser::testSortPriority_data() @@ -170,22 +185,26 @@ void TestBrowser::testSortPriority_data() QTest::newRow("Exact Match") << siteUrl << siteUrl << siteUrl << 100; QTest::newRow("Exact Match (site)") << siteUrl << siteUrl << formUrl << 100; QTest::newRow("Exact Match (form)") << siteUrl << "https://github.net" << siteUrl << 100; - QTest::newRow("Exact Match No Trailing Slash") << "https://github.com" << "https://github.com/" << formUrl << 100; + QTest::newRow("Exact Match No Trailing Slash") << "https://github.com" + << "https://github.com/" << formUrl << 100; QTest::newRow("Exact Match No Scheme") << "github.com/login" << siteUrl << formUrl << 100; - QTest::newRow("Exact Match with Query") - << "https://github.com/login?test=test#fragment" << "https://github.com/login?test=test" << formUrl << 100; + QTest::newRow("Exact Match with Query") << "https://github.com/login?test=test#fragment" + << "https://github.com/login?test=test" << formUrl << 100; QTest::newRow("Site Query Mismatch") << siteUrl << siteUrl + "?test=test" << formUrl << 90; QTest::newRow("Path Mismatch (site)") << "https://github.com/" << siteUrl << formUrl << 85; QTest::newRow("Path Mismatch (site) No Scheme") << "github.com" << siteUrl << formUrl << 85; - QTest::newRow("Path Mismatch (form)") << "https://github.com/" << "https://github.net" << formUrl << 85; + QTest::newRow("Path Mismatch (form)") << "https://github.com/" + << "https://github.net" << formUrl << 85; QTest::newRow("Path Mismatch (diff parent)") << "https://github.com/keepassxreboot" << siteUrl << formUrl << 80; - QTest::newRow("Path Mismatch (diff parent, form)") - << "https://github.com/keepassxreboot" << "https://github.net" << formUrl << 70; + QTest::newRow("Path Mismatch (diff parent, form)") << "https://github.com/keepassxreboot" + << "https://github.net" << formUrl << 70; - QTest::newRow("Subdomain Mismatch (site)") << siteUrl << "https://sub.github.com/" << "https://github.net/" << 60; - QTest::newRow("Subdomain Mismatch (form)") << siteUrl << "https://github.net/" << "https://sub.github.com/" << 50; + QTest::newRow("Subdomain Mismatch (site)") << siteUrl << "https://sub.github.com/" + << "https://github.net/" << 60; + QTest::newRow("Subdomain Mismatch (form)") << siteUrl << "https://github.net/" + << "https://sub.github.com/" << 50; QTest::newRow("Scheme Mismatch") << "http://github.com" << siteUrl << formUrl << 0; QTest::newRow("Scheme Mismatch w/path") << "http://github.com/login" << siteUrl << formUrl << 0; @@ -222,7 +241,7 @@ void TestBrowser::testSearchEntries() QCOMPARE(result[4]->url(), QString("http://github.com")); QCOMPARE(result[5]->url(), QString("http://github.com/login")); - // With matching there should be only 4 results + 4 without a scheme + // With matching there should be only 3 results + 4 without a scheme browserSettings()->setMatchUrlScheme(true); result = m_browserService->searchEntries(db, "https://github.com", "https://github.com/session"); QCOMPARE(result.length(), 7); @@ -291,7 +310,7 @@ void TestBrowser::testSearchEntriesByUUID() for (Entry* entry : entries) { QString testUrl = "keepassxc://by-uuid/" + entry->uuidToHex(); - /* Look for an entry with that UUID. First using shouldIncludeEntry, then through the search */ + /* Look for an entry with that UUID. First using handleEntry, then through the search */ QCOMPARE(m_browserService->shouldIncludeEntry(entry, testUrl, ""), true); auto result = m_browserService->searchEntries(db, testUrl, ""); QCOMPARE(result.length(), 1); @@ -318,48 +337,6 @@ void TestBrowser::testSearchEntriesByUUID() } } -void TestBrowser::testSearchEntriesByReference() -{ - auto db = QSharedPointer::create(); - auto* root = db->rootGroup(); - - /* The URLs don't really matter for this test, we just need some entries */ - QStringList urls = {"https://subdomain.example.com", - "example.com", // Only includes a partial URL for references - "https://another.domain.com", // Additional URL as full reference - "https://subdomain.somesite.com", // Additional URL as partial reference - "", // Full reference will be added to https://subdomain.example.com - "" // Partial reference will be added to https://subdomain.example.com - "https://www.notincluded.com"}; // Should not show in search - auto entries = createEntries(urls, root); - - auto firstEntryUuid = entries.first()->uuidToHex(); - auto secondEntryUuid = entries[1]->uuidToHex(); - auto fullReference = QString("{REF:A@I:%1}").arg(firstEntryUuid); - auto partialReference = QString("https://subdomain.{REF:A@I:%1}").arg(secondEntryUuid); - entries[2]->attributes()->set(EntryAttributes::AdditionalUrlAttribute, fullReference); - entries[3]->attributes()->set(EntryAttributes::AdditionalUrlAttribute, partialReference); - entries[4]->setUrl(fullReference); - entries[5]->setUrl(partialReference); - - auto result = m_browserService->searchEntries(db, "https://subdomain.example.com", ""); - QCOMPARE(result.length(), 6); - QCOMPARE(result[0]->url(), urls[0]); - QCOMPARE(result[1]->url(), urls[1]); - QCOMPARE(result[2]->url(), urls[2]); - QCOMPARE( - result[2]->resolveMultiplePlaceholders(result[2]->attributes()->value(EntryAttributes::AdditionalUrlAttribute)), - urls[0]); - QCOMPARE(result[3]->url(), urls[3]); - QCOMPARE( - result[3]->resolveMultiplePlaceholders(result[3]->attributes()->value(EntryAttributes::AdditionalUrlAttribute)), - urls[0]); - QCOMPARE(result[4]->url(), fullReference); - QCOMPARE(result[4]->resolveMultiplePlaceholders(result[4]->url()), urls[0]); // Should be resolved to the main entry - QCOMPARE(result[5]->url(), partialReference); - QCOMPARE(result[5]->resolveMultiplePlaceholders(result[5]->url()), urls[0]); // Should be resolved to the main entry -} - void TestBrowser::testSearchEntriesWithPort() { auto db = QSharedPointer::create(); @@ -384,7 +361,7 @@ void TestBrowser::testSearchEntriesWithAdditionalURLs() auto entries = createEntries(urls, root); // Add an additional URL to the first entry - entries.first()->attributes()->set(EntryAttributes::AdditionalUrlAttribute, "https://keepassxc.org"); + entries.first()->attributes()->set(BrowserService::ADDITIONAL_URL, "https://keepassxc.org"); auto result = m_browserService->searchEntries(db, "https://github.com", "https://github.com/session"); QCOMPARE(result.length(), 1); @@ -396,120 +373,6 @@ void TestBrowser::testSearchEntriesWithAdditionalURLs() QCOMPARE(additionalResult[0]->url(), QString("https://github.com/")); } -void TestBrowser::testSearchEntriesWithWildcardURLs() -{ - auto db = QSharedPointer::create(); - auto* root = db->rootGroup(); - - QStringList urls = { - "https://github.com/login_page/*", - "https://github.com/*/second", - "https://github.com/*", - "http://github.com/*", - "github.com/*", // Defaults to https - "https://*.github.com/*", - "https://subdomain.*.github.com/*/second", - "https://*.sub.github.com/*", - "https://********", // Invalid wildcard URL - "https://*.thub.com/", // Partial suffix URL - "https://subdomain.yes.github.com/*", - "https://example.com:8448/*", - "https://example.com/*/*", - "https://example.com/$/*", - "https://127.128.129.*:8448/", - "https://127.128.*/", - "https://127.160.*.2/login", - "http://[2001:db8:85a3:8d3:1319:8a2e:370:*]/", - "https://[2001:db8:85a3:8d3:*]:443/", - "fe80::1ff:fe23:4567:890a", - "2001-db8-85a3-8d3-1319-8a2e-370-7348.ipv6-literal.net", - "\"https://thisisatest.com/login.php\"" // Exact URL - }; - - createEntries(urls, root, true); - browserSettings()->setMatchUrlScheme(false); - - // Return first Additional URL - auto firstUrl = [&](Entry* entry) { return entry->attributes()->value(EntryAttributes::AdditionalUrlAttribute); }; - - auto result = m_browserService->searchEntries( - db, "https://github.com/login_page/second", "https://github.com/login_page/second"); - QCOMPARE(result.length(), 5); - QCOMPARE(firstUrl(result[0]), QString("https://github.com/login_page/*")); - QCOMPARE(firstUrl(result[1]), QString("https://github.com/*/second")); - QCOMPARE(firstUrl(result[2]), QString("https://github.com/*")); - QCOMPARE(firstUrl(result[3]), QString("http://github.com/*")); - QCOMPARE(firstUrl(result[4]), QString("github.com/*")); - - result = m_browserService->searchEntries( - db, "https://subdomain.sub.github.com/login_page/second", "https://subdomain.sub.github.com/login_page/second"); - QCOMPARE(result.length(), 3); - QCOMPARE(firstUrl(result[0]), QString("https://*.github.com/*")); - QCOMPARE(firstUrl(result[1]), QString("https://subdomain.*.github.com/*/second")); - QCOMPARE(firstUrl(result[2]), QString("https://*.sub.github.com/*")); - - result = m_browserService->searchEntries( - db, "https://subdomain.sub.github.com/other_page", "https://subdomain.sub.github.com/other_page"); - QCOMPARE(result.length(), 2); - QCOMPARE(firstUrl(result[0]), QString("https://*.github.com/*")); - QCOMPARE(firstUrl(result[1]), QString("https://*.sub.github.com/*")); - - result = m_browserService->searchEntries( - db, "https://subdomain.yes.github.com/other_page/second", "https://subdomain.yes.github.com/other_page/second"); - QCOMPARE(result.length(), 3); - QCOMPARE(firstUrl(result[0]), QString("https://*.github.com/*")); - QCOMPARE(firstUrl(result[1]), QString("https://subdomain.*.github.com/*/second")); - QCOMPARE(firstUrl(result[2]), QString("https://subdomain.yes.github.com/*")); - - result = m_browserService->searchEntries( - db, "https://example.com:8448/login/page", "https://example.com:8448/login/page"); - QCOMPARE(result.length(), 2); - QCOMPARE(firstUrl(result[0]), QString("https://example.com:8448/*")); - QCOMPARE(firstUrl(result[1]), QString("https://example.com/*/*")); - - result = m_browserService->searchEntries( - db, "https://example.com:8449/login/page", "https://example.com:8449/login/page"); - QCOMPARE(result.length(), 1); - QCOMPARE(firstUrl(result[0]), QString("https://example.com/*/*")); - - result = - m_browserService->searchEntries(db, "https://example.com/$/login_page", "https://example.com/$/login_page"); - QCOMPARE(result.length(), 2); - QCOMPARE(firstUrl(result[0]), QString("https://example.com/*/*")); - QCOMPARE(firstUrl(result[1]), QString("https://example.com/$/*")); - - result = m_browserService->searchEntries(db, "https://127.128.129.130:8448/", "https://127.128.129.130:8448/"); - QCOMPARE(result.length(), 2); - - result = m_browserService->searchEntries(db, "https://127.128.129.130/", "https://127.128.129.130/"); - QCOMPARE(result.length(), 1); - QCOMPARE(firstUrl(result[0]), QString("https://127.128.*/")); - - result = m_browserService->searchEntries(db, "https://127.1.129.130/", "https://127.1.129.130/"); - QCOMPARE(result.length(), 0); - - result = m_browserService->searchEntries(db, "https://127.160.8.2/login", "https://127.160.8.2/login"); - QCOMPARE(result.length(), 1); - QCOMPARE(firstUrl(result[0]), QString("https://127.160.*.2/login")); - - // Exact URL - result = - m_browserService->searchEntries(db, "https://thisisatest.com/login.php", "https://thisisatest.com/login.php"); - QCOMPARE(result.length(), 1); - QCOMPARE(firstUrl(result[0]), QString("\"https://thisisatest.com/login.php\"")); - - // With scheme matching enabled - browserSettings()->setMatchUrlScheme(true); - result = m_browserService->searchEntries( - db, "https://github.com/login_page/second", "https://github.com/login_page/second"); - - QCOMPARE(result.length(), 4); - QCOMPARE(firstUrl(result[0]), QString("https://github.com/login_page/*")); - QCOMPARE(firstUrl(result[1]), QString("https://github.com/*/second")); - QCOMPARE(firstUrl(result[2]), QString("https://github.com/*")); - QCOMPARE(firstUrl(result[3]), QString("github.com/*")); // Defaults to https -} - void TestBrowser::testInvalidEntries() { auto db = QSharedPointer::create(); @@ -630,18 +493,14 @@ void TestBrowser::testSubdomainsAndPaths() QCOMPARE(result.length(), 1); } -QList TestBrowser::createEntries(QStringList& urls, Group* root, bool additionalUrl) const +QList TestBrowser::createEntries(QStringList& urls, Group* root) const { QList entries; for (int i = 0; i < urls.length(); ++i) { auto entry = new Entry(); entry->setGroup(root); entry->beginUpdate(); - if (additionalUrl) { - entry->attributes()->set(EntryAttributes::AdditionalUrlAttribute, urls[i]); - } else { - entry->setUrl(urls[i]); - } + entry->setUrl(urls[i]); entry->setUsername(QString("User %1").arg(i)); entry->setUuid(QUuid::createUuid()); entry->setTitle(QString("Name_%1").arg(entry->uuidToHex())); @@ -651,6 +510,26 @@ QList TestBrowser::createEntries(QStringList& urls, Group* root, bool ad return entries; } +void TestBrowser::testValidURLs() +{ + QHash urls; + urls["https://github.com/login"] = true; + urls["https:///github.com/"] = false; + urls["http://github.com/**//*"] = false; + urls["http://*.github.com/login"] = false; + urls["//github.com"] = true; + urls["github.com/{}<>"] = false; + urls["http:/example.com"] = false; + urls["cmd://C:/Toolchains/msys2/usr/bin/mintty \"ssh jon@192.168.0.1:22\""] = true; + urls["file:///Users/testUser/Code/test.html"] = true; + urls["{REF:A@I:46C9B1FFBD4ABC4BBB260C6190BAD20C} "] = true; + + QHashIterator i(urls); + while (i.hasNext()) { + i.next(); + QCOMPARE(Tools::checkUrlValid(i.key()), i.value()); + } +} void TestBrowser::testBestMatchingCredentials() { @@ -779,7 +658,7 @@ void TestBrowser::testBestMatchingWithAdditionalURLs() browserSettings()->setBestMatchOnly(true); // Add an additional URL to the first entry - entries.first()->attributes()->set(EntryAttributes::AdditionalUrlAttribute, "https://test.github.com/anotherpage"); + entries.first()->attributes()->set(BrowserService::ADDITIONAL_URL, "https://test.github.com/anotherpage"); // The first entry should be triggered auto result = m_browserService->searchEntries( @@ -789,68 +668,3 @@ void TestBrowser::testBestMatchingWithAdditionalURLs() QCOMPARE(sorted.length(), 1); QCOMPARE(sorted[0]->url(), urls[0]); } - -void TestBrowser::testRestrictBrowserKey() -{ - auto db = QSharedPointer::create(); - auto* root = db->rootGroup(); - - // Group 0 (root): No browser key restriction given - QStringList urlsRoot = {"https://example.com/0"}; - auto entriesRoot = createEntries(urlsRoot, root); - - // Group 1: restricted to browser with 'key1' - auto* group1 = new Group(); - group1->setParent(root); - group1->setName("TestGroup1"); - group1->customData()->set(BrowserService::OPTION_RESTRICT_KEY, "key1"); - QStringList urls1 = {"https://example.com/1"}; - auto entries1 = createEntries(urls1, group1); - - // Group 2: restricted to browser with 'key2' - auto* group2 = new Group(); - group2->setParent(root); - group2->setName("TestGroup2"); - group2->customData()->set(BrowserService::OPTION_RESTRICT_KEY, "key2"); - QStringList urls2 = {"https://example.com/2"}; - auto entries2 = createEntries(urls2, group2); - - // Group 2b: inherits parent group (2) restriction - auto* group2b = new Group(); - group2b->setParent(group2); - group2b->setName("TestGroup2b"); - QStringList urls2b = {"https://example.com/2b"}; - auto entries2b = createEntries(urls2b, group2b); - - // Group 3: inherits parent group (root) - any browser can see - auto* group3 = new Group(); - group3->setParent(root); - group3->setName("TestGroup3"); - QStringList urls3 = {"https://example.com/3"}; - auto entries3 = createEntries(urls3, group3); - - // Browser 'key0': Groups 1 and 2 are excluded, so entries 0 and 3 will be found - auto siteUrl = QString("https://example.com"); - auto result = m_browserService->searchEntries(db, siteUrl, siteUrl, {"key0"}); - auto sorted = m_browserService->sortEntries(result, siteUrl, siteUrl); - QCOMPARE(sorted.size(), 2); - QCOMPARE(sorted[0]->url(), QString("https://example.com/3")); - QCOMPARE(sorted[1]->url(), QString("https://example.com/0")); - - // Browser 'key1': Group 2 will be excluded, so entries 0, 1, and 3 will be found - result = m_browserService->searchEntries(db, siteUrl, siteUrl, {"key1"}); - sorted = m_browserService->sortEntries(result, siteUrl, siteUrl); - QCOMPARE(sorted.size(), 3); - QCOMPARE(sorted[0]->url(), QString("https://example.com/3")); - QCOMPARE(sorted[1]->url(), QString("https://example.com/1")); - QCOMPARE(sorted[2]->url(), QString("https://example.com/0")); - - // Browser 'key2': Group 1 will be excluded, so entries 0, 2, 2b, 3 will be found - result = m_browserService->searchEntries(db, siteUrl, siteUrl, {"key2"}); - sorted = m_browserService->sortEntries(result, siteUrl, siteUrl); - QCOMPARE(sorted.size(), 4); - QCOMPARE(sorted[0]->url(), QString("https://example.com/3")); - QCOMPARE(sorted[1]->url(), QString("https://example.com/2b")); - QCOMPARE(sorted[2]->url(), QString("https://example.com/2")); - QCOMPARE(sorted[3]->url(), QString("https://example.com/0")); -} diff --git a/tests/TestBrowser.h b/tests/TestBrowser.h index 6a99e085d..c4bfb0471 100644 --- a/tests/TestBrowser.h +++ b/tests/TestBrowser.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2025 KeePassXC Team + * Copyright (C) 2021 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 @@ -36,24 +36,24 @@ private slots: void testDecryptMessage(); void testGetBase64FromKey(); void testIncrementNonce(); - void testBuildResponse(); + + void testTopLevelDomain(); + void testIsIpAddress(); void testSortPriority(); void testSortPriority_data(); void testSearchEntries(); void testSearchEntriesByPath(); void testSearchEntriesByUUID(); - void testSearchEntriesByReference(); void testSearchEntriesWithPort(); void testSearchEntriesWithAdditionalURLs(); - void testSearchEntriesWithWildcardURLs(); void testInvalidEntries(); void testSubdomainsAndPaths(); + void testValidURLs(); void testBestMatchingCredentials(); void testBestMatchingWithAdditionalURLs(); - void testRestrictBrowserKey(); private: - QList createEntries(QStringList& urls, Group* root, bool additionalUrl = false) const; + QList createEntries(QStringList& urls, Group* root) const; void compareEntriesByPath(QSharedPointer db, QList entries, QString path); QScopedPointer m_browserAction; diff --git a/tests/TestCli.cpp b/tests/TestCli.cpp index e70b7b2df..5b136ca83 100644 --- a/tests/TestCli.cpp +++ b/tests/TestCli.cpp @@ -58,7 +58,6 @@ #include #include #include -#include QTEST_MAIN(TestCli) @@ -66,10 +65,7 @@ void TestCli::initTestCase() { QVERIFY(Crypto::init()); - // Create temporary config file - Config::createConfigFromFile(TemporaryFile::createTempConfigFile(), {}); - - QLocale::setDefault(QLocale::c()); + Config::createTempFileInstance(); Bootstrap::bootstrap(); m_devNull.reset(new QFile()); @@ -652,7 +648,6 @@ void TestCli::testClip() || errorOutput.contains("No program defined for clipboard manipulation")) { QSKIP("Clip test skipped due to missing clipboard tool"); } - QVERIFY(!errorOutput.contains("All clipping programs failed")); m_stderr->readLine(); // Skip password prompt QCOMPARE(m_stderr->readAll(), QByteArray()); @@ -696,7 +691,7 @@ void TestCli::testClip() // clang-format on QTRY_COMPARE(clipboard->text(), QString("Password")); - QTRY_COMPARE_WITH_TIMEOUT(clipboard->text(), QString(""), 3000); + QTRY_COMPARE_WITH_TIMEOUT(clipboard->text(), QString(""), 2000); future.waitForFinished(); @@ -707,7 +702,7 @@ void TestCli::testClip() QStringList{"clip", m_dbFile->fileName(), "/Sample Entry", "1", "-t"}); QTRY_VERIFY(isTotp(clipboard->text())); - QTRY_COMPARE_WITH_TIMEOUT(clipboard->text(), QString(""), 3000); + QTRY_COMPARE_WITH_TIMEOUT(clipboard->text(), QString(""), 2000); future.waitForFinished(); @@ -1089,9 +1084,8 @@ void TestCli::testDiceware() } smallWordFile.close(); - // Ensure a warning is shown if the wordlist is too short execCmd(dicewareCmd, {"diceware", "-W", "11", "-w", smallWordFile.fileName()}); - QVERIFY(m_stderr->readLine().length() > 0); + QCOMPARE(m_stderr->readLine(), QByteArray("The word list is too small (< 1000 items)\n")); } void TestCli::testEdit() @@ -1191,72 +1185,90 @@ void TestCli::testEdit() void TestCli::testEstimate_data() { - // clang-format off QTest::addColumn("input"); + QTest::addColumn("length"); + QTest::addColumn("entropy"); + QTest::addColumn("log10"); QTest::addColumn("searchStrings"); - QTest::newRow("Dictionary") - << "password" - << QStringList{"Type: Dictionary", "\tpassword"}; + QTest::newRow("Dictionary") << "password" + << "8" + << "1.0" + << "0.3" << QStringList{"Type: Dictionary", "\tpassword"}; - QTest::newRow("Spatial") - << "sdfg" - << QStringList{"Type: Spatial", "\tsdfg"}; + QTest::newRow("Spatial") << "zxcv" + << "4" + << "10.3" + << "3.1" << QStringList{"Type: Spatial", "\tzxcv"}; - QTest::newRow("Spatial(Rep)") - << "sdfgsdfg" - << QStringList{"Type: Spatial(Rep)", "\tsdfgsdfg"}; + QTest::newRow("Spatial(Rep)") << "sdfgsdfg" + << "8" + << "11.3" + << "3.4" << QStringList{"Type: Spatial(Rep)", "\tsdfgsdfg"}; QTest::newRow("Dictionary / Sequence") << "password123" - << QStringList{"Type: Dictionary", "Type: Sequence", "\tpassword", "\t123"}; + << "11" + << "4.5" + << "1.3" << QStringList{"Type: Dictionary", "Type: Sequence", "\tpassword", "\t123"}; - QTest::newRow("Dict+Leet") - << "p455w0rd" - << QStringList{"Type: Dict+Leet", "\tp455w0rd"}; + QTest::newRow("Dict+Leet") << "p455w0rd" + << "8" + << "2.5" + << "0.7" << QStringList{"Type: Dict+Leet", "\tp455w0rd"}; - QTest::newRow("Dictionary(Rep)") - << "hellohello" - << QStringList{"Type: Dictionary(Rep)", "\thellohello"}; + QTest::newRow("Dictionary(Rep)") << "hellohello" + << "10" + << "7.3" + << "2.2" << QStringList{"Type: Dictionary(Rep)", "\thellohello"}; QTest::newRow("Sequence(Rep) / Dictionary") << "456456foobar" - << QStringList{"Type: Sequence(Rep)", "Type: Dictionary", "\t456456", "\tfoobar"}; + << "12" + << "16.7" + << "5.0" << QStringList{"Type: Sequence(Rep)", "Type: Dictionary", "\t456456", "\tfoobar"}; QTest::newRow("Bruteforce(Rep) / Bruteforce") << "xzxzy" - << QStringList{"Type: Bruteforce(Rep)", "Type: Bruteforce", "\txzxz", "\ty"}; + << "5" + << "16.1" + << "4.8" << QStringList{"Type: Bruteforce(Rep)", "Type: Bruteforce", "\txzxz", "\ty"}; QTest::newRow("Dictionary / Date(Rep)") << "pass20182018" - << QStringList{"Type: Dictionary", "Type: Date(Rep)", "\tpass", "\t20182018"}; + << "12" + << "15.1" + << "4.56" << QStringList{"Type: Dictionary", "Type: Date(Rep)", "\tpass", "\t20182018"}; QTest::newRow("Dictionary / Date / Bruteforce") << "mypass2018-2" - << QStringList{"Type: Dictionary", "Type: Date", "Type: Bruteforce", "\tmypass", "\t2018", "\t-2"}; + << "12" + << "32.9" + << "9.9" << QStringList{"Type: Dictionary", "Type: Date", "Type: Bruteforce", "\tmypass", "\t2018", "\t-2"}; - QTest::newRow("Strong Password") - << "E*!%.Qw{t.X,&bafw)\"Q!ah$%;U/" - << QStringList{"Type: Bruteforce", "\tE*"}; + QTest::newRow("Strong Password") << "E*!%.Qw{t.X,&bafw)\"Q!ah$%;U/" + << "28" + << "165.7" + << "49.8" << QStringList{"Type: Bruteforce", "\tE*"}; // TODO: detect passphrases and adjust entropy calculation accordingly (issue #2347) QTest::newRow("Strong Passphrase") << "squint wooing resupply dangle isolation axis headsman" - << QStringList{"Type: Dictionary", "Type: Bruteforce", "Multi-word extra bits 22.0", "\tsquint", "\t ", "\twooing"}; - // clang-format on + << "53" + << "151.2" + << "45.5" + << QStringList{ + "Type: Dictionary", "Type: Bruteforce", "Multi-word extra bits 22.0", "\tsquint", "\t ", "\twooing"}; } void TestCli::testEstimate() { QFETCH(QString, input); + QFETCH(QString, length); + QFETCH(QString, entropy); + QFETCH(QString, log10); QFETCH(QStringList, searchStrings); - // Calculate expected values since zxcvbn output can vary by platform if different wordlists are used - const auto e = ZxcvbnMatch(input.toUtf8(), nullptr, nullptr); - auto length = QString::number(input.length()); - auto entropy = QString("%1").arg(e, 0, 'f', 3); - auto log10 = QString("%1").arg(e * 0.301029996, 0, 'f', 3); - Estimate estimateCmd; QVERIFY(!estimateCmd.name.isEmpty()); QVERIFY(estimateCmd.getDescriptionLine().contains(estimateCmd.name)); @@ -1314,18 +1326,6 @@ void TestCli::testExport() QVERIFY(csvData.contains(QByteArray( "\"NewDatabase\",\"Sample Entry\",\"User Name\",\"Password\",\"http://www.somesite.com/\",\"Notes\""))); - // HTML exporting - setInput("a"); - execCmd(exportCmd, {"export", "-f", "html", m_dbFile->fileName()}); - QByteArray htmlHeader = m_stdout->readLine(); - QVERIFY(htmlHeader.contains(QByteArray(""))); - QByteArray htmlBody = m_stdout->readAll(); - QVERIFY(htmlBody.contains(QByteArray("

    NewDatabase

    "))); - QVERIFY(htmlBody.contains(QByteArray("Sample Entry" - "User nameUser Name" - "PasswordPassword" - "URLhttp://www.somesite.com/"))); // test invalid format setInput("a"); execCmd(exportCmd, {"export", "-f", "yaml", m_dbFile->fileName()}); @@ -1797,8 +1797,7 @@ void TestCli::testMergeWithKeys() entry->setPassword("secretsecretsecret"); group->addEntry(entry); - auto oldGroup = sourceDatabase->setRootGroup(rootGroup); - delete oldGroup; + sourceDatabase->setRootGroup(rootGroup); auto* otherRootGroup = new Group(); otherRootGroup->setName("root"); @@ -1814,8 +1813,7 @@ void TestCli::testMergeWithKeys() otherEntry->setPassword("secretsecretsecret 2"); otherGroup->addEntry(otherEntry); - oldGroup = targetDatabase->setRootGroup(otherRootGroup); - delete oldGroup; + targetDatabase->setRootGroup(otherRootGroup); sourceDatabase->saveAs(sourceDatabaseFilename); targetDatabase->saveAs(targetDatabaseFilename); @@ -2128,7 +2126,7 @@ void TestCli::testShow() "Tags: \n" "\n" "Attachments:\n" - " Sample attachment.txt (15 B)\n")); + " Sample attachment.txt (15.0 B)\n")); setInput("a"); execCmd(showCmd, {"show", m_dbFile->fileName(), "--show-attachments", "/Homebanking/Subgroup/Subgroup Entry"}); @@ -2254,7 +2252,7 @@ void TestCli::testYubiKeyOption() YubiKey::instance()->findValidKeys(); - const auto keys = YubiKey::instance()->foundKeys().keys(); + auto keys = YubiKey::instance()->foundKeys(); if (keys.isEmpty()) { QSKIP("No YubiKey devices were detected."); } diff --git a/tests/TestConfig.cpp b/tests/TestConfig.cpp index b83a905d0..1177ac585 100644 --- a/tests/TestConfig.cpp +++ b/tests/TestConfig.cpp @@ -35,6 +35,7 @@ void TestConfig::testUpgrade() Config::createConfigFromFile(tempFile.fileName()); // value of new setting should be opposite the value of deprecated setting + QVERIFY(!config()->get(Config::Security_PasswordsRepeatVisible).toBool()); QVERIFY(!config()->get(Config::Security_PasswordsHidden).toBool()); QVERIFY(config()->get(Config::Security_PasswordEmptyPlaceholder).toBool()); diff --git a/tests/TestCsvExporter.cpp b/tests/TestCsvExporter.cpp index c4c937e5d..4854da111 100644 --- a/tests/TestCsvExporter.cpp +++ b/tests/TestCsvExporter.cpp @@ -22,9 +22,9 @@ #include #include "core/Group.h" -#include "core/Totp.h" #include "crypto/Crypto.h" #include "format/CsvExporter.h" +#include "totp/totp.h" QTEST_GUILESS_MAIN(TestCsvExporter) diff --git a/tests/TestCsvParser.cpp b/tests/TestCsvParser.cpp index 69401bfa9..758c31ecc 100644 --- a/tests/TestCsvParser.cpp +++ b/tests/TestCsvParser.cpp @@ -22,18 +22,6 @@ QTEST_GUILESS_MAIN(TestCsvParser) -void TestCsvParser::writeToFile(const QString& contents) -{ - if (!file->open()) { - QFAIL("Cannot open temporary file!"); - } - QTextStream out(file.data()); - out.setCodec("UTF-8"); - out << contents; - out.flush(); - file->close(); -} - void TestCsvParser::initTestCase() { parser.reset(new CsvParser()); @@ -42,7 +30,9 @@ void TestCsvParser::initTestCase() void TestCsvParser::init() { file.reset(new QTemporaryFile()); - + if (not file->open()) { + QFAIL("Cannot open file!"); + } parser->setBackslashSyntax(false); parser->setComment('#'); parser->setFieldSeparator(','); @@ -57,34 +47,37 @@ void TestCsvParser::cleanup() /****************** TEST CASES ******************/ void TestCsvParser::testMissingQuote() { - writeToFile("A,B\n:BM,1"); parser->setTextQualifier(':'); - - QVERIFY(!parser->parse(file.data())); + QTextStream out(file.data()); + out << "A,B\n:BM,1"; + QEXPECT_FAIL("", "Bad format", Continue); + QVERIFY(parser->parse(file.data())); + t = parser->getCsvTable(); QWARN(parser->getStatus().toLatin1()); } void TestCsvParser::testMalformed() { - writeToFile("A,B,C\n:BM::,1,:2:"); parser->setTextQualifier(':'); - - QVERIFY(!parser->parse(file.data())); + QTextStream out(file.data()); + out << "A,B,C\n:BM::,1,:2:"; + QEXPECT_FAIL("", "Bad format", Continue); + QVERIFY(parser->parse(file.data())); + t = parser->getCsvTable(); QWARN(parser->getStatus().toLatin1()); } void TestCsvParser::testBackslashSyntax() { - // attended result: one"\t\"wo - writeToFile("Xone\\\"\\\\t\\\\\\\"w\noX\n" - "X13X,X2\\X,X,\"\"3\"X\r" - "3,X\"4\"X,,\n" - "XX\n" - "\\"); - parser->setBackslashSyntax(true); parser->setTextQualifier(QChar('X')); - + QTextStream out(file.data()); + // attended result: one"\t\"wo + out << "Xone\\\"\\\\t\\\\\\\"w\noX\n" + << "X13X,X2\\X,X,\"\"3\"X\r" + << "3,X\"4\"X,,\n" + << "XX\n" + << "\\"; QVERIFY(parser->parse(file.data())); t = parser->getCsvTable(); QVERIFY(t.at(0).at(0) == "one\"\\t\\\"w\no"); @@ -101,9 +94,9 @@ void TestCsvParser::testBackslashSyntax() void TestCsvParser::testQuoted() { - writeToFile("ro,w,\"end, of \"\"\"\"\"\"row\"\"\"\"\"\n" - "2\n"); - + QTextStream out(file.data()); + out << "ro,w,\"end, of \"\"\"\"\"\"row\"\"\"\"\"\n" + << "2\n"; QVERIFY(parser->parse(file.data())); t = parser->getCsvTable(); QVERIFY(t.at(0).at(0) == "ro"); @@ -115,6 +108,8 @@ void TestCsvParser::testQuoted() void TestCsvParser::testEmptySimple() { + QTextStream out(file.data()); + out << ""; QVERIFY(parser->parse(file.data())); t = parser->getCsvTable(); QVERIFY(t.isEmpty()); @@ -122,8 +117,8 @@ void TestCsvParser::testEmptySimple() void TestCsvParser::testEmptyQuoted() { - writeToFile("\"\""); - + QTextStream out(file.data()); + out << "\"\""; QVERIFY(parser->parse(file.data())); t = parser->getCsvTable(); QVERIFY(t.isEmpty()); @@ -131,8 +126,8 @@ void TestCsvParser::testEmptyQuoted() void TestCsvParser::testEmptyNewline() { - writeToFile("\"\n\""); - + QTextStream out(file.data()); + out << "\"\n\""; QVERIFY(parser->parse(file.data())); t = parser->getCsvTable(); QVERIFY(t.isEmpty()); @@ -147,8 +142,8 @@ void TestCsvParser::testEmptyFile() void TestCsvParser::testNewline() { - writeToFile("1,2\n\n\n"); - + QTextStream out(file.data()); + out << "1,2\n\n\n"; QVERIFY(parser->parse(file.data())); t = parser->getCsvTable(); QVERIFY(t.size() == 1); @@ -158,8 +153,8 @@ void TestCsvParser::testNewline() void TestCsvParser::testCR() { - writeToFile("1,2\r3,4"); - + QTextStream out(file.data()); + out << "1,2\r3,4"; QVERIFY(parser->parse(file.data())); t = parser->getCsvTable(); QVERIFY(t.size() == 2); @@ -171,8 +166,8 @@ void TestCsvParser::testCR() void TestCsvParser::testLF() { - writeToFile("1,2\n3,4"); - + QTextStream out(file.data()); + out << "1,2\n3,4"; QVERIFY(parser->parse(file.data())); t = parser->getCsvTable(); QVERIFY(t.size() == 2); @@ -184,8 +179,8 @@ void TestCsvParser::testLF() void TestCsvParser::testCRLF() { - writeToFile("1,2\r\n3,4"); - + QTextStream out(file.data()); + out << "1,2\r\n3,4"; QVERIFY(parser->parse(file.data())); t = parser->getCsvTable(); QVERIFY(t.size() == 2); @@ -197,12 +192,12 @@ void TestCsvParser::testCRLF() void TestCsvParser::testComments() { - writeToFile(" #one\n" - " \t # two, three \r\n" - " #, sing\t with\r" - " #\t me!\n" - "useful,text #1!"); - + QTextStream out(file.data()); + out << " #one\n" + << " \t # two, three \r\n" + << " #, sing\t with\r" + << " #\t me!\n" + << "useful,text #1!"; QVERIFY(parser->parse(file.data())); t = parser->getCsvTable(); QVERIFY(t.size() == 1); @@ -212,10 +207,10 @@ void TestCsvParser::testComments() void TestCsvParser::testColumns() { - writeToFile("1,2\n" - ",,,,,,,,,a\n" - "a,b,c,d\n"); - + QTextStream out(file.data()); + out << "1,2\n" + << ",,,,,,,,,a\n" + << "a,b,c,d\n"; QVERIFY(parser->parse(file.data())); t = parser->getCsvTable(); QVERIFY(parser->getCsvCols() == 10); @@ -223,10 +218,10 @@ void TestCsvParser::testColumns() void TestCsvParser::testSimple() { - writeToFile(",,2\r,2,3\n" - "A,,B\"\n" - " ,,\n"); - + QTextStream out(file.data()); + out << ",,2\r,2,3\n" + << "A,,B\"\n" + << " ,,\n"; QVERIFY(parser->parse(file.data())); t = parser->getCsvTable(); QVERIFY(t.size() == 4); @@ -246,12 +241,11 @@ void TestCsvParser::testSimple() void TestCsvParser::testSeparator() { - writeToFile("\t\t2\r\t2\t3\n" - "A\t\tB\"\n" - " \t\t\n"); - parser->setFieldSeparator('\t'); - + QTextStream out(file.data()); + out << "\t\t2\r\t2\t3\n" + << "A\t\tB\"\n" + << " \t\t\n"; QVERIFY(parser->parse(file.data())); t = parser->getCsvTable(); QVERIFY(t.size() == 4); @@ -271,11 +265,10 @@ void TestCsvParser::testSeparator() void TestCsvParser::testMultiline() { - writeToFile(":1\r\n2a::b:,:3\r4:\n" - "2\n"); - parser->setTextQualifier(QChar(':')); - + QTextStream out(file.data()); + out << ":1\r\n2a::b:,:3\r4:\n" + << "2\n"; QVERIFY(parser->parse(file.data())); t = parser->getCsvTable(); QVERIFY(t.at(0).at(0) == "1\n2a:b"); @@ -284,34 +277,42 @@ void TestCsvParser::testMultiline() QVERIFY(t.size() == 2); } +void TestCsvParser::testEmptyReparsing() +{ + parser->parse(nullptr); + QVERIFY(parser->reparse()); + t = parser->getCsvTable(); + QVERIFY(t.isEmpty()); +} + void TestCsvParser::testReparsing() { - writeToFile(":te\r\nxt1:,:te\rxt2:,:end of \"this\n string\":\n" - "2\n"); - + QTextStream out(file.data()); + out << ":te\r\nxt1:,:te\rxt2:,:end of \"this\n string\":\n" + << "2\n"; QVERIFY(parser->parse(file.data())); t = parser->getCsvTable(); - QCOMPARE(t.at(0).at(0), QString(":te")); + QEXPECT_FAIL("", "Wrong qualifier", Continue); + QVERIFY(t.at(0).at(0) == "te\nxt1"); parser->setTextQualifier(QChar(':')); QVERIFY(parser->reparse()); t = parser->getCsvTable(); - QCOMPARE(t.at(0).at(0), QString("te\nxt1")); - QCOMPARE(t.at(0).at(1), QString("te\nxt2")); - QCOMPARE(t.at(0).at(2), QString("end of \"this\n string\"")); - QCOMPARE(t.at(1).at(0), QString("2")); - QCOMPARE(t.size(), 2); + QVERIFY(t.at(0).at(0) == "te\nxt1"); + QVERIFY(t.at(0).at(1) == "te\nxt2"); + QVERIFY(t.at(0).at(2) == "end of \"this\n string\""); + QVERIFY(t.at(1).at(0) == "2"); + QVERIFY(t.size() == 2); } void TestCsvParser::testQualifier() { - writeToFile("X1X,X2XX,X,\"\"3\"\"\"X\r" - "3,X\"4\"X,,\n"); - parser->setTextQualifier(QChar('X')); - + QTextStream out(file.data()); + out << "X1X,X2XX,X,\"\"3\"\"\"X\r" + << "3,X\"4\"X,,\n"; QVERIFY(parser->parse(file.data())); t = parser->getCsvTable(); QVERIFY(t.size() == 2); @@ -330,9 +331,10 @@ void TestCsvParser::testUnicode() // CORRECT QString g("\u20AC"); // CORRECT QChar g(0x20AC); // ERROR QChar g("\u20AC"); - writeToFile("€1A2śA\"3śAż\"Ażac"); - parser->setFieldSeparator(QChar('A')); + QTextStream out(file.data()); + out.setCodec("UTF-8"); + out << QString("€1A2śA\"3śAż\"Ażac"); QVERIFY(parser->parse(file.data())); t = parser->getCsvTable(); diff --git a/tests/TestCsvParser.h b/tests/TestCsvParser.h index 0b1717a87..dc4429dec 100644 --- a/tests/TestCsvParser.h +++ b/tests/TestCsvParser.h @@ -19,6 +19,7 @@ #ifndef KEEPASSX_TESTCSVPARSER_H #define KEEPASSX_TESTCSVPARSER_H +#include #include #include "format/CsvParser.h" @@ -37,6 +38,7 @@ private slots: void testUnicode(); void testLF(); + void testEmptyReparsing(); void testSimple(); void testEmptyQuoted(); void testEmptyNewline(); @@ -57,11 +59,10 @@ private slots: void testColumns(); private: - void writeToFile(const QString& contents); - QScopedPointer file; QScopedPointer parser; CsvTable t; + void dumpRow(CsvTable table, int row); }; #endif // KEEPASSX_TESTCSVPARSER_H diff --git a/tests/TestDatabase.cpp b/tests/TestDatabase.cpp index 78b6dac1d..9ab9de785 100644 --- a/tests/TestDatabase.cpp +++ b/tests/TestDatabase.cpp @@ -30,11 +30,6 @@ #include "format/KeePass2Writer.h" #include "util/TemporaryFile.h" -#ifdef Q_OS_WIN -#include -#include -#endif - QTEST_GUILESS_MAIN(TestDatabase) static QString dbFileName = QStringLiteral(KEEPASSX_TEST_DATA_DIR).append("/NewDatabase.kdbx"); @@ -123,12 +118,6 @@ void TestDatabase::testSaveAs() QVERIFY(!db->isModified()); QCOMPARE(spyFilePathChanged.count(), 1); QVERIFY(QFile::exists(newDbFileName)); -#ifdef Q_OS_WIN - QVERIFY(!QFileInfo(newDbFileName).isHidden()); - SetFileAttributes(newDbFileName.toStdString().c_str(), FILE_ATTRIBUTE_HIDDEN); - QVERIFY2(db->saveAs(newDbFileName, Database::Atomic, QString(), &error), error.toLatin1()); - QVERIFY(QFileInfo(newDbFileName).isHidden()); -#endif QFile::remove(newDbFileName); QVERIFY(!QFile::exists(newDbFileName)); @@ -164,7 +153,7 @@ void TestDatabase::testSignals() // Short delay to allow file system settling to reduce test failures Tools::wait(100); - QSignalSpy spyFileChanged(db.data(), &Database::databaseFileChanged); + QSignalSpy spyFileChanged(db.data(), SIGNAL(databaseFileChanged())); QVERIFY(tempFile.copyFromFile(dbFileName)); QTRY_COMPARE(spyFileChanged.count(), 1); QTRY_VERIFY(!db->isModified()); @@ -268,41 +257,3 @@ void TestDatabase::testCustomIcons() QCOMPARE(iconData.name, QString("Test")); QCOMPARE(iconData.lastModified, date); } - -void TestDatabase::testExternallyModified() -{ - TemporaryFile tempFile; - QVERIFY(tempFile.copyFromFile(dbFileName)); - - auto db = QSharedPointer::create(); - auto key = QSharedPointer::create(); - key->addKey(QSharedPointer::create("a")); - - QString error; - QVERIFY(db->open(tempFile.fileName(), key, &error) == true); - db->metadata()->setName("test2"); - QVERIFY(db->save(Database::Atomic, {}, &error)); - - QSignalSpy spyFileChanged(db.data(), &Database::databaseFileChanged); - QVERIFY(tempFile.copyFromFile(dbFileName)); - QTRY_COMPARE(spyFileChanged.count(), 1); - // the first argument of the databaseFileChanged signal (triggeredBySave) should be false - QVERIFY(spyFileChanged.at(0).length() == 1); - QVERIFY(spyFileChanged.at(0).at(0).type() == QVariant::Bool); - QVERIFY(spyFileChanged.at(0).at(0).toBool() == false); - spyFileChanged.clear(); - // shouldn't be able to save due to external changes - QVERIFY(db->save(Database::Atomic, {}, &error) == false); - QApplication::processEvents(); - // save should have triggered another databaseFileChanged signal - QVERIFY(spyFileChanged.count() >= 1); - // the first argument of the databaseFileChanged signal (triggeredBySave) should be true - QVERIFY(spyFileChanged.at(0).at(0).type() == QVariant::Bool); - QVERIFY(spyFileChanged.at(0).at(0).toBool() == true); - - // should be able to overwrite externally modified changes when explicitly requested - db->setIgnoreFileChangesUntilSaved(true); - QVERIFY(db->save(Database::Atomic, {}, &error)); - // ignoreFileChangesUntilSaved should reset after save - QVERIFY(db->ignoreFileChangesUntilSaved() == false); -} diff --git a/tests/TestDatabase.h b/tests/TestDatabase.h index e23b23cf8..9f4bfab56 100644 --- a/tests/TestDatabase.h +++ b/tests/TestDatabase.h @@ -36,7 +36,6 @@ private slots: void testEmptyRecycleBinOnEmpty(); void testEmptyRecycleBinWithHierarchicalData(); void testCustomIcons(); - void testExternallyModified(); }; #endif // KEEPASSX_TESTDATABASE_H diff --git a/tests/TestDeletedObjects.cpp b/tests/TestDeletedObjects.cpp index ab7d26078..986ad6925 100644 --- a/tests/TestDeletedObjects.cpp +++ b/tests/TestDeletedObjects.cpp @@ -37,7 +37,7 @@ void TestDeletedObjects::createAndDelete(QSharedPointer db, int delObj Group* root = db->rootGroup(); int rootChildrenCount = root->children().size(); - auto g = new Group(); + Group* g = new Group(); g->setParent(root); QUuid gUuid = QUuid::createUuid(); g->setUuid(gUuid); @@ -46,19 +46,19 @@ void TestDeletedObjects::createAndDelete(QSharedPointer db, int delObj QCOMPARE(db->deletedObjects().at(delObjectsSize - 1).uuid, gUuid); QCOMPARE(rootChildrenCount, root->children().size()); - auto g1 = new Group(); + Group* g1 = new Group(); g1->setParent(root); QUuid g1Uuid = QUuid::createUuid(); g1->setUuid(g1Uuid); - auto e1 = new Entry(); + Entry* e1 = new Entry(); e1->setGroup(g1); QUuid e1Uuid = QUuid::createUuid(); e1->setUuid(e1Uuid); - auto g2 = new Group(); + Group* g2 = new Group(); g2->setParent(g1); QUuid g2Uuid = QUuid::createUuid(); g2->setUuid(g2Uuid); - auto e2 = new Entry(); + Entry* e2 = new Entry(); e2->setGroup(g2); QUuid e2Uuid = QUuid::createUuid(); e2->setUuid(e2Uuid); @@ -73,7 +73,7 @@ void TestDeletedObjects::createAndDelete(QSharedPointer db, int delObj QCOMPARE(db->deletedObjects().at(delObjectsSize - 1).uuid, g1Uuid); QCOMPARE(rootChildrenCount, root->children().size()); - auto e3 = new Entry(); + Entry* e3 = new Entry(); e3->setGroup(root); QUuid e3Uuid = QUuid::createUuid(); e3->setUuid(e3Uuid); diff --git a/tests/TestEntry.cpp b/tests/TestEntry.cpp index 51cb4799c..3983db101 100644 --- a/tests/TestEntry.cpp +++ b/tests/TestEntry.cpp @@ -86,7 +86,6 @@ void TestEntry::testClone() { QScopedPointer entryOrg(new Entry()); entryOrg->setUuid(QUuid::createUuid()); - entryOrg->setPassword("pass"); entryOrg->setTitle("Original Title"); entryOrg->beginUpdate(); entryOrg->setTitle("New Title"); @@ -116,7 +115,7 @@ void TestEntry::testClone() QScopedPointer entryCloneRename(entryOrg->clone(Entry::CloneRenameTitle)); QCOMPARE(entryCloneRename->uuid(), entryOrg->uuid()); QCOMPARE(entryCloneRename->title(), QString("New Title - Clone")); - // Cloning should not modify time info unless explicitly requested + // Cloning should not modify time info unless explicity requested QCOMPARE(entryCloneRename->timeInfo(), entryOrg->timeInfo()); QScopedPointer entryCloneResetTime(entryOrg->clone(Entry::CloneResetTimeInfo)); @@ -321,12 +320,10 @@ void TestEntry::testResolveRecursivePlaceholders() entry7->setTitle(QString("{REF:T@I:%1} and something else").arg(entry3->uuidToHex())); entry7->setUsername(QString("{TITLE}")); entry7->setPassword(QString("PASSWORD")); - entry7->setNotes(QString("{lots} {of} {braces}")); QCOMPARE(entry7->resolvePlaceholder(entry7->title()), QString("Entry2Title and something else")); QCOMPARE(entry7->resolvePlaceholder(entry7->username()), QString("Entry2Title and something else")); QCOMPARE(entry7->resolvePlaceholder(entry7->password()), QString("PASSWORD")); - QCOMPARE(entry7->resolvePlaceholder(entry7->notes()), QString("{lots} {of} {braces}")); } void TestEntry::testResolveReferencePlaceholders() @@ -514,86 +511,6 @@ void TestEntry::testResolveNonIdPlaceholdersToUuid() } } -void TestEntry::testResolveConversionPlaceholders() -{ - Database db; - auto* root = db.rootGroup(); - - auto* entry1 = new Entry(); - entry1->setGroup(root); - entry1->setUuid(QUuid::createUuid()); - entry1->setTitle("Title1 {T-CONV:/{USERNAME}/lower/} {T-CONV:/{PASSWORD}/upper/}"); - entry1->setUsername("Username1"); - entry1->setPassword("Password1"); - entry1->setUrl("https://example.com/?test=3423&h=sdsds"); - - auto* entry2 = new Entry(); - entry2->setGroup(root); - entry2->setUuid(QUuid::createUuid()); - entry2->setTitle("Title2"); - entry2->setUsername(QString("{T-CONV:/{REF:U@I:%1}/UPPER/}").arg(entry1->uuidToHex())); - entry2->setPassword(QString("{REF:P@I:%1}").arg(entry1->uuidToHex())); - entry2->setUrl("cmd://ssh {USERNAME}@server.com -p {PASSWORD}"); - - // Test complicated and nested conversions - QCOMPARE(entry1->resolveMultiplePlaceholders(entry1->title()), QString("Title1 username1 PASSWORD1")); - QCOMPARE(entry2->resolveMultiplePlaceholders(entry2->url()), - QString("cmd://ssh USERNAME1@server.com -p Password1")); - // Test base64 and hex conversions - QCOMPARE(entry1->resolveMultiplePlaceholders("{T-CONV:/{PASSWORD}/base64/}"), QString("UGFzc3dvcmQx")); - QCOMPARE(entry1->resolveMultiplePlaceholders("{T-CONV:/{PASSWORD}/hex/}"), QString("50617373776f726431")); - // Test URL encode and decode - auto encodedURL = entry1->resolveMultiplePlaceholders("{T-CONV:/{URL}/uri/}"); - QCOMPARE(encodedURL, QString("https%3A%2F%2Fexample.com%2F%3Ftest%3D3423%26h%3Dsdsds")); - QCOMPARE(entry1->resolveMultiplePlaceholders( - "{T-CONV:/https%3A%2F%2Fexample.com%2F%3Ftest%3D3423%26h%3Dsdsds/uri-dec/}"), - entry1->url()); - // Test invalid syntax - QString error; - entry1->resolveConversionPlaceholder("{T-CONV:/{USERNAME}/junk/}", &error); - QVERIFY(!error.isEmpty()); - entry1->resolveConversionPlaceholder("{T-CONV:}", &error); - QVERIFY(!error.isEmpty()); - // Check that error gets cleared - entry1->resolveConversionPlaceholder("{T-CONV:/a/upper/}", &error); - QVERIFY(error.isEmpty()); -} - -void TestEntry::testResolveReplacePlaceholders() -{ - Database db; - auto* root = db.rootGroup(); - - auto* entry1 = new Entry(); - entry1->setGroup(root); - entry1->setUuid(QUuid::createUuid()); - entry1->setTitle("Title1"); - entry1->setUsername("Username1"); - entry1->setPassword("Password1"); - - auto* entry2 = new Entry(); - entry2->setGroup(root); - entry2->setUuid(QUuid::createUuid()); - entry2->setTitle("SAP server1 12345"); - entry2->setUsername(QString("{T-REPLACE-RX:/{REF:U@I:%1}/\\d$/2/}").arg(entry1->uuidToHex())); - entry2->setPassword(QString("{REF:P@I:%1}").arg(entry1->uuidToHex())); - entry2->setUrl( - R"(cmd://sap.exe -system={T-REPLACE-RX:/{Title}/(?i)^(.* )?(\w+(?=(\s* \d+$)))\3/$2/} -client={T-REPLACE-RX:/{Title}/(?i)^.* (?=\d+$)//} -user={USERNAME} -pw={PASSWORD})"); - - // Test complicated and nested replacements - QCOMPARE(entry2->resolveMultiplePlaceholders(entry2->url()), - QString("cmd://sap.exe -system=server1 -client=12345 -user=Username2 -pw=Password1")); - // Test invalid syntax - QString error; - entry1->resolveRegexPlaceholder("{T-REPLACE-RX:/{USERNAME}/.*+?/test/}", &error); // invalid regex - QVERIFY(!error.isEmpty()); - entry1->resolveRegexPlaceholder("{T-REPLACE-RX:/{USERNAME}/.*/}", &error); // no replacement - QVERIFY(!error.isEmpty()); - // Check that error gets cleared - entry1->resolveRegexPlaceholder("{T-REPLACE-RX:/{USERNAME}/\\d/2/}", &error); - QVERIFY(error.isEmpty()); -} - void TestEntry::testResolveClonedEntry() { Database db; @@ -674,7 +591,7 @@ void TestEntry::testResolveClonedEntry() void TestEntry::testIsRecycled() { - auto entry = new Entry(); + Entry* entry = new Entry(); QVERIFY(!entry->isRecycled()); Database db; @@ -687,10 +604,10 @@ void TestEntry::testIsRecycled() db.recycleEntry(entry); QVERIFY(entry->isRecycled()); - auto group1 = new Group(); + Group* group1 = new Group(); group1->setParent(root); - auto entry1 = new Entry(); + Entry* entry1 = new Entry(); entry1->setGroup(group1); QVERIFY(!entry1->isRecycled()); db.recycleGroup(group1); @@ -703,16 +620,16 @@ void TestEntry::testMoveUpDown() Group* root = db.rootGroup(); QVERIFY(root); - auto entry0 = new Entry(); + Entry* entry0 = new Entry(); QVERIFY(entry0); entry0->setGroup(root); - auto entry1 = new Entry(); + Entry* entry1 = new Entry(); QVERIFY(entry1); entry1->setGroup(root); - auto entry2 = new Entry(); + Entry* entry2 = new Entry(); QVERIFY(entry2); entry2->setGroup(root); - auto entry3 = new Entry(); + Entry* entry3 = new Entry(); QVERIFY(entry3); entry3->setGroup(root); // default order, straight diff --git a/tests/TestEntry.h b/tests/TestEntry.h index 69f5b0d46..3bfd8f52d 100644 --- a/tests/TestEntry.h +++ b/tests/TestEntry.h @@ -36,8 +36,6 @@ private slots: void testResolveRecursivePlaceholders(); void testResolveReferencePlaceholders(); void testResolveNonIdPlaceholdersToUuid(); - void testResolveConversionPlaceholders(); - void testResolveReplacePlaceholders(); void testResolveClonedEntry(); void testIsRecycled(); void testMoveUpDown(); diff --git a/tests/TestEntryModel.cpp b/tests/TestEntryModel.cpp index e3cdb4a46..ce4b66881 100644 --- a/tests/TestEntryModel.cpp +++ b/tests/TestEntryModel.cpp @@ -42,23 +42,23 @@ void TestEntryModel::initTestCase() void TestEntryModel::test() { - auto group1 = new Group(); - auto group2 = new Group(); + Group* group1 = new Group(); + Group* group2 = new Group(); - auto entry1 = new Entry(); + Entry* entry1 = new Entry(); entry1->setGroup(group1); entry1->setTitle("testTitle1"); - auto entry2 = new Entry(); + Entry* entry2 = new Entry(); entry2->setGroup(group1); entry2->setTitle("testTitle2"); - auto model = new EntryModel(this); + EntryModel* model = new EntryModel(this); QSignalSpy spyAboutToBeMoved(model, SIGNAL(rowsAboutToBeMoved(QModelIndex, int, int, QModelIndex, int))); QSignalSpy spyMoved(model, SIGNAL(rowsMoved(QModelIndex, int, int, QModelIndex, int))); - auto modelTest = new ModelTest(model, this); + ModelTest* modelTest = new ModelTest(model, this); model->setGroup(group1); @@ -79,7 +79,7 @@ void TestEntryModel::test() QSignalSpy spyAboutToRemove(model, SIGNAL(rowsAboutToBeRemoved(QModelIndex, int, int))); QSignalSpy spyRemoved(model, SIGNAL(rowsRemoved(QModelIndex, int, int))); - auto entry3 = new Entry(); + Entry* entry3 = new Entry(); entry3->setGroup(group1); QCOMPARE(spyAboutToBeMoved.count(), 0); @@ -130,10 +130,10 @@ void TestEntryModel::test() void TestEntryModel::testAttachmentsModel() { - auto entryAttachments = new EntryAttachments(this); + EntryAttachments* entryAttachments = new EntryAttachments(this); - auto model = new EntryAttachmentsModel(this); - auto modelTest = new ModelTest(model, this); + EntryAttachmentsModel* model = new EntryAttachmentsModel(this); + ModelTest* modelTest = new ModelTest(model, this); QCOMPARE(model->rowCount(), 0); model->setEntryAttachments(entryAttachments); @@ -164,7 +164,7 @@ void TestEntryModel::testAttachmentsModel() QSignalSpy spyReset(model, SIGNAL(modelReset())); entryAttachments->clear(); - model->setEntryAttachments(nullptr); + model->setEntryAttachments(0); QCOMPARE(spyReset.count(), 2); QCOMPARE(model->rowCount(), 0); @@ -175,10 +175,10 @@ void TestEntryModel::testAttachmentsModel() void TestEntryModel::testAttributesModel() { - auto entryAttributes = new EntryAttributes(this); + EntryAttributes* entryAttributes = new EntryAttributes(this); - auto model = new EntryAttributesModel(this); - auto modelTest = new ModelTest(model, this); + EntryAttributesModel* model = new EntryAttributesModel(this); + ModelTest* modelTest = new ModelTest(model, this); QCOMPARE(model->rowCount(), 0); model->setEntryAttributes(entryAttributes); @@ -201,9 +201,6 @@ void TestEntryModel::testAttributesModel() // make sure these don't generate messages entryAttributes->set("Title", "test"); - entryAttributes->set("UserName", "test"); - entryAttributes->set("Password", "test"); - entryAttributes->set("URL", "test"); entryAttributes->set("Notes", "test"); QCOMPARE(spyDataChanged.count(), 1); @@ -217,20 +214,10 @@ void TestEntryModel::testAttributesModel() entryAttributes->set("2nd", value, true); QVERIFY(entryAttributes->isProtected("2nd")); QCOMPARE(entryAttributes->value("2nd"), value); - entryAttributes->clear(); - - // test attribute sorting - entryAttributes->set("Test1", "1"); - entryAttributes->set("Test11", "11"); - entryAttributes->set("Test2", "2"); - QCOMPARE(model->rowCount(), 3); - QCOMPARE(model->data(model->index(0, 0)).toString(), QString("Test1")); - QCOMPARE(model->data(model->index(1, 0)).toString(), QString("Test2")); - QCOMPARE(model->data(model->index(2, 0)).toString(), QString("Test11")); QSignalSpy spyReset(model, SIGNAL(modelReset())); entryAttributes->clear(); - model->setEntryAttributes(nullptr); + model->setEntryAttributes(0); QCOMPARE(spyReset.count(), 2); QCOMPARE(model->rowCount(), 0); @@ -240,8 +227,8 @@ void TestEntryModel::testAttributesModel() void TestEntryModel::testDefaultIconModel() { - auto model = new DefaultIconModel(this); - auto modelTest = new ModelTest(model, this); + DefaultIconModel* model = new DefaultIconModel(this); + ModelTest* modelTest = new ModelTest(model, this); QCOMPARE(model->rowCount(), databaseIcons()->count()); @@ -251,8 +238,8 @@ void TestEntryModel::testDefaultIconModel() void TestEntryModel::testCustomIconModel() { - auto model = new CustomIconModel(this); - auto modelTest = new ModelTest(model, this); + CustomIconModel* model = new CustomIconModel(this); + ModelTest* modelTest = new ModelTest(model, this); QCOMPARE(model->rowCount(), 0); @@ -277,12 +264,12 @@ void TestEntryModel::testCustomIconModel() void TestEntryModel::testAutoTypeAssociationsModel() { - auto model = new AutoTypeAssociationsModel(this); - auto modelTest = new ModelTest(model, this); + AutoTypeAssociationsModel* model = new AutoTypeAssociationsModel(this); + ModelTest* modelTest = new ModelTest(model, this); QCOMPARE(model->rowCount(), 0); - auto associations = new AutoTypeAssociations(this); + AutoTypeAssociations* associations = new AutoTypeAssociations(this); model->setAutoTypeAssociations(associations); QCOMPARE(model->rowCount(), 0); @@ -313,24 +300,28 @@ void TestEntryModel::testAutoTypeAssociationsModel() void TestEntryModel::testProxyModel() { - auto modelSource = new EntryModel(this); - auto modelProxy = new SortFilterHideProxyModel(this); + EntryModel* modelSource = new EntryModel(this); + SortFilterHideProxyModel* modelProxy = new SortFilterHideProxyModel(this); modelProxy->setSourceModel(modelSource); - auto modelTest = new ModelTest(modelProxy, this); + ModelTest* modelTest = new ModelTest(modelProxy, this); - auto db = new Database(); - auto entry = new Entry(); + Database* db = new Database(); + Entry* entry = new Entry(); entry->setTitle("Test Title"); entry->setGroup(db->rootGroup()); modelSource->setGroup(db->rootGroup()); - // Test hiding and showing a column - auto columnCount = modelProxy->columnCount(); + /** + * @author Fonic + * Update comparison value of modelProxy->columnCount() to account for + * additional columns 'Password', 'Notes', 'Expires', 'Created', 'Modified', + * 'Accessed', 'Paperclip', 'Attachments', and TOTP + */ QSignalSpy spyColumnRemove(modelProxy, SIGNAL(columnsAboutToBeRemoved(QModelIndex, int, int))); modelProxy->hideColumn(0, true); - QCOMPARE(modelProxy->columnCount(), columnCount - 1); + QCOMPARE(modelProxy->columnCount(), 14); QVERIFY(!spyColumnRemove.isEmpty()); int oldSpyColumnRemoveSize = spyColumnRemove.size(); @@ -344,9 +335,15 @@ void TestEntryModel::testProxyModel() entryList << entry; modelSource->setEntries(entryList); + /** + * @author Fonic + * Update comparison value of modelProxy->columnCount() to account for + * additional columns 'Password', 'Notes', 'Expires', 'Created', 'Modified', + * 'Accessed', 'Paperclip', 'Attachments', and TOTP + */ QSignalSpy spyColumnInsert(modelProxy, SIGNAL(columnsAboutToBeInserted(QModelIndex, int, int))); modelProxy->hideColumn(0, false); - QCOMPARE(modelProxy->columnCount(), columnCount); + QCOMPARE(modelProxy->columnCount(), 15); QVERIFY(!spyColumnInsert.isEmpty()); int oldSpyColumnInsertSize = spyColumnInsert.size(); @@ -361,18 +358,18 @@ void TestEntryModel::testProxyModel() void TestEntryModel::testDatabaseDelete() { - auto model = new EntryModel(this); - auto modelTest = new ModelTest(model, this); + EntryModel* model = new EntryModel(this); + ModelTest* modelTest = new ModelTest(model, this); - auto db1 = new Database(); - auto group1 = new Group(); + Database* db1 = new Database(); + Group* group1 = new Group(); group1->setParent(db1->rootGroup()); - auto entry1 = new Entry(); + Entry* entry1 = new Entry(); entry1->setGroup(group1); - auto db2 = new Database(); - auto entry2 = new Entry(); + Database* db2 = new Database(); + Entry* entry2 = new Entry(); entry2->setGroup(db2->rootGroup()); model->setEntries(QList() << entry1 << entry2); diff --git a/tests/TestEntrySearcher.cpp b/tests/TestEntrySearcher.cpp index d002a3166..e2a91d212 100644 --- a/tests/TestEntrySearcher.cpp +++ b/tests/TestEntrySearcher.cpp @@ -17,8 +17,6 @@ #include "TestEntrySearcher.h" #include "core/Group.h" -#include "core/Tools.h" -#include "core/Totp.h" #include @@ -46,21 +44,21 @@ void TestEntrySearcher::testSearch() * - group211 * - group2111 */ - auto group1 = new Group(); - auto group2 = new Group(); - auto group3 = new Group(); + Group* group1 = new Group(); + Group* group2 = new Group(); + Group* group3 = new Group(); group1->setParent(m_rootGroup); group2->setParent(m_rootGroup); group3->setParent(m_rootGroup); - auto group11 = new Group(); + Group* group11 = new Group(); group11->setParent(group1); - auto group21 = new Group(); - auto group211 = new Group(); - auto group2111 = new Group(); + Group* group21 = new Group(); + Group* group211 = new Group(); + Group* group2111 = new Group(); group21->setParent(group2); group211->setParent(group21); @@ -68,39 +66,39 @@ void TestEntrySearcher::testSearch() group1->setSearchingEnabled(Group::Disable); - auto eRoot = new Entry(); + Entry* eRoot = new Entry(); eRoot->setTitle("test search term test"); eRoot->setGroup(m_rootGroup); - auto eRoot2 = new Entry(); + Entry* eRoot2 = new Entry(); eRoot2->setNotes("test term test"); eRoot2->setGroup(m_rootGroup); // Searching is disabled for these - auto e1 = new Entry(); + Entry* e1 = new Entry(); e1->setUsername("test search term test"); e1->setGroup(group1); - auto e11 = new Entry(); + Entry* e11 = new Entry(); e11->setNotes("test search term test"); e11->setGroup(group11); // End searching disabled - auto e2111 = new Entry(); + Entry* e2111 = new Entry(); e2111->setTitle("test search term test"); e2111->setGroup(group2111); - auto e2111b = new Entry(); + Entry* e2111b = new Entry(); e2111b->setNotes("test search test"); e2111b->setUsername("user123"); e2111b->setPassword("testpass"); e2111b->setGroup(group2111); - auto e3 = new Entry(); + Entry* e3 = new Entry(); e3->setUrl("test search term test"); e3->setGroup(group3); - auto e3b = new Entry(); + Entry* e3b = new Entry(); e3b->setTitle("test search test 123"); e3b->setUsername("test@email.com"); e3b->setPassword("realpass"); @@ -155,7 +153,7 @@ void TestEntrySearcher::testSearch() void TestEntrySearcher::testAndConcatenationInSearch() { - auto entry = new Entry(); + Entry* entry = new Entry(); entry->setNotes("abc def ghi"); entry->setTitle("jkl"); entry->setGroup(m_rootGroup); @@ -181,7 +179,7 @@ void TestEntrySearcher::testAndConcatenationInSearch() void TestEntrySearcher::testAllAttributesAreSearched() { - auto entry = new Entry(); + Entry* entry = new Entry(); entry->setGroup(m_rootGroup); entry->setTitle("testTitle"); @@ -278,35 +276,35 @@ void TestEntrySearcher::testGroup() * - group2 * - subgroup2 (1 entry) */ - auto group1 = new Group(); - auto group2 = new Group(); + Group* group1 = new Group(); + Group* group2 = new Group(); group1->setParent(m_rootGroup); group1->setName("group1"); group2->setParent(m_rootGroup); group2->setName("group2"); - auto subgroup1 = new Group(); + Group* subgroup1 = new Group(); subgroup1->setName("subgroup1"); subgroup1->setParent(group1); - auto subgroup2 = new Group(); + Group* subgroup2 = new Group(); subgroup2->setName("subgroup2"); subgroup2->setParent(group2); - auto eGroup1 = new Entry(); + Entry* eGroup1 = new Entry(); eGroup1->setTitle("Entry Group 1"); eGroup1->setGroup(group1); - auto eSub1 = new Entry(); + Entry* eSub1 = new Entry(); eSub1->setTitle("test search term test"); eSub1->setGroup(subgroup1); - auto eSub2 = new Entry(); + Entry* eSub2 = new Entry(); eSub2->setNotes("test test"); eSub2->setGroup(subgroup1); - auto eSub3 = new Entry(); + Entry* eSub3 = new Entry(); eSub3->setNotes("test term test"); eSub3->setGroup(subgroup2); @@ -365,7 +363,7 @@ void TestEntrySearcher::testSkipProtected() m_entrySearcher.search("_testProtected:apple _testAttribute:testE1 _testAttribute:testE2", m_rootGroup); QCOMPARE(m_searchResult, {}); - // also move the protected term around to exercise the short-circuit logic + // also move the protected term around to execurise the short-circut logic m_searchResult = m_entrySearcher.search("_testAttribute:testE2 _testProtected:apple", m_rootGroup); QCOMPARE(m_searchResult, expectE2); m_searchResult = m_entrySearcher.search("_testAttribute:testE1 _testProtected:apple", m_rootGroup); @@ -374,63 +372,3 @@ void TestEntrySearcher::testSkipProtected() m_entrySearcher.search("_testAttribute:testE1 _testProtected:apple _testAttribute:testE2", m_rootGroup); QCOMPARE(m_searchResult, {}); } - -void TestEntrySearcher::testUUIDSearch() -{ - auto entry1 = new Entry(); - entry1->setGroup(m_rootGroup); - entry1->setTitle("testTitle"); - auto uuid1 = QUuid::createUuid(); - entry1->setUuid(uuid1); - - auto entry2 = new Entry(); - entry2->setGroup(m_rootGroup); - entry2->setTitle("testTitle2"); - auto uuid2 = QUuid::createUuid(); - entry2->setUuid(uuid2); - - m_searchResult = m_entrySearcher.search("uuid:", m_rootGroup); - QCOMPARE(m_searchResult.count(), 2); - - m_searchResult = m_entrySearcher.search("uuid:" + Tools::uuidToHex(uuid1), m_rootGroup); - QCOMPARE(m_searchResult.count(), 1); -} - -void TestEntrySearcher::testTotpSearch() -{ - auto entry1 = new Entry(); - entry1->setGroup(m_rootGroup); - entry1->setTitle("Regular Entry"); - - auto entry2 = new Entry(); - entry2->setGroup(m_rootGroup); - entry2->setTitle("TOTP Entry"); - // Set up TOTP on entry2 - auto totpSettings = Totp::createSettings("GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ", 6, 30); - entry2->setTotp(totpSettings); - - auto entry3 = new Entry(); - entry3->setGroup(m_rootGroup); - entry3->setTitle("Another TOTP Entry"); - // Set up TOTP on entry3 - auto totpSettings2 = Totp::createSettings("MFRGG43UEBUXGIDBKRWXAZLSMUQGG6LQ", 6, 30); - entry3->setTotp(totpSettings2); - - // Test searching for TOTP entries - m_searchResult = m_entrySearcher.search("has:totp", m_rootGroup); - QCOMPARE(m_searchResult.count(), 2); - QVERIFY(m_searchResult.contains(entry2)); - QVERIFY(m_searchResult.contains(entry3)); - QVERIFY(!m_searchResult.contains(entry1)); - - // Test case insensitive search - m_searchResult = m_entrySearcher.search("has:TOTP", m_rootGroup); - QCOMPARE(m_searchResult.count(), 2); - - // Test excluding TOTP entries - m_searchResult = m_entrySearcher.search("!has:totp", m_rootGroup); - QCOMPARE(m_searchResult.count(), 1); - QVERIFY(m_searchResult.contains(entry1)); - QVERIFY(!m_searchResult.contains(entry2)); - QVERIFY(!m_searchResult.contains(entry3)); -} diff --git a/tests/TestEntrySearcher.h b/tests/TestEntrySearcher.h index 54a45d578..becd5f20d 100644 --- a/tests/TestEntrySearcher.h +++ b/tests/TestEntrySearcher.h @@ -38,8 +38,6 @@ private slots: void testCustomAttributesAreSearched(); void testGroup(); void testSkipProtected(); - void testUUIDSearch(); - void testTotpSearch(); private: Group* m_rootGroup; diff --git a/tests/TestFdoSecrets.cpp b/tests/TestFdoSecrets.cpp index 38a50af99..0f4c374a4 100644 --- a/tests/TestFdoSecrets.cpp +++ b/tests/TestFdoSecrets.cpp @@ -69,7 +69,7 @@ void TestFdoSecrets::testSpecialCharsInAttributeValue() e2->setTitle("titleB"); e2->attributes()->set("testAttribute", "Abc:*+.-"); - // search for custom entries via programmatic API + // search for custom entries via programatic API { const auto term = Collection::attributeToTerm("testAttribute", "OAuth::[test.name@gmail.com]"); const auto res = EntrySearcher().search({term}, root.data()); diff --git a/tests/TestGroup.cpp b/tests/TestGroup.cpp index 22807c878..95f79de27 100644 --- a/tests/TestGroup.cpp +++ b/tests/TestGroup.cpp @@ -1,6 +1,6 @@ /* - * Copyright (C) 2023 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 @@ -56,9 +56,9 @@ void TestGroup::cleanup() void TestGroup::testParenting() { - auto db = new Database(); + Database* db = new Database(); QPointer rootGroup = db->rootGroup(); - auto tmpRoot = new Group(); + Group* tmpRoot = new Group(); QPointer g1 = new Group(); QPointer g2 = new Group(); @@ -98,8 +98,8 @@ void TestGroup::testParenting() QVERIFY(g1->children().at(1) == g3); QVERIFY(g3->children().contains(g4)); - auto g5 = new Group(); - auto g6 = new Group(); + Group* g5 = new Group(); + Group* g6 = new Group(); g5->setParent(db->rootGroup()); g6->setParent(db->rootGroup()); QVERIFY(db->rootGroup()->children().at(1) == g5); @@ -129,8 +129,8 @@ void TestGroup::testParenting() void TestGroup::testSignals() { - auto db = new Database(); - auto db2 = new Database(); + Database* db = new Database(); + Database* db2 = new Database(); QPointer root = db->rootGroup(); QSignalSpy spyAboutToAdd(db, SIGNAL(groupAboutToAdd(Group*, int))); @@ -147,8 +147,8 @@ void TestGroup::testSignals() QSignalSpy spyAboutToMove2(db2, SIGNAL(groupAboutToMove(Group*, Group*, int))); QSignalSpy spyMoved2(db2, SIGNAL(groupMoved())); - auto g1 = new Group(); - auto g2 = new Group(); + Group* g1 = new Group(); + Group* g2 = new Group(); g1->setParent(root); QCOMPARE(spyAboutToAdd.count(), 1); @@ -212,8 +212,8 @@ void TestGroup::testSignals() QCOMPARE(spyAboutToMove2.count(), 0); QCOMPARE(spyMoved2.count(), 0); - auto g3 = new Group(); - auto g4 = new Group(); + Group* g3 = new Group(); + Group* g4 = new Group(); g3->setParent(root); QCOMPARE(spyAboutToAdd.count(), 3); @@ -247,7 +247,7 @@ void TestGroup::testSignals() void TestGroup::testEntries() { - auto group = new Group(); + Group* group = new Group(); QPointer entry1 = new Entry(); entry1->setGroup(group); @@ -269,8 +269,8 @@ void TestGroup::testDeleteSignals() { QScopedPointer db(new Database()); Group* groupRoot = db->rootGroup(); - auto groupChild = new Group(); - auto groupChildChild = new Group(); + Group* groupChild = new Group(); + Group* groupChildChild = new Group(); groupRoot->setObjectName("groupRoot"); groupChild->setObjectName("groupChild"); groupChildChild->setObjectName("groupChildChild"); @@ -284,8 +284,8 @@ void TestGroup::testDeleteSignals() QCOMPARE(spyAboutToRemove.count(), 2); QCOMPARE(spyRemoved.count(), 2); - auto group = new Group(); - auto entry = new Entry(); + Group* group = new Group(); + Entry* entry = new Entry(); entry->setGroup(group); QSignalSpy spyEntryAboutToRemove(group, SIGNAL(entryAboutToRemove(Entry*))); QSignalSpy spyEntryRemoved(group, SIGNAL(entryRemoved(Entry*))); @@ -298,9 +298,9 @@ void TestGroup::testDeleteSignals() QScopedPointer db2(new Database()); Group* groupRoot2 = db2->rootGroup(); - auto group2 = new Group(); + Group* group2 = new Group(); group2->setParent(groupRoot2); - auto entry2 = new Entry(); + Entry* entry2 = new Entry(); entry2->setGroup(group2); QSignalSpy spyEntryAboutToRemove2(group2, SIGNAL(entryAboutToRemove(Entry*))); QSignalSpy spyEntryRemoved2(group2, SIGNAL(entryRemoved(Entry*))); @@ -476,15 +476,15 @@ void TestGroup::testFindEntry() { QScopedPointer db(new Database()); - auto entry1 = new Entry(); + Entry* entry1 = new Entry(); entry1->setTitle(QString("entry1")); entry1->setGroup(db->rootGroup()); entry1->setUuid(QUuid::createUuid()); - auto group1 = new Group(); + Group* group1 = new Group(); group1->setName("group1"); - auto entry2 = new Entry(); + Entry* entry2 = new Entry(); entry2->setTitle(QString("entry2")); entry2->setGroup(group1); @@ -558,11 +558,11 @@ void TestGroup::testFindGroupByPath() { QScopedPointer db(new Database()); - auto group1 = new Group(); + Group* group1 = new Group(); group1->setName("group1"); group1->setParent(db->rootGroup()); - auto group2 = new Group(); + Group* group2 = new Group(); group2->setName("group2"); group2->setParent(group1); @@ -626,7 +626,7 @@ void TestGroup::testPrint() output = db->rootGroup()->print(true); QCOMPARE(output, QString("[empty]\n")); - auto entry1 = new Entry(); + Entry* entry1 = new Entry(); entry1->setTitle(QString("entry1")); entry1->setGroup(db->rootGroup()); entry1->setUuid(QUuid::createUuid()); @@ -634,24 +634,24 @@ void TestGroup::testPrint() output = db->rootGroup()->print(); QCOMPARE(output, QString("entry1\n")); - auto group1 = new Group(); + Group* group1 = new Group(); group1->setName("group1"); group1->setParent(db->rootGroup()); - auto entry2 = new Entry(); + Entry* entry2 = new Entry(); entry2->setTitle(QString("entry2")); entry2->setGroup(group1); entry2->setUuid(QUuid::createUuid()); - auto group2 = new Group(); + Group* group2 = new Group(); group2->setName("group2"); group2->setParent(db->rootGroup()); - auto subGroup = new Group(); + Group* subGroup = new Group(); subGroup->setName("subgroup"); subGroup->setParent(group2); - auto entry3 = new Entry(); + Entry* entry3 = new Entry(); entry3->setTitle(QString("entry3")); entry3->setGroup(subGroup); entry3->setUuid(QUuid::createUuid()); @@ -691,13 +691,13 @@ void TestGroup::testPrint() void TestGroup::testAddEntryWithPath() { - auto db = new Database(); + Database* db = new Database(); - auto group1 = new Group(); + Group* group1 = new Group(); group1->setName("group1"); group1->setParent(db->rootGroup()); - auto group2 = new Group(); + Group* group2 = new Group(); group2->setName("group2"); group2->setParent(group1); @@ -742,19 +742,19 @@ void TestGroup::testIsRecycled() Database db; db.metadata()->setRecycleBinEnabled(true); - auto group1 = new Group(); + Group* group1 = new Group(); group1->setName("group1"); group1->setParent(db.rootGroup()); - auto group2 = new Group(); + Group* group2 = new Group(); group2->setName("group2"); group2->setParent(db.rootGroup()); - auto group3 = new Group(); + Group* group3 = new Group(); group3->setName("group3"); group3->setParent(group2); - auto group4 = new Group(); + Group* group4 = new Group(); group4->setName("group4"); group4->setParent(db.rootGroup()); @@ -814,64 +814,64 @@ void TestGroup::testEquals() void TestGroup::testChildrenSort() { auto createTestGroupWithUnorderedChildren = []() -> Group* { - auto parent = new Group(); + Group* parent = new Group(); - auto group1 = new Group(); + Group* group1 = new Group(); group1->setName("B"); group1->setParent(parent); - auto group2 = new Group(); + Group* group2 = new Group(); group2->setName("e"); group2->setParent(parent); - auto group3 = new Group(); + Group* group3 = new Group(); group3->setName("Test999"); group3->setParent(parent); - auto group4 = new Group(); + Group* group4 = new Group(); group4->setName("A"); group4->setParent(parent); - auto group5 = new Group(); + Group* group5 = new Group(); group5->setName("z"); group5->setParent(parent); - auto group6 = new Group(); + Group* group6 = new Group(); group6->setName("045"); group6->setParent(parent); - auto group7 = new Group(); + Group* group7 = new Group(); group7->setName("60"); group7->setParent(parent); - auto group8 = new Group(); + Group* group8 = new Group(); group8->setName("04test"); group8->setParent(parent); - auto group9 = new Group(); + Group* group9 = new Group(); group9->setName("Test12"); group9->setParent(parent); - auto group10 = new Group(); + Group* group10 = new Group(); group10->setName("i"); group10->setParent(parent); - auto subGroup1 = new Group(); + Group* subGroup1 = new Group(); subGroup1->setName("sub_xte"); subGroup1->setParent(group10); - auto subGroup2 = new Group(); + Group* subGroup2 = new Group(); subGroup2->setName("sub_010"); subGroup2->setParent(group10); - auto subGroup3 = new Group(); + Group* subGroup3 = new Group(); subGroup3->setName("sub_000"); subGroup3->setParent(group10); - auto subGroup4 = new Group(); + Group* subGroup4 = new Group(); subGroup4->setName("sub_M"); subGroup4->setParent(group10); - auto subGroup5 = new Group(); + Group* subGroup5 = new Group(); subGroup5->setName("sub_p"); subGroup5->setParent(group10); - auto subGroup6 = new Group(); + Group* subGroup6 = new Group(); subGroup6->setName("sub_45p"); subGroup6->setParent(group10); - auto subGroup7 = new Group(); + Group* subGroup7 = new Group(); subGroup7->setName("sub_6p"); subGroup7->setParent(group10); - auto subGroup8 = new Group(); + Group* subGroup8 = new Group(); subGroup8->setName("sub_tt"); subGroup8->setParent(group10); - auto subGroup9 = new Group(); + Group* subGroup9 = new Group(); subGroup9->setName("sub_t0"); subGroup9->setParent(group10); @@ -996,11 +996,11 @@ void TestGroup::testHierarchy() Group group1; group1.setName("group1"); - auto group2 = new Group(); + Group* group2 = new Group(); group2->setName("group2"); group2->setParent(&group1); - auto group3 = new Group(); + Group* group3 = new Group(); group3->setName("group3"); group3->setParent(group2); @@ -1028,12 +1028,12 @@ void TestGroup::testApplyGroupIconRecursively() // Create a database with two nested groups with one entry each Database database; - auto subgroup = new Group(); + Group* subgroup = new Group(); subgroup->setName("Subgroup"); subgroup->setParent(database.rootGroup()); QVERIFY(subgroup); - auto subsubgroup = new Group(); + Group* subsubgroup = new Group(); subsubgroup->setName("Subsubgroup"); subsubgroup->setParent(subgroup); QVERIFY(subsubgroup); @@ -1125,7 +1125,7 @@ void TestGroup::testUsernamesRecursive() Database database; // Create a subgroup - auto subgroup = new Group(); + Group* subgroup = new Group(); subgroup->setName("Subgroup"); subgroup->setParent(database.rootGroup()); @@ -1152,16 +1152,16 @@ void TestGroup::testMoveUpDown() Group* root = database.rootGroup(); QVERIFY(root); - auto entry0 = new Entry(); + Entry* entry0 = new Entry(); QVERIFY(entry0); entry0->setGroup(root); - auto entry1 = new Entry(); + Entry* entry1 = new Entry(); QVERIFY(entry1); entry1->setGroup(root); - auto entry2 = new Entry(); + Entry* entry2 = new Entry(); QVERIFY(entry2); entry2->setGroup(root); - auto entry3 = new Entry(); + Entry* entry3 = new Entry(); QVERIFY(entry3); entry3->setGroup(root); // default order, straight @@ -1293,29 +1293,3 @@ void TestGroup::testPreviousParentGroup() QVERIFY(group1->previousParentGroupUuid() == group2->uuid()); QVERIFY(group1->previousParentGroup() == group2); } - -void TestGroup::testAutoTypeState() -{ - Database db; - auto* root = db.rootGroup(); - - auto* entry1 = new Entry(); - entry1->setGroup(root); - - auto subGroup = new Group(); - subGroup->setParent(root); - auto* entry2 = new Entry(); - entry2->setGroup(subGroup); - - // Disable Auto-Type from root group - root->setAutoTypeEnabled(Group::TriState::Disable); - QVERIFY(!entry1->groupAutoTypeEnabled()); - QVERIFY(!entry2->groupAutoTypeEnabled()); - - // Enable Auto-Type for sub group - subGroup->setAutoTypeEnabled(Group::TriState::Enable); - QVERIFY(root->autoTypeEnabled() == Group::TriState::Disable); - QVERIFY(subGroup->autoTypeEnabled() == Group::TriState::Enable); - QVERIFY(!entry1->groupAutoTypeEnabled()); - QVERIFY(entry2->groupAutoTypeEnabled()); -} diff --git a/tests/TestGroup.h b/tests/TestGroup.h index d3326e464..0c8fee937 100644 --- a/tests/TestGroup.h +++ b/tests/TestGroup.h @@ -1,6 +1,6 @@ /* - * Copyright (C) 2023 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 @@ -49,7 +49,6 @@ private slots: void testUsernamesRecursive(); void testMoveUpDown(); void testPreviousParentGroup(); - void testAutoTypeState(); }; #endif // KEEPASSX_TESTGROUP_H diff --git a/tests/TestGroupModel.cpp b/tests/TestGroupModel.cpp index f9a0790fc..6d7e58c41 100644 --- a/tests/TestGroupModel.cpp +++ b/tests/TestGroupModel.cpp @@ -35,35 +35,35 @@ void TestGroupModel::initTestCase() void TestGroupModel::test() { - auto db = new Database(); + Database* db = new Database(); Group* groupRoot = db->rootGroup(); groupRoot->setObjectName("groupRoot"); groupRoot->setName("groupRoot"); - auto group1 = new Group(); + Group* group1 = new Group(); group1->setObjectName("group1"); group1->setName("group1"); group1->setParent(groupRoot); - auto group11 = new Group(); + Group* group11 = new Group(); group1->setObjectName("group11"); group11->setName("group11"); group11->setParent(group1); - auto group12 = new Group(); + Group* group12 = new Group(); group1->setObjectName("group12"); group12->setName("group12"); group12->setParent(group1); - auto group121 = new Group(); + Group* group121 = new Group(); group1->setObjectName("group121"); group121->setName("group121"); group121->setParent(group12); - auto model = new GroupModel(db, this); + GroupModel* model = new GroupModel(db, this); - auto modelTest = new ModelTest(model, this); + ModelTest* modelTest = new ModelTest(model, this); QModelIndex indexRoot = model->index(0, 0); QModelIndex index1 = model->index(0, 0, indexRoot); @@ -90,7 +90,7 @@ void TestGroupModel::test() QSignalSpy spyAboutToMove(model, SIGNAL(rowsAboutToBeMoved(QModelIndex, int, int, QModelIndex, int))); QSignalSpy spyMoved(model, SIGNAL(rowsMoved(QModelIndex, int, int, QModelIndex, int))); - auto group2 = new Group(); + Group* group2 = new Group(); group2->setObjectName("group2"); group2->setName("group2"); group2->setParent(groupRoot); diff --git a/tests/TestHibp.cpp b/tests/TestHibp.cpp index 5e85f0728..65e858cbe 100644 --- a/tests/TestHibp.cpp +++ b/tests/TestHibp.cpp @@ -89,22 +89,22 @@ void TestHibp::testPwned() Group* root = m_db->rootGroup(); - auto entry1 = new Entry(); + Entry* entry1 = new Entry(); entry1->setPassword("foo"); entry1->setGroup(root); - auto entry2 = new Entry(); + Entry* entry2 = new Entry(); entry2->setPassword("xyz"); entry2->setGroup(root); - auto entry3 = new Entry(); + Entry* entry3 = new Entry(); entry3->setPassword("foo"); m_db->recycleEntry(entry3); - auto group1 = new Group(); + Group* group1 = new Group(); group1->setParent(root); - auto entry4 = new Entry(); + Entry* entry4 = new Entry(); entry4->setPassword("bar"); entry4->setGroup(group1); diff --git a/tests/TestIconDownloader.cpp b/tests/TestIconDownloader.cpp index 676734ee6..77b21e3e7 100644 --- a/tests/TestIconDownloader.cpp +++ b/tests/TestIconDownloader.cpp @@ -1,9 +1,6 @@ #include "TestIconDownloader.h" - #include - -#include "core/Config.h" -#include "gui/IconDownloader.h" +#include QTEST_GUILESS_MAIN(TestIconDownloader) @@ -11,7 +8,6 @@ void TestIconDownloader::testIconDownloader() { QFETCH(QString, url); QFETCH(QStringList, expectation); - config()->set(Config::Security_IconDownloadFallback, false); IconDownloader downloader; downloader.setUrl(url); diff --git a/tests/TestImports.cpp b/tests/TestImports.cpp deleted file mode 100644 index 17ec2bef5..000000000 --- a/tests/TestImports.cpp +++ /dev/null @@ -1,373 +0,0 @@ -/* - * Copyright (C) 2024 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 "TestImports.h" - -#include "config-keepassx-tests.h" -#include "core/Group.h" -#include "core/Metadata.h" -#include "core/Totp.h" -#include "crypto/Crypto.h" -#include "format/BitwardenReader.h" -#include "format/OPUXReader.h" -#include "format/OpVaultReader.h" -#include "format/ProtonPassReader.h" - -#include -#include -#include - -QTEST_GUILESS_MAIN(TestImports) - -void TestImports::initTestCase() -{ - QVERIFY(Crypto::init()); -} - -void TestImports::testOPUX() -{ - auto opuxPath = QStringLiteral("%1/%2").arg(KEEPASSX_TEST_DATA_DIR, QStringLiteral("/1PasswordExport.1pux")); - - OPUXReader reader; - auto db = reader.convert(opuxPath); - QVERIFY2(!reader.hasError(), qPrintable(reader.errorString())); - QVERIFY(db); - - // Confirm specific entry details are valid - auto entry = db->rootGroup()->findEntryByPath("/Personal/Login"); - QVERIFY(entry); - QCOMPARE(entry->title(), QStringLiteral("Login")); - QCOMPARE(entry->username(), QStringLiteral("team@keepassxc.org")); - QCOMPARE(entry->password(), QStringLiteral("password")); - QCOMPARE(entry->url(), QStringLiteral("https://keepassxc.org")); - QCOMPARE(entry->notes(), QStringLiteral("Note to self")); - // Check extra URL's - QCOMPARE(entry->attribute("KP2A_URL_1"), QStringLiteral("https://twitter.com")); - // Check TOTP - QVERIFY(entry->hasTotp()); - QVERIFY(!entry->attribute("otp_1").isEmpty()); - // Check tags - QVERIFY(entry->tagList().contains("Favorite")); - QVERIFY(entry->tagList().contains("website")); - - // Check attachments - entry = db->rootGroup()->findEntryByPath("/Personal/KeePassXC Logo"); - auto attachments = entry->attachments(); - QCOMPARE(attachments->keys().count(), 1); - QCOMPARE(attachments->keys()[0], QString("keepassxc.png")); - - // Confirm advanced attributes - // NOTE: 1PUX does not support an explicit expiration field - entry = db->rootGroup()->findEntryByPath("/Personal/Credit Card"); - QVERIFY(entry); - auto tmpl = QString("Credit Card Fields_%1"); - auto attr = entry->attributes(); - QCOMPARE(attr->value(tmpl.arg("cardholder name")), QStringLiteral("KeePassXC")); - QCOMPARE(attr->value(tmpl.arg("expiry date")), QStringLiteral("202206")); - QCOMPARE(attr->value(tmpl.arg("verification number")), QStringLiteral("123")); - QVERIFY(attr->isProtected(tmpl.arg("verification number"))); - - // Confirm address fields - entry = db->rootGroup()->findEntryByPath("/Personal/Identity"); - QVERIFY(entry); - attr = entry->attributes(); - QCOMPARE(attr->value("Address_address"), QStringLiteral("123 Avenue Rd\nBoston, MA 12345\nus")); - - // Check archived entries - entry = db->rootGroup()->findEntryByPath("/Personal/Login Archived"); - QVERIFY(entry); - QVERIFY(entry->tagList().contains("Archived")); - - // Check vault to group structure - entry = db->rootGroup()->findEntryByPath("/Shared/Bank Account"); - QVERIFY(entry); - // Check custom group icon - QVERIFY(!entry->group()->iconUuid().isNull()); - - // Check Category UUID 05 Passwords - entry = db->rootGroup()->findEntryByPath("/Personal/UUID 005 Password"); - QVERIFY(entry); - QCOMPARE(entry->password(), QStringLiteral("uuid005password")); -} - -void TestImports::testOPVault() -{ - auto opVaultPath = QStringLiteral("%1/%2").arg(KEEPASSX_TEST_DATA_DIR, QStringLiteral("/keepassxc.opvault")); - - auto categories = QStringList({QStringLiteral("Login"), - QStringLiteral("Credit Card"), - QStringLiteral("Secure Note"), - QStringLiteral("Identity"), - QStringLiteral("Password"), - QStringLiteral("Tombstone"), - QStringLiteral("Software License"), - QStringLiteral("Bank Account"), - QStringLiteral("Database"), - QStringLiteral("Driver License"), - QStringLiteral("Outdoor License"), - QStringLiteral("Membership"), - QStringLiteral("Passport"), - QStringLiteral("Rewards"), - QStringLiteral("SSN"), - QStringLiteral("Router"), - QStringLiteral("Server"), - QStringLiteral("Email")}); - - QDir opVaultDir(opVaultPath); - - OpVaultReader reader; - auto db = reader.convert(opVaultDir, "a"); - QVERIFY2(!reader.hasError(), qPrintable(reader.errorString())); - QVERIFY(db); - - // Confirm specific entry details are valid - auto entry = db->rootGroup()->findEntryByPath("/Login/KeePassXC"); - QVERIFY(entry); - QCOMPARE(entry->title(), QStringLiteral("KeePassXC")); - QCOMPARE(entry->username(), QStringLiteral("keepassxc")); - QCOMPARE(entry->password(), QStringLiteral("opvault")); - QCOMPARE(entry->url(), QStringLiteral("https://www.keepassxc.org")); - QCOMPARE(entry->notes(), QStringLiteral("KeePassXC Account")); - // Check extra URL's - QCOMPARE(entry->attribute("KP2A_URL_1"), QStringLiteral("https://snapshot.keepassxc.org")); - // Check TOTP - QVERIFY(entry->hasTotp()); - // Check attachments - auto attachments = entry->attachments(); - QCOMPARE(attachments->keys().count(), 1); - QCOMPARE(*attachments->values().begin(), QByteArray("attachment")); - - // Confirm expired entries - entry = db->rootGroup()->findEntryByPath("/Login/Expired Login"); - QVERIFY(entry->isExpired()); - - // Confirm advanced attributes - entry = db->rootGroup()->findEntryByPath("/Credit Card/My Credit Card"); - QVERIFY(entry); - auto attr = entry->attributes(); - QCOMPARE(attr->value("cardholder name"), QStringLiteral("Team KeePassXC")); - QVERIFY(!attr->value("valid from").isEmpty()); - QCOMPARE(attr->value("Additional Details_PIN"), QStringLiteral("1234")); - QVERIFY(attr->isProtected("Additional Details_PIN")); - - // Confirm address fields - entry = db->rootGroup()->findEntryByPath("/Identity/Team KeePassXC"); - QVERIFY(entry); - attr = entry->attributes(); - QCOMPARE(attr->value("address_street"), QStringLiteral("123 Password Lane")); - - // Confirm complex passwords - entry = db->rootGroup()->findEntryByPath("/Password/Complex Password"); - QVERIFY(entry); - QCOMPARE(entry->password(), QStringLiteral("HfgcHjEL}iO}^3N!?*cv~O:9GJZQ0>oC")); - QVERIFY(entry->hasTotp()); - auto totpSettings = entry->totpSettings(); - QCOMPARE(totpSettings->digits, static_cast(8)); - QCOMPARE(totpSettings->step, static_cast(45)); - - // Add another OTP to this entry to confirm it doesn't overwrite the existing one - auto field = QJsonObject::fromVariantMap({{"n", "TOTP_SETTINGS"}, {"v", "otpauth://test.url?digits=6"}}); - reader.fillFromSectionField(entry, "", field); - QVERIFY(entry->hasTotp()); - totpSettings = entry->totpSettings(); - QCOMPARE(totpSettings->digits, static_cast(8)); - QCOMPARE(totpSettings->step, static_cast(45)); - QVERIFY(entry->attributes()->contains("otp_1")); - - // Confirm trashed entries are sent to the recycle bin - auto recycleBin = db->metadata()->recycleBin(); - QVERIFY(recycleBin); - QVERIFY(!recycleBin->isEmpty()); - QVERIFY(recycleBin->findEntryByPath("Trashed Password")); - - // Confirm created groups align with category names - for (const auto group : db->rootGroup()->children()) { - if (group == recycleBin) { - continue; - } - QVERIFY2(categories.contains(group->name()), - qPrintable(QStringLiteral("Invalid group name: %1").arg(group->name()))); - // Confirm each group is not empty - QVERIFY2(!group->isEmpty(), qPrintable(QStringLiteral("Group %1 is empty").arg(group->name()))); - } -} - -void TestImports::testBitwarden() -{ - auto bitwardenPath = QStringLiteral("%1/%2").arg(KEEPASSX_TEST_DATA_DIR, QStringLiteral("/bitwarden_export.json")); - - BitwardenReader reader; - auto db = reader.convert(bitwardenPath); - QVERIFY2(!reader.hasError(), qPrintable(reader.errorString())); - QVERIFY(db); - - // Confirm Login fields - auto entry = db->rootGroup()->findEntryByPath("/My Folder/Login Name"); - QVERIFY(entry); - QCOMPARE(entry->title(), QStringLiteral("Login Name")); - QCOMPARE(entry->username(), QStringLiteral("myusername@gmail.com")); - QCOMPARE(entry->password(), QStringLiteral("mypassword")); - QCOMPARE(entry->url(), QStringLiteral("https://mail.google.com")); - QCOMPARE(entry->notes(), QStringLiteral("1st line of note text\n2nd Line of note text")); - // Check extra URL's - QCOMPARE(entry->attribute("KP2A_URL_1"), QStringLiteral("https://google.com")); - QCOMPARE(entry->attribute("KP2A_URL_2"), QStringLiteral("https://gmail.com")); - // Check TOTP - QVERIFY(entry->hasTotp()); - // NOTE: Bitwarden does not export attachments - // NOTE: Bitwarden does not export expiration dates - - // Confirm Identity fields - entry = db->rootGroup()->findEntryByPath("/My Folder/My Identity"); - QVERIFY(entry); - auto attr = entry->attributes(); - // NOTE: The extra spaces are deliberate to test unmodified ingest of data - QCOMPARE(attr->value("identity_address"), - QStringLiteral(" 1 North Calle Cesar Chavez \nSanta Barbara, CA 93103\nUnited States ")); - QCOMPARE(attr->value("identity_name"), QStringLiteral("Mrs Jane A Doe")); - QCOMPARE(attr->value("identity_ssn"), QStringLiteral("123-12-1234")); - QVERIFY(attr->isProtected("identity_ssn")); - - // Confirm Secure Note - entry = db->rootGroup()->findEntryByPath("/My Folder/My Secure Note"); - QVERIFY(entry); - QCOMPARE(entry->notes(), - QStringLiteral("1st line of secure note\n2nd line of secure note\n3rd line of secure note")); - - // Confirm Credit Card - entry = db->rootGroup()->findEntryByPath("/Second Folder/Card Name"); - QVERIFY(entry); - attr = entry->attributes(); - QCOMPARE(attr->value("card_cardholderName"), QStringLiteral("Jane Doe")); - QCOMPARE(attr->value("card_number"), QStringLiteral("1234567891011121")); - QCOMPARE(attr->value("card_code"), QStringLiteral("123")); - QVERIFY(attr->isProtected("card_code")); -} - -void TestImports::testBitwardenEncrypted() -{ - // We already tested the parser so just test that decryption works properly - - // First test PBKDF2 password stretching (KDF Type 0) - auto bitwardenPath = - QStringLiteral("%1/%2").arg(KEEPASSX_TEST_DATA_DIR, QStringLiteral("/bitwarden_encrypted_export.json")); - - BitwardenReader reader; - auto db = reader.convert(bitwardenPath, "a"); - if (reader.hasError()) { - QFAIL(qPrintable(reader.errorString())); - } - QVERIFY(db); - - // Now test Argon2id password stretching (KDF Type 1) - bitwardenPath = QStringLiteral("%1/%2").arg(KEEPASSX_TEST_DATA_DIR, - QStringLiteral("/bitwarden_encrypted_argon2id_export.json")); - - db = reader.convert(bitwardenPath, "a"); - if (reader.hasError()) { - QFAIL(qPrintable(reader.errorString())); - } - QVERIFY(db); -} - -void TestImports::testBitwardenPasskey() -{ - auto bitwardenPath = - QStringLiteral("%1/%2").arg(KEEPASSX_TEST_DATA_DIR, QStringLiteral("/bitwarden_passkey_export.json")); - - BitwardenReader reader; - auto db = reader.convert(bitwardenPath); - QVERIFY2(!reader.hasError(), qPrintable(reader.errorString())); - QVERIFY(db); - - // Confirm Login fields - auto entry = db->rootGroup()->findEntryByPath("/webauthn.io"); - QVERIFY(entry); - QCOMPARE(entry->title(), QStringLiteral("webauthn.io")); - QCOMPARE(entry->username(), QStringLiteral("KPXC_BITWARDEN")); - QCOMPARE(entry->url(), QStringLiteral("https://webauthn.io/")); - - // Confirm passkey attributes - auto attr = entry->attributes(); - QCOMPARE(attr->value(EntryAttributes::KPEX_PASSKEY_CREDENTIAL_ID), QStringLiteral("o-FfiyfBQq6Qz6YVrYeFTw")); - QCOMPARE( - attr->value(EntryAttributes::KPEX_PASSKEY_PRIVATE_KEY_PEM), - QStringLiteral( - "-----BEGIN PRIVATE " - "KEY-----" - "MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgmr4GQQjerojFuf0ZouOuUllMvAwxZSZAfB6gwDYcLiehRANCAAT0WR5zVS" - "p6ieusvjkLkzaGc7fjGBmwpiuLPxR/d+ZjqMI9L2DKh+takp6wGt2x0n4jzr1KA352NZg0vjZX9CHh-----END PRIVATE KEY-----")); - QCOMPARE(attr->value(EntryAttributes::KPEX_PASSKEY_USERNAME), QStringLiteral("KPXC_BITWARDEN")); - QCOMPARE(attr->value(EntryAttributes::KPEX_PASSKEY_RELYING_PARTY), QStringLiteral("webauthn.io")); - QCOMPARE(attr->value(EntryAttributes::KPEX_PASSKEY_USER_HANDLE), - QStringLiteral("aTFtdmFnOHYtS2dxVEJ0by1rSFpLWGg0enlTVC1iUVJReDZ5czJXa3c2aw")); -} - -void TestImports::testProtonPass() -{ - auto protonPassPath = - QStringLiteral("%1/%2").arg(KEEPASSX_TEST_DATA_DIR, QStringLiteral("/protonpass_export.json")); - - ProtonPassReader reader; - auto db = reader.convert(protonPassPath); - QVERIFY2(!reader.hasError(), qPrintable(reader.errorString())); - QVERIFY(db); - - // Confirm Login fields - auto entry = db->rootGroup()->findEntryByPath("/Personal/Test Login"); - QVERIFY(entry); - QCOMPARE(entry->title(), QStringLiteral("Test Login")); - QCOMPARE(entry->username(), QStringLiteral("Username")); - QCOMPARE(entry->password(), QStringLiteral("Password")); - QCOMPARE(entry->url(), QStringLiteral("https://example.com/")); - QCOMPARE(entry->notes(), QStringLiteral("My login secure note.")); - // Check extra URL's - QCOMPARE(entry->attribute("KP2A_URL_1"), QStringLiteral("https://example2.com/")); - // Check TOTP - QVERIFY(entry->hasTotp()); - // Check attributes - auto attr = entry->attributes(); - QVERIFY(attr->isProtected("hidden field")); - QCOMPARE(attr->value("second 2fa secret"), QStringLiteral("TOTPCODE")); - // NOTE: Proton Pass does not export attachments - // NOTE: Proton Pass does not export expiration dates - - // Confirm Secure Note - entry = db->rootGroup()->findEntryByPath("/Personal/My Secure Note"); - QVERIFY(entry); - QCOMPARE(entry->notes(), QStringLiteral("Secure note contents.")); - - // Confirm Credit Card - entry = db->rootGroup()->findEntryByPath("/Personal/Test Card"); - QVERIFY(entry); - QCOMPARE(entry->username(), QStringLiteral("1234222233334444")); - QCOMPARE(entry->password(), QStringLiteral("333")); - attr = entry->attributes(); - QCOMPARE(attr->value("card_cardholderName"), QStringLiteral("Test name")); - QCOMPARE(attr->value("card_expirationDate"), QStringLiteral("2025-01")); - QCOMPARE(attr->value("card_pin"), QStringLiteral("1234")); - QVERIFY(attr->isProtected("card_pin")); - - // Confirm Expired (deleted) entry - entry = db->rootGroup()->findEntryByPath("/Personal/My Deleted Note"); - QVERIFY(entry); - QTRY_VERIFY(entry->isExpired()); - - // Confirm second group (vault) - entry = db->rootGroup()->findEntryByPath("/Test/Other vault login"); - QVERIFY(entry); -} diff --git a/tests/TestImports.h b/tests/TestImports.h deleted file mode 100644 index 728fa6377..000000000 --- a/tests/TestImports.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (C) 2024 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 TEST_IMPORTS_H -#define TEST_IMPORTS_H - -#include - -class TestImports : public QObject -{ - Q_OBJECT - -private slots: - void initTestCase(); - void testOPUX(); - void testOPVault(); - void testBitwarden(); - void testBitwardenEncrypted(); - void testBitwardenPasskey(); - void testProtonPass(); -}; - -#endif /* TEST_IMPORTS_H */ diff --git a/tests/TestKdbx3.cpp b/tests/TestKdbx3.cpp index 097fef6f9..bcc3df77a 100644 --- a/tests/TestKdbx3.cpp +++ b/tests/TestKdbx3.cpp @@ -169,88 +169,3 @@ void TestKdbx3::testBrokenHeaderHash() auto db = QSharedPointer::create(); QVERIFY(!db->open(filename, key, nullptr)); } - -void TestKdbx3::testAttachmentIndexStability() -{ - QScopedPointer db(new Database()); - db->changeKdf(fastKdf(KeePass2::uuidToKdf(KeePass2::KDF_AES_KDBX3))); - auto compositeKey = QSharedPointer::create(); - db->setKey(compositeKey); - QVERIFY(!db->uuid().isNull()); - - auto root = db->rootGroup(); - - auto group1 = new Group(); - group1->setUuid(QUuid::createUuid()); - QVERIFY(!group1->uuid().isNull()); - group1->setParent(root); - - auto attachment1 = QByteArray("qwerty"); - auto attachment2 = QByteArray("asdf"); - auto attachment3 = QByteArray("zxcv"); - - auto entry1 = new Entry(); - entry1->setUuid(QUuid::createUuid()); - QVERIFY(!entry1->uuid().isNull()); - auto uuid1 = entry1->uuid(); - entry1->attachments()->set("a", attachment1); - QCOMPARE(entry1->attachments()->keys().size(), 1); - QCOMPARE(entry1->attachments()->values().size(), 1); - entry1->setGroup(root); - - auto entry2 = new Entry(); - entry2->setUuid(QUuid::createUuid()); - QVERIFY(!entry2->uuid().isNull()); - auto uuid2 = entry2->uuid(); - entry2->attachments()->set("a", attachment1); - entry2->attachments()->set("b", attachment2); - QCOMPARE(entry2->attachments()->keys().size(), 2); - QCOMPARE(entry2->attachments()->values().size(), 2); - entry2->setGroup(group1); - - auto entry3 = new Entry(); - entry3->setUuid(QUuid::createUuid()); - QVERIFY(!entry3->uuid().isNull()); - auto uuid3 = entry3->uuid(); - entry3->attachments()->set("a", attachment1); - entry3->attachments()->set("b", attachment2); - entry3->attachments()->set("x", attachment3); - entry3->attachments()->set("y", attachment3); - QCOMPARE(entry3->attachments()->keys().size(), 4); - QCOMPARE(entry3->attachments()->values().size(), 3); - entry3->setGroup(group1); - - QBuffer buffer; - buffer.open(QBuffer::ReadWrite); - KeePass2Writer writer; - QVERIFY(writer.writeDatabase(&buffer, db.data())); - QCOMPARE(writer.version(), KeePass2::FILE_VERSION_3_1); - - buffer.seek(0); - KeePass2Reader reader; - - // Re-read database and check that all attachments are still correctly assigned - auto db2 = QSharedPointer::create(); - reader.readDatabase(&buffer, QSharedPointer::create(), db2.data()); - QVERIFY(!reader.hasError()); - QVERIFY(!db->uuid().isNull()); - - auto a1 = db2->rootGroup()->findEntryByUuid(uuid1)->attachments(); - QCOMPARE(a1->keys().size(), 1); - QCOMPARE(a1->values().size(), 1); - QCOMPARE(a1->value("a"), attachment1); - - auto a2 = db2->rootGroup()->findEntryByUuid(uuid2)->attachments(); - QCOMPARE(a2->keys().size(), 2); - QCOMPARE(a2->values().size(), 2); - QCOMPARE(a2->value("a"), attachment1); - QCOMPARE(a2->value("b"), attachment2); - - auto a3 = db2->rootGroup()->findEntryByUuid(uuid3)->attachments(); - QCOMPARE(a3->keys().size(), 4); - QCOMPARE(a3->values().size(), 3); - QCOMPARE(a3->value("a"), attachment1); - QCOMPARE(a3->value("b"), attachment2); - QCOMPARE(a3->value("x"), attachment3); - QCOMPARE(a3->value("y"), attachment3); -} diff --git a/tests/TestKdbx3.h b/tests/TestKdbx3.h index 2994e355d..deb965d90 100644 --- a/tests/TestKdbx3.h +++ b/tests/TestKdbx3.h @@ -30,7 +30,6 @@ private slots: void testProtectedStrings(); void testBrokenHeaderHash(); void testFormat300(); - void testAttachmentIndexStability(); protected: void initTestCaseImpl() override; diff --git a/tests/TestKdbx4.cpp b/tests/TestKdbx4.cpp index 3233d570a..a40bd1cdf 100644 --- a/tests/TestKdbx4.cpp +++ b/tests/TestKdbx4.cpp @@ -27,7 +27,6 @@ #include "keys/FileKey.h" #include "keys/PasswordKey.h" #include "mock/MockChallengeResponseKey.h" -#include "mock/MockClock.h" #include int main(int argc, char* argv[]) @@ -72,7 +71,7 @@ QSharedPointer TestKdbx4Argon2::readXml(QBuffer* buf, bool strictMode, void TestKdbx4Argon2::writeXml(QBuffer* buf, Database* db, bool& hasError, QString& errorString) { - KdbxXmlWriter writer(KeePass2::FILE_VERSION_4, {}); + KdbxXmlWriter writer(KeePass2::FILE_VERSION_4); writer.writeDatabase(buf, db); hasError = writer.hasError(); errorString = writer.errorString(); @@ -114,17 +113,6 @@ void TestKdbx4AesKdf::initTestCaseImpl() } Q_DECLARE_METATYPE(QUuid) - -void TestKdbx4Format::init() -{ - MockClock::setup(new MockClock()); -} - -void TestKdbx4Format::cleanup() -{ - MockClock::teardown(); -} - void TestKdbx4Format::testFormat400() { QString filename = QString(KEEPASSX_TEST_DATA_DIR).append("/Format400.kdbx"); @@ -417,102 +405,6 @@ void TestKdbx4Format::testUpgradeMasterKeyIntegrity_data() QTest::newRow("Upgrade (implicit): entry-customdata") << QString("entry-customdata") << KeePass2::FILE_VERSION_4; } -void TestKdbx4Format::testAttachmentIndexStability() -{ - QScopedPointer db(new Database()); - db->changeKdf(fastKdf(KeePass2::uuidToKdf(KeePass2::KDF_ARGON2ID))); - auto compositeKey = QSharedPointer::create(); - db->setKey(compositeKey); - QVERIFY(!db->uuid().isNull()); - - auto root = db->rootGroup(); - - auto group1 = new Group(); - group1->setUuid(QUuid::createUuid()); - QVERIFY(!group1->uuid().isNull()); - group1->setParent(root); - - // Simulate KeeShare group, which uses its own attachment namespace - auto group2 = new Group(); - group2->setUuid(QUuid::createUuid()); - QVERIFY(!group2->uuid().isNull()); - group2->setParent(group1); - group2->customData()->set("KeeShare/Reference", "value doesn't matter"); - QVERIFY(group2->isShared()); - - auto attachment1 = QByteArray("qwerty"); - auto attachment2 = QByteArray("asdf"); - auto attachment3 = QByteArray("zxcv"); - - auto entry1 = new Entry(); - entry1->setUuid(QUuid::createUuid()); - QVERIFY(!entry1->uuid().isNull()); - auto uuid1 = entry1->uuid(); - entry1->attachments()->set("a", attachment1); - QCOMPARE(entry1->attachments()->keys().size(), 1); - QCOMPARE(entry1->attachments()->values().size(), 1); - entry1->setGroup(root); - - auto entry2 = new Entry(); - entry2->setUuid(QUuid::createUuid()); - QVERIFY(!entry2->uuid().isNull()); - auto uuid2 = entry2->uuid(); - entry2->attachments()->set("a", attachment1); - entry2->attachments()->set("b", attachment2); - QCOMPARE(entry2->attachments()->keys().size(), 2); - QCOMPARE(entry2->attachments()->values().size(), 2); - entry2->setGroup(group1); - - auto entry3 = new Entry(); - entry3->setUuid(QUuid::createUuid()); - QVERIFY(!entry3->uuid().isNull()); - auto uuid3 = entry3->uuid(); - entry3->attachments()->set("a", attachment1); - entry3->attachments()->set("b", attachment2); - entry3->attachments()->set("x", attachment3); - entry3->attachments()->set("y", attachment3); - QCOMPARE(entry3->attachments()->keys().size(), 4); - QCOMPARE(entry3->attachments()->values().size(), 3); - entry3->setGroup(group2); - - QBuffer buffer; - buffer.open(QBuffer::ReadWrite); - KeePass2Writer writer; - QVERIFY(writer.writeDatabase(&buffer, db.data())); - QVERIFY(writer.version() >= KeePass2::FILE_VERSION_4); - - buffer.seek(0); - KeePass2Reader reader; - - // Re-read database and check that all attachments are still correctly assigned - auto db2 = QSharedPointer::create(); - reader.readDatabase(&buffer, QSharedPointer::create(), db2.data()); - QVERIFY(!reader.hasError()); - QVERIFY(!db->uuid().isNull()); - - auto a1 = db2->rootGroup()->findEntryByUuid(uuid1)->attachments(); - QCOMPARE(a1->keys().size(), 1); - QCOMPARE(a1->values().size(), 1); - QCOMPARE(a1->value("a"), attachment1); - - auto a2 = db2->rootGroup()->findEntryByUuid(uuid2)->attachments(); - QCOMPARE(a2->keys().size(), 2); - QCOMPARE(a2->values().size(), 2); - QCOMPARE(a2->value("a"), attachment1); - QCOMPARE(a2->value("b"), attachment2); - - auto sharedGroup = db2->rootGroup()->findEntryByUuid(uuid3)->group(); - QVERIFY(sharedGroup->isShared()); - - auto a3 = db2->rootGroup()->findEntryByUuid(uuid3)->attachments(); - QCOMPARE(a3->keys().size(), 4); - QCOMPARE(a3->values().size(), 3); - QCOMPARE(a3->value("a"), attachment1); - QCOMPARE(a3->value("b"), attachment2); - QCOMPARE(a3->value("x"), attachment3); - QCOMPARE(a3->value("y"), attachment3); -} - void TestKdbx4Format::testCustomData() { Database db; diff --git a/tests/TestKdbx4.h b/tests/TestKdbx4.h index cd5bc4788..5d7f6cc50 100644 --- a/tests/TestKdbx4.h +++ b/tests/TestKdbx4.h @@ -56,15 +56,12 @@ class TestKdbx4Format : public QObject Q_OBJECT private slots: - void init(); - void cleanup(); void testFormat400(); void testFormat400Upgrade(); void testFormat400Upgrade_data(); void testFormat410Upgrade(); void testUpgradeMasterKeyIntegrity(); void testUpgradeMasterKeyIntegrity_data(); - void testAttachmentIndexStability(); void testCustomData(); }; diff --git a/tests/TestKeePass1Reader.cpp b/tests/TestKeePass1Reader.cpp index 18b35b5c7..a3676a460 100644 --- a/tests/TestKeePass1Reader.cpp +++ b/tests/TestKeePass1Reader.cpp @@ -39,7 +39,7 @@ void TestKeePass1Reader::initTestCase() QString filename = QString(KEEPASSX_TEST_DATA_DIR).append("/basic.kdb"); KeePass1Reader reader; - m_db = reader.readDatabase(filename, "masterpw", nullptr); + m_db = reader.readDatabase(filename, "masterpw", 0); QVERIFY(m_db); QVERIFY(!reader.hasError()); } @@ -213,7 +213,7 @@ void TestKeePass1Reader::testTwofish() QString dbFilename = QString("%1/%2.kdb").arg(QString(KEEPASSX_TEST_DATA_DIR), name); - auto db = reader.readDatabase(dbFilename, "masterpw", nullptr); + auto db = reader.readDatabase(dbFilename, "masterpw", 0); QVERIFY(db); QVERIFY(!reader.hasError()); QCOMPARE(db->rootGroup()->children().size(), 1); @@ -229,7 +229,7 @@ void TestKeePass1Reader::testCP1252Password() QString dbFilename = QString("%1/%2.kdb").arg(QString(KEEPASSX_TEST_DATA_DIR), name); QString password = QString::fromUtf8("\xe2\x80\x9e\x70\x61\x73\x73\x77\x6f\x72\x64\xe2\x80\x9d"); - auto db = reader.readDatabase(dbFilename, password, nullptr); + auto db = reader.readDatabase(dbFilename, password, 0); QVERIFY(db); QVERIFY(!reader.hasError()); QCOMPARE(db->rootGroup()->children().size(), 1); @@ -244,7 +244,7 @@ QDateTime TestKeePass1Reader::genDT(int year, int month, int day, int hour, int { QDate date(year, month, day); QTime time(hour, min, 0); - return {date, time, Qt::UTC}; + return QDateTime(date, time, Qt::UTC); } void TestKeePass1Reader::reopenDatabase(QSharedPointer db, diff --git a/tests/TestKeePass2Format.cpp b/tests/TestKeePass2Format.cpp index 5451fb62b..dc928fa14 100644 --- a/tests/TestKeePass2Format.cpp +++ b/tests/TestKeePass2Format.cpp @@ -576,15 +576,11 @@ void TestKeePass2Format::testKdbxKeyChange() buffer.seek(0); QSharedPointer db(new Database()); db->changeKdf(fastKdf(KeePass2::uuidToKdf(m_kdbxSourceDb->kdf()->uuid()))); - auto oldGroup = - db->setRootGroup(m_kdbxSourceDb->rootGroup()->clone(Entry::CloneNoFlags, Group::CloneIncludeEntries)); - delete oldGroup; + db->setRootGroup(m_kdbxSourceDb->rootGroup()->clone(Entry::CloneNoFlags, Group::CloneIncludeEntries)); db->setKey(key1); writeKdbx(&buffer, db.data(), hasError, errorString); - if (hasError) { - QFAIL(qPrintable(QStringLiteral("Error while reading database: ").append(errorString))); - } + QVERIFY(!hasError); // read database db = QSharedPointer::create(); @@ -601,9 +597,7 @@ void TestKeePass2Format::testKdbxKeyChange() // write database buffer.seek(0); writeKdbx(&buffer, db.data(), hasError, errorString); - if (hasError) { - QFAIL(qPrintable(QStringLiteral("Error while reading database: ").append(errorString))); - } + QVERIFY(!hasError); // read database db = QSharedPointer::create(); diff --git a/tests/TestMerge.cpp b/tests/TestMerge.cpp index 3dde3a063..014f39f41 100644 --- a/tests/TestMerge.cpp +++ b/tests/TestMerge.cpp @@ -29,6 +29,13 @@ QTEST_GUILESS_MAIN(TestMerge) namespace { + TimeInfo modificationTime(TimeInfo timeInfo, int years, int months, int days) + { + const QDateTime time = timeInfo.lastModificationTime(); + timeInfo.setLastModificationTime(time.addYears(years).addMonths(months).addDays(days)); + return timeInfo; + } + MockClock* m_clock = nullptr; } // namespace @@ -72,7 +79,7 @@ void TestMerge::testMergeIntoNew() } /** - * Merging when no changes occurred should not + * Merging when no changes occured should not * have any side effect. */ void TestMerge::testMergeNoChanges() @@ -87,54 +94,18 @@ void TestMerge::testMergeNoChanges() m_clock->advanceSecond(1); Merger merger1(dbSource.data(), dbDestination.data()); - auto changes = merger1.merge(); + merger1.merge(); - QVERIFY(changes.isEmpty()); QCOMPARE(dbDestination->rootGroup()->entriesRecursive().size(), 2); QCOMPARE(dbSource->rootGroup()->entriesRecursive().size(), 2); m_clock->advanceSecond(1); Merger merger2(dbSource.data(), dbDestination.data()); - changes = merger2.merge(); - - QVERIFY(changes.isEmpty()); - QCOMPARE(dbDestination->rootGroup()->entriesRecursive().size(), 2); - QCOMPARE(dbSource->rootGroup()->entriesRecursive().size(), 2); -} - -/** - * Merging without database custom data (used by imports and KeeShare) - */ -void TestMerge::testMergeCustomData() -{ - QScopedPointer dbDestination(createTestDatabase()); - QScopedPointer dbSource( - createTestDatabaseStructureClone(dbDestination.data(), Entry::CloneNoFlags, Group::CloneIncludeEntries)); + merger2.merge(); QCOMPARE(dbDestination->rootGroup()->entriesRecursive().size(), 2); QCOMPARE(dbSource->rootGroup()->entriesRecursive().size(), 2); - - dbDestination->metadata()->customData()->set("TEST_CUSTOM_DATA", "OLD TESTING"); - - m_clock->advanceSecond(1); - - dbSource->metadata()->customData()->set("TEST_CUSTOM_DATA", "TESTING"); - - // First check that the custom data is not merged when skipped - Merger merger1(dbSource.data(), dbDestination.data()); - merger1.setSkipDatabaseCustomData(true); - auto changes = merger1.merge(); - - QVERIFY(changes.isEmpty()); - QCOMPARE(dbDestination->metadata()->customData()->value("TEST_CUSTOM_DATA"), QString("OLD TESTING")); - - // Second check that the custom data is merged otherwise - Merger merger2(dbSource.data(), dbDestination.data()); - changes = merger2.merge(); - - QCOMPARE(changes.size(), 1); - QCOMPARE(dbDestination->metadata()->customData()->value("TEST_CUSTOM_DATA"), QString("TESTING")); } /** @@ -287,6 +258,50 @@ void TestMerge::testResolveConflictExisting() } } +/** + * Tests the KeepBoth merge mode. + */ +void TestMerge::testResolveConflictDuplicate() +{ + QScopedPointer dbDestination(createTestDatabase()); + QScopedPointer dbSource( + createTestDatabaseStructureClone(dbDestination.data(), Entry::CloneIncludeHistory, Group::CloneIncludeEntries)); + + // sanity check + QCOMPARE(dbDestination->rootGroup()->children().at(0)->entries().size(), 2); + + // make this entry newer than in original db + QPointer updatedDestinationEntry = dbDestination->rootGroup()->children().at(0)->entries().at(0); + const TimeInfo initialEntryTimeInfo = updatedDestinationEntry->timeInfo(); + const TimeInfo updatedEntryTimeInfo = modificationTime(initialEntryTimeInfo, 1, 0, 0); + + updatedDestinationEntry->setTimeInfo(updatedEntryTimeInfo); + + dbDestination->rootGroup()->setMergeMode(Group::MergeMode::Duplicate); + + // Make sure the merge changes have a different timestamp. + m_clock->advanceSecond(1); + + Merger merger(dbSource.data(), dbDestination.data()); + merger.merge(); + + // one entry is duplicated because of mode + QCOMPARE(dbDestination->rootGroup()->children().at(0)->entries().size(), 3); + QCOMPARE(dbDestination->rootGroup()->children().at(0)->entries().at(0)->historyItems().isEmpty(), false); + // the older entry was merged from the other db as last in the group + QPointer newerEntry = dbDestination->rootGroup()->children().at(0)->entries().at(0); + QPointer olderEntry = dbDestination->rootGroup()->children().at(0)->entries().at(2); + QVERIFY(newerEntry->title() == olderEntry->title()); + QVERIFY2(!newerEntry->attributes()->hasKey("merged"), "newer entry is not marked with an attribute \"merged\""); + QVERIFY2(olderEntry->attributes()->hasKey("merged"), "older entry is marked with an attribute \"merged\""); + QCOMPARE(olderEntry->historyItems().isEmpty(), false); + QCOMPARE(newerEntry->timeInfo(), updatedEntryTimeInfo); + // TODO HNH: this may be subject to discussions since the entry itself is newer but represents an older one + // QCOMPARE(olderEntry->timeInfo(), initialEntryTimeInfo); + QVERIFY2(olderEntry->uuidToHex() != updatedDestinationEntry->uuidToHex(), + "KeepBoth should not reuse the UUIDs when cloning."); +} + void TestMerge::testResolveConflictTemplate( int mergeMode, std::function&)> verification) @@ -295,7 +310,7 @@ void TestMerge::testResolveConflictTemplate( timestamps["initialTime"] = m_clock->currentDateTimeUtc(); QScopedPointer dbDestination(createTestDatabase()); - auto deletedEntry1 = new Entry(); + Entry* deletedEntry1 = new Entry(); deletedEntry1->setUuid(QUuid::createUuid()); deletedEntry1->beginUpdate(); @@ -303,7 +318,7 @@ void TestMerge::testResolveConflictTemplate( deletedEntry1->setTitle("deletedDestination"); deletedEntry1->endUpdate(); - auto deletedEntry2 = new Entry(); + Entry* deletedEntry2 = new Entry(); deletedEntry2->setUuid(QUuid::createUuid()); deletedEntry2->beginUpdate(); @@ -378,7 +393,7 @@ void TestMerge::testResolveConflictTemplate( m_clock->advanceMinute(1); - auto destinationEntrySingle = new Entry(); + Entry* destinationEntrySingle = new Entry(); destinationEntrySingle->setUuid(QUuid::createUuid()); destinationEntrySingle->beginUpdate(); @@ -386,7 +401,7 @@ void TestMerge::testResolveConflictTemplate( destinationEntrySingle->setTitle("entryDestination"); destinationEntrySingle->endUpdate(); - auto sourceEntrySingle = new Entry(); + Entry* sourceEntrySingle = new Entry(); sourceEntrySingle->setUuid(QUuid::createUuid()); sourceEntrySingle->beginUpdate(); @@ -440,7 +455,7 @@ void TestMerge::testDeletionConflictTemplate(int mergeMode, // entry indirectly deleted in target after updated in source auto createGroup = [&](const char* name, Group* parent) { - auto group = new Group(); + Group* group = new Group(); group->setUuid(QUuid::createUuid()); group->setName(name); group->setParent(parent, 0); @@ -448,7 +463,7 @@ void TestMerge::testDeletionConflictTemplate(int mergeMode, return group; }; auto createEntry = [&](const char* title, Group* parent) { - auto entry = new Entry(); + Entry* entry = new Entry(); entry->setUuid(QUuid::createUuid()); entry->setTitle(title); entry->setGroup(parent); @@ -569,7 +584,7 @@ void TestMerge::assertDeletionNewerOnly(Database* db, const QMap // newer deletion in source forces deletion QVERIFY(!mergedRootGroup->findEntryByUuid(identifiers["EntryDeletedInSourceAfterChangedInTarget"])); QVERIFY(db->containsDeletedObject(identifiers["EntryDeletedInSourceAfterChangedInTarget"])); - // newer change in source prevents deletion + // newer change in source privents deletion QVERIFY(mergedRootGroup->findEntryByUuid(identifiers["EntryDeletedInTargetBeforeChangedInSource"])); QVERIFY(!db->containsDeletedObject(identifiers["EntryDeletedInTargetBeforeChangedInSource"])); // newer deletion in target forces deletion @@ -585,7 +600,7 @@ void TestMerge::assertDeletionNewerOnly(Database* db, const QMap QVERIFY(db->containsDeletedObject(identifiers["GroupDeletedInSourceAfterEntryUpdatedInTarget"])); QVERIFY(!mergedRootGroup->findEntryByUuid(identifiers["EntryDeletedInSourceAfterEntryUpdatedInTarget"])); QVERIFY(db->containsDeletedObject(identifiers["EntryDeletedInSourceAfterEntryUpdatedInTarget"])); - // newer change in source prevents deletion + // newer change in source privents deletion QVERIFY(mergedRootGroup->findGroupByUuid(identifiers["GroupDeletedInTargetBeforeEntryUpdatedInSource"])); QVERIFY(!db->containsDeletedObject(identifiers["GroupDeletedInTargetBeforeEntryUpdatedInSource"])); QVERIFY(mergedRootGroup->findEntryByUuid(identifiers["EntryDeletedInTargetBeforeEntryUpdatedInSource"])); @@ -718,11 +733,26 @@ void TestMerge::testDeletionConflictEntry_Synchronized() testDeletionConflictTemplate(Group::Synchronize, &TestMerge::assertDeletionNewerOnly); } +void TestMerge::testDeletionConflictEntry_KeepLocal() +{ + testDeletionConflictTemplate(Group::KeepLocal, &TestMerge::assertDeletionLocalOnly); +} + +void TestMerge::testDeletionConflictEntry_KeepRemote() +{ + testDeletionConflictTemplate(Group::KeepRemote, &TestMerge::assertDeletionLocalOnly); +} + void TestMerge::testDeletionConflictEntry_KeepNewer() { testDeletionConflictTemplate(Group::KeepNewer, &TestMerge::assertDeletionLocalOnly); } +void TestMerge::testDeletionConflictEntry_Duplicate() +{ + testDeletionConflictTemplate(Group::Duplicate, &TestMerge::assertDeletionLocalOnly); +} + /** * Tests the KeepNewer mode concerning history. */ @@ -736,6 +766,29 @@ void TestMerge::testResolveConflictEntry_Synchronize() }); } +/** + * Tests the KeepExisting mode concerning history. + */ +void TestMerge::testResolveConflictEntry_KeepLocal() +{ + testResolveConflictTemplate(Group::KeepLocal, [](Database* db, const QMap& timestamps) { + QPointer mergedRootGroup = db->rootGroup(); + QPointer mergedGroup1 = mergedRootGroup->children().at(0); + TestMerge::assertUpdateMergedEntry1(mergedGroup1->entries().at(0), timestamps); + TestMerge::assertUpdateReappliedEntry2(mergedGroup1->entries().at(1), timestamps); + }); +} + +void TestMerge::testResolveConflictEntry_KeepRemote() +{ + testResolveConflictTemplate(Group::KeepRemote, [](Database* db, const QMap& timestamps) { + QPointer mergedRootGroup = db->rootGroup(); + QPointer mergedGroup1 = mergedRootGroup->children().at(0); + TestMerge::assertUpdateReappliedEntry1(mergedGroup1->entries().at(0), timestamps); + TestMerge::assertUpdateMergedEntry2(mergedGroup1->entries().at(1), timestamps); + }); +} + void TestMerge::testResolveConflictEntry_KeepNewer() { testResolveConflictTemplate(Group::KeepNewer, [](Database* db, const QMap& timestamps) { @@ -830,7 +883,7 @@ void TestMerge::testCreateNewGroups() m_clock->advanceSecond(1); - auto groupSourceCreated = new Group(); + Group* groupSourceCreated = new Group(); groupSourceCreated->setName("group3"); groupSourceCreated->setUuid(QUuid::createUuid()); groupSourceCreated->setParent(dbSource->rootGroup()); @@ -853,7 +906,7 @@ void TestMerge::testMoveEntryIntoNewGroup() m_clock->advanceSecond(1); - auto groupSourceCreated = new Group(); + Group* groupSourceCreated = new Group(); groupSourceCreated->setName("group3"); groupSourceCreated->setUuid(QUuid::createUuid()); groupSourceCreated->setParent(dbSource->rootGroup()); @@ -888,7 +941,7 @@ void TestMerge::testUpdateEntryDifferentLocation() QScopedPointer dbSource( createTestDatabaseStructureClone(dbDestination.data(), Entry::CloneNoFlags, Group::CloneIncludeEntries)); - auto groupDestinationCreated = new Group(); + Group* groupDestinationCreated = new Group(); groupDestinationCreated->setName("group3"); groupDestinationCreated->setUuid(QUuid::createUuid()); groupDestinationCreated->setParent(dbDestination->rootGroup()); @@ -926,7 +979,7 @@ void TestMerge::testUpdateEntryDifferentLocation() QCOMPARE(entryDestinationMerged->username(), QString("username")); QCOMPARE(entryDestinationMerged->group()->name(), QString("group3")); QCOMPARE(uuidBeforeSyncing, entryDestinationMerged->uuid()); - // default merge strategy is KeepNewer - therefore the older location is used! + // default merge strategie is KeepNewer - therefore the older location is used! QCOMPARE(entryDestinationMerged->timeInfo().locationChanged(), sourceLocationChanged); } @@ -975,7 +1028,7 @@ void TestMerge::testUpdateGroup() void TestMerge::testUpdateGroupLocation() { QScopedPointer dbDestination(createTestDatabase()); - auto group3DestinationCreated = new Group(); + Group* group3DestinationCreated = new Group(); QUuid group3Uuid = QUuid::createUuid(); group3DestinationCreated->setUuid(group3Uuid); group3DestinationCreated->setName("group3"); @@ -1231,7 +1284,7 @@ void TestMerge::testDeletedGroup() QPointer group2DestinationInitial = dbDestination->rootGroup()->findChildByName("group2"); QVERIFY(group2DestinationInitial != nullptr); - auto entry3DestinationCreated = new Entry(); + Entry* entry3DestinationCreated = new Entry(); entry3DestinationCreated->beginUpdate(); entry3DestinationCreated->setUuid(QUuid::createUuid()); entry3DestinationCreated->setGroup(group2DestinationInitial); @@ -1454,19 +1507,19 @@ void TestMerge::testMergeModified() Database* TestMerge::createTestDatabase() { - auto db = new Database(); + Database* db = new Database(); - auto group1 = new Group(); + Group* group1 = new Group(); group1->setName("group1"); group1->setUuid(QUuid::createUuid()); - auto group2 = new Group(); + Group* group2 = new Group(); group2->setName("group2"); group2->setUuid(QUuid::createUuid()); - auto entry1 = new Entry(); + Entry* entry1 = new Entry(); entry1->setUuid(QUuid::createUuid()); - auto entry2 = new Entry(); + Entry* entry2 = new Entry(); entry2->setUuid(QUuid::createUuid()); m_clock->advanceYear(1); @@ -1491,9 +1544,9 @@ Database* TestMerge::createTestDatabase() Database* TestMerge::createTestDatabaseStructureClone(Database* source, int entryFlags, int groupFlags) { - auto db = new Database(); - auto oldGroup = db->setRootGroup(source->rootGroup()->clone(static_cast(entryFlags), - static_cast(groupFlags))); - delete oldGroup; + Database* db = new Database(); + // the old root group is deleted by QObject::parent relationship + db->setRootGroup(source->rootGroup()->clone(static_cast(entryFlags), + static_cast(groupFlags))); return db; } diff --git a/tests/TestMerge.h b/tests/TestMerge.h index b9ea54f72..cb17ac8fb 100644 --- a/tests/TestMerge.h +++ b/tests/TestMerge.h @@ -30,15 +30,20 @@ private slots: void cleanup(); void testMergeIntoNew(); void testMergeNoChanges(); - void testMergeCustomData(); void testResolveConflictNewer(); void testResolveConflictExisting(); void testResolveGroupConflictOlder(); void testMergeNotModified(); void testMergeModified(); + void testResolveConflictDuplicate(); void testResolveConflictEntry_Synchronize(); + void testResolveConflictEntry_KeepLocal(); + void testResolveConflictEntry_KeepRemote(); void testResolveConflictEntry_KeepNewer(); + void testDeletionConflictEntry_Duplicate(); void testDeletionConflictEntry_Synchronized(); + void testDeletionConflictEntry_KeepLocal(); + void testDeletionConflictEntry_KeepRemote(); void testDeletionConflictEntry_KeepNewer(); void testMoveEntry(); void testMoveEntryPreserveChanges(); diff --git a/tests/TestOpVaultReader.cpp b/tests/TestOpVaultReader.cpp new file mode 100644 index 000000000..a5d05e9b0 --- /dev/null +++ b/tests/TestOpVaultReader.cpp @@ -0,0 +1,139 @@ +/* + * Copyright (C) 2019 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 "TestOpVaultReader.h" + +#include "config-keepassx-tests.h" +#include "core/Group.h" +#include "core/Metadata.h" +#include "crypto/Crypto.h" +#include "format/OpVaultReader.h" +#include "totp/totp.h" + +#include +#include +#include +#include + +QTEST_GUILESS_MAIN(TestOpVaultReader) + +void TestOpVaultReader::initTestCase() +{ + QVERIFY(Crypto::init()); + + m_opVaultPath = QStringLiteral("%1/%2").arg(KEEPASSX_TEST_DATA_DIR, QStringLiteral("/keepassxc.opvault")); + + m_categories = QStringList({QStringLiteral("Login"), + QStringLiteral("Credit Card"), + QStringLiteral("Secure Note"), + QStringLiteral("Identity"), + QStringLiteral("Password"), + QStringLiteral("Tombstone"), + QStringLiteral("Software License"), + QStringLiteral("Bank Account"), + QStringLiteral("Database"), + QStringLiteral("Driver License"), + QStringLiteral("Outdoor License"), + QStringLiteral("Membership"), + QStringLiteral("Passport"), + QStringLiteral("Rewards"), + QStringLiteral("SSN"), + QStringLiteral("Router"), + QStringLiteral("Server"), + QStringLiteral("Email")}); +} + +void TestOpVaultReader::testReadIntoDatabase() +{ + QDir opVaultDir(m_opVaultPath); + + OpVaultReader reader; + QScopedPointer db(reader.readDatabase(opVaultDir, "a")); + QVERIFY(db); + QVERIFY2(!reader.hasError(), qPrintable(reader.errorString())); + + // Confirm specific entry details are valid + auto entry = db->rootGroup()->findEntryByPath("/Login/KeePassXC"); + QVERIFY(entry); + QCOMPARE(entry->title(), QStringLiteral("KeePassXC")); + QCOMPARE(entry->username(), QStringLiteral("keepassxc")); + QCOMPARE(entry->password(), QStringLiteral("opvault")); + QCOMPARE(entry->url(), QStringLiteral("https://www.keepassxc.org")); + QCOMPARE(entry->notes(), QStringLiteral("KeePassXC Account")); + // Check extra URL's + QCOMPARE(entry->attribute("KP2A_URL_1"), QStringLiteral("https://snapshot.keepassxc.org")); + // Check TOTP + QVERIFY(entry->hasTotp()); + // Check attachments + auto attachments = entry->attachments(); + QCOMPARE(attachments->keys().count(), 1); + QCOMPARE(*attachments->values().begin(), QByteArray("attachment")); + + // Confirm expired entries + entry = db->rootGroup()->findEntryByPath("/Login/Expired Login"); + QVERIFY(entry->isExpired()); + + // Confirm advanced attributes + entry = db->rootGroup()->findEntryByPath("/Credit Card/My Credit Card"); + QVERIFY(entry); + auto attr = entry->attributes(); + QCOMPARE(attr->value("cardholder name"), QStringLiteral("Team KeePassXC")); + QVERIFY(!attr->value("valid from").isEmpty()); + QCOMPARE(attr->value("Additional Details_PIN"), QStringLiteral("1234")); + QVERIFY(attr->isProtected("Additional Details_PIN")); + + // Confirm address fields + entry = db->rootGroup()->findEntryByPath("/Identity/Team KeePassXC"); + QVERIFY(entry); + attr = entry->attributes(); + QCOMPARE(attr->value("address_street"), QStringLiteral("123 Password Lane")); + + // Confirm complex passwords + entry = db->rootGroup()->findEntryByPath("/Password/Complex Password"); + QVERIFY(entry); + QCOMPARE(entry->password(), QStringLiteral("HfgcHjEL}iO}^3N!?*cv~O:9GJZQ0>oC")); + QVERIFY(entry->hasTotp()); + auto totpSettings = entry->totpSettings(); + QCOMPARE(totpSettings->digits, static_cast(8)); + QCOMPARE(totpSettings->step, static_cast(45)); + + // Add another OTP to this entry to confirm it doesn't overwrite the existing one + auto field = QJsonObject::fromVariantMap({{"n", "TOTP_SETTINGS"}, {"v", "otpauth://test.url?digits=6"}}); + reader.fillFromSectionField(entry, "", field); + QVERIFY(entry->hasTotp()); + totpSettings = entry->totpSettings(); + QCOMPARE(totpSettings->digits, static_cast(8)); + QCOMPARE(totpSettings->step, static_cast(45)); + QVERIFY(entry->attributes()->contains("otp_1")); + + // Confirm trashed entries are sent to the recycle bin + auto recycleBin = db->metadata()->recycleBin(); + QVERIFY(recycleBin); + QVERIFY(!recycleBin->isEmpty()); + QVERIFY(recycleBin->findEntryByPath("Trashed Password")); + + // Confirm created groups align with category names + for (const auto group : db->rootGroup()->children()) { + if (group == recycleBin) { + continue; + } + QVERIFY2(m_categories.contains(group->name()), + qPrintable(QStringLiteral("Invalid group name: %1").arg(group->name()))); + // Confirm each group is not empty + QVERIFY2(!group->isEmpty(), qPrintable(QStringLiteral("Group %1 is empty").arg(group->name()))); + } +} diff --git a/tests/gui/attachments/TestPreviewEntryAttachmentsDialog.h b/tests/TestOpVaultReader.h similarity index 56% rename from tests/gui/attachments/TestPreviewEntryAttachmentsDialog.h rename to tests/TestOpVaultReader.h index 7b5899b9e..feb904c6d 100644 --- a/tests/gui/attachments/TestPreviewEntryAttachmentsDialog.h +++ b/tests/TestOpVaultReader.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2025 KeePassXC Team + * Copyright (C) 2019 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 @@ -15,26 +15,31 @@ * along with this program. If not, see . */ -#pragma once - -#include "PreviewEntryAttachmentsDialog.h" +#ifndef TEST_OPVAULT_READER_H_ +#define TEST_OPVAULT_READER_H_ +#include #include -#include - -class TestPreviewEntryAttachmentsDialog : public QObject +class TestOpVaultReader : public QObject { Q_OBJECT private slots: void initTestCase(); - - void testSetAttachment(); - void testSetAttachmentTwice(); - - void testBottonsBox(); + void testReadIntoDatabase(); private: - QScopedPointer m_previewDialog{}; + // absolute path to the .opvault directory + QString m_opVaultPath; + + /* + * Points to the file made by using the 1Password GUI to "Export all" + * to its text file format, which are almost key=value pairs + * except for multi-line strings. + */ + QString m_opVaultTextExportPath; + QStringList m_categories; }; + +#endif /* TEST_OPVAULT_READER_H_ */ diff --git a/tests/TestOpenSSHKey.cpp b/tests/TestOpenSSHKey.cpp index a20b248ed..1f0053474 100644 --- a/tests/TestOpenSSHKey.cpp +++ b/tests/TestOpenSSHKey.cpp @@ -254,7 +254,6 @@ void TestOpenSSHKey::testParseRSACompare() QCOMPARE(oldKey.type(), newKey.type()); QCOMPARE(oldKey.fingerprint(), newKey.fingerprint()); QCOMPARE(oldPrivateKey, newPrivateKey); - QCOMPARE(newKeyString, newKey.privateKey()); } void TestOpenSSHKey::testParseECDSA256() @@ -278,7 +277,6 @@ void TestOpenSSHKey::testParseECDSA256() QCOMPARE(key.type(), QString("ecdsa-sha2-nistp256")); QCOMPARE(key.comment(), QString("opensshkey-test-ecdsa256@keepassxc")); QCOMPARE(key.fingerprint(), QString("SHA256:nwwovZmQbBeiR3GZRpK4OWHgCUE7E0wFtCN7Ng7eX5g")); - QCOMPARE(keyString, key.privateKey()); } void TestOpenSSHKey::testParseECDSA384() @@ -304,7 +302,6 @@ void TestOpenSSHKey::testParseECDSA384() QCOMPARE(key.type(), QString("ecdsa-sha2-nistp384")); QCOMPARE(key.comment(), QString("opensshkey-test-ecdsa384@keepassxc")); QCOMPARE(key.fingerprint(), QString("SHA256:B5tLMG976BZ6nyi/oRUmKaTJcaEaFagEjBfOAgru0OY")); - QCOMPARE(keyString, key.privateKey()); } void TestOpenSSHKey::testParseECDSA521() @@ -331,7 +328,6 @@ void TestOpenSSHKey::testParseECDSA521() QCOMPARE(key.type(), QString("ecdsa-sha2-nistp521")); QCOMPARE(key.comment(), QString("opensshkey-test-ecdsa521@keepassxc")); QCOMPARE(key.fingerprint(), QString("SHA256:m3LtA9MtZW8FN0R3vwA0AAI+YtegbggGCy3EGKWya+s")); - QCOMPARE(keyString, key.privateKey()); } void TestOpenSSHKey::testDecryptOpenSSHAES256CBC() @@ -537,7 +533,6 @@ void TestOpenSSHKey::testParseECDSASecurityKey() QCOMPARE(key.type(), QString("sk-ecdsa-sha2-nistp256@openssh.com")); QCOMPARE(key.comment(), QString("opensshkey-test-ecdsa-sk@keepassxc")); QCOMPARE(key.fingerprint(), QString("SHA256:ctOtAsPMqbtumGI41o2oeWfGDah4m1ACILRj+x0gx0E")); - QCOMPARE(keyString, key.privateKey()); } void TestOpenSSHKey::testParseED25519SecurityKey() @@ -562,5 +557,4 @@ void TestOpenSSHKey::testParseED25519SecurityKey() QCOMPARE(key.type(), QString("sk-ssh-ed25519@openssh.com")); QCOMPARE(key.comment(), QString("opensshkey-test-ed25519-sk@keepassxc")); QCOMPARE(key.fingerprint(), QString("SHA256:PGtS5WvbnYmNqFIeRbzO6cVP9GLh8eEzENgkHp02XIA")); - QCOMPARE(keyString, key.privateKey()); } diff --git a/tests/TestPasskeys.cpp b/tests/TestPasskeys.cpp deleted file mode 100644 index fd25c2baf..000000000 --- a/tests/TestPasskeys.cpp +++ /dev/null @@ -1,702 +0,0 @@ -/* - * Copyright (C) 2025 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 "TestPasskeys.h" -#include "browser/BrowserCbor.h" -#include "browser/BrowserMessageBuilder.h" -#include "browser/BrowserPasskeysClient.h" -#include "browser/BrowserService.h" -#include "browser/PasskeyUtils.h" -#include "core/Database.h" -#include "core/Entry.h" -#include "core/Group.h" -#include "crypto/Crypto.h" - -#include -#include -#include -#include - -using namespace Botan::Sodium; - -QTEST_GUILESS_MAIN(TestPasskeys) - -// Register request -// clang-format off -const QString PublicKeyCredentialOptions = R"( - { - "attestation": "none", - "authenticatorSelection": { - "residentKey": "preferred", - "requireResidentKey": false, - "userVerification": "required" - }, - "challenge": "lVeHzVxWsr8MQxMkZF0ti6FXhdgMljqKzgA-q_zk2Mnii3eJ47VF97sqUoYktVC85WAZ1uIASm-a_lDFZwsLfw", - "pubKeyCredParams": [ - { - "type": "public-key", - "alg": -7 - }, - { - "type": "public-key", - "alg": -257 - } - ], - "rp": { - "name": "webauthn.io", - "id": "webauthn.io" - }, - "timeout": 60000, - "excludeCredentials": [], - "user": { - "displayName": "Test User", - "id": "VkdWemRDQlZjMlZ5", - "name": "Test User" - } - } -)"; - -// Register response -const QString PublicKeyCredential = R"( - { - "authenticatorAttachment": "platform", - "id": "yrzFJ5lwcpTwYMOdXSmxF5b5cYQlqBMzbbU_d-oFLO8", - "rawId": "cabcc52799707294f060c39d5d29b11796f9718425a813336db53f77ea052cef", - "response": { - "attestationObject": "o2NmbXRkbm9uZWdhdHRTdG10oGhhdXRoRGF0YVikdKbqkhPJnC90siSSsyDPQCYqlMGpUKA5fyklC2CEHvBFAAAAAP2xQbJdhEQ-ijVGmMIFpQIAIMq8xSeZcHKU8GDDnV0psReW-XGEJagTM221P3fqBSzvpQECAyYgASFYIAbsrzRbYpFhbRlZA6ZQKsoxxJWoaeXwh-XUuDLNCIXdIlgg4u5_6Q8O6R0Hg0oDCdtCJLEL0yX_GDLhU5m3HUIE54M", - "clientDataJSON": "eyJ0eXBlIjoid2ViYXV0aG4uY3JlYXRlIiwiY2hhbGxlbmdlIjoibFZlSHpWeFdzcjhNUXhNa1pGMHRpNkZYaGRnTWxqcUt6Z0EtcV96azJNbmlpM2VKNDdWRjk3c3FVb1lrdFZDODVXQVoxdUlBU20tYV9sREZad3NMZnciLCJvcmlnaW4iOiJodHRwczovL3dlYmF1dGhuLmlvIiwiY3Jvc3NPcmlnaW4iOmZhbHNlfQ" - }, - "type": "public-key" - } -)"; - -// Get request -const QString PublicKeyCredentialRequestOptions = R"( - { - "allowCredentials": [ - { - "id": "yrzFJ5lwcpTwYMOdXSmxF5b5cYQlqBMzbbU_d-oFLO8", - "transports": ["internal"], - "type": "public-key" - } - ], - "challenge": "9z36vTfQTL95Lf7WnZgyte7ohGeF-XRiLxkL-LuGU1zopRmMIUA1LVwzGpyIm1fOBn1QnRa0QH27ADAaJGHysQ", - "rpId": "webauthn.io", - "timeout": 60000, - "userVerification": "required" - } -)"; - -const QJsonArray validPubKeyCredParams = { - QJsonObject({ - {"type", "public-key"}, - {"alg", -7} - }), - QJsonObject({ - {"type", "public-key"}, - {"alg", -257} - }), -}; - -// clang-format on - -void TestPasskeys::initTestCase() -{ - QVERIFY(Crypto::init()); -} - -void TestPasskeys::init() -{ -} - -void TestPasskeys::testBase64WithHexStrings() -{ - const size_t bufSize = 64; - unsigned char buf[bufSize] = {31, 141, 30, 29, 142, 73, 5, 239, 242, 84, 187, 202, 40, 54, 15, 223, - 201, 0, 108, 109, 209, 104, 207, 239, 160, 89, 208, 117, 134, 66, 42, 12, - 31, 66, 163, 248, 221, 88, 241, 164, 6, 55, 182, 97, 186, 243, 162, 162, - 81, 220, 55, 60, 93, 207, 170, 222, 56, 234, 227, 45, 115, 175, 138, 182}; - - auto base64FromArray = browserMessageBuilder()->getBase64FromArray(reinterpret_cast(buf), bufSize); - QCOMPARE(base64FromArray, - QString("H40eHY5JBe_yVLvKKDYP38kAbG3RaM_voFnQdYZCKgwfQqP43VjxpAY3tmG686KiUdw3PF3Pqt446uMtc6-Ktg")); - - auto arrayFromBase64 = browserMessageBuilder()->getArrayFromBase64(base64FromArray); - QCOMPARE(arrayFromBase64.size(), bufSize); - - for (size_t i = 0; i < bufSize; i++) { - QCOMPARE(static_cast(arrayFromBase64.at(i)), buf[i]); - } - - auto randomDataBase64 = browserMessageBuilder()->getRandomBytesAsBase64(24); - QCOMPARE(randomDataBase64.isEmpty(), false); -} - -void TestPasskeys::testDecodeResponseData() -{ - const auto publicKeyCredential = browserMessageBuilder()->getJsonObject(PublicKeyCredential.toUtf8()); - auto response = publicKeyCredential["response"].toObject(); - auto clientDataJson = response["clientDataJSON"].toString(); - auto attestationObject = response["attestationObject"].toString(); - - QVERIFY(!clientDataJson.isEmpty()); - QVERIFY(!attestationObject.isEmpty()); - - // Parse clientDataJSON - auto clientDataByteArray = browserMessageBuilder()->getArrayFromBase64(clientDataJson); - auto clientDataJsonObject = browserMessageBuilder()->getJsonObject(clientDataByteArray); - QCOMPARE(clientDataJsonObject["challenge"], - QString("lVeHzVxWsr8MQxMkZF0ti6FXhdgMljqKzgA-q_zk2Mnii3eJ47VF97sqUoYktVC85WAZ1uIASm-a_lDFZwsLfw")); - QCOMPARE(clientDataJsonObject["origin"], QString("https://webauthn.io")); - QCOMPARE(clientDataJsonObject["type"], QString("webauthn.create")); - - // Parse attestationObject (CBOR decoding needed) - BrowserCbor browserCbor; - auto attestationByteArray = browserMessageBuilder()->getArrayFromBase64(attestationObject); - auto attestationJsonObject = browserCbor.getJsonFromCborData(attestationByteArray); - - // Parse authData - auto authDataJsonObject = attestationJsonObject["authData"].toString(); - auto authDataArray = browserMessageBuilder()->getArrayFromBase64(authDataJsonObject); - QVERIFY(authDataArray.size() >= 37); - - auto authData = browserPasskeys()->parseAuthData(authDataArray); - auto credentialData = authData["credentialData"].toObject(); - auto flags = authData["flags"].toObject(); - auto publicKey = credentialData["publicKey"].toObject(); - - // The attestationObject should include the same ID after decoding with the response root - QCOMPARE(credentialData["credentialId"].toString(), publicKeyCredential["id"].toString()); - QCOMPARE(credentialData["aaguid"].toString(), QString("_bFBsl2ERD6KNUaYwgWlAg")); - QCOMPARE(authData["rpIdHash"].toString(), QString("dKbqkhPJnC90siSSsyDPQCYqlMGpUKA5fyklC2CEHvA")); - QCOMPARE(flags["AT"], true); - QCOMPARE(flags["UP"], true); - QCOMPARE(publicKey["1"], 2); - QCOMPARE(publicKey["3"], -7); - QCOMPARE(publicKey["-1"], 1); - QCOMPARE(publicKey["-2"], QString("BuyvNFtikWFtGVkDplAqyjHElahp5fCH5dS4Ms0Ihd0")); - QCOMPARE(publicKey["-3"], QString("4u5_6Q8O6R0Hg0oDCdtCJLEL0yX_GDLhU5m3HUIE54M")); -} - -void TestPasskeys::testLoadingECPrivateKeyFromPem() -{ -#if BOTAN_VERSION_CODE < BOTAN_VERSION_CODE_FOR(2, 14, 0) - QSKIP("ECDSA Signature is broken on Botan < 2.14.0"); -#endif - const auto publicKeyCredentialRequestOptions = - browserMessageBuilder()->getJsonObject(PublicKeyCredentialRequestOptions.toUtf8()); - const auto privateKeyPem = QString("-----BEGIN PRIVATE KEY-----" - "MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg5DX2R6I37nMSZqCp" - "XfHlE3UeitkGGE03FqGsdfxIBoOhRANCAAQG7K80W2KRYW0ZWQOmUCrKMcSVqGnl" - "8Ifl1LgyzQiF3eLuf+kPDukdB4NKAwnbQiSxC9Ml/xgy4VOZtx1CBOeD" - "-----END PRIVATE KEY-----"); - - const auto authenticatorData = - browserMessageBuilder()->getArrayFromBase64("dKbqkhPJnC90siSSsyDPQCYqlMGpUKA5fyklC2CEHvAFAAAAAA"); - const auto clientData = browserMessageBuilder()->getArrayFromBase64( - "eyJ0eXBlIjoid2ViYXV0aG4uZ2V0IiwiY2hhbGxlbmdlIjoiOXozNnZUZlFUTDk1TGY3V25aZ3l0ZTdvaEdlRi1YUmlMeGtMLUx1R1Uxem9wUm" - "1NSVVBMUxWd3pHcHlJbTFmT0JuMVFuUmEwUUgyN0FEQWFKR0h5c1EiLCJvcmlnaW4iOiJodHRwczovL3dlYmF1dGhuLmlvIiwiY3Jvc3NPcmln" - "aW4iOmZhbHNlfQ"); - - const auto signature = browserPasskeys()->buildSignature(authenticatorData, clientData, privateKeyPem); - QCOMPARE( - browserMessageBuilder()->getBase64FromArray(signature), - QString("MEYCIQCpbDaYJ4b2ofqWBxfRNbH3XCpsyao7Iui5lVuJRU9HIQIhAPl5moNZgJu5zmurkKK_P900Ct6wd3ahVIqCEqTeeRdE")); -} - -void TestPasskeys::testLoadingRSAPrivateKeyFromPem() -{ - const auto privateKeyPem = QString("-----BEGIN PRIVATE KEY-----" - "MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQC5OHjBHQaRfxxX\n4WHRmqq7e7JgT" - "FRs1bd4dIOFAOZnhNE3vAg2IF5VurmeB+9ye9xh7frw8ubrL0cv\nsBWiJfN5CY3SYGRLbGTtBC0fZ6" - "OhhhjwvVM1GW6nVeRU66atzuo4NBfYXJWIYECd\npRBU4+xsDL4vJnn1mj05+v/Tqp6Uo1HrEPx9+Dc" - "oYJD+cw7+OQ83XeGmjD+Dtm5z\nNIyYdweaafVR4PEUlB3CYZuOq9xcpxay3ps2MuYT1zGoiQqk6fla" - "d+0tBWGY8Lwp\nCVulXCv7ljNJ4gxgQtOqWX8j2hC0hBxeqNYDYbrkECid3TsMTEMcV5uaVJXULg4t" - "\nn6UItA11AgMBAAECggEAC3B0WBxHuieIfllOOOC4H9/7S7fDH2f7+W2cFtQ6pqo9\nCq0WBmkYMmw" - "Xx9hpHoq4TnhhHyL9WzPzuKYD0Vx4gvacV/ckkppFScnQKJ2hF+99\nLax1DbU+UImSknfDDFPYbYld" - "b1CD2rpJG1i6X2fRQ6NuK+F7jE05mqcIyE+ZajK+\nIpx8XFmE+tI1EEWsn3CzxMLiTQfXyFt/drM9i" - "GYfcDjYY+q5vzGU3Kxj68gjc96A\nOra79DGOmwX+4zIwo5sSzI3noHnhWPLsaRtE5jWu21Qkb+1BvB" - "jPmbQfN274OQfy\n8/BNNR/NZM1mJm/8x4Mt+h5d946XlIo0AkyYZXY/UQKBgQDYI3G3BCwaYk6MDMe" - "T\nIamRZo25phPtr3if47dhT2xFWJplIt35sW+6KjD6c1Qpb2aGOUh7JPmb57H54OgJ\nmojkS5tv9Y" - "EQZFfgCCZoeuqBx+ArqtJdkXOiNEFS0dpt44I+eO3Do5pnwKRemH+Y\ncqJ/eMH96UMzYDO7WNsyOyo" - "5UQKBgQDbYU0KbGbTrMEV4T9Q41rZ2TnWzs5moqn2\nCRtB8LOdKAZUG7FRsw5KgC1CvFn3Xuk+qphY" - "GUQeJvv7FjxMRUv4BktNpXju6eUj\n3tWHzI2QOkHaeq/XibwbNomfkdyTjtLX2+v8DBHcZnCSlukxc" - "JISyPqZ6CnTjXGE\nEGB+itBI5QKBgQCA+gWttOusguVkZWvivL+3aH9CPXy+5WsR3o1boE13xDu+Bm" - "R3\n0A5gBTVc/t1GLJf9mMlL0vCwvD5UYoWU1YbC1OtYkCQIaBiYM8TXrCGseF2pMTJ/\na4CZVp10k" - "o3J7W2XYgpgKIzHRQnQ+SeLDT0y3BjHMB9N1SaJsah7/RphQQKBgQCr\nL+4yKAzFOJUjQbVqpT8Lp5" - "qeqJofNOdzef+vIOjHxafKkiF4I0UPlZ276cY6ZfGU\nWQKwHGcvMDSI5fz/d0OksySn3mvT4uhPaV8" - "urMv6s7sXhY0Zn/0NLy2NOwDolBar\nIo2vDKwTVEyb1u75CWKzDemfl66ryj++Uhk6JZAKkQKBgQCc" - "NYVe7m648DzD0nu9\n3lgetBTaAS1zZmMs8Cinj44v0ksfqxrRBzBZcO9kCQqiJZ7uCAaVYcQ+PwkY+" - "05C\n+w1+KvdGcKM+8TQYTQM3s2B9IyKExRS/dbQf9F7stJL+k5vbt6OUerwfmbNI9R3t\ngDZ4DEfo" - "pPivs9dnequ9wfaPOw==" - "-----END PRIVATE KEY-----"); - - const auto authenticatorData = - browserMessageBuilder()->getArrayFromBase64("dKbqkhPJnC90siSSsyDPQCYqlMGpUKA5fyklC2CEHvAFAAAAAA"); - const auto clientData = browserMessageBuilder()->getArrayFromBase64( - "eyJ0eXBlIjoid2ViYXV0aG4uZ2V0IiwiY2hhbGxlbmdlIjoiOXozNnZUZlFUTDk1TGY3V25aZ3l0ZTdvaEdlRi1YUmlMeGtMLUx1R1Uxem9wUm" - "1NSVVBMUxWd3pHcHlJbTFmT0JuMVFuUmEwUUgyN0FEQWFKR0h5c1EiLCJvcmlnaW4iOiJodHRwczovL3dlYmF1dGhuLmlvIiwiY3Jvc3NPcmln" - "aW4iOmZhbHNlfQ"); - - const auto signature = browserPasskeys()->buildSignature(authenticatorData, clientData, privateKeyPem); - QCOMPARE( - browserMessageBuilder()->getBase64FromArray(signature), - QString("MOGw6KrerCgPf2mPig7FOTFIUDXYAU1v2uZj89_NgQTg2UddWnAB3JId3pa4zXghj8CkjjadVOI_LvweJGCEpmPQnRby71yFXnja6j" - "Y3woX2b2klG2fB2alGZHHrVg6yVEmnAii4kYSdmoWxI7SmzLftoZfCJNFPFHujx2Pbr-6dIB02sZhtncetT0cpyWobtj9r7C5dIGfm" - "J5n-LccP-F9gXGqtbN605VrIkC2WNztjdk3dAt5FGM_dlIwSe-vP1dKfIuNqAEbgr2IVZAUFn_ZfzUo-XbXTysksuz9JZfEopJBiUi" - "9tjQDNvrYQFqB6wDPqkZAomkbRCohUb3TzCg")); -} - -void TestPasskeys::testCreatingAttestationObjectWithEC() -{ - // Predefined values for a desired outcome - const auto id = QString("yrzFJ5lwcpTwYMOdXSmxF5b5cYQlqBMzbbU_d-oFLO8"); - const auto predefinedFirst = QString("BuyvNFtikWFtGVkDplAqyjHElahp5fCH5dS4Ms0Ihd0"); - const auto predefinedSecond = QString("4u5_6Q8O6R0Hg0oDCdtCJLEL0yX_GDLhU5m3HUIE54M"); - - const auto publicKeyCredentialOptions = browserMessageBuilder()->getJsonObject(PublicKeyCredentialOptions.toUtf8()); - QJsonObject credentialCreationOptions; - browserPasskeysClient()->getCredentialCreationOptions( - publicKeyCredentialOptions, QString("https://webauthn.io"), &credentialCreationOptions); - - auto rpIdHash = browserMessageBuilder()->getSha256HashAsBase64(QString("webauthn.io")); - QCOMPARE(rpIdHash, QString("dKbqkhPJnC90siSSsyDPQCYqlMGpUKA5fyklC2CEHvA")); - - TestingVariables testingVariables = {id, predefinedFirst, predefinedSecond}; - const auto alg = browserPasskeys()->getAlgorithmFromPublicKey(credentialCreationOptions); - const auto credentialPrivateKey = - browserPasskeys()->buildCredentialPrivateKey(alg, predefinedFirst, predefinedSecond); - auto result = browserPasskeys()->buildAttestationObject( - credentialCreationOptions, "", id, credentialPrivateKey.cborEncodedPublicKey, testingVariables); - QCOMPARE( - result, - QString("\xA3" - "cfmtdnonegattStmt\xA0hauthDataX\xA4t\xA6\xEA\x92\x13\xC9\x9C/t\xB2$\x92\xB3 \xCF@&*\x94\xC1\xA9P\xA0" - "9\x7F)%\x0B`\x84\x1E\xF0" - "E\x00\x00\x00\x01\x01\x02\x03\x04\x05\x06\x07\b\x01\x02\x03\x04\x05\x06\x07\b\x00 \x8B\xB0\xCA" - "6\x17\xD6\xDE\x01\x11|\xEA\x94\r\xA0R\xC0\x80_\xF3r\xFBr\xB5\x02\x03:" - "\xBAr\x0Fi\x81\xFE\xA5\x01\x02\x03& \x01!X " - "e\xE2\xF2\x1F:cq\xD3G\xEA\xE0\xF7\x1F\xCF\xFA\\\xABO\xF6\x86\x88\x80\t\xAE\x81\x8BT\xB2\x9B\x15\x85~" - "\"X \\\x8E\x1E@\xDB\x97T-\xF8\x9B\xB0\xAD" - "5\xDC\x12^\xC3\x95\x05\xC6\xDF^\x03\xCB\xB4Q\x91\xFF|\xDB\x94\xB7")); - - // Double check that the result can be decoded - BrowserCbor browserCbor; - auto attestationJsonObject = browserCbor.getJsonFromCborData(result); - - // Parse authData - auto authDataJsonObject = attestationJsonObject["authData"].toString(); - auto authDataArray = browserMessageBuilder()->getArrayFromBase64(authDataJsonObject); - QVERIFY(authDataArray.size() >= 37); - - auto authData = browserPasskeys()->parseAuthData(authDataArray); - auto credentialData = authData["credentialData"].toObject(); - auto flags = authData["flags"].toObject(); - auto publicKey = credentialData["publicKey"].toObject(); - - // The attestationObject should include the same ID after decoding with the response root - QCOMPARE(credentialData["credentialId"].toString(), QString("yrzFJ5lwcpTwYMOdXSmxF5b5cYQlqBMzbbU_d-oFLO8")); - QCOMPARE(authData["rpIdHash"].toString(), QString("dKbqkhPJnC90siSSsyDPQCYqlMGpUKA5fyklC2CEHvA")); - QCOMPARE(flags["AT"], true); - QCOMPARE(flags["UP"], true); - QCOMPARE(publicKey["1"], WebAuthnCoseKeyType::EC2); - QCOMPARE(publicKey["3"], WebAuthnAlgorithms::ES256); - QCOMPARE(publicKey["-1"], 1); - QCOMPARE(publicKey["-2"], predefinedFirst); - QCOMPARE(publicKey["-3"], predefinedSecond); -} - -void TestPasskeys::testCreatingAttestationObjectWithRSA() -{ - // Predefined values for a desired outcome - const auto id = QString("yrzFJ5lwcpTwYMOdXSmxF5b5cYQlqBMzbbU_d-oFLO8"); - const auto predefinedModulus = QString("vUhOZnyn8yn7U-nuHlsXZ6WDWLuYvevWWnwtoHxDEQq27vlp7yAfeVvAPkcvhxRcwoCEUespoa5" - "5IDbkpp2Ypd6b15KbB4C-_4gM4r2FK9gfXghLPAXsMhstYv4keNFb4ghdlY5oUU3JCqUSMyOpmd" - "HeX-RikLL0wgGv_tLT2DaDiWeyQCAtiDblr6COuTAU2kTpLc3Bn35geV9Iqw4iT8DwBQ-f8vjnI" - "EDANXKUiRPojfy1q7WwEl-zMv6Ke2jFHxf68u82BSy3u9DOQaa24FAHoCm8Yd0n5IazMyoxyttl" - "tRt8un8myVOGxcXMiR9_kQb9pu1RRLQMQLd-icE1Qw"); - const auto predefinedExponent = QString("AQAB"); - - // Force algorithm to RSA - QJsonArray pubKeyCredParams; - pubKeyCredParams.append(QJsonObject({{"type", "public-key"}, {"alg", -257}})); - - const auto publicKeyCredentialOptions = browserMessageBuilder()->getJsonObject(PublicKeyCredentialOptions.toUtf8()); - QJsonObject credentialCreationOptions; - browserPasskeysClient()->getCredentialCreationOptions( - publicKeyCredentialOptions, QString("https://webauthn.io"), &credentialCreationOptions); - credentialCreationOptions["credTypesAndPubKeyAlgs"] = pubKeyCredParams; - - auto rpIdHash = browserMessageBuilder()->getSha256HashAsBase64(QString("webauthn.io")); - QCOMPARE(rpIdHash, QString("dKbqkhPJnC90siSSsyDPQCYqlMGpUKA5fyklC2CEHvA")); - - TestingVariables testingVariables = {id, predefinedModulus, predefinedExponent}; - const auto alg = browserPasskeys()->getAlgorithmFromPublicKey(credentialCreationOptions); - auto credentialPrivateKey = - browserPasskeys()->buildCredentialPrivateKey(alg, predefinedModulus, predefinedExponent); - auto result = browserPasskeys()->buildAttestationObject( - credentialCreationOptions, "", id, credentialPrivateKey.cborEncodedPublicKey, testingVariables); - - // Double check that the result can be decoded - BrowserCbor browserCbor; - auto attestationJsonObject = browserCbor.getJsonFromCborData(result); - - // Parse authData - auto authDataJsonObject = attestationJsonObject["authData"].toString(); - auto authDataArray = browserMessageBuilder()->getArrayFromBase64(authDataJsonObject); - QVERIFY(authDataArray.size() >= 37); - - auto authData = browserPasskeys()->parseAuthData(authDataArray); - auto credentialData = authData["credentialData"].toObject(); - auto flags = authData["flags"].toObject(); - auto publicKey = credentialData["publicKey"].toObject(); - - // The attestationObject should include the same ID after decoding with the response root - QCOMPARE(credentialData["credentialId"].toString(), QString("yrzFJ5lwcpTwYMOdXSmxF5b5cYQlqBMzbbU_d-oFLO8")); - QCOMPARE(authData["rpIdHash"].toString(), QString("dKbqkhPJnC90siSSsyDPQCYqlMGpUKA5fyklC2CEHvA")); - QCOMPARE(flags["AT"], true); - QCOMPARE(flags["UP"], true); - QCOMPARE(publicKey["1"], WebAuthnCoseKeyType::RSA); - QCOMPARE(publicKey["3"], WebAuthnAlgorithms::RS256); - QCOMPARE(publicKey["-1"], predefinedModulus); - QCOMPARE(publicKey["-2"], predefinedExponent); -} - -void TestPasskeys::testRegister() -{ - // Predefined values for a desired outcome - const auto predefinedId = QString("yrzFJ5lwcpTwYMOdXSmxF5b5cYQlqBMzbbU_d-oFLO8"); - const auto predefinedX = QString("BuyvNFtikWFtGVkDplAqyjHElahp5fCH5dS4Ms0Ihd0"); - const auto predefinedY = QString("4u5_6Q8O6R0Hg0oDCdtCJLEL0yX_GDLhU5m3HUIE54M"); - const auto origin = QString("https://webauthn.io"); - const auto testDataPublicKey = browserMessageBuilder()->getJsonObject(PublicKeyCredential.toUtf8()); - const auto testDataResponse = testDataPublicKey["response"]; - const auto publicKeyCredentialOptions = browserMessageBuilder()->getJsonObject(PublicKeyCredentialOptions.toUtf8()); - - QJsonObject credentialCreationOptions; - const auto creationResult = browserPasskeysClient()->getCredentialCreationOptions( - publicKeyCredentialOptions, origin, &credentialCreationOptions); - QVERIFY(creationResult == 0); - - TestingVariables testingVariables = {predefinedId, predefinedX, predefinedY}; - auto result = browserPasskeys()->buildRegisterPublicKeyCredential(credentialCreationOptions, testingVariables); - auto publicKeyCredential = result.response; - QCOMPARE(publicKeyCredential["type"], QString("public-key")); - QCOMPARE(publicKeyCredential["authenticatorAttachment"], QString("platform")); - QCOMPARE(publicKeyCredential["id"], QString("yrzFJ5lwcpTwYMOdXSmxF5b5cYQlqBMzbbU_d-oFLO8")); - - auto response = publicKeyCredential["response"].toObject(); - auto attestationObject = response["attestationObject"].toString(); - auto clientDataJson = response["clientDataJSON"].toString(); - QCOMPARE(attestationObject, testDataResponse["attestationObject"].toString()); - - // Parse clientDataJSON - auto clientDataByteArray = browserMessageBuilder()->getArrayFromBase64(clientDataJson); - auto clientDataJsonObject = browserMessageBuilder()->getJsonObject(clientDataByteArray); - QCOMPARE(clientDataJsonObject["challenge"], - QString("lVeHzVxWsr8MQxMkZF0ti6FXhdgMljqKzgA-q_zk2Mnii3eJ47VF97sqUoYktVC85WAZ1uIASm-a_lDFZwsLfw")); - QCOMPARE(clientDataJsonObject["origin"], origin); - QCOMPARE(clientDataJsonObject["type"], QString("webauthn.create")); -} - -void TestPasskeys::testGet() -{ -#if BOTAN_VERSION_CODE < BOTAN_VERSION_CODE_FOR(2, 14, 0) - QSKIP("ECDSA Signature is broken on Botan < 2.14.0"); -#endif - const auto privateKeyPem = QString("-----BEGIN PRIVATE KEY-----" - "MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg5DX2R6I37nMSZqCp" - "XfHlE3UeitkGGE03FqGsdfxIBoOhRANCAAQG7K80W2KRYW0ZWQOmUCrKMcSVqGnl" - "8Ifl1LgyzQiF3eLuf+kPDukdB4NKAwnbQiSxC9Ml/xgy4VOZtx1CBOeD" - "-----END PRIVATE KEY-----"); - const auto origin = QString("https://webauthn.io"); - const auto id = QString("yrzFJ5lwcpTwYMOdXSmxF5b5cYQlqBMzbbU_d-oFLO8"); - const auto publicKeyCredentialRequestOptions = - browserMessageBuilder()->getJsonObject(PublicKeyCredentialRequestOptions.toUtf8()); - - QJsonObject assertionOptions; - const auto assertionResult = - browserPasskeysClient()->getAssertionOptions(publicKeyCredentialRequestOptions, origin, &assertionOptions); - QVERIFY(assertionResult == 0); - - auto publicKeyCredential = browserPasskeys()->buildGetPublicKeyCredential(assertionOptions, id, {}, privateKeyPem); - QVERIFY(!publicKeyCredential.isEmpty()); - QCOMPARE(publicKeyCredential["id"].toString(), id); - - auto response = publicKeyCredential["response"].toObject(); - QCOMPARE(response["authenticatorData"].toString(), QString("dKbqkhPJnC90siSSsyDPQCYqlMGpUKA5fyklC2CEHvAFAAAAAA")); - QCOMPARE(response["clientDataJSON"].toString(), - QString("eyJ0eXBlIjoid2ViYXV0aG4uZ2V0IiwiY2hhbGxlbmdlIjoiOXozNnZUZlFUTDk1TGY3V25aZ3l0ZTdvaEdlRi1YUmlMeGtML" - "Ux1R1Uxem9wUm1NSVVBMUxWd3pHcHlJbTFmT0JuMVFuUmEwUUgyN0FEQWFKR0h5c1EiLCJvcmlnaW4iOiJodHRwczovL3dlYm" - "F1dGhuLmlvIiwiY3Jvc3NPcmlnaW4iOmZhbHNlfQ")); - QCOMPARE( - response["signature"].toString(), - QString("MEYCIQCpbDaYJ4b2ofqWBxfRNbH3XCpsyao7Iui5lVuJRU9HIQIhAPl5moNZgJu5zmurkKK_P900Ct6wd3ahVIqCEqTeeRdE")); - - auto clientDataJson = response["clientDataJSON"].toString(); - auto clientDataByteArray = browserMessageBuilder()->getArrayFromBase64(clientDataJson); - auto clientDataJsonObject = browserMessageBuilder()->getJsonObject(clientDataByteArray); - QCOMPARE(clientDataJsonObject["challenge"].toString(), publicKeyCredentialRequestOptions["challenge"].toString()); -} - -void TestPasskeys::testExtensions() -{ - auto extensions = QJsonObject({{"credProps", true}, {"uvm", true}}); - auto result = passkeyUtils()->buildExtensionData(extensions); - - BrowserCbor cbor; - auto extensionJson = cbor.getJsonFromCborData(result.extensionData); - auto uvmArray = result.extensionObject["uvm"].toArray(); - QCOMPARE(result.extensionObject["credProps"].toObject()["rk"].toBool(), true); - QCOMPARE(uvmArray.size(), 1); - QCOMPARE(uvmArray.first().toArray().size(), 3); - - auto partial = QJsonObject({{"props", true}, {"uvm", true}}); - auto faulty = QJsonObject({{"uvx", true}}); - auto partialData = passkeyUtils()->buildExtensionData(partial); - auto faultyData = passkeyUtils()->buildExtensionData(faulty); - - auto partialJson = cbor.getJsonFromCborData(partialData.extensionData); - QCOMPARE(partialJson["uvm"].toArray().size(), 1); - - auto faultyJson = cbor.getJsonFromCborData(faultyData.extensionData); - QCOMPARE(faultyJson.size(), 0); -} - -void TestPasskeys::testParseFlags() -{ - auto registerResult = browserPasskeys()->parseFlags("\x45"); - QCOMPARE(registerResult["ED"], false); - QCOMPARE(registerResult["AT"], true); - QCOMPARE(registerResult["BS"], false); - QCOMPARE(registerResult["BE"], false); - QCOMPARE(registerResult["UV"], true); - QCOMPARE(registerResult["UP"], true); - - auto getResult = browserPasskeys()->parseFlags("\x05"); // Only UP and UV - QCOMPARE(getResult["ED"], false); - QCOMPARE(getResult["AT"], false); - QCOMPARE(getResult["BS"], false); - QCOMPARE(getResult["BE"], false); - QCOMPARE(getResult["UV"], true); - QCOMPARE(getResult["UP"], true); -} - -void TestPasskeys::testSetFlags() -{ - auto registerJson = - QJsonObject({{"ED", false}, {"AT", true}, {"BS", false}, {"BE", false}, {"UV", true}, {"UP", true}}); - auto registerResult = browserPasskeys()->setFlagsFromJson(registerJson); - QCOMPARE(registerResult, 0x45); - - auto getJson = - QJsonObject({{"ED", false}, {"AT", false}, {"BS", false}, {"BE", false}, {"UV", true}, {"UP", true}}); - auto getResult = browserPasskeys()->setFlagsFromJson(getJson); - QCOMPARE(getResult, 0x05); - - // With "discouraged", so UV is false - auto discouragedJson = - QJsonObject({{"ED", false}, {"AT", false}, {"BS", false}, {"BE", false}, {"UV", false}, {"UP", true}}); - auto discouragedResult = browserPasskeys()->setFlagsFromJson(discouragedJson); - QCOMPARE(discouragedResult, 0x01); -} - -void TestPasskeys::testEntry() -{ - Database db; - auto* root = db.rootGroup(); - root->setUuid(QUuid::createUuid()); - - auto* group1 = new Group(); - group1->setUuid(QUuid::createUuid()); - group1->setParent(root); - - auto* entry = new Entry(); - entry->setGroup(root); - - browserService()->addPasskeyToEntry(entry, - QString("example.com"), - QString("example.com"), - QString("username"), - QString("userId"), - QString("userHandle"), - QString("privateKey")); - - QVERIFY(entry->hasPasskey()); -} - -void TestPasskeys::testIsDomain() -{ - QVERIFY(passkeyUtils()->isDomain("test.example.com")); - QVERIFY(passkeyUtils()->isDomain("example.com")); - - QVERIFY(!passkeyUtils()->isDomain("exa[mple.org")); - QVERIFY(!passkeyUtils()->isDomain("example.com.")); - QVERIFY(!passkeyUtils()->isDomain("127.0.0.1")); - QVERIFY(!passkeyUtils()->isDomain("127.0.0.1.")); -} - -// List from https://html.spec.whatwg.org/multipage/browsers.html#is-a-registrable-domain-suffix-of-or-is-equal-to -void TestPasskeys::testRegistrableDomainSuffix() -{ - QVERIFY(passkeyUtils()->isRegistrableDomainSuffix(QString("example.com"), QString("example.com"))); - QVERIFY(!passkeyUtils()->isRegistrableDomainSuffix(QString("example.com"), QString("example.com."))); - QVERIFY(!passkeyUtils()->isRegistrableDomainSuffix(QString("example.com."), QString("example.com"))); - QVERIFY(passkeyUtils()->isRegistrableDomainSuffix(QString("example.com"), QString("www.example.com"))); - QVERIFY(!passkeyUtils()->isRegistrableDomainSuffix(QString("com"), QString("example.com"))); - QVERIFY(passkeyUtils()->isRegistrableDomainSuffix(QString("example"), QString("example"))); - QVERIFY( - !passkeyUtils()->isRegistrableDomainSuffix(QString("s3.amazonaws.com"), QString("example.s3.amazonaws.com"))); - QVERIFY(!passkeyUtils()->isRegistrableDomainSuffix(QString("example.compute.amazonaws.com"), - QString("www.example.compute.amazonaws.com"))); - QVERIFY(!passkeyUtils()->isRegistrableDomainSuffix(QString("amazonaws.com"), - QString("www.example.compute.amazonaws.com"))); - QVERIFY(passkeyUtils()->isRegistrableDomainSuffix(QString("amazonaws.com"), QString("test.amazonaws.com"))); -} - -void TestPasskeys::testRpIdValidation() -{ - QString result; - auto allowedIdentical = passkeyUtils()->validateRpId(QString("example.com"), QString("example.com"), &result); - QCOMPARE(result, QString("example.com")); - QVERIFY(allowedIdentical == PASSKEYS_SUCCESS); - - result.clear(); - auto allowedSubdomain = passkeyUtils()->validateRpId(QString("example.com"), QString("www.example.com"), &result); - QCOMPARE(result, QString("example.com")); - QVERIFY(allowedSubdomain == PASSKEYS_SUCCESS); - - result.clear(); - QJsonValue emptyValue; - auto emptyRpId = passkeyUtils()->validateRpId(emptyValue, QString("example.com"), &result); - QCOMPARE(result, QString("example.com")); - QVERIFY(emptyRpId == PASSKEYS_SUCCESS); - - result.clear(); - auto ipRpId = passkeyUtils()->validateRpId(QString("127.0.0.1"), QString("example.com"), &result); - QCOMPARE(result, QString("")); - QVERIFY(ipRpId == ERROR_PASSKEYS_DOMAIN_RPID_MISMATCH); - - result.clear(); - auto emptyOrigin = passkeyUtils()->validateRpId(QString("example.com"), QString(""), &result); - QVERIFY(result.isEmpty()); - QCOMPARE(emptyOrigin, ERROR_PASSKEYS_ORIGIN_NOT_ALLOWED); - - result.clear(); - auto ipOrigin = passkeyUtils()->validateRpId(QString("example.com"), QString("127.0.0.1"), &result); - QVERIFY(result.isEmpty()); - QCOMPARE(ipOrigin, ERROR_PASSKEYS_DOMAIN_RPID_MISMATCH); - - result.clear(); - auto invalidRpId = passkeyUtils()->validateRpId(QString(".com"), QString("example.com"), &result); - QVERIFY(result.isEmpty()); - QCOMPARE(invalidRpId, ERROR_PASSKEYS_DOMAIN_RPID_MISMATCH); - - result.clear(); - auto malformedOrigin = passkeyUtils()->validateRpId(QString("example.com."), QString("example.com."), &result); - QVERIFY(result.isEmpty()); - QCOMPARE(malformedOrigin, ERROR_PASSKEYS_DOMAIN_RPID_MISMATCH); - - result.clear(); - auto malformed = passkeyUtils()->validateRpId(QString("...com."), QString("example...com"), &result); - QVERIFY(result.isEmpty()); - QCOMPARE(malformed, ERROR_PASSKEYS_DOMAIN_RPID_MISMATCH); - - result.clear(); - auto differentDomain = passkeyUtils()->validateRpId(QString("another.com"), QString("example.com"), &result); - QVERIFY(result.isEmpty()); - QCOMPARE(differentDomain, ERROR_PASSKEYS_DOMAIN_RPID_MISMATCH); -} - -void TestPasskeys::testParseAttestation() -{ - QVERIFY(passkeyUtils()->parseAttestation(QString("")) == QString("none")); - QVERIFY(passkeyUtils()->parseAttestation(QString("direct")) == QString("direct")); - QVERIFY(passkeyUtils()->parseAttestation(QString("none")) == QString("none")); - QVERIFY(passkeyUtils()->parseAttestation(QString("indirect")) == QString("none")); - QVERIFY(passkeyUtils()->parseAttestation(QString("invalidvalue")) == QString("none")); -} - -void TestPasskeys::testParseCredentialTypes() -{ - const QJsonArray invalidPubKeyCredParams = { - QJsonObject({{"type", "private-key"}, {"alg", -7}}), - QJsonObject({{"type", "private-key"}, {"alg", -257}}), - }; - - const QJsonArray partiallyInvalidPubKeyCredParams = { - QJsonObject({{"type", "private-key"}, {"alg", -7}}), - QJsonObject({{"type", "public-key"}, {"alg", -257}}), - }; - - auto validResponse = passkeyUtils()->parseCredentialTypes(validPubKeyCredParams); - QVERIFY(validResponse == validPubKeyCredParams); - - auto invalidResponse = passkeyUtils()->parseCredentialTypes(invalidPubKeyCredParams); - QVERIFY(invalidResponse.isEmpty()); - - auto partiallyInvalidResponse = passkeyUtils()->parseCredentialTypes(partiallyInvalidPubKeyCredParams); - QVERIFY(partiallyInvalidResponse != validPubKeyCredParams); - QVERIFY(partiallyInvalidResponse.size() == 1); - QVERIFY(partiallyInvalidResponse.first()["type"].toString() == QString("public-key")); - QVERIFY(partiallyInvalidResponse.first()["alg"].toInt() == -257); - - auto emptyResponse = passkeyUtils()->parseCredentialTypes({}); - QVERIFY(emptyResponse == validPubKeyCredParams); - - const auto publicKeyOptions = browserMessageBuilder()->getJsonObject(PublicKeyCredentialOptions.toUtf8()); - auto responseFromPublicKey = passkeyUtils()->parseCredentialTypes(publicKeyOptions["pubKeyCredParams"].toArray()); - QVERIFY(responseFromPublicKey == validPubKeyCredParams); -} - -void TestPasskeys::testIsAuthenticatorSelectionValid() -{ - QVERIFY(passkeyUtils()->isAuthenticatorSelectionValid({})); - QVERIFY(passkeyUtils()->isAuthenticatorSelectionValid(QJsonObject({{"authenticatorAttachment", "platform"}}))); - QVERIFY( - passkeyUtils()->isAuthenticatorSelectionValid(QJsonObject({{"authenticatorAttachment", "cross-platform"}}))); - QVERIFY(!passkeyUtils()->isAuthenticatorSelectionValid(QJsonObject({{"authenticatorAttachment", "something"}}))); -} - -void TestPasskeys::testIsResidentKeyRequired() -{ - QVERIFY(passkeyUtils()->isResidentKeyRequired(QJsonObject({{"residentKey", "required"}}))); - QVERIFY(passkeyUtils()->isResidentKeyRequired(QJsonObject({{"residentKey", "preferred"}}))); - QVERIFY(!passkeyUtils()->isResidentKeyRequired(QJsonObject({{"residentKey", "discouraged"}}))); - QVERIFY(passkeyUtils()->isResidentKeyRequired(QJsonObject({{"requireResidentKey", true}}))); -} - -void TestPasskeys::testIsUserVerificationRequired() -{ - QVERIFY(passkeyUtils()->isUserVerificationRequired(QJsonObject({{"userVerification", "required"}}))); - QVERIFY(passkeyUtils()->isUserVerificationRequired(QJsonObject({{"userVerification", "preferred"}}))); - QVERIFY(!passkeyUtils()->isUserVerificationRequired(QJsonObject({{"userVerification", "discouraged"}}))); -} - -void TestPasskeys::testAllowLocalhostWithPasskeys() -{ - QVERIFY(passkeyUtils()->isOriginAllowedWithLocalhost(false, "https://example.com")); - QVERIFY(!passkeyUtils()->isOriginAllowedWithLocalhost(false, "http://example.com")); - QVERIFY(passkeyUtils()->isOriginAllowedWithLocalhost(true, "https://example.com")); - QVERIFY(!passkeyUtils()->isOriginAllowedWithLocalhost(true, "http://example.com")); - QVERIFY(!passkeyUtils()->isOriginAllowedWithLocalhost(false, "http://localhost")); - QVERIFY(passkeyUtils()->isOriginAllowedWithLocalhost(true, "http://localhost")); - QVERIFY(!passkeyUtils()->isOriginAllowedWithLocalhost(true, "http://localhosting")); - QVERIFY(passkeyUtils()->isOriginAllowedWithLocalhost(true, "http://test.localhost")); - QVERIFY(!passkeyUtils()->isOriginAllowedWithLocalhost(false, "http://test.localhost")); - QVERIFY(!passkeyUtils()->isOriginAllowedWithLocalhost(true, "http://localhost.example.com")); -} diff --git a/tests/TestPasskeys.h b/tests/TestPasskeys.h deleted file mode 100644 index b1c8dbc4e..000000000 --- a/tests/TestPasskeys.h +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright (C) 2024 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_TESTPASSKEYS_H -#define KEEPASSXC_TESTPASSKEYS_H - -#include "browser/BrowserPasskeys.h" -#include -#include - -class TestPasskeys : public QObject -{ - Q_OBJECT - -private slots: - void initTestCase(); - void init(); - - void testBase64WithHexStrings(); - void testDecodeResponseData(); - - void testLoadingECPrivateKeyFromPem(); - void testLoadingRSAPrivateKeyFromPem(); - void testCreatingAttestationObjectWithEC(); - void testCreatingAttestationObjectWithRSA(); - void testRegister(); - void testGet(); - - void testExtensions(); - void testParseFlags(); - void testSetFlags(); - - void testEntry(); - void testIsDomain(); - void testRegistrableDomainSuffix(); - void testRpIdValidation(); - void testParseAttestation(); - void testParseCredentialTypes(); - void testIsAuthenticatorSelectionValid(); - void testIsResidentKeyRequired(); - void testIsUserVerificationRequired(); - void testAllowLocalhostWithPasskeys(); -}; -#endif // KEEPASSXC_TESTPASSKEYS_H diff --git a/tests/TestPassphraseGenerator.cpp b/tests/TestPassphraseGenerator.cpp index 7b8dd89a4..9b1ed8ada 100644 --- a/tests/TestPassphraseGenerator.cpp +++ b/tests/TestPassphraseGenerator.cpp @@ -16,7 +16,6 @@ */ #include "TestPassphraseGenerator.h" -#include "config-keepassx-tests.h" #include "core/PassphraseGenerator.h" #include "crypto/Crypto.h" @@ -34,7 +33,7 @@ void TestPassphraseGenerator::testWordCase() { PassphraseGenerator generator; generator.setWordSeparator(" "); - QVERIFY(generator.isWordListValid()); + QVERIFY(generator.isValid()); QString passphrase; passphrase = generator.generatePassphrase(); @@ -50,21 +49,6 @@ void TestPassphraseGenerator::testWordCase() generator.setWordCase(PassphraseGenerator::TITLECASE); passphrase = generator.generatePassphrase(); - QRegularExpression regex("^(?:[A-Z][a-z-]* )*[A-Z][a-z-]*$"); - QVERIFY2(regex.match(passphrase).hasMatch(), qPrintable(passphrase)); -} - -void TestPassphraseGenerator::testUniqueEntriesInWordlist() -{ - PassphraseGenerator generator; - // set the limit down, so we don't have to do a very large file - generator.m_minWordListSize = 4; - - // link to bad wordlist - QString path = QString(KEEPASSX_TEST_DATA_DIR).append("/wordlists/bad_wordlist_with_duplicate_entries.wordlist"); - - // setting will work, it creates the warning however, and isWordListValid will fail - generator.setWordList(path); - // so this fails - QVERIFY(!generator.isWordListValid()); + QRegularExpression regex("^([A-Z][a-z]* ?)+$"); + QVERIFY(regex.match(passphrase).hasMatch()); } diff --git a/tests/TestPassphraseGenerator.h b/tests/TestPassphraseGenerator.h index a4d86055a..ca0fd0664 100644 --- a/tests/TestPassphraseGenerator.h +++ b/tests/TestPassphraseGenerator.h @@ -27,7 +27,6 @@ class TestPassphraseGenerator : public QObject private slots: void initTestCase(); void testWordCase(); - void testUniqueEntriesInWordlist(); }; #endif // KEEPASSXC_TESTPASSPHRASEGENERATOR_H diff --git a/tests/TestSSHAgent.cpp b/tests/TestSSHAgent.cpp index 986def7b8..3acf3352a 100644 --- a/tests/TestSSHAgent.cpp +++ b/tests/TestSSHAgent.cpp @@ -20,7 +20,6 @@ #include "core/Config.h" #include "crypto/Crypto.h" #include "sshagent/KeeAgentSettings.h" -#include "sshagent/OpenSSHKeyGen.h" #include "sshagent/SSHAgent.h" #include @@ -30,21 +29,20 @@ QTEST_GUILESS_MAIN(TestSSHAgent) void TestSSHAgent::initTestCase() { QVERIFY(Crypto::init()); + Config::createTempFileInstance(); - // Create temporary config file - Config::createConfigFromFile(TemporaryFile::createTempConfigFile(), {}); + m_agentSocketFile.setAutoRemove(true); + QVERIFY(m_agentSocketFile.open()); - // default config must not enable agent - SSHAgent agent; - QVERIFY(!agent.isEnabled()); - - m_agentSocketFile.reset(new TemporaryFile(this)); - - m_agentSocketFileName = m_agentSocketFile->fileName(); + m_agentSocketFileName = m_agentSocketFile.fileName(); QVERIFY(!m_agentSocketFileName.isEmpty()); + // let ssh-agent re-create it as a socket + QVERIFY(m_agentSocketFile.remove()); + QStringList arguments; - arguments << "-D" << "-a" << m_agentSocketFileName; + arguments << "-D" + << "-a" << m_agentSocketFileName; QElapsedTimer timer; timer.start(); @@ -58,7 +56,7 @@ void TestSSHAgent::initTestCase() QSKIP("ssh-agent could not be started"); } - qDebug() << "ssh-agent started as pid" << m_agentProcess.processId(); + qDebug() << "ssh-agent started as pid" << m_agentProcess.pid(); // we need to wait for the agent to open the socket before going into real tests QFileInfo socketFileInfo(m_agentSocketFileName); @@ -87,18 +85,13 @@ void TestSSHAgent::initTestCase() QVERIFY(m_key.parsePKCS1PEM(keyData)); } -void TestSSHAgent::init() -{ - // Reset the config state - SSHAgent agent; - agent.setEnabled(false); - QString empty; - agent.setAuthSockOverride(empty); -} - void TestSSHAgent::testConfiguration() { SSHAgent agent; + + // default config must not enable agent + QVERIFY(!agent.isEnabled()); + agent.setEnabled(true); QVERIFY(agent.isEnabled()); @@ -231,71 +224,13 @@ void TestSSHAgent::testToOpenSSHKey() QVERIFY(!key.publicKey().isEmpty()); } -void TestSSHAgent::testKeyGenRSA() -{ - SSHAgent agent; - agent.setEnabled(true); - agent.setAuthSockOverride(m_agentSocketFileName); - - QVERIFY(agent.isAgentRunning()); - - OpenSSHKey key; - KeeAgentSettings settings; - bool keyInAgent; - - QVERIFY(OpenSSHKeyGen::generateRSA(key, 2048)); - - QVERIFY(agent.addIdentity(key, settings, m_uuid)); - QVERIFY(agent.checkIdentity(key, keyInAgent) && keyInAgent); - QVERIFY(agent.removeIdentity(key)); - QVERIFY(agent.checkIdentity(key, keyInAgent) && !keyInAgent); -} - -void TestSSHAgent::testKeyGenECDSA() -{ - SSHAgent agent; - agent.setEnabled(true); - agent.setAuthSockOverride(m_agentSocketFileName); - - QVERIFY(agent.isAgentRunning()); - - OpenSSHKey key; - KeeAgentSettings settings; - bool keyInAgent; - - QVERIFY(OpenSSHKeyGen::generateECDSA(key, 256)); - - QVERIFY(agent.addIdentity(key, settings, m_uuid)); - QVERIFY(agent.checkIdentity(key, keyInAgent) && keyInAgent); - QVERIFY(agent.removeIdentity(key)); - QVERIFY(agent.checkIdentity(key, keyInAgent) && !keyInAgent); -} - -void TestSSHAgent::testKeyGenEd25519() -{ - SSHAgent agent; - agent.setEnabled(true); - agent.setAuthSockOverride(m_agentSocketFileName); - - QVERIFY(agent.isAgentRunning()); - - OpenSSHKey key; - KeeAgentSettings settings; - bool keyInAgent; - - QVERIFY(OpenSSHKeyGen::generateEd25519(key)); - - QVERIFY(agent.addIdentity(key, settings, m_uuid)); - QVERIFY(agent.checkIdentity(key, keyInAgent) && keyInAgent); - QVERIFY(agent.removeIdentity(key)); - QVERIFY(agent.checkIdentity(key, keyInAgent) && !keyInAgent); -} - void TestSSHAgent::cleanupTestCase() { if (m_agentProcess.state() != QProcess::NotRunning) { - qDebug() << "Killing ssh-agent pid" << m_agentProcess.processId(); + qDebug() << "Killing ssh-agent pid" << m_agentProcess.pid(); m_agentProcess.terminate(); m_agentProcess.waitForFinished(); } + + m_agentSocketFile.remove(); } diff --git a/tests/TestSSHAgent.h b/tests/TestSSHAgent.h index db06fd806..12c115b23 100644 --- a/tests/TestSSHAgent.h +++ b/tests/TestSSHAgent.h @@ -19,8 +19,8 @@ #define TESTSSHAGENT_H #include "sshagent/OpenSSHKey.h" -#include "util/TemporaryFile.h" #include +#include #include class TestSSHAgent : public QObject @@ -29,20 +29,16 @@ class TestSSHAgent : public QObject private slots: void initTestCase(); - void init(); void testConfiguration(); void testIdentity(); void testRemoveOnClose(); void testLifetimeConstraint(); void testConfirmConstraint(); void testToOpenSSHKey(); - void testKeyGenRSA(); - void testKeyGenECDSA(); - void testKeyGenEd25519(); void cleanupTestCase(); private: - QScopedPointer m_agentSocketFile; + QTemporaryFile m_agentSocketFile; QString m_agentSocketFileName; QProcess m_agentProcess; OpenSSHKey m_key; diff --git a/tests/TestSharing.cpp b/tests/TestSharing.cpp index 0b5414ea8..14a72b142 100644 --- a/tests/TestSharing.cpp +++ b/tests/TestSharing.cpp @@ -117,9 +117,12 @@ void TestSharing::testReferenceSerialization_data() QTest::addColumn("path"); QTest::addColumn("uuid"); QTest::addColumn("type"); - QTest::newRow("1") << "Password" << "/some/path" << QUuid::createUuid() << int(KeeShareSettings::Inactive); - QTest::newRow("2") << "" << "" << QUuid() << int(KeeShareSettings::SynchronizeWith); - QTest::newRow("3") << "" << "/some/path" << QUuid() << int(KeeShareSettings::ExportTo); + QTest::newRow("1") << "Password" + << "/some/path" << QUuid::createUuid() << int(KeeShareSettings::Inactive); + QTest::newRow("2") << "" + << "" << QUuid() << int(KeeShareSettings::SynchronizeWith); + QTest::newRow("3") << "" + << "/some/path" << QUuid() << int(KeeShareSettings::ExportTo); } void TestSharing::testSettingsSerialization() diff --git a/tests/TestTools.cpp b/tests/TestTools.cpp index a373e1523..f1cba482b 100644 --- a/tests/TestTools.cpp +++ b/tests/TestTools.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2024 KeePassXC Team + * Copyright (C) 2021 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,9 +18,7 @@ #include "TestTools.h" #include "core/Clock.h" -#include "core/Tools.h" -#include #include #include #include @@ -40,7 +38,7 @@ void TestTools::testHumanReadableFileSize() constexpr auto kibibyte = 1024u; using namespace Tools; - QCOMPARE(QString("1 B"), humanReadableFileSize(1)); + QCOMPARE(createDecimal("1", "00", "B"), humanReadableFileSize(1)); QCOMPARE(createDecimal("1", "00", "KiB"), humanReadableFileSize(kibibyte)); QCOMPARE(createDecimal("1", "00", "MiB"), humanReadableFileSize(kibibyte * kibibyte)); QCOMPARE(createDecimal("1", "00", "GiB"), humanReadableFileSize(kibibyte * kibibyte * kibibyte)); @@ -70,14 +68,6 @@ void TestTools::testIsBase64() QVERIFY(!Tools::isBase64(QByteArray("123"))); } -void TestTools::testIsAsciiString() -{ - QVERIFY(Tools::isAsciiString("abcd9876DEFGhijkMNO")); - QVERIFY(Tools::isAsciiString("-!&5a?`~")); - QVERIFY(!Tools::isAsciiString("Štest")); - QVERIFY(!Tools::isAsciiString("Ãß")); -} - void TestTools::testEnvSubstitute() { QProcessEnvironment environment; @@ -152,22 +142,18 @@ void TestTools::testBackupFilePatternSubstitution_data() QTest::newRow("Default time pattern (empty formatter)") << "{TIME:}" << DEFAULT_DB_FILE_PATH << DEFAULT_FORMATTED_TIME; QTest::newRow("Custom time pattern") << "{TIME:dd-ss}" << DEFAULT_DB_FILE_PATH << NOW.toString("dd-ss"); - QTest::newRow("Time pattern twice") << "{TIME:yy} {TIME}" << DEFAULT_DB_FILE_PATH - << NOW.toString("yy") + QStringLiteral(" ") + DEFAULT_FORMATTED_TIME; - QTest::newRow("Complex custom time pattern") - << "./{TIME:yy}/{DB_FILENAME}_{TIME:yyyyMMdd_HHmmss}.old.kdbx" << DEFAULT_DB_FILE_PATH - << QStringLiteral("./") + NOW.toString("yy") + QStringLiteral("/") + DEFAULT_DB_FILE_NAME + QStringLiteral("_") - + NOW.toString("yyyyMMdd_HHmmss") + QStringLiteral(".old.kdbx"); QTest::newRow("Invalid custom time pattern") << "{TIME:dd/-ss}" << DEFAULT_DB_FILE_PATH << NOW.toString("dd/-ss"); QTest::newRow("Recursive substitution") << "{TIME:'{TIME}'}" << DEFAULT_DB_FILE_PATH << DEFAULT_FORMATTED_TIME; QTest::newRow("{DB_FILENAME} substitution") << "some {DB_FILENAME} thing" << DEFAULT_DB_FILE_PATH << QStringLiteral("some ") + DEFAULT_DB_FILE_NAME + QStringLiteral(" thing"); - QTest::newRow("{DB_FILENAME} substitution with multiple extensions") - << "some {DB_FILENAME} thing" << "/tmp/KeePassXC.kdbx.ext" << "some KeePassXC.kdbx thing"; + QTest::newRow("{DB_FILENAME} substitution with multiple extensions") << "some {DB_FILENAME} thing" + << "/tmp/KeePassXC.kdbx.ext" + << "some KeePassXC.kdbx thing"; // Not relevant right now, added test anyway - QTest::newRow("There should be no substitution loops") - << "{DB_FILENAME}" << "{TIME:'{DB_FILENAME}'}.ext" << "{TIME:'{DB_FILENAME}'}"; + QTest::newRow("There should be no substitution loops") << "{DB_FILENAME}" + << "{TIME:'{DB_FILENAME}'}.ext" + << "{DB_FILENAME}"; } void TestTools::testBackupFilePatternSubstitution() @@ -193,8 +179,8 @@ void TestTools::testEscapeRegex_data() } QTest::newRow("Regular characters should not be escaped") << all_regular_characters << all_regular_characters; - QTest::newRow("Special characters should be escaped") - << R"(.^$*+-?()[]{}|\)" << R"(\.\^\$\*\+\-\?\(\)\[\]\{\}\|\\)"; + QTest::newRow("Special characters should be escaped") << R"(.^$*+-?()[]{}|\)" + << R"(\.\^\$\*\+\-\?\(\)\[\]\{\}\|\\)"; QTest::newRow("Null character") << QString::fromLatin1("ab\0c", 4) << "ab\\0c"; } @@ -253,178 +239,3 @@ void TestTools::testConvertToRegex_data() << input << static_cast(Tools::RegexConvertOpts::WILDCARD_UNLIMITED_MATCH) << QString(R"(te\|st.*t\?\[5\]\^\(test\)\;\'\,\.)"); } - -void TestTools::testArrayContainsValues() -{ - const auto values = QStringList() << "first" << "second" << "third"; - - // One missing - const auto result1 = - Tools::getMissingValuesFromList(values, QStringList() << "first" << "second" << "none"); - QCOMPARE(result1.length(), 1); - QCOMPARE(result1.first(), QString("none")); - - // All found - const auto result2 = - Tools::getMissingValuesFromList(values, QStringList() << "first" << "second" << "third"); - QCOMPARE(result2.length(), 0); - - // None are found - const auto numberValues = QList({1, 2, 3, 4, 5}); - const auto result3 = Tools::getMissingValuesFromList(numberValues, QList({6, 7, 8})); - QCOMPARE(result3.length(), 3); -} - -void TestTools::testMimeTypes() -{ - const QStringList TextMimeTypes = { - "text/plain", // Plain text - "text/css", // CSS stylesheets - "text/javascript", // JavaScript files - "text/xml", // XML documents - "text/rtf", // Rich Text Format - "text/vcard", // vCard files - "text/tab-separated-values", // Tab-separated values - "application/json", // JSON data - "application/xml", // XML data - "application/soap+xml", // SOAP messages - "application/x-yaml", // YAML data - "application/protobuf", // Protocol Buffers - }; - - const QStringList ImageMimeTypes = { - "image/jpeg", // JPEG images - "image/png", // PNG images - "image/gif", // GIF images - "image/bmp", // BMP images - "image/webp", // WEBP images - "image/svg+xml" // SVG images - }; - - const QStringList UnknownMimeTypes = { - "audio/mpeg", // MPEG audio files - "video/mp4", // MP4 video files - "application/pdf", // PDF documents - "application/zip", // ZIP archives - "application/x-tar", // TAR archives - "application/x-rar-compressed", // RAR archives - "application/x-7z-compressed", // 7z archives - "application/x-shockwave-flash", // Adobe Flash files - "application/vnd.ms-excel", // Microsoft Excel files - "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", // Microsoft Excel (OpenXML) files - "application/vnd.ms-powerpoint", // Microsoft PowerPoint files - "application/vnd.openxmlformats-officedocument.presentationml.presentation", // Microsoft PowerPoint (OpenXML) - // files - "application/msword", // Microsoft Word files - "application/vnd.openxmlformats-officedocument.wordprocessingml.document", // Microsoft Word (OpenXML) files - "application/vnd.oasis.opendocument.text", // OpenDocument Text - "application/vnd.oasis.opendocument.spreadsheet", // OpenDocument Spreadsheet - "application/vnd.oasis.opendocument.presentation", // OpenDocument Presentation - "application/x-httpd-php", // PHP files - "application/x-perl", // Perl scripts - "application/x-python", // Python scripts - "application/x-ruby", // Ruby scripts - "application/x-shellscript", // Shell scripts - }; - - QCOMPARE(Tools::toMimeType("text/html"), Tools::MimeType::Html); - QCOMPARE(Tools::toMimeType("text/markdown"), Tools::MimeType::Markdown); - - for (const auto& mime : TextMimeTypes) { - QCOMPARE(Tools::toMimeType(mime), Tools::MimeType::PlainText); - } - - for (const auto& mime : ImageMimeTypes) { - QCOMPARE(Tools::toMimeType(mime), Tools::MimeType::Image); - } - - for (const auto& mime : UnknownMimeTypes) { - QCOMPARE(Tools::toMimeType(mime), Tools::MimeType::Unknown); - } -} - -void TestTools::testGetMimeType() -{ - const QStringList Text = {"0x42", ""}; - - for (const auto& text : Text) { - QCOMPARE(Tools::getMimeType(text.toUtf8()), Tools::MimeType::PlainText); - } - - const QByteArrayList ImageHeaders = { - // JPEG: starts with 0xFF 0xD8 0xFF (Start of Image marker) - QByteArray::fromHex("FFD8FF"), - // PNG: starts with 0x89 0x50 0x4E 0x47 0D 0A 1A 0A (PNG signature) - QByteArray::fromHex("89504E470D0A1A0A"), - // GIF87a: original GIF format (1987 standard) - QByteArray("GIF87a"), - // GIF89a: extended GIF format (1989, supports animation, transparency, etc.) - QByteArray("GIF89a"), - }; - - for (const auto& image : ImageHeaders) { - QCOMPARE(Tools::getMimeType(image), Tools::MimeType::Image); - } - - const QByteArrayList UnknownHeaders = { - // MP3: typically starts with ID3 tag (ID3v2) - QByteArray("ID3"), - // MP4: usually starts with a 'ftyp' box (ISO base media file format) - // Common major brands: isom, mp42, avc1, etc. - QByteArray::fromHex("000000186674797069736F6D"), // size + 'ftyp' + 'isom' - // PDF: starts with "%PDF-" followed by version (e.g., %PDF-1.7) - QByteArray("%PDF-"), - }; - - for (const auto& unknown : UnknownHeaders) { - QCOMPARE(Tools::getMimeType(unknown), Tools::MimeType::Unknown); - } -} - -void TestTools::testGetMimeTypeByFileInfo() -{ - const QStringList Text = {"test.txt", "test.csv", "test.xml", "test.json"}; - - for (const auto& text : Text) { - QCOMPARE(Tools::getMimeType(QFileInfo(text)), Tools::MimeType::PlainText); - } - - const QStringList Images = {"test.jpg", "test.png", "test.bmp", "test.svg"}; - - for (const auto& image : Images) { - QCOMPARE(Tools::getMimeType(QFileInfo(image)), Tools::MimeType::Image); - } - - const QStringList Htmls = {"test.html", "test.htm"}; - - for (const auto& html : Htmls) { - QCOMPARE(Tools::getMimeType(QFileInfo(html)), Tools::MimeType::Html); - } - - const QStringList Markdowns = {"test.md", "test.markdown"}; - - for (const auto& makdown : Markdowns) { - QCOMPARE(Tools::getMimeType(QFileInfo(makdown)), Tools::MimeType::Markdown); - } - - const QStringList UnknownHeaders = {"test.doc", "test.pdf", "test.docx"}; - - for (const auto& unknown : UnknownHeaders) { - QCOMPARE(Tools::getMimeType(unknown), Tools::MimeType::Unknown); - } -} - -void TestTools::testIsTextMimeType() -{ - const auto Text = {Tools::MimeType::PlainText, Tools::MimeType::Html, Tools::MimeType::Markdown}; - - for (const auto& text : Text) { - QVERIFY(Tools::isTextMimeType(text)); - } - - const auto NoText = {Tools::MimeType::Image, Tools::MimeType::Unknown}; - - for (const auto& noText : NoText) { - QVERIFY(!Tools::isTextMimeType(noText)); - } -} diff --git a/tests/TestTools.h b/tests/TestTools.h index 728849bd3..2e8cbb8bb 100644 --- a/tests/TestTools.h +++ b/tests/TestTools.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2024 KeePassXC Team + * Copyright (C) 2021 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,7 +18,7 @@ #ifndef KEEPASSX_TESTTOOLS_H #define KEEPASSX_TESTTOOLS_H -#include +#include "core/Tools.h" class TestTools : public QObject { @@ -27,7 +27,6 @@ private slots: void testHumanReadableFileSize(); void testIsHex(); void testIsBase64(); - void testIsAsciiString(); void testEnvSubstitute(); void testValidUuid(); void testBackupFilePatternSubstitution_data(); @@ -36,11 +35,6 @@ private slots: void testEscapeRegex_data(); void testConvertToRegex(); void testConvertToRegex_data(); - void testArrayContainsValues(); - void testMimeTypes(); - void testGetMimeType(); - void testGetMimeTypeByFileInfo(); - void testIsTextMimeType(); }; #endif // KEEPASSX_TESTTOOLS_H diff --git a/tests/TestTotp.cpp b/tests/TestTotp.cpp index 13aaf9a2d..bb3b55dbd 100644 --- a/tests/TestTotp.cpp +++ b/tests/TestTotp.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2017 Weslly Honorato + * Copyright (C) 2017 Weslly Honorato <weslly@protonmail.com> * Copyright (C) 2017 KeePassXC Team * * This program is free software: you can redistribute it and/or modify @@ -19,8 +19,8 @@ #include "TestTotp.h" #include "core/Entry.h" -#include "core/Totp.h" #include "crypto/Crypto.h" +#include "totp/totp.h" #include @@ -40,11 +40,11 @@ void TestTotp::testParseSecret() auto settings = Totp::parseSettings(secret); QVERIFY(!settings.isNull()); QCOMPARE(settings->key, QString("HXDMVJECJJWSRB3HWIZR4IFUGFTMXBOZ")); + QCOMPARE(settings->custom, false); QCOMPARE(settings->format, Totp::StorageFormat::OTPURL); QCOMPARE(settings->digits, 6u); QCOMPARE(settings->step, 30u); QCOMPARE(settings->algorithm, Totp::Algorithm::Sha1); - QCOMPARE(Totp::hasCustomSettings(settings), false); // OTP URL with non-default hash type secret = "otpauth://totp/" @@ -53,11 +53,11 @@ void TestTotp::testParseSecret() settings = Totp::parseSettings(secret); QVERIFY(!settings.isNull()); QCOMPARE(settings->key, QString("HXDMVJECJJWSRB3HWIZR4IFUGFTMXBOZ")); + QCOMPARE(settings->custom, true); QCOMPARE(settings->format, Totp::StorageFormat::OTPURL); QCOMPARE(settings->digits, 6u); QCOMPARE(settings->step, 30u); QCOMPARE(settings->algorithm, Totp::Algorithm::Sha512); - QCOMPARE(Totp::hasCustomSettings(settings), true); // Max TOTP step of 24-hours secret.replace("period=30", "period=90000"); @@ -70,41 +70,33 @@ void TestTotp::testParseSecret() settings = Totp::parseSettings(secret); QVERIFY(!settings.isNull()); QCOMPARE(settings->key, QString("HXDMVJECJJWSRBY=")); + QCOMPARE(settings->custom, true); QCOMPARE(settings->format, Totp::StorageFormat::KEEOTP); QCOMPARE(settings->digits, 8u); QCOMPARE(settings->step, 25u); QCOMPARE(settings->algorithm, Totp::Algorithm::Sha256); - QCOMPARE(Totp::hasCustomSettings(settings), true); // Semi-colon delineated "TOTP Settings" secret = "gezdgnbvgy3tqojqgezdgnbvgy3tqojq"; settings = Totp::parseSettings("30;8", secret); QVERIFY(!settings.isNull()); QCOMPARE(settings->key, QString("gezdgnbvgy3tqojqgezdgnbvgy3tqojq")); + QCOMPARE(settings->custom, true); QCOMPARE(settings->format, Totp::StorageFormat::LEGACY); QCOMPARE(settings->digits, 8u); QCOMPARE(settings->step, 30u); QCOMPARE(settings->algorithm, Totp::Algorithm::Sha1); - QCOMPARE(Totp::hasCustomSettings(settings), true); // Bare secret (no "TOTP Settings" attribute) secret = "gezdgnbvgy3tqojqgezdgnbvgy3tqojq"; settings = Totp::parseSettings("", secret); QVERIFY(!settings.isNull()); QCOMPARE(settings->key, QString("gezdgnbvgy3tqojqgezdgnbvgy3tqojq")); + QCOMPARE(settings->custom, false); QCOMPARE(settings->format, Totp::StorageFormat::LEGACY); QCOMPARE(settings->digits, 6u); QCOMPARE(settings->step, 30u); QCOMPARE(settings->algorithm, Totp::Algorithm::Sha1); - QCOMPARE(Totp::hasCustomSettings(settings), false); - - // Blank settings (expected failure) - settings = Totp::parseSettings("", ""); - QVERIFY(settings.isNull()); - - // TOTP Settings with blank secret (expected failure) - settings = Totp::parseSettings("30;8", ""); - QVERIFY(settings.isNull()); } void TestTotp::testTotpCode() @@ -115,35 +107,28 @@ void TestTotp::testTotpCode() // Test 6 digit TOTP (default) quint64 time = 1234567890; - QCOMPARE(Totp::generateTotp(settings, nullptr, time), QString("005924")); + QCOMPARE(Totp::generateTotp(settings, time), QString("005924")); time = 1111111109; - QCOMPARE(Totp::generateTotp(settings, nullptr, time), QString("081804")); + QCOMPARE(Totp::generateTotp(settings, time), QString("081804")); // Test 8 digit TOTP (custom) settings->digits = 8; + settings->custom = true; time = 1111111111; - QCOMPARE(Totp::generateTotp(settings, nullptr, time), QString("14050471")); + QCOMPARE(Totp::generateTotp(settings, time), QString("14050471")); time = 2000000000; - QCOMPARE(Totp::generateTotp(settings, nullptr, time), QString("69279037")); + QCOMPARE(Totp::generateTotp(settings, time), QString("69279037")); } void TestTotp::testSteamTotp() { - // Legacy parsing - auto settings = Totp::parseSettings("30;S", "63BEDWCQZKTQWPESARIERL5DTTQFCJTK"); - QCOMPARE(settings->key, QString("63BEDWCQZKTQWPESARIERL5DTTQFCJTK")); - QCOMPARE(settings->encoder.shortName, Totp::STEAM_SHORTNAME); - QCOMPARE(settings->format, Totp::StorageFormat::LEGACY); - QCOMPARE(settings->digits, Totp::STEAM_DIGITS); - QCOMPARE(settings->step, 30u); - // OTP URL Parsing QString secret = "otpauth://totp/" "test:test@example.com?secret=63BEDWCQZKTQWPESARIERL5DTTQFCJTK&issuer=Valve&algorithm=" "SHA1&digits=5&period=30&encoder=steam"; - settings = Totp::parseSettings(secret); + auto settings = Totp::parseSettings(secret); QCOMPARE(settings->key, QString("63BEDWCQZKTQWPESARIERL5DTTQFCJTK")); QCOMPARE(settings->encoder.shortName, Totp::STEAM_SHORTNAME); @@ -155,9 +140,9 @@ void TestTotp::testSteamTotp() // Steam mobile app with a throw-away steam account. The above secret was extracted // from the Steam app's data for use in testing here. quint64 time = 1511200518; - QCOMPARE(Totp::generateTotp(settings, nullptr, time), QString("FR8RV")); + QCOMPARE(Totp::generateTotp(settings, time), QString("FR8RV")); time = 1511200714; - QCOMPARE(Totp::generateTotp(settings, nullptr, time), QString("9P3VP")); + QCOMPARE(Totp::generateTotp(settings, time), QString("9P3VP")); } void TestTotp::testEntryHistory() @@ -179,44 +164,4 @@ void TestTotp::testEntryHistory() entry.setTotp(settings); QCOMPARE(entry.historyItems().size(), 2); QCOMPARE(entry.totpSettings()->key, QString("foo")); - // Nullptr Settings (expected reset of TOTP) - entry.setTotp(nullptr); - QVERIFY(!entry.hasTotp()); - QCOMPARE(entry.historyItems().size(), 3); -} - -void TestTotp::testKeePass2() -{ - Entry entry; - auto attr = entry.attributes(); - - // Default settings - attr->set("TimeOtp-Secret-Base32", "GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ"); - - auto settings = entry.totpSettings(); - QVERIFY(settings); - QCOMPARE(settings->key, QString("GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ")); - QCOMPARE(settings->algorithm, Totp::Algorithm::Sha1); - QCOMPARE(settings->digits, 6u); - QCOMPARE(settings->step, 30u); - QCOMPARE(Totp::hasCustomSettings(settings), false); - - // Custom settings - attr->set("TimeOtp-Algorithm", "HMAC-SHA-256"); - attr->set("TimeOtp-Length", "8"); - - settings = entry.totpSettings(); - QVERIFY(settings); - QCOMPARE(settings->key, QString("GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ")); - QCOMPARE(settings->algorithm, Totp::Algorithm::Sha256); - QCOMPARE(settings->digits, 8u); - QCOMPARE(settings->step, 30u); - QCOMPARE(Totp::hasCustomSettings(settings), true); - - // Base64 and other encodings are not supported - attr->remove("TimeOtp-Secret-Base32"); - attr->set("TimeOtp-Secret-Base64", "GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ"); - - settings = entry.totpSettings(); - QVERIFY(!settings); } diff --git a/tests/TestTotp.h b/tests/TestTotp.h index f2e696734..92fa7a0e1 100644 --- a/tests/TestTotp.h +++ b/tests/TestTotp.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2017 Weslly Honorato + * Copyright (C) 2017 Weslly Honorato <weslly@protonmail.com> * Copyright (C) 2017 KeePassXC Team * * This program is free software: you can redistribute it and/or modify @@ -31,7 +31,6 @@ private slots: void testTotpCode(); void testSteamTotp(); void testEntryHistory(); - void testKeePass2(); }; #endif // KEEPASSX_TESTTOTP_H diff --git a/tests/TestUpdateCheck.cpp b/tests/TestUpdateCheck.cpp index f89757ea6..df2643fad 100644 --- a/tests/TestUpdateCheck.cpp +++ b/tests/TestUpdateCheck.cpp @@ -17,7 +17,7 @@ #include "TestUpdateCheck.h" #include "crypto/Crypto.h" -#include "networking/UpdateChecker.h" +#include "updatecheck/UpdateChecker.h" #include diff --git a/tests/TestUrlTools.cpp b/tests/TestUrlTools.cpp deleted file mode 100644 index ae059d228..000000000 --- a/tests/TestUrlTools.cpp +++ /dev/null @@ -1,177 +0,0 @@ -/* - * Copyright (C) 2025 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 "TestUrlTools.h" -#include - -QTEST_GUILESS_MAIN(TestUrlTools) - -void TestUrlTools::initTestCase() -{ - m_urlTools = urlTools(); -} - -void TestUrlTools::init() -{ -} - -void TestUrlTools::testTopLevelDomain() -{ - // Create list of URLs and expected TLD responses - QList> tldUrls{ - {QString("https://another.example.co.uk"), QString("co.uk")}, - {QString("https://www.example.com"), QString("com")}, - {QString("https://example.com"), QString("com")}, - {QString("https://github.com"), QString("com")}, - {QString("http://test.net"), QString("net")}, - {QString("http://so.many.subdomains.co.jp"), QString("co.jp")}, - {QString("https://192.168.0.1"), QString("192.168.0.1")}, - {QString("https://192.168.0.1:8000"), QString("192.168.0.1")}, - {QString("https://www.nic.ar"), QString("ar")}, - {QString("https://no.no.no"), QString("no")}, - {QString("https://jap.an.ide.kyoto.jp"), QString("ide.kyoto.jp")}, // ide.kyoto.jp is a TLD - {QString("ar"), QString("ar")}, - }; - - for (const auto& u : tldUrls) { - QCOMPARE(urlTools()->getTopLevelDomainFromUrl(u.first), u.second); - } - - // Create list of URLs and expected base URL responses - QList> baseUrls{ - {QString("https://another.example.co.uk"), QString("example.co.uk")}, - {QString("https://www.example.com"), QString("example.com")}, - {QString("http://test.net"), QString("test.net")}, - {QString("http://so.many.subdomains.co.jp"), QString("subdomains.co.jp")}, - {QString("https://192.168.0.1"), QString("192.168.0.1")}, - {QString("https://192.168.0.1:8000"), QString("192.168.0.1")}, - {QString("https://www.nic.ar"), QString("nic.ar")}, - {QString("https://www.arpa"), QString("www.arpa")}, - {QString("https://jap.an.ide.kyoto.jp"), QString("an.ide.kyoto.jp")}, // ide.kyoto.jp is a TLD - {QString("https://kobe.jp"), QString("kobe.jp")}, - }; - - for (const auto& u : baseUrls) { - QCOMPARE(urlTools()->getBaseDomainFromUrl(u.first), u.second); - } -} - -void TestUrlTools::testIsIpAddress() -{ - auto host1 = "example.com"; // Not valid - auto host2 = "192.168.0.1"; - auto host3 = "278.21.2.0"; // Not valid - auto host4 = "2001:0db8:85a3:0000:0000:8a2e:0370:7334"; - auto host5 = "2001:db8:0:1:1:1:1:1"; - auto host6 = "fe80::1ff:fe23:4567:890a"; - auto host7 = "2001:20::1"; - auto host8 = "2001:0db8:85y3:0000:0000:8a2e:0370:7334"; // Not valid - auto host9 = "[::]"; - auto host10 = "::"; - auto host11 = "[2001:20::1]"; - - QVERIFY(!urlTools()->isIpAddress(host1)); - QVERIFY(urlTools()->isIpAddress(host2)); - QVERIFY(!urlTools()->isIpAddress(host3)); - QVERIFY(urlTools()->isIpAddress(host4)); - QVERIFY(urlTools()->isIpAddress(host5)); - QVERIFY(urlTools()->isIpAddress(host6)); - QVERIFY(urlTools()->isIpAddress(host7)); - QVERIFY(!urlTools()->isIpAddress(host8)); - QVERIFY(urlTools()->isIpAddress(host9)); - QVERIFY(urlTools()->isIpAddress(host10)); - QVERIFY(urlTools()->isIpAddress(host11)); -} - -void TestUrlTools::testIsUrlIdentical() -{ - QVERIFY(urlTools()->isUrlIdentical("https://example.com", "https://example.com")); - QVERIFY(urlTools()->isUrlIdentical("https://example.com", " https://example.com ")); - QVERIFY(!urlTools()->isUrlIdentical("https://example.com", "https://example2.com")); - QVERIFY(!urlTools()->isUrlIdentical("https://example.com/", "https://example.com/#login")); - QVERIFY(urlTools()->isUrlIdentical("https://example.com", "https://example.com/")); - QVERIFY(urlTools()->isUrlIdentical("https://example.com/", "https://example.com")); - QVERIFY(urlTools()->isUrlIdentical("https://example.com/ ", " https://example.com")); - QVERIFY(!urlTools()->isUrlIdentical("https://example.com/", " example.com")); - QVERIFY(urlTools()->isUrlIdentical("https://example.com/path/to/nowhere", "https://example.com/path/to/nowhere/")); - QVERIFY(!urlTools()->isUrlIdentical("https://example.com/", "://example.com/")); - QVERIFY(urlTools()->isUrlIdentical("ftp://127.0.0.1/", "ftp://127.0.0.1")); -} - -void TestUrlTools::testIsUrlValid() -{ - QHash urls; - urls["https://github.com/login"] = true; - urls["https:///github.com/"] = false; - urls["http://github.com/**//*"] = false; - urls["http://*.github.com/login"] = false; - urls["//github.com"] = true; - urls["github.com/{}<>"] = false; - urls["http:/example.com"] = false; - urls["http:/example.com."] = false; - urls["cmd://C:/Toolchains/msys2/usr/bin/mintty \"ssh jon@192.168.0.1:22\""] = true; - urls["file:///Users/testUser/Code/test.html"] = true; - urls["{REF:A@I:46C9B1FFBD4ABC4BBB260C6190BAD20C} "] = true; - - QHashIterator i(urls); - while (i.hasNext()) { - i.next(); - QCOMPARE(urlTools()->isUrlValid(i.key()), i.value()); - } -} - -void TestUrlTools::testIsUrlValidWithLooseComparison() -{ - QHash urls; - urls[""] = true; - urls["\"https://github.com/login\""] = true; - urls["https://*.github.com/"] = true; - urls["*.github.com"] = true; - urls["https://*.com"] = false; - urls["https://*.computer.com"] = true; // TLD in domain (com) should not affect - urls["\"\""] = false; - urls["\"*.example.com\""] = false; - urls["http://*"] = false; - urls["*"] = false; - urls["****"] = false; - urls["*.co.jp"] = false; - urls["*.com"] = false; - urls["*.computer.com"] = true; - urls["*.computer.com/*com"] = true; // TLD in path should not affect this - urls["*com"] = false; - urls["*.com/"] = false; - urls["*.com/*"] = false; - urls["**.com/**"] = false; - urls["*.*"] = false; - urls["https://example.*"] = false; - urls["https://*.example.*"] = false; - urls["https://example.c*"] = false; - urls["https://myowndomain:8000"] = true; - - QHashIterator i(urls); - while (i.hasNext()) { - i.next(); - QCOMPARE(urlTools()->isUrlValid(i.key(), true), i.value()); - } -} - -void TestUrlTools::testDomainHasIllegalCharacters() -{ - QVERIFY(!urlTools()->domainHasIllegalCharacters("example.com")); - QVERIFY(urlTools()->domainHasIllegalCharacters("domain has spaces.com")); - QVERIFY(urlTools()->domainHasIllegalCharacters("example#|.com")); -} diff --git a/tests/TestUrlTools.h b/tests/TestUrlTools.h deleted file mode 100644 index c2ba770b8..000000000 --- a/tests/TestUrlTools.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (C) 2025 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_TESTURLTOOLS_H -#define KEEPASSXC_TESTURLTOOLS_H - -#include "gui/UrlTools.h" -#include -#include - -class TestUrlTools : public QObject -{ - Q_OBJECT - -private slots: - void initTestCase(); - void init(); - - void testTopLevelDomain(); - void testIsIpAddress(); - void testIsUrlIdentical(); - void testIsUrlValid(); - void testIsUrlValidWithLooseComparison(); - void testDomainHasIllegalCharacters(); - -private: - QPointer m_urlTools; -}; -#endif // KEEPASSXC_TESTURLTOOLS_H diff --git a/tests/TestYkChallengeResponseKey.cpp b/tests/TestYkChallengeResponseKey.cpp index 02a0b5bea..341c90715 100644 --- a/tests/TestYkChallengeResponseKey.cpp +++ b/tests/TestYkChallengeResponseKey.cpp @@ -24,7 +24,6 @@ #include "keys/ChallengeResponseKey.h" #include -#include #include #include @@ -45,15 +44,11 @@ void TestYubiKeyChallengeResponse::testDetectDevices() YubiKey::instance()->findValidKeys(); // Look at the information retrieved from the key(s) - const auto foundKeys = YubiKey::instance()->foundKeys(); - QRegularExpression exp{"\\w+\\s+\\[\\d+\\]\\s+-\\s+Slot\\s+\\d"}; - - for (auto i = foundKeys.cbegin(); i != foundKeys.cend(); ++i) { - const auto& displayName = i.value(); - auto match = exp.match(displayName); - QVERIFY(match.hasMatch()); - QVERIFY(displayName.contains(QString::number(i.key().first))); - QVERIFY(displayName.contains(QString::number(i.key().second))); + for (auto key : YubiKey::instance()->foundKeys()) { + auto displayName = YubiKey::instance()->getDisplayName(key); + QVERIFY(displayName.contains("Challenge-Response - Slot") || displayName.contains("Configured Slot -")); + QVERIFY(displayName.contains(QString::number(key.first))); + QVERIFY(displayName.contains(QString::number(key.second))); } } @@ -64,7 +59,7 @@ void TestYubiKeyChallengeResponse::testDetectDevices() */ void TestYubiKeyChallengeResponse::testKeyChallenge() { - auto keys = YubiKey::instance()->foundKeys().keys(); + auto keys = YubiKey::instance()->foundKeys(); if (keys.isEmpty()) { QSKIP("No YubiKey devices were detected."); } diff --git a/tests/data/1PasswordExport.1pux b/tests/data/1PasswordExport.1pux deleted file mode 100644 index 12cfcb6c6..000000000 Binary files a/tests/data/1PasswordExport.1pux and /dev/null differ diff --git a/tests/data/SyncDatabase.kdbx b/tests/data/SyncDatabase.kdbx deleted file mode 100644 index 1a8ad9375..000000000 Binary files a/tests/data/SyncDatabase.kdbx and /dev/null differ diff --git a/tests/data/SyncDatabaseDifferentPassword.kdbx b/tests/data/SyncDatabaseDifferentPassword.kdbx deleted file mode 100644 index 372ead78c..000000000 Binary files a/tests/data/SyncDatabaseDifferentPassword.kdbx and /dev/null differ diff --git a/tests/data/bitwarden_encrypted_argon2id_export.json b/tests/data/bitwarden_encrypted_argon2id_export.json deleted file mode 100644 index 67dea8dce..000000000 --- a/tests/data/bitwarden_encrypted_argon2id_export.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "encrypted": true, - "passwordProtected": true, - "salt": "qQAdNzVGDjmIWIz3CLkMOg==", - "kdfType": 1, - "kdfIterations": 3, - "kdfMemory": 64, - "kdfParallelism": 4, - "encKeyValidation_DO_NOT_EDIT": "2.XohQSvVARSkNaL2eQ5cqSg==|EMUESMPFpYH3F7yww2SSfFPLTcerACPz3G29Q3LoQ2iJw33nutDg6lpDhCJ9bKXe|Qxf01Q7YB5kv4lmW58XOOuOWrPfUqocWKfIzRBDREWA=", - "data": "2.eQO+T8wrtxVlTPgQfZtWzg==|PHPF2TwVT4shA+F2LGd+Tz22LFpv0QmGW3PQUdeGxS0mdy5pIT/BL7bMw5+N/njOq/Y0oFru+xNklfVrAUxb4Bl4dgH7XDmW4iFMlcum7/qOThf7hHI2lhyTIzBBlma/dcADMjJcp2R4SQ3gVsZ2FrX5xgZgKfLgE1hL2kiwYrFOJ/mXUKXSCjgyHC4eSNdDOle9OzbcXiq4MaJHzdEAjEKaVqO5KFBDsZ2xCPOe/47wDJ5sxZp2I8/1zaZ56x4bYBp11p5TXDpQ46pLXxElsm3sxaxEzziZum7Boj9f1b/7TpRRzpZuP80OgjeW9CAZJ6UqR7gdtb7Bn00R+GlUyAFzHD9y6LkaF9HGBLlq0kz/lj6OkgePerXO/rJM2kuCGd/YZ6hQvXk75EHpZ3s/5/no1eUuMyhN/cH0SNtFlEPcsWL6wXzkKTeSlzVsq+fzKmlv9oprDjGwVuj0EgIyKQcmMavmE7aob5Ybz+ufkbtMfEVKAWVGo1ljvqCJoMXOehDUnub+p60THafAzlGR/G5/QWm+M1QRnI0pLJL/4aZIj3bk+oBRmfpDC5qdsXkyqmhEzkBwVgD+0zwWJ4UJaxWxgfewUoLhUvMqqjd59PORUWhqCG1GOmEMgCWJN9yI0G7/H6GhemWNQ7y4Kdeb+SS5QG0YQk6OVrvFJ6Ky0Tgaopp/h5CxPDrfJFgc/HdPPC3arEisyZkkO6uq+lVewiNsvFOfTakVeqxtjC1bKHhRQ33PG7UN9qWGHYwvc/NKMwJswJCgcWMwbiGN8VKPjx5/WzO7nPdCQByqCU/MMUcZUGVlDIYxemCPcvgS0cgP9rKc1ie/w6DAgnFmXhdhzKOPvYp7/OUE70+t/PzE8XrVd/ChOHkN3WQEVWFJzSdj0fMzZ8F60yrD0wxulI6u6RWWEHLw5m6zA2AreplkdaByuzRmuP2sHcsNmZ/ShySPivgelq25BxwCU2NThUnohvnTRXW5yB47v7uPn3ZPG2sR6Zt5q9ibrwrcd4N6AcitgiQYVvZmmIuKzzNJ98oDfpDxdPM/fTjlIMHCdM6WyX3C/bcADP6ivZkFRsyWEcnJyBOkuSp8j7MiEDQVgcXjGLU8MdtDL0c8qbPnAt66AADmvsAumN/e5mpXeS3KEVUSeNa/H+oWmy/ExXj17d/6fcDTym3dZ6Vc4CcAkVDlHlsVeFr5fUnSdxKgl/BPBX+gbD6rm7l4MGvjTdLnW9ZIcDwX+Dh4GthSVhrKwWBO//9q6Y2pguO5s1F+MPc/5CY9XFFaOdildr21GFeZh1ClxWARW0r2SdlH19GIz0gTurL4lqAsSwC5i8pxXweAOZLd|LuLnG7meb0T0i6uHmMg6p3Uj8rq4LEI43k6KQaaDnVw=" -} \ No newline at end of file diff --git a/tests/data/bitwarden_encrypted_export.json b/tests/data/bitwarden_encrypted_export.json deleted file mode 100644 index 0f759686c..000000000 --- a/tests/data/bitwarden_encrypted_export.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "encrypted": true, - "passwordProtected": true, - "salt": "jxJdzv853aLmu0y/mCgSxg==", - "kdfType": 0, - "kdfIterations": 100000, - "kdfMemory": null, - "kdfParallelism": null, - "encKeyValidation_DO_NOT_EDIT": "2.6O5+RkqPRTCxGIjEIyqukQ==|J7Ks4QhjfOyt7qMU82XEuJoGw0GpQabv0vGerKC+YjSQWmaqbbyMDgba78vyRvSU|f0nwbY+JRc2KfkU6mY0dmiKNiDb00A0CngpF4TEEM0c=", - "data": "2.OA/bDI14kq+642rwmWYWxg==|216xw4kCZbqhVifzikzvzqLY2Er35tiYo+gl+hgf9dmLrPMf5vYcFgMe8IdTHXZCdUEuyEdpQeoAwGT8zG8d9GcwdKKOktccl04lE39Cb6XqKEr1PA3d4R8iPYTpeeFSm/cFLQlod5iymUkW4wxHTSIVn9KO/y0F8LWyKX7XxAdCEJykatSoUcC9SmFTPxEtR7BBgfkLTCgSZ9AUE0suKoYIUR6sJSlDq3IHP/09T8w0bbahBkRzevj5+JXawxn1DvBld00bVzo6GgrGojHz+VNa/crpLSaPqyR/IlD66+bS1DdIZ4UBODpZVZTxNKbWd7mPhkCcHF+NchCb47MR442dVQD9QjXk8q7E3SoK76JkYdOZsd3FIH8fZNdYTSOZsvLOYans74RyX1qCD5w3QVaR1cwRYD+kwCe0eFlHmzCLCx3IAuTfH1QdXvIvqaevYKikuKE8tfaAhrPJ2N4MHoKyxdF801jqslZdWrUrZvWsovdBZhp2siQZiWpd/fteJTSpy19sJ+J49+4SYEAfYe3lbz2K7ypKia8duffnV4+eh5tsK24MkExHO3ZQzQVkQdsX6eeFJmdqK4wONunSgnXIDti5rw/bWNtjVvAYiDMX+DNULML/opp9TPZUvrTgFhMsFFwbVzIjTxwE/PS9w+lD3etP195QkD717F87dClpkIrvm+UfQrQwCgDxOQ9PTPcUBVugq9MEflsiSn4NjCXdjWL1siSgxm2eJQ3k0OKJoN5bUInwG9i9njLh5fjxc4aiuvOOGAkqgX/mr3MxuuV8luKWRy884Reu8DdnZq6Vdq+yHgs7o9Ipxrtr8t85yBeU90yqyJrtmwDgEJiLK0TpJ1bY9ZwnqhYrtJGRrzxWrfvAGcJzEsWJ98aq9T+r/CnnsInyRTyptOgmsjmPlw0rTZ8//KI2afwRQRL+yIZ4817T+DekyF18QnYD607njiJb5igEy9MzYw04osr9yyQikheyuPDvD2UnGgGYdy04sHKVNgt0/xtzsJvxhsmy0mXknRcajExsKe6wH1jzTq6IxWo+08+5lnMmr05gtE8Y6HN2nsOAVdGU6x26MQVI|ASjBD0/F6Z61WSWc++RXhA6iQv8AziJO+/EXrj7GSVY=" -} \ No newline at end of file diff --git a/tests/data/bitwarden_export.json b/tests/data/bitwarden_export.json deleted file mode 100644 index 7d6a5de21..000000000 --- a/tests/data/bitwarden_export.json +++ /dev/null @@ -1,180 +0,0 @@ -{ - "folders": [ - { - "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", - "name": "My Folder" - }, - { - "id": "yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy", - "name": "Second Folder" - } - ], - "items": [ - { - "id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaa", - "organizationId": null, - "folderId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", - "type": 2, - "name": "My Secure Note", - "notes": "1st line of secure note\n2nd line of secure note\n3rd line of secure note", - "favorite": false, - "fields": [ - { - "name": "Text Field", - "value": "text-field-value", - "type": 0 - }, - { - "name": "Hidden Field", - "value": "hidden-field-value", - "type": 1 - }, - { - "name": "Boolean Field", - "value": "false", - "type": 2 - } - ], - "secureNote": { - "type": 0 - }, - "collectionIds": [ - null - ] - }, - { - "id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb", - "organizationId": null, - "folderId": "yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy", - "type": 3, - "name": "Card Name", - "notes": "1st line of note text\n2nd line of note text", - "favorite": false, - "fields": [ - { - "name": "Text Field", - "value": "text-field-value", - "type": 0 - }, - { - "name": "Hidden Field", - "value": "hidden-field-value", - "type": 1 - }, - { - "name": "Boolean Field", - "value": "false", - "type": 2 - } - ], - "card": { - "cardholderName": "Jane Doe", - "brand": "Visa", - "number": "1234567891011121", - "expMonth": "10", - "expYear": "2021", - "code": "123" - }, - "collectionIds": [ - null - ] - }, - { - "id": "cccccccc-cccc-cccc-cccc-cccccccccccc", - "organizationId": null, - "folderId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", - "type": 4, - "name": "My Identity", - "notes": "1st line of a note\n2nd line of a note", - "favorite": false, - "fields": [ - { - "name": "Text Field", - "value": "text-field-value", - "type": 0 - }, - { - "name": "Hidden Field", - "value": "hidden-field-value", - "type": 1 - }, - { - "name": "Boolean Field", - "value": "true", - "type": 2 - } - ], - "identity": { - "title": "Mrs", - "firstName": "Jane", - "middleName": "A", - "lastName": "Doe", - "address1": " 1 North Calle Cesar Chavez ", - "address2": null, - "address3": null, - "city": "Santa Barbara", - "state": "CA", - "postalCode": "93103", - "country": "United States ", - "company": "My Employer", - "email": "myemail@gmail.com", - "phone": "123-123-1234", - "ssn": "123-12-1234", - "username": "myusername", - "passportNumber": "123456789", - "licenseNumber": "123456789" - }, - "collectionIds": [ - null - ] - }, - { - "id": "dddddddd-dddd-dddd-dddd-dddddddddddd", - "organizationId": null, - "folderId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", - "type": 1, - "name": "Login Name", - "notes": "1st line of note text\n2nd Line of note text", - "favorite": true, - "fields": [ - { - "name": "Text Field", - "value": "text-field-value", - "type": 0 - }, - { - "name": "Hidden Field", - "value": "hidden-field-value", - "type": 1 - }, - { - "name": "Boolean Field", - "value": "true", - "type": 2 - } - ], - "login": { - "uris": [ - { - "match": null, - "uri": "https://mail.google.com" - }, - { - "match": null, - "uri": "https://google.com" - }, - { - "match": null, - "uri": "https://gmail.com" - } - ], - "username": "myusername@gmail.com", - "password": "mypassword", - "totp": "otpauth://totp/Google:myusername%40gmail.com?secret=DFDFDEF%3D&period=30&digits=6&issuer=Google" - }, - "collectionIds": [ - null - ] - } - ] -} diff --git a/tests/data/bitwarden_passkey_export.json b/tests/data/bitwarden_passkey_export.json deleted file mode 100644 index 0044fc334..000000000 --- a/tests/data/bitwarden_passkey_export.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "encrypted": false, - "folders": [], - "items": [ - { - "passwordHistory": null, - "revisionDate": "2024-10-23T16:38:08.870Z", - "creationDate": "2024-10-23T16:38:08.606Z", - "deletedDate": null, - "id": "a8e579f0-98c2-4ac9-a126-b212011225f8", - "organizationId": null, - "folderId": null, - "type": 1, - "reprompt": 0, - "name": "webauthn.io", - "notes": null, - "favorite": false, - "login": { - "fido2Credentials": [ - { - "credentialId": "a3e15f8b-27c1-42ae-90cf-a615ad87854f", - "keyType": "public-key", - "keyAlgorithm": "ECDSA", - "keyCurve": "P-256", - "keyValue": "MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgmr4GQQjerojFuf0ZouOuUllMvAwxZSZAfB6gwDYcLiehRANCAAT0WR5zVSp6ieusvjkLkzaGc7fjGBmwpiuLPxR_d-ZjqMI9L2DKh-takp6wGt2x0n4jzr1KA352NZg0vjZX9CHh", - "rpId": "webauthn.io", - "userHandle": "aTFtdmFnOHYtS2dxVEJ0by1rSFpLWGg0enlTVC1iUVJReDZ5czJXa3c2aw", - "userName": "KPXC_BITWARDEN", - "counter": "0", - "rpName": "webauthn.io", - "userDisplayName": "KPXC_BITWARDEN", - "discoverable": "true", - "creationDate": "2024-10-23T16:38:08.617Z" - } - ], - "uris": [ - { - "match": null, - "uri": "https://webauthn.io/" - } - ], - "username": "KPXC_BITWARDEN", - "password": null, - "totp": null - }, - "collectionIds": null - } - ] -} \ No newline at end of file diff --git a/tests/data/protonpass_export.json b/tests/data/protonpass_export.json deleted file mode 100644 index ef8235218..000000000 --- a/tests/data/protonpass_export.json +++ /dev/null @@ -1,173 +0,0 @@ -{ - "version": "1.21.2", - "userId": "USER_ID", - "encrypted": false, - "vaults": { - "VAULT_A": { - "name": "Personal", - "description": "Personal vault", - "display": { - "color": 0, - "icon": 0 - }, - "items": [ - { - "itemId": "yZENmDjtmZGODNy3Q_CZiPAF_IgINq8w-R-qazrOh-Nt9YJeVF3gu07ovzDS4jhYHoMdOebTw5JkYPGgIL1mwQ==", - "shareId": "SN5uWo4WZF2uT5wIDqtbdpkjuxCbNTOIdf-JQ_DYZcKYKURHiZB5csS1a1p9lklvju9ni42l08IKzwQG0B2ySg==", - "data": { - "metadata": { - "name": "Test Login", - "note": "My login secure note.", - "itemUuid": "e8ee1a0c" - }, - "extraFields": [ - { - "fieldName": "non-hidden field", - "type": "text", - "data": { - "content": "non-hidden field content" - } - }, - { - "fieldName": "hidden field", - "type": "hidden", - "data": { - "content": "hidden field content" - } - }, - { - "fieldName": "second 2fa secret", - "type": "totp", - "data": { - "totpUri": "TOTPCODE" - } - } - ], - "type": "login", - "content": { - "itemEmail": "Email", - "password": "Password", - "urls": [ - "https://example.com/", - "https://example2.com/" - ], - "totpUri": "otpauth://totp/Test%20Login%20-%20Personal%20Vault:Username?issuer=Test%20Login%20-%20Personal%20Vault&secret=TOTPCODE&algorithm=SHA1&digits=6&period=30", - "passkeys": [], - "itemUsername": "Username" - } - }, - "state": 1, - "aliasEmail": null, - "contentFormatVersion": 1, - "createTime": 1689182868, - "modifyTime": 1689182868, - "pinned": true - }, - { - "itemId": "xqq_Bh8RxNMBerkiMvRdH427yswZznjYwps-f6C5D8tmKiPgMxCSPNz1BOd4nRJ309gciDiPhXcCVWOyfJ66ZA==", - "shareId": "SN5uWo4WZF2uT5wIDqtbdpkjuxCbNTOIdf-JQ_DYZcKYKURHiZB5csS1a1p9lklvju9ni42l08IKzwQG0B2ySg==", - "data": { - "metadata": { - "name": "My Secure Note", - "note": "Secure note contents.", - "itemUuid": "ad618070" - }, - "extraFields": [], - "type": "note", - "content": {} - }, - "state": 1, - "aliasEmail": null, - "contentFormatVersion": 1, - "createTime": 1689182908, - "modifyTime": 1689182908, - "pinned": false - }, - { - "itemId": "ZmGzd-HNQYTr6wmfWlSfiStXQLqGic_PYB2Q2T_hmuRM2JIA4pKAPJcmFafxJrDpXxLZ2EPjgD6Noc9a0U6AVQ==", - "shareId": "SN5uWo4WZF2uT5wIDqtbdpkjuxCbNTOIdf-JQ_DYZcKYKURHiZB5csS1a1p9lklvju9ni42l08IKzwQG0B2ySg==", - "data": { - "metadata": { - "name": "Test Card", - "note": "Credit Card Note", - "itemUuid": "d8f45370" - }, - "extraFields": [], - "type": "creditCard", - "content": { - "cardholderName": "Test name", - "cardType": 0, - "number": "1234222233334444", - "verificationNumber": "333", - "expirationDate": "2025-01", - "pin": "1234" - } - }, - "state": 1, - "aliasEmail": null, - "contentFormatVersion": 1, - "createTime": 1691001643, - "modifyTime": 1691001643, - "pinned": true - }, - { - "itemId": "xqq_Bh8RxNMBerkiMvRdH427yswZznjYwps-f6C5D8tmKiPgMxCSPNz1BOd4nRJ309gciDiPhXcCVWOyfJ66ZA==", - "shareId": "SN5uWo4WZF2uT5wIDqtbdpkjuxCbNTOIdf-JQ_DYZcKYKURHiZB5csS1a1p9lklvju9ni42l08IKzwQG0B2ySg==", - "data": { - "metadata": { - "name": "My Deleted Note", - "note": "Secure note contents.", - "itemUuid": "ad618070" - }, - "extraFields": [], - "type": "note", - "content": {} - }, - "state": 2, - "aliasEmail": null, - "contentFormatVersion": 1, - "createTime": 1689182908, - "modifyTime": 1689182908, - "pinned": false - } - ] - }, - "VAULT_B": { - "name": "Test", - "description": "", - "display": { - "color": 4, - "icon": 2 - }, - "items": [ - { - "itemId": "U_J8-eUR15sC-PjUhjVcixDcayhjGuoerUZCr560RlAi0ZjBNkSaSKAytVzZn4E0hiFX1_y4qZbUetl6jO3aJw==", - "shareId": "OJz-4MnPqAuYnyemhctcGDlSLJrzsTnf2FnFSwxh1QP_oth9xyGDc2ZAqCv5FnqkVgTNHT5aPj62zcekNemfNw==", - "data": { - "metadata": { - "name": "Other vault login", - "note": "", - "itemUuid": "f3429d44" - }, - "extraFields": [], - "type": "login", - "content": { - "itemEmail": "other vault username", - "password": "other vault password", - "urls": [], - "totpUri": "JBSWY3DPEHPK3PXP", - "passkeys": [], - "itemUsername": "" - } - }, - "state": 1, - "aliasEmail": null, - "contentFormatVersion": 1, - "createTime": 1689182949, - "modifyTime": 1689182949, - "pinned": false - } - ] - } - } -} \ No newline at end of file diff --git a/tests/data/wordlists/bad_wordlist_with_duplicate_entries.wordlist b/tests/data/wordlists/bad_wordlist_with_duplicate_entries.wordlist deleted file mode 100644 index 50246c96a..000000000 --- a/tests/data/wordlists/bad_wordlist_with_duplicate_entries.wordlist +++ /dev/null @@ -1,4 +0,0 @@ -abacus -abdomen -abdominal -abdominal diff --git a/tests/gui/CMakeLists.txt b/tests/gui/CMakeLists.txt index 30f255778..3264da515 100644 --- a/tests/gui/CMakeLists.txt +++ b/tests/gui/CMakeLists.txt @@ -15,13 +15,9 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR}/..) -add_unit_test(NAME testgui SOURCES TestGui.cpp ../util/TemporaryFile.cpp ../mock/MockRemoteProcess.cpp LIBS ${TEST_LIBRARIES}) +add_unit_test(NAME testgui SOURCES TestGui.cpp ../util/TemporaryFile.cpp LIBS ${TEST_LIBRARIES}) add_unit_test(NAME testguipixmaps SOURCES TestGuiPixmaps.cpp LIBS ${TEST_LIBRARIES}) -file(GLOB_RECURSE ATTACHMENTS_TEST_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/attachments/*.cpp) -add_unit_test(NAME testguiattachments SOURCES ${ATTACHMENTS_TEST_SOURCES} LIBS ${TEST_LIBRARIES}) -include_directories(testguiattachments PRIVATE ${PROJECT_SOURCE_DIR}/src/gui/entry) - if(WITH_XC_BROWSER) add_unit_test(NAME testguibrowser SOURCES TestGuiBrowser.cpp ../util/TemporaryFile.cpp LIBS ${TEST_LIBRARIES}) endif() diff --git a/tests/gui/TestGui.cpp b/tests/gui/TestGui.cpp index 9011d445c..178402d7e 100644 --- a/tests/gui/TestGui.cpp +++ b/tests/gui/TestGui.cpp @@ -21,24 +21,18 @@ #include #include -#include -#include -#include #include #include #include #include #include #include -#include #include #include #include "config-keepassx-tests.h" -#include "core/PasswordHealth.h" #include "core/Tools.h" #include "crypto/Crypto.h" -#include "gui/ActionCollection.h" #include "gui/ApplicationSettingsWidget.h" #include "gui/CategoryListWidget.h" #include "gui/CloneDialog.h" @@ -49,23 +43,19 @@ #include "gui/PasswordGeneratorWidget.h" #include "gui/PasswordWidget.h" #include "gui/SearchWidget.h" -#include "gui/ShortcutSettingsPage.h" #include "gui/TotpDialog.h" #include "gui/TotpSetupDialog.h" #include "gui/databasekey/KeyFileEditWidget.h" #include "gui/databasekey/PasswordEditWidget.h" #include "gui/dbsettings/DatabaseSettingsDialog.h" -#include "gui/dbsettings/DatabaseSettingsWidgetEncryption.h" #include "gui/entry/EditEntryWidget.h" #include "gui/entry/EntryView.h" #include "gui/group/EditGroupWidget.h" #include "gui/group/GroupModel.h" #include "gui/group/GroupView.h" -#include "gui/remote/RemoteHandler.h" #include "gui/tag/TagsEdit.h" #include "gui/wizard/NewDatabaseWizard.h" #include "keys/FileKey.h" -#include "mock/MockRemoteProcess.h" #define TEST_MODAL_NO_WAIT(TEST_CODE) \ bool dialogFinished = false; \ @@ -77,8 +67,10 @@ int main(int argc, char* argv[]) { +#if QT_VERSION >= QT_VERSION_CHECK(5, 6, 0) QApplication::setAttribute(Qt::AA_EnableHighDpiScaling); QGuiApplication::setAttribute(Qt::AA_UseHighDpiPixmaps); +#endif Application app(argc, argv); app.setApplicationName("KeePassXC"); app.setApplicationVersion(KEEPASSXC_VERSION); @@ -94,11 +86,7 @@ int main(int argc, char* argv[]) void TestGui::initTestCase() { QVERIFY(Crypto::init()); - - // Create temporary config file - Config::createConfigFromFile(TemporaryFile::createTempConfigFile(), {}); - - QLocale::setDefault(QLocale::c()); + Config::createTempFileInstance(); Application::bootstrap(); m_mainWindow.reset(new MainWindow()); @@ -151,7 +139,6 @@ void TestGui::init() databaseOpenWidget->findChild("editPassword")->findChild("passwordEdit"); QVERIFY(editPassword); editPassword->setFocus(); - QTRY_VERIFY(editPassword->hasFocus()); QTest::keyClicks(editPassword, "a"); QTest::keyClick(editPassword, Qt::Key_Enter); @@ -165,13 +152,14 @@ void TestGui::init() // Every test ends with closing the temp database without saving void TestGui::cleanup() { - if (m_tabWidget->isVisible()) { - // DO NOT save the database - m_db->markAsClean(); - MessageBox::setNextAnswer(MessageBox::No); - triggerAction("actionDatabaseClose"); - QApplication::processEvents(); - MessageBox::setNextAnswer(MessageBox::NoButton); + // DO NOT save the database + m_db->markAsClean(); + MessageBox::setNextAnswer(MessageBox::No); + triggerAction("actionDatabaseClose"); + QApplication::processEvents(); + MessageBox::setNextAnswer(MessageBox::NoButton); + + if (m_dbWidget) { delete m_dbWidget; } } @@ -201,7 +189,7 @@ void TestGui::testSettingsDefaultTabOrder() QVERIFY(dbSettingsWidget->isVisible()); QCOMPARE(dbSettingsWidget->findChild("categoryList")->currentCategory(), 0); for (auto* w : dbSettingsWidget->findChildren()) { - if (w->currentIndex() != 0 && w->objectName() != "encryptionSettingsTabWidget") { + if (w->currentIndex() != 0) { QFAIL("Database settings contain QTabWidgets whose default index is not 0"); } } @@ -220,16 +208,12 @@ void TestGui::testCreateDatabase() QTest::keyClick(wizard, Qt::Key_Enter); QCOMPARE(wizard->currentId(), 1); - // Check that basic encryption settings are visible auto decryptionTimeSlider = wizard->currentPage()->findChild("decryptionTimeSlider"); auto algorithmComboBox = wizard->currentPage()->findChild("algorithmComboBox"); QTRY_VERIFY(decryptionTimeSlider->isVisible()); QVERIFY(!algorithmComboBox->isVisible()); - - // Set the encryption settings to the advanced view - auto encryptionSettings = wizard->currentPage()->findChild("encryptionSettingsTabWidget"); - auto advancedTab = encryptionSettings->findChild("advancedTab"); - encryptionSettings->setCurrentWidget(advancedTab); + auto advancedToggle = wizard->currentPage()->findChild("advancedSettingsButton"); + QTest::mouseClick(advancedToggle, Qt::MouseButton::LeftButton); QTRY_VERIFY(!decryptionTimeSlider->isVisible()); QVERIFY(algorithmComboBox->isVisible()); @@ -298,10 +282,7 @@ void TestGui::testCreateDatabase() tmpFile.close(); fileDialog()->setNextFileName(tmpFile.fileName()); - // click Continue on the warning due to weak password - MessageBox::setNextAnswer(MessageBox::ContinueWithWeakPass); QTest::keyClick(fileEdit, Qt::Key::Key_Enter); - tmpFile.remove();); triggerAction("actionDatabaseNew"); @@ -357,9 +338,8 @@ void TestGui::testMergeDatabase() fileDialog()->setNextFileName(QString(KEEPASSX_TEST_DATA_DIR).append("/MergeDatabase.kdbx")); triggerAction("actionDatabaseMerge"); + QTRY_COMPARE(QApplication::focusWidget()->objectName(), QString("passwordEdit")); auto* editPasswordMerge = QApplication::focusWidget(); - QVERIFY(editPasswordMerge); - QTRY_COMPARE(editPasswordMerge->objectName(), QString("passwordEdit")); QVERIFY(editPasswordMerge->isVisible()); QTest::keyClicks(editPasswordMerge, "a"); @@ -378,158 +358,6 @@ void TestGui::testMergeDatabase() QCOMPARE(m_db->rootGroup()->findChildByName("General")->entries().size(), 1); } -void TestGui::prepareAndTriggerRemoteSync() -{ - // create remote settings in settings dialog - triggerAction("actionDatabaseSettings"); - - auto dbSettingsDialog = m_dbWidget->findChild("databaseSettingsDialog"); - QVERIFY(dbSettingsDialog); - dbSettingsDialog->showRemoteSettings(); - - auto name = "testCommand"; - auto nameEdit = dbSettingsDialog->findChild("nameLineEdit"); - QVERIFY(nameEdit); - QVERIFY(nameEdit->isVisible()); - nameEdit->setText(name); - - auto downloadCommandEdit = dbSettingsDialog->findChild("downloadCommand"); - QVERIFY(downloadCommandEdit); - downloadCommandEdit->setText("sftp user@server:Database.kdbx"); - - auto saveSettingsButton = dbSettingsDialog->findChild("saveSettingsButton"); - QVERIFY(saveSettingsButton); - QTest::mouseClick(saveSettingsButton, Qt::LeftButton); - - auto okButton = dbSettingsDialog->findChild("buttonBox")->button(QDialogButtonBox::Ok); - QVERIFY(okButton); - QTest::mouseClick(okButton, Qt::LeftButton); - - QTRY_COMPARE(m_dbWidget->getRemoteParams().size(), 1); - - // Show menu to trigger populating with remote sync action - auto menuRemoteSync = m_mainWindow->findChild("menuRemoteSync"); - QVERIFY(menuRemoteSync); - menuRemoteSync->popup({0, 0}); - QApplication::processEvents(); - menuRemoteSync->close(); - - // Trigger the remote sync action - for (const auto remoteAction : menuRemoteSync->actions()) { - if (remoteAction->text() == name) { - remoteAction->trigger(); - return; - } - } - - // If we get here then something didn't work properly - QFAIL("Remote sync action not present in menu."); -} - -void TestGui::testRemoteSyncDatabaseSameKey() -{ - RemoteHandler::setRemoteProcessFunc([](QObject* parent) { - return QScopedPointer( - new MockRemoteProcess(parent, QString(KEEPASSX_TEST_DATA_DIR).append("/SyncDatabase.kdbx"))); - }); - QSignalSpy dbSyncSpy(m_dbWidget.data(), &DatabaseWidget::databaseSyncCompleted); - prepareAndTriggerRemoteSync(); - QTRY_COMPARE(dbSyncSpy.count(), 1); - - m_db = m_tabWidget->currentDatabaseWidget()->database(); - - // there are seven child groups of the root group - QCOMPARE(m_db->rootGroup()->children().size(), 7); - // the merged group should contain an entry - QCOMPARE(m_db->rootGroup()->children().at(6)->entries().size(), 1); - // the General group contains one entry merged from the other db - QCOMPARE(m_db->rootGroup()->findChildByName("General")->entries().size(), 1); -} - -void TestGui::testRemoteSyncDatabaseRequiresPassword() -{ - RemoteHandler::setRemoteProcessFunc([](QObject* parent) { - return QScopedPointer(new MockRemoteProcess( - parent, QString(KEEPASSX_TEST_DATA_DIR).append("/SyncDatabaseDifferentPassword.kdbx"))); - }); - QSignalSpy dbSyncSpy(m_dbWidget.data(), &DatabaseWidget::databaseSyncCompleted); - prepareAndTriggerRemoteSync(); - - // need to process more events as opening with the same key did not work and more events have been fired - QApplication::processEvents(QEventLoop::WaitForMoreEvents); - - auto* editPasswordSync = QApplication::focusWidget(); - QVERIFY(editPasswordSync); - QTRY_COMPARE(editPasswordSync->objectName(), QString("passwordEdit")); - QVERIFY(editPasswordSync->isVisible()); - - QTest::keyClicks(editPasswordSync, "b"); - QTest::keyClick(editPasswordSync, Qt::Key_Enter); - - QTRY_COMPARE(dbSyncSpy.count(), 1); - m_db = m_tabWidget->currentDatabaseWidget()->database(); - - // there are seven child groups of the root group - QCOMPARE(m_db->rootGroup()->children().size(), 7); - // the merged group should contain an entry - QCOMPARE(m_db->rootGroup()->children().at(6)->entries().size(), 1); - // the General group contains one entry merged from the other db - QCOMPARE(m_db->rootGroup()->findChildByName("General")->entries().size(), 1); -} - -void TestGui::testOpenRemoteDatabase() -{ - // close current database - cleanup(); - - QString sourceToSync = "sftp user@server:Database.kdbx"; - RemoteHandler::setRemoteProcessFunc([sourceToSync](QObject* parent) { - return QScopedPointer( - new MockRemoteProcess(parent, QString(KEEPASSX_TEST_DATA_DIR).append("/SyncDatabase.kdbx"))); - }); - auto* openRemoteButton = QApplication::activeWindow()->findChild("buttonImport"); - QVERIFY(openRemoteButton); - QVERIFY(openRemoteButton->isVisible()); - QTest::mouseClick(openRemoteButton, Qt::LeftButton); - QApplication::processEvents(); - - TEST_MODAL_NO_WAIT(ImportWizard * wizard; QTRY_VERIFY(wizard = m_tabWidget->findChild()); - - auto* importTypeList = wizard->currentPage()->findChild("importTypeList"); - QVERIFY(importTypeList); - - for (int i = 0; i < importTypeList->count(); ++i) { - auto item = importTypeList->item(i); - if (item->data(Qt::UserRole) == ImportWizard::IMPORT_REMOTE) { - importTypeList->setCurrentItem(item); - break; - } - } - - auto* downloadCommandEdit = wizard->currentPage()->findChild("downloadCommand"); - QVERIFY(downloadCommandEdit); - QTest::keyClicks(downloadCommandEdit, sourceToSync); - - auto* temporaryDatabaseRadio = - wizard->currentPage()->findChild("temporaryDatabaseRadio"); - QVERIFY(temporaryDatabaseRadio); - QTest::mouseClick(temporaryDatabaseRadio, Qt::LeftButton); - - auto* passwordEdit = wizard->currentPage()->findChild("passwordEdit"); - QVERIFY(passwordEdit); - QTest::keyClicks(passwordEdit, "a"); - QTest::keyClick(passwordEdit, Qt::Key_Enter); - - QApplication::processEvents(); - - QVERIFY(wizard->currentPage()->findChildren().count() > 0); - - QTest::keyClick(passwordEdit, Qt::Key_Enter);); - - // remote database has been opened - QTRY_COMPARE(m_tabWidget->tabText(m_tabWidget->currentIndex()), QString("SyncDatabase [Temporary]")); -} - void TestGui::testAutoreloadDatabase() { config()->set(Config::AutoReloadOnChange, false); @@ -614,7 +442,7 @@ void TestGui::testEditEntry() // Edit the first entry ("Sample Entry") QTest::mouseClick(entryEditWidget, Qt::LeftButton); - QCOMPARE(m_dbWidget->currentMode(), DatabaseWidget::Mode::EditEntryMode); + QCOMPARE(m_dbWidget->currentMode(), DatabaseWidget::Mode::EditMode); auto* editEntryWidget = m_dbWidget->findChild("editEntryWidget"); auto* titleEdit = editEntryWidget->findChild("titleEdit"); QTest::keyClicks(titleEdit, "_test"); @@ -629,33 +457,13 @@ void TestGui::testEditEntry() // Apply the edit QTRY_VERIFY(applyButton->isEnabled()); QTest::mouseClick(applyButton, Qt::LeftButton); - QCOMPARE(m_dbWidget->currentMode(), DatabaseWidget::Mode::EditEntryMode); + QCOMPARE(m_dbWidget->currentMode(), DatabaseWidget::Mode::EditMode); QCOMPARE(entry->title(), QString("Sample Entry_test")); QCOMPARE(entry->historyItems().size(), ++editCount); QVERIFY(!applyButton->isEnabled()); - // Test viewing entry history - auto historyView = editEntryWidget->findChild("historyView"); - auto showButton = editEntryWidget->findChild("showButton"); - QVERIFY(historyView); - editEntryWidget->switchToPage(EditEntryWidget::Page::History); - QApplication::processEvents(); - QVERIFY(historyView->isVisible()); - QVERIFY(!showButton->isEnabled()); - // Select the second row in the history view - historyView->setCurrentIndex(historyView->model()->index(1, 0)); - QVERIFY(showButton->isEnabled()); - QTest::mouseClick(showButton, Qt::LeftButton); - // Verify that the entry history widget is shown - auto entryHistoryWidget = m_dbWidget->findChild("editEntryHistoryWidget"); - QVERIFY(entryHistoryWidget); - QVERIFY(entryHistoryWidget->isVisible()); - QCOMPARE(m_dbWidget->currentMode(), DatabaseWidget::Mode::EditEntryMode); - QTest::keyClick(entryHistoryWidget, Qt::Key_Escape); - QVERIFY(historyView->isVisible()); - // Test the "known bad" checkbox - editEntryWidget->switchToPage(EditEntryWidget::Page::Advanced); + editEntryWidget->setCurrentPage(1); auto excludeReportsCheckBox = editEntryWidget->findChild("excludeReportsCheckBox"); QVERIFY(excludeReportsCheckBox); QCOMPARE(excludeReportsCheckBox->isChecked(), false); @@ -678,7 +486,7 @@ void TestGui::testEditEntry() QCOMPARE(tags->tags().last(), QString("tag 2_is!awesome")); // Test entry colors (simulate choosing a color) - editEntryWidget->switchToPage(EditEntryWidget::Page::Advanced); + editEntryWidget->setCurrentPage(1); auto fgColor = QString("#FF0000"); auto bgColor = QString("#0000FF"); // Set foreground color @@ -695,7 +503,7 @@ void TestGui::testEditEntry() QCOMPARE(entry->historyItems().size(), ++editCount); // Test protected attributes - editEntryWidget->switchToPage(EditEntryWidget::Page::Advanced); + editEntryWidget->setCurrentPage(1); auto* attrTextEdit = editEntryWidget->findChild("attributesEdit"); QTest::mouseClick(editEntryWidget->findChild("addAttributeButton"), Qt::LeftButton); QString attrText = "TEST TEXT"; @@ -705,7 +513,7 @@ void TestGui::testEditEntry() QVERIFY(attrTextEdit->toPlainText().contains("PROTECTED")); QTest::mouseClick(editEntryWidget->findChild("revealAttributeButton"), Qt::LeftButton); QCOMPARE(attrTextEdit->toPlainText(), attrText); - editEntryWidget->switchToPage(EditEntryWidget::Page::Main); + editEntryWidget->setCurrentPage(0); // Save the edit (press OK) QTest::mouseClick(okButton, Qt::LeftButton); @@ -727,7 +535,7 @@ void TestGui::testEditEntry() QTest::mouseClick(entryEditWidget, Qt::LeftButton); okButton = editEntryWidgetButtonBox->button(QDialogButtonBox::Ok); QVERIFY(okButton); - QCOMPARE(m_dbWidget->currentMode(), DatabaseWidget::Mode::EditEntryMode); + QCOMPARE(m_dbWidget->currentMode(), DatabaseWidget::Mode::EditMode); titleEdit->setText("multiline\ntitle"); editEntryWidget->findChild("usernameComboBox")->lineEdit()->setText("multiline\nusername"); editEntryWidget->findChild("passwordEdit")->setText("multiline\npassword"); @@ -786,7 +594,7 @@ void TestGui::testSearchEditEntry() // Goto "Doggy"'s edit view QTest::keyClick(searchTextEdit, Qt::Key_Return); - QCOMPARE(m_dbWidget->currentMode(), DatabaseWidget::Mode::EditEntryMode); + QCOMPARE(m_dbWidget->currentMode(), DatabaseWidget::Mode::EditMode); // Check the path in header is "parent-group > entry" QCOMPARE(m_dbWidget->findChild("editEntryWidget")->findChild("headerLabel")->text(), @@ -812,7 +620,7 @@ void TestGui::testAddEntry() // Click the new entry button and check that we enter edit mode QTest::mouseClick(entryNewWidget, Qt::LeftButton); - QCOMPARE(m_dbWidget->currentMode(), DatabaseWidget::Mode::EditEntryMode); + QCOMPARE(m_dbWidget->currentMode(), DatabaseWidget::Mode::EditMode); // Add entry "test" and confirm added auto* editEntryWidget = m_dbWidget->findChild("editEntryWidget"); @@ -872,31 +680,51 @@ void TestGui::testAddEntry() void TestGui::testPasswordEntryEntropy_data() { QTest::addColumn("password"); + QTest::addColumn("expectedEntropyLabel"); QTest::addColumn("expectedStrengthLabel"); - QTest::newRow("Empty password") << "" << "Password Quality: Poor"; + QTest::newRow("Empty password") << "" + << "Entropy: 0.00 bit" + << "Password Quality: Poor"; - QTest::newRow("Well-known password") << "hello" << "Password Quality: Poor"; + QTest::newRow("Well-known password") << "hello" + << "Entropy: 6.38 bit" + << "Password Quality: Poor"; - QTest::newRow("Password composed of well-known words.") << "helloworld" << "Password Quality: Poor"; + QTest::newRow("Password composed of well-known words.") << "helloworld" + << "Entropy: 13.10 bit" + << "Password Quality: Poor"; - QTest::newRow("Password composed of well-known words with number.") << "password1" << "Password Quality: Poor"; + QTest::newRow("Password composed of well-known words with number.") << "password1" + << "Entropy: 4.00 bit" + << "Password Quality: Poor"; - QTest::newRow("Password out of small character space.") << "D0g.................." << "Password Quality: Poor"; + QTest::newRow("Password out of small character space.") << "D0g.................." + << "Entropy: 19.02 bit" + << "Password Quality: Poor"; - QTest::newRow("XKCD, easy substitutions.") << "Tr0ub4dour&3" << "Password Quality: Poor"; + QTest::newRow("XKCD, easy substitutions.") << "Tr0ub4dour&3" + << "Entropy: 30.87 bit" + << "Password Quality: Poor"; - QTest::newRow("XKCD, word generator.") << "correcthorsebatterystaple" << "Password Quality: Weak"; + QTest::newRow("XKCD, word generator.") << "correcthorsebatterystaple" + << "Entropy: 47.98 bit" + << "Password Quality: Weak"; - QTest::newRow("Random characters, medium length.") << "YQC3kbXbjC652dTDH" << "Password Quality: Good"; + QTest::newRow("Random characters, medium length.") << "YQC3kbXbjC652dTDH" + << "Entropy: 95.83 bit" + << "Password Quality: Good"; - QTest::newRow("Random characters, long.") << "Bs5ZFfthWzR8DGFEjaCM6bGqhmCT4km" << "Password Quality: Excellent"; + QTest::newRow("Random characters, long.") << "Bs5ZFfthWzR8DGFEjaCM6bGqhmCT4km" + << "Entropy: 174.59 bit" + << "Password Quality: Excellent"; QTest::newRow("Long password using Zxcvbn chunk estimation") << "quintet-tamper-kinswoman-humility-vengeful-haven-tastiness-aspire-widget-ipad-cussed-reaffirm-ladylike-" "ashamed-anatomy-daybed-jam-swear-strudel-neatness-stalemate-unbundle-flavored-relation-emergency-underrate-" "registry-getting-award-unveiled-unshaken-stagnate-cartridge-magnitude-ointment-hardener-enforced-scrubbed-" "radial-fiddling-envelope-unpaved-moisture-unused-crawlers-quartered-crushed-kangaroo-tiptop-doily" + << "Entropy: 1205.85 bit" << "Password Quality: Excellent"; QTest::newRow("Longer password above Zxcvbn threshold") @@ -914,6 +742,7 @@ void TestGui::testPasswordEntryEntropy_data() "disparate-decorated-washroom-threefold-muzzle-buckwheat-kerosene-swell-why-reprocess-correct-shady-" "impatient-slit-banshee-scrubbed-dreadful-unlocking-urologist-hurried-citable-fragment-septic-lapped-" "prankish-phantom-unpaved-moisture-unused-crawlers-quartered-crushed-kangaroo-lapel-emporium-renounce" + << "Entropy: 4210.27 bit" << "Password Quality: Excellent"; } @@ -932,7 +761,7 @@ void TestGui::testPasswordEntryEntropy() // Click the new entry button and check that we enter edit mode QTest::mouseClick(entryNewWidget, Qt::LeftButton); - QCOMPARE(m_dbWidget->currentMode(), DatabaseWidget::Mode::EditEntryMode); + QCOMPARE(m_dbWidget->currentMode(), DatabaseWidget::Mode::EditMode); // Add entry "test" and confirm added auto* editEntryWidget = m_dbWidget->findChild("editEntryWidget"); @@ -960,20 +789,14 @@ void TestGui::testPasswordEntryEntropy() pwGeneratorWidget->findChild("editNewPassword")->findChild("passwordEdit"); auto* entropyLabel = pwGeneratorWidget->findChild("entropyLabel"); auto* strengthLabel = pwGeneratorWidget->findChild("strengthLabel"); - auto* passwordLengthLabel = pwGeneratorWidget->findChild("passwordLengthLabel"); QFETCH(QString, password); + QFETCH(QString, expectedEntropyLabel); QFETCH(QString, expectedStrengthLabel); - // Dynamically calculate entropy due to variances with zxcvbn wordlists - PasswordHealth health(password); - auto expectedEntropy = QString("Entropy: %1 bit").arg(QString::number(health.entropy(), 'f', 2)); - auto expectedPasswordLength = QString("Characters: %1").arg(QString::number(password.length())); - generatedPassword->setText(password); - QCOMPARE(entropyLabel->text(), expectedEntropy); + QCOMPARE(entropyLabel->text(), expectedEntropyLabel); QCOMPARE(strengthLabel->text(), expectedStrengthLabel); - QCOMPARE(passwordLengthLabel->text(), expectedPasswordLength); QTest::mouseClick(generatedPassword, Qt::LeftButton); QTest::keyClick(generatedPassword, Qt::Key_Escape);); @@ -994,7 +817,7 @@ void TestGui::testDicewareEntryEntropy() // Click the new entry button and check that we enter edit mode QTest::mouseClick(entryNewWidget, Qt::LeftButton); - QCOMPARE(m_dbWidget->currentMode(), DatabaseWidget::Mode::EditEntryMode); + QCOMPARE(m_dbWidget->currentMode(), DatabaseWidget::Mode::EditMode); // Add entry "test" and confirm added auto* editEntryWidget = m_dbWidget->findChild("editEntryWidget"); @@ -1034,12 +857,11 @@ void TestGui::testDicewareEntryEntropy() // Verify entropy and strength auto* entropyLabel = pwGeneratorWidget->findChild("entropyLabel"); auto* strengthLabel = pwGeneratorWidget->findChild("strengthLabel"); - auto* wordLengthLabel = pwGeneratorWidget->findChild("passwordLengthLabel"); + auto* wordLengthLabel = pwGeneratorWidget->findChild("charactersInPassphraseLabel"); - QTRY_COMPARE_WITH_TIMEOUT(entropyLabel->text(), QString("Entropy: 77.54 bit"), 200); + QTRY_COMPARE_WITH_TIMEOUT(entropyLabel->text(), QString("Entropy: 77.55 bit"), 200); QCOMPARE(strengthLabel->text(), QString("Password Quality: Good")); - QCOMPARE(wordLengthLabel->text(), - QString("Characters: %1").arg(QString::number(pwGeneratorWidget->getGeneratedPassword().length()))); + QCOMPARE(wordLengthLabel->text().toInt(), pwGeneratorWidget->getGeneratedPassword().size()); QTest::mouseClick(generatedPassword, Qt::LeftButton); QTest::keyClick(generatedPassword, Qt::Key_Escape);); @@ -1082,10 +904,10 @@ void TestGui::testTotp() QVERIFY(entryEditWidget->isVisible()); QVERIFY(entryEditWidget->isEnabled()); QTest::mouseClick(entryEditWidget, Qt::LeftButton); - QCOMPARE(m_dbWidget->currentMode(), DatabaseWidget::Mode::EditEntryMode); + QCOMPARE(m_dbWidget->currentMode(), DatabaseWidget::Mode::EditMode); auto* editEntryWidget = m_dbWidget->findChild("editEntryWidget"); - editEntryWidget->switchToPage(EditEntryWidget::Page::Advanced); + editEntryWidget->setCurrentPage(1); auto* attrTextEdit = editEntryWidget->findChild("attributesEdit"); QTest::mouseClick(editEntryWidget->findChild("revealAttributeButton"), Qt::LeftButton); QCOMPARE(attrTextEdit->toPlainText(), expectedFinalSeed); @@ -1099,7 +921,7 @@ void TestGui::testTotp() auto* totpDialog = m_dbWidget->findChild("TotpDialog"); auto* totpLabel = totpDialog->findChild("totpLabel"); - QTRY_COMPARE(totpLabel->text().replace(" ", ""), entry->totp()); + QCOMPARE(totpLabel->text().replace(" ", ""), entry->totp()); QTest::keyClick(totpDialog, Qt::Key_Escape); // Test the QR code @@ -1126,7 +948,6 @@ void TestGui::testSearch() auto* searchWidget = toolBar->findChild("SearchWidget"); QVERIFY(searchWidget->isEnabled()); auto* searchTextEdit = searchWidget->findChild("searchEdit"); - auto* waitForEnterAction = searchWidget->findChild("actionSearchWaitForEnter"); auto* entryView = m_dbWidget->findChild("entryView"); QVERIFY(entryView->isVisible()); @@ -1138,50 +959,6 @@ void TestGui::testSearch() QVERIFY(helpButton->isVisible()); QVERIFY(!helpPanel->isVisible()); - // Test "wait for enter" toggle - QVERIFY(waitForEnterAction->isVisible()); - QVERIFY(waitForEnterAction->isCheckable()); - - // Test search with "wait for enter" disabled (default) - searchTextEdit->clear(); - QTest::keyClicks(searchTextEdit, "ZZZ"); - QTRY_COMPARE(searchTextEdit->text(), QString("ZZZ")); - QTRY_VERIFY(m_dbWidget->isSearchActive()); - QTRY_COMPARE(entryView->model()->rowCount(), 0); - - // Clear search - searchTextEdit->clear(); - QTRY_VERIFY(!m_dbWidget->isSearchActive()); - - // Enable "wait for enter" mode - waitForEnterAction->trigger(); - QVERIFY(waitForEnterAction->isChecked()); - - // Test search with "wait for enter" enabled - QTest::keyClicks(searchTextEdit, "ZZZ"); - QTRY_VERIFY(!m_dbWidget->isSearchActive()); - - // Press Enter to execute search - QTest::keyClick(searchTextEdit, Qt::Key_Return); - QTRY_VERIFY(m_dbWidget->isSearchActive()); - QTRY_COMPARE(entryView->model()->rowCount(), 0); - // Check that search remains active even after clearing - searchTextEdit->clear(); - QTRY_VERIFY(m_dbWidget->isSearchActive()); - - // Disable "wait for enter" mode - waitForEnterAction->trigger(); - QVERIFY(!waitForEnterAction->isChecked()); - - // Test search with "wait for enter" disabled again - QTest::keyClicks(searchTextEdit, "ZZZ"); - QTRY_VERIFY(m_dbWidget->isSearchActive()); - QTRY_COMPARE(entryView->model()->rowCount(), 0); - - // Clear search - searchTextEdit->clear(); - QTRY_VERIFY(!m_dbWidget->isSearchActive()); - // Enter search QTest::mouseClick(searchTextEdit, Qt::LeftButton); QTRY_VERIFY(searchTextEdit->hasFocus()); @@ -1243,15 +1020,15 @@ void TestGui::testSearch() searchedEntry->setPassword("password"); QClipboard* clipboard = QApplication::clipboard(); - // Copy to clipboard: should copy search text (not password) + // Attempt password copy with selected test (should fail) QTest::keyClick(searchTextEdit, Qt::Key_C, Qt::ControlModifier); - QCOMPARE(clipboard->text(), QString("someTHING")); + QVERIFY(clipboard->text() != searchedEntry->password()); // Deselect text and confirm password copies QTest::mouseClick(searchTextEdit, Qt::LeftButton); QTRY_VERIFY(searchTextEdit->selectedText().isEmpty()); QTRY_VERIFY(searchTextEdit->hasFocus()); QTest::keyClick(searchTextEdit, Qt::Key_C, Qt::ControlModifier); - QCOMPARE(clipboard->text(), searchedEntry->password()); + QCOMPARE(searchedEntry->password(), clipboard->text()); // Ensure Down focuses on entry view when search text is selected QTest::keyClick(searchTextEdit, Qt::Key_A, Qt::ControlModifier); QTest::keyClick(searchTextEdit, Qt::Key_Down); @@ -1259,27 +1036,14 @@ void TestGui::testSearch() QCOMPARE(entryView->currentEntry(), searchedEntry); // Test that password copies with entry focused QTest::keyClick(entryView, Qt::Key_C, Qt::ControlModifier); - QCOMPARE(clipboard->text(), searchedEntry->password()); + QCOMPARE(searchedEntry->password(), clipboard->text()); // Refocus back to search edit QTest::mouseClick(searchTextEdit, Qt::LeftButton); QTRY_VERIFY(searchTextEdit->hasFocus()); - // Select search text and test that password does not copy + // Test that password does not copy searchTextEdit->selectAll(); QTest::keyClick(searchTextEdit, Qt::Key_C, Qt::ControlModifier); QTRY_COMPARE(clipboard->text(), QString("someTHING")); - // Ensure password copies when clicking on copy password button despite selected text - auto copyPasswordAction = m_mainWindow->findChild("actionEntryCopyPassword"); - QVERIFY(copyPasswordAction); - auto copyPasswordWidget = toolBar->widgetForAction(copyPasswordAction); - QVERIFY(copyPasswordWidget); - QTest::mouseClick(copyPasswordWidget, Qt::LeftButton); - QCOMPARE(clipboard->text(), searchedEntry->password()); - // Deselect text and deselect entry, Ctrl+C should now do nothing - clipboard->clear(); - QTest::mouseClick(searchTextEdit, Qt::LeftButton); - entryView->clearSelection(); - QTest::keyClick(searchTextEdit, Qt::Key_C, Qt::ControlModifier); - QCOMPARE(clipboard->text(), QString()); // Test case sensitive search searchWidget->setCaseSensitive(true); @@ -1314,13 +1078,6 @@ void TestGui::testSearch() QCOMPARE(groupView->currentGroup(), m_db->rootGroup()); QVERIFY(!m_dbWidget->isSearchActive()); - // check if first entry is selected after search - QTest::keyClicks(searchTextEdit, "some"); - QTRY_VERIFY(m_dbWidget->isSearchActive()); - QTRY_COMPARE(entryView->selectedEntries().length(), 1); - QModelIndex index_current = entryView->indexFromEntry(entryView->currentEntry()); - QTRY_COMPARE(index_current.row(), 0); - // Try to edit the first entry from the search view // Refocus back to search edit QTest::mouseClick(searchTextEdit, Qt::LeftButton); @@ -1331,7 +1088,7 @@ void TestGui::testSearch() QModelIndex item = entryView->model()->index(0, 1); Entry* entry = entryView->entryFromIndex(item); QTest::keyClick(searchTextEdit, Qt::Key_Return); - QCOMPARE(m_dbWidget->currentMode(), DatabaseWidget::Mode::EditEntryMode); + QCOMPARE(m_dbWidget->currentMode(), DatabaseWidget::Mode::EditMode); // Perform the edit and save it EditEntryWidget* editEntryWidget = m_dbWidget->findChild("editEntryWidget"); @@ -1489,7 +1246,7 @@ void TestGui::testEntryPlaceholders() // Click the new entry button and check that we enter edit mode QTest::mouseClick(entryNewWidget, Qt::LeftButton); - QCOMPARE(m_dbWidget->currentMode(), DatabaseWidget::Mode::EditEntryMode); + QCOMPARE(m_dbWidget->currentMode(), DatabaseWidget::Mode::EditMode); // Add entry "test" and confirm added auto* editEntryWidget = m_dbWidget->findChild("editEntryWidget"); @@ -1654,14 +1411,18 @@ void TestGui::testSaveBackupPath_data() QTest::newRow("Absolute backup path") << tmpFile.fileName() << tmpFile.fileName(); // relative paths should be resolved to database parent directory - QTest::newRow("Relative backup path (implicit)") << "other_dir/test.old.kdbx" << "other_dir/test.old.kdbx"; - QTest::newRow("Relative backup path (explicit)") << "./other_dir2/test2.old.kdbx" << "other_dir2/test2.old.kdbx"; + QTest::newRow("Relative backup path (implicit)") << "other_dir/test.old.kdbx" + << "other_dir/test.old.kdbx"; + QTest::newRow("Relative backup path (explicit)") << "./other_dir2/test2.old.kdbx" + << "other_dir2/test2.old.kdbx"; - QTest::newRow("Path with placeholders") << "{DB_FILENAME}.old.kdbx" << "KeePassXC.old.kdbx"; + QTest::newRow("Path with placeholders") << "{DB_FILENAME}.old.kdbx" + << "KeePassXC.old.kdbx"; // empty path should be replaced with default pattern QTest::newRow("Empty path") << QString("") << config()->getDefault(Config::BackupFilePathPattern).toString(); // {DB_FILENAME} should be replaced with database filename - QTest::newRow("") << "{DB_FILENAME}_.old.kdbx" << "{DB_FILENAME}_.old.kdbx"; + QTest::newRow("") << "{DB_FILENAME}_.old.kdbx" + << "{DB_FILENAME}_.old.kdbx"; } void TestGui::testSaveBackupPath() @@ -1705,218 +1466,40 @@ void TestGui::testDatabaseSettings() m_db->metadata()->setName("testDatabaseSettings"); triggerAction("actionDatabaseSettings"); auto* dbSettingsDialog = m_dbWidget->findChild("databaseSettingsDialog"); - auto* dbSettingsCategoryList = dbSettingsDialog->findChild("categoryList"); - auto* dbSettingsStackedWidget = dbSettingsDialog->findChild("stackedWidget"); - auto* autosaveDelayCheckBox = dbSettingsDialog->findChild("autosaveDelayCheckBox"); - auto* autosaveDelaySpinBox = dbSettingsDialog->findChild("autosaveDelaySpinBox"); - auto* dbSettingsButtonBox = dbSettingsDialog->findChild("buttonBox"); - int autosaveDelayTestValue = 2; + auto* transformRoundsSpinBox = dbSettingsDialog->findChild("transformRoundsSpinBox"); + auto advancedToggle = dbSettingsDialog->findChild("advancedSettingsToggle"); - dbSettingsCategoryList->setCurrentCategory(1); // go into security category - auto securityTabWidget = dbSettingsStackedWidget->findChild("securityTabWidget"); - QCOMPARE(securityTabWidget->currentIndex(), 0); - - // Interact with the password edit option - auto passwordEditWidget = securityTabWidget->findChild(); - QVERIFY(passwordEditWidget); - auto editPasswordButton = passwordEditWidget->findChild("changeButton"); - QVERIFY(editPasswordButton); - QVERIFY(editPasswordButton->isVisible()); - QTest::mouseClick(editPasswordButton, Qt::LeftButton); - QApplication::processEvents(); - auto passwordWidgets = dbSettingsDialog->findChildren(); - QVERIFY(passwordWidgets.count() == 2); - QVERIFY(passwordWidgets[0]->isVisible()); - passwordWidgets[0]->setText("b"); - passwordWidgets[1]->setText("b"); - - // Toggle between tabs to ensure the password remains - securityTabWidget->setCurrentIndex(1); - QApplication::processEvents(); - securityTabWidget->setCurrentIndex(0); - QApplication::processEvents(); - QCOMPARE(passwordWidgets[0]->text(), QString("b")); - - // Cancel password change and confirm password is cleared - auto cancelPasswordButton = passwordEditWidget->findChild("cancelButton"); - QVERIFY(cancelPasswordButton); - QTest::mouseClick(cancelPasswordButton, Qt::LeftButton); - QApplication::processEvents(); - QVERIFY(!passwordWidgets[0]->isVisible()); - QCOMPARE(passwordWidgets[0]->text(), QString("")); - QVERIFY(editPasswordButton->isVisible()); - - // Switch to encryption tab and interact with various settings - securityTabWidget->setCurrentIndex(1); + advancedToggle->setChecked(true); QApplication::processEvents(); - // Verify database is KDBX3 - auto compatibilitySelection = securityTabWidget->findChild("compatibilitySelection"); - QVERIFY(compatibilitySelection); - QVERIFY(compatibilitySelection->isEnabled()); - QCOMPARE(compatibilitySelection->currentText(), QString("KDBX 3")); - - // Verify advanced settings - auto encryptionSettings = securityTabWidget->findChild("encryptionSettingsTabWidget"); - auto advancedTab = encryptionSettings->findChild("advancedTab"); - encryptionSettings->setCurrentWidget(advancedTab); - QApplication::processEvents(); - - // Verify KDF is AES KDBX3 - auto kdfSelection = advancedTab->findChild("kdfComboBox"); - QVERIFY(kdfSelection->isVisible()); - QCOMPARE(kdfSelection->currentText(), QString("AES-KDF (KDBX 3)")); - - auto transformRoundsSpinBox = advancedTab->findChild("transformRoundsSpinBox"); - QVERIFY(transformRoundsSpinBox); - - // Adjust compatibility to KDBX4 and wait for KDF to update - compatibilitySelection->setCurrentIndex(0); - QTRY_VERIFY(transformRoundsSpinBox->isEnabled()); - QCOMPARE(compatibilitySelection->currentText().left(6), QString("KDBX 4")); - QCOMPARE(kdfSelection->currentText().left(7), QString("Argon2d")); - - // Switch to AES KDBX4, change rounds, then accept - kdfSelection->setCurrentIndex(2); - QCOMPARE(kdfSelection->currentText(), QString("AES-KDF (KDBX 4)")); + QVERIFY(transformRoundsSpinBox != nullptr); transformRoundsSpinBox->setValue(123456); QTest::keyClick(transformRoundsSpinBox, Qt::Key_Enter); QTRY_COMPARE(m_db->kdf()->rounds(), 123456); - QVERIFY(m_db->formatVersion() >= KeePass2::FILE_VERSION_4); - QCOMPARE(m_db->kdf()->uuid(), KeePass2::KDF_AES_KDBX4); - - // Go back into database settings - triggerAction("actionDatabaseSettings"); - - // test disable and default values for maximum history items and size - auto* historyMaxItemsCheckBox = dbSettingsDialog->findChild("historyMaxItemsCheckBox"); - auto* historyMaxItemsSpinBox = dbSettingsDialog->findChild("historyMaxItemsSpinBox"); - auto* historyMaxSizeCheckBox = dbSettingsDialog->findChild("historyMaxSizeCheckBox"); - auto* historyMaxSizeSpinBox = dbSettingsDialog->findChild("historyMaxSizeSpinBox"); - // test defaults - QCOMPARE(historyMaxItemsSpinBox->value(), Metadata::DefaultHistoryMaxItems); - QCOMPARE(historyMaxSizeSpinBox->value(), qRound(Metadata::DefaultHistoryMaxSize / qreal(1024 * 1024))); - // disable and test setting as well - historyMaxItemsCheckBox->setChecked(false); - historyMaxSizeCheckBox->setChecked(false); - QTest::mouseClick(dbSettingsButtonBox->button(QDialogButtonBox::Ok), Qt::LeftButton); - QTRY_COMPARE(m_db->metadata()->historyMaxItems(), -1); - QTRY_COMPARE(m_db->metadata()->historyMaxSize(), -1); - // then open to check the saved disabled state in gui - triggerAction("actionDatabaseSettings"); - QCOMPARE(historyMaxItemsCheckBox->isChecked(), false); - QCOMPARE(historyMaxSizeCheckBox->isChecked(), false); - QTest::mouseClick(dbSettingsButtonBox->button(QDialogButtonBox::Cancel), Qt::LeftButton); - - // Test loading default values and setting autosaveDelay - triggerAction("actionDatabaseSettings"); - QVERIFY(autosaveDelayCheckBox->isChecked() == false); - autosaveDelayCheckBox->toggle(); - autosaveDelaySpinBox->setValue(autosaveDelayTestValue); - QTest::mouseClick(dbSettingsButtonBox->button(QDialogButtonBox::Ok), Qt::LeftButton); - QTRY_COMPARE(m_db->metadata()->autosaveDelayMin(), autosaveDelayTestValue); checkSaveDatabase(); +} - // Test loading autosaveDelay non-default values - triggerAction("actionDatabaseSettings"); - QTRY_COMPARE(autosaveDelayCheckBox->isChecked(), true); - QTRY_COMPARE(autosaveDelaySpinBox->value(), autosaveDelayTestValue); - QTest::mouseClick(dbSettingsButtonBox->button(QDialogButtonBox::Cancel), Qt::LeftButton); +void TestGui::testKeePass1Import() +{ + fileDialog()->setNextFileName(QString(KEEPASSX_TEST_DATA_DIR).append("/basic.kdb")); + triggerAction("actionImportKeePass1"); - // test autosave delay + auto* keepass1OpenWidget = m_tabWidget->currentDatabaseWidget()->findChild("keepass1OpenWidget"); + auto* editPassword = + keepass1OpenWidget->findChild("editPassword")->findChild("passwordEdit"); + QVERIFY(editPassword); - // 1 init - config()->set(Config::AutoSaveAfterEveryChange, true); - QSignalSpy writeDbSignalSpy(m_db.data(), &Database::databaseSaved); + QTest::keyClicks(editPassword, "masterpw"); + QTest::keyClick(editPassword, Qt::Key_Enter); - // 2 create new entries + QTRY_COMPARE(m_tabWidget->count(), 2); + QTRY_COMPARE(m_tabWidget->tabText(m_tabWidget->currentIndex()), QString("basic [New Database]*")); - // 2.a) Click the new entry button and set the title - auto* entryNewAction = m_mainWindow->findChild("actionEntryNew"); - QVERIFY(entryNewAction->isEnabled()); - - auto* toolBar = m_mainWindow->findChild("toolBar"); - QVERIFY(toolBar); - - QWidget* entryNewWidget = toolBar->widgetForAction(entryNewAction); - - QTest::mouseClick(entryNewWidget, Qt::LeftButton); - QCOMPARE(m_dbWidget->currentMode(), DatabaseWidget::Mode::EditEntryMode); - - auto* editEntryWidget = m_dbWidget->findChild("editEntryWidget"); - QVERIFY(editEntryWidget); - auto* titleEdit = editEntryWidget->findChild("titleEdit"); - QVERIFY(titleEdit); - - QTest::keyClicks(titleEdit, "Test autosaveDelay 1"); - - // 2.b) Save changes - editEntryWidget->switchToPage(EditEntryWidget::Page::Main); - auto* editEntryWidgetButtonBox = editEntryWidget->findChild("buttonBox"); - QTest::mouseClick(editEntryWidgetButtonBox->button(QDialogButtonBox::Ok), Qt::LeftButton); - - // 2.c) Make sure file was not modified yet - Tools::wait(150); // due to modify timer - QTRY_COMPARE(writeDbSignalSpy.count(), 0); - - // 2.d) Create second entry to test delay timer reset - QTest::mouseClick(entryNewWidget, Qt::LeftButton); - QCOMPARE(m_dbWidget->currentMode(), DatabaseWidget::Mode::EditEntryMode); - QTest::keyClicks(titleEdit, "Test autosaveDelay 2"); - - // 2.e) Save changes - editEntryWidget->switchToPage(EditEntryWidget::Page::Main); - editEntryWidgetButtonBox = editEntryWidget->findChild("buttonBox"); - QTest::mouseClick(editEntryWidgetButtonBox->button(QDialogButtonBox::Ok), Qt::LeftButton); - - // 3 Double check both true negative and true positive - // 3.a) Test unmodified prior to delay timeout - Tools::wait(150); // due to modify timer - QTRY_COMPARE(writeDbSignalSpy.count(), 0); - - // 3.b) Test modification time after expected - m_dbWidget->triggerAutosaveTimer(); - QTRY_COMPARE(writeDbSignalSpy.count(), 1); - - // 4 Test no delay when disabled autosave or autosaveDelay - // 4.a) create new entry - QTest::mouseClick(entryNewWidget, Qt::LeftButton); - QCOMPARE(m_dbWidget->currentMode(), DatabaseWidget::Mode::EditEntryMode); - QTest::keyClicks(titleEdit, "Test autosaveDelay 3"); - - // 4.b) Save changes - editEntryWidget->switchToPage(EditEntryWidget::Page::Main); - editEntryWidgetButtonBox = editEntryWidget->findChild("buttonBox"); - QTest::mouseClick(editEntryWidgetButtonBox->button(QDialogButtonBox::Ok), Qt::LeftButton); - - // 4.c) Start timer - Tools::wait(150); // due to modify timer - - // 4.d) Disable autosave - config()->set(Config::AutoSaveAfterEveryChange, false); - - // 4.e) Make sure changes are not saved - m_dbWidget->triggerAutosaveTimer(); - QTRY_COMPARE(writeDbSignalSpy.count(), 1); - - // 4.f) Repeat for autosaveDelay - config()->set(Config::AutoSaveAfterEveryChange, true); - QTest::mouseClick(entryNewWidget, Qt::LeftButton); - QCOMPARE(m_dbWidget->currentMode(), DatabaseWidget::Mode::EditEntryMode); - QTest::keyClicks(titleEdit, "Test autosaveDelay 4"); - editEntryWidget->switchToPage(EditEntryWidget::Page::Main); - editEntryWidgetButtonBox = editEntryWidget->findChild("buttonBox"); - QTest::mouseClick(editEntryWidgetButtonBox->button(QDialogButtonBox::Ok), Qt::LeftButton); - Tools::wait(150); // due to modify timer - m_db->metadata()->setAutosaveDelayMin(0); - - // 4.g) Make sure changes are not saved - m_dbWidget->triggerAutosaveTimer(); - QTRY_COMPARE(writeDbSignalSpy.count(), 1); - - // 5 Cleanup - config()->set(Config::AutoSaveAfterEveryChange, false); + // Close the KeePass1 Database + MessageBox::setNextAnswer(MessageBox::No); + triggerAction("actionDatabaseClose"); + QApplication::processEvents(); } void TestGui::testDatabaseLocking() @@ -2112,52 +1695,6 @@ void TestGui::testTrayRestoreHide() #endif } -void TestGui::testShortcutConfig() -{ - // Action collection should not be empty - QVERIFY(!ActionCollection::instance()->actions().isEmpty()); - - // Add an action, make sure it gets added - QAction* a = new QAction(ActionCollection::instance()); - a->setObjectName("MyAction1"); - ActionCollection::instance()->addAction(a); - QVERIFY(ActionCollection::instance()->actions().contains(a)); - - const QKeySequence seq(Qt::CTRL + Qt::SHIFT + Qt::ALT + Qt::Key_N); - ActionCollection::instance()->setDefaultShortcut(a, seq); - QCOMPARE(ActionCollection::instance()->defaultShortcut(a), seq); - - bool v = false; - m_mainWindow->addAction(a); - connect(a, &QAction::triggered, ActionCollection::instance(), [&v] { v = !v; }); - QTest::keyClick(m_mainWindow.data(), Qt::Key_N, Qt::ControlModifier | Qt::ShiftModifier | Qt::AltModifier); - QVERIFY(v); - - // Change shortcut and save - const QKeySequence newSeq(Qt::CTRL + Qt::SHIFT + Qt::ALT + Qt::Key_M); - a->setShortcut(newSeq); - QVERIFY(a->shortcut() != ActionCollection::instance()->defaultShortcut(a)); - ActionCollection::instance()->saveShortcuts(); - QCOMPARE(a->shortcut(), newSeq); - const auto shortcuts = Config::instance()->getShortcuts(); - Config::ShortcutEntry entryForA; - for (const auto& s : shortcuts) { - if (s.name == a->objectName()) { - entryForA = s; - break; - } - } - QCOMPARE(entryForA.name, a->objectName()); - QCOMPARE(QKeySequence::fromString(entryForA.shortcut), a->shortcut()); - - // trigger the old shortcut - QTest::keyClick(m_mainWindow.data(), Qt::Key_N, Qt::ControlModifier | Qt::ShiftModifier | Qt::AltModifier); - QVERIFY(v); // value of v should not change - QTest::keyClick(m_mainWindow.data(), Qt::Key_M, Qt::ControlModifier | Qt::ShiftModifier | Qt::AltModifier); - QVERIFY(!v); - disconnect(a, nullptr, nullptr, nullptr); -} - void TestGui::testAutoType() { // Clear entries from root group to guarantee order @@ -2180,7 +1717,7 @@ void TestGui::testAutoType() QVERIFY(entryNewWidget->isEnabled()); QTest::mouseClick(entryNewWidget, Qt::LeftButton); - QCOMPARE(m_dbWidget->currentMode(), DatabaseWidget::Mode::EditEntryMode); + QCOMPARE(m_dbWidget->currentMode(), DatabaseWidget::Mode::EditMode); auto* editEntryWidget = m_dbWidget->findChild("editEntryWidget"); QVERIFY(editEntryWidget); @@ -2197,7 +1734,7 @@ void TestGui::testAutoType() QTest::keyClicks(usernameComboBox, "AutocompletionUsername"); // 1.b) Uncheck Auto-Type checkbox - editEntryWidget->switchToPage(EditEntryWidget::Page::AutoType); + editEntryWidget->setCurrentPage(3); auto* enableAutoTypeButton = editEntryWidget->findChild("enableButton"); QVERIFY(enableAutoTypeButton); QVERIFY(enableAutoTypeButton->isVisible()); @@ -2207,7 +1744,7 @@ void TestGui::testAutoType() QVERIFY(!enableAutoTypeButton->isChecked()); // 1.c) Save changes - editEntryWidget->switchToPage(EditEntryWidget::Page::Main); + editEntryWidget->setCurrentPage(0); auto* editEntryWidgetButtonBox = editEntryWidget->findChild("buttonBox"); QTest::mouseClick(editEntryWidgetButtonBox->button(QDialogButtonBox::Ok), Qt::LeftButton); @@ -2215,32 +1752,32 @@ void TestGui::testAutoType() // 2.a) Click the new entry button and set the title QTest::mouseClick(entryNewWidget, Qt::LeftButton); - QCOMPARE(m_dbWidget->currentMode(), DatabaseWidget::Mode::EditEntryMode); + QCOMPARE(m_dbWidget->currentMode(), DatabaseWidget::Mode::EditMode); QTest::keyClicks(titleEdit, "2. Entry With Default Auto-Type Sequence"); QTest::mouseClick(usernameComboBox, Qt::LeftButton); QTest::keyClicks(usernameComboBox, "AutocompletionUsername"); // 2.b) Confirm AutoType is enabled and default - editEntryWidget->switchToPage(EditEntryWidget::Page::AutoType); + editEntryWidget->setCurrentPage(3); QVERIFY(enableAutoTypeButton->isChecked()); auto* inheritSequenceButton = editEntryWidget->findChild("inheritSequenceButton"); QVERIFY(inheritSequenceButton->isChecked()); // 2.c) Save changes - editEntryWidget->switchToPage(EditEntryWidget::Page::Main); + editEntryWidget->setCurrentPage(0); QTest::mouseClick(editEntryWidgetButtonBox->button(QDialogButtonBox::Ok), Qt::LeftButton); // 3. Create an entry with custom Auto-Type sequence // 3.a) Click the new entry button and set the title QTest::mouseClick(entryNewWidget, Qt::LeftButton); - QCOMPARE(m_dbWidget->currentMode(), DatabaseWidget::Mode::EditEntryMode); + QCOMPARE(m_dbWidget->currentMode(), DatabaseWidget::Mode::EditMode); QTest::keyClicks(titleEdit, "3. Entry With Custom Auto-Type Sequence"); QTest::mouseClick(usernameComboBox, Qt::LeftButton); QTest::keyClicks(usernameComboBox, "AutocompletionUsername"); // 3.b) Confirm AutoType is enabled and set custom sequence - editEntryWidget->switchToPage(EditEntryWidget::Page::AutoType); + editEntryWidget->setCurrentPage(3); QVERIFY(enableAutoTypeButton->isChecked()); auto* customSequenceButton = editEntryWidget->findChild("customSequenceButton"); QTest::mouseClick(customSequenceButton, Qt::LeftButton); @@ -2253,7 +1790,7 @@ void TestGui::testAutoType() QTest::keyClicks(sequenceEdit, "{USERNAME}{TAB}{TAB}{PASSWORD}{ENTER}"); // 3.c) Save changes - editEntryWidget->switchToPage(EditEntryWidget::Page::Main); + editEntryWidget->setCurrentPage(0); QTest::mouseClick(editEntryWidgetButtonBox->button(QDialogButtonBox::Ok), Qt::LeftButton); QApplication::processEvents(); @@ -2311,155 +1848,6 @@ void TestGui::testAutoType() entryView->selectionModel()->clearSelection(); } -void TestGui::testMenuActionStates() -{ - auto isActionEnabled = [this](const QString& actionName) -> bool { - auto action = m_mainWindow->findChild(actionName); - if (!action) { - QTest::qFail(qPrintable(QString("Invalid action specified: %1").arg(actionName)), __FILE__, __LINE__); - return false; - } - return action->isEnabled(); - }; - - // Start with database open and unlocked - qInfo("Actions Test: Database open and unlocked"); - - QVERIFY(isActionEnabled("actionEntryNew")); - QVERIFY(isActionEnabled("actionGroupNew")); - QVERIFY(isActionEnabled("actionDatabaseSaveAs")); - QVERIFY(isActionEnabled("actionDatabaseClose")); - QVERIFY(isActionEnabled("actionDatabaseMerge")); - QVERIFY(isActionEnabled("actionDatabaseSettings")); - QVERIFY(isActionEnabled("actionReports")); - QVERIFY(isActionEnabled("actionLockDatabase")); - QVERIFY(isActionEnabled("actionLockAllDatabases")); - QVERIFY(isActionEnabled("actionImport")); - QVERIFY(isActionEnabled("actionExportCsv")); - QVERIFY(isActionEnabled("actionSettings")); - QVERIFY(isActionEnabled("actionPasswordGenerator")); - - // Edit entry actions - qInfo("Actions Test: Editing an entry"); - - triggerAction("actionEntryEdit"); - - QVERIFY(!isActionEnabled("actionEntryNew")); - QVERIFY(isActionEnabled("actionEntryCopyUsername")); - QVERIFY(!isActionEnabled("actionEntrySetupTotp")); - QVERIFY(!isActionEnabled("actionGroupNew")); - QVERIFY(isActionEnabled("actionDatabaseSaveAs")); - QVERIFY(isActionEnabled("actionDatabaseClose")); - QVERIFY(!isActionEnabled("actionDatabaseMerge")); - QVERIFY(!isActionEnabled("actionDatabaseSettings")); - QVERIFY(!isActionEnabled("actionReports")); - QVERIFY(isActionEnabled("actionLockDatabase")); - QVERIFY(isActionEnabled("actionLockAllDatabases")); - QVERIFY(isActionEnabled("actionSettings")); - QVERIFY(isActionEnabled("actionPasswordGenerator")); - - // Special Case - Recycle Bin - qInfo("Actions Test: Special case - Recycle Bin"); - - m_dbWidget->switchToMainView(); - QApplication::processEvents(); - - QVERIFY(m_db->metadata()->recycleBinEnabled()); - triggerAction("actionEntryDelete"); - m_dbWidget->groupView()->setCurrentGroup(m_db->metadata()->recycleBin()); - QVERIFY(m_dbWidget->isRecycleBinSelected()); - QVERIFY(isActionEnabled("actionEntryRestore")); - QVERIFY(isActionEnabled("actionGroupEmptyRecycleBin")); - QVERIFY(!isActionEnabled("actionEntryNew")); - QVERIFY(!isActionEnabled("actionEntryClone")); - QVERIFY(!isActionEnabled("actionGroupNew")); - QVERIFY(!isActionEnabled("actionGroupClone")); - - // Database Settings - qInfo("Actions Test: Database settings"); - triggerAction("actionDatabaseSettings"); - - QVERIFY(!isActionEnabled("actionEntryNew")); - QVERIFY(!isActionEnabled("actionEntrySetupTotp")); - QVERIFY(!isActionEnabled("actionGroupNew")); - QVERIFY(isActionEnabled("actionDatabaseSaveAs")); - QVERIFY(isActionEnabled("actionDatabaseClose")); - QVERIFY(!isActionEnabled("actionDatabaseMerge")); - QVERIFY(isActionEnabled("actionDatabaseSettings")); - QVERIFY(isActionEnabled("actionDatabaseSecurity")); - QVERIFY(!isActionEnabled("actionReports")); - QVERIFY(isActionEnabled("actionLockDatabase")); - QVERIFY(isActionEnabled("actionSettings")); - QVERIFY(isActionEnabled("actionPasswordGenerator")); - - // Database Reports - qInfo("Actions Test: Database reports"); - - triggerAction("actionDatabaseSettings"); - triggerAction("actionReports"); - - QVERIFY(!isActionEnabled("actionEntryNew")); - QVERIFY(!isActionEnabled("actionEntrySetupTotp")); - QVERIFY(!isActionEnabled("actionGroupNew")); - QVERIFY(isActionEnabled("actionDatabaseSaveAs")); - QVERIFY(isActionEnabled("actionDatabaseClose")); - QVERIFY(!isActionEnabled("actionDatabaseMerge")); - QVERIFY(!isActionEnabled("actionDatabaseSettings")); - QVERIFY(!isActionEnabled("actionDatabaseSecurity")); - QVERIFY(isActionEnabled("actionReports")); - QVERIFY(isActionEnabled("actionLockDatabase")); - QVERIFY(isActionEnabled("actionSettings")); - QVERIFY(isActionEnabled("actionPasswordGenerator")); - - // Application Settings - qInfo("Actions Test: Application settings"); - - triggerAction("actionSettings"); - - QVERIFY(!isActionEnabled("actionDatabaseSettings")); - QVERIFY(!isActionEnabled("actionDatabaseSecurity")); - QVERIFY(!isActionEnabled("actionReports")); - QVERIFY(isActionEnabled("actionSettings")); - QVERIFY(isActionEnabled("actionPasswordGenerator")); - - // Locked Database - qInfo("Actions Test: Database locked"); - - triggerAction("actionSettings"); - MessageBox::setNextAnswer(MessageBox::Discard); - triggerAction("actionLockDatabase"); - - QVERIFY(!isActionEnabled("actionEntryNew")); - QVERIFY(!isActionEnabled("actionGroupNew")); - QVERIFY(!isActionEnabled("actionDatabaseSaveAs")); - QVERIFY(isActionEnabled("actionDatabaseClose")); - QVERIFY(!isActionEnabled("actionDatabaseMerge")); - QVERIFY(!isActionEnabled("actionDatabaseSettings")); - QVERIFY(!isActionEnabled("actionReports")); - QVERIFY(!isActionEnabled("actionLockDatabase")); - QVERIFY(!isActionEnabled("actionLockAllDatabases")); - QVERIFY(isActionEnabled("actionSettings")); - QVERIFY(isActionEnabled("actionPasswordGenerator")); - - // Welcome Screen - qInfo("Actions Test: Welcome screen"); - - triggerAction("actionDatabaseClose"); - - QVERIFY(!isActionEnabled("actionEntryNew")); - QVERIFY(!isActionEnabled("actionGroupNew")); - QVERIFY(!isActionEnabled("actionDatabaseSaveAs")); - QVERIFY(!isActionEnabled("actionDatabaseClose")); - QVERIFY(!isActionEnabled("actionDatabaseMerge")); - QVERIFY(!isActionEnabled("actionDatabaseSettings")); - QVERIFY(!isActionEnabled("actionReports")); - QVERIFY(!isActionEnabled("actionLockDatabase")); - QVERIFY(!isActionEnabled("actionLockAllDatabases")); - QVERIFY(isActionEnabled("actionImport")); - QVERIFY(isActionEnabled("actionSettings")); - QVERIFY(isActionEnabled("actionPasswordGenerator")); -} - void TestGui::addCannedEntries() { // Find buttons @@ -2534,8 +1922,8 @@ void TestGui::checkStatusBarText(const QString& textFragment) void TestGui::triggerAction(const QString& name) { auto* action = m_mainWindow->findChild(name); - QVERIFY2(action, qPrintable(QString("Action doesn't exist: %1").arg(name))); - QVERIFY2(action->isEnabled(), qPrintable(QString("Action is disabled: %1").arg(name))); + QVERIFY(action); + QVERIFY(action->isEnabled()); action->trigger(); QApplication::processEvents(); } diff --git a/tests/gui/TestGui.h b/tests/gui/TestGui.h index 514f7ce95..c631e5bdc 100644 --- a/tests/gui/TestGui.h +++ b/tests/gui/TestGui.h @@ -40,9 +40,6 @@ private slots: void testSettingsDefaultTabOrder(); void testCreateDatabase(); void testMergeDatabase(); - void testRemoteSyncDatabaseSameKey(); - void testRemoteSyncDatabaseRequiresPassword(); - void testOpenRemoteDatabase(); void testAutoreloadDatabase(); void testTabs(); void testEditEntry(); @@ -64,13 +61,12 @@ private slots: void testSaveBackupPath(); void testSaveBackupPath_data(); void testDatabaseSettings(); + void testKeePass1Import(); void testDatabaseLocking(); void testDragAndDropKdbxFiles(); void testSortGroups(); void testAutoType(); void testTrayRestoreHide(); - void testShortcutConfig(); - void testMenuActionStates(); private: void addCannedEntries(); @@ -86,10 +82,9 @@ private: void clickIndex(const QModelIndex& index, QAbstractItemView* view, Qt::MouseButton button, - Qt::KeyboardModifiers stateKey = {}); + Qt::KeyboardModifiers stateKey = 0); void checkSaveDatabase(); void checkStatusBarText(const QString& textFragment); - void prepareAndTriggerRemoteSync(); QScopedPointer m_mainWindow; QPointer m_statusBarLabel; diff --git a/tests/gui/TestGuiBrowser.cpp b/tests/gui/TestGuiBrowser.cpp index 26fd72690..075d49dc9 100644 --- a/tests/gui/TestGuiBrowser.cpp +++ b/tests/gui/TestGuiBrowser.cpp @@ -41,8 +41,10 @@ int main(int argc, char* argv[]) { +#if QT_VERSION >= QT_VERSION_CHECK(5, 6, 0) QApplication::setAttribute(Qt::AA_EnableHighDpiScaling); QGuiApplication::setAttribute(Qt::AA_UseHighDpiPixmaps); +#endif Application app(argc, argv); app.setApplicationName("KeePassXC"); app.setApplicationVersion(KEEPASSXC_VERSION); @@ -58,17 +60,16 @@ int main(int argc, char* argv[]) void TestGuiBrowser::initTestCase() { QVERIFY(Crypto::init()); - // Create temporary config file - Config::createConfigFromFile(TemporaryFile::createTempConfigFile(), {}); + Config::createTempFileInstance(); // Disable autosave so we can test the modified file indicator config()->set(Config::AutoSaveAfterEveryChange, false); config()->set(Config::AutoSaveOnExit, false); // Enable the tray icon so we can test hiding/restoring the windowQByteArray config()->set(Config::GUI_ShowTrayIcon, true); + // Disable advanced settings mode (activate within individual tests to test advanced settings) + config()->set(Config::GUI_AdvancedSettings, false); // Disable the update check first time alert config()->set(Config::UpdateCheckMessageShown, true); - // Disable quick unlock - config()->set(Config::Security_QuickUnlock, false); m_mainWindow.reset(new MainWindow()); m_tabWidget = m_mainWindow->findChild("tabWidget"); @@ -143,7 +144,7 @@ void TestGuiBrowser::testEntrySettings() auto* entryEditAction = m_mainWindow->findChild("actionEntryEdit"); QWidget* entryEditWidget = toolBar->widgetForAction(entryEditAction); QTest::mouseClick(entryEditWidget, Qt::LeftButton); - QCOMPARE(m_dbWidget->currentMode(), DatabaseWidget::Mode::EditEntryMode); + QCOMPARE(m_dbWidget->currentMode(), DatabaseWidget::Mode::EditMode); auto* editEntryWidget = m_dbWidget->findChild("editEntryWidget"); // Switch to Properties page and select all rows from the custom data table @@ -187,7 +188,7 @@ void TestGuiBrowser::testAdditionalURLs() auto* entryEditAction = m_mainWindow->findChild("actionEntryEdit"); QWidget* entryEditWidget = toolBar->widgetForAction(entryEditAction); QTest::mouseClick(entryEditWidget, Qt::LeftButton); - QCOMPARE(m_dbWidget->currentMode(), DatabaseWidget::Mode::EditEntryMode); + QCOMPARE(m_dbWidget->currentMode(), DatabaseWidget::Mode::EditMode); auto* editEntryWidget = m_dbWidget->findChild("editEntryWidget"); // Switch to Browser Integration page and add three URL's diff --git a/tests/gui/TestGuiBrowser.h b/tests/gui/TestGuiBrowser.h index 4d88a3a75..d34a97f01 100644 --- a/tests/gui/TestGuiBrowser.h +++ b/tests/gui/TestGuiBrowser.h @@ -46,7 +46,7 @@ private: void clickIndex(const QModelIndex& index, QAbstractItemView* view, Qt::MouseButton button, - Qt::KeyboardModifiers stateKey = {}); + Qt::KeyboardModifiers stateKey = 0); QScopedPointer m_mainWindow; QPointer m_tabWidget; diff --git a/tests/gui/TestGuiFdoSecrets.cpp b/tests/gui/TestGuiFdoSecrets.cpp index fc7e218ea..0f9d62040 100644 --- a/tests/gui/TestGuiFdoSecrets.cpp +++ b/tests/gui/TestGuiFdoSecrets.cpp @@ -26,7 +26,6 @@ #include "config-keepassx-tests.h" -#include "core/Global.h" #include "core/Tools.h" #include "crypto/Crypto.h" #include "gui/Application.h" @@ -47,8 +46,10 @@ int main(int argc, char* argv[]) { +#if QT_VERSION >= QT_VERSION_CHECK(5, 6, 0) QApplication::setAttribute(Qt::AA_EnableHighDpiScaling); QGuiApplication::setAttribute(Qt::AA_UseHighDpiPixmaps); +#endif Application app(argc, argv); app.setApplicationName("KeePassXC"); app.setApplicationVersion(KEEPASSXC_VERSION); @@ -119,8 +120,8 @@ class FakeClient : public DBusClient public: explicit FakeClient(DBusMgr* dbus) : DBusClient( - dbus, - {QStringLiteral("local"), 0, true, {ProcInfo{0, 0, QStringLiteral("fake-client"), QString{}, QString{}}}}) + dbus, + {QStringLiteral("local"), 0, true, {ProcInfo{0, 0, QStringLiteral("fake-client"), QString{}, QString{}}}}) { } }; @@ -136,14 +137,11 @@ TestGuiFdoSecrets::~TestGuiFdoSecrets() = default; void TestGuiFdoSecrets::initTestCase() { VERIFY(Crypto::init()); - // Create temporary config file - Config::createConfigFromFile(TemporaryFile::createTempConfigFile(), {}); + Config::createTempFileInstance(); config()->set(Config::AutoSaveAfterEveryChange, false); config()->set(Config::AutoSaveOnExit, false); config()->set(Config::GUI_ShowTrayIcon, true); config()->set(Config::UpdateCheckMessageShown, true); - // Disable quick unlock - config()->set(Config::Security_QuickUnlock, false); // Disable secret service integration (activate within individual tests to test the plugin) FdoSecrets::settings()->setEnabled(false); // activate within individual tests @@ -420,7 +418,7 @@ void TestGuiFdoSecrets::testServiceSearchBlockingUnlockMultiple() VERIFY(service); // when there are multiple locked databases, - // repeatedly show the dialog until there is at least one unlocked collection + // repeatly show the dialog until there is at least one unlocked collection FdoSecrets::settings()->setUnlockBeforeSearch(true); // when only unlocking the one with no exposed group, a second dialog is shown @@ -1248,7 +1246,7 @@ void TestGuiFdoSecrets::testItemReplace() { DBUS_GET2(unlocked, locked, service->SearchItems({{"application", "fdosecrets-test"}})); QSet expected{QDBusObjectPath(item1->path()), QDBusObjectPath(item2->path())}; - COMPARE(Tools::asSet(unlocked), expected); + COMPARE(QSet::fromList(unlocked), expected); } QSignalSpy spyItemCreated(coll.data(), SIGNAL(ItemCreated(QDBusObjectPath))); @@ -1265,7 +1263,7 @@ void TestGuiFdoSecrets::testItemReplace() // there are still 2 entries DBUS_GET2(unlocked, locked, service->SearchItems({{"application", "fdosecrets-test"}})); QSet expected{QDBusObjectPath(item1->path()), QDBusObjectPath(item2->path())}; - COMPARE(Tools::asSet(unlocked), expected); + COMPARE(QSet::fromList(unlocked), expected); VERIFY(waitForSignal(spyItemCreated, 0)); // there may be multiple changed signals, due to each item attribute is set separately @@ -1291,7 +1289,7 @@ void TestGuiFdoSecrets::testItemReplace() QDBusObjectPath(item2->path()), QDBusObjectPath(item4->path()), }; - COMPARE(Tools::asSet(unlocked), expected); + COMPARE(QSet::fromList(unlocked), expected); VERIFY(waitForSignal(spyItemCreated, 1)); { @@ -1619,7 +1617,7 @@ void TestGuiFdoSecrets::testExposeSubgroup() for (const auto& itemPath : itemPaths) { exposedEntries << m_plugin->dbus()->pathToObject(itemPath)->backend(); } - COMPARE(exposedEntries, Tools::asSet(subgroup->entries())); + COMPARE(exposedEntries, QSet::fromList(subgroup->entries())); } void TestGuiFdoSecrets::testModifyingExposedGroup() @@ -1879,8 +1877,6 @@ bool TestGuiFdoSecrets::driveNewDatabaseWizard() tmpFile.close(); fileDialog()->setNextFileName(tmpFile.fileName()); - // click Continue on the warning due to weak password - MessageBox::setNextAnswer(MessageBox::ContinueWithWeakPass); wizard->accept(); tmpFile.remove(); diff --git a/tests/gui/attachments/TestAttachmentWidget.cpp b/tests/gui/attachments/TestAttachmentWidget.cpp deleted file mode 100644 index a0d17fcac..000000000 --- a/tests/gui/attachments/TestAttachmentWidget.cpp +++ /dev/null @@ -1,94 +0,0 @@ -#include "TestAttachmentWidget.h" - -#include - -#include -#include -#include - -#include -#include -#include - -void TestAttachmentsWidget::initTestCase() -{ - m_attachmentWidget.reset(new AttachmentWidget()); - - QVERIFY(m_attachmentWidget); -} - -void TestAttachmentsWidget::testTextAttachment() -{ - for (const auto& attachment : {attachments::Attachment{.name = "Test.txt", .data = "Test"}, - attachments::Attachment{.name = "Test.html", .data = "

    test

    "}, - attachments::Attachment{.name = "Test.md", .data = "**bold**"}}) { - for (auto mode : {attachments::OpenMode::ReadWrite, attachments::OpenMode::ReadOnly}) { - m_attachmentWidget->openAttachment(attachment, mode); - - QCoreApplication::processEvents(); - - auto layout = m_attachmentWidget->findChild("verticalLayout"); - QVERIFY(layout); - - QCOMPARE(layout->count(), 1); - - auto item = layout->itemAt(0); - QVERIFY(item); - - QVERIFY(qobject_cast(item->widget())); - - auto actualAttachment = m_attachmentWidget->getAttachment(); - QCOMPARE(actualAttachment.name, attachment.name); - QCOMPARE(actualAttachment.data, attachment.data); - } - } -} - -void TestAttachmentsWidget::testImageAttachment() -{ - const auto Attachment = attachments::Attachment{.name = "Test.jpg", .data = QByteArray::fromHex("FFD8FF")}; - - m_attachmentWidget->openAttachment(Attachment, attachments::OpenMode::ReadWrite); - - QCoreApplication::processEvents(); - - auto layout = m_attachmentWidget->findChild("verticalLayout"); - QVERIFY(layout); - - QCOMPARE(layout->count(), 1); - - auto item = layout->itemAt(0); - QVERIFY(item); - - QVERIFY(qobject_cast(item->widget())); - - auto actualAttachment = m_attachmentWidget->getAttachment(); - QCOMPARE(actualAttachment.name, Attachment.name); - QCOMPARE(actualAttachment.data, Attachment.data); -} - -void TestAttachmentsWidget::testUnknownAttachment() -{ - const auto Attachment = attachments::Attachment{.name = "Test", .data = QByteArray{"ID3"}}; - - m_attachmentWidget->openAttachment(Attachment, attachments::OpenMode::ReadWrite); - - QCoreApplication::processEvents(); - - auto layout = m_attachmentWidget->findChild("verticalLayout"); - QVERIFY(layout); - - QCOMPARE(layout->count(), 1); - - auto item = layout->itemAt(0); - QVERIFY(item); - - auto label = qobject_cast(item->widget()); - QVERIFY(label); - - QVERIFY(!label->text().isEmpty()); - - auto actualAttachment = m_attachmentWidget->getAttachment(); - QCOMPARE(actualAttachment.name, Attachment.name); - QCOMPARE(actualAttachment.data, Attachment.data); -} diff --git a/tests/gui/attachments/TestAttachmentWidget.h b/tests/gui/attachments/TestAttachmentWidget.h deleted file mode 100644 index 4367234cd..000000000 --- a/tests/gui/attachments/TestAttachmentWidget.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (C) 2025 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 . - */ - -#pragma once - -#include - -#include -#include - -class TestAttachmentsWidget : public QObject -{ - Q_OBJECT - -private slots: - void initTestCase(); - - void testTextAttachment(); - void testImageAttachment(); - void testUnknownAttachment(); - -private: - QScopedPointer m_attachmentWidget; -}; diff --git a/tests/gui/attachments/TestAttachmentsGui.cpp b/tests/gui/attachments/TestAttachmentsGui.cpp deleted file mode 100644 index b0f29dfc2..000000000 --- a/tests/gui/attachments/TestAttachmentsGui.cpp +++ /dev/null @@ -1,46 +0,0 @@ -#include - -#include "TestAttachmentWidget.h" -#include "TestEditEntryAttachmentsDialog.h" -#include "TestImageAttachmentsView.h" -#include "TestImageAttachmentsWidget.h" -#include "TestPreviewEntryAttachmentsDialog.h" -#include "TestTextAttachmentsEditWidget.h" -#include "TestTextAttachmentsPreviewWidget.h" -#include "TestTextAttachmentsWidget.h" - -#include -#include - -int main(int argc, char* argv[]) -{ - QApplication::setAttribute(Qt::AA_EnableHighDpiScaling); - QGuiApplication::setAttribute(Qt::AA_UseHighDpiPixmaps); - Application app(argc, argv); - app.setApplicationName("KeePassXC"); - app.setApplicationVersion(KEEPASSXC_VERSION); - app.setQuitOnLastWindowClosed(false); - app.setAttribute(Qt::AA_Use96Dpi, true); - app.applyTheme(); - - TestPreviewEntryAttachmentsDialog previewDialogTest{}; - TestEditEntryAttachmentsDialog editDialogTest{}; - TestTextAttachmentsWidget textAttachmentsWidget{}; - TestTextAttachmentsPreviewWidget textPreviewWidget{}; - TestTextAttachmentsEditWidget textEditWidget{}; - TestImageAttachmentsWidget imageWidget{}; - TestImageAttachmentsView imageView{}; - TestAttachmentsWidget attachmentWidget{}; - - int result = 0; - result |= QTest::qExec(&previewDialogTest, argc, argv); - result |= QTest::qExec(&editDialogTest, argc, argv); - result |= QTest::qExec(&textAttachmentsWidget, argc, argv); - result |= QTest::qExec(&textPreviewWidget, argc, argv); - result |= QTest::qExec(&textEditWidget, argc, argv); - result |= QTest::qExec(&imageWidget, argc, argv); - result |= QTest::qExec(&imageView, argc, argv); - result |= QTest::qExec(&attachmentWidget, argc, argv); - - return result; -} diff --git a/tests/gui/attachments/TestEditEntryAttachmentsDialog.cpp b/tests/gui/attachments/TestEditEntryAttachmentsDialog.cpp deleted file mode 100644 index 0353b6a6f..000000000 --- a/tests/gui/attachments/TestEditEntryAttachmentsDialog.cpp +++ /dev/null @@ -1,95 +0,0 @@ -#include "TestEditEntryAttachmentsDialog.h" - -#include - -#include - -#include -#include -#include -#include -#include -#include -#include - -void TestEditEntryAttachmentsDialog::initTestCase() -{ - m_editDialog.reset(new EditEntryAttachmentsDialog()); - - QVERIFY(m_editDialog); -} - -void TestEditEntryAttachmentsDialog::testSetAttachment() -{ - const attachments::Attachment Test{.name = "text.txt", .data = "Test"}; - m_editDialog->setAttachment(Test); - - QCoreApplication::processEvents(); - - QVERIFY2(m_editDialog->windowTitle().contains(Test.name), "Expected file name in the title"); - - auto layout = m_editDialog->findChild("verticalLayout"); - QVERIFY2(layout, "QVBoxLayout not found"); - QCOMPARE(layout->count(), 2); - - auto widget = qobject_cast(layout->itemAt(0)->widget()); - QVERIFY2(widget, "Expected AttachmentWidget"); - - auto sizePolicy = widget->sizePolicy(); - QCOMPARE(sizePolicy.horizontalPolicy(), QSizePolicy::Expanding); - QCOMPARE(sizePolicy.verticalPolicy(), QSizePolicy::Expanding); - - auto attachments = widget->getAttachment(); - - QCOMPARE(attachments.name, Test.name); - QCOMPARE(attachments.data, Test.data); -} - -void TestEditEntryAttachmentsDialog::testSetAttachmentTwice() -{ - const attachments::Attachment TestText{.name = "text.txt", .data = "Test"}; - m_editDialog->setAttachment(TestText); - - QCoreApplication::processEvents(); - - const attachments::Attachment TestImage{ - .name = "test.jpg", .data = QByteArray::fromHex("FFD8FFE000104A46494600010101006000600000FFD9")}; - m_editDialog->setAttachment(TestImage); - - QCoreApplication::processEvents(); - - QVERIFY2(m_editDialog->windowTitle().contains(TestImage.name), "Expected file name in the title"); - - auto layout = m_editDialog->findChild("verticalLayout"); - QVERIFY2(layout, "QVBoxLayout not found"); - QCOMPARE(layout->count(), 2); - - auto widget = qobject_cast(layout->itemAt(0)->widget()); - QVERIFY2(widget, "Expected AttachmentWidget"); - - auto attachments = widget->getAttachment(); - - QCOMPARE(attachments.name, TestImage.name); - QCOMPARE(attachments.data, TestImage.data); -} - -void TestEditEntryAttachmentsDialog::testBottonsBox() -{ - const attachments::Attachment TestText{.name = "text.txt", .data = "Test"}; - m_editDialog->setAttachment(TestText); - - QCoreApplication::processEvents(); - - QSignalSpy acceptButton(m_editDialog.data(), &PreviewEntryAttachmentsDialog::accepted); - QSignalSpy closeButton(m_editDialog.data(), &PreviewEntryAttachmentsDialog::rejected); - - auto buttonsBox = m_editDialog->findChild(); - QVERIFY2(buttonsBox, "ButtonsBox not found"); - - for (auto button : buttonsBox->buttons()) { - QTest::mouseClick(button, Qt::LeftButton); - } - - QCOMPARE(acceptButton.count(), 1); - QCOMPARE(closeButton.count(), 1); -} diff --git a/tests/gui/attachments/TestEditEntryAttachmentsDialog.h b/tests/gui/attachments/TestEditEntryAttachmentsDialog.h deleted file mode 100644 index 76f3ac2ff..000000000 --- a/tests/gui/attachments/TestEditEntryAttachmentsDialog.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright (C) 2025 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 . - */ - -#pragma once - -#include "EditEntryAttachmentsDialog.h" - -#include -#include - -class TestEditEntryAttachmentsDialog : public QObject -{ - Q_OBJECT - -private slots: - void initTestCase(); - - void testSetAttachment(); - void testSetAttachmentTwice(); - - void testBottonsBox(); - -private: - QScopedPointer m_editDialog{}; -}; diff --git a/tests/gui/attachments/TestImageAttachmentsView.cpp b/tests/gui/attachments/TestImageAttachmentsView.cpp deleted file mode 100644 index 0d3ffed00..000000000 --- a/tests/gui/attachments/TestImageAttachmentsView.cpp +++ /dev/null @@ -1,76 +0,0 @@ -#include "TestImageAttachmentsView.h" - -#include - -#include -#include -#include -#include -#include - -void TestImageAttachmentsView::initTestCase() -{ - m_view.reset(new ImageAttachmentsView()); - - // Generate the black rectange. - QImage image(1000, 1000, QImage::Format_RGB32); - image.fill(Qt::black); - - auto scene = new QGraphicsScene(); - scene->addPixmap(QPixmap::fromImage(image)); - - m_view->setScene(scene); - m_view->show(); - - QCoreApplication::processEvents(); -} - -void TestImageAttachmentsView::testEmitWheelEvent() -{ - QSignalSpy ctrlWheelEvent{m_view.data(), &ImageAttachmentsView::ctrlWheelEvent}; - - QPoint center = m_view->rect().center(); - - m_view->setFocus(); - - QWheelEvent event(center, // local pos - m_view->mapToGlobal(center), // global pos - QPoint(0, 0), - QPoint(0, 120), - Qt::NoButton, - Qt::ControlModifier, - Qt::ScrollBegin, - false); - - QCoreApplication::sendEvent(m_view->viewport(), &event); - - QCOMPARE(ctrlWheelEvent.count(), 1); -} - -void TestImageAttachmentsView::testEnableFit() -{ - m_view->enableAutoFitInView(); - QVERIFY(m_view->isAutoFitInViewActivated()); - - const auto oldTransform = m_view->transform(); - - m_view->resize(m_view->size() + QSize(100, 100)); - - QCoreApplication::processEvents(); - - QVERIFY(m_view->transform() != oldTransform); -} - -void TestImageAttachmentsView::testDisableFit() -{ - m_view->disableAutoFitInView(); - QVERIFY(!m_view->isAutoFitInViewActivated()); - - const auto expectedTransform = m_view->transform(); - - m_view->resize(m_view->size() + QSize(100, 100)); - - QCoreApplication::processEvents(); - - QCOMPARE(m_view->transform(), expectedTransform); -} diff --git a/tests/gui/attachments/TestImageAttachmentsView.h b/tests/gui/attachments/TestImageAttachmentsView.h deleted file mode 100644 index 06f8c58d3..000000000 --- a/tests/gui/attachments/TestImageAttachmentsView.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (C) 2025 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 . - */ - -#pragma once - -#include - -#include -#include - -class TestImageAttachmentsView : public QObject -{ - Q_OBJECT - -private slots: - void initTestCase(); - - void testEmitWheelEvent(); - void testEnableFit(); - void testDisableFit(); - -private: - QScopedPointer m_view{}; -}; diff --git a/tests/gui/attachments/TestImageAttachmentsWidget.cpp b/tests/gui/attachments/TestImageAttachmentsWidget.cpp deleted file mode 100644 index fc2d14e2d..000000000 --- a/tests/gui/attachments/TestImageAttachmentsWidget.cpp +++ /dev/null @@ -1,244 +0,0 @@ -#include "TestImageAttachmentsWidget.h" - -#include -#include - -#include -#include -#include -#include -#include - -void TestImageAttachmentsWidget::initTestCase() -{ - m_widget.reset(new ImageAttachmentsWidget()); - m_zoomCombobox = m_widget->findChild("zoomComboBox"); - QVERIFY(m_zoomCombobox); - - m_imageAttachmentsView = m_widget->findChild("imagesView"); - QVERIFY(m_imageAttachmentsView); - - // Generate the black rectange. - QImage image(1000, 1000, QImage::Format_RGB32); - image.fill(Qt::black); - - QByteArray imageBytes{}; - QBuffer buffer(&imageBytes); - buffer.open(QIODevice::WriteOnly); - - image.save(&buffer, "PNG"); - - m_widget->openAttachment({.name = "black.png", .data = std::move(imageBytes)}, attachments::OpenMode::ReadOnly); - - m_widget->show(); - - QCoreApplication::processEvents(); -} - -void TestImageAttachmentsWidget::testFitInView() -{ - QCOMPARE(m_zoomCombobox->currentText(), tr("Fit")); - QVERIFY(m_imageAttachmentsView->isAutoFitInViewActivated()); - - auto zoomFactor = m_imageAttachmentsView->transform(); - - m_widget->setMinimumSize(m_widget->size() + QSize{100, 100}); - - QCoreApplication::processEvents(); - - QVERIFY(zoomFactor != m_imageAttachmentsView->transform()); -} - -void TestImageAttachmentsWidget::testZoomCombobox() -{ - for (const auto zoom : {0.25, 0.5, 1.0, 2.0}) { - auto index = m_zoomCombobox->findData(zoom); - QVERIFY(index != -1); - - m_zoomCombobox->setCurrentIndex(index); - - QCoreApplication::processEvents(); - - QCOMPARE(m_imageAttachmentsView->transform(), QTransform::fromScale(zoom, zoom)); - } -} - -void TestImageAttachmentsWidget::testEditZoomCombobox() -{ - for (double i = 0.25; i < 5; i += 0.25) { - m_zoomCombobox->setCurrentText(QString::number(i * 100)); - - QCoreApplication::processEvents(); - - QCOMPARE(m_imageAttachmentsView->transform(), QTransform::fromScale(i, i)); - } -} - -void TestImageAttachmentsWidget::testEditWithPercentZoomCombobox() -{ - // Example 100 % - for (double i = 0.25; i < 5; i += 0.25) { - m_zoomCombobox->setCurrentText(QString("%1 %").arg(i * 100)); - - QCoreApplication::processEvents(); - - QCOMPARE(m_imageAttachmentsView->transform(), QTransform::fromScale(i, i)); - } - - // Example 100% - for (double i = 0.25; i < 5; i += 0.25) { - m_zoomCombobox->setCurrentText(QString("%1%").arg(i * 100)); - - QCoreApplication::processEvents(); - - QCOMPARE(m_imageAttachmentsView->transform(), QTransform::fromScale(i, i)); - } -} - -void TestImageAttachmentsWidget::testInvalidValueZoomCombobox() -{ - auto index = m_zoomCombobox->findData(1.0); - QVERIFY(index != -1); - - m_zoomCombobox->setCurrentIndex(index); - - QCoreApplication::processEvents(); - - const QTransform expectedTransform = m_imageAttachmentsView->transform(); - - for (const auto& invalidValue : {"Help", "3,4", "", ".", "% 100"}) { - m_zoomCombobox->setCurrentText(invalidValue); - - QCoreApplication::processEvents(); - - QCOMPARE(m_imageAttachmentsView->transform(), expectedTransform); - } -} - -void TestImageAttachmentsWidget::testZoomInByMouse() -{ - QPoint center = m_imageAttachmentsView->rect().center(); - - // Set zoom: 100% - auto index = m_zoomCombobox->findData(1.0); - QVERIFY(index != -1); - m_zoomCombobox->setCurrentIndex(index); - - m_imageAttachmentsView->setFocus(); - - QCoreApplication::processEvents(); - - const auto transform = m_imageAttachmentsView->transform(); - - QWheelEvent event(center, // local pos - m_imageAttachmentsView->mapToGlobal(center), // global pos - QPoint(0, 0), - QPoint(0, 120), - Qt::NoButton, - Qt::ControlModifier, - Qt::ScrollBegin, - false); - - QCoreApplication::sendEvent(m_imageAttachmentsView->viewport(), &event); - - QCoreApplication::processEvents(); - - QTransform t = m_imageAttachmentsView->transform(); - QVERIFY(t.m11() > transform.m11()); - QVERIFY(t.m22() > transform.m22()); -} - -void TestImageAttachmentsWidget::testZoomOutByMouse() -{ - QPoint center = m_imageAttachmentsView->rect().center(); - - // Set zoom: 100% - auto index = m_zoomCombobox->findData(1.0); - QVERIFY(index != -1); - m_zoomCombobox->setCurrentIndex(index); - - m_imageAttachmentsView->setFocus(); - - QCoreApplication::processEvents(); - - const auto transform = m_imageAttachmentsView->transform(); - - QWheelEvent event(center, // local pos - center, // global pos - QPoint(0, 0), - QPoint(0, -120), - Qt::NoButton, - Qt::ControlModifier, - Qt::ScrollBegin, - true); - - QCoreApplication::sendEvent(m_imageAttachmentsView->viewport(), &event); - - QCoreApplication::processEvents(); - - QTransform t = m_imageAttachmentsView->transform(); - QVERIFY(t.m11() < transform.m11()); - QVERIFY(t.m22() < transform.m22()); -} - -void TestImageAttachmentsWidget::testZoomLowerBound() -{ - m_widget->setMinimumSize(100, 100); - - QCoreApplication::processEvents(); - - auto minFactor = m_imageAttachmentsView->calculateFitInViewFactor(); - - // Set size less then minFactor - m_zoomCombobox->setCurrentText(QString::number((minFactor * 100.0) / 2)); - - QCoreApplication::processEvents(); - - const auto expectTransform = m_imageAttachmentsView->transform(); - - QPoint center = m_imageAttachmentsView->rect().center(); - - QWheelEvent event(center, // local pos - center, // global pos - QPoint(0, 0), - QPoint(0, -120), - Qt::NoButton, - Qt::ControlModifier, - Qt::ScrollBegin, - true); - - QCoreApplication::sendEvent(m_imageAttachmentsView->viewport(), &event); - - QCoreApplication::processEvents(); - - QCOMPARE(m_imageAttachmentsView->transform(), expectTransform); -} - -void TestImageAttachmentsWidget::testZoomUpperBound() -{ - m_widget->setMinimumSize(100, 100); - - // Set size less then minFactor - m_zoomCombobox->setCurrentText(QString::number(500)); - - QCoreApplication::processEvents(); - - const auto expectTransform = m_imageAttachmentsView->transform(); - - QPoint center = m_imageAttachmentsView->rect().center(); - - QWheelEvent event(center, // local pos - center, // global pos - QPoint(0, 0), - QPoint(0, 120), - Qt::NoButton, - Qt::ControlModifier, - Qt::ScrollBegin, - true); - - QCoreApplication::sendEvent(m_imageAttachmentsView->viewport(), &event); - - QCoreApplication::processEvents(); - - QCOMPARE(m_imageAttachmentsView->transform(), expectTransform); -} diff --git a/tests/gui/attachments/TestImageAttachmentsWidget.h b/tests/gui/attachments/TestImageAttachmentsWidget.h deleted file mode 100644 index 6f27be2f6..000000000 --- a/tests/gui/attachments/TestImageAttachmentsWidget.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (C) 2025 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 . - */ - -#pragma once - -#include - -#include -#include -#include - -class ImageAttachmentsView; - -class TestImageAttachmentsWidget : public QObject -{ - Q_OBJECT - -private slots: - void initTestCase(); - - void testFitInView(); - void testZoomCombobox(); - void testEditZoomCombobox(); - void testEditWithPercentZoomCombobox(); - void testInvalidValueZoomCombobox(); - void testZoomInByMouse(); - void testZoomOutByMouse(); - void testZoomLowerBound(); - void testZoomUpperBound(); - -private: - QScopedPointer m_widget{}; - QPointer m_zoomCombobox{}; - QPointer m_imageAttachmentsView{}; -}; diff --git a/tests/gui/attachments/TestPreviewEntryAttachmentsDialog.cpp b/tests/gui/attachments/TestPreviewEntryAttachmentsDialog.cpp deleted file mode 100644 index ca0d6ce20..000000000 --- a/tests/gui/attachments/TestPreviewEntryAttachmentsDialog.cpp +++ /dev/null @@ -1,97 +0,0 @@ -#include "TestPreviewEntryAttachmentsDialog.h" - -#include - -#include - -#include -#include -#include -#include -#include -#include -#include - -void TestPreviewEntryAttachmentsDialog::initTestCase() -{ - m_previewDialog.reset(new PreviewEntryAttachmentsDialog()); - - QVERIFY(m_previewDialog); -} - -void TestPreviewEntryAttachmentsDialog::testSetAttachment() -{ - const attachments::Attachment Test{.name = "text.txt", .data = "Test"}; - m_previewDialog->setAttachment(Test); - - QCoreApplication::processEvents(); - - QVERIFY2(m_previewDialog->windowTitle().contains(Test.name), "Expected file name in the title"); - - auto layout = m_previewDialog->findChild("verticalLayout"); - QVERIFY2(layout, "QVBoxLayout not found"); - QCOMPARE(layout->count(), 2); - - auto widget = qobject_cast(layout->itemAt(0)->widget()); - QVERIFY2(widget, "Expected AbstractAttachmentWidget"); - - auto sizePolicy = widget->sizePolicy(); - QCOMPARE(sizePolicy.horizontalPolicy(), QSizePolicy::Expanding); - QCOMPARE(sizePolicy.verticalPolicy(), QSizePolicy::Expanding); - - auto attachments = widget->getAttachment(); - - QCOMPARE(attachments.name, Test.name); - QCOMPARE(attachments.data, Test.data); -} - -void TestPreviewEntryAttachmentsDialog::testSetAttachmentTwice() -{ - const attachments::Attachment TestText{.name = "text.txt", .data = "Test"}; - m_previewDialog->setAttachment(TestText); - - QCoreApplication::processEvents(); - - const attachments::Attachment TestImage{ - .name = "test.jpg", .data = QByteArray::fromHex("FFD8FFE000104A46494600010101006000600000FFD9")}; - m_previewDialog->setAttachment(TestImage); - - QCoreApplication::processEvents(); - - QVERIFY2(m_previewDialog->windowTitle().contains(TestImage.name), "Expected file name in the title"); - - auto layout = m_previewDialog->findChild("verticalLayout"); - QVERIFY2(layout, "QVBoxLayout not found"); - QCOMPARE(layout->count(), 2); - - auto widget = qobject_cast(layout->itemAt(0)->widget()); - QVERIFY2(widget, "Expected AbstractAttachmentWidget"); - - auto attachments = widget->getAttachment(); - - QCOMPARE(attachments.name, TestImage.name); - QCOMPARE(attachments.data, TestImage.data); -} - -void TestPreviewEntryAttachmentsDialog::testBottonsBox() -{ - const attachments::Attachment TestText{.name = "text.txt", .data = "Test"}; - m_previewDialog->setAttachment(TestText); - - QCoreApplication::processEvents(); - - QSignalSpy saveButton(m_previewDialog.data(), &PreviewEntryAttachmentsDialog::saveAttachment); - QSignalSpy openButton(m_previewDialog.data(), &PreviewEntryAttachmentsDialog::openAttachment); - QSignalSpy closeButton(m_previewDialog.data(), &PreviewEntryAttachmentsDialog::rejected); - - auto buttonsBox = m_previewDialog->findChild("dialogButtons"); - QVERIFY2(buttonsBox, "ButtonsBox not found"); - - for (auto button : buttonsBox->buttons()) { - QTest::mouseClick(button, Qt::LeftButton); - } - - QCOMPARE(saveButton.count(), 1); - QCOMPARE(openButton.count(), 1); - QCOMPARE(closeButton.count(), 1); -} diff --git a/tests/gui/attachments/TestTextAttachmentsEditWidget.cpp b/tests/gui/attachments/TestTextAttachmentsEditWidget.cpp deleted file mode 100644 index 963533bd7..000000000 --- a/tests/gui/attachments/TestTextAttachmentsEditWidget.cpp +++ /dev/null @@ -1,49 +0,0 @@ -#include "TestTextAttachmentsEditWidget.h" - -#include - -#include -#include -#include -#include -#include -#include -#include - -void TestTextAttachmentsEditWidget::initTestCase() -{ - m_widget.reset(new TextAttachmentsEditWidget()); -} - -void TestTextAttachmentsEditWidget::testEmitTextChanged() -{ - QSignalSpy textChangedSignal(m_widget.data(), &TextAttachmentsEditWidget::textChanged); - - m_widget->openAttachment({.name = "test.txt", .data = {}}, attachments::OpenMode::ReadWrite); - - QCoreApplication::processEvents(); - - auto textEdit = m_widget->findChild("attachmentsTextEdit"); - QVERIFY(textEdit); - - const QByteArray NewText = "New test text"; - textEdit->setText(NewText); - - QVERIFY(textChangedSignal.count() > 0); -} - -void TestTextAttachmentsEditWidget::testEmitPreviewButtonClicked() -{ - QSignalSpy previwButtonClickedSignal(m_widget.data(), &TextAttachmentsEditWidget::previewButtonClicked); - - m_widget->openAttachment({.name = "test.txt", .data = {}}, attachments::OpenMode::ReadWrite); - - QCoreApplication::processEvents(); - - auto previewButton = m_widget->findChild("previewPushButton"); - QVERIFY(previewButton); - - QTest::mouseClick(previewButton, Qt::LeftButton); - - QCOMPARE(previwButtonClickedSignal.count(), 1); -} diff --git a/tests/gui/attachments/TestTextAttachmentsEditWidget.h b/tests/gui/attachments/TestTextAttachmentsEditWidget.h deleted file mode 100644 index 3d89f2a2e..000000000 --- a/tests/gui/attachments/TestTextAttachmentsEditWidget.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (C) 2025 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 . - */ - -#pragma once - -#include - -#include -#include - -class TestTextAttachmentsEditWidget : public QObject -{ - Q_OBJECT - -private slots: - void initTestCase(); - - void testEmitTextChanged(); - void testEmitPreviewButtonClicked(); - -private: - QScopedPointer m_widget{}; -}; diff --git a/tests/gui/attachments/TestTextAttachmentsPreviewWidget.cpp b/tests/gui/attachments/TestTextAttachmentsPreviewWidget.cpp deleted file mode 100644 index 0ddea53e3..000000000 --- a/tests/gui/attachments/TestTextAttachmentsPreviewWidget.cpp +++ /dev/null @@ -1,40 +0,0 @@ -#include "TestTextAttachmentsPreviewWidget.h" - -#include - -#include -#include - -void TestTextAttachmentsPreviewWidget::initTestCase() -{ - m_widget.reset(new TextAttachmentsPreviewWidget()); -} - -void TestTextAttachmentsPreviewWidget::testDetectMimeByFile() -{ - const auto combobox = m_widget->findChild("typeComboBox"); - QVERIFY(combobox); - - const attachments::Attachment Text{.name = "test.txt", .data = {}}; - m_widget->openAttachment(Text, attachments::OpenMode::ReadOnly); - - QCoreApplication::processEvents(); - - QCOMPARE(combobox->currentData().toInt(), TextAttachmentsPreviewWidget::PlainText); - - const attachments::Attachment Html{.name = "test.html", .data = {}}; - m_widget->openAttachment(Html, attachments::OpenMode::ReadOnly); - - QCoreApplication::processEvents(); - - QCOMPARE(combobox->currentData().toInt(), TextAttachmentsPreviewWidget::Html); - -#if (QT_VERSION >= QT_VERSION_CHECK(5, 14, 0)) - const attachments::Attachment Markdown{.name = "test.md", .data = {}}; - m_widget->openAttachment(Markdown, attachments::OpenMode::ReadOnly); - - QCoreApplication::processEvents(); - - QCOMPARE(combobox->currentData().toInt(), TextAttachmentsPreviewWidget::Markdown); -#endif -} diff --git a/tests/gui/attachments/TestTextAttachmentsWidget.cpp b/tests/gui/attachments/TestTextAttachmentsWidget.cpp deleted file mode 100644 index bba6f9840..000000000 --- a/tests/gui/attachments/TestTextAttachmentsWidget.cpp +++ /dev/null @@ -1,224 +0,0 @@ -#include "TestTextAttachmentsWidget.h" - -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -void TestTextAttachmentsWidget::initTestCase() -{ - m_textWidget.reset(new TextAttachmentsWidget()); -} - -void TestTextAttachmentsWidget::testInitTextWidget() -{ - auto splitter = m_textWidget->findChild(); - QVERIFY2(splitter, "Splitter not found"); - - QCOMPARE(splitter->count(), 2); - QVERIFY2(qobject_cast(splitter->widget(0)), "EditTextWidget not found"); - QVERIFY2(qobject_cast(splitter->widget(1)), "PreviewTextWidget not found"); -} - -void TestTextAttachmentsWidget::testTextReadWriteWidget() -{ - const attachments::Attachment Test{.name = "text.txt", .data = "Test"}; - m_textWidget->openAttachment(Test, attachments::OpenMode::ReadWrite); - m_textWidget->show(); - - QCoreApplication::processEvents(); - - auto splitter = m_textWidget->findChild(); - QVERIFY2(splitter, "Splitter not found"); - auto sizes = splitter->sizes(); - QCOMPARE(sizes.size(), 2); - QVERIFY2(sizes[0] > 0, "EditTextWidget width must be greater than zero"); - - QCOMPARE(sizes[1], 0); - - auto widget = qobject_cast(splitter->widget(0)); - QVERIFY(widget); - auto attachments = widget->getAttachment(); - - QCOMPARE(attachments.name, Test.name); - QCOMPARE(attachments.data, Test.data); - - auto previewWidget = qobject_cast(splitter->widget(1)); - QVERIFY(previewWidget); - attachments = previewWidget->getAttachment(); - - QCOMPARE(attachments.name, Test.name); - QCOMPARE(attachments.data, Test.data); -} - -void TestTextAttachmentsWidget::testTextReadWidget() -{ - const attachments::Attachment Test{.name = "text.txt", .data = "Test"}; - m_textWidget->openAttachment(Test, attachments::OpenMode::ReadOnly); - m_textWidget->show(); - - QCoreApplication::processEvents(); - - auto splitter = m_textWidget->findChild(); - QVERIFY2(splitter, "Splitter not found"); - auto sizes = splitter->sizes(); - QCOMPARE(sizes.size(), 2); - QVERIFY2(sizes[1] > 0, "PreviewTextWidget width must be greater then zero"); - - QVERIFY(splitter->widget(0)->isHidden()); - - auto widget = qobject_cast(splitter->widget(0)); - QVERIFY(widget); - auto attachments = widget->getAttachment(); - - QCOMPARE(attachments.name, Test.name); - QCOMPARE(attachments.data, Test.data); - - auto previewWidget = qobject_cast(splitter->widget(1)); - QVERIFY(previewWidget); - attachments = previewWidget->getAttachment(); - - QCOMPARE(attachments.name, Test.name); - QCOMPARE(attachments.data, Test.data); -} - -void TestTextAttachmentsWidget::testTextChanged() -{ - const attachments::Attachment Test{.name = "text.txt", .data = "Test"}; - m_textWidget->openAttachment(Test, attachments::OpenMode::ReadWrite); - - QCoreApplication::processEvents(); - - auto splitter = m_textWidget->findChild(); - QVERIFY2(splitter, "Splitter not found"); - QCOMPARE(splitter->sizes().size(), 2); - - auto editWidget = qobject_cast(splitter->widget(0)); - QVERIFY2(editWidget, "Edit widget not found"); - - auto textEdit = editWidget->findChild(); - QVERIFY(textEdit); - - const QByteArray NewText = "New test text"; - textEdit->setText(NewText); - - QCoreApplication::processEvents(); - - auto attachments = m_textWidget->getAttachment(); - - QCOMPARE(attachments.data, NewText); -} - -void TestTextAttachmentsWidget::testTextChangedInReadOnlyMode() -{ - const attachments::Attachment Test{.name = "text.txt", .data = "Test"}; - m_textWidget->openAttachment(Test, attachments::OpenMode::ReadOnly); - - QCoreApplication::processEvents(); - - auto splitter = m_textWidget->findChild(); - QVERIFY2(splitter, "Splitter not found"); - QCOMPARE(splitter->sizes().size(), 2); - - auto editWidget = qobject_cast(splitter->widget(0)); - QVERIFY2(editWidget, "Edit widget not found"); - - auto textEdit = editWidget->findChild(); - QVERIFY(textEdit); - - const QByteArray NewText = "New test text"; - textEdit->setText(NewText); - - QCoreApplication::processEvents(); - - auto attachments = m_textWidget->getAttachment(); - - QCOMPARE(attachments.data, Test.data); -} - -void TestTextAttachmentsWidget::testPreviewTextChanged() -{ - const attachments::Attachment Test{.name = "text.txt", .data = "Test"}; - - auto previewTimer = m_textWidget->findChild(); - QVERIFY2(previewTimer, "PreviewTimer not found!"); - - QSignalSpy timeout(previewTimer, &QTimer::timeout); - - m_textWidget->openAttachment(Test, attachments::OpenMode::ReadWrite); - - // Waiting for the first timeout - while (timeout.count() < 1) { - QCoreApplication::processEvents(QEventLoop::AllEvents, 50); - } - - auto splitter = m_textWidget->findChild(); - QVERIFY2(splitter, "Splitter not found"); - QCOMPARE(splitter->sizes().size(), 2); - - splitter->setSizes({1, 1}); - - QCoreApplication::processEvents(); - - auto editWidget = qobject_cast(splitter->widget(0)); - QVERIFY2(editWidget, "Edit widget not found"); - - auto textEdit = editWidget->findChild(); - QVERIFY(textEdit); - - const QByteArray NewText = "New test text"; - textEdit->setText(NewText); - - // Waiting for the second timeout - while (timeout.count() < 2) { - QCoreApplication::processEvents(QEventLoop::AllEvents, 50); - } - - auto previewWidget = qobject_cast(splitter->widget(1)); - auto attachments = previewWidget->getAttachment(); - - QCOMPARE(attachments.data, NewText); -} - -void TestTextAttachmentsWidget::testOpenPreviewButton() -{ - const attachments::Attachment Test{.name = "text.txt", .data = "Test"}; - m_textWidget->openAttachment(Test, attachments::OpenMode::ReadWrite); - m_textWidget->show(); - - QCoreApplication::processEvents(); - - auto splitter = m_textWidget->findChild(); - QVERIFY2(splitter, "Splitter not found"); - QCOMPARE(splitter->sizes().size(), 2); - - auto editWidget = qobject_cast(splitter->widget(0)); - QVERIFY2(editWidget, "Edit widget not found"); - QVERIFY(editWidget->isVisible()); - - auto previewButton = editWidget->findChild("previewPushButton"); - - auto sizes = splitter->sizes(); - QVERIFY(sizes[0] > 0); - QCOMPARE(sizes[1], 0); - - QTest::mouseClick(previewButton, Qt::LeftButton); - - sizes = splitter->sizes(); - QCOMPARE(sizes.size(), 2); - QVERIFY(sizes[0] > 0); - QVERIFY(sizes[1] > 0); - - QTest::mouseClick(previewButton, Qt::LeftButton); - sizes = splitter->sizes(); - QCOMPARE(sizes.size(), 2); - QVERIFY(sizes[0] > 0); - QCOMPARE(sizes[1], 0); -} diff --git a/tests/gui/attachments/TestTextAttachmentsWidget.h b/tests/gui/attachments/TestTextAttachmentsWidget.h deleted file mode 100644 index 3c8198dfa..000000000 --- a/tests/gui/attachments/TestTextAttachmentsWidget.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (C) 2025 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 . - */ - -#pragma once - -#include - -#include -#include - -class TestTextAttachmentsWidget : public QObject -{ - Q_OBJECT - -private slots: - void initTestCase(); - - void testInitTextWidget(); - void testTextReadWriteWidget(); - void testTextReadWidget(); - void testOpenPreviewButton(); - void testPreviewTextChanged(); - void testTextChanged(); - void testTextChangedInReadOnlyMode(); - -private: - QScopedPointer m_textWidget; -}; diff --git a/tests/mock/MockRemoteProcess.cpp b/tests/mock/MockRemoteProcess.cpp deleted file mode 100644 index fe1770932..000000000 --- a/tests/mock/MockRemoteProcess.cpp +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright (C) 2023 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 "MockRemoteProcess.h" - -MockRemoteProcess::MockRemoteProcess(QObject* parent, QString dbPath) - : RemoteProcess(parent) - , m_dbPath(std::move(dbPath)) -{ -} - -void MockRemoteProcess::start(const QString&) -{ - QFile::copy(m_dbPath, m_tempFileLocation); -} - -qint64 MockRemoteProcess::write(const QString& data) -{ - m_data.append(data.toUtf8()); - return data.length(); -} - -bool MockRemoteProcess::waitForBytesWritten() -{ - return true; -} - -void MockRemoteProcess::closeWriteChannel() -{ - // nothing to do -} - -bool MockRemoteProcess::waitForFinished(int) -{ - return true; // no need to wait -} - -int MockRemoteProcess::exitCode() const -{ - return 0; // always return success -} - -QString MockRemoteProcess::readOutput() -{ - return {}; -} - -QString MockRemoteProcess::readError() -{ - return {}; -} diff --git a/tests/mock/MockRemoteProcess.h b/tests/mock/MockRemoteProcess.h deleted file mode 100644 index c39b50cdf..000000000 --- a/tests/mock/MockRemoteProcess.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (C) 2023 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_MOCKREMOTEPROCESS_H -#define KEEPASSXC_MOCKREMOTEPROCESS_H - -#include "gui/remote/RemoteProcess.h" - -class MockRemoteProcess : public RemoteProcess -{ -public: - explicit MockRemoteProcess(QObject* parent, QString dbPath); - ~MockRemoteProcess() override = default; - - void start(const QString& program) override; - qint64 write(const QString& data) override; - bool waitForBytesWritten() override; - void closeWriteChannel() override; - bool waitForFinished(int msecs) override; - [[nodiscard]] int exitCode() const override; - virtual QString readOutput() override; - virtual QString readError() override; - -private: - QByteArray m_data; - QString m_dbPath; -}; - -#endif // KEEPASSXC_MOCKREMOTEPROCESS_H diff --git a/tests/modeltest.cpp b/tests/modeltest.cpp index abbe546fa..8f7c95484 100644 --- a/tests/modeltest.cpp +++ b/tests/modeltest.cpp @@ -452,12 +452,12 @@ void ModelTest::data() } // General Purpose roles that should return a QColor - QVariant colorVariant = model->data ( model->index ( 0, 0 ), Qt::BackgroundRole ); + QVariant colorVariant = model->data ( model->index ( 0, 0 ), Qt::BackgroundColorRole ); if ( colorVariant.isValid() ) { QVERIFY( colorVariant.canConvert() ); } - colorVariant = model->data ( model->index ( 0, 0 ), Qt::ForegroundRole ); + colorVariant = model->data ( model->index ( 0, 0 ), Qt::TextColorRole ); if ( colorVariant.isValid() ) { QVERIFY( colorVariant.canConvert() ); } diff --git a/tests/util/TemporaryFile.cpp b/tests/util/TemporaryFile.cpp index 987852097..413f03305 100644 --- a/tests/util/TemporaryFile.cpp +++ b/tests/util/TemporaryFile.cpp @@ -17,29 +17,6 @@ #include "TemporaryFile.h" -#include -#include -#include - -namespace -{ - QPointer g_tempConfigFile; -} - -QString TemporaryFile::createTempConfigFile() -{ - if (!qApp) { - Q_ASSERT(false); - return {}; - } - if (g_tempConfigFile) { - delete g_tempConfigFile; - } - auto tmpFileName = QString("%1/%2_settings.XXXXXX").arg(QDir::tempPath(), QCoreApplication::applicationName()); - g_tempConfigFile = new TemporaryFile(tmpFileName, qApp); - return g_tempConfigFile->fileName(); -} - TemporaryFile::TemporaryFile() : TemporaryFile(nullptr) { diff --git a/tests/util/TemporaryFile.h b/tests/util/TemporaryFile.h index 3f1707fda..3c1cc6aa0 100644 --- a/tests/util/TemporaryFile.h +++ b/tests/util/TemporaryFile.h @@ -34,8 +34,6 @@ public: using QFile::open; bool open(); bool copyFromFile(const QString& otherFileName); - - static QString createTempConfigFile(); }; #endif // KEEPASSXC_TEMPORARYFILE_H diff --git a/utils/keepassxc-cr-recovery/go.mod b/utils/keepassxc-cr-recovery/go.mod index 7af231c05..89afe5e32 100644 --- a/utils/keepassxc-cr-recovery/go.mod +++ b/utils/keepassxc-cr-recovery/go.mod @@ -2,4 +2,4 @@ module github.com/keepassxreboot/keepassxc/keepassxc-cr-recovery go 1.13 -require golang.org/x/crypto v0.35.0 +require golang.org/x/crypto v0.0.0-20191227163750-53104e6ec876 diff --git a/utils/keepassxc-cr-recovery/go.sum b/utils/keepassxc-cr-recovery/go.sum index ed41f009f..452e5b0ad 100644 --- a/utils/keepassxc-cr-recovery/go.sum +++ b/utils/keepassxc-cr-recovery/go.sum @@ -1,67 +1,8 @@ -github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= -golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= -golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= -golang.org/x/crypto v0.35.0 h1:b15kiHdrGCHrP6LvwaQ3c03kgNhhiMgvlhxHQhmg2Xs= -golang.org/x/crypto v0.35.0/go.mod h1:dy7dXNW32cAb/6/PRuTNsix8T+vJAqvuIy5Bli/x0YQ= -golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= -golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= -golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= -golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= -golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= -golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sync v0.11.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/crypto v0.0.0-20191227163750-53104e6ec876 h1:sKJQZMuxjOAR/Uo2LBfU90onWEf1dF4C+0hPJCc9Mpc= +golang.org/x/crypto v0.0.0-20191227163750-53104e6ec876/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc= -golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2/go.mod h1:TeRTkGYfJXctD9OcfyVLyj2J3IxLnKwHJR8f4D8a3YE= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= -golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= -golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= -golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= -golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY= -golang.org/x/term v0.29.0 h1:L6pJp37ocefwRRtYPKSWOWzOtWSxVajvz2ldH/xi3iU= -golang.org/x/term v0.29.0/go.mod h1:6bl4lRlvVuDgSf3179VpIxBF0o10JUpXWOnI7nErv7s= +golang.org/x/sys v0.0.0-20190412213103-97732733099d h1:+R4KGOnez64A81RvjARKc4UT5/tI9ujCIVX+P5KiHuI= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= -golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= -golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/utils/keepassxc-kdewallet b/utils/keepassxc-kdewallet index 80623fe1a..109183c5c 100755 --- a/utils/keepassxc-kdewallet +++ b/utils/keepassxc-kdewallet @@ -9,14 +9,14 @@ KEEPASSXC=$(which -a keepassxc | sed -e "\\,$0,d" -e 'q') daemon_main() { # open kdewallet - handle=$(qdbus6 org.kde.kwalletd6 /modules/kwalletd6 open kdewallet 0 "$PROG") - while [[ true != $(qdbus6 org.kde.kwalletd6 /modules/kwalletd6 isOpen kdewallet) ]]; do + handle=$(qdbus org.kde.kwalletd5 /modules/kwalletd5 org.kde.KWallet.open kdewallet 0 "$PROG") + while [[ true != $(qdbus org.kde.kwalletd5 /modules/kwalletd5 org.kde.KWallet.isOpen kdewallet) ]]; do sleep 1 done declare -A DBs for DBPATH in $(ls -r $KDBX_SEARCH); do - DBs[$(realpath $DBPATH)]=$(qdbus6 org.kde.kwalletd6 /modules/kwalletd6 readPassword "$handle" "Passwords" "${DBPATH##*/}" "$PROG") + DBs[$(realpath $DBPATH)]=$(qdbus org.kde.kwalletd5 /modules/kwalletd5 org.kde.KWallet.readPassword "$handle" "Passwords" "${DBPATH##*/}" "$PROG") done # launch real keepassxc @@ -24,7 +24,7 @@ daemon_main() { "$KEEPASSXC" --pw-stdin "${!DBs[@]}" <<<"${DBs[*]}" & # done with kdewallet - qdbus6 org.kde.kwalletd6 /modules/kwalletd6 close "$handle" "false" "$PROG" + qdbus org.kde.kwalletd5 /modules/kwalletd5 org.kde.KWallet.close "$handle" "false" "$PROG" } if [[ $1 == '-d' ]]; then diff --git a/utils/keepassxc-snap-helper.sh b/utils/keepassxc-snap-helper.sh index 82b8acba1..300b3909a 100755 --- a/utils/keepassxc-snap-helper.sh +++ b/utils/keepassxc-snap-helper.sh @@ -94,11 +94,6 @@ setupEdge() { INSTALL_DIR="${BASE_DIR}/.config/microsoft-edge/NativeMessagingHosts" } -setupLibreWolf() { - JSON_OUT=${JSON_FIREFOX} - INSTALL_DIR="${BASE_DIR}/.librewolf/native-messaging-hosts" -} - # -------------------------------- # Start of script # -------------------------------- @@ -114,7 +109,6 @@ BROWSER=$(whiptail \ "5" "Brave" \ "6" "Tor Browser" \ "7" "Microsoft Edge" \ - "8" "LibreWolf" \ 3>&1 1>&2 2>&3) exitstatus=$? @@ -131,7 +125,6 @@ if [[ $exitstatus == 0 ]]; then 5) setupBrave ;; 6) setupTorBrowser ;; 7) setupEdge ;; - 8) setupLibreWolf ;; esac # Install the JSON file diff --git a/utils/transifex_translators.py b/utils/transifex_translators.py index 9170f04ba..a79553a9d 100644 --- a/utils/transifex_translators.py +++ b/utils/transifex_translators.py @@ -25,7 +25,7 @@ LANGS = { "he" : "עברית (Hebrew)", "hr_HR" : "hrvatski jezik (Croatian)", "hu" : "magyar (Hungarian)", - "id" : "Bahasa Indonesia (Indonesian)", + "id" : "Bahasa (Indonesian)", "is_IS" : "Íslenska (Icelandic)", "it" : "Italiano (Italian)", "ja" : "日本語 (Japanese)", diff --git a/vcpkg-configuration.json b/vcpkg-configuration.json deleted file mode 100644 index 1d21b2694..000000000 --- a/vcpkg-configuration.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "overlay-ports": [], - "overlay-triplets": [ - "vcpkg/triplets" - ] -} diff --git a/vcpkg.json b/vcpkg.json deleted file mode 100644 index baa40686c..000000000 --- a/vcpkg.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "name": "keepassxc", - "version-string": "2.8.0", - "builtin-baseline": "2a6371b01420d8820d158b4707e79931feba27aa", - "dependencies": [ - { - "name": "argon2", - "version>=": "20190702" - }, - { - "name": "botan", - "version>=": "3.1.1" - }, - { - "name": "minizip", - "version>=": "1.3" - }, - { - "name": "libqrencode", - "version>=": "4.1.1" - }, - { - "name": "libusb", - "version>=": "1.0.26.11791", - "platform": "linux | freebsd" - }, - { - "name": "libxi", - "version>=": "1.8", - "platform": "linux | freebsd" - }, - { - "name": "libxtst", - "version>=": "1.2.4", - "platform": "linux | freebsd" - }, - { - "name": "qt5", - "version>=": "5.15.11" - }, - { - "name": "qt5-imageformats", - "version>=": "5.15.11" - }, - { - "name": "qt5-macextras", - "version>=": "5.15.11", - "platform": "osx" - }, - { - "name": "qt5-svg", - "version>=": "5.15.11" - }, - { - "name": "qt5-tools", - "version>=": "5.15.11" - }, - { - "name": "qt5-translations", - "version>=": "5.15.11" - }, - { - "name": "qt5-wayland", - "version>=": "5.15.11", - "platform": "linux | freebsd" - }, - { - "name": "qt5-x11extras", - "version>=": "5.15.11", - "platform": "linux | freebsd" - }, - { - "name": "readline", - "version>=": "0#5" - }, - { - "name": "zlib", - "version>=": "1.3" - } - ] -} diff --git a/vcpkg/triplets/arm64-osx-dynamic-release.cmake b/vcpkg/triplets/arm64-osx-dynamic-release.cmake deleted file mode 100644 index 44637b2d9..000000000 --- a/vcpkg/triplets/arm64-osx-dynamic-release.cmake +++ /dev/null @@ -1,9 +0,0 @@ -set(VCPKG_TARGET_ARCHITECTURE arm64) -set(VCPKG_CRT_LINKAGE dynamic) -set(VCPKG_LIBRARY_LINKAGE dynamic) - -set(VCPKG_CMAKE_SYSTEM_NAME Darwin) -set(VCPKG_OSX_ARCHITECTURES arm64) - -set(VCPKG_BUILD_TYPE release) -set(VCPKG_OSX_DEPLOYMENT_TARGET 11.0) diff --git a/vcpkg/triplets/arm64-osx-dynamic.cmake b/vcpkg/triplets/arm64-osx-dynamic.cmake deleted file mode 100644 index 429519b84..000000000 --- a/vcpkg/triplets/arm64-osx-dynamic.cmake +++ /dev/null @@ -1,8 +0,0 @@ -set(VCPKG_TARGET_ARCHITECTURE arm64) -set(VCPKG_CRT_LINKAGE dynamic) -set(VCPKG_LIBRARY_LINKAGE dynamic) - -set(VCPKG_CMAKE_SYSTEM_NAME Darwin) -set(VCPKG_OSX_ARCHITECTURES arm64) - -set(VCPKG_OSX_DEPLOYMENT_TARGET 11.0) diff --git a/vcpkg/triplets/x64-osx-dynamic-release.cmake b/vcpkg/triplets/x64-osx-dynamic-release.cmake deleted file mode 100644 index e3259a690..000000000 --- a/vcpkg/triplets/x64-osx-dynamic-release.cmake +++ /dev/null @@ -1,9 +0,0 @@ -set(VCPKG_TARGET_ARCHITECTURE x64) -set(VCPKG_CRT_LINKAGE dynamic) -set(VCPKG_LIBRARY_LINKAGE dynamic) - -set(VCPKG_CMAKE_SYSTEM_NAME Darwin) -set(VCPKG_OSX_ARCHITECTURES x86_64) - -set(VCPKG_BUILD_TYPE release) -set(VCPKG_OSX_DEPLOYMENT_TARGET 10.15) diff --git a/vcpkg/triplets/x64-osx-dynamic.cmake b/vcpkg/triplets/x64-osx-dynamic.cmake deleted file mode 100644 index 01ce0307b..000000000 --- a/vcpkg/triplets/x64-osx-dynamic.cmake +++ /dev/null @@ -1,8 +0,0 @@ -set(VCPKG_TARGET_ARCHITECTURE x64) -set(VCPKG_CRT_LINKAGE dynamic) -set(VCPKG_LIBRARY_LINKAGE dynamic) - -set(VCPKG_CMAKE_SYSTEM_NAME Darwin) -set(VCPKG_OSX_ARCHITECTURES x86_64) - -set(VCPKG_OSX_DEPLOYMENT_TARGET 10.15)