From 7858430631d8c368b9ea20b6fee62eb35927c5b4 Mon Sep 17 00:00:00 2001 From: Carlo Bertoldi Date: Thu, 20 Aug 2020 10:23:08 +0200 Subject: Add a note for mac users in documentation * Add a custom style to make keyboard shortcuts readable when experimental keyboard display is made official. --- docs/styles/dark.css | 3 ++- docs/topics/KeyboardShortcuts.adoc | 3 +++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/styles/dark.css b/docs/styles/dark.css index 2c5b50a29..a32c366f3 100644 --- a/docs/styles/dark.css +++ b/docs/styles/dark.css @@ -455,6 +455,7 @@ 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} +.keyseq{color:var(--textcoloralt);} /* Table styles */ @@ -531,4 +532,4 @@ a:hover {color: var(--linkhovercolor);} } .subtitle { font-size: 1.5em; -} \ No newline at end of file +} 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 -- cgit v1.2.3 From aedc45abd508cde810b4924eb2a7dd1123965a8f Mon Sep 17 00:00:00 2001 From: Reza Jelveh Date: Sat, 29 Aug 2020 20:47:26 +0800 Subject: The Database Open Dialog should use the window flag QT::Dialog Currently the Open Dialog does not behave like a dialog. In Unix it means that the EWHM hints are not set correctly therefore the window manager doesn't properly set the floating window style. It should also allow removing Mac/Windows/Unix custom conditional code. --- src/gui/DatabaseOpenDialog.cpp | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) 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); -- cgit v1.2.3 From 639e44e182408febb1ef5e0f0645c839f9787722 Mon Sep 17 00:00:00 2001 From: Jonathan White Date: Tue, 25 Aug 2020 23:41:02 -0400 Subject: Fix opening opvault on macos * Fixes #4069 and closes #5002 --- src/gui/DatabaseTabWidget.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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")); -- cgit v1.2.3 From f17fce9461521e1927c07da799917e520ab7538f Mon Sep 17 00:00:00 2001 From: Jonathan White Date: Sun, 23 Aug 2020 12:21:59 -0400 Subject: Fix Paperclip and Totp columns not saving state * Work around Qt bug that causes isSectionHidden to return false after restoring state due to the section actually only being set to 0 width. * Fixes #5317 --- src/gui/entry/EntryView.cpp | 21 +++++++++++++++------ src/gui/entry/EntryView.h | 1 + 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/gui/entry/EntryView.cpp b/src/gui/entry/EntryView.cpp index 18a69687d..a387575e9 100644 --- a/src/gui/entry/EntryView.cpp +++ b/src/gui/entry/EntryView.cpp @@ -379,8 +379,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 +407,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 +460,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()); + } } /** @@ -533,3 +537,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..65cbf104a 100644 --- a/src/gui/entry/EntryView.h +++ b/src/gui/entry/EntryView.h @@ -80,6 +80,7 @@ private slots: private: void resetFixedColumns(); + bool isColumnHidden(int logicalIndex); EntryModel* const m_model; SortFilterHideProxyModel* const m_sortModel; -- cgit v1.2.3 From 1c27dccabbd179777557f2bd481c1f7cb446b098 Mon Sep 17 00:00:00 2001 From: Jonathan White Date: Tue, 25 Aug 2020 18:30:52 -0400 Subject: Use selected settings in password generator on load * Fixes #5336 --- src/gui/PasswordGeneratorWidget.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/gui/PasswordGeneratorWidget.cpp b/src/gui/PasswordGeneratorWidget.cpp index 78b65b400..07dda651b 100644 --- a/src/gui/PasswordGeneratorWidget.cpp +++ b/src/gui/PasswordGeneratorWidget.cpp @@ -170,6 +170,7 @@ void PasswordGeneratorWidget::loadSettings() // Set advanced mode m_ui->buttonAdvancedMode->setChecked(advanced); setAdvancedMode(advanced); + updateGenerator(); } void PasswordGeneratorWidget::saveSettings() -- cgit v1.2.3 From 9cf93111d65af68225c551b33a37a2516ce6b51b Mon Sep 17 00:00:00 2001 From: Bernhard Date: Tue, 1 Sep 2020 12:29:21 +0200 Subject: Fix heap-use-after-free & error-msg output in keepassxc-cli * Fixes #5367 --- src/cli/keepassxc-cli.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/cli/keepassxc-cli.cpp b/src/cli/keepassxc-cli.cpp index a9b276fda..5d326f46e 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) { -- cgit v1.2.3 From c67ebf19d45c8371c93d86587608e4b4ff44cd4a Mon Sep 17 00:00:00 2001 From: Jonathan White Date: Wed, 26 Aug 2020 11:01:40 -0400 Subject: Fix AutoOpen IfDevice matching, again * Fix case where only exclusions are entered (eg, !COMPUTER1, !COMPUTER2) which should allow opening the database on every other computer name. --- src/gui/DatabaseWidget.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/gui/DatabaseWidget.cpp b/src/gui/DatabaseWidget.cpp index d5ac7eb3e..5cfe26e03 100644 --- a/src/gui/DatabaseWidget.cpp +++ b/src/gui/DatabaseWidget.cpp @@ -2061,7 +2061,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 +2070,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) { -- cgit v1.2.3 From 9bab5d5a33cbf8bcb87ac1512f45d7829392c19a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sami=20V=C3=A4nttinen?= Date: Sat, 5 Sep 2020 16:00:36 +0300 Subject: Don't mark URL references as invalid URL (#5380) --- src/core/Tools.cpp | 3 ++- tests/TestBrowser.cpp | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) 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/tests/TestBrowser.cpp b/tests/TestBrowser.cpp index 3e518c1e2..95189fec7 100644 --- a/tests/TestBrowser.cpp +++ b/tests/TestBrowser.cpp @@ -437,6 +437,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 i(urls); while (i.hasNext()) { -- cgit v1.2.3 From e391dd182deb9c80ac61800d4c0936c67adb2b71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sami=20V=C3=A4nttinen?= Date: Sun, 13 Sep 2020 17:38:19 +0300 Subject: Fix Best-Matching ..again (#5316) Co-authored-by: Jonathan White --- src/browser/BrowserAction.cpp | 8 +- src/browser/BrowserService.cpp | 281 ++++++++++++++++++++--------------------- src/browser/BrowserService.h | 36 +++--- tests/TestBrowser.cpp | 277 +++++++++++++++++++++++++--------------- tests/TestBrowser.h | 2 + 5 files changed, 338 insertions(+), 266 deletions(-) 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..08c9f88da 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 pwEntriesToConfirm; QList 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 selectedEntriesToConfirm = confirmEntries(pwEntriesToConfirm, url, host, submitHost, realm, httpAuth); + QList 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 -BrowserService::searchEntries(const QSharedPointer& db, const QString& url, const QString& submitUrl) +BrowserService::searchEntries(const QSharedPointer& db, const QString& siteUrlStr, const QString& formUrlStr) { QList entries; auto* rootGroup = db->rootGroup(); @@ -590,25 +591,29 @@ BrowserService::searchEntries(const QSharedPointer& 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 BrowserService::searchEntries(const QString& url, const QString& submitUrl, const StringPairList& keyList) +QList +BrowserService::searchEntries(const QString& siteUrlStr, const QString& formUrlStr, const StringPairList& keyList) { // Check if database is connected with KeePassXC-Browser auto databaseConnected = [&](const QSharedPointer& db) { @@ -638,11 +643,11 @@ QList BrowserService::searchEntries(const QString& url, const QString& s } // Search entries matching the hostname - QString hostname = QUrl(url).host(); + QString hostname = QUrl(siteUrlStr).host(); QList 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 db) } } -QList BrowserService::sortEntries(QList& pwEntries, - const QString& host, - const QString& entryUrl, - const QString& fullUrl) +QList +BrowserService::sortEntries(QList& 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 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 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 BrowserService::sortEntries(QList& pwEntries, } QList BrowserService::confirmEntries(QList& 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 BrowserService::confirmEntries(QList& 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 BrowserService::confirmEntries(QList& pwEntriesToConfirm, config.save(entry); }); - accessControlDialog.setItems(pwEntriesToConfirm, url, httpAuth); + accessControlDialog.setItems(pwEntriesToConfirm, siteUrlStr, httpAuth); QList allowedEntries; if (accessControlDialog.exec() == QDialog::Accepted) { @@ -810,9 +798,9 @@ QList BrowserService::confirmEntries(QList& 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& 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 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("/"); + } - const QString entryURL = url.toString(QUrl::StripTrailingSlash); - const QString baseEntryURL = - url.toString(QUrl::StripTrailingSlash | QUrl::RemovePath | QUrl::RemoveQuery | QUrl::RemoveFragment); + // 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; + } - if (!url.host().contains(".") && url.host() != "localhost") { + // Exact match with site url or form url + if (url.matches(siteUrl, QUrl::None) || url.matches(formUrl, QUrl::None)) { + return 100; + } + + // Exact match without the query string + if (url.matches(siteUrl, QUrl::RemoveQuery) || url.matches(formUrl, QUrl::RemoveQuery)) { + return 90; + } + + // Match without path (ie, FQDN match), form url prioritizes lower than site url + if (url.host() == siteUrl.host()) { + return 80; + } + if (url.host() == formUrl.host()) { + return 70; + } + + // Site/form url ends with given url (subdomain mismatch) + if (siteUrl.host().endsWith(url.host())) { + return 60; + } + if (formUrl.host().endsWith(url.host())) { + return 50; + } + + // No valid match found return 0; + }; + + for (const auto& entryUrl : urls) { + priorityList << getPriority(entryUrl); } - if (fullUrl == entryURL) { - return 100; - } - if (submitUrl == entryURL) { - return 95; - } - if (submitUrl.startsWith(entryURL) && entryURL != host && baseSubmitUrl != entryURL) { - return 90; - } - if (submitUrl.startsWith(baseEntryURL) && entryURL != host && baseSubmitUrl != baseEntryURL) { - return 80; - } - if (entryURL == host) { - return 70; - } - if (entryURL == baseSubmitUrl) { - return 60; - } - if (entryURL.startsWith(submitUrl)) { - return 50; - } - if (entryURL.startsWith(baseSubmitUrl) && baseSubmitUrl != host) { - return 40; - } - if (submitUrl.startsWith(entryURL)) { - return 30; - } - if (submitUrl.startsWith(baseEntryURL)) { - return 20; - } - if (entryURL.startsWith(host)) { - return 10; - } - if (host.startsWith(entryURL)) { - return 5; - } - return 0; + + return *std::max_element(priorityList.begin(), priorityList.end()); } bool BrowserService::schemeFound(const QString& url) @@ -1004,7 +998,7 @@ bool BrowserService::removeFirstDomain(QString& hostname) return false; } -bool BrowserService::handleURL(const QString& entryUrl, const QString& url, const QString& submitUrl) +bool BrowserService::handleURL(const QString& entryUrl, const QString& siteUrlStr, const QString& formUrlStr) { if (entryUrl.isEmpty()) { return false; @@ -1022,8 +1016,8 @@ bool BrowserService::handleURL(const QString& entryUrl, const QString& url, cons } // Make a direct compare if a local file is used - if (url.contains("file://")) { - return entryUrl == submitUrl; + if (siteUrlStr.contains("file://")) { + return entryUrl == formUrlStr; } // URL host validation fails @@ -1032,7 +1026,7 @@ bool BrowserService::handleURL(const QString& entryUrl, const QString& url, cons } // Match port, if used - QUrl siteQUrl(url); + QUrl siteQUrl(siteUrlStr); if (entryQUrl.port() > 0 && entryQUrl.port() != siteQUrl.port()) { return false; } @@ -1056,17 +1050,7 @@ bool BrowserService::handleURL(const QString& entryUrl, const QString& url, cons // Match the subdomains with the limited wildcard if (siteQUrl.host().endsWith(entryQUrl.host())) { - if (!browserSettings()->bestMatchOnly()) { - return true; - } - - // Match the exact subdomain and path, or start of the path when entry's path is longer than plain "/" - if (siteQUrl.host() == entryQUrl.host()) { - if (siteQUrl.path() == entryQUrl.path() - || (entryQUrl.path().size() > 1 && siteQUrl.path().startsWith(entryQUrl.path()))) { - return true; - } - } + return true; } return false; @@ -1212,6 +1196,21 @@ bool BrowserService::checkLegacySettings(QSharedPointer 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 searchEntries(const QSharedPointer& db, const QString& url, const QString& submitUrl); - QList searchEntries(const QString& url, const QString& submitUrl, const StringPairList& keyList); QList - sortEntries(QList& pwEntries, const QString& host, const QString& submitUrl, const QString& fullUrl); + searchEntries(const QSharedPointer& db, const QString& siteUrlStr, const QString& formUrlStr); + QList searchEntries(const QString& siteUrlStr, const QString& formUrlStr, const StringPairList& keyList); + QList sortEntries(QList& pwEntries, const QString& siteUrlStr, const QString& formUrlStr); QList confirmEntries(QList& 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& 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 getDatabase(); QSharedPointer selectedDatabase(); QString getDatabaseRootUuid(); QString getDatabaseRecycleBinUuid(); - bool checkLegacySettings(QSharedPointer db); + QStringList getEntryURLs(const Entry* entry); void hideWindow() const; void raiseWindow(const bool force = false); diff --git a/tests/TestBrowser.cpp b/tests/TestBrowser.cpp index 95189fec7..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 entry1(new Entry()); - QScopedPointer entry2(new Entry()); - QScopedPointer entry3(new Entry()); - QScopedPointer entry4(new Entry()); - QScopedPointer entry5(new Entry()); - QScopedPointer entry6(new Entry()); - QScopedPointer entry7(new Entry()); - QScopedPointer entry8(new Entry()); - QScopedPointer entry9(new Entry()); - QScopedPointer entry10(new Entry()); - QScopedPointer 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(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("entryUrl"); + QTest::addColumn("siteUrl"); + QTest::addColumn("formUrl"); + QTest::addColumn("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 TestBrowser::createEntries(QStringList& urls, Group* root) const @@ -458,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::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::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::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::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 createEntries(QStringList& urls, Group* root) const; -- cgit v1.2.3 From 3c5bd0ff6b0ec58d094f6d0e61cf97db167b3219 Mon Sep 17 00:00:00 2001 From: Jonathan White Date: Mon, 14 Sep 2020 07:02:00 -0400 Subject: Fix sorting of reports * Fixes #4976 --- src/gui/reports/ReportsWidgetHealthcheck.cpp | 25 ++++++++++++++++++++++++- src/gui/reports/ReportsWidgetHibp.cpp | 25 ++++++++++++++++++++++++- 2 files changed, 48 insertions(+), 2 deletions(-) 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> 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 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); } -- cgit v1.2.3 From 55e488905313de3b861ad1c3005337f3f072aee4 Mon Sep 17 00:00:00 2001 From: Jonathan White Date: Sun, 13 Sep 2020 10:31:18 -0400 Subject: Fix layout and alignment of Entry and Group edit views * Fixes #5321 - Text alignment in the general tab of the entry and group edit views is fixed * Fixes #5300 - Errant scrollbar in the general tab is fixed * Fixes #4852 - Tabbing into notes field works as expected. To tab out, currently only Shift+Tab works. --- src/gui/EditWidget.cpp | 18 +- src/gui/entry/EditEntryWidget.cpp | 5 +- src/gui/entry/EditEntryWidget.h | 3 +- src/gui/entry/EditEntryWidgetMain.ui | 584 ++++++++++++++++++----------------- src/gui/group/EditGroupWidget.cpp | 2 +- src/gui/group/EditGroupWidget.h | 3 +- src/gui/group/EditGroupWidgetMain.ui | 432 ++++++++++++++------------ src/gui/styles/base/basestyle.qss | 5 + 8 files changed, 562 insertions(+), 490 deletions(-) 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/entry/EditEntryWidget.cpp b/src/gui/entry/EditEntryWidget.cpp index 53aa04efa..d7d8b7b32 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() 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 #include #include +#include #include #include "config-keepassx.h" @@ -174,7 +175,7 @@ private: const QScopedPointer m_browserUi; const QScopedPointer 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 @@ - - - EditEntryWidgetMain - - - - 0 - 0 - 496 - 420 - - - - - 0 - - - 0 - - - 0 - - - 0 - - - 10 - - - 8 - - - - - - - - 0 - 1 - - - - - 0 - 100 - - - - Notes field - - - - - - - true - - - Toggle the checkbox to reveal the notes section. - - - Qt::AlignTop - - - - - - - - - Username field - - - - - - - - - Toggle notes visible - - - Toggle notes visible - - - Notes: - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - - 8 - - - - - false - - - Expiration field - - - true - - - - - - - - 0 - 0 - - - - Expiration Presets - - - Expiration presets - - - Presets - - - - - - - - - Password: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - URL: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - 8 - - - - - Url field - - - https://example.com - - - - - - - Download favicon for URL - - - Download favicon for URL - - - - - - - - - Title: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - Title field - - - - - - - Username: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - Password field - - - QLineEdit::Password - - - - - - - 0 - - - - - Toggle expiration - - - Toggle expiration - - - Expires: - - - - - - - - - - PasswordEdit - QLineEdit -
gui/PasswordEdit.h
- 1 -
- - URLEdit - QLineEdit -
gui/URLEdit.h
- 1 -
-
- - titleEdit - usernameComboBox - passwordEdit - urlEdit - fetchFaviconButton - expireCheck - expireDatePicker - expirePresets - notesEnabled - notesEdit - - - -
+ + + EditEntryWidgetMain + + + + 0 + 0 + 539 + 523 + + + + Edit Entry + + + QFrame::NoFrame + + + QFrame::Plain + + + Qt::ScrollBarAlwaysOff + + + QAbstractScrollArea::AdjustToContents + + + true + + + + + 0 + 0 + 539 + 523 + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 10 + + + 8 + + + + + + + + 0 + 1 + + + + + 0 + 100 + + + + Notes field + + + + + + + true + + + Toggle the checkbox to reveal the notes section. + + + Qt::AlignTop + + + + + + + + + Username field + + + + + + + + + Toggle notes visible + + + Toggle notes visible + + + Notes: + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + 8 + + + + + false + + + Expiration field + + + true + + + + + + + + 0 + 0 + + + + Expiration Presets + + + Expiration presets + + + Presets + + + + + + + + + Password: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + URL: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + 8 + + + + + Url field + + + https://example.com + + + + + + + Download favicon for URL + + + Download favicon for URL + + + + + + + + + Title: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + Title field + + + + + + + Username: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + Password field + + + QLineEdit::Password + + + + + + + 0 + + + + + Toggle expiration + + + Toggle expiration + + + Expires: + + + + + + + + + + + PasswordEdit + QLineEdit +
gui/PasswordEdit.h
+ 1 +
+ + URLEdit + QLineEdit +
gui/URLEdit.h
+ 1 +
+
+ + titleEdit + usernameComboBox + passwordEdit + urlEdit + fetchFaviconButton + expireCheck + expireDatePicker + expirePresets + notesEnabled + notesEdit + + + +
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 #include +#include #include "core/Group.h" #include "gui/EditWidget.h" @@ -78,7 +79,7 @@ private: const QScopedPointer m_mainUi; - QPointer m_editGroupWidgetMain; + QPointer m_editGroupWidgetMain; QPointer m_editGroupWidgetIcons; QPointer 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 @@ EditGroupWidgetMain - + 0 0 - 410 - 430 + 539 + 523 - - - 0 - - - 0 - - - 0 - - - 0 - - - 10 - - - 8 + + Edit Group + + + QFrame::NoFrame + + + QFrame::Plain + + + Qt::ScrollBarAlwaysOff + + + QAbstractScrollArea::AdjustToContents + + + true + + + + + 0 + 0 + 539 + 523 + - - - - Toggle expiration - - - Expires: - - - - - - - Name field - - - - - - - false - - - Expiration field - - - true - - - - - - - Use default Auto-Type sequence of parent group - - - - - - - Auto-Type: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - Search: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - Auto-Type toggle for this and sub groups - - - - - - - - - Notes: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - Qt::Vertical - - - - 20 - 0 - - - - - - - - - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 30 - 0 - - - - - - - - false - - - Default auto-type sequence field - - - - - - - - - - - - - 0 - 0 - - - - - 16777215 - 120 - - - - Notes field - - - - - - - Name: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - Set default Auto-Type sequence - - - - - - - Search toggle for this and sub groups - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - + + + 0 + + + 0 + + + 0 + + + 0 + + + 10 + + + 8 + + + + + Toggle expiration + + + Expires: + + + + + + + Name field + + + + + + + false + + + Expiration field + + + true + + + + + + + Use default Auto-Type sequence of parent group + + + + + + + Auto-Type: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + Search: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + Auto-Type toggle for this and sub groups + + + + + + + + + Notes: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + Qt::Vertical + + + + 20 + 0 + + + + + + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 30 + 0 + + + + + + + + false + + + Default auto-type sequence field + + + + + + + + + + + + + 0 + 0 + + + + + 16777215 + 120 + + + + Notes field + + + + + + + Name: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + Set default Auto-Type sequence + + + + + + + Search toggle for this and sub groups + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + editName 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; +} -- cgit v1.2.3 From 122051c91c2bb7f159c0cedb58df2119cb727836 Mon Sep 17 00:00:00 2001 From: Jonathan White Date: Wed, 16 Sep 2020 08:03:10 -0400 Subject: Restore natural sort on application load * Fixes #5435 --- src/gui/entry/EntryView.cpp | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/src/gui/entry/EntryView.cpp b/src/gui/entry/EntryView.cpp index a387575e9..53f03b989 100644 --- a/src/gui/entry/EntryView.cpp +++ b/src/gui/entry/EntryView.cpp @@ -109,21 +109,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 + 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(sectionResized(int,int,int)), SIGNAL(viewStateChanged())); - // clang-format on - - // clang-format off - connect(header(), SIGNAL(sortIndicatorChanged(int,Qt::SortOrder)), SLOT(sortIndicatorChanged(int,Qt::SortOrder))); - // clang-format on } void EntryView::contextMenuShortcutPressed() @@ -358,6 +349,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(); -- cgit v1.2.3 From 9886b1075fbddca0d4ef564c1bb481afcc199c3f Mon Sep 17 00:00:00 2001 From: Jonathan White Date: Sun, 20 Sep 2020 09:39:59 -0400 Subject: Cleanup config initialization, add local config options * Fix #5313, allow specifying local config path using environment variable and command line flag * Add command line flag `--localconfig ` to specify a file path to use for the local configuration settings. * Add environment variable support to set config files paths: `KPXC_CONFIG` and `KPXC_CONFIG_LOCAL` to override default locations. * Reorder startup sequence to load specified config files earlier to allow for theme settings and other early options to be picked up. * Removed old command line option `--pw`, no longer used. * Attempt a fix of application not closing when last window is gone. Only set `QApplication::setQuitOnLastWindowClosed(true)` when tray icon is enabled instead of always. --- docs/styles/dark.css | 1 + docs/topics/DownloadInstall.adoc | 2 + docs/topics/UserInterface.adoc | 37 +++++++++++++++++ src/core/Config.cpp | 90 +++++++++++++++++++++++----------------- src/core/Config.h | 7 ++-- src/gui/MainWindow.cpp | 4 ++ src/main.cpp | 53 ++++++++++++----------- 7 files changed, 125 insertions(+), 69 deletions(-) diff --git a/docs/styles/dark.css b/docs/styles/dark.css index a32c366f3..8f7bd67b6 100644 --- a/docs/styles/dark.css +++ b/docs/styles/dark.css @@ -455,6 +455,7 @@ 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);} 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/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 path to a custom config file + --localconfig path to a custom local config file + --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/src/core/Config.cpp b/src/core/Config.cpp index afb71f534..58ddd9ae4 100644 --- a/src/core/Config.cpp +++ b/src/core/Config.cpp @@ -22,6 +22,7 @@ #include #include #include +#include #include #include #include @@ -418,49 +419,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 +457,45 @@ void Config::init(const QString& configFileName, const QString& localConfigFileN connect(qApp, &QCoreApplication::aboutToQuit, this, &Config::sync); } +QPair 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 +505,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 +526,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..2ed4c6ec1 100644 --- a/src/core/Config.h +++ b/src/core/Config.h @@ -198,17 +198,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 defaultConfigFiles(); static QPointer m_instance; diff --git a/src/gui/MainWindow.cpp b/src/gui/MainWindow.cpp index 81bbf3a08..f5e0541b3 100644 --- a/src/gui/MainWindow.cpp +++ b/src/gui/MainWindow.cpp @@ -1269,6 +1269,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 +1309,8 @@ void MainWindow::updateTrayIcon() m_trayIcon->setIcon(resources()->trayIconLocked()); } } else { + QApplication::setQuitOnLastWindowClosed(true); + if (m_trayIcon) { m_trayIcon->hide(); delete m_trayIcon; 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())); -- cgit v1.2.3 From 829697d53e8d0f3f345a13a97cd5f26f0aaa349c Mon Sep 17 00:00:00 2001 From: Jonathan White Date: Sun, 20 Sep 2020 11:28:03 -0400 Subject: Enforce fixed password font in preview widget * Fix #5432 --- src/gui/EntryPreviewWidget.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 { -- cgit v1.2.3 From 9fd9d65995e0c1a7ed96fbd025f42b696c40a3d9 Mon Sep 17 00:00:00 2001 From: Bernhard Berg <34011017+Colfenor@users.noreply.github.com> Date: Sat, 26 Sep 2020 15:56:45 +0200 Subject: reset Qshared ptr (#5470) CLI: Fix heapUseAfterFree in db-create command --- src/cli/keepassxc-cli.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/cli/keepassxc-cli.cpp b/src/cli/keepassxc-cli.cpp index 5d326f46e..2f8294446 100644 --- a/src/cli/keepassxc-cli.cpp +++ b/src/cli/keepassxc-cli.cpp @@ -247,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(); -- cgit v1.2.3 From fd8d81f517b5e33a046eeafa5e76f06f24b6abbc Mon Sep 17 00:00:00 2001 From: varjolintu Date: Sun, 27 Sep 2020 20:41:41 +0300 Subject: Ignore recycle bin on KeePassHTTP migration --- src/browser/BrowserService.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/browser/BrowserService.cpp b/src/browser/BrowserService.cpp index 08c9f88da..9cb2e2729 100644 --- a/src/browser/BrowserService.cpp +++ b/src/browser/BrowserService.cpp @@ -1166,6 +1166,10 @@ bool BrowserService::checkLegacySettings(QSharedPointer db) bool legacySettingsFound = false; QList entries = db->rootGroup()->entriesRecursive(); for (const auto& e : entries) { + if (e->isRecycled()) { + continue; + } + if ((e->attributes()->contains(KEEPASSHTTP_NAME) || e->attributes()->contains(KEEPASSXCBROWSER_NAME)) || (e->title() == KEEPASSHTTP_NAME || e->title().contains(KEEPASSXCBROWSER_NAME, Qt::CaseInsensitive))) { legacySettingsFound = true; -- cgit v1.2.3 From 443b9e4d3706f7cd6aa15fb66a5d474b9303b571 Mon Sep 17 00:00:00 2001 From: Jonathan White Date: Sun, 27 Sep 2020 10:29:46 -0400 Subject: Introduce AsyncTask::runThenCallback * Fixes #5295 * Introduce a callback approach to AsyncTask instead of entering multiple QEventLoop in the stack. This has additional benefits including not returning to the original stack location and potentially operating on deleted objects (use after free). --- src/core/AsyncTask.h | 22 ++++++++++++++++++++++ src/core/FileWatcher.cpp | 17 ++++++++++------- 2 files changed, 32 insertions(+), 7 deletions(-) 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(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 + void runThenCallback(FunctionObject task, QObject* context, FunctionObject2 callback) + { + typedef QFutureWatcher::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/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() -- cgit v1.2.3 From bb7a74b6325983110e3e5fa0ab63dea18b3beca8 Mon Sep 17 00:00:00 2001 From: Jonathan White Date: Sun, 27 Sep 2020 11:34:14 -0400 Subject: Revert FileDialog filter mods for macOS --- src/gui/FileDialog.cpp | 21 +++------------------ 1 file changed, 3 insertions(+), 18 deletions(-) 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 -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 -- cgit v1.2.3 From 8424acda4d461a2cead730157c3a5ca325e57ab1 Mon Sep 17 00:00:00 2001 From: Jonathan White Date: Sun, 27 Sep 2020 23:04:19 -0400 Subject: Add username to browser named pipe on Windows * Fixes #5393 --- src/browser/BrowserShared.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 -- cgit v1.2.3 From a55bb39f2044f3aa4545ead0cdad840d0898697c Mon Sep 17 00:00:00 2001 From: Jonathan White Date: Sun, 27 Sep 2020 22:49:22 -0400 Subject: Fix SSH Add/Remove Key Shortcut on macOS * Fixes #5378 * Add Key to SSH Agent is Ctrl + H on all platforms * Remove Key from SSH Agent is Ctrl + Shift + H on all platforms --- src/gui/MainWindow.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/gui/MainWindow.cpp b/src/gui/MainWindow.cpp index f5e0541b3..ef2a56aa7 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 -- cgit v1.2.3 From c2f36d877f7ac4d17d4ee20d44ba87e69e75bf34 Mon Sep 17 00:00:00 2001 From: Jonathan White Date: Sun, 11 Oct 2020 19:01:44 -0400 Subject: Implement window always on top * Closes #4151 --- src/gui/MainWindow.cpp | 10 ++++++++++ src/gui/MainWindow.ui | 12 ++++++++++++ 2 files changed, 22 insertions(+) diff --git a/src/gui/MainWindow.cpp b/src/gui/MainWindow.cpp index ef2a56aa7..70a688236 100644 --- a/src/gui/MainWindow.cpp +++ b/src/gui/MainWindow.cpp @@ -1757,4 +1757,14 @@ 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(); + }); + } diff --git a/src/gui/MainWindow.ui b/src/gui/MainWindow.ui index 93488dc05..c76be3516 100644 --- a/src/gui/MainWindow.ui +++ b/src/gui/MainWindow.ui @@ -381,6 +381,7 @@ + @@ -972,6 +973,17 @@ Show Preview Panel + + + true + + + Always on Top + + + Ctrl+Shift+A + + -- cgit v1.2.3 From 12782161bc6b67d76e3e8ddddf9eda15a9684cc4 Mon Sep 17 00:00:00 2001 From: Jonathan White Date: Sun, 11 Oct 2020 20:07:00 -0400 Subject: Move Hide Usernames/Passwords into view menu * Fixes #4982 * Removed a lot of redundant and passthrough code --- src/core/Config.cpp | 1 + src/core/Config.h | 1 + src/gui/DatabaseWidget.cpp | 32 ------------------- src/gui/DatabaseWidget.h | 4 --- src/gui/DatabaseWidgetStateSync.cpp | 12 ------- src/gui/DatabaseWidgetStateSync.h | 3 -- src/gui/MainWindow.cpp | 29 ++++++----------- src/gui/MainWindow.h | 2 -- src/gui/MainWindow.ui | 27 ++++++++++++++++ src/gui/entry/EntryModel.cpp | 60 ++++++++++++----------------------- src/gui/entry/EntryModel.h | 16 +++------- src/gui/entry/EntryView.cpp | 63 +------------------------------------ src/gui/entry/EntryView.h | 10 +----- 13 files changed, 64 insertions(+), 196 deletions(-) diff --git a/src/core/Config.cpp b/src/core/Config.cpp index 58ddd9ae4..4c00dabbc 100644 --- a/src/core/Config.cpp +++ b/src/core/Config.cpp @@ -99,6 +99,7 @@ static const QHash 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")}}, diff --git a/src/core/Config.h b/src/core/Config.h index 2ed4c6ec1..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, diff --git a/src/gui/DatabaseWidget.cpp b/src/gui/DatabaseWidget.cpp index 5cfe26e03..8d813aa61 100644 --- a/src/gui/DatabaseWidget.cpp +++ b/src/gui/DatabaseWidget.cpp @@ -329,38 +329,6 @@ void DatabaseWidget::setPreviewSplitterSizes(const QList& sizes) m_previewSplitter->setSizes(sizes); } -/** - * Get current state of entry view 'Hide Usernames' setting - */ -bool DatabaseWidget::isUsernamesHidden() const -{ - return m_entryView->isUsernamesHidden(); -} - -/** - * Set state of entry view 'Hide Usernames' setting - */ -void DatabaseWidget::setUsernamesHidden(bool hide) -{ - m_entryView->setUsernamesHidden(hide); -} - -/** - * Get current state of entry view 'Hide Passwords' setting - */ -bool DatabaseWidget::isPasswordsHidden() const -{ - return m_entryView->isPasswordsHidden(); -} - -/** - * Set state of entry view 'Hide Passwords' setting - */ -void DatabaseWidget::setPasswordsHidden(bool hide) -{ - m_entryView->setPasswordsHidden(hide); -} - /** * Get current view state of entry view */ 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 m_mainSplitterSizes; QList m_previewSplitterSizes; - bool m_hideUsernames; - bool m_hidePasswords; - QByteArray m_listViewState; QByteArray m_searchViewState; }; diff --git a/src/gui/MainWindow.cpp b/src/gui/MainWindow.cpp index 70a688236..49ab5abb2 100644 --- a/src/gui/MainWindow.cpp +++ b/src/gui/MainWindow.cpp @@ -332,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")); @@ -1126,22 +1122,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) { @@ -1767,4 +1747,13 @@ void MainWindow::initViewMenu() 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 c76be3516..e44d3d217 100644 --- a/src/gui/MainWindow.ui +++ b/src/gui/MainWindow.ui @@ -384,6 +384,8 @@ + + @@ -984,6 +986,31 @@ Ctrl+Shift+A + + + true + + + Hide Usernames + + + Ctrl+Shift+B + + + + + true + + + true + + + Hide Passwords + + + Ctrl+Shift+C + + 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 #include +#include "core/Config.h" + class Entry; class Group; @@ -64,15 +66,6 @@ public: void setGroup(Group* group); void setEntries(const QList& 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 m_orgEntries; QList 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 53f03b989..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 @@ -292,50 +280,6 @@ int EntryView::currentEntryIndex() } } -/** - * Get current state of 'Hide Usernames' setting (NOTE: just pass-through for - * m_model) - */ -bool EntryView::isUsernamesHidden() const -{ - return m_model->isUsernamesHidden(); -} - -/** - * Set state of 'Hide Usernames' setting (NOTE: just pass-through for m_model) - */ -void EntryView::setUsernamesHidden(bool hide) -{ - bool block = m_hideUsernamesAction->signalsBlocked(); - m_hideUsernamesAction->blockSignals(true); - m_hideUsernamesAction->setChecked(hide); - m_hideUsernamesAction->blockSignals(block); - - m_model->setUsernamesHidden(hide); -} - -/** - * Get current state of 'Hide Passwords' setting (NOTE: just pass-through for - * m_model) - */ -bool EntryView::isPasswordsHidden() const -{ - return m_model->isPasswordsHidden(); -} - -/** - * Set state of 'Hide Passwords' setting (NOTE: just pass-through for m_model) - */ -void EntryView::setPasswordsHidden(bool hide) -{ - bool block = m_hidePasswordsAction->signalsBlocked(); - m_hidePasswordsAction->blockSignals(true); - m_hidePasswordsAction->setChecked(hide); - m_hidePasswordsAction->blockSignals(block); - - m_model->setPasswordsHidden(hide); -} - /** * Get current view state */ @@ -363,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 actions = m_columnActions->actions(); for (auto& action : actions) { Q_ASSERT(static_cast(action->data().type()) == QMetaType::Int); @@ -469,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); diff --git a/src/gui/entry/EntryView.h b/src/gui/entry/EntryView.h index 65cbf104a..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; @@ -86,12 +80,10 @@ private: 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; }; -- cgit v1.2.3 From 39f1504ca2841f668aba1f975c0c7e79ff52e3b2 Mon Sep 17 00:00:00 2001 From: Jonathan White Date: Sun, 11 Oct 2020 19:16:44 -0400 Subject: Mask password placeholder in command execution dialog * Fixes #4463 --- src/gui/DatabaseWidget.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/gui/DatabaseWidget.cpp b/src/gui/DatabaseWidget.cpp index 8d813aa61..9a1bd0590 100644 --- a/src/gui/DatabaseWidget.cpp +++ b/src/gui/DatabaseWidget.cpp @@ -858,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) + " […]"; } -- cgit v1.2.3 From 1ed5cc9898252ebce7a01e69c6e7eea050afddfb Mon Sep 17 00:00:00 2001 From: Jonathan White Date: Mon, 12 Oct 2020 23:12:44 -0400 Subject: Fix entry edit issues * Fix #4083 - move auto-type checks early in the commit process to prevent half-saving an entry if there is a bail-out. * Fix #4182 - prevent setting modified by just viewing auto-type window associations --- src/gui/entry/EditEntryWidget.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/gui/entry/EditEntryWidget.cpp b/src/gui/entry/EditEntryWidget.cpp index d7d8b7b32..22105c4d2 100644 --- a/src/gui/entry/EditEntryWidget.cpp +++ b/src/gui/entry/EditEntryWidget.cpp @@ -997,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)); @@ -1095,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()); } @@ -1364,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); @@ -1379,6 +1385,7 @@ void EditEntryWidget::loadCurrentAssoc(const QModelIndex& current) } else { clearCurrentAssoc(); } + setModified(modified); } void EditEntryWidget::clearCurrentAssoc() -- cgit v1.2.3 From dc57025218fc4b7ae7673be175d6b98b4f8f3b19 Mon Sep 17 00:00:00 2001 From: Jonathan White Date: Mon, 12 Oct 2020 16:50:13 -0400 Subject: Fix crash in KeeShare when importing deleted share * Fix #4895 - when KeeShare imports a database it performs a merge operation. If that share was deleted from another identical database (ie, same base group UUID), then the group would be deleted in the middle of reinit causing a crash. This fix moves the group into a QPointer catching the delete operation. --- src/keeshare/ShareObserver.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) 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> shares; + QList, 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); -- cgit v1.2.3 From d7a9e48a9c6ea335cf5c295c3f6f66923fee88fe Mon Sep 17 00:00:00 2001 From: Jonathan White Date: Mon, 12 Oct 2020 21:52:45 -0400 Subject: Make snap helper script more robust * Fix #5127 - use `which keepassxc.proxy` to find the path of the snap proxy. Warn the user if the snap proxy was not found and bail out early. --- utils/keepassxc-snap-helper.sh | 46 ++++++++++++++++++------------------------ 1 file changed, 20 insertions(+), 26 deletions(-) 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" \ -- cgit v1.2.3 From 1ad9c1257b9ca3b8345666824f79c4416fab144e Mon Sep 17 00:00:00 2001 From: Jonathan White Date: Tue, 13 Oct 2020 23:23:18 -0400 Subject: Fix crash when toggling capslock rapidly * Fix #5543 - Only check caps lock state when key is pressed/released or widget is focused. --- src/gui/PasswordEdit.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) 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(); } } } -- cgit v1.2.3 From b0e038e7891efbcab073ff66c72932aeb09cf687 Mon Sep 17 00:00:00 2001 From: Jonathan White Date: Wed, 7 Oct 2020 21:14:32 -0400 Subject: Improve default Qt widget icons * Include new icons for toolbar overflow to ensure they are tinted correctly and fit in with the rest of the UI. * Replace custom code for clearing line edits by including a proper icon for the default action. --- COPYING | 4 +- .../scalable/actions/chevron-double-down.svg | 1 + .../scalable/actions/chevron-double-right.svg | 1 + share/icons/icons.qrc | 2 + src/CMakeLists.txt | 1 - src/gui/DatabaseOpenWidget.cpp | 13 ---- src/gui/DatabaseOpenWidget.h | 1 - src/gui/DatabaseOpenWidget.ui | 22 +++---- src/gui/LineEdit.cpp | 70 ---------------------- src/gui/LineEdit.h | 44 -------------- src/gui/PasswordGeneratorWidget.cpp | 13 ---- src/gui/PasswordGeneratorWidget.ui | 22 ++----- src/gui/SearchWidget.cpp | 8 --- src/gui/SearchWidget.ui | 7 +-- src/gui/styles/base/BaseStyle.cpp | 17 ++++++ src/gui/styles/base/BaseStyle.h | 2 + tests/gui/TestGui.cpp | 8 +-- 17 files changed, 44 insertions(+), 192 deletions(-) create mode 100644 share/icons/application/scalable/actions/chevron-double-down.svg create mode 100644 share/icons/application/scalable/actions/chevron-double-right.svg delete mode 100644 src/gui/LineEdit.cpp delete mode 100644 src/gui/LineEdit.h 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 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/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 @@ + \ 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 @@ + \ 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 @@ application/scalable/actions/application-exit.svg application/scalable/actions/auto-type.svg application/scalable/actions/bugreport.svg + application/scalable/actions/chevron-double-down.svg + application/scalable/actions/chevron-double-right.svg application/scalable/actions/chronometer.svg application/scalable/actions/clipboard-text.svg application/scalable/actions/configure.svg 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/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 @@ Key file to unlock the database + + true + @@ -575,16 +578,14 @@ - - - Clear - - - Clear Key File - - + + PasswordEdit + QLineEdit +
gui/PasswordEdit.h
+ 1 +
MessageWidget QWidget @@ -596,11 +597,6 @@ QLabel
gui/widgets/ElidedLabel.h
- - PasswordEdit - QLineEdit -
gui/PasswordEdit.h
-
editPassword 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 - * Copyright (C) 2012 Felix Geyer - * Copyright (C) 2012 Florian Geyer - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 or (at your option) - * version 3 of the License. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include "LineEdit.h" - -#include -#include - -#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 - * Copyright (C) 2012 Felix Geyer - * Copyright (C) 2012 Florian Geyer - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 or (at your option) - * version 3 of the License. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#ifndef KEEPASSX_LINEEDIT_H -#define KEEPASSX_LINEEDIT_H - -#include - -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/PasswordGeneratorWidget.cpp b/src/gui/PasswordGeneratorWidget.cpp index 07dda651b..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))); @@ -530,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(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 { Additional characters + + true + @@ -646,6 +649,9 @@ QProgressBar::chunk { Excluded characters + + true + @@ -944,22 +950,6 @@ QProgressBar::chunk { - - - Clear - - - Clear - - - - - Clear - - - Clear - - 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()) { 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 @@ - false + true @@ -51,11 +51,6 @@ Search - - - Clear - - Search Help diff --git a/src/gui/styles/base/BaseStyle.cpp b/src/gui/styles/base/BaseStyle.cpp index aac9daf1c..2c72f9bcc 100644 --- a/src/gui/styles/base/BaseStyle.cpp +++ b/src/gui/styles/base/BaseStyle.cpp @@ -54,6 +54,8 @@ #include +#include "core/Resources.h" + QT_BEGIN_NAMESPACE Q_GUI_EXPORT int qt_defaultDpiX(); QT_END_NAMESPACE @@ -3036,6 +3038,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..86d81b44b 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, diff --git a/tests/gui/TestGui.cpp b/tests/gui/TestGui.cpp index d323744b6..060a29520 100644 --- a/tests/gui/TestGui.cpp +++ b/tests/gui/TestGui.cpp @@ -855,8 +855,7 @@ void TestGui::testSearch() auto* entryView = m_dbWidget->findChild("entryView"); QVERIFY(entryView->isVisible()); - auto* clearButton = searchWidget->findChild("clearIcon"); - QVERIFY(!clearButton->isVisible()); + QVERIFY(searchTextEdit->isClearButtonEnabled()); auto* helpButton = searchWidget->findChild("helpIcon"); auto* helpPanel = searchWidget->findChild("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); -- cgit v1.2.3 From 389899e0c62c399036e2fd3d35f4145523cd30fe Mon Sep 17 00:00:00 2001 From: Janek Bevendorff Date: Wed, 14 Oct 2020 20:45:24 +0200 Subject: Fix theme issues on macOS MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Fix #5025 - Change edit entry widget title separator to the common bullet character • (U+2022) * Fix #5307 and Fix #5347 - Remove transparent toolbar/window on macOS and properly color text in toolbar. --- src/gui/MainWindow.cpp | 3 --- src/gui/entry/EditEntryWidget.cpp | 6 ++--- src/gui/osutils/macutils/AppKit.h | 1 + src/gui/styles/base/BaseStyle.cpp | 45 ++++++++++++++++++++++++++++++++++++- src/gui/styles/base/BaseStyle.h | 9 ++++++++ src/gui/styles/dark/DarkStyle.cpp | 19 ++++++++++------ src/gui/styles/dark/DarkStyle.h | 1 + src/gui/styles/light/LightStyle.cpp | 19 ++++++++++------ src/gui/styles/light/LightStyle.h | 1 + tests/gui/TestGui.cpp | 2 +- 10 files changed, 84 insertions(+), 22 deletions(-) diff --git a/src/gui/MainWindow.cpp b/src/gui/MainWindow.cpp index 49ab5abb2..f3a6e5831 100644 --- a/src/gui/MainWindow.cpp +++ b/src/gui/MainWindow.cpp @@ -499,9 +499,6 @@ MainWindow::MainWindow() #ifdef Q_OS_MACOS setUnifiedTitleAndToolBarOnMac(true); - if (macUtils()->isDarkMode()) { - setStyleSheet("QToolButton {color:white;}"); - } #endif #ifdef WITH_XC_UPDATECHECK diff --git a/src/gui/entry/EditEntryWidget.cpp b/src/gui/entry/EditEntryWidget.cpp index 22105c4d2..680243280 100644 --- a/src/gui/entry/EditEntryWidget.cpp +++ b/src/gui/entry/EditEntryWidget.cpp @@ -800,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"))); } } 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/styles/base/BaseStyle.cpp b/src/gui/styles/base/BaseStyle.cpp index 2c72f9bcc..104e1d4d9 100644 --- a/src/gui/styles/base/BaseStyle.cpp +++ b/src/gui/styles/base/BaseStyle.cpp @@ -284,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 @@ -330,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, @@ -342,7 +356,7 @@ namespace Phantom enum { - Num_SwatchColors = SwatchColors::S_scrollbarGutter_disabled + 1, + Num_SwatchColors = SwatchColors::S_tabBarBase_inactive + 1, Num_ShadowSteps = 3, }; @@ -445,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 @@ -1553,6 +1575,12 @@ void BaseStyle::drawPrimitive(PrimitiveElement elem, auto tbb = qstyleoption_cast(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: @@ -2255,6 +2283,21 @@ void BaseStyle::drawControl(ControlElement element, auto toolBar = qstyleoption_cast(option); if (!toolBar) break; + +#ifdef Q_OS_MACOS + if (auto* mainWindow = qobject_cast(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(widget)) { diff --git a/src/gui/styles/base/BaseStyle.h b/src/gui/styles/base/BaseStyle.h index 86d81b44b..d3c20915c 100644 --- a/src/gui/styles/base/BaseStyle.h +++ b/src/gui/styles/base/BaseStyle.h @@ -97,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/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 #include +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(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 #include +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(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/tests/gui/TestGui.cpp b/tests/gui/TestGui.cpp index 060a29520..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")->findChild("headerLabel")->text(), - QStringLiteral("Good \u2B29 Doggy \u2B29 Edit entry")); + QStringLiteral("Good \u2022 Doggy \u2022 Edit entry")); } void TestGui::testAddEntry() -- cgit v1.2.3 From b10a55a547af321ebe9365ca6ca3932ecd02099b Mon Sep 17 00:00:00 2001 From: Jonathan White Date: Sat, 10 Oct 2020 19:36:00 -0400 Subject: Prevent data loss when drag/drop between databases * Fixes #5262 * Always reset the UUID on groups and entries moved or copied between databases. This prevents data loss when the group/entry is moved back to the original database. --- src/core/Entry.cpp | 2 ++ src/core/Entry.h | 13 +++++++------ src/core/Group.cpp | 4 +--- src/core/Group.h | 3 +-- src/gui/group/GroupModel.cpp | 43 ++++++++++++++++++++++++++----------------- 5 files changed, 37 insertions(+), 28 deletions(-) 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/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::CloneNewUuid | Group::CloneResetTimeInfo | Group::CloneIncludeEntries); -Entry::CloneFlags Group::DefaultEntryCloneFlags = - static_cast(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 customIconsRecursive() const; QList 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/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 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); -- cgit v1.2.3 From 59b8b13146d0a244407c51eb3756cf9ff4eee34b Mon Sep 17 00:00:00 2001 From: Jonathan White Date: Sun, 27 Sep 2020 22:17:57 -0400 Subject: Force set entry preview after search ends * Fixes #5093 --- src/gui/DatabaseWidget.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/gui/DatabaseWidget.cpp b/src/gui/DatabaseWidget.cpp index 9a1bd0590..505e7f0ba 100644 --- a/src/gui/DatabaseWidget.cpp +++ b/src/gui/DatabaseWidget.cpp @@ -1427,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); -- cgit v1.2.3 From 8b8cc2fa2085194503450b238e08a8ff1b0ddefa Mon Sep 17 00:00:00 2001 From: Jonathan White Date: Thu, 15 Oct 2020 23:24:57 -0400 Subject: Place database credentials widget in scroll area * Fix #5440 --- src/gui/dbsettings/DatabaseSettingsDialog.cpp | 13 ++++- .../DatabaseSettingsWidgetDatabaseKey.cpp | 2 - src/gui/wizard/NewDatabaseWizardPage.cpp | 6 +-- src/gui/wizard/NewDatabaseWizardPage.ui | 57 ++++++++++++++++++++-- .../wizard/NewDatabaseWizardPageDatabaseKey.cpp | 8 --- src/gui/wizard/NewDatabaseWizardPageDatabaseKey.h | 3 -- 6 files changed, 67 insertions(+), 22 deletions(-) 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 + 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/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 @@ NewDatabaseWizardPage + + + 0 + 0 + 578 + 410 + + 0 @@ -17,9 +25,52 @@ Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. - + - + + + + 0 + 0 + + + + + 560 + 300 + + + + QScrollArea { background: transparent; } +QScrollArea > QWidget > QWidget { background: transparent; } +QScrollArea > QWidget > QScrollBar { background: 1; } + + + QFrame::NoFrame + + + QFrame::Plain + + + Qt::ScrollBarAlwaysOff + + + QAbstractScrollArea::AdjustToContents + + + true + + + + + 0 + 0 + 560 + 349 + + + + @@ -29,7 +80,7 @@ 20 - 15 + 6 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 -- cgit v1.2.3 From 1c88b6339c59aa0aee142cde947aab2027f92985 Mon Sep 17 00:00:00 2001 From: Janek Bevendorff Date: Wed, 21 Oct 2020 22:41:55 +0200 Subject: Update changelog and bump version --- CHANGELOG.md | 40 +++++++++++++++++++++++++ CMakeLists.txt | 2 +- share/linux/org.keepassxc.KeePassXC.appdata.xml | 35 ++++++++++++++++++++++ snap/snapcraft.yaml | 2 +- 4 files changed, 77 insertions(+), 2 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/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 @@ + + +
    +
  • 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]
  • +
  • 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]
  • +
  • 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]
  • +
+
+
    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: | -- cgit v1.2.3 From 4f61f57c14411a3a45398e9949e7754788fb5c36 Mon Sep 17 00:00:00 2001 From: Janek Bevendorff Date: Wed, 21 Oct 2020 22:46:55 +0200 Subject: Update translations --- share/translations/keepassx_ar.ts | 88 +- share/translations/keepassx_bg.ts | 88 +- share/translations/keepassx_ca.ts | 176 +- share/translations/keepassx_cs.ts | 247 +- share/translations/keepassx_da.ts | 88 +- share/translations/keepassx_de.ts | 90 +- share/translations/keepassx_en.ts | 56 +- share/translations/keepassx_en_GB.ts | 7832 +++++++++++++++++++++++++++++++++ share/translations/keepassx_en_US.ts | 88 +- share/translations/keepassx_es.ts | 94 +- share/translations/keepassx_et.ts | 740 ++-- share/translations/keepassx_fi.ts | 88 +- share/translations/keepassx_fr.ts | 170 +- share/translations/keepassx_hu.ts | 88 +- share/translations/keepassx_id.ts | 92 +- share/translations/keepassx_it.ts | 118 +- share/translations/keepassx_ja.ts | 88 +- share/translations/keepassx_ko.ts | 88 +- share/translations/keepassx_lt.ts | 88 +- share/translations/keepassx_nb.ts | 88 +- share/translations/keepassx_nl_NL.ts | 98 +- share/translations/keepassx_pl.ts | 88 +- share/translations/keepassx_pt.ts | 7851 ---------------------------------- share/translations/keepassx_pt_BR.ts | 88 +- share/translations/keepassx_pt_PT.ts | 94 +- share/translations/keepassx_ro.ts | 88 +- share/translations/keepassx_ru.ts | 88 +- share/translations/keepassx_sk.ts | 88 +- share/translations/keepassx_sv.ts | 116 +- share/translations/keepassx_th.ts | 88 +- share/translations/keepassx_tr.ts | 98 +- share/translations/keepassx_uk.ts | 88 +- share/translations/keepassx_zh_CN.ts | 110 +- share/translations/keepassx_zh_TW.ts | 90 +- 34 files changed, 9654 insertions(+), 9914 deletions(-) create mode 100644 share/translations/keepassx_en_GB.ts delete mode 100644 share/translations/keepassx_pt.ts 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 @@ Colorful + + You must restart the application to set the new language. Would you like to restart now? + + ApplicationSettingsWidgetGeneral @@ -166,10 +170,6 @@ Automatically save after every change الحفظ تلقائيًا بعد كل تعديل - - Automatically save on exit - الحفظ تلقائيًا عند الإغلاق - Automatically reload the database when modified externally إعادة تحميل قاعدة البيانات تلقائيا عند تعديلها خارجيًا @@ -305,10 +305,6 @@ Automatically launch KeePassXC at system startup - - Mark database as modified for non-data changes (e.g., expanding groups) - - Safely save database files (disable if experiencing problems with Dropbox, etc.) @@ -345,6 +341,18 @@ Auto-Type start delay: + + Automatically save when locking database + + + + Automatically save non-data changes when locking database + + + + Tray icon type + + ApplicationSettingsWidgetSecurity @@ -4797,6 +4805,26 @@ Expect some bugs and minor issues, this version is not meant for production use. You must restart the application to apply this setting. Would you like to restart now? + + Perform Auto-Type Sequence + + + + {USERNAME} + + + + {USERNAME}{ENTER} + + + + {PASSWORD} + + + + {PASSWORD}{ENTER} + + ManageDatabase @@ -5280,10 +5308,6 @@ Expect some bugs and minor issues, this version is not meant for production use. Password quality ممتازة - - ExtendedASCII - - Switch to advanced mode @@ -5292,58 +5316,22 @@ Expect some bugs and minor issues, this version is not meant for production use. Advanced متقدم - - A-Z - A-Z - - - a-z - a-z - - - 0-9 - 0-9 - Braces - - {[( - - Punctuation - - .,:; - - Quotes - - " ' - - - - <*+!?= - - - - \_|-/ - - Logograms - - #$%&&@^`~ - - Character set to exclude from generated password @@ -5464,6 +5452,10 @@ Expect some bugs and minor issues, this version is not meant for production use. Regenerate password (%1) + + Special Characters + محارف خاصة + QApplication 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 @@ Colorful Цветни + + You must restart the application to set the new language. Would you like to restart now? + + ApplicationSettingsWidgetGeneral @@ -166,10 +170,6 @@ Automatically save after every change Автоматично записване след всяка промяна - - Automatically save on exit - Автоматично записване при изход - Automatically reload the database when modified externally Автоматично презареждане на базата данни при външно модифициране @@ -304,10 +304,6 @@ Automatically launch KeePassXC at system startup Автоматично стартиране на KeePassXC при стартиране на системата - - Mark database as modified for non-data changes (e.g., expanding groups) - Маркиране на база данни като модифицирана за промени, които не са върху данните (напр. разширяване на групи) - Safely save database files (disable if experiencing problems with Dropbox, etc.) Безопасно записване на файловете с бази данни (деактивирайте, ако имате проблеми с Dropbox и т.н.) @@ -344,6 +340,18 @@ Auto-Type start delay: Забавяне на Auto-Type включването: + + Automatically save when locking database + + + + Automatically save non-data changes when locking database + + + + Tray icon type + + ApplicationSettingsWidgetSecurity @@ -4841,6 +4849,26 @@ Expect some bugs and minor issues, this version is not meant for production use. You must restart the application to apply this setting. Would you like to restart now? Трябва да рестартирате приложението, за да приложите тази настройка. Желаете ли да рестартирате сега? + + Perform Auto-Type Sequence + + + + {USERNAME} + + + + {USERNAME}{ENTER} + + + + {PASSWORD} + + + + {PASSWORD}{ENTER} + + ManageDatabase @@ -5325,10 +5353,6 @@ Expect some bugs and minor issues, this version is not meant for production use. Password quality Отлично - - ExtendedASCII - Разширен ASCII - Switch to advanced mode Превключване към разширен режим @@ -5337,58 +5361,22 @@ Expect some bugs and minor issues, this version is not meant for production use. Advanced Допълнителни - - A-Z - A-Z - - - a-z - a-z - - - 0-9 - 0-9 - Braces Скоби - - {[( - {[( - Punctuation Пунктуация - - .,:; - .,:; - Quotes Кавички - - " ' - " ' - - - <*+!?= - <*+!?= - - - \_|-/ - \_|-/ - Logograms Логограми - - #$%&&@^`~ - #$%&&@^`~ - Character set to exclude from generated password Набор от знаци за изключване от генерираната парола @@ -5509,6 +5497,10 @@ Expect some bugs and minor issues, this version is not meant for production use. Regenerate password (%1) Регенериране на паролата (%1) + + Special Characters + + QApplication 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 @@ (empty) - + (buit) No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. @@ -133,6 +133,10 @@ Colorful + Colors + + + You must restart the application to set the new language. Would you like to restart now? @@ -166,10 +170,6 @@ Automatically save after every change Desa després de cada canvi de forma automàtica - - Automatically save on exit - Desa en tancar de forma automàtica - Automatically reload the database when modified externally Torna a carregar automàticament la base de dades quan sigui modificada de forma externa @@ -304,10 +304,6 @@ Automatically launch KeePassXC at system startup Executar KeePassXC a l'inici del sistema - - Mark database as modified for non-data changes (e.g., expanding groups) - - Safely save database files (disable if experiencing problems with Dropbox, etc.) @@ -344,6 +340,18 @@ Auto-Type start delay: + + Automatically save when locking database + + + + Automatically save non-data changes when locking database + + + + Tray icon type + + ApplicationSettingsWidgetSecurity @@ -474,7 +482,7 @@ Permission Required - + Permís necessari KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. @@ -530,7 +538,7 @@ AutoTypePlatformMac Permission Required - + Permís necessari 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. @@ -1087,7 +1095,7 @@ chrome-laptop. First line has field names - + La primera línia té els noms dels camps Not Present @@ -2129,7 +2137,7 @@ Voleu deshabilitar el desat segur i provar-ho un altre cop? Save database backup - + Desa una còpia de seguretat de la base de dades Could not find database file: %1 @@ -3253,7 +3261,7 @@ Are you sure to add this file? Group name - + Nom del grup Entry title @@ -3878,7 +3886,7 @@ Es tracta d'una migració unidireccional. No obrir la base de dades importa Multiple group elements - + Múltiples elements de grup Null group uuid @@ -4373,7 +4381,7 @@ Generate a new key file in the database security settings. &About - &Sobre + &Quant a Database settings @@ -4548,7 +4556,7 @@ Podeu esperar alguns errors i incidències menors. Aquesta versió no està pens &User Guide - Guia d'&Usuari + Guia d'&usuari &Keyboard Shortcuts @@ -4556,15 +4564,15 @@ Podeu esperar alguns errors i incidències menors. Aquesta versió no està pens &Recent Databases - + Bases de dades &recents &Entries - + &Entrades Copy Att&ribute - + Copia l'&atribut TOTP @@ -4572,11 +4580,11 @@ Podeu esperar alguns errors i incidències menors. Aquesta versió no està pens View - + Visualització Theme - + Tema &Check for Updates @@ -4584,7 +4592,7 @@ Podeu esperar alguns errors i incidències menors. Aquesta versió no està pens &Open Database… - + &Obre la base de dades… &Save Database @@ -4592,11 +4600,11 @@ Podeu esperar alguns errors i incidències menors. Aquesta versió no està pens &Close Database - + Tanca la base de dades &New Database… - + Base de dades &nova &Merge From Database… @@ -4604,31 +4612,31 @@ Podeu esperar alguns errors i incidències menors. Aquesta versió no està pens &New Entry… - + &Nova entrada... &Edit Entry… - + &Edita l'entrada… &Delete Entry… - + Elimina l'entrada… &New Group… - + &Nou grup… &Edit Group… - + &Edita el grup… &Delete Group… - + Elimina el grup… Download All &Favicons… - + Baixa tots els &Favicons… Sa&ve Database As… @@ -4636,7 +4644,7 @@ Podeu esperar alguns errors i incidències menors. Aquesta versió no està pens Database &Security… - + &Seguretat de la base de dades... Database &Reports... @@ -4648,11 +4656,11 @@ Podeu esperar alguns errors i incidències menors. Aquesta versió no està pens &Database Settings… - + Configuració de la base de dades… &Clone Entry… - + &Clona l'entrada… Move u&p @@ -4672,19 +4680,19 @@ Podeu esperar alguns errors i incidències menors. Aquesta versió no està pens Copy &Username - + Copia el nom d'&usuari Copy &Password - + Copia la contrasenya Download &Favicon - + Descarrega el &Favicon &Lock Databases - + Bloqueja les bases de dades &CSV File… @@ -4720,7 +4728,7 @@ Podeu esperar alguns errors i incidències menors. Aquesta versió no està pens Report a &Bug - + Informeu d'un error Open Getting Started Guide @@ -4728,7 +4736,7 @@ Podeu esperar alguns errors i incidències menors. Aquesta versió no està pens &Online Help - + Ajuda &online Go to online documentation @@ -4740,7 +4748,7 @@ Podeu esperar alguns errors i incidències menors. Aquesta versió no està pens Save Database Backup... - + Desa una còpia de la base de dades... Add key to SSH Agent @@ -4752,7 +4760,7 @@ Podeu esperar alguns errors i incidències menors. Aquesta versió no està pens Compact Mode - + Mode compacte Automatic @@ -4790,6 +4798,26 @@ Podeu esperar alguns errors i incidències menors. Aquesta versió no està pens You must restart the application to apply this setting. Would you like to restart now? + + Perform Auto-Type Sequence + + + + {USERNAME} + + + + {USERNAME}{ENTER} + + + + {PASSWORD} + + + + {PASSWORD}{ENTER} + + ManageDatabase @@ -4799,7 +4827,7 @@ Podeu esperar alguns errors i incidències menors. Aquesta versió no està pens Edit database settings - + Edita la configuració de la base de dades Unlock database @@ -5273,10 +5301,6 @@ Podeu esperar alguns errors i incidències menors. Aquesta versió no està pens Password quality Excel·lent - - ExtendedASCII - - Switch to advanced mode Canvia al mode avançat @@ -5285,58 +5309,22 @@ Podeu esperar alguns errors i incidències menors. Aquesta versió no està pens Advanced Avançat - - A-Z - A-Z - - - a-z - a-z - - - 0-9 - 0-9 - Braces - - {[( - - Punctuation - - .,:; - - Quotes - - " ' - - - - <*+!?= - - - - \_|-/ - - Logograms - - #$%&&@^`~ - - Character set to exclude from generated password @@ -5457,6 +5445,10 @@ Podeu esperar alguns errors i incidències menors. Aquesta versió no està pens Regenerate password (%1) + + Special Characters + Caràcters especials + QApplication @@ -5498,7 +5490,7 @@ Podeu esperar alguns errors i incidències menors. Aquesta versió no està pens Password is about to expire - + La contrasenya està a punt de caducar Password expires in %1 days @@ -6202,7 +6194,7 @@ Available commands: Cannot create new group - + No es pot crear un grup nou Deactivate password key for the database. @@ -6290,7 +6282,7 @@ Nucli: %3 %4 Adds a new group to a database. - + Afegeix un grup nou a una base de dades. Path of the group to add. @@ -6330,7 +6322,7 @@ Nucli: %3 %4 Close the currently opened database. - + Tanca la base de dades oberta. Display this help. @@ -6422,7 +6414,7 @@ Nucli: %3 %4 Moves an entry to a new group. - + Mou una entrada a un grup nou. Path of the entry to move. @@ -6805,7 +6797,7 @@ Nucli: %3 %4 Edit Entry... - + Edita l'entrada... Exclude from reports @@ -6888,7 +6880,7 @@ Nucli: %3 %4 Edit Entry... - + Edita l'entrada... Exclude from reports @@ -7726,7 +7718,7 @@ Example: JBSWY3DPEHPK3PXP Open a recent database - + Obre una base de dades recent 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 @@ SSH Agent connection is working! - Spojení s SSH Agentem funguje! + Spojení s SSH agentem funguje! @@ -135,6 +135,10 @@ Colorful Barevná + + You must restart the application to set the new language. Would you like to restart now? + Aby se změna jazyka projevila, je třeba aplikaci restartovat. Chcete to provést nyní? + ApplicationSettingsWidgetGeneral @@ -166,10 +170,6 @@ Automatically save after every change Po každé změně hned automaticky uložit - - Automatically save on exit - Před ukončením aplikace automaticky uložit případné změny - Automatically reload the database when modified externally V případě úpravy zvenčí, automaticky znovu načíst databázi @@ -200,11 +200,11 @@ Use entry title to match windows for global Auto-Type - Použít titulek položky pro hledání shody s okny pro všeobecné automatické vyplňování + Použít titulek položky pro hledání shody s okny pro globální automatické vyplňování Use entry URL to match windows for global Auto-Type - Použít URL adresu položky pro hledání shody s okny pro všeobecné automatické vyplňování + Použít URL adresu položky pro hledání shody s okny pro globální automatické vyplňování Always ask before performing Auto-Type @@ -233,7 +233,7 @@ Check for updates at application startup once per week - Zjišťovat dostupnost aktualizací aplikace jednou týdně + Zjišťovat dostupnost aktualizací aplikace (při spouštění) jednou týdně Include beta releases when checking for updates @@ -290,11 +290,11 @@ Global auto-type shortcut - Globální zkratka automatického vyplňování + Zkratka pro globální automatické vyplňování Auto-type character typing delay milliseconds - Prodleva mezi zadáváním jednotlivých znaků při automatickém vyplňování + Prodleva (ms) mezi zadáváním jednotlivých znaků při automatickém vyplňování Auto-type start delay milliseconds @@ -304,13 +304,9 @@ Automatically launch KeePassXC at system startup Automaticky spustit KeePassXC po startu systému - - Mark database as modified for non-data changes (e.g., expanding groups) - Označit databázi jako upravenou při změnách, nepostihujících údaje (např. rozkliknutí skupin) - Safely save database files (disable if experiencing problems with Dropbox, etc.) - + Bezpečné ukládání souborů databáze (vypněte pokud narážíte na problémy s Dropobox, atp.) User Interface @@ -326,11 +322,11 @@ Tray icon type: - Typ ikony: + Typ ikony v oznamovací oblasti: Reset settings to default… - Vráti nastavení do výchozích hodnot… + Vrátit nastavení do výchozích hodnot… Auto-Type typing delay: @@ -344,6 +340,18 @@ Auto-Type start delay: Prodleva zahájení automatického vyplňování: + + Automatically save when locking database + Při uzamykání databáze automaticky uložit + + + Automatically save non-data changes when locking database + Při uzamykání databáze automaticky uložit změny i ne v datech + + + Tray icon type + Typ ikony v oznamovací oblasti + ApplicationSettingsWidgetSecurity @@ -378,11 +386,11 @@ Lock databases when session is locked or lid is closed - Zamknout databáze když je zamčeno sezení uživatele v operačním systému nebo je zavřeno víko notebooku + Zamknout databáze při zamčení relace uživatele v operačním systému nebo je zavření víka notebooku Forget TouchID when session is locked or lid is closed - Zapomenout TouchID při uzamčení relace nebo při zavření víka s displejem + Zapomenout TouchID při zamčení relace uživatele v operačním systému nebo při zavření víka notebooku Lock databases after minimizing the window @@ -390,7 +398,7 @@ Re-lock previously locked database after performing Auto-Type - Po provedení automatického vyplnění opět zamknout dříve uzamčenou databázi. + Po provedení automatického vyplnění databázi opět zamknout, pokud předtím byla uzamčena. Hide passwords in the entry preview panel @@ -788,7 +796,7 @@ chrome-laptop. Returns expired credentials. String [expired] is added to the title. - Vracet přihlašovací údaje, kterým skončila platnost. Do názvu je přidán řetězec [expired]. + Vrátí přihlašovací údaje, kterým skončila platnost. Do názvu je přidán řetězec [expired]. Allow returning expired credentials @@ -858,12 +866,12 @@ chrome-laptop. Use a custom proxy location if you installed a proxy manually. - Pokud jste zprostředkovávající aplikaci nainstalovali ručně, použijte její uživatelem určené umístění. + Pokud jste zprostředkovávající aplikaci nainstalovali ručně, použijte její uživatelsky určené umístění. Use a custom proxy location: Meant is the proxy for KeePassXC-Browser - Použít uživatelem určené umístění zprostředkovávající aplikace + Použít uživatelsky určené umístění zprostředkovávající aplikace Custom proxy location field @@ -896,7 +904,7 @@ chrome-laptop. Custom browser location field - + Kolonka uživatelsky určené umístění prohlížeče ~/.custom/config/Mozilla/native-messaging-hosts/ @@ -904,15 +912,15 @@ chrome-laptop. Browse for custom browser path - + Nalistovat uživatelsky určený popis umístění prohlížeče Custom extension ID: - ID vlastního rozšíření: + Identif. uživatelsky určeného rozšíření: Custom extension ID - ID vlastního rozšíření + Identif. uživatelsky určeného rozšíření Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 @@ -928,7 +936,7 @@ chrome-laptop. <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. - <b>Chyba:</b> Uživatelem určené umístění proxy nenalezeno! <br/>Napojení na prohlížeč NEBUDE bez proxy FUNGOVAT. + <b>Chyba:</b> Uživatelsky určené umístění proxy nenalezeno! <br/>Napojení na prohlížeč NEBUDE bez proxy FUNGOVAT. <b>Warning:</b> The following options can be dangerous! @@ -948,7 +956,7 @@ chrome-laptop. Select native messaging host folder location - + Vyberte umístění složky hostitele nativních zpráv @@ -1006,7 +1014,7 @@ chrome-laptop. Consider '\' an escape character - Považovat „\“ za únikový znak + Považovat „\“ za speciálního významu zbavující (escape) znak Preview @@ -1040,7 +1048,7 @@ chrome-laptop. Text qualification - Zařazení textu + Zařazování textu Field separation @@ -1111,7 +1119,7 @@ chrome-laptop. CsvParserModel %n column(s) - %n sloupec%n sloupce%n sloupců%n sloupců + %n sloupec%n sloupce%n sloupců%n sloupce %1, %2, %3 @@ -1147,7 +1155,7 @@ chrome-laptop. Key not transformed. This is a bug, please report it to the developers! - Klíč nebyl přeměněn. Toto je chyba, nahlaste to vývojářům. + Klíč nebyl přeměněn. Toto je chyba – prosím nahlaste to vývojářům. %1 @@ -1321,7 +1329,7 @@ Abyste tomu, aby se tato chyba objevovala, je třeba přejít do „Nastavení d Cannot use database file as key file - Soubor s databází není možné použít pro účely souboru s klíčem + Soubor s databází není možné použít pro účely souboru s klíčem (mění se) You cannot use your database file as a key file. @@ -1335,7 +1343,7 @@ Pokud nemáte žádný soubor, který by se zaručeně neměnil (a byl tedy vhod Key file to unlock the database - Soubor s klíčem k odemčení databáze. + Soubor s klíčem k odemknutí databáze Please touch the button on your YubiKey! @@ -1508,7 +1516,7 @@ Toto je nezbytné pro zachování kompatibility se zásuvným modulem pro prohl Refresh database root group ID - Obnovit ID kořenové skupiny databáze + Znovu vytvořit identifikátor kořenové skupiny databáze Created @@ -1516,12 +1524,13 @@ Toto je nezbytné pro zachování kompatibility se zásuvným modulem pro prohl Refresh database ID - Obnovit ID databáze + Znovu vytvořit identifikátor databáze 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. - + 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. @@ -1843,7 +1852,7 @@ Tuto akci nelze vzít zpět. Last Signer - Nedávno podepsal + Naposledy podepsal Certificates @@ -1919,7 +1928,7 @@ Tuto akci nelze vzít zpět. The created database has no key or KDF, refusing to save it. This is definitely a bug, please report it to the developers. - Vytvořená databáze nemá klíč nebo KDF, její uložení je domítnuto. + 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. @@ -1986,11 +1995,11 @@ Toto je nepochybně chyba, nahlaste ji prosím vývojářům. Do you really want to move entry "%1" to the recycle bin? - Opravdu přesunout záznam "%1" do Koše? + Opravdu přesunout záznam „%1“ do Koše? Do you really want to move %n entry(s) to the recycle bin? - Opravdu přesunout %n záznam do Koše? ()Opravdu přesunout %n záznamy do Koše? ()Opravdu přesunout %n záznamů do Koše?Opravdu přesunout %n záznamů do Koše? + Opravdu přesunout %n záznam do Koše?Opravdu přesunout %n záznamy do Koše?Opravdu přesunout %n záznamů do Koše?Opravdu přesunout %n záznamy do Koše? Execute command? @@ -2010,7 +2019,7 @@ Toto je nepochybně chyba, nahlaste ji prosím vývojářům. No current database. - Aktuálně žádná databáze. + Žádná nedávná databáze. No source database, nothing to do. @@ -2040,7 +2049,7 @@ Toto je nepochybně chyba, nahlaste ji prosím vývojářům. The database file has changed and you have unsaved changes. Do you want to merge your changes? Databázový soubor byl změněn a máte neuložené změny. -Přejete si je sloučit? +Přejete si je zahrnout? Empty recycle bin? @@ -2048,19 +2057,19 @@ Přejete si je sloučit? Are you sure you want to permanently delete everything from your recycle bin? - Opravdu chcete natrvalo smazat všechno z Koše? + Opravdu chcete nevratně smazat všechno z Koše? Do you really want to delete %n entry(s) for good? - Opravdu chcete %n položku nadobro smazat?Opravdu chcete %n položky nadobro smazat?Opravdu chcete %n položek nadobro smazat?Opravdu chcete %n položky nadobro smazat? + Opravdu chcete %n položku nevratně smazat?Opravdu chcete %n položky nevratně smazat?Opravdu chcete %n položek nevratně smazat?Opravdu chcete %n položky nevratně smazat? Delete entry(s)? - Smazat položkuSmazat položkySmazat položekSmazat položky + Smazat položku?Smazat položky?Smazat položky?Smazat položky? Move entry(s) to recycle bin? - Přesunout položku do Koše?Přesunout položky do Koše?Přesunout položek do Koše?Přesunout položky do Koše? + Přesunout položku do Koše?Přesunout položky do Koše?Přesunout položky do Koše?Přesunout položky do Koše? Lock Database? @@ -2231,11 +2240,11 @@ Vypnout bezpečné ukládání a zkusit to znovu? %n week(s) - %n týden%n týdny%n týdnů%n týdnů + %n týden%n týdny%n týdnů%n týdny %n month(s) - %n měsíc%n měsíce%n měsíců%n měsíců + %n měsíc%n měsíce%n měsíců%n měsíce Entry updated successfully. @@ -2362,7 +2371,7 @@ Vypnout bezpečné ukládání a zkusit to znovu? <html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html> - + <html><head/><body><p>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ý.</p></body></html> Exclude from database reports @@ -2476,7 +2485,7 @@ Vypnout bezpečné ukládání a zkusit to znovu? Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. - + Toto nastavení posílat do prohlížeče pouze pro dialogy HTTP Auth. Pokud je zapnuto, běžné přihlašovací formuláře nezobrazí tuto položku pro výběr. Use this entry only with HTTP Basic Auth @@ -2760,11 +2769,11 @@ Vypnout bezpečné ukládání a zkusit to znovu? KeeShare signed container - KeeShare sdílený kontejner + Podepsaný KeeShare kontejner Select import source - Vybrat zdroj importu + Vybrat zdroj pro import Select export target @@ -2882,7 +2891,7 @@ Podporovaná rozšíření jsou: %1. Use default Auto-Type sequence of parent group - Převzít výchozí pořadí automatického vyplňování nadřazené skupiny + Převzít výchozí pořadí automatického vyplňování od nadřazené skupiny Auto-Type: @@ -2909,11 +2918,11 @@ Podporovaná rozšíření jsou: %1. EditWidgetIcons Add custom icon - Přidat svou vlastní ikonu + Přidat uživatelsky určenou ikonu Delete custom icon - Smazat svou vlastní ikonu + Smazat uživatelsky určenou ikonu Download favicon @@ -2961,7 +2970,7 @@ Podporovaná rozšíření jsou: %1. You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security - Používání služby DuckDuckGo pro stahování ikon webových stránek je možné zapnout v Nástroje -> Nastavení -> zabezpečení + Používání služby DuckDuckGo pro stahování ikon webových stránek je možné zapnout v Nástroje → Nastavení → Zabezpečení Download favicon for URL @@ -2993,7 +3002,7 @@ Podporovaná rozšíření jsou: %1. Use custom icon - Použít svou vlastní ikonu + Použít uživatelsky určenou ikonu Apply icon to... @@ -3020,7 +3029,7 @@ Podporovaná rozšíření jsou: %1. Uuid: - Univerzálně jedinečný identifikátor: + Univerzálně neopakující se identifikátor: Plugin Data @@ -3119,7 +3128,7 @@ Dotčený zásuvný modul to může rozbít. Are you sure you want to remove %n attachment(s)? - Opravdu chcete odebrat %n přílohu?Opravdu chcete odebrat %n přílohy?Opravdu chcete odebrat %n příloh?Opravdu chcete odebrat %n příloh? + Opravdu chcete odebrat %n přílohu?Opravdu chcete odebrat %n přílohy?Opravdu chcete odebrat %n příloh?Opravdu chcete odebrat %n přílohy? Save attachments @@ -3216,7 +3225,7 @@ Opravdu chcete tento soubor přidat? EntryHistoryModel Last modified - Okamžik nejnovější změny + Naposledy změněno Title @@ -3450,7 +3459,7 @@ Opravdu chcete tento soubor přidat? Hide Passwords - Skrýt hesl + Skrýt hesla Fit to window @@ -3472,7 +3481,7 @@ Opravdu chcete tento soubor přidat? Has TOTP Entry TOTP icon toggle - Má TOTP + Má TOTP heslo @@ -3551,7 +3560,7 @@ Opravdu chcete tento soubor přidat? Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. - + Je spuštěná jiná služba pro tajemství (%1).<br/>Prosím zastavte/odeberte ji a až poté znovu zapněte napojení na službu pro tajemství. @@ -3972,7 +3981,7 @@ Jedná se o jednosměrný převod. Databázi, vzniklou z importu, nepůjde otev Duplicate custom attribute found - Zjištěn duplicitní uživatelem určený atribut + Zjištěn duplicitní uživatelsky určený atribut Entry string key or value missing @@ -4393,7 +4402,9 @@ Opravdu chcete tento soubor použít? unsupported in the future. Generate a new key file in the database security settings. - + 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íč. @@ -4688,7 +4699,7 @@ Očekávejte chyby a drobné problémy, tato verze není určena pro produkční Database &Reports... - + Hlášení o &databázi… Statistics, health check, etc. @@ -4728,7 +4739,7 @@ Očekávejte chyby a drobné problémy, tato verze není určena pro produkční Download &Favicon - + Stáhnout si ikonu &webu &Lock Databases @@ -4838,6 +4849,26 @@ Očekávejte chyby a drobné problémy, tato verze není určena pro produkční You must restart the application to apply this setting. Would you like to restart now? Chcete-li toto nastavení použít, musíte restartovat aplikaci. Chcete nyní restartovat? + + Perform Auto-Type Sequence + Provést posloupnost automatického vyplnění + + + {USERNAME} + {UŽIVATELSKÉ_JMÉNO} + + + {USERNAME}{ENTER} + {UŽIVATELSKÉ_JMÉNO}{ENTER} + + + {PASSWORD} + {HESLO} + + + {PASSWORD}{ENTER} + {HESLO}{ENTER} + ManageDatabase @@ -5322,10 +5353,6 @@ Očekávejte chyby a drobné problémy, tato verze není určena pro produkční Password quality Výborná - - ExtendedASCII - RozšířenéASCII - Switch to advanced mode Přepnout do pokročilého režimu @@ -5334,58 +5361,22 @@ Očekávejte chyby a drobné problémy, tato verze není určena pro produkční Advanced Pokročilé - - A-Z - A-Z - - - a-z - a-z - - - 0-9 - 0-9 - Braces Složené závorky - - {[( - {[( - Punctuation Interpunkční znaménka - - .,:; - .,:; - Quotes Uvozovky - - " ' - " ' - - - <*+!?= - <*+!?= - - - \_|-/ - \_|-/ - Logograms Logogramy - - #$%&&@^`~ - #$%&&@^`~ - Character set to exclude from generated password Sada znaků kterou z vytvářených hesel vynechat @@ -5506,6 +5497,10 @@ Očekávejte chyby a drobné problémy, tato verze není určena pro produkční Regenerate password (%1) Znovu vytvořit heslo (%1) + + Special Characters + Zvláštní znaky + QApplication @@ -6558,7 +6553,7 @@ Jádro systému: %3 %4 Password for '%1' has been leaked %2 time(s)! - + Otisk z hesla pro „%1“ unikl %2 krát!Otisk z hesla pro „%1“ unikl %2 krát!Otisk z hesla pro „%1“ unikl %2 krát!Otisk z hesla pro „%1“ unikl %2 krát! Invalid password generator after applying all options @@ -6574,7 +6569,7 @@ Jádro systému: %3 %4 Could not save the native messaging script file for %1. - + 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. Copy the given attribute to the clipboard. Defaults to "password" if not specified. @@ -6642,7 +6637,7 @@ Jádro systému: %3 %4 Benchmarking key derivation function for %1ms delay. - + Testování výkonnosti funkce odvozování klíče pro prodlevu %1ms. Setting %1 rounds for key derivation function. @@ -6803,7 +6798,7 @@ Jádro systému: %3 %4 Bad Password quality - + Špatné Bad — password must be changed @@ -6837,7 +6832,7 @@ Jádro systému: %3 %4 Please wait, health data is being calculated... - + Čekejte, probíhá výpočet pro kontrolu stavu... Congratulations, everything is healthy! @@ -7228,7 +7223,7 @@ Jádro systému: %3 %4 Authorization - Autorizace + Pověření These applications are currently connected: @@ -7248,7 +7243,7 @@ Jádro systému: %3 %4 Save current changes to activate the plugin and enable editing of this section. - + Aby byl zásuvný modul aktivován a zapnuto upravování této sekce, uložte stávající změny. @@ -7352,7 +7347,7 @@ Jádro systému: %3 %4 KeeShare key file - Soubor s klíček pro KeeShare + Soubor s klíčem pro KeeShare All files @@ -7412,7 +7407,7 @@ Jádro systému: %3 %4 Trust selected certificate - Důvěřovat označený certifikát + Důvěřovat označenému certifikátu Ask whether to trust the selected certificate every time @@ -7502,7 +7497,7 @@ Jádro systému: %3 %4 Signed share container are not supported - import prevented - Kontejner podepsaného sdílení není podporován – importu zabráněno + Podepsaný kontejner sdílení není podporován – importu zabráněno File is not readable @@ -7522,7 +7517,7 @@ Jádro systému: %3 %4 Unsigned share container are not supported - import prevented - Kontejner nepodepsaného sdílení není podporován – importu zabráněno + Nepodepsaný kontejner sdílení není podporován – importu zabráněno Successful unsigned import @@ -7600,7 +7595,7 @@ Jádro systému: %3 %4 NOTE: These TOTP settings are custom and may not work with other authenticators. TOTP QR code dialog warning - POZN.: Tato TOTP nastavení jsou uživatelská a nemusí fungovat s ostatními ověřovači. + POZN.: Tato TOTP nastavení jsou uživatelsky určená a nemusí fungovat s ostatními nástroji pro ověřování se. There was an error creating the QR code. @@ -7627,7 +7622,7 @@ Jádro systému: %3 %4 Use custom settings - Použít vlastní nastavení + Použít uživatelsky určená nastavení Custom Settings @@ -7682,11 +7677,11 @@ Příklad: JBSWY3DPEHPK3PXP Confirm Remove TOTP Settings - Potvrdit odebrání nastavení pro TOTP + Potvrdit odebrání nastavení pro TOTP heslo Are you sure you want to delete TOTP settings for this entry? - Opravdu chcete smazat nastavení TOTP u tohoto záznamu? + Opravdu chcete smazat nastavení pro TOTP heslo u tohoto záznamu? @@ -7732,7 +7727,7 @@ Příklad: JBSWY3DPEHPK3PXP KeePassXC %1 is now available — you have %2. - Nyní je k dispozici KeePassXC verze %1 ‒ nyní máte %2. + Nyní je k dispozici KeePassXC verze %1 ‒ nainstalovanou máte %2. Download it at keepassxc.org @@ -7845,7 +7840,7 @@ Příklad: JBSWY3DPEHPK3PXP <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> - <p>Pokud vlastníte zařízení <a href="https://www.yubico.com/">YubiKey</a>, můžete ho použít jako další úroveň zabezpečení.</p><p>YubiKey  vyžaduje aby jeden z jeho slotů byl naprogramován jako <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 výzva-odpověď</a>.</p> + <p>Pokud vlastníte zařízení <a href="https://www.yubico.com/">YubiKey</a>, můžete ho použít jako další úroveň zabezpečení.</p><p>YubiKey vyžaduje aby jeden z jeho slotů byl naprogramován jako <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 výzva-odpověď</a>.</p> Refresh hardware tokens 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 @@ Colorful Farverig + + You must restart the application to set the new language. Would you like to restart now? + + ApplicationSettingsWidgetGeneral @@ -166,10 +170,6 @@ Automatically save after every change Gem automatisk når der foretages ændringer - - Automatically save on exit - Gem automatisk ved afslutning - Automatically reload the database when modified externally Genindlæs automatisk databasen når den er blevet ændret eksternt @@ -304,10 +304,6 @@ Automatically launch KeePassXC at system startup - - Mark database as modified for non-data changes (e.g., expanding groups) - - Safely save database files (disable if experiencing problems with Dropbox, etc.) @@ -344,6 +340,18 @@ Auto-Type start delay: + + Automatically save when locking database + + + + Automatically save non-data changes when locking database + + + + Tray icon type + + ApplicationSettingsWidgetSecurity @@ -4817,6 +4825,26 @@ Forvent nogle fejl og mindre problemer. Denne version er ikke beregnet til produ You must restart the application to apply this setting. Would you like to restart now? + + Perform Auto-Type Sequence + + + + {USERNAME} + + + + {USERNAME}{ENTER} + + + + {PASSWORD} + + + + {PASSWORD}{ENTER} + + ManageDatabase @@ -5300,10 +5328,6 @@ Forvent nogle fejl og mindre problemer. Denne version er ikke beregnet til produ Password quality Fremragende - - ExtendedASCII - UdvidetASCII - Switch to advanced mode Skift til avanceret tilstand @@ -5312,58 +5336,22 @@ Forvent nogle fejl og mindre problemer. Denne version er ikke beregnet til produ Advanced Avanceret - - A-Z - A-Z - - - a-z - a-z - - - 0-9 - 0-9 - Braces Parenteser - - {[( - {[( - Punctuation Tegnsætning - - .,:; - .,:; - Quotes Citationstegn - - " ' - " ' - - - <*+!?= - <*+!?= - - - \_|-/ - \_|-/ - Logograms Logogrammer - - #$%&&@^`~ - #$%&&@^`~ - Character set to exclude from generated password Tegnsæt som skal medtages fra generede adgangskode @@ -5484,6 +5472,10 @@ Forvent nogle fejl og mindre problemer. Denne version er ikke beregnet til produ Regenerate password (%1) + + Special Characters + Specialtegn + QApplication 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 @@ Colorful Bunt + + You must restart the application to set the new language. Would you like to restart now? + Zum Ändern der Sprache müssen Sie die Anwendung neu starten. Möchten Sie jetzt neu starten? + ApplicationSettingsWidgetGeneral @@ -166,10 +170,6 @@ Automatically save after every change Automatisch speichern nach jeder Änderung - - Automatically save on exit - Automatisch speichern beim Beenden - Automatically reload the database when modified externally Datenbank nach externer Änderung automatisch neu laden @@ -304,10 +304,6 @@ Automatically launch KeePassXC at system startup KeePassXC beim Systemstart automatisch starten - - Mark database as modified for non-data changes (e.g., expanding groups) - Datenbank bei geringfügigen Änderungen (z. B. Gruppen ausklappen) als geändert markieren - Safely save database files (disable if experiencing problems with Dropbox, etc.) Sicheres Speichern der Datenbank (bei Problemen mit Dropbox, etc. deaktivieren) @@ -344,6 +340,18 @@ Auto-Type start delay: Startverzögerung für Auto-Type: + + Automatically save when locking database + Automatisch speichern beim Sperren der Datenbank + + + Automatically save non-data changes when locking database + Metadaten automatisch speichern beim Sperren der Datenbank + + + Tray icon type + Trayicon-Typ + ApplicationSettingsWidgetSecurity @@ -423,7 +431,7 @@ min Minutes - min + min Clear search query after @@ -4839,6 +4847,26 @@ Rechnen Sie mit Fehlern. Diese Version ist nicht für den Produktiveinsatz gedac You must restart the application to apply this setting. Would you like to restart now? Sie müssen die Anwendung neustarten, um diese Einstellung anzuwenden. Möchten Sie jetzt neustarten? + + Perform Auto-Type Sequence + Führe Auto-Type-Sequenz aus + + + {USERNAME} + {BENUTZERNAME} + + + {USERNAME}{ENTER} + {BENUTZERNAME}{ENTER} + + + {PASSWORD} + {PASSWORT} + + + {PASSWORD}{ENTER} + {PASSWORT}{ENTER} + ManageDatabase @@ -5323,10 +5351,6 @@ Rechnen Sie mit Fehlern. Diese Version ist nicht für den Produktiveinsatz gedac Password quality Ausgezeichnet - - ExtendedASCII - Erweitertes ASCII - Switch to advanced mode Zum fortgeschrittenen Modus wechseln @@ -5335,58 +5359,22 @@ Rechnen Sie mit Fehlern. Diese Version ist nicht für den Produktiveinsatz gedac Advanced Fortgeschritten - - A-Z - A-Z - - - a-z - a-z - - - 0-9 - 0-9 - Braces Klammern - - {[( - {[( - Punctuation Interpunktion - - .,:; - .,:; - Quotes Anführungszeichen - - " ' - "' - - - <*+!?= - <*+!?= - - - \_|-/ - \_|-/ - Logograms Kürzel - - #$%&&@^`~ - #$%&&@^`~ - Character set to exclude from generated password Zeichen, die nicht im Passwort enthalten sein sollen @@ -5507,6 +5495,10 @@ Rechnen Sie mit Fehlern. Diese Version ist nicht für den Produktiveinsatz gedac Regenerate password (%1) Passwort neu erzeugen (%1) + + Special Characters + Sonderzeichen + QApplication 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 @@ -1292,14 +1292,6 @@ Please consider generating a new key file. TouchID for Quick Unlock - - Clear - Clear - - - Clear Key File - - Unlock failed and no password given @@ -2651,6 +2643,10 @@ Disable safe saves and try again? Expires: + + Edit Entry + + EditEntryWidgetSSHAgent @@ -2950,6 +2946,10 @@ Supported extensions are: %1. Set default Auto-Type sequence + + Edit Group + + EditWidgetIcons @@ -3499,18 +3499,6 @@ Are you sure to add this file? EntryView - - Customize View - Customize View - - - Hide Usernames - Hide Usernames - - - Hide Passwords - Hide Passwords - Fit to window Fit to window @@ -4915,6 +4903,18 @@ Expect some bugs and minor issues, this version is not meant for production use. {PASSWORD}{ENTER} + + Always on Top + + + + Hide Usernames + Hide Usernames + + + Hide Passwords + Hide Passwords + ManageDatabase @@ -5534,10 +5534,6 @@ Expect some bugs and minor issues, this version is not meant for production use. Ctrl+S - - Clear - Clear - Regenerate password (%1) @@ -6278,10 +6274,6 @@ Available commands: read password of the database from stdin read password of the database from stdin - - Parent window handle - Parent window handle - Another instance of KeePassXC is already running. Another instance of KeePassXC is already running. @@ -6804,6 +6796,10 @@ Kernel: %3 %4 %1 s + + path to a custom local config file + + QtIOCompressor @@ -7227,10 +7223,6 @@ Kernel: %3 %4 Search Search - - Clear - Clear - Limit search to selected group Limit search to selected group diff --git a/share/translations/keepassx_en_GB.ts b/share/translations/keepassx_en_GB.ts new file mode 100644 index 000000000..971fa59b3 --- /dev/null +++ b/share/translations/keepassx_en_GB.ts @@ -0,0 +1,7832 @@ + + + AboutDialog + + About KeePassXC + About KeePassXC + + + About + About + + + Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> + Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> + + + KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. + KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. + + + Contributors + Contributors + + + <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> + <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> + + + Debug Info + Debug Info + + + Include the following information whenever you report a bug: + Include the following information whenever you report a bug: + + + Copy to clipboard + Copy to clipboard + + + Project Maintainers: + Project Maintainers: + + + Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. + Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. + + + + AgentSettingsWidget + + Use OpenSSH for Windows instead of Pageant + Use OpenSSH for Windows instead of Pageant + + + Enable SSH Agent integration + Enable SSH Agent integration + + + SSH_AUTH_SOCK value + SSH_AUTH_SOCK value + + + SSH_AUTH_SOCK override + SSH_AUTH_SOCK override + + + (empty) + (empty) + + + No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. + No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. + + + SSH Agent connection is working! + SSH Agent connection is working! + + + + ApplicationSettingsWidget + + Application Settings + Application Settings + + + General + General + + + Security + Security + + + Access error for config file %1 + Access error for config file %1 + + + Icon only + Icon only + + + Text only + Text only + + + Text beside icon + Text beside icon + + + Text under icon + Text under icon + + + Follow style + Follow style + + + Reset Settings? + Reset Settings? + + + Are you sure you want to reset all general and security settings to default? + Are you sure you want to reset all general and security settings to default? + + + Monochrome (light) + Monochrome (light) + + + Monochrome (dark) + Monochrome (dark) + + + Colorful + Colourful + + + You must restart the application to set the new language. Would you like to restart now? + You must restart the application to set the new language. Would you like to restart now? + + + + ApplicationSettingsWidgetGeneral + + Basic Settings + Basic Settings + + + Startup + Startup + + + Start only a single instance of KeePassXC + Start only a single instance of KeePassXC + + + Minimize window at application startup + Minimise window at application startup + + + File Management + File Management + + + Backup database file before saving + Backup database file before saving + + + Automatically save after every change + Automatically save after every change + + + Automatically reload the database when modified externally + Automatically reload the database when modified externally + + + Entry Management + Entry Management + + + Use group icon on entry creation + Use group icon on entry creation + + + Minimize instead of app exit + Minimise instead of app exit + + + Show a system tray icon + Show a system tray icon + + + Hide window to system tray when minimized + Hide window to system tray when minimised + + + Auto-Type + Auto-Type + + + Use entry title to match windows for global Auto-Type + Use entry title to match windows for global Auto-Type + + + Use entry URL to match windows for global Auto-Type + Use entry URL to match windows for global Auto-Type + + + Always ask before performing Auto-Type + Always ask before performing Auto-Type + + + ms + Milliseconds + ms + + + Movable toolbar + Movable toolbar + + + Remember previously used databases + Remember previously used databases + + + Load previously open databases on startup + Load previously open databases on startup + + + Remember database key files and security dongles + Remember database key files and security dongles + + + Check for updates at application startup once per week + Check for updates at application startup once per week + + + Include beta releases when checking for updates + Include beta releases when checking for updates + + + Language: + Language: + + + (restart program to activate) + (restart program to activate) + + + Minimize window after unlocking database + Minimise window after unlocking database + + + Minimize when opening a URL + Minimise when opening a URL + + + Hide window when copying to clipboard + Hide window when copying to clipboard + + + Minimize + Minimise + + + Drop to background + Drop to background + + + Favicon download timeout: + Favicon download timeout: + + + Website icon download timeout in seconds + Website icon download timeout in seconds + + + sec + Seconds + sec + + + Toolbar button style + Toolbar button style + + + Language selection + Language selection + + + Global auto-type shortcut + Global auto-type shortcut + + + Auto-type character typing delay milliseconds + Auto-type character typing delay milliseconds + + + Auto-type start delay milliseconds + Auto-type start delay milliseconds + + + Automatically launch KeePassXC at system startup + Automatically launch KeePassXC at system startup + + + Safely save database files (disable if experiencing problems with Dropbox, etc.) + Safely save database files (disable if experiencing problems with Dropbox, etc.) + + + User Interface + User Interface + + + Toolbar button style: + Toolbar button style: + + + Use monospaced font for notes + Use monospaced font for notes + + + Tray icon type: + Tray icon type: + + + Reset settings to default… + Reset settings to default… + + + Auto-Type typing delay: + Auto-Type typing delay: + + + Global Auto-Type shortcut: + Global Auto-Type shortcut: + + + Auto-Type start delay: + Auto-Type start delay: + + + Automatically save when locking database + Automatically save when locking database + + + Automatically save non-data changes when locking database + Automatically save non-data changes when locking database + + + Tray icon type + Tray icon type + + + + ApplicationSettingsWidgetSecurity + + Timeouts + Timeouts + + + Clear clipboard after + Clear clipboard after + + + sec + Seconds + sec + + + Lock databases after inactivity of + Lock databases after inactivity of + + + min + min + + + Forget TouchID after inactivity of + Forget TouchID after inactivity of + + + Convenience + Convenience + + + Lock databases when session is locked or lid is closed + Lock databases when session is locked or lid is closed + + + Forget TouchID when session is locked or lid is closed + Forget TouchID when session is locked or lid is closed + + + Lock databases after minimizing the window + Lock databases after minimising the window + + + Re-lock previously locked database after performing Auto-Type + Re-lock previously locked database after performing Auto-Type + + + Hide passwords in the entry preview panel + Hide passwords in the entry preview panel + + + Hide entry notes by default + Hide entry notes by default + + + Privacy + Privacy + + + Use DuckDuckGo service to download website icons + Use DuckDuckGo service to download website icons + + + Clipboard clear seconds + Clipboard clear seconds + + + Touch ID inactivity reset + Touch ID inactivity reset + + + Database lock timeout seconds + Database lock timeout seconds + + + min + Minutes + min + + + Clear search query after + Clear search query after + + + Require password repeat when it is visible + Require password repeat when it is visible + + + Hide passwords when editing them + Hide passwords when editing them + + + Use placeholder for empty password fields + Use placeholder for empty password fields + + + + AutoType + + Couldn't find an entry that matches the window title: + Couldn't find an entry that matches the window title: + + + Auto-Type - KeePassXC + Auto-Type - KeePassXC + + + Auto-Type + Auto-Type + + + The Syntax of your Auto-Type statement is incorrect! + The Syntax of your Auto-Type statement is incorrect! + + + This Auto-Type command contains a very long delay. Do you really want to proceed? + This Auto-Type command contains a very long delay. Do you really want to proceed? + + + This Auto-Type command contains very slow key presses. Do you really want to proceed? + This Auto-Type command contains very slow key presses. Do you really want to proceed? + + + This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? + This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? + + + Permission Required + Permission Required + + + KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. + KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. + + + + AutoTypeAssociationsModel + + Window + Window + + + Sequence + Sequence + + + Default sequence + Default sequence + + + + AutoTypeMatchModel + + Group + Group + + + Title + Title + + + Username + Username + + + Sequence + Sequence + + + + AutoTypeMatchView + + Copy &username + Copy &username + + + Copy &password + Copy &password + + + + AutoTypePlatformMac + + Permission Required + Permission Required + + + KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. + KeePassXC 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. + + + + AutoTypeSelectDialog + + Auto-Type - KeePassXC + Auto-Type - KeePassXC + + + Select entry to Auto-Type: + Select entry to Auto-Type: + + + Search... + Search... + + + + BrowserAccessControlDialog + + KeePassXC - Browser Access Request + KeePassXC - Browser Access Request + + + %1 is requesting access to the following entries: + %1 is requesting access to the following entries: + + + Remember access to checked entries + Remember access to checked entries + + + Remember + Remember + + + Allow access to entries + Allow access to entries + + + Allow Selected + Allow Selected + + + Deny All + Deny All + + + Disable for this site + Disable for this site + + + + BrowserEntrySaveDialog + + KeePassXC-Browser Save Entry + KeePassXC-Browser Save Entry + + + Ok + Ok + + + Cancel + Cancel + + + You have multiple databases open. +Please select the correct database for saving credentials. + You have multiple databases open. +Please select the correct database for saving credentials. + + + + BrowserService + + KeePassXC: New key association request + KeePassXC: New key association request + + + Save and allow access + Save and allow access + + + KeePassXC: Overwrite existing key? + KeePassXC: Overwrite existing key? + + + A shared encryption key with the name "%1" already exists. +Do you want to overwrite it? + A shared encryption key with the name "%1" already exists. +Do you want to overwrite it? + + + KeePassXC: Update Entry + KeePassXC: Update Entry + + + Do you want to update the information in %1 - %2? + Do you want to update the information in %1 - %2? + + + Abort + Abort + + + Converting attributes to custom data… + Converting attributes to custom data… + + + KeePassXC: Converted KeePassHTTP attributes + KeePassXC: Converted KeePassHTTP attributes + + + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + Successfully converted attributes from %1 entry(s). +Moved %2 keys to custom data. + + + Successfully moved %n keys to custom data. + Successfully moved %n key to custom data.Successfully moved %n keys to custom data. + + + KeePassXC: No entry with KeePassHTTP attributes found! + KeePassXC: No entry with KeePassHTTP attributes found! + + + The active database does not contain an entry with KeePassHTTP attributes. + The active database does not contain an entry with KeePassHTTP attributes. + + + KeePassXC: Legacy browser integration settings detected + KeePassXC: Legacy browser integration settings detected + + + KeePassXC: Create a new group + KeePassXC: Create a new group + + + A request for creating a new group "%1" has been received. +Do you want to create this group? + + A request for creating a new group "%1" has been received. +Do you want to create this group? + + + + Your KeePassXC-Browser settings need to be moved into the database settings. +This is necessary to maintain your current browser connections. +Would you like to migrate your existing settings now? + 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? + + + Don't show this warning again + Don't show this warning again + + + You have received an association request for the following database: +%1 + +Give the connection a unique name or ID, for example: +chrome-laptop. + You have received an association request for the following database: +%1 + +Give the connection a unique name or ID, for example: +chrome-laptop. + + + + BrowserSettingsWidget + + Dialog + Dialog + + + This is required for accessing your databases with KeePassXC-Browser + This is required for accessing your databases with KeePassXC-Browser + + + Enable browser integration + Enable browser integration + + + General + General + + + Browsers installed as snaps are currently not supported. + Browsers installed as snaps are currently not supported. + + + Enable integration for these browsers: + Enable integration for these browsers: + + + Vivaldi + Vivaldi + + + &Edge + &Edge + + + Firefox + Firefox + + + Tor Browser + Tor Browser + + + Brave + Brave + + + Google Chrome + Google Chrome + + + Chromium + Chromium + + + Show a notification when credentials are requested + Credentials mean login data requested via browser extension + Show a notification when credentials are requested + + + Request to unlock the database if it is locked + Request to unlock the database if it is locked + + + Only entries with the same scheme (http://, https://, ...) are returned. + Only entries with the same scheme (http://, https://, ...) are returned. + + + Match URL scheme (e.g., https://...) + Match URL scheme (e.g., https://...) + + + Only returns the best matches for a specific URL instead of all entries for the whole domain. + Only returns the best matches for a specific URL instead of all entries for the whole domain. + + + Return only best-matching credentials + Return only best-matching credentials + + + Returns expired credentials. String [expired] is added to the title. + + + + Allow returning expired credentials + + + + All databases connected to the extension will return matching credentials. + + + + Search in all opened databases for matching credentials + Credentials mean login data requested via browser extension + + + + Sort matching credentials by title + Credentials mean login data requested via browser extension + + + + Sort matching credentials by username + Credentials mean login data requested via browser extension + + + + Advanced + Advanced + + + Never ask before accessing credentials + Credentials mean login data requested via browser extension + + + + Never ask before updating credentials + Credentials mean login data requested via browser extension + + + + Do not ask permission for HTTP Basic Auth + An extra HTTP Basic Auth setting + Do not ask permission for HTTP Basic Auth + + + Automatically creating or updating string fields is not supported. + Automatically creating or updating string fields is not supported. + + + Return advanced string fields which start with "KPH: " + + + + Don't display the popup suggesting migration of legacy KeePassHTTP settings. + + + + Do not prompt for KeePassHTTP settings migration. + + + + Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. + Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. + + + Update native messaging manifest files at startup + + + + Use a custom proxy location if you installed a proxy manually. + Use a custom proxy location if you installed a proxy manually. + + + Use a custom proxy location: + Meant is the proxy for KeePassXC-Browser + + + + Custom proxy location field + + + + Browser for custom proxy file + + + + Browse... + Button for opening file dialog + Browse... + + + Use a custom browser configuration location: + + + + Browser type: + + + + Toolbar button style + Toolbar button style + + + Config Location: + + + + Custom browser location field + + + + ~/.custom/config/Mozilla/native-messaging-hosts/ + ~/.custom/config/Mozilla/native-messaging-hosts/ + + + Browse for custom browser path + + + + Custom extension ID: + + + + Custom extension ID + + + + Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 + Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 + + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 + + + + Please see special instructions for browser extension use below + Please see special instructions for browser extension use below + + + <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. + + + + <b>Warning:</b> The following options can be dangerous! + <b>Warning:</b> The following options can be dangerous! + + + Executable Files + Executable Files + + + All Files + All Files + + + Select custom proxy location + Select custom proxy location + + + Select native messaging host folder location + + + + + CloneDialog + + Clone Options + Clone Options + + + Append ' - Clone' to title + Append ' - Clone' to title + + + Replace username and password with references + Replace username and password with references + + + Copy history + Copy history + + + + CsvImportWidget + + Import CSV fields + Import CSV fields + + + filename + filename + + + size, rows, columns + size, rows, columns + + + Encoding + Encoding + + + Codec + Codec + + + Text is qualified by + Text is qualified by + + + Fields are separated by + Fields are separated by + + + Comments start with + Comments start with + + + Consider '\' an escape character + Consider '\' an escape character + + + Preview + Preview + + + Imported from CSV file + Imported from CSV file + + + Original data: + Original data: + + + Error + Error + + + Error(s) detected in CSV file! + Error(s) detected in CSV file! + + + [%n more message(s) skipped] + [%n more message skipped][%n more messages skipped] + + + CSV import: writer has errors: +%1 + CSV import: writer has errors: +%1 + + + Text qualification + + + + Field separation + + + + Number of header lines to discard + + + + CSV import preview + + + + Column Association + + + + Last Modified + + + + Password + Password + + + Created + Created + + + Notes + Notes + + + Title + Title + + + Group + Group + + + URL + URL + + + Username + Username + + + Header lines skipped + + + + First line has field names + + + + Not Present + + + + Column %1 + + + + + CsvParserModel + + %n column(s) + %n column%n columns + + + %1, %2, %3 + file info: bytes, rows, columns + %1, %2, %3 + + + %n byte(s) + %n byte%n bytes + + + %n row(s) + %n row%n rows + + + + Database + + File %1 does not exist. + File %1 does not exist. + + + Unable to open file %1. + Unable to open file %1. + + + Error while reading the database: %1 + Error while reading the database: %1 + + + File cannot be written as it is opened in read-only mode. + File cannot be written as it is opened in read-only mode. + + + Key not transformed. This is a bug, please report it to the developers! + Key not transformed. This is a bug, please report it to the developers! + + + %1 +Backup database located at %2 + + + + Could not save, database does not point to a valid file. + + + + Could not save, database file is read-only. + + + + Database file has unmerged changes. + + + + Recycle Bin + Recycle Bin + + + Passwords + Root group name + Passwords + + + Database save is already in progress. + + + + Could not save, database has not been initialized! + Could not save, database has not been initialised! + + + + DatabaseOpenDialog + + Unlock Database - KeePassXC + Unlock Database - KeePassXC + + + + DatabaseOpenWidget + + Key File: + Key File: + + + Refresh + Refresh + + + Legacy key file format + Legacy key file format + + + You are using a legacy key file format which may become +unsupported in the future. + +Please consider generating a new key file. + You are using a legacy key file format which may become +unsupported in the future. + +Please consider generating a new key file. + + + Don't show this warning again + Don't show this warning again + + + All files + All files + + + Key files + Key files + + + Select key file + Select key file + + + Failed to open key file: %1 + + + + Unlock KeePassXC Database + + + + Enter Password: + + + + Password field + + + + Hardware key slot selection + + + + Browse for key file + + + + Browse... + Browse... + + + Refresh hardware tokens + + + + Hardware Key: + + + + Hardware key help + + + + TouchID for Quick Unlock + + + + Clear + Clear + + + Clear Key File + + + + Unlock failed and no password given + + + + Unlocking the database failed and you did not enter a password. +Do you want to retry with an "empty" password instead? + +To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. + + + + Retry with empty password + + + + Enter Additional Credentials (if any): + + + + <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> +<p>Click for more information...</p> + + + + Key file help + + + + ? + + + + Cannot use database file as key file + + + + You cannot use your database file as a key file. +If you do not have a key file, please leave the field empty. + + + + <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information...</p> + + + + Key file to unlock the database + + + + Please touch the button on your YubiKey! + Please touch the button on your YubiKey! + + + Detecting hardware keys… + + + + No hardware keys detected + + + + Select hardware key… + + + + + DatabaseSettingWidgetMetaData + + Passwords + Passwords + + + + DatabaseSettingsDialog + + Advanced Settings + Advanced Settings + + + General + General + + + Security + Security + + + Encryption Settings + Encryption Settings + + + Browser Integration + Browser Integration + + + Database Credentials + + + + + DatabaseSettingsWidgetBrowser + + KeePassXC-Browser settings + KeePassXC-Browser settings + + + Stored keys + Stored keys + + + Remove + Remove + + + Delete the selected key? + Delete the selected key? + + + Do you really want to delete the selected key? +This may prevent connection to the browser plugin. + Do you really want to delete the selected key? +This may prevent connection to the browser plugin. + + + Key + Key + + + Value + Value + + + Enable Browser Integration to access these settings. + Enable Browser Integration to access these settings. + + + Disconnect all browsers + Disconnect all browsers + + + Do you really want to disconnect all browsers? +This may prevent connection to the browser plugin. + Do you really want to disconnect all browsers? +This may prevent connection to the browser plugin. + + + KeePassXC: No keys found + KeePassXC: No keys found + + + No shared encryption keys found in KeePassXC settings. + No shared encryption keys found in KeePassXC settings. + + + KeePassXC: Removed keys from database + KeePassXC: Removed keys from database + + + Successfully removed %n encryption key(s) from KeePassXC settings. + Successfully removed %n encryption key from KeePassXC settings.Successfully removed %n encryption keys from KeePassXC settings. + + + Forget all site-specific settings on entries + Forget all site-specific settings on entries + + + Do you really want forget all site-specific settings on every entry? +Permissions to access entries will be revoked. + Do you really want forget all site-specific settings on every entry? +Permissions to access entries will be revoked. + + + Removing stored permissions… + Removing stored permissions… + + + Abort + Abort + + + KeePassXC: Removed permissions + KeePassXC: Removed permissions + + + Successfully removed permissions from %n entry(s). + Successfully removed permissions from %n entry.Successfully removed permissions from %n entries. + + + KeePassXC: No entry with permissions found! + KeePassXC: No entry with permissions found! + + + The active database does not contain an entry with permissions. + The active database does not contain an entry with permissions. + + + Move KeePassHTTP attributes to custom data + Move KeePassHTTP attributes to custom data + + + Do you really want to move all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + Do you really want to move all legacy browser integration data to the latest standard? +This is necessary to maintain compatibility with the browser plugin. + + + Stored browser keys + + + + Remove selected key + + + + Move KeePassHTTP attributes to KeePassXC-Browser custom data + + + + Refresh database root group ID + + + + Created + Created + + + Refresh database ID + + + + Do you really want refresh the database ID? +This is only necessary if your database is a copy of another and the browser extension cannot connect. + + + + + DatabaseSettingsWidgetDatabaseKey + + Add additional protection... + Add additional protection... + + + No password set + No password set + + + WARNING! You have not set a password. Using a database without a password is strongly discouraged! + +Are you sure you want to continue without a password? + WARNING! You have not set a password. Using a database without a password is strongly discouraged! + +Are you sure you want to continue without a password? + + + Continue without password + + + + No encryption key added + No encryption key added + + + You must add at least one encryption key to secure your database! + You must add at least one encryption key to secure your database! + + + Unknown error + Unknown error + + + Failed to change database credentials + + + + + DatabaseSettingsWidgetEncryption + + Encryption Algorithm: + Encryption Algorithm: + + + AES: 256 Bit (default) + AES: 256 Bit (default) + + + Twofish: 256 Bit + Twofish: 256 Bit + + + Key Derivation Function: + Key Derivation Function: + + + Transform rounds: + Transform rounds: + + + Memory Usage: + Memory Usage: + + + Parallelism: + Parallelism: + + + Decryption Time: + Decryption Time: + + + ?? s + ?? s + + + Change + Change + + + Higher values offer more protection, but opening the database will take longer. + Higher values offer more protection, but opening the database will take longer. + + + Database format: + Database format: + + + This is only important if you need to use your database with other programs. + This is only important if you need to use your database with other programs. + + + KDBX 4.0 (recommended) + KDBX 4.0 (recommended) + + + KDBX 3.1 + KDBX 3.1 + + + unchanged + Database decryption time is unchanged + unchanged + + + Number of rounds too high + Key transformation rounds + Number of rounds too high + + + You are using a very high number of key transform rounds with Argon2. + +If you keep this number, your database may take hours or days (or even longer) to open! + You are using a very high number of key transform rounds with Argon2. + +If you keep this number, your database may take hours or days (or even longer) to open! + + + Understood, keep number + Understood, keep number + + + Cancel + Cancel + + + Number of rounds too low + Key transformation rounds + Number of rounds too low + + + You are using a very low number of key transform rounds with AES-KDF. + +If you keep this number, your database may be too easy to crack! + You are using a very low number of key transform rounds with AES-KDF. + +If you keep this number, your database may be too easy to crack! + + + KDF unchanged + KDF unchanged + + + Failed to transform key with new KDF parameters; KDF unchanged. + Failed to transform key with new KDF parameters; KDF unchanged. + + + MiB + Abbreviation for Mebibytes (KDF settings) + MiB MiB + + + thread(s) + Threads for parallel execution (KDF settings) + thread threads + + + Change existing decryption time + + + + Decryption time in seconds + + + + Database format + + + + Encryption algorithm + + + + Key derivation function + + + + Transform rounds + + + + Memory usage + + + + Parallelism + Parallelism + + + ?? ms + + + + ? s + + + + + DatabaseSettingsWidgetFdoSecrets + + Exposed Entries + + + + Don't expose this database + + + + Expose entries under this group: + + + + Enable Secret Service to access these settings. + + + + + DatabaseSettingsWidgetGeneral + + Database Meta Data + Database Meta Data + + + Database name: + Database name: + + + Database description: + Database description: + + + Default username: + Default username: + + + History Settings + History Settings + + + Max. history items: + Max. history items: + + + Max. history size: + Max. history size: + + + MiB + MiB + + + Use recycle bin + Use recycle bin + + + Additional Database Settings + Additional Database Settings + + + Database name field + + + + Database description field + + + + Default username field + + + + Maximum number of history items per entry + + + + Maximum size of history per entry + Maximum size of history per entry + + + Delete Recycle Bin + + + + Do you want to delete the current recycle bin and all its contents? +This action is not reversible. + + + + (old) + + + + Enable compression (recommended) + + + + + DatabaseSettingsWidgetKeeShare + + Sharing + Sharing + + + Breadcrumb + Breadcrumb + + + Type + Type + + + Path + Path + + + Last Signer + Last Signer + + + Certificates + Certificates + + + > + Breadcrumb separator + > + + + + DatabaseSettingsWidgetMetaDataSimple + + Database Name: + Database Name: + + + Description: + Description: + + + Database name field + + + + Database description field + + + + + DatabaseTabWidget + + KeePass 2 Database + KeePass 2 Database + + + All files + All files + + + Open database + Open database + + + CSV file + CSV file + + + Merge database + Merge database + + + Open KeePass 1 database + Open KeePass 1 database + + + KeePass 1 database + KeePass 1 database + + + Export database to CSV file + Export database to CSV file + + + Writing the CSV file failed. + Writing the CSV file failed. + + + Database creation error + Database creation error + + + The created database has no key or KDF, refusing to save it. +This is definitely a bug, please report it to the developers. + The created database has no key or KDF, refusing to save it. +This is definitely a bug, please report it to the developers. + + + Select CSV file + Select CSV file + + + New Database + New Database + + + %1 [New Database] + Database tab name modifier + %1 [New Database] + + + %1 [Locked] + Database tab name modifier + %1 [Locked] + + + %1 [Read-only] + Database tab name modifier + %1 [Read-only] + + + Failed to open %1. It either does not exist or is not accessible. + + + + Export database to HTML file + + + + HTML file + + + + Writing the HTML file failed. + + + + Export Confirmation + + + + You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? + + + + Open OPVault + + + + + DatabaseWidget + + Searching... + Searching... + + + Do you really want to delete the entry "%1" for good? + Do you really want to delete the entry "%1" for good? + + + Do you really want to move entry "%1" to the recycle bin? + Do you really want to move entry "%1" to the recycle bin? + + + Do you really want to move %n entry(s) to the recycle bin? + Do you really want to move %n entry to the recycle bin?Do you really want to move %n entries to the recycle bin? + + + Execute command? + Execute command? + + + Do you really want to execute the following command?<br><br>%1<br> + Do you really want to execute the following command?<br><br>%1<br> + + + Remember my choice + Remember my choice + + + Do you really want to delete the group "%1" for good? + Do you really want to delete the group "%1" for good? + + + No current database. + No current database. + + + No source database, nothing to do. + No source database, nothing to do. + + + Search Results (%1) + Search Results (%1) + + + No Results + No Results + + + File has changed + File has changed + + + The database file has changed. Do you want to load the changes? + The database file has changed. Do you want to load the changes? + + + Merge Request + Merge Request + + + The database file has changed and you have unsaved changes. +Do you want to merge your changes? + The database file has changed and you have unsaved changes. +Do you want to merge your changes? + + + Empty recycle bin? + Empty recycle bin? + + + Are you sure you want to permanently delete everything from your recycle bin? + Are you sure you want to permanently delete everything from your recycle bin? + + + Do you really want to delete %n entry(s) for good? + Do you really want to delete %n entry for good?Do you really want to delete %n entries for good? + + + Delete entry(s)? + Delete entry?Delete entries? + + + Move entry(s) to recycle bin? + Move entry to recycle bin?Move entries to recycle bin? + + + Lock Database? + Lock Database? + + + You are editing an entry. Discard changes and lock anyway? + You are editing an entry. Discard changes and lock anyway? + + + "%1" was modified. +Save changes? + "%1" was modified. +Save changes? + + + Database was modified. +Save changes? + Database was modified. +Save changes? + + + Save changes? + Save changes? + + + Could not open the new database file while attempting to autoreload. +Error: %1 + Could not open the new database file while attempting to autoreload. +Error: %1 + + + Disable safe saves? + Disable safe saves? + + + KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +Disable safe saves and try again? + KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. +Disable safe saves and try again? + + + Passwords + Passwords + + + Save database as + Save database as + + + KeePass 2 Database + KeePass 2 Database + + + Replace references to entry? + Replace references to entry? + + + Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? + Entry "%1" has %2 reference. Do you want to overwrite references with values, skip this entry, or delete anyway?Entry "%1" has %2 references. Do you want to overwrite references with values, skip this entry, or delete anyway? + + + Delete group + Delete group + + + Move group to recycle bin? + Move group to recycle bin? + + + Do you really want to move the group "%1" to the recycle bin? + Do you really want to move the group "%1" to the recycle bin? + + + Successfully merged the database files. + Successfully merged the database files. + + + Database was not modified by merge operation. + Database was not modified by merge operation. + + + Shared group... + Shared group... + + + Writing the database failed: %1 + + + + This database is opened in read-only mode. Autosave is disabled. + + + + Save database backup + + + + Could not find database file: %1 + + + + + EditEntryWidget + + Entry + Entry + + + Advanced + Advanced + + + Icon + Icon + + + Auto-Type + Auto-Type + + + Properties + Properties + + + History + History + + + SSH Agent + SSH Agent + + + n/a + n/a + + + (encrypted) + (encrypted) + + + Select private key + Select private key + + + Entry history + Entry history + + + Add entry + Add entry + + + Edit entry + Edit entry + + + New attribute + New attribute + + + Are you sure you want to remove this attribute? + Are you sure you want to remove this attribute? + + + Tomorrow + Tomorrow + + + %n week(s) + %n week%n weeks + + + %n month(s) + %n month%n months + + + Entry updated successfully. + Entry updated successfully. + + + New attribute %1 + New attribute %1 + + + %n year(s) + %n year%n years + + + Confirm Removal + Confirm Removal + + + Browser Integration + Browser Integration + + + <empty URL> + + + + Are you sure you want to remove this URL? + + + + Reveal + Reveal + + + Hide + + + + Unsaved Changes + + + + Would you like to save changes to this entry? + + + + [PROTECTED] Press Reveal to view or edit + + + + + EditEntryWidgetAdvanced + + Additional attributes + Additional attributes + + + Add + Add + + + Remove + Remove + + + Edit Name + Edit Name + + + Protect + Protect + + + Reveal + Reveal + + + Attachments + Attachments + + + Foreground Color: + Foreground Colour: + + + Background Color: + Background Colour: + + + Attribute selection + + + + Attribute value + + + + Add a new attribute + + + + Remove selected attribute + + + + Edit attribute name + + + + Toggle attribute protection + + + + Show a protected attribute + + + + Foreground color selection + Foreground colour selection + + + Background color selection + Background colour selection + + + <html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html> + + + + Exclude from database reports + + + + + EditEntryWidgetAutoType + + Enable Auto-Type for this entry + Enable Auto-Type for this entry + + + Window Associations + Window Associations + + + + + + + + + - + - + + + Window title: + Window title: + + + Use a specific sequence for this association: + Use a specific sequence for this association: + + + Custom Auto-Type sequence + + + + Open Auto-Type help webpage + + + + Existing window associations + + + + Add new window association + + + + Remove selected window association + + + + You can use an asterisk (*) to match everything + + + + Set the window association title + + + + You can use an asterisk to match everything + + + + Custom Auto-Type sequence for this window + + + + Inherit default Auto-Type sequence from the group + + + + Use custom Auto-Type sequence: + + + + + EditEntryWidgetBrowser + + These settings affect to the entry's behaviour with the browser extension. + + + + General + General + + + Skip Auto-Submit for this entry + + + + Hide this entry from the browser extension + + + + Additional URL's + + + + Add + Add + + + Remove + Remove + + + Edit + + + + Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. + + + + Use this entry only with HTTP Basic Auth + + + + + EditEntryWidgetHistory + + Show + Show + + + Restore + Restore + + + Delete + Delete + + + Delete all + Delete all + + + Entry history selection + + + + Show entry at selected history state + + + + Restore entry to selected history state + + + + Delete selected history state + + + + Delete all history + + + + + EditEntryWidgetMain + + URL: + URL: + + + Password: + Password: + + + Title: + Title: + + + Presets + Presets + + + Toggle the checkbox to reveal the notes section. + Toggle the checkbox to reveal the notes section. + + + Username: + Username: + + + Url field + + + + Download favicon for URL + + + + Password field + + + + Toggle notes visible + + + + Expiration field + Expiry field + + + Expiration Presets + Expiry Presets + + + Expiration presets + Expiry presets + + + Notes field + + + + Title field + + + + Username field + + + + Toggle expiration + Toggle expiry + + + Notes: + + + + https://example.com + + + + Expires: + Expires: + + + + EditEntryWidgetSSHAgent + + Form + Form + + + Remove key from agent after + Remove key from agent after + + + seconds + seconds + + + Fingerprint + Fingerprint + + + Remove key from agent when database is closed/locked + Remove key from agent when database is closed/locked + + + Public key + Public key + + + Add key to agent when database is opened/unlocked + Add key to agent when database is opened/unlocked + + + Comment + Comment + + + Decrypt + Decrypt + + + n/a + n/a + + + Copy to clipboard + Copy to clipboard + + + Private key + Private key + + + External file + External file + + + Browse... + Button for opening file dialog + Browse... + + + Attachment + Attachment + + + Add to agent + Add to agent + + + Remove from agent + Remove from agent + + + Require user confirmation when this key is used + Require user confirmation when this key is used + + + Remove key from agent after specified seconds + + + + Browser for key file + + + + External key file + + + + Select attachment file + + + + + EditGroupWidget + + Group + Group + + + Icon + Icon + + + Properties + Properties + + + Add group + Add group + + + Edit group + Edit group + + + Enable + Enable + + + Disable + Disable + + + Inherit from parent group (%1) + Inherit from parent group (%1) + + + Entry has unsaved changes + Entry has unsaved changes + + + + EditGroupWidgetKeeShare + + Type: + Type: + + + Path: + Path: + + + Password: + Password: + + + Inactive + Inactive + + + KeeShare unsigned container + KeeShare unsigned container + + + KeeShare signed container + KeeShare signed container + + + Select import source + Select import source + + + Select export target + Select export target + + + Select import/export file + Select import/export file + + + Clear + Clear + + + Import + Import + + + Export + + + + Synchronize + Synchronise + + + Your KeePassXC version does not support sharing this container type. +Supported extensions are: %1. + + + + %1 is already being exported by this database. + + + + %1 is already being imported by this database. + + + + %1 is being imported and exported by different groups in this database. + + + + KeeShare is currently disabled. You can enable import/export in the application settings. + KeeShare is a proper noun + + + + Database export is currently disabled by application settings. + + + + Database import is currently disabled by application settings. + + + + Sharing mode field + + + + Path to share file field + + + + Password field + + + + Clear fields + + + + Browse for share file + + + + Browse... + Browse... + + + + EditGroupWidgetMain + + Name field + + + + Notes field + + + + Toggle expiration + Toggle expiry + + + Auto-Type toggle for this and sub groups + + + + Expiration field + Expiry field + + + Search toggle for this and sub groups + + + + Default auto-type sequence field + + + + Expires: + Expires: + + + Use default Auto-Type sequence of parent group + + + + Auto-Type: + + + + Search: + + + + Notes: + + + + Name: + + + + Set default Auto-Type sequence + + + + + EditWidgetIcons + + Add custom icon + Add custom icon + + + Delete custom icon + Delete custom icon + + + Download favicon + Download favicon + + + Unable to fetch favicon. + Unable to fetch favicon. + + + Images + Images + + + All files + All files + + + Confirm Delete + Confirm Delete + + + Select Image(s) + Select Image(s) + + + Successfully loaded %1 of %n icon(s) + Successfully loaded %1 of %n iconSuccessfully loaded %1 of %n icons + + + No icons were loaded + No icons were loaded + + + %n icon(s) already exist in the database + %n icon already exist in the database%n icons already exist in the database + + + The following icon(s) failed: + The following icon failed:The following icons failed: + + + This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? + This icon is used by %n entry, and will be replaced by the default icon. Are you sure you want to delete it?This icon is used by %n entries, and will be replaced by the default icon. Are you sure you want to delete it? + + + You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security + + + + Download favicon for URL + + + + Apply selected icon to subgroups and entries + + + + Also apply to child groups + + + + Also apply to child entries + + + + Also apply to all children + + + + Existing icon selected. + + + + Use default icon + + + + Use custom icon + + + + Apply icon to... + + + + Apply to this group only + + + + + EditWidgetProperties + + Created: + Created: + + + Modified: + Modified: + + + Accessed: + Accessed: + + + Uuid: + Uuid: + + + Plugin Data + Plugin Data + + + Remove + Remove + + + Delete plugin data? + Delete plugin data? + + + Do you really want to delete the selected plugin data? +This may cause the affected plugins to malfunction. + Do you really want to delete the selected plugin data? +This may cause the affected plugins to malfunction. + + + Key + Key + + + Value + Value + + + Datetime created + + + + Datetime modified + + + + Datetime accessed + + + + Unique ID + + + + Plugin data + + + + Remove selected plugin data + + + + + Entry + + %1 - Clone + %1 - Clone + + + + EntryAttachmentsModel + + Name + Name + + + Size + Size + + + + EntryAttachmentsWidget + + Form + Form + + + Add + Add + + + Remove + Remove + + + Open + Open + + + Save + Save + + + Select files + Select files + + + Are you sure you want to remove %n attachment(s)? + Are you sure you want to remove %n attachment?Are you sure you want to remove %n attachments? + + + Save attachments + Save attachments + + + Unable to create directory: +%1 + Unable to create directory: +%1 + + + Are you sure you want to overwrite the existing file "%1" with the attachment? + Are you sure you want to overwrite the existing file "%1" with the attachment? + + + Confirm overwrite + Confirm overwrite + + + Unable to save attachments: +%1 + Unable to save attachments: +%1 + + + Unable to open attachment: +%1 + Unable to open attachment: +%1 + + + Unable to open attachments: +%1 + Unable to open attachments: +%1 + + + Confirm remove + Confirm remove + + + Unable to open file(s): +%1 + Unable to open file: +%1Unable to open files: +%1 + + + Attachments + Attachments + + + Add new attachment + + + + Remove selected attachment + + + + Open selected attachment + + + + Save selected attachment to disk + + + + %1 is a big file (%2 MB). +Your database may get very large and reduce performance. + +Are you sure to add this file? + + + + Confirm Attachment + + + + + EntryAttributesModel + + Name + Name + + + + EntryHistoryModel + + Last modified + Last modified + + + Title + Title + + + Username + Username + + + URL + URL + + + + EntryModel + + Ref: + Reference abbreviation + Ref: + + + Group + Group + + + Title + Title + + + Username + Username + + + URL + URL + + + Never + Never + + + Password + Password + + + Notes + Notes + + + Expires + Expires + + + Created + Created + + + Modified + Modified + + + Accessed + Accessed + + + Attachments + Attachments + + + Size + Size + + + Group name + + + + Entry title + + + + Entry notes + + + + Entry expires at + Entry expires at + + + Creation date + + + + Last modification date + + + + Last access date + + + + Attached files + + + + Entry size + Entry size + + + Has attachments + + + + Has TOTP one-time password + + + + + EntryPreviewWidget + + Close + Close + + + General + General + + + Username + Username + + + Password + Password + + + Expiration + Expiry + + + URL + URL + + + Attributes + Attributes + + + Attachments + Attachments + + + Notes + Notes + + + Autotype + Autotype + + + Window + Window + + + Sequence + Sequence + + + Searching + Searching + + + Search + Search + + + Clear + Clear + + + Never + Never + + + [PROTECTED] + [PROTECTED] + + + <b>%1</b>: %2 + attributes line + <b>%1</b>: %2 + + + Enabled + Enabled + + + Disabled + Disabled + + + Share + Share + + + Display current TOTP value + + + + Advanced + Advanced + + + + EntryURLModel + + Invalid URL + + + + + EntryView + + Customize View + Customise View + + + Hide Usernames + Hide Usernames + + + Hide Passwords + Hide Passwords + + + Fit to window + Fit to window + + + Fit to contents + Fit to contents + + + Reset to defaults + Reset to defaults + + + Has attachments + Entry attachment icon toggle + + + + Has TOTP + Entry TOTP icon toggle + + + + + FdoSecrets::Item + + Entry "%1" from database "%2" was used by %3 + + + + + FdoSecrets::Service + + %n Entry(s) was used by %1 + %1 is the name of an application + + + + Failed to register DBus service at %1.<br/> + + + + + FdoSecrets::SettingsDatabaseModel + + File Name + + + + Group + Group + + + Manage + + + + Unlock to show + + + + None + None + + + + FdoSecrets::SettingsSessionModel + + Application + + + + Manage + + + + + FdoSecretsPlugin + + <b>Fdo Secret Service:</b> %1 + + + + Unknown + Unknown PID + + + + Unknown + Unknown executable path + + + + <i>PID: %1, Executable: %2</i> + <i>PID: 1234, Executable: /path/to/exe</i> + + + + Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. + + + + + Group + + [empty] + group has no children + [empty] + + + + HibpDownloader + + Online password validation failed + + + + + IconDownloaderDialog + + Download Favicons + + + + Cancel + Cancel + + + Having trouble downloading icons? +You can enable the DuckDuckGo website icon service in the security section of the application settings. + + + + Close + Close + + + URL + URL + + + Status + + + + Please wait, processing entry list... + + + + Downloading... + + + + Ok + Ok + + + Already Exists + + + + Download Failed + + + + Downloading favicons (%1/%2)... + + + + + KMessageWidget + + &Close + &Close + + + Close message + Close message + + + + Kdbx3Reader + + missing database headers + missing database headers + + + Header doesn't match hash + Header doesn't match hash + + + Invalid header id size + Invalid header id size + + + Invalid header field length + Invalid header field length + + + Invalid header data length + Invalid header data length + + + Invalid credentials were provided, please try again. +If this reoccurs, then your database file may be corrupt. + + + + Unable to calculate database key + + + + Unable to issue challenge-response: %1 + + + + + Kdbx3Writer + + Unable to issue challenge-response: %1 + + + + Unable to calculate database key + + + + + Kdbx4Reader + + missing database headers + missing database headers + + + Invalid header checksum size + Invalid header checksum size + + + Header SHA256 mismatch + Header SHA256 mismatch + + + Unknown cipher + Unknown cipher + + + Invalid header id size + Invalid header id size + + + Invalid header field length + Invalid header field length + + + Invalid header data length + Invalid header data length + + + Failed to open buffer for KDF parameters in header + Failed to open buffer for KDF parameters in header + + + Unsupported key derivation function (KDF) or invalid parameters + Unsupported key derivation function (KDF) or invalid parameters + + + Legacy header fields found in KDBX4 file. + Legacy header fields found in KDBX4 file. + + + Invalid inner header id size + Invalid inner header id size + + + Invalid inner header field length + Invalid inner header field length + + + Invalid inner header binary size + Invalid inner header binary size + + + Unsupported KeePass variant map version. + Translation: variant map = data structure for storing meta data + Unsupported KeePass variant map version. + + + Invalid variant map entry name length + Translation: variant map = data structure for storing meta data + + + + Invalid variant map entry name data + Translation: variant map = data structure for storing meta data + Invalid variant map entry name data + + + Invalid variant map entry value length + Translation: variant map = data structure for storing meta data + Invalid variant map entry value length + + + Invalid variant map entry value data + Translation comment: variant map = data structure for storing meta data + Invalid variant map entry value data + + + Invalid variant map Bool entry value length + Translation: variant map = data structure for storing meta data + Invalid variant map Bool entry value length + + + Invalid variant map Int32 entry value length + Translation: variant map = data structure for storing meta data + Invalid variant map Int32 entry value length + + + Invalid variant map UInt32 entry value length + Translation: variant map = data structure for storing meta data + Invalid variant map UInt32 entry value length + + + Invalid variant map Int64 entry value length + Translation: variant map = data structure for storing meta data + Invalid variant map Int64 entry value length + + + Invalid variant map UInt64 entry value length + Translation: variant map = data structure for storing meta data + Invalid variant map UInt64 entry value length + + + Invalid variant map entry type + Translation: variant map = data structure for storing meta data + Invalid variant map entry type + + + Invalid variant map field type size + Translation: variant map = data structure for storing meta data + Invalid variant map field type size + + + Invalid credentials were provided, please try again. +If this reoccurs, then your database file may be corrupt. + + + + (HMAC mismatch) + + + + Unable to calculate database key: %1 + + + + + Kdbx4Writer + + Invalid symmetric cipher algorithm. + Invalid symmetric cipher algorithm. + + + Invalid symmetric cipher IV size. + IV = Initialization Vector for symmetric cipher + Invalid symmetric cipher IV size. + + + Failed to serialize KDF parameters variant map + Translation comment: variant map = data structure for storing meta data + Failed to serialise KDF parameters variant map + + + Unable to calculate database key: %1 + + + + + KdbxReader + + Unsupported cipher + Unsupported cipher + + + Invalid compression flags length + Invalid compression flags length + + + Unsupported compression algorithm + Unsupported compression algorithm + + + Invalid master seed size + Invalid master seed size + + + Invalid transform seed size + Invalid transform seed size + + + Invalid transform rounds size + Invalid transform rounds size + + + Invalid start bytes size + Invalid start bytes size + + + Invalid random stream id size + Invalid random stream id size + + + Invalid inner random stream cipher + Invalid inner random stream cipher + + + Not a KeePass database. + Not a KeePass database. + + + The selected file is an old KeePass 1 database (.kdb). + +You can import it by clicking on Database > 'Import KeePass 1 database...'. +This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. + The selected file is an old KeePass 1 database (.kdb). + +You can import it by clicking on Database > 'Import KeePass 1 database...'. +This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. + + + Unsupported KeePass 2 database version. + Unsupported KeePass 2 database version. + + + Invalid cipher uuid length: %1 (length=%2) + Invalid cipher uuid length: %1 (length=%2) + + + Unable to parse UUID: %1 + Unable to parse UUID: %1 + + + Failed to read database file. + Failed to read database file. + + + + KdbxXmlReader + + XML parsing failure: %1 + XML parsing failure: %1 + + + No root group + No root group + + + Missing icon uuid or data + Missing icon uuid or data + + + Missing custom data key or value + Missing custom data key or value + + + Multiple group elements + Multiple group elements + + + Null group uuid + Null group uuid + + + Invalid group icon number + Invalid group icon number + + + Invalid EnableAutoType value + Invalid EnableAutoType value + + + Invalid EnableSearching value + + + + No group uuid found + + + + Null DeleteObject uuid + + + + Missing DeletedObject uuid or time + + + + Null entry uuid + + + + Invalid entry icon number + + + + History element in history entry + + + + No entry uuid found + + + + History element with different uuid + + + + Duplicate custom attribute found + Duplicate custom attribute found + + + Entry string key or value missing + + + + Entry binary key or value missing + + + + Auto-type association window or sequence missing + + + + Invalid bool value + + + + Invalid date time value + + + + Invalid color value + Invalid colour value + + + Invalid color rgb part + Invalid colour rgb part + + + Invalid number value + + + + Invalid uuid value + + + + Unable to decompress binary + Translator meant is a binary data inside an entry + + + + XML error: +%1 +Line %2, column %3 + + + + + KeeAgentSettings + + Invalid KeeAgent settings file structure. + + + + Private key is an attachment but no attachments provided. + + + + Private key is empty + + + + File too large to be a private key + File too large to be a private key + + + Failed to open private key + Failed to open private key + + + + KeePass1OpenWidget + + Unable to open the database. + Unable to open the database. + + + Import KeePass1 Database + + + + + KeePass1Reader + + Unable to read keyfile. + + + + Not a KeePass database. + Not a KeePass database. + + + Unsupported encryption algorithm. + Unsupported encryption algorithm. + + + Unsupported KeePass database version. + + + + Unable to read encryption IV + IV = Initialization Vector for symmetric cipher + + + + Invalid number of groups + + + + Invalid number of entries + + + + Invalid content hash size + Invalid content hash size + + + Invalid transform seed size + Invalid transform seed size + + + Invalid number of transform rounds + + + + Unable to construct group tree + Unable to construct group tree + + + Root + Root + + + Key transformation failed + Key transformation failed + + + Invalid group field type number + + + + Invalid group field size + Invalid group field size + + + Read group field data doesn't match size + + + + Incorrect group id field size + + + + Incorrect group creation time field size + + + + Incorrect group modification time field size + + + + Incorrect group access time field size + + + + Incorrect group expiry time field size + Incorrect group expiry time field size + + + Incorrect group icon field size + + + + Incorrect group level field size + + + + Invalid group field type + + + + Missing group id or level + + + + Missing entry field type number + + + + Invalid entry field size + + + + Read entry field data doesn't match size + + + + Invalid entry uuid field size + + + + Invalid entry group id field size + + + + Invalid entry icon field size + + + + Invalid entry creation time field size + + + + Invalid entry modification time field size + + + + Invalid entry expiry time field size + Invalid entry expiry time field size + + + Invalid entry field type + + + + unable to seek to content position + + + + Invalid credentials were provided, please try again. +If this reoccurs, then your database file may be corrupt. + + + + Unable to calculate database key + + + + + KeeShare + + Invalid sharing reference + + + + Inactive share %1 + + + + Imported from %1 + + + + Exported to %1 + + + + Synchronized with %1 + Synchronised with %1 + + + Import is disabled in settings + + + + Export is disabled in settings + + + + Inactive share + + + + Imported from + + + + Exported to + + + + Synchronized with + Synchronised with + + + + KeyComponentWidget + + Key Component + + + + Key Component Description + + + + Cancel + Cancel + + + Key Component set, click to change or remove + + + + Add %1 + Add a key component + + + + Change %1 + Change a key component + + + + Remove %1 + Remove a key component + + + + %1 set, click to change or remove + Change or remove a key component + + + + + KeyFileEditWidget + + Generate + Generate + + + Key File + + + + <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> + + + + Legacy key file format + Legacy key file format + + + Error loading the key file '%1' +Message: %2 + + + + Key files + Key files + + + All files + All files + + + Create Key File... + + + + Error creating key file + + + + Unable to create key file: %1 + + + + Select a key file + Select a key file + + + Key file selection + + + + Browse for key file + + + + Browse... + Browse... + + + Generate a new key file + + + + Note: Do not use a file that may change as that will prevent you from unlocking your database! + + + + Invalid Key File + + + + You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. + + + + Suspicious Key File + + + + The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. +Are you sure you want to continue with this file? + + + + You are using a legacy key file format which may become +unsupported in the future. + +Generate a new key file in the database security settings. + + + + + MainWindow + + &Database + &Database + + + &Help + &Help + + + &Groups + &Groups + + + &Tools + &Tools + + + &Quit + &Quit + + + &About + &About + + + Database settings + Database settings + + + Copy username to clipboard + Copy username to clipboard + + + Copy password to clipboard + Copy password to clipboard + + + &Settings + &Settings + + + &Title + &Title + + + Copy title to clipboard + Copy title to clipboard + + + &URL + &URL + + + Copy URL to clipboard + Copy URL to clipboard + + + &Notes + &Notes + + + Copy notes to clipboard + Copy notes to clipboard + + + Copy &TOTP + Copy &TOTP + + + E&mpty recycle bin + E&mpty recycle bin + + + Clear history + Clear history + + + Access error for config file %1 + Access error for config file %1 + + + Settings + Settings + + + Toggle window + Toggle window + + + Quit KeePassXC + Quit KeePassXC + + + Please touch the button on your YubiKey! + Please touch the button on your YubiKey! + + + WARNING: You are using an unstable build of KeePassXC! +There is a high risk of corruption, maintain a backup of your databases. +This version is not meant for production use. + + + + &Donate + + + + WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! +We recommend you use the AppImage available on our downloads page. + + + + &Import + + + + Create a new database + + + + Merge from another KDBX database + + + + Add a new entry + + + + View or edit entry + + + + Add a new group + + + + Perform &Auto-Type + + + + Open &URL + + + + Import a KeePass 1 database + + + + Import a CSV file + + + + NOTE: You are using a pre-release version of KeePassXC! +Expect some bugs and minor issues, this version is not meant for production use. + + + + Check for updates on startup? + + + + Would you like KeePassXC to check for updates on startup? + + + + You can always check for updates manually from the application menu. + + + + &Export + + + + Sort &A-Z + + + + Sort &Z-A + + + + &Password Generator + + + + Import a 1Password Vault + + + + &Getting Started + + + + &User Guide + + + + &Keyboard Shortcuts + + + + &Recent Databases + + + + &Entries + + + + Copy Att&ribute + + + + TOTP + TOTP + + + View + + + + Theme + + + + &Check for Updates + + + + &Open Database… + + + + &Save Database + + + + &Close Database + + + + &New Database… + + + + &Merge From Database… + + + + &New Entry… + + + + &Edit Entry… + + + + &Delete Entry… + + + + &New Group… + + + + &Edit Group… + + + + &Delete Group… + + + + Download All &Favicons… + + + + Sa&ve Database As… + + + + Database &Security… + + + + Database &Reports... + + + + Statistics, health check, etc. + + + + &Database Settings… + + + + &Clone Entry… + + + + Move u&p + + + + Move entry one step up + + + + Move do&wn + + + + Move entry one step down + + + + Copy &Username + + + + Copy &Password + + + + Download &Favicon + + + + &Lock Databases + + + + &CSV File… + + + + &HTML File… + + + + KeePass 1 Database… + + + + 1Password Vault… + + + + CSV File… + + + + Show TOTP + Show TOTP + + + Show QR Code + + + + Set up TOTP… + + + + Report a &Bug + + + + Open Getting Started Guide + + + + &Online Help + + + + Go to online documentation + + + + Open User Guide + + + + Save Database Backup... + + + + Add key to SSH Agent + + + + Remove key from SSH Agent + + + + Compact Mode + + + + Automatic + + + + Light + + + + Dark + + + + Classic (Platform-native) + + + + Show Toolbar + + + + Show Preview Panel + + + + Don't show again for this version + + + + Restart Application? + + + + You must restart the application to apply this setting. Would you like to restart now? + + + + Perform Auto-Type Sequence + + + + {USERNAME} + + + + {USERNAME}{ENTER} + + + + {PASSWORD} + + + + {PASSWORD}{ENTER} + + + + + ManageDatabase + + Database settings + Database settings + + + Edit database settings + + + + Unlock database + Unlock database + + + Unlock database to show more information + + + + Lock database + Lock database + + + + ManageSession + + Disconnect + + + + Disconnect this application + + + + + Merger + + Creating missing %1 [%2] + + + + Relocating %1 [%2] + + + + Overwriting %1 [%2] + + + + older entry merged from database "%1" + + + + Adding backup for older target %1 [%2] + + + + Adding backup for older source %1 [%2] + + + + Reapplying older target entry on top of newer source %1 [%2] + + + + Reapplying older source entry on top of newer target %1 [%2] + + + + Synchronizing from newer source %1 [%2] + + + + Synchronizing from older source %1 [%2] + + + + Deleting child %1 [%2] + + + + Deleting orphan %1 [%2] + + + + Changed deleted objects + + + + Adding missing icon %1 + + + + Removed custom data %1 [%2] + + + + Adding custom data %1 [%2] + + + + + NewDatabaseWizard + + Create a new KeePassXC database... + + + + Root + Root group + Root + + + + NewDatabaseWizardPage + + WizardPage + + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + + + + Advanced Settings + Advanced Settings + + + Simple Settings + + + + Encryption Settings + Encryption Settings + + + + NewDatabaseWizardPageDatabaseKey + + Database Credentials + + + + A set of credentials known only to you that protects your database. + + + + + NewDatabaseWizardPageEncryption + + Encryption Settings + Encryption Settings + + + Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. + + + + + NewDatabaseWizardPageMetaData + + General Database Information + + + + Please fill in the display name and an optional description for your new database: + + + + + NixUtils + + Password Manager + + + + + OpData01 + + Invalid OpData01, does not contain header + + + + Unable to read all IV bytes, wanted 16 but got %1 + + + + Unable to init cipher for opdata01: %1 + + + + Unable to read all HMAC signature bytes + + + + Malformed OpData01 due to a failed HMAC + + + + Unable to process clearText in place + + + + Expected %1 bytes of clear-text, found %2 + + + + + OpVaultOpenWidget + + Read Database did not produce an instance +%1 + + + + + OpVaultReader + + Directory .opvault must exist + + + + Directory .opvault must be readable + + + + Directory .opvault/default must exist + + + + Directory .opvault/default must be readable + + + + Unable to decode masterKey: %1 + + + + Unable to derive master key: %1 + + + + + OpenSSHKey + + Invalid key file, expecting an OpenSSH key + + + + PEM boundary mismatch + + + + Base64 decoding failed + + + + Key file way too small. + + + + Key file magic header id invalid + + + + Found zero keys + + + + Failed to read public key. + Failed to read public key. + + + Corrupted key file, reading private key failed + + + + No private key payload to decrypt + + + + Trying to run KDF without cipher + + + + Passphrase is required to decrypt this key + Passphrase is required to decrypt this key + + + Key derivation failed, key file corrupted? + + + + Decryption failed, wrong passphrase? + + + + Unexpected EOF while reading public key + Unexpected EOF while reading public key + + + Unexpected EOF while reading private key + Unexpected EOF while reading private key + + + Can't write public key as it is empty + + + + Unexpected EOF when writing public key + Unexpected EOF when writing public key + + + Can't write private key as it is empty + + + + Unexpected EOF when writing private key + Unexpected EOF when writing private key + + + Unsupported key type: %1 + Unsupported key type: %1 + + + Unknown cipher: %1 + Unknown cipher: %1 + + + Cipher IV is too short for MD5 kdf + + + + Unknown KDF: %1 + + + + Unknown key type: %1 + Unknown key type: %1 + + + + PasswordEdit + + Passwords do not match + + + + Passwords match so far + + + + Toggle Password (%1) + + + + Generate Password (%1) + + + + Warning: Caps Lock enabled! + + + + + PasswordEditWidget + + Enter password: + Enter password: + + + Confirm password: + + + + Password + Password + + + <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> + + + + Passwords do not match. + + + + Password field + + + + Repeat password field + + + + + PasswordGeneratorWidget + + %p% + + + + strength + Password strength + + + + entropy + + + + Password + Password + + + Character Types + Character Types + + + Numbers + + + + Extended ASCII + Extended ASCII + + + Exclude look-alike characters + Exclude look-alike characters + + + Pick characters from every group + Pick characters from every group + + + &Length: + + + + Passphrase + Passphrase + + + Wordlist: + + + + Word Separator: + + + + Close + Close + + + Entropy: %1 bit + + + + Password Quality: %1 + + + + Poor + Password quality + + + + Weak + Password quality + + + + Good + Password quality + + + + Excellent + Password quality + + + + Switch to advanced mode + + + + Advanced + Advanced + + + Braces + + + + Punctuation + + + + Quotes + + + + Logograms + + + + Character set to exclude from generated password + + + + Do not include: + + + + Add non-hex letters to "do not include" list + + + + Hex + + + + Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" + + + + Generated password + + + + Upper-case letters + + + + Lower-case letters + + + + Special characters + + + + Math Symbols + + + + Dashes and Slashes + + + + Excluded characters + + + + Hex Passwords + + + + Password length + + + + Word Case: + + + + Regenerate password + + + + Copy password + + + + lower case + + + + UPPER CASE + + + + Title Case + + + + Generate Password + + + + Also choose from: + + + + Additional characters to use for the generated password + + + + Additional characters + + + + Word Count: + + + + Esc + + + + Apply Password + + + + Ctrl+S + + + + Clear + Clear + + + Regenerate password (%1) + + + + Special Characters + + + + + QApplication + + KeeShare + + + + Statistics + + + + Very weak password + + + + Password entropy is %1 bits + + + + Weak password + + + + Used in %1/%2 + + + + Password is used %1 times + + + + Password has expired + + + + Password expiry was %1 + Password expiry was %1 + + + Password is about to expire + Password is about to expire + + + Password expires in %1 days + Password expires in %1 days + + + Password will expire soon + Password will expire soon + + + Password expires on %1 + Password expires on %1 + + + Health Check + + + + HIBP + + + + + QMessageBox + + Overwrite + + + + Delete + Delete + + + Move + + + + Empty + + + + Remove + Remove + + + Skip + + + + Disable + Disable + + + Merge + + + + Continue + + + + + QObject + + Database not opened + Database not opened + + + Database hash not available + Database hash not available + + + Client public key not received + Client public key not received + + + Cannot decrypt message + Cannot decrypt message + + + Action cancelled or denied + Action cancelled or denied + + + KeePassXC association failed, try again + + + + Encryption key is not recognized + Encryption key is not recognised + + + Incorrect action + + + + Empty message received + Empty message received + + + No URL provided + No URL provided + + + No logins found + No logins found + + + Unknown error + Unknown error + + + Add a new entry to a database. + Add a new entry to a database. + + + Path of the database. + Path of the database. + + + Key file of the database. + Key file of the database. + + + path + + + + Username for the entry. + Username for the entry. + + + username + + + + URL for the entry. + URL for the entry. + + + URL + URL + + + Prompt for the entry's password. + Prompt for the entry's password. + + + Generate a password for the entry. + Generate a password for the entry. + + + length + + + + Path of the entry to add. + Path of the entry to add. + + + Path of the entry to clip. + clip = copy to clipboard + + + + Timeout in seconds before clearing the clipboard. + Timeout in seconds before clearing the clipboard. + + + Edit an entry. + Edit an entry. + + + Title for the entry. + Title for the entry. + + + title + + + + Path of the entry to edit. + Path of the entry to edit. + + + Estimate the entropy of a password. + Estimate the entropy of a password. + + + Password for which to estimate the entropy. + Password for which to estimate the entropy. + + + Perform advanced analysis on the password. + Perform advanced analysis on the password. + + + WARNING: You are using a legacy key file format which may become +unsupported in the future. + +Please consider generating a new key file. + + + + + +Available commands: + + + + + Name of the command to execute. + Name of the command to execute. + + + List database entries. + List database entries. + + + Path of the group to list. Default is / + + + + Find entries quickly. + Find entries quickly. + + + Search term. + Search term. + + + Merge two databases. + Merge two databases. + + + Path of the database to merge from. + Path of the database to merge from. + + + Use the same credentials for both database files. + Use the same credentials for both database files. + + + Key file of the database to merge from. + Key file of the database to merge from. + + + Show an entry's information. + Show an entry's information. + + + Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. + Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. + + + attribute + + + + Name of the entry to show. + Name of the entry to show. + + + NULL device + + + + error reading from device + + + + malformed string + + + + missing closing quote + + + + Group + Group + + + Title + Title + + + Username + Username + + + Password + Password + + + Notes + Notes + + + Last Modified + + + + Created + Created + + + Browser Integration + Browser Integration + + + SSH Agent + SSH Agent + + + Generate a new random diceware passphrase. + Generate a new random diceware passphrase. + + + Word count for the diceware passphrase. + Word count for the diceware passphrase. + + + Wordlist for the diceware generator. +[Default: EFF English] + + + + Generate a new random password. + Generate a new random password. + + + Could not create entry with path %1. + + + + Enter password for new entry: + + + + Writing the database failed %1. + + + + Successfully added entry %1. + + + + Invalid timeout value %1. + + + + Entry %1 not found. + + + + Entry with path %1 has no TOTP set up. + + + + Clearing the clipboard in %1 second(s)... + + + + Clipboard cleared! + + + + Silence password prompt and other secondary outputs. + + + + count + CLI parameter + + + + Could not find entry with path %1. + + + + Not changing any field for entry %1. + + + + Enter new password for entry: + + + + Writing the database failed: %1 + + + + Successfully edited entry %1. + + + + Length %1 + + + + Entropy %1 + + + + Log10 %1 + + + + Multi-word extra bits %1 + + + + Type: Bruteforce + + + + Type: Dictionary + + + + Type: Dict+Leet + + + + Type: User Words + + + + Type: User+Leet + + + + Type: Repeated + + + + Type: Sequence + + + + Type: Spatial + + + + Type: Date + + + + Type: Bruteforce(Rep) + + + + Type: Dictionary(Rep) + + + + Type: Dict+Leet(Rep) + + + + Type: User Words(Rep) + + + + Type: User+Leet(Rep) + + + + Type: Repeated(Rep) + + + + Type: Sequence(Rep) + + + + Type: Spatial(Rep) + + + + Type: Date(Rep) + + + + Type: Unknown%1 + + + + Entropy %1 (%2) + + + + *** Password length (%1) != sum of length of parts (%2) *** + + + + Failed to load key file %1: %2 + + + + Length of the generated password + + + + Use lowercase characters + + + + Use uppercase characters + + + + Use special characters + + + + Use extended ASCII + + + + Exclude character set + + + + chars + + + + Exclude similar looking characters + + + + Include characters from every selected group + + + + Recursively list the elements of the group. + + + + Cannot find group %1. + + + + Error reading merge file: +%1 + + + + Unable to save database to file : %1 + + + + Unable to save database to file: %1 + + + + Successfully recycled entry %1. + + + + Successfully deleted entry %1. + + + + Show the entry's current TOTP. + + + + ERROR: unknown attribute %1. + + + + No program defined for clipboard manipulation + + + + file empty + + + + %1: (row, col) %2,%3 + + + + Argon2 (KDBX 4 – recommended) + + + + AES-KDF (KDBX 4) + + + + AES-KDF (KDBX 3.1) + + + + Invalid Settings + TOTP + + + + Invalid Key + TOTP + + + + Message encryption failed. + + + + No groups found + + + + Create a new database. + + + + File %1 already exists. + + + + Loading the key file failed + + + + No key is set. Aborting database creation. + + + + Failed to save the database: %1. + + + + Successfully created new database. + + + + Creating KeyFile %1 failed: %2 + + + + Loading KeyFile %1 failed: %2 + + + + Path of the entry to remove. + Path of the entry to remove. + + + Existing single-instance lock file is invalid. Launching new instance. + Existing single-instance lock file is invalid. Launching new instance. + + + The lock file could not be created. Single-instance mode disabled. + The lock file could not be created. Single-instance mode disabled. + + + KeePassXC - cross-platform password manager + + + + filenames of the password databases to open (*.kdbx) + + + + path to a custom config file + + + + key file of the database + + + + read password of the database from stdin + + + + Parent window handle + + + + Another instance of KeePassXC is already running. + Another instance of KeePassXC is already running. + + + Fatal error while testing the cryptographic functions. + Fatal error while testing the cryptographic functions. + + + KeePassXC - Error + + + + Database password: + + + + Cannot create new group + + + + Deactivate password key for the database. + + + + Displays debugging information. + + + + Deactivate password key for the database to merge from. + + + + Version %1 + Version %1 + + + Build Type: %1 + Build Type: %1 + + + Revision: %1 + Revision: %1 + + + Distribution: %1 + Distribution: %1 + + + Debugging mode is disabled. + + + + Debugging mode is enabled. + + + + Operating system: %1 +CPU architecture: %2 +Kernel: %3 %4 + Operating system: %1 +CPU architecture: %2 +Kernel: %3 %4 + + + Auto-Type + Auto-Type + + + KeeShare (signed and unsigned sharing) + KeeShare (signed and unsigned sharing) + + + KeeShare (only signed sharing) + KeeShare (only signed sharing) + + + KeeShare (only unsigned sharing) + KeeShare (only unsigned sharing) + + + YubiKey + YubiKey + + + TouchID + TouchID + + + None + None + + + Enabled extensions: + Enabled extensions: + + + Cryptographic libraries: + + + + Cannot generate a password and prompt at the same time! + + + + Adds a new group to a database. + + + + Path of the group to add. + + + + Group %1 already exists! + + + + Group %1 not found. + + + + Successfully added group %1. + + + + Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. + + + + FILENAME + + + + Analyze passwords for weaknesses and problems. + + + + Failed to open HIBP file %1: %2 + + + + Evaluating database entries against HIBP file, this will take a while... + + + + Close the currently opened database. + + + + Display this help. + + + + slot + + + + Invalid word count %1 + + + + The word list is too small (< 1000 items) + + + + Exit interactive mode. + + + + Exports the content of a database to standard output in the specified format. + + + + Unable to export database to XML: %1 + + + + Unsupported format %1 + + + + Use numbers + + + + Invalid password length %1 + + + + Display command help. + + + + Available commands: + + + + Import the contents of an XML database. + + + + Path of the XML database export. + + + + Path of the new database. + + + + Successfully imported database. + + + + Unknown command %1 + + + + Flattens the output to single lines. + + + + Only print the changes detected by the merge operation. + + + + Yubikey slot for the second database. + + + + Successfully merged %1 into %2. + + + + Database was not modified by merge operation. + Database was not modified by merge operation. + + + Moves an entry to a new group. + + + + Path of the entry to move. + + + + Path of the destination group. + + + + Could not find group with path %1. + + + + Entry is already in group %1. + + + + Successfully moved entry %1 to group %2. + + + + Open a database. + + + + Path of the group to remove. + + + + Cannot remove root group from database. + + + + Successfully recycled group %1. + + + + Successfully deleted group %1. + + + + Failed to open database file %1: not found + + + + Failed to open database file %1: not a plain file + + + + Failed to open database file %1: not readable + + + + Enter password to unlock %1: + + + + Invalid YubiKey slot %1 + + + + Enter password to encrypt database (optional): + + + + HIBP file, line %1: parse error + + + + Secret Service Integration + + + + User name + + + + Password for '%1' has been leaked %2 time(s)! + + + + Invalid password generator after applying all options + + + + Show the protected attributes in clear text. + + + + Browser Plugin Failure + + + + Could not save the native messaging script file for %1. + + + + Copy the given attribute to the clipboard. Defaults to "password" if not specified. + + + + Copy the current TOTP to the clipboard (equivalent to "-a totp"). + + + + Copy an entry's attribute to the clipboard. + + + + ERROR: Please specify one of --attribute or --totp, not both. + + + + ERROR: attribute %1 is ambiguous, it matches %2. + + + + Attribute "%1" not found. + + + + Entry's "%1" attribute copied to the clipboard! + + + + Yubikey slot and optional serial used to access the database (e.g., 1:7370001). + + + + slot[:serial] + + + + Target decryption time in MS for the database. + + + + time + + + + Set the key file for the database. + + + + Set a password for the database. + + + + Invalid decryption time %1. + + + + Target decryption time must be between %1 and %2. + + + + Failed to set database password. + + + + Benchmarking key derivation function for %1ms delay. + + + + Setting %1 rounds for key derivation function. + + + + error while setting database key derivation settings. + + + + Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. + + + + Unable to import XML database: %1 + + + + Show a database's information. + + + + UUID: + + + + Name: + + + + Description: + + + + Cipher: + + + + KDF: + + + + Recycle bin is enabled. + + + + Recycle bin is not enabled. + + + + Invalid command %1. + + + + Invalid YubiKey serial %1 + + + + Please touch the button on your YubiKey to continue… + + + + Do you want to create a database with an empty password? [y/N]: + + + + Repeat password: + + + + Error: Passwords do not match. + + + + All clipping programs failed. Tried %1 + + + + + AES (%1 rounds) + + + + Argon2 (%1 rounds, %2 KB) + + + + AES 256-bit + + + + Twofish 256-bit + + + + ChaCha20 256-bit + + + + Benchmark %1 delay + + + + %1 ms + milliseconds + + + + %1 s + seconds + + + + + QtIOCompressor + + Internal zlib error when compressing: + + + + Error writing to underlying device: + + + + Error opening underlying device: + + + + Error reading data from underlying device: + + + + Internal zlib error when decompressing: + + + + + QtIOCompressor::open + + The gzip format not supported in this version of zlib. + + + + Internal zlib error: + + + + + ReportsWidgetHealthcheck + + Also show entries that have been excluded from reports + + + + Hover over reason to show additional details. Double-click entries to edit. + + + + Bad + Password quality + + + + Bad — password must be changed + + + + Poor + Password quality + + + + Poor — password should be changed + + + + Weak + Password quality + + + + Weak — consider changing the password + + + + (Excluded) + + + + This entry is being excluded from reports + + + + Please wait, health data is being calculated... + + + + Congratulations, everything is healthy! + + + + Title + Title + + + Path + Path + + + Score + + + + Reason + + + + Edit Entry... + + + + Exclude from reports + + + + + ReportsWidgetHibp + + CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. + + + + Perform Online Analysis + + + + Also show entries that have been excluded from reports + + + + This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. + + + + Congratulations, no exposed passwords! + + + + Title + Title + + + Path + Path + + + Password exposed… + + + + (Excluded) + + + + This entry is being excluded from reports + + + + once + + + + up to 10 times + + + + up to 100 times + + + + up to 1000 times + + + + up to 10,000 times + + + + up to 100,000 times + + + + up to a million times + + + + millions of times + + + + Edit Entry... + + + + Exclude from reports + + + + + ReportsWidgetStatistics + + Hover over lines with error icons for further information. + + + + Name + Name + + + Value + Value + + + Please wait, database statistics are being calculated... + + + + Database name + + + + Description + + + + Location + + + + Last saved + + + + Unsaved changes + + + + yes + + + + no + + + + The database was modified, but the changes have not yet been saved to disk. + + + + Number of groups + + + + Number of entries + + + + Number of expired entries + + + + The database contains entries that have expired. + + + + Unique passwords + + + + Non-unique passwords + + + + More than 10% of passwords are reused. Use unique passwords when possible. + + + + Maximum password reuse + + + + Some passwords are used more than three times. Use unique passwords when possible. + + + + Number of short passwords + + + + Recommended minimum password length is at least 8 characters. + + + + Number of weak passwords + + + + Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. + Recommend using long, randomised passwords with a rating of 'good' or 'excellent'. + + + Entries excluded from reports + + + + Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. + + + + Average password length + + + + %1 characters + + + + Average password length is less than ten characters. Longer passwords provide more security. + + + + + SSHAgent + + Agent connection failed. + + + + Agent protocol error. + + + + No agent running, cannot add identity. + + + + No agent running, cannot remove identity. + + + + Agent refused this identity. Possible reasons include: + + + + The key has already been added. + + + + Restricted lifetime is not supported by the agent (check options). + + + + A confirmation request is not supported by the agent (check options). + + + + Key identity ownership conflict. Refusing to add. + + + + No agent running, cannot list identities. + + + + + SearchHelpWidget + + Search Help + + + + Search terms are as follows: [modifiers][field:]["]term["] + + + + Every search term must match (ie, logical AND) + + + + Modifiers + + + + exclude term from results + + + + match term exactly + + + + use regex in term + + + + Fields + + + + Term Wildcards + + + + match anything + + + + match one + + + + logical OR + + + + Examples + + + + + SearchWidget + + Search + Search + + + Clear + Clear + + + Limit search to selected group + Limit search to selected group + + + Search Help + + + + Search (%1)... + Search placeholder text, %1 is the keyboard shortcut + + + + Case sensitive + + + + + SettingsWidgetFdoSecrets + + Options + + + + Enable KeepassXC Freedesktop.org Secret Service integration + + + + General + General + + + Show notification when credentials are requested + + + + <html><head/><body><p>If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.</p><p>You will still be prompted if any entries are referenced by others.</p></body></html> + + + + Exposed database groups: + + + + Authorization + Authorisation + + + These applications are currently connected: + + + + Don't confirm when entries are deleted by clients + + + + <b>Error:</b> Failed to connect to DBus. Please check your DBus setup. + + + + <b>Warning:</b> + + + + Save current changes to activate the plugin and enable editing of this section. + + + + + SettingsWidgetKeeShare + + Active + + + + Allow export + + + + Allow import + + + + Own certificate + + + + Fingerprint: + + + + Certificate: + + + + Signer + + + + Key: + + + + Generate + Generate + + + Import + Import + + + Export + + + + Imported certificates + + + + Trust + + + + Ask + + + + Untrust + + + + Remove + Remove + + + Path + Path + + + Status + + + + Fingerprint + Fingerprint + + + Certificate + + + + Trusted + + + + Untrusted + + + + Unknown + + + + key.share + Filetype for KeeShare key + + + + KeeShare key file + + + + All files + All files + + + Select path + + + + Exporting changed certificate + + + + The exported certificate is not the same as the one in use. Do you want to export the current certificate? + + + + Signer: + + + + Allow KeeShare imports + + + + Allow KeeShare exports + + + + Only show warnings and errors + + + + Key + Key + + + Signer name field + + + + Generate new certificate + + + + Import existing certificate + + + + Export own certificate + + + + Known shares + + + + Trust selected certificate + + + + Ask whether to trust the selected certificate every time + + + + Untrust selected certificate + + + + Remove selected certificate + + + + + ShareExport + + Overwriting signed share container is not supported - export prevented + + + + Could not write export container (%1) + + + + Could not embed signature: Could not open file to write (%1) + + + + Could not embed signature: Could not write file (%1) + + + + Could not embed database: Could not open file to write (%1) + + + + Could not embed database: Could not write file (%1) + + + + Overwriting unsigned share container is not supported - export prevented + + + + Could not write export container + + + + Unexpected export error occurred + + + + + ShareImport + + Import from container without signature + + + + We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? + + + + Import from container with certificate + + + + Do you want to trust %1 with the fingerprint of %2 from %3? + + + + Not this time + + + + Never + Never + + + Always + + + + Just this time + + + + Signed share container are not supported - import prevented + + + + File is not readable + + + + Invalid sharing container + + + + Untrusted import prevented + + + + Successful signed import + + + + Unsigned share container are not supported - import prevented + + + + Successful unsigned import + + + + File does not exist + + + + Unknown share container type + + + + + ShareObserver + + Import from %1 failed (%2) + + + + Import from %1 successful (%2) + + + + Imported from %1 + + + + Export to %1 failed (%2) + + + + Export to %1 successful (%2) + + + + Export to %1 + + + + Multiple import source path to %1 in %2 + + + + Conflicting export target path %1 in %2 + + + + + TotpDialog + + Timed Password + + + + 000000 + + + + Copy + Copy + + + Expires in <b>%n</b> second(s) + Expires in <b>%n</b> second(s)Expires in <b>%n</b> second(s) + + + + TotpExportSettingsDialog + + Copy + Copy + + + NOTE: These TOTP settings are custom and may not work with other authenticators. + TOTP QR code dialog warning + + + + There was an error creating the QR code. + + + + Closing in %1 seconds. + + + + + TotpSetupDialog + + Setup TOTP + + + + Default RFC 6238 token settings + Default RFC 6238 token settings + + + Steam token settings + Steam token settings + + + Use custom settings + Use custom settings + + + Custom Settings + + + + Time step: + + + + sec + Seconds + sec + + + Code size: + + + + Secret Key: + + + + Secret key must be in Base32 format + + + + Secret key field + + + + Algorithm: + + + + Time step field + + + + digits + + + + Invalid TOTP Secret + + + + You have entered an invalid secret key. The key must be in Base32 format. +Example: JBSWY3DPEHPK3PXP + + + + Confirm Remove TOTP Settings + + + + Are you sure you want to delete TOTP settings for this entry? + + + + + URLEdit + + Invalid URL + + + + + UpdateCheckDialog + + Checking for updates + + + + Checking for updates... + + + + Close + Close + + + Update Error! + + + + An error occurred in retrieving update information. + + + + Please try again later. + + + + Software Update + + + + A new version of KeePassXC is available! + + + + KeePassXC %1 is now available — you have %2. + + + + Download it at keepassxc.org + + + + You're up-to-date! + + + + KeePassXC %1 is currently the newest version available + + + + + WelcomeWidget + + Start storing your passwords securely in a KeePassXC database + Start storing your passwords securely in a KeePassXC database + + + Create new database + Create new database + + + Open existing database + Open existing database + + + Import from KeePass 1 + + + + Import from CSV + Import from CSV + + + Recent databases + Recent databases + + + Welcome to KeePassXC %1 + Welcome to KeePassXC %1 + + + Import from 1Password + + + + Open a recent database + + + + + YubiKey + + %1 [%2] Configured Slot - %3 + + + + %1 [%2] Challenge Response - Slot %3 - %4 + + + + Press + + + + Passive + + + + %1 Invalid slot specified - %2 + + + + The YubiKey interface has not been initialized. + The YubiKey interface has not been initialised. + + + Hardware key is currently in use. + + + + Could not find hardware key with serial number %1. Please plug it in to continue. + + + + Hardware key timed out waiting for user interaction. + + + + A USB error ocurred when accessing the hardware key: %1 + + + + Failed to complete a challenge-response, the specific error was: %1 + + + + + YubiKeyEditWidget + + Refresh + Refresh + + + YubiKey Challenge-Response + + + + <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> + + + + Refresh hardware tokens + + + + Hardware key slot selection + + + + Could not find any hardware keys! + + + + Selected hardware key slot does not support challenge-response! + + + + Detecting hardware keys… + + + + No hardware keys detected + + + + \ No newline at end of file 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 @@ Colorful Colorful + + You must restart the application to set the new language. Would you like to restart now? + You must restart the application to set the new language. Would you like to restart now? + ApplicationSettingsWidgetGeneral @@ -166,10 +170,6 @@ Automatically save after every change Automatically save after every change - - Automatically save on exit - Automatically save on exit - Automatically reload the database when modified externally Automatically reload the database when modified externally @@ -304,10 +304,6 @@ Automatically launch KeePassXC at system startup Automatically launch KeePassXC at system startup - - Mark database as modified for non-data changes (e.g., expanding groups) - Mark database as modified for non-data changes (e.g., expanding groups) - Safely save database files (disable if experiencing problems with Dropbox, etc.) Safely save database files (disable if experiencing problems with Dropbox, etc.) @@ -344,6 +340,18 @@ Auto-Type start delay: Auto-Type start delay: + + Automatically save when locking database + Automatically save when locking database + + + Automatically save non-data changes when locking database + Automatically save non-data changes when locking database + + + Tray icon type + Tray icon type + ApplicationSettingsWidgetSecurity @@ -4841,6 +4849,26 @@ Expect some bugs and minor issues, this version is not meant for production use. You must restart the application to apply this setting. Would you like to restart now? You must restart the application to apply this setting. Would you like to restart now? + + Perform Auto-Type Sequence + Perform Auto-Type Sequence + + + {USERNAME} + {USERNAME} + + + {USERNAME}{ENTER} + {USERNAME}{ENTER} + + + {PASSWORD} + {PASSWORD} + + + {PASSWORD}{ENTER} + {PASSWORD}{ENTER} + ManageDatabase @@ -5325,10 +5353,6 @@ Expect some bugs and minor issues, this version is not meant for production use. Password quality Excellent - - ExtendedASCII - ExtendedASCII - Switch to advanced mode Switch to advanced mode @@ -5337,58 +5361,22 @@ Expect some bugs and minor issues, this version is not meant for production use. Advanced Advanced - - A-Z - A-Z - - - a-z - a-z - - - 0-9 - 0-9 - Braces Braces - - {[( - {[( - Punctuation Punctuation - - .,:; - .,:; - Quotes Quotes - - " ' - " ' - - - <*+!?= - <*+!?= - - - \_|-/ - \_|-/ - Logograms Logograms - - #$%&&@^`~ - #$%&&@^`~ - Character set to exclude from generated password Character set to exclude from generated password @@ -5509,6 +5497,10 @@ Expect some bugs and minor issues, this version is not meant for production use. Regenerate password (%1) Regenerate password (%1) + + Special Characters + Special Characters + QApplication 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 @@ Colorful Colorido + + You must restart the application to set the new language. Would you like to restart now? + Debe reiniciar la aplicación para establecer el nuevo lenguage. ¿Desea reiniciar ahora? + ApplicationSettingsWidgetGeneral @@ -166,10 +170,6 @@ Automatically save after every change Guardar automáticamente después de cada cambio - - Automatically save on exit - Guardar automáticamente al salir - Automatically reload the database when modified externally Recargar automáticamente la base de datos cuando sea modificada externamente @@ -304,10 +304,6 @@ Automatically launch KeePassXC at system startup Inicie automáticamente KeePassXC al inicio del sistema - - Mark database as modified for non-data changes (e.g., expanding groups) - Marcar la base de datos como modificada cuando los cambios no afecten a los datos (ej. expandir grupos) - Safely save database files (disable if experiencing problems with Dropbox, etc.) Guardar los archivos de base de datos con seguridad (puede ser incompatible con Dropbox, etcétera) @@ -344,6 +340,18 @@ Auto-Type start delay: Retardo de inicio de autoescritura: + + Automatically save when locking database + Guardar automáticamente al bloquear la base de datos + + + Automatically save non-data changes when locking database + Guardar automáticamente cambios sin datos al bloquear la base de datos + + + Tray icon type + Tipo de icono en la bandeja + ApplicationSettingsWidgetSecurity @@ -4657,7 +4665,7 @@ Espere algunos errores y problemas menores, esta versión no está destinada par &Edit Entry… - &Editar apunte + &Editar apunte... &Delete Entry… @@ -4665,7 +4673,7 @@ Espere algunos errores y problemas menores, esta versión no está destinada par &New Group… - &Nuevo grupo + &Nuevo grupo... &Edit Group… @@ -4789,7 +4797,7 @@ Espere algunos errores y problemas menores, esta versión no está destinada par Save Database Backup... - Guardar copia de seguridad de la base de datos.. + Guardar copia de seguridad de la base de datos... Add key to SSH Agent @@ -4839,6 +4847,26 @@ Espere algunos errores y problemas menores, esta versión no está destinada par You must restart the application to apply this setting. Would you like to restart now? Debe reiniciar la aplicación para aplicar esta configuración. ¿Desea reiniciar ahora? + + Perform Auto-Type Sequence + Realizar secuencia de autoescritura + + + {USERNAME} + {USUARIO} + + + {USERNAME}{ENTER} + {USUARIO}{ENTER} + + + {PASSWORD} + {CONTRASEÑA} + + + {PASSWORD}{ENTER} + {CONTRASEÑA}{ENTER} + ManageDatabase @@ -5323,10 +5351,6 @@ Espere algunos errores y problemas menores, esta versión no está destinada par Password quality Excelente - - ExtendedASCII - ASCII extendido - Switch to advanced mode Cambiar a modo avanzado @@ -5335,58 +5359,22 @@ Espere algunos errores y problemas menores, esta versión no está destinada par Advanced Avanzado - - A-Z - A-Z - - - a-z - a-z - - - 0-9 - 0-9 - Braces Llaves - - {[( - {[( - Punctuation Puntuación - - .,:; - .,:; - Quotes Comillas - - " ' - " ' - - - <*+!?= - <*+!? = - - - \_|-/ - \_|-/ - Logograms Logogramas - - #$%&&@^`~ - #$%&&@^`~ - Character set to exclude from generated password Conjunto de caracteres a excluir de la contraseña generada @@ -5507,6 +5495,10 @@ Espere algunos errores y problemas menores, esta versión no está destinada par Regenerate password (%1) Regenerar contraseña (%1) + + Special Characters + Caracteres especiales + QApplication 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 @@ Colorful värviline + + You must restart the application to set the new language. Would you like to restart now? + Keele vahetamiseks tuleb KeePassXC uuesti käivitada. Kas teha seda kohe? + ApplicationSettingsWidgetGeneral @@ -166,10 +170,6 @@ Automatically save after every change Automaatne salvestamine iga muudatuse järel - - Automatically save on exit - Automaatne salvestamine programmi sulgemisel - Automatically reload the database when modified externally Andmebaas laaditakse automaatselt uuesti, kui seda väljastpoolt (nt teise programmiga) muudetakse @@ -208,7 +208,7 @@ Always ask before performing Auto-Type - Enne automaatsisestuse sooritamist küsitakse alati kinnitust + Enne automaatsisestuse sooritamist küsitakse alati kinnitust ms @@ -304,10 +304,6 @@ Automatically launch KeePassXC at system startup KeePassXC käivitatakse sisselogimisel automaatselt - - Mark database as modified for non-data changes (e.g., expanding groups) - Ka andmeid mittepuudutavaid muudatusi (nt gruppide laiendamist) loetakse andmebaasi muutmiseks - Safely save database files (disable if experiencing problems with Dropbox, etc.) Andmebaasifailid salvestatakse turvaliselt (probleemide korral Dropboxi vms-ga tasub välja lülitada) @@ -344,6 +340,18 @@ Auto-Type start delay: Viivitus automaatsisestuse klahvivajutuste vahel: + + Automatically save when locking database + Automaatne salvestamine andmebaasi lukustamisel + + + Automatically save non-data changes when locking database + Andmeid mittepuudutavate muudatuste automaatne salvestamine andmebaasi lukustamisel + + + Tray icon type + Süsteemisalve ikooni tüüp: + ApplicationSettingsWidgetSecurity @@ -474,11 +482,11 @@ Permission Required - + Loataotlus KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. - + 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. @@ -530,11 +538,11 @@ AutoTypePlatformMac Permission Required - + Loataotlus 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. - + 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. @@ -556,35 +564,35 @@ BrowserAccessControlDialog KeePassXC - Browser Access Request - + Brauseri juurdepääsutaotlus – KeePassXC %1 is requesting access to the following entries: - + %1 küsib juurdepääsu järgmistele kirjetele: Remember access to checked entries - + Märkimisel jäetakse valitud kirjetele juurdepääsu lubamine meelde Remember - + Jäetakse meelde Allow access to entries - + Luba juurdepääs valitud kirjetele Allow Selected - + Luba valituile Deny All - + Keela kõik Disable for this site - + Keela selle saidi jaoks @@ -616,7 +624,7 @@ Vali, millisesse neist tunnused salvestada tuleks. Save and allow access - Salvesta ja luba ligipääs + Salvesta ja luba juurdepääs KeePassXC: Overwrite existing key? @@ -625,7 +633,8 @@ Vali, millisesse neist tunnused salvestada tuleks. A shared encryption key with the name "%1" already exists. Do you want to overwrite it? - + Jagatud krüptimisvõti nimega "%1" on juba olemas. +Kas soovid selle üle kirjutada? KeePassXC: Update Entry @@ -633,7 +642,7 @@ Do you want to overwrite it? Do you want to update the information in %1 - %2? - + Kas soovid uuendada teavet kirjes %1 - %2? Abort @@ -641,32 +650,33 @@ Do you want to overwrite it? Converting attributes to custom data… - + Atribuutide teisendamine kohandatud andmeteks... KeePassXC: Converted KeePassHTTP attributes - + Teisendatud KeePassHTTP atribuudid – KeePassXC Successfully converted attributes from %1 entry(s). Moved %2 keys to custom data. - + %1 kirje atribuudid edukalt teisendatud. +Kohandatud andmetesse teisaldati %2 võtit. Successfully moved %n keys to custom data. - + %n võti edukalt kohandatud andmetesse teisaldatud.%n võtit edukalt kohandatud andmetesse teisaldatud. KeePassXC: No entry with KeePassHTTP attributes found! - + Ühtegi KeePassHTTP atribuutidega kirjet ei leitud – KeePassXC The active database does not contain an entry with KeePassHTTP attributes. - + Aktiivne andmebaas ei sisalda ühtegi kirjet, millel oleks KeePassHTTP atribuute. KeePassXC: Legacy browser integration settings detected - + Tuvastati brauserilõimingu pärandseadistus – KeePassXC KeePassXC: Create a new group @@ -676,13 +686,16 @@ Moved %2 keys to custom data. A request for creating a new group "%1" has been received. Do you want to create this group? - + Saadi taotlus uue grupi "%1" loomiseks. +Kas lubad selle grupi luua? Your KeePassXC-Browser settings need to be moved into the database settings. This is necessary to maintain your current browser connections. Would you like to migrate your existing settings now? - + Sinu KeePassXC-Browseri seadistus tuleb teisaldada andmebaasi seadistusse. +See on vajalik praeguste brauseriühenduste säilitamiseks. +Kas tahad oma olemasoleva seadistuse kohe üle kolida? Don't show this warning again @@ -709,7 +722,7 @@ chrome-laptop. This is required for accessing your databases with KeePassXC-Browser - See on vajalik andmebaasidele KeePassXC-Browseri abil ligipääsemiseks. + See on vajalik andmebaasidele KeePassXC-Browseri abil juurdepääsemiseks. Enable browser integration @@ -1431,32 +1444,33 @@ See võib tõkestada ühendumise brauseripluginaga. KeePassXC: No keys found - + Võtmeid ei leitud – KeePassXC No shared encryption keys found in KeePassXC settings. - + KeePassXC seadetest ei leitud ühtki jagatud krüptimisvõtit. KeePassXC: Removed keys from database - + Võtmed andmebaasist eemaldatud – KeePassXC Successfully removed %n encryption key(s) from KeePassXC settings. - + %n krüptimisvõti edukalt KeePassXC seadetest eemaldatud.%n krüptimisvõtit edukalt KeePassXC seadetest eemaldatud. Forget all site-specific settings on entries - Unusta kirjete kõik saidiomased seaded + Kirjete kõigi saidiomaste seadete kustutamine Do you really want forget all site-specific settings on every entry? Permissions to access entries will be revoked. - + Kas oled kindel, et tahad kõigi kirjete kõik saidiomased seaded eemaldada? +See tühistab ka juurdepääsuload kirjetele. Removing stored permissions… - + Salvestatud juurdepääsulubade eemaldamine... Abort @@ -1464,32 +1478,33 @@ Permissions to access entries will be revoked. KeePassXC: Removed permissions - + Juurdepääsuload eemaldatud – KeePassXC Successfully removed permissions from %n entry(s). - + %n kirje juurdepääsuload edukalt eemaldatud.%n kirje juurdepääsuload edukalt eemaldatud. KeePassXC: No entry with permissions found! - + Juurdepääsulubadega kirjeid ei leitud – KeePassXC The active database does not contain an entry with permissions. - + Aktiivne andmebaas ei sisalda ühtki juurdepääsulubadega kirjet. Move KeePassHTTP attributes to custom data - + KeePassHTTP atribuutide kohandatud andmetesse teisaldamine Do you really want to move all legacy browser integration data to the latest standard? This is necessary to maintain compatibility with the browser plugin. - + Kas oled kindel, et tahad kõik brauserilõimingu pärandandmed uusimale standardile üle viia? +Need võivad olla vajalikud brauseripluginaga ühilduvuse säilitamiseks. Stored browser keys - + Salvestatud brauserivõtmed Remove selected key @@ -1514,7 +1529,8 @@ This is necessary to maintain compatibility with the browser plugin. 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. - + 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. @@ -2773,7 +2789,7 @@ Kas keelata turvaline salvestamine ja proovida seejärel uuesti? Import - Impordi + importimine Export @@ -2786,7 +2802,8 @@ Kas keelata turvaline salvestamine ja proovida seejärel uuesti? Your KeePassXC version does not support sharing this container type. Supported extensions are: %1. - + See KeePassXC versioon ei toeta valitud ümbrikutüübi jagamist. +Toetatud faililaiendid: %1 %1 is already being exported by this database. @@ -2807,19 +2824,19 @@ Supported extensions are: %1. Database export is currently disabled by application settings. - + Andmebaasi eksportimine on rakenduse seadetes keelatud. Database import is currently disabled by application settings. - + Andmebaasi importimine on rakenduse seadetes keelatud. Sharing mode field - + Jagamisrežiimi väli Path to share file field - + Jagatava faili asukoha väli Password field @@ -2827,11 +2844,11 @@ Supported extensions are: %1. Clear fields - + Puhasta väljad Browse for share file - + Vali jagatav fail Browse... @@ -3836,11 +3853,11 @@ Kui probleem püsib, võib andmebaasifail olla rikutud. Invalid master seed size - + sobimatu ülemseemne suurus Invalid transform seed size - + sobimatu teisendusseemne suurus Invalid transform rounds size @@ -3848,7 +3865,7 @@ Kui probleem püsib, võib andmebaasifail olla rikutud. Invalid start bytes size - + sobimatu alustusbaitide suurus Invalid random stream id size @@ -3901,11 +3918,11 @@ Teisendus on ühesuunaline, seega imporditud andmebaasi ei saa vana KeePassX 0.4 Missing icon uuid or data - + Ikooni UUID või andmed on puudu Missing custom data key or value - + kohandatud andmete võti või väärtus puudub Multiple group elements @@ -3917,15 +3934,15 @@ Teisendus on ühesuunaline, seega imporditud andmebaasi ei saa vana KeePassX 0.4 Invalid group icon number - + sobimatu grupi ikooninumber Invalid EnableAutoType value - + sobimatu võtme EnableAutoType väärtus Invalid EnableSearching value - + sobimatu võtme EnableSearching väärtus No group uuid found @@ -3945,7 +3962,7 @@ Teisendus on ühesuunaline, seega imporditud andmebaasi ei saa vana KeePassX 0.4 Invalid entry icon number - + sobimatu kirje ikooninumber History element in history entry @@ -3965,15 +3982,15 @@ Teisendus on ühesuunaline, seega imporditud andmebaasi ei saa vana KeePassX 0.4 Entry string key or value missing - + võtme stringvõti või väärtus puudub Entry binary key or value missing - + võtme binaarvõti või väärtus puudub Auto-type association window or sequence missing - + automaatsisestuse sihtaken või jada puudub Invalid bool value @@ -3989,7 +4006,7 @@ Teisendus on ühesuunaline, seega imporditud andmebaasi ei saa vana KeePassX 0.4 Invalid color rgb part - + sobimatu värvi RGB-osa Invalid number value @@ -4017,7 +4034,7 @@ Rida %2, veerg %3 KeeAgentSettings Invalid KeeAgent settings file structure. - + Sobimatu KeeAgenti seadistusfaili struktuur. Private key is an attachment but no attachments provided. @@ -4025,15 +4042,15 @@ Rida %2, veerg %3 Private key is empty - + Privaatvõti on tühi. File too large to be a private key - + Fail on liiga suur, et privaatvõti olla. Failed to open private key - + Privaatvõtme avamine ebaõnnestus. @@ -4068,7 +4085,7 @@ Rida %2, veerg %3 Unable to read encryption IV IV = Initialization Vector for symmetric cipher - + krüptimise IV lugemine pole võimalik Invalid number of groups @@ -4080,11 +4097,11 @@ Rida %2, veerg %3 Invalid content hash size - + sobimatu sisuräsi suurus Invalid transform seed size - + sobimatu teisendusseemne suurus Invalid number of transform rounds @@ -4092,7 +4109,7 @@ Rida %2, veerg %3 Unable to construct group tree - + grupipuu konstrueerimine ebaõnnestus Root @@ -4100,99 +4117,99 @@ Rida %2, veerg %3 Key transformation failed - + võtmeteisendus ebaõnnestus Invalid group field type number - + sobimatu grupi väljatüübi number Invalid group field size - + sobimatu grupi väljasuurus Read group field data doesn't match size - + grupi loetud väljaandmed ei kattu väidetava suurusega Incorrect group id field size - + sobimatu grupi ID-välja suurus Incorrect group creation time field size - + sobimatu grupi loomisaja välja suurus Incorrect group modification time field size - + sobimatu grupi muutmisaja välja suurus Incorrect group access time field size - + sobimatu grupi vaatamisaja välja suurus Incorrect group expiry time field size - + sobimatu grupi aegumisaja välja suurus Incorrect group icon field size - + sobimatu grupi ikoonivälja suurus Incorrect group level field size - + sobimatu grupi tasemevälja suurus Invalid group field type - + sobimatu grupi väljatüüp Missing group id or level - + grupi ID või tase puudub Missing entry field type number - + kirje väljatüübi number puudub Invalid entry field size - + sobimatu kirje väljasuurus Read entry field data doesn't match size - + kirje loetud väljaandmed ei kattu väidetava suurusega Invalid entry uuid field size - + sobimatu kirje UUID-välja suurus Invalid entry group id field size - + sobimatu kirje grupi-ID-välja suurus Invalid entry icon field size - + sobimatu kirje ikoonivälja suurus Invalid entry creation time field size - + sobimatu kirje loomisaja välja suurus Invalid entry modification time field size - + sobimatu kirje muutmisaja välja suurus Invalid entry expiry time field size - + sobimatu kirje aegumisaja välja suurus Invalid entry field type - + sobimatu kirje väljatüüp unable to seek to content position - + sisu alguskoha juurde pöördumine pole võimalik Invalid credentials were provided, please try again. @@ -4209,7 +4226,7 @@ Kui probleem püsib, võib andmebaasifail olla rikutud. KeeShare Invalid sharing reference - + Sobimatu jagamisviide Inactive share %1 @@ -4229,11 +4246,11 @@ Kui probleem püsib, võib andmebaasifail olla rikutud. Import is disabled in settings - + Importimine on seadetes keelatud Export is disabled in settings - + Eksportimine on seadetes keelatud Inactive share @@ -4374,7 +4391,7 @@ Teade: %2 The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. Are you sure you want to continue with this file? - Valitud võtmefail näeb välja nagu parooliandmebaasifail. Võtmefail ei tohi kunagi muutuda, sest muidu kaotad igaveseks oma andmebaasile ligipääsu. + 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? @@ -4534,7 +4551,7 @@ Võiksid kaaluda KeePassXC allalaadimislehel oleva AppImage'i kasutamist. Open &URL - Ava &URL + A&va URL Import a KeePass 1 database @@ -4608,7 +4625,7 @@ Eeldatavasti leidub selles programmivigu ja muid väiksemaid hädasid – see ve TOTP - TOTP + &TOTP View @@ -4652,7 +4669,7 @@ Eeldatavasti leidub selles programmivigu ja muid väiksemaid hädasid – see ve &Delete Entry… - &Kustuta kirje… + Kustuta kirj&e… &New Group… @@ -4830,6 +4847,26 @@ Eeldatavasti leidub selles programmivigu ja muid väiksemaid hädasid – see ve You must restart the application to apply this setting. Would you like to restart now? Selle muudatuse rakendamiseks tuleb KeePassXC uuesti käivitada. Kas teha seda kohe? + + Perform Auto-Type Sequence + Soorita automaatsisestuse jada + + + {USERNAME} + Kasutajanimi + + + {USERNAME}{ENTER} + Kasutajanimi ja Enter + + + {PASSWORD} + Parool + + + {PASSWORD}{ENTER} + Parool ja Enter + ManageDatabase @@ -4858,11 +4895,11 @@ Eeldatavasti leidub selles programmivigu ja muid väiksemaid hädasid – see ve ManageSession Disconnect - + Katkesta ühendus Disconnect this application - + Katkesta ühendus selle rakendusega @@ -5011,31 +5048,31 @@ Eeldatavasti leidub selles programmivigu ja muid väiksemaid hädasid – see ve OpData01 Invalid OpData01, does not contain header - + sobimatu OpData01, ei sisalda päist Unable to read all IV bytes, wanted 16 but got %1 - + IV kõiki baite pole võimalik lugeda: oodati 16, aga saadi %1 Unable to init cipher for opdata01: %1 - + Šifri initsialiseerimine OpData01 jaoks pole võimalik: %1 Unable to read all HMAC signature bytes - + HMAC-i signatuuri kõiki baite pole võimalik lugeda Malformed OpData01 due to a failed HMAC - + Ebaõnnestunud HMAC-i tõttu vigane OpData01 Unable to process clearText in place - + clearTexti kohapeal töötlemine pole võimalik Expected %1 bytes of clear-text, found %2 - + oodati %1 baiti lihtteksti, aga leiti %2 @@ -5043,34 +5080,35 @@ Eeldatavasti leidub selles programmivigu ja muid väiksemaid hädasid – see ve Read Database did not produce an instance %1 - + Andmebaasi lugemine ei loonud protsessi +%1 OpVaultReader Directory .opvault must exist - + kataloog .opvault peab olemas olema Directory .opvault must be readable - + kataloog .opvault peab olema loetav Directory .opvault/default must exist - + kataloog .opvault/default peab olemas olema Directory .opvault/default must be readable - + kataloog .opvault/default peab olema loetav Unable to decode masterKey: %1 - + ülemvõtme dekodeerimine pole võimalik: %1 Unable to derive master key: %1 - + ülemvõtme tuletamine pole võimalik: %1 @@ -5313,10 +5351,6 @@ Eeldatavasti leidub selles programmivigu ja muid väiksemaid hädasid – see ve Password quality suurepärane - - ExtendedASCII - Laiendatud ASCII - Switch to advanced mode Lülita täppisrežiimi @@ -5325,58 +5359,22 @@ Eeldatavasti leidub selles programmivigu ja muid väiksemaid hädasid – see ve Advanced Lisaseaded - - A-Z - A–Y - - - a-z - a–y - - - 0-9 - 0–9 - Braces Sulud - - {[( - {[( - Punctuation Kirjavahemärgid - - .,:; - .,:; - Quotes Jutumärgid - - " ' - " ' - - - <*+!?= - <*+!?= - - - \_|-/ - \_|-/ - Logograms Logogrammid - - #$%&&@^`~ - #$%&&@^`~ - Character set to exclude from generated password Märgid, mida genereeritavas paroolis esineda ei tohi @@ -5497,6 +5495,10 @@ Eeldatavasti leidub selles programmivigu ja muid väiksemaid hädasid – see ve Regenerate password (%1) Genereeri uus parool (%1) + + Special Characters + Erimärgid + QApplication @@ -5604,19 +5606,19 @@ Eeldatavasti leidub selles programmivigu ja muid väiksemaid hädasid – see ve QObject Database not opened - + Andmebaasi pole avatud Database hash not available - + Andmebaasi räsi pole saadaval Client public key not received - + Kliendi avalikku võtit ei saadud Cannot decrypt message - + Sõnumi lahtikrüptimine pole võimalik Action cancelled or denied @@ -5640,7 +5642,7 @@ Eeldatavasti leidub selles programmivigu ja muid väiksemaid hädasid – see ve No URL provided - + URL-i ei antud No logins found @@ -5652,31 +5654,31 @@ Eeldatavasti leidub selles programmivigu ja muid väiksemaid hädasid – see ve Add a new entry to a database. - + Uue kirje lisamine andmebaasi. Path of the database. - + Andmebaasi asukoht. Key file of the database. - + Andmebaasi võtmefail. path - + asukoht Username for the entry. - + Kirje kasutajanimi. username - + kasutajanimi URL for the entry. - + Kirje URL. URL @@ -5684,52 +5686,52 @@ Eeldatavasti leidub selles programmivigu ja muid väiksemaid hädasid – see ve Prompt for the entry's password. - + Kirje parooli küsitakse. Generate a password for the entry. - + Kirjele genereeritakse parool. length - + pikkus Path of the entry to add. - + Lisatava kirje asukoht. Path of the entry to clip. clip = copy to clipboard - + Lõikepuhvrisse kopeeritava kirje asukoht. Timeout in seconds before clearing the clipboard. - + Lõikepuhvri puhastamise viivitus sekundites. Edit an entry. - + Kirje muutmine. Title for the entry. - + Kirje pealkiri title - + pealkiri Path of the entry to edit. - + Muudetava kirje asukoht. Estimate the entropy of a password. - + Parooli entroopia hindamine. Password for which to estimate the entropy. - + Parool, mille entroopiat hinnata. Perform advanced analysis on the password. @@ -5754,63 +5756,63 @@ Võimalikud käsud: Name of the command to execute. - + Käivitatava käsu nimi. List database entries. - + Andmebaasi kirjete loetlemine. Path of the group to list. Default is / - + Loetletava grupi asukoht andmebaasis. Vaikimisi / Find entries quickly. - + Kirjete kiiresti leidmine. Search term. - + Otsingusõna. Merge two databases. - + Kahe andmebaasi mestimine. Path of the database to merge from. - + Mestitava andmebaasi asukoht. Use the same credentials for both database files. - + Mõlema andmebaasi luku avamiseks kasutatakse samu tunnuseid. Key file of the database to merge from. - + Mestitava andmebaasi võtmefail. Show an entry's information. - + Kirje teabe näitamine. Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. - + Nä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. attribute - + atribuut Name of the entry to show. - + Näidatava kirje nimi. NULL device - + NULL-seade error reading from device - + viga seadmest lugemisel malformed string @@ -5858,28 +5860,29 @@ Võimalikud käsud: Generate a new random diceware passphrase. - + Uue juhusliku Diceware'i paroolifraasi genereerimine. Word count for the diceware passphrase. - + Sõnade arv Diceware'i paroolifraasis. Wordlist for the diceware generator. [Default: EFF English] - + Diceware'i generaatori kasutatav sõnaloend. +[Vaikimisi: EFF English] Generate a new random password. - + Uue juhusliku parooli genereerimine. Could not create entry with path %1. - + Kirjet asukohaga "%1" pole võimalik luua. Enter password for new entry: - + Sisesta uue kirje parool: Writing the database failed %1. @@ -5887,40 +5890,40 @@ Võimalikud käsud: Successfully added entry %1. - + Kirje "%1" edukalt lisatud. Invalid timeout value %1. - + Sobimatu viivituse väärtus %1. Entry %1 not found. - + Kirjet "%1" ei leitud. Entry with path %1 has no TOTP set up. - + Kirjel asukohas "%1" pole TOTP-d seadistatud. Clearing the clipboard in %1 second(s)... - + Lõikepuhver puhastatakse %1 sekundi pärast...Lõikepuhver puhastatakse %1 sekundi pärast... Clipboard cleared! - + Lõikepuhver puhastatud! Silence password prompt and other secondary outputs. - + Parooliviiba jm teisese väljundi vaigistamine. count CLI parameter - + arv Could not find entry with path %1. - + Kirjet asukohaga "%1" ei leitud. Not changing any field for entry %1. @@ -5928,7 +5931,7 @@ Võimalikud käsud: Enter new password for entry: - + Sisesta kirje uus parool: Writing the database failed: %1 @@ -5936,19 +5939,19 @@ Võimalikud käsud: Successfully edited entry %1. - + Kirje "%1" edukalt muudetud. Length %1 - + Pikkus: %1 Entropy %1 - + Entroopia: %1 Log10 %1 - + Log10: %1 Multi-word extra bits %1 @@ -6032,100 +6035,101 @@ Võimalikud käsud: Entropy %1 (%2) - + Entroopia: %1 (%2) *** Password length (%1) != sum of length of parts (%2) *** - + *** Parooli pikkus (%1) != osade pikkuse summa (%2) *** Failed to load key file %1: %2 - + Võtmefaili %1 laadimine ebaõnnestus: %2 Length of the generated password - + Genereeritava parooli pikkus. Use lowercase characters - + Kasutatakse väiketähti. Use uppercase characters - + Kasutatakse suurtähti. Use special characters - + Kasutatakse erimärke. Use extended ASCII - + Kasutatakse laiendatud ASCII märke. Exclude character set - + Välistatavad märgid. chars - + märgid Exclude similar looking characters - Sarnase välimusega märgid jäetakse välja + Sarnase välimusega märgid jäetakse välja. Include characters from every selected group - + Kaasatakse märke igast valitud tüübist. Recursively list the elements of the group. - + Grupi elementide rekursiivne loetlemine. Cannot find group %1. - + Gruppi %1 ei leitud. Error reading merge file: %1 - + Viga mestitava faili lugemisel: +%1 Unable to save database to file : %1 - + Andmebaasi failiks salvestamine ebaõnnestus: %1 Unable to save database to file: %1 - + Andmebaasi failiks salvestamine ebaõnnestus: %1 Successfully recycled entry %1. - + Kirje "%1" edukalt prügikasti visatud. Successfully deleted entry %1. - + Kirje "%1" edukalt kustutatud. Show the entry's current TOTP. - + Kirje praeguse TOTP näitamine. ERROR: unknown attribute %1. - + VIGA: tundmatu atribuut %1. No program defined for clipboard manipulation - + Lõikepuhvri käsitlemise programmi pole määratud. file empty - + fail on tühi %1: (row, col) %2,%3 - + %1: (rida, veerg) %2,%3 Argon2 (KDBX 4 – recommended) @@ -6142,24 +6146,24 @@ Võimalikud käsud: Invalid Settings TOTP - + Sobimatu seadistus Invalid Key TOTP - + Sobimatu võti Message encryption failed. - + Sõnumi krüptimine ebaõnnestus. No groups found - + Ühtegi gruppi ei leitud Create a new database. - + Uue andmebaasi loomine. File %1 already exists. @@ -6167,39 +6171,39 @@ Võimalikud käsud: Loading the key file failed - + Võtmefaili laadimine ebaõnnestus No key is set. Aborting database creation. - + Võtit pole määratud. Andmebaasi ei looda. Failed to save the database: %1. - + Andmebaasi salvestamine ebaõnnestus: %1. Successfully created new database. - + Uus andmebaas edukalt loodud. Creating KeyFile %1 failed: %2 - + Võtmefaili %1 loomine ebaõnnestus: %2 Loading KeyFile %1 failed: %2 - + Võtmefaili %1 laadimine ebaõnnestus: %2 Path of the entry to remove. - + Eemaldatava kirje asukoht. Existing single-instance lock file is invalid. Launching new instance. - + Olemasoleva ainuprotsessi lukufail on sobimatu. Käivitatakse uus protsess. The lock file could not be created. Single-instance mode disabled. - + Lukufaili loomine ei õnnestunud. Ainuprotsessi režiim välja lülitatud. KeePassXC - cross-platform password manager @@ -6207,31 +6211,31 @@ Võimalikud käsud: filenames of the password databases to open (*.kdbx) - + Avatavate parooliandmebaaside failinimed (*.kdbx). path to a custom config file - + Kohandatud seadistusfaili asukoht. key file of the database - + Andmebaasi võtmefail. read password of the database from stdin - + Andmebaasi parooli lugemine standardsisendist (stdin). Parent window handle - + Ülemakna pide Another instance of KeePassXC is already running. - + Teine KeePassXC protsess juba töötab. Fatal error while testing the cryptographic functions. - + Parandamatu tõrge krüptograafiafunktsioonide testimisel. KeePassXC - Error @@ -6243,19 +6247,19 @@ Võimalikud käsud: Cannot create new group - + Uue grupi loomine ebaõnnestus. Deactivate password key for the database. - + Andmebaasi paroolivõtme desaktiveerimine. Displays debugging information. - + Silumisteabe näitamine. Deactivate password key for the database to merge from. - + Mestitava andmebaasi paroolivõtme desaktiveerimine. Version %1 @@ -6327,31 +6331,31 @@ Kernel: %3 %4 Cannot generate a password and prompt at the same time! - + Parooli ei saa ühtaegu küsida ja automaatselt genereerida! Adds a new group to a database. - + Uue grupi lisamine andmebaasi. Path of the group to add. - + Lisatava grupi asukoht andmebaasis. Group %1 already exists! - + Grupp "%1" on juba olemas. Group %1 not found. - + Gruppi "%1" ei leitud. Successfully added group %1. - + Grupp "%1" edukalt lisatud. 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. - + 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. FILENAME @@ -6359,35 +6363,35 @@ Kernel: %3 %4 Analyze passwords for weaknesses and problems. - + Paroolide analüüsimine nõrkuste ja probleemide leidmiseks. Failed to open HIBP file %1: %2 - + HIBP-faili %1 avamine ebaõnnestus: %2 Evaluating database entries against HIBP file, this will take a while... - + Andmebaasi kirjete võrdlemine HIBP-failiga võtab mõnevõrra aega... Close the currently opened database. - + Parajasti avatud andmebaasi sulgemine. Display this help. - + Selle abi näitamine. slot - + pesa Invalid word count %1 - + Sobimatu sõnade arv %1 The word list is too small (< 1000 items) - + Sõnaloend on liiga väike (< 1000 elementi) Exit interactive mode. @@ -6395,11 +6399,11 @@ Kernel: %3 %4 Exports the content of a database to standard output in the specified format. - + Andmebaasi sisu määratavas vormingus standardväljundisse eksportimine. Unable to export database to XML: %1 - + Andmebaasi eksportimine XML-iks pole võimalik: %1 Unsupported format %1 @@ -6411,11 +6415,11 @@ Kernel: %3 %4 Invalid password length %1 - + Sobimatu parooli pikkus %1 Display command help. - + Käsu abi näitamine. Available commands: @@ -6423,23 +6427,23 @@ Kernel: %3 %4 Import the contents of an XML database. - + XML-andmebaasi sisu importimine. Path of the XML database export. - + Eksporditava XML-andmebaasi asukoht. Path of the new database. - + Uue andmebaasi asukoht. Successfully imported database. - + Andmebaas edukalt imporditud. Unknown command %1 - + Tundmatu käsk %1 Flattens the output to single lines. @@ -6451,11 +6455,11 @@ Kernel: %3 %4 Yubikey slot for the second database. - + Teise andmebaasi YubiKey pesa. Successfully merged %1 into %2. - + %1 edukalt %2-isse mestitud. Database was not modified by merge operation. @@ -6463,75 +6467,75 @@ Kernel: %3 %4 Moves an entry to a new group. - + Kirje teisaldamine uude gruppi. Path of the entry to move. - + Teisaldatava kirje asukoht. Path of the destination group. - + Sihtgrupi asukoht. Could not find group with path %1. - + Gruppi asukohaga "%1" ei leitud. Entry is already in group %1. - + Kirje on juba grupis %1. Successfully moved entry %1 to group %2. - + Kirje "%1" edukalt gruppi "%2" teisaldatud. Open a database. - + Andmebaasi avamine. Path of the group to remove. - + Eemaldatava grupi asukoht. Cannot remove root group from database. - + Andmebaasi juurgruppi pole võimalik eemaldada. Successfully recycled group %1. - + Grupp "%1" edukalt prügikasti visatud. Successfully deleted group %1. - + Grupp "%1" edukalt kustutatud. Failed to open database file %1: not found - + Andmebaasifaili %1 avamine ebaõnnestus: faili ei leitud Failed to open database file %1: not a plain file - + Andmebaasifaili %1 avamine ebaõnnestus: pole lihtfail Failed to open database file %1: not readable - + Andmebaasifaili %1 avamine ebaõnnestus: pole loetav Enter password to unlock %1: - + Sisesta parool andmebaasi %1 luku avamiseks: Invalid YubiKey slot %1 - + Sobimatu YubiKey pesa %1 Enter password to encrypt database (optional): - + Sisesta parool andmebaasi krüptimiseks (pole kohustuslik): HIBP file, line %1: parse error - + HIBP-faili rida %1: parsimisviga Secret Service Integration @@ -6539,11 +6543,11 @@ Kernel: %3 %4 User name - + Kasutajanimi Password for '%1' has been leaked %2 time(s)! - + Kirje "%1" parool on lekkinud %2 kord!Kirje "%1" parool on lekkinud %2 korda! Invalid password generator after applying all options @@ -6551,7 +6555,7 @@ Kernel: %3 %4 Show the protected attributes in clear text. - + Kaitstud atribuutide näitamine tavatekstina. Browser Plugin Failure @@ -6563,19 +6567,19 @@ Kernel: %3 %4 Copy the given attribute to the clipboard. Defaults to "password" if not specified. - + Määratud atribuudi kopeerimine lõikepuhvrisse. Täpsustamata jätmise korral kopeeritakse parool. Copy the current TOTP to the clipboard (equivalent to "-a totp"). - + Praeguse TOTP lõikepuhvrisse kopeerimine (sama nagu "-a totp"). Copy an entry's attribute to the clipboard. - + Kirje atribuudi kopeerimine lõikepuhvrisse. ERROR: Please specify one of --attribute or --totp, not both. - + VIGA: palun kasuta kas võtit --attribute või --totp, mitte aga mõlemat. ERROR: attribute %1 is ambiguous, it matches %2. @@ -6583,47 +6587,47 @@ Kernel: %3 %4 Attribute "%1" not found. - + Atribuuti "%1" ei leitud. Entry's "%1" attribute copied to the clipboard! - + Kirje atribuut "%1" lõikepuhvrisse kopeeritud! Yubikey slot and optional serial used to access the database (e.g., 1:7370001). - + YubiKey pesa ja valikuliselt seerianumber, mida kasutada andmebaasi luku avamiseks (nt 1:7370001). slot[:serial] - + pesa[:seerianr] Target decryption time in MS for the database. - + Andmebaasi soovitav lahtikrüptimisaeg millisekundites. time - + aeg Set the key file for the database. - + Andmebaasile võtmefaili määramine. Set a password for the database. - + Andmebaasile parooli määramine. Invalid decryption time %1. - + Sobimatu lahtikrüptimise aeg %1 Target decryption time must be between %1 and %2. - + Lahtikrüptimisaeg peab olema vahemikus %1 kuni %2. Failed to set database password. - + Andmebaasi parooli määramine ebaõnnestus. Benchmarking key derivation function for %1ms delay. @@ -6639,15 +6643,15 @@ Kernel: %3 %4 Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. - + Eksportimisel kasutatav vorming. Valida on "xml" ja "csv". Vaikimisi "xml". Unable to import XML database: %1 - + XML-andmebaasi importimine pole võimalik: %1 Show a database's information. - + Andmebaasi teabe näitamine. UUID: @@ -6667,44 +6671,44 @@ Kernel: %3 %4 KDF: - + KDF: Recycle bin is enabled. - + Prügikasti lubamine. Recycle bin is not enabled. - + Prügikasti keelamine. Invalid command %1. - + Sobimatu käsk %1. Invalid YubiKey serial %1 - + Sobimatu YubiKey seerianumber %1 Please touch the button on your YubiKey to continue… - + Jätkamiseks vajuta oma YubiKey nuppu... Do you want to create a database with an empty password? [y/N]: - + Kas soovid luua tühja parooliga andmebaasi? (jah/EI) [y/N]: Repeat password: - + Parooli kordus: Error: Passwords do not match. - + Viga: paroolid ei kattu. All clipping programs failed. Tried %1 - + Kõigi lõikepuhvri käsitlemise programmide kasutamine ebaõnnestus. Proovitud: %1 AES (%1 rounds) @@ -6745,7 +6749,7 @@ Kernel: %3 %4 QtIOCompressor Internal zlib error when compressing: - + Sisemine zlib'i tõrge tihendamisel: Error writing to underlying device: @@ -6761,18 +6765,18 @@ Kernel: %3 %4 Internal zlib error when decompressing: - + Sisemine zlib'i tõrge lahtipakkimisel: QtIOCompressor::open The gzip format not supported in this version of zlib. - + Selles zlib'i versioonis gzip-vormingut ei toetata. Internal zlib error: - + Sisemine zlib'i tõrge: @@ -7063,11 +7067,11 @@ Kernel: %3 %4 SSHAgent Agent connection failed. - + Agendiga ühendumine ebaõnnestus. Agent protocol error. - + Agendi protokolliviga. No agent running, cannot add identity. @@ -7083,7 +7087,7 @@ Kernel: %3 %4 The key has already been added. - + Võtmefail on juba lisatud. Restricted lifetime is not supported by the agent (check options). @@ -7276,11 +7280,11 @@ Kernel: %3 %4 Import - importimine + Impordi Export - eksportimine + Ekspordi Imported certificates @@ -7312,7 +7316,7 @@ Kernel: %3 %4 Fingerprint - Sõrmejälg: + Sõrmejälg Certificate @@ -7775,19 +7779,19 @@ Näide: JBSWY3DPEHPK3PXP YubiKey %1 [%2] Configured Slot - %3 - + %1 [%2] seadistatud - pesa %3 %1 [%2] Challenge Response - Slot %3 - %4 - + %1 [%2] pretensioon-vastus - pesa %3 - %4 Press - + ootab vajutust Passive - + passiivne %1 Invalid slot specified - %2 @@ -7795,27 +7799,27 @@ Näide: JBSWY3DPEHPK3PXP The YubiKey interface has not been initialized. - + YubiKey liides pole initsialiseeritud. Hardware key is currently in use. - + Riistvaraline võti on hetkel kasutuses. Could not find hardware key with serial number %1. Please plug it in to continue. - + Riistvaralist võtit seerianumbriga %1 ei leitud. Jätkamiseks tuleb see arvutiga ühendada. Hardware key timed out waiting for user interaction. - + Riistvaraline võti ei jõudnud kasutaja vastust ära oodata. A USB error ocurred when accessing the hardware key: %1 - + Riistvaralise võtme kasutamisel ilmnes USB-tõrge: %1 Failed to complete a challenge-response, the specific error was: %1 - + Pretensiooni-vastuse lõpetamine ebaõnnestus. Konkreetne viga: %1 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 @@ Colorful Värikäs + + You must restart the application to set the new language. Would you like to restart now? + + ApplicationSettingsWidgetGeneral @@ -166,10 +170,6 @@ Automatically save after every change Tallenna automaattisesti jokaisen muutoksen jälkeen - - Automatically save on exit - Tallenna automaattisesti suljettaessa - Automatically reload the database when modified externally Lataa tietokanta automaattisesti uudelleen jos tietokantaa muokattiin muualla @@ -304,10 +304,6 @@ Automatically launch KeePassXC at system startup Käynnistä KeePassXC automaattisesti järjestelmän käynnistyksessä - - Mark database as modified for non-data changes (e.g., expanding groups) - Merkitse tietokanta muokatuksi dataa sisältämättömistä muokkauksista (esim. ryhmien laajentaminen) - Safely save database files (disable if experiencing problems with Dropbox, etc.) Tallenna tietokannat turvallisesti (ota pois käytöstä, jos tämä aiheuttaa ongelmia Dropboxin ym. kanssa) @@ -344,6 +340,18 @@ Auto-Type start delay: Automaattisyötön aloitusviive: + + Automatically save when locking database + + + + Automatically save non-data changes when locking database + + + + Tray icon type + + ApplicationSettingsWidgetSecurity @@ -4839,6 +4847,26 @@ Bugeja ja ongelmia voi esiintyä. Tämä versio ei ole tarkoitettu päivittäise You must restart the application to apply this setting. Would you like to restart now? Ohjelma täytyy käynnistää uudelleen, jotta asetus voidaan ottaa käyttöön. Haluatko käynnistää uudelleen nyt? + + Perform Auto-Type Sequence + + + + {USERNAME} + + + + {USERNAME}{ENTER} + + + + {PASSWORD} + + + + {PASSWORD}{ENTER} + + ManageDatabase @@ -5323,10 +5351,6 @@ Bugeja ja ongelmia voi esiintyä. Tämä versio ei ole tarkoitettu päivittäise Password quality Erinomainen - - ExtendedASCII - Laajennettu ASCII - Switch to advanced mode Vaihda kehittyneeseen tilaan @@ -5335,58 +5359,22 @@ Bugeja ja ongelmia voi esiintyä. Tämä versio ei ole tarkoitettu päivittäise Advanced Lisäasetukset - - A-Z - A-Z - - - a-z - a-z - - - 0-9 - 0-9 - Braces Sulut - - {[( - {[( - Punctuation Välimerkit - - .,:; - .,:; - Quotes Lainausmerkit - - " ' - " ' - - - <*+!?= - <*+!?= - - - \_|-/ - \_|-/ - Logograms Erikoismerkit - - #$%&&@^`~ - #$%&&@^`~ - Character set to exclude from generated password Kirjaimet joita ei käytetä salasanan muodostukseen @@ -5507,6 +5495,10 @@ Bugeja ja ongelmia voi esiintyä. Tämä versio ei ole tarkoitettu päivittäise Regenerate password (%1) Luo salasana uudelleen (%1) + + Special Characters + Erikoismerkit + QApplication 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 @@ Are you sure you want to reset all general and security settings to default? - Voulez-vous vraiment réinitialiser tous les paramètres généraux et de sécurité à leur valeur par défaut ? + Souhaitez-vous vraiment réinitialiser tous les paramètres généraux et de sécurité à leur valeur par défaut ? Monochrome (light) @@ -135,6 +135,10 @@ Colorful Multicolore + + You must restart the application to set the new language. Would you like to restart now? + Pour appliquer la nouvelle langue, vous devez redémarrer l’application. Souhaitez-vous la démarrer maintenant ? + ApplicationSettingsWidgetGeneral @@ -166,10 +170,6 @@ Automatically save after every change Enregistrer automatiquement après chaque changement - - Automatically save on exit - Enregistrer automatiquement en sortant - Automatically reload the database when modified externally Recharger automatiquement la base de données quand elle est modifiée de l’extérieur @@ -304,10 +304,6 @@ Automatically launch KeePassXC at system startup Lancer automatiquement KeepassXC au démarrage du système. - - Mark database as modified for non-data changes (e.g., expanding groups) - Considérer la base de données comme modifiée lors des modifications hors-données (par exemple : groupes développés) - Safely save database files (disable if experiencing problems with Dropbox, etc.) Enregistrer en toute sécurité les fichiers de base de données (désactiver en cas de problèmes avec Dropbox, etc.) @@ -344,6 +340,18 @@ Auto-Type start delay: Délai de démarrage de la saisie automatique : + + Automatically save when locking database + Enregistrer automatiquement en verrouillant la base de données + + + Automatically save non-data changes when locking database + Enregistrer automatiquement les changements qui ne sont pas relatifs aux données en verrouillant la base de données + + + Tray icon type + Type d’icône de la zone de notification + ApplicationSettingsWidgetSecurity @@ -462,15 +470,15 @@ This Auto-Type command contains a very long delay. Do you really want to proceed? - Cette commande de saisie automatique contient un délai très long. Voulez-vous vraiment continuer ? + Cette commande de saisie automatique contient un délai très long. Souhaitez-vous vraiment continuer ? This Auto-Type command contains very slow key presses. Do you really want to proceed? - Cette commande de saisie automatique contient des touches très lentes. Voulez-vous vraiment continuer ? + Cette commande de saisie automatique contient des touches très lentes. Souhaitez-vous vraiment continuer ? This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? - Cette commande de saisie automatique contient des arguments répétés très souvent. Voulez-vous vraiment continuer ? + Cette commande de saisie automatique contient des arguments répétés très souvent. Souhaitez-vous vraiment continuer ? Permission Required @@ -626,7 +634,7 @@ Veuillez sélectionner la base de données souhaitée pour enregistrer les ident A shared encryption key with the name "%1" already exists. Do you want to overwrite it? Une clé de chiffrement partagée nommée « %1 » existe déjà. -Voulez-vous la remplacer ? +Souhaitez-vous la remplacer ? KeePassXC: Update Entry @@ -634,7 +642,7 @@ Voulez-vous la remplacer ? Do you want to update the information in %1 - %2? - Voulez-vous mettre à jour les renseignements dans %1 - %2 ? + Souhaitez-vous mettre à jour les renseignements dans %1 - %2 ? Abort @@ -679,7 +687,7 @@ Moved %2 keys to custom data. Do you want to create this group? Une demande de création d’un nouveau groupe « %1 » a été reçue. -Voulez-vous créer ce groupe ? +Souhaitez-vous créer ce groupe ? @@ -1293,7 +1301,7 @@ Do you want to retry with an "empty" password instead? To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. Le déverrouillage de la base de données a échoué et vous n’avez pas saisi de mot de passe. -Voulez-vous plutôt 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. @@ -1409,7 +1417,7 @@ Si vous n’avez pas de fichier clé, veuillez laisser le champ vide. Do you really want to delete the selected key? This may prevent connection to the browser plugin. - Voulez-vous vraiment supprimer la clé sélectionnée ? + Souhaitez-vous vraiment supprimer la clé sélectionnée ? Cela pourrait empêcher la connexion l’extension pour navigateurs. @@ -1431,7 +1439,7 @@ Cela pourrait empêcher la connexion l’extension pour navigateurs. Do you really want to disconnect all browsers? This may prevent connection to the browser plugin. - Voulez-vous vraiment déconnecter tous les navigateurs ? + Souhaitez-vous vraiment déconnecter tous les navigateurs ? Cela pourrait empêcher la connexion avec l’extension pour navigateurs. @@ -1457,7 +1465,7 @@ Cela pourrait empêcher la connexion avec l’extension pour navigateurs. Do you really want forget all site-specific settings on every entry? Permissions to access entries will be revoked. - Voulez-vous vraiment oublier tous les paramètres propres aux sites pour toutes les entrées ? Les autorisations d’accès aux entrées seront révoquées. + Souhaitez-vous vraiment oublier tous les paramètres propres aux sites pour toutes les entrées ? Les autorisations d’accès aux entrées seront révoquées. Removing stored permissions… @@ -1490,7 +1498,7 @@ Permissions to access entries will be revoked. 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. - Voulez-vous vraiment convertir toutes les données d’intégration au navigateur héritées à la norme la plus récente ? + 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. @@ -1520,7 +1528,7 @@ Cela est nécessaire pour assurer la compatibilité avec l’extension pour navi Do you really want refresh the database ID? This is only necessary if your database is a copy of another and the browser extension cannot connect. - Voulez-vous vraiment actualiser l'ID de la base de données ? + Souhaitez-vous vraiment actualiser l'ID de la base de données ? Ceci est seulement nécessaire si votre base de données est une copie d'une autre et que l'extension du navigateur ne peut se connecter. @@ -1540,7 +1548,7 @@ Ceci est seulement nécessaire si votre base de données est une copie d'un Are you sure you want to continue without a password? AVERTISSEMENT : Vous n’avez pas défini de mot de passe. Il est fortement découragé d’utiliser une base de données sans mot de passe. -Voulez-vous vraiment poursuivre sans mot de passe ? +Souhaitez-vous vraiment poursuivre sans mot de passe ? Continue without password @@ -1811,7 +1819,7 @@ Si vous gardez ce nombre, votre base de données pourrait être craquée trop fa Do you want to delete the current recycle bin and all its contents? This action is not reversible. - Voulez-vous supprimer la corbeille actuelle et tout son contenu ? + Souhaitez-vous supprimer la corbeille actuelle et tout son contenu ? Cette action est irréversible. @@ -1967,7 +1975,7 @@ C’est très certainement un bogue, veuillez le signaler aux développeurs. You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? - Vous êtes sur le point d’exporter votre base de données vers un fichier non chiffré. Vos mots de passe et renseignements délicats seront vulnérables. Voulez-vous vraiment poursuivre ? + 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 ? Open OPVault @@ -1982,15 +1990,15 @@ C’est très certainement un bogue, veuillez le signaler aux développeurs. Do you really want to delete the entry "%1" for good? - Voulez-vous vraiment supprimer définitivement l’entrée « %1 » ? + Souhaitez-vous vraiment supprimer définitivement l’entrée « %1 » ? Do you really want to move entry "%1" to the recycle bin? - Voulez-vous vraiment déplacer l’entrée « %1 » vers la corbeille ? + Souhaitez-vous vraiment déplacer l’entrée « %1 » vers la corbeille ? Do you really want to move %n entry(s) to the recycle bin? - Voulez-vous vraiment déplacer %n entrée vers la corbeille ?Voulez-vous vraiment déplacer %n entrées vers la corbeille ? + Souhaitez-vous vraiment déplacer %n entrée vers la corbeille ?Souhaitez-vous vraiment déplacer %n entrées vers la corbeille ? Execute command? @@ -1998,7 +2006,7 @@ C’est très certainement un bogue, veuillez le signaler aux développeurs. Do you really want to execute the following command?<br><br>%1<br> - Voulez-vous vraiment exécuter la commande suivante ?<br><br>%1<br> + Souhaitez-vous vraiment exécuter la commande suivante ?<br><br>%1<br> Remember my choice @@ -2006,7 +2014,7 @@ C’est très certainement un bogue, veuillez le signaler aux développeurs. Do you really want to delete the group "%1" for good? - Voulez-vous vraiment supprimer définitivement le groupe « %1 » ? + Souhaitez-vous vraiment supprimer définitivement le groupe « %1 » ? No current database. @@ -2030,7 +2038,7 @@ C’est très certainement un bogue, veuillez le signaler aux développeurs. The database file has changed. Do you want to load the changes? - Le fichier de la base de données a été modifiée. Voulez-vous charger les changements ? + Le fichier de la base de données a été modifiée. Souhaitez-vous charger les changements ? Merge Request @@ -2040,7 +2048,7 @@ C’est très certainement un bogue, veuillez le signaler aux développeurs.The database file has changed and you have unsaved changes. Do you want to merge your changes? Le fichier de la base de données a été modifiée et vos changements ne sont pas enregistrés. -Voulez-vous fusionner vos changements ? +Souhaitez-vous fusionner vos changements ? Empty recycle bin? @@ -2048,11 +2056,11 @@ Voulez-vous fusionner vos changements ? Are you sure you want to permanently delete everything from your recycle bin? - Voulez-vous vraiment vider définitivement la corbeille ? + Souhaitez-vous vraiment vider définitivement la corbeille ? Do you really want to delete %n entry(s) for good? - Voulez-vous vraiment supprimer %n entrée irrémédiablement ?Voulez-vous vraiment supprimer %n entrées irrémédiablement ? + Souhaitez-vous vraiment supprimer %n entrée irrémédiablement ?Souhaitez-vous vraiment supprimer %n entrées irrémédiablement ? Delete entry(s)? @@ -2120,7 +2128,7 @@ Désactiver les enregistrements sécurisés et ressayer ? Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? - L’entrée « %1 » à %2 référence. Voulez-vous remplacer les références par les valeurs, ignorer cette entrée ou supprimer quand même ?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 ? + 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 ?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 ? Delete group @@ -2132,7 +2140,7 @@ Désactiver les enregistrements sécurisés et ressayer ? Do you really want to move the group "%1" to the recycle bin? - Voulez-vous vraiment déplacer le groupe « %1 » vers la corbeille ? + Souhaitez-vous vraiment déplacer le groupe « %1 » vers la corbeille ? Successfully merged the database files. @@ -2223,7 +2231,7 @@ Désactiver les enregistrements sécurisés et ressayer ? Are you sure you want to remove this attribute? - Voulez-vous vraiment supprimer cet attribut ? + Souhaitez-vous vraiment supprimer cet attribut ? Tomorrow @@ -2263,7 +2271,7 @@ Désactiver les enregistrements sécurisés et ressayer ? Are you sure you want to remove this URL? - Voulez-vous vraiment supprimer cette URL ? + Souhaitez-vous vraiment supprimer cette URL ? Reveal @@ -2279,7 +2287,7 @@ Désactiver les enregistrements sécurisés et ressayer ? Would you like to save changes to this entry? - Voulez-vous enregistrer les modifications de cette entrée ? + Souhaitez-vous enregistrer les modifications de cette entrée ? [PROTECTED] Press Reveal to view or edit @@ -2956,7 +2964,7 @@ Supported extensions are: %1. This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? - Cette icône est utilisée par %1 entrée et sera remplacée par l’icône par défaut. Voulez-vous vraiment la supprimer ?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 ? + 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 ?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 ? You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security @@ -3036,7 +3044,7 @@ Supported extensions are: %1. Do you really want to delete the selected plugin data? This may cause the affected plugins to malfunction. - Voulez-vous vraiment supprimer les données d’extension sélectionnées ? Cela pourrait entraîner un mauvais fonctionnement des extensions touchées. + Souhaitez-vous vraiment supprimer les données d’extension sélectionnées ? Cela pourrait entraîner un mauvais fonctionnement des extensions touchées. Key @@ -3117,7 +3125,7 @@ This may cause the affected plugins to malfunction. Are you sure you want to remove %n attachment(s)? - Voulez-vous vraiment supprimer %n fichier joint ?Voulez-vous vraiment supprimer %n fichiers joints ? + Souhaitez-vous vraiment supprimer %n fichier joint ?Souhaitez-vous vraiment supprimer %n fichiers joints ? Save attachments @@ -3131,7 +3139,7 @@ This may cause the affected plugins to malfunction. Are you sure you want to overwrite the existing file "%1" with the attachment? - Voulez-vous vraiment remplacer le fichier existant « %1 » par le fichier joint ? + Souhaitez-vous vraiment remplacer le fichier existant « %1 » par le fichier joint ? Confirm overwrite @@ -4382,7 +4390,7 @@ Message : %2 The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. Are you sure you want to continue with this file? 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 ? +Souhaitez-vous vraiment poursuivre avec ce fichier ? 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 Would you like KeePassXC to check for updates on startup? - Voulez-vous que KeePassXC vérifie la présence de mises à jour au démarrage ? + Souhaitez-vous que KeePassXC vérifie la présence de mises à jour au démarrage ? You can always check for updates manually from the application menu. @@ -4836,6 +4844,26 @@ Attendez-vous à des bogues et des problèmes mineurs. Cette version n’est pas You must restart the application to apply this setting. Would you like to restart now? Pour appliquer ce paramètre, vous devez redémarrer l’application. Souhaitez-vous la démarrer maintenant ? + + Perform Auto-Type Sequence + Effectuer une séquence de saisie automatique + + + {USERNAME} + {NOMD’UTILISATEUR} + + + {USERNAME}{ENTER} + {NOMD’UTILISATEUR}{ENTRÉE} + + + {PASSWORD} + {MOTDEPASSE} + + + {PASSWORD}{ENTER} + {MOTDEPASSE}{ENTRÉE} + ManageDatabase @@ -5320,10 +5348,6 @@ Attendez-vous à des bogues et des problèmes mineurs. Cette version n’est pas Password quality Excellent - - ExtendedASCII - ASCII étendu - Switch to advanced mode Basculer vers le mode avancé @@ -5332,58 +5356,22 @@ Attendez-vous à des bogues et des problèmes mineurs. Cette version n’est pas Advanced Avancé - - A-Z - A-Z - - - a-z - a-z - - - 0-9 - 0-9 - Braces Accolades - - {[( - {[( - Punctuation Ponctuation - - .,:; - .,:; - Quotes Guillemets - - " ' - " ’ - - - <*+!?= - <*+!?= - - - \_|-/ - \_|-/ - Logograms Logogramme - - #$%&&@^`~ - #$%&&@^`~ - Character set to exclude from generated password Ensemble de caractères à exclure du mot de passe généré @@ -5504,6 +5492,10 @@ Attendez-vous à des bogues et des problèmes mineurs. Cette version n’est pas Regenerate password (%1) Régénérer le mot de passe (%1) + + Special Characters + Caractères spéciaux + QApplication @@ -6702,7 +6694,7 @@ Noyau : %3 %4 Do you want to create a database with an empty password? [y/N]: - Voulez-vous créer une base de données avec un mot de passe vide ? [o/N] : + Souhaitez-vous créer une base de données avec un mot de passe vide ? [o/N] : Repeat password: @@ -7365,7 +7357,7 @@ Noyau : %3 %4 The exported certificate is not the same as the one in use. Do you want to export the current certificate? - Le certificat exporté est différent de celui en cours d’utilisation. Voulez-vous exporter le certificat actuel ? + Le certificat exporté est différent de celui en cours d’utilisation. Souhaitez-vous exporter le certificat actuel ? Signer: @@ -7471,7 +7463,7 @@ Noyau : %3 %4 We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? - Nous ne pouvons vérifier la source du conteneur partagé, car il n’est pas signé. Voulez-vous vraiment importer de %1 ? + Nous ne pouvons vérifier la source du conteneur partagé, car il n’est pas signé. Souhaitez-vous vraiment importer de %1 ? Import from container with certificate @@ -7479,7 +7471,7 @@ Noyau : %3 %4 Do you want to trust %1 with the fingerprint of %2 from %3? - Voulez-vous autoriser %1 avec l’empreinte de %2 à %3 ? {1 ?} {2 ?} + Souhaitez-vous autoriser %1 avec l’empreinte de %2 à %3 ? {1 ?} {2 ?} Not this time @@ -7683,7 +7675,7 @@ Exemple : JBSWY3DPEHPK3PXP Are you sure you want to delete TOTP settings for this entry? - Voulez-vous vraiment supprimer les paramètres TOTP pour cette entrée ? + Souhaitez-vous vraiment supprimer les paramètres TOTP pour cette entrée ? 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 @@ Colorful Színes + + You must restart the application to set the new language. Would you like to restart now? + 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? + ApplicationSettingsWidgetGeneral @@ -166,10 +170,6 @@ Automatically save after every change Automatikus mentés minden módosítás után - - Automatically save on exit - Automatikus mentés kilépéskor - Automatically reload the database when modified externally Külső módosításkor az adatbázis automatikus újratöltése @@ -304,10 +304,6 @@ Automatically launch KeePassXC at system startup KeePassXC automatikus indítása a rendszer indulásakor - - Mark database as modified for non-data changes (e.g., expanding groups) - Nem adatjellegű változások (pl. csoport lenyitása) esetén az adatbázis megjelölése módosítottként - Safely save database files (disable if experiencing problems with Dropbox, etc.) Adatbázisok biztonságos mentése (Dropbox-szal és hasonlókkal való probléma esetén letiltandó) @@ -344,6 +340,18 @@ Auto-Type start delay: Automatikus beírás kezdésének késleltetése: + + Automatically save when locking database + Automatikus mentés adatbázis zárolásakor + + + Automatically save non-data changes when locking database + Nem adatváltozások automatikus mentése adatbázis zárolásakor + + + Tray icon type + Tálcaikon stílusa + ApplicationSettingsWidgetSecurity @@ -4837,6 +4845,26 @@ Néhány hiba és kisebb nehézségek várhatóak, ezért ez a verzió nem aján You must restart the application to apply this setting. Would you like to restart now? Ennek a beállításnak az érvényre kerüléséhez újra kell indítani az alkalmazást. Legyen azonnal újraindítva? + + Perform Auto-Type Sequence + Automatikus beírási sorrend végrehajtása + + + {USERNAME} + + + + {USERNAME}{ENTER} + + + + {PASSWORD} + + + + {PASSWORD}{ENTER} + + ManageDatabase @@ -5321,10 +5349,6 @@ Néhány hiba és kisebb nehézségek várhatóak, ezért ez a verzió nem aján Password quality Kiváló - - ExtendedASCII - Bővített ASCII - Switch to advanced mode Váltás speciális módba @@ -5333,58 +5357,22 @@ Néhány hiba és kisebb nehézségek várhatóak, ezért ez a verzió nem aján Advanced Speciális - - A-Z - A-Z - - - a-z - a-z - - - 0-9 - 0-9 - Braces Zárójelek - - {[( - {[( - Punctuation Központozás - - .,:; - .,:; - Quotes Idézőjelek - - " ' - " ' - - - <*+!?= - <*+!?= - - - \_|-/ - \_|-/ - Logograms Logogramok - - #$%&&@^`~ - #$%&&@^`~ - Character set to exclude from generated password A jelszó előállításnál kihagyandó karakterkészletek @@ -5505,6 +5493,10 @@ Néhány hiba és kisebb nehézségek várhatóak, ezért ez a verzió nem aján Regenerate password (%1) Jelszó újraelőállítása (%1) + + Special Characters + Speciális karakterek + QApplication 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 @@ Colorful Berwarna + + You must restart the application to set the new language. Would you like to restart now? + Anda harus memulai ulang aplikasi untuk menerapkan bahasa. Apakah anda ingin memulai ulang sekarang? + ApplicationSettingsWidgetGeneral @@ -166,10 +170,6 @@ Automatically save after every change Otomatis simpan setelah setiap perubahan - - Automatically save on exit - Otomatis simpan ketika keluar - Automatically reload the database when modified externally Muat ulang basisdata secara otomatis ketika diubah secara eksternal @@ -304,10 +304,6 @@ Automatically launch KeePassXC at system startup Otomatis jalankan KeePassXC pada saat perangkat dinyalakan - - Mark database as modified for non-data changes (e.g., expanding groups) - Tandai basisdata telah diubah untuk perubahan non-data (mis. melebarkan grup) - Safely save database files (disable if experiencing problems with Dropbox, etc.) Simpan berkas basisdata secara aman (nonaktifkan jika anda mengalami masalah dengan Dropbox, dll.) @@ -344,6 +340,18 @@ Auto-Type start delay: Tundaan mulai Ketik-Otomatis: + + Automatically save when locking database + Otomatis simpan saat mengunci basisdata + + + Automatically save non-data changes when locking database + Otomatis simpan perubahan non-data saat mengunci basisdata + + + Tray icon type + Tipe ikon baki + ApplicationSettingsWidgetSecurity @@ -1335,7 +1343,7 @@ Jika anda tidak memiliki berkas kunci, biarkan ruas tetap kosong. Key file to unlock the database - + Berkas kunci untuk membuka basisdata Please touch the button on your YubiKey! @@ -3002,7 +3010,7 @@ Ekstensi yang didukung adalah: %1. Apply to this group only - + Hanya terapkan ke grup ini @@ -4837,6 +4845,26 @@ Jangan kaget jika ada masalah dan bug, versi ini tidak ditujukan untuk penggunaa You must restart the application to apply this setting. Would you like to restart now? Anda harus memulai ulang aplikasi untuk menerapkan pengaturan ini. Apakah anda ingin memulai ulang sekarang? + + Perform Auto-Type Sequence + + + + {USERNAME} + + + + {USERNAME}{ENTER} + + + + {PASSWORD} + + + + {PASSWORD}{ENTER} + + ManageDatabase @@ -5320,10 +5348,6 @@ Jangan kaget jika ada masalah dan bug, versi ini tidak ditujukan untuk penggunaa Password quality Sempurna - - ExtendedASCII - ASCIILanjutan - Switch to advanced mode Beralih ke mode lanjutan @@ -5332,58 +5356,22 @@ Jangan kaget jika ada masalah dan bug, versi ini tidak ditujukan untuk penggunaa Advanced Tingkat Lanjut - - A-Z - A-Z - - - a-z - a-z - - - 0-9 - 0-9 - Braces Tanda Kurung - - {[( - {[( - Punctuation Tanda Baca - - .,:; - .,:; - Quotes Tanda Petik - - " ' - " ' - - - <*+!?= - <*+!?= - - - \_|-/ - \_|-/ - Logograms Logogram - - #$%&&@^`~ - #$%&&@^`~ - Character set to exclude from generated password Karakter yang dikecualikan dari sandi yang dibuat @@ -5504,6 +5492,10 @@ Jangan kaget jika ada masalah dan bug, versi ini tidak ditujukan untuk penggunaa Regenerate password (%1) Buat ulang sandi (%1) + + Special Characters + Karakter Spesial + QApplication 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 @@ Colorful Colorato + + You must restart the application to set the new language. Would you like to restart now? + È necessario riavviare l'applicazione per impostare la nuova lingua. Vuoi riavviare ora? + ApplicationSettingsWidgetGeneral @@ -166,10 +170,6 @@ Automatically save after every change Salva automaticamente dopo ogni modifica - - Automatically save on exit - Salva automaticamente all'uscita - Automatically reload the database when modified externally Ricarica automaticamente il database quando ci sono modifiche esterne @@ -290,24 +290,20 @@ Global auto-type shortcut - Scorciatoia globale di tipo automatico + Scorciatoia globale per il completamento automatico Auto-type character typing delay milliseconds - Ritardo in millisecondi di digitazione automatica dei caratteri + Ritardo in millisecondi del completamento automatico dei caratteri Auto-type start delay milliseconds - Ritardo di avvio in millisecondi della digitazione automatica + Ritardo di avvio in millisecondi dell completamento automatico Automatically launch KeePassXC at system startup Avvia automaticamente KeePassXC all'avvio del sistema - - Mark database as modified for non-data changes (e.g., expanding groups) - Contrassegnare il database come modificato per modifiche non riguardanti i dati (ad es. espansione dei gruppi) - Safely save database files (disable if experiencing problems with Dropbox, etc.) Salva in modo sicuro i file di database (disabilita se riscontra problemi con Dropbox, ecc.) @@ -334,7 +330,7 @@ Auto-Type typing delay: - Ritardo di digitazione automatica: + Ritardo del completamento automatico: Global Auto-Type shortcut: @@ -344,6 +340,18 @@ Auto-Type start delay: Ritardo avvio auto-completamento: + + Automatically save when locking database + Salva automaticamente durante il blocco del database + + + Automatically save non-data changes when locking database + Salva automaticamente le modifiche non apportate ai dati durante il blocco del database + + + Tray icon type + Tipo di icona vassoio + ApplicationSettingsWidgetSecurity @@ -478,7 +486,7 @@ KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. - KeePassXC richiede il permesso di Accessibilità per effettuare l'Auto-Type di livello base. Se hai già concesso il permesso, riavvia KeePassXC. + KeePassXC richiede il permesso di Accessibilità per effettuare l'auto-completamento di livello base. Se hai già concesso il permesso, riavvia KeePassXC. @@ -534,7 +542,7 @@ KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC. - KeePasssXC richiede il permesso di Accessibilità e di Registrazione Schermo per effettuare l'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. + KeePasssXC richiede il permesso di Accessibilità e di Registrazione Schermo per effettuare l'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. @@ -2398,11 +2406,11 @@ Disabilitare i salvataggi sicuri e riprovare? Custom Auto-Type sequence - Sequenza di tipo automatico personalizzata + Sequenza personalizzata di completamento automatico Open Auto-Type help webpage - Aprire la pagina Web di aiuto per le sequenze automatiche + Aprire la pagina Web di aiuto per i completamenti automatici Existing window associations @@ -2430,15 +2438,15 @@ Disabilitare i salvataggi sicuri e riprovare? Custom Auto-Type sequence for this window - Sequenza di tipo automatico personalizzata per questa finestra + Sequenza personalizzata del completamento automatico per questa finestra Inherit default Auto-Type sequence from the group - Eredita la sequenza predefinita di Auto-Type dal gruppo + Eredita la sequenza predefinita di auto-completamento dal gruppo Use custom Auto-Type sequence: - Usa sequenza personalizzata di Auto-Type: + Usa sequenza personalizzata di auto-completamento: @@ -2875,7 +2883,7 @@ Le estensioni supportate sono: %1. Default auto-type sequence field - Campo di sequenza di tipo automatico predefinito + Campo della sequenza del completamento automatico predefinito Expires: @@ -2887,7 +2895,7 @@ Le estensioni supportate sono: %1. Auto-Type: - Digitazione automatica: + Completamento automatico: Search: @@ -2903,7 +2911,7 @@ Le estensioni supportate sono: %1. Set default Auto-Type sequence - Impostare la sequenza di tipo automatico predefinita + Impostare la sequenza predefinita del completamento automatico @@ -4540,7 +4548,7 @@ Si consiglia di utilizzare l'AppImage disponibile sulla nostra pagina di do Perform &Auto-Type - Eseguire compilazione &automatica + Eseguire completamento &automatico Open &URL @@ -4840,6 +4848,26 @@ Aspettatevi alcuni bug e problemi minori, questa versione non è destinata all&a You must restart the application to apply this setting. Would you like to restart now? È necessario riavviare l'applicazione per applicare questa impostazione. Vuoi riavviare ora? + + Perform Auto-Type Sequence + Esegui la sequenza di completamento automatico + + + {USERNAME} + {NOMEUSER) + + + {USERNAME}{ENTER} + {NOMEUSER}{ENTER} + + + {PASSWORD} + {PASSWORD} + + + {PASSWORD}{ENTER} + {PASSWORD}{ENTER} + ManageDatabase @@ -5324,10 +5352,6 @@ Aspettatevi alcuni bug e problemi minori, questa versione non è destinata all&a Password quality Eccellente - - ExtendedASCII - ASCII esteso - Switch to advanced mode Passare alla modalità avanzata @@ -5336,58 +5360,22 @@ Aspettatevi alcuni bug e problemi minori, questa versione non è destinata all&a Advanced Avanzate - - A-Z - A-Z - - - a-z - a-z - - - 0-9 - 0-9 - Braces Parentesi graffe - - {[( - {[( - Punctuation Punteggiatura - - .,:; - .,:; - Quotes Citazioni - - " ' - " ' - - - <*+!?= - <*+!?= - - - \_|-/ - \_|-/ - Logograms Logogrammi - - #$%&&@^`~ - #$%&&@^`~ - Character set to exclude from generated password Set di caratteri da escludere dalla password generata @@ -5508,6 +5496,10 @@ Aspettatevi alcuni bug e problemi minori, questa versione non è destinata all&a Regenerate password (%1) Rigenera password (%1) + + Special Characters + Caratteri speciali + QApplication 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 @@ Colorful カラフル + + You must restart the application to set the new language. Would you like to restart now? + 新しい言語を設定するには、このアプリケーションを再起動する必要があります。今すぐ再起動しますか? + ApplicationSettingsWidgetGeneral @@ -166,10 +170,6 @@ Automatically save after every change 変更するたびに自動的に保存する - - Automatically save on exit - 終了時に自動的に保存する - Automatically reload the database when modified externally 外部で編集された際に自動でデータベースを再読み込みする @@ -304,10 +304,6 @@ Automatically launch KeePassXC at system startup システム起動時に KeePassXC を自動的に起動する - - Mark database as modified for non-data changes (e.g., expanding groups) - データ以外の変更 (例えばグループの展開) に対して、データベースを変更済みとしてマークする - Safely save database files (disable if experiencing problems with Dropbox, etc.) データベースファイルを安全に保存する (Dropbox などで問題が発生した場合は無効にしてください) @@ -344,6 +340,18 @@ Auto-Type start delay: 自動入力開始までの遅延: + + Automatically save when locking database + データベースロック時に自動的に保存する + + + Automatically save non-data changes when locking database + データベースロック時にデータ以外の変更を自動的に保存する + + + Tray icon type + トレイアイコンの種類 + ApplicationSettingsWidgetSecurity @@ -4839,6 +4847,26 @@ Expect some bugs and minor issues, this version is not meant for production use. You must restart the application to apply this setting. Would you like to restart now? 設定を適用するには、このアプリケーションを再起動する必要があります。今すぐ再起動しますか? + + Perform Auto-Type Sequence + 自動入力シーケンスを実行 + + + {USERNAME} + {USERNAME} + + + {USERNAME}{ENTER} + {USERNAME}{ENTER} + + + {PASSWORD} + {PASSWORD} + + + {PASSWORD}{ENTER} + {PASSWORD}{ENTER} + ManageDatabase @@ -5323,10 +5351,6 @@ Expect some bugs and minor issues, this version is not meant for production use. Password quality すばらしい - - ExtendedASCII - 拡張 ASCII - Switch to advanced mode 詳細モードに切り替え @@ -5335,58 +5359,22 @@ Expect some bugs and minor issues, this version is not meant for production use. Advanced 詳細設定 - - A-Z - A-Z - - - a-z - a-z - - - 0-9 - 0-9 - Braces 括弧 - - {[( - {[( - Punctuation 句読点 - - .,:; - .,:; - Quotes 引用符 - - " ' - " ' - - - <*+!?= - <*+!?= - - - \_|-/ - \_|-/ - Logograms 表語文字 - - #$%&&@^`~ - #$%&&@^`~ - Character set to exclude from generated password 生成されたパスワードから文字集合を除外する @@ -5507,6 +5495,10 @@ Expect some bugs and minor issues, this version is not meant for production use. Regenerate password (%1) パスワードを再生成 (%1) + + Special Characters + 特殊文字 + QApplication 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 @@ Colorful 컬러풀 + + You must restart the application to set the new language. Would you like to restart now? + + ApplicationSettingsWidgetGeneral @@ -166,10 +170,6 @@ Automatically save after every change 항목을 변경할 때 자동 저장 - - Automatically save on exit - 끝낼 때 자동 저장 - Automatically reload the database when modified externally 외부에서 데이터베이스를 수정했을 때 자동으로 새로 고침 @@ -304,10 +304,6 @@ Automatically launch KeePassXC at system startup 시스템 시작 시 KeePassXC 자동 시작 - - Mark database as modified for non-data changes (e.g., expanding groups) - 데이터가 변경되지 않았을 때 데이터베이스를 수정된 것으로 표시하지 않음(예: 그룹 확장) - Safely save database files (disable if experiencing problems with Dropbox, etc.) 데이터베이스 파일 안전 저장(Dropbox 등에서 문제 발생 시 비활성화) @@ -344,6 +340,18 @@ Auto-Type start delay: 자동 입력 시작 지연 시간: + + Automatically save when locking database + + + + Automatically save non-data changes when locking database + + + + Tray icon type + + ApplicationSettingsWidgetSecurity @@ -4839,6 +4847,26 @@ Expect some bugs and minor issues, this version is not meant for production use. You must restart the application to apply this setting. Would you like to restart now? 이 설정을 적용하려면 프로그램을 다시 시작해야 합니다. 지금 다시 시작하시겠습니까? + + Perform Auto-Type Sequence + + + + {USERNAME} + + + + {USERNAME}{ENTER} + + + + {PASSWORD} + + + + {PASSWORD}{ENTER} + + ManageDatabase @@ -5323,10 +5351,6 @@ Expect some bugs and minor issues, this version is not meant for production use. Password quality 매우 좋음 - - ExtendedASCII - 확장 ASCII - Switch to advanced mode 고급 모드로 전환 @@ -5335,58 +5359,22 @@ Expect some bugs and minor issues, this version is not meant for production use. Advanced 고급 - - A-Z - A-Z - - - a-z - a-z - - - 0-9 - 0-9 - Braces 괄호 - - {[( - {[( - Punctuation 구두점 - - .,:; - .,:; - Quotes 따옴표 - - " ' - " ' - - - <*+!?= - <*+!?= - - - \_|-/ - \_|-/ - Logograms 로고그램 - - #$%&&@^`~ - #$%&&@^`~ - Character set to exclude from generated password 생성된 암호에서 제외할 문자 집합 @@ -5507,6 +5495,10 @@ Expect some bugs and minor issues, this version is not meant for production use. Regenerate password (%1) 암호 다시 생성(%1) + + Special Characters + 특수 문자 + QApplication 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 @@ Colorful + + You must restart the application to set the new language. Would you like to restart now? + + ApplicationSettingsWidgetGeneral @@ -166,10 +170,6 @@ Automatically save after every change Automatiškai įrašyti po kiekvieno pakeitimo - - Automatically save on exit - Išeinant, automatiškai įrašyti - Automatically reload the database when modified externally Išoriškai modifikavus duomenų bazę, automatiškai įkelti ją iš naujo @@ -304,10 +304,6 @@ Automatically launch KeePassXC at system startup - - Mark database as modified for non-data changes (e.g., expanding groups) - - Safely save database files (disable if experiencing problems with Dropbox, etc.) @@ -344,6 +340,18 @@ Auto-Type start delay: + + Automatically save when locking database + + + + Automatically save non-data changes when locking database + + + + Tray icon type + + ApplicationSettingsWidgetSecurity @@ -4787,6 +4795,26 @@ Expect some bugs and minor issues, this version is not meant for production use. You must restart the application to apply this setting. Would you like to restart now? + + Perform Auto-Type Sequence + + + + {USERNAME} + + + + {USERNAME}{ENTER} + + + + {PASSWORD} + + + + {PASSWORD}{ENTER} + + ManageDatabase @@ -5270,10 +5298,6 @@ Expect some bugs and minor issues, this version is not meant for production use. Password quality Puikus - - ExtendedASCII - - Switch to advanced mode Perjungti į išplėstinę veikseną @@ -5282,58 +5306,22 @@ Expect some bugs and minor issues, this version is not meant for production use. Advanced Išplėstiniai - - A-Z - A-Z - - - a-z - a-z - - - 0-9 - 0-9 - Braces - - {[( - {[( - Punctuation - - .,:; - .,:; - Quotes Kabutės - - " ' - " ' - - - <*+!?= - <*+!?= - - - \_|-/ - \_|-/ - Logograms - - #$%&&@^`~ - #$%&&@^`~ - Character set to exclude from generated password @@ -5454,6 +5442,10 @@ Expect some bugs and minor issues, this version is not meant for production use. Regenerate password (%1) + + Special Characters + Specialūs simboliai + QApplication 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 @@ Colorful + + You must restart the application to set the new language. Would you like to restart now? + + ApplicationSettingsWidgetGeneral @@ -166,10 +170,6 @@ Automatically save after every change Lagre automatisk etter hver endring - - Automatically save on exit - Lagre automatisk ved avslutning - Automatically reload the database when modified externally Last databasen automatisk på nytt hvis den blir endret eksternt @@ -304,10 +304,6 @@ Automatically launch KeePassXC at system startup - - Mark database as modified for non-data changes (e.g., expanding groups) - - Safely save database files (disable if experiencing problems with Dropbox, etc.) @@ -344,6 +340,18 @@ Auto-Type start delay: + + Automatically save when locking database + + + + Automatically save non-data changes when locking database + + + + Tray icon type + + ApplicationSettingsWidgetSecurity @@ -4799,6 +4807,26 @@ Expect some bugs and minor issues, this version is not meant for production use. You must restart the application to apply this setting. Would you like to restart now? + + Perform Auto-Type Sequence + + + + {USERNAME} + + + + {USERNAME}{ENTER} + + + + {PASSWORD} + + + + {PASSWORD}{ENTER} + + ManageDatabase @@ -5282,10 +5310,6 @@ Expect some bugs and minor issues, this version is not meant for production use. Password quality Utmerket - - ExtendedASCII - - Switch to advanced mode Bytt til avansert modus @@ -5294,58 +5318,22 @@ Expect some bugs and minor issues, this version is not meant for production use. Advanced Avansert - - A-Z - A-Z - - - a-z - a-z - - - 0-9 - 0-9 - Braces - - {[( - - Punctuation - - .,:; - - Quotes - - " ' - - - - <*+!?= - - - - \_|-/ - - Logograms - - #$%&&@^`~ - - Character set to exclude from generated password @@ -5466,6 +5454,10 @@ Expect some bugs and minor issues, this version is not meant for production use. Regenerate password (%1) + + Special Characters + Spesialtegn + QApplication 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 @@ Colorful Kleurrijk + + You must restart the application to set the new language. Would you like to restart now? + Je moet de toepassing opnieuw starten om de nieuwe taal in te stellen. Wil je dat nu doen? + ApplicationSettingsWidgetGeneral @@ -166,10 +170,6 @@ Automatically save after every change Automatisch opslaan na iedere wijziging - - Automatically save on exit - Automatisch opslaan bij afsluiten - Automatically reload the database when modified externally Database automatisch opnieuw laden als deze van buitenaf is gewijzigd @@ -304,10 +304,6 @@ Automatically launch KeePassXC at system startup KeePassXC automatisch opstarten met het systeem - - Mark database as modified for non-data changes (e.g., expanding groups) - Database markeren als gewijzigd voor niet-inhoudelijke aanpassingen (bijv. uitbreiding van groepen) - Safely save database files (disable if experiencing problems with Dropbox, etc.) Databasebestanden veilig opslaan (uitschakelen bij problemen met Dropbox, enz.) @@ -344,6 +340,18 @@ Auto-Type start delay: Auto-type startvertraging: + + Automatically save when locking database + Automatisch opslaan bij het vergrendelen van de database + + + Automatically save non-data changes when locking database + Automatisch niet-gegevens wijzigingen opslaan bij het vergrendelen van de database + + + Tray icon type + + ApplicationSettingsWidgetSecurity @@ -1303,7 +1311,7 @@ Om deze fout te voorkomen ga je naar "Database instellingen.../Beveiliging& Enter Additional Credentials (if any): - Voer eventueel additionele inloggegevens in: + Voer eventuele aanvullende inloggegevens in: <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> @@ -1528,7 +1536,7 @@ Dit is alleen nodig als je database een kopie is van een andere en de browserext DatabaseSettingsWidgetDatabaseKey Add additional protection... - Extra beveiliging toevoegen... + Aanvullende beveiliging toevoegen... No password set @@ -1782,7 +1790,7 @@ Als je dit aantal aanhoudt is het mogelijk heel gemakkelijk om de database te kr Additional Database Settings - Extra database-instellingen + Aanvullende database-instellingen Database name field @@ -2290,7 +2298,7 @@ Veilig opslaan uitschakelen en opnieuw proberen? EditEntryWidgetAdvanced Additional attributes - Extra kenmerken + Aanvullende kenmerken Add @@ -2460,7 +2468,7 @@ Veilig opslaan uitschakelen en opnieuw proberen? Additional URL's - Extra URLs + Aanvullende URLs Add @@ -4838,6 +4846,26 @@ Houd rekening met fouten en kleine problemen. Deze versie is niet bedoeld voor r Je moet de applicatie opnieuw opstarten om deze instelling toe te passen. Wil je KeePassXC nu opnieuw opstarten? + + Perform Auto-Type Sequence + Auto-type tekenreeks uitvoeren + + + {USERNAME} + + + + {USERNAME}{ENTER} + + + + {PASSWORD} + + + + {PASSWORD}{ENTER} + + ManageDatabase @@ -5322,10 +5350,6 @@ Wil je KeePassXC nu opnieuw opstarten? Password quality Uitstekend - - ExtendedASCII - Uitgebreid ASCII - Switch to advanced mode Overschakelen naar de geavanceerde modus @@ -5334,58 +5358,22 @@ Wil je KeePassXC nu opnieuw opstarten? Advanced Geavanceerd - - A-Z - A-Z - - - a-z - a-z - - - 0-9 - 0-9 - Braces Haakjes - - {[( - {[( - Punctuation Leestekens - - .,:; - .,:; - Quotes Aanhalingstekens - - " ' - " ' - - - <*+!?= - <*+!? = - - - \_|-/ - \_|-/ - Logograms Special tekens - - #$%&&@^`~ - #$%&&@^`~ - Character set to exclude from generated password Tekenset die niet gebruikt mag worden in het gegenereerde wachtwoord @@ -5506,6 +5494,10 @@ Wil je KeePassXC nu opnieuw opstarten? Regenerate password (%1) Òpnieuw genereren (%1) + + Special Characters + Speciale tekens + QApplication 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 @@ Colorful Kolorowy + + You must restart the application to set the new language. Would you like to restart now? + Musisz zrestartować aplikację, aby ustawić nowy język. Czy chcesz teraz zrestartować? + ApplicationSettingsWidgetGeneral @@ -166,10 +170,6 @@ Automatically save after every change Automatycznie zapisz po każdej zmianie - - Automatically save on exit - Automatycznie zapisz przy wyjściu - Automatically reload the database when modified externally Automatycznie przeładuj bazę danych, gdy zostanie zmodyfikowana zewnętrznie @@ -304,10 +304,6 @@ Automatically launch KeePassXC at system startup Automatycznie uruchom KeePassXC podczas uruchamiania systemu - - Mark database as modified for non-data changes (e.g., expanding groups) - Oznacz bazę danych jako zmodyfikowaną dla zmian innych niż dane (np. rozwijanie grup) - Safely save database files (disable if experiencing problems with Dropbox, etc.) Bezpiecznie zapisuj pliki bazy danych (wyłącz, jeśli występują problemy z Dropboksem itp.) @@ -344,6 +340,18 @@ Auto-Type start delay: Opóźnienie rozpoczęcia autowpisywania: + + Automatically save when locking database + Automatycznie zapisuj podczas blokowania bazy danych + + + Automatically save non-data changes when locking database + Automatycznie zapisuj zmiany niezwiązane z danymi podczas blokowania bazy danych + + + Tray icon type + Typ ikony zasobnika + ApplicationSettingsWidgetSecurity @@ -4842,6 +4850,26 @@ Expect some bugs and minor issues, this version is not meant for production use. You must restart the application to apply this setting. Would you like to restart now? Musisz zrestartować aplikację, aby zastosować to ustawienie. Czy chcesz teraz zrestartować? + + Perform Auto-Type Sequence + Wykonaj sekwencję autowpisywania + + + {USERNAME} + {UŻYTKOWNIK} + + + {USERNAME}{ENTER} + {UŻYTKOWNIK}{ENTER} + + + {PASSWORD} + {HASŁO} + + + {PASSWORD}{ENTER} + {HASŁO}{ENTER} + ManageDatabase @@ -5326,10 +5354,6 @@ Expect some bugs and minor issues, this version is not meant for production use. Password quality Znakomita - - ExtendedASCII - Rozszerzony ASCII - Switch to advanced mode Zmień na tryb zaawansowany @@ -5338,58 +5362,22 @@ Expect some bugs and minor issues, this version is not meant for production use. Advanced Zaawansowane - - A-Z - A-Z - - - a-z - a-z - - - 0-9 - 0-9 - Braces Nawiasy klamrowe - - {[( - {[( - Punctuation Interpunkcja - - .,:; - .,:; - Quotes Cudzysłowy - - " ' - " ' - - - <*+!?= - <*+!?= - - - \_|-/ - \_|-/ - Logograms Logogramy - - #$%&&@^`~ - #$%&&@^`~ - Character set to exclude from generated password Zestaw znaków do wykluczenia w wygenerowanym haśle @@ -5510,6 +5498,10 @@ Expect some bugs and minor issues, this version is not meant for production use. Regenerate password (%1) Wygeneruj ponownie hasło (%1) + + Special Characters + Znaki specjalne + QApplication diff --git a/share/translations/keepassx_pt.ts b/share/translations/keepassx_pt.ts deleted file mode 100644 index b3dce7833..000000000 --- a/share/translations/keepassx_pt.ts +++ /dev/null @@ -1,7851 +0,0 @@ - - - AboutDialog - - About KeePassXC - Sobre o KeePassXC - - - About - Sobre - - - Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> - Reporte os erros em: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> - - - KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. - KeePassXC é distribuído sob os termos da GNU General Public License (GPL) versão 2 ou (em sua opção) versão 3. - - - Contributors - Colaboradores - - - <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> - <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">Consulte os contributos no GitHub</a> - - - Debug Info - Informação de depuração - - - Include the following information whenever you report a bug: - Inclua as seguintes informações sempre que reportar um erro: - - - Copy to clipboard - Copiar para a área de transferência - - - Project Maintainers: - Manutenção do projeto: - - - Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. - Um agradecimento especial da equipa do KeePassXC a debfx por ter criado a aplicação KeePassX. - - - - AgentSettingsWidget - - Use OpenSSH for Windows instead of Pageant - Utilizar OpeSSH for Windows em vez de Pageant - - - Enable SSH Agent integration - - - - SSH_AUTH_SOCK value - - - - SSH_AUTH_SOCK override - - - - (empty) - - - - No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set an override. - - - - SSH Agent connection is working! - - - - - ApplicationSettingsWidget - - Application Settings - Definições da aplicação - - - General - Geral - - - Security - Segurança - - - Access error for config file %1 - Erro de acesso ao ficheiro %1 - - - Icon only - Apenas ícones - - - Text only - Apenas texto - - - Text beside icon - Texto ao lado dos ícones - - - Text under icon - Texto por baixo dos ícones - - - Follow style - Seguir estilo - - - Reset Settings? - - - - Are you sure you want to reset all general and security settings to default? - - - - Monochrome (light) - - - - Monochrome (dark) - - - - Colorful - - - - - ApplicationSettingsWidgetGeneral - - Basic Settings - Definições básicas - - - Startup - Arranque - - - Start only a single instance of KeePassXC - Abrir apenas uma instância do KeepassXC - - - Minimize window at application startup - Minimizar janela ao iniciar a aplicação - - - File Management - Gestão de ficheiros - - - Backup database file before saving - Criar backup da base de dados antes de guardar - - - Automatically save after every change - Guardar automaticamente a cada alteração - - - Automatically save on exit - Guardar automaticamente ao fechar - - - Automatically reload the database when modified externally - Recarregar base de dados se esta for modificada externamente - - - Entry Management - Gestão de entradas - - - Use group icon on entry creation - Utilizar ícone do grupo ao criar a entrada - - - Minimize instead of app exit - Minimizar aplicação em vez de fechar - - - Show a system tray icon - Mostrar ícone na bandeja do sistema - - - Hide window to system tray when minimized - Ao minimizar, ocultar a janela na bandeja do sistema - - - Auto-Type - Escrita automática - - - Use entry title to match windows for global Auto-Type - Utilizar título da entrada para fazer coincidir com a escrita automática - - - Use entry URL to match windows for global Auto-Type - Utilizar URL da entrada para fazer coincidir com a escrita automática - - - Always ask before performing Auto-Type - Perguntar antes de executar a escrita automática - - - ms - Milliseconds - ms - - - Movable toolbar - Barra de ferramentas amovível - - - Remember previously used databases - Lembrar bases de dados usadas anteriormente - - - Load previously open databases on startup - - - - Remember database key files and security dongles - - - - Check for updates at application startup once per week - - - - Include beta releases when checking for updates - - - - Language: - Idioma: - - - (restart program to activate) - - - - Minimize window after unlocking database - - - - Minimize when opening a URL - - - - Hide window when copying to clipboard - - - - Minimize - Minimizar - - - Drop to background - - - - Favicon download timeout: - - - - Website icon download timeout in seconds - - - - sec - Seconds - seg - - - Toolbar button style - - - - Language selection - Seleção de idioma - - - Global auto-type shortcut - - - - Auto-type character typing delay milliseconds - - - - Auto-type start delay milliseconds - - - - Automatically launch KeePassXC at system startup - - - - Mark database as modified for non-data changes (e.g., expanding groups) - - - - Safely save database files (disable if experiencing problems with Dropbox, etc.) - - - - User Interface - - - - Toolbar button style: - - - - Use monospaced font for notes - - - - Tray icon type: - - - - Reset settings to default… - - - - Auto-Type typing delay: - - - - Global Auto-Type shortcut: - - - - Auto-Type start delay: - - - - - ApplicationSettingsWidgetSecurity - - Timeouts - Tempo limite - - - Clear clipboard after - Limpar área de transferência após - - - sec - Seconds - seg - - - Lock databases after inactivity of - Bloquear base de dados se inativa durante - - - min - min - - - Forget TouchID after inactivity of - Esquecer TouchID após inatividade de - - - Convenience - Conveniência - - - Lock databases when session is locked or lid is closed - Bloquear base de dados ao bloquear a sessão ou ao fechar a tampa do portátil - - - Forget TouchID when session is locked or lid is closed - Esquecer TouchID ao bloquear a sessão ou ao fechar a tampa do portátil - - - Lock databases after minimizing the window - Bloquear base de dados ao minimizar a janela - - - Re-lock previously locked database after performing Auto-Type - Bloquear novamente a base de dados depois de usar a escrita automática - - - Hide passwords in the entry preview panel - Ocultar palavras-passe no painel de pré-visualização de entradas - - - Hide entry notes by default - Por definição, ocultar notas da entrada - - - Privacy - Privacidade - - - Use DuckDuckGo service to download website icons - - - - Clipboard clear seconds - - - - Touch ID inactivity reset - - - - Database lock timeout seconds - - - - min - Minutes - min - - - Clear search query after - - - - Require password repeat when it is visible - - - - Hide passwords when editing them - - - - Use placeholder for empty password fields - - - - - AutoType - - Couldn't find an entry that matches the window title: - Não foi encontrada uma entrada coincidente com o título da janela: - - - Auto-Type - KeePassXC - KeePassXC - Escrita automática - - - Auto-Type - Escrita automática - - - The Syntax of your Auto-Type statement is incorrect! - A sintaxe da instrução de escrita automática está errada! - - - This Auto-Type command contains a very long delay. Do you really want to proceed? - O comando de escrita automática tem um atraso muito grande. Deseja mesmo continuar? - - - This Auto-Type command contains very slow key presses. Do you really want to proceed? - O comando de escrita automática tem uma pressão de teclas muito lenta. Deseja mesmo continuar? - - - This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? - O comando de escrita automática contém argumentos que se repetem muitas vezes. Deseja mesmo continuar? - - - Permission Required - - - - KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC. - - - - - AutoTypeAssociationsModel - - Window - Janela - - - Sequence - Sequência - - - Default sequence - Sequência padrão - - - - AutoTypeMatchModel - - Group - Grupo - - - Title - Título - - - Username - Nome de utilizador - - - Sequence - Sequência - - - - AutoTypeMatchView - - Copy &username - Copiar nome de &utilizador - - - Copy &password - Copiar &palavra-passe - - - - AutoTypePlatformMac - - Permission Required - - - - 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. - - - - - AutoTypeSelectDialog - - Auto-Type - KeePassXC - KeePassXC - Escrita automática - - - Select entry to Auto-Type: - Selecionar entrada para escrita automática: - - - Search... - Pesquisa... - - - - BrowserAccessControlDialog - - KeePassXC - Browser Access Request - - - - %1 is requesting access to the following entries: - - - - Remember access to checked entries - - - - Remember - - - - Allow access to entries - - - - Allow Selected - - - - Deny All - - - - Disable for this site - - - - - BrowserEntrySaveDialog - - KeePassXC-Browser Save Entry - KeePassXC-Browser - Guardar entrada - - - Ok - Aceitar - - - Cancel - Cancelar - - - You have multiple databases open. -Please select the correct database for saving credentials. - Existem várias bases de dados abertas. -Selecione a base de dados correta para guardar as credenciais. - - - - BrowserService - - KeePassXC: New key association request - KeePassXC: Pedido de associação da nova chave - - - Save and allow access - Guardar e permitir acesso - - - KeePassXC: Overwrite existing key? - KeePassXC: Substituir chave existente? - - - A shared encryption key with the name "%1" already exists. -Do you want to overwrite it? - Já existe uma chave de cifra partilhada com o nome "%1". -Deseja substituir a chave existente? - - - KeePassXC: Update Entry - KeePassXC: Atualizar entrada - - - Do you want to update the information in %1 - %2? - Deseja atualizar as informações em %1 - %2? - - - Abort - Abortar - - - Converting attributes to custom data… - A converter atributos para dados personalizados... - - - KeePassXC: Converted KeePassHTTP attributes - KeePassXC: Atributos KeePassHTTP convertidos - - - Successfully converted attributes from %1 entry(s). -Moved %2 keys to custom data. - Os atributos para %1 entrada(s) foram convertidos. -%2 chaves movidas para dados personalizados. - - - Successfully moved %n keys to custom data. - %n chave movida para dados personalizados.%n chaves movidas para dados personalizados. - - - KeePassXC: No entry with KeePassHTTP attributes found! - KeePassXC: Não existem entradas com atributos KeePassHTTP! - - - The active database does not contain an entry with KeePassHTTP attributes. - A base de dados ativa não tem entradas com atributos KePassHTTP. - - - KeePassXC: Legacy browser integration settings detected - KeePassXC: Detetadas definições de integração legada com o navegador - - - KeePassXC: Create a new group - KeePassXC: criar um novo grupo - - - A request for creating a new group "%1" has been received. -Do you want to create this group? - - Foi recebido um pedido para a criação do grupo "%1". -Quer criar este grupo? - - - - Your KeePassXC-Browser settings need to be moved into the database settings. -This is necessary to maintain your current browser connections. -Would you like to migrate your existing settings now? - Tem que mover as 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? - - - Don't show this warning again - Não mostrar novamente - - - You have received an association request for the following database: -%1 - -Give the connection a unique name or ID, for example: -chrome-laptop. - - - - - BrowserSettingsWidget - - Dialog - Diálogo - - - This is required for accessing your databases with KeePassXC-Browser - Isto é necessário para aceder às suas bases de dados com KeePassXC-Browser - - - Enable browser integration - - - - General - Geral - - - Browsers installed as snaps are currently not supported. - - - - Enable integration for these browsers: - Ativar integração para estes navegadores: - - - Vivaldi - - - - &Edge - - - - Firefox - - - - Tor Browser - - - - Brave - - - - Google Chrome - - - - Chromium - - - - Show a notification when credentials are requested - Credentials mean login data requested via browser extension - - - - Request to unlock the database if it is locked - - - - Only entries with the same scheme (http://, https://, ...) are returned. - Apenas serão devolvidas as entradas com o mesmo esquema (http://, https://, ...). - - - Match URL scheme (e.g., https://...) - - - - Only returns the best matches for a specific URL instead of all entries for the whole domain. - Apenas devolve as melhores entradas para o URL específico em vez das entradas para o domínio. - - - Return only best-matching credentials - - - - Returns expired credentials. String [expired] is added to the title. - - - - Allow returning expired credentials - - - - All databases connected to the extension will return matching credentials. - - - - Search in all opened databases for matching credentials - Credentials mean login data requested via browser extension - - - - Sort matching credentials by title - Credentials mean login data requested via browser extension - - - - Sort matching credentials by username - Credentials mean login data requested via browser extension - - - - Advanced - Avançado - - - Never ask before accessing credentials - Credentials mean login data requested via browser extension - - - - Never ask before updating credentials - Credentials mean login data requested via browser extension - - - - Do not ask permission for HTTP Basic Auth - An extra HTTP Basic Auth setting - - - - Automatically creating or updating string fields is not supported. - A criação ou atualização dos campos de cadeias não é suportada. - - - Return advanced string fields which start with "KPH: " - - - - Don't display the popup suggesting migration of legacy KeePassHTTP settings. - - - - Do not prompt for KeePassHTTP settings migration. - - - - Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. - Atualiza automaticamente o caminho do KeePassXC ou do caminho do binário keepassxc-proxy para os 'sripts' nativos de mensagens ao iniciar. - - - Update native messaging manifest files at startup - - - - Use a custom proxy location if you installed a proxy manually. - Utilize um proxy personalizado caso o tenha instalado manualmente. - - - Use a custom proxy location: - Meant is the proxy for KeePassXC-Browser - - - - Custom proxy location field - - - - Browser for custom proxy file - - - - Browse... - Button for opening file dialog - Procurar... - - - Use a custom browser configuration location: - - - - Browser type: - - - - Toolbar button style - - - - Config Location: - - - - Custom browser location field - - - - ~/.custom/config/Mozilla/native-messaging-hosts/ - - - - Browse for custom browser path - - - - Custom extension ID: - - - - Custom extension ID - - - - Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 - Devido a 'Snap sandboxing', tem que executar um script para ativar a integração com o navegador.<br />Pode obter este script em %1. - - - KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 - - - - Please see special instructions for browser extension use below - Por favor consulte as instruções para a utilização da extensão abaixo - - - <b>Error:</b> The custom proxy location cannot be found!<br/>Browser integration WILL NOT WORK without the proxy application. - - - - <b>Warning:</b> The following options can be dangerous! - <b>AVISO</b>: as opções seguintes podem ser perigosas! - - - Executable Files - Ficheiros executáveis - - - All Files - Todos os ficheiros - - - Select custom proxy location - Selecionar localização do proxy personalizado - - - Select native messaging host folder location - - - - - CloneDialog - - Clone Options - Opções de clonagem - - - Append ' - Clone' to title - Adicionar ' -Clone' ao título - - - Replace username and password with references - Substituir nome de utilizador e palavra-passe por referências - - - Copy history - Histórico de cópias - - - - CsvImportWidget - - Import CSV fields - Importar campos do CSV - - - filename - nome do ficheiro - - - size, rows, columns - tamanho, linhas, colunas - - - Encoding - Codificação - - - Codec - Codificador - - - Text is qualified by - Texto qualificado por - - - Fields are separated by - Campos separados por - - - Comments start with - Comentários iniciados por - - - Consider '\' an escape character - Considerar '\' como carácter de escape - - - Preview - Antevisão - - - Imported from CSV file - Importar de ficheiro CSV - - - Original data: - Dados originais: - - - Error - Erro - - - Error(s) detected in CSV file! - Detetado(s) erro(s) no ficheiro CSV! - - - [%n more message(s) skipped] - [%n mensagem ignorada][%n mensagens ignoradas] - - - CSV import: writer has errors: -%1 - Importação CSV com erros: -%1 - - - Text qualification - - - - Field separation - - - - Number of header lines to discard - - - - CSV import preview - - - - Column Association - - - - Last Modified - Última modificação - - - Password - Palavra-passe - - - Created - Criada - - - Notes - Notas - - - Title - Título - - - Group - Grupo - - - URL - URL - - - Username - Nome de utilizador - - - Header lines skipped - - - - First line has field names - - - - Not Present - - - - Column %1 - - - - - CsvParserModel - - %n column(s) - %n coluna,%n coluna(s), - - - %1, %2, %3 - file info: bytes, rows, columns - %1, %2, %3 - - - %n byte(s) - %n byte%n bytes - - - %n row(s) - %n linha%n linhas - - - - Database - - File %1 does not exist. - %1 não existe. - - - Unable to open file %1. - Não foi possível abrir o ficheiro %1. - - - Error while reading the database: %1 - Erro ao ler a base de dados: %1 - - - File cannot be written as it is opened in read-only mode. - Não é possível escrever no ficheiro porque este foi aberto no modo de leitura. - - - Key not transformed. This is a bug, please report it to the developers! - Chave não transformada. Isto é um erro e deve ser reportado aos programadores! - - - %1 -Backup database located at %2 - - - - Could not save, database does not point to a valid file. - - - - Could not save, database file is read-only. - - - - Database file has unmerged changes. - - - - Recycle Bin - Reciclagem - - - Passwords - Root group name - Palavras-passe - - - Database save is already in progress. - - - - Could not save, database has not been initialized! - - - - - DatabaseOpenDialog - - Unlock Database - KeePassXC - KeePassXC - Desbloquear base de dados - - - - DatabaseOpenWidget - - Key File: - Ficheiro-chave: - - - Refresh - Recarregar - - - Legacy key file format - Ficheiro-chave no formato legado - - - You are using a legacy key file format which may become -unsupported in the future. - -Please consider generating a new key file. - Está a utilizar um formato legado que pode, no futuro, deixar -de ser suportado. - -Deve considerar a geração de um novo ficheiro-chave. - - - Don't show this warning again - Não mostrar novamente - - - All files - Todos os ficheiros - - - Key files - Ficheiros-chave - - - Select key file - Selecione o ficheiro-chave - - - Failed to open key file: %1 - - - - Unlock KeePassXC Database - - - - Enter Password: - - - - Password field - - - - Hardware key slot selection - - - - Browse for key file - - - - Browse... - Procurar... - - - Refresh hardware tokens - - - - Hardware Key: - - - - Hardware key help - - - - TouchID for Quick Unlock - - - - Clear - Limpar - - - Clear Key File - - - - Unlock failed and no password given - - - - Unlocking the database failed and you did not enter a password. -Do you want to retry with an "empty" password instead? - -To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password. - - - - Retry with empty password - - - - Enter Additional Credentials (if any): - - - - <p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p> -<p>Click for more information...</p> - - - - Key file help - - - - ? - - - - Cannot use database file as key file - - - - You cannot use your database file as a key file. -If you do not have a key file, please leave the field empty. - - - - <p>In addition to a password, you can use a secret file to enhance the security of your database. This file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave this field empty.</p><p>Click for more information...</p> - - - - Key file to unlock the database - - - - Please touch the button on your YubiKey! - Toque no botão da sua YubiKey! - - - Detecting hardware keys… - - - - No hardware keys detected - - - - Select hardware key… - - - - - DatabaseSettingWidgetMetaData - - Passwords - Palavras-passe - - - - DatabaseSettingsDialog - - Advanced Settings - Definições avançadas - - - General - Geral - - - Security - Segurança - - - Encryption Settings - Definições de cifra - - - Browser Integration - Integração com navegador - - - Database Credentials - - - - - DatabaseSettingsWidgetBrowser - - KeePassXC-Browser settings - Definições KeePassXC-Browser - - - Stored keys - Chaves guardadas - - - Remove - Remover - - - Delete the selected key? - Eliminar a chave selecionada? - - - Do you really want to delete the selected key? -This may prevent connection to the browser plugin. - Tem a certeza de que deseja eliminar a chave selecionada? -Esta ação pode impedir a ligação ao suplemento do navegador. - - - Key - Chave - - - Value - Valor - - - Enable Browser Integration to access these settings. - Ative a integração com o navegador para aceder a estas definições. - - - Disconnect all browsers - Desconectar de todos os navegadores - - - Do you really want to disconnect all browsers? -This may prevent connection to the browser plugin. - Tem a certeza de que deseja desconectar todos os navegadores? -Esta ação pode interferir com a ligação ao suplemento. - - - KeePassXC: No keys found - KeePassXC: Nenhuma chave encontrada - - - No shared encryption keys found in KeePassXC settings. - Não foram encontradas chaves de cifra nas definições do KeePassXC. - - - KeePassXC: Removed keys from database - KeePassXC: Chaves removidas da base de dados - - - Successfully removed %n encryption key(s) from KeePassXC settings. - Removida com sucesso %n chave de cifra das definições do KeePassXC.Removidas com sucesso %n chaves de cifra das definições do KeePassXC. - - - Forget all site-specific settings on entries - Esquecer definições específicas dos sites (nas entradas) - - - Do you really want forget all site-specific settings on every entry? -Permissions to access entries will be revoked. - Tem a certeza de que deseja esquecer as definições específicas de todas as entradas? -Serão removidas todas as permissões para aceder às entradas. - - - Removing stored permissions… - A remover permissões guardadas... - - - Abort - Abortar - - - KeePassXC: Removed permissions - KeePassXC: Permissões removidas - - - Successfully removed permissions from %n entry(s). - Removidas com sucesso as permissões de %n entrada.Removidas com sucesso as permissões de %n entradas. - - - KeePassXC: No entry with permissions found! - KeePassXC: Não existem entradas com permissões! - - - The active database does not contain an entry with permissions. - A base de dados ativa não contém uma entrada com permissões. - - - Move KeePassHTTP attributes to custom data - Mover atributos KeePassHTTP para dados personalizados - - - Do you really want to move all legacy browser integration data to the latest standard? -This is necessary to maintain compatibility with the browser plugin. - Tem a certeza de que deseja atualizar todos os dados legados para a versão mais recente? -Esta atualização é necessária para manter a compatibilidade com o suplemento. - - - Stored browser keys - - - - Remove selected key - - - - Move KeePassHTTP attributes to KeePassXC-Browser custom data - - - - Refresh database root group ID - - - - Created - Criada - - - Refresh database ID - - - - Do you really want refresh the database ID? -This is only necessary if your database is a copy of another and the browser extension cannot connect. - - - - - DatabaseSettingsWidgetDatabaseKey - - Add additional protection... - Adicionar proteção extra... - - - No password set - Palavra-passe não definida - - - WARNING! You have not set a password. Using a database without a password is strongly discouraged! - -Are you sure you want to continue without a password? - AVISO! Não definiu uma palavra-passe. Não deve utilizar uma base de dados que não tenha uma palavra-passe definida! - -Tem a certeza de que deseja continuar? - - - Continue without password - - - - No encryption key added - Chave de cifra não adicionada - - - You must add at least one encryption key to secure your database! - Tem que adicionar, pelo menos, uma chave de cifra para proteger a sua base de dados! - - - Unknown error - Erro desconhecido - - - Failed to change database credentials - - - - - DatabaseSettingsWidgetEncryption - - Encryption Algorithm: - Algoritmo de cifra: - - - AES: 256 Bit (default) - AES: 256 bits (padrão) - - - Twofish: 256 Bit - Twofish: 256 bits - - - Key Derivation Function: - Função derivação de chave: - - - Transform rounds: - Ciclos de transformação: - - - Memory Usage: - Utilização de memória: - - - Parallelism: - Paralelismo: - - - Decryption Time: - Tempo para decifrar: - - - ?? s - ?? s - - - Change - Alterar - - - Higher values offer more protection, but opening the database will take longer. - Os valores mais altos oferecem mais proteção mas também pode demorar mais tempo para abrir a base de dados. - - - Database format: - Formato da base de dados: - - - This is only important if you need to use your database with other programs. - Apenas relevante se necessitar de utilizar a base de dados com outros programas. - - - KDBX 4.0 (recommended) - KDBX 4.0 (recomendado) - - - KDBX 3.1 - KDBX 3.1 - - - unchanged - Database decryption time is unchanged - inalterado - - - Number of rounds too high - Key transformation rounds - Número de ciclos muito alto - - - You are using a very high number of key transform rounds with Argon2. - -If you keep this number, your database may take hours or days (or even longer) to open! - Está a utilizar um número muito alto para a transformação de chaves com Argon2. - -Se mantiver este número, a sua base de dados pode levar muitas horas/dias (ou ainda mais) para ser aberta! - - - Understood, keep number - Percebi, manter número - - - Cancel - Cancelar - - - Number of rounds too low - Key transformation rounds - Número de ciclos muito baixo - - - You are using a very low number of key transform rounds with AES-KDF. - -If you keep this number, your database may be too easy to crack! - Está a utilizar um número muito baixo para a transformação de chaves com Argon2. - -Se mantiver este número, a sua base de dados pode ser desbloqueada muito facilmente! - - - KDF unchanged - KDF inalterado - - - Failed to transform key with new KDF parameters; KDF unchanged. - Erro ao transformar a chave com os novos parâmetros KDF; KDF inalterado. - - - MiB - Abbreviation for Mebibytes (KDF settings) - MiB MiB - - - thread(s) - Threads for parallel execution (KDF settings) - processoprocessos - - - Change existing decryption time - - - - Decryption time in seconds - - - - Database format - - - - Encryption algorithm - - - - Key derivation function - - - - Transform rounds - - - - Memory usage - - - - Parallelism - - - - ?? ms - - - - ? s - - - - - DatabaseSettingsWidgetFdoSecrets - - Exposed Entries - - - - Don't expose this database - - - - Expose entries under this group: - - - - Enable Secret Service to access these settings. - - - - - DatabaseSettingsWidgetGeneral - - Database Meta Data - Meta-dados da base de dados - - - Database name: - Nome da base de dados: - - - Database description: - Descrição da base de dados: - - - Default username: - Nome de utilizador padrão: - - - History Settings - Definições do histórico - - - Max. history items: - Número máximo de itens no histórico: - - - Max. history size: - Tamanho máximo para o histórico: - - - MiB - MiB - - - Use recycle bin - Utilizar reciclagem - - - Additional Database Settings - Definições extra para a base de dados - - - Database name field - - - - Database description field - - - - Default username field - - - - Maximum number of history items per entry - - - - Maximum size of history per entry - - - - Delete Recycle Bin - - - - Do you want to delete the current recycle bin and all its contents? -This action is not reversible. - - - - (old) - - - - Enable compression (recommended) - - - - - DatabaseSettingsWidgetKeeShare - - Sharing - Partilha - - - Breadcrumb - Breadcrumb - - - Type - Tipo - - - Path - Caminho - - - Last Signer - Último signatário - - - Certificates - Certificados - - - > - Breadcrumb separator - > - - - - DatabaseSettingsWidgetMetaDataSimple - - Database Name: - Nome da base de dados: - - - Description: - Descrição: - - - Database name field - - - - Database description field - - - - - DatabaseTabWidget - - KeePass 2 Database - Base de dados do KeePass 2 - - - All files - Todos os ficheiros - - - Open database - Abrir base de dados - - - CSV file - Ficheiro CSV - - - Merge database - Combinar base de dados - - - Open KeePass 1 database - Abrir base de dados do KeePass 1 - - - KeePass 1 database - Base de dados do KeePass 1 - - - Export database to CSV file - Exportar base de dados para ficheiro CSV - - - Writing the CSV file failed. - Erro ao escrever no ficheiro CSV. - - - Database creation error - Erro ao criar a base de dados - - - The created database has no key or KDF, refusing to save it. -This is definitely a bug, please report it to the developers. - A base de dados criada não tem chave ou KDF e não pode ser guardada. -Existe aqui um erro que deve ser reportado aos programadores. - - - Select CSV file - Selecionar ficheiro CSV - - - New Database - Nova base de dados - - - %1 [New Database] - Database tab name modifier - %1 [Nova base de dados] - - - %1 [Locked] - Database tab name modifier - %1 [Bloqueada] - - - %1 [Read-only] - Database tab name modifier - %1 [Apenas leitura] - - - Failed to open %1. It either does not exist or is not accessible. - - - - Export database to HTML file - - - - HTML file - - - - Writing the HTML file failed. - - - - Export Confirmation - - - - You are about to export your database to an unencrypted file. This will leave your passwords and sensitive information vulnerable! Are you sure you want to continue? - - - - Open OPVault - - - - - DatabaseWidget - - Searching... - Pesquisar.. - - - Do you really want to delete the entry "%1" for good? - Tem a certeza de que deseja eliminar permanentemente a entrada "%1"? - - - Do you really want to move entry "%1" to the recycle bin? - Tem a certeza de que deseja mover a entrada "%1" para a reciclagem? - - - Do you really want to move %n entry(s) to the recycle bin? - Tem a certeza de que deseja mover %n entrada para a reciclagem?Tem a certeza de que deseja mover %n entradas para a reciclagem? - - - Execute command? - Executar comando? - - - Do you really want to execute the following command?<br><br>%1<br> - Tem a certeza de que deseja executar este comando?<br><br>%1<br> - - - Remember my choice - Memorizar escolha - - - Do you really want to delete the group "%1" for good? - Tem a certeza de que deseja eliminar permanentemente o grupo "%1"? - - - No current database. - Nenhuma base de dados. - - - No source database, nothing to do. - Não existe base de dados de origem, nada a fazer. - - - Search Results (%1) - Resultados da pesquisa (%1) - - - No Results - Sem resultados - - - File has changed - Ficheiro alterado - - - The database file has changed. Do you want to load the changes? - O ficheiro da base de dados foi alterado. Deseja carregar as alterações? - - - Merge Request - Pedido de combinação - - - The database file has changed and you have unsaved changes. -Do you want to merge your changes? - A base de dados foi alterada e tem alterações não guardadas. -Deseja combinar as suas alterações? - - - Empty recycle bin? - Limpar reciclagem? - - - Are you sure you want to permanently delete everything from your recycle bin? - Tem a certeza de que deseja eliminar permanentemente os itens da reciclagem? - - - Do you really want to delete %n entry(s) for good? - Tem a certeza de que deseja eliminar %n entrada?Tem a certeza de que deseja eliminar %n entradas? - - - Delete entry(s)? - Eliminar entrada?Eliminar entradas? - - - Move entry(s) to recycle bin? - Mover entrada para a reciclagem?Mover entradas para a reciclagem? - - - Lock Database? - Bloquear base de dados? - - - You are editing an entry. Discard changes and lock anyway? - Está a editar uma entrada. Rejeitar alterações e bloquear? - - - "%1" was modified. -Save changes? - "%1" foi modificada. -Guardar alterações? - - - Database was modified. -Save changes? - A base de dados foi modificada. -Guardar alterações? - - - Save changes? - Guardar alterações? - - - Could not open the new database file while attempting to autoreload. -Error: %1 - Não foi possível abrir a nova base de dados durante o carregamento -Erro: %1 - - - Disable safe saves? - Desativar salvaguardas? - - - KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file. -Disable safe saves and try again? - O KeePassXC não conseguiu guardar a base de dados múltiplas vezes. Muito provavelmente, os serviços de sincronização não o permitiram. -Desativar salvaguardas e tentar novamente? - - - Passwords - Palavras-passe - - - Save database as - Guardar base de dados como - - - KeePass 2 Database - Base de dados do KeePass 2 - - - Replace references to entry? - Substituir referências na entrada? - - - Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway? - A entrada "%1" tem %2 referência. Deseja substituir as referências com valores, ignorar a entrada ou eliminar?A entrada "%1" tem %2 referências. Deseja substituir as referências com valores, ignorar a entrada ou eliminar? - - - Delete group - Eliminar grupo - - - Move group to recycle bin? - Mover grupo para a reciclagem? - - - Do you really want to move the group "%1" to the recycle bin? - Tem a certeza de que deseja mover o grupo "%1" para a reciclagem? - - - Successfully merged the database files. - Bases de dados combinadas com sucesso. - - - Database was not modified by merge operation. - A base de dados não foi alterada pela combinação. - - - Shared group... - Grupo partilhado... - - - Writing the database failed: %1 - Erro ao escrever na base de dados: %1 - - - This database is opened in read-only mode. Autosave is disabled. - - - - Save database backup - - - - Could not find database file: %1 - - - - - EditEntryWidget - - Entry - Entrada - - - Advanced - Avançado - - - Icon - Ícone - - - Auto-Type - Escrita automática - - - Properties - Propriedades - - - History - Histórico - - - SSH Agent - Agente SSH - - - n/a - n/d - - - (encrypted) - (cifrada) - - - Select private key - Selecionar chave privada - - - Entry history - Histórico da entrada - - - Add entry - Adicionar entrada - - - Edit entry - Editar entrada - - - New attribute - Novo atributo - - - Are you sure you want to remove this attribute? - Tem a certeza de que deseja remover este atributo? - - - Tomorrow - Amanhã - - - %n week(s) - %n semana%n semanas - - - %n month(s) - %n mês%n meses - - - Entry updated successfully. - Entrada atualizada com sucesso. - - - New attribute %1 - Novo atributo %1 - - - %n year(s) - %n ano%n anos - - - Confirm Removal - Confirmação de remoção - - - Browser Integration - Integração com navegador - - - <empty URL> - - - - Are you sure you want to remove this URL? - - - - Reveal - Revelar - - - Hide - - - - Unsaved Changes - - - - Would you like to save changes to this entry? - - - - [PROTECTED] Press Reveal to view or edit - - - - - EditEntryWidgetAdvanced - - Additional attributes - Atributos adicionais - - - Add - Adicionar - - - Remove - Remover - - - Edit Name - Editar nome - - - Protect - Proteger - - - Reveal - Mostrar - - - Attachments - Anexos - - - Foreground Color: - Cor principal: - - - Background Color: - Cor secundária: - - - Attribute selection - - - - Attribute value - - - - Add a new attribute - - - - Remove selected attribute - - - - Edit attribute name - - - - Toggle attribute protection - - - - Show a protected attribute - - - - Foreground color selection - - - - Background color selection - - - - <html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html> - - - - Exclude from database reports - - - - - EditEntryWidgetAutoType - - Enable Auto-Type for this entry - Ativar escrita automática para esta entrada - - - Window Associations - Associação de janelas - - - + - + - - - - - - - - - Window title: - Título da janela: - - - Use a specific sequence for this association: - Utilizar sequência específica para esta associação: - - - Custom Auto-Type sequence - - - - Open Auto-Type help webpage - - - - Existing window associations - - - - Add new window association - - - - Remove selected window association - - - - You can use an asterisk (*) to match everything - - - - Set the window association title - - - - You can use an asterisk to match everything - - - - Custom Auto-Type sequence for this window - - - - Inherit default Auto-Type sequence from the group - - - - Use custom Auto-Type sequence: - - - - - EditEntryWidgetBrowser - - These settings affect to the entry's behaviour with the browser extension. - - - - General - Geral - - - Skip Auto-Submit for this entry - - - - Hide this entry from the browser extension - - - - Additional URL's - - - - Add - Adicionar - - - Remove - Remover - - - Edit - - - - Only send this setting to the browser for HTTP Auth dialogs. If enabled, normal login forms will not show this entry for selection. - - - - Use this entry only with HTTP Basic Auth - - - - - EditEntryWidgetHistory - - Show - Mostrar - - - Restore - Restaurar - - - Delete - Eliminar - - - Delete all - Eliminar tudo - - - Entry history selection - - - - Show entry at selected history state - - - - Restore entry to selected history state - - - - Delete selected history state - - - - Delete all history - - - - - EditEntryWidgetMain - - URL: - URL: - - - Password: - Palavra-passe: - - - Title: - Título: - - - Presets - Predefinições - - - Toggle the checkbox to reveal the notes section. - Alternar caixa de seleção para mostrar a secção de notas. - - - Username: - Nome de utilizador: - - - Url field - - - - Download favicon for URL - - - - Password field - - - - Toggle notes visible - - - - Expiration field - - - - Expiration Presets - - - - Expiration presets - - - - Notes field - - - - Title field - - - - Username field - - - - Toggle expiration - - - - Notes: - - - - https://example.com - - - - Expires: - - - - - EditEntryWidgetSSHAgent - - Form - Formulário - - - Remove key from agent after - Remover chave do agente depois de - - - seconds - segundos - - - Fingerprint - Impressão digital - - - Remove key from agent when database is closed/locked - Remover chave do agente ao fechar/bloquear a base de dados - - - Public key - Chave pública - - - Add key to agent when database is opened/unlocked - Adicionar chave ao agente ao abrir/desbloquear a base de dados - - - Comment - Comentário - - - Decrypt - Decifrar - - - n/a - n/d - - - Copy to clipboard - Copiar para a área de transferência - - - Private key - Chave privada - - - External file - Ficheiro externo - - - Browse... - Button for opening file dialog - Procurar... - - - Attachment - Anexo - - - Add to agent - Adicionar ao agente - - - Remove from agent - Remover do agente - - - Require user confirmation when this key is used - Solicitar confirmação para utilizar esta chave - - - Remove key from agent after specified seconds - - - - Browser for key file - - - - External key file - - - - Select attachment file - - - - - EditGroupWidget - - Group - Grupo - - - Icon - Ícone - - - Properties - Propriedades - - - Add group - Adicionar grupo - - - Edit group - Editar grupo - - - Enable - Ativar - - - Disable - Desativar - - - Inherit from parent group (%1) - Herdar do grupo (%1) - - - Entry has unsaved changes - A entrada tem alterações por guardar - - - - EditGroupWidgetKeeShare - - Type: - Tipo: - - - Path: - Caminho: - - - Password: - Palavra-passe: - - - Inactive - Inativo - - - KeeShare unsigned container - Contentor KeeShare não assinado - - - KeeShare signed container - Contentor KeeShare assinado - - - Select import source - Selecione a origem da importação - - - Select export target - Selecione o destino da exportação - - - Select import/export file - Selecione o ficheiro de importação/exportação - - - Clear - Limpar - - - Import - Importar - - - Export - Exportar - - - Synchronize - - - - Your KeePassXC version does not support sharing this container type. -Supported extensions are: %1. - - - - %1 is already being exported by this database. - - - - %1 is already being imported by this database. - - - - %1 is being imported and exported by different groups in this database. - - - - KeeShare is currently disabled. You can enable import/export in the application settings. - KeeShare is a proper noun - - - - Database export is currently disabled by application settings. - - - - Database import is currently disabled by application settings. - - - - Sharing mode field - - - - Path to share file field - - - - Password field - - - - Clear fields - - - - Browse for share file - - - - Browse... - Procurar... - - - - EditGroupWidgetMain - - Name field - - - - Notes field - - - - Toggle expiration - - - - Auto-Type toggle for this and sub groups - - - - Expiration field - - - - Search toggle for this and sub groups - - - - Default auto-type sequence field - - - - Expires: - - - - Use default Auto-Type sequence of parent group - - - - Auto-Type: - - - - Search: - - - - Notes: - - - - Name: - - - - Set default Auto-Type sequence - - - - - EditWidgetIcons - - Add custom icon - Adicionar ícone personalizado - - - Delete custom icon - Eliminar ícone personalizado - - - Download favicon - Descarregar 'favicon' - - - Unable to fetch favicon. - Não foi possível obter o 'favicon'. - - - Images - Imagens - - - All files - Todos os ficheiros - - - Confirm Delete - Confirmação de eliminação - - - Select Image(s) - Selecionar imagens - - - Successfully loaded %1 of %n icon(s) - %1 de %n ícones carregado com sucesso.%1 de %n ícones carregados com sucesso. - - - No icons were loaded - Não foram carregados ícones - - - %n icon(s) already exist in the database - %n ícone já existe na sua base de dados.%n ícones já existem na sua base de dados. - - - The following icon(s) failed: - O ícone seguinte falhou:Os ícones seguintes falharam: - - - This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it? - Este ícone é utilizado por % entrada e será substituído pelo ícone padrão. Tem a certeza de que deseja eliminar o ícone?Este ícone é utilizado por % entradas e será substituído pelo ícone padrão. Tem a certeza de que deseja eliminar o ícone? - - - You can enable the DuckDuckGo website icon service under Tools -> Settings -> Security - - - - Download favicon for URL - - - - Apply selected icon to subgroups and entries - - - - Also apply to child groups - - - - Also apply to child entries - - - - Also apply to all children - - - - Existing icon selected. - - - - Use default icon - - - - Use custom icon - - - - Apply icon to... - - - - Apply to this group only - - - - - EditWidgetProperties - - Created: - Criada: - - - Modified: - Modificada: - - - Accessed: - Acedida: - - - Uuid: - UUID: - - - Plugin Data - Dados do suplemento - - - Remove - Remover - - - Delete plugin data? - Eliminar dados do suplemento? - - - Do you really want to delete the selected plugin data? -This may cause the affected plugins to malfunction. - Tem a certeza de que deseja eliminar os dados do suplemento? -Esta ação pode implicar um funcionamento errático. - - - Key - Chave - - - Value - Valor - - - Datetime created - - - - Datetime modified - - - - Datetime accessed - - - - Unique ID - - - - Plugin data - - - - Remove selected plugin data - - - - - Entry - - %1 - Clone - %1 - Clone - - - - EntryAttachmentsModel - - Name - Nome - - - Size - Tamanho - - - - EntryAttachmentsWidget - - Form - Formulário - - - Add - Adicionar - - - Remove - Remover - - - Open - Abrir - - - Save - Guardar - - - Select files - Selecionar ficheiros - - - Are you sure you want to remove %n attachment(s)? - Tem a certeza de que deseja remover %n anexo?Tem a certeza de que deseja remover %n anexos? - - - Save attachments - Guardar anexos - - - Unable to create directory: -%1 - Não foi possível criar o diretório: -%1 - - - Are you sure you want to overwrite the existing file "%1" with the attachment? - Tem a certeza de que deseja substituir o ficheiro "%1" pelo anexo? - - - Confirm overwrite - Confirmação de substituição - - - Unable to save attachments: -%1 - Não foi possível guardar os anexos: -%1 - - - Unable to open attachment: -%1 - Não foi possível abrir o anexo: -%1 - - - Unable to open attachments: -%1 - Não foi possível abrir os anexos: -%1 - - - Confirm remove - Confirmação de remoção - - - Unable to open file(s): -%1 - Não foi possível abrir o ficheiro: -%1Não foi possível abrir os ficheiros: -%1 - - - Attachments - Anexos - - - Add new attachment - - - - Remove selected attachment - - - - Open selected attachment - - - - Save selected attachment to disk - - - - %1 is a big file (%2 MB). -Your database may get very large and reduce performance. - -Are you sure to add this file? - - - - Confirm Attachment - - - - - EntryAttributesModel - - Name - Nome - - - - EntryHistoryModel - - Last modified - Última modificação - - - Title - Título - - - Username - Nome de utilizador - - - URL - URL - - - - EntryModel - - Ref: - Reference abbreviation - Ref: - - - Group - Grupo - - - Title - Título - - - Username - Nome de utilizador - - - URL - URL - - - Never - Nunca - - - Password - Palavra-passe - - - Notes - Notas - - - Expires - Expira - - - Created - Criada - - - Modified - Modificada - - - Accessed - Acedida - - - Attachments - Anexos - - - Size - Tamanho - - - Group name - - - - Entry title - - - - Entry notes - - - - Entry expires at - - - - Creation date - - - - Last modification date - - - - Last access date - - - - Attached files - - - - Entry size - - - - Has attachments - - - - Has TOTP one-time password - - - - - EntryPreviewWidget - - Close - Fechar - - - General - Geral - - - Username - Nome de utilizador - - - Password - Palavra-passe - - - Expiration - Expira - - - URL - URL - - - Attributes - Atributos - - - Attachments - Anexos - - - Notes - Notas - - - Autotype - Escrita automática - - - Window - Janela - - - Sequence - Sequência - - - Searching - Pesquisa - - - Search - Pesquisa - - - Clear - Limpar - - - Never - Nunca - - - [PROTECTED] - [PROTEGIDA] - - - <b>%1</b>: %2 - attributes line - <b>%1</b>: %2 - - - Enabled - Ativada - - - Disabled - Desativada - - - Share - Partilhar - - - Display current TOTP value - - - - Advanced - Avançado - - - - EntryURLModel - - Invalid URL - - - - - EntryView - - Customize View - Vista personalizada - - - Hide Usernames - Ocultar nome de utilizador - - - Hide Passwords - Ocultar palavras-passe - - - Fit to window - Ajustar à janela - - - Fit to contents - Ajustar ao conteúdo - - - Reset to defaults - Repor predefinições - - - Has attachments - Entry attachment icon toggle - - - - Has TOTP - Entry TOTP icon toggle - - - - - FdoSecrets::Item - - Entry "%1" from database "%2" was used by %3 - - - - - FdoSecrets::Service - - %n Entry(s) was used by %1 - %1 is the name of an application - - - - Failed to register DBus service at %1.<br/> - - - - - FdoSecrets::SettingsDatabaseModel - - File Name - - - - Group - Grupo - - - Manage - - - - Unlock to show - - - - None - Nada - - - - FdoSecrets::SettingsSessionModel - - Application - - - - Manage - - - - - FdoSecretsPlugin - - <b>Fdo Secret Service:</b> %1 - - - - Unknown - Unknown PID - Desconhecido - - - Unknown - Unknown executable path - Desconhecido - - - <i>PID: %1, Executable: %2</i> - <i>PID: 1234, Executable: /path/to/exe</i> - - - - Another secret service is running (%1).<br/>Please stop/remove it before re-enabling the Secret Service Integration. - - - - - Group - - [empty] - group has no children - [vazia] - - - - HibpDownloader - - Online password validation failed - - - - - IconDownloaderDialog - - Download Favicons - - - - Cancel - Cancelar - - - Having trouble downloading icons? -You can enable the DuckDuckGo website icon service in the security section of the application settings. - - - - Close - Fechar - - - URL - URL - - - Status - Estado - - - Please wait, processing entry list... - - - - Downloading... - - - - Ok - Aceitar - - - Already Exists - - - - Download Failed - - - - Downloading favicons (%1/%2)... - - - - - KMessageWidget - - &Close - Fe&char - - - Close message - Fechar mensagem - - - - Kdbx3Reader - - missing database headers - cabeçalhos em falta - - - Header doesn't match hash - Disparidade de 'hash' no cabeçalho - - - Invalid header id size - Tamanho do id do cabeçalho inválido - - - Invalid header field length - Comprimento do campo de cabeçalho inválido - - - Invalid header data length - Comprimento dos dados de cabeçalho inválido - - - Invalid credentials were provided, please try again. -If this reoccurs, then your database file may be corrupt. - - - - Unable to calculate database key - - - - Unable to issue challenge-response: %1 - - - - - Kdbx3Writer - - Unable to issue challenge-response: %1 - - - - Unable to calculate database key - - - - - Kdbx4Reader - - missing database headers - cabeçalhos em falta - - - Invalid header checksum size - Tamanho inválido para o 'checksum' do cabeçalho - - - Header SHA256 mismatch - Disparidade no cabeçalho SHA256 - - - Unknown cipher - Cifra desconhecida - - - Invalid header id size - Tamanho do id do cabeçalho inválido - - - Invalid header field length - Comprimento do campo de cabeçalho inválido - - - Invalid header data length - Comprimento dos dados de cabeçalho inválido - - - Failed to open buffer for KDF parameters in header - Erro ao processar os parâmetros KDF no cabeçalho - - - Unsupported key derivation function (KDF) or invalid parameters - Função de derivação de chave (KDF) não suportada ou parâmetros inválidos - - - Legacy header fields found in KDBX4 file. - Encontrados campos legados no ficheiro KDBX4. - - - Invalid inner header id size - Tamanho do id do cabeçalho interno inválido - - - Invalid inner header field length - Comprimento do campo de cabeçalho interno inválido - - - Invalid inner header binary size - Tamanho binário do cabeçalho interno inválido - - - Unsupported KeePass variant map version. - Translation: variant map = data structure for storing meta data - Versão não suportada do mapa variante KeePass. - - - Invalid variant map entry name length - Translation: variant map = data structure for storing meta data - Comprimento inválido no nome da entrada da variante do mapa - - - Invalid variant map entry name data - Translation: variant map = data structure for storing meta data - Dados inválidos no nome da entrada da variante do mapa - - - Invalid variant map entry value length - Translation: variant map = data structure for storing meta data - Comprimento inválido no valor de entrada do mapa - - - Invalid variant map entry value data - Translation comment: variant map = data structure for storing meta data - Dados inválidos no valor da entrada da variante do mapa - - - Invalid variant map Bool entry value length - Translation: variant map = data structure for storing meta data - Comprimento inválido do valor booleano da entrada da variante do mapa - - - Invalid variant map Int32 entry value length - Translation: variant map = data structure for storing meta data - Comprimento inválido do valor da entrada Int32 da variante do mapa - - - Invalid variant map UInt32 entry value length - Translation: variant map = data structure for storing meta data - Comprimento inválido do valor da entrada UInt32 da variante do mapa - - - Invalid variant map Int64 entry value length - Translation: variant map = data structure for storing meta data - Comprimento inválido do valor da entrada Int64 da variante do mapa - - - Invalid variant map UInt64 entry value length - Translation: variant map = data structure for storing meta data - Comprimento inválido do valor da entrada UInt64 da variante do mapa - - - Invalid variant map entry type - Translation: variant map = data structure for storing meta data - Tipo inválido da entrada da variante do mapa - - - Invalid variant map field type size - Translation: variant map = data structure for storing meta data - Tamanho inválido do tipo de campo da variante do mapa - - - Invalid credentials were provided, please try again. -If this reoccurs, then your database file may be corrupt. - - - - (HMAC mismatch) - - - - Unable to calculate database key: %1 - - - - - Kdbx4Writer - - Invalid symmetric cipher algorithm. - Algoritmo inválido de cifra simétrica. - - - Invalid symmetric cipher IV size. - IV = Initialization Vector for symmetric cipher - Tamanho inválido da cifra simétrica IV. - - - Failed to serialize KDF parameters variant map - Translation comment: variant map = data structure for storing meta data - Erro ao serializar os parâmetros KDF da variante do mapa - - - Unable to calculate database key: %1 - - - - - KdbxReader - - Unsupported cipher - Cifra não suportada - - - Invalid compression flags length - Comprimento inválido da compressão de flags - - - Unsupported compression algorithm - Algoritmo de compressão não suportado - - - Invalid master seed size - Tamanho inválido da semente mestre - - - Invalid transform seed size - Tamanho inválido da semente de transformação - - - Invalid transform rounds size - Tamanho inválido para os ciclos de transformação - - - Invalid start bytes size - Tamanho inválido dos bytes iniciais - - - Invalid random stream id size - Tamanho inválido do ID do fluxo aleatório - - - Invalid inner random stream cipher - Cifra inválida de fluxo aleatório interno - - - Not a KeePass database. - Não é uma base de dados do KeePass. - - - The selected file is an old KeePass 1 database (.kdb). - -You can import it by clicking on Database > 'Import KeePass 1 database...'. -This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. - O ficheiro selecionado é uma base de dados do KeePass 1 (.kdb). - -Pode importá-lo clicando em Base de dados - > 'Importar base de dados do KeePass 1...'. -Esta é uma migração unidirecional. Não será possível abrir a base de dados importada com a versão 0.4 do KeePassX. - - - Unsupported KeePass 2 database version. - Versão da base de dados KeePass2 não suportada. - - - Invalid cipher uuid length: %1 (length=%2) - Tamanho inválido para o UUID da cifra: %1 (tamanho=%2) - - - Unable to parse UUID: %1 - Não foi possível processar UUID: %1 - - - Failed to read database file. - Não foi possível ler o ficheiro da base de dados. - - - - KdbxXmlReader - - XML parsing failure: %1 - Erro ao processar o XML: %1 - - - No root group - Sem grupo root - - - Missing icon uuid or data - Dados ou UUID do ícone em falta - - - Missing custom data key or value - Valor ou chave de dados personalizados em falta - - - Multiple group elements - Múltiplos elementos de grupo - - - Null group uuid - UUID de grupo nulo - - - Invalid group icon number - Número inválido de ícone de grupo - - - Invalid EnableAutoType value - Valor inválido para EnableAutoType - - - Invalid EnableSearching value - Valor inválido para EnableSearching - - - No group uuid found - UUID de grupo não encontrado - - - Null DeleteObject uuid - UUID nulo em DeleteObject - - - Missing DeletedObject uuid or time - Tempo ou UUID em falta para DeletedObject - - - Null entry uuid - Entrada de UUID nula - - - Invalid entry icon number - Número inválido na entrada de ícone - - - History element in history entry - Elemento de histórico na entrada do histórico - - - No entry uuid found - Não foi encontrado o UUID da entrada - - - History element with different uuid - Elemento do histórico com UUID diferente - - - Duplicate custom attribute found - Encontrado atributo personalizado em duplicado - - - Entry string key or value missing - Chave 'string' ou valor em falta - - - Entry binary key or value missing - Chave binária ou valor em falta - - - Auto-type association window or sequence missing - Associação de escrita automática ou sequência em falta - - - Invalid bool value - Valor booleano inválido - - - Invalid date time value - Valor de data/hora inválido - - - Invalid color value - Valor de cor inválido - - - Invalid color rgb part - Parte da cor RGB inválida - - - Invalid number value - Valor numérico inválido - - - Invalid uuid value - Valor UUID inválido - - - Unable to decompress binary - Translator meant is a binary data inside an entry - Não foi possível descomprimir o binário - - - XML error: -%1 -Line %2, column %3 - Erro no XML: -%1 -Linha %2, coluna %3 - - - - KeeAgentSettings - - Invalid KeeAgent settings file structure. - - - - Private key is an attachment but no attachments provided. - - - - Private key is empty - - - - File too large to be a private key - Ficheiro muito grande para ser uma chave privada - - - Failed to open private key - Falha ao abrir a chave privada - - - - KeePass1OpenWidget - - Unable to open the database. - Não foi possível abrir a base de dados. - - - Import KeePass1 Database - - - - - KeePass1Reader - - Unable to read keyfile. - Não foi possível ler o ficheiro-chave. - - - Not a KeePass database. - Não é uma base de dados do KeePass. - - - Unsupported encryption algorithm. - Algoritmo de cifra não suportado. - - - Unsupported KeePass database version. - Versão da base de dados KeePass não suportada. - - - Unable to read encryption IV - IV = Initialization Vector for symmetric cipher - Não foi possível ler a cifra IV - - - Invalid number of groups - Número inválido de grupos - - - Invalid number of entries - Número inválido de entradas - - - Invalid content hash size - Tamanho inválido para a 'hash' do conteúdo - - - Invalid transform seed size - Tamanho inválido da semente de transformação - - - Invalid number of transform rounds - Número inválido para os ciclos de transformação - - - Unable to construct group tree - Não foi possível criar a árvore de grupo - - - Root - Raiz - - - Key transformation failed - Erro ao transformar a chave - - - Invalid group field type number - Número inválido do tipo de grupo de campo - - - Invalid group field size - Tamanho inválido do grupo de campo - - - Read group field data doesn't match size - Leitura de grupo de dados do campo não coincidem no tamanho - - - Incorrect group id field size - Tamanho incorreto de campo de ID de grupo - - - Incorrect group creation time field size - Tamanho incorreto do campo do grupo de tempo de criação - - - Incorrect group modification time field size - Tamanho de campo de hora de alteração de grupo incorreto - - - Incorrect group access time field size - Tamanho de campo de tempo de acesso de grupo incorreto - - - Incorrect group expiry time field size - Tamanho de campo de tempo de expiração de grupo incorreto - - - Incorrect group icon field size - Tamanho do campo do ícone de grupo incorreto - - - Incorrect group level field size - Tamanho de campo do nível de grupo incorreto - - - Invalid group field type - Tipo inválido para o campo de grupo - - - Missing group id or level - ID ou nível de grupo em falta - - - Missing entry field type number - Falta a entrada de tipo número no campo - - - Invalid entry field size - Tamanho inválido para o campo da entrada - - - Read entry field data doesn't match size - Dados de campo de entrada não coincidem no tamanho - - - Invalid entry uuid field size - Tamanho da entrada para o campo UUID inválido - - - Invalid entry group id field size - Tamanho da entrada para o campo identificador de grupo inválido - - - Invalid entry icon field size - Tamanho da entrada para o campo ícone inválido - - - Invalid entry creation time field size - Tamanho da entrada para o campo tempo de criação inválido - - - Invalid entry modification time field size - Tamanho da entrada para o campo tempo de alteração inválido - - - Invalid entry expiry time field size - Tamanho da entrada para o campo tempo de expiração inválido - - - Invalid entry field type - Tipo inválido para o campo da entrada - - - unable to seek to content position - Não foi possível pesquisar no conteúdo - - - Invalid credentials were provided, please try again. -If this reoccurs, then your database file may be corrupt. - - - - Unable to calculate database key - - - - - KeeShare - - Invalid sharing reference - - - - Inactive share %1 - - - - Imported from %1 - Importado de %1 - - - Exported to %1 - - - - Synchronized with %1 - - - - Import is disabled in settings - - - - Export is disabled in settings - - - - Inactive share - - - - Imported from - - - - Exported to - - - - Synchronized with - - - - - KeyComponentWidget - - Key Component - Componente chave - - - Key Component Description - Descrição do componente chave - - - Cancel - Cancelar - - - Key Component set, click to change or remove - Componente chave definido, clique para alterar ou remover - - - Add %1 - Add a key component - Adicionar %1 - - - Change %1 - Change a key component - Alterar %1 - - - Remove %1 - Remove a key component - Remover %1 - - - %1 set, click to change or remove - Change or remove a key component - %1 definido, clique para alterar ou remover - - - - KeyFileEditWidget - - Generate - Gerar - - - Key File - Ficheiro-chave - - - <p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p> - <p>Para mais segurança, pode adicionar um ficheiro-chave que contenha dados aleatórios.</p><p>Tem que o manter secreto e não o pode perder pois se o fizer não mais poderá abrir a base de dados.</p> - - - Legacy key file format - Formato legado de ficheiro-chave - - - Error loading the key file '%1' -Message: %2 - Erro ao carregar o ficheiro-chave %1 -Mensagem: %2 - - - Key files - Ficheiros-chave - - - All files - Todos os ficheiros - - - Create Key File... - Criar ficheiro-chave... - - - Error creating key file - Erro ao criar o ficheiro-chave - - - Unable to create key file: %1 - Não foi possível criar o ficheiro-chave: %1 - - - Select a key file - Selecione o ficheiro-chave - - - Key file selection - - - - Browse for key file - - - - Browse... - Procurar... - - - Generate a new key file - - - - Note: Do not use a file that may change as that will prevent you from unlocking your database! - - - - Invalid Key File - - - - You cannot use the current database as its own keyfile. Please choose a different file or generate a new key file. - - - - Suspicious Key File - - - - The chosen key file looks like a password database file. A key file must be a static file that never changes or you will lose access to your database forever. -Are you sure you want to continue with this file? - - - - You are using a legacy key file format which may become -unsupported in the future. - -Generate a new key file in the database security settings. - - - - - MainWindow - - &Database - Base &de dados - - - &Help - Aj&uda - - - &Groups - &Grupos - - - &Tools - Ferramen&tas - - - &Quit - &Sair - - - &About - &Acerca - - - Database settings - Definições da base de dados - - - Copy username to clipboard - Copiar nome de utilizador para a área de transferência - - - Copy password to clipboard - Copiar palavra-passe para a área de transferência - - - &Settings - Definiçõe&s - - - &Title - &Título - - - Copy title to clipboard - Copiar título para a área de transferência - - - &URL - &URL - - - Copy URL to clipboard - Copiar URL para a área de transferência - - - &Notes - &Notas - - - Copy notes to clipboard - Copiar notas para a área de transferência - - - Copy &TOTP - Copiar &TOTP - - - E&mpty recycle bin - Limpar reciclage&m - - - Clear history - Limpar histórico - - - Access error for config file %1 - Erro de acesso ao ficheiro %1 - - - Settings - Definições - - - Toggle window - Alternar janela - - - Quit KeePassXC - Sair do KeePassXC - - - Please touch the button on your YubiKey! - Toque no botão da sua YubiKey! - - - WARNING: You are using an unstable build of KeePassXC! -There is a high risk of corruption, maintain a backup of your databases. -This version is not meant for production use. - AVISO: está a utilizar uma versão instável do KeePassXC! -Existe um risco bastante grande e deve efetuar um backup da base de dados. -Esta versão não deve ser utilizada para uma utilização regular. - - - &Donate - &Donativos - - - WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard! -We recommend you use the AppImage available on our downloads page. - AVISO: a versão Qt do seu sistema pode causar o encerramento do KeePassXC se estiver a utilizar o teclado no ecrã (On-Screen Keyboard)! -Recomendamos que utilize a versão AppImage disponível no nosso site. - - - &Import - &Importar - - - Create a new database - Criar uma nova base de dados - - - Merge from another KDBX database - Combinar com outra base de dados KDBX - - - Add a new entry - Adicionar uma nova entrada - - - View or edit entry - Ver ou editar entrada - - - Add a new group - Adicionar um novo grupo - - - Perform &Auto-Type - Execut&ar escrita automática - - - Open &URL - Abrir &URL - - - Import a KeePass 1 database - Importar base de dados do KeePass 1 - - - Import a CSV file - Importar ficheiro CSV - - - NOTE: You are using a pre-release version of KeePassXC! -Expect some bugs and minor issues, this version is not meant for production use. - NOTA: está a utilizar uma versão de teste do KeePassXC! -Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes de produção. - - - Check for updates on startup? - Verificar se existem atualizações ao iniciar? - - - Would you like KeePassXC to check for updates on startup? - Deseja que o KeePassXC procure atualizações ao iniciar? - - - You can always check for updates manually from the application menu. - Também pode verificar se existem atualizações através do menu da aplicação. - - - &Export - - - - Sort &A-Z - - - - Sort &Z-A - - - - &Password Generator - - - - Import a 1Password Vault - - - - &Getting Started - - - - &User Guide - - - - &Keyboard Shortcuts - - - - &Recent Databases - - - - &Entries - - - - Copy Att&ribute - - - - TOTP - TOTP - - - View - - - - Theme - - - - &Check for Updates - - - - &Open Database… - - - - &Save Database - - - - &Close Database - - - - &New Database… - - - - &Merge From Database… - - - - &New Entry… - - - - &Edit Entry… - - - - &Delete Entry… - - - - &New Group… - - - - &Edit Group… - - - - &Delete Group… - - - - Download All &Favicons… - - - - Sa&ve Database As… - - - - Database &Security… - - - - Database &Reports... - - - - Statistics, health check, etc. - - - - &Database Settings… - - - - &Clone Entry… - - - - Move u&p - - - - Move entry one step up - - - - Move do&wn - - - - Move entry one step down - - - - Copy &Username - - - - Copy &Password - - - - Download &Favicon - - - - &Lock Databases - - - - &CSV File… - - - - &HTML File… - - - - KeePass 1 Database… - - - - 1Password Vault… - - - - CSV File… - - - - Show TOTP - Mostrar TOTP - - - Show QR Code - - - - Set up TOTP… - - - - Report a &Bug - - - - Open Getting Started Guide - - - - &Online Help - - - - Go to online documentation - - - - Open User Guide - - - - Save Database Backup... - - - - Add key to SSH Agent - - - - Remove key from SSH Agent - - - - Compact Mode - - - - Automatic - - - - Light - - - - Dark - - - - Classic (Platform-native) - - - - Show Toolbar - - - - Show Preview Panel - - - - Don't show again for this version - - - - Restart Application? - - - - You must restart the application to apply this setting. Would you like to restart now? - - - - - ManageDatabase - - Database settings - Definições da base de dados - - - Edit database settings - - - - Unlock database - Desbloquear base de dados - - - Unlock database to show more information - - - - Lock database - Bloquear base de dados - - - - ManageSession - - Disconnect - - - - Disconnect this application - - - - - Merger - - Creating missing %1 [%2] - A criar %1 [%2] - - - Relocating %1 [%2] - A alocar %1 [%2] - - - Overwriting %1 [%2] - A substituir %1 [%2] - - - older entry merged from database "%1" - entrada antiga combinada da base de dados %1 - - - Adding backup for older target %1 [%2] - A adicionar backup para o destino antigo %1 [%2] - - - Adding backup for older source %1 [%2] - A adicionar backup para a origem antiga %1 [%2] - - - Reapplying older target entry on top of newer source %1 [%2] - A reaplicar a entrada de destino antiga na origem recente %1 [%2] - - - Reapplying older source entry on top of newer target %1 [%2] - A reaplicar a entrada de origem antiga no destinio recente %1 [%2] - - - Synchronizing from newer source %1 [%2] - A sincronizar da origem recente %1 [%2] - - - Synchronizing from older source %1 [%2] - A sincronizar da origem antiga %1 [%2] - - - Deleting child %1 [%2] - A eliminar dependente %1 [%2] - - - Deleting orphan %1 [%2] - A eliminar órfão %1 [%2] - - - Changed deleted objects - Objetos eliminados alterados - - - Adding missing icon %1 - Adicionar ícone em falta %1 - - - Removed custom data %1 [%2] - - - - Adding custom data %1 [%2] - - - - - NewDatabaseWizard - - Create a new KeePassXC database... - A criar uma nova base de dados do KeePassXC... - - - Root - Root group - Raiz - - - - NewDatabaseWizardPage - - WizardPage - Assistente - - - Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. - Aqui pode ajustar as definições de cifra da sua base de dados. Não se preocupe porque pode sempre reverter as alterações nas definições. - - - Advanced Settings - Definições avançadas - - - Simple Settings - Definições básicas - - - Encryption Settings - Definições de cifra - - - - NewDatabaseWizardPageDatabaseKey - - Database Credentials - - - - A set of credentials known only to you that protects your database. - - - - - NewDatabaseWizardPageEncryption - - Encryption Settings - Definições de cifra - - - Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings. - Aqui pode ajustar as definições de cifra da sua base de dados. Não se preocupe porque pode sempre reverter as alterações nas definições. - - - - NewDatabaseWizardPageMetaData - - General Database Information - Informação geral sobre a base de dados - - - Please fill in the display name and an optional description for your new database: - Preencha o nome de exibição e uma descrição extra para a sua nova base de dados: - - - - NixUtils - - Password Manager - - - - - OpData01 - - Invalid OpData01, does not contain header - - - - Unable to read all IV bytes, wanted 16 but got %1 - - - - Unable to init cipher for opdata01: %1 - - - - Unable to read all HMAC signature bytes - - - - Malformed OpData01 due to a failed HMAC - - - - Unable to process clearText in place - - - - Expected %1 bytes of clear-text, found %2 - - - - - OpVaultOpenWidget - - Read Database did not produce an instance -%1 - - - - - OpVaultReader - - Directory .opvault must exist - - - - Directory .opvault must be readable - - - - Directory .opvault/default must exist - - - - Directory .opvault/default must be readable - - - - Unable to decode masterKey: %1 - - - - Unable to derive master key: %1 - - - - - OpenSSHKey - - Invalid key file, expecting an OpenSSH key - Chave inválida, esperada chave OpenSSH - - - PEM boundary mismatch - Disparidade nos limites PEM - - - Base64 decoding failed - Erro de descodificação Base64 - - - Key file way too small. - Ficheiro-chave muito pequeno. - - - Key file magic header id invalid - ID do cabeçalho mágico do ficheiro-chave inválida - - - Found zero keys - Encontradas zero chaves - - - Failed to read public key. - Erro ao ler a chave pública. - - - Corrupted key file, reading private key failed - Ficheiro danificado, erro ao ler a chave privada - - - No private key payload to decrypt - Não existe chave privada para decifrar - - - Trying to run KDF without cipher - A tentar executar KDF sem cifra - - - Passphrase is required to decrypt this key - Requer frase-chave para decifrar esta chave - - - Key derivation failed, key file corrupted? - Erro na derivação da chave, ficheiro-chave danificado? - - - Decryption failed, wrong passphrase? - Erro ao decifrar, frase-chave errada? - - - Unexpected EOF while reading public key - EOF inesperado ao ler a chave pública - - - Unexpected EOF while reading private key - EOF inesperado ao ler a chave privada - - - Can't write public key as it is empty - Incapaz de escrever a chave pública porque está vazia - - - Unexpected EOF when writing public key - EOF inesperado ao escrever a chave pública - - - Can't write private key as it is empty - Incapaz de escrever a chave privada porque está vazia - - - Unexpected EOF when writing private key - EOF inesperado ao escrever a chave privada - - - Unsupported key type: %1 - Tipo de chave não suportado: %1 - - - Unknown cipher: %1 - Cifra desconhecida: %1 - - - Cipher IV is too short for MD5 kdf - Cifra IV é muito curta para MD kdf - - - Unknown KDF: %1 - KDF desconhecido: %1 - - - Unknown key type: %1 - Tipo de chave desconhecido: %1 - - - - PasswordEdit - - Passwords do not match - - - - Passwords match so far - - - - Toggle Password (%1) - - - - Generate Password (%1) - - - - Warning: Caps Lock enabled! - - - - - PasswordEditWidget - - Enter password: - Introduza a palavra-passe: - - - Confirm password: - Confirmação de palavra-passe: - - - Password - Palavra-passe - - - <p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p> - <p>A palavra-passe é o método primário para proteger a sua base de dados.</p><p>As boas palavras-passe são extensão e únicas. O KeePassXC pode gerar uma palavra-passe por si.</p> - - - Passwords do not match. - Disparidade nas palavras-passe. - - - Password field - - - - Repeat password field - - - - - PasswordGeneratorWidget - - %p% - %p% - - - strength - Password strength - qualidade - - - entropy - entropia - - - Password - Palavra-passe - - - Character Types - Tipos de caracteres - - - Numbers - Números - - - Extended ASCII - ASCII expandido - - - Exclude look-alike characters - Excluir caracteres semelhantes - - - Pick characters from every group - Obter caracteres de todos os grupos - - - &Length: - &Comprimento: - - - Passphrase - Frase-chave - - - Wordlist: - Lista de palavras: - - - Word Separator: - Separador de palavras: - - - Close - Fechar - - - Entropy: %1 bit - Entropia: %1 bit - - - Password Quality: %1 - Qualidade da palavra-passe: %1 - - - Poor - Password quality - - - - Weak - Password quality - Fraca - - - Good - Password quality - Boa - - - Excellent - Password quality - Excelente - - - ExtendedASCII - ASCII expandido - - - Switch to advanced mode - Ativar modo avançado - - - Advanced - Avançado - - - A-Z - A-Z - - - a-z - a-z - - - 0-9 - 0-9 - - - Braces - Parênteses - - - {[( - {[( - - - Punctuation - Pontuação - - - .,:; - .,:; - - - Quotes - Aspas - - - " ' - " ' - - - <*+!?= - <*+!?= - - - \_|-/ - \_|-/ - - - Logograms - Logo-gramas - - - #$%&&@^`~ - #$%&&@^`~ - - - Character set to exclude from generated password - Conjunto de caracteres a excluir da palavra-passe gerada - - - Do not include: - Não incluir: - - - Add non-hex letters to "do not include" list - Adicionar letras 'non-hex' à lista de exclusão - - - Hex - Hex - - - Excluded characters: "0", "1", "l", "I", "O", "|", "﹒" - Caracteres excluídos: "0", "1", "l", "I", "O", "|", "﹒" - - - Generated password - - - - Upper-case letters - - - - Lower-case letters - - - - Special characters - - - - Math Symbols - - - - Dashes and Slashes - - - - Excluded characters - - - - Hex Passwords - - - - Password length - - - - Word Case: - - - - Regenerate password - - - - Copy password - - - - lower case - - - - UPPER CASE - - - - Title Case - - - - Generate Password - - - - Also choose from: - - - - Additional characters to use for the generated password - - - - Additional characters - - - - Word Count: - Número de palavras: - - - Esc - - - - Apply Password - - - - Ctrl+S - - - - Clear - Limpar - - - Regenerate password (%1) - - - - - QApplication - - KeeShare - KeeShare - - - Statistics - - - - Very weak password - - - - Password entropy is %1 bits - - - - Weak password - - - - Used in %1/%2 - - - - Password is used %1 times - - - - Password has expired - - - - Password expiry was %1 - - - - Password is about to expire - - - - Password expires in %1 days - - - - Password will expire soon - - - - Password expires on %1 - - - - Health Check - - - - HIBP - - - - - QMessageBox - - Overwrite - Substituir - - - Delete - Eliminar - - - Move - Mover - - - Empty - Vazio - - - Remove - Remover - - - Skip - Ignorar - - - Disable - Desativar - - - Merge - Combinar - - - Continue - - - - - QObject - - Database not opened - Base de dados não aberta - - - Database hash not available - 'Hash' da base de dados não disponível - - - Client public key not received - Chave pública do cliente não recebida - - - Cannot decrypt message - Não foi possível decifrar a mensagem - - - Action cancelled or denied - Ação cancelada ou recusada - - - KeePassXC association failed, try again - Erro ao associar o KeePassXC. Tente novamente. - - - Encryption key is not recognized - Chave de cifra não reconhecida - - - Incorrect action - Ação incorreta - - - Empty message received - Recebida mensagem vazia - - - No URL provided - URL não disponibilizado - - - No logins found - Não existem credenciais - - - Unknown error - Erro desconhecido - - - Add a new entry to a database. - Adicionar entrada à base de dados. - - - Path of the database. - Caminho da base de dados. - - - Key file of the database. - Ficheiro-chave da base de dados. - - - path - caminho - - - Username for the entry. - Nome de utilizador para a entrada. - - - username - nome de utilizador - - - URL for the entry. - URL para a entrada. - - - URL - URL - - - Prompt for the entry's password. - Pedir palavra-passe para a entrada. - - - Generate a password for the entry. - Gerar palavra-passe para a entrada. - - - length - tamanho - - - Path of the entry to add. - Caminho da entrada a adicionar. - - - Path of the entry to clip. - clip = copy to clipboard - Caminho da entrada a copiar. - - - Timeout in seconds before clearing the clipboard. - Tempo limite, em segundos, antes de limpar a área de transferência. - - - Edit an entry. - Editar entrada. - - - Title for the entry. - Título para a entrada. - - - title - título - - - Path of the entry to edit. - Caminho da entrada a editar. - - - Estimate the entropy of a password. - Estimar entropia da palavra-passe. - - - Password for which to estimate the entropy. - Palavra-passe para a qual será estimada a entropia. - - - Perform advanced analysis on the password. - Executar análise avançada da palavra-passe. - - - WARNING: You are using a legacy key file format which may become -unsupported in the future. - -Please consider generating a new key file. - AVISO: está a utilizar um formato legado que pode, no futuro, deixar -de ser suportado. - -Deve considerar a geração de uma novo ficheiro-chave. - - - - -Available commands: - - - -Comandos disponíveis: - - - - Name of the command to execute. - Nome do comando a executar. - - - List database entries. - Listar entradas da base de dados. - - - Path of the group to list. Default is / - Caminho do grupo a listar. Padrão é / - - - Find entries quickly. - Localizar entradas rapidamente. - - - Search term. - Termo de pesquisa. - - - Merge two databases. - Combinar duas bases de dados. - - - Path of the database to merge from. - Caminho da base de dados de origem da combinação. - - - Use the same credentials for both database files. - Utilizar as mesmas credenciais para ambos os ficheiros. - - - Key file of the database to merge from. - Ficheiro-chave da base de dados para a combinação. - - - Show an entry's information. - Mostrar informações de uma entrada. - - - Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given. - Nome dos atributos a mostrar. Esta opção pode ser especificada mais do que uma vez, sendo que os atributos são mostrados um por linha, na ordem indicada. Se não especificar atributos, será dado um resumo dos atributos padrão. - - - attribute - atributo - - - Name of the entry to show. - Nome da entrada a mostrar. - - - NULL device - Dispositivo NULL - - - error reading from device - erro ao ler do dispositivo - - - malformed string - cadeira mal fomada - - - missing closing quote - carácter de fecho em falta - - - Group - Grupo - - - Title - Título - - - Username - Nome de utilizador - - - Password - Palavra-passe - - - Notes - Notas - - - Last Modified - Última modificação - - - Created - Criada - - - Browser Integration - Integração com navegador - - - SSH Agent - Agente SSH - - - Generate a new random diceware passphrase. - Gerar uma nova palavra-passe baseada em dados (diceware). - - - Word count for the diceware passphrase. - Número de palavras para a palavra-passe. - - - Wordlist for the diceware generator. -[Default: EFF English] - Lista de palavras para o gerador. -[Padrão: EFF inglês] - - - Generate a new random password. - Gerar nova palavra-passe aleatória. - - - Could not create entry with path %1. - Não foi possível criar a entrada com o caminho %1 - - - Enter password for new entry: - Introduza a palavra-passe para a nova entrada: - - - Writing the database failed %1. - Erro ao escrever na base de dados %1. - - - Successfully added entry %1. - Entrada %1 adicionada com sucesso - - - Invalid timeout value %1. - Valor limite inválido %1 - - - Entry %1 not found. - Entrada %1 não encontrada - - - Entry with path %1 has no TOTP set up. - A entrada com o caminho %1 não tem uma TOTP configurada. - - - Clearing the clipboard in %1 second(s)... - A área de transferência será limpa dentro de %1 segundo...A área de transferência será limpa dentro de %1 segundos... - - - Clipboard cleared! - Área de transferência limpa! - - - Silence password prompt and other secondary outputs. - Silenciar pedidos de palavra-passe e outros resultados secundários. - - - count - CLI parameter - número - - - Could not find entry with path %1. - Não foi possível encontrar a entrada com o caminho %1. - - - Not changing any field for entry %1. - Não foi alterado qualquer campo para a entrada %1. - - - Enter new password for entry: - Introduza a nova palavra-passe da entrada: - - - Writing the database failed: %1 - Erro ao escrever na base de dados: %1 - - - Successfully edited entry %1. - Entrada %1 editada com sucesso. - - - Length %1 - Tamanho %1 - - - Entropy %1 - Entropia %1 - - - Log10 %1 - Log10 %1 - - - Multi-word extra bits %1 - Bits extra multi-palavra %1 - - - Type: Bruteforce - Tipo: Bruteforce - - - Type: Dictionary - Tipo: Dictionary - - - Type: Dict+Leet - Tipo: Dict+Leet - - - Type: User Words - Tipo: User Words - - - Type: User+Leet - Tipo: User+Leet - - - Type: Repeated - Tipo: Repeated - - - Type: Sequence - Tipo: Sequence - - - Type: Spatial - Tipo: Spatial - - - Type: Date - Tipo: Date - - - Type: Bruteforce(Rep) - Tipo: Bruteforce(Rep) - - - Type: Dictionary(Rep) - Tipo: Dictionary(Rep) - - - Type: Dict+Leet(Rep) - Tipo: Dict+Leet(Rep) - - - Type: User Words(Rep) - Tipo: User Words(Rep) - - - Type: User+Leet(Rep) - Tipo: User+Leet(Rep) - - - Type: Repeated(Rep) - Tipo: Repeated(Rep) - - - Type: Sequence(Rep) - Tipo: Sequence(Rep) - - - Type: Spatial(Rep) - Tipo: Spatial(Rep) - - - Type: Date(Rep) - Tipo: Date(Rep) - - - Type: Unknown%1 - Tipo: Desconhecido%1 - - - Entropy %1 (%2) - Entropia %1 (%2) - - - *** Password length (%1) != sum of length of parts (%2) *** - *** Tamanho da palavra-passe (%1) != soma do tamanho das partes (%2) *** - - - Failed to load key file %1: %2 - Erro ao carregar o ficheiro-chave %1: %2 - - - Length of the generated password - Tamanho da palavra-passe gerada - - - Use lowercase characters - Utilizar letras minúsculas - - - Use uppercase characters - Utilizar letras maiúsculas - - - Use special characters - Utilizar caracteres especiais - - - Use extended ASCII - Utilizar ASCII expandido - - - Exclude character set - Conjunto de caracteres a excluir - - - chars - caracteres - - - Exclude similar looking characters - Excluir caracteres semelhantes - - - Include characters from every selected group - Incluir caracteres de todos os grupos selecionados - - - Recursively list the elements of the group. - Listar recursivamente todos os elementos do grupo - - - Cannot find group %1. - Não foi possível encontrar o grupo %1. - - - Error reading merge file: -%1 - Erro ao ler o ficheiro de combinação: -%1 - - - Unable to save database to file : %1 - Não foi possível guardar a base de dados no ficheiro: %1 - - - Unable to save database to file: %1 - Não foi possível guardar a base de dados no ficheiro: %1 - - - Successfully recycled entry %1. - A entrada %1 foi movida para a reciclagem. - - - Successfully deleted entry %1. - A entrada %1 foi eliminada. - - - Show the entry's current TOTP. - Mostrar TOTP atual da entrada. - - - ERROR: unknown attribute %1. - Erro: atributo desconhecido %1 - - - No program defined for clipboard manipulation - Não definiu um programa para manipulação da área de transferência - - - file empty - ficheiro vazio - - - %1: (row, col) %2,%3 - %1: (linha, coluna) %2,%3 - - - Argon2 (KDBX 4 – recommended) - Argon2 (KDBX 4 – recomendado) - - - AES-KDF (KDBX 4) - AES-KDF (KDBX 4) - - - AES-KDF (KDBX 3.1) - AES-KDF (KDBX 3.1) - - - Invalid Settings - TOTP - Definições inválidas - - - Invalid Key - TOTP - Chave inválida - - - Message encryption failed. - Erro ao cifrar a mensagem. - - - No groups found - Não foram encontrados grupos - - - Create a new database. - Criar uma nova base de dados. - - - File %1 already exists. - O ficheiro %1 já existe. - - - Loading the key file failed - Não foi possível carregar o ficheiro-chave. - - - No key is set. Aborting database creation. - Chave não definida. A abortar criação da base de dados. - - - Failed to save the database: %1. - Não foi possível criar a base de dados: %1. - - - Successfully created new database. - A base de dados foi criada com sucesso. - - - Creating KeyFile %1 failed: %2 - Não foi possível criar o ficheiro-chave %1: %2 - - - Loading KeyFile %1 failed: %2 - Não foi possível carregar o ficheiro-chave %1: %2 - - - Path of the entry to remove. - Caminho da entrada a remover. - - - Existing single-instance lock file is invalid. Launching new instance. - O ficheiro de bloqueio da instância única é inválido. A iniciar nova instância. - - - The lock file could not be created. Single-instance mode disabled. - Não foi possível criar o ficheiro de bloqueio. Modo de única instância desativado. - - - KeePassXC - cross-platform password manager - KeePassXC - Gestor de palavras-passe multi-plataforma - - - filenames of the password databases to open (*.kdbx) - nome de ficheiro das bases de dados a abrir (*.kdbx) - - - path to a custom config file - caminho para um ficheiro de configuração personalizado - - - key file of the database - ficheiro-chave da base de dados - - - read password of the database from stdin - ler palavra-passe da base de dados a partir de stdin - - - Parent window handle - Gestão da janela parental - - - Another instance of KeePassXC is already running. - Já está em execução uma instância do KeePassXC. - - - Fatal error while testing the cryptographic functions. - Erro fatal ao testar as funções de criptografia. - - - KeePassXC - Error - KeePassXC - Erro - - - Database password: - Palavra-passe da base de dados: - - - Cannot create new group - Não foi possível criar o novo grupo - - - Deactivate password key for the database. - - - - Displays debugging information. - - - - Deactivate password key for the database to merge from. - - - - Version %1 - Versão %1 - - - Build Type: %1 - Tipo de compilação: %1 - - - Revision: %1 - Revisão: %1 - - - Distribution: %1 - Distribuição: %1 - - - Debugging mode is disabled. - - - - Debugging mode is enabled. - - - - Operating system: %1 -CPU architecture: %2 -Kernel: %3 %4 - Sistema operativo: %1 -Arquitetura do CPU: %2 -Kernel: %3 %4 - - - Auto-Type - Escrita automática - - - KeeShare (signed and unsigned sharing) - KeeShare (partilha assinada e não assinada) - - - KeeShare (only signed sharing) - KeeShare (apenas partilha assinada) - - - KeeShare (only unsigned sharing) - KeeShare (apenas partilha não assinada) - - - YubiKey - YubiKey - - - TouchID - TouchID - - - None - Nada - - - Enabled extensions: - Extensões ativas: - - - Cryptographic libraries: - - - - Cannot generate a password and prompt at the same time! - - - - Adds a new group to a database. - - - - Path of the group to add. - - - - Group %1 already exists! - - - - Group %1 not found. - - - - Successfully added group %1. - - - - Check if any passwords have been publicly leaked. FILENAME must be the path of a file listing SHA-1 hashes of leaked passwords in HIBP format, as available from https://haveibeenpwned.com/Passwords. - - - - FILENAME - - - - Analyze passwords for weaknesses and problems. - - - - Failed to open HIBP file %1: %2 - - - - Evaluating database entries against HIBP file, this will take a while... - - - - Close the currently opened database. - - - - Display this help. - - - - slot - - - - Invalid word count %1 - - - - The word list is too small (< 1000 items) - - - - Exit interactive mode. - - - - Exports the content of a database to standard output in the specified format. - - - - Unable to export database to XML: %1 - - - - Unsupported format %1 - - - - Use numbers - - - - Invalid password length %1 - - - - Display command help. - - - - Available commands: - - - - Import the contents of an XML database. - - - - Path of the XML database export. - - - - Path of the new database. - - - - Successfully imported database. - - - - Unknown command %1 - - - - Flattens the output to single lines. - - - - Only print the changes detected by the merge operation. - - - - Yubikey slot for the second database. - - - - Successfully merged %1 into %2. - - - - Database was not modified by merge operation. - A base de dados não foi alterada pela combinação. - - - Moves an entry to a new group. - - - - Path of the entry to move. - - - - Path of the destination group. - - - - Could not find group with path %1. - - - - Entry is already in group %1. - - - - Successfully moved entry %1 to group %2. - - - - Open a database. - - - - Path of the group to remove. - - - - Cannot remove root group from database. - - - - Successfully recycled group %1. - - - - Successfully deleted group %1. - - - - Failed to open database file %1: not found - - - - Failed to open database file %1: not a plain file - - - - Failed to open database file %1: not readable - - - - Enter password to unlock %1: - - - - Invalid YubiKey slot %1 - - - - Enter password to encrypt database (optional): - - - - HIBP file, line %1: parse error - - - - Secret Service Integration - - - - User name - - - - Password for '%1' has been leaked %2 time(s)! - - - - Invalid password generator after applying all options - - - - Show the protected attributes in clear text. - - - - Browser Plugin Failure - - - - Could not save the native messaging script file for %1. - - - - Copy the given attribute to the clipboard. Defaults to "password" if not specified. - - - - Copy the current TOTP to the clipboard (equivalent to "-a totp"). - - - - Copy an entry's attribute to the clipboard. - - - - ERROR: Please specify one of --attribute or --totp, not both. - - - - ERROR: attribute %1 is ambiguous, it matches %2. - - - - Attribute "%1" not found. - - - - Entry's "%1" attribute copied to the clipboard! - - - - Yubikey slot and optional serial used to access the database (e.g., 1:7370001). - - - - slot[:serial] - - - - Target decryption time in MS for the database. - - - - time - - - - Set the key file for the database. - - - - Set a password for the database. - - - - Invalid decryption time %1. - - - - Target decryption time must be between %1 and %2. - - - - Failed to set database password. - - - - Benchmarking key derivation function for %1ms delay. - - - - Setting %1 rounds for key derivation function. - - - - error while setting database key derivation settings. - - - - Format to use when exporting. Available choices are 'xml' or 'csv'. Defaults to 'xml'. - - - - Unable to import XML database: %1 - - - - Show a database's information. - - - - UUID: - - - - Name: - - - - Description: - - - - Cipher: - - - - KDF: - - - - Recycle bin is enabled. - - - - Recycle bin is not enabled. - - - - Invalid command %1. - - - - Invalid YubiKey serial %1 - - - - Please touch the button on your YubiKey to continue… - - - - Do you want to create a database with an empty password? [y/N]: - - - - Repeat password: - - - - Error: Passwords do not match. - - - - All clipping programs failed. Tried %1 - - - - - AES (%1 rounds) - - - - Argon2 (%1 rounds, %2 KB) - - - - AES 256-bit - - - - Twofish 256-bit - - - - ChaCha20 256-bit - - - - Benchmark %1 delay - - - - %1 ms - milliseconds - - - - %1 s - seconds - - - - - QtIOCompressor - - Internal zlib error when compressing: - Erro interno zlib durante a compressão: - - - Error writing to underlying device: - Erro de escrita no dispositivo subjacente: - - - Error opening underlying device: - Erro ao abrir o dispositivo subjacente: - - - Error reading data from underlying device: - Erro de leitura no dispositivo subjacente: - - - Internal zlib error when decompressing: - Erro interno zlib durante a descompressão: - - - - QtIOCompressor::open - - The gzip format not supported in this version of zlib. - O formato gzip não é suportado por esta versão zlib. - - - Internal zlib error: - Erro interno zlib: - - - - ReportsWidgetHealthcheck - - Also show entries that have been excluded from reports - - - - Hover over reason to show additional details. Double-click entries to edit. - - - - Bad - Password quality - - - - Bad — password must be changed - - - - Poor - Password quality - - - - Poor — password should be changed - - - - Weak - Password quality - Fraca - - - Weak — consider changing the password - - - - (Excluded) - - - - This entry is being excluded from reports - - - - Please wait, health data is being calculated... - - - - Congratulations, everything is healthy! - - - - Title - Título - - - Path - Caminho - - - Score - - - - Reason - - - - Edit Entry... - - - - Exclude from reports - - - - - ReportsWidgetHibp - - CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. - - - - Perform Online Analysis - - - - Also show entries that have been excluded from reports - - - - This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. - - - - Congratulations, no exposed passwords! - - - - Title - Título - - - Path - Caminho - - - Password exposed… - - - - (Excluded) - - - - This entry is being excluded from reports - - - - once - - - - up to 10 times - - - - up to 100 times - - - - up to 1000 times - - - - up to 10,000 times - - - - up to 100,000 times - - - - up to a million times - - - - millions of times - - - - Edit Entry... - - - - Exclude from reports - - - - - ReportsWidgetStatistics - - Hover over lines with error icons for further information. - - - - Name - Nome - - - Value - Valor - - - Please wait, database statistics are being calculated... - - - - Database name - - - - Description - - - - Location - - - - Last saved - - - - Unsaved changes - - - - yes - - - - no - - - - The database was modified, but the changes have not yet been saved to disk. - - - - Number of groups - - - - Number of entries - - - - Number of expired entries - - - - The database contains entries that have expired. - - - - Unique passwords - - - - Non-unique passwords - - - - More than 10% of passwords are reused. Use unique passwords when possible. - - - - Maximum password reuse - - - - Some passwords are used more than three times. Use unique passwords when possible. - - - - Number of short passwords - - - - Recommended minimum password length is at least 8 characters. - - - - Number of weak passwords - - - - Recommend using long, randomized passwords with a rating of 'good' or 'excellent'. - - - - Entries excluded from reports - - - - Excluding entries from reports, e. g. because they are known to have a poor password, isn't necessarily a problem but you should keep an eye on them. - - - - Average password length - - - - %1 characters - - - - Average password length is less than ten characters. Longer passwords provide more security. - - - - - SSHAgent - - Agent connection failed. - Erro ao conectar com o agente. - - - Agent protocol error. - Erro de protocolo do agente. - - - No agent running, cannot add identity. - O agente não está em execução e não é possível adicionar a identidade. - - - No agent running, cannot remove identity. - O agente não está em execução e não é possível remover a identidade. - - - Agent refused this identity. Possible reasons include: - O agente recusou esta identidade. Causas possíveis: - - - The key has already been added. - A chave já foi adicionada. - - - Restricted lifetime is not supported by the agent (check options). - O tempo de vida restrito não é suportado pelo agente (verificar opções). - - - A confirmation request is not supported by the agent (check options). - O agente não tem suporte a pedidos de confirmação (consulte as opções). - - - Key identity ownership conflict. Refusing to add. - - - - No agent running, cannot list identities. - - - - - SearchHelpWidget - - Search Help - Pesquisar na ajuda - - - Search terms are as follows: [modifiers][field:]["]term["] - Introduza os termos de pesquisa da seguinte forma: [modificadores][campo:]["]termo["] - - - Every search term must match (ie, logical AND) - Todos os termos de pesquisa coincidentes (AND lógico) - - - Modifiers - Modificadores - - - exclude term from results - excluir termo dos resultados - - - match term exactly - coincidência exata - - - use regex in term - utilizar regex no termo - - - Fields - Campos - - - Term Wildcards - Caracteres universais do termo - - - match anything - coincidência relativa - - - match one - uma coincidência - - - logical OR - OU lógico - - - Examples - Exemplos - - - - SearchWidget - - Search - Pesquisa - - - Clear - Limpar - - - Limit search to selected group - Limitar pesquisa ao grupo selecionado - - - Search Help - Pesquisar na ajuda - - - Search (%1)... - Search placeholder text, %1 is the keyboard shortcut - Pesquisa (%1)... - - - Case sensitive - Sensível ao tipo - - - - SettingsWidgetFdoSecrets - - Options - - - - Enable KeepassXC Freedesktop.org Secret Service integration - - - - General - Geral - - - Show notification when credentials are requested - - - - <html><head/><body><p>If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.</p><p>You will still be prompted if any entries are referenced by others.</p></body></html> - - - - Exposed database groups: - - - - Authorization - - - - These applications are currently connected: - - - - Don't confirm when entries are deleted by clients - - - - <b>Error:</b> Failed to connect to DBus. Please check your DBus setup. - - - - <b>Warning:</b> - - - - Save current changes to activate the plugin and enable editing of this section. - - - - - SettingsWidgetKeeShare - - Active - Ativo - - - Allow export - Permitir exportação - - - Allow import - Permitir importação - - - Own certificate - Certificado próprio - - - Fingerprint: - Impressão digital: - - - Certificate: - Certificado: - - - Signer - Signatário: - - - Key: - Chave: - - - Generate - Gerar - - - Import - Importar - - - Export - Exportar - - - Imported certificates - Certificados importados - - - Trust - Confiar - - - Ask - Perguntar - - - Untrust - Deixar de confiar - - - Remove - Remover - - - Path - Caminho - - - Status - Estado - - - Fingerprint - Impressão digital - - - Certificate - Certificado - - - Trusted - Confiável - - - Untrusted - Não confiável - - - Unknown - Desconhecido - - - key.share - Filetype for KeeShare key - partilha da chave - - - KeeShare key file - Ficheiro-chave KeeShare - - - All files - Todos os ficheiros - - - Select path - Selecionar caminho - - - Exporting changed certificate - A exportar certificado alterado - - - The exported certificate is not the same as the one in use. Do you want to export the current certificate? - O certificado exportado não é o que está a ser utilizado. Deseja exportar o certificado atual? - - - Signer: - Signatário: - - - Allow KeeShare imports - - - - Allow KeeShare exports - - - - Only show warnings and errors - - - - Key - Chave - - - Signer name field - - - - Generate new certificate - - - - Import existing certificate - - - - Export own certificate - - - - Known shares - - - - Trust selected certificate - - - - Ask whether to trust the selected certificate every time - - - - Untrust selected certificate - - - - Remove selected certificate - - - - - ShareExport - - Overwriting signed share container is not supported - export prevented - A substituição de contentor de partilha não assinado não é suportada - exportação evitada - - - Could not write export container (%1) - Não foi possível escrever contentor de exportação (%1) - - - Could not embed signature: Could not open file to write (%1) - Assinatura não incorporada. Não foi possível abrir o ficheiro para escrita (%1) - - - Could not embed signature: Could not write file (%1) - Assinatura não incorporada. Não foi possível escrever no ficheiro (%1) - - - Could not embed database: Could not open file to write (%1) - Base de dados não incorporada. Não foi possível abrir o ficheiro para escrita (%1) - - - Could not embed database: Could not write file (%1) - Base de dados não incorporada. Não foi possível escrever no ficheiro (%1) - - - Overwriting unsigned share container is not supported - export prevented - A substituição de contentor de partilha assinado não é suportada - exportação evitada - - - Could not write export container - Não foi possível escrever contentor de exportação - - - Unexpected export error occurred - Ocorreu um erro inesperado ao exportar - - - - ShareImport - - Import from container without signature - Importar de um contentor sem assinatura - - - We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1? - Não foi possível verificar a fonte do contentor partilhado, porque não está assinado. Tem a certeza de que o quer importar de %1? - - - Import from container with certificate - Importar de um contentor com certificado - - - Do you want to trust %1 with the fingerprint of %2 from %3? - Deseja confiar em %1 com a impressão digital de %2 em %3? {1 ?} {2 ?} - - - Not this time - Agora não - - - Never - Nunca - - - Always - Sempre - - - Just this time - Apenas agora - - - Signed share container are not supported - import prevented - O contentor de partilha assinado não é suportado - importação evitada - - - File is not readable - O ficheiro não é legível - - - Invalid sharing container - Contentor de partilha inválido - - - Untrusted import prevented - Importação não fiável impedida - - - Successful signed import - Importação assinada bem sucedida - - - Unsigned share container are not supported - import prevented - O contentor de partilha não assinado não é suportado - importação evitada - - - Successful unsigned import - Importação não assinada bem sucedida - - - File does not exist - O ficheiro não existe - - - Unknown share container type - Tipo de contentor de partilha desconhecido - - - - ShareObserver - - Import from %1 failed (%2) - A importação de %1 falhou (%2) - - - Import from %1 successful (%2) - A importação de %1 foi bem sucedida (%2) - - - Imported from %1 - Importado de %1 - - - Export to %1 failed (%2) - A exportação para %1 falhou (%2) - - - Export to %1 successful (%2) - A exportação para %1 foi bem sucedida (%2) - - - Export to %1 - Exportar para %1 - - - Multiple import source path to %1 in %2 - Diversos caminhos de importação para %1 em %2 - - - Conflicting export target path %1 in %2 - Conflito no caminho de exportação para %1 em %2 - - - - TotpDialog - - Timed Password - Palavra-passe limitada - - - 000000 - 000000 - - - Copy - Copiar - - - Expires in <b>%n</b> second(s) - Expira em <b>%n</b> segundoExpira em <b>%n</b> segundos - - - - TotpExportSettingsDialog - - Copy - Copiar - - - NOTE: These TOTP settings are custom and may not work with other authenticators. - TOTP QR code dialog warning - Nota: estas definições TOTP são personalizadas e podem não funcionar com outros autenticadores. - - - There was an error creating the QR code. - Ocorreu um erro ao criar o código QR. - - - Closing in %1 seconds. - A fechar dentro de %1 segundos. - - - - TotpSetupDialog - - Setup TOTP - Configurar TOTP - - - Default RFC 6238 token settings - Definições padrão do token RFC 6238 - - - Steam token settings - Definições do token do fluxo - - - Use custom settings - Utilizar definições personalizadas - - - Custom Settings - Definições personalizadas - - - Time step: - Avanço de tempo: - - - sec - Seconds - seg - - - Code size: - Tamanho do código: - - - Secret Key: - - - - Secret key must be in Base32 format - - - - Secret key field - - - - Algorithm: - - - - Time step field - - - - digits - - - - Invalid TOTP Secret - - - - You have entered an invalid secret key. The key must be in Base32 format. -Example: JBSWY3DPEHPK3PXP - - - - Confirm Remove TOTP Settings - - - - Are you sure you want to delete TOTP settings for this entry? - - - - - URLEdit - - Invalid URL - - - - - UpdateCheckDialog - - Checking for updates - A verificar se existem atualizações - - - Checking for updates... - A verificar se existem atualizações... - - - Close - Fechar - - - Update Error! - Erro ao atualizar! - - - An error occurred in retrieving update information. - Surgiu um erro ao obter a informação de atualização. - - - Please try again later. - Por favor tente mais tarde - - - Software Update - Atualização do programa - - - A new version of KeePassXC is available! - Está disponível uma nova versão do KeePassXC! - - - KeePassXC %1 is now available — you have %2. - O KeePassXC %1 já está disponível — tem a versão %2. - - - Download it at keepassxc.org - Descarregue em keepassxc.org - - - You're up-to-date! - Está atualizado! - - - KeePassXC %1 is currently the newest version available - O KeePassXC %1 é neste momento a versão mais recente disponível - - - - WelcomeWidget - - Start storing your passwords securely in a KeePassXC database - Armazene as suas palavras-passe em segurança com o KeePassXC - - - Create new database - Criar nova base de dados - - - Open existing database - Abrir base de dados existente - - - Import from KeePass 1 - Importar do KeePass 1 - - - Import from CSV - Importar de ficheiro CSV - - - Recent databases - Bases de dados recentes - - - Welcome to KeePassXC %1 - Bem-vindo ao KeePassXC %1 - - - Import from 1Password - - - - Open a recent database - - - - - YubiKey - - %1 [%2] Configured Slot - %3 - - - - %1 [%2] Challenge Response - Slot %3 - %4 - - - - Press - Prima - - - Passive - Passiva - - - %1 Invalid slot specified - %2 - - - - The YubiKey interface has not been initialized. - - - - Hardware key is currently in use. - - - - Could not find hardware key with serial number %1. Please plug it in to continue. - - - - Hardware key timed out waiting for user interaction. - - - - A USB error ocurred when accessing the hardware key: %1 - - - - Failed to complete a challenge-response, the specific error was: %1 - - - - - YubiKeyEditWidget - - Refresh - Recarregar - - - YubiKey Challenge-Response - Pergunta de segurança YubiKey - - - <p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> - <p>Se você tiver uma <a href="https://www.yubico.com/">YubiKey</a>, pode utiliza-la para obter mais segurança.</p><p>A YubiKey requer que uma das suas ranhuras seja programada como uma <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p> - - - Refresh hardware tokens - - - - Hardware key slot selection - - - - Could not find any hardware keys! - - - - Selected hardware key slot does not support challenge-response! - - - - Detecting hardware keys… - - - - No hardware keys detected - - - - \ No newline at end of file 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 @@ Colorful Colorido + + You must restart the application to set the new language. Would you like to restart now? + + ApplicationSettingsWidgetGeneral @@ -166,10 +170,6 @@ Automatically save after every change Salvar automaticamente depois de cada alteração - - Automatically save on exit - Salvar automaticamente ao sair - Automatically reload the database when modified externally Automaticamente recarregar o banco de dados quando houver modificações externas @@ -304,10 +304,6 @@ Automatically launch KeePassXC at system startup Iniciar KeePassXC automaticamente com a inicialização do sistema - - Mark database as modified for non-data changes (e.g., expanding groups) - Marcar banco de dados como modificado para mudanças não relacionadas a dados (por exemplo, expansão de grupos) - Safely save database files (disable if experiencing problems with Dropbox, etc.) Salvar os arquivos de banco de dados com segurança (desative se tiver problemas com o Dropbox, etc) @@ -344,6 +340,18 @@ Auto-Type start delay: Atraso para início de digitação automática: + + Automatically save when locking database + + + + Automatically save non-data changes when locking database + + + + Tray icon type + + ApplicationSettingsWidgetSecurity @@ -4841,6 +4849,26 @@ Espere alguns bugs e problemas menores, esta versão não é para uso em produç You must restart the application to apply this setting. Would you like to restart now? Você precisa reiniciar o aplicativo para aplicar esta configuração. Você gostaria de reiniciar agora? + + Perform Auto-Type Sequence + + + + {USERNAME} + + + + {USERNAME}{ENTER} + + + + {PASSWORD} + + + + {PASSWORD}{ENTER} + + ManageDatabase @@ -5325,10 +5353,6 @@ Espere alguns bugs e problemas menores, esta versão não é para uso em produç Password quality Excelente - - ExtendedASCII - ASCIIEstendido - Switch to advanced mode Mudar para o modo avançado @@ -5337,58 +5361,22 @@ Espere alguns bugs e problemas menores, esta versão não é para uso em produç Advanced Avançado - - A-Z - A-Z - - - a-z - a-z - - - 0-9 - 0-9 - Braces Colchetes - - {[( - {[( - Punctuation Pontuação - - .,:; - .,:; - Quotes Aspas - - " ' - " ' - - - <*+!?= - <*+!?= - - - \_|-/ - \_|-/ - Logograms Logo-gramas - - #$%&&@^`~ - #$%&&@^`~ - Character set to exclude from generated password Conjunto de caracteres para excluir da senha gerada @@ -5509,6 +5497,10 @@ Espere alguns bugs e problemas menores, esta versão não é para uso em produç Regenerate password (%1) Regenerar senha (%1) + + Special Characters + Caracteres Especiais + QApplication 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 @@ Colorful Colorido + + You must restart the application to set the new language. Would you like to restart now? + Tem que reiniciar a aplicação para aplicar o novo idioma. Reiniciar agora? + ApplicationSettingsWidgetGeneral @@ -166,10 +170,6 @@ Automatically save after every change Guardar automaticamente a cada alteração - - Automatically save on exit - Guardar automaticamente ao fechar - Automatically reload the database when modified externally Recarregar base de dados se esta for modificada externamente @@ -304,10 +304,6 @@ Automatically launch KeePassXC at system startup Iniciar KeePassXC ao arrancar o sistema - - Mark database as modified for non-data changes (e.g., expanding groups) - Marcar base de dados como alterada para modificações não efetuadas em dados (ex.: expansão de grupos) - Safely save database files (disable if experiencing problems with Dropbox, etc.) Guardar bases de dados em segurança (desative se ocorrerem erros com Dropbox e outros serviços) @@ -344,6 +340,18 @@ Auto-Type start delay: Atraso para iniciar a escrita automática: + + Automatically save when locking database + Guardar alterações ao bloquear a base de dados + + + Automatically save non-data changes when locking database + Guardar alterações a não-dados ao bloquear a base de dados + + + Tray icon type + Tipo de ícone na bandeja + ApplicationSettingsWidgetSecurity @@ -1992,7 +2000,7 @@ Existe aqui um erro que deve ser reportado aos programadores. Do you really want to move %n entry(s) to the recycle bin? - Deseja mesmo mover %n entrada para a reciclagem?Deseja mesmo mover %n entradas para a reciclagem? + Tem a certeza de que deseja mover %n entrada para a reciclagem?Tem a certeza de que deseja mover %n entradas para a reciclagem? Execute command? @@ -4841,6 +4849,26 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes You must restart the application to apply this setting. Would you like to restart now? Tem que reiniciar a aplicação para aplicar as alterações. Gostaria de o fazer agora? + + Perform Auto-Type Sequence + Executar sequência de escrita automática + + + {USERNAME} + {NomeDeUtilizador} + + + {USERNAME}{ENTER} + {NomeDeUtilizador}{ENTER} + + + {PASSWORD} + {Palavra-passe} + + + {PASSWORD}{ENTER} + {Palavra-passe}{ENTER} + ManageDatabase @@ -5325,10 +5353,6 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes Password quality Excelente - - ExtendedASCII - ASCII expandido - Switch to advanced mode Ativar modo avançado @@ -5337,58 +5361,22 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes Advanced Avançado - - A-Z - A-Z - - - a-z - a-z - - - 0-9 - 0-9 - Braces Parênteses - - {[( - {[( - Punctuation Pontuação - - .,:; - .,:; - Quotes Aspas - - " ' - " ' - - - <*+!?= - <*+!?= - - - \_|-/ - \_|-/ - Logograms Logo-gramas - - #$%&&@^`~ - #$%&&@^`~ - Character set to exclude from generated password Conjunto de caracteres a excluir da palavra-passe gerada @@ -5509,6 +5497,10 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes Regenerate password (%1) Recriar palavra-passe (%1) + + Special Characters + Caracteres especiais + QApplication @@ -6118,7 +6110,7 @@ Comandos disponíveis: Successfully recycled entry %1. - A entrada %1 foi movida para a reciclagem. + Entrada %1 movida para a reciclagem. Successfully deleted entry %1. @@ -7223,7 +7215,7 @@ Kernel: %3 %4 <html><head/><body><p>If recycle bin is enabled for the database, entries will be moved to recycle bin directly. Otherwise, they will be deleted without confirmation.</p><p>You will still be prompted if any entries are referenced by others.</p></body></html> - <html><head/><body><p>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.</p><p>Contudo, se as entradas apagadas forem referenciadas por outras, será mostrado um aviso.</p></body></html> + <html><head/><body><p>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.</p><p>Contudo, se as entradas apagadas forem referenciadas por outras, será mostrado um aviso.</p></body></html> Exposed database groups: 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 @@ Colorful + + You must restart the application to set the new language. Would you like to restart now? + + ApplicationSettingsWidgetGeneral @@ -166,10 +170,6 @@ Automatically save after every change Salvare automată după fiecare modificare - - Automatically save on exit - Salvare automată la ieșire - Automatically reload the database when modified externally Reîncărcați automat baza de date atunci când este modificată extern @@ -304,10 +304,6 @@ Automatically launch KeePassXC at system startup - - Mark database as modified for non-data changes (e.g., expanding groups) - - Safely save database files (disable if experiencing problems with Dropbox, etc.) @@ -344,6 +340,18 @@ Auto-Type start delay: + + Automatically save when locking database + + + + Automatically save non-data changes when locking database + + + + Tray icon type + + ApplicationSettingsWidgetSecurity @@ -4834,6 +4842,26 @@ Asteptati-va unele bug-uri și probleme minore, această versiune nu este destin You must restart the application to apply this setting. Would you like to restart now? + + Perform Auto-Type Sequence + + + + {USERNAME} + + + + {USERNAME}{ENTER} + + + + {PASSWORD} + + + + {PASSWORD}{ENTER} + + ManageDatabase @@ -5318,10 +5346,6 @@ Asteptati-va unele bug-uri și probleme minore, această versiune nu este destin Password quality Excelent - - ExtendedASCII - ASCII Extins - Switch to advanced mode Comutarea la modul avansat @@ -5330,58 +5354,22 @@ Asteptati-va unele bug-uri și probleme minore, această versiune nu este destin Advanced Avansat - - A-Z - A-Z - - - a-z - a-z - - - 0-9 - 0-9 - Braces Bretele - - {[( - {[( - Punctuation Punctuaţie - - .,:; - .,:; - Quotes Citate - - " ' - " ' - - - <*+!?= - <*+!?= - - - \_|-/ - \_|-/ - Logograms Logograme - - #$%&&@^`~ - #$%&&@^`~ - Character set to exclude from generated password Set de caractere pentru a exclude din parola generată @@ -5502,6 +5490,10 @@ Asteptati-va unele bug-uri și probleme minore, această versiune nu este destin Regenerate password (%1) + + Special Characters + Caractere speciale + QApplication 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 @@ Colorful Цветной + + You must restart the application to set the new language. Would you like to restart now? + Вы должны перезапустить приложение, чтобы установить новый язык. Хотите перезапустить сейчас? + ApplicationSettingsWidgetGeneral @@ -166,10 +170,6 @@ Automatically save after every change Автоматически сохранять после каждого изменения - - Automatically save on exit - Автоматически сохранять при выходе - Automatically reload the database when modified externally Автоматически перезагружать базу данных при её изменении извне @@ -304,10 +304,6 @@ Automatically launch KeePassXC at system startup Автоматически запуск KeePassXC при запуске системы - - Mark database as modified for non-data changes (e.g., expanding groups) - Помечать базу данных изменённой при действиях, не связанных с изменением данных (например, при раскрытии групп) - Safely save database files (disable if experiencing problems with Dropbox, etc.) Безопасное сохранение файлов базы данных (возможна несовместимость с Dropbox и др.) @@ -344,6 +340,18 @@ Auto-Type start delay: Задержка начала автоввода: + + Automatically save when locking database + Автоматическое сохранение при блокировке базы данных + + + Automatically save non-data changes when locking database + Автоматическое сохранение изменений, не связанных с данными, при блокировке базы данных. + + + Tray icon type + Тип значка в системном лотке + ApplicationSettingsWidgetSecurity @@ -4837,6 +4845,26 @@ Expect some bugs and minor issues, this version is not meant for production use. You must restart the application to apply this setting. Would you like to restart now? Требуется перезапуск приложения для применения этого параметра. Выполнить перезапуск сейчас? + + Perform Auto-Type Sequence + Выполнить последовательность автоматического ввода + + + {USERNAME} + {USERNAME} + + + {USERNAME}{ENTER} + {USERNAME}{ENTER} + + + {PASSWORD} + {PASSWORD} + + + {PASSWORD}{ENTER} + {PASSWORD}{ENTER} + ManageDatabase @@ -5321,10 +5349,6 @@ Expect some bugs and minor issues, this version is not meant for production use. Password quality Отличный - - ExtendedASCII - Расширенная ASCII - Switch to advanced mode В расширенный режим @@ -5333,58 +5357,22 @@ Expect some bugs and minor issues, this version is not meant for production use. Advanced Дополнительно - - A-Z - A-Z - - - a-z - a-z - - - 0-9 - 0-9 - Braces Скобки - - {[( - {[( - Punctuation Знаки препинания - - .,:; - .,:; - Quotes Кавычки - - " ' - " ' - - - <*+!?= - <*+!?= - - - \_|-/ - \_|-/ - Logograms Логограммы - - #$%&&@^`~ - #$%&&@^`~ - Character set to exclude from generated password Набор символов для исключения из сгенерированного пароля @@ -5505,6 +5493,10 @@ Expect some bugs and minor issues, this version is not meant for production use. Regenerate password (%1) Создать заново (%1) + + Special Characters + Специальные символы + QApplication 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 @@ Colorful Farebné + + You must restart the application to set the new language. Would you like to restart now? + + ApplicationSettingsWidgetGeneral @@ -166,10 +170,6 @@ Automatically save after every change Automaticky uložiť po každej zmene - - Automatically save on exit - Automaticky uložiť pri ukončení - Automatically reload the database when modified externally Automaticky načítať databázu, ak je upravená externe @@ -304,10 +304,6 @@ Automatically launch KeePassXC at system startup Automaticky spustiť KeePassXC pri štarte systému - - Mark database as modified for non-data changes (e.g., expanding groups) - Označovať databázu za zmenenú pri nedátových zmenách (napr. rozbalenie skupiny) - Safely save database files (disable if experiencing problems with Dropbox, etc.) Bezpečne uložiť súbory databáz (vypnite pri problémoch s Dropbox, apod) @@ -344,6 +340,18 @@ Auto-Type start delay: Oneskorenia spustenia Automatického vypĺňania: + + Automatically save when locking database + + + + Automatically save non-data changes when locking database + + + + Tray icon type + + ApplicationSettingsWidgetSecurity @@ -4844,6 +4852,26 @@ Očakávajte chyby a menšie problémy, táto verzia nie je určená na produkč You must restart the application to apply this setting. Would you like to restart now? Musíte reštartovať aplikáciu, aby sa tieto zmeny prejavili. Chcete ju reštartovať teraz? + + Perform Auto-Type Sequence + + + + {USERNAME} + + + + {USERNAME}{ENTER} + + + + {PASSWORD} + + + + {PASSWORD}{ENTER} + + ManageDatabase @@ -5328,10 +5356,6 @@ Očakávajte chyby a menšie problémy, táto verzia nie je určená na produkč Password quality Výbroné - - ExtendedASCII - Rozšírené ASCII - Switch to advanced mode Prepnúť na pokročilý režim @@ -5340,58 +5364,22 @@ Očakávajte chyby a menšie problémy, táto verzia nie je určená na produkč Advanced Pokročilé - - A-Z - A-Ž - - - a-z - a-ž - - - 0-9 - 0-9 - Braces Zátvorky - - {[( - {[( - Punctuation Interpunkcia - - .,:; - .,:; - Quotes Úvodzovky - - " ' - " ' - - - <*+!?= - <*+!?= - - - \_|-/ - \_|-/ - Logograms Zástupné znaky - - #$%&&@^`~ - #$%&&@^`~ - Character set to exclude from generated password Sady znakov, ktoré majú byť vynechané pri generovaní hesla @@ -5512,6 +5500,10 @@ Očakávajte chyby a menšie problémy, táto verzia nie je určená na produkč Regenerate password (%1) Obnoviť heslo (%1) + + Special Characters + Špeciálne znaky + QApplication 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 @@ Colorful Färgstark + + You must restart the application to set the new language. Would you like to restart now? + Du måste starta om programmet för att tillämpa det nya språket. Vill du starta om nu? + ApplicationSettingsWidgetGeneral @@ -166,10 +170,6 @@ Automatically save after every change Spara automatiskt efter varje ändring - - Automatically save on exit - Spara automatiskt när programmet avslutas - Automatically reload the database when modified externally Läs om databasen automatiskt när den ändrats externt @@ -304,10 +304,6 @@ Automatically launch KeePassXC at system startup Starta KeePassXC automatiskt vid systemstart - - Mark database as modified for non-data changes (e.g., expanding groups) - Markera databasen som ändrad för icke dataändringar (t.ex. expanderande grupper) - Safely save database files (disable if experiencing problems with Dropbox, etc.) Spara databasfiler säkert (inaktivera vid problem med Dropbox etc) @@ -344,6 +340,18 @@ Auto-Type start delay: Autoskriv startfördröjning: + + Automatically save when locking database + Spara automatiskt när databasen låses + + + Automatically save non-data changes when locking database + Spara icke-dataändringar automatiskt när databasen låses + + + Tray icon type + Typ av systemfältsikon + ApplicationSettingsWidgetSecurity @@ -3931,11 +3939,11 @@ Detta är en envägsmigrering. Du kommer inte att kunna öppna den importerade d Invalid EnableAutoType value - + Ogiltigt värde för EnableAutoType Invalid EnableSearching value - + Ogiltigt värde för EnableSearching No group uuid found @@ -3947,7 +3955,7 @@ Detta är en envägsmigrering. Du kommer inte att kunna öppna den importerade d Missing DeletedObject uuid or time - + Saknar DeletedObject uuid eller tid Null entry uuid @@ -3983,7 +3991,7 @@ Detta är en envägsmigrering. Du kommer inte att kunna öppna den importerade d Auto-type association window or sequence missing - + Auto-skrivassociationsfönster eller sekvens saknas Invalid bool value @@ -4118,7 +4126,7 @@ Rad %2, kolumn: %3 Invalid group field size - + Ogiltig fältstorlek för grupp Read group field data doesn't match size @@ -4166,35 +4174,35 @@ Rad %2, kolumn: %3 Invalid entry field size - + Ogiltig fältstorlek Read entry field data doesn't match size - + Inläst data stämmer inte med fältstorleken Invalid entry uuid field size - + Ogiltig fältstorlek för uuid Invalid entry group id field size - + Ogiltig fältstorlek för grupp-id Invalid entry icon field size - + Ogiltig fältstorlek för ikon Invalid entry creation time field size - + Ogiltig fältstorlek för skapandedatum Invalid entry modification time field size - + Ogiltig fältstorlek för ändringsdatum Invalid entry expiry time field size - + Ogiltig fältstorlek för utgångsdatum Invalid entry field type @@ -4840,6 +4848,26 @@ Vissa fel och mindre problem kan uppstå. Denna version är inte ämnad för dag You must restart the application to apply this setting. Would you like to restart now? Du måste starta om programmet för att tillämpa den här inställningen. Vill du starta om nu? + + Perform Auto-Type Sequence + Utför auto-skrivsekvens + + + {USERNAME} + + + + {USERNAME}{ENTER} + + + + {PASSWORD} + + + + {PASSWORD}{ENTER} + + ManageDatabase @@ -5324,10 +5352,6 @@ Vissa fel och mindre problem kan uppstå. Denna version är inte ämnad för dag Password quality Utmärkt - - ExtendedASCII - Utökad ASCII - Switch to advanced mode Växla till avancerat läge @@ -5336,58 +5360,22 @@ Vissa fel och mindre problem kan uppstå. Denna version är inte ämnad för dag Advanced Avancerat - - A-Z - A-Z - - - a-z - a-z - - - 0-9 - 0-9 - Braces Klammerparenteser - - {[( - {[( - Punctuation Skiljetecken - - .,:; - .,:; - Quotes Citationstecken - - " ' - " ' - - - <*+!?= - <*+!?= - - - \_|-/ - \_|-/ - Logograms Logogram - - #$%&&@^`~ - #$%&&@^`~ - Character set to exclude from generated password Tecken som undantas från genererade lösenord @@ -5508,6 +5496,10 @@ Vissa fel och mindre problem kan uppstå. Denna version är inte ämnad för dag Regenerate password (%1) Generera om lösenordet (%1) + + Special Characters + Specialtecken + QApplication @@ -5588,7 +5580,7 @@ Vissa fel och mindre problem kan uppstå. Denna version är inte ämnad för dag Empty - Tom + Töm Remove 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 @@ Colorful สีสดใส + + You must restart the application to set the new language. Would you like to restart now? + + ApplicationSettingsWidgetGeneral @@ -166,10 +170,6 @@ Automatically save after every change บันทึกอัตโนมัติทุกครั้งที่มีการเปลี่ยนแปลง - - Automatically save on exit - บันทึกอัตโนมัติตอนออก - Automatically reload the database when modified externally โหลดฐานข้อมูลใหม่โดยอัตโนมัติเมื่อมีการเปลี่ยนแปลงจากภายนอก @@ -304,10 +304,6 @@ Automatically launch KeePassXC at system startup เรียกให้ KeePassXC โดยอัตโนมัติเมื่อเริ่มระบบ - - Mark database as modified for non-data changes (e.g., expanding groups) - - Safely save database files (disable if experiencing problems with Dropbox, etc.) @@ -344,6 +340,18 @@ Auto-Type start delay: + + Automatically save when locking database + + + + Automatically save non-data changes when locking database + + + + Tray icon type + + ApplicationSettingsWidgetSecurity @@ -4809,6 +4817,26 @@ Expect some bugs and minor issues, this version is not meant for production use. You must restart the application to apply this setting. Would you like to restart now? + + Perform Auto-Type Sequence + + + + {USERNAME} + + + + {USERNAME}{ENTER} + + + + {PASSWORD} + + + + {PASSWORD}{ENTER} + + ManageDatabase @@ -5293,10 +5321,6 @@ Expect some bugs and minor issues, this version is not meant for production use. Password quality ดีมาก - - ExtendedASCII - ExtendedASCII - Switch to advanced mode เปลี่ยนเป็นโหมดใช้งานขั้นสูง @@ -5305,58 +5329,22 @@ Expect some bugs and minor issues, this version is not meant for production use. Advanced ขั้นสูง - - A-Z - A-Z - - - a-z - a-z - - - 0-9 - 0-9 - Braces วงเล็บปีกกา - - {[( - {[( - Punctuation วรรคตอน - - .,:; - .,:; - Quotes คำพูด - - " ' - " ' - - - <*+!?= - <*+!?= - - - \_|-/ - \_|-/ - Logograms สัญลักษณ์หรือตัวอักษรที่ใช้แทนคำ - - #$%&&@^`~ - #$%&&@^`~ - Character set to exclude from generated password ชุดอักขระที่ต้องการยกเว้นจากรหัสผ่านที่สร้างขึ้น @@ -5477,6 +5465,10 @@ Expect some bugs and minor issues, this version is not meant for production use. Regenerate password (%1) + + Special Characters + อักขระพิเศษ + QApplication 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 @@ Colorful Renkli + + You must restart the application to set the new language. Would you like to restart now? + Yeni dili ayarlamak için uygulamayı yeniden başlatmalısınız. Şimdi yeniden başlamak ister misin? + ApplicationSettingsWidgetGeneral @@ -166,10 +170,6 @@ Automatically save after every change Her değişiklik sonrası otomatik kaydet - - Automatically save on exit - Çıkışta otomatik kaydet - Automatically reload the database when modified externally Harici olarak değiştirildiğinde veritabanını otomatik olarak yeniden yükle @@ -304,10 +304,6 @@ Automatically launch KeePassXC at system startup Sistem başlangıcında KeePassXC'yi otomatik olarak başlat - - Mark database as modified for non-data changes (e.g., expanding groups) - Veritabanında veri olmayan değişiklikler için değiştirilmiş olarak işaretleme (ör. genişleyen gruplar) - Safely save database files (disable if experiencing problems with Dropbox, etc.) Veritabanı dosyalarını güvenle kaydet (Dropbox, vb. İle ilgili sorun olursa devre dışı bırak) @@ -344,6 +340,18 @@ Auto-Type start delay: Otomatik Yazım başlangıç gecikmesi: + + Automatically save when locking database + Veritabanını kilitlerken otomatik kaydet + + + Automatically save non-data changes when locking database + Veritabanını kilitlerken veri dışı değişiklikleri otomatik olarak kaydet + + + Tray icon type + Tepsi simgesi türü + ApplicationSettingsWidgetSecurity @@ -4517,7 +4525,7 @@ Keepassxc indirme sayfasında mevcut Appımage kullanmanızı öneririz. &Import - &İçe aktar + &İçe Aktar Create a new database @@ -4541,7 +4549,7 @@ Keepassxc indirme sayfasında mevcut Appımage kullanmanızı öneririz. Perform &Auto-Type - &Otomatik Yazım gerçekleştir + &Otomatik Yazım Gerçekleştir Open &URL @@ -4575,7 +4583,7 @@ Bazı hatalar ve küçük sorunlar olabilir, bu sürüm şu an dağıtımda değ &Export - Dışa &aktar + Dışa &Aktar Sort &A-Z @@ -4803,7 +4811,7 @@ Bazı hatalar ve küçük sorunlar olabilir, bu sürüm şu an dağıtımda değ Compact Mode - Küçültülmüş kip + Küçültülmüş Kip Automatic @@ -4819,7 +4827,7 @@ Bazı hatalar ve küçük sorunlar olabilir, bu sürüm şu an dağıtımda değ Classic (Platform-native) - Klasik (Platform-doğal) + Klasik (Doğal sistem) Show Toolbar @@ -4841,6 +4849,26 @@ Bazı hatalar ve küçük sorunlar olabilir, bu sürüm şu an dağıtımda değ You must restart the application to apply this setting. Would you like to restart now? Bu ayarı uygulamak için uygulamayı yeniden başlatmalısınız. Şimdi uygulamayı yeniden başlatmak ister misiniz ? + + Perform Auto-Type Sequence + Otomatik Yazım Sırası + + + {USERNAME} + {KULLANICI ADI} + + + {USERNAME}{ENTER} + {KULLANICI ADI}{ENTER} + + + {PASSWORD} + {PAROLA} + + + {PASSWORD}{ENTER} + {PAROLA}{ENTER} + ManageDatabase @@ -5325,10 +5353,6 @@ Bazı hatalar ve küçük sorunlar olabilir, bu sürüm şu an dağıtımda değ Password quality Harika - - ExtendedASCII - GenişletilmişASCII - Switch to advanced mode Gelişmiş kipe geç @@ -5337,58 +5361,22 @@ Bazı hatalar ve küçük sorunlar olabilir, bu sürüm şu an dağıtımda değ Advanced Gelişmiş - - A-Z - A-Z - - - a-z - a-z - - - 0-9 - 0-9 - Braces Ayraç - - {[( - {[( - Punctuation Noktalama - - .,:; - .,:; - Quotes Tırnak - - " ' - " ' - - - <*+!?= - <*+!?= - - - \_|-/ - \_|-/ - Logograms Logogramlar - - #$%&&@^`~ - #$%&&@^`~ - Character set to exclude from generated password Oluşturulan paroladan dışlanacak karakter kümesi @@ -5509,6 +5497,10 @@ Bazı hatalar ve küçük sorunlar olabilir, bu sürüm şu an dağıtımda değ Regenerate password (%1) Parolayı tekrar üret (%1) + + Special Characters + Özel Karakterler + QApplication 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 @@ Colorful Кольорова + + You must restart the application to set the new language. Would you like to restart now? + + ApplicationSettingsWidgetGeneral @@ -166,10 +170,6 @@ Automatically save after every change Автоматично зберігати після кожної зміни - - Automatically save on exit - Автоматично зберігати перед виходом - Automatically reload the database when modified externally Автоматично перезавантажувати сховище після зовнішніх змін @@ -304,10 +304,6 @@ Automatically launch KeePassXC at system startup Автоматично запускати KeePassXC під час завантаженні системи - - Mark database as modified for non-data changes (e.g., expanding groups) - Позначати сховище зміненим після змін, що не стосуються даних (наприклад, розкриття груп) - Safely save database files (disable if experiencing problems with Dropbox, etc.) Безпечно зберігати файли сховищ (вимкніть, якщо виникають проблеми з Dropbox та ін.) @@ -344,6 +340,18 @@ Auto-Type start delay: Затримка початку автозаповнення: + + Automatically save when locking database + + + + Automatically save non-data changes when locking database + + + + Tray icon type + + ApplicationSettingsWidgetSecurity @@ -4839,6 +4847,26 @@ Expect some bugs and minor issues, this version is not meant for production use. You must restart the application to apply this setting. Would you like to restart now? + + Perform Auto-Type Sequence + + + + {USERNAME} + + + + {USERNAME}{ENTER} + + + + {PASSWORD} + + + + {PASSWORD}{ENTER} + + ManageDatabase @@ -5323,10 +5351,6 @@ Expect some bugs and minor issues, this version is not meant for production use. Password quality Відмінна - - ExtendedASCII - Розширені ASCII - Switch to advanced mode Перемкнути в розширений режим @@ -5335,58 +5359,22 @@ Expect some bugs and minor issues, this version is not meant for production use. Advanced Розширене - - A-Z - A-Z - - - a-z - a-z - - - 0-9 - 0-9 - Braces Дужки - - {[( - {[( - Punctuation Знаки пунктуації - - .,:; - .,:; - Quotes Лапки - - " ' - " ' - - - <*+!?= - <*+!?= - - - \_|-/ - \_|-/ - Logograms Логограми - - #$%&&@^`~ - #$%&&@^`~ - Character set to exclude from generated password Набір символів, яких треба уникати @@ -5507,6 +5495,10 @@ Expect some bugs and minor issues, this version is not meant for production use. Regenerate password (%1) Створити пароль знову (%1) + + Special Characters + Спеціальні символи + QApplication 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 @@ Colorful 彩色 + + You must restart the application to set the new language. Would you like to restart now? + 您必须重新启动应用程序才能应用此设置。要现在重新启动吗? + ApplicationSettingsWidgetGeneral @@ -166,10 +170,6 @@ Automatically save after every change 修改后自动保存 - - Automatically save on exit - 离开后自动保存 - Automatically reload the database when modified externally 当外部修改时自动重新加载数据库 @@ -290,7 +290,7 @@ Global auto-type shortcut - 全局自动键入快捷方式 + 全局自动输入快捷键 Auto-type character typing delay milliseconds @@ -304,10 +304,6 @@ Automatically launch KeePassXC at system startup 系统启动时自动启动 KeePassXC - - Mark database as modified for non-data changes (e.g., expanding groups) - 将数据库标记为已修改的非数据更改(例如,展开组) - Safely save database files (disable if experiencing problems with Dropbox, etc.) 安全地保存数据库文件(如果 Dropbox 出现问题,请禁用) @@ -326,7 +322,7 @@ Tray icon type: - 托盘图标类型: + 任务栏图标类型: Reset settings to default… @@ -334,15 +330,27 @@ Auto-Type typing delay: - 自动键入延迟: + 自动输入延迟: Global Auto-Type shortcut: - 全局自动类型快捷方式: + 全局自动输入快捷键: Auto-Type start delay: - 自动类型启动延迟: + 自动输入启动延迟: + + + Automatically save when locking database + 锁定数据库时自动保存 + + + Automatically save non-data changes when locking database + 锁定数据库时自动保存 + + + Tray icon type + 任务栏图标类型 @@ -390,7 +398,7 @@ Re-lock previously locked database after performing Auto-Type - 执行自动类型后重新锁定先前锁定的数据库 + 执行自动输入后重新锁定先前锁定的数据库 Hide passwords in the entry preview panel @@ -2882,11 +2890,11 @@ Supported extensions are: %1. Use default Auto-Type sequence of parent group - 使用父组的默认自动类型序列 + 使用父组的默认自动输入序列 Auto-Type: - 自动类型: + 自动输入: Search: @@ -2902,7 +2910,7 @@ Supported extensions are: %1. Set default Auto-Type sequence - 设置默认的自动类型序列 + 设置默认的自动输入序列 @@ -3119,7 +3127,7 @@ This may cause the affected plugins to malfunction. Are you sure you want to remove %n attachment(s)? - 您确定要删除%n个附件吗? + 您确定要删除 %n 个附件吗? Save attachments @@ -3371,7 +3379,7 @@ Are you sure to add this file? Autotype - 自动填充 + 自动输入 Window @@ -4836,6 +4844,26 @@ Expect some bugs and minor issues, this version is not meant for production use. You must restart the application to apply this setting. Would you like to restart now? 您必须重新启动应用程序才能应用此设置。现在要重新启动吗? + + Perform Auto-Type Sequence + 执行自动输入 + + + {USERNAME} + 仅用户名 + + + {USERNAME}{ENTER} + 用户名并回车 + + + {PASSWORD} + 仅密码 + + + {PASSWORD}{ENTER} + 密码并回车 + ManageDatabase @@ -5320,10 +5348,6 @@ Expect some bugs and minor issues, this version is not meant for production use. Password quality 非常好 - - ExtendedASCII - 扩展 ASCII - Switch to advanced mode 切换到高级模式 @@ -5332,58 +5356,22 @@ Expect some bugs and minor issues, this version is not meant for production use. Advanced 高级 - - A-Z - A-Z - - - a-z - a-z - - - 0-9 - 0-9 - Braces 括弧 - - {[( - {[( - Punctuation 标点 - - .,:; - .,:; - Quotes 引号 - - " ' - " ' - - - <*+!?= - <*+!?= - - - \_|-/ - \_|-/ - Logograms 语标符号 - - #$%&&@^`~ - #$%&&@^`~ - Character set to exclude from generated password 从生成的密码中排除字符集 @@ -5504,6 +5492,10 @@ Expect some bugs and minor issues, this version is not meant for production use. Regenerate password (%1) 重新生成密码 (%1) + + Special Characters + 特殊字符 + QApplication 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 @@ Colorful 彩色 + + You must restart the application to set the new language. Would you like to restart now? + 必須重啟應用程式以使用新語言。您是否要現在重新啟動? + ApplicationSettingsWidgetGeneral @@ -166,10 +170,6 @@ Automatically save after every change 每次修改後自動儲存 - - Automatically save on exit - 離開時自動儲存 - Automatically reload the database when modified externally 有外部修改時自動重新載入資料庫 @@ -304,10 +304,6 @@ Automatically launch KeePassXC at system startup 系統開機時自動啟動 KeePassXC - - Mark database as modified for non-data changes (e.g., expanding groups) - 對未牽涉資料的變更(例如擴展群組),同樣將資料庫標記為已更改 - Safely save database files (disable if experiencing problems with Dropbox, etc.) 安全儲存資料庫檔案(若和 Dropbox 等服務不相容,可停用此項) @@ -344,6 +340,18 @@ Auto-Type start delay: 自動輸入的啟動延遲: + + Automatically save when locking database + 鎖定資料庫時自動儲存 + + + Automatically save non-data changes when locking database + 鎖定資料庫時,自動儲存與資料無關的變更 + + + Tray icon type + 系統列圖示類型 + ApplicationSettingsWidgetSecurity @@ -4839,6 +4847,26 @@ Expect some bugs and minor issues, this version is not meant for production use. You must restart the application to apply this setting. Would you like to restart now? 必須重啟應用程式來套用此設定。您是否要現在重新啟動? + + Perform Auto-Type Sequence + 執行自動輸入序列 + + + {USERNAME} + + + + {USERNAME}{ENTER} + + + + {PASSWORD} + + + + {PASSWORD}{ENTER} + + ManageDatabase @@ -5323,10 +5351,6 @@ Expect some bugs and minor issues, this version is not meant for production use. Password quality 極好 - - ExtendedASCII - 延伸 ASCII - Switch to advanced mode 切換至進階模式 @@ -5335,58 +5359,22 @@ Expect some bugs and minor issues, this version is not meant for production use. Advanced 進階 - - A-Z - A-Z - - - a-z - a-z - - - 0-9 - 0-9 - Braces 括號 - - {[( - {[( - Punctuation 標點 - - .,:; - .,:; - Quotes 引號 - - " ' - " ' - - - <*+!?= - <*+!?= - - - \_|-/ - \_|-/ - Logograms 語標符號 - - #$%&&@^`~ - #$%&&@^`~ - Character set to exclude from generated password 產生密碼時排除的字元集合 @@ -5507,6 +5495,10 @@ Expect some bugs and minor issues, this version is not meant for production use. Regenerate password (%1) 重新生成密碼 (%1) + + Special Characters + 特殊字元 + QApplication @@ -5587,7 +5579,7 @@ Expect some bugs and minor issues, this version is not meant for production use. Empty - 空白 + 清空 Remove -- cgit v1.2.3