Release 2.6.2

Added

- Add option to keep window always on top to view menu [#5542]
- Move show/hide usernames and passwords to view menu [#5542]
- Add command line options and environment variables for changing the config locations [#5452]
- Include TOTP settings in CSV import/export and add support for ISO datetimes [#5346]

Changed

- Mask sensitive information in command execution confirmation prompt [#5542]
- SSH Agent: Avoid shortcut conflict on macOS by changing "Add key" to Ctrl+H on all platforms [#5484]

Fixed

- Prevent data loss with drag and drop between databases [#5536]
- Fix crash when toggling Capslock rapidly [#5545]
- Don't mark URL references as invalid URL [#5380]
- Reset entry preview after search [#5483]
- Set Qt::Dialog flag on database open dialog [#5356]
- Fix sorting of database report columns [#5426]
- Fix IfDevice matching logic [#5344]
- Fix layout issues and a stray scrollbar appearing on top of the entry edit screen [#5424]
- Fix tabbing into the notes field [#5424]
- Fix password generator ignoring settings on load [#5340]
- Restore natural entry sort order on application load [#5438]
- Fix paperclip and TOTP columns not saving state [#5327]
- Enforce fixed password font in entry preview [#5454]
- Add scrollbar when new database wizard exceeds screen size [#5560]
- Do not mark database as modified when viewing Auto-Type associations [#5542]
- CLI: Fix two heap-use-after-free crashes [#5368,#5470]
- Browser: Fix key exchange not working with multiple simultaneous users on Windows [#5485]
- Browser: Fix entry retrieval when "only best matching" is enabled [#5316]
- Browser: Ignore recycle bin on KeePassHTTP migration [#5481]
- KeeShare: Fix import crash [#5542]
- macOS: Fix toolbar theming and breadcrumb display issues [#5482]
- macOS: Fix file dialog randomly closing [#5479]
- macOS: Fix being unable to select OPVault files for import [#5341]
This commit is contained in:
Janek Bevendorff 2020-10-21 22:47:02 +02:00
commit e9b9582817
No known key found for this signature in database
GPG Key ID: 2FDEB0D40BCA5E11
115 changed files with 4660 additions and 4696 deletions

View File

@ -1,5 +1,45 @@
# Changelog
## 2.6.2 (2020-10-21)
### Added
- Add option to keep window always on top to view menu [#5542]
- Move show/hide usernames and passwords to view menu [#5542]
- Add command line options and environment variables for changing the config locations [#5452]
- Include TOTP settings in CSV import/export and add support for ISO datetimes [#5346]
### Changed
- Mask sensitive information in command execution confirmation prompt [#5542]
- SSH Agent: Avoid shortcut conflict on macOS by changing "Add key" to Ctrl+H on all platforms [#5484]
### Fixed
- Prevent data loss with drag and drop between databases [#5536]
- Fix crash when toggling Capslock rapidly [#5545]
- Don't mark URL references as invalid URL [#5380]
- Reset entry preview after search [#5483]
- Set Qt::Dialog flag on database open dialog [#5356]
- Fix sorting of database report columns [#5426]
- Fix IfDevice matching logic [#5344]
- Fix layout issues and a stray scrollbar appearing on top of the entry edit screen [#5424]
- Fix tabbing into the notes field [#5424]
- Fix password generator ignoring settings on load [#5340]
- Restore natural entry sort order on application load [#5438]
- Fix paperclip and TOTP columns not saving state [#5327]
- Enforce fixed password font in entry preview [#5454]
- Add scrollbar when new database wizard exceeds screen size [#5560]
- Do not mark database as modified when viewing Auto-Type associations [#5542]
- CLI: Fix two heap-use-after-free crashes [#5368,#5470]
- Browser: Fix key exchange not working with multiple simultaneous users on Windows [#5485]
- Browser: Fix entry retrieval when "only best matching" is enabled [#5316]
- Browser: Ignore recycle bin on KeePassHTTP migration [#5481]
- KeeShare: Fix import crash [#5542]
- macOS: Fix toolbar theming and breadcrumb display issues [#5482]
- macOS: Fix file dialog randomly closing [#5479]
- macOS: Fix being unable to select OPVault files for import [#5341]
## 2.6.1 (2020-08-19)
### Added

View File

@ -101,7 +101,7 @@ endif()
set(KEEPASSXC_VERSION_MAJOR "2")
set(KEEPASSXC_VERSION_MINOR "6")
set(KEEPASSXC_VERSION_PATCH "1")
set(KEEPASSXC_VERSION_PATCH "2")
set(KEEPASSXC_VERSION "${KEEPASSXC_VERSION_MAJOR}.${KEEPASSXC_VERSION_MINOR}.${KEEPASSXC_VERSION_PATCH}")
set(OVERRIDE_VERSION "" CACHE STRING "Override the KeePassXC Version for Snapshot builds")

View File

@ -140,7 +140,9 @@ Files: share/icons/badges/2_Expired.svg
Copyright: 2020 KeePassXC Team <team@keepassxc.org>
License: MIT
Files: share/icons/application/scalable/actions/document-close.svg
Files: share/icons/application/scalable/actions/chevron-double-down.svg
share/icons/application/scalable/actions/chevron-double-right.svg
share/icons/application/scalable/actions/document-close.svg
share/icons/application/scalable/actions/document-edit.svg
share/icons/application/scalable/actions/document-export.svg
share/icons/application/scalable/actions/document-import.svg

View File

@ -455,6 +455,8 @@ p{font-family: "Noto Sans",sans-serif !important}
blockquote{color:var(--quotecolor) !important}
.quoteblock{color:var(--textcolor)}
code{color:var(--textcoloralt);background-color: var(--sidebarbackground) !important}
pre,pre>code{line-height:1.25; color:var(--textcoloralt);}
.keyseq{color:var(--textcoloralt);}
/* Table styles */
@ -531,4 +533,4 @@ a:hover {color: var(--linkhovercolor);}
}
.subtitle {
font-size: 1.5em;
}
}

View File

@ -51,6 +51,8 @@ image::linux_store.png[]
The Snap and Flatpak options are sandboxed applications (more secure). The Native option is installed with the operating system files. Read more about the limitations of these options here: https://keepassxc.org/docs/#faq-appsnap-yubikey[KeePassXC Snap FAQ]
NOTE: KeePassXC stores a configuration file in `~/.cache` to remember window position, recent files, and other local settings. If you mount this folder to a tmpdisk you will lose settings after reboot.
=== macOS
To install the KeePassXC app on macOS, double click on the downloaded DMG file and use the click and drag option as shown:

View File

@ -3,6 +3,8 @@ include::.sharedheader[]
:imagesdir: ../images
// tag::content[]
NOTE: On macOS please substitute `Ctrl` with `Cmd` (aka `⌘`).
[grid=rows, frame=none, width=75%]
|===
|Action | Keyboard Shortcut
@ -31,6 +33,7 @@ include::.sharedheader[]
|Hide Window | Ctrl + Shift + M
|Select Next Database Tab | Ctrl + Tab ; Ctrl + PageDn
|Select Previous Database Tab | Ctrl + Shift + Tab ; Ctrl + PageUp
|Select the nth database | Ctrl + n, where n is the number of the database tab
|Toggle Passwords Hidden | Ctrl + Shift + C
|Toggle Usernames Hidden | Ctrl + Shift + B
|Focus Groups (edit if focused) | F1

View File

@ -48,4 +48,41 @@ image::compact_mode_comparison.png[]
=== Keyboard Shortcuts
include::KeyboardShortcuts.adoc[tag=content, leveloffset=+1]
// tag::advanced[]
=== Command-Line Options
You can use the following command line options to tailor the application to your preferences:
----
Usage: keepassxc.exe [options] [filename(s)]
KeePassXC - cross-platform password manager
Options:
-?, -h, --help Displays help on commandline options.
--help-all Displays help including Qt specific options.
-v, --version Displays version information.
--config <config> path to a custom config file
--localconfig <localconfig> path to a custom local config file
--keyfile <keyfile> key file of the database
--pw-stdin read password of the database from stdin
--debug-info Displays debugging information.
Arguments:
filename(s) filenames of the password databases to open (*.kdbx)
----
Additionally, the following environment variables may be useful when running the application:
[grid=rows, frame=none, width=75%]
|===
|Env Var | Description
|KPXC_CONFIG | Override default path to roaming configuration file
|KPXC_CONFIG_LOCAL | Override default path to local configuration file
|SSH_AUTH_SOCKET | Path of the unix file socket that the agent uses for communication with other processes (SSH Agent)
|QT_SCALE_FACTOR [numeric] | Defines a global scale factor for the whole application, including point-sized fonts.
|QT_SCREEN_SCALE_FACTORS [list] | Specifies scale factors for each screen. See https://doc.qt.io/qt-5/highdpi.html#high-dpi-support-in-qt
|QT_SCALE_FACTOR_ROUNDING_POLICY | Control device pixel ratio rounding to the nearest integer. See https://doc.qt.io/qt-5/highdpi.html#high-dpi-support-in-qt
|===
// end::advanced[]
// end::content[]

View File

@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="24" height="24" viewBox="0 0 24 24"><path d="M16.59,5.59L18,7L12,13L6,7L7.41,5.59L12,10.17L16.59,5.59M16.59,11.59L18,13L12,19L6,13L7.41,11.59L12,16.17L16.59,11.59Z" /></svg>

After

Width:  |  Height:  |  Size: 413 B

View File

@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="24" height="24" viewBox="0 0 24 24"><path d="M5.59,7.41L7,6L13,12L7,18L5.59,16.59L10.17,12L5.59,7.41M11.59,7.41L13,6L19,12L13,18L11.59,16.59L16.17,12L11.59,7.41Z" /></svg>

After

Width:  |  Height:  |  Size: 411 B

View File

@ -8,6 +8,8 @@
<file>application/scalable/actions/application-exit.svg</file>
<file>application/scalable/actions/auto-type.svg</file>
<file>application/scalable/actions/bugreport.svg</file>
<file>application/scalable/actions/chevron-double-down.svg</file>
<file>application/scalable/actions/chevron-double-right.svg</file>
<file>application/scalable/actions/chronometer.svg</file>
<file>application/scalable/actions/clipboard-text.svg</file>
<file>application/scalable/actions/configure.svg</file>

View File

@ -50,6 +50,41 @@
</screenshots>
<releases>
<release version="2.6.2" date="2020-10-21">
<description>
<ul>
<li>Add option to keep window always on top to view menu [#5542]</li>
<li>Move show/hide usernames and passwords to view menu [#5542]</li>
<li>Add command line options and environment variables for changing the config locations [#5452]</li>
<li>Include TOTP settings in CSV import/export and add support for ISO datetimes [#5346]</li>
<li>Mask sensitive information in command execution confirmation prompt [#5542]</li>
<li>SSH Agent: Avoid shortcut conflict on macOS by changing "Add key" to Ctrl+H on all platforms [#5484]</li>
<li>Prevent data loss with drag and drop between databases [#5536]</li>
<li>Fix crash when toggling Capslock rapidly [#5545]</li>
<li>Don't mark URL references as invalid URL [#5380]</li>
<li>Reset entry preview after search [#5483]</li>
<li>Set Qt::Dialog flag on database open dialog [#5356]</li>
<li>Fix sorting of database report columns [#5426]</li>
<li>Fix IfDevice matching logic [#5344]</li>
<li>Fix layout issues and a stray scrollbar appearing on top of the entry edit screen [#5424]</li>
<li>Fix tabbing into the notes field [#5424]</li>
<li>Fix password generator ignoring settings on load [#5340]</li>
<li>Restore natural entry sort order on application load [#5438]</li>
<li>Fix paperclip and TOTP columns not saving state [#5327]</li>
<li>Enforce fixed password font in entry preview [#5454]</li>
<li>Add scrollbar when new database wizard exceeds screen size [#5560]</li>
<li>Do not mark database as modified when viewing Auto-Type associations [#5542]</li>
<li>CLI: Fix two heap-use-after-free crashes [#5368,#5470]</li>
<li>Browser: Fix key exchange not working with multiple simultaneous users on Windows [#5485]</li>
<li>Browser: Fix entry retrieval when "only best matching" is enabled [#5316]</li>
<li>Browser: Ignore recycle bin on KeePassHTTP migration [#5481]</li>
<li>KeeShare: Fix import crash [#5542]</li>
<li>macOS: Fix toolbar theming and breadcrumb display issues [#5482]</li>
<li>macOS: Fix file dialog randomly closing [#5479]</li>
<li>macOS: Fix being unable to select OPVault files for import [#5341]</li>
</ul>
</description>
</release>
<release version="2.6.1" date="2020-08-19">
<description>
<ul>

View File

@ -135,6 +135,10 @@
<source>Colorful</source>
<translation type="unfinished"/>
</message>
<message>
<source>You must restart the application to set the new language. Would you like to restart now?</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>ApplicationSettingsWidgetGeneral</name>
@ -166,10 +170,6 @@
<source>Automatically save after every change</source>
<translation>الحفظ تلقائيًا بعد كل تعديل</translation>
</message>
<message>
<source>Automatically save on exit</source>
<translation>الحفظ تلقائيًا عند الإغلاق</translation>
</message>
<message>
<source>Automatically reload the database when modified externally</source>
<translation>إعادة تحميل قاعدة البيانات تلقائيا عند تعديلها خارجيًا</translation>
@ -305,10 +305,6 @@
<source>Automatically launch KeePassXC at system startup</source>
<translation type="unfinished"/>
</message>
<message>
<source>Mark database as modified for non-data changes (e.g., expanding groups)</source>
<translation type="unfinished"/>
</message>
<message>
<source>Safely save database files (disable if experiencing problems with Dropbox, etc.)</source>
<translation type="unfinished"/>
@ -345,6 +341,18 @@
<source>Auto-Type start delay:</source>
<translation type="unfinished"/>
</message>
<message>
<source>Automatically save when locking database</source>
<translation type="unfinished"/>
</message>
<message>
<source>Automatically save non-data changes when locking database</source>
<translation type="unfinished"/>
</message>
<message>
<source>Tray icon type</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>ApplicationSettingsWidgetSecurity</name>
@ -4797,6 +4805,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>
<translation type="unfinished"/>
</message>
<message>
<source>Perform Auto-Type Sequence</source>
<translation type="unfinished"/>
</message>
<message>
<source>{USERNAME}</source>
<translation type="unfinished"/>
</message>
<message>
<source>{USERNAME}{ENTER}</source>
<translation type="unfinished"/>
</message>
<message>
<source>{PASSWORD}</source>
<translation type="unfinished"/>
</message>
<message>
<source>{PASSWORD}{ENTER}</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>ManageDatabase</name>
@ -5280,10 +5308,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<comment>Password quality</comment>
<translation>ممتازة</translation>
</message>
<message>
<source>ExtendedASCII</source>
<translation type="unfinished"/>
</message>
<message>
<source>Switch to advanced mode</source>
<translation type="unfinished"/>
@ -5292,58 +5316,22 @@ Expect some bugs and minor issues, this version is not meant for production use.
<source>Advanced</source>
<translation>متقدم</translation>
</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>
<source>Braces</source>
<translation type="unfinished"/>
</message>
<message>
<source>{[(</source>
<translation type="unfinished"/>
</message>
<message>
<source>Punctuation</source>
<translation type="unfinished"/>
</message>
<message>
<source>.,:;</source>
<translation type="unfinished"/>
</message>
<message>
<source>Quotes</source>
<translation type="unfinished"/>
</message>
<message>
<source>&quot; &apos;</source>
<translation type="unfinished"/>
</message>
<message>
<source>&lt;*+!?=</source>
<translation type="unfinished"/>
</message>
<message>
<source>\_|-/</source>
<translation type="unfinished"/>
</message>
<message>
<source>Logograms</source>
<translation type="unfinished"/>
</message>
<message>
<source>#$%&amp;&amp;@^`~</source>
<translation type="unfinished"/>
</message>
<message>
<source>Character set to exclude from generated password</source>
<translation type="unfinished"/>
@ -5464,6 +5452,10 @@ Expect some bugs and minor issues, this version is not meant for production use.
<source>Regenerate password (%1)</source>
<translation type="unfinished"/>
</message>
<message>
<source>Special Characters</source>
<translation>محارف خاصة</translation>
</message>
</context>
<context>
<name>QApplication</name>

View File

@ -135,6 +135,10 @@
<source>Colorful</source>
<translation>Цветни</translation>
</message>
<message>
<source>You must restart the application to set the new language. Would you like to restart now?</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>ApplicationSettingsWidgetGeneral</name>
@ -166,10 +170,6 @@
<source>Automatically save after every change</source>
<translation>Автоматично записване след всяка промяна</translation>
</message>
<message>
<source>Automatically save on exit</source>
<translation>Автоматично записване при изход</translation>
</message>
<message>
<source>Automatically reload the database when modified externally</source>
<translation>Автоматично презареждане на базата данни при външно модифициране</translation>
@ -304,10 +304,6 @@
<source>Automatically launch KeePassXC at system startup</source>
<translation>Автоматично стартиране на KeePassXC при стартиране на системата</translation>
</message>
<message>
<source>Mark database as modified for non-data changes (e.g., expanding groups)</source>
<translation>Маркиране на база данни като модифицирана за промени, които не са върху данните (напр. разширяване на групи)</translation>
</message>
<message>
<source>Safely save database files (disable if experiencing problems with Dropbox, etc.)</source>
<translation>Безопасно записване на файловете с бази данни (деактивирайте, ако имате проблеми с Dropbox и т.н.)</translation>
@ -344,6 +340,18 @@
<source>Auto-Type start delay:</source>
<translation>Забавяне на Auto-Type включването:</translation>
</message>
<message>
<source>Automatically save when locking database</source>
<translation type="unfinished"/>
</message>
<message>
<source>Automatically save non-data changes when locking database</source>
<translation type="unfinished"/>
</message>
<message>
<source>Tray icon type</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>ApplicationSettingsWidgetSecurity</name>
@ -4841,6 +4849,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>
<translation>Трябва да рестартирате приложението, за да приложите тази настройка. Желаете ли да рестартирате сега?</translation>
</message>
<message>
<source>Perform Auto-Type Sequence</source>
<translation type="unfinished"/>
</message>
<message>
<source>{USERNAME}</source>
<translation type="unfinished"/>
</message>
<message>
<source>{USERNAME}{ENTER}</source>
<translation type="unfinished"/>
</message>
<message>
<source>{PASSWORD}</source>
<translation type="unfinished"/>
</message>
<message>
<source>{PASSWORD}{ENTER}</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>ManageDatabase</name>
@ -5325,10 +5353,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<comment>Password quality</comment>
<translation>Отлично</translation>
</message>
<message>
<source>ExtendedASCII</source>
<translation>Разширен ASCII</translation>
</message>
<message>
<source>Switch to advanced mode</source>
<translation>Превключване към разширен режим</translation>
@ -5337,58 +5361,22 @@ Expect some bugs and minor issues, this version is not meant for production use.
<source>Advanced</source>
<translation>Допълнителни</translation>
</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>
<source>Braces</source>
<translation>Скоби</translation>
</message>
<message>
<source>{[(</source>
<translation>{[(</translation>
</message>
<message>
<source>Punctuation</source>
<translation>Пунктуация</translation>
</message>
<message>
<source>.,:;</source>
<translation>.,:;</translation>
</message>
<message>
<source>Quotes</source>
<translation>Кавички</translation>
</message>
<message>
<source>&quot; &apos;</source>
<translation>&quot; &apos;</translation>
</message>
<message>
<source>&lt;*+!?=</source>
<translation>&lt;*+!?=</translation>
</message>
<message>
<source>\_|-/</source>
<translation>\_|-/</translation>
</message>
<message>
<source>Logograms</source>
<translation>Логограми</translation>
</message>
<message>
<source>#$%&amp;&amp;@^`~</source>
<translation>#$%&amp;&amp;@^`~</translation>
</message>
<message>
<source>Character set to exclude from generated password</source>
<translation>Набор от знаци за изключване от генерираната парола</translation>
@ -5509,6 +5497,10 @@ Expect some bugs and minor issues, this version is not meant for production use.
<source>Regenerate password (%1)</source>
<translation>Регенериране на паролата (%1)</translation>
</message>
<message>
<source>Special Characters</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>QApplication</name>

View File

@ -66,7 +66,7 @@
</message>
<message>
<source>(empty)</source>
<translation type="unfinished"/>
<translation>(buit)</translation>
</message>
<message>
<source>No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override.</source>
@ -133,6 +133,10 @@
</message>
<message>
<source>Colorful</source>
<translation>Colors</translation>
</message>
<message>
<source>You must restart the application to set the new language. Would you like to restart now?</source>
<translation type="unfinished"/>
</message>
</context>
@ -166,10 +170,6 @@
<source>Automatically save after every change</source>
<translation>Desa després de cada canvi de forma automàtica</translation>
</message>
<message>
<source>Automatically save on exit</source>
<translation>Desa en tancar de forma automàtica</translation>
</message>
<message>
<source>Automatically reload the database when modified externally</source>
<translation>Torna a carregar automàticament la base de dades quan sigui modificada de forma externa</translation>
@ -304,10 +304,6 @@
<source>Automatically launch KeePassXC at system startup</source>
<translation>Executar KeePassXC a l&apos;inici del sistema</translation>
</message>
<message>
<source>Mark database as modified for non-data changes (e.g., expanding groups)</source>
<translation type="unfinished"/>
</message>
<message>
<source>Safely save database files (disable if experiencing problems with Dropbox, etc.)</source>
<translation type="unfinished"/>
@ -344,6 +340,18 @@
<source>Auto-Type start delay:</source>
<translation type="unfinished"/>
</message>
<message>
<source>Automatically save when locking database</source>
<translation type="unfinished"/>
</message>
<message>
<source>Automatically save non-data changes when locking database</source>
<translation type="unfinished"/>
</message>
<message>
<source>Tray icon type</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>ApplicationSettingsWidgetSecurity</name>
@ -474,7 +482,7 @@
</message>
<message>
<source>Permission Required</source>
<translation type="unfinished"/>
<translation>Permís necessari</translation>
</message>
<message>
<source>KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC.</source>
@ -530,7 +538,7 @@
<name>AutoTypePlatformMac</name>
<message>
<source>Permission Required</source>
<translation type="unfinished"/>
<translation>Permís necessari</translation>
</message>
<message>
<source>KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC.</source>
@ -1087,7 +1095,7 @@ chrome-laptop.</source>
</message>
<message>
<source>First line has field names</source>
<translation type="unfinished"/>
<translation>La primera línia els noms dels camps</translation>
</message>
<message>
<source>Not Present</source>
@ -2129,7 +2137,7 @@ Voleu deshabilitar el desat segur i provar-ho un altre cop?</translation>
</message>
<message>
<source>Save database backup</source>
<translation type="unfinished"/>
<translation>Desa una còpia de seguretat de la base de dades</translation>
</message>
<message>
<source>Could not find database file: %1</source>
@ -3253,7 +3261,7 @@ Are you sure to add this file?</source>
</message>
<message>
<source>Group name</source>
<translation type="unfinished"/>
<translation>Nom del grup</translation>
</message>
<message>
<source>Entry title</source>
@ -3878,7 +3886,7 @@ Es tracta d&apos;una migració unidireccional. No obrir la base de dades importa
</message>
<message>
<source>Multiple group elements</source>
<translation type="unfinished"/>
<translation>Múltiples elements de grup</translation>
</message>
<message>
<source>Null group uuid</source>
@ -4373,7 +4381,7 @@ Generate a new key file in the database security settings.</source>
</message>
<message>
<source>&amp;About</source>
<translation>&amp;Sobre</translation>
<translation>&amp;Quant a</translation>
</message>
<message>
<source>Database settings</source>
@ -4548,7 +4556,7 @@ Podeu esperar alguns errors i incidències menors. Aquesta versió no està pens
</message>
<message>
<source>&amp;User Guide</source>
<translation>Guia d&apos;&amp;Usuari</translation>
<translation>Guia d&apos;&amp;usuari</translation>
</message>
<message>
<source>&amp;Keyboard Shortcuts</source>
@ -4556,15 +4564,15 @@ Podeu esperar alguns errors i incidències menors. Aquesta versió no està pens
</message>
<message>
<source>&amp;Recent Databases</source>
<translation type="unfinished"/>
<translation>Bases de dades &amp;recents</translation>
</message>
<message>
<source>&amp;Entries</source>
<translation type="unfinished"/>
<translation>&amp;Entrades</translation>
</message>
<message>
<source>Copy Att&amp;ribute</source>
<translation type="unfinished"/>
<translation>Copia l&apos;&amp;atribut</translation>
</message>
<message>
<source>TOTP</source>
@ -4572,11 +4580,11 @@ Podeu esperar alguns errors i incidències menors. Aquesta versió no està pens
</message>
<message>
<source>View</source>
<translation type="unfinished"/>
<translation>Visualització</translation>
</message>
<message>
<source>Theme</source>
<translation type="unfinished"/>
<translation>Tema</translation>
</message>
<message>
<source>&amp;Check for Updates</source>
@ -4584,7 +4592,7 @@ Podeu esperar alguns errors i incidències menors. Aquesta versió no està pens
</message>
<message>
<source>&amp;Open Database</source>
<translation type="unfinished"/>
<translation>&amp;Obre la base de dades</translation>
</message>
<message>
<source>&amp;Save Database</source>
@ -4592,11 +4600,11 @@ Podeu esperar alguns errors i incidències menors. Aquesta versió no està pens
</message>
<message>
<source>&amp;Close Database</source>
<translation type="unfinished"/>
<translation>Tanca la base de dades</translation>
</message>
<message>
<source>&amp;New Database</source>
<translation type="unfinished"/>
<translation>Base de dades &amp;nova</translation>
</message>
<message>
<source>&amp;Merge From Database</source>
@ -4604,31 +4612,31 @@ Podeu esperar alguns errors i incidències menors. Aquesta versió no està pens
</message>
<message>
<source>&amp;New Entry</source>
<translation type="unfinished"/>
<translation>&amp;Nova entrada...</translation>
</message>
<message>
<source>&amp;Edit Entry</source>
<translation type="unfinished"/>
<translation>&amp;Edita l&apos;entrada</translation>
</message>
<message>
<source>&amp;Delete Entry</source>
<translation type="unfinished"/>
<translation>Elimina l&apos;entrada</translation>
</message>
<message>
<source>&amp;New Group</source>
<translation type="unfinished"/>
<translation>&amp;Nou grup</translation>
</message>
<message>
<source>&amp;Edit Group</source>
<translation type="unfinished"/>
<translation>&amp;Edita el grup</translation>
</message>
<message>
<source>&amp;Delete Group</source>
<translation type="unfinished"/>
<translation>Elimina el grup</translation>
</message>
<message>
<source>Download All &amp;Favicons</source>
<translation type="unfinished"/>
<translation>Baixa tots els &amp;Favicons</translation>
</message>
<message>
<source>Sa&amp;ve Database As</source>
@ -4636,7 +4644,7 @@ Podeu esperar alguns errors i incidències menors. Aquesta versió no està pens
</message>
<message>
<source>Database &amp;Security</source>
<translation type="unfinished"/>
<translation>&amp;Seguretat de la base de dades...</translation>
</message>
<message>
<source>Database &amp;Reports...</source>
@ -4648,11 +4656,11 @@ Podeu esperar alguns errors i incidències menors. Aquesta versió no està pens
</message>
<message>
<source>&amp;Database Settings</source>
<translation type="unfinished"/>
<translation>Configuració de la base de dades</translation>
</message>
<message>
<source>&amp;Clone Entry</source>
<translation type="unfinished"/>
<translation>&amp;Clona l&apos;entrada</translation>
</message>
<message>
<source>Move u&amp;p</source>
@ -4672,19 +4680,19 @@ Podeu esperar alguns errors i incidències menors. Aquesta versió no està pens
</message>
<message>
<source>Copy &amp;Username</source>
<translation type="unfinished"/>
<translation>Copia el nom d&apos;&amp;usuari</translation>
</message>
<message>
<source>Copy &amp;Password</source>
<translation type="unfinished"/>
<translation>Copia la contrasenya</translation>
</message>
<message>
<source>Download &amp;Favicon</source>
<translation type="unfinished"/>
<translation>Descarrega el &amp;Favicon</translation>
</message>
<message>
<source>&amp;Lock Databases</source>
<translation type="unfinished"/>
<translation>Bloqueja les bases de dades</translation>
</message>
<message>
<source>&amp;CSV File</source>
@ -4720,7 +4728,7 @@ Podeu esperar alguns errors i incidències menors. Aquesta versió no està pens
</message>
<message>
<source>Report a &amp;Bug</source>
<translation type="unfinished"/>
<translation>Informeu d&apos;un error</translation>
</message>
<message>
<source>Open Getting Started Guide</source>
@ -4728,7 +4736,7 @@ Podeu esperar alguns errors i incidències menors. Aquesta versió no està pens
</message>
<message>
<source>&amp;Online Help</source>
<translation type="unfinished"/>
<translation>Ajuda &amp;online</translation>
</message>
<message>
<source>Go to online documentation</source>
@ -4740,7 +4748,7 @@ Podeu esperar alguns errors i incidències menors. Aquesta versió no està pens
</message>
<message>
<source>Save Database Backup...</source>
<translation type="unfinished"/>
<translation>Desa una còpia de la base de dades...</translation>
</message>
<message>
<source>Add key to SSH Agent</source>
@ -4752,7 +4760,7 @@ Podeu esperar alguns errors i incidències menors. Aquesta versió no està pens
</message>
<message>
<source>Compact Mode</source>
<translation type="unfinished"/>
<translation>Mode compacte</translation>
</message>
<message>
<source>Automatic</source>
@ -4790,6 +4798,26 @@ Podeu esperar alguns errors i incidències menors. Aquesta versió no està pens
<source>You must restart the application to apply this setting. Would you like to restart now?</source>
<translation type="unfinished"/>
</message>
<message>
<source>Perform Auto-Type Sequence</source>
<translation type="unfinished"/>
</message>
<message>
<source>{USERNAME}</source>
<translation type="unfinished"/>
</message>
<message>
<source>{USERNAME}{ENTER}</source>
<translation type="unfinished"/>
</message>
<message>
<source>{PASSWORD}</source>
<translation type="unfinished"/>
</message>
<message>
<source>{PASSWORD}{ENTER}</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>ManageDatabase</name>
@ -4799,7 +4827,7 @@ Podeu esperar alguns errors i incidències menors. Aquesta versió no està pens
</message>
<message>
<source>Edit database settings</source>
<translation type="unfinished"/>
<translation>Edita la configuració de la base de dades</translation>
</message>
<message>
<source>Unlock database</source>
@ -5273,10 +5301,6 @@ Podeu esperar alguns errors i incidències menors. Aquesta versió no està pens
<comment>Password quality</comment>
<translation>Excel·lent</translation>
</message>
<message>
<source>ExtendedASCII</source>
<translation type="unfinished"/>
</message>
<message>
<source>Switch to advanced mode</source>
<translation>Canvia al mode avançat</translation>
@ -5285,58 +5309,22 @@ Podeu esperar alguns errors i incidències menors. Aquesta versió no està pens
<source>Advanced</source>
<translation>Avançat</translation>
</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>
<source>Braces</source>
<translation type="unfinished"/>
</message>
<message>
<source>{[(</source>
<translation type="unfinished"/>
</message>
<message>
<source>Punctuation</source>
<translation type="unfinished"/>
</message>
<message>
<source>.,:;</source>
<translation type="unfinished"/>
</message>
<message>
<source>Quotes</source>
<translation type="unfinished"/>
</message>
<message>
<source>&quot; &apos;</source>
<translation type="unfinished"/>
</message>
<message>
<source>&lt;*+!?=</source>
<translation type="unfinished"/>
</message>
<message>
<source>\_|-/</source>
<translation type="unfinished"/>
</message>
<message>
<source>Logograms</source>
<translation type="unfinished"/>
</message>
<message>
<source>#$%&amp;&amp;@^`~</source>
<translation type="unfinished"/>
</message>
<message>
<source>Character set to exclude from generated password</source>
<translation type="unfinished"/>
@ -5457,6 +5445,10 @@ Podeu esperar alguns errors i incidències menors. Aquesta versió no està pens
<source>Regenerate password (%1)</source>
<translation type="unfinished"/>
</message>
<message>
<source>Special Characters</source>
<translation>Caràcters especials</translation>
</message>
</context>
<context>
<name>QApplication</name>
@ -5498,7 +5490,7 @@ Podeu esperar alguns errors i incidències menors. Aquesta versió no està pens
</message>
<message>
<source>Password is about to expire</source>
<translation type="unfinished"/>
<translation>La contrasenya està a punt de caducar</translation>
</message>
<message>
<source>Password expires in %1 days</source>
@ -6202,7 +6194,7 @@ Available commands:
</message>
<message>
<source>Cannot create new group</source>
<translation type="unfinished"/>
<translation>No es pot crear un grup nou</translation>
</message>
<message>
<source>Deactivate password key for the database.</source>
@ -6290,7 +6282,7 @@ Nucli: %3 %4</translation>
</message>
<message>
<source>Adds a new group to a database.</source>
<translation type="unfinished"/>
<translation>Afegeix un grup nou a una base de dades.</translation>
</message>
<message>
<source>Path of the group to add.</source>
@ -6330,7 +6322,7 @@ Nucli: %3 %4</translation>
</message>
<message>
<source>Close the currently opened database.</source>
<translation type="unfinished"/>
<translation>Tanca la base de dades oberta.</translation>
</message>
<message>
<source>Display this help.</source>
@ -6422,7 +6414,7 @@ Nucli: %3 %4</translation>
</message>
<message>
<source>Moves an entry to a new group.</source>
<translation type="unfinished"/>
<translation>Mou una entrada a un grup nou.</translation>
</message>
<message>
<source>Path of the entry to move.</source>
@ -6805,7 +6797,7 @@ Nucli: %3 %4</translation>
</message>
<message>
<source>Edit Entry...</source>
<translation type="unfinished"/>
<translation>Edita l&apos;entrada...</translation>
</message>
<message>
<source>Exclude from reports</source>
@ -6888,7 +6880,7 @@ Nucli: %3 %4</translation>
</message>
<message>
<source>Edit Entry...</source>
<translation type="unfinished"/>
<translation>Edita l&apos;entrada...</translation>
</message>
<message>
<source>Exclude from reports</source>
@ -7726,7 +7718,7 @@ Example: JBSWY3DPEHPK3PXP</source>
</message>
<message>
<source>Open a recent database</source>
<translation type="unfinished"/>
<translation>Obre una base de dades recent</translation>
</message>
</context>
<context>

View File

@ -74,7 +74,7 @@
</message>
<message>
<source>SSH Agent connection is working!</source>
<translation>Spojení s SSH Agentem funguje!</translation>
<translation>Spojení s SSH agentem funguje!</translation>
</message>
</context>
<context>
@ -135,6 +135,10 @@
<source>Colorful</source>
<translation>Barevná</translation>
</message>
<message>
<source>You must restart the application to set the new language. Would you like to restart now?</source>
<translation>Aby se změna jazyka projevila, je třeba aplikaci restartovat. Chcete to provést nyní?</translation>
</message>
</context>
<context>
<name>ApplicationSettingsWidgetGeneral</name>
@ -166,10 +170,6 @@
<source>Automatically save after every change</source>
<translation>Po každé změně hned automaticky uložit</translation>
</message>
<message>
<source>Automatically save on exit</source>
<translation>Před ukončením aplikace automaticky uložit případné změny</translation>
</message>
<message>
<source>Automatically reload the database when modified externally</source>
<translation>V případě úpravy zvenčí, automaticky znovu načíst databázi</translation>
@ -200,11 +200,11 @@
</message>
<message>
<source>Use entry title to match windows for global Auto-Type</source>
<translation>Použít titulek položky pro hledání shody s okny pro všeobecné automatické vyplňování</translation>
<translation>Použít titulek položky pro hledání shody s okny pro globální automatické vyplňování</translation>
</message>
<message>
<source>Use entry URL to match windows for global Auto-Type</source>
<translation>Použít URL adresu položky pro hledání shody s okny pro všeobecné automatické vyplňování</translation>
<translation>Použít URL adresu položky pro hledání shody s okny pro globální automatické vyplňování</translation>
</message>
<message>
<source>Always ask before performing Auto-Type</source>
@ -233,7 +233,7 @@
</message>
<message>
<source>Check for updates at application startup once per week</source>
<translation>Zjišťovat dostupnost aktualizací aplikace jednou týdně</translation>
<translation>Zjišťovat dostupnost aktualizací aplikace (při spouštění) jednou týdně</translation>
</message>
<message>
<source>Include beta releases when checking for updates</source>
@ -290,11 +290,11 @@
</message>
<message>
<source>Global auto-type shortcut</source>
<translation>Globální zkratka automatického vyplňování</translation>
<translation>Zkratka pro globální automatické vyplňování</translation>
</message>
<message>
<source>Auto-type character typing delay milliseconds</source>
<translation>Prodleva mezi zadáváním jednotlivých znaků při automatickém vyplňování</translation>
<translation>Prodleva (ms) mezi zadáváním jednotlivých znaků při automatickém vyplňování</translation>
</message>
<message>
<source>Auto-type start delay milliseconds</source>
@ -304,13 +304,9 @@
<source>Automatically launch KeePassXC at system startup</source>
<translation>Automaticky spustit KeePassXC po startu systému</translation>
</message>
<message>
<source>Mark database as modified for non-data changes (e.g., expanding groups)</source>
<translation>Označit databázi jako upravenou při změnách, nepostihujících údaje (např. rozkliknutí skupin)</translation>
</message>
<message>
<source>Safely save database files (disable if experiencing problems with Dropbox, etc.)</source>
<translation type="unfinished"/>
<translation>Bezpečné ukládání souborů databáze (vypněte pokud narážíte na problémy s Dropobox, atp.)</translation>
</message>
<message>
<source>User Interface</source>
@ -326,11 +322,11 @@
</message>
<message>
<source>Tray icon type:</source>
<translation>Typ ikony:</translation>
<translation>Typ ikony v oznamovací oblasti:</translation>
</message>
<message>
<source>Reset settings to default</source>
<translation>Vráti nastavení do výchozích hodnot</translation>
<translation>Vrátit nastavení do výchozích hodnot</translation>
</message>
<message>
<source>Auto-Type typing delay:</source>
@ -344,6 +340,18 @@
<source>Auto-Type start delay:</source>
<translation>Prodleva zahájení automatického vyplňování:</translation>
</message>
<message>
<source>Automatically save when locking database</source>
<translation>Při uzamykání databáze automaticky uložit</translation>
</message>
<message>
<source>Automatically save non-data changes when locking database</source>
<translation>Při uzamykání databáze automaticky uložit změny i ne v datech</translation>
</message>
<message>
<source>Tray icon type</source>
<translation>Typ ikony v oznamovací oblasti</translation>
</message>
</context>
<context>
<name>ApplicationSettingsWidgetSecurity</name>
@ -378,11 +386,11 @@
</message>
<message>
<source>Lock databases when session is locked or lid is closed</source>
<translation>Zamknout databáze když je zamčeno sezení uživatele v operačním systému nebo je zavřeno víko notebooku</translation>
<translation>Zamknout databáze při zamčení relace uživatele v operačním systému nebo je zavření víka notebooku</translation>
</message>
<message>
<source>Forget TouchID when session is locked or lid is closed</source>
<translation>Zapomenout TouchID při uzamčení relace nebo při zavření víka s displejem</translation>
<translation>Zapomenout TouchID při zamčení relace uživatele v operačním systému nebo při zavření víka notebooku</translation>
</message>
<message>
<source>Lock databases after minimizing the window</source>
@ -390,7 +398,7 @@
</message>
<message>
<source>Re-lock previously locked database after performing Auto-Type</source>
<translation>Po provedení automatického vyplnění opět zamknout dříve uzamčenou databázi.</translation>
<translation>Po provedení automatického vyplnění databázi opět zamknout, pokud předtím byla uzamčena.</translation>
</message>
<message>
<source>Hide passwords in the entry preview panel</source>
@ -788,7 +796,7 @@ chrome-laptop.</translation>
</message>
<message>
<source>Returns expired credentials. String [expired] is added to the title.</source>
<translation>Vracet přihlašovací údaje, kterým skončila platnost. Do názvu je přidán řetězec [expired].</translation>
<translation>Vrátí přihlašovací údaje, kterým skončila platnost. Do názvu je přidán řetězec [expired].</translation>
</message>
<message>
<source>Allow returning expired credentials</source>
@ -858,12 +866,12 @@ chrome-laptop.</translation>
</message>
<message>
<source>Use a custom proxy location if you installed a proxy manually.</source>
<translation>Pokud jste zprostředkovávající aplikaci nainstalovali ručně, použijte její uživatelem určené umístění.</translation>
<translation>Pokud jste zprostředkovávající aplikaci nainstalovali ručně, použijte její uživatelsky určené umístění.</translation>
</message>
<message>
<source>Use a custom proxy location:</source>
<comment>Meant is the proxy for KeePassXC-Browser</comment>
<translation>Použít uživatelem určené umístění zprostředkovávající aplikace</translation>
<translation>Použít uživatelsky určené umístění zprostředkovávající aplikace</translation>
</message>
<message>
<source>Custom proxy location field</source>
@ -896,7 +904,7 @@ chrome-laptop.</translation>
</message>
<message>
<source>Custom browser location field</source>
<translation type="unfinished"/>
<translation>Kolonka uživatelsky určené umístění prohlížeče</translation>
</message>
<message>
<source>~/.custom/config/Mozilla/native-messaging-hosts/</source>
@ -904,15 +912,15 @@ chrome-laptop.</translation>
</message>
<message>
<source>Browse for custom browser path</source>
<translation type="unfinished"/>
<translation>Nalistovat uživatelsky určený popis umístění prohlížeče</translation>
</message>
<message>
<source>Custom extension ID:</source>
<translation>ID vlastního rozšíření:</translation>
<translation>Identif. uživatelsky určeného rozšíření:</translation>
</message>
<message>
<source>Custom extension ID</source>
<translation>ID vlastního rozšíření</translation>
<translation>Identif. uživatelsky určeného rozšíření</translation>
</message>
<message>
<source>Due to Snap sandboxing, you must run a script to enable browser integration.&lt;br /&gt;You can obtain this script from %1</source>
@ -928,7 +936,7 @@ chrome-laptop.</translation>
</message>
<message>
<source>&lt;b&gt;Error:&lt;/b&gt; The custom proxy location cannot be found!&lt;br/&gt;Browser integration WILL NOT WORK without the proxy application.</source>
<translation>&lt;b&gt;Chyba:&lt;/b&gt; Uživatelem určené umístění proxy nenalezeno! &lt;br/&gt;Napojení na prohlížeč NEBUDE bez proxy FUNGOVAT.</translation>
<translation>&lt;b&gt;Chyba:&lt;/b&gt; Uživatelsky určené umístění proxy nenalezeno! &lt;br/&gt;Napojení na prohlížeč NEBUDE bez proxy FUNGOVAT.</translation>
</message>
<message>
<source>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</source>
@ -948,7 +956,7 @@ chrome-laptop.</translation>
</message>
<message>
<source>Select native messaging host folder location</source>
<translation type="unfinished"/>
<translation>Vyberte umístění složky hostitele nativních zpráv</translation>
</message>
</context>
<context>
@ -1006,7 +1014,7 @@ chrome-laptop.</translation>
</message>
<message>
<source>Consider &apos;\&apos; an escape character</source>
<translation>Považovat \ za únikový znak</translation>
<translation>Považovat \ za speciálního významu zbavující (escape) znak</translation>
</message>
<message>
<source>Preview</source>
@ -1040,7 +1048,7 @@ chrome-laptop.</translation>
</message>
<message>
<source>Text qualification</source>
<translation>Zařazetextu</translation>
<translation>Zařazovátextu</translation>
</message>
<message>
<source>Field separation</source>
@ -1111,7 +1119,7 @@ chrome-laptop.</translation>
<name>CsvParserModel</name>
<message numerus="yes">
<source>%n column(s)</source>
<translation><numerusform>%n sloupec</numerusform><numerusform>%n sloupce</numerusform><numerusform>%n sloupců</numerusform><numerusform>%n sloupců</numerusform></translation>
<translation><numerusform>%n sloupec</numerusform><numerusform>%n sloupce</numerusform><numerusform>%n sloupců</numerusform><numerusform>%n sloupce</numerusform></translation>
</message>
<message>
<source>%1, %2, %3</source>
@ -1147,7 +1155,7 @@ chrome-laptop.</translation>
</message>
<message>
<source>Key not transformed. This is a bug, please report it to the developers!</source>
<translation>Klíč nebyl přeměněn. Toto je chyba, nahlaste to vývojářům.</translation>
<translation>Klíč nebyl přeměněn. Toto je chyba prosím nahlaste to vývojářům.</translation>
</message>
<message>
<source>%1
@ -1321,7 +1329,7 @@ Abyste tomu, aby se tato chyba objevovala, je třeba přejít do „Nastavení d
</message>
<message>
<source>Cannot use database file as key file</source>
<translation>Soubor s databází není možné použít pro účely souboru s klíčem</translation>
<translation>Soubor s databází není možné použít pro účely souboru s klíčem (mění se)</translation>
</message>
<message>
<source>You cannot use your database file as a key file.
@ -1335,7 +1343,7 @@ Pokud nemáte žádný soubor, který by se zaručeně neměnil (a byl tedy vhod
</message>
<message>
<source>Key file to unlock the database</source>
<translation>Soubor s klíčem k odemčení databáze.</translation>
<translation>Soubor s klíčem k odemknutí databáze</translation>
</message>
<message>
<source>Please touch the button on your YubiKey!</source>
@ -1508,7 +1516,7 @@ Toto je nezbytné pro zachování kompatibility se zásuvným modulem pro prohl
</message>
<message>
<source>Refresh database root group ID</source>
<translation>Obnovit ID kořenové skupiny databáze</translation>
<translation>Znovu vytvořit identifikátor kořenové skupiny databáze</translation>
</message>
<message>
<source>Created</source>
@ -1516,12 +1524,13 @@ Toto je nezbytné pro zachování kompatibility se zásuvným modulem pro prohl
</message>
<message>
<source>Refresh database ID</source>
<translation>Obnovit ID databáze</translation>
<translation>Znovu vytvořit identifikátor databáze</translation>
</message>
<message>
<source>Do you really want refresh the database ID?
This is only necessary if your database is a copy of another and the browser extension cannot connect.</source>
<translation type="unfinished"/>
<translation>Opravdu chcete znovu vytvořit identifikátor databáze?
Toto je nutné pouze v případě, že vaše databáze je kopií jiné a nefunguje propojení s rozšířením prohlížeče.</translation>
</message>
</context>
<context>
@ -1843,7 +1852,7 @@ Tuto akci nelze vzít zpět.</translation>
</message>
<message>
<source>Last Signer</source>
<translation>Nedávno podepsal</translation>
<translation>Naposledy podepsal</translation>
</message>
<message>
<source>Certificates</source>
@ -1919,7 +1928,7 @@ Tuto akci nelze vzít zpět.</translation>
<message>
<source>The created database has no key or KDF, refusing to save it.
This is definitely a bug, please report it to the developers.</source>
<translation>Vytvořená databáze nemá klíč nebo KDF, její uložení je domítnuto.
<translation>Vytvořená databáze nemá klíč nebo funkci pro jeho odvození. Její uložení proto odmítnuto.
Toto je nepochybně chyba, nahlaste ji prosím vývojářům.</translation>
</message>
<message>
@ -1986,11 +1995,11 @@ Toto je nepochybně chyba, nahlaste ji prosím vývojářům.</translation>
</message>
<message>
<source>Do you really want to move entry &quot;%1&quot; to the recycle bin?</source>
<translation>Opravdu přesunout záznam &quot;%1&quot; do Koše?</translation>
<translation>Opravdu přesunout záznam %1 do Koše?</translation>
</message>
<message numerus="yes">
<source>Do you really want to move %n entry(s) to the recycle bin?</source>
<translation><numerusform>Opravdu přesunout %n záznam do Koše? ()</numerusform><numerusform>Opravdu přesunout %n záznamy do Koše? ()</numerusform><numerusform>Opravdu přesunout %n záznamů do Koše?</numerusform><numerusform>Opravdu přesunout %n záznamů do Koše?</numerusform></translation>
<translation><numerusform>Opravdu přesunout %n záznam do Koše?</numerusform><numerusform>Opravdu přesunout %n záznamy do Koše?</numerusform><numerusform>Opravdu přesunout %n záznamů do Koše?</numerusform><numerusform>Opravdu přesunout %n záznamy do Koše?</numerusform></translation>
</message>
<message>
<source>Execute command?</source>
@ -2010,7 +2019,7 @@ Toto je nepochybně chyba, nahlaste ji prosím vývojářům.</translation>
</message>
<message>
<source>No current database.</source>
<translation>Aktuálně žáddatabáze.</translation>
<translation>Žádná nedávdatabáze.</translation>
</message>
<message>
<source>No source database, nothing to do.</source>
@ -2040,7 +2049,7 @@ Toto je nepochybně chyba, nahlaste ji prosím vývojářům.</translation>
<source>The database file has changed and you have unsaved changes.
Do you want to merge your changes?</source>
<translation>Databázový soubor byl změněn a máte neuložené změny.
Přejete si je sloučit?</translation>
Přejete si je zahrnout?</translation>
</message>
<message>
<source>Empty recycle bin?</source>
@ -2048,19 +2057,19 @@ Přejete si je sloučit?</translation>
</message>
<message>
<source>Are you sure you want to permanently delete everything from your recycle bin?</source>
<translation>Opravdu chcete natrvalo smazat všechno z Koše?</translation>
<translation>Opravdu chcete nevratně smazat všechno z Koše?</translation>
</message>
<message numerus="yes">
<source>Do you really want to delete %n entry(s) for good?</source>
<translation><numerusform>Opravdu chcete %n položku nadobro smazat?</numerusform><numerusform>Opravdu chcete %n položky nadobro smazat?</numerusform><numerusform>Opravdu chcete %n položek nadobro smazat?</numerusform><numerusform>Opravdu chcete %n položky nadobro smazat?</numerusform></translation>
<translation><numerusform>Opravdu chcete %n položku nevratně smazat?</numerusform><numerusform>Opravdu chcete %n položky nevratně smazat?</numerusform><numerusform>Opravdu chcete %n položek nevratně smazat?</numerusform><numerusform>Opravdu chcete %n položky nevratně smazat?</numerusform></translation>
</message>
<message numerus="yes">
<source>Delete entry(s)?</source>
<translation><numerusform>Smazat položku</numerusform><numerusform>Smazat položky</numerusform><numerusform>Smazat položek</numerusform><numerusform>Smazat položky</numerusform></translation>
<translation><numerusform>Smazat položku?</numerusform><numerusform>Smazat položky?</numerusform><numerusform>Smazat položky?</numerusform><numerusform>Smazat položky?</numerusform></translation>
</message>
<message numerus="yes">
<source>Move entry(s) to recycle bin?</source>
<translation><numerusform>Přesunout položku do Koše?</numerusform><numerusform>Přesunout položky do Koše?</numerusform><numerusform>Přesunout položek do Koše?</numerusform><numerusform>Přesunout položky do Koše?</numerusform></translation>
<translation><numerusform>Přesunout položku do Koše?</numerusform><numerusform>Přesunout položky do Koše?</numerusform><numerusform>Přesunout položky do Koše?</numerusform><numerusform>Přesunout položky do Koše?</numerusform></translation>
</message>
<message>
<source>Lock Database?</source>
@ -2231,11 +2240,11 @@ Vypnout bezpečné ukládání a zkusit to znovu?</translation>
</message>
<message numerus="yes">
<source>%n week(s)</source>
<translation><numerusform>%n týden</numerusform><numerusform>%n týdny</numerusform><numerusform>%n týdnů</numerusform><numerusform>%n týdnů</numerusform></translation>
<translation><numerusform>%n týden</numerusform><numerusform>%n týdny</numerusform><numerusform>%n týdnů</numerusform><numerusform>%n týdny</numerusform></translation>
</message>
<message numerus="yes">
<source>%n month(s)</source>
<translation><numerusform>%n měsíc</numerusform><numerusform>%n měsíce</numerusform><numerusform>%n měsíců</numerusform><numerusform>%n měsíců</numerusform></translation>
<translation><numerusform>%n měsíc</numerusform><numerusform>%n měsíce</numerusform><numerusform>%n měsíců</numerusform><numerusform>%n měsíce</numerusform></translation>
</message>
<message>
<source>Entry updated successfully.</source>
@ -2362,7 +2371,7 @@ Vypnout bezpečné ukládání a zkusit to znovu?</translation>
</message>
<message>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn&apos;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.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"/>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Pokud zaškrtnuto, položka se neobjeví v hlášeních jako Kontrola zdraví a HIBP, i když neodpovídá požadavků mna kvalitu (např. nahodilost hesla nebo opětovné použití). Toto můžete zaškrtnout pokud heslo není pod vaší kontrolu (např. je vyžadováno, že se musí jednat o PIN kód dlouhý čtyři číslice), aby tím nebyl výkaz zaneřáděný.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<source>Exclude from database reports</source>
@ -2476,7 +2485,7 @@ Vypnout bezpečné ukládání a zkusit to znovu?</translation>
</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>
<translation type="unfinished"/>
<translation>Toto nastavení posílat do prohlížeče pouze pro dialogy HTTP Auth. Pokud je zapnuto, běžné přihlašovací formuláře nezobrazí tuto položku pro výběr.</translation>
</message>
<message>
<source>Use this entry only with HTTP Basic Auth</source>
@ -2760,11 +2769,11 @@ Vypnout bezpečné ukládání a zkusit to znovu?</translation>
</message>
<message>
<source>KeeShare signed container</source>
<translation>KeeShare sdílený kontejner</translation>
<translation>Podepsaný KeeShare kontejner</translation>
</message>
<message>
<source>Select import source</source>
<translation>Vybrat zdroj importu</translation>
<translation>Vybrat zdroj pro import</translation>
</message>
<message>
<source>Select export target</source>
@ -2882,7 +2891,7 @@ Podporovaná rozšíření jsou: %1.</translation>
</message>
<message>
<source>Use default Auto-Type sequence of parent group</source>
<translation>Převzít výchozí pořadí automatického vyplňování nadřazené skupiny</translation>
<translation>Převzít výchozí pořadí automatického vyplňování od nadřazené skupiny</translation>
</message>
<message>
<source>Auto-Type:</source>
@ -2909,11 +2918,11 @@ Podporovaná rozšíření jsou: %1.</translation>
<name>EditWidgetIcons</name>
<message>
<source>Add custom icon</source>
<translation>Přidat svou vlastní ikonu</translation>
<translation>Přidat uživatelsky určenou ikonu</translation>
</message>
<message>
<source>Delete custom icon</source>
<translation>Smazat svou vlastní ikonu</translation>
<translation>Smazat uživatelsky určenou ikonu</translation>
</message>
<message>
<source>Download favicon</source>
@ -2961,7 +2970,7 @@ Podporovaná rozšíření jsou: %1.</translation>
</message>
<message>
<source>You can enable the DuckDuckGo website icon service under Tools -&gt; Settings -&gt; Security</source>
<translation>Používání služby DuckDuckGo pro stahování ikon webových stránek je možné zapnout v Nástroje -&gt; Nastavení -&gt; zabezpečení</translation>
<translation>Používání služby DuckDuckGo pro stahování ikon webových stránek je možné zapnout v Nástroje Nastavení Zabezpečení</translation>
</message>
<message>
<source>Download favicon for URL</source>
@ -2993,7 +3002,7 @@ Podporovaná rozšíření jsou: %1.</translation>
</message>
<message>
<source>Use custom icon</source>
<translation>Použít svou vlastní ikonu</translation>
<translation>Použít uživatelsky určenou ikonu</translation>
</message>
<message>
<source>Apply icon to...</source>
@ -3020,7 +3029,7 @@ Podporovaná rozšíření jsou: %1.</translation>
</message>
<message>
<source>Uuid:</source>
<translation>Univerzálně jedinečný identifikátor:</translation>
<translation>Univerzálně neopakující se identifikátor:</translation>
</message>
<message>
<source>Plugin Data</source>
@ -3119,7 +3128,7 @@ Dotčený zásuvný modul to může rozbít.</translation>
</message>
<message numerus="yes">
<source>Are you sure you want to remove %n attachment(s)?</source>
<translation><numerusform>Opravdu chcete odebrat %n přílohu?</numerusform><numerusform>Opravdu chcete odebrat %n přílohy?</numerusform><numerusform>Opravdu chcete odebrat %n příloh?</numerusform><numerusform>Opravdu chcete odebrat %n příloh?</numerusform></translation>
<translation><numerusform>Opravdu chcete odebrat %n přílohu?</numerusform><numerusform>Opravdu chcete odebrat %n přílohy?</numerusform><numerusform>Opravdu chcete odebrat %n příloh?</numerusform><numerusform>Opravdu chcete odebrat %n přílohy?</numerusform></translation>
</message>
<message>
<source>Save attachments</source>
@ -3216,7 +3225,7 @@ Opravdu chcete tento soubor přidat?</translation>
<name>EntryHistoryModel</name>
<message>
<source>Last modified</source>
<translation>Okamžik nejnovější změny</translation>
<translation>Naposledy změněno</translation>
</message>
<message>
<source>Title</source>
@ -3450,7 +3459,7 @@ Opravdu chcete tento soubor přidat?</translation>
</message>
<message>
<source>Hide Passwords</source>
<translation>Skrýt hesl</translation>
<translation>Skrýt hesla</translation>
</message>
<message>
<source>Fit to window</source>
@ -3472,7 +3481,7 @@ Opravdu chcete tento soubor přidat?</translation>
<message>
<source>Has TOTP</source>
<comment>Entry TOTP icon toggle</comment>
<translation> TOTP</translation>
<translation> TOTP heslo</translation>
</message>
</context>
<context>
@ -3551,7 +3560,7 @@ Opravdu chcete tento soubor přidat?</translation>
</message>
<message>
<source>Another secret service is running (%1).&lt;br/&gt;Please stop/remove it before re-enabling the Secret Service Integration.</source>
<translation type="unfinished"/>
<translation>Je spuštěná jiná služba pro tajemství (%1).&lt;br/&gt;Prosím zastavte/odeberte ji a poté znovu zapněte napojení na službu pro tajemství.</translation>
</message>
</context>
<context>
@ -3972,7 +3981,7 @@ Jedná se o jednosměrný převod. Databázi, vzniklou z importu, nepůjde otev
</message>
<message>
<source>Duplicate custom attribute found</source>
<translation>Zjištěn duplicitní uživatelem určený atribut</translation>
<translation>Zjištěn duplicitní uživatelsky určený atribut</translation>
</message>
<message>
<source>Entry string key or value missing</source>
@ -4393,7 +4402,9 @@ Opravdu chcete tento soubor použít?</translation>
unsupported in the future.
Generate a new key file in the database security settings.</source>
<translation type="unfinished"/>
<translation>Používáte starý formát souboru s klíčem, který v budoucnu nemusí být podporován.
V nastavení zabezpečení databáze vytvořte nový klíč.</translation>
</message>
</context>
<context>
@ -4688,7 +4699,7 @@ Očekávejte chyby a drobné problémy, tato verze není určena pro produkční
</message>
<message>
<source>Database &amp;Reports...</source>
<translation type="unfinished"/>
<translation>Hlášení o &amp;databázi</translation>
</message>
<message>
<source>Statistics, health check, etc.</source>
@ -4728,7 +4739,7 @@ Očekávejte chyby a drobné problémy, tato verze není určena pro produkční
</message>
<message>
<source>Download &amp;Favicon</source>
<translation type="unfinished"/>
<translation>Stáhnout si ikonu &amp;webu</translation>
</message>
<message>
<source>&amp;Lock Databases</source>
@ -4838,6 +4849,26 @@ Očekávejte chyby a drobné problémy, tato verze není určena pro produkční
<source>You must restart the application to apply this setting. Would you like to restart now?</source>
<translation>Chcete-li toto nastavení použít, musíte restartovat aplikaci. Chcete nyní restartovat?</translation>
</message>
<message>
<source>Perform Auto-Type Sequence</source>
<translation>Provést posloupnost automatického vyplnění</translation>
</message>
<message>
<source>{USERNAME}</source>
<translation>{UŽIVATELSKÉ_JMÉNO}</translation>
</message>
<message>
<source>{USERNAME}{ENTER}</source>
<translation>{UŽIVATELSKÉ_JMÉNO}{ENTER}</translation>
</message>
<message>
<source>{PASSWORD}</source>
<translation>{HESLO}</translation>
</message>
<message>
<source>{PASSWORD}{ENTER}</source>
<translation>{HESLO}{ENTER}</translation>
</message>
</context>
<context>
<name>ManageDatabase</name>
@ -5322,10 +5353,6 @@ Očekávejte chyby a drobné problémy, tato verze není určena pro produkční
<comment>Password quality</comment>
<translation>Výborná</translation>
</message>
<message>
<source>ExtendedASCII</source>
<translation>RozšířenéASCII</translation>
</message>
<message>
<source>Switch to advanced mode</source>
<translation>Přepnout do pokročilého režimu</translation>
@ -5334,58 +5361,22 @@ Očekávejte chyby a drobné problémy, tato verze není určena pro produkční
<source>Advanced</source>
<translation>Pokročilé</translation>
</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>
<source>Braces</source>
<translation>Složené závorky</translation>
</message>
<message>
<source>{[(</source>
<translation>{[(</translation>
</message>
<message>
<source>Punctuation</source>
<translation>Interpunkční znaménka</translation>
</message>
<message>
<source>.,:;</source>
<translation>.,:;</translation>
</message>
<message>
<source>Quotes</source>
<translation>Uvozovky</translation>
</message>
<message>
<source>&quot; &apos;</source>
<translation>&quot; &apos;</translation>
</message>
<message>
<source>&lt;*+!?=</source>
<translation>&lt;*+!?=</translation>
</message>
<message>
<source>\_|-/</source>
<translation>\_|-/</translation>
</message>
<message>
<source>Logograms</source>
<translation>Logogramy</translation>
</message>
<message>
<source>#$%&amp;&amp;@^`~</source>
<translation>#$%&amp;&amp;@^`~</translation>
</message>
<message>
<source>Character set to exclude from generated password</source>
<translation>Sada znaků kterou z vytvářených hesel vynechat</translation>
@ -5506,6 +5497,10 @@ Očekávejte chyby a drobné problémy, tato verze není určena pro produkční
<source>Regenerate password (%1)</source>
<translation>Znovu vytvořit heslo (%1)</translation>
</message>
<message>
<source>Special Characters</source>
<translation>Zvláštní znaky</translation>
</message>
</context>
<context>
<name>QApplication</name>
@ -6558,7 +6553,7 @@ Jádro systému: %3 %4</translation>
</message>
<message numerus="yes">
<source>Password for &apos;%1&apos; has been leaked %2 time(s)!</source>
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
<translation><numerusform>Otisk z hesla pro %1 unikl %2 krát!</numerusform><numerusform>Otisk z hesla pro %1 unikl %2 krát!</numerusform><numerusform>Otisk z hesla pro %1 unikl %2 krát!</numerusform><numerusform>Otisk z hesla pro %1 unikl %2 krát!</numerusform></translation>
</message>
<message>
<source>Invalid password generator after applying all options</source>
@ -6574,7 +6569,7 @@ Jádro systému: %3 %4</translation>
</message>
<message>
<source>Could not save the native messaging script file for %1.</source>
<translation type="unfinished"/>
<translation>Nedaří se uložit soubor se skriptem pro posílání zpráv mezi webovým prohlížečem a desktopovou aplikací (native messaging) pro %1.</translation>
</message>
<message>
<source>Copy the given attribute to the clipboard. Defaults to &quot;password&quot; if not specified.</source>
@ -6642,7 +6637,7 @@ Jádro systému: %3 %4</translation>
</message>
<message>
<source>Benchmarking key derivation function for %1ms delay.</source>
<translation type="unfinished"/>
<translation>Testování výkonnosti funkce odvozování klíče pro prodlevu %1ms.</translation>
</message>
<message>
<source>Setting %1 rounds for key derivation function.</source>
@ -6803,7 +6798,7 @@ Jádro systému: %3 %4</translation>
<message>
<source>Bad</source>
<comment>Password quality</comment>
<translation type="unfinished"/>
<translation>Špatné</translation>
</message>
<message>
<source>Bad password must be changed</source>
@ -6837,7 +6832,7 @@ Jádro systému: %3 %4</translation>
</message>
<message>
<source>Please wait, health data is being calculated...</source>
<translation type="unfinished"/>
<translation>Čekejte, probíhá výpočet pro kontrolu stavu...</translation>
</message>
<message>
<source>Congratulations, everything is healthy!</source>
@ -7228,7 +7223,7 @@ Jádro systému: %3 %4</translation>
</message>
<message>
<source>Authorization</source>
<translation>Autorizace</translation>
<translation>Pověření</translation>
</message>
<message>
<source>These applications are currently connected:</source>
@ -7248,7 +7243,7 @@ Jádro systému: %3 %4</translation>
</message>
<message>
<source>Save current changes to activate the plugin and enable editing of this section.</source>
<translation type="unfinished"/>
<translation>Aby byl zásuvný modul aktivován a zapnuto upravování této sekce, uložte stávající změny.</translation>
</message>
</context>
<context>
@ -7352,7 +7347,7 @@ Jádro systému: %3 %4</translation>
</message>
<message>
<source>KeeShare key file</source>
<translation>Soubor s klíček pro KeeShare</translation>
<translation>Soubor s klíčem pro KeeShare</translation>
</message>
<message>
<source>All files</source>
@ -7412,7 +7407,7 @@ Jádro systému: %3 %4</translation>
</message>
<message>
<source>Trust selected certificate</source>
<translation>Důvěřovat označený certifikát</translation>
<translation>Důvěřovat označenému certifikátu</translation>
</message>
<message>
<source>Ask whether to trust the selected certificate every time</source>
@ -7502,7 +7497,7 @@ Jádro systému: %3 %4</translation>
</message>
<message>
<source>Signed share container are not supported - import prevented</source>
<translation>Kontejner podepsaného sdílení není podporován importu zabráněno</translation>
<translation>Podepsaný kontejner sdílení není podporován importu zabráněno</translation>
</message>
<message>
<source>File is not readable</source>
@ -7522,7 +7517,7 @@ Jádro systému: %3 %4</translation>
</message>
<message>
<source>Unsigned share container are not supported - import prevented</source>
<translation>Kontejner nepodepsaného sdílení není podporován importu zabráněno</translation>
<translation>Nepodepsaný kontejner sdílení není podporován importu zabráněno</translation>
</message>
<message>
<source>Successful unsigned import</source>
@ -7600,7 +7595,7 @@ Jádro systému: %3 %4</translation>
<message>
<source>NOTE: These TOTP settings are custom and may not work with other authenticators.</source>
<comment>TOTP QR code dialog warning</comment>
<translation>POZN.: Tato TOTP nastavení jsou uživatelská a nemusí fungovat s ostatními ověřovači.</translation>
<translation>POZN.: Tato TOTP nastavení jsou uživatelsky určená a nemusí fungovat s ostatními nástroji pro ověřování se.</translation>
</message>
<message>
<source>There was an error creating the QR code.</source>
@ -7627,7 +7622,7 @@ Jádro systému: %3 %4</translation>
</message>
<message>
<source>Use custom settings</source>
<translation>Použít vlastní nastavení</translation>
<translation>Použít uživatelsky určená nastavení</translation>
</message>
<message>
<source>Custom Settings</source>
@ -7682,11 +7677,11 @@ Příklad: JBSWY3DPEHPK3PXP</translation>
</message>
<message>
<source>Confirm Remove TOTP Settings</source>
<translation>Potvrdit odebrání nastavení pro TOTP</translation>
<translation>Potvrdit odebrání nastavení pro TOTP heslo</translation>
</message>
<message>
<source>Are you sure you want to delete TOTP settings for this entry?</source>
<translation>Opravdu chcete smazat nastavení TOTP u tohoto záznamu?</translation>
<translation>Opravdu chcete smazat nastavení pro TOTP heslo u tohoto záznamu?</translation>
</message>
</context>
<context>
@ -7732,7 +7727,7 @@ Příklad: JBSWY3DPEHPK3PXP</translation>
</message>
<message>
<source>KeePassXC %1 is now available you have %2.</source>
<translation>Nyní je k dispozici KeePassXC verze %1 nyní máte %2.</translation>
<translation>Nyní je k dispozici KeePassXC verze %1 nainstalovanou máte %2.</translation>
</message>
<message>
<source>Download it at keepassxc.org</source>
@ -7845,7 +7840,7 @@ Příklad: JBSWY3DPEHPK3PXP</translation>
</message>
<message>
<source>&lt;p&gt;If you own a &lt;a href=&quot;https://www.yubico.com/&quot;&gt;YubiKey&lt;/a&gt;, you can use it for additional security.&lt;/p&gt;&lt;p&gt;The YubiKey requires one of its slots to be programmed as &lt;a href=&quot;https://www.yubico.com/products/services-software/personalization-tools/challenge-response/&quot;&gt;HMAC-SHA1 Challenge-Response&lt;/a&gt;.&lt;/p&gt;</source>
<translation>&lt;p&gt;Pokud vlastníte zařízení &lt;a href=&quot;https://www.yubico.com/&quot;&gt;YubiKey&lt;/a&gt;, můžete ho použít jako další úroveň zabezpečení.&lt;/p&gt;&lt;p&gt;YubiKey  vyžaduje aby jeden z jeho slotů byl naprogramován jako &lt;a href=&quot;https://www.yubico.com/products/services-software/personalization-tools/challenge-response/&quot;&gt;HMAC-SHA1 výzva-odpověď&lt;/a&gt;.&lt;/p&gt;</translation>
<translation>&lt;p&gt;Pokud vlastníte zařízení &lt;a href=&quot;https://www.yubico.com/&quot;&gt;YubiKey&lt;/a&gt;, můžete ho použít jako další úroveň zabezpečení.&lt;/p&gt;&lt;p&gt;YubiKey vyžaduje aby jeden z jeho slotů byl naprogramován jako &lt;a href=&quot;https://www.yubico.com/products/services-software/personalization-tools/challenge-response/&quot;&gt;HMAC-SHA1 výzva-odpověď&lt;/a&gt;.&lt;/p&gt;</translation>
</message>
<message>
<source>Refresh hardware tokens</source>

View File

@ -135,6 +135,10 @@
<source>Colorful</source>
<translation>Farverig</translation>
</message>
<message>
<source>You must restart the application to set the new language. Would you like to restart now?</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>ApplicationSettingsWidgetGeneral</name>
@ -166,10 +170,6 @@
<source>Automatically save after every change</source>
<translation>Gem automatisk når der foretages ændringer</translation>
</message>
<message>
<source>Automatically save on exit</source>
<translation>Gem automatisk ved afslutning</translation>
</message>
<message>
<source>Automatically reload the database when modified externally</source>
<translation>Genindlæs automatisk databasen når den er blevet ændret eksternt</translation>
@ -304,10 +304,6 @@
<source>Automatically launch KeePassXC at system startup</source>
<translation type="unfinished"/>
</message>
<message>
<source>Mark database as modified for non-data changes (e.g., expanding groups)</source>
<translation type="unfinished"/>
</message>
<message>
<source>Safely save database files (disable if experiencing problems with Dropbox, etc.)</source>
<translation type="unfinished"/>
@ -344,6 +340,18 @@
<source>Auto-Type start delay:</source>
<translation type="unfinished"/>
</message>
<message>
<source>Automatically save when locking database</source>
<translation type="unfinished"/>
</message>
<message>
<source>Automatically save non-data changes when locking database</source>
<translation type="unfinished"/>
</message>
<message>
<source>Tray icon type</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>ApplicationSettingsWidgetSecurity</name>
@ -4817,6 +4825,26 @@ Forvent nogle fejl og mindre problemer. Denne version er ikke beregnet til produ
<source>You must restart the application to apply this setting. Would you like to restart now?</source>
<translation type="unfinished"/>
</message>
<message>
<source>Perform Auto-Type Sequence</source>
<translation type="unfinished"/>
</message>
<message>
<source>{USERNAME}</source>
<translation type="unfinished"/>
</message>
<message>
<source>{USERNAME}{ENTER}</source>
<translation type="unfinished"/>
</message>
<message>
<source>{PASSWORD}</source>
<translation type="unfinished"/>
</message>
<message>
<source>{PASSWORD}{ENTER}</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>ManageDatabase</name>
@ -5300,10 +5328,6 @@ Forvent nogle fejl og mindre problemer. Denne version er ikke beregnet til produ
<comment>Password quality</comment>
<translation>Fremragende</translation>
</message>
<message>
<source>ExtendedASCII</source>
<translation>UdvidetASCII</translation>
</message>
<message>
<source>Switch to advanced mode</source>
<translation>Skift til avanceret tilstand</translation>
@ -5312,58 +5336,22 @@ Forvent nogle fejl og mindre problemer. Denne version er ikke beregnet til produ
<source>Advanced</source>
<translation>Avanceret</translation>
</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>
<source>Braces</source>
<translation>Parenteser</translation>
</message>
<message>
<source>{[(</source>
<translation>{[(</translation>
</message>
<message>
<source>Punctuation</source>
<translation>Tegnsætning</translation>
</message>
<message>
<source>.,:;</source>
<translation>.,:;</translation>
</message>
<message>
<source>Quotes</source>
<translation>Citationstegn</translation>
</message>
<message>
<source>&quot; &apos;</source>
<translation>&quot; &apos;</translation>
</message>
<message>
<source>&lt;*+!?=</source>
<translation>&lt;*+!?=</translation>
</message>
<message>
<source>\_|-/</source>
<translation>\_|-/</translation>
</message>
<message>
<source>Logograms</source>
<translation>Logogrammer</translation>
</message>
<message>
<source>#$%&amp;&amp;@^`~</source>
<translation>#$%&amp;&amp;@^`~</translation>
</message>
<message>
<source>Character set to exclude from generated password</source>
<translation>Tegnsæt som skal medtages fra generede adgangskode</translation>
@ -5484,6 +5472,10 @@ Forvent nogle fejl og mindre problemer. Denne version er ikke beregnet til produ
<source>Regenerate password (%1)</source>
<translation type="unfinished"/>
</message>
<message>
<source>Special Characters</source>
<translation>Specialtegn</translation>
</message>
</context>
<context>
<name>QApplication</name>

View File

@ -135,6 +135,10 @@
<source>Colorful</source>
<translation>Bunt</translation>
</message>
<message>
<source>You must restart the application to set the new language. Would you like to restart now?</source>
<translation>Zum Ändern der Sprache müssen Sie die Anwendung neu starten. Möchten Sie jetzt neu starten?</translation>
</message>
</context>
<context>
<name>ApplicationSettingsWidgetGeneral</name>
@ -166,10 +170,6 @@
<source>Automatically save after every change</source>
<translation>Automatisch speichern nach jeder Änderung</translation>
</message>
<message>
<source>Automatically save on exit</source>
<translation>Automatisch speichern beim Beenden</translation>
</message>
<message>
<source>Automatically reload the database when modified externally</source>
<translation>Datenbank nach externer Änderung automatisch neu laden</translation>
@ -304,10 +304,6 @@
<source>Automatically launch KeePassXC at system startup</source>
<translation>KeePassXC beim Systemstart automatisch starten</translation>
</message>
<message>
<source>Mark database as modified for non-data changes (e.g., expanding groups)</source>
<translation>Datenbank bei geringfügigen Änderungen (z. B. Gruppen ausklappen) als geändert markieren</translation>
</message>
<message>
<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>
@ -344,6 +340,18 @@
<source>Auto-Type start delay:</source>
<translation>Startverzögerung für Auto-Type:</translation>
</message>
<message>
<source>Automatically save when locking database</source>
<translation>Automatisch speichern beim Sperren der Datenbank</translation>
</message>
<message>
<source>Automatically save non-data changes when locking database</source>
<translation>Metadaten automatisch speichern beim Sperren der Datenbank</translation>
</message>
<message>
<source>Tray icon type</source>
<translation>Trayicon-Typ</translation>
</message>
</context>
<context>
<name>ApplicationSettingsWidgetSecurity</name>
@ -423,7 +431,7 @@
<message>
<source> min</source>
<comment>Minutes</comment>
<translation>min</translation>
<translation> min</translation>
</message>
<message>
<source>Clear search query after</source>
@ -4839,6 +4847,26 @@ Rechnen Sie mit Fehlern. Diese Version ist nicht für den Produktiveinsatz gedac
<source>You must restart the application to apply this setting. Would you like to restart now?</source>
<translation>Sie müssen die Anwendung neustarten, um diese Einstellung anzuwenden. Möchten Sie jetzt neustarten?</translation>
</message>
<message>
<source>Perform Auto-Type Sequence</source>
<translation>Führe Auto-Type-Sequenz aus</translation>
</message>
<message>
<source>{USERNAME}</source>
<translation>{BENUTZERNAME}</translation>
</message>
<message>
<source>{USERNAME}{ENTER}</source>
<translation>{BENUTZERNAME}{ENTER}</translation>
</message>
<message>
<source>{PASSWORD}</source>
<translation>{PASSWORT}</translation>
</message>
<message>
<source>{PASSWORD}{ENTER}</source>
<translation>{PASSWORT}{ENTER}</translation>
</message>
</context>
<context>
<name>ManageDatabase</name>
@ -5323,10 +5351,6 @@ Rechnen Sie mit Fehlern. Diese Version ist nicht für den Produktiveinsatz gedac
<comment>Password quality</comment>
<translation>Ausgezeichnet</translation>
</message>
<message>
<source>ExtendedASCII</source>
<translation>Erweitertes ASCII</translation>
</message>
<message>
<source>Switch to advanced mode</source>
<translation>Zum fortgeschrittenen Modus wechseln</translation>
@ -5335,58 +5359,22 @@ Rechnen Sie mit Fehlern. Diese Version ist nicht für den Produktiveinsatz gedac
<source>Advanced</source>
<translation>Fortgeschritten</translation>
</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>
<source>Braces</source>
<translation>Klammern</translation>
</message>
<message>
<source>{[(</source>
<translation>{[(</translation>
</message>
<message>
<source>Punctuation</source>
<translation>Interpunktion</translation>
</message>
<message>
<source>.,:;</source>
<translation>.,:;</translation>
</message>
<message>
<source>Quotes</source>
<translation>Anführungszeichen</translation>
</message>
<message>
<source>&quot; &apos;</source>
<translation>&quot;&apos;</translation>
</message>
<message>
<source>&lt;*+!?=</source>
<translation>&lt;*+!?=</translation>
</message>
<message>
<source>\_|-/</source>
<translation>\_|-/</translation>
</message>
<message>
<source>Logograms</source>
<translation>Kürzel</translation>
</message>
<message>
<source>#$%&amp;&amp;@^`~</source>
<translation>#$%&amp;&amp;@^`~</translation>
</message>
<message>
<source>Character set to exclude from generated password</source>
<translation>Zeichen, die nicht im Passwort enthalten sein sollen</translation>
@ -5507,6 +5495,10 @@ Rechnen Sie mit Fehlern. Diese Version ist nicht für den Produktiveinsatz gedac
<source>Regenerate password (%1)</source>
<translation>Passwort neu erzeugen (%1)</translation>
</message>
<message>
<source>Special Characters</source>
<translation>Sonderzeichen</translation>
</message>
</context>
<context>
<name>QApplication</name>

View File

@ -1292,14 +1292,6 @@ Please consider generating a new key file.</translation>
<source>TouchID for Quick Unlock</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Clear</source>
<translation type="unfinished">Clear</translation>
</message>
<message>
<source>Clear Key File</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Unlock failed and no password given</source>
<translation type="unfinished"></translation>
@ -2651,6 +2643,10 @@ Disable safe saves and try again?</translation>
<source>Expires:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Edit Entry</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>EditEntryWidgetSSHAgent</name>
@ -2950,6 +2946,10 @@ Supported extensions are: %1.</source>
<source>Set default Auto-Type sequence</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Edit Group</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>EditWidgetIcons</name>
@ -3499,18 +3499,6 @@ Are you sure to add this file?</source>
</context>
<context>
<name>EntryView</name>
<message>
<source>Customize View</source>
<translation>Customize View</translation>
</message>
<message>
<source>Hide Usernames</source>
<translation>Hide Usernames</translation>
</message>
<message>
<source>Hide Passwords</source>
<translation>Hide Passwords</translation>
</message>
<message>
<source>Fit to window</source>
<translation>Fit to window</translation>
@ -4915,6 +4903,18 @@ Expect some bugs and minor issues, this version is not meant for production use.
<source>{PASSWORD}{ENTER}</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Always on Top</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Hide Usernames</source>
<translation type="unfinished">Hide Usernames</translation>
</message>
<message>
<source>Hide Passwords</source>
<translation type="unfinished">Hide Passwords</translation>
</message>
</context>
<context>
<name>ManageDatabase</name>
@ -5534,10 +5534,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<source>Ctrl+S</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Clear</source>
<translation type="unfinished">Clear</translation>
</message>
<message>
<source>Regenerate password (%1)</source>
<translation type="unfinished"></translation>
@ -6278,10 +6274,6 @@ Available commands:
<source>read password of the database from stdin</source>
<translation>read password of the database from stdin</translation>
</message>
<message>
<source>Parent window handle</source>
<translation>Parent window handle</translation>
</message>
<message>
<source>Another instance of KeePassXC is already running.</source>
<translation>Another instance of KeePassXC is already running.</translation>
@ -6804,6 +6796,10 @@ Kernel: %3 %4</source>
<numerusform>%1 s</numerusform>
</translation>
</message>
<message>
<source>path to a custom local config file</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QtIOCompressor</name>
@ -7227,10 +7223,6 @@ Kernel: %3 %4</source>
<source>Search</source>
<translation>Search</translation>
</message>
<message>
<source>Clear</source>
<translation>Clear</translation>
</message>
<message>
<source>Limit search to selected group</source>
<translation>Limit search to selected group</translation>

View File

@ -135,6 +135,10 @@
<source>Colorful</source>
<translation>Colorful</translation>
</message>
<message>
<source>You must restart the application to set the new language. Would you like to restart now?</source>
<translation>You must restart the application to set the new language. Would you like to restart now?</translation>
</message>
</context>
<context>
<name>ApplicationSettingsWidgetGeneral</name>
@ -166,10 +170,6 @@
<source>Automatically save after every change</source>
<translation>Automatically save after every change</translation>
</message>
<message>
<source>Automatically save on exit</source>
<translation>Automatically save on exit</translation>
</message>
<message>
<source>Automatically reload the database when modified externally</source>
<translation>Automatically reload the database when modified externally</translation>
@ -304,10 +304,6 @@
<source>Automatically launch KeePassXC at system startup</source>
<translation>Automatically launch KeePassXC at system startup</translation>
</message>
<message>
<source>Mark database as modified for non-data changes (e.g., expanding groups)</source>
<translation>Mark database as modified for non-data changes (e.g., expanding groups)</translation>
</message>
<message>
<source>Safely save database files (disable if experiencing problems with Dropbox, etc.)</source>
<translation>Safely save database files (disable if experiencing problems with Dropbox, etc.)</translation>
@ -344,6 +340,18 @@
<source>Auto-Type start delay:</source>
<translation>Auto-Type start delay:</translation>
</message>
<message>
<source>Automatically save when locking database</source>
<translation>Automatically save when locking database</translation>
</message>
<message>
<source>Automatically save non-data changes when locking database</source>
<translation>Automatically save non-data changes when locking database</translation>
</message>
<message>
<source>Tray icon type</source>
<translation>Tray icon type</translation>
</message>
</context>
<context>
<name>ApplicationSettingsWidgetSecurity</name>
@ -4841,6 +4849,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>
<translation>You must restart the application to apply this setting. Would you like to restart now?</translation>
</message>
<message>
<source>Perform Auto-Type Sequence</source>
<translation>Perform Auto-Type Sequence</translation>
</message>
<message>
<source>{USERNAME}</source>
<translation>{USERNAME}</translation>
</message>
<message>
<source>{USERNAME}{ENTER}</source>
<translation>{USERNAME}{ENTER}</translation>
</message>
<message>
<source>{PASSWORD}</source>
<translation>{PASSWORD}</translation>
</message>
<message>
<source>{PASSWORD}{ENTER}</source>
<translation>{PASSWORD}{ENTER}</translation>
</message>
</context>
<context>
<name>ManageDatabase</name>
@ -5325,10 +5353,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<comment>Password quality</comment>
<translation>Excellent</translation>
</message>
<message>
<source>ExtendedASCII</source>
<translation>ExtendedASCII</translation>
</message>
<message>
<source>Switch to advanced mode</source>
<translation>Switch to advanced mode</translation>
@ -5337,58 +5361,22 @@ Expect some bugs and minor issues, this version is not meant for production use.
<source>Advanced</source>
<translation>Advanced</translation>
</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>
<source>Braces</source>
<translation>Braces</translation>
</message>
<message>
<source>{[(</source>
<translation>{[(</translation>
</message>
<message>
<source>Punctuation</source>
<translation>Punctuation</translation>
</message>
<message>
<source>.,:;</source>
<translation>.,:;</translation>
</message>
<message>
<source>Quotes</source>
<translation>Quotes</translation>
</message>
<message>
<source>&quot; &apos;</source>
<translation>&quot; &apos;</translation>
</message>
<message>
<source>&lt;*+!?=</source>
<translation>&lt;*+!?=</translation>
</message>
<message>
<source>\_|-/</source>
<translation>\_|-/</translation>
</message>
<message>
<source>Logograms</source>
<translation>Logograms</translation>
</message>
<message>
<source>#$%&amp;&amp;@^`~</source>
<translation>#$%&amp;&amp;@^`~</translation>
</message>
<message>
<source>Character set to exclude from generated password</source>
<translation>Character set to exclude from generated password</translation>
@ -5509,6 +5497,10 @@ Expect some bugs and minor issues, this version is not meant for production use.
<source>Regenerate password (%1)</source>
<translation>Regenerate password (%1)</translation>
</message>
<message>
<source>Special Characters</source>
<translation>Special Characters</translation>
</message>
</context>
<context>
<name>QApplication</name>

View File

@ -135,6 +135,10 @@
<source>Colorful</source>
<translation>Colorido</translation>
</message>
<message>
<source>You must restart the application to set the new language. Would you like to restart now?</source>
<translation>Debe reiniciar la aplicación para establecer el nuevo lenguage. ¿Desea reiniciar ahora?</translation>
</message>
</context>
<context>
<name>ApplicationSettingsWidgetGeneral</name>
@ -166,10 +170,6 @@
<source>Automatically save after every change</source>
<translation>Guardar automáticamente después de cada cambio</translation>
</message>
<message>
<source>Automatically save on exit</source>
<translation>Guardar automáticamente al salir</translation>
</message>
<message>
<source>Automatically reload the database when modified externally</source>
<translation>Recargar automáticamente la base de datos cuando sea modificada externamente</translation>
@ -304,10 +304,6 @@
<source>Automatically launch KeePassXC at system startup</source>
<translation>Inicie automáticamente KeePassXC al inicio del sistema</translation>
</message>
<message>
<source>Mark database as modified for non-data changes (e.g., expanding groups)</source>
<translation>Marcar la base de datos como modificada cuando los cambios no afecten a los datos (ej. expandir grupos)</translation>
</message>
<message>
<source>Safely save database files (disable if experiencing problems with Dropbox, etc.)</source>
<translation>Guardar los archivos de base de datos con seguridad (puede ser incompatible con Dropbox, etcétera)</translation>
@ -344,6 +340,18 @@
<source>Auto-Type start delay:</source>
<translation>Retardo de inicio de autoescritura:</translation>
</message>
<message>
<source>Automatically save when locking database</source>
<translation>Guardar automáticamente al bloquear la base de datos</translation>
</message>
<message>
<source>Automatically save non-data changes when locking database</source>
<translation>Guardar automáticamente cambios sin datos al bloquear la base de datos</translation>
</message>
<message>
<source>Tray icon type</source>
<translation>Tipo de icono en la bandeja</translation>
</message>
</context>
<context>
<name>ApplicationSettingsWidgetSecurity</name>
@ -4657,7 +4665,7 @@ Espere algunos errores y problemas menores, esta versión no está destinada par
</message>
<message>
<source>&amp;Edit Entry</source>
<translation>&amp;Editar apunte</translation>
<translation>&amp;Editar apunte...</translation>
</message>
<message>
<source>&amp;Delete Entry</source>
@ -4665,7 +4673,7 @@ Espere algunos errores y problemas menores, esta versión no está destinada par
</message>
<message>
<source>&amp;New Group</source>
<translation>&amp;Nuevo grupo</translation>
<translation>&amp;Nuevo grupo...</translation>
</message>
<message>
<source>&amp;Edit Group</source>
@ -4789,7 +4797,7 @@ Espere algunos errores y problemas menores, esta versión no está destinada par
</message>
<message>
<source>Save Database Backup...</source>
<translation>Guardar copia de seguridad de la base de datos..</translation>
<translation>Guardar copia de seguridad de la base de datos...</translation>
</message>
<message>
<source>Add key to SSH Agent</source>
@ -4839,6 +4847,26 @@ Espere algunos errores y problemas menores, esta versión no está destinada par
<source>You must restart the application to apply this setting. Would you like to restart now?</source>
<translation>Debe reiniciar la aplicación para aplicar esta configuración. ¿Desea reiniciar ahora?</translation>
</message>
<message>
<source>Perform Auto-Type Sequence</source>
<translation>Realizar secuencia de autoescritura</translation>
</message>
<message>
<source>{USERNAME}</source>
<translation>{USUARIO}</translation>
</message>
<message>
<source>{USERNAME}{ENTER}</source>
<translation>{USUARIO}{ENTER}</translation>
</message>
<message>
<source>{PASSWORD}</source>
<translation>{CONTRASEÑA}</translation>
</message>
<message>
<source>{PASSWORD}{ENTER}</source>
<translation>{CONTRASEÑA}{ENTER}</translation>
</message>
</context>
<context>
<name>ManageDatabase</name>
@ -5323,10 +5351,6 @@ Espere algunos errores y problemas menores, esta versión no está destinada par
<comment>Password quality</comment>
<translation>Excelente</translation>
</message>
<message>
<source>ExtendedASCII</source>
<translation>ASCII extendido</translation>
</message>
<message>
<source>Switch to advanced mode</source>
<translation>Cambiar a modo avanzado</translation>
@ -5335,58 +5359,22 @@ Espere algunos errores y problemas menores, esta versión no está destinada par
<source>Advanced</source>
<translation>Avanzado</translation>
</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>
<source>Braces</source>
<translation>Llaves</translation>
</message>
<message>
<source>{[(</source>
<translation>{[(</translation>
</message>
<message>
<source>Punctuation</source>
<translation>Puntuación</translation>
</message>
<message>
<source>.,:;</source>
<translation>.,:;</translation>
</message>
<message>
<source>Quotes</source>
<translation>Comillas</translation>
</message>
<message>
<source>&quot; &apos;</source>
<translation>&quot; &apos;</translation>
</message>
<message>
<source>&lt;*+!?=</source>
<translation>&lt;*+!? =</translation>
</message>
<message>
<source>\_|-/</source>
<translation>\_|-/</translation>
</message>
<message>
<source>Logograms</source>
<translation>Logogramas</translation>
</message>
<message>
<source>#$%&amp;&amp;@^`~</source>
<translation>#$%&amp;&amp;@^`~</translation>
</message>
<message>
<source>Character set to exclude from generated password</source>
<translation>Conjunto de caracteres a excluir de la contraseña generada</translation>
@ -5507,6 +5495,10 @@ Espere algunos errores y problemas menores, esta versión no está destinada par
<source>Regenerate password (%1)</source>
<translation>Regenerar contraseña (%1)</translation>
</message>
<message>
<source>Special Characters</source>
<translation>Caracteres especiales</translation>
</message>
</context>
<context>
<name>QApplication</name>

File diff suppressed because it is too large Load Diff

View File

@ -135,6 +135,10 @@
<source>Colorful</source>
<translation>Värikäs</translation>
</message>
<message>
<source>You must restart the application to set the new language. Would you like to restart now?</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>ApplicationSettingsWidgetGeneral</name>
@ -166,10 +170,6 @@
<source>Automatically save after every change</source>
<translation>Tallenna automaattisesti jokaisen muutoksen jälkeen</translation>
</message>
<message>
<source>Automatically save on exit</source>
<translation>Tallenna automaattisesti suljettaessa</translation>
</message>
<message>
<source>Automatically reload the database when modified externally</source>
<translation>Lataa tietokanta automaattisesti uudelleen jos tietokantaa muokattiin muualla</translation>
@ -304,10 +304,6 @@
<source>Automatically launch KeePassXC at system startup</source>
<translation>Käynnistä KeePassXC automaattisesti järjestelmän käynnistyksessä</translation>
</message>
<message>
<source>Mark database as modified for non-data changes (e.g., expanding groups)</source>
<translation>Merkitse tietokanta muokatuksi dataa sisältämättömistä muokkauksista (esim. ryhmien laajentaminen)</translation>
</message>
<message>
<source>Safely save database files (disable if experiencing problems with Dropbox, etc.)</source>
<translation>Tallenna tietokannat turvallisesti (ota pois käytöstä, jos tämä aiheuttaa ongelmia Dropboxin ym. kanssa)</translation>
@ -344,6 +340,18 @@
<source>Auto-Type start delay:</source>
<translation>Automaattisyötön aloitusviive:</translation>
</message>
<message>
<source>Automatically save when locking database</source>
<translation type="unfinished"/>
</message>
<message>
<source>Automatically save non-data changes when locking database</source>
<translation type="unfinished"/>
</message>
<message>
<source>Tray icon type</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>ApplicationSettingsWidgetSecurity</name>
@ -4839,6 +4847,26 @@ Bugeja ja ongelmia voi esiintyä. Tämä versio ei ole tarkoitettu päivittäise
<source>You must restart the application to apply this setting. Would you like to restart now?</source>
<translation>Ohjelma täytyy käynnistää uudelleen, jotta asetus voidaan ottaa käyttöön. Haluatko käynnistää uudelleen nyt?</translation>
</message>
<message>
<source>Perform Auto-Type Sequence</source>
<translation type="unfinished"/>
</message>
<message>
<source>{USERNAME}</source>
<translation type="unfinished"/>
</message>
<message>
<source>{USERNAME}{ENTER}</source>
<translation type="unfinished"/>
</message>
<message>
<source>{PASSWORD}</source>
<translation type="unfinished"/>
</message>
<message>
<source>{PASSWORD}{ENTER}</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>ManageDatabase</name>
@ -5323,10 +5351,6 @@ Bugeja ja ongelmia voi esiintyä. Tämä versio ei ole tarkoitettu päivittäise
<comment>Password quality</comment>
<translation>Erinomainen</translation>
</message>
<message>
<source>ExtendedASCII</source>
<translation>Laajennettu ASCII</translation>
</message>
<message>
<source>Switch to advanced mode</source>
<translation>Vaihda kehittyneeseen tilaan</translation>
@ -5335,58 +5359,22 @@ Bugeja ja ongelmia voi esiintyä. Tämä versio ei ole tarkoitettu päivittäise
<source>Advanced</source>
<translation>Lisäasetukset</translation>
</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>
<source>Braces</source>
<translation>Sulut</translation>
</message>
<message>
<source>{[(</source>
<translation>{[(</translation>
</message>
<message>
<source>Punctuation</source>
<translation>Välimerkit</translation>
</message>
<message>
<source>.,:;</source>
<translation>.,:;</translation>
</message>
<message>
<source>Quotes</source>
<translation>Lainausmerkit</translation>
</message>
<message>
<source>&quot; &apos;</source>
<translation>&quot; &apos;</translation>
</message>
<message>
<source>&lt;*+!?=</source>
<translation>&lt;*+!?=</translation>
</message>
<message>
<source>\_|-/</source>
<translation>\_|-/</translation>
</message>
<message>
<source>Logograms</source>
<translation>Erikoismerkit</translation>
</message>
<message>
<source>#$%&amp;&amp;@^`~</source>
<translation>#$%&amp;&amp;@^`~</translation>
</message>
<message>
<source>Character set to exclude from generated password</source>
<translation>Kirjaimet joita ei käytetä salasanan muodostukseen</translation>
@ -5507,6 +5495,10 @@ Bugeja ja ongelmia voi esiintyä. Tämä versio ei ole tarkoitettu päivittäise
<source>Regenerate password (%1)</source>
<translation>Luo salasana uudelleen (%1)</translation>
</message>
<message>
<source>Special Characters</source>
<translation>Erikoismerkit</translation>
</message>
</context>
<context>
<name>QApplication</name>

View File

@ -121,7 +121,7 @@
</message>
<message>
<source>Are you sure you want to reset all general and security settings to default?</source>
<translation>Voulez-vous vraiment réinitialiser tous les paramètres généraux et de sécurité à leur valeur par défaut?</translation>
<translation>Souhaitez-vous vraiment réinitialiser tous les paramètres généraux et de sécurité à leur valeur par défaut?</translation>
</message>
<message>
<source>Monochrome (light)</source>
@ -135,6 +135,10 @@
<source>Colorful</source>
<translation>Multicolore</translation>
</message>
<message>
<source>You must restart the application to set the new language. Would you like to restart now?</source>
<translation>Pour appliquer la nouvelle langue, vous devez redémarrer lapplication. Souhaitez-vous la démarrer maintenant?</translation>
</message>
</context>
<context>
<name>ApplicationSettingsWidgetGeneral</name>
@ -166,10 +170,6 @@
<source>Automatically save after every change</source>
<translation>Enregistrer automatiquement après chaque changement</translation>
</message>
<message>
<source>Automatically save on exit</source>
<translation>Enregistrer automatiquement en sortant</translation>
</message>
<message>
<source>Automatically reload the database when modified externally</source>
<translation>Recharger automatiquement la base de données quand elle est modifiée de lextérieur</translation>
@ -304,10 +304,6 @@
<source>Automatically launch KeePassXC at system startup</source>
<translation>Lancer automatiquement KeepassXC au démarrage du système.</translation>
</message>
<message>
<source>Mark database as modified for non-data changes (e.g., expanding groups)</source>
<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>
<source>Safely save database files (disable if experiencing problems with Dropbox, etc.)</source>
<translation>Enregistrer en toute sécurité les fichiers de base de données (désactiver en cas de problèmes avec Dropbox, etc.)</translation>
@ -344,6 +340,18 @@
<source>Auto-Type start delay:</source>
<translation>Délai de démarrage de la saisie automatique :</translation>
</message>
<message>
<source>Automatically save when locking database</source>
<translation>Enregistrer automatiquement en verrouillant la base de données</translation>
</message>
<message>
<source>Automatically save non-data changes when locking database</source>
<translation>Enregistrer automatiquement les changements qui ne sont pas relatifs aux données en verrouillant la base de données</translation>
</message>
<message>
<source>Tray icon type</source>
<translation>Type dicône de la zone de notification</translation>
</message>
</context>
<context>
<name>ApplicationSettingsWidgetSecurity</name>
@ -462,15 +470,15 @@
</message>
<message>
<source>This Auto-Type command contains a very long delay. Do you really want to proceed?</source>
<translation>Cette commande de saisie automatique contient un délai très long. Voulez-vous vraiment continuer?</translation>
<translation>Cette commande de saisie automatique contient un délai très long. Souhaitez-vous vraiment continuer?</translation>
</message>
<message>
<source>This Auto-Type command contains very slow key presses. Do you really want to proceed?</source>
<translation>Cette commande de saisie automatique contient des touches très lentes. Voulez-vous vraiment continuer?</translation>
<translation>Cette commande de saisie automatique contient des touches très lentes. Souhaitez-vous vraiment continuer?</translation>
</message>
<message>
<source>This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed?</source>
<translation>Cette commande de saisie automatique contient des arguments répétés très souvent. Voulez-vous vraiment continuer?</translation>
<translation>Cette commande de saisie automatique contient des arguments répétés très souvent. Souhaitez-vous vraiment continuer?</translation>
</message>
<message>
<source>Permission Required</source>
@ -626,7 +634,7 @@ Veuillez sélectionner la base de données souhaitée pour enregistrer les ident
<source>A shared encryption key with the name &quot;%1&quot; already exists.
Do you want to overwrite it?</source>
<translation>Une clé de chiffrement partagée nommée « %1 » existe déjà.
Voulez-vous la remplacer?</translation>
Souhaitez-vous la remplacer?</translation>
</message>
<message>
<source>KeePassXC: Update Entry</source>
@ -634,7 +642,7 @@ Voulez-vous la remplacer?</translation>
</message>
<message>
<source>Do you want to update the information in %1 - %2?</source>
<translation>Voulez-vous mettre à jour les renseignements dans %1 - %2?</translation>
<translation>Souhaitez-vous mettre à jour les renseignements dans %1 - %2?</translation>
</message>
<message>
<source>Abort</source>
@ -679,7 +687,7 @@ Moved %2 keys to custom data.</source>
Do you want to create this group?
</source>
<translation>Une demande de création dun nouveau groupe « %1 » a é reçue.
Voulez-vous créer ce groupe?
Souhaitez-vous créer ce groupe?
</translation>
</message>
<message>
@ -1293,7 +1301,7 @@ Do you want to retry with an &quot;empty&quot; password instead?
To prevent this error from appearing, you must go to &quot;Database Settings / Security&quot; and reset your password.</source>
<translation>Le déverrouillage de la base de données a échoué et vous navez pas saisi de mot de passe.
Voulez-vous plutôt ressayer sans mot de passe?
Souhaitez-vous plutôt ressayer sans mot de passe?
Afin dempêcher que cette erreur survienne, vous devez accéder à « Paramètres de la base de données » et réinitialiser votre mot de passe.</translation>
</message>
@ -1409,7 +1417,7 @@ Si vous navez pas de fichier clé, veuillez laisser le champ vide.</translati
<message>
<source>Do you really want to delete the selected key?
This may prevent connection to the browser plugin.</source>
<translation>Voulez-vous vraiment supprimer la clé sélectionnée?
<translation>Souhaitez-vous vraiment supprimer la clé sélectionnée?
Cela pourrait empêcher la connexion lextension pour navigateurs.</translation>
</message>
<message>
@ -1431,7 +1439,7 @@ Cela pourrait empêcher la connexion lextension pour navigateurs.</translatio
<message>
<source>Do you really want to disconnect all browsers?
This may prevent connection to the browser plugin.</source>
<translation>Voulez-vous vraiment déconnecter tous les navigateurs?
<translation>Souhaitez-vous vraiment déconnecter tous les navigateurs?
Cela pourrait empêcher la connexion avec lextension pour navigateurs.</translation>
</message>
<message>
@ -1457,7 +1465,7 @@ Cela pourrait empêcher la connexion avec lextension pour navigateurs.</trans
<message>
<source>Do you really want forget all site-specific settings on every entry?
Permissions to access entries will be revoked.</source>
<translation>Voulez-vous vraiment oublier tous les paramètres propres aux sites pour toutes les entrées? Les autorisations daccès aux entrées seront révoquées.</translation>
<translation>Souhaitez-vous vraiment oublier tous les paramètres propres aux sites pour toutes les entrées? Les autorisations daccès aux entrées seront révoquées.</translation>
</message>
<message>
<source>Removing stored permissions</source>
@ -1490,7 +1498,7 @@ Permissions to access entries will be revoked.</source>
<message>
<source>Do you really want to move all legacy browser integration data to the latest standard?
This is necessary to maintain compatibility with the browser plugin.</source>
<translation>Voulez-vous vraiment convertir toutes les données dintégration au navigateur héritées à la norme la plus récente?
<translation>Souhaitez-vous vraiment convertir toutes les données dintégration au navigateur héritées à la norme la plus récente?
Cela est nécessaire pour assurer la compatibilité avec lextension pour navigateurs.</translation>
</message>
<message>
@ -1520,7 +1528,7 @@ Cela est nécessaire pour assurer la compatibilité avec lextension pour navi
<message>
<source>Do you really want refresh the database ID?
This is only necessary if your database is a copy of another and the browser extension cannot connect.</source>
<translation>Voulez-vous vraiment actualiser l&apos;ID de la base de données ?
<translation>Souhaitez-vous vraiment actualiser l&apos;ID de la base de données ?
Ceci est seulement nécessaire si votre base de données est une copie d&apos;une autre et que l&apos;extension du navigateur ne peut se connecter.</translation>
</message>
</context>
@ -1540,7 +1548,7 @@ Ceci est seulement nécessaire si votre base de données est une copie d&apos;un
Are you sure you want to continue without a password?</source>
<translation>AVERTISSEMENT : Vous navez pas défini de mot de passe. Il est fortement découragé dutiliser une base de données sans mot de passe.
Voulez-vous vraiment poursuivre sans mot de passe?</translation>
Souhaitez-vous vraiment poursuivre sans mot de passe?</translation>
</message>
<message>
<source>Continue without password</source>
@ -1811,7 +1819,7 @@ Si vous gardez ce nombre, votre base de données pourrait être craquée trop fa
<message>
<source>Do you want to delete the current recycle bin and all its contents?
This action is not reversible.</source>
<translation>Voulez-vous supprimer la corbeille actuelle et tout son contenu?
<translation>Souhaitez-vous supprimer la corbeille actuelle et tout son contenu?
Cette action est irréversible.</translation>
</message>
<message>
@ -1967,7 +1975,7 @@ Cest très certainement un bogue, veuillez le signaler aux développeurs.</tr
</message>
<message>
<source>You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue?</source>
<translation>Vous êtes sur le point dexporter votre base de données vers un fichier non chiffré. Vos mots de passe et renseignements délicats seront vulnérables. Voulez-vous vraiment poursuivre?</translation>
<translation>Vous êtes sur le point dexporter votre base de données vers un fichier non chiffré. Vos mots de passe et renseignements délicats seront vulnérables. Souhaitez-vous vraiment poursuivre?</translation>
</message>
<message>
<source>Open OPVault</source>
@ -1982,15 +1990,15 @@ Cest très certainement un bogue, veuillez le signaler aux développeurs.</tr
</message>
<message>
<source>Do you really want to delete the entry &quot;%1&quot; for good?</source>
<translation>Voulez-vous vraiment supprimer définitivement lentrée « %1 »?</translation>
<translation>Souhaitez-vous vraiment supprimer définitivement lentrée « %1 »?</translation>
</message>
<message>
<source>Do you really want to move entry &quot;%1&quot; to the recycle bin?</source>
<translation>Voulez-vous vraiment déplacer lentrée « %1 » vers la corbeille?</translation>
<translation>Souhaitez-vous vraiment déplacer lentrée « %1 » vers la corbeille?</translation>
</message>
<message numerus="yes">
<source>Do you really want to move %n entry(s) to the recycle bin?</source>
<translation><numerusform>Voulez-vous vraiment déplacer %n entrée vers la corbeille?</numerusform><numerusform>Voulez-vous vraiment déplacer %n entrées vers la corbeille?</numerusform></translation>
<translation><numerusform>Souhaitez-vous vraiment déplacer %n entrée vers la corbeille?</numerusform><numerusform>Souhaitez-vous vraiment déplacer %n entrées vers la corbeille?</numerusform></translation>
</message>
<message>
<source>Execute command?</source>
@ -1998,7 +2006,7 @@ Cest très certainement un bogue, veuillez le signaler aux développeurs.</tr
</message>
<message>
<source>Do you really want to execute the following command?&lt;br&gt;&lt;br&gt;%1&lt;br&gt;</source>
<translation>Voulez-vous vraiment exécuter la commande suivante?&lt;br&gt;&lt;br&gt;%1&lt;br&gt;</translation>
<translation>Souhaitez-vous vraiment exécuter la commande suivante?&lt;br&gt;&lt;br&gt;%1&lt;br&gt;</translation>
</message>
<message>
<source>Remember my choice</source>
@ -2006,7 +2014,7 @@ Cest très certainement un bogue, veuillez le signaler aux développeurs.</tr
</message>
<message>
<source>Do you really want to delete the group &quot;%1&quot; for good?</source>
<translation>Voulez-vous vraiment supprimer définitivementle groupe « %1 »?</translation>
<translation>Souhaitez-vous vraiment supprimer définitivementle groupe « %1 »?</translation>
</message>
<message>
<source>No current database.</source>
@ -2030,7 +2038,7 @@ Cest très certainement un bogue, veuillez le signaler aux développeurs.</tr
</message>
<message>
<source>The database file has changed. Do you want to load the changes?</source>
<translation>Le fichier de la base de données a é modifiée. Voulez-vous charger les changements?</translation>
<translation>Le fichier de la base de données a é modifiée. Souhaitez-vous charger les changements?</translation>
</message>
<message>
<source>Merge Request</source>
@ -2040,7 +2048,7 @@ Cest très certainement un bogue, veuillez le signaler aux développeurs.</tr
<source>The database file has changed and you have unsaved changes.
Do you want to merge your changes?</source>
<translation>Le fichier de la base de données a é modifiée et vos changements ne sont pas enregistrés.
Voulez-vous fusionner vos changements?</translation>
Souhaitez-vous fusionner vos changements?</translation>
</message>
<message>
<source>Empty recycle bin?</source>
@ -2048,11 +2056,11 @@ Voulez-vous fusionner vos changements?</translation>
</message>
<message>
<source>Are you sure you want to permanently delete everything from your recycle bin?</source>
<translation>Voulez-vous vraiment vider définitivement la corbeille?</translation>
<translation>Souhaitez-vous vraiment vider définitivement la corbeille?</translation>
</message>
<message numerus="yes">
<source>Do you really want to delete %n entry(s) for good?</source>
<translation><numerusform>Voulez-vous vraiment supprimer %n entrée irrémédiablement?</numerusform><numerusform>Voulez-vous vraiment supprimer %n entrées irrémédiablement?</numerusform></translation>
<translation><numerusform>Souhaitez-vous vraiment supprimer %n entrée irrémédiablement?</numerusform><numerusform>Souhaitez-vous vraiment supprimer %n entrées irrémédiablement?</numerusform></translation>
</message>
<message numerus="yes">
<source>Delete entry(s)?</source>
@ -2120,7 +2128,7 @@ Désactiver les enregistrements sécurisés et ressayer?</translation>
</message>
<message numerus="yes">
<source>Entry &quot;%1&quot; has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway?</source>
<translation><numerusform>Lentrée « %1 » à %2 référence. Voulez-vous remplacer les références par les valeurs, ignorer cette entrée ou supprimer quand même?</numerusform><numerusform>Lentrée « %1 » à %2 références. Voulez-vous remplacer les références par les valeurs, ignorer cette entrée ou supprimer quand même?</numerusform></translation>
<translation><numerusform>Lentrée « %1 » à %2 référence. Souhaitez-vous remplacer les références par les valeurs, ignorer cette entrée ou supprimer quand même?</numerusform><numerusform>Lentrée « %1 » à %2 références. Souhaitez-vous remplacer les références par les valeurs, ignorer cette entrée ou supprimer quand même?</numerusform></translation>
</message>
<message>
<source>Delete group</source>
@ -2132,7 +2140,7 @@ Désactiver les enregistrements sécurisés et ressayer?</translation>
</message>
<message>
<source>Do you really want to move the group &quot;%1&quot; to the recycle bin?</source>
<translation>Voulez-vous vraiment déplacer le groupe « %1 » vers la corbeille?</translation>
<translation>Souhaitez-vous vraiment déplacer le groupe « %1 » vers la corbeille?</translation>
</message>
<message>
<source>Successfully merged the database files.</source>
@ -2223,7 +2231,7 @@ Désactiver les enregistrements sécurisés et ressayer?</translation>
</message>
<message>
<source>Are you sure you want to remove this attribute?</source>
<translation>Voulez-vous vraiment supprimer cet attribut?</translation>
<translation>Souhaitez-vous vraiment supprimer cet attribut?</translation>
</message>
<message>
<source>Tomorrow</source>
@ -2263,7 +2271,7 @@ Désactiver les enregistrements sécurisés et ressayer?</translation>
</message>
<message>
<source>Are you sure you want to remove this URL?</source>
<translation>Voulez-vous vraiment supprimer cette URL?</translation>
<translation>Souhaitez-vous vraiment supprimer cette URL?</translation>
</message>
<message>
<source>Reveal</source>
@ -2279,7 +2287,7 @@ Désactiver les enregistrements sécurisés et ressayer?</translation>
</message>
<message>
<source>Would you like to save changes to this entry?</source>
<translation>Voulez-vous enregistrer les modifications de cette entrée ?</translation>
<translation>Souhaitez-vous enregistrer les modifications de cette entrée ?</translation>
</message>
<message>
<source>[PROTECTED] Press Reveal to view or edit</source>
@ -2956,7 +2964,7 @@ Supported extensions are: %1.</source>
</message>
<message numerus="yes">
<source>This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it?</source>
<translation><numerusform>Cette icône est utilisée par %1 entrée et sera remplacée par licône par défaut. Voulez-vous vraiment la supprimer?</numerusform><numerusform>Cette icône est utilisée par %1 entrées et sera remplacée par licône par défaut. Voulez-vous vraiment la supprimer?</numerusform></translation>
<translation><numerusform>Cette icône est utilisée par %1 entrée et sera remplacée par licône par défaut. Souhaitez-vous vraiment la supprimer?</numerusform><numerusform>Cette icône est utilisée par %1 entrées et sera remplacée par licône par défaut. Souhaitez-vous vraiment la supprimer?</numerusform></translation>
</message>
<message>
<source>You can enable the DuckDuckGo website icon service under Tools -&gt; Settings -&gt; Security</source>
@ -3036,7 +3044,7 @@ Supported extensions are: %1.</source>
<message>
<source>Do you really want to delete the selected plugin data?
This may cause the affected plugins to malfunction.</source>
<translation>Voulez-vous vraiment supprimer les données dextension sélectionnées? Cela pourrait entraîner un mauvais fonctionnement des extensions touchées.</translation>
<translation>Souhaitez-vous vraiment supprimer les données dextension sélectionnées? Cela pourrait entraîner un mauvais fonctionnement des extensions touchées.</translation>
</message>
<message>
<source>Key</source>
@ -3117,7 +3125,7 @@ This may cause the affected plugins to malfunction.</source>
</message>
<message numerus="yes">
<source>Are you sure you want to remove %n attachment(s)?</source>
<translation><numerusform>Voulez-vous vraiment supprimer %n fichier joint?</numerusform><numerusform>Voulez-vous vraiment supprimer %n fichiers joints?</numerusform></translation>
<translation><numerusform>Souhaitez-vous vraiment supprimer %n fichier joint?</numerusform><numerusform>Souhaitez-vous vraiment supprimer %n fichiers joints?</numerusform></translation>
</message>
<message>
<source>Save attachments</source>
@ -3131,7 +3139,7 @@ This may cause the affected plugins to malfunction.</source>
</message>
<message>
<source>Are you sure you want to overwrite the existing file &quot;%1&quot; with the attachment?</source>
<translation>Voulez-vous vraiment remplacer le fichier existant « %1 » par le fichier joint?</translation>
<translation>Souhaitez-vous vraiment remplacer le fichier existant « %1 » par le fichier joint?</translation>
</message>
<message>
<source>Confirm overwrite</source>
@ -4382,7 +4390,7 @@ Message : %2</translation>
<source>The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever.
Are you sure you want to continue with this file?</source>
<translation>Le fichier clé sélectionné semble être un fichier de base de données de mots de passe. Un fichier clé doit être un fichier statique qui ne change jamais, ou vous perdrez irrémédiablement laccès à votre base de données.
Voulez-vous vraiment poursuivre avec ce fichier?</translation>
Souhaitez-vous vraiment poursuivre avec ce fichier?</translation>
</message>
<message>
<source>You are using a legacy key file format which may become
@ -4562,7 +4570,7 @@ Attendez-vous à des bogues et des problèmes mineurs. Cette version nest pas
</message>
<message>
<source>Would you like KeePassXC to check for updates on startup?</source>
<translation>Voulez-vous que KeePassXC vérifie la présence de mises à jour au démarrage?</translation>
<translation>Souhaitez-vous que KeePassXC vérifie la présence de mises à jour au démarrage?</translation>
</message>
<message>
<source>You can always check for updates manually from the application menu.</source>
@ -4836,6 +4844,26 @@ Attendez-vous à des bogues et des problèmes mineurs. Cette version nest pas
<source>You must restart the application to apply this setting. Would you like to restart now?</source>
<translation>Pour appliquer ce paramètre, vous devez redémarrer lapplication. Souhaitez-vous la démarrer maintenant?</translation>
</message>
<message>
<source>Perform Auto-Type Sequence</source>
<translation>Effectuer une séquence de saisie automatique</translation>
</message>
<message>
<source>{USERNAME}</source>
<translation>{NOMDUTILISATEUR}</translation>
</message>
<message>
<source>{USERNAME}{ENTER}</source>
<translation>{NOMDUTILISATEUR}{ENTRÉE}</translation>
</message>
<message>
<source>{PASSWORD}</source>
<translation>{MOTDEPASSE}</translation>
</message>
<message>
<source>{PASSWORD}{ENTER}</source>
<translation>{MOTDEPASSE}{ENTRÉE}</translation>
</message>
</context>
<context>
<name>ManageDatabase</name>
@ -5320,10 +5348,6 @@ Attendez-vous à des bogues et des problèmes mineurs. Cette version nest pas
<comment>Password quality</comment>
<translation>Excellent</translation>
</message>
<message>
<source>ExtendedASCII</source>
<translation>ASCII étendu</translation>
</message>
<message>
<source>Switch to advanced mode</source>
<translation>Basculer vers le mode avancé</translation>
@ -5332,58 +5356,22 @@ Attendez-vous à des bogues et des problèmes mineurs. Cette version nest pas
<source>Advanced</source>
<translation>Avancé</translation>
</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>
<source>Braces</source>
<translation>Accolades</translation>
</message>
<message>
<source>{[(</source>
<translation>{[(</translation>
</message>
<message>
<source>Punctuation</source>
<translation>Ponctuation</translation>
</message>
<message>
<source>.,:;</source>
<translation>.,:;</translation>
</message>
<message>
<source>Quotes</source>
<translation>Guillemets</translation>
</message>
<message>
<source>&quot; &apos;</source>
<translation>&quot; </translation>
</message>
<message>
<source>&lt;*+!?=</source>
<translation>&lt;*+!?=</translation>
</message>
<message>
<source>\_|-/</source>
<translation>\_|-/</translation>
</message>
<message>
<source>Logograms</source>
<translation>Logogramme</translation>
</message>
<message>
<source>#$%&amp;&amp;@^`~</source>
<translation>#$%&amp;&amp;@^`~</translation>
</message>
<message>
<source>Character set to exclude from generated password</source>
<translation>Ensemble de caractères à exclure du mot de passe généré</translation>
@ -5504,6 +5492,10 @@ Attendez-vous à des bogues et des problèmes mineurs. Cette version nest pas
<source>Regenerate password (%1)</source>
<translation>Régénérer le mot de passe (%1)</translation>
</message>
<message>
<source>Special Characters</source>
<translation>Caractères spéciaux</translation>
</message>
</context>
<context>
<name>QApplication</name>
@ -6702,7 +6694,7 @@ Noyau : %3 %4</translation>
</message>
<message>
<source>Do you want to create a database with an empty password? [y/N]: </source>
<translation>Voulez-vous créer une base de données avec un mot de passe vide ? [o/N] :</translation>
<translation>Souhaitez-vous créer une base de données avec un mot de passe vide ? [o/N] :</translation>
</message>
<message>
<source>Repeat password: </source>
@ -7365,7 +7357,7 @@ Noyau : %3 %4</translation>
</message>
<message>
<source>The exported certificate is not the same as the one in use. Do you want to export the current certificate?</source>
<translation>Le certificat exporté est différent de celui en cours dutilisation. Voulez-vous exporter le certificat actuel?</translation>
<translation>Le certificat exporté est différent de celui en cours dutilisation. Souhaitez-vous exporter le certificat actuel?</translation>
</message>
<message>
<source>Signer:</source>
@ -7471,7 +7463,7 @@ Noyau : %3 %4</translation>
</message>
<message>
<source>We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1?</source>
<translation>Nous ne pouvons vérifier la source du conteneur partagé, car il nest pas signé. Voulez-vous vraiment importer de %1?</translation>
<translation>Nous ne pouvons vérifier la source du conteneur partagé, car il nest pas signé. Souhaitez-vous vraiment importer de %1?</translation>
</message>
<message>
<source>Import from container with certificate</source>
@ -7479,7 +7471,7 @@ Noyau : %3 %4</translation>
</message>
<message>
<source>Do you want to trust %1 with the fingerprint of %2 from %3?</source>
<translation>Voulez-vous autoriser %1 avec lempreinte de %2 à %3? {1 ?} {2 ?}</translation>
<translation>Souhaitez-vous autoriser %1 avec lempreinte de %2 à %3? {1 ?} {2 ?}</translation>
</message>
<message>
<source>Not this time</source>
@ -7683,7 +7675,7 @@ Exemple : JBSWY3DPEHPK3PXP</translation>
</message>
<message>
<source>Are you sure you want to delete TOTP settings for this entry?</source>
<translation>Voulez-vous vraiment supprimer les paramètres TOTP pour cette entrée?</translation>
<translation>Souhaitez-vous vraiment supprimer les paramètres TOTP pour cette entrée?</translation>
</message>
</context>
<context>

View File

@ -135,6 +135,10 @@
<source>Colorful</source>
<translation>Színes</translation>
</message>
<message>
<source>You must restart the application to set the new language. Would you like to restart now?</source>
<translation>Az új nyelv beállításának az érvényre kerüléséhez újra kell indítani az alkalmazást. Legyen azonnal újraindítva?</translation>
</message>
</context>
<context>
<name>ApplicationSettingsWidgetGeneral</name>
@ -166,10 +170,6 @@
<source>Automatically save after every change</source>
<translation>Automatikus mentés minden módosítás után</translation>
</message>
<message>
<source>Automatically save on exit</source>
<translation>Automatikus mentés kilépéskor</translation>
</message>
<message>
<source>Automatically reload the database when modified externally</source>
<translation>Külső módosításkor az adatbázis automatikus újratöltése</translation>
@ -304,10 +304,6 @@
<source>Automatically launch KeePassXC at system startup</source>
<translation>KeePassXC automatikus indítása a rendszer indulásakor</translation>
</message>
<message>
<source>Mark database as modified for non-data changes (e.g., expanding groups)</source>
<translation>Nem adatjellegű változások (pl. csoport lenyitása) esetén az adatbázis megjelölése módosítottként</translation>
</message>
<message>
<source>Safely save database files (disable if experiencing problems with Dropbox, etc.)</source>
<translation>Adatbázisok biztonságos mentése (Dropbox-szal és hasonlókkal való probléma esetén letiltandó)</translation>
@ -344,6 +340,18 @@
<source>Auto-Type start delay:</source>
<translation>Automatikus beírás kezdésének késleltetése:</translation>
</message>
<message>
<source>Automatically save when locking database</source>
<translation>Automatikus mentés adatbázis zárolásakor</translation>
</message>
<message>
<source>Automatically save non-data changes when locking database</source>
<translation>Nem adatváltozások automatikus mentése adatbázis zárolásakor</translation>
</message>
<message>
<source>Tray icon type</source>
<translation>Tálcaikon stílusa</translation>
</message>
</context>
<context>
<name>ApplicationSettingsWidgetSecurity</name>
@ -4837,6 +4845,26 @@ Néhány hiba és kisebb nehézségek várhatóak, ezért ez a verzió nem aján
<source>You must restart the application to apply this setting. Would you like to restart now?</source>
<translation>Ennek a beállításnak az érvényre kerüléséhez újra kell indítani az alkalmazást. Legyen azonnal újraindítva?</translation>
</message>
<message>
<source>Perform Auto-Type Sequence</source>
<translation>Automatikus beírási sorrend végrehajtása</translation>
</message>
<message>
<source>{USERNAME}</source>
<translation type="unfinished"/>
</message>
<message>
<source>{USERNAME}{ENTER}</source>
<translation type="unfinished"/>
</message>
<message>
<source>{PASSWORD}</source>
<translation type="unfinished"/>
</message>
<message>
<source>{PASSWORD}{ENTER}</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>ManageDatabase</name>
@ -5321,10 +5349,6 @@ Néhány hiba és kisebb nehézségek várhatóak, ezért ez a verzió nem aján
<comment>Password quality</comment>
<translation>Kiváló</translation>
</message>
<message>
<source>ExtendedASCII</source>
<translation>Bővített ASCII</translation>
</message>
<message>
<source>Switch to advanced mode</source>
<translation>Váltás speciális módba</translation>
@ -5333,58 +5357,22 @@ Néhány hiba és kisebb nehézségek várhatóak, ezért ez a verzió nem aján
<source>Advanced</source>
<translation>Speciális</translation>
</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>
<source>Braces</source>
<translation>Zárójelek</translation>
</message>
<message>
<source>{[(</source>
<translation>{[(</translation>
</message>
<message>
<source>Punctuation</source>
<translation>Központozás</translation>
</message>
<message>
<source>.,:;</source>
<translation>.,:;</translation>
</message>
<message>
<source>Quotes</source>
<translation>Idézőjelek</translation>
</message>
<message>
<source>&quot; &apos;</source>
<translation>&quot; &apos;</translation>
</message>
<message>
<source>&lt;*+!?=</source>
<translation>&lt;*+!?=</translation>
</message>
<message>
<source>\_|-/</source>
<translation>\_|-/</translation>
</message>
<message>
<source>Logograms</source>
<translation>Logogramok</translation>
</message>
<message>
<source>#$%&amp;&amp;@^`~</source>
<translation>#$%&amp;&amp;@^`~</translation>
</message>
<message>
<source>Character set to exclude from generated password</source>
<translation>A jelszó előállításnál kihagyandó karakterkészletek</translation>
@ -5505,6 +5493,10 @@ Néhány hiba és kisebb nehézségek várhatóak, ezért ez a verzió nem aján
<source>Regenerate password (%1)</source>
<translation>Jelszó újraelőállítása (%1)</translation>
</message>
<message>
<source>Special Characters</source>
<translation>Speciális karakterek</translation>
</message>
</context>
<context>
<name>QApplication</name>

View File

@ -135,6 +135,10 @@
<source>Colorful</source>
<translation>Berwarna</translation>
</message>
<message>
<source>You must restart the application to set the new language. Would you like to restart now?</source>
<translation>Anda harus memulai ulang aplikasi untuk menerapkan bahasa. Apakah anda ingin memulai ulang sekarang?</translation>
</message>
</context>
<context>
<name>ApplicationSettingsWidgetGeneral</name>
@ -166,10 +170,6 @@
<source>Automatically save after every change</source>
<translation>Otomatis simpan setelah setiap perubahan</translation>
</message>
<message>
<source>Automatically save on exit</source>
<translation>Otomatis simpan ketika keluar</translation>
</message>
<message>
<source>Automatically reload the database when modified externally</source>
<translation>Muat ulang basisdata secara otomatis ketika diubah secara eksternal</translation>
@ -304,10 +304,6 @@
<source>Automatically launch KeePassXC at system startup</source>
<translation>Otomatis jalankan KeePassXC pada saat perangkat dinyalakan</translation>
</message>
<message>
<source>Mark database as modified for non-data changes (e.g., expanding groups)</source>
<translation>Tandai basisdata telah diubah untuk perubahan non-data (mis. melebarkan grup)</translation>
</message>
<message>
<source>Safely save database files (disable if experiencing problems with Dropbox, etc.)</source>
<translation>Simpan berkas basisdata secara aman (nonaktifkan jika anda mengalami masalah dengan Dropbox, dll.)</translation>
@ -344,6 +340,18 @@
<source>Auto-Type start delay:</source>
<translation>Tundaan mulai Ketik-Otomatis:</translation>
</message>
<message>
<source>Automatically save when locking database</source>
<translation>Otomatis simpan saat mengunci basisdata</translation>
</message>
<message>
<source>Automatically save non-data changes when locking database</source>
<translation>Otomatis simpan perubahan non-data saat mengunci basisdata</translation>
</message>
<message>
<source>Tray icon type</source>
<translation>Tipe ikon baki</translation>
</message>
</context>
<context>
<name>ApplicationSettingsWidgetSecurity</name>
@ -1335,7 +1343,7 @@ Jika anda tidak memiliki berkas kunci, biarkan ruas tetap kosong.</translation>
</message>
<message>
<source>Key file to unlock the database</source>
<translation type="unfinished"/>
<translation>Berkas kunci untuk membuka basisdata</translation>
</message>
<message>
<source>Please touch the button on your YubiKey!</source>
@ -3002,7 +3010,7 @@ Ekstensi yang didukung adalah: %1.</translation>
</message>
<message>
<source>Apply to this group only</source>
<translation type="unfinished"/>
<translation>Hanya terapkan ke grup ini</translation>
</message>
</context>
<context>
@ -4837,6 +4845,26 @@ Jangan kaget jika ada masalah dan bug, versi ini tidak ditujukan untuk penggunaa
<source>You must restart the application to apply this setting. Would you like to restart now?</source>
<translation>Anda harus memulai ulang aplikasi untuk menerapkan pengaturan ini. Apakah anda ingin memulai ulang sekarang?</translation>
</message>
<message>
<source>Perform Auto-Type Sequence</source>
<translation type="unfinished"/>
</message>
<message>
<source>{USERNAME}</source>
<translation type="unfinished"/>
</message>
<message>
<source>{USERNAME}{ENTER}</source>
<translation type="unfinished"/>
</message>
<message>
<source>{PASSWORD}</source>
<translation type="unfinished"/>
</message>
<message>
<source>{PASSWORD}{ENTER}</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>ManageDatabase</name>
@ -5320,10 +5348,6 @@ Jangan kaget jika ada masalah dan bug, versi ini tidak ditujukan untuk penggunaa
<comment>Password quality</comment>
<translation>Sempurna</translation>
</message>
<message>
<source>ExtendedASCII</source>
<translation>ASCIILanjutan</translation>
</message>
<message>
<source>Switch to advanced mode</source>
<translation>Beralih ke mode lanjutan</translation>
@ -5332,58 +5356,22 @@ Jangan kaget jika ada masalah dan bug, versi ini tidak ditujukan untuk penggunaa
<source>Advanced</source>
<translation>Tingkat Lanjut</translation>
</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>
<source>Braces</source>
<translation>Tanda Kurung</translation>
</message>
<message>
<source>{[(</source>
<translation>{[(</translation>
</message>
<message>
<source>Punctuation</source>
<translation>Tanda Baca</translation>
</message>
<message>
<source>.,:;</source>
<translation>.,:;</translation>
</message>
<message>
<source>Quotes</source>
<translation>Tanda Petik</translation>
</message>
<message>
<source>&quot; &apos;</source>
<translation>&quot; &apos;</translation>
</message>
<message>
<source>&lt;*+!?=</source>
<translation>&lt;*+!?=</translation>
</message>
<message>
<source>\_|-/</source>
<translation>\_|-/</translation>
</message>
<message>
<source>Logograms</source>
<translation>Logogram</translation>
</message>
<message>
<source>#$%&amp;&amp;@^`~</source>
<translation>#$%&amp;&amp;@^`~</translation>
</message>
<message>
<source>Character set to exclude from generated password</source>
<translation>Karakter yang dikecualikan dari sandi yang dibuat</translation>
@ -5504,6 +5492,10 @@ Jangan kaget jika ada masalah dan bug, versi ini tidak ditujukan untuk penggunaa
<source>Regenerate password (%1)</source>
<translation>Buat ulang sandi (%1)</translation>
</message>
<message>
<source>Special Characters</source>
<translation>Karakter Spesial</translation>
</message>
</context>
<context>
<name>QApplication</name>

View File

@ -135,6 +135,10 @@
<source>Colorful</source>
<translation>Colorato</translation>
</message>
<message>
<source>You must restart the application to set the new language. Would you like to restart now?</source>
<translation>È necessario riavviare l&apos;applicazione per impostare la nuova lingua. Vuoi riavviare ora?</translation>
</message>
</context>
<context>
<name>ApplicationSettingsWidgetGeneral</name>
@ -166,10 +170,6 @@
<source>Automatically save after every change</source>
<translation>Salva automaticamente dopo ogni modifica</translation>
</message>
<message>
<source>Automatically save on exit</source>
<translation>Salva automaticamente all&apos;uscita</translation>
</message>
<message>
<source>Automatically reload the database when modified externally</source>
<translation>Ricarica automaticamente il database quando ci sono modifiche esterne</translation>
@ -290,24 +290,20 @@
</message>
<message>
<source>Global auto-type shortcut</source>
<translation>Scorciatoia globale di tipo automatico</translation>
<translation>Scorciatoia globale per il completamento automatico</translation>
</message>
<message>
<source>Auto-type character typing delay milliseconds</source>
<translation>Ritardo in millisecondi di digitazione automatica dei caratteri</translation>
<translation>Ritardo in millisecondi del completamento automatico dei caratteri</translation>
</message>
<message>
<source>Auto-type start delay milliseconds</source>
<translation>Ritardo di avvio in millisecondi della digitazione automatica</translation>
<translation>Ritardo di avvio in millisecondi dell completamento automatico</translation>
</message>
<message>
<source>Automatically launch KeePassXC at system startup</source>
<translation>Avvia automaticamente KeePassXC all&apos;avvio del sistema</translation>
</message>
<message>
<source>Mark database as modified for non-data changes (e.g., expanding groups)</source>
<translation>Contrassegnare il database come modificato per modifiche non riguardanti i dati (ad es. espansione dei gruppi)</translation>
</message>
<message>
<source>Safely save database files (disable if experiencing problems with Dropbox, etc.)</source>
<translation>Salva in modo sicuro i file di database (disabilita se riscontra problemi con Dropbox, ecc.)</translation>
@ -334,7 +330,7 @@
</message>
<message>
<source>Auto-Type typing delay:</source>
<translation>Ritardo di digitazione automatica:</translation>
<translation>Ritardo del completamento automatico:</translation>
</message>
<message>
<source>Global Auto-Type shortcut:</source>
@ -344,6 +340,18 @@
<source>Auto-Type start delay:</source>
<translation>Ritardo avvio auto-completamento:</translation>
</message>
<message>
<source>Automatically save when locking database</source>
<translation>Salva automaticamente durante il blocco del database</translation>
</message>
<message>
<source>Automatically save non-data changes when locking database</source>
<translation>Salva automaticamente le modifiche non apportate ai dati durante il blocco del database</translation>
</message>
<message>
<source>Tray icon type</source>
<translation>Tipo di icona vassoio</translation>
</message>
</context>
<context>
<name>ApplicationSettingsWidgetSecurity</name>
@ -478,7 +486,7 @@
</message>
<message>
<source>KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC.</source>
<translation>KeePassXC richiede il permesso di Accessibilità per effettuare l&apos;Auto-Type di livello base. Se hai già concesso il permesso, riavvia KeePassXC.</translation>
<translation>KeePassXC richiede il permesso di Accessibilità per effettuare l&apos;auto-completamento di livello base. Se hai già concesso il permesso, riavvia KeePassXC.</translation>
</message>
</context>
<context>
@ -534,7 +542,7 @@
</message>
<message>
<source>KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC.</source>
<translation>KeePasssXC richiede il permesso di Accessibilità e di Registrazione Schermo per effettuare l&apos;Auto-Type globale. La registrazione dello schermo è necessaria per usare il titolo della finestra al fine di trovare le voci corrispondenti. Se hai già concesso il permesso, riavvia KeePassXC.</translation>
<translation>KeePasssXC richiede il permesso di Accessibilità e di Registrazione Schermo per effettuare l&apos;auto-completamento globale. La registrazione dello schermo è necessaria per usare il titolo della finestra al fine di trovare le voci corrispondenti. Se hai già concesso il permesso, riavvia KeePassXC.</translation>
</message>
</context>
<context>
@ -2398,11 +2406,11 @@ Disabilitare i salvataggi sicuri e riprovare?</translation>
</message>
<message>
<source>Custom Auto-Type sequence</source>
<translation>Sequenza di tipo automatico personalizzata</translation>
<translation>Sequenza personalizzata di completamento automatico</translation>
</message>
<message>
<source>Open Auto-Type help webpage</source>
<translation>Aprire la pagina Web di aiuto per le sequenze automatiche</translation>
<translation>Aprire la pagina Web di aiuto per i completamenti automatici</translation>
</message>
<message>
<source>Existing window associations</source>
@ -2430,15 +2438,15 @@ Disabilitare i salvataggi sicuri e riprovare?</translation>
</message>
<message>
<source>Custom Auto-Type sequence for this window</source>
<translation>Sequenza di tipo automatico personalizzata per questa finestra</translation>
<translation>Sequenza personalizzata del completamento automatico per questa finestra</translation>
</message>
<message>
<source>Inherit default Auto-Type sequence from the group</source>
<translation>Eredita la sequenza predefinita di Auto-Type dal gruppo</translation>
<translation>Eredita la sequenza predefinita di auto-completamento dal gruppo</translation>
</message>
<message>
<source>Use custom Auto-Type sequence:</source>
<translation>Usa sequenza personalizzata di Auto-Type:</translation>
<translation>Usa sequenza personalizzata di auto-completamento:</translation>
</message>
</context>
<context>
@ -2875,7 +2883,7 @@ Le estensioni supportate sono: %1.</translation>
</message>
<message>
<source>Default auto-type sequence field</source>
<translation>Campo di sequenza di tipo automatico predefinito</translation>
<translation>Campo della sequenza del completamento automatico predefinito</translation>
</message>
<message>
<source>Expires:</source>
@ -2887,7 +2895,7 @@ Le estensioni supportate sono: %1.</translation>
</message>
<message>
<source>Auto-Type:</source>
<translation>Digitazione automatica:</translation>
<translation>Completamento automatico:</translation>
</message>
<message>
<source>Search:</source>
@ -2903,7 +2911,7 @@ Le estensioni supportate sono: %1.</translation>
</message>
<message>
<source>Set default Auto-Type sequence</source>
<translation>Impostare la sequenza di tipo automatico predefinita</translation>
<translation>Impostare la sequenza predefinita del completamento automatico</translation>
</message>
</context>
<context>
@ -4540,7 +4548,7 @@ Si consiglia di utilizzare l&apos;AppImage disponibile sulla nostra pagina di do
</message>
<message>
<source>Perform &amp;Auto-Type</source>
<translation>Eseguire compilazione &amp;automatica</translation>
<translation>Eseguire completamento &amp;automatico</translation>
</message>
<message>
<source>Open &amp;URL</source>
@ -4840,6 +4848,26 @@ Aspettatevi alcuni bug e problemi minori, questa versione non è destinata all&a
<source>You must restart the application to apply this setting. Would you like to restart now?</source>
<translation>È necessario riavviare l&apos;applicazione per applicare questa impostazione. Vuoi riavviare ora?</translation>
</message>
<message>
<source>Perform Auto-Type Sequence</source>
<translation>Esegui la sequenza di completamento automatico</translation>
</message>
<message>
<source>{USERNAME}</source>
<translation>{NOMEUSER)</translation>
</message>
<message>
<source>{USERNAME}{ENTER}</source>
<translation>{NOMEUSER}{ENTER}</translation>
</message>
<message>
<source>{PASSWORD}</source>
<translation>{PASSWORD}</translation>
</message>
<message>
<source>{PASSWORD}{ENTER}</source>
<translation>{PASSWORD}{ENTER}</translation>
</message>
</context>
<context>
<name>ManageDatabase</name>
@ -5324,10 +5352,6 @@ Aspettatevi alcuni bug e problemi minori, questa versione non è destinata all&a
<comment>Password quality</comment>
<translation>Eccellente</translation>
</message>
<message>
<source>ExtendedASCII</source>
<translation>ASCII esteso</translation>
</message>
<message>
<source>Switch to advanced mode</source>
<translation>Passare alla modalità avanzata</translation>
@ -5336,58 +5360,22 @@ Aspettatevi alcuni bug e problemi minori, questa versione non è destinata all&a
<source>Advanced</source>
<translation>Avanzate</translation>
</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>
<source>Braces</source>
<translation>Parentesi graffe</translation>
</message>
<message>
<source>{[(</source>
<translation>{[(</translation>
</message>
<message>
<source>Punctuation</source>
<translation>Punteggiatura</translation>
</message>
<message>
<source>.,:;</source>
<translation>.,:;</translation>
</message>
<message>
<source>Quotes</source>
<translation>Citazioni</translation>
</message>
<message>
<source>&quot; &apos;</source>
<translation>&quot; &apos;</translation>
</message>
<message>
<source>&lt;*+!?=</source>
<translation>&lt;*+!?=</translation>
</message>
<message>
<source>\_|-/</source>
<translation>\_|-/</translation>
</message>
<message>
<source>Logograms</source>
<translation>Logogrammi</translation>
</message>
<message>
<source>#$%&amp;&amp;@^`~</source>
<translation>#$%&amp;&amp;@^`~</translation>
</message>
<message>
<source>Character set to exclude from generated password</source>
<translation>Set di caratteri da escludere dalla password generata</translation>
@ -5508,6 +5496,10 @@ Aspettatevi alcuni bug e problemi minori, questa versione non è destinata all&a
<source>Regenerate password (%1)</source>
<translation>Rigenera password (%1)</translation>
</message>
<message>
<source>Special Characters</source>
<translation>Caratteri speciali</translation>
</message>
</context>
<context>
<name>QApplication</name>

View File

@ -135,6 +135,10 @@
<source>Colorful</source>
<translation></translation>
</message>
<message>
<source>You must restart the application to set the new language. Would you like to restart now?</source>
<translation></translation>
</message>
</context>
<context>
<name>ApplicationSettingsWidgetGeneral</name>
@ -166,10 +170,6 @@
<source>Automatically save after every change</source>
<translation></translation>
</message>
<message>
<source>Automatically save on exit</source>
<translation></translation>
</message>
<message>
<source>Automatically reload the database when modified externally</source>
<translation></translation>
@ -304,10 +304,6 @@
<source>Automatically launch KeePassXC at system startup</source>
<translation> KeePassXC </translation>
</message>
<message>
<source>Mark database as modified for non-data changes (e.g., expanding groups)</source>
<translation> () </translation>
</message>
<message>
<source>Safely save database files (disable if experiencing problems with Dropbox, etc.)</source>
<translation> (Dropbox )</translation>
@ -344,6 +340,18 @@
<source>Auto-Type start delay:</source>
<translation>:</translation>
</message>
<message>
<source>Automatically save when locking database</source>
<translation></translation>
</message>
<message>
<source>Automatically save non-data changes when locking database</source>
<translation></translation>
</message>
<message>
<source>Tray icon type</source>
<translation></translation>
</message>
</context>
<context>
<name>ApplicationSettingsWidgetSecurity</name>
@ -4839,6 +4847,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>
<translation></translation>
</message>
<message>
<source>Perform Auto-Type Sequence</source>
<translation></translation>
</message>
<message>
<source>{USERNAME}</source>
<translation>{USERNAME}</translation>
</message>
<message>
<source>{USERNAME}{ENTER}</source>
<translation>{USERNAME}{ENTER}</translation>
</message>
<message>
<source>{PASSWORD}</source>
<translation>{PASSWORD}</translation>
</message>
<message>
<source>{PASSWORD}{ENTER}</source>
<translation>{PASSWORD}{ENTER}</translation>
</message>
</context>
<context>
<name>ManageDatabase</name>
@ -5323,10 +5351,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<comment>Password quality</comment>
<translation></translation>
</message>
<message>
<source>ExtendedASCII</source>
<translation> ASCII</translation>
</message>
<message>
<source>Switch to advanced mode</source>
<translation></translation>
@ -5335,58 +5359,22 @@ Expect some bugs and minor issues, this version is not meant for production use.
<source>Advanced</source>
<translation></translation>
</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>
<source>Braces</source>
<translation></translation>
</message>
<message>
<source>{[(</source>
<translation>{[(</translation>
</message>
<message>
<source>Punctuation</source>
<translation></translation>
</message>
<message>
<source>.,:;</source>
<translation>.,:;</translation>
</message>
<message>
<source>Quotes</source>
<translation></translation>
</message>
<message>
<source>&quot; &apos;</source>
<translation>&quot; &apos;</translation>
</message>
<message>
<source>&lt;*+!?=</source>
<translation>&lt;*+!?=</translation>
</message>
<message>
<source>\_|-/</source>
<translation>\_|-/</translation>
</message>
<message>
<source>Logograms</source>
<translation></translation>
</message>
<message>
<source>#$%&amp;&amp;@^`~</source>
<translation>#$%&amp;&amp;@^`~</translation>
</message>
<message>
<source>Character set to exclude from generated password</source>
<translation></translation>
@ -5507,6 +5495,10 @@ Expect some bugs and minor issues, this version is not meant for production use.
<source>Regenerate password (%1)</source>
<translation> (%1)</translation>
</message>
<message>
<source>Special Characters</source>
<translation></translation>
</message>
</context>
<context>
<name>QApplication</name>

View File

@ -135,6 +135,10 @@
<source>Colorful</source>
<translation></translation>
</message>
<message>
<source>You must restart the application to set the new language. Would you like to restart now?</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>ApplicationSettingsWidgetGeneral</name>
@ -166,10 +170,6 @@
<source>Automatically save after every change</source>
<translation> </translation>
</message>
<message>
<source>Automatically save on exit</source>
<translation> </translation>
</message>
<message>
<source>Automatically reload the database when modified externally</source>
<translation> </translation>
@ -304,10 +304,6 @@
<source>Automatically launch KeePassXC at system startup</source>
<translation> KeePassXC </translation>
</message>
<message>
<source>Mark database as modified for non-data changes (e.g., expanding groups)</source>
<translation> (: 그룹 )</translation>
</message>
<message>
<source>Safely save database files (disable if experiencing problems with Dropbox, etc.)</source>
<translation> (Dropbox )</translation>
@ -344,6 +340,18 @@
<source>Auto-Type start delay:</source>
<translation> :</translation>
</message>
<message>
<source>Automatically save when locking database</source>
<translation type="unfinished"/>
</message>
<message>
<source>Automatically save non-data changes when locking database</source>
<translation type="unfinished"/>
</message>
<message>
<source>Tray icon type</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>ApplicationSettingsWidgetSecurity</name>
@ -4839,6 +4847,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>
<translation> . ?</translation>
</message>
<message>
<source>Perform Auto-Type Sequence</source>
<translation type="unfinished"/>
</message>
<message>
<source>{USERNAME}</source>
<translation type="unfinished"/>
</message>
<message>
<source>{USERNAME}{ENTER}</source>
<translation type="unfinished"/>
</message>
<message>
<source>{PASSWORD}</source>
<translation type="unfinished"/>
</message>
<message>
<source>{PASSWORD}{ENTER}</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>ManageDatabase</name>
@ -5323,10 +5351,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<comment>Password quality</comment>
<translation> </translation>
</message>
<message>
<source>ExtendedASCII</source>
<translation> ASCII</translation>
</message>
<message>
<source>Switch to advanced mode</source>
<translation> </translation>
@ -5335,58 +5359,22 @@ Expect some bugs and minor issues, this version is not meant for production use.
<source>Advanced</source>
<translation></translation>
</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>
<source>Braces</source>
<translation></translation>
</message>
<message>
<source>{[(</source>
<translation>{[(</translation>
</message>
<message>
<source>Punctuation</source>
<translation></translation>
</message>
<message>
<source>.,:;</source>
<translation>.,:;</translation>
</message>
<message>
<source>Quotes</source>
<translation></translation>
</message>
<message>
<source>&quot; &apos;</source>
<translation>&quot; &apos;</translation>
</message>
<message>
<source>&lt;*+!?=</source>
<translation>&lt;*+!?=</translation>
</message>
<message>
<source>\_|-/</source>
<translation>\_|-/</translation>
</message>
<message>
<source>Logograms</source>
<translation></translation>
</message>
<message>
<source>#$%&amp;&amp;@^`~</source>
<translation>#$%&amp;&amp;@^`~</translation>
</message>
<message>
<source>Character set to exclude from generated password</source>
<translation> </translation>
@ -5507,6 +5495,10 @@ Expect some bugs and minor issues, this version is not meant for production use.
<source>Regenerate password (%1)</source>
<translation> (%1)</translation>
</message>
<message>
<source>Special Characters</source>
<translation> </translation>
</message>
</context>
<context>
<name>QApplication</name>

View File

@ -135,6 +135,10 @@
<source>Colorful</source>
<translation type="unfinished"/>
</message>
<message>
<source>You must restart the application to set the new language. Would you like to restart now?</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>ApplicationSettingsWidgetGeneral</name>
@ -166,10 +170,6 @@
<source>Automatically save after every change</source>
<translation>Automatiškai įrašyti po kiekvieno pakeitimo</translation>
</message>
<message>
<source>Automatically save on exit</source>
<translation>Išeinant, automatiškai įrašyti</translation>
</message>
<message>
<source>Automatically reload the database when modified externally</source>
<translation>Išoriškai modifikavus duomenų bazę, automatiškai įkelti naujo</translation>
@ -304,10 +304,6 @@
<source>Automatically launch KeePassXC at system startup</source>
<translation type="unfinished"/>
</message>
<message>
<source>Mark database as modified for non-data changes (e.g., expanding groups)</source>
<translation type="unfinished"/>
</message>
<message>
<source>Safely save database files (disable if experiencing problems with Dropbox, etc.)</source>
<translation type="unfinished"/>
@ -344,6 +340,18 @@
<source>Auto-Type start delay:</source>
<translation type="unfinished"/>
</message>
<message>
<source>Automatically save when locking database</source>
<translation type="unfinished"/>
</message>
<message>
<source>Automatically save non-data changes when locking database</source>
<translation type="unfinished"/>
</message>
<message>
<source>Tray icon type</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>ApplicationSettingsWidgetSecurity</name>
@ -4787,6 +4795,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>
<translation type="unfinished"/>
</message>
<message>
<source>Perform Auto-Type Sequence</source>
<translation type="unfinished"/>
</message>
<message>
<source>{USERNAME}</source>
<translation type="unfinished"/>
</message>
<message>
<source>{USERNAME}{ENTER}</source>
<translation type="unfinished"/>
</message>
<message>
<source>{PASSWORD}</source>
<translation type="unfinished"/>
</message>
<message>
<source>{PASSWORD}{ENTER}</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>ManageDatabase</name>
@ -5270,10 +5298,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<comment>Password quality</comment>
<translation>Puikus</translation>
</message>
<message>
<source>ExtendedASCII</source>
<translation type="unfinished"/>
</message>
<message>
<source>Switch to advanced mode</source>
<translation>Perjungti į išplėstinę veikseną</translation>
@ -5282,58 +5306,22 @@ Expect some bugs and minor issues, this version is not meant for production use.
<source>Advanced</source>
<translation>Išplėstiniai</translation>
</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>
<source>Braces</source>
<translation type="unfinished"/>
</message>
<message>
<source>{[(</source>
<translation>{[(</translation>
</message>
<message>
<source>Punctuation</source>
<translation type="unfinished"/>
</message>
<message>
<source>.,:;</source>
<translation>.,:;</translation>
</message>
<message>
<source>Quotes</source>
<translation>Kabutės</translation>
</message>
<message>
<source>&quot; &apos;</source>
<translation>&quot; &apos;</translation>
</message>
<message>
<source>&lt;*+!?=</source>
<translation>&lt;*+!?=</translation>
</message>
<message>
<source>\_|-/</source>
<translation>\_|-/</translation>
</message>
<message>
<source>Logograms</source>
<translation type="unfinished"/>
</message>
<message>
<source>#$%&amp;&amp;@^`~</source>
<translation>#$%&amp;&amp;@^`~</translation>
</message>
<message>
<source>Character set to exclude from generated password</source>
<translation type="unfinished"/>
@ -5454,6 +5442,10 @@ Expect some bugs and minor issues, this version is not meant for production use.
<source>Regenerate password (%1)</source>
<translation type="unfinished"/>
</message>
<message>
<source>Special Characters</source>
<translation>Specialūs simboliai</translation>
</message>
</context>
<context>
<name>QApplication</name>

View File

@ -135,6 +135,10 @@
<source>Colorful</source>
<translation type="unfinished"/>
</message>
<message>
<source>You must restart the application to set the new language. Would you like to restart now?</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>ApplicationSettingsWidgetGeneral</name>
@ -166,10 +170,6 @@
<source>Automatically save after every change</source>
<translation>Lagre automatisk etter hver endring</translation>
</message>
<message>
<source>Automatically save on exit</source>
<translation>Lagre automatisk ved avslutning </translation>
</message>
<message>
<source>Automatically reload the database when modified externally</source>
<translation>Last databasen automatisk nytt hvis den blir endret eksternt </translation>
@ -304,10 +304,6 @@
<source>Automatically launch KeePassXC at system startup</source>
<translation type="unfinished"/>
</message>
<message>
<source>Mark database as modified for non-data changes (e.g., expanding groups)</source>
<translation type="unfinished"/>
</message>
<message>
<source>Safely save database files (disable if experiencing problems with Dropbox, etc.)</source>
<translation type="unfinished"/>
@ -344,6 +340,18 @@
<source>Auto-Type start delay:</source>
<translation type="unfinished"/>
</message>
<message>
<source>Automatically save when locking database</source>
<translation type="unfinished"/>
</message>
<message>
<source>Automatically save non-data changes when locking database</source>
<translation type="unfinished"/>
</message>
<message>
<source>Tray icon type</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>ApplicationSettingsWidgetSecurity</name>
@ -4799,6 +4807,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>
<translation type="unfinished"/>
</message>
<message>
<source>Perform Auto-Type Sequence</source>
<translation type="unfinished"/>
</message>
<message>
<source>{USERNAME}</source>
<translation type="unfinished"/>
</message>
<message>
<source>{USERNAME}{ENTER}</source>
<translation type="unfinished"/>
</message>
<message>
<source>{PASSWORD}</source>
<translation type="unfinished"/>
</message>
<message>
<source>{PASSWORD}{ENTER}</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>ManageDatabase</name>
@ -5282,10 +5310,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<comment>Password quality</comment>
<translation>Utmerket</translation>
</message>
<message>
<source>ExtendedASCII</source>
<translation type="unfinished"/>
</message>
<message>
<source>Switch to advanced mode</source>
<translation>Bytt til avansert modus</translation>
@ -5294,58 +5318,22 @@ Expect some bugs and minor issues, this version is not meant for production use.
<source>Advanced</source>
<translation>Avansert</translation>
</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>
<source>Braces</source>
<translation type="unfinished"/>
</message>
<message>
<source>{[(</source>
<translation type="unfinished"/>
</message>
<message>
<source>Punctuation</source>
<translation type="unfinished"/>
</message>
<message>
<source>.,:;</source>
<translation type="unfinished"/>
</message>
<message>
<source>Quotes</source>
<translation type="unfinished"/>
</message>
<message>
<source>&quot; &apos;</source>
<translation type="unfinished"/>
</message>
<message>
<source>&lt;*+!?=</source>
<translation type="unfinished"/>
</message>
<message>
<source>\_|-/</source>
<translation type="unfinished"/>
</message>
<message>
<source>Logograms</source>
<translation type="unfinished"/>
</message>
<message>
<source>#$%&amp;&amp;@^`~</source>
<translation type="unfinished"/>
</message>
<message>
<source>Character set to exclude from generated password</source>
<translation type="unfinished"/>
@ -5466,6 +5454,10 @@ Expect some bugs and minor issues, this version is not meant for production use.
<source>Regenerate password (%1)</source>
<translation type="unfinished"/>
</message>
<message>
<source>Special Characters</source>
<translation>Spesialtegn</translation>
</message>
</context>
<context>
<name>QApplication</name>

View File

@ -135,6 +135,10 @@
<source>Colorful</source>
<translation>Kleurrijk</translation>
</message>
<message>
<source>You must restart the application to set the new language. Would you like to restart now?</source>
<translation>Je moet de toepassing opnieuw starten om de nieuwe taal in te stellen. Wil je dat nu doen?</translation>
</message>
</context>
<context>
<name>ApplicationSettingsWidgetGeneral</name>
@ -166,10 +170,6 @@
<source>Automatically save after every change</source>
<translation>Automatisch opslaan na iedere wijziging</translation>
</message>
<message>
<source>Automatically save on exit</source>
<translation>Automatisch opslaan bij afsluiten</translation>
</message>
<message>
<source>Automatically reload the database when modified externally</source>
<translation>Database automatisch opnieuw laden als deze van buitenaf is gewijzigd</translation>
@ -304,10 +304,6 @@
<source>Automatically launch KeePassXC at system startup</source>
<translation>KeePassXC automatisch opstarten met het systeem</translation>
</message>
<message>
<source>Mark database as modified for non-data changes (e.g., expanding groups)</source>
<translation>Database markeren als gewijzigd voor niet-inhoudelijke aanpassingen (bijv. uitbreiding van groepen)</translation>
</message>
<message>
<source>Safely save database files (disable if experiencing problems with Dropbox, etc.)</source>
<translation>Databasebestanden veilig opslaan (uitschakelen bij problemen met Dropbox, enz.)</translation>
@ -344,6 +340,18 @@
<source>Auto-Type start delay:</source>
<translation>Auto-type startvertraging:</translation>
</message>
<message>
<source>Automatically save when locking database</source>
<translation>Automatisch opslaan bij het vergrendelen van de database</translation>
</message>
<message>
<source>Automatically save non-data changes when locking database</source>
<translation>Automatisch niet-gegevens wijzigingen opslaan bij het vergrendelen van de database</translation>
</message>
<message>
<source>Tray icon type</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>ApplicationSettingsWidgetSecurity</name>
@ -1303,7 +1311,7 @@ Om deze fout te voorkomen ga je naar &quot;Database instellingen.../Beveiliging&
</message>
<message>
<source>Enter Additional Credentials (if any):</source>
<translation>Voer eventueel additionele inloggegevens in:</translation>
<translation>Voer eventuele aanvullende inloggegevens in:</translation>
</message>
<message>
<source>&lt;p&gt;You can use a hardware security key such as a &lt;strong&gt;YubiKey&lt;/strong&gt; or &lt;strong&gt;OnlyKey&lt;/strong&gt; with slots configured for HMAC-SHA1.&lt;/p&gt;
@ -1528,7 +1536,7 @@ Dit is alleen nodig als je database een kopie is van een andere en de browserext
<name>DatabaseSettingsWidgetDatabaseKey</name>
<message>
<source>Add additional protection...</source>
<translation>Extra beveiliging toevoegen...</translation>
<translation>Aanvullende beveiliging toevoegen...</translation>
</message>
<message>
<source>No password set</source>
@ -1782,7 +1790,7 @@ Als je dit aantal aanhoudt is het mogelijk heel gemakkelijk om de database te kr
</message>
<message>
<source>Additional Database Settings</source>
<translation>Extra database-instellingen</translation>
<translation>Aanvullende database-instellingen</translation>
</message>
<message>
<source>Database name field</source>
@ -2290,7 +2298,7 @@ Veilig opslaan uitschakelen en opnieuw proberen?</translation>
<name>EditEntryWidgetAdvanced</name>
<message>
<source>Additional attributes</source>
<translation>Extra kenmerken</translation>
<translation>Aanvullende kenmerken</translation>
</message>
<message>
<source>Add</source>
@ -2460,7 +2468,7 @@ Veilig opslaan uitschakelen en opnieuw proberen?</translation>
</message>
<message>
<source>Additional URL&apos;s</source>
<translation>Extra URLs</translation>
<translation>Aanvullende URLs</translation>
</message>
<message>
<source>Add</source>
@ -4838,6 +4846,26 @@ Houd rekening met fouten en kleine problemen. Deze versie is niet bedoeld voor r
<translation>Je moet de applicatie opnieuw opstarten om deze instelling toe te passen.
Wil je KeePassXC nu opnieuw opstarten?</translation>
</message>
<message>
<source>Perform Auto-Type Sequence</source>
<translation>Auto-type tekenreeks uitvoeren</translation>
</message>
<message>
<source>{USERNAME}</source>
<translation type="unfinished"/>
</message>
<message>
<source>{USERNAME}{ENTER}</source>
<translation type="unfinished"/>
</message>
<message>
<source>{PASSWORD}</source>
<translation type="unfinished"/>
</message>
<message>
<source>{PASSWORD}{ENTER}</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>ManageDatabase</name>
@ -5322,10 +5350,6 @@ Wil je KeePassXC nu opnieuw opstarten?</translation>
<comment>Password quality</comment>
<translation>Uitstekend</translation>
</message>
<message>
<source>ExtendedASCII</source>
<translation>Uitgebreid ASCII</translation>
</message>
<message>
<source>Switch to advanced mode</source>
<translation>Overschakelen naar de geavanceerde modus</translation>
@ -5334,58 +5358,22 @@ Wil je KeePassXC nu opnieuw opstarten?</translation>
<source>Advanced</source>
<translation>Geavanceerd</translation>
</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>
<source>Braces</source>
<translation>Haakjes</translation>
</message>
<message>
<source>{[(</source>
<translation>{[(</translation>
</message>
<message>
<source>Punctuation</source>
<translation>Leestekens</translation>
</message>
<message>
<source>.,:;</source>
<translation>.,:;</translation>
</message>
<message>
<source>Quotes</source>
<translation>Aanhalingstekens</translation>
</message>
<message>
<source>&quot; &apos;</source>
<translation>&quot; &apos;</translation>
</message>
<message>
<source>&lt;*+!?=</source>
<translation>&lt;*+!? =</translation>
</message>
<message>
<source>\_|-/</source>
<translation>\_|-/</translation>
</message>
<message>
<source>Logograms</source>
<translation>Special tekens</translation>
</message>
<message>
<source>#$%&amp;&amp;@^`~</source>
<translation>#$%&amp;&amp;@^`~</translation>
</message>
<message>
<source>Character set to exclude from generated password</source>
<translation>Tekenset die niet gebruikt mag worden in het gegenereerde wachtwoord</translation>
@ -5506,6 +5494,10 @@ Wil je KeePassXC nu opnieuw opstarten?</translation>
<source>Regenerate password (%1)</source>
<translation>Òpnieuw genereren (%1)</translation>
</message>
<message>
<source>Special Characters</source>
<translation>Speciale tekens</translation>
</message>
</context>
<context>
<name>QApplication</name>

View File

@ -135,6 +135,10 @@
<source>Colorful</source>
<translation>Kolorowy</translation>
</message>
<message>
<source>You must restart the application to set the new language. Would you like to restart now?</source>
<translation>Musisz zrestartować aplikację, aby ustawić nowy język. Czy chcesz teraz zrestartować?</translation>
</message>
</context>
<context>
<name>ApplicationSettingsWidgetGeneral</name>
@ -166,10 +170,6 @@
<source>Automatically save after every change</source>
<translation>Automatycznie zapisz po każdej zmianie</translation>
</message>
<message>
<source>Automatically save on exit</source>
<translation>Automatycznie zapisz przy wyjściu</translation>
</message>
<message>
<source>Automatically reload the database when modified externally</source>
<translation>Automatycznie przeładuj bazę danych, gdy zostanie zmodyfikowana zewnętrznie</translation>
@ -304,10 +304,6 @@
<source>Automatically launch KeePassXC at system startup</source>
<translation>Automatycznie uruchom KeePassXC podczas uruchamiania systemu</translation>
</message>
<message>
<source>Mark database as modified for non-data changes (e.g., expanding groups)</source>
<translation>Oznacz bazę danych jako zmodyfikowaną dla zmian innych niż dane (np. rozwijanie grup)</translation>
</message>
<message>
<source>Safely save database files (disable if experiencing problems with Dropbox, etc.)</source>
<translation>Bezpiecznie zapisuj pliki bazy danych (wyłącz, jeśli występują problemy z Dropboksem itp.)</translation>
@ -344,6 +340,18 @@
<source>Auto-Type start delay:</source>
<translation>Opóźnienie rozpoczęcia autowpisywania:</translation>
</message>
<message>
<source>Automatically save when locking database</source>
<translation>Automatycznie zapisuj podczas blokowania bazy danych</translation>
</message>
<message>
<source>Automatically save non-data changes when locking database</source>
<translation>Automatycznie zapisuj zmiany niezwiązane z danymi podczas blokowania bazy danych</translation>
</message>
<message>
<source>Tray icon type</source>
<translation>Typ ikony zasobnika</translation>
</message>
</context>
<context>
<name>ApplicationSettingsWidgetSecurity</name>
@ -4842,6 +4850,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>
<translation>Musisz zrestartować aplikację, aby zastosować to ustawienie. Czy chcesz teraz zrestartować?</translation>
</message>
<message>
<source>Perform Auto-Type Sequence</source>
<translation>Wykonaj sekwencję autowpisywania</translation>
</message>
<message>
<source>{USERNAME}</source>
<translation>{UŻYTKOWNIK}</translation>
</message>
<message>
<source>{USERNAME}{ENTER}</source>
<translation>{UŻYTKOWNIK}{ENTER}</translation>
</message>
<message>
<source>{PASSWORD}</source>
<translation>{HASŁO}</translation>
</message>
<message>
<source>{PASSWORD}{ENTER}</source>
<translation>{HASŁO}{ENTER}</translation>
</message>
</context>
<context>
<name>ManageDatabase</name>
@ -5326,10 +5354,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<comment>Password quality</comment>
<translation>Znakomita</translation>
</message>
<message>
<source>ExtendedASCII</source>
<translation>Rozszerzony ASCII</translation>
</message>
<message>
<source>Switch to advanced mode</source>
<translation>Zmień na tryb zaawansowany</translation>
@ -5338,58 +5362,22 @@ Expect some bugs and minor issues, this version is not meant for production use.
<source>Advanced</source>
<translation>Zaawansowane</translation>
</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>
<source>Braces</source>
<translation>Nawiasy klamrowe</translation>
</message>
<message>
<source>{[(</source>
<translation>{[(</translation>
</message>
<message>
<source>Punctuation</source>
<translation>Interpunkcja</translation>
</message>
<message>
<source>.,:;</source>
<translation>.,:;</translation>
</message>
<message>
<source>Quotes</source>
<translation>Cudzysłowy</translation>
</message>
<message>
<source>&quot; &apos;</source>
<translation>&quot; &apos;</translation>
</message>
<message>
<source>&lt;*+!?=</source>
<translation>&lt;*+!?=</translation>
</message>
<message>
<source>\_|-/</source>
<translation>\_|-/</translation>
</message>
<message>
<source>Logograms</source>
<translation>Logogramy</translation>
</message>
<message>
<source>#$%&amp;&amp;@^`~</source>
<translation>#$%&amp;&amp;@^`~</translation>
</message>
<message>
<source>Character set to exclude from generated password</source>
<translation>Zestaw znaków do wykluczenia w wygenerowanym haśle</translation>
@ -5510,6 +5498,10 @@ Expect some bugs and minor issues, this version is not meant for production use.
<source>Regenerate password (%1)</source>
<translation>Wygeneruj ponownie hasło (%1)</translation>
</message>
<message>
<source>Special Characters</source>
<translation>Znaki specjalne</translation>
</message>
</context>
<context>
<name>QApplication</name>

View File

@ -135,6 +135,10 @@
<source>Colorful</source>
<translation>Colorido</translation>
</message>
<message>
<source>You must restart the application to set the new language. Would you like to restart now?</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>ApplicationSettingsWidgetGeneral</name>
@ -166,10 +170,6 @@
<source>Automatically save after every change</source>
<translation>Salvar automaticamente depois de cada alteração</translation>
</message>
<message>
<source>Automatically save on exit</source>
<translation>Salvar automaticamente ao sair</translation>
</message>
<message>
<source>Automatically reload the database when modified externally</source>
<translation>Automaticamente recarregar o banco de dados quando houver modificações externas</translation>
@ -304,10 +304,6 @@
<source>Automatically launch KeePassXC at system startup</source>
<translation>Iniciar KeePassXC automaticamente com a inicialização do sistema</translation>
</message>
<message>
<source>Mark database as modified for non-data changes (e.g., expanding groups)</source>
<translation>Marcar banco de dados como modificado para mudanças não relacionadas a dados (por exemplo, expansão de grupos)</translation>
</message>
<message>
<source>Safely save database files (disable if experiencing problems with Dropbox, etc.)</source>
<translation>Salvar os arquivos de banco de dados com segurança (desative se tiver problemas com o Dropbox, etc)</translation>
@ -344,6 +340,18 @@
<source>Auto-Type start delay:</source>
<translation>Atraso para início de digitação automática:</translation>
</message>
<message>
<source>Automatically save when locking database</source>
<translation type="unfinished"/>
</message>
<message>
<source>Automatically save non-data changes when locking database</source>
<translation type="unfinished"/>
</message>
<message>
<source>Tray icon type</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>ApplicationSettingsWidgetSecurity</name>
@ -4841,6 +4849,26 @@ Espere alguns bugs e problemas menores, esta versão não é para uso em produç
<source>You must restart the application to apply this setting. Would you like to restart now?</source>
<translation>Você precisa reiniciar o aplicativo para aplicar esta configuração. Você gostaria de reiniciar agora?</translation>
</message>
<message>
<source>Perform Auto-Type Sequence</source>
<translation type="unfinished"/>
</message>
<message>
<source>{USERNAME}</source>
<translation type="unfinished"/>
</message>
<message>
<source>{USERNAME}{ENTER}</source>
<translation type="unfinished"/>
</message>
<message>
<source>{PASSWORD}</source>
<translation type="unfinished"/>
</message>
<message>
<source>{PASSWORD}{ENTER}</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>ManageDatabase</name>
@ -5325,10 +5353,6 @@ Espere alguns bugs e problemas menores, esta versão não é para uso em produç
<comment>Password quality</comment>
<translation>Excelente</translation>
</message>
<message>
<source>ExtendedASCII</source>
<translation>ASCIIEstendido</translation>
</message>
<message>
<source>Switch to advanced mode</source>
<translation>Mudar para o modo avançado</translation>
@ -5337,58 +5361,22 @@ Espere alguns bugs e problemas menores, esta versão não é para uso em produç
<source>Advanced</source>
<translation>Avançado</translation>
</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>
<source>Braces</source>
<translation>Colchetes</translation>
</message>
<message>
<source>{[(</source>
<translation>{[(</translation>
</message>
<message>
<source>Punctuation</source>
<translation>Pontuação</translation>
</message>
<message>
<source>.,:;</source>
<translation>.,:;</translation>
</message>
<message>
<source>Quotes</source>
<translation>Aspas</translation>
</message>
<message>
<source>&quot; &apos;</source>
<translation>&quot; &apos;</translation>
</message>
<message>
<source>&lt;*+!?=</source>
<translation>&lt;*+!?=</translation>
</message>
<message>
<source>\_|-/</source>
<translation>\_|-/</translation>
</message>
<message>
<source>Logograms</source>
<translation>Logo-gramas</translation>
</message>
<message>
<source>#$%&amp;&amp;@^`~</source>
<translation>#$%&amp;&amp;@^`~</translation>
</message>
<message>
<source>Character set to exclude from generated password</source>
<translation>Conjunto de caracteres para excluir da senha gerada</translation>
@ -5509,6 +5497,10 @@ Espere alguns bugs e problemas menores, esta versão não é para uso em produç
<source>Regenerate password (%1)</source>
<translation>Regenerar senha (%1)</translation>
</message>
<message>
<source>Special Characters</source>
<translation>Caracteres Especiais</translation>
</message>
</context>
<context>
<name>QApplication</name>

View File

@ -135,6 +135,10 @@
<source>Colorful</source>
<translation>Colorido</translation>
</message>
<message>
<source>You must restart the application to set the new language. Would you like to restart now?</source>
<translation>Tem que reiniciar a aplicação para aplicar o novo idioma. Reiniciar agora?</translation>
</message>
</context>
<context>
<name>ApplicationSettingsWidgetGeneral</name>
@ -166,10 +170,6 @@
<source>Automatically save after every change</source>
<translation>Guardar automaticamente a cada alteração</translation>
</message>
<message>
<source>Automatically save on exit</source>
<translation>Guardar automaticamente ao fechar</translation>
</message>
<message>
<source>Automatically reload the database when modified externally</source>
<translation>Recarregar base de dados se esta for modificada externamente</translation>
@ -304,10 +304,6 @@
<source>Automatically launch KeePassXC at system startup</source>
<translation>Iniciar KeePassXC ao arrancar o sistema</translation>
</message>
<message>
<source>Mark database as modified for non-data changes (e.g., expanding groups)</source>
<translation>Marcar base de dados como alterada para modificações não efetuadas em dados (ex.: expansão de grupos)</translation>
</message>
<message>
<source>Safely save database files (disable if experiencing problems with Dropbox, etc.)</source>
<translation>Guardar bases de dados em segurança (desative se ocorrerem erros com Dropbox e outros serviços)</translation>
@ -344,6 +340,18 @@
<source>Auto-Type start delay:</source>
<translation>Atraso para iniciar a escrita automática:</translation>
</message>
<message>
<source>Automatically save when locking database</source>
<translation>Guardar alterações ao bloquear a base de dados</translation>
</message>
<message>
<source>Automatically save non-data changes when locking database</source>
<translation>Guardar alterações a não-dados ao bloquear a base de dados</translation>
</message>
<message>
<source>Tray icon type</source>
<translation>Tipo de ícone na bandeja</translation>
</message>
</context>
<context>
<name>ApplicationSettingsWidgetSecurity</name>
@ -1992,7 +2000,7 @@ Existe aqui um erro que deve ser reportado aos programadores.</translation>
</message>
<message numerus="yes">
<source>Do you really want to move %n entry(s) to the recycle bin?</source>
<translation><numerusform>Deseja mesmo mover %n entrada para a reciclagem?</numerusform><numerusform>Deseja mesmo mover %n entradas para a reciclagem?</numerusform></translation>
<translation><numerusform>Tem a certeza de que deseja mover %n entrada para a reciclagem?</numerusform><numerusform>Tem a certeza de que deseja mover %n entradas para a reciclagem?</numerusform></translation>
</message>
<message>
<source>Execute command?</source>
@ -4841,6 +4849,26 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes
<source>You must restart the application to apply this setting. Would you like to restart now?</source>
<translation>Tem que reiniciar a aplicação para aplicar as alterações. Gostaria de o fazer agora?</translation>
</message>
<message>
<source>Perform Auto-Type Sequence</source>
<translation>Executar sequência de escrita automática</translation>
</message>
<message>
<source>{USERNAME}</source>
<translation>{NomeDeUtilizador}</translation>
</message>
<message>
<source>{USERNAME}{ENTER}</source>
<translation>{NomeDeUtilizador}{ENTER}</translation>
</message>
<message>
<source>{PASSWORD}</source>
<translation>{Palavra-passe}</translation>
</message>
<message>
<source>{PASSWORD}{ENTER}</source>
<translation>{Palavra-passe}{ENTER}</translation>
</message>
</context>
<context>
<name>ManageDatabase</name>
@ -5325,10 +5353,6 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes
<comment>Password quality</comment>
<translation>Excelente</translation>
</message>
<message>
<source>ExtendedASCII</source>
<translation>ASCII expandido</translation>
</message>
<message>
<source>Switch to advanced mode</source>
<translation>Ativar modo avançado</translation>
@ -5337,58 +5361,22 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes
<source>Advanced</source>
<translation>Avançado</translation>
</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>
<source>Braces</source>
<translation>Parênteses</translation>
</message>
<message>
<source>{[(</source>
<translation>{[(</translation>
</message>
<message>
<source>Punctuation</source>
<translation>Pontuação</translation>
</message>
<message>
<source>.,:;</source>
<translation>.,:;</translation>
</message>
<message>
<source>Quotes</source>
<translation>Aspas</translation>
</message>
<message>
<source>&quot; &apos;</source>
<translation>&quot; &apos;</translation>
</message>
<message>
<source>&lt;*+!?=</source>
<translation>&lt;*+!?=</translation>
</message>
<message>
<source>\_|-/</source>
<translation>\_|-/</translation>
</message>
<message>
<source>Logograms</source>
<translation>Logo-gramas</translation>
</message>
<message>
<source>#$%&amp;&amp;@^`~</source>
<translation>#$%&amp;&amp;@^`~</translation>
</message>
<message>
<source>Character set to exclude from generated password</source>
<translation>Conjunto de caracteres a excluir da palavra-passe gerada</translation>
@ -5509,6 +5497,10 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes
<source>Regenerate password (%1)</source>
<translation>Recriar palavra-passe (%1)</translation>
</message>
<message>
<source>Special Characters</source>
<translation>Caracteres especiais</translation>
</message>
</context>
<context>
<name>QApplication</name>
@ -6118,7 +6110,7 @@ Comandos disponíveis:
</message>
<message>
<source>Successfully recycled entry %1.</source>
<translation>A entrada %1 foi movida para a reciclagem.</translation>
<translation>Entrada %1 movida para a reciclagem.</translation>
</message>
<message>
<source>Successfully deleted entry %1.</source>
@ -7223,7 +7215,7 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.&lt;/p&gt;&lt;p&gt;You will still be prompted if any entries are referenced by others.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Se ativar a Reciclagem para esta base de dados, as entradas apagadas serão movidas mas não apagadas. Se não a utilizar, as entradas serão apagadas sem qualquer confirmação.&lt;/p&gt;&lt;p&gt;Contudo, se as entradas apagadas forem referenciadas por outras, será mostrado um aviso.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Se ativar a reciclagem para esta base de dados, as entradas serão movidas diretamente para a reciclagem. Se não a utilizar, as entradas serão apagadas sem qualquer confirmação.&lt;/p&gt;&lt;p&gt;Contudo, se as entradas apagadas forem referenciadas por outras, será mostrado um aviso.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<source>Exposed database groups:</source>

View File

@ -135,6 +135,10 @@
<source>Colorful</source>
<translation type="unfinished"/>
</message>
<message>
<source>You must restart the application to set the new language. Would you like to restart now?</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>ApplicationSettingsWidgetGeneral</name>
@ -166,10 +170,6 @@
<source>Automatically save after every change</source>
<translation>Salvare automată după fiecare modificare</translation>
</message>
<message>
<source>Automatically save on exit</source>
<translation>Salvare automată la ieșire</translation>
</message>
<message>
<source>Automatically reload the database when modified externally</source>
<translation>Reîncărcați automat baza de date atunci când este modificată extern</translation>
@ -304,10 +304,6 @@
<source>Automatically launch KeePassXC at system startup</source>
<translation type="unfinished"/>
</message>
<message>
<source>Mark database as modified for non-data changes (e.g., expanding groups)</source>
<translation type="unfinished"/>
</message>
<message>
<source>Safely save database files (disable if experiencing problems with Dropbox, etc.)</source>
<translation type="unfinished"/>
@ -344,6 +340,18 @@
<source>Auto-Type start delay:</source>
<translation type="unfinished"/>
</message>
<message>
<source>Automatically save when locking database</source>
<translation type="unfinished"/>
</message>
<message>
<source>Automatically save non-data changes when locking database</source>
<translation type="unfinished"/>
</message>
<message>
<source>Tray icon type</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>ApplicationSettingsWidgetSecurity</name>
@ -4834,6 +4842,26 @@ Asteptati-va unele bug-uri și probleme minore, această versiune nu este destin
<source>You must restart the application to apply this setting. Would you like to restart now?</source>
<translation type="unfinished"/>
</message>
<message>
<source>Perform Auto-Type Sequence</source>
<translation type="unfinished"/>
</message>
<message>
<source>{USERNAME}</source>
<translation type="unfinished"/>
</message>
<message>
<source>{USERNAME}{ENTER}</source>
<translation type="unfinished"/>
</message>
<message>
<source>{PASSWORD}</source>
<translation type="unfinished"/>
</message>
<message>
<source>{PASSWORD}{ENTER}</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>ManageDatabase</name>
@ -5318,10 +5346,6 @@ Asteptati-va unele bug-uri și probleme minore, această versiune nu este destin
<comment>Password quality</comment>
<translation>Excelent</translation>
</message>
<message>
<source>ExtendedASCII</source>
<translation>ASCII Extins</translation>
</message>
<message>
<source>Switch to advanced mode</source>
<translation>Comutarea la modul avansat</translation>
@ -5330,58 +5354,22 @@ Asteptati-va unele bug-uri și probleme minore, această versiune nu este destin
<source>Advanced</source>
<translation>Avansat</translation>
</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>
<source>Braces</source>
<translation>Bretele</translation>
</message>
<message>
<source>{[(</source>
<translation>{[(</translation>
</message>
<message>
<source>Punctuation</source>
<translation>Punctuaţie</translation>
</message>
<message>
<source>.,:;</source>
<translation>.,:;</translation>
</message>
<message>
<source>Quotes</source>
<translation>Citate</translation>
</message>
<message>
<source>&quot; &apos;</source>
<translation>&quot; &apos;</translation>
</message>
<message>
<source>&lt;*+!?=</source>
<translation>&lt;*+!?=</translation>
</message>
<message>
<source>\_|-/</source>
<translation>\_|-/</translation>
</message>
<message>
<source>Logograms</source>
<translation>Logograme</translation>
</message>
<message>
<source>#$%&amp;&amp;@^`~</source>
<translation>#$%&amp;&amp;@^`~</translation>
</message>
<message>
<source>Character set to exclude from generated password</source>
<translation>Set de caractere pentru a exclude din parola generată</translation>
@ -5502,6 +5490,10 @@ Asteptati-va unele bug-uri și probleme minore, această versiune nu este destin
<source>Regenerate password (%1)</source>
<translation type="unfinished"/>
</message>
<message>
<source>Special Characters</source>
<translation>Caractere speciale</translation>
</message>
</context>
<context>
<name>QApplication</name>

View File

@ -135,6 +135,10 @@
<source>Colorful</source>
<translation>Цветной</translation>
</message>
<message>
<source>You must restart the application to set the new language. Would you like to restart now?</source>
<translation>Вы должны перезапустить приложение, чтобы установить новый язык. Хотите перезапустить сейчас?</translation>
</message>
</context>
<context>
<name>ApplicationSettingsWidgetGeneral</name>
@ -166,10 +170,6 @@
<source>Automatically save after every change</source>
<translation>Автоматически сохранять после каждого изменения</translation>
</message>
<message>
<source>Automatically save on exit</source>
<translation>Автоматически сохранять при выходе</translation>
</message>
<message>
<source>Automatically reload the database when modified externally</source>
<translation>Автоматически перезагружать базу данных при её изменении извне</translation>
@ -304,10 +304,6 @@
<source>Automatically launch KeePassXC at system startup</source>
<translation>Автоматически запуск KeePassXC при запуске системы</translation>
</message>
<message>
<source>Mark database as modified for non-data changes (e.g., expanding groups)</source>
<translation>Помечать базу данных изменённой при действиях, не связанных с изменением данных (например, при раскрытии групп)</translation>
</message>
<message>
<source>Safely save database files (disable if experiencing problems with Dropbox, etc.)</source>
<translation>Безопасное сохранение файлов базы данных (возможна несовместимость с Dropbox и др.)</translation>
@ -344,6 +340,18 @@
<source>Auto-Type start delay:</source>
<translation>Задержка начала автоввода:</translation>
</message>
<message>
<source>Automatically save when locking database</source>
<translation>Автоматическое сохранение при блокировке базы данных</translation>
</message>
<message>
<source>Automatically save non-data changes when locking database</source>
<translation>Автоматическое сохранение изменений, не связанных с данными, при блокировке базы данных.</translation>
</message>
<message>
<source>Tray icon type</source>
<translation>Тип значка в системном лотке</translation>
</message>
</context>
<context>
<name>ApplicationSettingsWidgetSecurity</name>
@ -4837,6 +4845,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>
<translation>Требуется перезапуск приложения для применения этого параметра. Выполнить перезапуск сейчас?</translation>
</message>
<message>
<source>Perform Auto-Type Sequence</source>
<translation>Выполнить последовательность автоматического ввода</translation>
</message>
<message>
<source>{USERNAME}</source>
<translation>{USERNAME}</translation>
</message>
<message>
<source>{USERNAME}{ENTER}</source>
<translation>{USERNAME}{ENTER}</translation>
</message>
<message>
<source>{PASSWORD}</source>
<translation>{PASSWORD}</translation>
</message>
<message>
<source>{PASSWORD}{ENTER}</source>
<translation>{PASSWORD}{ENTER}</translation>
</message>
</context>
<context>
<name>ManageDatabase</name>
@ -5321,10 +5349,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<comment>Password quality</comment>
<translation>Отличный</translation>
</message>
<message>
<source>ExtendedASCII</source>
<translation>Расширенная ASCII</translation>
</message>
<message>
<source>Switch to advanced mode</source>
<translation>В расширенный режим</translation>
@ -5333,58 +5357,22 @@ Expect some bugs and minor issues, this version is not meant for production use.
<source>Advanced</source>
<translation>Дополнительно</translation>
</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>
<source>Braces</source>
<translation>Скобки</translation>
</message>
<message>
<source>{[(</source>
<translation>{[(</translation>
</message>
<message>
<source>Punctuation</source>
<translation>Знаки препинания</translation>
</message>
<message>
<source>.,:;</source>
<translation>.,:;</translation>
</message>
<message>
<source>Quotes</source>
<translation>Кавычки</translation>
</message>
<message>
<source>&quot; &apos;</source>
<translation>&quot; &apos;</translation>
</message>
<message>
<source>&lt;*+!?=</source>
<translation>&lt;*+!?=</translation>
</message>
<message>
<source>\_|-/</source>
<translation>\_|-/</translation>
</message>
<message>
<source>Logograms</source>
<translation>Логограммы</translation>
</message>
<message>
<source>#$%&amp;&amp;@^`~</source>
<translation>#$%&amp;&amp;@^`~</translation>
</message>
<message>
<source>Character set to exclude from generated password</source>
<translation>Набор символов для исключения из сгенерированного пароля</translation>
@ -5505,6 +5493,10 @@ Expect some bugs and minor issues, this version is not meant for production use.
<source>Regenerate password (%1)</source>
<translation>Создать заново (%1)</translation>
</message>
<message>
<source>Special Characters</source>
<translation>Специальные символы</translation>
</message>
</context>
<context>
<name>QApplication</name>

View File

@ -135,6 +135,10 @@
<source>Colorful</source>
<translation>Farebné</translation>
</message>
<message>
<source>You must restart the application to set the new language. Would you like to restart now?</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>ApplicationSettingsWidgetGeneral</name>
@ -166,10 +170,6 @@
<source>Automatically save after every change</source>
<translation>Automaticky uložiť po každej zmene</translation>
</message>
<message>
<source>Automatically save on exit</source>
<translation>Automaticky uložiť pri ukončení</translation>
</message>
<message>
<source>Automatically reload the database when modified externally</source>
<translation>Automaticky načítať databázu, ak je upravená externe</translation>
@ -304,10 +304,6 @@
<source>Automatically launch KeePassXC at system startup</source>
<translation>Automaticky spustiť KeePassXC pri štarte systému</translation>
</message>
<message>
<source>Mark database as modified for non-data changes (e.g., expanding groups)</source>
<translation>Označovať databázu za zmenenú pri nedátových zmenách (napr. rozbalenie skupiny)</translation>
</message>
<message>
<source>Safely save database files (disable if experiencing problems with Dropbox, etc.)</source>
<translation>Bezpečne uložiť súbory databáz (vypnite pri problémoch s Dropbox, apod)</translation>
@ -344,6 +340,18 @@
<source>Auto-Type start delay:</source>
<translation>Oneskorenia spustenia Automatického vypĺňania:</translation>
</message>
<message>
<source>Automatically save when locking database</source>
<translation type="unfinished"/>
</message>
<message>
<source>Automatically save non-data changes when locking database</source>
<translation type="unfinished"/>
</message>
<message>
<source>Tray icon type</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>ApplicationSettingsWidgetSecurity</name>
@ -4844,6 +4852,26 @@ Očakávajte chyby a menšie problémy, táto verzia nie je určená na produkč
<source>You must restart the application to apply this setting. Would you like to restart now?</source>
<translation>Musíte reštartovať aplikáciu, aby sa tieto zmeny prejavili. Chcete ju reštartovať teraz?</translation>
</message>
<message>
<source>Perform Auto-Type Sequence</source>
<translation type="unfinished"/>
</message>
<message>
<source>{USERNAME}</source>
<translation type="unfinished"/>
</message>
<message>
<source>{USERNAME}{ENTER}</source>
<translation type="unfinished"/>
</message>
<message>
<source>{PASSWORD}</source>
<translation type="unfinished"/>
</message>
<message>
<source>{PASSWORD}{ENTER}</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>ManageDatabase</name>
@ -5328,10 +5356,6 @@ Očakávajte chyby a menšie problémy, táto verzia nie je určená na produkč
<comment>Password quality</comment>
<translation>Výbroné</translation>
</message>
<message>
<source>ExtendedASCII</source>
<translation>Rozšírené ASCII</translation>
</message>
<message>
<source>Switch to advanced mode</source>
<translation>Prepnúť na pokročilý režim</translation>
@ -5340,58 +5364,22 @@ Očakávajte chyby a menšie problémy, táto verzia nie je určená na produkč
<source>Advanced</source>
<translation>Pokročilé</translation>
</message>
<message>
<source>A-Z</source>
<translation>A-Ž</translation>
</message>
<message>
<source>a-z</source>
<translation>a-ž</translation>
</message>
<message>
<source>0-9</source>
<translation>0-9</translation>
</message>
<message>
<source>Braces</source>
<translation>Zátvorky</translation>
</message>
<message>
<source>{[(</source>
<translation>{[(</translation>
</message>
<message>
<source>Punctuation</source>
<translation>Interpunkcia</translation>
</message>
<message>
<source>.,:;</source>
<translation>.,:;</translation>
</message>
<message>
<source>Quotes</source>
<translation>Úvodzovky</translation>
</message>
<message>
<source>&quot; &apos;</source>
<translation>&quot; &apos;</translation>
</message>
<message>
<source>&lt;*+!?=</source>
<translation>&lt;*+!?=</translation>
</message>
<message>
<source>\_|-/</source>
<translation>\_|-/</translation>
</message>
<message>
<source>Logograms</source>
<translation>Zástupné znaky</translation>
</message>
<message>
<source>#$%&amp;&amp;@^`~</source>
<translation>#$%&amp;&amp;@^`~</translation>
</message>
<message>
<source>Character set to exclude from generated password</source>
<translation>Sady znakov, ktoré majú byť vynechané pri generovaní hesla</translation>
@ -5512,6 +5500,10 @@ Očakávajte chyby a menšie problémy, táto verzia nie je určená na produkč
<source>Regenerate password (%1)</source>
<translation>Obnoviť heslo (%1)</translation>
</message>
<message>
<source>Special Characters</source>
<translation>Špeciálne znaky</translation>
</message>
</context>
<context>
<name>QApplication</name>

View File

@ -135,6 +135,10 @@
<source>Colorful</source>
<translation>Färgstark</translation>
</message>
<message>
<source>You must restart the application to set the new language. Would you like to restart now?</source>
<translation>Du måste starta om programmet för att tillämpa det nya språket. Vill du starta om nu?</translation>
</message>
</context>
<context>
<name>ApplicationSettingsWidgetGeneral</name>
@ -166,10 +170,6 @@
<source>Automatically save after every change</source>
<translation>Spara automatiskt efter varje ändring</translation>
</message>
<message>
<source>Automatically save on exit</source>
<translation>Spara automatiskt när programmet avslutas</translation>
</message>
<message>
<source>Automatically reload the database when modified externally</source>
<translation>Läs om databasen automatiskt när den ändrats externt</translation>
@ -304,10 +304,6 @@
<source>Automatically launch KeePassXC at system startup</source>
<translation>Starta KeePassXC automatiskt vid systemstart</translation>
</message>
<message>
<source>Mark database as modified for non-data changes (e.g., expanding groups)</source>
<translation>Markera databasen som ändrad för icke dataändringar (t.ex. expanderande grupper)</translation>
</message>
<message>
<source>Safely save database files (disable if experiencing problems with Dropbox, etc.)</source>
<translation>Spara databasfiler säkert (inaktivera vid problem med Dropbox etc)</translation>
@ -344,6 +340,18 @@
<source>Auto-Type start delay:</source>
<translation>Autoskriv startfördröjning:</translation>
</message>
<message>
<source>Automatically save when locking database</source>
<translation>Spara automatiskt när databasen låses</translation>
</message>
<message>
<source>Automatically save non-data changes when locking database</source>
<translation>Spara icke-dataändringar automatiskt när databasen låses</translation>
</message>
<message>
<source>Tray icon type</source>
<translation>Typ av systemfältsikon</translation>
</message>
</context>
<context>
<name>ApplicationSettingsWidgetSecurity</name>
@ -3931,11 +3939,11 @@ Detta är en envägsmigrering. Du kommer inte att kunna öppna den importerade d
</message>
<message>
<source>Invalid EnableAutoType value</source>
<translation type="unfinished"/>
<translation>Ogiltigt värde för EnableAutoType</translation>
</message>
<message>
<source>Invalid EnableSearching value</source>
<translation type="unfinished"/>
<translation>Ogiltigt värde för EnableSearching</translation>
</message>
<message>
<source>No group uuid found</source>
@ -3947,7 +3955,7 @@ Detta är en envägsmigrering. Du kommer inte att kunna öppna den importerade d
</message>
<message>
<source>Missing DeletedObject uuid or time</source>
<translation type="unfinished"/>
<translation>Saknar DeletedObject uuid eller tid</translation>
</message>
<message>
<source>Null entry uuid</source>
@ -3983,7 +3991,7 @@ Detta är en envägsmigrering. Du kommer inte att kunna öppna den importerade d
</message>
<message>
<source>Auto-type association window or sequence missing</source>
<translation type="unfinished"/>
<translation>Auto-skrivassociationsfönster eller sekvens saknas</translation>
</message>
<message>
<source>Invalid bool value</source>
@ -4118,7 +4126,7 @@ Rad %2, kolumn: %3</translation>
</message>
<message>
<source>Invalid group field size</source>
<translation type="unfinished"/>
<translation>Ogiltig fältstorlek för grupp</translation>
</message>
<message>
<source>Read group field data doesn&apos;t match size</source>
@ -4166,35 +4174,35 @@ Rad %2, kolumn: %3</translation>
</message>
<message>
<source>Invalid entry field size</source>
<translation type="unfinished"/>
<translation>Ogiltig fältstorlek</translation>
</message>
<message>
<source>Read entry field data doesn&apos;t match size</source>
<translation type="unfinished"/>
<translation>Inläst data stämmer inte med fältstorleken</translation>
</message>
<message>
<source>Invalid entry uuid field size</source>
<translation type="unfinished"/>
<translation>Ogiltig fältstorlek för uuid</translation>
</message>
<message>
<source>Invalid entry group id field size</source>
<translation type="unfinished"/>
<translation>Ogiltig fältstorlek för grupp-id</translation>
</message>
<message>
<source>Invalid entry icon field size</source>
<translation type="unfinished"/>
<translation>Ogiltig fältstorlek för ikon</translation>
</message>
<message>
<source>Invalid entry creation time field size</source>
<translation type="unfinished"/>
<translation>Ogiltig fältstorlek för skapandedatum</translation>
</message>
<message>
<source>Invalid entry modification time field size</source>
<translation type="unfinished"/>
<translation>Ogiltig fältstorlek för ändringsdatum</translation>
</message>
<message>
<source>Invalid entry expiry time field size</source>
<translation type="unfinished"/>
<translation>Ogiltig fältstorlek för utgångsdatum</translation>
</message>
<message>
<source>Invalid entry field type</source>
@ -4840,6 +4848,26 @@ Vissa fel och mindre problem kan uppstå. Denna version är inte ämnad för dag
<source>You must restart the application to apply this setting. Would you like to restart now?</source>
<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>
<source>Perform Auto-Type Sequence</source>
<translation>Utför auto-skrivsekvens</translation>
</message>
<message>
<source>{USERNAME}</source>
<translation type="unfinished"/>
</message>
<message>
<source>{USERNAME}{ENTER}</source>
<translation type="unfinished"/>
</message>
<message>
<source>{PASSWORD}</source>
<translation type="unfinished"/>
</message>
<message>
<source>{PASSWORD}{ENTER}</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>ManageDatabase</name>
@ -5324,10 +5352,6 @@ Vissa fel och mindre problem kan uppstå. Denna version är inte ämnad för dag
<comment>Password quality</comment>
<translation>Utmärkt</translation>
</message>
<message>
<source>ExtendedASCII</source>
<translation>Utökad ASCII</translation>
</message>
<message>
<source>Switch to advanced mode</source>
<translation>Växla till avancerat läge</translation>
@ -5336,58 +5360,22 @@ Vissa fel och mindre problem kan uppstå. Denna version är inte ämnad för dag
<source>Advanced</source>
<translation>Avancerat</translation>
</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>
<source>Braces</source>
<translation>Klammerparenteser</translation>
</message>
<message>
<source>{[(</source>
<translation>{[(</translation>
</message>
<message>
<source>Punctuation</source>
<translation>Skiljetecken</translation>
</message>
<message>
<source>.,:;</source>
<translation>.,:;</translation>
</message>
<message>
<source>Quotes</source>
<translation>Citationstecken</translation>
</message>
<message>
<source>&quot; &apos;</source>
<translation>&quot; &apos;</translation>
</message>
<message>
<source>&lt;*+!?=</source>
<translation>&lt;*+!?=</translation>
</message>
<message>
<source>\_|-/</source>
<translation>\_|-/</translation>
</message>
<message>
<source>Logograms</source>
<translation>Logogram</translation>
</message>
<message>
<source>#$%&amp;&amp;@^`~</source>
<translation>#$%&amp;&amp;@^`~</translation>
</message>
<message>
<source>Character set to exclude from generated password</source>
<translation>Tecken som undantas från genererade lösenord</translation>
@ -5508,6 +5496,10 @@ Vissa fel och mindre problem kan uppstå. Denna version är inte ämnad för dag
<source>Regenerate password (%1)</source>
<translation>Generera om lösenordet (%1)</translation>
</message>
<message>
<source>Special Characters</source>
<translation>Specialtecken</translation>
</message>
</context>
<context>
<name>QApplication</name>
@ -5588,7 +5580,7 @@ Vissa fel och mindre problem kan uppstå. Denna version är inte ämnad för dag
</message>
<message>
<source>Empty</source>
<translation>Tom</translation>
<translation>Töm</translation>
</message>
<message>
<source>Remove</source>

View File

@ -135,6 +135,10 @@
<source>Colorful</source>
<translation></translation>
</message>
<message>
<source>You must restart the application to set the new language. Would you like to restart now?</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>ApplicationSettingsWidgetGeneral</name>
@ -166,10 +170,6 @@
<source>Automatically save after every change</source>
<translation></translation>
</message>
<message>
<source>Automatically save on exit</source>
<translation></translation>
</message>
<message>
<source>Automatically reload the database when modified externally</source>
<translation></translation>
@ -304,10 +304,6 @@
<source>Automatically launch KeePassXC at system startup</source>
<translation> KeePassXC </translation>
</message>
<message>
<source>Mark database as modified for non-data changes (e.g., expanding groups)</source>
<translation type="unfinished"/>
</message>
<message>
<source>Safely save database files (disable if experiencing problems with Dropbox, etc.)</source>
<translation type="unfinished"/>
@ -344,6 +340,18 @@
<source>Auto-Type start delay:</source>
<translation type="unfinished"/>
</message>
<message>
<source>Automatically save when locking database</source>
<translation type="unfinished"/>
</message>
<message>
<source>Automatically save non-data changes when locking database</source>
<translation type="unfinished"/>
</message>
<message>
<source>Tray icon type</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>ApplicationSettingsWidgetSecurity</name>
@ -4809,6 +4817,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>
<translation type="unfinished"/>
</message>
<message>
<source>Perform Auto-Type Sequence</source>
<translation type="unfinished"/>
</message>
<message>
<source>{USERNAME}</source>
<translation type="unfinished"/>
</message>
<message>
<source>{USERNAME}{ENTER}</source>
<translation type="unfinished"/>
</message>
<message>
<source>{PASSWORD}</source>
<translation type="unfinished"/>
</message>
<message>
<source>{PASSWORD}{ENTER}</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>ManageDatabase</name>
@ -5293,10 +5321,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<comment>Password quality</comment>
<translation></translation>
</message>
<message>
<source>ExtendedASCII</source>
<translation>ExtendedASCII</translation>
</message>
<message>
<source>Switch to advanced mode</source>
<translation></translation>
@ -5305,58 +5329,22 @@ Expect some bugs and minor issues, this version is not meant for production use.
<source>Advanced</source>
<translation></translation>
</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>
<source>Braces</source>
<translation></translation>
</message>
<message>
<source>{[(</source>
<translation>{[(</translation>
</message>
<message>
<source>Punctuation</source>
<translation></translation>
</message>
<message>
<source>.,:;</source>
<translation>.,:;</translation>
</message>
<message>
<source>Quotes</source>
<translation></translation>
</message>
<message>
<source>&quot; &apos;</source>
<translation>&quot; &apos;</translation>
</message>
<message>
<source>&lt;*+!?=</source>
<translation>&lt;*+!?=</translation>
</message>
<message>
<source>\_|-/</source>
<translation>\_|-/</translation>
</message>
<message>
<source>Logograms</source>
<translation></translation>
</message>
<message>
<source>#$%&amp;&amp;@^`~</source>
<translation>#$%&amp;&amp;@^`~</translation>
</message>
<message>
<source>Character set to exclude from generated password</source>
<translation></translation>
@ -5477,6 +5465,10 @@ Expect some bugs and minor issues, this version is not meant for production use.
<source>Regenerate password (%1)</source>
<translation type="unfinished"/>
</message>
<message>
<source>Special Characters</source>
<translation></translation>
</message>
</context>
<context>
<name>QApplication</name>

View File

@ -135,6 +135,10 @@
<source>Colorful</source>
<translation>Renkli</translation>
</message>
<message>
<source>You must restart the application to set the new language. Would you like to restart now?</source>
<translation>Yeni dili ayarlamak için uygulamayı yeniden başlatmalısınız. Şimdi yeniden başlamak ister misin?</translation>
</message>
</context>
<context>
<name>ApplicationSettingsWidgetGeneral</name>
@ -166,10 +170,6 @@
<source>Automatically save after every change</source>
<translation>Her değişiklik sonrası otomatik kaydet</translation>
</message>
<message>
<source>Automatically save on exit</source>
<translation>Çıkışta otomatik kaydet</translation>
</message>
<message>
<source>Automatically reload the database when modified externally</source>
<translation>Harici olarak değiştirildiğinde veritabanını otomatik olarak yeniden yükle</translation>
@ -304,10 +304,6 @@
<source>Automatically launch KeePassXC at system startup</source>
<translation>Sistem başlangıcında KeePassXC&apos;yi otomatik olarak başlat</translation>
</message>
<message>
<source>Mark database as modified for non-data changes (e.g., expanding groups)</source>
<translation>Veritabanında veri olmayan değişiklikler için değiştirilmiş olarak işaretleme (ör. genişleyen gruplar)</translation>
</message>
<message>
<source>Safely save database files (disable if experiencing problems with Dropbox, etc.)</source>
<translation>Veritabanı dosyalarını güvenle kaydet (Dropbox, vb. İle ilgili sorun olursa devre dışı bırak)</translation>
@ -344,6 +340,18 @@
<source>Auto-Type start delay:</source>
<translation>Otomatik Yazım başlangıç gecikmesi:</translation>
</message>
<message>
<source>Automatically save when locking database</source>
<translation>Veritabanını kilitlerken otomatik kaydet</translation>
</message>
<message>
<source>Automatically save non-data changes when locking database</source>
<translation>Veritabanını kilitlerken veri dışı değişiklikleri otomatik olarak kaydet</translation>
</message>
<message>
<source>Tray icon type</source>
<translation>Tepsi simgesi türü</translation>
</message>
</context>
<context>
<name>ApplicationSettingsWidgetSecurity</name>
@ -4517,7 +4525,7 @@ Keepassxc indirme sayfasında mevcut Appımage kullanmanızı öneririz.</transl
</message>
<message>
<source>&amp;Import</source>
<translation>&amp;İçe aktar</translation>
<translation>&amp;İçe Aktar</translation>
</message>
<message>
<source>Create a new database</source>
@ -4541,7 +4549,7 @@ Keepassxc indirme sayfasında mevcut Appımage kullanmanızı öneririz.</transl
</message>
<message>
<source>Perform &amp;Auto-Type</source>
<translation>&amp;Otomatik Yazım gerçekleştir</translation>
<translation>&amp;Otomatik Yazım Gerçekleştir</translation>
</message>
<message>
<source>Open &amp;URL</source>
@ -4575,7 +4583,7 @@ Bazı hatalar ve küçük sorunlar olabilir, bu sürüm şu an dağıtımda değ
</message>
<message>
<source>&amp;Export</source>
<translation>Dışa &amp;aktar</translation>
<translation>Dışa &amp;Aktar</translation>
</message>
<message>
<source>Sort &amp;A-Z</source>
@ -4803,7 +4811,7 @@ Bazı hatalar ve küçük sorunlar olabilir, bu sürüm şu an dağıtımda değ
</message>
<message>
<source>Compact Mode</source>
<translation>Küçültülmüş kip</translation>
<translation>Küçültülmüş Kip</translation>
</message>
<message>
<source>Automatic</source>
@ -4819,7 +4827,7 @@ Bazı hatalar ve küçük sorunlar olabilir, bu sürüm şu an dağıtımda değ
</message>
<message>
<source>Classic (Platform-native)</source>
<translation>Klasik (Platform-doğal)</translation>
<translation>Klasik (Doğal sistem)</translation>
</message>
<message>
<source>Show Toolbar</source>
@ -4841,6 +4849,26 @@ Bazı hatalar ve küçük sorunlar olabilir, bu sürüm şu an dağıtımda değ
<source>You must restart the application to apply this setting. Would you like to restart now?</source>
<translation>Bu ayarı uygulamak için uygulamayı yeniden başlatmalısınız. Şimdi uygulamayı yeniden başlatmak ister misiniz ?</translation>
</message>
<message>
<source>Perform Auto-Type Sequence</source>
<translation>Otomatik Yazım Sırası</translation>
</message>
<message>
<source>{USERNAME}</source>
<translation>{KULLANICI ADI}</translation>
</message>
<message>
<source>{USERNAME}{ENTER}</source>
<translation>{KULLANICI ADI}{ENTER}</translation>
</message>
<message>
<source>{PASSWORD}</source>
<translation>{PAROLA}</translation>
</message>
<message>
<source>{PASSWORD}{ENTER}</source>
<translation>{PAROLA}{ENTER}</translation>
</message>
</context>
<context>
<name>ManageDatabase</name>
@ -5325,10 +5353,6 @@ Bazı hatalar ve küçük sorunlar olabilir, bu sürüm şu an dağıtımda değ
<comment>Password quality</comment>
<translation>Harika</translation>
</message>
<message>
<source>ExtendedASCII</source>
<translation>GenişletilmişASCII</translation>
</message>
<message>
<source>Switch to advanced mode</source>
<translation>Gelişmiş kipe geç</translation>
@ -5337,58 +5361,22 @@ Bazı hatalar ve küçük sorunlar olabilir, bu sürüm şu an dağıtımda değ
<source>Advanced</source>
<translation>Gelişmiş</translation>
</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>
<source>Braces</source>
<translation>Ayraç</translation>
</message>
<message>
<source>{[(</source>
<translation>{[(</translation>
</message>
<message>
<source>Punctuation</source>
<translation>Noktalama</translation>
</message>
<message>
<source>.,:;</source>
<translation>.,:;</translation>
</message>
<message>
<source>Quotes</source>
<translation>Tırnak</translation>
</message>
<message>
<source>&quot; &apos;</source>
<translation>&quot; &apos;</translation>
</message>
<message>
<source>&lt;*+!?=</source>
<translation>&lt;*+!?=</translation>
</message>
<message>
<source>\_|-/</source>
<translation>\_|-/</translation>
</message>
<message>
<source>Logograms</source>
<translation>Logogramlar</translation>
</message>
<message>
<source>#$%&amp;&amp;@^`~</source>
<translation>#$%&amp;&amp;@^`~</translation>
</message>
<message>
<source>Character set to exclude from generated password</source>
<translation>Oluşturulan paroladan dışlanacak karakter kümesi</translation>
@ -5509,6 +5497,10 @@ Bazı hatalar ve küçük sorunlar olabilir, bu sürüm şu an dağıtımda değ
<source>Regenerate password (%1)</source>
<translation>Parolayı tekrar üret (%1)</translation>
</message>
<message>
<source>Special Characters</source>
<translation>Özel Karakterler</translation>
</message>
</context>
<context>
<name>QApplication</name>

View File

@ -135,6 +135,10 @@
<source>Colorful</source>
<translation>Кольорова</translation>
</message>
<message>
<source>You must restart the application to set the new language. Would you like to restart now?</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>ApplicationSettingsWidgetGeneral</name>
@ -166,10 +170,6 @@
<source>Automatically save after every change</source>
<translation>Автоматично зберігати після кожної зміни</translation>
</message>
<message>
<source>Automatically save on exit</source>
<translation>Автоматично зберігати перед виходом</translation>
</message>
<message>
<source>Automatically reload the database when modified externally</source>
<translation>Автоматично перезавантажувати сховище після зовнішніх змін</translation>
@ -304,10 +304,6 @@
<source>Automatically launch KeePassXC at system startup</source>
<translation>Автоматично запускати KeePassXC під час завантаженні системи</translation>
</message>
<message>
<source>Mark database as modified for non-data changes (e.g., expanding groups)</source>
<translation>Позначати сховище зміненим після змін, що не стосуються даних (наприклад, розкриття груп)</translation>
</message>
<message>
<source>Safely save database files (disable if experiencing problems with Dropbox, etc.)</source>
<translation>Безпечно зберігати файли сховищ (вимкніть, якщо виникають проблеми з Dropbox та ін.)</translation>
@ -344,6 +340,18 @@
<source>Auto-Type start delay:</source>
<translation>Затримка початку автозаповнення:</translation>
</message>
<message>
<source>Automatically save when locking database</source>
<translation type="unfinished"/>
</message>
<message>
<source>Automatically save non-data changes when locking database</source>
<translation type="unfinished"/>
</message>
<message>
<source>Tray icon type</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>ApplicationSettingsWidgetSecurity</name>
@ -4839,6 +4847,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>
<translation type="unfinished"/>
</message>
<message>
<source>Perform Auto-Type Sequence</source>
<translation type="unfinished"/>
</message>
<message>
<source>{USERNAME}</source>
<translation type="unfinished"/>
</message>
<message>
<source>{USERNAME}{ENTER}</source>
<translation type="unfinished"/>
</message>
<message>
<source>{PASSWORD}</source>
<translation type="unfinished"/>
</message>
<message>
<source>{PASSWORD}{ENTER}</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>ManageDatabase</name>
@ -5323,10 +5351,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<comment>Password quality</comment>
<translation>Відмінна</translation>
</message>
<message>
<source>ExtendedASCII</source>
<translation>Розширені ASCII</translation>
</message>
<message>
<source>Switch to advanced mode</source>
<translation>Перемкнути в розширений режим</translation>
@ -5335,58 +5359,22 @@ Expect some bugs and minor issues, this version is not meant for production use.
<source>Advanced</source>
<translation>Розширене</translation>
</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>
<source>Braces</source>
<translation>Дужки</translation>
</message>
<message>
<source>{[(</source>
<translation>{[(</translation>
</message>
<message>
<source>Punctuation</source>
<translation>Знаки пунктуації</translation>
</message>
<message>
<source>.,:;</source>
<translation>.,:;</translation>
</message>
<message>
<source>Quotes</source>
<translation>Лапки</translation>
</message>
<message>
<source>&quot; &apos;</source>
<translation>&quot; &apos;</translation>
</message>
<message>
<source>&lt;*+!?=</source>
<translation>&lt;*+!?=</translation>
</message>
<message>
<source>\_|-/</source>
<translation>\_|-/</translation>
</message>
<message>
<source>Logograms</source>
<translation>Логограми</translation>
</message>
<message>
<source>#$%&amp;&amp;@^`~</source>
<translation>#$%&amp;&amp;@^`~</translation>
</message>
<message>
<source>Character set to exclude from generated password</source>
<translation>Набір символів, яких треба уникати</translation>
@ -5507,6 +5495,10 @@ Expect some bugs and minor issues, this version is not meant for production use.
<source>Regenerate password (%1)</source>
<translation>Створити пароль знову (%1)</translation>
</message>
<message>
<source>Special Characters</source>
<translation>Спеціальні символи</translation>
</message>
</context>
<context>
<name>QApplication</name>

View File

@ -135,6 +135,10 @@
<source>Colorful</source>
<translation></translation>
</message>
<message>
<source>You must restart the application to set the new language. Would you like to restart now?</source>
<translation></translation>
</message>
</context>
<context>
<name>ApplicationSettingsWidgetGeneral</name>
@ -166,10 +170,6 @@
<source>Automatically save after every change</source>
<translation></translation>
</message>
<message>
<source>Automatically save on exit</source>
<translation></translation>
</message>
<message>
<source>Automatically reload the database when modified externally</source>
<translation></translation>
@ -290,7 +290,7 @@
</message>
<message>
<source>Global auto-type shortcut</source>
<translation></translation>
<translation></translation>
</message>
<message>
<source>Auto-type character typing delay milliseconds</source>
@ -304,10 +304,6 @@
<source>Automatically launch KeePassXC at system startup</source>
<translation> KeePassXC</translation>
</message>
<message>
<source>Mark database as modified for non-data changes (e.g., expanding groups)</source>
<translation></translation>
</message>
<message>
<source>Safely save database files (disable if experiencing problems with Dropbox, etc.)</source>
<translation> Dropbox </translation>
@ -326,7 +322,7 @@
</message>
<message>
<source>Tray icon type:</source>
<translation></translation>
<translation></translation>
</message>
<message>
<source>Reset settings to default</source>
@ -334,15 +330,27 @@
</message>
<message>
<source>Auto-Type typing delay:</source>
<translation></translation>
<translation></translation>
</message>
<message>
<source>Global Auto-Type shortcut:</source>
<translation></translation>
<translation></translation>
</message>
<message>
<source>Auto-Type start delay:</source>
<translation></translation>
<translation></translation>
</message>
<message>
<source>Automatically save when locking database</source>
<translation></translation>
</message>
<message>
<source>Automatically save non-data changes when locking database</source>
<translation></translation>
</message>
<message>
<source>Tray icon type</source>
<translation></translation>
</message>
</context>
<context>
@ -390,7 +398,7 @@
</message>
<message>
<source>Re-lock previously locked database after performing Auto-Type</source>
<translation></translation>
<translation></translation>
</message>
<message>
<source>Hide passwords in the entry preview panel</source>
@ -2882,11 +2890,11 @@ Supported extensions are: %1.</source>
</message>
<message>
<source>Use default Auto-Type sequence of parent group</source>
<translation>使</translation>
<translation>使</translation>
</message>
<message>
<source>Auto-Type:</source>
<translation></translation>
<translation></translation>
</message>
<message>
<source>Search:</source>
@ -2902,7 +2910,7 @@ Supported extensions are: %1.</source>
</message>
<message>
<source>Set default Auto-Type sequence</source>
<translation></translation>
<translation></translation>
</message>
</context>
<context>
@ -3119,7 +3127,7 @@ This may cause the affected plugins to malfunction.</source>
</message>
<message numerus="yes">
<source>Are you sure you want to remove %n attachment(s)?</source>
<translation><numerusform>n个附件吗</numerusform></translation>
<translation><numerusform> n </numerusform></translation>
</message>
<message>
<source>Save attachments</source>
@ -3371,7 +3379,7 @@ Are you sure to add this file?</source>
</message>
<message>
<source>Autotype</source>
<translation></translation>
<translation></translation>
</message>
<message>
<source>Window</source>
@ -4836,6 +4844,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>
<translation></translation>
</message>
<message>
<source>Perform Auto-Type Sequence</source>
<translation></translation>
</message>
<message>
<source>{USERNAME}</source>
<translation></translation>
</message>
<message>
<source>{USERNAME}{ENTER}</source>
<translation></translation>
</message>
<message>
<source>{PASSWORD}</source>
<translation></translation>
</message>
<message>
<source>{PASSWORD}{ENTER}</source>
<translation></translation>
</message>
</context>
<context>
<name>ManageDatabase</name>
@ -5320,10 +5348,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<comment>Password quality</comment>
<translation></translation>
</message>
<message>
<source>ExtendedASCII</source>
<translation> ASCII</translation>
</message>
<message>
<source>Switch to advanced mode</source>
<translation></translation>
@ -5332,58 +5356,22 @@ Expect some bugs and minor issues, this version is not meant for production use.
<source>Advanced</source>
<translation></translation>
</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>
<source>Braces</source>
<translation></translation>
</message>
<message>
<source>{[(</source>
<translation>{[(</translation>
</message>
<message>
<source>Punctuation</source>
<translation></translation>
</message>
<message>
<source>.,:;</source>
<translation>.,:;</translation>
</message>
<message>
<source>Quotes</source>
<translation></translation>
</message>
<message>
<source>&quot; &apos;</source>
<translation>&quot; &apos;</translation>
</message>
<message>
<source>&lt;*+!?=</source>
<translation>&lt;*+!?=</translation>
</message>
<message>
<source>\_|-/</source>
<translation>\_|-/</translation>
</message>
<message>
<source>Logograms</source>
<translation></translation>
</message>
<message>
<source>#$%&amp;&amp;@^`~</source>
<translation>#$%&amp;&amp;@^`~</translation>
</message>
<message>
<source>Character set to exclude from generated password</source>
<translation></translation>
@ -5504,6 +5492,10 @@ Expect some bugs and minor issues, this version is not meant for production use.
<source>Regenerate password (%1)</source>
<translation> (%1)</translation>
</message>
<message>
<source>Special Characters</source>
<translation></translation>
</message>
</context>
<context>
<name>QApplication</name>

View File

@ -135,6 +135,10 @@
<source>Colorful</source>
<translation></translation>
</message>
<message>
<source>You must restart the application to set the new language. Would you like to restart now?</source>
<translation>使</translation>
</message>
</context>
<context>
<name>ApplicationSettingsWidgetGeneral</name>
@ -166,10 +170,6 @@
<source>Automatically save after every change</source>
<translation></translation>
</message>
<message>
<source>Automatically save on exit</source>
<translation></translation>
</message>
<message>
<source>Automatically reload the database when modified externally</source>
<translation></translation>
@ -304,10 +304,6 @@
<source>Automatically launch KeePassXC at system startup</source>
<translation> KeePassXC</translation>
</message>
<message>
<source>Mark database as modified for non-data changes (e.g., expanding groups)</source>
<translation></translation>
</message>
<message>
<source>Safely save database files (disable if experiencing problems with Dropbox, etc.)</source>
<translation> Dropbox </translation>
@ -344,6 +340,18 @@
<source>Auto-Type start delay:</source>
<translation></translation>
</message>
<message>
<source>Automatically save when locking database</source>
<translation></translation>
</message>
<message>
<source>Automatically save non-data changes when locking database</source>
<translation></translation>
</message>
<message>
<source>Tray icon type</source>
<translation></translation>
</message>
</context>
<context>
<name>ApplicationSettingsWidgetSecurity</name>
@ -4839,6 +4847,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>
<translation></translation>
</message>
<message>
<source>Perform Auto-Type Sequence</source>
<translation></translation>
</message>
<message>
<source>{USERNAME}</source>
<translation type="unfinished"/>
</message>
<message>
<source>{USERNAME}{ENTER}</source>
<translation type="unfinished"/>
</message>
<message>
<source>{PASSWORD}</source>
<translation type="unfinished"/>
</message>
<message>
<source>{PASSWORD}{ENTER}</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>ManageDatabase</name>
@ -5323,10 +5351,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<comment>Password quality</comment>
<translation></translation>
</message>
<message>
<source>ExtendedASCII</source>
<translation> ASCII</translation>
</message>
<message>
<source>Switch to advanced mode</source>
<translation></translation>
@ -5335,58 +5359,22 @@ Expect some bugs and minor issues, this version is not meant for production use.
<source>Advanced</source>
<translation></translation>
</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>
<source>Braces</source>
<translation></translation>
</message>
<message>
<source>{[(</source>
<translation>{[(</translation>
</message>
<message>
<source>Punctuation</source>
<translation></translation>
</message>
<message>
<source>.,:;</source>
<translation>.,:;</translation>
</message>
<message>
<source>Quotes</source>
<translation></translation>
</message>
<message>
<source>&quot; &apos;</source>
<translation>&quot; &apos;</translation>
</message>
<message>
<source>&lt;*+!?=</source>
<translation>&lt;*+!?=</translation>
</message>
<message>
<source>\_|-/</source>
<translation>\_|-/</translation>
</message>
<message>
<source>Logograms</source>
<translation></translation>
</message>
<message>
<source>#$%&amp;&amp;@^`~</source>
<translation>#$%&amp;&amp;@^`~</translation>
</message>
<message>
<source>Character set to exclude from generated password</source>
<translation></translation>
@ -5507,6 +5495,10 @@ Expect some bugs and minor issues, this version is not meant for production use.
<source>Regenerate password (%1)</source>
<translation> (%1)</translation>
</message>
<message>
<source>Special Characters</source>
<translation></translation>
</message>
</context>
<context>
<name>QApplication</name>
@ -5587,7 +5579,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
</message>
<message>
<source>Empty</source>
<translation></translation>
<translation></translation>
</message>
<message>
<source>Remove</source>

View File

@ -1,5 +1,5 @@
name: keepassxc
version: 2.6.1
version: 2.6.2
grade: stable
summary: Community-driven port of the Windows application “KeePass Password Safe”
description: |

View File

@ -120,7 +120,6 @@ set(keepassx_SOURCES
gui/IconModels.cpp
gui/KeePass1OpenWidget.cpp
gui/KMessageWidget.cpp
gui/LineEdit.cpp
gui/MainWindow.cpp
gui/MessageBox.cpp
gui/MessageWidget.cpp

View File

@ -267,8 +267,8 @@ QJsonObject BrowserAction::handleGetLogins(const QJsonObject& json, const QStrin
return getErrorReply(action, ERROR_KEEPASS_CANNOT_DECRYPT_MESSAGE);
}
const QString url = decrypted.value("url").toString();
if (url.isEmpty()) {
const QString siteUrl = decrypted.value("url").toString();
if (siteUrl.isEmpty()) {
return getErrorReply(action, ERROR_KEEPASS_NO_URL_PROVIDED);
}
@ -281,10 +281,10 @@ QJsonObject BrowserAction::handleGetLogins(const QJsonObject& json, const QStrin
}
const QString id = decrypted.value("id").toString();
const QString submit = decrypted.value("submitUrl").toString();
const QString formUrl = decrypted.value("submitUrl").toString();
const QString auth = decrypted.value("httpAuth").toString();
const bool httpAuth = auth.compare(TRUE_STR, Qt::CaseSensitive) == 0 ? true : false;
const QJsonArray users = browserService()->findMatchingEntries(id, url, submit, "", keyList, httpAuth);
const QJsonArray users = browserService()->findMatchingEntries(id, siteUrl, formUrl, "", keyList, httpAuth);
if (users.isEmpty()) {
return getErrorReply(action, ERROR_KEEPASS_NO_LOGINS_FOUND);

View File

@ -371,8 +371,8 @@ QString BrowserService::getKey(const QString& id)
}
QJsonArray BrowserService::findMatchingEntries(const QString& dbid,
const QString& url,
const QString& submitUrl,
const QString& siteUrlStr,
const QString& formUrlStr,
const QString& realm,
const StringPairList& keyList,
const bool httpAuth)
@ -380,13 +380,13 @@ QJsonArray BrowserService::findMatchingEntries(const QString& dbid,
Q_UNUSED(dbid);
const bool alwaysAllowAccess = browserSettings()->alwaysAllowAccess();
const bool ignoreHttpAuth = browserSettings()->httpAuthPermission();
const QString host = QUrl(url).host();
const QString submitHost = QUrl(submitUrl).host();
const QString siteHost = QUrl(siteUrlStr).host();
const QString formHost = QUrl(formUrlStr).host();
// Check entries for authorization
QList<Entry*> pwEntriesToConfirm;
QList<Entry*> pwEntries;
for (auto* entry : searchEntries(url, submitUrl, keyList)) {
for (auto* entry : searchEntries(siteUrlStr, formUrlStr, keyList)) {
if (entry->customData()->contains(BrowserService::OPTION_HIDE_ENTRY)
&& entry->customData()->value(BrowserService::OPTION_HIDE_ENTRY) == TRUE_STR) {
continue;
@ -403,7 +403,7 @@ QJsonArray BrowserService::findMatchingEntries(const QString& dbid,
continue;
}
switch (checkAccess(entry, host, submitHost, realm)) {
switch (checkAccess(entry, siteHost, formHost, realm)) {
case Denied:
continue;
@ -422,7 +422,8 @@ QJsonArray BrowserService::findMatchingEntries(const QString& dbid,
}
// Confirm entries
QList<Entry*> selectedEntriesToConfirm = confirmEntries(pwEntriesToConfirm, url, host, submitHost, realm, httpAuth);
QList<Entry*> selectedEntriesToConfirm =
confirmEntries(pwEntriesToConfirm, siteUrlStr, siteHost, formHost, realm, httpAuth);
if (!selectedEntriesToConfirm.isEmpty()) {
pwEntries.append(selectedEntriesToConfirm);
}
@ -437,7 +438,7 @@ QJsonArray BrowserService::findMatchingEntries(const QString& dbid,
}
// Sort results
pwEntries = sortEntries(pwEntries, host, submitUrl, url);
pwEntries = sortEntries(pwEntries, siteUrlStr, formUrlStr);
// Fill the list
QJsonArray result;
@ -451,8 +452,8 @@ QJsonArray BrowserService::findMatchingEntries(const QString& dbid,
void BrowserService::addEntry(const QString& dbid,
const QString& login,
const QString& password,
const QString& url,
const QString& submitUrl,
const QString& siteUrlStr,
const QString& formUrlStr,
const QString& realm,
const QString& group,
const QString& groupUuid,
@ -467,8 +468,8 @@ void BrowserService::addEntry(const QString& dbid,
auto* entry = new Entry();
entry->setUuid(QUuid::createUuid());
entry->setTitle(QUrl(url).host());
entry->setUrl(url);
entry->setTitle(QUrl(siteUrlStr).host());
entry->setUrl(siteUrlStr);
entry->setIcon(KEEPASSXCBROWSER_DEFAULT_ICON);
entry->setUsername(login);
entry->setPassword(password);
@ -487,8 +488,8 @@ void BrowserService::addEntry(const QString& dbid,
entry->setGroup(getDefaultEntryGroup(db));
}
const QString host = QUrl(url).host();
const QString submitHost = QUrl(submitUrl).host();
const QString host = QUrl(siteUrlStr).host();
const QString submitHost = QUrl(formUrlStr).host();
BrowserEntryConfig config;
config.allow(host);
@ -505,8 +506,8 @@ bool BrowserService::updateEntry(const QString& dbid,
const QString& uuid,
const QString& login,
const QString& password,
const QString& url,
const QString& submitUrl)
const QString& siteUrlStr,
const QString& formUrlStr)
{
// TODO: select database based on this key id
Q_UNUSED(dbid);
@ -518,7 +519,7 @@ bool BrowserService::updateEntry(const QString& dbid,
Entry* entry = db->rootGroup()->findEntryByUuid(Tools::hexToUuid(uuid));
if (!entry) {
// If entry is not found for update, add a new one to the selected database
addEntry(dbid, login, password, url, submitUrl, "", "", "", db);
addEntry(dbid, login, password, siteUrlStr, formUrlStr, "", "", "", db);
return true;
}
@ -547,7 +548,7 @@ bool BrowserService::updateEntry(const QString& dbid,
dialogResult = MessageBox::question(
nullptr,
tr("KeePassXC: Update Entry"),
tr("Do you want to update the information in %1 - %2?").arg(QUrl(url).host(), username),
tr("Do you want to update the information in %1 - %2?").arg(QUrl(siteUrlStr).host(), username),
MessageBox::Save | MessageBox::Cancel,
MessageBox::Cancel,
MessageBox::Raise);
@ -570,7 +571,7 @@ bool BrowserService::updateEntry(const QString& dbid,
}
QList<Entry*>
BrowserService::searchEntries(const QSharedPointer<Database>& db, const QString& url, const QString& submitUrl)
BrowserService::searchEntries(const QSharedPointer<Database>& db, const QString& siteUrlStr, const QString& formUrlStr)
{
QList<Entry*> entries;
auto* rootGroup = db->rootGroup();
@ -590,25 +591,29 @@ BrowserService::searchEntries(const QSharedPointer<Database>& db, const QString&
// Search for additional URL's starting with KP2A_URL
for (const auto& key : entry->attributes()->keys()) {
if (key.startsWith(ADDITIONAL_URL) && handleURL(entry->attributes()->value(key), url, submitUrl)
if (key.startsWith(ADDITIONAL_URL) && handleURL(entry->attributes()->value(key), siteUrlStr, formUrlStr)
&& !entries.contains(entry)) {
entries.append(entry);
continue;
}
}
if (!handleURL(entry->url(), url, submitUrl)) {
if (!handleURL(entry->url(), siteUrlStr, formUrlStr)) {
continue;
}
entries.append(entry);
// Additional URL check may have already inserted the entry to the list
if (!entries.contains(entry)) {
entries.append(entry);
}
}
}
return entries;
}
QList<Entry*> BrowserService::searchEntries(const QString& url, const QString& submitUrl, const StringPairList& keyList)
QList<Entry*>
BrowserService::searchEntries(const QString& siteUrlStr, const QString& formUrlStr, const StringPairList& keyList)
{
// Check if database is connected with KeePassXC-Browser
auto databaseConnected = [&](const QSharedPointer<Database>& db) {
@ -638,11 +643,11 @@ QList<Entry*> BrowserService::searchEntries(const QString& url, const QString& s
}
// Search entries matching the hostname
QString hostname = QUrl(url).host();
QString hostname = QUrl(siteUrlStr).host();
QList<Entry*> entries;
do {
for (const auto& db : databases) {
entries << searchEntries(db, url, submitUrl);
entries << searchEntries(db, siteUrlStr, formUrlStr);
}
} while (entries.isEmpty() && removeFirstDomain(hostname));
@ -722,47 +727,30 @@ void BrowserService::convertAttributesToCustomData(QSharedPointer<Database> db)
}
}
QList<Entry*> BrowserService::sortEntries(QList<Entry*>& pwEntries,
const QString& host,
const QString& entryUrl,
const QString& fullUrl)
QList<Entry*>
BrowserService::sortEntries(QList<Entry*>& pwEntries, const QString& siteUrlStr, const QString& formUrlStr)
{
QUrl url(entryUrl);
if (url.scheme().isEmpty()) {
url.setScheme("https");
}
const QString submitUrl = url.toString(QUrl::StripTrailingSlash);
const QString baseSubmitUrl =
url.toString(QUrl::StripTrailingSlash | QUrl::RemovePath | QUrl::RemoveQuery | QUrl::RemoveFragment);
// Build map of prioritized entries
QMultiMap<int, Entry*> priorities;
for (auto* entry : pwEntries) {
priorities.insert(sortPriority(entry, host, submitUrl, baseSubmitUrl, fullUrl), entry);
priorities.insert(sortPriority(getEntryURLs(entry), siteUrlStr, formUrlStr), entry);
}
auto keys = priorities.uniqueKeys();
std::sort(keys.begin(), keys.end(), [](int l, int r) { return l > r; });
QList<Entry*> results;
QString field = browserSettings()->sortByTitle() ? "Title" : "UserName";
for (int i = 100; i >= 0; i -= 5) {
if (priorities.count(i) > 0) {
// Sort same priority entries by Title or UserName
auto entries = priorities.values(i);
std::sort(entries.begin(), entries.end(), [&field](Entry* left, Entry* right) {
return (QString::localeAwareCompare(left->attributes()->value(field), right->attributes()->value(field))
< 0)
|| ((QString::localeAwareCompare(left->attributes()->value(field),
right->attributes()->value(field))
== 0)
&& (QString::localeAwareCompare(left->attributes()->value("UserName"),
right->attributes()->value("UserName"))
< 0));
});
results << entries;
if (browserSettings()->bestMatchOnly() && !pwEntries.isEmpty()) {
// Early out once we find the highest batch of matches
break;
}
auto sortField = browserSettings()->sortByTitle() ? EntryAttributes::TitleKey : EntryAttributes::UserNameKey;
for (auto key : keys) {
// Sort same priority entries by Title or UserName
auto entries = priorities.values(key);
std::sort(entries.begin(), entries.end(), [&sortField](Entry* left, Entry* right) {
return QString::localeAwareCompare(left->attribute(sortField), right->attribute(sortField));
});
results << entries;
if (browserSettings()->bestMatchOnly() && !results.isEmpty()) {
// Early out once we find the highest batch of matches
break;
}
}
@ -770,9 +758,9 @@ QList<Entry*> BrowserService::sortEntries(QList<Entry*>& pwEntries,
}
QList<Entry*> BrowserService::confirmEntries(QList<Entry*>& pwEntriesToConfirm,
const QString& url,
const QString& host,
const QString& submitHost,
const QString& siteUrlStr,
const QString& siteHost,
const QString& formUrlStr,
const QString& realm,
const bool httpAuth)
{
@ -790,9 +778,9 @@ QList<Entry*> BrowserService::confirmEntries(QList<Entry*>& pwEntriesToConfirm,
auto entry = pwEntriesToConfirm[item->row()];
BrowserEntryConfig config;
config.load(entry);
config.deny(host);
if (!submitHost.isEmpty() && host != submitHost) {
config.deny(submitHost);
config.deny(siteHost);
if (!formUrlStr.isEmpty() && siteHost != formUrlStr) {
config.deny(formUrlStr);
}
if (!realm.isEmpty()) {
config.setRealm(realm);
@ -800,7 +788,7 @@ QList<Entry*> BrowserService::confirmEntries(QList<Entry*>& pwEntriesToConfirm,
config.save(entry);
});
accessControlDialog.setItems(pwEntriesToConfirm, url, httpAuth);
accessControlDialog.setItems(pwEntriesToConfirm, siteUrlStr, httpAuth);
QList<Entry*> allowedEntries;
if (accessControlDialog.exec() == QDialog::Accepted) {
@ -810,9 +798,9 @@ QList<Entry*> BrowserService::confirmEntries(QList<Entry*>& pwEntriesToConfirm,
if (accessControlDialog.remember()) {
BrowserEntryConfig config;
config.load(entry);
config.allow(host);
if (!submitHost.isEmpty() && host != submitHost) {
config.allow(submitHost);
config.allow(siteHost);
if (!formUrlStr.isEmpty() && siteHost != formUrlStr) {
config.allow(formUrlStr);
}
if (!realm.isEmpty()) {
config.setRealm(realm);
@ -871,7 +859,7 @@ QJsonObject BrowserService::prepareEntry(const Entry* entry)
}
BrowserService::Access
BrowserService::checkAccess(const Entry* entry, const QString& host, const QString& submitHost, const QString& realm)
BrowserService::checkAccess(const Entry* entry, const QString& siteHost, const QString& formHost, const QString& realm)
{
if (entry->isExpired()) {
return browserSettings()->allowExpiredCredentials() ? Allowed : Denied;
@ -881,10 +869,10 @@ BrowserService::checkAccess(const Entry* entry, const QString& host, const QStri
if (!config.load(entry)) {
return Unknown;
}
if ((config.isAllowed(host)) && (submitHost.isEmpty() || config.isAllowed(submitHost))) {
if ((config.isAllowed(siteHost)) && (formHost.isEmpty() || config.isAllowed(formHost))) {
return Allowed;
}
if ((config.isDenied(host)) || (!submitHost.isEmpty() && config.isDenied(submitHost))) {
if ((config.isDenied(siteHost)) || (!formHost.isEmpty() && config.isDenied(formHost))) {
return Denied;
}
if (!realm.isEmpty() && config.realm() != realm) {
@ -919,66 +907,72 @@ Group* BrowserService::getDefaultEntryGroup(const QSharedPointer<Database>& sele
return group;
}
int BrowserService::sortPriority(const Entry* entry,
const QString& host,
const QString& submitUrl,
const QString& baseSubmitUrl,
const QString& fullUrl) const
// Returns the maximum sort priority given a set of match urls and the
// extension provided site and form url.
int BrowserService::sortPriority(const QStringList& urls, const QString& siteUrlStr, const QString& formUrlStr)
{
QUrl url(entry->url());
if (url.scheme().isEmpty()) {
url.setScheme("https");
}
QList<int> priorityList;
// NOTE: QUrl::matches is utterly broken in Qt < 5.11, so we work around that
// by removing parts of the url that we don't match and direct matching others
const auto stdOpts = QUrl::RemoveFragment | QUrl::RemoveUserInfo;
const auto siteUrl = QUrl(siteUrlStr).adjusted(stdOpts);
const auto formUrl = QUrl(formUrlStr).adjusted(stdOpts);
// Add the empty path to the URL if it's missing
if (url.path().isEmpty() && !url.hasFragment() && !url.hasQuery()) {
url.setPath("/");
}
auto getPriority = [&](const QString& givenUrl) {
auto url = QUrl::fromUserInput(givenUrl).adjusted(stdOpts);
const QString entryURL = url.toString(QUrl::StripTrailingSlash);
const QString baseEntryURL =
url.toString(QUrl::StripTrailingSlash | QUrl::RemovePath | QUrl::RemoveQuery | QUrl::RemoveFragment);
// Default to https scheme if undefined
if (url.scheme().isEmpty() || !givenUrl.contains("://")) {
url.setScheme("https");
}
if (!url.host().contains(".") && url.host() != "localhost") {
// Add the empty path to the URL if it's missing.
// URL's from the extension always have a path set, entry URL's can be without.
if (url.path().isEmpty() && !url.hasFragment() && !url.hasQuery()) {
url.setPath("/");
}
// Reject invalid urls and hosts, except 'localhost', and scheme mismatch
if (!url.isValid() || (!url.host().contains(".") && url.host() != "localhost")
|| url.scheme() != siteUrl.scheme()) {
return 0;
}
// Exact match with site url or form url
if (url.matches(siteUrl, QUrl::None) || url.matches(formUrl, QUrl::None)) {
return 100;
}
// Exact match without the query string
if (url.matches(siteUrl, QUrl::RemoveQuery) || url.matches(formUrl, QUrl::RemoveQuery)) {
return 90;
}
// Match without path (ie, FQDN match), form url prioritizes lower than site url
if (url.host() == siteUrl.host()) {
return 80;
}
if (url.host() == formUrl.host()) {
return 70;
}
// Site/form url ends with given url (subdomain mismatch)
if (siteUrl.host().endsWith(url.host())) {
return 60;
}
if (formUrl.host().endsWith(url.host())) {
return 50;
}
// No valid match found
return 0;
};
for (const auto& entryUrl : urls) {
priorityList << getPriority(entryUrl);
}
if (fullUrl == entryURL) {
return 100;
}
if (submitUrl == entryURL) {
return 95;
}
if (submitUrl.startsWith(entryURL) && entryURL != host && baseSubmitUrl != entryURL) {
return 90;
}
if (submitUrl.startsWith(baseEntryURL) && entryURL != host && baseSubmitUrl != baseEntryURL) {
return 80;
}
if (entryURL == host) {
return 70;
}
if (entryURL == baseSubmitUrl) {
return 60;
}
if (entryURL.startsWith(submitUrl)) {
return 50;
}
if (entryURL.startsWith(baseSubmitUrl) && baseSubmitUrl != host) {
return 40;
}
if (submitUrl.startsWith(entryURL)) {
return 30;
}
if (submitUrl.startsWith(baseEntryURL)) {
return 20;
}
if (entryURL.startsWith(host)) {
return 10;
}
if (host.startsWith(entryURL)) {
return 5;
}
return 0;
return *std::max_element(priorityList.begin(), priorityList.end());
}
bool BrowserService::schemeFound(const QString& url)
@ -1004,7 +998,7 @@ bool BrowserService::removeFirstDomain(QString& hostname)
return false;
}
bool BrowserService::handleURL(const QString& entryUrl, const QString& url, const QString& submitUrl)
bool BrowserService::handleURL(const QString& entryUrl, const QString& siteUrlStr, const QString& formUrlStr)
{
if (entryUrl.isEmpty()) {
return false;
@ -1022,8 +1016,8 @@ bool BrowserService::handleURL(const QString& entryUrl, const QString& url, cons
}
// Make a direct compare if a local file is used
if (url.contains("file://")) {
return entryUrl == submitUrl;
if (siteUrlStr.contains("file://")) {
return entryUrl == formUrlStr;
}
// URL host validation fails
@ -1032,7 +1026,7 @@ bool BrowserService::handleURL(const QString& entryUrl, const QString& url, cons
}
// Match port, if used
QUrl siteQUrl(url);
QUrl siteQUrl(siteUrlStr);
if (entryQUrl.port() > 0 && entryQUrl.port() != siteQUrl.port()) {
return false;
}
@ -1056,17 +1050,7 @@ bool BrowserService::handleURL(const QString& entryUrl, const QString& url, cons
// Match the subdomains with the limited wildcard
if (siteQUrl.host().endsWith(entryQUrl.host())) {
if (!browserSettings()->bestMatchOnly()) {
return true;
}
// Match the exact subdomain and path, or start of the path when entry's path is longer than plain "/"
if (siteQUrl.host() == entryQUrl.host()) {
if (siteQUrl.path() == entryQUrl.path()
|| (entryQUrl.path().size() > 1 && siteQUrl.path().startsWith(entryQUrl.path()))) {
return true;
}
}
return true;
}
return false;
@ -1182,6 +1166,10 @@ bool BrowserService::checkLegacySettings(QSharedPointer<Database> db)
bool legacySettingsFound = false;
QList<Entry*> entries = db->rootGroup()->entriesRecursive();
for (const auto& e : entries) {
if (e->isRecycled()) {
continue;
}
if ((e->attributes()->contains(KEEPASSHTTP_NAME) || e->attributes()->contains(KEEPASSXCBROWSER_NAME))
|| (e->title() == KEEPASSHTTP_NAME || e->title().contains(KEEPASSXCBROWSER_NAME, Qt::CaseInsensitive))) {
legacySettingsFound = true;
@ -1212,6 +1200,21 @@ bool BrowserService::checkLegacySettings(QSharedPointer<Database> db)
return dialogResult == MessageBox::Yes;
}
QStringList BrowserService::getEntryURLs(const Entry* entry)
{
QStringList urlList;
urlList << entry->url();
// Handle additional URL's
for (const auto& key : entry->attributes()->keys()) {
if (key.startsWith(ADDITIONAL_URL)) {
urlList << entry->attributes()->value(key);
}
}
return urlList;
}
void BrowserService::hideWindow() const
{
if (m_prevWindowState == WindowState::Minimized) {

View File

@ -63,8 +63,8 @@ public:
void addEntry(const QString& dbid,
const QString& login,
const QString& password,
const QString& url,
const QString& submitUrl,
const QString& siteUrlStr,
const QString& formUrlStr,
const QString& realm,
const QString& group,
const QString& groupUuid,
@ -73,12 +73,12 @@ public:
const QString& uuid,
const QString& login,
const QString& password,
const QString& url,
const QString& submitUrl);
const QString& siteUrlStr,
const QString& formUrlStr);
QJsonArray findMatchingEntries(const QString& dbid,
const QString& url,
const QString& submitUrl,
const QString& siteUrlStr,
const QString& formUrlStr,
const QString& realm,
const StringPairList& keyList,
const bool httpAuth = false);
@ -118,35 +118,31 @@ private:
Hidden
};
QList<Entry*> searchEntries(const QSharedPointer<Database>& db, const QString& url, const QString& submitUrl);
QList<Entry*> searchEntries(const QString& url, const QString& submitUrl, const StringPairList& keyList);
QList<Entry*>
sortEntries(QList<Entry*>& pwEntries, const QString& host, const QString& submitUrl, const QString& fullUrl);
searchEntries(const QSharedPointer<Database>& db, const QString& siteUrlStr, const QString& formUrlStr);
QList<Entry*> searchEntries(const QString& siteUrlStr, const QString& formUrlStr, const StringPairList& keyList);
QList<Entry*> sortEntries(QList<Entry*>& pwEntries, const QString& siteUrlStr, const QString& formUrlStr);
QList<Entry*> confirmEntries(QList<Entry*>& pwEntriesToConfirm,
const QString& url,
const QString& host,
const QString& submitUrl,
const QString& siteUrlStr,
const QString& siteHost,
const QString& formUrlStr,
const QString& realm,
const bool httpAuth);
QJsonObject prepareEntry(const Entry* entry);
QJsonArray getChildrenFromGroup(Group* group);
Access checkAccess(const Entry* entry, const QString& host, const QString& submitHost, const QString& realm);
Access checkAccess(const Entry* entry, const QString& siteHost, const QString& formHost, const QString& realm);
Group* getDefaultEntryGroup(const QSharedPointer<Database>& selectedDb = {});
int sortPriority(const Entry* entry,
const QString& host,
const QString& submitUrl,
const QString& baseSubmitUrl,
const QString& fullUrl) const;
int sortPriority(const QStringList& urls, const QString& siteUrlStr, const QString& formUrlStr);
bool schemeFound(const QString& url);
bool removeFirstDomain(QString& hostname);
bool handleURL(const QString& entryUrl, const QString& url, const QString& submitUrl);
bool handleURL(const QString& entryUrl, const QString& siteUrlStr, const QString& formUrlStr);
QString baseDomain(const QString& hostname) const;
QSharedPointer<Database> getDatabase();
QSharedPointer<Database> selectedDatabase();
QString getDatabaseRootUuid();
QString getDatabaseRecycleBinUuid();
bool checkLegacySettings(QSharedPointer<Database> db);
QStringList getEntryURLs(const Entry* entry);
void hideWindow() const;
void raiseWindow(const bool force = false);

View File

@ -37,7 +37,7 @@ namespace BrowserShared
: path + serverName;
#elif defined(Q_OS_WIN)
// Windows uses named pipes
return serverName;
return serverName + "_" + qgetenv("USERNAME");
#else // Q_OS_MACOS and others
return QStandardPaths::writableLocation(QStandardPaths::TempLocation) + serverName;
#endif

View File

@ -158,7 +158,7 @@ void enterInteractiveMode(const QStringList& arguments)
auto cmd = Commands::getCommand(args[0]);
if (!cmd) {
err << QObject::tr("Unknown command %1").arg(args[0]) << "\n";
err << QObject::tr("Unknown command %1").arg(args[0]) << endl;
continue;
} else if (cmd->name == "quit" || cmd->name == "exit") {
break;
@ -167,6 +167,7 @@ void enterInteractiveMode(const QStringList& arguments)
cmd->currentDatabase = currentDatabase;
cmd->execute(args);
currentDatabase = cmd->currentDatabase;
cmd->currentDatabase.reset();
}
if (currentDatabase) {
@ -246,6 +247,10 @@ int main(int argc, char** argv)
arguments.removeFirst();
int exitCode = command->execute(arguments);
if (command->currentDatabase) {
command->currentDatabase.reset();
}
#if defined(WITH_ASAN) && defined(WITH_LSAN)
// do leak check here to prevent massive tail of end-of-process leak errors from third-party libraries
__lsan_do_leak_check();

View File

@ -58,6 +58,28 @@ namespace AsyncTask
return waitForFuture<FunctionObject>(QtConcurrent::run(task));
}
/**
* Run a given task then call the defined callback. Prevents event loop blocking and
* ensures the validity of the follow-on task through the context. If the context is
* deleted, the callback will not be processed preventing use after free errors.
*
* @param task std::function object to run
* @param context QObject responsible for calling this function
* @param callback std::function object to run after the task completess
*/
template <typename FunctionObject, typename FunctionObject2>
void runThenCallback(FunctionObject task, QObject* context, FunctionObject2 callback)
{
typedef QFutureWatcher<typename std::result_of<FunctionObject()>::type> FutureWatcher;
auto future = QtConcurrent::run(task);
auto watcher = new FutureWatcher(context);
QObject::connect(watcher, &QFutureWatcherBase::finished, context, [=]() {
watcher->deleteLater();
callback(future.result());
});
watcher->setFuture(future);
}
}; // namespace AsyncTask
#endif // KEEPASSXC_ASYNCTASK_HPP

View File

@ -22,6 +22,7 @@
#include <QCoreApplication>
#include <QDir>
#include <QHash>
#include <QProcessEnvironment>
#include <QSettings>
#include <QSize>
#include <QStandardPaths>
@ -98,6 +99,7 @@ static const QHash<Config::ConfigKey, ConfigDirective> configStrings = {
{Config::GUI_MinimizeOnStartup, {QS("GUI/MinimizeOnStartup"), Roaming, false}},
{Config::GUI_MinimizeOnClose, {QS("GUI/MinimizeOnClose"), Roaming, false}},
{Config::GUI_HideUsernames, {QS("GUI/HideUsernames"), Roaming, false}},
{Config::GUI_HidePasswords, {QS("GUI/HidePasswords"), Roaming, true}},
{Config::GUI_AdvancedSettings, {QS("GUI/AdvancedSettings"), Roaming, false}},
{Config::GUI_MonospaceNotes, {QS("GUI/MonospaceNotes"), Roaming, false}},
{Config::GUI_ApplicationTheme, {QS("GUI/ApplicationTheme"), Roaming, QS("auto")}},
@ -418,49 +420,17 @@ void Config::migrate()
sync();
}
Config::Config(const QString& fileName, QObject* parent)
Config::Config(const QString& configFileName, const QString& localConfigFileName, QObject* parent)
: QObject(parent)
{
init(fileName);
init(configFileName, localConfigFileName);
}
Config::Config(QObject* parent)
: QObject(parent)
{
// Check if we are running in portable mode, if so store the config files local to the app
auto portablePath = QCoreApplication::applicationDirPath().append("/%1");
if (QFile::exists(portablePath.arg(".portable"))) {
init(portablePath.arg("config/keepassxc.ini"), portablePath.arg("config/keepassxc_local.ini"));
return;
}
QString configPath;
QString localConfigPath;
#if defined(Q_OS_WIN)
configPath = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation);
localConfigPath = QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation);
#elif defined(Q_OS_MACOS)
configPath = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation);
localConfigPath = QStandardPaths::writableLocation(QStandardPaths::CacheLocation);
#else
// On case-sensitive Operating Systems, force use of lowercase app directories
configPath = QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation) + "/keepassxc";
localConfigPath = QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation) + "/keepassxc";
#endif
configPath += "/keepassxc";
localConfigPath += "/keepassxc";
#ifdef QT_DEBUG
configPath += "_debug";
localConfigPath += "_debug";
#endif
configPath += ".ini";
localConfigPath += ".ini";
init(QDir::toNativeSeparators(configPath), QDir::toNativeSeparators(localConfigPath));
auto configFiles = defaultConfigFiles();
init(configFiles.first, configFiles.second);
}
Config::~Config()
@ -488,6 +458,45 @@ void Config::init(const QString& configFileName, const QString& localConfigFileN
connect(qApp, &QCoreApplication::aboutToQuit, this, &Config::sync);
}
QPair<QString, QString> Config::defaultConfigFiles()
{
// Check if we are running in portable mode, if so store the config files local to the app
auto portablePath = QCoreApplication::applicationDirPath().append("/%1");
if (QFile::exists(portablePath.arg(".portable"))) {
return {portablePath.arg("config/keepassxc.ini"), portablePath.arg("config/keepassxc_local.ini")};
}
QString configPath;
QString localConfigPath;
#if defined(Q_OS_WIN)
configPath = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation);
localConfigPath = QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation);
#elif defined(Q_OS_MACOS)
configPath = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation);
localConfigPath = QStandardPaths::writableLocation(QStandardPaths::CacheLocation);
#else
// On case-sensitive Operating Systems, force use of lowercase app directories
configPath = QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation) + "/keepassxc";
localConfigPath = QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation) + "/keepassxc";
#endif
QString suffix;
#ifdef QT_DEBUG
suffix = "_debug";
#endif
configPath += QString("/keepassxc%1.ini").arg(suffix);
localConfigPath += QString("/keepassxc%1.ini").arg(suffix);
// Allow overriding the default location with env vars
const auto& env = QProcessEnvironment::systemEnvironment();
configPath = env.value("KPXC_CONFIG", configPath);
localConfigPath = env.value("KPXC_CONFIG_LOCAL", localConfigPath);
return {QDir::toNativeSeparators(configPath), QDir::toNativeSeparators(localConfigPath)};
}
Config* Config::instance()
{
if (!m_instance) {
@ -497,12 +506,16 @@ Config* Config::instance()
return m_instance;
}
void Config::createConfigFromFile(const QString& file)
void Config::createConfigFromFile(const QString& configFileName, const QString& localConfigFileName)
{
if (m_instance) {
delete m_instance;
}
m_instance = new Config(file, qApp);
auto defaultFiles = defaultConfigFiles();
m_instance = new Config(configFileName.isEmpty() ? defaultFiles.first : configFileName,
localConfigFileName.isEmpty() ? defaultFiles.second : localConfigFileName,
qApp);
}
void Config::createTempFileInstance()
@ -514,7 +527,7 @@ void Config::createTempFileInstance()
bool openResult = tmpFile->open();
Q_ASSERT(openResult);
Q_UNUSED(openResult);
m_instance = new Config(tmpFile->fileName(), qApp);
m_instance = new Config(tmpFile->fileName(), "", qApp);
tmpFile->setParent(m_instance);
}

View File

@ -81,6 +81,7 @@ public:
GUI_MinimizeOnStartup,
GUI_MinimizeOnClose,
GUI_HideUsernames,
GUI_HidePasswords,
GUI_AdvancedSettings,
GUI_MonospaceNotes,
GUI_ApplicationTheme,
@ -198,17 +199,18 @@ public:
void resetToDefaults();
static Config* instance();
static void createConfigFromFile(const QString& file);
static void createConfigFromFile(const QString& configFileName, const QString& localConfigFileName = {});
static void createTempFileInstance();
signals:
void changed(ConfigKey key);
private:
Config(const QString& fileName, QObject* parent = nullptr);
Config(const QString& configFileName, const QString& localConfigFileName, QObject* parent);
explicit Config(QObject* parent);
void init(const QString& configFileName, const QString& localConfigFileName = "");
void init(const QString& configFileName, const QString& localConfigFileName);
void migrate();
static QPair<QString, QString> defaultConfigFiles();
static QPointer<Config> m_instance;

View File

@ -36,6 +36,8 @@ const int Entry::ResolveMaximumDepth = 10;
const QString Entry::AutoTypeSequenceUsername = "{USERNAME}{ENTER}";
const QString Entry::AutoTypeSequencePassword = "{PASSWORD}{ENTER}";
Entry::CloneFlags Entry::DefaultCloneFlags = Entry::CloneNewUuid | Entry::CloneResetTimeInfo;
Entry::Entry()
: m_attributes(new EntryAttributes(this))
, m_attachments(new EntryAttachments(this))

View File

@ -124,11 +124,6 @@ public:
CustomData* customData();
const CustomData* customData() const;
static const int DefaultIconNumber;
static const int ResolveMaximumDepth;
static const QString AutoTypeSequenceUsername;
static const QString AutoTypeSequencePassword;
void setUuid(const QUuid& uuid);
void setIcon(int iconNumber);
void setIcon(const QUuid& uuid);
@ -209,13 +204,19 @@ public:
DbDir
};
static const int DefaultIconNumber;
static const int ResolveMaximumDepth;
static const QString AutoTypeSequenceUsername;
static const QString AutoTypeSequencePassword;
static CloneFlags DefaultCloneFlags;
/**
* Creates a duplicate of this entry except that the returned entry isn't
* part of any group.
* Note that you need to copy the custom icons manually when inserting the
* new entry into another database.
*/
Entry* clone(CloneFlags flags) const;
Entry* clone(CloneFlags flags = DefaultCloneFlags) const;
void copyDataFrom(const Entry* other);
QString maskPasswordPlaceholders(const QString& str) const;
Entry* resolveReference(const QString& str) const;

View File

@ -118,13 +118,16 @@ void FileWatcher::checkFileChanged()
// Prevent reentrance
m_ignoreFileChange = true;
auto checksum = AsyncTask::runAndWaitForFuture([this]() -> QByteArray { return calculateChecksum(); });
if (checksum != m_fileChecksum) {
m_fileChecksum = checksum;
m_fileChangeDelayTimer.start(0);
}
AsyncTask::runThenCallback([=] { return calculateChecksum(); },
this,
[=](QByteArray checksum) {
if (checksum != m_fileChecksum) {
m_fileChecksum = checksum;
m_fileChangeDelayTimer.start(0);
}
m_ignoreFileChange = false;
m_ignoreFileChange = false;
});
}
QByteArray FileWatcher::calculateChecksum()

View File

@ -37,9 +37,7 @@ const int Group::RecycleBinIconNumber = 43;
const QString Group::RootAutoTypeSequence = "{USERNAME}{TAB}{PASSWORD}{ENTER}";
Group::CloneFlags Group::DefaultCloneFlags =
static_cast<Group::CloneFlags>(Group::CloneNewUuid | Group::CloneResetTimeInfo | Group::CloneIncludeEntries);
Entry::CloneFlags Group::DefaultEntryCloneFlags =
static_cast<Entry::CloneFlags>(Entry::CloneNewUuid | Entry::CloneResetTimeInfo);
Group::CloneNewUuid | Group::CloneResetTimeInfo | Group::CloneIncludeEntries;
Group::Group()
: m_customData(new CustomData(this))

View File

@ -109,7 +109,6 @@ public:
static const int DefaultIconNumber;
static const int RecycleBinIconNumber;
static CloneFlags DefaultCloneFlags;
static Entry::CloneFlags DefaultEntryCloneFlags;
static const QString RootAutoTypeSequence;
Group* findChildByName(const QString& name);
@ -158,7 +157,7 @@ public:
QSet<QUuid> customIconsRecursive() const;
QList<QString> usernamesRecursive(int topN = -1) const;
Group* clone(Entry::CloneFlags entryFlags = DefaultEntryCloneFlags,
Group* clone(Entry::CloneFlags entryFlags = Entry::DefaultCloneFlags,
CloneFlags groupFlags = DefaultCloneFlags) const;
void copyDataFrom(const Group* other);

View File

@ -263,7 +263,8 @@ namespace Tools
bool checkUrlValid(const QString& urlField)
{
if (urlField.isEmpty() || urlField.startsWith("cmd://", Qt::CaseInsensitive)) {
if (urlField.isEmpty() || urlField.startsWith("cmd://", Qt::CaseInsensitive)
|| urlField.startsWith("{REF:A", Qt::CaseInsensitive)) {
return true;
}

View File

@ -25,11 +25,7 @@ DatabaseOpenDialog::DatabaseOpenDialog(QWidget* parent)
, m_view(new DatabaseOpenWidget(this))
{
setWindowTitle(tr("Unlock Database - KeePassXC"));
#ifdef Q_OS_MACOS
setWindowFlags(windowFlags() | Qt::WindowStaysOnTopHint);
#else
setWindowFlags(windowFlags() | Qt::WindowStaysOnTopHint | Qt::ForeignWindow);
#endif
setWindowFlags(Qt::Dialog | Qt::WindowStaysOnTopHint);
connect(m_view, SIGNAL(dialogFinished(bool)), this, SLOT(complete(bool)));
auto* layout = new QVBoxLayout();
layout->setMargin(0);

View File

@ -76,12 +76,6 @@ DatabaseOpenWidget::DatabaseOpenWidget(QWidget* parent)
m_ui->keyFileLabelHelp->setIcon(resources()->icon("system-help").pixmap(QSize(12, 12)));
connect(m_ui->keyFileLabelHelp, SIGNAL(clicked(bool)), SLOT(openKeyFileHelp()));
connect(m_ui->keyFileLineEdit, SIGNAL(textChanged(QString)), SLOT(keyFileTextChanged()));
m_ui->keyFileLineEdit->addAction(m_ui->keyFileClearIcon, QLineEdit::TrailingPosition);
m_ui->keyFileClearIcon->setIcon(resources()->icon("edit-clear-locationbar-rtl"));
m_ui->keyFileClearIcon->setVisible(false);
connect(m_ui->keyFileClearIcon, SIGNAL(triggered(bool)), SLOT(clearKeyFileText()));
#ifdef WITH_XC_YUBIKEY
m_ui->hardwareKeyProgress->setVisible(false);
QSizePolicy sp = m_ui->hardwareKeyProgress->sizePolicy();
@ -145,8 +139,6 @@ void DatabaseOpenWidget::load(const QString& filename)
m_filename = filename;
m_ui->fileNameLabel->setRawText(m_filename);
m_ui->keyFileClearIcon->setVisible(false);
if (config()->get(Config::RememberLastKeyFiles).toBool()) {
auto lastKeyFiles = config()->get(Config::LastKeyFiles).toHash();
if (lastKeyFiles.contains(m_filename)) {
@ -388,11 +380,6 @@ void DatabaseOpenWidget::clearKeyFileText()
m_ui->keyFileLineEdit->clear();
}
void DatabaseOpenWidget::keyFileTextChanged()
{
m_ui->keyFileClearIcon->setVisible(!m_ui->keyFileLineEdit->text().isEmpty());
}
void DatabaseOpenWidget::pollHardwareKey()
{
if (m_pollingHardwareKey) {

View File

@ -66,7 +66,6 @@ protected slots:
private slots:
void browseKeyFile();
void clearKeyFileText();
void keyFileTextChanged();
void pollHardwareKey();
void hardwareKeyResponse(bool found);
void openHardwareKeyHelp();

View File

@ -416,6 +416,9 @@
<property name="accessibleName">
<string>Key file to unlock the database</string>
</property>
<property name="clearButtonEnabled">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
@ -575,16 +578,14 @@
</spacer>
</item>
</layout>
<action name="keyFileClearIcon">
<property name="text">
<string>Clear</string>
</property>
<property name="toolTip">
<string>Clear Key File</string>
</property>
</action>
</widget>
<customwidgets>
<customwidget>
<class>PasswordEdit</class>
<extends>QLineEdit</extends>
<header>gui/PasswordEdit.h</header>
<container>1</container>
</customwidget>
<customwidget>
<class>MessageWidget</class>
<extends>QWidget</extends>
@ -596,11 +597,6 @@
<extends>QLabel</extends>
<header>gui/widgets/ElidedLabel.h</header>
</customwidget>
<customwidget>
<class>PasswordEdit</class>
<extends>QLineEdit</extends>
<header>gui/PasswordEdit.h</header>
</customwidget>
</customwidgets>
<tabstops>
<tabstop>editPassword</tabstop>

View File

@ -275,7 +275,7 @@ void DatabaseTabWidget::importKeePass1Database()
void DatabaseTabWidget::importOpVaultDatabase()
{
#ifdef Q_MACOS
#ifdef Q_OS_MACOS
QString fileName = fileDialog()->getOpenFileName(this, tr("Open OPVault"), {}, "OPVault (*.opvault)");
#else
QString fileName = fileDialog()->getExistingDirectory(this, tr("Open OPVault"));

View File

@ -329,38 +329,6 @@ void DatabaseWidget::setPreviewSplitterSizes(const QList<int>& sizes)
m_previewSplitter->setSizes(sizes);
}
/**
* Get current state of entry view 'Hide Usernames' setting
*/
bool DatabaseWidget::isUsernamesHidden() const
{
return m_entryView->isUsernamesHidden();
}
/**
* Set state of entry view 'Hide Usernames' setting
*/
void DatabaseWidget::setUsernamesHidden(bool hide)
{
m_entryView->setUsernamesHidden(hide);
}
/**
* Get current state of entry view 'Hide Passwords' setting
*/
bool DatabaseWidget::isPasswordsHidden() const
{
return m_entryView->isPasswordsHidden();
}
/**
* Set state of entry view 'Hide Passwords' setting
*/
void DatabaseWidget::setPasswordsHidden(bool hide)
{
m_entryView->setPasswordsHidden(hide);
}
/**
* Get current view state of entry view
*/
@ -890,7 +858,8 @@ void DatabaseWidget::openUrlForEntry(Entry* entry)
// otherwise ask user
if (!launch && cmdString.length() > 6) {
QString cmdTruncated = cmdString.mid(6);
QString cmdTruncated = entry->resolveMultiplePlaceholders(entry->maskPasswordPlaceholders(entry->url()));
cmdTruncated = cmdTruncated.mid(6);
if (cmdTruncated.length() > 400) {
cmdTruncated = cmdTruncated.left(400) + " […]";
}
@ -1458,6 +1427,8 @@ void DatabaseWidget::endSearch()
m_entryView->displayGroup(currentGroup());
emit listModeActivated();
m_entryView->setFirstEntryActive();
// Enforce preview view update (prevents stale information if focus group is empty)
m_previewView->setEntry(currentSelectedEntry());
}
m_searchingLabel->setVisible(false);
@ -2061,7 +2032,7 @@ void DatabaseWidget::processAutoOpen()
// negated using '!'
auto ifDevice = entry->attribute("IfDevice");
if (!ifDevice.isEmpty()) {
bool loadDb = true;
bool loadDb = false;
auto hostName = QHostInfo::localHostName();
for (auto& device : ifDevice.split(",")) {
device = device.trimmed();
@ -2070,12 +2041,13 @@ void DatabaseWidget::processAutoOpen()
// Machine name matched an exclusion, don't load this database
loadDb = false;
break;
} else {
// Not matching an exclusion allows loading on all machines
loadDb = true;
}
} else if (device.compare(hostName, Qt::CaseInsensitive) == 0) {
// Explicitly named for loading
loadDb = true;
} else {
// Don't load the database if there are devices not starting with '!'
loadDb = false;
}
}
if (!loadDb) {

View File

@ -104,10 +104,6 @@ public:
QStringList customEntryAttributes() const;
bool isEditWidgetModified() const;
bool isUsernamesHidden() const;
void setUsernamesHidden(bool hide);
bool isPasswordsHidden() const;
void setPasswordsHidden(bool hide);
void clearAllWidgets();
bool currentEntryHasTitle();
bool currentEntryHasUsername();

View File

@ -29,8 +29,6 @@ DatabaseWidgetStateSync::DatabaseWidgetStateSync(QObject* parent)
{
m_mainSplitterSizes = variantToIntList(config()->get(Config::GUI_SplitterState));
m_previewSplitterSizes = variantToIntList(config()->get(Config::GUI_PreviewSplitterState));
m_hideUsernames = config()->get(Config::GUI_HideUsernames).toBool();
m_hidePasswords = true;
m_listViewState = config()->get(Config::GUI_ListViewState).toByteArray();
m_searchViewState = config()->get(Config::GUI_SearchViewState).toByteArray();
@ -48,7 +46,6 @@ void DatabaseWidgetStateSync::sync()
{
config()->set(Config::GUI_SplitterState, intListToVariant(m_mainSplitterSizes));
config()->set(Config::GUI_PreviewSplitterState, intListToVariant(m_previewSplitterSizes));
config()->set(Config::GUI_HideUsernames, m_hideUsernames);
config()->set(Config::GUI_ListViewState, m_listViewState);
config()->set(Config::GUI_SearchViewState, m_searchViewState);
config()->sync();
@ -104,9 +101,6 @@ void DatabaseWidgetStateSync::setActive(DatabaseWidget* dbWidget)
*/
void DatabaseWidgetStateSync::restoreListView()
{
m_activeDbWidget->setUsernamesHidden(m_hideUsernames);
m_activeDbWidget->setPasswordsHidden(m_hidePasswords);
if (!m_listViewState.isEmpty()) {
m_activeDbWidget->setEntryViewState(m_listViewState);
}
@ -129,9 +123,6 @@ void DatabaseWidgetStateSync::restoreListView()
*/
void DatabaseWidgetStateSync::restoreSearchView()
{
m_activeDbWidget->setUsernamesHidden(m_hideUsernames);
m_activeDbWidget->setPasswordsHidden(m_hidePasswords);
if (!m_searchViewState.isEmpty()) {
m_activeDbWidget->setEntryViewState(m_searchViewState);
} else {
@ -169,9 +160,6 @@ void DatabaseWidgetStateSync::updateViewState()
return;
}
m_hideUsernames = m_activeDbWidget->isUsernamesHidden();
m_hidePasswords = m_activeDbWidget->isPasswordsHidden();
if (m_activeDbWidget->isSearchActive()) {
m_searchViewState = m_activeDbWidget->entryViewState();
} else {

View File

@ -51,9 +51,6 @@ private:
QList<int> m_mainSplitterSizes;
QList<int> m_previewSplitterSizes;
bool m_hideUsernames;
bool m_hidePasswords;
QByteArray m_listViewState;
QByteArray m_searchViewState;
};

View File

@ -59,12 +59,18 @@ void EditWidget::addPage(const QString& labelText, const QIcon& icon, QWidget* w
* from automatic resizing and it now should be able to fit into a user's monitor even if the monitor is only 768
* pixels high.
*/
auto* scrollArea = new QScrollArea(m_ui->stackedWidget);
scrollArea->setFrameShape(QFrame::NoFrame);
scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
scrollArea->setWidget(widget);
scrollArea->setWidgetResizable(true);
m_ui->stackedWidget->addWidget(scrollArea);
if (widget->inherits("QScrollArea")) {
m_ui->stackedWidget->addWidget(widget);
} else {
auto* scrollArea = new QScrollArea(m_ui->stackedWidget);
scrollArea->setFrameShape(QFrame::NoFrame);
scrollArea->setFrameShadow(QFrame::Plain);
scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
scrollArea->setSizeAdjustPolicy(QScrollArea::AdjustToContents);
scrollArea->setWidgetResizable(true);
scrollArea->setWidget(widget);
m_ui->stackedWidget->addWidget(scrollArea);
}
m_ui->categoryList->addCategory(labelText, icon);
}

View File

@ -50,7 +50,6 @@ EntryPreviewWidget::EntryPreviewWidget(QWidget* parent)
// Entry
m_ui->entryTotpButton->setIcon(resources()->icon("chronometer"));
m_ui->entryCloseButton->setIcon(resources()->icon("dialog-close"));
m_ui->entryPasswordLabel->setFont(Font::fixedFont());
m_ui->togglePasswordButton->setIcon(resources()->onOffIcon("password-show"));
m_ui->toggleEntryNotesButton->setIcon(resources()->onOffIcon("password-show"));
m_ui->toggleGroupNotesButton->setIcon(resources()->onOffIcon("password-show"));
@ -194,6 +193,7 @@ void EntryPreviewWidget::setPasswordVisible(bool state)
if (state) {
m_ui->entryPasswordLabel->setText(password);
m_ui->entryPasswordLabel->setCursorPosition(0);
m_ui->entryPasswordLabel->setFont(Font::fixedFont());
} else if (password.isEmpty() && !config()->get(Config::Security_PasswordEmptyPlaceholder).toBool()) {
m_ui->entryPasswordLabel->setText("");
} else {

View File

@ -21,20 +21,6 @@
#include <QDir>
namespace
{
QString modFilter(const QString& filter)
{
#ifdef Q_OS_MACOS
// Fix macOS bug that causes the file dialog to freeze when a dot is included in the filters
// See https://github.com/keepassxreboot/keepassxc/issues/3895#issuecomment-586724167
auto mod = filter;
return mod.replace("*.", "*");
#endif
return filter;
}
} // namespace
FileDialog* FileDialog::m_instance(nullptr);
QString FileDialog::getOpenFileName(QWidget* parent,
@ -51,7 +37,7 @@ QString FileDialog::getOpenFileName(QWidget* parent,
} else {
const auto& workingDir = dir.isEmpty() ? config()->get(Config::LastDir).toString() : dir;
const auto result = QDir::toNativeSeparators(
QFileDialog::getOpenFileName(parent, caption, workingDir, modFilter(filter), selectedFilter, options));
QFileDialog::getOpenFileName(parent, caption, workingDir, filter, selectedFilter, options));
#ifdef Q_OS_MACOS
// on Mac OS X the focus is lost after closing the native dialog
@ -77,8 +63,7 @@ QStringList FileDialog::getOpenFileNames(QWidget* parent,
return results;
} else {
const auto& workingDir = dir.isEmpty() ? config()->get(Config::LastDir).toString() : dir;
auto results =
QFileDialog::getOpenFileNames(parent, caption, workingDir, modFilter(filter), selectedFilter, options);
auto results = QFileDialog::getOpenFileNames(parent, caption, workingDir, filter, selectedFilter, options);
for (auto& path : results) {
path = QDir::toNativeSeparators(path);
@ -111,7 +96,7 @@ QString FileDialog::getSaveFileName(QWidget* parent,
} else {
const auto& workingDir = dir.isEmpty() ? config()->get(Config::LastDir).toString() : dir;
const auto result = QDir::toNativeSeparators(
QFileDialog::getSaveFileName(parent, caption, workingDir, modFilter(filter), selectedFilter, options));
QFileDialog::getSaveFileName(parent, caption, workingDir, filter, selectedFilter, options));
#ifdef Q_OS_MACOS
// on Mac OS X the focus is lost after closing the native dialog

View File

@ -1,70 +0,0 @@
/*
* Copyright (C) 2007 Trolltech ASA <info@trolltech.com>
* Copyright (C) 2012 Felix Geyer <debfx@fobos.de>
* Copyright (C) 2012 Florian Geyer <blueice@fobos.de>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 or (at your option)
* version 3 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "LineEdit.h"
#include <QStyle>
#include <QToolButton>
#include "core/Resources.h"
LineEdit::LineEdit(QWidget* parent)
: QLineEdit(parent)
, m_clearButton(new QToolButton(this))
{
m_clearButton->setObjectName("clearButton");
QString iconNameDirected =
QString("edit-clear-locationbar-").append((layoutDirection() == Qt::LeftToRight) ? "rtl" : "ltr");
const auto icon = resources()->icon(iconNameDirected);
m_clearButton->setIcon(icon);
m_clearButton->setCursor(Qt::ArrowCursor);
m_clearButton->setStyleSheet("QToolButton { border: none; padding: 0px; }");
m_clearButton->hide();
connect(m_clearButton, SIGNAL(clicked()), this, SLOT(clear()));
connect(this, SIGNAL(textChanged(QString)), this, SLOT(updateCloseButton(QString)));
int frameWidth = style()->pixelMetric(QStyle::PM_DefaultFrameWidth);
setStyleSheet(
QString("QLineEdit { padding-right: %1px; } ").arg(m_clearButton->sizeHint().width() + frameWidth + 1));
QSize msz = minimumSizeHint();
setMinimumSize(qMax(msz.width(), m_clearButton->sizeHint().height() + frameWidth * 2 + 2),
qMax(msz.height(), m_clearButton->sizeHint().height() + frameWidth * 2 + 2));
}
void LineEdit::resizeEvent(QResizeEvent* event)
{
QSize sz = m_clearButton->sizeHint();
int frameWidth = style()->pixelMetric(QStyle::PM_DefaultFrameWidth);
int y = (rect().bottom() + 1 - sz.height()) / 2;
if (layoutDirection() == Qt::LeftToRight) {
m_clearButton->move(rect().right() - frameWidth - sz.width(), y);
} else {
m_clearButton->move(rect().left() + frameWidth, y);
}
QLineEdit::resizeEvent(event);
}
void LineEdit::updateCloseButton(const QString& text)
{
m_clearButton->setVisible(!text.isEmpty());
}

View File

@ -1,44 +0,0 @@
/*
* Copyright (C) 2007 Trolltech ASA <info@trolltech.com>
* Copyright (C) 2012 Felix Geyer <debfx@fobos.de>
* Copyright (C) 2012 Florian Geyer <blueice@fobos.de>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 or (at your option)
* version 3 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef KEEPASSX_LINEEDIT_H
#define KEEPASSX_LINEEDIT_H
#include <QLineEdit>
class QToolButton;
class LineEdit : public QLineEdit
{
Q_OBJECT
public:
explicit LineEdit(QWidget* parent = nullptr);
protected:
void resizeEvent(QResizeEvent* event) override;
private slots:
void updateCloseButton(const QString& text);
private:
QToolButton* const m_clearButton;
};
#endif // KEEPASSX_LINEEDIT_H

View File

@ -258,8 +258,15 @@ MainWindow::MainWindow()
m_ui->actionEntryAutoType->setShortcut(Qt::CTRL + Qt::SHIFT + Qt::Key_V);
m_ui->actionEntryOpenUrl->setShortcut(Qt::CTRL + Qt::SHIFT + Qt::Key_U);
m_ui->actionEntryCopyURL->setShortcut(Qt::CTRL + Qt::Key_U);
m_ui->actionEntryAddToAgent->setShortcut(Qt::CTRL + Qt::Key_H);
m_ui->actionEntryRemoveFromAgent->setShortcut(Qt::CTRL + Qt::SHIFT + Qt::Key_H);
// Prevent conflicts with global Mac shortcuts (force Control on all platforms)
#ifdef Q_OS_MAC
auto modifier = Qt::META;
#else
auto modifier = Qt::CTRL;
#endif
m_ui->actionEntryAddToAgent->setShortcut(modifier + Qt::Key_H);
m_ui->actionEntryRemoveFromAgent->setShortcut(modifier + Qt::SHIFT + Qt::Key_H);
#if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0)
// Qt 5.10 introduced a new "feature" to hide shortcuts in context menus
@ -325,10 +332,6 @@ MainWindow::MainWindow()
shortcut = new QShortcut(dbTabModifier + Qt::Key_9, this);
connect(shortcut, &QShortcut::activated, [this]() { selectDatabaseTab(m_ui->tabWidget->count() - 1); });
// Toggle password and username visibility in entry view
new QShortcut(Qt::CTRL + Qt::SHIFT + Qt::Key_C, this, SLOT(togglePasswordsHidden()));
new QShortcut(Qt::CTRL + Qt::SHIFT + Qt::Key_B, this, SLOT(toggleUsernamesHidden()));
m_ui->actionDatabaseNew->setIcon(resources()->icon("document-new"));
m_ui->actionDatabaseOpen->setIcon(resources()->icon("document-open"));
m_ui->menuRecentDatabases->setIcon(resources()->icon("document-open-recent"));
@ -496,9 +499,6 @@ MainWindow::MainWindow()
#ifdef Q_OS_MACOS
setUnifiedTitleAndToolBarOnMac(true);
if (macUtils()->isDarkMode()) {
setStyleSheet("QToolButton {color:white;}");
}
#endif
#ifdef WITH_XC_UPDATECHECK
@ -1119,22 +1119,6 @@ void MainWindow::databaseTabChanged(int tabIndex)
m_actionMultiplexer.setCurrentObject(m_ui->tabWidget->currentDatabaseWidget());
}
void MainWindow::togglePasswordsHidden()
{
auto dbWidget = m_ui->tabWidget->currentDatabaseWidget();
if (dbWidget) {
dbWidget->setPasswordsHidden(!dbWidget->isPasswordsHidden());
}
}
void MainWindow::toggleUsernamesHidden()
{
auto dbWidget = m_ui->tabWidget->currentDatabaseWidget();
if (dbWidget) {
dbWidget->setUsernamesHidden(!dbWidget->isUsernamesHidden());
}
}
void MainWindow::closeEvent(QCloseEvent* event)
{
if (m_appExiting) {
@ -1269,6 +1253,8 @@ bool MainWindow::saveLastDatabases()
void MainWindow::updateTrayIcon()
{
if (isTrayIconEnabled()) {
QApplication::setQuitOnLastWindowClosed(false);
if (!m_trayIcon) {
m_trayIcon = new QSystemTrayIcon(this);
auto* menu = new QMenu(this);
@ -1307,6 +1293,8 @@ void MainWindow::updateTrayIcon()
m_trayIcon->setIcon(resources()->trayIconLocked());
}
} else {
QApplication::setQuitOnLastWindowClosed(true);
if (m_trayIcon) {
m_trayIcon->hide();
delete m_trayIcon;
@ -1746,4 +1734,23 @@ void MainWindow::initViewMenu()
connect(m_ui->actionShowPreviewPanel, &QAction::toggled, this, [](bool checked) {
config()->set(Config::GUI_HidePreviewPanel, !checked);
});
connect(m_ui->actionAlwaysOnTop, &QAction::toggled, this, [this](bool checked) {
if (checked) {
setWindowFlags(windowFlags() | Qt::WindowStaysOnTopHint);
} else {
setWindowFlags(windowFlags() & ~Qt::WindowStaysOnTopHint);
}
show();
});
m_ui->actionHideUsernames->setChecked(config()->get(Config::GUI_HideUsernames).toBool());
connect(m_ui->actionHideUsernames, &QAction::toggled, this, [](bool checked) {
config()->set(Config::GUI_HideUsernames, checked);
});
m_ui->actionHidePasswords->setChecked(config()->get(Config::GUI_HidePasswords).toBool());
connect(m_ui->actionHidePasswords, &QAction::toggled, this, [](bool checked) {
config()->set(Config::GUI_HidePasswords, checked);
});
}

View File

@ -131,8 +131,6 @@ private slots:
void selectNextDatabaseTab();
void selectPreviousDatabaseTab();
void selectDatabaseTab(int tabIndex, bool wrap = false);
void togglePasswordsHidden();
void toggleUsernamesHidden();
void obtainContextFocusLock();
void releaseContextFocusLock();
void agentEnabled(bool enabled);

View File

@ -381,8 +381,11 @@
</widget>
<addaction name="menuTheme"/>
<addaction name="actionCompactMode"/>
<addaction name="actionAlwaysOnTop"/>
<addaction name="actionShowPreviewPanel"/>
<addaction name="actionShowToolbar"/>
<addaction name="actionHideUsernames"/>
<addaction name="actionHidePasswords"/>
</widget>
<addaction name="menuFile"/>
<addaction name="menuEntries"/>
@ -972,6 +975,42 @@
<string>Show Preview Panel</string>
</property>
</action>
<action name="actionAlwaysOnTop">
<property name="checkable">
<bool>true</bool>
</property>
<property name="text">
<string>Always on Top</string>
</property>
<property name="shortcut">
<string notr="true">Ctrl+Shift+A</string>
</property>
</action>
<action name="actionHideUsernames">
<property name="checkable">
<bool>true</bool>
</property>
<property name="text">
<string>Hide Usernames</string>
</property>
<property name="shortcut">
<string notr="true">Ctrl+Shift+B</string>
</property>
</action>
<action name="actionHidePasswords">
<property name="checkable">
<bool>true</bool>
</property>
<property name="checked">
<bool>true</bool>
</property>
<property name="text">
<string>Hide Passwords</string>
</property>
<property name="shortcut">
<string notr="true">Ctrl+Shift+C</string>
</property>
</action>
</widget>
<customwidgets>
<customwidget>

View File

@ -180,7 +180,9 @@ void PasswordEdit::autocompletePassword(const QString& password)
bool PasswordEdit::event(QEvent* event)
{
if (isVisible()) {
if (isVisible()
&& (event->type() == QEvent::KeyPress || event->type() == QEvent::KeyRelease
|| event->type() == QEvent::FocusIn)) {
checkCapslockState();
}
return QLineEdit::event(event);
@ -204,7 +206,9 @@ void PasswordEdit::checkCapslockState()
if (newCapslockState) {
QTimer::singleShot(
150, [this]() { QToolTip::showText(mapToGlobal(rect().bottomLeft()), m_capslockAction->text()); });
150, [this] { QToolTip::showText(mapToGlobal(rect().bottomLeft()), m_capslockAction->text()); });
} else if (QToolTip::isVisible()) {
QToolTip::hideText();
}
}
}

View File

@ -45,14 +45,6 @@ PasswordGeneratorWidget::PasswordGeneratorWidget(QWidget* parent)
m_ui->buttonCopy->setIcon(resources()->icon("clipboard-text"));
m_ui->buttonClose->setShortcut(Qt::Key_Escape);
m_ui->clearInclude->setIcon(resources()->icon("edit-clear-locationbar-rtl"));
m_ui->editAdditionalChars->addAction(m_ui->clearInclude, QLineEdit::TrailingPosition);
m_ui->clearInclude->setVisible(false);
m_ui->clearExclude->setIcon(resources()->icon("edit-clear-locationbar-rtl"));
m_ui->editExcludedChars->addAction(m_ui->clearExclude, QLineEdit::TrailingPosition);
m_ui->clearExclude->setVisible(false);
connect(m_ui->editNewPassword, SIGNAL(textChanged(QString)), SLOT(updateButtonsEnabled(QString)));
connect(m_ui->editNewPassword, SIGNAL(textChanged(QString)), SLOT(updatePasswordStrength(QString)));
connect(m_ui->buttonAdvancedMode, SIGNAL(toggled(bool)), SLOT(setAdvancedMode(bool)));
@ -63,8 +55,6 @@ PasswordGeneratorWidget::PasswordGeneratorWidget(QWidget* parent)
connect(m_ui->buttonCopy, SIGNAL(clicked()), SLOT(copyPassword()));
connect(m_ui->buttonGenerate, SIGNAL(clicked()), SLOT(regeneratePassword()));
connect(m_ui->buttonClose, SIGNAL(clicked()), SIGNAL(closed()));
connect(m_ui->clearInclude, SIGNAL(triggered(bool)), m_ui->editAdditionalChars, SLOT(clear()));
connect(m_ui->clearExclude, SIGNAL(triggered(bool)), m_ui->editExcludedChars, SLOT(clear()));
connect(m_ui->sliderLength, SIGNAL(valueChanged(int)), SLOT(passwordLengthChanged(int)));
connect(m_ui->spinBoxLength, SIGNAL(valueChanged(int)), SLOT(passwordLengthChanged(int)));
@ -170,6 +160,7 @@ void PasswordGeneratorWidget::loadSettings()
// Set advanced mode
m_ui->buttonAdvancedMode->setChecked(advanced);
setAdvancedMode(advanced);
updateGenerator();
}
void PasswordGeneratorWidget::saveSettings()
@ -529,9 +520,6 @@ void PasswordGeneratorWidget::updateGenerator()
} else {
m_ui->buttonGenerate->setEnabled(false);
}
m_ui->clearInclude->setVisible(!m_ui->editAdditionalChars->text().isEmpty());
m_ui->clearExclude->setVisible(!m_ui->editExcludedChars->text().isEmpty());
} else {
m_dicewareGenerator->setWordCase(
static_cast<PassphraseGenerator::PassphraseWordCase>(m_ui->wordCaseComboBox->currentData().toInt()));

View File

@ -608,6 +608,9 @@ QProgressBar::chunk {
<property name="accessibleName">
<string>Additional characters</string>
</property>
<property name="clearButtonEnabled">
<bool>true</bool>
</property>
</widget>
</item>
<item row="1" column="2">
@ -646,6 +649,9 @@ QProgressBar::chunk {
<property name="accessibleName">
<string>Excluded characters</string>
</property>
<property name="clearButtonEnabled">
<bool>true</bool>
</property>
</widget>
</item>
<item row="0" column="0">
@ -944,22 +950,6 @@ QProgressBar::chunk {
</spacer>
</item>
</layout>
<action name="clearInclude">
<property name="text">
<string>Clear</string>
</property>
<property name="toolTip">
<string>Clear</string>
</property>
</action>
<action name="clearExclude">
<property name="text">
<string>Clear</string>
</property>
<property name="toolTip">
<string>Clear</string>
</property>
</action>
</widget>
<customwidgets>
<customwidget>

View File

@ -45,7 +45,6 @@ SearchWidget::SearchWidget(QWidget* parent)
m_clearSearchTimer->setSingleShot(true);
connect(m_ui->searchEdit, SIGNAL(textChanged(QString)), SLOT(startSearchTimer()));
connect(m_ui->clearIcon, SIGNAL(triggered(bool)), m_ui->searchEdit, SLOT(clear()));
connect(m_ui->helpIcon, SIGNAL(triggered()), SLOT(toggleHelp()));
connect(m_ui->searchIcon, SIGNAL(triggered()), SLOT(showSearchMenu()));
connect(m_searchTimer, SIGNAL(timeout()), SLOT(startSearch()));
@ -75,10 +74,6 @@ SearchWidget::SearchWidget(QWidget* parent)
m_ui->helpIcon->setIcon(resources()->icon("system-help"));
m_ui->searchEdit->addAction(m_ui->helpIcon, QLineEdit::TrailingPosition);
m_ui->clearIcon->setIcon(resources()->icon("edit-clear-locationbar-rtl"));
m_ui->clearIcon->setVisible(false);
m_ui->searchEdit->addAction(m_ui->clearIcon, QLineEdit::TrailingPosition);
// Fix initial visibility of actions (bug in Qt)
for (QToolButton* toolButton : m_ui->searchEdit->findChildren<QToolButton*>()) {
toolButton->setVisible(toolButton->defaultAction()->isVisible());
@ -172,9 +167,6 @@ void SearchWidget::startSearch()
m_searchTimer->stop();
}
bool hasText = m_ui->searchEdit->text().length() > 0;
m_ui->clearIcon->setVisible(hasText);
search(m_ui->searchEdit->text());
}

View File

@ -41,7 +41,7 @@
<string/>
</property>
<property name="clearButtonEnabled">
<bool>false</bool>
<bool>true</bool>
</property>
</widget>
</item>
@ -51,11 +51,6 @@
<string>Search</string>
</property>
</action>
<action name="clearIcon">
<property name="text">
<string>Clear</string>
</property>
</action>
<action name="helpIcon">
<property name="text">
<string>Search Help</string>

View File

@ -38,6 +38,8 @@
#include "core/Resources.h"
#include "touchid/TouchID.h"
#include <QScrollArea>
class DatabaseSettingsDialog::ExtraPage
{
public:
@ -81,7 +83,16 @@ DatabaseSettingsDialog::DatabaseSettingsDialog(QWidget* parent)
m_ui->stackedWidget->addWidget(m_generalWidget);
m_ui->stackedWidget->addWidget(m_securityTabWidget);
m_securityTabWidget->addTab(m_databaseKeyWidget, tr("Database Credentials"));
auto* scrollArea = new QScrollArea(parent);
scrollArea->setFrameShape(QFrame::NoFrame);
scrollArea->setFrameShadow(QFrame::Plain);
scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
scrollArea->setSizeAdjustPolicy(QScrollArea::AdjustToContents);
scrollArea->setWidgetResizable(true);
scrollArea->setWidget(m_databaseKeyWidget);
m_securityTabWidget->addTab(scrollArea, tr("Database Credentials"));
m_securityTabWidget->addTab(m_encryptionWidget, tr("Encryption Settings"));
#if defined(WITH_XC_KEESHARE)

View File

@ -216,8 +216,6 @@ void DatabaseSettingsWidgetDatabaseKey::setAdditionalKeyOptionsVisible(bool show
{
m_additionalKeyOptionsToggle->setVisible(!show);
m_additionalKeyOptions->setVisible(show);
m_additionalKeyOptions->layout()->setSizeConstraint(QLayout::SetMinimumSize);
emit sizeChanged();
}
bool DatabaseSettingsWidgetDatabaseKey::addToCompositeKey(KeyComponentWidget* widget,

View File

@ -76,7 +76,7 @@ EditEntryWidget::EditEntryWidget(QWidget* parent)
, m_historyUi(new Ui::EditEntryWidgetHistory())
, m_browserUi(new Ui::EditEntryWidgetBrowser())
, m_customData(new CustomData())
, m_mainWidget(new QWidget())
, m_mainWidget(new QScrollArea())
, m_advancedWidget(new QWidget())
, m_iconsWidget(new EditWidgetIcons())
, m_autoTypeWidget(new QWidget())
@ -178,6 +178,9 @@ void EditEntryWidget::setupMain()
m_mainUi->expirePresets->setMenu(createPresetsMenu());
connect(m_mainUi->expirePresets->menu(), SIGNAL(triggered(QAction*)), this, SLOT(useExpiryPreset(QAction*)));
// HACK: Align username text with other line edits. Qt does not let you do this with an application stylesheet.
m_mainUi->usernameComboBox->lineEdit()->setStyleSheet("padding-left: 8px;");
}
void EditEntryWidget::setupAdvanced()
@ -797,12 +800,12 @@ void EditEntryWidget::loadEntry(Entry* entry,
connect(m_entry, &Entry::entryModified, this, [this] { m_entryModifiedTimer.start(); });
if (history) {
setHeadline(QString("%1 \u2B29 %2").arg(parentName, tr("Entry history")));
setHeadline(QString("%1 \u2022 %2").arg(parentName, tr("Entry history")));
} else {
if (create) {
setHeadline(QString("%1 \u2B29 %2").arg(parentName, tr("Add entry")));
setHeadline(QString("%1 \u2022 %2").arg(parentName, tr("Add entry")));
} else {
setHeadline(QString("%1 \u2B29 %2 \u2B29 %3").arg(parentName, entry->title(), tr("Edit entry")));
setHeadline(QString("%1 \u2022 %2 \u2022 %3").arg(parentName, entry->title(), tr("Edit entry")));
}
}
@ -994,6 +997,11 @@ bool EditEntryWidget::commitEntry()
return true;
}
// Check Auto-Type validity early
if (!AutoType::verifyAutoTypeSyntax(m_autoTypeUi->sequenceEdit->text())) {
return false;
}
if (m_advancedUi->attributesView->currentIndex().isValid() && m_advancedUi->attributesEdit->isEnabled()) {
QString key = m_attributesModel->keyByIndex(m_advancedUi->attributesView->currentIndex());
m_entryAttributes->set(key, m_advancedUi->attributesEdit->toPlainText(), m_entryAttributes->isProtected(key));
@ -1092,7 +1100,7 @@ void EditEntryWidget::updateEntryData(Entry* entry) const
entry->setAutoTypeEnabled(m_autoTypeUi->enableButton->isChecked());
if (m_autoTypeUi->inheritSequenceButton->isChecked()) {
entry->setDefaultAutoTypeSequence(QString());
} else if (AutoType::verifyAutoTypeSyntax(m_autoTypeUi->sequenceEdit->text())) {
} else {
entry->setDefaultAutoTypeSequence(m_autoTypeUi->sequenceEdit->text());
}
@ -1361,6 +1369,7 @@ void EditEntryWidget::removeAutoTypeAssoc()
void EditEntryWidget::loadCurrentAssoc(const QModelIndex& current)
{
bool modified = isModified();
if (current.isValid() && current.row() < m_autoTypeAssoc->size()) {
AutoTypeAssociations::Association assoc = m_autoTypeAssoc->get(current.row());
m_autoTypeUi->windowTitleCombo->setEditText(assoc.window);
@ -1376,6 +1385,7 @@ void EditEntryWidget::loadCurrentAssoc(const QModelIndex& current)
} else {
clearCurrentAssoc();
}
setModified(modified);
}
void EditEntryWidget::clearCurrentAssoc()

View File

@ -24,6 +24,7 @@
#include <QModelIndex>
#include <QPointer>
#include <QScopedPointer>
#include <QScrollArea>
#include <QTimer>
#include "config-keepassx.h"
@ -174,7 +175,7 @@ private:
const QScopedPointer<Ui::EditEntryWidgetBrowser> m_browserUi;
const QScopedPointer<CustomData> m_customData;
QWidget* const m_mainWidget;
QScrollArea* const m_mainWidget;
QWidget* const m_advancedWidget;
EditWidgetIcons* const m_iconsWidget;
QWidget* const m_autoTypeWidget;

View File

@ -1,278 +1,306 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>EditEntryWidgetMain</class>
<widget class="QWidget" name="EditEntryWidgetMain">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>496</width>
<height>420</height>
</rect>
</property>
<layout class="QGridLayout" name="gridLayout">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<property name="horizontalSpacing">
<number>10</number>
</property>
<property name="verticalSpacing">
<number>8</number>
</property>
<item row="6" column="1">
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QPlainTextEdit" name="notesEdit">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>1</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>100</height>
</size>
</property>
<property name="accessibleName">
<string>Notes field</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="notesHint">
<property name="visible">
<bool>true</bool>
</property>
<property name="text">
<string>Toggle the checkbox to reveal the notes section.</string>
</property>
<property name="alignment">
<set>Qt::AlignTop</set>
</property>
</widget>
</item>
</layout>
</item>
<item row="1" column="1">
<widget class="QComboBox" name="usernameComboBox">
<property name="accessibleName">
<string>Username field</string>
</property>
</widget>
</item>
<item row="6" column="0">
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QCheckBox" name="notesEnabled">
<property name="toolTip">
<string>Toggle notes visible</string>
</property>
<property name="accessibleName">
<string>Toggle notes visible</string>
</property>
<property name="text">
<string>Notes:</string>
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item row="5" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_2">
<property name="spacing">
<number>8</number>
</property>
<item>
<widget class="QDateTimeEdit" name="expireDatePicker">
<property name="enabled">
<bool>false</bool>
</property>
<property name="accessibleName">
<string>Expiration field</string>
</property>
<property name="calendarPopup">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="expirePresets">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="toolTip">
<string>Expiration Presets</string>
</property>
<property name="accessibleName">
<string>Expiration presets</string>
</property>
<property name="text">
<string>Presets</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="2" column="0">
<widget class="QLabel" name="passwordLabel">
<property name="text">
<string>Password:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="urlLabel">
<property name="text">
<string>URL:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="3" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_6">
<property name="spacing">
<number>8</number>
</property>
<item>
<widget class="URLEdit" name="urlEdit">
<property name="accessibleName">
<string>Url field</string>
</property>
<property name="placeholderText">
<string>https://example.com</string>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="fetchFaviconButton">
<property name="toolTip">
<string>Download favicon for URL</string>
</property>
<property name="accessibleName">
<string>Download favicon for URL</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="0" column="0">
<widget class="QLabel" name="titleLabel">
<property name="text">
<string>Title:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLineEdit" name="titleEdit">
<property name="accessibleName">
<string>Title field</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="usernameLabel">
<property name="text">
<string>Username:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="PasswordEdit" name="passwordEdit">
<property name="accessibleName">
<string>Password field</string>
</property>
<property name="echoMode">
<enum>QLineEdit::Password</enum>
</property>
</widget>
</item>
<item row="5" column="0">
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="spacing">
<number>0</number>
</property>
<item>
<widget class="QCheckBox" name="expireCheck">
<property name="toolTip">
<string>Toggle expiration</string>
</property>
<property name="accessibleName">
<string>Toggle expiration</string>
</property>
<property name="text">
<string>Expires:</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
<customwidgets>
<customwidget>
<class>PasswordEdit</class>
<extends>QLineEdit</extends>
<header>gui/PasswordEdit.h</header>
<container>1</container>
</customwidget>
<customwidget>
<class>URLEdit</class>
<extends>QLineEdit</extends>
<header>gui/URLEdit.h</header>
<container>1</container>
</customwidget>
</customwidgets>
<tabstops>
<tabstop>titleEdit</tabstop>
<tabstop>usernameComboBox</tabstop>
<tabstop>passwordEdit</tabstop>
<tabstop>urlEdit</tabstop>
<tabstop>fetchFaviconButton</tabstop>
<tabstop>expireCheck</tabstop>
<tabstop>expireDatePicker</tabstop>
<tabstop>expirePresets</tabstop>
<tabstop>notesEnabled</tabstop>
<tabstop>notesEdit</tabstop>
</tabstops>
<resources/>
<connections/>
</ui>
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>EditEntryWidgetMain</class>
<widget class="QScrollArea" name="EditEntryWidgetMain">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>539</width>
<height>523</height>
</rect>
</property>
<property name="windowTitle">
<string>Edit Entry</string>
</property>
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Plain</enum>
</property>
<property name="horizontalScrollBarPolicy">
<enum>Qt::ScrollBarAlwaysOff</enum>
</property>
<property name="sizeAdjustPolicy">
<enum>QAbstractScrollArea::AdjustToContents</enum>
</property>
<property name="widgetResizable">
<bool>true</bool>
</property>
<widget class="QWidget" name="container">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>539</width>
<height>523</height>
</rect>
</property>
<layout class="QGridLayout" name="gridLayout">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<property name="horizontalSpacing">
<number>10</number>
</property>
<property name="verticalSpacing">
<number>8</number>
</property>
<item row="6" column="1">
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QPlainTextEdit" name="notesEdit">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>1</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>100</height>
</size>
</property>
<property name="accessibleName">
<string>Notes field</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="notesHint">
<property name="visible">
<bool>true</bool>
</property>
<property name="text">
<string>Toggle the checkbox to reveal the notes section.</string>
</property>
<property name="alignment">
<set>Qt::AlignTop</set>
</property>
</widget>
</item>
</layout>
</item>
<item row="1" column="1">
<widget class="QComboBox" name="usernameComboBox">
<property name="accessibleName">
<string>Username field</string>
</property>
</widget>
</item>
<item row="6" column="0">
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QCheckBox" name="notesEnabled">
<property name="toolTip">
<string>Toggle notes visible</string>
</property>
<property name="accessibleName">
<string>Toggle notes visible</string>
</property>
<property name="text">
<string>Notes:</string>
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item row="5" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_2">
<property name="spacing">
<number>8</number>
</property>
<item>
<widget class="QDateTimeEdit" name="expireDatePicker">
<property name="enabled">
<bool>false</bool>
</property>
<property name="accessibleName">
<string>Expiration field</string>
</property>
<property name="calendarPopup">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="expirePresets">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="toolTip">
<string>Expiration Presets</string>
</property>
<property name="accessibleName">
<string>Expiration presets</string>
</property>
<property name="text">
<string>Presets</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="2" column="0">
<widget class="QLabel" name="passwordLabel">
<property name="text">
<string>Password:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="urlLabel">
<property name="text">
<string>URL:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="3" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_6">
<property name="spacing">
<number>8</number>
</property>
<item>
<widget class="URLEdit" name="urlEdit">
<property name="accessibleName">
<string>Url field</string>
</property>
<property name="placeholderText">
<string>https://example.com</string>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="fetchFaviconButton">
<property name="toolTip">
<string>Download favicon for URL</string>
</property>
<property name="accessibleName">
<string>Download favicon for URL</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="0" column="0">
<widget class="QLabel" name="titleLabel">
<property name="text">
<string>Title:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLineEdit" name="titleEdit">
<property name="accessibleName">
<string>Title field</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="usernameLabel">
<property name="text">
<string>Username:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="PasswordEdit" name="passwordEdit">
<property name="accessibleName">
<string>Password field</string>
</property>
<property name="echoMode">
<enum>QLineEdit::Password</enum>
</property>
</widget>
</item>
<item row="5" column="0">
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="spacing">
<number>0</number>
</property>
<item>
<widget class="QCheckBox" name="expireCheck">
<property name="toolTip">
<string>Toggle expiration</string>
</property>
<property name="accessibleName">
<string>Toggle expiration</string>
</property>
<property name="text">
<string>Expires:</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</widget>
<customwidgets>
<customwidget>
<class>PasswordEdit</class>
<extends>QLineEdit</extends>
<header>gui/PasswordEdit.h</header>
<container>1</container>
</customwidget>
<customwidget>
<class>URLEdit</class>
<extends>QLineEdit</extends>
<header>gui/URLEdit.h</header>
<container>1</container>
</customwidget>
</customwidgets>
<tabstops>
<tabstop>titleEdit</tabstop>
<tabstop>usernameComboBox</tabstop>
<tabstop>passwordEdit</tabstop>
<tabstop>urlEdit</tabstop>
<tabstop>fetchFaviconButton</tabstop>
<tabstop>expireCheck</tabstop>
<tabstop>expireDatePicker</tabstop>
<tabstop>expirePresets</tabstop>
<tabstop>notesEnabled</tabstop>
<tabstop>notesEdit</tabstop>
</tabstops>
<resources/>
<connections/>
</ui>

View File

@ -37,11 +37,10 @@
EntryModel::EntryModel(QObject* parent)
: QAbstractTableModel(parent)
, m_group(nullptr)
, m_hideUsernames(false)
, m_hidePasswords(true)
, HiddenContentDisplay(QString("\u25cf").repeated(6))
, DateFormat(Qt::DefaultLocaleShortDate)
{
connect(config(), &Config::changed, this, &EntryModel::onConfigChanged);
}
Entry* EntryModel::entryFromIndex(const QModelIndex& index) const
@ -156,7 +155,7 @@ QVariant EntryModel::data(const QModelIndex& index, int role) const
}
return result;
case Username:
if (m_hideUsernames) {
if (config()->get(Config::GUI_HideUsernames).toBool()) {
result = EntryModel::HiddenContentDisplay;
} else {
result = entry->resolveMultiplePlaceholders(entry->username());
@ -164,9 +163,12 @@ QVariant EntryModel::data(const QModelIndex& index, int role) const
if (attr->isReference(EntryAttributes::UserNameKey)) {
result.prepend(tr("Ref: ", "Reference abbreviation"));
}
if (entry->username().isEmpty() && !config()->get(Config::Security_PasswordEmptyPlaceholder).toBool()) {
result = "";
}
return result;
case Password:
if (m_hidePasswords) {
if (config()->get(Config::GUI_HidePasswords).toBool()) {
result = EntryModel::HiddenContentDisplay;
} else {
result = entry->resolveMultiplePlaceholders(entry->password());
@ -537,6 +539,20 @@ void EntryModel::entryDataChanged(Entry* entry)
emit dataChanged(index(row, 0), index(row, columnCount() - 1));
}
void EntryModel::onConfigChanged(Config::ConfigKey key)
{
switch (key) {
case Config::GUI_HideUsernames:
emit dataChanged(index(0, Username), index(rowCount() - 1, Username), {Qt::DisplayRole});
break;
case Config::GUI_HidePasswords:
emit dataChanged(index(0, Password), index(rowCount() - 1, Password), {Qt::DisplayRole});
break;
default:
break;
}
}
void EntryModel::severConnections()
{
if (m_group) {
@ -560,39 +576,3 @@ void EntryModel::makeConnections(const Group* group)
connect(group, SIGNAL(entryMovedDown()), SLOT(entryMovedDown()));
connect(group, SIGNAL(entryDataChanged(Entry*)), SLOT(entryDataChanged(Entry*)));
}
/**
* Get current state of 'Hide Usernames' setting
*/
bool EntryModel::isUsernamesHidden() const
{
return m_hideUsernames;
}
/**
* Set state of 'Hide Usernames' setting and signal change
*/
void EntryModel::setUsernamesHidden(bool hide)
{
m_hideUsernames = hide;
emit dataChanged(index(0, 0), index(rowCount() - 1, columnCount() - 1));
emit usernamesHiddenChanged();
}
/**
* Get current state of 'Hide Passwords' setting
*/
bool EntryModel::isPasswordsHidden() const
{
return m_hidePasswords;
}
/**
* Set state of 'Hide Passwords' setting and signal change
*/
void EntryModel::setPasswordsHidden(bool hide)
{
m_hidePasswords = hide;
emit dataChanged(index(0, 0), index(rowCount() - 1, columnCount() - 1));
emit passwordsHiddenChanged();
}

View File

@ -21,6 +21,8 @@
#include <QAbstractTableModel>
#include <QPixmap>
#include "core/Config.h"
class Entry;
class Group;
@ -64,15 +66,6 @@ public:
void setGroup(Group* group);
void setEntries(const QList<Entry*>& entries);
bool isUsernamesHidden() const;
void setUsernamesHidden(bool hide);
bool isPasswordsHidden() const;
void setPasswordsHidden(bool hide);
signals:
void usernamesHiddenChanged();
void passwordsHiddenChanged();
private slots:
void entryAboutToAdd(Entry* entry);
void entryAdded(Entry* entry);
@ -84,6 +77,8 @@ private slots:
void entryMovedDown();
void entryDataChanged(Entry* entry);
void onConfigChanged(Config::ConfigKey key);
private:
void severConnections();
void makeConnections(const Group* group);
@ -93,9 +88,6 @@ private:
QList<Entry*> m_orgEntries;
QList<const Group*> m_allGroups;
bool m_hideUsernames;
bool m_hidePasswords;
const QString HiddenContentDisplay;
const Qt::DateFormat DateFormat;
};

View File

@ -32,7 +32,7 @@ EntryView::EntryView(QWidget* parent)
, m_sortModel(new SortFilterHideProxyModel(this))
, m_lastIndex(-1)
, m_lastOrder(Qt::AscendingOrder)
, m_inSearchMode(false)
, m_headerMenu(new QMenu(this))
{
m_sortModel->setSourceModel(m_model);
m_sortModel->setDynamicSortFilter(true);
@ -55,22 +55,10 @@ EntryView::EntryView(QWidget* parent)
// clang-format off
connect(this, SIGNAL(doubleClicked(QModelIndex)), SLOT(emitEntryActivated(QModelIndex)));
connect(selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), SLOT(emitEntrySelectionChanged()));
connect(m_model, SIGNAL(usernamesHiddenChanged()), SIGNAL(viewStateChanged()));
connect(m_model, SIGNAL(passwordsHiddenChanged()), SIGNAL(viewStateChanged()));
// clang-format on
new QShortcut(Qt::CTRL + Qt::Key_F10, this, SLOT(contextMenuShortcutPressed()), nullptr, Qt::WidgetShortcut);
m_headerMenu = new QMenu(this);
m_headerMenu->setTitle(tr("Customize View"));
m_headerMenu->addSection(tr("Customize View"));
m_hideUsernamesAction = m_headerMenu->addAction(tr("Hide Usernames"), this, SLOT(setUsernamesHidden(bool)));
m_hideUsernamesAction->setCheckable(true);
m_hidePasswordsAction = m_headerMenu->addAction(tr("Hide Passwords"), this, SLOT(setPasswordsHidden(bool)));
m_hidePasswordsAction->setCheckable(true);
m_headerMenu->addSeparator();
resetViewToDefaults();
// Actions to toggle column visibility, each carrying the corresponding
@ -109,21 +97,12 @@ EntryView::EntryView(QWidget* parent)
header()->setContextMenuPolicy(Qt::CustomContextMenu);
connect(header(), SIGNAL(customContextMenuRequested(QPoint)), SLOT(showHeaderMenu(QPoint)));
// clang-format off
connect(header(), SIGNAL(sectionCountChanged(int,int)), SIGNAL(viewStateChanged()));
// clang-format on
connect(header(), SIGNAL(sectionCountChanged(int, int)), SIGNAL(viewStateChanged()));
connect(header(), SIGNAL(sectionMoved(int, int, int)), SIGNAL(viewStateChanged()));
connect(header(), SIGNAL(sectionResized(int, int, int)), SIGNAL(viewStateChanged()));
connect(header(), SIGNAL(sortIndicatorChanged(int, Qt::SortOrder)), SLOT(sortIndicatorChanged(int, Qt::SortOrder)));
// clang-format off
connect(header(), SIGNAL(sectionMoved(int,int,int)), SIGNAL(viewStateChanged()));
// clang-format on
// clang-format off
connect(header(), SIGNAL(sectionResized(int,int,int)), SIGNAL(viewStateChanged()));
// clang-format on
// clang-format off
connect(header(), SIGNAL(sortIndicatorChanged(int,Qt::SortOrder)), SLOT(sortIndicatorChanged(int,Qt::SortOrder)));
// clang-format on
}
void EntryView::contextMenuShortcutPressed()
@ -301,50 +280,6 @@ int EntryView::currentEntryIndex()
}
}
/**
* Get current state of 'Hide Usernames' setting (NOTE: just pass-through for
* m_model)
*/
bool EntryView::isUsernamesHidden() const
{
return m_model->isUsernamesHidden();
}
/**
* Set state of 'Hide Usernames' setting (NOTE: just pass-through for m_model)
*/
void EntryView::setUsernamesHidden(bool hide)
{
bool block = m_hideUsernamesAction->signalsBlocked();
m_hideUsernamesAction->blockSignals(true);
m_hideUsernamesAction->setChecked(hide);
m_hideUsernamesAction->blockSignals(block);
m_model->setUsernamesHidden(hide);
}
/**
* Get current state of 'Hide Passwords' setting (NOTE: just pass-through for
* m_model)
*/
bool EntryView::isPasswordsHidden() const
{
return m_model->isPasswordsHidden();
}
/**
* Set state of 'Hide Passwords' setting (NOTE: just pass-through for m_model)
*/
void EntryView::setPasswordsHidden(bool hide)
{
bool block = m_hidePasswordsAction->signalsBlocked();
m_hidePasswordsAction->blockSignals(true);
m_hidePasswordsAction->setChecked(hide);
m_hidePasswordsAction->blockSignals(block);
m_model->setPasswordsHidden(hide);
}
/**
* Get current view state
*/
@ -358,6 +293,8 @@ QByteArray EntryView::viewState() const
*/
bool EntryView::setViewState(const QByteArray& state)
{
// Reset to unsorted first (https://bugreports.qt.io/browse/QTBUG-86694)
header()->setSortIndicator(-1, Qt::AscendingOrder);
bool status = header()->restoreState(state);
resetFixedColumns();
m_columnsNeedRelayout = state.isEmpty();
@ -370,8 +307,6 @@ bool EntryView::setViewState(const QByteArray& state)
*/
void EntryView::showHeaderMenu(const QPoint& position)
{
m_hideUsernamesAction->setChecked(m_model->isUsernamesHidden());
m_hidePasswordsAction->setChecked(m_model->isPasswordsHidden());
const QList<QAction*> actions = m_columnActions->actions();
for (auto& action : actions) {
Q_ASSERT(static_cast<QMetaType::Type>(action->data().type()) == QMetaType::Int);
@ -379,8 +314,7 @@ void EntryView::showHeaderMenu(const QPoint& position)
continue;
}
int columnIndex = action->data().toInt();
bool hidden = header()->isSectionHidden(columnIndex) || (header()->sectionSize(columnIndex) == 0);
action->setChecked(!hidden);
action->setChecked(!isColumnHidden(columnIndex));
}
m_headerMenu->popup(mapToGlobal(position));
@ -408,6 +342,7 @@ void EntryView::toggleColumnVisibility(QAction* action)
if (header()->sectionSize(columnIndex) == 0) {
header()->resizeSection(columnIndex, header()->defaultSectionSize());
}
resetFixedColumns();
return;
}
if ((header()->count() - header()->hiddenSectionCount()) > 1) {
@ -460,11 +395,15 @@ void EntryView::fitColumnsToContents()
*/
void EntryView::resetFixedColumns()
{
header()->setSectionResizeMode(EntryModel::Paperclip, QHeaderView::Fixed);
header()->resizeSection(EntryModel::Paperclip, header()->minimumSectionSize());
if (!isColumnHidden(EntryModel::Paperclip)) {
header()->setSectionResizeMode(EntryModel::Paperclip, QHeaderView::Fixed);
header()->resizeSection(EntryModel::Paperclip, header()->minimumSectionSize());
}
header()->setSectionResizeMode(EntryModel::Totp, QHeaderView::Fixed);
header()->resizeSection(EntryModel::Totp, header()->minimumSectionSize());
if (!isColumnHidden(EntryModel::Totp)) {
header()->setSectionResizeMode(EntryModel::Totp, QHeaderView::Fixed);
header()->resizeSection(EntryModel::Totp, header()->minimumSectionSize());
}
}
/**
@ -472,9 +411,6 @@ void EntryView::resetFixedColumns()
*/
void EntryView::resetViewToDefaults()
{
m_model->setUsernamesHidden(false);
m_model->setPasswordsHidden(true);
// Reduce number of columns that are shown by default
if (m_inSearchMode) {
header()->showSection(EntryModel::ParentGroup);
@ -533,3 +469,8 @@ void EntryView::showEvent(QShowEvent* event)
m_columnsNeedRelayout = false;
}
}
bool EntryView::isColumnHidden(int logicalIndex)
{
return header()->isSectionHidden(logicalIndex) || header()->sectionSize(logicalIndex) == 0;
}

View File

@ -44,8 +44,6 @@ public:
bool isSorted();
int numberOfSelectedEntries();
void setFirstEntryActive();
bool isUsernamesHidden() const;
bool isPasswordsHidden() const;
QByteArray viewState() const;
bool setViewState(const QByteArray& state);
@ -57,10 +55,6 @@ signals:
void entrySelectionChanged(Entry* entry);
void viewStateChanged();
public slots:
void setUsernamesHidden(bool hide);
void setPasswordsHidden(bool hide);
protected:
void keyPressEvent(QKeyEvent* event) override;
void focusInEvent(QFocusEvent* event) override;
@ -80,17 +74,16 @@ private slots:
private:
void resetFixedColumns();
bool isColumnHidden(int logicalIndex);
EntryModel* const m_model;
SortFilterHideProxyModel* const m_sortModel;
int m_lastIndex;
Qt::SortOrder m_lastOrder;
bool m_inSearchMode;
bool m_inSearchMode = false;
bool m_columnsNeedRelayout = true;
QMenu* m_headerMenu;
QAction* m_hideUsernamesAction;
QAction* m_hidePasswordsAction;
QActionGroup* m_columnActions;
};

View File

@ -62,7 +62,7 @@ private:
EditGroupWidget::EditGroupWidget(QWidget* parent)
: EditWidget(parent)
, m_mainUi(new Ui::EditGroupWidgetMain())
, m_editGroupWidgetMain(new QWidget())
, m_editGroupWidgetMain(new QScrollArea())
, m_editGroupWidgetIcons(new EditWidgetIcons())
, m_editWidgetProperties(new EditWidgetProperties())
, m_group(nullptr)

View File

@ -20,6 +20,7 @@
#include <QComboBox>
#include <QScopedPointer>
#include <QScrollArea>
#include "core/Group.h"
#include "gui/EditWidget.h"
@ -78,7 +79,7 @@ private:
const QScopedPointer<Ui::EditGroupWidgetMain> m_mainUi;
QPointer<QWidget> m_editGroupWidgetMain;
QPointer<QScrollArea> m_editGroupWidgetMain;
QPointer<EditWidgetIcons> m_editGroupWidgetIcons;
QPointer<EditWidgetProperties> m_editWidgetProperties;

View File

@ -1,215 +1,243 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>EditGroupWidgetMain</class>
<widget class="QWidget" name="EditGroupWidgetMain">
<widget class="QScrollArea" name="EditGroupWidgetMain">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>410</width>
<height>430</height>
<width>539</width>
<height>523</height>
</rect>
</property>
<layout class="QGridLayout" name="gridLayout" rowstretch="0,0,0,0,0,0,0,0,0,1" rowminimumheight="0,0,0,0,0,0,0,0,0,1">
<property name="leftMargin">
<number>0</number>
<property name="windowTitle">
<string>Edit Group</string>
</property>
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Plain</enum>
</property>
<property name="horizontalScrollBarPolicy">
<enum>Qt::ScrollBarAlwaysOff</enum>
</property>
<property name="sizeAdjustPolicy">
<enum>QAbstractScrollArea::AdjustToContents</enum>
</property>
<property name="widgetResizable">
<bool>true</bool>
</property>
<widget class="QWidget" name="container">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>539</width>
<height>523</height>
</rect>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<property name="horizontalSpacing">
<number>10</number>
</property>
<property name="verticalSpacing">
<number>8</number>
</property>
<item row="3" column="0">
<widget class="QCheckBox" name="expireCheck">
<property name="accessibleName">
<string>Toggle expiration</string>
</property>
<property name="text">
<string>Expires:</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLineEdit" name="editName">
<property name="accessibleName">
<string>Name field</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QDateTimeEdit" name="expireDatePicker">
<property name="enabled">
<bool>false</bool>
</property>
<property name="accessibleName">
<string>Expiration field</string>
</property>
<property name="calendarPopup">
<bool>true</bool>
</property>
</widget>
</item>
<item row="6" column="1">
<widget class="QRadioButton" name="autoTypeSequenceInherit">
<property name="text">
<string>Use default Auto-Type sequence of parent group</string>
</property>
</widget>
</item>
<item row="5" column="0">
<widget class="QLabel" name="autotypeLabel">
<property name="text">
<string>Auto-Type:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="searchLabel">
<property name="text">
<string>Search:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="5" column="1">
<widget class="QComboBox" name="autotypeComboBox">
<property name="accessibleName">
<string>Auto-Type toggle for this and sub groups</string>
</property>
</widget>
</item>
<item row="1" column="0">
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QLabel" name="labelNotes">
<property name="text">
<string>Notes:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacer_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>0</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item row="8" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Fixed</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>30</width>
<height>0</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QLineEdit" name="autoTypeSequenceCustomEdit">
<property name="enabled">
<bool>false</bool>
</property>
<property name="accessibleName">
<string>Default auto-type sequence field</string>
</property>
<property name="accessibleDescription">
<string/>
</property>
</widget>
</item>
</layout>
</item>
<item row="1" column="1">
<widget class="QPlainTextEdit" name="editNotes">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>120</height>
</size>
</property>
<property name="accessibleName">
<string>Notes field</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="labelName">
<property name="text">
<string>Name:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="7" column="1">
<widget class="QRadioButton" name="autoTypeSequenceCustomRadio">
<property name="text">
<string>Set default Auto-Type sequence</string>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QComboBox" name="searchComboBox">
<property name="accessibleName">
<string>Search toggle for this and sub groups</string>
</property>
</widget>
</item>
<item row="9" column="0">
<spacer name="verticalSpacer_4">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
<layout class="QGridLayout" name="gridLayout" rowstretch="0,0,0,0,0,0,0,0,0,1" rowminimumheight="0,0,0,0,0,0,0,0,0,1">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<property name="horizontalSpacing">
<number>10</number>
</property>
<property name="verticalSpacing">
<number>8</number>
</property>
<item row="3" column="0">
<widget class="QCheckBox" name="expireCheck">
<property name="accessibleName">
<string>Toggle expiration</string>
</property>
<property name="text">
<string>Expires:</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLineEdit" name="editName">
<property name="accessibleName">
<string>Name field</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QDateTimeEdit" name="expireDatePicker">
<property name="enabled">
<bool>false</bool>
</property>
<property name="accessibleName">
<string>Expiration field</string>
</property>
<property name="calendarPopup">
<bool>true</bool>
</property>
</widget>
</item>
<item row="6" column="1">
<widget class="QRadioButton" name="autoTypeSequenceInherit">
<property name="text">
<string>Use default Auto-Type sequence of parent group</string>
</property>
</widget>
</item>
<item row="5" column="0">
<widget class="QLabel" name="autotypeLabel">
<property name="text">
<string>Auto-Type:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="searchLabel">
<property name="text">
<string>Search:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="5" column="1">
<widget class="QComboBox" name="autotypeComboBox">
<property name="accessibleName">
<string>Auto-Type toggle for this and sub groups</string>
</property>
</widget>
</item>
<item row="1" column="0">
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QLabel" name="labelNotes">
<property name="text">
<string>Notes:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacer_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>0</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item row="8" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Fixed</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>30</width>
<height>0</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QLineEdit" name="autoTypeSequenceCustomEdit">
<property name="enabled">
<bool>false</bool>
</property>
<property name="accessibleName">
<string>Default auto-type sequence field</string>
</property>
<property name="accessibleDescription">
<string/>
</property>
</widget>
</item>
</layout>
</item>
<item row="1" column="1">
<widget class="QPlainTextEdit" name="editNotes">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>120</height>
</size>
</property>
<property name="accessibleName">
<string>Notes field</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="labelName">
<property name="text">
<string>Name:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="7" column="1">
<widget class="QRadioButton" name="autoTypeSequenceCustomRadio">
<property name="text">
<string>Set default Auto-Type sequence</string>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QComboBox" name="searchComboBox">
<property name="accessibleName">
<string>Search toggle for this and sub groups</string>
</property>
</widget>
</item>
<item row="9" column="0">
<spacer name="verticalSpacer_4">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</widget>
<tabstops>
<tabstop>editName</tabstop>

View File

@ -252,19 +252,23 @@ bool GroupModel::dropMimeData(const QMimeData* data,
row--;
}
Group* group;
if (action == Qt::MoveAction) {
group = dragGroup;
} else {
group = dragGroup->clone();
}
Database* sourceDb = dragGroup->database();
Database* targetDb = parentGroup->database();
Group* group = dragGroup;
if (sourceDb != targetDb) {
QSet<QUuid> customIcons = group->customIconsRecursive();
targetDb->metadata()->copyCustomIcons(customIcons, sourceDb->metadata());
// Always clone the group across db's to reset UUIDs
group = dragGroup->clone();
if (action == Qt::MoveAction) {
// Remove the original group from the sourceDb
delete dragGroup;
}
} else if (action == Qt::CopyAction) {
group = dragGroup->clone();
}
group->setParent(parentGroup, row);
@ -288,19 +292,24 @@ bool GroupModel::dropMimeData(const QMimeData* data,
continue;
}
Entry* entry;
if (action == Qt::MoveAction) {
entry = dragEntry;
} else {
entry = dragEntry->clone(Entry::CloneNewUuid | Entry::CloneResetTimeInfo);
}
Database* sourceDb = dragEntry->group()->database();
Database* targetDb = parentGroup->database();
QUuid customIcon = entry->iconUuid();
if (sourceDb != targetDb && !customIcon.isNull() && !targetDb->metadata()->hasCustomIcon(customIcon)) {
targetDb->metadata()->addCustomIcon(customIcon, sourceDb->metadata()->customIcon(customIcon));
Entry* entry = dragEntry;
if (sourceDb != targetDb) {
QUuid customIcon = entry->iconUuid();
if (!customIcon.isNull() && !targetDb->metadata()->hasCustomIcon(customIcon)) {
targetDb->metadata()->addCustomIcon(customIcon, sourceDb->metadata()->customIcon(customIcon));
}
// Always clone the entry across db's to reset the UUID
entry = dragEntry->clone();
if (action == Qt::MoveAction) {
delete dragEntry;
}
} else if (action == Qt::CopyAction) {
entry = dragEntry->clone();
}
entry->setGroup(parentGroup);

View File

@ -37,6 +37,7 @@ public:
bool hideProcess(pid_t pid);
bool isHidden(pid_t pid);
bool isDarkMode();
bool hasDarkMode();
bool enableAccessibility();
bool enableScreenRecording();
void toggleForegroundApp(bool foreground);

View File

@ -76,6 +76,27 @@ namespace
QList<QSharedPointer<Item>> m_items;
bool m_anyKnownBad = false;
};
class ReportSortProxyModel : public QSortFilterProxyModel
{
public:
ReportSortProxyModel(QObject* parent)
: QSortFilterProxyModel(parent){};
~ReportSortProxyModel() override = default;
protected:
bool lessThan(const QModelIndex& left, const QModelIndex& right) const override
{
// Check if the display data is a number, convert and compare if so
bool ok = false;
int leftInt = sourceModel()->data(left).toString().toInt(&ok);
if (ok) {
return leftInt < sourceModel()->data(right).toString().toInt();
}
// Otherwise use default sorting
return QSortFilterProxyModel::lessThan(left, right);
}
};
} // namespace
Health::Health(QSharedPointer<Database> db)
@ -121,11 +142,12 @@ ReportsWidgetHealthcheck::ReportsWidgetHealthcheck(QWidget* parent)
, m_ui(new Ui::ReportsWidgetHealthcheck())
, m_errorIcon(Resources::instance()->icon("dialog-error"))
, m_referencesModel(new QStandardItemModel(this))
, m_modelProxy(new QSortFilterProxyModel(this))
, m_modelProxy(new ReportSortProxyModel(this))
{
m_ui->setupUi(this);
m_modelProxy->setSourceModel(m_referencesModel.data());
m_modelProxy->setSortLocaleAware(true);
m_ui->healthcheckTableView->setModel(m_modelProxy.data());
m_ui->healthcheckTableView->setSelectionMode(QAbstractItemView::NoSelection);
m_ui->healthcheckTableView->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
@ -256,6 +278,7 @@ void ReportsWidgetHealthcheck::calculateHealth()
} else {
m_referencesModel->setHorizontalHeaderLabels(QStringList() << tr("") << tr("Title") << tr("Path") << tr("Score")
<< tr("Reason"));
m_ui->healthcheckTableView->sortByColumn(0, Qt::AscendingOrder);
}
m_ui->healthcheckTableView->resizeRowsToContents();

View File

@ -45,17 +45,38 @@ namespace
return entry->customData()->contains(PasswordHealth::OPTION_KNOWN_BAD)
&& entry->customData()->value(PasswordHealth::OPTION_KNOWN_BAD) == TRUE_STR;
}
class ReportSortProxyModel : public QSortFilterProxyModel
{
public:
ReportSortProxyModel(QObject* parent)
: QSortFilterProxyModel(parent){};
~ReportSortProxyModel() override = default;
protected:
bool lessThan(const QModelIndex& left, const QModelIndex& right) const override
{
// Sort count column by user data
if (left.column() == 2) {
return sourceModel()->data(left, Qt::UserRole).toInt()
< sourceModel()->data(right, Qt::UserRole).toInt();
}
// Otherwise use default sorting
return QSortFilterProxyModel::lessThan(left, right);
}
};
} // namespace
ReportsWidgetHibp::ReportsWidgetHibp(QWidget* parent)
: QWidget(parent)
, m_ui(new Ui::ReportsWidgetHibp())
, m_referencesModel(new QStandardItemModel(this))
, m_modelProxy(new QSortFilterProxyModel(this))
, m_modelProxy(new ReportSortProxyModel(this))
{
m_ui->setupUi(this);
m_modelProxy->setSourceModel(m_referencesModel.data());
m_modelProxy->setSortLocaleAware(true);
m_ui->hibpTableView->setModel(m_modelProxy.data());
m_ui->hibpTableView->setSelectionMode(QAbstractItemView::NoSelection);
m_ui->hibpTableView->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
@ -167,6 +188,7 @@ void ReportsWidgetHibp::makeHibpTable()
}
row[2]->setForeground(red);
row[2]->setData(count, Qt::UserRole);
m_referencesModel->appendRow(row);
// Store entry pointer per table row (used in double click handler)
@ -198,6 +220,7 @@ void ReportsWidgetHibp::makeHibpTable()
}
m_ui->hibpTableView->resizeRowsToContents();
m_ui->hibpTableView->sortByColumn(2, Qt::DescendingOrder);
m_ui->stackedWidget->setCurrentIndex(1);
}

View File

@ -54,6 +54,8 @@
#include <cmath>
#include "core/Resources.h"
QT_BEGIN_NAMESPACE
Q_GUI_EXPORT int qt_defaultDpiX();
QT_END_NAMESPACE
@ -282,6 +284,17 @@ namespace Phantom
? highlightedOutlineOf(pal)
: Grad(pal.color(QPalette::WindowText), pal.color(QPalette::Window)).sample(0.5);
}
#ifdef Q_OS_MACOS
QColor tabBarBase(const QPalette& pal)
{
return hack_isLightPalette(pal) ? QRgb(0xD1D1D1) : QRgb(0x252525);
}
QColor tabBarBaseInactive(const QPalette& pal)
{
return hack_isLightPalette(pal) ? QRgb(0xF4F4F4) : QRgb(0x282828);
}
#endif
} // namespace DeriveColors
namespace SwatchColors
@ -328,6 +341,9 @@ namespace Phantom
S_itemView_headerOnLine,
S_scrollbarGutter_disabled,
S_tabBarBase,
S_tabBarBase_inactive,
// Aliases
S_progressBar = S_highlight,
S_progressBar_specular = S_highlight_specular,
@ -340,7 +356,7 @@ namespace Phantom
enum
{
Num_SwatchColors = SwatchColors::S_scrollbarGutter_disabled + 1,
Num_SwatchColors = SwatchColors::S_tabBarBase_inactive + 1,
Num_ShadowSteps = 3,
};
@ -443,6 +459,14 @@ namespace Phantom
colors[S_itemView_headerOnLine] = Dc::itemViewHeaderOnLineColorOf(pal);
colors[S_scrollbarGutter_disabled] = colors[S_window];
#ifdef Q_OS_MACOS
colors[S_tabBarBase] = Dc::tabBarBase(pal);
colors[S_tabBarBase_inactive] = Dc::tabBarBaseInactive(pal);
#else
colors[S_tabBarBase] = pal.color(QPalette::Active, QPalette::Window);
colors[S_tabBarBase_inactive] = pal.color(QPalette::Inactive, QPalette::Window);
#endif
brushes[S_none] = Qt::NoBrush;
for (int i = S_none + 1; i < Num_SwatchColors; ++i) {
// todo try to reuse
@ -1551,6 +1575,12 @@ void BaseStyle::drawPrimitive(PrimitiveElement elem,
auto tbb = qstyleoption_cast<const QStyleOptionTabBarBase*>(option);
if (!tbb)
break;
#ifdef Q_OS_MACOS
painter->fillRect(widget->rect(),
swatch.color(option->state & QStyle::State_Active ? S_tabBarBase : S_tabBarBase_inactive));
#endif
Qt::Edge edge = Qt::TopEdge;
switch (tbb->shape) {
case QTabBar::RoundedNorth:
@ -2253,6 +2283,21 @@ void BaseStyle::drawControl(ControlElement element,
auto toolBar = qstyleoption_cast<const QStyleOptionToolBar*>(option);
if (!toolBar)
break;
#ifdef Q_OS_MACOS
if (auto* mainWindow = qobject_cast<QMainWindow*>(widget->window())) {
// Fill toolbar background with transparent pixels to reveal the
// gradient background drawn by the Cocoa platform plugin.
// Inspired by qmacstyle_mac.mm.
if (m_drawNativeMacOsToolBar && toolBar && toolBar->toolBarArea == Qt::TopToolBarArea
&& mainWindow->unifiedTitleAndToolBarOnMac()) {
painter->setCompositionMode(QPainter::CompositionMode_Source);
painter->fillRect(option->rect, Qt::transparent);
break;
}
}
#endif
painter->fillRect(option->rect, option->palette.window().color());
bool isFloating = false;
if (auto tb = qobject_cast<const QToolBar*>(widget)) {
@ -3036,6 +3081,21 @@ QPalette BaseStyle::standardPalette() const
return QCommonStyle::standardPalette();
}
QIcon BaseStyle::standardIcon(StandardPixmap sp, const QStyleOption* opt, const QWidget* widget) const
{
switch (sp) {
case SP_ToolBarHorizontalExtensionButton:
return resources()->icon("chevron-double-down");
case SP_ToolBarVerticalExtensionButton:
return resources()->icon("chevron-double-right");
case SP_LineEditClearButton:
return resources()->icon(
QString("edit-clear-locationbar-").append((opt->direction == Qt::LeftToRight) ? "rtl" : "ltr"));
default:
return QCommonStyle::standardIcon(sp, opt, widget);
}
}
void BaseStyle::drawComplexControl(ComplexControl control,
const QStyleOptionComplex* option,
QPainter* painter,

View File

@ -42,6 +42,8 @@ public:
};
QPalette standardPalette() const override;
QIcon
standardIcon(StandardPixmap sp, const QStyleOption* opt = nullptr, const QWidget* widget = nullptr) const override;
void drawPrimitive(PrimitiveElement elem,
const QStyleOption* option,
QPainter* painter,
@ -95,6 +97,15 @@ protected:
return {};
}
#ifdef Q_OS_MACOS
/**
* Whether to draw a native macOS toolbar or fill it with a solid color instead.
* Can be set to false to avoid mixed themes if the OS theme isn't the same as
* the KeePassXC application theme.
*/
bool m_drawNativeMacOsToolBar = true;
#endif
BaseStylePrivate* d;
};

Some files were not shown because too many files have changed in this diff Show More