Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/keepassxreboot/keepassxc.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJanek Bevendorff <janek@jbev.net>2020-10-21 23:47:02 +0300
committerJanek Bevendorff <janek@jbev.net>2020-10-21 23:47:02 +0300
commite9b9582817affd7936d4b6b07c22c482d7d0d3a6 (patch)
tree6f454bca5b5dac5aedfb27c49cf65aaa7271c421
parent9a35bba3b702256e025af48260fb56a012676fe4 (diff)
parent4f61f57c14411a3a45398e9949e7754788fb5c36 (diff)
Release 2.6.22.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]
-rw-r--r--CHANGELOG.md40
-rw-r--r--CMakeLists.txt2
-rw-r--r--COPYING4
-rw-r--r--docs/styles/dark.css4
-rw-r--r--docs/topics/DownloadInstall.adoc2
-rw-r--r--docs/topics/KeyboardShortcuts.adoc3
-rw-r--r--docs/topics/UserInterface.adoc37
-rw-r--r--share/icons/application/scalable/actions/chevron-double-down.svg1
-rw-r--r--share/icons/application/scalable/actions/chevron-double-right.svg1
-rw-r--r--share/icons/icons.qrc2
-rw-r--r--share/linux/org.keepassxc.KeePassXC.appdata.xml35
-rw-r--r--share/translations/keepassx_ar.ts88
-rw-r--r--share/translations/keepassx_bg.ts88
-rw-r--r--share/translations/keepassx_ca.ts176
-rw-r--r--share/translations/keepassx_cs.ts247
-rw-r--r--share/translations/keepassx_da.ts88
-rw-r--r--share/translations/keepassx_de.ts90
-rw-r--r--share/translations/keepassx_en.ts56
-rw-r--r--share/translations/keepassx_en_GB.ts (renamed from share/translations/keepassx_pt.ts)2505
-rw-r--r--share/translations/keepassx_en_US.ts88
-rw-r--r--share/translations/keepassx_es.ts94
-rw-r--r--share/translations/keepassx_et.ts740
-rw-r--r--share/translations/keepassx_fi.ts88
-rw-r--r--share/translations/keepassx_fr.ts170
-rw-r--r--share/translations/keepassx_hu.ts88
-rw-r--r--share/translations/keepassx_id.ts92
-rw-r--r--share/translations/keepassx_it.ts118
-rw-r--r--share/translations/keepassx_ja.ts88
-rw-r--r--share/translations/keepassx_ko.ts88
-rw-r--r--share/translations/keepassx_lt.ts88
-rw-r--r--share/translations/keepassx_nb.ts88
-rw-r--r--share/translations/keepassx_nl_NL.ts98
-rw-r--r--share/translations/keepassx_pl.ts88
-rw-r--r--share/translations/keepassx_pt_BR.ts88
-rw-r--r--share/translations/keepassx_pt_PT.ts94
-rw-r--r--share/translations/keepassx_ro.ts88
-rw-r--r--share/translations/keepassx_ru.ts88
-rw-r--r--share/translations/keepassx_sk.ts88
-rw-r--r--share/translations/keepassx_sv.ts116
-rw-r--r--share/translations/keepassx_th.ts88
-rw-r--r--share/translations/keepassx_tr.ts98
-rw-r--r--share/translations/keepassx_uk.ts88
-rw-r--r--share/translations/keepassx_zh_CN.ts110
-rw-r--r--share/translations/keepassx_zh_TW.ts90
-rw-r--r--snap/snapcraft.yaml2
-rw-r--r--src/CMakeLists.txt1
-rw-r--r--src/browser/BrowserAction.cpp8
-rw-r--r--src/browser/BrowserService.cpp285
-rw-r--r--src/browser/BrowserService.h36
-rw-r--r--src/browser/BrowserShared.cpp2
-rw-r--r--src/cli/keepassxc-cli.cpp7
-rw-r--r--src/core/AsyncTask.h22
-rw-r--r--src/core/Config.cpp91
-rw-r--r--src/core/Config.h8
-rw-r--r--src/core/Entry.cpp2
-rw-r--r--src/core/Entry.h13
-rw-r--r--src/core/FileWatcher.cpp17
-rw-r--r--src/core/Group.cpp4
-rw-r--r--src/core/Group.h3
-rw-r--r--src/core/Tools.cpp3
-rw-r--r--src/gui/DatabaseOpenDialog.cpp6
-rw-r--r--src/gui/DatabaseOpenWidget.cpp13
-rw-r--r--src/gui/DatabaseOpenWidget.h1
-rw-r--r--src/gui/DatabaseOpenWidget.ui22
-rw-r--r--src/gui/DatabaseTabWidget.cpp2
-rw-r--r--src/gui/DatabaseWidget.cpp46
-rw-r--r--src/gui/DatabaseWidget.h4
-rw-r--r--src/gui/DatabaseWidgetStateSync.cpp12
-rw-r--r--src/gui/DatabaseWidgetStateSync.h3
-rw-r--r--src/gui/EditWidget.cpp18
-rw-r--r--src/gui/EntryPreviewWidget.cpp2
-rw-r--r--src/gui/FileDialog.cpp21
-rw-r--r--src/gui/LineEdit.cpp70
-rw-r--r--src/gui/LineEdit.h44
-rw-r--r--src/gui/MainWindow.cpp57
-rw-r--r--src/gui/MainWindow.h2
-rw-r--r--src/gui/MainWindow.ui39
-rw-r--r--src/gui/PasswordEdit.cpp8
-rw-r--r--src/gui/PasswordGeneratorWidget.cpp14
-rw-r--r--src/gui/PasswordGeneratorWidget.ui22
-rw-r--r--src/gui/SearchWidget.cpp8
-rw-r--r--src/gui/SearchWidget.ui7
-rw-r--r--src/gui/dbsettings/DatabaseSettingsDialog.cpp13
-rw-r--r--src/gui/dbsettings/DatabaseSettingsWidgetDatabaseKey.cpp2
-rw-r--r--src/gui/entry/EditEntryWidget.cpp20
-rw-r--r--src/gui/entry/EditEntryWidget.h3
-rw-r--r--src/gui/entry/EditEntryWidgetMain.ui584
-rw-r--r--src/gui/entry/EntryModel.cpp60
-rw-r--r--src/gui/entry/EntryModel.h16
-rw-r--r--src/gui/entry/EntryView.cpp103
-rw-r--r--src/gui/entry/EntryView.h11
-rw-r--r--src/gui/group/EditGroupWidget.cpp2
-rw-r--r--src/gui/group/EditGroupWidget.h3
-rw-r--r--src/gui/group/EditGroupWidgetMain.ui432
-rw-r--r--src/gui/group/GroupModel.cpp43
-rw-r--r--src/gui/osutils/macutils/AppKit.h1
-rw-r--r--src/gui/reports/ReportsWidgetHealthcheck.cpp25
-rw-r--r--src/gui/reports/ReportsWidgetHibp.cpp25
-rw-r--r--src/gui/styles/base/BaseStyle.cpp62
-rw-r--r--src/gui/styles/base/BaseStyle.h11
-rw-r--r--src/gui/styles/base/basestyle.qss5
-rw-r--r--src/gui/styles/dark/DarkStyle.cpp19
-rw-r--r--src/gui/styles/dark/DarkStyle.h1
-rw-r--r--src/gui/styles/light/LightStyle.cpp19
-rw-r--r--src/gui/styles/light/LightStyle.h1
-rw-r--r--src/gui/wizard/NewDatabaseWizardPage.cpp6
-rw-r--r--src/gui/wizard/NewDatabaseWizardPage.ui57
-rw-r--r--src/gui/wizard/NewDatabaseWizardPageDatabaseKey.cpp8
-rw-r--r--src/gui/wizard/NewDatabaseWizardPageDatabaseKey.h3
-rw-r--r--src/keeshare/ShareObserver.cpp6
-rw-r--r--src/main.cpp53
-rw-r--r--tests/TestBrowser.cpp278
-rw-r--r--tests/TestBrowser.h2
-rw-r--r--tests/gui/TestGui.cpp10
-rwxr-xr-xutils/keepassxc-snap-helper.sh46
115 files changed, 4670 insertions, 4706 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 7b194f1cd..fc2eb2e2c 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -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
diff --git a/CMakeLists.txt b/CMakeLists.txt
index d390f672d..84d05e593 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -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")
diff --git a/COPYING b/COPYING
index 174848e46..aa11b14fa 100644
--- a/COPYING
+++ b/COPYING
@@ -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
diff --git a/docs/styles/dark.css b/docs/styles/dark.css
index 2c5b50a29..8f7bd67b6 100644
--- a/docs/styles/dark.css
+++ b/docs/styles/dark.css
@@ -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;
-} \ No newline at end of file
+}
diff --git a/docs/topics/DownloadInstall.adoc b/docs/topics/DownloadInstall.adoc
index 4e17c66bc..cc6f1fcb7 100644
--- a/docs/topics/DownloadInstall.adoc
+++ b/docs/topics/DownloadInstall.adoc
@@ -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:
diff --git a/docs/topics/KeyboardShortcuts.adoc b/docs/topics/KeyboardShortcuts.adoc
index 837fa9608..93baa303d 100644
--- a/docs/topics/KeyboardShortcuts.adoc
+++ b/docs/topics/KeyboardShortcuts.adoc
@@ -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
diff --git a/docs/topics/UserInterface.adoc b/docs/topics/UserInterface.adoc
index 1fee94608..1f0ca9cf2 100644
--- a/docs/topics/UserInterface.adoc
+++ b/docs/topics/UserInterface.adoc
@@ -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[]
diff --git a/share/icons/application/scalable/actions/chevron-double-down.svg b/share/icons/application/scalable/actions/chevron-double-down.svg
new file mode 100644
index 000000000..edcf11814
--- /dev/null
+++ b/share/icons/application/scalable/actions/chevron-double-down.svg
@@ -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> \ No newline at end of file
diff --git a/share/icons/application/scalable/actions/chevron-double-right.svg b/share/icons/application/scalable/actions/chevron-double-right.svg
new file mode 100644
index 000000000..3f2a06b4f
--- /dev/null
+++ b/share/icons/application/scalable/actions/chevron-double-right.svg
@@ -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> \ No newline at end of file
diff --git a/share/icons/icons.qrc b/share/icons/icons.qrc
index cb11f9068..cf73b4958 100644
--- a/share/icons/icons.qrc
+++ b/share/icons/icons.qrc
@@ -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>
diff --git a/share/linux/org.keepassxc.KeePassXC.appdata.xml b/share/linux/org.keepassxc.KeePassXC.appdata.xml
index b4436f5e4..84d52f279 100644
--- a/share/linux/org.keepassxc.KeePassXC.appdata.xml
+++ b/share/linux/org.keepassxc.KeePassXC.appdata.xml
@@ -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>
diff --git a/share/translations/keepassx_ar.ts b/share/translations/keepassx_ar.ts
index 8e1ea521e..a9a51e8ef 100644
--- a/share/translations/keepassx_ar.ts
+++ b/share/translations/keepassx_ar.ts
@@ -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>
@@ -167,10 +171,6 @@
<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>
</message>
@@ -306,10 +306,6 @@
<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"/>
</message>
@@ -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>
@@ -5281,10 +5309,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>ممتازة</translation>
</message>
<message>
- <source>ExtendedASCII</source>
- <translation type="unfinished"/>
- </message>
- <message>
<source>Switch to advanced mode</source>
<translation type="unfinished"/>
</message>
@@ -5293,58 +5317,22 @@ Expect some bugs and minor issues, this version is not meant for production use.
<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"/>
</message>
@@ -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>
diff --git a/share/translations/keepassx_bg.ts b/share/translations/keepassx_bg.ts
index 4da718b6f..d7e599df9 100644
--- a/share/translations/keepassx_bg.ts
+++ b/share/translations/keepassx_bg.ts
@@ -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>
@@ -167,10 +171,6 @@
<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>
</message>
@@ -305,10 +305,6 @@
<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>
</message>
@@ -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>
@@ -5326,10 +5354,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>Отлично</translation>
</message>
<message>
- <source>ExtendedASCII</source>
- <translation>Разширен ASCII</translation>
- </message>
- <message>
<source>Switch to advanced mode</source>
<translation>Превключване към разширен режим</translation>
</message>
@@ -5338,58 +5362,22 @@ Expect some bugs and minor issues, this version is not meant for production use.
<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>
</message>
@@ -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>
diff --git a/share/translations/keepassx_ca.ts b/share/translations/keepassx_ca.ts
index 3e5516701..7103ca548 100644
--- a/share/translations/keepassx_ca.ts
+++ b/share/translations/keepassx_ca.ts
@@ -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>
@@ -167,10 +171,6 @@
<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>
</message>
@@ -305,10 +305,6 @@
<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"/>
</message>
@@ -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 té 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>
@@ -5274,10 +5302,6 @@ Podeu esperar alguns errors i incidències menors. Aquesta versió no està pens
<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>
</message>
@@ -5286,58 +5310,22 @@ Podeu esperar alguns errors i incidències menors. Aquesta versió no està pens
<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"/>
</message>
@@ -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>
diff --git a/share/translations/keepassx_cs.ts b/share/translations/keepassx_cs.ts
index 2889ffe8c..a77e85337 100644
--- a/share/translations/keepassx_cs.ts
+++ b/share/translations/keepassx_cs.ts
@@ -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>
@@ -167,10 +171,6 @@
<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>
</message>
@@ -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>
@@ -305,12 +305,8 @@
<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řazení textu</translation>
+ <translation>Zařazování 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ě žádná databáze.</translation>
+ <translation>Žádná nedávná databá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>Má TOTP</translation>
+ <translation>Má 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 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>
@@ -5323,10 +5354,6 @@ OÄekávejte chyby a drobné problémy, tato verze není urÄena pro produkÄní
<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>
</message>
@@ -5335,58 +5362,22 @@ OÄekávejte chyby a drobné problémy, tato verze není urÄena pro produkÄní
<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>
</message>
@@ -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>
diff --git a/share/translations/keepassx_da.ts b/share/translations/keepassx_da.ts
index c3b5e5604..fdfc959e1 100644
--- a/share/translations/keepassx_da.ts
+++ b/share/translations/keepassx_da.ts
@@ -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>
@@ -167,10 +171,6 @@
<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>
</message>
@@ -305,10 +305,6 @@
<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"/>
</message>
@@ -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>
@@ -5301,10 +5329,6 @@ Forvent nogle fejl og mindre problemer. Denne version er ikke beregnet til produ
<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>
</message>
@@ -5313,58 +5337,22 @@ Forvent nogle fejl og mindre problemer. Denne version er ikke beregnet til produ
<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>
</message>
@@ -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>
diff --git a/share/translations/keepassx_de.ts b/share/translations/keepassx_de.ts
index f35611f9e..6ddaf1da0 100644
--- a/share/translations/keepassx_de.ts
+++ b/share/translations/keepassx_de.ts
@@ -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>
@@ -167,10 +171,6 @@
<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>
</message>
@@ -305,10 +305,6 @@
<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>
</message>
@@ -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>
@@ -5324,10 +5352,6 @@ Rechnen Sie mit Fehlern. Diese Version ist nicht für den Produktiveinsatz gedac
<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>
</message>
@@ -5336,58 +5360,22 @@ Rechnen Sie mit Fehlern. Diese Version ist nicht für den Produktiveinsatz gedac
<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>
</message>
@@ -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>
diff --git a/share/translations/keepassx_en.ts b/share/translations/keepassx_en.ts
index 1fb02eab2..35cb0f686 100644
--- a/share/translations/keepassx_en.ts
+++ b/share/translations/keepassx_en.ts
@@ -1293,14 +1293,6 @@ Please consider generating a new key file.</translation>
<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>
</message>
@@ -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>
@@ -3500,18 +3500,6 @@ Are you sure to add this file?</source>
<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>
</message>
@@ -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>
@@ -5535,10 +5535,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<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>
</message>
@@ -6279,10 +6275,6 @@ Available commands:
<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>
</message>
@@ -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>
@@ -7228,10 +7224,6 @@ Kernel: %3 %4</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>
</message>
diff --git a/share/translations/keepassx_pt.ts b/share/translations/keepassx_en_GB.ts
index b3dce7833..971fa59b3 100644
--- a/share/translations/keepassx_pt.ts
+++ b/share/translations/keepassx_en_GB.ts
@@ -1,214 +1,214 @@
-<?xml version="1.0" ?><!DOCTYPE TS><TS language="pt" version="2.1">
+<?xml version="1.0" ?><!DOCTYPE TS><TS language="en_GB" version="2.1">
<context>
<name>AboutDialog</name>
<message>
<source>About KeePassXC</source>
- <translation>Sobre o KeePassXC</translation>
+ <translation>About KeePassXC</translation>
</message>
<message>
<source>About</source>
- <translation>Sobre</translation>
+ <translation>About</translation>
</message>
<message>
<source>Report bugs at: &lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/issues&quot; style=&quot;text-decoration: underline;&quot;&gt;https://github.com&lt;/a&gt;</source>
- <translation>Reporte os erros em: &lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/issues&quot; style=&quot;text-decoration: underline;&quot;&gt;https://github.com&lt;/a&gt;</translation>
+ <translation>Report bugs at: &lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/issues&quot; style=&quot;text-decoration: underline;&quot;&gt;https://github.com&lt;/a&gt;</translation>
</message>
<message>
<source>KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3.</source>
- <translation>KeePassXC é distribuído sob os termos da GNU General Public License (GPL) versão 2 ou (em sua opção) versão 3.</translation>
+ <translation>KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3.</translation>
</message>
<message>
<source>Contributors</source>
- <translation>Colaboradores</translation>
+ <translation>Contributors</translation>
</message>
<message>
<source>&lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/graphs/contributors&quot;&gt;See Contributions on GitHub&lt;/a&gt;</source>
- <translation>&lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/graphs/contributors&quot;&gt;Consulte os contributos no GitHub&lt;/a&gt;</translation>
+ <translation>&lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/graphs/contributors&quot;&gt;See Contributions on GitHub&lt;/a&gt;</translation>
</message>
<message>
<source>Debug Info</source>
- <translation>Informação de depuração</translation>
+ <translation>Debug Info</translation>
</message>
<message>
<source>Include the following information whenever you report a bug:</source>
- <translation>Inclua as seguintes informações sempre que reportar um erro:</translation>
+ <translation>Include the following information whenever you report a bug:</translation>
</message>
<message>
<source>Copy to clipboard</source>
- <translation>Copiar para a área de transferência</translation>
+ <translation>Copy to clipboard</translation>
</message>
<message>
<source>Project Maintainers:</source>
- <translation>Manutenção do projeto:</translation>
+ <translation>Project Maintainers:</translation>
</message>
<message>
<source>Special thanks from the KeePassXC team go to debfx for creating the original KeePassX.</source>
- <translation>Um agradecimento especial da equipa do KeePassXC a debfx por ter criado a aplicação KeePassX.</translation>
+ <translation>Special thanks from the KeePassXC team go to debfx for creating the original KeePassX.</translation>
</message>
</context>
<context>
<name>AgentSettingsWidget</name>
<message>
<source>Use OpenSSH for Windows instead of Pageant</source>
- <translation>Utilizar OpeSSH for Windows em vez de Pageant</translation>
+ <translation>Use OpenSSH for Windows instead of Pageant</translation>
</message>
<message>
<source>Enable SSH Agent integration</source>
- <translation type="unfinished"/>
+ <translation>Enable SSH Agent integration</translation>
</message>
<message>
<source>SSH_AUTH_SOCK value</source>
- <translation type="unfinished"/>
+ <translation>SSH_AUTH_SOCK value</translation>
</message>
<message>
<source>SSH_AUTH_SOCK override</source>
- <translation type="unfinished"/>
+ <translation>SSH_AUTH_SOCK override</translation>
</message>
<message>
<source>(empty)</source>
- <translation type="unfinished"/>
+ <translation>(empty)</translation>
</message>
<message>
<source>No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override.</source>
- <translation type="unfinished"/>
+ <translation>No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override.</translation>
</message>
<message>
<source>SSH Agent connection is working!</source>
- <translation type="unfinished"/>
+ <translation>SSH Agent connection is working!</translation>
</message>
</context>
<context>
<name>ApplicationSettingsWidget</name>
<message>
<source>Application Settings</source>
- <translation>Definições da aplicação</translation>
+ <translation>Application Settings</translation>
</message>
<message>
<source>General</source>
- <translation>Geral</translation>
+ <translation>General</translation>
</message>
<message>
<source>Security</source>
- <translation>Segurança</translation>
+ <translation>Security</translation>
</message>
<message>
<source>Access error for config file %1</source>
- <translation>Erro de acesso ao ficheiro %1</translation>
+ <translation>Access error for config file %1</translation>
</message>
<message>
<source>Icon only</source>
- <translation>Apenas ícones</translation>
+ <translation>Icon only</translation>
</message>
<message>
<source>Text only</source>
- <translation>Apenas texto</translation>
+ <translation>Text only</translation>
</message>
<message>
<source>Text beside icon</source>
- <translation>Texto ao lado dos ícones</translation>
+ <translation>Text beside icon</translation>
</message>
<message>
<source>Text under icon</source>
- <translation>Texto por baixo dos ícones</translation>
+ <translation>Text under icon</translation>
</message>
<message>
<source>Follow style</source>
- <translation>Seguir estilo</translation>
+ <translation>Follow style</translation>
</message>
<message>
<source>Reset Settings?</source>
- <translation type="unfinished"/>
+ <translation>Reset Settings?</translation>
</message>
<message>
<source>Are you sure you want to reset all general and security settings to default?</source>
- <translation type="unfinished"/>
+ <translation>Are you sure you want to reset all general and security settings to default?</translation>
</message>
<message>
<source>Monochrome (light)</source>
- <translation type="unfinished"/>
+ <translation>Monochrome (light)</translation>
</message>
<message>
<source>Monochrome (dark)</source>
- <translation type="unfinished"/>
+ <translation>Monochrome (dark)</translation>
</message>
<message>
<source>Colorful</source>
- <translation type="unfinished"/>
+ <translation>Colourful</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>
<message>
<source>Basic Settings</source>
- <translation>Definições básicas</translation>
+ <translation>Basic Settings</translation>
</message>
<message>
<source>Startup</source>
- <translation>Arranque</translation>
+ <translation>Startup</translation>
</message>
<message>
<source>Start only a single instance of KeePassXC</source>
- <translation>Abrir apenas uma instância do KeepassXC</translation>
+ <translation>Start only a single instance of KeePassXC</translation>
</message>
<message>
<source>Minimize window at application startup</source>
- <translation>Minimizar janela ao iniciar a aplicação</translation>
+ <translation>Minimise window at application startup</translation>
</message>
<message>
<source>File Management</source>
- <translation>Gestão de ficheiros</translation>
+ <translation>File Management</translation>
</message>
<message>
<source>Backup database file before saving</source>
- <translation>Criar backup da base de dados antes de guardar</translation>
+ <translation>Backup database file before saving</translation>
</message>
<message>
<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>
+ <translation>Automatically save after every change</translation>
</message>
<message>
<source>Automatically reload the database when modified externally</source>
- <translation>Recarregar base de dados se esta for modificada externamente</translation>
+ <translation>Automatically reload the database when modified externally</translation>
</message>
<message>
<source>Entry Management</source>
- <translation>Gestão de entradas</translation>
+ <translation>Entry Management</translation>
</message>
<message>
<source>Use group icon on entry creation</source>
- <translation>Utilizar ícone do grupo ao criar a entrada</translation>
+ <translation>Use group icon on entry creation</translation>
</message>
<message>
<source>Minimize instead of app exit</source>
- <translation>Minimizar aplicação em vez de fechar</translation>
+ <translation>Minimise instead of app exit</translation>
</message>
<message>
<source>Show a system tray icon</source>
- <translation>Mostrar ícone na bandeja do sistema</translation>
+ <translation>Show a system tray icon</translation>
</message>
<message>
<source>Hide window to system tray when minimized</source>
- <translation>Ao minimizar, ocultar a janela na bandeja do sistema</translation>
+ <translation>Hide window to system tray when minimised</translation>
</message>
<message>
<source>Auto-Type</source>
- <translation>Escrita automática</translation>
+ <translation>Auto-Type</translation>
</message>
<message>
<source>Use entry title to match windows for global Auto-Type</source>
- <translation>Utilizar título da entrada para fazer coincidir com a escrita automática</translation>
+ <translation>Use entry title to match windows for global Auto-Type</translation>
</message>
<message>
<source>Use entry URL to match windows for global Auto-Type</source>
- <translation>Utilizar URL da entrada para fazer coincidir com a escrita automática</translation>
+ <translation>Use entry URL to match windows for global Auto-Type</translation>
</message>
<message>
<source>Always ask before performing Auto-Type</source>
- <translation>Perguntar antes de executar a escrita automática</translation>
+ <translation>Always ask before performing Auto-Type</translation>
</message>
<message>
<source> ms</source>
@@ -217,152 +217,160 @@
</message>
<message>
<source>Movable toolbar</source>
- <translation>Barra de ferramentas amovível</translation>
+ <translation>Movable toolbar</translation>
</message>
<message>
<source>Remember previously used databases</source>
- <translation>Lembrar bases de dados usadas anteriormente</translation>
+ <translation>Remember previously used databases</translation>
</message>
<message>
<source>Load previously open databases on startup</source>
- <translation type="unfinished"/>
+ <translation>Load previously open databases on startup</translation>
</message>
<message>
<source>Remember database key files and security dongles</source>
- <translation type="unfinished"/>
+ <translation>Remember database key files and security dongles</translation>
</message>
<message>
<source>Check for updates at application startup once per week</source>
- <translation type="unfinished"/>
+ <translation>Check for updates at application startup once per week</translation>
</message>
<message>
<source>Include beta releases when checking for updates</source>
- <translation type="unfinished"/>
+ <translation>Include beta releases when checking for updates</translation>
</message>
<message>
<source>Language:</source>
- <translation>Idioma:</translation>
+ <translation>Language:</translation>
</message>
<message>
<source>(restart program to activate)</source>
- <translation type="unfinished"/>
+ <translation>(restart program to activate)</translation>
</message>
<message>
<source>Minimize window after unlocking database</source>
- <translation type="unfinished"/>
+ <translation>Minimise window after unlocking database</translation>
</message>
<message>
<source>Minimize when opening a URL</source>
- <translation type="unfinished"/>
+ <translation>Minimise when opening a URL</translation>
</message>
<message>
<source>Hide window when copying to clipboard</source>
- <translation type="unfinished"/>
+ <translation>Hide window when copying to clipboard</translation>
</message>
<message>
<source>Minimize</source>
- <translation>Minimizar</translation>
+ <translation>Minimise</translation>
</message>
<message>
<source>Drop to background</source>
- <translation type="unfinished"/>
+ <translation>Drop to background</translation>
</message>
<message>
<source>Favicon download timeout:</source>
- <translation type="unfinished"/>
+ <translation>Favicon download timeout:</translation>
</message>
<message>
<source>Website icon download timeout in seconds</source>
- <translation type="unfinished"/>
+ <translation>Website icon download timeout in seconds</translation>
</message>
<message>
<source> sec</source>
<comment>Seconds</comment>
- <translation> seg</translation>
+ <translation> sec</translation>
</message>
<message>
<source>Toolbar button style</source>
- <translation type="unfinished"/>
+ <translation>Toolbar button style</translation>
</message>
<message>
<source>Language selection</source>
- <translation>Seleção de idioma</translation>
+ <translation>Language selection</translation>
</message>
<message>
<source>Global auto-type shortcut</source>
- <translation type="unfinished"/>
+ <translation>Global auto-type shortcut</translation>
</message>
<message>
<source>Auto-type character typing delay milliseconds</source>
- <translation type="unfinished"/>
+ <translation>Auto-type character typing delay milliseconds</translation>
</message>
<message>
<source>Auto-type start delay milliseconds</source>
- <translation type="unfinished"/>
+ <translation>Auto-type start delay milliseconds</translation>
</message>
<message>
<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"/>
+ <translation>Automatically launch KeePassXC at system startup</translation>
</message>
<message>
<source>Safely save database files (disable if experiencing problems with Dropbox, etc.)</source>
- <translation type="unfinished"/>
+ <translation>Safely save database files (disable if experiencing problems with Dropbox, etc.)</translation>
</message>
<message>
<source>User Interface</source>
- <translation type="unfinished"/>
+ <translation>User Interface</translation>
</message>
<message>
<source>Toolbar button style:</source>
- <translation type="unfinished"/>
+ <translation>Toolbar button style:</translation>
</message>
<message>
<source>Use monospaced font for notes</source>
- <translation type="unfinished"/>
+ <translation>Use monospaced font for notes</translation>
</message>
<message>
<source>Tray icon type:</source>
- <translation type="unfinished"/>
+ <translation>Tray icon type:</translation>
</message>
<message>
<source>Reset settings to default…</source>
- <translation type="unfinished"/>
+ <translation>Reset settings to default…</translation>
</message>
<message>
<source>Auto-Type typing delay:</source>
- <translation type="unfinished"/>
+ <translation>Auto-Type typing delay:</translation>
</message>
<message>
<source>Global Auto-Type shortcut:</source>
- <translation type="unfinished"/>
+ <translation>Global Auto-Type shortcut:</translation>
</message>
<message>
<source>Auto-Type start delay:</source>
- <translation type="unfinished"/>
+ <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>
<message>
<source>Timeouts</source>
- <translation>Tempo limite</translation>
+ <translation>Timeouts</translation>
</message>
<message>
<source>Clear clipboard after</source>
- <translation>Limpar área de transferência após</translation>
+ <translation>Clear clipboard after</translation>
</message>
<message>
<source> sec</source>
<comment>Seconds</comment>
- <translation> seg</translation>
+ <translation> sec</translation>
</message>
<message>
<source>Lock databases after inactivity of</source>
- <translation>Bloquear base de dados se inativa durante</translation>
+ <translation>Lock databases after inactivity of</translation>
</message>
<message>
<source> min</source>
@@ -370,55 +378,55 @@
</message>
<message>
<source>Forget TouchID after inactivity of</source>
- <translation>Esquecer TouchID após inatividade de</translation>
+ <translation>Forget TouchID after inactivity of</translation>
</message>
<message>
<source>Convenience</source>
- <translation>Conveniência</translation>
+ <translation>Convenience</translation>
</message>
<message>
<source>Lock databases when session is locked or lid is closed</source>
- <translation>Bloquear base de dados ao bloquear a sessão ou ao fechar a tampa do portátil</translation>
+ <translation>Lock databases when session is locked or lid is closed</translation>
</message>
<message>
<source>Forget TouchID when session is locked or lid is closed</source>
- <translation>Esquecer TouchID ao bloquear a sessão ou ao fechar a tampa do portátil</translation>
+ <translation>Forget TouchID when session is locked or lid is closed</translation>
</message>
<message>
<source>Lock databases after minimizing the window</source>
- <translation>Bloquear base de dados ao minimizar a janela</translation>
+ <translation>Lock databases after minimising the window</translation>
</message>
<message>
<source>Re-lock previously locked database after performing Auto-Type</source>
- <translation>Bloquear novamente a base de dados depois de usar a escrita automática</translation>
+ <translation>Re-lock previously locked database after performing Auto-Type</translation>
</message>
<message>
<source>Hide passwords in the entry preview panel</source>
- <translation>Ocultar palavras-passe no painel de pré-visualização de entradas</translation>
+ <translation>Hide passwords in the entry preview panel</translation>
</message>
<message>
<source>Hide entry notes by default</source>
- <translation>Por definição, ocultar notas da entrada</translation>
+ <translation>Hide entry notes by default</translation>
</message>
<message>
<source>Privacy</source>
- <translation>Privacidade</translation>
+ <translation>Privacy</translation>
</message>
<message>
<source>Use DuckDuckGo service to download website icons</source>
- <translation type="unfinished"/>
+ <translation>Use DuckDuckGo service to download website icons</translation>
</message>
<message>
<source>Clipboard clear seconds</source>
- <translation type="unfinished"/>
+ <translation>Clipboard clear seconds</translation>
</message>
<message>
<source>Touch ID inactivity reset</source>
- <translation type="unfinished"/>
+ <translation>Touch ID inactivity reset</translation>
</message>
<message>
<source>Database lock timeout seconds</source>
- <translation type="unfinished"/>
+ <translation>Database lock timeout seconds</translation>
</message>
<message>
<source> min</source>
@@ -427,272 +435,272 @@
</message>
<message>
<source>Clear search query after</source>
- <translation type="unfinished"/>
+ <translation>Clear search query after</translation>
</message>
<message>
<source>Require password repeat when it is visible</source>
- <translation type="unfinished"/>
+ <translation>Require password repeat when it is visible</translation>
</message>
<message>
<source>Hide passwords when editing them</source>
- <translation type="unfinished"/>
+ <translation>Hide passwords when editing them</translation>
</message>
<message>
<source>Use placeholder for empty password fields</source>
- <translation type="unfinished"/>
+ <translation>Use placeholder for empty password fields</translation>
</message>
</context>
<context>
<name>AutoType</name>
<message>
<source>Couldn&apos;t find an entry that matches the window title:</source>
- <translation>Não foi encontrada uma entrada coincidente com o título da janela:</translation>
+ <translation>Couldn&apos;t find an entry that matches the window title:</translation>
</message>
<message>
<source>Auto-Type - KeePassXC</source>
- <translation>KeePassXC - Escrita automática</translation>
+ <translation>Auto-Type - KeePassXC</translation>
</message>
<message>
<source>Auto-Type</source>
- <translation>Escrita automática</translation>
+ <translation>Auto-Type</translation>
</message>
<message>
<source>The Syntax of your Auto-Type statement is incorrect!</source>
- <translation>A sintaxe da instrução de escrita automática está errada!</translation>
+ <translation>The Syntax of your Auto-Type statement is incorrect!</translation>
</message>
<message>
<source>This Auto-Type command contains a very long delay. Do you really want to proceed?</source>
- <translation>O comando de escrita automática tem um atraso muito grande. Deseja mesmo continuar?</translation>
+ <translation>This Auto-Type command contains a very long delay. Do you really want to proceed?</translation>
</message>
<message>
<source>This Auto-Type command contains very slow key presses. Do you really want to proceed?</source>
- <translation>O comando de escrita automática tem uma pressão de teclas muito lenta. Deseja mesmo continuar?</translation>
+ <translation>This Auto-Type command contains very slow key presses. Do you really want to proceed?</translation>
</message>
<message>
<source>This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed?</source>
- <translation>O comando de escrita automática contém argumentos que se repetem muitas vezes. Deseja mesmo continuar?</translation>
+ <translation>This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed?</translation>
</message>
<message>
<source>Permission Required</source>
- <translation type="unfinished"/>
+ <translation>Permission Required</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>
- <translation type="unfinished"/>
+ <translation>KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC.</translation>
</message>
</context>
<context>
<name>AutoTypeAssociationsModel</name>
<message>
<source>Window</source>
- <translation>Janela</translation>
+ <translation>Window</translation>
</message>
<message>
<source>Sequence</source>
- <translation>Sequência</translation>
+ <translation>Sequence</translation>
</message>
<message>
<source>Default sequence</source>
- <translation>Sequência padrão</translation>
+ <translation>Default sequence</translation>
</message>
</context>
<context>
<name>AutoTypeMatchModel</name>
<message>
<source>Group</source>
- <translation>Grupo</translation>
+ <translation>Group</translation>
</message>
<message>
<source>Title</source>
- <translation>Título</translation>
+ <translation>Title</translation>
</message>
<message>
<source>Username</source>
- <translation>Nome de utilizador</translation>
+ <translation>Username</translation>
</message>
<message>
<source>Sequence</source>
- <translation>Sequência</translation>
+ <translation>Sequence</translation>
</message>
</context>
<context>
<name>AutoTypeMatchView</name>
<message>
<source>Copy &amp;username</source>
- <translation>Copiar nome de &amp;utilizador</translation>
+ <translation>Copy &amp;username</translation>
</message>
<message>
<source>Copy &amp;password</source>
- <translation>Copiar &amp;palavra-passe</translation>
+ <translation>Copy &amp;password</translation>
</message>
</context>
<context>
<name>AutoTypePlatformMac</name>
<message>
<source>Permission Required</source>
- <translation type="unfinished"/>
+ <translation>Permission Required</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>
- <translation type="unfinished"/>
+ <translation>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.</translation>
</message>
</context>
<context>
<name>AutoTypeSelectDialog</name>
<message>
<source>Auto-Type - KeePassXC</source>
- <translation>KeePassXC - Escrita automática</translation>
+ <translation>Auto-Type - KeePassXC</translation>
</message>
<message>
<source>Select entry to Auto-Type:</source>
- <translation>Selecionar entrada para escrita automática:</translation>
+ <translation>Select entry to Auto-Type:</translation>
</message>
<message>
<source>Search...</source>
- <translation>Pesquisa...</translation>
+ <translation>Search...</translation>
</message>
</context>
<context>
<name>BrowserAccessControlDialog</name>
<message>
<source>KeePassXC - Browser Access Request</source>
- <translation type="unfinished"/>
+ <translation>KeePassXC - Browser Access Request</translation>
</message>
<message>
<source>%1 is requesting access to the following entries:</source>
- <translation type="unfinished"/>
+ <translation>%1 is requesting access to the following entries:</translation>
</message>
<message>
<source>Remember access to checked entries</source>
- <translation type="unfinished"/>
+ <translation>Remember access to checked entries</translation>
</message>
<message>
<source>Remember</source>
- <translation type="unfinished"/>
+ <translation>Remember</translation>
</message>
<message>
<source>Allow access to entries</source>
- <translation type="unfinished"/>
+ <translation>Allow access to entries</translation>
</message>
<message>
<source>Allow Selected</source>
- <translation type="unfinished"/>
+ <translation>Allow Selected</translation>
</message>
<message>
<source>Deny All</source>
- <translation type="unfinished"/>
+ <translation>Deny All</translation>
</message>
<message>
<source>Disable for this site</source>
- <translation type="unfinished"/>
+ <translation>Disable for this site</translation>
</message>
</context>
<context>
<name>BrowserEntrySaveDialog</name>
<message>
<source>KeePassXC-Browser Save Entry</source>
- <translation>KeePassXC-Browser - Guardar entrada</translation>
+ <translation>KeePassXC-Browser Save Entry</translation>
</message>
<message>
<source>Ok</source>
- <translation>Aceitar</translation>
+ <translation>Ok</translation>
</message>
<message>
<source>Cancel</source>
- <translation>Cancelar</translation>
+ <translation>Cancel</translation>
</message>
<message>
<source>You have multiple databases open.
Please select the correct database for saving credentials.</source>
- <translation>Existem várias bases de dados abertas.
-Selecione a base de dados correta para guardar as credenciais.</translation>
+ <translation>You have multiple databases open.
+Please select the correct database for saving credentials.</translation>
</message>
</context>
<context>
<name>BrowserService</name>
<message>
<source>KeePassXC: New key association request</source>
- <translation>KeePassXC: Pedido de associação da nova chave</translation>
+ <translation>KeePassXC: New key association request</translation>
</message>
<message>
<source>Save and allow access</source>
- <translation>Guardar e permitir acesso</translation>
+ <translation>Save and allow access</translation>
</message>
<message>
<source>KeePassXC: Overwrite existing key?</source>
- <translation>KeePassXC: Substituir chave existente?</translation>
+ <translation>KeePassXC: Overwrite existing key?</translation>
</message>
<message>
<source>A shared encryption key with the name &quot;%1&quot; already exists.
Do you want to overwrite it?</source>
- <translation>Já existe uma chave de cifra partilhada com o nome &quot;%1&quot;.
-Deseja substituir a chave existente?</translation>
+ <translation>A shared encryption key with the name &quot;%1&quot; already exists.
+Do you want to overwrite it?</translation>
</message>
<message>
<source>KeePassXC: Update Entry</source>
- <translation>KeePassXC: Atualizar entrada</translation>
+ <translation>KeePassXC: Update Entry</translation>
</message>
<message>
<source>Do you want to update the information in %1 - %2?</source>
- <translation>Deseja atualizar as informações em %1 - %2?</translation>
+ <translation>Do you want to update the information in %1 - %2?</translation>
</message>
<message>
<source>Abort</source>
- <translation>Abortar</translation>
+ <translation>Abort</translation>
</message>
<message>
<source>Converting attributes to custom data…</source>
- <translation>A converter atributos para dados personalizados...</translation>
+ <translation>Converting attributes to custom data…</translation>
</message>
<message>
<source>KeePassXC: Converted KeePassHTTP attributes</source>
- <translation>KeePassXC: Atributos KeePassHTTP convertidos</translation>
+ <translation>KeePassXC: Converted KeePassHTTP attributes</translation>
</message>
<message>
<source>Successfully converted attributes from %1 entry(s).
Moved %2 keys to custom data.</source>
- <translation>Os atributos para %1 entrada(s) foram convertidos.
-%2 chaves movidas para dados personalizados.</translation>
+ <translation>Successfully converted attributes from %1 entry(s).
+Moved %2 keys to custom data.</translation>
</message>
<message numerus="yes">
<source>Successfully moved %n keys to custom data.</source>
- <translation><numerusform>%n chave movida para dados personalizados.</numerusform><numerusform>%n chaves movidas para dados personalizados.</numerusform></translation>
+ <translation><numerusform>Successfully moved %n key to custom data.</numerusform><numerusform>Successfully moved %n keys to custom data.</numerusform></translation>
</message>
<message>
<source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
- <translation>KeePassXC: Não existem entradas com atributos KeePassHTTP!</translation>
+ <translation>KeePassXC: No entry with KeePassHTTP attributes found!</translation>
</message>
<message>
<source>The active database does not contain an entry with KeePassHTTP attributes.</source>
- <translation>A base de dados ativa não tem entradas com atributos KePassHTTP.</translation>
+ <translation>The active database does not contain an entry with KeePassHTTP attributes.</translation>
</message>
<message>
<source>KeePassXC: Legacy browser integration settings detected</source>
- <translation>KeePassXC: Detetadas definições de integração legada com o navegador</translation>
+ <translation>KeePassXC: Legacy browser integration settings detected</translation>
</message>
<message>
<source>KeePassXC: Create a new group</source>
- <translation>KeePassXC: criar um novo grupo</translation>
+ <translation>KeePassXC: Create a new group</translation>
</message>
<message>
<source>A request for creating a new group &quot;%1&quot; has been received.
Do you want to create this group?
</source>
- <translation>Foi recebido um pedido para a criação do grupo &quot;%1&quot;.
-Quer criar este grupo?
+ <translation>A request for creating a new group &quot;%1&quot; has been received.
+Do you want to create this group?
</translation>
</message>
<message>
<source>Your KeePassXC-Browser settings need to be moved into the database settings.
This is necessary to maintain your current browser connections.
Would you like to migrate your existing settings now?</source>
- <translation>Tem que mover as suas definições do KeePassXC-Browser para as definições da base de dados.
-Este procedimento é necessário para manter as ligações existentes.
-Quer migrar as definições agora?</translation>
+ <translation>Your KeePassXC-Browser settings need to be moved into the database settings.
+This is necessary to maintain your current browser connections.
+Would you like to migrate your existing settings now?</translation>
</message>
<message>
<source>Don&apos;t show this warning again</source>
- <translation>Não mostrar novamente</translation>
+ <translation>Don&apos;t show this warning again</translation>
</message>
<message>
<source>You have received an association request for the following database:
@@ -700,87 +708,91 @@ Quer migrar as definições agora?</translation>
Give the connection a unique name or ID, for example:
chrome-laptop.</source>
- <translation type="unfinished"/>
+ <translation>You have received an association request for the following database:
+%1
+
+Give the connection a unique name or ID, for example:
+chrome-laptop.</translation>
</message>
</context>
<context>
<name>BrowserSettingsWidget</name>
<message>
<source>Dialog</source>
- <translation>Diálogo</translation>
+ <translation>Dialog</translation>
</message>
<message>
<source>This is required for accessing your databases with KeePassXC-Browser</source>
- <translation>Isto é necessário para aceder às suas bases de dados com KeePassXC-Browser</translation>
+ <translation>This is required for accessing your databases with KeePassXC-Browser</translation>
</message>
<message>
<source>Enable browser integration</source>
- <translation type="unfinished"/>
+ <translation>Enable browser integration</translation>
</message>
<message>
<source>General</source>
- <translation>Geral</translation>
+ <translation>General</translation>
</message>
<message>
<source>Browsers installed as snaps are currently not supported.</source>
- <translation type="unfinished"/>
+ <translation>Browsers installed as snaps are currently not supported.</translation>
</message>
<message>
<source>Enable integration for these browsers:</source>
- <translation>Ativar integração para estes navegadores:</translation>
+ <translation>Enable integration for these browsers:</translation>
</message>
<message>
<source>Vivaldi</source>
- <translation type="unfinished"/>
+ <translation>Vivaldi</translation>
</message>
<message>
<source>&amp;Edge</source>
- <translation type="unfinished"/>
+ <translation>&amp;Edge</translation>
</message>
<message>
<source>Firefox</source>
- <translation type="unfinished"/>
+ <translation>Firefox</translation>
</message>
<message>
<source>Tor Browser</source>
- <translation type="unfinished"/>
+ <translation>Tor Browser</translation>
</message>
<message>
<source>Brave</source>
- <translation type="unfinished"/>
+ <translation>Brave</translation>
</message>
<message>
<source>Google Chrome</source>
- <translation type="unfinished"/>
+ <translation>Google Chrome</translation>
</message>
<message>
<source>Chromium</source>
- <translation type="unfinished"/>
+ <translation>Chromium</translation>
</message>
<message>
<source>Show a notification when credentials are requested</source>
<extracomment>Credentials mean login data requested via browser extension</extracomment>
- <translation type="unfinished"/>
+ <translation>Show a notification when credentials are requested</translation>
</message>
<message>
<source>Request to unlock the database if it is locked</source>
- <translation type="unfinished"/>
+ <translation>Request to unlock the database if it is locked</translation>
</message>
<message>
<source>Only entries with the same scheme (http://, https://, ...) are returned.</source>
- <translation>Apenas serão devolvidas as entradas com o mesmo esquema (http://, https://, ...).</translation>
+ <translation>Only entries with the same scheme (http://, https://, ...) are returned.</translation>
</message>
<message>
<source>Match URL scheme (e.g., https://...)</source>
- <translation type="unfinished"/>
+ <translation>Match URL scheme (e.g., https://...)</translation>
</message>
<message>
<source>Only returns the best matches for a specific URL instead of all entries for the whole domain.</source>
- <translation>Apenas devolve as melhores entradas para o URL específico em vez das entradas para o domínio.</translation>
+ <translation>Only returns the best matches for a specific URL instead of all entries for the whole domain.</translation>
</message>
<message>
<source>Return only best-matching credentials</source>
- <translation type="unfinished"/>
+ <translation>Return only best-matching credentials</translation>
</message>
<message>
<source>Returns expired credentials. String [expired] is added to the title.</source>
@@ -811,7 +823,7 @@ chrome-laptop.</source>
</message>
<message>
<source>Advanced</source>
- <translation>Avançado</translation>
+ <translation>Advanced</translation>
</message>
<message>
<source>Never ask before accessing credentials</source>
@@ -826,11 +838,11 @@ chrome-laptop.</source>
<message>
<source>Do not ask permission for HTTP Basic Auth</source>
<extracomment>An extra HTTP Basic Auth setting</extracomment>
- <translation type="unfinished"/>
+ <translation>Do not ask permission for HTTP Basic Auth</translation>
</message>
<message>
<source>Automatically creating or updating string fields is not supported.</source>
- <translation>A criação ou atualização dos campos de cadeias não é suportada.</translation>
+ <translation>Automatically creating or updating string fields is not supported.</translation>
</message>
<message>
<source>Return advanced string fields which start with &quot;KPH: &quot;</source>
@@ -846,7 +858,7 @@ chrome-laptop.</source>
</message>
<message>
<source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
- <translation>Atualiza automaticamente o caminho do KeePassXC ou do caminho do binário keepassxc-proxy para os &apos;sripts&apos; nativos de mensagens ao iniciar.</translation>
+ <translation>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</translation>
</message>
<message>
<source>Update native messaging manifest files at startup</source>
@@ -854,7 +866,7 @@ chrome-laptop.</source>
</message>
<message>
<source>Use a custom proxy location if you installed a proxy manually.</source>
- <translation>Utilize um proxy personalizado caso o tenha instalado manualmente.</translation>
+ <translation>Use a custom proxy location if you installed a proxy manually.</translation>
</message>
<message>
<source>Use a custom proxy location:</source>
@@ -872,7 +884,7 @@ chrome-laptop.</source>
<message>
<source>Browse...</source>
<extracomment>Button for opening file dialog</extracomment>
- <translation>Procurar...</translation>
+ <translation>Browse...</translation>
</message>
<message>
<source>Use a custom browser configuration location:</source>
@@ -884,7 +896,7 @@ chrome-laptop.</source>
</message>
<message>
<source>Toolbar button style</source>
- <translation type="unfinished"/>
+ <translation>Toolbar button style</translation>
</message>
<message>
<source>Config Location:</source>
@@ -896,7 +908,7 @@ chrome-laptop.</source>
</message>
<message>
<source>~/.custom/config/Mozilla/native-messaging-hosts/</source>
- <translation type="unfinished"/>
+ <translation>~/.custom/config/Mozilla/native-messaging-hosts/</translation>
</message>
<message>
<source>Browse for custom browser path</source>
@@ -912,7 +924,7 @@ chrome-laptop.</source>
</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>
- <translation>Devido a &apos;Snap sandboxing&apos;, tem que executar um script para ativar a integração com o navegador.&lt;br /&gt;Pode obter este script em %1.</translation>
+ <translation>Due to Snap sandboxing, you must run a script to enable browser integration.&lt;br /&gt;You can obtain this script from %1</translation>
</message>
<message>
<source>KeePassXC-Browser is needed for the browser integration to work. &lt;br /&gt;Download it for %1 and %2 and %3. %4</source>
@@ -920,7 +932,7 @@ chrome-laptop.</source>
</message>
<message>
<source>Please see special instructions for browser extension use below</source>
- <translation>Por favor consulte as instruções para a utilização da extensão abaixo</translation>
+ <translation>Please see special instructions for browser extension use below</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>
@@ -928,19 +940,19 @@ chrome-laptop.</source>
</message>
<message>
<source>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</source>
- <translation>&lt;b&gt;AVISO&lt;/b&gt;: as opções seguintes podem ser perigosas!</translation>
+ <translation>&lt;b&gt;Warning:&lt;/b&gt; The following options can be dangerous!</translation>
</message>
<message>
<source>Executable Files</source>
- <translation>Ficheiros executáveis</translation>
+ <translation>Executable Files</translation>
</message>
<message>
<source>All Files</source>
- <translation>Todos os ficheiros</translation>
+ <translation>All Files</translation>
</message>
<message>
<source>Select custom proxy location</source>
- <translation>Selecionar localização do proxy personalizado</translation>
+ <translation>Select custom proxy location</translation>
</message>
<message>
<source>Select native messaging host folder location</source>
@@ -951,87 +963,87 @@ chrome-laptop.</source>
<name>CloneDialog</name>
<message>
<source>Clone Options</source>
- <translation>Opções de clonagem</translation>
+ <translation>Clone Options</translation>
</message>
<message>
<source>Append &apos; - Clone&apos; to title</source>
- <translation>Adicionar &apos; -Clone&apos; ao título</translation>
+ <translation>Append &apos; - Clone&apos; to title</translation>
</message>
<message>
<source>Replace username and password with references</source>
- <translation>Substituir nome de utilizador e palavra-passe por referências</translation>
+ <translation>Replace username and password with references</translation>
</message>
<message>
<source>Copy history</source>
- <translation>Histórico de cópias</translation>
+ <translation>Copy history</translation>
</message>
</context>
<context>
<name>CsvImportWidget</name>
<message>
<source>Import CSV fields</source>
- <translation>Importar campos do CSV</translation>
+ <translation>Import CSV fields</translation>
</message>
<message>
<source>filename</source>
- <translation>nome do ficheiro</translation>
+ <translation>filename</translation>
</message>
<message>
<source>size, rows, columns</source>
- <translation>tamanho, linhas, colunas</translation>
+ <translation>size, rows, columns</translation>
</message>
<message>
<source>Encoding</source>
- <translation>Codificação</translation>
+ <translation>Encoding</translation>
</message>
<message>
<source>Codec</source>
- <translation>Codificador</translation>
+ <translation>Codec</translation>
</message>
<message>
<source>Text is qualified by</source>
- <translation>Texto qualificado por</translation>
+ <translation>Text is qualified by</translation>
</message>
<message>
<source>Fields are separated by</source>
- <translation>Campos separados por</translation>
+ <translation>Fields are separated by</translation>
</message>
<message>
<source>Comments start with</source>
- <translation>Comentários iniciados por</translation>
+ <translation>Comments start with</translation>
</message>
<message>
<source>Consider &apos;\&apos; an escape character</source>
- <translation>Considerar &apos;\&apos; como carácter de escape</translation>
+ <translation>Consider &apos;\&apos; an escape character</translation>
</message>
<message>
<source>Preview</source>
- <translation>Antevisão</translation>
+ <translation>Preview</translation>
</message>
<message>
<source>Imported from CSV file</source>
- <translation>Importar de ficheiro CSV</translation>
+ <translation>Imported from CSV file</translation>
</message>
<message>
<source>Original data: </source>
- <translation>Dados originais: </translation>
+ <translation>Original data: </translation>
</message>
<message>
<source>Error</source>
- <translation>Erro</translation>
+ <translation>Error</translation>
</message>
<message>
<source>Error(s) detected in CSV file!</source>
- <translation>Detetado(s) erro(s) no ficheiro CSV!</translation>
+ <translation>Error(s) detected in CSV file!</translation>
</message>
<message numerus="yes">
<source>[%n more message(s) skipped]</source>
- <translation><numerusform>[%n mensagem ignorada]</numerusform><numerusform>[%n mensagens ignoradas]</numerusform></translation>
+ <translation><numerusform>[%n more message skipped]</numerusform><numerusform>[%n more messages skipped]</numerusform></translation>
</message>
<message>
<source>CSV import: writer has errors:
%1</source>
- <translation>Importação CSV com erros:
+ <translation>CSV import: writer has errors:
%1</translation>
</message>
<message>
@@ -1056,27 +1068,27 @@ chrome-laptop.</source>
</message>
<message>
<source>Last Modified</source>
- <translation>Última modificação</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Password</source>
- <translation>Palavra-passe</translation>
+ <translation>Password</translation>
</message>
<message>
<source>Created</source>
- <translation>Criada</translation>
+ <translation>Created</translation>
</message>
<message>
<source>Notes</source>
- <translation>Notas</translation>
+ <translation>Notes</translation>
</message>
<message>
<source>Title</source>
- <translation>Título</translation>
+ <translation>Title</translation>
</message>
<message>
<source>Group</source>
- <translation>Grupo</translation>
+ <translation>Group</translation>
</message>
<message>
<source>URL</source>
@@ -1084,7 +1096,7 @@ chrome-laptop.</source>
</message>
<message>
<source>Username</source>
- <translation>Nome de utilizador</translation>
+ <translation>Username</translation>
</message>
<message>
<source>Header lines skipped</source>
@@ -1107,7 +1119,7 @@ chrome-laptop.</source>
<name>CsvParserModel</name>
<message numerus="yes">
<source>%n column(s)</source>
- <translation><numerusform>%n coluna,</numerusform><numerusform>%n coluna(s),</numerusform></translation>
+ <translation><numerusform>%n column</numerusform><numerusform>%n columns</numerusform></translation>
</message>
<message>
<source>%1, %2, %3</source>
@@ -1120,30 +1132,30 @@ chrome-laptop.</source>
</message>
<message numerus="yes">
<source>%n row(s)</source>
- <translation><numerusform>%n linha</numerusform><numerusform>%n linhas</numerusform></translation>
+ <translation><numerusform>%n row</numerusform><numerusform>%n rows</numerusform></translation>
</message>
</context>
<context>
<name>Database</name>
<message>
<source>File %1 does not exist.</source>
- <translation>%1 não existe.</translation>
+ <translation>File %1 does not exist.</translation>
</message>
<message>
<source>Unable to open file %1.</source>
- <translation>Não foi possível abrir o ficheiro %1.</translation>
+ <translation>Unable to open file %1.</translation>
</message>
<message>
<source>Error while reading the database: %1</source>
- <translation>Erro ao ler a base de dados: %1</translation>
+ <translation>Error while reading the database: %1</translation>
</message>
<message>
<source>File cannot be written as it is opened in read-only mode.</source>
- <translation>Não é possível escrever no ficheiro porque este foi aberto no modo de leitura.</translation>
+ <translation>File cannot be written as it is opened in read-only mode.</translation>
</message>
<message>
<source>Key not transformed. This is a bug, please report it to the developers!</source>
- <translation>Chave não transformada. Isto é um erro e deve ser reportado aos programadores!</translation>
+ <translation>Key not transformed. This is a bug, please report it to the developers!</translation>
</message>
<message>
<source>%1
@@ -1164,12 +1176,12 @@ Backup database located at %2</source>
</message>
<message>
<source>Recycle Bin</source>
- <translation>Reciclagem</translation>
+ <translation>Recycle Bin</translation>
</message>
<message>
<source>Passwords</source>
<comment>Root group name</comment>
- <translation>Palavras-passe</translation>
+ <translation>Passwords</translation>
</message>
<message>
<source>Database save is already in progress.</source>
@@ -1177,55 +1189,55 @@ Backup database located at %2</source>
</message>
<message>
<source>Could not save, database has not been initialized!</source>
- <translation type="unfinished"/>
+ <translation>Could not save, database has not been initialised!</translation>
</message>
</context>
<context>
<name>DatabaseOpenDialog</name>
<message>
<source>Unlock Database - KeePassXC</source>
- <translation>KeePassXC - Desbloquear base de dados</translation>
+ <translation>Unlock Database - KeePassXC</translation>
</message>
</context>
<context>
<name>DatabaseOpenWidget</name>
<message>
<source>Key File:</source>
- <translation>Ficheiro-chave:</translation>
+ <translation>Key File:</translation>
</message>
<message>
<source>Refresh</source>
- <translation>Recarregar</translation>
+ <translation>Refresh</translation>
</message>
<message>
<source>Legacy key file format</source>
- <translation>Ficheiro-chave no formato legado</translation>
+ <translation>Legacy key file format</translation>
</message>
<message>
<source>You are using a legacy key file format which may become
unsupported in the future.
Please consider generating a new key file.</source>
- <translation>Está a utilizar um formato legado que pode, no futuro, deixar
-de ser suportado.
+ <translation>You are using a legacy key file format which may become
+unsupported in the future.
-Deve considerar a geração de um novo ficheiro-chave.</translation>
+Please consider generating a new key file.</translation>
</message>
<message>
<source>Don&apos;t show this warning again</source>
- <translation>Não mostrar novamente</translation>
+ <translation>Don&apos;t show this warning again</translation>
</message>
<message>
<source>All files</source>
- <translation>Todos os ficheiros</translation>
+ <translation>All files</translation>
</message>
<message>
<source>Key files</source>
- <translation>Ficheiros-chave</translation>
+ <translation>Key files</translation>
</message>
<message>
<source>Select key file</source>
- <translation>Selecione o ficheiro-chave</translation>
+ <translation>Select key file</translation>
</message>
<message>
<source>Failed to open key file: %1</source>
@@ -1253,7 +1265,7 @@ Deve considerar a geração de um novo ficheiro-chave.</translation>
</message>
<message>
<source>Browse...</source>
- <translation>Procurar...</translation>
+ <translation>Browse...</translation>
</message>
<message>
<source>Refresh hardware tokens</source>
@@ -1273,7 +1285,7 @@ Deve considerar a geração de um novo ficheiro-chave.</translation>
</message>
<message>
<source>Clear</source>
- <translation>Limpar</translation>
+ <translation>Clear</translation>
</message>
<message>
<source>Clear Key File</source>
@@ -1330,7 +1342,7 @@ If you do not have a key file, please leave the field empty.</source>
</message>
<message>
<source>Please touch the button on your YubiKey!</source>
- <translation>Toque no botão da sua YubiKey!</translation>
+ <translation>Please touch the button on your YubiKey!</translation>
</message>
<message>
<source>Detecting hardware keys…</source>
@@ -1349,30 +1361,30 @@ If you do not have a key file, please leave the field empty.</source>
<name>DatabaseSettingWidgetMetaData</name>
<message>
<source>Passwords</source>
- <translation>Palavras-passe</translation>
+ <translation>Passwords</translation>
</message>
</context>
<context>
<name>DatabaseSettingsDialog</name>
<message>
<source>Advanced Settings</source>
- <translation>Definições avançadas</translation>
+ <translation>Advanced Settings</translation>
</message>
<message>
<source>General</source>
- <translation>Geral</translation>
+ <translation>General</translation>
</message>
<message>
<source>Security</source>
- <translation>Segurança</translation>
+ <translation>Security</translation>
</message>
<message>
<source>Encryption Settings</source>
- <translation>Definições de cifra</translation>
+ <translation>Encryption Settings</translation>
</message>
<message>
<source>Browser Integration</source>
- <translation>Integração com navegador</translation>
+ <translation>Browser Integration</translation>
</message>
<message>
<source>Database Credentials</source>
@@ -1383,107 +1395,107 @@ If you do not have a key file, please leave the field empty.</source>
<name>DatabaseSettingsWidgetBrowser</name>
<message>
<source>KeePassXC-Browser settings</source>
- <translation>Definições KeePassXC-Browser</translation>
+ <translation>KeePassXC-Browser settings</translation>
</message>
<message>
<source>Stored keys</source>
- <translation>Chaves guardadas</translation>
+ <translation>Stored keys</translation>
</message>
<message>
<source>Remove</source>
- <translation>Remover</translation>
+ <translation>Remove</translation>
</message>
<message>
<source>Delete the selected key?</source>
- <translation>Eliminar a chave selecionada?</translation>
+ <translation>Delete the selected key?</translation>
</message>
<message>
<source>Do you really want to delete the selected key?
This may prevent connection to the browser plugin.</source>
- <translation>Tem a certeza de que deseja eliminar a chave selecionada?
-Esta ação pode impedir a ligação ao suplemento do navegador.</translation>
+ <translation>Do you really want to delete the selected key?
+This may prevent connection to the browser plugin.</translation>
</message>
<message>
<source>Key</source>
- <translation>Chave</translation>
+ <translation>Key</translation>
</message>
<message>
<source>Value</source>
- <translation>Valor</translation>
+ <translation>Value</translation>
</message>
<message>
<source>Enable Browser Integration to access these settings.</source>
- <translation>Ative a integração com o navegador para aceder a estas definições.</translation>
+ <translation>Enable Browser Integration to access these settings.</translation>
</message>
<message>
<source>Disconnect all browsers</source>
- <translation>Desconectar de todos os navegadores</translation>
+ <translation>Disconnect all browsers</translation>
</message>
<message>
<source>Do you really want to disconnect all browsers?
This may prevent connection to the browser plugin.</source>
- <translation>Tem a certeza de que deseja desconectar todos os navegadores?
-Esta ação pode interferir com a ligação ao suplemento.</translation>
+ <translation>Do you really want to disconnect all browsers?
+This may prevent connection to the browser plugin.</translation>
</message>
<message>
<source>KeePassXC: No keys found</source>
- <translation>KeePassXC: Nenhuma chave encontrada</translation>
+ <translation>KeePassXC: No keys found</translation>
</message>
<message>
<source>No shared encryption keys found in KeePassXC settings.</source>
- <translation>Não foram encontradas chaves de cifra nas definições do KeePassXC.</translation>
+ <translation>No shared encryption keys found in KeePassXC settings.</translation>
</message>
<message>
<source>KeePassXC: Removed keys from database</source>
- <translation>KeePassXC: Chaves removidas da base de dados</translation>
+ <translation>KeePassXC: Removed keys from database</translation>
</message>
<message numerus="yes">
<source>Successfully removed %n encryption key(s) from KeePassXC settings.</source>
- <translation><numerusform>Removida com sucesso %n chave de cifra das definições do KeePassXC.</numerusform><numerusform>Removidas com sucesso %n chaves de cifra das definições do KeePassXC.</numerusform></translation>
+ <translation><numerusform>Successfully removed %n encryption key from KeePassXC settings.</numerusform><numerusform>Successfully removed %n encryption keys from KeePassXC settings.</numerusform></translation>
</message>
<message>
<source>Forget all site-specific settings on entries</source>
- <translation>Esquecer definições específicas dos sites (nas entradas)</translation>
+ <translation>Forget all site-specific settings on entries</translation>
</message>
<message>
<source>Do you really want forget all site-specific settings on every entry?
Permissions to access entries will be revoked.</source>
- <translation>Tem a certeza de que deseja esquecer as definições específicas de todas as entradas?
-Serão removidas todas as permissões para aceder às entradas.</translation>
+ <translation>Do you really want forget all site-specific settings on every entry?
+Permissions to access entries will be revoked.</translation>
</message>
<message>
<source>Removing stored permissions…</source>
- <translation>A remover permissões guardadas...</translation>
+ <translation>Removing stored permissions…</translation>
</message>
<message>
<source>Abort</source>
- <translation>Abortar</translation>
+ <translation>Abort</translation>
</message>
<message>
<source>KeePassXC: Removed permissions</source>
- <translation>KeePassXC: Permissões removidas</translation>
+ <translation>KeePassXC: Removed permissions</translation>
</message>
<message numerus="yes">
<source>Successfully removed permissions from %n entry(s).</source>
- <translation><numerusform>Removidas com sucesso as permissões de %n entrada.</numerusform><numerusform>Removidas com sucesso as permissões de %n entradas.</numerusform></translation>
+ <translation><numerusform>Successfully removed permissions from %n entry.</numerusform><numerusform>Successfully removed permissions from %n entries.</numerusform></translation>
</message>
<message>
<source>KeePassXC: No entry with permissions found!</source>
- <translation>KeePassXC: Não existem entradas com permissões!</translation>
+ <translation>KeePassXC: No entry with permissions found!</translation>
</message>
<message>
<source>The active database does not contain an entry with permissions.</source>
- <translation>A base de dados ativa não contém uma entrada com permissões.</translation>
+ <translation>The active database does not contain an entry with permissions.</translation>
</message>
<message>
<source>Move KeePassHTTP attributes to custom data</source>
- <translation>Mover atributos KeePassHTTP para dados personalizados</translation>
+ <translation>Move KeePassHTTP attributes to custom data</translation>
</message>
<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>Tem a certeza de que deseja atualizar todos os dados legados para a versão mais recente?
-Esta atualização é necessária para manter a compatibilidade com o suplemento.</translation>
+ <translation>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.</translation>
</message>
<message>
<source>Stored browser keys</source>
@@ -1503,7 +1515,7 @@ Esta atualização é necessária para manter a compatibilidade com o suplemento
</message>
<message>
<source>Created</source>
- <translation>Criada</translation>
+ <translation>Created</translation>
</message>
<message>
<source>Refresh database ID</source>
@@ -1519,19 +1531,19 @@ This is only necessary if your database is a copy of another and the browser ext
<name>DatabaseSettingsWidgetDatabaseKey</name>
<message>
<source>Add additional protection...</source>
- <translation>Adicionar proteção extra...</translation>
+ <translation>Add additional protection...</translation>
</message>
<message>
<source>No password set</source>
- <translation>Palavra-passe não definida</translation>
+ <translation>No password set</translation>
</message>
<message>
<source>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
Are you sure you want to continue without a password?</source>
- <translation>AVISO! Não definiu uma palavra-passe. Não deve utilizar uma base de dados que não tenha uma palavra-passe definida!
+ <translation>WARNING! You have not set a password. Using a database without a password is strongly discouraged!
-Tem a certeza de que deseja continuar?</translation>
+Are you sure you want to continue without a password?</translation>
</message>
<message>
<source>Continue without password</source>
@@ -1539,15 +1551,15 @@ Tem a certeza de que deseja continuar?</translation>
</message>
<message>
<source>No encryption key added</source>
- <translation>Chave de cifra não adicionada</translation>
+ <translation>No encryption key added</translation>
</message>
<message>
<source>You must add at least one encryption key to secure your database!</source>
- <translation>Tem que adicionar, pelo menos, uma chave de cifra para proteger a sua base de dados!</translation>
+ <translation>You must add at least one encryption key to secure your database!</translation>
</message>
<message>
<source>Unknown error</source>
- <translation>Erro desconhecido</translation>
+ <translation>Unknown error</translation>
</message>
<message>
<source>Failed to change database credentials</source>
@@ -1558,35 +1570,35 @@ Tem a certeza de que deseja continuar?</translation>
<name>DatabaseSettingsWidgetEncryption</name>
<message>
<source>Encryption Algorithm:</source>
- <translation>Algoritmo de cifra:</translation>
+ <translation>Encryption Algorithm:</translation>
</message>
<message>
<source>AES: 256 Bit (default)</source>
- <translation>AES: 256 bits (padrão)</translation>
+ <translation>AES: 256 Bit (default)</translation>
</message>
<message>
<source>Twofish: 256 Bit</source>
- <translation>Twofish: 256 bits</translation>
+ <translation>Twofish: 256 Bit</translation>
</message>
<message>
<source>Key Derivation Function:</source>
- <translation>Função derivação de chave:</translation>
+ <translation>Key Derivation Function:</translation>
</message>
<message>
<source>Transform rounds:</source>
- <translation>Ciclos de transformação:</translation>
+ <translation>Transform rounds:</translation>
</message>
<message>
<source>Memory Usage:</source>
- <translation>Utilização de memória:</translation>
+ <translation>Memory Usage:</translation>
</message>
<message>
<source>Parallelism:</source>
- <translation>Paralelismo:</translation>
+ <translation>Parallelism:</translation>
</message>
<message>
<source>Decryption Time:</source>
- <translation>Tempo para decifrar:</translation>
+ <translation>Decryption Time:</translation>
</message>
<message>
<source>?? s</source>
@@ -1594,23 +1606,23 @@ Tem a certeza de que deseja continuar?</translation>
</message>
<message>
<source>Change</source>
- <translation>Alterar</translation>
+ <translation>Change</translation>
</message>
<message>
<source>Higher values offer more protection, but opening the database will take longer.</source>
- <translation>Os valores mais altos oferecem mais proteção mas também pode demorar mais tempo para abrir a base de dados.</translation>
+ <translation>Higher values offer more protection, but opening the database will take longer.</translation>
</message>
<message>
<source>Database format:</source>
- <translation>Formato da base de dados:</translation>
+ <translation>Database format:</translation>
</message>
<message>
<source>This is only important if you need to use your database with other programs.</source>
- <translation>Apenas relevante se necessitar de utilizar a base de dados com outros programas.</translation>
+ <translation>This is only important if you need to use your database with other programs.</translation>
</message>
<message>
<source>KDBX 4.0 (recommended)</source>
- <translation>KDBX 4.0 (recomendado)</translation>
+ <translation>KDBX 4.0 (recommended)</translation>
</message>
<message>
<source>KDBX 3.1</source>
@@ -1619,49 +1631,49 @@ Tem a certeza de que deseja continuar?</translation>
<message>
<source>unchanged</source>
<comment>Database decryption time is unchanged</comment>
- <translation>inalterado</translation>
+ <translation>unchanged</translation>
</message>
<message>
<source>Number of rounds too high</source>
<comment>Key transformation rounds</comment>
- <translation>Número de ciclos muito alto</translation>
+ <translation>Number of rounds too high</translation>
</message>
<message>
<source>You are using a very high number of key transform rounds with Argon2.
If you keep this number, your database may take hours or days (or even longer) to open!</source>
- <translation>Está a utilizar um número muito alto para a transformação de chaves com Argon2.
+ <translation>You are using a very high number of key transform rounds with Argon2.
-Se mantiver este número, a sua base de dados pode levar muitas horas/dias (ou ainda mais) para ser aberta!</translation>
+If you keep this number, your database may take hours or days (or even longer) to open!</translation>
</message>
<message>
<source>Understood, keep number</source>
- <translation>Percebi, manter número</translation>
+ <translation>Understood, keep number</translation>
</message>
<message>
<source>Cancel</source>
- <translation>Cancelar</translation>
+ <translation>Cancel</translation>
</message>
<message>
<source>Number of rounds too low</source>
<comment>Key transformation rounds</comment>
- <translation>Número de ciclos muito baixo</translation>
+ <translation>Number of rounds too low</translation>
</message>
<message>
<source>You are using a very low number of key transform rounds with AES-KDF.
If you keep this number, your database may be too easy to crack!</source>
- <translation>Está a utilizar um número muito baixo para a transformação de chaves com Argon2.
+ <translation>You are using a very low number of key transform rounds with AES-KDF.
-Se mantiver este número, a sua base de dados pode ser desbloqueada muito facilmente!</translation>
+If you keep this number, your database may be too easy to crack!</translation>
</message>
<message>
<source>KDF unchanged</source>
- <translation>KDF inalterado</translation>
+ <translation>KDF unchanged</translation>
</message>
<message>
<source>Failed to transform key with new KDF parameters; KDF unchanged.</source>
- <translation>Erro ao transformar a chave com os novos parâmetros KDF; KDF inalterado.</translation>
+ <translation>Failed to transform key with new KDF parameters; KDF unchanged.</translation>
</message>
<message numerus="yes">
<source> MiB</source>
@@ -1671,7 +1683,7 @@ Se mantiver este número, a sua base de dados pode ser desbloqueada muito facilm
<message numerus="yes">
<source> thread(s)</source>
<comment>Threads for parallel execution (KDF settings)</comment>
- <translation><numerusform>processo</numerusform><numerusform>processos</numerusform></translation>
+ <translation><numerusform> thread</numerusform><numerusform> threads</numerusform></translation>
</message>
<message>
<source>Change existing decryption time</source>
@@ -1703,7 +1715,7 @@ Se mantiver este número, a sua base de dados pode ser desbloqueada muito facilm
</message>
<message>
<source>Parallelism</source>
- <translation type="unfinished"/>
+ <translation>Parallelism</translation>
</message>
<message>
<source>?? ms</source>
@@ -1737,31 +1749,31 @@ Se mantiver este número, a sua base de dados pode ser desbloqueada muito facilm
<name>DatabaseSettingsWidgetGeneral</name>
<message>
<source>Database Meta Data</source>
- <translation>Meta-dados da base de dados</translation>
+ <translation>Database Meta Data</translation>
</message>
<message>
<source>Database name:</source>
- <translation>Nome da base de dados:</translation>
+ <translation>Database name:</translation>
</message>
<message>
<source>Database description:</source>
- <translation>Descrição da base de dados:</translation>
+ <translation>Database description:</translation>
</message>
<message>
<source>Default username:</source>
- <translation>Nome de utilizador padrão:</translation>
+ <translation>Default username:</translation>
</message>
<message>
<source>History Settings</source>
- <translation>Definições do histórico</translation>
+ <translation>History Settings</translation>
</message>
<message>
<source>Max. history items:</source>
- <translation>Número máximo de itens no histórico:</translation>
+ <translation>Max. history items:</translation>
</message>
<message>
<source>Max. history size:</source>
- <translation>Tamanho máximo para o histórico:</translation>
+ <translation>Max. history size:</translation>
</message>
<message>
<source> MiB</source>
@@ -1769,11 +1781,11 @@ Se mantiver este número, a sua base de dados pode ser desbloqueada muito facilm
</message>
<message>
<source>Use recycle bin</source>
- <translation>Utilizar reciclagem</translation>
+ <translation>Use recycle bin</translation>
</message>
<message>
<source>Additional Database Settings</source>
- <translation>Definições extra para a base de dados</translation>
+ <translation>Additional Database Settings</translation>
</message>
<message>
<source>Database name field</source>
@@ -1793,7 +1805,7 @@ Se mantiver este número, a sua base de dados pode ser desbloqueada muito facilm
</message>
<message>
<source>Maximum size of history per entry</source>
- <translation type="unfinished"/>
+ <translation>Maximum size of history per entry</translation>
</message>
<message>
<source>Delete Recycle Bin</source>
@@ -1817,7 +1829,7 @@ This action is not reversible.</source>
<name>DatabaseSettingsWidgetKeeShare</name>
<message>
<source>Sharing</source>
- <translation>Partilha</translation>
+ <translation>Sharing</translation>
</message>
<message>
<source>Breadcrumb</source>
@@ -1825,19 +1837,19 @@ This action is not reversible.</source>
</message>
<message>
<source>Type</source>
- <translation>Tipo</translation>
+ <translation>Type</translation>
</message>
<message>
<source>Path</source>
- <translation>Caminho</translation>
+ <translation>Path</translation>
</message>
<message>
<source>Last Signer</source>
- <translation>Último signatário</translation>
+ <translation>Last Signer</translation>
</message>
<message>
<source>Certificates</source>
- <translation>Certificados</translation>
+ <translation>Certificates</translation>
</message>
<message>
<source> &gt; </source>
@@ -1849,11 +1861,11 @@ This action is not reversible.</source>
<name>DatabaseSettingsWidgetMetaDataSimple</name>
<message>
<source>Database Name:</source>
- <translation>Nome da base de dados:</translation>
+ <translation>Database Name:</translation>
</message>
<message>
<source>Description:</source>
- <translation>Descrição:</translation>
+ <translation>Description:</translation>
</message>
<message>
<source>Database name field</source>
@@ -1868,72 +1880,72 @@ This action is not reversible.</source>
<name>DatabaseTabWidget</name>
<message>
<source>KeePass 2 Database</source>
- <translation>Base de dados do KeePass 2</translation>
+ <translation>KeePass 2 Database</translation>
</message>
<message>
<source>All files</source>
- <translation>Todos os ficheiros</translation>
+ <translation>All files</translation>
</message>
<message>
<source>Open database</source>
- <translation>Abrir base de dados</translation>
+ <translation>Open database</translation>
</message>
<message>
<source>CSV file</source>
- <translation>Ficheiro CSV</translation>
+ <translation>CSV file</translation>
</message>
<message>
<source>Merge database</source>
- <translation>Combinar base de dados</translation>
+ <translation>Merge database</translation>
</message>
<message>
<source>Open KeePass 1 database</source>
- <translation>Abrir base de dados do KeePass 1</translation>
+ <translation>Open KeePass 1 database</translation>
</message>
<message>
<source>KeePass 1 database</source>
- <translation>Base de dados do KeePass 1</translation>
+ <translation>KeePass 1 database</translation>
</message>
<message>
<source>Export database to CSV file</source>
- <translation>Exportar base de dados para ficheiro CSV</translation>
+ <translation>Export database to CSV file</translation>
</message>
<message>
<source>Writing the CSV file failed.</source>
- <translation>Erro ao escrever no ficheiro CSV.</translation>
+ <translation>Writing the CSV file failed.</translation>
</message>
<message>
<source>Database creation error</source>
- <translation>Erro ao criar a base de dados</translation>
+ <translation>Database creation error</translation>
</message>
<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>A base de dados criada não tem chave ou KDF e não pode ser guardada.
-Existe aqui um erro que deve ser reportado aos programadores.</translation>
+ <translation>The created database has no key or KDF, refusing to save it.
+This is definitely a bug, please report it to the developers.</translation>
</message>
<message>
<source>Select CSV file</source>
- <translation>Selecionar ficheiro CSV</translation>
+ <translation>Select CSV file</translation>
</message>
<message>
<source>New Database</source>
- <translation>Nova base de dados</translation>
+ <translation>New Database</translation>
</message>
<message>
<source>%1 [New Database]</source>
<comment>Database tab name modifier</comment>
- <translation>%1 [Nova base de dados]</translation>
+ <translation>%1 [New Database]</translation>
</message>
<message>
<source>%1 [Locked]</source>
<comment>Database tab name modifier</comment>
- <translation>%1 [Bloqueada]</translation>
+ <translation>%1 [Locked]</translation>
</message>
<message>
<source>%1 [Read-only]</source>
<comment>Database tab name modifier</comment>
- <translation>%1 [Apenas leitura]</translation>
+ <translation>%1 [Read-only]</translation>
</message>
<message>
<source>Failed to open %1. It either does not exist or is not accessible.</source>
@@ -1968,177 +1980,177 @@ Existe aqui um erro que deve ser reportado aos programadores.</translation>
<name>DatabaseWidget</name>
<message>
<source>Searching...</source>
- <translation>Pesquisar..</translation>
+ <translation>Searching...</translation>
</message>
<message>
<source>Do you really want to delete the entry &quot;%1&quot; for good?</source>
- <translation>Tem a certeza de que deseja eliminar permanentemente a entrada &quot;%1&quot;?</translation>
+ <translation>Do you really want to delete the entry &quot;%1&quot; for good?</translation>
</message>
<message>
<source>Do you really want to move entry &quot;%1&quot; to the recycle bin?</source>
- <translation>Tem a certeza de que deseja mover a entrada &quot;%1&quot; para a reciclagem?</translation>
+ <translation>Do you really want to move entry &quot;%1&quot; to the recycle bin?</translation>
</message>
<message numerus="yes">
<source>Do you really want to move %n entry(s) to the recycle bin?</source>
- <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>
+ <translation><numerusform>Do you really want to move %n entry to the recycle bin?</numerusform><numerusform>Do you really want to move %n entries to the recycle bin?</numerusform></translation>
</message>
<message>
<source>Execute command?</source>
- <translation>Executar comando?</translation>
+ <translation>Execute command?</translation>
</message>
<message>
<source>Do you really want to execute the following command?&lt;br&gt;&lt;br&gt;%1&lt;br&gt;</source>
- <translation>Tem a certeza de que deseja executar este comando?&lt;br&gt;&lt;br&gt;%1&lt;br&gt;</translation>
+ <translation>Do you really want to execute the following command?&lt;br&gt;&lt;br&gt;%1&lt;br&gt;</translation>
</message>
<message>
<source>Remember my choice</source>
- <translation>Memorizar escolha</translation>
+ <translation>Remember my choice</translation>
</message>
<message>
<source>Do you really want to delete the group &quot;%1&quot; for good?</source>
- <translation>Tem a certeza de que deseja eliminar permanentemente o grupo &quot;%1&quot;?</translation>
+ <translation>Do you really want to delete the group &quot;%1&quot; for good?</translation>
</message>
<message>
<source>No current database.</source>
- <translation>Nenhuma base de dados.</translation>
+ <translation>No current database.</translation>
</message>
<message>
<source>No source database, nothing to do.</source>
- <translation>Não existe base de dados de origem, nada a fazer.</translation>
+ <translation>No source database, nothing to do.</translation>
</message>
<message>
<source>Search Results (%1)</source>
- <translation>Resultados da pesquisa (%1)</translation>
+ <translation>Search Results (%1)</translation>
</message>
<message>
<source>No Results</source>
- <translation>Sem resultados</translation>
+ <translation>No Results</translation>
</message>
<message>
<source>File has changed</source>
- <translation>Ficheiro alterado</translation>
+ <translation>File has changed</translation>
</message>
<message>
<source>The database file has changed. Do you want to load the changes?</source>
- <translation>O ficheiro da base de dados foi alterado. Deseja carregar as alterações?</translation>
+ <translation>The database file has changed. Do you want to load the changes?</translation>
</message>
<message>
<source>Merge Request</source>
- <translation>Pedido de combinação</translation>
+ <translation>Merge Request</translation>
</message>
<message>
<source>The database file has changed and you have unsaved changes.
Do you want to merge your changes?</source>
- <translation>A base de dados foi alterada e tem alterações não guardadas.
-Deseja combinar as suas alterações?</translation>
+ <translation>The database file has changed and you have unsaved changes.
+Do you want to merge your changes?</translation>
</message>
<message>
<source>Empty recycle bin?</source>
- <translation>Limpar reciclagem?</translation>
+ <translation>Empty recycle bin?</translation>
</message>
<message>
<source>Are you sure you want to permanently delete everything from your recycle bin?</source>
- <translation>Tem a certeza de que deseja eliminar permanentemente os itens da reciclagem?</translation>
+ <translation>Are you sure you want to permanently delete everything from your recycle bin?</translation>
</message>
<message numerus="yes">
<source>Do you really want to delete %n entry(s) for good?</source>
- <translation><numerusform>Tem a certeza de que deseja eliminar %n entrada?</numerusform><numerusform>Tem a certeza de que deseja eliminar %n entradas?</numerusform></translation>
+ <translation><numerusform>Do you really want to delete %n entry for good?</numerusform><numerusform>Do you really want to delete %n entries for good?</numerusform></translation>
</message>
<message numerus="yes">
<source>Delete entry(s)?</source>
- <translation><numerusform>Eliminar entrada?</numerusform><numerusform>Eliminar entradas?</numerusform></translation>
+ <translation><numerusform>Delete entry?</numerusform><numerusform>Delete entries?</numerusform></translation>
</message>
<message numerus="yes">
<source>Move entry(s) to recycle bin?</source>
- <translation><numerusform>Mover entrada para a reciclagem?</numerusform><numerusform>Mover entradas para a reciclagem?</numerusform></translation>
+ <translation><numerusform>Move entry to recycle bin?</numerusform><numerusform>Move entries to recycle bin?</numerusform></translation>
</message>
<message>
<source>Lock Database?</source>
- <translation>Bloquear base de dados?</translation>
+ <translation>Lock Database?</translation>
</message>
<message>
<source>You are editing an entry. Discard changes and lock anyway?</source>
- <translation>Está a editar uma entrada. Rejeitar alterações e bloquear?</translation>
+ <translation>You are editing an entry. Discard changes and lock anyway?</translation>
</message>
<message>
<source>&quot;%1&quot; was modified.
Save changes?</source>
- <translation>&quot;%1&quot; foi modificada.
-Guardar alterações?</translation>
+ <translation>&quot;%1&quot; was modified.
+Save changes?</translation>
</message>
<message>
<source>Database was modified.
Save changes?</source>
- <translation>A base de dados foi modificada.
-Guardar alterações?</translation>
+ <translation>Database was modified.
+Save changes?</translation>
</message>
<message>
<source>Save changes?</source>
- <translation>Guardar alterações?</translation>
+ <translation>Save changes?</translation>
</message>
<message>
<source>Could not open the new database file while attempting to autoreload.
Error: %1</source>
- <translation>Não foi possível abrir a nova base de dados durante o carregamento
-Erro: %1</translation>
+ <translation>Could not open the new database file while attempting to autoreload.
+Error: %1</translation>
</message>
<message>
<source>Disable safe saves?</source>
- <translation>Desativar salvaguardas?</translation>
+ <translation>Disable safe saves?</translation>
</message>
<message>
<source>KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file.
Disable safe saves and try again?</source>
- <translation>O KeePassXC não conseguiu guardar a base de dados múltiplas vezes. Muito provavelmente, os serviços de sincronização não o permitiram.
-Desativar salvaguardas e tentar novamente?</translation>
+ <translation>KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file.
+Disable safe saves and try again?</translation>
</message>
<message>
<source>Passwords</source>
- <translation>Palavras-passe</translation>
+ <translation>Passwords</translation>
</message>
<message>
<source>Save database as</source>
- <translation>Guardar base de dados como</translation>
+ <translation>Save database as</translation>
</message>
<message>
<source>KeePass 2 Database</source>
- <translation>Base de dados do KeePass 2</translation>
+ <translation>KeePass 2 Database</translation>
</message>
<message>
<source>Replace references to entry?</source>
- <translation>Substituir referências na entrada?</translation>
+ <translation>Replace references to entry?</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>A entrada &quot;%1&quot; tem %2 referência. Deseja substituir as referências com valores, ignorar a entrada ou eliminar?</numerusform><numerusform>A entrada &quot;%1&quot; tem %2 referências. Deseja substituir as referências com valores, ignorar a entrada ou eliminar?</numerusform></translation>
+ <translation><numerusform>Entry &quot;%1&quot; has %2 reference. Do you want to overwrite references with values, skip this entry, or delete anyway?</numerusform><numerusform>Entry &quot;%1&quot; has %2 references. Do you want to overwrite references with values, skip this entry, or delete anyway?</numerusform></translation>
</message>
<message>
<source>Delete group</source>
- <translation>Eliminar grupo</translation>
+ <translation>Delete group</translation>
</message>
<message>
<source>Move group to recycle bin?</source>
- <translation>Mover grupo para a reciclagem?</translation>
+ <translation>Move group to recycle bin?</translation>
</message>
<message>
<source>Do you really want to move the group &quot;%1&quot; to the recycle bin?</source>
- <translation>Tem a certeza de que deseja mover o grupo &quot;%1&quot; para a reciclagem?</translation>
+ <translation>Do you really want to move the group &quot;%1&quot; to the recycle bin?</translation>
</message>
<message>
<source>Successfully merged the database files.</source>
- <translation>Bases de dados combinadas com sucesso.</translation>
+ <translation>Successfully merged the database files.</translation>
</message>
<message>
<source>Database was not modified by merge operation.</source>
- <translation>A base de dados não foi alterada pela combinação.</translation>
+ <translation>Database was not modified by merge operation.</translation>
</message>
<message>
<source>Shared group...</source>
- <translation>Grupo partilhado...</translation>
+ <translation>Shared group...</translation>
</message>
<message>
<source>Writing the database failed: %1</source>
- <translation>Erro ao escrever na base de dados: %1</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>This database is opened in read-only mode. Autosave is disabled.</source>
@@ -2157,95 +2169,95 @@ Desativar salvaguardas e tentar novamente?</translation>
<name>EditEntryWidget</name>
<message>
<source>Entry</source>
- <translation>Entrada</translation>
+ <translation>Entry</translation>
</message>
<message>
<source>Advanced</source>
- <translation>Avançado</translation>
+ <translation>Advanced</translation>
</message>
<message>
<source>Icon</source>
- <translation>Ãcone</translation>
+ <translation>Icon</translation>
</message>
<message>
<source>Auto-Type</source>
- <translation>Escrita automática</translation>
+ <translation>Auto-Type</translation>
</message>
<message>
<source>Properties</source>
- <translation>Propriedades</translation>
+ <translation>Properties</translation>
</message>
<message>
<source>History</source>
- <translation>Histórico</translation>
+ <translation>History</translation>
</message>
<message>
<source>SSH Agent</source>
- <translation>Agente SSH</translation>
+ <translation>SSH Agent</translation>
</message>
<message>
<source>n/a</source>
- <translation>n/d</translation>
+ <translation>n/a</translation>
</message>
<message>
<source>(encrypted)</source>
- <translation>(cifrada)</translation>
+ <translation>(encrypted)</translation>
</message>
<message>
<source>Select private key</source>
- <translation>Selecionar chave privada</translation>
+ <translation>Select private key</translation>
</message>
<message>
<source>Entry history</source>
- <translation>Histórico da entrada</translation>
+ <translation>Entry history</translation>
</message>
<message>
<source>Add entry</source>
- <translation>Adicionar entrada</translation>
+ <translation>Add entry</translation>
</message>
<message>
<source>Edit entry</source>
- <translation>Editar entrada</translation>
+ <translation>Edit entry</translation>
</message>
<message>
<source>New attribute</source>
- <translation>Novo atributo</translation>
+ <translation>New attribute</translation>
</message>
<message>
<source>Are you sure you want to remove this attribute?</source>
- <translation>Tem a certeza de que deseja remover este atributo?</translation>
+ <translation>Are you sure you want to remove this attribute?</translation>
</message>
<message>
<source>Tomorrow</source>
- <translation>Amanhã</translation>
+ <translation>Tomorrow</translation>
</message>
<message numerus="yes">
<source>%n week(s)</source>
- <translation><numerusform>%n semana</numerusform><numerusform>%n semanas</numerusform></translation>
+ <translation><numerusform>%n week</numerusform><numerusform>%n weeks</numerusform></translation>
</message>
<message numerus="yes">
<source>%n month(s)</source>
- <translation><numerusform>%n mês</numerusform><numerusform>%n meses</numerusform></translation>
+ <translation><numerusform>%n month</numerusform><numerusform>%n months</numerusform></translation>
</message>
<message>
<source>Entry updated successfully.</source>
- <translation>Entrada atualizada com sucesso.</translation>
+ <translation>Entry updated successfully.</translation>
</message>
<message>
<source>New attribute %1</source>
- <translation>Novo atributo %1</translation>
+ <translation>New attribute %1</translation>
</message>
<message numerus="yes">
<source>%n year(s)</source>
- <translation><numerusform>%n ano</numerusform><numerusform>%n anos</numerusform></translation>
+ <translation><numerusform>%n year</numerusform><numerusform>%n years</numerusform></translation>
</message>
<message>
<source>Confirm Removal</source>
- <translation>Confirmação de remoção</translation>
+ <translation>Confirm Removal</translation>
</message>
<message>
<source>Browser Integration</source>
- <translation>Integração com navegador</translation>
+ <translation>Browser Integration</translation>
</message>
<message>
<source>&lt;empty URL&gt;</source>
@@ -2257,7 +2269,7 @@ Desativar salvaguardas e tentar novamente?</translation>
</message>
<message>
<source>Reveal</source>
- <translation>Revelar</translation>
+ <translation>Reveal</translation>
</message>
<message>
<source>Hide</source>
@@ -2280,39 +2292,39 @@ Desativar salvaguardas e tentar novamente?</translation>
<name>EditEntryWidgetAdvanced</name>
<message>
<source>Additional attributes</source>
- <translation>Atributos adicionais</translation>
+ <translation>Additional attributes</translation>
</message>
<message>
<source>Add</source>
- <translation>Adicionar</translation>
+ <translation>Add</translation>
</message>
<message>
<source>Remove</source>
- <translation>Remover</translation>
+ <translation>Remove</translation>
</message>
<message>
<source>Edit Name</source>
- <translation>Editar nome</translation>
+ <translation>Edit Name</translation>
</message>
<message>
<source>Protect</source>
- <translation>Proteger</translation>
+ <translation>Protect</translation>
</message>
<message>
<source>Reveal</source>
- <translation>Mostrar</translation>
+ <translation>Reveal</translation>
</message>
<message>
<source>Attachments</source>
- <translation>Anexos</translation>
+ <translation>Attachments</translation>
</message>
<message>
<source>Foreground Color:</source>
- <translation>Cor principal:</translation>
+ <translation>Foreground Colour:</translation>
</message>
<message>
<source>Background Color:</source>
- <translation>Cor secundária:</translation>
+ <translation>Background Colour:</translation>
</message>
<message>
<source>Attribute selection</source>
@@ -2344,11 +2356,11 @@ Desativar salvaguardas e tentar novamente?</translation>
</message>
<message>
<source>Foreground color selection</source>
- <translation type="unfinished"/>
+ <translation>Foreground colour selection</translation>
</message>
<message>
<source>Background color selection</source>
- <translation type="unfinished"/>
+ <translation>Background colour selection</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>
@@ -2363,11 +2375,11 @@ Desativar salvaguardas e tentar novamente?</translation>
<name>EditEntryWidgetAutoType</name>
<message>
<source>Enable Auto-Type for this entry</source>
- <translation>Ativar escrita automática para esta entrada</translation>
+ <translation>Enable Auto-Type for this entry</translation>
</message>
<message>
<source>Window Associations</source>
- <translation>Associação de janelas</translation>
+ <translation>Window Associations</translation>
</message>
<message>
<source>+</source>
@@ -2379,11 +2391,11 @@ Desativar salvaguardas e tentar novamente?</translation>
</message>
<message>
<source>Window title:</source>
- <translation>Título da janela:</translation>
+ <translation>Window title:</translation>
</message>
<message>
<source>Use a specific sequence for this association:</source>
- <translation>Utilizar sequência específica para esta associação:</translation>
+ <translation>Use a specific sequence for this association:</translation>
</message>
<message>
<source>Custom Auto-Type sequence</source>
@@ -2438,7 +2450,7 @@ Desativar salvaguardas e tentar novamente?</translation>
</message>
<message>
<source>General</source>
- <translation>Geral</translation>
+ <translation>General</translation>
</message>
<message>
<source>Skip Auto-Submit for this entry</source>
@@ -2454,11 +2466,11 @@ Desativar salvaguardas e tentar novamente?</translation>
</message>
<message>
<source>Add</source>
- <translation>Adicionar</translation>
+ <translation>Add</translation>
</message>
<message>
<source>Remove</source>
- <translation>Remover</translation>
+ <translation>Remove</translation>
</message>
<message>
<source>Edit</source>
@@ -2477,19 +2489,19 @@ Desativar salvaguardas e tentar novamente?</translation>
<name>EditEntryWidgetHistory</name>
<message>
<source>Show</source>
- <translation>Mostrar</translation>
+ <translation>Show</translation>
</message>
<message>
<source>Restore</source>
- <translation>Restaurar</translation>
+ <translation>Restore</translation>
</message>
<message>
<source>Delete</source>
- <translation>Eliminar</translation>
+ <translation>Delete</translation>
</message>
<message>
<source>Delete all</source>
- <translation>Eliminar tudo</translation>
+ <translation>Delete all</translation>
</message>
<message>
<source>Entry history selection</source>
@@ -2520,23 +2532,23 @@ Desativar salvaguardas e tentar novamente?</translation>
</message>
<message>
<source>Password:</source>
- <translation>Palavra-passe:</translation>
+ <translation>Password:</translation>
</message>
<message>
<source>Title:</source>
- <translation>Título:</translation>
+ <translation>Title:</translation>
</message>
<message>
<source>Presets</source>
- <translation>Predefinições</translation>
+ <translation>Presets</translation>
</message>
<message>
<source>Toggle the checkbox to reveal the notes section.</source>
- <translation>Alternar caixa de seleção para mostrar a secção de notas.</translation>
+ <translation>Toggle the checkbox to reveal the notes section.</translation>
</message>
<message>
<source>Username:</source>
- <translation>Nome de utilizador:</translation>
+ <translation>Username:</translation>
</message>
<message>
<source>Url field</source>
@@ -2556,15 +2568,15 @@ Desativar salvaguardas e tentar novamente?</translation>
</message>
<message>
<source>Expiration field</source>
- <translation type="unfinished"/>
+ <translation>Expiry field</translation>
</message>
<message>
<source>Expiration Presets</source>
- <translation type="unfinished"/>
+ <translation>Expiry Presets</translation>
</message>
<message>
<source>Expiration presets</source>
- <translation type="unfinished"/>
+ <translation>Expiry presets</translation>
</message>
<message>
<source>Notes field</source>
@@ -2580,7 +2592,7 @@ Desativar salvaguardas e tentar novamente?</translation>
</message>
<message>
<source>Toggle expiration</source>
- <translation type="unfinished"/>
+ <translation>Toggle expiry</translation>
</message>
<message>
<source>Notes:</source>
@@ -2592,83 +2604,83 @@ Desativar salvaguardas e tentar novamente?</translation>
</message>
<message>
<source>Expires:</source>
- <translation type="unfinished"/>
+ <translation>Expires:</translation>
</message>
</context>
<context>
<name>EditEntryWidgetSSHAgent</name>
<message>
<source>Form</source>
- <translation>Formulário</translation>
+ <translation>Form</translation>
</message>
<message>
<source>Remove key from agent after</source>
- <translation>Remover chave do agente depois de</translation>
+ <translation>Remove key from agent after</translation>
</message>
<message>
<source> seconds</source>
- <translation> segundos</translation>
+ <translation> seconds</translation>
</message>
<message>
<source>Fingerprint</source>
- <translation>Impressão digital</translation>
+ <translation>Fingerprint</translation>
</message>
<message>
<source>Remove key from agent when database is closed/locked</source>
- <translation>Remover chave do agente ao fechar/bloquear a base de dados</translation>
+ <translation>Remove key from agent when database is closed/locked</translation>
</message>
<message>
<source>Public key</source>
- <translation>Chave pública</translation>
+ <translation>Public key</translation>
</message>
<message>
<source>Add key to agent when database is opened/unlocked</source>
- <translation>Adicionar chave ao agente ao abrir/desbloquear a base de dados</translation>
+ <translation>Add key to agent when database is opened/unlocked</translation>
</message>
<message>
<source>Comment</source>
- <translation>Comentário</translation>
+ <translation>Comment</translation>
</message>
<message>
<source>Decrypt</source>
- <translation>Decifrar</translation>
+ <translation>Decrypt</translation>
</message>
<message>
<source>n/a</source>
- <translation>n/d</translation>
+ <translation>n/a</translation>
</message>
<message>
<source>Copy to clipboard</source>
- <translation>Copiar para a área de transferência</translation>
+ <translation>Copy to clipboard</translation>
</message>
<message>
<source>Private key</source>
- <translation>Chave privada</translation>
+ <translation>Private key</translation>
</message>
<message>
<source>External file</source>
- <translation>Ficheiro externo</translation>
+ <translation>External file</translation>
</message>
<message>
<source>Browse...</source>
<extracomment>Button for opening file dialog</extracomment>
- <translation>Procurar...</translation>
+ <translation>Browse...</translation>
</message>
<message>
<source>Attachment</source>
- <translation>Anexo</translation>
+ <translation>Attachment</translation>
</message>
<message>
<source>Add to agent</source>
- <translation>Adicionar ao agente</translation>
+ <translation>Add to agent</translation>
</message>
<message>
<source>Remove from agent</source>
- <translation>Remover do agente</translation>
+ <translation>Remove from agent</translation>
</message>
<message>
<source>Require user confirmation when this key is used</source>
- <translation>Solicitar confirmação para utilizar esta chave</translation>
+ <translation>Require user confirmation when this key is used</translation>
</message>
<message>
<source>Remove key from agent after specified seconds</source>
@@ -2691,94 +2703,94 @@ Desativar salvaguardas e tentar novamente?</translation>
<name>EditGroupWidget</name>
<message>
<source>Group</source>
- <translation>Grupo</translation>
+ <translation>Group</translation>
</message>
<message>
<source>Icon</source>
- <translation>Ãcone</translation>
+ <translation>Icon</translation>
</message>
<message>
<source>Properties</source>
- <translation>Propriedades</translation>
+ <translation>Properties</translation>
</message>
<message>
<source>Add group</source>
- <translation>Adicionar grupo</translation>
+ <translation>Add group</translation>
</message>
<message>
<source>Edit group</source>
- <translation>Editar grupo</translation>
+ <translation>Edit group</translation>
</message>
<message>
<source>Enable</source>
- <translation>Ativar</translation>
+ <translation>Enable</translation>
</message>
<message>
<source>Disable</source>
- <translation>Desativar</translation>
+ <translation>Disable</translation>
</message>
<message>
<source>Inherit from parent group (%1)</source>
- <translation>Herdar do grupo (%1)</translation>
+ <translation>Inherit from parent group (%1)</translation>
</message>
<message>
<source>Entry has unsaved changes</source>
- <translation>A entrada tem alterações por guardar</translation>
+ <translation>Entry has unsaved changes</translation>
</message>
</context>
<context>
<name>EditGroupWidgetKeeShare</name>
<message>
<source>Type:</source>
- <translation>Tipo:</translation>
+ <translation>Type:</translation>
</message>
<message>
<source>Path:</source>
- <translation>Caminho:</translation>
+ <translation>Path:</translation>
</message>
<message>
<source>Password:</source>
- <translation>Palavra-passe:</translation>
+ <translation>Password:</translation>
</message>
<message>
<source>Inactive</source>
- <translation>Inativo</translation>
+ <translation>Inactive</translation>
</message>
<message>
<source>KeeShare unsigned container</source>
- <translation>Contentor KeeShare não assinado</translation>
+ <translation>KeeShare unsigned container</translation>
</message>
<message>
<source>KeeShare signed container</source>
- <translation>Contentor KeeShare assinado</translation>
+ <translation>KeeShare signed container</translation>
</message>
<message>
<source>Select import source</source>
- <translation>Selecione a origem da importação</translation>
+ <translation>Select import source</translation>
</message>
<message>
<source>Select export target</source>
- <translation>Selecione o destino da exportação</translation>
+ <translation>Select export target</translation>
</message>
<message>
<source>Select import/export file</source>
- <translation>Selecione o ficheiro de importação/exportação</translation>
+ <translation>Select import/export file</translation>
</message>
<message>
<source>Clear</source>
- <translation>Limpar</translation>
+ <translation>Clear</translation>
</message>
<message>
<source>Import</source>
- <translation>Importar</translation>
+ <translation>Import</translation>
</message>
<message>
<source>Export</source>
- <translation>Exportar</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Synchronize</source>
- <translation type="unfinished"/>
+ <translation>Synchronise</translation>
</message>
<message>
<source>Your KeePassXC version does not support sharing this container type.
@@ -2832,7 +2844,7 @@ Supported extensions are: %1.</source>
</message>
<message>
<source>Browse...</source>
- <translation>Procurar...</translation>
+ <translation>Browse...</translation>
</message>
</context>
<context>
@@ -2847,7 +2859,7 @@ Supported extensions are: %1.</source>
</message>
<message>
<source>Toggle expiration</source>
- <translation type="unfinished"/>
+ <translation>Toggle expiry</translation>
</message>
<message>
<source>Auto-Type toggle for this and sub groups</source>
@@ -2855,7 +2867,7 @@ Supported extensions are: %1.</source>
</message>
<message>
<source>Expiration field</source>
- <translation type="unfinished"/>
+ <translation>Expiry field</translation>
</message>
<message>
<source>Search toggle for this and sub groups</source>
@@ -2867,7 +2879,7 @@ Supported extensions are: %1.</source>
</message>
<message>
<source>Expires:</source>
- <translation type="unfinished"/>
+ <translation>Expires:</translation>
</message>
<message>
<source>Use default Auto-Type sequence of parent group</source>
@@ -2898,55 +2910,55 @@ Supported extensions are: %1.</source>
<name>EditWidgetIcons</name>
<message>
<source>Add custom icon</source>
- <translation>Adicionar ícone personalizado</translation>
+ <translation>Add custom icon</translation>
</message>
<message>
<source>Delete custom icon</source>
- <translation>Eliminar ícone personalizado</translation>
+ <translation>Delete custom icon</translation>
</message>
<message>
<source>Download favicon</source>
- <translation>Descarregar &apos;favicon&apos;</translation>
+ <translation>Download favicon</translation>
</message>
<message>
<source>Unable to fetch favicon.</source>
- <translation>Não foi possível obter o &apos;favicon&apos;.</translation>
+ <translation>Unable to fetch favicon.</translation>
</message>
<message>
<source>Images</source>
- <translation>Imagens</translation>
+ <translation>Images</translation>
</message>
<message>
<source>All files</source>
- <translation>Todos os ficheiros</translation>
+ <translation>All files</translation>
</message>
<message>
<source>Confirm Delete</source>
- <translation>Confirmação de eliminação</translation>
+ <translation>Confirm Delete</translation>
</message>
<message>
<source>Select Image(s)</source>
- <translation>Selecionar imagens</translation>
+ <translation>Select Image(s)</translation>
</message>
<message numerus="yes">
<source>Successfully loaded %1 of %n icon(s)</source>
- <translation><numerusform>%1 de %n ícones carregado com sucesso.</numerusform><numerusform>%1 de %n ícones carregados com sucesso.</numerusform></translation>
+ <translation><numerusform>Successfully loaded %1 of %n icon</numerusform><numerusform>Successfully loaded %1 of %n icons</numerusform></translation>
</message>
<message>
<source>No icons were loaded</source>
- <translation>Não foram carregados ícones</translation>
+ <translation>No icons were loaded</translation>
</message>
<message numerus="yes">
<source>%n icon(s) already exist in the database</source>
- <translation><numerusform>%n ícone já existe na sua base de dados.</numerusform><numerusform>%n ícones já existem na sua base de dados.</numerusform></translation>
+ <translation><numerusform>%n icon already exist in the database</numerusform><numerusform>%n icons already exist in the database</numerusform></translation>
</message>
<message numerus="yes">
<source>The following icon(s) failed:</source>
- <translation><numerusform>O ícone seguinte falhou:</numerusform><numerusform>Os ícones seguintes falharam:</numerusform></translation>
+ <translation><numerusform>The following icon failed:</numerusform><numerusform>The following icons failed:</numerusform></translation>
</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>Este ícone é utilizado por % entrada e será substituído pelo ícone padrão. Tem a certeza de que deseja eliminar o ícone?</numerusform><numerusform>Este ícone é utilizado por % entradas e será substituído pelo ícone padrão. Tem a certeza de que deseja eliminar o ícone?</numerusform></translation>
+ <translation><numerusform>This icon is used by %n entry, and will be replaced by the default icon. Are you sure you want to delete it?</numerusform><numerusform>This icon is used by %n entries, and will be replaced by the default icon. Are you sure you want to delete it?</numerusform></translation>
</message>
<message>
<source>You can enable the DuckDuckGo website icon service under Tools -&gt; Settings -&gt; Security</source>
@@ -2997,45 +3009,45 @@ Supported extensions are: %1.</source>
<name>EditWidgetProperties</name>
<message>
<source>Created:</source>
- <translation>Criada:</translation>
+ <translation>Created:</translation>
</message>
<message>
<source>Modified:</source>
- <translation>Modificada:</translation>
+ <translation>Modified:</translation>
</message>
<message>
<source>Accessed:</source>
- <translation>Acedida:</translation>
+ <translation>Accessed:</translation>
</message>
<message>
<source>Uuid:</source>
- <translation>UUID:</translation>
+ <translation>Uuid:</translation>
</message>
<message>
<source>Plugin Data</source>
- <translation>Dados do suplemento</translation>
+ <translation>Plugin Data</translation>
</message>
<message>
<source>Remove</source>
- <translation>Remover</translation>
+ <translation>Remove</translation>
</message>
<message>
<source>Delete plugin data?</source>
- <translation>Eliminar dados do suplemento?</translation>
+ <translation>Delete plugin data?</translation>
</message>
<message>
<source>Do you really want to delete the selected plugin data?
This may cause the affected plugins to malfunction.</source>
- <translation>Tem a certeza de que deseja eliminar os dados do suplemento?
-Esta ação pode implicar um funcionamento errático.</translation>
+ <translation>Do you really want to delete the selected plugin data?
+This may cause the affected plugins to malfunction.</translation>
</message>
<message>
<source>Key</source>
- <translation>Chave</translation>
+ <translation>Key</translation>
</message>
<message>
<source>Value</source>
- <translation>Valor</translation>
+ <translation>Value</translation>
</message>
<message>
<source>Datetime created</source>
@@ -3073,93 +3085,93 @@ Esta ação pode implicar um funcionamento errático.</translation>
<name>EntryAttachmentsModel</name>
<message>
<source>Name</source>
- <translation>Nome</translation>
+ <translation>Name</translation>
</message>
<message>
<source>Size</source>
- <translation>Tamanho</translation>
+ <translation>Size</translation>
</message>
</context>
<context>
<name>EntryAttachmentsWidget</name>
<message>
<source>Form</source>
- <translation>Formulário</translation>
+ <translation>Form</translation>
</message>
<message>
<source>Add</source>
- <translation>Adicionar</translation>
+ <translation>Add</translation>
</message>
<message>
<source>Remove</source>
- <translation>Remover</translation>
+ <translation>Remove</translation>
</message>
<message>
<source>Open</source>
- <translation>Abrir</translation>
+ <translation>Open</translation>
</message>
<message>
<source>Save</source>
- <translation>Guardar</translation>
+ <translation>Save</translation>
</message>
<message>
<source>Select files</source>
- <translation>Selecionar ficheiros</translation>
+ <translation>Select files</translation>
</message>
<message numerus="yes">
<source>Are you sure you want to remove %n attachment(s)?</source>
- <translation><numerusform>Tem a certeza de que deseja remover %n anexo?</numerusform><numerusform>Tem a certeza de que deseja remover %n anexos?</numerusform></translation>
+ <translation><numerusform>Are you sure you want to remove %n attachment?</numerusform><numerusform>Are you sure you want to remove %n attachments?</numerusform></translation>
</message>
<message>
<source>Save attachments</source>
- <translation>Guardar anexos</translation>
+ <translation>Save attachments</translation>
</message>
<message>
<source>Unable to create directory:
%1</source>
- <translation>Não foi possível criar o diretório:
+ <translation>Unable to create directory:
%1</translation>
</message>
<message>
<source>Are you sure you want to overwrite the existing file &quot;%1&quot; with the attachment?</source>
- <translation>Tem a certeza de que deseja substituir o ficheiro &quot;%1&quot; pelo anexo?</translation>
+ <translation>Are you sure you want to overwrite the existing file &quot;%1&quot; with the attachment?</translation>
</message>
<message>
<source>Confirm overwrite</source>
- <translation>Confirmação de substituição</translation>
+ <translation>Confirm overwrite</translation>
</message>
<message>
<source>Unable to save attachments:
%1</source>
- <translation>Não foi possível guardar os anexos:
+ <translation>Unable to save attachments:
%1</translation>
</message>
<message>
<source>Unable to open attachment:
%1</source>
- <translation>Não foi possível abrir o anexo:
+ <translation>Unable to open attachment:
%1</translation>
</message>
<message>
<source>Unable to open attachments:
%1</source>
- <translation>Não foi possível abrir os anexos:
+ <translation>Unable to open attachments:
%1</translation>
</message>
<message>
<source>Confirm remove</source>
- <translation>Confirmação de remoção</translation>
+ <translation>Confirm remove</translation>
</message>
<message numerus="yes">
<source>Unable to open file(s):
%1</source>
- <translation><numerusform>Não foi possível abrir o ficheiro:
-%1</numerusform><numerusform>Não foi possível abrir os ficheiros:
+ <translation><numerusform>Unable to open file:
+%1</numerusform><numerusform>Unable to open files:
%1</numerusform></translation>
</message>
<message>
<source>Attachments</source>
- <translation>Anexos</translation>
+ <translation>Attachments</translation>
</message>
<message>
<source>Add new attachment</source>
@@ -3193,22 +3205,22 @@ Are you sure to add this file?</source>
<name>EntryAttributesModel</name>
<message>
<source>Name</source>
- <translation>Nome</translation>
+ <translation>Name</translation>
</message>
</context>
<context>
<name>EntryHistoryModel</name>
<message>
<source>Last modified</source>
- <translation>Última modificação</translation>
+ <translation>Last modified</translation>
</message>
<message>
<source>Title</source>
- <translation>Título</translation>
+ <translation>Title</translation>
</message>
<message>
<source>Username</source>
- <translation>Nome de utilizador</translation>
+ <translation>Username</translation>
</message>
<message>
<source>URL</source>
@@ -3224,15 +3236,15 @@ Are you sure to add this file?</source>
</message>
<message>
<source>Group</source>
- <translation>Grupo</translation>
+ <translation>Group</translation>
</message>
<message>
<source>Title</source>
- <translation>Título</translation>
+ <translation>Title</translation>
</message>
<message>
<source>Username</source>
- <translation>Nome de utilizador</translation>
+ <translation>Username</translation>
</message>
<message>
<source>URL</source>
@@ -3240,39 +3252,39 @@ Are you sure to add this file?</source>
</message>
<message>
<source>Never</source>
- <translation>Nunca</translation>
+ <translation>Never</translation>
</message>
<message>
<source>Password</source>
- <translation>Palavra-passe</translation>
+ <translation>Password</translation>
</message>
<message>
<source>Notes</source>
- <translation>Notas</translation>
+ <translation>Notes</translation>
</message>
<message>
<source>Expires</source>
- <translation>Expira</translation>
+ <translation>Expires</translation>
</message>
<message>
<source>Created</source>
- <translation>Criada</translation>
+ <translation>Created</translation>
</message>
<message>
<source>Modified</source>
- <translation>Modificada</translation>
+ <translation>Modified</translation>
</message>
<message>
<source>Accessed</source>
- <translation>Acedida</translation>
+ <translation>Accessed</translation>
</message>
<message>
<source>Attachments</source>
- <translation>Anexos</translation>
+ <translation>Attachments</translation>
</message>
<message>
<source>Size</source>
- <translation>Tamanho</translation>
+ <translation>Size</translation>
</message>
<message>
<source>Group name</source>
@@ -3288,7 +3300,7 @@ Are you sure to add this file?</source>
</message>
<message>
<source>Entry expires at</source>
- <translation type="unfinished"/>
+ <translation>Entry expires at</translation>
</message>
<message>
<source>Creation date</source>
@@ -3308,7 +3320,7 @@ Are you sure to add this file?</source>
</message>
<message>
<source>Entry size</source>
- <translation type="unfinished"/>
+ <translation>Entry size</translation>
</message>
<message>
<source>Has attachments</source>
@@ -3323,23 +3335,23 @@ Are you sure to add this file?</source>
<name>EntryPreviewWidget</name>
<message>
<source>Close</source>
- <translation>Fechar</translation>
+ <translation>Close</translation>
</message>
<message>
<source>General</source>
- <translation>Geral</translation>
+ <translation>General</translation>
</message>
<message>
<source>Username</source>
- <translation>Nome de utilizador</translation>
+ <translation>Username</translation>
</message>
<message>
<source>Password</source>
- <translation>Palavra-passe</translation>
+ <translation>Password</translation>
</message>
<message>
<source>Expiration</source>
- <translation>Expira</translation>
+ <translation>Expiry</translation>
</message>
<message>
<source>URL</source>
@@ -3347,47 +3359,47 @@ Are you sure to add this file?</source>
</message>
<message>
<source>Attributes</source>
- <translation>Atributos</translation>
+ <translation>Attributes</translation>
</message>
<message>
<source>Attachments</source>
- <translation>Anexos</translation>
+ <translation>Attachments</translation>
</message>
<message>
<source>Notes</source>
- <translation>Notas</translation>
+ <translation>Notes</translation>
</message>
<message>
<source>Autotype</source>
- <translation>Escrita automática</translation>
+ <translation>Autotype</translation>
</message>
<message>
<source>Window</source>
- <translation>Janela</translation>
+ <translation>Window</translation>
</message>
<message>
<source>Sequence</source>
- <translation>Sequência</translation>
+ <translation>Sequence</translation>
</message>
<message>
<source>Searching</source>
- <translation>Pesquisa</translation>
+ <translation>Searching</translation>
</message>
<message>
<source>Search</source>
- <translation>Pesquisa</translation>
+ <translation>Search</translation>
</message>
<message>
<source>Clear</source>
- <translation>Limpar</translation>
+ <translation>Clear</translation>
</message>
<message>
<source>Never</source>
- <translation>Nunca</translation>
+ <translation>Never</translation>
</message>
<message>
<source>[PROTECTED]</source>
- <translation>[PROTEGIDA]</translation>
+ <translation>[PROTECTED]</translation>
</message>
<message>
<source>&lt;b&gt;%1&lt;/b&gt;: %2</source>
@@ -3396,15 +3408,15 @@ Are you sure to add this file?</source>
</message>
<message>
<source>Enabled</source>
- <translation>Ativada</translation>
+ <translation>Enabled</translation>
</message>
<message>
<source>Disabled</source>
- <translation>Desativada</translation>
+ <translation>Disabled</translation>
</message>
<message>
<source>Share</source>
- <translation>Partilhar</translation>
+ <translation>Share</translation>
</message>
<message>
<source>Display current TOTP value</source>
@@ -3412,7 +3424,7 @@ Are you sure to add this file?</source>
</message>
<message>
<source>Advanced</source>
- <translation>Avançado</translation>
+ <translation>Advanced</translation>
</message>
</context>
<context>
@@ -3426,27 +3438,27 @@ Are you sure to add this file?</source>
<name>EntryView</name>
<message>
<source>Customize View</source>
- <translation>Vista personalizada</translation>
+ <translation>Customise View</translation>
</message>
<message>
<source>Hide Usernames</source>
- <translation>Ocultar nome de utilizador</translation>
+ <translation>Hide Usernames</translation>
</message>
<message>
<source>Hide Passwords</source>
- <translation>Ocultar palavras-passe</translation>
+ <translation>Hide Passwords</translation>
</message>
<message>
<source>Fit to window</source>
- <translation>Ajustar à janela</translation>
+ <translation>Fit to window</translation>
</message>
<message>
<source>Fit to contents</source>
- <translation>Ajustar ao conteúdo</translation>
+ <translation>Fit to contents</translation>
</message>
<message>
<source>Reset to defaults</source>
- <translation>Repor predefinições</translation>
+ <translation>Reset to defaults</translation>
</message>
<message>
<source>Has attachments</source>
@@ -3486,7 +3498,7 @@ Are you sure to add this file?</source>
</message>
<message>
<source>Group</source>
- <translation>Grupo</translation>
+ <translation>Group</translation>
</message>
<message>
<source>Manage</source>
@@ -3498,7 +3510,7 @@ Are you sure to add this file?</source>
</message>
<message>
<source>None</source>
- <translation>Nada</translation>
+ <translation>None</translation>
</message>
</context>
<context>
@@ -3521,12 +3533,12 @@ Are you sure to add this file?</source>
<message>
<source>Unknown</source>
<comment>Unknown PID</comment>
- <translation>Desconhecido</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Unknown</source>
<comment>Unknown executable path</comment>
- <translation>Desconhecido</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>&lt;i&gt;PID: %1, Executable: %2&lt;/i&gt;</source>
@@ -3543,7 +3555,7 @@ Are you sure to add this file?</source>
<message>
<source>[empty]</source>
<comment>group has no children</comment>
- <translation>[vazia]</translation>
+ <translation>[empty]</translation>
</message>
</context>
<context>
@@ -3561,7 +3573,7 @@ Are you sure to add this file?</source>
</message>
<message>
<source>Cancel</source>
- <translation>Cancelar</translation>
+ <translation>Cancel</translation>
</message>
<message>
<source>Having trouble downloading icons?
@@ -3570,7 +3582,7 @@ You can enable the DuckDuckGo website icon service in the security section of th
</message>
<message>
<source>Close</source>
- <translation>Fechar</translation>
+ <translation>Close</translation>
</message>
<message>
<source>URL</source>
@@ -3578,7 +3590,7 @@ You can enable the DuckDuckGo website icon service in the security section of th
</message>
<message>
<source>Status</source>
- <translation>Estado</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Please wait, processing entry list...</source>
@@ -3590,7 +3602,7 @@ You can enable the DuckDuckGo website icon service in the security section of th
</message>
<message>
<source>Ok</source>
- <translation>Aceitar</translation>
+ <translation>Ok</translation>
</message>
<message>
<source>Already Exists</source>
@@ -3609,34 +3621,34 @@ You can enable the DuckDuckGo website icon service in the security section of th
<name>KMessageWidget</name>
<message>
<source>&amp;Close</source>
- <translation>Fe&amp;char</translation>
+ <translation>&amp;Close</translation>
</message>
<message>
<source>Close message</source>
- <translation>Fechar mensagem</translation>
+ <translation>Close message</translation>
</message>
</context>
<context>
<name>Kdbx3Reader</name>
<message>
<source>missing database headers</source>
- <translation>cabeçalhos em falta</translation>
+ <translation>missing database headers</translation>
</message>
<message>
<source>Header doesn&apos;t match hash</source>
- <translation>Disparidade de &apos;hash&apos; no cabeçalho</translation>
+ <translation>Header doesn&apos;t match hash</translation>
</message>
<message>
<source>Invalid header id size</source>
- <translation>Tamanho do id do cabeçalho inválido</translation>
+ <translation>Invalid header id size</translation>
</message>
<message>
<source>Invalid header field length</source>
- <translation>Comprimento do campo de cabeçalho inválido</translation>
+ <translation>Invalid header field length</translation>
</message>
<message>
<source>Invalid header data length</source>
- <translation>Comprimento dos dados de cabeçalho inválido</translation>
+ <translation>Invalid header data length</translation>
</message>
<message>
<source>Invalid credentials were provided, please try again.
@@ -3667,115 +3679,115 @@ If this reoccurs, then your database file may be corrupt.</source>
<name>Kdbx4Reader</name>
<message>
<source>missing database headers</source>
- <translation>cabeçalhos em falta</translation>
+ <translation>missing database headers</translation>
</message>
<message>
<source>Invalid header checksum size</source>
- <translation>Tamanho inválido para o &apos;checksum&apos; do cabeçalho</translation>
+ <translation>Invalid header checksum size</translation>
</message>
<message>
<source>Header SHA256 mismatch</source>
- <translation>Disparidade no cabeçalho SHA256</translation>
+ <translation>Header SHA256 mismatch</translation>
</message>
<message>
<source>Unknown cipher</source>
- <translation>Cifra desconhecida</translation>
+ <translation>Unknown cipher</translation>
</message>
<message>
<source>Invalid header id size</source>
- <translation>Tamanho do id do cabeçalho inválido</translation>
+ <translation>Invalid header id size</translation>
</message>
<message>
<source>Invalid header field length</source>
- <translation>Comprimento do campo de cabeçalho inválido</translation>
+ <translation>Invalid header field length</translation>
</message>
<message>
<source>Invalid header data length</source>
- <translation>Comprimento dos dados de cabeçalho inválido</translation>
+ <translation>Invalid header data length</translation>
</message>
<message>
<source>Failed to open buffer for KDF parameters in header</source>
- <translation>Erro ao processar os parâmetros KDF no cabeçalho</translation>
+ <translation>Failed to open buffer for KDF parameters in header</translation>
</message>
<message>
<source>Unsupported key derivation function (KDF) or invalid parameters</source>
- <translation>Função de derivação de chave (KDF) não suportada ou parâmetros inválidos</translation>
+ <translation>Unsupported key derivation function (KDF) or invalid parameters</translation>
</message>
<message>
<source>Legacy header fields found in KDBX4 file.</source>
- <translation>Encontrados campos legados no ficheiro KDBX4.</translation>
+ <translation>Legacy header fields found in KDBX4 file.</translation>
</message>
<message>
<source>Invalid inner header id size</source>
- <translation>Tamanho do id do cabeçalho interno inválido</translation>
+ <translation>Invalid inner header id size</translation>
</message>
<message>
<source>Invalid inner header field length</source>
- <translation>Comprimento do campo de cabeçalho interno inválido</translation>
+ <translation>Invalid inner header field length</translation>
</message>
<message>
<source>Invalid inner header binary size</source>
- <translation>Tamanho binário do cabeçalho interno inválido</translation>
+ <translation>Invalid inner header binary size</translation>
</message>
<message>
<source>Unsupported KeePass variant map version.</source>
<extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation>Versão não suportada do mapa variante KeePass.</translation>
+ <translation>Unsupported KeePass variant map version.</translation>
</message>
<message>
<source>Invalid variant map entry name length</source>
<extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation>Comprimento inválido no nome da entrada da variante do mapa</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Invalid variant map entry name data</source>
<extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation>Dados inválidos no nome da entrada da variante do mapa</translation>
+ <translation>Invalid variant map entry name data</translation>
</message>
<message>
<source>Invalid variant map entry value length</source>
<extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation>Comprimento inválido no valor de entrada do mapa</translation>
+ <translation>Invalid variant map entry value length</translation>
</message>
<message>
<source>Invalid variant map entry value data</source>
<extracomment>Translation comment: variant map = data structure for storing meta data</extracomment>
- <translation>Dados inválidos no valor da entrada da variante do mapa</translation>
+ <translation>Invalid variant map entry value data</translation>
</message>
<message>
<source>Invalid variant map Bool entry value length</source>
<extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation>Comprimento inválido do valor booleano da entrada da variante do mapa</translation>
+ <translation>Invalid variant map Bool entry value length</translation>
</message>
<message>
<source>Invalid variant map Int32 entry value length</source>
<extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation>Comprimento inválido do valor da entrada Int32 da variante do mapa</translation>
+ <translation>Invalid variant map Int32 entry value length</translation>
</message>
<message>
<source>Invalid variant map UInt32 entry value length</source>
<extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation>Comprimento inválido do valor da entrada UInt32 da variante do mapa</translation>
+ <translation>Invalid variant map UInt32 entry value length</translation>
</message>
<message>
<source>Invalid variant map Int64 entry value length</source>
<extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation>Comprimento inválido do valor da entrada Int64 da variante do mapa</translation>
+ <translation>Invalid variant map Int64 entry value length</translation>
</message>
<message>
<source>Invalid variant map UInt64 entry value length</source>
<extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation>Comprimento inválido do valor da entrada UInt64 da variante do mapa</translation>
+ <translation>Invalid variant map UInt64 entry value length</translation>
</message>
<message>
<source>Invalid variant map entry type</source>
<extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation>Tipo inválido da entrada da variante do mapa</translation>
+ <translation>Invalid variant map entry type</translation>
</message>
<message>
<source>Invalid variant map field type size</source>
<extracomment>Translation: variant map = data structure for storing meta data</extracomment>
- <translation>Tamanho inválido do tipo de campo da variante do mapa</translation>
+ <translation>Invalid variant map field type size</translation>
</message>
<message>
<source>Invalid credentials were provided, please try again.
@@ -3795,17 +3807,17 @@ If this reoccurs, then your database file may be corrupt.</source>
<name>Kdbx4Writer</name>
<message>
<source>Invalid symmetric cipher algorithm.</source>
- <translation>Algoritmo inválido de cifra simétrica.</translation>
+ <translation>Invalid symmetric cipher algorithm.</translation>
</message>
<message>
<source>Invalid symmetric cipher IV size.</source>
<comment>IV = Initialization Vector for symmetric cipher</comment>
- <translation>Tamanho inválido da cifra simétrica IV.</translation>
+ <translation>Invalid symmetric cipher IV size.</translation>
</message>
<message>
<source>Failed to serialize KDF parameters variant map</source>
<extracomment>Translation comment: variant map = data structure for storing meta data</extracomment>
- <translation>Erro ao serializar os parâmetros KDF da variante do mapa</translation>
+ <translation>Failed to serialise KDF parameters variant map</translation>
</message>
<message>
<source>Unable to calculate database key: %1</source>
@@ -3816,193 +3828,191 @@ If this reoccurs, then your database file may be corrupt.</source>
<name>KdbxReader</name>
<message>
<source>Unsupported cipher</source>
- <translation>Cifra não suportada</translation>
+ <translation>Unsupported cipher</translation>
</message>
<message>
<source>Invalid compression flags length</source>
- <translation>Comprimento inválido da compressão de flags</translation>
+ <translation>Invalid compression flags length</translation>
</message>
<message>
<source>Unsupported compression algorithm</source>
- <translation>Algoritmo de compressão não suportado</translation>
+ <translation>Unsupported compression algorithm</translation>
</message>
<message>
<source>Invalid master seed size</source>
- <translation>Tamanho inválido da semente mestre</translation>
+ <translation>Invalid master seed size</translation>
</message>
<message>
<source>Invalid transform seed size</source>
- <translation>Tamanho inválido da semente de transformação</translation>
+ <translation>Invalid transform seed size</translation>
</message>
<message>
<source>Invalid transform rounds size</source>
- <translation>Tamanho inválido para os ciclos de transformação</translation>
+ <translation>Invalid transform rounds size</translation>
</message>
<message>
<source>Invalid start bytes size</source>
- <translation>Tamanho inválido dos bytes iniciais</translation>
+ <translation>Invalid start bytes size</translation>
</message>
<message>
<source>Invalid random stream id size</source>
- <translation>Tamanho inválido do ID do fluxo aleatório</translation>
+ <translation>Invalid random stream id size</translation>
</message>
<message>
<source>Invalid inner random stream cipher</source>
- <translation>Cifra inválida de fluxo aleatório interno</translation>
+ <translation>Invalid inner random stream cipher</translation>
</message>
<message>
<source>Not a KeePass database.</source>
- <translation>Não é uma base de dados do KeePass.</translation>
+ <translation>Not a KeePass database.</translation>
</message>
<message>
<source>The selected file is an old KeePass 1 database (.kdb).
You can import it by clicking on Database &gt; 'Import KeePass 1 database...'.
This is a one-way migration. You won&apos;t be able to open the imported database with the old KeePassX 0.4 version.</source>
- <translation>O ficheiro selecionado é uma base de dados do KeePass 1 (.kdb).
+ <translation>The selected file is an old KeePass 1 database (.kdb).
-Pode importá-lo clicando em Base de dados - &gt; &apos;Importar base de dados do KeePass 1...&apos;.
-Esta é uma migração unidirecional. Não será possível abrir a base de dados importada com a versão 0.4 do KeePassX.</translation>
+You can import it by clicking on Database &gt; &apos;Import KeePass 1 database...&apos;.
+This is a one-way migration. You won&apos;t be able to open the imported database with the old KeePassX 0.4 version.</translation>
</message>
<message>
<source>Unsupported KeePass 2 database version.</source>
- <translation>Versão da base de dados KeePass2 não suportada.</translation>
+ <translation>Unsupported KeePass 2 database version.</translation>
</message>
<message>
<source>Invalid cipher uuid length: %1 (length=%2)</source>
- <translation>Tamanho inválido para o UUID da cifra: %1 (tamanho=%2)</translation>
+ <translation>Invalid cipher uuid length: %1 (length=%2)</translation>
</message>
<message>
<source>Unable to parse UUID: %1</source>
- <translation>Não foi possível processar UUID: %1</translation>
+ <translation>Unable to parse UUID: %1</translation>
</message>
<message>
<source>Failed to read database file.</source>
- <translation>Não foi possível ler o ficheiro da base de dados.</translation>
+ <translation>Failed to read database file.</translation>
</message>
</context>
<context>
<name>KdbxXmlReader</name>
<message>
<source>XML parsing failure: %1</source>
- <translation>Erro ao processar o XML: %1</translation>
+ <translation>XML parsing failure: %1</translation>
</message>
<message>
<source>No root group</source>
- <translation>Sem grupo root</translation>
+ <translation>No root group</translation>
</message>
<message>
<source>Missing icon uuid or data</source>
- <translation>Dados ou UUID do ícone em falta</translation>
+ <translation>Missing icon uuid or data</translation>
</message>
<message>
<source>Missing custom data key or value</source>
- <translation>Valor ou chave de dados personalizados em falta</translation>
+ <translation>Missing custom data key or value</translation>
</message>
<message>
<source>Multiple group elements</source>
- <translation>Múltiplos elementos de grupo</translation>
+ <translation>Multiple group elements</translation>
</message>
<message>
<source>Null group uuid</source>
- <translation>UUID de grupo nulo</translation>
+ <translation>Null group uuid</translation>
</message>
<message>
<source>Invalid group icon number</source>
- <translation>Número inválido de ícone de grupo</translation>
+ <translation>Invalid group icon number</translation>
</message>
<message>
<source>Invalid EnableAutoType value</source>
- <translation>Valor inválido para EnableAutoType</translation>
+ <translation>Invalid EnableAutoType value</translation>
</message>
<message>
<source>Invalid EnableSearching value</source>
- <translation>Valor inválido para EnableSearching</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>No group uuid found</source>
- <translation>UUID de grupo não encontrado</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Null DeleteObject uuid</source>
- <translation>UUID nulo em DeleteObject</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Missing DeletedObject uuid or time</source>
- <translation>Tempo ou UUID em falta para DeletedObject</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Null entry uuid</source>
- <translation>Entrada de UUID nula</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Invalid entry icon number</source>
- <translation>Número inválido na entrada de ícone</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>History element in history entry</source>
- <translation>Elemento de histórico na entrada do histórico</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>No entry uuid found</source>
- <translation>Não foi encontrado o UUID da entrada</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>History element with different uuid</source>
- <translation>Elemento do histórico com UUID diferente</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Duplicate custom attribute found</source>
- <translation>Encontrado atributo personalizado em duplicado</translation>
+ <translation>Duplicate custom attribute found</translation>
</message>
<message>
<source>Entry string key or value missing</source>
- <translation>Chave &apos;string&apos; ou valor em falta</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Entry binary key or value missing</source>
- <translation>Chave binária ou valor em falta</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Auto-type association window or sequence missing</source>
- <translation>Associação de escrita automática ou sequência em falta</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Invalid bool value</source>
- <translation>Valor booleano inválido</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Invalid date time value</source>
- <translation>Valor de data/hora inválido</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Invalid color value</source>
- <translation>Valor de cor inválido</translation>
+ <translation>Invalid colour value</translation>
</message>
<message>
<source>Invalid color rgb part</source>
- <translation>Parte da cor RGB inválida</translation>
+ <translation>Invalid colour rgb part</translation>
</message>
<message>
<source>Invalid number value</source>
- <translation>Valor numérico inválido</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Invalid uuid value</source>
- <translation>Valor UUID inválido</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Unable to decompress binary</source>
<extracomment>Translator meant is a binary data inside an entry</extracomment>
- <translation>Não foi possível descomprimir o binário</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>XML error:
%1
Line %2, column %3</source>
- <translation>Erro no XML:
-%1
-Linha %2, coluna %3</translation>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -4021,18 +4031,18 @@ Linha %2, coluna %3</translation>
</message>
<message>
<source>File too large to be a private key</source>
- <translation>Ficheiro muito grande para ser uma chave privada</translation>
+ <translation>File too large to be a private key</translation>
</message>
<message>
<source>Failed to open private key</source>
- <translation>Falha ao abrir a chave privada</translation>
+ <translation>Failed to open private key</translation>
</message>
</context>
<context>
<name>KeePass1OpenWidget</name>
<message>
<source>Unable to open the database.</source>
- <translation>Não foi possível abrir a base de dados.</translation>
+ <translation>Unable to open the database.</translation>
</message>
<message>
<source>Import KeePass1 Database</source>
@@ -4043,148 +4053,148 @@ Linha %2, coluna %3</translation>
<name>KeePass1Reader</name>
<message>
<source>Unable to read keyfile.</source>
- <translation>Não foi possível ler o ficheiro-chave.</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Not a KeePass database.</source>
- <translation>Não é uma base de dados do KeePass.</translation>
+ <translation>Not a KeePass database.</translation>
</message>
<message>
<source>Unsupported encryption algorithm.</source>
- <translation>Algoritmo de cifra não suportado.</translation>
+ <translation>Unsupported encryption algorithm.</translation>
</message>
<message>
<source>Unsupported KeePass database version.</source>
- <translation>Versão da base de dados KeePass não suportada.</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Unable to read encryption IV</source>
<comment>IV = Initialization Vector for symmetric cipher</comment>
- <translation>Não foi possível ler a cifra IV</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Invalid number of groups</source>
- <translation>Número inválido de grupos</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Invalid number of entries</source>
- <translation>Número inválido de entradas</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Invalid content hash size</source>
- <translation>Tamanho inválido para a &apos;hash&apos; do conteúdo</translation>
+ <translation>Invalid content hash size</translation>
</message>
<message>
<source>Invalid transform seed size</source>
- <translation>Tamanho inválido da semente de transformação</translation>
+ <translation>Invalid transform seed size</translation>
</message>
<message>
<source>Invalid number of transform rounds</source>
- <translation>Número inválido para os ciclos de transformação</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Unable to construct group tree</source>
- <translation>Não foi possível criar a árvore de grupo</translation>
+ <translation>Unable to construct group tree</translation>
</message>
<message>
<source>Root</source>
- <translation>Raiz</translation>
+ <translation>Root</translation>
</message>
<message>
<source>Key transformation failed</source>
- <translation>Erro ao transformar a chave</translation>
+ <translation>Key transformation failed</translation>
</message>
<message>
<source>Invalid group field type number</source>
- <translation>Número inválido do tipo de grupo de campo</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Invalid group field size</source>
- <translation>Tamanho inválido do grupo de campo</translation>
+ <translation>Invalid group field size</translation>
</message>
<message>
<source>Read group field data doesn&apos;t match size</source>
- <translation>Leitura de grupo de dados do campo não coincidem no tamanho</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Incorrect group id field size</source>
- <translation>Tamanho incorreto de campo de ID de grupo</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Incorrect group creation time field size</source>
- <translation>Tamanho incorreto do campo do grupo de tempo de criação</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Incorrect group modification time field size</source>
- <translation>Tamanho de campo de hora de alteração de grupo incorreto</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Incorrect group access time field size</source>
- <translation>Tamanho de campo de tempo de acesso de grupo incorreto</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Incorrect group expiry time field size</source>
- <translation>Tamanho de campo de tempo de expiração de grupo incorreto</translation>
+ <translation>Incorrect group expiry time field size</translation>
</message>
<message>
<source>Incorrect group icon field size</source>
- <translation>Tamanho do campo do ícone de grupo incorreto</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Incorrect group level field size</source>
- <translation>Tamanho de campo do nível de grupo incorreto</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Invalid group field type</source>
- <translation>Tipo inválido para o campo de grupo</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Missing group id or level</source>
- <translation>ID ou nível de grupo em falta</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Missing entry field type number</source>
- <translation>Falta a entrada de tipo número no campo</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Invalid entry field size</source>
- <translation>Tamanho inválido para o campo da entrada</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Read entry field data doesn&apos;t match size</source>
- <translation>Dados de campo de entrada não coincidem no tamanho</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Invalid entry uuid field size</source>
- <translation>Tamanho da entrada para o campo UUID inválido</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Invalid entry group id field size</source>
- <translation>Tamanho da entrada para o campo identificador de grupo inválido</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Invalid entry icon field size</source>
- <translation>Tamanho da entrada para o campo ícone inválido</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Invalid entry creation time field size</source>
- <translation>Tamanho da entrada para o campo tempo de criação inválido</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Invalid entry modification time field size</source>
- <translation>Tamanho da entrada para o campo tempo de alteração inválido</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Invalid entry expiry time field size</source>
- <translation>Tamanho da entrada para o campo tempo de expiração inválido</translation>
+ <translation>Invalid entry expiry time field size</translation>
</message>
<message>
<source>Invalid entry field type</source>
- <translation>Tipo inválido para o campo da entrada</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>unable to seek to content position</source>
- <translation>Não foi possível pesquisar no conteúdo</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Invalid credentials were provided, please try again.
@@ -4208,7 +4218,7 @@ If this reoccurs, then your database file may be corrupt.</source>
</message>
<message>
<source>Imported from %1</source>
- <translation>Importado de %1</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Exported to %1</source>
@@ -4216,7 +4226,7 @@ If this reoccurs, then your database file may be corrupt.</source>
</message>
<message>
<source>Synchronized with %1</source>
- <translation type="unfinished"/>
+ <translation>Synchronised with %1</translation>
</message>
<message>
<source>Import is disabled in settings</source>
@@ -4240,95 +4250,94 @@ If this reoccurs, then your database file may be corrupt.</source>
</message>
<message>
<source>Synchronized with</source>
- <translation type="unfinished"/>
+ <translation>Synchronised with</translation>
</message>
</context>
<context>
<name>KeyComponentWidget</name>
<message>
<source>Key Component</source>
- <translation>Componente chave</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Key Component Description</source>
- <translation>Descrição do componente chave</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Cancel</source>
- <translation>Cancelar</translation>
+ <translation>Cancel</translation>
</message>
<message>
<source>Key Component set, click to change or remove</source>
- <translation>Componente chave definido, clique para alterar ou remover</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Add %1</source>
<comment>Add a key component</comment>
- <translation>Adicionar %1</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Change %1</source>
<comment>Change a key component</comment>
- <translation>Alterar %1</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Remove %1</source>
<comment>Remove a key component</comment>
- <translation>Remover %1</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>%1 set, click to change or remove</source>
<comment>Change or remove a key component</comment>
- <translation>%1 definido, clique para alterar ou remover</translation>
+ <translation type="unfinished"/>
</message>
</context>
<context>
<name>KeyFileEditWidget</name>
<message>
<source>Generate</source>
- <translation>Gerar</translation>
+ <translation>Generate</translation>
</message>
<message>
<source>Key File</source>
- <translation>Ficheiro-chave</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>&lt;p&gt;You can add a key file containing random bytes for additional security.&lt;/p&gt;&lt;p&gt;You must keep it secret and never lose it or you will be locked out!&lt;/p&gt;</source>
- <translation>&lt;p&gt;Para mais segurança, pode adicionar um ficheiro-chave que contenha dados aleatórios.&lt;/p&gt;&lt;p&gt;Tem que o manter secreto e não o pode perder pois se o fizer não mais poderá abrir a base de dados.&lt;/p&gt;</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Legacy key file format</source>
- <translation>Formato legado de ficheiro-chave</translation>
+ <translation>Legacy key file format</translation>
</message>
<message>
<source>Error loading the key file '%1'
Message: %2</source>
- <translation>Erro ao carregar o ficheiro-chave %1
-Mensagem: %2</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Key files</source>
- <translation>Ficheiros-chave</translation>
+ <translation>Key files</translation>
</message>
<message>
<source>All files</source>
- <translation>Todos os ficheiros</translation>
+ <translation>All files</translation>
</message>
<message>
<source>Create Key File...</source>
- <translation>Criar ficheiro-chave...</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Error creating key file</source>
- <translation>Erro ao criar o ficheiro-chave</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Unable to create key file: %1</source>
- <translation>Não foi possível criar o ficheiro-chave: %1</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Select a key file</source>
- <translation>Selecione o ficheiro-chave</translation>
+ <translation>Select a key file</translation>
</message>
<message>
<source>Key file selection</source>
@@ -4340,7 +4349,7 @@ Mensagem: %2</translation>
</message>
<message>
<source>Browse...</source>
- <translation>Procurar...</translation>
+ <translation>Browse...</translation>
</message>
<message>
<source>Generate a new key file</source>
@@ -4379,51 +4388,51 @@ Generate a new key file in the database security settings.</source>
<name>MainWindow</name>
<message>
<source>&amp;Database</source>
- <translation>Base &amp;de dados</translation>
+ <translation>&amp;Database</translation>
</message>
<message>
<source>&amp;Help</source>
- <translation>Aj&amp;uda</translation>
+ <translation>&amp;Help</translation>
</message>
<message>
<source>&amp;Groups</source>
- <translation>&amp;Grupos</translation>
+ <translation>&amp;Groups</translation>
</message>
<message>
<source>&amp;Tools</source>
- <translation>Ferramen&amp;tas</translation>
+ <translation>&amp;Tools</translation>
</message>
<message>
<source>&amp;Quit</source>
- <translation>&amp;Sair</translation>
+ <translation>&amp;Quit</translation>
</message>
<message>
<source>&amp;About</source>
- <translation>&amp;Acerca</translation>
+ <translation>&amp;About</translation>
</message>
<message>
<source>Database settings</source>
- <translation>Definições da base de dados</translation>
+ <translation>Database settings</translation>
</message>
<message>
<source>Copy username to clipboard</source>
- <translation>Copiar nome de utilizador para a área de transferência</translation>
+ <translation>Copy username to clipboard</translation>
</message>
<message>
<source>Copy password to clipboard</source>
- <translation>Copiar palavra-passe para a área de transferência</translation>
+ <translation>Copy password to clipboard</translation>
</message>
<message>
<source>&amp;Settings</source>
- <translation>Definiçõe&amp;s</translation>
+ <translation>&amp;Settings</translation>
</message>
<message>
<source>&amp;Title</source>
- <translation>&amp;Título</translation>
+ <translation>&amp;Title</translation>
</message>
<message>
<source>Copy title to clipboard</source>
- <translation>Copiar título para a área de transferência</translation>
+ <translation>Copy title to clipboard</translation>
</message>
<message>
<source>&amp;URL</source>
@@ -4431,123 +4440,119 @@ Generate a new key file in the database security settings.</source>
</message>
<message>
<source>Copy URL to clipboard</source>
- <translation>Copiar URL para a área de transferência</translation>
+ <translation>Copy URL to clipboard</translation>
</message>
<message>
<source>&amp;Notes</source>
- <translation>&amp;Notas</translation>
+ <translation>&amp;Notes</translation>
</message>
<message>
<source>Copy notes to clipboard</source>
- <translation>Copiar notas para a área de transferência</translation>
+ <translation>Copy notes to clipboard</translation>
</message>
<message>
<source>Copy &amp;TOTP</source>
- <translation>Copiar &amp;TOTP</translation>
+ <translation>Copy &amp;TOTP</translation>
</message>
<message>
<source>E&amp;mpty recycle bin</source>
- <translation>Limpar reciclage&amp;m</translation>
+ <translation>E&amp;mpty recycle bin</translation>
</message>
<message>
<source>Clear history</source>
- <translation>Limpar histórico</translation>
+ <translation>Clear history</translation>
</message>
<message>
<source>Access error for config file %1</source>
- <translation>Erro de acesso ao ficheiro %1</translation>
+ <translation>Access error for config file %1</translation>
</message>
<message>
<source>Settings</source>
- <translation>Definições</translation>
+ <translation>Settings</translation>
</message>
<message>
<source>Toggle window</source>
- <translation>Alternar janela</translation>
+ <translation>Toggle window</translation>
</message>
<message>
<source>Quit KeePassXC</source>
- <translation>Sair do KeePassXC</translation>
+ <translation>Quit KeePassXC</translation>
</message>
<message>
<source>Please touch the button on your YubiKey!</source>
- <translation>Toque no botão da sua YubiKey!</translation>
+ <translation>Please touch the button on your YubiKey!</translation>
</message>
<message>
<source>WARNING: You are using an unstable build of KeePassXC!
There is a high risk of corruption, maintain a backup of your databases.
This version is not meant for production use.</source>
- <translation>AVISO: está a utilizar uma versão instável do KeePassXC!
-Existe um risco bastante grande e deve efetuar um backup da base de dados.
-Esta versão não deve ser utilizada para uma utilização regular.</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>&amp;Donate</source>
- <translation>&amp;Donativos</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard!
We recommend you use the AppImage available on our downloads page.</source>
- <translation>AVISO: a versão Qt do seu sistema pode causar o encerramento do KeePassXC se estiver a utilizar o teclado no ecrã (On-Screen Keyboard)!
-Recomendamos que utilize a versão AppImage disponível no nosso site.</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>&amp;Import</source>
- <translation>&amp;Importar</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Create a new database</source>
- <translation>Criar uma nova base de dados</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Merge from another KDBX database</source>
- <translation>Combinar com outra base de dados KDBX</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Add a new entry</source>
- <translation>Adicionar uma nova entrada</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>View or edit entry</source>
- <translation>Ver ou editar entrada</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Add a new group</source>
- <translation>Adicionar um novo grupo</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Perform &amp;Auto-Type</source>
- <translation>Execut&amp;ar escrita automática</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Open &amp;URL</source>
- <translation>Abrir &amp;URL</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Import a KeePass 1 database</source>
- <translation>Importar base de dados do KeePass 1</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Import a CSV file</source>
- <translation>Importar ficheiro CSV</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>NOTE: You are using a pre-release version of KeePassXC!
Expect some bugs and minor issues, this version is not meant for production use.</source>
- <translation>NOTA: está a utilizar uma versão de teste do KeePassXC!
-Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes de produção.</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Check for updates on startup?</source>
- <translation>Verificar se existem atualizações ao iniciar?</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Would you like KeePassXC to check for updates on startup?</source>
- <translation>Deseja que o KeePassXC procure atualizações ao iniciar?</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>You can always check for updates manually from the application menu.</source>
- <translation>Também pode verificar se existem atualizações através do menu da aplicação.</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>&amp;Export</source>
@@ -4735,7 +4740,7 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes
</message>
<message>
<source>Show TOTP</source>
- <translation>Mostrar TOTP</translation>
+ <translation>Show TOTP</translation>
</message>
<message>
<source>Show QR Code</source>
@@ -4817,12 +4822,32 @@ 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 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>
<message>
<source>Database settings</source>
- <translation>Definições da base de dados</translation>
+ <translation>Database settings</translation>
</message>
<message>
<source>Edit database settings</source>
@@ -4830,7 +4855,7 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes
</message>
<message>
<source>Unlock database</source>
- <translation>Desbloquear base de dados</translation>
+ <translation>Unlock database</translation>
</message>
<message>
<source>Unlock database to show more information</source>
@@ -4838,7 +4863,7 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes
</message>
<message>
<source>Lock database</source>
- <translation>Bloquear base de dados</translation>
+ <translation>Lock database</translation>
</message>
</context>
<context>
@@ -4856,59 +4881,59 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes
<name>Merger</name>
<message>
<source>Creating missing %1 [%2]</source>
- <translation>A criar %1 [%2]</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Relocating %1 [%2]</source>
- <translation>A alocar %1 [%2]</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Overwriting %1 [%2]</source>
- <translation>A substituir %1 [%2]</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>older entry merged from database &quot;%1&quot;</source>
- <translation>entrada antiga combinada da base de dados %1</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Adding backup for older target %1 [%2]</source>
- <translation>A adicionar backup para o destino antigo %1 [%2]</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Adding backup for older source %1 [%2]</source>
- <translation>A adicionar backup para a origem antiga %1 [%2]</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Reapplying older target entry on top of newer source %1 [%2]</source>
- <translation>A reaplicar a entrada de destino antiga na origem recente %1 [%2]</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Reapplying older source entry on top of newer target %1 [%2]</source>
- <translation>A reaplicar a entrada de origem antiga no destinio recente %1 [%2]</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Synchronizing from newer source %1 [%2]</source>
- <translation>A sincronizar da origem recente %1 [%2]</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Synchronizing from older source %1 [%2]</source>
- <translation>A sincronizar da origem antiga %1 [%2]</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Deleting child %1 [%2]</source>
- <translation>A eliminar dependente %1 [%2]</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Deleting orphan %1 [%2]</source>
- <translation>A eliminar órfão %1 [%2]</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Changed deleted objects</source>
- <translation>Objetos eliminados alterados</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Adding missing icon %1</source>
- <translation>Adicionar ícone em falta %1</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Removed custom data %1 [%2]</source>
@@ -4923,35 +4948,35 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes
<name>NewDatabaseWizard</name>
<message>
<source>Create a new KeePassXC database...</source>
- <translation>A criar uma nova base de dados do KeePassXC...</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Root</source>
<comment>Root group</comment>
- <translation>Raiz</translation>
+ <translation>Root</translation>
</message>
</context>
<context>
<name>NewDatabaseWizardPage</name>
<message>
<source>WizardPage</source>
- <translation>Assistente</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
- <translation>Aqui pode ajustar as definições de cifra da sua base de dados. Não se preocupe porque pode sempre reverter as alterações nas definições.</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Advanced Settings</source>
- <translation>Definições avançadas</translation>
+ <translation>Advanced Settings</translation>
</message>
<message>
<source>Simple Settings</source>
- <translation>Definições básicas</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Encryption Settings</source>
- <translation>Definições de cifra</translation>
+ <translation>Encryption Settings</translation>
</message>
</context>
<context>
@@ -4969,22 +4994,22 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes
<name>NewDatabaseWizardPageEncryption</name>
<message>
<source>Encryption Settings</source>
- <translation>Definições de cifra</translation>
+ <translation>Encryption Settings</translation>
</message>
<message>
<source>Here you can adjust the database encryption settings. Don&apos;t worry, you can change them later in the database settings.</source>
- <translation>Aqui pode ajustar as definições de cifra da sua base de dados. Não se preocupe porque pode sempre reverter as alterações nas definições.</translation>
+ <translation type="unfinished"/>
</message>
</context>
<context>
<name>NewDatabaseWizardPageMetaData</name>
<message>
<source>General Database Information</source>
- <translation>Informação geral sobre a base de dados</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Please fill in the display name and an optional description for your new database:</source>
- <translation>Preencha o nome de exibição e uma descrição extra para a sua nova base de dados:</translation>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -5064,99 +5089,99 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes
<name>OpenSSHKey</name>
<message>
<source>Invalid key file, expecting an OpenSSH key</source>
- <translation>Chave inválida, esperada chave OpenSSH</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>PEM boundary mismatch</source>
- <translation>Disparidade nos limites PEM</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Base64 decoding failed</source>
- <translation>Erro de descodificação Base64</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Key file way too small.</source>
- <translation>Ficheiro-chave muito pequeno.</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Key file magic header id invalid</source>
- <translation>ID do cabeçalho mágico do ficheiro-chave inválida</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Found zero keys</source>
- <translation>Encontradas zero chaves</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Failed to read public key.</source>
- <translation>Erro ao ler a chave pública.</translation>
+ <translation>Failed to read public key.</translation>
</message>
<message>
<source>Corrupted key file, reading private key failed</source>
- <translation>Ficheiro danificado, erro ao ler a chave privada</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>No private key payload to decrypt</source>
- <translation>Não existe chave privada para decifrar</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Trying to run KDF without cipher</source>
- <translation>A tentar executar KDF sem cifra</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Passphrase is required to decrypt this key</source>
- <translation>Requer frase-chave para decifrar esta chave</translation>
+ <translation>Passphrase is required to decrypt this key</translation>
</message>
<message>
<source>Key derivation failed, key file corrupted?</source>
- <translation>Erro na derivação da chave, ficheiro-chave danificado?</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Decryption failed, wrong passphrase?</source>
- <translation>Erro ao decifrar, frase-chave errada?</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Unexpected EOF while reading public key</source>
- <translation>EOF inesperado ao ler a chave pública</translation>
+ <translation>Unexpected EOF while reading public key</translation>
</message>
<message>
<source>Unexpected EOF while reading private key</source>
- <translation>EOF inesperado ao ler a chave privada</translation>
+ <translation>Unexpected EOF while reading private key</translation>
</message>
<message>
<source>Can&apos;t write public key as it is empty</source>
- <translation>Incapaz de escrever a chave pública porque está vazia</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Unexpected EOF when writing public key</source>
- <translation>EOF inesperado ao escrever a chave pública</translation>
+ <translation>Unexpected EOF when writing public key</translation>
</message>
<message>
<source>Can&apos;t write private key as it is empty</source>
- <translation>Incapaz de escrever a chave privada porque está vazia</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Unexpected EOF when writing private key</source>
- <translation>EOF inesperado ao escrever a chave privada</translation>
+ <translation>Unexpected EOF when writing private key</translation>
</message>
<message>
<source>Unsupported key type: %1</source>
- <translation>Tipo de chave não suportado: %1</translation>
+ <translation>Unsupported key type: %1</translation>
</message>
<message>
<source>Unknown cipher: %1</source>
- <translation>Cifra desconhecida: %1</translation>
+ <translation>Unknown cipher: %1</translation>
</message>
<message>
<source>Cipher IV is too short for MD5 kdf</source>
- <translation>Cifra IV é muito curta para MD kdf</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Unknown KDF: %1</source>
- <translation>KDF desconhecido: %1</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Unknown key type: %1</source>
- <translation>Tipo de chave desconhecido: %1</translation>
+ <translation>Unknown key type: %1</translation>
</message>
</context>
<context>
@@ -5186,23 +5211,23 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes
<name>PasswordEditWidget</name>
<message>
<source>Enter password:</source>
- <translation>Introduza a palavra-passe:</translation>
+ <translation>Enter password:</translation>
</message>
<message>
<source>Confirm password:</source>
- <translation>Confirmação de palavra-passe:</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Password</source>
- <translation>Palavra-passe</translation>
+ <translation>Password</translation>
</message>
<message>
<source>&lt;p&gt;A password is the primary method for securing your database.&lt;/p&gt;&lt;p&gt;Good passwords are long and unique. KeePassXC can generate one for you.&lt;/p&gt;</source>
- <translation>&lt;p&gt;A palavra-passe é o método primário para proteger a sua base de dados.&lt;/p&gt;&lt;p&gt;As boas palavras-passe são extensão e únicas. O KeePassXC pode gerar uma palavra-passe por si.&lt;/p&gt;</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Passwords do not match.</source>
- <translation>Disparidade nas palavras-passe.</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Password field</source>
@@ -5217,172 +5242,132 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes
<name>PasswordGeneratorWidget</name>
<message>
<source>%p%</source>
- <translation>%p%</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>strength</source>
<comment>Password strength</comment>
- <translation>qualidade</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>entropy</source>
- <translation>entropia</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Password</source>
- <translation>Palavra-passe</translation>
+ <translation>Password</translation>
</message>
<message>
<source>Character Types</source>
- <translation>Tipos de caracteres</translation>
+ <translation>Character Types</translation>
</message>
<message>
<source>Numbers</source>
- <translation>Números</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Extended ASCII</source>
- <translation>ASCII expandido</translation>
+ <translation>Extended ASCII</translation>
</message>
<message>
<source>Exclude look-alike characters</source>
- <translation>Excluir caracteres semelhantes</translation>
+ <translation>Exclude look-alike characters</translation>
</message>
<message>
<source>Pick characters from every group</source>
- <translation>Obter caracteres de todos os grupos</translation>
+ <translation>Pick characters from every group</translation>
</message>
<message>
<source>&amp;Length:</source>
- <translation>&amp;Comprimento:</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Passphrase</source>
- <translation>Frase-chave</translation>
+ <translation>Passphrase</translation>
</message>
<message>
<source>Wordlist:</source>
- <translation>Lista de palavras:</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Word Separator:</source>
- <translation>Separador de palavras:</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Close</source>
- <translation>Fechar</translation>
+ <translation>Close</translation>
</message>
<message>
<source>Entropy: %1 bit</source>
- <translation>Entropia: %1 bit</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Password Quality: %1</source>
- <translation>Qualidade da palavra-passe: %1</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Poor</source>
<comment>Password quality</comment>
- <translation>Má</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Weak</source>
<comment>Password quality</comment>
- <translation>Fraca</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Good</source>
<comment>Password quality</comment>
- <translation>Boa</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Excellent</source>
<comment>Password quality</comment>
- <translation>Excelente</translation>
- </message>
- <message>
- <source>ExtendedASCII</source>
- <translation>ASCII expandido</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Switch to advanced mode</source>
- <translation>Ativar modo avançado</translation>
+ <translation type="unfinished"/>
</message>
<message>
<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>
+ <translation>Advanced</translation>
</message>
<message>
<source>Braces</source>
- <translation>Parênteses</translation>
- </message>
- <message>
- <source>{[(</source>
- <translation>{[(</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Punctuation</source>
- <translation>Pontuação</translation>
- </message>
- <message>
- <source>.,:;</source>
- <translation>.,:;</translation>
+ <translation type="unfinished"/>
</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>
+ <translation type="unfinished"/>
</message>
<message>
<source>Logograms</source>
- <translation>Logo-gramas</translation>
- </message>
- <message>
- <source>#$%&amp;&amp;@^`~</source>
- <translation>#$%&amp;&amp;@^`~</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Character set to exclude from generated password</source>
- <translation>Conjunto de caracteres a excluir da palavra-passe gerada</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Do not include:</source>
- <translation>Não incluir:</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Add non-hex letters to &quot;do not include&quot; list</source>
- <translation>Adicionar letras &apos;non-hex&apos; à lista de exclusão</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Hex</source>
- <translation>Hex</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Excluded characters: &quot;0&quot;, &quot;1&quot;, &quot;l&quot;, &quot;I&quot;, &quot;O&quot;, &quot;|&quot;, &quot;ï¹’&quot;</source>
- <translation>Caracteres excluídos: &quot;0&quot;, &quot;1&quot;, &quot;l&quot;, &quot;I&quot;, &quot;O&quot;, &quot;|&quot;, &quot;﹒&quot;</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Generated password</source>
@@ -5462,7 +5447,7 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes
</message>
<message>
<source>Word Count:</source>
- <translation>Número de palavras:</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Esc</source>
@@ -5478,18 +5463,22 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes
</message>
<message>
<source>Clear</source>
- <translation>Limpar</translation>
+ <translation>Clear</translation>
</message>
<message>
<source>Regenerate password (%1)</source>
<translation type="unfinished"/>
</message>
+ <message>
+ <source>Special Characters</source>
+ <translation type="unfinished"/>
+ </message>
</context>
<context>
<name>QApplication</name>
<message>
<source>KeeShare</source>
- <translation>KeeShare</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Statistics</source>
@@ -5521,23 +5510,23 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes
</message>
<message>
<source>Password expiry was %1</source>
- <translation type="unfinished"/>
+ <translation>Password expiry was %1</translation>
</message>
<message>
<source>Password is about to expire</source>
- <translation type="unfinished"/>
+ <translation>Password is about to expire</translation>
</message>
<message>
<source>Password expires in %1 days</source>
- <translation type="unfinished"/>
+ <translation>Password expires in %1 days</translation>
</message>
<message>
<source>Password will expire soon</source>
- <translation type="unfinished"/>
+ <translation>Password will expire soon</translation>
</message>
<message>
<source>Password expires on %1</source>
- <translation type="unfinished"/>
+ <translation>Password expires on %1</translation>
</message>
<message>
<source>Health Check</source>
@@ -5552,35 +5541,35 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes
<name>QMessageBox</name>
<message>
<source>Overwrite</source>
- <translation>Substituir</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Delete</source>
- <translation>Eliminar</translation>
+ <translation>Delete</translation>
</message>
<message>
<source>Move</source>
- <translation>Mover</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Empty</source>
- <translation>Vazio</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Remove</source>
- <translation>Remover</translation>
+ <translation>Remove</translation>
</message>
<message>
<source>Skip</source>
- <translation>Ignorar</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Disable</source>
- <translation>Desativar</translation>
+ <translation>Disable</translation>
</message>
<message>
<source>Merge</source>
- <translation>Combinar</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Continue</source>
@@ -5591,79 +5580,79 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes
<name>QObject</name>
<message>
<source>Database not opened</source>
- <translation>Base de dados não aberta</translation>
+ <translation>Database not opened</translation>
</message>
<message>
<source>Database hash not available</source>
- <translation>&apos;Hash&apos; da base de dados não disponível</translation>
+ <translation>Database hash not available</translation>
</message>
<message>
<source>Client public key not received</source>
- <translation>Chave pública do cliente não recebida</translation>
+ <translation>Client public key not received</translation>
</message>
<message>
<source>Cannot decrypt message</source>
- <translation>Não foi possível decifrar a mensagem</translation>
+ <translation>Cannot decrypt message</translation>
</message>
<message>
<source>Action cancelled or denied</source>
- <translation>Ação cancelada ou recusada</translation>
+ <translation>Action cancelled or denied</translation>
</message>
<message>
<source>KeePassXC association failed, try again</source>
- <translation>Erro ao associar o KeePassXC. Tente novamente.</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Encryption key is not recognized</source>
- <translation>Chave de cifra não reconhecida</translation>
+ <translation>Encryption key is not recognised</translation>
</message>
<message>
<source>Incorrect action</source>
- <translation>Ação incorreta</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Empty message received</source>
- <translation>Recebida mensagem vazia</translation>
+ <translation>Empty message received</translation>
</message>
<message>
<source>No URL provided</source>
- <translation>URL não disponibilizado</translation>
+ <translation>No URL provided</translation>
</message>
<message>
<source>No logins found</source>
- <translation>Não existem credenciais</translation>
+ <translation>No logins found</translation>
</message>
<message>
<source>Unknown error</source>
- <translation>Erro desconhecido</translation>
+ <translation>Unknown error</translation>
</message>
<message>
<source>Add a new entry to a database.</source>
- <translation>Adicionar entrada à base de dados.</translation>
+ <translation>Add a new entry to a database.</translation>
</message>
<message>
<source>Path of the database.</source>
- <translation>Caminho da base de dados.</translation>
+ <translation>Path of the database.</translation>
</message>
<message>
<source>Key file of the database.</source>
- <translation>Ficheiro-chave da base de dados.</translation>
+ <translation>Key file of the database.</translation>
</message>
<message>
<source>path</source>
- <translation>caminho</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Username for the entry.</source>
- <translation>Nome de utilizador para a entrada.</translation>
+ <translation>Username for the entry.</translation>
</message>
<message>
<source>username</source>
- <translation>nome de utilizador</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>URL for the entry.</source>
- <translation>URL para a entrada.</translation>
+ <translation>URL for the entry.</translation>
</message>
<message>
<source>URL</source>
@@ -5671,571 +5660,563 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes
</message>
<message>
<source>Prompt for the entry&apos;s password.</source>
- <translation>Pedir palavra-passe para a entrada.</translation>
+ <translation>Prompt for the entry&apos;s password.</translation>
</message>
<message>
<source>Generate a password for the entry.</source>
- <translation>Gerar palavra-passe para a entrada.</translation>
+ <translation>Generate a password for the entry.</translation>
</message>
<message>
<source>length</source>
- <translation>tamanho</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Path of the entry to add.</source>
- <translation>Caminho da entrada a adicionar.</translation>
+ <translation>Path of the entry to add.</translation>
</message>
<message>
<source>Path of the entry to clip.</source>
<comment>clip = copy to clipboard</comment>
- <translation>Caminho da entrada a copiar.</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Timeout in seconds before clearing the clipboard.</source>
- <translation>Tempo limite, em segundos, antes de limpar a área de transferência.</translation>
+ <translation>Timeout in seconds before clearing the clipboard.</translation>
</message>
<message>
<source>Edit an entry.</source>
- <translation>Editar entrada.</translation>
+ <translation>Edit an entry.</translation>
</message>
<message>
<source>Title for the entry.</source>
- <translation>Título para a entrada.</translation>
+ <translation>Title for the entry.</translation>
</message>
<message>
<source>title</source>
- <translation>título</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Path of the entry to edit.</source>
- <translation>Caminho da entrada a editar.</translation>
+ <translation>Path of the entry to edit.</translation>
</message>
<message>
<source>Estimate the entropy of a password.</source>
- <translation>Estimar entropia da palavra-passe.</translation>
+ <translation>Estimate the entropy of a password.</translation>
</message>
<message>
<source>Password for which to estimate the entropy.</source>
- <translation>Palavra-passe para a qual será estimada a entropia.</translation>
+ <translation>Password for which to estimate the entropy.</translation>
</message>
<message>
<source>Perform advanced analysis on the password.</source>
- <translation>Executar análise avançada da palavra-passe.</translation>
+ <translation>Perform advanced analysis on the password.</translation>
</message>
<message>
<source>WARNING: You are using a legacy key file format which may become
unsupported in the future.
Please consider generating a new key file.</source>
- <translation>AVISO: está a utilizar um formato legado que pode, no futuro, deixar
-de ser suportado.
-
-Deve considerar a geração de uma novo ficheiro-chave.</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>
Available commands:
</source>
- <translation>
-
-Comandos disponíveis:
-</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Name of the command to execute.</source>
- <translation>Nome do comando a executar.</translation>
+ <translation>Name of the command to execute.</translation>
</message>
<message>
<source>List database entries.</source>
- <translation>Listar entradas da base de dados.</translation>
+ <translation>List database entries.</translation>
</message>
<message>
<source>Path of the group to list. Default is /</source>
- <translation>Caminho do grupo a listar. Padrão é /</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Find entries quickly.</source>
- <translation>Localizar entradas rapidamente.</translation>
+ <translation>Find entries quickly.</translation>
</message>
<message>
<source>Search term.</source>
- <translation>Termo de pesquisa.</translation>
+ <translation>Search term.</translation>
</message>
<message>
<source>Merge two databases.</source>
- <translation>Combinar duas bases de dados.</translation>
+ <translation>Merge two databases.</translation>
</message>
<message>
<source>Path of the database to merge from.</source>
- <translation>Caminho da base de dados de origem da combinação.</translation>
+ <translation>Path of the database to merge from.</translation>
</message>
<message>
<source>Use the same credentials for both database files.</source>
- <translation>Utilizar as mesmas credenciais para ambos os ficheiros.</translation>
+ <translation>Use the same credentials for both database files.</translation>
</message>
<message>
<source>Key file of the database to merge from.</source>
- <translation>Ficheiro-chave da base de dados para a combinação.</translation>
+ <translation>Key file of the database to merge from.</translation>
</message>
<message>
<source>Show an entry&apos;s information.</source>
- <translation>Mostrar informações de uma entrada.</translation>
+ <translation>Show an entry&apos;s information.</translation>
</message>
<message>
<source>Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given.</source>
- <translation>Nome dos atributos a mostrar. Esta opção pode ser especificada mais do que uma vez, sendo que os atributos são mostrados um por linha, na ordem indicada. Se não especificar atributos, será dado um resumo dos atributos padrão.</translation>
+ <translation>Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given.</translation>
</message>
<message>
<source>attribute</source>
- <translation>atributo</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Name of the entry to show.</source>
- <translation>Nome da entrada a mostrar.</translation>
+ <translation>Name of the entry to show.</translation>
</message>
<message>
<source>NULL device</source>
- <translation>Dispositivo NULL</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>error reading from device</source>
- <translation>erro ao ler do dispositivo</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>malformed string</source>
- <translation>cadeira mal fomada</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>missing closing quote</source>
- <translation>carácter de fecho em falta</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Group</source>
- <translation>Grupo</translation>
+ <translation>Group</translation>
</message>
<message>
<source>Title</source>
- <translation>Título</translation>
+ <translation>Title</translation>
</message>
<message>
<source>Username</source>
- <translation>Nome de utilizador</translation>
+ <translation>Username</translation>
</message>
<message>
<source>Password</source>
- <translation>Palavra-passe</translation>
+ <translation>Password</translation>
</message>
<message>
<source>Notes</source>
- <translation>Notas</translation>
+ <translation>Notes</translation>
</message>
<message>
<source>Last Modified</source>
- <translation>Última modificação</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Created</source>
- <translation>Criada</translation>
+ <translation>Created</translation>
</message>
<message>
<source>Browser Integration</source>
- <translation>Integração com navegador</translation>
+ <translation>Browser Integration</translation>
</message>
<message>
<source>SSH Agent</source>
- <translation>Agente SSH</translation>
+ <translation>SSH Agent</translation>
</message>
<message>
<source>Generate a new random diceware passphrase.</source>
- <translation>Gerar uma nova palavra-passe baseada em dados (diceware).</translation>
+ <translation>Generate a new random diceware passphrase.</translation>
</message>
<message>
<source>Word count for the diceware passphrase.</source>
- <translation>Número de palavras para a palavra-passe.</translation>
+ <translation>Word count for the diceware passphrase.</translation>
</message>
<message>
<source>Wordlist for the diceware generator.
[Default: EFF English]</source>
- <translation>Lista de palavras para o gerador.
-[Padrão: EFF inglês]</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Generate a new random password.</source>
- <translation>Gerar nova palavra-passe aleatória.</translation>
+ <translation>Generate a new random password.</translation>
</message>
<message>
<source>Could not create entry with path %1.</source>
- <translation>Não foi possível criar a entrada com o caminho %1</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Enter password for new entry: </source>
- <translation>Introduza a palavra-passe para a nova entrada: </translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Writing the database failed %1.</source>
- <translation>Erro ao escrever na base de dados %1.</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Successfully added entry %1.</source>
- <translation>Entrada %1 adicionada com sucesso</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Invalid timeout value %1.</source>
- <translation>Valor limite inválido %1</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Entry %1 not found.</source>
- <translation>Entrada %1 não encontrada</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Entry with path %1 has no TOTP set up.</source>
- <translation>A entrada com o caminho %1 não tem uma TOTP configurada.</translation>
+ <translation type="unfinished"/>
</message>
<message numerus="yes">
<source>Clearing the clipboard in %1 second(s)...</source>
- <translation><numerusform>A área de transferência será limpa dentro de %1 segundo...</numerusform><numerusform>A área de transferência será limpa dentro de %1 segundos...</numerusform></translation>
+ <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
</message>
<message>
<source>Clipboard cleared!</source>
- <translation>Ãrea de transferência limpa!</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Silence password prompt and other secondary outputs.</source>
- <translation>Silenciar pedidos de palavra-passe e outros resultados secundários.</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>count</source>
<comment>CLI parameter</comment>
- <translation>número</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Could not find entry with path %1.</source>
- <translation>Não foi possível encontrar a entrada com o caminho %1.</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Not changing any field for entry %1.</source>
- <translation>Não foi alterado qualquer campo para a entrada %1.</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Enter new password for entry: </source>
- <translation>Introduza a nova palavra-passe da entrada: </translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Writing the database failed: %1</source>
- <translation>Erro ao escrever na base de dados: %1</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Successfully edited entry %1.</source>
- <translation>Entrada %1 editada com sucesso.</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Length %1</source>
- <translation>Tamanho %1</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Entropy %1</source>
- <translation>Entropia %1</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Log10 %1</source>
- <translation>Log10 %1</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Multi-word extra bits %1</source>
- <translation>Bits extra multi-palavra %1</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Type: Bruteforce</source>
- <translation>Tipo: Bruteforce</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Type: Dictionary</source>
- <translation>Tipo: Dictionary</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Type: Dict+Leet</source>
- <translation>Tipo: Dict+Leet</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Type: User Words</source>
- <translation>Tipo: User Words</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Type: User+Leet</source>
- <translation>Tipo: User+Leet</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Type: Repeated</source>
- <translation>Tipo: Repeated</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Type: Sequence</source>
- <translation>Tipo: Sequence</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Type: Spatial</source>
- <translation>Tipo: Spatial</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Type: Date</source>
- <translation>Tipo: Date</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Type: Bruteforce(Rep)</source>
- <translation>Tipo: Bruteforce(Rep)</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Type: Dictionary(Rep)</source>
- <translation>Tipo: Dictionary(Rep)</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Type: Dict+Leet(Rep)</source>
- <translation>Tipo: Dict+Leet(Rep)</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Type: User Words(Rep)</source>
- <translation>Tipo: User Words(Rep)</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Type: User+Leet(Rep)</source>
- <translation>Tipo: User+Leet(Rep)</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Type: Repeated(Rep)</source>
- <translation>Tipo: Repeated(Rep)</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Type: Sequence(Rep)</source>
- <translation>Tipo: Sequence(Rep)</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Type: Spatial(Rep)</source>
- <translation>Tipo: Spatial(Rep)</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Type: Date(Rep)</source>
- <translation>Tipo: Date(Rep)</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Type: Unknown%1</source>
- <translation>Tipo: Desconhecido%1</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Entropy %1 (%2)</source>
- <translation>Entropia %1 (%2)</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>*** Password length (%1) != sum of length of parts (%2) ***</source>
- <translation>*** Tamanho da palavra-passe (%1) != soma do tamanho das partes (%2) ***</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Failed to load key file %1: %2</source>
- <translation>Erro ao carregar o ficheiro-chave %1: %2</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Length of the generated password</source>
- <translation>Tamanho da palavra-passe gerada</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Use lowercase characters</source>
- <translation>Utilizar letras minúsculas</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Use uppercase characters</source>
- <translation>Utilizar letras maiúsculas</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Use special characters</source>
- <translation>Utilizar caracteres especiais</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Use extended ASCII</source>
- <translation>Utilizar ASCII expandido</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Exclude character set</source>
- <translation>Conjunto de caracteres a excluir</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>chars</source>
- <translation>caracteres</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Exclude similar looking characters</source>
- <translation>Excluir caracteres semelhantes</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Include characters from every selected group</source>
- <translation>Incluir caracteres de todos os grupos selecionados</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Recursively list the elements of the group.</source>
- <translation>Listar recursivamente todos os elementos do grupo</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Cannot find group %1.</source>
- <translation>Não foi possível encontrar o grupo %1.</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Error reading merge file:
%1</source>
- <translation>Erro ao ler o ficheiro de combinação:
-%1</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Unable to save database to file : %1</source>
- <translation>Não foi possível guardar a base de dados no ficheiro: %1</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Unable to save database to file: %1</source>
- <translation>Não foi possível guardar a base de dados no ficheiro: %1</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Successfully recycled entry %1.</source>
- <translation>A entrada %1 foi movida para a reciclagem.</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Successfully deleted entry %1.</source>
- <translation>A entrada %1 foi eliminada.</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Show the entry&apos;s current TOTP.</source>
- <translation>Mostrar TOTP atual da entrada.</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>ERROR: unknown attribute %1.</source>
- <translation>Erro: atributo desconhecido %1</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>No program defined for clipboard manipulation</source>
- <translation>Não definiu um programa para manipulação da área de transferência</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>file empty</source>
- <translation>ficheiro vazio</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>%1: (row, col) %2,%3</source>
- <translation>%1: (linha, coluna) %2,%3</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Argon2 (KDBX 4 – recommended)</source>
- <translation>Argon2 (KDBX 4 – recomendado)</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>AES-KDF (KDBX 4)</source>
- <translation>AES-KDF (KDBX 4)</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>AES-KDF (KDBX 3.1)</source>
- <translation>AES-KDF (KDBX 3.1)</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Invalid Settings</source>
<comment>TOTP</comment>
- <translation>Definições inválidas</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Invalid Key</source>
<comment>TOTP</comment>
- <translation>Chave inválida</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Message encryption failed.</source>
- <translation>Erro ao cifrar a mensagem.</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>No groups found</source>
- <translation>Não foram encontrados grupos</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Create a new database.</source>
- <translation>Criar uma nova base de dados.</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>File %1 already exists.</source>
- <translation>O ficheiro %1 já existe.</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Loading the key file failed</source>
- <translation>Não foi possível carregar o ficheiro-chave.</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>No key is set. Aborting database creation.</source>
- <translation>Chave não definida. A abortar criação da base de dados.</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Failed to save the database: %1.</source>
- <translation>Não foi possível criar a base de dados: %1.</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Successfully created new database.</source>
- <translation>A base de dados foi criada com sucesso.</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Creating KeyFile %1 failed: %2</source>
- <translation>Não foi possível criar o ficheiro-chave %1: %2</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Loading KeyFile %1 failed: %2</source>
- <translation>Não foi possível carregar o ficheiro-chave %1: %2</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Path of the entry to remove.</source>
- <translation>Caminho da entrada a remover.</translation>
+ <translation>Path of the entry to remove.</translation>
</message>
<message>
<source>Existing single-instance lock file is invalid. Launching new instance.</source>
- <translation>O ficheiro de bloqueio da instância única é inválido. A iniciar nova instância.</translation>
+ <translation>Existing single-instance lock file is invalid. Launching new instance.</translation>
</message>
<message>
<source>The lock file could not be created. Single-instance mode disabled.</source>
- <translation>Não foi possível criar o ficheiro de bloqueio. Modo de única instância desativado.</translation>
+ <translation>The lock file could not be created. Single-instance mode disabled.</translation>
</message>
<message>
<source>KeePassXC - cross-platform password manager</source>
- <translation>KeePassXC - Gestor de palavras-passe multi-plataforma</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>filenames of the password databases to open (*.kdbx)</source>
- <translation>nome de ficheiro das bases de dados a abrir (*.kdbx)</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>path to a custom config file</source>
- <translation>caminho para um ficheiro de configuração personalizado</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>key file of the database</source>
- <translation>ficheiro-chave da base de dados</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>read password of the database from stdin</source>
- <translation>ler palavra-passe da base de dados a partir de stdin</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Parent window handle</source>
- <translation>Gestão da janela parental</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Another instance of KeePassXC is already running.</source>
- <translation>Já está em execução uma instância do KeePassXC.</translation>
+ <translation>Another instance of KeePassXC is already running.</translation>
</message>
<message>
<source>Fatal error while testing the cryptographic functions.</source>
- <translation>Erro fatal ao testar as funções de criptografia.</translation>
+ <translation>Fatal error while testing the cryptographic functions.</translation>
</message>
<message>
<source>KeePassXC - Error</source>
- <translation>KeePassXC - Erro</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Database password: </source>
- <translation>Palavra-passe da base de dados: </translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Cannot create new group</source>
- <translation>Não foi possível criar o novo grupo</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Deactivate password key for the database.</source>
@@ -6251,19 +6232,19 @@ Comandos disponíveis:
</message>
<message>
<source>Version %1</source>
- <translation>Versão %1</translation>
+ <translation>Version %1</translation>
</message>
<message>
<source>Build Type: %1</source>
- <translation>Tipo de compilação: %1</translation>
+ <translation>Build Type: %1</translation>
</message>
<message>
<source>Revision: %1</source>
- <translation>Revisão: %1</translation>
+ <translation>Revision: %1</translation>
</message>
<message>
<source>Distribution: %1</source>
- <translation>Distribuição: %1</translation>
+ <translation>Distribution: %1</translation>
</message>
<message>
<source>Debugging mode is disabled.</source>
@@ -6277,25 +6258,25 @@ Comandos disponíveis:
<source>Operating system: %1
CPU architecture: %2
Kernel: %3 %4</source>
- <translation>Sistema operativo: %1
-Arquitetura do CPU: %2
+ <translation>Operating system: %1
+CPU architecture: %2
Kernel: %3 %4</translation>
</message>
<message>
<source>Auto-Type</source>
- <translation>Escrita automática</translation>
+ <translation>Auto-Type</translation>
</message>
<message>
<source>KeeShare (signed and unsigned sharing)</source>
- <translation>KeeShare (partilha assinada e não assinada)</translation>
+ <translation>KeeShare (signed and unsigned sharing)</translation>
</message>
<message>
<source>KeeShare (only signed sharing)</source>
- <translation>KeeShare (apenas partilha assinada)</translation>
+ <translation>KeeShare (only signed sharing)</translation>
</message>
<message>
<source>KeeShare (only unsigned sharing)</source>
- <translation>KeeShare (apenas partilha não assinada)</translation>
+ <translation>KeeShare (only unsigned sharing)</translation>
</message>
<message>
<source>YubiKey</source>
@@ -6307,11 +6288,11 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>None</source>
- <translation>Nada</translation>
+ <translation>None</translation>
</message>
<message>
<source>Enabled extensions:</source>
- <translation>Extensões ativas:</translation>
+ <translation>Enabled extensions:</translation>
</message>
<message>
<source>Cryptographic libraries:</source>
@@ -6451,7 +6432,7 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>Database was not modified by merge operation.</source>
- <translation>A base de dados não foi alterada pela combinação.</translation>
+ <translation>Database was not modified by merge operation.</translation>
</message>
<message>
<source>Moves an entry to a new group.</source>
@@ -6737,34 +6718,34 @@ Kernel: %3 %4</translation>
<name>QtIOCompressor</name>
<message>
<source>Internal zlib error when compressing: </source>
- <translation>Erro interno zlib durante a compressão: </translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Error writing to underlying device: </source>
- <translation>Erro de escrita no dispositivo subjacente: </translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Error opening underlying device: </source>
- <translation>Erro ao abrir o dispositivo subjacente: </translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Error reading data from underlying device: </source>
- <translation>Erro de leitura no dispositivo subjacente: </translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Internal zlib error when decompressing: </source>
- <translation>Erro interno zlib durante a descompressão: </translation>
+ <translation type="unfinished"/>
</message>
</context>
<context>
<name>QtIOCompressor::open</name>
<message>
<source>The gzip format not supported in this version of zlib.</source>
- <translation>O formato gzip não é suportado por esta versão zlib.</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Internal zlib error: </source>
- <translation>Erro interno zlib: </translation>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -6789,7 +6770,7 @@ Kernel: %3 %4</translation>
<message>
<source>Poor</source>
<comment>Password quality</comment>
- <translation>Má</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Poor — password should be changed</source>
@@ -6798,7 +6779,7 @@ Kernel: %3 %4</translation>
<message>
<source>Weak</source>
<comment>Password quality</comment>
- <translation>Fraca</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Weak — consider changing the password</source>
@@ -6822,11 +6803,11 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>Title</source>
- <translation>Título</translation>
+ <translation>Title</translation>
</message>
<message>
<source>Path</source>
- <translation>Caminho</translation>
+ <translation>Path</translation>
</message>
<message>
<source>Score</source>
@@ -6869,11 +6850,11 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>Title</source>
- <translation>Título</translation>
+ <translation>Title</translation>
</message>
<message>
<source>Path</source>
- <translation>Caminho</translation>
+ <translation>Path</translation>
</message>
<message>
<source>Password exposed…</source>
@@ -6936,11 +6917,11 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>Name</source>
- <translation>Nome</translation>
+ <translation>Name</translation>
</message>
<message>
<source>Value</source>
- <translation>Valor</translation>
+ <translation>Value</translation>
</message>
<message>
<source>Please wait, database statistics are being calculated...</source>
@@ -7028,7 +7009,7 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>Recommend using long, randomized passwords with a rating of &apos;good&apos; or &apos;excellent&apos;.</source>
- <translation type="unfinished"/>
+ <translation>Recommend using long, randomised passwords with a rating of &apos;good&apos; or &apos;excellent&apos;.</translation>
</message>
<message>
<source>Entries excluded from reports</source>
@@ -7055,35 +7036,35 @@ Kernel: %3 %4</translation>
<name>SSHAgent</name>
<message>
<source>Agent connection failed.</source>
- <translation>Erro ao conectar com o agente.</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Agent protocol error.</source>
- <translation>Erro de protocolo do agente.</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>No agent running, cannot add identity.</source>
- <translation>O agente não está em execução e não é possível adicionar a identidade.</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>No agent running, cannot remove identity.</source>
- <translation>O agente não está em execução e não é possível remover a identidade.</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Agent refused this identity. Possible reasons include:</source>
- <translation>O agente recusou esta identidade. Causas possíveis:</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>The key has already been added.</source>
- <translation>A chave já foi adicionada.</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Restricted lifetime is not supported by the agent (check options).</source>
- <translation>O tempo de vida restrito não é suportado pelo agente (verificar opções).</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>A confirmation request is not supported by the agent (check options).</source>
- <translation>O agente não tem suporte a pedidos de confirmação (consulte as opções).</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Key identity ownership conflict. Refusing to add.</source>
@@ -7098,83 +7079,83 @@ Kernel: %3 %4</translation>
<name>SearchHelpWidget</name>
<message>
<source>Search Help</source>
- <translation>Pesquisar na ajuda</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Search terms are as follows: [modifiers][field:][&quot;]term[&quot;]</source>
- <translation>Introduza os termos de pesquisa da seguinte forma: [modificadores][campo:][&quot;]termo[&quot;]</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Every search term must match (ie, logical AND)</source>
- <translation>Todos os termos de pesquisa coincidentes (AND lógico)</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Modifiers</source>
- <translation>Modificadores</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>exclude term from results</source>
- <translation>excluir termo dos resultados</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>match term exactly</source>
- <translation>coincidência exata</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>use regex in term</source>
- <translation>utilizar regex no termo</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Fields</source>
- <translation>Campos</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Term Wildcards</source>
- <translation>Caracteres universais do termo</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>match anything</source>
- <translation>coincidência relativa</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>match one</source>
- <translation>uma coincidência</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>logical OR</source>
- <translation>OU lógico</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Examples</source>
- <translation>Exemplos</translation>
+ <translation type="unfinished"/>
</message>
</context>
<context>
<name>SearchWidget</name>
<message>
<source>Search</source>
- <translation>Pesquisa</translation>
+ <translation>Search</translation>
</message>
<message>
<source>Clear</source>
- <translation>Limpar</translation>
+ <translation>Clear</translation>
</message>
<message>
<source>Limit search to selected group</source>
- <translation>Limitar pesquisa ao grupo selecionado</translation>
+ <translation>Limit search to selected group</translation>
</message>
<message>
<source>Search Help</source>
- <translation>Pesquisar na ajuda</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Search (%1)...</source>
<comment>Search placeholder text, %1 is the keyboard shortcut</comment>
- <translation>Pesquisa (%1)...</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Case sensitive</source>
- <translation>Sensível ao tipo</translation>
+ <translation type="unfinished"/>
</message>
</context>
<context>
@@ -7189,7 +7170,7 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>General</source>
- <translation>Geral</translation>
+ <translation>General</translation>
</message>
<message>
<source>Show notification when credentials are requested</source>
@@ -7205,7 +7186,7 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>Authorization</source>
- <translation type="unfinished"/>
+ <translation>Authorisation</translation>
</message>
<message>
<source>These applications are currently connected:</source>
@@ -7232,124 +7213,124 @@ Kernel: %3 %4</translation>
<name>SettingsWidgetKeeShare</name>
<message>
<source>Active</source>
- <translation>Ativo</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Allow export</source>
- <translation>Permitir exportação</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Allow import</source>
- <translation>Permitir importação</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Own certificate</source>
- <translation>Certificado próprio</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Fingerprint:</source>
- <translation>Impressão digital:</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Certificate:</source>
- <translation>Certificado:</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Signer</source>
- <translation>Signatário:</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Key:</source>
- <translation>Chave:</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Generate</source>
- <translation>Gerar</translation>
+ <translation>Generate</translation>
</message>
<message>
<source>Import</source>
- <translation>Importar</translation>
+ <translation>Import</translation>
</message>
<message>
<source>Export</source>
- <translation>Exportar</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Imported certificates</source>
- <translation>Certificados importados</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Trust</source>
- <translation>Confiar</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Ask</source>
- <translation>Perguntar</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Untrust</source>
- <translation>Deixar de confiar</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Remove</source>
- <translation>Remover</translation>
+ <translation>Remove</translation>
</message>
<message>
<source>Path</source>
- <translation>Caminho</translation>
+ <translation>Path</translation>
</message>
<message>
<source>Status</source>
- <translation>Estado</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Fingerprint</source>
- <translation>Impressão digital</translation>
+ <translation>Fingerprint</translation>
</message>
<message>
<source>Certificate</source>
- <translation>Certificado</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Trusted</source>
- <translation>Confiável</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Untrusted</source>
- <translation>Não confiável</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Unknown</source>
- <translation>Desconhecido</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>key.share</source>
<comment>Filetype for KeeShare key</comment>
- <translation>partilha da chave</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>KeeShare key file</source>
- <translation>Ficheiro-chave KeeShare</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>All files</source>
- <translation>Todos os ficheiros</translation>
+ <translation>All files</translation>
</message>
<message>
<source>Select path</source>
- <translation>Selecionar caminho</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Exporting changed certificate</source>
- <translation>A exportar certificado alterado</translation>
+ <translation type="unfinished"/>
</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>O certificado exportado não é o que está a ser utilizado. Deseja exportar o certificado atual?</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Signer:</source>
- <translation>Signatário:</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Allow KeeShare imports</source>
@@ -7365,7 +7346,7 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>Key</source>
- <translation>Chave</translation>
+ <translation>Key</translation>
</message>
<message>
<source>Signer name field</source>
@@ -7408,220 +7389,220 @@ Kernel: %3 %4</translation>
<name>ShareExport</name>
<message>
<source>Overwriting signed share container is not supported - export prevented</source>
- <translation>A substituição de contentor de partilha não assinado não é suportada - exportação evitada</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Could not write export container (%1)</source>
- <translation>Não foi possível escrever contentor de exportação (%1)</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Could not embed signature: Could not open file to write (%1)</source>
- <translation>Assinatura não incorporada. Não foi possível abrir o ficheiro para escrita (%1)</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Could not embed signature: Could not write file (%1)</source>
- <translation>Assinatura não incorporada. Não foi possível escrever no ficheiro (%1)</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Could not embed database: Could not open file to write (%1)</source>
- <translation>Base de dados não incorporada. Não foi possível abrir o ficheiro para escrita (%1)</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Could not embed database: Could not write file (%1)</source>
- <translation>Base de dados não incorporada. Não foi possível escrever no ficheiro (%1)</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Overwriting unsigned share container is not supported - export prevented</source>
- <translation>A substituição de contentor de partilha assinado não é suportada - exportação evitada</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Could not write export container</source>
- <translation>Não foi possível escrever contentor de exportação</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Unexpected export error occurred</source>
- <translation>Ocorreu um erro inesperado ao exportar</translation>
+ <translation type="unfinished"/>
</message>
</context>
<context>
<name>ShareImport</name>
<message>
<source>Import from container without signature</source>
- <translation>Importar de um contentor sem assinatura</translation>
+ <translation type="unfinished"/>
</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>Não foi possível verificar a fonte do contentor partilhado, porque não está assinado. Tem a certeza de que o quer importar de %1?</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Import from container with certificate</source>
- <translation>Importar de um contentor com certificado</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Do you want to trust %1 with the fingerprint of %2 from %3?</source>
- <translation>Deseja confiar em %1 com a impressão digital de %2 em %3? {1 ?} {2 ?}</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Not this time</source>
- <translation>Agora não</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Never</source>
- <translation>Nunca</translation>
+ <translation>Never</translation>
</message>
<message>
<source>Always</source>
- <translation>Sempre</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Just this time</source>
- <translation>Apenas agora</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Signed share container are not supported - import prevented</source>
- <translation>O contentor de partilha assinado não é suportado - importação evitada</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>File is not readable</source>
- <translation>O ficheiro não é legível</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Invalid sharing container</source>
- <translation>Contentor de partilha inválido</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Untrusted import prevented</source>
- <translation>Importação não fiável impedida</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Successful signed import</source>
- <translation>Importação assinada bem sucedida</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Unsigned share container are not supported - import prevented</source>
- <translation>O contentor de partilha não assinado não é suportado - importação evitada</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Successful unsigned import</source>
- <translation>Importação não assinada bem sucedida</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>File does not exist</source>
- <translation>O ficheiro não existe</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Unknown share container type</source>
- <translation>Tipo de contentor de partilha desconhecido</translation>
+ <translation type="unfinished"/>
</message>
</context>
<context>
<name>ShareObserver</name>
<message>
<source>Import from %1 failed (%2)</source>
- <translation>A importação de %1 falhou (%2)</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Import from %1 successful (%2)</source>
- <translation>A importação de %1 foi bem sucedida (%2)</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Imported from %1</source>
- <translation>Importado de %1</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Export to %1 failed (%2)</source>
- <translation>A exportação para %1 falhou (%2)</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Export to %1 successful (%2)</source>
- <translation>A exportação para %1 foi bem sucedida (%2)</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Export to %1</source>
- <translation>Exportar para %1</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Multiple import source path to %1 in %2</source>
- <translation>Diversos caminhos de importação para %1 em %2</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Conflicting export target path %1 in %2</source>
- <translation>Conflito no caminho de exportação para %1 em %2</translation>
+ <translation type="unfinished"/>
</message>
</context>
<context>
<name>TotpDialog</name>
<message>
<source>Timed Password</source>
- <translation>Palavra-passe limitada</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>000000</source>
- <translation>000000</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Copy</source>
- <translation>Copiar</translation>
+ <translation>Copy</translation>
</message>
<message numerus="yes">
<source>Expires in &lt;b&gt;%n&lt;/b&gt; second(s)</source>
- <translation><numerusform>Expira em &lt;b&gt;%n&lt;/b&gt; segundo</numerusform><numerusform>Expira em &lt;b&gt;%n&lt;/b&gt; segundos</numerusform></translation>
+ <translation><numerusform>Expires in &lt;b&gt;%n&lt;/b&gt; second(s)</numerusform><numerusform>Expires in &lt;b&gt;%n&lt;/b&gt; second(s)</numerusform></translation>
</message>
</context>
<context>
<name>TotpExportSettingsDialog</name>
<message>
<source>Copy</source>
- <translation>Copiar</translation>
+ <translation>Copy</translation>
</message>
<message>
<source>NOTE: These TOTP settings are custom and may not work with other authenticators.</source>
<comment>TOTP QR code dialog warning</comment>
- <translation>Nota: estas definições TOTP são personalizadas e podem não funcionar com outros autenticadores.</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>There was an error creating the QR code.</source>
- <translation>Ocorreu um erro ao criar o código QR.</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Closing in %1 seconds.</source>
- <translation>A fechar dentro de %1 segundos.</translation>
+ <translation type="unfinished"/>
</message>
</context>
<context>
<name>TotpSetupDialog</name>
<message>
<source>Setup TOTP</source>
- <translation>Configurar TOTP</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Default RFC 6238 token settings</source>
- <translation>Definições padrão do token RFC 6238</translation>
+ <translation>Default RFC 6238 token settings</translation>
</message>
<message>
<source>Steam token settings</source>
- <translation>Definições do token do fluxo</translation>
+ <translation>Steam token settings</translation>
</message>
<message>
<source>Use custom settings</source>
- <translation>Utilizar definições personalizadas</translation>
+ <translation>Use custom settings</translation>
</message>
<message>
<source>Custom Settings</source>
- <translation>Definições personalizadas</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Time step:</source>
- <translation>Avanço de tempo:</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source> sec</source>
<comment>Seconds</comment>
- <translation> seg</translation>
+ <translation> sec</translation>
</message>
<message>
<source>Code size:</source>
- <translation>Tamanho do código:</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Secret Key:</source>
@@ -7676,82 +7657,82 @@ Example: JBSWY3DPEHPK3PXP</source>
<name>UpdateCheckDialog</name>
<message>
<source>Checking for updates</source>
- <translation>A verificar se existem atualizações</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Checking for updates...</source>
- <translation>A verificar se existem atualizações...</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Close</source>
- <translation>Fechar</translation>
+ <translation>Close</translation>
</message>
<message>
<source>Update Error!</source>
- <translation>Erro ao atualizar!</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>An error occurred in retrieving update information.</source>
- <translation>Surgiu um erro ao obter a informação de atualização.</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Please try again later.</source>
- <translation>Por favor tente mais tarde</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Software Update</source>
- <translation>Atualização do programa</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>A new version of KeePassXC is available!</source>
- <translation>Está disponível uma nova versão do KeePassXC!</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>KeePassXC %1 is now available — you have %2.</source>
- <translation>O KeePassXC %1 já está disponível — tem a versão %2.</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Download it at keepassxc.org</source>
- <translation>Descarregue em keepassxc.org</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>You&apos;re up-to-date!</source>
- <translation>Está atualizado!</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>KeePassXC %1 is currently the newest version available</source>
- <translation>O KeePassXC %1 é neste momento a versão mais recente disponível</translation>
+ <translation type="unfinished"/>
</message>
</context>
<context>
<name>WelcomeWidget</name>
<message>
<source>Start storing your passwords securely in a KeePassXC database</source>
- <translation>Armazene as suas palavras-passe em segurança com o KeePassXC</translation>
+ <translation>Start storing your passwords securely in a KeePassXC database</translation>
</message>
<message>
<source>Create new database</source>
- <translation>Criar nova base de dados</translation>
+ <translation>Create new database</translation>
</message>
<message>
<source>Open existing database</source>
- <translation>Abrir base de dados existente</translation>
+ <translation>Open existing database</translation>
</message>
<message>
<source>Import from KeePass 1</source>
- <translation>Importar do KeePass 1</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Import from CSV</source>
- <translation>Importar de ficheiro CSV</translation>
+ <translation>Import from CSV</translation>
</message>
<message>
<source>Recent databases</source>
- <translation>Bases de dados recentes</translation>
+ <translation>Recent databases</translation>
</message>
<message>
<source>Welcome to KeePassXC %1</source>
- <translation>Bem-vindo ao KeePassXC %1</translation>
+ <translation>Welcome to KeePassXC %1</translation>
</message>
<message>
<source>Import from 1Password</source>
@@ -7774,11 +7755,11 @@ Example: JBSWY3DPEHPK3PXP</source>
</message>
<message>
<source>Press</source>
- <translation>Prima</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Passive</source>
- <translation>Passiva</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>%1 Invalid slot specified - %2</source>
@@ -7786,7 +7767,7 @@ Example: JBSWY3DPEHPK3PXP</source>
</message>
<message>
<source>The YubiKey interface has not been initialized.</source>
- <translation type="unfinished"/>
+ <translation>The YubiKey interface has not been initialised.</translation>
</message>
<message>
<source>Hardware key is currently in use.</source>
@@ -7813,15 +7794,15 @@ Example: JBSWY3DPEHPK3PXP</source>
<name>YubiKeyEditWidget</name>
<message>
<source>Refresh</source>
- <translation>Recarregar</translation>
+ <translation>Refresh</translation>
</message>
<message>
<source>YubiKey Challenge-Response</source>
- <translation>Pergunta de segurança YubiKey</translation>
+ <translation type="unfinished"/>
</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;Se você tiver uma &lt;a href=&quot;https://www.yubico.com/&quot;&gt;YubiKey&lt;/a&gt;, pode utiliza-la para obter mais segurança.&lt;/p&gt;&lt;p&gt;A YubiKey requer que uma das suas ranhuras seja programada como uma &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;</translation>
+ <translation type="unfinished"/>
</message>
<message>
<source>Refresh hardware tokens</source>
diff --git a/share/translations/keepassx_en_US.ts b/share/translations/keepassx_en_US.ts
index 3aee2bf72..907226d80 100644
--- a/share/translations/keepassx_en_US.ts
+++ b/share/translations/keepassx_en_US.ts
@@ -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>
@@ -167,10 +171,6 @@
<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>
</message>
@@ -305,10 +305,6 @@
<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>
</message>
@@ -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>
@@ -5326,10 +5354,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<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>
</message>
@@ -5338,58 +5362,22 @@ Expect some bugs and minor issues, this version is not meant for production use.
<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>
</message>
@@ -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>
diff --git a/share/translations/keepassx_es.ts b/share/translations/keepassx_es.ts
index c874a81f4..224bfeec2 100644
--- a/share/translations/keepassx_es.ts
+++ b/share/translations/keepassx_es.ts
@@ -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>
@@ -167,10 +171,6 @@
<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>
</message>
@@ -305,10 +305,6 @@
<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>
</message>
@@ -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>
@@ -5324,10 +5352,6 @@ Espere algunos errores y problemas menores, esta versión no está destinada par
<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>
</message>
@@ -5336,58 +5360,22 @@ Espere algunos errores y problemas menores, esta versión no está destinada par
<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>
</message>
@@ -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>
diff --git a/share/translations/keepassx_et.ts b/share/translations/keepassx_et.ts
index 1a8d2ca9c..f0a30c714 100644
--- a/share/translations/keepassx_et.ts
+++ b/share/translations/keepassx_et.ts
@@ -135,6 +135,10 @@
<source>Colorful</source>
<translation>värviline</translation>
</message>
+ <message>
+ <source>You must restart the application to set the new language. Would you like to restart now?</source>
+ <translation>Keele vahetamiseks tuleb KeePassXC uuesti käivitada. Kas teha seda kohe?</translation>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidgetGeneral</name>
@@ -167,10 +171,6 @@
<translation>Automaatne salvestamine iga muudatuse järel</translation>
</message>
<message>
- <source>Automatically save on exit</source>
- <translation>Automaatne salvestamine programmi sulgemisel</translation>
- </message>
- <message>
<source>Automatically reload the database when modified externally</source>
<translation>Andmebaas laaditakse automaatselt uuesti, kui seda väljastpoolt (nt teise programmiga) muudetakse</translation>
</message>
@@ -208,7 +208,7 @@
</message>
<message>
<source>Always ask before performing Auto-Type</source>
- <translation>Enne automaatsisestuse sooritamist küsitakse alati kinnitust</translation>
+ <translation>Enne automaatsisestuse sooritamist küsitakse alati kinnitust</translation>
</message>
<message>
<source> ms</source>
@@ -305,10 +305,6 @@
<translation>KeePassXC käivitatakse sisselogimisel automaatselt</translation>
</message>
<message>
- <source>Mark database as modified for non-data changes (e.g., expanding groups)</source>
- <translation>Ka andmeid mittepuudutavaid muudatusi (nt gruppide laiendamist) loetakse andmebaasi muutmiseks</translation>
- </message>
- <message>
<source>Safely save database files (disable if experiencing problems with Dropbox, etc.)</source>
<translation>Andmebaasifailid salvestatakse turvaliselt (probleemide korral Dropboxi vms-ga tasub välja lülitada)</translation>
</message>
@@ -344,6 +340,18 @@
<source>Auto-Type start delay:</source>
<translation>Viivitus automaatsisestuse klahvivajutuste vahel:</translation>
</message>
+ <message>
+ <source>Automatically save when locking database</source>
+ <translation>Automaatne salvestamine andmebaasi lukustamisel</translation>
+ </message>
+ <message>
+ <source>Automatically save non-data changes when locking database</source>
+ <translation>Andmeid mittepuudutavate muudatuste automaatne salvestamine andmebaasi lukustamisel</translation>
+ </message>
+ <message>
+ <source>Tray icon type</source>
+ <translation>Süsteemisalve ikooni tüüp:</translation>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidgetSecurity</name>
@@ -474,11 +482,11 @@
</message>
<message>
<source>Permission Required</source>
- <translation type="unfinished"/>
+ <translation>Loataotlus</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>
- <translation type="unfinished"/>
+ <translation>Käsitsi valitud kirje automaatsisestuse sooritamiseks on KeePassXC-l vaja hõlbustusvahendina käitumise luba. Kui oled juba loa andnud, tuleb KeePassXC võibolla uuesti käivitada.</translation>
</message>
</context>
<context>
@@ -530,11 +538,11 @@
<name>AutoTypePlatformMac</name>
<message>
<source>Permission Required</source>
- <translation type="unfinished"/>
+ <translation>Loataotlus</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>
- <translation type="unfinished"/>
+ <translation>Globaalse automaatsisestuse sooritamiseks on KeePassXC-l vaja hõlbustusvahendina käitumise ja ekraani salvestamise luba. Kui oled juba load andnud, tuleb KeePassXC võibolla uuesti käivitada.</translation>
</message>
</context>
<context>
@@ -556,35 +564,35 @@
<name>BrowserAccessControlDialog</name>
<message>
<source>KeePassXC - Browser Access Request</source>
- <translation type="unfinished"/>
+ <translation>Brauseri juurdepääsutaotlus – KeePassXC</translation>
</message>
<message>
<source>%1 is requesting access to the following entries:</source>
- <translation type="unfinished"/>
+ <translation>%1 küsib juurdepääsu järgmistele kirjetele:</translation>
</message>
<message>
<source>Remember access to checked entries</source>
- <translation type="unfinished"/>
+ <translation>Märkimisel jäetakse valitud kirjetele juurdepääsu lubamine meelde</translation>
</message>
<message>
<source>Remember</source>
- <translation type="unfinished"/>
+ <translation>Jäetakse meelde</translation>
</message>
<message>
<source>Allow access to entries</source>
- <translation type="unfinished"/>
+ <translation>Luba juurdepääs valitud kirjetele</translation>
</message>
<message>
<source>Allow Selected</source>
- <translation type="unfinished"/>
+ <translation>Luba valituile</translation>
</message>
<message>
<source>Deny All</source>
- <translation type="unfinished"/>
+ <translation>Keela kõik</translation>
</message>
<message>
<source>Disable for this site</source>
- <translation type="unfinished"/>
+ <translation>Keela selle saidi jaoks</translation>
</message>
</context>
<context>
@@ -616,7 +624,7 @@ Vali, millisesse neist tunnused salvestada tuleks.</translation>
</message>
<message>
<source>Save and allow access</source>
- <translation>Salvesta ja luba ligipääs</translation>
+ <translation>Salvesta ja luba juurdepääs</translation>
</message>
<message>
<source>KeePassXC: Overwrite existing key?</source>
@@ -625,7 +633,8 @@ Vali, millisesse neist tunnused salvestada tuleks.</translation>
<message>
<source>A shared encryption key with the name &quot;%1&quot; already exists.
Do you want to overwrite it?</source>
- <translation type="unfinished"/>
+ <translation>Jagatud krüptimisvõti nimega &quot;%1&quot; on juba olemas.
+Kas soovid selle üle kirjutada?</translation>
</message>
<message>
<source>KeePassXC: Update Entry</source>
@@ -633,7 +642,7 @@ Do you want to overwrite it?</source>
</message>
<message>
<source>Do you want to update the information in %1 - %2?</source>
- <translation type="unfinished"/>
+ <translation>Kas soovid uuendada teavet kirjes %1 - %2?</translation>
</message>
<message>
<source>Abort</source>
@@ -641,32 +650,33 @@ Do you want to overwrite it?</source>
</message>
<message>
<source>Converting attributes to custom data…</source>
- <translation type="unfinished"/>
+ <translation>Atribuutide teisendamine kohandatud andmeteks...</translation>
</message>
<message>
<source>KeePassXC: Converted KeePassHTTP attributes</source>
- <translation type="unfinished"/>
+ <translation>Teisendatud KeePassHTTP atribuudid – KeePassXC</translation>
</message>
<message>
<source>Successfully converted attributes from %1 entry(s).
Moved %2 keys to custom data.</source>
- <translation type="unfinished"/>
+ <translation>%1 kirje atribuudid edukalt teisendatud.
+Kohandatud andmetesse teisaldati %2 võtit.</translation>
</message>
<message numerus="yes">
<source>Successfully moved %n keys to custom data.</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
+ <translation><numerusform>%n võti edukalt kohandatud andmetesse teisaldatud.</numerusform><numerusform>%n võtit edukalt kohandatud andmetesse teisaldatud.</numerusform></translation>
</message>
<message>
<source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
- <translation type="unfinished"/>
+ <translation>Ühtegi KeePassHTTP atribuutidega kirjet ei leitud – KeePassXC</translation>
</message>
<message>
<source>The active database does not contain an entry with KeePassHTTP attributes.</source>
- <translation type="unfinished"/>
+ <translation>Aktiivne andmebaas ei sisalda ühtegi kirjet, millel oleks KeePassHTTP atribuute.</translation>
</message>
<message>
<source>KeePassXC: Legacy browser integration settings detected</source>
- <translation type="unfinished"/>
+ <translation>Tuvastati brauserilõimingu pärandseadistus – KeePassXC</translation>
</message>
<message>
<source>KeePassXC: Create a new group</source>
@@ -676,13 +686,16 @@ Moved %2 keys to custom data.</source>
<source>A request for creating a new group &quot;%1&quot; has been received.
Do you want to create this group?
</source>
- <translation type="unfinished"/>
+ <translation>Saadi taotlus uue grupi &quot;%1&quot; loomiseks.
+Kas lubad selle grupi luua?</translation>
</message>
<message>
<source>Your KeePassXC-Browser settings need to be moved into the database settings.
This is necessary to maintain your current browser connections.
Would you like to migrate your existing settings now?</source>
- <translation type="unfinished"/>
+ <translation>Sinu KeePassXC-Browseri seadistus tuleb teisaldada andmebaasi seadistusse.
+See on vajalik praeguste brauseriühenduste säilitamiseks.
+Kas tahad oma olemasoleva seadistuse kohe üle kolida?</translation>
</message>
<message>
<source>Don&apos;t show this warning again</source>
@@ -709,7 +722,7 @@ chrome-laptop.</translation>
</message>
<message>
<source>This is required for accessing your databases with KeePassXC-Browser</source>
- <translation>See on vajalik andmebaasidele KeePassXC-Browseri abil ligipääsemiseks.</translation>
+ <translation>See on vajalik andmebaasidele KeePassXC-Browseri abil juurdepääsemiseks.</translation>
</message>
<message>
<source>Enable browser integration</source>
@@ -1431,32 +1444,33 @@ See võib tõkestada ühendumise brauseripluginaga.</translation>
</message>
<message>
<source>KeePassXC: No keys found</source>
- <translation type="unfinished"/>
+ <translation>Võtmeid ei leitud – KeePassXC</translation>
</message>
<message>
<source>No shared encryption keys found in KeePassXC settings.</source>
- <translation type="unfinished"/>
+ <translation>KeePassXC seadetest ei leitud ühtki jagatud krüptimisvõtit.</translation>
</message>
<message>
<source>KeePassXC: Removed keys from database</source>
- <translation type="unfinished"/>
+ <translation>Võtmed andmebaasist eemaldatud – KeePassXC</translation>
</message>
<message numerus="yes">
<source>Successfully removed %n encryption key(s) from KeePassXC settings.</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
+ <translation><numerusform>%n krüptimisvõti edukalt KeePassXC seadetest eemaldatud.</numerusform><numerusform>%n krüptimisvõtit edukalt KeePassXC seadetest eemaldatud.</numerusform></translation>
</message>
<message>
<source>Forget all site-specific settings on entries</source>
- <translation>Unusta kirjete kõik saidiomased seaded</translation>
+ <translation>Kirjete kõigi saidiomaste seadete kustutamine</translation>
</message>
<message>
<source>Do you really want forget all site-specific settings on every entry?
Permissions to access entries will be revoked.</source>
- <translation type="unfinished"/>
+ <translation>Kas oled kindel, et tahad kõigi kirjete kõik saidiomased seaded eemaldada?
+See tühistab ka juurdepääsuload kirjetele.</translation>
</message>
<message>
<source>Removing stored permissions…</source>
- <translation type="unfinished"/>
+ <translation>Salvestatud juurdepääsulubade eemaldamine...</translation>
</message>
<message>
<source>Abort</source>
@@ -1464,32 +1478,33 @@ Permissions to access entries will be revoked.</source>
</message>
<message>
<source>KeePassXC: Removed permissions</source>
- <translation type="unfinished"/>
+ <translation>Juurdepääsuload eemaldatud – KeePassXC</translation>
</message>
<message numerus="yes">
<source>Successfully removed permissions from %n entry(s).</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
+ <translation><numerusform>%n kirje juurdepääsuload edukalt eemaldatud.</numerusform><numerusform>%n kirje juurdepääsuload edukalt eemaldatud.</numerusform></translation>
</message>
<message>
<source>KeePassXC: No entry with permissions found!</source>
- <translation type="unfinished"/>
+ <translation>Juurdepääsulubadega kirjeid ei leitud – KeePassXC</translation>
</message>
<message>
<source>The active database does not contain an entry with permissions.</source>
- <translation type="unfinished"/>
+ <translation>Aktiivne andmebaas ei sisalda ühtki juurdepääsulubadega kirjet.</translation>
</message>
<message>
<source>Move KeePassHTTP attributes to custom data</source>
- <translation type="unfinished"/>
+ <translation>KeePassHTTP atribuutide kohandatud andmetesse teisaldamine</translation>
</message>
<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 type="unfinished"/>
+ <translation>Kas oled kindel, et tahad kõik brauserilõimingu pärandandmed uusimale standardile üle viia?
+Need võivad olla vajalikud brauseripluginaga ühilduvuse säilitamiseks.</translation>
</message>
<message>
<source>Stored browser keys</source>
- <translation type="unfinished"/>
+ <translation>Salvestatud brauserivõtmed</translation>
</message>
<message>
<source>Remove selected key</source>
@@ -1514,7 +1529,8 @@ This is necessary to maintain compatibility with the browser plugin.</source>
<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>Kas oled kindel, et tahad andmebaasi ID-d värskendada?
+See on vajalik vaid juhul, kui sinu andmebaas on teise andmebaasi koopia ning brauserilaiendus ei saa sellega ühendust.</translation>
</message>
</context>
<context>
@@ -2773,7 +2789,7 @@ Kas keelata turvaline salvestamine ja proovida seejärel uuesti?</translation>
</message>
<message>
<source>Import</source>
- <translation>Impordi</translation>
+ <translation>importimine</translation>
</message>
<message>
<source>Export</source>
@@ -2786,7 +2802,8 @@ Kas keelata turvaline salvestamine ja proovida seejärel uuesti?</translation>
<message>
<source>Your KeePassXC version does not support sharing this container type.
Supported extensions are: %1.</source>
- <translation type="unfinished"/>
+ <translation>See KeePassXC versioon ei toeta valitud ümbrikutüübi jagamist.
+Toetatud faililaiendid: %1</translation>
</message>
<message>
<source>%1 is already being exported by this database.</source>
@@ -2807,19 +2824,19 @@ Supported extensions are: %1.</source>
</message>
<message>
<source>Database export is currently disabled by application settings.</source>
- <translation type="unfinished"/>
+ <translation>Andmebaasi eksportimine on rakenduse seadetes keelatud.</translation>
</message>
<message>
<source>Database import is currently disabled by application settings.</source>
- <translation type="unfinished"/>
+ <translation>Andmebaasi importimine on rakenduse seadetes keelatud.</translation>
</message>
<message>
<source>Sharing mode field</source>
- <translation type="unfinished"/>
+ <translation>Jagamisrežiimi väli</translation>
</message>
<message>
<source>Path to share file field</source>
- <translation type="unfinished"/>
+ <translation>Jagatava faili asukoha väli</translation>
</message>
<message>
<source>Password field</source>
@@ -2827,11 +2844,11 @@ Supported extensions are: %1.</source>
</message>
<message>
<source>Clear fields</source>
- <translation type="unfinished"/>
+ <translation>Puhasta väljad</translation>
</message>
<message>
<source>Browse for share file</source>
- <translation type="unfinished"/>
+ <translation>Vali jagatav fail</translation>
</message>
<message>
<source>Browse...</source>
@@ -3836,11 +3853,11 @@ Kui probleem püsib, võib andmebaasifail olla rikutud.</translation>
</message>
<message>
<source>Invalid master seed size</source>
- <translation type="unfinished"/>
+ <translation>sobimatu ülemseemne suurus</translation>
</message>
<message>
<source>Invalid transform seed size</source>
- <translation type="unfinished"/>
+ <translation>sobimatu teisendusseemne suurus</translation>
</message>
<message>
<source>Invalid transform rounds size</source>
@@ -3848,7 +3865,7 @@ Kui probleem püsib, võib andmebaasifail olla rikutud.</translation>
</message>
<message>
<source>Invalid start bytes size</source>
- <translation type="unfinished"/>
+ <translation>sobimatu alustusbaitide suurus</translation>
</message>
<message>
<source>Invalid random stream id size</source>
@@ -3901,11 +3918,11 @@ Teisendus on ühesuunaline, seega imporditud andmebaasi ei saa vana KeePassX 0.4
</message>
<message>
<source>Missing icon uuid or data</source>
- <translation type="unfinished"/>
+ <translation>Ikooni UUID või andmed on puudu</translation>
</message>
<message>
<source>Missing custom data key or value</source>
- <translation type="unfinished"/>
+ <translation>kohandatud andmete võti või väärtus puudub</translation>
</message>
<message>
<source>Multiple group elements</source>
@@ -3917,15 +3934,15 @@ Teisendus on ühesuunaline, seega imporditud andmebaasi ei saa vana KeePassX 0.4
</message>
<message>
<source>Invalid group icon number</source>
- <translation type="unfinished"/>
+ <translation>sobimatu grupi ikooninumber</translation>
</message>
<message>
<source>Invalid EnableAutoType value</source>
- <translation type="unfinished"/>
+ <translation>sobimatu võtme EnableAutoType väärtus</translation>
</message>
<message>
<source>Invalid EnableSearching value</source>
- <translation type="unfinished"/>
+ <translation>sobimatu võtme EnableSearching väärtus</translation>
</message>
<message>
<source>No group uuid found</source>
@@ -3945,7 +3962,7 @@ Teisendus on ühesuunaline, seega imporditud andmebaasi ei saa vana KeePassX 0.4
</message>
<message>
<source>Invalid entry icon number</source>
- <translation type="unfinished"/>
+ <translation>sobimatu kirje ikooninumber</translation>
</message>
<message>
<source>History element in history entry</source>
@@ -3965,15 +3982,15 @@ Teisendus on ühesuunaline, seega imporditud andmebaasi ei saa vana KeePassX 0.4
</message>
<message>
<source>Entry string key or value missing</source>
- <translation type="unfinished"/>
+ <translation>võtme stringvõti või väärtus puudub</translation>
</message>
<message>
<source>Entry binary key or value missing</source>
- <translation type="unfinished"/>
+ <translation>võtme binaarvõti või väärtus puudub</translation>
</message>
<message>
<source>Auto-type association window or sequence missing</source>
- <translation type="unfinished"/>
+ <translation>automaatsisestuse sihtaken või jada puudub</translation>
</message>
<message>
<source>Invalid bool value</source>
@@ -3989,7 +4006,7 @@ Teisendus on ühesuunaline, seega imporditud andmebaasi ei saa vana KeePassX 0.4
</message>
<message>
<source>Invalid color rgb part</source>
- <translation type="unfinished"/>
+ <translation>sobimatu värvi RGB-osa</translation>
</message>
<message>
<source>Invalid number value</source>
@@ -4017,7 +4034,7 @@ Rida %2, veerg %3</translation>
<name>KeeAgentSettings</name>
<message>
<source>Invalid KeeAgent settings file structure.</source>
- <translation type="unfinished"/>
+ <translation>Sobimatu KeeAgenti seadistusfaili struktuur.</translation>
</message>
<message>
<source>Private key is an attachment but no attachments provided.</source>
@@ -4025,15 +4042,15 @@ Rida %2, veerg %3</translation>
</message>
<message>
<source>Private key is empty</source>
- <translation type="unfinished"/>
+ <translation>Privaatvõti on tühi.</translation>
</message>
<message>
<source>File too large to be a private key</source>
- <translation type="unfinished"/>
+ <translation>Fail on liiga suur, et privaatvõti olla.</translation>
</message>
<message>
<source>Failed to open private key</source>
- <translation type="unfinished"/>
+ <translation>Privaatvõtme avamine ebaõnnestus.</translation>
</message>
</context>
<context>
@@ -4068,7 +4085,7 @@ Rida %2, veerg %3</translation>
<message>
<source>Unable to read encryption IV</source>
<comment>IV = Initialization Vector for symmetric cipher</comment>
- <translation type="unfinished"/>
+ <translation>krüptimise IV lugemine pole võimalik</translation>
</message>
<message>
<source>Invalid number of groups</source>
@@ -4080,11 +4097,11 @@ Rida %2, veerg %3</translation>
</message>
<message>
<source>Invalid content hash size</source>
- <translation type="unfinished"/>
+ <translation>sobimatu sisuräsi suurus</translation>
</message>
<message>
<source>Invalid transform seed size</source>
- <translation type="unfinished"/>
+ <translation>sobimatu teisendusseemne suurus</translation>
</message>
<message>
<source>Invalid number of transform rounds</source>
@@ -4092,7 +4109,7 @@ Rida %2, veerg %3</translation>
</message>
<message>
<source>Unable to construct group tree</source>
- <translation type="unfinished"/>
+ <translation>grupipuu konstrueerimine ebaõnnestus</translation>
</message>
<message>
<source>Root</source>
@@ -4100,99 +4117,99 @@ Rida %2, veerg %3</translation>
</message>
<message>
<source>Key transformation failed</source>
- <translation type="unfinished"/>
+ <translation>võtmeteisendus ebaõnnestus</translation>
</message>
<message>
<source>Invalid group field type number</source>
- <translation type="unfinished"/>
+ <translation>sobimatu grupi väljatüübi number</translation>
</message>
<message>
<source>Invalid group field size</source>
- <translation type="unfinished"/>
+ <translation>sobimatu grupi väljasuurus</translation>
</message>
<message>
<source>Read group field data doesn&apos;t match size</source>
- <translation type="unfinished"/>
+ <translation>grupi loetud väljaandmed ei kattu väidetava suurusega</translation>
</message>
<message>
<source>Incorrect group id field size</source>
- <translation type="unfinished"/>
+ <translation>sobimatu grupi ID-välja suurus</translation>
</message>
<message>
<source>Incorrect group creation time field size</source>
- <translation type="unfinished"/>
+ <translation>sobimatu grupi loomisaja välja suurus</translation>
</message>
<message>
<source>Incorrect group modification time field size</source>
- <translation type="unfinished"/>
+ <translation>sobimatu grupi muutmisaja välja suurus</translation>
</message>
<message>
<source>Incorrect group access time field size</source>
- <translation type="unfinished"/>
+ <translation>sobimatu grupi vaatamisaja välja suurus</translation>
</message>
<message>
<source>Incorrect group expiry time field size</source>
- <translation type="unfinished"/>
+ <translation>sobimatu grupi aegumisaja välja suurus</translation>
</message>
<message>
<source>Incorrect group icon field size</source>
- <translation type="unfinished"/>
+ <translation>sobimatu grupi ikoonivälja suurus</translation>
</message>
<message>
<source>Incorrect group level field size</source>
- <translation type="unfinished"/>
+ <translation>sobimatu grupi tasemevälja suurus</translation>
</message>
<message>
<source>Invalid group field type</source>
- <translation type="unfinished"/>
+ <translation>sobimatu grupi väljatüüp</translation>
</message>
<message>
<source>Missing group id or level</source>
- <translation type="unfinished"/>
+ <translation>grupi ID või tase puudub</translation>
</message>
<message>
<source>Missing entry field type number</source>
- <translation type="unfinished"/>
+ <translation>kirje väljatüübi number puudub</translation>
</message>
<message>
<source>Invalid entry field size</source>
- <translation type="unfinished"/>
+ <translation>sobimatu kirje väljasuurus</translation>
</message>
<message>
<source>Read entry field data doesn&apos;t match size</source>
- <translation type="unfinished"/>
+ <translation>kirje loetud väljaandmed ei kattu väidetava suurusega</translation>
</message>
<message>
<source>Invalid entry uuid field size</source>
- <translation type="unfinished"/>
+ <translation>sobimatu kirje UUID-välja suurus</translation>
</message>
<message>
<source>Invalid entry group id field size</source>
- <translation type="unfinished"/>
+ <translation>sobimatu kirje grupi-ID-välja suurus</translation>
</message>
<message>
<source>Invalid entry icon field size</source>
- <translation type="unfinished"/>
+ <translation>sobimatu kirje ikoonivälja suurus</translation>
</message>
<message>
<source>Invalid entry creation time field size</source>
- <translation type="unfinished"/>
+ <translation>sobimatu kirje loomisaja välja suurus</translation>
</message>
<message>
<source>Invalid entry modification time field size</source>
- <translation type="unfinished"/>
+ <translation>sobimatu kirje muutmisaja välja suurus</translation>
</message>
<message>
<source>Invalid entry expiry time field size</source>
- <translation type="unfinished"/>
+ <translation>sobimatu kirje aegumisaja välja suurus</translation>
</message>
<message>
<source>Invalid entry field type</source>
- <translation type="unfinished"/>
+ <translation>sobimatu kirje väljatüüp</translation>
</message>
<message>
<source>unable to seek to content position</source>
- <translation type="unfinished"/>
+ <translation>sisu alguskoha juurde pöördumine pole võimalik</translation>
</message>
<message>
<source>Invalid credentials were provided, please try again.
@@ -4209,7 +4226,7 @@ Kui probleem püsib, võib andmebaasifail olla rikutud.</translation>
<name>KeeShare</name>
<message>
<source>Invalid sharing reference</source>
- <translation type="unfinished"/>
+ <translation>Sobimatu jagamisviide</translation>
</message>
<message>
<source>Inactive share %1</source>
@@ -4229,11 +4246,11 @@ Kui probleem püsib, võib andmebaasifail olla rikutud.</translation>
</message>
<message>
<source>Import is disabled in settings</source>
- <translation type="unfinished"/>
+ <translation>Importimine on seadetes keelatud</translation>
</message>
<message>
<source>Export is disabled in settings</source>
- <translation type="unfinished"/>
+ <translation>Eksportimine on seadetes keelatud</translation>
</message>
<message>
<source>Inactive share</source>
@@ -4374,7 +4391,7 @@ Teade: %2</translation>
<message>
<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>Valitud võtmefail näeb välja nagu parooliandmebaasifail. Võtmefail ei tohi kunagi muutuda, sest muidu kaotad igaveseks oma andmebaasile ligipääsu.
+ <translation>Valitud võtmefail näeb välja nagu parooliandmebaasifail. Võtmefail ei tohi kunagi muutuda, sest muidu kaotad igaveseks oma andmebaasile juurdepääsu.
Kas oled kindel, et soovid selle failiga jätkata?</translation>
</message>
<message>
@@ -4534,7 +4551,7 @@ Võiksid kaaluda KeePassXC allalaadimislehel oleva AppImage&apos;i kasutamist.</
</message>
<message>
<source>Open &amp;URL</source>
- <translation>Ava &amp;URL</translation>
+ <translation>A&amp;va URL</translation>
</message>
<message>
<source>Import a KeePass 1 database</source>
@@ -4608,7 +4625,7 @@ Eeldatavasti leidub selles programmivigu ja muid väiksemaid hädasid – see ve
</message>
<message>
<source>TOTP</source>
- <translation>TOTP</translation>
+ <translation>&amp;TOTP</translation>
</message>
<message>
<source>View</source>
@@ -4652,7 +4669,7 @@ Eeldatavasti leidub selles programmivigu ja muid väiksemaid hädasid – see ve
</message>
<message>
<source>&amp;Delete Entry…</source>
- <translation>&amp;Kustuta kirje…</translation>
+ <translation>Kustuta kirj&amp;e…</translation>
</message>
<message>
<source>&amp;New Group…</source>
@@ -4830,6 +4847,26 @@ Eeldatavasti leidub selles programmivigu ja muid väiksemaid hädasid – see ve
<source>You must restart the application to apply this setting. Would you like to restart now?</source>
<translation>Selle muudatuse rakendamiseks tuleb KeePassXC uuesti käivitada. Kas teha seda kohe?</translation>
</message>
+ <message>
+ <source>Perform Auto-Type Sequence</source>
+ <translation>Soorita automaatsisestuse jada</translation>
+ </message>
+ <message>
+ <source>{USERNAME}</source>
+ <translation>Kasutajanimi</translation>
+ </message>
+ <message>
+ <source>{USERNAME}{ENTER}</source>
+ <translation>Kasutajanimi ja Enter</translation>
+ </message>
+ <message>
+ <source>{PASSWORD}</source>
+ <translation>Parool</translation>
+ </message>
+ <message>
+ <source>{PASSWORD}{ENTER}</source>
+ <translation>Parool ja Enter</translation>
+ </message>
</context>
<context>
<name>ManageDatabase</name>
@@ -4858,11 +4895,11 @@ Eeldatavasti leidub selles programmivigu ja muid väiksemaid hädasid – see ve
<name>ManageSession</name>
<message>
<source>Disconnect</source>
- <translation type="unfinished"/>
+ <translation>Katkesta ühendus</translation>
</message>
<message>
<source>Disconnect this application</source>
- <translation type="unfinished"/>
+ <translation>Katkesta ühendus selle rakendusega</translation>
</message>
</context>
<context>
@@ -5011,31 +5048,31 @@ Eeldatavasti leidub selles programmivigu ja muid väiksemaid hädasid – see ve
<name>OpData01</name>
<message>
<source>Invalid OpData01, does not contain header</source>
- <translation type="unfinished"/>
+ <translation>sobimatu OpData01, ei sisalda päist</translation>
</message>
<message>
<source>Unable to read all IV bytes, wanted 16 but got %1</source>
- <translation type="unfinished"/>
+ <translation>IV kõiki baite pole võimalik lugeda: oodati 16, aga saadi %1</translation>
</message>
<message>
<source>Unable to init cipher for opdata01: %1</source>
- <translation type="unfinished"/>
+ <translation>Šifri initsialiseerimine OpData01 jaoks pole võimalik: %1</translation>
</message>
<message>
<source>Unable to read all HMAC signature bytes</source>
- <translation type="unfinished"/>
+ <translation>HMAC-i signatuuri kõiki baite pole võimalik lugeda</translation>
</message>
<message>
<source>Malformed OpData01 due to a failed HMAC</source>
- <translation type="unfinished"/>
+ <translation>Ebaõnnestunud HMAC-i tõttu vigane OpData01</translation>
</message>
<message>
<source>Unable to process clearText in place</source>
- <translation type="unfinished"/>
+ <translation>clearTexti kohapeal töötlemine pole võimalik</translation>
</message>
<message>
<source>Expected %1 bytes of clear-text, found %2</source>
- <translation type="unfinished"/>
+ <translation>oodati %1 baiti lihtteksti, aga leiti %2</translation>
</message>
</context>
<context>
@@ -5043,34 +5080,35 @@ Eeldatavasti leidub selles programmivigu ja muid väiksemaid hädasid – see ve
<message>
<source>Read Database did not produce an instance
%1</source>
- <translation type="unfinished"/>
+ <translation>Andmebaasi lugemine ei loonud protsessi
+%1</translation>
</message>
</context>
<context>
<name>OpVaultReader</name>
<message>
<source>Directory .opvault must exist</source>
- <translation type="unfinished"/>
+ <translation>kataloog .opvault peab olemas olema</translation>
</message>
<message>
<source>Directory .opvault must be readable</source>
- <translation type="unfinished"/>
+ <translation>kataloog .opvault peab olema loetav</translation>
</message>
<message>
<source>Directory .opvault/default must exist</source>
- <translation type="unfinished"/>
+ <translation>kataloog .opvault/default peab olemas olema</translation>
</message>
<message>
<source>Directory .opvault/default must be readable</source>
- <translation type="unfinished"/>
+ <translation>kataloog .opvault/default peab olema loetav</translation>
</message>
<message>
<source>Unable to decode masterKey: %1</source>
- <translation type="unfinished"/>
+ <translation>ülemvõtme dekodeerimine pole võimalik: %1</translation>
</message>
<message>
<source>Unable to derive master key: %1</source>
- <translation type="unfinished"/>
+ <translation>ülemvõtme tuletamine pole võimalik: %1</translation>
</message>
</context>
<context>
@@ -5314,10 +5352,6 @@ Eeldatavasti leidub selles programmivigu ja muid väiksemaid hädasid – see ve
<translation>suurepärane</translation>
</message>
<message>
- <source>ExtendedASCII</source>
- <translation>Laiendatud ASCII</translation>
- </message>
- <message>
<source>Switch to advanced mode</source>
<translation>Lülita täppisrežiimi</translation>
</message>
@@ -5326,58 +5360,22 @@ Eeldatavasti leidub selles programmivigu ja muid väiksemaid hädasid – see ve
<translation>Lisaseaded</translation>
</message>
<message>
- <source>A-Z</source>
- <translation>A–Y</translation>
- </message>
- <message>
- <source>a-z</source>
- <translation>a–y</translation>
- </message>
- <message>
- <source>0-9</source>
- <translation>0–9</translation>
- </message>
- <message>
<source>Braces</source>
<translation>Sulud</translation>
</message>
<message>
- <source>{[(</source>
- <translation>{[(</translation>
- </message>
- <message>
<source>Punctuation</source>
<translation>Kirjavahemärgid</translation>
</message>
<message>
- <source>.,:;</source>
- <translation>.,:;</translation>
- </message>
- <message>
<source>Quotes</source>
<translation>Jutumärgid</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>Logogrammid</translation>
</message>
<message>
- <source>#$%&amp;&amp;@^`~</source>
- <translation>#$%&amp;&amp;@^`~</translation>
- </message>
- <message>
<source>Character set to exclude from generated password</source>
<translation>Märgid, mida genereeritavas paroolis esineda ei tohi</translation>
</message>
@@ -5497,6 +5495,10 @@ Eeldatavasti leidub selles programmivigu ja muid väiksemaid hädasid – see ve
<source>Regenerate password (%1)</source>
<translation>Genereeri uus parool (%1)</translation>
</message>
+ <message>
+ <source>Special Characters</source>
+ <translation>Erimärgid</translation>
+ </message>
</context>
<context>
<name>QApplication</name>
@@ -5604,19 +5606,19 @@ Eeldatavasti leidub selles programmivigu ja muid väiksemaid hädasid – see ve
<name>QObject</name>
<message>
<source>Database not opened</source>
- <translation type="unfinished"/>
+ <translation>Andmebaasi pole avatud</translation>
</message>
<message>
<source>Database hash not available</source>
- <translation type="unfinished"/>
+ <translation>Andmebaasi räsi pole saadaval</translation>
</message>
<message>
<source>Client public key not received</source>
- <translation type="unfinished"/>
+ <translation>Kliendi avalikku võtit ei saadud</translation>
</message>
<message>
<source>Cannot decrypt message</source>
- <translation type="unfinished"/>
+ <translation>Sõnumi lahtikrüptimine pole võimalik</translation>
</message>
<message>
<source>Action cancelled or denied</source>
@@ -5640,7 +5642,7 @@ Eeldatavasti leidub selles programmivigu ja muid väiksemaid hädasid – see ve
</message>
<message>
<source>No URL provided</source>
- <translation type="unfinished"/>
+ <translation>URL-i ei antud</translation>
</message>
<message>
<source>No logins found</source>
@@ -5652,31 +5654,31 @@ Eeldatavasti leidub selles programmivigu ja muid väiksemaid hädasid – see ve
</message>
<message>
<source>Add a new entry to a database.</source>
- <translation type="unfinished"/>
+ <translation>Uue kirje lisamine andmebaasi.</translation>
</message>
<message>
<source>Path of the database.</source>
- <translation type="unfinished"/>
+ <translation>Andmebaasi asukoht.</translation>
</message>
<message>
<source>Key file of the database.</source>
- <translation type="unfinished"/>
+ <translation>Andmebaasi võtmefail.</translation>
</message>
<message>
<source>path</source>
- <translation type="unfinished"/>
+ <translation>asukoht</translation>
</message>
<message>
<source>Username for the entry.</source>
- <translation type="unfinished"/>
+ <translation>Kirje kasutajanimi.</translation>
</message>
<message>
<source>username</source>
- <translation type="unfinished"/>
+ <translation>kasutajanimi</translation>
</message>
<message>
<source>URL for the entry.</source>
- <translation type="unfinished"/>
+ <translation>Kirje URL.</translation>
</message>
<message>
<source>URL</source>
@@ -5684,52 +5686,52 @@ Eeldatavasti leidub selles programmivigu ja muid väiksemaid hädasid – see ve
</message>
<message>
<source>Prompt for the entry&apos;s password.</source>
- <translation type="unfinished"/>
+ <translation>Kirje parooli küsitakse.</translation>
</message>
<message>
<source>Generate a password for the entry.</source>
- <translation type="unfinished"/>
+ <translation>Kirjele genereeritakse parool.</translation>
</message>
<message>
<source>length</source>
- <translation type="unfinished"/>
+ <translation>pikkus</translation>
</message>
<message>
<source>Path of the entry to add.</source>
- <translation type="unfinished"/>
+ <translation>Lisatava kirje asukoht.</translation>
</message>
<message>
<source>Path of the entry to clip.</source>
<comment>clip = copy to clipboard</comment>
- <translation type="unfinished"/>
+ <translation>Lõikepuhvrisse kopeeritava kirje asukoht.</translation>
</message>
<message>
<source>Timeout in seconds before clearing the clipboard.</source>
- <translation type="unfinished"/>
+ <translation>Lõikepuhvri puhastamise viivitus sekundites.</translation>
</message>
<message>
<source>Edit an entry.</source>
- <translation type="unfinished"/>
+ <translation>Kirje muutmine.</translation>
</message>
<message>
<source>Title for the entry.</source>
- <translation type="unfinished"/>
+ <translation>Kirje pealkiri</translation>
</message>
<message>
<source>title</source>
- <translation type="unfinished"/>
+ <translation>pealkiri</translation>
</message>
<message>
<source>Path of the entry to edit.</source>
- <translation type="unfinished"/>
+ <translation>Muudetava kirje asukoht.</translation>
</message>
<message>
<source>Estimate the entropy of a password.</source>
- <translation type="unfinished"/>
+ <translation>Parooli entroopia hindamine.</translation>
</message>
<message>
<source>Password for which to estimate the entropy.</source>
- <translation type="unfinished"/>
+ <translation>Parool, mille entroopiat hinnata.</translation>
</message>
<message>
<source>Perform advanced analysis on the password.</source>
@@ -5754,63 +5756,63 @@ Võimalikud käsud:
</message>
<message>
<source>Name of the command to execute.</source>
- <translation type="unfinished"/>
+ <translation>Käivitatava käsu nimi.</translation>
</message>
<message>
<source>List database entries.</source>
- <translation type="unfinished"/>
+ <translation>Andmebaasi kirjete loetlemine.</translation>
</message>
<message>
<source>Path of the group to list. Default is /</source>
- <translation type="unfinished"/>
+ <translation>Loetletava grupi asukoht andmebaasis. Vaikimisi /</translation>
</message>
<message>
<source>Find entries quickly.</source>
- <translation type="unfinished"/>
+ <translation>Kirjete kiiresti leidmine.</translation>
</message>
<message>
<source>Search term.</source>
- <translation type="unfinished"/>
+ <translation>Otsingusõna.</translation>
</message>
<message>
<source>Merge two databases.</source>
- <translation type="unfinished"/>
+ <translation>Kahe andmebaasi mestimine.</translation>
</message>
<message>
<source>Path of the database to merge from.</source>
- <translation type="unfinished"/>
+ <translation>Mestitava andmebaasi asukoht.</translation>
</message>
<message>
<source>Use the same credentials for both database files.</source>
- <translation type="unfinished"/>
+ <translation>Mõlema andmebaasi luku avamiseks kasutatakse samu tunnuseid.</translation>
</message>
<message>
<source>Key file of the database to merge from.</source>
- <translation type="unfinished"/>
+ <translation>Mestitava andmebaasi võtmefail.</translation>
</message>
<message>
<source>Show an entry&apos;s information.</source>
- <translation type="unfinished"/>
+ <translation>Kirje teabe näitamine.</translation>
</message>
<message>
<source>Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given.</source>
- <translation type="unfinished"/>
+ <translation>Näidatavate atribuutide nimed. Selle võtme võib anda ka mitu korda, sel juhul näidatakse atribuute vastavas järjestuses, üks igal real. Kui atribuute ei määrata, esitatakse kokkuvõte vaikeatribuutidest.</translation>
</message>
<message>
<source>attribute</source>
- <translation type="unfinished"/>
+ <translation>atribuut</translation>
</message>
<message>
<source>Name of the entry to show.</source>
- <translation type="unfinished"/>
+ <translation>Näidatava kirje nimi.</translation>
</message>
<message>
<source>NULL device</source>
- <translation type="unfinished"/>
+ <translation>NULL-seade</translation>
</message>
<message>
<source>error reading from device</source>
- <translation type="unfinished"/>
+ <translation>viga seadmest lugemisel</translation>
</message>
<message>
<source>malformed string</source>
@@ -5858,28 +5860,29 @@ Võimalikud käsud:
</message>
<message>
<source>Generate a new random diceware passphrase.</source>
- <translation type="unfinished"/>
+ <translation>Uue juhusliku Diceware&apos;i paroolifraasi genereerimine.</translation>
</message>
<message>
<source>Word count for the diceware passphrase.</source>
- <translation type="unfinished"/>
+ <translation>Sõnade arv Diceware&apos;i paroolifraasis.</translation>
</message>
<message>
<source>Wordlist for the diceware generator.
[Default: EFF English]</source>
- <translation type="unfinished"/>
+ <translation>Diceware&apos;i generaatori kasutatav sõnaloend.
+[Vaikimisi: EFF English]</translation>
</message>
<message>
<source>Generate a new random password.</source>
- <translation type="unfinished"/>
+ <translation>Uue juhusliku parooli genereerimine.</translation>
</message>
<message>
<source>Could not create entry with path %1.</source>
- <translation type="unfinished"/>
+ <translation>Kirjet asukohaga &quot;%1&quot; pole võimalik luua.</translation>
</message>
<message>
<source>Enter password for new entry: </source>
- <translation type="unfinished"/>
+ <translation>Sisesta uue kirje parool: </translation>
</message>
<message>
<source>Writing the database failed %1.</source>
@@ -5887,40 +5890,40 @@ Võimalikud käsud:
</message>
<message>
<source>Successfully added entry %1.</source>
- <translation type="unfinished"/>
+ <translation>Kirje &quot;%1&quot; edukalt lisatud.</translation>
</message>
<message>
<source>Invalid timeout value %1.</source>
- <translation type="unfinished"/>
+ <translation>Sobimatu viivituse väärtus %1.</translation>
</message>
<message>
<source>Entry %1 not found.</source>
- <translation type="unfinished"/>
+ <translation>Kirjet &quot;%1&quot; ei leitud.</translation>
</message>
<message>
<source>Entry with path %1 has no TOTP set up.</source>
- <translation type="unfinished"/>
+ <translation>Kirjel asukohas &quot;%1&quot; pole TOTP-d seadistatud.</translation>
</message>
<message numerus="yes">
<source>Clearing the clipboard in %1 second(s)...</source>
- <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
+ <translation><numerusform>Lõikepuhver puhastatakse %1 sekundi pärast...</numerusform><numerusform>Lõikepuhver puhastatakse %1 sekundi pärast...</numerusform></translation>
</message>
<message>
<source>Clipboard cleared!</source>
- <translation type="unfinished"/>
+ <translation>Lõikepuhver puhastatud!</translation>
</message>
<message>
<source>Silence password prompt and other secondary outputs.</source>
- <translation type="unfinished"/>
+ <translation>Parooliviiba jm teisese väljundi vaigistamine.</translation>
</message>
<message>
<source>count</source>
<comment>CLI parameter</comment>
- <translation type="unfinished"/>
+ <translation>arv</translation>
</message>
<message>
<source>Could not find entry with path %1.</source>
- <translation type="unfinished"/>
+ <translation>Kirjet asukohaga &quot;%1&quot; ei leitud.</translation>
</message>
<message>
<source>Not changing any field for entry %1.</source>
@@ -5928,7 +5931,7 @@ Võimalikud käsud:
</message>
<message>
<source>Enter new password for entry: </source>
- <translation type="unfinished"/>
+ <translation>Sisesta kirje uus parool: </translation>
</message>
<message>
<source>Writing the database failed: %1</source>
@@ -5936,19 +5939,19 @@ Võimalikud käsud:
</message>
<message>
<source>Successfully edited entry %1.</source>
- <translation type="unfinished"/>
+ <translation>Kirje &quot;%1&quot; edukalt muudetud.</translation>
</message>
<message>
<source>Length %1</source>
- <translation type="unfinished"/>
+ <translation>Pikkus: %1</translation>
</message>
<message>
<source>Entropy %1</source>
- <translation type="unfinished"/>
+ <translation>Entroopia: %1</translation>
</message>
<message>
<source>Log10 %1</source>
- <translation type="unfinished"/>
+ <translation>Log10: %1</translation>
</message>
<message>
<source>Multi-word extra bits %1</source>
@@ -6032,100 +6035,101 @@ Võimalikud käsud:
</message>
<message>
<source>Entropy %1 (%2)</source>
- <translation type="unfinished"/>
+ <translation>Entroopia: %1 (%2)</translation>
</message>
<message>
<source>*** Password length (%1) != sum of length of parts (%2) ***</source>
- <translation type="unfinished"/>
+ <translation>*** Parooli pikkus (%1) != osade pikkuse summa (%2) ***</translation>
</message>
<message>
<source>Failed to load key file %1: %2</source>
- <translation type="unfinished"/>
+ <translation>Võtmefaili %1 laadimine ebaõnnestus: %2</translation>
</message>
<message>
<source>Length of the generated password</source>
- <translation type="unfinished"/>
+ <translation>Genereeritava parooli pikkus.</translation>
</message>
<message>
<source>Use lowercase characters</source>
- <translation type="unfinished"/>
+ <translation>Kasutatakse väiketähti.</translation>
</message>
<message>
<source>Use uppercase characters</source>
- <translation type="unfinished"/>
+ <translation>Kasutatakse suurtähti.</translation>
</message>
<message>
<source>Use special characters</source>
- <translation type="unfinished"/>
+ <translation>Kasutatakse erimärke.</translation>
</message>
<message>
<source>Use extended ASCII</source>
- <translation type="unfinished"/>
+ <translation>Kasutatakse laiendatud ASCII märke.</translation>
</message>
<message>
<source>Exclude character set</source>
- <translation type="unfinished"/>
+ <translation>Välistatavad märgid.</translation>
</message>
<message>
<source>chars</source>
- <translation type="unfinished"/>
+ <translation>märgid</translation>
</message>
<message>
<source>Exclude similar looking characters</source>
- <translation>Sarnase välimusega märgid jäetakse välja</translation>
+ <translation>Sarnase välimusega märgid jäetakse välja.</translation>
</message>
<message>
<source>Include characters from every selected group</source>
- <translation type="unfinished"/>
+ <translation>Kaasatakse märke igast valitud tüübist.</translation>
</message>
<message>
<source>Recursively list the elements of the group.</source>
- <translation type="unfinished"/>
+ <translation>Grupi elementide rekursiivne loetlemine.</translation>
</message>
<message>
<source>Cannot find group %1.</source>
- <translation type="unfinished"/>
+ <translation>Gruppi %1 ei leitud.</translation>
</message>
<message>
<source>Error reading merge file:
%1</source>
- <translation type="unfinished"/>
+ <translation>Viga mestitava faili lugemisel:
+%1</translation>
</message>
<message>
<source>Unable to save database to file : %1</source>
- <translation type="unfinished"/>
+ <translation>Andmebaasi failiks salvestamine ebaõnnestus: %1</translation>
</message>
<message>
<source>Unable to save database to file: %1</source>
- <translation type="unfinished"/>
+ <translation>Andmebaasi failiks salvestamine ebaõnnestus: %1</translation>
</message>
<message>
<source>Successfully recycled entry %1.</source>
- <translation type="unfinished"/>
+ <translation>Kirje &quot;%1&quot; edukalt prügikasti visatud.</translation>
</message>
<message>
<source>Successfully deleted entry %1.</source>
- <translation type="unfinished"/>
+ <translation>Kirje &quot;%1&quot; edukalt kustutatud.</translation>
</message>
<message>
<source>Show the entry&apos;s current TOTP.</source>
- <translation type="unfinished"/>
+ <translation>Kirje praeguse TOTP näitamine.</translation>
</message>
<message>
<source>ERROR: unknown attribute %1.</source>
- <translation type="unfinished"/>
+ <translation>VIGA: tundmatu atribuut %1.</translation>
</message>
<message>
<source>No program defined for clipboard manipulation</source>
- <translation type="unfinished"/>
+ <translation>Lõikepuhvri käsitlemise programmi pole määratud.</translation>
</message>
<message>
<source>file empty</source>
- <translation type="unfinished"/>
+ <translation>fail on tühi</translation>
</message>
<message>
<source>%1: (row, col) %2,%3</source>
- <translation type="unfinished"/>
+ <translation>%1: (rida, veerg) %2,%3</translation>
</message>
<message>
<source>Argon2 (KDBX 4 – recommended)</source>
@@ -6142,24 +6146,24 @@ Võimalikud käsud:
<message>
<source>Invalid Settings</source>
<comment>TOTP</comment>
- <translation type="unfinished"/>
+ <translation>Sobimatu seadistus</translation>
</message>
<message>
<source>Invalid Key</source>
<comment>TOTP</comment>
- <translation type="unfinished"/>
+ <translation>Sobimatu võti</translation>
</message>
<message>
<source>Message encryption failed.</source>
- <translation type="unfinished"/>
+ <translation>Sõnumi krüptimine ebaõnnestus.</translation>
</message>
<message>
<source>No groups found</source>
- <translation type="unfinished"/>
+ <translation>Ãœhtegi gruppi ei leitud</translation>
</message>
<message>
<source>Create a new database.</source>
- <translation type="unfinished"/>
+ <translation>Uue andmebaasi loomine.</translation>
</message>
<message>
<source>File %1 already exists.</source>
@@ -6167,39 +6171,39 @@ Võimalikud käsud:
</message>
<message>
<source>Loading the key file failed</source>
- <translation type="unfinished"/>
+ <translation>Võtmefaili laadimine ebaõnnestus</translation>
</message>
<message>
<source>No key is set. Aborting database creation.</source>
- <translation type="unfinished"/>
+ <translation>Võtit pole määratud. Andmebaasi ei looda.</translation>
</message>
<message>
<source>Failed to save the database: %1.</source>
- <translation type="unfinished"/>
+ <translation>Andmebaasi salvestamine ebaõnnestus: %1.</translation>
</message>
<message>
<source>Successfully created new database.</source>
- <translation type="unfinished"/>
+ <translation>Uus andmebaas edukalt loodud.</translation>
</message>
<message>
<source>Creating KeyFile %1 failed: %2</source>
- <translation type="unfinished"/>
+ <translation>Võtmefaili %1 loomine ebaõnnestus: %2</translation>
</message>
<message>
<source>Loading KeyFile %1 failed: %2</source>
- <translation type="unfinished"/>
+ <translation>Võtmefaili %1 laadimine ebaõnnestus: %2</translation>
</message>
<message>
<source>Path of the entry to remove.</source>
- <translation type="unfinished"/>
+ <translation>Eemaldatava kirje asukoht.</translation>
</message>
<message>
<source>Existing single-instance lock file is invalid. Launching new instance.</source>
- <translation type="unfinished"/>
+ <translation>Olemasoleva ainuprotsessi lukufail on sobimatu. Käivitatakse uus protsess.</translation>
</message>
<message>
<source>The lock file could not be created. Single-instance mode disabled.</source>
- <translation type="unfinished"/>
+ <translation>Lukufaili loomine ei õnnestunud. Ainuprotsessi režiim välja lülitatud.</translation>
</message>
<message>
<source>KeePassXC - cross-platform password manager</source>
@@ -6207,31 +6211,31 @@ Võimalikud käsud:
</message>
<message>
<source>filenames of the password databases to open (*.kdbx)</source>
- <translation type="unfinished"/>
+ <translation>Avatavate parooliandmebaaside failinimed (*.kdbx).</translation>
</message>
<message>
<source>path to a custom config file</source>
- <translation type="unfinished"/>
+ <translation>Kohandatud seadistusfaili asukoht.</translation>
</message>
<message>
<source>key file of the database</source>
- <translation type="unfinished"/>
+ <translation>Andmebaasi võtmefail.</translation>
</message>
<message>
<source>read password of the database from stdin</source>
- <translation type="unfinished"/>
+ <translation>Andmebaasi parooli lugemine standardsisendist (stdin).</translation>
</message>
<message>
<source>Parent window handle</source>
- <translation type="unfinished"/>
+ <translation>Ãœlemakna pide</translation>
</message>
<message>
<source>Another instance of KeePassXC is already running.</source>
- <translation type="unfinished"/>
+ <translation>Teine KeePassXC protsess juba töötab.</translation>
</message>
<message>
<source>Fatal error while testing the cryptographic functions.</source>
- <translation type="unfinished"/>
+ <translation>Parandamatu tõrge krüptograafiafunktsioonide testimisel.</translation>
</message>
<message>
<source>KeePassXC - Error</source>
@@ -6243,19 +6247,19 @@ Võimalikud käsud:
</message>
<message>
<source>Cannot create new group</source>
- <translation type="unfinished"/>
+ <translation>Uue grupi loomine ebaõnnestus.</translation>
</message>
<message>
<source>Deactivate password key for the database.</source>
- <translation type="unfinished"/>
+ <translation>Andmebaasi paroolivõtme desaktiveerimine.</translation>
</message>
<message>
<source>Displays debugging information.</source>
- <translation type="unfinished"/>
+ <translation>Silumisteabe näitamine.</translation>
</message>
<message>
<source>Deactivate password key for the database to merge from.</source>
- <translation type="unfinished"/>
+ <translation>Mestitava andmebaasi paroolivõtme desaktiveerimine.</translation>
</message>
<message>
<source>Version %1</source>
@@ -6327,31 +6331,31 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>Cannot generate a password and prompt at the same time!</source>
- <translation type="unfinished"/>
+ <translation>Parooli ei saa ühtaegu küsida ja automaatselt genereerida!</translation>
</message>
<message>
<source>Adds a new group to a database.</source>
- <translation type="unfinished"/>
+ <translation>Uue grupi lisamine andmebaasi.</translation>
</message>
<message>
<source>Path of the group to add.</source>
- <translation type="unfinished"/>
+ <translation>Lisatava grupi asukoht andmebaasis.</translation>
</message>
<message>
<source>Group %1 already exists!</source>
- <translation type="unfinished"/>
+ <translation>Grupp &quot;%1&quot; on juba olemas.</translation>
</message>
<message>
<source>Group %1 not found.</source>
- <translation type="unfinished"/>
+ <translation>Gruppi &quot;%1&quot; ei leitud.</translation>
</message>
<message>
<source>Successfully added group %1.</source>
- <translation type="unfinished"/>
+ <translation>Grupp &quot;%1&quot; edukalt lisatud.</translation>
</message>
<message>
<source>Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords.</source>
- <translation type="unfinished"/>
+ <translation>Kontrollimine, kas mõni parool on lekkinud. FAILINIMI peab olema fail (koos asukohaga), mis sisaldab lekkinud paroolide HIBP vormingus SHA-1 räsisid, nagu need on saadaval veebilehel https://haveibeenpwned.com/Passwords.</translation>
</message>
<message>
<source>FILENAME</source>
@@ -6359,35 +6363,35 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>Analyze passwords for weaknesses and problems.</source>
- <translation type="unfinished"/>
+ <translation>Paroolide analüüsimine nõrkuste ja probleemide leidmiseks.</translation>
</message>
<message>
<source>Failed to open HIBP file %1: %2</source>
- <translation type="unfinished"/>
+ <translation>HIBP-faili %1 avamine ebaõnnestus: %2</translation>
</message>
<message>
<source>Evaluating database entries against HIBP file, this will take a while...</source>
- <translation type="unfinished"/>
+ <translation>Andmebaasi kirjete võrdlemine HIBP-failiga võtab mõnevõrra aega...</translation>
</message>
<message>
<source>Close the currently opened database.</source>
- <translation type="unfinished"/>
+ <translation>Parajasti avatud andmebaasi sulgemine.</translation>
</message>
<message>
<source>Display this help.</source>
- <translation type="unfinished"/>
+ <translation>Selle abi näitamine.</translation>
</message>
<message>
<source>slot</source>
- <translation type="unfinished"/>
+ <translation>pesa</translation>
</message>
<message>
<source>Invalid word count %1</source>
- <translation type="unfinished"/>
+ <translation>Sobimatu sõnade arv %1</translation>
</message>
<message>
<source>The word list is too small (&lt; 1000 items)</source>
- <translation type="unfinished"/>
+ <translation>Sõnaloend on liiga väike (&lt; 1000 elementi)</translation>
</message>
<message>
<source>Exit interactive mode.</source>
@@ -6395,11 +6399,11 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>Exports the content of a database to standard output in the specified format.</source>
- <translation type="unfinished"/>
+ <translation>Andmebaasi sisu määratavas vormingus standardväljundisse eksportimine.</translation>
</message>
<message>
<source>Unable to export database to XML: %1</source>
- <translation type="unfinished"/>
+ <translation>Andmebaasi eksportimine XML-iks pole võimalik: %1</translation>
</message>
<message>
<source>Unsupported format %1</source>
@@ -6411,11 +6415,11 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>Invalid password length %1</source>
- <translation type="unfinished"/>
+ <translation>Sobimatu parooli pikkus %1</translation>
</message>
<message>
<source>Display command help.</source>
- <translation type="unfinished"/>
+ <translation>Käsu abi näitamine.</translation>
</message>
<message>
<source>Available commands:</source>
@@ -6423,23 +6427,23 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>Import the contents of an XML database.</source>
- <translation type="unfinished"/>
+ <translation>XML-andmebaasi sisu importimine.</translation>
</message>
<message>
<source>Path of the XML database export.</source>
- <translation type="unfinished"/>
+ <translation>Eksporditava XML-andmebaasi asukoht.</translation>
</message>
<message>
<source>Path of the new database.</source>
- <translation type="unfinished"/>
+ <translation>Uue andmebaasi asukoht.</translation>
</message>
<message>
<source>Successfully imported database.</source>
- <translation type="unfinished"/>
+ <translation>Andmebaas edukalt imporditud.</translation>
</message>
<message>
<source>Unknown command %1</source>
- <translation type="unfinished"/>
+ <translation>Tundmatu käsk %1</translation>
</message>
<message>
<source>Flattens the output to single lines.</source>
@@ -6451,11 +6455,11 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>Yubikey slot for the second database.</source>
- <translation type="unfinished"/>
+ <translation>Teise andmebaasi YubiKey pesa.</translation>
</message>
<message>
<source>Successfully merged %1 into %2.</source>
- <translation type="unfinished"/>
+ <translation>%1 edukalt %2-isse mestitud.</translation>
</message>
<message>
<source>Database was not modified by merge operation.</source>
@@ -6463,75 +6467,75 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>Moves an entry to a new group.</source>
- <translation type="unfinished"/>
+ <translation>Kirje teisaldamine uude gruppi.</translation>
</message>
<message>
<source>Path of the entry to move.</source>
- <translation type="unfinished"/>
+ <translation>Teisaldatava kirje asukoht.</translation>
</message>
<message>
<source>Path of the destination group.</source>
- <translation type="unfinished"/>
+ <translation>Sihtgrupi asukoht.</translation>
</message>
<message>
<source>Could not find group with path %1.</source>
- <translation type="unfinished"/>
+ <translation>Gruppi asukohaga &quot;%1&quot; ei leitud.</translation>
</message>
<message>
<source>Entry is already in group %1.</source>
- <translation type="unfinished"/>
+ <translation>Kirje on juba grupis %1.</translation>
</message>
<message>
<source>Successfully moved entry %1 to group %2.</source>
- <translation type="unfinished"/>
+ <translation>Kirje &quot;%1&quot; edukalt gruppi &quot;%2&quot; teisaldatud.</translation>
</message>
<message>
<source>Open a database.</source>
- <translation type="unfinished"/>
+ <translation>Andmebaasi avamine.</translation>
</message>
<message>
<source>Path of the group to remove.</source>
- <translation type="unfinished"/>
+ <translation>Eemaldatava grupi asukoht.</translation>
</message>
<message>
<source>Cannot remove root group from database.</source>
- <translation type="unfinished"/>
+ <translation>Andmebaasi juurgruppi pole võimalik eemaldada.</translation>
</message>
<message>
<source>Successfully recycled group %1.</source>
- <translation type="unfinished"/>
+ <translation>Grupp &quot;%1&quot; edukalt prügikasti visatud.</translation>
</message>
<message>
<source>Successfully deleted group %1.</source>
- <translation type="unfinished"/>
+ <translation>Grupp &quot;%1&quot; edukalt kustutatud.</translation>
</message>
<message>
<source>Failed to open database file %1: not found</source>
- <translation type="unfinished"/>
+ <translation>Andmebaasifaili %1 avamine ebaõnnestus: faili ei leitud</translation>
</message>
<message>
<source>Failed to open database file %1: not a plain file</source>
- <translation type="unfinished"/>
+ <translation>Andmebaasifaili %1 avamine ebaõnnestus: pole lihtfail</translation>
</message>
<message>
<source>Failed to open database file %1: not readable</source>
- <translation type="unfinished"/>
+ <translation>Andmebaasifaili %1 avamine ebaõnnestus: pole loetav</translation>
</message>
<message>
<source>Enter password to unlock %1: </source>
- <translation type="unfinished"/>
+ <translation>Sisesta parool andmebaasi %1 luku avamiseks: </translation>
</message>
<message>
<source>Invalid YubiKey slot %1</source>
- <translation type="unfinished"/>
+ <translation>Sobimatu YubiKey pesa %1</translation>
</message>
<message>
<source>Enter password to encrypt database (optional): </source>
- <translation type="unfinished"/>
+ <translation>Sisesta parool andmebaasi krüptimiseks (pole kohustuslik): </translation>
</message>
<message>
<source>HIBP file, line %1: parse error</source>
- <translation type="unfinished"/>
+ <translation>HIBP-faili rida %1: parsimisviga</translation>
</message>
<message>
<source>Secret Service Integration</source>
@@ -6539,11 +6543,11 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>User name</source>
- <translation type="unfinished"/>
+ <translation>Kasutajanimi</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></translation>
+ <translation><numerusform>Kirje &quot;%1&quot; parool on lekkinud %2 kord!</numerusform><numerusform>Kirje &quot;%1&quot; parool on lekkinud %2 korda!</numerusform></translation>
</message>
<message>
<source>Invalid password generator after applying all options</source>
@@ -6551,7 +6555,7 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>Show the protected attributes in clear text.</source>
- <translation type="unfinished"/>
+ <translation>Kaitstud atribuutide näitamine tavatekstina.</translation>
</message>
<message>
<source>Browser Plugin Failure</source>
@@ -6563,19 +6567,19 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>Copy the given attribute to the clipboard. Defaults to &quot;password&quot; if not specified.</source>
- <translation type="unfinished"/>
+ <translation>Määratud atribuudi kopeerimine lõikepuhvrisse. Täpsustamata jätmise korral kopeeritakse parool.</translation>
</message>
<message>
<source>Copy the current TOTP to the clipboard (equivalent to &quot;-a totp&quot;).</source>
- <translation type="unfinished"/>
+ <translation>Praeguse TOTP lõikepuhvrisse kopeerimine (sama nagu &quot;-a totp&quot;).</translation>
</message>
<message>
<source>Copy an entry&apos;s attribute to the clipboard.</source>
- <translation type="unfinished"/>
+ <translation>Kirje atribuudi kopeerimine lõikepuhvrisse.</translation>
</message>
<message>
<source>ERROR: Please specify one of --attribute or --totp, not both.</source>
- <translation type="unfinished"/>
+ <translation>VIGA: palun kasuta kas võtit --attribute või --totp, mitte aga mõlemat.</translation>
</message>
<message>
<source>ERROR: attribute %1 is ambiguous, it matches %2.</source>
@@ -6583,47 +6587,47 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>Attribute &quot;%1&quot; not found.</source>
- <translation type="unfinished"/>
+ <translation>Atribuuti &quot;%1&quot; ei leitud.</translation>
</message>
<message>
<source>Entry&apos;s &quot;%1&quot; attribute copied to the clipboard!</source>
- <translation type="unfinished"/>
+ <translation>Kirje atribuut &quot;%1&quot; lõikepuhvrisse kopeeritud!</translation>
</message>
<message>
<source>Yubikey slot and optional serial used to access the database (e.g., 1:7370001).</source>
- <translation type="unfinished"/>
+ <translation>YubiKey pesa ja valikuliselt seerianumber, mida kasutada andmebaasi luku avamiseks (nt 1:7370001).</translation>
</message>
<message>
<source>slot[:serial]</source>
- <translation type="unfinished"/>
+ <translation>pesa[:seerianr]</translation>
</message>
<message>
<source>Target decryption time in MS for the database.</source>
- <translation type="unfinished"/>
+ <translation>Andmebaasi soovitav lahtikrüptimisaeg millisekundites.</translation>
</message>
<message>
<source>time</source>
- <translation type="unfinished"/>
+ <translation>aeg</translation>
</message>
<message>
<source>Set the key file for the database.</source>
- <translation type="unfinished"/>
+ <translation>Andmebaasile võtmefaili määramine.</translation>
</message>
<message>
<source>Set a password for the database.</source>
- <translation type="unfinished"/>
+ <translation>Andmebaasile parooli määramine.</translation>
</message>
<message>
<source>Invalid decryption time %1.</source>
- <translation type="unfinished"/>
+ <translation>Sobimatu lahtikrüptimise aeg %1</translation>
</message>
<message>
<source>Target decryption time must be between %1 and %2.</source>
- <translation type="unfinished"/>
+ <translation>Lahtikrüptimisaeg peab olema vahemikus %1 kuni %2.</translation>
</message>
<message>
<source>Failed to set database password.</source>
- <translation type="unfinished"/>
+ <translation>Andmebaasi parooli määramine ebaõnnestus.</translation>
</message>
<message>
<source>Benchmarking key derivation function for %1ms delay.</source>
@@ -6639,15 +6643,15 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>Format to use when exporting. Available choices are &apos;xml&apos; or &apos;csv&apos;. Defaults to &apos;xml&apos;.</source>
- <translation type="unfinished"/>
+ <translation>Eksportimisel kasutatav vorming. Valida on &quot;xml&quot; ja &quot;csv&quot;. Vaikimisi &quot;xml&quot;.</translation>
</message>
<message>
<source>Unable to import XML database: %1</source>
- <translation type="unfinished"/>
+ <translation>XML-andmebaasi importimine pole võimalik: %1</translation>
</message>
<message>
<source>Show a database&apos;s information.</source>
- <translation type="unfinished"/>
+ <translation>Andmebaasi teabe näitamine.</translation>
</message>
<message>
<source>UUID: </source>
@@ -6667,44 +6671,44 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>KDF: </source>
- <translation type="unfinished"/>
+ <translation>KDF: </translation>
</message>
<message>
<source>Recycle bin is enabled.</source>
- <translation type="unfinished"/>
+ <translation>Prügikasti lubamine.</translation>
</message>
<message>
<source>Recycle bin is not enabled.</source>
- <translation type="unfinished"/>
+ <translation>Prügikasti keelamine.</translation>
</message>
<message>
<source>Invalid command %1.</source>
- <translation type="unfinished"/>
+ <translation>Sobimatu käsk %1.</translation>
</message>
<message>
<source>Invalid YubiKey serial %1</source>
- <translation type="unfinished"/>
+ <translation>Sobimatu YubiKey seerianumber %1</translation>
</message>
<message>
<source>Please touch the button on your YubiKey to continue…</source>
- <translation type="unfinished"/>
+ <translation>Jätkamiseks vajuta oma YubiKey nuppu...</translation>
</message>
<message>
<source>Do you want to create a database with an empty password? [y/N]: </source>
- <translation type="unfinished"/>
+ <translation>Kas soovid luua tühja parooliga andmebaasi? (jah/EI) [y/N]: </translation>
</message>
<message>
<source>Repeat password: </source>
- <translation type="unfinished"/>
+ <translation>Parooli kordus:</translation>
</message>
<message>
<source>Error: Passwords do not match.</source>
- <translation type="unfinished"/>
+ <translation>Viga: paroolid ei kattu.</translation>
</message>
<message>
<source>All clipping programs failed. Tried %1
</source>
- <translation type="unfinished"/>
+ <translation>Kõigi lõikepuhvri käsitlemise programmide kasutamine ebaõnnestus. Proovitud: %1</translation>
</message>
<message>
<source>AES (%1 rounds)</source>
@@ -6745,7 +6749,7 @@ Kernel: %3 %4</translation>
<name>QtIOCompressor</name>
<message>
<source>Internal zlib error when compressing: </source>
- <translation type="unfinished"/>
+ <translation>Sisemine zlib&apos;i tõrge tihendamisel: </translation>
</message>
<message>
<source>Error writing to underlying device: </source>
@@ -6761,18 +6765,18 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>Internal zlib error when decompressing: </source>
- <translation type="unfinished"/>
+ <translation>Sisemine zlib&apos;i tõrge lahtipakkimisel: </translation>
</message>
</context>
<context>
<name>QtIOCompressor::open</name>
<message>
<source>The gzip format not supported in this version of zlib.</source>
- <translation type="unfinished"/>
+ <translation>Selles zlib&apos;i versioonis gzip-vormingut ei toetata.</translation>
</message>
<message>
<source>Internal zlib error: </source>
- <translation type="unfinished"/>
+ <translation>Sisemine zlib&apos;i tõrge: </translation>
</message>
</context>
<context>
@@ -7063,11 +7067,11 @@ Kernel: %3 %4</translation>
<name>SSHAgent</name>
<message>
<source>Agent connection failed.</source>
- <translation type="unfinished"/>
+ <translation>Agendiga ühendumine ebaõnnestus.</translation>
</message>
<message>
<source>Agent protocol error.</source>
- <translation type="unfinished"/>
+ <translation>Agendi protokolliviga.</translation>
</message>
<message>
<source>No agent running, cannot add identity.</source>
@@ -7083,7 +7087,7 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>The key has already been added.</source>
- <translation type="unfinished"/>
+ <translation>Võtmefail on juba lisatud.</translation>
</message>
<message>
<source>Restricted lifetime is not supported by the agent (check options).</source>
@@ -7276,11 +7280,11 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>Import</source>
- <translation>importimine</translation>
+ <translation>Impordi</translation>
</message>
<message>
<source>Export</source>
- <translation>eksportimine</translation>
+ <translation>Ekspordi</translation>
</message>
<message>
<source>Imported certificates</source>
@@ -7312,7 +7316,7 @@ Kernel: %3 %4</translation>
</message>
<message>
<source>Fingerprint</source>
- <translation>Sõrmejälg:</translation>
+ <translation>Sõrmejälg</translation>
</message>
<message>
<source>Certificate</source>
@@ -7775,19 +7779,19 @@ Näide: JBSWY3DPEHPK3PXP</translation>
<name>YubiKey</name>
<message>
<source>%1 [%2] Configured Slot - %3</source>
- <translation type="unfinished"/>
+ <translation>%1 [%2] seadistatud - pesa %3</translation>
</message>
<message>
<source>%1 [%2] Challenge Response - Slot %3 - %4</source>
- <translation type="unfinished"/>
+ <translation>%1 [%2] pretensioon-vastus - pesa %3 - %4</translation>
</message>
<message>
<source>Press</source>
- <translation type="unfinished"/>
+ <translation>ootab vajutust</translation>
</message>
<message>
<source>Passive</source>
- <translation type="unfinished"/>
+ <translation>passiivne</translation>
</message>
<message>
<source>%1 Invalid slot specified - %2</source>
@@ -7795,27 +7799,27 @@ Näide: JBSWY3DPEHPK3PXP</translation>
</message>
<message>
<source>The YubiKey interface has not been initialized.</source>
- <translation type="unfinished"/>
+ <translation>YubiKey liides pole initsialiseeritud.</translation>
</message>
<message>
<source>Hardware key is currently in use.</source>
- <translation type="unfinished"/>
+ <translation>Riistvaraline võti on hetkel kasutuses.</translation>
</message>
<message>
<source>Could not find hardware key with serial number %1. Please plug it in to continue.</source>
- <translation type="unfinished"/>
+ <translation>Riistvaralist võtit seerianumbriga %1 ei leitud. Jätkamiseks tuleb see arvutiga ühendada.</translation>
</message>
<message>
<source>Hardware key timed out waiting for user interaction.</source>
- <translation type="unfinished"/>
+ <translation>Riistvaraline võti ei jõudnud kasutaja vastust ära oodata.</translation>
</message>
<message>
<source>A USB error ocurred when accessing the hardware key: %1</source>
- <translation type="unfinished"/>
+ <translation>Riistvaralise võtme kasutamisel ilmnes USB-tõrge: %1</translation>
</message>
<message>
<source>Failed to complete a challenge-response, the specific error was: %1</source>
- <translation type="unfinished"/>
+ <translation>Pretensiooni-vastuse lõpetamine ebaõnnestus. Konkreetne viga: %1</translation>
</message>
</context>
<context>
diff --git a/share/translations/keepassx_fi.ts b/share/translations/keepassx_fi.ts
index 60cb2901a..4b6b57133 100644
--- a/share/translations/keepassx_fi.ts
+++ b/share/translations/keepassx_fi.ts
@@ -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>
@@ -167,10 +171,6 @@
<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>
</message>
@@ -305,10 +305,6 @@
<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>
</message>
@@ -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>
@@ -5324,10 +5352,6 @@ Bugeja ja ongelmia voi esiintyä. Tämä versio ei ole tarkoitettu päivittäise
<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>
</message>
@@ -5336,58 +5360,22 @@ Bugeja ja ongelmia voi esiintyä. Tämä versio ei ole tarkoitettu päivittäise
<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>
</message>
@@ -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>
diff --git a/share/translations/keepassx_fr.ts b/share/translations/keepassx_fr.ts
index 22e6d28fe..8dab361ae 100644
--- a/share/translations/keepassx_fr.ts
+++ b/share/translations/keepassx_fr.ts
@@ -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 l’application. Souhaitez-vous la démarrer maintenant ?</translation>
+ </message>
</context>
<context>
<name>ApplicationSettingsWidgetGeneral</name>
@@ -167,10 +171,6 @@
<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 l’extérieur</translation>
</message>
@@ -305,10 +305,6 @@
<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>
</message>
@@ -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 d’icô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 d’un nouveau groupe « %1 » a été 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 n’avez 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 d’empêcher que cette erreur survienne, vous devez accéder à « Paramètres de la base de données » et réinitialiser votre mot de passe.</translation>
</message>
@@ -1409,7 +1417,7 @@ Si vous n’avez 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 l’extension pour navigateurs.</translation>
</message>
<message>
@@ -1431,7 +1439,7 @@ Cela pourrait empêcher la connexion l’extension 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 l’extension pour navigateurs.</translation>
</message>
<message>
@@ -1457,7 +1465,7 @@ Cela pourrait empêcher la connexion avec l’extension 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 d’accè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 d’accè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 d’intégration au navigateur héritées à la norme la plus récente ?
+ <translation>Souhaitez-vous vraiment convertir toutes les données d’intégration au navigateur héritées à la norme la plus récente ?
Cela est nécessaire pour assurer la compatibilité avec l’extension pour navigateurs.</translation>
</message>
<message>
@@ -1520,7 +1528,7 @@ Cela est nécessaire pour assurer la compatibilité avec l’extension 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 n’avez pas défini de mot de passe. Il est fortement découragé d’utiliser une base de données sans mot de passe.
-Voulez-vous vraiment poursuivre sans mot de passe ?</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 @@ C’est 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 d’exporter votre base de données vers un fichier non chiffré. Vos mots de passe et renseignements délicats seront vulnérables. Voulez-vous vraiment poursuivre ?</translation>
+ <translation>Vous êtes sur le point d’exporter votre base de données vers un fichier non chiffré. Vos mots de passe et renseignements délicats seront vulnérables. Souhaitez-vous vraiment poursuivre ?</translation>
</message>
<message>
<source>Open OPVault</source>
@@ -1982,15 +1990,15 @@ C’est 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 l’entrée « %1 » ?</translation>
+ <translation>Souhaitez-vous vraiment supprimer définitivement l’entré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 l’entrée « %1 » vers la corbeille ?</translation>
+ <translation>Souhaitez-vous vraiment déplacer l’entré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 @@ C’est 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 @@ C’est 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éfinitivement le groupe « %1 » ?</translation>
+ <translation>Souhaitez-vous vraiment supprimer définitivement le groupe « %1 » ?</translation>
</message>
<message>
<source>No current database.</source>
@@ -2030,7 +2038,7 @@ C’est 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 été modifiée. Voulez-vous charger les changements ?</translation>
+ <translation>Le fichier de la base de données a été modifiée. Souhaitez-vous charger les changements ?</translation>
</message>
<message>
<source>Merge Request</source>
@@ -2040,7 +2048,7 @@ C’est 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 été 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>L’entré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>L’entré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>L’entré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>L’entré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 l’icô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 l’icô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 l’icô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 l’icô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 d’extension sélectionnées ? Cela pourrait entraîner un mauvais fonctionnement des extensions touchées.</translation>
+ <translation>Souhaitez-vous vraiment supprimer les données d’extension 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 l’accè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 n’est 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 n’est 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 l’application. 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>{NOMD’UTILISATEUR}</translation>
+ </message>
+ <message>
+ <source>{USERNAME}{ENTER}</source>
+ <translation>{NOMD’UTILISATEUR}{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>
@@ -5321,10 +5349,6 @@ Attendez-vous à des bogues et des problèmes mineurs. Cette version n’est pas
<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>
</message>
@@ -5333,58 +5357,22 @@ Attendez-vous à des bogues et des problèmes mineurs. Cette version n’est pas
<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>
</message>
@@ -5504,6 +5492,10 @@ Attendez-vous à des bogues et des problèmes mineurs. Cette version n’est 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 d’utilisation. Voulez-vous exporter le certificat actuel ?</translation>
+ <translation>Le certificat exporté est différent de celui en cours d’utilisation. 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 n’est pas signé. Voulez-vous vraiment importer de %1 ?</translation>
+ <translation>Nous ne pouvons vérifier la source du conteneur partagé, car il n’est 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 l’empreinte de %2 à %3 ? {1 ?} {2 ?}</translation>
+ <translation>Souhaitez-vous autoriser %1 avec l’empreinte 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>
diff --git a/share/translations/keepassx_hu.ts b/share/translations/keepassx_hu.ts
index 43ac73509..838245164 100644
--- a/share/translations/keepassx_hu.ts
+++ b/share/translations/keepassx_hu.ts
@@ -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>
@@ -167,10 +171,6 @@
<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>
</message>
@@ -305,10 +305,6 @@
<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>
</message>
@@ -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>
@@ -5322,10 +5350,6 @@ Néhány hiba és kisebb nehézségek várhatóak, ezért ez a verzió nem aján
<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>
</message>
@@ -5334,58 +5358,22 @@ Néhány hiba és kisebb nehézségek várhatóak, ezért ez a verzió nem aján
<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>
</message>
@@ -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>
diff --git a/share/translations/keepassx_id.ts b/share/translations/keepassx_id.ts
index c01c2a75b..c565d34b6 100644
--- a/share/translations/keepassx_id.ts
+++ b/share/translations/keepassx_id.ts
@@ -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>
@@ -167,10 +171,6 @@
<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>
</message>
@@ -305,10 +305,6 @@
<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>
</message>
@@ -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>
@@ -5321,10 +5349,6 @@ Jangan kaget jika ada masalah dan bug, versi ini tidak ditujukan untuk penggunaa
<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>
</message>
@@ -5333,58 +5357,22 @@ Jangan kaget jika ada masalah dan bug, versi ini tidak ditujukan untuk penggunaa
<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>
</message>
@@ -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>
diff --git a/share/translations/keepassx_it.ts b/share/translations/keepassx_it.ts
index 1f64727f3..72b2272e5 100644
--- a/share/translations/keepassx_it.ts
+++ b/share/translations/keepassx_it.ts
@@ -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>
@@ -167,10 +171,6 @@
<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>
</message>
@@ -290,25 +290,21 @@
</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>
</message>
@@ -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>
@@ -5325,10 +5353,6 @@ Aspettatevi alcuni bug e problemi minori, questa versione non è destinata all&a
<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>
</message>
@@ -5337,58 +5361,22 @@ Aspettatevi alcuni bug e problemi minori, questa versione non è destinata all&a
<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>
</message>
@@ -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>
diff --git a/share/translations/keepassx_ja.ts b/share/translations/keepassx_ja.ts
index 9ad84a125..2ee0e7008 100644
--- a/share/translations/keepassx_ja.ts
+++ b/share/translations/keepassx_ja.ts
@@ -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>
@@ -167,10 +171,6 @@
<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>
</message>
@@ -305,10 +305,6 @@
<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>
</message>
@@ -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>
@@ -5324,10 +5352,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>ã™ã°ã‚‰ã—ã„</translation>
</message>
<message>
- <source>ExtendedASCII</source>
- <translation>æ‹¡å¼µ ASCII</translation>
- </message>
- <message>
<source>Switch to advanced mode</source>
<translation>詳細モードã«åˆ‡ã‚Šæ›¿ãˆ</translation>
</message>
@@ -5336,58 +5360,22 @@ Expect some bugs and minor issues, this version is not meant for production use.
<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>
</message>
@@ -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>
diff --git a/share/translations/keepassx_ko.ts b/share/translations/keepassx_ko.ts
index 65f6be34a..6e03bdf0d 100644
--- a/share/translations/keepassx_ko.ts
+++ b/share/translations/keepassx_ko.ts
@@ -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>
@@ -167,10 +171,6 @@
<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>
</message>
@@ -305,10 +305,6 @@
<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>
</message>
@@ -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>
@@ -5324,10 +5352,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>매우 좋ìŒ</translation>
</message>
<message>
- <source>ExtendedASCII</source>
- <translation>확장 ASCII</translation>
- </message>
- <message>
<source>Switch to advanced mode</source>
<translation>고급 모드로 전환</translation>
</message>
@@ -5336,58 +5360,22 @@ Expect some bugs and minor issues, this version is not meant for production use.
<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>
</message>
@@ -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>
diff --git a/share/translations/keepassx_lt.ts b/share/translations/keepassx_lt.ts
index f841a5284..c46e2c593 100644
--- a/share/translations/keepassx_lt.ts
+++ b/share/translations/keepassx_lt.ts
@@ -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>
@@ -167,10 +171,6 @@
<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 ją iš naujo</translation>
</message>
@@ -305,10 +305,6 @@
<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"/>
</message>
@@ -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>
@@ -5271,10 +5299,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<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>
</message>
@@ -5283,58 +5307,22 @@ Expect some bugs and minor issues, this version is not meant for production use.
<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"/>
</message>
@@ -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>
diff --git a/share/translations/keepassx_nb.ts b/share/translations/keepassx_nb.ts
index 1d11a0610..a02c96403 100644
--- a/share/translations/keepassx_nb.ts
+++ b/share/translations/keepassx_nb.ts
@@ -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>
@@ -167,10 +171,6 @@
<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 på nytt hvis den blir endret eksternt </translation>
</message>
@@ -305,10 +305,6 @@
<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"/>
</message>
@@ -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>
@@ -5283,10 +5311,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<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>
</message>
@@ -5295,58 +5319,22 @@ Expect some bugs and minor issues, this version is not meant for production use.
<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"/>
</message>
@@ -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>
diff --git a/share/translations/keepassx_nl_NL.ts b/share/translations/keepassx_nl_NL.ts
index a72e508d8..8c3b480cc 100644
--- a/share/translations/keepassx_nl_NL.ts
+++ b/share/translations/keepassx_nl_NL.ts
@@ -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>
@@ -167,10 +171,6 @@
<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>
</message>
@@ -305,10 +305,6 @@
<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>
</message>
@@ -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>
@@ -5323,10 +5351,6 @@ Wil je KeePassXC nu opnieuw opstarten?</translation>
<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>
</message>
@@ -5335,58 +5359,22 @@ Wil je KeePassXC nu opnieuw opstarten?</translation>
<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>
</message>
@@ -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>
diff --git a/share/translations/keepassx_pl.ts b/share/translations/keepassx_pl.ts
index bd2085d31..9bc702011 100644
--- a/share/translations/keepassx_pl.ts
+++ b/share/translations/keepassx_pl.ts
@@ -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>
@@ -167,10 +171,6 @@
<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>
</message>
@@ -305,10 +305,6 @@
<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>
</message>
@@ -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>
@@ -5327,10 +5355,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<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>
</message>
@@ -5339,58 +5363,22 @@ Expect some bugs and minor issues, this version is not meant for production use.
<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>
</message>
@@ -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>
diff --git a/share/translations/keepassx_pt_BR.ts b/share/translations/keepassx_pt_BR.ts
index c0a69f453..7e2afde61 100644
--- a/share/translations/keepassx_pt_BR.ts
+++ b/share/translations/keepassx_pt_BR.ts
@@ -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>
@@ -167,10 +171,6 @@
<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>
</message>
@@ -305,10 +305,6 @@
<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>
</message>
@@ -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>
@@ -5326,10 +5354,6 @@ Espere alguns bugs e problemas menores, esta versão não é para uso em produç
<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>
</message>
@@ -5338,58 +5362,22 @@ Espere alguns bugs e problemas menores, esta versão não é para uso em produç
<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>
</message>
@@ -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>
diff --git a/share/translations/keepassx_pt_PT.ts b/share/translations/keepassx_pt_PT.ts
index a918da7db..777a91d00 100644
--- a/share/translations/keepassx_pt_PT.ts
+++ b/share/translations/keepassx_pt_PT.ts
@@ -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>
@@ -167,10 +171,6 @@
<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>
</message>
@@ -305,10 +305,6 @@
<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>
</message>
@@ -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>
@@ -5326,10 +5354,6 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes
<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>
</message>
@@ -5338,58 +5362,22 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes
<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>
</message>
@@ -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>
diff --git a/share/translations/keepassx_ro.ts b/share/translations/keepassx_ro.ts
index 06fe2305b..a9c1ff23a 100644
--- a/share/translations/keepassx_ro.ts
+++ b/share/translations/keepassx_ro.ts
@@ -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>
@@ -167,10 +171,6 @@
<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>
</message>
@@ -305,10 +305,6 @@
<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"/>
</message>
@@ -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>
@@ -5319,10 +5347,6 @@ Asteptati-va unele bug-uri și probleme minore, această versiune nu este destin
<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>
</message>
@@ -5331,58 +5355,22 @@ Asteptati-va unele bug-uri și probleme minore, această versiune nu este destin
<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>
</message>
@@ -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>
diff --git a/share/translations/keepassx_ru.ts b/share/translations/keepassx_ru.ts
index 08581ea8e..503ae1b9f 100644
--- a/share/translations/keepassx_ru.ts
+++ b/share/translations/keepassx_ru.ts
@@ -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>
@@ -167,10 +171,6 @@
<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>
</message>
@@ -305,10 +305,6 @@
<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>
</message>
@@ -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>
@@ -5322,10 +5350,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>Отличный</translation>
</message>
<message>
- <source>ExtendedASCII</source>
- <translation>РаÑÑˆÐ¸Ñ€ÐµÐ½Ð½Ð°Ñ ASCII</translation>
- </message>
- <message>
<source>Switch to advanced mode</source>
<translation>Ð’ раÑширенный режим</translation>
</message>
@@ -5334,58 +5358,22 @@ Expect some bugs and minor issues, this version is not meant for production use.
<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>
</message>
@@ -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>
diff --git a/share/translations/keepassx_sk.ts b/share/translations/keepassx_sk.ts
index 29f6a7c17..9627aa343 100644
--- a/share/translations/keepassx_sk.ts
+++ b/share/translations/keepassx_sk.ts
@@ -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>
@@ -167,10 +171,6 @@
<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>
</message>
@@ -305,10 +305,6 @@
<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>
</message>
@@ -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>
@@ -5329,10 +5357,6 @@ OÄakávajte chyby a menÅ¡ie problémy, táto verzia nie je urÄená na produkÄ
<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>
</message>
@@ -5341,58 +5365,22 @@ OÄakávajte chyby a menÅ¡ie problémy, táto verzia nie je urÄená na produkÄ
<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>
</message>
@@ -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>
diff --git a/share/translations/keepassx_sv.ts b/share/translations/keepassx_sv.ts
index 6a9b5ca19..cc0c7eed9 100644
--- a/share/translations/keepassx_sv.ts
+++ b/share/translations/keepassx_sv.ts
@@ -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>
@@ -167,10 +171,6 @@
<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>
</message>
@@ -305,10 +305,6 @@
<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>
</message>
@@ -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>
@@ -5325,10 +5353,6 @@ Vissa fel och mindre problem kan uppstå. Denna version är inte ämnad för dag
<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>
</message>
@@ -5337,58 +5361,22 @@ Vissa fel och mindre problem kan uppstå. Denna version är inte ämnad för dag
<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>
</message>
@@ -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>
diff --git a/share/translations/keepassx_th.ts b/share/translations/keepassx_th.ts
index 2f10e41ab..eb5e67e67 100644
--- a/share/translations/keepassx_th.ts
+++ b/share/translations/keepassx_th.ts
@@ -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>
@@ -167,10 +171,6 @@
<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>
</message>
@@ -305,10 +305,6 @@
<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"/>
</message>
@@ -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>
@@ -5294,10 +5322,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>ดีมาà¸</translation>
</message>
<message>
- <source>ExtendedASCII</source>
- <translation>ExtendedASCII</translation>
- </message>
- <message>
<source>Switch to advanced mode</source>
<translation>เปลี่ยนเป็นโหมดใช้งานขั้นสูง</translation>
</message>
@@ -5306,58 +5330,22 @@ Expect some bugs and minor issues, this version is not meant for production use.
<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>
</message>
@@ -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>
diff --git a/share/translations/keepassx_tr.ts b/share/translations/keepassx_tr.ts
index 6e0111b9d..a7da0ace7 100644
--- a/share/translations/keepassx_tr.ts
+++ b/share/translations/keepassx_tr.ts
@@ -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>
@@ -167,10 +171,6 @@
<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>
</message>
@@ -305,10 +305,6 @@
<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>
</message>
@@ -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>
@@ -5326,10 +5354,6 @@ Bazı hatalar ve küçük sorunlar olabilir, bu sürüm şu an dağıtımda değ
<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>
</message>
@@ -5338,58 +5362,22 @@ Bazı hatalar ve küçük sorunlar olabilir, bu sürüm şu an dağıtımda değ
<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>
</message>
@@ -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>
diff --git a/share/translations/keepassx_uk.ts b/share/translations/keepassx_uk.ts
index 64d7828b3..bc899ab91 100644
--- a/share/translations/keepassx_uk.ts
+++ b/share/translations/keepassx_uk.ts
@@ -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>
@@ -167,10 +171,6 @@
<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>
</message>
@@ -305,10 +305,6 @@
<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>
</message>
@@ -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>
@@ -5324,10 +5352,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>Відмінна</translation>
</message>
<message>
- <source>ExtendedASCII</source>
- <translation>Розширені ASCII</translation>
- </message>
- <message>
<source>Switch to advanced mode</source>
<translation>Перемкнути в розширений режим</translation>
</message>
@@ -5336,58 +5360,22 @@ Expect some bugs and minor issues, this version is not meant for production use.
<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>
</message>
@@ -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>
diff --git a/share/translations/keepassx_zh_CN.ts b/share/translations/keepassx_zh_CN.ts
index ac067a155..bbd521b00 100644
--- a/share/translations/keepassx_zh_CN.ts
+++ b/share/translations/keepassx_zh_CN.ts
@@ -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>
@@ -167,10 +171,6 @@
<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>
</message>
@@ -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>
@@ -305,10 +305,6 @@
<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>
</message>
@@ -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>
@@ -5321,10 +5349,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>éžå¸¸å¥½</translation>
</message>
<message>
- <source>ExtendedASCII</source>
- <translation>扩展 ASCII</translation>
- </message>
- <message>
<source>Switch to advanced mode</source>
<translation>切æ¢åˆ°é«˜çº§æ¨¡å¼</translation>
</message>
@@ -5333,58 +5357,22 @@ Expect some bugs and minor issues, this version is not meant for production use.
<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>
</message>
@@ -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>
diff --git a/share/translations/keepassx_zh_TW.ts b/share/translations/keepassx_zh_TW.ts
index 3f3fc2c60..aa9a421af 100644
--- a/share/translations/keepassx_zh_TW.ts
+++ b/share/translations/keepassx_zh_TW.ts
@@ -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>
@@ -167,10 +171,6 @@
<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>
</message>
@@ -305,10 +305,6 @@
<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>
</message>
@@ -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>
@@ -5324,10 +5352,6 @@ Expect some bugs and minor issues, this version is not meant for production use.
<translation>極好</translation>
</message>
<message>
- <source>ExtendedASCII</source>
- <translation>延伸 ASCII</translation>
- </message>
- <message>
<source>Switch to advanced mode</source>
<translation>切æ›è‡³é€²éšŽæ¨¡å¼</translation>
</message>
@@ -5336,58 +5360,22 @@ Expect some bugs and minor issues, this version is not meant for production use.
<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>
</message>
@@ -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>
diff --git a/snap/snapcraft.yaml b/snap/snapcraft.yaml
index 540cfdfe9..90a369d35 100644
--- a/snap/snapcraft.yaml
+++ b/snap/snapcraft.yaml
@@ -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: |
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 2f8c3b156..0ceccdd9a 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -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
diff --git a/src/browser/BrowserAction.cpp b/src/browser/BrowserAction.cpp
index 8e0c26909..65fe4cb7b 100644
--- a/src/browser/BrowserAction.cpp
+++ b/src/browser/BrowserAction.cpp
@@ -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);
diff --git a/src/browser/BrowserService.cpp b/src/browser/BrowserService.cpp
index eb752996c..9cb2e2729 100644
--- a/src/browser/BrowserService.cpp
+++ b/src/browser/BrowserService.cpp
@@ -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);
+
+ auto getPriority = [&](const QString& givenUrl) {
+ auto url = QUrl::fromUserInput(givenUrl).adjusted(stdOpts);
+
+ // Default to https scheme if undefined
+ if (url.scheme().isEmpty() || !givenUrl.contains("://")) {
+ url.setScheme("https");
+ }
- // Add the empty path to the URL if it's missing
- if (url.path().isEmpty() && !url.hasFragment() && !url.hasQuery()) {
- url.setPath("/");
- }
+ // 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;
+ }
- const QString entryURL = url.toString(QUrl::StripTrailingSlash);
- const QString baseEntryURL =
- url.toString(QUrl::StripTrailingSlash | QUrl::RemovePath | QUrl::RemoveQuery | QUrl::RemoveFragment);
+ // 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;
+ }
- if (!url.host().contains(".") && url.host() != "localhost") {
+ // 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) {
diff --git a/src/browser/BrowserService.h b/src/browser/BrowserService.h
index f52b502b3..f84bf2880 100644
--- a/src/browser/BrowserService.h
+++ b/src/browser/BrowserService.h
@@ -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);
diff --git a/src/browser/BrowserShared.cpp b/src/browser/BrowserShared.cpp
index 08b9fe537..69d0db49f 100644
--- a/src/browser/BrowserShared.cpp
+++ b/src/browser/BrowserShared.cpp
@@ -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
diff --git a/src/cli/keepassxc-cli.cpp b/src/cli/keepassxc-cli.cpp
index a9b276fda..2f8294446 100644
--- a/src/cli/keepassxc-cli.cpp
+++ b/src/cli/keepassxc-cli.cpp
@@ -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();
diff --git a/src/core/AsyncTask.h b/src/core/AsyncTask.h
index f74d7c738..b113134d9 100644
--- a/src/core/AsyncTask.h
+++ b/src/core/AsyncTask.h
@@ -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
diff --git a/src/core/Config.cpp b/src/core/Config.cpp
index afb71f534..4c00dabbc 100644
--- a/src/core/Config.cpp
+++ b/src/core/Config.cpp
@@ -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);
}
diff --git a/src/core/Config.h b/src/core/Config.h
index 64e8c945a..423e1ee81 100644
--- a/src/core/Config.h
+++ b/src/core/Config.h
@@ -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;
diff --git a/src/core/Entry.cpp b/src/core/Entry.cpp
index 0322d353c..81f856ff5 100644
--- a/src/core/Entry.cpp
+++ b/src/core/Entry.cpp
@@ -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))
diff --git a/src/core/Entry.h b/src/core/Entry.h
index cbaf3e2c0..27df86596 100644
--- a/src/core/Entry.h
+++ b/src/core/Entry.h
@@ -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;
diff --git a/src/core/FileWatcher.cpp b/src/core/FileWatcher.cpp
index 2d37734aa..430e60274 100644
--- a/src/core/FileWatcher.cpp
+++ b/src/core/FileWatcher.cpp
@@ -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);
- }
-
- m_ignoreFileChange = false;
+ AsyncTask::runThenCallback([=] { return calculateChecksum(); },
+ this,
+ [=](QByteArray checksum) {
+ if (checksum != m_fileChecksum) {
+ m_fileChecksum = checksum;
+ m_fileChangeDelayTimer.start(0);
+ }
+
+ m_ignoreFileChange = false;
+ });
}
QByteArray FileWatcher::calculateChecksum()
diff --git a/src/core/Group.cpp b/src/core/Group.cpp
index 8be8b5f95..56e545bf6 100644
--- a/src/core/Group.cpp
+++ b/src/core/Group.cpp
@@ -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))
diff --git a/src/core/Group.h b/src/core/Group.h
index 8ff33d8d0..4bea8e4eb 100644
--- a/src/core/Group.h
+++ b/src/core/Group.h
@@ -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);
diff --git a/src/core/Tools.cpp b/src/core/Tools.cpp
index d29e92bff..7e2b65bcd 100644
--- a/src/core/Tools.cpp
+++ b/src/core/Tools.cpp
@@ -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;
}
diff --git a/src/gui/DatabaseOpenDialog.cpp b/src/gui/DatabaseOpenDialog.cpp
index 5e6e41b7a..e7194b7e2 100644
--- a/src/gui/DatabaseOpenDialog.cpp
+++ b/src/gui/DatabaseOpenDialog.cpp
@@ -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);
diff --git a/src/gui/DatabaseOpenWidget.cpp b/src/gui/DatabaseOpenWidget.cpp
index 4dbe9dc9d..b48f86365 100644
--- a/src/gui/DatabaseOpenWidget.cpp
+++ b/src/gui/DatabaseOpenWidget.cpp
@@ -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) {
diff --git a/src/gui/DatabaseOpenWidget.h b/src/gui/DatabaseOpenWidget.h
index 6d2b688ca..fffdf8a7a 100644
--- a/src/gui/DatabaseOpenWidget.h
+++ b/src/gui/DatabaseOpenWidget.h
@@ -66,7 +66,6 @@ protected slots:
private slots:
void browseKeyFile();
void clearKeyFileText();
- void keyFileTextChanged();
void pollHardwareKey();
void hardwareKeyResponse(bool found);
void openHardwareKeyHelp();
diff --git a/src/gui/DatabaseOpenWidget.ui b/src/gui/DatabaseOpenWidget.ui
index a7510baba..eef4a2ed2 100644
--- a/src/gui/DatabaseOpenWidget.ui
+++ b/src/gui/DatabaseOpenWidget.ui
@@ -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,17 +578,15 @@
</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>
<header>gui/MessageWidget.h</header>
@@ -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>
diff --git a/src/gui/DatabaseTabWidget.cpp b/src/gui/DatabaseTabWidget.cpp
index 34fe4db72..2683cecec 100644
--- a/src/gui/DatabaseTabWidget.cpp
+++ b/src/gui/DatabaseTabWidget.cpp
@@ -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"));
diff --git a/src/gui/DatabaseWidget.cpp b/src/gui/DatabaseWidget.cpp
index d5ac7eb3e..505e7f0ba 100644
--- a/src/gui/DatabaseWidget.cpp
+++ b/src/gui/DatabaseWidget.cpp
@@ -330,38 +330,6 @@ void DatabaseWidget::setPreviewSplitterSizes(const QList<int>& 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
*/
QByteArray DatabaseWidget::entryViewState() const
@@ -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) {
diff --git a/src/gui/DatabaseWidget.h b/src/gui/DatabaseWidget.h
index 71fceadf5..efe602121 100644
--- a/src/gui/DatabaseWidget.h
+++ b/src/gui/DatabaseWidget.h
@@ -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();
diff --git a/src/gui/DatabaseWidgetStateSync.cpp b/src/gui/DatabaseWidgetStateSync.cpp
index e984e3d5f..0d8607374 100644
--- a/src/gui/DatabaseWidgetStateSync.cpp
+++ b/src/gui/DatabaseWidgetStateSync.cpp
@@ -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 {
diff --git a/src/gui/DatabaseWidgetStateSync.h b/src/gui/DatabaseWidgetStateSync.h
index bf254e1f5..4e28b0a43 100644
--- a/src/gui/DatabaseWidgetStateSync.h
+++ b/src/gui/DatabaseWidgetStateSync.h
@@ -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;
};
diff --git a/src/gui/EditWidget.cpp b/src/gui/EditWidget.cpp
index 68a8d7d4a..72742b5ac 100644
--- a/src/gui/EditWidget.cpp
+++ b/src/gui/EditWidget.cpp
@@ -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);
}
diff --git a/src/gui/EntryPreviewWidget.cpp b/src/gui/EntryPreviewWidget.cpp
index b873800a8..1dc05c3b7 100644
--- a/src/gui/EntryPreviewWidget.cpp
+++ b/src/gui/EntryPreviewWidget.cpp
@@ -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 {
diff --git a/src/gui/FileDialog.cpp b/src/gui/FileDialog.cpp
index df713c44b..406fbe50c 100644
--- a/src/gui/FileDialog.cpp
+++ b/src/gui/FileDialog.cpp
@@ -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
diff --git a/src/gui/LineEdit.cpp b/src/gui/LineEdit.cpp
deleted file mode 100644
index ec5cb7f9c..000000000
--- a/src/gui/LineEdit.cpp
+++ /dev/null
@@ -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());
-}
diff --git a/src/gui/LineEdit.h b/src/gui/LineEdit.h
deleted file mode 100644
index 1695e8551..000000000
--- a/src/gui/LineEdit.h
+++ /dev/null
@@ -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
diff --git a/src/gui/MainWindow.cpp b/src/gui/MainWindow.cpp
index 81bbf3a08..f3a6e5831 100644
--- a/src/gui/MainWindow.cpp
+++ b/src/gui/MainWindow.cpp
@@ -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);
+ });
}
diff --git a/src/gui/MainWindow.h b/src/gui/MainWindow.h
index 7da6b049b..bfbb53538 100644
--- a/src/gui/MainWindow.h
+++ b/src/gui/MainWindow.h
@@ -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);
diff --git a/src/gui/MainWindow.ui b/src/gui/MainWindow.ui
index 93488dc05..e44d3d217 100644
--- a/src/gui/MainWindow.ui
+++ b/src/gui/MainWindow.ui
@@ -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>
diff --git a/src/gui/PasswordEdit.cpp b/src/gui/PasswordEdit.cpp
index 943164d4c..b43f5c623 100644
--- a/src/gui/PasswordEdit.cpp
+++ b/src/gui/PasswordEdit.cpp
@@ -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();
}
}
}
diff --git a/src/gui/PasswordGeneratorWidget.cpp b/src/gui/PasswordGeneratorWidget.cpp
index 78b65b400..2dc643df2 100644
--- a/src/gui/PasswordGeneratorWidget.cpp
+++ b/src/gui/PasswordGeneratorWidget.cpp
@@ -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()));
diff --git a/src/gui/PasswordGeneratorWidget.ui b/src/gui/PasswordGeneratorWidget.ui
index 65018cbda..81964a517 100644
--- a/src/gui/PasswordGeneratorWidget.ui
+++ b/src/gui/PasswordGeneratorWidget.ui
@@ -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>
diff --git a/src/gui/SearchWidget.cpp b/src/gui/SearchWidget.cpp
index 1c7b683c1..6ade47e2e 100644
--- a/src/gui/SearchWidget.cpp
+++ b/src/gui/SearchWidget.cpp
@@ -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());
}
diff --git a/src/gui/SearchWidget.ui b/src/gui/SearchWidget.ui
index 74cc468cf..c924b4076 100644
--- a/src/gui/SearchWidget.ui
+++ b/src/gui/SearchWidget.ui
@@ -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>
diff --git a/src/gui/dbsettings/DatabaseSettingsDialog.cpp b/src/gui/dbsettings/DatabaseSettingsDialog.cpp
index 32a9b74c2..53561e663 100644
--- a/src/gui/dbsettings/DatabaseSettingsDialog.cpp
+++ b/src/gui/dbsettings/DatabaseSettingsDialog.cpp
@@ -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)
diff --git a/src/gui/dbsettings/DatabaseSettingsWidgetDatabaseKey.cpp b/src/gui/dbsettings/DatabaseSettingsWidgetDatabaseKey.cpp
index 2d733d06d..b59f2d266 100644
--- a/src/gui/dbsettings/DatabaseSettingsWidgetDatabaseKey.cpp
+++ b/src/gui/dbsettings/DatabaseSettingsWidgetDatabaseKey.cpp
@@ -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,
diff --git a/src/gui/entry/EditEntryWidget.cpp b/src/gui/entry/EditEntryWidget.cpp
index 53aa04efa..680243280 100644
--- a/src/gui/entry/EditEntryWidget.cpp
+++ b/src/gui/entry/EditEntryWidget.cpp
@@ -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()
diff --git a/src/gui/entry/EditEntryWidget.h b/src/gui/entry/EditEntryWidget.h
index 3d1835396..e359d1029 100644
--- a/src/gui/entry/EditEntryWidget.h
+++ b/src/gui/entry/EditEntryWidget.h
@@ -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;
diff --git a/src/gui/entry/EditEntryWidgetMain.ui b/src/gui/entry/EditEntryWidgetMain.ui
index f96481a3f..183ca0388 100644
--- a/src/gui/entry/EditEntryWidgetMain.ui
+++ b/src/gui/entry/EditEntryWidgetMain.ui
@@ -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>
diff --git a/src/gui/entry/EntryModel.cpp b/src/gui/entry/EntryModel.cpp
index 0b766c854..9a9cbecab 100644
--- a/src/gui/entry/EntryModel.cpp
+++ b/src/gui/entry/EntryModel.cpp
@@ -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();
-}
diff --git a/src/gui/entry/EntryModel.h b/src/gui/entry/EntryModel.h
index 78da7194c..01c2483a9 100644
--- a/src/gui/entry/EntryModel.h
+++ b/src/gui/entry/EntryModel.h
@@ -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;
};
diff --git a/src/gui/entry/EntryView.cpp b/src/gui/entry/EntryView.cpp
index 18a69687d..54c1547c7 100644
--- a/src/gui/entry/EntryView.cpp
+++ b/src/gui/entry/EntryView.cpp
@@ -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
-
- // 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
+ 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(sortIndicatorChanged(int,Qt::SortOrder)), SLOT(sortIndicatorChanged(int,Qt::SortOrder)));
- // clang-format on
}
void EntryView::contextMenuShortcutPressed()
@@ -302,50 +281,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
*/
QByteArray EntryView::viewState() const
@@ -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;
+}
diff --git a/src/gui/entry/EntryView.h b/src/gui/entry/EntryView.h
index e32aa4729..ad2fd037c 100644
--- a/src/gui/entry/EntryView.h
+++ b/src/gui/entry/EntryView.h
@@ -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;
};
diff --git a/src/gui/group/EditGroupWidget.cpp b/src/gui/group/EditGroupWidget.cpp
index b77e49864..ba79cce18 100644
--- a/src/gui/group/EditGroupWidget.cpp
+++ b/src/gui/group/EditGroupWidget.cpp
@@ -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)
diff --git a/src/gui/group/EditGroupWidget.h b/src/gui/group/EditGroupWidget.h
index cc8738d8c..ed1bb0179 100644
--- a/src/gui/group/EditGroupWidget.h
+++ b/src/gui/group/EditGroupWidget.h
@@ -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;
diff --git a/src/gui/group/EditGroupWidgetMain.ui b/src/gui/group/EditGroupWidgetMain.ui
index 9531cc847..faa8a30ff 100644
--- a/src/gui/group/EditGroupWidgetMain.ui
+++ b/src/gui/group/EditGroupWidgetMain.ui
@@ -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>
- <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 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>
- <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>
diff --git a/src/gui/group/GroupModel.cpp b/src/gui/group/GroupModel.cpp
index beba13774..e61410334 100644
--- a/src/gui/group/GroupModel.cpp
+++ b/src/gui/group/GroupModel.cpp
@@ -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);
diff --git a/src/gui/osutils/macutils/AppKit.h b/src/gui/osutils/macutils/AppKit.h
index a6f7b3a12..02121683d 100644
--- a/src/gui/osutils/macutils/AppKit.h
+++ b/src/gui/osutils/macutils/AppKit.h
@@ -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);
diff --git a/src/gui/reports/ReportsWidgetHealthcheck.cpp b/src/gui/reports/ReportsWidgetHealthcheck.cpp
index 5f502b16b..bc42b1e01 100644
--- a/src/gui/reports/ReportsWidgetHealthcheck.cpp
+++ b/src/gui/reports/ReportsWidgetHealthcheck.cpp
@@ -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();
diff --git a/src/gui/reports/ReportsWidgetHibp.cpp b/src/gui/reports/ReportsWidgetHibp.cpp
index 48e36518d..406c465b9 100644
--- a/src/gui/reports/ReportsWidgetHibp.cpp
+++ b/src/gui/reports/ReportsWidgetHibp.cpp
@@ -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);
}
diff --git a/src/gui/styles/base/BaseStyle.cpp b/src/gui/styles/base/BaseStyle.cpp
index aac9daf1c..104e1d4d9 100644
--- a/src/gui/styles/base/BaseStyle.cpp
+++ b/src/gui/styles/base/BaseStyle.cpp
@@ -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,
diff --git a/src/gui/styles/base/BaseStyle.h b/src/gui/styles/base/BaseStyle.h
index d6269fad7..d3c20915c 100644
--- a/src/gui/styles/base/BaseStyle.h
+++ b/src/gui/styles/base/BaseStyle.h
@@ -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;
};
diff --git a/src/gui/styles/base/basestyle.qss b/src/gui/styles/base/basestyle.qss
index 012c7cd0e..ff5d915bb 100644
--- a/src/gui/styles/base/basestyle.qss
+++ b/src/gui/styles/base/basestyle.qss
@@ -64,3 +64,8 @@ DatabaseWidget #SearchBanner, DatabaseWidget #KeeShareBanner {
border: 1px solid palette(dark);
padding: 2px;
}
+
+QPlainTextEdit, QTextEdit {
+ background-color: palette(base);
+ padding-left: 4px;
+}
diff --git a/src/gui/styles/dark/DarkStyle.cpp b/src/gui/styles/dark/DarkStyle.cpp
index b8e548228..25f75e5ab 100644
--- a/src/gui/styles/dark/DarkStyle.cpp
+++ b/src/gui/styles/dark/DarkStyle.cpp
@@ -23,6 +23,14 @@
#include <QMenuBar>
#include <QToolBar>
+DarkStyle::DarkStyle()
+ : BaseStyle()
+{
+#ifdef Q_OS_MACOS
+ m_drawNativeMacOsToolBar = osUtils->isDarkMode();
+#endif
+}
+
QPalette DarkStyle::standardPalette() const
{
auto palette = BaseStyle::standardPalette();
@@ -105,13 +113,10 @@ void DarkStyle::polish(QWidget* widget)
|| qobject_cast<QToolBar*>(widget)) {
auto palette = widget->palette();
#if defined(Q_OS_MACOS)
- if (osUtils->isDarkMode()) {
- // Let the Cocoa platform plugin draw its own background
- palette.setColor(QPalette::All, QPalette::Window, Qt::transparent);
- } else {
- palette.setColor(QPalette::Active, QPalette::Window, QRgb(0x2A2A2A));
- palette.setColor(QPalette::Inactive, QPalette::Window, QRgb(0x2D2D2D));
- palette.setColor(QPalette::Disabled, QPalette::Window, QRgb(0x2A2A2A));
+ if (!osUtils->isDarkMode()) {
+ palette.setColor(QPalette::Active, QPalette::Window, QRgb(0x252525));
+ palette.setColor(QPalette::Inactive, QPalette::Window, QRgb(0x282828));
+ palette.setColor(QPalette::Disabled, QPalette::Window, QRgb(0x252525));
}
#elif defined(Q_OS_WIN)
// Register event filter for better dark mode support
diff --git a/src/gui/styles/dark/DarkStyle.h b/src/gui/styles/dark/DarkStyle.h
index 9b955d3a5..3de05c065 100644
--- a/src/gui/styles/dark/DarkStyle.h
+++ b/src/gui/styles/dark/DarkStyle.h
@@ -26,6 +26,7 @@ class DarkStyle : public BaseStyle
Q_OBJECT
public:
+ DarkStyle();
QPalette standardPalette() const override;
using BaseStyle::polish;
diff --git a/src/gui/styles/light/LightStyle.cpp b/src/gui/styles/light/LightStyle.cpp
index 8dd9d6c53..f1f0cb997 100644
--- a/src/gui/styles/light/LightStyle.cpp
+++ b/src/gui/styles/light/LightStyle.cpp
@@ -24,6 +24,14 @@
#include <QMenuBar>
#include <QToolBar>
+LightStyle::LightStyle()
+ : BaseStyle()
+{
+#ifdef Q_OS_MACOS
+ m_drawNativeMacOsToolBar = !osUtils->isDarkMode();
+#endif
+}
+
QPalette LightStyle::standardPalette() const
{
auto palette = BaseStyle::standardPalette();
@@ -106,13 +114,10 @@ void LightStyle::polish(QWidget* widget)
|| qobject_cast<QToolBar*>(widget)) {
auto palette = widget->palette();
#if defined(Q_OS_MACOS)
- if (!osUtils->isDarkMode()) {
- // Let the Cocoa platform plugin draw its own background
- palette.setColor(QPalette::All, QPalette::Window, Qt::transparent);
- } else {
- palette.setColor(QPalette::Active, QPalette::Window, QRgb(0xD6D6D6));
- palette.setColor(QPalette::Inactive, QPalette::Window, QRgb(0xF6F6F6));
- palette.setColor(QPalette::Disabled, QPalette::Window, QRgb(0xD4D4D4));
+ if (osUtils->isDarkMode()) {
+ palette.setColor(QPalette::Active, QPalette::Window, QRgb(0xD1D1D1));
+ palette.setColor(QPalette::Inactive, QPalette::Window, QRgb(0xF4F4F4));
+ palette.setColor(QPalette::Disabled, QPalette::Window, QRgb(0xD1D1D1));
}
#elif defined(Q_OS_WIN)
palette.setColor(QPalette::All, QPalette::Window, QRgb(0xFFFFFF));
diff --git a/src/gui/styles/light/LightStyle.h b/src/gui/styles/light/LightStyle.h
index d2d4f48a3..87e202502 100644
--- a/src/gui/styles/light/LightStyle.h
+++ b/src/gui/styles/light/LightStyle.h
@@ -26,6 +26,7 @@ class LightStyle : public BaseStyle
Q_OBJECT
public:
+ LightStyle();
QPalette standardPalette() const override;
using BaseStyle::polish;
diff --git a/src/gui/wizard/NewDatabaseWizardPage.cpp b/src/gui/wizard/NewDatabaseWizardPage.cpp
index 5b64a6b3d..c0c9401c7 100644
--- a/src/gui/wizard/NewDatabaseWizardPage.cpp
+++ b/src/gui/wizard/NewDatabaseWizardPage.cpp
@@ -47,11 +47,7 @@ NewDatabaseWizardPage::~NewDatabaseWizardPage()
void NewDatabaseWizardPage::setPageWidget(DatabaseSettingsWidget* page)
{
m_pageWidget = page;
- if (!m_ui->pageContentLayout->isEmpty()) {
- delete m_ui->pageContentLayout->takeAt(0);
- }
- m_ui->pageContentLayout->addWidget(m_pageWidget);
- m_ui->pageContentLayout->setSizeConstraint(QLayout::SetMinimumSize);
+ m_ui->pageContent->setWidget(m_pageWidget);
m_ui->advancedSettingsButton->setVisible(m_pageWidget->hasAdvancedMode());
}
diff --git a/src/gui/wizard/NewDatabaseWizardPage.ui b/src/gui/wizard/NewDatabaseWizardPage.ui
index e920b26ed..a91b653d0 100644
--- a/src/gui/wizard/NewDatabaseWizardPage.ui
+++ b/src/gui/wizard/NewDatabaseWizardPage.ui
@@ -2,6 +2,14 @@
<ui version="4.0">
<class>NewDatabaseWizardPage</class>
<widget class="QWizardPage" name="NewDatabaseWizardPage">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>578</width>
+ <height>410</height>
+ </rect>
+ </property>
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding">
<horstretch>0</horstretch>
@@ -17,9 +25,52 @@
<property name="subTitle">
<string>Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings.</string>
</property>
- <layout class="QVBoxLayout" name="verticalLayout">
+ <layout class="QVBoxLayout" name="verticalLayout" stretch="1,0,0">
<item>
- <layout class="QVBoxLayout" name="pageContentLayout"/>
+ <widget class="QScrollArea" name="pageContent">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Expanding">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>560</width>
+ <height>300</height>
+ </size>
+ </property>
+ <property name="styleSheet">
+ <string notr="true">QScrollArea { background: transparent; }
+QScrollArea &gt; QWidget &gt; QWidget { background: transparent; }
+QScrollArea &gt; QWidget &gt; QScrollBar { background: 1; }</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="content">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>560</width>
+ <height>349</height>
+ </rect>
+ </property>
+ </widget>
+ </widget>
</item>
<item>
<spacer name="verticalSpacer">
@@ -29,7 +80,7 @@
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
- <height>15</height>
+ <height>6</height>
</size>
</property>
</spacer>
diff --git a/src/gui/wizard/NewDatabaseWizardPageDatabaseKey.cpp b/src/gui/wizard/NewDatabaseWizardPageDatabaseKey.cpp
index 3180400c0..a71b3f6c8 100644
--- a/src/gui/wizard/NewDatabaseWizardPageDatabaseKey.cpp
+++ b/src/gui/wizard/NewDatabaseWizardPageDatabaseKey.cpp
@@ -26,16 +26,8 @@ NewDatabaseWizardPageDatabaseKey::NewDatabaseWizardPageDatabaseKey(QWidget* pare
setTitle(tr("Database Credentials"));
setSubTitle(tr("A set of credentials known only to you that protects your database."));
-
- connect(pageWidget(), SIGNAL(sizeChanged()), SLOT(updateWindowSize()));
}
NewDatabaseWizardPageDatabaseKey::~NewDatabaseWizardPageDatabaseKey()
{
}
-
-void NewDatabaseWizardPageDatabaseKey::updateWindowSize()
-{
- // ugly workaround for QWizard not managing to react to size changes automatically
- window()->adjustSize();
-}
diff --git a/src/gui/wizard/NewDatabaseWizardPageDatabaseKey.h b/src/gui/wizard/NewDatabaseWizardPageDatabaseKey.h
index e0fb5349e..7b6980f3e 100644
--- a/src/gui/wizard/NewDatabaseWizardPageDatabaseKey.h
+++ b/src/gui/wizard/NewDatabaseWizardPageDatabaseKey.h
@@ -28,9 +28,6 @@ public:
explicit NewDatabaseWizardPageDatabaseKey(QWidget* parent = nullptr);
Q_DISABLE_COPY(NewDatabaseWizardPageDatabaseKey);
~NewDatabaseWizardPageDatabaseKey() override;
-
-private slots:
- void updateWindowSize();
};
#endif // KEEPASSXC_NEWDATABASEWIZARDPAGEDATABASEKEY_H
diff --git a/src/keeshare/ShareObserver.cpp b/src/keeshare/ShareObserver.cpp
index 6dc7a748d..6fd629b4c 100644
--- a/src/keeshare/ShareObserver.cpp
+++ b/src/keeshare/ShareObserver.cpp
@@ -66,7 +66,7 @@ void ShareObserver::deinitialize()
void ShareObserver::reinitialize()
{
- QList<QPair<Group*, KeeShareSettings::Reference>> shares;
+ QList<QPair<QPointer<Group>, KeeShareSettings::Reference>> shares;
for (Group* group : m_db->rootGroup()->groupsRecursive(true)) {
auto oldReference = m_groupToReference.value(group);
auto newReference = KeeShare::referenceOf(group);
@@ -97,6 +97,10 @@ void ShareObserver::reinitialize()
for (const auto& share : shares) {
auto group = share.first;
auto& reference = share.second;
+ // Check group validity, it may have been deleted by a merge action
+ if (!group) {
+ continue;
+ }
if (!reference.path.isEmpty() && reference.type != KeeShareSettings::Inactive) {
const auto newResolvedPath = resolvePath(reference.path, m_db);
diff --git a/src/main.cpp b/src/main.cpp
index 7e340da4d..b88dc41e0 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -56,51 +56,47 @@ int main(int argc, char** argv)
QGuiApplication::setHighDpiScaleFactorRoundingPolicy(Qt::HighDpiScaleFactorRoundingPolicy::PassThrough);
#endif
- Application app(argc, argv);
- Application::setApplicationName("KeePassXC");
- Application::setApplicationVersion(KEEPASSXC_VERSION);
- app.setProperty("KPXC_QUALIFIED_APPNAME", "org.keepassxc.KeePassXC");
- app.applyTheme();
-#if QT_VERSION >= QT_VERSION_CHECK(5, 7, 0)
- QGuiApplication::setDesktopFileName(app.property("KPXC_QUALIFIED_APPNAME").toString() + QStringLiteral(".desktop"));
-#endif
-
- // don't set organizationName as that changes the return value of
- // QStandardPaths::writableLocation(QDesktopServices::DataLocation)
- Bootstrap::bootstrapApplication();
-
QCommandLineParser parser;
parser.setApplicationDescription(QObject::tr("KeePassXC - cross-platform password manager"));
parser.addPositionalArgument(
- "filename", QObject::tr("filenames of the password databases to open (*.kdbx)"), "[filename(s)]");
+ "filename(s)", QObject::tr("filenames of the password databases to open (*.kdbx)"), "[filename(s)]");
QCommandLineOption configOption("config", QObject::tr("path to a custom config file"), "config");
+ QCommandLineOption localConfigOption(
+ "localconfig", QObject::tr("path to a custom local config file"), "localconfig");
QCommandLineOption keyfileOption("keyfile", QObject::tr("key file of the database"), "keyfile");
QCommandLineOption pwstdinOption("pw-stdin", QObject::tr("read password of the database from stdin"));
- // This is needed under Windows where clients send --parent-window parameter with Native Messaging connect method
- QCommandLineOption parentWindowOption(QStringList() << "pw"
- << "parent-window",
- QObject::tr("Parent window handle"),
- "handle");
QCommandLineOption helpOption = parser.addHelpOption();
QCommandLineOption versionOption = parser.addVersionOption();
QCommandLineOption debugInfoOption(QStringList() << "debug-info", QObject::tr("Displays debugging information."));
parser.addOption(configOption);
+ parser.addOption(localConfigOption);
parser.addOption(keyfileOption);
parser.addOption(pwstdinOption);
- parser.addOption(parentWindowOption);
parser.addOption(debugInfoOption);
+ Application app(argc, argv);
+ // don't set organizationName as that changes the return value of
+ // QStandardPaths::writableLocation(QDesktopServices::DataLocation)
+ Application::setApplicationName("KeePassXC");
+ Application::setApplicationVersion(KEEPASSXC_VERSION);
+ app.setProperty("KPXC_QUALIFIED_APPNAME", "org.keepassxc.KeePassXC");
+
parser.process(app);
- // Don't try and do anything with the application if we're only showing the help / version
+ // Exit early if we're only showing the help / version
if (parser.isSet(versionOption) || parser.isSet(helpOption)) {
return EXIT_SUCCESS;
}
- const QStringList fileNames = parser.positionalArguments();
+ // Process config file options early
+ if (parser.isSet(configOption) || parser.isSet(localConfigOption)) {
+ Config::createConfigFromFile(parser.value(configOption), parser.value(localConfigOption));
+ }
+ // Process single instance and early exit if already running
+ const QStringList fileNames = parser.positionalArguments();
if (app.isAlreadyRunning()) {
if (!fileNames.isEmpty()) {
app.sendFileNamesToRunningInstance(fileNames);
@@ -109,7 +105,14 @@ int main(int argc, char** argv)
return EXIT_SUCCESS;
}
- QApplication::setQuitOnLastWindowClosed(false);
+ // Apply the configured theme before creating any GUI elements
+ app.applyTheme();
+
+#if QT_VERSION >= QT_VERSION_CHECK(5, 7, 0)
+ QGuiApplication::setDesktopFileName(app.property("KPXC_QUALIFIED_APPNAME").toString() + QStringLiteral(".desktop"));
+#endif
+
+ Bootstrap::bootstrapApplication();
if (!Crypto::init()) {
QString error = QObject::tr("Fatal error while testing the cryptographic functions.");
@@ -128,10 +131,6 @@ int main(int argc, char** argv)
return EXIT_SUCCESS;
}
- if (parser.isSet(configOption)) {
- Config::createConfigFromFile(parser.value(configOption));
- }
-
MainWindow mainWindow;
QObject::connect(&app, SIGNAL(anotherInstanceStarted()), &mainWindow, SLOT(bringToFront()));
QObject::connect(&app, SIGNAL(applicationActivated()), &mainWindow, SLOT(bringToFront()));
diff --git a/tests/TestBrowser.cpp b/tests/TestBrowser.cpp
index 3e518c1e2..c3a90e37c 100644
--- a/tests/TestBrowser.cpp
+++ b/tests/TestBrowser.cpp
@@ -128,59 +128,52 @@ void TestBrowser::testBaseDomain()
void TestBrowser::testSortPriority()
{
- QString host = "github.com";
- QString submitUrl = "https://github.com/session";
- QString baseSubmitUrl = "https://github.com";
- QString fullUrl = "https://github.com/login";
-
- QScopedPointer<Entry> entry1(new Entry());
- QScopedPointer<Entry> entry2(new Entry());
- QScopedPointer<Entry> entry3(new Entry());
- QScopedPointer<Entry> entry4(new Entry());
- QScopedPointer<Entry> entry5(new Entry());
- QScopedPointer<Entry> entry6(new Entry());
- QScopedPointer<Entry> entry7(new Entry());
- QScopedPointer<Entry> entry8(new Entry());
- QScopedPointer<Entry> entry9(new Entry());
- QScopedPointer<Entry> entry10(new Entry());
- QScopedPointer<Entry> entry11(new Entry());
-
- entry1->setUrl("https://github.com/login");
- entry2->setUrl("https://github.com/login");
- entry3->setUrl("https://github.com/");
- entry4->setUrl("github.com/login");
- entry5->setUrl("http://github.com");
- entry6->setUrl("http://github.com/login");
- entry7->setUrl("github.com");
- entry8->setUrl("github.com/login");
- entry9->setUrl("https://github"); // Invalid URL
- entry10->setUrl("github.com");
- entry11->setUrl("https://github.com/login"); // Exact match
-
- // The extension uses the submitUrl as default for comparison
- auto res1 = m_browserService->sortPriority(entry1.data(), host, "https://github.com/login", baseSubmitUrl, fullUrl);
- auto res2 = m_browserService->sortPriority(entry2.data(), host, submitUrl, baseSubmitUrl, baseSubmitUrl);
- auto res3 = m_browserService->sortPriority(entry3.data(), host, submitUrl, baseSubmitUrl, fullUrl);
- auto res4 = m_browserService->sortPriority(entry4.data(), host, submitUrl, baseSubmitUrl, fullUrl);
- auto res5 = m_browserService->sortPriority(entry5.data(), host, submitUrl, baseSubmitUrl, fullUrl);
- auto res6 = m_browserService->sortPriority(entry6.data(), host, submitUrl, baseSubmitUrl, fullUrl);
- auto res7 = m_browserService->sortPriority(entry7.data(), host, submitUrl, baseSubmitUrl, fullUrl);
- auto res8 = m_browserService->sortPriority(entry8.data(), host, submitUrl, baseSubmitUrl, fullUrl);
- auto res9 = m_browserService->sortPriority(entry9.data(), host, submitUrl, baseSubmitUrl, fullUrl);
- auto res10 = m_browserService->sortPriority(entry10.data(), host, submitUrl, baseSubmitUrl, fullUrl);
- auto res11 = m_browserService->sortPriority(entry11.data(), host, submitUrl, baseSubmitUrl, fullUrl);
-
- QCOMPARE(res1, 100);
- QCOMPARE(res2, 40);
- QCOMPARE(res3, 90);
- QCOMPARE(res4, 0);
- QCOMPARE(res5, 0);
- QCOMPARE(res6, 0);
- QCOMPARE(res7, 0);
- QCOMPARE(res8, 0);
- QCOMPARE(res9, 0);
- QCOMPARE(res10, 0);
- QCOMPARE(res11, 100);
+ QFETCH(QString, entryUrl);
+ QFETCH(QString, siteUrl);
+ QFETCH(QString, formUrl);
+ QFETCH(int, expectedScore);
+
+ QScopedPointer<Entry> entry(new Entry());
+ entry->setUrl(entryUrl);
+
+ QCOMPARE(m_browserService->sortPriority(m_browserService->getEntryURLs(entry.data()), siteUrl, formUrl),
+ expectedScore);
+}
+
+void TestBrowser::testSortPriority_data()
+{
+ const QString siteUrl = "https://github.com/login";
+ const QString formUrl = "https://github.com/session";
+
+ QTest::addColumn<QString>("entryUrl");
+ QTest::addColumn<QString>("siteUrl");
+ QTest::addColumn<QString>("formUrl");
+ QTest::addColumn<int>("expectedScore");
+
+ QTest::newRow("Exact Match") << siteUrl << siteUrl << siteUrl << 100;
+ QTest::newRow("Exact Match (site)") << siteUrl << siteUrl << formUrl << 100;
+ QTest::newRow("Exact Match (form)") << siteUrl << "https://github.net" << siteUrl << 100;
+ QTest::newRow("Exact Match No Trailing Slash") << "https://github.com"
+ << "https://github.com/" << formUrl << 100;
+ QTest::newRow("Exact Match No Scheme") << "github.com/login" << siteUrl << formUrl << 100;
+ QTest::newRow("Exact Match with Query") << "https://github.com/login?test=test#fragment"
+ << "https://github.com/login?test=test" << formUrl << 100;
+
+ QTest::newRow("Site Query Mismatch") << siteUrl << siteUrl + "?test=test" << formUrl << 90;
+
+ QTest::newRow("Path Mismatch (site)") << "https://github.com/" << siteUrl << formUrl << 80;
+ QTest::newRow("Path Mismatch (site) No Scheme") << "github.com" << siteUrl << formUrl << 80;
+ QTest::newRow("Path Mismatch (form)") << "https://github.com/"
+ << "https://github.net" << formUrl << 70;
+
+ QTest::newRow("Subdomain Mismatch (site)") << siteUrl << "https://sub.github.com/"
+ << "https://github.net/" << 60;
+ QTest::newRow("Subdomain Mismatch (form)") << siteUrl << "https://github.net/"
+ << "https://sub.github.com/" << 50;
+
+ QTest::newRow("Scheme Mismatch") << "http://github.com" << siteUrl << formUrl << 0;
+ QTest::newRow("Scheme Mismatch w/path") << "http://github.com/login" << siteUrl << formUrl << 0;
+ QTest::newRow("Invalid URL") << "http://github" << siteUrl << formUrl << 0;
}
void TestBrowser::testSearchEntries()
@@ -344,14 +337,14 @@ void TestBrowser::testSubdomainsAndPaths()
createEntries(entryURLs, root);
- result = m_browserService->searchEntries(db, "https://accounts.example.com", "https://accounts.example.com");
+ result = m_browserService->searchEntries(db, "https://accounts.example.com/", "https://accounts.example.com/");
QCOMPARE(result.length(), 3);
QCOMPARE(result[0]->url(), QString("https://accounts.example.com"));
QCOMPARE(result[1]->url(), QString("https://accounts.example.com/path"));
QCOMPARE(result[2]->url(), QString("https://example.com/")); // Accepts any subdomain
result = m_browserService->searchEntries(
- db, "https://another.accounts.example.com", "https://another.accounts.example.com");
+ db, "https://another.accounts.example.com/", "https://another.accounts.example.com/");
QCOMPARE(result.length(), 4);
QCOMPARE(result[0]->url(),
QString("https://accounts.example.com")); // Accepts any subdomain under accounts.example.com
@@ -381,33 +374,32 @@ void TestBrowser::testSortEntries()
"http://github.com",
"http://github.com/login",
"github.com",
- "github.com/login",
+ "github.com/login?test=test",
"https://github", // Invalid URL
"github.com"};
auto entries = createEntries(urls, root);
browserSettings()->setBestMatchOnly(false);
- auto result = m_browserService->sortEntries(
- entries, "github.com", "https://github.com/session", "https://github.com"); // entries, host, submitUrl
+ browserSettings()->setSortByUsername(true);
+ auto result = m_browserService->sortEntries(entries, "https://github.com/login", "https://github.com/session");
QCOMPARE(result.size(), 10);
- QCOMPARE(result[0]->username(), QString("User 2"));
- QCOMPARE(result[0]->url(), QString("https://github.com/"));
- QCOMPARE(result[1]->username(), QString("User 0"));
- QCOMPARE(result[1]->url(), QString("https://github.com/login_page"));
- QCOMPARE(result[2]->username(), QString("User 1"));
- QCOMPARE(result[2]->url(), QString("https://github.com/login"));
- QCOMPARE(result[3]->username(), QString("User 3"));
- QCOMPARE(result[3]->url(), QString("github.com/login"));
+ QCOMPARE(result[0]->username(), QString("User 1"));
+ QCOMPARE(result[0]->url(), urls[1]);
+ QCOMPARE(result[1]->username(), QString("User 3"));
+ QCOMPARE(result[1]->url(), urls[3]);
+ QCOMPARE(result[2]->username(), QString("User 7"));
+ QCOMPARE(result[2]->url(), urls[7]);
+ QCOMPARE(result[3]->username(), QString("User 0"));
+ QCOMPARE(result[3]->url(), urls[0]);
// Test with a perfect match. That should be first in the list.
- result = m_browserService->sortEntries(
- entries, "github.com", "https://github.com/session", "https://github.com/login_page");
+ result = m_browserService->sortEntries(entries, "https://github.com/login_page", "https://github.com/session");
QCOMPARE(result.size(), 10);
QCOMPARE(result[0]->username(), QString("User 0"));
QCOMPARE(result[0]->url(), QString("https://github.com/login_page"));
- QCOMPARE(result[1]->username(), QString("User 2"));
- QCOMPARE(result[1]->url(), QString("https://github.com/"));
+ QCOMPARE(result[1]->username(), QString("User 1"));
+ QCOMPARE(result[1]->url(), QString("https://github.com/login"));
}
QList<Entry*> TestBrowser::createEntries(QStringList& urls, Group* root) const
@@ -437,6 +429,7 @@ void TestBrowser::testValidURLs()
urls["http:/example.com"] = false;
urls["cmd://C:/Toolchains/msys2/usr/bin/mintty \"ssh jon@192.168.0.1:22\""] = true;
urls["file:///Users/testUser/Code/test.html"] = true;
+ urls["{REF:A@I:46C9B1FFBD4ABC4BBB260C6190BAD20C} "] = true;
QHashIterator<QString, bool> i(urls);
while (i.hasNext()) {
@@ -457,45 +450,128 @@ void TestBrowser::testBestMatchingCredentials()
browserSettings()->setBestMatchOnly(true);
- auto result = m_browserService->searchEntries(db, "https://github.com/loginpage", "https://github.com/loginpage");
- QCOMPARE(result.size(), 1);
- QCOMPARE(result[0]->url(), QString("https://github.com/loginpage"));
-
- result = m_browserService->searchEntries(db, "https://github.com/justsomepage", "https://github.com/justsomepage");
- QCOMPARE(result.size(), 1);
- QCOMPARE(result[0]->url(), QString("https://github.com/justsomepage"));
-
- result = m_browserService->searchEntries(db, "https://github.com/", "https://github.com/");
- m_browserService->sortEntries(entries, "github.com", "https://github.com/", "https://github.com/");
- QCOMPARE(result.size(), 1);
- QCOMPARE(result[0]->url(), QString("https://github.com/"));
-
+ QString siteUrl = "https://github.com/loginpage";
+ auto result = m_browserService->searchEntries(db, siteUrl, siteUrl);
+ auto sorted = m_browserService->sortEntries(result, siteUrl, siteUrl);
+ QCOMPARE(sorted.size(), 1);
+ QCOMPARE(sorted[0]->url(), siteUrl);
+
+ siteUrl = "https://github.com/justsomepage";
+ result = m_browserService->searchEntries(db, siteUrl, siteUrl);
+ sorted = m_browserService->sortEntries(result, siteUrl, siteUrl);
+ QCOMPARE(sorted.size(), 1);
+ QCOMPARE(sorted[0]->url(), siteUrl);
+
+ siteUrl = "https://github.com/";
+ result = m_browserService->searchEntries(db, siteUrl, siteUrl);
+ sorted = m_browserService->sortEntries(entries, siteUrl, siteUrl);
+ QCOMPARE(sorted.size(), 1);
+ QCOMPARE(sorted[0]->url(), siteUrl);
+
+ // Without best-matching the URL with the path should be returned first
browserSettings()->setBestMatchOnly(false);
- result = m_browserService->searchEntries(db, "https://github.com/loginpage", "https://github.com/loginpage");
- QCOMPARE(result.size(), 3);
- QCOMPARE(result[0]->url(), QString("https://github.com/loginpage"));
+ siteUrl = "https://github.com/loginpage";
+ result = m_browserService->searchEntries(db, siteUrl, siteUrl);
+ sorted = m_browserService->sortEntries(result, siteUrl, siteUrl);
+ QCOMPARE(sorted.size(), 3);
+ QCOMPARE(sorted[0]->url(), siteUrl);
// Test with subdomains
QStringList subdomainsUrls = {"https://sub.github.com/loginpage",
"https://sub.github.com/justsomepage",
- "https://bus.github.com/justsomepage"};
+ "https://bus.github.com/justsomepage",
+ "https://subdomain.example.com/",
+ "https://subdomain.example.com",
+ "https://example.com"};
entries = createEntries(subdomainsUrls, root);
browserSettings()->setBestMatchOnly(true);
+ siteUrl = "https://sub.github.com/justsomepage";
+ result = m_browserService->searchEntries(db, siteUrl, siteUrl);
+ sorted = m_browserService->sortEntries(result, siteUrl, siteUrl);
+ QCOMPARE(sorted.size(), 1);
+ QCOMPARE(sorted[0]->url(), siteUrl);
+
+ siteUrl = "https://github.com/justsomepage";
+ result = m_browserService->searchEntries(db, siteUrl, siteUrl);
+ sorted = m_browserService->sortEntries(result, siteUrl, siteUrl);
+ QCOMPARE(sorted.size(), 1);
+ QCOMPARE(sorted[0]->url(), siteUrl);
+
+ siteUrl = "https://sub.github.com/justsomepage?wehavesomeextra=here";
+ result = m_browserService->searchEntries(db, siteUrl, siteUrl);
+ sorted = m_browserService->sortEntries(result, siteUrl, siteUrl);
+ QCOMPARE(sorted.size(), 1);
+ QCOMPARE(sorted[0]->url(), QString("https://sub.github.com/justsomepage"));
+
+ // The matching should not care if there's a / path or not.
+ siteUrl = "https://subdomain.example.com/";
+ result = m_browserService->searchEntries(db, siteUrl, siteUrl);
+ sorted = m_browserService->sortEntries(result, siteUrl, siteUrl);
+ QCOMPARE(sorted.size(), 2);
+ QCOMPARE(sorted[0]->url(), QString("https://subdomain.example.com/"));
+ QCOMPARE(sorted[1]->url(), QString("https://subdomain.example.com"));
+
+ // Entries with https://example.com should be still returned even if the site URL has a subdomain. Those have the
+ // best match.
+ db = QSharedPointer<Database>::create();
+ root = db->rootGroup();
+ QStringList domainUrls = {"https://example.com", "https://example.com", "https://other.example.com"};
+ entries = createEntries(domainUrls, root);
+ siteUrl = "https://subdomain.example.com";
+ result = m_browserService->searchEntries(db, siteUrl, siteUrl);
+ sorted = m_browserService->sortEntries(result, siteUrl, siteUrl);
+
+ QCOMPARE(sorted.size(), 2);
+ QCOMPARE(sorted[0]->url(), QString("https://example.com"));
+ QCOMPARE(sorted[1]->url(), QString("https://example.com"));
+
+ // https://github.com/keepassxreboot/keepassxc/issues/4754
+ db = QSharedPointer<Database>::create();
+ root = db->rootGroup();
+ QStringList fooUrls = {"https://example.com/foo", "https://example.com/bar"};
+ entries = createEntries(fooUrls, root);
+
+ for (const auto& url : fooUrls) {
+ result = m_browserService->searchEntries(db, url, url);
+ sorted = m_browserService->sortEntries(result, url, url);
+ QCOMPARE(sorted.size(), 1);
+ QCOMPARE(sorted[0]->url(), QString(url));
+ }
- result = m_browserService->searchEntries(
- db, "https://sub.github.com/justsomepage", "https://sub.github.com/justsomepage");
- QCOMPARE(result.size(), 1);
- QCOMPARE(result[0]->url(), QString("https://sub.github.com/justsomepage"));
-
- result = m_browserService->searchEntries(db, "https://github.com/justsomepage", "https://github.com/justsomepage");
- QCOMPARE(result.size(), 1);
- QCOMPARE(result[0]->url(), QString("https://github.com/justsomepage"));
-
- result = m_browserService->searchEntries(db,
- "https://sub.github.com/justsomepage?wehavesomeextra=here",
- "https://sub.github.com/justsomepage?wehavesomeextra=here");
- QCOMPARE(result.size(), 1);
- QCOMPARE(result[0]->url(), QString("https://sub.github.com/justsomepage"));
+ // https://github.com/keepassxreboot/keepassxc/issues/4734
+ db = QSharedPointer<Database>::create();
+ root = db->rootGroup();
+ QStringList testUrls = {"http://some.domain.tld/somePath", "http://some.domain.tld/otherPath"};
+ entries = createEntries(testUrls, root);
+
+ for (const auto& url : testUrls) {
+ result = m_browserService->searchEntries(db, url, url);
+ sorted = m_browserService->sortEntries(result, url, url);
+ QCOMPARE(sorted.size(), 1);
+ QCOMPARE(sorted[0]->url(), QString(url));
+ }
+}
+
+void TestBrowser::testBestMatchingWithAdditionalURLs()
+{
+ auto db = QSharedPointer<Database>::create();
+ auto* root = db->rootGroup();
+
+ QStringList urls = {"https://github.com/loginpage", "https://test.github.com/", "https://github.com/"};
+
+ auto entries = createEntries(urls, root);
+ browserSettings()->setBestMatchOnly(true);
+
+ // Add an additional URL to the first entry
+ entries.first()->attributes()->set(BrowserService::ADDITIONAL_URL, "https://test.github.com/anotherpage");
+
+ // The first entry should be triggered
+ auto result = m_browserService->searchEntries(
+ db, "https://test.github.com/anotherpage", "https://test.github.com/anotherpage");
+ auto sorted = m_browserService->sortEntries(
+ result, "https://test.github.com/anotherpage", "https://test.github.com/anotherpage");
+ QCOMPARE(sorted.length(), 1);
+ QCOMPARE(sorted[0]->url(), urls[0]);
}
diff --git a/tests/TestBrowser.h b/tests/TestBrowser.h
index c8be3d6ca..d6140e886 100644
--- a/tests/TestBrowser.h
+++ b/tests/TestBrowser.h
@@ -40,6 +40,7 @@ private slots:
void testBaseDomain();
void testSortPriority();
+ void testSortPriority_data();
void testSearchEntries();
void testSearchEntriesWithPort();
void testSearchEntriesWithAdditionalURLs();
@@ -48,6 +49,7 @@ private slots:
void testSortEntries();
void testValidURLs();
void testBestMatchingCredentials();
+ void testBestMatchingWithAdditionalURLs();
private:
QList<Entry*> createEntries(QStringList& urls, Group* root) const;
diff --git a/tests/gui/TestGui.cpp b/tests/gui/TestGui.cpp
index d323744b6..c79de84bb 100644
--- a/tests/gui/TestGui.cpp
+++ b/tests/gui/TestGui.cpp
@@ -575,7 +575,7 @@ void TestGui::testSearchEditEntry()
// Check the path in header is "parent-group > entry"
QCOMPARE(m_dbWidget->findChild<EditEntryWidget*>("editEntryWidget")->findChild<QLabel*>("headerLabel")->text(),
- QStringLiteral("Good \u2B29 Doggy \u2B29 Edit entry"));
+ QStringLiteral("Good \u2022 Doggy \u2022 Edit entry"));
}
void TestGui::testAddEntry()
@@ -855,8 +855,7 @@ void TestGui::testSearch()
auto* entryView = m_dbWidget->findChild<EntryView*>("entryView");
QVERIFY(entryView->isVisible());
- auto* clearButton = searchWidget->findChild<QAction*>("clearIcon");
- QVERIFY(!clearButton->isVisible());
+ QVERIFY(searchTextEdit->isClearButtonEnabled());
auto* helpButton = searchWidget->findChild<QAction*>("helpIcon");
auto* helpPanel = searchWidget->findChild<QWidget*>("SearchHelpWidget");
@@ -866,7 +865,6 @@ void TestGui::testSearch()
// Enter search
QTest::mouseClick(searchTextEdit, Qt::LeftButton);
QTRY_VERIFY(searchTextEdit->hasFocus());
- QTRY_VERIFY(!clearButton->isVisible());
// Show/Hide search help
helpButton->trigger();
QTRY_VERIFY(helpPanel->isVisible());
@@ -877,14 +875,12 @@ void TestGui::testSearch()
// Search for "ZZZ"
QTest::keyClicks(searchTextEdit, "ZZZ");
QTRY_COMPARE(searchTextEdit->text(), QString("ZZZ"));
- QTRY_VERIFY(clearButton->isVisible());
QTRY_VERIFY(m_dbWidget->isSearchActive());
QTRY_COMPARE(entryView->model()->rowCount(), 0);
// Press the search clear button
- clearButton->trigger();
+ searchTextEdit->clear();
QTRY_VERIFY(searchTextEdit->text().isEmpty());
QTRY_VERIFY(searchTextEdit->hasFocus());
- QTRY_VERIFY(!clearButton->isVisible());
// Escape clears searchedit and retains focus
QTest::keyClicks(searchTextEdit, "ZZZ");
QTest::keyClick(searchTextEdit, Qt::Key_Escape);
diff --git a/utils/keepassxc-snap-helper.sh b/utils/keepassxc-snap-helper.sh
index ecb290daa..61f966a0b 100755
--- a/utils/keepassxc-snap-helper.sh
+++ b/utils/keepassxc-snap-helper.sh
@@ -18,13 +18,24 @@
set -e
-DEBUG=false
+JSON_OUT=""
+BASE_DIR="."
+INSTALL_DIR=""
+INSTALL_FILE="org.keepassxc.keepassxc_browser.json"
+
+# Early out if the keepassxc.proxy executable cannot be found
+if ! command -v keepassxc.proxy; then
+ echo "Could not find keepassxc.proxy! Ensure the keepassxc snap is installed properly."
+ exit 0
+fi
+
+PROXY_PATH=$(command -v keepassxc.proxy)
JSON_FIREFOX=$(cat << EOF
{
"name": "org.keepassxc.keepassxc_browser",
"description": "KeePassXC integration with native messaging support",
- "path": "/snap/bin/keepassxc.proxy",
+ "path": "${PROXY_PATH}",
"type": "stdio",
"allowed_extensions": [
"keepassxc-browser@keepassxc.org"
@@ -37,7 +48,7 @@ JSON_CHROME=$(cat << EOF
{
"name": "org.keepassxc.keepassxc_browser",
"description": "KeePassXC integration with native messaging support",
- "path": "/snap/bin/keepassxc.proxy",
+ "path": "${PROXY_PATH}",
"type": "stdio",
"allowed_origins": [
"chrome-extension://iopaggbpplllidnfmcghoonnokmjoicf/",
@@ -47,21 +58,6 @@ JSON_CHROME=$(cat << EOF
EOF
)
-JSON_OUT=""
-BASE_DIR="."
-INSTALL_DIR=""
-INSTALL_FILE="org.keepassxc.keepassxc_browser.json"
-
-buildJson() {
- if [ -n "$1" ]; then
- # Insert Firefox data
- JSON_OUT=$JSON_FIREFOX
- else
- # Insert Chrome data
- JSON_OUT=$JSON_CHROME
- fi
-}
-
askBrowserSnap() {
if (whiptail --title "Snap Choice" --defaultno \
--yesno "Is this browser installed as a snap (usually NO)?" 8 60); then
@@ -73,33 +69,33 @@ askBrowserSnap() {
setupFirefox() {
askBrowserSnap "./snap/firefox/common"
- buildJson "firefox"
+ JSON_OUT=${JSON_FIREFOX}
INSTALL_DIR="${BASE_DIR}/.mozilla/native-messaging-hosts"
}
setupChrome() {
- buildJson
+ JSON_OUT=${JSON_CHROME}
INSTALL_DIR="${BASE_DIR}/.config/google-chrome/NativeMessagingHosts"
}
setupChromium() {
askBrowserSnap "./snap/chromium/current"
- buildJson
+ JSON_OUT=${JSON_CHROME}
INSTALL_DIR="${BASE_DIR}/.config/chromium/NativeMessagingHosts"
}
setupVivaldi() {
- buildJson
+ JSON_OUT=${JSON_CHROME}
INSTALL_DIR="${BASE_DIR}/.config/vivaldi/NativeMessagingHosts"
}
setupBrave() {
- buildJson
+ JSON_OUT=${JSON_CHROME}
INSTALL_DIR="${BASE_DIR}/.config/BraveSoftware/Brave-Browser/NativeMessagingHosts"
}
setupTorBrowser() {
- buildJson "firefox"
+ JSON_OUT=${JSON_FIREFOX}
INSTALL_DIR="${BASE_DIR}/.tor-browser/app/Browser/TorBrowser/Data/Browser/.mozilla/native-messaging-hosts"
}
@@ -138,8 +134,6 @@ if [ $exitstatus = 0 ]; then
mkdir -p "$INSTALL_DIR"
echo "$JSON_OUT" > ${INSTALL_DIR}/${INSTALL_FILE}
- $DEBUG && echo "Installed to: ${INSTALL_DIR}/${INSTALL_FILE}"
-
whiptail \
--title "Installation Complete" \
--msgbox "You will need to restart your browser in order to connect to KeePassXC" \