mirror of
https://github.com/keepassxreboot/keepassxc.git
synced 2024-10-01 01:26:01 -04:00
Merge branch 'master' into develop
This commit is contained in:
commit
5c2a1a4284
43
CHANGELOG.md
43
CHANGELOG.md
@ -1,5 +1,48 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## 2.6.1 (2020-08-19)
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- Add menu entries for auto-typing only username or only password [#4891]
|
||||||
|
- Browser: Add command for retrieving current TOTP [#5278]
|
||||||
|
- Improve man pages [#5010]
|
||||||
|
- Linux: Support Xfce screen lock signals [#4971]
|
||||||
|
- Linux: Add OARS metadata to AppStream markup [#5031]
|
||||||
|
- SSH Agent: Substitute tilde with %USERPROFILE% on Windows [#5116]
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- Improve password generator UI and UX [#5129]
|
||||||
|
- Do not prompt to restart if switching the theme back and forth [#5084]
|
||||||
|
- Change actions for F1, F2, and F3 keys [#5082]
|
||||||
|
- Skip referenced passwords in health check report [#5056]
|
||||||
|
- Check system-wide Qt translations directory for downstream translations packaging [#5064]
|
||||||
|
- macOS: Change password visibility toggle shortcut to Ctrl+H to avoid conflict with system shortcut [#5114]
|
||||||
|
- Browser: Only display domain name in browser access confirm dialog to avoid overly wide window sizes [#5214]
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Fix clipboard not being cleared when database is locked while timeout is still active [#5184]
|
||||||
|
- Fix list of previous databases not being cleared in some cases [#5123]
|
||||||
|
- Fix saving of non-data changes on database lock [#5210]
|
||||||
|
- Fix search results banner theming [#5197]
|
||||||
|
- Don't enforce theme palette in Classic theme mode and add hover effect for buttons [#5122,#5267]
|
||||||
|
- Fix label clipping in settings on high-DPI screens [#5227]
|
||||||
|
- Fix excessive memory usage by icons on systems with high-DPI screens [#5266]
|
||||||
|
- Fix crash if number of TOTP digits exceeds ten [#5106]
|
||||||
|
- Fix slot detection when first YubiKey is configured on the second slot [#5004]
|
||||||
|
- Prevent crash if focus widget gets deleted during saving [#5005]
|
||||||
|
- Always show buttons for opening or saving attachments [#4956]
|
||||||
|
- Update link to Auto-Type help [#5228]
|
||||||
|
- Fix build errors with Ninja [#5121]
|
||||||
|
- CLI: Fix db-info command wrongly labelled as db-show in usage listing [#5140]
|
||||||
|
- Windows: Use Classic theme by default if high-contrast mode is on [#5191]
|
||||||
|
- Linux: Add workaround for qt5ct bug, causing icons not to show up [#5011]
|
||||||
|
- Linux: Correct high-DPI display by not allowing fractional scaling [#5185]
|
||||||
|
- Browser: Consider subdomain and path when requesting only "best-matching credentials" [#4832]
|
||||||
|
- SSH Agent: Always forget all keys on lock [#5115]
|
||||||
|
|
||||||
## 2.6.0 (2020-07-06)
|
## 2.6.0 (2020-07-06)
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
@ -101,7 +101,7 @@ endif()
|
|||||||
|
|
||||||
set(KEEPASSXC_VERSION_MAJOR "2")
|
set(KEEPASSXC_VERSION_MAJOR "2")
|
||||||
set(KEEPASSXC_VERSION_MINOR "6")
|
set(KEEPASSXC_VERSION_MINOR "6")
|
||||||
set(KEEPASSXC_VERSION_PATCH "0")
|
set(KEEPASSXC_VERSION_PATCH "1")
|
||||||
set(KEEPASSXC_VERSION "${KEEPASSXC_VERSION_MAJOR}.${KEEPASSXC_VERSION_MINOR}.${KEEPASSXC_VERSION_PATCH}")
|
set(KEEPASSXC_VERSION "${KEEPASSXC_VERSION_MAJOR}.${KEEPASSXC_VERSION_MINOR}.${KEEPASSXC_VERSION_PATCH}")
|
||||||
set(OVERRIDE_VERSION "" CACHE STRING "Override the KeePassXC Version for Snapshot builds")
|
set(OVERRIDE_VERSION "" CACHE STRING "Override the KeePassXC Version for Snapshot builds")
|
||||||
|
|
||||||
|
@ -3,16 +3,16 @@
|
|||||||
[![codecov](https://codecov.io/gh/keepassxreboot/keepassxc/branch/develop/graph/badge.svg)](https://codecov.io/gh/keepassxreboot/keepassxc)
|
[![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/)
|
[![GitHub release](https://img.shields.io/github/release/keepassxreboot/keepassxc)](https://github.com/keepassxreboot/keepassxc/releases/)
|
||||||
|
|
||||||
[KeePassXC](https://keepassxc.org) is a modern open-source password manager. It is used to store and manage information such as URLs, usernames, passwords, and so on for various accounts on your web and desktop applications. KeePassXC stores all data in an encrypted database format while still providing secure access to that information. KeePassXC is helpful for people with extremely high demands of secure personal data management.
|
[KeePassXC](https://keepassxc.org) is a modern, secure, and open-source password manager that stores and manages your most sensitive information. You can run KeePassXC on Windows, macOS, and Linux systems. KeePassXC is for people with extremely high demands of secure personal data management. It saves many different types of information, such as usernames, passwords, URLs, attachments, and notes in an offline, encrypted file that can be stored in any location, including private and public cloud solutions. For easy identification and management, user-defined titles and icons can be specified for entries. In addition, entries are sorted in customizable groups. An integrated search function allows you to use advanced patterns to easily find any entry in your database. A customizable, fast, and easy-to-use password generator utility allows you to create passwords with any combination of characters or easy to remember passphrases.
|
||||||
|
|
||||||
## Quick Start
|
## Quick Start
|
||||||
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). Additionally, individual Linux distributions may ship their own versions, so please check your distribution's package list to see if KeePassXC is available. Detailed documentation is available in the [User Guide](https://keepassxc.org/docs/KeePassXC_UserGuide.html).
|
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). Additionally, individual Linux distributions may ship their own versions, so please check your distribution's package list to see if KeePassXC is available. Detailed documentation is available in the [User Guide](https://keepassxc.org/docs/KeePassXC_UserGuide.html).
|
||||||
|
|
||||||
## Features List
|
## Features List
|
||||||
KeePassXC has numerous features for novice and power users alike. This guide will go over the basic features to get you up and running quickly. The User Guide contains more in-depth discussions on the major features in the application.
|
KeePassXC has numerous features for novice and power users alike. Our goal is to create an application that can be used by anyone while still offering advanced features to those that need them.
|
||||||
|
|
||||||
### Basic
|
### Basic
|
||||||
* Create, open, and save databases in the KDBX format (KeePass Compatible)
|
* Create, open, and save databases in the KDBX format (KeePass compatible to KDBX4 and KDBX3)
|
||||||
* Store sensitive information in entries that are organized by groups
|
* Store sensitive information in entries that are organized by groups
|
||||||
* Search for entries
|
* Search for entries
|
||||||
* Password generator
|
* Password generator
|
||||||
|
BIN
docs/images/autoopen.png
Normal file
BIN
docs/images/autoopen.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 34 KiB |
BIN
docs/images/autoopen_ifdevice.png
Normal file
BIN
docs/images/autoopen_ifdevice.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 19 KiB |
@ -470,13 +470,6 @@ video {
|
|||||||
max-width: 100%;
|
max-width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
@media all and (max-width: 600px) {
|
|
||||||
table {
|
|
||||||
width: 55vw!important;
|
|
||||||
font-size: 3vw;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.exampleblock > .content {
|
.exampleblock > .content {
|
||||||
background-color: var(--background);
|
background-color: var(--background);
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,8 @@ The Auto-Type feature acts like a virtual keyboard to populate data from your en
|
|||||||
|
|
||||||
NOTE: Auto-Type is a completely separate feature from Browser Integration. You do not need to have the KeePassXC browser extension installed in your browser to use Auto-Type.
|
NOTE: Auto-Type is a completely separate feature from Browser Integration. You do not need to have the KeePassXC browser extension installed in your browser to use Auto-Type.
|
||||||
|
|
||||||
|
WARNING: Auto-Type will be disabled when run with a Wayland compositor on Linux. To use Auto-Type in this environment, you must set `QT_QPA_PLATFORM=xcb` or start KeePassXC with the `-platform xcb` command-line flag.
|
||||||
|
|
||||||
=== Configure Global Auto-Type
|
=== Configure Global Auto-Type
|
||||||
You can define a global Auto-Type hotkey that starts the Auto-Type process. To configure the hotkey, perform the following steps:
|
You can define a global Auto-Type hotkey that starts the Auto-Type process. To configure the hotkey, perform the following steps:
|
||||||
|
|
||||||
|
@ -141,7 +141,8 @@ KeePassXC provides an enhanced and granular search features the enables you to s
|
|||||||
|===
|
|===
|
||||||
|Modifier |Description
|
|Modifier |Description
|
||||||
|
|
||||||
|- |Exclude this term from results
|
|- |Exclude this term from results
|
||||||
|
|! |Exclude this term from results
|
||||||
|+ |Match this term exactly
|
|+ |Match this term exactly
|
||||||
|* |Term is handled as a regular expression
|
|* |Term is handled as a regular expression
|
||||||
|===
|
|===
|
||||||
@ -235,6 +236,31 @@ image::edit_entry_history.png[]
|
|||||||
|
|
||||||
NOTE: Restoring an old history item will store the current entry settings as a new history item.
|
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`.
|
||||||
|
|
||||||
|
.AutoOpen Group and Entries
|
||||||
|
image::autoopen.png[]
|
||||||
|
|
||||||
|
To setup an entry for auto open perform the following steps:
|
||||||
|
|
||||||
|
1. Create a new entry and give it any title you wish.
|
||||||
|
2. If your database has a key file, enter its absolute or relative path in the `username` field.
|
||||||
|
3. If your database has a password, enter it in the `password` field
|
||||||
|
4. Enter the absolute or relative path to the database file in the `url` field. You can also use the `{DB_DIR}` placeholder to reference the absolute path of the current database file.
|
||||||
|
5. To restrict auto open to particular devices, go to the advanced category and enter the following:
|
||||||
|
a. Create a new attribute named `IfDevice`.
|
||||||
|
b. Enter hostnames in a comma separated list to define computers that will open this database.
|
||||||
|
c. Prepend an exclamation mark (`!`) to explicitly exclude a device.
|
||||||
|
d. Examples: `LAPTOP, DESKTOP` will auto open on a computer named LAPTOP or DESKTOP. `!LAPTOP` will auto open on all devices *not* named LAPTOP.
|
||||||
|
|
||||||
|
.Auto open IfDevice example
|
||||||
|
image::autoopen_ifdevice.png[]
|
||||||
|
|
||||||
|
NOTE: You can setup an entry to open on double click of the URL field by prepending `kdbx://` to the relative or absolute path to the database file. You may also have to add `file://` to access network shares (e.g., `kdbx://file://share/database.kdbx`).
|
||||||
|
|
||||||
== Database Settings
|
== Database Settings
|
||||||
At any point of time, you can change the settings for your database. To make changes to the general settings, perform the following steps:
|
At any point of time, you can change the settings for your database. To make changes to the general settings, perform the following steps:
|
||||||
|
|
||||||
|
@ -33,7 +33,9 @@ include::.sharedheader[]
|
|||||||
|Select Previous Database Tab | Ctrl + Shift + Tab ; Ctrl + PageUp
|
|Select Previous Database Tab | Ctrl + Shift + Tab ; Ctrl + PageUp
|
||||||
|Toggle Passwords Hidden | Ctrl + Shift + C
|
|Toggle Passwords Hidden | Ctrl + Shift + C
|
||||||
|Toggle Usernames Hidden | Ctrl + Shift + B
|
|Toggle Usernames Hidden | Ctrl + Shift + B
|
||||||
|Focus Search | Ctrl + F
|
|Focus Groups (edit if focused) | F1
|
||||||
|
|Focus Entries (edit if focused) | F2
|
||||||
|
|Focus Search | F3 ; Ctrl + F
|
||||||
|Clear Search | Escape
|
|Clear Search | Escape
|
||||||
|Show Keyboard Shortcuts | Ctrl + /
|
|Show Keyboard Shortcuts | Ctrl + /
|
||||||
|===
|
|===
|
||||||
|
@ -4,15 +4,12 @@ include::.sharedheader[]
|
|||||||
|
|
||||||
// tag::content[]
|
// tag::content[]
|
||||||
== Welcome
|
== Welcome
|
||||||
KeePassXC is a modern open-source password manager. It is used to store and manage information such as URLs, usernames, passwords, and so on for various accounts on your web applications. KeePassXC stores all data in an encrypted format while still providing secure access to your information.
|
KeePassXC is a modern, secure, and open-source password manager that stores and manages your most sensitive information. You can run KeePassXC on Windows, macOS, and Linux systems.
|
||||||
|
|
||||||
KeePassXC is helpful for people with extremely high demands of secure personal data management. It saves many different information, such as user names, passwords, URLs, attachments, and comments in one single database. For a better management, user-defined titles and icons can be specified for different entries in KeePassXC. In addition, the entries are sorted in customizable groups. The integrated search function allows to search in a single group or the complete database.
|
KeePassXC is for people with extremely high demands of secure personal data management. It saves many different types of information, such as usernames, passwords, URLs, attachments, and notes in an offline, encrypted file that can be stored in any location, including private and public cloud solutions. For easy identification and management, user-defined titles and icons can be specified for entries. In addition, entries are sorted in customizable groups. An integrated search function allows you to use advanced patterns to easily find any entry in your database. A customizable, fast, and easy-to-use password generator utility allows you to create passwords with any combination of characters or easy to remember passphrases.
|
||||||
|
|
||||||
KeePassXC also provides a secure, customizable, fast, and easy-to-use password generator utility. This utility is very helpful to those who generate passwords frequently.
|
|
||||||
|
|
||||||
=== Overview
|
=== Overview
|
||||||
You can store an unlimited number of passwords and information in a KeePassXC database. Every piece of information you store in your database is encrypted at all times within the `kdbx` file. When you are accessing your database from within KeePassXC, your information in decrypted and stored in your computer's memory. KeePassXC places controls over the access to this data so other applications cannot read it (unless they have administrative rights). The interface is designed to let you quickly access your passwords, search for the right entry, perform Auto-Type or copy/paste
|
You can store an unlimited number of passwords and information in a KeePassXC database. Every piece of information you store in your database is encrypted at all times within the `kdbx` file. When you are accessing your database from within KeePassXC, your information in decrypted and stored in your computer's memory. KeePassXC places controls over the access to this data so other applications cannot read it (unless they have administrative rights). The interface is designed to let you quickly access your passwords, search for the right entry, perform Auto-Type or copy/paste operations, make and save changes, and then get out of your way.
|
||||||
operations, make and save changes, and then get out of your way.
|
|
||||||
|
|
||||||
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 in the application settings.
|
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 in the application settings.
|
||||||
|
|
||||||
|
@ -50,9 +50,116 @@
|
|||||||
</screenshots>
|
</screenshots>
|
||||||
|
|
||||||
<releases>
|
<releases>
|
||||||
<release version="2.6.0" date="2020-04-01">
|
<release version="2.6.1" date="2020-08-19">
|
||||||
<description>
|
<description>
|
||||||
<ul><li>TBD</li></ul>
|
<ul>
|
||||||
|
<li>Add menu entries for auto-typing only username or only password [#4891]</li>
|
||||||
|
<li>Browser: Add command for retrieving current TOTP [#5278]</li>
|
||||||
|
<li>Improve man pages [#5010]</li>
|
||||||
|
<li>Linux: Support Xfce screen lock signals [#4971]</li>
|
||||||
|
<li>Linux: Add OARS metadata to AppStream markup [#5031]</li>
|
||||||
|
<li>SSH Agent: Substitute tilde with %USERPROFILE% on Windows [#5116]</li>
|
||||||
|
<li>Improve password generator UI and UX [#5129]</li>
|
||||||
|
<li>Do not prompt to restart if switching the theme back and forth [#5084]</li>
|
||||||
|
<li>Change actions for F1, F2, and F3 keys [#5082]</li>
|
||||||
|
<li>Skip referenced passwords in health check report [#5056]</li>
|
||||||
|
<li>Check system-wide Qt translations directory for downstream translations packaging [#5064]</li>
|
||||||
|
<li>macOS: Change password visibility toggle shortcut to Ctrl+H to avoid conflict with system shortcut [#5114]</li>
|
||||||
|
<li>Browser: Only display domain name in browser access confirm dialog to avoid overly wide window sizes [#5214]</li>
|
||||||
|
<li>Fix clipboard not being cleared when database is locked while timeout is still active [#5184]</li>
|
||||||
|
<li>Fix list of previous databases not being cleared in some cases [#5123]</li>
|
||||||
|
<li>Fix saving of non-data changes on database lock [#5210]</li>
|
||||||
|
<li>Fix search results banner theming [#5197]</li>
|
||||||
|
<li>Don't enforce theme palette in Classic theme mode and add hover effect for buttons [#5122,#5267]</li>
|
||||||
|
<li>Fix label clipping in settings on high-DPI screens [#5227]</li>
|
||||||
|
<li>Fix excessive memory usage by icons on systems with high-DPI screens [#5266]</li>
|
||||||
|
<li>Fix crash if number of TOTP digits exceeds ten [#5106]</li>
|
||||||
|
<li>Fix slot detection when first YubiKey is configured on the second slot [#5004]</li>
|
||||||
|
<li>Prevent crash if focus widget gets deleted during saving [#5005]</li>
|
||||||
|
<li>Always show buttons for opening or saving attachments [#4956]</li>
|
||||||
|
<li>Update link to Auto-Type help [#5228]</li>
|
||||||
|
<li>Fix build errors with Ninja [#5121]</li>
|
||||||
|
<li>CLI: Fix db-info command wrongly labelled as db-show in usage listing [#5140]</li>
|
||||||
|
<li>Windows: Use Classic theme by default if high-contrast mode is on [#5191]</li>
|
||||||
|
<li>Linux: Add workaround for qt5ct bug, causing icons not to show up [#5011]</li>
|
||||||
|
<li>Linux: Correct high-DPI display by not allowing fractional scaling [#5185]</li>
|
||||||
|
<li>Browser: Consider subdomain and path when requesting only "best-matching credentials" [#4832]</li>
|
||||||
|
<li>SSH Agent: Always forget all keys on lock [#5115]</li>
|
||||||
|
</ul>
|
||||||
|
</description>
|
||||||
|
</release>
|
||||||
|
<release version="2.6.0" date="2020-07-06">
|
||||||
|
<description>
|
||||||
|
<ul>
|
||||||
|
<li>Custom Light and Dark themes [#4110, #4769, #4791, #4892, #4915]</li>
|
||||||
|
<li>Compact mode to use classic Group and Entry line height [#4910]</li>
|
||||||
|
<li>New monochrome tray icons [#4796, #4803]</li>
|
||||||
|
<li>View menu to quickly switch themes, compact mode, and toggle UI elements [#4910]</li>
|
||||||
|
<li>Search for groups and scope search to matched groups [#4705]</li>
|
||||||
|
<li>Save Database Backup feature [#4550]</li>
|
||||||
|
<li>Sort entries by "natural order" and move lines up/down [#4357]</li>
|
||||||
|
<li>Option to launch KeePassXC on system startup/login [#4675]</li>
|
||||||
|
<li>Caps Lock warning on password input fields [#3646]</li>
|
||||||
|
<li>Add "Size" column to entry view [#4588]</li>
|
||||||
|
<li>Browser-like tab experience using Ctrl+[Num] (Alt+[Num] on Linux) [#4063, #4305]</li>
|
||||||
|
<li>Password Generator: Define additional characters to choose from [#3876]</li>
|
||||||
|
<li>Reports: Database password health check (offline) [#3993]</li>
|
||||||
|
<li>Reports: HIBP online service to check for breached passwords [#4438]</li>
|
||||||
|
<li>Auto-Type: DateTime placeholders [#4409]</li>
|
||||||
|
<li>Browser: Show group name in results sent to browser extension [#4111]</li>
|
||||||
|
<li>Browser: Ability to define a custom browser location (macOS and Linux only) [#4148]</li>
|
||||||
|
<li>Browser: Ability to change root group UUID and inline edit connection ID [#4315, #4591]</li>
|
||||||
|
<li>CLI: `db-info` command [#4231]</li>
|
||||||
|
<li>CLI: Use wl-clipboard if xclip is not available (Linux) [#4323]</li>
|
||||||
|
<li>CLI: Incorporate xclip into snap builds [#4697]</li>
|
||||||
|
<li>SSH Agent: Key file path env substitution, SSH_AUTH_SOCK override, and connection test [#3769, #3801, #4545]</li>
|
||||||
|
<li>SSH Agent: Context menu actions to add/remove keys [#4290]</li>
|
||||||
|
<li>Complete replacement of default database icons [#4699]</li>
|
||||||
|
<li>Complete replacement of application icons [#4066, #4161, #4203, #4411]</li>
|
||||||
|
<li>Complete rewrite of documentation and manpages using Asciidoctor [#4937]</li>
|
||||||
|
<li>Complete refactor of config files; separate between local and roaming [#4665]</li>
|
||||||
|
<li>Complete refactor of browser integration and proxy code [#4680]</li>
|
||||||
|
<li>Complete refactor of hardware key integration (YubiKey and OnlyKey) [#4584, #4843]</li>
|
||||||
|
<li>Significantly improve performance when saving and opening databases [#4309, #4833]</li>
|
||||||
|
<li>Remove read-only detection for database files [#4508]</li>
|
||||||
|
<li>Overhaul of password fields and password generator [#4367]</li>
|
||||||
|
<li>Replace instances of "Master Key" with "Database Credentials" [#4929]</li>
|
||||||
|
<li>Change settings checkboxes to positive phrasing for consistency [#4715]</li>
|
||||||
|
<li>Improve UX of using entry actions (focus fix) [#3893]</li>
|
||||||
|
<li>Set expiration time to Now when enabling entry expiration [#4406]</li>
|
||||||
|
<li>Always show "New Entry" in context menu [#4617]</li>
|
||||||
|
<li>Issue warning before adding large attachments [#4651]</li>
|
||||||
|
<li>Improve importing OPVault [#4630]</li>
|
||||||
|
<li>Improve AutoOpen capability [#3901, #4752]</li>
|
||||||
|
<li>Check for updates every 7 days even while still running [#4752]</li>
|
||||||
|
<li>Improve Windows installer UI/UX [#4675]</li>
|
||||||
|
<li>Improve config file handling of portable distribution [#4131, #4752]</li>
|
||||||
|
<li>macOS: Hide dock icon when application is hidden to tray [#4782]</li>
|
||||||
|
<li>Browser: Use unlock dialog to improve UX of opening a locked database [#3698]</li>
|
||||||
|
<li>Browser: Improve database and entry settings experience [#4392, #4591]</li>
|
||||||
|
<li>Browser: Improve confirm access dialog [#2143, #4660]</li>
|
||||||
|
<li>KeeShare: Improve monitoring file changes of shares [#4720]</li>
|
||||||
|
<li>CLI: Rename `create` command to `db-create` [#4231]</li>
|
||||||
|
<li>CLI: Cleanup `db-create` options (`--set-key-file` and `--set-password`) [#4313]</li>
|
||||||
|
<li>CLI: Use stderr for help text and password prompts [#4086, #4623]</li>
|
||||||
|
<li>FdoSecrets: Display existing secret service process [#4128]</li>
|
||||||
|
<li>Fix changing focus around the main window using tab key [#4641]</li>
|
||||||
|
<li>Fix search field clearing while still using the application [#4368]</li>
|
||||||
|
<li>Improve search help widget displaying on macOS and Linux [#4236]</li>
|
||||||
|
<li>Return keyboard focus after editing an entry [#4287]</li>
|
||||||
|
<li>Reset database path after failed "Save As" [#4526]</li>
|
||||||
|
<li>Make builds reproducible [#4411]</li>
|
||||||
|
<li>Improve handling of ccache when building [#4104, #4335]</li>
|
||||||
|
<li>Windows: Use correct UI font and size [#4769]</li>
|
||||||
|
<li>macOS: Properly re-hide application window after browser integration and Auto-Type usage [#4909]</li>
|
||||||
|
<li>Linux: Fix version number not embedded in AppImage [#4842]</li>
|
||||||
|
<li>Auto-Type: Fix crash when performing on new entry [#4132]</li>
|
||||||
|
<li>Browser: Send legacy HTTP settings to recycle bin [#4589]</li>
|
||||||
|
<li>Browser: Fix merging browser keys [#4685]</li>
|
||||||
|
<li>CLI: Fix encoding when exporting database [#3921]</li>
|
||||||
|
<li>SSH Agent: Improve reliability and underlying code [#3833, #4256, #4549, #4595]</li>
|
||||||
|
<li>FdoSecrets: Fix crash when editing settings before service is enabled [#4332]</li>
|
||||||
|
</ul>
|
||||||
</description>
|
</description>
|
||||||
</release>
|
</release>
|
||||||
<release version="2.5.4" date="2020-04-09">
|
<release version="2.5.4" date="2020-04-09">
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -54,7 +54,7 @@
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Enable SSH Agent integration</source>
|
<source>Enable SSH Agent integration</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Activar integració de l'agent SSH</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>SSH_AUTH_SOCK value</source>
|
<source>SSH_AUTH_SOCK value</source>
|
||||||
@ -125,11 +125,11 @@
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Monochrome (light)</source>
|
<source>Monochrome (light)</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Monocrom (clar)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Monochrome (dark)</source>
|
<source>Monochrome (dark)</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Monocrom (fosc)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Colorful</source>
|
<source>Colorful</source>
|
||||||
@ -302,7 +302,7 @@
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Automatically launch KeePassXC at system startup</source>
|
<source>Automatically launch KeePassXC at system startup</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Executar KeePassXC a l'inici del sistema</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Mark database as modified for non-data changes (e.g., expanding groups)</source>
|
<source>Mark database as modified for non-data changes (e.g., expanding groups)</source>
|
||||||
@ -314,11 +314,11 @@
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>User Interface</source>
|
<source>User Interface</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Interfície d'usuari</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Toolbar button style:</source>
|
<source>Toolbar button style:</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Estil de la barra d'eines</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Use monospaced font for notes</source>
|
<source>Use monospaced font for notes</source>
|
||||||
@ -326,11 +326,11 @@
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Tray icon type:</source>
|
<source>Tray icon type:</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Tipus d'icona de la safata del sistema</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Reset settings to default…</source>
|
<source>Reset settings to default…</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Valors de configuració per defecte...</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Auto-Type typing delay:</source>
|
<source>Auto-Type typing delay:</source>
|
||||||
@ -560,7 +560,7 @@
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>%1 is requesting access to the following entries:</source>
|
<source>%1 is requesting access to the following entries:</source>
|
||||||
<translation type="unfinished"/>
|
<translation>%1 demana accés a les entrades següents:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Remember access to checked entries</source>
|
<source>Remember access to checked entries</source>
|
||||||
@ -568,11 +568,11 @@
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Remember</source>
|
<source>Remember</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Recorda</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Allow access to entries</source>
|
<source>Allow access to entries</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Permetre accés a les entrades</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Allow Selected</source>
|
<source>Allow Selected</source>
|
||||||
@ -659,11 +659,11 @@ Moved %2 keys to custom data.</source>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
|
<source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
|
||||||
<translation type="unfinished"/>
|
<translation>KeePassXC: No s'ha trobat cap entrada amb atributs KeePassHTTP</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>The active database does not contain an entry with KeePassHTTP attributes.</source>
|
<source>The active database does not contain an entry with KeePassHTTP attributes.</source>
|
||||||
<translation type="unfinished"/>
|
<translation>La base de dades activa no conté cap entrada amb atributs KeePassHTTP</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>KeePassXC: Legacy browser integration settings detected</source>
|
<source>KeePassXC: Legacy browser integration settings detected</source>
|
||||||
@ -726,31 +726,31 @@ chrome-laptop.</source>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Vivaldi</source>
|
<source>Vivaldi</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Vivaldi</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>&Edge</source>
|
<source>&Edge</source>
|
||||||
<translation type="unfinished"/>
|
<translation>&Edge</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Firefox</source>
|
<source>Firefox</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Firefox</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Tor Browser</source>
|
<source>Tor Browser</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Tor Browser</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Brave</source>
|
<source>Brave</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Brave</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Google Chrome</source>
|
<source>Google Chrome</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Google Chrome</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Chromium</source>
|
<source>Chromium</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Chromium</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Show a notification when credentials are requested</source>
|
<source>Show a notification when credentials are requested</source>
|
||||||
@ -875,7 +875,7 @@ chrome-laptop.</source>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Browser type:</source>
|
<source>Browser type:</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Tipus de navegador:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Toolbar button style</source>
|
<source>Toolbar button style</source>
|
||||||
@ -1095,7 +1095,7 @@ chrome-laptop.</source>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Column %1</source>
|
<source>Column %1</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Columna %1</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -54,27 +54,27 @@
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Enable SSH Agent integration</source>
|
<source>Enable SSH Agent integration</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Aktivér SSH-agent (kræver genstart)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>SSH_AUTH_SOCK value</source>
|
<source>SSH_AUTH_SOCK value</source>
|
||||||
<translation type="unfinished"/>
|
<translation>SSH_AUTH_SOCK-værdi</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>SSH_AUTH_SOCK override</source>
|
<source>SSH_AUTH_SOCK override</source>
|
||||||
<translation type="unfinished"/>
|
<translation>SSH_AUTH_SOCK-overstyring</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>(empty)</source>
|
<source>(empty)</source>
|
||||||
<translation type="unfinished"/>
|
<translation>(tom)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override.</source>
|
<source>No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override.</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Ingen SSH+agent socket tilgængelig. Sørg enten for at SSH_AUTH_SOCK eksisterer eller opsæt en overstyring.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>SSH Agent connection is working!</source>
|
<source>SSH Agent connection is working!</source>
|
||||||
<translation type="unfinished"/>
|
<translation>SSH-agent-forbindelsen virker!</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
@ -117,23 +117,23 @@
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Reset Settings?</source>
|
<source>Reset Settings?</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Nulstil indstillingerne?</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Are you sure you want to reset all general and security settings to default?</source>
|
<source>Are you sure you want to reset all general and security settings to default?</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Er du sikker på at du vil nulstille alle generelle og sikkerhedsindstillinger til standardværdierne?</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Monochrome (light)</source>
|
<source>Monochrome (light)</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Monokrom (lys)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Monochrome (dark)</source>
|
<source>Monochrome (dark)</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Monokrom (mørk)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Colorful</source>
|
<source>Colorful</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Farverig</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
@ -221,27 +221,27 @@
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Remember previously used databases</source>
|
<source>Remember previously used databases</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Husk tidligere anvendte databaser</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Load previously open databases on startup</source>
|
<source>Load previously open databases on startup</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Indlæs tidligere anvendte databaser ved opstart</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Remember database key files and security dongles</source>
|
<source>Remember database key files and security dongles</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Husk databasenøglefiler og sikkerhedsdongler</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Check for updates at application startup once per week</source>
|
<source>Check for updates at application startup once per week</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Søg efter opdateringer ved programstart en gang ugentligt</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Include beta releases when checking for updates</source>
|
<source>Include beta releases when checking for updates</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Medtag beta-udgivelser når der søges efter opdateringer</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Language:</source>
|
<source>Language:</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Sprog: </translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>(restart program to activate)</source>
|
<source>(restart program to activate)</source>
|
||||||
|
@ -310,7 +310,7 @@
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Safely save database files (disable if experiencing problems with Dropbox, etc.)</source>
|
<source>Safely save database files (disable if experiencing problems with Dropbox, etc.)</source>
|
||||||
<translation>Sicheres speichern der Datenbank (bei Problemen mit Dropbox, etc. deaktivieren)</translation>
|
<translation>Sicheres Speichern der Datenbank (bei Problemen mit Dropbox, etc. deaktivieren)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>User Interface</source>
|
<source>User Interface</source>
|
||||||
@ -3107,7 +3107,7 @@ Das kann dazu führen, dass die betroffenen Plugins nicht mehr richtig funktioni
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Open</source>
|
<source>Open</source>
|
||||||
<translation>Offen</translation>
|
<translation>Öffnen</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Save</source>
|
<source>Save</source>
|
||||||
@ -6829,7 +6829,7 @@ Kernel: %3 %4</translation>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source> (Excluded)</source>
|
<source> (Excluded)</source>
|
||||||
<translation>(ausgeschlossen)</translation>
|
<translation> (ausgeschlossen)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>This entry is being excluded from reports</source>
|
<source>This entry is being excluded from reports</source>
|
||||||
@ -6904,7 +6904,7 @@ Kernel: %3 %4</translation>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source> (Excluded)</source>
|
<source> (Excluded)</source>
|
||||||
<translation>(ausgeschlossen)</translation>
|
<translation> (ausgeschlossen)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>This entry is being excluded from reports</source>
|
<source>This entry is being excluded from reports</source>
|
||||||
|
@ -137,6 +137,10 @@
|
|||||||
<source>Colorful</source>
|
<source>Colorful</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>You must restart the application to set the new language. Would you like to restart now?</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>ApplicationSettingsWidgetGeneral</name>
|
<name>ApplicationSettingsWidgetGeneral</name>
|
||||||
@ -168,10 +172,6 @@
|
|||||||
<source>Automatically save after every change</source>
|
<source>Automatically save after every change</source>
|
||||||
<translation>Automatically save after every change</translation>
|
<translation>Automatically save after every change</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Automatically save on exit</source>
|
|
||||||
<translation>Automatically save on exit</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Automatically reload the database when modified externally</source>
|
<source>Automatically reload the database when modified externally</source>
|
||||||
<translation>Automatically reload the database when modified externally</translation>
|
<translation>Automatically reload the database when modified externally</translation>
|
||||||
@ -306,10 +306,6 @@
|
|||||||
<source>Automatically launch KeePassXC at system startup</source>
|
<source>Automatically launch KeePassXC at system startup</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Mark database as modified for non-data changes (e.g., expanding groups)</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Safely save database files (disable if experiencing problems with Dropbox, etc.)</source>
|
<source>Safely save database files (disable if experiencing problems with Dropbox, etc.)</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
@ -346,6 +342,18 @@
|
|||||||
<source>Auto-Type start delay:</source>
|
<source>Auto-Type start delay:</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Automatically save when locking database</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Automatically save non-data changes when locking database</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Tray icon type</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>ApplicationSettingsWidgetSecurity</name>
|
<name>ApplicationSettingsWidgetSecurity</name>
|
||||||
@ -4887,6 +4895,26 @@ Expect some bugs and minor issues, this version is not meant for production use.
|
|||||||
<source>You must restart the application to apply this setting. Would you like to restart now?</source>
|
<source>You must restart the application to apply this setting. Would you like to restart now?</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Perform Auto-Type Sequence</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>{USERNAME}</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>{USERNAME}{ENTER}</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>{PASSWORD}</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>{PASSWORD}{ENTER}</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>ManageDatabase</name>
|
<name>ManageDatabase</name>
|
||||||
@ -5370,10 +5398,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
|
|||||||
<comment>Password quality</comment>
|
<comment>Password quality</comment>
|
||||||
<translation>Excellent</translation>
|
<translation>Excellent</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>ExtendedASCII</source>
|
|
||||||
<translation>ExtendedASCII</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Switch to advanced mode</source>
|
<source>Switch to advanced mode</source>
|
||||||
<translation>Switch to advanced mode</translation>
|
<translation>Switch to advanced mode</translation>
|
||||||
@ -5382,58 +5406,22 @@ Expect some bugs and minor issues, this version is not meant for production use.
|
|||||||
<source>Advanced</source>
|
<source>Advanced</source>
|
||||||
<translation>Advanced</translation>
|
<translation>Advanced</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>A-Z</source>
|
|
||||||
<translation>A-Z</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>a-z</source>
|
|
||||||
<translation>a-z</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>0-9</source>
|
|
||||||
<translation>0-9</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Braces</source>
|
<source>Braces</source>
|
||||||
<translation>Braces</translation>
|
<translation>Braces</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>{[(</source>
|
|
||||||
<translation>{[(</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Punctuation</source>
|
<source>Punctuation</source>
|
||||||
<translation>Punctuation</translation>
|
<translation>Punctuation</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>.,:;</source>
|
|
||||||
<translation>.,:;</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Quotes</source>
|
<source>Quotes</source>
|
||||||
<translation>Quotes</translation>
|
<translation>Quotes</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>" '</source>
|
|
||||||
<translation>" '</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source><*+!?=</source>
|
|
||||||
<translation><*+!?=</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>\_|-/</source>
|
|
||||||
<translation>\_|-/</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Logograms</source>
|
<source>Logograms</source>
|
||||||
<translation>Logograms</translation>
|
<translation>Logograms</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>#$%&&@^`~</source>
|
|
||||||
<translation>#$%&&@^`~</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Character set to exclude from generated password</source>
|
<source>Character set to exclude from generated password</source>
|
||||||
<translation>Character set to exclude from generated password</translation>
|
<translation>Character set to exclude from generated password</translation>
|
||||||
@ -5554,6 +5542,10 @@ Expect some bugs and minor issues, this version is not meant for production use.
|
|||||||
<source>Regenerate password (%1)</source>
|
<source>Regenerate password (%1)</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Special Characters</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>QApplication</name>
|
<name>QApplication</name>
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -5883,7 +5883,7 @@ Võimalikud käsud:
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Writing the database failed %1.</source>
|
<source>Writing the database failed %1.</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Andmebaasi kirjutamine ebaõnnestus: %1</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Successfully added entry %1.</source>
|
<source>Successfully added entry %1.</source>
|
||||||
@ -6708,23 +6708,23 @@ Kernel: %3 %4</translation>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>AES (%1 rounds)</source>
|
<source>AES (%1 rounds)</source>
|
||||||
<translation type="unfinished"/>
|
<translation>AES (%1 raundi)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Argon2 (%1 rounds, %2 KB)</source>
|
<source>Argon2 (%1 rounds, %2 KB)</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Argon2 (%1 raundi, %2 KB)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>AES 256-bit</source>
|
<source>AES 256-bit</source>
|
||||||
<translation type="unfinished"/>
|
<translation>AES: 256-bitine</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Twofish 256-bit</source>
|
<source>Twofish 256-bit</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Twofish: 256-bitine</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>ChaCha20 256-bit</source>
|
<source>ChaCha20 256-bit</source>
|
||||||
<translation type="unfinished"/>
|
<translation>ChaCha20: 256-bitine</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Benchmark %1 delay</source>
|
<source>Benchmark %1 delay</source>
|
||||||
|
@ -302,11 +302,11 @@
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Automatically launch KeePassXC at system startup</source>
|
<source>Automatically launch KeePassXC at system startup</source>
|
||||||
<translation>Lance automatiquement KeepaxxXC au démarrage du système.</translation>
|
<translation>Lancer automatiquement KeepassXC au démarrage du système.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Mark database as modified for non-data changes (e.g., expanding groups)</source>
|
<source>Mark database as modified for non-data changes (e.g., expanding groups)</source>
|
||||||
<translation>Indiquer la base de données comme modifiée pour les changements hors-données (par exemple : groupes développés)</translation>
|
<translation>Considérer la base de données comme modifiée lors des modifications hors-données (par exemple : groupes développés)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Safely save database files (disable if experiencing problems with Dropbox, etc.)</source>
|
<source>Safely save database files (disable if experiencing problems with Dropbox, etc.)</source>
|
||||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -125,11 +125,11 @@
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Monochrome (light)</source>
|
<source>Monochrome (light)</source>
|
||||||
<translation>Monochrome (licht)</translation>
|
<translation>Monochroom (licht)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Monochrome (dark)</source>
|
<source>Monochrome (dark)</source>
|
||||||
<translation>Monochrome (donker)</translation>
|
<translation>Monochroom (donker)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Colorful</source>
|
<source>Colorful</source>
|
||||||
@ -180,7 +180,7 @@
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Use group icon on entry creation</source>
|
<source>Use group icon on entry creation</source>
|
||||||
<translation>Gebruik groepspictogram voor nieuwe items</translation>
|
<translation>Groepspictogram toepassen bij nieuwe items</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Minimize instead of app exit</source>
|
<source>Minimize instead of app exit</source>
|
||||||
@ -370,7 +370,7 @@
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Forget TouchID after inactivity of</source>
|
<source>Forget TouchID after inactivity of</source>
|
||||||
<translation>TouchID vergeten na inactiviteit van</translation>
|
<translation>Touch ID vergeten na inactiviteit van</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Convenience</source>
|
<source>Convenience</source>
|
||||||
@ -382,7 +382,7 @@
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Forget TouchID when session is locked or lid is closed</source>
|
<source>Forget TouchID when session is locked or lid is closed</source>
|
||||||
<translation>TouchID vergeten wanneer sessie wordt vergrendeld of deksel wordt gesloten</translation>
|
<translation>Touch ID vergeten wanneer sessie wordt vergrendeld of deksel wordt gesloten</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Lock databases after minimizing the window</source>
|
<source>Lock databases after minimizing the window</source>
|
||||||
@ -560,7 +560,7 @@
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>%1 is requesting access to the following entries:</source>
|
<source>%1 is requesting access to the following entries:</source>
|
||||||
<translation>% 1 vraagt toegang tot de volgende vermeldingen:</translation>
|
<translation>%1 vraagt toegang tot de volgende vermeldingen:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Remember access to checked entries</source>
|
<source>Remember access to checked entries</source>
|
||||||
@ -700,7 +700,8 @@ Wil je de bestaande instellingen nu migreren?</translation>
|
|||||||
|
|
||||||
Give the connection a unique name or ID, for example:
|
Give the connection a unique name or ID, for example:
|
||||||
chrome-laptop.</source>
|
chrome-laptop.</source>
|
||||||
<translation>Je hebt een associatieverzoek ontvangen voor de volgende database:%1
|
<translation>Je hebt een associatieverzoek ontvangen voor de volgende database:
|
||||||
|
%1
|
||||||
|
|
||||||
Geef de verbinding een unieke naam of ID, voorbeeld:
|
Geef de verbinding een unieke naam of ID, voorbeeld:
|
||||||
chrome-laptop</translation>
|
chrome-laptop</translation>
|
||||||
@ -919,7 +920,7 @@ chrome-laptop</translation>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4</source>
|
<source>KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4</source>
|
||||||
<translation>KeePassXC-Browser is vereist om de integratie van de browser te laten werken. <br /> download het voor %1 en %2 en %3. %4.</translation>
|
<translation>KeePassXC-Browser is nodig om de integratie met de browser te laten werken. <br /> Download het voor %1 en %2 en %3. %4.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Please see special instructions for browser extension use below</source>
|
<source>Please see special instructions for browser extension use below</source>
|
||||||
@ -1110,7 +1111,7 @@ chrome-laptop</translation>
|
|||||||
<name>CsvParserModel</name>
|
<name>CsvParserModel</name>
|
||||||
<message numerus="yes">
|
<message numerus="yes">
|
||||||
<source>%n column(s)</source>
|
<source>%n column(s)</source>
|
||||||
<translation><numerusform>1 kolom</numerusform><numerusform>%n kolom(men)</numerusform></translation>
|
<translation><numerusform>%n kolom</numerusform><numerusform>%n kolom(men)</numerusform></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>%1, %2, %3</source>
|
<source>%1, %2, %3</source>
|
||||||
@ -1236,7 +1237,7 @@ Het is raadzaam om een nieuw sleutelbestand te genereren.</translation>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Unlock KeePassXC Database</source>
|
<source>Unlock KeePassXC Database</source>
|
||||||
<translation>Ontgrendel KeePassXC-database</translation>
|
<translation>KeePassXC-database ontgrendelen</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Enter Password:</source>
|
<source>Enter Password:</source>
|
||||||
@ -1272,7 +1273,7 @@ Het is raadzaam om een nieuw sleutelbestand te genereren.</translation>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>TouchID for Quick Unlock</source>
|
<source>TouchID for Quick Unlock</source>
|
||||||
<translation>TouchID voor snelle ontgrendeling</translation>
|
<translation>Touch ID voor snelle ontgrendeling</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Clear</source>
|
<source>Clear</source>
|
||||||
@ -1989,7 +1990,7 @@ Dit is zeker een fout, rapporteer dit aan de ontwikkelaars.</translation>
|
|||||||
</message>
|
</message>
|
||||||
<message numerus="yes">
|
<message numerus="yes">
|
||||||
<source>Do you really want to move %n entry(s) to the recycle bin?</source>
|
<source>Do you really want to move %n entry(s) to the recycle bin?</source>
|
||||||
<translation><numerusform>Wil je echt %n item naar de Prullenbak verplaatsen?</numerusform><numerusform>Weet je zeker dat je %n item(s) naar de prullenbak wilt verplaatsen?</numerusform></translation>
|
<translation><numerusform>Wil je echt %n item naar de Prullenbak verplaatsen?</numerusform><numerusform>Wil je echt %n items naar de Prullenbak verplaatsen?</numerusform></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Execute command?</source>
|
<source>Execute command?</source>
|
||||||
@ -2214,7 +2215,7 @@ Veilig opslaan uitschakelen en opnieuw proberen?</translation>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Edit entry</source>
|
<source>Edit entry</source>
|
||||||
<translation>Item wijzigen</translation>
|
<translation>Item bewerken</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>New attribute</source>
|
<source>New attribute</source>
|
||||||
@ -2361,11 +2362,11 @@ Veilig opslaan uitschakelen en opnieuw proberen?</translation>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source><html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html></source>
|
<source><html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html></source>
|
||||||
<translation><html><head/><body><p>Indien aangevinkt, zal het item niet verschijnen in rapporten zoals Health Check en HIBP, zelfs als het niet voldoet aan de kwaliteitseisen (bijv. wachtwoord-entropie of hergebruik). Je kunt het vinkje plaatsen als je geen controle hebt over het wachtwoord (bijvoorbeeld als het een viercijferige pincode moet zijn) om te voorkomen dat de rapporten onoverzichtelijk worden.</p></body></html></translation>
|
<translation><html><head/><body><p>Indien aangevinkt, zal het item niet verschijnen in rapportages zoals Health Check en HIBP, zelfs als het niet voldoet aan de kwaliteitseisen (bijv. wachtwoord-entropie of -hergebruik). Je kunt het vinkje plaatsen als je geen controle hebt over het wachtwoord (bijvoorbeeld als het een viercijferige pincode moet zijn) om te voorkomen dat de rapportages onoverzichtelijk worden.</p></body></html></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Exclude from database reports</source>
|
<source>Exclude from database reports</source>
|
||||||
<translation>Uitsluiten van databaserapporten</translation>
|
<translation>Uitsluiten van databaserapportage</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
@ -2432,7 +2433,7 @@ Veilig opslaan uitschakelen en opnieuw proberen?</translation>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Inherit default Auto-Type sequence from the group</source>
|
<source>Inherit default Auto-Type sequence from the group</source>
|
||||||
<translation>Standaard auto-typevolgorde van de groep erven</translation>
|
<translation>Standaard auto-typevolgorde van de groep overnemen</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Use custom Auto-Type sequence:</source>
|
<source>Use custom Auto-Type sequence:</source>
|
||||||
@ -2451,7 +2452,7 @@ Veilig opslaan uitschakelen en opnieuw proberen?</translation>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Skip Auto-Submit for this entry</source>
|
<source>Skip Auto-Submit for this entry</source>
|
||||||
<translation>Automatisch versturen uitzetten voor dit item</translation>
|
<translation>Automatisch indienen uitschakelen voor dit item</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Hide this entry from the browser extension</source>
|
<source>Hide this entry from the browser extension</source>
|
||||||
@ -2553,7 +2554,7 @@ Veilig opslaan uitschakelen en opnieuw proberen?</translation>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Download favicon for URL</source>
|
<source>Download favicon for URL</source>
|
||||||
<translation>Pictogram downloaden voor URL</translation>
|
<translation>Favicon downloaden voor URL</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Password field</source>
|
<source>Password field</source>
|
||||||
@ -2964,7 +2965,7 @@ Ondersteund zijn: %1.</translation>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Download favicon for URL</source>
|
<source>Download favicon for URL</source>
|
||||||
<translation>Pictogram downloaden voor URL</translation>
|
<translation>Favicon downloaden voor URL</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Apply selected icon to subgroups and entries</source>
|
<source>Apply selected icon to subgroups and entries</source>
|
||||||
@ -2988,11 +2989,11 @@ Ondersteund zijn: %1.</translation>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Use default icon</source>
|
<source>Use default icon</source>
|
||||||
<translation>Gebruik standaardicoon</translation>
|
<translation>Standaardpictogram gebruiken</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Use custom icon</source>
|
<source>Use custom icon</source>
|
||||||
<translation>Gebruik aangepast icoon</translation>
|
<translation>Aangepast pictogram gebruiken</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Apply icon to...</source>
|
<source>Apply icon to...</source>
|
||||||
@ -3610,7 +3611,7 @@ Je kunt de DuckDuckGo website pictogram dienst inschakelen in de sectie 'Be
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Download Failed</source>
|
<source>Download Failed</source>
|
||||||
<translation>Downloaden is mislukt</translation>
|
<translation>Download is mislukt</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Downloading favicons (%1/%2)...</source>
|
<source>Downloading favicons (%1/%2)...</source>
|
||||||
@ -3884,7 +3885,7 @@ Deze actie is niet omkeerbaar. Je kunt de geïmporteerde database niet meer open
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Invalid cipher uuid length: %1 (length=%2)</source>
|
<source>Invalid cipher uuid length: %1 (length=%2)</source>
|
||||||
<translation>Ongeldige versleuteling uuid lengte: %1 (lengte=2%)</translation>
|
<translation>Ongeldige versleuteling uuid lengte: %1 (lengte=%2)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Unable to parse UUID: %1</source>
|
<source>Unable to parse UUID: %1</source>
|
||||||
@ -4524,11 +4525,11 @@ Wij raden je aan om de AppImage te gebruiken welke beschikbaar is op onze downlo
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Add a new entry</source>
|
<source>Add a new entry</source>
|
||||||
<translation>Een nieuw item toevoegen</translation>
|
<translation>Nieuw item toevoegen</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>View or edit entry</source>
|
<source>View or edit entry</source>
|
||||||
<translation>Bekijk/bewerk item</translation>
|
<translation>Item bekijken/bewerken</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Add a new group</source>
|
<source>Add a new group</source>
|
||||||
@ -4650,15 +4651,15 @@ Houd rekening met fouten en kleine problemen. Deze versie is niet bedoeld voor r
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>&New Entry…</source>
|
<source>&New Entry…</source>
|
||||||
<translation>&Nieuw Item…</translation>
|
<translation>&Nieuw item…</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>&Edit Entry…</source>
|
<source>&Edit Entry…</source>
|
||||||
<translation>&Wijzig Item…</translation>
|
<translation>Item &bewerken…</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>&Delete Entry…</source>
|
<source>&Delete Entry…</source>
|
||||||
<translation>&Verwijder Item…</translation>
|
<translation>Item &verwijderen…</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>&New Group…</source>
|
<source>&New Group…</source>
|
||||||
@ -4666,7 +4667,7 @@ Houd rekening met fouten en kleine problemen. Deze versie is niet bedoeld voor r
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>&Edit Group…</source>
|
<source>&Edit Group…</source>
|
||||||
<translation>&Wijzig Groep…</translation>
|
<translation>Groep &bewerken…</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>&Delete Group…</source>
|
<source>&Delete Group…</source>
|
||||||
@ -4686,7 +4687,7 @@ Houd rekening met fouten en kleine problemen. Deze versie is niet bedoeld voor r
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Database &Reports...</source>
|
<source>Database &Reports...</source>
|
||||||
<translation>Database &Rapporten...</translation>
|
<translation>Database-&rapportage...</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Statistics, health check, etc.</source>
|
<source>Statistics, health check, etc.</source>
|
||||||
@ -4834,7 +4835,8 @@ Houd rekening met fouten en kleine problemen. Deze versie is niet bedoeld voor r
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>You must restart the application to apply this setting. Would you like to restart now?</source>
|
<source>You must restart the application to apply this setting. Would you like to restart now?</source>
|
||||||
<translation>Je moet de applicatie opnieuw opstarten om deze instelling toe te passen. Wil je nu opnieuw opstarten?</translation>
|
<translation>Je moet de applicatie opnieuw opstarten om deze instelling toe te passen.
|
||||||
|
Wil je KeePassXC nu opnieuw opstarten?</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
@ -4931,11 +4933,11 @@ Houd rekening met fouten en kleine problemen. Deze versie is niet bedoeld voor r
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Removed custom data %1 [%2]</source>
|
<source>Removed custom data %1 [%2]</source>
|
||||||
<translation>Gebruikersinstellingen verwijderd %1[%2]</translation>
|
<translation>Gebruikersinstellingen verwijderd %1 [%2]</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Adding custom data %1 [%2]</source>
|
<source>Adding custom data %1 [%2]</source>
|
||||||
<translation>Gebruikersinstellingen toegevoegd %1[%2]</translation>
|
<translation>Gebruikersinstellingen toegevoegd %1 [%2]</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
@ -5298,7 +5300,7 @@ Houd rekening met fouten en kleine problemen. Deze versie is niet bedoeld voor r
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Password Quality: %1</source>
|
<source>Password Quality: %1</source>
|
||||||
<translation>Wachtwoordkwaliteit: %1</translation>
|
<translation>Kwaliteit: %1</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Poor</source>
|
<source>Poor</source>
|
||||||
@ -5446,7 +5448,7 @@ Houd rekening met fouten en kleine problemen. Deze versie is niet bedoeld voor r
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Regenerate password</source>
|
<source>Regenerate password</source>
|
||||||
<translation>Wachtwoord opnieuw genereren</translation>
|
<translation>Opnieuw genereren</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Copy password</source>
|
<source>Copy password</source>
|
||||||
@ -5502,7 +5504,7 @@ Houd rekening met fouten en kleine problemen. Deze versie is niet bedoeld voor r
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Regenerate password (%1)</source>
|
<source>Regenerate password (%1)</source>
|
||||||
<translation>Wachtwoord opnieuw genereren (%1)</translation>
|
<translation>Òpnieuw genereren (%1)</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
@ -5561,7 +5563,7 @@ Houd rekening met fouten en kleine problemen. Deze versie is niet bedoeld voor r
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Health Check</source>
|
<source>Health Check</source>
|
||||||
<translation>Gezondheidscontrole</translation>
|
<translation>Gezondheid</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>HIBP</source>
|
<source>HIBP</source>
|
||||||
@ -5615,7 +5617,7 @@ Houd rekening met fouten en kleine problemen. Deze versie is niet bedoeld voor r
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Database hash not available</source>
|
<source>Database hash not available</source>
|
||||||
<translation>Database-controlecijfer is niet beschikbaar</translation>
|
<translation>Database-hashwaarde is niet beschikbaar</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Client public key not received</source>
|
<source>Client public key not received</source>
|
||||||
@ -5728,7 +5730,7 @@ Houd rekening met fouten en kleine problemen. Deze versie is niet bedoeld voor r
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Path of the entry to edit.</source>
|
<source>Path of the entry to edit.</source>
|
||||||
<translation>Pad van het te wijzigen item.</translation>
|
<translation>Pad van het te bewerken item.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Estimate the entropy of a password.</source>
|
<source>Estimate the entropy of a password.</source>
|
||||||
@ -6042,7 +6044,7 @@ Beschikbare opdrachten:
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Entropy %1 (%2)</source>
|
<source>Entropy %1 (%2)</source>
|
||||||
<translation>Entropie %1 (2 %)</translation>
|
<translation>Entropie %1 (%2)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>*** Password length (%1) != sum of length of parts (%2) ***</source>
|
<source>*** Password length (%1) != sum of length of parts (%2) ***</source>
|
||||||
@ -6136,7 +6138,7 @@ Beschikbare opdrachten:
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>%1: (row, col) %2,%3</source>
|
<source>%1: (row, col) %2,%3</source>
|
||||||
<translation>%1: (rij, col) 2%,3%</translation>
|
<translation>%1: (rij, col) %2,%3</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Argon2 (KDBX 4 – recommended)</source>
|
<source>Argon2 (KDBX 4 – recommended)</source>
|
||||||
@ -6574,7 +6576,7 @@ Kernelversie: %3 %4</translation>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Copy the given attribute to the clipboard. Defaults to "password" if not specified.</source>
|
<source>Copy the given attribute to the clipboard. Defaults to "password" if not specified.</source>
|
||||||
<translation>Kopieer het gegeven kenmerk naar het klembord. Dit is "password" tenzij anders gespecificeerd.</translation>
|
<translation>Kopieer het gegeven kenmerk naar het klembord. Dit is "wachtwoord" tenzij anders gespecificeerd.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Copy the current TOTP to the clipboard (equivalent to "-a totp").</source>
|
<source>Copy the current TOTP to the clipboard (equivalent to "-a totp").</source>
|
||||||
@ -6590,7 +6592,7 @@ Kernelversie: %3 %4</translation>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>ERROR: attribute %1 is ambiguous, it matches %2.</source>
|
<source>ERROR: attribute %1 is ambiguous, it matches %2.</source>
|
||||||
<translation>FOUT: attribuut %1 is dubbelzinnig, het komt overeen met %2.</translation>
|
<translation>FOUT: kenmerk %1 is dubbelzinnig, het komt overeen met %2.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Attribute "%1" not found.</source>
|
<source>Attribute "%1" not found.</source>
|
||||||
@ -6791,7 +6793,7 @@ Kernelversie: %3 %4</translation>
|
|||||||
<name>ReportsWidgetHealthcheck</name>
|
<name>ReportsWidgetHealthcheck</name>
|
||||||
<message>
|
<message>
|
||||||
<source>Also show entries that have been excluded from reports</source>
|
<source>Also show entries that have been excluded from reports</source>
|
||||||
<translation>Toon ook vermeldingen die zijn uitgesloten van rapporten</translation>
|
<translation>Toon ook vermeldingen die zijn uitgesloten van rapportage</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Hover over reason to show additional details. Double-click entries to edit.</source>
|
<source>Hover over reason to show additional details. Double-click entries to edit.</source>
|
||||||
@ -6830,11 +6832,11 @@ Kernelversie: %3 %4</translation>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>This entry is being excluded from reports</source>
|
<source>This entry is being excluded from reports</source>
|
||||||
<translation>Dit item wordt uitgesloten van rapporten</translation>
|
<translation>Dit item wordt uitgesloten van rapportage</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Please wait, health data is being calculated...</source>
|
<source>Please wait, health data is being calculated...</source>
|
||||||
<translation>Even geduld, gezondheidsgegevens worden vergaard...</translation>
|
<translation>Even geduld, gezondheidsgegevens worden verzameld...</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Congratulations, everything is healthy!</source>
|
<source>Congratulations, everything is healthy!</source>
|
||||||
@ -6862,14 +6864,14 @@ Kernelversie: %3 %4</translation>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Exclude from reports</source>
|
<source>Exclude from reports</source>
|
||||||
<translation>Uitsluiten van rapporten</translation>
|
<translation>Uitsluiten van rapportage</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>ReportsWidgetHibp</name>
|
<name>ReportsWidgetHibp</name>
|
||||||
<message>
|
<message>
|
||||||
<source>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.</source>
|
<source>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.</source>
|
||||||
<translation>LET OP: Voor dit rapport wordt informatie verzonden naar de online dienst Have I Been Pwned (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.</translation>
|
<translation>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.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Perform Online Analysis</source>
|
<source>Perform Online Analysis</source>
|
||||||
@ -6877,7 +6879,7 @@ Kernelversie: %3 %4</translation>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Also show entries that have been excluded from reports</source>
|
<source>Also show entries that have been excluded from reports</source>
|
||||||
<translation>Toon ook vermeldingen die zijn uitgesloten van rapporten</translation>
|
<translation>Toon ook vermeldingen die zijn uitgesloten van rapportage</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases.</source>
|
<source>This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases.</source>
|
||||||
@ -6905,7 +6907,7 @@ Kernelversie: %3 %4</translation>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>This entry is being excluded from reports</source>
|
<source>This entry is being excluded from reports</source>
|
||||||
<translation>Dit item wordt uitgesloten van rapporten</translation>
|
<translation>Dit item wordt uitgesloten van rapportage</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>once</source>
|
<source>once</source>
|
||||||
@ -6945,7 +6947,7 @@ Kernelversie: %3 %4</translation>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Exclude from reports</source>
|
<source>Exclude from reports</source>
|
||||||
<translation>Uitsluiten van rapporten</translation>
|
<translation>Uitsluiten van rapportage</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
@ -7052,11 +7054,11 @@ Kernelversie: %3 %4</translation>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Entries excluded from reports</source>
|
<source>Entries excluded from reports</source>
|
||||||
<translation>Items die zijn uitgesloten van rapporten</translation>
|
<translation>Items die zijn uitgesloten van rapportage</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>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.</source>
|
<source>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.</source>
|
||||||
<translation>Het uitsluiten van vermeldingen uit rapporten, 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.</translation>
|
<translation>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.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Average password length</source>
|
<source>Average password length</source>
|
||||||
|
@ -302,7 +302,7 @@
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Automatically launch KeePassXC at system startup</source>
|
<source>Automatically launch KeePassXC at system startup</source>
|
||||||
<translation>Iniciar KeePassXc ao arrancar o sistema</translation>
|
<translation>Iniciar KeePassXC ao arrancar o sistema</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Mark database as modified for non-data changes (e.g., expanding groups)</source>
|
<source>Mark database as modified for non-data changes (e.g., expanding groups)</source>
|
||||||
@ -2991,11 +2991,11 @@ As extensões suportadas são: %1.</translation>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Use default icon</source>
|
<source>Use default icon</source>
|
||||||
<translation>Utilizar icon padrão</translation>
|
<translation>Utilizar ícone padrão</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Use custom icon</source>
|
<source>Use custom icon</source>
|
||||||
<translation>Utilizar icon padrão</translation>
|
<translation>Utilizar ícone padrão</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Apply icon to...</source>
|
<source>Apply icon to...</source>
|
||||||
@ -3467,7 +3467,7 @@ Tem a certeza de que deseja adicionar este ficheiro?</translation>
|
|||||||
<message>
|
<message>
|
||||||
<source>Has attachments</source>
|
<source>Has attachments</source>
|
||||||
<comment>Entry attachment icon toggle</comment>
|
<comment>Entry attachment icon toggle</comment>
|
||||||
<translation>Tem anexosTem anexos</translation>
|
<translation>Tem anexos</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Has TOTP</source>
|
<source>Has TOTP</source>
|
||||||
@ -5129,7 +5129,7 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Passphrase is required to decrypt this key</source>
|
<source>Passphrase is required to decrypt this key</source>
|
||||||
<translation>Necessita de uma palavra-passe para decifrar esta chave</translation>
|
<translation>Necessita de uma frase-chave para decifrar esta chave</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Key derivation failed, key file corrupted?</source>
|
<source>Key derivation failed, key file corrupted?</source>
|
||||||
@ -5137,7 +5137,7 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Decryption failed, wrong passphrase?</source>
|
<source>Decryption failed, wrong passphrase?</source>
|
||||||
<translation>Falha ao decifrar, palavra-passe errada?</translation>
|
<translation>Falha ao decifrar, frase-chave errada?</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Unexpected EOF while reading public key</source>
|
<source>Unexpected EOF while reading public key</source>
|
||||||
@ -5283,7 +5283,7 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Passphrase</source>
|
<source>Passphrase</source>
|
||||||
<translation>Palavra-passe</translation>
|
<translation>Frase-chave</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Wordlist:</source>
|
<source>Wordlist:</source>
|
||||||
@ -5589,7 +5589,7 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Empty</source>
|
<source>Empty</source>
|
||||||
<translation>Vazio</translation>
|
<translation>Sim</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Remove</source>
|
<source>Remove</source>
|
||||||
@ -5873,11 +5873,11 @@ Comandos disponíveis:
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Generate a new random diceware passphrase.</source>
|
<source>Generate a new random diceware passphrase.</source>
|
||||||
<translation>Gerar uma nova palavra-passe baseada em dados (diceware).</translation>
|
<translation>Gerar uma frase-chave baseada em dados (diceware).</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Word count for the diceware passphrase.</source>
|
<source>Word count for the diceware passphrase.</source>
|
||||||
<translation>Número de palavras para a palavra-passe.</translation>
|
<translation>Número de palavras para a frase-chave.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Wordlist for the diceware generator.
|
<source>Wordlist for the diceware generator.
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -6387,7 +6387,7 @@ Jadro: %3 %4</translation>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Evaluating database entries against HIBP file, this will take a while...</source>
|
<source>Evaluating database entries against HIBP file, this will take a while...</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Hodnotenie položiek databázy oproti súboru HIBP, bude to chvíľu trvať…</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Close the currently opened database.</source>
|
<source>Close the currently opened database.</source>
|
||||||
@ -6467,7 +6467,7 @@ Jadro: %3 %4</translation>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Only print the changes detected by the merge operation.</source>
|
<source>Only print the changes detected by the merge operation.</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Vypisovať len zmeny zistený pri operácii zlúčenia.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Yubikey slot for the second database.</source>
|
<source>Yubikey slot for the second database.</source>
|
||||||
@ -6647,7 +6647,7 @@ Jadro: %3 %4</translation>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Benchmarking key derivation function for %1ms delay.</source>
|
<source>Benchmarking key derivation function for %1ms delay.</source>
|
||||||
<translation type="unfinished"/>
|
<translation>meranie výkonu funkcie odvodenia kľúča pre %1ms trvanie.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Setting %1 rounds for key derivation function.</source>
|
<source>Setting %1 rounds for key derivation function.</source>
|
||||||
@ -6748,7 +6748,7 @@ Jadro: %3 %4</translation>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Benchmark %1 delay</source>
|
<source>Benchmark %1 delay</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Meranie výkonu %1 oneskorenie</translation>
|
||||||
</message>
|
</message>
|
||||||
<message numerus="yes">
|
<message numerus="yes">
|
||||||
<source>%1 ms</source>
|
<source>%1 ms</source>
|
||||||
@ -7253,7 +7253,7 @@ Jadro: %3 %4</translation>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Save current changes to activate the plugin and enable editing of this section.</source>
|
<source>Save current changes to activate the plugin and enable editing of this section.</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Uložte aktuálne zmeny na aktiváciu zásuvného modulu a zapnutie úpravy tejto sekcie.</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
@ -7795,11 +7795,11 @@ Napríklad: JBSWY3DPEHPK3PXP</translation>
|
|||||||
<name>YubiKey</name>
|
<name>YubiKey</name>
|
||||||
<message>
|
<message>
|
||||||
<source>%1 [%2] Configured Slot - %3</source>
|
<source>%1 [%2] Configured Slot - %3</source>
|
||||||
<translation type="unfinished"/>
|
<translation>%1 [%2] Nastavený slot – %3</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>%1 [%2] Challenge Response - Slot %3 - %4</source>
|
<source>%1 [%2] Challenge Response - Slot %3 - %4</source>
|
||||||
<translation type="unfinished"/>
|
<translation>%1[%2] Výzva – odpoveď – slot %3 – %4</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Press</source>
|
<source>Press</source>
|
||||||
|
@ -310,7 +310,7 @@
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Safely save database files (disable if experiencing problems with Dropbox, etc.)</source>
|
<source>Safely save database files (disable if experiencing problems with Dropbox, etc.)</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Spara databasfiler säkert (inaktivera vid problem med Dropbox etc)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>User Interface</source>
|
<source>User Interface</source>
|
||||||
@ -326,7 +326,7 @@
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Tray icon type:</source>
|
<source>Tray icon type:</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Typ av systemfältsikon:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Reset settings to default…</source>
|
<source>Reset settings to default…</source>
|
||||||
@ -1092,15 +1092,15 @@ chrome-laptop.</translation>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Header lines skipped</source>
|
<source>Header lines skipped</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Rubriker undantagna</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>First line has field names</source>
|
<source>First line has field names</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Första raden har fältnamn</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Not Present</source>
|
<source>Not Present</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Inte tillgänglig</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Column %1</source>
|
<source>Column %1</source>
|
||||||
@ -1332,11 +1332,11 @@ Om du inte har någon nyckelfil, lämnar du fältet tomt.</translation>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source><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></source>
|
<source><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></source>
|
||||||
<translation type="unfinished"/>
|
<translation><p>Som tillägg till ditt huvudlö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></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Key file to unlock the database</source>
|
<source>Key file to unlock the database</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Nyckelfil för att låsa upp databasen</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Please touch the button on your YubiKey!</source>
|
<source>Please touch the button on your YubiKey!</source>
|
||||||
@ -1386,7 +1386,7 @@ Om du inte har någon nyckelfil, lämnar du fältet tomt.</translation>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Database Credentials</source>
|
<source>Database Credentials</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Databasens inloggningsuppgifter</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
@ -1562,7 +1562,7 @@ Vill du verkligen fortsätta utan lösenord?</translation>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Failed to change database credentials</source>
|
<source>Failed to change database credentials</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Kunde inte ändra databasens inloggningsuppgifter</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
@ -2162,7 +2162,7 @@ Vill du inaktivera "Spara säkert" och försöka igen?</translation>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Could not find database file: %1</source>
|
<source>Could not find database file: %1</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Kunde inte hitta databasfilen: %1</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
@ -3662,22 +3662,22 @@ Om detta upprepas, kan din databasfil vara skadad.</translation>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Unable to calculate database key</source>
|
<source>Unable to calculate database key</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Kan inte beräkna databasnyckeln</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Unable to issue challenge-response: %1</source>
|
<source>Unable to issue challenge-response: %1</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Kunde inte utfärda challenge-response: %1</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>Kdbx3Writer</name>
|
<name>Kdbx3Writer</name>
|
||||||
<message>
|
<message>
|
||||||
<source>Unable to issue challenge-response: %1</source>
|
<source>Unable to issue challenge-response: %1</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Kunde inte utfärda challenge-response: %1</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Unable to calculate database key</source>
|
<source>Unable to calculate database key</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Kan inte beräkna databasnyckeln</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
@ -3806,7 +3806,7 @@ Om detta upprepas, kan din databasfil vara skadad.</translation>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Unable to calculate database key: %1</source>
|
<source>Unable to calculate database key: %1</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Kan inte beräkna databasnyckel: %1</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
@ -3827,7 +3827,7 @@ Om detta upprepas, kan din databasfil vara skadad.</translation>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Unable to calculate database key: %1</source>
|
<source>Unable to calculate database key: %1</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Kunde inte beräkna databasnyckel: %1</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
@ -4027,15 +4027,15 @@ Rad %2, kolumn: %3</translation>
|
|||||||
<name>KeeAgentSettings</name>
|
<name>KeeAgentSettings</name>
|
||||||
<message>
|
<message>
|
||||||
<source>Invalid KeeAgent settings file structure.</source>
|
<source>Invalid KeeAgent settings file structure.</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Ogiltig KeeAgent-inställningsfilstruktur.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Private key is an attachment but no attachments provided.</source>
|
<source>Private key is an attachment but no attachments provided.</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Privat nyckel är en bifogad fil men inga bilagor tillhandahålls.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Private key is empty</source>
|
<source>Private key is empty</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Privat nyckel är tom</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>File too large to be a private key</source>
|
<source>File too large to be a private key</source>
|
||||||
@ -4212,7 +4212,7 @@ Om detta upprepas, kan din databasfil vara skadad.</translation>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Unable to calculate database key</source>
|
<source>Unable to calculate database key</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Kan inte beräkna databasnyckeln</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
@ -4392,7 +4392,10 @@ Vill du verkligen fortsätta med den här filen?</translation>
|
|||||||
unsupported in the future.
|
unsupported in the future.
|
||||||
|
|
||||||
Generate a new key file in the database security settings.</source>
|
Generate a new key file in the database security settings.</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Du använder ett äldre nyckelfilsformat som kanske inte
|
||||||
|
kommer att stödjas i framtiden.
|
||||||
|
|
||||||
|
Generera en ny nyckelfil i databasens säkerhetsinställningar.</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
@ -4683,11 +4686,11 @@ Vissa fel och mindre problem kan uppstå. Denna version är inte ämnad för dag
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Database &Security…</source>
|
<source>Database &Security…</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Databas&säkerhet...</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Database &Reports...</source>
|
<source>Database &Reports...</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Databas&rapporter...</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Statistics, health check, etc.</source>
|
<source>Statistics, health check, etc.</source>
|
||||||
@ -4735,11 +4738,11 @@ Vissa fel och mindre problem kan uppstå. Denna version är inte ämnad för dag
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>&CSV File…</source>
|
<source>&CSV File…</source>
|
||||||
<translation type="unfinished"/>
|
<translation>&CSV-fil...</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>&HTML File…</source>
|
<source>&HTML File…</source>
|
||||||
<translation type="unfinished"/>
|
<translation>&HTML-fil...</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>KeePass 1 Database…</source>
|
<source>KeePass 1 Database…</source>
|
||||||
@ -4771,7 +4774,7 @@ Vissa fel och mindre problem kan uppstå. Denna version är inte ämnad för dag
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Open Getting Started Guide</source>
|
<source>Open Getting Started Guide</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Öppna Kom-igång-guiden</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>&Online Help</source>
|
<source>&Online Help</source>
|
||||||
@ -4779,7 +4782,7 @@ Vissa fel och mindre problem kan uppstå. Denna version är inte ämnad för dag
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Go to online documentation</source>
|
<source>Go to online documentation</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Gå till online-dokumentationen</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Open User Guide</source>
|
<source>Open User Guide</source>
|
||||||
@ -4823,7 +4826,7 @@ Vissa fel och mindre problem kan uppstå. Denna version är inte ämnad för dag
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Show Preview Panel</source>
|
<source>Show Preview Panel</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Visa förhandsgranskningspanelen</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Don't show again for this version</source>
|
<source>Don't show again for this version</source>
|
||||||
@ -4831,11 +4834,11 @@ Vissa fel och mindre problem kan uppstå. Denna version är inte ämnad för dag
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Restart Application?</source>
|
<source>Restart Application?</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Vill du starta om programmet?</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>You must restart the application to apply this setting. Would you like to restart now?</source>
|
<source>You must restart the application to apply this setting. Would you like to restart now?</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Du måste starta om programmet för att tillämpa den här inställningen. Vill du starta om nu?</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
@ -4978,11 +4981,11 @@ Vissa fel och mindre problem kan uppstå. Denna version är inte ämnad för dag
|
|||||||
<name>NewDatabaseWizardPageDatabaseKey</name>
|
<name>NewDatabaseWizardPageDatabaseKey</name>
|
||||||
<message>
|
<message>
|
||||||
<source>Database Credentials</source>
|
<source>Database Credentials</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Databasens inloggningsuppgifter</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>A set of credentials known only to you that protects your database.</source>
|
<source>A set of credentials known only to you that protects your database.</source>
|
||||||
<translation type="unfinished"/>
|
<translation>En uppsättning inloggningsuppgifter som bara du känner till, skyddar din databas.</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
@ -5192,15 +5195,15 @@ Vissa fel och mindre problem kan uppstå. Denna version är inte ämnad för dag
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Toggle Password (%1)</source>
|
<source>Toggle Password (%1)</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Växla lösenord (%1)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Generate Password (%1)</source>
|
<source>Generate Password (%1)</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Generera lösenord (%1)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Warning: Caps Lock enabled!</source>
|
<source>Warning: Caps Lock enabled!</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Varning! Caps Lock aktiverat!</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
@ -5467,19 +5470,19 @@ Vissa fel och mindre problem kan uppstå. Denna version är inte ämnad för dag
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Generate Password</source>
|
<source>Generate Password</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Generera lösenord</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Also choose from:</source>
|
<source>Also choose from:</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Välj också från:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Additional characters to use for the generated password</source>
|
<source>Additional characters to use for the generated password</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Fler tecken att användas för lösenordsgenerering</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Additional characters</source>
|
<source>Additional characters</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Fler tecken</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Word Count:</source>
|
<source>Word Count:</source>
|
||||||
@ -5491,7 +5494,7 @@ Vissa fel och mindre problem kan uppstå. Denna version är inte ämnad för dag
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Apply Password</source>
|
<source>Apply Password</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Tillämpa lösenordet</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Ctrl+S</source>
|
<source>Ctrl+S</source>
|
||||||
@ -5503,7 +5506,7 @@ Vissa fel och mindre problem kan uppstå. Denna version är inte ämnad för dag
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Regenerate password (%1)</source>
|
<source>Regenerate password (%1)</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Generera om lösenordet (%1)</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
@ -5518,51 +5521,51 @@ Vissa fel och mindre problem kan uppstå. Denna version är inte ämnad för dag
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Very weak password</source>
|
<source>Very weak password</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Mycket svagt lösenord</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Password entropy is %1 bits</source>
|
<source>Password entropy is %1 bits</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Lösenordsentropin är %1 bitar</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Weak password</source>
|
<source>Weak password</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Svagt lösenord</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Used in %1/%2</source>
|
<source>Used in %1/%2</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Använt i %1/%2</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Password is used %1 times</source>
|
<source>Password is used %1 times</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Lösenordet används %1 gånger</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Password has expired</source>
|
<source>Password has expired</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Lösenordet har upphört att gälla</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Password expiry was %1</source>
|
<source>Password expiry was %1</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Lösenordet upphörde att gälla %1</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Password is about to expire</source>
|
<source>Password is about to expire</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Lösenordet upphör snart att gälla</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Password expires in %1 days</source>
|
<source>Password expires in %1 days</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Lösenordet upphör att gälla om %1 dagar</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Password will expire soon</source>
|
<source>Password will expire soon</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Lösenordet upphör snart att gälla</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Password expires on %1</source>
|
<source>Password expires on %1</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Lösenordet upphör att gälla %1</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Health Check</source>
|
<source>Health Check</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Hälsokontroll</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>HIBP</source>
|
<source>HIBP</source>
|
||||||
@ -6556,7 +6559,7 @@ Kärna: %3 %4</translation>
|
|||||||
</message>
|
</message>
|
||||||
<message numerus="yes">
|
<message numerus="yes">
|
||||||
<source>Password for '%1' has been leaked %2 time(s)!</source>
|
<source>Password for '%1' has been leaked %2 time(s)!</source>
|
||||||
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
|
<translation><numerusform>Lösenordet för "%1" har läckts %2 gång!</numerusform><numerusform>Lösenordet för "%1" har läckts %2 gånger!</numerusform></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Invalid password generator after applying all options</source>
|
<source>Invalid password generator after applying all options</source>
|
||||||
@ -6568,190 +6571,191 @@ Kärna: %3 %4</translation>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Browser Plugin Failure</source>
|
<source>Browser Plugin Failure</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Webbläsartillägget misslyckades</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Could not save the native messaging script file for %1.</source>
|
<source>Could not save the native messaging script file for %1.</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Kunde inte spara den inbyggda meddelandeskriptfilen för %1.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Copy the given attribute to the clipboard. Defaults to "password" if not specified.</source>
|
<source>Copy the given attribute to the clipboard. Defaults to "password" if not specified.</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Kopiera det angivna attributet till urklipp. Standardvärdet är "password" om inget annat anges.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Copy the current TOTP to the clipboard (equivalent to "-a totp").</source>
|
<source>Copy the current TOTP to the clipboard (equivalent to "-a totp").</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Kopiera aktuell TOTP till urklipp (motsvarar "-a totp").</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Copy an entry's attribute to the clipboard.</source>
|
<source>Copy an entry's attribute to the clipboard.</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Kopiera en posts attribut till urklipp.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>ERROR: Please specify one of --attribute or --totp, not both.</source>
|
<source>ERROR: Please specify one of --attribute or --totp, not both.</source>
|
||||||
<translation type="unfinished"/>
|
<translation>FEL: Ange antingen --attribute eller --totp, inte bägge.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>ERROR: attribute %1 is ambiguous, it matches %2.</source>
|
<source>ERROR: attribute %1 is ambiguous, it matches %2.</source>
|
||||||
<translation type="unfinished"/>
|
<translation>FEL: attributet %1 är tvetydigt, det matchar %2.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Attribute "%1" not found.</source>
|
<source>Attribute "%1" not found.</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Kunde inte hitta attributet "%1".</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Entry's "%1" attribute copied to the clipboard!</source>
|
<source>Entry's "%1" attribute copied to the clipboard!</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Attributet "%1" kopierat till urklipp!</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Yubikey slot and optional serial used to access the database (e.g., 1:7370001).</source>
|
<source>Yubikey slot and optional serial used to access the database (e.g., 1:7370001).</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Yubikey-plats och valfritt serienummer som används för att komma åt databasen (t.ex. 1:7370001).</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>slot[:serial]</source>
|
<source>slot[:serial]</source>
|
||||||
<translation type="unfinished"/>
|
<translation>slot[:serial]</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Target decryption time in MS for the database.</source>
|
<source>Target decryption time in MS for the database.</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Målets avkrypteringstid i ms för databasen.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>time</source>
|
<source>time</source>
|
||||||
<translation type="unfinished"/>
|
<translation>tid</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Set the key file for the database.</source>
|
<source>Set the key file for the database.</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Ange nyckelfil för databasen.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Set a password for the database.</source>
|
<source>Set a password for the database.</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Ange lösenord för databasen.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Invalid decryption time %1.</source>
|
<source>Invalid decryption time %1.</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Ogiltig avkrypteringstid %1.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Target decryption time must be between %1 and %2.</source>
|
<source>Target decryption time must be between %1 and %2.</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Målets avkrypteringstid måste vara mellan %1 och %2.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Failed to set database password.</source>
|
<source>Failed to set database password.</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Kunde inte ange databaslösenord.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Benchmarking key derivation function for %1ms delay.</source>
|
<source>Benchmarking key derivation function for %1ms delay.</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Benchmarking nyckelhärledningsfunktion för %1ms fördröjning.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Setting %1 rounds for key derivation function.</source>
|
<source>Setting %1 rounds for key derivation function.</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Anger %1 rundor för nyckelhärledningsfunktionen.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>error while setting database key derivation settings.</source>
|
<source>error while setting database key derivation settings.</source>
|
||||||
<translation type="unfinished"/>
|
<translation>fel vid inställning av databasens nyckel härledning.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'.</source>
|
<source>Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'.</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Format att använda vid export. Tillgängliga alternativ är "xml" eller "csv". Standardvärdet är "xml".</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Unable to import XML database: %1</source>
|
<source>Unable to import XML database: %1</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Kunde inte importera XML-databas: %1</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Show a database's information.</source>
|
<source>Show a database's information.</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Visa en databas information.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>UUID: </source>
|
<source>UUID: </source>
|
||||||
<translation type="unfinished"/>
|
<translation>UUID: </translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Name: </source>
|
<source>Name: </source>
|
||||||
<translation>Namn:</translation>
|
<translation>Namn: </translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Description: </source>
|
<source>Description: </source>
|
||||||
<translation>Beskrivning:</translation>
|
<translation>Beskrivning: </translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Cipher: </source>
|
<source>Cipher: </source>
|
||||||
<translation type="unfinished"/>
|
<translation>Chiffer: </translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>KDF: </source>
|
<source>KDF: </source>
|
||||||
<translation type="unfinished"/>
|
<translation>KDF: </translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Recycle bin is enabled.</source>
|
<source>Recycle bin is enabled.</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Papperskorgen är aktiverad.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Recycle bin is not enabled.</source>
|
<source>Recycle bin is not enabled.</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Papperskorgen är inte aktiverad.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Invalid command %1.</source>
|
<source>Invalid command %1.</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Ogiltigt kommando %1.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Invalid YubiKey serial %1</source>
|
<source>Invalid YubiKey serial %1</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Ogiltigt YubiKey serienummer %1</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Please touch the button on your YubiKey to continue…</source>
|
<source>Please touch the button on your YubiKey to continue…</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Tryck på knappen på din YubiKey för att fortsätta...</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Do you want to create a database with an empty password? [y/N]: </source>
|
<source>Do you want to create a database with an empty password? [y/N]: </source>
|
||||||
<translation type="unfinished"/>
|
<translation>Vill du skapa en databas med ett tomt lösenord? [y/N]: </translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Repeat password: </source>
|
<source>Repeat password: </source>
|
||||||
<translation>Repetera lösenord:</translation>
|
<translation>Upprepa lösenordet: </translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Error: Passwords do not match.</source>
|
<source>Error: Passwords do not match.</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Fel: Lösenorden stämmer inte.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>All clipping programs failed. Tried %1
|
<source>All clipping programs failed. Tried %1
|
||||||
</source>
|
</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Alla klippprogram misslyckades. Försökte med %1
|
||||||
|
</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>AES (%1 rounds)</source>
|
<source>AES (%1 rounds)</source>
|
||||||
<translation type="unfinished"/>
|
<translation>AES (%1 rundor)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Argon2 (%1 rounds, %2 KB)</source>
|
<source>Argon2 (%1 rounds, %2 KB)</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Argon2 (%1 rundor, %2 KB)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>AES 256-bit</source>
|
<source>AES 256-bit</source>
|
||||||
<translation type="unfinished"/>
|
<translation>AES 256-bit</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Twofish 256-bit</source>
|
<source>Twofish 256-bit</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Twofish 256-bit</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>ChaCha20 256-bit</source>
|
<source>ChaCha20 256-bit</source>
|
||||||
<translation type="unfinished"/>
|
<translation>ChaCha20 256-bit</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Benchmark %1 delay</source>
|
<source>Benchmark %1 delay</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Benchmark %1 fördröjning</translation>
|
||||||
</message>
|
</message>
|
||||||
<message numerus="yes">
|
<message numerus="yes">
|
||||||
<source>%1 ms</source>
|
<source>%1 ms</source>
|
||||||
<comment>milliseconds</comment>
|
<comment>milliseconds</comment>
|
||||||
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
|
<translation><numerusform>%1 ms</numerusform><numerusform>%1 ms</numerusform></translation>
|
||||||
</message>
|
</message>
|
||||||
<message numerus="yes">
|
<message numerus="yes">
|
||||||
<source>%1 s</source>
|
<source>%1 s</source>
|
||||||
<comment>seconds</comment>
|
<comment>seconds</comment>
|
||||||
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
|
<translation><numerusform>%1 s</numerusform><numerusform>%1 s</numerusform></translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
@ -6792,20 +6796,20 @@ Kärna: %3 %4</translation>
|
|||||||
<name>ReportsWidgetHealthcheck</name>
|
<name>ReportsWidgetHealthcheck</name>
|
||||||
<message>
|
<message>
|
||||||
<source>Also show entries that have been excluded from reports</source>
|
<source>Also show entries that have been excluded from reports</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Visa också poster som har undantagits från rapporter</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Hover over reason to show additional details. Double-click entries to edit.</source>
|
<source>Hover over reason to show additional details. Double-click entries to edit.</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Håll muspekaren över anledning, för att visa fler detaljer. Dubbelklicka på posten för att redigera.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Bad</source>
|
<source>Bad</source>
|
||||||
<comment>Password quality</comment>
|
<comment>Password quality</comment>
|
||||||
<translation type="unfinished"/>
|
<translation>Usel</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Bad — password must be changed</source>
|
<source>Bad — password must be changed</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Usel — Lösenordet måste ändras</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Poor</source>
|
<source>Poor</source>
|
||||||
@ -6814,7 +6818,7 @@ Kärna: %3 %4</translation>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Poor — password should be changed</source>
|
<source>Poor — password should be changed</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Dålig — Lösenordet måste ändras</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Weak</source>
|
<source>Weak</source>
|
||||||
@ -6823,23 +6827,23 @@ Kärna: %3 %4</translation>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Weak — consider changing the password</source>
|
<source>Weak — consider changing the password</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Svag — Överväg att ändra lösenordet</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source> (Excluded)</source>
|
<source> (Excluded)</source>
|
||||||
<translation type="unfinished"/>
|
<translation> (Undantagen)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>This entry is being excluded from reports</source>
|
<source>This entry is being excluded from reports</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Denna post undantas från rapporter</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Please wait, health data is being calculated...</source>
|
<source>Please wait, health data is being calculated...</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Vänta, hälsodata beräknas...</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Congratulations, everything is healthy!</source>
|
<source>Congratulations, everything is healthy!</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Grattis! Allt är friskt!</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Title</source>
|
<source>Title</source>
|
||||||
@ -6851,7 +6855,7 @@ Kärna: %3 %4</translation>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Score</source>
|
<source>Score</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Poäng</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Reason</source>
|
<source>Reason</source>
|
||||||
@ -6863,30 +6867,30 @@ Kärna: %3 %4</translation>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Exclude from reports</source>
|
<source>Exclude from reports</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Undanta från rapporter</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>ReportsWidgetHibp</name>
|
<name>ReportsWidgetHibp</name>
|
||||||
<message>
|
<message>
|
||||||
<source>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.</source>
|
<source>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.</source>
|
||||||
<translation type="unfinished"/>
|
<translation>VARNING! Denna rapport kräver att du skickar information till onlinetjänsten Have I Been Pwned (https://haveibeenpwned.com). Om du fortsätter kommer dina databaslösenord att hashas kryptografiskt och de första fem tecknen i dessa hashar kommer att skickas säkert till den här tjänsten. Databasen förblir säker och kan inte rekonstitueras från denna information. Antalet lösenord som du skickar och din IP-adress kommer dock att exponeras för den här tjänsten.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Perform Online Analysis</source>
|
<source>Perform Online Analysis</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Utför online-analys</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Also show entries that have been excluded from reports</source>
|
<source>Also show entries that have been excluded from reports</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Visa även poster som har uteslutits från rapporter</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases.</source>
|
<source>This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases.</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Denna version av KeePassXC har inga nätverksfunktioner. Nätverk krävs för att kontrollera dina lösenord mot Have I Been Pwned-databaser.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Congratulations, no exposed passwords!</source>
|
<source>Congratulations, no exposed passwords!</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Grattis, inga exponerade lösenord!</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Title</source>
|
<source>Title</source>
|
||||||
@ -6898,55 +6902,55 @@ Kärna: %3 %4</translation>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Password exposed…</source>
|
<source>Password exposed…</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Lösenord exponerat...</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source> (Excluded)</source>
|
<source> (Excluded)</source>
|
||||||
<translation type="unfinished"/>
|
<translation> (Undantaget)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>This entry is being excluded from reports</source>
|
<source>This entry is being excluded from reports</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Denna post har undantagits från rapporter</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>once</source>
|
<source>once</source>
|
||||||
<translation type="unfinished"/>
|
<translation>en gång</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>up to 10 times</source>
|
<source>up to 10 times</source>
|
||||||
<translation type="unfinished"/>
|
<translation>upp till 10 gånger</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>up to 100 times</source>
|
<source>up to 100 times</source>
|
||||||
<translation type="unfinished"/>
|
<translation>upp till 100 gånger</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>up to 1000 times</source>
|
<source>up to 1000 times</source>
|
||||||
<translation type="unfinished"/>
|
<translation>upp till 1000 gånger</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>up to 10,000 times</source>
|
<source>up to 10,000 times</source>
|
||||||
<translation type="unfinished"/>
|
<translation>upp till 10000 gånger</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>up to 100,000 times</source>
|
<source>up to 100,000 times</source>
|
||||||
<translation type="unfinished"/>
|
<translation>upp till 100000 gånger</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>up to a million times</source>
|
<source>up to a million times</source>
|
||||||
<translation type="unfinished"/>
|
<translation>upp till en miljon gånger</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>millions of times</source>
|
<source>millions of times</source>
|
||||||
<translation type="unfinished"/>
|
<translation>milljoner gånger</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Edit Entry...</source>
|
<source>Edit Entry...</source>
|
||||||
<translation>Redigera post...</translation>
|
<translation>Redigera posten...</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Exclude from reports</source>
|
<source>Exclude from reports</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Undanta från rapporter</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
@ -7053,11 +7057,11 @@ Kärna: %3 %4</translation>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Entries excluded from reports</source>
|
<source>Entries excluded from reports</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Poster undantagna från rapporter</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>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.</source>
|
<source>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.</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Att utesluta poster från rapporter, t.ex. för att de har ett svagt lösenord, är inte nödvändigtvis ett problem, men du bör hålla ett öga på dem.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Average password length</source>
|
<source>Average password length</source>
|
||||||
@ -7108,11 +7112,11 @@ Kärna: %3 %4</translation>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Key identity ownership conflict. Refusing to add.</source>
|
<source>Key identity ownership conflict. Refusing to add.</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Nyckelidentitets ägarskapskonflikt. Nekar att lägga till.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>No agent running, cannot list identities.</source>
|
<source>No agent running, cannot list identities.</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Tjänsten körs inte, kan inte lista identiteter.</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
@ -7234,19 +7238,19 @@ Kärna: %3 %4</translation>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Don't confirm when entries are deleted by clients</source>
|
<source>Don't confirm when entries are deleted by clients</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Bekräfta inte när poster tas bort av klienter</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source><b>Error:</b> Failed to connect to DBus. Please check your DBus setup.</source>
|
<source><b>Error:</b> Failed to connect to DBus. Please check your DBus setup.</source>
|
||||||
<translation type="unfinished"/>
|
<translation><b>Fel:</b> Kunde inte ansluta till DBus. Kontrollera din DBus-installation.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source><b>Warning:</b> </source>
|
<source><b>Warning:</b> </source>
|
||||||
<translation type="unfinished"/>
|
<translation><b>Varning!</b> </translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Save current changes to activate the plugin and enable editing of this section.</source>
|
<source>Save current changes to activate the plugin and enable editing of this section.</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Spara aktuella ändringar för att aktivera insticksmodulen och aktivera redigering av det här avsnittet.</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
@ -7788,11 +7792,11 @@ Exempel: JBSWY3DPEHPK3PXP</translation>
|
|||||||
<name>YubiKey</name>
|
<name>YubiKey</name>
|
||||||
<message>
|
<message>
|
||||||
<source>%1 [%2] Configured Slot - %3</source>
|
<source>%1 [%2] Configured Slot - %3</source>
|
||||||
<translation type="unfinished"/>
|
<translation>%1 [%2] Konfigurerad plats - %3</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>%1 [%2] Challenge Response - Slot %3 - %4</source>
|
<source>%1 [%2] Challenge Response - Slot %3 - %4</source>
|
||||||
<translation type="unfinished"/>
|
<translation>%1 [%2] Challenge Response - Plats %3 - %4</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Press</source>
|
<source>Press</source>
|
||||||
@ -7804,31 +7808,31 @@ Exempel: JBSWY3DPEHPK3PXP</translation>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>%1 Invalid slot specified - %2</source>
|
<source>%1 Invalid slot specified - %2</source>
|
||||||
<translation type="unfinished"/>
|
<translation>%1 Ogiltig plats specificerad - %2</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>The YubiKey interface has not been initialized.</source>
|
<source>The YubiKey interface has not been initialized.</source>
|
||||||
<translation type="unfinished"/>
|
<translation>YubiKey-gränssnittet har inte startats.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Hardware key is currently in use.</source>
|
<source>Hardware key is currently in use.</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Hårdvarunyckel används för närvarande.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Could not find hardware key with serial number %1. Please plug it in to continue.</source>
|
<source>Could not find hardware key with serial number %1. Please plug it in to continue.</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Kunde hitta hårdvarunyckel med serienummer %1. Anslut den för att fortsätta.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Hardware key timed out waiting for user interaction.</source>
|
<source>Hardware key timed out waiting for user interaction.</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Hårdvarunyckelns tidsgräns för användarinteraktion överskreds.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>A USB error ocurred when accessing the hardware key: %1</source>
|
<source>A USB error ocurred when accessing the hardware key: %1</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Ett USB-fel uppstod vid åtkomst till maskinvarunyckeln: %1</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Failed to complete a challenge-response, the specific error was: %1</source>
|
<source>Failed to complete a challenge-response, the specific error was: %1</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Kunde inte slutföra en challenge-response, det specifika felet var: %1</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
@ -7855,11 +7859,11 @@ Exempel: JBSWY3DPEHPK3PXP</translation>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Could not find any hardware keys!</source>
|
<source>Could not find any hardware keys!</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Kunde inte hitta några hårdvarunycklar!</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Selected hardware key slot does not support challenge-response!</source>
|
<source>Selected hardware key slot does not support challenge-response!</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Den valda maskinvarunyckelplatsen stöder inte challenge-response!</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Detecting hardware keys…</source>
|
<source>Detecting hardware keys…</source>
|
||||||
|
@ -66,7 +66,7 @@
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>(empty)</source>
|
<source>(empty)</source>
|
||||||
<translation type="unfinished"/>
|
<translation>(ว่าง)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override.</source>
|
<source>No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override.</source>
|
||||||
@ -125,15 +125,15 @@
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Monochrome (light)</source>
|
<source>Monochrome (light)</source>
|
||||||
<translation type="unfinished"/>
|
<translation>สีเดียว (สว่าง)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Monochrome (dark)</source>
|
<source>Monochrome (dark)</source>
|
||||||
<translation type="unfinished"/>
|
<translation>สีเดียว (มืด)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Colorful</source>
|
<source>Colorful</source>
|
||||||
<translation type="unfinished"/>
|
<translation>สีสดใส</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
@ -221,7 +221,7 @@
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Remember previously used databases</source>
|
<source>Remember previously used databases</source>
|
||||||
<translation type="unfinished"/>
|
<translation>จำฐานข้อมูลที่ใช้ครั้งที่แล้ว</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Load previously open databases on startup</source>
|
<source>Load previously open databases on startup</source>
|
||||||
@ -229,15 +229,15 @@
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Remember database key files and security dongles</source>
|
<source>Remember database key files and security dongles</source>
|
||||||
<translation type="unfinished"/>
|
<translation>จำแฟ้มกุญแจและดองเกิลความปลอดภัยที่ใช้กับฐานข้อมูล</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Check for updates at application startup once per week</source>
|
<source>Check for updates at application startup once per week</source>
|
||||||
<translation type="unfinished"/>
|
<translation>ตรวจสอบการปรับปรุงสัปดาห์ละครั้งขณะเปิดแอป</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Include beta releases when checking for updates</source>
|
<source>Include beta releases when checking for updates</source>
|
||||||
<translation type="unfinished"/>
|
<translation>ให้ตรวจสอบรุ่นทดสอบเบตาด้วย ขณะตรวจสอบการปรับปรุง</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Language:</source>
|
<source>Language:</source>
|
||||||
@ -245,7 +245,7 @@
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>(restart program to activate)</source>
|
<source>(restart program to activate)</source>
|
||||||
<translation type="unfinished"/>
|
<translation>(เริ่มโปรแกรมใหม่เพื่อใช้งาน)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Minimize window after unlocking database</source>
|
<source>Minimize window after unlocking database</source>
|
||||||
@ -265,7 +265,7 @@
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Drop to background</source>
|
<source>Drop to background</source>
|
||||||
<translation type="unfinished"/>
|
<translation>หลบไปอยู่ที่ฉากหลัง</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Favicon download timeout:</source>
|
<source>Favicon download timeout:</source>
|
||||||
@ -273,7 +273,7 @@
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Website icon download timeout in seconds</source>
|
<source>Website icon download timeout in seconds</source>
|
||||||
<translation type="unfinished"/>
|
<translation>จำนวนวินาทีที่จะพยายามดาวน์โหลดไอคอนของเว็บไซต์</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source> sec</source>
|
<source> sec</source>
|
||||||
@ -302,7 +302,7 @@
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Automatically launch KeePassXC at system startup</source>
|
<source>Automatically launch KeePassXC at system startup</source>
|
||||||
<translation type="unfinished"/>
|
<translation>เรียกให้ KeePassXC โดยอัตโนมัติเมื่อเริ่มระบบ</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Mark database as modified for non-data changes (e.g., expanding groups)</source>
|
<source>Mark database as modified for non-data changes (e.g., expanding groups)</source>
|
||||||
@ -314,7 +314,7 @@
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>User Interface</source>
|
<source>User Interface</source>
|
||||||
<translation type="unfinished"/>
|
<translation>ส่วนติดต่อผู้ใช้</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Toolbar button style:</source>
|
<source>Toolbar button style:</source>
|
||||||
@ -326,7 +326,7 @@
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Tray icon type:</source>
|
<source>Tray icon type:</source>
|
||||||
<translation type="unfinished"/>
|
<translation>ชนิดไอคอนที่ถาด:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Reset settings to default…</source>
|
<source>Reset settings to default…</source>
|
||||||
@ -556,7 +556,7 @@
|
|||||||
<name>BrowserAccessControlDialog</name>
|
<name>BrowserAccessControlDialog</name>
|
||||||
<message>
|
<message>
|
||||||
<source>KeePassXC - Browser Access Request</source>
|
<source>KeePassXC - Browser Access Request</source>
|
||||||
<translation type="unfinished"/>
|
<translation>KeePassXC - การขอเข้าถึงเบราว์เซอร์</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>%1 is requesting access to the following entries:</source>
|
<source>%1 is requesting access to the following entries:</source>
|
||||||
@ -712,7 +712,7 @@ chrome-laptop.</source>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Enable browser integration</source>
|
<source>Enable browser integration</source>
|
||||||
<translation type="unfinished"/>
|
<translation>เปิดใช้การผสานกับเว็บเบราว์เซอร์</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>General</source>
|
<source>General</source>
|
||||||
@ -720,7 +720,7 @@ chrome-laptop.</source>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Browsers installed as snaps are currently not supported.</source>
|
<source>Browsers installed as snaps are currently not supported.</source>
|
||||||
<translation type="unfinished"/>
|
<translation>ยังไม่รองรับเบราว์เซอร์ที่ถูกติดตั้งจาก Snap</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Enable integration for these browsers:</source>
|
<source>Enable integration for these browsers:</source>
|
||||||
@ -728,31 +728,31 @@ chrome-laptop.</source>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Vivaldi</source>
|
<source>Vivaldi</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Vivaldi</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>&Edge</source>
|
<source>&Edge</source>
|
||||||
<translation type="unfinished"/>
|
<translation>&Edge</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Firefox</source>
|
<source>Firefox</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Firefox</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Tor Browser</source>
|
<source>Tor Browser</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Tor Browser</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Brave</source>
|
<source>Brave</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Brave</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Google Chrome</source>
|
<source>Google Chrome</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Google Chrome</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Chromium</source>
|
<source>Chromium</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Chromium</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Show a notification when credentials are requested</source>
|
<source>Show a notification when credentials are requested</source>
|
||||||
@ -864,7 +864,7 @@ chrome-laptop.</source>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Browser for custom proxy file</source>
|
<source>Browser for custom proxy file</source>
|
||||||
<translation type="unfinished"/>
|
<translation>เรียกดูแฟ้มพร็อกซีที่กำหนดเอง</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Browse...</source>
|
<source>Browse...</source>
|
||||||
@ -877,7 +877,7 @@ chrome-laptop.</source>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Browser type:</source>
|
<source>Browser type:</source>
|
||||||
<translation type="unfinished"/>
|
<translation>ชนิดเบราว์เซอร์:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Toolbar button style</source>
|
<source>Toolbar button style</source>
|
||||||
@ -897,7 +897,7 @@ chrome-laptop.</source>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Browse for custom browser path</source>
|
<source>Browse for custom browser path</source>
|
||||||
<translation type="unfinished"/>
|
<translation>เบราว์เซอร์จากพาธที่ตั้งเบราว์เซอร์ที่ระบุเอง</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Custom extension ID:</source>
|
<source>Custom extension ID:</source>
|
||||||
@ -913,7 +913,7 @@ chrome-laptop.</source>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4</source>
|
<source>KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4</source>
|
||||||
<translation type="unfinished"/>
|
<translation>จำเป็นต้องมีโปรแกรม KeePassXC-Browser เพื่อให้การผสานกับเบราว์เซอร์ทำงานได้ <br />ดาวน์โหลดมันสำหรับ %1 และ %2 และ %3. %4</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Please see special instructions for browser extension use below</source>
|
<source>Please see special instructions for browser extension use below</source>
|
||||||
@ -1144,19 +1144,20 @@ chrome-laptop.</source>
|
|||||||
<message>
|
<message>
|
||||||
<source>%1
|
<source>%1
|
||||||
Backup database located at %2</source>
|
Backup database located at %2</source>
|
||||||
<translation type="unfinished"/>
|
<translation>%1
|
||||||
|
พบฐานข้อมูลสำรองที่ %2</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Could not save, database does not point to a valid file.</source>
|
<source>Could not save, database does not point to a valid file.</source>
|
||||||
<translation type="unfinished"/>
|
<translation>ไม่สามารถบันทึกได้ ฐานข้อมูลไม่ได้ถูกชี้ไปยังแฟ้มที่ใช้งานได้</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Could not save, database file is read-only.</source>
|
<source>Could not save, database file is read-only.</source>
|
||||||
<translation type="unfinished"/>
|
<translation>ไม่สามารถบันทึกได้ แฟ้มฐานข้อมูลเป็นแบบอ่านอย่างเดียว</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Database file has unmerged changes.</source>
|
<source>Database file has unmerged changes.</source>
|
||||||
<translation type="unfinished"/>
|
<translation>แฟ้มฐานข้อมูลมีความเปลี่ยนแปลงที่ยังไม่ถูกบันทึกกลับ</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Recycle Bin</source>
|
<source>Recycle Bin</source>
|
||||||
@ -1236,7 +1237,7 @@ Please consider generating a new key file.</source>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Password field</source>
|
<source>Password field</source>
|
||||||
<translation type="unfinished"/>
|
<translation>ช่องรหัสผ่าน</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Hardware key slot selection</source>
|
<source>Hardware key slot selection</source>
|
||||||
@ -1244,7 +1245,7 @@ Please consider generating a new key file.</source>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Browse for key file</source>
|
<source>Browse for key file</source>
|
||||||
<translation type="unfinished"/>
|
<translation>เลือกแฟ้มกุญแจ</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Browse...</source>
|
<source>Browse...</source>
|
||||||
@ -1287,7 +1288,7 @@ To prevent this error from appearing, you must go to "Database Settings / S
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Retry with empty password</source>
|
<source>Retry with empty password</source>
|
||||||
<translation type="unfinished"/>
|
<translation>ลองด้วยรหัสผ่านว่างเปล่า</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Enter Additional Credentials (if any):</source>
|
<source>Enter Additional Credentials (if any):</source>
|
||||||
@ -1308,7 +1309,7 @@ To prevent this error from appearing, you must go to "Database Settings / S
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Cannot use database file as key file</source>
|
<source>Cannot use database file as key file</source>
|
||||||
<translation type="unfinished"/>
|
<translation>ไม่สามารถใช้แฟ้มฐานข้อมูลเป็นแฟ้มกุญแจได้</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>You cannot use your database file as a key file.
|
<source>You cannot use your database file as a key file.
|
||||||
@ -1337,7 +1338,7 @@ If you do not have a key file, please leave the field empty.</source>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Select hardware key…</source>
|
<source>Select hardware key…</source>
|
||||||
<translation type="unfinished"/>
|
<translation>เลือกกุญแจกายภาพ...</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
@ -1481,7 +1482,7 @@ This is necessary to maintain compatibility with the browser plugin.</source>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Stored browser keys</source>
|
<source>Stored browser keys</source>
|
||||||
<translation type="unfinished"/>
|
<translation>กุญแจเบราว์เซอร์ที่ถูกเก็บอยู่</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Remove selected key</source>
|
<source>Remove selected key</source>
|
||||||
@ -1699,11 +1700,11 @@ If you keep this number, your database may be too easy to crack!</source>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>?? ms</source>
|
<source>?? ms</source>
|
||||||
<translation type="unfinished"/>
|
<translation>?? มิลลิวินาที</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>? s</source>
|
<source>? s</source>
|
||||||
<translation type="unfinished"/>
|
<translation>? วิ</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
@ -2426,7 +2427,7 @@ Disable safe saves and try again?</source>
|
|||||||
<name>EditEntryWidgetBrowser</name>
|
<name>EditEntryWidgetBrowser</name>
|
||||||
<message>
|
<message>
|
||||||
<source>These settings affect to the entry's behaviour with the browser extension.</source>
|
<source>These settings affect to the entry's behaviour with the browser extension.</source>
|
||||||
<translation type="unfinished"/>
|
<translation>การตั้งค่าเหล่านี้จะส่งผลต่อพฤติกรรมการป้อนข้อมูลด้วยส่วนเสริมในเบราว์เซอร์</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>General</source>
|
<source>General</source>
|
||||||
@ -2438,11 +2439,11 @@ Disable safe saves and try again?</source>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Hide this entry from the browser extension</source>
|
<source>Hide this entry from the browser extension</source>
|
||||||
<translation type="unfinished"/>
|
<translation>ซ่อนรายการข้อมูลนี้จากส่วนเสริมในเบราว์เซอร์</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Additional URL's</source>
|
<source>Additional URL's</source>
|
||||||
<translation type="unfinished"/>
|
<translation>URL เพิ่มเติม</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Add</source>
|
<source>Add</source>
|
||||||
@ -2454,7 +2455,7 @@ Disable safe saves and try again?</source>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Edit</source>
|
<source>Edit</source>
|
||||||
<translation type="unfinished"/>
|
<translation>แก้ไข</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection.</source>
|
<source>Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection.</source>
|
||||||
@ -2497,11 +2498,11 @@ Disable safe saves and try again?</source>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Delete selected history state</source>
|
<source>Delete selected history state</source>
|
||||||
<translation type="unfinished"/>
|
<translation>ลบช่วงประวัติที่เลือก</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Delete all history</source>
|
<source>Delete all history</source>
|
||||||
<translation type="unfinished"/>
|
<translation>ลบประวัติทั้งหมด</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
@ -2540,15 +2541,15 @@ Disable safe saves and try again?</source>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Password field</source>
|
<source>Password field</source>
|
||||||
<translation type="unfinished"/>
|
<translation>ช่องรหัสผ่าน</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Toggle notes visible</source>
|
<source>Toggle notes visible</source>
|
||||||
<translation type="unfinished"/>
|
<translation>สลับให้เห็นบันทึก</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Expiration field</source>
|
<source>Expiration field</source>
|
||||||
<translation type="unfinished"/>
|
<translation>ช่องการหมดอายุ</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Expiration Presets</source>
|
<source>Expiration Presets</source>
|
||||||
@ -2560,19 +2561,19 @@ Disable safe saves and try again?</source>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Notes field</source>
|
<source>Notes field</source>
|
||||||
<translation type="unfinished"/>
|
<translation>ชื่อบันทึก</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Title field</source>
|
<source>Title field</source>
|
||||||
<translation type="unfinished"/>
|
<translation>ช่องหัวเรื่อง</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Username field</source>
|
<source>Username field</source>
|
||||||
<translation type="unfinished"/>
|
<translation>ช่องชื่อผู้ใช้</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Toggle expiration</source>
|
<source>Toggle expiration</source>
|
||||||
<translation type="unfinished"/>
|
<translation>สลับการหมดอายุ</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Notes:</source>
|
<source>Notes:</source>
|
||||||
@ -2584,7 +2585,7 @@ Disable safe saves and try again?</source>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Expires:</source>
|
<source>Expires:</source>
|
||||||
<translation type="unfinished"/>
|
<translation>หมดอายุ:</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
@ -2668,7 +2669,7 @@ Disable safe saves and try again?</source>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Browser for key file</source>
|
<source>Browser for key file</source>
|
||||||
<translation type="unfinished"/>
|
<translation>เรียกดูแฟ้มกุญแจ</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>External key file</source>
|
<source>External key file</source>
|
||||||
@ -2812,7 +2813,7 @@ Supported extensions are: %1.</source>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Password field</source>
|
<source>Password field</source>
|
||||||
<translation type="unfinished"/>
|
<translation>ช่องรหัสผ่าน</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Clear fields</source>
|
<source>Clear fields</source>
|
||||||
@ -2820,7 +2821,7 @@ Supported extensions are: %1.</source>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Browse for share file</source>
|
<source>Browse for share file</source>
|
||||||
<translation type="unfinished"/>
|
<translation>เรียกดูแฟ้มที่แบ่งปัน</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Browse...</source>
|
<source>Browse...</source>
|
||||||
@ -2831,15 +2832,15 @@ Supported extensions are: %1.</source>
|
|||||||
<name>EditGroupWidgetMain</name>
|
<name>EditGroupWidgetMain</name>
|
||||||
<message>
|
<message>
|
||||||
<source>Name field</source>
|
<source>Name field</source>
|
||||||
<translation type="unfinished"/>
|
<translation>ช่องชื่อ</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Notes field</source>
|
<source>Notes field</source>
|
||||||
<translation type="unfinished"/>
|
<translation>ชื่อบันทึก</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Toggle expiration</source>
|
<source>Toggle expiration</source>
|
||||||
<translation type="unfinished"/>
|
<translation>สลับการหมดอายุ</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Auto-Type toggle for this and sub groups</source>
|
<source>Auto-Type toggle for this and sub groups</source>
|
||||||
@ -2847,7 +2848,7 @@ Supported extensions are: %1.</source>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Expiration field</source>
|
<source>Expiration field</source>
|
||||||
<translation type="unfinished"/>
|
<translation>ช่องการหมดอายุ</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Search toggle for this and sub groups</source>
|
<source>Search toggle for this and sub groups</source>
|
||||||
@ -2859,7 +2860,7 @@ Supported extensions are: %1.</source>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Expires:</source>
|
<source>Expires:</source>
|
||||||
<translation type="unfinished"/>
|
<translation>หมดอายุ:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Use default Auto-Type sequence of parent group</source>
|
<source>Use default Auto-Type sequence of parent group</source>
|
||||||
@ -2867,7 +2868,7 @@ Supported extensions are: %1.</source>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Auto-Type:</source>
|
<source>Auto-Type:</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Auto-Type:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Search:</source>
|
<source>Search:</source>
|
||||||
@ -2879,7 +2880,7 @@ Supported extensions are: %1.</source>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Name:</source>
|
<source>Name:</source>
|
||||||
<translation type="unfinished"/>
|
<translation>ชื่อ:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Set default Auto-Type sequence</source>
|
<source>Set default Auto-Type sequence</source>
|
||||||
@ -3043,7 +3044,7 @@ This may cause the affected plugins to malfunction.</source>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Unique ID</source>
|
<source>Unique ID</source>
|
||||||
<translation type="unfinished"/>
|
<translation>รหัสระบุตัวที่ไม่ซ้ำ</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Plugin data</source>
|
<source>Plugin data</source>
|
||||||
@ -3576,7 +3577,7 @@ You can enable the DuckDuckGo website icon service in the security section of th
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Downloading...</source>
|
<source>Downloading...</source>
|
||||||
<translation type="unfinished"/>
|
<translation>กำลังดาวน์โหลด...</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Ok</source>
|
<source>Ok</source>
|
||||||
@ -3584,15 +3585,15 @@ You can enable the DuckDuckGo website icon service in the security section of th
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Already Exists</source>
|
<source>Already Exists</source>
|
||||||
<translation type="unfinished"/>
|
<translation>มีอยู่แล้ว</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Download Failed</source>
|
<source>Download Failed</source>
|
||||||
<translation type="unfinished"/>
|
<translation>การดาวน์โหลดล้มเหลว</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Downloading favicons (%1/%2)...</source>
|
<source>Downloading favicons (%1/%2)...</source>
|
||||||
<translation type="unfinished"/>
|
<translation>กำลังดาวน์โหลด favicon (%1/%2)...</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
@ -4224,11 +4225,11 @@ If this reoccurs, then your database file may be corrupt.</source>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Imported from</source>
|
<source>Imported from</source>
|
||||||
<translation type="unfinished"/>
|
<translation>นำเข้าจาก</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Exported to</source>
|
<source>Exported to</source>
|
||||||
<translation type="unfinished"/>
|
<translation>ส่งออกไป</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Synchronized with</source>
|
<source>Synchronized with</source>
|
||||||
@ -4324,11 +4325,11 @@ Message: %2</source>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Key file selection</source>
|
<source>Key file selection</source>
|
||||||
<translation type="unfinished"/>
|
<translation>เลือกแฟ้มกุญแจ</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Browse for key file</source>
|
<source>Browse for key file</source>
|
||||||
<translation type="unfinished"/>
|
<translation>เลือกแฟ้มกุญแจ</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Browse...</source>
|
<source>Browse...</source>
|
||||||
@ -4336,7 +4337,7 @@ Message: %2</source>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Generate a new key file</source>
|
<source>Generate a new key file</source>
|
||||||
<translation type="unfinished"/>
|
<translation>สร้างแฟ้มกุญแจใหม่</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Note: Do not use a file that may change as that will prevent you from unlocking your database!</source>
|
<source>Note: Do not use a file that may change as that will prevent you from unlocking your database!</source>
|
||||||
@ -5197,7 +5198,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Password field</source>
|
<source>Password field</source>
|
||||||
<translation type="unfinished"/>
|
<translation>ช่องรหัสผ่าน</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Repeat password field</source>
|
<source>Repeat password field</source>
|
||||||
@ -6246,7 +6247,7 @@ Available commands:
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Build Type: %1</source>
|
<source>Build Type: %1</source>
|
||||||
<translation type="unfinished"/>
|
<translation>ชนิดรุ่นที่สร้าง: %1</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Revision: %1</source>
|
<source>Revision: %1</source>
|
||||||
@ -6538,7 +6539,7 @@ Kernel: %3 %4</source>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Browser Plugin Failure</source>
|
<source>Browser Plugin Failure</source>
|
||||||
<translation type="unfinished"/>
|
<translation>โปรแกรมเสริมเบราว์เซอร์ล้มเหลว</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Could not save the native messaging script file for %1.</source>
|
<source>Could not save the native messaging script file for %1.</source>
|
||||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -5037,7 +5037,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Unable to process clearText in place</source>
|
<source>Unable to process clearText in place</source>
|
||||||
<translation>无法直接处理纯文本。</translation>
|
<translation>无法原地处理纯文本。</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Expected %1 bytes of clear-text, found %2</source>
|
<source>Expected %1 bytes of clear-text, found %2</source>
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
name: keepassxc
|
name: keepassxc
|
||||||
version: 2.6.0
|
version: 2.6.1
|
||||||
grade: stable
|
grade: stable
|
||||||
summary: Community-driven port of the Windows application “KeePass Password Safe”
|
summary: Community-driven port of the Windows application “KeePass Password Safe”
|
||||||
description: |
|
description: |
|
||||||
|
@ -233,7 +233,7 @@ void AutoType::executeAutoTypeActions(const Entry* entry, QWidget* hideWindow, c
|
|||||||
macUtils()->raiseLastActiveWindow();
|
macUtils()->raiseLastActiveWindow();
|
||||||
m_plugin->hideOwnWindow();
|
m_plugin->hideOwnWindow();
|
||||||
#else
|
#else
|
||||||
hideWindow->showMinimized();
|
getMainWindow()->minimizeOrHide();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -37,9 +37,11 @@ BrowserAccessControlDialog::~BrowserAccessControlDialog()
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void BrowserAccessControlDialog::setItems(const QList<Entry*>& items, const QString& hostname, bool httpAuth)
|
void BrowserAccessControlDialog::setItems(const QList<Entry*>& items, const QString& urlString, bool httpAuth)
|
||||||
{
|
{
|
||||||
m_ui->siteLabel->setText(m_ui->siteLabel->text().arg(hostname));
|
QUrl url(urlString);
|
||||||
|
m_ui->siteLabel->setText(m_ui->siteLabel->text().arg(
|
||||||
|
url.toDisplayString(QUrl::RemoveUserInfo | QUrl::RemovePath | QUrl::RemoveQuery | QUrl::RemoveFragment)));
|
||||||
|
|
||||||
m_ui->rememberDecisionCheckBox->setVisible(!httpAuth);
|
m_ui->rememberDecisionCheckBox->setVisible(!httpAuth);
|
||||||
m_ui->rememberDecisionCheckBox->setChecked(false);
|
m_ui->rememberDecisionCheckBox->setChecked(false);
|
||||||
|
@ -38,7 +38,7 @@ public:
|
|||||||
explicit BrowserAccessControlDialog(QWidget* parent = nullptr);
|
explicit BrowserAccessControlDialog(QWidget* parent = nullptr);
|
||||||
~BrowserAccessControlDialog() override;
|
~BrowserAccessControlDialog() override;
|
||||||
|
|
||||||
void setItems(const QList<Entry*>& items, const QString& hostname, bool httpAuth);
|
void setItems(const QList<Entry*>& items, const QString& urlString, bool httpAuth);
|
||||||
bool remember() const;
|
bool remember() const;
|
||||||
|
|
||||||
QList<QTableWidgetItem*> getSelectedEntries() const;
|
QList<QTableWidgetItem*> getSelectedEntries() const;
|
||||||
|
@ -107,6 +107,8 @@ QJsonObject BrowserAction::handleAction(const QJsonObject& json)
|
|||||||
return handleGetDatabaseGroups(json, action);
|
return handleGetDatabaseGroups(json, action);
|
||||||
} else if (action.compare("create-new-group", Qt::CaseSensitive) == 0) {
|
} else if (action.compare("create-new-group", Qt::CaseSensitive) == 0) {
|
||||||
return handleCreateNewGroup(json, action);
|
return handleCreateNewGroup(json, action);
|
||||||
|
} else if (action.compare("get-totp", Qt::CaseSensitive) == 0) {
|
||||||
|
return handleGetTotp(json, action);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Action was not recognized
|
// Action was not recognized
|
||||||
@ -465,6 +467,37 @@ QJsonObject BrowserAction::handleCreateNewGroup(const QJsonObject& json, const Q
|
|||||||
return buildResponse(action, message, newNonce);
|
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 QJsonObject decrypted = decryptMessage(encrypted, nonce);
|
||||||
|
if (decrypted.isEmpty()) {
|
||||||
|
return getErrorReply(action, ERROR_KEEPASS_CANNOT_DECRYPT_MESSAGE);
|
||||||
|
}
|
||||||
|
|
||||||
|
QString command = decrypted.value("action").toString();
|
||||||
|
if (command.isEmpty() || command.compare("get-totp", Qt::CaseSensitive) != 0) {
|
||||||
|
return getErrorReply(action, ERROR_KEEPASS_INCORRECT_ACTION);
|
||||||
|
}
|
||||||
|
|
||||||
|
const QString uuid = decrypted.value("uuid").toString();
|
||||||
|
|
||||||
|
// Get the current TOTP
|
||||||
|
const auto totp = browserService()->getCurrentTotp(uuid);
|
||||||
|
const QString newNonce = incrementNonce(nonce);
|
||||||
|
|
||||||
|
QJsonObject message = buildMessage(newNonce);
|
||||||
|
message["totp"] = totp;
|
||||||
|
|
||||||
|
return buildResponse(action, message, newNonce);
|
||||||
|
}
|
||||||
|
|
||||||
QJsonObject BrowserAction::getErrorReply(const QString& action, const int errorCode) const
|
QJsonObject BrowserAction::getErrorReply(const QString& action, const int errorCode) const
|
||||||
{
|
{
|
||||||
QJsonObject response;
|
QJsonObject response;
|
||||||
|
@ -41,6 +41,7 @@ private:
|
|||||||
QJsonObject handleLockDatabase(const QJsonObject& json, const QString& action);
|
QJsonObject handleLockDatabase(const QJsonObject& json, const QString& action);
|
||||||
QJsonObject handleGetDatabaseGroups(const QJsonObject& json, const QString& action);
|
QJsonObject handleGetDatabaseGroups(const QJsonObject& json, const QString& action);
|
||||||
QJsonObject handleCreateNewGroup(const QJsonObject& json, const QString& action);
|
QJsonObject handleCreateNewGroup(const QJsonObject& json, const QString& action);
|
||||||
|
QJsonObject handleGetTotp(const QJsonObject& json, const QString& action);
|
||||||
|
|
||||||
QJsonObject buildMessage(const QString& nonce) const;
|
QJsonObject buildMessage(const QString& nonce) const;
|
||||||
QJsonObject buildResponse(const QString& action, const QJsonObject& message, const QString& nonce);
|
QJsonObject buildResponse(const QString& action, const QJsonObject& message, const QString& nonce);
|
||||||
|
@ -215,7 +215,6 @@ QJsonObject BrowserService::getDatabaseGroups()
|
|||||||
|
|
||||||
QJsonObject BrowserService::createNewGroup(const QString& groupName)
|
QJsonObject BrowserService::createNewGroup(const QString& groupName)
|
||||||
{
|
{
|
||||||
|
|
||||||
auto db = getDatabase();
|
auto db = getDatabase();
|
||||||
if (!db) {
|
if (!db) {
|
||||||
return {};
|
return {};
|
||||||
@ -284,6 +283,31 @@ QJsonObject BrowserService::createNewGroup(const QString& groupName)
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString BrowserService::getCurrentTotp(const QString& uuid)
|
||||||
|
{
|
||||||
|
QList<QSharedPointer<Database>> databases;
|
||||||
|
if (browserSettings()->searchInAllDatabases()) {
|
||||||
|
for (auto dbWidget : getMainWindow()->getOpenDatabases()) {
|
||||||
|
auto db = dbWidget->database();
|
||||||
|
if (db) {
|
||||||
|
databases << db;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
databases << getDatabase();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto entryUuid = Tools::hexToUuid(uuid);
|
||||||
|
for (const auto& db : databases) {
|
||||||
|
auto entry = db->rootGroup()->findEntryByUuid(entryUuid, true);
|
||||||
|
if (entry) {
|
||||||
|
return entry->totp();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
|
||||||
QString BrowserService::storeKey(const QString& key)
|
QString BrowserService::storeKey(const QString& key)
|
||||||
{
|
{
|
||||||
auto db = getDatabase();
|
auto db = getDatabase();
|
||||||
@ -776,7 +800,7 @@ QList<Entry*> BrowserService::confirmEntries(QList<Entry*>& pwEntriesToConfirm,
|
|||||||
config.save(entry);
|
config.save(entry);
|
||||||
});
|
});
|
||||||
|
|
||||||
accessControlDialog.setItems(pwEntriesToConfirm, !submitHost.isEmpty() ? submitHost : url, httpAuth);
|
accessControlDialog.setItems(pwEntriesToConfirm, url, httpAuth);
|
||||||
|
|
||||||
QList<Entry*> allowedEntries;
|
QList<Entry*> allowedEntries;
|
||||||
if (accessControlDialog.exec() == QDialog::Accepted) {
|
if (accessControlDialog.exec() == QDialog::Accepted) {
|
||||||
|
@ -58,6 +58,7 @@ public:
|
|||||||
|
|
||||||
QJsonObject getDatabaseGroups();
|
QJsonObject getDatabaseGroups();
|
||||||
QJsonObject createNewGroup(const QString& groupName);
|
QJsonObject createNewGroup(const QString& groupName);
|
||||||
|
QString getCurrentTotp(const QString& uuid);
|
||||||
|
|
||||||
void addEntry(const QString& dbid,
|
void addEntry(const QString& dbid,
|
||||||
const QString& login,
|
const QString& login,
|
||||||
|
@ -58,6 +58,7 @@ static const QHash<Config::ConfigKey, ConfigDirective> configStrings = {
|
|||||||
{Config::AutoSaveAfterEveryChange,{QS("AutoSaveAfterEveryChange"), Roaming, true}},
|
{Config::AutoSaveAfterEveryChange,{QS("AutoSaveAfterEveryChange"), Roaming, true}},
|
||||||
{Config::AutoReloadOnChange,{QS("AutoReloadOnChange"), Roaming, true}},
|
{Config::AutoReloadOnChange,{QS("AutoReloadOnChange"), Roaming, true}},
|
||||||
{Config::AutoSaveOnExit,{QS("AutoSaveOnExit"), Roaming, true}},
|
{Config::AutoSaveOnExit,{QS("AutoSaveOnExit"), Roaming, true}},
|
||||||
|
{Config::AutoSaveNonDataChanges,{QS("AutoSaveNonDataChanges"), Roaming, true}},
|
||||||
{Config::BackupBeforeSave,{QS("BackupBeforeSave"), Roaming, false}},
|
{Config::BackupBeforeSave,{QS("BackupBeforeSave"), Roaming, false}},
|
||||||
{Config::UseAtomicSaves,{QS("UseAtomicSaves"), Roaming, true}},
|
{Config::UseAtomicSaves,{QS("UseAtomicSaves"), Roaming, true}},
|
||||||
{Config::SearchLimitGroup,{QS("SearchLimitGroup"), Roaming, false}},
|
{Config::SearchLimitGroup,{QS("SearchLimitGroup"), Roaming, false}},
|
||||||
@ -73,7 +74,6 @@ static const QHash<Config::ConfigKey, ConfigDirective> configStrings = {
|
|||||||
{Config::AutoTypeStartDelay,{QS("AutoTypeStartDelay"), Roaming, 500}},
|
{Config::AutoTypeStartDelay,{QS("AutoTypeStartDelay"), Roaming, 500}},
|
||||||
{Config::GlobalAutoTypeKey,{QS("GlobalAutoTypeKey"), Roaming, 0}},
|
{Config::GlobalAutoTypeKey,{QS("GlobalAutoTypeKey"), Roaming, 0}},
|
||||||
{Config::GlobalAutoTypeModifiers,{QS("GlobalAutoTypeModifiers"), Roaming, 0}},
|
{Config::GlobalAutoTypeModifiers,{QS("GlobalAutoTypeModifiers"), Roaming, 0}},
|
||||||
{Config::TrackNonDataChanges,{QS("TrackNonDataChanges"), Roaming, false}},
|
|
||||||
{Config::FaviconDownloadTimeout,{QS("FaviconDownloadTimeout"), Roaming, 10}},
|
{Config::FaviconDownloadTimeout,{QS("FaviconDownloadTimeout"), Roaming, 10}},
|
||||||
{Config::UpdateCheckMessageShown,{QS("UpdateCheckMessageShown"), Roaming, false}},
|
{Config::UpdateCheckMessageShown,{QS("UpdateCheckMessageShown"), Roaming, false}},
|
||||||
{Config::UseTouchID,{QS("UseTouchID"), Roaming, false}},
|
{Config::UseTouchID,{QS("UseTouchID"), Roaming, false}},
|
||||||
@ -297,7 +297,6 @@ static const QHash<QString, Config::ConfigKey> deprecationMap = {
|
|||||||
{QS("security/IconDownloadFallbackToGoogle"), Config::Security_IconDownloadFallback},
|
{QS("security/IconDownloadFallbackToGoogle"), Config::Security_IconDownloadFallback},
|
||||||
|
|
||||||
// 2.6.0
|
// 2.6.0
|
||||||
{QS("IgnoreGroupExpansion"), Config::TrackNonDataChanges},
|
|
||||||
{QS("security/autotypeask"), Config::Security_AutoTypeAsk},
|
{QS("security/autotypeask"), Config::Security_AutoTypeAsk},
|
||||||
{QS("security/clearclipboard"), Config::Security_ClearClipboard},
|
{QS("security/clearclipboard"), Config::Security_ClearClipboard},
|
||||||
{QS("security/clearclipboardtimeout"), Config::Security_ClearClipboardTimeout},
|
{QS("security/clearclipboardtimeout"), Config::Security_ClearClipboardTimeout},
|
||||||
|
@ -42,6 +42,7 @@ public:
|
|||||||
AutoSaveAfterEveryChange,
|
AutoSaveAfterEveryChange,
|
||||||
AutoReloadOnChange,
|
AutoReloadOnChange,
|
||||||
AutoSaveOnExit,
|
AutoSaveOnExit,
|
||||||
|
AutoSaveNonDataChanges,
|
||||||
BackupBeforeSave,
|
BackupBeforeSave,
|
||||||
UseAtomicSaves,
|
UseAtomicSaves,
|
||||||
SearchLimitGroup,
|
SearchLimitGroup,
|
||||||
@ -57,7 +58,6 @@ public:
|
|||||||
AutoTypeStartDelay,
|
AutoTypeStartDelay,
|
||||||
GlobalAutoTypeKey,
|
GlobalAutoTypeKey,
|
||||||
GlobalAutoTypeModifiers,
|
GlobalAutoTypeModifiers,
|
||||||
TrackNonDataChanges,
|
|
||||||
FaviconDownloadTimeout,
|
FaviconDownloadTimeout,
|
||||||
UpdateCheckMessageShown,
|
UpdateCheckMessageShown,
|
||||||
UseTouchID,
|
UseTouchID,
|
||||||
|
@ -848,9 +848,14 @@ void Database::setEmitModified(bool value)
|
|||||||
m_emitModified = value;
|
m_emitModified = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Database::isModified(bool includeNonDataChanges) const
|
bool Database::isModified() const
|
||||||
{
|
{
|
||||||
return m_modified || (includeNonDataChanges && m_hasNonDataChange);
|
return m_modified;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Database::hasNonDataChanges() const
|
||||||
|
{
|
||||||
|
return m_hasNonDataChange;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Database::markAsModified()
|
void Database::markAsModified()
|
||||||
|
@ -81,7 +81,8 @@ public:
|
|||||||
void releaseData();
|
void releaseData();
|
||||||
|
|
||||||
bool isInitialized() const;
|
bool isInitialized() const;
|
||||||
bool isModified(bool includeNonDataChanges = false) const;
|
bool isModified() const;
|
||||||
|
bool hasNonDataChanges() const;
|
||||||
void setEmitModified(bool value);
|
void setEmitModified(bool value);
|
||||||
bool isReadOnly() const;
|
bool isReadOnly() const;
|
||||||
void setReadOnly(bool readOnly);
|
void setReadOnly(bool readOnly);
|
||||||
|
@ -40,9 +40,6 @@ namespace
|
|||||||
|
|
||||||
DatabaseIcons::DatabaseIcons()
|
DatabaseIcons::DatabaseIcons()
|
||||||
{
|
{
|
||||||
// Set the pixmap cache limit to 20 MB
|
|
||||||
QPixmapCache::setCacheLimit(20480);
|
|
||||||
|
|
||||||
iconList = QDir(iconDir).entryList(QDir::NoFilter, QDir::Name);
|
iconList = QDir(iconDir).entryList(QDir::NoFilter, QDir::Name);
|
||||||
badgeList = QDir(badgeDir).entryList(QDir::NoFilter, QDir::Name);
|
badgeList = QDir(badgeDir).entryList(QDir::NoFilter, QDir::Name);
|
||||||
|
|
||||||
@ -70,9 +67,7 @@ QPixmap DatabaseIcons::icon(int index, IconSize size)
|
|||||||
auto icon = m_iconCache.value(cacheKey);
|
auto icon = m_iconCache.value(cacheKey);
|
||||||
if (icon.isNull()) {
|
if (icon.isNull()) {
|
||||||
icon.addFile(iconDir + iconList[index]);
|
icon.addFile(iconDir + iconList[index]);
|
||||||
icon.addPixmap(icon.pixmap(iconSize(IconSize::Default)));
|
icon.addPixmap(icon.pixmap(64));
|
||||||
icon.addPixmap(icon.pixmap(iconSize(IconSize::Medium)));
|
|
||||||
icon.addPixmap(icon.pixmap(iconSize(IconSize::Large)));
|
|
||||||
m_iconCache.insert(cacheKey, icon);
|
m_iconCache.insert(cacheKey, icon);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -362,11 +362,7 @@ void Group::setExpanded(bool expanded)
|
|||||||
{
|
{
|
||||||
if (m_data.isExpanded != expanded) {
|
if (m_data.isExpanded != expanded) {
|
||||||
m_data.isExpanded = expanded;
|
m_data.isExpanded = expanded;
|
||||||
if (config()->get(Config::TrackNonDataChanges).toBool()) {
|
emit groupNonDataChange();
|
||||||
emit groupModified();
|
|
||||||
} else {
|
|
||||||
emit groupNonDataChange();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -972,11 +968,7 @@ void Group::moveEntryUp(Entry* entry)
|
|||||||
emit entryAboutToMoveUp(row);
|
emit entryAboutToMoveUp(row);
|
||||||
m_entries.move(row, row - 1);
|
m_entries.move(row, row - 1);
|
||||||
emit entryMovedUp();
|
emit entryMovedUp();
|
||||||
if (config()->get(Config::TrackNonDataChanges).toBool()) {
|
emit groupNonDataChange();
|
||||||
emit groupModified();
|
|
||||||
} else {
|
|
||||||
emit groupNonDataChange();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Group::moveEntryDown(Entry* entry)
|
void Group::moveEntryDown(Entry* entry)
|
||||||
@ -989,11 +981,7 @@ void Group::moveEntryDown(Entry* entry)
|
|||||||
emit entryAboutToMoveDown(row);
|
emit entryAboutToMoveDown(row);
|
||||||
m_entries.move(row, row + 1);
|
m_entries.move(row, row + 1);
|
||||||
emit entryMovedDown();
|
emit entryMovedDown();
|
||||||
if (config()->get(Config::TrackNonDataChanges).toBool()) {
|
emit groupNonDataChange();
|
||||||
emit groupModified();
|
|
||||||
} else {
|
|
||||||
emit groupNonDataChange();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Group::connectDatabaseSignalsRecursive(Database* db)
|
void Group::connectDatabaseSignalsRecursive(Database* db)
|
||||||
|
@ -379,11 +379,8 @@ void Metadata::addCustomIcon(const QUuid& uuid, const QImage& image)
|
|||||||
static bool isGui = qApp->inherits("QGuiApplication");
|
static bool isGui = qApp->inherits("QGuiApplication");
|
||||||
if (isGui) {
|
if (isGui) {
|
||||||
// Generate QIcon with pre-baked resolutions
|
// Generate QIcon with pre-baked resolutions
|
||||||
auto basePixmap = QPixmap::fromImage(image).scaled(128, 128, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
|
auto basePixmap = QPixmap::fromImage(image.scaled(64, 64, Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
|
||||||
QIcon icon(basePixmap);
|
QIcon icon(basePixmap);
|
||||||
icon.addPixmap(icon.pixmap(databaseIcons()->iconSize(IconSize::Default)));
|
|
||||||
icon.addPixmap(icon.pixmap(databaseIcons()->iconSize(IconSize::Medium)));
|
|
||||||
icon.addPixmap(icon.pixmap(databaseIcons()->iconSize(IconSize::Large)));
|
|
||||||
m_customIcons.insert(uuid, icon);
|
m_customIcons.insert(uuid, icon);
|
||||||
} else {
|
} else {
|
||||||
m_customIcons.insert(uuid, QIcon());
|
m_customIcons.insert(uuid, QIcon());
|
||||||
|
@ -164,7 +164,9 @@ QIcon Resources::icon(const QString& name, bool recolor, const QColor& overrideC
|
|||||||
|
|
||||||
icon = QIcon::fromTheme(name);
|
icon = QIcon::fromTheme(name);
|
||||||
if (getMainWindow() && recolor) {
|
if (getMainWindow() && recolor) {
|
||||||
QImage img = icon.pixmap(128, 128).toImage().convertToFormat(QImage::Format_ARGB32_Premultiplied);
|
const QRect rect(0, 0, 48, 48);
|
||||||
|
QImage img = icon.pixmap(rect.width(), rect.height()).toImage();
|
||||||
|
img = img.convertToFormat(QImage::Format_ARGB32_Premultiplied);
|
||||||
icon = {};
|
icon = {};
|
||||||
|
|
||||||
QPainter painter(&img);
|
QPainter painter(&img);
|
||||||
@ -172,20 +174,19 @@ QIcon Resources::icon(const QString& name, bool recolor, const QColor& overrideC
|
|||||||
|
|
||||||
if (!overrideColor.isValid()) {
|
if (!overrideColor.isValid()) {
|
||||||
QPalette palette = getMainWindow()->palette();
|
QPalette palette = getMainWindow()->palette();
|
||||||
painter.fillRect(0, 0, img.width(), img.height(), palette.color(QPalette::Normal, QPalette::WindowText));
|
painter.fillRect(rect, palette.color(QPalette::Normal, QPalette::WindowText));
|
||||||
icon.addPixmap(QPixmap::fromImage(img), QIcon::Normal);
|
icon.addPixmap(QPixmap::fromImage(img), QIcon::Normal);
|
||||||
|
|
||||||
painter.fillRect(0, 0, img.width(), img.height(), palette.color(QPalette::Active, QPalette::ButtonText));
|
painter.fillRect(rect, palette.color(QPalette::Active, QPalette::ButtonText));
|
||||||
icon.addPixmap(QPixmap::fromImage(img), QIcon::Active);
|
icon.addPixmap(QPixmap::fromImage(img), QIcon::Active);
|
||||||
|
|
||||||
painter.fillRect(
|
painter.fillRect(rect, palette.color(QPalette::Active, QPalette::HighlightedText));
|
||||||
0, 0, img.width(), img.height(), palette.color(QPalette::Active, QPalette::HighlightedText));
|
|
||||||
icon.addPixmap(QPixmap::fromImage(img), QIcon::Selected);
|
icon.addPixmap(QPixmap::fromImage(img), QIcon::Selected);
|
||||||
|
|
||||||
painter.fillRect(0, 0, img.width(), img.height(), palette.color(QPalette::Disabled, QPalette::WindowText));
|
painter.fillRect(rect, palette.color(QPalette::Disabled, QPalette::WindowText));
|
||||||
icon.addPixmap(QPixmap::fromImage(img), QIcon::Disabled);
|
icon.addPixmap(QPixmap::fromImage(img), QIcon::Disabled);
|
||||||
} else {
|
} else {
|
||||||
painter.fillRect(0, 0, img.width(), img.height(), overrideColor);
|
painter.fillRect(rect, overrideColor);
|
||||||
icon.addPixmap(QPixmap::fromImage(img), QIcon::Normal);
|
icon.addPixmap(QPixmap::fromImage(img), QIcon::Normal);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -211,18 +212,16 @@ QIcon Resources::onOffIcon(const QString& name, bool recolor)
|
|||||||
return icon;
|
return icon;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const QSize size(48, 48);
|
||||||
QIcon on = Resources::icon(name + "-on", recolor);
|
QIcon on = Resources::icon(name + "-on", recolor);
|
||||||
for (const auto& size : on.availableSizes()) {
|
icon.addPixmap(on.pixmap(size, QIcon::Mode::Normal), QIcon::Mode::Normal, QIcon::On);
|
||||||
icon.addPixmap(on.pixmap(size, QIcon::Mode::Normal), QIcon::Mode::Normal, QIcon::On);
|
icon.addPixmap(on.pixmap(size, QIcon::Mode::Selected), QIcon::Mode::Selected, QIcon::On);
|
||||||
icon.addPixmap(on.pixmap(size, QIcon::Mode::Selected), QIcon::Mode::Selected, QIcon::On);
|
icon.addPixmap(on.pixmap(size, QIcon::Mode::Disabled), QIcon::Mode::Disabled, QIcon::On);
|
||||||
icon.addPixmap(on.pixmap(size, QIcon::Mode::Disabled), QIcon::Mode::Disabled, QIcon::On);
|
|
||||||
}
|
|
||||||
QIcon off = Resources::icon(name + "-off", recolor);
|
QIcon off = Resources::icon(name + "-off", recolor);
|
||||||
for (const auto& size : off.availableSizes()) {
|
icon.addPixmap(off.pixmap(size, QIcon::Mode::Normal), QIcon::Mode::Normal, QIcon::Off);
|
||||||
icon.addPixmap(off.pixmap(size, QIcon::Mode::Normal), QIcon::Mode::Normal, QIcon::Off);
|
icon.addPixmap(off.pixmap(size, QIcon::Mode::Selected), QIcon::Mode::Selected, QIcon::Off);
|
||||||
icon.addPixmap(off.pixmap(size, QIcon::Mode::Selected), QIcon::Mode::Selected, QIcon::Off);
|
icon.addPixmap(off.pixmap(size, QIcon::Mode::Disabled), QIcon::Mode::Disabled, QIcon::Off);
|
||||||
icon.addPixmap(off.pixmap(size, QIcon::Mode::Disabled), QIcon::Mode::Disabled, QIcon::Off);
|
|
||||||
}
|
|
||||||
|
|
||||||
m_iconCache.insert(cacheName, icon);
|
m_iconCache.insert(cacheName, icon);
|
||||||
|
|
||||||
|
@ -144,18 +144,24 @@ Application::~Application()
|
|||||||
|
|
||||||
void Application::applyTheme()
|
void Application::applyTheme()
|
||||||
{
|
{
|
||||||
QString appTheme = config()->get(Config::GUI_ApplicationTheme).toString();
|
auto appTheme = config()->get(Config::GUI_ApplicationTheme).toString();
|
||||||
if (appTheme == "auto") {
|
if (appTheme == "auto") {
|
||||||
if (osUtils->isDarkMode()) {
|
appTheme = osUtils->isDarkMode() ? "dark" : "light";
|
||||||
setStyle(new DarkStyle);
|
#ifdef Q_OS_WIN
|
||||||
m_darkTheme = true;
|
if (winUtils()->isHighContrastMode()) {
|
||||||
} else {
|
appTheme = "classic";
|
||||||
setStyle(new LightStyle);
|
|
||||||
}
|
}
|
||||||
} else if (appTheme == "light") {
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
if (appTheme == "light") {
|
||||||
setStyle(new LightStyle);
|
setStyle(new LightStyle);
|
||||||
|
// Workaround Qt 5.15+ bug
|
||||||
|
setPalette(style()->standardPalette());
|
||||||
} else if (appTheme == "dark") {
|
} else if (appTheme == "dark") {
|
||||||
setStyle(new DarkStyle);
|
setStyle(new DarkStyle);
|
||||||
|
// Workaround Qt 5.15+ bug
|
||||||
|
setPalette(style()->standardPalette());
|
||||||
m_darkTheme = true;
|
m_darkTheme = true;
|
||||||
} else {
|
} else {
|
||||||
// Classic mode, don't check for dark theme on Windows
|
// Classic mode, don't check for dark theme on Windows
|
||||||
@ -163,9 +169,12 @@ void Application::applyTheme()
|
|||||||
#ifndef Q_OS_WIN
|
#ifndef Q_OS_WIN
|
||||||
m_darkTheme = osUtils->isDarkMode();
|
m_darkTheme = osUtils->isDarkMode();
|
||||||
#endif
|
#endif
|
||||||
|
QFile stylesheetFile(":/styles/base/classicstyle.qss");
|
||||||
|
if (stylesheetFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
|
||||||
|
setStyleSheet(stylesheetFile.readAll());
|
||||||
|
stylesheetFile.close();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
setPalette(style()->standardPalette());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Application::event(QEvent* event)
|
bool Application::event(QEvent* event)
|
||||||
|
@ -126,6 +126,7 @@ ApplicationSettingsWidget::ApplicationSettingsWidget(QWidget* parent)
|
|||||||
m_generalUi->faviconTimeoutSpinBox->installEventFilter(mouseWheelFilter);
|
m_generalUi->faviconTimeoutSpinBox->installEventFilter(mouseWheelFilter);
|
||||||
m_generalUi->toolButtonStyleComboBox->installEventFilter(mouseWheelFilter);
|
m_generalUi->toolButtonStyleComboBox->installEventFilter(mouseWheelFilter);
|
||||||
m_generalUi->languageComboBox->installEventFilter(mouseWheelFilter);
|
m_generalUi->languageComboBox->installEventFilter(mouseWheelFilter);
|
||||||
|
m_generalUi->trayIconAppearance->installEventFilter(mouseWheelFilter);
|
||||||
|
|
||||||
#ifdef WITH_XC_UPDATECHECK
|
#ifdef WITH_XC_UPDATECHECK
|
||||||
connect(m_generalUi->checkForUpdatesOnStartupCheckBox, SIGNAL(toggled(bool)), SLOT(checkUpdatesToggled(bool)));
|
connect(m_generalUi->checkForUpdatesOnStartupCheckBox, SIGNAL(toggled(bool)), SLOT(checkUpdatesToggled(bool)));
|
||||||
@ -183,6 +184,7 @@ void ApplicationSettingsWidget::loadSettings()
|
|||||||
config()->get(Config::OpenPreviousDatabasesOnStartup).toBool());
|
config()->get(Config::OpenPreviousDatabasesOnStartup).toBool());
|
||||||
m_generalUi->autoSaveAfterEveryChangeCheckBox->setChecked(config()->get(Config::AutoSaveAfterEveryChange).toBool());
|
m_generalUi->autoSaveAfterEveryChangeCheckBox->setChecked(config()->get(Config::AutoSaveAfterEveryChange).toBool());
|
||||||
m_generalUi->autoSaveOnExitCheckBox->setChecked(config()->get(Config::AutoSaveOnExit).toBool());
|
m_generalUi->autoSaveOnExitCheckBox->setChecked(config()->get(Config::AutoSaveOnExit).toBool());
|
||||||
|
m_generalUi->autoSaveNonDataChangesCheckBox->setChecked(config()->get(Config::AutoSaveNonDataChanges).toBool());
|
||||||
m_generalUi->backupBeforeSaveCheckBox->setChecked(config()->get(Config::BackupBeforeSave).toBool());
|
m_generalUi->backupBeforeSaveCheckBox->setChecked(config()->get(Config::BackupBeforeSave).toBool());
|
||||||
m_generalUi->useAtomicSavesCheckBox->setChecked(config()->get(Config::UseAtomicSaves).toBool());
|
m_generalUi->useAtomicSavesCheckBox->setChecked(config()->get(Config::UseAtomicSaves).toBool());
|
||||||
m_generalUi->autoReloadOnChangeCheckBox->setChecked(config()->get(Config::AutoReloadOnChange).toBool());
|
m_generalUi->autoReloadOnChangeCheckBox->setChecked(config()->get(Config::AutoReloadOnChange).toBool());
|
||||||
@ -196,7 +198,6 @@ void ApplicationSettingsWidget::loadSettings()
|
|||||||
config()->get(Config::UseGroupIconOnEntryCreation).toBool());
|
config()->get(Config::UseGroupIconOnEntryCreation).toBool());
|
||||||
m_generalUi->autoTypeEntryTitleMatchCheckBox->setChecked(config()->get(Config::AutoTypeEntryTitleMatch).toBool());
|
m_generalUi->autoTypeEntryTitleMatchCheckBox->setChecked(config()->get(Config::AutoTypeEntryTitleMatch).toBool());
|
||||||
m_generalUi->autoTypeEntryURLMatchCheckBox->setChecked(config()->get(Config::AutoTypeEntryURLMatch).toBool());
|
m_generalUi->autoTypeEntryURLMatchCheckBox->setChecked(config()->get(Config::AutoTypeEntryURLMatch).toBool());
|
||||||
m_generalUi->trackNonDataChangesCheckBox->setChecked(config()->get(Config::TrackNonDataChanges).toBool());
|
|
||||||
m_generalUi->faviconTimeoutSpinBox->setValue(config()->get(Config::FaviconDownloadTimeout).toInt());
|
m_generalUi->faviconTimeoutSpinBox->setValue(config()->get(Config::FaviconDownloadTimeout).toInt());
|
||||||
|
|
||||||
m_generalUi->languageComboBox->clear();
|
m_generalUi->languageComboBox->clear();
|
||||||
@ -311,6 +312,7 @@ void ApplicationSettingsWidget::saveSettings()
|
|||||||
m_generalUi->openPreviousDatabasesOnStartupCheckBox->isChecked());
|
m_generalUi->openPreviousDatabasesOnStartupCheckBox->isChecked());
|
||||||
config()->set(Config::AutoSaveAfterEveryChange, m_generalUi->autoSaveAfterEveryChangeCheckBox->isChecked());
|
config()->set(Config::AutoSaveAfterEveryChange, m_generalUi->autoSaveAfterEveryChangeCheckBox->isChecked());
|
||||||
config()->set(Config::AutoSaveOnExit, m_generalUi->autoSaveOnExitCheckBox->isChecked());
|
config()->set(Config::AutoSaveOnExit, m_generalUi->autoSaveOnExitCheckBox->isChecked());
|
||||||
|
config()->set(Config::AutoSaveNonDataChanges, m_generalUi->autoSaveNonDataChangesCheckBox->isChecked());
|
||||||
config()->set(Config::BackupBeforeSave, m_generalUi->backupBeforeSaveCheckBox->isChecked());
|
config()->set(Config::BackupBeforeSave, m_generalUi->backupBeforeSaveCheckBox->isChecked());
|
||||||
config()->set(Config::UseAtomicSaves, m_generalUi->useAtomicSavesCheckBox->isChecked());
|
config()->set(Config::UseAtomicSaves, m_generalUi->useAtomicSavesCheckBox->isChecked());
|
||||||
config()->set(Config::AutoReloadOnChange, m_generalUi->autoReloadOnChangeCheckBox->isChecked());
|
config()->set(Config::AutoReloadOnChange, m_generalUi->autoReloadOnChangeCheckBox->isChecked());
|
||||||
@ -320,7 +322,6 @@ void ApplicationSettingsWidget::saveSettings()
|
|||||||
config()->set(Config::MinimizeOnCopy, m_generalUi->minimizeOnCopyRadioButton->isChecked());
|
config()->set(Config::MinimizeOnCopy, m_generalUi->minimizeOnCopyRadioButton->isChecked());
|
||||||
config()->set(Config::DropToBackgroundOnCopy, m_generalUi->dropToBackgroundOnCopyRadioButton->isChecked());
|
config()->set(Config::DropToBackgroundOnCopy, m_generalUi->dropToBackgroundOnCopyRadioButton->isChecked());
|
||||||
config()->set(Config::UseGroupIconOnEntryCreation, m_generalUi->useGroupIconOnEntryCreationCheckBox->isChecked());
|
config()->set(Config::UseGroupIconOnEntryCreation, m_generalUi->useGroupIconOnEntryCreationCheckBox->isChecked());
|
||||||
config()->set(Config::TrackNonDataChanges, m_generalUi->trackNonDataChangesCheckBox->isChecked());
|
|
||||||
config()->set(Config::AutoTypeEntryTitleMatch, m_generalUi->autoTypeEntryTitleMatchCheckBox->isChecked());
|
config()->set(Config::AutoTypeEntryTitleMatch, m_generalUi->autoTypeEntryTitleMatchCheckBox->isChecked());
|
||||||
config()->set(Config::AutoTypeEntryURLMatch, m_generalUi->autoTypeEntryURLMatchCheckBox->isChecked());
|
config()->set(Config::AutoTypeEntryURLMatch, m_generalUi->autoTypeEntryURLMatchCheckBox->isChecked());
|
||||||
config()->set(Config::FaviconDownloadTimeout, m_generalUi->faviconTimeoutSpinBox->value());
|
config()->set(Config::FaviconDownloadTimeout, m_generalUi->faviconTimeoutSpinBox->value());
|
||||||
@ -384,7 +385,6 @@ void ApplicationSettingsWidget::saveSettings()
|
|||||||
// Security: clear storage if related settings are disabled
|
// Security: clear storage if related settings are disabled
|
||||||
if (!config()->get(Config::RememberLastDatabases).toBool()) {
|
if (!config()->get(Config::RememberLastDatabases).toBool()) {
|
||||||
config()->remove(Config::LastDatabases);
|
config()->remove(Config::LastDatabases);
|
||||||
config()->remove(Config::OpenPreviousDatabasesOnStartup);
|
|
||||||
config()->remove(Config::LastActiveDatabase);
|
config()->remove(Config::LastActiveDatabase);
|
||||||
config()->remove(Config::LastAttachmentDir);
|
config()->remove(Config::LastAttachmentDir);
|
||||||
}
|
}
|
||||||
@ -424,7 +424,6 @@ void ApplicationSettingsWidget::resetSettings()
|
|||||||
|
|
||||||
// Clear recently used data
|
// Clear recently used data
|
||||||
config()->remove(Config::LastDatabases);
|
config()->remove(Config::LastDatabases);
|
||||||
config()->remove(Config::OpenPreviousDatabasesOnStartup);
|
|
||||||
config()->remove(Config::LastActiveDatabase);
|
config()->remove(Config::LastActiveDatabase);
|
||||||
config()->remove(Config::LastAttachmentDir);
|
config()->remove(Config::LastAttachmentDir);
|
||||||
config()->remove(Config::LastKeyFiles);
|
config()->remove(Config::LastKeyFiles);
|
||||||
@ -452,11 +451,13 @@ void ApplicationSettingsWidget::reject()
|
|||||||
|
|
||||||
void ApplicationSettingsWidget::autoSaveToggled(bool checked)
|
void ApplicationSettingsWidget::autoSaveToggled(bool checked)
|
||||||
{
|
{
|
||||||
// Explicitly enable auto-save on exit if it wasn't already
|
// Explicitly enable other auto-save options
|
||||||
if (checked && !m_generalUi->autoSaveOnExitCheckBox->isChecked()) {
|
if (checked) {
|
||||||
m_generalUi->autoSaveOnExitCheckBox->setChecked(true);
|
m_generalUi->autoSaveOnExitCheckBox->setChecked(true);
|
||||||
|
m_generalUi->autoSaveNonDataChangesCheckBox->setChecked(true);
|
||||||
}
|
}
|
||||||
m_generalUi->autoSaveOnExitCheckBox->setEnabled(!checked);
|
m_generalUi->autoSaveOnExitCheckBox->setEnabled(!checked);
|
||||||
|
m_generalUi->autoSaveNonDataChangesCheckBox->setEnabled(!checked);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ApplicationSettingsWidget::hideWindowOnCopyCheckBoxToggled(bool checked)
|
void ApplicationSettingsWidget::hideWindowOnCopyCheckBoxToggled(bool checked)
|
||||||
|
@ -253,14 +253,14 @@
|
|||||||
<item>
|
<item>
|
||||||
<widget class="QCheckBox" name="autoSaveOnExitCheckBox">
|
<widget class="QCheckBox" name="autoSaveOnExitCheckBox">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Automatically save on exit</string>
|
<string>Automatically save when locking database</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QCheckBox" name="trackNonDataChangesCheckBox">
|
<widget class="QCheckBox" name="autoSaveNonDataChangesCheckBox">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Mark database as modified for non-data changes (e.g., expanding groups)</string>
|
<string>Automatically save non-data changes when locking database</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
@ -626,6 +626,12 @@
|
|||||||
<verstretch>0</verstretch>
|
<verstretch>0</verstretch>
|
||||||
</sizepolicy>
|
</sizepolicy>
|
||||||
</property>
|
</property>
|
||||||
|
<property name="focusPolicy">
|
||||||
|
<enum>Qt::StrongFocus</enum>
|
||||||
|
</property>
|
||||||
|
<property name="accessibleName">
|
||||||
|
<string>Tray icon type</string>
|
||||||
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="0" column="1">
|
<item row="0" column="1">
|
||||||
@ -1031,7 +1037,7 @@
|
|||||||
<tabstop>checkForUpdatesIncludeBetasCheckBox</tabstop>
|
<tabstop>checkForUpdatesIncludeBetasCheckBox</tabstop>
|
||||||
<tabstop>autoSaveAfterEveryChangeCheckBox</tabstop>
|
<tabstop>autoSaveAfterEveryChangeCheckBox</tabstop>
|
||||||
<tabstop>autoSaveOnExitCheckBox</tabstop>
|
<tabstop>autoSaveOnExitCheckBox</tabstop>
|
||||||
<tabstop>trackNonDataChangesCheckBox</tabstop>
|
<tabstop>autoSaveNonDataChangesCheckBox</tabstop>
|
||||||
<tabstop>backupBeforeSaveCheckBox</tabstop>
|
<tabstop>backupBeforeSaveCheckBox</tabstop>
|
||||||
<tabstop>autoReloadOnChangeCheckBox</tabstop>
|
<tabstop>autoReloadOnChangeCheckBox</tabstop>
|
||||||
<tabstop>useAtomicSavesCheckBox</tabstop>
|
<tabstop>useAtomicSavesCheckBox</tabstop>
|
||||||
|
@ -221,6 +221,7 @@ void CategoryListWidgetDelegate::paint(QPainter* painter,
|
|||||||
opt.icon = QIcon();
|
opt.icon = QIcon();
|
||||||
opt.decorationAlignment = Qt::AlignHCenter | Qt::AlignVCenter;
|
opt.decorationAlignment = Qt::AlignHCenter | Qt::AlignVCenter;
|
||||||
opt.decorationPosition = QStyleOptionViewItem::Top;
|
opt.decorationPosition = QStyleOptionViewItem::Top;
|
||||||
|
opt.decorationSize = iconSize;
|
||||||
|
|
||||||
QScopedPointer<QStyle> style(new IconSelectionCorrectedStyle());
|
QScopedPointer<QStyle> style(new IconSelectionCorrectedStyle());
|
||||||
style->drawControl(QStyle::CE_ItemViewItem, &opt, painter, opt.widget);
|
style->drawControl(QStyle::CE_ItemViewItem, &opt, painter, opt.widget);
|
||||||
|
@ -67,11 +67,13 @@ void Clipboard::setText(const QString& text, bool clear)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (clear && config()->get(Config::Security_ClearClipboard).toBool()) {
|
if (clear) {
|
||||||
int timeout = config()->get(Config::Security_ClearClipboardTimeout).toInt();
|
m_lastCopied = text;
|
||||||
if (timeout > 0) {
|
if (config()->get(Config::Security_ClearClipboard).toBool()) {
|
||||||
m_lastCopied = text;
|
int timeout = config()->get(Config::Security_ClearClipboardTimeout).toInt();
|
||||||
m_timer->start(timeout * 1000);
|
if (timeout > 0) {
|
||||||
|
m_timer->start(timeout * 1000);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -80,8 +82,9 @@ void Clipboard::clearCopiedText()
|
|||||||
{
|
{
|
||||||
if (m_timer->isActive()) {
|
if (m_timer->isActive()) {
|
||||||
m_timer->stop();
|
m_timer->stop();
|
||||||
clearClipboard();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
clearClipboard();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Clipboard::clearClipboard()
|
void Clipboard::clearClipboard()
|
||||||
|
@ -141,21 +141,15 @@ DatabaseWidget::DatabaseWidget(QSharedPointer<Database> db, QWidget* parent)
|
|||||||
connect(m_entryView, SIGNAL(customContextMenuRequested(QPoint)), SLOT(emitEntryContextMenuRequested(QPoint)));
|
connect(m_entryView, SIGNAL(customContextMenuRequested(QPoint)), SLOT(emitEntryContextMenuRequested(QPoint)));
|
||||||
|
|
||||||
// Add a notification for when we are searching
|
// Add a notification for when we are searching
|
||||||
|
m_searchingLabel->setObjectName("SearchBanner");
|
||||||
m_searchingLabel->setText(tr("Searching..."));
|
m_searchingLabel->setText(tr("Searching..."));
|
||||||
m_searchingLabel->setAlignment(Qt::AlignCenter);
|
m_searchingLabel->setAlignment(Qt::AlignCenter);
|
||||||
m_searchingLabel->setStyleSheet("color: rgb(0, 0, 0);"
|
|
||||||
"background-color: rgb(255, 253, 160);"
|
|
||||||
"border: 2px solid rgb(190, 190, 190);"
|
|
||||||
"border-radius: 4px;");
|
|
||||||
m_searchingLabel->setVisible(false);
|
m_searchingLabel->setVisible(false);
|
||||||
|
|
||||||
#ifdef WITH_XC_KEESHARE
|
#ifdef WITH_XC_KEESHARE
|
||||||
|
m_shareLabel->setObjectName("KeeShareBanner");
|
||||||
m_shareLabel->setText(tr("Shared group..."));
|
m_shareLabel->setText(tr("Shared group..."));
|
||||||
m_shareLabel->setAlignment(Qt::AlignCenter);
|
m_shareLabel->setAlignment(Qt::AlignCenter);
|
||||||
m_shareLabel->setStyleSheet("color: rgb(0, 0, 0);"
|
|
||||||
"background-color: rgb(255, 253, 160);"
|
|
||||||
"border: 2px solid rgb(190, 190, 190);"
|
|
||||||
"border-radius: 4px;");
|
|
||||||
m_shareLabel->setVisible(false);
|
m_shareLabel->setVisible(false);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -637,17 +631,25 @@ void DatabaseWidget::setFocus(Qt::FocusReason reason)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DatabaseWidget::focusOnEntries()
|
void DatabaseWidget::focusOnEntries(bool editIfFocused)
|
||||||
{
|
{
|
||||||
if (isEntryViewActive()) {
|
if (isEntryViewActive()) {
|
||||||
m_entryView->setFocus();
|
if (editIfFocused && m_entryView->hasFocus()) {
|
||||||
|
switchToEntryEdit();
|
||||||
|
} else {
|
||||||
|
m_entryView->setFocus();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DatabaseWidget::focusOnGroups()
|
void DatabaseWidget::focusOnGroups(bool editIfFocused)
|
||||||
{
|
{
|
||||||
if (isEntryViewActive()) {
|
if (isEntryViewActive()) {
|
||||||
m_groupView->setFocus();
|
if (editIfFocused && m_groupView->hasFocus()) {
|
||||||
|
switchToGroupEdit();
|
||||||
|
} else {
|
||||||
|
m_groupView->setFocus();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1568,7 +1570,7 @@ bool DatabaseWidget::lock()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_db->isModified(true)) {
|
if (m_db->isModified()) {
|
||||||
bool saved = false;
|
bool saved = false;
|
||||||
// Attempt to save on exit, but don't block locking if it fails
|
// Attempt to save on exit, but don't block locking if it fails
|
||||||
if (config()->get(Config::AutoSaveOnExit).toBool()
|
if (config()->get(Config::AutoSaveOnExit).toBool()
|
||||||
@ -1596,6 +1598,10 @@ bool DatabaseWidget::lock()
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else if (m_db->hasNonDataChanges() && config()->get(Config::AutoSaveNonDataChanges).toBool()) {
|
||||||
|
// Silently auto-save non-data changes, ignore errors
|
||||||
|
QString errorMessage;
|
||||||
|
performSave(errorMessage);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_groupView->currentGroup()) {
|
if (m_groupView->currentGroup()) {
|
||||||
@ -1652,7 +1658,7 @@ void DatabaseWidget::reloadDatabaseFile()
|
|||||||
QString error;
|
QString error;
|
||||||
auto db = QSharedPointer<Database>::create(m_db->filePath());
|
auto db = QSharedPointer<Database>::create(m_db->filePath());
|
||||||
if (db->open(database()->key(), &error)) {
|
if (db->open(database()->key(), &error)) {
|
||||||
if (m_db->isModified(true)) {
|
if (m_db->isModified() || db->hasNonDataChanges()) {
|
||||||
// Ask if we want to merge changes into new database
|
// Ask if we want to merge changes into new database
|
||||||
auto result = MessageBox::question(
|
auto result = MessageBox::question(
|
||||||
this,
|
this,
|
||||||
@ -1845,33 +1851,14 @@ bool DatabaseWidget::save()
|
|||||||
m_blockAutoSave = true;
|
m_blockAutoSave = true;
|
||||||
++m_saveAttempts;
|
++m_saveAttempts;
|
||||||
|
|
||||||
QPointer<QWidget> focusWidget(qApp->focusWidget());
|
|
||||||
|
|
||||||
// TODO: Make this async
|
|
||||||
// Lock out interactions
|
|
||||||
m_entryView->setDisabled(true);
|
|
||||||
m_groupView->setDisabled(true);
|
|
||||||
QApplication::processEvents();
|
|
||||||
|
|
||||||
bool useAtomicSaves = config()->get(Config::UseAtomicSaves).toBool();
|
|
||||||
QString errorMessage;
|
QString errorMessage;
|
||||||
bool ok = m_db->save(&errorMessage, useAtomicSaves, config()->get(Config::BackupBeforeSave).toBool());
|
if (performSave(errorMessage)) {
|
||||||
|
|
||||||
// Return control
|
|
||||||
m_entryView->setDisabled(false);
|
|
||||||
m_groupView->setDisabled(false);
|
|
||||||
|
|
||||||
if (focusWidget) {
|
|
||||||
focusWidget->setFocus();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ok) {
|
|
||||||
m_saveAttempts = 0;
|
m_saveAttempts = 0;
|
||||||
m_blockAutoSave = false;
|
m_blockAutoSave = false;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_saveAttempts > 2 && useAtomicSaves) {
|
if (m_saveAttempts > 2 && config()->get(Config::UseAtomicSaves).toBool()) {
|
||||||
// Saving failed 3 times, issue a warning and attempt to resolve
|
// Saving failed 3 times, issue a warning and attempt to resolve
|
||||||
auto result = MessageBox::question(this,
|
auto result = MessageBox::question(this,
|
||||||
tr("Disable safe saves?"),
|
tr("Disable safe saves?"),
|
||||||
@ -1919,28 +1906,8 @@ bool DatabaseWidget::saveAs()
|
|||||||
|
|
||||||
bool ok = false;
|
bool ok = false;
|
||||||
if (!newFilePath.isEmpty()) {
|
if (!newFilePath.isEmpty()) {
|
||||||
QPointer<QWidget> focusWidget(qApp->focusWidget());
|
|
||||||
|
|
||||||
// Lock out interactions
|
|
||||||
m_entryView->setDisabled(true);
|
|
||||||
m_groupView->setDisabled(true);
|
|
||||||
QApplication::processEvents();
|
|
||||||
|
|
||||||
QString errorMessage;
|
QString errorMessage;
|
||||||
ok = m_db->saveAs(newFilePath,
|
if (!performSave(errorMessage, newFilePath)) {
|
||||||
&errorMessage,
|
|
||||||
config()->get(Config::UseAtomicSaves).toBool(),
|
|
||||||
config()->get(Config::BackupBeforeSave).toBool());
|
|
||||||
|
|
||||||
// Return control
|
|
||||||
m_entryView->setDisabled(false);
|
|
||||||
m_groupView->setDisabled(false);
|
|
||||||
|
|
||||||
if (focusWidget) {
|
|
||||||
focusWidget->setFocus();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!ok) {
|
|
||||||
showMessage(tr("Writing the database failed: %1").arg(errorMessage),
|
showMessage(tr("Writing the database failed: %1").arg(errorMessage),
|
||||||
MessageWidget::Error,
|
MessageWidget::Error,
|
||||||
true,
|
true,
|
||||||
@ -1951,6 +1918,38 @@ bool DatabaseWidget::saveAs()
|
|||||||
return ok;
|
return ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool DatabaseWidget::performSave(QString& errorMessage, const QString& fileName)
|
||||||
|
{
|
||||||
|
QPointer<QWidget> focusWidget(qApp->focusWidget());
|
||||||
|
|
||||||
|
// Lock out interactions
|
||||||
|
m_entryView->setDisabled(true);
|
||||||
|
m_groupView->setDisabled(true);
|
||||||
|
QApplication::processEvents();
|
||||||
|
|
||||||
|
bool ok;
|
||||||
|
if (fileName.isEmpty()) {
|
||||||
|
ok = m_db->save(&errorMessage,
|
||||||
|
config()->get(Config::UseAtomicSaves).toBool(),
|
||||||
|
config()->get(Config::BackupBeforeSave).toBool());
|
||||||
|
} else {
|
||||||
|
ok = m_db->saveAs(fileName,
|
||||||
|
&errorMessage,
|
||||||
|
config()->get(Config::UseAtomicSaves).toBool(),
|
||||||
|
config()->get(Config::BackupBeforeSave).toBool());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Return control
|
||||||
|
m_entryView->setDisabled(false);
|
||||||
|
m_groupView->setDisabled(false);
|
||||||
|
|
||||||
|
if (focusWidget) {
|
||||||
|
focusWidget->setFocus();
|
||||||
|
}
|
||||||
|
|
||||||
|
return ok;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Save copy of database under a new user-selected filename.
|
* Save copy of database under a new user-selected filename.
|
||||||
*
|
*
|
||||||
@ -2060,18 +2059,23 @@ void DatabaseWidget::processAutoOpen()
|
|||||||
// Support ifDevice advanced entry, a comma separated list of computer names
|
// Support ifDevice advanced entry, a comma separated list of computer names
|
||||||
// that control whether to perform AutoOpen on this entry or not. Can be
|
// that control whether to perform AutoOpen on this entry or not. Can be
|
||||||
// negated using '!'
|
// negated using '!'
|
||||||
auto ifDevice = entry->attribute("ifDevice");
|
auto ifDevice = entry->attribute("IfDevice");
|
||||||
if (!ifDevice.isEmpty()) {
|
if (!ifDevice.isEmpty()) {
|
||||||
bool loadDb = false;
|
bool loadDb = true;
|
||||||
auto hostName = QHostInfo::localHostName();
|
auto hostName = QHostInfo::localHostName();
|
||||||
for (auto& dev : ifDevice.split(",")) {
|
for (auto& device : ifDevice.split(",")) {
|
||||||
dev = dev.trimmed();
|
device = device.trimmed();
|
||||||
if (dev.startsWith("!") && dev.mid(1).compare(hostName, Qt::CaseInsensitive) == 0) {
|
if (device.startsWith("!")) {
|
||||||
// Machine name matched an exclusion, don't load this database
|
if (device.mid(1).compare(hostName, Qt::CaseInsensitive) == 0) {
|
||||||
loadDb = false;
|
// Machine name matched an exclusion, don't load this database
|
||||||
break;
|
loadDb = false;
|
||||||
} else if (dev.compare(hostName, Qt::CaseInsensitive) == 0) {
|
break;
|
||||||
|
}
|
||||||
|
} else if (device.compare(hostName, Qt::CaseInsensitive) == 0) {
|
||||||
loadDb = true;
|
loadDb = true;
|
||||||
|
} else {
|
||||||
|
// Don't load the database if there are devices not starting with '!'
|
||||||
|
loadDb = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!loadDb) {
|
if (!loadDb) {
|
||||||
|
@ -167,8 +167,8 @@ public slots:
|
|||||||
void cloneEntry();
|
void cloneEntry();
|
||||||
void deleteSelectedEntries();
|
void deleteSelectedEntries();
|
||||||
void deleteEntries(QList<Entry*> entries);
|
void deleteEntries(QList<Entry*> entries);
|
||||||
void focusOnEntries();
|
void focusOnEntries(bool editIfFocused = false);
|
||||||
void focusOnGroups();
|
void focusOnGroups(bool editIfFocused = false);
|
||||||
void moveEntryUp();
|
void moveEntryUp();
|
||||||
void moveEntryDown();
|
void moveEntryDown();
|
||||||
void copyTitle();
|
void copyTitle();
|
||||||
@ -260,6 +260,7 @@ private:
|
|||||||
void openDatabaseFromEntry(const Entry* entry, bool inBackground = true);
|
void openDatabaseFromEntry(const Entry* entry, bool inBackground = true);
|
||||||
bool confirmDeleteEntries(QList<Entry*> entries, bool permanent);
|
bool confirmDeleteEntries(QList<Entry*> entries, bool permanent);
|
||||||
void performIconDownloads(const QList<Entry*>& entries, bool force = false);
|
void performIconDownloads(const QList<Entry*>& entries, bool force = false);
|
||||||
|
bool performSave(QString& errorMessage, const QString& fileName = {});
|
||||||
Entry* currentSelectedEntry();
|
Entry* currentSelectedEntry();
|
||||||
|
|
||||||
QSharedPointer<Database> m_db;
|
QSharedPointer<Database> m_db;
|
||||||
|
@ -325,14 +325,6 @@ MainWindow::MainWindow()
|
|||||||
shortcut = new QShortcut(dbTabModifier + Qt::Key_9, this);
|
shortcut = new QShortcut(dbTabModifier + Qt::Key_9, this);
|
||||||
connect(shortcut, &QShortcut::activated, [this]() { selectDatabaseTab(m_ui->tabWidget->count() - 1); });
|
connect(shortcut, &QShortcut::activated, [this]() { selectDatabaseTab(m_ui->tabWidget->count() - 1); });
|
||||||
|
|
||||||
// Allow for direct focus of search, group view, and entry view
|
|
||||||
shortcut = new QShortcut(Qt::Key_F1, this);
|
|
||||||
connect(shortcut, SIGNAL(activated()), m_searchWidget, SLOT(searchFocus()));
|
|
||||||
shortcut = new QShortcut(Qt::Key_F2, this);
|
|
||||||
m_actionMultiplexer.connect(shortcut, SIGNAL(activated()), SLOT(focusOnGroups()));
|
|
||||||
shortcut = new QShortcut(Qt::Key_F3, this);
|
|
||||||
m_actionMultiplexer.connect(shortcut, SIGNAL(activated()), SLOT(focusOnEntries()));
|
|
||||||
|
|
||||||
// Toggle password and username visibility in entry view
|
// Toggle password and username visibility in entry view
|
||||||
new QShortcut(Qt::CTRL + Qt::SHIFT + Qt::Key_C, this, SLOT(togglePasswordsHidden()));
|
new QShortcut(Qt::CTRL + Qt::SHIFT + Qt::Key_C, this, SLOT(togglePasswordsHidden()));
|
||||||
new QShortcut(Qt::CTRL + Qt::SHIFT + Qt::Key_B, this, SLOT(toggleUsernamesHidden()));
|
new QShortcut(Qt::CTRL + Qt::SHIFT + Qt::Key_B, this, SLOT(toggleUsernamesHidden()));
|
||||||
@ -1189,6 +1181,28 @@ void MainWindow::changeEvent(QEvent* event)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MainWindow::keyPressEvent(QKeyEvent* event)
|
||||||
|
{
|
||||||
|
if (!event->modifiers()) {
|
||||||
|
// Allow for direct focus of search, group view, and entry view
|
||||||
|
auto dbWidget = m_ui->tabWidget->currentDatabaseWidget();
|
||||||
|
if (dbWidget && dbWidget->isEntryViewActive()) {
|
||||||
|
if (event->key() == Qt::Key_F1) {
|
||||||
|
dbWidget->focusOnGroups(true);
|
||||||
|
return;
|
||||||
|
} else if (event->key() == Qt::Key_F2) {
|
||||||
|
dbWidget->focusOnEntries(true);
|
||||||
|
return;
|
||||||
|
} else if (event->key() == Qt::Key_F3) {
|
||||||
|
m_searchWidget->searchFocus();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
QWidget::keyPressEvent(event);
|
||||||
|
}
|
||||||
|
|
||||||
bool MainWindow::focusNextPrevChild(bool next)
|
bool MainWindow::focusNextPrevChild(bool next)
|
||||||
{
|
{
|
||||||
// Only navigate around the main window if the database widget is showing the entry view
|
// Only navigate around the main window if the database widget is showing the entry view
|
||||||
|
@ -86,6 +86,7 @@ public slots:
|
|||||||
protected:
|
protected:
|
||||||
void closeEvent(QCloseEvent* event) override;
|
void closeEvent(QCloseEvent* event) override;
|
||||||
void changeEvent(QEvent* event) override;
|
void changeEvent(QEvent* event) override;
|
||||||
|
void keyPressEvent(QKeyEvent* event) override;
|
||||||
bool focusNextPrevChild(bool next) override;
|
bool focusNextPrevChild(bool next) override;
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
|
@ -52,7 +52,7 @@ public slots:
|
|||||||
private:
|
private:
|
||||||
QTimer* m_autoHideTimer;
|
QTimer* m_autoHideTimer;
|
||||||
int m_autoHideTimeout;
|
int m_autoHideTimeout;
|
||||||
bool m_animate;
|
bool m_animate = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // MESSAGEWIDGET_H
|
#endif // MESSAGEWIDGET_H
|
||||||
|
@ -22,6 +22,7 @@
|
|||||||
#include <QDir>
|
#include <QDir>
|
||||||
#include <QKeyEvent>
|
#include <QKeyEvent>
|
||||||
#include <QLineEdit>
|
#include <QLineEdit>
|
||||||
|
#include <QTimer>
|
||||||
|
|
||||||
#include "core/Config.h"
|
#include "core/Config.h"
|
||||||
#include "core/PasswordGenerator.h"
|
#include "core/PasswordGenerator.h"
|
||||||
@ -134,26 +135,25 @@ void PasswordGeneratorWidget::loadSettings()
|
|||||||
{
|
{
|
||||||
// Password config
|
// Password config
|
||||||
m_ui->checkBoxLower->setChecked(config()->get(Config::PasswordGenerator_LowerCase).toBool());
|
m_ui->checkBoxLower->setChecked(config()->get(Config::PasswordGenerator_LowerCase).toBool());
|
||||||
m_ui->checkBoxLowerAdv->setChecked(config()->get(Config::PasswordGenerator_LowerCase).toBool());
|
|
||||||
m_ui->checkBoxUpper->setChecked(config()->get(Config::PasswordGenerator_UpperCase).toBool());
|
m_ui->checkBoxUpper->setChecked(config()->get(Config::PasswordGenerator_UpperCase).toBool());
|
||||||
m_ui->checkBoxUpperAdv->setChecked(config()->get(Config::PasswordGenerator_UpperCase).toBool());
|
|
||||||
m_ui->checkBoxNumbers->setChecked(config()->get(Config::PasswordGenerator_Numbers).toBool());
|
m_ui->checkBoxNumbers->setChecked(config()->get(Config::PasswordGenerator_Numbers).toBool());
|
||||||
m_ui->checkBoxSpecialChars->setChecked(config()->get(Config::PasswordGenerator_SpecialChars).toBool());
|
|
||||||
m_ui->checkBoxNumbersAdv->setChecked(config()->get(Config::PasswordGenerator_Numbers).toBool());
|
|
||||||
m_ui->editAdditionalChars->setText(config()->get(Config::PasswordGenerator_AdditionalChars).toString());
|
m_ui->editAdditionalChars->setText(config()->get(Config::PasswordGenerator_AdditionalChars).toString());
|
||||||
m_ui->editExcludedChars->setText(config()->get(Config::PasswordGenerator_ExcludedChars).toString());
|
m_ui->editExcludedChars->setText(config()->get(Config::PasswordGenerator_ExcludedChars).toString());
|
||||||
|
|
||||||
m_ui->buttonAdvancedMode->setChecked(config()->get(Config::PasswordGenerator_AdvancedMode).toBool());
|
bool advanced = config()->get(Config::PasswordGenerator_AdvancedMode).toBool();
|
||||||
setAdvancedMode(m_ui->buttonAdvancedMode->isChecked());
|
if (advanced) {
|
||||||
|
m_ui->checkBoxSpecialChars->setChecked(config()->get(Config::PasswordGenerator_Logograms).toBool());
|
||||||
|
} else {
|
||||||
|
m_ui->checkBoxSpecialChars->setChecked(config()->get(Config::PasswordGenerator_SpecialChars).toBool());
|
||||||
|
}
|
||||||
|
|
||||||
m_ui->checkBoxBraces->setChecked(config()->get(Config::PasswordGenerator_Braces).toBool());
|
m_ui->checkBoxBraces->setChecked(config()->get(Config::PasswordGenerator_Braces).toBool());
|
||||||
m_ui->checkBoxQuotes->setChecked(config()->get(Config::PasswordGenerator_Quotes).toBool());
|
m_ui->checkBoxQuotes->setChecked(config()->get(Config::PasswordGenerator_Quotes).toBool());
|
||||||
m_ui->checkBoxPunctuation->setChecked(config()->get(Config::PasswordGenerator_Punctuation).toBool());
|
m_ui->checkBoxPunctuation->setChecked(config()->get(Config::PasswordGenerator_Punctuation).toBool());
|
||||||
m_ui->checkBoxDashes->setChecked(config()->get(Config::PasswordGenerator_Dashes).toBool());
|
m_ui->checkBoxDashes->setChecked(config()->get(Config::PasswordGenerator_Dashes).toBool());
|
||||||
m_ui->checkBoxMath->setChecked(config()->get(Config::PasswordGenerator_Math).toBool());
|
m_ui->checkBoxMath->setChecked(config()->get(Config::PasswordGenerator_Math).toBool());
|
||||||
m_ui->checkBoxLogograms->setChecked(config()->get(Config::PasswordGenerator_Logograms).toBool());
|
|
||||||
m_ui->checkBoxExtASCII->setChecked(config()->get(Config::PasswordGenerator_EASCII).toBool());
|
m_ui->checkBoxExtASCII->setChecked(config()->get(Config::PasswordGenerator_EASCII).toBool());
|
||||||
m_ui->checkBoxExtASCIIAdv->setChecked(config()->get(Config::PasswordGenerator_EASCII).toBool());
|
|
||||||
m_ui->checkBoxExcludeAlike->setChecked(config()->get(Config::PasswordGenerator_ExcludeAlike).toBool());
|
m_ui->checkBoxExcludeAlike->setChecked(config()->get(Config::PasswordGenerator_ExcludeAlike).toBool());
|
||||||
m_ui->checkBoxEnsureEvery->setChecked(config()->get(Config::PasswordGenerator_EnsureEvery).toBool());
|
m_ui->checkBoxEnsureEvery->setChecked(config()->get(Config::PasswordGenerator_EnsureEvery).toBool());
|
||||||
m_ui->spinBoxLength->setValue(config()->get(Config::PasswordGenerator_Length).toInt());
|
m_ui->spinBoxLength->setValue(config()->get(Config::PasswordGenerator_Length).toInt());
|
||||||
@ -166,30 +166,32 @@ void PasswordGeneratorWidget::loadSettings()
|
|||||||
|
|
||||||
// Password or diceware?
|
// Password or diceware?
|
||||||
m_ui->tabWidget->setCurrentIndex(config()->get(Config::PasswordGenerator_Type).toInt());
|
m_ui->tabWidget->setCurrentIndex(config()->get(Config::PasswordGenerator_Type).toInt());
|
||||||
|
|
||||||
|
// Set advanced mode
|
||||||
|
m_ui->buttonAdvancedMode->setChecked(advanced);
|
||||||
|
setAdvancedMode(advanced);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PasswordGeneratorWidget::saveSettings()
|
void PasswordGeneratorWidget::saveSettings()
|
||||||
{
|
{
|
||||||
// Password config
|
// Password config
|
||||||
if (m_ui->simpleBar->isVisible()) {
|
config()->set(Config::PasswordGenerator_LowerCase, m_ui->checkBoxLower->isChecked());
|
||||||
config()->set(Config::PasswordGenerator_LowerCase, m_ui->checkBoxLower->isChecked());
|
config()->set(Config::PasswordGenerator_UpperCase, m_ui->checkBoxUpper->isChecked());
|
||||||
config()->set(Config::PasswordGenerator_UpperCase, m_ui->checkBoxUpper->isChecked());
|
config()->set(Config::PasswordGenerator_Numbers, m_ui->checkBoxNumbers->isChecked());
|
||||||
config()->set(Config::PasswordGenerator_Numbers, m_ui->checkBoxNumbers->isChecked());
|
config()->set(Config::PasswordGenerator_EASCII, m_ui->checkBoxExtASCII->isChecked());
|
||||||
config()->set(Config::PasswordGenerator_EASCII, m_ui->checkBoxExtASCII->isChecked());
|
|
||||||
} else {
|
|
||||||
config()->set(Config::PasswordGenerator_LowerCase, m_ui->checkBoxLowerAdv->isChecked());
|
|
||||||
config()->set(Config::PasswordGenerator_UpperCase, m_ui->checkBoxUpperAdv->isChecked());
|
|
||||||
config()->set(Config::PasswordGenerator_Numbers, m_ui->checkBoxNumbersAdv->isChecked());
|
|
||||||
config()->set(Config::PasswordGenerator_EASCII, m_ui->checkBoxExtASCIIAdv->isChecked());
|
|
||||||
}
|
|
||||||
config()->set(Config::PasswordGenerator_AdvancedMode, m_ui->buttonAdvancedMode->isChecked());
|
config()->set(Config::PasswordGenerator_AdvancedMode, m_ui->buttonAdvancedMode->isChecked());
|
||||||
config()->set(Config::PasswordGenerator_SpecialChars, m_ui->checkBoxSpecialChars->isChecked());
|
if (m_ui->buttonAdvancedMode->isChecked()) {
|
||||||
|
config()->set(Config::PasswordGenerator_SpecialChars, m_ui->checkBoxSpecialChars->isChecked());
|
||||||
|
} else {
|
||||||
|
config()->set(Config::PasswordGenerator_Logograms, m_ui->checkBoxSpecialChars->isChecked());
|
||||||
|
}
|
||||||
config()->set(Config::PasswordGenerator_Braces, m_ui->checkBoxBraces->isChecked());
|
config()->set(Config::PasswordGenerator_Braces, m_ui->checkBoxBraces->isChecked());
|
||||||
config()->set(Config::PasswordGenerator_Punctuation, m_ui->checkBoxPunctuation->isChecked());
|
config()->set(Config::PasswordGenerator_Punctuation, m_ui->checkBoxPunctuation->isChecked());
|
||||||
config()->set(Config::PasswordGenerator_Quotes, m_ui->checkBoxQuotes->isChecked());
|
config()->set(Config::PasswordGenerator_Quotes, m_ui->checkBoxQuotes->isChecked());
|
||||||
config()->set(Config::PasswordGenerator_Dashes, m_ui->checkBoxDashes->isChecked());
|
config()->set(Config::PasswordGenerator_Dashes, m_ui->checkBoxDashes->isChecked());
|
||||||
config()->set(Config::PasswordGenerator_Math, m_ui->checkBoxMath->isChecked());
|
config()->set(Config::PasswordGenerator_Math, m_ui->checkBoxMath->isChecked());
|
||||||
config()->set(Config::PasswordGenerator_Logograms, m_ui->checkBoxLogograms->isChecked());
|
|
||||||
config()->set(Config::PasswordGenerator_AdditionalChars, m_ui->editAdditionalChars->text());
|
config()->set(Config::PasswordGenerator_AdditionalChars, m_ui->editAdditionalChars->text());
|
||||||
config()->set(Config::PasswordGenerator_ExcludedChars, m_ui->editExcludedChars->text());
|
config()->set(Config::PasswordGenerator_ExcludedChars, m_ui->editExcludedChars->text());
|
||||||
config()->set(Config::PasswordGenerator_ExcludeAlike, m_ui->checkBoxExcludeAlike->isChecked());
|
config()->set(Config::PasswordGenerator_ExcludeAlike, m_ui->checkBoxExcludeAlike->isChecked());
|
||||||
@ -321,41 +323,48 @@ bool PasswordGeneratorWidget::isPasswordVisible() const
|
|||||||
return m_ui->editNewPassword->isPasswordVisible();
|
return m_ui->editNewPassword->isPasswordVisible();
|
||||||
}
|
}
|
||||||
|
|
||||||
void PasswordGeneratorWidget::setAdvancedMode(bool state)
|
void PasswordGeneratorWidget::setAdvancedMode(bool advanced)
|
||||||
{
|
{
|
||||||
if (state) {
|
saveSettings();
|
||||||
m_ui->simpleBar->hide();
|
|
||||||
m_ui->advancedContainer->show();
|
if (advanced) {
|
||||||
m_ui->checkBoxUpperAdv->setChecked(m_ui->checkBoxUpper->isChecked());
|
m_ui->checkBoxSpecialChars->setText("# $ % && @ ^ ` ~");
|
||||||
m_ui->checkBoxLowerAdv->setChecked(m_ui->checkBoxLower->isChecked());
|
m_ui->checkBoxSpecialChars->setToolTip(tr("Logograms"));
|
||||||
m_ui->checkBoxNumbersAdv->setChecked(m_ui->checkBoxNumbers->isChecked());
|
m_ui->checkBoxSpecialChars->setChecked(config()->get(Config::PasswordGenerator_Logograms).toBool());
|
||||||
m_ui->checkBoxBraces->setChecked(m_ui->checkBoxSpecialChars->isChecked());
|
|
||||||
m_ui->checkBoxPunctuation->setChecked(m_ui->checkBoxSpecialChars->isChecked());
|
|
||||||
m_ui->checkBoxQuotes->setChecked(m_ui->checkBoxSpecialChars->isChecked());
|
|
||||||
m_ui->checkBoxMath->setChecked(m_ui->checkBoxSpecialChars->isChecked());
|
|
||||||
m_ui->checkBoxDashes->setChecked(m_ui->checkBoxSpecialChars->isChecked());
|
|
||||||
m_ui->checkBoxLogograms->setChecked(m_ui->checkBoxSpecialChars->isChecked());
|
|
||||||
m_ui->checkBoxExtASCIIAdv->setChecked(m_ui->checkBoxExtASCII->isChecked());
|
|
||||||
} else {
|
} else {
|
||||||
m_ui->simpleBar->show();
|
m_ui->checkBoxSpecialChars->setText("/ * + && …");
|
||||||
m_ui->advancedContainer->hide();
|
m_ui->checkBoxSpecialChars->setToolTip(tr("Special Characters"));
|
||||||
m_ui->checkBoxUpper->setChecked(m_ui->checkBoxUpperAdv->isChecked());
|
m_ui->checkBoxSpecialChars->setChecked(config()->get(Config::PasswordGenerator_SpecialChars).toBool());
|
||||||
m_ui->checkBoxLower->setChecked(m_ui->checkBoxLowerAdv->isChecked());
|
|
||||||
m_ui->checkBoxNumbers->setChecked(m_ui->checkBoxNumbersAdv->isChecked());
|
|
||||||
m_ui->checkBoxSpecialChars->setChecked(
|
|
||||||
m_ui->checkBoxBraces->isChecked() | m_ui->checkBoxPunctuation->isChecked()
|
|
||||||
| m_ui->checkBoxQuotes->isChecked() | m_ui->checkBoxMath->isChecked() | m_ui->checkBoxDashes->isChecked()
|
|
||||||
| m_ui->checkBoxLogograms->isChecked());
|
|
||||||
m_ui->checkBoxExtASCII->setChecked(m_ui->checkBoxExtASCIIAdv->isChecked());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QApplication::processEvents();
|
m_ui->advancedContainer->setVisible(advanced);
|
||||||
adjustSize();
|
m_ui->checkBoxBraces->setVisible(advanced);
|
||||||
|
m_ui->checkBoxPunctuation->setVisible(advanced);
|
||||||
|
m_ui->checkBoxQuotes->setVisible(advanced);
|
||||||
|
m_ui->checkBoxMath->setVisible(advanced);
|
||||||
|
m_ui->checkBoxDashes->setVisible(advanced);
|
||||||
|
|
||||||
|
if (!m_standalone) {
|
||||||
|
QTimer::singleShot(50, this, [this] { adjustSize(); });
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void PasswordGeneratorWidget::excludeHexChars()
|
void PasswordGeneratorWidget::excludeHexChars()
|
||||||
{
|
{
|
||||||
m_ui->editExcludedChars->setText("GHIJKLMNOPQRSTUVWXYZghijklmnopqrstuvwxyz");
|
m_ui->editExcludedChars->setText("GHIJKLMNOPQRSTUVWXYZghijklmnopqrstuvwxyz");
|
||||||
|
m_ui->checkBoxNumbers->setChecked(true);
|
||||||
|
m_ui->checkBoxUpper->setChecked(true);
|
||||||
|
|
||||||
|
m_ui->checkBoxLower->setChecked(false);
|
||||||
|
m_ui->checkBoxSpecialChars->setChecked(false);
|
||||||
|
m_ui->checkBoxExtASCII->setChecked(false);
|
||||||
|
m_ui->checkBoxPunctuation->setChecked(false);
|
||||||
|
m_ui->checkBoxQuotes->setChecked(false);
|
||||||
|
m_ui->checkBoxDashes->setChecked(false);
|
||||||
|
m_ui->checkBoxMath->setChecked(false);
|
||||||
|
m_ui->checkBoxBraces->setChecked(false);
|
||||||
|
|
||||||
|
updateGenerator();
|
||||||
}
|
}
|
||||||
|
|
||||||
void PasswordGeneratorWidget::colorStrengthIndicator(const PasswordHealth& health)
|
void PasswordGeneratorWidget::colorStrengthIndicator(const PasswordHealth& health)
|
||||||
@ -397,39 +406,27 @@ PasswordGenerator::CharClasses PasswordGeneratorWidget::charClasses()
|
|||||||
{
|
{
|
||||||
PasswordGenerator::CharClasses classes;
|
PasswordGenerator::CharClasses classes;
|
||||||
|
|
||||||
if (m_ui->simpleBar->isVisible()) {
|
if (m_ui->checkBoxLower->isChecked()) {
|
||||||
if (m_ui->checkBoxLower->isChecked()) {
|
classes |= PasswordGenerator::LowerLetters;
|
||||||
classes |= PasswordGenerator::LowerLetters;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (m_ui->checkBoxUpper->isChecked()) {
|
if (m_ui->checkBoxUpper->isChecked()) {
|
||||||
classes |= PasswordGenerator::UpperLetters;
|
classes |= PasswordGenerator::UpperLetters;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_ui->checkBoxNumbers->isChecked()) {
|
if (m_ui->checkBoxNumbers->isChecked()) {
|
||||||
classes |= PasswordGenerator::Numbers;
|
classes |= PasswordGenerator::Numbers;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (m_ui->checkBoxExtASCII->isChecked()) {
|
||||||
|
classes |= PasswordGenerator::EASCII;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!m_ui->buttonAdvancedMode->isChecked()) {
|
||||||
if (m_ui->checkBoxSpecialChars->isChecked()) {
|
if (m_ui->checkBoxSpecialChars->isChecked()) {
|
||||||
classes |= PasswordGenerator::SpecialCharacters;
|
classes |= PasswordGenerator::SpecialCharacters;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_ui->checkBoxExtASCII->isChecked()) {
|
|
||||||
classes |= PasswordGenerator::EASCII;
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
if (m_ui->checkBoxLowerAdv->isChecked()) {
|
|
||||||
classes |= PasswordGenerator::LowerLetters;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (m_ui->checkBoxUpperAdv->isChecked()) {
|
|
||||||
classes |= PasswordGenerator::UpperLetters;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (m_ui->checkBoxNumbersAdv->isChecked()) {
|
|
||||||
classes |= PasswordGenerator::Numbers;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (m_ui->checkBoxBraces->isChecked()) {
|
if (m_ui->checkBoxBraces->isChecked()) {
|
||||||
classes |= PasswordGenerator::Braces;
|
classes |= PasswordGenerator::Braces;
|
||||||
}
|
}
|
||||||
@ -450,13 +447,9 @@ PasswordGenerator::CharClasses PasswordGeneratorWidget::charClasses()
|
|||||||
classes |= PasswordGenerator::Math;
|
classes |= PasswordGenerator::Math;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_ui->checkBoxLogograms->isChecked()) {
|
if (m_ui->checkBoxSpecialChars->isChecked()) {
|
||||||
classes |= PasswordGenerator::Logograms;
|
classes |= PasswordGenerator::Logograms;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_ui->checkBoxExtASCIIAdv->isChecked()) {
|
|
||||||
classes |= PasswordGenerator::EASCII;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return classes;
|
return classes;
|
||||||
|
@ -45,8 +45,10 @@ public:
|
|||||||
Password = 0,
|
Password = 0,
|
||||||
Diceware = 1
|
Diceware = 1
|
||||||
};
|
};
|
||||||
|
|
||||||
explicit PasswordGeneratorWidget(QWidget* parent = nullptr);
|
explicit PasswordGeneratorWidget(QWidget* parent = nullptr);
|
||||||
~PasswordGeneratorWidget();
|
~PasswordGeneratorWidget();
|
||||||
|
|
||||||
void loadSettings();
|
void loadSettings();
|
||||||
void saveSettings();
|
void saveSettings();
|
||||||
void setPasswordLength(int length);
|
void setPasswordLength(int length);
|
||||||
@ -69,7 +71,7 @@ signals:
|
|||||||
private slots:
|
private slots:
|
||||||
void updateButtonsEnabled(const QString& password);
|
void updateButtonsEnabled(const QString& password);
|
||||||
void updatePasswordStrength(const QString& password);
|
void updatePasswordStrength(const QString& password);
|
||||||
void setAdvancedMode(bool state);
|
void setAdvancedMode(bool advanced);
|
||||||
void excludeHexChars();
|
void excludeHexChars();
|
||||||
|
|
||||||
void passwordLengthChanged(int length);
|
void passwordLengthChanged(int length);
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -61,13 +61,13 @@ signals:
|
|||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void databaseChanged(DatabaseWidget* dbWidget = nullptr);
|
void databaseChanged(DatabaseWidget* dbWidget = nullptr);
|
||||||
|
void searchFocus();
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void startSearchTimer();
|
void startSearchTimer();
|
||||||
void startSearch();
|
void startSearch();
|
||||||
void updateCaseSensitive();
|
void updateCaseSensitive();
|
||||||
void updateLimitGroup();
|
void updateLimitGroup();
|
||||||
void searchFocus();
|
|
||||||
void toggleHelp();
|
void toggleHelp();
|
||||||
void showSearchMenu();
|
void showSearchMenu();
|
||||||
void resetSearchClearTimer();
|
void resetSearchClearTimer();
|
||||||
|
@ -24,8 +24,7 @@
|
|||||||
#include "core/Resources.h"
|
#include "core/Resources.h"
|
||||||
#include "core/Tools.h"
|
#include "core/Tools.h"
|
||||||
#include "gui/Font.h"
|
#include "gui/Font.h"
|
||||||
|
#include "gui/styles/StateColorPalette.h"
|
||||||
const QColor URLEdit::ErrorColor = QColor(255, 125, 125);
|
|
||||||
|
|
||||||
URLEdit::URLEdit(QWidget* parent)
|
URLEdit::URLEdit(QWidget* parent)
|
||||||
: QLineEdit(parent)
|
: QLineEdit(parent)
|
||||||
@ -50,7 +49,9 @@ void URLEdit::updateStylesheet()
|
|||||||
const QString stylesheetTemplate("QLineEdit { background: %1; }");
|
const QString stylesheetTemplate("QLineEdit { background: %1; }");
|
||||||
|
|
||||||
if (!Tools::checkUrlValid(text())) {
|
if (!Tools::checkUrlValid(text())) {
|
||||||
setStyleSheet(stylesheetTemplate.arg(ErrorColor.name()));
|
StateColorPalette statePalette;
|
||||||
|
QColor color = statePalette.color(StateColorPalette::ColorRole::Error);
|
||||||
|
setStyleSheet(stylesheetTemplate.arg(color.name()));
|
||||||
m_errorAction->setVisible(true);
|
m_errorAction->setVisible(true);
|
||||||
} else {
|
} else {
|
||||||
m_errorAction->setVisible(false);
|
m_errorAction->setVisible(false);
|
||||||
|
@ -28,8 +28,6 @@ class URLEdit : public QLineEdit
|
|||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static const QColor ErrorColor;
|
|
||||||
|
|
||||||
explicit URLEdit(QWidget* parent = nullptr);
|
explicit URLEdit(QWidget* parent = nullptr);
|
||||||
void enableVerifyMode();
|
void enableVerifyMode();
|
||||||
|
|
||||||
|
@ -220,7 +220,8 @@ void EditEntryWidget::setupIcon()
|
|||||||
|
|
||||||
void EditEntryWidget::openAutotypeHelp()
|
void EditEntryWidget::openAutotypeHelp()
|
||||||
{
|
{
|
||||||
QDesktopServices::openUrl(QUrl("https://github.com/keepassxreboot/keepassxc/wiki/Autotype-Custom-Sequence"));
|
QDesktopServices::openUrl(
|
||||||
|
QUrl("https://keepassxc.org/docs/KeePassXC_UserGuide.html#_configure_auto_type_sequences"));
|
||||||
}
|
}
|
||||||
|
|
||||||
void EditEntryWidget::setupAutoType()
|
void EditEntryWidget::setupAutoType()
|
||||||
|
@ -40,9 +40,7 @@ EntryAttachmentsWidget::EntryAttachmentsWidget(QWidget* parent)
|
|||||||
m_ui->attachmentsView->setSelectionBehavior(QAbstractItemView::SelectRows);
|
m_ui->attachmentsView->setSelectionBehavior(QAbstractItemView::SelectRows);
|
||||||
m_ui->attachmentsView->setSelectionMode(QAbstractItemView::ExtendedSelection);
|
m_ui->attachmentsView->setSelectionMode(QAbstractItemView::ExtendedSelection);
|
||||||
|
|
||||||
m_ui->actionsWidget->setVisible(m_buttonsVisible);
|
connect(this, SIGNAL(buttonsVisibleChanged(bool)), this, SLOT(updateButtonsVisible()));
|
||||||
connect(this, SIGNAL(buttonsVisibleChanged(bool)), m_ui->actionsWidget, SLOT(setVisible(bool)));
|
|
||||||
|
|
||||||
connect(this, SIGNAL(readOnlyChanged(bool)), SLOT(updateButtonsEnabled()));
|
connect(this, SIGNAL(readOnlyChanged(bool)), SLOT(updateButtonsEnabled()));
|
||||||
connect(m_attachmentsModel, SIGNAL(modelReset()), SLOT(updateButtonsEnabled()));
|
connect(m_attachmentsModel, SIGNAL(modelReset()), SLOT(updateButtonsEnabled()));
|
||||||
|
|
||||||
@ -58,6 +56,7 @@ EntryAttachmentsWidget::EntryAttachmentsWidget(QWidget* parent)
|
|||||||
connect(m_ui->addAttachmentButton, SIGNAL(clicked()), SLOT(insertAttachments()));
|
connect(m_ui->addAttachmentButton, SIGNAL(clicked()), SLOT(insertAttachments()));
|
||||||
connect(m_ui->removeAttachmentButton, SIGNAL(clicked()), SLOT(removeSelectedAttachments()));
|
connect(m_ui->removeAttachmentButton, SIGNAL(clicked()), SLOT(removeSelectedAttachments()));
|
||||||
|
|
||||||
|
updateButtonsVisible();
|
||||||
updateButtonsEnabled();
|
updateButtonsEnabled();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -295,6 +294,12 @@ void EntryAttachmentsWidget::updateButtonsEnabled()
|
|||||||
m_ui->openAttachmentButton->setEnabled(hasSelection);
|
m_ui->openAttachmentButton->setEnabled(hasSelection);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void EntryAttachmentsWidget::updateButtonsVisible()
|
||||||
|
{
|
||||||
|
m_ui->addAttachmentButton->setVisible(m_buttonsVisible && !m_readOnly);
|
||||||
|
m_ui->removeAttachmentButton->setVisible(m_buttonsVisible && !m_readOnly);
|
||||||
|
}
|
||||||
|
|
||||||
bool EntryAttachmentsWidget::insertAttachments(const QStringList& filenames, QString& errorMessage)
|
bool EntryAttachmentsWidget::insertAttachments(const QStringList& filenames, QString& errorMessage)
|
||||||
{
|
{
|
||||||
Q_ASSERT(!isReadOnly());
|
Q_ASSERT(!isReadOnly());
|
||||||
|
@ -48,6 +48,7 @@ private slots:
|
|||||||
void saveSelectedAttachments();
|
void saveSelectedAttachments();
|
||||||
void openAttachment(const QModelIndex& index);
|
void openAttachment(const QModelIndex& index);
|
||||||
void openSelectedAttachments();
|
void openSelectedAttachments();
|
||||||
|
void updateButtonsVisible();
|
||||||
void updateButtonsEnabled();
|
void updateButtonsEnabled();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -21,6 +21,7 @@
|
|||||||
#include "core/Entry.h"
|
#include "core/Entry.h"
|
||||||
#include "core/Resources.h"
|
#include "core/Resources.h"
|
||||||
#include "core/Tools.h"
|
#include "core/Tools.h"
|
||||||
|
#include "gui/styles/StateColorPalette.h"
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
|
||||||
@ -70,7 +71,8 @@ QVariant EntryURLModel::data(const QModelIndex& index, int role) const
|
|||||||
const auto urlValid = Tools::checkUrlValid(value);
|
const auto urlValid = Tools::checkUrlValid(value);
|
||||||
|
|
||||||
if (role == Qt::BackgroundRole && !urlValid) {
|
if (role == Qt::BackgroundRole && !urlValid) {
|
||||||
return QColor(255, 125, 125);
|
StateColorPalette statePalette;
|
||||||
|
return statePalette.color(StateColorPalette::ColorRole::Error);
|
||||||
} else if (role == Qt::DecorationRole && !urlValid) {
|
} else if (role == Qt::DecorationRole && !urlValid) {
|
||||||
return m_errorIcon;
|
return m_errorIcon;
|
||||||
} else if (role == Qt::DisplayRole || role == Qt::EditRole) {
|
} else if (role == Qt::DisplayRole || role == Qt::EditRole) {
|
||||||
|
@ -105,3 +105,9 @@ bool WinUtils::isCapslockEnabled()
|
|||||||
{
|
{
|
||||||
return GetKeyState(VK_CAPITAL) == 1;
|
return GetKeyState(VK_CAPITAL) == 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool WinUtils::isHighContrastMode() const
|
||||||
|
{
|
||||||
|
QSettings settings(R"(HKEY_CURRENT_USER\Control Panel\Accessibility\HighContrast)", QSettings::NativeFormat);
|
||||||
|
return (settings.value("Flags").toInt() & 1u) != 0;
|
||||||
|
}
|
||||||
|
@ -36,6 +36,7 @@ public:
|
|||||||
bool isLaunchAtStartupEnabled() const override;
|
bool isLaunchAtStartupEnabled() const override;
|
||||||
void setLaunchAtStartup(bool enable) override;
|
void setLaunchAtStartup(bool enable) override;
|
||||||
bool isCapslockEnabled() override;
|
bool isCapslockEnabled() override;
|
||||||
|
bool isHighContrastMode() const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
explicit WinUtils(QObject* parent = nullptr);
|
explicit WinUtils(QObject* parent = nullptr);
|
||||||
|
@ -3,6 +3,16 @@ QPushButton:default {
|
|||||||
color: palette(highlighted-text);
|
color: palette(highlighted-text);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Note: default button hover is defined in the respective theme style */
|
||||||
|
QPushButton:!default:hover {
|
||||||
|
background: palette(mid);
|
||||||
|
}
|
||||||
|
|
||||||
|
QPushButton:checked {
|
||||||
|
background: palette(highlight);
|
||||||
|
color: palette(highlighted-text);
|
||||||
|
}
|
||||||
|
|
||||||
QSpinBox {
|
QSpinBox {
|
||||||
min-width: 90px;
|
min-width: 90px;
|
||||||
}
|
}
|
||||||
@ -46,3 +56,11 @@ QToolTip {
|
|||||||
border: none;
|
border: none;
|
||||||
padding: 3px;
|
padding: 3px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DatabaseWidget #SearchBanner, DatabaseWidget #KeeShareBanner {
|
||||||
|
font-weight: bold;
|
||||||
|
background-color: palette(highlight);
|
||||||
|
color: palette(highlighted-text);
|
||||||
|
border: 1px solid palette(dark);
|
||||||
|
padding: 2px;
|
||||||
|
}
|
||||||
|
15
src/gui/styles/base/classicstyle.qss
Normal file
15
src/gui/styles/base/classicstyle.qss
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
DatabaseOpenWidget #loginFrame {
|
||||||
|
border: 2px groove palette(mid);
|
||||||
|
background: palette(light);
|
||||||
|
}
|
||||||
|
|
||||||
|
QToolTip {
|
||||||
|
padding: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
DatabaseWidget #SearchBanner, DatabaseWidget #KeeShareBanner {
|
||||||
|
font-weight: bold;
|
||||||
|
background-color: rgb(94, 161, 14);
|
||||||
|
border: 1px solid rgb(190, 190, 190);
|
||||||
|
padding: 2px;
|
||||||
|
}
|
@ -8,6 +8,16 @@ EntryPreviewWidget QLineEdit:disabled, EntryPreviewWidget QTextEdit:disabled {
|
|||||||
background-color: #424242;
|
background-color: #424242;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QPushButton:!default:hover {
|
||||||
|
/* Using slightly darker shade from palette(button) */
|
||||||
|
background: #252528;
|
||||||
|
}
|
||||||
|
|
||||||
|
QPushButton:default:hover, QPushButton:checked:hover {
|
||||||
|
/* Using slightly lighter shade from palette(highlight) */
|
||||||
|
background: #2E582E;
|
||||||
|
}
|
||||||
|
|
||||||
QToolTip {
|
QToolTip {
|
||||||
color: #BFBFBF;
|
color: #BFBFBF;
|
||||||
background-color: #2D532D;
|
background-color: #2D532D;
|
||||||
|
@ -8,11 +8,16 @@ EntryPreviewWidget QLineEdit:disabled, EntryPreviewWidget QTextEdit:disabled {
|
|||||||
background-color: #EDEDED;
|
background-color: #EDEDED;
|
||||||
}
|
}
|
||||||
|
|
||||||
QGroupBox::title {
|
QPushButton:default:hover, QPushButton:checked:hover {
|
||||||
color: #4B7B19;
|
/* Using slightly lighter shade from palette(highlight) */
|
||||||
|
background: #568821;
|
||||||
}
|
}
|
||||||
|
|
||||||
QToolTip {
|
QToolTip {
|
||||||
color: #F9F9F9;
|
color: #F9F9F9;
|
||||||
background-color: #4D7F1A;
|
background-color: #4D7F1A;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QGroupBox::title {
|
||||||
|
color: #4B7B19;
|
||||||
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
<!DOCTYPE RCC>
|
<!DOCTYPE RCC>
|
||||||
<RCC version="1.0">
|
<RCC version="1.0">
|
||||||
<qresource prefix="/styles">
|
<qresource prefix="/styles">
|
||||||
|
<file>base/classicstyle.qss</file>
|
||||||
<file>base/basestyle.qss</file>
|
<file>base/basestyle.qss</file>
|
||||||
<file>dark/darkstyle.qss</file>
|
<file>dark/darkstyle.qss</file>
|
||||||
<file>light/lightstyle.qss</file>
|
<file>light/lightstyle.qss</file>
|
||||||
|
@ -52,7 +52,7 @@ int main(int argc, char** argv)
|
|||||||
QApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
|
QApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
|
||||||
QGuiApplication::setAttribute(Qt::AA_UseHighDpiPixmaps);
|
QGuiApplication::setAttribute(Qt::AA_UseHighDpiPixmaps);
|
||||||
#endif
|
#endif
|
||||||
#if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0)
|
#if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0) && defined(Q_OS_WIN)
|
||||||
QGuiApplication::setHighDpiScaleFactorRoundingPolicy(Qt::HighDpiScaleFactorRoundingPolicy::PassThrough);
|
QGuiApplication::setHighDpiScaleFactorRoundingPolicy(Qt::HighDpiScaleFactorRoundingPolicy::PassThrough);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -37,7 +37,6 @@ void TestConfig::testUpgrade()
|
|||||||
Config::createConfigFromFile(tempFile.fileName());
|
Config::createConfigFromFile(tempFile.fileName());
|
||||||
|
|
||||||
// value of new setting should be opposite the value of deprecated setting
|
// value of new setting should be opposite the value of deprecated setting
|
||||||
QVERIFY(config()->get(Config::TrackNonDataChanges).toBool());
|
|
||||||
QVERIFY(!config()->get(Config::Security_PasswordsRepeatVisible).toBool());
|
QVERIFY(!config()->get(Config::Security_PasswordsRepeatVisible).toBool());
|
||||||
QVERIFY(!config()->get(Config::Security_PasswordsHidden).toBool());
|
QVERIFY(!config()->get(Config::Security_PasswordsHidden).toBool());
|
||||||
QVERIFY(config()->get(Config::Security_PasswordEmptyPlaceholder).toBool());
|
QVERIFY(config()->get(Config::Security_PasswordEmptyPlaceholder).toBool());
|
||||||
|
@ -904,10 +904,10 @@ void TestGui::testSearch()
|
|||||||
QTest::keyClick(searchTextEdit, Qt::Key_Down);
|
QTest::keyClick(searchTextEdit, Qt::Key_Down);
|
||||||
QTRY_VERIFY(entryView->hasFocus());
|
QTRY_VERIFY(entryView->hasFocus());
|
||||||
auto* searchedEntry = entryView->currentEntry();
|
auto* searchedEntry = entryView->currentEntry();
|
||||||
// Restore focus using F1 key and search text selection
|
// Restore focus using F3 key and search text selection
|
||||||
QTest::keyClick(m_mainWindow.data(), Qt::Key_F1);
|
QTest::keyClick(m_mainWindow.data(), Qt::Key_F3);
|
||||||
QTRY_COMPARE(searchTextEdit->selectedText(), QString("someTHING"));
|
|
||||||
QTRY_VERIFY(searchTextEdit->hasFocus());
|
QTRY_VERIFY(searchTextEdit->hasFocus());
|
||||||
|
QTRY_COMPARE(searchTextEdit->selectedText(), QString("someTHING"));
|
||||||
|
|
||||||
searchedEntry->setPassword("password");
|
searchedEntry->setPassword("password");
|
||||||
QClipboard* clipboard = QApplication::clipboard();
|
QClipboard* clipboard = QApplication::clipboard();
|
||||||
|
Loading…
Reference in New Issue
Block a user