diff -pruN 24.08.1-1/.flatpak-manifest.json 25.03.90-1/.flatpak-manifest.json
--- 24.08.1-1/.flatpak-manifest.json	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/.flatpak-manifest.json	2025-03-27 10:13:04.000000000 +0000
@@ -1,10 +1,9 @@
 {
     "id": "org.kde.keysmith",
     "runtime": "org.kde.Platform",
-    "runtime-version": "6.7",
+    "runtime-version": "6.8",
     "sdk": "org.kde.Sdk",
     "command": "keysmith",
-    "rename-icon": "keysmith",
     "tags": ["nightly"],
     "desktop-file-name-suffix": " (Nightly)",
     "finish-args": [
@@ -13,8 +12,6 @@
         "--socket=wayland",
         "--device=dri"
     ],
-    "separate-locales": false,
-
     "modules": [
         {
             "name": "libsodium",
diff -pruN 24.08.1-1/.git-blame-ignore-revs 25.03.90-1/.git-blame-ignore-revs
--- 24.08.1-1/.git-blame-ignore-revs	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/.git-blame-ignore-revs	2025-03-27 10:13:04.000000000 +0000
@@ -1,2 +1,4 @@
+# SPDX-License-Identifier: CC0-1.0
+# SPDX-FileCopyrightText: none
 # clang-format
 68a229f6f633ff707de6ff2acf28033258bcd342
diff -pruN 24.08.1-1/.gitignore 25.03.90-1/.gitignore
--- 24.08.1-1/.gitignore	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/.gitignore	2025-03-27 10:13:04.000000000 +0000
@@ -14,6 +14,8 @@
 .clangd
 .cache
 .idea
+*.kate-swp
+*.kdev4
 .vscode
 /cmake-build*
 /CMakeLists.txt.user
diff -pruN 24.08.1-1/.gitlab-ci.yml 25.03.90-1/.gitlab-ci.yml
--- 24.08.1-1/.gitlab-ci.yml	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/.gitlab-ci.yml	2025-03-27 10:13:04.000000000 +0000
@@ -5,7 +5,10 @@ include:
   - project: sysadmin/ci-utilities
     file:
       - /gitlab-templates/linux-qt6.yml
+      - /gitlab-templates/linux-qt6-next.yml
       - /gitlab-templates/freebsd-qt6.yml
       - /gitlab-templates/android-qt6.yml
       - /gitlab-templates/flatpak.yml
       - /gitlab-templates/craft-android-qt6-apks.yml
+      - /gitlab-templates/xml-lint.yml
+      - /gitlab-templates/yaml-lint.yml
diff -pruN 24.08.1-1/.kde-ci.yml 25.03.90-1/.kde-ci.yml
--- 24.08.1-1/.kde-ci.yml	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/.kde-ci.yml	2025-03-27 10:13:04.000000000 +0000
@@ -2,20 +2,22 @@
 # SPDX-License-Identifier: CC0-1.0
 
 Dependencies:
-- 'on': ['@all']
-  'require':
+ - 'on': ['@all']
+   'require':
     'frameworks/extra-cmake-modules': '@latest-kf6'
     'frameworks/ki18n': '@latest-kf6'
     'frameworks/kirigami': '@latest-kf6'
     'frameworks/kconfig': '@latest-kf6'
+    'frameworks/kcoreaddons': '@latest-kf6'
     'frameworks/kguiaddons': '@latest-kf6'
     'frameworks/kwidgetsaddons': '@latest-kf6'
+    'frameworks/prison': '@latest-kf6'
 
-- 'on': ['Linux', 'FreeBSD']
-  'require':
+ - 'on': ['Linux', 'FreeBSD']
+   'require':
     'frameworks/kdbusaddons': '@latest-kf6'
     'frameworks/kwindowsystem': '@latest-kf6'
     'frameworks/qqc2-desktop-style': '@latest-kf6'
 
 Options:
-  require-passing-tests-on: [ 'Linux', 'FreeBSD' ]
+ require-passing-tests-on: ['Linux', 'FreeBSD']
diff -pruN 24.08.1-1/.reuse/dep5 25.03.90-1/.reuse/dep5
--- 24.08.1-1/.reuse/dep5	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/.reuse/dep5	1970-01-01 00:00:00.000000000 +0000
@@ -1,28 +0,0 @@
-Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
-Upstream-Name: Keysmith
-Source: https://invent.kde.org/kde/keysmith.git
-
-Files: android/res/drawable/keysmith.png
-Copyright: 2020 Nicolas Fella <nicolas.fella@gmx.de>
-Copyright: 2020 Carson Black <uhhadd@gmail.com>
-License: CC-BY-SA-4.0
-
-# Currently po files do not use the SPDX format, but they do have some copyright information
-# As general contact, we attribute copyright to Localization team, individual copyright
-# information available in the files itself.
-
-Files: po/*/*.po
-License: GPL-3.0-or-later
-Copyright: 2020 KDE Localization team <kde-i18n-doc@kde.org>
-
-Files: po/po/ca/keysmith.po
-License: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
-Copyright: 2020 KDE Localization team <kde-i18n-doc@kde.org>
-
-Files: po/ca@valencia/keysmith.po
-License: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
-Copyright: 2020 KDE Localization team <kde-i18n-doc@kde.org>
-
-Files: po/uk/keysmith.po
-License: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
-Copyright: 2020 KDE Localization team <kde-i18n-doc@kde.org>
diff -pruN 24.08.1-1/CMakeLists.txt 25.03.90-1/CMakeLists.txt
--- 24.08.1-1/CMakeLists.txt	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/CMakeLists.txt	2025-03-27 10:13:04.000000000 +0000
@@ -7,14 +7,14 @@
 cmake_minimum_required(VERSION 3.16)
 
 # KDE Applications version, managed by release script.
-set(RELEASE_SERVICE_VERSION_MAJOR "24")
-set(RELEASE_SERVICE_VERSION_MINOR "08")
-set(RELEASE_SERVICE_VERSION_MICRO "1")
+set(RELEASE_SERVICE_VERSION_MAJOR "25")
+set(RELEASE_SERVICE_VERSION_MINOR "03")
+set(RELEASE_SERVICE_VERSION_MICRO "90")
 set(RELEASE_SERVICE_VERSION "${RELEASE_SERVICE_VERSION_MAJOR}.${RELEASE_SERVICE_VERSION_MINOR}.${RELEASE_SERVICE_VERSION_MICRO}")
 
 project(keysmith VERSION ${RELEASE_SERVICE_VERSION})
 
-set(KF_MIN_VERSION "6.0.0")
+set(KF_MIN_VERSION "6.8.0")
 set(QT_MIN_VERSION "6.5.0")
 set(SODIUM_MIN_VERSION "1.0.16")
 
@@ -35,13 +35,24 @@ include(ECMAddAndroidApk)
 include(KDEClangFormat)
 include(KDEGitCommitHooks)
 include(ECMQmlModule)
+include(ECMDeprecationSettings)
+include(ECMFindQmlModule)
 
 set(CMAKE_CXX_STANDARD 17)
 set(CMAKE_CXX_STANDARD_REQUIRED ON)
 
 find_package(Qt6 ${QT_MIN_VERSION} REQUIRED NO_MODULE COMPONENTS Core Quick Gui Svg QuickControls2 Concurrent)
 find_package(KF6Kirigami ${KF_MIN_VERSION} REQUIRED)
+find_package(KF6CoreAddons ${KF_MIN_VERSION} REQUIRED)
 find_package(KF6I18n ${KF_MIN_VERSION} REQUIRED)
+find_package(KF6Config ${KF_MIN_VERSION} REQUIRED)
+
+ecm_find_qmlmodule(org.kde.prison.scanner REQUIRED)
+
+ecm_set_disabled_deprecation_versions(QT 6.0.0
+    KF 6.12.0
+)
+
 
 if(NOT ANDROID)
     find_package(Qt6 ${QT_MIN_VERSION} REQUIRED NO_MODULE COMPONENTS Widgets)
@@ -54,6 +65,12 @@ if(NOT BUILD_EXTERNAL)
     find_package(sodium ${SODIUM_MIN_VERSION} REQUIRED)
 endif()
 
+find_package(OpenSSL)
+set_package_properties(OpenSSL PROPERTIES
+    TYPE REQUIRED
+    PURPOSE "Encrypted communications"
+)
+
 if (BUILD_DBUS_INTERFACE OR (NOT ANDROID AND NOT DEFINED BUILD_DBUS_INTERFACE))
     find_package(KF6DBusAddons ${KF_MIN_VERSION} REQUIRED)
     find_package(KF6WindowSystem ${KF_MIN_VERSION} REQUIRED)
@@ -79,7 +96,7 @@ if (BUILD_TESTING)
 endif()
 
 install(FILES org.kde.keysmith.desktop DESTINATION ${KDE_INSTALL_APPDIR})
-install(FILES keysmith.svg DESTINATION ${KDE_INSTALL_FULL_ICONDIR}/hicolor/scalable/apps/)
+install(FILES org.kde.keysmith.svg DESTINATION ${KDE_INSTALL_FULL_ICONDIR}/hicolor/scalable/apps/)
 install(FILES org.kde.keysmith.appdata.xml DESTINATION ${KDE_INSTALL_METAINFODIR})
 
 feature_summary(WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES)
diff -pruN 24.08.1-1/LICENSES/BSD-3-Clause.txt 25.03.90-1/LICENSES/BSD-3-Clause.txt
--- 24.08.1-1/LICENSES/BSD-3-Clause.txt	1970-01-01 00:00:00.000000000 +0000
+++ 25.03.90-1/LICENSES/BSD-3-Clause.txt	2025-03-27 10:13:04.000000000 +0000
@@ -0,0 +1,11 @@
+Copyright (c) <year> <owner>. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff -pruN 24.08.1-1/REUSE.toml 25.03.90-1/REUSE.toml
--- 24.08.1-1/REUSE.toml	1970-01-01 00:00:00.000000000 +0000
+++ 25.03.90-1/REUSE.toml	2025-03-27 10:13:04.000000000 +0000
@@ -0,0 +1,39 @@
+version = 1
+SPDX-PackageName = "Keysmith"
+SPDX-PackageDownloadLocation = "https://invent.kde.org/kde/keysmith.git"
+
+[[annotations]]
+path = "android/res/drawable/keysmith.png"
+precedence = "aggregate"
+SPDX-FileCopyrightText = "2020 Nicolas Fella <nicolas.fella@gmx.de>, 2020 Carson Black <uhhadd@gmail.com>"
+SPDX-License-Identifier = "CC-BY-SA-4.0"
+
+[[annotations]]
+path = "po/**/**.po"
+precedence = "aggregate"
+SPDX-FileCopyrightText = "2020 KDE Localization team <kde-i18n-doc@kde.org>"
+SPDX-License-Identifier = "GPL-3.0-or-later"
+
+[[annotations]]
+path = "po/po/ca/keysmith.po"
+precedence = "aggregate"
+SPDX-FileCopyrightText = "2020 KDE Localization team <kde-i18n-doc@kde.org>"
+SPDX-License-Identifier = "LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL"
+
+[[annotations]]
+path = "po/ca@valencia/keysmith.po"
+precedence = "aggregate"
+SPDX-FileCopyrightText = "2020 KDE Localization team <kde-i18n-doc@kde.org>"
+SPDX-License-Identifier = "LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL"
+
+[[annotations]]
+path = "po/uk/keysmith.po"
+precedence = "aggregate"
+SPDX-FileCopyrightText = "2020 KDE Localization team <kde-i18n-doc@kde.org>"
+SPDX-License-Identifier = "LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL"
+
+[[annotations]]
+path = "android/keysmith-playstore.png"
+precedence = "aggregate"
+SPDX-FileCopyrightText = "2024 Alois Spitzbart <spitz234@hotmail.com>"
+SPDX-License-Identifier = "CC-BY-SA-4.0"
diff -pruN 24.08.1-1/android/build.gradle 25.03.90-1/android/build.gradle
--- 24.08.1-1/android/build.gradle	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/android/build.gradle	2025-03-27 10:13:04.000000000 +0000
@@ -12,7 +12,7 @@ buildscript {
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:7.4.1'
+        classpath 'com.android.tools.build:gradle:8.6.0'
     }
 }
 
Binary files 24.08.1-1/android/keysmith-playstore.png and 25.03.90-1/android/keysmith-playstore.png differ
diff -pruN 24.08.1-1/autotests/account/storage/hotp-counter-update.cpp 25.03.90-1/autotests/account/storage/hotp-counter-update.cpp
--- 24.08.1-1/autotests/account/storage/hotp-counter-update.cpp	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/autotests/account/storage/hotp-counter-update.cpp	2025-03-27 10:13:04.000000000 +0000
@@ -10,10 +10,10 @@
 
 #include <QDateTime>
 #include <QFile>
+#include <QList>
 #include <QSignalSpy>
 #include <QString>
 #include <QTest>
-#include <QVector>
 #include <QtDebug>
 
 static QString testIniResource(QLatin1String("test.ini"));
diff -pruN 24.08.1-1/autotests/account/storage/storage-default-lifecycle.cpp 25.03.90-1/autotests/account/storage/storage-default-lifecycle.cpp
--- 24.08.1-1/autotests/account/storage/storage-default-lifecycle.cpp	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/autotests/account/storage/storage-default-lifecycle.cpp	2025-03-27 10:13:04.000000000 +0000
@@ -9,10 +9,10 @@
 
 #include <QDateTime>
 #include <QFile>
+#include <QList>
 #include <QSignalSpy>
 #include <QString>
 #include <QTest>
-#include <QVector>
 #include <QtDebug>
 
 static QString testIniResource(QLatin1String("test.ini"));
diff -pruN 24.08.1-1/autotests/account/storage/storage-object-lifecycles.cpp 25.03.90-1/autotests/account/storage/storage-object-lifecycles.cpp
--- 24.08.1-1/autotests/account/storage/storage-object-lifecycles.cpp	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/autotests/account/storage/storage-object-lifecycles.cpp	2025-03-27 10:13:04.000000000 +0000
@@ -10,10 +10,10 @@
 
 #include <QDateTime>
 #include <QFile>
+#include <QList>
 #include <QSignalSpy>
 #include <QString>
 #include <QTest>
-#include <QVector>
 #include <QtDebug>
 
 #include <string.h>
@@ -84,7 +84,7 @@ void StorageLifeCyclesTest::testLifecycl
     QVERIFY2(uut->isAccountStillAvailable(initialAccountFullName), "sample account (full name) should still be available");
     QVERIFY2(uut->isAccountStillAvailable(addedAccountName, accountIssuer), "new account, issuer should still be available");
     QVERIFY2(uut->isAccountStillAvailable(addedAccountFullName), "new account (full name) should still be available");
-    QCOMPARE(uut->accounts(), QVector<QString>());
+    QCOMPARE(uut->accounts(), QList<QString>());
 
     // expect that unlocking is scheduled automatically, so advancing the event loop should trigger the signal
     QVERIFY2(test::signal_eventually_emitted_once(existingPasswordNeeded), "(existing) password should be asked by now");
@@ -110,7 +110,7 @@ void StorageLifeCyclesTest::testLifecycl
     QVERIFY2(!uut->isAccountStillAvailable(initialAccountFullName), "sample account (full name) should no longer be available");
     QVERIFY2(uut->isAccountStillAvailable(addedAccountName, accountIssuer), "new account, issuer should still be available");
     QVERIFY2(uut->isAccountStillAvailable(addedAccountFullName), "new account (full name) should still be available");
-    QCOMPARE(uut->accounts(), QVector<QString>() << initialAccountFullName);
+    QCOMPARE(uut->accounts(), QList<QString>() << initialAccountFullName);
 
     QVERIFY2(uut->contains(initialAccountName, accountIssuer), "contains(name, issuer) should report the sample account");
     QVERIFY2(uut->contains(initialAccountFullName), "contains(full name) should report the sample account");
@@ -151,7 +151,7 @@ void StorageLifeCyclesTest::testLifecycl
     QVERIFY2(uut->isAccountStillAvailable(initialAccountFullName), "sample account (full name) should again be available");
     QVERIFY2(uut->isAccountStillAvailable(addedAccountName, accountIssuer), "new account, issuer should still be available");
     QVERIFY2(uut->isAccountStillAvailable(addedAccountFullName), "new account (full name) should still be available");
-    QCOMPARE(uut->accounts(), QVector<QString>());
+    QCOMPARE(uut->accounts(), QList<QString>());
 
     QVERIFY2(!uut->contains(initialAccountName, accountIssuer), "contains(name, issuer) should no longer report the sample account");
     QVERIFY2(!uut->contains(initialAccountFullName), "contains(full name) should no longer report the sample account");
@@ -179,7 +179,7 @@ void StorageLifeCyclesTest::testLifecycl
     QVERIFY2(uut->isAccountStillAvailable(initialAccountFullName), "sample account (full name) should again still be available");
     QVERIFY2(!uut->isAccountStillAvailable(addedAccountName, accountIssuer), "new account, issuer should no longer be available");
     QVERIFY2(!uut->isAccountStillAvailable(addedAccountFullName), "new account (full name) should no longer be available");
-    QCOMPARE(uut->accounts(), QVector<QString>() << addedAccountFullName);
+    QCOMPARE(uut->accounts(), QList<QString>() << addedAccountFullName);
 
     QVERIFY2(uut->contains(addedAccountName, accountIssuer), "contains(name, issuer) should report the new account");
     QVERIFY2(uut->contains(addedAccountFullName), "contains(full name) should report the new account");
@@ -215,7 +215,7 @@ void StorageLifeCyclesTest::testLifecycl
     QVERIFY2(!uut->isAccountStillAvailable(initialAccountFullName), "sample account (full name) should again no longer be available");
     QVERIFY2(!uut->isAccountStillAvailable(addedAccountName, accountIssuer), "new account, issuer should no longer be available still");
     QVERIFY2(!uut->isAccountStillAvailable(addedAccountFullName), "new account (full name) should no longer be available still");
-    QCOMPARE(uut->accounts(), QVector<QString>());
+    QCOMPARE(uut->accounts(), QList<QString>());
 
     QVERIFY2(!uut->contains(addedAccountName, accountIssuer), "contains(name, issuer) should no longer report the new account");
     QVERIFY2(!uut->contains(addedAccountFullName), "contains(full name) should no longer report the new account");
diff -pruN 24.08.1-1/autotests/base32/base32-validate.cpp 25.03.90-1/autotests/base32/base32-validate.cpp
--- 24.08.1-1/autotests/base32/base32-validate.cpp	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/autotests/base32/base32-validate.cpp	2025-03-27 10:13:04.000000000 +0000
@@ -23,7 +23,7 @@ static void define_valid_test_case(const
     QTest::newRow(qPrintable(testCase.arg(base32))) << base32 << expected;
 }
 
-static void define_invalid_test_case(char *testCase, const QString &input)
+static void define_invalid_test_case(const char *testCase, const QString &input)
 {
     QTest::newRow(testCase) << input;
 }
diff -pruN 24.08.1-1/autotests/uri/percent-encoding.cpp 25.03.90-1/autotests/uri/percent-encoding.cpp
--- 24.08.1-1/autotests/uri/percent-encoding.cpp	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/autotests/uri/percent-encoding.cpp	2025-03-27 10:13:04.000000000 +0000
@@ -4,8 +4,8 @@
  */
 #include "uri/uri.h"
 
+#include <QList>
 #include <QTest>
-#include <QVector>
 #include <QtDebug>
 
 class PercentEncodingTest : public QObject // clazy:exclude=ctor-missing-parent-argument
@@ -34,10 +34,10 @@ void PercentEncodingTest::testValidStrin
 {
     QTest::addColumn<QByteArray>("input");
     QTest::addColumn<QString>("expected");
-    QVector<QByteArray> validStringInputs = QVector<QByteArray>() << QByteArray("%3A");
+    QList<QByteArray> validStringInputs = QList<QByteArray>() << QByteArray("%3A");
     QStringList validStringOutputs = QStringList() << QStringLiteral(":");
     int i = 0;
-    for (const auto &input : qAsConst(validStringInputs)) {
+    for (const auto &input : std::as_const(validStringInputs)) {
         QTest::newRow(input.constData()) << input << validStringOutputs[i];
         i++;
     }
@@ -56,15 +56,15 @@ void PercentEncodingTest::testValidByteA
     QTest::addColumn<QByteArray>("input");
     QTest::addColumn<QByteArray>("expected");
 
-    QVector<QByteArray> validByteArrayInputs = QVector<QByteArray>() << QByteArray("%01") << QByteArray("%3A") << QByteArray("%00")
-                                                                     << QByteArray("a%20valid%20sample") << QByteArray("%2f") << QByteArray("embedded%00works");
+    QList<QByteArray> validByteArrayInputs = QList<QByteArray>() << QByteArray("%01") << QByteArray("%3A") << QByteArray("%00")
+                                                                 << QByteArray("a%20valid%20sample") << QByteArray("%2f") << QByteArray("embedded%00works");
 
-    QVector<QByteArray> validByteArrayOutputs = QVector<QByteArray>()
+    QList<QByteArray> validByteArrayOutputs = QList<QByteArray>()
         << QByteArray("\x1") << QByteArray(":") << QByteArray("Z").replace('Z', '\0') << QByteArray("a valid sample") << QByteArray("/")
         << QByteArray("embeddedZworks").replace('Z', '\0');
 
     int i = 0;
-    for (const auto &input : qAsConst(validByteArrayInputs)) {
+    for (const auto &input : std::as_const(validByteArrayInputs)) {
         QTest::newRow(input.constData()) << input << validByteArrayOutputs[i];
         i++;
     }
@@ -79,7 +79,7 @@ void PercentEncodingTest::testInvalidStr
 void PercentEncodingTest::testInvalidString_data(void)
 {
     QTest::addColumn<QByteArray>("input");
-    QVector<QByteArray> invalidStringInputs = QVector<QByteArray>()
+    QList<QByteArray> invalidStringInputs = QList<QByteArray>()
         << QByteArray("%ff broken multibyte (no 0 in leading char)") << QByteArray("%cf broken multibyte (next char not marked)")
         << QByteArray("%c0%7f broken multibyte (over long)") << QByteArray("truncated multibyte %c0");
     for (const auto &input : std::as_const(invalidStringInputs)) {
@@ -96,8 +96,8 @@ void PercentEncodingTest::testInvalidByt
 void PercentEncodingTest::testInvalidByteArray_data(void)
 {
     QTest::addColumn<QByteArray>("input");
-    QVector<QByteArray> invalidByteArrayInputs = QVector<QByteArray>() << QByteArray("%") << QByteArray("invalid%") << QByteArray("%G5") << QByteArray("%5");
-    for (const auto &input : qAsConst(invalidByteArrayInputs)) {
+    QList<QByteArray> invalidByteArrayInputs = QList<QByteArray>() << QByteArray("%") << QByteArray("invalid%") << QByteArray("%G5") << QByteArray("%5");
+    for (const auto &input : std::as_const(invalidByteArrayInputs)) {
         QTest::newRow(input.constData()) << input;
     }
 }
diff -pruN 24.08.1-1/autotests/validators/test-util.h 25.03.90-1/autotests/validators/test-util.h
--- 24.08.1-1/autotests/validators/test-util.h	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/autotests/validators/test-util.h	2025-03-27 10:13:04.000000000 +0000
@@ -37,7 +37,7 @@ template<class T, auto f_data>
 class ValidatorTestBase : public QObject
 {
 public:
-    virtual ~ValidatorTestBase(){};
+    virtual ~ValidatorTestBase() {};
 
     void testValidate(T &uut)
     {
diff -pruN 24.08.1-1/debian/changelog 25.03.90-1/debian/changelog
--- 24.08.1-1/debian/changelog	2024-09-22 10:59:37.000000000 +0000
+++ 25.03.90-1/debian/changelog	2025-04-03 21:39:47.000000000 +0000
@@ -1,3 +1,31 @@
+keysmith (25.03.90-1) unstable; urgency=medium
+
+  * Team upload.
+
+  [ Yifei Zhan ]
+  * Update to 24.12.3 (Closes: #1095015)
+  * Switch upstream from GitHub to KDE Release Service
+  * Import upstream signing key
+  * Bypass broken test
+
+  [ Aurélien COUDERC ]
+  * New upstream release (25.03.90).
+  * Update build-deps and deps with the info from cmake.
+  * Bump Standards-Version to 4.7.2, no change required.
+  * Switch to team maintenance by the Debian Qt/KDE Maintainers team.
+  * Drop unnecessary dh_auto_configure override.
+  * Use dh-sequence-qmldeps to correctly inject runtime QML
+    dependencies.
+  * Simplify copyright information.
+
+ -- Aurélien COUDERC <coucouf@debian.org>  Thu, 03 Apr 2025 23:39:47 +0200
+
+keysmith (24.12.1-1) unstable; urgency=medium
+
+  * Update to 24.12.1
+
+ -- Yifei Zhan <debian@zhan.science>  Fri, 24 Jan 2025 01:23:24 -0500
+
 keysmith (24.08.1-1) experimental; urgency=medium
 
   * Sponsored upload for Yifei Zhan <yifei@zhan.science>
diff -pruN 24.08.1-1/debian/control 25.03.90-1/debian/control
--- 24.08.1-1/debian/control	2024-09-22 10:29:49.000000000 +0000
+++ 25.03.90-1/debian/control	2025-04-03 21:17:13.000000000 +0000
@@ -1,42 +1,51 @@
 Source: keysmith
-Homepage: https://apps.kde.org/keysmith
-Maintainer: Yifei Zhan <debian@zhan.science>
 Section: kde
 Priority: optional
-Standards-Version: 4.6.2
-Build-Depends: cmake (>= 3.16~),
+Maintainer: Debian Qt/KDE Maintainers <debian-qt-kde@lists.debian.org>
+Uploaders: Yifei Zhan <debian@zhan.science>
+Build-Depends: debhelper-compat (= 13),
                dh-sequence-kf6,
-               debhelper-compat (= 13),
-               libplasma-dev,
-               libqt6svg6-dev,
-               libkf6notifications-dev,
+               dh-sequence-qmldeps,
+               cmake (>= 3.16~),
+               extra-cmake-modules (>= 6.8.0~),
+               gettext,
                kirigami-addons-dev,
-               libkf6iconthemes-dev,
                kirigami2-dev,
-               qtquickcontrols2-5-dev,
-               libkf6i18n-dev,
-               libkf6coreaddons-dev,
-               qt6-declarative-dev,
-               qml6-module-org-kde-quickcharts,
+               libkf6config-dev (>= 6.8.0~),
+               libkf6coreaddons-dev (>= 6.8.0~),
+               libkf6dbusaddons-dev (>= 6.8.0~),
+               libkf6i18n-dev (>= 6.8.0~),
+               libkf6iconthemes-dev,
+               libkf6notifications-dev,
+               libkf6qqc2desktopstyle-dev (>= 6.8.0~),
+               libkf6statusnotifieritem-dev,
+               libkf6windowsystem-dev (>= 6.8.0~),
+               libkirigami-dev (>= 6.8.0~),
+               libplasma-dev,
+               libqt6svg6-dev,
+               libsodium-dev,
+               libssl-dev,
                qml6-module-org-kde-breeze,
                qml6-module-org-kde-kirigami,
-               qml6-module-org-kde-kirigamiaddons-delegates,
                qml6-module-org-kde-kirigamiaddons-components,
                qml6-module-org-kde-kirigamiaddons-datetime,
-               libkf6statusnotifieritem-dev,
-               libkf6dbusaddons-dev,
-               libkf6qqc2desktopstyle-dev,
-               libkirigami-dev,
-               libsodium-dev,
+               qml6-module-org-kde-kirigamiaddons-delegates,
+               qml6-module-org-kde-prison,
+               qml6-module-org-kde-quickcharts,
+               qt6-base-dev (>= 6.5.0~),
+               qt6-declarative-dev (>= 6.5.0~),
                qt6-multimedia-dev,
-               extra-cmake-modules (>= 5.71.0~),
-               libkf6config-dev (>= 5.71.0~),
-               gettext
-               
+               qt6-svg-dev (>= 6.5.0~),
+               qtquickcontrols2-5-dev,
+Standards-Version: 4.7.2
+Homepage: https://apps.kde.org/keysmith
+Rules-Requires-Root: no
 
 Package: keysmith
 Architecture: any
-Depends: ${shlibs:Depends}, ${misc:Depends}
+Depends: ${misc:Depends},
+         ${qml6:Depends},
+         ${shlibs:Depends},
 Description: OTP client for Plasma Mobile and Desktop
  Keysmith is an application to generate two-factor authentication (2FA) tokens
  when logging in to your (online) accounts. Currently it supports both HOTP and
diff -pruN 24.08.1-1/debian/copyright 25.03.90-1/debian/copyright
--- 24.08.1-1/debian/copyright	2024-09-22 10:29:49.000000000 +0000
+++ 25.03.90-1/debian/copyright	2025-04-03 21:39:47.000000000 +0000
@@ -5,362 +5,698 @@ Source: https://invent.kde.org/utilities
 
 Files: *
 Copyright: 2019, Bhushan Shah <bshah@kde.org>
- 2019, 2020, Johan Ouwerkerk <jm.ouwerkerk@gmail.com>
-License: CC0-1.0
-
-Files: .craft.ini
- .gitlab-ci.yml
- .kde-ci.yml
-Copyright: None
-License: CC0-1.0
-
-Files: .flatpak-manifest.json.license
-Copyright: 2021, Devin Lin <espidev@gmail.com>
- 2019, Bhushan Shah <bshah@kde.org>
- 2019, 2020, Johan Ouwerkerk <jm.ouwerkerk@gmail.com>
-License: BSD-2-clause
-
-Files: .reuse/*
-Copyright: 2020, Nicolas Fella <nicolas.fella@gmx.de>
- 2020, Carson Black <uhhadd@gmail.com>
-License: CC-BY-SA-4.0 or GPL-3 or LGPL-2.1
+           2020, Carl Schwan <carl@carlschwan.eu>
+           2021, Devin Lin <espidev@gmail.com>
+           2025, Jack Hill <jackhill3103@gmail.com>
+           2019-2021, Johan Ouwerkerk <jm.ouwerkerk@gmail.com>
+           2024, Plata Hill <plata.hill@kdemail.net>
+License: GPL-3.0-or-later
 
-Files: CMakeLists.txt
-Copyright: 2021, Devin Lin <espidev@gmail.com>
- 2019, Friedrich W. H. Kossebau <kossebau@kde.org>
- 2019, Bhushan Shah <bshah@kde.org>
- 2019, 2020, Johan Ouwerkerk <jm.ouwerkerk@gmail.com>
-License: BSD-2-clause
+Files: po/*/*.po
+Copyright: 2020, KDE Localization team <kde-i18n-doc@kde.org>"
+License: GPL-3.0-or-later
+Comment: From REUSE.toml
 
-Files: Messages.sh
+Files: android/android-export.in.sh
+       android/AndroidManifest.xml
+       android/CMakeLists.txt
+       autotests/account/CMakeLists.txt
+       autotests/account/compute-jobs/CMakeLists.txt
+       autotests/account/dispatcher/CMakeLists.txt
+       autotests/account/file-jobs/CMakeLists.txt
+       autotests/account/file-jobs/resources/resources.qrc
+       autotests/account/keys/CMakeLists.txt
+       autotests/account/storage/CMakeLists.txt
+       autotests/account/storage/resources/resources.qrc
+       autotests/account/test-utils/CMakeLists.txt
+       autotests/account/validation/CMakeLists.txt
+       autotests/app/CMakeLists.txt
+       autotests/base32/CMakeLists.txt
+       autotests/CMakeLists.txt
+       autotests/hmac/CMakeLists.txt
+       autotests/model/CMakeLists.txt
+       autotests/oath/CMakeLists.txt
+       autotests/secrets/CMakeLists.txt
+       autotests/secrets/test-utils/CMakeLists.txt
+       autotests/test-utils/CMakeLists.txt
+       autotests/uri/CMakeLists.txt
+       autotests/validators/CMakeLists.txt
+       cmake/external/configure-autotools.sh
+       cmake/external/make.sh
+       CMakeLists.txt
+       .flatpak-manifest.json
+       Messages.sh
+       src/account/CMakeLists.txt
+       src/app/CMakeLists.txt
+       src/backups/CMakeLists.txt
+       src/base32/CMakeLists.txt
+       src/CMakeLists.txt
+       src/hmac/CMakeLists.txt
+       src/model/CMakeLists.txt
+       src/oath/CMakeLists.txt
+       src/secrets/CMakeLists.txt
+       src/uri/CMakeLists.txt
+       src/validators/CMakeLists.txt
 Copyright: 2019, Bhushan Shah <bshah@kde.org>
-License: BSD-2-clause
-
-Files: android/*
-Copyright: 2019-2021, Johan Ouwerkerk <jm.ouwerkerk@gmail.com>
-License: BSD-2-clause
-
-Files: android/AndroidManifest.xml
-Copyright: 2020, Volker Krause <vkrause@kde.org>
- 2020, Nicolas Fella <nicolas.fella@gmx.de>
- 2020, Johan Ouwerkerk <jm.ouwerkerk@gmail.com>
-License: BSD-2-clause
+           2021, Devin Lin <espidev@gmail.com>
+           2019, Friedrich W. H. Kossebau <kossebau@kde.org>
+           2019-2021, Johan Ouwerkerk <jm.ouwerkerk@gmail.com>
+           2020, Nicolas Fella <nicolas.fella@gmx.de>
+           2020, Volker Krause <vkrause@kde.org>
+License: BSD-2-Clause
 
 Files: android/build.gradle
+       android/version.gradle.in
 Copyright: 2020, Gabriel Souza Franco <gabrielfrancosouza@gmail.com>
- 2019, Nicolas Fella <nicolas.fella@gmx.de>
- 2018-2020, Volker Krause <vkrause@kde.org>
-License: BSD-3-clause
-
-Files: android/version.gradle.in
-Copyright: 2021, Volker Krause <vkrause@kde.org>
-License: BSD-3-clause
-
-Files: autotests/*
-Copyright: 2019-2021, Johan Ouwerkerk <jm.ouwerkerk@gmail.com>
-License: GPL-3
-
-Files: autotests/CMakeLists.txt
-Copyright: 2019, Friedrich W. H. Kossebau <kossebau@kde.org>
- 2019, 2020, Johan Ouwerkerk <jm.ouwerkerk@gmail.com>
-License: BSD-2-clause
-
-Files: autotests/account/CMakeLists.txt
-Copyright: 2019-2021, Johan Ouwerkerk <jm.ouwerkerk@gmail.com>
-License: BSD-2-clause
-
-Files: autotests/account/compute-jobs/CMakeLists.txt
-Copyright: 2019-2021, Johan Ouwerkerk <jm.ouwerkerk@gmail.com>
-License: BSD-2-clause
-
-Files: autotests/account/dispatcher/CMakeLists.txt
-Copyright: 2019-2021, Johan Ouwerkerk <jm.ouwerkerk@gmail.com>
-License: BSD-2-clause
-
-Files: autotests/account/file-jobs/*
-Copyright: 2020, Johan Ouwerkerk <jm.ouwerkerk@gmail.com>
-License: CC0-1.0
-
-Files: autotests/account/file-jobs/CMakeLists.txt
-Copyright: 2019-2021, Johan Ouwerkerk <jm.ouwerkerk@gmail.com>
-License: BSD-2-clause
-
-Files: autotests/account/file-jobs/delete-accounts.cpp
- autotests/account/file-jobs/load-accounts.cpp
- autotests/account/file-jobs/request-account-password.cpp
- autotests/account/file-jobs/save-hotp.cpp
- autotests/account/file-jobs/save-totp.cpp
-Copyright: 2019-2021, Johan Ouwerkerk <jm.ouwerkerk@gmail.com>
-License: GPL-3
-
-Files: autotests/account/file-jobs/resources/load-accounts/invalid-accounts.ini.license
-Copyright: 2019-2021, Johan Ouwerkerk <jm.ouwerkerk@gmail.com>
-License: GPL-3
-
-Files: autotests/account/file-jobs/resources/resources.qrc
-Copyright: 2019-2021, Johan Ouwerkerk <jm.ouwerkerk@gmail.com>
-License: BSD-2-clause
-
-Files: autotests/account/keys/*
-Copyright: 2019-2021, Johan Ouwerkerk <jm.ouwerkerk@gmail.com>
-License: BSD-2-clause
-
-Files: autotests/account/keys/account-secret-password-flow.cpp
-Copyright: 2019-2021, Johan Ouwerkerk <jm.ouwerkerk@gmail.com>
-License: GPL-3
-
-Files: autotests/account/storage/CMakeLists.txt
-Copyright: 2019-2021, Johan Ouwerkerk <jm.ouwerkerk@gmail.com>
-License: BSD-2-clause
-
-Files: autotests/account/storage/resources/counter-update/after-updating-counter.ini.license
- autotests/account/storage/resources/counter-update/starting.ini.license
-Copyright: 2020, Johan Ouwerkerk <jm.ouwerkerk@gmail.com>
-License: CC0-1.0
-
-Files: autotests/account/storage/resources/resources.qrc
-Copyright: 2019-2021, Johan Ouwerkerk <jm.ouwerkerk@gmail.com>
-License: BSD-2-clause
-
-Files: autotests/account/storage/resources/storage-lifecycles/after-adding.ini.license
- autotests/account/storage/resources/storage-lifecycles/after-removing.ini.license
- autotests/account/storage/resources/storage-lifecycles/starting.ini.license
-Copyright: 2020, Johan Ouwerkerk <jm.ouwerkerk@gmail.com>
+           2019, Nicolas Fella <nicolas.fella@gmx.de>
+           2018-2021, Volker Krause <vkrause@kde.org>
+License: BSD-3-Clause
+
+Files: autotests/account/file-jobs/resources/delete-accounts/empty-accounts.ini
+       autotests/account/file-jobs/resources/delete-accounts/only-hotp-left.ini
+       autotests/account/file-jobs/resources/delete-accounts/only-totp-left.ini
+       autotests/account/file-jobs/resources/delete-accounts/sample-accounts.ini
+       autotests/account/file-jobs/resources/load-accounts/empty-accounts.ini
+       autotests/account/file-jobs/resources/load-accounts/sample-accounts.ini
+       autotests/account/file-jobs/resources/request-account-password/existing-password.ini
+       autotests/account/file-jobs/resources/request-account-password/new-password.ini
+       autotests/account/file-jobs/resources/request-account-password/new-password-result.ini
+       autotests/account/file-jobs/resources/save-hotp/expected-accounts-1.ini
+       autotests/account/file-jobs/resources/save-hotp/expected-accounts-2.ini
+       autotests/account/file-jobs/resources/save-totp/expected-accounts-1.ini
+       autotests/account/file-jobs/resources/save-totp/expected-accounts-2.ini
+       autotests/account/storage/resources/counter-update/after-updating-counter.ini
+       autotests/account/storage/resources/counter-update/starting.ini
+       autotests/account/storage/resources/storage-lifecycles/after-adding.ini
+       autotests/account/storage/resources/storage-lifecycles/after-removing.ini
+       autotests/account/storage/resources/storage-lifecycles/starting.ini
+       cmake/Findsodium.cmake
+       .craft.ini
+       .git-blame-ignore-revs
+       .gitignore
+       .gitlab-ci.yml
+       .kde-ci.yml
+       org.kde.keysmith.appdata.xml
+       org.kde.keysmith.desktop
+       README.md
+       snapcraft.yaml
+       src/stateconfig.kcfg
+Copyright: 2019, Bart Ribbers <bribbers@disroot.org>
+           2019, Bhushan Shah <bshah@kde.org>
+           2020, Carl Schwan <carl@carlschwan.eu>
+           Carl Schwan <carl@carlschwan.eu>
+           2021, Devin Lin <espidev@gmail.com>
+           2016, Henrik Steffen Gaßmann <henrik@gassmann.onl>
+           2019-2020, Johan Ouwerkerk <jm.ouwerkerk@gmail.com>
+           None
+           none
+           2025, Scarlett Moore <sgmoore@kde.org>
 License: CC0-1.0
 
-Files: autotests/account/test-utils/CMakeLists.txt
-Copyright: 2019-2021, Johan Ouwerkerk <jm.ouwerkerk@gmail.com>
-License: BSD-2-clause
-
-Files: autotests/account/validation/*
-Copyright: 2019-2021, Johan Ouwerkerk <jm.ouwerkerk@gmail.com>
-License: BSD-2-clause
-
-Files: autotests/account/validation/account-validation.cpp
-Copyright: 2019-2021, Johan Ouwerkerk <jm.ouwerkerk@gmail.com>
-License: GPL-3
-
-Files: autotests/app/CMakeLists.txt
-Copyright: 2019-2021, Johan Ouwerkerk <jm.ouwerkerk@gmail.com>
-License: BSD-2-clause
-
-Files: autotests/base32/CMakeLists.txt
-Copyright: 2019-2021, Johan Ouwerkerk <jm.ouwerkerk@gmail.com>
-License: BSD-2-clause
-
-Files: autotests/hmac/CMakeLists.txt
-Copyright: 2019-2021, Johan Ouwerkerk <jm.ouwerkerk@gmail.com>
-License: BSD-2-clause
-
-Files: autotests/model/CMakeLists.txt
-Copyright: 2019-2021, Johan Ouwerkerk <jm.ouwerkerk@gmail.com>
-License: BSD-2-clause
-
-Files: autotests/oath/CMakeLists.txt
-Copyright: 2019-2021, Johan Ouwerkerk <jm.ouwerkerk@gmail.com>
-License: BSD-2-clause
-
-Files: autotests/secrets/CMakeLists.txt
-Copyright: 2019-2021, Johan Ouwerkerk <jm.ouwerkerk@gmail.com>
-License: BSD-2-clause
-
-Files: autotests/secrets/test-utils/CMakeLists.txt
-Copyright: 2019-2021, Johan Ouwerkerk <jm.ouwerkerk@gmail.com>
-License: BSD-2-clause
-
-Files: autotests/test-utils/CMakeLists.txt
-Copyright: 2019-2021, Johan Ouwerkerk <jm.ouwerkerk@gmail.com>
-License: BSD-2-clause
-
-Files: autotests/uri/CMakeLists.txt
-Copyright: 2019-2021, Johan Ouwerkerk <jm.ouwerkerk@gmail.com>
-License: BSD-2-clause
-
-Files: autotests/validators/CMakeLists.txt
-Copyright: 2019-2021, Johan Ouwerkerk <jm.ouwerkerk@gmail.com>
-License: BSD-2-clause
-
-Files: cmake/*
-Copyright: 2019-2021, Johan Ouwerkerk <jm.ouwerkerk@gmail.com>
-License: BSD-2-clause
-
-Files: cmake/Findsodium.cmake
-Copyright: 2016, Henrik Steffen Gaßmann <henrik@gassmann.onl>
-License: CC0-1.0
-
-Files: keysmith.svg
+Files: org.kde.keysmith.svg
 Copyright: 2019, Carson Black <uhhadd@gmail.com>
 License: CC-BY-SA-4.0
 
-Files: org.kde.keysmith.appdata.xml
-Copyright: 2021, Devin Lin <espidev@gmail.com>
- 2019, Johan Ouwerkerk <jm.ouwerkerk@gmail.com>
- 2019, Bart Ribbers <bribbers@disroot.org>
-License: CC0-1.0
-
-Files: org.kde.keysmith.desktop
-Copyright: 2020, Carl Schwan <carl@carlschwan.eu>
- 2019, Johan Ouwerkerk <jm.ouwerkerk@gmail.com>
- 2019, Bhushan Shah <bshah@kde.org>
-License: CC0-1.0
-
-
-Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
-Upstream-Name: Keysmith
-Source: https://invent.kde.org/kde/keysmith.git
-
 Files: android/res/drawable/keysmith.png
-Copyright: 2020 Nicolas Fella <nicolas.fella@gmx.de>
-Copyright: 2020 Carson Black <uhhadd@gmail.com>
+Copyright: 2020, Nicolas Fella <nicolas.fella@gmx.de>
+           2020, Carson Black <uhhadd@gmail.com>"
 License: CC-BY-SA-4.0
+Comment: From REUSE.toml
 
-# from upstream:
-# > Currently po files do not use the SPDX format, but they do have some copyright information
-# > As general contact, we attribute copyright to Localization team, individual copyright
-# > information available in the files itself.
-
-Files: po/*/*.po
-License: GPL-3.0-or-later
-Copyright: 2020 KDE Localization team <kde-i18n-doc@kde.org>
-
-Files: po/po/ca/keysmith.po
-License: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
-Copyright: 2020 KDE Localization team <kde-i18n-doc@kde.org>
-
-Files: po/ca@valencia/keysmith.po
-License: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
-Copyright: 2020 KDE Localization team <kde-i18n-doc@kde.org>
+Files: android/keysmith-playstore.png
+Copyright: 2024, Alois Spitzbart <spitz234@hotmail.com>
+License: CC-BY-SA-4.0
+Comment: From REUSE.toml
 
-Files: po/uk/keysmith.po
+Files: po/ca/keysmith.po
+       po/ca@valencia/keysmith.po
+       po/uk/keysmith.po
+Copyright: 2020, KDE Localization team <kde-i18n-doc@kde.org>
 License: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
-Copyright: 2020 KDE Localization team <kde-i18n-doc@kde.org
-
-Files: src/*
-Copyright: 2019-2021, Johan Ouwerkerk <jm.ouwerkerk@gmail.com>
-License: GPL-3
-
-Files: src/CMakeLists.txt
-Copyright: 2021, Devin Lin <espidev@gmail.com>
- 2020, Nicolas Fella <nicolas.fella@gmx.de>
- 2019-2021, Johan Ouwerkerk <jm.ouwerkerk@gmail.com>
- 2019, Friedrich W. H. Kossebau <kossebau@kde.org>
- 2019, Bhushan Shah <bshah@kde.org>
-License: BSD-2-clause
-
-Files: src/account/CMakeLists.txt
-Copyright: 2019-2021, Johan Ouwerkerk <jm.ouwerkerk@gmail.com>
-License: BSD-2-clause
-
-Files: src/app/CMakeLists.txt
-Copyright: 2019-2021, Johan Ouwerkerk <jm.ouwerkerk@gmail.com>
-License: BSD-2-clause
-
-Files: src/base32/CMakeLists.txt
-Copyright: 2019-2021, Johan Ouwerkerk <jm.ouwerkerk@gmail.com>
-License: BSD-2-clause
-
-Files: src/contents/ui/AccountsOverview.qml
-Copyright: 2021, Devin Lin <espidev@gmail.com>
- 2020, 2021, Johan Ouwerkerk <jm.ouwerkerk@gmail.com>
-License: GPL-3
+Comment: From REUSE.toml
 
-Files: src/contents/ui/AddAccount.qml
+Files: src/stateconfig.kcfgc
 Copyright: 2020, Carl Schwan <carl@carlschwan.eu>
- 2020, 2021, Johan Ouwerkerk <jm.ouwerkerk@gmail.com>
-License: GPL-3
-
-Files: src/contents/ui/Main.qml
-Copyright: 2019-2021, Johan Ouwerkerk <jm.ouwerkerk@gmail.com>
- 2019, Bhushan Shah <bshah@kde.org>
-License: GPL-3
-
-Files: src/contents/ui/SetupPassword.qml
- src/contents/ui/UnlockAccounts.qml
-Copyright: 2021, Devin Lin <espidev@gmail.com>
- 2020, Carl Schwan <carl@carlschwan.eu>
- 2020, 2021, Johan Ouwerkerk <jm.ouwerkerk@gmail.com>
-License: GPL-3
-
-Files: src/hmac/CMakeLists.txt
-Copyright: 2019-2021, Johan Ouwerkerk <jm.ouwerkerk@gmail.com>
-License: BSD-2-clause
-
-Files: src/main.cpp
-Copyright: 2021, Devin Lin <espidev@gmail.com>
- 2020, 2021, Johan Ouwerkerk <jm.ouwerkerk@gmail.com>
- 2019, Bhushan Shah <bshah@kde.org>
-License: GPL-3
-
-Files: src/model/CMakeLists.txt
-Copyright: 2019-2021, Johan Ouwerkerk <jm.ouwerkerk@gmail.com>
-License: BSD-2-clause
-
-Files: src/oath/CMakeLists.txt
-Copyright: 2019-2021, Johan Ouwerkerk <jm.ouwerkerk@gmail.com>
-License: BSD-2-clause
-
-Files: src/secrets/CMakeLists.txt
-Copyright: 2019-2021, Johan Ouwerkerk <jm.ouwerkerk@gmail.com>
-License: BSD-2-clause
-
-Files: src/uri/CMakeLists.txt
-Copyright: 2019-2021, Johan Ouwerkerk <jm.ouwerkerk@gmail.com>
-License: BSD-2-clause
-
-Files: src/validators/CMakeLists.txt
-Copyright: 2019-2021, Johan Ouwerkerk <jm.ouwerkerk@gmail.com>
-License: BSD-2-clause
-
-License: BSD-2-clause
- Please fill license BSD-2-clause from header of 
+License: LGPL-2.1-or-later
 
-License: BSD-3-clause
- The BSD License
- .
+License: BSD-2-Clause
  Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are
- met:
+ modification, are permitted provided that the following conditions
+ are met:
+ .
+ 1. Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
  .
-   * Redistributions of source code must retain the above copyright
-     notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in
+    the documentation and/or other materials provided with the
+    distribution.
  .
-   * Redistributions in binary form must reproduce the above copyright
-     notice, this list of conditions and the following disclaimer in the
-     documentation and/or other materials provided with the distribution. 
- .
-   * Neither the name of the copyright holder nor the names of its
-     contributors may be used to endorse or promote products derived from
-     this software without specific prior written permission. 
- .
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
- CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.
 
-License: CC-BY-SA-4.0
- Please fill license CC-BY-SA-4.0 or GPL-3 or LGPL-2.1 from header of 
+License: BSD-3-Clause
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ .
+ 1. Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+ .
+ 2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in
+    the documentation and/or other materials provided with the
+    distribution.
+ .
+ 3. Neither the name of the copyright holder nor the names of its
+    contributors may be used to endorse or promote products derived
+    from this software without specific prior written permission.
+ .
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.
 
 License: CC0-1.0
- On Debian systems the full text of the CC0-1.0 license can be found in
- /usr/share/common-licenses/CC0-1.0
+ To the extent possible under law, the author(s) have dedicated all
+ copyright and related and neighboring rights to this software to the
+ public domain worldwide. This software is distributed without any
+ warranty.
+ .
+ You should have received a copy of the CC0 Public Domain Dedication
+ along with this software. If not, see
+ <https://creativecommons.org/publicdomain/zero/1.0/>.
+ .
+ On Debian systems, the complete text of the CC0 Public Domain
+ Dedication can be found in `/usr/share/common-licenses/CC0-1.0’.
+
+License: CC-BY-SA-4.0
+ Creative Commons Attribution-ShareAlike 4.0 International Creative
+ Commons Corporation ("Creative Commons") is not a law firm and does
+ not provide legal services or legal advice. Distribution of Creative
+ Commons public licenses does not create a lawyer-client or other
+ relationship. Creative Commons makes its licenses and related
+ information available on an "as-is" basis. Creative Commons gives no
+ warranties regarding its licenses, any material licensed under their
+ terms and conditions, or any related information. Creative Commons
+ disclaims all liability for damages resulting from their use to the
+ fullest extent possible.
+ .
+ Using Creative Commons Public Licenses
+ .
+ Creative Commons public licenses provide a standard set of terms and
+ conditions that creators and other rights holders may use to share
+ original works of authorship and other material subject to copyright
+ and certain other rights specified in the public license below. The
+ following considerations are for informational purposes only, are
+ not exhaustive, and do not form part of our licenses.
+ .
+ Considerations for licensors: Our public licenses are intended for
+ use by those authorized to give the public permission to use
+ material in ways otherwise restricted by copyright and certain other
+ rights. Our licenses are irrevocable. Licensors should read and
+ understand the terms and conditions of the license they choose
+ before applying it. Licensors should also secure all rights
+ necessary before applying our licenses so that the public can reuse
+ the material as expected. Licensors should clearly mark any material
+ not subject to the license. This includes other CC-licensed
+ material, or material used under an exception or limitation to
+ copyright. More considerations for licensors :
+ wiki.creativecommons.org/Considerations_for_licensors
+ .
+ Considerations for the public: By using one of our public licenses,
+ a licensor grants the public permission to use the licensed material
+ under specified terms and conditions. If the licensor's permission
+ is not necessary for any reason–for example, because of any
+ applicable exception or limitation to copyright–then that use is not
+ regulated by the license. Our licenses grant only permissions under
+ copyright and certain other rights that a licensor has authority to
+ grant. Use of the licensed material may still be restricted for
+ other reasons, including because others have copyright or other
+ rights in the material. A licensor may make special requests, such
+ as asking that all changes be marked or described.
+ .
+ Although not required by our licenses, you are encouraged to respect
+ those requests where reasonable. More considerations for the public
+ : wiki.creativecommons.org/Considerations_for_licensees
+ .
+ Creative Commons Attribution-ShareAlike 4.0 International Public
+ License
+ .
+ By exercising the Licensed Rights (defined below), You accept and
+ agree to be bound by the terms and conditions of this Creative
+ Commons Attribution-ShareAlike 4.0 International Public License
+ ("Public License"). To the extent this Public License may be
+ interpreted as a contract, You are granted the Licensed Rights in
+ consideration of Your acceptance of these terms and conditions, and
+ the Licensor grants You such rights in consideration of benefits the
+ Licensor receives from making the Licensed Material available under
+ these terms and conditions.
+ .
+ Section 1 – Definitions.
+ .
+ a. Adapted Material means material subject to Copyright and Similar
+ Rights that is derived from or based upon the Licensed Material and
+ in which the Licensed Material is translated, altered, arranged,
+ transformed, or otherwise modified in a manner requiring permission
+ under the Copyright and Similar Rights held by the Licensor. For
+ purposes of this Public License, where the Licensed Material is a
+ musical work, performance, or sound recording, Adapted Material is
+ always produced where the Licensed Material is synched in timed
+ relation with a moving image.
+ .
+ b. Adapter's License means the license You apply to Your Copyright
+ and Similar Rights in Your contributions to Adapted Material in
+ accordance with the terms and conditions of this Public License.
+ .
+ c. BY-SA Compatible License means a license listed at
+ creativecommons.org/compatiblelicenses, approved by Creative Commons
+ as essentially the equivalent of this Public License.
+ .
+ d. Copyright and Similar Rights means copyright and/or similar
+ rights closely related to copyright including, without limitation,
+ performance, broadcast, sound recording, and Sui Generis Database
+ Rights, without regard to how the rights are labeled or categorized.
+ For purposes of this Public License, the rights specified in Section
+ 2(b)(1)-(2) are not Copyright and Similar Rights.
+ .
+ e. Effective Technological Measures means those measures that, in
+ the absence of proper authority, may not be circumvented under laws
+ fulfilling obligations under Article 11 of the WIPO Copyright Treaty
+ adopted on December 20, 1996, and/or similar international
+ agreements.
+ .
+ f. Exceptions and Limitations means fair use, fair dealing, and/or
+ any other exception or limitation to Copyright and Similar Rights
+ that applies to Your use of the Licensed Material.
+ .
+ g. License Elements means the license attributes listed in the name
+ of a Creative Commons Public License. The License Elements of this
+ Public License are Attribution and ShareAlike.
+ .
+ h. Licensed Material means the artistic or literary work, database,
+ or other material to which the Licensor applied this Public License.
+ .
+ i. Licensed Rights means the rights granted to You subject to the
+ terms and conditions of this Public License, which are limited to
+ all Copyright and Similar Rights that apply to Your use of the
+ Licensed Material and that the Licensor has authority to license.
+ .
+ j. Licensor means the individual(s) or entity(ies) granting rights
+ under this Public License.
+ .
+ k. Share means to provide material to the public by any means or
+ process that requires permission under the Licensed Rights, such as
+ reproduction, public display, public performance, distribution,
+ dissemination, communication, or importation, and to make material
+ available to the public including in ways that members of the public
+ may access the material from a place and at a time individually
+ chosen by them.
+ .
+ l. Sui Generis Database Rights means rights other than copyright
+ resulting from Directive 96/9/EC of the European Parliament and of
+ the Council of 11 March 1996 on the legal protection of databases,
+ as amended and/or succeeded, as well as other essentially equivalent
+ rights anywhere in the world.
+ .
+ m. You means the individual or entity exercising the Licensed Rights
+ under this Public License. Your has a corresponding meaning.
+ .
+ Section 2 – Scope.
+ .
+    a. License grant.
+ .
+ 1. Subject to the terms and conditions of this Public License, the
+ Licensor hereby grants You a worldwide, royalty-free,
+ non-sublicensable, non-exclusive, irrevocable license to exercise
+ the Licensed Rights in the Licensed Material to:
+ .
+          A. reproduce and Share the Licensed Material, in whole or
+          in part; and
+ .
+          B. produce, reproduce, and Share Adapted Material.
+ .
+ 2. Exceptions and Limitations. For the avoidance of doubt, where
+ Exceptions and Limitations apply to Your use, this Public License
+ does not apply, and You do not need to comply with its terms and
+ conditions.
+ .
+       3. Term. The term of this Public License is specified in
+       Section 6(a).
+ .
+ 4. Media and formats; technical modifications allowed. The Licensor
+ authorizes You to exercise the Licensed Rights in all media and
+ formats whether now known or hereafter created, and to make
+ technical modifications necessary to do so. The Licensor waives
+ and/or agrees not to assert any right or authority to forbid You
+ from making technical modifications necessary to exercise the
+ Licensed Rights, including technical modifications necessary to
+ circumvent Effective Technological Measures. For purposes of this
+ Public License, simply making modifications authorized by this
+ Section 2(a)(4) never produces Adapted Material.
+ .
+       5. Downstream recipients.
+ .
+ A. Offer from the Licensor – Licensed Material. Every recipient of
+ the Licensed Material automatically receives an offer from the
+ Licensor to exercise the Licensed Rights under the terms and
+ conditions of this Public License.
+ .
+ B. Additional offer from the Licensor – Adapted Material. Every
+ recipient of Adapted Material from You automatically receives an
+ offer from the Licensor to exercise the Licensed Rights in the
+ Adapted Material under the conditions of the Adapter's License You
+ apply.
+ .
+ C. No downstream restrictions. You may not offer or impose any
+ additional or different terms or conditions on, or apply any
+ Effective Technological Measures to, the Licensed Material if doing
+ so restricts exercise of the Licensed Rights by any recipient of the
+ Licensed Material.
+ .
+ 6. No endorsement. Nothing in this Public License constitutes or may
+ be construed as permission to assert or imply that You are, or that
+ Your use of the Licensed Material is, connected with, or sponsored,
+ endorsed, or granted official status by, the Licensor or others
+ designated to receive attribution as provided in Section
+ 3(a)(1)(A)(i).
+ .
+    b. Other rights.
+ .
+ 1. Moral rights, such as the right of integrity, are not licensed
+ under this Public License, nor are publicity, privacy, and/or other
+ similar personality rights; however, to the extent possible, the
+ Licensor waives and/or agrees not to assert any such rights held by
+ the Licensor to the limited extent necessary to allow You to
+ exercise the Licensed Rights, but not otherwise.
+ .
+ 2. Patent and trademark rights are not licensed under this Public
+ License.
+ .
+ 3. To the extent possible, the Licensor waives any right to collect
+ royalties from You for the exercise of the Licensed Rights, whether
+ directly or through a collecting society under any voluntary or
+ waivable statutory or compulsory licensing scheme. In all other
+ cases the Licensor expressly reserves any right to collect such
+ royalties.
+ .
+ Section 3 – License Conditions.
+ .
+ Your exercise of the Licensed Rights is expressly made subject to
+ the following conditions.
+ .
+    a. Attribution.
+ .
+ 1. If You Share the Licensed Material (including in modified form),
+ You must:
+ .
+ A. retain the following if it is supplied by the Licensor with the
+ Licensed Material:
+ .
+ i. identification of the creator(s) of the Licensed Material and any
+ others designated to receive attribution, in any reasonable manner
+ requested by the Licensor (including by pseudonym if designated);
+ .
+             ii. a copyright notice;
+ .
+             iii. a notice that refers to this Public License;
+ .
+             iv. a notice that refers to the disclaimer of
+             warranties;
+ .
+ v. a URI or hyperlink to the Licensed Material to the extent
+ reasonably practicable;
+ .
+ B. indicate if You modified the Licensed Material and retain an
+ indication of any previous modifications; and
+ .
+ C. indicate the Licensed Material is licensed under this Public
+ License, and include the text of, or the URI or hyperlink to, this
+ Public License.
+ .
+ 2. You may satisfy the conditions in Section 3(a)(1) in any
+ reasonable manner based on the medium, means, and context in which
+ You Share the Licensed Material. For example, it may be reasonable
+ to satisfy the conditions by providing a URI or hyperlink to a
+ resource that includes the required information.
+ .
+ 3. If requested by the Licensor, You must remove any of the
+ information required by Section 3(a)(1)(A) to the extent reasonably
+ practicable.
+ .
+ b. ShareAlike.In addition to the conditions in Section 3(a), if You
+ Share Adapted Material You produce, the following conditions also
+ apply.
+ .
+ 1. The Adapter's License You apply must be a Creative Commons
+ license with the same License Elements, this version or later, or a
+ BY-SA Compatible License.
+ .
+ 2. You must include the text of, or the URI or hyperlink to, the
+ Adapter's License You apply. You may satisfy this condition in any
+ reasonable manner based on the medium, means, and context in which
+ You Share Adapted Material.
+ .
+ 3. You may not offer or impose any additional or different terms or
+ conditions on, or apply any Effective Technological Measures to,
+ Adapted Material that restrict exercise of the rights granted under
+ the Adapter's License You apply.
+ .
+ Section 4 – Sui Generis Database Rights.
+ .
+ Where the Licensed Rights include Sui Generis Database Rights that
+ apply to Your use of the Licensed Material:
+ .
+ a. for the avoidance of doubt, Section 2(a)(1) grants You the right
+ to extract, reuse, reproduce, and Share all or a substantial portion
+ of the contents of the database;
+ .
+ b. if You include all or a substantial portion of the database
+ contents in a database in which You have Sui Generis Database
+ Rights, then the database in which You have Sui Generis Database
+ Rights (but not its individual contents) is Adapted Material,
+ including for purposes of Section 3(b); and
+ .
+ c. You must comply with the conditions in Section 3(a) if You Share
+ all or a substantial portion of the contents of the database.
+ .
+ For the avoidance of doubt, this Section 4 supplements and does not
+ replace Your obligations under this Public License where the
+ Licensed Rights include other Copyright and Similar Rights.
+ .
+ Section 5 – Disclaimer of Warranties and Limitation of Liability.
+ .
+ a. Unless otherwise separately undertaken by the Licensor, to the
+ extent possible, the Licensor offers the Licensed Material as-is and
+ as-available, and makes no representations or warranties of any kind
+ concerning the Licensed Material, whether express, implied,
+ statutory, or other. This includes, without limitation, warranties
+ of title, merchantability, fitness for a particular purpose,
+ non-infringement, absence of latent or other defects, accuracy, or
+ the presence or absence of errors, whether or not known or
+ discoverable. Where disclaimers of warranties are not allowed in
+ full or in part, this disclaimer may not apply to You.
+ .
+ b. To the extent possible, in no event will the Licensor be liable
+ to You on any legal theory (including, without limitation,
+ negligence) or otherwise for any direct, special, indirect,
+ incidental, consequential, punitive, exemplary, or other losses,
+ costs, expenses, or damages arising out of this Public License or
+ use of the Licensed Material, even if the Licensor has been advised
+ of the possibility of such losses, costs, expenses, or damages.
+ Where a limitation of liability is not allowed in full or in part,
+ this limitation may not apply to You.
+ .
+ c. The disclaimer of warranties and limitation of liability provided
+ above shall be interpreted in a manner that, to the extent possible,
+ most closely approximates an absolute disclaimer and waiver of all
+ liability.
+ .
+ Section 6 – Term and Termination.
+ .
+ a. This Public License applies for the term of the Copyright and
+ Similar Rights licensed here. However, if You fail to comply with
+ this Public License, then Your rights under this Public License
+ terminate automatically.
+ .
+ b. Where Your right to use the Licensed Material has terminated
+ under Section 6(a), it reinstates:
+ .
+ 1. automatically as of the date the violation is cured, provided it
+ is cured within 30 days of Your discovery of the violation; or
+ .
+       2. upon express reinstatement by the Licensor.
+ .
+ c. For the avoidance of doubt, this Section 6(b) does not affect any
+ right the Licensor may have to seek remedies for Your violations of
+ this Public License.
+ .
+ d. For the avoidance of doubt, the Licensor may also offer the
+ Licensed Material under separate terms or conditions or stop
+ distributing the Licensed Material at any time; however, doing so
+ will not terminate this Public License.
+ .
+    e. Sections 1, 5, 6, 7, and 8 survive termination of this Public
+    License.
+ .
+ Section 7 – Other Terms and Conditions.
+ .
+ a. The Licensor shall not be bound by any additional or different
+ terms or conditions communicated by You unless expressly agreed.
+ .
+ b. Any arrangements, understandings, or agreements regarding the
+ Licensed Material not stated herein are separate from and
+ independent of the terms and conditions of this Public License.
+ .
+ Section 8 – Interpretation.
+ .
+ a. For the avoidance of doubt, this Public License does not, and
+ shall not be interpreted to, reduce, limit, restrict, or impose
+ conditions on any use of the Licensed Material that could lawfully
+ be made without permission under this Public License.
+ .
+ b. To the extent possible, if any provision of this Public License
+ is deemed unenforceable, it shall be automatically reformed to the
+ minimum extent necessary to make it enforceable. If the provision
+ cannot be reformed, it shall be severed from this Public License
+ without affecting the enforceability of the remaining terms and
+ conditions.
+ .
+ c. No term or condition of this Public License will be waived and no
+ failure to comply consented to unless expressly agreed to by the
+ Licensor.
+ .
+ d. Nothing in this Public License constitutes or may be interpreted
+ as a limitation upon, or waiver of, any privileges and immunities
+ that apply to the Licensor or You, including from the legal
+ processes of any jurisdiction or authority.
+ .
+ Creative Commons is not a party to its public licenses.
+ Notwithstanding, Creative Commons may elect to apply one of its
+ public licenses to material it publishes and in those instances will
+ be considered the "Licensor." The text of the Creative Commons
+ public licenses is dedicated to the public domain under the CC0
+ Public Domain Dedication. Except for the limited purpose of
+ indicating that material is shared under a Creative Commons public
+ license or as otherwise permitted by the Creative Commons policies
+ published at creativecommons.org/policies, Creative Commons does not
+ authorize the use of the trademark "Creative Commons" or any other
+ trademark or logo of Creative Commons without its prior written
+ consent including, without limitation, in connection with any
+ unauthorized modifications to any of its public licenses or any
+ other arrangements, understandings, or agreements concerning use of
+ licensed material. For the avoidance of doubt, this paragraph does
+ not form part of the public licenses.
+ .
+ Creative Commons may be contacted at creativecommons.org.
 
-License: GPL-3
- This program is free software; you can redistribute it and/or modify
+License: GPL-3.0-or-later
+ This program is free software: you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
- the Free Software Foundation; version 3 dated June, 2007.
- On Debian systems, the complete text of version 3 of the GNU General
- Public License can be found in '/usr/share/common-licenses/GPL-3'.
-
-License: LGPL-2.1
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Lesser General Public License as published by the
- Free Software Foundation; version 2.1 of the License.
- On Debian systems, the complete text of version 2.1 of the GNU Lesser
- General Public License can be found in '/usr/share/common-licenses/LGPL-2.1'.
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+ .
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ .
+ You should have received a copy of the GNU General Public License
+ along with this program.  If not, see
+ <http://www.gnu.org/licenses/>.
+ .
+ On Debian systems, the complete text of the GNU General Public
+ License version 3 can be found in
+ `/usr/share/common-licenses/GPL-3’.
+
+License: LGPL-2.1-only
+ This library is free software; you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version
+ 2.1 as published by the Free Software Foundation.
+ .
+ This library is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ Lesser General Public License for more details.
+ .
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301  USA Also add information on how to contact you by
+ electronic and paper mail.
+ .
+ On Debian systems, the complete text of the GNU Lesser General
+ Public License version 2.1 can be found in
+ `/usr/share/common-licenses/LGPL-2.1’.
+
+License: LGPL-2.1-or-later
+ This library is free software; you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+ .
+ This library is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ Lesser General Public License for more details.
+ .
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301  USA Also add information on how to contact you by
+ electronic and paper mail.
+ .
+ On Debian systems, the complete text of the GNU Lesser General
+ Public License version 2.1 can be found in
+ `/usr/share/common-licenses/LGPL-2.1’.
+
+License: LGPL-3.0-only
+ This library is free software; you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version
+ 3 as published by the Free Software Foundation.
+ .
+ This library is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ Lesser General Public License for more details.
+ .
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library.  If not, see
+ <http://www.gnu.org/licenses/>.
+ .
+ On Debian systems, the complete text of the GNU Lesser General
+ Public License version 3 can be found in
+ `/usr/share/common-licenses/LGPL-3’.
+
+License: LicenseRef-KDE-Accepted-LGPL
+ This library is free software; you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 3 of the
+ license or (at your option) any later version that is accepted by
+ the membership of KDE e.V. (or its successor approved by the
+ membership of KDE e.V.), which shall act as a proxy as defined in
+ Section 6 of version 3 of the license.
+ .
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
diff -pruN 24.08.1-1/debian/keysmith.lintian-overrides 25.03.90-1/debian/keysmith.lintian-overrides
--- 24.08.1-1/debian/keysmith.lintian-overrides	2024-09-22 10:29:49.000000000 +0000
+++ 25.03.90-1/debian/keysmith.lintian-overrides	2025-04-03 21:39:47.000000000 +0000
@@ -1 +1,4 @@
 keysmith: no-manual-page [usr/bin/keysmith]
+
+# That’s the address from the license text found in /usr/share/common-licenses/LGPL-2.1…
+keysmith: old-fsf-address-in-copyright-file
diff -pruN 24.08.1-1/debian/qmldeps.overrides 25.03.90-1/debian/qmldeps.overrides
--- 24.08.1-1/debian/qmldeps.overrides	1970-01-01 00:00:00.000000000 +0000
+++ 25.03.90-1/debian/qmldeps.overrides	2025-04-03 21:18:51.000000000 +0000
@@ -0,0 +1,3 @@
+Keysmith.Application keysmith
+Keysmith.Models keysmith
+Keysmith.Validators keysmith
diff -pruN 24.08.1-1/debian/rules 25.03.90-1/debian/rules
--- 24.08.1-1/debian/rules	2024-09-22 10:29:49.000000000 +0000
+++ 25.03.90-1/debian/rules	2025-04-03 21:09:55.000000000 +0000
@@ -4,6 +4,3 @@ export DEB_BUILD_MAINT_OPTIONS = hardeni
 
 %:
 	dh $@
-
-override_dh_auto_configure:
-	dh_auto_configure -Skf6 -- 
diff -pruN 24.08.1-1/debian/upstream/signing-key.asc 25.03.90-1/debian/upstream/signing-key.asc
--- 24.08.1-1/debian/upstream/signing-key.asc	1970-01-01 00:00:00.000000000 +0000
+++ 25.03.90-1/debian/upstream/signing-key.asc	2025-04-03 20:54:00.000000000 +0000
@@ -0,0 +1,127 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mQENBFlRpEYBCACecX3F5xzF6wzeXiuBAuHq74bVHON7I89U+ROloEWYUYMRNTz2
+l1BkNHWRTTqfmPO7LhMY6g4gOPeQVCwgTGVjI8bn6sJd3SFdeiRvvaFBpmn7SjBd
+s1rkKKJIjeMUl1w8dFnmf22V0PnhSSepmNwmd8RQnl1umCTSihDJydGxixw6ZNhr
+4tzbn+Rfadybli61H2hc6/JJHe91i+V1ltgkHwGcs6MUCqXgSL0dUIJs49gSrla0
+gkrcJYF5MWyGxKlajbCjkMCJtN+8bhEmpc4Oe8NZ33arEWnlyh1RVgi5p3RTNApY
+Pxctcg57ExczbKn9R8VLYmPJ7Di3gX0cmotrABEBAAG0HkNocmlzdG9waCBGZWNr
+IDxjZmVja0BrZGUub3JnPokBTgQTAQgAOBYhBPIydeS/EK/B32kUptvSzok+LRyH
+BQJZUaRGAhsDBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJENvSzok+LRyHeWcH
+/A1E2d5UL2oHsrLIolIiWMmheRorcac+0Hgll1mMUQ5tfPH+LVzgrlMMG7g1Amky
+Hk1qZ5oszrXUg2H/28/cOF/WVlHgQcSGr7aQbHieUivPtZMua+lHUdILC3UV2l1V
+22Zz8HIDl4kxmK6EpoNIOK5Mo550S3e3AKYq5pa/FlckCV9/JoK9+thRCsoAAj3g
+oWwTx9RY5pmLPtklqyC5961Je7KHSIVqapJ/G5DX+yfOC1Psc+vIfyQVqnaefZPW
+dIxXQQhn46i6IRRimw94Gkwca+wslkimt/L/Z7ByZqBsXMyixSQPq+dtSO9CMgr0
+WxTX78wATkTGzh5oSwKCMga5AQ0EWVGkRgEIAMuUnfNfrdx8xn7Jjcm6MGkB/Yep
+XVysrlHxUUS6q7629JdSlVWnQo9GFO927GZClWI9rCGLQMfZZk/jfgKV/nkpLod3
+I51remOg7ohSkwRLAdwJ7xCuNrafhKntFh5/NxuaXxaVIY1muvZbTAsIRyks2jCE
+pUoK43Z8dr4/QPhBstssB8czDME1Tw4r7X+RwjFrQqDItFv6f0BIdEwR462khLEw
+vbXRN1nzs+6Y0foJbJCS3VDZC9scsrrMVMV+OEBF3DXp9ypSWsLnkuBPPIus6Y8G
+j7JvYUBtrUhKL5a7o5G3Te9YhwGgOKVqWlncs6ZLiOV6HnG0BO3xdPcn09cAEQEA
+AYkBNgQYAQgAIBYhBPIydeS/EK/B32kUptvSzok+LRyHBQJZUaRGAhsMAAoJENvS
+zok+LRyHaRMIAI5YaTfGeQDmR08I2LvztOEH/3YF63cNCP/Vp+WAtF/Kr8mMFpFS
+oTHJNMi7p964lHYTTPzPeQzLzV3ayiQjq+DHs6HFmYl73ukzlGGc7KDlyhugQjm6
+AqNtqqXAVykaixnFj8jf2WtQGl1hqpm8GhDRBmZycqMqne4tZokujhtpdC6suRvc
+AB0S+lRZUwrY05k6Nc1A8J8k/lxXXa9KzXNaqKsqppgBZoqKN3zS4146uEjvuLsh
+CarZ/6uUidvP0LBTR7HKye5A9Qdbjlg9qvtR7YF3hqy4g1PRNZWRlsQ1pkCdCTfN
+TA+HYUzK0ESVpY72lWvH49lNg+ufZ1bKvKKZAg0EUihrbwEQAJfexkHeGMg+Vpei
+5AswNfvIDkV5VxyzJp2g2eknqrThlRJhthZe9cqQMQr0PwOxDtx+1Zxp9Co3FqZ+
+apDl/Je1tCyZa3LQytyRxPikDk5pmUZkiBuCKbhQM61AXcRgK3DYzCjhedKtC2ta
+/wJZdjWzEKxV/j+3Eeb9VnazymZPZvT6pUmBR4rfjZjWxkWhW0ANwwIwK0xGLUnB
+nkBG2FGwsHbL2XkbCxJffQW8jB8bMc6NZZzlvO5oUhs9OufynIIP4U1a5LU62Hws
+cNXvo399s+SCgqThmqK9vb8186U+Iba4+WEI9R3RmhJI7gEXGlb92QBuKfl9YMXX
+hxbi0T8/wzYOlSa8ux+uDUsbLKqTNiL2Fr4dBUcdQLaTyUj44Qihf4//gkwrbeOu
+Ml2Nu2oJGy4QBQYWxddN/hdNoyLpJAkJojJ1XL16Gf1/ryQJW30UD+C/iHbjvAWR
+NH5GIczFFmbMjqc1s3ykoCOwqXCHhN3NTsANd89KHNp8Ltyzh9LeeFuoSPynfW35
+Jgr9ewqXkJMyFkO9FeWM8NV9PIsG1A0LVCO3xSj7L0Ltp8H9bWuEBdvnkJ0m+9tE
+35b50w58Sk2clw0KjWi/91wNbheEHhrHRd3ohHVcIhDS4ken17aGs3ar20Ss7sN6
+oeaegv1NUGayPtIDHrhzkotkxa8DABEBAAG0HkhlaWtvIEJlY2tlciA8aGVpa29A
+c2hydXVmLmRlPokCOQQTAQIAIwUCUihrbwIbIwcLCQgHAwIBBhUIAgkKCwQWAgMB
+Ah4BAheAAAoJELtGM1DW7zHvfTUP+wajKb1W2fCZWKzd9d5jQHCO9FKcna8a5/3A
+2ONA3GJJuHrVnHiBXjDVIYvWm208SP/dW5ssi1fCwfwzZYMWXmBbhvkAYYV0FsGU
++UeNwkwgsJ72zVrJzQel4wp/1WS5j3dZxMzZwdCP3qjEPIvBYSJpIihhEeJvbxfa
+Zg8dy1DfTuanwcXcZ4W1j33fpmIB8RcvKRYXZ/mJIpcowry3s/t2AMBRD4L4h/Ji
+lAsRwZQoxWkKThmhMi22Hnp97rGnCjU+WUuheDPLqBhBfCs6cz/DeP/WElBqXaj+
+BRUnMuGtv/MqgTIiHFX5u+AWJJ38KEOSK2zHWp/QUxuzcAI+BsItiNuvywUwc9AN
+PDYOaoYIvAQYCH8oRD5DYdUtLzyCVHBUunY7Xr7bp2bd/cOCISWZbdB/iIyGP/4o
+bJZR/d5GV2D+ZOUFzS/xAqElLxr497Hqg86Mij37LK5KXYErxW+bwwuLkUUzW4uu
+wyjWmWQ11MpQ+g1FMIQtEQAi+rQgKcuK3aPANPg3klZZwBmWFgBqDtHSCcQ63dUD
+EKQYNJ1LWYyCXmemB6y7dPuT6SEgRy9pTjyDsgj+riSBgm+nyJYPAl7D6fo+di/Q
+OO2ZehchIMiSY4RJrU/Lgz4rbyiYG7XvR6x7cIrct6s1sElKeVmChhSpAw8a4wUT
+SYI5vT7ytCNIZWlrbyBCZWNrZXIgPGhlaXJlY2thQGV4aGVyYm8ub3JnPokCOQQT
+AQIAIwUCUihtZgIbIwcLCQgHAwIBBhUIAgkKCwQWAgMBAh4BAheAAAoJELtGM1DW
+7zHv60MQAJEXVz0NUYme5vKsXkCqf0KEIJHcZLjKdPGZ/bXEKgBGltuHx50GXPEn
+sc1/X63/TARyYoY11pFlRUjJcwKPZTJ7r8IpuYHPTKceOhGRVJf6KYnKckqYqNay
+py1GpPrsr2mcIHkoiJQrdzcZavF3a7x1lQmlvleFtbMgPCdHsB2+hPTK24A1tQDm
+C3AfRauJRDaqxkre3OabQvgQnTuoZcH3hZhVouvPj7bqNrg7+/zs+bTJp0YwaMgW
+Sru7yDuSIwTVU+/OORTDGTddwNVwW3kaNy3Vt4xf9JS3xYth8vddTJTyL9Qqtp/S
+E8btN5ak86+WZ+OAyJyZ+BgNczJPPeHngZEbcC8hkD2gxtyxz1Jfr4hrJYI3ibuP
+eplYFvMK1uRdMlTjZ0cqOcA1NGP7l7xFVVoNojpbNZbhUIt8muxWoQm+gm8IGul9
+UKVXrgP+2qIIc1sGkEhzEEl3qLlBx5L3kQcFGMK+p5JQ2/JV4gVZME6h3Jwxm58S
+0IyA8G/NLJPQVS2OTU+1CjB7VUDjs+LKMjDsKtxPN8LcqE5vSJdks9Vdnz4DdluC
+reIW3ww2P9a+f46e9np4W2gfnJ+qa+syKwyZHHAwf6x31YOoikR/+9CELniYD0X3
+11iapgUl2R+ABoQKp2pH4vBs2Xy6c+zn8EWAcY37Hoc2rlRc3H6ltCNIZWlrbyBC
+ZWNrZXIgPGhlaWtvLmJlY2tlckBrZGUub3JnPokCTgQTAQgAOBYhBNgcDLOOtyXv
+ZpHDhbtGM1DW7zHvBQJf8kCSAhsjBQsJCAcCBhUKCQgLAgQWAgMBAh4BAheAAAoJ
+ELtGM1DW7zHvb0oP/RFgwAaMb2mH+ffp7YV/6BsyZPWCGepzz8JT6k2N40LWcbwx
+yptHH6Wke2bGbGsfUYqtb8bM69RlueYOmmN5YteT+lHUx7TXyY6qKj1a8bpX6roL
+0Vah8yujHZCuqEG+R9BdRlGWWa50YQ5VN7nTXkmM9a1C64LgJnG2Hg78r7lpTSf5
+aagrk8umfPZGaPFMVTkJm8KfaozH7Z7/RYha1qtGujrgf1pfftUozneaTgr9EBBo
+Kz8NvOzMhHA2y1/g69kIHcOL/4uQOLxQUfucMwJUrqwZhSDGotzdpO7hvVGO34cu
+2fNfcxqVIS54Dad0rb9027hK9Y/6b/Z85pLOIq7HuRGum0efZWw2T/d2Y52CfWfe
+wFQtv68pIV+mw4YIlIKHYTAZ8Kh9L/KJB/PULxIeoci3ftP/xJulo3TcV7gxf7l4
+e8Ve5DdSHcfrPs9CQpb+qkIym8nCokEBoZKi2pRhU8OOrc/RUHDXODgL7mEm/eyt
+/ot8AR1UJDyHzM8X07Fc9Ib/Cia1aO1hQpO2MVuTOhqHLfLymNf8ZFsJQEpROi5E
+vS7EivqDDFHX/nToEdGjd2xcXzj5UTwIZ1E5GUE1RQN7Harqui6YCv4NoWgZJpuw
+tDUJ1+HX7mDwkSQryCUfjxL1gWIRMqJ6G9MKsnah2sjC7qkk7q7T8I5EQcFKuQIN
+BFIoa28BEACjKgaDcyGReFCQmqwSwqr4PmZVbBofgCGHdi66M6T6wJ3E6idJQ+7c
+czNCJmzEWur+xPZCCtj4wh6AHRm1bQGmJpwiRk9qmAbFJoBpm/nwgIGC+5fk3ULO
+opAaOfI3TV7JS836bXNuoHTSIN4ngwjkElaKlKWzRqEVCovlmQVnttEOQ93Evses
+ElWzxD9yzR5XZJoCxXFXhvPUM93KaxlsmcBfP1f/pO8W74A0MPpeqGFhKwDOsK+R
+fxVUIFv6B3AXEdT2Ws5gaoUv9sbRqk2TLYMgtEK7zL+8eG26BECkmJN++DhROhz0
+uRpTnyBBvCd8/u3XcfPSJUrDI+6W4Ur5KWtEc6gKZdyE/CuEuItYf2AJ5zG7+Gb+
+4OP+dw1rGDS1TibJGg8ELY8Ldz9s0dIsGu3dBfBv8dTii3itXgBjACA9JNwMw+v9
+IizgWww/aV9aKcyytQ71OQwNWejs/MWdwUD9kJ+nT40xdvEIXYLwLJpBkeQCm4dz
+VrYVne/cquaoH7+HbtRRmY0YdsY5i3R2b81UefTk02WBw0K3V61KSMUu+j6lYKd+
+oOFMEH6Y+bWRbWub7df2fMYd8JsxZzLfbJr2cMZD1jvzPka6l3sK0nCqMUPNHXQe
+pM+LJ0OuIphcHSC5hGInuup5r7kszniX8L41x8Nim74rMya85QIfxQARAQABiQIf
+BBgBAgAJBQJSKGtvAhsMAAoJELtGM1DW7zHv5fkP/jqCt6TLmYmbBFrYipmmCTk8
+TmY3QS54JXeIfUrWMqNTxkXASQAbRcYNw97ycGBfF80KdMxrIXfFY1YxStfVZwYP
++0TKWRZEPcIZW8FLhTRfKbmfuA2Fdc4F8ufznd7JJ/3Q4XocKnfVNar+PCaMWkbu
+e/NBJXgKkxaf4sf1awnbRWxH+TZPGYe2mUZ+//NOJThJaNLKMNLW/klF3ThnF7ji
+2c/VR+KQdkKL8d60xX7iINynizQzf9jlpW1KcBejMDHe4RdCYNyEUUTMb7ibLKhu
+P6b8pXoAEaTNenAfxPHnhTnBPG6GSWPRuYtnDA3bGlV+WNla0k1z1mCVLw9Eu6W7
+dnxtVA5Oee6jJnE/v71HleENj9IDa+Puf/DkXqWeqPJvwWxevaqISXYTT7EBrpQS
+S73MaBY81Mdmaa2IMqyqGU1bh4CmEy9kWoL7qLu9FVX2ahn7y54PSsytV0/ne2H9
+b9H1xC1/+zDC2h/v0RGo5sL1Svf/LL8II08j4OPWqoxmwUQoAtWKlx7EpuoaFB8p
+jDBoqANJ7yZUdz8ltPCh/auY/FuYE1BZWAfBFVQYHrcmef1p9LdJgQFMDP9/hLpM
+AzfRUvZOjof68q1zhk+3NEhAPl1TdINZPioYy6wCBKWsbnn4FwKq2AQQXv8ls5Qd
+stS7z6D8XatmkBuyvlXymQINBFfNZD4BEACo0YKCUEhTY7v8VZVw3csAtnsRSFQ1
+8G8xfYIt7mJEBrtfiGG4g28EjNeWQfN8wGIaAeRGl5nb7s9RRpxXStUu719jGX1Z
+9Sr8p/JOmBS5kdfAtYId9Cl3VsGRvf4Smg1ClrEv6tQ97j+d1FY8QfgW/GS46YBO
+EeOFVQRtfi7Yv9lZkiBFrzP0Nr7JV9u1GkBsFgNkVuYs/3RDYULItBwGFerduOyQ
+COt819QvHHSZkXqJWwNROA6lc8gW36lKbDHoZ1jSkDnDV0bW0cX1/6WJSzWYdcPi
+ceA1vj/VDg0Kr23SVQ1PyPvBirT7ToirQm6KrIiKHWLSg156ht8/K2C1Dgypf+YM
+seMbHQxVLrI2p4zpmxu3B2SrSj3ImM5FO0XGd1gxn/qywNVJDQBfcYnndksD2i/9
+/Es8I/F6OymBZl4HWBvx7ixm2JPXkmwVPEC/lJn3eCBb1fAaJSlroHtaAEteCWuE
+5/Mg/uYEh1UeAstP47N3P0B3l1E4Ccw1ne2/O1BdsnXeUaI3YVYz9aZkVlL7ywda
+3h/goRKxc1b18bmgu/EdQmcTEMj29B3szMpetWNt1ZbaMJzfDw+z+SiQ3toOTUiq
+MuWq+l+JK0dVUzOvpGhGVHv5m9CtJFP671ivEc4it0hJRH5kdW9aNbeG0g9TxHQq
+QMJIpeLvRq5WKwARAQABtCFBbGJlcnQgQXN0YWxzIENpZCA8YWFjaWRAa2RlLm9y
+Zz6JAlQEEwEIAD4CGwMFCwkIBwIGFQgJCgsCBBYCAwECHgECF4AWIQTKJixsg95N
+L7KKMyo6ak24Oeqm1wUCYv52/wUJDRPXIAAKCRA6ak24Oeqm1zksD/95HdsLbCMl
+QWImftxAY0wUNVLTvt7+9rjpt/unyCqdtD9uS7J6Tfldmd2zPxIJFxpDx3AK5gJG
+Al8hBuARBTG6mzDSyohy0ldLAroab2zKn/hGfnAlxZtsa8DGmNhKKb8zEyKraM2g
+rdc2bCF/sQ5yKmC0THAQwMBjLHoszKYV+y/R34o1nZZaufPrNWMPd3hmiyCl5vzm
+RDQJatmkDvueYyPMt3FfJovWtixWFHsdnQ72l2kelkhpNc51RpgZ6lCm9ghWWTLv
+OEPhR5tpYQ+CykPatmzhLXUthnfTCphQNf6nX7jjllq7Sd4MaTAmnj0yfoTyHjdq
+PAYv26dMbBlR2lAxXz2SoyQZVHgGQeEW4nll6Xej25d1yKnOXwO4g3RBt/dv4Q8I
+QKHyDZY5hJotg2OrA1hL9zsb+6lKjMr0UEJa8lhhwSKhlVzD0fdrOaP7pJUfjyd0
+CrPrlrgdNoo4eV0bXV5kuFKfCgmwRHKWyJKDc1CmnJReFMJQGfFMiuOyvYhVhUxN
+BzS7sV3IF28r1n1iKN9eGSgcBjAVW2LKaq0ThW1QXWcWT7vudcXjbq9kQuOTh7fB
+EM47wHhyqhLP5TOIBBaIxW2x87Ag4i2HKUM2PsV+j6rzMwiCfzINUS+IEfUTX52M
+c3JUKCqOrqVlNJ1d/4+mkshlzwQA2oFzEQ==
+=oKnI
+-----END PGP PUBLIC KEY BLOCK-----
+
diff -pruN 24.08.1-1/debian/watch 25.03.90-1/debian/watch
--- 24.08.1-1/debian/watch	2024-09-22 10:29:49.000000000 +0000
+++ 25.03.90-1/debian/watch	2025-04-03 21:00:02.000000000 +0000
@@ -1,2 +1,2 @@
 version=4
-https://github.com/KDE/keysmith/tags .*/v?(\d.*)@ARCHIVE_EXT@
+opts=pgpsigurlmangle=s/$/.sig/ https://download.kde.org/stable/release-service/([\d.]+)/src/@PACKAGE@-([\d.]+)\.tar\.xz
diff -pruN 24.08.1-1/keysmith.svg 25.03.90-1/keysmith.svg
--- 24.08.1-1/keysmith.svg	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/keysmith.svg	1970-01-01 00:00:00.000000000 +0000
@@ -1,451 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!--
-  - SPDX-License-Identifier: CC-BY-SA-4.0
-  - SPDX-FileCopyrightText: 2019 Carson Black <uhhadd@gmail.com>
- -->
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:xlink="http://www.w3.org/1999/xlink"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="48"
-   height="48"
-   version="1.1"
-   id="svg2"
-   sodipodi:docname="klucze-larger.svg"
-   inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
-   inkscape:export-filename="/home/cdblack/Public/klucze-larger.svg.png"
-   inkscape:export-xdpi="512"
-   inkscape:export-ydpi="512">
-  <metadata
-     id="metadata8">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <defs
-     id="defs6">
-    <linearGradient
-       id="linearGradient1320"
-       inkscape:collect="always">
-      <stop
-         id="stop1316"
-         offset="0"
-         style="stop-color:#208c4e;stop-opacity:1" />
-      <stop
-         id="stop1318"
-         offset="1"
-         style="stop-color:#2383c5;stop-opacity:1" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient2672"
-       inkscape:collect="always">
-      <stop
-         id="stop2676"
-         offset="0"
-         style="stop-color:#ebb0b0;stop-opacity:1" />
-      <stop
-         id="stop2678"
-         offset="1"
-         style="stop-color:#f25151;stop-opacity:1" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient2394"
-       inkscape:collect="always">
-      <stop
-         id="stop2390"
-         offset="0"
-         style="stop-color:#d3f5e2;stop-opacity:1" />
-      <stop
-         id="stop2392"
-         offset="1"
-         style="stop-color:#abd4f0;stop-opacity:1" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4642"
-       id="linearGradient2364"
-       x1="39.5"
-       y1="44"
-       x2="8.5"
-       y2="3"
-       gradientUnits="userSpaceOnUse" />
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient4642">
-      <stop
-         style="stop-color:#27ae60;stop-opacity:1"
-         offset="0"
-         id="stop4638" />
-      <stop
-         style="stop-color:#3498db;stop-opacity:1"
-         offset="1"
-         id="stop4640" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2394"
-       id="linearGradient2388"
-       x1="36.5"
-       y1="41"
-       x2="11.5"
-       y2="16"
-       gradientUnits="userSpaceOnUse" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4642"
-       id="linearGradient2388-7"
-       x1="36.5"
-       y1="41"
-       x2="11.5"
-       y2="16"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.51999997,0,0,0.51999997,11.519999,13.679999)" />
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient1580-1">
-      <stop
-         style="stop-color:#000000;stop-opacity:0.55223882"
-         offset="0"
-         id="stop1576" />
-      <stop
-         style="stop-color:#000000;stop-opacity:0"
-         offset="1"
-         id="stop1578" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient1580-1"
-       id="linearGradient2461"
-       x1="19.661165"
-       y1="24.161165"
-       x2="34.499813"
-       y2="38.999813"
-       gradientUnits="userSpaceOnUse" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient1580-1"
-       id="linearGradient2474"
-       x1="19.403807"
-       y1="23.903807"
-       x2="33.961548"
-       y2="38.461548"
-       gradientUnits="userSpaceOnUse" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2672"
-       id="linearGradient2674"
-       x1="-17"
-       y1="12.144531"
-       x2="-17"
-       y2="14.888672"
-       gradientUnits="userSpaceOnUse" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4642"
-       id="linearGradient2388-7-1"
-       x1="36.5"
-       y1="41"
-       x2="11.5"
-       y2="16"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.51999997,0,0,0.51999997,49.519999,3.679999)" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient1320"
-       id="linearGradient1308"
-       x1="67.5"
-       y1="24"
-       x2="56.5"
-       y2="13"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="translate(-38,10)" />
-  </defs>
-  <sodipodi:namedview
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1"
-     objecttolerance="10"
-     gridtolerance="10"
-     guidetolerance="10"
-     inkscape:pageopacity="0"
-     inkscape:pageshadow="2"
-     inkscape:window-width="1920"
-     inkscape:window-height="1051"
-     id="namedview4"
-     showgrid="true"
-     showguides="true"
-     inkscape:guide-bbox="true"
-     inkscape:current-layer="layer5"
-     inkscape:zoom="11.313709"
-     inkscape:cx="20.991661"
-     inkscape:cy="19.296103"
-     inkscape:window-x="1280"
-     inkscape:window-y="0"
-     inkscape:window-maximized="1"
-     inkscape:snap-smooth-nodes="true"
-     inkscape:pagecheckerboard="true"
-     inkscape:snap-object-midpoints="true"
-     inkscape:snap-grids="true"
-     inkscape:snap-bbox="true"
-     inkscape:bbox-nodes="true"
-     inkscape:snap-to-guides="false"
-     inkscape:bbox-paths="false"
-     inkscape:snap-bbox-edge-midpoints="false">
-    <inkscape:grid
-       type="xygrid"
-       id="grid10"
-       empspacing="4"
-       color="#3f3fff"
-       opacity="0.59215686"
-       empcolor="#3f3fff"
-       empopacity="1" />
-    <sodipodi:guide
-       position="-4,44"
-       orientation="0,1"
-       id="guide12"
-       inkscape:locked="false" />
-    <sodipodi:guide
-       position="44,52"
-       orientation="1,0"
-       id="guide14"
-       inkscape:locked="false" />
-    <sodipodi:guide
-       position="52,4"
-       orientation="0,1"
-       id="guide16"
-       inkscape:locked="false" />
-    <sodipodi:guide
-       position="4,-4"
-       orientation="1,0"
-       id="guide18"
-       inkscape:locked="false" />
-    <sodipodi:guide
-       position="24,35"
-       orientation="1,0"
-       id="guide2422"
-       inkscape:locked="false" />
-    <sodipodi:guide
-       position="8.5,19.5"
-       orientation="0,1"
-       id="guide2424"
-       inkscape:locked="false" />
-    <sodipodi:guide
-       position="24,29"
-       orientation="0,1"
-       id="guide2479"
-       inkscape:locked="false" />
-    <sodipodi:guide
-       position="24,10"
-       orientation="0,1"
-       id="guide2481"
-       inkscape:locked="false" />
-    <inkscape:grid
-       type="xygrid"
-       id="grid2483"
-       empspacing="4"
-       spacingx="0.5"
-       spacingy="0.5"
-       color="#ff3f3f"
-       opacity="0.1254902"
-       empcolor="#ff3f3f"
-       empopacity="0.25098039"
-       visible="true" />
-    <sodipodi:guide
-       position="14.5,19.5"
-       orientation="1,0"
-       id="guide2487"
-       inkscape:locked="false" />
-    <sodipodi:guide
-       position="33.5,19.5"
-       orientation="1,0"
-       id="guide2489"
-       inkscape:locked="false" />
-  </sodipodi:namedview>
-  <g
-     inkscape:groupmode="layer"
-     id="layer3"
-     inkscape:label="Original Shapes Before Union"
-     style="display:none">
-    <g
-       style="display:inline"
-       id="g2285-0">
-      <g
-         id="g2205-6">
-        <circle
-           style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.9375;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="path2153-2"
-           cx="24"
-           cy="28.5"
-           r="15.5" />
-        <rect
-           style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.73205078;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="rect2155-6"
-           width="3"
-           height="11"
-           x="12"
-           y="15" />
-        <rect
-           style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.73205078;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="rect2157-1"
-           width="3"
-           height="11"
-           x="33"
-           y="15" />
-      </g>
-      <path
-         sodipodi:nodetypes="sccsssccsccc"
-         inkscape:connector-curvature="0"
-         id="path2255-6-8"
-         d="m 24,3 c -6.627417,0 -12,5.372583 -12,12 0.0056,2.914823 1.072016,5.727946 3,7.914062 V 15 c 0,-4.970563 4.029437,-9 9,-9 4.970563,0 9,4.029437 9,9 v 7.921875 C 34.929759,20.733739 35.996258,17.917515 36,15 36,8.372583 30.627417,3 24,3 Z m 9,19.921875 -18,-0.0078 z"
-         style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
-    </g>
-  </g>
-  <g
-     inkscape:groupmode="layer"
-     id="layer1"
-     inkscape:label="Background"
-     style="display:inline">
-    <g
-       id="g2285"
-       style="fill-opacity:1;fill:url(#linearGradient2364)">
-      <path
-         style="opacity:1;fill:url(#linearGradient2364);fill-opacity:1.0;stroke:none;stroke-width:1.9375;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-         d="M 24,3 C 17.372583,3 12,8.372583 12,15 v 3.703125 A 15.5,15.5 0 0 0 8.5,28.5 15.5,15.5 0 0 0 24,44 15.5,15.5 0 0 0 39.5,28.5 15.5,15.5 0 0 0 36,18.705078 V 15 C 36,8.372583 30.627417,3 24,3 Z m 0,3 c 4.970563,0 9,4.029437 9,9 v 0.894531 A 15.5,15.5 0 0 0 24,13 15.5,15.5 0 0 0 15,15.904297 V 15 c 0,-4.970563 4.029437,-9 9,-9 z"
-         id="path2153"
-         inkscape:connector-curvature="0" />
-    </g>
-    <g
-       transform="translate(41,2.355469)"
-       id="g2285-7"
-       style="display:inline;fill:url(#linearGradient2674);fill-opacity:1">
-      <path
-         style="opacity:1;fill:url(#linearGradient2674);fill-opacity:1.0;stroke:none;stroke-width:1.9375;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-         d="M 24 13 A 15.5 15.5 0 0 0 23 13.052734 L 23 17.144531 L 25 17.144531 L 25 13.052734 A 15.5 15.5 0 0 0 24 13 z "
-         transform="translate(-41,-2.355469)"
-         id="path2153-3" />
-    </g>
-    <path
-       style="opacity:1;fill:#000000;fill-opacity:0.26696837;stroke:none;stroke-width:1.9375;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="M 8.523438,27.960938 C 8.512498,28.140476 8.504684,28.32019 8.5,28.5 8.5,37.060414 15.439586,44 24,44 c 8.560414,0 15.5,-6.939586 15.5,-15.5 -0.0053,-0.13811 -0.01248,-0.276143 -0.02148,-0.414062 C 39.163684,36.408377 32.32839,42.994409 24,43 15.625508,42.99104 8.772473,36.331731 8.523438,27.960938 Z"
-       id="path2153-6"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="ccscccc" />
-  </g>
-  <g
-     inkscape:groupmode="layer"
-     id="layer2"
-     inkscape:label="Semi-Background"
-     style="display:inline">
-    <path
-       style="display:inline;opacity:1;fill:url(#linearGradient2388);fill-opacity:1;stroke:none;stroke-width:1.61290324;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="M 36.5,28.5 A 12.5,12.5 0 0 1 24,41 12.5,12.5 0 0 1 11.5,28.5 12.5,12.5 0 0 1 24,16 12.5,12.5 0 0 1 36.5,28.5 Z"
-       id="path2341"
-       inkscape:connector-curvature="0" />
-    <path
-       style="display:inline;opacity:1;fill:#000000;fill-opacity:0.06334842;stroke:none;stroke-width:1.61290324;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="M 24,16 A 12.5,12.5 0 0 0 11.5,28.5 12.5,12.5 0 0 0 24,41 12.5,12.5 0 0 0 36.5,28.5 12.5,12.5 0 0 0 24,16 Z m 0,1 A 11.5,11.5 0 0 1 35.5,28.5 11.5,11.5 0 0 1 24,40 11.5,11.5 0 0 1 12.5,28.5 11.5,11.5 0 0 1 24,17 Z"
-       id="path2341-4"
-       inkscape:connector-curvature="0" />
-  </g>
-  <g
-     inkscape:groupmode="layer"
-     id="layer6"
-     inkscape:label="Snapping Circle"
-     style="display:none">
-    <path
-       style="opacity:1;fill:#8dc5eb;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="m 33.5,28.5 c 0,2.623353 -1.063324,4.998353 -2.782486,6.717514 C 28.998353,36.936676 26.623353,38 24,38 21.376647,38 19.001647,36.936676 17.282486,35.217514 15.563324,33.498353 14.5,31.123353 14.5,28.5 c 0,-2.623353 1.063324,-4.998353 2.782486,-6.717514 C 19.001647,20.063324 21.376647,19 24,19 c 2.623353,0 4.998353,1.063324 6.717514,2.782486 C 32.436676,23.501647 33.5,25.876647 33.5,28.5 Z"
-       id="path2491"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="sssssssss" />
-  </g>
-  <g
-     inkscape:groupmode="layer"
-     id="layer7"
-     inkscape:label="Lock Indicators"
-     style="display:inline">
-    <path
-       style="display:inline;fill:none;fill-opacity:1;stroke:#11d116;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="m 24,17.5 v 3"
-       id="path2494"
-       inkscape:connector-curvature="0" />
-    <path
-       style="display:inline;fill:none;fill-opacity:1;stroke:#11d116;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="m 24,36.5 v 3"
-       id="path2494-2"
-       inkscape:connector-curvature="0" />
-    <path
-       style="display:inline;fill:none;fill-opacity:1;stroke:#11d116;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="m 32,28.5 h 3"
-       id="path2494-2-3"
-       inkscape:connector-curvature="0" />
-    <path
-       style="display:inline;fill:none;fill-opacity:1;stroke:#11d116;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="m 13,28.5 h 3"
-       id="path2494-2-3-7"
-       inkscape:connector-curvature="0" />
-    <path
-       style="display:inline;fill:none;fill-opacity:1;stroke:#11d116;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="m 16.575379,21.075379 1.414214,1.414214"
-       id="path2494-2-3-7-5"
-       inkscape:connector-curvature="0" />
-    <path
-       style="display:inline;fill:none;fill-opacity:1;stroke:#11d116;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="m 30.010407,34.510407 1.414214,1.414214"
-       id="path2494-2-3-7-5-9"
-       inkscape:connector-curvature="0" />
-    <path
-       style="display:inline;fill:none;fill-opacity:1;stroke:#11d116;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="m 30.010407,22.489593 1.414214,-1.414214"
-       id="path2494-2-3-7-5-9-2"
-       inkscape:connector-curvature="0" />
-    <path
-       style="display:inline;fill:none;fill-opacity:1;stroke:#11d116;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="m 16.575379,35.924621 1.414214,-1.414214"
-       id="path2494-2-3-7-5-9-2-2"
-       inkscape:connector-curvature="0" />
-  </g>
-  <g
-     inkscape:groupmode="layer"
-     id="layer4"
-     inkscape:label="Shadow"
-     style="display:inline">
-    <path
-       style="display:inline;fill:url(#linearGradient2474);fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="M 44,39.307612 28.596194,23.903806 19.403806,33.096194 44,57.692388 Z"
-       id="path2465"
-       inkscape:connector-curvature="0" />
-  </g>
-  <g
-     inkscape:groupmode="layer"
-     id="layer5"
-     inkscape:label="Foreground"
-     style="display:inline">
-    <path
-       style="display:inline;opacity:1;fill:url(#linearGradient2388-7);fill-opacity:1;stroke:none;stroke-width:0.83870971;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="M 30.5,28.5 A 6.4999999,6.4999999 0 0 1 24,35 6.4999999,6.4999999 0 0 1 17.5,28.5 6.4999999,6.4999999 0 0 1 24,22 a 6.4999999,6.4999999 0 0 1 6.5,6.5 z"
-       id="path2341-0"
-       inkscape:connector-curvature="0" />
-    <path
-       style="display:inline;opacity:1;fill:url(#linearGradient2388-7-1);fill-opacity:1;stroke:none;stroke-width:0.83870971;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="M 68.5,18.5 A 6.4999999,6.4999999 0 0 1 62,25 6.4999999,6.4999999 0 0 1 55.5,18.5 6.4999999,6.4999999 0 0 1 62,12 a 6.4999999,6.4999999 0 0 1 6.5,6.5 z"
-       id="path2341-0-3"
-       inkscape:connector-curvature="0" />
-    <path
-       style="display:inline;opacity:1;fill:url(#linearGradient1308);fill-opacity:1;stroke:none;stroke-width:0.70967746;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="M 24,23 A 5.4999999,5.4999999 0 0 0 18.5,28.5 5.4999999,5.4999999 0 0 0 24,34 5.4999999,5.4999999 0 0 0 29.5,28.5 5.4999999,5.4999999 0 0 0 24,23 Z m 0,1 A 4.4999999,4.4999999 0 0 1 28.5,28.5 4.4999999,4.4999999 0 0 1 24,33 4.4999999,4.4999999 0 0 1 19.5,28.5 4.4999999,4.4999999 0 0 1 24,24 Z"
-       id="path2341-0-3-1"
-       inkscape:connector-curvature="0" />
-  </g>
-</svg>
diff -pruN 24.08.1-1/org.kde.keysmith.appdata.xml 25.03.90-1/org.kde.keysmith.appdata.xml
--- 24.08.1-1/org.kde.keysmith.appdata.xml	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/org.kde.keysmith.appdata.xml	2025-03-27 10:13:04.000000000 +0000
@@ -8,6 +8,7 @@
 <component type="desktop-application">
   <id>org.kde.keysmith</id>
   <name>Keysmith</name>
+  <name xml:lang="ar">صانع المفاتيح</name>
   <name xml:lang="ast">Keysmith</name>
   <name xml:lang="ca">Keysmith</name>
   <name xml:lang="ca-valencia">Keysmith</name>
@@ -38,6 +39,7 @@
   <name xml:lang="pt-BR">Keysmith</name>
   <name xml:lang="ro">Keysmith</name>
   <name xml:lang="ru">Keysmith</name>
+  <name xml:lang="sa">कीलकारः</name>
   <name xml:lang="sk">Keysmith</name>
   <name xml:lang="sl">Keysmith</name>
   <name xml:lang="sv">Keysmith</name>
@@ -63,7 +65,11 @@
     <control>keyboard</control>
     <control>touch</control>
   </recommends>
+  <requires>
+    <display_length compare="ge">360</display_length>
+  </requires>
   <summary>Two-factor code generator for Plasma Mobile and Desktop</summary>
+  <summary xml:lang="ar">مولد رمز ثنائي العوامل للأجهزة المحمولة وأجهزة سطح المكتب</summary>
   <summary xml:lang="ca">Generador del codi de dos factors per al Plasma Mobile i l'escriptori</summary>
   <summary xml:lang="ca-valencia">Generador del codi de dos factors per a Plasma Mobile i l'escriptori</summary>
   <summary xml:lang="de">Zwei-Faktor-Code-Generator für Plasma Mobile und die Plasma-Arbeitsfläche</summary>
@@ -92,6 +98,7 @@
   <summary xml:lang="pt-BR">Gerador de código de dois fatores para o Plasma Mobile e Desktop</summary>
   <summary xml:lang="ro">Generator de coduri cu doi factori pentru Plasma Mobile și Desktop</summary>
   <summary xml:lang="ru">Средство создания двухфакторных кодов для Plasma для мобильных устройств и настольных компьютеров</summary>
+  <summary xml:lang="sa">प्लाज्मा मोबाईल् तथा डेस्कटॉप् इत्येतयोः कृते द्वि-कारक-सङ्केत-जनरेटरः</summary>
   <summary xml:lang="sl">Dvofaktorski generator kod za Plasma Mobile in Desktop</summary>
   <summary xml:lang="sv">Tvåfaktors kodgenerator för Plasma mobil och skrivbord</summary>
   <summary xml:lang="tr">İki Aşamalı Kod Üreteci</summary>
@@ -99,47 +106,12 @@
   <summary xml:lang="x-test">xxTwo-factor code generator for Plasma Mobile and Desktopxx</summary>
   <summary xml:lang="zh-CN">Plasma 移动和桌面环境的双重验证码生成器</summary>
   <summary xml:lang="zh-TW">適用於 Plasma 行動版及桌面版的兩步驟驗證碼產生器</summary>
-  <developer_name>KDE Community</developer_name>
-  <developer_name xml:lang="ast">La comunidá KDE</developer_name>
-  <developer_name xml:lang="ca">La comunitat KDE</developer_name>
-  <developer_name xml:lang="ca-valencia">La comunitat KDE</developer_name>
-  <developer_name xml:lang="cs">Komunita KDE</developer_name>
-  <developer_name xml:lang="de">KDE-Gemeinschaft</developer_name>
-  <developer_name xml:lang="en-GB">KDE Community</developer_name>
-  <developer_name xml:lang="eo">KDE-Komunumo</developer_name>
-  <developer_name xml:lang="es">Comunidad KDE</developer_name>
-  <developer_name xml:lang="et">KDE kogukond</developer_name>
-  <developer_name xml:lang="eu">KDE komunitatea</developer_name>
-  <developer_name xml:lang="fi">KDE-yhteisö</developer_name>
-  <developer_name xml:lang="fr">La communauté KDE</developer_name>
-  <developer_name xml:lang="gl">Comunidade KDE</developer_name>
-  <developer_name xml:lang="he">קהילת KDE</developer_name>
-  <developer_name xml:lang="hi">केडीई समुदाय</developer_name>
-  <developer_name xml:lang="hu">A KDE Közösség</developer_name>
-  <developer_name xml:lang="ia">Communitate de KDE</developer_name>
-  <developer_name xml:lang="id">Komunitas KDE</developer_name>
-  <developer_name xml:lang="it">La comunità KDE</developer_name>
-  <developer_name xml:lang="ka">KDE-ის საზოგადოება</developer_name>
-  <developer_name xml:lang="ko">KDE 커뮤니티</developer_name>
-  <developer_name xml:lang="lt">KDE bendruomenė</developer_name>
-  <developer_name xml:lang="nl">KDE-gemeenschap</developer_name>
-  <developer_name xml:lang="nn">KDE-fellesskapet</developer_name>
-  <developer_name xml:lang="pa">ਕੇਡੀਈ ਕਮਿਊਨਟੀ</developer_name>
-  <developer_name xml:lang="pl">Społeczność KDE</developer_name>
-  <developer_name xml:lang="pt">Comunidade do KDE</developer_name>
-  <developer_name xml:lang="pt-BR">Comunidade KDE</developer_name>
-  <developer_name xml:lang="ro">Comunitatea KDE</developer_name>
-  <developer_name xml:lang="ru">Сообщество KDE</developer_name>
-  <developer_name xml:lang="sk">KDE komunita</developer_name>
-  <developer_name xml:lang="sl">Skupnost KDE</developer_name>
-  <developer_name xml:lang="sv">KDE-gemenskapen</developer_name>
-  <developer_name xml:lang="tr">KDE Topluluğu</developer_name>
-  <developer_name xml:lang="uk">Спільнота KDE</developer_name>
-  <developer_name xml:lang="x-test">xxKDE Communityxx</developer_name>
-  <developer_name xml:lang="zh-CN">KDE 社区</developer_name>
-  <developer_name xml:lang="zh-TW">KDE 社群</developer_name>
+  <developer id="kde.org">
+    <name translate="no">KDE</name>
+  </developer>
   <description>
     <p>Keysmith generates tokens for your two-factor logins (2FA)</p>
+    <p xml:lang="ar">يقوم صانع المفاتيح بإنشاء رموز الولوج ثنائي العوامل (2FA)</p>
     <p xml:lang="ca">El Keysmith genera testimonis per als inicis de sessió de dos factors (2FA)</p>
     <p xml:lang="ca-valencia">Keysmith genera testimonis per als inicis de sessió de dos factors (2FA)</p>
     <p xml:lang="de">Keysmith generiert Token für die Zwei-Faktor-Authentisierung (FA)</p>
@@ -168,6 +140,7 @@
     <p xml:lang="pt-BR">O Keysmith gera tokens para logins de dois fatores (2FA)</p>
     <p xml:lang="ro">Keysmith generează jetoane pentru autentificare cu doi factori (2FA)</p>
     <p xml:lang="ru">Keysmith создаёт маркеры для входа с использованием двухфакторной аутентификации (2FA)</p>
+    <p xml:lang="sa">कीस्मिथः भवतः द्वि-कारक-प्रवेशानां कृते टोकन-जनयति (2FA) ।</p>
     <p xml:lang="sl">Keysmith ustvari žetone za vaše dvo-faktorske prijave (2FA)</p>
     <p xml:lang="sv">Keysmith genererar symboler för tvåfaktors inloggningar (2FA)</p>
     <p xml:lang="tr">Çilingir, iki aşamalı oturum açmalar (2FA) için jetonlar üretir</p>
@@ -177,6 +150,7 @@
     <p xml:lang="zh-TW">Keysmith 會產生用於兩步驟登入 (2FA) 的憑證</p>
     <ul>
       <li>Time and Hash-based OTP</li>
+      <li xml:lang="ar">الوقت وكلمة المرور لمرة واحدة (OTP) القائمة على التجزئة</li>
       <li xml:lang="ca">OTP basat en l'hora i en el resum</li>
       <li xml:lang="ca-valencia">OTP basat en l'hora i en el resum</li>
       <li xml:lang="de">Zeit- und Hashbasiertes Einmalpasswort</li>
@@ -205,6 +179,7 @@
       <li xml:lang="pt-BR">OTP baseados no tempo e hash</li>
       <li xml:lang="ro">OTP bazat pe oră și hash</li>
       <li xml:lang="ru">OTP на основе данных времени и хеша</li>
+      <li xml:lang="sa">समयः तथा हैश-आधारितः ओटीपी</li>
       <li xml:lang="sl">Časovno in razsuto osnovana enkratna gesla</li>
       <li xml:lang="sv">Tids- och kondensatbaserad OTP</li>
       <li xml:lang="tr">Zaman ve Sağlama tabanlı tek kerelik parola</li>
@@ -217,6 +192,7 @@
   <screenshots>
     <screenshot type="default">
       <caption>Keysmith</caption>
+      <caption xml:lang="ar">صانع المفاتيح</caption>
       <caption xml:lang="ast">Keysmith</caption>
       <caption xml:lang="ca">Keysmith</caption>
       <caption xml:lang="ca-valencia">Keysmith</caption>
@@ -247,6 +223,7 @@
       <caption xml:lang="pt-BR">Keysmith</caption>
       <caption xml:lang="ro">Keysmith</caption>
       <caption xml:lang="ru">Keysmith</caption>
+      <caption xml:lang="sa">कीलकारः</caption>
       <caption xml:lang="sk">Keysmith</caption>
       <caption xml:lang="sl">Keysmith</caption>
       <caption xml:lang="sv">Keysmith</caption>
@@ -261,6 +238,12 @@
   <url type="homepage">https://apps.kde.org/keysmith/</url>
   <url type="bugtracker">https://bugs.kde.org/enter_bug.cgi?product=Keysmith</url>
   <releases>
+    <release version="24.12.3" date="2025-03-06"/>
+    <release version="24.12.2" date="2025-02-06"/>
+    <release version="24.12.1" date="2025-01-09"/>
+    <release version="24.12.0" date="2024-12-12"/>
+    <release version="24.08.3" date="2024-11-07"/>
+    <release version="24.08.2" date="2024-10-10"/>
     <release version="24.08.1" date="2024-09-12"/>
     <release version="24.08.0" date="2024-08-22"/>
     <release version="24.05.2" date="2024-07-04"/>
diff -pruN 24.08.1-1/org.kde.keysmith.desktop 25.03.90-1/org.kde.keysmith.desktop
--- 24.08.1-1/org.kde.keysmith.desktop	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/org.kde.keysmith.desktop	2025-03-27 10:13:04.000000000 +0000
@@ -6,6 +6,7 @@
 #
 [Desktop Entry]
 Name=Keysmith
+Name[ar]=صانع المفاتيح
 Name[ast]=Keysmith
 Name[ca]=Keysmith
 Name[ca@valencia]=Keysmith
@@ -35,6 +36,7 @@ Name[pt]=Keysmith
 Name[pt_BR]=Keysmith
 Name[ro]=Keysmith
 Name[ru]=Keysmith
+Name[sa]=कीलकारः
 Name[sk]=Keysmith
 Name[sl]=Keysmith
 Name[sv]=Keysmith
@@ -45,6 +47,7 @@ Name[x-test]=xxKeysmithxx
 Name[zh_CN]=Keysmith
 Name[zh_TW]=Keysmith
 Comment=Manage your OTP tokens for two factor authentication (2fa)
+Comment[ar]=أدر الرموز المرور لمرة واحدة (OTP) الخاصة بك للمصادقة الثنائية (2fa)
 Comment[ca]=Gestiona els vostres símbols OTP per a una autenticació de dos factors (2fa)
 Comment[ca@valencia]=Gestiona els vostres símbols OTP per a una autenticació de dos factors (2fa)
 Comment[cs]=Spravujte tokeny OTP pomocí dvoufaktorového ověření (2fa)
@@ -73,6 +76,7 @@ Comment[pt]=Faça a gestão dos seus có
 Comment[pt_BR]=Gerencie seus tokens OTP para a autenticação de dois fatores (2fa)
 Comment[ro]=Gestionați-vă jetoanele OTP pentru autentificarea în doi factori (2fa)
 Comment[ru]=Управление маркерами OTP для двухфакторной аутентификации (2fa)
+Comment[sa]=द्वयोः कारकप्रमाणीकरणार्थं (2fa) स्वस्य OTP टोकनं प्रबन्धयन्तु ।
 Comment[sk]=Spravujte svoje OTP tokeny pre dvojfaktorové overenie (2fa)
 Comment[sl]=Upravljajte vaših enkratnih gesel žetonov za dvo-faktorsko overjanje (2fa)
 Comment[sv]=Hantera OTP-symboler för tvåfaktorsbehörighetskontroll (2fa)
@@ -84,7 +88,7 @@ Comment[zh_CN]=管理 OTP 令牌的双
 Comment[zh_TW]=管理兩步驟驗證 (2FA) 的 OTP 憑證
 Version=1.0
 Exec=keysmith %u
-Icon=keysmith
+Icon=org.kde.keysmith
 Type=Application
 SingleMainWindow=true
 Terminal=false
diff -pruN 24.08.1-1/org.kde.keysmith.svg 25.03.90-1/org.kde.keysmith.svg
--- 24.08.1-1/org.kde.keysmith.svg	1970-01-01 00:00:00.000000000 +0000
+++ 25.03.90-1/org.kde.keysmith.svg	2025-03-27 10:13:04.000000000 +0000
@@ -0,0 +1,451 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+  - SPDX-License-Identifier: CC-BY-SA-4.0
+  - SPDX-FileCopyrightText: 2019 Carson Black <uhhadd@gmail.com>
+ -->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="48"
+   height="48"
+   version="1.1"
+   id="svg2"
+   sodipodi:docname="klucze-larger.svg"
+   inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
+   inkscape:export-filename="/home/cdblack/Public/klucze-larger.svg.png"
+   inkscape:export-xdpi="512"
+   inkscape:export-ydpi="512">
+  <metadata
+     id="metadata8">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs6">
+    <linearGradient
+       id="linearGradient1320"
+       inkscape:collect="always">
+      <stop
+         id="stop1316"
+         offset="0"
+         style="stop-color:#208c4e;stop-opacity:1" />
+      <stop
+         id="stop1318"
+         offset="1"
+         style="stop-color:#2383c5;stop-opacity:1" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2672"
+       inkscape:collect="always">
+      <stop
+         id="stop2676"
+         offset="0"
+         style="stop-color:#ebb0b0;stop-opacity:1" />
+      <stop
+         id="stop2678"
+         offset="1"
+         style="stop-color:#f25151;stop-opacity:1" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2394"
+       inkscape:collect="always">
+      <stop
+         id="stop2390"
+         offset="0"
+         style="stop-color:#d3f5e2;stop-opacity:1" />
+      <stop
+         id="stop2392"
+         offset="1"
+         style="stop-color:#abd4f0;stop-opacity:1" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4642"
+       id="linearGradient2364"
+       x1="39.5"
+       y1="44"
+       x2="8.5"
+       y2="3"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient4642">
+      <stop
+         style="stop-color:#27ae60;stop-opacity:1"
+         offset="0"
+         id="stop4638" />
+      <stop
+         style="stop-color:#3498db;stop-opacity:1"
+         offset="1"
+         id="stop4640" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2394"
+       id="linearGradient2388"
+       x1="36.5"
+       y1="41"
+       x2="11.5"
+       y2="16"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4642"
+       id="linearGradient2388-7"
+       x1="36.5"
+       y1="41"
+       x2="11.5"
+       y2="16"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.51999997,0,0,0.51999997,11.519999,13.679999)" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient1580-1">
+      <stop
+         style="stop-color:#000000;stop-opacity:0.55223882"
+         offset="0"
+         id="stop1576" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0"
+         offset="1"
+         id="stop1578" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient1580-1"
+       id="linearGradient2461"
+       x1="19.661165"
+       y1="24.161165"
+       x2="34.499813"
+       y2="38.999813"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient1580-1"
+       id="linearGradient2474"
+       x1="19.403807"
+       y1="23.903807"
+       x2="33.961548"
+       y2="38.461548"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2672"
+       id="linearGradient2674"
+       x1="-17"
+       y1="12.144531"
+       x2="-17"
+       y2="14.888672"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4642"
+       id="linearGradient2388-7-1"
+       x1="36.5"
+       y1="41"
+       x2="11.5"
+       y2="16"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.51999997,0,0,0.51999997,49.519999,3.679999)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient1320"
+       id="linearGradient1308"
+       x1="67.5"
+       y1="24"
+       x2="56.5"
+       y2="13"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-38,10)" />
+  </defs>
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="1920"
+     inkscape:window-height="1051"
+     id="namedview4"
+     showgrid="true"
+     showguides="true"
+     inkscape:guide-bbox="true"
+     inkscape:current-layer="layer5"
+     inkscape:zoom="11.313709"
+     inkscape:cx="20.991661"
+     inkscape:cy="19.296103"
+     inkscape:window-x="1280"
+     inkscape:window-y="0"
+     inkscape:window-maximized="1"
+     inkscape:snap-smooth-nodes="true"
+     inkscape:pagecheckerboard="true"
+     inkscape:snap-object-midpoints="true"
+     inkscape:snap-grids="true"
+     inkscape:snap-bbox="true"
+     inkscape:bbox-nodes="true"
+     inkscape:snap-to-guides="false"
+     inkscape:bbox-paths="false"
+     inkscape:snap-bbox-edge-midpoints="false">
+    <inkscape:grid
+       type="xygrid"
+       id="grid10"
+       empspacing="4"
+       color="#3f3fff"
+       opacity="0.59215686"
+       empcolor="#3f3fff"
+       empopacity="1" />
+    <sodipodi:guide
+       position="-4,44"
+       orientation="0,1"
+       id="guide12"
+       inkscape:locked="false" />
+    <sodipodi:guide
+       position="44,52"
+       orientation="1,0"
+       id="guide14"
+       inkscape:locked="false" />
+    <sodipodi:guide
+       position="52,4"
+       orientation="0,1"
+       id="guide16"
+       inkscape:locked="false" />
+    <sodipodi:guide
+       position="4,-4"
+       orientation="1,0"
+       id="guide18"
+       inkscape:locked="false" />
+    <sodipodi:guide
+       position="24,35"
+       orientation="1,0"
+       id="guide2422"
+       inkscape:locked="false" />
+    <sodipodi:guide
+       position="8.5,19.5"
+       orientation="0,1"
+       id="guide2424"
+       inkscape:locked="false" />
+    <sodipodi:guide
+       position="24,29"
+       orientation="0,1"
+       id="guide2479"
+       inkscape:locked="false" />
+    <sodipodi:guide
+       position="24,10"
+       orientation="0,1"
+       id="guide2481"
+       inkscape:locked="false" />
+    <inkscape:grid
+       type="xygrid"
+       id="grid2483"
+       empspacing="4"
+       spacingx="0.5"
+       spacingy="0.5"
+       color="#ff3f3f"
+       opacity="0.1254902"
+       empcolor="#ff3f3f"
+       empopacity="0.25098039"
+       visible="true" />
+    <sodipodi:guide
+       position="14.5,19.5"
+       orientation="1,0"
+       id="guide2487"
+       inkscape:locked="false" />
+    <sodipodi:guide
+       position="33.5,19.5"
+       orientation="1,0"
+       id="guide2489"
+       inkscape:locked="false" />
+  </sodipodi:namedview>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="Original Shapes Before Union"
+     style="display:none">
+    <g
+       style="display:inline"
+       id="g2285-0">
+      <g
+         id="g2205-6">
+        <circle
+           style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.9375;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path2153-2"
+           cx="24"
+           cy="28.5"
+           r="15.5" />
+        <rect
+           style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.73205078;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect2155-6"
+           width="3"
+           height="11"
+           x="12"
+           y="15" />
+        <rect
+           style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.73205078;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect2157-1"
+           width="3"
+           height="11"
+           x="33"
+           y="15" />
+      </g>
+      <path
+         sodipodi:nodetypes="sccsssccsccc"
+         inkscape:connector-curvature="0"
+         id="path2255-6-8"
+         d="m 24,3 c -6.627417,0 -12,5.372583 -12,12 0.0056,2.914823 1.072016,5.727946 3,7.914062 V 15 c 0,-4.970563 4.029437,-9 9,-9 4.970563,0 9,4.029437 9,9 v 7.921875 C 34.929759,20.733739 35.996258,17.917515 36,15 36,8.372583 30.627417,3 24,3 Z m 9,19.921875 -18,-0.0078 z"
+         style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    </g>
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer1"
+     inkscape:label="Background"
+     style="display:inline">
+    <g
+       id="g2285"
+       style="fill-opacity:1;fill:url(#linearGradient2364)">
+      <path
+         style="opacity:1;fill:url(#linearGradient2364);fill-opacity:1.0;stroke:none;stroke-width:1.9375;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 24,3 C 17.372583,3 12,8.372583 12,15 v 3.703125 A 15.5,15.5 0 0 0 8.5,28.5 15.5,15.5 0 0 0 24,44 15.5,15.5 0 0 0 39.5,28.5 15.5,15.5 0 0 0 36,18.705078 V 15 C 36,8.372583 30.627417,3 24,3 Z m 0,3 c 4.970563,0 9,4.029437 9,9 v 0.894531 A 15.5,15.5 0 0 0 24,13 15.5,15.5 0 0 0 15,15.904297 V 15 c 0,-4.970563 4.029437,-9 9,-9 z"
+         id="path2153"
+         inkscape:connector-curvature="0" />
+    </g>
+    <g
+       transform="translate(41,2.355469)"
+       id="g2285-7"
+       style="display:inline;fill:url(#linearGradient2674);fill-opacity:1">
+      <path
+         style="opacity:1;fill:url(#linearGradient2674);fill-opacity:1.0;stroke:none;stroke-width:1.9375;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 24 13 A 15.5 15.5 0 0 0 23 13.052734 L 23 17.144531 L 25 17.144531 L 25 13.052734 A 15.5 15.5 0 0 0 24 13 z "
+         transform="translate(-41,-2.355469)"
+         id="path2153-3" />
+    </g>
+    <path
+       style="opacity:1;fill:#000000;fill-opacity:0.26696837;stroke:none;stroke-width:1.9375;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 8.523438,27.960938 C 8.512498,28.140476 8.504684,28.32019 8.5,28.5 8.5,37.060414 15.439586,44 24,44 c 8.560414,0 15.5,-6.939586 15.5,-15.5 -0.0053,-0.13811 -0.01248,-0.276143 -0.02148,-0.414062 C 39.163684,36.408377 32.32839,42.994409 24,43 15.625508,42.99104 8.772473,36.331731 8.523438,27.960938 Z"
+       id="path2153-6"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccscccc" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="Semi-Background"
+     style="display:inline">
+    <path
+       style="display:inline;opacity:1;fill:url(#linearGradient2388);fill-opacity:1;stroke:none;stroke-width:1.61290324;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 36.5,28.5 A 12.5,12.5 0 0 1 24,41 12.5,12.5 0 0 1 11.5,28.5 12.5,12.5 0 0 1 24,16 12.5,12.5 0 0 1 36.5,28.5 Z"
+       id="path2341"
+       inkscape:connector-curvature="0" />
+    <path
+       style="display:inline;opacity:1;fill:#000000;fill-opacity:0.06334842;stroke:none;stroke-width:1.61290324;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 24,16 A 12.5,12.5 0 0 0 11.5,28.5 12.5,12.5 0 0 0 24,41 12.5,12.5 0 0 0 36.5,28.5 12.5,12.5 0 0 0 24,16 Z m 0,1 A 11.5,11.5 0 0 1 35.5,28.5 11.5,11.5 0 0 1 24,40 11.5,11.5 0 0 1 12.5,28.5 11.5,11.5 0 0 1 24,17 Z"
+       id="path2341-4"
+       inkscape:connector-curvature="0" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer6"
+     inkscape:label="Snapping Circle"
+     style="display:none">
+    <path
+       style="opacity:1;fill:#8dc5eb;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 33.5,28.5 c 0,2.623353 -1.063324,4.998353 -2.782486,6.717514 C 28.998353,36.936676 26.623353,38 24,38 21.376647,38 19.001647,36.936676 17.282486,35.217514 15.563324,33.498353 14.5,31.123353 14.5,28.5 c 0,-2.623353 1.063324,-4.998353 2.782486,-6.717514 C 19.001647,20.063324 21.376647,19 24,19 c 2.623353,0 4.998353,1.063324 6.717514,2.782486 C 32.436676,23.501647 33.5,25.876647 33.5,28.5 Z"
+       id="path2491"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="sssssssss" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer7"
+     inkscape:label="Lock Indicators"
+     style="display:inline">
+    <path
+       style="display:inline;fill:none;fill-opacity:1;stroke:#11d116;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 24,17.5 v 3"
+       id="path2494"
+       inkscape:connector-curvature="0" />
+    <path
+       style="display:inline;fill:none;fill-opacity:1;stroke:#11d116;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 24,36.5 v 3"
+       id="path2494-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="display:inline;fill:none;fill-opacity:1;stroke:#11d116;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 32,28.5 h 3"
+       id="path2494-2-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="display:inline;fill:none;fill-opacity:1;stroke:#11d116;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 13,28.5 h 3"
+       id="path2494-2-3-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="display:inline;fill:none;fill-opacity:1;stroke:#11d116;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 16.575379,21.075379 1.414214,1.414214"
+       id="path2494-2-3-7-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="display:inline;fill:none;fill-opacity:1;stroke:#11d116;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 30.010407,34.510407 1.414214,1.414214"
+       id="path2494-2-3-7-5-9"
+       inkscape:connector-curvature="0" />
+    <path
+       style="display:inline;fill:none;fill-opacity:1;stroke:#11d116;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 30.010407,22.489593 1.414214,-1.414214"
+       id="path2494-2-3-7-5-9-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="display:inline;fill:none;fill-opacity:1;stroke:#11d116;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 16.575379,35.924621 1.414214,-1.414214"
+       id="path2494-2-3-7-5-9-2-2"
+       inkscape:connector-curvature="0" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer4"
+     inkscape:label="Shadow"
+     style="display:inline">
+    <path
+       style="display:inline;fill:url(#linearGradient2474);fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 44,39.307612 28.596194,23.903806 19.403806,33.096194 44,57.692388 Z"
+       id="path2465"
+       inkscape:connector-curvature="0" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer5"
+     inkscape:label="Foreground"
+     style="display:inline">
+    <path
+       style="display:inline;opacity:1;fill:url(#linearGradient2388-7);fill-opacity:1;stroke:none;stroke-width:0.83870971;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 30.5,28.5 A 6.4999999,6.4999999 0 0 1 24,35 6.4999999,6.4999999 0 0 1 17.5,28.5 6.4999999,6.4999999 0 0 1 24,22 a 6.4999999,6.4999999 0 0 1 6.5,6.5 z"
+       id="path2341-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="display:inline;opacity:1;fill:url(#linearGradient2388-7-1);fill-opacity:1;stroke:none;stroke-width:0.83870971;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 68.5,18.5 A 6.4999999,6.4999999 0 0 1 62,25 6.4999999,6.4999999 0 0 1 55.5,18.5 6.4999999,6.4999999 0 0 1 62,12 a 6.4999999,6.4999999 0 0 1 6.5,6.5 z"
+       id="path2341-0-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="display:inline;opacity:1;fill:url(#linearGradient1308);fill-opacity:1;stroke:none;stroke-width:0.70967746;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 24,23 A 5.4999999,5.4999999 0 0 0 18.5,28.5 5.4999999,5.4999999 0 0 0 24,34 5.4999999,5.4999999 0 0 0 29.5,28.5 5.4999999,5.4999999 0 0 0 24,23 Z m 0,1 A 4.4999999,4.4999999 0 0 1 28.5,28.5 4.4999999,4.4999999 0 0 1 24,33 4.4999999,4.4999999 0 0 1 19.5,28.5 4.4999999,4.4999999 0 0 1 24,24 Z"
+       id="path2341-0-3-1"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
diff -pruN 24.08.1-1/po/ar/keysmith.po 25.03.90-1/po/ar/keysmith.po
--- 24.08.1-1/po/ar/keysmith.po	1970-01-01 00:00:00.000000000 +0000
+++ 25.03.90-1/po/ar/keysmith.po	2025-03-27 10:13:04.000000000 +0000
@@ -0,0 +1,581 @@
+# Copyright (C) 2024 This file is copyright:
+# This file is distributed under the same license as the keysmith package.
+# SPDX-FileCopyrightText: 2024, 2025 Zayed Al-Saidi <zayed.alsaidi@gmail.com>
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: keysmith\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2025-02-09 00:43+0000\n"
+"PO-Revision-Date: 2025-01-14 18:33+0400\n"
+"Last-Translator: Zayed Al-Saidi <zayed.alsaidi@gmail.com>\n"
+"Language-Team: ar\n"
+"Language: ar\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
+"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
+"X-Generator: Lokalize 23.08.5\n"
+
+#: src/app/cli.cpp:133
+#, kde-format
+msgctxt "@info (<uri> placeholder)"
+msgid ""
+"Optional account to add, formatted as otpauth:// URI (e.g. from a QR code)"
+msgstr ""
+"حساب اختياري للإضافة، بتنسيق otpauth://URI (على سبيل المثال من رمز الاستجابة "
+"السريعة)"
+
+#: src/app/flows_p.cpp:111 src/app/flows_p.cpp:285
+#, kde-format
+msgctxt "@title:window"
+msgid "Invalid account"
+msgstr "حساب غير صالح"
+
+#: src/app/flows_p.cpp:112
+#, kde-format
+msgctxt "@info:label"
+msgid ""
+"The account you are trying to add is invalid. You can either quit the app, "
+"or continue without adding the account."
+msgstr ""
+"الحساب الذي تحاول إضافته غير صالح. يمكنك إما الخروج من التطبيق أو الاستمرار "
+"دون إضافة الحساب."
+
+#: src/app/flows_p.cpp:286
+#, kde-format
+msgctxt "@info:label"
+msgid ""
+"The account you are trying to add is invalid. Continue without adding the "
+"account."
+msgstr "الحساب الذي تحاول إضافته غير صالح. تابع دون إضافة الحساب."
+
+#: src/contents/ui/AccountEntryViewBase.qml:35
+#, kde-format
+msgctxt "Details dialog title: %1 is the name of the account"
+msgid "Details of account: %1"
+msgstr "تفاصيل الحساب: %1"
+
+#: src/contents/ui/AccountEntryViewBase.qml:42
+#, kde-format
+msgid "Name:"
+msgstr "الاسم:"
+
+#: src/contents/ui/AccountEntryViewBase.qml:49
+#, kde-format
+msgid "Issuer:"
+msgstr "المُصدِر:"
+
+#: src/contents/ui/AccountEntryViewBase.qml:56
+#, kde-format
+msgid "Mode:"
+msgstr "الوضع:"
+
+#: src/contents/ui/AccountEntryViewBase.qml:57
+#, kde-format
+msgctxt "Mode of 2fa"
+msgid "HOTP"
+msgstr "كلمة المرور المستندة على التلبيدة HOTP"
+
+#: src/contents/ui/AccountEntryViewBase.qml:57
+#, kde-format
+msgctxt "Mode of 2fa"
+msgid "TOTP"
+msgstr "كلمة المرور المستندة على الوقت TOTP"
+
+#: src/contents/ui/AccountEntryViewBase.qml:63
+#, kde-format
+msgid "Epoch:"
+msgstr "الفترة:"
+
+#: src/contents/ui/AccountEntryViewBase.qml:70
+#, kde-format
+msgid "Time Step:"
+msgstr "خطوة الوقت:"
+
+#: src/contents/ui/AccountEntryViewBase.qml:77
+#, kde-format
+msgid "Offset:"
+msgstr "الإزاحة:"
+
+#: src/contents/ui/AccountEntryViewBase.qml:84
+#, kde-format
+msgid "Token Length:"
+msgstr "طول الرمز:"
+
+#: src/contents/ui/AccountEntryViewBase.qml:91
+#, kde-format
+msgid "Hash:"
+msgstr "التلبيدة:"
+
+#: src/contents/ui/AccountEntryViewBase.qml:100
+#, kde-format
+msgctxt "Confirm dialog title: %1 is the name of the account to remove"
+msgid "Removing account: %1"
+msgstr "إزالة الحساب: %1"
+
+#: src/contents/ui/AccountEntryViewBase.qml:105
+#, kde-format
+msgid ""
+"<p><ul><li>Account name: %1</li><li>Account issuer: %2</li></ul></"
+"p><p>Removing this account from Keysmith will not disable two-factor "
+"authentication (2FA). Make sure you can still access your account without "
+"using Keysmith before proceeding:</p><ul><li>Make sure you have another 2FA "
+"app set up for your account, or:</li><li>Make sure you have recovery codes "
+"for your account, or:</li><li>Disable two-factor authentication on your "
+"account</li></ul>"
+msgstr ""
+"460 / 5,000<p><ul><li>اسم الحساب: %1</li><li>جهة إصدار الحساب: %2</li></ul></"
+"p><p>لن يؤدي إزالة هذا الحساب من صانع المفاتيح إلى تعطيل المصادقة الثنائية "
+"(2FA). تأكد من أنه لا يزال بإمكانك الوصول إلى حسابك دون استخدام صانع "
+"المفاتيح قبل المتابعة:</p><ul><li>تأكد من إعداد تطبيق مصادقة ثنائية آخر "
+"لحسابك، أو:</li><li>تأكد من وجود رموز استرداد لحسابك، أو:</li><li>تعطيل "
+"المصادقة الثنائية على حسابك</li></ul>"
+
+#: src/contents/ui/AccountEntryViewBase.qml:116
+#, kde-format
+msgctxt "Button confirming account removal"
+msgid "Delete Account"
+msgstr "احذف الحساب"
+
+#: src/contents/ui/AccountEntryViewBase.qml:134
+#, kde-format
+msgctxt "Notification shown in a passive notification"
+msgid "Token copied to clipboard!"
+msgstr "نُسخ الرمز إلى الحافظة!"
+
+#: src/contents/ui/AccountNameForm.qml:81
+#, kde-format
+msgctxt "@label:textbox"
+msgid "Account name:"
+msgstr "اسم الحساب:"
+
+#: src/contents/ui/AccountNameForm.qml:100
+#, kde-format
+msgctxt "@label:textbox"
+msgid "Account issuer:"
+msgstr "مُصدِر الحساب:"
+
+#: src/contents/ui/AccountsOverview.qml:21
+#, kde-format
+msgctxt "@title:window"
+msgid "Accounts"
+msgstr "الحسابات"
+
+#: src/contents/ui/AccountsOverview.qml:25
+#, kde-format
+msgctxt "generic error shown when adding or updating an account failed"
+msgid "Failed to update accounts"
+msgstr "فشل في تحديث الحسابات"
+
+#: src/contents/ui/AccountsOverview.qml:26
+#, kde-format
+msgctxt "error message shown when loading accounts from storage failed"
+msgid "Some accounts failed to load."
+msgstr "فشلت بعض الحسابات في التحميل."
+
+#: src/contents/ui/AccountsOverview.qml:91
+#, kde-format
+msgid "No accounts added"
+msgstr "لم تضف أي حساب"
+
+#: src/contents/ui/AccountsOverview.qml:96
+#, kde-format
+msgctxt ""
+"@action:button add new account, shown instead of overview list when no "
+"accounts have been added yet"
+msgid "Add Account"
+msgstr "أضف حسابًا"
+
+#: src/contents/ui/AccountsOverview.qml:163
+#, kde-format
+msgctxt "@action:button add new account, shown in toolbar"
+msgid "Add"
+msgstr "أضف"
+
+#: src/contents/ui/AccountsOverview.qml:176
+#, kde-format
+msgctxt "@action:button import accounts, shown in toolbar"
+msgid "Import"
+msgstr "استورد"
+
+#: src/contents/ui/AccountsOverview.qml:189
+#, kde-format
+msgctxt ""
+"@action:button import an account by scanning a QR code, shown in toolbar"
+msgid "Scan QR Code"
+msgstr "امسح رمز الاستجابة السريعة"
+
+#: src/contents/ui/AddAccount.qml:22
+#, kde-format
+msgctxt "@title:window"
+msgid "Add new account"
+msgstr "أضف حسابًا جديدًا"
+
+#: src/contents/ui/AddAccount.qml:50
+#, kde-format
+msgctxt "@action:button cancel and dismiss the add account form"
+msgid "Cancel"
+msgstr "ألغِ"
+
+#: src/contents/ui/AddAccount.qml:57
+#, kde-format
+msgctxt "@action:button Dismiss the error page and quit Keysmith"
+msgid "Quit"
+msgstr "أنهِ"
+
+#: src/contents/ui/AddAccount.qml:66
+#, kde-format
+msgctxt "@action:button"
+msgid "Add"
+msgstr "أضف"
+
+#: src/contents/ui/AddAccount.qml:86
+#, kde-format
+msgctxt "@label:chooser"
+msgid "Account type:"
+msgstr "نوع الحساب:"
+
+#: src/contents/ui/AddAccount.qml:95
+#, kde-format
+msgctxt "@option:radio"
+msgid "Time-based OTP"
+msgstr "كلمة مرور المستندة على الوقت"
+
+#: src/contents/ui/AddAccount.qml:106
+#, kde-format
+msgctxt "@option:radio"
+msgid "Hash-based OTP"
+msgstr "كلمة مرور معتمدة على التلبيدة"
+
+#: src/contents/ui/AddAccount.qml:118
+#, kde-format
+msgid "Token secret"
+msgstr "الرمز السري:"
+
+#: src/contents/ui/AddAccount.qml:120
+#, kde-format
+msgctxt "@label:textbox"
+msgid "Secret key:"
+msgstr "المفتاح السري:"
+
+#: src/contents/ui/AddAccount.qml:139
+#, kde-format
+msgctxt "Button to reveal form for configuring additional token details"
+msgid "Details"
+msgstr "التفاصيل"
+
+#: src/contents/ui/AddAccount.qml:147
+#, kde-format
+msgctxt "@title:group"
+msgid "HOTP Details:"
+msgstr "تفاصيل كلمة المرور المستندة على التلبيدة HOTP"
+
+#: src/contents/ui/AddAccount.qml:160
+#, kde-format
+msgctxt "@label"
+msgid "TOTP Details:"
+msgstr "تفاصيل كلمة المرور المستندة على الوقت TOTP"
+
+#: src/contents/ui/ErrorPage.qml:34
+#, kde-format
+msgctxt "@action:button Button to dismiss the error page"
+msgid "Continue"
+msgstr "تابع"
+
+#: src/contents/ui/ErrorPage.qml:41
+#, kde-format
+msgctxt "@action:button Dismiss the error page and quit Keysmtih"
+msgid "Quit"
+msgstr "أنهِ"
+
+#: src/contents/ui/HOTPAccountEntryView.qml:19
+#: src/contents/ui/TOTPAccountEntryView.qml:23
+#, kde-format
+msgctxt "Button to show details of a single account"
+msgid "Show details"
+msgstr "أظهر التّفاصيل"
+
+#: src/contents/ui/HOTPAccountEntryView.qml:28
+#: src/contents/ui/TOTPAccountEntryView.qml:34
+#, kde-format
+msgctxt "Button for removal of a single account"
+msgid "Delete account"
+msgstr "احذف الحساب"
+
+#: src/contents/ui/HOTPDetailsForm.qml:27
+#, kde-format
+msgctxt "@label:textbox"
+msgid "Counter:"
+msgstr "العداد:"
+
+#: src/contents/ui/HOTPDetailsForm.qml:48
+#: src/contents/ui/TOTPDetailsForm.qml:67
+#, kde-format
+msgctxt "@label:spinbox"
+msgid "Token length:"
+msgstr "طول الرمز:"
+
+#: src/contents/ui/HOTPDetailsForm.qml:63
+#, kde-format
+msgctxt "@option:check"
+msgid "Add checksum digit"
+msgstr "أضف رقم المجموع الاختباري"
+
+#: src/contents/ui/HOTPDetailsForm.qml:75
+#, kde-format
+msgctxt "@option:check"
+msgid "Use custom truncation offset"
+msgstr "استخدم إزاحة قطع مخصصة"
+
+#: src/contents/ui/HOTPDetailsForm.qml:89
+#, kde-format
+msgctxt "@label:spinbox"
+msgid "Truncation offset:"
+msgstr "إزاحة القطع:"
+
+#: src/contents/ui/ImportAccount.qml:21
+#, kde-format
+msgctxt "@title:window"
+msgid "Import Accounts"
+msgstr "استورد حسابات"
+
+#: src/contents/ui/ImportAccount.qml:52
+#, kde-format
+msgid "Import format"
+msgstr "استورد تنسيق"
+
+#. i18n strings
+#: src/contents/ui/ImportAccount.qml:58
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "andOTP Encrypted JSON"
+msgstr "andOTP معمى بصيغة JSON"
+
+#: src/contents/ui/ImportAccount.qml:59
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "andOTP Plain JSON"
+msgstr "andOTP JSON عادي"
+
+#. i18nc("@item:inlistbox", "Aegis Encrypted JSON"), value: Models.ValidatedImportInput.AegisEncryptedJSON});
+#: src/contents/ui/ImportAccount.qml:61
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "Aegis Plain JSON"
+msgstr "Aegis Plain JSON"
+
+#: src/contents/ui/ImportAccount.qml:62
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "FreeOTP URIs"
+msgstr "معرفات FreeOTP الموحدة"
+
+#: src/contents/ui/ImportAccount.qml:78
+#, kde-format
+msgctxt "@label:chooser"
+msgid "Backup file:"
+msgstr "ملف نسخ احتياطي:"
+
+#: src/contents/ui/ImportAccount.qml:81
+#, kde-format
+msgctxt "@info:placeholder"
+msgid "No file selected"
+msgstr "لم يُحدّد أيّ ملفّ"
+
+#: src/contents/ui/ImportAccount.qml:85
+#, kde-format
+msgctxt "@title:window"
+msgid "Select file"
+msgstr "اختر ملفّا"
+
+#: src/contents/ui/ImportAccount.qml:99
+#, kde-format
+msgctxt "@info:placeholder"
+msgid "Decryption password"
+msgstr "كلمة سر فك التعمية"
+
+#: src/contents/ui/ImportAccount.qml:101 src/contents/ui/UnlockAccounts.qml:49
+#, kde-format
+msgctxt "@label:textbox"
+msgid "Password:"
+msgstr "كلمة السر:"
+
+#: src/contents/ui/ImportAccount.qml:112
+#, kde-format
+msgctxt "@action:button"
+msgid "Import"
+msgstr "استورد"
+
+#: src/contents/ui/KeysmithGlobalDrawer.qml:12
+#: src/contents/ui/KeysmithGlobalDrawer.qml:15
+#, kde-format
+msgid "About Keysmith"
+msgstr "عن صانع المفاتيح"
+
+#: src/contents/ui/QRScanPage.qml:21
+#, kde-format
+msgctxt "@title"
+msgid "Scan a QR code"
+msgstr "امسح رمز الاستجابة السريعة"
+
+#: src/contents/ui/QRScanPage.qml:31
+#, kde-format
+msgctxt "@action:intoolbar"
+msgid "Select Camera"
+msgstr "اختر كاميرا"
+
+#: src/contents/ui/QRScanPage.qml:42
+#, kde-format
+msgctxt "@title:dialog"
+msgid "Select Camera"
+msgstr "اختر كاميرا"
+
+#: src/contents/ui/QRScanPage.qml:61
+#, kde-format
+msgctxt "@action:button"
+msgid "Close"
+msgstr "إغلاق"
+
+#: src/contents/ui/RenameAccount.qml:17
+#, kde-format
+msgctxt "@title:window"
+msgid "Rename account to add"
+msgstr "إعادة تسمية الحساب لإضافته"
+
+#: src/contents/ui/RenameAccount.qml:35
+#, kde-format
+msgctxt ""
+"@info:label Keysmith received an account to add via URI on e.g. commandline "
+"which is already in use"
+msgid ""
+"Another account with the same name already exists. Please correct the name "
+"or issuer for the new account."
+msgstr ""
+"وجد حساب آخر بنفس الاسم بالفعل. يرجى تصحيح الاسم أو الجهة المصدرة للحساب "
+"الجديد."
+
+#: src/contents/ui/RenameAccount.qml:49
+#, kde-format
+msgctxt "@action:button cancel and dismiss the rename account form"
+msgid "Cancel"
+msgstr "ألغِ"
+
+#: src/contents/ui/RenameAccount.qml:56
+#, kde-format
+msgid "Add"
+msgstr "أضف"
+
+#: src/contents/ui/SetupPassword.qml:21 src/contents/ui/UnlockAccounts.qml:21
+#, kde-format
+msgctxt "@title:window"
+msgid "Password"
+msgstr "كلمة السّر"
+
+#: src/contents/ui/SetupPassword.qml:27
+#, kde-format
+msgid "Failed to set up your password"
+msgstr "فشل في إعداد كلمة سرك"
+
+#: src/contents/ui/SetupPassword.qml:42
+#, kde-format
+msgid "Choose a password to protect your accounts"
+msgstr "اختر كلمة سر لحماية حساباتك"
+
+#: src/contents/ui/SetupPassword.qml:48
+#, kde-format
+msgctxt "@label:textbox"
+msgid "New Password:"
+msgstr "كلمة السرّ الجديدة:"
+
+#: src/contents/ui/SetupPassword.qml:61
+#, kde-format
+msgctxt "@label:textbox"
+msgid "Verify password:"
+msgstr "أكد كلمة السر:"
+
+#: src/contents/ui/SetupPassword.qml:72
+#, kde-format
+msgctxt "@action:button"
+msgid "Apply"
+msgstr "طبّق"
+
+#: src/contents/ui/TokenEntryViewLabels.qml:40
+#, kde-format
+msgctxt "placeholder text if no token is available"
+msgid "(refresh)"
+msgstr "(أنعش)"
+
+#: src/contents/ui/TOTPDetailsForm.qml:27
+#, kde-format
+msgctxt "@label:textbox"
+msgid "Timer:"
+msgstr "المؤقت:"
+
+#: src/contents/ui/TOTPDetailsForm.qml:45
+#, kde-format
+msgctxt "@label:textbox"
+msgid "Starting at:"
+msgstr "يبدأ عند:"
+
+#: src/contents/ui/TOTPDetailsForm.qml:79
+#, kde-format
+msgctxt "@label:chooser"
+msgid "Hash algorithm:"
+msgstr "خوارزمية التلبيدة:"
+
+#: src/contents/ui/TOTPDetailsForm.qml:86
+#, kde-format
+msgctxt "@option:radio"
+msgid "SHA-1"
+msgstr "SHA-1"
+
+#: src/contents/ui/TOTPDetailsForm.qml:98
+#, kde-format
+msgctxt "@option:radio"
+msgid "SHA-256"
+msgstr "SHA-256"
+
+#: src/contents/ui/TOTPDetailsForm.qml:110
+#, kde-format
+msgctxt "@option:radio"
+msgid "SHA-512"
+msgstr "SHA-512"
+
+#: src/contents/ui/UnlockAccounts.qml:25
+#, kde-format
+msgid "Failed to unlock your accounts"
+msgstr "فشل في فك قفل حساباتك"
+
+#: src/contents/ui/UnlockAccounts.qml:43
+#, kde-format
+msgid "Please provide the password to unlock your accounts"
+msgstr "يرجى تقديم كلمة السر لفتح حساباتك"
+
+#: src/contents/ui/UnlockAccounts.qml:61
+#, kde-format
+msgctxt "@action:button"
+msgid "Unlock"
+msgstr "فك القفل"
+
+#: src/main.cpp:70
+#, kde-format
+msgctxt "@title"
+msgid "Keysmith"
+msgstr "صانع المفاتيح"
+
+#: src/main.cpp:73
+#, kde-format
+msgid "generate two-factor authentication (2FA) tokens"
+msgstr "إنشاء رموز المصادقة الثنائية (2FA)"
+
+#: src/main.cpp:76
+#, kde-format
+msgid "Keysmith"
+msgstr "صانع المفاتيح"
+
+#: src/main.cpp:80
+#, kde-format
+msgid "© 2019 KDE Community"
+msgstr "© 2019 مجتمع كِيدِي"
diff -pruN 24.08.1-1/po/ast/keysmith.po 25.03.90-1/po/ast/keysmith.po
--- 24.08.1-1/po/ast/keysmith.po	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/po/ast/keysmith.po	2025-03-27 10:13:04.000000000 +0000
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: keysmith\n"
 "Report-Msgid-Bugs-To: https://bugs.kde.org\n"
-"POT-Creation-Date: 2024-05-03 00:40+0000\n"
+"POT-Creation-Date: 2025-02-09 00:43+0000\n"
 "PO-Revision-Date: 2023-11-07 01:08+0100\n"
 "Last-Translator: Enol P. <enolp@softastur.org>\n"
 "Language-Team: \n"
@@ -24,13 +24,13 @@ msgid ""
 "Optional account to add, formatted as otpauth:// URI (e.g. from a QR code)"
 msgstr ""
 
-#: src/app/flows_p.cpp:108 src/app/flows_p.cpp:248
+#: src/app/flows_p.cpp:111 src/app/flows_p.cpp:285
 #, kde-format
 msgctxt "@title:window"
 msgid "Invalid account"
 msgstr ""
 
-#: src/app/flows_p.cpp:109
+#: src/app/flows_p.cpp:112
 #, kde-format
 msgctxt "@info:label"
 msgid ""
@@ -38,7 +38,7 @@ msgid ""
 "or continue without adding the account."
 msgstr ""
 
-#: src/app/flows_p.cpp:249
+#: src/app/flows_p.cpp:286
 #, kde-format
 msgctxt "@info:label"
 msgid ""
@@ -134,13 +134,13 @@ msgctxt "Notification shown in a passive
 msgid "Token copied to clipboard!"
 msgstr ""
 
-#: src/contents/ui/AccountNameForm.qml:64
+#: src/contents/ui/AccountNameForm.qml:81
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Account name:"
 msgstr ""
 
-#: src/contents/ui/AccountNameForm.qml:83
+#: src/contents/ui/AccountNameForm.qml:100
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Account issuer:"
@@ -164,12 +164,12 @@ msgctxt "error message shown when loadin
 msgid "Some accounts failed to load."
 msgstr ""
 
-#: src/contents/ui/AccountsOverview.qml:101
+#: src/contents/ui/AccountsOverview.qml:91
 #, kde-format
 msgid "No accounts added"
 msgstr ""
 
-#: src/contents/ui/AccountsOverview.qml:106
+#: src/contents/ui/AccountsOverview.qml:96
 #, kde-format
 msgctxt ""
 "@action:button add new account, shown instead of overview list when no "
@@ -177,90 +177,103 @@ msgctxt ""
 msgid "Add Account"
 msgstr ""
 
-#: src/contents/ui/AccountsOverview.qml:172
+#: src/contents/ui/AccountsOverview.qml:163
 #, kde-format
 msgctxt "@action:button add new account, shown in toolbar"
 msgid "Add"
 msgstr ""
 
+#: src/contents/ui/AccountsOverview.qml:176
+#, kde-format
+msgctxt "@action:button import accounts, shown in toolbar"
+msgid "Import"
+msgstr ""
+
+#: src/contents/ui/AccountsOverview.qml:189
+#, kde-format
+msgctxt ""
+"@action:button import an account by scanning a QR code, shown in toolbar"
+msgid "Scan QR Code"
+msgstr ""
+
 #: src/contents/ui/AddAccount.qml:22
 #, kde-format
 msgctxt "@title:window"
 msgid "Add new account"
 msgstr ""
 
-#: src/contents/ui/AddAccount.qml:45
+#: src/contents/ui/AddAccount.qml:50
 #, kde-format
 msgctxt "@action:button cancel and dismiss the add account form"
 msgid "Cancel"
 msgstr ""
 
-#: src/contents/ui/AddAccount.qml:52
+#: src/contents/ui/AddAccount.qml:57
 #, kde-format
 msgctxt "@action:button Dismiss the error page and quit Keysmith"
 msgid "Quit"
 msgstr ""
 
-#: src/contents/ui/AddAccount.qml:61
+#: src/contents/ui/AddAccount.qml:66
 #, kde-format
 msgctxt "@action:button"
 msgid "Add"
 msgstr ""
 
-#: src/contents/ui/AddAccount.qml:81
+#: src/contents/ui/AddAccount.qml:86
 #, kde-format
 msgctxt "@label:chooser"
 msgid "Account type:"
 msgstr ""
 
-#: src/contents/ui/AddAccount.qml:90
+#: src/contents/ui/AddAccount.qml:95
 #, kde-format
 msgctxt "@option:radio"
 msgid "Time-based OTP"
 msgstr ""
 
-#: src/contents/ui/AddAccount.qml:101
+#: src/contents/ui/AddAccount.qml:106
 #, kde-format
 msgctxt "@option:radio"
 msgid "Hash-based OTP"
 msgstr ""
 
-#: src/contents/ui/AddAccount.qml:113
+#: src/contents/ui/AddAccount.qml:118
 #, kde-format
 msgid "Token secret"
 msgstr ""
 
-#: src/contents/ui/AddAccount.qml:116
+#: src/contents/ui/AddAccount.qml:120
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Secret key:"
 msgstr ""
 
-#: src/contents/ui/AddAccount.qml:132
+#: src/contents/ui/AddAccount.qml:139
 #, kde-format
 msgctxt "Button to reveal form for configuring additional token details"
 msgid "Details"
 msgstr ""
 
-#: src/contents/ui/AddAccount.qml:140
+#: src/contents/ui/AddAccount.qml:147
 #, kde-format
 msgctxt "@title:group"
 msgid "HOTP Details:"
 msgstr ""
 
-#: src/contents/ui/AddAccount.qml:153
+#: src/contents/ui/AddAccount.qml:160
 #, kde-format
 msgctxt "@label"
 msgid "TOTP Details:"
 msgstr ""
 
-#: src/contents/ui/ErrorPage.qml:33
+#: src/contents/ui/ErrorPage.qml:34
 #, kde-format
 msgctxt "@action:button Button to dismiss the error page"
 msgid "Continue"
 msgstr ""
 
-#: src/contents/ui/ErrorPage.qml:40
+#: src/contents/ui/ErrorPage.qml:41
 #, kde-format
 msgctxt "@action:button Dismiss the error page and quit Keysmtih"
 msgid "Quit"
@@ -311,6 +324,109 @@ msgctxt "@label:spinbox"
 msgid "Truncation offset:"
 msgstr ""
 
+#: src/contents/ui/ImportAccount.qml:21
+#, kde-format
+msgctxt "@title:window"
+msgid "Import Accounts"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:52
+#, kde-format
+msgid "Import format"
+msgstr ""
+
+#. i18n strings
+#: src/contents/ui/ImportAccount.qml:58
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "andOTP Encrypted JSON"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:59
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "andOTP Plain JSON"
+msgstr ""
+
+#. i18nc("@item:inlistbox", "Aegis Encrypted JSON"), value: Models.ValidatedImportInput.AegisEncryptedJSON});
+#: src/contents/ui/ImportAccount.qml:61
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "Aegis Plain JSON"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:62
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "FreeOTP URIs"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:78
+#, kde-format
+msgctxt "@label:chooser"
+msgid "Backup file:"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:81
+#, kde-format
+msgctxt "@info:placeholder"
+msgid "No file selected"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:85
+#, kde-format
+msgctxt "@title:window"
+msgid "Select file"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:99
+#, kde-format
+msgctxt "@info:placeholder"
+msgid "Decryption password"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:101 src/contents/ui/UnlockAccounts.qml:49
+#, kde-format
+msgctxt "@label:textbox"
+msgid "Password:"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:112
+#, kde-format
+msgctxt "@action:button"
+msgid "Import"
+msgstr ""
+
+#: src/contents/ui/KeysmithGlobalDrawer.qml:12
+#: src/contents/ui/KeysmithGlobalDrawer.qml:15
+#, kde-format
+msgid "About Keysmith"
+msgstr ""
+
+#: src/contents/ui/QRScanPage.qml:21
+#, kde-format
+msgctxt "@title"
+msgid "Scan a QR code"
+msgstr ""
+
+#: src/contents/ui/QRScanPage.qml:31
+#, kde-format
+msgctxt "@action:intoolbar"
+msgid "Select Camera"
+msgstr ""
+
+#: src/contents/ui/QRScanPage.qml:42
+#, kde-format
+msgctxt "@title:dialog"
+msgid "Select Camera"
+msgstr ""
+
+#: src/contents/ui/QRScanPage.qml:61
+#, kde-format
+msgctxt "@action:button"
+msgid "Close"
+msgstr ""
+
 #: src/contents/ui/RenameAccount.qml:17
 #, kde-format
 msgctxt "@title:window"
@@ -338,13 +454,13 @@ msgstr ""
 msgid "Add"
 msgstr ""
 
-#: src/contents/ui/SetupPassword.qml:22 src/contents/ui/UnlockAccounts.qml:22
+#: src/contents/ui/SetupPassword.qml:21 src/contents/ui/UnlockAccounts.qml:21
 #, kde-format
 msgctxt "@title:window"
 msgid "Password"
 msgstr ""
 
-#: src/contents/ui/SetupPassword.qml:28
+#: src/contents/ui/SetupPassword.qml:27
 #, kde-format
 msgid "Failed to set up your password"
 msgstr ""
@@ -354,19 +470,19 @@ msgstr ""
 msgid "Choose a password to protect your accounts"
 msgstr ""
 
-#: src/contents/ui/SetupPassword.qml:49
+#: src/contents/ui/SetupPassword.qml:48
 #, kde-format
 msgctxt "@label:textbox"
 msgid "New Password:"
 msgstr ""
 
-#: src/contents/ui/SetupPassword.qml:60
+#: src/contents/ui/SetupPassword.qml:61
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Verify password:"
 msgstr ""
 
-#: src/contents/ui/SetupPassword.qml:68
+#: src/contents/ui/SetupPassword.qml:72
 #, kde-format
 msgctxt "@action:button"
 msgid "Apply"
@@ -414,7 +530,7 @@ msgctxt "@option:radio"
 msgid "SHA-512"
 msgstr ""
 
-#: src/contents/ui/UnlockAccounts.qml:26
+#: src/contents/ui/UnlockAccounts.qml:25
 #, kde-format
 msgid "Failed to unlock your accounts"
 msgstr ""
@@ -424,20 +540,29 @@ msgstr ""
 msgid "Please provide the password to unlock your accounts"
 msgstr ""
 
-#: src/contents/ui/UnlockAccounts.qml:50
-#, kde-format
-msgctxt "@label:textbox"
-msgid "Password:"
-msgstr ""
-
-#: src/contents/ui/UnlockAccounts.qml:59
+#: src/contents/ui/UnlockAccounts.qml:61
 #, kde-format
 msgctxt "@action:button"
 msgid "Unlock"
 msgstr ""
 
-#: src/main.cpp:67
+#: src/main.cpp:70
 #, kde-format
 msgctxt "@title"
 msgid "Keysmith"
 msgstr ""
+
+#: src/main.cpp:73
+#, kde-format
+msgid "generate two-factor authentication (2FA) tokens"
+msgstr ""
+
+#: src/main.cpp:76
+#, kde-format
+msgid "Keysmith"
+msgstr ""
+
+#: src/main.cpp:80
+#, kde-format
+msgid "© 2019 KDE Community"
+msgstr ""
diff -pruN 24.08.1-1/po/ca/keysmith.po 25.03.90-1/po/ca/keysmith.po
--- 24.08.1-1/po/ca/keysmith.po	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/po/ca/keysmith.po	2025-03-27 10:13:04.000000000 +0000
@@ -1,16 +1,16 @@
 # Translation of keysmith.po to Catalan
-# Copyright (C) 2020-2024 This_file_is_part_of_KDE
+# Copyright (C) 2020-2025 This_file_is_part_of_KDE
 # This file is distributed under the license LGPL version 2.1 or
 # version 3 or later versions approved by the membership of KDE e.V.
 #
-# Josep M. Ferrer <txemaq@gmail.com>, 2020, 2022, 2023, 2024.
+# SPDX-FileCopyrightText: 2020, 2022, 2023, 2024, 2025 Josep M. Ferrer <txemaq@gmail.com>
 # Antoni Bella Pérez <antonibella5@yahoo.com>, 2020, 2021.
 msgid ""
 msgstr ""
 "Project-Id-Version: keysmith\n"
 "Report-Msgid-Bugs-To: https://bugs.kde.org\n"
-"POT-Creation-Date: 2024-05-03 00:40+0000\n"
-"PO-Revision-Date: 2024-01-13 15:57+0100\n"
+"POT-Creation-Date: 2025-02-09 00:43+0000\n"
+"PO-Revision-Date: 2025-01-14 10:50+0100\n"
 "Last-Translator: Josep M. Ferrer <txemaq@gmail.com>\n"
 "Language-Team: Catalan <kde-i18n-ca@kde.org>\n"
 "Language: ca\n"
@@ -19,7 +19,7 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
 "X-Accelerator-Marker: &\n"
-"X-Generator: Lokalize 22.12.3\n"
+"X-Generator: Lokalize 24.12.1\n"
 
 #: src/app/cli.cpp:133
 #, kde-format
@@ -30,13 +30,13 @@ msgstr ""
 "Compte opcional a afegir, amb format «otpauth:// URI» (p. ex. a partir d'un "
 "codi QR)"
 
-#: src/app/flows_p.cpp:108 src/app/flows_p.cpp:248
+#: src/app/flows_p.cpp:111 src/app/flows_p.cpp:285
 #, kde-format
 msgctxt "@title:window"
 msgid "Invalid account"
 msgstr "Compte no vàlid"
 
-#: src/app/flows_p.cpp:109
+#: src/app/flows_p.cpp:112
 #, kde-format
 msgctxt "@info:label"
 msgid ""
@@ -46,7 +46,7 @@ msgstr ""
 "El compte que s'intenta afegir no és vàlid. Podeu sortir de l'aplicació, o "
 "continuar sense afegir el compte."
 
-#: src/app/flows_p.cpp:249
+#: src/app/flows_p.cpp:286
 #, kde-format
 msgctxt "@info:label"
 msgid ""
@@ -150,13 +150,13 @@ msgctxt "Notification shown in a passive
 msgid "Token copied to clipboard!"
 msgstr "El testimoni s'ha copiat al porta-retalls!"
 
-#: src/contents/ui/AccountNameForm.qml:64
+#: src/contents/ui/AccountNameForm.qml:81
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Account name:"
 msgstr "Nom del compte:"
 
-#: src/contents/ui/AccountNameForm.qml:83
+#: src/contents/ui/AccountNameForm.qml:100
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Account issuer:"
@@ -180,12 +180,12 @@ msgctxt "error message shown when loadin
 msgid "Some accounts failed to load."
 msgstr "Ha fallat en carregar alguns comptes."
 
-#: src/contents/ui/AccountsOverview.qml:101
+#: src/contents/ui/AccountsOverview.qml:91
 #, kde-format
 msgid "No accounts added"
 msgstr "No s'ha afegit cap compte"
 
-#: src/contents/ui/AccountsOverview.qml:106
+#: src/contents/ui/AccountsOverview.qml:96
 #, kde-format
 msgctxt ""
 "@action:button add new account, shown instead of overview list when no "
@@ -193,90 +193,103 @@ msgctxt ""
 msgid "Add Account"
 msgstr "Afegeix un compte"
 
-#: src/contents/ui/AccountsOverview.qml:172
+#: src/contents/ui/AccountsOverview.qml:163
 #, kde-format
 msgctxt "@action:button add new account, shown in toolbar"
 msgid "Add"
 msgstr "Afegeix"
 
+#: src/contents/ui/AccountsOverview.qml:176
+#, kde-format
+msgctxt "@action:button import accounts, shown in toolbar"
+msgid "Import"
+msgstr "Importa"
+
+#: src/contents/ui/AccountsOverview.qml:189
+#, kde-format
+msgctxt ""
+"@action:button import an account by scanning a QR code, shown in toolbar"
+msgid "Scan QR Code"
+msgstr "Escaneja un codi QR"
+
 #: src/contents/ui/AddAccount.qml:22
 #, kde-format
 msgctxt "@title:window"
 msgid "Add new account"
 msgstr "Afegeix un compte nou"
 
-#: src/contents/ui/AddAccount.qml:45
+#: src/contents/ui/AddAccount.qml:50
 #, kde-format
 msgctxt "@action:button cancel and dismiss the add account form"
 msgid "Cancel"
 msgstr "Cancel·la"
 
-#: src/contents/ui/AddAccount.qml:52
+#: src/contents/ui/AddAccount.qml:57
 #, kde-format
 msgctxt "@action:button Dismiss the error page and quit Keysmith"
 msgid "Quit"
 msgstr "Surt"
 
-#: src/contents/ui/AddAccount.qml:61
+#: src/contents/ui/AddAccount.qml:66
 #, kde-format
 msgctxt "@action:button"
 msgid "Add"
 msgstr "Afegeix"
 
-#: src/contents/ui/AddAccount.qml:81
+#: src/contents/ui/AddAccount.qml:86
 #, kde-format
 msgctxt "@label:chooser"
 msgid "Account type:"
 msgstr "Tipus de compte:"
 
-#: src/contents/ui/AddAccount.qml:90
+#: src/contents/ui/AddAccount.qml:95
 #, kde-format
 msgctxt "@option:radio"
 msgid "Time-based OTP"
 msgstr "OTP basat en l'hora"
 
-#: src/contents/ui/AddAccount.qml:101
+#: src/contents/ui/AddAccount.qml:106
 #, kde-format
 msgctxt "@option:radio"
 msgid "Hash-based OTP"
 msgstr "OTP basat en el resum"
 
-#: src/contents/ui/AddAccount.qml:113
+#: src/contents/ui/AddAccount.qml:118
 #, kde-format
 msgid "Token secret"
 msgstr "Secret del testimoni"
 
-#: src/contents/ui/AddAccount.qml:116
+#: src/contents/ui/AddAccount.qml:120
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Secret key:"
 msgstr "Clau secreta:"
 
-#: src/contents/ui/AddAccount.qml:132
+#: src/contents/ui/AddAccount.qml:139
 #, kde-format
 msgctxt "Button to reveal form for configuring additional token details"
 msgid "Details"
 msgstr "Detalls"
 
-#: src/contents/ui/AddAccount.qml:140
+#: src/contents/ui/AddAccount.qml:147
 #, kde-format
 msgctxt "@title:group"
 msgid "HOTP Details:"
 msgstr "Detalls de l'HOTP:"
 
-#: src/contents/ui/AddAccount.qml:153
+#: src/contents/ui/AddAccount.qml:160
 #, kde-format
 msgctxt "@label"
 msgid "TOTP Details:"
 msgstr "Detalls del TOTP:"
 
-#: src/contents/ui/ErrorPage.qml:33
+#: src/contents/ui/ErrorPage.qml:34
 #, kde-format
 msgctxt "@action:button Button to dismiss the error page"
 msgid "Continue"
 msgstr "Continua"
 
-#: src/contents/ui/ErrorPage.qml:40
+#: src/contents/ui/ErrorPage.qml:41
 #, kde-format
 msgctxt "@action:button Dismiss the error page and quit Keysmtih"
 msgid "Quit"
@@ -327,6 +340,109 @@ msgctxt "@label:spinbox"
 msgid "Truncation offset:"
 msgstr "Desplaçament de truncament:"
 
+#: src/contents/ui/ImportAccount.qml:21
+#, kde-format
+msgctxt "@title:window"
+msgid "Import Accounts"
+msgstr "Importació de comptes"
+
+#: src/contents/ui/ImportAccount.qml:52
+#, kde-format
+msgid "Import format"
+msgstr "Importa format"
+
+#. i18n strings
+#: src/contents/ui/ImportAccount.qml:58
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "andOTP Encrypted JSON"
+msgstr "JSON andOTP encriptat"
+
+#: src/contents/ui/ImportAccount.qml:59
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "andOTP Plain JSON"
+msgstr "JSON andOTP normal"
+
+#. i18nc("@item:inlistbox", "Aegis Encrypted JSON"), value: Models.ValidatedImportInput.AegisEncryptedJSON});
+#: src/contents/ui/ImportAccount.qml:61
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "Aegis Plain JSON"
+msgstr "JSON Aegis normal"
+
+#: src/contents/ui/ImportAccount.qml:62
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "FreeOTP URIs"
+msgstr "URI de FreeOTP"
+
+#: src/contents/ui/ImportAccount.qml:78
+#, kde-format
+msgctxt "@label:chooser"
+msgid "Backup file:"
+msgstr "Fitxer de còpia de seguretat:"
+
+#: src/contents/ui/ImportAccount.qml:81
+#, kde-format
+msgctxt "@info:placeholder"
+msgid "No file selected"
+msgstr "No s'ha seleccionat cap fitxer"
+
+#: src/contents/ui/ImportAccount.qml:85
+#, kde-format
+msgctxt "@title:window"
+msgid "Select file"
+msgstr "Selecció de fitxer"
+
+#: src/contents/ui/ImportAccount.qml:99
+#, kde-format
+msgctxt "@info:placeholder"
+msgid "Decryption password"
+msgstr "Contrasenya de desencriptatge"
+
+#: src/contents/ui/ImportAccount.qml:101 src/contents/ui/UnlockAccounts.qml:49
+#, kde-format
+msgctxt "@label:textbox"
+msgid "Password:"
+msgstr "Contrasenya:"
+
+#: src/contents/ui/ImportAccount.qml:112
+#, kde-format
+msgctxt "@action:button"
+msgid "Import"
+msgstr "Importa"
+
+#: src/contents/ui/KeysmithGlobalDrawer.qml:12
+#: src/contents/ui/KeysmithGlobalDrawer.qml:15
+#, kde-format
+msgid "About Keysmith"
+msgstr "Quant al Keysmith"
+
+#: src/contents/ui/QRScanPage.qml:21
+#, kde-format
+msgctxt "@title"
+msgid "Scan a QR code"
+msgstr "Escaneja un codi QR"
+
+#: src/contents/ui/QRScanPage.qml:31
+#, kde-format
+msgctxt "@action:intoolbar"
+msgid "Select Camera"
+msgstr "Selecciona una càmera"
+
+#: src/contents/ui/QRScanPage.qml:42
+#, kde-format
+msgctxt "@title:dialog"
+msgid "Select Camera"
+msgstr "Selecció de càmera"
+
+#: src/contents/ui/QRScanPage.qml:61
+#, kde-format
+msgctxt "@action:button"
+msgid "Close"
+msgstr "Tanca"
+
 #: src/contents/ui/RenameAccount.qml:17
 #, kde-format
 msgctxt "@title:window"
@@ -356,13 +472,13 @@ msgstr "Cancel·la"
 msgid "Add"
 msgstr "Afegeix"
 
-#: src/contents/ui/SetupPassword.qml:22 src/contents/ui/UnlockAccounts.qml:22
+#: src/contents/ui/SetupPassword.qml:21 src/contents/ui/UnlockAccounts.qml:21
 #, kde-format
 msgctxt "@title:window"
 msgid "Password"
 msgstr "Contrasenya"
 
-#: src/contents/ui/SetupPassword.qml:28
+#: src/contents/ui/SetupPassword.qml:27
 #, kde-format
 msgid "Failed to set up your password"
 msgstr "Ha fallat en establir la contrasenya"
@@ -372,19 +488,19 @@ msgstr "Ha fallat en establir la contras
 msgid "Choose a password to protect your accounts"
 msgstr "Trieu una contrasenya per a protegir els comptes"
 
-#: src/contents/ui/SetupPassword.qml:49
+#: src/contents/ui/SetupPassword.qml:48
 #, kde-format
 msgctxt "@label:textbox"
 msgid "New Password:"
 msgstr "Contrasenya nova:"
 
-#: src/contents/ui/SetupPassword.qml:60
+#: src/contents/ui/SetupPassword.qml:61
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Verify password:"
 msgstr "Verifiqueu la contrasenya:"
 
-#: src/contents/ui/SetupPassword.qml:68
+#: src/contents/ui/SetupPassword.qml:72
 #, kde-format
 msgctxt "@action:button"
 msgid "Apply"
@@ -432,7 +548,7 @@ msgctxt "@option:radio"
 msgid "SHA-512"
 msgstr "SHA-512"
 
-#: src/contents/ui/UnlockAccounts.qml:26
+#: src/contents/ui/UnlockAccounts.qml:25
 #, kde-format
 msgid "Failed to unlock your accounts"
 msgstr "Ha fallat en desblocar els comptes"
@@ -442,20 +558,29 @@ msgstr "Ha fallat en desblocar els compt
 msgid "Please provide the password to unlock your accounts"
 msgstr "Proporcioneu la contrasenya per a desblocar els comptes"
 
-#: src/contents/ui/UnlockAccounts.qml:50
-#, kde-format
-msgctxt "@label:textbox"
-msgid "Password:"
-msgstr "Contrasenya:"
-
-#: src/contents/ui/UnlockAccounts.qml:59
+#: src/contents/ui/UnlockAccounts.qml:61
 #, kde-format
 msgctxt "@action:button"
 msgid "Unlock"
 msgstr "Desbloca"
 
-#: src/main.cpp:67
+#: src/main.cpp:70
 #, kde-format
 msgctxt "@title"
 msgid "Keysmith"
 msgstr "Keysmith"
+
+#: src/main.cpp:73
+#, kde-format
+msgid "generate two-factor authentication (2FA) tokens"
+msgstr "genera testimonis d'autenticació de 2 factors (2FA)"
+
+#: src/main.cpp:76
+#, kde-format
+msgid "Keysmith"
+msgstr "Keysmith"
+
+#: src/main.cpp:80
+#, kde-format
+msgid "© 2019 KDE Community"
+msgstr "© 2019 KDE Community"
diff -pruN 24.08.1-1/po/ca@valencia/keysmith.po 25.03.90-1/po/ca@valencia/keysmith.po
--- 24.08.1-1/po/ca@valencia/keysmith.po	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/po/ca@valencia/keysmith.po	2025-03-27 10:13:04.000000000 +0000
@@ -1,16 +1,16 @@
 # Translation of keysmith.po to Catalan (Valencian)
-# Copyright (C) 2020-2024 This_file_is_part_of_KDE
+# Copyright (C) 2020-2025 This_file_is_part_of_KDE
 # This file is distributed under the license LGPL version 2.1 or
 # version 3 or later versions approved by the membership of KDE e.V.
 #
-# Josep M. Ferrer <txemaq@gmail.com>, 2020, 2022, 2023, 2024.
+# SPDX-FileCopyrightText: 2020, 2022, 2023, 2024, 2025 Josep M. Ferrer <txemaq@gmail.com>
 # Antoni Bella Pérez <antonibella5@yahoo.com>, 2020, 2021.
 msgid ""
 msgstr ""
 "Project-Id-Version: keysmith\n"
 "Report-Msgid-Bugs-To: https://bugs.kde.org\n"
-"POT-Creation-Date: 2024-05-03 00:40+0000\n"
-"PO-Revision-Date: 2024-01-13 15:57+0100\n"
+"POT-Creation-Date: 2025-02-09 00:43+0000\n"
+"PO-Revision-Date: 2025-01-14 10:50+0100\n"
 "Last-Translator: Josep M. Ferrer <txemaq@gmail.com>\n"
 "Language-Team: Catalan <kde-i18n-ca@kde.org>\n"
 "Language: ca@valencia\n"
@@ -19,7 +19,7 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
 "X-Accelerator-Marker: &\n"
-"X-Generator: Lokalize 22.12.3\n"
+"X-Generator: Lokalize 24.12.1\n"
 
 #: src/app/cli.cpp:133
 #, kde-format
@@ -30,13 +30,13 @@ msgstr ""
 "Compte opcional que s'afegirà, amb format «otpauth:// URI» (p. ex., a partir "
 "d'un codi QR)"
 
-#: src/app/flows_p.cpp:108 src/app/flows_p.cpp:248
+#: src/app/flows_p.cpp:111 src/app/flows_p.cpp:285
 #, kde-format
 msgctxt "@title:window"
 msgid "Invalid account"
 msgstr "Compte no vàlid"
 
-#: src/app/flows_p.cpp:109
+#: src/app/flows_p.cpp:112
 #, kde-format
 msgctxt "@info:label"
 msgid ""
@@ -46,7 +46,7 @@ msgstr ""
 "El compte que s'intenta afegir no és vàlid. Podeu eixir de l'aplicació, o "
 "continuar sense afegir el compte."
 
-#: src/app/flows_p.cpp:249
+#: src/app/flows_p.cpp:286
 #, kde-format
 msgctxt "@info:label"
 msgid ""
@@ -150,13 +150,13 @@ msgctxt "Notification shown in a passive
 msgid "Token copied to clipboard!"
 msgstr "El testimoni s'ha copiat a dins del porta-retalls!"
 
-#: src/contents/ui/AccountNameForm.qml:64
+#: src/contents/ui/AccountNameForm.qml:81
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Account name:"
 msgstr "Nom del compte:"
 
-#: src/contents/ui/AccountNameForm.qml:83
+#: src/contents/ui/AccountNameForm.qml:100
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Account issuer:"
@@ -180,12 +180,12 @@ msgctxt "error message shown when loadin
 msgid "Some accounts failed to load."
 msgstr "No s'ha pogut carregar alguns comptes."
 
-#: src/contents/ui/AccountsOverview.qml:101
+#: src/contents/ui/AccountsOverview.qml:91
 #, kde-format
 msgid "No accounts added"
 msgstr "No s'ha afegit cap compte"
 
-#: src/contents/ui/AccountsOverview.qml:106
+#: src/contents/ui/AccountsOverview.qml:96
 #, kde-format
 msgctxt ""
 "@action:button add new account, shown instead of overview list when no "
@@ -193,90 +193,103 @@ msgctxt ""
 msgid "Add Account"
 msgstr "Afig un compte"
 
-#: src/contents/ui/AccountsOverview.qml:172
+#: src/contents/ui/AccountsOverview.qml:163
 #, kde-format
 msgctxt "@action:button add new account, shown in toolbar"
 msgid "Add"
 msgstr "Afig"
 
+#: src/contents/ui/AccountsOverview.qml:176
+#, kde-format
+msgctxt "@action:button import accounts, shown in toolbar"
+msgid "Import"
+msgstr "Importa"
+
+#: src/contents/ui/AccountsOverview.qml:189
+#, kde-format
+msgctxt ""
+"@action:button import an account by scanning a QR code, shown in toolbar"
+msgid "Scan QR Code"
+msgstr "Escaneja un codi QR"
+
 #: src/contents/ui/AddAccount.qml:22
 #, kde-format
 msgctxt "@title:window"
 msgid "Add new account"
 msgstr "Afig un compte nou"
 
-#: src/contents/ui/AddAccount.qml:45
+#: src/contents/ui/AddAccount.qml:50
 #, kde-format
 msgctxt "@action:button cancel and dismiss the add account form"
 msgid "Cancel"
 msgstr "Cancel·la"
 
-#: src/contents/ui/AddAccount.qml:52
+#: src/contents/ui/AddAccount.qml:57
 #, kde-format
 msgctxt "@action:button Dismiss the error page and quit Keysmith"
 msgid "Quit"
 msgstr "Ix"
 
-#: src/contents/ui/AddAccount.qml:61
+#: src/contents/ui/AddAccount.qml:66
 #, kde-format
 msgctxt "@action:button"
 msgid "Add"
 msgstr "Afig"
 
-#: src/contents/ui/AddAccount.qml:81
+#: src/contents/ui/AddAccount.qml:86
 #, kde-format
 msgctxt "@label:chooser"
 msgid "Account type:"
 msgstr "Tipus de compte:"
 
-#: src/contents/ui/AddAccount.qml:90
+#: src/contents/ui/AddAccount.qml:95
 #, kde-format
 msgctxt "@option:radio"
 msgid "Time-based OTP"
 msgstr "OTP basat en l'hora"
 
-#: src/contents/ui/AddAccount.qml:101
+#: src/contents/ui/AddAccount.qml:106
 #, kde-format
 msgctxt "@option:radio"
 msgid "Hash-based OTP"
 msgstr "OTP basat en el resum"
 
-#: src/contents/ui/AddAccount.qml:113
+#: src/contents/ui/AddAccount.qml:118
 #, kde-format
 msgid "Token secret"
 msgstr "Secret del testimoni"
 
-#: src/contents/ui/AddAccount.qml:116
+#: src/contents/ui/AddAccount.qml:120
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Secret key:"
 msgstr "Clau secreta:"
 
-#: src/contents/ui/AddAccount.qml:132
+#: src/contents/ui/AddAccount.qml:139
 #, kde-format
 msgctxt "Button to reveal form for configuring additional token details"
 msgid "Details"
 msgstr "Detalls"
 
-#: src/contents/ui/AddAccount.qml:140
+#: src/contents/ui/AddAccount.qml:147
 #, kde-format
 msgctxt "@title:group"
 msgid "HOTP Details:"
 msgstr "Detalls d'HOTP:"
 
-#: src/contents/ui/AddAccount.qml:153
+#: src/contents/ui/AddAccount.qml:160
 #, kde-format
 msgctxt "@label"
 msgid "TOTP Details:"
 msgstr "Detalls de TOTP:"
 
-#: src/contents/ui/ErrorPage.qml:33
+#: src/contents/ui/ErrorPage.qml:34
 #, kde-format
 msgctxt "@action:button Button to dismiss the error page"
 msgid "Continue"
 msgstr "Continua"
 
-#: src/contents/ui/ErrorPage.qml:40
+#: src/contents/ui/ErrorPage.qml:41
 #, kde-format
 msgctxt "@action:button Dismiss the error page and quit Keysmtih"
 msgid "Quit"
@@ -327,6 +340,109 @@ msgctxt "@label:spinbox"
 msgid "Truncation offset:"
 msgstr "Desplaçament de truncament:"
 
+#: src/contents/ui/ImportAccount.qml:21
+#, kde-format
+msgctxt "@title:window"
+msgid "Import Accounts"
+msgstr "Importació de comptes"
+
+#: src/contents/ui/ImportAccount.qml:52
+#, kde-format
+msgid "Import format"
+msgstr "Importa format"
+
+#. i18n strings
+#: src/contents/ui/ImportAccount.qml:58
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "andOTP Encrypted JSON"
+msgstr "JSON andOTP encriptat"
+
+#: src/contents/ui/ImportAccount.qml:59
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "andOTP Plain JSON"
+msgstr "JSON andOTP normal"
+
+#. i18nc("@item:inlistbox", "Aegis Encrypted JSON"), value: Models.ValidatedImportInput.AegisEncryptedJSON});
+#: src/contents/ui/ImportAccount.qml:61
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "Aegis Plain JSON"
+msgstr "JSON Aegis normal"
+
+#: src/contents/ui/ImportAccount.qml:62
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "FreeOTP URIs"
+msgstr "URI de FreeOTP"
+
+#: src/contents/ui/ImportAccount.qml:78
+#, kde-format
+msgctxt "@label:chooser"
+msgid "Backup file:"
+msgstr "Fitxer de còpia de seguretat:"
+
+#: src/contents/ui/ImportAccount.qml:81
+#, kde-format
+msgctxt "@info:placeholder"
+msgid "No file selected"
+msgstr "No s'ha seleccionat cap fitxer"
+
+#: src/contents/ui/ImportAccount.qml:85
+#, kde-format
+msgctxt "@title:window"
+msgid "Select file"
+msgstr "Seleccioneu un fitxer"
+
+#: src/contents/ui/ImportAccount.qml:99
+#, kde-format
+msgctxt "@info:placeholder"
+msgid "Decryption password"
+msgstr "Contrasenya de desencriptació"
+
+#: src/contents/ui/ImportAccount.qml:101 src/contents/ui/UnlockAccounts.qml:49
+#, kde-format
+msgctxt "@label:textbox"
+msgid "Password:"
+msgstr "Contrasenya:"
+
+#: src/contents/ui/ImportAccount.qml:112
+#, kde-format
+msgctxt "@action:button"
+msgid "Import"
+msgstr "Importa"
+
+#: src/contents/ui/KeysmithGlobalDrawer.qml:12
+#: src/contents/ui/KeysmithGlobalDrawer.qml:15
+#, kde-format
+msgid "About Keysmith"
+msgstr "Quant a Keysmith"
+
+#: src/contents/ui/QRScanPage.qml:21
+#, kde-format
+msgctxt "@title"
+msgid "Scan a QR code"
+msgstr "Escaneja un codi QR"
+
+#: src/contents/ui/QRScanPage.qml:31
+#, kde-format
+msgctxt "@action:intoolbar"
+msgid "Select Camera"
+msgstr "Selecciona una càmera"
+
+#: src/contents/ui/QRScanPage.qml:42
+#, kde-format
+msgctxt "@title:dialog"
+msgid "Select Camera"
+msgstr "Seleccioneu la càmera"
+
+#: src/contents/ui/QRScanPage.qml:61
+#, kde-format
+msgctxt "@action:button"
+msgid "Close"
+msgstr "Tanca"
+
 #: src/contents/ui/RenameAccount.qml:17
 #, kde-format
 msgctxt "@title:window"
@@ -356,13 +472,13 @@ msgstr "Cancel·la"
 msgid "Add"
 msgstr "Afig"
 
-#: src/contents/ui/SetupPassword.qml:22 src/contents/ui/UnlockAccounts.qml:22
+#: src/contents/ui/SetupPassword.qml:21 src/contents/ui/UnlockAccounts.qml:21
 #, kde-format
 msgctxt "@title:window"
 msgid "Password"
 msgstr "Contrasenya"
 
-#: src/contents/ui/SetupPassword.qml:28
+#: src/contents/ui/SetupPassword.qml:27
 #, kde-format
 msgid "Failed to set up your password"
 msgstr "No s'ha pogut establir la contrasenya"
@@ -372,19 +488,19 @@ msgstr "No s'ha pogut establir la contra
 msgid "Choose a password to protect your accounts"
 msgstr "Seleccioneu una contrasenya per a protegir els comptes"
 
-#: src/contents/ui/SetupPassword.qml:49
+#: src/contents/ui/SetupPassword.qml:48
 #, kde-format
 msgctxt "@label:textbox"
 msgid "New Password:"
 msgstr "Contrasenya nova:"
 
-#: src/contents/ui/SetupPassword.qml:60
+#: src/contents/ui/SetupPassword.qml:61
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Verify password:"
 msgstr "Verifiqueu la contrasenya:"
 
-#: src/contents/ui/SetupPassword.qml:68
+#: src/contents/ui/SetupPassword.qml:72
 #, kde-format
 msgctxt "@action:button"
 msgid "Apply"
@@ -432,7 +548,7 @@ msgctxt "@option:radio"
 msgid "SHA-512"
 msgstr "SHA-512"
 
-#: src/contents/ui/UnlockAccounts.qml:26
+#: src/contents/ui/UnlockAccounts.qml:25
 #, kde-format
 msgid "Failed to unlock your accounts"
 msgstr "No s'han pogut desblocar els comptes"
@@ -442,20 +558,29 @@ msgstr "No s'han pogut desblocar els com
 msgid "Please provide the password to unlock your accounts"
 msgstr "Proporcioneu la contrasenya per a desblocar els comptes"
 
-#: src/contents/ui/UnlockAccounts.qml:50
-#, kde-format
-msgctxt "@label:textbox"
-msgid "Password:"
-msgstr "Contrasenya:"
-
-#: src/contents/ui/UnlockAccounts.qml:59
+#: src/contents/ui/UnlockAccounts.qml:61
 #, kde-format
 msgctxt "@action:button"
 msgid "Unlock"
 msgstr "Desbloca"
 
-#: src/main.cpp:67
+#: src/main.cpp:70
 #, kde-format
 msgctxt "@title"
 msgid "Keysmith"
 msgstr "Keysmith"
+
+#: src/main.cpp:73
+#, kde-format
+msgid "generate two-factor authentication (2FA) tokens"
+msgstr "genera testimonis d'autenticació de 2 factors (2FA)"
+
+#: src/main.cpp:76
+#, kde-format
+msgid "Keysmith"
+msgstr "Keysmith"
+
+#: src/main.cpp:80
+#, kde-format
+msgid "© 2019 KDE Community"
+msgstr "© 2019 Comunitat KDE"
diff -pruN 24.08.1-1/po/cs/keysmith.po 25.03.90-1/po/cs/keysmith.po
--- 24.08.1-1/po/cs/keysmith.po	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/po/cs/keysmith.po	2025-03-27 10:13:04.000000000 +0000
@@ -1,13 +1,13 @@
 # Copyright (C) 2023 This file is copyright:
 # This file is distributed under the same license as the keysmith package.
-# SPDX-FileCopyrightText: 2020, 2021, 2023 Vit Pelcak <vit@pelcak.org>
+# SPDX-FileCopyrightText: 2020, 2021, 2023, 2024 Vit Pelcak <vit@pelcak.org>
 #
 msgid ""
 msgstr ""
 "Project-Id-Version: keysmith\n"
 "Report-Msgid-Bugs-To: https://bugs.kde.org\n"
-"POT-Creation-Date: 2024-05-03 00:40+0000\n"
-"PO-Revision-Date: 2023-11-02 14:10+0100\n"
+"POT-Creation-Date: 2025-02-09 00:43+0000\n"
+"PO-Revision-Date: 2024-10-01 16:41+0200\n"
 "Last-Translator: Vit Pelcak <vit@pelcak.org>\n"
 "Language-Team: Czech <kde-i18n-doc@kde.org>\n"
 "Language: cs\n"
@@ -15,7 +15,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
-"X-Generator: Lokalize 23.08.2\n"
+"X-Generator: Lokalize 24.08.1\n"
 
 #: src/app/cli.cpp:133
 #, kde-format
@@ -24,13 +24,13 @@ msgid ""
 "Optional account to add, formatted as otpauth:// URI (e.g. from a QR code)"
 msgstr ""
 
-#: src/app/flows_p.cpp:108 src/app/flows_p.cpp:248
+#: src/app/flows_p.cpp:111 src/app/flows_p.cpp:285
 #, kde-format
 msgctxt "@title:window"
 msgid "Invalid account"
 msgstr "Neplatný účet"
 
-#: src/app/flows_p.cpp:109
+#: src/app/flows_p.cpp:112
 #, kde-format
 msgctxt "@info:label"
 msgid ""
@@ -38,7 +38,7 @@ msgid ""
 "or continue without adding the account."
 msgstr ""
 
-#: src/app/flows_p.cpp:249
+#: src/app/flows_p.cpp:286
 #, kde-format
 msgctxt "@info:label"
 msgid ""
@@ -134,13 +134,13 @@ msgctxt "Notification shown in a passive
 msgid "Token copied to clipboard!"
 msgstr "Token byl zkopírován do schránky."
 
-#: src/contents/ui/AccountNameForm.qml:64
+#: src/contents/ui/AccountNameForm.qml:81
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Account name:"
 msgstr "Název účtu:"
 
-#: src/contents/ui/AccountNameForm.qml:83
+#: src/contents/ui/AccountNameForm.qml:100
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Account issuer:"
@@ -164,12 +164,12 @@ msgctxt "error message shown when loadin
 msgid "Some accounts failed to load."
 msgstr ""
 
-#: src/contents/ui/AccountsOverview.qml:101
+#: src/contents/ui/AccountsOverview.qml:91
 #, kde-format
 msgid "No accounts added"
 msgstr "Žádné účty nebyly přidány"
 
-#: src/contents/ui/AccountsOverview.qml:106
+#: src/contents/ui/AccountsOverview.qml:96
 #, kde-format
 msgctxt ""
 "@action:button add new account, shown instead of overview list when no "
@@ -177,90 +177,103 @@ msgctxt ""
 msgid "Add Account"
 msgstr "Přidat účet"
 
-#: src/contents/ui/AccountsOverview.qml:172
+#: src/contents/ui/AccountsOverview.qml:163
 #, kde-format
 msgctxt "@action:button add new account, shown in toolbar"
 msgid "Add"
 msgstr "Přidat"
 
+#: src/contents/ui/AccountsOverview.qml:176
+#, kde-format
+msgctxt "@action:button import accounts, shown in toolbar"
+msgid "Import"
+msgstr ""
+
+#: src/contents/ui/AccountsOverview.qml:189
+#, kde-format
+msgctxt ""
+"@action:button import an account by scanning a QR code, shown in toolbar"
+msgid "Scan QR Code"
+msgstr ""
+
 #: src/contents/ui/AddAccount.qml:22
 #, kde-format
 msgctxt "@title:window"
 msgid "Add new account"
 msgstr "Přidat nový účet"
 
-#: src/contents/ui/AddAccount.qml:45
+#: src/contents/ui/AddAccount.qml:50
 #, kde-format
 msgctxt "@action:button cancel and dismiss the add account form"
 msgid "Cancel"
 msgstr "Zrušit"
 
-#: src/contents/ui/AddAccount.qml:52
+#: src/contents/ui/AddAccount.qml:57
 #, kde-format
 msgctxt "@action:button Dismiss the error page and quit Keysmith"
 msgid "Quit"
 msgstr "Ukončit"
 
-#: src/contents/ui/AddAccount.qml:61
+#: src/contents/ui/AddAccount.qml:66
 #, kde-format
 msgctxt "@action:button"
 msgid "Add"
 msgstr "Přidat"
 
-#: src/contents/ui/AddAccount.qml:81
+#: src/contents/ui/AddAccount.qml:86
 #, kde-format
 msgctxt "@label:chooser"
 msgid "Account type:"
 msgstr "Typ účtu:"
 
-#: src/contents/ui/AddAccount.qml:90
+#: src/contents/ui/AddAccount.qml:95
 #, kde-format
 msgctxt "@option:radio"
 msgid "Time-based OTP"
 msgstr ""
 
-#: src/contents/ui/AddAccount.qml:101
+#: src/contents/ui/AddAccount.qml:106
 #, kde-format
 msgctxt "@option:radio"
 msgid "Hash-based OTP"
 msgstr ""
 
-#: src/contents/ui/AddAccount.qml:113
+#: src/contents/ui/AddAccount.qml:118
 #, kde-format
 msgid "Token secret"
 msgstr "Heslo tokenu"
 
-#: src/contents/ui/AddAccount.qml:116
+#: src/contents/ui/AddAccount.qml:120
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Secret key:"
 msgstr "Soukromý klíč:"
 
-#: src/contents/ui/AddAccount.qml:132
+#: src/contents/ui/AddAccount.qml:139
 #, kde-format
 msgctxt "Button to reveal form for configuring additional token details"
 msgid "Details"
 msgstr "Podrobnosti"
 
-#: src/contents/ui/AddAccount.qml:140
+#: src/contents/ui/AddAccount.qml:147
 #, kde-format
 msgctxt "@title:group"
 msgid "HOTP Details:"
 msgstr "Podrobnosti HOTP:"
 
-#: src/contents/ui/AddAccount.qml:153
+#: src/contents/ui/AddAccount.qml:160
 #, kde-format
 msgctxt "@label"
 msgid "TOTP Details:"
 msgstr "Podrobnosti TOTP:"
 
-#: src/contents/ui/ErrorPage.qml:33
+#: src/contents/ui/ErrorPage.qml:34
 #, kde-format
 msgctxt "@action:button Button to dismiss the error page"
 msgid "Continue"
 msgstr "Pokračovat"
 
-#: src/contents/ui/ErrorPage.qml:40
+#: src/contents/ui/ErrorPage.qml:41
 #, kde-format
 msgctxt "@action:button Dismiss the error page and quit Keysmtih"
 msgid "Quit"
@@ -311,6 +324,109 @@ msgctxt "@label:spinbox"
 msgid "Truncation offset:"
 msgstr ""
 
+#: src/contents/ui/ImportAccount.qml:21
+#, kde-format
+msgctxt "@title:window"
+msgid "Import Accounts"
+msgstr "Importovat účty"
+
+#: src/contents/ui/ImportAccount.qml:52
+#, kde-format
+msgid "Import format"
+msgstr ""
+
+#. i18n strings
+#: src/contents/ui/ImportAccount.qml:58
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "andOTP Encrypted JSON"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:59
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "andOTP Plain JSON"
+msgstr ""
+
+#. i18nc("@item:inlistbox", "Aegis Encrypted JSON"), value: Models.ValidatedImportInput.AegisEncryptedJSON});
+#: src/contents/ui/ImportAccount.qml:61
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "Aegis Plain JSON"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:62
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "FreeOTP URIs"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:78
+#, kde-format
+msgctxt "@label:chooser"
+msgid "Backup file:"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:81
+#, kde-format
+msgctxt "@info:placeholder"
+msgid "No file selected"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:85
+#, kde-format
+msgctxt "@title:window"
+msgid "Select file"
+msgstr "Vybrat soubor"
+
+#: src/contents/ui/ImportAccount.qml:99
+#, kde-format
+msgctxt "@info:placeholder"
+msgid "Decryption password"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:101 src/contents/ui/UnlockAccounts.qml:49
+#, kde-format
+msgctxt "@label:textbox"
+msgid "Password:"
+msgstr "Heslo:"
+
+#: src/contents/ui/ImportAccount.qml:112
+#, kde-format
+msgctxt "@action:button"
+msgid "Import"
+msgstr "Importovat"
+
+#: src/contents/ui/KeysmithGlobalDrawer.qml:12
+#: src/contents/ui/KeysmithGlobalDrawer.qml:15
+#, kde-format
+msgid "About Keysmith"
+msgstr "O aplikaci Keysmith"
+
+#: src/contents/ui/QRScanPage.qml:21
+#, kde-format
+msgctxt "@title"
+msgid "Scan a QR code"
+msgstr ""
+
+#: src/contents/ui/QRScanPage.qml:31
+#, kde-format
+msgctxt "@action:intoolbar"
+msgid "Select Camera"
+msgstr ""
+
+#: src/contents/ui/QRScanPage.qml:42
+#, kde-format
+msgctxt "@title:dialog"
+msgid "Select Camera"
+msgstr ""
+
+#: src/contents/ui/QRScanPage.qml:61
+#, kde-format
+msgctxt "@action:button"
+msgid "Close"
+msgstr "Zavřít"
+
 #: src/contents/ui/RenameAccount.qml:17
 #, kde-format
 msgctxt "@title:window"
@@ -338,13 +454,13 @@ msgstr "Zrušit"
 msgid "Add"
 msgstr "Přidat"
 
-#: src/contents/ui/SetupPassword.qml:22 src/contents/ui/UnlockAccounts.qml:22
+#: src/contents/ui/SetupPassword.qml:21 src/contents/ui/UnlockAccounts.qml:21
 #, kde-format
 msgctxt "@title:window"
 msgid "Password"
 msgstr "Heslo"
 
-#: src/contents/ui/SetupPassword.qml:28
+#: src/contents/ui/SetupPassword.qml:27
 #, kde-format
 msgid "Failed to set up your password"
 msgstr ""
@@ -354,19 +470,19 @@ msgstr ""
 msgid "Choose a password to protect your accounts"
 msgstr "Vyberte si heslo pro ochranu vašich účtů"
 
-#: src/contents/ui/SetupPassword.qml:49
+#: src/contents/ui/SetupPassword.qml:48
 #, kde-format
 msgctxt "@label:textbox"
 msgid "New Password:"
 msgstr "Nové heslo:"
 
-#: src/contents/ui/SetupPassword.qml:60
+#: src/contents/ui/SetupPassword.qml:61
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Verify password:"
 msgstr "Ověřit heslo:"
 
-#: src/contents/ui/SetupPassword.qml:68
+#: src/contents/ui/SetupPassword.qml:72
 #, kde-format
 msgctxt "@action:button"
 msgid "Apply"
@@ -414,7 +530,7 @@ msgctxt "@option:radio"
 msgid "SHA-512"
 msgstr "SHA-512"
 
-#: src/contents/ui/UnlockAccounts.qml:26
+#: src/contents/ui/UnlockAccounts.qml:25
 #, kde-format
 msgid "Failed to unlock your accounts"
 msgstr ""
@@ -424,20 +540,29 @@ msgstr ""
 msgid "Please provide the password to unlock your accounts"
 msgstr ""
 
-#: src/contents/ui/UnlockAccounts.qml:50
-#, kde-format
-msgctxt "@label:textbox"
-msgid "Password:"
-msgstr "Heslo:"
-
-#: src/contents/ui/UnlockAccounts.qml:59
+#: src/contents/ui/UnlockAccounts.qml:61
 #, kde-format
 msgctxt "@action:button"
 msgid "Unlock"
 msgstr "Odemknout"
 
-#: src/main.cpp:67
+#: src/main.cpp:70
 #, kde-format
 msgctxt "@title"
 msgid "Keysmith"
 msgstr "Keysmith"
+
+#: src/main.cpp:73
+#, kde-format
+msgid "generate two-factor authentication (2FA) tokens"
+msgstr "generujte tokeny pro dvoufaktorové ověření (2FA)"
+
+#: src/main.cpp:76
+#, kde-format
+msgid "Keysmith"
+msgstr "Keysmith"
+
+#: src/main.cpp:80
+#, kde-format
+msgid "© 2019 KDE Community"
+msgstr "© 2019 Komunita KDE"
diff -pruN 24.08.1-1/po/de/keysmith.po 25.03.90-1/po/de/keysmith.po
--- 24.08.1-1/po/de/keysmith.po	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/po/de/keysmith.po	2025-03-27 10:13:04.000000000 +0000
@@ -2,14 +2,14 @@
 # This file is distributed under the same license as the keysmith package.
 # Burkhard Lück <lueck@hube-lueck.de>, 2021.
 # Frederik Schwarzer <schwarzer@kde.org>, 2022, 2023.
-# SPDX-FileCopyrightText: 2024 Johannes Obermayr <johannesobermayr@gmx.de>
+# SPDX-FileCopyrightText: 2024, 2025 Johannes Obermayr <johannesobermayr@gmx.de>
 #
 msgid ""
 msgstr ""
 "Project-Id-Version: keysmith\n"
 "Report-Msgid-Bugs-To: https://bugs.kde.org\n"
-"POT-Creation-Date: 2024-05-03 00:40+0000\n"
-"PO-Revision-Date: 2024-03-20 21:05+0100\n"
+"POT-Creation-Date: 2025-02-09 00:43+0000\n"
+"PO-Revision-Date: 2025-01-15 12:10+0100\n"
 "Last-Translator: Johannes Obermayr <johannesobermayr@gmx.de>\n"
 "Language-Team: German <kde-i18n-de@kde.org>\n"
 "Language: de\n"
@@ -17,7 +17,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Lokalize 24.02.0\n"
+"X-Generator: Lokalize 25.03.70\n"
 
 #: src/app/cli.cpp:133
 #, kde-format
@@ -28,13 +28,13 @@ msgstr ""
 "Optionales Konto zum Hinzufügen, formatiert als otpauth:// URI (z. B. von "
 "einem QR-Code)"
 
-#: src/app/flows_p.cpp:108 src/app/flows_p.cpp:248
+#: src/app/flows_p.cpp:111 src/app/flows_p.cpp:285
 #, kde-format
 msgctxt "@title:window"
 msgid "Invalid account"
 msgstr "Ungültiges Konto"
 
-#: src/app/flows_p.cpp:109
+#: src/app/flows_p.cpp:112
 #, kde-format
 msgctxt "@info:label"
 msgid ""
@@ -44,7 +44,7 @@ msgstr ""
 "Das Konto, das Sie hinzuzufügen möchten, ist ungültig. Sie können entweder "
 "die App beenden oder fortfahren, ohne das Konto hinzuzufügen."
 
-#: src/app/flows_p.cpp:249
+#: src/app/flows_p.cpp:286
 #, kde-format
 msgctxt "@info:label"
 msgid ""
@@ -150,13 +150,13 @@ msgctxt "Notification shown in a passive
 msgid "Token copied to clipboard!"
 msgstr "Token in die Zwischenablage kopiert"
 
-#: src/contents/ui/AccountNameForm.qml:64
+#: src/contents/ui/AccountNameForm.qml:81
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Account name:"
 msgstr "Kontoname:"
 
-#: src/contents/ui/AccountNameForm.qml:83
+#: src/contents/ui/AccountNameForm.qml:100
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Account issuer:"
@@ -180,12 +180,12 @@ msgctxt "error message shown when loadin
 msgid "Some accounts failed to load."
 msgstr "Einige Konten können nicht geladen werden."
 
-#: src/contents/ui/AccountsOverview.qml:101
+#: src/contents/ui/AccountsOverview.qml:91
 #, kde-format
 msgid "No accounts added"
 msgstr "Keine Konten hinzugefügt"
 
-#: src/contents/ui/AccountsOverview.qml:106
+#: src/contents/ui/AccountsOverview.qml:96
 #, kde-format
 msgctxt ""
 "@action:button add new account, shown instead of overview list when no "
@@ -193,90 +193,103 @@ msgctxt ""
 msgid "Add Account"
 msgstr "Konto hinzufügen"
 
-#: src/contents/ui/AccountsOverview.qml:172
+#: src/contents/ui/AccountsOverview.qml:163
 #, kde-format
 msgctxt "@action:button add new account, shown in toolbar"
 msgid "Add"
 msgstr "Hinzufügen"
 
+#: src/contents/ui/AccountsOverview.qml:176
+#, kde-format
+msgctxt "@action:button import accounts, shown in toolbar"
+msgid "Import"
+msgstr "Importieren"
+
+#: src/contents/ui/AccountsOverview.qml:189
+#, kde-format
+msgctxt ""
+"@action:button import an account by scanning a QR code, shown in toolbar"
+msgid "Scan QR Code"
+msgstr "QR-Code scannen"
+
 #: src/contents/ui/AddAccount.qml:22
 #, kde-format
 msgctxt "@title:window"
 msgid "Add new account"
 msgstr "Neues Konto hinzufügen"
 
-#: src/contents/ui/AddAccount.qml:45
+#: src/contents/ui/AddAccount.qml:50
 #, kde-format
 msgctxt "@action:button cancel and dismiss the add account form"
 msgid "Cancel"
 msgstr "Abbrechen"
 
-#: src/contents/ui/AddAccount.qml:52
+#: src/contents/ui/AddAccount.qml:57
 #, kde-format
 msgctxt "@action:button Dismiss the error page and quit Keysmith"
 msgid "Quit"
 msgstr "Beenden"
 
-#: src/contents/ui/AddAccount.qml:61
+#: src/contents/ui/AddAccount.qml:66
 #, kde-format
 msgctxt "@action:button"
 msgid "Add"
 msgstr "Hinzufügen"
 
-#: src/contents/ui/AddAccount.qml:81
+#: src/contents/ui/AddAccount.qml:86
 #, kde-format
 msgctxt "@label:chooser"
 msgid "Account type:"
 msgstr "Kontentyp:"
 
-#: src/contents/ui/AddAccount.qml:90
+#: src/contents/ui/AddAccount.qml:95
 #, kde-format
 msgctxt "@option:radio"
 msgid "Time-based OTP"
 msgstr "Zeitbasiertes Einmalpasswort"
 
-#: src/contents/ui/AddAccount.qml:101
+#: src/contents/ui/AddAccount.qml:106
 #, kde-format
 msgctxt "@option:radio"
 msgid "Hash-based OTP"
 msgstr "Hash-basiertes Einmalpasswort"
 
-#: src/contents/ui/AddAccount.qml:113
+#: src/contents/ui/AddAccount.qml:118
 #, kde-format
 msgid "Token secret"
 msgstr "Token-Passwort"
 
-#: src/contents/ui/AddAccount.qml:116
+#: src/contents/ui/AddAccount.qml:120
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Secret key:"
 msgstr "Geheimer Schlüssel:"
 
-#: src/contents/ui/AddAccount.qml:132
+#: src/contents/ui/AddAccount.qml:139
 #, kde-format
 msgctxt "Button to reveal form for configuring additional token details"
 msgid "Details"
 msgstr "Details"
 
-#: src/contents/ui/AddAccount.qml:140
+#: src/contents/ui/AddAccount.qml:147
 #, kde-format
 msgctxt "@title:group"
 msgid "HOTP Details:"
 msgstr "HOTP-Details:"
 
-#: src/contents/ui/AddAccount.qml:153
+#: src/contents/ui/AddAccount.qml:160
 #, kde-format
 msgctxt "@label"
 msgid "TOTP Details:"
 msgstr "Details zum TOTP:"
 
-#: src/contents/ui/ErrorPage.qml:33
+#: src/contents/ui/ErrorPage.qml:34
 #, kde-format
 msgctxt "@action:button Button to dismiss the error page"
 msgid "Continue"
 msgstr "Fortsetzen"
 
-#: src/contents/ui/ErrorPage.qml:40
+#: src/contents/ui/ErrorPage.qml:41
 #, kde-format
 msgctxt "@action:button Dismiss the error page and quit Keysmtih"
 msgid "Quit"
@@ -327,6 +340,109 @@ msgctxt "@label:spinbox"
 msgid "Truncation offset:"
 msgstr "Rundungsversatz:"
 
+#: src/contents/ui/ImportAccount.qml:21
+#, kde-format
+msgctxt "@title:window"
+msgid "Import Accounts"
+msgstr "Konten importieren"
+
+#: src/contents/ui/ImportAccount.qml:52
+#, kde-format
+msgid "Import format"
+msgstr "Import-Format"
+
+#. i18n strings
+#: src/contents/ui/ImportAccount.qml:58
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "andOTP Encrypted JSON"
+msgstr "andOTP verschlüsseltes JSON"
+
+#: src/contents/ui/ImportAccount.qml:59
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "andOTP Plain JSON"
+msgstr "andOTP einfaches JSON"
+
+#. i18nc("@item:inlistbox", "Aegis Encrypted JSON"), value: Models.ValidatedImportInput.AegisEncryptedJSON});
+#: src/contents/ui/ImportAccount.qml:61
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "Aegis Plain JSON"
+msgstr "Aegis einfaches JSON"
+
+#: src/contents/ui/ImportAccount.qml:62
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "FreeOTP URIs"
+msgstr "FreeOTP-Adressen"
+
+#: src/contents/ui/ImportAccount.qml:78
+#, kde-format
+msgctxt "@label:chooser"
+msgid "Backup file:"
+msgstr "Sicherungsdatei:"
+
+#: src/contents/ui/ImportAccount.qml:81
+#, kde-format
+msgctxt "@info:placeholder"
+msgid "No file selected"
+msgstr "Keine Datei ausgewählt"
+
+#: src/contents/ui/ImportAccount.qml:85
+#, kde-format
+msgctxt "@title:window"
+msgid "Select file"
+msgstr "Datei auswählen"
+
+#: src/contents/ui/ImportAccount.qml:99
+#, kde-format
+msgctxt "@info:placeholder"
+msgid "Decryption password"
+msgstr "Verschlüsselungspasswort"
+
+#: src/contents/ui/ImportAccount.qml:101 src/contents/ui/UnlockAccounts.qml:49
+#, kde-format
+msgctxt "@label:textbox"
+msgid "Password:"
+msgstr "Passwort:"
+
+#: src/contents/ui/ImportAccount.qml:112
+#, kde-format
+msgctxt "@action:button"
+msgid "Import"
+msgstr "Importieren"
+
+#: src/contents/ui/KeysmithGlobalDrawer.qml:12
+#: src/contents/ui/KeysmithGlobalDrawer.qml:15
+#, kde-format
+msgid "About Keysmith"
+msgstr "Über Keysmith"
+
+#: src/contents/ui/QRScanPage.qml:21
+#, kde-format
+msgctxt "@title"
+msgid "Scan a QR code"
+msgstr "Einen QR-Code scannen"
+
+#: src/contents/ui/QRScanPage.qml:31
+#, kde-format
+msgctxt "@action:intoolbar"
+msgid "Select Camera"
+msgstr "Kamera auswählen"
+
+#: src/contents/ui/QRScanPage.qml:42
+#, kde-format
+msgctxt "@title:dialog"
+msgid "Select Camera"
+msgstr "Kamera auswählen"
+
+#: src/contents/ui/QRScanPage.qml:61
+#, kde-format
+msgctxt "@action:button"
+msgid "Close"
+msgstr "Schließen"
+
 #: src/contents/ui/RenameAccount.qml:17
 #, kde-format
 msgctxt "@title:window"
@@ -356,13 +472,13 @@ msgstr "Abbrechen"
 msgid "Add"
 msgstr "Hinzufügen"
 
-#: src/contents/ui/SetupPassword.qml:22 src/contents/ui/UnlockAccounts.qml:22
+#: src/contents/ui/SetupPassword.qml:21 src/contents/ui/UnlockAccounts.qml:21
 #, kde-format
 msgctxt "@title:window"
 msgid "Password"
 msgstr "Passwort"
 
-#: src/contents/ui/SetupPassword.qml:28
+#: src/contents/ui/SetupPassword.qml:27
 #, kde-format
 msgid "Failed to set up your password"
 msgstr "Ihr Passwort konnte nicht eingerichtet werden"
@@ -372,19 +488,19 @@ msgstr "Ihr Passwort konnte nicht einger
 msgid "Choose a password to protect your accounts"
 msgstr "Wählen Sie ein Passwort zum Schutz Ihrer Konten"
 
-#: src/contents/ui/SetupPassword.qml:49
+#: src/contents/ui/SetupPassword.qml:48
 #, kde-format
 msgctxt "@label:textbox"
 msgid "New Password:"
 msgstr "Neues Passwort:"
 
-#: src/contents/ui/SetupPassword.qml:60
+#: src/contents/ui/SetupPassword.qml:61
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Verify password:"
 msgstr "Passwort überprüfen:"
 
-#: src/contents/ui/SetupPassword.qml:68
+#: src/contents/ui/SetupPassword.qml:72
 #, kde-format
 msgctxt "@action:button"
 msgid "Apply"
@@ -432,7 +548,7 @@ msgctxt "@option:radio"
 msgid "SHA-512"
 msgstr "SHA-512"
 
-#: src/contents/ui/UnlockAccounts.qml:26
+#: src/contents/ui/UnlockAccounts.qml:25
 #, kde-format
 msgid "Failed to unlock your accounts"
 msgstr "Konten können nicht entsperrt werden"
@@ -442,24 +558,33 @@ msgstr "Konten können nicht entsperrt w
 msgid "Please provide the password to unlock your accounts"
 msgstr "Bitte geben Sie das Passwort zum Entsperren Ihrer Konten an"
 
-#: src/contents/ui/UnlockAccounts.qml:50
-#, kde-format
-msgctxt "@label:textbox"
-msgid "Password:"
-msgstr "Passwort:"
-
-#: src/contents/ui/UnlockAccounts.qml:59
+#: src/contents/ui/UnlockAccounts.qml:61
 #, kde-format
 msgctxt "@action:button"
 msgid "Unlock"
 msgstr "Entsperren"
 
-#: src/main.cpp:67
+#: src/main.cpp:70
 #, kde-format
 msgctxt "@title"
 msgid "Keysmith"
 msgstr "Keysmith"
 
+#: src/main.cpp:73
+#, kde-format
+msgid "generate two-factor authentication (2FA) tokens"
+msgstr "Token für Zwei-Faktor-Authentisierung (2FA) erstellen"
+
+#: src/main.cpp:76
+#, kde-format
+msgid "Keysmith"
+msgstr "Keysmith"
+
+#: src/main.cpp:80
+#, kde-format
+msgid "© 2019 KDE Community"
+msgstr "© 2019 KDE-Gemeinschaft"
+
 #~ msgctxt "Button cancelling account removal"
 #~ msgid "Cancel"
 #~ msgstr "Abbrechen"
diff -pruN 24.08.1-1/po/en_GB/keysmith.po 25.03.90-1/po/en_GB/keysmith.po
--- 24.08.1-1/po/en_GB/keysmith.po	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/po/en_GB/keysmith.po	2025-03-27 10:13:04.000000000 +0000
@@ -6,8 +6,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: keysmith\n"
 "Report-Msgid-Bugs-To: https://bugs.kde.org\n"
-"POT-Creation-Date: 2024-05-03 00:40+0000\n"
-"PO-Revision-Date: 2024-05-23 19:31+0100\n"
+"POT-Creation-Date: 2025-02-09 00:43+0000\n"
+"PO-Revision-Date: 2024-11-23 12:04+0000\n"
 "Last-Translator: Steve Allewell <steve.allewell@gmail.com>\n"
 "Language-Team: British English\n"
 "Language: en_GB\n"
@@ -15,7 +15,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Lokalize 24.02.2\n"
+"X-Generator: Lokalize 24.08.3\n"
 
 #: src/app/cli.cpp:133
 #, kde-format
@@ -25,13 +25,13 @@ msgid ""
 msgstr ""
 "Optional account to add, formatted as otpauth:// URI (e.g. from a QR code)"
 
-#: src/app/flows_p.cpp:108 src/app/flows_p.cpp:248
+#: src/app/flows_p.cpp:111 src/app/flows_p.cpp:285
 #, kde-format
 msgctxt "@title:window"
 msgid "Invalid account"
 msgstr "Invalid account"
 
-#: src/app/flows_p.cpp:109
+#: src/app/flows_p.cpp:112
 #, kde-format
 msgctxt "@info:label"
 msgid ""
@@ -41,7 +41,7 @@ msgstr ""
 "The account you are trying to add is invalid. You can either quit the app, "
 "or continue without adding the account."
 
-#: src/app/flows_p.cpp:249
+#: src/app/flows_p.cpp:286
 #, kde-format
 msgctxt "@info:label"
 msgid ""
@@ -146,13 +146,13 @@ msgctxt "Notification shown in a passive
 msgid "Token copied to clipboard!"
 msgstr "Token copied to clipboard!"
 
-#: src/contents/ui/AccountNameForm.qml:64
+#: src/contents/ui/AccountNameForm.qml:81
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Account name:"
 msgstr "Account name:"
 
-#: src/contents/ui/AccountNameForm.qml:83
+#: src/contents/ui/AccountNameForm.qml:100
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Account issuer:"
@@ -176,12 +176,12 @@ msgctxt "error message shown when loadin
 msgid "Some accounts failed to load."
 msgstr "Some accounts failed to load."
 
-#: src/contents/ui/AccountsOverview.qml:101
+#: src/contents/ui/AccountsOverview.qml:91
 #, kde-format
 msgid "No accounts added"
 msgstr "No accounts added"
 
-#: src/contents/ui/AccountsOverview.qml:106
+#: src/contents/ui/AccountsOverview.qml:96
 #, kde-format
 msgctxt ""
 "@action:button add new account, shown instead of overview list when no "
@@ -189,90 +189,103 @@ msgctxt ""
 msgid "Add Account"
 msgstr "Add Account"
 
-#: src/contents/ui/AccountsOverview.qml:172
+#: src/contents/ui/AccountsOverview.qml:163
 #, kde-format
 msgctxt "@action:button add new account, shown in toolbar"
 msgid "Add"
 msgstr "Add"
 
+#: src/contents/ui/AccountsOverview.qml:176
+#, kde-format
+msgctxt "@action:button import accounts, shown in toolbar"
+msgid "Import"
+msgstr "Import"
+
+#: src/contents/ui/AccountsOverview.qml:189
+#, kde-format
+msgctxt ""
+"@action:button import an account by scanning a QR code, shown in toolbar"
+msgid "Scan QR Code"
+msgstr ""
+
 #: src/contents/ui/AddAccount.qml:22
 #, kde-format
 msgctxt "@title:window"
 msgid "Add new account"
 msgstr "Add new account"
 
-#: src/contents/ui/AddAccount.qml:45
+#: src/contents/ui/AddAccount.qml:50
 #, kde-format
 msgctxt "@action:button cancel and dismiss the add account form"
 msgid "Cancel"
 msgstr "Cancel"
 
-#: src/contents/ui/AddAccount.qml:52
+#: src/contents/ui/AddAccount.qml:57
 #, kde-format
 msgctxt "@action:button Dismiss the error page and quit Keysmith"
 msgid "Quit"
 msgstr "Quit"
 
-#: src/contents/ui/AddAccount.qml:61
+#: src/contents/ui/AddAccount.qml:66
 #, kde-format
 msgctxt "@action:button"
 msgid "Add"
 msgstr "Add"
 
-#: src/contents/ui/AddAccount.qml:81
+#: src/contents/ui/AddAccount.qml:86
 #, kde-format
 msgctxt "@label:chooser"
 msgid "Account type:"
 msgstr "Account type:"
 
-#: src/contents/ui/AddAccount.qml:90
+#: src/contents/ui/AddAccount.qml:95
 #, kde-format
 msgctxt "@option:radio"
 msgid "Time-based OTP"
 msgstr "Time-based OTP"
 
-#: src/contents/ui/AddAccount.qml:101
+#: src/contents/ui/AddAccount.qml:106
 #, kde-format
 msgctxt "@option:radio"
 msgid "Hash-based OTP"
 msgstr "Hash-based OTP"
 
-#: src/contents/ui/AddAccount.qml:113
+#: src/contents/ui/AddAccount.qml:118
 #, kde-format
 msgid "Token secret"
 msgstr "Token secret"
 
-#: src/contents/ui/AddAccount.qml:116
+#: src/contents/ui/AddAccount.qml:120
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Secret key:"
 msgstr "Secret key:"
 
-#: src/contents/ui/AddAccount.qml:132
+#: src/contents/ui/AddAccount.qml:139
 #, kde-format
 msgctxt "Button to reveal form for configuring additional token details"
 msgid "Details"
 msgstr "Details"
 
-#: src/contents/ui/AddAccount.qml:140
+#: src/contents/ui/AddAccount.qml:147
 #, kde-format
 msgctxt "@title:group"
 msgid "HOTP Details:"
 msgstr "HOTP Details:"
 
-#: src/contents/ui/AddAccount.qml:153
+#: src/contents/ui/AddAccount.qml:160
 #, kde-format
 msgctxt "@label"
 msgid "TOTP Details:"
 msgstr "TOTP Details:"
 
-#: src/contents/ui/ErrorPage.qml:33
+#: src/contents/ui/ErrorPage.qml:34
 #, kde-format
 msgctxt "@action:button Button to dismiss the error page"
 msgid "Continue"
 msgstr "Continue"
 
-#: src/contents/ui/ErrorPage.qml:40
+#: src/contents/ui/ErrorPage.qml:41
 #, kde-format
 msgctxt "@action:button Dismiss the error page and quit Keysmtih"
 msgid "Quit"
@@ -323,6 +336,113 @@ msgctxt "@label:spinbox"
 msgid "Truncation offset:"
 msgstr "Truncation offset:"
 
+#: src/contents/ui/ImportAccount.qml:21
+#, kde-format
+msgctxt "@title:window"
+msgid "Import Accounts"
+msgstr "Import Accounts"
+
+#: src/contents/ui/ImportAccount.qml:52
+#, kde-format
+msgid "Import format"
+msgstr "Import format"
+
+#. i18n strings
+#: src/contents/ui/ImportAccount.qml:58
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "andOTP Encrypted JSON"
+msgstr "andOTP Encrypted JSON"
+
+#: src/contents/ui/ImportAccount.qml:59
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "andOTP Plain JSON"
+msgstr "andOTP Plain JSON"
+
+#. i18nc("@item:inlistbox", "Aegis Encrypted JSON"), value: Models.ValidatedImportInput.AegisEncryptedJSON});
+#: src/contents/ui/ImportAccount.qml:61
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "Aegis Plain JSON"
+msgstr "Aegis Plain JSON"
+
+#: src/contents/ui/ImportAccount.qml:62
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "FreeOTP URIs"
+msgstr "FreeOTP URIs"
+
+#: src/contents/ui/ImportAccount.qml:78
+#, kde-format
+msgctxt "@label:chooser"
+msgid "Backup file:"
+msgstr "Backup file:"
+
+#: src/contents/ui/ImportAccount.qml:81
+#, kde-format
+msgctxt "@info:placeholder"
+msgid "No file selected"
+msgstr "No file selected"
+
+#: src/contents/ui/ImportAccount.qml:85
+#, kde-format
+msgctxt "@title:window"
+msgid "Select file"
+msgstr "Select file"
+
+#: src/contents/ui/ImportAccount.qml:99
+#, kde-format
+msgctxt "@info:placeholder"
+msgid "Decryption password"
+msgstr "Decryption password"
+
+#: src/contents/ui/ImportAccount.qml:101 src/contents/ui/UnlockAccounts.qml:49
+#, kde-format
+msgctxt "@label:textbox"
+msgid "Password:"
+msgstr "Password:"
+
+#: src/contents/ui/ImportAccount.qml:112
+#, kde-format
+msgctxt "@action:button"
+msgid "Import"
+msgstr "Import"
+
+#: src/contents/ui/KeysmithGlobalDrawer.qml:12
+#: src/contents/ui/KeysmithGlobalDrawer.qml:15
+#, kde-format
+msgid "About Keysmith"
+msgstr "About Keysmith"
+
+#: src/contents/ui/QRScanPage.qml:21
+#, kde-format
+msgctxt "@title"
+msgid "Scan a QR code"
+msgstr ""
+
+#: src/contents/ui/QRScanPage.qml:31
+#, fuzzy, kde-format
+#| msgctxt "@title:window"
+#| msgid "Select file"
+msgctxt "@action:intoolbar"
+msgid "Select Camera"
+msgstr "Select file"
+
+#: src/contents/ui/QRScanPage.qml:42
+#, fuzzy, kde-format
+#| msgctxt "@title:window"
+#| msgid "Select file"
+msgctxt "@title:dialog"
+msgid "Select Camera"
+msgstr "Select file"
+
+#: src/contents/ui/QRScanPage.qml:61
+#, kde-format
+msgctxt "@action:button"
+msgid "Close"
+msgstr ""
+
 #: src/contents/ui/RenameAccount.qml:17
 #, kde-format
 msgctxt "@title:window"
@@ -352,13 +472,13 @@ msgstr "Cancel"
 msgid "Add"
 msgstr "Add"
 
-#: src/contents/ui/SetupPassword.qml:22 src/contents/ui/UnlockAccounts.qml:22
+#: src/contents/ui/SetupPassword.qml:21 src/contents/ui/UnlockAccounts.qml:21
 #, kde-format
 msgctxt "@title:window"
 msgid "Password"
 msgstr "Password"
 
-#: src/contents/ui/SetupPassword.qml:28
+#: src/contents/ui/SetupPassword.qml:27
 #, kde-format
 msgid "Failed to set up your password"
 msgstr "Failed to set up your password"
@@ -368,19 +488,19 @@ msgstr "Failed to set up your password"
 msgid "Choose a password to protect your accounts"
 msgstr "Choose a password to protect your accounts"
 
-#: src/contents/ui/SetupPassword.qml:49
+#: src/contents/ui/SetupPassword.qml:48
 #, kde-format
 msgctxt "@label:textbox"
 msgid "New Password:"
 msgstr "New Password:"
 
-#: src/contents/ui/SetupPassword.qml:60
+#: src/contents/ui/SetupPassword.qml:61
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Verify password:"
 msgstr "Verify password:"
 
-#: src/contents/ui/SetupPassword.qml:68
+#: src/contents/ui/SetupPassword.qml:72
 #, kde-format
 msgctxt "@action:button"
 msgid "Apply"
@@ -428,7 +548,7 @@ msgctxt "@option:radio"
 msgid "SHA-512"
 msgstr "SHA-512"
 
-#: src/contents/ui/UnlockAccounts.qml:26
+#: src/contents/ui/UnlockAccounts.qml:25
 #, kde-format
 msgid "Failed to unlock your accounts"
 msgstr "Failed to unlock your accounts"
@@ -438,24 +558,33 @@ msgstr "Failed to unlock your accounts"
 msgid "Please provide the password to unlock your accounts"
 msgstr "Please provide the password to unlock your accounts"
 
-#: src/contents/ui/UnlockAccounts.qml:50
-#, kde-format
-msgctxt "@label:textbox"
-msgid "Password:"
-msgstr "Password:"
-
-#: src/contents/ui/UnlockAccounts.qml:59
+#: src/contents/ui/UnlockAccounts.qml:61
 #, kde-format
 msgctxt "@action:button"
 msgid "Unlock"
 msgstr "Unlock"
 
-#: src/main.cpp:67
+#: src/main.cpp:70
 #, kde-format
 msgctxt "@title"
 msgid "Keysmith"
 msgstr "Keysmith"
 
+#: src/main.cpp:73
+#, kde-format
+msgid "generate two-factor authentication (2FA) tokens"
+msgstr "generate two-factor authentication (2FA) tokens"
+
+#: src/main.cpp:76
+#, kde-format
+msgid "Keysmith"
+msgstr "Keysmith"
+
+#: src/main.cpp:80
+#, kde-format
+msgid "© 2019 KDE Community"
+msgstr "© 2019 KDE Community"
+
 #~ msgctxt "Button cancelling account removal"
 #~ msgid "Cancel"
 #~ msgstr "Cancel"
diff -pruN 24.08.1-1/po/eo/keysmith.po 25.03.90-1/po/eo/keysmith.po
--- 24.08.1-1/po/eo/keysmith.po	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/po/eo/keysmith.po	2025-03-27 10:13:04.000000000 +0000
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: keysmith\n"
 "Report-Msgid-Bugs-To: https://bugs.kde.org\n"
-"POT-Creation-Date: 2024-05-03 00:40+0000\n"
-"PO-Revision-Date: 2024-01-13 09:04+0100\n"
+"POT-Creation-Date: 2025-02-09 00:43+0000\n"
+"PO-Revision-Date: 2025-02-12 07:01+0100\n"
 "Last-Translator: Oliver Kellogg <olivermkellogg@gmail.com>\n"
 "Language-Team: Esperanto <kde-i18n-eo@kde.org>\n"
 "Language: eo\n"
@@ -26,13 +26,13 @@ msgid ""
 msgstr ""
 "Laŭvola konto por aldoni, formatita kiel otpauth:// URI (ekz. de QR-kodo)"
 
-#: src/app/flows_p.cpp:108 src/app/flows_p.cpp:248
+#: src/app/flows_p.cpp:111 src/app/flows_p.cpp:285
 #, kde-format
 msgctxt "@title:window"
 msgid "Invalid account"
 msgstr "Nevalida konto"
 
-#: src/app/flows_p.cpp:109
+#: src/app/flows_p.cpp:112
 #, kde-format
 msgctxt "@info:label"
 msgid ""
@@ -42,7 +42,7 @@ msgstr ""
 "La konto, kiun vi provas aldoni, estas malvalida. Vi povas aŭ forlasi la "
 "apon aŭ daŭrigi sen aldoni la konton."
 
-#: src/app/flows_p.cpp:249
+#: src/app/flows_p.cpp:286
 #, kde-format
 msgctxt "@info:label"
 msgid ""
@@ -146,13 +146,13 @@ msgctxt "Notification shown in a passive
 msgid "Token copied to clipboard!"
 msgstr "Ĵetono kopiita al tondujo!"
 
-#: src/contents/ui/AccountNameForm.qml:64
+#: src/contents/ui/AccountNameForm.qml:81
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Account name:"
 msgstr "Kontonomo:"
 
-#: src/contents/ui/AccountNameForm.qml:83
+#: src/contents/ui/AccountNameForm.qml:100
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Account issuer:"
@@ -176,12 +176,12 @@ msgctxt "error message shown when loadin
 msgid "Some accounts failed to load."
 msgstr "Kelkaj kontoj malsukcesis ŝargiĝi."
 
-#: src/contents/ui/AccountsOverview.qml:101
+#: src/contents/ui/AccountsOverview.qml:91
 #, kde-format
 msgid "No accounts added"
 msgstr "Neniuj kontoj aldonitaj"
 
-#: src/contents/ui/AccountsOverview.qml:106
+#: src/contents/ui/AccountsOverview.qml:96
 #, kde-format
 msgctxt ""
 "@action:button add new account, shown instead of overview list when no "
@@ -189,90 +189,103 @@ msgctxt ""
 msgid "Add Account"
 msgstr "Aldoni Konton"
 
-#: src/contents/ui/AccountsOverview.qml:172
+#: src/contents/ui/AccountsOverview.qml:163
 #, kde-format
 msgctxt "@action:button add new account, shown in toolbar"
 msgid "Add"
 msgstr "Aldoni"
 
+#: src/contents/ui/AccountsOverview.qml:176
+#, kde-format
+msgctxt "@action:button import accounts, shown in toolbar"
+msgid "Import"
+msgstr "Enporti"
+
+#: src/contents/ui/AccountsOverview.qml:189
+#, kde-format
+msgctxt ""
+"@action:button import an account by scanning a QR code, shown in toolbar"
+msgid "Scan QR Code"
+msgstr "Skani QR-kodon"
+
 #: src/contents/ui/AddAccount.qml:22
 #, kde-format
 msgctxt "@title:window"
 msgid "Add new account"
 msgstr "Aldoni novan konton"
 
-#: src/contents/ui/AddAccount.qml:45
+#: src/contents/ui/AddAccount.qml:50
 #, kde-format
 msgctxt "@action:button cancel and dismiss the add account form"
 msgid "Cancel"
 msgstr "Nuligi"
 
-#: src/contents/ui/AddAccount.qml:52
+#: src/contents/ui/AddAccount.qml:57
 #, kde-format
 msgctxt "@action:button Dismiss the error page and quit Keysmith"
 msgid "Quit"
 msgstr "Forlasi"
 
-#: src/contents/ui/AddAccount.qml:61
+#: src/contents/ui/AddAccount.qml:66
 #, kde-format
 msgctxt "@action:button"
 msgid "Add"
 msgstr "Aldoni"
 
-#: src/contents/ui/AddAccount.qml:81
+#: src/contents/ui/AddAccount.qml:86
 #, kde-format
 msgctxt "@label:chooser"
 msgid "Account type:"
 msgstr "Tipo de konto:"
 
-#: src/contents/ui/AddAccount.qml:90
+#: src/contents/ui/AddAccount.qml:95
 #, kde-format
 msgctxt "@option:radio"
 msgid "Time-based OTP"
 msgstr "Tempbazita OTP"
 
-#: src/contents/ui/AddAccount.qml:101
+#: src/contents/ui/AddAccount.qml:106
 #, kde-format
 msgctxt "@option:radio"
 msgid "Hash-based OTP"
 msgstr "Hash-bazita OTP"
 
-#: src/contents/ui/AddAccount.qml:113
+#: src/contents/ui/AddAccount.qml:118
 #, kde-format
 msgid "Token secret"
 msgstr "Tokensekreto"
 
-#: src/contents/ui/AddAccount.qml:116
+#: src/contents/ui/AddAccount.qml:120
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Secret key:"
 msgstr "Sekreta ŝlosilo:"
 
-#: src/contents/ui/AddAccount.qml:132
+#: src/contents/ui/AddAccount.qml:139
 #, kde-format
 msgctxt "Button to reveal form for configuring additional token details"
 msgid "Details"
 msgstr "Detaloj"
 
-#: src/contents/ui/AddAccount.qml:140
+#: src/contents/ui/AddAccount.qml:147
 #, kde-format
 msgctxt "@title:group"
 msgid "HOTP Details:"
 msgstr "HOTP-Detaloj:"
 
-#: src/contents/ui/AddAccount.qml:153
+#: src/contents/ui/AddAccount.qml:160
 #, kde-format
 msgctxt "@label"
 msgid "TOTP Details:"
 msgstr "TOTP-detaloj:"
 
-#: src/contents/ui/ErrorPage.qml:33
+#: src/contents/ui/ErrorPage.qml:34
 #, kde-format
 msgctxt "@action:button Button to dismiss the error page"
 msgid "Continue"
 msgstr "Daŭrigi"
 
-#: src/contents/ui/ErrorPage.qml:40
+#: src/contents/ui/ErrorPage.qml:41
 #, kde-format
 msgctxt "@action:button Dismiss the error page and quit Keysmtih"
 msgid "Quit"
@@ -323,6 +336,109 @@ msgctxt "@label:spinbox"
 msgid "Truncation offset:"
 msgstr "Detranĉa deŝovo:"
 
+#: src/contents/ui/ImportAccount.qml:21
+#, kde-format
+msgctxt "@title:window"
+msgid "Import Accounts"
+msgstr "Enporti Kontojn"
+
+#: src/contents/ui/ImportAccount.qml:52
+#, kde-format
+msgid "Import format"
+msgstr "Enporta formato"
+
+#. i18n strings
+#: src/contents/ui/ImportAccount.qml:58
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "andOTP Encrypted JSON"
+msgstr "andOTP Ĉifrita JSON"
+
+#: src/contents/ui/ImportAccount.qml:59
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "andOTP Plain JSON"
+msgstr "andOTP Plata JSON"
+
+#. i18nc("@item:inlistbox", "Aegis Encrypted JSON"), value: Models.ValidatedImportInput.AegisEncryptedJSON});
+#: src/contents/ui/ImportAccount.qml:61
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "Aegis Plain JSON"
+msgstr "Aegis Plata JSON"
+
+#: src/contents/ui/ImportAccount.qml:62
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "FreeOTP URIs"
+msgstr "URI-oj de FreeOTP"
+
+#: src/contents/ui/ImportAccount.qml:78
+#, kde-format
+msgctxt "@label:chooser"
+msgid "Backup file:"
+msgstr "Savkopia dosiero:"
+
+#: src/contents/ui/ImportAccount.qml:81
+#, kde-format
+msgctxt "@info:placeholder"
+msgid "No file selected"
+msgstr "Neniu dosiero elektita"
+
+#: src/contents/ui/ImportAccount.qml:85
+#, kde-format
+msgctxt "@title:window"
+msgid "Select file"
+msgstr "Elekti dosieron"
+
+#: src/contents/ui/ImportAccount.qml:99
+#, kde-format
+msgctxt "@info:placeholder"
+msgid "Decryption password"
+msgstr "Malĉifrada pasvorto"
+
+#: src/contents/ui/ImportAccount.qml:101 src/contents/ui/UnlockAccounts.qml:49
+#, kde-format
+msgctxt "@label:textbox"
+msgid "Password:"
+msgstr "Pasvorto:"
+
+#: src/contents/ui/ImportAccount.qml:112
+#, kde-format
+msgctxt "@action:button"
+msgid "Import"
+msgstr "Enporti"
+
+#: src/contents/ui/KeysmithGlobalDrawer.qml:12
+#: src/contents/ui/KeysmithGlobalDrawer.qml:15
+#, kde-format
+msgid "About Keysmith"
+msgstr "Pri Keysmith"
+
+#: src/contents/ui/QRScanPage.qml:21
+#, kde-format
+msgctxt "@title"
+msgid "Scan a QR code"
+msgstr "Skani QR-kodon"
+
+#: src/contents/ui/QRScanPage.qml:31
+#, kde-format
+msgctxt "@action:intoolbar"
+msgid "Select Camera"
+msgstr "Elektu Fotilon"
+
+#: src/contents/ui/QRScanPage.qml:42
+#, kde-format
+msgctxt "@title:dialog"
+msgid "Select Camera"
+msgstr "Elekti Fotilon"
+
+#: src/contents/ui/QRScanPage.qml:61
+#, kde-format
+msgctxt "@action:button"
+msgid "Close"
+msgstr "Fermi"
+
 #: src/contents/ui/RenameAccount.qml:17
 #, kde-format
 msgctxt "@title:window"
@@ -352,13 +468,13 @@ msgstr "Nuligi"
 msgid "Add"
 msgstr "Aldoni"
 
-#: src/contents/ui/SetupPassword.qml:22 src/contents/ui/UnlockAccounts.qml:22
+#: src/contents/ui/SetupPassword.qml:21 src/contents/ui/UnlockAccounts.qml:21
 #, kde-format
 msgctxt "@title:window"
 msgid "Password"
 msgstr "Pasvorto"
 
-#: src/contents/ui/SetupPassword.qml:28
+#: src/contents/ui/SetupPassword.qml:27
 #, kde-format
 msgid "Failed to set up your password"
 msgstr "Malsukcesis agordi vian pasvorton"
@@ -368,19 +484,19 @@ msgstr "Malsukcesis agordi vian pasvorto
 msgid "Choose a password to protect your accounts"
 msgstr "Elektu pasvorton por protekti viajn kontojn"
 
-#: src/contents/ui/SetupPassword.qml:49
+#: src/contents/ui/SetupPassword.qml:48
 #, kde-format
 msgctxt "@label:textbox"
 msgid "New Password:"
 msgstr "Nova pasvorto:"
 
-#: src/contents/ui/SetupPassword.qml:60
+#: src/contents/ui/SetupPassword.qml:61
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Verify password:"
 msgstr "Kontrolu pasvorton:"
 
-#: src/contents/ui/SetupPassword.qml:68
+#: src/contents/ui/SetupPassword.qml:72
 #, kde-format
 msgctxt "@action:button"
 msgid "Apply"
@@ -428,7 +544,7 @@ msgctxt "@option:radio"
 msgid "SHA-512"
 msgstr "SHA-512"
 
-#: src/contents/ui/UnlockAccounts.qml:26
+#: src/contents/ui/UnlockAccounts.qml:25
 #, kde-format
 msgid "Failed to unlock your accounts"
 msgstr "Malsukcesis malŝlosi viajn kontojn"
@@ -438,24 +554,29 @@ msgstr "Malsukcesis malŝlosi viajn kont
 msgid "Please provide the password to unlock your accounts"
 msgstr "Bonvolu doni la pasvorton por malŝlosi viajn kontojn"
 
-#: src/contents/ui/UnlockAccounts.qml:50
-#, kde-format
-msgctxt "@label:textbox"
-msgid "Password:"
-msgstr "Pasvorto:"
-
-#: src/contents/ui/UnlockAccounts.qml:59
+#: src/contents/ui/UnlockAccounts.qml:61
 #, kde-format
 msgctxt "@action:button"
 msgid "Unlock"
 msgstr "Malŝlosi"
 
-#: src/main.cpp:67
+#: src/main.cpp:70
 #, kde-format
 msgctxt "@title"
 msgid "Keysmith"
 msgstr "Keysmith"
 
-#~ msgctxt "Button cancelling account removal"
-#~ msgid "Cancel"
-#~ msgstr "Nuligi"
+#: src/main.cpp:73
+#, kde-format
+msgid "generate two-factor authentication (2FA) tokens"
+msgstr "generi dufaktorajn aŭtentigajn (2FA) ĵetonojn"
+
+#: src/main.cpp:76
+#, kde-format
+msgid "Keysmith"
+msgstr "Keysmith"
+
+#: src/main.cpp:80
+#, kde-format
+msgid "© 2019 KDE Community"
+msgstr "© 2019 KDE-Komunumo"
diff -pruN 24.08.1-1/po/es/keysmith.po 25.03.90-1/po/es/keysmith.po
--- 24.08.1-1/po/es/keysmith.po	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/po/es/keysmith.po	2025-03-27 10:13:04.000000000 +0000
@@ -1,17 +1,16 @@
 # Spanish translations for keysmith.po package.
-# Copyright (C) 2020 This file is copyright:
+# Copyright (C) 2020-2025 This file is copyright:
 # This file is distributed under the same license as the keysmith package.
 #
-# Sofia Priego <spriego@darksylvania.net>, %Y.
-# Sofía Priego <spriego@darksylvania.net>, %Y.
 # Automatically generated, 2020.
-# SPDX-FileCopyrightText: 2020, 2021, 2023, 2024 Eloy Cuadra <ecuadra@eloihr.net>
+# SPDX-FileCopyrightText: 2020, 2021, 2023, 2024, 2025 Eloy Cuadra <ecuadra@eloihr.net>
+# SPDX-FileCopyrightText: 2024, 2025 Sofía Priego <spriego@darksylvania.net>
 msgid ""
 msgstr ""
 "Project-Id-Version: keysmith\n"
 "Report-Msgid-Bugs-To: https://bugs.kde.org\n"
-"POT-Creation-Date: 2024-05-03 00:40+0000\n"
-"PO-Revision-Date: 2024-01-26 01:52+0100\n"
+"POT-Creation-Date: 2025-02-09 00:43+0000\n"
+"PO-Revision-Date: 2025-03-21 01:32+0100\n"
 "Last-Translator: Sofía Priego <spriego@darksylvania.net>\n"
 "Language-Team: Spanish <kde-l10n-es@kde.org>\n"
 "Language: es\n"
@@ -19,7 +18,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Lokalize 23.08.4\n"
+"X-Generator: Lokalize 24.12.1\n"
 
 #: src/app/cli.cpp:133
 #, kde-format
@@ -30,13 +29,13 @@ msgstr ""
 "Cuenta opcional a añadir, con el formato de URI otpauth:// (por ejemplo, de "
 "un código QR)"
 
-#: src/app/flows_p.cpp:108 src/app/flows_p.cpp:248
+#: src/app/flows_p.cpp:111 src/app/flows_p.cpp:285
 #, kde-format
 msgctxt "@title:window"
 msgid "Invalid account"
 msgstr "Cuenta no válida"
 
-#: src/app/flows_p.cpp:109
+#: src/app/flows_p.cpp:112
 #, kde-format
 msgctxt "@info:label"
 msgid ""
@@ -46,7 +45,7 @@ msgstr ""
 "La cuenta que está intentando añadir no es válida. Puede salir de la "
 "aplicación o continuar sin añadir la cuenta."
 
-#: src/app/flows_p.cpp:249
+#: src/app/flows_p.cpp:286
 #, kde-format
 msgctxt "@info:label"
 msgid ""
@@ -151,13 +150,13 @@ msgctxt "Notification shown in a passive
 msgid "Token copied to clipboard!"
 msgstr "Token copiado en el portapapeles."
 
-#: src/contents/ui/AccountNameForm.qml:64
+#: src/contents/ui/AccountNameForm.qml:81
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Account name:"
 msgstr "Nombre de la cuenta:"
 
-#: src/contents/ui/AccountNameForm.qml:83
+#: src/contents/ui/AccountNameForm.qml:100
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Account issuer:"
@@ -181,12 +180,12 @@ msgctxt "error message shown when loadin
 msgid "Some accounts failed to load."
 msgstr "Ha fallado la carga de algunas cuentas."
 
-#: src/contents/ui/AccountsOverview.qml:101
+#: src/contents/ui/AccountsOverview.qml:91
 #, kde-format
 msgid "No accounts added"
 msgstr "No se han añadido cuentas"
 
-#: src/contents/ui/AccountsOverview.qml:106
+#: src/contents/ui/AccountsOverview.qml:96
 #, kde-format
 msgctxt ""
 "@action:button add new account, shown instead of overview list when no "
@@ -194,90 +193,103 @@ msgctxt ""
 msgid "Add Account"
 msgstr "Añadir cuenta"
 
-#: src/contents/ui/AccountsOverview.qml:172
+#: src/contents/ui/AccountsOverview.qml:163
 #, kde-format
 msgctxt "@action:button add new account, shown in toolbar"
 msgid "Add"
 msgstr "Añadir"
 
+#: src/contents/ui/AccountsOverview.qml:176
+#, kde-format
+msgctxt "@action:button import accounts, shown in toolbar"
+msgid "Import"
+msgstr "Importar"
+
+#: src/contents/ui/AccountsOverview.qml:189
+#, kde-format
+msgctxt ""
+"@action:button import an account by scanning a QR code, shown in toolbar"
+msgid "Scan QR Code"
+msgstr "Escanear código QR"
+
 #: src/contents/ui/AddAccount.qml:22
 #, kde-format
 msgctxt "@title:window"
 msgid "Add new account"
 msgstr "Añadir nueva cuenta"
 
-#: src/contents/ui/AddAccount.qml:45
+#: src/contents/ui/AddAccount.qml:50
 #, kde-format
 msgctxt "@action:button cancel and dismiss the add account form"
 msgid "Cancel"
 msgstr "Cancelar"
 
-#: src/contents/ui/AddAccount.qml:52
+#: src/contents/ui/AddAccount.qml:57
 #, kde-format
 msgctxt "@action:button Dismiss the error page and quit Keysmith"
 msgid "Quit"
 msgstr "Salir"
 
-#: src/contents/ui/AddAccount.qml:61
+#: src/contents/ui/AddAccount.qml:66
 #, kde-format
 msgctxt "@action:button"
 msgid "Add"
 msgstr "Añadir"
 
-#: src/contents/ui/AddAccount.qml:81
+#: src/contents/ui/AddAccount.qml:86
 #, kde-format
 msgctxt "@label:chooser"
 msgid "Account type:"
 msgstr "Tipo de cuenta:"
 
-#: src/contents/ui/AddAccount.qml:90
+#: src/contents/ui/AddAccount.qml:95
 #, kde-format
 msgctxt "@option:radio"
 msgid "Time-based OTP"
 msgstr "OTP basada en tiempo"
 
-#: src/contents/ui/AddAccount.qml:101
+#: src/contents/ui/AddAccount.qml:106
 #, kde-format
 msgctxt "@option:radio"
 msgid "Hash-based OTP"
 msgstr "OTP basada en resúmenes criptográficos"
 
-#: src/contents/ui/AddAccount.qml:113
+#: src/contents/ui/AddAccount.qml:118
 #, kde-format
 msgid "Token secret"
 msgstr "Secreto del token:"
 
-#: src/contents/ui/AddAccount.qml:116
+#: src/contents/ui/AddAccount.qml:120
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Secret key:"
 msgstr "Clave secreta:"
 
-#: src/contents/ui/AddAccount.qml:132
+#: src/contents/ui/AddAccount.qml:139
 #, kde-format
 msgctxt "Button to reveal form for configuring additional token details"
 msgid "Details"
 msgstr "Detalles"
 
-#: src/contents/ui/AddAccount.qml:140
+#: src/contents/ui/AddAccount.qml:147
 #, kde-format
 msgctxt "@title:group"
 msgid "HOTP Details:"
 msgstr "Detalles de HOTP:"
 
-#: src/contents/ui/AddAccount.qml:153
+#: src/contents/ui/AddAccount.qml:160
 #, kde-format
 msgctxt "@label"
 msgid "TOTP Details:"
 msgstr "Detalles de TOTP:"
 
-#: src/contents/ui/ErrorPage.qml:33
+#: src/contents/ui/ErrorPage.qml:34
 #, kde-format
 msgctxt "@action:button Button to dismiss the error page"
 msgid "Continue"
 msgstr "Continuar"
 
-#: src/contents/ui/ErrorPage.qml:40
+#: src/contents/ui/ErrorPage.qml:41
 #, kde-format
 msgctxt "@action:button Dismiss the error page and quit Keysmtih"
 msgid "Quit"
@@ -328,6 +340,109 @@ msgctxt "@label:spinbox"
 msgid "Truncation offset:"
 msgstr "Desplazamiento de truncamiento:"
 
+#: src/contents/ui/ImportAccount.qml:21
+#, kde-format
+msgctxt "@title:window"
+msgid "Import Accounts"
+msgstr "Importar cuentas"
+
+#: src/contents/ui/ImportAccount.qml:52
+#, kde-format
+msgid "Import format"
+msgstr "Importar formato"
+
+#. i18n strings
+#: src/contents/ui/ImportAccount.qml:58
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "andOTP Encrypted JSON"
+msgstr "JSON cifrado de andOTP"
+
+#: src/contents/ui/ImportAccount.qml:59
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "andOTP Plain JSON"
+msgstr "JSON sin cifrar de andOTP"
+
+#. i18nc("@item:inlistbox", "Aegis Encrypted JSON"), value: Models.ValidatedImportInput.AegisEncryptedJSON});
+#: src/contents/ui/ImportAccount.qml:61
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "Aegis Plain JSON"
+msgstr "JSON sin cifrar de Aegis"
+
+#: src/contents/ui/ImportAccount.qml:62
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "FreeOTP URIs"
+msgstr "URI de FreeOTP"
+
+#: src/contents/ui/ImportAccount.qml:78
+#, kde-format
+msgctxt "@label:chooser"
+msgid "Backup file:"
+msgstr "Archivo de copia de seguridad:"
+
+#: src/contents/ui/ImportAccount.qml:81
+#, kde-format
+msgctxt "@info:placeholder"
+msgid "No file selected"
+msgstr "No se ha seleccionado ningún archivo"
+
+#: src/contents/ui/ImportAccount.qml:85
+#, kde-format
+msgctxt "@title:window"
+msgid "Select file"
+msgstr "Seleccionar archivo"
+
+#: src/contents/ui/ImportAccount.qml:99
+#, kde-format
+msgctxt "@info:placeholder"
+msgid "Decryption password"
+msgstr "Contraseña para descifrar"
+
+#: src/contents/ui/ImportAccount.qml:101 src/contents/ui/UnlockAccounts.qml:49
+#, kde-format
+msgctxt "@label:textbox"
+msgid "Password:"
+msgstr "Contraseña:"
+
+#: src/contents/ui/ImportAccount.qml:112
+#, kde-format
+msgctxt "@action:button"
+msgid "Import"
+msgstr "Importar"
+
+#: src/contents/ui/KeysmithGlobalDrawer.qml:12
+#: src/contents/ui/KeysmithGlobalDrawer.qml:15
+#, kde-format
+msgid "About Keysmith"
+msgstr "Acerca de Keysmith"
+
+#: src/contents/ui/QRScanPage.qml:21
+#, kde-format
+msgctxt "@title"
+msgid "Scan a QR code"
+msgstr "Escanear un código QR"
+
+#: src/contents/ui/QRScanPage.qml:31
+#, kde-format
+msgctxt "@action:intoolbar"
+msgid "Select Camera"
+msgstr "Seleccionar cámara"
+
+#: src/contents/ui/QRScanPage.qml:42
+#, kde-format
+msgctxt "@title:dialog"
+msgid "Select Camera"
+msgstr "Seleccionar cámara"
+
+#: src/contents/ui/QRScanPage.qml:61
+#, kde-format
+msgctxt "@action:button"
+msgid "Close"
+msgstr "Cerrar"
+
 #: src/contents/ui/RenameAccount.qml:17
 #, kde-format
 msgctxt "@title:window"
@@ -357,13 +472,13 @@ msgstr "Cancelar"
 msgid "Add"
 msgstr "Añadir"
 
-#: src/contents/ui/SetupPassword.qml:22 src/contents/ui/UnlockAccounts.qml:22
+#: src/contents/ui/SetupPassword.qml:21 src/contents/ui/UnlockAccounts.qml:21
 #, kde-format
 msgctxt "@title:window"
 msgid "Password"
 msgstr "Contraseña"
 
-#: src/contents/ui/SetupPassword.qml:28
+#: src/contents/ui/SetupPassword.qml:27
 #, kde-format
 msgid "Failed to set up your password"
 msgstr "No se ha podido definir la contraseña"
@@ -373,19 +488,19 @@ msgstr "No se ha podido definir la contr
 msgid "Choose a password to protect your accounts"
 msgstr "Escoja una contraseña para proteger sus cuentas"
 
-#: src/contents/ui/SetupPassword.qml:49
+#: src/contents/ui/SetupPassword.qml:48
 #, kde-format
 msgctxt "@label:textbox"
 msgid "New Password:"
 msgstr "Nueva contraseña:"
 
-#: src/contents/ui/SetupPassword.qml:60
+#: src/contents/ui/SetupPassword.qml:61
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Verify password:"
 msgstr "Verificar la contraseña:"
 
-#: src/contents/ui/SetupPassword.qml:68
+#: src/contents/ui/SetupPassword.qml:72
 #, kde-format
 msgctxt "@action:button"
 msgid "Apply"
@@ -433,7 +548,7 @@ msgctxt "@option:radio"
 msgid "SHA-512"
 msgstr "SHA-512"
 
-#: src/contents/ui/UnlockAccounts.qml:26
+#: src/contents/ui/UnlockAccounts.qml:25
 #, kde-format
 msgid "Failed to unlock your accounts"
 msgstr "No ha sido posible desbloquear las cuentas"
@@ -443,61 +558,29 @@ msgstr "No ha sido posible desbloquear l
 msgid "Please provide the password to unlock your accounts"
 msgstr "Introduzca la contraseña para desbloquear sus cuentas"
 
-#: src/contents/ui/UnlockAccounts.qml:50
-#, kde-format
-msgctxt "@label:textbox"
-msgid "Password:"
-msgstr "Contraseña:"
-
-#: src/contents/ui/UnlockAccounts.qml:59
+#: src/contents/ui/UnlockAccounts.qml:61
 #, kde-format
 msgctxt "@action:button"
 msgid "Unlock"
 msgstr "Desbloquear"
 
-#: src/main.cpp:67
+#: src/main.cpp:70
 #, kde-format
 msgctxt "@title"
 msgid "Keysmith"
 msgstr "Keysmith"
 
-#~ msgctxt "Button cancelling account removal"
-#~ msgid "Cancel"
-#~ msgstr "Cancelar"
-
-#~ msgctxt "@label:check"
-#~ msgid "Checksum:"
-#~ msgstr "Suma de verificación:"
-
-#~ msgctxt "@label:check"
-#~ msgid "Truncation:"
-#~ msgstr "Truncamiento:"
-
-#~ msgctxt "placeholder text if no account name is available"
-#~ msgid "(untitled)"
-#~ msgstr "(sin título)"
-
-#~ msgid "OTP"
-#~ msgstr "OTP"
-
-#~ msgctxt "%1 is current counter numerical value"
-#~ msgid "Refresh (%1)"
-#~ msgstr "Refrescar (%1)"
-
-#~ msgid "Show"
-#~ msgstr "Mostrar"
-
-#~ msgid "Hide"
-#~ msgstr "Ocultar"
-
-#~ msgctxt "@action:button"
-#~ msgid "Generate Token"
-#~ msgstr "Generar token"
-
-#~ msgid "Edit"
-#~ msgstr "Editar"
-
-#~ msgctxt "Text shown when no accounts are added"
-#~ msgid "No account set up. Use the Add button to add accounts."
-#~ msgstr ""
-#~ "Ninguna cuenta configurada. Use el botón «Añadir» para añadir cuentas."
+#: src/main.cpp:73
+#, kde-format
+msgid "generate two-factor authentication (2FA) tokens"
+msgstr "generar tókenes de autenticación de dos factores (2FA)"
+
+#: src/main.cpp:76
+#, kde-format
+msgid "Keysmith"
+msgstr "Keysmith"
+
+#: src/main.cpp:80
+#, kde-format
+msgid "© 2019 KDE Community"
+msgstr "© 2019 La comunidad KDE"
diff -pruN 24.08.1-1/po/et/keysmith.po 25.03.90-1/po/et/keysmith.po
--- 24.08.1-1/po/et/keysmith.po	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/po/et/keysmith.po	2025-03-27 10:13:04.000000000 +0000
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: keysmith\n"
 "Report-Msgid-Bugs-To: https://bugs.kde.org\n"
-"POT-Creation-Date: 2024-05-03 00:40+0000\n"
+"POT-Creation-Date: 2025-02-09 00:43+0000\n"
 "PO-Revision-Date: 2020-10-07 11:05+0200\n"
 "Last-Translator: Mihkel Tõnnov <mihhkel@gmail.com>\n"
 "Language-Team: Estonian <>\n"
@@ -25,7 +25,7 @@ msgid ""
 "Optional account to add, formatted as otpauth:// URI (e.g. from a QR code)"
 msgstr ""
 
-#: src/app/flows_p.cpp:108 src/app/flows_p.cpp:248
+#: src/app/flows_p.cpp:111 src/app/flows_p.cpp:285
 #, fuzzy, kde-format
 #| msgctxt "Button confirming account removal"
 #| msgid "Delete account"
@@ -33,7 +33,7 @@ msgctxt "@title:window"
 msgid "Invalid account"
 msgstr "Kustuta konto"
 
-#: src/app/flows_p.cpp:109
+#: src/app/flows_p.cpp:112
 #, kde-format
 msgctxt "@info:label"
 msgid ""
@@ -41,7 +41,7 @@ msgid ""
 "or continue without adding the account."
 msgstr ""
 
-#: src/app/flows_p.cpp:249
+#: src/app/flows_p.cpp:286
 #, kde-format
 msgctxt "@info:label"
 msgid ""
@@ -158,7 +158,7 @@ msgctxt "Notification shown in a passive
 msgid "Token copied to clipboard!"
 msgstr ""
 
-#: src/contents/ui/AccountNameForm.qml:64
+#: src/contents/ui/AccountNameForm.qml:81
 #, fuzzy, kde-format
 #| msgctxt "@label:textbox"
 #| msgid "Account Name:"
@@ -166,7 +166,7 @@ msgctxt "@label:textbox"
 msgid "Account name:"
 msgstr "Konto nimi:"
 
-#: src/contents/ui/AccountNameForm.qml:83
+#: src/contents/ui/AccountNameForm.qml:100
 #, fuzzy, kde-format
 #| msgctxt "@label:textbox"
 #| msgid "Account Issuer:"
@@ -192,14 +192,14 @@ msgctxt "error message shown when loadin
 msgid "Some accounts failed to load."
 msgstr "Mõne konto laadimine nurjus."
 
-#: src/contents/ui/AccountsOverview.qml:101
+#: src/contents/ui/AccountsOverview.qml:91
 #, fuzzy, kde-format
 #| msgctxt "error message shown when loading accounts from storage failed"
 #| msgid "Some accounts failed to load."
 msgid "No accounts added"
 msgstr "Mõne konto laadimine nurjus."
 
-#: src/contents/ui/AccountsOverview.qml:106
+#: src/contents/ui/AccountsOverview.qml:96
 #, fuzzy, kde-format
 #| msgctxt "@title:window"
 #| msgid "Add new account"
@@ -209,20 +209,33 @@ msgctxt ""
 msgid "Add Account"
 msgstr "Uue konto lisamine"
 
-#: src/contents/ui/AccountsOverview.qml:172
+#: src/contents/ui/AccountsOverview.qml:163
 #, fuzzy, kde-format
 #| msgid "Add"
 msgctxt "@action:button add new account, shown in toolbar"
 msgid "Add"
 msgstr "Lisa"
 
+#: src/contents/ui/AccountsOverview.qml:176
+#, kde-format
+msgctxt "@action:button import accounts, shown in toolbar"
+msgid "Import"
+msgstr ""
+
+#: src/contents/ui/AccountsOverview.qml:189
+#, kde-format
+msgctxt ""
+"@action:button import an account by scanning a QR code, shown in toolbar"
+msgid "Scan QR Code"
+msgstr ""
+
 #: src/contents/ui/AddAccount.qml:22
 #, kde-format
 msgctxt "@title:window"
 msgid "Add new account"
 msgstr "Uue konto lisamine"
 
-#: src/contents/ui/AddAccount.qml:45
+#: src/contents/ui/AddAccount.qml:50
 #, fuzzy, kde-format
 #| msgctxt "Button cancelling account removal"
 #| msgid "Cancel"
@@ -230,20 +243,20 @@ msgctxt "@action:button cancel and dismi
 msgid "Cancel"
 msgstr "Loobu"
 
-#: src/contents/ui/AddAccount.qml:52
+#: src/contents/ui/AddAccount.qml:57
 #, kde-format
 msgctxt "@action:button Dismiss the error page and quit Keysmith"
 msgid "Quit"
 msgstr ""
 
-#: src/contents/ui/AddAccount.qml:61
+#: src/contents/ui/AddAccount.qml:66
 #, fuzzy, kde-format
 #| msgid "Add"
 msgctxt "@action:button"
 msgid "Add"
 msgstr "Lisa"
 
-#: src/contents/ui/AddAccount.qml:81
+#: src/contents/ui/AddAccount.qml:86
 #, fuzzy, kde-format
 #| msgctxt "@label:chooser"
 #| msgid "Account Type:"
@@ -251,36 +264,36 @@ msgctxt "@label:chooser"
 msgid "Account type:"
 msgstr "Konto tüüp:"
 
-#: src/contents/ui/AddAccount.qml:90
+#: src/contents/ui/AddAccount.qml:95
 #, kde-format
 msgctxt "@option:radio"
 msgid "Time-based OTP"
 msgstr "Ajapõhine OTP"
 
-#: src/contents/ui/AddAccount.qml:101
+#: src/contents/ui/AddAccount.qml:106
 #, kde-format
 msgctxt "@option:radio"
 msgid "Hash-based OTP"
 msgstr "Räsipõhine OTP"
 
-#: src/contents/ui/AddAccount.qml:113
+#: src/contents/ui/AddAccount.qml:118
 #, kde-format
 msgid "Token secret"
 msgstr "Pääsmiku saladus"
 
-#: src/contents/ui/AddAccount.qml:116
+#: src/contents/ui/AddAccount.qml:120
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Secret key:"
 msgstr "Salavõti:"
 
-#: src/contents/ui/AddAccount.qml:132
+#: src/contents/ui/AddAccount.qml:139
 #, kde-format
 msgctxt "Button to reveal form for configuring additional token details"
 msgid "Details"
 msgstr "Üksikasjad"
 
-#: src/contents/ui/AddAccount.qml:140
+#: src/contents/ui/AddAccount.qml:147
 #, fuzzy, kde-format
 #| msgctxt "Button to reveal form for configuring additional token details"
 #| msgid "Details"
@@ -288,7 +301,7 @@ msgctxt "@title:group"
 msgid "HOTP Details:"
 msgstr "Üksikasjad"
 
-#: src/contents/ui/AddAccount.qml:153
+#: src/contents/ui/AddAccount.qml:160
 #, fuzzy, kde-format
 #| msgctxt "Button to reveal form for configuring additional token details"
 #| msgid "Details"
@@ -296,13 +309,13 @@ msgctxt "@label"
 msgid "TOTP Details:"
 msgstr "Üksikasjad"
 
-#: src/contents/ui/ErrorPage.qml:33
+#: src/contents/ui/ErrorPage.qml:34
 #, kde-format
 msgctxt "@action:button Button to dismiss the error page"
 msgid "Continue"
 msgstr ""
 
-#: src/contents/ui/ErrorPage.qml:40
+#: src/contents/ui/ErrorPage.qml:41
 #, kde-format
 msgctxt "@action:button Dismiss the error page and quit Keysmtih"
 msgid "Quit"
@@ -359,6 +372,115 @@ msgctxt "@label:spinbox"
 msgid "Truncation offset:"
 msgstr "Kärpimise nihe:"
 
+#: src/contents/ui/ImportAccount.qml:21
+#, fuzzy, kde-format
+#| msgctxt "@title:window"
+#| msgid "Accounts"
+msgctxt "@title:window"
+msgid "Import Accounts"
+msgstr "Kontod"
+
+#: src/contents/ui/ImportAccount.qml:52
+#, kde-format
+msgid "Import format"
+msgstr ""
+
+#. i18n strings
+#: src/contents/ui/ImportAccount.qml:58
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "andOTP Encrypted JSON"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:59
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "andOTP Plain JSON"
+msgstr ""
+
+#. i18nc("@item:inlistbox", "Aegis Encrypted JSON"), value: Models.ValidatedImportInput.AegisEncryptedJSON});
+#: src/contents/ui/ImportAccount.qml:61
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "Aegis Plain JSON"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:62
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "FreeOTP URIs"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:78
+#, kde-format
+msgctxt "@label:chooser"
+msgid "Backup file:"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:81
+#, kde-format
+msgctxt "@info:placeholder"
+msgid "No file selected"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:85
+#, kde-format
+msgctxt "@title:window"
+msgid "Select file"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:99
+#, fuzzy, kde-format
+#| msgctxt "@label:textbox"
+#| msgid "Verify password:"
+msgctxt "@info:placeholder"
+msgid "Decryption password"
+msgstr "Parooli kontroll:"
+
+#: src/contents/ui/ImportAccount.qml:101 src/contents/ui/UnlockAccounts.qml:49
+#, kde-format
+msgctxt "@label:textbox"
+msgid "Password:"
+msgstr "Parool:"
+
+#: src/contents/ui/ImportAccount.qml:112
+#, kde-format
+msgctxt "@action:button"
+msgid "Import"
+msgstr ""
+
+#: src/contents/ui/KeysmithGlobalDrawer.qml:12
+#: src/contents/ui/KeysmithGlobalDrawer.qml:15
+#, fuzzy, kde-format
+#| msgctxt "@title"
+#| msgid "Keysmith"
+msgid "About Keysmith"
+msgstr "Keysmith"
+
+#: src/contents/ui/QRScanPage.qml:21
+#, kde-format
+msgctxt "@title"
+msgid "Scan a QR code"
+msgstr ""
+
+#: src/contents/ui/QRScanPage.qml:31
+#, kde-format
+msgctxt "@action:intoolbar"
+msgid "Select Camera"
+msgstr ""
+
+#: src/contents/ui/QRScanPage.qml:42
+#, kde-format
+msgctxt "@title:dialog"
+msgid "Select Camera"
+msgstr ""
+
+#: src/contents/ui/QRScanPage.qml:61
+#, kde-format
+msgctxt "@action:button"
+msgid "Close"
+msgstr ""
+
 #: src/contents/ui/RenameAccount.qml:17
 #, fuzzy, kde-format
 #| msgctxt "error message shown when loading accounts from storage failed"
@@ -390,13 +512,13 @@ msgstr "Loobu"
 msgid "Add"
 msgstr "Lisa"
 
-#: src/contents/ui/SetupPassword.qml:22 src/contents/ui/UnlockAccounts.qml:22
+#: src/contents/ui/SetupPassword.qml:21 src/contents/ui/UnlockAccounts.qml:21
 #, kde-format
 msgctxt "@title:window"
 msgid "Password"
 msgstr "Parool"
 
-#: src/contents/ui/SetupPassword.qml:28
+#: src/contents/ui/SetupPassword.qml:27
 #, kde-format
 msgid "Failed to set up your password"
 msgstr "Parooli määramine nurjus"
@@ -407,7 +529,7 @@ msgstr "Parooli määramine nurjus"
 msgid "Choose a password to protect your accounts"
 msgstr "Alustamiseks vali parool oma kontode kaitseks"
 
-#: src/contents/ui/SetupPassword.qml:49
+#: src/contents/ui/SetupPassword.qml:48
 #, fuzzy, kde-format
 #| msgctxt "@label:textbox"
 #| msgid "New password:"
@@ -415,13 +537,13 @@ msgctxt "@label:textbox"
 msgid "New Password:"
 msgstr "Uus parool:"
 
-#: src/contents/ui/SetupPassword.qml:60
+#: src/contents/ui/SetupPassword.qml:61
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Verify password:"
 msgstr "Parooli kontroll:"
 
-#: src/contents/ui/SetupPassword.qml:68
+#: src/contents/ui/SetupPassword.qml:72
 #, fuzzy, kde-format
 #| msgid "Apply"
 msgctxt "@action:button"
@@ -470,7 +592,7 @@ msgctxt "@option:radio"
 msgid "SHA-512"
 msgstr "SHA-512"
 
-#: src/contents/ui/UnlockAccounts.qml:26
+#: src/contents/ui/UnlockAccounts.qml:25
 #, kde-format
 msgid "Failed to unlock your accounts"
 msgstr "Kontode lukustusest vabastamine nurjus"
@@ -480,25 +602,36 @@ msgstr "Kontode lukustusest vabastamine
 msgid "Please provide the password to unlock your accounts"
 msgstr "Palun anna parool oma kontode lukustusest vabastamiseks"
 
-#: src/contents/ui/UnlockAccounts.qml:50
-#, kde-format
-msgctxt "@label:textbox"
-msgid "Password:"
-msgstr "Parool:"
-
-#: src/contents/ui/UnlockAccounts.qml:59
+#: src/contents/ui/UnlockAccounts.qml:61
 #, fuzzy, kde-format
 #| msgid "Unlock"
 msgctxt "@action:button"
 msgid "Unlock"
 msgstr "Eemalda lukustus"
 
-#: src/main.cpp:67
+#: src/main.cpp:70
 #, kde-format
 msgctxt "@title"
 msgid "Keysmith"
 msgstr "Keysmith"
 
+#: src/main.cpp:73
+#, kde-format
+msgid "generate two-factor authentication (2FA) tokens"
+msgstr ""
+
+#: src/main.cpp:76
+#, fuzzy, kde-format
+#| msgctxt "@title"
+#| msgid "Keysmith"
+msgid "Keysmith"
+msgstr "Keysmith"
+
+#: src/main.cpp:80
+#, kde-format
+msgid "© 2019 KDE Community"
+msgstr ""
+
 #~ msgctxt "Button cancelling account removal"
 #~ msgid "Cancel"
 #~ msgstr "Loobu"
diff -pruN 24.08.1-1/po/eu/keysmith.po 25.03.90-1/po/eu/keysmith.po
--- 24.08.1-1/po/eu/keysmith.po	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/po/eu/keysmith.po	2025-03-27 10:13:04.000000000 +0000
@@ -1,16 +1,16 @@
 # Translation for keysmith.po to Euskara/Basque (eu)
-# Copyright (C) 2023-2024 This file is copyright:
+# Copyright (C) 2023-2025 This file is copyright:
 # This file is distributed under the same license as the keysmith package.
-# SPDX-FileCopyrightText: 2023, 2024 KDE euskaratzeko proiektuko arduraduna <xalba@ni.eus>
+# SPDX-FileCopyrightText: 2023, 2024, 2025 KDE euskaratzeko proiektuko arduraduna <xalba@ni.eus>
 #
 # Translators:
-# Iñigo Salvador Azurmendi <xalba@ni.eus>, 2023, 2024.
+# Iñigo Salvador Azurmendi <xalba@ni.eus>, 2023, 2024, 2025.
 msgid ""
 msgstr ""
 "Project-Id-Version: keysmith\n"
 "Report-Msgid-Bugs-To: https://bugs.kde.org\n"
-"POT-Creation-Date: 2024-05-03 00:40+0000\n"
-"PO-Revision-Date: 2024-04-03 14:26+0200\n"
+"POT-Creation-Date: 2025-02-09 00:43+0000\n"
+"PO-Revision-Date: 2025-01-14 06:43+0100\n"
 "Last-Translator: Iñigo Salvador Azurmendi <xalba@ni.eus>\n"
 "Language-Team: Basque <kde-i18n-eu@kde.org>\n"
 "Language: eu\n"
@@ -18,7 +18,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Lokalize 24.02.1\n"
+"X-Generator: Lokalize 24.12.1\n"
 
 #: src/app/cli.cpp:133
 #, kde-format
@@ -29,13 +29,13 @@ msgstr ""
 "Gehitu beharreko aukerako kontua, «otpauth://» URI gisa eratua (adib. QR "
 "kode batetik)"
 
-#: src/app/flows_p.cpp:108 src/app/flows_p.cpp:248
+#: src/app/flows_p.cpp:111 src/app/flows_p.cpp:285
 #, kde-format
 msgctxt "@title:window"
 msgid "Invalid account"
 msgstr "Kontu baliogabea"
 
-#: src/app/flows_p.cpp:109
+#: src/app/flows_p.cpp:112
 #, kde-format
 msgctxt "@info:label"
 msgid ""
@@ -45,7 +45,7 @@ msgstr ""
 "Gehitzen saiatzen ari zaren kontua baliogabea da. Aplikaziotik irten, edo "
 "kontua gehitu gabe jarrai dezakezu."
 
-#: src/app/flows_p.cpp:249
+#: src/app/flows_p.cpp:286
 #, kde-format
 msgctxt "@info:label"
 msgid ""
@@ -150,13 +150,13 @@ msgctxt "Notification shown in a passive
 msgid "Token copied to clipboard!"
 msgstr "Tokena arbelera kopiatu da!"
 
-#: src/contents/ui/AccountNameForm.qml:64
+#: src/contents/ui/AccountNameForm.qml:81
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Account name:"
 msgstr "Kontuaren izena:"
 
-#: src/contents/ui/AccountNameForm.qml:83
+#: src/contents/ui/AccountNameForm.qml:100
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Account issuer:"
@@ -180,12 +180,12 @@ msgctxt "error message shown when loadin
 msgid "Some accounts failed to load."
 msgstr "Kontu batzuk zamatzea huts egin du."
 
-#: src/contents/ui/AccountsOverview.qml:101
+#: src/contents/ui/AccountsOverview.qml:91
 #, kde-format
 msgid "No accounts added"
 msgstr "Ez da konturik gehitu"
 
-#: src/contents/ui/AccountsOverview.qml:106
+#: src/contents/ui/AccountsOverview.qml:96
 #, kde-format
 msgctxt ""
 "@action:button add new account, shown instead of overview list when no "
@@ -193,90 +193,103 @@ msgctxt ""
 msgid "Add Account"
 msgstr "Gehitu kontua"
 
-#: src/contents/ui/AccountsOverview.qml:172
+#: src/contents/ui/AccountsOverview.qml:163
 #, kde-format
 msgctxt "@action:button add new account, shown in toolbar"
 msgid "Add"
 msgstr "Gehitu"
 
+#: src/contents/ui/AccountsOverview.qml:176
+#, kde-format
+msgctxt "@action:button import accounts, shown in toolbar"
+msgid "Import"
+msgstr "Inportatu"
+
+#: src/contents/ui/AccountsOverview.qml:189
+#, kde-format
+msgctxt ""
+"@action:button import an account by scanning a QR code, shown in toolbar"
+msgid "Scan QR Code"
+msgstr "Eskaneatu QR kodea"
+
 #: src/contents/ui/AddAccount.qml:22
 #, kde-format
 msgctxt "@title:window"
 msgid "Add new account"
 msgstr "Gehitu kontu berria"
 
-#: src/contents/ui/AddAccount.qml:45
+#: src/contents/ui/AddAccount.qml:50
 #, kde-format
 msgctxt "@action:button cancel and dismiss the add account form"
 msgid "Cancel"
 msgstr "Utzi"
 
-#: src/contents/ui/AddAccount.qml:52
+#: src/contents/ui/AddAccount.qml:57
 #, kde-format
 msgctxt "@action:button Dismiss the error page and quit Keysmith"
 msgid "Quit"
 msgstr "Irten"
 
-#: src/contents/ui/AddAccount.qml:61
+#: src/contents/ui/AddAccount.qml:66
 #, kde-format
 msgctxt "@action:button"
 msgid "Add"
 msgstr "Gehitu"
 
-#: src/contents/ui/AddAccount.qml:81
+#: src/contents/ui/AddAccount.qml:86
 #, kde-format
 msgctxt "@label:chooser"
 msgid "Account type:"
 msgstr "Kontu mota:"
 
-#: src/contents/ui/AddAccount.qml:90
+#: src/contents/ui/AddAccount.qml:95
 #, kde-format
 msgctxt "@option:radio"
 msgid "Time-based OTP"
 msgstr "Orduan oinarriko OTP"
 
-#: src/contents/ui/AddAccount.qml:101
+#: src/contents/ui/AddAccount.qml:106
 #, kde-format
 msgctxt "@option:radio"
 msgid "Hash-based OTP"
 msgstr "«Hash» oinarriko OTP"
 
-#: src/contents/ui/AddAccount.qml:113
+#: src/contents/ui/AddAccount.qml:118
 #, kde-format
 msgid "Token secret"
 msgstr "Tokenaren sekretua"
 
-#: src/contents/ui/AddAccount.qml:116
+#: src/contents/ui/AddAccount.qml:120
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Secret key:"
 msgstr "Gako sekretua:"
 
-#: src/contents/ui/AddAccount.qml:132
+#: src/contents/ui/AddAccount.qml:139
 #, kde-format
 msgctxt "Button to reveal form for configuring additional token details"
 msgid "Details"
 msgstr "Xehetasunak"
 
-#: src/contents/ui/AddAccount.qml:140
+#: src/contents/ui/AddAccount.qml:147
 #, kde-format
 msgctxt "@title:group"
 msgid "HOTP Details:"
 msgstr "HOTP xehetasunak:"
 
-#: src/contents/ui/AddAccount.qml:153
+#: src/contents/ui/AddAccount.qml:160
 #, kde-format
 msgctxt "@label"
 msgid "TOTP Details:"
 msgstr "TOTP xehetasunak:"
 
-#: src/contents/ui/ErrorPage.qml:33
+#: src/contents/ui/ErrorPage.qml:34
 #, kde-format
 msgctxt "@action:button Button to dismiss the error page"
 msgid "Continue"
 msgstr "Jarraitu"
 
-#: src/contents/ui/ErrorPage.qml:40
+#: src/contents/ui/ErrorPage.qml:41
 #, kde-format
 msgctxt "@action:button Dismiss the error page and quit Keysmtih"
 msgid "Quit"
@@ -327,6 +340,109 @@ msgctxt "@label:spinbox"
 msgid "Truncation offset:"
 msgstr "Trunkatzearen jatorri aldaketa:"
 
+#: src/contents/ui/ImportAccount.qml:21
+#, kde-format
+msgctxt "@title:window"
+msgid "Import Accounts"
+msgstr "Inportatu kontuak"
+
+#: src/contents/ui/ImportAccount.qml:52
+#, kde-format
+msgid "Import format"
+msgstr "Inportatzeko formatua"
+
+#. i18n strings
+#: src/contents/ui/ImportAccount.qml:58
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "andOTP Encrypted JSON"
+msgstr "andOTP JSON zifratua"
+
+#: src/contents/ui/ImportAccount.qml:59
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "andOTP Plain JSON"
+msgstr "andOTP JSON soina"
+
+#. i18nc("@item:inlistbox", "Aegis Encrypted JSON"), value: Models.ValidatedImportInput.AegisEncryptedJSON});
+#: src/contents/ui/ImportAccount.qml:61
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "Aegis Plain JSON"
+msgstr "Aegis JSON soila"
+
+#: src/contents/ui/ImportAccount.qml:62
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "FreeOTP URIs"
+msgstr "FreeOTP URIak"
+
+#: src/contents/ui/ImportAccount.qml:78
+#, kde-format
+msgctxt "@label:chooser"
+msgid "Backup file:"
+msgstr "Babes-kopia fitxategia:"
+
+#: src/contents/ui/ImportAccount.qml:81
+#, kde-format
+msgctxt "@info:placeholder"
+msgid "No file selected"
+msgstr "Ez da fitxategirik hautatu"
+
+#: src/contents/ui/ImportAccount.qml:85
+#, kde-format
+msgctxt "@title:window"
+msgid "Select file"
+msgstr "Hautatu fitxategia"
+
+#: src/contents/ui/ImportAccount.qml:99
+#, kde-format
+msgctxt "@info:placeholder"
+msgid "Decryption password"
+msgstr "Deszifratzeko pasahitza"
+
+#: src/contents/ui/ImportAccount.qml:101 src/contents/ui/UnlockAccounts.qml:49
+#, kde-format
+msgctxt "@label:textbox"
+msgid "Password:"
+msgstr "Pasahitza:"
+
+#: src/contents/ui/ImportAccount.qml:112
+#, kde-format
+msgctxt "@action:button"
+msgid "Import"
+msgstr "Inportatu"
+
+#: src/contents/ui/KeysmithGlobalDrawer.qml:12
+#: src/contents/ui/KeysmithGlobalDrawer.qml:15
+#, kde-format
+msgid "About Keysmith"
+msgstr "Keysmith-eri buru"
+
+#: src/contents/ui/QRScanPage.qml:21
+#, kde-format
+msgctxt "@title"
+msgid "Scan a QR code"
+msgstr "QR kode bat eskaneatu"
+
+#: src/contents/ui/QRScanPage.qml:31
+#, kde-format
+msgctxt "@action:intoolbar"
+msgid "Select Camera"
+msgstr "Hautatu kamera"
+
+#: src/contents/ui/QRScanPage.qml:42
+#, kde-format
+msgctxt "@title:dialog"
+msgid "Select Camera"
+msgstr "Hautatu kamera"
+
+#: src/contents/ui/QRScanPage.qml:61
+#, kde-format
+msgctxt "@action:button"
+msgid "Close"
+msgstr "Itxi"
+
 #: src/contents/ui/RenameAccount.qml:17
 #, kde-format
 msgctxt "@title:window"
@@ -356,13 +472,13 @@ msgstr "Utzi"
 msgid "Add"
 msgstr "Gehitu"
 
-#: src/contents/ui/SetupPassword.qml:22 src/contents/ui/UnlockAccounts.qml:22
+#: src/contents/ui/SetupPassword.qml:21 src/contents/ui/UnlockAccounts.qml:21
 #, kde-format
 msgctxt "@title:window"
 msgid "Password"
 msgstr "Pasahitza"
 
-#: src/contents/ui/SetupPassword.qml:28
+#: src/contents/ui/SetupPassword.qml:27
 #, kde-format
 msgid "Failed to set up your password"
 msgstr "Zure pasahitza ezartzea huts egin du"
@@ -372,19 +488,19 @@ msgstr "Zure pasahitza ezartzea huts egi
 msgid "Choose a password to protect your accounts"
 msgstr "Aukeratu zure kontuak babesteko pasahitz bat"
 
-#: src/contents/ui/SetupPassword.qml:49
+#: src/contents/ui/SetupPassword.qml:48
 #, kde-format
 msgctxt "@label:textbox"
 msgid "New Password:"
 msgstr "Pasahitz berria:"
 
-#: src/contents/ui/SetupPassword.qml:60
+#: src/contents/ui/SetupPassword.qml:61
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Verify password:"
 msgstr "Egiaztatu pasahitza:"
 
-#: src/contents/ui/SetupPassword.qml:68
+#: src/contents/ui/SetupPassword.qml:72
 #, kde-format
 msgctxt "@action:button"
 msgid "Apply"
@@ -432,7 +548,7 @@ msgctxt "@option:radio"
 msgid "SHA-512"
 msgstr "SHA-512"
 
-#: src/contents/ui/UnlockAccounts.qml:26
+#: src/contents/ui/UnlockAccounts.qml:25
 #, kde-format
 msgid "Failed to unlock your accounts"
 msgstr "Zure kontuak giltzaz irekitzea huts egin du"
@@ -442,24 +558,33 @@ msgstr "Zure kontuak giltzaz irekitzea h
 msgid "Please provide the password to unlock your accounts"
 msgstr "Mesedez, eman zure kontuak irekitzeko pasahitza"
 
-#: src/contents/ui/UnlockAccounts.qml:50
-#, kde-format
-msgctxt "@label:textbox"
-msgid "Password:"
-msgstr "Pasahitza:"
-
-#: src/contents/ui/UnlockAccounts.qml:59
+#: src/contents/ui/UnlockAccounts.qml:61
 #, kde-format
 msgctxt "@action:button"
 msgid "Unlock"
 msgstr "Giltzapetik askatu"
 
-#: src/main.cpp:67
+#: src/main.cpp:70
 #, kde-format
 msgctxt "@title"
 msgid "Keysmith"
 msgstr "Keysmith (giltza-arotza)"
 
+#: src/main.cpp:73
+#, kde-format
+msgid "generate two-factor authentication (2FA) tokens"
+msgstr "sortu kautotzeko bi faktoreko (2FA) tokenak"
+
+#: src/main.cpp:76
+#, kde-format
+msgid "Keysmith"
+msgstr "Keysmith"
+
+#: src/main.cpp:80
+#, kde-format
+msgid "© 2019 KDE Community"
+msgstr "© 2019 KDE Komunitatea"
+
 #~ msgctxt "Button cancelling account removal"
 #~ msgid "Cancel"
 #~ msgstr "Utzi"
diff -pruN 24.08.1-1/po/fi/keysmith.po 25.03.90-1/po/fi/keysmith.po
--- 24.08.1-1/po/fi/keysmith.po	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/po/fi/keysmith.po	2025-03-27 10:13:04.000000000 +0000
@@ -1,13 +1,13 @@
-# Copyright (C) YEAR This file is copyright:
+# Copyright (C) 2024 This file is copyright:
 # This file is distributed under the same license as the keysmith package.
-# Tommi Nieminen <translator@legisign.org>, 2020, 2021, 2023, 2024.
+# SPDX-FileCopyrightText: 2020, 2021, 2023, 2024, 2025 Tommi Nieminen <translator@legisign.org>
 #
 msgid ""
 msgstr ""
 "Project-Id-Version: keysmith\n"
 "Report-Msgid-Bugs-To: https://bugs.kde.org\n"
-"POT-Creation-Date: 2024-05-03 00:40+0000\n"
-"PO-Revision-Date: 2024-01-22 16:13+0200\n"
+"POT-Creation-Date: 2025-02-09 00:43+0000\n"
+"PO-Revision-Date: 2025-02-15 19:42+0200\n"
 "Last-Translator: Tommi Nieminen <translator@legisign.org>\n"
 "Language-Team: Finnish <kde-i18n-doc@kde.org>\n"
 "Language: fi\n"
@@ -15,7 +15,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Lokalize 22.12.3\n"
+"X-Generator: Lokalize 23.08.5\n"
 
 #: src/app/cli.cpp:133
 #, kde-format
@@ -25,13 +25,13 @@ msgid ""
 msgstr ""
 "Valinnainen lisättävä tili otpauth://-URIn muodossa (esim. QR-koodista)"
 
-#: src/app/flows_p.cpp:108 src/app/flows_p.cpp:248
+#: src/app/flows_p.cpp:111 src/app/flows_p.cpp:285
 #, kde-format
 msgctxt "@title:window"
 msgid "Invalid account"
 msgstr "Virheellinen tili"
 
-#: src/app/flows_p.cpp:109
+#: src/app/flows_p.cpp:112
 #, kde-format
 msgctxt "@info:label"
 msgid ""
@@ -41,7 +41,7 @@ msgstr ""
 "Tili, jota yrität lisätä, on virheellinen. Voit joko lopettaa sovelluksen "
 "tai jatkaa lisäämättä tiliä."
 
-#: src/app/flows_p.cpp:249
+#: src/app/flows_p.cpp:286
 #, kde-format
 msgctxt "@info:label"
 msgid ""
@@ -143,13 +143,13 @@ msgctxt "Notification shown in a passive
 msgid "Token copied to clipboard!"
 msgstr "Merkki kopioitu leikepöydälle!"
 
-#: src/contents/ui/AccountNameForm.qml:64
+#: src/contents/ui/AccountNameForm.qml:81
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Account name:"
 msgstr "Tilin nimi:"
 
-#: src/contents/ui/AccountNameForm.qml:83
+#: src/contents/ui/AccountNameForm.qml:100
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Account issuer:"
@@ -173,12 +173,12 @@ msgctxt "error message shown when loadin
 msgid "Some accounts failed to load."
 msgstr "Joidenkin tilien lataus epäonnistui."
 
-#: src/contents/ui/AccountsOverview.qml:101
+#: src/contents/ui/AccountsOverview.qml:91
 #, kde-format
 msgid "No accounts added"
 msgstr "Tilejä ei lisätty"
 
-#: src/contents/ui/AccountsOverview.qml:106
+#: src/contents/ui/AccountsOverview.qml:96
 #, kde-format
 msgctxt ""
 "@action:button add new account, shown instead of overview list when no "
@@ -186,90 +186,103 @@ msgctxt ""
 msgid "Add Account"
 msgstr "Lisää tili"
 
-#: src/contents/ui/AccountsOverview.qml:172
+#: src/contents/ui/AccountsOverview.qml:163
 #, kde-format
 msgctxt "@action:button add new account, shown in toolbar"
 msgid "Add"
 msgstr "Lisää"
 
+#: src/contents/ui/AccountsOverview.qml:176
+#, kde-format
+msgctxt "@action:button import accounts, shown in toolbar"
+msgid "Import"
+msgstr "Tuo"
+
+#: src/contents/ui/AccountsOverview.qml:189
+#, kde-format
+msgctxt ""
+"@action:button import an account by scanning a QR code, shown in toolbar"
+msgid "Scan QR Code"
+msgstr "Lue QR-koodi"
+
 #: src/contents/ui/AddAccount.qml:22
 #, kde-format
 msgctxt "@title:window"
 msgid "Add new account"
 msgstr "Lisää uusi tili"
 
-#: src/contents/ui/AddAccount.qml:45
+#: src/contents/ui/AddAccount.qml:50
 #, kde-format
 msgctxt "@action:button cancel and dismiss the add account form"
 msgid "Cancel"
 msgstr "Peru"
 
-#: src/contents/ui/AddAccount.qml:52
+#: src/contents/ui/AddAccount.qml:57
 #, kde-format
 msgctxt "@action:button Dismiss the error page and quit Keysmith"
 msgid "Quit"
 msgstr "Lopeta"
 
-#: src/contents/ui/AddAccount.qml:61
+#: src/contents/ui/AddAccount.qml:66
 #, kde-format
 msgctxt "@action:button"
 msgid "Add"
 msgstr "Lisää"
 
-#: src/contents/ui/AddAccount.qml:81
+#: src/contents/ui/AddAccount.qml:86
 #, kde-format
 msgctxt "@label:chooser"
 msgid "Account type:"
 msgstr "Tilin tyyppi:"
 
-#: src/contents/ui/AddAccount.qml:90
+#: src/contents/ui/AddAccount.qml:95
 #, kde-format
 msgctxt "@option:radio"
 msgid "Time-based OTP"
 msgstr "Aikaperustainen OTP"
 
-#: src/contents/ui/AddAccount.qml:101
+#: src/contents/ui/AddAccount.qml:106
 #, kde-format
 msgctxt "@option:radio"
 msgid "Hash-based OTP"
 msgstr "Tiivisteperustainen OTP"
 
-#: src/contents/ui/AddAccount.qml:113
+#: src/contents/ui/AddAccount.qml:118
 #, kde-format
 msgid "Token secret"
 msgstr "Merkin salaisuus"
 
-#: src/contents/ui/AddAccount.qml:116
+#: src/contents/ui/AddAccount.qml:120
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Secret key:"
 msgstr "Salainen avain:"
 
-#: src/contents/ui/AddAccount.qml:132
+#: src/contents/ui/AddAccount.qml:139
 #, kde-format
 msgctxt "Button to reveal form for configuring additional token details"
 msgid "Details"
 msgstr "Tiedot"
 
-#: src/contents/ui/AddAccount.qml:140
+#: src/contents/ui/AddAccount.qml:147
 #, kde-format
 msgctxt "@title:group"
 msgid "HOTP Details:"
 msgstr "HOTP-tiedot:"
 
-#: src/contents/ui/AddAccount.qml:153
+#: src/contents/ui/AddAccount.qml:160
 #, kde-format
 msgctxt "@label"
 msgid "TOTP Details:"
 msgstr "TOTP-tiedot:"
 
-#: src/contents/ui/ErrorPage.qml:33
+#: src/contents/ui/ErrorPage.qml:34
 #, kde-format
 msgctxt "@action:button Button to dismiss the error page"
 msgid "Continue"
 msgstr "Jatka"
 
-#: src/contents/ui/ErrorPage.qml:40
+#: src/contents/ui/ErrorPage.qml:41
 #, kde-format
 msgctxt "@action:button Dismiss the error page and quit Keysmtih"
 msgid "Quit"
@@ -320,6 +333,109 @@ msgctxt "@label:spinbox"
 msgid "Truncation offset:"
 msgstr "Katkaisun siirtymä:"
 
+#: src/contents/ui/ImportAccount.qml:21
+#, kde-format
+msgctxt "@title:window"
+msgid "Import Accounts"
+msgstr "Tuo tilejä"
+
+#: src/contents/ui/ImportAccount.qml:52
+#, kde-format
+msgid "Import format"
+msgstr "Tuontimuoto"
+
+#. i18n strings
+#: src/contents/ui/ImportAccount.qml:58
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "andOTP Encrypted JSON"
+msgstr "andOTP – salattu JSON"
+
+#: src/contents/ui/ImportAccount.qml:59
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "andOTP Plain JSON"
+msgstr "andOTP – salaamaton JSON"
+
+#. i18nc("@item:inlistbox", "Aegis Encrypted JSON"), value: Models.ValidatedImportInput.AegisEncryptedJSON});
+#: src/contents/ui/ImportAccount.qml:61
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "Aegis Plain JSON"
+msgstr "Aegis – salaamaton JSON"
+
+#: src/contents/ui/ImportAccount.qml:62
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "FreeOTP URIs"
+msgstr "FreeOTP-URIt"
+
+#: src/contents/ui/ImportAccount.qml:78
+#, kde-format
+msgctxt "@label:chooser"
+msgid "Backup file:"
+msgstr "Varmuuskopiotiedosto:"
+
+#: src/contents/ui/ImportAccount.qml:81
+#, kde-format
+msgctxt "@info:placeholder"
+msgid "No file selected"
+msgstr "Tiedostoa ei valittu"
+
+#: src/contents/ui/ImportAccount.qml:85
+#, kde-format
+msgctxt "@title:window"
+msgid "Select file"
+msgstr "Valitse tiedosto"
+
+#: src/contents/ui/ImportAccount.qml:99
+#, kde-format
+msgctxt "@info:placeholder"
+msgid "Decryption password"
+msgstr "Salauksen purkamissalasana"
+
+#: src/contents/ui/ImportAccount.qml:101 src/contents/ui/UnlockAccounts.qml:49
+#, kde-format
+msgctxt "@label:textbox"
+msgid "Password:"
+msgstr "Salasana:"
+
+#: src/contents/ui/ImportAccount.qml:112
+#, kde-format
+msgctxt "@action:button"
+msgid "Import"
+msgstr "Tuo"
+
+#: src/contents/ui/KeysmithGlobalDrawer.qml:12
+#: src/contents/ui/KeysmithGlobalDrawer.qml:15
+#, kde-format
+msgid "About Keysmith"
+msgstr "Tietoa Keysmithistä"
+
+#: src/contents/ui/QRScanPage.qml:21
+#, kde-format
+msgctxt "@title"
+msgid "Scan a QR code"
+msgstr "Lue QR-koodi"
+
+#: src/contents/ui/QRScanPage.qml:31
+#, kde-format
+msgctxt "@action:intoolbar"
+msgid "Select Camera"
+msgstr "Valitse kamera"
+
+#: src/contents/ui/QRScanPage.qml:42
+#, kde-format
+msgctxt "@title:dialog"
+msgid "Select Camera"
+msgstr "Valitse kamera"
+
+#: src/contents/ui/QRScanPage.qml:61
+#, kde-format
+msgctxt "@action:button"
+msgid "Close"
+msgstr "Sulje"
+
 #: src/contents/ui/RenameAccount.qml:17
 #, kde-format
 msgctxt "@title:window"
@@ -349,13 +465,13 @@ msgstr "Peru"
 msgid "Add"
 msgstr "Lisää"
 
-#: src/contents/ui/SetupPassword.qml:22 src/contents/ui/UnlockAccounts.qml:22
+#: src/contents/ui/SetupPassword.qml:21 src/contents/ui/UnlockAccounts.qml:21
 #, kde-format
 msgctxt "@title:window"
 msgid "Password"
 msgstr "Salasana"
 
-#: src/contents/ui/SetupPassword.qml:28
+#: src/contents/ui/SetupPassword.qml:27
 #, kde-format
 msgid "Failed to set up your password"
 msgstr "Salasanasi asetus epäonnistui"
@@ -365,19 +481,19 @@ msgstr "Salasanasi asetus epäonnistui"
 msgid "Choose a password to protect your accounts"
 msgstr "Aloita valitsemalla tiliesi suojaksi salasana"
 
-#: src/contents/ui/SetupPassword.qml:49
+#: src/contents/ui/SetupPassword.qml:48
 #, kde-format
 msgctxt "@label:textbox"
 msgid "New Password:"
 msgstr "Uusi salasana:"
 
-#: src/contents/ui/SetupPassword.qml:60
+#: src/contents/ui/SetupPassword.qml:61
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Verify password:"
 msgstr "Vahvista salasana:"
 
-#: src/contents/ui/SetupPassword.qml:68
+#: src/contents/ui/SetupPassword.qml:72
 #, kde-format
 msgctxt "@action:button"
 msgid "Apply"
@@ -425,7 +541,7 @@ msgctxt "@option:radio"
 msgid "SHA-512"
 msgstr "SHA-512"
 
-#: src/contents/ui/UnlockAccounts.qml:26
+#: src/contents/ui/UnlockAccounts.qml:25
 #, kde-format
 msgid "Failed to unlock your accounts"
 msgstr "Tilien lukitusten avaaminen epäonnistui"
@@ -435,24 +551,33 @@ msgstr "Tilien lukitusten avaaminen epä
 msgid "Please provide the password to unlock your accounts"
 msgstr "Anna salasana tiliesi lukituksen avaamiseksi"
 
-#: src/contents/ui/UnlockAccounts.qml:50
-#, kde-format
-msgctxt "@label:textbox"
-msgid "Password:"
-msgstr "Salasana:"
-
-#: src/contents/ui/UnlockAccounts.qml:59
+#: src/contents/ui/UnlockAccounts.qml:61
 #, kde-format
 msgctxt "@action:button"
 msgid "Unlock"
 msgstr "Avaa lukitus"
 
-#: src/main.cpp:67
+#: src/main.cpp:70
 #, kde-format
 msgctxt "@title"
 msgid "Keysmith"
 msgstr "Keysmith"
 
+#: src/main.cpp:73
+#, kde-format
+msgid "generate two-factor authentication (2FA) tokens"
+msgstr "luo kahden tekijän todennuksen (2FA) pääsymerkkejä"
+
+#: src/main.cpp:76
+#, kde-format
+msgid "Keysmith"
+msgstr "Keysmith"
+
+#: src/main.cpp:80
+#, kde-format
+msgid "© 2019 KDE Community"
+msgstr "© 2019 KDE-yhteisö"
+
 #~ msgctxt "Button cancelling account removal"
 #~ msgid "Cancel"
 #~ msgstr "Peru"
diff -pruN 24.08.1-1/po/fr/keysmith.po 25.03.90-1/po/fr/keysmith.po
--- 24.08.1-1/po/fr/keysmith.po	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/po/fr/keysmith.po	2025-03-27 10:13:04.000000000 +0000
@@ -1,19 +1,19 @@
-# SPDX-FileCopyrightText: 2020, 2021, 2023, 2024 Xavier Besnard <xavier.besnard@kde.org>
+# SPDX-FileCopyrightText: 2020, 2021, 2023, 2024, 2025 Xavier Besnard <xavier.besnard@kde.org>
 # Xavier Besnard <xavier.besnard@kde.org>, 2023.
 msgid ""
 msgstr ""
 "Project-Id-Version: keysmith\n"
 "Report-Msgid-Bugs-To: https://bugs.kde.org\n"
-"POT-Creation-Date: 2024-05-03 00:40+0000\n"
-"PO-Revision-Date: 2024-01-23 10:23+0100\n"
+"POT-Creation-Date: 2025-02-09 00:43+0000\n"
+"PO-Revision-Date: 2025-01-15 08:58+0100\n"
 "Last-Translator: Xavier Besnard <xavier.besnard@kde.org>\n"
-"Language-Team: French <kde-francophone@kde.org>\n"
+"Language-Team: French <French <kde-francophone@kde.org>>\n"
 "Language: fr\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n > 1);\n"
-"X-Generator: Lokalize 23.08.4\n"
+"X-Generator: Lokalize 24.12.1\n"
 
 #: src/app/cli.cpp:133
 #, kde-format
@@ -24,13 +24,13 @@ msgstr ""
 "Compte optionnel à ajouter, sous un format d'une « URI » de type "
 "« otpauth:// » (venant par exemple d'un code « QR »)"
 
-#: src/app/flows_p.cpp:108 src/app/flows_p.cpp:248
+#: src/app/flows_p.cpp:111 src/app/flows_p.cpp:285
 #, kde-format
 msgctxt "@title:window"
 msgid "Invalid account"
 msgstr "Compte non valable"
 
-#: src/app/flows_p.cpp:109
+#: src/app/flows_p.cpp:112
 #, kde-format
 msgctxt "@info:label"
 msgid ""
@@ -40,7 +40,7 @@ msgstr ""
 "Le compte que vous tentez d'ajouter est non valable. Vous pouvez, soit "
 "quitter l'application, soit continuer dans l'ajouter."
 
-#: src/app/flows_p.cpp:249
+#: src/app/flows_p.cpp:286
 #, kde-format
 msgctxt "@info:label"
 msgid ""
@@ -146,13 +146,13 @@ msgctxt "Notification shown in a passive
 msgid "Token copied to clipboard!"
 msgstr "Jeton copié dans le presse-papier !"
 
-#: src/contents/ui/AccountNameForm.qml:64
+#: src/contents/ui/AccountNameForm.qml:81
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Account name:"
 msgstr "Nom du compte :"
 
-#: src/contents/ui/AccountNameForm.qml:83
+#: src/contents/ui/AccountNameForm.qml:100
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Account issuer:"
@@ -176,12 +176,12 @@ msgctxt "error message shown when loadin
 msgid "Some accounts failed to load."
 msgstr "Certains comptes n'ont pu être chargés."
 
-#: src/contents/ui/AccountsOverview.qml:101
+#: src/contents/ui/AccountsOverview.qml:91
 #, kde-format
 msgid "No accounts added"
 msgstr "Aucun compte ajouté"
 
-#: src/contents/ui/AccountsOverview.qml:106
+#: src/contents/ui/AccountsOverview.qml:96
 #, kde-format
 msgctxt ""
 "@action:button add new account, shown instead of overview list when no "
@@ -189,90 +189,103 @@ msgctxt ""
 msgid "Add Account"
 msgstr "Ajouter un compte"
 
-#: src/contents/ui/AccountsOverview.qml:172
+#: src/contents/ui/AccountsOverview.qml:163
 #, kde-format
 msgctxt "@action:button add new account, shown in toolbar"
 msgid "Add"
 msgstr "Ajouter"
 
+#: src/contents/ui/AccountsOverview.qml:176
+#, kde-format
+msgctxt "@action:button import accounts, shown in toolbar"
+msgid "Import"
+msgstr "Importer"
+
+#: src/contents/ui/AccountsOverview.qml:189
+#, kde-format
+msgctxt ""
+"@action:button import an account by scanning a QR code, shown in toolbar"
+msgid "Scan QR Code"
+msgstr "Lire le code QR"
+
 #: src/contents/ui/AddAccount.qml:22
 #, kde-format
 msgctxt "@title:window"
 msgid "Add new account"
 msgstr "Ajouter un nouveau compte"
 
-#: src/contents/ui/AddAccount.qml:45
+#: src/contents/ui/AddAccount.qml:50
 #, kde-format
 msgctxt "@action:button cancel and dismiss the add account form"
 msgid "Cancel"
 msgstr "Annuler"
 
-#: src/contents/ui/AddAccount.qml:52
+#: src/contents/ui/AddAccount.qml:57
 #, kde-format
 msgctxt "@action:button Dismiss the error page and quit Keysmith"
 msgid "Quit"
 msgstr "Quitter"
 
-#: src/contents/ui/AddAccount.qml:61
+#: src/contents/ui/AddAccount.qml:66
 #, kde-format
 msgctxt "@action:button"
 msgid "Add"
 msgstr "Ajouter"
 
-#: src/contents/ui/AddAccount.qml:81
+#: src/contents/ui/AddAccount.qml:86
 #, kde-format
 msgctxt "@label:chooser"
 msgid "Account type:"
 msgstr "Type de compte :"
 
-#: src/contents/ui/AddAccount.qml:90
+#: src/contents/ui/AddAccount.qml:95
 #, kde-format
 msgctxt "@option:radio"
 msgid "Time-based OTP"
 msgstr "Mot de passe à usage unique utilisant le temps"
 
-#: src/contents/ui/AddAccount.qml:101
+#: src/contents/ui/AddAccount.qml:106
 #, kde-format
 msgctxt "@option:radio"
 msgid "Hash-based OTP"
 msgstr "Mot de passe à usage unique utilisant un hachage"
 
-#: src/contents/ui/AddAccount.qml:113
+#: src/contents/ui/AddAccount.qml:118
 #, kde-format
 msgid "Token secret"
 msgstr "Jeton secret"
 
-#: src/contents/ui/AddAccount.qml:116
+#: src/contents/ui/AddAccount.qml:120
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Secret key:"
 msgstr "Clé secrète :"
 
-#: src/contents/ui/AddAccount.qml:132
+#: src/contents/ui/AddAccount.qml:139
 #, kde-format
 msgctxt "Button to reveal form for configuring additional token details"
 msgid "Details"
 msgstr "Détails"
 
-#: src/contents/ui/AddAccount.qml:140
+#: src/contents/ui/AddAccount.qml:147
 #, kde-format
 msgctxt "@title:group"
 msgid "HOTP Details:"
 msgstr "Détails HOTP :"
 
-#: src/contents/ui/AddAccount.qml:153
+#: src/contents/ui/AddAccount.qml:160
 #, kde-format
 msgctxt "@label"
 msgid "TOTP Details:"
 msgstr "Détails TOTP :"
 
-#: src/contents/ui/ErrorPage.qml:33
+#: src/contents/ui/ErrorPage.qml:34
 #, kde-format
 msgctxt "@action:button Button to dismiss the error page"
 msgid "Continue"
 msgstr "Continuer"
 
-#: src/contents/ui/ErrorPage.qml:40
+#: src/contents/ui/ErrorPage.qml:41
 #, kde-format
 msgctxt "@action:button Dismiss the error page and quit Keysmtih"
 msgid "Quit"
@@ -323,6 +336,109 @@ msgctxt "@label:spinbox"
 msgid "Truncation offset:"
 msgstr "Décalage de troncature :"
 
+#: src/contents/ui/ImportAccount.qml:21
+#, kde-format
+msgctxt "@title:window"
+msgid "Import Accounts"
+msgstr "Importer des comptes"
+
+#: src/contents/ui/ImportAccount.qml:52
+#, kde-format
+msgid "Import format"
+msgstr "Format d'importation"
+
+#. i18n strings
+#: src/contents/ui/ImportAccount.qml:58
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "andOTP Encrypted JSON"
+msgstr "jSON chiffré avec andOTP"
+
+#: src/contents/ui/ImportAccount.qml:59
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "andOTP Plain JSON"
+msgstr "andOTP Plain JSON"
+
+#. i18nc("@item:inlistbox", "Aegis Encrypted JSON"), value: Models.ValidatedImportInput.AegisEncryptedJSON});
+#: src/contents/ui/ImportAccount.qml:61
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "Aegis Plain JSON"
+msgstr "Aegis Plain JSON"
+
+#: src/contents/ui/ImportAccount.qml:62
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "FreeOTP URIs"
+msgstr "URI FreeOTP"
+
+#: src/contents/ui/ImportAccount.qml:78
+#, kde-format
+msgctxt "@label:chooser"
+msgid "Backup file:"
+msgstr "Dossier de sauvegarde :"
+
+#: src/contents/ui/ImportAccount.qml:81
+#, kde-format
+msgctxt "@info:placeholder"
+msgid "No file selected"
+msgstr "Aucun fichier sélectionné"
+
+#: src/contents/ui/ImportAccount.qml:85
+#, kde-format
+msgctxt "@title:window"
+msgid "Select file"
+msgstr "Sélectionner le fichier"
+
+#: src/contents/ui/ImportAccount.qml:99
+#, kde-format
+msgctxt "@info:placeholder"
+msgid "Decryption password"
+msgstr "Mot de passe de déchiffrement"
+
+#: src/contents/ui/ImportAccount.qml:101 src/contents/ui/UnlockAccounts.qml:49
+#, kde-format
+msgctxt "@label:textbox"
+msgid "Password:"
+msgstr "Mot de passe :"
+
+#: src/contents/ui/ImportAccount.qml:112
+#, kde-format
+msgctxt "@action:button"
+msgid "Import"
+msgstr "Importer"
+
+#: src/contents/ui/KeysmithGlobalDrawer.qml:12
+#: src/contents/ui/KeysmithGlobalDrawer.qml:15
+#, kde-format
+msgid "About Keysmith"
+msgstr "À propos de Keysmith"
+
+#: src/contents/ui/QRScanPage.qml:21
+#, kde-format
+msgctxt "@title"
+msgid "Scan a QR code"
+msgstr "Lire un code QR"
+
+#: src/contents/ui/QRScanPage.qml:31
+#, kde-format
+msgctxt "@action:intoolbar"
+msgid "Select Camera"
+msgstr "Sélectionner un appareil photo"
+
+#: src/contents/ui/QRScanPage.qml:42
+#, kde-format
+msgctxt "@title:dialog"
+msgid "Select Camera"
+msgstr "Sélectionner un appareil photo"
+
+#: src/contents/ui/QRScanPage.qml:61
+#, kde-format
+msgctxt "@action:button"
+msgid "Close"
+msgstr "Fermer"
+
 #: src/contents/ui/RenameAccount.qml:17
 #, kde-format
 msgctxt "@title:window"
@@ -352,13 +468,13 @@ msgstr "Annuler"
 msgid "Add"
 msgstr "Ajouter"
 
-#: src/contents/ui/SetupPassword.qml:22 src/contents/ui/UnlockAccounts.qml:22
+#: src/contents/ui/SetupPassword.qml:21 src/contents/ui/UnlockAccounts.qml:21
 #, kde-format
 msgctxt "@title:window"
 msgid "Password"
 msgstr "Mot de passe"
 
-#: src/contents/ui/SetupPassword.qml:28
+#: src/contents/ui/SetupPassword.qml:27
 #, kde-format
 msgid "Failed to set up your password"
 msgstr "Impossible de définir votre mot de passe"
@@ -368,19 +484,19 @@ msgstr "Impossible de définir votre mot
 msgid "Choose a password to protect your accounts"
 msgstr "Choisissez un mot de passe pour protéger vos comptes"
 
-#: src/contents/ui/SetupPassword.qml:49
+#: src/contents/ui/SetupPassword.qml:48
 #, kde-format
 msgctxt "@label:textbox"
 msgid "New Password:"
 msgstr "Nouveau mot de passe :"
 
-#: src/contents/ui/SetupPassword.qml:60
+#: src/contents/ui/SetupPassword.qml:61
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Verify password:"
 msgstr "Vérifier un mot de passe :"
 
-#: src/contents/ui/SetupPassword.qml:68
+#: src/contents/ui/SetupPassword.qml:72
 #, kde-format
 msgctxt "@action:button"
 msgid "Apply"
@@ -428,7 +544,7 @@ msgctxt "@option:radio"
 msgid "SHA-512"
 msgstr "SHA-512"
 
-#: src/contents/ui/UnlockAccounts.qml:26
+#: src/contents/ui/UnlockAccounts.qml:25
 #, kde-format
 msgid "Failed to unlock your accounts"
 msgstr "Impossible de déverrouiller vos comptes"
@@ -438,24 +554,33 @@ msgstr "Impossible de déverrouiller vos
 msgid "Please provide the password to unlock your accounts"
 msgstr "Veuillez fournir le mot de passe pour déverrouiller vos comptes "
 
-#: src/contents/ui/UnlockAccounts.qml:50
-#, kde-format
-msgctxt "@label:textbox"
-msgid "Password:"
-msgstr "Mot de passe :"
-
-#: src/contents/ui/UnlockAccounts.qml:59
+#: src/contents/ui/UnlockAccounts.qml:61
 #, kde-format
 msgctxt "@action:button"
 msgid "Unlock"
 msgstr "Déverrouiller"
 
-#: src/main.cpp:67
+#: src/main.cpp:70
 #, kde-format
 msgctxt "@title"
 msgid "Keysmith"
 msgstr "Keysmith"
 
+#: src/main.cpp:73
+#, kde-format
+msgid "generate two-factor authentication (2FA) tokens"
+msgstr "Générer des jetons d'authentification à deux facteurs (2FA)"
+
+#: src/main.cpp:76
+#, kde-format
+msgid "Keysmith"
+msgstr "Keysmith"
+
+#: src/main.cpp:80
+#, kde-format
+msgid "© 2019 KDE Community"
+msgstr "© 2019 Communauté de KDE"
+
 #~ msgctxt "Button cancelling account removal"
 #~ msgid "Cancel"
 #~ msgstr "Annuler"
diff -pruN 24.08.1-1/po/gl/keysmith.po 25.03.90-1/po/gl/keysmith.po
--- 24.08.1-1/po/gl/keysmith.po	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/po/gl/keysmith.po	2025-03-27 10:13:04.000000000 +0000
@@ -1,13 +1,13 @@
 # Copyright (C) 2023 This file is copyright:
 # This file is distributed under the same license as the keysmith package.
-# SPDX-FileCopyrightText: 2023, 2024 Adrián Chaves (Gallaecio)
+# SPDX-FileCopyrightText: 2023, 2024, 2025 Adrián Chaves (Gallaecio)
 #
 msgid ""
 msgstr ""
 "Project-Id-Version: keysmith\n"
 "Report-Msgid-Bugs-To: https://bugs.kde.org\n"
-"POT-Creation-Date: 2024-05-03 00:40+0000\n"
-"PO-Revision-Date: 2024-01-15 19:41+0100\n"
+"POT-Creation-Date: 2025-02-09 00:43+0000\n"
+"PO-Revision-Date: 2025-01-15 00:06+0100\n"
 "Last-Translator: Adrián Chaves (Gallaecio) <adrian@chaves.io>\n"
 "Language-Team: Proxecto Trasno (proxecto@trasno.gal)\n"
 "Language: gl\n"
@@ -15,7 +15,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Lokalize 23.08.4\n"
+"X-Generator: Lokalize 24.12.0\n"
 
 #: src/app/cli.cpp:133
 #, kde-format
@@ -26,13 +26,13 @@ msgstr ""
 "Conta opcional para engadir, formatada como un URI otpauth:// (p. ex. dun "
 "código QR)."
 
-#: src/app/flows_p.cpp:108 src/app/flows_p.cpp:248
+#: src/app/flows_p.cpp:111 src/app/flows_p.cpp:285
 #, kde-format
 msgctxt "@title:window"
 msgid "Invalid account"
 msgstr "Conta incorrecta"
 
-#: src/app/flows_p.cpp:109
+#: src/app/flows_p.cpp:112
 #, kde-format
 msgctxt "@info:label"
 msgid ""
@@ -42,7 +42,7 @@ msgstr ""
 "A conta que intenta engadir non é correcta Pode saír da aplicación ou "
 "continuar sen engadir a conta."
 
-#: src/app/flows_p.cpp:249
+#: src/app/flows_p.cpp:286
 #, kde-format
 msgctxt "@info:label"
 msgid ""
@@ -146,13 +146,13 @@ msgctxt "Notification shown in a passive
 msgid "Token copied to clipboard!"
 msgstr "O código copiouse no portapapeis."
 
-#: src/contents/ui/AccountNameForm.qml:64
+#: src/contents/ui/AccountNameForm.qml:81
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Account name:"
 msgstr "Nome da conta:"
 
-#: src/contents/ui/AccountNameForm.qml:83
+#: src/contents/ui/AccountNameForm.qml:100
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Account issuer:"
@@ -176,12 +176,12 @@ msgctxt "error message shown when loadin
 msgid "Some accounts failed to load."
 msgstr "Produciuse un erro ao cargar algunhas contas."
 
-#: src/contents/ui/AccountsOverview.qml:101
+#: src/contents/ui/AccountsOverview.qml:91
 #, kde-format
 msgid "No accounts added"
 msgstr "Non se engadiu ningunha conta."
 
-#: src/contents/ui/AccountsOverview.qml:106
+#: src/contents/ui/AccountsOverview.qml:96
 #, kde-format
 msgctxt ""
 "@action:button add new account, shown instead of overview list when no "
@@ -189,90 +189,103 @@ msgctxt ""
 msgid "Add Account"
 msgstr "Engadir unha conta"
 
-#: src/contents/ui/AccountsOverview.qml:172
+#: src/contents/ui/AccountsOverview.qml:163
 #, kde-format
 msgctxt "@action:button add new account, shown in toolbar"
 msgid "Add"
 msgstr "Engadir"
 
+#: src/contents/ui/AccountsOverview.qml:176
+#, kde-format
+msgctxt "@action:button import accounts, shown in toolbar"
+msgid "Import"
+msgstr "Importar"
+
+#: src/contents/ui/AccountsOverview.qml:189
+#, kde-format
+msgctxt ""
+"@action:button import an account by scanning a QR code, shown in toolbar"
+msgid "Scan QR Code"
+msgstr "Escanear un código QR"
+
 #: src/contents/ui/AddAccount.qml:22
 #, kde-format
 msgctxt "@title:window"
 msgid "Add new account"
 msgstr "Engadir unha nova conta"
 
-#: src/contents/ui/AddAccount.qml:45
+#: src/contents/ui/AddAccount.qml:50
 #, kde-format
 msgctxt "@action:button cancel and dismiss the add account form"
 msgid "Cancel"
 msgstr "Cancelar"
 
-#: src/contents/ui/AddAccount.qml:52
+#: src/contents/ui/AddAccount.qml:57
 #, kde-format
 msgctxt "@action:button Dismiss the error page and quit Keysmith"
 msgid "Quit"
 msgstr "Saír"
 
-#: src/contents/ui/AddAccount.qml:61
+#: src/contents/ui/AddAccount.qml:66
 #, kde-format
 msgctxt "@action:button"
 msgid "Add"
 msgstr "Engadir"
 
-#: src/contents/ui/AddAccount.qml:81
+#: src/contents/ui/AddAccount.qml:86
 #, kde-format
 msgctxt "@label:chooser"
 msgid "Account type:"
 msgstr "Tipo de conta:"
 
-#: src/contents/ui/AddAccount.qml:90
+#: src/contents/ui/AddAccount.qml:95
 #, kde-format
 msgctxt "@option:radio"
 msgid "Time-based OTP"
 msgstr "OTP de tempo"
 
-#: src/contents/ui/AddAccount.qml:101
+#: src/contents/ui/AddAccount.qml:106
 #, kde-format
 msgctxt "@option:radio"
 msgid "Hash-based OTP"
 msgstr "OTP de suma de comprobación"
 
-#: src/contents/ui/AddAccount.qml:113
+#: src/contents/ui/AddAccount.qml:118
 #, kde-format
 msgid "Token secret"
 msgstr "Segredo do código"
 
-#: src/contents/ui/AddAccount.qml:116
+#: src/contents/ui/AddAccount.qml:120
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Secret key:"
 msgstr "Chave secreta:"
 
-#: src/contents/ui/AddAccount.qml:132
+#: src/contents/ui/AddAccount.qml:139
 #, kde-format
 msgctxt "Button to reveal form for configuring additional token details"
 msgid "Details"
 msgstr "Detalles"
 
-#: src/contents/ui/AddAccount.qml:140
+#: src/contents/ui/AddAccount.qml:147
 #, kde-format
 msgctxt "@title:group"
 msgid "HOTP Details:"
 msgstr "Detalles de HOTP:"
 
-#: src/contents/ui/AddAccount.qml:153
+#: src/contents/ui/AddAccount.qml:160
 #, kde-format
 msgctxt "@label"
 msgid "TOTP Details:"
 msgstr "Detalles de TOTP:"
 
-#: src/contents/ui/ErrorPage.qml:33
+#: src/contents/ui/ErrorPage.qml:34
 #, kde-format
 msgctxt "@action:button Button to dismiss the error page"
 msgid "Continue"
 msgstr "Continuar"
 
-#: src/contents/ui/ErrorPage.qml:40
+#: src/contents/ui/ErrorPage.qml:41
 #, kde-format
 msgctxt "@action:button Dismiss the error page and quit Keysmtih"
 msgid "Quit"
@@ -323,6 +336,109 @@ msgctxt "@label:spinbox"
 msgid "Truncation offset:"
 msgstr "Desprazamento do recorte:"
 
+#: src/contents/ui/ImportAccount.qml:21
+#, kde-format
+msgctxt "@title:window"
+msgid "Import Accounts"
+msgstr "Importar contas"
+
+#: src/contents/ui/ImportAccount.qml:52
+#, kde-format
+msgid "Import format"
+msgstr "Formato da importación"
+
+#. i18n strings
+#: src/contents/ui/ImportAccount.qml:58
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "andOTP Encrypted JSON"
+msgstr "JSON cifrado de andOTP"
+
+#: src/contents/ui/ImportAccount.qml:59
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "andOTP Plain JSON"
+msgstr "JSON simple de andOTP"
+
+#. i18nc("@item:inlistbox", "Aegis Encrypted JSON"), value: Models.ValidatedImportInput.AegisEncryptedJSON});
+#: src/contents/ui/ImportAccount.qml:61
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "Aegis Plain JSON"
+msgstr "JSON simple de Aegis"
+
+#: src/contents/ui/ImportAccount.qml:62
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "FreeOTP URIs"
+msgstr "URI de FreeOTP"
+
+#: src/contents/ui/ImportAccount.qml:78
+#, kde-format
+msgctxt "@label:chooser"
+msgid "Backup file:"
+msgstr "Ficheiro de salvagarda:"
+
+#: src/contents/ui/ImportAccount.qml:81
+#, kde-format
+msgctxt "@info:placeholder"
+msgid "No file selected"
+msgstr "Non seleccionou ningún ficheiro."
+
+#: src/contents/ui/ImportAccount.qml:85
+#, kde-format
+msgctxt "@title:window"
+msgid "Select file"
+msgstr "Seleccionar un ficheiro"
+
+#: src/contents/ui/ImportAccount.qml:99
+#, kde-format
+msgctxt "@info:placeholder"
+msgid "Decryption password"
+msgstr "Contrasinal para descifrar:"
+
+#: src/contents/ui/ImportAccount.qml:101 src/contents/ui/UnlockAccounts.qml:49
+#, kde-format
+msgctxt "@label:textbox"
+msgid "Password:"
+msgstr "Contrasinal:"
+
+#: src/contents/ui/ImportAccount.qml:112
+#, kde-format
+msgctxt "@action:button"
+msgid "Import"
+msgstr "Importar"
+
+#: src/contents/ui/KeysmithGlobalDrawer.qml:12
+#: src/contents/ui/KeysmithGlobalDrawer.qml:15
+#, kde-format
+msgid "About Keysmith"
+msgstr "Sobre Keysmith"
+
+#: src/contents/ui/QRScanPage.qml:21
+#, kde-format
+msgctxt "@title"
+msgid "Scan a QR code"
+msgstr "Escanear un código QR"
+
+#: src/contents/ui/QRScanPage.qml:31
+#, kde-format
+msgctxt "@action:intoolbar"
+msgid "Select Camera"
+msgstr "Seleccionar unha cámara"
+
+#: src/contents/ui/QRScanPage.qml:42
+#, kde-format
+msgctxt "@title:dialog"
+msgid "Select Camera"
+msgstr "Seleccionar unha cámara"
+
+#: src/contents/ui/QRScanPage.qml:61
+#, kde-format
+msgctxt "@action:button"
+msgid "Close"
+msgstr "Pechar"
+
 #: src/contents/ui/RenameAccount.qml:17
 #, kde-format
 msgctxt "@title:window"
@@ -352,13 +468,13 @@ msgstr "Cancelar"
 msgid "Add"
 msgstr "Engadir"
 
-#: src/contents/ui/SetupPassword.qml:22 src/contents/ui/UnlockAccounts.qml:22
+#: src/contents/ui/SetupPassword.qml:21 src/contents/ui/UnlockAccounts.qml:21
 #, kde-format
 msgctxt "@title:window"
 msgid "Password"
 msgstr "Contrasinal"
 
-#: src/contents/ui/SetupPassword.qml:28
+#: src/contents/ui/SetupPassword.qml:27
 #, kde-format
 msgid "Failed to set up your password"
 msgstr "Non foi posíbel preparar o contrasinal."
@@ -368,19 +484,19 @@ msgstr "Non foi posíbel preparar o cont
 msgid "Choose a password to protect your accounts"
 msgstr "Escolla un contrasinal para protexer as contas."
 
-#: src/contents/ui/SetupPassword.qml:49
+#: src/contents/ui/SetupPassword.qml:48
 #, kde-format
 msgctxt "@label:textbox"
 msgid "New Password:"
 msgstr "Novo contrasinal:"
 
-#: src/contents/ui/SetupPassword.qml:60
+#: src/contents/ui/SetupPassword.qml:61
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Verify password:"
 msgstr "Verifique o contrasinal:"
 
-#: src/contents/ui/SetupPassword.qml:68
+#: src/contents/ui/SetupPassword.qml:72
 #, kde-format
 msgctxt "@action:button"
 msgid "Apply"
@@ -428,7 +544,7 @@ msgctxt "@option:radio"
 msgid "SHA-512"
 msgstr "SHA-512"
 
-#: src/contents/ui/UnlockAccounts.qml:26
+#: src/contents/ui/UnlockAccounts.qml:25
 #, kde-format
 msgid "Failed to unlock your accounts"
 msgstr "Non foi posíbel desbloquear as contas."
@@ -438,24 +554,33 @@ msgstr "Non foi posíbel desbloquear as
 msgid "Please provide the password to unlock your accounts"
 msgstr "Forneza o contrasinal para desbloquear as contas."
 
-#: src/contents/ui/UnlockAccounts.qml:50
-#, kde-format
-msgctxt "@label:textbox"
-msgid "Password:"
-msgstr "Contrasinal:"
-
-#: src/contents/ui/UnlockAccounts.qml:59
+#: src/contents/ui/UnlockAccounts.qml:61
 #, kde-format
 msgctxt "@action:button"
 msgid "Unlock"
 msgstr "Desbloquear"
 
-#: src/main.cpp:67
+#: src/main.cpp:70
 #, kde-format
 msgctxt "@title"
 msgid "Keysmith"
 msgstr "Keysmith"
 
+#: src/main.cpp:73
+#, kde-format
+msgid "generate two-factor authentication (2FA) tokens"
+msgstr "xerar pases de autenticación de dous factores (2FA)"
+
+#: src/main.cpp:76
+#, kde-format
+msgid "Keysmith"
+msgstr "Keysmith"
+
+#: src/main.cpp:80
+#, kde-format
+msgid "© 2019 KDE Community"
+msgstr "© 2019 Comunidade KDE"
+
 #~ msgctxt "Button cancelling account removal"
 #~ msgid "Cancel"
 #~ msgstr "Cancelar"
diff -pruN 24.08.1-1/po/he/keysmith.po 25.03.90-1/po/he/keysmith.po
--- 24.08.1-1/po/he/keysmith.po	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/po/he/keysmith.po	2025-03-27 10:13:04.000000000 +0000
@@ -6,15 +6,15 @@ msgid ""
 msgstr ""
 "Project-Id-Version: keysmith\n"
 "Report-Msgid-Bugs-To: https://bugs.kde.org\n"
-"POT-Creation-Date: 2024-05-03 00:40+0000\n"
-"PO-Revision-Date: 2024-01-19 08:29+0200\n"
+"POT-Creation-Date: 2025-02-09 00:43+0000\n"
+"PO-Revision-Date: 2025-01-24 09:23+0200\n"
 "Last-Translator: Yaron Shahrabani <sh.yaron@gmail.com>\n"
 "Language-Team: צוות התרגום של KDE ישראל\n"
 "Language: he\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Lokalize 23.08.4\n"
+"X-Generator: Lokalize 24.12.0\n"
 "Plural-Forms: nplurals=4; plural=(n == 1) ? 0 : ((n == 2) ? 1 : ((n > 10 && "
 "n % 10 == 0) ? 2 : 3));\n"
 
@@ -25,13 +25,13 @@ msgid ""
 "Optional account to add, formatted as otpauth:// URI (e.g. from a QR code)"
 msgstr "חשבון להוספה כרשות, בתבנית הכתובת המלאה otpauth://‎ (למשל: מקוד QR)"
 
-#: src/app/flows_p.cpp:108 src/app/flows_p.cpp:248
+#: src/app/flows_p.cpp:111 src/app/flows_p.cpp:285
 #, kde-format
 msgctxt "@title:window"
 msgid "Invalid account"
 msgstr "חשבון שגוי"
 
-#: src/app/flows_p.cpp:109
+#: src/app/flows_p.cpp:112
 #, kde-format
 msgctxt "@info:label"
 msgid ""
@@ -40,7 +40,7 @@ msgid ""
 msgstr ""
 "החשבון שניסית להוסיף שגוי. אפשר לצאת מהיישום או להמשיך בלי להוסיף את החשבון."
 
-#: src/app/flows_p.cpp:249
+#: src/app/flows_p.cpp:286
 #, kde-format
 msgctxt "@info:label"
 msgid ""
@@ -142,13 +142,13 @@ msgctxt "Notification shown in a passive
 msgid "Token copied to clipboard!"
 msgstr "האסימון הועתק ללוח הגזירים!"
 
-#: src/contents/ui/AccountNameForm.qml:64
+#: src/contents/ui/AccountNameForm.qml:81
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Account name:"
 msgstr "שם החשבון:"
 
-#: src/contents/ui/AccountNameForm.qml:83
+#: src/contents/ui/AccountNameForm.qml:100
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Account issuer:"
@@ -172,12 +172,12 @@ msgctxt "error message shown when loadin
 msgid "Some accounts failed to load."
 msgstr "טעינת חלק מהחשבונות נכשלה."
 
-#: src/contents/ui/AccountsOverview.qml:101
+#: src/contents/ui/AccountsOverview.qml:91
 #, kde-format
 msgid "No accounts added"
 msgstr "לא נוספו חשבונות"
 
-#: src/contents/ui/AccountsOverview.qml:106
+#: src/contents/ui/AccountsOverview.qml:96
 #, kde-format
 msgctxt ""
 "@action:button add new account, shown instead of overview list when no "
@@ -185,90 +185,103 @@ msgctxt ""
 msgid "Add Account"
 msgstr "הוספת חשבון"
 
-#: src/contents/ui/AccountsOverview.qml:172
+#: src/contents/ui/AccountsOverview.qml:163
 #, kde-format
 msgctxt "@action:button add new account, shown in toolbar"
 msgid "Add"
 msgstr "הוספה"
 
+#: src/contents/ui/AccountsOverview.qml:176
+#, kde-format
+msgctxt "@action:button import accounts, shown in toolbar"
+msgid "Import"
+msgstr "ייבוא"
+
+#: src/contents/ui/AccountsOverview.qml:189
+#, kde-format
+msgctxt ""
+"@action:button import an account by scanning a QR code, shown in toolbar"
+msgid "Scan QR Code"
+msgstr "סריקת קוד QR"
+
 #: src/contents/ui/AddAccount.qml:22
 #, kde-format
 msgctxt "@title:window"
 msgid "Add new account"
 msgstr "הוספת חשבון חדש"
 
-#: src/contents/ui/AddAccount.qml:45
+#: src/contents/ui/AddAccount.qml:50
 #, kde-format
 msgctxt "@action:button cancel and dismiss the add account form"
 msgid "Cancel"
 msgstr "ביטול"
 
-#: src/contents/ui/AddAccount.qml:52
+#: src/contents/ui/AddAccount.qml:57
 #, kde-format
 msgctxt "@action:button Dismiss the error page and quit Keysmith"
 msgid "Quit"
 msgstr "יציאה"
 
-#: src/contents/ui/AddAccount.qml:61
+#: src/contents/ui/AddAccount.qml:66
 #, kde-format
 msgctxt "@action:button"
 msgid "Add"
 msgstr "הוספה"
 
-#: src/contents/ui/AddAccount.qml:81
+#: src/contents/ui/AddAccount.qml:86
 #, kde-format
 msgctxt "@label:chooser"
 msgid "Account type:"
 msgstr "סוג חשבון:"
 
-#: src/contents/ui/AddAccount.qml:90
+#: src/contents/ui/AddAccount.qml:95
 #, kde-format
 msgctxt "@option:radio"
 msgid "Time-based OTP"
 msgstr "אסימון חד־פעמי לפי זמן"
 
-#: src/contents/ui/AddAccount.qml:101
+#: src/contents/ui/AddAccount.qml:106
 #, kde-format
 msgctxt "@option:radio"
 msgid "Hash-based OTP"
 msgstr "אסימון חד־פעמי לפי גיבוב"
 
-#: src/contents/ui/AddAccount.qml:113
+#: src/contents/ui/AddAccount.qml:118
 #, kde-format
 msgid "Token secret"
 msgstr "סוד אסימון"
 
-#: src/contents/ui/AddAccount.qml:116
+#: src/contents/ui/AddAccount.qml:120
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Secret key:"
 msgstr "מפתח סודי:"
 
-#: src/contents/ui/AddAccount.qml:132
+#: src/contents/ui/AddAccount.qml:139
 #, kde-format
 msgctxt "Button to reveal form for configuring additional token details"
 msgid "Details"
 msgstr "פרטים"
 
-#: src/contents/ui/AddAccount.qml:140
+#: src/contents/ui/AddAccount.qml:147
 #, kde-format
 msgctxt "@title:group"
 msgid "HOTP Details:"
 msgstr "פרטי HOTP:"
 
-#: src/contents/ui/AddAccount.qml:153
+#: src/contents/ui/AddAccount.qml:160
 #, kde-format
 msgctxt "@label"
 msgid "TOTP Details:"
 msgstr "פרטי TOTP:"
 
-#: src/contents/ui/ErrorPage.qml:33
+#: src/contents/ui/ErrorPage.qml:34
 #, kde-format
 msgctxt "@action:button Button to dismiss the error page"
 msgid "Continue"
 msgstr "המשך"
 
-#: src/contents/ui/ErrorPage.qml:40
+#: src/contents/ui/ErrorPage.qml:41
 #, kde-format
 msgctxt "@action:button Dismiss the error page and quit Keysmtih"
 msgid "Quit"
@@ -319,6 +332,109 @@ msgctxt "@label:spinbox"
 msgid "Truncation offset:"
 msgstr "היסט קיצוץ:"
 
+#: src/contents/ui/ImportAccount.qml:21
+#, kde-format
+msgctxt "@title:window"
+msgid "Import Accounts"
+msgstr "ייבוא חשבונות"
+
+#: src/contents/ui/ImportAccount.qml:52
+#, kde-format
+msgid "Import format"
+msgstr "תסדיר ייבוא"
+
+#. i18n strings
+#: src/contents/ui/ImportAccount.qml:58
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "andOTP Encrypted JSON"
+msgstr "JSON מוצפן מסוג andOTP"
+
+#: src/contents/ui/ImportAccount.qml:59
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "andOTP Plain JSON"
+msgstr "JSON גלוי מסוג andOTP"
+
+#. i18nc("@item:inlistbox", "Aegis Encrypted JSON"), value: Models.ValidatedImportInput.AegisEncryptedJSON});
+#: src/contents/ui/ImportAccount.qml:61
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "Aegis Plain JSON"
+msgstr "JSON גלוי מסוג Aegis"
+
+#: src/contents/ui/ImportAccount.qml:62
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "FreeOTP URIs"
+msgstr "כתובות FreeOTP מלאות"
+
+#: src/contents/ui/ImportAccount.qml:78
+#, kde-format
+msgctxt "@label:chooser"
+msgid "Backup file:"
+msgstr "קובץ גיבוי:"
+
+#: src/contents/ui/ImportAccount.qml:81
+#, kde-format
+msgctxt "@info:placeholder"
+msgid "No file selected"
+msgstr "לא נבחר קובץ"
+
+#: src/contents/ui/ImportAccount.qml:85
+#, kde-format
+msgctxt "@title:window"
+msgid "Select file"
+msgstr "בחירת קובץ"
+
+#: src/contents/ui/ImportAccount.qml:99
+#, kde-format
+msgctxt "@info:placeholder"
+msgid "Decryption password"
+msgstr "סיסמת פענוח"
+
+#: src/contents/ui/ImportAccount.qml:101 src/contents/ui/UnlockAccounts.qml:49
+#, kde-format
+msgctxt "@label:textbox"
+msgid "Password:"
+msgstr "סיסמה:"
+
+#: src/contents/ui/ImportAccount.qml:112
+#, kde-format
+msgctxt "@action:button"
+msgid "Import"
+msgstr "ייבוא"
+
+#: src/contents/ui/KeysmithGlobalDrawer.qml:12
+#: src/contents/ui/KeysmithGlobalDrawer.qml:15
+#, kde-format
+msgid "About Keysmith"
+msgstr "על Keysmith"
+
+#: src/contents/ui/QRScanPage.qml:21
+#, kde-format
+msgctxt "@title"
+msgid "Scan a QR code"
+msgstr "סריקת קוד QR"
+
+#: src/contents/ui/QRScanPage.qml:31
+#, kde-format
+msgctxt "@action:intoolbar"
+msgid "Select Camera"
+msgstr "בחירת מצלמה"
+
+#: src/contents/ui/QRScanPage.qml:42
+#, kde-format
+msgctxt "@title:dialog"
+msgid "Select Camera"
+msgstr "בחירת מצלמה"
+
+#: src/contents/ui/QRScanPage.qml:61
+#, kde-format
+msgctxt "@action:button"
+msgid "Close"
+msgstr "סגירה"
+
 #: src/contents/ui/RenameAccount.qml:17
 #, kde-format
 msgctxt "@title:window"
@@ -346,13 +462,13 @@ msgstr "ביטול"
 msgid "Add"
 msgstr "הוספה"
 
-#: src/contents/ui/SetupPassword.qml:22 src/contents/ui/UnlockAccounts.qml:22
+#: src/contents/ui/SetupPassword.qml:21 src/contents/ui/UnlockAccounts.qml:21
 #, kde-format
 msgctxt "@title:window"
 msgid "Password"
 msgstr "סיסמה"
 
-#: src/contents/ui/SetupPassword.qml:28
+#: src/contents/ui/SetupPassword.qml:27
 #, kde-format
 msgid "Failed to set up your password"
 msgstr "הגדרת הסיסמה שלך נכשלה"
@@ -362,19 +478,19 @@ msgstr "הגדרת הסיסמה שלך 
 msgid "Choose a password to protect your accounts"
 msgstr "נא לבחור סיסמה להגנה על החשבונות שלך"
 
-#: src/contents/ui/SetupPassword.qml:49
+#: src/contents/ui/SetupPassword.qml:48
 #, kde-format
 msgctxt "@label:textbox"
 msgid "New Password:"
 msgstr "סיסמה חדשה:"
 
-#: src/contents/ui/SetupPassword.qml:60
+#: src/contents/ui/SetupPassword.qml:61
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Verify password:"
 msgstr "אימות סיסמה:"
 
-#: src/contents/ui/SetupPassword.qml:68
+#: src/contents/ui/SetupPassword.qml:72
 #, kde-format
 msgctxt "@action:button"
 msgid "Apply"
@@ -384,7 +500,7 @@ msgstr "החלה"
 #, kde-format
 msgctxt "placeholder text if no token is available"
 msgid "(refresh)"
-msgstr "(רענון)"
+msgstr "(ריענון)"
 
 #: src/contents/ui/TOTPDetailsForm.qml:27
 #, kde-format
@@ -422,7 +538,7 @@ msgctxt "@option:radio"
 msgid "SHA-512"
 msgstr "SHA-512"
 
-#: src/contents/ui/UnlockAccounts.qml:26
+#: src/contents/ui/UnlockAccounts.qml:25
 #, kde-format
 msgid "Failed to unlock your accounts"
 msgstr "שחרור החשבונות שלך נכשל"
@@ -432,24 +548,33 @@ msgstr "שחרור החשבונות של
 msgid "Please provide the password to unlock your accounts"
 msgstr "נא לספק את הסיסמה כדי לשחרר את החשבונות שלך"
 
-#: src/contents/ui/UnlockAccounts.qml:50
-#, kde-format
-msgctxt "@label:textbox"
-msgid "Password:"
-msgstr "סיסמה:"
-
-#: src/contents/ui/UnlockAccounts.qml:59
+#: src/contents/ui/UnlockAccounts.qml:61
 #, kde-format
 msgctxt "@action:button"
 msgid "Unlock"
 msgstr "שחרור"
 
-#: src/main.cpp:67
+#: src/main.cpp:70
 #, kde-format
 msgctxt "@title"
 msgid "Keysmith"
 msgstr "Keysmith"
 
+#: src/main.cpp:73
+#, kde-format
+msgid "generate two-factor authentication (2FA) tokens"
+msgstr "יצירת אסימוני אימות חד־פעמיים (2FA)"
+
+#: src/main.cpp:76
+#, kde-format
+msgid "Keysmith"
+msgstr "Keysmith"
+
+#: src/main.cpp:80
+#, kde-format
+msgid "© 2019 KDE Community"
+msgstr "© 2019 קהילת KDE"
+
 #~ msgctxt "Button cancelling account removal"
 #~ msgid "Cancel"
 #~ msgstr "ביטול"
diff -pruN 24.08.1-1/po/hi/keysmith.po 25.03.90-1/po/hi/keysmith.po
--- 24.08.1-1/po/hi/keysmith.po	1970-01-01 00:00:00.000000000 +0000
+++ 25.03.90-1/po/hi/keysmith.po	2025-03-27 10:13:04.000000000 +0000
@@ -0,0 +1,568 @@
+# Hindi translations for keysmith package.
+# Copyright (C) 2024 This file is copyright:
+# This file is distributed under the same license as the keysmith package.
+# Kali <EMAIL@ADDRESS>, 2024.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: keysmith\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2025-02-09 00:43+0000\n"
+"PO-Revision-Date: 2024-12-15 15:57+0530\n"
+"Last-Translator: Kali <EMAIL@ADDRESS>\n"
+"Language-Team: Hindi <fedora-trans-hi@redhat.com>\n"
+"Language: hi\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n!=1);\n"
+
+#: src/app/cli.cpp:133
+#, kde-format
+msgctxt "@info (<uri> placeholder)"
+msgid ""
+"Optional account to add, formatted as otpauth:// URI (e.g. from a QR code)"
+msgstr ""
+
+#: src/app/flows_p.cpp:111 src/app/flows_p.cpp:285
+#, kde-format
+msgctxt "@title:window"
+msgid "Invalid account"
+msgstr ""
+
+#: src/app/flows_p.cpp:112
+#, kde-format
+msgctxt "@info:label"
+msgid ""
+"The account you are trying to add is invalid. You can either quit the app, "
+"or continue without adding the account."
+msgstr ""
+
+#: src/app/flows_p.cpp:286
+#, kde-format
+msgctxt "@info:label"
+msgid ""
+"The account you are trying to add is invalid. Continue without adding the "
+"account."
+msgstr ""
+
+#: src/contents/ui/AccountEntryViewBase.qml:35
+#, kde-format
+msgctxt "Details dialog title: %1 is the name of the account"
+msgid "Details of account: %1"
+msgstr ""
+
+#: src/contents/ui/AccountEntryViewBase.qml:42
+#, kde-format
+msgid "Name:"
+msgstr ""
+
+#: src/contents/ui/AccountEntryViewBase.qml:49
+#, kde-format
+msgid "Issuer:"
+msgstr ""
+
+#: src/contents/ui/AccountEntryViewBase.qml:56
+#, kde-format
+msgid "Mode:"
+msgstr ""
+
+#: src/contents/ui/AccountEntryViewBase.qml:57
+#, kde-format
+msgctxt "Mode of 2fa"
+msgid "HOTP"
+msgstr ""
+
+#: src/contents/ui/AccountEntryViewBase.qml:57
+#, kde-format
+msgctxt "Mode of 2fa"
+msgid "TOTP"
+msgstr ""
+
+#: src/contents/ui/AccountEntryViewBase.qml:63
+#, kde-format
+msgid "Epoch:"
+msgstr ""
+
+#: src/contents/ui/AccountEntryViewBase.qml:70
+#, kde-format
+msgid "Time Step:"
+msgstr ""
+
+#: src/contents/ui/AccountEntryViewBase.qml:77
+#, kde-format
+msgid "Offset:"
+msgstr ""
+
+#: src/contents/ui/AccountEntryViewBase.qml:84
+#, kde-format
+msgid "Token Length:"
+msgstr ""
+
+#: src/contents/ui/AccountEntryViewBase.qml:91
+#, kde-format
+msgid "Hash:"
+msgstr ""
+
+#: src/contents/ui/AccountEntryViewBase.qml:100
+#, kde-format
+msgctxt "Confirm dialog title: %1 is the name of the account to remove"
+msgid "Removing account: %1"
+msgstr ""
+
+#: src/contents/ui/AccountEntryViewBase.qml:105
+#, kde-format
+msgid ""
+"<p><ul><li>Account name: %1</li><li>Account issuer: %2</li></ul></"
+"p><p>Removing this account from Keysmith will not disable two-factor "
+"authentication (2FA). Make sure you can still access your account without "
+"using Keysmith before proceeding:</p><ul><li>Make sure you have another 2FA "
+"app set up for your account, or:</li><li>Make sure you have recovery codes "
+"for your account, or:</li><li>Disable two-factor authentication on your "
+"account</li></ul>"
+msgstr ""
+
+#: src/contents/ui/AccountEntryViewBase.qml:116
+#, kde-format
+msgctxt "Button confirming account removal"
+msgid "Delete Account"
+msgstr ""
+
+#: src/contents/ui/AccountEntryViewBase.qml:134
+#, kde-format
+msgctxt "Notification shown in a passive notification"
+msgid "Token copied to clipboard!"
+msgstr ""
+
+#: src/contents/ui/AccountNameForm.qml:81
+#, kde-format
+msgctxt "@label:textbox"
+msgid "Account name:"
+msgstr ""
+
+#: src/contents/ui/AccountNameForm.qml:100
+#, kde-format
+msgctxt "@label:textbox"
+msgid "Account issuer:"
+msgstr ""
+
+#: src/contents/ui/AccountsOverview.qml:21
+#, kde-format
+msgctxt "@title:window"
+msgid "Accounts"
+msgstr ""
+
+#: src/contents/ui/AccountsOverview.qml:25
+#, kde-format
+msgctxt "generic error shown when adding or updating an account failed"
+msgid "Failed to update accounts"
+msgstr ""
+
+#: src/contents/ui/AccountsOverview.qml:26
+#, kde-format
+msgctxt "error message shown when loading accounts from storage failed"
+msgid "Some accounts failed to load."
+msgstr ""
+
+#: src/contents/ui/AccountsOverview.qml:91
+#, kde-format
+msgid "No accounts added"
+msgstr ""
+
+#: src/contents/ui/AccountsOverview.qml:96
+#, kde-format
+msgctxt ""
+"@action:button add new account, shown instead of overview list when no "
+"accounts have been added yet"
+msgid "Add Account"
+msgstr ""
+
+#: src/contents/ui/AccountsOverview.qml:163
+#, kde-format
+msgctxt "@action:button add new account, shown in toolbar"
+msgid "Add"
+msgstr ""
+
+#: src/contents/ui/AccountsOverview.qml:176
+#, kde-format
+msgctxt "@action:button import accounts, shown in toolbar"
+msgid "Import"
+msgstr ""
+
+#: src/contents/ui/AccountsOverview.qml:189
+#, kde-format
+msgctxt ""
+"@action:button import an account by scanning a QR code, shown in toolbar"
+msgid "Scan QR Code"
+msgstr ""
+
+#: src/contents/ui/AddAccount.qml:22
+#, kde-format
+msgctxt "@title:window"
+msgid "Add new account"
+msgstr ""
+
+#: src/contents/ui/AddAccount.qml:50
+#, kde-format
+msgctxt "@action:button cancel and dismiss the add account form"
+msgid "Cancel"
+msgstr ""
+
+#: src/contents/ui/AddAccount.qml:57
+#, kde-format
+msgctxt "@action:button Dismiss the error page and quit Keysmith"
+msgid "Quit"
+msgstr ""
+
+#: src/contents/ui/AddAccount.qml:66
+#, kde-format
+msgctxt "@action:button"
+msgid "Add"
+msgstr ""
+
+#: src/contents/ui/AddAccount.qml:86
+#, kde-format
+msgctxt "@label:chooser"
+msgid "Account type:"
+msgstr ""
+
+#: src/contents/ui/AddAccount.qml:95
+#, kde-format
+msgctxt "@option:radio"
+msgid "Time-based OTP"
+msgstr ""
+
+#: src/contents/ui/AddAccount.qml:106
+#, kde-format
+msgctxt "@option:radio"
+msgid "Hash-based OTP"
+msgstr ""
+
+#: src/contents/ui/AddAccount.qml:118
+#, kde-format
+msgid "Token secret"
+msgstr ""
+
+#: src/contents/ui/AddAccount.qml:120
+#, kde-format
+msgctxt "@label:textbox"
+msgid "Secret key:"
+msgstr ""
+
+#: src/contents/ui/AddAccount.qml:139
+#, kde-format
+msgctxt "Button to reveal form for configuring additional token details"
+msgid "Details"
+msgstr ""
+
+#: src/contents/ui/AddAccount.qml:147
+#, kde-format
+msgctxt "@title:group"
+msgid "HOTP Details:"
+msgstr ""
+
+#: src/contents/ui/AddAccount.qml:160
+#, kde-format
+msgctxt "@label"
+msgid "TOTP Details:"
+msgstr ""
+
+#: src/contents/ui/ErrorPage.qml:34
+#, kde-format
+msgctxt "@action:button Button to dismiss the error page"
+msgid "Continue"
+msgstr ""
+
+#: src/contents/ui/ErrorPage.qml:41
+#, kde-format
+msgctxt "@action:button Dismiss the error page and quit Keysmtih"
+msgid "Quit"
+msgstr ""
+
+#: src/contents/ui/HOTPAccountEntryView.qml:19
+#: src/contents/ui/TOTPAccountEntryView.qml:23
+#, kde-format
+msgctxt "Button to show details of a single account"
+msgid "Show details"
+msgstr ""
+
+#: src/contents/ui/HOTPAccountEntryView.qml:28
+#: src/contents/ui/TOTPAccountEntryView.qml:34
+#, kde-format
+msgctxt "Button for removal of a single account"
+msgid "Delete account"
+msgstr ""
+
+#: src/contents/ui/HOTPDetailsForm.qml:27
+#, kde-format
+msgctxt "@label:textbox"
+msgid "Counter:"
+msgstr ""
+
+#: src/contents/ui/HOTPDetailsForm.qml:48
+#: src/contents/ui/TOTPDetailsForm.qml:67
+#, kde-format
+msgctxt "@label:spinbox"
+msgid "Token length:"
+msgstr ""
+
+#: src/contents/ui/HOTPDetailsForm.qml:63
+#, kde-format
+msgctxt "@option:check"
+msgid "Add checksum digit"
+msgstr ""
+
+#: src/contents/ui/HOTPDetailsForm.qml:75
+#, kde-format
+msgctxt "@option:check"
+msgid "Use custom truncation offset"
+msgstr ""
+
+#: src/contents/ui/HOTPDetailsForm.qml:89
+#, kde-format
+msgctxt "@label:spinbox"
+msgid "Truncation offset:"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:21
+#, kde-format
+msgctxt "@title:window"
+msgid "Import Accounts"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:52
+#, kde-format
+msgid "Import format"
+msgstr ""
+
+#. i18n strings
+#: src/contents/ui/ImportAccount.qml:58
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "andOTP Encrypted JSON"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:59
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "andOTP Plain JSON"
+msgstr ""
+
+#. i18nc("@item:inlistbox", "Aegis Encrypted JSON"), value: Models.ValidatedImportInput.AegisEncryptedJSON});
+#: src/contents/ui/ImportAccount.qml:61
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "Aegis Plain JSON"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:62
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "FreeOTP URIs"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:78
+#, kde-format
+msgctxt "@label:chooser"
+msgid "Backup file:"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:81
+#, kde-format
+msgctxt "@info:placeholder"
+msgid "No file selected"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:85
+#, kde-format
+msgctxt "@title:window"
+msgid "Select file"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:99
+#, kde-format
+msgctxt "@info:placeholder"
+msgid "Decryption password"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:101 src/contents/ui/UnlockAccounts.qml:49
+#, kde-format
+msgctxt "@label:textbox"
+msgid "Password:"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:112
+#, kde-format
+msgctxt "@action:button"
+msgid "Import"
+msgstr ""
+
+#: src/contents/ui/KeysmithGlobalDrawer.qml:12
+#: src/contents/ui/KeysmithGlobalDrawer.qml:15
+#, kde-format
+msgid "About Keysmith"
+msgstr ""
+
+#: src/contents/ui/QRScanPage.qml:21
+#, kde-format
+msgctxt "@title"
+msgid "Scan a QR code"
+msgstr ""
+
+#: src/contents/ui/QRScanPage.qml:31
+#, kde-format
+msgctxt "@action:intoolbar"
+msgid "Select Camera"
+msgstr ""
+
+#: src/contents/ui/QRScanPage.qml:42
+#, kde-format
+msgctxt "@title:dialog"
+msgid "Select Camera"
+msgstr ""
+
+#: src/contents/ui/QRScanPage.qml:61
+#, kde-format
+msgctxt "@action:button"
+msgid "Close"
+msgstr ""
+
+#: src/contents/ui/RenameAccount.qml:17
+#, kde-format
+msgctxt "@title:window"
+msgid "Rename account to add"
+msgstr ""
+
+#: src/contents/ui/RenameAccount.qml:35
+#, kde-format
+msgctxt ""
+"@info:label Keysmith received an account to add via URI on e.g. commandline "
+"which is already in use"
+msgid ""
+"Another account with the same name already exists. Please correct the name "
+"or issuer for the new account."
+msgstr ""
+
+#: src/contents/ui/RenameAccount.qml:49
+#, kde-format
+msgctxt "@action:button cancel and dismiss the rename account form"
+msgid "Cancel"
+msgstr ""
+
+#: src/contents/ui/RenameAccount.qml:56
+#, kde-format
+msgid "Add"
+msgstr ""
+
+#: src/contents/ui/SetupPassword.qml:21 src/contents/ui/UnlockAccounts.qml:21
+#, kde-format
+msgctxt "@title:window"
+msgid "Password"
+msgstr ""
+
+#: src/contents/ui/SetupPassword.qml:27
+#, kde-format
+msgid "Failed to set up your password"
+msgstr ""
+
+#: src/contents/ui/SetupPassword.qml:42
+#, kde-format
+msgid "Choose a password to protect your accounts"
+msgstr ""
+
+#: src/contents/ui/SetupPassword.qml:48
+#, kde-format
+msgctxt "@label:textbox"
+msgid "New Password:"
+msgstr ""
+
+#: src/contents/ui/SetupPassword.qml:61
+#, kde-format
+msgctxt "@label:textbox"
+msgid "Verify password:"
+msgstr ""
+
+#: src/contents/ui/SetupPassword.qml:72
+#, kde-format
+msgctxt "@action:button"
+msgid "Apply"
+msgstr ""
+
+#: src/contents/ui/TokenEntryViewLabels.qml:40
+#, kde-format
+msgctxt "placeholder text if no token is available"
+msgid "(refresh)"
+msgstr ""
+
+#: src/contents/ui/TOTPDetailsForm.qml:27
+#, kde-format
+msgctxt "@label:textbox"
+msgid "Timer:"
+msgstr ""
+
+#: src/contents/ui/TOTPDetailsForm.qml:45
+#, kde-format
+msgctxt "@label:textbox"
+msgid "Starting at:"
+msgstr ""
+
+#: src/contents/ui/TOTPDetailsForm.qml:79
+#, kde-format
+msgctxt "@label:chooser"
+msgid "Hash algorithm:"
+msgstr ""
+
+#: src/contents/ui/TOTPDetailsForm.qml:86
+#, kde-format
+msgctxt "@option:radio"
+msgid "SHA-1"
+msgstr ""
+
+#: src/contents/ui/TOTPDetailsForm.qml:98
+#, kde-format
+msgctxt "@option:radio"
+msgid "SHA-256"
+msgstr ""
+
+#: src/contents/ui/TOTPDetailsForm.qml:110
+#, kde-format
+msgctxt "@option:radio"
+msgid "SHA-512"
+msgstr ""
+
+#: src/contents/ui/UnlockAccounts.qml:25
+#, kde-format
+msgid "Failed to unlock your accounts"
+msgstr ""
+
+#: src/contents/ui/UnlockAccounts.qml:43
+#, kde-format
+msgid "Please provide the password to unlock your accounts"
+msgstr ""
+
+#: src/contents/ui/UnlockAccounts.qml:61
+#, kde-format
+msgctxt "@action:button"
+msgid "Unlock"
+msgstr ""
+
+#: src/main.cpp:70
+#, kde-format
+msgctxt "@title"
+msgid "Keysmith"
+msgstr ""
+
+#: src/main.cpp:73
+#, kde-format
+msgid "generate two-factor authentication (2FA) tokens"
+msgstr ""
+
+#: src/main.cpp:76
+#, kde-format
+msgid "Keysmith"
+msgstr ""
+
+#: src/main.cpp:80
+#, kde-format
+msgid "© 2019 KDE Community"
+msgstr ""
diff -pruN 24.08.1-1/po/hu/keysmith.po 25.03.90-1/po/hu/keysmith.po
--- 24.08.1-1/po/hu/keysmith.po	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/po/hu/keysmith.po	2025-03-27 10:13:04.000000000 +0000
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: keysmith\n"
 "Report-Msgid-Bugs-To: https://bugs.kde.org\n"
-"POT-Creation-Date: 2024-05-03 00:40+0000\n"
-"PO-Revision-Date: 2024-05-18 14:21+0200\n"
+"POT-Creation-Date: 2025-02-09 00:43+0000\n"
+"PO-Revision-Date: 2024-10-10 21:40+0200\n"
 "Last-Translator: Kristof Kiszel <ulysses@fsf.hu>\n"
 "Language-Team: Hungarian <kde-l10n-hu@kde.org>\n"
 "Language: hu\n"
@@ -16,7 +16,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Lokalize 24.02.2\n"
+"X-Generator: Lokalize 24.08.1\n"
 
 #: src/app/cli.cpp:133
 #, kde-format
@@ -27,13 +27,13 @@ msgstr ""
 "Opcionálisan hozzáadandó fiók, otpauth:// URI formátumban (például egy QR-"
 "kódból)"
 
-#: src/app/flows_p.cpp:108 src/app/flows_p.cpp:248
+#: src/app/flows_p.cpp:111 src/app/flows_p.cpp:285
 #, kde-format
 msgctxt "@title:window"
 msgid "Invalid account"
 msgstr "Érvénytelen fiók"
 
-#: src/app/flows_p.cpp:109
+#: src/app/flows_p.cpp:112
 #, kde-format
 msgctxt "@info:label"
 msgid ""
@@ -43,7 +43,7 @@ msgstr ""
 "A hozzáadni kívánt fiók érvénytelen. Kiléphet az alkalmazásból, vagy "
 "folytathatja a fiók hozzáadása nélkül."
 
-#: src/app/flows_p.cpp:249
+#: src/app/flows_p.cpp:286
 #, kde-format
 msgctxt "@info:label"
 msgid ""
@@ -147,13 +147,13 @@ msgctxt "Notification shown in a passive
 msgid "Token copied to clipboard!"
 msgstr "Token másolva a vágólapra."
 
-#: src/contents/ui/AccountNameForm.qml:64
+#: src/contents/ui/AccountNameForm.qml:81
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Account name:"
 msgstr "Fióknév:"
 
-#: src/contents/ui/AccountNameForm.qml:83
+#: src/contents/ui/AccountNameForm.qml:100
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Account issuer:"
@@ -177,12 +177,12 @@ msgctxt "error message shown when loadin
 msgid "Some accounts failed to load."
 msgstr "Néhány fiók betöltése meghiúsult."
 
-#: src/contents/ui/AccountsOverview.qml:101
+#: src/contents/ui/AccountsOverview.qml:91
 #, kde-format
 msgid "No accounts added"
 msgstr "Nincsenek fiókok hozzáadva"
 
-#: src/contents/ui/AccountsOverview.qml:106
+#: src/contents/ui/AccountsOverview.qml:96
 #, kde-format
 msgctxt ""
 "@action:button add new account, shown instead of overview list when no "
@@ -190,90 +190,103 @@ msgctxt ""
 msgid "Add Account"
 msgstr "Fiók hozzáadása"
 
-#: src/contents/ui/AccountsOverview.qml:172
+#: src/contents/ui/AccountsOverview.qml:163
 #, kde-format
 msgctxt "@action:button add new account, shown in toolbar"
 msgid "Add"
 msgstr "Hozzáadás"
 
+#: src/contents/ui/AccountsOverview.qml:176
+#, kde-format
+msgctxt "@action:button import accounts, shown in toolbar"
+msgid "Import"
+msgstr ""
+
+#: src/contents/ui/AccountsOverview.qml:189
+#, kde-format
+msgctxt ""
+"@action:button import an account by scanning a QR code, shown in toolbar"
+msgid "Scan QR Code"
+msgstr ""
+
 #: src/contents/ui/AddAccount.qml:22
 #, kde-format
 msgctxt "@title:window"
 msgid "Add new account"
 msgstr "Új fiók hozzáadása"
 
-#: src/contents/ui/AddAccount.qml:45
+#: src/contents/ui/AddAccount.qml:50
 #, kde-format
 msgctxt "@action:button cancel and dismiss the add account form"
 msgid "Cancel"
 msgstr "Mégsem"
 
-#: src/contents/ui/AddAccount.qml:52
+#: src/contents/ui/AddAccount.qml:57
 #, kde-format
 msgctxt "@action:button Dismiss the error page and quit Keysmith"
 msgid "Quit"
 msgstr "Kilépés"
 
-#: src/contents/ui/AddAccount.qml:61
+#: src/contents/ui/AddAccount.qml:66
 #, kde-format
 msgctxt "@action:button"
 msgid "Add"
 msgstr "Hozzáadás"
 
-#: src/contents/ui/AddAccount.qml:81
+#: src/contents/ui/AddAccount.qml:86
 #, kde-format
 msgctxt "@label:chooser"
 msgid "Account type:"
 msgstr "Fióktípus:"
 
-#: src/contents/ui/AddAccount.qml:90
+#: src/contents/ui/AddAccount.qml:95
 #, kde-format
 msgctxt "@option:radio"
 msgid "Time-based OTP"
 msgstr "Időalapú OTP"
 
-#: src/contents/ui/AddAccount.qml:101
+#: src/contents/ui/AddAccount.qml:106
 #, kde-format
 msgctxt "@option:radio"
 msgid "Hash-based OTP"
 msgstr "Ellenőrzőösszeg-alapú OTP"
 
-#: src/contents/ui/AddAccount.qml:113
+#: src/contents/ui/AddAccount.qml:118
 #, kde-format
 msgid "Token secret"
 msgstr "Token titkos kulcsa"
 
-#: src/contents/ui/AddAccount.qml:116
+#: src/contents/ui/AddAccount.qml:120
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Secret key:"
 msgstr "Titkos kulcs:"
 
-#: src/contents/ui/AddAccount.qml:132
+#: src/contents/ui/AddAccount.qml:139
 #, kde-format
 msgctxt "Button to reveal form for configuring additional token details"
 msgid "Details"
 msgstr "Részletek"
 
-#: src/contents/ui/AddAccount.qml:140
+#: src/contents/ui/AddAccount.qml:147
 #, kde-format
 msgctxt "@title:group"
 msgid "HOTP Details:"
 msgstr "HOTP részletek:"
 
-#: src/contents/ui/AddAccount.qml:153
+#: src/contents/ui/AddAccount.qml:160
 #, kde-format
 msgctxt "@label"
 msgid "TOTP Details:"
 msgstr "TOTP részletek"
 
-#: src/contents/ui/ErrorPage.qml:33
+#: src/contents/ui/ErrorPage.qml:34
 #, kde-format
 msgctxt "@action:button Button to dismiss the error page"
 msgid "Continue"
 msgstr "Folytatás"
 
-#: src/contents/ui/ErrorPage.qml:40
+#: src/contents/ui/ErrorPage.qml:41
 #, kde-format
 msgctxt "@action:button Dismiss the error page and quit Keysmtih"
 msgid "Quit"
@@ -324,6 +337,113 @@ msgctxt "@label:spinbox"
 msgid "Truncation offset:"
 msgstr "Levágás eltolása:"
 
+#: src/contents/ui/ImportAccount.qml:21
+#, fuzzy, kde-format
+#| msgctxt "@title:window"
+#| msgid "Accounts"
+msgctxt "@title:window"
+msgid "Import Accounts"
+msgstr "Fiókok"
+
+#: src/contents/ui/ImportAccount.qml:52
+#, kde-format
+msgid "Import format"
+msgstr ""
+
+#. i18n strings
+#: src/contents/ui/ImportAccount.qml:58
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "andOTP Encrypted JSON"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:59
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "andOTP Plain JSON"
+msgstr ""
+
+#. i18nc("@item:inlistbox", "Aegis Encrypted JSON"), value: Models.ValidatedImportInput.AegisEncryptedJSON});
+#: src/contents/ui/ImportAccount.qml:61
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "Aegis Plain JSON"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:62
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "FreeOTP URIs"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:78
+#, kde-format
+msgctxt "@label:chooser"
+msgid "Backup file:"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:81
+#, kde-format
+msgctxt "@info:placeholder"
+msgid "No file selected"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:85
+#, kde-format
+msgctxt "@title:window"
+msgid "Select file"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:99
+#, fuzzy, kde-format
+#| msgctxt "@label:textbox"
+#| msgid "Verify password:"
+msgctxt "@info:placeholder"
+msgid "Decryption password"
+msgstr "Jelszó megerősítése:"
+
+#: src/contents/ui/ImportAccount.qml:101 src/contents/ui/UnlockAccounts.qml:49
+#, kde-format
+msgctxt "@label:textbox"
+msgid "Password:"
+msgstr "Jelszó:"
+
+#: src/contents/ui/ImportAccount.qml:112
+#, kde-format
+msgctxt "@action:button"
+msgid "Import"
+msgstr ""
+
+#: src/contents/ui/KeysmithGlobalDrawer.qml:12
+#: src/contents/ui/KeysmithGlobalDrawer.qml:15
+#, kde-format
+msgid "About Keysmith"
+msgstr "A Keysmith névjegye"
+
+#: src/contents/ui/QRScanPage.qml:21
+#, kde-format
+msgctxt "@title"
+msgid "Scan a QR code"
+msgstr ""
+
+#: src/contents/ui/QRScanPage.qml:31
+#, kde-format
+msgctxt "@action:intoolbar"
+msgid "Select Camera"
+msgstr ""
+
+#: src/contents/ui/QRScanPage.qml:42
+#, kde-format
+msgctxt "@title:dialog"
+msgid "Select Camera"
+msgstr ""
+
+#: src/contents/ui/QRScanPage.qml:61
+#, kde-format
+msgctxt "@action:button"
+msgid "Close"
+msgstr ""
+
 #: src/contents/ui/RenameAccount.qml:17
 #, kde-format
 msgctxt "@title:window"
@@ -353,13 +473,13 @@ msgstr "Mégsem"
 msgid "Add"
 msgstr "Hozzáadás"
 
-#: src/contents/ui/SetupPassword.qml:22 src/contents/ui/UnlockAccounts.qml:22
+#: src/contents/ui/SetupPassword.qml:21 src/contents/ui/UnlockAccounts.qml:21
 #, kde-format
 msgctxt "@title:window"
 msgid "Password"
 msgstr "Jelszó"
 
-#: src/contents/ui/SetupPassword.qml:28
+#: src/contents/ui/SetupPassword.qml:27
 #, kde-format
 msgid "Failed to set up your password"
 msgstr "A jelszó beállítása sikertelen"
@@ -369,19 +489,19 @@ msgstr "A jelszó beállítása sikertel
 msgid "Choose a password to protect your accounts"
 msgstr "Válasszon egy jelszót fiókjai védelméhez"
 
-#: src/contents/ui/SetupPassword.qml:49
+#: src/contents/ui/SetupPassword.qml:48
 #, kde-format
 msgctxt "@label:textbox"
 msgid "New Password:"
 msgstr "Új jelszó:"
 
-#: src/contents/ui/SetupPassword.qml:60
+#: src/contents/ui/SetupPassword.qml:61
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Verify password:"
 msgstr "Jelszó megerősítése:"
 
-#: src/contents/ui/SetupPassword.qml:68
+#: src/contents/ui/SetupPassword.qml:72
 #, kde-format
 msgctxt "@action:button"
 msgid "Apply"
@@ -429,7 +549,7 @@ msgctxt "@option:radio"
 msgid "SHA-512"
 msgstr "SHA-512"
 
-#: src/contents/ui/UnlockAccounts.qml:26
+#: src/contents/ui/UnlockAccounts.qml:25
 #, kde-format
 msgid "Failed to unlock your accounts"
 msgstr "A fiókok feloldása sikertelen"
@@ -439,24 +559,33 @@ msgstr "A fiókok feloldása sikertelen"
 msgid "Please provide the password to unlock your accounts"
 msgstr "Adja meg a jelszót a fiókok feloldásához"
 
-#: src/contents/ui/UnlockAccounts.qml:50
-#, kde-format
-msgctxt "@label:textbox"
-msgid "Password:"
-msgstr "Jelszó:"
-
-#: src/contents/ui/UnlockAccounts.qml:59
+#: src/contents/ui/UnlockAccounts.qml:61
 #, kde-format
 msgctxt "@action:button"
 msgid "Unlock"
 msgstr "Feloldás"
 
-#: src/main.cpp:67
+#: src/main.cpp:70
 #, kde-format
 msgctxt "@title"
 msgid "Keysmith"
 msgstr "Keysmith"
 
+#: src/main.cpp:73
+#, kde-format
+msgid "generate two-factor authentication (2FA) tokens"
+msgstr "kétfaktoros hitelesítési (2FA) tokenek előállítása"
+
+#: src/main.cpp:76
+#, kde-format
+msgid "Keysmith"
+msgstr "Keysmith"
+
+#: src/main.cpp:80
+#, kde-format
+msgid "© 2019 KDE Community"
+msgstr "© A KDE Közösség, 2019."
+
 #~ msgctxt "Button cancelling account removal"
 #~ msgid "Cancel"
 #~ msgstr "Mégsem"
diff -pruN 24.08.1-1/po/ia/keysmith.po 25.03.90-1/po/ia/keysmith.po
--- 24.08.1-1/po/ia/keysmith.po	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/po/ia/keysmith.po	2025-03-27 10:13:04.000000000 +0000
@@ -1,14 +1,14 @@
 # Copyright (C) 2023 This file is copyright:
 # This file is distributed under the same license as the keysmith package.
 #
-# SPDX-FileCopyrightText: 2020, 2021, 2023, 2024 giovanni <g.sora@tiscali.it>
+# SPDX-FileCopyrightText: 2020, 2021, 2023, 2024, 2025 giovanni <g.sora@tiscali.it>
 # giovanni <g.sora@tiscali.it>, 2023.
 msgid ""
 msgstr ""
 "Project-Id-Version: keysmith\n"
 "Report-Msgid-Bugs-To: https://bugs.kde.org\n"
-"POT-Creation-Date: 2024-05-03 00:40+0000\n"
-"PO-Revision-Date: 2024-06-28 11:27+0200\n"
+"POT-Creation-Date: 2025-02-09 00:43+0000\n"
+"PO-Revision-Date: 2025-01-14 18:13+0100\n"
 "Last-Translator: giovanni <g.sora@tiscali.it>\n"
 "Language-Team: Interlingua <kde-i18n-doc@kde.org>\n"
 "Language: ia\n"
@@ -27,13 +27,13 @@ msgstr ""
 "Conto Optional a adder, formattate como otpauth:// URI (p.ex. ab un codice a "
 "QR)"
 
-#: src/app/flows_p.cpp:108 src/app/flows_p.cpp:248
+#: src/app/flows_p.cpp:111 src/app/flows_p.cpp:285
 #, kde-format
 msgctxt "@title:window"
 msgid "Invalid account"
 msgstr "Conto invalide"
 
-#: src/app/flows_p.cpp:109
+#: src/app/flows_p.cpp:112
 #, kde-format
 msgctxt "@info:label"
 msgid ""
@@ -43,7 +43,7 @@ msgstr ""
 "Le conto que tu es essayante a adder es invalide. Tu pote o abandonar le app "
 "o continuar sin adder le conto."
 
-#: src/app/flows_p.cpp:249
+#: src/app/flows_p.cpp:286
 #, kde-format
 msgctxt "@info:label"
 msgid ""
@@ -148,13 +148,13 @@ msgctxt "Notification shown in a passive
 msgid "Token copied to clipboard!"
 msgstr "Token (indicio)  copiate a area de transferentia!"
 
-#: src/contents/ui/AccountNameForm.qml:64
+#: src/contents/ui/AccountNameForm.qml:81
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Account name:"
 msgstr "Nomine de conto:"
 
-#: src/contents/ui/AccountNameForm.qml:83
+#: src/contents/ui/AccountNameForm.qml:100
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Account issuer:"
@@ -178,12 +178,12 @@ msgctxt "error message shown when loadin
 msgid "Some accounts failed to load."
 msgstr "Alcun contos falleva a cargar."
 
-#: src/contents/ui/AccountsOverview.qml:101
+#: src/contents/ui/AccountsOverview.qml:91
 #, kde-format
 msgid "No accounts added"
 msgstr "Necun contos addite"
 
-#: src/contents/ui/AccountsOverview.qml:106
+#: src/contents/ui/AccountsOverview.qml:96
 #, kde-format
 msgctxt ""
 "@action:button add new account, shown instead of overview list when no "
@@ -191,90 +191,103 @@ msgctxt ""
 msgid "Add Account"
 msgstr "Adde conto"
 
-#: src/contents/ui/AccountsOverview.qml:172
+#: src/contents/ui/AccountsOverview.qml:163
 #, kde-format
 msgctxt "@action:button add new account, shown in toolbar"
 msgid "Add"
 msgstr "Adde"
 
+#: src/contents/ui/AccountsOverview.qml:176
+#, kde-format
+msgctxt "@action:button import accounts, shown in toolbar"
+msgid "Import"
+msgstr "Importa"
+
+#: src/contents/ui/AccountsOverview.qml:189
+#, kde-format
+msgctxt ""
+"@action:button import an account by scanning a QR code, shown in toolbar"
+msgid "Scan QR Code"
+msgstr "Scande codice QR"
+
 #: src/contents/ui/AddAccount.qml:22
 #, kde-format
 msgctxt "@title:window"
 msgid "Add new account"
 msgstr "Adde un nove conto"
 
-#: src/contents/ui/AddAccount.qml:45
+#: src/contents/ui/AddAccount.qml:50
 #, kde-format
 msgctxt "@action:button cancel and dismiss the add account form"
 msgid "Cancel"
 msgstr "Cancella"
 
-#: src/contents/ui/AddAccount.qml:52
+#: src/contents/ui/AddAccount.qml:57
 #, kde-format
 msgctxt "@action:button Dismiss the error page and quit Keysmith"
 msgid "Quit"
 msgstr "Quita"
 
-#: src/contents/ui/AddAccount.qml:61
+#: src/contents/ui/AddAccount.qml:66
 #, kde-format
 msgctxt "@action:button"
 msgid "Add"
 msgstr "Adde"
 
-#: src/contents/ui/AddAccount.qml:81
+#: src/contents/ui/AddAccount.qml:86
 #, kde-format
 msgctxt "@label:chooser"
 msgid "Account type:"
 msgstr "Typo de conto:"
 
-#: src/contents/ui/AddAccount.qml:90
+#: src/contents/ui/AddAccount.qml:95
 #, kde-format
 msgctxt "@option:radio"
 msgid "Time-based OTP"
 msgstr "OTP basate sur tempore"
 
-#: src/contents/ui/AddAccount.qml:101
+#: src/contents/ui/AddAccount.qml:106
 #, kde-format
 msgctxt "@option:radio"
 msgid "Hash-based OTP"
 msgstr "OTP basate sur Hash"
 
-#: src/contents/ui/AddAccount.qml:113
+#: src/contents/ui/AddAccount.qml:118
 #, kde-format
 msgid "Token secret"
 msgstr "Secreto de token :"
 
-#: src/contents/ui/AddAccount.qml:116
+#: src/contents/ui/AddAccount.qml:120
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Secret key:"
 msgstr "Clave secrete:"
 
-#: src/contents/ui/AddAccount.qml:132
+#: src/contents/ui/AddAccount.qml:139
 #, kde-format
 msgctxt "Button to reveal form for configuring additional token details"
 msgid "Details"
 msgstr "Detalios"
 
-#: src/contents/ui/AddAccount.qml:140
+#: src/contents/ui/AddAccount.qml:147
 #, kde-format
 msgctxt "@title:group"
 msgid "HOTP Details:"
 msgstr "Detalios de HOTP:"
 
-#: src/contents/ui/AddAccount.qml:153
+#: src/contents/ui/AddAccount.qml:160
 #, kde-format
 msgctxt "@label"
 msgid "TOTP Details:"
 msgstr "Detalios de TOTP:"
 
-#: src/contents/ui/ErrorPage.qml:33
+#: src/contents/ui/ErrorPage.qml:34
 #, kde-format
 msgctxt "@action:button Button to dismiss the error page"
 msgid "Continue"
 msgstr "Continua"
 
-#: src/contents/ui/ErrorPage.qml:40
+#: src/contents/ui/ErrorPage.qml:41
 #, kde-format
 msgctxt "@action:button Dismiss the error page and quit Keysmtih"
 msgid "Quit"
@@ -325,6 +338,109 @@ msgctxt "@label:spinbox"
 msgid "Truncation offset:"
 msgstr "Displaciamento de truncation:"
 
+#: src/contents/ui/ImportAccount.qml:21
+#, kde-format
+msgctxt "@title:window"
+msgid "Import Accounts"
+msgstr "Importa Contos"
+
+#: src/contents/ui/ImportAccount.qml:52
+#, kde-format
+msgid "Import format"
+msgstr "Formato de importation"
+
+#. i18n strings
+#: src/contents/ui/ImportAccount.qml:58
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "andOTP Encrypted JSON"
+msgstr "andOTP Encrypted JSON"
+
+#: src/contents/ui/ImportAccount.qml:59
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "andOTP Plain JSON"
+msgstr "andOTP Plain JSON"
+
+#. i18nc("@item:inlistbox", "Aegis Encrypted JSON"), value: Models.ValidatedImportInput.AegisEncryptedJSON});
+#: src/contents/ui/ImportAccount.qml:61
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "Aegis Plain JSON"
+msgstr "Aegis Plain JSON"
+
+#: src/contents/ui/ImportAccount.qml:62
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "FreeOTP URIs"
+msgstr "FreeOTP URIs"
+
+#: src/contents/ui/ImportAccount.qml:78
+#, kde-format
+msgctxt "@label:chooser"
+msgid "Backup file:"
+msgstr "File de retrocopia:"
+
+#: src/contents/ui/ImportAccount.qml:81
+#, kde-format
+msgctxt "@info:placeholder"
+msgid "No file selected"
+msgstr "Nulle file seligite."
+
+#: src/contents/ui/ImportAccount.qml:85
+#, kde-format
+msgctxt "@title:window"
+msgid "Select file"
+msgstr "Selige File"
+
+#: src/contents/ui/ImportAccount.qml:99
+#, kde-format
+msgctxt "@info:placeholder"
+msgid "Decryption password"
+msgstr "Contrasigno de decryptation"
+
+#: src/contents/ui/ImportAccount.qml:101 src/contents/ui/UnlockAccounts.qml:49
+#, kde-format
+msgctxt "@label:textbox"
+msgid "Password:"
+msgstr "Contrasigno:"
+
+#: src/contents/ui/ImportAccount.qml:112
+#, kde-format
+msgctxt "@action:button"
+msgid "Import"
+msgstr "Importa"
+
+#: src/contents/ui/KeysmithGlobalDrawer.qml:12
+#: src/contents/ui/KeysmithGlobalDrawer.qml:15
+#, kde-format
+msgid "About Keysmith"
+msgstr "A proposito de Keysmith"
+
+#: src/contents/ui/QRScanPage.qml:21
+#, kde-format
+msgctxt "@title"
+msgid "Scan a QR code"
+msgstr "Scande un codice QR"
+
+#: src/contents/ui/QRScanPage.qml:31
+#, kde-format
+msgctxt "@action:intoolbar"
+msgid "Select Camera"
+msgstr "Selige camera"
+
+#: src/contents/ui/QRScanPage.qml:42
+#, kde-format
+msgctxt "@title:dialog"
+msgid "Select Camera"
+msgstr "Selige camera"
+
+#: src/contents/ui/QRScanPage.qml:61
+#, kde-format
+msgctxt "@action:button"
+msgid "Close"
+msgstr "Claude"
+
 #: src/contents/ui/RenameAccount.qml:17
 #, kde-format
 msgctxt "@title:window"
@@ -354,13 +470,13 @@ msgstr "Cancella"
 msgid "Add"
 msgstr "Adde"
 
-#: src/contents/ui/SetupPassword.qml:22 src/contents/ui/UnlockAccounts.qml:22
+#: src/contents/ui/SetupPassword.qml:21 src/contents/ui/UnlockAccounts.qml:21
 #, kde-format
 msgctxt "@title:window"
 msgid "Password"
 msgstr "Contrasigno"
 
-#: src/contents/ui/SetupPassword.qml:28
+#: src/contents/ui/SetupPassword.qml:27
 #, kde-format
 msgid "Failed to set up your password"
 msgstr "Il falleva a configurar tu contrasigno"
@@ -370,19 +486,19 @@ msgstr "Il falleva a configurar tu contr
 msgid "Choose a password to protect your accounts"
 msgstr "Selige un contrsigno per proteger tu contos"
 
-#: src/contents/ui/SetupPassword.qml:49
+#: src/contents/ui/SetupPassword.qml:48
 #, kde-format
 msgctxt "@label:textbox"
 msgid "New Password:"
 msgstr "Nove contrasigno:"
 
-#: src/contents/ui/SetupPassword.qml:60
+#: src/contents/ui/SetupPassword.qml:61
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Verify password:"
 msgstr "Verifica contrasigno:"
 
-#: src/contents/ui/SetupPassword.qml:68
+#: src/contents/ui/SetupPassword.qml:72
 #, kde-format
 msgctxt "@action:button"
 msgid "Apply"
@@ -430,7 +546,7 @@ msgctxt "@option:radio"
 msgid "SHA-512"
 msgstr "Sha-512"
 
-#: src/contents/ui/UnlockAccounts.qml:26
+#: src/contents/ui/UnlockAccounts.qml:25
 #, kde-format
 msgid "Failed to unlock your accounts"
 msgstr "Il falleva a disblocar tu contos"
@@ -440,24 +556,33 @@ msgstr "Il falleva a disblocar tu contos
 msgid "Please provide the password to unlock your accounts"
 msgstr "Pro favor tu forni le contrasigno per disblocar tu contos"
 
-#: src/contents/ui/UnlockAccounts.qml:50
-#, kde-format
-msgctxt "@label:textbox"
-msgid "Password:"
-msgstr "Contrasigno:"
-
-#: src/contents/ui/UnlockAccounts.qml:59
+#: src/contents/ui/UnlockAccounts.qml:61
 #, kde-format
 msgctxt "@action:button"
 msgid "Unlock"
 msgstr "Disbloca"
 
-#: src/main.cpp:67
+#: src/main.cpp:70
 #, kde-format
 msgctxt "@title"
 msgid "Keysmith"
 msgstr "Keysmith"
 
+#: src/main.cpp:73
+#, kde-format
+msgid "generate two-factor authentication (2FA) tokens"
+msgstr "genera indicios de authentication a duo factores (2FA)"
+
+#: src/main.cpp:76
+#, kde-format
+msgid "Keysmith"
+msgstr "Keysmith"
+
+#: src/main.cpp:80
+#, kde-format
+msgid "© 2019 KDE Community"
+msgstr "© 2019 Communitate de KDE"
+
 #~ msgctxt "Button cancelling account removal"
 #~ msgid "Cancel"
 #~ msgstr "Cancella"
diff -pruN 24.08.1-1/po/it/keysmith.po 25.03.90-1/po/it/keysmith.po
--- 24.08.1-1/po/it/keysmith.po	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/po/it/keysmith.po	2025-03-27 10:13:04.000000000 +0000
@@ -1,13 +1,13 @@
 # Copyright (C) 2023 This file is copyright:
 # This file is distributed under the same license as the keysmith package.
-# SPDX-FileCopyrightText: 2020, 2021, 2023, 2024 Paolo Zamponi <feus73@gmail.com>
+# SPDX-FileCopyrightText: 2020, 2021, 2023, 2024, 2025 Paolo Zamponi <feus73@gmail.com>
 #
 msgid ""
 msgstr ""
 "Project-Id-Version: keysmith\n"
 "Report-Msgid-Bugs-To: https://bugs.kde.org\n"
-"POT-Creation-Date: 2024-05-03 00:40+0000\n"
-"PO-Revision-Date: 2024-01-14 08:44+0100\n"
+"POT-Creation-Date: 2025-02-09 00:43+0000\n"
+"PO-Revision-Date: 2025-01-16 14:44+0100\n"
 "Last-Translator: Paolo Zamponi <feus73@gmail.com>\n"
 "Language-Team: Italian <kde-i18n-it@kde.org>\n"
 "Language: it\n"
@@ -15,7 +15,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Lokalize 23.08.4\n"
+"X-Generator: Lokalize 24.12.1\n"
 
 #: src/app/cli.cpp:133
 #, kde-format
@@ -26,13 +26,13 @@ msgstr ""
 "Account facoltativo da aggiungere, formattato come URI otpauth:// (ad es. da "
 "un codice QR)"
 
-#: src/app/flows_p.cpp:108 src/app/flows_p.cpp:248
+#: src/app/flows_p.cpp:111 src/app/flows_p.cpp:285
 #, kde-format
 msgctxt "@title:window"
 msgid "Invalid account"
 msgstr "Account non valido"
 
-#: src/app/flows_p.cpp:109
+#: src/app/flows_p.cpp:112
 #, kde-format
 msgctxt "@info:label"
 msgid ""
@@ -42,7 +42,7 @@ msgstr ""
 "L'account che stai provando ad aggiungere non è valido. Puoi uscire dall'app "
 "oppure continuare senza aggiungerlo."
 
-#: src/app/flows_p.cpp:249
+#: src/app/flows_p.cpp:286
 #, kde-format
 msgctxt "@info:label"
 msgid ""
@@ -147,13 +147,13 @@ msgctxt "Notification shown in a passive
 msgid "Token copied to clipboard!"
 msgstr "Token copiato negli appunti."
 
-#: src/contents/ui/AccountNameForm.qml:64
+#: src/contents/ui/AccountNameForm.qml:81
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Account name:"
 msgstr "Nome dell'account:"
 
-#: src/contents/ui/AccountNameForm.qml:83
+#: src/contents/ui/AccountNameForm.qml:100
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Account issuer:"
@@ -177,12 +177,12 @@ msgctxt "error message shown when loadin
 msgid "Some accounts failed to load."
 msgstr "Impossibile caricare alcuni account."
 
-#: src/contents/ui/AccountsOverview.qml:101
+#: src/contents/ui/AccountsOverview.qml:91
 #, kde-format
 msgid "No accounts added"
 msgstr "Nessun account aggiunto"
 
-#: src/contents/ui/AccountsOverview.qml:106
+#: src/contents/ui/AccountsOverview.qml:96
 #, kde-format
 msgctxt ""
 "@action:button add new account, shown instead of overview list when no "
@@ -190,90 +190,103 @@ msgctxt ""
 msgid "Add Account"
 msgstr "Aggiungi account"
 
-#: src/contents/ui/AccountsOverview.qml:172
+#: src/contents/ui/AccountsOverview.qml:163
 #, kde-format
 msgctxt "@action:button add new account, shown in toolbar"
 msgid "Add"
 msgstr "Aggiungi"
 
+#: src/contents/ui/AccountsOverview.qml:176
+#, kde-format
+msgctxt "@action:button import accounts, shown in toolbar"
+msgid "Import"
+msgstr "Importa"
+
+#: src/contents/ui/AccountsOverview.qml:189
+#, kde-format
+msgctxt ""
+"@action:button import an account by scanning a QR code, shown in toolbar"
+msgid "Scan QR Code"
+msgstr "Scansiona codice QR"
+
 #: src/contents/ui/AddAccount.qml:22
 #, kde-format
 msgctxt "@title:window"
 msgid "Add new account"
 msgstr "Aggiungi nuovo account"
 
-#: src/contents/ui/AddAccount.qml:45
+#: src/contents/ui/AddAccount.qml:50
 #, kde-format
 msgctxt "@action:button cancel and dismiss the add account form"
 msgid "Cancel"
 msgstr "Annulla"
 
-#: src/contents/ui/AddAccount.qml:52
+#: src/contents/ui/AddAccount.qml:57
 #, kde-format
 msgctxt "@action:button Dismiss the error page and quit Keysmith"
 msgid "Quit"
 msgstr "Esci"
 
-#: src/contents/ui/AddAccount.qml:61
+#: src/contents/ui/AddAccount.qml:66
 #, kde-format
 msgctxt "@action:button"
 msgid "Add"
 msgstr "Aggiungi"
 
-#: src/contents/ui/AddAccount.qml:81
+#: src/contents/ui/AddAccount.qml:86
 #, kde-format
 msgctxt "@label:chooser"
 msgid "Account type:"
 msgstr "Tipo di account:"
 
-#: src/contents/ui/AddAccount.qml:90
+#: src/contents/ui/AddAccount.qml:95
 #, kde-format
 msgctxt "@option:radio"
 msgid "Time-based OTP"
 msgstr "OTP basata sull'orario"
 
-#: src/contents/ui/AddAccount.qml:101
+#: src/contents/ui/AddAccount.qml:106
 #, kde-format
 msgctxt "@option:radio"
 msgid "Hash-based OTP"
 msgstr "OTP basata sull'hash"
 
-#: src/contents/ui/AddAccount.qml:113
+#: src/contents/ui/AddAccount.qml:118
 #, kde-format
 msgid "Token secret"
 msgstr "Segreto del token"
 
-#: src/contents/ui/AddAccount.qml:116
+#: src/contents/ui/AddAccount.qml:120
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Secret key:"
 msgstr "Chiave segreta:"
 
-#: src/contents/ui/AddAccount.qml:132
+#: src/contents/ui/AddAccount.qml:139
 #, kde-format
 msgctxt "Button to reveal form for configuring additional token details"
 msgid "Details"
 msgstr "Dettagli"
 
-#: src/contents/ui/AddAccount.qml:140
+#: src/contents/ui/AddAccount.qml:147
 #, kde-format
 msgctxt "@title:group"
 msgid "HOTP Details:"
 msgstr "Dettagli HOTP:"
 
-#: src/contents/ui/AddAccount.qml:153
+#: src/contents/ui/AddAccount.qml:160
 #, kde-format
 msgctxt "@label"
 msgid "TOTP Details:"
 msgstr "Dettagli TOTP:"
 
-#: src/contents/ui/ErrorPage.qml:33
+#: src/contents/ui/ErrorPage.qml:34
 #, kde-format
 msgctxt "@action:button Button to dismiss the error page"
 msgid "Continue"
 msgstr "Continua"
 
-#: src/contents/ui/ErrorPage.qml:40
+#: src/contents/ui/ErrorPage.qml:41
 #, kde-format
 msgctxt "@action:button Dismiss the error page and quit Keysmtih"
 msgid "Quit"
@@ -324,6 +337,109 @@ msgctxt "@label:spinbox"
 msgid "Truncation offset:"
 msgstr "Scostamento del troncamento:"
 
+#: src/contents/ui/ImportAccount.qml:21
+#, kde-format
+msgctxt "@title:window"
+msgid "Import Accounts"
+msgstr "Importa account"
+
+#: src/contents/ui/ImportAccount.qml:52
+#, kde-format
+msgid "Import format"
+msgstr "Formato di importazione"
+
+#. i18n strings
+#: src/contents/ui/ImportAccount.qml:58
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "andOTP Encrypted JSON"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:59
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "andOTP Plain JSON"
+msgstr ""
+
+#. i18nc("@item:inlistbox", "Aegis Encrypted JSON"), value: Models.ValidatedImportInput.AegisEncryptedJSON});
+#: src/contents/ui/ImportAccount.qml:61
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "Aegis Plain JSON"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:62
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "FreeOTP URIs"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:78
+#, kde-format
+msgctxt "@label:chooser"
+msgid "Backup file:"
+msgstr "File della copia di sicurezza:"
+
+#: src/contents/ui/ImportAccount.qml:81
+#, kde-format
+msgctxt "@info:placeholder"
+msgid "No file selected"
+msgstr "Nessun file selezionato"
+
+#: src/contents/ui/ImportAccount.qml:85
+#, kde-format
+msgctxt "@title:window"
+msgid "Select file"
+msgstr "Seleziona file"
+
+#: src/contents/ui/ImportAccount.qml:99
+#, kde-format
+msgctxt "@info:placeholder"
+msgid "Decryption password"
+msgstr "Password di decifratura"
+
+#: src/contents/ui/ImportAccount.qml:101 src/contents/ui/UnlockAccounts.qml:49
+#, kde-format
+msgctxt "@label:textbox"
+msgid "Password:"
+msgstr "Password:"
+
+#: src/contents/ui/ImportAccount.qml:112
+#, kde-format
+msgctxt "@action:button"
+msgid "Import"
+msgstr "Importa"
+
+#: src/contents/ui/KeysmithGlobalDrawer.qml:12
+#: src/contents/ui/KeysmithGlobalDrawer.qml:15
+#, kde-format
+msgid "About Keysmith"
+msgstr "Informazioni su Keysmith"
+
+#: src/contents/ui/QRScanPage.qml:21
+#, kde-format
+msgctxt "@title"
+msgid "Scan a QR code"
+msgstr "Scansione un codice QR"
+
+#: src/contents/ui/QRScanPage.qml:31
+#, kde-format
+msgctxt "@action:intoolbar"
+msgid "Select Camera"
+msgstr "Seleziona fotocamera"
+
+#: src/contents/ui/QRScanPage.qml:42
+#, kde-format
+msgctxt "@title:dialog"
+msgid "Select Camera"
+msgstr "Seleziona fotocamera"
+
+#: src/contents/ui/QRScanPage.qml:61
+#, kde-format
+msgctxt "@action:button"
+msgid "Close"
+msgstr "Chiudi"
+
 #: src/contents/ui/RenameAccount.qml:17
 #, kde-format
 msgctxt "@title:window"
@@ -353,13 +469,13 @@ msgstr "Annulla"
 msgid "Add"
 msgstr "Aggiungi"
 
-#: src/contents/ui/SetupPassword.qml:22 src/contents/ui/UnlockAccounts.qml:22
+#: src/contents/ui/SetupPassword.qml:21 src/contents/ui/UnlockAccounts.qml:21
 #, kde-format
 msgctxt "@title:window"
 msgid "Password"
 msgstr "Password"
 
-#: src/contents/ui/SetupPassword.qml:28
+#: src/contents/ui/SetupPassword.qml:27
 #, kde-format
 msgid "Failed to set up your password"
 msgstr "Impossibile impostare la tua password"
@@ -369,19 +485,19 @@ msgstr "Impossibile impostare la tua pas
 msgid "Choose a password to protect your accounts"
 msgstr "Scegli una password per proteggere i tuoi account"
 
-#: src/contents/ui/SetupPassword.qml:49
+#: src/contents/ui/SetupPassword.qml:48
 #, kde-format
 msgctxt "@label:textbox"
 msgid "New Password:"
 msgstr "Nuova password:"
 
-#: src/contents/ui/SetupPassword.qml:60
+#: src/contents/ui/SetupPassword.qml:61
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Verify password:"
 msgstr "Verifica password:"
 
-#: src/contents/ui/SetupPassword.qml:68
+#: src/contents/ui/SetupPassword.qml:72
 #, kde-format
 msgctxt "@action:button"
 msgid "Apply"
@@ -429,7 +545,7 @@ msgctxt "@option:radio"
 msgid "SHA-512"
 msgstr "SHA-512"
 
-#: src/contents/ui/UnlockAccounts.qml:26
+#: src/contents/ui/UnlockAccounts.qml:25
 #, kde-format
 msgid "Failed to unlock your accounts"
 msgstr "Impossibile sbloccare i tuoi account"
@@ -439,24 +555,33 @@ msgstr "Impossibile sbloccare i tuoi acc
 msgid "Please provide the password to unlock your accounts"
 msgstr "Fornisci la password per sbloccare i tuoi account"
 
-#: src/contents/ui/UnlockAccounts.qml:50
-#, kde-format
-msgctxt "@label:textbox"
-msgid "Password:"
-msgstr "Password:"
-
-#: src/contents/ui/UnlockAccounts.qml:59
+#: src/contents/ui/UnlockAccounts.qml:61
 #, kde-format
 msgctxt "@action:button"
 msgid "Unlock"
 msgstr "Sblocca"
 
-#: src/main.cpp:67
+#: src/main.cpp:70
 #, kde-format
 msgctxt "@title"
 msgid "Keysmith"
 msgstr "Keysmith"
 
+#: src/main.cpp:73
+#, kde-format
+msgid "generate two-factor authentication (2FA) tokens"
+msgstr "genera dei token per l'autenticazione a due fattori (2FA)"
+
+#: src/main.cpp:76
+#, kde-format
+msgid "Keysmith"
+msgstr "Keysmith"
+
+#: src/main.cpp:80
+#, kde-format
+msgid "© 2019 KDE Community"
+msgstr "© 2019 La comunità KDE"
+
 #~ msgctxt "Button cancelling account removal"
 #~ msgid "Cancel"
 #~ msgstr "Annulla"
diff -pruN 24.08.1-1/po/ja/keysmith.po 25.03.90-1/po/ja/keysmith.po
--- 24.08.1-1/po/ja/keysmith.po	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/po/ja/keysmith.po	2025-03-27 10:13:04.000000000 +0000
@@ -2,7 +2,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: keysmith\n"
 "Report-Msgid-Bugs-To: https://bugs.kde.org\n"
-"POT-Creation-Date: 2024-05-03 00:40+0000\n"
+"POT-Creation-Date: 2025-02-09 00:43+0000\n"
 "PO-Revision-Date: 2020-01-02 12:19-0800\n"
 "Last-Translator: Japanese KDE translation team <kde-jp@kde.org>\n"
 "Language-Team: Japanese <kde-jp@kde.org>\n"
@@ -21,13 +21,13 @@ msgid ""
 "Optional account to add, formatted as otpauth:// URI (e.g. from a QR code)"
 msgstr ""
 
-#: src/app/flows_p.cpp:108 src/app/flows_p.cpp:248
+#: src/app/flows_p.cpp:111 src/app/flows_p.cpp:285
 #, kde-format
 msgctxt "@title:window"
 msgid "Invalid account"
 msgstr ""
 
-#: src/app/flows_p.cpp:109
+#: src/app/flows_p.cpp:112
 #, kde-format
 msgctxt "@info:label"
 msgid ""
@@ -35,7 +35,7 @@ msgid ""
 "or continue without adding the account."
 msgstr ""
 
-#: src/app/flows_p.cpp:249
+#: src/app/flows_p.cpp:286
 #, kde-format
 msgctxt "@info:label"
 msgid ""
@@ -131,13 +131,13 @@ msgctxt "Notification shown in a passive
 msgid "Token copied to clipboard!"
 msgstr ""
 
-#: src/contents/ui/AccountNameForm.qml:64
+#: src/contents/ui/AccountNameForm.qml:81
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Account name:"
 msgstr ""
 
-#: src/contents/ui/AccountNameForm.qml:83
+#: src/contents/ui/AccountNameForm.qml:100
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Account issuer:"
@@ -161,12 +161,12 @@ msgctxt "error message shown when loadin
 msgid "Some accounts failed to load."
 msgstr ""
 
-#: src/contents/ui/AccountsOverview.qml:101
+#: src/contents/ui/AccountsOverview.qml:91
 #, kde-format
 msgid "No accounts added"
 msgstr ""
 
-#: src/contents/ui/AccountsOverview.qml:106
+#: src/contents/ui/AccountsOverview.qml:96
 #, kde-format
 msgctxt ""
 "@action:button add new account, shown instead of overview list when no "
@@ -174,90 +174,103 @@ msgctxt ""
 msgid "Add Account"
 msgstr ""
 
-#: src/contents/ui/AccountsOverview.qml:172
+#: src/contents/ui/AccountsOverview.qml:163
 #, kde-format
 msgctxt "@action:button add new account, shown in toolbar"
 msgid "Add"
 msgstr ""
 
+#: src/contents/ui/AccountsOverview.qml:176
+#, kde-format
+msgctxt "@action:button import accounts, shown in toolbar"
+msgid "Import"
+msgstr ""
+
+#: src/contents/ui/AccountsOverview.qml:189
+#, kde-format
+msgctxt ""
+"@action:button import an account by scanning a QR code, shown in toolbar"
+msgid "Scan QR Code"
+msgstr ""
+
 #: src/contents/ui/AddAccount.qml:22
 #, kde-format
 msgctxt "@title:window"
 msgid "Add new account"
 msgstr ""
 
-#: src/contents/ui/AddAccount.qml:45
+#: src/contents/ui/AddAccount.qml:50
 #, kde-format
 msgctxt "@action:button cancel and dismiss the add account form"
 msgid "Cancel"
 msgstr ""
 
-#: src/contents/ui/AddAccount.qml:52
+#: src/contents/ui/AddAccount.qml:57
 #, kde-format
 msgctxt "@action:button Dismiss the error page and quit Keysmith"
 msgid "Quit"
 msgstr ""
 
-#: src/contents/ui/AddAccount.qml:61
+#: src/contents/ui/AddAccount.qml:66
 #, kde-format
 msgctxt "@action:button"
 msgid "Add"
 msgstr ""
 
-#: src/contents/ui/AddAccount.qml:81
+#: src/contents/ui/AddAccount.qml:86
 #, kde-format
 msgctxt "@label:chooser"
 msgid "Account type:"
 msgstr ""
 
-#: src/contents/ui/AddAccount.qml:90
+#: src/contents/ui/AddAccount.qml:95
 #, kde-format
 msgctxt "@option:radio"
 msgid "Time-based OTP"
 msgstr ""
 
-#: src/contents/ui/AddAccount.qml:101
+#: src/contents/ui/AddAccount.qml:106
 #, kde-format
 msgctxt "@option:radio"
 msgid "Hash-based OTP"
 msgstr ""
 
-#: src/contents/ui/AddAccount.qml:113
+#: src/contents/ui/AddAccount.qml:118
 #, kde-format
 msgid "Token secret"
 msgstr ""
 
-#: src/contents/ui/AddAccount.qml:116
+#: src/contents/ui/AddAccount.qml:120
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Secret key:"
 msgstr ""
 
-#: src/contents/ui/AddAccount.qml:132
+#: src/contents/ui/AddAccount.qml:139
 #, kde-format
 msgctxt "Button to reveal form for configuring additional token details"
 msgid "Details"
 msgstr ""
 
-#: src/contents/ui/AddAccount.qml:140
+#: src/contents/ui/AddAccount.qml:147
 #, kde-format
 msgctxt "@title:group"
 msgid "HOTP Details:"
 msgstr ""
 
-#: src/contents/ui/AddAccount.qml:153
+#: src/contents/ui/AddAccount.qml:160
 #, kde-format
 msgctxt "@label"
 msgid "TOTP Details:"
 msgstr ""
 
-#: src/contents/ui/ErrorPage.qml:33
+#: src/contents/ui/ErrorPage.qml:34
 #, kde-format
 msgctxt "@action:button Button to dismiss the error page"
 msgid "Continue"
 msgstr ""
 
-#: src/contents/ui/ErrorPage.qml:40
+#: src/contents/ui/ErrorPage.qml:41
 #, kde-format
 msgctxt "@action:button Dismiss the error page and quit Keysmtih"
 msgid "Quit"
@@ -308,6 +321,109 @@ msgctxt "@label:spinbox"
 msgid "Truncation offset:"
 msgstr ""
 
+#: src/contents/ui/ImportAccount.qml:21
+#, kde-format
+msgctxt "@title:window"
+msgid "Import Accounts"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:52
+#, kde-format
+msgid "Import format"
+msgstr ""
+
+#. i18n strings
+#: src/contents/ui/ImportAccount.qml:58
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "andOTP Encrypted JSON"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:59
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "andOTP Plain JSON"
+msgstr ""
+
+#. i18nc("@item:inlistbox", "Aegis Encrypted JSON"), value: Models.ValidatedImportInput.AegisEncryptedJSON});
+#: src/contents/ui/ImportAccount.qml:61
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "Aegis Plain JSON"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:62
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "FreeOTP URIs"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:78
+#, kde-format
+msgctxt "@label:chooser"
+msgid "Backup file:"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:81
+#, kde-format
+msgctxt "@info:placeholder"
+msgid "No file selected"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:85
+#, kde-format
+msgctxt "@title:window"
+msgid "Select file"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:99
+#, kde-format
+msgctxt "@info:placeholder"
+msgid "Decryption password"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:101 src/contents/ui/UnlockAccounts.qml:49
+#, kde-format
+msgctxt "@label:textbox"
+msgid "Password:"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:112
+#, kde-format
+msgctxt "@action:button"
+msgid "Import"
+msgstr ""
+
+#: src/contents/ui/KeysmithGlobalDrawer.qml:12
+#: src/contents/ui/KeysmithGlobalDrawer.qml:15
+#, kde-format
+msgid "About Keysmith"
+msgstr ""
+
+#: src/contents/ui/QRScanPage.qml:21
+#, kde-format
+msgctxt "@title"
+msgid "Scan a QR code"
+msgstr ""
+
+#: src/contents/ui/QRScanPage.qml:31
+#, kde-format
+msgctxt "@action:intoolbar"
+msgid "Select Camera"
+msgstr ""
+
+#: src/contents/ui/QRScanPage.qml:42
+#, kde-format
+msgctxt "@title:dialog"
+msgid "Select Camera"
+msgstr ""
+
+#: src/contents/ui/QRScanPage.qml:61
+#, kde-format
+msgctxt "@action:button"
+msgid "Close"
+msgstr ""
+
 #: src/contents/ui/RenameAccount.qml:17
 #, kde-format
 msgctxt "@title:window"
@@ -335,13 +451,13 @@ msgstr ""
 msgid "Add"
 msgstr ""
 
-#: src/contents/ui/SetupPassword.qml:22 src/contents/ui/UnlockAccounts.qml:22
+#: src/contents/ui/SetupPassword.qml:21 src/contents/ui/UnlockAccounts.qml:21
 #, kde-format
 msgctxt "@title:window"
 msgid "Password"
 msgstr ""
 
-#: src/contents/ui/SetupPassword.qml:28
+#: src/contents/ui/SetupPassword.qml:27
 #, kde-format
 msgid "Failed to set up your password"
 msgstr ""
@@ -351,19 +467,19 @@ msgstr ""
 msgid "Choose a password to protect your accounts"
 msgstr ""
 
-#: src/contents/ui/SetupPassword.qml:49
+#: src/contents/ui/SetupPassword.qml:48
 #, kde-format
 msgctxt "@label:textbox"
 msgid "New Password:"
 msgstr ""
 
-#: src/contents/ui/SetupPassword.qml:60
+#: src/contents/ui/SetupPassword.qml:61
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Verify password:"
 msgstr ""
 
-#: src/contents/ui/SetupPassword.qml:68
+#: src/contents/ui/SetupPassword.qml:72
 #, kde-format
 msgctxt "@action:button"
 msgid "Apply"
@@ -411,7 +527,7 @@ msgctxt "@option:radio"
 msgid "SHA-512"
 msgstr ""
 
-#: src/contents/ui/UnlockAccounts.qml:26
+#: src/contents/ui/UnlockAccounts.qml:25
 #, kde-format
 msgid "Failed to unlock your accounts"
 msgstr ""
@@ -421,20 +537,29 @@ msgstr ""
 msgid "Please provide the password to unlock your accounts"
 msgstr ""
 
-#: src/contents/ui/UnlockAccounts.qml:50
-#, kde-format
-msgctxt "@label:textbox"
-msgid "Password:"
-msgstr ""
-
-#: src/contents/ui/UnlockAccounts.qml:59
+#: src/contents/ui/UnlockAccounts.qml:61
 #, kde-format
 msgctxt "@action:button"
 msgid "Unlock"
 msgstr ""
 
-#: src/main.cpp:67
+#: src/main.cpp:70
 #, kde-format
 msgctxt "@title"
 msgid "Keysmith"
 msgstr ""
+
+#: src/main.cpp:73
+#, kde-format
+msgid "generate two-factor authentication (2FA) tokens"
+msgstr ""
+
+#: src/main.cpp:76
+#, kde-format
+msgid "Keysmith"
+msgstr ""
+
+#: src/main.cpp:80
+#, kde-format
+msgid "© 2019 KDE Community"
+msgstr ""
diff -pruN 24.08.1-1/po/ka/keysmith.po 25.03.90-1/po/ka/keysmith.po
--- 24.08.1-1/po/ka/keysmith.po	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/po/ka/keysmith.po	2025-03-27 10:13:04.000000000 +0000
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: keysmith\n"
 "Report-Msgid-Bugs-To: https://bugs.kde.org\n"
-"POT-Creation-Date: 2024-05-03 00:40+0000\n"
-"PO-Revision-Date: 2024-01-13 04:54+0100\n"
+"POT-Creation-Date: 2025-02-09 00:43+0000\n"
+"PO-Revision-Date: 2025-01-14 05:20+0100\n"
 "Last-Translator: Temuri Doghonadze <temuri.doghonadze@gmail.com>\n"
 "Language-Team: Georgian <kde-i18n-doc@kde.org>\n"
 "Language: ka\n"
@@ -16,7 +16,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Poedit 3.3.2\n"
+"X-Generator: Poedit 3.5\n"
 
 #: src/app/cli.cpp:133
 #, kde-format
@@ -27,13 +27,13 @@ msgstr ""
 "არასავალდებულო ანგარიშის დამატება. ფორმატით otpauth:// (მაგალითად, QR "
 "კოდიდან)"
 
-#: src/app/flows_p.cpp:108 src/app/flows_p.cpp:248
+#: src/app/flows_p.cpp:111 src/app/flows_p.cpp:285
 #, kde-format
 msgctxt "@title:window"
 msgid "Invalid account"
 msgstr "არასწორი ანგარიში"
 
-#: src/app/flows_p.cpp:109
+#: src/app/flows_p.cpp:112
 #, kde-format
 msgctxt "@info:label"
 msgid ""
@@ -43,7 +43,7 @@ msgstr ""
 "ანგარიში, რომლის დამატებასაც აპირებთ, არასწორია. შეგიძლიათ გახვიდეთ აპიდან "
 "ან გააგრძელოთ ანგარიშის დამატების გარეშე."
 
-#: src/app/flows_p.cpp:249
+#: src/app/flows_p.cpp:286
 #, kde-format
 msgctxt "@info:label"
 msgid ""
@@ -147,13 +147,13 @@ msgctxt "Notification shown in a passive
 msgid "Token copied to clipboard!"
 msgstr "კოდი დაკოპირდა ბაფერში!"
 
-#: src/contents/ui/AccountNameForm.qml:64
+#: src/contents/ui/AccountNameForm.qml:81
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Account name:"
 msgstr "ანგარიშის სახელი:"
 
-#: src/contents/ui/AccountNameForm.qml:83
+#: src/contents/ui/AccountNameForm.qml:100
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Account issuer:"
@@ -177,12 +177,12 @@ msgctxt "error message shown when loadin
 msgid "Some accounts failed to load."
 msgstr "ზოგიერთი ანგარიშის ჩატვირთვის შეცდომა."
 
-#: src/contents/ui/AccountsOverview.qml:101
+#: src/contents/ui/AccountsOverview.qml:91
 #, kde-format
 msgid "No accounts added"
 msgstr "ანგარიშები დამატებული არაა"
 
-#: src/contents/ui/AccountsOverview.qml:106
+#: src/contents/ui/AccountsOverview.qml:96
 #, kde-format
 msgctxt ""
 "@action:button add new account, shown instead of overview list when no "
@@ -190,90 +190,103 @@ msgctxt ""
 msgid "Add Account"
 msgstr "ანგარიშის დამატება"
 
-#: src/contents/ui/AccountsOverview.qml:172
+#: src/contents/ui/AccountsOverview.qml:163
 #, kde-format
 msgctxt "@action:button add new account, shown in toolbar"
 msgid "Add"
 msgstr "დამატება"
 
+#: src/contents/ui/AccountsOverview.qml:176
+#, kde-format
+msgctxt "@action:button import accounts, shown in toolbar"
+msgid "Import"
+msgstr "შემოტანა"
+
+#: src/contents/ui/AccountsOverview.qml:189
+#, kde-format
+msgctxt ""
+"@action:button import an account by scanning a QR code, shown in toolbar"
+msgid "Scan QR Code"
+msgstr "QR კოდის სკანირება"
+
 #: src/contents/ui/AddAccount.qml:22
 #, kde-format
 msgctxt "@title:window"
 msgid "Add new account"
 msgstr "ახალი ანგარიშის დამატება"
 
-#: src/contents/ui/AddAccount.qml:45
+#: src/contents/ui/AddAccount.qml:50
 #, kde-format
 msgctxt "@action:button cancel and dismiss the add account form"
 msgid "Cancel"
 msgstr "გაუქმება"
 
-#: src/contents/ui/AddAccount.qml:52
+#: src/contents/ui/AddAccount.qml:57
 #, kde-format
 msgctxt "@action:button Dismiss the error page and quit Keysmith"
 msgid "Quit"
 msgstr "გასვლა"
 
-#: src/contents/ui/AddAccount.qml:61
+#: src/contents/ui/AddAccount.qml:66
 #, kde-format
 msgctxt "@action:button"
 msgid "Add"
 msgstr "დამატება"
 
-#: src/contents/ui/AddAccount.qml:81
+#: src/contents/ui/AddAccount.qml:86
 #, kde-format
 msgctxt "@label:chooser"
 msgid "Account type:"
 msgstr "ანგარიშის ტიპი:"
 
-#: src/contents/ui/AddAccount.qml:90
+#: src/contents/ui/AddAccount.qml:95
 #, kde-format
 msgctxt "@option:radio"
 msgid "Time-based OTP"
 msgstr "დროით-გენერირებული OTP"
 
-#: src/contents/ui/AddAccount.qml:101
+#: src/contents/ui/AddAccount.qml:106
 #, kde-format
 msgctxt "@option:radio"
 msgid "Hash-based OTP"
 msgstr "ჰეშით-გენერირებული OTP"
 
-#: src/contents/ui/AddAccount.qml:113
+#: src/contents/ui/AddAccount.qml:118
 #, kde-format
 msgid "Token secret"
 msgstr "კოდის პაროლი"
 
-#: src/contents/ui/AddAccount.qml:116
+#: src/contents/ui/AddAccount.qml:120
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Secret key:"
 msgstr "სადუმლო გასაღებ:"
 
-#: src/contents/ui/AddAccount.qml:132
+#: src/contents/ui/AddAccount.qml:139
 #, kde-format
 msgctxt "Button to reveal form for configuring additional token details"
 msgid "Details"
 msgstr "დეტალები"
 
-#: src/contents/ui/AddAccount.qml:140
+#: src/contents/ui/AddAccount.qml:147
 #, kde-format
 msgctxt "@title:group"
 msgid "HOTP Details:"
 msgstr "HOTP-ის დეტალები:"
 
-#: src/contents/ui/AddAccount.qml:153
+#: src/contents/ui/AddAccount.qml:160
 #, kde-format
 msgctxt "@label"
 msgid "TOTP Details:"
 msgstr "TOTP-ის დეტალები:"
 
-#: src/contents/ui/ErrorPage.qml:33
+#: src/contents/ui/ErrorPage.qml:34
 #, kde-format
 msgctxt "@action:button Button to dismiss the error page"
 msgid "Continue"
 msgstr "გაგრძელება"
 
-#: src/contents/ui/ErrorPage.qml:40
+#: src/contents/ui/ErrorPage.qml:41
 #, kde-format
 msgctxt "@action:button Dismiss the error page and quit Keysmtih"
 msgid "Quit"
@@ -324,6 +337,109 @@ msgctxt "@label:spinbox"
 msgid "Truncation offset:"
 msgstr "წაკვეთის წანაცვლება:"
 
+#: src/contents/ui/ImportAccount.qml:21
+#, kde-format
+msgctxt "@title:window"
+msgid "Import Accounts"
+msgstr "ანგარიშების შემოტანა"
+
+#: src/contents/ui/ImportAccount.qml:52
+#, kde-format
+msgid "Import format"
+msgstr "შემოტანის ფორმატი"
+
+#. i18n strings
+#: src/contents/ui/ImportAccount.qml:58
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "andOTP Encrypted JSON"
+msgstr "და OTP დაშიფრული JSON"
+
+#: src/contents/ui/ImportAccount.qml:59
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "andOTP Plain JSON"
+msgstr "და OTP უბრალო JSON"
+
+#. i18nc("@item:inlistbox", "Aegis Encrypted JSON"), value: Models.ValidatedImportInput.AegisEncryptedJSON});
+#: src/contents/ui/ImportAccount.qml:61
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "Aegis Plain JSON"
+msgstr "Aegis უბრალო JSON"
+
+#: src/contents/ui/ImportAccount.qml:62
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "FreeOTP URIs"
+msgstr "FreeOTP URI-ები"
+
+#: src/contents/ui/ImportAccount.qml:78
+#, kde-format
+msgctxt "@label:chooser"
+msgid "Backup file:"
+msgstr "მარქაფის ფაილი:"
+
+#: src/contents/ui/ImportAccount.qml:81
+#, kde-format
+msgctxt "@info:placeholder"
+msgid "No file selected"
+msgstr "ფაილი არჩეული არაა"
+
+#: src/contents/ui/ImportAccount.qml:85
+#, kde-format
+msgctxt "@title:window"
+msgid "Select file"
+msgstr "აირჩიეთ ფაილი"
+
+#: src/contents/ui/ImportAccount.qml:99
+#, kde-format
+msgctxt "@info:placeholder"
+msgid "Decryption password"
+msgstr "გაშიფვრის პაროლი"
+
+#: src/contents/ui/ImportAccount.qml:101 src/contents/ui/UnlockAccounts.qml:49
+#, kde-format
+msgctxt "@label:textbox"
+msgid "Password:"
+msgstr "პაროლი:"
+
+#: src/contents/ui/ImportAccount.qml:112
+#, kde-format
+msgctxt "@action:button"
+msgid "Import"
+msgstr "შემოტანა"
+
+#: src/contents/ui/KeysmithGlobalDrawer.qml:12
+#: src/contents/ui/KeysmithGlobalDrawer.qml:15
+#, kde-format
+msgid "About Keysmith"
+msgstr "Keysmith-ის შესახებ"
+
+#: src/contents/ui/QRScanPage.qml:21
+#, kde-format
+msgctxt "@title"
+msgid "Scan a QR code"
+msgstr "QR კოდის სკანირება"
+
+#: src/contents/ui/QRScanPage.qml:31
+#, kde-format
+msgctxt "@action:intoolbar"
+msgid "Select Camera"
+msgstr "აირჩიეთ კამერა"
+
+#: src/contents/ui/QRScanPage.qml:42
+#, kde-format
+msgctxt "@title:dialog"
+msgid "Select Camera"
+msgstr "აირჩიეთ კამერა"
+
+#: src/contents/ui/QRScanPage.qml:61
+#, kde-format
+msgctxt "@action:button"
+msgid "Close"
+msgstr "დახურვა"
+
 #: src/contents/ui/RenameAccount.qml:17
 #, kde-format
 msgctxt "@title:window"
@@ -353,13 +469,13 @@ msgstr "გაუქმება"
 msgid "Add"
 msgstr "დამატება"
 
-#: src/contents/ui/SetupPassword.qml:22 src/contents/ui/UnlockAccounts.qml:22
+#: src/contents/ui/SetupPassword.qml:21 src/contents/ui/UnlockAccounts.qml:21
 #, kde-format
 msgctxt "@title:window"
 msgid "Password"
 msgstr "პაროლი"
 
-#: src/contents/ui/SetupPassword.qml:28
+#: src/contents/ui/SetupPassword.qml:27
 #, kde-format
 msgid "Failed to set up your password"
 msgstr "პაროლის დაყენების შეცდომა"
@@ -369,19 +485,19 @@ msgstr "პაროლის დაყ
 msgid "Choose a password to protect your accounts"
 msgstr "ანგარიშების დასაცავად შეიყვანეთ პაროლი"
 
-#: src/contents/ui/SetupPassword.qml:49
+#: src/contents/ui/SetupPassword.qml:48
 #, kde-format
 msgctxt "@label:textbox"
 msgid "New Password:"
 msgstr "ახალი პაროლი:"
 
-#: src/contents/ui/SetupPassword.qml:60
+#: src/contents/ui/SetupPassword.qml:61
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Verify password:"
 msgstr "პაროლის გადამოწმება:"
 
-#: src/contents/ui/SetupPassword.qml:68
+#: src/contents/ui/SetupPassword.qml:72
 #, kde-format
 msgctxt "@action:button"
 msgid "Apply"
@@ -429,7 +545,7 @@ msgctxt "@option:radio"
 msgid "SHA-512"
 msgstr "SHA-512"
 
-#: src/contents/ui/UnlockAccounts.qml:26
+#: src/contents/ui/UnlockAccounts.qml:25
 #, kde-format
 msgid "Failed to unlock your accounts"
 msgstr "თქვენი ანგარიშების განბლოკვის შეცდომა"
@@ -439,24 +555,33 @@ msgstr "თქვენი ანგა
 msgid "Please provide the password to unlock your accounts"
 msgstr "ანგარიშების განსაბლოკად საჭიროა პაროლის მითითება"
 
-#: src/contents/ui/UnlockAccounts.qml:50
-#, kde-format
-msgctxt "@label:textbox"
-msgid "Password:"
-msgstr "პაროლი:"
-
-#: src/contents/ui/UnlockAccounts.qml:59
+#: src/contents/ui/UnlockAccounts.qml:61
 #, kde-format
 msgctxt "@action:button"
 msgid "Unlock"
 msgstr "განბლოკვა"
 
-#: src/main.cpp:67
+#: src/main.cpp:70
 #, kde-format
 msgctxt "@title"
 msgid "Keysmith"
 msgstr "Keysmith"
 
+#: src/main.cpp:73
+#, kde-format
+msgid "generate two-factor authentication (2FA) tokens"
+msgstr "2-ფაქტორიანი ავთენტიკაციის(2FA) ტოკენების გენერაცია"
+
+#: src/main.cpp:76
+#, kde-format
+msgid "Keysmith"
+msgstr "Keysmith"
+
+#: src/main.cpp:80
+#, kde-format
+msgid "© 2019 KDE Community"
+msgstr "© 2019 KDE-ის საზოგადოება"
+
 #~ msgctxt "Button cancelling account removal"
 #~ msgid "Cancel"
 #~ msgstr "გაუქმება"
diff -pruN 24.08.1-1/po/ko/keysmith.po 25.03.90-1/po/ko/keysmith.po
--- 24.08.1-1/po/ko/keysmith.po	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/po/ko/keysmith.po	2025-03-27 10:13:04.000000000 +0000
@@ -6,8 +6,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: keysmith\n"
 "Report-Msgid-Bugs-To: https://bugs.kde.org\n"
-"POT-Creation-Date: 2024-05-03 00:40+0000\n"
-"PO-Revision-Date: 2024-02-09 23:39+0100\n"
+"POT-Creation-Date: 2025-02-09 00:43+0000\n"
+"PO-Revision-Date: 2024-12-24 16:56+0100\n"
 "Last-Translator: Shinjo Park <kde@peremen.name>\n"
 "Language-Team: Korean <kde-kr@kde.org>\n"
 "Language: ko\n"
@@ -15,7 +15,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Lokalize 23.08.1\n"
+"X-Generator: Lokalize 23.08.5\n"
 
 #: src/app/cli.cpp:133
 #, kde-format
@@ -24,13 +24,13 @@ msgid ""
 "Optional account to add, formatted as otpauth:// URI (e.g. from a QR code)"
 msgstr "추가할 계정, otpauth:// URI 형식 사용(예: QR 코드)"
 
-#: src/app/flows_p.cpp:108 src/app/flows_p.cpp:248
+#: src/app/flows_p.cpp:111 src/app/flows_p.cpp:285
 #, kde-format
 msgctxt "@title:window"
 msgid "Invalid account"
 msgstr "잘못된 계정"
 
-#: src/app/flows_p.cpp:109
+#: src/app/flows_p.cpp:112
 #, kde-format
 msgctxt "@info:label"
 msgid ""
@@ -40,7 +40,7 @@ msgstr ""
 "추가하려는 계정이 잘못되었습니다. 앱을 끝내거나 계정을 추가하지 않고 계속할 "
 "수 있습니다."
 
-#: src/app/flows_p.cpp:249
+#: src/app/flows_p.cpp:286
 #, kde-format
 msgctxt "@info:label"
 msgid ""
@@ -141,13 +141,13 @@ msgctxt "Notification shown in a passive
 msgid "Token copied to clipboard!"
 msgstr "토큰을 클립보드에 복사했습니다!"
 
-#: src/contents/ui/AccountNameForm.qml:64
+#: src/contents/ui/AccountNameForm.qml:81
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Account name:"
 msgstr "계정 이름:"
 
-#: src/contents/ui/AccountNameForm.qml:83
+#: src/contents/ui/AccountNameForm.qml:100
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Account issuer:"
@@ -171,12 +171,12 @@ msgctxt "error message shown when loadin
 msgid "Some accounts failed to load."
 msgstr "일부 계정을 불러올 수 없습니다."
 
-#: src/contents/ui/AccountsOverview.qml:101
+#: src/contents/ui/AccountsOverview.qml:91
 #, kde-format
 msgid "No accounts added"
 msgstr "추가한 계정 없음"
 
-#: src/contents/ui/AccountsOverview.qml:106
+#: src/contents/ui/AccountsOverview.qml:96
 #, kde-format
 msgctxt ""
 "@action:button add new account, shown instead of overview list when no "
@@ -184,90 +184,103 @@ msgctxt ""
 msgid "Add Account"
 msgstr "계정 추가"
 
-#: src/contents/ui/AccountsOverview.qml:172
+#: src/contents/ui/AccountsOverview.qml:163
 #, kde-format
 msgctxt "@action:button add new account, shown in toolbar"
 msgid "Add"
 msgstr "추가"
 
+#: src/contents/ui/AccountsOverview.qml:176
+#, kde-format
+msgctxt "@action:button import accounts, shown in toolbar"
+msgid "Import"
+msgstr "가져오기"
+
+#: src/contents/ui/AccountsOverview.qml:189
+#, kde-format
+msgctxt ""
+"@action:button import an account by scanning a QR code, shown in toolbar"
+msgid "Scan QR Code"
+msgstr ""
+
 #: src/contents/ui/AddAccount.qml:22
 #, kde-format
 msgctxt "@title:window"
 msgid "Add new account"
 msgstr "새 계정 추가"
 
-#: src/contents/ui/AddAccount.qml:45
+#: src/contents/ui/AddAccount.qml:50
 #, kde-format
 msgctxt "@action:button cancel and dismiss the add account form"
 msgid "Cancel"
 msgstr "취소"
 
-#: src/contents/ui/AddAccount.qml:52
+#: src/contents/ui/AddAccount.qml:57
 #, kde-format
 msgctxt "@action:button Dismiss the error page and quit Keysmith"
 msgid "Quit"
 msgstr "끝내기"
 
-#: src/contents/ui/AddAccount.qml:61
+#: src/contents/ui/AddAccount.qml:66
 #, kde-format
 msgctxt "@action:button"
 msgid "Add"
 msgstr "추가"
 
-#: src/contents/ui/AddAccount.qml:81
+#: src/contents/ui/AddAccount.qml:86
 #, kde-format
 msgctxt "@label:chooser"
 msgid "Account type:"
 msgstr "계정 종류:"
 
-#: src/contents/ui/AddAccount.qml:90
+#: src/contents/ui/AddAccount.qml:95
 #, kde-format
 msgctxt "@option:radio"
 msgid "Time-based OTP"
 msgstr "시간 기반 OTP"
 
-#: src/contents/ui/AddAccount.qml:101
+#: src/contents/ui/AddAccount.qml:106
 #, kde-format
 msgctxt "@option:radio"
 msgid "Hash-based OTP"
 msgstr "해시 기반 OTP"
 
-#: src/contents/ui/AddAccount.qml:113
+#: src/contents/ui/AddAccount.qml:118
 #, kde-format
 msgid "Token secret"
 msgstr "토큰 비밀 정보"
 
-#: src/contents/ui/AddAccount.qml:116
+#: src/contents/ui/AddAccount.qml:120
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Secret key:"
 msgstr "비밀 키:"
 
-#: src/contents/ui/AddAccount.qml:132
+#: src/contents/ui/AddAccount.qml:139
 #, kde-format
 msgctxt "Button to reveal form for configuring additional token details"
 msgid "Details"
 msgstr "자세한 정보"
 
-#: src/contents/ui/AddAccount.qml:140
+#: src/contents/ui/AddAccount.qml:147
 #, kde-format
 msgctxt "@title:group"
 msgid "HOTP Details:"
 msgstr "HOTP 정보:"
 
-#: src/contents/ui/AddAccount.qml:153
+#: src/contents/ui/AddAccount.qml:160
 #, kde-format
 msgctxt "@label"
 msgid "TOTP Details:"
 msgstr "TOTP 정보:"
 
-#: src/contents/ui/ErrorPage.qml:33
+#: src/contents/ui/ErrorPage.qml:34
 #, kde-format
 msgctxt "@action:button Button to dismiss the error page"
 msgid "Continue"
 msgstr "계속"
 
-#: src/contents/ui/ErrorPage.qml:40
+#: src/contents/ui/ErrorPage.qml:41
 #, kde-format
 msgctxt "@action:button Dismiss the error page and quit Keysmtih"
 msgid "Quit"
@@ -318,6 +331,113 @@ msgctxt "@label:spinbox"
 msgid "Truncation offset:"
 msgstr "절단 위치:"
 
+#: src/contents/ui/ImportAccount.qml:21
+#, kde-format
+msgctxt "@title:window"
+msgid "Import Accounts"
+msgstr "계정 가져오기"
+
+#: src/contents/ui/ImportAccount.qml:52
+#, kde-format
+msgid "Import format"
+msgstr "가져오기 형식"
+
+#. i18n strings
+#: src/contents/ui/ImportAccount.qml:58
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "andOTP Encrypted JSON"
+msgstr "andOTP 암호화된 JSON"
+
+#: src/contents/ui/ImportAccount.qml:59
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "andOTP Plain JSON"
+msgstr "andOTP 평문 JSON"
+
+#. i18nc("@item:inlistbox", "Aegis Encrypted JSON"), value: Models.ValidatedImportInput.AegisEncryptedJSON});
+#: src/contents/ui/ImportAccount.qml:61
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "Aegis Plain JSON"
+msgstr "Aegis 평문 JSON"
+
+#: src/contents/ui/ImportAccount.qml:62
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "FreeOTP URIs"
+msgstr "FreeOTP URI"
+
+#: src/contents/ui/ImportAccount.qml:78
+#, kde-format
+msgctxt "@label:chooser"
+msgid "Backup file:"
+msgstr "백업 파일:"
+
+#: src/contents/ui/ImportAccount.qml:81
+#, kde-format
+msgctxt "@info:placeholder"
+msgid "No file selected"
+msgstr "선택한 파일 없음"
+
+#: src/contents/ui/ImportAccount.qml:85
+#, kde-format
+msgctxt "@title:window"
+msgid "Select file"
+msgstr "파일 선택"
+
+#: src/contents/ui/ImportAccount.qml:99
+#, kde-format
+msgctxt "@info:placeholder"
+msgid "Decryption password"
+msgstr "복호화 암호"
+
+#: src/contents/ui/ImportAccount.qml:101 src/contents/ui/UnlockAccounts.qml:49
+#, kde-format
+msgctxt "@label:textbox"
+msgid "Password:"
+msgstr "암호:"
+
+#: src/contents/ui/ImportAccount.qml:112
+#, kde-format
+msgctxt "@action:button"
+msgid "Import"
+msgstr "가져오기"
+
+#: src/contents/ui/KeysmithGlobalDrawer.qml:12
+#: src/contents/ui/KeysmithGlobalDrawer.qml:15
+#, kde-format
+msgid "About Keysmith"
+msgstr "Keysmith 정보"
+
+#: src/contents/ui/QRScanPage.qml:21
+#, kde-format
+msgctxt "@title"
+msgid "Scan a QR code"
+msgstr ""
+
+#: src/contents/ui/QRScanPage.qml:31
+#, fuzzy, kde-format
+#| msgctxt "@title:window"
+#| msgid "Select file"
+msgctxt "@action:intoolbar"
+msgid "Select Camera"
+msgstr "파일 선택"
+
+#: src/contents/ui/QRScanPage.qml:42
+#, fuzzy, kde-format
+#| msgctxt "@title:window"
+#| msgid "Select file"
+msgctxt "@title:dialog"
+msgid "Select Camera"
+msgstr "파일 선택"
+
+#: src/contents/ui/QRScanPage.qml:61
+#, kde-format
+msgctxt "@action:button"
+msgid "Close"
+msgstr ""
+
 #: src/contents/ui/RenameAccount.qml:17
 #, kde-format
 msgctxt "@title:window"
@@ -346,13 +466,13 @@ msgstr "취소"
 msgid "Add"
 msgstr "추가"
 
-#: src/contents/ui/SetupPassword.qml:22 src/contents/ui/UnlockAccounts.qml:22
+#: src/contents/ui/SetupPassword.qml:21 src/contents/ui/UnlockAccounts.qml:21
 #, kde-format
 msgctxt "@title:window"
 msgid "Password"
 msgstr "암호"
 
-#: src/contents/ui/SetupPassword.qml:28
+#: src/contents/ui/SetupPassword.qml:27
 #, kde-format
 msgid "Failed to set up your password"
 msgstr "암호를 설정할 수 없음"
@@ -362,19 +482,19 @@ msgstr "암호를 설정할 수 없음"
 msgid "Choose a password to protect your accounts"
 msgstr "계정을 보호할 암호를 설정하십시오"
 
-#: src/contents/ui/SetupPassword.qml:49
+#: src/contents/ui/SetupPassword.qml:48
 #, kde-format
 msgctxt "@label:textbox"
 msgid "New Password:"
 msgstr "새 암호:"
 
-#: src/contents/ui/SetupPassword.qml:60
+#: src/contents/ui/SetupPassword.qml:61
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Verify password:"
 msgstr "암호를 다시 입력하십시오:"
 
-#: src/contents/ui/SetupPassword.qml:68
+#: src/contents/ui/SetupPassword.qml:72
 #, kde-format
 msgctxt "@action:button"
 msgid "Apply"
@@ -422,7 +542,7 @@ msgctxt "@option:radio"
 msgid "SHA-512"
 msgstr "SHA-512"
 
-#: src/contents/ui/UnlockAccounts.qml:26
+#: src/contents/ui/UnlockAccounts.qml:25
 #, kde-format
 msgid "Failed to unlock your accounts"
 msgstr "계정 잠금을 해제할 수 없음"
@@ -432,24 +552,33 @@ msgstr "계정 잠금을 해제할 수 
 msgid "Please provide the password to unlock your accounts"
 msgstr "계정 잠금 해제 암호를 입력하십시오"
 
-#: src/contents/ui/UnlockAccounts.qml:50
-#, kde-format
-msgctxt "@label:textbox"
-msgid "Password:"
-msgstr "암호:"
-
-#: src/contents/ui/UnlockAccounts.qml:59
+#: src/contents/ui/UnlockAccounts.qml:61
 #, kde-format
 msgctxt "@action:button"
 msgid "Unlock"
 msgstr "잠금 해제"
 
-#: src/main.cpp:67
+#: src/main.cpp:70
 #, kde-format
 msgctxt "@title"
 msgid "Keysmith"
 msgstr "Keysmith"
 
+#: src/main.cpp:73
+#, kde-format
+msgid "generate two-factor authentication (2FA) tokens"
+msgstr "2단계 인증(2FA) 토큰 생성"
+
+#: src/main.cpp:76
+#, kde-format
+msgid "Keysmith"
+msgstr "Keysmith"
+
+#: src/main.cpp:80
+#, kde-format
+msgid "© 2019 KDE Community"
+msgstr "© 2019 KDE Community"
+
 #~ msgctxt "Button cancelling account removal"
 #~ msgid "Cancel"
 #~ msgstr "취소"
diff -pruN 24.08.1-1/po/lt/keysmith.po 25.03.90-1/po/lt/keysmith.po
--- 24.08.1-1/po/lt/keysmith.po	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/po/lt/keysmith.po	2025-03-27 10:13:04.000000000 +0000
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: keysmith\n"
 "Report-Msgid-Bugs-To: https://bugs.kde.org\n"
-"POT-Creation-Date: 2024-05-03 00:40+0000\n"
+"POT-Creation-Date: 2025-02-09 00:43+0000\n"
 "PO-Revision-Date: 2024-02-26 18:18+0200\n"
 "Last-Translator: Automatically generated\n"
 "Language-Team: none\n"
@@ -27,13 +27,13 @@ msgid ""
 msgstr ""
 "Nebūtina pridedama paskyra, formatuota kaip otpauth:// URI (pvz., iš QR kodo)"
 
-#: src/app/flows_p.cpp:108 src/app/flows_p.cpp:248
+#: src/app/flows_p.cpp:111 src/app/flows_p.cpp:285
 #, kde-format
 msgctxt "@title:window"
 msgid "Invalid account"
 msgstr "Netinkama paskyra"
 
-#: src/app/flows_p.cpp:109
+#: src/app/flows_p.cpp:112
 #, kde-format
 msgctxt "@info:label"
 msgid ""
@@ -43,7 +43,7 @@ msgstr ""
 "Paskyra, kurią bandote pridėti yra netinkama. Galite išeiti iš programos "
 "arba tęsti nepridėję paskyros."
 
-#: src/app/flows_p.cpp:249
+#: src/app/flows_p.cpp:286
 #, kde-format
 msgctxt "@info:label"
 msgid ""
@@ -147,13 +147,13 @@ msgctxt "Notification shown in a passive
 msgid "Token copied to clipboard!"
 msgstr "Prieigos raktas nukopijuotas į iškarpinę!"
 
-#: src/contents/ui/AccountNameForm.qml:64
+#: src/contents/ui/AccountNameForm.qml:81
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Account name:"
 msgstr "Paskyros pavadinimas:"
 
-#: src/contents/ui/AccountNameForm.qml:83
+#: src/contents/ui/AccountNameForm.qml:100
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Account issuer:"
@@ -177,12 +177,12 @@ msgctxt "error message shown when loadin
 msgid "Some accounts failed to load."
 msgstr "Nepavyko įkelti tam tikrų paskyrų."
 
-#: src/contents/ui/AccountsOverview.qml:101
+#: src/contents/ui/AccountsOverview.qml:91
 #, kde-format
 msgid "No accounts added"
 msgstr "Nepridėta jokių paskyrų"
 
-#: src/contents/ui/AccountsOverview.qml:106
+#: src/contents/ui/AccountsOverview.qml:96
 #, kde-format
 msgctxt ""
 "@action:button add new account, shown instead of overview list when no "
@@ -190,90 +190,103 @@ msgctxt ""
 msgid "Add Account"
 msgstr "Pridėti paskyrą"
 
-#: src/contents/ui/AccountsOverview.qml:172
+#: src/contents/ui/AccountsOverview.qml:163
 #, kde-format
 msgctxt "@action:button add new account, shown in toolbar"
 msgid "Add"
 msgstr "Pridėti"
 
+#: src/contents/ui/AccountsOverview.qml:176
+#, kde-format
+msgctxt "@action:button import accounts, shown in toolbar"
+msgid "Import"
+msgstr ""
+
+#: src/contents/ui/AccountsOverview.qml:189
+#, kde-format
+msgctxt ""
+"@action:button import an account by scanning a QR code, shown in toolbar"
+msgid "Scan QR Code"
+msgstr ""
+
 #: src/contents/ui/AddAccount.qml:22
 #, kde-format
 msgctxt "@title:window"
 msgid "Add new account"
 msgstr "Pridėti naują paskyrą"
 
-#: src/contents/ui/AddAccount.qml:45
+#: src/contents/ui/AddAccount.qml:50
 #, kde-format
 msgctxt "@action:button cancel and dismiss the add account form"
 msgid "Cancel"
 msgstr "Atsisakyti"
 
-#: src/contents/ui/AddAccount.qml:52
+#: src/contents/ui/AddAccount.qml:57
 #, kde-format
 msgctxt "@action:button Dismiss the error page and quit Keysmith"
 msgid "Quit"
 msgstr "Išeiti"
 
-#: src/contents/ui/AddAccount.qml:61
+#: src/contents/ui/AddAccount.qml:66
 #, kde-format
 msgctxt "@action:button"
 msgid "Add"
 msgstr "Pridėti"
 
-#: src/contents/ui/AddAccount.qml:81
+#: src/contents/ui/AddAccount.qml:86
 #, kde-format
 msgctxt "@label:chooser"
 msgid "Account type:"
 msgstr "Paskyros tipas:"
 
-#: src/contents/ui/AddAccount.qml:90
+#: src/contents/ui/AddAccount.qml:95
 #, kde-format
 msgctxt "@option:radio"
 msgid "Time-based OTP"
 msgstr "Laiku grįstas vienkartinis slaptažodis (TOTP)"
 
-#: src/contents/ui/AddAccount.qml:101
+#: src/contents/ui/AddAccount.qml:106
 #, kde-format
 msgctxt "@option:radio"
 msgid "Hash-based OTP"
 msgstr "Maiša grįstas vienkartinis slaptažodis (HOTP)"
 
-#: src/contents/ui/AddAccount.qml:113
+#: src/contents/ui/AddAccount.qml:118
 #, kde-format
 msgid "Token secret"
 msgstr "Prieigos rakto paslaptis"
 
-#: src/contents/ui/AddAccount.qml:116
+#: src/contents/ui/AddAccount.qml:120
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Secret key:"
 msgstr "Slaptas raktas:"
 
-#: src/contents/ui/AddAccount.qml:132
+#: src/contents/ui/AddAccount.qml:139
 #, kde-format
 msgctxt "Button to reveal form for configuring additional token details"
 msgid "Details"
 msgstr "Išsamiau"
 
-#: src/contents/ui/AddAccount.qml:140
+#: src/contents/ui/AddAccount.qml:147
 #, kde-format
 msgctxt "@title:group"
 msgid "HOTP Details:"
 msgstr "Išsamiau apie HOTP:"
 
-#: src/contents/ui/AddAccount.qml:153
+#: src/contents/ui/AddAccount.qml:160
 #, kde-format
 msgctxt "@label"
 msgid "TOTP Details:"
 msgstr "Išsamiau apie TOTP:"
 
-#: src/contents/ui/ErrorPage.qml:33
+#: src/contents/ui/ErrorPage.qml:34
 #, kde-format
 msgctxt "@action:button Button to dismiss the error page"
 msgid "Continue"
 msgstr "Tęsti"
 
-#: src/contents/ui/ErrorPage.qml:40
+#: src/contents/ui/ErrorPage.qml:41
 #, kde-format
 msgctxt "@action:button Dismiss the error page and quit Keysmtih"
 msgid "Quit"
@@ -324,6 +337,115 @@ msgctxt "@label:spinbox"
 msgid "Truncation offset:"
 msgstr "Apkirpimo poslinkis:"
 
+#: src/contents/ui/ImportAccount.qml:21
+#, fuzzy, kde-format
+#| msgctxt "@title:window"
+#| msgid "Accounts"
+msgctxt "@title:window"
+msgid "Import Accounts"
+msgstr "Paskyros"
+
+#: src/contents/ui/ImportAccount.qml:52
+#, kde-format
+msgid "Import format"
+msgstr ""
+
+#. i18n strings
+#: src/contents/ui/ImportAccount.qml:58
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "andOTP Encrypted JSON"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:59
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "andOTP Plain JSON"
+msgstr ""
+
+#. i18nc("@item:inlistbox", "Aegis Encrypted JSON"), value: Models.ValidatedImportInput.AegisEncryptedJSON});
+#: src/contents/ui/ImportAccount.qml:61
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "Aegis Plain JSON"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:62
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "FreeOTP URIs"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:78
+#, kde-format
+msgctxt "@label:chooser"
+msgid "Backup file:"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:81
+#, kde-format
+msgctxt "@info:placeholder"
+msgid "No file selected"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:85
+#, kde-format
+msgctxt "@title:window"
+msgid "Select file"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:99
+#, fuzzy, kde-format
+#| msgctxt "@label:textbox"
+#| msgid "Verify password:"
+msgctxt "@info:placeholder"
+msgid "Decryption password"
+msgstr "Pakartokite slaptažodį:"
+
+#: src/contents/ui/ImportAccount.qml:101 src/contents/ui/UnlockAccounts.qml:49
+#, kde-format
+msgctxt "@label:textbox"
+msgid "Password:"
+msgstr "Slaptažodis:"
+
+#: src/contents/ui/ImportAccount.qml:112
+#, kde-format
+msgctxt "@action:button"
+msgid "Import"
+msgstr ""
+
+#: src/contents/ui/KeysmithGlobalDrawer.qml:12
+#: src/contents/ui/KeysmithGlobalDrawer.qml:15
+#, fuzzy, kde-format
+#| msgctxt "@title"
+#| msgid "Keysmith"
+msgid "About Keysmith"
+msgstr "Keysmith"
+
+#: src/contents/ui/QRScanPage.qml:21
+#, kde-format
+msgctxt "@title"
+msgid "Scan a QR code"
+msgstr ""
+
+#: src/contents/ui/QRScanPage.qml:31
+#, kde-format
+msgctxt "@action:intoolbar"
+msgid "Select Camera"
+msgstr ""
+
+#: src/contents/ui/QRScanPage.qml:42
+#, kde-format
+msgctxt "@title:dialog"
+msgid "Select Camera"
+msgstr ""
+
+#: src/contents/ui/QRScanPage.qml:61
+#, kde-format
+msgctxt "@action:button"
+msgid "Close"
+msgstr ""
+
 #: src/contents/ui/RenameAccount.qml:17
 #, kde-format
 msgctxt "@title:window"
@@ -353,13 +475,13 @@ msgstr "Atsisakyti"
 msgid "Add"
 msgstr "Pridėti"
 
-#: src/contents/ui/SetupPassword.qml:22 src/contents/ui/UnlockAccounts.qml:22
+#: src/contents/ui/SetupPassword.qml:21 src/contents/ui/UnlockAccounts.qml:21
 #, kde-format
 msgctxt "@title:window"
 msgid "Password"
 msgstr "Slaptažodis"
 
-#: src/contents/ui/SetupPassword.qml:28
+#: src/contents/ui/SetupPassword.qml:27
 #, kde-format
 msgid "Failed to set up your password"
 msgstr "Nepavyko nustatyti slaptažodžio"
@@ -369,19 +491,19 @@ msgstr "Nepavyko nustatyti slaptažodži
 msgid "Choose a password to protect your accounts"
 msgstr "Pasirinkite slaptažodį, skirtą apsaugoti paskyras"
 
-#: src/contents/ui/SetupPassword.qml:49
+#: src/contents/ui/SetupPassword.qml:48
 #, kde-format
 msgctxt "@label:textbox"
 msgid "New Password:"
 msgstr "Naujas slaptažodis:"
 
-#: src/contents/ui/SetupPassword.qml:60
+#: src/contents/ui/SetupPassword.qml:61
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Verify password:"
 msgstr "Pakartokite slaptažodį:"
 
-#: src/contents/ui/SetupPassword.qml:68
+#: src/contents/ui/SetupPassword.qml:72
 #, kde-format
 msgctxt "@action:button"
 msgid "Apply"
@@ -429,7 +551,7 @@ msgctxt "@option:radio"
 msgid "SHA-512"
 msgstr "SHA-512"
 
-#: src/contents/ui/UnlockAccounts.qml:26
+#: src/contents/ui/UnlockAccounts.qml:25
 #, kde-format
 msgid "Failed to unlock your accounts"
 msgstr "Nepavyko atrakinti paskyrų"
@@ -439,24 +561,35 @@ msgstr "Nepavyko atrakinti paskyrų"
 msgid "Please provide the password to unlock your accounts"
 msgstr "Įveskite slaptažodį, kad atrakintumėte paskyras"
 
-#: src/contents/ui/UnlockAccounts.qml:50
-#, kde-format
-msgctxt "@label:textbox"
-msgid "Password:"
-msgstr "Slaptažodis:"
-
-#: src/contents/ui/UnlockAccounts.qml:59
+#: src/contents/ui/UnlockAccounts.qml:61
 #, kde-format
 msgctxt "@action:button"
 msgid "Unlock"
 msgstr "Atrakinti"
 
-#: src/main.cpp:67
+#: src/main.cpp:70
 #, kde-format
 msgctxt "@title"
 msgid "Keysmith"
 msgstr "Keysmith"
 
+#: src/main.cpp:73
+#, kde-format
+msgid "generate two-factor authentication (2FA) tokens"
+msgstr ""
+
+#: src/main.cpp:76
+#, fuzzy, kde-format
+#| msgctxt "@title"
+#| msgid "Keysmith"
+msgid "Keysmith"
+msgstr "Keysmith"
+
+#: src/main.cpp:80
+#, kde-format
+msgid "© 2019 KDE Community"
+msgstr ""
+
 #~ msgctxt "Button cancelling account removal"
 #~ msgid "Cancel"
 #~ msgstr "Atsisakyti"
diff -pruN 24.08.1-1/po/nl/keysmith.po 25.03.90-1/po/nl/keysmith.po
--- 24.08.1-1/po/nl/keysmith.po	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/po/nl/keysmith.po	2025-03-27 10:13:04.000000000 +0000
@@ -1,13 +1,13 @@
 # Copyright (C) 2023 This file is copyright:
 # This file is distributed under the same license as the keysmith package.
 #
-# SPDX-FileCopyrightText: 2020, 2021, 2023, 2024 Freek de Kruijf <freekdekruijf@kde.nl>
+# SPDX-FileCopyrightText: 2020, 2021, 2023, 2024, 2025 Freek de Kruijf <freekdekruijf@kde.nl>
 msgid ""
 msgstr ""
 "Project-Id-Version: keysmith\n"
 "Report-Msgid-Bugs-To: https://bugs.kde.org\n"
-"POT-Creation-Date: 2024-05-03 00:40+0000\n"
-"PO-Revision-Date: 2024-01-13 13:13+0100\n"
+"POT-Creation-Date: 2025-02-09 00:43+0000\n"
+"PO-Revision-Date: 2025-01-14 11:16+0100\n"
 "Last-Translator: Freek de Kruijf <freekdekruijf@kde.nl>\n"
 "Language-Team: \n"
 "Language: nl\n"
@@ -15,7 +15,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Lokalize 23.08.4\n"
+"X-Generator: Lokalize 24.12.1\n"
 
 #: src/app/cli.cpp:133
 #, kde-format
@@ -23,16 +23,16 @@ msgctxt "@info (<uri> placeholder)"
 msgid ""
 "Optional account to add, formatted as otpauth:// URI (e.g. from a QR code)"
 msgstr ""
-"Optioneel account om toe te voegen, geformatteerd als otpauth:// URI (e.g. "
+"Optioneel account om toe te voegen, geformatteerd als otpauth:// URI (bijv. "
 "uit een QR-code)"
 
-#: src/app/flows_p.cpp:108 src/app/flows_p.cpp:248
+#: src/app/flows_p.cpp:111 src/app/flows_p.cpp:285
 #, kde-format
 msgctxt "@title:window"
 msgid "Invalid account"
 msgstr "Ongeldig account"
 
-#: src/app/flows_p.cpp:109
+#: src/app/flows_p.cpp:112
 #, kde-format
 msgctxt "@info:label"
 msgid ""
@@ -42,7 +42,7 @@ msgstr ""
 "Het account dat u probeert toe te voegen is ongeldig. U kunt ofwel de "
 "toepassing verlaten of doorgaan zonder het account toe te voegen."
 
-#: src/app/flows_p.cpp:249
+#: src/app/flows_p.cpp:286
 #, kde-format
 msgctxt "@info:label"
 msgid ""
@@ -147,13 +147,13 @@ msgctxt "Notification shown in a passive
 msgid "Token copied to clipboard!"
 msgstr "Token gekopieerd naar klembord!"
 
-#: src/contents/ui/AccountNameForm.qml:64
+#: src/contents/ui/AccountNameForm.qml:81
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Account name:"
 msgstr "Accountnaam:"
 
-#: src/contents/ui/AccountNameForm.qml:83
+#: src/contents/ui/AccountNameForm.qml:100
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Account issuer:"
@@ -177,12 +177,12 @@ msgctxt "error message shown when loadin
 msgid "Some accounts failed to load."
 msgstr "Laden van enkele accounts is mislukt."
 
-#: src/contents/ui/AccountsOverview.qml:101
+#: src/contents/ui/AccountsOverview.qml:91
 #, kde-format
 msgid "No accounts added"
 msgstr "Geen accounts toegevoegd"
 
-#: src/contents/ui/AccountsOverview.qml:106
+#: src/contents/ui/AccountsOverview.qml:96
 #, kde-format
 msgctxt ""
 "@action:button add new account, shown instead of overview list when no "
@@ -190,90 +190,103 @@ msgctxt ""
 msgid "Add Account"
 msgstr "Account toevoegen"
 
-#: src/contents/ui/AccountsOverview.qml:172
+#: src/contents/ui/AccountsOverview.qml:163
 #, kde-format
 msgctxt "@action:button add new account, shown in toolbar"
 msgid "Add"
 msgstr "Toevoegen"
 
+#: src/contents/ui/AccountsOverview.qml:176
+#, kde-format
+msgctxt "@action:button import accounts, shown in toolbar"
+msgid "Import"
+msgstr "Importeren"
+
+#: src/contents/ui/AccountsOverview.qml:189
+#, kde-format
+msgctxt ""
+"@action:button import an account by scanning a QR code, shown in toolbar"
+msgid "Scan QR Code"
+msgstr "QR-code scannen"
+
 #: src/contents/ui/AddAccount.qml:22
 #, kde-format
 msgctxt "@title:window"
 msgid "Add new account"
 msgstr "Nieuw account toevoegen"
 
-#: src/contents/ui/AddAccount.qml:45
+#: src/contents/ui/AddAccount.qml:50
 #, kde-format
 msgctxt "@action:button cancel and dismiss the add account form"
 msgid "Cancel"
 msgstr "Annuleren"
 
-#: src/contents/ui/AddAccount.qml:52
+#: src/contents/ui/AddAccount.qml:57
 #, kde-format
 msgctxt "@action:button Dismiss the error page and quit Keysmith"
 msgid "Quit"
 msgstr "Afsluiten"
 
-#: src/contents/ui/AddAccount.qml:61
+#: src/contents/ui/AddAccount.qml:66
 #, kde-format
 msgctxt "@action:button"
 msgid "Add"
 msgstr "Toevoegen"
 
-#: src/contents/ui/AddAccount.qml:81
+#: src/contents/ui/AddAccount.qml:86
 #, kde-format
 msgctxt "@label:chooser"
 msgid "Account type:"
 msgstr "Accounttype:"
 
-#: src/contents/ui/AddAccount.qml:90
+#: src/contents/ui/AddAccount.qml:95
 #, kde-format
 msgctxt "@option:radio"
 msgid "Time-based OTP"
 msgstr "Op tijd gebaseerde OTP"
 
-#: src/contents/ui/AddAccount.qml:101
+#: src/contents/ui/AddAccount.qml:106
 #, kde-format
 msgctxt "@option:radio"
 msgid "Hash-based OTP"
 msgstr "Op hash gebaseerde OTP"
 
-#: src/contents/ui/AddAccount.qml:113
+#: src/contents/ui/AddAccount.qml:118
 #, kde-format
 msgid "Token secret"
 msgstr "Tokengeheim"
 
-#: src/contents/ui/AddAccount.qml:116
+#: src/contents/ui/AddAccount.qml:120
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Secret key:"
 msgstr "Geheime sleutel: "
 
-#: src/contents/ui/AddAccount.qml:132
+#: src/contents/ui/AddAccount.qml:139
 #, kde-format
 msgctxt "Button to reveal form for configuring additional token details"
 msgid "Details"
 msgstr "Details"
 
-#: src/contents/ui/AddAccount.qml:140
+#: src/contents/ui/AddAccount.qml:147
 #, kde-format
 msgctxt "@title:group"
 msgid "HOTP Details:"
 msgstr "HOTP-details:"
 
-#: src/contents/ui/AddAccount.qml:153
+#: src/contents/ui/AddAccount.qml:160
 #, kde-format
 msgctxt "@label"
 msgid "TOTP Details:"
 msgstr "TOTP-details:"
 
-#: src/contents/ui/ErrorPage.qml:33
+#: src/contents/ui/ErrorPage.qml:34
 #, kde-format
 msgctxt "@action:button Button to dismiss the error page"
 msgid "Continue"
 msgstr "Doorgaan"
 
-#: src/contents/ui/ErrorPage.qml:40
+#: src/contents/ui/ErrorPage.qml:41
 #, kde-format
 msgctxt "@action:button Dismiss the error page and quit Keysmtih"
 msgid "Quit"
@@ -324,6 +337,109 @@ msgctxt "@label:spinbox"
 msgid "Truncation offset:"
 msgstr "Afbreekoffset:"
 
+#: src/contents/ui/ImportAccount.qml:21
+#, kde-format
+msgctxt "@title:window"
+msgid "Import Accounts"
+msgstr "Accounts importeren"
+
+#: src/contents/ui/ImportAccount.qml:52
+#, kde-format
+msgid "Import format"
+msgstr "Importformaat"
+
+#. i18n strings
+#: src/contents/ui/ImportAccount.qml:58
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "andOTP Encrypted JSON"
+msgstr "andOTP versleutelde JSON"
+
+#: src/contents/ui/ImportAccount.qml:59
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "andOTP Plain JSON"
+msgstr "andOTP platte JSON"
+
+#. i18nc("@item:inlistbox", "Aegis Encrypted JSON"), value: Models.ValidatedImportInput.AegisEncryptedJSON});
+#: src/contents/ui/ImportAccount.qml:61
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "Aegis Plain JSON"
+msgstr "Aegis platte JSON"
+
+#: src/contents/ui/ImportAccount.qml:62
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "FreeOTP URIs"
+msgstr "FreeOTP URI's"
+
+#: src/contents/ui/ImportAccount.qml:78
+#, kde-format
+msgctxt "@label:chooser"
+msgid "Backup file:"
+msgstr "Reservekopiebestand:"
+
+#: src/contents/ui/ImportAccount.qml:81
+#, kde-format
+msgctxt "@info:placeholder"
+msgid "No file selected"
+msgstr "Geen bestand geselecteerd"
+
+#: src/contents/ui/ImportAccount.qml:85
+#, kde-format
+msgctxt "@title:window"
+msgid "Select file"
+msgstr "Bestand selecteren"
+
+#: src/contents/ui/ImportAccount.qml:99
+#, kde-format
+msgctxt "@info:placeholder"
+msgid "Decryption password"
+msgstr "Wachtwoord voor ontcijferen"
+
+#: src/contents/ui/ImportAccount.qml:101 src/contents/ui/UnlockAccounts.qml:49
+#, kde-format
+msgctxt "@label:textbox"
+msgid "Password:"
+msgstr "Wachtwoord:"
+
+#: src/contents/ui/ImportAccount.qml:112
+#, kde-format
+msgctxt "@action:button"
+msgid "Import"
+msgstr "Importeren"
+
+#: src/contents/ui/KeysmithGlobalDrawer.qml:12
+#: src/contents/ui/KeysmithGlobalDrawer.qml:15
+#, kde-format
+msgid "About Keysmith"
+msgstr "Info over Keysmith"
+
+#: src/contents/ui/QRScanPage.qml:21
+#, kde-format
+msgctxt "@title"
+msgid "Scan a QR code"
+msgstr "Een QR-code scannen"
+
+#: src/contents/ui/QRScanPage.qml:31
+#, kde-format
+msgctxt "@action:intoolbar"
+msgid "Select Camera"
+msgstr "Camera selecteren"
+
+#: src/contents/ui/QRScanPage.qml:42
+#, kde-format
+msgctxt "@title:dialog"
+msgid "Select Camera"
+msgstr "Camera selecteren"
+
+#: src/contents/ui/QRScanPage.qml:61
+#, kde-format
+msgctxt "@action:button"
+msgid "Close"
+msgstr "Sluiten"
+
 #: src/contents/ui/RenameAccount.qml:17
 #, kde-format
 msgctxt "@title:window"
@@ -353,13 +469,13 @@ msgstr "Annuleren"
 msgid "Add"
 msgstr "Toevoegen"
 
-#: src/contents/ui/SetupPassword.qml:22 src/contents/ui/UnlockAccounts.qml:22
+#: src/contents/ui/SetupPassword.qml:21 src/contents/ui/UnlockAccounts.qml:21
 #, kde-format
 msgctxt "@title:window"
 msgid "Password"
 msgstr "Wachtwoord"
 
-#: src/contents/ui/SetupPassword.qml:28
+#: src/contents/ui/SetupPassword.qml:27
 #, kde-format
 msgid "Failed to set up your password"
 msgstr "Uw wachtwoord instellen is mislukt"
@@ -369,19 +485,19 @@ msgstr "Uw wachtwoord instellen is mislu
 msgid "Choose a password to protect your accounts"
 msgstr "Kies een wachtwoord om uw accounts te beschermen"
 
-#: src/contents/ui/SetupPassword.qml:49
+#: src/contents/ui/SetupPassword.qml:48
 #, kde-format
 msgctxt "@label:textbox"
 msgid "New Password:"
 msgstr "Nieuw wachtwoord:"
 
-#: src/contents/ui/SetupPassword.qml:60
+#: src/contents/ui/SetupPassword.qml:61
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Verify password:"
 msgstr "Wachtwoord verifiëren:"
 
-#: src/contents/ui/SetupPassword.qml:68
+#: src/contents/ui/SetupPassword.qml:72
 #, kde-format
 msgctxt "@action:button"
 msgid "Apply"
@@ -429,7 +545,7 @@ msgctxt "@option:radio"
 msgid "SHA-512"
 msgstr "SHA-512"
 
-#: src/contents/ui/UnlockAccounts.qml:26
+#: src/contents/ui/UnlockAccounts.qml:25
 #, kde-format
 msgid "Failed to unlock your accounts"
 msgstr "Accounts ontgrendelen is mislukt"
@@ -439,24 +555,33 @@ msgstr "Accounts ontgrendelen is mislukt
 msgid "Please provide the password to unlock your accounts"
 msgstr "Geef het wachtwoord om uw accounts te ontgrendelen."
 
-#: src/contents/ui/UnlockAccounts.qml:50
-#, kde-format
-msgctxt "@label:textbox"
-msgid "Password:"
-msgstr "Wachtwoord:"
-
-#: src/contents/ui/UnlockAccounts.qml:59
+#: src/contents/ui/UnlockAccounts.qml:61
 #, kde-format
 msgctxt "@action:button"
 msgid "Unlock"
 msgstr "Ontgrendelen"
 
-#: src/main.cpp:67
+#: src/main.cpp:70
 #, kde-format
 msgctxt "@title"
 msgid "Keysmith"
 msgstr "Keysmith"
 
+#: src/main.cpp:73
+#, kde-format
+msgid "generate two-factor authentication (2FA) tokens"
+msgstr "twee-factor authenticatie-tokens genereren"
+
+#: src/main.cpp:76
+#, kde-format
+msgid "Keysmith"
+msgstr "Keysmith"
+
+#: src/main.cpp:80
+#, kde-format
+msgid "© 2019 KDE Community"
+msgstr "© 2019 KDE gemeenschap"
+
 #~ msgctxt "Button cancelling account removal"
 #~ msgid "Cancel"
 #~ msgstr "Annuleren"
diff -pruN 24.08.1-1/po/nn/keysmith.po 25.03.90-1/po/nn/keysmith.po
--- 24.08.1-1/po/nn/keysmith.po	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/po/nn/keysmith.po	2025-03-27 10:13:04.000000000 +0000
@@ -4,8 +4,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: keysmith\n"
 "Report-Msgid-Bugs-To: https://bugs.kde.org\n"
-"POT-Creation-Date: 2024-05-03 00:40+0000\n"
-"PO-Revision-Date: 2024-07-28 00:39+0200\n"
+"POT-Creation-Date: 2025-02-09 00:43+0000\n"
+"PO-Revision-Date: 2024-10-06 14:07+0200\n"
 "Last-Translator: Karl Ove Hufthammer <karl@huftis.org>\n"
 "Language-Team: Norwegian Nynorsk <l10n-no@lister.huftis.org>\n"
 "Language: nn\n"
@@ -13,7 +13,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Lokalize 24.05.2\n"
+"X-Generator: Lokalize 24.11.70\n"
 "X-Environment: kde\n"
 "X-Accelerator-Marker: &\n"
 "X-Text-Markup: kde4\n"
@@ -27,13 +27,13 @@ msgstr ""
 "Valfri konto å leggja til, skriven som otpauth://URI (for eksempel frå ein "
 "QR-kode)"
 
-#: src/app/flows_p.cpp:108 src/app/flows_p.cpp:248
+#: src/app/flows_p.cpp:111 src/app/flows_p.cpp:285
 #, kde-format
 msgctxt "@title:window"
 msgid "Invalid account"
 msgstr "Ugyldig konto"
 
-#: src/app/flows_p.cpp:109
+#: src/app/flows_p.cpp:112
 #, kde-format
 msgctxt "@info:label"
 msgid ""
@@ -43,7 +43,7 @@ msgstr ""
 "Kontoen du prøver å leggja til, er ugyldig. Du kan anten avslutta appen "
 "eller halda fram utan å leggja til kontoen."
 
-#: src/app/flows_p.cpp:249
+#: src/app/flows_p.cpp:286
 #, kde-format
 msgctxt "@info:label"
 msgid ""
@@ -148,13 +148,13 @@ msgctxt "Notification shown in a passive
 msgid "Token copied to clipboard!"
 msgstr "Pollett kopiert til utklippstavla"
 
-#: src/contents/ui/AccountNameForm.qml:64
+#: src/contents/ui/AccountNameForm.qml:81
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Account name:"
 msgstr "Kontonamn:"
 
-#: src/contents/ui/AccountNameForm.qml:83
+#: src/contents/ui/AccountNameForm.qml:100
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Account issuer:"
@@ -178,12 +178,12 @@ msgctxt "error message shown when loadin
 msgid "Some accounts failed to load."
 msgstr "Klarte ikkje lasta inn alle kontoar."
 
-#: src/contents/ui/AccountsOverview.qml:101
+#: src/contents/ui/AccountsOverview.qml:91
 #, kde-format
 msgid "No accounts added"
 msgstr "Ingen kontoar er lagde til"
 
-#: src/contents/ui/AccountsOverview.qml:106
+#: src/contents/ui/AccountsOverview.qml:96
 #, kde-format
 msgctxt ""
 "@action:button add new account, shown instead of overview list when no "
@@ -191,90 +191,103 @@ msgctxt ""
 msgid "Add Account"
 msgstr "Legg til konto"
 
-#: src/contents/ui/AccountsOverview.qml:172
+#: src/contents/ui/AccountsOverview.qml:163
 #, kde-format
 msgctxt "@action:button add new account, shown in toolbar"
 msgid "Add"
 msgstr "Legg til"
 
+#: src/contents/ui/AccountsOverview.qml:176
+#, kde-format
+msgctxt "@action:button import accounts, shown in toolbar"
+msgid "Import"
+msgstr ""
+
+#: src/contents/ui/AccountsOverview.qml:189
+#, kde-format
+msgctxt ""
+"@action:button import an account by scanning a QR code, shown in toolbar"
+msgid "Scan QR Code"
+msgstr ""
+
 #: src/contents/ui/AddAccount.qml:22
 #, kde-format
 msgctxt "@title:window"
 msgid "Add new account"
 msgstr "Legg til konto …"
 
-#: src/contents/ui/AddAccount.qml:45
+#: src/contents/ui/AddAccount.qml:50
 #, kde-format
 msgctxt "@action:button cancel and dismiss the add account form"
 msgid "Cancel"
 msgstr "Avbryt"
 
-#: src/contents/ui/AddAccount.qml:52
+#: src/contents/ui/AddAccount.qml:57
 #, kde-format
 msgctxt "@action:button Dismiss the error page and quit Keysmith"
 msgid "Quit"
 msgstr "Avslutt"
 
-#: src/contents/ui/AddAccount.qml:61
+#: src/contents/ui/AddAccount.qml:66
 #, kde-format
 msgctxt "@action:button"
 msgid "Add"
 msgstr "Legg til"
 
-#: src/contents/ui/AddAccount.qml:81
+#: src/contents/ui/AddAccount.qml:86
 #, kde-format
 msgctxt "@label:chooser"
 msgid "Account type:"
 msgstr "Kontotype:"
 
-#: src/contents/ui/AddAccount.qml:90
+#: src/contents/ui/AddAccount.qml:95
 #, kde-format
 msgctxt "@option:radio"
 msgid "Time-based OTP"
 msgstr "Tidsbasert OTP"
 
-#: src/contents/ui/AddAccount.qml:101
+#: src/contents/ui/AddAccount.qml:106
 #, kde-format
 msgctxt "@option:radio"
 msgid "Hash-based OTP"
 msgstr "Hash-basert OTP"
 
-#: src/contents/ui/AddAccount.qml:113
+#: src/contents/ui/AddAccount.qml:118
 #, kde-format
 msgid "Token secret"
 msgstr "Tilgangspollett-løyndom"
 
-#: src/contents/ui/AddAccount.qml:116
+#: src/contents/ui/AddAccount.qml:120
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Secret key:"
 msgstr "Hemmeleg nøkkel:"
 
-#: src/contents/ui/AddAccount.qml:132
+#: src/contents/ui/AddAccount.qml:139
 #, kde-format
 msgctxt "Button to reveal form for configuring additional token details"
 msgid "Details"
 msgstr "Detaljar"
 
-#: src/contents/ui/AddAccount.qml:140
+#: src/contents/ui/AddAccount.qml:147
 #, kde-format
 msgctxt "@title:group"
 msgid "HOTP Details:"
 msgstr "HOTP-detaljar:"
 
-#: src/contents/ui/AddAccount.qml:153
+#: src/contents/ui/AddAccount.qml:160
 #, kde-format
 msgctxt "@label"
 msgid "TOTP Details:"
 msgstr "TOTP-detaljar:"
 
-#: src/contents/ui/ErrorPage.qml:33
+#: src/contents/ui/ErrorPage.qml:34
 #, kde-format
 msgctxt "@action:button Button to dismiss the error page"
 msgid "Continue"
 msgstr "Hald fram"
 
-#: src/contents/ui/ErrorPage.qml:40
+#: src/contents/ui/ErrorPage.qml:41
 #, kde-format
 msgctxt "@action:button Dismiss the error page and quit Keysmtih"
 msgid "Quit"
@@ -325,6 +338,109 @@ msgctxt "@label:spinbox"
 msgid "Truncation offset:"
 msgstr "Trunkerings­forskyving:"
 
+#: src/contents/ui/ImportAccount.qml:21
+#, fuzzy, kde-format
+msgctxt "@title:window"
+msgid "Import Accounts"
+msgstr "Kontoar"
+
+#: src/contents/ui/ImportAccount.qml:52
+#, kde-format
+msgid "Import format"
+msgstr ""
+
+#. i18n strings
+#: src/contents/ui/ImportAccount.qml:58
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "andOTP Encrypted JSON"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:59
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "andOTP Plain JSON"
+msgstr ""
+
+#. i18nc("@item:inlistbox", "Aegis Encrypted JSON"), value: Models.ValidatedImportInput.AegisEncryptedJSON});
+#: src/contents/ui/ImportAccount.qml:61
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "Aegis Plain JSON"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:62
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "FreeOTP URIs"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:78
+#, kde-format
+msgctxt "@label:chooser"
+msgid "Backup file:"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:81
+#, kde-format
+msgctxt "@info:placeholder"
+msgid "No file selected"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:85
+#, kde-format
+msgctxt "@title:window"
+msgid "Select file"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:99
+#, fuzzy, kde-format
+msgctxt "@info:placeholder"
+msgid "Decryption password"
+msgstr "Stadfest passordet:"
+
+#: src/contents/ui/ImportAccount.qml:101 src/contents/ui/UnlockAccounts.qml:49
+#, kde-format
+msgctxt "@label:textbox"
+msgid "Password:"
+msgstr "Passord:"
+
+#: src/contents/ui/ImportAccount.qml:112
+#, kde-format
+msgctxt "@action:button"
+msgid "Import"
+msgstr ""
+
+#: src/contents/ui/KeysmithGlobalDrawer.qml:12
+#: src/contents/ui/KeysmithGlobalDrawer.qml:15
+#, kde-format
+msgid "About Keysmith"
+msgstr "Om Keysmith"
+
+#: src/contents/ui/QRScanPage.qml:21
+#, kde-format
+msgctxt "@title"
+msgid "Scan a QR code"
+msgstr ""
+
+#: src/contents/ui/QRScanPage.qml:31
+#, kde-format
+msgctxt "@action:intoolbar"
+msgid "Select Camera"
+msgstr ""
+
+#: src/contents/ui/QRScanPage.qml:42
+#, kde-format
+msgctxt "@title:dialog"
+msgid "Select Camera"
+msgstr ""
+
+#: src/contents/ui/QRScanPage.qml:61
+#, kde-format
+msgctxt "@action:button"
+msgid "Close"
+msgstr ""
+
 #: src/contents/ui/RenameAccount.qml:17
 #, kde-format
 msgctxt "@title:window"
@@ -354,13 +470,13 @@ msgstr "Avbryt"
 msgid "Add"
 msgstr "Legg til"
 
-#: src/contents/ui/SetupPassword.qml:22 src/contents/ui/UnlockAccounts.qml:22
+#: src/contents/ui/SetupPassword.qml:21 src/contents/ui/UnlockAccounts.qml:21
 #, kde-format
 msgctxt "@title:window"
 msgid "Password"
 msgstr "Passord"
 
-#: src/contents/ui/SetupPassword.qml:28
+#: src/contents/ui/SetupPassword.qml:27
 #, kde-format
 msgid "Failed to set up your password"
 msgstr "Klarte ikkje setja opp passord"
@@ -370,19 +486,19 @@ msgstr "Klarte ikkje setja opp passord"
 msgid "Choose a password to protect your accounts"
 msgstr "Vel eit passord for å verna kontoane dine"
 
-#: src/contents/ui/SetupPassword.qml:49
+#: src/contents/ui/SetupPassword.qml:48
 #, kde-format
 msgctxt "@label:textbox"
 msgid "New Password:"
 msgstr "Nytt passord:"
 
-#: src/contents/ui/SetupPassword.qml:60
+#: src/contents/ui/SetupPassword.qml:61
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Verify password:"
 msgstr "Stadfest passordet:"
 
-#: src/contents/ui/SetupPassword.qml:68
+#: src/contents/ui/SetupPassword.qml:72
 #, kde-format
 msgctxt "@action:button"
 msgid "Apply"
@@ -430,7 +546,7 @@ msgctxt "@option:radio"
 msgid "SHA-512"
 msgstr "SHA-512"
 
-#: src/contents/ui/UnlockAccounts.qml:26
+#: src/contents/ui/UnlockAccounts.qml:25
 #, kde-format
 msgid "Failed to unlock your accounts"
 msgstr "Klarte ikkje låsa opp kontoar"
@@ -440,20 +556,29 @@ msgstr "Klarte ikkje låsa opp kontoar"
 msgid "Please provide the password to unlock your accounts"
 msgstr "Oppgje passord for å låsa opp kontoane"
 
-#: src/contents/ui/UnlockAccounts.qml:50
-#, kde-format
-msgctxt "@label:textbox"
-msgid "Password:"
-msgstr "Passord:"
-
-#: src/contents/ui/UnlockAccounts.qml:59
+#: src/contents/ui/UnlockAccounts.qml:61
 #, kde-format
 msgctxt "@action:button"
 msgid "Unlock"
 msgstr "Lås opp"
 
-#: src/main.cpp:67
+#: src/main.cpp:70
 #, kde-format
 msgctxt "@title"
 msgid "Keysmith"
 msgstr "Keysmith"
+
+#: src/main.cpp:73
+#, kde-format
+msgid "generate two-factor authentication (2FA) tokens"
+msgstr ""
+
+#: src/main.cpp:76
+#, kde-format
+msgid "Keysmith"
+msgstr "Keysmith"
+
+#: src/main.cpp:80
+#, kde-format
+msgid "© 2019 KDE Community"
+msgstr "© 2019 KDE-fellesskapet"
diff -pruN 24.08.1-1/po/pa/keysmith.po 25.03.90-1/po/pa/keysmith.po
--- 24.08.1-1/po/pa/keysmith.po	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/po/pa/keysmith.po	2025-03-27 10:13:04.000000000 +0000
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: keysmith\n"
 "Report-Msgid-Bugs-To: https://bugs.kde.org\n"
-"POT-Creation-Date: 2024-05-03 00:40+0000\n"
+"POT-Creation-Date: 2025-02-09 00:43+0000\n"
 "PO-Revision-Date: 2021-01-20 21:44-0800\n"
 "Last-Translator: A S Alam <aalam.yellow@gmail.com>\n"
 "Language-Team: Punjabi <punjabi-users@lists.sf.net>\n"
@@ -24,13 +24,13 @@ msgid ""
 "Optional account to add, formatted as otpauth:// URI (e.g. from a QR code)"
 msgstr ""
 
-#: src/app/flows_p.cpp:108 src/app/flows_p.cpp:248
+#: src/app/flows_p.cpp:111 src/app/flows_p.cpp:285
 #, kde-format
 msgctxt "@title:window"
 msgid "Invalid account"
 msgstr "ਅਢੁੱਕਵਾਂ ਖਾਤਾ"
 
-#: src/app/flows_p.cpp:109
+#: src/app/flows_p.cpp:112
 #, kde-format
 msgctxt "@info:label"
 msgid ""
@@ -40,7 +40,7 @@ msgstr ""
 "ਤੁਹਾਡੇ ਵਲੋਂ ਜੋੜਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕੀਤਾ ਜਾ ਰਿਹਾ ਖਾਤਾ ਅਢੁੱਕਵਾਂ ਹੈ। ਤੁਸੀਂ ਜਾਂ ਐਪ ਬੰਦ ਕਰ ਸਕਦੇ ਹੋ ਜਾਂ ਬਿਨਾਂ "
 "ਖਾਤਾ ਜੋੜੇ ਐਪ ਨਾਲ ਜਾਰੀ ਰੱਖ ਸਕਦੇ ਹੋ।"
 
-#: src/app/flows_p.cpp:249
+#: src/app/flows_p.cpp:286
 #, fuzzy, kde-format
 #| msgctxt "@info:label"
 #| msgid ""
@@ -150,7 +150,7 @@ msgctxt "Notification shown in a passive
 msgid "Token copied to clipboard!"
 msgstr ""
 
-#: src/contents/ui/AccountNameForm.qml:64
+#: src/contents/ui/AccountNameForm.qml:81
 #, fuzzy, kde-format
 #| msgctxt "@label:textbox"
 #| msgid "Account Name:"
@@ -158,7 +158,7 @@ msgctxt "@label:textbox"
 msgid "Account name:"
 msgstr "ਖਾਤੇ ਦਾ ਨਾਂ"
 
-#: src/contents/ui/AccountNameForm.qml:83
+#: src/contents/ui/AccountNameForm.qml:100
 #, fuzzy, kde-format
 #| msgctxt "@label:textbox"
 #| msgid "Account Issuer:"
@@ -184,14 +184,14 @@ msgctxt "error message shown when loadin
 msgid "Some accounts failed to load."
 msgstr "ਕੁਝ ਖਾਤੇ ਲੋਡ ਕਰਨ ਲਈ ਫੇਲ੍ਹ ਹੈ।"
 
-#: src/contents/ui/AccountsOverview.qml:101
+#: src/contents/ui/AccountsOverview.qml:91
 #, fuzzy, kde-format
 #| msgctxt "@title:window"
 #| msgid "Rename account to add"
 msgid "No accounts added"
 msgstr "ਜੋੜਨ ਲਈ ਖਾਤੇ ਦਾ ਨਾਂ ਬਦਲੋ"
 
-#: src/contents/ui/AccountsOverview.qml:106
+#: src/contents/ui/AccountsOverview.qml:96
 #, fuzzy, kde-format
 #| msgctxt "@title:window"
 #| msgid "Add new account"
@@ -201,26 +201,39 @@ msgctxt ""
 msgid "Add Account"
 msgstr "ਨਵਾਂ ਖਾਤਾ ਜੋੜੋ"
 
-#: src/contents/ui/AccountsOverview.qml:172
+#: src/contents/ui/AccountsOverview.qml:163
 #, fuzzy, kde-format
 #| msgid "Add"
 msgctxt "@action:button add new account, shown in toolbar"
 msgid "Add"
 msgstr "ਜੋੜੋ"
 
+#: src/contents/ui/AccountsOverview.qml:176
+#, kde-format
+msgctxt "@action:button import accounts, shown in toolbar"
+msgid "Import"
+msgstr ""
+
+#: src/contents/ui/AccountsOverview.qml:189
+#, kde-format
+msgctxt ""
+"@action:button import an account by scanning a QR code, shown in toolbar"
+msgid "Scan QR Code"
+msgstr ""
+
 #: src/contents/ui/AddAccount.qml:22
 #, kde-format
 msgctxt "@title:window"
 msgid "Add new account"
 msgstr "ਨਵਾਂ ਖਾਤਾ ਜੋੜੋ"
 
-#: src/contents/ui/AddAccount.qml:45
+#: src/contents/ui/AddAccount.qml:50
 #, kde-format
 msgctxt "@action:button cancel and dismiss the add account form"
 msgid "Cancel"
 msgstr "ਰੱਦ ਕਰੋ"
 
-#: src/contents/ui/AddAccount.qml:52
+#: src/contents/ui/AddAccount.qml:57
 #, fuzzy, kde-format
 #| msgctxt "@action:button Dismiss the error page and quit Keysmtih"
 #| msgid "Quit"
@@ -228,14 +241,14 @@ msgctxt "@action:button Dismiss the erro
 msgid "Quit"
 msgstr "ਬਾਹਰ"
 
-#: src/contents/ui/AddAccount.qml:61
+#: src/contents/ui/AddAccount.qml:66
 #, fuzzy, kde-format
 #| msgid "Add"
 msgctxt "@action:button"
 msgid "Add"
 msgstr "ਜੋੜੋ"
 
-#: src/contents/ui/AddAccount.qml:81
+#: src/contents/ui/AddAccount.qml:86
 #, fuzzy, kde-format
 #| msgctxt "@label:chooser"
 #| msgid "Account Type:"
@@ -243,36 +256,36 @@ msgctxt "@label:chooser"
 msgid "Account type:"
 msgstr "ਖਾਤੇ ਦੀ ਕਿਸਮ:"
 
-#: src/contents/ui/AddAccount.qml:90
+#: src/contents/ui/AddAccount.qml:95
 #, kde-format
 msgctxt "@option:radio"
 msgid "Time-based OTP"
 msgstr "ਸਮਾਂ-ਅਧਾਰਿਤ OTP"
 
-#: src/contents/ui/AddAccount.qml:101
+#: src/contents/ui/AddAccount.qml:106
 #, kde-format
 msgctxt "@option:radio"
 msgid "Hash-based OTP"
 msgstr "ਹੈਸ਼-ਅਧਾਰਿਤ OTP"
 
-#: src/contents/ui/AddAccount.qml:113
+#: src/contents/ui/AddAccount.qml:118
 #, kde-format
 msgid "Token secret"
 msgstr "ਟੋਕਨ ਭੇਤ"
 
-#: src/contents/ui/AddAccount.qml:116
+#: src/contents/ui/AddAccount.qml:120
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Secret key:"
 msgstr "ਭੇਤ ਕੁੰਜੀ:"
 
-#: src/contents/ui/AddAccount.qml:132
+#: src/contents/ui/AddAccount.qml:139
 #, kde-format
 msgctxt "Button to reveal form for configuring additional token details"
 msgid "Details"
 msgstr "ਵੇਰਵੇ"
 
-#: src/contents/ui/AddAccount.qml:140
+#: src/contents/ui/AddAccount.qml:147
 #, fuzzy, kde-format
 #| msgctxt "Button to reveal form for configuring additional token details"
 #| msgid "Details"
@@ -280,7 +293,7 @@ msgctxt "@title:group"
 msgid "HOTP Details:"
 msgstr "ਵੇਰਵੇ"
 
-#: src/contents/ui/AddAccount.qml:153
+#: src/contents/ui/AddAccount.qml:160
 #, fuzzy, kde-format
 #| msgctxt "Button to reveal form for configuring additional token details"
 #| msgid "Details"
@@ -288,13 +301,13 @@ msgctxt "@label"
 msgid "TOTP Details:"
 msgstr "ਵੇਰਵੇ"
 
-#: src/contents/ui/ErrorPage.qml:33
+#: src/contents/ui/ErrorPage.qml:34
 #, kde-format
 msgctxt "@action:button Button to dismiss the error page"
 msgid "Continue"
 msgstr "ਜਾਰੀ ਰੱਖੋ"
 
-#: src/contents/ui/ErrorPage.qml:40
+#: src/contents/ui/ErrorPage.qml:41
 #, kde-format
 msgctxt "@action:button Dismiss the error page and quit Keysmtih"
 msgid "Quit"
@@ -351,6 +364,115 @@ msgctxt "@label:spinbox"
 msgid "Truncation offset:"
 msgstr "ਛੰਗਾਈ ਆਫਸੈੱਟ:"
 
+#: src/contents/ui/ImportAccount.qml:21
+#, fuzzy, kde-format
+#| msgctxt "@title:window"
+#| msgid "Accounts"
+msgctxt "@title:window"
+msgid "Import Accounts"
+msgstr "ਖਾਤੇ"
+
+#: src/contents/ui/ImportAccount.qml:52
+#, kde-format
+msgid "Import format"
+msgstr ""
+
+#. i18n strings
+#: src/contents/ui/ImportAccount.qml:58
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "andOTP Encrypted JSON"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:59
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "andOTP Plain JSON"
+msgstr ""
+
+#. i18nc("@item:inlistbox", "Aegis Encrypted JSON"), value: Models.ValidatedImportInput.AegisEncryptedJSON});
+#: src/contents/ui/ImportAccount.qml:61
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "Aegis Plain JSON"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:62
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "FreeOTP URIs"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:78
+#, kde-format
+msgctxt "@label:chooser"
+msgid "Backup file:"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:81
+#, kde-format
+msgctxt "@info:placeholder"
+msgid "No file selected"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:85
+#, kde-format
+msgctxt "@title:window"
+msgid "Select file"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:99
+#, fuzzy, kde-format
+#| msgctxt "@label:textbox"
+#| msgid "Verify password:"
+msgctxt "@info:placeholder"
+msgid "Decryption password"
+msgstr "ਪਾਸਵਰਡ ਤਸਦੀਕ ਕਰੋ:"
+
+#: src/contents/ui/ImportAccount.qml:101 src/contents/ui/UnlockAccounts.qml:49
+#, kde-format
+msgctxt "@label:textbox"
+msgid "Password:"
+msgstr "ਪਾਸਵਰਡ:"
+
+#: src/contents/ui/ImportAccount.qml:112
+#, kde-format
+msgctxt "@action:button"
+msgid "Import"
+msgstr ""
+
+#: src/contents/ui/KeysmithGlobalDrawer.qml:12
+#: src/contents/ui/KeysmithGlobalDrawer.qml:15
+#, fuzzy, kde-format
+#| msgctxt "@title"
+#| msgid "Keysmith"
+msgid "About Keysmith"
+msgstr "ਕੀ-ਸਮਿੱਥ"
+
+#: src/contents/ui/QRScanPage.qml:21
+#, kde-format
+msgctxt "@title"
+msgid "Scan a QR code"
+msgstr ""
+
+#: src/contents/ui/QRScanPage.qml:31
+#, kde-format
+msgctxt "@action:intoolbar"
+msgid "Select Camera"
+msgstr ""
+
+#: src/contents/ui/QRScanPage.qml:42
+#, kde-format
+msgctxt "@title:dialog"
+msgid "Select Camera"
+msgstr ""
+
+#: src/contents/ui/QRScanPage.qml:61
+#, kde-format
+msgctxt "@action:button"
+msgid "Close"
+msgstr ""
+
 #: src/contents/ui/RenameAccount.qml:17
 #, kde-format
 msgctxt "@title:window"
@@ -379,13 +501,13 @@ msgstr "ਰੱਦ ਕਰੋ"
 msgid "Add"
 msgstr "ਜੋੜੋ"
 
-#: src/contents/ui/SetupPassword.qml:22 src/contents/ui/UnlockAccounts.qml:22
+#: src/contents/ui/SetupPassword.qml:21 src/contents/ui/UnlockAccounts.qml:21
 #, kde-format
 msgctxt "@title:window"
 msgid "Password"
 msgstr "ਪਾਸਵਰਡ"
 
-#: src/contents/ui/SetupPassword.qml:28
+#: src/contents/ui/SetupPassword.qml:27
 #, kde-format
 msgid "Failed to set up your password"
 msgstr "ਤੁਹਾਡਾ ਪਾਸਵਰਡ ਸੈਟ ਅੱਪ ਕਰਨ ਲਈ ਅਸਫ਼ਲ ਹੈ"
@@ -396,7 +518,7 @@ msgstr "ਤੁਹਾਡਾ ਪਾਸਵ
 msgid "Choose a password to protect your accounts"
 msgstr "ਆਪਣੇ ਖਾਤਿਆਂ ਨੂੰ ਸੁਰੱਖਿਅਤ ਕਰਨ ਲਈ ਪਾਸਵਰਡ ਚੁਣਨ ਕਰਕੇ ਸ਼ੁਰੂਆਤ ਕਰੋ"
 
-#: src/contents/ui/SetupPassword.qml:49
+#: src/contents/ui/SetupPassword.qml:48
 #, fuzzy, kde-format
 #| msgctxt "@label:textbox"
 #| msgid "New password:"
@@ -404,13 +526,13 @@ msgctxt "@label:textbox"
 msgid "New Password:"
 msgstr "ਨਵਾਂ ਪਾਸਵਰਡ:"
 
-#: src/contents/ui/SetupPassword.qml:60
+#: src/contents/ui/SetupPassword.qml:61
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Verify password:"
 msgstr "ਪਾਸਵਰਡ ਤਸਦੀਕ ਕਰੋ:"
 
-#: src/contents/ui/SetupPassword.qml:68
+#: src/contents/ui/SetupPassword.qml:72
 #, fuzzy, kde-format
 #| msgid "Apply"
 msgctxt "@action:button"
@@ -459,7 +581,7 @@ msgctxt "@option:radio"
 msgid "SHA-512"
 msgstr "SHA-512"
 
-#: src/contents/ui/UnlockAccounts.qml:26
+#: src/contents/ui/UnlockAccounts.qml:25
 #, kde-format
 msgid "Failed to unlock your accounts"
 msgstr "ਤੁਹਾਡੇ ਖਾਤੇ ਅਣ-ਲਾਕ ਕਰਨ ਲਈ ਅਸਫ਼ਲ ਹੈ"
@@ -469,25 +591,36 @@ msgstr "ਤੁਹਾਡੇ ਖਾਤੇ
 msgid "Please provide the password to unlock your accounts"
 msgstr "ਆਪਣੇ ਖਾਤਿਆਂ ਨੂੰ ਅਣ-ਲਾਕ ਕਰਨ ਲਈ ਪਾਸਵਰਡ ਦਿਓ ਜੀ"
 
-#: src/contents/ui/UnlockAccounts.qml:50
-#, kde-format
-msgctxt "@label:textbox"
-msgid "Password:"
-msgstr "ਪਾਸਵਰਡ:"
-
-#: src/contents/ui/UnlockAccounts.qml:59
+#: src/contents/ui/UnlockAccounts.qml:61
 #, fuzzy, kde-format
 #| msgid "Unlock"
 msgctxt "@action:button"
 msgid "Unlock"
 msgstr "ਅਣ-ਲਾਕ ਕਰੋ"
 
-#: src/main.cpp:67
+#: src/main.cpp:70
 #, kde-format
 msgctxt "@title"
 msgid "Keysmith"
 msgstr "ਕੀ-ਸਮਿੱਥ"
 
+#: src/main.cpp:73
+#, kde-format
+msgid "generate two-factor authentication (2FA) tokens"
+msgstr ""
+
+#: src/main.cpp:76
+#, fuzzy, kde-format
+#| msgctxt "@title"
+#| msgid "Keysmith"
+msgid "Keysmith"
+msgstr "ਕੀ-ਸਮਿੱਥ"
+
+#: src/main.cpp:80
+#, kde-format
+msgid "© 2019 KDE Community"
+msgstr ""
+
 #~ msgctxt "Button cancelling account removal"
 #~ msgid "Cancel"
 #~ msgstr "ਰੱਦ ਕਰੋ"
diff -pruN 24.08.1-1/po/pl/keysmith.po 25.03.90-1/po/pl/keysmith.po
--- 24.08.1-1/po/pl/keysmith.po	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/po/pl/keysmith.po	2025-03-27 10:13:04.000000000 +0000
@@ -1,13 +1,13 @@
 # Copyright (C) 2024 This file is copyright:
 # This file is distributed under the same license as the keysmith package.
+# SPDX-FileCopyrightText: 2021, 2022, 2023, 2024, 2025 Łukasz Wojniłowicz <lukasz.wojnilowicz@gmail.com>
 #
-# SPDX-FileCopyrightText: 2021, 2022, 2023, 2024 Łukasz Wojniłowicz <lukasz.wojnilowicz@gmail.com>
 msgid ""
 msgstr ""
 "Project-Id-Version: keysmith\n"
 "Report-Msgid-Bugs-To: https://bugs.kde.org\n"
-"POT-Creation-Date: 2024-05-03 00:40+0000\n"
-"PO-Revision-Date: 2024-01-21 08:07+0100\n"
+"POT-Creation-Date: 2025-02-09 00:43+0000\n"
+"PO-Revision-Date: 2025-01-25 12:49+0100\n"
 "Last-Translator: Łukasz Wojniłowicz <lukasz.wojnilowicz@gmail.com>\n"
 "Language-Team: Polish <kde-i18n-doc@kde.org>\n"
 "Language: pl\n"
@@ -16,6 +16,7 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
 "|| n%100>=20) ? 1 : 2);\n"
+"X-Generator: Lokalize 24.12.1\n"
 
 #: src/app/cli.cpp:133
 #, kde-format
@@ -25,13 +26,13 @@ msgid ""
 msgstr ""
 "Opcjonalne konto do dodania, zapisane jako otpauth:// URI (np. z kodu QR)"
 
-#: src/app/flows_p.cpp:108 src/app/flows_p.cpp:248
+#: src/app/flows_p.cpp:111 src/app/flows_p.cpp:285
 #, kde-format
 msgctxt "@title:window"
 msgid "Invalid account"
 msgstr "Nieprawidłowe konto"
 
-#: src/app/flows_p.cpp:109
+#: src/app/flows_p.cpp:112
 #, kde-format
 msgctxt "@info:label"
 msgid ""
@@ -41,7 +42,7 @@ msgstr ""
 "Konto, które próbujesz dodać, jest nieprawidłowe. Albo zakończysz program "
 "albo nie dodasz konta."
 
-#: src/app/flows_p.cpp:249
+#: src/app/flows_p.cpp:286
 #, kde-format
 msgctxt "@info:label"
 msgid ""
@@ -146,13 +147,13 @@ msgctxt "Notification shown in a passive
 msgid "Token copied to clipboard!"
 msgstr "Skopiowano token do schowka!"
 
-#: src/contents/ui/AccountNameForm.qml:64
+#: src/contents/ui/AccountNameForm.qml:81
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Account name:"
 msgstr "Nazwa konta:"
 
-#: src/contents/ui/AccountNameForm.qml:83
+#: src/contents/ui/AccountNameForm.qml:100
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Account issuer:"
@@ -176,12 +177,12 @@ msgctxt "error message shown when loadin
 msgid "Some accounts failed to load."
 msgstr "Nie udało się wczytać niektórych kont."
 
-#: src/contents/ui/AccountsOverview.qml:101
+#: src/contents/ui/AccountsOverview.qml:91
 #, kde-format
 msgid "No accounts added"
 msgstr "Nie dodano żadnych kont"
 
-#: src/contents/ui/AccountsOverview.qml:106
+#: src/contents/ui/AccountsOverview.qml:96
 #, kde-format
 msgctxt ""
 "@action:button add new account, shown instead of overview list when no "
@@ -189,90 +190,103 @@ msgctxt ""
 msgid "Add Account"
 msgstr "Dodaj konto"
 
-#: src/contents/ui/AccountsOverview.qml:172
+#: src/contents/ui/AccountsOverview.qml:163
 #, kde-format
 msgctxt "@action:button add new account, shown in toolbar"
 msgid "Add"
 msgstr "Dodaj"
 
+#: src/contents/ui/AccountsOverview.qml:176
+#, kde-format
+msgctxt "@action:button import accounts, shown in toolbar"
+msgid "Import"
+msgstr "Zaimportuj"
+
+#: src/contents/ui/AccountsOverview.qml:189
+#, kde-format
+msgctxt ""
+"@action:button import an account by scanning a QR code, shown in toolbar"
+msgid "Scan QR Code"
+msgstr "Zeskanuj kod QR"
+
 #: src/contents/ui/AddAccount.qml:22
 #, kde-format
 msgctxt "@title:window"
 msgid "Add new account"
 msgstr "Dodaj nowe konto"
 
-#: src/contents/ui/AddAccount.qml:45
+#: src/contents/ui/AddAccount.qml:50
 #, kde-format
 msgctxt "@action:button cancel and dismiss the add account form"
 msgid "Cancel"
 msgstr "Anuluj"
 
-#: src/contents/ui/AddAccount.qml:52
+#: src/contents/ui/AddAccount.qml:57
 #, kde-format
 msgctxt "@action:button Dismiss the error page and quit Keysmith"
 msgid "Quit"
 msgstr "Zakończ"
 
-#: src/contents/ui/AddAccount.qml:61
+#: src/contents/ui/AddAccount.qml:66
 #, kde-format
 msgctxt "@action:button"
 msgid "Add"
 msgstr "Dodaj"
 
-#: src/contents/ui/AddAccount.qml:81
+#: src/contents/ui/AddAccount.qml:86
 #, kde-format
 msgctxt "@label:chooser"
 msgid "Account type:"
 msgstr "Rodzaj konta:"
 
-#: src/contents/ui/AddAccount.qml:90
+#: src/contents/ui/AddAccount.qml:95
 #, kde-format
 msgctxt "@option:radio"
 msgid "Time-based OTP"
 msgstr "OTP oparte na czasie"
 
-#: src/contents/ui/AddAccount.qml:101
+#: src/contents/ui/AddAccount.qml:106
 #, kde-format
 msgctxt "@option:radio"
 msgid "Hash-based OTP"
 msgstr "OTP oparte na skrócie"
 
-#: src/contents/ui/AddAccount.qml:113
+#: src/contents/ui/AddAccount.qml:118
 #, kde-format
 msgid "Token secret"
 msgstr "Dana poufna tokenu"
 
-#: src/contents/ui/AddAccount.qml:116
+#: src/contents/ui/AddAccount.qml:120
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Secret key:"
 msgstr "Klucz poufny:"
 
-#: src/contents/ui/AddAccount.qml:132
+#: src/contents/ui/AddAccount.qml:139
 #, kde-format
 msgctxt "Button to reveal form for configuring additional token details"
 msgid "Details"
 msgstr "Szczegóły"
 
-#: src/contents/ui/AddAccount.qml:140
+#: src/contents/ui/AddAccount.qml:147
 #, kde-format
 msgctxt "@title:group"
 msgid "HOTP Details:"
 msgstr "Szczegóły HOTP:"
 
-#: src/contents/ui/AddAccount.qml:153
+#: src/contents/ui/AddAccount.qml:160
 #, kde-format
 msgctxt "@label"
 msgid "TOTP Details:"
 msgstr "Szczegóły TOTP:"
 
-#: src/contents/ui/ErrorPage.qml:33
+#: src/contents/ui/ErrorPage.qml:34
 #, kde-format
 msgctxt "@action:button Button to dismiss the error page"
 msgid "Continue"
 msgstr "Kontynuuj"
 
-#: src/contents/ui/ErrorPage.qml:40
+#: src/contents/ui/ErrorPage.qml:41
 #, kde-format
 msgctxt "@action:button Dismiss the error page and quit Keysmtih"
 msgid "Quit"
@@ -323,6 +337,109 @@ msgctxt "@label:spinbox"
 msgid "Truncation offset:"
 msgstr "Długość przycinania:"
 
+#: src/contents/ui/ImportAccount.qml:21
+#, kde-format
+msgctxt "@title:window"
+msgid "Import Accounts"
+msgstr "Zaimportuj konta"
+
+#: src/contents/ui/ImportAccount.qml:52
+#, kde-format
+msgid "Import format"
+msgstr "Format importu"
+
+#. i18n strings
+#: src/contents/ui/ImportAccount.qml:58
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "andOTP Encrypted JSON"
+msgstr "andOTP zaszyfrowany JSON"
+
+#: src/contents/ui/ImportAccount.qml:59
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "andOTP Plain JSON"
+msgstr "andOTP niezaszyfrowany JSON"
+
+#. i18nc("@item:inlistbox", "Aegis Encrypted JSON"), value: Models.ValidatedImportInput.AegisEncryptedJSON});
+#: src/contents/ui/ImportAccount.qml:61
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "Aegis Plain JSON"
+msgstr "Aegis niezaszyfrowany JSON"
+
+#: src/contents/ui/ImportAccount.qml:62
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "FreeOTP URIs"
+msgstr "Adresy URI FreeOTP"
+
+#: src/contents/ui/ImportAccount.qml:78
+#, kde-format
+msgctxt "@label:chooser"
+msgid "Backup file:"
+msgstr "Plik kopii zapasowej:"
+
+#: src/contents/ui/ImportAccount.qml:81
+#, kde-format
+msgctxt "@info:placeholder"
+msgid "No file selected"
+msgstr "Nie wybrano plików"
+
+#: src/contents/ui/ImportAccount.qml:85
+#, kde-format
+msgctxt "@title:window"
+msgid "Select file"
+msgstr "Wybierz plik"
+
+#: src/contents/ui/ImportAccount.qml:99
+#, kde-format
+msgctxt "@info:placeholder"
+msgid "Decryption password"
+msgstr "Hasło odszyfrowujące"
+
+#: src/contents/ui/ImportAccount.qml:101 src/contents/ui/UnlockAccounts.qml:49
+#, kde-format
+msgctxt "@label:textbox"
+msgid "Password:"
+msgstr "Hasło:"
+
+#: src/contents/ui/ImportAccount.qml:112
+#, kde-format
+msgctxt "@action:button"
+msgid "Import"
+msgstr "Zaimportuj"
+
+#: src/contents/ui/KeysmithGlobalDrawer.qml:12
+#: src/contents/ui/KeysmithGlobalDrawer.qml:15
+#, kde-format
+msgid "About Keysmith"
+msgstr "O Keysmith"
+
+#: src/contents/ui/QRScanPage.qml:21
+#, kde-format
+msgctxt "@title"
+msgid "Scan a QR code"
+msgstr "Zeskanuj kod QR"
+
+#: src/contents/ui/QRScanPage.qml:31
+#, kde-format
+msgctxt "@action:intoolbar"
+msgid "Select Camera"
+msgstr "Wybierz aparat"
+
+#: src/contents/ui/QRScanPage.qml:42
+#, kde-format
+msgctxt "@title:dialog"
+msgid "Select Camera"
+msgstr "Wybierz aparat"
+
+#: src/contents/ui/QRScanPage.qml:61
+#, kde-format
+msgctxt "@action:button"
+msgid "Close"
+msgstr "Zamknij"
+
 #: src/contents/ui/RenameAccount.qml:17
 #, kde-format
 msgctxt "@title:window"
@@ -352,13 +469,13 @@ msgstr "Anuluj"
 msgid "Add"
 msgstr "Dodaj"
 
-#: src/contents/ui/SetupPassword.qml:22 src/contents/ui/UnlockAccounts.qml:22
+#: src/contents/ui/SetupPassword.qml:21 src/contents/ui/UnlockAccounts.qml:21
 #, kde-format
 msgctxt "@title:window"
 msgid "Password"
 msgstr "Hasło"
 
-#: src/contents/ui/SetupPassword.qml:28
+#: src/contents/ui/SetupPassword.qml:27
 #, kde-format
 msgid "Failed to set up your password"
 msgstr "Nie udało się ustawić twojego hasła"
@@ -368,19 +485,19 @@ msgstr "Nie udało się ustawić twojego
 msgid "Choose a password to protect your accounts"
 msgstr "Wpisz hasło, które będzie chronić twoje konta"
 
-#: src/contents/ui/SetupPassword.qml:49
+#: src/contents/ui/SetupPassword.qml:48
 #, kde-format
 msgctxt "@label:textbox"
 msgid "New Password:"
 msgstr "Nowe hasło:"
 
-#: src/contents/ui/SetupPassword.qml:60
+#: src/contents/ui/SetupPassword.qml:61
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Verify password:"
 msgstr "Potwierdź hasło:"
 
-#: src/contents/ui/SetupPassword.qml:68
+#: src/contents/ui/SetupPassword.qml:72
 #, kde-format
 msgctxt "@action:button"
 msgid "Apply"
@@ -428,7 +545,7 @@ msgctxt "@option:radio"
 msgid "SHA-512"
 msgstr "SHA-512"
 
-#: src/contents/ui/UnlockAccounts.qml:26
+#: src/contents/ui/UnlockAccounts.qml:25
 #, kde-format
 msgid "Failed to unlock your accounts"
 msgstr "Nie udało się odblokować kont"
@@ -438,24 +555,33 @@ msgstr "Nie udało się odblokować kont
 msgid "Please provide the password to unlock your accounts"
 msgstr "Wpisz hasło do odblokowania twoich kont"
 
-#: src/contents/ui/UnlockAccounts.qml:50
-#, kde-format
-msgctxt "@label:textbox"
-msgid "Password:"
-msgstr "Hasło:"
-
-#: src/contents/ui/UnlockAccounts.qml:59
+#: src/contents/ui/UnlockAccounts.qml:61
 #, kde-format
 msgctxt "@action:button"
 msgid "Unlock"
 msgstr "Odblokuj"
 
-#: src/main.cpp:67
+#: src/main.cpp:70
 #, kde-format
 msgctxt "@title"
 msgid "Keysmith"
 msgstr "Keysmith"
 
+#: src/main.cpp:73
+#, kde-format
+msgid "generate two-factor authentication (2FA) tokens"
+msgstr "utwórz tokeny do uwierzytelniania dwuskładnikowego (2FA)"
+
+#: src/main.cpp:76
+#, kde-format
+msgid "Keysmith"
+msgstr "Keysmith"
+
+#: src/main.cpp:80
+#, kde-format
+msgid "© 2019 KDE Community"
+msgstr "© 2019 Społeczność KDE"
+
 #~ msgctxt "Button cancelling account removal"
 #~ msgid "Cancel"
 #~ msgstr "Anuluj"
diff -pruN 24.08.1-1/po/pt/keysmith.po 25.03.90-1/po/pt/keysmith.po
--- 24.08.1-1/po/pt/keysmith.po	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/po/pt/keysmith.po	2025-03-27 10:13:04.000000000 +0000
@@ -2,7 +2,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: keysmith\n"
 "Report-Msgid-Bugs-To: https://bugs.kde.org\n"
-"POT-Creation-Date: 2024-05-03 00:40+0000\n"
+"POT-Creation-Date: 2025-02-09 00:43+0000\n"
 "PO-Revision-Date: 2023-05-02 11:06+0100\n"
 "Last-Translator: José Nuno Coelho Pires <zepires@gmail.com>\n"
 "Language-Team: Portuguese <kde-i18n-pt@kde.org>\n"
@@ -22,13 +22,13 @@ msgstr ""
 "Conta opcional a adicionar, formatada como um URI otpauth:// (p.ex., de um "
 "código QR)"
 
-#: src/app/flows_p.cpp:108 src/app/flows_p.cpp:248
+#: src/app/flows_p.cpp:111 src/app/flows_p.cpp:285
 #, kde-format
 msgctxt "@title:window"
 msgid "Invalid account"
 msgstr "Conta inválida"
 
-#: src/app/flows_p.cpp:109
+#: src/app/flows_p.cpp:112
 #, kde-format
 msgctxt "@info:label"
 msgid ""
@@ -38,7 +38,7 @@ msgstr ""
 "A conta que está a tentar adicionar é inválida. Poderá sair da aplicação ou "
 "continuar sem adicionar a conta."
 
-#: src/app/flows_p.cpp:249
+#: src/app/flows_p.cpp:286
 #, kde-format
 msgctxt "@info:label"
 msgid ""
@@ -155,13 +155,13 @@ msgctxt "Notification shown in a passive
 msgid "Token copied to clipboard!"
 msgstr "O código foi copiado para a área de transferência!"
 
-#: src/contents/ui/AccountNameForm.qml:64
+#: src/contents/ui/AccountNameForm.qml:81
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Account name:"
 msgstr "Nome da conta:"
 
-#: src/contents/ui/AccountNameForm.qml:83
+#: src/contents/ui/AccountNameForm.qml:100
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Account issuer:"
@@ -185,12 +185,12 @@ msgctxt "error message shown when loadin
 msgid "Some accounts failed to load."
 msgstr "Não foi possível carregar algumas das contas."
 
-#: src/contents/ui/AccountsOverview.qml:101
+#: src/contents/ui/AccountsOverview.qml:91
 #, kde-format
 msgid "No accounts added"
 msgstr "Sem contas adicionadas"
 
-#: src/contents/ui/AccountsOverview.qml:106
+#: src/contents/ui/AccountsOverview.qml:96
 #, kde-format
 msgctxt ""
 "@action:button add new account, shown instead of overview list when no "
@@ -198,25 +198,38 @@ msgctxt ""
 msgid "Add Account"
 msgstr "Adicionar uma Conta"
 
-#: src/contents/ui/AccountsOverview.qml:172
+#: src/contents/ui/AccountsOverview.qml:163
 #, kde-format
 msgctxt "@action:button add new account, shown in toolbar"
 msgid "Add"
 msgstr "Adicionar"
 
+#: src/contents/ui/AccountsOverview.qml:176
+#, kde-format
+msgctxt "@action:button import accounts, shown in toolbar"
+msgid "Import"
+msgstr ""
+
+#: src/contents/ui/AccountsOverview.qml:189
+#, kde-format
+msgctxt ""
+"@action:button import an account by scanning a QR code, shown in toolbar"
+msgid "Scan QR Code"
+msgstr ""
+
 #: src/contents/ui/AddAccount.qml:22
 #, kde-format
 msgctxt "@title:window"
 msgid "Add new account"
 msgstr "Adicionar uma nova conta"
 
-#: src/contents/ui/AddAccount.qml:45
+#: src/contents/ui/AddAccount.qml:50
 #, kde-format
 msgctxt "@action:button cancel and dismiss the add account form"
 msgid "Cancel"
 msgstr "Cancelar"
 
-#: src/contents/ui/AddAccount.qml:52
+#: src/contents/ui/AddAccount.qml:57
 #, fuzzy, kde-format
 #| msgctxt "@action:button Dismiss the error page and quit Keysmtih"
 #| msgid "Quit"
@@ -224,49 +237,49 @@ msgctxt "@action:button Dismiss the erro
 msgid "Quit"
 msgstr "Sair"
 
-#: src/contents/ui/AddAccount.qml:61
+#: src/contents/ui/AddAccount.qml:66
 #, fuzzy, kde-format
 #| msgid "Add"
 msgctxt "@action:button"
 msgid "Add"
 msgstr "Adicionar"
 
-#: src/contents/ui/AddAccount.qml:81
+#: src/contents/ui/AddAccount.qml:86
 #, kde-format
 msgctxt "@label:chooser"
 msgid "Account type:"
 msgstr "Tipo de conta:"
 
-#: src/contents/ui/AddAccount.qml:90
+#: src/contents/ui/AddAccount.qml:95
 #, kde-format
 msgctxt "@option:radio"
 msgid "Time-based OTP"
 msgstr "OTP baseado no tempo"
 
-#: src/contents/ui/AddAccount.qml:101
+#: src/contents/ui/AddAccount.qml:106
 #, kde-format
 msgctxt "@option:radio"
 msgid "Hash-based OTP"
 msgstr "OTP baseado num código"
 
-#: src/contents/ui/AddAccount.qml:113
+#: src/contents/ui/AddAccount.qml:118
 #, kde-format
 msgid "Token secret"
 msgstr "Senha por código"
 
-#: src/contents/ui/AddAccount.qml:116
+#: src/contents/ui/AddAccount.qml:120
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Secret key:"
 msgstr "Chave privada:"
 
-#: src/contents/ui/AddAccount.qml:132
+#: src/contents/ui/AddAccount.qml:139
 #, kde-format
 msgctxt "Button to reveal form for configuring additional token details"
 msgid "Details"
 msgstr "Detalhes"
 
-#: src/contents/ui/AddAccount.qml:140
+#: src/contents/ui/AddAccount.qml:147
 #, fuzzy, kde-format
 #| msgctxt "Button to reveal form for configuring additional token details"
 #| msgid "Details"
@@ -274,7 +287,7 @@ msgctxt "@title:group"
 msgid "HOTP Details:"
 msgstr "Detalhes"
 
-#: src/contents/ui/AddAccount.qml:153
+#: src/contents/ui/AddAccount.qml:160
 #, fuzzy, kde-format
 #| msgctxt "Button to reveal form for configuring additional token details"
 #| msgid "Details"
@@ -282,13 +295,13 @@ msgctxt "@label"
 msgid "TOTP Details:"
 msgstr "Detalhes"
 
-#: src/contents/ui/ErrorPage.qml:33
+#: src/contents/ui/ErrorPage.qml:34
 #, kde-format
 msgctxt "@action:button Button to dismiss the error page"
 msgid "Continue"
 msgstr "Continuar"
 
-#: src/contents/ui/ErrorPage.qml:40
+#: src/contents/ui/ErrorPage.qml:41
 #, kde-format
 msgctxt "@action:button Dismiss the error page and quit Keysmtih"
 msgid "Quit"
@@ -345,6 +358,115 @@ msgctxt "@label:spinbox"
 msgid "Truncation offset:"
 msgstr "Deslocamento da truncagem:"
 
+#: src/contents/ui/ImportAccount.qml:21
+#, fuzzy, kde-format
+#| msgctxt "@title:window"
+#| msgid "Accounts"
+msgctxt "@title:window"
+msgid "Import Accounts"
+msgstr "Contas"
+
+#: src/contents/ui/ImportAccount.qml:52
+#, kde-format
+msgid "Import format"
+msgstr ""
+
+#. i18n strings
+#: src/contents/ui/ImportAccount.qml:58
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "andOTP Encrypted JSON"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:59
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "andOTP Plain JSON"
+msgstr ""
+
+#. i18nc("@item:inlistbox", "Aegis Encrypted JSON"), value: Models.ValidatedImportInput.AegisEncryptedJSON});
+#: src/contents/ui/ImportAccount.qml:61
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "Aegis Plain JSON"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:62
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "FreeOTP URIs"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:78
+#, kde-format
+msgctxt "@label:chooser"
+msgid "Backup file:"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:81
+#, kde-format
+msgctxt "@info:placeholder"
+msgid "No file selected"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:85
+#, kde-format
+msgctxt "@title:window"
+msgid "Select file"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:99
+#, fuzzy, kde-format
+#| msgctxt "@label:textbox"
+#| msgid "Verify password:"
+msgctxt "@info:placeholder"
+msgid "Decryption password"
+msgstr "Verifique a senha:"
+
+#: src/contents/ui/ImportAccount.qml:101 src/contents/ui/UnlockAccounts.qml:49
+#, kde-format
+msgctxt "@label:textbox"
+msgid "Password:"
+msgstr "Senha:"
+
+#: src/contents/ui/ImportAccount.qml:112
+#, kde-format
+msgctxt "@action:button"
+msgid "Import"
+msgstr ""
+
+#: src/contents/ui/KeysmithGlobalDrawer.qml:12
+#: src/contents/ui/KeysmithGlobalDrawer.qml:15
+#, fuzzy, kde-format
+#| msgctxt "@title"
+#| msgid "Keysmith"
+msgid "About Keysmith"
+msgstr "Keysmith"
+
+#: src/contents/ui/QRScanPage.qml:21
+#, kde-format
+msgctxt "@title"
+msgid "Scan a QR code"
+msgstr ""
+
+#: src/contents/ui/QRScanPage.qml:31
+#, kde-format
+msgctxt "@action:intoolbar"
+msgid "Select Camera"
+msgstr ""
+
+#: src/contents/ui/QRScanPage.qml:42
+#, kde-format
+msgctxt "@title:dialog"
+msgid "Select Camera"
+msgstr ""
+
+#: src/contents/ui/QRScanPage.qml:61
+#, kde-format
+msgctxt "@action:button"
+msgid "Close"
+msgstr ""
+
 #: src/contents/ui/RenameAccount.qml:17
 #, kde-format
 msgctxt "@title:window"
@@ -374,13 +496,13 @@ msgstr "Cancelar"
 msgid "Add"
 msgstr "Adicionar"
 
-#: src/contents/ui/SetupPassword.qml:22 src/contents/ui/UnlockAccounts.qml:22
+#: src/contents/ui/SetupPassword.qml:21 src/contents/ui/UnlockAccounts.qml:21
 #, kde-format
 msgctxt "@title:window"
 msgid "Password"
 msgstr "Senha"
 
-#: src/contents/ui/SetupPassword.qml:28
+#: src/contents/ui/SetupPassword.qml:27
 #, kde-format
 msgid "Failed to set up your password"
 msgstr "Não foi possível configurar a sua senha"
@@ -390,7 +512,7 @@ msgstr "Não foi possível configurar a
 msgid "Choose a password to protect your accounts"
 msgstr "Escolha uma senha para proteger as suas contas"
 
-#: src/contents/ui/SetupPassword.qml:49
+#: src/contents/ui/SetupPassword.qml:48
 #, fuzzy, kde-format
 #| msgctxt "@label:textbox"
 #| msgid "New password:"
@@ -398,13 +520,13 @@ msgctxt "@label:textbox"
 msgid "New Password:"
 msgstr "Nova senha:"
 
-#: src/contents/ui/SetupPassword.qml:60
+#: src/contents/ui/SetupPassword.qml:61
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Verify password:"
 msgstr "Verifique a senha:"
 
-#: src/contents/ui/SetupPassword.qml:68
+#: src/contents/ui/SetupPassword.qml:72
 #, fuzzy, kde-format
 #| msgid "Apply"
 msgctxt "@action:button"
@@ -453,7 +575,7 @@ msgctxt "@option:radio"
 msgid "SHA-512"
 msgstr "SHA-512"
 
-#: src/contents/ui/UnlockAccounts.qml:26
+#: src/contents/ui/UnlockAccounts.qml:25
 #, kde-format
 msgid "Failed to unlock your accounts"
 msgstr "Não foi possível desbloquear as suas contas"
@@ -463,25 +585,36 @@ msgstr "Não foi possível desbloquear a
 msgid "Please provide the password to unlock your accounts"
 msgstr "Por favor indique a senha para desbloquear as suas contas"
 
-#: src/contents/ui/UnlockAccounts.qml:50
-#, kde-format
-msgctxt "@label:textbox"
-msgid "Password:"
-msgstr "Senha:"
-
-#: src/contents/ui/UnlockAccounts.qml:59
+#: src/contents/ui/UnlockAccounts.qml:61
 #, fuzzy, kde-format
 #| msgid "Unlock"
 msgctxt "@action:button"
 msgid "Unlock"
 msgstr "Desbloquear"
 
-#: src/main.cpp:67
+#: src/main.cpp:70
 #, kde-format
 msgctxt "@title"
 msgid "Keysmith"
 msgstr "Keysmith"
 
+#: src/main.cpp:73
+#, kde-format
+msgid "generate two-factor authentication (2FA) tokens"
+msgstr ""
+
+#: src/main.cpp:76
+#, fuzzy, kde-format
+#| msgctxt "@title"
+#| msgid "Keysmith"
+msgid "Keysmith"
+msgstr "Keysmith"
+
+#: src/main.cpp:80
+#, kde-format
+msgid "© 2019 KDE Community"
+msgstr ""
+
 #~ msgctxt "Button cancelling account removal"
 #~ msgid "Cancel"
 #~ msgstr "Cancelar"
diff -pruN 24.08.1-1/po/pt_BR/keysmith.po 25.03.90-1/po/pt_BR/keysmith.po
--- 24.08.1-1/po/pt_BR/keysmith.po	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/po/pt_BR/keysmith.po	2025-03-27 10:13:04.000000000 +0000
@@ -5,20 +5,21 @@
 # Luiz Fernando Ranghetti <elchevive@opensuse.org>, 2020, 2021, 2023.
 # André Marcelo Alvarenga <alvarenga@kde.org>, 2020.
 # Geraldo Simiao <geraldosimiao@fedoraproject.org>, 2023.
+# SPDX-FileCopyrightText: 2025 Guilherme Marçal Silva <guimarcalsilva@gmail.com>
 msgid ""
 msgstr ""
 "Project-Id-Version: keysmith\n"
 "Report-Msgid-Bugs-To: https://bugs.kde.org\n"
-"POT-Creation-Date: 2024-05-03 00:40+0000\n"
-"PO-Revision-Date: 2023-11-14 13:36-0300\n"
-"Last-Translator: Luiz Fernando Ranghetti <elchevive@opensuse.org>\n"
+"POT-Creation-Date: 2025-02-09 00:43+0000\n"
+"PO-Revision-Date: 2025-02-13 00:05-0300\n"
+"Last-Translator: Guilherme Marçal Silva <guimarcalsilva@gmail.com>\n"
 "Language-Team: Brazilian Portuguese <kde-i18n-pt_BR@kde.org>\n"
 "Language: pt_BR\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n > 1);\n"
-"X-Generator: Lokalize 22.12.3\n"
+"X-Generator: Lokalize 24.12.2\n"
 
 #: src/app/cli.cpp:133
 #, kde-format
@@ -29,13 +30,13 @@ msgstr ""
 "Conta opcional a adicionar, formatada como URI otpauth://  (ex.: de um "
 "código QR)"
 
-#: src/app/flows_p.cpp:108 src/app/flows_p.cpp:248
+#: src/app/flows_p.cpp:111 src/app/flows_p.cpp:285
 #, kde-format
 msgctxt "@title:window"
 msgid "Invalid account"
 msgstr "Conta inválida"
 
-#: src/app/flows_p.cpp:109
+#: src/app/flows_p.cpp:112
 #, kde-format
 msgctxt "@info:label"
 msgid ""
@@ -45,7 +46,7 @@ msgstr ""
 "A conta que você está tentando adicionar é inválida. Você pode ou sair do "
 "aplicativo ou continuar sem adicionar a conta."
 
-#: src/app/flows_p.cpp:249
+#: src/app/flows_p.cpp:286
 #, kde-format
 msgctxt "@info:label"
 msgid ""
@@ -120,14 +121,7 @@ msgid "Removing account: %1"
 msgstr "Removendo conta: %1"
 
 #: src/contents/ui/AccountEntryViewBase.qml:105
-#, fuzzy, kde-format
-#| msgid ""
-#| "<p>Removing this account from Keysmith will not disable two-factor "
-#| "authentication (2FA). Make sure you can still access your account without "
-#| "using Keysmith before proceeding:</p><ul><li>Make sure you have another "
-#| "2FA app set up for your account, or:</li><li>Make sure you have recovery "
-#| "codes for your account, or:</li><li>Disable two-factor authentication on "
-#| "your account</li></ul>"
+#, kde-format
 msgid ""
 "<p><ul><li>Account name: %1</li><li>Account issuer: %2</li></ul></"
 "p><p>Removing this account from Keysmith will not disable two-factor "
@@ -137,7 +131,8 @@ msgid ""
 "for your account, or:</li><li>Disable two-factor authentication on your "
 "account</li></ul>"
 msgstr ""
-"<p>Remover esta conta do Keysmith não desabilitará a autenticação de dois "
+"<p><ul><li>Nome da conta: %1</li><li>Emissor da conta: %2</li></ul></"
+"p><p>Remover esta conta do Keysmith não desabilitará a autenticação de dois "
 "fatores (2FA). Certifique-se de que você ainda pode acessar sua conta sem "
 "usar o Keysmith antes de proceder:</p><ul><li>Certifique-se de que você "
 "tenha outro aplicativo de autenticação de dois fatores configurado para sua "
@@ -157,13 +152,13 @@ msgctxt "Notification shown in a passive
 msgid "Token copied to clipboard!"
 msgstr "Token copiado para a área de transferência!"
 
-#: src/contents/ui/AccountNameForm.qml:64
+#: src/contents/ui/AccountNameForm.qml:81
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Account name:"
 msgstr "Nome da conta:"
 
-#: src/contents/ui/AccountNameForm.qml:83
+#: src/contents/ui/AccountNameForm.qml:100
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Account issuer:"
@@ -187,12 +182,12 @@ msgctxt "error message shown when loadin
 msgid "Some accounts failed to load."
 msgstr "Algumas contas falharam ao carregar."
 
-#: src/contents/ui/AccountsOverview.qml:101
+#: src/contents/ui/AccountsOverview.qml:91
 #, kde-format
 msgid "No accounts added"
 msgstr "Nenhuma conta adicionada"
 
-#: src/contents/ui/AccountsOverview.qml:106
+#: src/contents/ui/AccountsOverview.qml:96
 #, kde-format
 msgctxt ""
 "@action:button add new account, shown instead of overview list when no "
@@ -200,90 +195,103 @@ msgctxt ""
 msgid "Add Account"
 msgstr "Adicionar conta"
 
-#: src/contents/ui/AccountsOverview.qml:172
+#: src/contents/ui/AccountsOverview.qml:163
 #, kde-format
 msgctxt "@action:button add new account, shown in toolbar"
 msgid "Add"
 msgstr "Adicionar"
 
+#: src/contents/ui/AccountsOverview.qml:176
+#, kde-format
+msgctxt "@action:button import accounts, shown in toolbar"
+msgid "Import"
+msgstr ""
+
+#: src/contents/ui/AccountsOverview.qml:189
+#, kde-format
+msgctxt ""
+"@action:button import an account by scanning a QR code, shown in toolbar"
+msgid "Scan QR Code"
+msgstr ""
+
 #: src/contents/ui/AddAccount.qml:22
 #, kde-format
 msgctxt "@title:window"
 msgid "Add new account"
 msgstr "Adicionar nova conta"
 
-#: src/contents/ui/AddAccount.qml:45
+#: src/contents/ui/AddAccount.qml:50
 #, kde-format
 msgctxt "@action:button cancel and dismiss the add account form"
 msgid "Cancel"
 msgstr "Cancelar"
 
-#: src/contents/ui/AddAccount.qml:52
+#: src/contents/ui/AddAccount.qml:57
 #, kde-format
 msgctxt "@action:button Dismiss the error page and quit Keysmith"
 msgid "Quit"
 msgstr "Sair"
 
-#: src/contents/ui/AddAccount.qml:61
+#: src/contents/ui/AddAccount.qml:66
 #, kde-format
 msgctxt "@action:button"
 msgid "Add"
 msgstr "Adicionar"
 
-#: src/contents/ui/AddAccount.qml:81
+#: src/contents/ui/AddAccount.qml:86
 #, kde-format
 msgctxt "@label:chooser"
 msgid "Account type:"
 msgstr "Tipo de conta:"
 
-#: src/contents/ui/AddAccount.qml:90
+#: src/contents/ui/AddAccount.qml:95
 #, kde-format
 msgctxt "@option:radio"
 msgid "Time-based OTP"
 msgstr "OTP baseado no tempo"
 
-#: src/contents/ui/AddAccount.qml:101
+#: src/contents/ui/AddAccount.qml:106
 #, kde-format
 msgctxt "@option:radio"
 msgid "Hash-based OTP"
 msgstr "OTP baseado em hash"
 
-#: src/contents/ui/AddAccount.qml:113
+#: src/contents/ui/AddAccount.qml:118
 #, kde-format
 msgid "Token secret"
 msgstr "Senha do token"
 
-#: src/contents/ui/AddAccount.qml:116
+#: src/contents/ui/AddAccount.qml:120
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Secret key:"
 msgstr "Chave secreta:"
 
-#: src/contents/ui/AddAccount.qml:132
+#: src/contents/ui/AddAccount.qml:139
 #, kde-format
 msgctxt "Button to reveal form for configuring additional token details"
 msgid "Details"
 msgstr "Detalhes"
 
-#: src/contents/ui/AddAccount.qml:140
+#: src/contents/ui/AddAccount.qml:147
 #, kde-format
 msgctxt "@title:group"
 msgid "HOTP Details:"
 msgstr "Detalhes HOTP:"
 
-#: src/contents/ui/AddAccount.qml:153
+#: src/contents/ui/AddAccount.qml:160
 #, kde-format
 msgctxt "@label"
 msgid "TOTP Details:"
 msgstr "Detalhes TOTP:"
 
-#: src/contents/ui/ErrorPage.qml:33
+#: src/contents/ui/ErrorPage.qml:34
 #, kde-format
 msgctxt "@action:button Button to dismiss the error page"
 msgid "Continue"
 msgstr "Continuar"
 
-#: src/contents/ui/ErrorPage.qml:40
+#: src/contents/ui/ErrorPage.qml:41
 #, kde-format
 msgctxt "@action:button Dismiss the error page and quit Keysmtih"
 msgid "Quit"
@@ -334,6 +342,113 @@ msgctxt "@label:spinbox"
 msgid "Truncation offset:"
 msgstr "Deslocamento do truncamento:"
 
+#: src/contents/ui/ImportAccount.qml:21
+#, fuzzy, kde-format
+#| msgctxt "@title:window"
+#| msgid "Accounts"
+msgctxt "@title:window"
+msgid "Import Accounts"
+msgstr "Contas"
+
+#: src/contents/ui/ImportAccount.qml:52
+#, kde-format
+msgid "Import format"
+msgstr ""
+
+#. i18n strings
+#: src/contents/ui/ImportAccount.qml:58
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "andOTP Encrypted JSON"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:59
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "andOTP Plain JSON"
+msgstr ""
+
+#. i18nc("@item:inlistbox", "Aegis Encrypted JSON"), value: Models.ValidatedImportInput.AegisEncryptedJSON});
+#: src/contents/ui/ImportAccount.qml:61
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "Aegis Plain JSON"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:62
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "FreeOTP URIs"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:78
+#, kde-format
+msgctxt "@label:chooser"
+msgid "Backup file:"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:81
+#, kde-format
+msgctxt "@info:placeholder"
+msgid "No file selected"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:85
+#, kde-format
+msgctxt "@title:window"
+msgid "Select file"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:99
+#, fuzzy, kde-format
+#| msgctxt "@label:textbox"
+#| msgid "Verify password:"
+msgctxt "@info:placeholder"
+msgid "Decryption password"
+msgstr "Verificar senha:"
+
+#: src/contents/ui/ImportAccount.qml:101 src/contents/ui/UnlockAccounts.qml:49
+#, kde-format
+msgctxt "@label:textbox"
+msgid "Password:"
+msgstr "Senha:"
+
+#: src/contents/ui/ImportAccount.qml:112
+#, kde-format
+msgctxt "@action:button"
+msgid "Import"
+msgstr ""
+
+#: src/contents/ui/KeysmithGlobalDrawer.qml:12
+#: src/contents/ui/KeysmithGlobalDrawer.qml:15
+#, kde-format
+msgid "About Keysmith"
+msgstr "Sobre o Keysmith"
+
+#: src/contents/ui/QRScanPage.qml:21
+#, kde-format
+msgctxt "@title"
+msgid "Scan a QR code"
+msgstr ""
+
+#: src/contents/ui/QRScanPage.qml:31
+#, kde-format
+msgctxt "@action:intoolbar"
+msgid "Select Camera"
+msgstr ""
+
+#: src/contents/ui/QRScanPage.qml:42
+#, kde-format
+msgctxt "@title:dialog"
+msgid "Select Camera"
+msgstr ""
+
+#: src/contents/ui/QRScanPage.qml:61
+#, kde-format
+msgctxt "@action:button"
+msgid "Close"
+msgstr ""
+
 #: src/contents/ui/RenameAccount.qml:17
 #, kde-format
 msgctxt "@title:window"
@@ -363,13 +478,13 @@ msgstr "Cancelar"
 msgid "Add"
 msgstr "Adicionar"
 
-#: src/contents/ui/SetupPassword.qml:22 src/contents/ui/UnlockAccounts.qml:22
+#: src/contents/ui/SetupPassword.qml:21 src/contents/ui/UnlockAccounts.qml:21
 #, kde-format
 msgctxt "@title:window"
 msgid "Password"
 msgstr "Senha"
 
-#: src/contents/ui/SetupPassword.qml:28
+#: src/contents/ui/SetupPassword.qml:27
 #, kde-format
 msgid "Failed to set up your password"
 msgstr "Falha ao configurar sua senha"
@@ -379,19 +494,19 @@ msgstr "Falha ao configurar sua senha"
 msgid "Choose a password to protect your accounts"
 msgstr "Escolha uma senha para proteger suas contas"
 
-#: src/contents/ui/SetupPassword.qml:49
+#: src/contents/ui/SetupPassword.qml:48
 #, kde-format
 msgctxt "@label:textbox"
 msgid "New Password:"
 msgstr "Nova senha:"
 
-#: src/contents/ui/SetupPassword.qml:60
+#: src/contents/ui/SetupPassword.qml:61
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Verify password:"
 msgstr "Verificar senha:"
 
-#: src/contents/ui/SetupPassword.qml:68
+#: src/contents/ui/SetupPassword.qml:72
 #, kde-format
 msgctxt "@action:button"
 msgid "Apply"
@@ -439,7 +554,7 @@ msgctxt "@option:radio"
 msgid "SHA-512"
 msgstr "SHA-512"
 
-#: src/contents/ui/UnlockAccounts.qml:26
+#: src/contents/ui/UnlockAccounts.qml:25
 #, kde-format
 msgid "Failed to unlock your accounts"
 msgstr "Falha ao desbloquear suas contas"
@@ -449,24 +564,33 @@ msgstr "Falha ao desbloquear suas contas
 msgid "Please provide the password to unlock your accounts"
 msgstr "Forneça a senha para desbloquear suas contas"
 
-#: src/contents/ui/UnlockAccounts.qml:50
-#, kde-format
-msgctxt "@label:textbox"
-msgid "Password:"
-msgstr "Senha:"
-
-#: src/contents/ui/UnlockAccounts.qml:59
+#: src/contents/ui/UnlockAccounts.qml:61
 #, kde-format
 msgctxt "@action:button"
 msgid "Unlock"
 msgstr "Desbloquear"
 
-#: src/main.cpp:67
+#: src/main.cpp:70
 #, kde-format
 msgctxt "@title"
 msgid "Keysmith"
 msgstr "Keysmith"
 
+#: src/main.cpp:73
+#, kde-format
+msgid "generate two-factor authentication (2FA) tokens"
+msgstr "gere tokens de autenticação de dois fatores (2FA)"
+
+#: src/main.cpp:76
+#, kde-format
+msgid "Keysmith"
+msgstr "Keysmith"
+
+#: src/main.cpp:80
+#, kde-format
+msgid "© 2019 KDE Community"
+msgstr "© 2019 Comunidade KDE"
+
 #~ msgctxt "Button cancelling account removal"
 #~ msgid "Cancel"
 #~ msgstr "Cancelar"
diff -pruN 24.08.1-1/po/ro/keysmith.po 25.03.90-1/po/ro/keysmith.po
--- 24.08.1-1/po/ro/keysmith.po	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/po/ro/keysmith.po	2025-03-27 10:13:04.000000000 +0000
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: keysmith\n"
 "Report-Msgid-Bugs-To: https://bugs.kde.org\n"
-"POT-Creation-Date: 2024-05-03 00:40+0000\n"
+"POT-Creation-Date: 2025-02-09 00:43+0000\n"
 "PO-Revision-Date: 2024-02-25 13:43+0000\n"
 "Last-Translator: Sergiu Bivol <sergiu@cip.md>\n"
 "Language-Team: Romanian <kde-i18n-ro@kde.org>\n"
@@ -26,13 +26,13 @@ msgid ""
 msgstr ""
 "Cont opțional de adăugat, formatat ca otpauth:// URI (de ex. dintr-un cod QR)"
 
-#: src/app/flows_p.cpp:108 src/app/flows_p.cpp:248
+#: src/app/flows_p.cpp:111 src/app/flows_p.cpp:285
 #, kde-format
 msgctxt "@title:window"
 msgid "Invalid account"
 msgstr "Cont nevalid"
 
-#: src/app/flows_p.cpp:109
+#: src/app/flows_p.cpp:112
 #, kde-format
 msgctxt "@info:label"
 msgid ""
@@ -42,7 +42,7 @@ msgstr ""
 "Contul pe care încercați să-l adăugați nu e valid. Puteți fie să închideți "
 "aplicația, fie să continuați fără adăugarea contului."
 
-#: src/app/flows_p.cpp:249
+#: src/app/flows_p.cpp:286
 #, kde-format
 msgctxt "@info:label"
 msgid ""
@@ -147,13 +147,13 @@ msgctxt "Notification shown in a passive
 msgid "Token copied to clipboard!"
 msgstr "Jeton copiat în clipboard!"
 
-#: src/contents/ui/AccountNameForm.qml:64
+#: src/contents/ui/AccountNameForm.qml:81
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Account name:"
 msgstr "Denumirea contului:"
 
-#: src/contents/ui/AccountNameForm.qml:83
+#: src/contents/ui/AccountNameForm.qml:100
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Account issuer:"
@@ -177,12 +177,12 @@ msgctxt "error message shown when loadin
 msgid "Some accounts failed to load."
 msgstr "Încărcarea unor conturi a eșuat"
 
-#: src/contents/ui/AccountsOverview.qml:101
+#: src/contents/ui/AccountsOverview.qml:91
 #, kde-format
 msgid "No accounts added"
 msgstr "Niciun cont adăugat"
 
-#: src/contents/ui/AccountsOverview.qml:106
+#: src/contents/ui/AccountsOverview.qml:96
 #, kde-format
 msgctxt ""
 "@action:button add new account, shown instead of overview list when no "
@@ -190,90 +190,103 @@ msgctxt ""
 msgid "Add Account"
 msgstr "Adaugă cont"
 
-#: src/contents/ui/AccountsOverview.qml:172
+#: src/contents/ui/AccountsOverview.qml:163
 #, kde-format
 msgctxt "@action:button add new account, shown in toolbar"
 msgid "Add"
 msgstr "Adaugă"
 
+#: src/contents/ui/AccountsOverview.qml:176
+#, kde-format
+msgctxt "@action:button import accounts, shown in toolbar"
+msgid "Import"
+msgstr ""
+
+#: src/contents/ui/AccountsOverview.qml:189
+#, kde-format
+msgctxt ""
+"@action:button import an account by scanning a QR code, shown in toolbar"
+msgid "Scan QR Code"
+msgstr ""
+
 #: src/contents/ui/AddAccount.qml:22
 #, kde-format
 msgctxt "@title:window"
 msgid "Add new account"
 msgstr "Adaugă cont nou"
 
-#: src/contents/ui/AddAccount.qml:45
+#: src/contents/ui/AddAccount.qml:50
 #, kde-format
 msgctxt "@action:button cancel and dismiss the add account form"
 msgid "Cancel"
 msgstr "Renunță"
 
-#: src/contents/ui/AddAccount.qml:52
+#: src/contents/ui/AddAccount.qml:57
 #, kde-format
 msgctxt "@action:button Dismiss the error page and quit Keysmith"
 msgid "Quit"
 msgstr "Termină"
 
-#: src/contents/ui/AddAccount.qml:61
+#: src/contents/ui/AddAccount.qml:66
 #, kde-format
 msgctxt "@action:button"
 msgid "Add"
 msgstr "Adaugă"
 
-#: src/contents/ui/AddAccount.qml:81
+#: src/contents/ui/AddAccount.qml:86
 #, kde-format
 msgctxt "@label:chooser"
 msgid "Account type:"
 msgstr "Tipul contului:"
 
-#: src/contents/ui/AddAccount.qml:90
+#: src/contents/ui/AddAccount.qml:95
 #, kde-format
 msgctxt "@option:radio"
 msgid "Time-based OTP"
 msgstr "OTP bazat pe oră"
 
-#: src/contents/ui/AddAccount.qml:101
+#: src/contents/ui/AddAccount.qml:106
 #, kde-format
 msgctxt "@option:radio"
 msgid "Hash-based OTP"
 msgstr "OTP bazat pe hash"
 
-#: src/contents/ui/AddAccount.qml:113
+#: src/contents/ui/AddAccount.qml:118
 #, kde-format
 msgid "Token secret"
 msgstr "Secret jeton"
 
-#: src/contents/ui/AddAccount.qml:116
+#: src/contents/ui/AddAccount.qml:120
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Secret key:"
 msgstr "Cheie secretă:"
 
-#: src/contents/ui/AddAccount.qml:132
+#: src/contents/ui/AddAccount.qml:139
 #, kde-format
 msgctxt "Button to reveal form for configuring additional token details"
 msgid "Details"
 msgstr "Detalii"
 
-#: src/contents/ui/AddAccount.qml:140
+#: src/contents/ui/AddAccount.qml:147
 #, kde-format
 msgctxt "@title:group"
 msgid "HOTP Details:"
 msgstr "Detalii HOTP:"
 
-#: src/contents/ui/AddAccount.qml:153
+#: src/contents/ui/AddAccount.qml:160
 #, kde-format
 msgctxt "@label"
 msgid "TOTP Details:"
 msgstr "Detalii TOTP:"
 
-#: src/contents/ui/ErrorPage.qml:33
+#: src/contents/ui/ErrorPage.qml:34
 #, kde-format
 msgctxt "@action:button Button to dismiss the error page"
 msgid "Continue"
 msgstr "Continuă"
 
-#: src/contents/ui/ErrorPage.qml:40
+#: src/contents/ui/ErrorPage.qml:41
 #, kde-format
 msgctxt "@action:button Dismiss the error page and quit Keysmtih"
 msgid "Quit"
@@ -324,6 +337,115 @@ msgctxt "@label:spinbox"
 msgid "Truncation offset:"
 msgstr "Decalaj trunchiere:"
 
+#: src/contents/ui/ImportAccount.qml:21
+#, fuzzy, kde-format
+#| msgctxt "@title:window"
+#| msgid "Accounts"
+msgctxt "@title:window"
+msgid "Import Accounts"
+msgstr "Conturi"
+
+#: src/contents/ui/ImportAccount.qml:52
+#, kde-format
+msgid "Import format"
+msgstr ""
+
+#. i18n strings
+#: src/contents/ui/ImportAccount.qml:58
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "andOTP Encrypted JSON"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:59
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "andOTP Plain JSON"
+msgstr ""
+
+#. i18nc("@item:inlistbox", "Aegis Encrypted JSON"), value: Models.ValidatedImportInput.AegisEncryptedJSON});
+#: src/contents/ui/ImportAccount.qml:61
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "Aegis Plain JSON"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:62
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "FreeOTP URIs"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:78
+#, kde-format
+msgctxt "@label:chooser"
+msgid "Backup file:"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:81
+#, kde-format
+msgctxt "@info:placeholder"
+msgid "No file selected"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:85
+#, kde-format
+msgctxt "@title:window"
+msgid "Select file"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:99
+#, fuzzy, kde-format
+#| msgctxt "@label:textbox"
+#| msgid "Verify password:"
+msgctxt "@info:placeholder"
+msgid "Decryption password"
+msgstr "Verificați parola:"
+
+#: src/contents/ui/ImportAccount.qml:101 src/contents/ui/UnlockAccounts.qml:49
+#, kde-format
+msgctxt "@label:textbox"
+msgid "Password:"
+msgstr "Parolă:"
+
+#: src/contents/ui/ImportAccount.qml:112
+#, kde-format
+msgctxt "@action:button"
+msgid "Import"
+msgstr ""
+
+#: src/contents/ui/KeysmithGlobalDrawer.qml:12
+#: src/contents/ui/KeysmithGlobalDrawer.qml:15
+#, fuzzy, kde-format
+#| msgctxt "@title"
+#| msgid "Keysmith"
+msgid "About Keysmith"
+msgstr "Keysmith"
+
+#: src/contents/ui/QRScanPage.qml:21
+#, kde-format
+msgctxt "@title"
+msgid "Scan a QR code"
+msgstr ""
+
+#: src/contents/ui/QRScanPage.qml:31
+#, kde-format
+msgctxt "@action:intoolbar"
+msgid "Select Camera"
+msgstr ""
+
+#: src/contents/ui/QRScanPage.qml:42
+#, kde-format
+msgctxt "@title:dialog"
+msgid "Select Camera"
+msgstr ""
+
+#: src/contents/ui/QRScanPage.qml:61
+#, kde-format
+msgctxt "@action:button"
+msgid "Close"
+msgstr ""
+
 #: src/contents/ui/RenameAccount.qml:17
 #, kde-format
 msgctxt "@title:window"
@@ -353,13 +475,13 @@ msgstr "Renunță"
 msgid "Add"
 msgstr "Adaugă"
 
-#: src/contents/ui/SetupPassword.qml:22 src/contents/ui/UnlockAccounts.qml:22
+#: src/contents/ui/SetupPassword.qml:21 src/contents/ui/UnlockAccounts.qml:21
 #, kde-format
 msgctxt "@title:window"
 msgid "Password"
 msgstr "Parolă"
 
-#: src/contents/ui/SetupPassword.qml:28
+#: src/contents/ui/SetupPassword.qml:27
 #, kde-format
 msgid "Failed to set up your password"
 msgstr "Parola nu a putut fi configurată"
@@ -369,19 +491,19 @@ msgstr "Parola nu a putut fi configurat
 msgid "Choose a password to protect your accounts"
 msgstr "Alegeți o parolă pentru a vă proteja conturile"
 
-#: src/contents/ui/SetupPassword.qml:49
+#: src/contents/ui/SetupPassword.qml:48
 #, kde-format
 msgctxt "@label:textbox"
 msgid "New Password:"
 msgstr "Parola nouă:"
 
-#: src/contents/ui/SetupPassword.qml:60
+#: src/contents/ui/SetupPassword.qml:61
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Verify password:"
 msgstr "Verificați parola:"
 
-#: src/contents/ui/SetupPassword.qml:68
+#: src/contents/ui/SetupPassword.qml:72
 #, kde-format
 msgctxt "@action:button"
 msgid "Apply"
@@ -429,7 +551,7 @@ msgctxt "@option:radio"
 msgid "SHA-512"
 msgstr "SHA-512"
 
-#: src/contents/ui/UnlockAccounts.qml:26
+#: src/contents/ui/UnlockAccounts.qml:25
 #, kde-format
 msgid "Failed to unlock your accounts"
 msgstr "Deblocarea conturilor a eșuat"
@@ -439,24 +561,35 @@ msgstr "Deblocarea conturilor a eșuat"
 msgid "Please provide the password to unlock your accounts"
 msgstr "Furnizați parola pentru deblocarea conturilor"
 
-#: src/contents/ui/UnlockAccounts.qml:50
-#, kde-format
-msgctxt "@label:textbox"
-msgid "Password:"
-msgstr "Parolă:"
-
-#: src/contents/ui/UnlockAccounts.qml:59
+#: src/contents/ui/UnlockAccounts.qml:61
 #, kde-format
 msgctxt "@action:button"
 msgid "Unlock"
 msgstr "Deblochează"
 
-#: src/main.cpp:67
+#: src/main.cpp:70
 #, kde-format
 msgctxt "@title"
 msgid "Keysmith"
 msgstr "Keysmith"
 
+#: src/main.cpp:73
+#, kde-format
+msgid "generate two-factor authentication (2FA) tokens"
+msgstr ""
+
+#: src/main.cpp:76
+#, fuzzy, kde-format
+#| msgctxt "@title"
+#| msgid "Keysmith"
+msgid "Keysmith"
+msgstr "Keysmith"
+
+#: src/main.cpp:80
+#, kde-format
+msgid "© 2019 KDE Community"
+msgstr ""
+
 #~ msgctxt "Button cancelling account removal"
 #~ msgid "Cancel"
 #~ msgstr "Renunță"
diff -pruN 24.08.1-1/po/ru/keysmith.po 25.03.90-1/po/ru/keysmith.po
--- 24.08.1-1/po/ru/keysmith.po	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/po/ru/keysmith.po	2025-03-27 10:13:04.000000000 +0000
@@ -1,14 +1,14 @@
-# Copyright (C) YEAR This file is copyright:
+# Copyright (C) 2024 This file is copyright:
 # This file is distributed under the same license as the keysmith package.
 #
 # Alexander Yavorsky <kekcuha@gmail.com>, 2020.
-# Olesya Gerasimenko <translation-team@basealt.ru>, 2023.
+# SPDX-FileCopyrightText: 2023, 2024 Olesya Gerasimenko <translation-team@basealt.ru>
 msgid ""
 msgstr ""
 "Project-Id-Version: keysmith\n"
 "Report-Msgid-Bugs-To: https://bugs.kde.org\n"
-"POT-Creation-Date: 2024-05-03 00:40+0000\n"
-"PO-Revision-Date: 2023-04-26 15:22+0300\n"
+"POT-Creation-Date: 2025-02-09 00:43+0000\n"
+"PO-Revision-Date: 2024-12-10 15:12+0300\n"
 "Last-Translator: Olesya Gerasimenko <translation-team@basealt.ru>\n"
 "Language-Team: Basealt Translation Team\n"
 "Language: ru\n"
@@ -17,7 +17,7 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n"
 "%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-"X-Generator: Lokalize 22.12.3\n"
+"X-Generator: Lokalize 23.08.5\n"
 
 #: src/app/cli.cpp:133
 #, kde-format
@@ -28,13 +28,13 @@ msgstr ""
 "Необязательная учётная запись для добавления, формат адреса: otpauth:// "
 "(например, из QR-кода)"
 
-#: src/app/flows_p.cpp:108 src/app/flows_p.cpp:248
+#: src/app/flows_p.cpp:111 src/app/flows_p.cpp:285
 #, kde-format
 msgctxt "@title:window"
 msgid "Invalid account"
 msgstr "Некорректная учётная запись"
 
-#: src/app/flows_p.cpp:109
+#: src/app/flows_p.cpp:112
 #, kde-format
 msgctxt "@info:label"
 msgid ""
@@ -44,7 +44,7 @@ msgstr ""
 "Попытка добавить некорректную учётную запись. Можно либо выйти из "
 "приложения, либо продолжить работу без добавления этой учётной записи."
 
-#: src/app/flows_p.cpp:249
+#: src/app/flows_p.cpp:286
 #, kde-format
 msgctxt "@info:label"
 msgid ""
@@ -55,68 +55,62 @@ msgstr ""
 "добавления."
 
 #: src/contents/ui/AccountEntryViewBase.qml:35
-#, fuzzy, kde-format
-#| msgctxt "Confirm dialog title: %1 is the name of the account to remove"
-#| msgid "Removing account: %1"
+#, kde-format
 msgctxt "Details dialog title: %1 is the name of the account"
 msgid "Details of account: %1"
-msgstr "Удаление учётной записи: %1"
+msgstr "Подробные сведения об учётной записи: %1"
 
 #: src/contents/ui/AccountEntryViewBase.qml:42
 #, kde-format
 msgid "Name:"
-msgstr ""
+msgstr "Имя:"
 
 #: src/contents/ui/AccountEntryViewBase.qml:49
 #, kde-format
 msgid "Issuer:"
-msgstr ""
+msgstr "Издатель:"
 
 #: src/contents/ui/AccountEntryViewBase.qml:56
 #, kde-format
 msgid "Mode:"
-msgstr ""
+msgstr "Режим:"
 
 #: src/contents/ui/AccountEntryViewBase.qml:57
 #, kde-format
 msgctxt "Mode of 2fa"
 msgid "HOTP"
-msgstr ""
+msgstr "HOTP"
 
 #: src/contents/ui/AccountEntryViewBase.qml:57
 #, kde-format
 msgctxt "Mode of 2fa"
 msgid "TOTP"
-msgstr ""
+msgstr "TOTP"
 
 #: src/contents/ui/AccountEntryViewBase.qml:63
 #, kde-format
 msgid "Epoch:"
-msgstr ""
+msgstr "Эпоха:"
 
 #: src/contents/ui/AccountEntryViewBase.qml:70
-#, fuzzy, kde-format
-#| msgctxt "@label:textbox"
-#| msgid "Timer:"
+#, kde-format
 msgid "Time Step:"
-msgstr "Таймер:"
+msgstr "Интервал времени:"
 
 #: src/contents/ui/AccountEntryViewBase.qml:77
 #, kde-format
 msgid "Offset:"
-msgstr ""
+msgstr "Смещение:"
 
 #: src/contents/ui/AccountEntryViewBase.qml:84
-#, fuzzy, kde-format
-#| msgctxt "@label:spinbox"
-#| msgid "Token length:"
+#, kde-format
 msgid "Token Length:"
 msgstr "Длина маркера:"
 
 #: src/contents/ui/AccountEntryViewBase.qml:91
 #, kde-format
 msgid "Hash:"
-msgstr ""
+msgstr "Хэш:"
 
 #: src/contents/ui/AccountEntryViewBase.qml:100
 #, kde-format
@@ -125,14 +119,7 @@ msgid "Removing account: %1"
 msgstr "Удаление учётной записи: %1"
 
 #: src/contents/ui/AccountEntryViewBase.qml:105
-#, fuzzy, kde-format
-#| msgid ""
-#| "<p>Removing this account from Keysmith will not disable two-factor "
-#| "authentication (2FA). Make sure you can still access your account without "
-#| "using Keysmith before proceeding:</p><ul><li>Make sure you have another "
-#| "2FA app set up for your account, or:</li><li>Make sure you have recovery "
-#| "codes for your account, or:</li><li>Disable two-factor authentication on "
-#| "your account</li></ul>"
+#, kde-format
 msgid ""
 "<p><ul><li>Account name: %1</li><li>Account issuer: %2</li></ul></"
 "p><p>Removing this account from Keysmith will not disable two-factor "
@@ -142,7 +129,8 @@ msgid ""
 "for your account, or:</li><li>Disable two-factor authentication on your "
 "account</li></ul>"
 msgstr ""
-"<p>Удаление этой учётной записи из Keysmith не приведёт к отключению "
+"<p><ul><li>Имя учётной записи: %1</li><li>Издатель учётной записи: %2</li></"
+"ul></p><p>Удаление этой учётной записи из Keysmith не приведёт к отключению "
 "двухфакторной аутентификации (2FA). Перед продолжением убедитесь, что можете "
 "получить доступ к вашей учётной записи без использования Keysmith:</"
 "p><ul><li>Убедитесь, что для вашей учётной записи настроено другое "
@@ -151,7 +139,7 @@ msgstr ""
 "двухфакторную аутентификацию для вашей учётной записи</li></ul>"
 
 #: src/contents/ui/AccountEntryViewBase.qml:116
-#, fuzzy, kde-format
+#, kde-format
 msgctxt "Button confirming account removal"
 msgid "Delete Account"
 msgstr "Удалить учётную запись"
@@ -160,16 +148,16 @@ msgstr "Удалить учётную з
 #, kde-format
 msgctxt "Notification shown in a passive notification"
 msgid "Token copied to clipboard!"
-msgstr ""
+msgstr "Маркер скопирован в буфер обмена!"
 
-#: src/contents/ui/AccountNameForm.qml:64
-#, fuzzy, kde-format
+#: src/contents/ui/AccountNameForm.qml:81
+#, kde-format
 msgctxt "@label:textbox"
 msgid "Account name:"
 msgstr "Имя учётной записи:"
 
-#: src/contents/ui/AccountNameForm.qml:83
-#, fuzzy, kde-format
+#: src/contents/ui/AccountNameForm.qml:100
+#, kde-format
 msgctxt "@label:textbox"
 msgid "Account issuer:"
 msgstr "Издатель учётной записи:"
@@ -192,110 +180,116 @@ msgctxt "error message shown when loadin
 msgid "Some accounts failed to load."
 msgstr "Не удалось загрузить некоторые учётные записи."
 
-#: src/contents/ui/AccountsOverview.qml:101
+#: src/contents/ui/AccountsOverview.qml:91
 #, kde-format
 msgid "No accounts added"
 msgstr "Не добавлено ни одной учётной записи"
 
-#: src/contents/ui/AccountsOverview.qml:106
-#, fuzzy, kde-format
+#: src/contents/ui/AccountsOverview.qml:96
+#, kde-format
 msgctxt ""
 "@action:button add new account, shown instead of overview list when no "
 "accounts have been added yet"
 msgid "Add Account"
 msgstr "Добавить учётную запись"
 
-#: src/contents/ui/AccountsOverview.qml:172
+#: src/contents/ui/AccountsOverview.qml:163
 #, kde-format
 msgctxt "@action:button add new account, shown in toolbar"
 msgid "Add"
 msgstr "Добавить"
 
+#: src/contents/ui/AccountsOverview.qml:176
+#, kde-format
+msgctxt "@action:button import accounts, shown in toolbar"
+msgid "Import"
+msgstr ""
+
+#: src/contents/ui/AccountsOverview.qml:189
+#, kde-format
+msgctxt ""
+"@action:button import an account by scanning a QR code, shown in toolbar"
+msgid "Scan QR Code"
+msgstr ""
+
 #: src/contents/ui/AddAccount.qml:22
 #, kde-format
 msgctxt "@title:window"
 msgid "Add new account"
 msgstr "Добавление учётной записи"
 
-#: src/contents/ui/AddAccount.qml:45
+#: src/contents/ui/AddAccount.qml:50
 #, kde-format
 msgctxt "@action:button cancel and dismiss the add account form"
 msgid "Cancel"
 msgstr "Отмена"
 
-#: src/contents/ui/AddAccount.qml:52
-#, fuzzy, kde-format
-#| msgctxt "@action:button Dismiss the error page and quit Keysmtih"
-#| msgid "Quit"
+#: src/contents/ui/AddAccount.qml:57
+#, kde-format
 msgctxt "@action:button Dismiss the error page and quit Keysmith"
 msgid "Quit"
 msgstr "Выйти"
 
-#: src/contents/ui/AddAccount.qml:61
-#, fuzzy, kde-format
-#| msgid "Add"
+#: src/contents/ui/AddAccount.qml:66
+#, kde-format
 msgctxt "@action:button"
 msgid "Add"
 msgstr "Добавить"
 
-#: src/contents/ui/AddAccount.qml:81
-#, fuzzy, kde-format
+#: src/contents/ui/AddAccount.qml:86
+#, kde-format
 msgctxt "@label:chooser"
 msgid "Account type:"
 msgstr "Тип учётной записи:"
 
-#: src/contents/ui/AddAccount.qml:90
+#: src/contents/ui/AddAccount.qml:95
 #, kde-format
 msgctxt "@option:radio"
 msgid "Time-based OTP"
 msgstr "OTP на основе данных времени"
 
-#: src/contents/ui/AddAccount.qml:101
+#: src/contents/ui/AddAccount.qml:106
 #, kde-format
 msgctxt "@option:radio"
 msgid "Hash-based OTP"
 msgstr "OTP на основе хеша"
 
-#: src/contents/ui/AddAccount.qml:113
+#: src/contents/ui/AddAccount.qml:118
 #, kde-format
 msgid "Token secret"
 msgstr "Секрет маркера"
 
-#: src/contents/ui/AddAccount.qml:116
+#: src/contents/ui/AddAccount.qml:120
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Secret key:"
 msgstr "Секретный ключ:"
 
-#: src/contents/ui/AddAccount.qml:132
+#: src/contents/ui/AddAccount.qml:139
 #, kde-format
 msgctxt "Button to reveal form for configuring additional token details"
 msgid "Details"
 msgstr "Подробности"
 
-#: src/contents/ui/AddAccount.qml:140
-#, fuzzy, kde-format
-#| msgctxt "Button to reveal form for configuring additional token details"
-#| msgid "Details"
+#: src/contents/ui/AddAccount.qml:147
+#, kde-format
 msgctxt "@title:group"
 msgid "HOTP Details:"
-msgstr "Подробности"
+msgstr "Подробные сведения о HOTP:"
 
-#: src/contents/ui/AddAccount.qml:153
-#, fuzzy, kde-format
-#| msgctxt "Button to reveal form for configuring additional token details"
-#| msgid "Details"
+#: src/contents/ui/AddAccount.qml:160
+#, kde-format
 msgctxt "@label"
 msgid "TOTP Details:"
-msgstr "Подробности"
+msgstr "Подробные сведения о TOTP:"
 
-#: src/contents/ui/ErrorPage.qml:33
+#: src/contents/ui/ErrorPage.qml:34
 #, kde-format
 msgctxt "@action:button Button to dismiss the error page"
 msgid "Continue"
 msgstr "Продолжить"
 
-#: src/contents/ui/ErrorPage.qml:40
+#: src/contents/ui/ErrorPage.qml:41
 #, kde-format
 msgctxt "@action:button Dismiss the error page and quit Keysmtih"
 msgid "Quit"
@@ -303,12 +297,10 @@ msgstr "Выйти"
 
 #: src/contents/ui/HOTPAccountEntryView.qml:19
 #: src/contents/ui/TOTPAccountEntryView.qml:23
-#, fuzzy, kde-format
-#| msgctxt "Button to reveal form for configuring additional token details"
-#| msgid "Details"
+#, kde-format
 msgctxt "Button to show details of a single account"
 msgid "Show details"
-msgstr "Подробности"
+msgstr "Показать подробности"
 
 #: src/contents/ui/HOTPAccountEntryView.qml:28
 #: src/contents/ui/TOTPAccountEntryView.qml:34
@@ -331,20 +323,16 @@ msgid "Token length:"
 msgstr "Длина маркера:"
 
 #: src/contents/ui/HOTPDetailsForm.qml:63
-#, fuzzy, kde-format
-#| msgctxt "@option:check"
-#| msgid "Add check digit"
+#, kde-format
 msgctxt "@option:check"
 msgid "Add checksum digit"
-msgstr "Добавить контрольную цифру"
+msgstr "Добавить цифру контрольной суммы"
 
 #: src/contents/ui/HOTPDetailsForm.qml:75
-#, fuzzy, kde-format
-#| msgctxt "@option:check"
-#| msgid "Use custom offset"
+#, kde-format
 msgctxt "@option:check"
 msgid "Use custom truncation offset"
-msgstr "Использовать нестандартное смещение"
+msgstr "Использовать нестандартное смещение усечения"
 
 #: src/contents/ui/HOTPDetailsForm.qml:89
 #, kde-format
@@ -352,6 +340,109 @@ msgctxt "@label:spinbox"
 msgid "Truncation offset:"
 msgstr "Смещение усечения:"
 
+#: src/contents/ui/ImportAccount.qml:21
+#, fuzzy, kde-format
+msgctxt "@title:window"
+msgid "Import Accounts"
+msgstr "Учётные записи"
+
+#: src/contents/ui/ImportAccount.qml:52
+#, kde-format
+msgid "Import format"
+msgstr ""
+
+#. i18n strings
+#: src/contents/ui/ImportAccount.qml:58
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "andOTP Encrypted JSON"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:59
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "andOTP Plain JSON"
+msgstr ""
+
+#. i18nc("@item:inlistbox", "Aegis Encrypted JSON"), value: Models.ValidatedImportInput.AegisEncryptedJSON});
+#: src/contents/ui/ImportAccount.qml:61
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "Aegis Plain JSON"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:62
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "FreeOTP URIs"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:78
+#, kde-format
+msgctxt "@label:chooser"
+msgid "Backup file:"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:81
+#, kde-format
+msgctxt "@info:placeholder"
+msgid "No file selected"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:85
+#, kde-format
+msgctxt "@title:window"
+msgid "Select file"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:99
+#, fuzzy, kde-format
+msgctxt "@info:placeholder"
+msgid "Decryption password"
+msgstr "Подтверждение пароля:"
+
+#: src/contents/ui/ImportAccount.qml:101 src/contents/ui/UnlockAccounts.qml:49
+#, kde-format
+msgctxt "@label:textbox"
+msgid "Password:"
+msgstr "Пароль:"
+
+#: src/contents/ui/ImportAccount.qml:112
+#, kde-format
+msgctxt "@action:button"
+msgid "Import"
+msgstr ""
+
+#: src/contents/ui/KeysmithGlobalDrawer.qml:12
+#: src/contents/ui/KeysmithGlobalDrawer.qml:15
+#, kde-format
+msgid "About Keysmith"
+msgstr "О Keysmith"
+
+#: src/contents/ui/QRScanPage.qml:21
+#, kde-format
+msgctxt "@title"
+msgid "Scan a QR code"
+msgstr ""
+
+#: src/contents/ui/QRScanPage.qml:31
+#, kde-format
+msgctxt "@action:intoolbar"
+msgid "Select Camera"
+msgstr ""
+
+#: src/contents/ui/QRScanPage.qml:42
+#, kde-format
+msgctxt "@title:dialog"
+msgid "Select Camera"
+msgstr ""
+
+#: src/contents/ui/QRScanPage.qml:61
+#, kde-format
+msgctxt "@action:button"
+msgid "Close"
+msgstr ""
+
 #: src/contents/ui/RenameAccount.qml:17
 #, kde-format
 msgctxt "@title:window"
@@ -381,13 +472,13 @@ msgstr "Отмена"
 msgid "Add"
 msgstr "Добавить"
 
-#: src/contents/ui/SetupPassword.qml:22 src/contents/ui/UnlockAccounts.qml:22
+#: src/contents/ui/SetupPassword.qml:21 src/contents/ui/UnlockAccounts.qml:21
 #, kde-format
 msgctxt "@title:window"
 msgid "Password"
 msgstr "Пароль"
 
-#: src/contents/ui/SetupPassword.qml:28
+#: src/contents/ui/SetupPassword.qml:27
 #, kde-format
 msgid "Failed to set up your password"
 msgstr "Не удалось задать пароль"
@@ -397,23 +488,20 @@ msgstr "Не удалось задать
 msgid "Choose a password to protect your accounts"
 msgstr "Выберите пароль для защиты учётных записей"
 
-#: src/contents/ui/SetupPassword.qml:49
-#, fuzzy, kde-format
-#| msgctxt "@label:textbox"
-#| msgid "New password:"
+#: src/contents/ui/SetupPassword.qml:48
+#, kde-format
 msgctxt "@label:textbox"
 msgid "New Password:"
 msgstr "Новый пароль:"
 
-#: src/contents/ui/SetupPassword.qml:60
+#: src/contents/ui/SetupPassword.qml:61
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Verify password:"
 msgstr "Подтверждение пароля:"
 
-#: src/contents/ui/SetupPassword.qml:68
-#, fuzzy, kde-format
-#| msgid "Apply"
+#: src/contents/ui/SetupPassword.qml:72
+#, kde-format
 msgctxt "@action:button"
 msgid "Apply"
 msgstr "Применить"
@@ -460,7 +548,7 @@ msgctxt "@option:radio"
 msgid "SHA-512"
 msgstr "SHA-512"
 
-#: src/contents/ui/UnlockAccounts.qml:26
+#: src/contents/ui/UnlockAccounts.qml:25
 #, kde-format
 msgid "Failed to unlock your accounts"
 msgstr "Не удалось разблокировать учётные записи"
@@ -470,25 +558,33 @@ msgstr "Не удалось разбло
 msgid "Please provide the password to unlock your accounts"
 msgstr "Укажите пароль для разблокировки учётных записей"
 
-#: src/contents/ui/UnlockAccounts.qml:50
+#: src/contents/ui/UnlockAccounts.qml:61
 #, kde-format
-msgctxt "@label:textbox"
-msgid "Password:"
-msgstr "Пароль:"
-
-#: src/contents/ui/UnlockAccounts.qml:59
-#, fuzzy, kde-format
-#| msgid "Unlock"
 msgctxt "@action:button"
 msgid "Unlock"
 msgstr "Разблокировать"
 
-#: src/main.cpp:67
+#: src/main.cpp:70
 #, kde-format
 msgctxt "@title"
 msgid "Keysmith"
 msgstr "Keysmith"
 
+#: src/main.cpp:73
+#, kde-format
+msgid "generate two-factor authentication (2FA) tokens"
+msgstr "создать маркеры двухфакторной аутентификации (2FA)"
+
+#: src/main.cpp:76
+#, kde-format
+msgid "Keysmith"
+msgstr "Keysmith"
+
+#: src/main.cpp:80
+#, kde-format
+msgid "© 2019 KDE Community"
+msgstr "© Сообщество KDE, 2019"
+
 #~ msgctxt "Button cancelling account removal"
 #~ msgid "Cancel"
 #~ msgstr "Отмена"
diff -pruN 24.08.1-1/po/sa/keysmith.po 25.03.90-1/po/sa/keysmith.po
--- 24.08.1-1/po/sa/keysmith.po	1970-01-01 00:00:00.000000000 +0000
+++ 25.03.90-1/po/sa/keysmith.po	2025-03-27 10:13:04.000000000 +0000
@@ -0,0 +1,584 @@
+# Sanskrit translations for keysmith package.
+# Copyright (C) 2024 This file is copyright:
+# This file is distributed under the same license as the keysmith package.
+# Kali <EMAIL@ADDRESS>, 2024.
+#
+# SPDX-FileCopyrightText: 2024 kali <skkalwar999@gmail.com>
+msgid ""
+msgstr ""
+"Project-Id-Version: keysmith\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2025-02-09 00:43+0000\n"
+"PO-Revision-Date: 2024-12-20 21:52+0530\n"
+"Last-Translator: kali <skkalwar999@gmail.com>\n"
+"Language-Team: Sanskrit <kde-i18n-doc@kde.org>\n"
+"Language: sa\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n>2);\n"
+"X-Generator: Lokalize 24.08.2\n"
+
+#: src/app/cli.cpp:133
+#, kde-format
+msgctxt "@info (<uri> placeholder)"
+msgid ""
+"Optional account to add, formatted as otpauth:// URI (e.g. from a QR code)"
+msgstr "योजयितुं वैकल्पिकं खातं, otpauth:// URI इति स्वरूपितं (उदा. QR कोडतः)"
+
+#: src/app/flows_p.cpp:111 src/app/flows_p.cpp:285
+#, kde-format
+msgctxt "@title:window"
+msgid "Invalid account"
+msgstr "अमान्य खाता"
+
+#: src/app/flows_p.cpp:112
+#, kde-format
+msgctxt "@info:label"
+msgid ""
+"The account you are trying to add is invalid. You can either quit the app, "
+"or continue without adding the account."
+msgstr ""
+"भवन्तः यत् खातं योजयितुं प्रयतन्ते तत् अमान्यम् अस्ति । भवान् एप् त्यक्तुं शक्नोति, अथवा खातं न "
+"योजयित्वा निरन्तरं कर्तुं शक्नोति।"
+
+#: src/app/flows_p.cpp:286
+#, kde-format
+msgctxt "@info:label"
+msgid ""
+"The account you are trying to add is invalid. Continue without adding the "
+"account."
+msgstr ""
+"भवन्तः यत् खातं योजयितुं प्रयतन्ते तत् अमान्यम् अस्ति । खातां न योजयित्वा निरन्तरं कुर्वन्तु।"
+
+#: src/contents/ui/AccountEntryViewBase.qml:35
+#, kde-format
+msgctxt "Details dialog title: %1 is the name of the account"
+msgid "Details of account: %1"
+msgstr "खातेः विवरणम् : %1"
+
+#: src/contents/ui/AccountEntryViewBase.qml:42
+#, kde-format
+msgid "Name:"
+msgstr "नामः:"
+
+#: src/contents/ui/AccountEntryViewBase.qml:49
+#, kde-format
+msgid "Issuer:"
+msgstr "जारीकर्ता :"
+
+#: src/contents/ui/AccountEntryViewBase.qml:56
+#, kde-format
+msgid "Mode:"
+msgstr "मोडः :"
+
+#: src/contents/ui/AccountEntryViewBase.qml:57
+#, kde-format
+msgctxt "Mode of 2fa"
+msgid "HOTP"
+msgstr "HOTP"
+
+#: src/contents/ui/AccountEntryViewBase.qml:57
+#, kde-format
+msgctxt "Mode of 2fa"
+msgid "TOTP"
+msgstr "TOTP"
+
+#: src/contents/ui/AccountEntryViewBase.qml:63
+#, kde-format
+msgid "Epoch:"
+msgstr "युगः :"
+
+#: src/contents/ui/AccountEntryViewBase.qml:70
+#, kde-format
+msgid "Time Step:"
+msgstr "समयः सोपानः :"
+
+#: src/contents/ui/AccountEntryViewBase.qml:77
+#, kde-format
+msgid "Offset:"
+msgstr "ऑफसेट् :"
+
+#: src/contents/ui/AccountEntryViewBase.qml:84
+#, kde-format
+msgid "Token Length:"
+msgstr "टोकन लम्बाई :"
+
+#: src/contents/ui/AccountEntryViewBase.qml:91
+#, kde-format
+msgid "Hash:"
+msgstr "हैशः :"
+
+#: src/contents/ui/AccountEntryViewBase.qml:100
+#, kde-format
+msgctxt "Confirm dialog title: %1 is the name of the account to remove"
+msgid "Removing account: %1"
+msgstr "खातं निष्कासयति: %1"
+
+#: src/contents/ui/AccountEntryViewBase.qml:105
+#, kde-format
+msgid ""
+"<p><ul><li>Account name: %1</li><li>Account issuer: %2</li></ul></"
+"p><p>Removing this account from Keysmith will not disable two-factor "
+"authentication (2FA). Make sure you can still access your account without "
+"using Keysmith before proceeding:</p><ul><li>Make sure you have another 2FA "
+"app set up for your account, or:</li><li>Make sure you have recovery codes "
+"for your account, or:</li><li>Disable two-factor authentication on your "
+"account</li></ul>"
+msgstr ""
+"<p><ul><li>खातानाम: %1</li><li> खाता जारीकर्ता: %2</li></ul></p><p> Keysmith "
+"इत्यस्मात् एतत् खातं निष्कास्य द्विकारकप्रमाणीकरणं (2FA) अक्षमं न भविष्यति । अग्रे गन्तुं पूर्वं "
+"Keysmith इत्यस्य उपयोगं विना अपि भवान् स्वखातं प्राप्तुं शक्नोति इति सुनिश्चितं कुर्वन्तु:</"
+"p><ul><li> सुनिश्चितं कुर्वन्तु यत् भवतः खातेः कृते अन्यत् 2FA एप् स्थापितं अस्ति, अथवा:</"
+"li><li> सुनिश्चितं कुर्वन्तु यत् भवतः खातेः पुनर्प्राप्ति-सङ्केताः सन्ति, अथवा:</li><li> "
+"भवतः खाते द्विकारकप्रमाणीकरणं निष्क्रियं कुर्वन्तु</li></ul>"
+
+#: src/contents/ui/AccountEntryViewBase.qml:116
+#, kde-format
+msgctxt "Button confirming account removal"
+msgid "Delete Account"
+msgstr "खाता विलोपयतु"
+
+#: src/contents/ui/AccountEntryViewBase.qml:134
+#, kde-format
+msgctxt "Notification shown in a passive notification"
+msgid "Token copied to clipboard!"
+msgstr "टोकनः क्लिप्बोर्ड् प्रति प्रतिलिखितः!"
+
+#: src/contents/ui/AccountNameForm.qml:81
+#, kde-format
+msgctxt "@label:textbox"
+msgid "Account name:"
+msgstr "खातानाम :"
+
+#: src/contents/ui/AccountNameForm.qml:100
+#, kde-format
+msgctxt "@label:textbox"
+msgid "Account issuer:"
+msgstr "खाता जारीकर्ता :"
+
+#: src/contents/ui/AccountsOverview.qml:21
+#, kde-format
+msgctxt "@title:window"
+msgid "Accounts"
+msgstr "लेखा"
+
+#: src/contents/ui/AccountsOverview.qml:25
+#, kde-format
+msgctxt "generic error shown when adding or updating an account failed"
+msgid "Failed to update accounts"
+msgstr "खातानि अद्यतनीकर्तुं असफलम्"
+
+#: src/contents/ui/AccountsOverview.qml:26
+#, kde-format
+msgctxt "error message shown when loading accounts from storage failed"
+msgid "Some accounts failed to load."
+msgstr "केचन खाताः लोड् कर्तुं असफलाः अभवन् ।"
+
+#: src/contents/ui/AccountsOverview.qml:91
+#, kde-format
+msgid "No accounts added"
+msgstr "न लेखाः योजिताः"
+
+#: src/contents/ui/AccountsOverview.qml:96
+#, kde-format
+msgctxt ""
+"@action:button add new account, shown instead of overview list when no "
+"accounts have been added yet"
+msgid "Add Account"
+msgstr "खाता योजयतु"
+
+#: src/contents/ui/AccountsOverview.qml:163
+#, kde-format
+msgctxt "@action:button add new account, shown in toolbar"
+msgid "Add"
+msgstr "संयोजयति"
+
+#: src/contents/ui/AccountsOverview.qml:176
+#, kde-format
+msgctxt "@action:button import accounts, shown in toolbar"
+msgid "Import"
+msgstr "आयात"
+
+#: src/contents/ui/AccountsOverview.qml:189
+#, kde-format
+msgctxt ""
+"@action:button import an account by scanning a QR code, shown in toolbar"
+msgid "Scan QR Code"
+msgstr ""
+
+#: src/contents/ui/AddAccount.qml:22
+#, kde-format
+msgctxt "@title:window"
+msgid "Add new account"
+msgstr "नूतनं खातं योजयन्तु"
+
+#: src/contents/ui/AddAccount.qml:50
+#, kde-format
+msgctxt "@action:button cancel and dismiss the add account form"
+msgid "Cancel"
+msgstr "निरसयतु"
+
+#: src/contents/ui/AddAccount.qml:57
+#, kde-format
+msgctxt "@action:button Dismiss the error page and quit Keysmith"
+msgid "Quit"
+msgstr "परिजहातु"
+
+#: src/contents/ui/AddAccount.qml:66
+#, kde-format
+msgctxt "@action:button"
+msgid "Add"
+msgstr "संयोजयति"
+
+#: src/contents/ui/AddAccount.qml:86
+#, kde-format
+msgctxt "@label:chooser"
+msgid "Account type:"
+msgstr "खाताप्रकारः :"
+
+#: src/contents/ui/AddAccount.qml:95
+#, kde-format
+msgctxt "@option:radio"
+msgid "Time-based OTP"
+msgstr "समय-आधारित ओटीपी"
+
+#: src/contents/ui/AddAccount.qml:106
+#, kde-format
+msgctxt "@option:radio"
+msgid "Hash-based OTP"
+msgstr "हैश-आधारित ओटीपी"
+
+#: src/contents/ui/AddAccount.qml:118
+#, kde-format
+msgid "Token secret"
+msgstr "टोकन रहस्य"
+
+#: src/contents/ui/AddAccount.qml:120
+#, kde-format
+msgctxt "@label:textbox"
+msgid "Secret key:"
+msgstr "गुप्त कुञ्जी :"
+
+#: src/contents/ui/AddAccount.qml:139
+#, kde-format
+msgctxt "Button to reveal form for configuring additional token details"
+msgid "Details"
+msgstr "वर्णन"
+
+#: src/contents/ui/AddAccount.qml:147
+#, kde-format
+msgctxt "@title:group"
+msgid "HOTP Details:"
+msgstr "HOTP विवरणम् :"
+
+#: src/contents/ui/AddAccount.qml:160
+#, kde-format
+msgctxt "@label"
+msgid "TOTP Details:"
+msgstr "TOTP विवरणम् :"
+
+#: src/contents/ui/ErrorPage.qml:34
+#, kde-format
+msgctxt "@action:button Button to dismiss the error page"
+msgid "Continue"
+msgstr "अनुवर्तते"
+
+#: src/contents/ui/ErrorPage.qml:41
+#, kde-format
+msgctxt "@action:button Dismiss the error page and quit Keysmtih"
+msgid "Quit"
+msgstr "परिजहातु"
+
+#: src/contents/ui/HOTPAccountEntryView.qml:19
+#: src/contents/ui/TOTPAccountEntryView.qml:23
+#, kde-format
+msgctxt "Button to show details of a single account"
+msgid "Show details"
+msgstr "विवरणं दर्शयतु"
+
+#: src/contents/ui/HOTPAccountEntryView.qml:28
+#: src/contents/ui/TOTPAccountEntryView.qml:34
+#, kde-format
+msgctxt "Button for removal of a single account"
+msgid "Delete account"
+msgstr "खाता विलोपयतु"
+
+#: src/contents/ui/HOTPDetailsForm.qml:27
+#, kde-format
+msgctxt "@label:textbox"
+msgid "Counter:"
+msgstr "गणित्र:"
+
+#: src/contents/ui/HOTPDetailsForm.qml:48
+#: src/contents/ui/TOTPDetailsForm.qml:67
+#, kde-format
+msgctxt "@label:spinbox"
+msgid "Token length:"
+msgstr "टोकनदीर्घता :"
+
+#: src/contents/ui/HOTPDetailsForm.qml:63
+#, kde-format
+msgctxt "@option:check"
+msgid "Add checksum digit"
+msgstr "चेकसम अङ्कं योजयन्तु"
+
+#: src/contents/ui/HOTPDetailsForm.qml:75
+#, kde-format
+msgctxt "@option:check"
+msgid "Use custom truncation offset"
+msgstr "कस्टम् ट्रंकेशन ऑफसेट् इत्यस्य उपयोगं कुर्वन्तु"
+
+#: src/contents/ui/HOTPDetailsForm.qml:89
+#, kde-format
+msgctxt "@label:spinbox"
+msgid "Truncation offset:"
+msgstr "कटन-अफसेट् :"
+
+#: src/contents/ui/ImportAccount.qml:21
+#, kde-format
+msgctxt "@title:window"
+msgid "Import Accounts"
+msgstr "आयात लेखा"
+
+#: src/contents/ui/ImportAccount.qml:52
+#, kde-format
+msgid "Import format"
+msgstr "आयातस्वरूपम्"
+
+#. i18n strings
+#: src/contents/ui/ImportAccount.qml:58
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "andOTP Encrypted JSON"
+msgstr "andOTP एन्क्रिप्टेड JSON"
+
+#: src/contents/ui/ImportAccount.qml:59
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "andOTP Plain JSON"
+msgstr "andOTP सादा JSON"
+
+#. i18nc("@item:inlistbox", "Aegis Encrypted JSON"), value: Models.ValidatedImportInput.AegisEncryptedJSON});
+#: src/contents/ui/ImportAccount.qml:61
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "Aegis Plain JSON"
+msgstr "एजिस मैदान JSON"
+
+#: src/contents/ui/ImportAccount.qml:62
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "FreeOTP URIs"
+msgstr "FreeOTP URIs इति"
+
+#: src/contents/ui/ImportAccount.qml:78
+#, kde-format
+msgctxt "@label:chooser"
+msgid "Backup file:"
+msgstr "बैकअप सञ्चिका :"
+
+#: src/contents/ui/ImportAccount.qml:81
+#, kde-format
+msgctxt "@info:placeholder"
+msgid "No file selected"
+msgstr "न सञ्चिका चयनिता"
+
+#: src/contents/ui/ImportAccount.qml:85
+#, kde-format
+msgctxt "@title:window"
+msgid "Select file"
+msgstr "सञ्चिकां चिनोतु"
+
+#: src/contents/ui/ImportAccount.qml:99
+#, kde-format
+msgctxt "@info:placeholder"
+msgid "Decryption password"
+msgstr "विगुप्तीकरण गुप्तशब्द"
+
+#: src/contents/ui/ImportAccount.qml:101 src/contents/ui/UnlockAccounts.qml:49
+#, kde-format
+msgctxt "@label:textbox"
+msgid "Password:"
+msgstr "समाभाष्:"
+
+#: src/contents/ui/ImportAccount.qml:112
+#, kde-format
+msgctxt "@action:button"
+msgid "Import"
+msgstr "आयात"
+
+#: src/contents/ui/KeysmithGlobalDrawer.qml:12
+#: src/contents/ui/KeysmithGlobalDrawer.qml:15
+#, kde-format
+msgid "About Keysmith"
+msgstr "कीस्मिथस्य विषये"
+
+#: src/contents/ui/QRScanPage.qml:21
+#, kde-format
+msgctxt "@title"
+msgid "Scan a QR code"
+msgstr ""
+
+#: src/contents/ui/QRScanPage.qml:31
+#, fuzzy, kde-format
+#| msgctxt "@title:window"
+#| msgid "Select file"
+msgctxt "@action:intoolbar"
+msgid "Select Camera"
+msgstr "सञ्चिकां चिनोतु"
+
+#: src/contents/ui/QRScanPage.qml:42
+#, fuzzy, kde-format
+#| msgctxt "@title:window"
+#| msgid "Select file"
+msgctxt "@title:dialog"
+msgid "Select Camera"
+msgstr "सञ्चिकां चिनोतु"
+
+#: src/contents/ui/QRScanPage.qml:61
+#, kde-format
+msgctxt "@action:button"
+msgid "Close"
+msgstr ""
+
+#: src/contents/ui/RenameAccount.qml:17
+#, kde-format
+msgctxt "@title:window"
+msgid "Rename account to add"
+msgstr "योजयितुं खातेः नाम परिवर्तनं कुर्वन्तु"
+
+#: src/contents/ui/RenameAccount.qml:35
+#, kde-format
+msgctxt ""
+"@info:label Keysmith received an account to add via URI on e.g. commandline "
+"which is already in use"
+msgid ""
+"Another account with the same name already exists. Please correct the name "
+"or issuer for the new account."
+msgstr ""
+"समाननाम्ना अन्यः लेखः पूर्वमेव अस्ति । कृपया नूतनलेखस्य नाम वा निर्गन्तुकं वा सम्यक् कुर्वन्तु।"
+
+#: src/contents/ui/RenameAccount.qml:49
+#, kde-format
+msgctxt "@action:button cancel and dismiss the rename account form"
+msgid "Cancel"
+msgstr "निरसयतु"
+
+#: src/contents/ui/RenameAccount.qml:56
+#, kde-format
+msgid "Add"
+msgstr "संयोजयति"
+
+#: src/contents/ui/SetupPassword.qml:21 src/contents/ui/UnlockAccounts.qml:21
+#, kde-format
+msgctxt "@title:window"
+msgid "Password"
+msgstr "समाभाष्"
+
+#: src/contents/ui/SetupPassword.qml:27
+#, kde-format
+msgid "Failed to set up your password"
+msgstr "भवतः गुप्तशब्दं स्थापयितुं असफलम्"
+
+#: src/contents/ui/SetupPassword.qml:42
+#, kde-format
+msgid "Choose a password to protect your accounts"
+msgstr "भवतः खातानां रक्षणार्थं गुप्तशब्दं चिनोतु"
+
+#: src/contents/ui/SetupPassword.qml:48
+#, kde-format
+msgctxt "@label:textbox"
+msgid "New Password:"
+msgstr "नवीनः गुप्तशब्दः :"
+
+#: src/contents/ui/SetupPassword.qml:61
+#, kde-format
+msgctxt "@label:textbox"
+msgid "Verify password:"
+msgstr "गुप्तशब्दस्य सत्यापनम् :"
+
+#: src/contents/ui/SetupPassword.qml:72
+#, kde-format
+msgctxt "@action:button"
+msgid "Apply"
+msgstr "आचरतु"
+
+#: src/contents/ui/TokenEntryViewLabels.qml:40
+#, kde-format
+msgctxt "placeholder text if no token is available"
+msgid "(refresh)"
+msgstr "(ताजगी)"
+
+#: src/contents/ui/TOTPDetailsForm.qml:27
+#, kde-format
+msgctxt "@label:textbox"
+msgid "Timer:"
+msgstr "समयनिर्धारकः :"
+
+#: src/contents/ui/TOTPDetailsForm.qml:45
+#, kde-format
+msgctxt "@label:textbox"
+msgid "Starting at:"
+msgstr "इतः आरभ्य :"
+
+#: src/contents/ui/TOTPDetailsForm.qml:79
+#, kde-format
+msgctxt "@label:chooser"
+msgid "Hash algorithm:"
+msgstr "हैश एल्गोरिदम् :"
+
+#: src/contents/ui/TOTPDetailsForm.qml:86
+#, kde-format
+msgctxt "@option:radio"
+msgid "SHA-1"
+msgstr "शा-1"
+
+#: src/contents/ui/TOTPDetailsForm.qml:98
+#, kde-format
+msgctxt "@option:radio"
+msgid "SHA-256"
+msgstr "शा-256"
+
+#: src/contents/ui/TOTPDetailsForm.qml:110
+#, kde-format
+msgctxt "@option:radio"
+msgid "SHA-512"
+msgstr "शा-५१२"
+
+#: src/contents/ui/UnlockAccounts.qml:25
+#, kde-format
+msgid "Failed to unlock your accounts"
+msgstr "भवतः खातानां तालान् उद्घाटयितुं असफलम्"
+
+#: src/contents/ui/UnlockAccounts.qml:43
+#, kde-format
+msgid "Please provide the password to unlock your accounts"
+msgstr "कृपया स्वलेखानां तालान् उद्घाटयितुं गुप्तशब्दं प्रदातव्यम्"
+
+#: src/contents/ui/UnlockAccounts.qml:61
+#, kde-format
+msgctxt "@action:button"
+msgid "Unlock"
+msgstr "अनलॉक"
+
+#: src/main.cpp:70
+#, kde-format
+msgctxt "@title"
+msgid "Keysmith"
+msgstr "कीलकारः"
+
+#: src/main.cpp:73
+#, kde-format
+msgid "generate two-factor authentication (2FA) tokens"
+msgstr "द्वि-कारकप्रमाणीकरण (2FA) टोकन जनयति"
+
+#: src/main.cpp:76
+#, kde-format
+msgid "Keysmith"
+msgstr "कीलकारः"
+
+#: src/main.cpp:80
+#, kde-format
+msgid "© 2019 KDE Community"
+msgstr "© 2019 KDE समुदाय"
diff -pruN 24.08.1-1/po/sk/keysmith.po 25.03.90-1/po/sk/keysmith.po
--- 24.08.1-1/po/sk/keysmith.po	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/po/sk/keysmith.po	2025-03-27 10:13:04.000000000 +0000
@@ -4,7 +4,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: keysmith\n"
 "Report-Msgid-Bugs-To: https://bugs.kde.org\n"
-"POT-Creation-Date: 2024-05-03 00:40+0000\n"
+"POT-Creation-Date: 2025-02-09 00:43+0000\n"
 "PO-Revision-Date: 2021-11-15 18:40+0100\n"
 "Last-Translator: Roman Paholik <wizzardsk@gmail.com>\n"
 "Language-Team: Slovak <kde-sk@linux.sk>\n"
@@ -22,13 +22,13 @@ msgid ""
 "Optional account to add, formatted as otpauth:// URI (e.g. from a QR code)"
 msgstr ""
 
-#: src/app/flows_p.cpp:108 src/app/flows_p.cpp:248
+#: src/app/flows_p.cpp:111 src/app/flows_p.cpp:285
 #, kde-format
 msgctxt "@title:window"
 msgid "Invalid account"
 msgstr "Neplatný účet"
 
-#: src/app/flows_p.cpp:109
+#: src/app/flows_p.cpp:112
 #, kde-format
 msgctxt "@info:label"
 msgid ""
@@ -36,7 +36,7 @@ msgid ""
 "or continue without adding the account."
 msgstr ""
 
-#: src/app/flows_p.cpp:249
+#: src/app/flows_p.cpp:286
 #, kde-format
 msgctxt "@info:label"
 msgid ""
@@ -139,7 +139,7 @@ msgctxt "Notification shown in a passive
 msgid "Token copied to clipboard!"
 msgstr ""
 
-#: src/contents/ui/AccountNameForm.qml:64
+#: src/contents/ui/AccountNameForm.qml:81
 #, fuzzy, kde-format
 #| msgctxt "@label:textbox"
 #| msgid "Account Name:"
@@ -147,7 +147,7 @@ msgctxt "@label:textbox"
 msgid "Account name:"
 msgstr "Názov účt&u:"
 
-#: src/contents/ui/AccountNameForm.qml:83
+#: src/contents/ui/AccountNameForm.qml:100
 #, fuzzy, kde-format
 #| msgctxt "@label:textbox"
 #| msgid "Account Name:"
@@ -173,12 +173,12 @@ msgctxt "error message shown when loadin
 msgid "Some accounts failed to load."
 msgstr ""
 
-#: src/contents/ui/AccountsOverview.qml:101
+#: src/contents/ui/AccountsOverview.qml:91
 #, kde-format
 msgid "No accounts added"
 msgstr ""
 
-#: src/contents/ui/AccountsOverview.qml:106
+#: src/contents/ui/AccountsOverview.qml:96
 #, fuzzy, kde-format
 #| msgctxt ""
 #| "@action:button add new account, shown instead of overview list when no "
@@ -190,25 +190,38 @@ msgctxt ""
 msgid "Add Account"
 msgstr "Pridať účet"
 
-#: src/contents/ui/AccountsOverview.qml:172
+#: src/contents/ui/AccountsOverview.qml:163
 #, kde-format
 msgctxt "@action:button add new account, shown in toolbar"
 msgid "Add"
 msgstr "Pridať"
 
+#: src/contents/ui/AccountsOverview.qml:176
+#, kde-format
+msgctxt "@action:button import accounts, shown in toolbar"
+msgid "Import"
+msgstr ""
+
+#: src/contents/ui/AccountsOverview.qml:189
+#, kde-format
+msgctxt ""
+"@action:button import an account by scanning a QR code, shown in toolbar"
+msgid "Scan QR Code"
+msgstr ""
+
 #: src/contents/ui/AddAccount.qml:22
 #, kde-format
 msgctxt "@title:window"
 msgid "Add new account"
 msgstr "Pridať nový účet"
 
-#: src/contents/ui/AddAccount.qml:45
+#: src/contents/ui/AddAccount.qml:50
 #, kde-format
 msgctxt "@action:button cancel and dismiss the add account form"
 msgid "Cancel"
 msgstr "Zrušiť"
 
-#: src/contents/ui/AddAccount.qml:52
+#: src/contents/ui/AddAccount.qml:57
 #, fuzzy, kde-format
 #| msgctxt "@action:button Dismiss the error page and quit Keysmtih"
 #| msgid "Quit"
@@ -216,14 +229,14 @@ msgctxt "@action:button Dismiss the erro
 msgid "Quit"
 msgstr "Ukončiť"
 
-#: src/contents/ui/AddAccount.qml:61
+#: src/contents/ui/AddAccount.qml:66
 #, fuzzy, kde-format
 #| msgid "Add"
 msgctxt "@action:button"
 msgid "Add"
 msgstr "Pridať"
 
-#: src/contents/ui/AddAccount.qml:81
+#: src/contents/ui/AddAccount.qml:86
 #, fuzzy, kde-format
 #| msgctxt "@label:chooser"
 #| msgid "Account Type:"
@@ -231,36 +244,36 @@ msgctxt "@label:chooser"
 msgid "Account type:"
 msgstr "Typ účtu:"
 
-#: src/contents/ui/AddAccount.qml:90
+#: src/contents/ui/AddAccount.qml:95
 #, kde-format
 msgctxt "@option:radio"
 msgid "Time-based OTP"
 msgstr ""
 
-#: src/contents/ui/AddAccount.qml:101
+#: src/contents/ui/AddAccount.qml:106
 #, kde-format
 msgctxt "@option:radio"
 msgid "Hash-based OTP"
 msgstr ""
 
-#: src/contents/ui/AddAccount.qml:113
+#: src/contents/ui/AddAccount.qml:118
 #, kde-format
 msgid "Token secret"
 msgstr "Tajomstvo tokenu"
 
-#: src/contents/ui/AddAccount.qml:116
+#: src/contents/ui/AddAccount.qml:120
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Secret key:"
 msgstr "Tajný kľúč: "
 
-#: src/contents/ui/AddAccount.qml:132
+#: src/contents/ui/AddAccount.qml:139
 #, kde-format
 msgctxt "Button to reveal form for configuring additional token details"
 msgid "Details"
 msgstr "Podrobnosti"
 
-#: src/contents/ui/AddAccount.qml:140
+#: src/contents/ui/AddAccount.qml:147
 #, fuzzy, kde-format
 #| msgctxt "Button to reveal form for configuring additional token details"
 #| msgid "Details"
@@ -268,7 +281,7 @@ msgctxt "@title:group"
 msgid "HOTP Details:"
 msgstr "Podrobnosti"
 
-#: src/contents/ui/AddAccount.qml:153
+#: src/contents/ui/AddAccount.qml:160
 #, fuzzy, kde-format
 #| msgctxt "Button to reveal form for configuring additional token details"
 #| msgid "Details"
@@ -276,13 +289,13 @@ msgctxt "@label"
 msgid "TOTP Details:"
 msgstr "Podrobnosti"
 
-#: src/contents/ui/ErrorPage.qml:33
+#: src/contents/ui/ErrorPage.qml:34
 #, kde-format
 msgctxt "@action:button Button to dismiss the error page"
 msgid "Continue"
 msgstr "Pokračovať"
 
-#: src/contents/ui/ErrorPage.qml:40
+#: src/contents/ui/ErrorPage.qml:41
 #, kde-format
 msgctxt "@action:button Dismiss the error page and quit Keysmtih"
 msgid "Quit"
@@ -335,6 +348,115 @@ msgctxt "@label:spinbox"
 msgid "Truncation offset:"
 msgstr ""
 
+#: src/contents/ui/ImportAccount.qml:21
+#, fuzzy, kde-format
+#| msgctxt "@title:window"
+#| msgid "Accounts"
+msgctxt "@title:window"
+msgid "Import Accounts"
+msgstr "Účty"
+
+#: src/contents/ui/ImportAccount.qml:52
+#, kde-format
+msgid "Import format"
+msgstr ""
+
+#. i18n strings
+#: src/contents/ui/ImportAccount.qml:58
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "andOTP Encrypted JSON"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:59
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "andOTP Plain JSON"
+msgstr ""
+
+#. i18nc("@item:inlistbox", "Aegis Encrypted JSON"), value: Models.ValidatedImportInput.AegisEncryptedJSON});
+#: src/contents/ui/ImportAccount.qml:61
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "Aegis Plain JSON"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:62
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "FreeOTP URIs"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:78
+#, kde-format
+msgctxt "@label:chooser"
+msgid "Backup file:"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:81
+#, kde-format
+msgctxt "@info:placeholder"
+msgid "No file selected"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:85
+#, kde-format
+msgctxt "@title:window"
+msgid "Select file"
+msgstr ""
+
+#: src/contents/ui/ImportAccount.qml:99
+#, fuzzy, kde-format
+#| msgctxt "@label:textbox"
+#| msgid "Verify password:"
+msgctxt "@info:placeholder"
+msgid "Decryption password"
+msgstr "Overenie hesla:"
+
+#: src/contents/ui/ImportAccount.qml:101 src/contents/ui/UnlockAccounts.qml:49
+#, kde-format
+msgctxt "@label:textbox"
+msgid "Password:"
+msgstr "Heslo:"
+
+#: src/contents/ui/ImportAccount.qml:112
+#, kde-format
+msgctxt "@action:button"
+msgid "Import"
+msgstr ""
+
+#: src/contents/ui/KeysmithGlobalDrawer.qml:12
+#: src/contents/ui/KeysmithGlobalDrawer.qml:15
+#, fuzzy, kde-format
+#| msgctxt "@title"
+#| msgid "Keysmith"
+msgid "About Keysmith"
+msgstr "Keysmith"
+
+#: src/contents/ui/QRScanPage.qml:21
+#, kde-format
+msgctxt "@title"
+msgid "Scan a QR code"
+msgstr ""
+
+#: src/contents/ui/QRScanPage.qml:31
+#, kde-format
+msgctxt "@action:intoolbar"
+msgid "Select Camera"
+msgstr ""
+
+#: src/contents/ui/QRScanPage.qml:42
+#, kde-format
+msgctxt "@title:dialog"
+msgid "Select Camera"
+msgstr ""
+
+#: src/contents/ui/QRScanPage.qml:61
+#, kde-format
+msgctxt "@action:button"
+msgid "Close"
+msgstr ""
+
 #: src/contents/ui/RenameAccount.qml:17
 #, kde-format
 msgctxt "@title:window"
@@ -362,13 +484,13 @@ msgstr "Zrušiť"
 msgid "Add"
 msgstr "Pridať"
 
-#: src/contents/ui/SetupPassword.qml:22 src/contents/ui/UnlockAccounts.qml:22
+#: src/contents/ui/SetupPassword.qml:21 src/contents/ui/UnlockAccounts.qml:21
 #, kde-format
 msgctxt "@title:window"
 msgid "Password"
 msgstr "Heslo"
 
-#: src/contents/ui/SetupPassword.qml:28
+#: src/contents/ui/SetupPassword.qml:27
 #, kde-format
 msgid "Failed to set up your password"
 msgstr ""
@@ -378,7 +500,7 @@ msgstr ""
 msgid "Choose a password to protect your accounts"
 msgstr ""
 
-#: src/contents/ui/SetupPassword.qml:49
+#: src/contents/ui/SetupPassword.qml:48
 #, fuzzy, kde-format
 #| msgctxt "@label:textbox"
 #| msgid "New password:"
@@ -386,13 +508,13 @@ msgctxt "@label:textbox"
 msgid "New Password:"
 msgstr "Nové heslo:"
 
-#: src/contents/ui/SetupPassword.qml:60
+#: src/contents/ui/SetupPassword.qml:61
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Verify password:"
 msgstr "Overenie hesla:"
 
-#: src/contents/ui/SetupPassword.qml:68
+#: src/contents/ui/SetupPassword.qml:72
 #, fuzzy, kde-format
 #| msgid "Apply"
 msgctxt "@action:button"
@@ -441,7 +563,7 @@ msgctxt "@option:radio"
 msgid "SHA-512"
 msgstr "SHA-512"
 
-#: src/contents/ui/UnlockAccounts.qml:26
+#: src/contents/ui/UnlockAccounts.qml:25
 #, kde-format
 msgid "Failed to unlock your accounts"
 msgstr ""
@@ -451,25 +573,36 @@ msgstr ""
 msgid "Please provide the password to unlock your accounts"
 msgstr ""
 
-#: src/contents/ui/UnlockAccounts.qml:50
-#, kde-format
-msgctxt "@label:textbox"
-msgid "Password:"
-msgstr "Heslo:"
-
-#: src/contents/ui/UnlockAccounts.qml:59
+#: src/contents/ui/UnlockAccounts.qml:61
 #, fuzzy, kde-format
 #| msgid "Unlock"
 msgctxt "@action:button"
 msgid "Unlock"
 msgstr "Odomknúť"
 
-#: src/main.cpp:67
+#: src/main.cpp:70
 #, kde-format
 msgctxt "@title"
 msgid "Keysmith"
 msgstr "Keysmith"
 
+#: src/main.cpp:73
+#, kde-format
+msgid "generate two-factor authentication (2FA) tokens"
+msgstr ""
+
+#: src/main.cpp:76
+#, fuzzy, kde-format
+#| msgctxt "@title"
+#| msgid "Keysmith"
+msgid "Keysmith"
+msgstr "Keysmith"
+
+#: src/main.cpp:80
+#, kde-format
+msgid "© 2019 KDE Community"
+msgstr ""
+
 #~ msgctxt "Button cancelling account removal"
 #~ msgid "Cancel"
 #~ msgstr "Zrušiť"
diff -pruN 24.08.1-1/po/sl/keysmith.po 25.03.90-1/po/sl/keysmith.po
--- 24.08.1-1/po/sl/keysmith.po	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/po/sl/keysmith.po	2025-03-27 10:13:04.000000000 +0000
@@ -6,8 +6,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: keysmith\n"
 "Report-Msgid-Bugs-To: https://bugs.kde.org\n"
-"POT-Creation-Date: 2024-05-03 00:40+0000\n"
-"PO-Revision-Date: 2024-01-13 07:19+0100\n"
+"POT-Creation-Date: 2025-02-09 00:43+0000\n"
+"PO-Revision-Date: 2025-01-14 06:47+0100\n"
 "Last-Translator: Matjaž Jeran <matjaz.jeran@amis.net>\n"
 "Language-Team: Slovenian <lugos-slo@lugos.si>\n"
 "Language: sl\n"
@@ -16,7 +16,7 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n"
 "%100==4 ? 3 : 0);\n"
-"X-Generator: Poedit 3.4.2\n"
+"X-Generator: Poedit 3.5\n"
 
 #: src/app/cli.cpp:133
 #, kde-format
@@ -26,13 +26,13 @@ msgid ""
 msgstr ""
 "Dodan neobvezen račun oblikovan kot otpauth:// URI (npr. prebran iz kode QR)"
 
-#: src/app/flows_p.cpp:108 src/app/flows_p.cpp:248
+#: src/app/flows_p.cpp:111 src/app/flows_p.cpp:285
 #, kde-format
 msgctxt "@title:window"
 msgid "Invalid account"
 msgstr "Neveljavni račun"
 
-#: src/app/flows_p.cpp:109
+#: src/app/flows_p.cpp:112
 #, kde-format
 msgctxt "@info:label"
 msgid ""
@@ -42,7 +42,7 @@ msgstr ""
 "Račun, ki ga poskušate dodati, ni veljaven. Lahko zapustite aplikacijo ali "
 "pa nadaljujete ne da bi dodali račun."
 
-#: src/app/flows_p.cpp:249
+#: src/app/flows_p.cpp:286
 #, kde-format
 msgctxt "@info:label"
 msgid ""
@@ -147,13 +147,13 @@ msgctxt "Notification shown in a passive
 msgid "Token copied to clipboard!"
 msgstr "Žeton prekopiran na odložišče!"
 
-#: src/contents/ui/AccountNameForm.qml:64
+#: src/contents/ui/AccountNameForm.qml:81
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Account name:"
 msgstr "Ime računa:"
 
-#: src/contents/ui/AccountNameForm.qml:83
+#: src/contents/ui/AccountNameForm.qml:100
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Account issuer:"
@@ -177,12 +177,12 @@ msgctxt "error message shown when loadin
 msgid "Some accounts failed to load."
 msgstr "Nekaj računov se ni uspelo naložiti."
 
-#: src/contents/ui/AccountsOverview.qml:101
+#: src/contents/ui/AccountsOverview.qml:91
 #, kde-format
 msgid "No accounts added"
 msgstr "Ni dodanih računov"
 
-#: src/contents/ui/AccountsOverview.qml:106
+#: src/contents/ui/AccountsOverview.qml:96
 #, kde-format
 msgctxt ""
 "@action:button add new account, shown instead of overview list when no "
@@ -190,90 +190,103 @@ msgctxt ""
 msgid "Add Account"
 msgstr "Dodaj račun"
 
-#: src/contents/ui/AccountsOverview.qml:172
+#: src/contents/ui/AccountsOverview.qml:163
 #, kde-format
 msgctxt "@action:button add new account, shown in toolbar"
 msgid "Add"
 msgstr "Dodaj"
 
+#: src/contents/ui/AccountsOverview.qml:176
+#, kde-format
+msgctxt "@action:button import accounts, shown in toolbar"
+msgid "Import"
+msgstr "Uvozi"
+
+#: src/contents/ui/AccountsOverview.qml:189
+#, kde-format
+msgctxt ""
+"@action:button import an account by scanning a QR code, shown in toolbar"
+msgid "Scan QR Code"
+msgstr "Skeniraj kodo QR"
+
 #: src/contents/ui/AddAccount.qml:22
 #, kde-format
 msgctxt "@title:window"
 msgid "Add new account"
 msgstr "Dodaj nov račun"
 
-#: src/contents/ui/AddAccount.qml:45
+#: src/contents/ui/AddAccount.qml:50
 #, kde-format
 msgctxt "@action:button cancel and dismiss the add account form"
 msgid "Cancel"
 msgstr "Prekliči"
 
-#: src/contents/ui/AddAccount.qml:52
+#: src/contents/ui/AddAccount.qml:57
 #, kde-format
 msgctxt "@action:button Dismiss the error page and quit Keysmith"
 msgid "Quit"
 msgstr "Zapusti"
 
-#: src/contents/ui/AddAccount.qml:61
+#: src/contents/ui/AddAccount.qml:66
 #, kde-format
 msgctxt "@action:button"
 msgid "Add"
 msgstr "Dodaj"
 
-#: src/contents/ui/AddAccount.qml:81
+#: src/contents/ui/AddAccount.qml:86
 #, kde-format
 msgctxt "@label:chooser"
 msgid "Account type:"
 msgstr "Vrsta računa:"
 
-#: src/contents/ui/AddAccount.qml:90
+#: src/contents/ui/AddAccount.qml:95
 #, kde-format
 msgctxt "@option:radio"
 msgid "Time-based OTP"
 msgstr "Časovno osnovano enkratno geslo"
 
-#: src/contents/ui/AddAccount.qml:101
+#: src/contents/ui/AddAccount.qml:106
 #, kde-format
 msgctxt "@option:radio"
 msgid "Hash-based OTP"
 msgstr "Razsevno osnovano enkratno geslo"
 
-#: src/contents/ui/AddAccount.qml:113
+#: src/contents/ui/AddAccount.qml:118
 #, kde-format
 msgid "Token secret"
 msgstr "Skrivnost žetona"
 
-#: src/contents/ui/AddAccount.qml:116
+#: src/contents/ui/AddAccount.qml:120
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Secret key:"
 msgstr "Skrivni ključ:"
 
-#: src/contents/ui/AddAccount.qml:132
+#: src/contents/ui/AddAccount.qml:139
 #, kde-format
 msgctxt "Button to reveal form for configuring additional token details"
 msgid "Details"
 msgstr "Podrobnosti"
 
-#: src/contents/ui/AddAccount.qml:140
+#: src/contents/ui/AddAccount.qml:147
 #, kde-format
 msgctxt "@title:group"
 msgid "HOTP Details:"
 msgstr "Podrobnosti HOTP:"
 
-#: src/contents/ui/AddAccount.qml:153
+#: src/contents/ui/AddAccount.qml:160
 #, kde-format
 msgctxt "@label"
 msgid "TOTP Details:"
 msgstr "Podrobnosti TOPT:"
 
-#: src/contents/ui/ErrorPage.qml:33
+#: src/contents/ui/ErrorPage.qml:34
 #, kde-format
 msgctxt "@action:button Button to dismiss the error page"
 msgid "Continue"
 msgstr "Nadaljuj"
 
-#: src/contents/ui/ErrorPage.qml:40
+#: src/contents/ui/ErrorPage.qml:41
 #, kde-format
 msgctxt "@action:button Dismiss the error page and quit Keysmtih"
 msgid "Quit"
@@ -324,6 +337,109 @@ msgctxt "@label:spinbox"
 msgid "Truncation offset:"
 msgstr "Odmik obrezovanja:"
 
+#: src/contents/ui/ImportAccount.qml:21
+#, kde-format
+msgctxt "@title:window"
+msgid "Import Accounts"
+msgstr "Uvoženi računi"
+
+#: src/contents/ui/ImportAccount.qml:52
+#, kde-format
+msgid "Import format"
+msgstr "Uvozi format"
+
+#. i18n strings
+#: src/contents/ui/ImportAccount.qml:58
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "andOTP Encrypted JSON"
+msgstr "andOTP šifrirani JSON"
+
+#: src/contents/ui/ImportAccount.qml:59
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "andOTP Plain JSON"
+msgstr "andOTP Plain JSON"
+
+#. i18nc("@item:inlistbox", "Aegis Encrypted JSON"), value: Models.ValidatedImportInput.AegisEncryptedJSON});
+#: src/contents/ui/ImportAccount.qml:61
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "Aegis Plain JSON"
+msgstr "Aegis Plain JSON"
+
+#: src/contents/ui/ImportAccount.qml:62
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "FreeOTP URIs"
+msgstr "FreeOTP naslovi URI"
+
+#: src/contents/ui/ImportAccount.qml:78
+#, kde-format
+msgctxt "@label:chooser"
+msgid "Backup file:"
+msgstr "Datoteka varovalne kopije:"
+
+#: src/contents/ui/ImportAccount.qml:81
+#, kde-format
+msgctxt "@info:placeholder"
+msgid "No file selected"
+msgstr "Ni izbrane datoteke"
+
+#: src/contents/ui/ImportAccount.qml:85
+#, kde-format
+msgctxt "@title:window"
+msgid "Select file"
+msgstr "Izberite datoteko"
+
+#: src/contents/ui/ImportAccount.qml:99
+#, kde-format
+msgctxt "@info:placeholder"
+msgid "Decryption password"
+msgstr "Geslo za dešifriranje"
+
+#: src/contents/ui/ImportAccount.qml:101 src/contents/ui/UnlockAccounts.qml:49
+#, kde-format
+msgctxt "@label:textbox"
+msgid "Password:"
+msgstr "Geslo:"
+
+#: src/contents/ui/ImportAccount.qml:112
+#, kde-format
+msgctxt "@action:button"
+msgid "Import"
+msgstr "Uvozi"
+
+#: src/contents/ui/KeysmithGlobalDrawer.qml:12
+#: src/contents/ui/KeysmithGlobalDrawer.qml:15
+#, kde-format
+msgid "About Keysmith"
+msgstr "O Keysmithu"
+
+#: src/contents/ui/QRScanPage.qml:21
+#, kde-format
+msgctxt "@title"
+msgid "Scan a QR code"
+msgstr "Skeniraj kodo QR"
+
+#: src/contents/ui/QRScanPage.qml:31
+#, kde-format
+msgctxt "@action:intoolbar"
+msgid "Select Camera"
+msgstr "Izberite kamero"
+
+#: src/contents/ui/QRScanPage.qml:42
+#, kde-format
+msgctxt "@title:dialog"
+msgid "Select Camera"
+msgstr "Izberite kamero"
+
+#: src/contents/ui/QRScanPage.qml:61
+#, kde-format
+msgctxt "@action:button"
+msgid "Close"
+msgstr "Zapri"
+
 #: src/contents/ui/RenameAccount.qml:17
 #, kde-format
 msgctxt "@title:window"
@@ -353,13 +469,13 @@ msgstr "Prekliči"
 msgid "Add"
 msgstr "Dodaj"
 
-#: src/contents/ui/SetupPassword.qml:22 src/contents/ui/UnlockAccounts.qml:22
+#: src/contents/ui/SetupPassword.qml:21 src/contents/ui/UnlockAccounts.qml:21
 #, kde-format
 msgctxt "@title:window"
 msgid "Password"
 msgstr "Geslo"
 
-#: src/contents/ui/SetupPassword.qml:28
+#: src/contents/ui/SetupPassword.qml:27
 #, kde-format
 msgid "Failed to set up your password"
 msgstr "Gesla ni bilo mogoče nastaviti"
@@ -369,19 +485,19 @@ msgstr "Gesla ni bilo mogoče nastaviti"
 msgid "Choose a password to protect your accounts"
 msgstr "Izberite geslo za zaščito vaših računov"
 
-#: src/contents/ui/SetupPassword.qml:49
+#: src/contents/ui/SetupPassword.qml:48
 #, kde-format
 msgctxt "@label:textbox"
 msgid "New Password:"
 msgstr "Novo geslo:"
 
-#: src/contents/ui/SetupPassword.qml:60
+#: src/contents/ui/SetupPassword.qml:61
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Verify password:"
 msgstr "Potrdi geslo:"
 
-#: src/contents/ui/SetupPassword.qml:68
+#: src/contents/ui/SetupPassword.qml:72
 #, kde-format
 msgctxt "@action:button"
 msgid "Apply"
@@ -429,7 +545,7 @@ msgctxt "@option:radio"
 msgid "SHA-512"
 msgstr "SHA-512"
 
-#: src/contents/ui/UnlockAccounts.qml:26
+#: src/contents/ui/UnlockAccounts.qml:25
 #, kde-format
 msgid "Failed to unlock your accounts"
 msgstr "Odklepanje vaših računov ni uspelo"
@@ -439,24 +555,33 @@ msgstr "Odklepanje vaših računov ni us
 msgid "Please provide the password to unlock your accounts"
 msgstr "Prosimo vnesite geslo, da odklenemo vaše račune"
 
-#: src/contents/ui/UnlockAccounts.qml:50
-#, kde-format
-msgctxt "@label:textbox"
-msgid "Password:"
-msgstr "Geslo:"
-
-#: src/contents/ui/UnlockAccounts.qml:59
+#: src/contents/ui/UnlockAccounts.qml:61
 #, kde-format
 msgctxt "@action:button"
 msgid "Unlock"
 msgstr "Odkleni"
 
-#: src/main.cpp:67
+#: src/main.cpp:70
 #, kde-format
 msgctxt "@title"
 msgid "Keysmith"
 msgstr "Keysmith"
 
+#: src/main.cpp:73
+#, kde-format
+msgid "generate two-factor authentication (2FA) tokens"
+msgstr "ustvari žetone dvofaktorske avtentikacije (2FA)"
+
+#: src/main.cpp:76
+#, kde-format
+msgid "Keysmith"
+msgstr "Keysmith"
+
+#: src/main.cpp:80
+#, kde-format
+msgid "© 2019 KDE Community"
+msgstr "© 2019 Skupnost KDE"
+
 #~ msgctxt "Button cancelling account removal"
 #~ msgid "Cancel"
 #~ msgstr "Prekliči"
diff -pruN 24.08.1-1/po/sv/keysmith.po 25.03.90-1/po/sv/keysmith.po
--- 24.08.1-1/po/sv/keysmith.po	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/po/sv/keysmith.po	2025-03-27 10:13:04.000000000 +0000
@@ -1,13 +1,13 @@
 # Copyright (C) 2024 This file is copyright:
 # This file is distributed under the same license as the keysmith package.
 #
-# SPDX-FileCopyrightText: 2020, 2021, 2023, 2024 Stefan Asserhäll <stefan.asserhall@gmail.com>
+# SPDX-FileCopyrightText: 2020, 2021, 2023, 2024, 2025 Stefan Asserhäll <stefan.asserhall@gmail.com>
 msgid ""
 msgstr ""
 "Project-Id-Version: keysmith\n"
 "Report-Msgid-Bugs-To: https://bugs.kde.org\n"
-"POT-Creation-Date: 2024-05-03 00:40+0000\n"
-"PO-Revision-Date: 2024-06-18 19:44+0200\n"
+"POT-Creation-Date: 2025-02-09 00:43+0000\n"
+"PO-Revision-Date: 2025-01-15 17:49+0100\n"
 "Last-Translator: Stefan Asserhäll <stefan.asserhall@gmail.com>\n"
 "Language-Team: Swedish <kde-i18n-doc@kde.org>\n"
 "Language: sv\n"
@@ -15,7 +15,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Lokalize 23.08.5\n"
+"X-Generator: Lokalize 24.12.0\n"
 
 #: src/app/cli.cpp:133
 #, kde-format
@@ -26,13 +26,13 @@ msgstr ""
 "Valfritt konto att lägga till, formaterat som webbadressen otpauth:// (t.ex. "
 "från en QR-kod)"
 
-#: src/app/flows_p.cpp:108 src/app/flows_p.cpp:248
+#: src/app/flows_p.cpp:111 src/app/flows_p.cpp:285
 #, kde-format
 msgctxt "@title:window"
 msgid "Invalid account"
 msgstr "Ogiltigt konto"
 
-#: src/app/flows_p.cpp:109
+#: src/app/flows_p.cpp:112
 #, kde-format
 msgctxt "@info:label"
 msgid ""
@@ -42,7 +42,7 @@ msgstr ""
 "Kontot du försöker lägga till är ogiltigt. Du kan antingen avsluta "
 "programmet eller fortsätta utan att lägga till ett konto."
 
-#: src/app/flows_p.cpp:249
+#: src/app/flows_p.cpp:286
 #, kde-format
 msgctxt "@info:label"
 msgid ""
@@ -146,13 +146,13 @@ msgctxt "Notification shown in a passive
 msgid "Token copied to clipboard!"
 msgstr "Symbol kopierad till klippbordet."
 
-#: src/contents/ui/AccountNameForm.qml:64
+#: src/contents/ui/AccountNameForm.qml:81
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Account name:"
 msgstr "Kontonamn:"
 
-#: src/contents/ui/AccountNameForm.qml:83
+#: src/contents/ui/AccountNameForm.qml:100
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Account issuer:"
@@ -176,12 +176,12 @@ msgctxt "error message shown when loadin
 msgid "Some accounts failed to load."
 msgstr "Inläsning misslyckades för vissa konton."
 
-#: src/contents/ui/AccountsOverview.qml:101
+#: src/contents/ui/AccountsOverview.qml:91
 #, kde-format
 msgid "No accounts added"
 msgstr "Inga konton tillagda"
 
-#: src/contents/ui/AccountsOverview.qml:106
+#: src/contents/ui/AccountsOverview.qml:96
 #, kde-format
 msgctxt ""
 "@action:button add new account, shown instead of overview list when no "
@@ -189,90 +189,103 @@ msgctxt ""
 msgid "Add Account"
 msgstr "Lägg till konto"
 
-#: src/contents/ui/AccountsOverview.qml:172
+#: src/contents/ui/AccountsOverview.qml:163
 #, kde-format
 msgctxt "@action:button add new account, shown in toolbar"
 msgid "Add"
 msgstr "Lägg till"
 
+#: src/contents/ui/AccountsOverview.qml:176
+#, kde-format
+msgctxt "@action:button import accounts, shown in toolbar"
+msgid "Import"
+msgstr "Importera"
+
+#: src/contents/ui/AccountsOverview.qml:189
+#, kde-format
+msgctxt ""
+"@action:button import an account by scanning a QR code, shown in toolbar"
+msgid "Scan QR Code"
+msgstr "Läs av QR-kod"
+
 #: src/contents/ui/AddAccount.qml:22
 #, kde-format
 msgctxt "@title:window"
 msgid "Add new account"
 msgstr "Lägg till nytt konto"
 
-#: src/contents/ui/AddAccount.qml:45
+#: src/contents/ui/AddAccount.qml:50
 #, kde-format
 msgctxt "@action:button cancel and dismiss the add account form"
 msgid "Cancel"
 msgstr "Avbryt"
 
-#: src/contents/ui/AddAccount.qml:52
+#: src/contents/ui/AddAccount.qml:57
 #, kde-format
 msgctxt "@action:button Dismiss the error page and quit Keysmith"
 msgid "Quit"
 msgstr "Avsluta"
 
-#: src/contents/ui/AddAccount.qml:61
+#: src/contents/ui/AddAccount.qml:66
 #, kde-format
 msgctxt "@action:button"
 msgid "Add"
 msgstr "Lägg till"
 
-#: src/contents/ui/AddAccount.qml:81
+#: src/contents/ui/AddAccount.qml:86
 #, kde-format
 msgctxt "@label:chooser"
 msgid "Account type:"
 msgstr "Kontotyp:"
 
-#: src/contents/ui/AddAccount.qml:90
+#: src/contents/ui/AddAccount.qml:95
 #, kde-format
 msgctxt "@option:radio"
 msgid "Time-based OTP"
 msgstr "Tidsbaserad OTP"
 
-#: src/contents/ui/AddAccount.qml:101
+#: src/contents/ui/AddAccount.qml:106
 #, kde-format
 msgctxt "@option:radio"
 msgid "Hash-based OTP"
 msgstr "Kondensatbaserad OTP"
 
-#: src/contents/ui/AddAccount.qml:113
+#: src/contents/ui/AddAccount.qml:118
 #, kde-format
 msgid "Token secret"
 msgstr "Symbolhemlighet"
 
-#: src/contents/ui/AddAccount.qml:116
+#: src/contents/ui/AddAccount.qml:120
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Secret key:"
 msgstr "Hemlig nyckel: "
 
-#: src/contents/ui/AddAccount.qml:132
+#: src/contents/ui/AddAccount.qml:139
 #, kde-format
 msgctxt "Button to reveal form for configuring additional token details"
 msgid "Details"
 msgstr "Detaljinformation"
 
-#: src/contents/ui/AddAccount.qml:140
+#: src/contents/ui/AddAccount.qml:147
 #, kde-format
 msgctxt "@title:group"
 msgid "HOTP Details:"
 msgstr "HOTP-information:"
 
-#: src/contents/ui/AddAccount.qml:153
+#: src/contents/ui/AddAccount.qml:160
 #, kde-format
 msgctxt "@label"
 msgid "TOTP Details:"
 msgstr "TOTP-information:"
 
-#: src/contents/ui/ErrorPage.qml:33
+#: src/contents/ui/ErrorPage.qml:34
 #, kde-format
 msgctxt "@action:button Button to dismiss the error page"
 msgid "Continue"
 msgstr "Fortsätt"
 
-#: src/contents/ui/ErrorPage.qml:40
+#: src/contents/ui/ErrorPage.qml:41
 #, kde-format
 msgctxt "@action:button Dismiss the error page and quit Keysmtih"
 msgid "Quit"
@@ -323,6 +336,109 @@ msgctxt "@label:spinbox"
 msgid "Truncation offset:"
 msgstr "Trunkeringsposition:"
 
+#: src/contents/ui/ImportAccount.qml:21
+#, kde-format
+msgctxt "@title:window"
+msgid "Import Accounts"
+msgstr "Importera konton"
+
+#: src/contents/ui/ImportAccount.qml:52
+#, kde-format
+msgid "Import format"
+msgstr "Importformat"
+
+#. i18n strings
+#: src/contents/ui/ImportAccount.qml:58
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "andOTP Encrypted JSON"
+msgstr "andOTP krypterad JSON"
+
+#: src/contents/ui/ImportAccount.qml:59
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "andOTP Plain JSON"
+msgstr "andOTP vanlig JSON"
+
+#. i18nc("@item:inlistbox", "Aegis Encrypted JSON"), value: Models.ValidatedImportInput.AegisEncryptedJSON});
+#: src/contents/ui/ImportAccount.qml:61
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "Aegis Plain JSON"
+msgstr "Aegis vanlig JSON"
+
+#: src/contents/ui/ImportAccount.qml:62
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "FreeOTP URIs"
+msgstr "FreeOTP-webbadresser"
+
+#: src/contents/ui/ImportAccount.qml:78
+#, kde-format
+msgctxt "@label:chooser"
+msgid "Backup file:"
+msgstr "Säkerhetskopia:"
+
+#: src/contents/ui/ImportAccount.qml:81
+#, kde-format
+msgctxt "@info:placeholder"
+msgid "No file selected"
+msgstr "Ingen fil vald"
+
+#: src/contents/ui/ImportAccount.qml:85
+#, kde-format
+msgctxt "@title:window"
+msgid "Select file"
+msgstr "Välj fil"
+
+#: src/contents/ui/ImportAccount.qml:99
+#, kde-format
+msgctxt "@info:placeholder"
+msgid "Decryption password"
+msgstr "Avkodningslösenord"
+
+#: src/contents/ui/ImportAccount.qml:101 src/contents/ui/UnlockAccounts.qml:49
+#, kde-format
+msgctxt "@label:textbox"
+msgid "Password:"
+msgstr "Lösenord:"
+
+#: src/contents/ui/ImportAccount.qml:112
+#, kde-format
+msgctxt "@action:button"
+msgid "Import"
+msgstr "Importera"
+
+#: src/contents/ui/KeysmithGlobalDrawer.qml:12
+#: src/contents/ui/KeysmithGlobalDrawer.qml:15
+#, kde-format
+msgid "About Keysmith"
+msgstr "Om Keysmith"
+
+#: src/contents/ui/QRScanPage.qml:21
+#, kde-format
+msgctxt "@title"
+msgid "Scan a QR code"
+msgstr "Läs av en QR-kod"
+
+#: src/contents/ui/QRScanPage.qml:31
+#, kde-format
+msgctxt "@action:intoolbar"
+msgid "Select Camera"
+msgstr "Välj kamera"
+
+#: src/contents/ui/QRScanPage.qml:42
+#, kde-format
+msgctxt "@title:dialog"
+msgid "Select Camera"
+msgstr "Välj kamera"
+
+#: src/contents/ui/QRScanPage.qml:61
+#, kde-format
+msgctxt "@action:button"
+msgid "Close"
+msgstr "Stäng"
+
 #: src/contents/ui/RenameAccount.qml:17
 #, kde-format
 msgctxt "@title:window"
@@ -352,13 +468,13 @@ msgstr "Avbryt"
 msgid "Add"
 msgstr "Lägg till"
 
-#: src/contents/ui/SetupPassword.qml:22 src/contents/ui/UnlockAccounts.qml:22
+#: src/contents/ui/SetupPassword.qml:21 src/contents/ui/UnlockAccounts.qml:21
 #, kde-format
 msgctxt "@title:window"
 msgid "Password"
 msgstr "Lösenord"
 
-#: src/contents/ui/SetupPassword.qml:28
+#: src/contents/ui/SetupPassword.qml:27
 #, kde-format
 msgid "Failed to set up your password"
 msgstr "Misslyckades ställa in lösenord"
@@ -368,19 +484,19 @@ msgstr "Misslyckades ställa in lösenor
 msgid "Choose a password to protect your accounts"
 msgstr "Välj ett lösenord för att skydda dina konton"
 
-#: src/contents/ui/SetupPassword.qml:49
+#: src/contents/ui/SetupPassword.qml:48
 #, kde-format
 msgctxt "@label:textbox"
 msgid "New Password:"
 msgstr "Nytt lösenord:"
 
-#: src/contents/ui/SetupPassword.qml:60
+#: src/contents/ui/SetupPassword.qml:61
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Verify password:"
 msgstr "Verifiera lösenord:"
 
-#: src/contents/ui/SetupPassword.qml:68
+#: src/contents/ui/SetupPassword.qml:72
 #, kde-format
 msgctxt "@action:button"
 msgid "Apply"
@@ -428,7 +544,7 @@ msgctxt "@option:radio"
 msgid "SHA-512"
 msgstr "SHA-512"
 
-#: src/contents/ui/UnlockAccounts.qml:26
+#: src/contents/ui/UnlockAccounts.qml:25
 #, kde-format
 msgid "Failed to unlock your accounts"
 msgstr "Misslyckades låsa upp konton"
@@ -438,24 +554,33 @@ msgstr "Misslyckades låsa upp konton"
 msgid "Please provide the password to unlock your accounts"
 msgstr "Ange lösenordet för att låsa upp dina konton"
 
-#: src/contents/ui/UnlockAccounts.qml:50
-#, kde-format
-msgctxt "@label:textbox"
-msgid "Password:"
-msgstr "Lösenord:"
-
-#: src/contents/ui/UnlockAccounts.qml:59
+#: src/contents/ui/UnlockAccounts.qml:61
 #, kde-format
 msgctxt "@action:button"
 msgid "Unlock"
 msgstr "Lås upp"
 
-#: src/main.cpp:67
+#: src/main.cpp:70
 #, kde-format
 msgctxt "@title"
 msgid "Keysmith"
 msgstr "Keysmith"
 
+#: src/main.cpp:73
+#, kde-format
+msgid "generate two-factor authentication (2FA) tokens"
+msgstr "generera symboler för tvåfaktorsbehörighet (2FA)"
+
+#: src/main.cpp:76
+#, kde-format
+msgid "Keysmith"
+msgstr "Keysmith"
+
+#: src/main.cpp:80
+#, kde-format
+msgid "© 2019 KDE Community"
+msgstr "© 2019 KDE-gemenskapen"
+
 #~ msgctxt "Button cancelling account removal"
 #~ msgid "Cancel"
 #~ msgstr "Avbryt"
diff -pruN 24.08.1-1/po/tr/keysmith.po 25.03.90-1/po/tr/keysmith.po
--- 24.08.1-1/po/tr/keysmith.po	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/po/tr/keysmith.po	2025-03-27 10:13:04.000000000 +0000
@@ -1,13 +1,13 @@
 # Copyright (C) 2023 This file is copyright:
 # This file is distributed under the same license as the keysmith package.
 #
-# SPDX-FileCopyrightText: 2022, 2023, 2024 Emir SARI <emir_sari@icloud.com>
+# SPDX-FileCopyrightText: 2022, 2023, 2024, 2025 Emir SARI <emir_sari@icloud.com>
 msgid ""
 msgstr ""
 "Project-Id-Version: keysmith\n"
 "Report-Msgid-Bugs-To: https://bugs.kde.org\n"
-"POT-Creation-Date: 2024-05-03 00:40+0000\n"
-"PO-Revision-Date: 2024-03-12 13:37+0300\n"
+"POT-Creation-Date: 2025-02-09 00:43+0000\n"
+"PO-Revision-Date: 2025-01-14 16:04+0300\n"
 "Last-Translator: Emir SARI <emir_sari@icloud.com>\n"
 "Language-Team: Turkish <kde-l10n-tr@kde.org>\n"
 "Language: tr\n"
@@ -15,7 +15,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n > 1);\n"
-"X-Generator: Lokalize 24.02.0\n"
+"X-Generator: Lokalize 25.03.70\n"
 
 #: src/app/cli.cpp:133
 #, kde-format
@@ -26,13 +26,13 @@ msgstr ""
 "otpauth:// URI olarak biçimlendirilmiş (örn. kare kod) eklenecek isteğe "
 "bağlı hesap"
 
-#: src/app/flows_p.cpp:108 src/app/flows_p.cpp:248
+#: src/app/flows_p.cpp:111 src/app/flows_p.cpp:285
 #, kde-format
 msgctxt "@title:window"
 msgid "Invalid account"
 msgstr "Geçersiz Hesap"
 
-#: src/app/flows_p.cpp:109
+#: src/app/flows_p.cpp:112
 #, kde-format
 msgctxt "@info:label"
 msgid ""
@@ -42,7 +42,7 @@ msgstr ""
 "Eklemeye çalıştığınız hesap geçersiz. Uygulamadan çıkabilir veya hesap "
 "eklemeden sürdürebilirsiniz."
 
-#: src/app/flows_p.cpp:249
+#: src/app/flows_p.cpp:286
 #, kde-format
 msgctxt "@info:label"
 msgid ""
@@ -145,13 +145,13 @@ msgctxt "Notification shown in a passive
 msgid "Token copied to clipboard!"
 msgstr "Jeton panoya kopyalandı!"
 
-#: src/contents/ui/AccountNameForm.qml:64
+#: src/contents/ui/AccountNameForm.qml:81
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Account name:"
 msgstr "Hesap adı:"
 
-#: src/contents/ui/AccountNameForm.qml:83
+#: src/contents/ui/AccountNameForm.qml:100
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Account issuer:"
@@ -175,12 +175,12 @@ msgctxt "error message shown when loadin
 msgid "Some accounts failed to load."
 msgstr "Bazı hesaplar yüklenemedi."
 
-#: src/contents/ui/AccountsOverview.qml:101
+#: src/contents/ui/AccountsOverview.qml:91
 #, kde-format
 msgid "No accounts added"
 msgstr "Eklenen hesap yok"
 
-#: src/contents/ui/AccountsOverview.qml:106
+#: src/contents/ui/AccountsOverview.qml:96
 #, kde-format
 msgctxt ""
 "@action:button add new account, shown instead of overview list when no "
@@ -188,90 +188,103 @@ msgctxt ""
 msgid "Add Account"
 msgstr "Hesap Ekle"
 
-#: src/contents/ui/AccountsOverview.qml:172
+#: src/contents/ui/AccountsOverview.qml:163
 #, kde-format
 msgctxt "@action:button add new account, shown in toolbar"
 msgid "Add"
 msgstr "Ekle"
 
+#: src/contents/ui/AccountsOverview.qml:176
+#, kde-format
+msgctxt "@action:button import accounts, shown in toolbar"
+msgid "Import"
+msgstr "İçe Aktar"
+
+#: src/contents/ui/AccountsOverview.qml:189
+#, kde-format
+msgctxt ""
+"@action:button import an account by scanning a QR code, shown in toolbar"
+msgid "Scan QR Code"
+msgstr "Kare Kod Tara"
+
 #: src/contents/ui/AddAccount.qml:22
 #, kde-format
 msgctxt "@title:window"
 msgid "Add new account"
 msgstr "Yeni Hesap Ekle"
 
-#: src/contents/ui/AddAccount.qml:45
+#: src/contents/ui/AddAccount.qml:50
 #, kde-format
 msgctxt "@action:button cancel and dismiss the add account form"
 msgid "Cancel"
 msgstr "İptal"
 
-#: src/contents/ui/AddAccount.qml:52
+#: src/contents/ui/AddAccount.qml:57
 #, kde-format
 msgctxt "@action:button Dismiss the error page and quit Keysmith"
 msgid "Quit"
 msgstr "Çık"
 
-#: src/contents/ui/AddAccount.qml:61
+#: src/contents/ui/AddAccount.qml:66
 #, kde-format
 msgctxt "@action:button"
 msgid "Add"
 msgstr "Ekle"
 
-#: src/contents/ui/AddAccount.qml:81
+#: src/contents/ui/AddAccount.qml:86
 #, kde-format
 msgctxt "@label:chooser"
 msgid "Account type:"
 msgstr "Hesap türü:"
 
-#: src/contents/ui/AddAccount.qml:90
+#: src/contents/ui/AddAccount.qml:95
 #, kde-format
 msgctxt "@option:radio"
 msgid "Time-based OTP"
 msgstr "Zaman tabanlı tek kerelik parola"
 
-#: src/contents/ui/AddAccount.qml:101
+#: src/contents/ui/AddAccount.qml:106
 #, kde-format
 msgctxt "@option:radio"
 msgid "Hash-based OTP"
 msgstr "Sağlama tabanlı tek kerelik parola"
 
-#: src/contents/ui/AddAccount.qml:113
+#: src/contents/ui/AddAccount.qml:118
 #, kde-format
 msgid "Token secret"
 msgstr "Jeton gizi"
 
-#: src/contents/ui/AddAccount.qml:116
+#: src/contents/ui/AddAccount.qml:120
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Secret key:"
 msgstr "Gizli anahtar:"
 
-#: src/contents/ui/AddAccount.qml:132
+#: src/contents/ui/AddAccount.qml:139
 #, kde-format
 msgctxt "Button to reveal form for configuring additional token details"
 msgid "Details"
 msgstr "Ayrıntılar"
 
-#: src/contents/ui/AddAccount.qml:140
+#: src/contents/ui/AddAccount.qml:147
 #, kde-format
 msgctxt "@title:group"
 msgid "HOTP Details:"
 msgstr "HOTP ayrıntıları:"
 
-#: src/contents/ui/AddAccount.qml:153
+#: src/contents/ui/AddAccount.qml:160
 #, kde-format
 msgctxt "@label"
 msgid "TOTP Details:"
 msgstr "TOTP ayrıntıları:"
 
-#: src/contents/ui/ErrorPage.qml:33
+#: src/contents/ui/ErrorPage.qml:34
 #, kde-format
 msgctxt "@action:button Button to dismiss the error page"
 msgid "Continue"
 msgstr "Sürdür"
 
-#: src/contents/ui/ErrorPage.qml:40
+#: src/contents/ui/ErrorPage.qml:41
 #, kde-format
 msgctxt "@action:button Dismiss the error page and quit Keysmtih"
 msgid "Quit"
@@ -322,6 +335,109 @@ msgctxt "@label:spinbox"
 msgid "Truncation offset:"
 msgstr "Kısaltma ofseti:"
 
+#: src/contents/ui/ImportAccount.qml:21
+#, kde-format
+msgctxt "@title:window"
+msgid "Import Accounts"
+msgstr "Hesaplar İçe Aktar"
+
+#: src/contents/ui/ImportAccount.qml:52
+#, kde-format
+msgid "Import format"
+msgstr "İçe aktarma biçimi"
+
+#. i18n strings
+#: src/contents/ui/ImportAccount.qml:58
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "andOTP Encrypted JSON"
+msgstr "andOTP şifreli JSON"
+
+#: src/contents/ui/ImportAccount.qml:59
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "andOTP Plain JSON"
+msgstr "andOTP düz JSON"
+
+#. i18nc("@item:inlistbox", "Aegis Encrypted JSON"), value: Models.ValidatedImportInput.AegisEncryptedJSON});
+#: src/contents/ui/ImportAccount.qml:61
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "Aegis Plain JSON"
+msgstr "Aegis düz JSON"
+
+#: src/contents/ui/ImportAccount.qml:62
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "FreeOTP URIs"
+msgstr "FreeOTP URI’leri"
+
+#: src/contents/ui/ImportAccount.qml:78
+#, kde-format
+msgctxt "@label:chooser"
+msgid "Backup file:"
+msgstr "Yedek dosyası:"
+
+#: src/contents/ui/ImportAccount.qml:81
+#, kde-format
+msgctxt "@info:placeholder"
+msgid "No file selected"
+msgstr "Seçili dosya yok"
+
+#: src/contents/ui/ImportAccount.qml:85
+#, kde-format
+msgctxt "@title:window"
+msgid "Select file"
+msgstr "Dosya Seç"
+
+#: src/contents/ui/ImportAccount.qml:99
+#, kde-format
+msgctxt "@info:placeholder"
+msgid "Decryption password"
+msgstr "Şifre çözme parolası"
+
+#: src/contents/ui/ImportAccount.qml:101 src/contents/ui/UnlockAccounts.qml:49
+#, kde-format
+msgctxt "@label:textbox"
+msgid "Password:"
+msgstr "Parola:"
+
+#: src/contents/ui/ImportAccount.qml:112
+#, kde-format
+msgctxt "@action:button"
+msgid "Import"
+msgstr "İçe Aktar"
+
+#: src/contents/ui/KeysmithGlobalDrawer.qml:12
+#: src/contents/ui/KeysmithGlobalDrawer.qml:15
+#, kde-format
+msgid "About Keysmith"
+msgstr "Çilingir Hakkında"
+
+#: src/contents/ui/QRScanPage.qml:21
+#, kde-format
+msgctxt "@title"
+msgid "Scan a QR code"
+msgstr "Kare Kod Tara"
+
+#: src/contents/ui/QRScanPage.qml:31
+#, kde-format
+msgctxt "@action:intoolbar"
+msgid "Select Camera"
+msgstr "Kamera Seç"
+
+#: src/contents/ui/QRScanPage.qml:42
+#, kde-format
+msgctxt "@title:dialog"
+msgid "Select Camera"
+msgstr "Kamera Seç"
+
+#: src/contents/ui/QRScanPage.qml:61
+#, kde-format
+msgctxt "@action:button"
+msgid "Close"
+msgstr "Kapat"
+
 #: src/contents/ui/RenameAccount.qml:17
 #, kde-format
 msgctxt "@title:window"
@@ -351,13 +467,13 @@ msgstr "İptal"
 msgid "Add"
 msgstr "Ekle"
 
-#: src/contents/ui/SetupPassword.qml:22 src/contents/ui/UnlockAccounts.qml:22
+#: src/contents/ui/SetupPassword.qml:21 src/contents/ui/UnlockAccounts.qml:21
 #, kde-format
 msgctxt "@title:window"
 msgid "Password"
 msgstr "Parola"
 
-#: src/contents/ui/SetupPassword.qml:28
+#: src/contents/ui/SetupPassword.qml:27
 #, kde-format
 msgid "Failed to set up your password"
 msgstr "Parolanız ayarlanamadı"
@@ -367,19 +483,19 @@ msgstr "Parolanız ayarlanamadı"
 msgid "Choose a password to protect your accounts"
 msgstr "Hesaplarınızı korumak için bir parola seçin"
 
-#: src/contents/ui/SetupPassword.qml:49
+#: src/contents/ui/SetupPassword.qml:48
 #, kde-format
 msgctxt "@label:textbox"
 msgid "New Password:"
 msgstr "Yeni parola:"
 
-#: src/contents/ui/SetupPassword.qml:60
+#: src/contents/ui/SetupPassword.qml:61
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Verify password:"
 msgstr "Parolayı doğrula:"
 
-#: src/contents/ui/SetupPassword.qml:68
+#: src/contents/ui/SetupPassword.qml:72
 #, kde-format
 msgctxt "@action:button"
 msgid "Apply"
@@ -427,7 +543,7 @@ msgctxt "@option:radio"
 msgid "SHA-512"
 msgstr "SHA-512"
 
-#: src/contents/ui/UnlockAccounts.qml:26
+#: src/contents/ui/UnlockAccounts.qml:25
 #, kde-format
 msgid "Failed to unlock your accounts"
 msgstr "Hesaplarınızın kilidi açılamadı"
@@ -437,24 +553,33 @@ msgstr "Hesaplarınızın kilidi açıla
 msgid "Please provide the password to unlock your accounts"
 msgstr "Hesaplarınızın kilidini açmak için parolayı girin"
 
-#: src/contents/ui/UnlockAccounts.qml:50
-#, kde-format
-msgctxt "@label:textbox"
-msgid "Password:"
-msgstr "Parola:"
-
-#: src/contents/ui/UnlockAccounts.qml:59
+#: src/contents/ui/UnlockAccounts.qml:61
 #, kde-format
 msgctxt "@action:button"
 msgid "Unlock"
 msgstr "Kilidi Aç"
 
-#: src/main.cpp:67
+#: src/main.cpp:70
 #, kde-format
 msgctxt "@title"
 msgid "Keysmith"
 msgstr "Çilingir"
 
+#: src/main.cpp:73
+#, kde-format
+msgid "generate two-factor authentication (2FA) tokens"
+msgstr "İki aşamalı kimlik doğrulama (2FA) jetonları üretin"
+
+#: src/main.cpp:76
+#, kde-format
+msgid "Keysmith"
+msgstr "Çilingir"
+
+#: src/main.cpp:80
+#, kde-format
+msgid "© 2019 KDE Community"
+msgstr "© 2019 KDE Topluluğu"
+
 #~ msgctxt "Button cancelling account removal"
 #~ msgid "Cancel"
 #~ msgstr "İptal"
diff -pruN 24.08.1-1/po/uk/keysmith.po 25.03.90-1/po/uk/keysmith.po
--- 24.08.1-1/po/uk/keysmith.po	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/po/uk/keysmith.po	2025-03-27 10:13:04.000000000 +0000
@@ -3,22 +3,22 @@
 # This file is distributed under the license LGPL version 2.1 or
 # version 3 or later versions approved by the membership of KDE e.V.
 #
-# Yuri Chornoivan <yurchor@ukr.net>, 2020, 2021, 2023, 2024.
+# Yuri Chornoivan <yurchor@ukr.net>, 2020, 2021, 2023, 2024, 2025.
 msgid ""
 msgstr ""
 "Project-Id-Version: keysmith\n"
 "Report-Msgid-Bugs-To: https://bugs.kde.org\n"
-"POT-Creation-Date: 2024-05-03 00:40+0000\n"
-"PO-Revision-Date: 2024-01-13 09:48+0200\n"
+"POT-Creation-Date: 2025-02-09 00:43+0000\n"
+"PO-Revision-Date: 2025-01-14 18:20+0200\n"
 "Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
-"Language-Team: Ukrainian <kde-i18n-uk@kde.org>\n"
+"Language-Team: Ukrainian <trans-uk@lists.fedoraproject.org>\n"
 "Language: uk\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n"
 "%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-"X-Generator: Lokalize 23.04.1\n"
+"X-Generator: Lokalize 23.04.3\n"
 
 #: src/app/cli.cpp:133
 #, kde-format
@@ -29,13 +29,13 @@ msgstr ""
 "Необов'язковий обліковий запис для додавання; формат адреси: otpauth:// "
 "(наприклад, з QR-коду)"
 
-#: src/app/flows_p.cpp:108 src/app/flows_p.cpp:248
+#: src/app/flows_p.cpp:111 src/app/flows_p.cpp:285
 #, kde-format
 msgctxt "@title:window"
 msgid "Invalid account"
 msgstr "Некоректний обліковий запис"
 
-#: src/app/flows_p.cpp:109
+#: src/app/flows_p.cpp:112
 #, kde-format
 msgctxt "@info:label"
 msgid ""
@@ -45,7 +45,7 @@ msgstr ""
 "Обліковий запис, який ви намагаєтеся додати, є некоректним. Вам слід або "
 "вийти з програми, або продовжити без додавання облікового запису."
 
-#: src/app/flows_p.cpp:249
+#: src/app/flows_p.cpp:286
 #, kde-format
 msgctxt "@info:label"
 msgid ""
@@ -151,13 +151,13 @@ msgctxt "Notification shown in a passive
 msgid "Token copied to clipboard!"
 msgstr "Жетон скопійовано до буфера обміну даними!"
 
-#: src/contents/ui/AccountNameForm.qml:64
+#: src/contents/ui/AccountNameForm.qml:81
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Account name:"
 msgstr "Назва облікового запису:"
 
-#: src/contents/ui/AccountNameForm.qml:83
+#: src/contents/ui/AccountNameForm.qml:100
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Account issuer:"
@@ -181,12 +181,12 @@ msgctxt "error message shown when loadin
 msgid "Some accounts failed to load."
 msgstr "Не вдалося завантажити деякі облікові записи."
 
-#: src/contents/ui/AccountsOverview.qml:101
+#: src/contents/ui/AccountsOverview.qml:91
 #, kde-format
 msgid "No accounts added"
 msgstr "Не додано жодного облікового запису"
 
-#: src/contents/ui/AccountsOverview.qml:106
+#: src/contents/ui/AccountsOverview.qml:96
 #, kde-format
 msgctxt ""
 "@action:button add new account, shown instead of overview list when no "
@@ -194,90 +194,103 @@ msgctxt ""
 msgid "Add Account"
 msgstr "Додати обліковий запис"
 
-#: src/contents/ui/AccountsOverview.qml:172
+#: src/contents/ui/AccountsOverview.qml:163
 #, kde-format
 msgctxt "@action:button add new account, shown in toolbar"
 msgid "Add"
 msgstr "Додати"
 
+#: src/contents/ui/AccountsOverview.qml:176
+#, kde-format
+msgctxt "@action:button import accounts, shown in toolbar"
+msgid "Import"
+msgstr "Імпорт"
+
+#: src/contents/ui/AccountsOverview.qml:189
+#, kde-format
+msgctxt ""
+"@action:button import an account by scanning a QR code, shown in toolbar"
+msgid "Scan QR Code"
+msgstr "Сканувати QR-код"
+
 #: src/contents/ui/AddAccount.qml:22
 #, kde-format
 msgctxt "@title:window"
 msgid "Add new account"
 msgstr "Додати новий обліковий запис"
 
-#: src/contents/ui/AddAccount.qml:45
+#: src/contents/ui/AddAccount.qml:50
 #, kde-format
 msgctxt "@action:button cancel and dismiss the add account form"
 msgid "Cancel"
 msgstr "Скасувати"
 
-#: src/contents/ui/AddAccount.qml:52
+#: src/contents/ui/AddAccount.qml:57
 #, kde-format
 msgctxt "@action:button Dismiss the error page and quit Keysmith"
 msgid "Quit"
 msgstr "Вийти"
 
-#: src/contents/ui/AddAccount.qml:61
+#: src/contents/ui/AddAccount.qml:66
 #, kde-format
 msgctxt "@action:button"
 msgid "Add"
 msgstr "Додати"
 
-#: src/contents/ui/AddAccount.qml:81
+#: src/contents/ui/AddAccount.qml:86
 #, kde-format
 msgctxt "@label:chooser"
 msgid "Account type:"
 msgstr "Тип облікового запису:"
 
-#: src/contents/ui/AddAccount.qml:90
+#: src/contents/ui/AddAccount.qml:95
 #, kde-format
 msgctxt "@option:radio"
 msgid "Time-based OTP"
 msgstr "OTP на основі часових даних"
 
-#: src/contents/ui/AddAccount.qml:101
+#: src/contents/ui/AddAccount.qml:106
 #, kde-format
 msgctxt "@option:radio"
 msgid "Hash-based OTP"
 msgstr "OTP на основі хешів"
 
-#: src/contents/ui/AddAccount.qml:113
+#: src/contents/ui/AddAccount.qml:118
 #, kde-format
 msgid "Token secret"
 msgstr "Захист ключа"
 
-#: src/contents/ui/AddAccount.qml:116
+#: src/contents/ui/AddAccount.qml:120
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Secret key:"
 msgstr "Закритий ключ: "
 
-#: src/contents/ui/AddAccount.qml:132
+#: src/contents/ui/AddAccount.qml:139
 #, kde-format
 msgctxt "Button to reveal form for configuring additional token details"
 msgid "Details"
 msgstr "Подробиці"
 
-#: src/contents/ui/AddAccount.qml:140
+#: src/contents/ui/AddAccount.qml:147
 #, kde-format
 msgctxt "@title:group"
 msgid "HOTP Details:"
 msgstr "Подробиці щодо HOTP:"
 
-#: src/contents/ui/AddAccount.qml:153
+#: src/contents/ui/AddAccount.qml:160
 #, kde-format
 msgctxt "@label"
 msgid "TOTP Details:"
 msgstr "Подробиці щодо TOTP:"
 
-#: src/contents/ui/ErrorPage.qml:33
+#: src/contents/ui/ErrorPage.qml:34
 #, kde-format
 msgctxt "@action:button Button to dismiss the error page"
 msgid "Continue"
 msgstr "Продовжити"
 
-#: src/contents/ui/ErrorPage.qml:40
+#: src/contents/ui/ErrorPage.qml:41
 #, kde-format
 msgctxt "@action:button Dismiss the error page and quit Keysmtih"
 msgid "Quit"
@@ -328,6 +341,109 @@ msgctxt "@label:spinbox"
 msgid "Truncation offset:"
 msgstr "Відступ обрізання:"
 
+#: src/contents/ui/ImportAccount.qml:21
+#, kde-format
+msgctxt "@title:window"
+msgid "Import Accounts"
+msgstr "Імпортування облікових записів"
+
+#: src/contents/ui/ImportAccount.qml:52
+#, kde-format
+msgid "Import format"
+msgstr "Імпортувати формат"
+
+#. i18n strings
+#: src/contents/ui/ImportAccount.qml:58
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "andOTP Encrypted JSON"
+msgstr "зашифрований JSON andOTP"
+
+#: src/contents/ui/ImportAccount.qml:59
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "andOTP Plain JSON"
+msgstr "простий JSON andOTP"
+
+#. i18nc("@item:inlistbox", "Aegis Encrypted JSON"), value: Models.ValidatedImportInput.AegisEncryptedJSON});
+#: src/contents/ui/ImportAccount.qml:61
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "Aegis Plain JSON"
+msgstr "простий JSON Aegis"
+
+#: src/contents/ui/ImportAccount.qml:62
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "FreeOTP URIs"
+msgstr "адреси FreeOTP"
+
+#: src/contents/ui/ImportAccount.qml:78
+#, kde-format
+msgctxt "@label:chooser"
+msgid "Backup file:"
+msgstr "Файл резервної копії:"
+
+#: src/contents/ui/ImportAccount.qml:81
+#, kde-format
+msgctxt "@info:placeholder"
+msgid "No file selected"
+msgstr "Не вибрано файла"
+
+#: src/contents/ui/ImportAccount.qml:85
+#, kde-format
+msgctxt "@title:window"
+msgid "Select file"
+msgstr "Виберіть файл"
+
+#: src/contents/ui/ImportAccount.qml:99
+#, kde-format
+msgctxt "@info:placeholder"
+msgid "Decryption password"
+msgstr "Пароль розшифрування"
+
+#: src/contents/ui/ImportAccount.qml:101 src/contents/ui/UnlockAccounts.qml:49
+#, kde-format
+msgctxt "@label:textbox"
+msgid "Password:"
+msgstr "Пароль:"
+
+#: src/contents/ui/ImportAccount.qml:112
+#, kde-format
+msgctxt "@action:button"
+msgid "Import"
+msgstr "Імпортувати"
+
+#: src/contents/ui/KeysmithGlobalDrawer.qml:12
+#: src/contents/ui/KeysmithGlobalDrawer.qml:15
+#, kde-format
+msgid "About Keysmith"
+msgstr "Про «Keysmith»"
+
+#: src/contents/ui/QRScanPage.qml:21
+#, kde-format
+msgctxt "@title"
+msgid "Scan a QR code"
+msgstr "Сканувати QR-код"
+
+#: src/contents/ui/QRScanPage.qml:31
+#, kde-format
+msgctxt "@action:intoolbar"
+msgid "Select Camera"
+msgstr "Вибір камери"
+
+#: src/contents/ui/QRScanPage.qml:42
+#, kde-format
+msgctxt "@title:dialog"
+msgid "Select Camera"
+msgstr "Вибір камери"
+
+#: src/contents/ui/QRScanPage.qml:61
+#, kde-format
+msgctxt "@action:button"
+msgid "Close"
+msgstr "Закрити"
+
 #: src/contents/ui/RenameAccount.qml:17
 #, kde-format
 msgctxt "@title:window"
@@ -357,13 +473,13 @@ msgstr "Скасувати"
 msgid "Add"
 msgstr "Додати"
 
-#: src/contents/ui/SetupPassword.qml:22 src/contents/ui/UnlockAccounts.qml:22
+#: src/contents/ui/SetupPassword.qml:21 src/contents/ui/UnlockAccounts.qml:21
 #, kde-format
 msgctxt "@title:window"
 msgid "Password"
 msgstr "Пароль"
 
-#: src/contents/ui/SetupPassword.qml:28
+#: src/contents/ui/SetupPassword.qml:27
 #, kde-format
 msgid "Failed to set up your password"
 msgstr "Не вдалося встановити ваш пароль"
@@ -373,19 +489,19 @@ msgstr "Не вдалося встано
 msgid "Choose a password to protect your accounts"
 msgstr "Виберіть пароль для захисту ваших облікових записів"
 
-#: src/contents/ui/SetupPassword.qml:49
+#: src/contents/ui/SetupPassword.qml:48
 #, kde-format
 msgctxt "@label:textbox"
 msgid "New Password:"
 msgstr "Новий пароль:"
 
-#: src/contents/ui/SetupPassword.qml:60
+#: src/contents/ui/SetupPassword.qml:61
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Verify password:"
 msgstr "Перевірте пароль:"
 
-#: src/contents/ui/SetupPassword.qml:68
+#: src/contents/ui/SetupPassword.qml:72
 #, kde-format
 msgctxt "@action:button"
 msgid "Apply"
@@ -433,7 +549,7 @@ msgctxt "@option:radio"
 msgid "SHA-512"
 msgstr "SHA-512"
 
-#: src/contents/ui/UnlockAccounts.qml:26
+#: src/contents/ui/UnlockAccounts.qml:25
 #, kde-format
 msgid "Failed to unlock your accounts"
 msgstr "Не вдалося розблокувати ваші облікові записи"
@@ -443,24 +559,33 @@ msgstr "Не вдалося розбло
 msgid "Please provide the password to unlock your accounts"
 msgstr "Будь ласка, вкажіть пароль для розблокування ваших облікових записів"
 
-#: src/contents/ui/UnlockAccounts.qml:50
-#, kde-format
-msgctxt "@label:textbox"
-msgid "Password:"
-msgstr "Пароль:"
-
-#: src/contents/ui/UnlockAccounts.qml:59
+#: src/contents/ui/UnlockAccounts.qml:61
 #, kde-format
 msgctxt "@action:button"
 msgid "Unlock"
 msgstr "Розблокувати"
 
-#: src/main.cpp:67
+#: src/main.cpp:70
 #, kde-format
 msgctxt "@title"
 msgid "Keysmith"
 msgstr "Keysmith"
 
+#: src/main.cpp:73
+#, kde-format
+msgid "generate two-factor authentication (2FA) tokens"
+msgstr "створення жетонів двофакторного розпізнавання (2FA)"
+
+#: src/main.cpp:76
+#, kde-format
+msgid "Keysmith"
+msgstr "Keysmith"
+
+#: src/main.cpp:80
+#, kde-format
+msgid "© 2019 KDE Community"
+msgstr "© Спільнота KDE, 2019"
+
 #~ msgctxt "Button cancelling account removal"
 #~ msgid "Cancel"
 #~ msgstr "Скасувати"
diff -pruN 24.08.1-1/po/zh_CN/keysmith.po 25.03.90-1/po/zh_CN/keysmith.po
--- 24.08.1-1/po/zh_CN/keysmith.po	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/po/zh_CN/keysmith.po	2025-03-27 10:13:04.000000000 +0000
@@ -2,7 +2,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: kdeorg\n"
 "Report-Msgid-Bugs-To: https://bugs.kde.org\n"
-"POT-Creation-Date: 2024-05-03 00:40+0000\n"
+"POT-Creation-Date: 2025-02-09 00:43+0000\n"
 "PO-Revision-Date: 2024-04-23 19:24\n"
 "Last-Translator: \n"
 "Language-Team: Chinese Simplified\n"
@@ -24,13 +24,13 @@ msgid ""
 "Optional account to add, formatted as otpauth:// URI (e.g. from a QR code)"
 msgstr "要添加的可选账户，格式为 otpauth:// URI (例如来自二维码)"
 
-#: src/app/flows_p.cpp:108 src/app/flows_p.cpp:248
+#: src/app/flows_p.cpp:111 src/app/flows_p.cpp:285
 #, kde-format
 msgctxt "@title:window"
 msgid "Invalid account"
 msgstr "无效账户"
 
-#: src/app/flows_p.cpp:109
+#: src/app/flows_p.cpp:112
 #, kde-format
 msgctxt "@info:label"
 msgid ""
@@ -40,7 +40,7 @@ msgstr ""
 "您正在尝试添加的账户无效。您可以退出本应用程序，也可以在不添加账户的情况下继"
 "续操作。"
 
-#: src/app/flows_p.cpp:249
+#: src/app/flows_p.cpp:286
 #, kde-format
 msgctxt "@info:label"
 msgid ""
@@ -141,13 +141,13 @@ msgctxt "Notification shown in a passive
 msgid "Token copied to clipboard!"
 msgstr "令牌已复制到剪贴板"
 
-#: src/contents/ui/AccountNameForm.qml:64
+#: src/contents/ui/AccountNameForm.qml:81
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Account name:"
 msgstr "账户名称："
 
-#: src/contents/ui/AccountNameForm.qml:83
+#: src/contents/ui/AccountNameForm.qml:100
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Account issuer:"
@@ -171,12 +171,12 @@ msgctxt "error message shown when loadin
 msgid "Some accounts failed to load."
 msgstr "某些账户加载失败。"
 
-#: src/contents/ui/AccountsOverview.qml:101
+#: src/contents/ui/AccountsOverview.qml:91
 #, kde-format
 msgid "No accounts added"
 msgstr "尚未添加任何账户"
 
-#: src/contents/ui/AccountsOverview.qml:106
+#: src/contents/ui/AccountsOverview.qml:96
 #, kde-format
 msgctxt ""
 "@action:button add new account, shown instead of overview list when no "
@@ -184,90 +184,103 @@ msgctxt ""
 msgid "Add Account"
 msgstr "添加账户"
 
-#: src/contents/ui/AccountsOverview.qml:172
+#: src/contents/ui/AccountsOverview.qml:163
 #, kde-format
 msgctxt "@action:button add new account, shown in toolbar"
 msgid "Add"
 msgstr "添加"
 
+#: src/contents/ui/AccountsOverview.qml:176
+#, kde-format
+msgctxt "@action:button import accounts, shown in toolbar"
+msgid "Import"
+msgstr "导入"
+
+#: src/contents/ui/AccountsOverview.qml:189
+#, kde-format
+msgctxt ""
+"@action:button import an account by scanning a QR code, shown in toolbar"
+msgid "Scan QR Code"
+msgstr "扫描二维码"
+
 #: src/contents/ui/AddAccount.qml:22
 #, kde-format
 msgctxt "@title:window"
 msgid "Add new account"
 msgstr "添加新账户"
 
-#: src/contents/ui/AddAccount.qml:45
+#: src/contents/ui/AddAccount.qml:50
 #, kde-format
 msgctxt "@action:button cancel and dismiss the add account form"
 msgid "Cancel"
 msgstr "取消"
 
-#: src/contents/ui/AddAccount.qml:52
+#: src/contents/ui/AddAccount.qml:57
 #, kde-format
 msgctxt "@action:button Dismiss the error page and quit Keysmith"
 msgid "Quit"
 msgstr "退出"
 
-#: src/contents/ui/AddAccount.qml:61
+#: src/contents/ui/AddAccount.qml:66
 #, kde-format
 msgctxt "@action:button"
 msgid "Add"
 msgstr "添加"
 
-#: src/contents/ui/AddAccount.qml:81
+#: src/contents/ui/AddAccount.qml:86
 #, kde-format
 msgctxt "@label:chooser"
 msgid "Account type:"
 msgstr "账户类型："
 
-#: src/contents/ui/AddAccount.qml:90
+#: src/contents/ui/AddAccount.qml:95
 #, kde-format
 msgctxt "@option:radio"
 msgid "Time-based OTP"
 msgstr "基于时间的 OTP"
 
-#: src/contents/ui/AddAccount.qml:101
+#: src/contents/ui/AddAccount.qml:106
 #, kde-format
 msgctxt "@option:radio"
 msgid "Hash-based OTP"
 msgstr "基于哈希的 OTP"
 
-#: src/contents/ui/AddAccount.qml:113
+#: src/contents/ui/AddAccount.qml:118
 #, kde-format
 msgid "Token secret"
 msgstr "令牌密钥"
 
-#: src/contents/ui/AddAccount.qml:116
+#: src/contents/ui/AddAccount.qml:120
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Secret key:"
 msgstr "密钥："
 
-#: src/contents/ui/AddAccount.qml:132
+#: src/contents/ui/AddAccount.qml:139
 #, kde-format
 msgctxt "Button to reveal form for configuring additional token details"
 msgid "Details"
 msgstr "详细信息"
 
-#: src/contents/ui/AddAccount.qml:140
+#: src/contents/ui/AddAccount.qml:147
 #, kde-format
 msgctxt "@title:group"
 msgid "HOTP Details:"
 msgstr "HOTP 详情："
 
-#: src/contents/ui/AddAccount.qml:153
+#: src/contents/ui/AddAccount.qml:160
 #, kde-format
 msgctxt "@label"
 msgid "TOTP Details:"
 msgstr "TOTP 详情："
 
-#: src/contents/ui/ErrorPage.qml:33
+#: src/contents/ui/ErrorPage.qml:34
 #, kde-format
 msgctxt "@action:button Button to dismiss the error page"
 msgid "Continue"
 msgstr "继续"
 
-#: src/contents/ui/ErrorPage.qml:40
+#: src/contents/ui/ErrorPage.qml:41
 #, kde-format
 msgctxt "@action:button Dismiss the error page and quit Keysmtih"
 msgid "Quit"
@@ -318,6 +331,109 @@ msgctxt "@label:spinbox"
 msgid "Truncation offset:"
 msgstr "截断偏移量："
 
+#: src/contents/ui/ImportAccount.qml:21
+#, kde-format
+msgctxt "@title:window"
+msgid "Import Accounts"
+msgstr "导入账号"
+
+#: src/contents/ui/ImportAccount.qml:52
+#, kde-format
+msgid "Import format"
+msgstr "导入格式"
+
+#. i18n strings
+#: src/contents/ui/ImportAccount.qml:58
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "andOTP Encrypted JSON"
+msgstr "andOTP 加密 JSON"
+
+#: src/contents/ui/ImportAccount.qml:59
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "andOTP Plain JSON"
+msgstr "andOTP 明文 JSON"
+
+#. i18nc("@item:inlistbox", "Aegis Encrypted JSON"), value: Models.ValidatedImportInput.AegisEncryptedJSON});
+#: src/contents/ui/ImportAccount.qml:61
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "Aegis Plain JSON"
+msgstr "Aegis 明文 JSON"
+
+#: src/contents/ui/ImportAccount.qml:62
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "FreeOTP URIs"
+msgstr "FreeOTP URI"
+
+#: src/contents/ui/ImportAccount.qml:78
+#, kde-format
+msgctxt "@label:chooser"
+msgid "Backup file:"
+msgstr "备份文件："
+
+#: src/contents/ui/ImportAccount.qml:81
+#, kde-format
+msgctxt "@info:placeholder"
+msgid "No file selected"
+msgstr "没有选择文件"
+
+#: src/contents/ui/ImportAccount.qml:85
+#, kde-format
+msgctxt "@title:window"
+msgid "Select file"
+msgstr "选择文件"
+
+#: src/contents/ui/ImportAccount.qml:99
+#, kde-format
+msgctxt "@info:placeholder"
+msgid "Decryption password"
+msgstr "解密密码"
+
+#: src/contents/ui/ImportAccount.qml:101 src/contents/ui/UnlockAccounts.qml:49
+#, kde-format
+msgctxt "@label:textbox"
+msgid "Password:"
+msgstr "密码："
+
+#: src/contents/ui/ImportAccount.qml:112
+#, kde-format
+msgctxt "@action:button"
+msgid "Import"
+msgstr "导入"
+
+#: src/contents/ui/KeysmithGlobalDrawer.qml:12
+#: src/contents/ui/KeysmithGlobalDrawer.qml:15
+#, kde-format
+msgid "About Keysmith"
+msgstr "关于 Keysmith"
+
+#: src/contents/ui/QRScanPage.qml:21
+#, kde-format
+msgctxt "@title"
+msgid "Scan a QR code"
+msgstr "扫描二维码"
+
+#: src/contents/ui/QRScanPage.qml:31
+#, kde-format
+msgctxt "@action:intoolbar"
+msgid "Select Camera"
+msgstr "选择摄像头"
+
+#: src/contents/ui/QRScanPage.qml:42
+#, kde-format
+msgctxt "@title:dialog"
+msgid "Select Camera"
+msgstr "选择摄像头"
+
+#: src/contents/ui/QRScanPage.qml:61
+#, kde-format
+msgctxt "@action:button"
+msgid "Close"
+msgstr "关闭"
+
 #: src/contents/ui/RenameAccount.qml:17
 #, kde-format
 msgctxt "@title:window"
@@ -345,13 +461,13 @@ msgstr "取消"
 msgid "Add"
 msgstr "添加"
 
-#: src/contents/ui/SetupPassword.qml:22 src/contents/ui/UnlockAccounts.qml:22
+#: src/contents/ui/SetupPassword.qml:21 src/contents/ui/UnlockAccounts.qml:21
 #, kde-format
 msgctxt "@title:window"
 msgid "Password"
 msgstr "密码"
 
-#: src/contents/ui/SetupPassword.qml:28
+#: src/contents/ui/SetupPassword.qml:27
 #, kde-format
 msgid "Failed to set up your password"
 msgstr "设置密码失败"
@@ -361,19 +477,19 @@ msgstr "设置密码失败"
 msgid "Choose a password to protect your accounts"
 msgstr "输入用于保护您的账户的密码"
 
-#: src/contents/ui/SetupPassword.qml:49
+#: src/contents/ui/SetupPassword.qml:48
 #, kde-format
 msgctxt "@label:textbox"
 msgid "New Password:"
 msgstr "新密码："
 
-#: src/contents/ui/SetupPassword.qml:60
+#: src/contents/ui/SetupPassword.qml:61
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Verify password:"
 msgstr "验证密码："
 
-#: src/contents/ui/SetupPassword.qml:68
+#: src/contents/ui/SetupPassword.qml:72
 #, kde-format
 msgctxt "@action:button"
 msgid "Apply"
@@ -421,7 +537,7 @@ msgctxt "@option:radio"
 msgid "SHA-512"
 msgstr "SHA-512"
 
-#: src/contents/ui/UnlockAccounts.qml:26
+#: src/contents/ui/UnlockAccounts.qml:25
 #, kde-format
 msgid "Failed to unlock your accounts"
 msgstr "无法解锁您的账户"
@@ -431,20 +547,29 @@ msgstr "无法解锁您的账户"
 msgid "Please provide the password to unlock your accounts"
 msgstr "请提供密码以解锁您的账户"
 
-#: src/contents/ui/UnlockAccounts.qml:50
-#, kde-format
-msgctxt "@label:textbox"
-msgid "Password:"
-msgstr "密码："
-
-#: src/contents/ui/UnlockAccounts.qml:59
+#: src/contents/ui/UnlockAccounts.qml:61
 #, kde-format
 msgctxt "@action:button"
 msgid "Unlock"
 msgstr "解锁"
 
-#: src/main.cpp:67
+#: src/main.cpp:70
 #, kde-format
 msgctxt "@title"
 msgid "Keysmith"
 msgstr "Keysmith"
+
+#: src/main.cpp:73
+#, kde-format
+msgid "generate two-factor authentication (2FA) tokens"
+msgstr "生成双重验证 (2FA) 令牌"
+
+#: src/main.cpp:76
+#, kde-format
+msgid "Keysmith"
+msgstr "Keysmith"
+
+#: src/main.cpp:80
+#, kde-format
+msgid "© 2019 KDE Community"
+msgstr "© 2019 KDE Community"
diff -pruN 24.08.1-1/po/zh_TW/keysmith.po 25.03.90-1/po/zh_TW/keysmith.po
--- 24.08.1-1/po/zh_TW/keysmith.po	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/po/zh_TW/keysmith.po	2025-03-27 10:13:04.000000000 +0000
@@ -10,8 +10,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: keysmith\n"
 "Report-Msgid-Bugs-To: https://bugs.kde.org\n"
-"POT-Creation-Date: 2024-05-03 00:40+0000\n"
-"PO-Revision-Date: 2024-01-14 23:51+0900\n"
+"POT-Creation-Date: 2025-02-09 00:43+0000\n"
+"PO-Revision-Date: 2024-12-30 17:05+0900\n"
 "Last-Translator: Kisaragi Hiu <mail@kisaragi-hiu.com>\n"
 "Language-Team: Traditional Chinese <zh-l10n@lists.slat.org>\n"
 "Language: zh_TW\n"
@@ -19,7 +19,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Lokalize 24.01.90\n"
+"X-Generator: Lokalize 24.12.0\n"
 
 #: src/app/cli.cpp:133
 #, kde-format
@@ -29,13 +29,13 @@ msgid ""
 msgstr ""
 "要新增的帳號（選擇性的），格式為 otpauth:// 的 URI（像是從 QR 碼掃來的）"
 
-#: src/app/flows_p.cpp:108 src/app/flows_p.cpp:248
+#: src/app/flows_p.cpp:111 src/app/flows_p.cpp:285
 #, kde-format
 msgctxt "@title:window"
 msgid "Invalid account"
 msgstr "無效帳號"
 
-#: src/app/flows_p.cpp:109
+#: src/app/flows_p.cpp:112
 #, kde-format
 msgctxt "@info:label"
 msgid ""
@@ -44,7 +44,7 @@ msgid ""
 msgstr ""
 "您正嘗試加入的帳號是無效的。您可以離開應用程式，或是繼續使用而不加入帳號。"
 
-#: src/app/flows_p.cpp:249
+#: src/app/flows_p.cpp:286
 #, kde-format
 msgctxt "@info:label"
 msgid ""
@@ -147,13 +147,13 @@ msgctxt "Notification shown in a passive
 msgid "Token copied to clipboard!"
 msgstr "驗證碼已複製到剪貼簿！"
 
-#: src/contents/ui/AccountNameForm.qml:64
+#: src/contents/ui/AccountNameForm.qml:81
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Account name:"
 msgstr "帳號名稱："
 
-#: src/contents/ui/AccountNameForm.qml:83
+#: src/contents/ui/AccountNameForm.qml:100
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Account issuer:"
@@ -177,12 +177,12 @@ msgctxt "error message shown when loadin
 msgid "Some accounts failed to load."
 msgstr "某些帳號載入失敗。"
 
-#: src/contents/ui/AccountsOverview.qml:101
+#: src/contents/ui/AccountsOverview.qml:91
 #, kde-format
 msgid "No accounts added"
 msgstr "尚未新增帳號"
 
-#: src/contents/ui/AccountsOverview.qml:106
+#: src/contents/ui/AccountsOverview.qml:96
 #, kde-format
 msgctxt ""
 "@action:button add new account, shown instead of overview list when no "
@@ -190,90 +190,103 @@ msgctxt ""
 msgid "Add Account"
 msgstr "新增帳號"
 
-#: src/contents/ui/AccountsOverview.qml:172
+#: src/contents/ui/AccountsOverview.qml:163
 #, kde-format
 msgctxt "@action:button add new account, shown in toolbar"
 msgid "Add"
 msgstr "新增"
 
+#: src/contents/ui/AccountsOverview.qml:176
+#, kde-format
+msgctxt "@action:button import accounts, shown in toolbar"
+msgid "Import"
+msgstr "匯入"
+
+#: src/contents/ui/AccountsOverview.qml:189
+#, kde-format
+msgctxt ""
+"@action:button import an account by scanning a QR code, shown in toolbar"
+msgid "Scan QR Code"
+msgstr ""
+
 #: src/contents/ui/AddAccount.qml:22
 #, kde-format
 msgctxt "@title:window"
 msgid "Add new account"
 msgstr "新增帳號"
 
-#: src/contents/ui/AddAccount.qml:45
+#: src/contents/ui/AddAccount.qml:50
 #, kde-format
 msgctxt "@action:button cancel and dismiss the add account form"
 msgid "Cancel"
 msgstr "取消"
 
-#: src/contents/ui/AddAccount.qml:52
+#: src/contents/ui/AddAccount.qml:57
 #, kde-format
 msgctxt "@action:button Dismiss the error page and quit Keysmith"
 msgid "Quit"
 msgstr "離開"
 
-#: src/contents/ui/AddAccount.qml:61
+#: src/contents/ui/AddAccount.qml:66
 #, kde-format
 msgctxt "@action:button"
 msgid "Add"
 msgstr "新增"
 
-#: src/contents/ui/AddAccount.qml:81
+#: src/contents/ui/AddAccount.qml:86
 #, kde-format
 msgctxt "@label:chooser"
 msgid "Account type:"
 msgstr "帳號類型："
 
-#: src/contents/ui/AddAccount.qml:90
+#: src/contents/ui/AddAccount.qml:95
 #, kde-format
 msgctxt "@option:radio"
 msgid "Time-based OTP"
 msgstr "基於時間的一次性密碼 (TOTP)"
 
-#: src/contents/ui/AddAccount.qml:101
+#: src/contents/ui/AddAccount.qml:106
 #, kde-format
 msgctxt "@option:radio"
 msgid "Hash-based OTP"
 msgstr "基於雜湊值的一次性密碼 (HOTP)"
 
-#: src/contents/ui/AddAccount.qml:113
+#: src/contents/ui/AddAccount.qml:118
 #, kde-format
 msgid "Token secret"
 msgstr "驗證碼秘密"
 
-#: src/contents/ui/AddAccount.qml:116
+#: src/contents/ui/AddAccount.qml:120
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Secret key:"
 msgstr "密鑰："
 
-#: src/contents/ui/AddAccount.qml:132
+#: src/contents/ui/AddAccount.qml:139
 #, kde-format
 msgctxt "Button to reveal form for configuring additional token details"
 msgid "Details"
 msgstr "詳細資料設定"
 
-#: src/contents/ui/AddAccount.qml:140
+#: src/contents/ui/AddAccount.qml:147
 #, kde-format
 msgctxt "@title:group"
 msgid "HOTP Details:"
 msgstr "HOTP 詳細資料："
 
-#: src/contents/ui/AddAccount.qml:153
+#: src/contents/ui/AddAccount.qml:160
 #, kde-format
 msgctxt "@label"
 msgid "TOTP Details:"
 msgstr "TOTP 詳細資料："
 
-#: src/contents/ui/ErrorPage.qml:33
+#: src/contents/ui/ErrorPage.qml:34
 #, kde-format
 msgctxt "@action:button Button to dismiss the error page"
 msgid "Continue"
 msgstr "繼續"
 
-#: src/contents/ui/ErrorPage.qml:40
+#: src/contents/ui/ErrorPage.qml:41
 #, kde-format
 msgctxt "@action:button Dismiss the error page and quit Keysmtih"
 msgid "Quit"
@@ -324,6 +337,113 @@ msgctxt "@label:spinbox"
 msgid "Truncation offset:"
 msgstr "截斷位移："
 
+#: src/contents/ui/ImportAccount.qml:21
+#, kde-format
+msgctxt "@title:window"
+msgid "Import Accounts"
+msgstr "匯入帳號"
+
+#: src/contents/ui/ImportAccount.qml:52
+#, kde-format
+msgid "Import format"
+msgstr "匯入格式"
+
+#. i18n strings
+#: src/contents/ui/ImportAccount.qml:58
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "andOTP Encrypted JSON"
+msgstr "andOTP 加密 JSON"
+
+#: src/contents/ui/ImportAccount.qml:59
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "andOTP Plain JSON"
+msgstr "andOTP 純 JSON"
+
+#. i18nc("@item:inlistbox", "Aegis Encrypted JSON"), value: Models.ValidatedImportInput.AegisEncryptedJSON});
+#: src/contents/ui/ImportAccount.qml:61
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "Aegis Plain JSON"
+msgstr "Aegis 純 JSON"
+
+#: src/contents/ui/ImportAccount.qml:62
+#, kde-format
+msgctxt "@item:inlistbox"
+msgid "FreeOTP URIs"
+msgstr "FreeOTP 網址"
+
+#: src/contents/ui/ImportAccount.qml:78
+#, kde-format
+msgctxt "@label:chooser"
+msgid "Backup file:"
+msgstr "備份檔："
+
+#: src/contents/ui/ImportAccount.qml:81
+#, kde-format
+msgctxt "@info:placeholder"
+msgid "No file selected"
+msgstr "沒有選取檔案"
+
+#: src/contents/ui/ImportAccount.qml:85
+#, kde-format
+msgctxt "@title:window"
+msgid "Select file"
+msgstr "選擇檔案"
+
+#: src/contents/ui/ImportAccount.qml:99
+#, kde-format
+msgctxt "@info:placeholder"
+msgid "Decryption password"
+msgstr "解密密碼"
+
+#: src/contents/ui/ImportAccount.qml:101 src/contents/ui/UnlockAccounts.qml:49
+#, kde-format
+msgctxt "@label:textbox"
+msgid "Password:"
+msgstr "密碼："
+
+#: src/contents/ui/ImportAccount.qml:112
+#, kde-format
+msgctxt "@action:button"
+msgid "Import"
+msgstr "匯入"
+
+#: src/contents/ui/KeysmithGlobalDrawer.qml:12
+#: src/contents/ui/KeysmithGlobalDrawer.qml:15
+#, kde-format
+msgid "About Keysmith"
+msgstr "關於 Keysmith"
+
+#: src/contents/ui/QRScanPage.qml:21
+#, kde-format
+msgctxt "@title"
+msgid "Scan a QR code"
+msgstr ""
+
+#: src/contents/ui/QRScanPage.qml:31
+#, fuzzy, kde-format
+#| msgctxt "@title:window"
+#| msgid "Select file"
+msgctxt "@action:intoolbar"
+msgid "Select Camera"
+msgstr "選擇檔案"
+
+#: src/contents/ui/QRScanPage.qml:42
+#, fuzzy, kde-format
+#| msgctxt "@title:window"
+#| msgid "Select file"
+msgctxt "@title:dialog"
+msgid "Select Camera"
+msgstr "選擇檔案"
+
+#: src/contents/ui/QRScanPage.qml:61
+#, kde-format
+msgctxt "@action:button"
+msgid "Close"
+msgstr ""
+
 #: src/contents/ui/RenameAccount.qml:17
 #, kde-format
 msgctxt "@title:window"
@@ -351,13 +471,13 @@ msgstr "取消"
 msgid "Add"
 msgstr "加入"
 
-#: src/contents/ui/SetupPassword.qml:22 src/contents/ui/UnlockAccounts.qml:22
+#: src/contents/ui/SetupPassword.qml:21 src/contents/ui/UnlockAccounts.qml:21
 #, kde-format
 msgctxt "@title:window"
 msgid "Password"
 msgstr "密碼"
 
-#: src/contents/ui/SetupPassword.qml:28
+#: src/contents/ui/SetupPassword.qml:27
 #, kde-format
 msgid "Failed to set up your password"
 msgstr "設定密碼失敗"
@@ -367,19 +487,19 @@ msgstr "設定密碼失敗"
 msgid "Choose a password to protect your accounts"
 msgstr "選擇一個密碼來保護您的各個帳號"
 
-#: src/contents/ui/SetupPassword.qml:49
+#: src/contents/ui/SetupPassword.qml:48
 #, kde-format
 msgctxt "@label:textbox"
 msgid "New Password:"
 msgstr "新密碼："
 
-#: src/contents/ui/SetupPassword.qml:60
+#: src/contents/ui/SetupPassword.qml:61
 #, kde-format
 msgctxt "@label:textbox"
 msgid "Verify password:"
 msgstr "驗證密碼："
 
-#: src/contents/ui/SetupPassword.qml:68
+#: src/contents/ui/SetupPassword.qml:72
 #, kde-format
 msgctxt "@action:button"
 msgid "Apply"
@@ -427,7 +547,7 @@ msgctxt "@option:radio"
 msgid "SHA-512"
 msgstr "SHA-512"
 
-#: src/contents/ui/UnlockAccounts.qml:26
+#: src/contents/ui/UnlockAccounts.qml:25
 #, kde-format
 msgid "Failed to unlock your accounts"
 msgstr "解鎖帳號失敗"
@@ -437,24 +557,33 @@ msgstr "解鎖帳號失敗"
 msgid "Please provide the password to unlock your accounts"
 msgstr "請提供密碼以解鎖您的帳號"
 
-#: src/contents/ui/UnlockAccounts.qml:50
-#, kde-format
-msgctxt "@label:textbox"
-msgid "Password:"
-msgstr "密碼："
-
-#: src/contents/ui/UnlockAccounts.qml:59
+#: src/contents/ui/UnlockAccounts.qml:61
 #, kde-format
 msgctxt "@action:button"
 msgid "Unlock"
 msgstr "解除鎖定"
 
-#: src/main.cpp:67
+#: src/main.cpp:70
 #, kde-format
 msgctxt "@title"
 msgid "Keysmith"
 msgstr "Keysmith"
 
+#: src/main.cpp:73
+#, kde-format
+msgid "generate two-factor authentication (2FA) tokens"
+msgstr "產生兩步驟驗證 (2FA) 權杖"
+
+#: src/main.cpp:76
+#, kde-format
+msgid "Keysmith"
+msgstr "Keysmith"
+
+#: src/main.cpp:80
+#, kde-format
+msgid "© 2019 KDE Community"
+msgstr "© 2019 KDE 社群"
+
 #~ msgctxt "Button cancelling account removal"
 #~ msgid "Cancel"
 #~ msgstr "取消"
diff -pruN 24.08.1-1/snapcraft.yaml 25.03.90-1/snapcraft.yaml
--- 24.08.1-1/snapcraft.yaml	1970-01-01 00:00:00.000000000 +0000
+++ 25.03.90-1/snapcraft.yaml	2025-03-27 10:13:04.000000000 +0000
@@ -0,0 +1,97 @@
+# SPDX-FileCopyrightText: 2025 Scarlett Moore <sgmoore@kde.org>
+#
+# SPDX-License-Identifier: CC0-1.0
+---
+name: keysmith
+confinement: strict
+grade: stable
+base: core24
+adopt-info: keysmith
+apps:
+  keysmith:
+    extensions:
+      - kde-neon-6
+    common-id: org.kde.keysmith.desktop
+    desktop: usr/share/applications/org.kde.keysmith.desktop
+    command: usr/bin/keysmith
+slots:
+  session-dbus-interface:
+    interface: dbus
+    name: org.kde.keysmith
+    bus: session
+package-repositories:
+  - type: apt
+    components:
+      - main
+    suites:
+      - noble
+    key-id: 444DABCF3667D0283F894EDDE6D4736255751E5D
+    url: http://origin.archive.neon.kde.org/user
+    key-server: keyserver.ubuntu.com
+parts:
+  keysmith:
+    parse-info:
+      - usr/share/metainfo/org.kde.keysmith.appdata.xml
+    plugin: cmake
+    source: .
+    source-type: local
+    build-packages:
+      - libsodium-dev
+      - libxkbcommon-dev
+      - libssl-dev
+    stage-packages:
+      - libsodium23
+      - libxkbcommon0
+    cmake-parameters:
+      - -DCMAKE_INSTALL_PREFIX=/usr
+      - -DCMAKE_BUILD_TYPE=Release
+      - -DQT_MAJOR_VERSION=6
+      - -DBUILD_WITH_QT6=ON
+      - -DBUILD_TESTING=OFF
+      - -DCMAKE_INSTALL_SYSCONFDIR=/etc
+      - -DCMAKE_INSTALL_LOCALSTATEDIR=/var
+      - -DCMAKE_EXPORT_NO_PACKAGE_REGISTRY=ON
+      - -DCMAKE_FIND_USE_PACKAGE_REGISTRY=OFF
+      - -DCMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY=ON
+      - -DCMAKE_INSTALL_RUNSTATEDIR=/run
+      - -DCMAKE_SKIP_INSTALL_ALL_DEPENDENCY=ON
+      - -DCMAKE_VERBOSE_MAKEFILE=ON
+      - -DCMAKE_INSTALL_LIBDIR=lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR
+      - --log-level=STATUS
+      - -DCMAKE_LIBRARY_PATH=lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR
+      - -DQMLDIR_FILE=/snap/kf6-core24/current/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/qml
+    prime:
+      - -usr/lib/*/cmake/*
+      - -usr/include/*
+      - -usr/share/ECM/*
+      - -usr/share/man/*
+      - -usr/bin/X11
+      - -usr/lib/gcc/$CRAFT_ARCH_TRIPLET_BUILD_FOR/6.0.0
+      - -usr/lib/aspell/*
+      - -usr/share/lintian
+    build-environment:
+      - QT_PLUGIN_PATH: "$CRAFT_STAGE/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/plugins:/snap/kf6-core24/current/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/plugins:/snap/kde-qt6-core24-sdk/current/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/plugins"
+      - QML2_IMPORT_PATH: "$CRAFT_STAGE/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/qml:/snap/kf6-core24/current/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/qml:/snap/kde-qt6-core24-sdk/current/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/qml"
+      - QT_INSTALL_QML: $QML2_IMPORT_PATH
+      - LD_LIBRARY_PATH: "/snap/mesa-2404/current/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR:$CRAFT_STAGE/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR:/snap/ffmpeg-2404-sdk/current/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR:/snap/kde-qt6-core24-sdk/current/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/libproxy:$LD_LIBRARY_PATH"
+  gpu-2404:
+    after: [keysmith]
+    source: https://github.com/canonical/gpu-snap.git
+    plugin: dump
+    override-prime: |
+      craftctl default
+      ${CRAFT_PART_SRC}/bin/gpu-2404-cleanup mesa-2404
+    prime:
+      - bin/gpu-2404-wrapper
+  cleanup:
+    after:
+      - keysmith
+    plugin: nil
+    build-snaps:
+      - core24
+      - kf6-core24
+    override-prime: |
+      set -eux
+      for snap in "core24" "kf6-core24"; do
+          cd "/snap/$snap/current" && find . -type f,l -exec rm -rf "${CRAFT_PRIME}/{}" \;
+      done
diff -pruN 24.08.1-1/src/CMakeLists.txt 25.03.90-1/src/CMakeLists.txt
--- 24.08.1-1/src/CMakeLists.txt	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/src/CMakeLists.txt	2025-03-27 10:13:04.000000000 +0000
@@ -12,6 +12,7 @@ add_subdirectory(uri)
 add_subdirectory(hmac)
 add_subdirectory(oath)
 add_subdirectory(secrets)
+add_subdirectory(backups)
 add_subdirectory(account)
 add_subdirectory(model)
 add_subdirectory(validators)
@@ -29,12 +30,15 @@ configure_file ("${CMAKE_CURRENT_SOURCE_
 
 add_executable(keysmith main.cpp)
 
+kconfig_add_kcfg_files(keysmith GENERATE_MOC stateconfig.kcfgc)
+
 ecm_add_qml_module(keysmith URI "org.kde.keysmith" VERSION 1.0)
 
 ecm_target_qml_sources(keysmith SOURCES
     contents/ui/Main.qml
     contents/ui/AccountsOverview.qml
     contents/ui/AddAccount.qml
+    contents/ui/ImportAccount.qml
     contents/ui/ErrorPage.qml
     contents/ui/RenameAccount.qml
     contents/ui/AccountNameForm.qml
@@ -46,6 +50,8 @@ ecm_target_qml_sources(keysmith SOURCES
     contents/ui/AccountEntryViewBase.qml
     contents/ui/HOTPAccountEntryView.qml
     contents/ui/TOTPAccountEntryView.qml
+    contents/ui/KeysmithGlobalDrawer.qml
+    contents/ui/QRScanPage.qml
 )
 
 target_link_libraries(keysmith
@@ -56,7 +62,11 @@ target_link_libraries(keysmith
         Qt6::Quick
         Qt6::Svg
         Qt6::QuickControls2
+        KF6::CoreAddons
         KF6::I18n
+        KF6::ConfigCore
+        KF6::ConfigGui
+        KF6::I18nQml
         keysmith_lib
 )
 
@@ -74,6 +84,7 @@ if(ANDROID)
         list-add
         unlock
         lock
+        view-barcode-qr-symbolic
     )
 
     ecm_add_android_apk(keysmith ANDROID_DIR ${CMAKE_SOURCE_DIR}/android)
diff -pruN 24.08.1-1/src/account/account.cpp 25.03.90-1/src/account/account.cpp
--- 24.08.1-1/src/account/account.cpp	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/src/account/account.cpp	2025-03-27 10:13:04.000000000 +0000
@@ -241,7 +241,7 @@ void AccountStorage::accountRemoved(void
     Q_EMIT removed(fullName);
 }
 
-QVector<QString> AccountStorage::accounts(void) const
+QList<QString> AccountStorage::accounts(void) const
 {
     Q_D(const AccountStorage);
     return d->activeAccounts();
diff -pruN 24.08.1-1/src/account/account.h 25.03.90-1/src/account/account.h
--- 24.08.1-1/src/account/account.h	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/src/account/account.h	2025-03-27 10:13:04.000000000 +0000
@@ -6,13 +6,13 @@
 #define ACCOUNTS_ACCOUNT_H
 
 #include <QDateTime>
+#include <QList>
 #include <QObject>
 #include <QScopedPointer>
 #include <QSettings>
 #include <QString>
 #include <QThread>
 #include <QUuid>
-#include <QVector>
 
 #include <functional>
 #include <optional>
@@ -29,9 +29,16 @@ class Account : public QObject
 {
     Q_OBJECT
 public:
-    enum Algorithm { Totp, Hotp };
+    enum Algorithm {
+        Totp,
+        Hotp
+    };
     Q_ENUM(Algorithm)
-    enum Hash { Sha1, Sha256, Sha512 };
+    enum Hash {
+        Sha1,
+        Sha256,
+        Sha512
+    };
     Q_ENUM(Hash)
     explicit Account(AccountPrivate *d, QObject *parent = nullptr);
     QString name(void) const;
@@ -75,7 +82,7 @@ public:
     Account *get(const QString &fullName) const;
     Account *get(const QString &name, const QString &issuer) const;
     AccountSecret *secret(void) const;
-    QVector<QString> accounts(void) const;
+    QList<QString> accounts(void) const;
     void dispose(void);
     void addHotp(const QString &name,
                  const QString &issuer,
diff -pruN 24.08.1-1/src/account/account_p.cpp 25.03.90-1/src/account/account_p.cpp
--- 24.08.1-1/src/account/account_p.cpp	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/src/account/account_p.cpp	2025-03-27 10:13:04.000000000 +0000
@@ -341,9 +341,9 @@ AccountPrivate::AccountPrivate(const std
 {
 }
 
-QVector<QString> AccountStoragePrivate::activeAccounts(void) const
+QList<QString> AccountStoragePrivate::activeAccounts(void) const
 {
-    QVector<QString> active;
+    QList<QString> active;
     if (!m_is_still_open) {
         qCDebug(logger) << "Not returning accounts: account storage no longer open";
         return active;
@@ -448,7 +448,7 @@ void AccountStoragePrivate::removeAccoun
 
     DeleteAccounts *job = new DeleteAccounts(m_settings, ids);
     m_actions->queueAndProceed(job, [&ids, job, this](void) -> void {
-        for (const QUuid &id : qAsConst(ids)) {
+        for (const QUuid &id : std::as_const(ids)) {
             Account *account = m_accounts[id];
             QObject::connect(job, &DeleteAccounts::finished, account, &Account::removed);
         }
diff -pruN 24.08.1-1/src/account/account_p.h 25.03.90-1/src/account/account_p.h
--- 24.08.1-1/src/account/account_p.h	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/src/account/account_p.h	2025-03-27 10:13:04.000000000 +0000
@@ -11,11 +11,11 @@
 
 #include <QDateTime>
 #include <QHash>
+#include <QList>
 #include <QObject>
 #include <QSet>
 #include <QString>
 #include <QUuid>
-#include <QVector>
 
 #include <functional>
 #include <optional>
@@ -116,7 +116,7 @@ public:
     void acceptDisposal(void);
     void unlock(const std::function<void(RequestAccountPassword *)> &handler);
     void load(const std::function<void(LoadAccounts *)> &handler);
-    QVector<QString> activeAccounts(void) const;
+    QList<QString> activeAccounts(void) const;
     bool isStillOpen(void) const;
     bool contains(const QString &account) const;
     SettingsProvider settings(void) const;
diff -pruN 24.08.1-1/src/account/actions_p.h 25.03.90-1/src/account/actions_p.h
--- 24.08.1-1/src/account/actions_p.h	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/src/account/actions_p.h	2025-03-27 10:13:04.000000000 +0000
@@ -8,12 +8,12 @@
 #include "account.h"
 
 #include <QDateTime>
+#include <QList>
 #include <QObject>
 #include <QSet>
 #include <QSettings>
 #include <QString>
 #include <QUuid>
-#include <QVector>
 
 #include <functional>
 #include <optional>
@@ -263,7 +263,7 @@ private:
 
 private:
     AccountJob *m_current;
-    QVector<AccountJob *> m_pending;
+    QList<AccountJob *> m_pending;
 };
 }
 
diff -pruN 24.08.1-1/src/app/flows_p.cpp 25.03.90-1/src/app/flows_p.cpp
--- 24.08.1-1/src/app/flows_p.cpp	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/src/app/flows_p.cpp	2025-03-27 10:13:04.000000000 +0000
@@ -1,9 +1,12 @@
 /*
  * SPDX-License-Identifier: GPL-3.0-or-later
  * SPDX-FileCopyrightText: 2021 Johan Ouwerkerk <jm.ouwerkerk@gmail.com>
+ * SPDX-FileCopyrightText: 2025 Jack Hill <jackhill3103@gmail.com>
  */
 
 #include "flows_p.h"
+
+#include "../model/qr.h"
 #include "cli.h"
 #include "state_p.h"
 #include "vms.h"
@@ -208,6 +211,40 @@ void ManualAddAccountFlow::back(void)
     QTimer::singleShot(0, this, &QObject::deleteLater);
 }
 
+ManualImportAccountFlow::ManualImportAccountFlow(Keysmith *app) :
+    QObject(app), m_app(app), m_input(new model::ImportInput(this))
+{
+    Q_ASSERT_X(app, Q_FUNC_INFO, "should have a Keysmith instance");
+}
+
+void ManualImportAccountFlow::run(void)
+{
+    flowStateOf(m_app)->setFlowRunning(true);
+    overviewStateOf(m_app)->setActionsEnabled(false);
+
+    auto vm = new ImportAccountViewModel(m_input, accountListOf(m_app), false, true);
+    QObject::connect(vm, &ImportAccountViewModel::accepted, this, &ManualImportAccountFlow::onAccepted);
+    QObject::connect(vm, &ImportAccountViewModel::cancelled, this, &ManualImportAccountFlow::back);
+    navigationFor(m_app)->push(Navigation::Page::ImportAccount, vm);
+}
+
+void ManualImportAccountFlow::onAccepted(void)
+{
+    for (model::AccountInput *input : m_input->importAccounts()) {
+        accountListOf(m_app)->addAccount(input);
+    }
+    QTimer::singleShot(0, this, &ManualImportAccountFlow::back);
+}
+
+void ManualImportAccountFlow::back(void)
+{
+    auto vm = new AccountsOverviewViewModel(m_app);
+    navigationFor(m_app)->navigate(Navigation::Page::AccountsOverview, vm);
+    overviewStateOf(m_app)->setActionsEnabled(true);
+    flowStateOf(m_app)->setFlowRunning(false);
+    QTimer::singleShot(0, this, &QObject::deleteLater);
+}
+
 ExternalCommandLineFlow::ExternalCommandLineFlow(Keysmith *app)
     : QObject(app)
     , m_app(app)
@@ -262,6 +299,89 @@ void ExternalCommandLineFlow::back(void)
 {
     auto vm = new AccountsOverviewViewModel(m_app);
     navigationFor(m_app)->navigate(Navigation::Page::AccountsOverview, vm);
+    overviewStateOf(m_app)->setActionsEnabled(true);
+    flowStateOf(m_app)->setFlowRunning(false);
+    QTimer::singleShot(0, this, &QObject::deleteLater);
+}
+
+AddAccountFromQRFlow::AddAccountFromQRFlow(Keysmith *app)
+    : QObject(app)
+    , m_app(app)
+    , m_input(new model::AccountInput(this))
+    , m_scan_vm(new ScanQRViewModel(this))
+{
+    Q_ASSERT_X(app, Q_FUNC_INFO, "should have a Keysmith instance");
+}
+
+void AddAccountFromQRFlow::run(void)
+{
+    flowStateOf(m_app)->setFlowRunning(true);
+    overviewStateOf(m_app)->setActionsEnabled(false);
+
+    QObject::connect(m_scan_vm, &ScanQRViewModel::scanComplete, this, &AddAccountFromQRFlow::scanComplete);
+    QObject::connect(m_scan_vm, &ScanQRViewModel::scanCompleteText, this, &AddAccountFromQRFlow::scanCompleteText);
+    QObject::connect(m_scan_vm, &ScanQRViewModel::cancelled, this, &AddAccountFromQRFlow::back);
+    m_scan_vm->setActive(true);
+    navigationFor(m_app)->push(Navigation::Page::ScanQR, m_scan_vm);
+}
+
+void AddAccountFromQRFlow::scanComplete(const QByteArray &uri)
+{
+    const auto result = model::QrParameters::parse(uri);
+
+    if (!result) {
+        m_scan_vm->setActive(true);
+        return;
+    }
+
+    m_scanned = true;
+    result->populate(m_input);
+    parseComplete();
+}
+
+void AddAccountFromQRFlow::scanCompleteText(const QString &uri)
+{
+    const auto result = model::QrParameters::parse(uri);
+
+    if (!result) {
+        m_scan_vm->setActive(true);
+        return;
+    }
+
+    m_scanned = true;
+    result->populate(m_input);
+    parseComplete();
+}
+
+void AddAccountFromQRFlow::parseComplete(void)
+{
+    auto vm = new AddAccountViewModel(m_input, accountListOf(m_app), false, true);
+    QObject::connect(vm, &AddAccountViewModel::accepted, this, &AddAccountFromQRFlow::onAccepted);
+    QObject::connect(vm, &AddAccountViewModel::cancelled, this, &AddAccountFromQRFlow::back);
+    navigationFor(m_app)->push(Navigation::Page::AddAccount, vm);
+}
+
+void AddAccountFromQRFlow::onAccepted(void)
+{
+    accountListOf(m_app)->addAccount(m_input);
+    QTimer::singleShot(0, this, &AddAccountFromQRFlow::exit);
+}
+
+void AddAccountFromQRFlow::back(void)
+{
+    if (m_scanned) {
+        m_scanned = false;
+        m_scan_vm->setActive(true);
+        navigationFor(m_app)->pop();
+    } else {
+        exit();
+    }
+}
+
+void AddAccountFromQRFlow::exit(void)
+{
+    auto vm = new AccountsOverviewViewModel(m_app);
+    navigationFor(m_app)->navigate(Navigation::Page::AccountsOverview, vm);
     overviewStateOf(m_app)->setActionsEnabled(true);
     flowStateOf(m_app)->setFlowRunning(false);
     QTimer::singleShot(0, this, &QObject::deleteLater);
diff -pruN 24.08.1-1/src/app/flows_p.h 25.03.90-1/src/app/flows_p.h
--- 24.08.1-1/src/app/flows_p.h	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/src/app/flows_p.h	2025-03-27 10:13:04.000000000 +0000
@@ -1,6 +1,7 @@
 /*
  * SPDX-License-Identifier: GPL-3.0-or-later
  * SPDX-FileCopyrightText: 2021 Johan Ouwerkerk <jm.ouwerkerk@gmail.com>
+ * SPDX-FileCopyrightText: 2025 Jack Hill <jackhill3103@gmail.com>
  */
 #ifndef APP_FLOWS_P_H
 #define APP_FLOWS_P_H
@@ -74,6 +75,47 @@ private:
     Keysmith *const m_app;
     model::AccountInput *const m_input;
 };
+
+class ManualImportAccountFlow: public QObject
+{
+    Q_OBJECT
+public:
+    explicit ManualImportAccountFlow(Keysmith *app);
+    void run(void);
+private Q_SLOTS:
+    void back(void);
+    void onAccepted(void);
+private:
+    Keysmith * const m_app;
+    model::ImportInput * const m_input;
+};
+
+class AddAccountFromQRFlow : public QObject
+{
+    Q_OBJECT
+public:
+    explicit AddAccountFromQRFlow(Keysmith *app);
+
+public:
+    void run(void);
+
+private:
+    void startScan(void);
+
+private Q_SLOTS:
+    void scanComplete(const QByteArray &uri);
+    void scanCompleteText(const QString &uri);
+    void parseComplete(void);
+    void onAccepted(void);
+    void back(void);
+    void exit(void);
+
+private:
+    Keysmith *const m_app;
+    model::AccountInput *const m_input;
+    ScanQRViewModel *const m_scan_vm;
+    bool m_scanned = false;
+};
 }
 
 #endif
diff -pruN 24.08.1-1/src/app/keysmith.cpp 25.03.90-1/src/app/keysmith.cpp
--- 24.08.1-1/src/app/keysmith.cpp	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/src/app/keysmith.cpp	2025-03-27 10:13:04.000000000 +0000
@@ -55,6 +55,11 @@ void Navigation::push(Navigation::Page p
     Q_EMIT pushed(page, modelToTransfer);
 }
 
+void Navigation::pop()
+{
+    Q_EMIT popped();
+}
+
 static accounts::AccountStorage *openStorage(void)
 {
     qCDebug(logger) << "Initialising Keysmith account storage...";
diff -pruN 24.08.1-1/src/app/keysmith.h 25.03.90-1/src/app/keysmith.h
--- 24.08.1-1/src/app/keysmith.h	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/src/app/keysmith.h	2025-03-27 10:13:04.000000000 +0000
@@ -20,7 +20,16 @@ class Navigation : public QObject
 {
     Q_OBJECT
 public:
-    enum Page { Error, AddAccount, RenameAccount, AccountsOverview, SetupPassword, UnlockAccounts };
+    enum Page {
+        Error,
+        AddAccount,
+        ImportAccount,
+        RenameAccount,
+        AccountsOverview,
+        SetupPassword,
+        UnlockAccounts,
+        ScanQR,
+    };
     Q_ENUM(Page)
 public:
     explicit Navigation(QQmlEngine *const engine);
@@ -28,9 +37,12 @@ public:
 public Q_SLOTS:
     void push(app::Navigation::Page page, QObject *modelToTransfer);
     void navigate(app::Navigation::Page page, QObject *modelToTransfer);
+    void pop();
+
 Q_SIGNALS:
     void routed(app::Navigation::Page route, QObject *transferred);
     void pushed(app::Navigation::Page route, QObject *transferred);
+    void popped(void);
 
 private:
     QQmlEngine *const m_engine;
diff -pruN 24.08.1-1/src/app/vms.cpp 25.03.90-1/src/app/vms.cpp
--- 24.08.1-1/src/app/vms.cpp	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/src/app/vms.cpp	2025-03-27 10:13:04.000000000 +0000
@@ -41,6 +41,33 @@ bool AddAccountViewModel::quitEnabled(vo
     return m_quitEnabled;
 }
 
+ImportAccountViewModel::ImportAccountViewModel(model::ImportInput *input, model::SimpleAccountListModel *accounts,
+                                               bool quitEnabled, bool validateAvailability, QObject *parent) :
+    QObject(parent), m_input(input), m_accounts(accounts), m_quitEnabled(quitEnabled),
+    m_validateAvailability(validateAvailability)
+{
+}
+
+model::ImportInput * ImportAccountViewModel::input(void) const
+{
+    return m_input;
+}
+
+model::SimpleAccountListModel * ImportAccountViewModel::accounts(void) const
+{
+    return m_accounts;
+}
+
+bool ImportAccountViewModel::validateAvailability(void) const
+{
+    return m_validateAvailability;
+}
+
+bool ImportAccountViewModel::quitEnabled(void) const
+{
+    return m_quitEnabled;
+}
+
 RenameAccountViewModel::RenameAccountViewModel(model::AccountInput *input, model::SimpleAccountListModel *accounts, QObject *parent)
     : QObject(parent)
     , m_input(input)
@@ -129,6 +156,18 @@ void AccountsOverviewViewModel::addNewAc
     flow->run();
 }
 
+void AccountsOverviewViewModel::importAccount(void)
+{
+    auto flow = new ManualImportAccountFlow(m_app);
+    flow->run();
+}
+
+void AccountsOverviewViewModel::scanQRCode(void)
+{
+    auto flow = new AddAccountFromQRFlow(m_app);
+    flow->run();
+}
+
 PasswordViewModel::PasswordViewModel(model::PasswordRequest *request, QObject *parent)
     : QObject(parent)
     , m_failed(false)
@@ -188,6 +227,24 @@ void UnlockAccountsViewModel::unlock(con
         Q_EMIT failedChanged();
     }
 }
+
+ScanQRViewModel::ScanQRViewModel(QObject *parent)
+    : QObject{parent}
+{
+}
+
+bool ScanQRViewModel::active(void) const
+{
+    return m_active;
+}
+
+void ScanQRViewModel::setActive(bool active_)
+{
+    if (m_active != active_) {
+        m_active = active_;
+        Q_EMIT activeChanged();
+    }
+}
 }
 
 #include "moc_vms.cpp"
diff -pruN 24.08.1-1/src/app/vms.h 25.03.90-1/src/app/vms.h
--- 24.08.1-1/src/app/vms.h	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/src/app/vms.h	2025-03-27 10:13:04.000000000 +0000
@@ -82,6 +82,31 @@ private:
     const bool m_quitEnabled;
 };
 
+class ImportAccountViewModel: public QObject
+{
+    Q_OBJECT
+    Q_PROPERTY(model::ImportInput * input READ input CONSTANT)
+    Q_PROPERTY(model::SimpleAccountListModel * accounts READ accounts CONSTANT)
+    Q_PROPERTY(bool validateAvailability READ validateAvailability CONSTANT)
+    Q_PROPERTY(bool quitEnabled READ quitEnabled CONSTANT)
+public:
+    explicit ImportAccountViewModel(model::ImportInput *input, model::SimpleAccountListModel *accounts,
+                                    bool quitEnabled, bool validateAvailability,
+                                    QObject *parent = nullptr);
+    model::ImportInput * input(void) const;
+    model::SimpleAccountListModel * accounts(void) const;
+    bool validateAvailability(void) const;
+    bool quitEnabled(void) const;
+Q_SIGNALS:
+    void cancelled(void);
+    void accepted(void);
+private:
+    model::ImportInput * const m_input;
+    model::SimpleAccountListModel * const m_accounts;
+    const bool m_quitEnabled;
+    const bool m_validateAvailability;
+};
+
 class PasswordViewModel : public QObject
 {
     Q_OBJECT
@@ -132,6 +157,8 @@ public:
     bool actionsEnabled(void) const;
 public Q_SLOTS:
     void addNewAccount(void);
+    void importAccount(void);
+    void scanQRCode(void);
 Q_SIGNALS:
     void actionsEnabledChanged(void);
 
@@ -139,6 +166,26 @@ private:
     Keysmith *const m_app;
     model::SimpleAccountListModel *const m_accounts;
 };
+
+class ScanQRViewModel : public QObject
+{
+    Q_OBJECT
+    Q_PROPERTY(bool active READ active WRITE setActive NOTIFY activeChanged)
+
+public:
+    explicit ScanQRViewModel(QObject *parent = nullptr);
+    [[nodiscard]] bool active(void) const;
+    void setActive(bool active_);
+
+Q_SIGNALS:
+    void activeChanged(void);
+    void scanComplete(const QByteArray &uri);
+    void scanCompleteText(const QString &uri);
+    void cancelled(void);
+
+private:
+    bool m_active = false;
+};
 }
 
 #endif
diff -pruN 24.08.1-1/src/backups/CMakeLists.txt 25.03.90-1/src/backups/CMakeLists.txt
--- 24.08.1-1/src/backups/CMakeLists.txt	1970-01-01 00:00:00.000000000 +0000
+++ 25.03.90-1/src/backups/CMakeLists.txt	2025-03-27 10:13:04.000000000 +0000
@@ -0,0 +1,10 @@
+#
+# SPDX-License-Identifier: BSD-2-Clause
+# SPDX-FileCopyrightText: 2020 Johan Ouwerkerk <jm.ouwerkerk@gmail.com>
+#
+
+set(backup_SRCS backups.cpp)
+
+add_library(backups_lib STATIC ${backup_SRCS})
+
+target_link_libraries(backups_lib Qt::Core OpenSSL::SSL)
diff -pruN 24.08.1-1/src/backups/backups.cpp 25.03.90-1/src/backups/backups.cpp
--- 24.08.1-1/src/backups/backups.cpp	1970-01-01 00:00:00.000000000 +0000
+++ 25.03.90-1/src/backups/backups.cpp	2025-03-27 10:13:04.000000000 +0000
@@ -0,0 +1,107 @@
+/*
+ * SPDX-License-Identifier: GPL-3.0-or-later
+ * SPDX-FileCopyrightText: 2020 Johan Ouwerkerk <jm.ouwerkerk@gmail.com>
+ */
+#include "backups.h"
+
+#include "../logging_p.h"
+
+#include <openssl/evp.h>
+#include <openssl/rand.h>
+
+#include <QDataStream>
+#include <QRandomGenerator>
+
+constexpr auto ANDOTP_ITER_LEN = 4;
+constexpr auto ANDOTP_SALT_LEN = 12;
+constexpr auto ANDOTP_IV_LEN = 12;
+constexpr auto ANDOTP_KEY_LEN = 32;
+constexpr auto ANDOTP_TAG_LEN = 16;
+constexpr auto ANDOTP_SALT_POS = (ANDOTP_SALT_LEN + ANDOTP_ITER_LEN);
+constexpr auto ANDOTP_IV_POS = (ANDOTP_IV_LEN + ANDOTP_SALT_POS);
+
+using namespace Qt::Literals::StringLiterals;
+
+KEYSMITH_LOGGER(logger, ".backups")
+
+namespace backups
+{
+namespace AndOTPVault
+{
+QByteArray decrypt(QByteArrayView data, QByteArrayView password)
+{
+    EVP_CIPHER_CTX *ctx = EVP_CIPHER_CTX_new();
+    if (!ctx) {
+        return {};
+    }
+
+    quint32 iterationCount;
+    QDataStream in(data.left(ANDOTP_ITER_LEN).toByteArray());
+    in.setByteOrder(QDataStream::BigEndian);
+    in >> iterationCount;
+
+    const auto salt = data.mid(ANDOTP_ITER_LEN, ANDOTP_SALT_LEN);
+    const auto iv = data.mid(ANDOTP_SALT_POS, ANDOTP_IV_LEN);
+    const auto ciphertext = data.mid(ANDOTP_IV_POS, data.size() - ANDOTP_IV_POS - ANDOTP_TAG_LEN);
+    const auto tag = data.right(ANDOTP_TAG_LEN);
+
+    QByteArray key;
+    key.resize(ANDOTP_KEY_LEN);
+    if (!PKCS5_PBKDF2_HMAC_SHA1((char *)password.data(),
+                                password.size(),
+                                (unsigned char *)salt.data(),
+                                ANDOTP_SALT_LEN,
+                                iterationCount,
+                                ANDOTP_KEY_LEN,
+                                (unsigned char *)key.data())) {
+        qCWarning(logger) << "Key derivation failed.";
+        EVP_CIPHER_CTX_free(ctx);
+        return {};
+    }
+
+    if (!EVP_DecryptInit_ex(ctx, EVP_aes_256_gcm(), nullptr, nullptr, nullptr)) {
+        qCWarning(logger) << "decrypt init failed.";
+        EVP_CIPHER_CTX_free(ctx);
+        return {};
+    }
+
+    EVP_CIPHER_CTX_set_key_length(ctx, key.size());
+    EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_GCM_SET_IVLEN, iv.size(), nullptr);
+    if (!EVP_DecryptInit_ex(ctx, nullptr, nullptr, (const unsigned char *)(key.data()), (const unsigned char *)(iv.data()))) {
+        EVP_CIPHER_CTX_free(ctx);
+        qCWarning(logger) << "decrypt init failed.";
+        return {};
+    }
+    EVP_CIPHER_CTX_set_padding(ctx, 0);
+
+    int resultLength;
+    QByteArray outUpdate;
+    outUpdate.resize(ciphertext.size() + EVP_CIPHER_CTX_block_size(ctx));
+
+    if (!EVP_DecryptUpdate(ctx, (unsigned char *)outUpdate.data(), &resultLength, (unsigned char *)ciphertext.data(), ciphertext.size())) {
+        EVP_CIPHER_CTX_free(ctx);
+        qCWarning(logger) << "decrypt update failed.";
+        return {};
+    }
+    outUpdate.resize(resultLength);
+
+    if (!EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_GCM_SET_TAG, tag.size(), (unsigned char *)tag.data())) {
+        qCWarning(logger) << "decrypt ctrl failed.";
+        EVP_CIPHER_CTX_free(ctx);
+        return {};
+    }
+
+    QByteArray outFinal;
+    outFinal.resize(EVP_CIPHER_CTX_block_size(ctx));
+    if (!EVP_DecryptFinal_ex(ctx, (unsigned char *)outFinal.data(), &resultLength)) {
+        qCWarning(logger) << "decrypt final failed.";
+        EVP_CIPHER_CTX_free(ctx);
+        return {};
+    }
+    outFinal.resize(resultLength);
+
+    EVP_CIPHER_CTX_free(ctx);
+    return outUpdate + outFinal;
+}
+}
+}
diff -pruN 24.08.1-1/src/backups/backups.h 25.03.90-1/src/backups/backups.h
--- 24.08.1-1/src/backups/backups.h	1970-01-01 00:00:00.000000000 +0000
+++ 25.03.90-1/src/backups/backups.h	2025-03-27 10:13:04.000000000 +0000
@@ -0,0 +1,18 @@
+/*
+ * SPDX-License-Identifier: GPL-3.0-or-later
+ * SPDX-FileCopyrightText: 2020 Johan Ouwerkerk <jm.ouwerkerk@gmail.com>
+ */
+#ifndef BACKUPS_H
+#define BACKUPS_H
+
+#include <QByteArray>
+
+namespace backups
+{
+namespace AndOTPVault
+{
+QByteArray decrypt(QByteArrayView data, QByteArrayView password);
+}
+}
+
+#endif
diff -pruN 24.08.1-1/src/contents/ui/AccountNameForm.qml 25.03.90-1/src/contents/ui/AccountNameForm.qml
--- 24.08.1-1/src/contents/ui/AccountNameForm.qml	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/src/contents/ui/AccountNameForm.qml	2025-03-27 10:13:04.000000000 +0000
@@ -28,8 +28,18 @@ FormCard.FormCard {
         revalidate();
     }
 
+    Component.onCompleted: {
+        doValidation = true;
+    }
+
     property bool acceptable : accountName.acceptableInput && issuerName.acceptableInput
 
+    /**
+     * Property used to delay validation until the fields have been set to their initial values.
+     * Otherwise the validator sets the issuer to an empty string, which overwrites the initial isser.
+     */
+    property bool doValidation: false
+
     /*
      * When accounts are added/removed from the model, the account name and issuer should be revalidated as well.
      * It may have become eligible or in-eligible depending on whether or not other accounts with the same name
@@ -38,21 +48,28 @@ FormCard.FormCard {
      * Unfortunately there seems to be nothing to explicitly trigger revalidation on the text field.
      * Work around is to force revalidation to happen by "editing" the value in the text field(s) directly.
      */
-    data: Connections {
-        target: accounts
-        function onRowsInserted() {
-            revalidate();
-        }
-        function onRowsRemoved() {
-            revalidate();
-        }
-        function onModelReset() {
-            revalidate();
+    data: [
+        Connections {
+            target: accounts
+            function onRowsInserted() {
+                revalidate();
+            }
+            function onRowsRemoved() {
+                revalidate();
+            }
+            function onModelReset() {
+                revalidate();
+            }
+        },
+        Binding {
+            root.validatedInput.issuer: issuerName.text
         }
-    }
+    ]
     function revalidate() {
         // because of how issuer revalidation works, this also implicitly covers the account name as well
-        issuerName.insert(issuerName.text.length, "");
+        if (doValidation) {
+            issuerName.insert(issuerName.text.length, "");
+        }
     }
     function forceActiveFocus() {
         accountName.forceActiveFocus()
@@ -96,7 +113,7 @@ FormCard.FormCard {
              * This signal handler may run before property bindings have been fully (re-)evaluated.
              * First update the account name validator to the correct new issuer value before triggering revalidation.
              */
-            accountNameValidator.issuer = issuerName.text;
+            accountNameValidator.issuer = text;
             accountName.insert(accountName.text.length, "");
             if (acceptableInput) {
                 validatedInput.issuer = text;
diff -pruN 24.08.1-1/src/contents/ui/AccountsOverview.qml 25.03.90-1/src/contents/ui/AccountsOverview.qml
--- 24.08.1-1/src/contents/ui/AccountsOverview.qml	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/src/contents/ui/AccountsOverview.qml	2025-03-27 10:13:04.000000000 +0000
@@ -26,42 +26,32 @@ Kirigami.ScrollablePage {
     property string loadingErrorMessage: i18nc("error message shown when loading accounts from storage failed", "Some accounts failed to load.")
     property string errorMessage: loadingErrorMessage
 
-    header: ColumnLayout {
-        id: column
-        Layout.margins: 0
-        spacing: 0
-        Kirigami.InlineMessage {
-            id: message
-            visible: vm.accounts.error // FIXME : should be managed via vm
-            type: Kirigami.MessageType.Error
-            text: root.errorMessage // FIXME : should be managed via vm
-            Layout.fillWidth: true
-            Layout.margins: Kirigami.Units.smallSpacing
-            /*
-             * There is supposed to be a more Kirigami-way to allow the user to dismiss the error message: showCloseButton
-             * Unfortunately:
-             *
-             *  - Kirigami doesn't really offer a direct API for detecting when the close button is clicked.
-             *    Observing the close button's effect via the visible property works just as well, but it is a bit of a hack.
-             *  - It results in a rather unattractive vertical sizing problem: the close button is rather big for inline text
-             *    This makes the internal horizontal spacing look completely out of proportion with the vertical spacing.
-             *  - The actual click/tap target is only a small fraction of the entire message (banner).
-             *    In this case, making the entire message click/tap target would be much better.
-             *
-             * Solution: add a MouseArea for dismissing the message via click/tap.
-             */
-            MouseArea {
-                anchors.fill: parent
-                onClicked: {
-                    // FIXME : should be managed via vm
-                    vm.accounts.error = false;
-                }
+    header: Kirigami.InlineMessage {
+        id: message
+        visible: vm.accounts.error // FIXME : should be managed via vm
+        type: Kirigami.MessageType.Error
+        position: Kirigami.InlineMessage.Header
+        text: root.errorMessage // FIXME : should be managed via vm
+        /*
+         * There is supposed to be a more Kirigami-way to allow the user to dismiss the error message: showCloseButton
+         * Unfortunately:
+         *
+         *  - Kirigami doesn't really offer a direct API for detecting when the close button is clicked.
+         *    Observing the close button's effect via the visible property works just as well, but it is a bit of a hack.
+         *  - It results in a rather unattractive vertical sizing problem: the close button is rather big for inline text
+         *    This makes the internal horizontal spacing look completely out of proportion with the vertical spacing.
+         *  - The actual click/tap target is only a small fraction of the entire message (banner).
+         *    In this case, making the entire message click/tap target would be much better.
+         *
+         * Solution: add a MouseArea for dismissing the message via click/tap.
+         */
+        MouseArea {
+            anchors.fill: parent
+            onClicked: {
+                // FIXME : should be managed via vm
+                vm.accounts.error = false;
             }
         }
-        Kirigami.Separator {
-            Layout.fillWidth: true
-            visible: vm.accounts.error // FIXME : should be managed via vm
-        }
     }
 
     Component {
@@ -167,17 +157,45 @@ Kirigami.ScrollablePage {
         }
     }
 
-    actions: Kirigami.Action {
-        id: addAction
-        text: i18nc("@action:button add new account, shown in toolbar", "Add")
-        icon.name: "list-add"
-        enabled: vm.actionsEnabled
-        visible: vm.actionsEnabled
-        onTriggered: {
-            // FIXME : should be managed via vm
-            vm.accounts.error = false;
-            root.errorMessage = root.accountErrorMessage;
-            vm.addNewAccount();
+    actions: [
+        Kirigami.Action {
+            id: addAction
+            text: i18nc("@action:button add new account, shown in toolbar", "Add")
+            icon.name: "list-add"
+            enabled: vm.actionsEnabled
+            visible: vm.actionsEnabled
+            onTriggered: {
+                // FIXME : should be managed via vm
+                vm.accounts.error = false;
+                root.errorMessage = root.accountErrorMessage;
+                vm.addNewAccount();
+            }
+        },
+        Kirigami.Action {
+            id: importAction
+            text: i18nc("@action:button import accounts, shown in toolbar", "Import")
+            icon.name: "document-import"
+            enabled: vm.actionsEnabled
+            visible: vm.actionsEnabled
+            onTriggered: {
+                // FIXME : should be managed via vm
+                vm.accounts.error = false;
+                root.errorMessage = root.accountErrorMessage;
+                vm.importAccount();
+            }
+        },
+        Kirigami.Action {
+            id: scanQRCodeAction
+            text: i18nc("@action:button import an account by scanning a QR code, shown in toolbar", "Scan QR Code")
+            icon.name: "view-barcode-qr-symbolic"
+            enabled: vm.actionsEnabled
+            visible: vm.actionsEnabled
+            onTriggered: {
+                // FIXME : should be managed via vm
+                vm.accounts.error = false;
+                root.errorMessage = root.accountErrorMessage;
+                vm.scanQRCode();
+            }
         }
-    }
+    ]
 }
diff -pruN 24.08.1-1/src/contents/ui/AddAccount.qml 25.03.90-1/src/contents/ui/AddAccount.qml
--- 24.08.1-1/src/contents/ui/AddAccount.qml	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/src/contents/ui/AddAccount.qml	2025-03-27 10:13:04.000000000 +0000
@@ -33,6 +33,11 @@ FormCard.FormCardPage {
     topPadding: Kirigami.Units.gridUnit
     bottomPadding: Kirigami.Units.gridUnit
 
+    onBackRequested: event => {
+        event.accepted = true;
+        vm.cancelled();
+    }
+
     data: Connections {
         target: vm.input
         function onTypeChanged() {
@@ -108,11 +113,10 @@ FormCard.FormCardPage {
 
         FormCard.FormDelegateSeparator { below: hotpRadio }
 
-        FormCard.FormTextFieldDelegate {
+        FormCard.FormPasswordFieldDelegate {
             id: accountSecret
             placeholderText: i18n("Token secret")
             text: vm.input.secret
-            echoMode: TextInput.Password
             label: i18nc("@label:textbox", "Secret key:")
             validator: Validators.Base32SecretValidator {
                 id: secretValidator
@@ -125,7 +129,10 @@ FormCard.FormCardPage {
             }
         }
 
-        FormCard.FormDelegateSeparator { above: toggleDetails }
+        FormCard.FormDelegateSeparator {
+            below: accountSecret
+            above: toggleDetails
+        }
 
         FormCard.FormButtonDelegate {
             id: toggleDetails
diff -pruN 24.08.1-1/src/contents/ui/ErrorPage.qml 25.03.90-1/src/contents/ui/ErrorPage.qml
--- 24.08.1-1/src/contents/ui/ErrorPage.qml	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/src/contents/ui/ErrorPage.qml	2025-03-27 10:13:04.000000000 +0000
@@ -29,20 +29,22 @@ Kirigami.Page {
         }
     }
 
-    actions.main: Kirigami.Action {
-        text: i18nc("@action:button Button to dismiss the error page", "Continue")
-        iconName: "answer-correct"
-        onTriggered: {
-            vm.dismissed();
+    actions: [
+        Kirigami.Action {
+            text: i18nc("@action:button Button to dismiss the error page", "Continue")
+            icon.name: "answer-correct"
+            onTriggered: {
+                vm.dismissed();
+            }
+        },
+        Kirigami.Action {
+            text: i18nc("@action:button Dismiss the error page and quit Keysmtih", "Quit")
+            icon.name: "application-exit"
+            enabled: vm.quitEnabled
+            visible: vm.quitEnabled
+            onTriggered: {
+                Qt.quit();
+            }
         }
-    }
-    actions.right: Kirigami.Action {
-        text: i18nc("@action:button Dismiss the error page and quit Keysmtih", "Quit")
-        iconName: "application-exit"
-        enabled: vm.quitEnabled
-        visible: vm.quitEnabled
-        onTriggered: {
-            Qt.quit();
-        }
-    }
+    ]
 }
diff -pruN 24.08.1-1/src/contents/ui/ImportAccount.qml 25.03.90-1/src/contents/ui/ImportAccount.qml
--- 24.08.1-1/src/contents/ui/ImportAccount.qml	1970-01-01 00:00:00.000000000 +0000
+++ 25.03.90-1/src/contents/ui/ImportAccount.qml	2025-03-27 10:13:04.000000000 +0000
@@ -0,0 +1,120 @@
+/*
+ * SPDX-License-Identifier: GPL-3.0-or-later
+ * SPDX-FileCopyrightText: 2020-2021 Johan Ouwerkerk <jm.ouwerkerk@gmail.com>
+ * SPDX-FileCopyrightText: 2020 Carl Schwan <carl@carlschwan.eu>
+ */
+
+import QtQuick
+import QtQuick.Layouts
+import QtQuick.Controls as QQC2
+import QtQuick.Dialogs as Dialogs
+import org.kde.kirigami as Kirigami
+import org.kde.kirigamiaddons.formcard 1 as FormCard
+
+import Keysmith.Application as Application
+import Keysmith.Models as Models
+import Keysmith.Validators as Validators
+
+FormCard.FormCardPage {
+    id: root
+
+    title: i18nc("@title:window", "Import Accounts")
+
+    required property Application.ImportAccountViewModel vm
+
+    property bool passwordRequired: false
+
+    readonly property bool formatComboboxAcceptable: formatCombobox.currentIndex !== -1
+    readonly property bool accountsFileAcceptable: accountsFile.selectedFile.toString() !== ""
+    readonly property bool passwordAcceptable: !passwordRequired || password.text !== ""
+    readonly property bool acceptable: formatComboboxAcceptable && accountsFileAcceptable && passwordAcceptable
+
+    topPadding: Kirigami.Units.gridUnit
+    bottomPadding: Kirigami.Units.gridUnit
+
+    data: Connections {
+        target: vm.input
+        function onFormatChanged() {
+            root.passwordRequired = [
+                Models.ValidatedImportInput.AndOTPEncryptedJSON,
+                Models.ValidatedImportInput.AegisEncryptedJSON
+            ].includes(formatCombobox.currentValue);
+        }
+    }
+
+    Component.onCompleted: formatCombobox.forceActiveFocus()
+
+    FormCard.FormCard {
+        id: requiredDetails
+
+        FormCard.FormComboBoxDelegate {
+            id: formatCombobox
+            text: i18n("Import format")
+
+            currentIndex: -1
+            model: ListModel {
+                Component.onCompleted: {
+                    // ListModel doesn't support i18n strings
+                    append({name: i18nc("@item:inlistbox", "andOTP Encrypted JSON"), value: Models.ValidatedImportInput.AndOTPEncryptedJSON});
+                    append({name: i18nc("@item:inlistbox", "andOTP Plain JSON"), value: Models.ValidatedImportInput.AndOTPPlainJSON});
+                    //append({name: i18nc("@item:inlistbox", "Aegis Encrypted JSON"), value: Models.ValidatedImportInput.AegisEncryptedJSON});
+                    append({name: i18nc("@item:inlistbox", "Aegis Plain JSON"), value: Models.ValidatedImportInput.AegisPlainJSON});
+                    append({name: i18nc("@item:inlistbox", "FreeOTP URIs"), value: Models.ValidatedImportInput.FreeOTPURIs});
+
+                    formatCombobox.currentIndex = 0;
+                }
+            }
+
+            textRole: "name"
+            valueRole: "value"
+
+            onCurrentValueChanged: vm.input.format = currentValue;
+        }
+
+        FormCard.FormDelegateSeparator {}
+
+        FormCard.FormButtonDelegate {
+            id: openFileDialog
+            text: i18nc("@label:chooser", "Backup file:")
+            enabled: formatComboboxAcceptable
+            onClicked: accountsFile.open();
+            description: vm.input.file.toString().length > 0 ? vm.input.file.toString().substring(7) : i18nc("@info:placeholder", "No file selected")
+
+            Dialogs.FileDialog {
+                id: accountsFile
+                title: i18nc("@title:window", "Select file")
+                onAccepted: {
+                    vm.input.file = accountsFile.selectedFile;
+                }
+            }
+        }
+
+        FormCard.FormDelegateSeparator {
+            visible: root.passwordRequired
+        }
+
+        FormCard.FormPasswordFieldDelegate {
+            id: password
+            visible: root.passwordRequired
+            placeholderText: i18nc("@info:placeholder", "Decryption password")
+            text: vm.input.password
+            label: i18nc("@label:textbox", "Password:")
+            inputMethodHints: Qt.ImhNoAutoUppercase | Qt.ImhNoPredictiveText | Qt.ImhSensitiveData | Qt.ImhHiddenText
+            onTextChanged: vm.input.password = text;
+            onAccepted: vm.accepted();
+        }
+    }
+
+    FormCard.FormCard {
+        Layout.topMargin: Kirigami.Units.gridUnit
+
+        FormCard.FormButtonDelegate {
+            text: i18nc("@action:button", "Import")
+            icon.name: "answer-correct-symbolic"
+            enabled: acceptable
+            onClicked: {
+                vm.accepted();
+            }
+        }
+    }
+}
diff -pruN 24.08.1-1/src/contents/ui/KeysmithGlobalDrawer.qml 25.03.90-1/src/contents/ui/KeysmithGlobalDrawer.qml
--- 24.08.1-1/src/contents/ui/KeysmithGlobalDrawer.qml	1970-01-01 00:00:00.000000000 +0000
+++ 25.03.90-1/src/contents/ui/KeysmithGlobalDrawer.qml	2025-03-27 10:13:04.000000000 +0000
@@ -0,0 +1,18 @@
+/*
+* SPDX-License-Identifier: GPL-3.0-or-later
+* SPDX-FileCopyrightText: 2024 Plata Hill <plata.hill@kdemail.net>
+*/
+
+import org.kde.kirigami as Kirigami
+
+Kirigami.GlobalDrawer {
+    isMenu: true
+    actions: [
+        Kirigami.Action {
+            text: i18n("About Keysmith")
+            icon.name: "keysmith"
+            onTriggered: pageStack.layers.push(Qt.createComponent('org.kde.kirigamiaddons.formcard', 'AboutPage'))
+            enabled: pageStack.layers.currentItem.title !== i18n("About Keysmith")
+        }
+    ]
+}
diff -pruN 24.08.1-1/src/contents/ui/Main.qml 25.03.90-1/src/contents/ui/Main.qml
--- 24.08.1-1/src/contents/ui/Main.qml	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/src/contents/ui/Main.qml	2025-03-27 10:13:04.000000000 +0000
@@ -15,6 +15,18 @@ Kirigami.ApplicationWindow {
     width: Kirigami.Units.gridUnit * 20
     height: Kirigami.Units.gridUnit * 30
 
+    globalDrawer: KeysmithGlobalDrawer {}
+
+    pageStack. globalToolBar {
+        style: Kirigami.ApplicationHeaderStyle.ToolBar
+        showNavigationButtons: if (root.pageStack.currentIndex > 0
+            || root.pageStack.currentIndex > 0) {
+            Kirigami.ApplicationHeaderStyle.ShowBackButton
+        } else {
+            0
+        }
+    }
+
     function routeToUrl(route) {
         switch (route) {
         case Application.Navigation.Error:
@@ -27,8 +39,12 @@ Kirigami.ApplicationWindow {
             return Qt.resolvedUrl("AccountsOverview.qml")
         case Application.Navigation.AddAccount:
             return Qt.resolvedUrl("AddAccount.qml")
+        case Application.Navigation.ImportAccount:
+            return Qt.resolvedUrl("ImportAccount.qml")
         case Application.Navigation.SetupPassword:
             return Qt.resolvedUrl("SetupPassword.qml")
+        case Application.Navigation.ScanQR:
+            return Qt.resolvedUrl("QRScanPage.qml")
         }
         return 'bug';
     }
@@ -37,7 +53,6 @@ Kirigami.ApplicationWindow {
         target: Application.Keysmith.navigation
 
         function onRouted(route, data) {
-            console.log(route, data)
             const pageUrl = routeToUrl(route);
             while (root.pageStack.depth > 1) {
                 root.pageStack.pop();
@@ -59,5 +74,9 @@ Kirigami.ApplicationWindow {
                 vm: data,
             });
         }
+
+        function onPopped() {
+            root.pageStack.pop();
+        }
     }
 }
diff -pruN 24.08.1-1/src/contents/ui/QRScanPage.qml 25.03.90-1/src/contents/ui/QRScanPage.qml
--- 24.08.1-1/src/contents/ui/QRScanPage.qml	1970-01-01 00:00:00.000000000 +0000
+++ 25.03.90-1/src/contents/ui/QRScanPage.qml	2025-03-27 10:13:04.000000000 +0000
@@ -0,0 +1,147 @@
+/*
+ * SPDX-License-Identifier: GPL-3.0-or-later
+ * SPDX-FileCopyrightText: 2025 Jack Hill <jackhill3103@gmail.com>
+ */
+
+import QtQuick
+import QtQuick.Layouts
+import QtQuick.Controls as QQC2
+import QtMultimedia
+
+import org.kde.kirigami as Kirigami
+import org.kde.kirigamiaddons.delegates as Delegates
+import org.kde.kirigamiaddons.components as Components
+import org.kde.prison.scanner as Prison
+
+import Keysmith.Application as Application
+
+Kirigami.Page {
+    id: root
+
+    title: i18nc("@title", "Scan a QR code")
+
+    required property Application.ScanQRViewModel vm
+
+    onBackRequested: event => {
+        event.accepted = true;
+        vm.cancelled();
+    }
+
+    actions: Kirigami.Action {
+        text: i18nc("@action:intoolbar", "Select Camera")
+        visible: devices.videoInputs.length > 1
+        icon.name: "camera-video-symbolic"
+        onTriggered: cameraSelectorSheet.open()
+    }
+
+    Components.MessageDialog {
+        id: cameraSelectorSheet
+
+        padding: 0
+        bottomPadding: 1 // HACK: prevent the scrollview to go out of the dialog
+        title: i18nc("@title:dialog", "Select Camera")
+
+        header: ColumnLayout {
+            width: parent.width
+            spacing: 0
+
+            RowLayout {
+                spacing: 0
+
+                Layout.margins: Kirigami.Units.smallSpacing
+                Kirigami.Heading {
+                    Layout.leftMargin: Kirigami.Units.smallSpacing
+                    Layout.rightMargin: Kirigami.Units.smallSpacing
+                    Layout.fillWidth: true
+                    text: cameraSelectorSheet.title
+                }
+
+                QQC2.ToolButton {
+                    icon.name: "dialog-close"
+                    text: i18nc("@action:button", "Close")
+                    display: QQC2.Button.IconOnly
+                }
+            }
+
+            Kirigami.Separator {
+                Layout.fillWidth: true
+            }
+        }
+
+        contentItem: QQC2.ScrollView {
+            ListView {
+                id: listView
+
+                Kirigami.Theme.colorSet: Kirigami.Theme.View
+
+                clip: true
+                model: devices.videoInputs
+                implicitWidth: Kirigami.Units.gridUnit * 20
+
+                delegate: Delegates.RoundedItemDelegate {
+                    required property int index
+                    required property var modelData
+
+                    text: modelData.description
+                    onClicked: {
+                        camera.cameraDevice = modelData;
+                        camera.start();
+                        cameraSelectorSheet.close();
+                        Application.StateConfig.lastCameraId = modelData.id;
+                        Application.StateConfig.save();
+                    }
+                }
+            }
+        }
+    }
+
+    MediaDevices {
+        id: devices
+
+        Component.onCompleted: setCamera()
+        onVideoInputsChanged: setCamera()
+
+        function setCamera(): void {
+            if (Application.StateConfig.lastCameraId.length === 0) {
+                return;
+            }
+
+            for (let cameraDevice of videoInputs) {
+                // note strict checking doesn't work
+                if (cameraDevice.id == Application.StateConfig.lastCameraId) {
+                    camera.cameraDevice = cameraDevice;
+                    camera.start();
+                }
+            }
+        }
+    }
+
+    CaptureSession {
+        videoOutput: viewFinder
+        camera: Camera {
+            id: camera
+            active: vm.active
+            cameraDevice: devices.defaultVideoInput
+        }
+    }
+
+    VideoOutput {
+        id: viewFinder
+        anchors.fill: parent
+    }
+
+    Prison.VideoScanner {
+        videoSink: viewFinder.videoSink
+        formats: Prison.Format.QRCode
+
+        onResultChanged: {
+            if (result.hasText) {
+                vm.active = false;
+                vm.scanCompleteText(result.text);
+            } else if (result.hasBinaryData) {
+                vm.active = false;
+                vm.scanComplete(result.binaryData);
+            }
+        }
+    }
+}
diff -pruN 24.08.1-1/src/contents/ui/SetupPassword.qml 25.03.90-1/src/contents/ui/SetupPassword.qml
--- 24.08.1-1/src/contents/ui/SetupPassword.qml	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/src/contents/ui/SetupPassword.qml	2025-03-27 10:13:04.000000000 +0000
@@ -10,7 +10,6 @@ import QtQuick.Layouts
 import QtQuick.Controls as Controls
 import org.kde.kirigami as Kirigami
 import org.kde.kirigamiaddons.formcard 1.0 as FormCard
-import org.kde.kirigamiaddons.components 1.0 as Components
 
 import Keysmith.Application as Application
 
@@ -23,11 +22,12 @@ FormCard.FormCardPage {
 
     Component.onCompleted: newPassword.forceActiveFocus()
 
-    header: Components.Banner {
+    header: Kirigami.InlineMessage {
         id: errorMessage
         text: i18n("Failed to set up your password")
         visible: vm.failed
         showCloseButton: true
+        position: Kirigami.InlineMessage.Position.Header
     }
 
     Kirigami.Icon {
@@ -43,25 +43,29 @@ FormCard.FormCardPage {
     }
 
     FormCard.FormCard {
-        FormCard.FormTextFieldDelegate {
+        FormCard.FormPasswordFieldDelegate {
             id: newPassword
-            echoMode: TextInput.Password
             label: i18nc("@label:textbox", "New Password:")
             enabled: !vm.busy
             onAccepted: newPasswordCopy.trigger()
         }
 
-        FormCard.FormDelegateSeparator {}
+        FormCard.FormDelegateSeparator {
+            below: newPassword
+            above: newPasswordCopy
+        }
 
-        FormCard.FormTextFieldDelegate {
+        FormCard.FormPasswordFieldDelegate {
             id: newPasswordCopy
-            echoMode: TextInput.Password
             enabled: !vm.busy
             label: i18nc("@label:textbox", "Verify password:")
             onAccepted: applyButton.clicked()
         }
 
-        FormCard.FormDelegateSeparator { above: applyButton }
+        FormCard.FormDelegateSeparator {
+            below: newPasswordCopy
+            above: applyButton
+        }
 
         FormCard.FormButtonDelegate {
             id: applyButton
diff -pruN 24.08.1-1/src/contents/ui/UnlockAccounts.qml 25.03.90-1/src/contents/ui/UnlockAccounts.qml
--- 24.08.1-1/src/contents/ui/UnlockAccounts.qml	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/src/contents/ui/UnlockAccounts.qml	2025-03-27 10:13:04.000000000 +0000
@@ -10,7 +10,6 @@ import QtQuick.Layouts
 import QtQuick.Controls as QQC2
 import org.kde.kirigami as Kirigami
 import org.kde.kirigamiaddons.formcard 1 as FormCard
-import org.kde.kirigamiaddons.components 1 as Components
 
 import Keysmith.Application as Application
 
@@ -21,12 +20,13 @@ FormCard.FormCardPage {
 
     title: i18nc("@title:window", "Password")
 
-    header: Components.Banner {
+    header: Kirigami.InlineMessage {
         id: errorMessage
         text: i18n("Failed to unlock your accounts")
         visible: vm.failed
         showCloseButton: true
         type: Kirigami.MessageType.Error
+        position: Kirigami.InlineMessage.Position.Header
     }
 
     Component.onCompleted: existingPassword.forceActiveFocus()
@@ -44,15 +44,17 @@ FormCard.FormCardPage {
     }
 
     FormCard.FormCard {
-        FormCard.FormTextFieldDelegate {
+        FormCard.FormPasswordFieldDelegate {
             id: existingPassword
-            echoMode: TextInput.Password
             label: i18nc("@label:textbox", "Password:")
             enabled: !vm.busy
             onAccepted: unlockButton.clicked()
         }
 
-        FormCard.FormDelegateSeparator { above: unlockButton }
+        FormCard.FormDelegateSeparator {
+            below: existingPassword
+            above: unlockButton
+        }
 
         FormCard.FormButtonDelegate {
             id: unlockButton
diff -pruN 24.08.1-1/src/hmac/hmac.cpp 25.03.90-1/src/hmac/hmac.cpp
--- 24.08.1-1/src/hmac/hmac.cpp	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/src/hmac/hmac.cpp	2025-03-27 10:13:04.000000000 +0000
@@ -21,7 +21,7 @@ static QByteArray hmac_stage(QCryptograp
         keyBuf[count] ^= xorKey;
     }
 
-    hash.addData(keyBuf, count);
+    hash.addData(QByteArrayView(keyBuf, count));
 
     if (ksize < blockSize) {
         QByteArray pad(blockSize - ksize, fillPad);
@@ -122,7 +122,7 @@ std::optional<QByteArray> compute(QCrypt
 
     if (ksize > bs) {
         QCryptographicHash khash(algorithm);
-        khash.addData(rawKey, ksize);
+        khash.addData(QByteArrayView(rawKey, ksize));
         hashedKey = khash.result();
         rawKey = hashedKey.data();
         ksize = hashedKey.size();
diff -pruN 24.08.1-1/src/main.cpp 25.03.90-1/src/main.cpp
--- 24.08.1-1/src/main.cpp	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/src/main.cpp	2025-03-27 10:13:04.000000000 +0000
@@ -17,7 +17,9 @@
 #include <QApplication>
 #endif
 
+#include <KAboutData>
 #include <KLocalizedContext>
+#include <KLocalizedQmlContext>
 #include <KLocalizedString>
 
 #include "app/cli.h"
@@ -31,6 +33,7 @@
 #include "validators/secretvalidator.h"
 
 #include "keysmith-features.h"
+#include "stateconfig.h"
 #include "version.h"
 
 /*
@@ -66,6 +69,20 @@ Q_DECL_EXPORT int main(int argc, char *a
     QCoreApplication::setApplicationVersion(KEYSMITH_VERSION_STRING);
     QGuiApplication::setApplicationDisplayName(i18nc("@title", "Keysmith"));
 
+    // about
+    const QString applicationDescription = i18n("generate two-factor authentication (2FA) tokens");
+
+    KAboutData about(QStringLiteral("keysmith"),
+                     i18n("Keysmith"),
+                     KEYSMITH_VERSION_STRING,
+                     applicationDescription,
+                     KAboutLicense::GPL_V3,
+                     i18n("© 2019 KDE Community"));
+    about.addAuthor(QStringLiteral("Bhushan Shah"), QString(), QStringLiteral("bshah@kde.org"));
+    about.addAuthor(QStringLiteral("Johan Ouwerkerk"), QString(), QStringLiteral("jm.ouwerkerk@gmail.com"));
+    about.addAuthor(QStringLiteral("Devin Lin"), QString(), QStringLiteral("espidev@gmail.com"));
+    KAboutData::setApplicationData(about);
+
     QCommandLineParser cliParser;
 
     // default/boilerplate options handled entirely via command line
@@ -98,13 +115,17 @@ Q_DECL_EXPORT int main(int argc, char *a
 #endif
 
     QQmlApplicationEngine engine;
-    engine.rootContext()->setContextObject(new KLocalizedContext(&engine));
-
+    KLocalization::setupLocalizedContext(&engine);
     qmlRegisterUncreatableType<app::AddAccountViewModel>("Keysmith.Application",
                                                          1,
                                                          0,
                                                          "AddAccountViewModel",
                                                          QStringLiteral("Should be automatically provided through Keysmith.Application.Navigation signals"));
+
+    qmlRegisterUncreatableType<app::ImportAccountViewModel>("Keysmith.Application", 1, 0, "ImportAccountViewModel",
+        QStringLiteral("Should be automatically provided through Keysmith.Application.Navigation signals")
+    );
+
     qmlRegisterUncreatableType<app::RenameAccountViewModel>("Keysmith.Application",
                                                             1,
                                                             0,
@@ -130,6 +151,11 @@ Q_DECL_EXPORT int main(int argc, char *a
                                                                0,
                                                                "AccountsOverviewViewModel",
                                                                QStringLiteral("Should be automatically provided through Keysmith.Navigation signals"));
+    qmlRegisterUncreatableType<app::ScanQRViewModel>("Keysmith.Application",
+                                                     1,
+                                                     0,
+                                                     "ScanQRViewModel",
+                                                     QStringLiteral("Should be automatically provided through Keysmith.Navigation signals"));
     qmlRegisterUncreatableType<app::Navigation>("Keysmith.Application",
                                                 1,
                                                 0,
@@ -152,6 +178,8 @@ Q_DECL_EXPORT int main(int argc, char *a
                                                    "Account",
                                                    QStringLiteral("Use an AccountListModel from the Keysmith singleton to obtain an Account"));
     qmlRegisterType<model::AccountInput>("Keysmith.Models", 1, 0, "ValidatedAccountInput");
+    qmlRegisterType<model::ImportInput>("Keysmith.Models", 1, 0, "ValidatedImportInput");
+    qmlRegisterType<model::ImportInput>("Keysmith.Models", 1, 0, "ValidatedImportInput");
     qmlRegisterType<model::SortedAccountsListModel>("Keysmith.Models", 1, 0, "SortedAccountListModel");
     qmlRegisterType<model::AccountNameValidator>("Keysmith.Validators", 1, 0, "AccountNameValidator");
     qmlRegisterType<validators::EpochValidator>("Keysmith.Validators", 1, 0, "TOTPEpochValidator");
@@ -176,6 +204,13 @@ Q_DECL_EXPORT int main(int argc, char *a
                                                           return new app::CommandLineOptions(cliParser, parseOk);
                                                       });
 
+    qmlRegisterSingletonType<StateConfig>("Keysmith.Application", 1, 0, "StateConfig", [](QQmlEngine *qml, QJSEngine *js) -> QObject * {
+        Q_UNUSED(qml);
+        Q_UNUSED(js);
+
+        return StateConfig::self();
+    });
+
     engine.loadFromModule("org.kde.keysmith", "Main");
     if (engine.rootObjects().isEmpty()) {
         return -1;
diff -pruN 24.08.1-1/src/model/CMakeLists.txt 25.03.90-1/src/model/CMakeLists.txt
--- 24.08.1-1/src/model/CMakeLists.txt	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/src/model/CMakeLists.txt	2025-03-27 10:13:04.000000000 +0000
@@ -11,4 +11,4 @@ set(model_SRCS
 )
 
 add_library(model_lib STATIC ${model_SRCS})
-target_link_libraries(model_lib Qt::Core Qt::Qml Qt::Gui account_lib validator_lib uri_lib)
+target_link_libraries(model_lib Qt::Core Qt::Qml Qt::Gui account_lib backups_lib validator_lib uri_lib)
diff -pruN 24.08.1-1/src/model/accounts.cpp 25.03.90-1/src/model/accounts.cpp
--- 24.08.1-1/src/model/accounts.cpp	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/src/model/accounts.cpp	2025-03-27 10:13:04.000000000 +0000
@@ -121,7 +121,7 @@ SimpleAccountListModel::SimpleAccountLis
     : QAbstractListModel(parent)
     , m_storage(storage)
     , m_has_error(false)
-    , m_index(QVector<QString>())
+    , m_index(QList<QString>())
 {
     QObject::connect(storage, &accounts::AccountStorage::added, this, &SimpleAccountListModel::added);
     QObject::connect(storage, &accounts::AccountStorage::removed, this, &SimpleAccountListModel::removed);
diff -pruN 24.08.1-1/src/model/accounts.h 25.03.90-1/src/model/accounts.h
--- 24.08.1-1/src/model/accounts.h	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/src/model/accounts.h	2025-03-27 10:13:04.000000000 +0000
@@ -12,12 +12,12 @@
 #include <QAbstractListModel>
 #include <QByteArray>
 #include <QHash>
+#include <QList>
 #include <QModelIndex>
 #include <QObject>
 #include <QSortFilterProxyModel>
 #include <QString>
 #include <QValidator>
-#include <QVector>
 
 #include <optional>
 
@@ -70,9 +70,15 @@ class SimpleAccountListModel : public QA
     Q_PROPERTY(bool loaded READ loaded NOTIFY loadedChanged)
     Q_PROPERTY(bool error READ error WRITE setError NOTIFY errorChanged)
 public:
-    enum NonStandardRoles { AccountRole = Qt::ItemDataRole::UserRole };
+    enum NonStandardRoles {
+        AccountRole = Qt::ItemDataRole::UserRole
+    };
     Q_ENUM(NonStandardRoles)
-    enum TOTPAlgorithms { Sha1, Sha256, Sha512 };
+    enum TOTPAlgorithms {
+        Sha1,
+        Sha256,
+        Sha512
+    };
     Q_ENUM(TOTPAlgorithms)
 private:
     static accounts::Account::Hash toHash(const TOTPAlgorithms value);
@@ -106,7 +112,7 @@ private:
 
 private:
     bool m_has_error;
-    QVector<QString> m_index;
+    QList<QString> m_index;
     QHash<QString, AccountView *> m_accounts;
 };
 
diff -pruN 24.08.1-1/src/model/input.cpp 25.03.90-1/src/model/input.cpp
--- 24.08.1-1/src/model/input.cpp	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/src/model/input.cpp	2025-03-27 10:13:04.000000000 +0000
@@ -3,10 +3,21 @@
  * SPDX-FileCopyrightText: 2020 Johan Ouwerkerk <jm.ouwerkerk@gmail.com>
  */
 #include "input.h"
+#include "qr.h"
 
+#include "../backups/backups.h"
+
+#include <QBuffer>
+#include <QFile>
+#include <QJsonArray>
+#include <QJsonDocument>
+#include <QJsonObject>
 #include <QLocale>
+#include <QTimeZone>
+
+using namespace Qt::Literals::StringLiterals;
 
-static QDateTime DEFAULT_EPOCH_VALUE = QDateTime::fromMSecsSinceEpoch(0, Qt::UTC);
+static QDateTime DEFAULT_EPOCH_VALUE = QDateTime::fromMSecsSinceEpoch(0, QTimeZone{QTimeZone::UTC});
 static QString DEFAULT_EPOCH = DEFAULT_EPOCH_VALUE.toString(Qt::ISODate);
 static QString DEFAULT_COUNTER = QLocale::c().toString(0ULL);
 
@@ -251,6 +262,208 @@ void AccountInput::setDynamicTruncation(
         Q_EMIT truncationChanged();
     }
 }
+
+ImportInput::ImportInput(QObject *parent) :
+    QObject(parent),
+    m_file(QString())
+{
+}
+
+void ImportInput::reset(void)
+{
+    setFile(QString());
+    setFormat(ImportFormat::FreeOTPURIs);
+}
+
+QString ImportInput::file(void) const
+{
+    return m_file;
+}
+
+void ImportInput::setFile(const QString &file)
+{
+    QUrl url(file);
+    if ((url.isLocalFile() && m_file != url.toLocalFile()) || m_file != file) {
+        m_file = url.isLocalFile() ? url.toLocalFile() : file;
+        Q_EMIT fileChanged();
+    }
+}
+
+ImportInput::ImportFormat ImportInput::format(void) const
+{
+    return m_format;
+}
+
+void ImportInput::setFormat(model::ImportInput::ImportFormat format)
+{
+    if (m_format != format) {
+        m_format = format;
+        Q_EMIT formatChanged();
+    }
+}
+
+QString ImportInput::password(void) const
+{
+    return m_password;
+}
+
+void ImportInput::setPassword(const QString &password)
+{
+    if (m_password != password) {
+        m_password = password;
+        Q_EMIT passwordChanged();
+    }
+}
+
+static void readUris(QVector<AccountInput *> &ret, QByteArray &data)
+{
+    QBuffer buf(&data);
+    buf.open(QIODevice::ReadOnly);
+    while (!buf.atEnd()) {
+        AccountInput *account = new AccountInput;
+        std::optional<QrParameters> params(QrParameters::parse(buf.readLine()));
+        params->populate(account);
+        ret.push_back(account);
+    }
+}
+
+static void readAndOTP(QVector<AccountInput *> &ret, const QByteArray &data)
+{
+    QJsonDocument json = QJsonDocument::fromJson(data);
+    QJsonArray array(json.array());
+    ret.reserve(array.size());
+    for (const auto& obj : array) {
+        const QJsonObject& otp(obj.toObject());
+        AccountInput *account = new AccountInput;
+
+        QString secret(otp["secret"_L1].toString());
+        if (secret.size() % 8 != 0) {
+            secret.resize((secret.size() + 7) & -8, '='_L1);
+        }
+        account->setSecret(secret);
+
+        QString issuer(otp["issuer"_L1].toString());
+        if (issuer.size()) {
+            account->setIssuer(issuer);
+        }
+
+        QStringList tokens(otp["label"_L1].toString().split(':'_L1));
+        if (tokens.size() >= 2) {
+            if (!issuer.size() || QString::compare(issuer, tokens[0], Qt::CaseInsensitive)) {
+                account->setIssuer(tokens[0]);
+            }
+            account->setName(tokens[1]);
+        } else {
+            account->setName(tokens[0]);
+        }
+
+        account->setTokenLength(otp["digits"_L1].toInt());
+
+        QString type(otp["type"_L1].toString());
+        if (type == "TOPT"_L1) {
+            account->setType(AccountInput::Totp);
+            account->setTimeStep(otp["period"_L1].toInt());
+        } else if (type == "HOPT"_L1) {
+            account->setType(AccountInput::Hotp);
+            account->setCounter(otp["counter"_L1].toInt());
+        } else if (type == "Steam"_L1) {
+            account->setType(AccountInput::Totp);
+            account->setTimeStep(otp["period"_L1].toInt());
+            if (account->timeStep() == 0) {
+                account->setTimeStep(30);
+            }
+            account->setIssuer("Steam"_L1);
+        }
+
+        QString algo(otp["algorithm"_L1].toString());
+        if (algo == "SHA1"_L1) {
+            account->setAlgorithm(AccountInput::Sha1);
+        } else if (algo == "SHA256"_L1) {
+            account->setAlgorithm(AccountInput::Sha256);
+        } else if (algo == "SHA512"_L1) {
+            account->setAlgorithm(AccountInput::Sha512);
+        }
+
+        ret.push_back(account);
+    }
+}
+
+static void readAegis(QVector<AccountInput *> &ret, const QByteArray &data)
+{
+    QJsonDocument json = QJsonDocument::fromJson(data);
+    QJsonArray array(json.object()["db"_L1].toObject()["entries"_L1].toArray());
+    ret.reserve(array.size());
+    for (const auto& obj : array) {
+        const QJsonObject& otp(obj.toObject());
+        AccountInput *account = new AccountInput;
+
+        account->setIssuer(otp["issuer"_L1].toString());
+        account->setName(otp["name"_L1].toString());
+
+        const QJsonObject& info(otp["info"_L1].toObject());
+
+        QString secret(info["secret"_L1].toString());
+        if (secret.size() % 8 != 0) {
+            secret.resize((secret.size() + 7) & -8, '='_L1);
+        }
+        account->setSecret(secret);
+
+        account->setTokenLength(info["digits"_L1].toInt());
+
+        QString type(otp["type"_L1].toString());
+        if (type == "TOPT"_L1) {
+            account->setType(AccountInput::Totp);
+            account->setTimeStep(info["period"_L1].toInt());
+        } else if (type == "HOPT"_L1) {
+            account->setType(AccountInput::Hotp);
+            account->setCounter(info["counter"_L1].toInt());
+        } else if (type == "Steam"_L1) {
+            account->setType(AccountInput::Totp);
+            account->setTimeStep(info["period"_L1].toInt());
+            if (account->timeStep() == 0) {
+                account->setTimeStep(30);
+            }
+            account->setIssuer("Steam"_L1);
+        }
+
+        QString algo(otp["algorithm"_L1].toString());
+        if (algo == "SHA1"_L1) {
+            account->setAlgorithm(AccountInput::Sha1);
+        } else if (algo == "SHA256"_L1) {
+            account->setAlgorithm(AccountInput::Sha256);
+        } else if (algo == "SHA512"_L1) {
+            account->setAlgorithm(AccountInput::Sha512);
+        }
+
+        ret.push_back(account);
+    }
+}
+
+QVector<AccountInput *> ImportInput::importAccounts() const
+{
+    // TODO(yakoyoku): Find a way to propagate import errors back to the app flow
+    QFile file(m_file);
+    if (!file.open(QIODevice::ReadOnly)) return {};
+    QByteArray data(file.readAll());
+    QVector<AccountInput *> ret;
+    switch (m_format) {
+    case FreeOTPURIs:
+        readUris(ret, data);
+        break;
+    case AndOTPEncryptedJSON:
+        data = backups::AndOTPVault::decrypt(data, m_password.toUtf8());
+        Q_FALLTHROUGH();
+    case AndOTPPlainJSON:
+        readAndOTP(ret, data);
+        break;
+    case AegisPlainJSON:
+        readAegis(ret, data);
+        break;
+    default:
+        break;
+    }
+    return ret;
+}
 }
 
 #include "moc_input.cpp"
diff -pruN 24.08.1-1/src/model/input.h 25.03.90-1/src/model/input.h
--- 24.08.1-1/src/model/input.h	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/src/model/input.h	2025-03-27 10:13:04.000000000 +0000
@@ -33,9 +33,16 @@ class AccountInput : public QObject
     Q_PROPERTY(uint truncationOffset READ truncationOffset NOTIFY truncationChanged)
     Q_PROPERTY(bool fixedTruncation READ fixedTruncation NOTIFY truncationChanged)
 public:
-    enum TOTPAlgorithm { Sha1, Sha256, Sha512 };
+    enum TOTPAlgorithm {
+        Sha1,
+        Sha256,
+        Sha512
+    };
     Q_ENUM(TOTPAlgorithm)
-    enum TokenType { Hotp, Totp };
+    enum TokenType {
+        Hotp,
+        Totp
+    };
     Q_ENUM(TokenType)
     AccountInput(QObject *parent = nullptr);
     void createNewAccount(accounts::AccountStorage *storage) const;
@@ -95,6 +102,39 @@ private:
     quint64 m_counterValue;
     std::optional<uint> m_truncation;
 };
+
+class ImportInput : public QObject
+{
+    Q_OBJECT
+    Q_PROPERTY(QString file READ file WRITE setFile NOTIFY fileChanged)
+    Q_PROPERTY(model::ImportInput::ImportFormat format READ format WRITE setFormat NOTIFY formatChanged)
+    Q_PROPERTY(QString password READ password WRITE setPassword NOTIFY passwordChanged)
+public:
+    enum ImportFormat {
+        FreeOTPURIs,
+        AndOTPPlainJSON, AndOTPEncryptedJSON,
+        AegisPlainJSON, AegisEncryptedJSON,
+    };
+    Q_ENUM(ImportFormat)
+    ImportInput(QObject *parent = nullptr);
+    Q_INVOKABLE void reset(void);
+public:
+    QString file(void) const;
+    void setFile(const QString &file);
+    ImportFormat format(void) const;
+    void setFormat(model::ImportInput::ImportFormat format);
+    QString password(void) const;
+    void setPassword(const QString &password);
+    QVector<AccountInput *> importAccounts() const;
+Q_SIGNALS:
+    void fileChanged(void);
+    void formatChanged(void);
+    void passwordChanged(void);
+private:
+    QString m_file;
+    QString m_password;
+    ImportFormat m_format;
+};
 }
 
 #endif
diff -pruN 24.08.1-1/src/stateconfig.kcfg 25.03.90-1/src/stateconfig.kcfg
--- 24.08.1-1/src/stateconfig.kcfg	1970-01-01 00:00:00.000000000 +0000
+++ 25.03.90-1/src/stateconfig.kcfg	2025-03-27 10:13:04.000000000 +0000
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<kcfg xmlns="http://www.kde.org/standards/kcfg/1.0"
+      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+      xsi:schemaLocation="http://www.kde.org/standards/kcfg/1.0
+                          http://www.kde.org/standards/kcfg/1.0/kcfg.xsd" >
+
+<!--
+SPDX-FileCopyrightText: Carl Schwan <carl@carlschwan.eu>
+SPDX-License-Identifier: CC0-1.0
+-->
+  <kcfgfile name="keysmithstaterc" stateConfig="true" />
+  <group name="Camera">
+    <entry name="LastCameraId" type="string">
+      <label>Last </label>
+      <default></default>
+    </entry>
+  </group>
+</kcfg>
diff -pruN 24.08.1-1/src/stateconfig.kcfgc 25.03.90-1/src/stateconfig.kcfgc
--- 24.08.1-1/src/stateconfig.kcfgc	1970-01-01 00:00:00.000000000 +0000
+++ 25.03.90-1/src/stateconfig.kcfgc	2025-03-27 10:13:04.000000000 +0000
@@ -0,0 +1,9 @@
+# SPDX-FileCopyrightText: 2020 Carl Schwan <carl@carlschwan.eu>
+# SPDX-License-Identifier: LGPL-2.1-or-later
+File=stateconfig.kcfg
+ClassName=StateConfig
+Mutators=true
+DefaultValueGetters=true
+GenerateProperties=true
+ParentInConstructor=true
+Singleton=true
diff -pruN 24.08.1-1/src/uri/uri.h 25.03.90-1/src/uri/uri.h
--- 24.08.1-1/src/uri/uri.h	2024-09-06 22:46:47.000000000 +0000
+++ 25.03.90-1/src/uri/uri.h	2025-03-27 10:13:04.000000000 +0000
@@ -23,7 +23,10 @@ std::optional<QString> decodePercentEnco
 class QrParts
 {
 public:
-    enum Type { Totp, Hotp };
+    enum Type {
+        Totp,
+        Hotp
+    };
     static std::optional<QrParts> parse(const QByteArray &qrCode);
     static std::optional<QrParts> parse(const QString &qrCode);
 
