From 082ecc3f370ecd9b9a57b766f0b2220f3b151e2e Mon Sep 17 00:00:00 2001 From: Thomas Luzat Date: Thu, 8 Mar 2018 03:57:14 +0100 Subject: Fix dark tray icon option making all icons dark Introduces a separate path for tray icons which are neither locked nor unlocked. Closes #1556. --- src/core/FilePath.cpp | 10 +++++++++- src/core/FilePath.h | 1 + src/gui/MainWindow.cpp | 2 +- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/core/FilePath.cpp b/src/core/FilePath.cpp index 330542eb9..c6f1907ad 100644 --- a/src/core/FilePath.cpp +++ b/src/core/FilePath.cpp @@ -97,6 +97,15 @@ QString FilePath::wordlistPath(const QString& name) } QIcon FilePath::applicationIcon() +{ +#ifdef KEEPASSXC_DIST_SNAP + return icon("apps", "keepassxc", false); +#else + return icon("apps", "keepassxc"); +#endif +} + +QIcon FilePath::trayIcon() { bool darkIcon = useDarkIcon(); @@ -107,7 +116,6 @@ QIcon FilePath::applicationIcon() #endif } - QIcon FilePath::trayIconLocked() { #ifdef KEEPASSXC_DIST_SNAP diff --git a/src/core/FilePath.h b/src/core/FilePath.h index f84f84e0e..b0f0397e2 100644 --- a/src/core/FilePath.h +++ b/src/core/FilePath.h @@ -29,6 +29,7 @@ public: QString pluginPath(const QString& name); QString wordlistPath(const QString& name); QIcon applicationIcon(); + QIcon trayIcon(); QIcon trayIconLocked(); QIcon trayIconUnlocked(); QIcon icon(const QString& category, const QString& name, bool fromTheme = true); diff --git a/src/gui/MainWindow.cpp b/src/gui/MainWindow.cpp index 1822c48d4..301b80c45 100644 --- a/src/gui/MainWindow.cpp +++ b/src/gui/MainWindow.cpp @@ -899,7 +899,7 @@ void MainWindow::updateTrayIcon() m_trayIcon->setContextMenu(menu); - m_trayIcon->setIcon(filePath()->applicationIcon()); + m_trayIcon->setIcon(filePath()->trayIcon()); m_trayIcon->show(); } if (m_ui->tabWidget->hasLockableDatabases()) { -- cgit v1.2.3 From f164847f9bd20603475c5866227607e154fe3358 Mon Sep 17 00:00:00 2001 From: Alessio Di Mauro Date: Thu, 8 Mar 2018 16:24:11 +0100 Subject: Replace in.readLine() with Utils::getPassword() Fixes #1673. --- src/main.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main.cpp b/src/main.cpp index a7fd2d762..33aa5edd2 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -29,6 +29,8 @@ #include "gui/MainWindow.h" #include "gui/MessageBox.h" +#include "cli/Utils.h" + #if defined(WITH_ASAN) && defined(WITH_LSAN) #include #endif @@ -148,7 +150,9 @@ int main(int argc, char** argv) // we always need consume a line of STDIN if --pw-stdin is set to clear out the // buffer for native messaging, even if the specified file does not exist static QTextStream in(stdin, QIODevice::ReadOnly); - password = in.readLine(); + static QTextStream out(stdout, QIODevice::WriteOnly); + out << QCoreApplication::translate("Main", "Database password: ") << flush; + password = Utils::getPassword(); } if (!filename.isEmpty() && QFile::exists(filename) && !filename.endsWith(".json", Qt::CaseInsensitive)) { -- cgit v1.2.3 From 2b91e4d27c562409b460c2e7b6d0596f7d374579 Mon Sep 17 00:00:00 2001 From: Janek Bevendorff Date: Fri, 9 Mar 2018 21:36:33 +0100 Subject: Fix inconsistent mutex unlocking due to double slot execution, fixes #1561 --- src/autotype/AutoType.cpp | 59 ++++++++++++++++++++++++++--------------------- src/autotype/AutoType.h | 3 ++- 2 files changed, 35 insertions(+), 27 deletions(-) diff --git a/src/autotype/AutoType.cpp b/src/autotype/AutoType.cpp index aa8064bac..3f44a9944 100644 --- a/src/autotype/AutoType.cpp +++ b/src/autotype/AutoType.cpp @@ -140,13 +140,6 @@ QStringList AutoType::windowTitles() return m_plugin->windowTitles(); } -void AutoType::resetInAutoType() -{ - m_inAutoType.unlock(); - - emit autotypeRejected(); -} - void AutoType::raiseWindow() { #if defined(Q_OS_MAC) @@ -199,9 +192,14 @@ int AutoType::callEventFilter(void* event) */ void AutoType::executeAutoTypeActions(const Entry* entry, QWidget* hideWindow, const QString& sequence, WId window) { + if (!m_inAutoType.tryLock()) { + return; + } + // no edit to the sequence beyond this point if (!verifyAutoTypeSyntax(sequence)) { emit autotypeRejected(); + m_inAutoType.unlock(); return; } @@ -210,6 +208,7 @@ void AutoType::executeAutoTypeActions(const Entry* entry, QWidget* hideWindow, c if (!parseActions(sequence, entry, actions)) { emit autotypeRejected(); + m_inAutoType.unlock(); return; } @@ -233,6 +232,7 @@ void AutoType::executeAutoTypeActions(const Entry* entry, QWidget* hideWindow, c if (m_plugin->activeWindow() != window) { qWarning("Active window changed, interrupting auto-type."); emit autotypeRejected(); + m_inAutoType.unlock(); return; } @@ -242,6 +242,8 @@ void AutoType::executeAutoTypeActions(const Entry* entry, QWidget* hideWindow, c // emit signal only if autotype performed correctly emit autotypePerformed(); + + m_inAutoType.unlock(); } /** @@ -259,13 +261,7 @@ void AutoType::performAutoType(const Entry* entry, QWidget* hideWindow) return; } - if (!m_inAutoType.tryLock()) { - return; - } - executeAutoTypeActions(entry, hideWindow, sequences.first()); - - m_inAutoType.unlock(); } /** @@ -278,13 +274,14 @@ void AutoType::performGlobalAutoType(const QList& dbList) return; } - QString windowTitle = m_plugin->activeWindowTitle(); - - if (windowTitle.isEmpty()) { + if (!m_inGlobalAutoTypeDialog.tryLock()) { return; } - if (!m_inAutoType.tryLock()) { + QString windowTitle = m_plugin->activeWindowTitle(); + + if (windowTitle.isEmpty()) { + m_inGlobalAutoTypeDialog.unlock(); return; } @@ -303,8 +300,6 @@ void AutoType::performGlobalAutoType(const QList& dbList) } if (matchList.isEmpty()) { - m_inAutoType.unlock(); - if (qobject_cast(QCoreApplication::instance())) { auto* msgBox = new QMessageBox(); msgBox->setAttribute(Qt::WA_DeleteOnClose); @@ -318,16 +313,20 @@ void AutoType::performGlobalAutoType(const QList& dbList) msgBox->activateWindow(); } + m_inGlobalAutoTypeDialog.unlock(); emit autotypeRejected(); } else if ((matchList.size() == 1) && !config()->get("security/autotypeask").toBool()) { executeAutoTypeActions(matchList.first().entry, nullptr, matchList.first().sequence); - m_inAutoType.unlock(); + m_inGlobalAutoTypeDialog.unlock(); } else { m_windowFromGlobal = m_plugin->activeWindow(); auto* selectDialog = new AutoTypeSelectDialog(); + + // connect slots, both of which must unlock the m_inGlobalAutoTypeDialog mutex connect(selectDialog, SIGNAL(matchActivated(AutoTypeMatch)), SLOT(performAutoTypeFromGlobal(AutoTypeMatch))); - connect(selectDialog, SIGNAL(rejected()), SLOT(resetInAutoType())); + connect(selectDialog, SIGNAL(rejected()), SLOT(autoTypeRejectedFromGlobal())); + selectDialog->setMatchList(matchList); #if defined(Q_OS_MAC) m_plugin->raiseOwnWindow(); @@ -341,14 +340,22 @@ void AutoType::performGlobalAutoType(const QList& dbList) void AutoType::performAutoTypeFromGlobal(AutoTypeMatch match) { - // We don't care about the result here, the mutex should already be locked. Now it's locked for sure - m_inAutoType.tryLock(); - m_plugin->raiseWindow(m_windowFromGlobal); - executeAutoTypeActions(match.entry, nullptr, match.sequence, m_windowFromGlobal); - m_inAutoType.unlock(); + // make sure the mutex is definitely locked before we unlock it + Q_UNUSED(m_inGlobalAutoTypeDialog.tryLock()); + m_inGlobalAutoTypeDialog.unlock(); +} + +void AutoType::autoTypeRejectedFromGlobal() +{ + // this slot can be called twice when the selection dialog is deleted, + // so make sure the mutex is locked before we try unlocking it + Q_UNUSED(m_inGlobalAutoTypeDialog.tryLock()); + m_inGlobalAutoTypeDialog.unlock(); + + emit autotypeRejected(); } /** diff --git a/src/autotype/AutoType.h b/src/autotype/AutoType.h index 98a7bd7fa..55adac7d1 100644 --- a/src/autotype/AutoType.h +++ b/src/autotype/AutoType.h @@ -69,7 +69,7 @@ signals: private slots: void performAutoTypeFromGlobal(AutoTypeMatch match); - void resetInAutoType(); + void autoTypeRejectedFromGlobal(); void unloadPlugin(); private: @@ -88,6 +88,7 @@ private: bool windowMatches(const QString& windowTitle, const QString& windowPattern); QMutex m_inAutoType; + QMutex m_inGlobalAutoTypeDialog; int m_autoTypeDelay; Qt::Key m_currentGlobalKey; Qt::KeyboardModifiers m_currentGlobalModifiers; -- cgit v1.2.3 From d156457405c0e61eec88e91858e7854b72826f4f Mon Sep 17 00:00:00 2001 From: Toni Spets Date: Sat, 10 Mar 2018 16:01:53 +0200 Subject: Always hide password on unlock Fixes #1692 --- src/gui/DatabaseOpenWidget.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/gui/DatabaseOpenWidget.cpp b/src/gui/DatabaseOpenWidget.cpp index 3af0c6e8f..d011e8b63 100644 --- a/src/gui/DatabaseOpenWidget.cpp +++ b/src/gui/DatabaseOpenWidget.cpp @@ -173,6 +173,9 @@ void DatabaseOpenWidget::openDatabase() return; } + m_ui->editPassword->setShowPassword(false); + QCoreApplication::processEvents(); + QFile file(m_filename); if (!file.open(QIODevice::ReadOnly)) { m_ui->messageWidget->showMessage( -- cgit v1.2.3 From dc1aead2a2f36d0cbffea2e1194474bf8d5a43b0 Mon Sep 17 00:00:00 2001 From: Steven Noonan Date: Wed, 7 Mar 2018 20:43:26 -0800 Subject: OpenSSHKey: when writing to agent, ensure comment string is at least one byte This unbreaks adding keys to gpg-agent. Signed-off-by: Steven Noonan --- src/gui/entry/EditEntryWidget.cpp | 10 +++++++++- src/sshagent/SSHAgent.cpp | 11 ++++++++++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/gui/entry/EditEntryWidget.cpp b/src/gui/entry/EditEntryWidget.cpp index 4d12dd16b..079f81056 100644 --- a/src/gui/entry/EditEntryWidget.cpp +++ b/src/gui/entry/EditEntryWidget.cpp @@ -420,12 +420,16 @@ void EditEntryWidget::browsePrivateKey() bool EditEntryWidget::getOpenSSHKey(OpenSSHKey& key, bool decrypt) { + QString fileName; QByteArray privateKeyData; if (m_sshAgentUi->attachmentRadioButton->isChecked()) { - privateKeyData = m_advancedUi->attachmentsWidget->getAttachment(m_sshAgentUi->attachmentComboBox->currentText()); + fileName = m_sshAgentUi->attachmentComboBox->currentText(); + privateKeyData = m_advancedUi->attachmentsWidget->getAttachment(fileName); } else { QFile localFile(m_sshAgentUi->externalFileEdit->text()); + QFileInfo localFileInfo(localFile); + fileName = localFileInfo.fileName(); if (localFile.fileName().isEmpty()) { return false; @@ -464,6 +468,10 @@ bool EditEntryWidget::getOpenSSHKey(OpenSSHKey& key, bool decrypt) key.setComment(m_entry->username()); } + if (key.comment().isEmpty()) { + key.setComment(fileName); + } + return true; } diff --git a/src/sshagent/SSHAgent.cpp b/src/sshagent/SSHAgent.cpp index 45d774aab..36a16b20b 100644 --- a/src/sshagent/SSHAgent.cpp +++ b/src/sshagent/SSHAgent.cpp @@ -268,10 +268,15 @@ void SSHAgent::databaseModeChanged(DatabaseWidget::Mode mode) } QByteArray keyData; + QString fileName; if (settings.selectedType() == "attachment") { - keyData = e->attachments()->value(settings.attachmentName()); + fileName = settings.attachmentName(); + keyData = e->attachments()->value(fileName); } else if (!settings.fileName().isEmpty()) { QFile file(settings.fileName()); + QFileInfo fileInfo(file); + + fileName = fileInfo.fileName(); if (file.size() > 1024 * 1024) { continue; @@ -302,6 +307,10 @@ void SSHAgent::databaseModeChanged(DatabaseWidget::Mode mode) key.setComment(e->username()); } + if (key.comment().isEmpty()) { + key.setComment(fileName); + } + if (settings.removeAtDatabaseClose()) { removeIdentityAtLock(key, uuid); } -- cgit v1.2.3 From 46099fdd719ed4296a98b820dfb11446a404bb0a Mon Sep 17 00:00:00 2001 From: Thomas Luzat Date: Thu, 8 Mar 2018 03:35:06 +0100 Subject: SSH Agent: Update available attachments immediately The list of available attachments for SSH agent is now updated immediately when adding or removing file attachments. Closes #1668. --- src/gui/entry/EditEntryWidget.cpp | 37 ++++++++++++++++++++++--------------- src/gui/entry/EditEntryWidget.h | 1 + 2 files changed, 23 insertions(+), 15 deletions(-) diff --git a/src/gui/entry/EditEntryWidget.cpp b/src/gui/entry/EditEntryWidget.cpp index 079f81056..7acd3af34 100644 --- a/src/gui/entry/EditEntryWidget.cpp +++ b/src/gui/entry/EditEntryWidget.cpp @@ -281,6 +281,8 @@ void EditEntryWidget::setupSSHAgent() connect(m_sshAgentUi->decryptButton, SIGNAL(clicked()), SLOT(decryptPrivateKey())); connect(m_sshAgentUi->copyToClipboardButton, SIGNAL(clicked()), SLOT(copyPublicKey())); + connect(m_advancedUi->attachmentsWidget->entryAttachments(), SIGNAL(modified()), SLOT(updateAttachments())); + addPage(tr("SSH Agent"), FilePath::instance()->icon("apps", "utilities-terminal"), m_sshAgentWidget); } @@ -299,19 +301,8 @@ void EditEntryWidget::updateSSHAgent() m_sshAgentUi->removeFromAgentButton->setEnabled(false); m_sshAgentUi->copyToClipboardButton->setEnabled(false); - m_sshAgentUi->attachmentComboBox->addItem(""); - - auto attachments = m_advancedUi->attachmentsWidget->entryAttachments(); - for (const QString& fileName : attachments->keys()) { - if (fileName == "KeeAgent.settings") { - continue; - } - - m_sshAgentUi->attachmentComboBox->addItem(fileName); - } - - m_sshAgentUi->attachmentComboBox->setCurrentText(settings.attachmentName()); - m_sshAgentUi->externalFileEdit->setText(settings.fileName()); + m_sshAgentSettings = settings; + updateSSHAgentAttachments(); if (settings.selectedType() == "attachment") { m_sshAgentUi->attachmentRadioButton->setChecked(true); @@ -319,8 +310,6 @@ void EditEntryWidget::updateSSHAgent() m_sshAgentUi->externalFileRadioButton->setChecked(true); } - m_sshAgentSettings = settings; - updateSSHAgentKeyInfo(); } @@ -330,6 +319,24 @@ void EditEntryWidget::updateSSHAgentAttachment() updateSSHAgentKeyInfo(); } +void EditEntryWidget::updateSSHAgentAttachments() +{ + m_sshAgentUi->attachmentComboBox->clear(); + m_sshAgentUi->attachmentComboBox->addItem(""); + + auto attachments = m_advancedUi->attachmentsWidget->entryAttachments(); + for (const QString& fileName : attachments->keys()) { + if (fileName == "KeeAgent.settings") { + continue; + } + + m_sshAgentUi->attachmentComboBox->addItem(fileName); + } + + m_sshAgentUi->attachmentComboBox->setCurrentText(m_sshAgentSettings.attachmentName()); + m_sshAgentUi->externalFileEdit->setText(m_sshAgentSettings.fileName()); +} + void EditEntryWidget::updateSSHAgentKeyInfo() { m_sshAgentUi->addToAgentButton->setEnabled(false); diff --git a/src/gui/entry/EditEntryWidget.h b/src/gui/entry/EditEntryWidget.h index a7c8e3271..9b2a919c6 100644 --- a/src/gui/entry/EditEntryWidget.h +++ b/src/gui/entry/EditEntryWidget.h @@ -103,6 +103,7 @@ private slots: #ifdef WITH_XC_SSHAGENT void updateSSHAgent(); void updateSSHAgentAttachment(); + void updateSSHAgentAttachments(); void updateSSHAgentKeyInfo(); void browsePrivateKey(); void addKeyToAgent(); -- cgit v1.2.3 From 64f5ee63999d4c41cb0b944518333e9a62771c0b Mon Sep 17 00:00:00 2001 From: Thomas Luzat Date: Wed, 7 Mar 2018 23:39:38 +0100 Subject: SSH Agent: Helpful error message for adding keys This adds more helpful error messages when adding keys to an agent fails. Closes #1667. --- src/sshagent/SSHAgent.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/sshagent/SSHAgent.cpp b/src/sshagent/SSHAgent.cpp index 36a16b20b..973e03054 100644 --- a/src/sshagent/SSHAgent.cpp +++ b/src/sshagent/SSHAgent.cpp @@ -186,7 +186,17 @@ bool SSHAgent::addIdentity(OpenSSHKey& key, quint32 lifetime, bool confirm) } if (responseData.length() < 1 || static_cast(responseData[0]) != SSH_AGENT_SUCCESS) { - m_error = tr("Agent refused this identity."); + m_error = tr("Agent refused this identity. Possible reasons include:") + + "\n" + tr("The key has already been added."); + + if (lifetime > 0) { + m_error += "\n" + tr("Restricted lifetime is not supported by the agent (check options)."); + } + + if (confirm) { + m_error += "\n" + tr("A confirmation request is not supported by the agent (check options)."); + } + return false; } -- cgit v1.2.3 From f620ad979f808eca9160d6f72ab3ac8647404a7a Mon Sep 17 00:00:00 2001 From: varjolintu Date: Sun, 11 Mar 2018 10:32:23 +0200 Subject: Fix extension URL --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9f81795c5..b09a5d208 100644 --- a/README.md +++ b/README.md @@ -33,7 +33,7 @@ so please check out your distribution's package list to see if KeePassXC is avai [Mozilla Firefox](https://addons.mozilla.org/en-US/firefox/addon/keepasshttp-connector/) and [Google Chrome or Chromium](https://chrome.google.com/webstore/detail/keepasshttp-connector/dafgdjggglmmknipkhngniifhplpcldb), and [passafari](https://github.com/mmichaa/passafari.safariextension/) in Safari. [[See note about KeePassHTTP]](#Note_about_KeePassHTTP) -- Browser integration with KeePassXC-Browser using [native messaging](https://developer.chrome.com/extensions/nativeMessaging) for [Mozilla Firefox](https://addons.mozilla.org/en-US/firefox/addon/keepassxc-browser/) and [Google Chrome or Chromium](https://chrome.google.com/webstore/detail/keepassxc-browser/iopaggbpplllidnfmcghoonnokmjoicf) +- Browser integration with KeePassXC-Browser using [native messaging](https://developer.chrome.com/extensions/nativeMessaging) for [Mozilla Firefox](https://addons.mozilla.org/en-US/firefox/addon/keepassxc-browser/) and [Google Chrome or Chromium](https://chrome.google.com/webstore/detail/keepassxc-browser/oboonakemofpalcgghocfoadofidjkkk) - Many bug fixes For a full list of features and changes, read the [CHANGELOG](CHANGELOG) document. -- cgit v1.2.3 From 319c8201befeb4f6bed42fdc583b64370f4be828 Mon Sep 17 00:00:00 2001 From: Joan Bruguera Date: Sun, 11 Mar 2018 14:03:48 +0100 Subject: Fix flickering & not restoring from tray on some Linuxes (#1595). Fix/work around KeePassXC flickering and not restoring from tray on some Linux systems, which happens if the window is hidden and minimized by code at the same time (see issue #1595). --- src/gui/MainWindow.cpp | 3 --- src/main.cpp | 2 +- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/src/gui/MainWindow.cpp b/src/gui/MainWindow.cpp index 301b80c45..3cbc43241 100644 --- a/src/gui/MainWindow.cpp +++ b/src/gui/MainWindow.cpp @@ -971,9 +971,6 @@ void MainWindow::trayIconTriggered(QSystemTrayIcon::ActivationReason reason) void MainWindow::hideWindow() { saveWindowInformation(); -#ifndef Q_OS_MAC - setWindowState(windowState() | Qt::WindowMinimized); -#endif QTimer::singleShot(0, this, SLOT(hide())); if (config()->get("security/lockdatabaseminimize").toBool()) { diff --git a/src/main.cpp b/src/main.cpp index 33aa5edd2..f09e80dfe 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -127,7 +127,7 @@ int main(int argc, char** argv) // start minimized if configured bool minimizeOnStartup = config()->get("GUI/MinimizeOnStartup").toBool(); bool minimizeToTray = config()->get("GUI/MinimizeToTray").toBool(); - if (minimizeOnStartup) { + if (minimizeOnStartup && !minimizeToTray) { mainWindow.setWindowState(Qt::WindowMinimized); } if (!(minimizeOnStartup && minimizeToTray)) { -- cgit v1.2.3 From 467867016dcf8207475a606d6406b592385b9ed7 Mon Sep 17 00:00:00 2001 From: Joan Bruguera Date: Sun, 11 Mar 2018 14:04:33 +0100 Subject: Fix toggle window from tray can't hide the window on Windows (#1595) Fix unreliable check on toggleWindow() which causes Windows systems to be unable to hide the window by clicking on the tray icon (see issue #1595). --- src/gui/MainWindow.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/MainWindow.cpp b/src/gui/MainWindow.cpp index 3cbc43241..3c780fa15 100644 --- a/src/gui/MainWindow.cpp +++ b/src/gui/MainWindow.cpp @@ -980,7 +980,7 @@ void MainWindow::hideWindow() void MainWindow::toggleWindow() { - if ((QApplication::activeWindow() == this) && isVisible() && !isMinimized()) { + if (isVisible() && !isMinimized()) { hideWindow(); } else { bringToFront(); -- cgit v1.2.3 From bf9c1b3205c59acca85dd75451146d15945668dd Mon Sep 17 00:00:00 2001 From: Joan Bruguera Date: Sun, 11 Mar 2018 14:05:07 +0100 Subject: Cover the fix/WA for Linux #1595 behind compile time flags & comment. --- src/gui/MainWindow.cpp | 6 ++++++ src/main.cpp | 7 +++++++ 2 files changed, 13 insertions(+) diff --git a/src/gui/MainWindow.cpp b/src/gui/MainWindow.cpp index 3c780fa15..f773e15b8 100644 --- a/src/gui/MainWindow.cpp +++ b/src/gui/MainWindow.cpp @@ -971,6 +971,12 @@ void MainWindow::trayIconTriggered(QSystemTrayIcon::ActivationReason reason) void MainWindow::hideWindow() { saveWindowInformation(); +#ifndef Q_OS_LINUX + // On some Linux systems, the window should NOT be minimized and hidden (i.e. not shown), at + // the same time (which would happen if both minimize on startup and minimize to tray are set) + // since otherwise it causes problems on restore as seen on issue #1595. Hiding it is enough. + setWindowState(windowState() | Qt::WindowMinimized); +#endif QTimer::singleShot(0, this, SLOT(hide())); if (config()->get("security/lockdatabaseminimize").toBool()) { diff --git a/src/main.cpp b/src/main.cpp index f09e80dfe..b3b607f25 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -127,7 +127,14 @@ int main(int argc, char** argv) // start minimized if configured bool minimizeOnStartup = config()->get("GUI/MinimizeOnStartup").toBool(); bool minimizeToTray = config()->get("GUI/MinimizeToTray").toBool(); +#ifndef Q_OS_LINUX + if (minimizeOnStartup) { +#else + // On some Linux systems, the window should NOT be minimized and hidden (i.e. not shown), at + // the same time (which would happen if both minimize on startup and minimize to tray are set) + // since otherwise it causes problems on restore as seen on issue #1595. Hiding it is enough. if (minimizeOnStartup && !minimizeToTray) { +#endif mainWindow.setWindowState(Qt::WindowMinimized); } if (!(minimizeOnStartup && minimizeToTray)) { -- cgit v1.2.3 From 8646586c1a8f1523dbb3c1edf3aaf7682edf9bb6 Mon Sep 17 00:00:00 2001 From: Joan Bruguera Date: Sun, 11 Mar 2018 15:29:48 +0100 Subject: Add GUI test for issue #1595 (minus the minimize at startup case). --- tests/gui/TestGui.cpp | 25 +++++++++++++++++++++++++ tests/gui/TestGui.h | 1 + 2 files changed, 26 insertions(+) diff --git a/tests/gui/TestGui.cpp b/tests/gui/TestGui.cpp index b2ccd332d..25c6f0c7d 100644 --- a/tests/gui/TestGui.cpp +++ b/tests/gui/TestGui.cpp @@ -71,6 +71,8 @@ void TestGui::initTestCase() Config::createTempFileInstance(); // Disable autosave so we can test the modified file indicator Config::instance()->set("AutoSaveAfterEveryChange", false); + // Enable the tray icon so we can test hiding/restoring the window + Config::instance()->set("GUI/ShowTrayIcon", true); m_mainWindow = new MainWindow(); m_tabWidget = m_mainWindow->findChild("tabWidget"); @@ -1091,6 +1093,29 @@ void TestGui::testDragAndDropKdbxFiles() QCOMPARE(m_tabWidget->count(), openedDatabasesCount); } +void TestGui::testTrayRestoreHide() +{ + QSystemTrayIcon *trayIcon = m_mainWindow->findChild(); + + QVERIFY(m_mainWindow->isVisible()); + + trayIcon->activated(QSystemTrayIcon::Trigger); + Tools::wait(100); + QVERIFY(!m_mainWindow->isVisible()); + + trayIcon->activated(QSystemTrayIcon::Trigger); + Tools::wait(100); + QVERIFY(m_mainWindow->isVisible()); + + trayIcon->activated(QSystemTrayIcon::Trigger); + Tools::wait(100); + QVERIFY(!m_mainWindow->isVisible()); + + trayIcon->activated(QSystemTrayIcon::Trigger); + Tools::wait(100); + QVERIFY(m_mainWindow->isVisible()); +} + void TestGui::cleanupTestCase() { delete m_mainWindow; diff --git a/tests/gui/TestGui.h b/tests/gui/TestGui.h index 0b403731d..e7232ccab 100644 --- a/tests/gui/TestGui.h +++ b/tests/gui/TestGui.h @@ -63,6 +63,7 @@ private slots: void testKeePass1Import(); void testDatabaseLocking(); void testDragAndDropKdbxFiles(); + void testTrayRestoreHide(); private: int addCannedEntries(); -- cgit v1.2.3 From f305517724cff7fad84eff5798228fcd6058e1a7 Mon Sep 17 00:00:00 2001 From: Joan Bruguera Date: Sun, 11 Mar 2018 16:27:26 +0100 Subject: Skip the tray restore/hide test of #1595 if there's no tray (fix CI build). --- tests/gui/TestGui.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tests/gui/TestGui.cpp b/tests/gui/TestGui.cpp index 25c6f0c7d..54203c284 100644 --- a/tests/gui/TestGui.cpp +++ b/tests/gui/TestGui.cpp @@ -1095,8 +1095,11 @@ void TestGui::testDragAndDropKdbxFiles() void TestGui::testTrayRestoreHide() { - QSystemTrayIcon *trayIcon = m_mainWindow->findChild(); + if (!QSystemTrayIcon::isSystemTrayAvailable()) { + QSKIP("QSystemTrayIcon::isSystemTrayAvailable() = false, skipping tray restore/hide test..."); + } + QSystemTrayIcon* trayIcon = m_mainWindow->findChild(); QVERIFY(m_mainWindow->isVisible()); trayIcon->activated(QSystemTrayIcon::Trigger); -- cgit v1.2.3 From 970cedf972c573d76219529bdd6d60f20a35b072 Mon Sep 17 00:00:00 2001 From: Joan Bruguera Date: Sun, 11 Mar 2018 19:03:39 +0100 Subject: Add again wrongly removed conditional macro for Mac. Add again the wrongly removed conditional macro for Mac, along with a TODO asking for further documentation on its significance. --- src/gui/MainWindow.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/gui/MainWindow.cpp b/src/gui/MainWindow.cpp index f773e15b8..395189d15 100644 --- a/src/gui/MainWindow.cpp +++ b/src/gui/MainWindow.cpp @@ -971,10 +971,11 @@ void MainWindow::trayIconTriggered(QSystemTrayIcon::ActivationReason reason) void MainWindow::hideWindow() { saveWindowInformation(); -#ifndef Q_OS_LINUX +#if !defined(Q_OS_LINUX) && !defined(Q_OS_MAC) // On some Linux systems, the window should NOT be minimized and hidden (i.e. not shown), at // the same time (which would happen if both minimize on startup and minimize to tray are set) // since otherwise it causes problems on restore as seen on issue #1595. Hiding it is enough. + // TODO: Add an explanation for why this is also not done on Mac (or remove the check) setWindowState(windowState() | Qt::WindowMinimized); #endif QTimer::singleShot(0, this, SLOT(hide())); -- cgit v1.2.3 From 3353b329fc2f91e9c97cac37b827217de79e0edf Mon Sep 17 00:00:00 2001 From: Olivier Le Moal Date: Tue, 13 Mar 2018 00:22:38 +0100 Subject: Fix wrong reply size in NativeMessagingBase * Using length() on QString won't return correct size in bytes when string contains UTF-8 chars. --- src/browser/NativeMessagingBase.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/browser/NativeMessagingBase.cpp b/src/browser/NativeMessagingBase.cpp index 743953e95..f61a36045 100644 --- a/src/browser/NativeMessagingBase.cpp +++ b/src/browser/NativeMessagingBase.cpp @@ -121,7 +121,8 @@ void NativeMessagingBase::sendReply(const QJsonObject& json) void NativeMessagingBase::sendReply(const QString& reply) { if (!reply.isEmpty()) { - uint len = reply.length(); + QByteArray bytes = reply.toUtf8(); + uint len = bytes.size(); std::cout << char(((len>>0) & 0xFF)) << char(((len>>8) & 0xFF)) << char(((len>>16) & 0xFF)) << char(((len>>24) & 0xFF)); std::cout << reply.toStdString() << std::flush; } -- cgit v1.2.3 From 123701080dbb8821c776a69f47b4e5b20ef79f08 Mon Sep 17 00:00:00 2001 From: Piraty Date: Wed, 14 Mar 2018 18:11:33 +0100 Subject: Keep openSSH-portable's blowfish code unmodified and use a stub "includes.h". This also fixes build issues against musl-libc, which does not implicitly include --- src/sshagent/blf.h | 12 +----------- src/sshagent/blowfish.c | 4 ++-- src/sshagent/includes.h | 20 ++++++++++++++++++++ 3 files changed, 23 insertions(+), 13 deletions(-) create mode 100644 src/sshagent/includes.h diff --git a/src/sshagent/blf.h b/src/sshagent/blf.h index 4878e5588..f1ac5a5c2 100644 --- a/src/sshagent/blf.h +++ b/src/sshagent/blf.h @@ -34,17 +34,7 @@ #ifndef _BLF_H_ #define _BLF_H_ -#ifdef _WIN32 - -#include - -typedef uint32_t u_int32_t; -typedef uint16_t u_int16_t; -typedef uint8_t u_int8_t; - -#define bzero(p,s) memset(p, 0, s) - -#endif +#include "includes.h" #if !defined(HAVE_BCRYPT_PBKDF) && !defined(HAVE_BLH_H) diff --git a/src/sshagent/blowfish.c b/src/sshagent/blowfish.c index 02e9ac0bd..e10f7e7d9 100644 --- a/src/sshagent/blowfish.c +++ b/src/sshagent/blowfish.c @@ -39,7 +39,7 @@ * Bruce Schneier. */ -#define HAVE_BLF_H +#include "includes.h" #if !defined(HAVE_BCRYPT_PBKDF) && (!defined(HAVE_BLOWFISH_INITSTATE) || \ !defined(HAVE_BLOWFISH_EXPAND0STATE) || !defined(HAVE_BLF_ENC)) @@ -51,7 +51,7 @@ #include #ifdef HAVE_BLF_H -#include "blf.h" +#include #endif #undef inline diff --git a/src/sshagent/includes.h b/src/sshagent/includes.h new file mode 100644 index 000000000..c6bb4d32e --- /dev/null +++ b/src/sshagent/includes.h @@ -0,0 +1,20 @@ +// mimic openSSH-portable's includes.h file to be able to use +// its unmodified blowfish code + +#define HAVE_BLF_H + +#ifndef _GNU_SOURCE +#define _GNU_SOURCE /* activate extra prototypes for glibc */ +#endif +#include + + +#ifdef _WIN32 +#include + +typedef uint32_t u_int32_t; +typedef uint16_t u_int16_t; +typedef uint8_t u_int8_t; + +#define bzero(p,s) memset(p, 0, s) +#endif -- cgit v1.2.3 From 4a207f079bd89bed68980d55634a6abcac78aa8d Mon Sep 17 00:00:00 2001 From: Jonathan White Date: Sat, 17 Mar 2018 11:47:28 -0400 Subject: Enable high entropy ASLR for Windows builds --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4c8929aef..a45933562 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -245,8 +245,8 @@ if(MINGW) set(CMAKE_RC_COMPILE_OBJECT " -O coff -i -o ") if(NOT (CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")) # Enable DEP and ASLR - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--nxcompat -Wl,--dynamicbase") - set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,--nxcompat -Wl,--dynamicbase") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--nxcompat -Wl,--dynamicbase -Wl,--high-entropy-va") + set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,--nxcompat -Wl,--dynamicbase -Wl,--high-entropy-va") endif() endif() -- cgit v1.2.3 From 0650b3084e344cd6333de702bbd3205e8da03522 Mon Sep 17 00:00:00 2001 From: Valeriy Malov Date: Tue, 13 Mar 2018 22:28:19 +0300 Subject: Do not ignore MainWindow closeEvent when closing to tray Ignoring closeEvent signals that the application doesn't want the widget to be closed. This may cause unwanted shutdown interruption. There's no difference between close() and hide() unless WA_DeleteOnClose is set, so it's better to just accept the event if we're hiding the window afterwards anyway. Resolves #856 --- src/gui/MainWindow.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/MainWindow.cpp b/src/gui/MainWindow.cpp index 395189d15..d7dadb0c0 100644 --- a/src/gui/MainWindow.cpp +++ b/src/gui/MainWindow.cpp @@ -797,7 +797,7 @@ void MainWindow::closeEvent(QCloseEvent* event) config()->get("GUI/MinimizeOnClose").toBool(); if (minimizeOnClose && !m_appExitCalled) { - event->ignore(); + event->accept(); hideWindow(); if (config()->get("security/lockdatabaseminimize").toBool()) { -- cgit v1.2.3 From 3a92e4aab9efd9b3dcc5f0c3b752ca0ba16c5484 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sami=20V=C3=A4nttinen?= Date: Tue, 3 Apr 2018 05:13:07 +0300 Subject: Socket buffer size fix (#1720) --- src/browser/BrowserAction.cpp | 5 +++-- src/browser/BrowserService.h | 2 -- src/browser/NativeMessagingBase.h | 7 +++++++ src/browser/NativeMessagingHost.cpp | 8 +++++++- src/proxy/NativeMessagingHost.cpp | 7 +++++++ 5 files changed, 24 insertions(+), 5 deletions(-) diff --git a/src/browser/BrowserAction.cpp b/src/browser/BrowserAction.cpp index b15d8ed59..7519c0e81 100755 --- a/src/browser/BrowserAction.cpp +++ b/src/browser/BrowserAction.cpp @@ -20,6 +20,7 @@ #include #include "BrowserAction.h" #include "BrowserSettings.h" +#include "NativeMessagingBase.h" #include "sodium.h" #include "sodium/crypto_box.h" #include "sodium/randombytes.h" @@ -456,7 +457,7 @@ QString BrowserAction::encrypt(const QString plaintext, const QString nonce) std::vector sk(sa.cbegin(), sa.cend()); std::vector e; - e.resize(max_length); + e.resize(NATIVE_MSG_MAX_LENGTH); if (m.empty() || n.empty() || ck.empty() || sk.empty()) { return QString(); @@ -484,7 +485,7 @@ QByteArray BrowserAction::decrypt(const QString encrypted, const QString nonce) std::vector sk(sa.cbegin(), sa.cend()); std::vector d; - d.resize(max_length); + d.resize(NATIVE_MSG_MAX_LENGTH); if (m.empty() || n.empty() || ck.empty() || sk.empty()) { return QByteArray(); diff --git a/src/browser/BrowserService.h b/src/browser/BrowserService.h index 5a96e1ecd..08007d831 100644 --- a/src/browser/BrowserService.h +++ b/src/browser/BrowserService.h @@ -25,8 +25,6 @@ #include "gui/DatabaseTabWidget.h" #include "core/Entry.h" -enum { max_length = 16*1024 }; - class BrowserService : public QObject { Q_OBJECT diff --git a/src/browser/NativeMessagingBase.h b/src/browser/NativeMessagingBase.h index 4253b7585..26e0a9902 100644 --- a/src/browser/NativeMessagingBase.h +++ b/src/browser/NativeMessagingBase.h @@ -32,6 +32,13 @@ #include #include +#ifndef Q_OS_WIN +#include +#include +#endif + +static const int NATIVE_MSG_MAX_LENGTH = 1024*1024; + class NativeMessagingBase : public QObject { Q_OBJECT diff --git a/src/browser/NativeMessagingHost.cpp b/src/browser/NativeMessagingHost.cpp index 0101e9444..88b7dd722 100755 --- a/src/browser/NativeMessagingHost.cpp +++ b/src/browser/NativeMessagingHost.cpp @@ -142,11 +142,17 @@ void NativeMessagingHost::newLocalConnection() void NativeMessagingHost::newLocalMessage() { QLocalSocket* socket = qobject_cast(QObject::sender()); - if (!socket || socket->bytesAvailable() <= 0) { return; } + socket->setReadBufferSize(NATIVE_MSG_MAX_LENGTH); + int socketDesc = socket->socketDescriptor(); + if (socketDesc) { + int max = NATIVE_MSG_MAX_LENGTH; + setsockopt(socketDesc, SOL_SOCKET, SO_SNDBUF, &max, sizeof(max)); + } + QByteArray arr = socket->readAll(); if (arr.isEmpty()) { return; diff --git a/src/proxy/NativeMessagingHost.cpp b/src/proxy/NativeMessagingHost.cpp index c5ce60ea9..15416dc8d 100755 --- a/src/proxy/NativeMessagingHost.cpp +++ b/src/proxy/NativeMessagingHost.cpp @@ -22,6 +22,13 @@ NativeMessagingHost::NativeMessagingHost() : NativeMessagingBase() { m_localSocket = new QLocalSocket(); m_localSocket->connectToServer(getLocalServerPath()); + m_localSocket->setReadBufferSize(NATIVE_MSG_MAX_LENGTH); + + int socketDesc = m_localSocket->socketDescriptor(); + if (socketDesc) { + int max = NATIVE_MSG_MAX_LENGTH; + setsockopt(socketDesc, SOL_SOCKET, SO_SNDBUF, &max, sizeof(max)); + } #ifdef Q_OS_WIN m_running.store(true); m_future = QtConcurrent::run(this, static_cast(&NativeMessagingHost::readNativeMessages)); -- cgit v1.2.3 From d1c5a1a5f89d3d440a16c3d1a0dc5e97d0bc3f9e Mon Sep 17 00:00:00 2001 From: Thomas Luzat Date: Thu, 5 Apr 2018 03:42:14 +0200 Subject: SSH Agent: Fix wrong slot reference (#1787) Fixes an error message and non-working functionality introduced by a wrong slot referenced in PR #1679. --- src/gui/entry/EditEntryWidget.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/entry/EditEntryWidget.cpp b/src/gui/entry/EditEntryWidget.cpp index 7acd3af34..6fd65c1a3 100644 --- a/src/gui/entry/EditEntryWidget.cpp +++ b/src/gui/entry/EditEntryWidget.cpp @@ -281,7 +281,7 @@ void EditEntryWidget::setupSSHAgent() connect(m_sshAgentUi->decryptButton, SIGNAL(clicked()), SLOT(decryptPrivateKey())); connect(m_sshAgentUi->copyToClipboardButton, SIGNAL(clicked()), SLOT(copyPublicKey())); - connect(m_advancedUi->attachmentsWidget->entryAttachments(), SIGNAL(modified()), SLOT(updateAttachments())); + connect(m_advancedUi->attachmentsWidget->entryAttachments(), SIGNAL(modified()), SLOT(updateSSHAgentAttachments())); addPage(tr("SSH Agent"), FilePath::instance()->icon("apps", "utilities-terminal"), m_sshAgentWidget); } -- cgit v1.2.3 From c21f4b5ec2bde3acd10398bd46ed1ac8873e0a98 Mon Sep 17 00:00:00 2001 From: Steven Noonan Date: Wed, 4 Apr 2018 18:58:34 -0700 Subject: OpenSSHKey: correctly parse aes-256-cbc/ctr keys (#1682) AES-256 uses a 32-byte (256-bit) key size. This un-breaks the loader and tests added for AES-256-CBC and AES-256-CTR PEM keys. * OpenSSHKey: correctly parse encrypted PEM AES-256-CBC/AES-256-CTR keys * OpenSSHKey: use correct key derivation for AES-256 --- src/sshagent/OpenSSHKey.cpp | 24 +++++-- tests/TestOpenSSHKey.cpp | 162 +++++++++++++++++++++++++++++++++++--------- tests/TestOpenSSHKey.h | 8 ++- 3 files changed, 152 insertions(+), 42 deletions(-) diff --git a/src/sshagent/OpenSSHKey.cpp b/src/sshagent/OpenSSHKey.cpp index ccc7606f0..cfff5a400 100644 --- a/src/sshagent/OpenSSHKey.cpp +++ b/src/sshagent/OpenSSHKey.cpp @@ -319,9 +319,9 @@ bool OpenSSHKey::openPrivateKey(const QString& passphrase) if (m_cipherName.compare("aes-128-cbc", Qt::CaseInsensitive) == 0) { cipher.reset(new SymmetricCipher(SymmetricCipher::Aes128, SymmetricCipher::Cbc, SymmetricCipher::Decrypt)); - } else if (m_cipherName == "aes256-cbc") { + } else if (m_cipherName == "aes256-cbc" || m_cipherName.compare("aes-256-cbc", Qt::CaseInsensitive) == 0) { cipher.reset(new SymmetricCipher(SymmetricCipher::Aes256, SymmetricCipher::Cbc, SymmetricCipher::Decrypt)); - } else if (m_cipherName == "aes256-ctr") { + } else if (m_cipherName == "aes256-ctr" || m_cipherName.compare("aes-256-ctr", Qt::CaseInsensitive) == 0) { cipher.reset(new SymmetricCipher(SymmetricCipher::Aes256, SymmetricCipher::Ctr, SymmetricCipher::Decrypt)); } else if (m_cipherName != "none") { m_error = tr("Unknown cipher: %1").arg(m_cipherName); @@ -372,10 +372,22 @@ bool OpenSSHKey::openPrivateKey(const QString& passphrase) return false; } - QCryptographicHash hash(QCryptographicHash::Md5); - hash.addData(passphrase.toUtf8()); - hash.addData(m_cipherIV.data(), 8); - QByteArray keyData = hash.result(); + QByteArray keyData; + QByteArray mdBuf; + do { + QCryptographicHash hash(QCryptographicHash::Md5); + hash.addData(mdBuf); + hash.addData(passphrase.toUtf8()); + hash.addData(m_cipherIV.data(), 8); + mdBuf = hash.result(); + keyData.append(mdBuf); + } while(keyData.size() < cipher->keySize()); + + if (keyData.size() > cipher->keySize()) { + // If our key size isn't a multiple of 16 (e.g. AES-192 or something), + // then we will need to truncate it. + keyData.resize(cipher->keySize()); + } if (!cipher->init(keyData, m_cipherIV)) { m_error = cipher->errorString(); diff --git a/tests/TestOpenSSHKey.cpp b/tests/TestOpenSSHKey.cpp index 8ac129866..3f91ab4df 100644 --- a/tests/TestOpenSSHKey.cpp +++ b/tests/TestOpenSSHKey.cpp @@ -90,39 +90,39 @@ void TestOpenSSHKey::testParseDSA() QCOMPARE(key.fingerprint(), QString("SHA256:tbbNuLN1hja8JNASDTlLOZQsbTlJDzJlz/oAGK3sX18")); } -void TestOpenSSHKey::testDecryptAES128CBC() +void TestOpenSSHKey::testDecryptRSAAES128CBC() { const QString keyString = QString( - "-----BEGIN RSA PRIVATE KEY-----\n" - "Proc-Type: 4,ENCRYPTED\n" - "DEK-Info: AES-128-CBC,804E4D214D1263FF94E3743FE799DBB4\n" - "\n" - "lM9TDfOTbiRhaGGDh7Hn+rqw8CCWcYBZYu7smyYLdnWKXKPmbne8CQFZBAS1FJwZ\n" - "6Mj6n075yFGyzN9/OfeqKiUA4adlbwLbGwB+yyKsC2FlsvRIEr4hup02WWM47vHj\n" - "DS4TRmNkE7MKFLhpNCyt5OGGM45s+/lwVTw51K0Hm99TBd72IrX4jfY9ZxAVbL3l\n" - "aTohL8x6oOTe7q318QgJoFi+DjJhDWLGLLJ7fBqD2imz2fmrY4j8Jpw2sDe1rj82\n" - "gMqqNG3FrfN0S4uYlWYH5pAh+BUcB1UdmTU/rV5wJMK1oUytmZv/J2+X/0k3Y93F\n" - "aw6JWOy28OizW+TQXvv8gREWsp5PEclqUZhhGQbVbCQCiDOxg+xiXNySdRH1IqjR\n" - "zQiKgD4SPzkxQekExPaIQT/KutWZdMNYybEqooCx8YyeDoN31z7Wa2rv6OulOn/j\n" - "wJFvyd2PT/6brHKI4ky8RYroDf4FbVYKfyEW5CSAg2OyL/tY/kSPgy/k0WT7fDwq\n" - "dPSuYM9yeWNL6kAhDqDOv8+s3xvOVEljktBvQvItQwVLmHszC3E2AcnaxzdblKPu\n" - "e3+mBT80NXHjERK2ht+/9JYseK1ujNbNAaG8SbKfU3FF0VlyJ0QW6TuIEdpNnymT\n" - "0fm0cDfKNaoeJIFnBRZhgIOJAic9DM0cTe/vSG69DaUYsaQPp36al7Fbux3GpFHS\n" - "OtJEySYGro/6zvJ9dDIEfIGZjA3RaMt6+DuyJZXQdT2RNXa9j60xW7dXh0En4n82\n" - "JUKTxYhDPLS5c8BzpJqoopxpKwElmrJ7Y3xpd6z2vIlD8ftuZrkk6siTMNQ2s7MI\n" - "Xl332O+0H4k7uSfczHPOOw36TFhNjGQAP0b7O+0/RVG0ttOIoAn7ZkX3nfdbtG5B\n" - "DWKvDaopvrcC2/scQ5uLUnqnBiGw1XiYpdg5ang7knHNzHZAIekVaYYZigpCAKp+\n" - "OtoaDeUEzqFhYVmF8ad1fgvC9ZUsuxS4XUHCKl0H6CJcvW9MJPVbveqYoK+j9qKd\n" - "iMIkQBP1kE2rzGZVGUkZTpM9LVD9nP0nsbr6E8BatFcNgRirsg2BTJglNpXlCmY6\n" - "ldzJ/ELBbzoXIn+0wTGai0o4eBPx55baef69JfPuZqEB9pLNE+mHstrqIwcfqYu4\n" - "M+Vzun1QshRMj9a1PVkIHfs1fLeebI4QCHO0vJlc9K4iYPM4rsDNO3YaAgGRuARS\n" - "f3McGiGFxkv5zxe8i05ZBnn+exE77jpRKxd223jAMe2wu4WiFB7ZVo4Db6b5Oo2T\n" - "TPh3VuY7TNMEKkcUi+mGLKjroocQ5j8WQYlfnyOaTalUVQDzOTNb67QIIoiszR0U\n" - "+AXGyxHj0QtotZFoPME+AbS9Zqy3SgSOuIzPBPU5zS4uoKNdD5NPE5YAuafCjsDy\n" - "MT4DVy+cPOQYUK022S7T2nsA1btmvUvD5LL2Mc8VuKsWOn/7FKZua6OCfipt6oX0\n" - "1tzYrw0/ALK+CIdVdYIiPPfxGZkr+JSLOOg7u50tpmen9GzxgNTv63miygwUAIDF\n" - "u0GbQwOueoA453/N75FcXOgrbqTdivyadUbRP+l7YJk/SfIytyJMOigejp+Z1lzF\n" - "-----END RSA PRIVATE KEY-----\n" + "-----BEGIN RSA PRIVATE KEY-----\n" + "Proc-Type: 4,ENCRYPTED\n" + "DEK-Info: AES-128-CBC,804E4D214D1263FF94E3743FE799DBB4\n" + "\n" + "lM9TDfOTbiRhaGGDh7Hn+rqw8CCWcYBZYu7smyYLdnWKXKPmbne8CQFZBAS1FJwZ\n" + "6Mj6n075yFGyzN9/OfeqKiUA4adlbwLbGwB+yyKsC2FlsvRIEr4hup02WWM47vHj\n" + "DS4TRmNkE7MKFLhpNCyt5OGGM45s+/lwVTw51K0Hm99TBd72IrX4jfY9ZxAVbL3l\n" + "aTohL8x6oOTe7q318QgJoFi+DjJhDWLGLLJ7fBqD2imz2fmrY4j8Jpw2sDe1rj82\n" + "gMqqNG3FrfN0S4uYlWYH5pAh+BUcB1UdmTU/rV5wJMK1oUytmZv/J2+X/0k3Y93F\n" + "aw6JWOy28OizW+TQXvv8gREWsp5PEclqUZhhGQbVbCQCiDOxg+xiXNySdRH1IqjR\n" + "zQiKgD4SPzkxQekExPaIQT/KutWZdMNYybEqooCx8YyeDoN31z7Wa2rv6OulOn/j\n" + "wJFvyd2PT/6brHKI4ky8RYroDf4FbVYKfyEW5CSAg2OyL/tY/kSPgy/k0WT7fDwq\n" + "dPSuYM9yeWNL6kAhDqDOv8+s3xvOVEljktBvQvItQwVLmHszC3E2AcnaxzdblKPu\n" + "e3+mBT80NXHjERK2ht+/9JYseK1ujNbNAaG8SbKfU3FF0VlyJ0QW6TuIEdpNnymT\n" + "0fm0cDfKNaoeJIFnBRZhgIOJAic9DM0cTe/vSG69DaUYsaQPp36al7Fbux3GpFHS\n" + "OtJEySYGro/6zvJ9dDIEfIGZjA3RaMt6+DuyJZXQdT2RNXa9j60xW7dXh0En4n82\n" + "JUKTxYhDPLS5c8BzpJqoopxpKwElmrJ7Y3xpd6z2vIlD8ftuZrkk6siTMNQ2s7MI\n" + "Xl332O+0H4k7uSfczHPOOw36TFhNjGQAP0b7O+0/RVG0ttOIoAn7ZkX3nfdbtG5B\n" + "DWKvDaopvrcC2/scQ5uLUnqnBiGw1XiYpdg5ang7knHNzHZAIekVaYYZigpCAKp+\n" + "OtoaDeUEzqFhYVmF8ad1fgvC9ZUsuxS4XUHCKl0H6CJcvW9MJPVbveqYoK+j9qKd\n" + "iMIkQBP1kE2rzGZVGUkZTpM9LVD9nP0nsbr6E8BatFcNgRirsg2BTJglNpXlCmY6\n" + "ldzJ/ELBbzoXIn+0wTGai0o4eBPx55baef69JfPuZqEB9pLNE+mHstrqIwcfqYu4\n" + "M+Vzun1QshRMj9a1PVkIHfs1fLeebI4QCHO0vJlc9K4iYPM4rsDNO3YaAgGRuARS\n" + "f3McGiGFxkv5zxe8i05ZBnn+exE77jpRKxd223jAMe2wu4WiFB7ZVo4Db6b5Oo2T\n" + "TPh3VuY7TNMEKkcUi+mGLKjroocQ5j8WQYlfnyOaTalUVQDzOTNb67QIIoiszR0U\n" + "+AXGyxHj0QtotZFoPME+AbS9Zqy3SgSOuIzPBPU5zS4uoKNdD5NPE5YAuafCjsDy\n" + "MT4DVy+cPOQYUK022S7T2nsA1btmvUvD5LL2Mc8VuKsWOn/7FKZua6OCfipt6oX0\n" + "1tzYrw0/ALK+CIdVdYIiPPfxGZkr+JSLOOg7u50tpmen9GzxgNTv63miygwUAIDF\n" + "u0GbQwOueoA453/N75FcXOgrbqTdivyadUbRP+l7YJk/SfIytyJMOigejp+Z1lzF\n" + "-----END RSA PRIVATE KEY-----\n" ); const QByteArray keyData = keyString.toLatin1(); @@ -181,7 +181,7 @@ void TestOpenSSHKey::testParseRSA() QCOMPARE(key.fingerprint(), QString("SHA256:DYdaZciYNxCejr+/8x+OKYxeTU1D5UsuIFUG4PWRFkk")); } -void TestOpenSSHKey::testDecryptAES256CBC() +void TestOpenSSHKey::testDecryptOpenSSHAES256CBC() { const QString keyString = QString( "-----BEGIN OPENSSH PRIVATE KEY-----\n" @@ -215,7 +215,55 @@ void TestOpenSSHKey::testDecryptAES256CBC() QVERIFY(privateKey.length() == 158); } -void TestOpenSSHKey::testDecryptAES256CTR() +void TestOpenSSHKey::testDecryptRSAAES256CBC() +{ + const QString keyString = QString( + "-----BEGIN RSA PRIVATE KEY-----\n" + "Proc-Type: 4,ENCRYPTED\n" + "DEK-Info: AES-256-CBC,D51E3F558B621BD9384627762CBD16AC\n" + "\n" + "b6nr/06Gj8/Nw3ZFMePFyZeuBodExvZZtZPSH3t/2ArcxXOkoqUhLmlcY/JrvnBF\n" + "JHc34wx/6Yng7mqtUMuk2iMemTzOj3JRx8zHUhwPLnjM/tmeOm0wBUb3WB4+rFZW\n" + "s1PaIgeKywKgFK0UkcSRpMuSaxheWmHrtJkBsHTF7Tg3ogPL8Dc+nhQlbe/ZGaQb\n" + "vMdSYcBMaXngS5ZiOafXeY8+l+IMMOZwy5vPTFQGqKHIzOxFhShs1hSExnwOXy69\n" + "wxrA/QftjNEy5ixIeGT7iQfRB04tEVg0DjYphTPmI2ophzFlwJVBjhj2cmmnsMZg\n" + "a2TdT/78KZsw2cA5ieMcU6d7Yz5p5nu5dyTbZonn6qWficdZRJwZnVb5ikPnJYbZ\n" + "1YJRHHND+RWtpanxz7WhStscTCLeI9w9j2gqBJSjKDPgJaoMiA+tyEoakNlPYg+9\n" + "DadJkBGP0g5E9zw0n4niqQ7eCxk7qolmW6Wtn2zL4UyeJKGi9NWFSGW9x/PmAIse\n" + "E2KVodiJMRNa8/qUZcW58ZG2uRnFTsW4BXdmzOy/Zp53TVGWStBVLDcldSD03ItD\n" + "JIWQWDgWp5xyVqPl+8mkW7xDY0GRVSJCyRkctQeGTGysy0BcNjgQQtiA3lPC0rY5\n" + "m2VxrCYU1KuyHsAjs/V8THcW4a1UdPcVBg1QbCh29bMoM6u4MuXVt7rkwxAV9HJa\n" + "VbwPsKy7V6G60KaAFIiOs0wdOzBZBoPGd9vBQOEzATh2FYJruDo2OfzEnhv25RxE\n" + "1q+C/Jds9cWqaNY8kNtUG799XIKkjrC6KvnoV6UA4BkGs2DAcO9rnwtl/hToEoBe\n" + "ZVj72dlTuS6l9rHqKaz2GI0k0SEt/ZoakPHeDRgPNcDvEZWitV8MuD6Mwb47Y88u\n" + "sjBmS5k4sJOtB4bLg/UShcqYfkv2OTsK90qGQtba9vMk04Xh1FuxB4fHa5VoKrsX\n" + "Th/LB34xoYugd16NPmLuawhSo70o4bT70GYpxnb4brGfjWiuthRdegAG9ESSX+M6\n" + "rNKQPnn2GSroIpkoA4k0PaflcE5tpzeIiJdv0h65N3vw6MFnCaWy8sRSy9fMyRim\n" + "U8QZB2jcp+YjUU/eny3scuh0Vqt6g1tfFbI84pCC5bArBirf63MeMtwDU/IVImax\n" + "xzKOzl7k8ropA+rhAJ4Z9X35EmUncBXhf8g39w6nFuSlqjE6rMxCrsrehljQ1Iuz\n" + "bujaJ2PKpf98OejHDKnMDOfBBq0DdeERCYWlCcqWSgrEgHh4vB5dEQAPP5bAkdZj\n" + "m0Dq+gF99yadioxf3/MUZVTa1dHklBJJkXTYVPeyH07Th5j7bGCcVb9Zd2Ao/Dia\n" + "MPWf6xViCC6d0njCLQY2R8mOR5OMVsdlFrsKZMQ/lqjS/WSM6URDkuGb0Cq94TQd\n" + "7DoblcA50FTwYrVXMygWygbjzJxhcoJDHztzwoqLT/ghh+6zRg6R/fY222tHHbhz\n" + "nePf421NILzfxnuW+GOwRCM5+IHE3OBS/PYDGijjRFHU4ky0rRRDE64m9CeFzeBh\n" + "CnFvW6Yx3Hrh5tXBP7kRZ6KjyrPP7tI4ciVSJceSBLRzFmoBr10kRMm+VsUh2xZH\n" + "-----END RSA PRIVATE KEY-----\n" + ); + + const QByteArray keyData = keyString.toLatin1(); + + OpenSSHKey key; + QVERIFY(key.parse(keyData)); + QVERIFY(key.encrypted()); + QCOMPARE(key.cipherName(), QString("AES-256-CBC")); + QVERIFY(!key.openPrivateKey("incorrectpassphrase")); + QVERIFY(key.openPrivateKey("correctpassphrase")); + QCOMPARE(key.type(), QString("ssh-rsa")); + QCOMPARE(key.comment(), QString("")); + QCOMPARE(key.fingerprint(), QString("SHA256:1Hsebt2WWnmc72FERsUOgvaajIGHkrMONxXylcmk87U")); +} + +void TestOpenSSHKey::testDecryptOpenSSHAES256CTR() { const QString keyString = QString( "-----BEGIN OPENSSH PRIVATE KEY-----\n" @@ -248,3 +296,51 @@ void TestOpenSSHKey::testDecryptAES256CTR() QVERIFY(publicKey.length() == 51); QVERIFY(privateKey.length() == 158); } + +void TestOpenSSHKey::testDecryptRSAAES256CTR() +{ + const QString keyString = QString( + "-----BEGIN RSA PRIVATE KEY-----\n" + "Proc-Type: 4,ENCRYPTED\n" + "DEK-Info: AES-256-CTR,192421854316290DFA8F469A1E8CB9BB\n" + "\n" + "3h7gUWua+jcvhYj1vUusbMdOG9j8SmNWFV5Hfersi8nF4ddsWEQDnMrRuhtIn4tU\n" + "GcLY+SXguim5XXwF8gG1tmvpvFMhudTfX+0cIAX7eAVmqLy2RTA18DWqDwWokVP0\n" + "RJPgRJJSorjMtu2F0YGVVjElW7pHIal7luNk3BDgYUMlgSg0BGOWb+9BkXcEnfc8\n" + "KEwsJw2onoR2eXo6rYnczGaqPhAPu+I+PfUn0J8PFiffWc1KebRntLdRWeNsBS4p\n" + "oxtqByzMYIu/WPSJJ5iFoNdKaWQPiZJB+juwI1wNLEtpzKkhpc7/6mOy87h+0eGV\n" + "fF7javrbHv37eE+k2iZXrcLfvRpiBqt5+uhhCaM8TivBeUho5J38ru/wt/dk+OvY\n" + "tzXboWA4zVnaYmqta1CkXYKOmb5a8TWEwtxmAuE6kCz/n3pPa6gwkwsyGI65IEyX\n" + "ycJsbwUilAzXTcz5bIruGx38Sa9fndAN9llOQMS/hdyNs5W5dO1XZ5gU+ARPce+j\n" + "+A2R8oCUv+2ciEu8z3F++U9aTRmTlD3xeIM0IWUFXKt8Y9fSRC5XoPCbZYNxnV6/\n" + "hn9NPKCb890Faxies3MABOB5IZ0aTPWkx9ntxFhMaXyfkX2YthNO0GzAENPP9Knt\n" + "DYhQePlKQ7sNi8+wzsHNeDxNuL/+Rib2MN3ankDtHIsqFz/Em+rD0+3ya8bLy3pP\n" + "eeUiNpezL+uxI5llq/pikzK4sOgvH1r5YEkMxt9I09grkBwxR7DMBo0vgRE2MLiL\n" + "nlri8TDwArC1+0gE8NspkkClsBOHXuVlGZo5lup2tn5MzERQcLvuFnAby/GnaVXQ\n" + "Hm76teb1wMdL58FrdZsKR6e80E+F6JpTsz0a3XJqptgAwGsoxqizkUNJG5hRP8bi\n" + "NBCFQZPeYi/GxgN5O2UkxhgRkKAcrHg+G87nhLk1ipsc214rb6iOspNizP6fGDuv\n" + "/bsNTpYRgMNxCLh5Nv0HSUqckoNKOcIVe/9nF5/LLFGfhz95agjKTbBygThFK28N\n" + "bnHq5fO9yKCMrGCRBQ6No1wwexyS4IAq17LcQP3k4w4n+Wt2GjO5HIldGOEyGqCE\n" + "zeHYrPpGXF/yf3XTm00XghdQtVtRJptdddXVGZN3EN2w7/ghOSIIlsJO9C4IRgU3\n" + "WkhX7oOpSE4wmXd5Ada+D1U46snW5nWANWko2NmQNVDeJcvuymL6t2ccNYeFWiA+\n" + "Hlv0avBnqng7ZWPxYacqZI3+vU0rN9usN1pzwY/4NsBa34o3M7u6KvzEkyewbyUT\n" + "VfXLJ8XRzb2u4NqQv0WiTBIRxvVB1sRPcrwB4HWKHwRFT8T7f1fefteROrKV7aKm\n" + "Q48pckidDM0ORh1yIET8u24Mreo5eeWXjVJ9MHoM0486VySYxMwk8yp4tnaHx5kd\n" + "fGlBbbwFOifhzjAk0u3KJRAG85t2GZhfTMo1IHS2kdu4Xs1N00ZmK0hjeGG+DCwy\n" + "06ZKHOF5BHWU3SpQEjCsPDwfIpOINWGAJJnp6NIVf7FkHwViV50GWWGSZal4NqZy\n" + "kR19buHiOb7KnGoPCw8MUmIym8v30FePhM4YQ7ASmRtsXlAhQNRX\n" + "-----END RSA PRIVATE KEY-----\n" + ); + + const QByteArray keyData = keyString.toLatin1(); + + OpenSSHKey key; + QVERIFY(key.parse(keyData)); + QVERIFY(key.encrypted()); + QCOMPARE(key.cipherName(), QString("AES-256-CTR")); + QVERIFY(!key.openPrivateKey("incorrectpassphrase")); + QVERIFY(key.openPrivateKey("correctpassphrase")); + QCOMPARE(key.type(), QString("ssh-rsa")); + QCOMPARE(key.comment(), QString("")); + QCOMPARE(key.fingerprint(), QString("SHA256:1Hsebt2WWnmc72FERsUOgvaajIGHkrMONxXylcmk87U")); +} diff --git a/tests/TestOpenSSHKey.h b/tests/TestOpenSSHKey.h index 5d2724410..2d791dee8 100644 --- a/tests/TestOpenSSHKey.h +++ b/tests/TestOpenSSHKey.h @@ -31,9 +31,11 @@ private slots: void testParse(); void testParseDSA(); void testParseRSA(); - void testDecryptAES128CBC(); - void testDecryptAES256CBC(); - void testDecryptAES256CTR(); + void testDecryptRSAAES128CBC(); + void testDecryptOpenSSHAES256CBC(); + void testDecryptRSAAES256CBC(); + void testDecryptOpenSSHAES256CTR(); + void testDecryptRSAAES256CTR(); }; #endif // TESTOPENSSHKEY_H -- cgit v1.2.3 From 056bbaa92169152ca96466615b1cd77a272998c6 Mon Sep 17 00:00:00 2001 From: Steven Noonan Date: Wed, 4 Apr 2018 19:18:58 -0700 Subject: Improve fetch favicon (#1786) * Eliminate dependency on libcurl in favor of Qt5Network code * Supports older Qt versions without QNetworkRequest::FollowRedirectsAttribute * Show a progress dialog when downloading the favicon. The main utility of this is giving the user the option to cancel a download attempt (e.g. if it's taking too long). Canceling will try the next fallback URL in the list. * Try three different ways to obtain the favicon, in this order: 1) Direct to fully-qualified domain (e.g. https://foo.bar.example.com/favicon.ico) 2) Direct to 2nd-level domain (e.g. https://example.com/favicon.ico) 3) Google lookup for 2nd-level domain name (if enabled in settings) I changed the Google lookup, because a match is more likely to be found for the 2nd level domain than for the fully-qualified name. Google's error behavior is strange. If it doesn't find a match, it doesn't return an error. Instead, it returns a generic default icon, which is not really the desired result. This also means that unless we have some way to detect that we've received the generic icon, we can't fall back to any alternatives. Signed-off-by: Steven Noonan --- src/CMakeLists.txt | 3 - src/gui/EditWidgetIcons.cpp | 203 +++++++++++++++++++++++++++++++------------- src/gui/EditWidgetIcons.h | 33 ++++++- src/main.cpp | 17 ++++ 4 files changed, 189 insertions(+), 67 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index b3c7a650f..bb1949dfc 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -202,9 +202,6 @@ add_feature_info(SSHAgent WITH_XC_SSHAGENT "SSH agent integration compatible wit add_feature_info(YubiKey WITH_XC_YUBIKEY "YubiKey HMAC-SHA1 challenge-response") add_subdirectory(http) -if(WITH_XC_NETWORKING) - find_package(CURL REQUIRED) -endif() set(BROWSER_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/browser) add_subdirectory(browser) diff --git a/src/gui/EditWidgetIcons.cpp b/src/gui/EditWidgetIcons.cpp index af4476ac3..837d6ef5c 100644 --- a/src/gui/EditWidgetIcons.cpp +++ b/src/gui/EditWidgetIcons.cpp @@ -21,7 +21,6 @@ #include #include -#include #include "core/Config.h" #include "core/Group.h" @@ -31,9 +30,7 @@ #include "gui/MessageBox.h" #ifdef WITH_XC_NETWORKING -#include -#include "core/AsyncTask.h" -#undef MessageBox +#include #endif IconStruct::IconStruct() @@ -42,10 +39,31 @@ IconStruct::IconStruct() { } +UrlFetchProgressDialog::UrlFetchProgressDialog(const QUrl &url, QWidget *parent) + : QProgressDialog(parent) +{ + setWindowTitle(tr("Download Progress")); + setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); + setLabelText(tr("Downloading %1.").arg(url.toDisplayString())); + setMinimum(0); + setValue(0); + setMinimumDuration(0); + setMinimumSize(QSize(400, 75)); +} + +void UrlFetchProgressDialog::networkReplyProgress(qint64 bytesRead, qint64 totalBytes) +{ + setMaximum(totalBytes); + setValue(bytesRead); +} + EditWidgetIcons::EditWidgetIcons(QWidget* parent) : QWidget(parent) , m_ui(new Ui::EditWidgetIcons()) , m_database(nullptr) +#ifdef WITH_XC_NETWORKING + , m_reply(nullptr) +#endif , m_defaultIconModel(new DefaultIconModel(this)) , m_customIconModel(new CustomIconModel(this)) { @@ -136,7 +154,7 @@ void EditWidgetIcons::load(const Uuid& currentUuid, Database* database, const Ic void EditWidgetIcons::setUrl(const QString& url) { #ifdef WITH_XC_NETWORKING - m_url = url; + m_url = QUrl(url); m_ui->faviconButton->setVisible(!url.isEmpty()); #else Q_UNUSED(url); @@ -144,87 +162,152 @@ void EditWidgetIcons::setUrl(const QString& url) #endif } +#ifdef WITH_XC_NETWORKING +namespace { + // Try to get the 2nd level domain of the host part of a QUrl. For example, + // "foo.bar.example.com" would become "example.com", and "foo.bar.example.co.uk" + // would become "example.co.uk". + QString getSecondLevelDomain(QUrl url) + { + QString fqdn = url.host(); + fqdn.truncate(fqdn.length() - url.topLevelDomain().length()); + QStringList parts = fqdn.split('.'); + QString newdom = parts.takeLast() + url.topLevelDomain(); + return newdom; + } + + QUrl convertVariantToUrl(QVariant var) + { + QUrl url; + if (var.canConvert()) + url = var.value(); + return url; + } + + QUrl getRedirectTarget(QNetworkReply *reply) + { + QVariant var = reply->attribute(QNetworkRequest::RedirectionTargetAttribute); + QUrl url = convertVariantToUrl(var); + return url; + } +} +#endif + void EditWidgetIcons::downloadFavicon() { #ifdef WITH_XC_NETWORKING m_ui->faviconButton->setDisabled(true); - QUrl url = QUrl(m_url); - url.setPath("/favicon.ico"); + m_redirects = 0; + m_urlsToTry.clear(); + + QString fullyQualifiedDomain = m_url.host(); + QString secondLevelDomain = getSecondLevelDomain(m_url); + // Attempt to simply load the favicon.ico file - QImage image = fetchFavicon(url); + if (fullyQualifiedDomain != secondLevelDomain) { + m_urlsToTry.append(QUrl(m_url.scheme() + "://" + fullyQualifiedDomain + "/favicon.ico")); + } + m_urlsToTry.append(QUrl(m_url.scheme() + "://" + secondLevelDomain + "/favicon.ico")); + + // Try to use Google fallback, if enabled + if (config()->get("security/IconDownloadFallbackToGoogle", false).toBool()) { + QUrl urlGoogle = QUrl("https://www.google.com/s2/favicons"); + + urlGoogle.setQuery("domain=" + QUrl::toPercentEncoding(secondLevelDomain)); + m_urlsToTry.append(urlGoogle); + } + + startFetchFavicon(m_urlsToTry.takeFirst()); +#endif +} + +void EditWidgetIcons::fetchReadyRead() +{ +#ifdef WITH_XC_NETWORKING + m_bytesReceived += m_reply->readAll(); +#endif +} + +void EditWidgetIcons::fetchFinished() +{ +#ifdef WITH_XC_NETWORKING + QImage image; + bool googleFallbackEnabled = config()->get("security/IconDownloadFallbackToGoogle", false).toBool(); + bool error = (m_reply->error() != QNetworkReply::NoError); + QUrl redirectTarget = getRedirectTarget(m_reply); + + m_reply->deleteLater(); + m_reply = nullptr; + + if (!error) { + if (redirectTarget.isValid()) { + // Redirected, we need to follow it, or fall through if we have + // done too many redirects already. + if (m_redirects < 5) { + m_redirects++; + if (redirectTarget.isRelative()) + redirectTarget = m_fetchUrl.resolved(redirectTarget); + startFetchFavicon(redirectTarget); + return; + } + } else { + // No redirect, and we theoretically have some icon data now. + image.loadFromData(m_bytesReceived); + } + } + if (!image.isNull()) { addCustomIcon(image); - } else if (config()->get("security/IconDownloadFallbackToGoogle", false).toBool()) { - QUrl faviconUrl = QUrl("https://www.google.com/s2/favicons"); - faviconUrl.setQuery("domain=" + QUrl::toPercentEncoding(url.host())); - // Attempt to load favicon from Google - image = fetchFavicon(faviconUrl); - if (!image.isNull()) { - addCustomIcon(image); + } else if (!m_urlsToTry.empty()) { + m_redirects = 0; + startFetchFavicon(m_urlsToTry.takeFirst()); + return; + } else { + if (!googleFallbackEnabled) { + emit messageEditEntry(tr("Unable to fetch favicon.") + "\n" + + tr("Hint: You can enable Google as a fallback under Tools>Settings>Security"), + MessageWidget::Error); } else { emit messageEditEntry(tr("Unable to fetch favicon."), MessageWidget::Error); } - } else { - emit messageEditEntry(tr("Unable to fetch favicon.") + "\n" + - tr("Hint: You can enable Google as a fallback under Tools>Settings>Security"), - MessageWidget::Error); } m_ui->faviconButton->setDisabled(false); #endif } -#ifdef WITH_XC_NETWORKING -namespace { -std::size_t writeCurlResponse(char* ptr, std::size_t size, std::size_t nmemb, void* data) +void EditWidgetIcons::fetchCanceled() { - QByteArray* response = static_cast(data); - std::size_t realsize = size * nmemb; - response->append(ptr, realsize); - return realsize; -} +#ifdef WITH_XC_NETWORKING + m_reply->abort(); +#endif } -QImage EditWidgetIcons::fetchFavicon(const QUrl& url) +void EditWidgetIcons::startFetchFavicon(const QUrl& url) { - QImage image; - CURL* curl = curl_easy_init(); - if (curl) { - QByteArray imagedata; - QByteArray baUrl = url.url().toLatin1(); - - curl_easy_setopt(curl, CURLOPT_URL, baUrl.data()); - curl_easy_setopt(curl, CURLOPT_MAXREDIRS, 5L); - curl_easy_setopt(curl, CURLOPT_REDIR_PROTOCOLS, CURLPROTO_HTTP | CURLPROTO_HTTPS); - curl_easy_setopt(curl, CURLOPT_USERAGENT, "curl"); - curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); - curl_easy_setopt(curl, CURLOPT_TIMEOUT, 10L); - curl_easy_setopt(curl, CURLOPT_FAILONERROR, 1L); - curl_easy_setopt(curl, CURLOPT_WRITEDATA, &imagedata); - curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &writeCurlResponse); -#ifdef Q_OS_WIN - const QDir appDir = QFileInfo(QCoreApplication::applicationFilePath()).absoluteDir(); - if (appDir.exists("ssl\\certs")) { - curl_easy_setopt(curl, CURLOPT_CAINFO, (appDir.absolutePath() + "\\ssl\\certs\\ca-bundle.crt").toLatin1().data()); - } -#endif +#ifdef WITH_XC_NETWORKING + m_bytesReceived.clear(); - // Perform the request in another thread - CURLcode result = AsyncTask::runAndWaitForFuture([curl]() { - return curl_easy_perform(curl); - }); + m_fetchUrl = url; - if (result == CURLE_OK) { - image.loadFromData(imagedata); - } + QNetworkRequest request(url); - curl_easy_cleanup(curl); - } + m_reply = m_netMgr.get(request); + connect(m_reply, &QNetworkReply::finished, this, &EditWidgetIcons::fetchFinished); + connect(m_reply, &QIODevice::readyRead, this, &EditWidgetIcons::fetchReadyRead); - return image; -} + UrlFetchProgressDialog *progress = new UrlFetchProgressDialog(url, this); + progress->setAttribute(Qt::WA_DeleteOnClose); + connect(m_reply, &QNetworkReply::finished, progress, &QProgressDialog::hide); + connect(m_reply, &QNetworkReply::downloadProgress, progress, &UrlFetchProgressDialog::networkReplyProgress); + connect(progress, &QProgressDialog::canceled, this, &EditWidgetIcons::fetchCanceled); + + progress->show(); +#else + Q_UNUSED(url); #endif +} void EditWidgetIcons::addCustomIconFromFile() { diff --git a/src/gui/EditWidgetIcons.h b/src/gui/EditWidgetIcons.h index 7b5edf80c..82fcdeeb5 100644 --- a/src/gui/EditWidgetIcons.h +++ b/src/gui/EditWidgetIcons.h @@ -21,7 +21,9 @@ #include #include +#include #include +#include #include "config-keepassx.h" #include "core/Global.h" @@ -31,6 +33,9 @@ class Database; class DefaultIconModel; class CustomIconModel; +#ifdef WITH_XC_NETWORKING +class QNetworkReply; +#endif namespace Ui { class EditWidgetIcons; @@ -44,6 +49,17 @@ struct IconStruct int number; }; +class UrlFetchProgressDialog : public QProgressDialog +{ + Q_OBJECT + +public: + explicit UrlFetchProgressDialog(const QUrl &url, QWidget *parent = nullptr); + +public slots: + void networkReplyProgress(qint64 bytesRead, qint64 totalBytes); +}; + class EditWidgetIcons : public QWidget { Q_OBJECT @@ -65,9 +81,10 @@ signals: private slots: void downloadFavicon(); -#ifdef WITH_XC_NETWORKING - QImage fetchFavicon(const QUrl& url); -#endif + void startFetchFavicon(const QUrl& url); + void fetchFinished(); + void fetchReadyRead(); + void fetchCanceled(); void addCustomIconFromFile(); void addCustomIcon(const QImage& icon); void removeCustomIcon(); @@ -80,7 +97,15 @@ private: const QScopedPointer m_ui; Database* m_database; Uuid m_currentUuid; - QString m_url; +#ifdef WITH_XC_NETWORKING + QUrl m_url; + QUrl m_fetchUrl; + QList m_urlsToTry; + QByteArray m_bytesReceived; + QNetworkAccessManager m_netMgr; + QNetworkReply *m_reply; + int m_redirects; +#endif DefaultIconModel* const m_defaultIconModel; CustomIconModel* const m_customIconModel; diff --git a/src/main.cpp b/src/main.cpp index b3b607f25..2ccbaf257 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -45,6 +45,21 @@ Q_IMPORT_PLUGIN(QXcbIntegrationPlugin) #endif #endif +static inline void earlyQNetworkAccessManagerWorkaround() +{ + // When QNetworkAccessManager is instantiated it regularly starts polling + // all network interfaces to see if anything changes and if so, what. This + // creates a latency spike every 10 seconds on Mac OS 10.12+ and Windows 7 >= + // when on a wifi connection. + // So here we disable it for lack of better measure. + // This will also cause this message: QObject::startTimer: Timers cannot + // have negative intervals + // For more info see: + // - https://bugreports.qt.io/browse/QTBUG-40332 + // - https://bugreports.qt.io/browse/QTBUG-46015 + qputenv("QT_BEARER_POLL_TIMEOUT", QByteArray::number(-1)); +} + int main(int argc, char** argv) { #ifdef QT_NO_DEBUG @@ -52,6 +67,8 @@ int main(int argc, char** argv) #endif Tools::setupSearchPaths(); + earlyQNetworkAccessManagerWorkaround(); + Application app(argc, argv); Application::setApplicationName("keepassxc"); Application::setApplicationVersion(KEEPASSX_VERSION); -- cgit v1.2.3 From 062503a903b525a3ebe34e103a6ffb07f85a26e7 Mon Sep 17 00:00:00 2001 From: Jonathan White Date: Thu, 26 Apr 2018 23:04:36 -0400 Subject: Fix windows building Regression occured in 3a92e4 --- src/CMakeLists.txt | 2 +- src/browser/NativeMessagingHost.cpp | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index bb1949dfc..61f444e51 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -276,7 +276,7 @@ if (UNIX AND NOT APPLE) target_link_libraries(keepassx_core Qt5::DBus) endif() if(MINGW) - target_link_libraries(keepassx_core Wtsapi32.lib) + target_link_libraries(keepassx_core Wtsapi32.lib Ws2_32.lib) endif() if(MINGW) diff --git a/src/browser/NativeMessagingHost.cpp b/src/browser/NativeMessagingHost.cpp index 88b7dd722..d607698b7 100755 --- a/src/browser/NativeMessagingHost.cpp +++ b/src/browser/NativeMessagingHost.cpp @@ -23,6 +23,10 @@ #include "NativeMessagingHost.h" #include "BrowserSettings.h" +#ifdef Q_OS_WIN +#include +#endif + NativeMessagingHost::NativeMessagingHost(DatabaseTabWidget* parent) : NativeMessagingBase(), m_mutex(QMutex::Recursive), @@ -150,7 +154,7 @@ void NativeMessagingHost::newLocalMessage() int socketDesc = socket->socketDescriptor(); if (socketDesc) { int max = NATIVE_MSG_MAX_LENGTH; - setsockopt(socketDesc, SOL_SOCKET, SO_SNDBUF, &max, sizeof(max)); + setsockopt(socketDesc, SOL_SOCKET, SO_SNDBUF, reinterpret_cast(&max), sizeof(max)); } QByteArray arr = socket->readAll(); -- cgit v1.2.3 From a910821506880c55c6dc1520b48460112182c7c8 Mon Sep 17 00:00:00 2001 From: varjolintu Date: Fri, 27 Apr 2018 19:38:08 +0300 Subject: Fix Windows build with socket size --- src/proxy/CMakeLists.txt | 3 +++ src/proxy/NativeMessagingHost.cpp | 6 +++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/proxy/CMakeLists.txt b/src/proxy/CMakeLists.txt index f4c197e39..4972043b5 100755 --- a/src/proxy/CMakeLists.txt +++ b/src/proxy/CMakeLists.txt @@ -55,4 +55,7 @@ if(WITH_XC_BROWSER) WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/src COMMENT "Changing linking of keepassxc-proxy") endif() + if(MINGW) + target_link_libraries(keepassxc-proxy Wtsapi32.lib Ws2_32.lib) + endif() endif() diff --git a/src/proxy/NativeMessagingHost.cpp b/src/proxy/NativeMessagingHost.cpp index 15416dc8d..aabeb01af 100755 --- a/src/proxy/NativeMessagingHost.cpp +++ b/src/proxy/NativeMessagingHost.cpp @@ -18,6 +18,10 @@ #include #include "NativeMessagingHost.h" +#ifdef Q_OS_WIN +#include +#endif + NativeMessagingHost::NativeMessagingHost() : NativeMessagingBase() { m_localSocket = new QLocalSocket(); @@ -27,7 +31,7 @@ NativeMessagingHost::NativeMessagingHost() : NativeMessagingBase() int socketDesc = m_localSocket->socketDescriptor(); if (socketDesc) { int max = NATIVE_MSG_MAX_LENGTH; - setsockopt(socketDesc, SOL_SOCKET, SO_SNDBUF, &max, sizeof(max)); + setsockopt(socketDesc, SOL_SOCKET, SO_SNDBUF, reinterpret_cast(&max), sizeof(max)); } #ifdef Q_OS_WIN m_running.store(true); -- cgit v1.2.3 From 658298bc31a1bfd5136064136128f554f14c9de6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sami=20V=C3=A4nttinen?= Date: Fri, 4 May 2018 23:06:07 +0300 Subject: Ignore non-connected databases from search with Browser Integration (#1810) --- src/browser/BrowserAction.cpp | 10 +++++++++- src/browser/BrowserService.cpp | 20 +++++++++++++++----- src/browser/BrowserService.h | 7 +++++-- 3 files changed, 29 insertions(+), 8 deletions(-) diff --git a/src/browser/BrowserAction.cpp b/src/browser/BrowserAction.cpp index 7519c0e81..96090258a 100755 --- a/src/browser/BrowserAction.cpp +++ b/src/browser/BrowserAction.cpp @@ -240,9 +240,17 @@ QJsonObject BrowserAction::handleGetLogins(const QJsonObject& json, const QStrin return getErrorReply(action, ERROR_KEEPASS_NO_URL_PROVIDED); } + const QJsonArray keys = decrypted.value("keys").toArray(); + + StringPairList keyList; + for (const QJsonValue val : keys) { + const QJsonObject keyObject = val.toObject(); + keyList.push_back(qMakePair(keyObject.value("id").toString(), keyObject.value("key").toString())); + } + const QString id = decrypted.value("id").toString(); const QString submit = decrypted.value("submitUrl").toString(); - const QJsonArray users = m_browserService.findMatchingEntries(id, url, submit, ""); + const QJsonArray users = m_browserService.findMatchingEntries(id, url, submit, "", keyList); if (users.isEmpty()) { return getErrorReply(action, ERROR_KEEPASS_NO_LOGINS_FOUND); diff --git a/src/browser/BrowserService.cpp b/src/browser/BrowserService.cpp index fb89e8bcb..1a1f9f9e3 100644 --- a/src/browser/BrowserService.cpp +++ b/src/browser/BrowserService.cpp @@ -224,7 +224,7 @@ QString BrowserService::getKey(const QString& id) return config->attributes()->value(QLatin1String(ASSOCIATE_KEY_PREFIX) + id); } -QJsonArray BrowserService::findMatchingEntries(const QString& id, const QString& url, const QString& submitUrl, const QString& realm) +QJsonArray BrowserService::findMatchingEntries(const QString& id, const QString& url, const QString& submitUrl, const QString& realm, const StringPairList& keyList) { QJsonArray result; if (thread() != QThread::currentThread()) { @@ -233,7 +233,8 @@ QJsonArray BrowserService::findMatchingEntries(const QString& id, const QString& Q_ARG(const QString&, id), Q_ARG(const QString&, url), Q_ARG(const QString&, submitUrl), - Q_ARG(const QString&, realm)); + Q_ARG(const QString&, realm), + Q_ARG(const StringPairList&, keyList)); return result; } @@ -244,7 +245,7 @@ QJsonArray BrowserService::findMatchingEntries(const QString& id, const QString& // Check entries for authorization QList pwEntriesToConfirm; QList pwEntries; - for (Entry* entry : searchEntries(url)) { + for (Entry* entry : searchEntries(url, keyList)) { switch (checkAccess(entry, host, submitHost, realm)) { case Denied: continue; @@ -381,7 +382,7 @@ QList BrowserService::searchEntries(Database* db, const QString& hostnam return entries; } -QList BrowserService::searchEntries(const QString& text) +QList BrowserService::searchEntries(const QString& text, const StringPairList& keyList) { // Get the list of databases to search QList databases; @@ -390,7 +391,16 @@ QList BrowserService::searchEntries(const QString& text) for (int i = 0; i < count; ++i) { if (DatabaseWidget* dbWidget = qobject_cast(m_dbTabWidget->widget(i))) { if (Database* db = dbWidget->database()) { - databases << db; + // Check if database is connected with KeePassXC-Browser + for (const StringPair keyPair : keyList) { + Entry* entry = db->resolveEntry(KEEPASSXCBROWSER_UUID); + if (entry) { + QString key = entry->attributes()->value(QLatin1String(ASSOCIATE_KEY_PREFIX) + keyPair.first); + if (!key.isEmpty() && keyPair.second == key) { + databases << db; + } + } + } } } } diff --git a/src/browser/BrowserService.h b/src/browser/BrowserService.h index 08007d831..75d5c2fb3 100644 --- a/src/browser/BrowserService.h +++ b/src/browser/BrowserService.h @@ -25,6 +25,9 @@ #include "gui/DatabaseTabWidget.h" #include "core/Entry.h" +typedef QPair StringPair; +typedef QList StringPairList; + class BrowserService : public QObject { Q_OBJECT @@ -40,12 +43,12 @@ public: QString getKey(const QString& id); void addEntry(const QString& id, const QString& login, const QString& password, const QString& url, const QString& submitUrl, const QString& realm); QList searchEntries(Database* db, const QString& hostname); - QList searchEntries(const QString& text); + QList searchEntries(const QString& text, const StringPairList& keyList); void removeSharedEncryptionKeys(); void removeStoredPermissions(); public slots: - QJsonArray findMatchingEntries(const QString& id, const QString& url, const QString& submitUrl, const QString& realm); + QJsonArray findMatchingEntries(const QString& id, const QString& url, const QString& submitUrl, const QString& realm, const StringPairList& keyList); QString storeKey(const QString& key); void updateEntry(const QString& id, const QString& uuid, const QString& login, const QString& password, const QString& url); void databaseLocked(DatabaseWidget* dbWidget); -- cgit v1.2.3 From 635d6fe82c8fc292c0253b23183d41e876de303f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sami=20V=C3=A4nttinen?= Date: Fri, 4 May 2018 23:56:19 +0300 Subject: Bring browser credentials messagebox to the front (#1830) --- src/browser/BrowserService.cpp | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/browser/BrowserService.cpp b/src/browser/BrowserService.cpp index 1a1f9f9e3..2f9985d25 100644 --- a/src/browser/BrowserService.cpp +++ b/src/browser/BrowserService.cpp @@ -341,12 +341,18 @@ void BrowserService::updateEntry(const QString& id, const QString& uuid, const Q } if (username.compare(login, Qt::CaseSensitive) != 0 || entry->password().compare(password, Qt::CaseSensitive) != 0) { - QMessageBox::StandardButton dialogResult = QMessageBox::No; + int dialogResult = QMessageBox::No; if (!BrowserSettings::alwaysAllowUpdate()) { - dialogResult = QMessageBox::warning(0, tr("KeePassXC: Update Entry"), - tr("Do you want to update the information in %1 - %2?") - .arg(QUrl(url).host()).arg(username), - QMessageBox::Yes|QMessageBox::No); + QMessageBox msgBox; + msgBox.setWindowTitle(tr("KeePassXC: Update Entry")); + msgBox.setText(tr("Do you want to update the information in %1 - %2?").arg(QUrl(url).host()).arg(username)); + msgBox.setStandardButtons(QMessageBox::Yes); + msgBox.addButton(QMessageBox::No); + msgBox.setDefaultButton(QMessageBox::No); + msgBox.setWindowFlags(Qt::WindowStaysOnTopHint); + msgBox.activateWindow(); + msgBox.raise(); + dialogResult = msgBox.exec(); } if (BrowserSettings::alwaysAllowUpdate() || dialogResult == QMessageBox::Yes) { -- cgit v1.2.3 From 963ac7538936e68da7dc10630b97d69557197160 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sami=20V=C3=A4nttinen?= Date: Sat, 5 May 2018 00:31:17 +0300 Subject: Lower the main window after unlock request from extension (#1884) --- src/browser/BrowserService.cpp | 8 +++++++- src/browser/BrowserService.h | 1 + 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/browser/BrowserService.cpp b/src/browser/BrowserService.cpp index 2f9985d25..e391a75ae 100644 --- a/src/browser/BrowserService.cpp +++ b/src/browser/BrowserService.cpp @@ -47,7 +47,8 @@ static int KEEPASSXCBROWSER_DEFAULT_ICON = 1; BrowserService::BrowserService(DatabaseTabWidget* parent) : m_dbTabWidget(parent), - m_dialogActive(false) + m_dialogActive(false), + m_bringToFrontRequested(false) { connect(m_dbTabWidget, SIGNAL(databaseLocked(DatabaseWidget*)), this, SLOT(databaseLocked(DatabaseWidget*))); connect(m_dbTabWidget, SIGNAL(databaseUnlocked(DatabaseWidget*)), this, SLOT(databaseUnlocked(DatabaseWidget*))); @@ -82,6 +83,7 @@ bool BrowserService::openDatabase(bool triggerUnlock) if (triggerUnlock) { KEEPASSXC_MAIN_WINDOW->bringToFront(); + m_bringToFrontRequested = true; } return false; @@ -743,6 +745,10 @@ void BrowserService::databaseLocked(DatabaseWidget* dbWidget) void BrowserService::databaseUnlocked(DatabaseWidget* dbWidget) { if (dbWidget) { + if (m_bringToFrontRequested) { + KEEPASSXC_MAIN_WINDOW->lower(); + m_bringToFrontRequested = false; + } emit databaseUnlocked(); } } diff --git a/src/browser/BrowserService.h b/src/browser/BrowserService.h index 75d5c2fb3..eb47aac07 100644 --- a/src/browser/BrowserService.h +++ b/src/browser/BrowserService.h @@ -78,6 +78,7 @@ private: private: DatabaseTabWidget* const m_dbTabWidget; bool m_dialogActive; + bool m_bringToFrontRequested; }; #endif // BROWSERSERVICE_H -- cgit v1.2.3 From 48295efe0d57439fe7ae1c5d0fd571ac810a6613 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sami=20V=C3=A4nttinen?= Date: Sun, 6 May 2018 00:51:03 +0300 Subject: Implement best matches only option with browser integration (#1822) --- src/browser/BrowserOptionDialog.cpp | 1 - src/browser/BrowserService.cpp | 27 ++++++++++++++++++--------- src/browser/BrowserSettings.h | 4 ++-- 3 files changed, 20 insertions(+), 12 deletions(-) diff --git a/src/browser/BrowserOptionDialog.cpp b/src/browser/BrowserOptionDialog.cpp index 693e62d26..bcf96a85f 100755 --- a/src/browser/BrowserOptionDialog.cpp +++ b/src/browser/BrowserOptionDialog.cpp @@ -67,7 +67,6 @@ void BrowserOptionDialog::loadSettings() // hide unimplemented options // TODO: fix this m_ui->showNotification->hide(); - m_ui->bestMatchOnly->hide(); if (settings.sortByUsername()) { m_ui->sortByUsername->setChecked(true); diff --git a/src/browser/BrowserService.cpp b/src/browser/BrowserService.cpp index e391a75ae..af35315a0 100644 --- a/src/browser/BrowserService.cpp +++ b/src/browser/BrowserService.cpp @@ -530,21 +530,30 @@ QList BrowserService::sortEntries(QList& pwEntries, const QStrin const QString submitUrl = url.toString(QUrl::StripTrailingSlash); const QString baseSubmitUrl = url.toString(QUrl::StripTrailingSlash | QUrl::RemovePath | QUrl::RemoveQuery | QUrl::RemoveFragment); - QMultiMap priorities; - for (const Entry* entry : pwEntries) { + // Build map of prioritized entries + QMultiMap priorities; + for (Entry* entry : pwEntries) { priorities.insert(sortPriority(entry, host, submitUrl, baseSubmitUrl), entry); } + QList results; QString field = BrowserSettings::sortByTitle() ? "Title" : "UserName"; - std::sort(pwEntries.begin(), pwEntries.end(), [&priorities, &field](const Entry* left, const Entry* right) { - int res = priorities.key(left) - priorities.key(right); - if (res == 0) { - return QString::localeAwareCompare(left->attributes()->value(field), right->attributes()->value(field)) < 0; + 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(), [&priorities, &field](Entry* left, Entry* right) { + return QString::localeAwareCompare(left->attributes()->value(field), right->attributes()->value(field)) < 0; + }); + results << entries; + if (BrowserSettings::bestMatchOnly() && !pwEntries.isEmpty()) { + // Early out once we find the highest batch of matches + break; + } } - return res < 0; - }); + } - return pwEntries; + return results; } bool BrowserService::confirmEntries(QList& pwEntriesToConfirm, const QString& url, const QString& host, const QString& submitHost, const QString& realm) diff --git a/src/browser/BrowserSettings.h b/src/browser/BrowserSettings.h index eb59fa5ac..7047d22b3 100755 --- a/src/browser/BrowserSettings.h +++ b/src/browser/BrowserSettings.h @@ -32,7 +32,7 @@ public: static bool showNotification(); //TODO!! static void setShowNotification(bool showNotification); - static bool bestMatchOnly(); //TODO!! + static bool bestMatchOnly(); static void setBestMatchOnly(bool bestMatchOnly); static bool unlockDatabase(); static void setUnlockDatabase(bool unlockDatabase); @@ -46,7 +46,7 @@ public: static void setAlwaysAllowAccess(bool alwaysAllowAccess); static bool alwaysAllowUpdate(); static void setAlwaysAllowUpdate(bool alwaysAllowUpdate); - static bool searchInAllDatabases();//TODO!! + static bool searchInAllDatabases(); static void setSearchInAllDatabases(bool searchInAllDatabases); static bool supportKphFields(); static void setSupportKphFields(bool supportKphFields); -- cgit v1.2.3 From 9ed2a744212d23bcae26d2a7477ca13b5118937b Mon Sep 17 00:00:00 2001 From: Jonathan White Date: Sat, 5 May 2018 23:29:25 -0400 Subject: Configurable global autotype start delay --- src/autotype/AutoType.cpp | 4 +-- src/autotype/AutoTypePlatformPlugin.h | 1 - src/autotype/mac/AutoTypeMac.cpp | 5 ---- src/autotype/mac/AutoTypeMac.h | 1 - src/autotype/test/AutoTypeTest.cpp | 5 ---- src/autotype/test/AutoTypeTest.h | 1 - src/autotype/windows/AutoTypeWindows.cpp | 5 ---- src/autotype/windows/AutoTypeWindows.h | 1 - src/autotype/xcb/AutoTypeXCB.cpp | 6 ---- src/autotype/xcb/AutoTypeXCB.h | 1 - src/core/Config.cpp | 1 + src/gui/SettingsWidget.cpp | 2 ++ src/gui/SettingsWidgetGeneral.ui | 49 +++++++++++++++++++++++++++----- 13 files changed, 47 insertions(+), 35 deletions(-) diff --git a/src/autotype/AutoType.cpp b/src/autotype/AutoType.cpp index 3f44a9944..d2d33ea53 100644 --- a/src/autotype/AutoType.cpp +++ b/src/autotype/AutoType.cpp @@ -220,7 +220,7 @@ void AutoType::executeAutoTypeActions(const Entry* entry, QWidget* hideWindow, c #endif } - Tools::wait(m_plugin->initialTimeout()); + Tools::wait(qMax(100, config()->get("AutoTypeStartDelay", 500).toInt())); if (!window) { window = m_plugin->activeWindow(); @@ -365,7 +365,7 @@ bool AutoType::parseActions(const QString& actionSequence, const Entry* entry, Q { QString tmpl; bool inTmpl = false; - m_autoTypeDelay = config()->get("AutoTypeDelay").toInt(); + m_autoTypeDelay = qMax(config()->get("AutoTypeDelay").toInt(), 0); QString sequence = actionSequence; sequence.replace("{{}", "{LEFTBRACE}"); diff --git a/src/autotype/AutoTypePlatformPlugin.h b/src/autotype/AutoTypePlatformPlugin.h index 2945e98c5..96e947a0b 100644 --- a/src/autotype/AutoTypePlatformPlugin.h +++ b/src/autotype/AutoTypePlatformPlugin.h @@ -33,7 +33,6 @@ public: virtual bool registerGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) = 0; virtual void unregisterGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) = 0; virtual int platformEventFilter(void* event) = 0; - virtual int initialTimeout() = 0; virtual bool raiseWindow(WId window) = 0; virtual void unload() {} diff --git a/src/autotype/mac/AutoTypeMac.cpp b/src/autotype/mac/AutoTypeMac.cpp index ffd3c227c..d8fcf6d7f 100644 --- a/src/autotype/mac/AutoTypeMac.cpp +++ b/src/autotype/mac/AutoTypeMac.cpp @@ -154,11 +154,6 @@ AutoTypeExecutor* AutoTypePlatformMac::createExecutor() return new AutoTypeExecutorMac(this); } -int AutoTypePlatformMac::initialTimeout() -{ - return 500; -} - // // Activate window by process id // diff --git a/src/autotype/mac/AutoTypeMac.h b/src/autotype/mac/AutoTypeMac.h index c554fa6e4..d2c224784 100644 --- a/src/autotype/mac/AutoTypeMac.h +++ b/src/autotype/mac/AutoTypeMac.h @@ -42,7 +42,6 @@ public: bool registerGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) override; void unregisterGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) override; int platformEventFilter(void* event) override; - int initialTimeout() override; bool raiseWindow(WId pid) override; AutoTypeExecutor* createExecutor() override; diff --git a/src/autotype/test/AutoTypeTest.cpp b/src/autotype/test/AutoTypeTest.cpp index 0eaf71602..e2ae7c692 100644 --- a/src/autotype/test/AutoTypeTest.cpp +++ b/src/autotype/test/AutoTypeTest.cpp @@ -103,11 +103,6 @@ void AutoTypePlatformTest::addActionKey(AutoTypeKey* action) m_actionChars.append(keyToString(action->key)); } -int AutoTypePlatformTest::initialTimeout() -{ - return 0; -} - bool AutoTypePlatformTest::raiseWindow(WId window) { Q_UNUSED(window); diff --git a/src/autotype/test/AutoTypeTest.h b/src/autotype/test/AutoTypeTest.h index d9a86c3de..d434c4d34 100644 --- a/src/autotype/test/AutoTypeTest.h +++ b/src/autotype/test/AutoTypeTest.h @@ -42,7 +42,6 @@ public: bool registerGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) override; void unregisterGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) override; int platformEventFilter(void* event) override; - int initialTimeout() override; bool raiseWindow(WId window) override; AutoTypeExecutor* createExecutor() override; diff --git a/src/autotype/windows/AutoTypeWindows.cpp b/src/autotype/windows/AutoTypeWindows.cpp index 3ff2343b9..bcb610f0f 100644 --- a/src/autotype/windows/AutoTypeWindows.cpp +++ b/src/autotype/windows/AutoTypeWindows.cpp @@ -109,11 +109,6 @@ AutoTypeExecutor* AutoTypePlatformWin::createExecutor() return new AutoTypeExecutorWin(this); } -int AutoTypePlatformWin::initialTimeout() -{ - return 500; -} - // // Set foreground window // diff --git a/src/autotype/windows/AutoTypeWindows.h b/src/autotype/windows/AutoTypeWindows.h index 88b9a9fd2..6d38a2508 100644 --- a/src/autotype/windows/AutoTypeWindows.h +++ b/src/autotype/windows/AutoTypeWindows.h @@ -39,7 +39,6 @@ public: bool registerGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) override; void unregisterGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) override; int platformEventFilter(void* event) override; - int initialTimeout() override; bool raiseWindow(WId window) override; AutoTypeExecutor* createExecutor() override; diff --git a/src/autotype/xcb/AutoTypeXCB.cpp b/src/autotype/xcb/AutoTypeXCB.cpp index 1946c8883..cd5e8acdc 100644 --- a/src/autotype/xcb/AutoTypeXCB.cpp +++ b/src/autotype/xcb/AutoTypeXCB.cpp @@ -844,12 +844,6 @@ void AutoTypeExecutorX11::execClearField(AutoTypeClearField* action = nullptr) nanosleep(&ts, nullptr); } - -int AutoTypePlatformX11::initialTimeout() -{ - return 500; -} - bool AutoTypePlatformX11::raiseWindow(WId window) { if (m_atomNetActiveWindow == None) { diff --git a/src/autotype/xcb/AutoTypeXCB.h b/src/autotype/xcb/AutoTypeXCB.h index 600e001aa..4f1d9a3d6 100644 --- a/src/autotype/xcb/AutoTypeXCB.h +++ b/src/autotype/xcb/AutoTypeXCB.h @@ -51,7 +51,6 @@ public: bool registerGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) override; void unregisterGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) override; int platformEventFilter(void* event) override; - int initialTimeout() override; bool raiseWindow(WId window) override; AutoTypeExecutor* createExecutor() override; diff --git a/src/core/Config.cpp b/src/core/Config.cpp index 461ab1f74..614aee0c4 100644 --- a/src/core/Config.cpp +++ b/src/core/Config.cpp @@ -135,6 +135,7 @@ void Config::init(const QString& fileName) m_defaults.insert("AutoTypeEntryTitleMatch", true); m_defaults.insert("AutoTypeEntryURLMatch", true); m_defaults.insert("AutoTypeDelay", 25); + m_defaults.insert("AutoTypeStartDelay", 500); m_defaults.insert("UseGroupIconOnEntryCreation", true); m_defaults.insert("IgnoreGroupExpansion", true); m_defaults.insert("security/clearclipboard", true); diff --git a/src/gui/SettingsWidget.cpp b/src/gui/SettingsWidget.cpp index 56b1b2a38..30cc11e5c 100644 --- a/src/gui/SettingsWidget.cpp +++ b/src/gui/SettingsWidget.cpp @@ -152,6 +152,7 @@ void SettingsWidget::loadSettings() } m_generalUi->autoTypeShortcutWidget->setAttribute(Qt::WA_MacShowFocusRect, true); m_generalUi->autoTypeDelaySpinBox->setValue(config()->get("AutoTypeDelay").toInt()); + m_generalUi->autoTypeStartDelaySpinBox->setValue(config()->get("AutoTypeStartDelay").toInt()); } @@ -227,6 +228,7 @@ void SettingsWidget::saveSettings() config()->set("GlobalAutoTypeModifiers", static_cast(m_generalUi->autoTypeShortcutWidget->modifiers())); config()->set("AutoTypeDelay", m_generalUi->autoTypeDelaySpinBox->value()); + config()->set("AutoTypeStartDelay", m_generalUi->autoTypeStartDelaySpinBox->value()); } config()->set("security/clearclipboard", m_secUi->clearClipboardCheckBox->isChecked()); config()->set("security/clearclipboardtimeout", m_secUi->clearClipboardSpinBox->value()); diff --git a/src/gui/SettingsWidgetGeneral.ui b/src/gui/SettingsWidgetGeneral.ui index 5ed952f1f..2d94892f2 100644 --- a/src/gui/SettingsWidgetGeneral.ui +++ b/src/gui/SettingsWidgetGeneral.ui @@ -26,7 +26,7 @@ - 0 + 1 @@ -404,7 +404,7 @@ 10 - + Global Auto-Type shortcut @@ -420,14 +420,14 @@ - - + + - Auto-Type delay + Auto-Type typing delay - + @@ -442,13 +442,48 @@ - 999 + 1000 25 + + + + Auto-Type start delay + + + + + + + + 0 + 0 + + + + ms + + + + + + 100 + + + 10000 + + + 100 + + + 500 + + + -- cgit v1.2.3 From 13a313ff66063a50fbeb1faa230cf74c066e6dd4 Mon Sep 17 00:00:00 2001 From: Jonathan White Date: Sat, 5 May 2018 17:58:37 -0400 Subject: Remove resolving placeholders for notes --- src/gui/DetailsWidget.cpp | 2 +- src/gui/entry/EntryModel.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gui/DetailsWidget.cpp b/src/gui/DetailsWidget.cpp index 77de24666..dcabf964f 100644 --- a/src/gui/DetailsWidget.cpp +++ b/src/gui/DetailsWidget.cpp @@ -198,7 +198,7 @@ void DetailsWidget::updateEntryNotesTab() Q_ASSERT(m_currentEntry); const QString notes = m_currentEntry->notes(); setTabEnabled(m_ui->entryTabWidget, m_ui->entryNotesTab, !notes.isEmpty()); - m_ui->entryNotesEdit->setText(m_currentEntry->resolveMultiplePlaceholders(notes)); + m_ui->entryNotesEdit->setText(notes); } void DetailsWidget::updateEntryAttributesTab() diff --git a/src/gui/entry/EntryModel.cpp b/src/gui/entry/EntryModel.cpp index 6f7ebf6af..8e4fe13db 100644 --- a/src/gui/entry/EntryModel.cpp +++ b/src/gui/entry/EntryModel.cpp @@ -185,7 +185,7 @@ QVariant EntryModel::data(const QModelIndex& index, int role) const return result; case Notes: // Display only first line of notes in simplified format - result = entry->resolveMultiplePlaceholders(entry->notes().section("\n", 0, 0).simplified()); + result = entry->notes().section("\n", 0, 0).simplified(); if (attr->isReference(EntryAttributes::NotesKey)) { result.prepend(tr("Ref: ", "Reference abbreviation")); } -- cgit v1.2.3 From 9d7e7c1ca8ec173620e7a6466c50c2d1f9b361d4 Mon Sep 17 00:00:00 2001 From: varjolintu Date: Sun, 29 Apr 2018 09:24:57 +0300 Subject: Disable STDIN listening when not needed --- src/browser/NativeMessagingBase.cpp | 8 +++++--- src/browser/NativeMessagingBase.h | 2 +- src/browser/NativeMessagingHost.cpp | 9 +++++++-- src/browser/NativeMessagingHost.h | 2 +- src/gui/MainWindow.cpp | 2 +- src/proxy/NativeMessagingHost.cpp | 2 +- 6 files changed, 16 insertions(+), 9 deletions(-) diff --git a/src/browser/NativeMessagingBase.cpp b/src/browser/NativeMessagingBase.cpp index f61a36045..7c0760de3 100644 --- a/src/browser/NativeMessagingBase.cpp +++ b/src/browser/NativeMessagingBase.cpp @@ -36,14 +36,16 @@ #include #endif -NativeMessagingBase::NativeMessagingBase() +NativeMessagingBase::NativeMessagingBase(const bool enabled) { #ifdef Q_OS_WIN _setmode(_fileno(stdin), _O_BINARY); _setmode(_fileno(stdout), _O_BINARY); #else - m_notifier.reset(new QSocketNotifier(fileno(stdin), QSocketNotifier::Read, this)); - connect(m_notifier.data(), SIGNAL(activated(int)), this, SLOT(newNativeMessage())); + if (enabled) { + m_notifier.reset(new QSocketNotifier(fileno(stdin), QSocketNotifier::Read, this)); + connect(m_notifier.data(), SIGNAL(activated(int)), this, SLOT(newNativeMessage())); + } #endif } diff --git a/src/browser/NativeMessagingBase.h b/src/browser/NativeMessagingBase.h index 26e0a9902..2cd63d24c 100644 --- a/src/browser/NativeMessagingBase.h +++ b/src/browser/NativeMessagingBase.h @@ -44,7 +44,7 @@ class NativeMessagingBase : public QObject Q_OBJECT public: - explicit NativeMessagingBase(); + explicit NativeMessagingBase(const bool enabled); ~NativeMessagingBase() = default; protected slots: diff --git a/src/browser/NativeMessagingHost.cpp b/src/browser/NativeMessagingHost.cpp index d607698b7..db1a1319d 100755 --- a/src/browser/NativeMessagingHost.cpp +++ b/src/browser/NativeMessagingHost.cpp @@ -27,8 +27,8 @@ #include #endif -NativeMessagingHost::NativeMessagingHost(DatabaseTabWidget* parent) : - NativeMessagingBase(), +NativeMessagingHost::NativeMessagingHost(DatabaseTabWidget* parent, const bool enabled) : + NativeMessagingBase(enabled), m_mutex(QMutex::Recursive), m_browserClients(m_browserService), m_browserService(parent) @@ -77,6 +77,11 @@ void NativeMessagingHost::run() QString serverPath = getLocalServerPath(); QFile::remove(serverPath); + // Ensure that STDIN is not being listened when proxy is used + if (m_notifier->isEnabled()) { + m_notifier->setEnabled(false); + } + if (m_localServer->isListening()) { m_localServer->close(); } diff --git a/src/browser/NativeMessagingHost.h b/src/browser/NativeMessagingHost.h index 80825237b..cc0a2e84c 100755 --- a/src/browser/NativeMessagingHost.h +++ b/src/browser/NativeMessagingHost.h @@ -31,7 +31,7 @@ class NativeMessagingHost : public NativeMessagingBase typedef QList SocketList; public: - explicit NativeMessagingHost(DatabaseTabWidget* parent = 0); + explicit NativeMessagingHost(DatabaseTabWidget* parent = 0, const bool enabled = false); ~NativeMessagingHost(); int init(); void run(); diff --git a/src/gui/MainWindow.cpp b/src/gui/MainWindow.cpp index d7dadb0c0..2e87b4d8c 100644 --- a/src/gui/MainWindow.cpp +++ b/src/gui/MainWindow.cpp @@ -117,7 +117,7 @@ class BrowserPlugin: public ISettingsPage { public: BrowserPlugin(DatabaseTabWidget* tabWidget) { - m_nativeMessagingHost = QSharedPointer(new NativeMessagingHost(tabWidget)); + m_nativeMessagingHost = QSharedPointer(new NativeMessagingHost(tabWidget, BrowserSettings::isEnabled())); } ~BrowserPlugin() { diff --git a/src/proxy/NativeMessagingHost.cpp b/src/proxy/NativeMessagingHost.cpp index aabeb01af..a0d713d0c 100755 --- a/src/proxy/NativeMessagingHost.cpp +++ b/src/proxy/NativeMessagingHost.cpp @@ -22,7 +22,7 @@ #include #endif -NativeMessagingHost::NativeMessagingHost() : NativeMessagingBase() +NativeMessagingHost::NativeMessagingHost() : NativeMessagingBase(true) { m_localSocket = new QLocalSocket(); m_localSocket->connectToServer(getLocalServerPath()); -- cgit v1.2.3 From 3b7e63a773f2dd183f1dcd6e96e188a48be0d354 Mon Sep 17 00:00:00 2001 From: Jonathan White Date: Mon, 7 May 2018 22:04:53 -0400 Subject: Bump version number to 2.3.2 & fix Win build --- CHANGELOG | 16 ++++++++++++++++ CMakeLists.txt | 2 +- share/linux/org.keepassxc.KeePassXC.appdata.xml | 18 ++++++++++++++++++ snapcraft.yaml | 2 +- src/browser/NativeMessagingBase.cpp | 1 + 5 files changed, 37 insertions(+), 2 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index fa3700e5d..4e344b748 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,19 @@ +2.3.2 (2018-05-07) +========================= + +- Enable high entropy ASLR on Windows [#1747] +- Enhance favicon fetching [#1786] +- Fix crash on Windows due to autotype [#1691] +- Fix dark tray icon changing all icons [#1680] +- Fix --pw-stdin not using getPassword function [#1686] +- Fix placeholders being resolved in notes [#1907] +- Enable auto-type start delay to be configurable [#1908] +- Browser: Fix native messaging reply size [#1719] +- Browser: Increase maximum buffer size [#1720] +- Browser: Enhance usability and functionality [#1810, #1822, #1830, #1884, #1906] +- SSH Agent: Parse aes-256-cbc/ctr keys [#1682] +- SSH Agent: Enhance usability and functionality [#1677, #1679, #1681, #1787] + 2.3.1 (2018-03-06) ========================= diff --git a/CMakeLists.txt b/CMakeLists.txt index a45933562..2e545d1a6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -70,7 +70,7 @@ set(CMAKE_AUTOUIC ON) set(KEEPASSXC_VERSION_MAJOR "2") set(KEEPASSXC_VERSION_MINOR "3") -set(KEEPASSXC_VERSION_PATCH "1") +set(KEEPASSXC_VERSION_PATCH "2") set(KEEPASSXC_VERSION "${KEEPASSXC_VERSION_MAJOR}.${KEEPASSXC_VERSION_MINOR}.${KEEPASSXC_VERSION_PATCH}") set(KEEPASSXC_BUILD_TYPE "Snapshot" CACHE STRING "Set KeePassXC build type to distinguish between stable releases and snapshots") diff --git a/share/linux/org.keepassxc.KeePassXC.appdata.xml b/share/linux/org.keepassxc.KeePassXC.appdata.xml index f5796e4ea..ba7f8e6fc 100644 --- a/share/linux/org.keepassxc.KeePassXC.appdata.xml +++ b/share/linux/org.keepassxc.KeePassXC.appdata.xml @@ -50,6 +50,24 @@ + + +
    +
  • Enable high entropy ASLR on Windows [#1747]
  • +
  • Enhance favicon fetching [#1786]
  • +
  • Fix crash on Windows due to autotype [#1691]
  • +
  • Fix dark tray icon changing all icons [#1680]
  • +
  • Fix --pw-stdin not using getPassword function [#1686]
  • +
  • Fix placeholders being resolved in notes [#1907]
  • +
  • Enable auto-type start delay to be configurable [#1908]
  • +
  • Browser: Fix native messaging reply size [#1719]
  • +
  • Browser: Increase maximum buffer size [#1720]
  • +
  • Browser: Enhance usability and functionality [#1810, #1822, #1830, #1884, #1906]
  • +
  • SSH Agent: Parse aes-256-cbc/ctr keys [#1682]
  • +
  • SSH Agent: Enhance usability and functionality [#1677, #1679, #1681, #1787]
  • +
+
+
    diff --git a/snapcraft.yaml b/snapcraft.yaml index 7fe9f9726..16810cd5c 100644 --- a/snapcraft.yaml +++ b/snapcraft.yaml @@ -1,5 +1,5 @@ name: keepassxc -version: 2.3.1 +version: 2.3.2 grade: stable summary: Community-driven port of the Windows application “KeePass Password Safe” description: | diff --git a/src/browser/NativeMessagingBase.cpp b/src/browser/NativeMessagingBase.cpp index 7c0760de3..e696af90d 100644 --- a/src/browser/NativeMessagingBase.cpp +++ b/src/browser/NativeMessagingBase.cpp @@ -39,6 +39,7 @@ NativeMessagingBase::NativeMessagingBase(const bool enabled) { #ifdef Q_OS_WIN + Q_UNUSED(enabled); _setmode(_fileno(stdin), _O_BINARY); _setmode(_fileno(stdout), _O_BINARY); #else -- cgit v1.2.3 From 902584855b7784b29429c85a6d640444717d525d Mon Sep 17 00:00:00 2001 From: Jonathan White Date: Mon, 7 May 2018 23:20:04 -0400 Subject: Update translations --- share/translations/keepassx_bn.ts | 4102 ++++++++++++++++++++++++++++++++++ share/translations/keepassx_ca.ts | 64 +- share/translations/keepassx_en.ts | 45 +- share/translations/keepassx_en_GB.ts | 4096 +++++++++++++++++++++++++++++++++ share/translations/keepassx_es.ts | 402 ++-- share/translations/keepassx_fi.ts | 4 +- share/translations/keepassx_id.ts | 46 +- share/translations/keepassx_nb.ts | 1124 +++++----- share/translations/keepassx_nl_NL.ts | 14 +- share/translations/keepassx_pl.ts | 2 +- share/translations/keepassx_pt_BR.ts | 26 +- share/translations/keepassx_ro.ts | 58 +- share/translations/keepassx_uk.ts | 135 +- share/translations/keepassx_zh_CN.ts | 24 +- 14 files changed, 9212 insertions(+), 930 deletions(-) create mode 100644 share/translations/keepassx_bn.ts create mode 100644 share/translations/keepassx_en_GB.ts diff --git a/share/translations/keepassx_bn.ts b/share/translations/keepassx_bn.ts new file mode 100644 index 000000000..344e6864f --- /dev/null +++ b/share/translations/keepassx_bn.ts @@ -0,0 +1,4102 @@ + + + AboutDialog + + About KeePassXC + KeePassXC সম্পর্কে + + + About + সম্পর্কে + + + Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;">https://github.com</a> + বাগ রিপোর্ট করুন: <a href="https://github.com/keepassxreboot/keepassxc/issues" style="text-decoration: underline;"> https://github.com</a> + + + KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. + GNU General Public License (GPL) সংস্করণ ২ বা (আপনার ইচ্ছানুসারে) সংস্করণ ৩ এর অধীনে KeePassXC বিনামূল্যে বিতরন করা হয়। + + + Contributors + অবদানকারী + + + <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> + <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors"> গিটহাবে আবদনকারীদের দেখুন</a> + + + Debug Info + + + + Include the following information whenever you report a bug: + যখন আপনি একটি বাগ রিপোর্ট করুন নিচের তথ্যগুলো অন্তর্ভুক্ত করুন: + + + Copy to clipboard + ক্লিপবোর্ডে কপি করুন + + + Version %1 + + সংস্করণ %1 + + + + Revision: %1 + পরিমার্জনা %1 + + + Distribution: %1 + বিতরণ: %1 + + + Libraries: + লাইব্রেরীসমূহ: + + + Operating system: %1 +CPU architecture: %2 +Kernel: %3 %4 + অপারেটিং সিস্টেম: %1 +সিপিইউ আর্কিটেক্সার: %2 +কার্নেল: %3 %4 + + + Enabled extensions: + সক্রিয় এক্সটেনশনগুলি: + + + Project Maintainers: + প্রকল্প রক্ষণাবেক্ষণকারী: + + + Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. + KeePassXC টিম থেকে বিশেষ ধন্যবাদ debfx-কে মূল KeePassX তৈরি করার জন্য । + + + Build Type: %1 + + বিল্ড প্রকার: %1 + + + + + AccessControlDialog + + KeePassXC HTTP Confirm Access + KeePassXC HTTP অ্যাক্সেস নিশ্চিত করুন + + + Remember this decision + এই সিদ্ধান্ত মনে রাখুন + + + Allow + অনুমতি দিন + + + Deny + নাকচ করুন + + + %1 has requested access to passwords for the following item(s). +Please select whether you want to allow access. + %1 নিম্নলিখিত আইটেম (গুলি) এর জন্য পাসওয়ার্ড অ্যাক্সেসের অনুরোধ জানিয়েছে +আপনি প্রবেশাধিকার অনুমতি দিতে চান তা নির্বাচন করুন। + + + + AgentSettingsWidget + + Enable SSH Agent (requires restart) + SSH এজেন্ট সক্ষম করুন (পুনর্সূচনা প্রয়োজন) + + + + AutoType + + Couldn't find an entry that matches the window title: + উইন্ডো শিরোনামের সাথে সম্পর্কিক একটিও এন্ট্রি খুঁজে পাওয়া যায়নি: + + + Auto-Type - KeePassXC + অটো-টাইপ- KeePassXC + + + Auto-Type + অটো-টাইপ + + + 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 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? + এই অটো-টাইপ কমান্ডটি আর্গুমেন্টগুলির মধ্যে রয়েছে যা প্রায়শই পুনরাবৃত্তি হয়। আপনি কি সত্যিই এগিয়ে যেতে চান? + + + + AutoTypeAssociationsModel + + Window + উইন্ডো + + + Sequence + অনুক্রম + + + Default sequence + সচারচর অনুক্রম + + + + AutoTypeMatchModel + + Group + দল + + + Title + শিরোনাম + + + Username + ব্যবহারকরীর নাম + + + Sequence + অনুক্রম + + + + AutoTypeSelectDialog + + Auto-Type - KeePassXC + অটো-টাইপ- KeePassXC + + + Select entry to Auto-Type: + অটো-টাইপের জন্য এন্ট্রি নির্বাচন করুন + + + + BrowserAccessControlDialog + + KeePassXC-Browser Confirm Access + KeePassXC- ব্রাউজার অ্যাক্সেস নিশ্চিত করুন + + + Remember this decision + এই সিদ্ধান্ত মনে রাখুন + + + Allow + অনুমতি দিন + + + Deny + নাকচ করুন + + + %1 has requested access to passwords for the following item(s). +Please select whether you want to allow access. + %1 নিম্নলিখিত আইটেম (গুলি) এর জন্য পাসওয়ার্ড অ্যাক্সেসের অনুরোধ জানিয়েছে +আপনি প্রবেশাধিকার অনুমতি দিতে চান তা নির্বাচন করুন। + + + + BrowserOptionDialog + + Dialog + সংলাপ + + + This is required for accessing your databases with KeePassXC-Browser + KeePassXC- ব্রাউজারের সাথে আপনার ডেটাবেস অ্যাক্সেস করার জন্য এটি প্রয়োজনীয় + + + Enable KeepassXC browser integration + ব্রাউজারের সাথে KeepassXC ইন্টিগ্রেশন সচল করুন + + + General + সাধারন + + + Enable integration for these browsers: + এইসব ব্রাউজারের সাথে ইন্টিগ্রেশন সচল করুন: + + + &Google Chrome + &গুগল ক্রোম + + + &Firefox + &ফায়ারফক্স + + + &Chromium + &ক্রোমিয়াম + + + &Vivaldi + &ভিভালডি + + + Show a &notification when credentials are requested + Credentials mean login data requested via browser extension + প্রমাণপ্রত্রাদি অনুরোধ করা হলে একটি &বিজ্ঞপ্তি দেখান + + + Re&quest to unlock the database if it is locked + ডাটাবেস লক থাকলে আনলক করার অনুরোধ জানান + + + Only entries with the same scheme (http://, https://, ...) are returned. + শুধুমাত্র (http://, https://, ...) সম্বলিত এন্ট্রিগুলো এসেছে। + + + &Match URL scheme (e.g., https://...) + ইউআরএল সূচি মিলান (e.g., https://...) + + + Only returns the best matches for a specific URL instead of all entries for the whole domain. + একটি নির্দিষ্ট URL জন্য সম্ভাব্য সর্ব্বোত্তম ফলাফলটি দেখাবে পুরো ডোমেইনের জন্য সকল এন্ট্রি না দেখিয়ে। + + + &Return only best-matching credentials + সম্ভাব্য সর্ব্বোত্তম ফলাফলটি দেখাবে + + + 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 + সম্ভাব্য সর্ব্বোত্তম ফলাফলটি ব্যবহারকারী অনুসারে সাজান + + + &Disconnect all browsers + সকল ব্রাউজারে সংযোগ বিচ্ছিন্ন করুন + + + Forget all remembered &permissions + মনে রাখা সকল অনুমতি ভুলে যান + + + 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 + তথ্য হালনাগাদ করার পূর্বে কখনোই জিজ্ঞাসা করবেন না + + + Only the selected database has to be connected with a client. + শুধুমাত্র নির্বাচিত ডাটাবেসকে ক্লায়েন্টের সাথে সংযুক্ত করা উচিত। + + + Searc&h in all opened databases for matching credentials + Credentials mean login data requested via browser extension + এই ধরনের তথ্য সকল চালু থাকা ডাটেবেসে খূঁজে দেখুন + + + Automatically creating or updating string fields is not supported. + স্বয়ংক্রিয়ভাবে তৈরি করা বা স্ট্রিং ফিল্ড আপডেট করা সমর্থন করে না। + + + &Return advanced string fields which start with "KPH: " + "KPH: " দিয়ে শুরু হয়েছে এমন উন্নত স্ট্রিং ফিল্ডগুলি দেখান + + + Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. + KeePassXC অথবা keepassxc-proxy বাইনারী পাথ হালনাগাদ রাখুন লোকাল মেসেজিং স্ক্রিপ্ট হিসেবে চালুর সময় + + + Update &native messaging manifest files at startup + স্টার্ট-আপের সময় ন্যাটিভ ম্যাসেজিং ফাইল আপডেট করুন + + + Support a proxy application between KeePassXC and browser extension. + KeePassXC এবং ব্রাউজার এক্সটেনশন এর মধ্যে প্রক্সি এ্যাপ সমর্থন করে। + + + Use a &proxy application between KeePassXC and browser extension + KeePassXC এবং ব্রাউজার এক্সটেনশন এর মধ্যে প্রক্সি ব্যবহার করুন + + + Use a custom proxy location if you installed a proxy manually. + আপনি যদি ম্যানুয়ালী প্রক্সি যোগ করে থাকেন তবে তার স্থান ব্যাবহার করুন + + + Use a &custom proxy location + Meant is the proxy for KeePassXC-Browser + পরিবর্তিত প্রক্সি স্থান ব্যবহার করুন + + + Browse... + Button for opening file dialog + ব্রাউজ... + + + <b>Warning:</b> The following options can be dangerous! + <b>সতর্কতা:</b> নিম্নোক্ত বিকল্পগুলি বিপজ্জনক হতে পারে। + + + Executable Files (*.exe);;All Files (*.*) + এক্সিকিউটেবল ফাইল (*.exe)।। সব ফাইল (*. *) + + + Executable Files (*) + + + + Select custom proxy location + স্বনির্বাচিত প্রক্সি অবস্থান নির্বাচন করুন + + + We're sorry, but KeePassXC-Browser is not supported for Snap releases at the moment. + আমরা দুঃখিত, কিন্তু এই মুহূর্তে স্নাপ রিলিজ KeePassXC ব্রাউজার সমর্থন করে না। + + + + BrowserService + + KeePassXC: New key association request + KeePassXC: নতুন কী (key) যুক্ত করার আবেদন + + + You have received an association request for the above key. + +If you would like to allow it access to your KeePassXC database, +give it a unique name to identify and accept it. + আপনি উপরের কী যুক্ত করার অনুরোধ গ্রহণ করেছে। + +যদি আপনি এটি আপনার KeePassXC ডাটাবেস প্রবেশের সম্মতি দিতে চান, তা শনাক্ত করা যায় এমন একটি অনন্য নাম দিন। + + + Save and allow access + সংরক্ষণ করুন এবং প্রবেশে সম্মতি দিন + + + KeePassXC: Overwrite existing key? + KeePassXC: বর্তমান কী উপরিলিখন করবেন? + + + A shared encryption key with the name "%1" already exists. +Do you want to overwrite it? + শেয়ারকৃত এনক্রিপশন কী "%1" নামটি ইতিমধ্যেই বিদ্যমান। +এটির ওপর দিয়েই লিখতে চান? + + + KeePassXC: Update Entry + KeePassXC: হালনাগাদ এন্ট্রি + + + Do you want to update the information in %1 - %2? + %1 - %2 এর মধ্যে তথ্য হালনাগাদ করতে চান? + + + KeePassXC: Database locked! + KeePassXC: ডাটাবেস তালাবদ্ধ ! + + + The active database is locked! +Please unlock the selected database or choose another one which is unlocked. + সক্রিয় ডাটাবেজ বন্ধ রয়েছে। +নির্বাচিত ডাটাবেস আনলক করুন বা খোলা আছে এমন অন্য একটি পছন্দ করুন। + + + KeePassXC: Settings not available! + KeePassXC: সেটিংস সমূহ সুপ্রাপ্য নয়। + + + The active database does not contain a settings entry. + + + + KeePassXC: No keys found + KeePassXC: কোন কী পাওয়া যায়নি + + + No shared encryption keys found in KeePassXC Settings. + কোন শেয়ারকৃত এনক্রিপশন কী KeePassXC সেটিংসে পাওয়া যায়নি। + + + KeePassXC: Removed keys from database + KeePassXC: কী ডাটাবেস থেকে অপসারণ করা হয়েছে + + + Successfully removed %n encryption key(s) from KeePassXC settings. + + + + Removing stored permissions… + সঞ্চিত অনুমতিসমূহ অপসারণ করা হচ্ছে... + + + Abort + বাতিল + + + KeePassXC: Removed permissions + KeePassXC: অনুমতিসমূহ অপসারণ করা হয়েছে + + + Successfully removed permissions from %n entry(s). + + + + KeePassXC: No entry with permissions found! + KeePassXC: অনুমতিসহ কোন এন্ট্রি পাওয়া যায়নি। + + + The active database does not contain an entry with permissions. + সক্রিয় ডাটাবেজ প্রবেশের অনুমতিসহ কোর এন্ট্রি নেই। + + + + ChangeMasterKeyWidget + + Password + পাসওয়ার্ড + + + Enter password: + পাসওয়ার্ড প্রবেশ করান: + + + Repeat password: + পুনরায় পাসওয়ার্ড দিন: + + + &Key file + কী ফাইল + + + Browse + ব্রাউজ করুন + + + Create + তৈরি করুন + + + Cha&llenge Response + চ্যালেঞ্জ প্রতিক্রিয়া + + + Refresh + রিফ্রেশ + + + Key files + কী ফাইলগুলো + + + All files + সকল ফাইল + + + Create Key File... + কী ফাইল তৈরি করুন... + + + Unable to create Key File : + কী ফাইল তৈরি করা যায়নি: + + + Select a key file + কী ফাইল নির্বাচন করুন + + + Empty password + পাসাওয়ার্ড খালি আছে + + + Do you really want to use an empty string as password? + আপনি কি খালি স্ট্রিং পাসওয়ার্ড হিসেবে ব্যবহার করতে চান? + + + Different passwords supplied. + ভিন্ন ভিন্ন পাসওয়ার্ড সরবরাহ করা হয়েছে। + + + Failed to set %1 as the Key file: +%2 + কী ফাইল হিসেবে %1 সেট করতে ব্যর্থ হয়েছে: + %2 + + + 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. + আপনি পূর্ববর্তী কী ফাইল ফরম্যাট ব্যবহার করেছেন + যা ভবিষ্যতে অসমর্থিত হতে পারে । +নতুন কী (key) ফাইল তৈরি করুন। + + + Changing master key failed: no YubiKey inserted. + মাস্টার কী পরিবর্তন হয়নি: কোন YubiKey বসানো হয়নি। + + + + CloneDialog + + Clone Options + ক্লোন বিকল্পসমূহ + + + Append ' - Clone' to title + ' - Clone' শিরোনামে যোগ করুন + + + Replace username and password with references + ব্যবহারকারীর নাম এবং পাসওয়ার্ড তথ্যসূত্র দ্বারা প্রতিস্থাপন করুন + + + Copy history + ইতিহাস অনুলিপি করুন + + + + CsvImportWidget + + Import CSV fields + CSV আমদানি করুন + + + filename + ফাইলের নাম + + + size, rows, columns + আকার, সারি, কলাম + + + Encoding + এনকোডিং + + + Codec + কোডেক + + + Text is qualified by + লেখা যোগ্য হয়েছে + + + Fields are separated by + ক্ষেত্র আলাদা করা হয় + + + Comments start with + মন্তব্য দিয়ে শুরু + + + First record has field names + প্রথম রেকর্ড রয়েছে ফিল্ডের নাম + + + Number of headers line to discard + হেডার লাইন সংখ্যা বাতিল করতে হবে + + + Consider '\' an escape character + ' \' কে পালানোর চরিত্র বিবেচনা করুন + + + Preview + প্রাক্-দর্শন + + + Column layout + কলাম বিন্যাস + + + Not present in CSV file + CSV ফাইলে উপস্থিত নয় + + + Empty fieldname + খালি ফিল্ডনেম + + + column + + + + Imported from CSV file + CSV ফাইল থেকে আমদানি করা। + + + Original data: + অরিজিনাল তথ্য: + + + Error(s) detected in CSV file ! + ত্রুটি (গুলি) CSV ফাইলে শনাক্ত করা হয়েছে। + + + more messages skipped] + একাধিক বার্তা এড়িয়ে গেছে। + + + Error + ত্রুটি + + + CSV import: writer has errors: + + CSV আমদানি: লেখক ভুল করেছেন। + + + + + CsvImportWizard + + Error + ত্রুটি + + + Unable to calculate master key + মাস্টার কী গণনা করতে অক্ষম + + + + CsvParserModel + + %n byte(s), + + + + %n row(s), + + + + %n column(s) + + + + + DatabaseOpenWidget + + Enter master key + মাস্টার কী প্রবেশ করান + + + Key File: + কী ফাইল: + + + Password: + পাসওয়ার্ড: + + + Browse + ব্রাউজ করুন + + + Refresh + রিফ্রেশ + + + Challenge Response: + চ্যালেঞ্জের জবাব: + + + Unable to open the database. + ডাটাবেজ খুলে দিতে অক্ষম। + + + Can't open key file + কী ফাইলটি খোলা যাচ্ছে না + + + 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. + আপনি পূর্ববর্তী কী ফাইল ফরম্যাট ব্যবহার করেছেন + যা ভবিষ্যতে অসমর্থিত হতে পারে । +নতুন কী (key) ফাইল তৈরি করুন। + + + Don't show this warning again + আবার এই সতর্কীকরণ দেখাবেন না + + + All files + সকল ফাইল + + + Key files + কী ফাইলগুলো + + + Select key file + কী ফাইল নির্বাচন করুন + + + + DatabaseRepairWidget + + Repair database + ডাটাবেস মেরামত + + + Error + ত্রুটি + + + Can't open key file + কী ফাইলটি খোলা যাচ্ছে না + + + Unable to open the database. + ডাটাবেজ খুলে দিতে অক্ষম। + + + Database opened fine. Nothing to do. + ডাটাবেজ ভালোভাবে খুলেছে। কিছুই করার নেই। + + + Success + সফল + + + The database has been successfully repaired +You can now save it. + ডাটাবেজ সফলভাবে মেরামত করা হয়েছে +এখন আপনি তা সংরক্ষণ করতে পারবেন। + + + Unable to repair the database. + ডাটাবেস মেরামত করতে পারছে না। + + + + DatabaseSettingsWidget + + General + সাধারন + + + Encryption + এনক্রিপশন + + + Number of rounds too high + Key transformation rounds + খুব বেশি রাউন্ড গণনা + + + You are using a very high number of key transform rounds with Argon2. + +If you keep this number, your database may take hours or days (or even longer) to open! + Argon2 সাথে খুব বেশি সংখ্যক রূপান্তর কী রাউন্ডের ব্যবহার করছেন। + +আপনি এই সংখ্যা রাখতে চাইলে, ডাটাবেস খোলার জন্য সময় নেবে কয়েক ঘন্টা বা দিন (বা তারও বেশি) । + + + Understood, keep number + বোঝা যায়, নাম্বার রাখুন + + + Cancel + বাতিল + + + Number of rounds too low + Key transformation rounds + রাউন্ড খুব কম সংখ্যক + + + You are using a very low number of key transform rounds with AES-KDF. + +If you keep this number, your database may be too easy to crack! + আপনি খুব কম সংখ্যক রূপান্তর কী রাউন্ডের AES-KDF এর সাথে ব্যবহার করছে। + +যদি আপনি এই নাম্বার রাখেন, আপনার ডাটাবেজ খুব সহজেই ক্রাক হতে পারে! + + + KDF unchanged + KDF অপরিবর্তিত + + + Failed to transform key with new KDF parameters; KDF unchanged. + নতুন KDF প্যারামিটার দিয়ে কী পরিবর্তন করতে ব্যর্থ হয়েছে। KDF অপরিবর্তিত। + + + MiB + Abbreviation for Mebibytes (KDF settings) + + + + thread(s) + Threads for parallel execution (KDF settings) + + + + + DatabaseSettingsWidgetEncryption + + Encryption Algorithm: + এনক্রিপশন এ্যালগরিদম: + + + AES: 256 Bit (default) + AES: 256 Bit (default) + + + Twofish: 256 Bit + Twofish: 256 Bit + + + Key Derivation Function: + কী ডেরিভেশন ফাংশন: + + + Transform rounds: + রাউন্ড রূপান্তর করো: + + + Benchmark 1-second delay + বেঞ্চমার্ক 1 সেকেন্ড দেরি + + + Memory Usage: + মেমোরি ব্যবহার: + + + Parallelism: + সমান্তরালভাবে: + + + + DatabaseSettingsWidgetGeneral + + Database Meta Data + ডাটাবেস মেটা ডাটা + + + Database name: + ডাটাবেজ নাম: + + + Database description: + ডাটাবেস বিবরণ: + + + Default username: + পূর্ব-নির্ধারিত ব্যবহারকারীর নাম: + + + History Settings + ইতিহাস সেটিংস + + + Max. history items: + সর্বাধিত ঐতিহাসিক বিষয়: + + + Max. history size: + সর্বাধিত ঐতিহাসিক আকার: + + + MiB + MiB + + + Use recycle bin + রিসাইকেল বিন ব্যবহার করুন + + + Additional Database Settings + অতিরিক্ত ডাটাবেস সেটিংস + + + Enable &compression (recommended) + সংকোচন সক্রিয় করুন (প্রস্তাবিত) + + + + DatabaseTabWidget + + Root + Root group + রুট + + + KeePass 2 Database + KeePass 2 ডাটাবেস + + + All files + সকল ফাইল + + + Open database + উন্মুক্ত ডাটাবেস + + + File not found! + + + + Unable to open the database. + ডাটাবেজ খুলে দিতে অক্ষম। + + + File opened in read only mode. + ফাইলটি শুধুমাত্র পঠন পরিমণ্ডলে খোলা। + + + Open CSV file + CSV ফাইল খুলুন + + + CSV file + CSV ফাইল + + + All files (*) + + + + Merge database + ডাটাবেস একত্রীকরণ + + + Open KeePass 1 database + খোলা KeePass 1 তথ্যভাণ্ডার + + + KeePass 1 database + KeePass 1 তথ্যভাণ্ডার + + + Close? + বন্ধ করুন? + + + "%1" is in edit mode. +Discard changes and close anyway? + "%1" সম্পাদনা মোডে আছে। +পরিবর্তনগুলি পরিত্যাগ করা হবে, আর যাই হোক বন্ধ? + + + Save changes? + পরিবর্তন সংরক্ষণ করব? + + + "%1" was modified. +Save changes? + '%1' পরিবর্তিত হয়েছে। +পরিবর্তন সংরক্ষণ করব? + + + Writing the database failed. + এই ডাটাবেসে লেখা ব্যর্থ হয়েছে। + + + Passwords + পাসওয়ার্ডসমূহ + + + Save database as + ডাটাবেজ হিসেবে সংরক্ষণ করুন + + + Export database to CSV file + ডাটাবেস CSV ফাইল হিসেবে রপ্তানি করুন + + + Writing the CSV file failed. + CSV ফাইলে লেখা ব্যর্থ হয়েছে। + + + New database + নতুন ডাটাবেস + + + locked + আটকানো + + + Lock database + তালাবদ্ধ ডাকাবেস + + + Can't lock the database as you are currently editing it. +Please press cancel to finish your changes or discard them. + + + + This database has been modified. +Do you want to save the database before locking it? +Otherwise your changes are lost. + এই ডাটাবেজ সংশোধন করা হয়েছে। +লক করার আগে ডাটাবেস সংরক্ষণ করতে চান? +তা না হলে আপনার করা কোন পরিবর্তন সংরক্ষিত হবেনা। + + + 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 একাধিক বার ডাটাবেস সংরক্ষণ করতে ব্যর্থ হয়েছে। ফাইল সিংক্রোনাইজ সেবা ফাইলটি লক ধরে রাখলে এমনটি হতে পারে। +নিরাপদ সংরক্ষণ অক্ষম করুন এবং আবার চেষ্টা করুন। + + + + DatabaseWidget + + Searching... + সন্ধান করা হচ্ছে... + + + Change master key + মাস্টার কী পরিবর্তন করুন + + + Delete entry? + এন্ট্রি মুছে ফেলতে চান? + + + Do you really want to delete the entry "%1" for good? + আপনি কি সত্যিই এন্ট্রি "%1" মুছে ফেলতে চান? + + + Delete entries? + এন্ট্রিসমূহ মুছে ফেলতে চান? + + + Do you really want to delete %1 entries for good? + আপনি সত্যিই %1 এন্ট্রিসমূহ মুছে ফেলতে চান? + + + Move entry to recycle bin? + এন্ট্রি রিসাইকেল বিনে সরাবে? + + + Do you really want to move entry "%1" to the recycle bin? + আপনি কি "%1" এন্ট্রিটি রিসাইকেল বিনে সরাতে চান? + + + Move entries to recycle bin? + রিসাইকেল বিনে এন্ট্রিসমূহ সরাবেন? + + + Do you really want to move %n entry(s) to the recycle bin? + + + + Execute command? + কমান্ড চালাও? + + + Do you really want to execute the following command?<br><br>%1<br> + আপনি কি নিচের কমান্ড সঞ্চালন করতে চান? <br><br>%1<br> + + + Remember my choice + আমার পছন্দ মনে রাখুন + + + Delete group? + দল মুছে ফেলতে চান? + + + Do you really want to delete the group "%1" for good? + আপনি কি গ্রুপ '%1' মুছে ফেলতে চান? + + + Unable to calculate master key + মাস্টার কী গণনা করতে অক্ষম + + + No current database. + কোন বর্তমান ডাকাবেস নেই। + + + No source database, nothing to do. + কোন উৎস ডাটাবেস নেই, কিছুই করা যাবেনা। + + + Search Results (%1) + অনুসন্ধানের ফলাফল (%1) + + + No Results + কোনো ফলাফল নেই + + + File has changed + ফাইলটি পরিবর্তিত হয়েছে + + + The database file has changed. Do you want to load the changes? + এই ডাটাবেস ফাইল পরিবর্তন করা হয়েছে। আপনি যে পরিবর্তনগুলো লোড করতে চান? + + + Merge Request + একত্রিত করার অনুরোধ করুন + + + The database file has changed and you have unsaved changes. +Do you want to merge your changes? + এই ডাটাবেস ফাইল পরিবর্তন হয়েছে এবং আপনার পরিবর্তন অসংরক্ষিত রয়েছে। +আপনি কি আপনার পরিবর্তন একত্রিত করতে চান? + + + Could not open the new database file while attempting to autoreload this database. + এই ডাটাবেস টি সয়ংক্রিয়ভাবে পূনরায় খোলার সময় নতুন ডাটাবেস খুলতে ব্যর্থ হয়েছে + + + Empty recycle bin? + রিসাইকেল বিন খালি করুন? + + + Are you sure you want to permanently delete everything from your recycle bin? + আপনি কি নিশ্চিত যে ,আপনি রিসাইকেল বিন থেকে সবকিছু স্থায়ীভাবে মুছে ফেলতে চান? + + + + DetailsWidget + + Generate TOTP Token + TOTP টোকেন তৈরি করুন + + + Close + বন্ধ করুন + + + General + সাধারন + + + Password + পাসওয়ার্ড + + + URL + URL + + + Expiration + মেয়াদ শেষে + + + Username + ব্যবহারকরীর নাম + + + Autotype + অটোটাইপ + + + Searching + সন্ধান করা হচ্ছে + + + Attributes + বৈশিষ্ট্যাবলী + + + Attachments + সংযুক্তিসমূহ + + + Notes + নোটসমূহ + + + Window + উইন্ডো + + + Sequence + অনুক্রম + + + Search + সন্ধান + + + Clear + পরিস্কার + + + Never + কখনো না + + + [PROTECTED] + [সংরক্ষিত] + + + Disabled + নিষ্ক্রিয় + + + Enabled + সক্রিয় + + + + EditEntryWidget + + Entry + এন্ট্রি + + + Advanced + উন্নততর + + + Icon + আইকন + + + Auto-Type + অটো-টাইপ + + + Properties + বৈশিষ্ট্য + + + History + ইতিহাস + + + SSH Agent + SSH এজেন্ট + + + n/a + n/a + + + (encrypted) + (এনক্রিপ্টেড) + + + Select private key + ব্যক্তিগত কী নির্বাচন করো + + + File too large to be a private key + একটি প্রাইভেট কী'র জন্য ফাইলটি খুবই বড় + + + Failed to open private key + গোপনীয় কী খুলতে ব্যর্থ + + + Entry history + + + + Add entry + এন্ট্রি যোগ করো + + + Edit entry + এন্ট্রি সম্পাদন করো + + + Different passwords supplied. + ভিন্ন ভিন্ন পাসওয়ার্ড সরবরাহ করা হয়েছে। + + + New attribute + নতুন বৈশিষ্ট্য + + + Confirm Remove + মূছে ফেলা নিশ্চিত করুন + + + Are you sure you want to remove this attribute? + আপনি কি নিশ্চিত আপনি এই বৈশিষ্ট্য অপসারণ করতে চান? + + + [PROTECTED] + [সংরক্ষিত] + + + Press reveal to view or edit + দেখতে বা সম্পাদনা করতে রিভেল টিপুন + + + Tomorrow + আগামীকাল + + + %n week(s) + + + + %n month(s) + + + + 1 year + ১ বছর + + + Apply generated password? + জেনারেট করা পাসওয়ার্ড প্রয়োগ করবেন? + + + Do you want to apply the generated password to this entry? + জেনারেট করা পাসওয়ার্ড এন্ট্রির সাথে প্রয়োগ করতে চান? + + + Entry updated successfully. + এন্ট্রি সফলভাবে আপডেট করা হয়েছে। + + + + EditEntryWidgetAdvanced + + Additional attributes + অতিরিক্ত বৈশিষ্ট্য + + + Add + যোগ করুন + + + Remove + অপসারণ করুন + + + Edit Name + নাম পরিবর্তন করুন + + + Protect + রক্ষা করুন + + + Reveal + রিভেল + + + Attachments + সংযুক্তিসমূহ + + + Foreground Color: + পুরোভূমির রং: + + + Background Color: + পটভূমির রং: + + + + EditEntryWidgetAutoType + + Enable Auto-Type for this entry + এই এন্ট্রির জন্য অটো-টাইপ সক্রিয় করুন + + + Inherit default Auto-Type sequence from the &group + দল থেকে পূর্ব-নির্ধারিত অটো-টাইপ ধারাবাহিকতা বজায় + + + &Use custom Auto-Type sequence: + পছন্দসই অটো-টাইপ ক্রম ব্যবহার করুন: + + + Window Associations + উইণ্ডো সমিতিসমূহ + + + + + + + + + - + - + + + Window title: + উইন্ডো শিরোনাম: + + + Use a specific sequence for this association: + এই এসোসিয়েশনের জন্য নির্দিষ্ট ক্রম ব্যবহার করুন: + + + + EditEntryWidgetHistory + + Show + প্রদর্শন + + + Restore + পুনর্বহাল করুন + + + Delete + মুছে ফেলুন + + + Delete all + সব মুছে ফেলুন + + + + EditEntryWidgetMain + + URL: + ইউআরএল: + + + Password: + পাসওয়ার্ড: + + + Repeat: + পূনরায়: + + + Title: + শিরোনাম: + + + Notes + নোটসমূহ + + + Presets + পূর্বনির্ধারিত + + + Toggle the checkbox to reveal the notes section. + নোট বিভাগ দেখার জন্য চেকবক্স টিক দিন। + + + Username: + ব্যবহারকারীর নাম: + + + Expires + মেয়াদ উত্তীর্ণ হয়ে যাবে + + + + EditEntryWidgetSSHAgent + + Form + ফরম + + + Remove key from agent after + পরে এজেন্ট থেকে কী অপসারণ করুন + + + seconds + সেকেন্ড + + + Fingerprint + আঙ্গুলের ছাপ + + + Remove key from agent when database is closed/locked + ডাটাবেজ বন্ধ/লক করা হয় তখন এজেন্টের কাছ থেকে কী অপসারণ করুন + + + Public key + পাবলিক কী + + + Add key to agent when database is opened/unlocked + এজেন্টের কাছে কী যোগ করুন যখন ডাটাবেস খোলা/মুক্ত থাকে + + + Comment + মন্তব্য + + + Decrypt + ডিক্রাইপ্ট + + + n/a + n/a + + + Copy to clipboard + ক্লিপবোর্ডে কপি করুন + + + Private key + ব্যক্তিগত কী + + + External file + বাইরের ফাইল + + + Browse... + Button for opening file dialog + ব্রাউজ... + + + Attachment + সংযুক্তি + + + Add to agent + এজেন্টের সাথে যুক্ত করুন + + + Remove from agent + এজেন্টের কাছ থেকে অপসারণ করুন + + + Require user confirmation when this key is used + + + + + EditGroupWidget + + Group + দল + + + Icon + আইকন + + + Properties + বৈশিষ্ট্য + + + Add group + দলযোগ করুন + + + Edit group + দল সম্পাদন করুন + + + Enable + সক্রিয় করুন + + + Disable + নিষ্ক্রিয় + + + Inherit from parent group (%1) + মূল দল (%1) এর মত + + + + EditGroupWidgetMain + + Name + নাম + + + Notes + নোটসমূহ + + + Expires + মেয়াদ উত্তীর্ণ হয়ে যাবে + + + Search + সন্ধান + + + Auto-Type + অটো-টাইপ + + + &Use default Auto-Type sequence of parent group + মূল দলে পূর্বনির্ধারিত অটো-টাইপ ধারা ব্যবহার করুন + + + Set default Auto-Type se&quence + ডিফল্ট অটো-টাইপ ধারা + + + + EditWidgetIcons + + &Use default icon + ডিফল্ট আইকন ব্যবহার করুন + + + Use custo&m icon + ইচ্ছামত আইকন ব্যবহার করুন + + + Add custom icon + নিজস্ব আইকন যোগ করুন + + + Delete custom icon + স্বনির্বাচিত আইকন মুছে ফেলুন + + + Download favicon + + + + Unable to fetch favicon. + Favicon আনতে অক্ষম হয়েছে। + + + Hint: You can enable Google as a fallback under Tools>Settings>Security + ইঙ্গিত: আপনি গুগল কে ফল-ব্যাক হিসেবে সক্রিয় করতে পারেন টুলস > সেটিংস > নিরাপত্তা + + + Images + ছবি + + + All files + সকল ফাইল + + + Select Image + ছবি নির্বাচন করুন + + + Can't read icon + আইকন দেখা যায়নি + + + Custom icon already exists + স্বনির্বাচিত আইকন ইতোমধ্যে বিদ্যমান + + + Confirm Delete + মুছে ফেলা নিশ্চিত করুন + + + This icon is used by %1 entries, and will be replaced by the default icon. Are you sure you want to delete it? + এই আইকন %1 এন্ট্রি দ্বারা ব্যবহৃত হচ্ছে, এবং ডিফল্ট আইকন দ্বারা প্রতিস্থাপিত হবে। আপনি কি নিশ্চিত যে আপনি এটা মুছে ফেলতে চান? + + + + EditWidgetProperties + + Created: + সৃষ্টি করেছে: + + + Modified: + সংশোধিত: + + + Accessed: + দেখা হয়েছে: + + + Uuid: + Uuid: + + + Plugin Data + প্লাগ-ইন তথ্য + + + Remove + অপসারণ করুন + + + Delete plugin data? + প্লাগ-ইন তথ্য মুছে ফেলতে চান? + + + Do you really want to delete the selected plugin data? +This may cause the affected plugins to malfunction. + আপনি কি নির্বাচিত প্লাগ-ইন তথ্য মুছে ফেলতে চান? +এর কারনে আক্রান্ত প্লাগ ইন খারাপ হতে পারে। + + + Key + কী + + + Value + মান + + + + Entry + + - Clone + Suffix added to cloned entries + -ক্লোন + + + + EntryAttachmentsModel + + Name + নাম + + + Size + মাপ + + + + EntryAttachmentsWidget + + Form + ফরম + + + Add + যোগ করুন + + + Remove + অপসারণ করুন + + + Open + খুলুন + + + Save + সংরক্ষণ করুন + + + Select files + ফাইল নির্বাচন করুন + + + Are you sure you want to remove %n attachment(s)? + + + + Confirm Remove + মূছে ফেলা নিশ্চিত করুন + + + Save attachments + সংযুক্তিসমূহ সংরক্ষণ করুন + + + Unable to create directory: +%1 + ডিরেক্টরি তৈরি করা যায়নি: + %1 + + + Are you sure you want to overwrite the existing file "%1" with the attachment? + আপনি কি বিদ্যমান ফাইল "%1" সঙ্গে সংযুক্তি উপরিলিখন করতে চান? + + + Confirm overwrite + উপরিলিখন নিশ্চিত করুন + + + Unable to save attachments: +%1 + সংযুক্তি সংরক্ষণ করা যায়নি: +%1 + + + Unable to open attachment: +%1 + সংযুক্তি খুলতে ব্যর্থ: + %1 + + + Unable to open attachments: +%1 + সংযুক্তিসমূহ খুলতে ব্যর্থ: +%1 + + + Unable to open files: +%1 + ফাইল খোলা যায়নি: +%1 + + + + EntryAttributesModel + + Name + নাম + + + + EntryHistoryModel + + Last modified + শেষ বার পরিমার্জিত + + + Title + শিরোনাম + + + Username + ব্যবহারকরীর নাম + + + URL + URL + + + + EntryModel + + Ref: + Reference abbreviation + প্রসঙ্গ: + + + Group + দল + + + Title + শিরোনাম + + + Username + ব্যবহারকরীর নাম + + + URL + URL + + + Never + কখনো না + + + Password + পাসওয়ার্ড + + + Notes + নোটসমূহ + + + Expires + মেয়াদ উত্তীর্ণ হয়ে যাবে + + + Created + সৃষ্টি করেছেন + + + Modified + পরিবর্তন করা হয়েছে + + + Accessed + + + + Attachments + সংযুক্তিসমূহ + + + + EntryView + + Customize View + পছন্দসই প্রদর্শন‌ + + + Hide Usernames + ব্যবহারকারীর নাম লুকান + + + Hide Passwords + পাসওয়ার্ড লুকান + + + Fit to window + উইন্ডোতে মানানসই + + + Fit to contents + + + + Reset to defaults + স্বাভাবিক অবস্থায় ফেরত + + + Attachments (icon) + সংযুক্তিসমূহ (আইকন) + + + + Group + + Recycle Bin + রিসাইকেল বিন + + + + HostInstaller + + KeePassXC: Cannot save file! + + + + Cannot save the native messaging script file. + + + + + HttpPasswordGeneratorWidget + + Length: + দৈর্ঘ্য: + + + Character Types + অক্ষরের ধরণ + + + Upper Case Letters + বড় হাতের অক্ষর + + + A-Z + + + + Lower Case Letters + ছোট হাতের অক্ষর + + + a-z + + + + Numbers + নম্বরগুলি + + + 0-9 + 0-9 + + + Special Characters + বিশেষ অক্ষরসমূহ + + + /*_& ... + /*_& ... + + + Exclude look-alike characters + + + + Ensure that the password contains characters from every group + পাসওয়ার্ড টি প্রত্যেক অক্ষর দলের সমন্বয় নিশ্চিত করুন + + + Extended ASCII + বর্ধিত ASCII + + + + KMessageWidget + + &Close + বন্ধ করুন + + + Close message + বার্তা বন্ধ করুন + + + + Kdbx3Reader + + Unable to calculate master key + মাস্টার কী গণনা করতে অক্ষম + + + Unable to issue challenge-response. + চ্যালেঞ্জের জবাব ইস্যু করতে ব্যর্থ। + + + Wrong key or database file is corrupt. + ভুল কী বা ডাটাবেস ফাইল নষ্ট হয়েছে। + + + + Kdbx3Writer + + Unable to issue challenge-response. + চ্যালেঞ্জের জবাব ইস্যু করতে ব্যর্থ। + + + Unable to calculate master key + মাস্টার কী গণনা করতে অক্ষম + + + + Kdbx4Reader + + missing database headers + ডাটাবেসের শিরোনাম নেই + + + Unable to calculate master key + মাস্টার কী গণনা করতে অক্ষম + + + Invalid header checksum size + শিরোনামের চেকসাম আকার সঠিক নয় + + + Header SHA256 mismatch + হেডারের SHA256 মিলছে না + + + Wrong key or database file is corrupt. (HMAC mismatch) + ভুল কী বা ডাটাবেস ফাইল নষ্ট হয়েছে। (HMAC অমিল) + + + Unknown cipher + অপরিচিত সংকেতায়ন + + + Invalid header id size + হেডারের আইডি আকার সঠিক নয় + + + Invalid header field length + + + + Invalid header data length + হেডার তথ্য দৈর্ঘ্য সঠিক নয় + + + Failed to open buffer for KDF parameters in header + + + + Unsupported key derivation function (KDF) or invalid parameters + + + + Legacy header fields found in KDBX4 file. + + + + Invalid inner header id size + + + + Invalid inner header field length + + + + Invalid inner header binary size + + + + Unsupported KeePass variant map version. + Translation: variant map = data structure for storing meta data + + + + Invalid variant map entry name length + Translation: variant map = data structure for storing meta data + + + + Invalid variant map entry name data + Translation: variant map = data structure for storing meta data + + + + Invalid variant map entry value length + Translation: variant map = data structure for storing meta data + + + + Invalid variant map entry value data + Translation comment: variant map = data structure for storing meta data + + + + Invalid variant map Bool entry value length + Translation: variant map = data structure for storing meta data + + + + Invalid variant map Int32 entry value length + Translation: variant map = data structure for storing meta data + + + + Invalid variant map UInt32 entry value length + Translation: variant map = data structure for storing meta data + + + + Invalid variant map Int64 entry value length + Translation: variant map = data structure for storing meta data + + + + Invalid variant map UInt64 entry value length + Translation: variant map = data structure for storing meta data + + + + Invalid variant map entry type + Translation: variant map = data structure for storing meta data + + + + Invalid variant map field type size + Translation: variant map = data structure for storing meta data + + + + + Kdbx4Writer + + Invalid symmetric cipher algorithm. + + + + Invalid symmetric cipher IV size. + IV = Initialization Vector for symmetric cipher + + + + Unable to calculate master key + মাস্টার কী গণনা করতে অক্ষম + + + Failed to serialize KDF parameters variant map + Translation comment: variant map = data structure for storing meta data + + + + + KdbxReader + + Invalid cipher uuid length + + + + Unsupported cipher + + + + Invalid compression flags length + + + + Unsupported compression algorithm + + + + Invalid master seed size + + + + Invalid transform seed size + + + + Invalid transform rounds size + + + + Invalid start bytes size + + + + Invalid random stream id size + + + + Invalid inner random stream cipher + + + + 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. + + + + Unsupported KeePass 2 database version. + + + + + KdbxXmlReader + + XML parsing failure: %1 + + + + No root group + + + + Missing icon uuid or data + + + + Missing custom data key or value + + + + Multiple group elements + + + + Null group uuid + + + + Invalid group icon number + + + + 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 + + + + Unable to decrypt entry string + + + + Duplicate custom attribute found + + + + Entry string key or value missing + + + + Duplicate attachment found + + + + Entry binary key or value missing + + + + Auto-type association window or sequence missing + + + + Invalid bool value + + + + Invalid date time value + + + + Invalid color value + + + + Invalid color rgb part + + + + Invalid number value + + + + Invalid uuid value + + + + Unable to decompress binary + Translator meant is a binary data inside an entry + + + + + KeePass1OpenWidget + + Import KeePass1 database + + + + Unable to open the database. + ডাটাবেজ খুলে দিতে অক্ষম। + + + + KeePass1Reader + + Unable to read keyfile. + + + + Not a KeePass database. + + + + 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 transform seed size + + + + Invalid number of transform rounds + + + + Unable to construct group tree + + + + Root + রুট + + + Unable to calculate master key + মাস্টার কী গণনা করতে অক্ষম + + + Wrong key or database file is corrupt. + ভুল কী বা ডাটাবেস ফাইল নষ্ট হয়েছে। + + + Key transformation failed + + + + Invalid group field type number + + + + Invalid group field size + + + + Read group field data doesn't match size + + + + Incorrect group id field size + + + + Incorrect group creation time field size + + + + Incorrect group modification time field size + + + + Incorrect group access time field size + + + + Incorrect group expiry time field size + + + + Incorrect group icon field size + + + + Incorrect group level field size + + + + Invalid group field type + + + + Missing group id or level + + + + Missing entry field type number + + + + Invalid entry field size + + + + Read entry field data doesn't match size + + + + Invalid entry uuid field size + + + + Invalid entry group id field size + + + + Invalid entry icon field size + + + + Invalid entry creation time field size + + + + Invalid entry modification time field size + + + + Invalid entry expiry time field size + + + + Invalid entry field type + + + + + KeePass2 + + AES: 256-bit + + + + Twofish: 256-bit + + + + ChaCha20: 256-bit + + + + AES-KDF (KDBX 4) + + + + AES-KDF (KDBX 3.1) + + + + Argon2 (KDBX 4 – recommended) + + + + + Main + + Existing single-instance lock file is invalid. Launching new instance. + + + + The lock file could not be created. Single-instance mode disabled. + + + + Another instance of KeePassXC is already running. + + + + Fatal error while testing the cryptographic functions. + + + + KeePassXC - Error + + + + + MainWindow + + &Database + + + + &Recent databases + + + + Import + + + + &Help + + + + E&ntries + + + + Copy att&ribute to clipboard + + + + Time-based one-time password + + + + &Groups + + + + &Tools + + + + &Quit + + + + &About + + + + &Open database... + + + + &Save database + + + + &Close database + + + + &New database + + + + Merge from KeePassX database + + + + &Add new entry + + + + &View/Edit entry + + + + &Delete entry + + + + &Add new group + + + + &Edit group + + + + &Delete group + + + + Sa&ve database as... + + + + Change &master key... + + + + &Database settings + + + + Database settings + + + + &Clone entry + + + + &Find + + + + Copy &username + + + + Copy username to clipboard + + + + Cop&y password + + + + Copy password to clipboard + + + + &Settings + + + + Password Generator + + + + &Perform Auto-Type + + + + &Open URL + + + + &Lock databases + + + + &Title + + + + Copy title to clipboard + + + + &URL + + + + Copy URL to clipboard + + + + &Notes + + + + Copy notes to clipboard + + + + &Export to CSV file... + + + + Import KeePass 1 database... + + + + Import CSV file... + + + + Re&pair database... + + + + Show TOTP + + + + Set up TOTP... + + + + Copy &TOTP + + + + E&mpty recycle bin + + + + Clear history + + + + Access error for config file %1 + + + + <p>It looks like you are using KeePassHTTP for browser integration. This feature has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a class="link" href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a> (warning %1 of 3).</p> + + + + read-only + + + + Settings + + + + Toggle window + + + + Quit KeePassXC + + + + KeePass 2 Database + KeePass 2 ডাটাবেস + + + All files + সকল ফাইল + + + Open database + উন্মুক্ত ডাটাবেস + + + Save repaired database + + + + Writing the database failed. + এই ডাটাবেসে লেখা ব্যর্থ হয়েছে। + + + 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. + + + + + 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. + + + + 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 + + + + Key derivation failed, key file corrupted? + + + + Decryption failed, wrong passphrase? + + + + Unexpected EOF while reading public key + + + + Unexpected EOF while reading private key + + + + Can't write public key as it is empty + + + + Unexpected EOF when writing public key + + + + Can't write private key as it is empty + + + + Unexpected EOF when writing private key + + + + Unsupported key type: %1 + + + + Unknown cipher: %1 + + + + Cipher IV is too short for MD5 kdf + + + + Unknown KDF: %1 + + + + Unknown key type: %1 + + + + + OptionDialog + + Dialog + সংলাপ + + + This is required for accessing your databases from ChromeIPass or PassIFox + + + + Enable KeePassHTTP server + + + + General + সাধারন + + + Sh&ow a notification when credentials are requested + Credentials mean login data requested via browser extension + + + + Only returns the best matches for a specific URL instead of all entries for the whole domain. + একটি নির্দিষ্ট URL জন্য সম্ভাব্য সর্ব্বোত্তম ফলাফলটি দেখাবে পুরো ডোমেইনের জন্য সকল এন্ট্রি না দেখিয়ে। + + + &Return only best matching entries + + + + Re&quest to unlock the database if it is locked + ডাটাবেস লক থাকলে আনলক করার অনুরোধ জানান + + + Only entries with the same scheme (http://, https://, ftp://, ...) are returned. + + + + &Match URL schemes + + + + Sort matching entries by &username + + + + Sort &matching entries by title + + + + R&emove all shared encryption keys from active database + + + + Re&move all stored permissions from entries in active database + + + + Password Generator + + + + Advanced + উন্নততর + + + Always allow &access to entries + + + + Always allow &updating entries + + + + Only the selected database has to be connected with a client. + শুধুমাত্র নির্বাচিত ডাটাবেসকে ক্লায়েন্টের সাথে সংযুক্ত করা উচিত। + + + Searc&h in all opened databases for matching entries + + + + Automatically creating or updating string fields is not supported. + স্বয়ংক্রিয়ভাবে তৈরি করা বা স্ট্রিং ফিল্ড আপডেট করা সমর্থন করে না। + + + &Return advanced string fields which start with "KPH: " + "KPH: " দিয়ে শুরু হয়েছে এমন উন্নত স্ট্রিং ফিল্ডগুলি দেখান + + + HTTP Port: + + + + Default port: 19455 + + + + KeePassXC will listen to this port on 127.0.0.1 + + + + <b>Warning:</b> The following options can be dangerous! + <b>সতর্কতা:</b> নিম্নোক্ত বিকল্পগুলি বিপজ্জনক হতে পারে। + + + <p>KeePassHTTP has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a>.</p> + + + + Cannot bind to privileged ports + + + + Cannot bind to privileged ports below 1024! +Using default port 19455. + + + + + PasswordGeneratorWidget + + %p% + + + + Password: + পাসওয়ার্ড: + + + strength + Password strength + + + + entropy + + + + Password + পাসওয়ার্ড + + + Character Types + অক্ষরের ধরণ + + + Upper Case Letters + বড় হাতের অক্ষর + + + Lower Case Letters + ছোট হাতের অক্ষর + + + Numbers + নম্বরগুলি + + + Special Characters + বিশেষ অক্ষরসমূহ + + + Extended ASCII + বর্ধিত ASCII + + + Exclude look-alike characters + + + + Pick characters from every group + + + + &Length: + + + + Passphrase + + + + Wordlist: + + + + Word Count: + + + + Word Separator: + + + + Generate + + + + Copy + কপি + + + Accept + + + + Close + বন্ধ করুন + + + Apply + + + + Entropy: %1 bit + + + + Password Quality: %1 + + + + Poor + Password quality + + + + Weak + Password quality + + + + Good + Password quality + + + + Excellent + Password quality + + + + + QObject + + Database not opened + + + + Database hash not available + + + + Client public key not received + + + + Cannot decrypt message + + + + Timeout or cannot connect to KeePassXC + + + + Action cancelled or denied + + + + Cannot encrypt message or public key not found. Is Native Messaging enabled in KeePassXC? + + + + KeePassXC association failed, try again + + + + Key change was not successful + + + + Encryption key is not recognized + + + + No saved databases found + + + + Incorrect action + + + + Empty message received + + + + No URL provided + + + + No logins found + + + + Unknown error + + + + Add a new entry to a database. + + + + Path of the database. + ডাটাবেসের পাথ + + + Key file of the database. + + + + path + + + + Username for the entry. + + + + username + + + + URL for the entry. + + + + URL + URL + + + Prompt for the entry's password. + + + + Generate a password for the entry. + + + + Length for the generated password. + + + + length + + + + Path of the entry to add. + + + + Copy an entry's password to the clipboard. + + + + Path of the entry to clip. + clip = copy to clipboard + + + + Timeout in seconds before clearing the clipboard. + + + + Edit an entry. + + + + Title for the entry. + + + + title + + + + Path of the entry to edit. + + + + Estimate the entropy of a password. + + + + Password for which to estimate the entropy. + + + + Perform advanced analysis on the password. + + + + Extract and print the content of a database. + + + + Path of the database to extract. + + + + Insert password to unlock %1: + + + + Failed to load key file %1 : %2 + + + + 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. + + + + List database entries. + + + + Path of the group to list. Default is / + + + + Find entries quickly. + + + + Search term. + + + + Merge two databases. + + + + Path of the database to merge into. + + + + Path of the database to merge from. + + + + Use the same credentials for both database files. + + + + Key file of the database to merge from. + + + + 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. + + + + attribute + + + + Name of the entry to show. + + + + NULL device + + + + error reading from device + + + + file empty ! + + + + + malformed string + + + + missing closing quote + + + + Group + দল + + + Title + শিরোনাম + + + Username + ব্যবহারকরীর নাম + + + Password + পাসওয়ার্ড + + + Notes + নোটসমূহ + + + Last Modified + + + + Created + সৃষ্টি করেছেন + + + Legacy Browser Integration + + + + Browser Integration + + + + YubiKey[%1] Challenge Response - Slot %2 - %3 + + + + Press + + + + Passive + + + + SSH Agent + SSH এজেন্ট + + + Generate a new random diceware passphrase. + + + + Word count for the diceware passphrase. + + + + count + + + + Wordlist for the diceware generator. +[Default: EFF English] + + + + Generate a new random password. + + + + Length of the generated password. + + + + Use lowercase characters in the generated password. + + + + Use uppercase characters in the generated password. + + + + Use numbers in the generated password. + + + + Use special characters in the generated password. + + + + Use extended ASCII in the generated password. + + + + + 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: + + + + + SearchWidget + + Search... + + + + Search + সন্ধান + + + Clear + পরিস্কার + + + Case Sensitive + + + + Limit search to selected group + + + + + Service + + KeePassXC: New key association request + KeePassXC: নতুন কী (key) যুক্ত করার আবেদন + + + You have received an association request for the above key. +If you would like to allow it access to your KeePassXC database +give it a unique name to identify and accept it. + + + + KeePassXC: Overwrite existing key? + KeePassXC: বর্তমান কী উপরিলিখন করবেন? + + + A shared encryption-key with the name "%1" already exists. +Do you want to overwrite it? + + + + KeePassXC: Update Entry + KeePassXC: হালনাগাদ এন্ট্রি + + + Do you want to update the information in %1 - %2? + %1 - %2 এর মধ্যে তথ্য হালনাগাদ করতে চান? + + + KeePassXC: Database locked! + KeePassXC: ডাটাবেস তালাবদ্ধ ! + + + The active database is locked! +Please unlock the selected database or choose another one which is unlocked. + সক্রিয় ডাটাবেজ বন্ধ রয়েছে। +নির্বাচিত ডাটাবেস আনলক করুন বা খোলা আছে এমন অন্য একটি পছন্দ করুন। + + + KeePassXC: Removed keys from database + KeePassXC: কী ডাটাবেস থেকে অপসারণ করা হয়েছে + + + Successfully removed %n encryption-key(s) from KeePassX/Http Settings. + + + + KeePassXC: No keys found + KeePassXC: কোন কী পাওয়া যায়নি + + + No shared encryption-keys found in KeePassHttp Settings. + + + + KeePassXC: Settings not available! + KeePassXC: সেটিংস সমূহ সুপ্রাপ্য নয়। + + + The active database does not contain an entry of KeePassHttp Settings. + + + + Removing stored permissions... + + + + Abort + বাতিল + + + KeePassXC: Removed permissions + KeePassXC: অনুমতিসমূহ অপসারণ করা হয়েছে + + + Successfully removed permissions from %n entries. + + + + KeePassXC: No entry with permissions found! + KeePassXC: অনুমতিসহ কোন এন্ট্রি পাওয়া যায়নি। + + + The active database does not contain an entry with permissions. + সক্রিয় ডাটাবেজ প্রবেশের অনুমতিসহ কোর এন্ট্রি নেই। + + + + SettingsWidget + + Application Settings + + + + General + সাধারন + + + Security + + + + Access error for config file %1 + + + + + SettingsWidgetGeneral + + Basic Settings + + + + Start only a single instance of KeePassXC + + + + Remember last databases + + + + Remember last key files and security dongles + + + + Load previous databases on startup + + + + Automatically save on exit + + + + Automatically save after every change + + + + Automatically reload the database when modified externally + + + + Minimize when copying to clipboard + + + + Minimize window at application startup + + + + Use group icon on entry creation + + + + Don't mark database as modified for non-data changes (e.g., expanding groups) + + + + Hide the Details view + + + + Show a system tray icon + + + + Hide window to system tray when minimized + + + + Hide window to system tray instead of app exit + + + + Dark system tray icon + + + + Language + + + + Auto-Type + অটো-টাইপ + + + Use entry title to match windows for global Auto-Type + + + + Use entry URL to match windows for global Auto-Type + + + + Always ask before performing Auto-Type + + + + Global Auto-Type shortcut + + + + Auto-Type delay + + + + ms + Milliseconds + এমএস + + + Startup + সূচনা + + + File Management + ফাইল ব্যবস্থাপনা + + + Safely save database files (may be incompatible with Dropbox, etc) + নিরাপদে ডাটাবেস সংরক্ষণ করুন (ড্রডবক্স, এবং অন্যান্যর সাথে অসংগত হতে পারে) + + + Backup database file before saving + সংরক্ষণ করার আগে ডাটাবেস ব্যাকআপ করুন + + + Entry Management + এন্ট্রি ব্যবস্থাপনা + + + General + সাধারন + + + + SettingsWidgetSecurity + + Timeouts + সময় শেষ + + + Clear clipboard after + ক্লিপবোর্ড পরিস্কার হবে + + + sec + Seconds + সে. + + + Lock databases after inactivity of + অব্যবহৃত থাকলে ডাটাবেস লক হবে + + + Convenience + সাচ্ছন্দ্য + + + Lock databases when session is locked or lid is closed + ডাটাবেস লক হবে লিড বন্ধ করলে বা সেশন লক করলে + + + Lock databases after minimizing the window + উইন্ডো মিনিমাইজ করলে ডাটাবেস লক হবে + + + Don't require password repeat when it is visible + আবার যখন দৃশ্যমান হবে তখন পাসওয়ার্ড লাগবেনা + + + Show passwords in cleartext by default + ডিফল্টভাবে পাসওয়ার্ড সাধারন লেখায় দেখান + + + Hide passwords in the preview panel + + + + Hide entry notes by default + ডিফল্টভাবে এন্ট্রি নোট লুকান + + + Privacy + + + + Use Google as fallback for downloading website icons + গুগল ব্যবহার করুন ওয়েবসাইটের আইকন ডাউনলোড করার জন্য + + + Re-lock previously locked database after performing Auto-Type + অটো-টাইপের পরে পূনরায় লক করুন আগের লক করা ডাটাবেস + + + + SetupTotpDialog + + Setup TOTP + TOTP সেট করুন + + + Key: + কী: + + + Default RFC 6238 token settings + ডিফল্ট RFC 6238 টোকেন সেটিংসমূহ + + + Steam token settings + স্টেম টোকেন সেটিংসমূহ + + + Use custom settings + + + + Note: Change these settings only if you know what you are doing. + দ্রষ্টব্য: এই সেটিংস পরিবর্তন করুন শুধুমাত্র যদি আপনি জানেন যে আপনি কি করছেন। + + + Time step: + সময় ধাপ: + + + 8 digits + 8 (আট) ডিজিট + + + 6 digits + ৬ ডিজিট + + + Code size: + কোড সাইজ: + + + sec + Seconds + সে. + + + + TotpDialog + + Timed Password + সময়ানুসারে পাসওয়ার্ড + + + 000000 + ০০০০০০ + + + Copy + কপি + + + Expires in + মেয়াদ শেষ + + + seconds + সেকেন্ড + + + + UnlockDatabaseWidget + + Unlock database + ডাটাবেস আনলক করুন + + + + WelcomeWidget + + Start storing your passwords securely in a KeePassXC database + + + + Create new database + একটি নতুন ডাটাবেস তৈরী করুন + + + Open existing database + পূর্বের একটি ডাটাবেস খুলুন + + + Import from KeePass 1 + KeePass 1 থেকে আমদানি করুন + + + Import from CSV + CSV থেকে আমদানি করুন + + + Recent databases + সাম্প্রতিক ডাটাবেস + + + Welcome to KeePassXC %1 + KeePassXC %1 -তে আপনাকে স্বাগতম + + + + main + + Remove an entry from the database. + ডাটাবেস থেকে একটি এন্ট্রি মুছে ফেলুন + + + Path of the database. + ডাটাবেসের পাথ + + + Path of the entry to remove. + যে এন্ট্রি মুছে ফেলতে চান তার পাথ + + + KeePassXC - cross-platform password manager + KeePassXC - ক্রস প্ল্যাটফর্ম পাসওয়ার্ড ম্যানেজার + + + filenames of the password databases to open (*.kdbx) + পাসওয়ার্ড দিয়ে যে ডাটাবেস (*.kdbx) খুলতে চান তার ফাইলনেম + + + path to a custom config file + একটি কাস্টম কনফিগ ফাইল পাথ + + + key file of the database + ডাটাবেসের কী ফাইল + + + read password of the database from stdin + + + + Parent window handle + মূল উইন্ডো হ্যান্ডেল + + + \ No newline at end of file diff --git a/share/translations/keepassx_ca.ts b/share/translations/keepassx_ca.ts index 6442dc8bf..a09811133 100644 --- a/share/translations/keepassx_ca.ts +++ b/share/translations/keepassx_ca.ts @@ -73,12 +73,13 @@ Nucli: %3 %4 Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. - + Agraïments de l'equip de KeePassXC a debfx per crear el KeePassX original. Build Type: %1 - + Tipus de construcció: %1 + @@ -110,7 +111,7 @@ Seleccioneu si voleu permetre l'accés. AgentSettingsWidget Enable SSH Agent (requires restart) - + Habilita l'agent SSH (requereix reiniciar-se) @@ -129,7 +130,7 @@ Seleccioneu si voleu permetre l'accés. The Syntax of your Auto-Type statement is incorrect! - + La sintaxi de l'Auto-Type no és correcte! This Auto-Type command contains a very long delay. Do you really want to proceed? @@ -193,7 +194,7 @@ Seleccioneu si voleu permetre l'accés. BrowserAccessControlDialog KeePassXC-Browser Confirm Access - + Confirma l'accés al navegador KeePassXC Remember this decision @@ -222,11 +223,11 @@ Seleccioneu si voleu permetre l'accés. This is required for accessing your databases with KeePassXC-Browser - + Requerit per l'accés a les teues bases de dades amb el navegador KeePassXC Enable KeepassXC browser integration - + Habilita la integració de KeePassXC amb el navegador General @@ -234,7 +235,7 @@ Seleccioneu si voleu permetre l'accés. Enable integration for these browsers: - + Habilita la integració amb els següents navegadors: &Google Chrome @@ -255,7 +256,7 @@ Seleccioneu si voleu permetre l'accés. Show a &notification when credentials are requested Credentials mean login data requested via browser extension - + Mostra una &notificació quan es demanen credencials Re&quest to unlock the database if it is locked @@ -263,11 +264,11 @@ Seleccioneu si voleu permetre l'accés. Only entries with the same scheme (http://, https://, ...) are returned. - + Només es retornen les entrades amb el mateix patró (http://, https://, ...) &Match URL scheme (e.g., https://...) - + Torna les coincidències a&mb patrons URL (e.g., https://...) Only returns the best matches for a specific URL instead of all entries for the whole domain. @@ -275,25 +276,25 @@ Seleccioneu si voleu permetre l'accés. &Return only best-matching credentials - + &Retorna només les millors coincidències de les credencials Sort &matching credentials by title Credentials mean login data requested via browser extension - + Ordena les entrades coincidents per títol (ctrl + &m) Sort matching credentials by &username Credentials mean login data requested via browser extension - + Ordena les entrades coincidents per nom d'&usuari &Disconnect all browsers - + &Desconnecta tots els navegadors Forget all remembered &permissions - + Oblida tots els &permisos recordats Advanced @@ -302,12 +303,12 @@ Seleccioneu si voleu permetre l'accés. Never &ask before accessing credentials Credentials mean login data requested via browser extension - + No torn&ar a preguntar abans d'accedir a les credencials Never ask before &updating credentials Credentials mean login data requested via browser extension - + No preguntar abans d'act&ualitzar les credencials Only the selected database has to be connected with a client. @@ -316,7 +317,7 @@ Seleccioneu si voleu permetre l'accés. Searc&h in all opened databases for matching credentials Credentials mean login data requested via browser extension - + Cerca en totes les bases de dades obertes, entrades coincidents (crtl + &h) Automatically creating or updating string fields is not supported. @@ -354,19 +355,19 @@ Seleccioneu si voleu permetre l'accés. Browse... Button for opening file dialog - + Navega... <b>Warning:</b> The following options can be dangerous! - + <b>Atenció:</b> Canviar les següents opcions és perillós! Executable Files (*.exe);;All Files (*.*) - + Arxius executables (*.exe);;Tots els arxius (*.*) Executable Files (*) - + Arxius executables (*) Select custom proxy location @@ -392,7 +393,7 @@ give it a unique name to identify and accept it. Save and allow access - + Desa i autoritza l'accés KeePassXC: Overwrite existing key? @@ -401,7 +402,8 @@ give it a unique name to identify and accept it. A shared encryption key with the name "%1" already exists. Do you want to overwrite it? - + Ja existeix una clau de xifratge compartida amb el nom "%1". +Voleu sobreescriure-la? KeePassXC: Update Entry @@ -427,7 +429,7 @@ Per favor, desbloqueu la base de dades seleccionada o escolliu-ne una altra. The active database does not contain a settings entry. - + La base de dades activa no conté cap entrada de configuració. KeePassXC: No keys found @@ -435,7 +437,7 @@ Per favor, desbloqueu la base de dades seleccionada o escolliu-ne una altra. No shared encryption keys found in KeePassXC Settings. - + No s'han trobat claus de xifratge compartides en la configuració de KeePassHttp. KeePassXC: Removed keys from database @@ -443,11 +445,11 @@ Per favor, desbloqueu la base de dades seleccionada o escolliu-ne una altra. Successfully removed %n encryption key(s) from KeePassXC settings. - + Reeixidament eliminat %n encriptació clau (s) de configuració KeePassXC.Eliminada(es) correctament %n clau(s) de xifratge de la configuració de KeePassXC. Removing stored permissions… - + Eliminant permisos emmagatzemats... Abort @@ -1565,7 +1567,7 @@ Do you want to merge your changes? Browse... Button for opening file dialog - + Navega... Attachment @@ -3078,7 +3080,7 @@ This version is not meant for production use. <b>Warning:</b> The following options can be dangerous! - + <b>Atenció:</b> Canviar les següents opcions és perillós! <p>KeePassHTTP has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a>.</p> diff --git a/share/translations/keepassx_en.ts b/share/translations/keepassx_en.ts index 9c07f6e99..2666d8e91 100644 --- a/share/translations/keepassx_en.ts +++ b/share/translations/keepassx_en.ts @@ -2623,6 +2623,10 @@ This is a one-way migration. You won't be able to open the imported databas KeePassXC - Error + + Database password: + + MainWindow @@ -3646,15 +3650,27 @@ Available commands: - Agent refused this identity. + No agent running, cannot remove identity. - No agent running, cannot remove identity. + Agent does not have this identity. - Agent does not have this 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). @@ -3887,10 +3903,6 @@ Please unlock the selected database or choose another one which is unlocked.Global Auto-Type shortcut - - Auto-Type delay - - ms Milliseconds @@ -3920,6 +3932,14 @@ Please unlock the selected database or choose another one which is unlocked.General + + Auto-Type typing delay + + + + Auto-Type start delay + + SettingsWidgetSecurity @@ -4059,6 +4079,17 @@ Please unlock the selected database or choose another one which is unlocked. + + UrlFetchProgressDialog + + Download Progress + + + + Downloading %1. + + + WelcomeWidget diff --git a/share/translations/keepassx_en_GB.ts b/share/translations/keepassx_en_GB.ts new file mode 100644 index 000000000..735921bbf --- /dev/null +++ b/share/translations/keepassx_en_GB.ts @@ -0,0 +1,4096 @@ + + + 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 + + + Version %1 + + Version %1 + + + + Revision: %1 + Revision: %1 + + + Distribution: %1 + Distribution: %1 + + + Libraries: + Libraries: + + + Operating system: %1 +CPU architecture: %2 +Kernel: %3 %4 + Operating system: %1 +CPU architecture: %2 +Kernel: %3 %4 + + + Enabled extensions: + Enabled extensions: + + + 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. + + + Build Type: %1 + + Build Type: %1 + + + + + AccessControlDialog + + KeePassXC HTTP Confirm Access + KeePassXC HTTP Confirm Access + + + Remember this decision + Remember this decision + + + Allow + Allow + + + Deny + Deny + + + %1 has requested access to passwords for the following item(s). +Please select whether you want to allow access. + %1 has requested access to passwords for the following item(s). +Please select whether you want to allow access. + + + + AgentSettingsWidget + + Enable SSH Agent (requires restart) + Enable SSH Agent (requires restart) + + + + 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? + + + + AutoTypeAssociationsModel + + Window + Window + + + Sequence + Sequence + + + Default sequence + Default sequence + + + + AutoTypeMatchModel + + Group + Group + + + Title + Title + + + Username + Username + + + Sequence + Sequence + + + + AutoTypeSelectDialog + + Auto-Type - KeePassXC + Auto-Type - KeePassXC + + + Select entry to Auto-Type: + Select entry to Auto-Type: + + + + BrowserAccessControlDialog + + KeePassXC-Browser Confirm Access + KeePassXC-Browser Confirm Access + + + Remember this decision + Remember this decision + + + Allow + Allow + + + Deny + Deny + + + %1 has requested access to passwords for the following item(s). +Please select whether you want to allow access. + %1 has requested access to passwords for the following item(s). +Please select whether you want to allow access. + + + + BrowserOptionDialog + + Dialog + Dialog + + + This is required for accessing your databases with KeePassXC-Browser + This is required for accessing your databases with KeePassXC-Browser + + + Enable KeepassXC browser integration + Enable KeePassXC browser integration + + + General + General + + + Enable integration for these browsers: + Enable integration for these browsers: + + + &Google Chrome + &Google Chrome + + + &Firefox + &Firefox + + + &Chromium + &Chromium + + + &Vivaldi + &Vivaldi + + + Show a &notification when credentials are requested + Credentials mean login data requested via browser extension + Show a &notification when credentials are requested + + + Re&quest to unlock the database if it is locked + Re&quest 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 + + + Sort &matching credentials by title + Credentials mean login data requested via browser extension + Sort &matching credentials by title + + + Sort matching credentials by &username + Credentials mean login data requested via browser extension + Sort matching credentials by &username + + + &Disconnect all browsers + &Disconnect all browsers + + + Forget all remembered &permissions + Forget all remembered &permissions + + + Advanced + Advanced + + + Never &ask before accessing credentials + Credentials mean login data requested via browser extension + Never &ask before accessing credentials + + + Never ask before &updating credentials + Credentials mean login data requested via browser extension + Never ask before &updating credentials + + + Only the selected database has to be connected with a client. + Only the selected database has to be connected with a client. + + + Searc&h in all opened databases for matching credentials + Credentials mean login data requested via browser extension + Searc&h in all opened databases for matching credentials + + + 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: " + &Return advanced string fields which start with "KPH: " + + + 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 + + + + Support a proxy application between KeePassXC and browser extension. + Support a proxy application between KeePassXC and browser extension. + + + Use a &proxy application between KeePassXC and browser extension + Use a &proxy application between KeePassXC and browser extension + + + 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 + Use a &custom proxy location + + + Browse... + Button for opening file dialog + Browse... + + + <b>Warning:</b> The following options can be dangerous! + <b>Warning:</b> The following options can be dangerous! + + + Executable Files (*.exe);;All Files (*.*) + + + + Executable Files (*) + Executable Files (*) + + + Select custom proxy location + Select custom proxy location + + + We're sorry, but KeePassXC-Browser is not supported for Snap releases at the moment. + We're sorry, but KeePassXC-Browser is not supported for Snap releases at the moment. + + + + BrowserService + + KeePassXC: New key association request + KeePassXC: New key association request + + + You have received an association request for the above key. + +If you would like to allow it access to your KeePassXC database, +give it a unique name to identify and accept it. + You have received an association request for the above key. + +If you would like to allow it access to your KeePassXC database, +give it a unique name to identify and accept it. + + + Save and allow access + Save and allow access + + + KeePassXC: Overwrite existing key? + KeePassXC: Overwrite existing key? + + + A shared encryption key with the name "%1" already exists. +Do you want to overwrite it? + A shared encryption key with the name "%1" already exists. +Do you want to overwrite it? + + + KeePassXC: Update Entry + KeePassXC: Update Entry + + + Do you want to update the information in %1 - %2? + Do you want to update the information in %1 - %2? + + + KeePassXC: Database locked! + KeePassXC: Database locked! + + + The active database is locked! +Please unlock the selected database or choose another one which is unlocked. + The active database is locked! +Please unlock the selected database or choose another one which is unlocked. + + + KeePassXC: Settings not available! + KeePassXC: Settings not available! + + + The active database does not contain a settings entry. + The active database does not contain a settings entry. + + + KeePassXC: No keys found + KeePassXC: No keys found + + + 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. + + + + Removing stored permissions… + Removing stored permissions… + + + Abort + Abort + + + KeePassXC: Removed permissions + KeePassXC: Removed permissions + + + Successfully removed permissions from %n entry(s). + + + + 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. + + + + ChangeMasterKeyWidget + + Password + Password + + + Enter password: + Enter password: + + + Repeat password: + Repeat password: + + + &Key file + + + + Browse + Browser + + + Create + Create + + + Cha&llenge Response + Cha&llenge Response + + + Refresh + Refresh + + + Key files + Key files + + + All files + All files + + + Create Key File... + + + + Unable to create Key File : + + + + Select a key file + Select a key file + + + Empty password + Empty password + + + Do you really want to use an empty string as password? + + + + Different passwords supplied. + Different passwords supplied. + + + Failed to set %1 as the Key file: +%2 + + + + 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. + + + + Changing master key failed: no YubiKey inserted. + Changing master key failed: no YubiKey inserted. + + + + 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 + + + + filename + + + + size, rows, columns + + + + Encoding + + + + Codec + + + + Text is qualified by + + + + Fields are separated by + + + + Comments start with + + + + First record has field names + + + + Number of headers line to discard + + + + Consider '\' an escape character + Consider '\' an escape character + + + Preview + Preview + + + Column layout + + + + Not present in CSV file + + + + Empty fieldname + + + + column + + + + Imported from CSV file + + + + Original data: + + + + Error(s) detected in CSV file ! + + + + more messages skipped] + + + + Error + Error + + + CSV import: writer has errors: + + + + + + CsvImportWizard + + Error + Error + + + Unable to calculate master key + Unable to calculate master key + + + + CsvParserModel + + %n byte(s), + + + + %n row(s), + + + + %n column(s) + + + + + DatabaseOpenWidget + + Enter master key + Enter master key + + + Key File: + + + + Password: + + + + Browse + Browser + + + Refresh + Refresh + + + Challenge Response: + Challenge Response: + + + Unable to open the database. + Unable to open the database. + + + Can't open key file + Can't open key file + + + 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. + + + + 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 + + + + DatabaseRepairWidget + + Repair database + Repair database + + + Error + Error + + + Can't open key file + Can't open key file + + + Unable to open the database. + Unable to open the database. + + + Database opened fine. Nothing to do. + Database opened fine. Nothing to do. + + + Success + Success + + + The database has been successfully repaired +You can now save it. + + + + Unable to repair the database. + Unable to repair the database. + + + + DatabaseSettingsWidget + + General + General + + + Encryption + Encryption + + + 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! + + + + 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! + + + + 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) + + + + thread(s) + Threads for parallel execution (KDF settings) + + + + + DatabaseSettingsWidgetEncryption + + Encryption Algorithm: + + + + AES: 256 Bit (default) + + + + Twofish: 256 Bit + + + + Key Derivation Function: + + + + Transform rounds: + + + + Benchmark 1-second delay + + + + Memory Usage: + + + + Parallelism: + + + + + DatabaseSettingsWidgetGeneral + + Database Meta Data + + + + Database name: + Database name: + + + Database description: + Database description: + + + Default username: + Default username: + + + History Settings + + + + Max. history items: + + + + Max. history size: + + + + MiB + + + + Use recycle bin + Use recycle bin + + + Additional Database Settings + Additional Database Settings + + + Enable &compression (recommended) + Enable &compression (recommended) + + + + DatabaseTabWidget + + Root + Root group + Root + + + KeePass 2 Database + KeePass 2 Database + + + All files + All files + + + Open database + Open database + + + File not found! + File not found! + + + Unable to open the database. + Unable to open the database. + + + File opened in read only mode. + + + + Open CSV file + Open CSV file + + + CSV file + + + + All files (*) + + + + Merge database + Merge database + + + Open KeePass 1 database + Open KeePass 1 database + + + KeePass 1 database + KeePass 1 database + + + Close? + + + + "%1" is in edit mode. +Discard changes and close anyway? + "%1" is in edit mode. +Discard changes and close anyway? + + + Save changes? + Save changes? + + + "%1" was modified. +Save changes? + "%1" was modified. +Save changes? + + + Writing the database failed. + Writing the database failed. + + + Passwords + + + + Save database as + + + + Export database to CSV file + Export database to CSV file + + + Writing the CSV file failed. + Writing the CSV file failed. + + + New database + New database + + + locked + + + + Lock database + Lock database + + + Can't lock the database as you are currently editing it. +Please press cancel to finish your changes or discard them. + Can't lock the database as you are currently editing it. +Please press cancel to finish your changes or discard them. + + + This database has been modified. +Do you want to save the database before locking it? +Otherwise your changes are lost. + + + + 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? + + + + DatabaseWidget + + Searching... + Searching... + + + Change master key + Change master key + + + Delete entry? + Delete entry? + + + Do you really want to delete the entry "%1" for good? + Do you really want to delete the entry "%1" for good? + + + Delete entries? + Delete entries? + + + Do you really want to delete %1 entries for good? + Do you really want to delete %1 entries for good? + + + Move entry to recycle bin? + Move entry to recycle bin? + + + Do you really want to move entry "%1" to the recycle bin? + Do you really want to move entry "%1" to the recycle bin? + + + Move entries to recycle bin? + Move entries to recycle bin? + + + Do you really want to move %n entry(s) to the recycle bin? + + + + Execute command? + Execute command? + + + Do you really want to execute the following command?<br><br>%1<br> + + + + Remember my choice + Remember my choice + + + Delete group? + Delete group? + + + Do you really want to delete the group "%1" for good? + Do you really want to delete the group "%1" for good? + + + Unable to calculate master key + Unable to calculate master key + + + No current database. + No current database. + + + No source database, nothing to do. + No source database, nothing to do. + + + Search Results (%1) + + + + 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? + + + Could not open the new database file while attempting to autoreload this database. + Could not open the new database file while attempting to autoreload this database. + + + 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? + + + + DetailsWidget + + Generate TOTP Token + + + + Close + Close + + + General + General + + + Password + Password + + + URL + URL + + + Expiration + + + + Username + Username + + + Autotype + + + + Searching + + + + Attributes + + + + Attachments + Attachments + + + Notes + Notes + + + Window + Window + + + Sequence + Sequence + + + Search + Search + + + Clear + Clear + + + Never + Never + + + [PROTECTED] + + + + Disabled + + + + Enabled + + + + + EditEntryWidget + + Entry + + + + Advanced + Advanced + + + Icon + Icon + + + Auto-Type + Auto-Type + + + Properties + Properties + + + History + + + + SSH Agent + SSH Agent + + + n/a + + + + (encrypted) + + + + Select private key + Select private key + + + 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 + + + Entry history + Entry history + + + Add entry + Add entry + + + Edit entry + Edit entry + + + Different passwords supplied. + Different passwords supplied. + + + New attribute + New attribute + + + Confirm Remove + + + + Are you sure you want to remove this attribute? + Are you sure you want to remove this attribute? + + + [PROTECTED] + + + + Press reveal to view or edit + Press reveal to view or edit + + + Tomorrow + + + + %n week(s) + + + + %n month(s) + + + + 1 year + 1 year + + + Apply generated password? + Apply generated password? + + + Do you want to apply the generated password to this entry? + Do you want to apply the generated password to this entry? + + + Entry updated successfully. + Entry updated successfully. + + + + EditEntryWidgetAdvanced + + Additional attributes + Additional attributes + + + Add + Add + + + Remove + Remove + + + Edit Name + + + + Protect + + + + Reveal + + + + Attachments + Attachments + + + Foreground Color: + + + + Background Color: + + + + + EditEntryWidgetAutoType + + Enable Auto-Type for this entry + + + + Inherit default Auto-Type sequence from the &group + + + + &Use custom Auto-Type sequence: + + + + Window Associations + + + + + + + + + - + + + + Window title: + + + + Use a specific sequence for this association: + + + + + EditEntryWidgetHistory + + Show + Show + + + Restore + Restore + + + Delete + Delete + + + Delete all + Delete all + + + + EditEntryWidgetMain + + URL: + + + + Password: + + + + Repeat: + + + + Title: + + + + Notes + Notes + + + Presets + + + + Toggle the checkbox to reveal the notes section. + Toggle the checkbox to reveal the notes section. + + + Username: + + + + Expires + Expires + + + + EditEntryWidgetSSHAgent + + Form + + + + Remove key from agent after + + + + seconds + + + + 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 + + + + Decrypt + + + + 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 + + + + EditGroupWidget + + Group + Group + + + Icon + Icon + + + Properties + Properties + + + Add group + Add group + + + Edit group + Edit group + + + Enable + Enable + + + Disable + Disable + + + Inherit from parent group (%1) + + + + + EditGroupWidgetMain + + Name + Name + + + Notes + Notes + + + Expires + Expires + + + Search + Search + + + Auto-Type + Auto-Type + + + &Use default Auto-Type sequence of parent group + &Use default Auto-Type sequence of parent group + + + Set default Auto-Type se&quence + Set default Auto-Type se&quence + + + + EditWidgetIcons + + &Use default icon + &Use default icon + + + Use custo&m icon + Use custo&m icon + + + Add custom icon + Add custom icon + + + Delete custom icon + Delete custom icon + + + Download favicon + Download favicon + + + Unable to fetch favicon. + Unable to fetch favicon. + + + Hint: You can enable Google as a fallback under Tools>Settings>Security + + + + Images + Images + + + All files + All files + + + Select Image + Select Image + + + Can't read icon + Can't read icon + + + Custom icon already exists + Custom icon already exists + + + Confirm Delete + + + + This icon is used by %1 entries, and will be replaced by the default icon. Are you sure you want to delete it? + This icon is used by %1 entries, and will be replaced by the default icon. Are you sure you want to delete it? + + + + EditWidgetProperties + + Created: + + + + Modified: + + + + Accessed: + + + + Uuid: + + + + 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 + + + + Value + + + + + Entry + + - Clone + Suffix added to cloned entries + + + + + EntryAttachmentsModel + + Name + Name + + + Size + + + + + EntryAttachmentsWidget + + Form + + + + Add + Add + + + Remove + Remove + + + Open + Open + + + Save + Save + + + Select files + Select files + + + Are you sure you want to remove %n attachment(s)? + + + + Confirm Remove + + + + 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 + + + Unable to open files: +%1 + Unable to open files: +%1 + + + + EntryAttributesModel + + Name + Name + + + + EntryHistoryModel + + Last modified + + + + Title + Title + + + Username + Username + + + URL + URL + + + + EntryModel + + Ref: + Reference abbreviation + + + + Group + Group + + + Title + Title + + + Username + Username + + + URL + URL + + + Never + Never + + + Password + Password + + + Notes + Notes + + + Expires + Expires + + + Created + + + + Modified + + + + Accessed + + + + Attachments + Attachments + + + + EntryView + + Customize View + + + + Hide Usernames + + + + Hide Passwords + + + + Fit to window + Fit to window + + + Fit to contents + + + + Reset to defaults + + + + Attachments (icon) + + + + + Group + + Recycle Bin + Recycle Bin + + + + HostInstaller + + KeePassXC: Cannot save file! + + + + Cannot save the native messaging script file. + + + + + HttpPasswordGeneratorWidget + + Length: + + + + Character Types + Character Types + + + Upper Case Letters + + + + A-Z + + + + Lower Case Letters + + + + a-z + + + + Numbers + + + + 0-9 + + + + Special Characters + + + + /*_& ... + + + + Exclude look-alike characters + Exclude look-alike characters + + + Ensure that the password contains characters from every group + Ensure that the password contains characters from every group + + + Extended ASCII + Extended ASCII + + + + KMessageWidget + + &Close + &Close + + + Close message + Close message + + + + Kdbx3Reader + + Unable to calculate master key + Unable to calculate master key + + + Unable to issue challenge-response. + Unable to issue challenge-response. + + + Wrong key or database file is corrupt. + Wrong key or database file is corrupt. + + + + Kdbx3Writer + + Unable to issue challenge-response. + Unable to issue challenge-response. + + + Unable to calculate master key + Unable to calculate master key + + + + Kdbx4Reader + + missing database headers + + + + Unable to calculate master key + Unable to calculate master key + + + Invalid header checksum size + + + + Header SHA256 mismatch + + + + Wrong key or database file is corrupt. (HMAC mismatch) + Wrong key or database file is corrupt. (HMAC mismatch) + + + Unknown cipher + Unknown cipher + + + 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 + + + + Unsupported key derivation function (KDF) or invalid parameters + + + + Legacy header fields found in KDBX4 file. + + + + Invalid inner header id size + + + + Invalid inner header field length + + + + Invalid inner header binary size + + + + Unsupported KeePass variant map version. + Translation: variant map = data structure for storing meta data + + + + Invalid variant map entry name length + Translation: variant map = data structure for storing meta data + + + + Invalid variant map entry name data + Translation: variant map = data structure for storing meta data + + + + Invalid variant map entry value length + Translation: variant map = data structure for storing meta data + + + + Invalid variant map entry value data + Translation comment: variant map = data structure for storing meta data + + + + Invalid variant map Bool entry value length + Translation: variant map = data structure for storing meta data + + + + Invalid variant map Int32 entry value length + Translation: variant map = data structure for storing meta data + + + + Invalid variant map UInt32 entry value length + Translation: variant map = data structure for storing meta data + + + + Invalid variant map Int64 entry value length + Translation: variant map = data structure for storing meta data + + + + Invalid variant map UInt64 entry value length + Translation: variant map = data structure for storing meta data + + + + Invalid variant map entry type + Translation: variant map = data structure for storing meta data + + + + Invalid variant map field type size + Translation: variant map = data structure for storing meta data + + + + + Kdbx4Writer + + Invalid symmetric cipher algorithm. + + + + Invalid symmetric cipher IV size. + IV = Initialization Vector for symmetric cipher + + + + Unable to calculate master key + Unable to calculate master key + + + Failed to serialize KDF parameters variant map + Translation comment: variant map = data structure for storing meta data + + + + + KdbxReader + + Invalid cipher uuid length + + + + Unsupported cipher + + + + Invalid compression flags length + + + + Unsupported compression algorithm + + + + Invalid master seed size + + + + Invalid transform seed size + + + + Invalid transform rounds size + + + + Invalid start bytes size + + + + Invalid random stream id size + + + + Invalid inner random stream cipher + + + + 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. + + + + KdbxXmlReader + + XML parsing failure: %1 + XML parsing failure: %1 + + + No root group + No root group + + + Missing icon uuid or data + + + + Missing custom data key or value + + + + Multiple group elements + + + + Null group uuid + + + + Invalid group icon number + + + + 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 + + + + Unable to decrypt entry string + Unable to decrypt entry string + + + Duplicate custom attribute found + Duplicate custom attribute found + + + Entry string key or value missing + + + + Duplicate attachment found + Duplicate attachment found + + + Entry binary key or value missing + + + + Auto-type association window or sequence missing + + + + Invalid bool value + + + + Invalid date time value + + + + Invalid color value + + + + Invalid color rgb part + + + + Invalid number value + + + + Invalid uuid value + + + + Unable to decompress binary + Translator meant is a binary data inside an entry + + + + + KeePass1OpenWidget + + Import KeePass1 database + + + + Unable to open the database. + Unable to open the database. + + + + KeePass1Reader + + Unable to read keyfile. + + + + 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 transform seed size + + + + Invalid number of transform rounds + + + + Unable to construct group tree + Unable to construct group tree + + + Root + Root + + + Unable to calculate master key + Unable to calculate master key + + + Wrong key or database file is corrupt. + Wrong key or database file is corrupt. + + + Key transformation failed + Key transformation failed + + + Invalid group field type number + + + + Invalid group field size + + + + Read group field data doesn't match size + + + + Incorrect group id field size + + + + Incorrect group creation time field size + + + + Incorrect group modification time field size + + + + Incorrect group access time field size + + + + Incorrect group expiry time field size + + + + Incorrect group icon field size + + + + Incorrect group level field size + + + + Invalid group field type + + + + Missing group id or level + + + + Missing entry field type number + + + + Invalid entry field size + + + + Read entry field data doesn't match size + + + + Invalid entry uuid field size + + + + Invalid entry group id field size + + + + Invalid entry icon field size + + + + Invalid entry creation time field size + + + + Invalid entry modification time field size + + + + Invalid entry expiry time field size + + + + Invalid entry field type + + + + + KeePass2 + + AES: 256-bit + + + + Twofish: 256-bit + + + + ChaCha20: 256-bit + + + + AES-KDF (KDBX 4) + + + + AES-KDF (KDBX 3.1) + + + + Argon2 (KDBX 4 – recommended) + + + + + Main + + 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. + + + 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 + + + + + MainWindow + + &Database + &Database + + + &Recent databases + &Recent databases + + + Import + Import + + + &Help + &Help + + + E&ntries + E&ntries + + + Copy att&ribute to clipboard + Copy att&ribute to clipboard + + + Time-based one-time password + Time-based one-time password + + + &Groups + &Groups + + + &Tools + &Tools + + + &Quit + &Quit + + + &About + &About + + + &Open database... + &Open database... + + + &Save database + &Save database + + + &Close database + &Close database + + + &New database + &New database + + + Merge from KeePassX database + + + + &Add new entry + &Add new entry + + + &View/Edit entry + + + + &Delete entry + &Delete entry + + + &Add new group + &Add new group + + + &Edit group + &Edit group + + + &Delete group + + + + Sa&ve database as... + Sa&ve database as... + + + Change &master key... + Change &master key... + + + &Database settings + &Database settings + + + Database settings + Database settings + + + &Clone entry + &Clone entry + + + &Find + &Find + + + Copy &username + Copy &username + + + Copy username to clipboard + Copy username to clipboard + + + Cop&y password + Cop&y password + + + Copy password to clipboard + Copy password to clipboard + + + &Settings + &Settings + + + Password Generator + + + + &Perform Auto-Type + + + + &Open URL + &Open URL + + + &Lock databases + &Lock databases + + + &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 + + + &Export to CSV file... + &Export to CSV file... + + + Import KeePass 1 database... + + + + Import CSV file... + Import CSV file... + + + Re&pair database... + Re&pair database... + + + Show TOTP + Show TOTP + + + Set up TOTP... + Set up TOTP... + + + 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 + + + <p>It looks like you are using KeePassHTTP for browser integration. This feature has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a class="link" href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a> (warning %1 of 3).</p> + + + + read-only + + + + Settings + Settings + + + Toggle window + Toggle window + + + Quit KeePassXC + Quit KeePassXC + + + KeePass 2 Database + KeePass 2 Database + + + All files + All files + + + Open database + Open database + + + Save repaired database + Save repaired database + + + Writing the database failed. + Writing the database failed. + + + 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. + + + + + 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 + + + + OptionDialog + + Dialog + Dialog + + + This is required for accessing your databases from ChromeIPass or PassIFox + This is required for accessing your databases from ChromeIPass or PassIFox + + + Enable KeePassHTTP server + Enable KeePassHTTP server + + + General + General + + + Sh&ow a notification when credentials are requested + Credentials mean login data requested via browser extension + Sh&ow a notification when credentials are requested + + + 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 entries + &Return only best matching entries + + + Re&quest to unlock the database if it is locked + Re&quest to unlock the database if it is locked + + + Only entries with the same scheme (http://, https://, ftp://, ...) are returned. + + + + &Match URL schemes + &Match URL schemes + + + Sort matching entries by &username + Sort matching entries by &username + + + Sort &matching entries by title + Sort &matching entries by title + + + R&emove all shared encryption keys from active database + R&emove all shared encryption keys from active database + + + Re&move all stored permissions from entries in active database + Re&move all stored permissions from entries in active database + + + Password Generator + + + + Advanced + Advanced + + + Always allow &access to entries + Always allow &access to entries + + + Always allow &updating entries + + + + Only the selected database has to be connected with a client. + Only the selected database has to be connected with a client. + + + Searc&h in all opened databases for matching entries + Searc&h in all opened databases for matching entries + + + 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: " + &Return advanced string fields which start with "KPH: " + + + HTTP Port: + + + + Default port: 19455 + Default port: 19455 + + + KeePassXC will listen to this port on 127.0.0.1 + + + + <b>Warning:</b> The following options can be dangerous! + <b>Warning:</b> The following options can be dangerous! + + + <p>KeePassHTTP has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a>.</p> + + + + Cannot bind to privileged ports + + + + Cannot bind to privileged ports below 1024! +Using default port 19455. + + + + + PasswordGeneratorWidget + + %p% + + + + Password: + + + + strength + Password strength + + + + entropy + + + + Password + Password + + + Character Types + Character Types + + + Upper Case Letters + + + + Lower Case Letters + + + + Numbers + + + + Special Characters + + + + Extended ASCII + Extended ASCII + + + Exclude look-alike characters + Exclude look-alike characters + + + Pick characters from every group + + + + &Length: + + + + Passphrase + Passphrase + + + Wordlist: + + + + Word Count: + + + + Word Separator: + + + + Generate + Generate + + + Copy + Copy + + + Accept + Accept + + + Close + Close + + + Apply + Apply + + + Entropy: %1 bit + + + + Password Quality: %1 + + + + Poor + Password quality + + + + Weak + Password quality + + + + Good + Password quality + + + + Excellent + Password quality + + + + + 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 + + + Timeout or cannot connect to KeePassXC + + + + Action cancelled or denied + Action cancelled or denied + + + Cannot encrypt message or public key not found. Is Native Messaging enabled in KeePassXC? + + + + KeePassXC association failed, try again + + + + Key change was not successful + Key change was not successful + + + Encryption key is not recognized + Encryption key is not recognised + + + No saved databases found + No saved databases found + + + Incorrect action + + + + Empty message received + Empty message received + + + No URL provided + No URL provided + + + No logins found + No logins found + + + 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 for the generated password. + + + + length + + + + Path of the entry to add. + Path of the entry to add. + + + Copy an entry's password to the clipboard. + Copy an entry's password to the clipboard. + + + 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. + + + Extract and print the content of a database. + Extract and print the content of a database. + + + Path of the database to extract. + Path of the database to extract. + + + Insert password to unlock %1: + + + + Failed to load key file %1 : %2 + + + + 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 into. + Path of the database to merge into. + + + 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 + + + + file empty ! + + + + + malformed string + + + + missing closing quote + + + + Group + Group + + + Title + Title + + + Username + Username + + + Password + Password + + + Notes + Notes + + + Last Modified + + + + Created + + + + Legacy Browser Integration + Legacy Browser Integration + + + Browser Integration + Browser Integration + + + YubiKey[%1] Challenge Response - Slot %2 - %3 + + + + Press + + + + Passive + + + + 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. + + + count + + + + Wordlist for the diceware generator. +[Default: EFF English] + + + + Generate a new random password. + Generate a new random password. + + + Length of the generated password. + Length of the generated password. + + + Use lowercase characters in the generated password. + Use lowercase characters in the generated password. + + + Use uppercase characters in the generated password. + + + + Use numbers in the generated password. + Use numbers in the generated password. + + + Use special characters in the generated password. + Use special characters in the generated password. + + + Use extended ASCII in the generated password. + Use extended ASCII in the generated password. + + + + 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: + + + + + SearchWidget + + Search... + Search... + + + Search + Search + + + Clear + Clear + + + Case Sensitive + + + + Limit search to selected group + Limit search to selected group + + + + Service + + KeePassXC: New key association request + KeePassXC: New key association request + + + You have received an association request for the above key. +If you would like to allow it access to your KeePassXC database +give it a unique name to identify and accept it. + + + + KeePassXC: Overwrite existing key? + KeePassXC: Overwrite existing key? + + + A shared encryption-key with the name "%1" already exists. +Do you want to overwrite it? + A shared encryption-key with the name "%1" already exists. +Do you want to overwrite it? + + + KeePassXC: Update Entry + KeePassXC: Update Entry + + + Do you want to update the information in %1 - %2? + Do you want to update the information in %1 - %2? + + + KeePassXC: Database locked! + KeePassXC: Database locked! + + + The active database is locked! +Please unlock the selected database or choose another one which is unlocked. + The active database is locked! +Please unlock the selected database or choose another one which is unlocked. + + + KeePassXC: Removed keys from database + KeePassXC: Removed keys from database + + + Successfully removed %n encryption-key(s) from KeePassX/Http Settings. + + + + KeePassXC: No keys found + KeePassXC: No keys found + + + No shared encryption-keys found in KeePassHttp Settings. + + + + KeePassXC: Settings not available! + KeePassXC: Settings not available! + + + The active database does not contain an entry of KeePassHttp Settings. + + + + Removing stored permissions... + Removing stored permissions... + + + Abort + Abort + + + KeePassXC: Removed permissions + KeePassXC: Removed permissions + + + 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. + + + + SettingsWidget + + Application Settings + Application Settings + + + General + General + + + Security + Security + + + Access error for config file %1 + Access error for config file %1 + + + + SettingsWidgetGeneral + + Basic Settings + Basic Settings + + + Start only a single instance of KeePassXC + Start only a single instance of KeePassXC + + + Remember last databases + Remember last databases + + + Remember last key files and security dongles + + + + Load previous databases on startup + Load previous databases on startup + + + Automatically save on exit + Automatically save on exit + + + Automatically save after every change + Automatically save after every change + + + Automatically reload the database when modified externally + Automatically reload the database when modified externally + + + Minimize when copying to clipboard + Minimise when copying to clipboard + + + Minimize window at application startup + Minimise window at application startup + + + Use group icon on entry creation + + + + Don't mark database as modified for non-data changes (e.g., expanding groups) + Don't mark database as modified for non-data changes (e.g., expanding groups) + + + Hide the Details view + + + + Show a system tray icon + + + + Hide window to system tray when minimized + Hide window to system tray when minimised + + + Hide window to system tray instead of app exit + + + + Dark system tray icon + Dark system tray icon + + + Language + Language + + + Auto-Type + Auto-Type + + + Use entry title to match windows for global Auto-Type + + + + Use entry URL to match windows for global Auto-Type + + + + Always ask before performing Auto-Type + + + + Global Auto-Type shortcut + + + + Auto-Type delay + + + + ms + Milliseconds + + + + Startup + Startup + + + File Management + File Management + + + Safely save database files (may be incompatible with Dropbox, etc) + Safely save database files (may be incompatible with Dropbox, etc) + + + Backup database file before saving + + + + Entry Management + + + + General + General + + + + SettingsWidgetSecurity + + Timeouts + + + + Clear clipboard after + + + + sec + Seconds + + + + Lock databases after inactivity of + + + + Convenience + + + + Lock databases when session is locked or lid is closed + Lock databases when session is locked or lid is closed + + + Lock databases after minimizing the window + Lock databases after minimising the window + + + Don't require password repeat when it is visible + Don't require password repeat when it is visible + + + Show passwords in cleartext by default + Show passwords in cleartext by default + + + Hide passwords in the preview panel + Hide passwords in the preview panel + + + Hide entry notes by default + Hide entry notes by default + + + Privacy + Privacy + + + Use Google as fallback for downloading website icons + Use Google as fallback for downloading website icons + + + Re-lock previously locked database after performing Auto-Type + + + + + SetupTotpDialog + + Setup TOTP + + + + Key: + + + + Default RFC 6238 token settings + Default RFC 6238 token settings + + + Steam token settings + Steam token settings + + + Use custom settings + Use custom settings + + + Note: Change these settings only if you know what you are doing. + + + + Time step: + + + + 8 digits + + + + 6 digits + + + + Code size: + + + + sec + Seconds + + + + + TotpDialog + + Timed Password + + + + 000000 + + + + Copy + Copy + + + Expires in + + + + seconds + + + + + UnlockDatabaseWidget + + Unlock database + Unlock database + + + + 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 + + + + Welcome to KeePassXC %1 + Welcome to KeePassXC %1 + + + + main + + Remove an entry from the database. + Remove an entry from the database. + + + Path of the database. + Path of the database. + + + Path of the entry to remove. + Path of the entry to remove. + + + 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 + + + + \ No newline at end of file diff --git a/share/translations/keepassx_es.ts b/share/translations/keepassx_es.ts index 1c293490e..092eada9f 100644 --- a/share/translations/keepassx_es.ts +++ b/share/translations/keepassx_es.ts @@ -449,7 +449,7 @@ Por favor desbloquee la base de datos seleccionada o elija otra que esté desblo Successfully removed %n encryption key(s) from KeePassXC settings. - + Quitado con éxito %n llaves de cifrado de configuración KeePassXC.Quitado con éxito %n llaves de cifrado de configuración KeePassXC. Removing stored permissions… @@ -465,7 +465,7 @@ Por favor desbloquee la base de datos seleccionada o elija otra que esté desblo Successfully removed permissions from %n entry(s). - + Con éxito quitar permisos de %n ello.Removidos con éxito permisos de %n entrada(s). KeePassXC: No entry with permissions found! @@ -694,15 +694,15 @@ Considere generar un nuevo archivo llave. CsvParserModel %n byte(s), - + %n byte(s), %n byte(s), %n row(s), - + filas de %n, %n fila(s), %n column(s) - + %n columnas%n columna(s) @@ -862,12 +862,12 @@ Si conserva este número, ¡su base de datos puede ser muy fácil de descifrar!< MiB Abbreviation for Mebibytes (KDF settings) - + MiB MiB thread(s) Threads for parallel execution (KDF settings) - + o de los hiloshilo(s) @@ -894,7 +894,7 @@ Si conserva este número, ¡su base de datos puede ser muy fácil de descifrar!< Benchmark 1-second delay - + Medición de retraso de un segundo Memory Usage: @@ -1747,7 +1747,7 @@ Do you want to merge your changes? Plugin Data - + Datos del complemento Remove @@ -1755,12 +1755,13 @@ Do you want to merge your changes? Delete plugin data? - + Eliminar los datos del complemento? Do you really want to delete the selected plugin data? This may cause the affected plugins to malfunction. - + ¿Realmente desea eliminar los datos del complemento seleccionado? +Esto puede causar un mal funcionamiento de los complementos afectados. Key @@ -1845,22 +1846,25 @@ This may cause the affected plugins to malfunction. Unable to save attachments: %1 - + No se puede guardar los datos adjuntos: +%1 Unable to open attachment: %1 - + No se puede abrir el archivo adjunto: +%1 Unable to open attachments: %1 - + No se pueden abrir los datos adjuntos:%1 Unable to open files: %1 - + No se pueden abrir los archivos: +%1 @@ -1938,7 +1942,7 @@ This may cause the affected plugins to malfunction. Accessed - + Accedido Attachments @@ -2171,54 +2175,54 @@ This may cause the affected plugins to malfunction. Invalid variant map entry value data Translation comment: variant map = data structure for storing meta data - + Datos del valor de la entrada de mapa de variante inválida Invalid variant map Bool entry value length Translation: variant map = data structure for storing meta data - + Longitud del valor de la entrada del mapa booleano de variante inválida Invalid variant map Int32 entry value length Translation: variant map = data structure for storing meta data - + Largo inválido en valor de entrada Int32 de mapeo de variante Invalid variant map UInt32 entry value length Translation: variant map = data structure for storing meta data - + Largo inválido en valor de entrada UInt32 de mapeo de variante Invalid variant map Int64 entry value length Translation: variant map = data structure for storing meta data - + Largo inválido en valor de entrada Int64 de mapeo de variante Invalid variant map UInt64 entry value length Translation: variant map = data structure for storing meta data - + Largo inválido en valor de entrada UInt64 de mapeo de variante Invalid variant map entry type Translation: variant map = data structure for storing meta data - + Tipo de entrada inválida de mapeo devariante Invalid variant map field type size Translation: variant map = data structure for storing meta data - + Mapei de variante inválido en campo de tipo tamaño Kdbx4Writer Invalid symmetric cipher algorithm. - + Algoritmo de cifrado simétrico inválido Invalid symmetric cipher IV size. IV = Initialization Vector for symmetric cipher - + Tamaño de IV inválido en cifrado simétrico Unable to calculate master key @@ -2227,50 +2231,50 @@ This may cause the affected plugins to malfunction. Failed to serialize KDF parameters variant map Translation comment: variant map = data structure for storing meta data - + Falló serialización de parámetros KDF en mapeo de variante KdbxReader Invalid cipher uuid length - + Largo uuid de cifrado inválido Unsupported cipher - + Cifrado no compatible Invalid compression flags length - + Largo de banderas de compresión inválido Unsupported compression algorithm - + Algoritmo de compresión no soportado Invalid master seed size - + Tamaño de semilla maestra inválido Invalid transform seed size - + Tamaño de semilla de transformación inválido Invalid transform rounds size - + Tamaño de rondas de transformación inválido Invalid start bytes size - + Tamaño de bytes de inicio no válido Invalid random stream id size - + Tamaño de id de flujo inváldo Invalid inner random stream cipher - + Flujo de cifrado interno inválido Not a KeePass database. @@ -2295,124 +2299,124 @@ Esta migración es en único sentido. No podrá abrir la base de datos importada KdbxXmlReader XML parsing failure: %1 - + Error de parsing XML: %1 No root group - + Ningún grupo de raíz Missing icon uuid or data - + Datos o uuid del ícono faltantes Missing custom data key or value - + Falta la clave de datos o valor Multiple group elements - + Múltiples elementos de grupo Null group uuid - + Uuid de grupo nulo Invalid group icon number - + Número de icono de grupo no válido Invalid EnableAutoType value - + Valor no válido de EnableAutoType Invalid EnableSearching value - + Valor no válido de EnableSearching No group uuid found - + No uuid de grupo encontrado Null DeleteObject uuid - + Uuid de DeleteObject nulo Missing DeletedObject uuid or time - + Falta uuid de DeletedObject o tiempo Null entry uuid - + Uuid de entrada nulo Invalid entry icon number - + Número de ícono de entrada inválido History element in history entry - + Elemento de la historia en la entrada de la historia No entry uuid found - + No uuid de entrada encontrado History element with different uuid - + Elemento del historial con uuid diferente Unable to decrypt entry string - + No se puede descifrar la cadena de entrada Duplicate custom attribute found - + Atributo personalizado duplicado encontrado Entry string key or value missing - + Falta clave de entrada o valor Duplicate attachment found - + Encontrado dato adjunto duplicado Entry binary key or value missing - + Falta clave de entrada binaria o valor Auto-type association window or sequence missing - + Falta de secuencia o ventana de Asociación de auto-tipeado Invalid bool value - + Valor booleano inválido Invalid date time value - + Valor de tiempo o fecha no válido Invalid color value - + Valor del color no válido Invalid color rgb part - + Parte de color rgb no válido Invalid number value - + Valor de número no válido Invalid uuid value - + Valor uuid no válido Unable to decompress binary Translator meant is a binary data inside an entry - + No se puede descomprimir binario @@ -2447,27 +2451,27 @@ Esta migración es en único sentido. No podrá abrir la base de datos importada Unable to read encryption IV IV = Initialization Vector for symmetric cipher - + No se puede leer el cifrado IV Invalid number of groups - + Número de grupos no válido Invalid number of entries - + Número de entradas no válido Invalid content hash size - + Tamaño del hash de contenido no válido Invalid transform seed size - + Tamaño de semilla de transformación inválido Invalid number of transform rounds - + Número de turnos de transformación no válido  Unable to construct group tree @@ -2491,118 +2495,118 @@ Esta migración es en único sentido. No podrá abrir la base de datos importada Invalid group field type number - + Número de tipo de campo de grupo inválido Invalid group field size - + Tamaño inválido para el campo grupo Read group field data doesn't match size - + Datos de campo de grupo leídos no coinciden en tamaño Incorrect group id field size - + Tamaño de campo de id de grupo incorrecto Incorrect group creation time field size - + Tamaño de campo de tiempo de creación de grupo incorrecto Incorrect group modification time field size - + Tamaño de campo de hora de modificación de grupo incorrecto Incorrect group access time field size - + Tamaño de campo de tiempo de acceso de grupo incorrecto Incorrect group expiry time field size - + Tamaño de campo de tiempo de caducidad de grupo incorrecto Incorrect group icon field size - + Tamaño del campo del ícono de grupo incorrecto Incorrect group level field size - + Tamaño de campo del nivel de grupo incorrecto Invalid group field type - + Tipo de campo de grupo inválido Missing group id or level - + Falta identificador de grupo o nivel Missing entry field type number - + Entrada de tipo número en campo faltante Invalid entry field size - + Tamaño de la entrada para el campo inválido Read entry field data doesn't match size - + Datos de campo de entrada no coinciden en tamaño Invalid entry uuid field size - + Tamaño de la entrada para el campo uuid inválido Invalid entry group id field size - + Tamaño de la entrada para el campo identificador de grupo inválido Invalid entry icon field size - + Tamaño de la entrada para el campo icono inválido Invalid entry creation time field size - + Tamaño de la entrada para el campo tiempo de creación inválido Invalid entry modification time field size - + Tamaño de la entrada para el campo tiempo de modificación inválido Invalid entry expiry time field size - + Tamaño de la entrada para el campo tiempo de expiración inválido Invalid entry field type - + Tipo del campo de entrada inválido KeePass2 AES: 256-bit - + AES: 256-bit Twofish: 256-bit - + Twofish: 256-bit ChaCha20: 256-bit - + ChaCha20: 256-bit AES-KDF (KDBX 4) - + AES-KDF (KDBX 4) AES-KDF (KDBX 3.1) - + AES-KDF (KDBX 3.1) Argon2 (KDBX 4 – recommended) - + Argon2 (KDBX 4 – recomendado) @@ -2844,7 +2848,7 @@ Esta migración es en único sentido. No podrá abrir la base de datos importada <p>It looks like you are using KeePassHTTP for browser integration. This feature has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a class="link" href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a> (warning %1 of 3).</p> - + <p>Parece que utiliza KeePassHTTP para la integración del navegador. Esta característica ha quedado obsoleto y desaparecerá en el futuro. <br>Por favor, ¡pasa a KeePassXC-Browser en lugar de esto! Para obtener ayuda con la migración, visite nuestra <a class="link" href="https://keepassxc.org/docs/keepassxc-browser-migration">Guía de migración</a> (advertencia %1 de 3).</p> read-only @@ -2890,50 +2894,52 @@ Esta migración es en único sentido. No podrá abrir la base de datos importada 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. - + ADVERTENCIA: Usted está utilizando una versión inestable de KeePassXC! +Hay un alto riesgo de corrupción, mantenga una copia de seguridad de sus bases de datos. +Esta versión no es para uso de producción. OpenSSHKey Invalid key file, expecting an OpenSSH key - + Archivo de clave no válida, esperando una clave de OpenSSH PEM boundary mismatch - + Desajuste de límite PEM Base64 decoding failed - + No se pudo decodificar Base64 Key file way too small. - + Archivo llave demasiado pequeño. Key file magic header id invalid - + Id de encabezado mágico del archivo llave inválido Found zero keys - + Cero claves encontradas Failed to read public key. - + No se pudo leer la clave pública. Corrupted key file, reading private key failed - + Fichero de claves corrupto, no se pudo leer la clave privada No private key payload to decrypt - + Sin contenido a desencriptar en llave privada Trying to run KDF without cipher - + Tratando de ejecutar KDF sin cifrado Passphrase is required to decrypt this key @@ -2941,35 +2947,35 @@ This version is not meant for production use. Key derivation failed, key file corrupted? - + Derivación de la llave falló, ¿archivo llave dañado? Decryption failed, wrong passphrase? - + ¿Error de descifrado, contraseña incorrecta? Unexpected EOF while reading public key - + EOF inesperado al leer la clave pública Unexpected EOF while reading private key - + EOF inesperado al leer la clave privada Can't write public key as it is empty - + No se puede escribir la clave pública ya que es vacía Unexpected EOF when writing public key - + EOF inesperado al escribir la clave pública Can't write private key as it is empty - + No se puede escribir la clave privada ya que es vacía Unexpected EOF when writing private key - + EOF inesperado al escribir la clave privada Unsupported key type: %1 @@ -3101,7 +3107,7 @@ This version is not meant for production use. <p>KeePassHTTP has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a>.</p> - + <p>KeePassHTTP ha quedado obsoleto y desaparecerá en el futuro. <br>Por favor, ¡pasa a KeePassXC-Browser en lugar de esto! Para obtener ayuda con la migración, visite nuestra <a href="https://keepassxc.org/docs/keepassxc-browser-migration">Guía de migración</a>.</p> Cannot bind to privileged ports @@ -3242,63 +3248,63 @@ Usando el puerto por defecto 19455 QObject Database not opened - + Base de datos no abierta Database hash not available - + Hash de la base de datos no disponible Client public key not received - + Clave pública del cliente no recibida Cannot decrypt message - + No se puede descifrar el mensaje Timeout or cannot connect to KeePassXC - + Tiempo de espera superado, o no se puede conectar a KeePassXC Action cancelled or denied - + Acción cancelada o denegada Cannot encrypt message or public key not found. Is Native Messaging enabled in KeePassXC? - + No se puede cifrar el mensaje o la clave pública no se encuentra. ¿Es habilitado el Native Messaging en KeePassXC? KeePassXC association failed, try again - + No se pudo asociar con KeePassXC, inténtelo de nuevo Key change was not successful - + Cambio de clave no fue exitoso Encryption key is not recognized - + Clave de cifrado no es reconocida No saved databases found - + Ninguna base de datos guardadas encontrada Incorrect action - + Acción incorrecta Empty message received - + Mensaje vacío recibido No URL provided - + No hay URL proporcionada No logins found - + No se encuentraron logins Unknown error @@ -3306,7 +3312,7 @@ Usando el puerto por defecto 19455 Add a new entry to a database. - + Añadir una nueva entrada a una base de datos. Path of the database. @@ -3322,7 +3328,7 @@ Usando el puerto por defecto 19455 Username for the entry. - + Nombre de usuario para la entrada. username @@ -3330,7 +3336,7 @@ Usando el puerto por defecto 19455 URL for the entry. - + URL de la entrada. URL @@ -3338,11 +3344,11 @@ Usando el puerto por defecto 19455 Prompt for the entry's password. - + Solicitar contraseña de la entrada. Generate a password for the entry. - + Generar una contraseña para la entrada. Length for the generated password. @@ -3354,20 +3360,20 @@ Usando el puerto por defecto 19455 Path of the entry to add. - + Camino de la entrada para añadir. Copy an entry's password to the clipboard. - + Copiar la contraseña de una entrada en el portapapeles. Path of the entry to clip. clip = copy to clipboard - + Camino de la entrada para copiar. Timeout in seconds before clearing the clipboard. - + Tiempo de espera en segundos antes de borrar el portapapeles. Edit an entry. @@ -3379,23 +3385,23 @@ Usando el puerto por defecto 19455 title - + título Path of the entry to edit. - + Camino de la entrada para editar. Estimate the entropy of a password. - + Estimar la entropía de una contraseña. Password for which to estimate the entropy. - + Contraseña para el que desea calcular la entropía. Perform advanced analysis on the password. - + Realizar análisis avanzado en la contraseña. Extract and print the content of a database. @@ -3407,25 +3413,30 @@ Usando el puerto por defecto 19455 Insert password to unlock %1: - + Introduzca la contraseña para desbloquear %1: Failed to load key file %1 : %2 - + Error al cargar el archivo llave %1 : %2 WARNING: You are using a legacy key file format which may become unsupported in the future. Please consider generating a new key file. - + ADVERTENCIA: Usted está utilizando un formato de archivo llave heredado que puede ser no compatible en el futuro. + +Por favor considere generar un nuevo archivo de llave. Available commands: - + + +Comandos disponibles: + Name of the command to execute. @@ -3441,11 +3452,11 @@ Available commands: Find entries quickly. - + Encontrar las entradas rápidamente. Search term. - + Término de búsqueda. Merge two databases. @@ -3461,23 +3472,23 @@ Available commands: Use the same credentials for both database files. - + Utilizar las mismas credenciales para ambos archivos de base de datos. Key file of the database to merge from. - + Archivo llave de la base de datos desde la cual desea combinar. Show an entry's information. - + Muestra información de una 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. - + Nombres de los atributos para mostrar. Esta opción se puede especificar más de una vez, con cada atributo apareciendo uno por línea en el orden dado. Si no se especifica ningún atributo, se da un resumen de los atributos predeterminados. attribute - + atributo Name of the entry to show. @@ -3527,7 +3538,7 @@ Available commands: Last Modified - + Última modificación Created @@ -3535,7 +3546,7 @@ Available commands: Legacy Browser Integration - + Integración de navegador obsoleta Browser Integration @@ -3559,48 +3570,49 @@ Available commands: Generate a new random diceware passphrase. - + Generar una nueva frase de contraseña aleatoria diceware. Word count for the diceware passphrase. - + Número de palabras para la frase de contraseña de diceware. count - + Número Wordlist for the diceware generator. [Default: EFF English] - + Lista de palabras para el generador de diceware. +[Por defecto: Inglés EFF] Generate a new random password. - + Generar una nueva contraseña aleatoria. Length of the generated password. - + Longitud de la contraseña generada. Use lowercase characters in the generated password. - + Utilizar caracteres en minúsculas en la contraseña generada. Use uppercase characters in the generated password. - + Utilizar caracteres en mayúsculas en la contraseña generada. Use numbers in the generated password. - + Utilizar números en la contraseña generada. Use special characters in the generated password. - + Utilizar caracteres especiales en la contraseña generada. Use extended ASCII in the generated password. - + Utilizar ASCII extendido en la contraseña generada. @@ -3708,7 +3720,7 @@ Por favor desbloquee la base de datos seleccionada o elija otra que esté desblo Successfully removed %n encryption-key(s) from KeePassX/Http Settings. - + Quitado con éxito cifrado %n-llaves de KeePassX y Http.Quitadas con éxito %n- llaves de encriptación de las opciones de KeePassX/Http. KeePassXC: No keys found @@ -3740,7 +3752,7 @@ Por favor desbloquee la base de datos seleccionada o elija otra que esté desblo Successfully removed permissions from %n entries. - + Con éxito quitar permisos de entradas %n.Removidos permisos de %n entradas exitosamente. KeePassXC: No entry with permissions found! @@ -3822,7 +3834,7 @@ Por favor desbloquee la base de datos seleccionada o elija otra que esté desblo Hide the Details view - + Ocultar la vista de detalles Show a system tray icon @@ -3838,7 +3850,7 @@ Por favor desbloquee la base de datos seleccionada o elija otra que esté desblo Dark system tray icon - + Icono de bandeja del sistema oscuro Language @@ -3850,11 +3862,11 @@ Por favor desbloquee la base de datos seleccionada o elija otra que esté desblo Use entry title to match windows for global Auto-Type - + Use título de entrada para acertar ventanas en Auto-Tipeado global. Use entry URL to match windows for global Auto-Type - + Use URL para acertar ventanas en Auto-Tipedo global Always ask before performing Auto-Type @@ -3875,23 +3887,23 @@ Por favor desbloquee la base de datos seleccionada o elija otra que esté desblo Startup - + Inicio File Management - + Administración de archivos Safely save database files (may be incompatible with Dropbox, etc) - + Guardar los archivos de base de datos con seguridad (puede ser incompatible con Dropbox, etcétera) Backup database file before saving - + Hacer una copia de seguridad de la base de datos antes de guardar Entry Management - + Gestión de entrada General @@ -3939,11 +3951,11 @@ Por favor desbloquee la base de datos seleccionada o elija otra que esté desblo Hide passwords in the preview panel - + Ocultar contraseñas en el panel de vista previa Hide entry notes by default - + Ocultar notas de entrada por defecto Privacy @@ -3955,7 +3967,7 @@ Por favor desbloquee la base de datos seleccionada o elija otra que esté desblo Re-lock previously locked database after performing Auto-Type - + Volver a bloquear la base de datos previamente bloqueada después de hacer Auto-Escritura @@ -3970,11 +3982,11 @@ Por favor desbloquee la base de datos seleccionada o elija otra que esté desblo Default RFC 6238 token settings - + Ajustes para el token por defecto RFC 6238 Steam token settings - + Opciones de token de Steam Use custom settings @@ -4064,14 +4076,14 @@ Por favor desbloquee la base de datos seleccionada o elija otra que esté desblo Welcome to KeePassXC %1 - + Bienvenido a KeePassXC %1 main Remove an entry from the database. - + Quitar una entrada de la base de datos. Path of the database. @@ -4079,7 +4091,7 @@ Por favor desbloquee la base de datos seleccionada o elija otra que esté desblo Path of the entry to remove. - + Camino de la entrada a quitar. KeePassXC - cross-platform password manager @@ -4103,7 +4115,7 @@ Por favor desbloquee la base de datos seleccionada o elija otra que esté desblo Parent window handle - + Identificador de la ventana padre \ No newline at end of file diff --git a/share/translations/keepassx_fi.ts b/share/translations/keepassx_fi.ts index f01fb57e7..113927dcd 100644 --- a/share/translations/keepassx_fi.ts +++ b/share/translations/keepassx_fi.ts @@ -374,7 +374,7 @@ Ole hyvä ja valitse sallitaanko pääsy. We're sorry, but KeePassXC-Browser is not supported for Snap releases at the moment. - + Valitettavasti KeePassXC-Browser ei ole vielä tuettu Snap-julkaisuissa. @@ -1976,7 +1976,7 @@ Tämä voi vikaannuttaa tietoa käyttävän liitännäisen. Attachments (icon) - + Liitteet (kuvake) diff --git a/share/translations/keepassx_id.ts b/share/translations/keepassx_id.ts index 882570e6c..a5135b2c4 100644 --- a/share/translations/keepassx_id.ts +++ b/share/translations/keepassx_id.ts @@ -73,7 +73,7 @@ Kernel: %3 %4 Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. - + Terima kasih dari tim KeePassXC kepada debfx yang telah membuat KeepassX original. Build Type: %1 @@ -218,7 +218,7 @@ Silakan pilih apakah Anda ingin mengizinkannya. BrowserOptionDialog Dialog - + Dialog This is required for accessing your databases with KeePassXC-Browser @@ -374,7 +374,7 @@ Silakan pilih apakah Anda ingin mengizinkannya. We're sorry, but KeePassXC-Browser is not supported for Snap releases at the moment. - + Maaf, KeePassXC-Browser saat ini tidak mendukung rilisan Snap. @@ -447,7 +447,7 @@ Silakan buka kunci atau pilih yang lainnya yang tidak terkunci. Successfully removed %n encryption key(s) from KeePassXC settings. - + Berhasil membuang %n kunci enkripsi dari pengaturan KeePassXC. Removing stored permissions… @@ -463,7 +463,7 @@ Silakan buka kunci atau pilih yang lainnya yang tidak terkunci. Successfully removed permissions from %n entry(s). - + Berhasil membuang perizinan dari %n entri. KeePassXC: No entry with permissions found! @@ -856,7 +856,7 @@ If you keep this number, your database may be too easy to crack! MiB Abbreviation for Mebibytes (KDF settings) - + MiB thread(s) @@ -1378,15 +1378,15 @@ Apakah Anda ingin menggabungkan ubahan Anda? Apply generated password? - + Gunakan sandi yang dibuat? Do you want to apply the generated password to this entry? - + Apakah Anda ingin menggunakan sandi yang dibuat untuk entri ini? Entry updated successfully. - + Entri berhasil diperbarui. @@ -1421,11 +1421,11 @@ Apakah Anda ingin menggabungkan ubahan Anda? Foreground Color: - + Warna Latar Depan: Background Color: - + Warna Latar Belakang: @@ -1742,7 +1742,7 @@ Apakah Anda ingin menggabungkan ubahan Anda? Plugin Data - + Data Plugin Remove @@ -1750,12 +1750,13 @@ Apakah Anda ingin menggabungkan ubahan Anda? Delete plugin data? - + Hapus data plugin? Do you really want to delete the selected plugin data? This may cause the affected plugins to malfunction. - + Apakah Anda benar-benar ingin menghapus data plugin? +Ini mungkin akan menyebabkan plugin terkait tidak berfungsi. Key @@ -1813,7 +1814,7 @@ This may cause the affected plugins to malfunction. Are you sure you want to remove %n attachment(s)? - + Apakah Anda yakin ingin membuang %n lampiran? Confirm Remove @@ -1972,7 +1973,7 @@ This may cause the affected plugins to malfunction. Attachments (icon) - + Lampiran (ikon) @@ -2997,7 +2998,7 @@ Versi ini tidak dimaksudkan untuk penggunaan sehari-hari. OptionDialog Dialog - + Dialog This is required for accessing your databases from ChromeIPass or PassIFox @@ -3566,11 +3567,11 @@ Perintah yang tersedia: Generate a new random diceware passphrase. - + Buat frasa sandi diceware acak yang baru. Word count for the diceware passphrase. - + Jumlah kata untuk frasa sandi diceware. count @@ -3579,7 +3580,8 @@ Perintah yang tersedia: Wordlist for the diceware generator. [Default: EFF English] - + Daftar kata untuk generator diceware. +[Bawaan: Inggris EFF] Generate a new random password. @@ -3607,7 +3609,7 @@ Perintah yang tersedia: Use extended ASCII in the generated password. - + Gunakan ASCII yang diperluas di dalam sandi yang dibuat. @@ -3962,7 +3964,7 @@ Silakan buka kunci atau pilih yang lainnya yang tidak terkunci. Re-lock previously locked database after performing Auto-Type - + Kunci ulang basis data yang sebelumnya terkunci setelah menjalankan Ketik-Otomatis diff --git a/share/translations/keepassx_nb.ts b/share/translations/keepassx_nb.ts index ed8c0c264..854ad820b 100644 --- a/share/translations/keepassx_nb.ts +++ b/share/translations/keepassx_nb.ts @@ -78,7 +78,8 @@ Kjerne: %3 %4 Build Type: %1 - + Bygge-type: %1 + @@ -137,11 +138,11 @@ Velg om du vil gi tilgang eller ikke. This Auto-Type command contains very slow key presses. Do you really want to proceed? - + Denne Autoskriv-kommandoen inneholder svært sene tastetrykk. Vil du virkelig fortsette? This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? - + Denne Autoskriv-kommandoen inneholder argument som repeteres svært hyppig. Vil du virkelig fortsette? @@ -186,14 +187,14 @@ Velg om du vil gi tilgang eller ikke. Select entry to Auto-Type: - + Velg oppføring som skal Autoskrives: BrowserAccessControlDialog KeePassXC-Browser Confirm Access - + KeePassXC-Browser bekreft tilgang Remember this decision @@ -222,7 +223,7 @@ Velg om du vil gi tilgang eller ikke. This is required for accessing your databases with KeePassXC-Browser - + Dette er nødvendig for å få tilgang til dine databaser med KeePassXC-Browser Enable KeepassXC browser integration @@ -263,19 +264,19 @@ Velg om du vil gi tilgang eller ikke. Only entries with the same scheme (http://, https://, ...) are returned. - + Bare oppføringer med samme protokoll (http://, https://, ...) er returnert. &Match URL scheme (e.g., https://...) - + &Match URL-skjema (f.eks. https://...) Only returns the best matches for a specific URL instead of all entries for the whole domain. - + Returnerer bare beste matcher for en spesifikk URL i stedet for alle oppføringer i hele domenet. &Return only best-matching credentials - + &Returner bare beste matcher av identifikasjonen Sort &matching credentials by title @@ -320,23 +321,23 @@ Velg om du vil gi tilgang eller ikke. Automatically creating or updating string fields is not supported. - + Automatisk registrering eller endring av tekstfelt er ikke støttet. &Return advanced string fields which start with "KPH: " - + &Returner avanserte tekstfelt som begynner med "KPH: " Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. - + Oppdaterer KeePassXC eller keepassxc-proxy binær-sti automatisk til innebygd meldings-skript ved oppstart. Update &native messaging manifest files at startup - + Oppdater &lokalt meldings-manifest ved oppstart Support a proxy application between KeePassXC and browser extension. - + Angi en mellomtjener-applikasjon mellom KeePassXC og nettleserutvidelsen. Use a &proxy application between KeePassXC and browser extension @@ -381,14 +382,16 @@ Velg om du vil gi tilgang eller ikke. BrowserService KeePassXC: New key association request - + KeePassXC: Tilknytningsforespørsel for ny nøkkel. You have received an association request for the above key. If you would like to allow it access to your KeePassXC database, give it a unique name to identify and accept it. - + Du har mottatt en tilknytningsforespørsel for den ovennevnte nøkkelen. + +Gi den et unikt navn dersom du vil gi den tilgang til KeePassXC-databasen. Save and allow access @@ -396,20 +399,21 @@ give it a unique name to identify and accept it. KeePassXC: Overwrite existing key? - + KeePassXC: Overskrive eksisterende nøkkel? A shared encryption key with the name "%1" already exists. Do you want to overwrite it? - + En delt krypteringsnøkkel med navn "%1" eksisterer fra før. +Vil du overskrive den? KeePassXC: Update Entry - + KeePassXC: Oppdater oppføring. Do you want to update the information in %1 - %2? - + Vil du oppdatere informasjonen i %1 - %2? KeePassXC: Database locked! @@ -418,7 +422,8 @@ Do you want to overwrite it? The active database is locked! Please unlock the selected database or choose another one which is unlocked. - + Den aktive databasen er låst! +Lås opp valgt database eller velg en annen som er åpen. KeePassXC: Settings not available! @@ -426,7 +431,7 @@ Please unlock the selected database or choose another one which is unlocked. The active database does not contain a settings entry. - + Den aktive databasen inneholder ikke noen konfigurasjons-innstilling. KeePassXC: No keys found @@ -434,7 +439,7 @@ Please unlock the selected database or choose another one which is unlocked. No shared encryption keys found in KeePassXC Settings. - + Ingen delte krypteringsnøkler funnet i oppsettet i KeePassXC. KeePassXC: Removed keys from database @@ -442,11 +447,11 @@ Please unlock the selected database or choose another one which is unlocked. Successfully removed %n encryption key(s) from KeePassXC settings. - + Fjernet %n krypteringsnøkkel(er) fra oppsettet i KeePassXC.Fjernet %n krypteringsnøkkel(er) fra oppsettet i KeePassXC. Removing stored permissions… - + Fjerner lagrede tillatelser... Abort @@ -454,19 +459,19 @@ Please unlock the selected database or choose another one which is unlocked. KeePassXC: Removed permissions - + KeePassXC: Fjernet tillatelser Successfully removed permissions from %n entry(s). - + Fjernet tillatelser fra %n oppføring(er).Fjernet tillatelser fra %n oppføring(er). KeePassXC: No entry with permissions found! - + KeePassXC: Ingen oppføring med tillatelser funnet! The active database does not contain an entry with permissions. - + Den aktive databasen inneholder ikke et oppsett med tillatelser. @@ -485,7 +490,7 @@ Please unlock the selected database or choose another one which is unlocked. &Key file - + &Nøkkelfil Browse @@ -497,7 +502,7 @@ Please unlock the selected database or choose another one which is unlocked. Cha&llenge Response - + &Utfordrer-respons Refresh @@ -529,7 +534,7 @@ Please unlock the selected database or choose another one which is unlocked. Do you really want to use an empty string as password? - + Vil du virkelig bruke en tom streng som passord? Different passwords supplied. @@ -538,7 +543,8 @@ Please unlock the selected database or choose another one which is unlocked. Failed to set %1 as the Key file: %2 - + Klarte ikke å bruke %1 som nøkkelfil: +%2 Legacy key file format @@ -566,11 +572,11 @@ Vurder å opprette en ny nøkkelfil. Append ' - Clone' to title - + Tilføy ' - Clone' til tittel Replace username and password with references - + Bytt ut brukernamn og passord med referansene Copy history @@ -593,7 +599,7 @@ Vurder å opprette en ny nøkkelfil. Encoding - + Koding Codec @@ -613,15 +619,15 @@ Vurder å opprette en ny nøkkelfil. First record has field names - + Første post har feltnavn Number of headers line to discard - + Antall header-linjer å se bort fra Consider '\' an escape character - + Betrakt '\' som en escape-sekvens Preview @@ -629,11 +635,11 @@ Vurder å opprette en ny nøkkelfil. Column layout - + Kolonneoppsett Not present in CSV file - + Ikke tilstede i CSV-fil Empty fieldname @@ -684,15 +690,15 @@ Vurder å opprette en ny nøkkelfil. CsvParserModel %n byte(s), - + %n byte(s), %n byte(s), %n row(s), - + %n rad(er), %n rad(er), %n column(s) - + %n kolonne(r)%n kolonne(r) @@ -719,7 +725,7 @@ Vurder å opprette en ny nøkkelfil. Challenge Response: - + Utfordrer-respons: Unable to open the database. @@ -809,17 +815,19 @@ Du kan nå lagre den. Number of rounds too high Key transformation rounds - + Antall runder er for høyt 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! - + Du bruker et svært høyt antall nøkkeltransformasjons-runder med Argon2. + +Dersom du beholder dette tallet så vil det ta timer eller dager (og kanskje lengre) å åpne databasen! Understood, keep number - + Forstått; behold antallet Cancel @@ -828,31 +836,33 @@ If you keep this number, your database may take hours or days (or even longer) t Number of rounds too low Key transformation rounds - + Antall runder er for lavt 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! - + Du bruker et svært lavt antall nøkkeltransformasjons-runder med AES-KDF. + +Dersom du beholder dette antallet så kan databasen være for lett å knekke! KDF unchanged - + KDF uendret Failed to transform key with new KDF parameters; KDF unchanged. - + Kunne ikke omskape nøkkel med nye KDF-parametere; KDF uendret. MiB Abbreviation for Mebibytes (KDF settings) - + MiB MiB thread(s) Threads for parallel execution (KDF settings) - + tråd(er)tråd(er) @@ -871,15 +881,15 @@ If you keep this number, your database may be too easy to crack! Key Derivation Function: - + Nøkkelavledningsfunksjon: Transform rounds: - + Transformasjonsrunder: Benchmark 1-second delay - + Testmåling 1 sek. forsinkelse Memory Usage: @@ -887,14 +897,14 @@ If you keep this number, your database may be too easy to crack! Parallelism: - + Parallellitet: DatabaseSettingsWidgetGeneral Database Meta Data - + Database metadata Database name: @@ -910,31 +920,31 @@ If you keep this number, your database may be too easy to crack! History Settings - + Historie-innstillinger Max. history items: - + Maks. historisk antall: Max. history size: - + Maks. historisk størrelse: MiB - + MiB Use recycle bin - + Bruk søppelbøtte Additional Database Settings - + Ekstra database-innstillinger Enable &compression (recommended) - + Aktiver &komprimering (anbefalt) @@ -1009,11 +1019,12 @@ Vil du likevel avvise endringene? "%1" was modified. Save changes? - + "%1" er endet. +Lagre endringer? Writing the database failed. - + Skriving av databasen feilet. Passwords @@ -1046,22 +1057,26 @@ Save changes? Can't lock the database as you are currently editing it. Please press cancel to finish your changes or discard them. - + Kan ikke låse database fordi du redigerer den. +Klikk avbryt for å fullføre endringene eller forkaste dem. This database has been modified. Do you want to save the database before locking it? Otherwise your changes are lost. - + Denne databasen er blitt endret. +Vil du lagre databasen før låsing? +Ellers blir endringene dine tapt. Disable safe saves? - + Deaktivere sikker lagring? 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 har mislykkes i å lagre databasen flere ganger. Dette er trolig forårsaket av at synkroniserings-tjenester har låst lagrings-filen. +Deaktivere sikker lagring og prøve igjen? @@ -1088,7 +1103,7 @@ Disable safe saves and try again? Do you really want to delete %1 entries for good? - + Vil du virkelig slette %1 oppføringer for godt? Move entry to recycle bin? @@ -1096,7 +1111,7 @@ Disable safe saves and try again? Do you really want to move entry "%1" to the recycle bin? - + Ønsker du virkelig å flytte oppføring "%1" til søppelkurven? Move entries to recycle bin? @@ -1104,7 +1119,7 @@ Disable safe saves and try again? Do you really want to move %n entry(s) to the recycle bin? - + Ønsker du virkelig å flytte %n oppføring(er) til søppelkurven?Ønsker du virkelig å flytte %n oppføring(er) til søppelkurven? Execute command? @@ -1112,7 +1127,7 @@ Disable safe saves and try again? Do you really want to execute the following command?<br><br>%1<br> - + Ønsker du virkelig å utføre følgende kommando?<br><br>%1<br> Remember my choice @@ -1124,7 +1139,7 @@ Disable safe saves and try again? Do you really want to delete the group "%1" for good? - + Ønsker du virkelig å slette gruppen "%1" for godt? Unable to calculate master key @@ -1132,11 +1147,11 @@ Disable safe saves and try again? No current database. - + Ingen nåværende database. No source database, nothing to do. - + Ingen kilde-database, ingenting å gjøre. Search Results (%1) @@ -1148,15 +1163,15 @@ Disable safe saves and try again? File has changed - + Fil er endret The database file has changed. Do you want to load the changes? - + Databasen er endret. Ønsker du å laste inn endringene? Merge Request - + Forespørsel om sammenslåing The database file has changed and you have unsaved changes. @@ -1166,22 +1181,22 @@ Vil du slå sammen fila med endringene dine? Could not open the new database file while attempting to autoreload this database. - + Kunne ikke åpne den nye databasen så lenge denne databasen blir auto-lastet. Empty recycle bin? - + Tom papirkurv? Are you sure you want to permanently delete everything from your recycle bin? - + Er du sikker på at du ønsker å slette alt i papirkurven permanent? DetailsWidget Generate TOTP Token - + Opprett TOTP Token Close @@ -1201,7 +1216,7 @@ Vil du slå sammen fila med endringene dine? Expiration - + Utløp Username @@ -1209,7 +1224,7 @@ Vil du slå sammen fila med endringene dine? Autotype - + Autoskriv Searching @@ -1241,7 +1256,7 @@ Vil du slå sammen fila med endringene dine? Clear - + Tøm Never @@ -1249,15 +1264,15 @@ Vil du slå sammen fila med endringene dine? [PROTECTED] - + [BESKYTTET] Disabled - + Deaktivert Enabled - + Aktivert @@ -1288,11 +1303,11 @@ Vil du slå sammen fila med endringene dine? SSH Agent - + SSH-agent n/a - + i/a (encrypted) @@ -1304,19 +1319,19 @@ Vil du slå sammen fila med endringene dine? File too large to be a private key - + Fil for stor til å være privat nøkkel Failed to open private key - + Kunne ikke åpne den private nøkkelen Entry history - + Oppførings-historikk Add entry - + Legg til oppføring Edit entry @@ -1332,19 +1347,19 @@ Vil du slå sammen fila med endringene dine? Confirm Remove - + Bekreft fjerning Are you sure you want to remove this attribute? - + Er du sikker på at du ønsker å fjerne denne attributten? [PROTECTED] - + [BESKYTTET] Press reveal to view or edit - + Klikk for å vise eller endre Tomorrow @@ -1352,11 +1367,11 @@ Vil du slå sammen fila med endringene dine? %n week(s) - + %n uke(r)%n uke(r) %n month(s) - + %n måned(er)%n måned(er) 1 year @@ -1383,23 +1398,23 @@ Vil du slå sammen fila med endringene dine? Add - + Legg til Remove - + Fjern Edit Name - + Rediger navn Protect - + Beskytt Reveal - + Vis Attachments @@ -1422,11 +1437,11 @@ Vil du slå sammen fila med endringene dine? Inherit default Auto-Type sequence from the &group - + Arv standard Autoskriv-sekvens fra &gruppen &Use custom Auto-Type sequence: - + Br&uk tilpasset Autoskriv-sekvens: Window Associations @@ -1434,11 +1449,11 @@ Vil du slå sammen fila med endringene dine? + - + + - - + - Window title: @@ -1453,19 +1468,19 @@ Vil du slå sammen fila med endringene dine? EditEntryWidgetHistory Show - + Vis Restore - + Gjenopprett Delete - + Slett Delete all - + Slett alt @@ -1492,11 +1507,11 @@ Vil du slå sammen fila med endringene dine? Presets - + Hurtigvalg Toggle the checkbox to reveal the notes section. - + Veksle avkrysningsboksen for å vise notatdelen. Username: @@ -1511,11 +1526,11 @@ Vil du slå sammen fila med endringene dine? EditEntryWidgetSSHAgent Form - + Skjema Remove key from agent after - + Fjern nøkkel fra agent etter seconds @@ -1523,19 +1538,19 @@ Vil du slå sammen fila med endringene dine? Fingerprint - + Fingeravtrykk Remove key from agent when database is closed/locked - + Fjern nøkkel fra agent når database er lukket/låst Public key - + Offentlig nøkkel Add key to agent when database is opened/unlocked - + Legg nøkkel til agent når database er åpnet/ulåst Comment @@ -1547,7 +1562,7 @@ Vil du slå sammen fila med endringene dine? n/a - + i/a Copy to clipboard @@ -1572,15 +1587,15 @@ Vil du slå sammen fila med endringene dine? Add to agent - + Legg til til agent Remove from agent - + Fjern fra agent Require user confirmation when this key is used - + Krev brukerbekreftelse når denne nøkkelen blir brukt @@ -1603,19 +1618,19 @@ Vil du slå sammen fila med endringene dine? Edit group - + Rediger gruppe Enable - + Aktiver Disable - + Deaktiver Inherit from parent group (%1) - + Arv fra foreldre-gruppe (%1) @@ -1642,11 +1657,11 @@ Vil du slå sammen fila med endringene dine? &Use default Auto-Type sequence of parent group - + Br&uk standard Autoskriv-sekvens fra foreldre-gruppa Set default Auto-Type se&quence - + Angi standard Autoskriv-&sekvens @@ -1673,15 +1688,15 @@ Vil du slå sammen fila med endringene dine? Unable to fetch favicon. - + Kan ikke hente favorittikon. Hint: You can enable Google as a fallback under Tools>Settings>Security - + Tips: Du kan aktivere Google som reserve under Verktøy > Oppsett > Sikkerhet Images - + Bilder All files @@ -1689,23 +1704,23 @@ Vil du slå sammen fila med endringene dine? Select Image - + Velg bilde Can't read icon - + Kan ikke lese ikon Custom icon already exists - + Tilpasset ikon finnes allerede Confirm Delete - + Bekreft sletting This icon is used by %1 entries, and will be replaced by the default icon. Are you sure you want to delete it? - + Dette ikonet er brukt av %1 oppføringer, og vil bli erstattet av standardikonet. Er du sikker på at du vil slette det? @@ -1724,7 +1739,7 @@ Vil du slå sammen fila med endringene dine? Uuid: - + Uuid: Plugin Data @@ -1732,16 +1747,17 @@ Vil du slå sammen fila med endringene dine? Remove - + Fjern Delete plugin data? - + Slett programtillegg-data? Do you really want to delete the selected plugin data? This may cause the affected plugins to malfunction. - + Ønsker du virkelig å slette de valgte programtillegg-dataene? +Dette kan føre til feil for de berørte programtilleggene. Key @@ -1757,7 +1773,7 @@ This may cause the affected plugins to malfunction. - Clone Suffix added to cloned entries - + - Klone @@ -1768,79 +1784,84 @@ This may cause the affected plugins to malfunction. Size - + Størrelse EntryAttachmentsWidget Form - + Skjema Add - + Legg til Remove - + Fjern Open - + Åpne Save - + Lagre Select files - + Velg filer Are you sure you want to remove %n attachment(s)? - + Er du sikker på at du vil fjerne %n vedlegg?Er du sikker på at du vil fjerne %n vedlegg? Confirm Remove - + Bekreft fjerning Save attachments - + Lagre vedlegg Unable to create directory: %1 - + Kan ikke opprette katalog: +%1 Are you sure you want to overwrite the existing file "%1" with the attachment? - + Er du sikker på at du ønsker å overskrive eksisterende fil "%1" med vedlegget? Confirm overwrite - + Bekreft overskriving Unable to save attachments: %1 - + Kan ikke lagre vedlegg: +%1 Unable to open attachment: %1 - + Kan ikke åpne vedlegg: +%1 Unable to open attachments: %1 - + Kan ikke åpne vedlegg: +%1 Unable to open files: %1 - + Kan ikke åpne filer: +%1 @@ -1874,7 +1895,7 @@ This may cause the affected plugins to malfunction. Ref: Reference abbreviation - + Ref: Group @@ -1910,15 +1931,15 @@ This may cause the affected plugins to malfunction. Created - + Oppretta Modified - + Endret Accessed - + Brukt Attachments @@ -1929,31 +1950,31 @@ This may cause the affected plugins to malfunction. EntryView Customize View - + Tilpass visning Hide Usernames - + Skjul brukernavn Hide Passwords - + Skjul passord Fit to window - + Tilpass til vindu Fit to contents - + Tilpass til innhold Reset to defaults - + Tilbakestill til standardinnstillinger Attachments (icon) - + Vedlegg (ikon) @@ -1967,18 +1988,18 @@ This may cause the affected plugins to malfunction. HostInstaller KeePassXC: Cannot save file! - + KeePassXC: Kan ikke lagre fil! Cannot save the native messaging script file. - + Kan ikke lagre den lokale meldings-skriptfilen. HttpPasswordGeneratorWidget Length: - + Lengde: Character Types @@ -1986,35 +2007,35 @@ This may cause the affected plugins to malfunction. Upper Case Letters - + Store bokstaver A-Z - + A-Z Lower Case Letters - + Små bokstaver a-z - + a-z Numbers - + Tall 0-9 - + 0-9 Special Characters - + Spesialtegn /*_& ... - + /*_& ... Exclude look-alike characters @@ -2022,7 +2043,7 @@ This may cause the affected plugins to malfunction. Ensure that the password contains characters from every group - + Pass på at passordet inneholder tegn fra hver gruppe Extended ASCII @@ -2033,11 +2054,11 @@ This may cause the affected plugins to malfunction. KMessageWidget &Close - + &Lukk Close message - + Lukk melding @@ -2048,18 +2069,18 @@ This may cause the affected plugins to malfunction. Unable to issue challenge-response. - + Kan ikke utstede utfordrer-respons. Wrong key or database file is corrupt. - + Feil nøkkel eller databasefil er skadet. Kdbx3Writer Unable to issue challenge-response. - + Kan ikke utstede utfordrer-respons. Unable to calculate master key @@ -2070,7 +2091,7 @@ This may cause the affected plugins to malfunction. Kdbx4Reader missing database headers - + Manglende database-headere. Unable to calculate master key @@ -2078,127 +2099,127 @@ This may cause the affected plugins to malfunction. Invalid header checksum size - + Ugyldig header-sjekksumstørrelse Header SHA256 mismatch - + Ikke samsvar med SHA256-header Wrong key or database file is corrupt. (HMAC mismatch) - + Feil nøkkel eller databasefil er skadet. (HMAC-uoverensstemmelse) Unknown cipher - + Ukjent kryptering Invalid header id size - + Ugyldig størrelse: header-id Invalid header field length - + Ugyldig lengde: header-felt Invalid header data length - + Ugyldig lengde: header-data Failed to open buffer for KDF parameters in header - + Kunne ikke åpne buffer til KDF-parametere i header Unsupported key derivation function (KDF) or invalid parameters - + Ikke støttet funksjon for nøkkelavledning (KDF) eller ugyldige parametre Legacy header fields found in KDBX4 file. - + Eldre header-felt funnet i KDBX4-fil. Invalid inner header id size - + Ugyldig størrelse: indre header-id Invalid inner header field length - + Ugyldig lengde: indre header-felt Invalid inner header binary size - + Ugyldig størrelse: binary inner header Unsupported KeePass variant map version. Translation: variant map = data structure for storing meta data - + Ikke støttet KeePass variant-map versjon. Invalid variant map entry name length Translation: variant map = data structure for storing meta data - + Ugyldig: Variant map entry name length Invalid variant map entry name data Translation: variant map = data structure for storing meta data - + Ugyldig: Variant map entry name data Invalid variant map entry value length Translation: variant map = data structure for storing meta data - + Ugyldig: Variant map entry value length Invalid variant map entry value data Translation comment: variant map = data structure for storing meta data - + Ugyldig: Variant map entry value data Invalid variant map Bool entry value length Translation: variant map = data structure for storing meta data - + Ugyldig: Variant map Bool entry value length Invalid variant map Int32 entry value length Translation: variant map = data structure for storing meta data - + Ugyldig: Variant map Int32 entry value length Invalid variant map UInt32 entry value length Translation: variant map = data structure for storing meta data - + Ugyldig: Variant map UInt32 entry value length Invalid variant map Int64 entry value length Translation: variant map = data structure for storing meta data - + Ugyldig: Variant map Int64 entry value length Invalid variant map UInt64 entry value length Translation: variant map = data structure for storing meta data - + Ugyldig: Variant map UInt64 entry value length Invalid variant map entry type Translation: variant map = data structure for storing meta data - + Ugyldig: Variant map entry type Invalid variant map field type size Translation: variant map = data structure for storing meta data - + Ugyldig: Variant map field type size Kdbx4Writer Invalid symmetric cipher algorithm. - + Ugyldig: Symmetric cipher algorithm. Invalid symmetric cipher IV size. IV = Initialization Vector for symmetric cipher - + Ugyldig: Symmetric cipher IV size. Unable to calculate master key @@ -2207,54 +2228,54 @@ This may cause the affected plugins to malfunction. Failed to serialize KDF parameters variant map Translation comment: variant map = data structure for storing meta data - + Kunne ikke serialisere KDF-parametre variant-map KdbxReader Invalid cipher uuid length - + Ugyldig: Cipher uuid length Unsupported cipher - + Ikke støttet kryptering Invalid compression flags length - + Ugyldig: Compression flags length Unsupported compression algorithm - + Ikke støttet komprimeringsalgoritme Invalid master seed size - + Ugyldig: Master seed size Invalid transform seed size - + Ugyldig: Transform seed size Invalid transform rounds size - + Ugyldig: Transform rounds size Invalid start bytes size - + Ugyldig: Start bytes size Invalid random stream id size - + Ugyldig: Random stream id size Invalid inner random stream cipher - + Ugyldig: Inner random stream cipher Not a KeePass database. - + Ikke en KeePass-database. The selected file is an old KeePass 1 database (.kdb). @@ -2268,131 +2289,131 @@ Dette er en en-veis-migrasjon. Du kan ikke åpne den importerte databasen med de Unsupported KeePass 2 database version. - + Ikke støttet KeePass2 databaseversjon. KdbxXmlReader XML parsing failure: %1 - + XML-parsingfeil: %1 No root group - + Ingen root-gruppe Missing icon uuid or data - + Mangler: Icon uuid or data Missing custom data key or value - + Mangler: Custom data key or value Multiple group elements - + Flere gruppe-elementer Null group uuid - + Null: Group uuid Invalid group icon number - + Ugyldig: Group icon number Invalid EnableAutoType value - + Ugyldig: EnableAutoType value Invalid EnableSearching value - + Ugyldig: EnableSearching value No group uuid found - + Ikke funnet: group uuid Null DeleteObject uuid - + Null: DeleteObject uuid Missing DeletedObject uuid or time - + Mangler: DeletedObject uuid or time Null entry uuid - + Null: Entry uuid Invalid entry icon number - + Ugyldig: Entry icon number History element in history entry - + Historikkelement i historikkoppføring No entry uuid found - + Ikke funnet: Entry uuid History element with different uuid - + Historikkelement med forskjellig uuid Unable to decrypt entry string - + Kan ikke dekryptere streng i oppføring Duplicate custom attribute found - + Duplikat: Custom attribute Entry string key or value missing - + Mangler: Entry string key or value Duplicate attachment found - + Duplikat: Attachment found Entry binary key or value missing - + Mangler: Entry binary key or value Auto-type association window or sequence missing - + Mangler: Auto-type association window or sequence Invalid bool value - + Ugyldig: Bool value Invalid date time value - + Ugyldig: date time value Invalid color value - + Ugyldig: Color value Invalid color rgb part - + Ugyldig: Color rgb part Invalid number value - + Ugyldig: Number value Invalid uuid value - + Ugyldig: Uuid value Unable to decompress binary Translator meant is a binary data inside an entry - + Kan ikke dekryptere binær @@ -2410,48 +2431,48 @@ Dette er en en-veis-migrasjon. Du kan ikke åpne den importerte databasen med de KeePass1Reader Unable to read keyfile. - + Kan ikke lese nøkkelfil. Not a KeePass database. - + Ikke en KeePass-database. Unsupported encryption algorithm. - + Ikke støttet krypteringsalgoritme. Unsupported KeePass database version. - + Ikke støttet KeePass databaseversion. Unable to read encryption IV IV = Initialization Vector for symmetric cipher - + Kan ikke lese krypterings-IV Invalid number of groups - + Ugyldig: Number of groups Invalid number of entries - + Ugyldig: Number of entries Invalid content hash size - + Ugyldig: Content hash size Invalid transform seed size - + Ugyldig: Transform seed size Invalid number of transform rounds - + Ugyldig: Number of transform rounds Unable to construct group tree - + Kan ikke opprette gruppe-tre Root @@ -2463,149 +2484,149 @@ Dette er en en-veis-migrasjon. Du kan ikke åpne den importerte databasen med de Wrong key or database file is corrupt. - + Feil nøkkel eller databasefil er skadet. Key transformation failed - + Nøkkeltransformasjon feila Invalid group field type number - + Ugyldig: Group field type number Invalid group field size - + Ugyldig: Group field size Read group field data doesn't match size - + Lest gruppefeltdata matcher ikke størrelsen Incorrect group id field size - + Stemmer ikke: Group id field size Incorrect group creation time field size - + Stemmer ikke: Group creation time field size Incorrect group modification time field size - + Feil: Group modification time field size Incorrect group access time field size - + Feil: Group access time field size Incorrect group expiry time field size - + Feil: Group expiry time field size Incorrect group icon field size - + Feil: Group icon field size Incorrect group level field size - + Feil: Group level field size Invalid group field type - + Ugyldig felttype: gruppe Missing group id or level - + Manglende gruppe-id eller nivå Missing entry field type number - + Manglende felt-type i oppføring: nummer Invalid entry field size - + Ugyldig felt-størrelse i oppføring Read entry field data doesn't match size - + Lest felt i oppføring matcher ikke størrelse Invalid entry uuid field size - + Ugyldig felt-størrelse i oppføring: uuid Invalid entry group id field size - + Ugyldig felt-størrelse i oppføring: gruppe-id Invalid entry icon field size - + Ugyldig felt-størrelse i oppføring: ikon Invalid entry creation time field size - + Ugyldig felt-størrelse i oppføring: opprettelsestidspunkt Invalid entry modification time field size - + Ugyldig felt-størrelse i oppføring: endringstidspunkt Invalid entry expiry time field size - + Ugyldig felt-størrelse i oppføring: utløpstidspunkt Invalid entry field type - + Ugyldig felt-type i oppføring KeePass2 AES: 256-bit - + AES: 256-bit Twofish: 256-bit - + Twofish: 256-bit ChaCha20: 256-bit - + ChaCha20: 256-bit AES-KDF (KDBX 4) - + AES-KDF (KDBX 4) AES-KDF (KDBX 3.1) - + AES-KDF (KDBX 3.1) Argon2 (KDBX 4 – recommended) - + Argon2 (KDBX 4 – anbefalt) Main Existing single-instance lock file is invalid. Launching new instance. - + Eksisterende enbrukermodus lock-fil er ugyldig. Starter ny instans. The lock file could not be created. Single-instance mode disabled. - + Lock-filen kunne ikke opprettes. Enbrukermodus deaktivert. Another instance of KeePassXC is already running. - + En annen instans av KeePassXC kjører allerede. Fatal error while testing the cryptographic functions. - + Alvorlig feil ved testing av de kryptografiske funksjonene. KeePassXC - Error - + KeePassXC - Feil @@ -2652,7 +2673,7 @@ Dette er en en-veis-migrasjon. Du kan ikke åpne den importerte databasen med de &About - + &Om &Open database... @@ -2712,7 +2733,7 @@ Dette er en en-veis-migrasjon. Du kan ikke åpne den importerte databasen med de Database settings - + Databaseoppsett &Clone entry @@ -2720,7 +2741,7 @@ Dette er en en-veis-migrasjon. Du kan ikke åpne den importerte databasen med de &Find - + &Finn Copy &username @@ -2728,7 +2749,7 @@ Dette er en en-veis-migrasjon. Du kan ikke åpne den importerte databasen med de Copy username to clipboard - + Kopier brukernavn til utklippstavlen Cop&y password @@ -2736,7 +2757,7 @@ Dette er en en-veis-migrasjon. Du kan ikke åpne den importerte databasen med de Copy password to clipboard - + Kopier passord til utklippstavlen &Settings @@ -2760,27 +2781,27 @@ Dette er en en-veis-migrasjon. Du kan ikke åpne den importerte databasen med de &Title - + &Tittel Copy title to clipboard - + Kopier tittel til utklippstavlen &URL - + &URL Copy URL to clipboard - + Kopier URL til utklippstavlen &Notes - + &Notater Copy notes to clipboard - + Kopier notater til utklippstavle &Export to CSV file... @@ -2800,11 +2821,11 @@ Dette er en en-veis-migrasjon. Du kan ikke åpne den importerte databasen med de Show TOTP - + Vis TOTP Set up TOTP... - + Sett opp TOTP... Copy &TOTP @@ -2816,7 +2837,7 @@ Dette er en en-veis-migrasjon. Du kan ikke åpne den importerte databasen med de Clear history - + Slett historikk Access error for config file %1 @@ -2824,15 +2845,15 @@ Dette er en en-veis-migrasjon. Du kan ikke åpne den importerte databasen med de <p>It looks like you are using KeePassHTTP for browser integration. This feature has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a class="link" href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a> (warning %1 of 3).</p> - + <p>Det ser ut som du bruker KeePassHTTP som nettleserintegrasjon. Denne funksjonen har blitt utdatert og vil bli fjerna i framtida.<br>Vennligst bytt til KeePassXC-nettleseren isteden! For hjelp med overgang, besøk vår <a class="link" href="https://keepassxc.org/docs/keepassxc-browser-migration">overgangs-håndbok</a> (advarsel %1 of 3).</p> read-only - + skrivebeskyttet Settings - + Oppsett Toggle window @@ -2856,120 +2877,122 @@ Dette er en en-veis-migrasjon. Du kan ikke åpne den importerte databasen med de Save repaired database - + Lagre reparert database Writing the database failed. - + Skriving av databasen feilet. Please touch the button on your YubiKey! - + Vennligst trykk på knappen på din 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. - + ADVARSEL: Du bruker en ustabil bygge-versjon av KeePassXC! +Det er stor risiko for inkonsistens, ha en sikkerhetskopi av databasene dine. +Denne versjonen er ikke ment for produksjonsmiljø. OpenSSHKey Invalid key file, expecting an OpenSSH key - + Ugyldig nøkkelfil. Forventer OpenSSH-nøkkel PEM boundary mismatch - + ‘PEM boundary’ samsvarer ikke Base64 decoding failed - + Base64 dekryptering feila Key file way too small. - + Nøkkelfil er alt for liten. Key file magic header id invalid - + ’Magic header id’ i nøkkelfil er ugyldig Found zero keys - + Fant null nøkler Failed to read public key. - + Lesing av offentlig nøkkel feilet. Corrupted key file, reading private key failed - + Skadet nøkkelfil. Lesing av privat nøkkel feilet No private key payload to decrypt - + Ingen private nøkkeldata å dekryptere Trying to run KDF without cipher - + Prøver å kjøre KDF uten kryptering Passphrase is required to decrypt this key - + Passordfrase er nødvendig for å dekryptere denne nøkkelen Key derivation failed, key file corrupted? - + Nøkkelavledning mislyktes. Nøkkelfil skadet? Decryption failed, wrong passphrase? - + Dekryptering feilet. Feil passordfrase? Unexpected EOF while reading public key - + Uventet EOF ved lesing av offentlig nøkkel Unexpected EOF while reading private key - + Uventet EOF ved lesing av privat nøkkel Can't write public key as it is empty - + Kan ikke skrive offentlig nøkkel fordi den er tom Unexpected EOF when writing public key - + Uventet EOF ved skriving av offentlig nøkkel Can't write private key as it is empty - + Kan ikke skrive privat nøkkel fordi den er tom Unexpected EOF when writing private key - + Uventet EOF ved skriving av privat nøkkel Unsupported key type: %1 - + Ikke støttet nøkkeltype: %1 Unknown cipher: %1 - + Ukjent kryptering: %1 Cipher IV is too short for MD5 kdf - + Cipher IV er for kort for MD5 kdf Unknown KDF: %1 - + Ukjent KDF: %1 Unknown key type: %1 - + Ukjent nøkkeltype: %1 @@ -2980,11 +3003,11 @@ This version is not meant for production use. This is required for accessing your databases from ChromeIPass or PassIFox - + Dette kreves for å få tilgang til databasene dine fra ChromeIPass eller PassIFox Enable KeePassHTTP server - + Aktiver KeePassHTTP-server General @@ -2993,15 +3016,15 @@ This version is not meant for production use. Sh&ow a notification when credentials are requested Credentials mean login data requested via browser extension - + Vi&s beskjed når det blir bedt om identifikasjon Only returns the best matches for a specific URL instead of all entries for the whole domain. - + Returnerer bare beste matcher for en spesifikk URL i stedet for alle oppføringer i hele domenet. &Return only best matching entries - + &Returner bare de beste matchende oppføringene Re&quest to unlock the database if it is locked @@ -3009,27 +3032,27 @@ This version is not meant for production use. Only entries with the same scheme (http://, https://, ftp://, ...) are returned. - + Bare oppføringer med samme protokoll (http://, https://,, ftp://, ...) er returnert. &Match URL schemes - + &Match URL-skjema Sort matching entries by &username - + Sorter matchende oppføringer etter &brukernavn Sort &matching entries by title - + Sorter &matchende oppføringer etter tittel R&emove all shared encryption keys from active database - + Fj&ern alle delte krypteringsnøkler fra aktiv database Re&move all stored permissions from entries in active database - + Fjer&n alle lagrede tillatelser fra oppføringer i aktiv database Password Generator @@ -3041,11 +3064,11 @@ This version is not meant for production use. Always allow &access to entries - + Tillat alltid tilg&ang til oppføringer Always allow &updating entries - + Alltid tillat å oppdatere oppføringer Only the selected database has to be connected with a client. @@ -3053,27 +3076,27 @@ This version is not meant for production use. Searc&h in all opened databases for matching entries - + Sø&k i alle åpne databaser etter matchende oppføringer Automatically creating or updating string fields is not supported. - + Automatisk registrering eller endring av tekstfelt er ikke støttet. &Return advanced string fields which start with "KPH: " - + &Returner avanserte tekstfelt som begynner med "KPH: " HTTP Port: - + HTTP-port: Default port: 19455 - + Standard port: 19455 KeePassXC will listen to this port on 127.0.0.1 - + KeePassXC vil lytte på denne porten på 127.0.0.1 <b>Warning:</b> The following options can be dangerous! @@ -3081,23 +3104,24 @@ This version is not meant for production use. <p>KeePassHTTP has been deprecated and will be removed in the future.<br>Please switch to KeePassXC-Browser instead! For help with migration, visit our <a href="https://keepassxc.org/docs/keepassxc-browser-migration">migration guide</a>.</p> - + <p>KeePassHTTP er blitt gammeldags og vil bli fjerna i framtida.<br>Vær vennlig å bytt til KeePassXC-nettleseren isteden! For hjelp med overgangen, besøk vår <a href="https://keepassxc.org/docs/keepassxc-browser-migration">overgangs-håndbok</a>.</p> Cannot bind to privileged ports - + Kan ikke bruke privilegerte porter Cannot bind to privileged ports below 1024! Using default port 19455. - + Kan ikke bruke privilegerte porter under 1024! +Bruker standard port 19455. PasswordGeneratorWidget %p% - + %p% Password: @@ -3106,11 +3130,11 @@ Using default port 19455. strength Password strength - + styrke entropy - + entropi Password @@ -3122,19 +3146,19 @@ Using default port 19455. Upper Case Letters - + Store bokstaver Lower Case Letters - + Små bokstaver Numbers - + Tall Special Characters - + Spesialtegn Extended ASCII @@ -3158,7 +3182,7 @@ Using default port 19455. Wordlist: - + Ordliste: Word Count: @@ -3178,7 +3202,7 @@ Using default port 19455. Accept - + Godta Close @@ -3199,117 +3223,117 @@ Using default port 19455. Poor Password quality - + Dårlig Weak Password quality - + Svak Good Password quality - + God Excellent Password quality - + Utmerket QObject Database not opened - + Database ikke åpnet Database hash not available - + Database-hash er ikke tilgjengelig Client public key not received - + Klients offentlige nøkkel ikke mottatt Cannot decrypt message - + Kan ikke dekryptere melding Timeout or cannot connect to KeePassXC - + Tidsavbrudd eller kan ikke koble til KeePassXC Action cancelled or denied - + Handlingen er kansellert eller avvist Cannot encrypt message or public key not found. Is Native Messaging enabled in KeePassXC? - + Kan ikke kryptere melding eller offentlig nøkkel ikke funnet. Er lokal meldingsutveksling aktivert i KeePassXC? KeePassXC association failed, try again - + Assosiering av KeePassXC mislyktes, prøv igjen Key change was not successful - + Endring av nøkkel var ikke vellykket Encryption key is not recognized - + Krypteringsnøkkel er ikke gjenkjent No saved databases found - + Ingen lagrede databaser funnet Incorrect action - + Feil handling Empty message received - + Tom melding mottatt No URL provided - + Ingen URL oppgitt No logins found - + Ingen innlogginger funnet Unknown error - + Ukjent feil Add a new entry to a database. - + Legg til en ny oppføring til en database. Path of the database. - + Database-sti. Key file of the database. - + Nøkkelfil til databasen. path - + sti Username for the entry. - + Brukernavn for oppføringen. username - + brukernamn URL for the entry. - + URL for oppføringa. URL @@ -3317,171 +3341,177 @@ Using default port 19455. Prompt for the entry's password. - + Spør etter oppføringens passord. Generate a password for the entry. - + Generer et passord til oppføringen. Length for the generated password. - + Lengde for det genererte passordet. length - + lengde Path of the entry to add. - + Sti til oppføringa som skal legges til. Copy an entry's password to the clipboard. - + Kopier passordet i oppføringa til utklippstavlen. Path of the entry to clip. clip = copy to clipboard - + Sti til oppføring som skal klippes ut. Timeout in seconds before clearing the clipboard. - + Forsinkelse i sekund før tømming av utklippstavlen. Edit an entry. - + Rediger oppføring. Title for the entry. - + Tittel for oppføringa. title - + tittel Path of the entry to edit. - + Sti til oppføringa som skal redigeres. Estimate the entropy of a password. - + Beregn entropien til pasordet. Password for which to estimate the entropy. - + Passord for beregning av entropi. Perform advanced analysis on the password. - + Utfør avansert analyse på passordet. Extract and print the content of a database. - + Pakk ut og print innholdet av en database. Path of the database to extract. - + Sti til databasen som skal pakkes ut. Insert password to unlock %1: - + Sett inn passord for å låse opp %1: Failed to load key file %1 : %2 - + Klarte ikke å laste nøkkelfil %1 : %2 WARNING: You are using a legacy key file format which may become unsupported in the future. Please consider generating a new key file. - + ADVARSEL: Nøkkelfilen du bruker er av et eldre filformat som kan miste støtten i framtidige programversjoner. + +Vurder å opprette en ny nøkkelfil. Available commands: - + + +Tilgjengelige kommandoer: + Name of the command to execute. - + Navn på kommandoen som skal utføres. List database entries. - + Liste databaseoppføringer. Path of the group to list. Default is / - + Sti til gruppen som skal listes. Standard er / Find entries quickly. - + Finn oppføring fort. Search term. - + Søkeord. Merge two databases. - + Slå sammen to databaser. Path of the database to merge into. - + Sti til databasen det skal kombineres til. Path of the database to merge from. - + Sti til databasen det skal slås sammen fra. Use the same credentials for both database files. - + Bruk samme identifikasjon for begge databasefilene. Key file of the database to merge from. - + Nøkkelfil til databasen det skal slås sammen fra. Show an entry's information. - + Vis informasjon i oppføringen. 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. - + Navn på attributtene som skal vises. Dette alternativet kan spesifiseres mer enn en gang, med hvert attributt vist ett per linje i den oppgitte rekkefølgen. Hvis ingen attributter er oppgitt, er det gitt en oppsummering av standardattributtene. attribute - + attributt Name of the entry to show. - + Navn på oppføring som skal vises NULL device - + NULL-enhet error reading from device - + Feil ved lesing fra enhet file empty ! - + Tom fil ! + malformed string - + Ugyldig streng missing closing quote - + Manglende avsluttende anførselstegn Group @@ -3505,11 +3535,11 @@ Available commands: Last Modified - + Sist endret Created - + Oppretta Legacy Browser Integration @@ -3521,60 +3551,61 @@ Available commands: YubiKey[%1] Challenge Response - Slot %2 - %3 - + YubiKey[%1] challenge-respons - slot %2 - %3 Press - + Trykk Passive - + Passiv SSH Agent - + SSH-agent Generate a new random diceware passphrase. - + Generer en ny tilfeldig diceware passordfrase. Word count for the diceware passphrase. - + Antall ord i diceware-passordfrasen. count - + Antall Wordlist for the diceware generator. [Default: EFF English] - + Ordliste for diceware-generatoren. +[Standard: EFF engelsk] Generate a new random password. - + Lag et nytt tilfeldig passord. Length of the generated password. - + Lengde på det genererte passordet. Use lowercase characters in the generated password. - + Bruk små bokstaver i det genererte passordet. Use uppercase characters in the generated password. - + Bruk store bokstaver i det genererte passordet. Use numbers in the generated password. - + Bruk tall i det genererte passordet. Use special characters in the generated password. - + Bruk spesialtegn i det genererte passordet. Use extended ASCII in the generated password. @@ -3585,41 +3616,41 @@ Available commands: QtIOCompressor Internal zlib error when compressing: - + Intern zlib-feil under pakking: Error writing to underlying device: - + Feil ved skriving til underliggende enhet: Error opening underlying device: - + Feil ved åpning av underliggende enhet: Error reading data from underlying device: - + Feil ved lesing av data fra underliggende enhet: Internal zlib error when decompressing: - + Intern zlib-feil under utpakking: QtIOCompressor::open The gzip format not supported in this version of zlib. - + Gzip-formatet er ikke støttet i denne versjonen av zlib. Internal zlib error: - + Intern zlib-feil: SearchWidget Search... - + Søk... Search @@ -3627,45 +3658,47 @@ Available commands: Clear - + Tøm Case Sensitive - + Versalsensitiv Limit search to selected group - + Avgrens søket til valgt gruppe Service KeePassXC: New key association request - + KeePassXC: Tilknytningsforespørsel for ny nøkkel. You have received an association request for the above key. If you would like to allow it access to your KeePassXC database give it a unique name to identify and accept it. - + Du har mottatt en tilknytningsforespørsel for den ovennevnte nøkkelen. +Gi den et unikt navn dersom du vil gi den tilgang til KeePassXC-databasen. KeePassXC: Overwrite existing key? - + KeePassXC: Overskrive eksisterende nøkkel? A shared encryption-key with the name "%1" already exists. Do you want to overwrite it? - + En delt krypteringsnøkkel eksisterer allerede med navn "%1". +Ønsker du å overskrive den? KeePassXC: Update Entry - + KeePassXC: Oppdater oppføring. Do you want to update the information in %1 - %2? - + Vil du oppdatere informasjonen i %1 - %2? KeePassXC: Database locked! @@ -3674,7 +3707,8 @@ Do you want to overwrite it? The active database is locked! Please unlock the selected database or choose another one which is unlocked. - + Den aktive databasen er låst! +Lås opp valgt database eller velg en annen som er åpen. KeePassXC: Removed keys from database @@ -3682,7 +3716,7 @@ Please unlock the selected database or choose another one which is unlocked. Successfully removed %n encryption-key(s) from KeePassX/Http Settings. - + Fjerna %n krypteringsnøkkel(er) fra KeePassX/Http-oppføringa.Fjerna %n krypteringsnøkkel(er) fra KeePassX/Http-oppføringa. KeePassXC: No keys found @@ -3690,7 +3724,7 @@ Please unlock the selected database or choose another one which is unlocked. No shared encryption-keys found in KeePassHttp Settings. - + Ingen delte krypteringsnøkler funnet i KeePassHttp-innstillinger KeePassXC: Settings not available! @@ -3698,11 +3732,11 @@ Please unlock the selected database or choose another one which is unlocked. The active database does not contain an entry of KeePassHttp Settings. - + Den aktive databasen mangler oppføring for KeePassHttp-innstillinger. Removing stored permissions... - + Fjerner lagrede tillatelser... Abort @@ -3710,26 +3744,26 @@ Please unlock the selected database or choose another one which is unlocked. KeePassXC: Removed permissions - + KeePassXC: Fjernet tillatelser Successfully removed permissions from %n entries. - + Fjernet tillatelser fra %n oppføringer.Fjernet tillatelser fra %n oppføringer. KeePassXC: No entry with permissions found! - + KeePassXC: Ingen oppføring med tillatelser funnet! The active database does not contain an entry with permissions. - + Den aktive databasen inneholder ikke et oppsett med tillatelser. SettingsWidget Application Settings - + Applikasjonsinnstillinger General @@ -3788,15 +3822,15 @@ Please unlock the selected database or choose another one which is unlocked. Use group icon on entry creation - + Bruk gruppeikon ved ny oppføring Don't mark database as modified for non-data changes (e.g., expanding groups) - + Ikke marker database som endret ved non-dataendringer (f.eks. ekspandere grupper) Hide the Details view - + Skjul detaljvisninga Show a system tray icon @@ -3804,11 +3838,11 @@ Please unlock the selected database or choose another one which is unlocked. Hide window to system tray when minimized - + Skjul vindu til systemstatusfelt når minimert Hide window to system tray instead of app exit - + Skjul vindu til systemstatusfelt i stedet for app-avslutning Dark system tray icon @@ -3824,28 +3858,28 @@ Please unlock the selected database or choose another one which is unlocked. Use entry title to match windows for global Auto-Type - + Bruk tittel i oppføringa for å matche vindu ved global Autoskriv Use entry URL to match windows for global Auto-Type - + Bruk URL i oppføringa for å matche vindu ved global Autoskriv Always ask before performing Auto-Type - + Alltid spør før utførelse av Autoskriv Global Auto-Type shortcut - + Global Autoskriv-hurtigtast Auto-Type delay - + Autoskriv tidsforsinkelse ms Milliseconds - + ms Startup @@ -3857,15 +3891,15 @@ Please unlock the selected database or choose another one which is unlocked. Safely save database files (may be incompatible with Dropbox, etc) - + Sikker lagring av database-filer (kan være uforenelig med Dropbox, etc.) Backup database file before saving - + Sikkerhetskopier database-filen før lagring Entry Management - + Oppførings-administrasjon General @@ -3876,16 +3910,16 @@ Please unlock the selected database or choose another one which is unlocked.SettingsWidgetSecurity Timeouts - + Tidsavbrudd Clear clipboard after - + Slett utklippstavlen etter sec Seconds - + sek Lock databases after inactivity of @@ -3893,7 +3927,7 @@ Please unlock the selected database or choose another one which is unlocked. Convenience - + Bekvemmelighet Lock databases when session is locked or lid is closed @@ -3905,90 +3939,90 @@ Please unlock the selected database or choose another one which is unlocked. Don't require password repeat when it is visible - + Ikke krev gjentakelse av passord ved klartekst-visning Show passwords in cleartext by default - + Vis passord i klartekst som standard Hide passwords in the preview panel - + Skjul passord i forhåndsvisnings-panelet Hide entry notes by default - + Skjul notater i oppføringa som standard Privacy - + Personvern Use Google as fallback for downloading website icons - + Bruk Google som reserve ved nedlasting av nettsted-ikon Re-lock previously locked database after performing Auto-Type - + Lås tidligere låst database etter utført Autoskriv SetupTotpDialog Setup TOTP - + Oppsett TOTP Key: - + Nøkkel: Default RFC 6238 token settings - + Standard RFC 6238 token innstillinger Steam token settings - + Steam token-innstillinger Use custom settings - + Bruk selvvalgt oppsett Note: Change these settings only if you know what you are doing. - + Merk: Endre disse innstillingene bare dersom du vet hva du gjør. Time step: - + Tidsintervall: 8 digits - + 8 siffer 6 digits - + 6 siffer Code size: - + Kodestørrelse: sec Seconds - + sek TotpDialog Timed Password - + Tidsbasert passord 000000 - + 000000 Copy @@ -3996,11 +4030,11 @@ Please unlock the selected database or choose another one which is unlocked. Expires in - + Utløper om seconds - + sekunder @@ -4045,15 +4079,15 @@ Please unlock the selected database or choose another one which is unlocked.main Remove an entry from the database. - + Fjern oppføring fra databasen. Path of the database. - + Database-sti. Path of the entry to remove. - + Sti til oppføring som skal fjernes. KeePassXC - cross-platform password manager @@ -4061,23 +4095,23 @@ Please unlock the selected database or choose another one which is unlocked. filenames of the password databases to open (*.kdbx) - + Filnavn på passord-databasene som skal åpnes (*.kdbx) path to a custom config file - + Sti til tilpasset konfigurasjonsfil key file of the database - + Database-nøkkelfil read password of the database from stdin - + Les database-passord fra stdin Parent window handle - + Adresse til foreldre-vindu \ No newline at end of file diff --git a/share/translations/keepassx_nl_NL.ts b/share/translations/keepassx_nl_NL.ts index 9f365e6ee..15bd21554 100644 --- a/share/translations/keepassx_nl_NL.ts +++ b/share/translations/keepassx_nl_NL.ts @@ -375,7 +375,7 @@ Geef aan of je toegang wilt verlenen of niet. We're sorry, but KeePassXC-Browser is not supported for Snap releases at the moment. - Het spijt ons, maar KeePassXC-Browser wordt momenteel niet ondersteund voor tussentijdse versies. + Het spijt ons, maar KeePassXC-Browser wordt momenteel niet ondersteund voor Snap releases. @@ -1361,7 +1361,7 @@ Wil je de wijzigingen samenvoegen? Press reveal to view or edit - Druk Tonen om te bekijken of bewerken + Druk Weergeven om te bekijken of bewerken Tomorrow @@ -1416,7 +1416,7 @@ Wil je de wijzigingen samenvoegen? Reveal - Tonen + Weergeven Attachments @@ -1470,7 +1470,7 @@ Wil je de wijzigingen samenvoegen? EditEntryWidgetHistory Show - Tonen + Weergeven Restore @@ -1513,7 +1513,7 @@ Wil je de wijzigingen samenvoegen? Toggle the checkbox to reveal the notes section. - Schakelen aan om notities te tonen. + Selecteer om notities weer te geven. Username: @@ -3483,7 +3483,7 @@ Beschikbare opdrachten: 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. - Namen van de te tonen kenmerken. Deze optie kan meer dan eens worden opgegeven, waarbij elk kenmerk op een regel wordt getoond in de opgegeven volgorde. Als er geen kenmerken worden opgegeven, wordt een samenvatting van de standaardkenmerken gegeven. + Namen van de weer te geven kenmerken. Deze optie kan meer dan eens worden opgegeven, waarbij elk kenmerk op een regel wordt getoond in de opgegeven volgorde. Als er geen kenmerken worden opgegeven, wordt een samenvatting van de standaardkenmerken gegeven. attribute @@ -3837,7 +3837,7 @@ Ontgrendel de geselecteerde database of kies een ontgrendelde database. Show a system tray icon - Icoon in het systeemvak tonen + Icoon in het systeemvak weergeven Hide window to system tray when minimized diff --git a/share/translations/keepassx_pl.ts b/share/translations/keepassx_pl.ts index 307ace9fd..1e9608734 100644 --- a/share/translations/keepassx_pl.ts +++ b/share/translations/keepassx_pl.ts @@ -3548,7 +3548,7 @@ Dostępne polecenia: Legacy Browser Integration - Integracja ze starą przeglądarką + Przestarzała integracja z przeglądarką Browser Integration diff --git a/share/translations/keepassx_pt_BR.ts b/share/translations/keepassx_pt_BR.ts index a2d258e6a..1295e117d 100644 --- a/share/translations/keepassx_pt_BR.ts +++ b/share/translations/keepassx_pt_BR.ts @@ -23,11 +23,11 @@ <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">See Contributions on GitHub</a> - <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">Ver Colaborações no GitHub</a> + <a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors">Ver colaborações no GitHub</a> Debug Info - Informações de Depuração + Informações de depuração Include the following information whenever you report a bug: @@ -69,11 +69,11 @@ Kernel: %3 %4 Project Maintainers: - Mantedores do Projeto: + Mantedores do projeto: Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. - A equipe KeePassXC agradece especialmente a debfx pela criação do KeePassX original. + A equipe do KeePassXC agradece especialmente a debfx pela criação do KeePassX original. Build Type: %1 @@ -111,7 +111,7 @@ Selecione se deseja permitir o acesso. AgentSettingsWidget Enable SSH Agent (requires restart) - Habilitar Agente SSH (requer reinicialização) + Habilitar agente SSH (requer reinicialização) @@ -122,27 +122,27 @@ Selecione se deseja permitir o acesso. Auto-Type - KeePassXC - Auto-Digitação - KeePassXC + Autodigitação - KeePassXC Auto-Type - Auto-Digitação + Autodigitação The Syntax of your Auto-Type statement is incorrect! - A sintaxe da sua sequência de Auto-Digitação está incorreta! + A sintaxe da sua sequência de autodigitação está incorreta! This Auto-Type command contains a very long delay. Do you really want to proceed? - Este comando de Auto-Digitação contém um tempo de espera muito longo. Você tem certeza que deseja continuar? + Este comando de autodigitação contém um tempo de espera muito longo. Você tem certeza de que deseja continuar? This Auto-Type command contains very slow key presses. Do you really want to proceed? - Este comando Autotipo contém pressionamentos de teclas muito lentos. Você realmente deseja prosseguir? + Este comando de autodigitação contém pressionamentos de teclas muito lentos. Você tem certeza de que deseja continuar? This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed? - Este comando Auto-Type contém os argumentos que são repetidos muitas vezes. Você realmente deseja prosseguir? + Este comando de autodigitação contém parâmetros que são repetidos muitas vezes. Você tem certeza de que deseja continuar? @@ -183,11 +183,11 @@ Selecione se deseja permitir o acesso. AutoTypeSelectDialog Auto-Type - KeePassXC - Auto-Digitação - KeePassXC + Autodigitação - KeePassXC Select entry to Auto-Type: - Escolha uma entrada para Auto-Digitar: + Escolha uma entrada para digitar automaticamente: diff --git a/share/translations/keepassx_ro.ts b/share/translations/keepassx_ro.ts index 9c5147380..5a6c5ae5c 100644 --- a/share/translations/keepassx_ro.ts +++ b/share/translations/keepassx_ro.ts @@ -360,11 +360,11 @@ Please select whether you want to allow access. Executable Files (*.exe);;All Files (*.*) - + Fișiere Executabile (*.exe);;Toate Fișierele (*.*) Executable Files (*) - + Fișiere Executabile (*) Select custom proxy location @@ -390,11 +390,11 @@ give it a unique name to identify and accept it. Save and allow access - + Salvează și permite acces KeePassXC: Overwrite existing key? - + KeePassXC: Suprascriere cheie existentă? A shared encryption key with the name "%1" already exists. @@ -593,7 +593,7 @@ Please consider generating a new key file. Codec - + Codec Text is qualified by @@ -641,7 +641,7 @@ Please consider generating a new key file. Imported from CSV file - + Importat din fișier CSV Original data: @@ -797,7 +797,7 @@ You can now save it. Encryption - + Criptare Number of rounds too high @@ -816,7 +816,7 @@ If you keep this number, your database may take hours or days (or even longer) t Cancel - + Anulare Number of rounds too low @@ -852,7 +852,7 @@ If you keep this number, your database may be too easy to crack! DatabaseSettingsWidgetEncryption Encryption Algorithm: - + Algoritm Criptare: AES: 256 Bit (default) @@ -864,7 +864,7 @@ If you keep this number, your database may be too easy to crack! Key Derivation Function: - + Funcție Derivare Cheie: Transform rounds: @@ -876,18 +876,18 @@ If you keep this number, your database may be too easy to crack! Memory Usage: - + Utilizare Memorie: Parallelism: - + Paralelism: DatabaseSettingsWidgetGeneral Database Meta Data - + Meta Date Bază de Date Database name: @@ -903,7 +903,7 @@ If you keep this number, your database may be too easy to crack! History Settings - + Setări Istoric Max. history items: @@ -923,7 +923,7 @@ If you keep this number, your database may be too easy to crack! Additional Database Settings - + Setări Adiționale Bază de Date Enable &compression (recommended) @@ -1006,7 +1006,7 @@ Salvați modificările? Writing the database failed. - + Scrierea în baza de date a eșuat. Passwords @@ -1141,11 +1141,11 @@ Disable safe saves and try again? File has changed - + Fișierul a fost modificat The database file has changed. Do you want to load the changes? - + Fișierul bazei de date a fost modificat. Doriți să încărcați ultimele modificări? Merge Request @@ -1264,7 +1264,7 @@ Do you want to merge your changes? Icon - + Icon Auto-Type @@ -1583,7 +1583,7 @@ Do you want to merge your changes? Icon - + Icon Properties @@ -1653,11 +1653,11 @@ Do you want to merge your changes? Add custom icon - + Adaugă icon personalizat Delete custom icon - + Șterge icon personalizat Download favicon @@ -1665,7 +1665,7 @@ Do you want to merge your changes? Unable to fetch favicon. - + Nu pot descărca favicon. Hint: You can enable Google as a fallback under Tools>Settings>Security @@ -1685,11 +1685,11 @@ Do you want to merge your changes? Can't read icon - + Nu pot citi icon Custom icon already exists - + Icon personalizat deja există Confirm Delete @@ -1945,7 +1945,7 @@ This may cause the affected plugins to malfunction. Attachments (icon) - + Atașamente (icon) @@ -2849,7 +2849,7 @@ This is a one-way migration. You won't be able to open the imported databas Writing the database failed. - + Scrierea în baza de date a eșuat. Please touch the button on your YubiKey! @@ -3645,7 +3645,7 @@ give it a unique name to identify and accept it. KeePassXC: Overwrite existing key? - + KeePassXC: Suprascriere cheie existentă? A shared encryption-key with the name "%1" already exists. @@ -3918,7 +3918,7 @@ Please unlock the selected database or choose another one which is unlocked. Use Google as fallback for downloading website icons - + Folosește Google ca variantă de rezervă pentru descărcare favicon site Re-lock previously locked database after performing Auto-Type diff --git a/share/translations/keepassx_uk.ts b/share/translations/keepassx_uk.ts index b244f55c6..cf43f88ff 100644 --- a/share/translations/keepassx_uk.ts +++ b/share/translations/keepassx_uk.ts @@ -35,7 +35,7 @@ Copy to clipboard - Скопіювати у буфер обміну + Скопіювати в кишеню Version %1 @@ -73,12 +73,13 @@ Kernel: %3 %4 Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. - + Команда KeePassXC щиро дякує debfx за створення первісної версії KeePassX. Build Type: %1 - + Тип збірки: %1 + @@ -103,7 +104,7 @@ Kernel: %3 %4 %1 has requested access to passwords for the following item(s). Please select whether you want to allow access. %1 запросила доступ до гасел для таких записів(-у). -Будь ласка, вкажіть чи хочете ви дозволити доступ? +Будь ласка, вкажіть чи хочете Ви дозволити доступ? @@ -211,7 +212,7 @@ Please select whether you want to allow access. %1 has requested access to passwords for the following item(s). Please select whether you want to allow access. %1 запросила доступ до гасел для таких записів(-у). -Будь ласка, вкажіть чи хочете ви дозволити доступ? +Будь ласка, вкажіть чи хочете Ви дозволити доступ? @@ -374,7 +375,7 @@ Please select whether you want to allow access. We're sorry, but KeePassXC-Browser is not supported for Snap releases at the moment. - + Вибачте, але переглядач KeePassXC поки що не працює у версіях Snap. @@ -443,11 +444,11 @@ Please unlock the selected database or choose another one which is unlocked. KeePassXC: Removed keys from database - KeePassXC: ключі видалені зі сховища + KeePassXC: ключі видалено зі сховища Successfully removed %n encryption key(s) from KeePassXC settings. - + Успішно видалено %n шифрувальний ключ з налаштувань KeePassXC.Успішно видалено %n шифрувальні ключа з налаштувань KeePassXC.Успішно видалено %n шифрувальних ключів з налаштувань KeePassXC. Removing stored permissions… @@ -459,11 +460,11 @@ Please unlock the selected database or choose another one which is unlocked. KeePassXC: Removed permissions - KeePassXC: привілеї видалені + KeePassXC: привілеї видалено Successfully removed permissions from %n entry(s). - + Успішно видалено привілеї для %n запису.Успішно видалено привілеї для %n записів.Успішно видалено привілеї для %n записів. KeePassXC: No entry with permissions found! @@ -788,7 +789,7 @@ Please consider generating a new key file. Database opened fine. Nothing to do. - Сховище відкрите без помилок. Обробка не потрібна. + Сховище відкрито без помилок. Обробка не потрібна. Success @@ -797,8 +798,8 @@ Please consider generating a new key file. The database has been successfully repaired You can now save it. - Лагодження сховища успішно завершене. -Тепер ви можете його зберегти. + Лагодження сховища успішно завершено. +Тепер Ви можете його зберегти. Unable to repair the database. @@ -830,7 +831,7 @@ If you keep this number, your database may take hours or days (or even longer) t Understood, keep number - Зрозуміло, зберігайте число + Зрозуміло, кількість залишено Cancel @@ -860,12 +861,12 @@ If you keep this number, your database may be too easy to crack! MiB Abbreviation for Mebibytes (KDF settings) - + МіБМіБМіБ thread(s) Threads for parallel execution (KDF settings) - + потікпотокипотоків @@ -1382,15 +1383,15 @@ Do you want to merge your changes? Apply generated password? - + Застосувати створене гасло? Do you want to apply the generated password to this entry? - + Бажаєте застосувати створене гасло до цього запису? Entry updated successfully. - + Запис успішно оновлено. @@ -1425,11 +1426,11 @@ Do you want to merge your changes? Foreground Color: - + Колір переднього плану: Background Color: - + Колір тла: @@ -1464,7 +1465,7 @@ Do you want to merge your changes? Use a specific sequence for this association: - + Використовувати певну послідовність для цієї прив'язки: @@ -1569,7 +1570,7 @@ Do you want to merge your changes? Copy to clipboard - Скопіювати у буфер обміну + Скопіювати в кишеню Private key @@ -1746,7 +1747,7 @@ Do you want to merge your changes? Plugin Data - + Дані модуля Remove @@ -1754,20 +1755,21 @@ Do you want to merge your changes? Delete plugin data? - + Видалити дані модуля? Do you really want to delete the selected plugin data? This may cause the affected plugins to malfunction. - + Ви дійсно хочете видалити всі дані позначеного модуля? +Це може призвести до порушень у роботі інших модулів. Key - + Ключ Value - + Значення @@ -1817,7 +1819,7 @@ This may cause the affected plugins to malfunction. Are you sure you want to remove %n attachment(s)? - + Ви дійсно хочете видалити %n вкладення?Ви дійсно хочете видалити %n вкладення?Ви дійсно хочете видалити %n вкладень? Confirm Remove @@ -1976,7 +1978,7 @@ This may cause the affected plugins to malfunction. Attachments (icon) - + Вкладення (значок) @@ -2075,7 +2077,7 @@ This may cause the affected plugins to malfunction. Wrong key or database file is corrupt. - Неправильний ключ або файл сховища пошкоджено. + Неправильний ключ або пошкоджене сховище. @@ -2221,7 +2223,7 @@ This may cause the affected plugins to malfunction. Invalid symmetric cipher IV size. IV = Initialization Vector for symmetric cipher - Хибний розмір IV симетричного шифру. + Хибний розмір симетричного шифру IV. Unable to calculate master key @@ -2441,11 +2443,11 @@ This is a one-way migration. You won't be able to open the imported databas Unsupported encryption algorithm. - Алгоритм шифрування не підтримується. + Цей алгоритм шифрування не підтримується. Unsupported KeePass database version. - Версія сховища KeePass не підтримується. + Ця версія сховища KeePass не підтримується. Unable to read encryption IV @@ -2486,7 +2488,7 @@ This is a one-way migration. You won't be able to open the imported databas Wrong key or database file is corrupt. - Неправильний ключ або файл сховища пошкоджено. + Неправильний ключ або пошкоджене сховище. Key transformation failed @@ -2655,7 +2657,7 @@ This is a one-way migration. You won't be able to open the imported databas Copy att&ribute to clipboard - Копіювати атрибут до буферу обміну + Копіювати атрибут до кишені Time-based one-time password @@ -2743,7 +2745,7 @@ This is a one-way migration. You won't be able to open the imported databas &Find - Пошук + Знайти Copy &username @@ -2751,7 +2753,7 @@ This is a one-way migration. You won't be able to open the imported databas Copy username to clipboard - Копіювати ім’я користувача в буфер обміну + Копіювати ім’я користувача в кишеню Cop&y password @@ -2759,7 +2761,7 @@ This is a one-way migration. You won't be able to open the imported databas Copy password to clipboard - Копіювати гасло в буфер обміну + Копіювати гасло в кишеню &Settings @@ -2978,23 +2980,23 @@ This version is not meant for production use. Unsupported key type: %1 - + Непідтримуваний вид ключа: %1 Unknown cipher: %1 - + Невідомий шифр: %1 Cipher IV is too short for MD5 kdf - + Шифр IV занадто короткий для ФОК MD5 Unknown KDF: %1 - + Невідома ФОК: %1 Unknown key type: %1 - + Невідомий тип ключа: %1 @@ -3372,7 +3374,7 @@ Using default port 19455. Timeout in seconds before clearing the clipboard. - Час очікування у + Час очікування перед очищенням кишені. Edit an entry. @@ -3468,7 +3470,7 @@ Available commands: Path of the database to merge from. - Шлях до сховища, яке об'єднати. + Шлях до сховища, яке підлягає об'єднанню. Use the same credentials for both database files. @@ -3476,7 +3478,7 @@ Available commands: Key file of the database to merge from. - Файл ключа для сховища, з якого треба взяти дані для об'єднання. + Файл ключа для сховища, яке підлягає об'єднанню. Show an entry's information. @@ -3570,48 +3572,49 @@ Available commands: Generate a new random diceware passphrase. - + Створити новий вираз гасла методом гральних кісточок (diceware). Word count for the diceware passphrase. - + Кількість слів у виразі гасла. count - + кількість Wordlist for the diceware generator. [Default: EFF English] - + Список слів для виробника гасел методом diceware. +[Типово: англійська версія EFF] Generate a new random password. - + Створити нове випадкове гасло. Length of the generated password. - + Довжина створюваного гасла. Use lowercase characters in the generated password. - + Використовувати малі літери для створення гасла. Use uppercase characters in the generated password. - + Використовувати великі літери для створення гасла. Use numbers in the generated password. - + Використовувати числа для створення гасла. Use special characters in the generated password. - + Використовувати спеціальні символи для створення гасла. Use extended ASCII in the generated password. - + Використовувати розширені ASCII для створення гасла. @@ -3652,7 +3655,7 @@ Available commands: SearchWidget Search... - Шукати... + Знайти... Search @@ -3715,11 +3718,11 @@ Please unlock the selected database or choose another one which is unlocked. KeePassXC: Removed keys from database - KeePassXC: ключі видалені зі сховища + KeePassXC: ключі видалено зі сховища Successfully removed %n encryption-key(s) from KeePassX/Http Settings. - Успішно видалив %n шифрувальний ключ з HTTP налаштувань KeePassX.Успішно видалив %n шифрувальних ключа з HTTP налаштувань KeePassX.Успішно видалив %n шифрувальних ключів з HTTP налаштувань KeePassX. + Успішно видалено %n шифрувальний ключ з HTTP налаштувань KeePassX.Успішно видалено %n шифрувальних ключа з HTTP налаштувань KeePassX.Успішно видалено %n шифрувальних ключів з HTTP налаштувань KeePassX. KeePassXC: No keys found @@ -3747,11 +3750,11 @@ Please unlock the selected database or choose another one which is unlocked. KeePassXC: Removed permissions - KeePassXC: привілеї видалені + KeePassXC: привілеї видалено Successfully removed permissions from %n entries. - Успішно видалив привілеї для %n запису.Успішно видалив привілеї для %n записів.Успішно видалив привілеї для %n записів. + Успішно видалено привілеї для %n запису.Успішно видалено привілеї для %n записів.Успішно видалено привілеї для %n записів. KeePassXC: No entry with permissions found! @@ -3817,7 +3820,7 @@ Please unlock the selected database or choose another one which is unlocked. Minimize when copying to clipboard - Згортати при копіюванні до буфера обміну + Згортати при копіюванні до кишені Minimize window at application startup @@ -3917,7 +3920,7 @@ Please unlock the selected database or choose another one which is unlocked. Clear clipboard after - Очищати буфер обміну через + Очищати кишеню через sec @@ -3966,7 +3969,7 @@ Please unlock the selected database or choose another one which is unlocked. Re-lock previously locked database after performing Auto-Type - + Заблоковувати попередньо заблоковане сховище після завершення автозаповнення diff --git a/share/translations/keepassx_zh_CN.ts b/share/translations/keepassx_zh_CN.ts index 5fd915e92..ad90b9e8a 100644 --- a/share/translations/keepassx_zh_CN.ts +++ b/share/translations/keepassx_zh_CN.ts @@ -73,7 +73,7 @@ CPU 架构:%2 Special thanks from the KeePassXC team go to debfx for creating the original KeePassX. - + KeePassXC 团队特别感谢 debfx 开发了最初版 KeePassX Build Type: %1 @@ -255,7 +255,7 @@ Please select whether you want to allow access. Show a &notification when credentials are requested Credentials mean login data requested via browser extension - + 当请求凭据时显示通知 (&N) Re&quest to unlock the database if it is locked @@ -280,12 +280,12 @@ Please select whether you want to allow access. 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 - + 根据用户名排列匹配的凭据 &Disconnect all browsers @@ -293,7 +293,7 @@ Please select whether you want to allow access. Forget all remembered &permissions - + 取消所有记住的权限 Advanced @@ -302,7 +302,7 @@ Please select whether you want to allow access. Never &ask before accessing credentials Credentials mean login data requested via browser extension - + 读取凭据时不再询问 Never ask before &updating credentials @@ -316,7 +316,7 @@ Please select whether you want to allow access. Searc&h in all opened databases for matching credentials Credentials mean login data requested via browser extension - + 在所有打开的的数据库中搜索相符的凭据 Automatically creating or updating string fields is not supported. @@ -328,11 +328,11 @@ Please select whether you want to allow access. Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup. - + 启动时自动将 KeePassXC 或 keepassxc-proxy 执行文件路径更新为 native messaging 脚本。 Update &native messaging manifest files at startup - + 启动时更新 native messaging 的 manifest 文件 Support a proxy application between KeePassXC and browser extension. @@ -340,16 +340,16 @@ Please select whether you want to allow access. Use a &proxy application between KeePassXC and browser extension - + 在 KeePassXC 与浏览器扩展之间使用代理程序 Use a custom proxy location if you installed a proxy manually. - + 如果手工安装了代理,请设置自定义代理的路径。 Use a &custom proxy location Meant is the proxy for KeePassXC-Browser - + 设置自定义代理路径 Browse... -- cgit v1.2.3