mirror of
https://github.com/keepassxreboot/keepassxc.git
synced 2024-10-01 01:26:01 -04:00
Release 2.4.1
- Fix database deletion when using unsafe saves to a different file system [#2889] - Fix opening databases with legacy key files that contain '/' [#2872] - Fix opening database files from the command line [#2919] - Fix crash when editing master key [#2836] - Fix multiple issues with apply button behavior [#2947] - Fix issues on application startup (tab order, --pw-stdin, etc.) [#2830] - Fix building without WITH_XC_KEESHARE - Fix reference entry coloring on macOS dark mode [#2984] - Hide window when performing entry auto-type on macOS [#2969] - Improve UX of update checker; reduce checks to every 7 days [#2968] - KeeShare improvements [#2946, #2978, #2824] - Re-enable Ctrl+C to copy password from search box [#2947] - Add KeePassXC-Browser integration for Brave browser [#2933] - SSH Agent: Re-Add keys on database unlock [#2982] - SSH Agent: Only remove keys on app exit if they are removed on lock [#2985] - CLI: Add --no-password option [#2708] - CLI: Improve database extraction to XML [#2698] - CLI: Don't call mandb on build [#2774] - CLI: Add debug info [#2714] - Improve support for Snap theming [#2832] - Add support for building on Haiku OS [#2859] - Ctrl+PgDn now goes to the next tab and Ctrl+PgUp to the previous - Fix compiling on GCC 5 / Xenial [#2990] - Add .gitrev output to tarball for third-party builds [#2970] - Add WITH_XC_UPDATECHECK compile flag to toggle the update checker [#2968]
This commit is contained in:
commit
7bafe65d17
29
CHANGELOG
29
CHANGELOG
@ -1,3 +1,32 @@
|
||||
2.4.1 (2019-04-12)
|
||||
=========================
|
||||
|
||||
- Fix database deletion when using unsafe saves to a different file system [#2889]
|
||||
- Fix opening databases with legacy key files that contain '/' [#2872]
|
||||
- Fix opening database files from the command line [#2919]
|
||||
- Fix crash when editing master key [#2836]
|
||||
- Fix multiple issues with apply button behavior [#2947]
|
||||
- Fix issues on application startup (tab order, --pw-stdin, etc.) [#2830]
|
||||
- Fix building without WITH_XC_KEESHARE
|
||||
- Fix reference entry coloring on macOS dark mode [#2984]
|
||||
- Hide window when performing entry auto-type on macOS [#2969]
|
||||
- Improve UX of update checker; reduce checks to every 7 days [#2968]
|
||||
- KeeShare improvements [#2946, #2978, #2824]
|
||||
- Re-enable Ctrl+C to copy password from search box [#2947]
|
||||
- Add KeePassXC-Browser integration for Brave browser [#2933]
|
||||
- SSH Agent: Re-Add keys on database unlock [#2982]
|
||||
- SSH Agent: Only remove keys on app exit if they are removed on lock [#2985]
|
||||
- CLI: Add --no-password option [#2708]
|
||||
- CLI: Improve database extraction to XML [#2698]
|
||||
- CLI: Don't call mandb on build [#2774]
|
||||
- CLI: Add debug info [#2714]
|
||||
- Improve support for Snap theming [#2832]
|
||||
- Add support for building on Haiku OS [#2859]
|
||||
- Ctrl+PgDn now goes to the next tab and Ctrl+PgUp to the previous
|
||||
- Fix compiling on GCC 5 / Xenial [#2990]
|
||||
- Add .gitrev output to tarball for third-party builds [#2970]
|
||||
- Add WITH_XC_UPDATECHECK compile flag to toggle the update checker [#2968]
|
||||
|
||||
2.4.0 (2019-03-19)
|
||||
=========================
|
||||
|
||||
|
@ -49,6 +49,7 @@ option(WITH_XC_YUBIKEY "Include YubiKey support." OFF)
|
||||
option(WITH_XC_SSHAGENT "Include SSH agent support." OFF)
|
||||
option(WITH_XC_KEESHARE "Sharing integration with KeeShare" OFF)
|
||||
option(WITH_XC_KEESHARE_SECURE "Sharing integration with secured KeeShare containers" OFF)
|
||||
option(WITH_XC_UPDATECHECK "Include automatic update checks; disable for controlled distributions" ON)
|
||||
if(APPLE)
|
||||
option(WITH_XC_TOUCHID "Include TouchID support for macOS." OFF)
|
||||
endif()
|
||||
@ -76,10 +77,15 @@ else()
|
||||
set(WITH_XC_CRYPTO_SSH OFF)
|
||||
endif()
|
||||
|
||||
if(WITH_XC_UPDATECHECK)
|
||||
set(WITH_XC_NETWORKING ON)
|
||||
endif()
|
||||
|
||||
set(KEEPASSXC_VERSION_MAJOR "2")
|
||||
set(KEEPASSXC_VERSION_MINOR "4")
|
||||
set(KEEPASSXC_VERSION_PATCH "0")
|
||||
set(KEEPASSXC_VERSION_PATCH "1")
|
||||
set(KEEPASSXC_VERSION "${KEEPASSXC_VERSION_MAJOR}.${KEEPASSXC_VERSION_MINOR}.${KEEPASSXC_VERSION_PATCH}")
|
||||
set(OVERRIDE_VERSION "" CACHE STRING "Override the KeePassXC Version for Snapshot builds")
|
||||
|
||||
set(KEEPASSXC_BUILD_TYPE "Snapshot" CACHE STRING "Set KeePassXC build type to distinguish between stable releases and snapshots")
|
||||
set_property(CACHE KEEPASSXC_BUILD_TYPE PROPERTY STRINGS Snapshot Release PreRelease)
|
||||
@ -91,8 +97,10 @@ execute_process(COMMAND git rev-parse --short=7 HEAD
|
||||
OUTPUT_VARIABLE GIT_HEAD
|
||||
ERROR_QUIET)
|
||||
string(STRIP "${GIT_HEAD}" GIT_HEAD)
|
||||
if(GIT_HEAD STREQUAL "")
|
||||
if(GIT_HEAD STREQUAL "" AND NOT GIT_HEAD_OVERRIDE STREQUAL "")
|
||||
string(SUBSTRING "${GIT_HEAD_OVERRIDE}" 0 7 GIT_HEAD)
|
||||
elseif(EXISTS ${CMAKE_SOURCE_DIR}/.gitrev)
|
||||
file(READ ${CMAKE_SOURCE_DIR}/.gitrev GIT_HEAD)
|
||||
endif()
|
||||
message(STATUS "Found Git HEAD Revision: ${GIT_HEAD}\n")
|
||||
|
||||
@ -116,13 +124,16 @@ if(OVERRIDE_VERSION)
|
||||
elseif(OVERRIDE_VERSION MATCHES "^[\\.0-9]+$")
|
||||
set(KEEPASSXC_BUILD_TYPE Release)
|
||||
set(KEEPASSXC_VERSION ${OVERRIDE_VERSION})
|
||||
else()
|
||||
set(KEEPASSXC_BUILD_TYPE Snapshot)
|
||||
set(KEEPASSXC_VERSION ${OVERRIDE_VERSION})
|
||||
endif()
|
||||
else()
|
||||
if(KEEPASSXC_BUILD_TYPE STREQUAL "PreRelease")
|
||||
set(KEEPASSXC_VERSION "${KEEPASSXC_VERSION}-preview")
|
||||
elseif(KEEPASSXC_BUILD_TYPE STREQUAL "Snapshot")
|
||||
set(KEEPASSXC_VERSION "${KEEPASSXC_VERSION}-snapshot")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(KEEPASSXC_BUILD_TYPE STREQUAL "PreRelease" AND NOT OVERRIDE_VERSION)
|
||||
set(KEEPASSXC_VERSION "${KEEPASSXC_VERSION}-preview")
|
||||
elseif(KEEPASSXC_BUILD_TYPE STREQUAL "Snapshot")
|
||||
set(KEEPASSXC_VERSION "${KEEPASSXC_VERSION}-snapshot")
|
||||
endif()
|
||||
|
||||
if(KEEPASSXC_BUILD_TYPE STREQUAL "Release")
|
||||
@ -192,11 +203,13 @@ if(CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||
add_gcc_compiler_flags("-Werror")
|
||||
endif()
|
||||
|
||||
if (NOT HAIKU)
|
||||
if((CMAKE_COMPILER_IS_GNUCXX AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 4.8.999) OR CMAKE_COMPILER_IS_CLANGXX)
|
||||
add_gcc_compiler_flags("-fstack-protector-strong")
|
||||
else()
|
||||
add_gcc_compiler_flags("-fstack-protector --param=ssp-buffer-size=4")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
add_gcc_compiler_cxxflags("-fno-exceptions -fno-rtti")
|
||||
add_gcc_compiler_cxxflags("-Wnon-virtual-dtor -Wold-style-cast -Woverloaded-virtual")
|
||||
|
@ -29,7 +29,7 @@ so please check out your distribution's package list to see if KeePassXC is avai
|
||||
- Using website favicons as entry icons
|
||||
- Merging of databases
|
||||
- Automatic reload when the database changed on disk
|
||||
- Browser integration with KeePassXC-Browser using [native messaging](https://developer.chrome.com/extensions/nativeMessaging) for [Mozilla Firefox](https://addons.mozilla.org/en-US/firefox/addon/keepassxc-browser/) and [Google Chrome or Chromium](https://chrome.google.com/webstore/detail/keepassxc-browser/oboonakemofpalcgghocfoadofidjkkk)
|
||||
- Browser integration with KeePassXC-Browser using [native messaging](https://developer.chrome.com/extensions/nativeMessaging) for [Mozilla Firefox](https://addons.mozilla.org/en-US/firefox/addon/keepassxc-browser/) and [Google Chrome, Chromium, Vivaldi, or Brave](https://chrome.google.com/webstore/detail/keepassxc-browser/oboonakemofpalcgghocfoadofidjkkk)
|
||||
- Synchronize passwords using KeeShare. See [Using Sharing](./docs/QUICKSTART.md#using-sharing) for more details.
|
||||
- Many bug fixes
|
||||
|
||||
|
39
release-tool
39
release-tool
@ -810,20 +810,20 @@ build() {
|
||||
shift
|
||||
done
|
||||
|
||||
if [[ ${build_appsign} && ! -f ${build_key} ]]; then
|
||||
exitError "--appsign specified with invalid key file\n"
|
||||
fi
|
||||
|
||||
init
|
||||
|
||||
OUTPUT_DIR="$(realpath "$OUTPUT_DIR")"
|
||||
# Resolve appsign key to absolute path if under Windows
|
||||
if [[ "${build_key}" && "$(uname -o)" == "Msys" ]]; then
|
||||
build_key="$(realpath "${build_key}")"
|
||||
fi
|
||||
|
||||
if ${build_snapshot}; then
|
||||
TAG_NAME="HEAD"
|
||||
local branch=`git rev-parse --abbrev-ref HEAD`
|
||||
logInfo "Using current branch ${branch} to build..."
|
||||
RELEASE_NAME="${RELEASE_NAME}-snapshot"
|
||||
CMAKE_OPTIONS="${CMAKE_OPTIONS} -DKEEPASSXC_BUILD_TYPE=Snapshot"
|
||||
CMAKE_OPTIONS="${CMAKE_OPTIONS} -DKEEPASSXC_BUILD_TYPE=Snapshot -DOVERRIDE_VERSION=${RELEASE_NAME}"
|
||||
else
|
||||
checkWorkingTreeClean
|
||||
|
||||
@ -852,14 +852,13 @@ build() {
|
||||
|
||||
git archive --format=tar "$TAG_NAME" --prefix="${prefix}/" --output="${OUTPUT_DIR}/${tarball_name}"
|
||||
|
||||
if ! ${build_snapshot}; then
|
||||
# add .version file to tar
|
||||
mkdir "${prefix}"
|
||||
echo -n ${RELEASE_NAME} > "${prefix}/.version"
|
||||
tar --append --file="${OUTPUT_DIR}/${tarball_name}" "${prefix}/.version"
|
||||
rm "${prefix}/.version"
|
||||
rmdir "${prefix}" 2> /dev/null
|
||||
fi
|
||||
# add .version and .gitrev files to tarball
|
||||
mkdir "${prefix}"
|
||||
echo -n ${RELEASE_NAME} > "${prefix}/.version"
|
||||
echo -n `git rev-parse --short=7 HEAD` > "${prefix}/.gitrev"
|
||||
tar --append --file="${OUTPUT_DIR}/${tarball_name}" "${prefix}/.version" "${prefix}/.gitrev"
|
||||
rm "${prefix}/.version" "${prefix}/.gitrev"
|
||||
rmdir "${prefix}" 2> /dev/null
|
||||
|
||||
xz -6 "${OUTPUT_DIR}/${tarball_name}"
|
||||
fi
|
||||
@ -885,6 +884,8 @@ build() {
|
||||
# linuxdeploy requires /usr as install prefix
|
||||
INSTALL_PREFIX="/usr"
|
||||
fi
|
||||
# Do not build tests cases
|
||||
CMAKE_OPTIONS="${CMAKE_OPTIONS} -DWITH_TESTS=OFF"
|
||||
|
||||
if [ "$COMPILER" == "g++" ]; then
|
||||
export CC=gcc
|
||||
@ -908,7 +909,7 @@ build() {
|
||||
make ${MAKE_OPTIONS} package
|
||||
|
||||
# Appsign the executables if desired
|
||||
if [[ ${build_appsign} ]]; then
|
||||
if ${build_appsign}; then
|
||||
logInfo "Signing executable files"
|
||||
appsign "-f" "./${APP_NAME}-${RELEASE_NAME}.dmg" "-k" "${build_key}"
|
||||
fi
|
||||
@ -917,14 +918,14 @@ build() {
|
||||
elif [ "$(uname -o)" == "Msys" ]; then
|
||||
# Building on Windows with Msys2
|
||||
logInfo "Configuring build..."
|
||||
cmake -DCMAKE_BUILD_TYPE=Release -DWITH_TESTS=Off -G"MSYS Makefiles" \
|
||||
cmake -DCMAKE_BUILD_TYPE=Release -G"MSYS Makefiles" \
|
||||
-DCMAKE_INSTALL_PREFIX="${INSTALL_PREFIX}" ${CMAKE_OPTIONS} "$SRC_DIR"
|
||||
|
||||
logInfo "Compiling and packaging sources..."
|
||||
mingw32-make ${MAKE_OPTIONS} preinstall
|
||||
|
||||
# Appsign the executables if desired
|
||||
if [[ ${build_appsign} ]]; then
|
||||
if ${build_appsign} && [ -f "${build_key}" ]; then
|
||||
logInfo "Signing executable files"
|
||||
appsign "-f" $(find src | grep -P '\.exe$|\.dll$') "-k" "${build_key}"
|
||||
fi
|
||||
@ -949,7 +950,7 @@ build() {
|
||||
|
||||
# Building on Linux without Docker container
|
||||
logInfo "Configuring build..."
|
||||
cmake -DCMAKE_BUILD_TYPE=Release -DWITH_TESTS=Off ${CMAKE_OPTIONS} \
|
||||
cmake -DCMAKE_BUILD_TYPE=Release ${CMAKE_OPTIONS} \
|
||||
-DCMAKE_INSTALL_PREFIX="${INSTALL_PREFIX}" "$SRC_DIR"
|
||||
|
||||
logInfo "Compiling sources..."
|
||||
@ -981,7 +982,7 @@ build() {
|
||||
-v "$(realpath "$OUTPUT_DIR"):/keepassxc/out:rw" \
|
||||
"$DOCKER_IMAGE" \
|
||||
bash -c "cd /keepassxc/out/build-release && \
|
||||
cmake -DCMAKE_BUILD_TYPE=Release -DWITH_TESTS=Off ${CMAKE_OPTIONS} \
|
||||
cmake -DCMAKE_BUILD_TYPE=Release ${CMAKE_OPTIONS} \
|
||||
-DCMAKE_INSTALL_PREFIX=${INSTALL_PREFIX} /keepassxc/src && \
|
||||
make ${MAKE_OPTIONS} && make DESTDIR=/keepassxc/out/KeePassXC.AppDir install/strip"
|
||||
fi
|
||||
@ -1143,7 +1144,7 @@ appsign() {
|
||||
fi
|
||||
|
||||
logInfo "Signing app using codesign..."
|
||||
codesign --sign "${key}" --verbose --deep --entitlements ${orig_dir}/share/macosx/keepassxc.entitlements ./app/KeePassXC.app
|
||||
codesign --sign "${key}" --verbose --deep --entitlements "${SRC_DIR}/share/macosx/keepassxc.entitlements" ./app/KeePassXC.app
|
||||
|
||||
if [ 0 -ne $? ]; then
|
||||
cd "${orig_dir}"
|
||||
|
@ -23,7 +23,7 @@ file(GLOB DATABASE_ICONS icons/database/*.png)
|
||||
|
||||
install(FILES ${DATABASE_ICONS} DESTINATION ${DATA_INSTALL_DIR}/icons/database)
|
||||
|
||||
if(UNIX AND NOT APPLE)
|
||||
if(UNIX AND NOT APPLE AND NOT HAIKU)
|
||||
install(DIRECTORY icons/application/ DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor
|
||||
FILES_MATCHING PATTERN "keepassx*.png" PATTERN "keepassx*.svg"
|
||||
PATTERN "status" EXCLUDE PATTERN "actions" EXCLUDE PATTERN "categories" EXCLUDE)
|
||||
@ -33,7 +33,7 @@ if(UNIX AND NOT APPLE)
|
||||
install(FILES linux/org.keepassxc.KeePassXC.desktop DESTINATION ${CMAKE_INSTALL_DATADIR}/applications)
|
||||
install(FILES linux/org.keepassxc.KeePassXC.appdata.xml DESTINATION ${CMAKE_INSTALL_DATADIR}/metainfo)
|
||||
install(FILES linux/keepassxc.xml DESTINATION ${CMAKE_INSTALL_DATADIR}/mime/packages)
|
||||
endif(UNIX AND NOT APPLE)
|
||||
endif(UNIX AND NOT APPLE AND NOT HAIKU)
|
||||
|
||||
if(APPLE)
|
||||
install(FILES macosx/keepassxc.icns DESTINATION ${DATA_INSTALL_DIR})
|
||||
|
@ -50,6 +50,37 @@
|
||||
</screenshots>
|
||||
|
||||
<releases>
|
||||
<release version="2.4.1" date="2019-04-12">
|
||||
<description>
|
||||
<ul>
|
||||
<li>Fix database deletion when using unsafe saves to a different file system [#2889]</li>
|
||||
<li>Fix opening databases with legacy key files that contain '/' [#2872]</li>
|
||||
<li>Fix opening database files from the command line [#2919]</li>
|
||||
<li>Fix crash when editing master key [#2836]</li>
|
||||
<li>Fix multiple issues with apply button behavior [#2947]</li>
|
||||
<li>Fix issues on application startup (tab order, --pw-stdin, etc.) [#2830]</li>
|
||||
<li>Fix building without WITH_XC_KEESHARE</li>
|
||||
<li>Fix reference entry coloring on macOS dark mode [#2984]</li>
|
||||
<li>Hide window when performing entry auto-type on macOS [#2969]</li>
|
||||
<li>Improve UX of update checker; reduce checks to every 7 days [#2968]</li>
|
||||
<li>KeeShare improvements [#2946, #2978, #2824]</li>
|
||||
<li>Re-enable Ctrl+C to copy password from search box [#2947]</li>
|
||||
<li>Add KeePassXC-Browser integration for Brave browser [#2933]</li>
|
||||
<li>SSH Agent: Re-Add keys on database unlock [#2982]</li>
|
||||
<li>SSH Agent: Only remove keys on app exit if they are removed on lock [#2985]</li>
|
||||
<li>CLI: Add --no-password option [#2708]</li>
|
||||
<li>CLI: Improve database extraction to XML [#2698]</li>
|
||||
<li>CLI: Don't call mandb on build [#2774]</li>
|
||||
<li>CLI: Add debug info [#2714]</li>
|
||||
<li>Improve support for Snap theming [#2832]</li>
|
||||
<li>Add support for building on Haiku OS [#2859]</li>
|
||||
<li>Ctrl+PgDn now goes to the next tab and Ctrl+PgUp to the previous</li>
|
||||
<li>Fix compiling on GCC 5 / Xenial [#2990]</li>
|
||||
<li>Add .gitrev output to tarball for third-party builds [#2970]</li>
|
||||
<li>Add WITH_XC_UPDATECHECK compile flag to enable/disable the update checker [#2968]</li>
|
||||
</ul>
|
||||
</description>
|
||||
</release>
|
||||
<release version="2.4.0" date="2019-03-19">
|
||||
<description>
|
||||
<ul>
|
||||
|
@ -104,7 +104,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Startup</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Inicialització</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Start only a single instance of KeePassXC</source>
|
||||
@ -128,7 +128,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>File Management</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Gestió de fitxers</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Safely save database files (may be incompatible with Dropbox, etc)</source>
|
||||
@ -136,7 +136,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Backup database file before saving</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Fes una còpia de seguretat abans de desar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Automatically save after every change</source>
|
||||
@ -156,7 +156,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Entry Management</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Gestió d'entrades</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Use group icon on entry creation</source>
|
||||
@ -168,7 +168,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Hide the entry preview panel</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Oculta el panell de previsualització d'entrades</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>General</source>
|
||||
@ -176,7 +176,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Hide toolbar (icons)</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Oculta la barra d'eines (les icones)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Minimize instead of app exit</source>
|
||||
@ -233,11 +233,11 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Check for updates at application startup</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Comprova si hi ha actualitzacions a l'inici</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Include pre-releases when checking for updates</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Inclou versions provisionals quan es comprovi si hi ha actualitzacions</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Movable toolbar</source>
|
||||
@ -245,7 +245,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Button style</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Estil de botó</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -433,7 +433,7 @@ Seleccioneu si voleu permetre l'accés.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Ok</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>D'acord</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Cancel</source>
|
||||
@ -589,7 +589,7 @@ Please select the correct database for saving credentials.</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>&Tor Browser</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Navegador &Tor</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source><b>Warning</b>, the keepassxc-proxy application was not found!<br />Please check the KeePassXC installation directory or confirm the custom path in advanced options.<br />Browser integration WILL NOT WORK without the proxy application.<br />Expected Path: </source>
|
||||
@ -597,7 +597,7 @@ Please select the correct database for saving credentials.</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Executable Files</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Fitxers executables</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>All Files</source>
|
||||
@ -3507,7 +3507,7 @@ We recommend you use the AppImage available on our downloads page.</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Check for Updates...</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Comprova si hi ha actualitzacions...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Share entry</source>
|
||||
@ -3520,15 +3520,15 @@ Expect some bugs and minor issues, this version is not meant for production use.
|
||||
</message>
|
||||
<message>
|
||||
<source>Check for updates on startup?</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Voleu comprovar si hi ha actualitzacions a l'inici?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Would you like KeePassXC to check for updates on startup?</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Voleu que KeePassXC comprovi si hi ha actualitzacions a l'inici?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You can always check for updates manually from the application menu.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Sempre pots comprovar si hi ha actualitzacions manualment als menús de l'aplicació.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -5194,7 +5194,7 @@ Available commands:
|
||||
</message>
|
||||
<message>
|
||||
<source>Export to %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Exporta a %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Do you want to trust %1 with the fingerprint of %2 from %3?</source>
|
||||
@ -5261,7 +5261,7 @@ Available commands:
|
||||
</message>
|
||||
<message>
|
||||
<source>Closing in %1 seconds.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Tancant en %1 segons.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -5288,7 +5288,7 @@ Available commands:
|
||||
</message>
|
||||
<message>
|
||||
<source>Custom Settings</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Paràmetres a mida</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Time step:</source>
|
||||
@ -5309,7 +5309,7 @@ Available commands:
|
||||
</message>
|
||||
<message>
|
||||
<source>7 digits</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>7 dígits</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>8 digits</source>
|
||||
@ -5320,11 +5320,11 @@ Available commands:
|
||||
<name>UpdateCheckDialog</name>
|
||||
<message>
|
||||
<source>Checking for updates</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Comprovant si hi ha actualitzacions</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Checking for updates...</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Comprovant si hi ha actualitzacions...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Close</source>
|
||||
@ -5332,7 +5332,7 @@ Available commands:
|
||||
</message>
|
||||
<message>
|
||||
<source>Update Error!</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Error d'actualització!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>An error occurred in retrieving update information.</source>
|
||||
@ -5340,15 +5340,15 @@ Available commands:
|
||||
</message>
|
||||
<message>
|
||||
<source>Please try again later.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Si us plau, proveu-ho altre cop més tard.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Software Update</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Actualització de programari</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>A new version of KeePassXC is available!</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Hi ha disponible una nova versió de KeePassXC!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC %1 is now available — you have %2.</source>
|
||||
@ -5356,11 +5356,11 @@ Available commands:
|
||||
</message>
|
||||
<message>
|
||||
<source>Download it at keepassxc.org</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Descarregueu-ho a keepassxc.org</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You're up-to-date!</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Esteu actualitzats!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC %1 is currently the newest version available</source>
|
||||
@ -5395,7 +5395,7 @@ Available commands:
|
||||
</message>
|
||||
<message>
|
||||
<source>Welcome to KeePassXC %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Benvinguts/des al KeePassXC %1</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
@ -611,15 +611,15 @@ Vyberte databázi, do které chcete přihlašovací údaje uložit.</translation
|
||||
</message>
|
||||
<message>
|
||||
<source>Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Z důvodu, že software ze Snap balíčku je provozován v ohraničeném prostředí, je třeba spustit skript, který zapíná napojení na webový prohlížeč. <br />Tento skript je možné získat z %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Please see special instructions for browser extension use below</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Níže si přečtěte konkrétní pokyny pro rozšíření do webového prohlížeče</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2. %3</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Aby fungovalo napojení na prohlížeč, je třeba KeePassXC. <br /> Stáhnete ho pro %1 a %2. %3</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -696,19 +696,23 @@ Přesunuto %2 klíčů do uživatelsky určených dat.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC: Create a new group</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>KeePassXC: vytvořit novou skupinu</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>A request for creating a new group "%1" has been received.
|
||||
Do you want to create this group?
|
||||
</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Byl obdržen požadavek na vytvoření nové skupiny „%1“.
|
||||
Chcete tuto skupinu vytvořit?
|
||||
</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Your KeePassXC-Browser settings need to be moved into the database settings.
|
||||
This is necessary to maintain your current browser connections.
|
||||
Would you like to migrate your existing settings now?</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Vaše nastavení KeePassXC-Browser je třeba přesunout do nastavení databáze.
|
||||
Toto je nezbytné pro zachování vašich stávajících spojení prohlížeče.
|
||||
Chcete přenést vaše stávající nastavení nyní?</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -872,7 +876,7 @@ Would you like to migrate your existing settings now?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Key not transformed. This is a bug, please report it to the developers!</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Klíč nebyl přeměněn. Toto je chyba, nahlaste to vývojářům.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -1630,7 +1634,7 @@ Vypnout bezpečné ukládání a zkusit to znovu?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Shared group...</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Sdílená skupina…</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -2075,15 +2079,15 @@ Vypnout bezpečné ukládání a zkusit to znovu?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The export container %1 is already referenced.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Exportní kontejner %1 už je odkazován.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The import container %1 is already imported.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Importní kontejner %1 už byl naimportován.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The container %1 imported and export by different groups.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Kontejner %1 naimportován a exportován různými skupinami.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -3156,19 +3160,19 @@ Line %2, column %3</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Disabled share %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Sdílení %1 vypnuto</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Import from share %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Importovat ze sdílení %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Export to share %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Exportovat do sdílení %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Synchronize with share %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Synchronizovat se sdílením %1</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -4053,7 +4057,7 @@ Očekávejte chyby a drobné problémy, tato verze není určena pro produkční
|
||||
</message>
|
||||
<message>
|
||||
<source>Regenerate</source>
|
||||
<translation>Regenerovat</translation>
|
||||
<translation>Vytvoř nové</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -4856,7 +4860,7 @@ Příkazy k dispozici:
|
||||
</message>
|
||||
<message>
|
||||
<source>Cannot create new group</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Novou skupinu se nedaří vytvořit</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -5132,7 +5136,7 @@ Příkazy k dispozici:
|
||||
</message>
|
||||
<message>
|
||||
<source>Signer:</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Podepsal(a):</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -5255,27 +5259,27 @@ Příkazy k dispozici:
|
||||
</message>
|
||||
<message>
|
||||
<source>Multiple import source path to %1 in %2</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Popis umístění zdroje pro vícero importů do %1 v %2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Conflicting export target path %1 in %2</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Kolidující popis umístění %1 cíle exportu v %2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not embed signature: Could not open file to write (%1)</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Nedaří se zapouzdřit podpis: Soubor se nedaří otevřít pro zápis (%1)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not embed signature: Could not write file (%1)</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Nedaří se zapouzdřit podpis: Do souboru se nedaří zapsat (%1)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not embed database: Could not open file to write (%1)</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Nedaří se zapouzdřit databázi: Soubor se nedaří otevřít pro zápis (%1)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not embed database: Could not write file (%1)</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Nedaří se zapouzdřit databázi: Do souboru se nedaří zapsat (%1)</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
@ -192,7 +192,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Hide window to system tray when minimized</source>
|
||||
<translation>Fenster verstecken wenn minimiert</translation>
|
||||
<translation>Fenster verstecken, wenn minimiert</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Language</source>
|
||||
@ -293,11 +293,11 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Re-lock previously locked database after performing Auto-Type</source>
|
||||
<translation>Datenbank nach Auto-Type automatisch wieder sperren.</translation>
|
||||
<translation>Datenbank nach Auto-Type automatisch wieder sperren</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Don't require password repeat when it is visible</source>
|
||||
<translation>Keine erneute Passworteingabe verlangen, wenn das Passwort sichtbar ist.</translation>
|
||||
<translation>Keine erneute Passworteingabe verlangen, wenn das Passwort sichtbar ist</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Don't hide passwords when editing them</source>
|
||||
@ -313,7 +313,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Hide entry notes by default</source>
|
||||
<translation>Eintrags-Notizen standardmäßig verstecken</translation>
|
||||
<translation>Eintragsnotizen standardmäßig verstecken</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Privacy</source>
|
||||
@ -443,7 +443,7 @@ Bitte wählen Sie, ob Sie den Zugriff erlauben möchten.</translation>
|
||||
<source>You have multiple databases open.
|
||||
Please select the correct database for saving credentials.</source>
|
||||
<translation>Du hast mehrere Datenbanken geöffnet.
|
||||
Bitte wähle die richtige Datenbank zum speichern der Anmeldedaten.</translation>
|
||||
Bitte wähle die richtige Datenbank zum Speichern der Anmeldedaten.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -594,7 +594,7 @@ Bitte wähle die richtige Datenbank zum speichern der Anmeldedaten.</translation
|
||||
</message>
|
||||
<message>
|
||||
<source><b>Warning</b>, the keepassxc-proxy application was not found!<br />Please check the KeePassXC installation directory or confirm the custom path in advanced options.<br />Browser integration WILL NOT WORK without the proxy application.<br />Expected Path: </source>
|
||||
<translation><b>Achtung</b>, die keepassxc-proxy Anwendung wurde nicht gefunden!<br />Bitte überprüfe den KeePassXC-Ordner oder bestätige den benutzerdefinierten Ort in den erweiterten Einstellungen.<br />Die Browseranbindung wird nicht funktionieren, wenn das Proxyprogramm nicht eingebunden ist.<br />Vermuteter Pfad:</translation>
|
||||
<translation><b>Achtung</b>, die KeePassXC-Proxy Anwendung wurde nicht gefunden!<br />Bitte überprüfen Sie den KeePassXC-Ordner oder bestätigen Sie den benutzerdefinierten Ort in den erweiterten Einstellungen.<br />Die Browseranbindung wird nicht funktionieren, wenn das Proxyprogramm nicht eingebunden ist.<br />Vermuteter Pfad:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Executable Files</source>
|
||||
@ -607,19 +607,19 @@ Bitte wähle die richtige Datenbank zum speichern der Anmeldedaten.</translation
|
||||
<message>
|
||||
<source>Do not ask permission for HTTP &Basic Auth</source>
|
||||
<extracomment>An extra HTTP Basic Auth setting</extracomment>
|
||||
<translation>Nicht nach HTTP Basic Auth fragen</translation>
|
||||
<translation>Niemals fragen, bevor für "HTTP Basic Auth" auf Anmeldedaten zugegriffen wird</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Aufgrund von Snap Sandboxing müssen Sie ein Skript ausführen, um die Browser-Integration zu aktivieren.<br />Sie können dieses Skript erhalten unter %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Please see special instructions for browser extension use below</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Bitte beachten Sie die untenstehenden speziellen Anweisungen für die Verwendung der Browser-Erweiterung</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2. %3</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>KeePassXC-Browser wird für die Funktion der Browserintegration benötigt. <br />Laden Sie es für %1 und %2. %3 herunter.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -670,7 +670,7 @@ Möchten Sie diesen überschreiben?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC: Converted KeePassHTTP attributes</source>
|
||||
<translation>KeepassXC: KeePassHTTP-Attribute wurden umgewandelt</translation>
|
||||
<translation>KeePassXC: KeePassHTTP-Attribute wurden umgewandelt</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Successfully converted attributes from %1 entry(s).
|
||||
@ -696,19 +696,23 @@ Moved %2 keys to custom data.</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC: Create a new group</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>KeePassXC: Neue Gruppe erstellen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>A request for creating a new group "%1" has been received.
|
||||
Do you want to create this group?
|
||||
</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Eine Anfrage zur Erstellung einer neuen Gruppe "%1" ist eingegangen.
|
||||
Möchten Sie diese Gruppe erstellen?
|
||||
</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Your KeePassXC-Browser settings need to be moved into the database settings.
|
||||
This is necessary to maintain your current browser connections.
|
||||
Would you like to migrate your existing settings now?</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Ihre KeePassXC-Browser-Einstellungen müssen in die Datenbankeinstellungen verschoben werden.
|
||||
Dies ist notwendig, um Ihre aktuellen Browserverbindungen aufrechtzuerhalten.
|
||||
Möchten Sie Ihre bestehenden Einstellungen jetzt migrieren?</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -871,7 +875,7 @@ Would you like to migrate your existing settings now?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Key not transformed. This is a bug, please report it to the developers!</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Schlüssel nicht umgewandelt. Dies ist ein Fehler, bitte melden Sie ihn den Entwicklern!</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -1630,7 +1634,7 @@ Sicheres Speichern deaktivieren und erneut versuchen?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Shared group...</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Gemeinsame Gruppe...</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -2075,15 +2079,15 @@ Sicheres Speichern deaktivieren und erneut versuchen?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The export container %1 is already referenced.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Der Exportcontainer %1 wird bereits referenziert.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The import container %1 is already imported.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Der Importcontainer %1 ist bereits importiert.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The container %1 imported and export by different groups.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Der Container %1 wird von unterschiedlichen Gruppen importiert und exportiert.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -3154,19 +3158,19 @@ Zeile %2, Spalte %3</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Disabled share %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Freigabe %1 deaktiviert</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Import from share %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Von Freigabe %1 importieren</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Export to share %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Zu Freigabe %1 exportieren</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Synchronize with share %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Mit Freigabe %1 synchronisieren</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -3447,8 +3451,8 @@ Diese Version ist nicht für den Produktiveinsatz gedacht.</translation>
|
||||
<message>
|
||||
<source>WARNING: Your Qt version may cause KeePassXC to crash with an On-Screen Keyboard!
|
||||
We recommend you use the AppImage available on our downloads page.</source>
|
||||
<translation>WARNUNG: Deine Qt Version könnte KeePassXC mit einer Bildschirmtastatur zu abstürzen bringen!
|
||||
Wir empfehlen dir die Verwendung des auf unserer Downloadseite verfügbaren AppImage.</translation>
|
||||
<translation>WARNUNG: Deine Qt-Version könnte KeePassXC mit einer Bildschirmtastatur zu abstürzen bringen!
|
||||
Wir empfehlen die Verwendung des verfügbaren App-Images auf unserer Downloadseite.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>&Import</source>
|
||||
@ -3815,7 +3819,7 @@ Da sie Fehler beinhalten könnte, ist diese Version nicht für den Produktiveins
|
||||
</message>
|
||||
<message>
|
||||
<source><p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p></source>
|
||||
<translation><p>Ein Passwort ist die primäre Methode, Ihre Datenbank abzusichern.</p><p>Gute Passwörter sind lang und einzigartig. KeepassXC kann eins für Sie generieren.</p></translation>
|
||||
<translation><p>Ein Passwort ist die primäre Methode, Ihre Datenbank abzusichern.</p><p>Gute Passwörter sind lang und einzigartig. KeePassXC kann eins für Sie generieren.</p></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Passwords do not match.</source>
|
||||
@ -4854,7 +4858,7 @@ Verfügbare Kommandos:
|
||||
</message>
|
||||
<message>
|
||||
<source>Cannot create new group</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Neue Gruppe kann nicht erstellt werden</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -5130,7 +5134,7 @@ Verfügbare Kommandos:
|
||||
</message>
|
||||
<message>
|
||||
<source>Signer:</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Unterzeichner:</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -5177,7 +5181,7 @@ Verfügbare Kommandos:
|
||||
</message>
|
||||
<message>
|
||||
<source>Signed share container are not supported - import prevented</source>
|
||||
<translation>Unterzeichnete geteilte Container werden nicht unterstützt. Import verhindert.</translation>
|
||||
<translation>Unterzeichnete geteilte Container werden nicht unterstützt - Import verhindert</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>File is not readable</source>
|
||||
@ -5201,7 +5205,7 @@ Verfügbare Kommandos:
|
||||
</message>
|
||||
<message>
|
||||
<source>Unsigned share container are not supported - import prevented</source>
|
||||
<translation>Nicht unterzeichnete geteilte Container werden nicht unterstützt. Import verhindert.</translation>
|
||||
<translation>Nicht unterzeichnete geteilte Container werden nicht unterstützt - Import verhindert</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Successful unsigned import</source>
|
||||
@ -5213,11 +5217,11 @@ Verfügbare Kommandos:
|
||||
</message>
|
||||
<message>
|
||||
<source>Unknown share container type</source>
|
||||
<translation>Unbekannter geteilter Container-Typ</translation>
|
||||
<translation>Unbekannter geteilter Containertyp</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Overwriting signed share container is not supported - export prevented</source>
|
||||
<translation>Überschreiben von unterzeichneten geteilten Containern nicht unterstützt. Export verhindert.</translation>
|
||||
<translation>Überschreiben von unterzeichneten geteilten Containern nicht unterstützt - Export verhindert</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not write export container (%1)</source>
|
||||
@ -5225,7 +5229,7 @@ Verfügbare Kommandos:
|
||||
</message>
|
||||
<message>
|
||||
<source>Overwriting unsigned share container is not supported - export prevented</source>
|
||||
<translation>Überschreiben von nicht unterzeichneten geteilten Containern nicht unterstützt. Export verhindert.</translation>
|
||||
<translation>Überschreiben von nicht unterzeichneten geteilten Containern nicht unterstützt - Export verhindert</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not write export container</source>
|
||||
@ -5253,27 +5257,27 @@ Verfügbare Kommandos:
|
||||
</message>
|
||||
<message>
|
||||
<source>Multiple import source path to %1 in %2</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Multipler Import-Quellpfad zu %1 in %2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Conflicting export target path %1 in %2</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Konflikt beim Export-Zielpfad %1 in %2 </translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not embed signature: Could not open file to write (%1)</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Signatur konnte nicht eingebunden werden: Zum Schreiben konnte die Datei (%1) nicht geöffnet werden </translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not embed signature: Could not write file (%1)</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Signatur konnte nicht eingebunden werden: Datei konnte nicht geschrieben werden (%1)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not embed database: Could not open file to write (%1)</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Datenbank konnte nicht eingebunden werden: Zum Schreiben konnte die Datei (%1) nicht geöffnet werden </translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not embed database: Could not write file (%1)</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Datenbank konnte nicht eingebunden werden: Datei konnte nicht geschrieben werden (%1)</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -5411,7 +5415,7 @@ Verfügbare Kommandos:
|
||||
</message>
|
||||
<message>
|
||||
<source>You're up-to-date!</source>
|
||||
<translation>Version aktuel</translation>
|
||||
<translation>Version aktuell</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC %1 is currently the newest version available</source>
|
||||
|
@ -112,18 +112,6 @@
|
||||
<source>Start only a single instance of KeePassXC</source>
|
||||
<translation>Start only a single instance of KeePassXC</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Remember last databases</source>
|
||||
<translation>Remember last databases</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Remember last key files and security dongles</source>
|
||||
<translation>Remember last key files and security dongles</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Load previous databases on startup</source>
|
||||
<translation>Load previous databases on startup</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Minimize window at application startup</source>
|
||||
<translation>Minimize window at application startup</translation>
|
||||
@ -196,10 +184,6 @@
|
||||
<source>Hide window to system tray when minimized</source>
|
||||
<translation>Hide window to system tray when minimized</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Language</source>
|
||||
<translation>Language</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Auto-Type</source>
|
||||
<translation>Auto-Type</translation>
|
||||
@ -233,21 +217,41 @@
|
||||
<source>Auto-Type start delay</source>
|
||||
<translation>Auto-Type start delay</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Check for updates at application startup</source>
|
||||
<translation>Check for updates at application startup</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Include pre-releases when checking for updates</source>
|
||||
<translation>Include pre-releases when checking for updates</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Movable toolbar</source>
|
||||
<translation>Movable toolbar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Button style</source>
|
||||
<translation>Button style</translation>
|
||||
<source>Remember previously used databases</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Load previously open databases on startup</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Remember database key files and security dongles</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Check for updates at application startup once per week</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Include beta releases when checking for updates</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Button style:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Language:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>(restart program to activate)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -623,6 +627,10 @@ Please select the correct database for saving credentials.</translation>
|
||||
<source>KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2. %3</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>&Brave</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>BrowserService</name>
|
||||
@ -891,6 +899,11 @@ Would you like to migrate your existing settings now?</source>
|
||||
<source>Key not transformed. This is a bug, please report it to the developers!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1
|
||||
Backup database located at %2</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseOpenDialog</name>
|
||||
@ -960,16 +973,12 @@ Please consider generating a new key file.</translation>
|
||||
<translation>TouchID for quick unlock</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to open the database:
|
||||
%1</source>
|
||||
<translation>Unable to open the database:
|
||||
%1</translation>
|
||||
<source>Failed to open key file: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Can't open key file:
|
||||
%1</source>
|
||||
<translation>Can't open key file:
|
||||
%1</translation>
|
||||
<source>Select slot...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -1458,10 +1467,6 @@ This is definitely a bug, please report it to the developers.</source>
|
||||
<translation>The created database has no key or KDF, refusing to save it.
|
||||
This is definitely a bug, please report it to the developers.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The database file does not exist or is not accessible.</source>
|
||||
<translation>The database file does not exist or is not accessible.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Select CSV file</source>
|
||||
<translation>Select CSV file</translation>
|
||||
@ -1485,6 +1490,10 @@ This is definitely a bug, please report it to the developers.</translation>
|
||||
<comment>Database tab name modifier</comment>
|
||||
<translation>%1 [Read-only]</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Failed to open %1. It either does not exist or is not accessible.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseWidget</name>
|
||||
@ -1629,12 +1638,6 @@ Error: %1</translation>
|
||||
Disable safe saves and try again?</source>
|
||||
<translation>KeePassXC has failed to save the database multiple times. This is likely caused by file sync services holding a lock on the save file.
|
||||
Disable safe saves and try again?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Writing the database failed.
|
||||
%1</source>
|
||||
<translation>Writing the database failed.
|
||||
%1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Passwords</source>
|
||||
@ -1683,6 +1686,10 @@ Disable safe saves and try again?</translation>
|
||||
<source>Shared group...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Writing the database failed: %1</source>
|
||||
<translation type="unfinished">Writing the database failed: %1</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EditEntryWidget</name>
|
||||
@ -1885,6 +1892,14 @@ Disable safe saves and try again?</translation>
|
||||
<source>Use a specific sequence for this association:</source>
|
||||
<translation>Use a specific sequence for this association:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Open AutoType help webpage</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>AutoType help button</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EditEntryWidgetHistory</name>
|
||||
@ -2054,6 +2069,10 @@ Disable safe saves and try again?</translation>
|
||||
<source>Inherit from parent group (%1)</source>
|
||||
<translation>Inherit from parent group (%1)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Entry has unsaved changes</source>
|
||||
<translation type="unfinished">Entry has unsaved changes</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EditGroupWidgetKeeShare</name>
|
||||
@ -2081,34 +2100,6 @@ Disable safe saves and try again?</translation>
|
||||
<source>Inactive</source>
|
||||
<translation>Inactive</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Import from path</source>
|
||||
<translation>Import from path</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Export to path</source>
|
||||
<translation>Export to path</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Synchronize with path</source>
|
||||
<translation>Synchronize with path</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Your KeePassXC version does not support sharing your container type. Please use %1.</source>
|
||||
<translation>Your KeePassXC version does not support sharing your container type. Please use %1.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Database sharing is disabled</source>
|
||||
<translation>Database sharing is disabled</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Database export is disabled</source>
|
||||
<translation>Database export is disabled</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Database import is disabled</source>
|
||||
<translation>Database import is disabled</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeeShare unsigned container</source>
|
||||
<translation>KeeShare unsigned container</translation>
|
||||
@ -2134,15 +2125,45 @@ Disable safe saves and try again?</translation>
|
||||
<translation type="unfinished">Clear</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The export container %1 is already referenced.</source>
|
||||
<source>Import</source>
|
||||
<translation type="unfinished">Import</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Export</source>
|
||||
<translation type="unfinished">Export</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Synchronize</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The import container %1 is already imported.</source>
|
||||
<source>Your KeePassXC version does not support sharing this container type.
|
||||
Supported extensions are: %1.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The container %1 imported and export by different groups.</source>
|
||||
<source>%1 is already being exported by this database.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1 is already being imported by this database.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1 is being imported and exported by different groups in this database.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeeShare is currently disabled. You can enable import/export in the application settings.</source>
|
||||
<comment>KeeShare is a proper noun</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Database export is currently disabled by application settings.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Database import is currently disabled by application settings.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
@ -2668,10 +2689,6 @@ This may cause the affected plugins to malfunction.</translation>
|
||||
<source>Unable to issue challenge-response.</source>
|
||||
<translation>Unable to issue challenge-response.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Wrong key or database file is corrupt.</source>
|
||||
<translation>Wrong key or database file is corrupt.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>missing database headers</source>
|
||||
<translation>missing database headers</translation>
|
||||
@ -2692,6 +2709,11 @@ This may cause the affected plugins to malfunction.</translation>
|
||||
<source>Invalid header data length</source>
|
||||
<translation>Invalid header data length</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Invalid credentials were provided, please try again.
|
||||
If this reoccurs, then your database file may be corrupt.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Kdbx3Writer</name>
|
||||
@ -2722,10 +2744,6 @@ This may cause the affected plugins to malfunction.</translation>
|
||||
<source>Header SHA256 mismatch</source>
|
||||
<translation>Header SHA256 mismatch</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Wrong key or database file is corrupt. (HMAC mismatch)</source>
|
||||
<translation>Wrong key or database file is corrupt. (HMAC mismatch)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unknown cipher</source>
|
||||
<translation>Unknown cipher</translation>
|
||||
@ -2826,6 +2844,15 @@ This may cause the affected plugins to malfunction.</translation>
|
||||
<extracomment>Translation: variant map = data structure for storing meta data</extracomment>
|
||||
<translation>Invalid variant map field type size</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Invalid credentials were provided, please try again.
|
||||
If this reoccurs, then your database file may be corrupt.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>(HMAC mismatch)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Kdbx4Writer</name>
|
||||
@ -3111,10 +3138,6 @@ Line %2, column %3</translation>
|
||||
<source>Unable to calculate master key</source>
|
||||
<translation>Unable to calculate master key</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Wrong key or database file is corrupt.</source>
|
||||
<translation>Wrong key or database file is corrupt.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Key transformation failed</source>
|
||||
<translation>Key transformation failed</translation>
|
||||
@ -3211,39 +3234,56 @@ Line %2, column %3</translation>
|
||||
<source>unable to seek to content position</source>
|
||||
<translation>unable to seek to content position</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Invalid credentials were provided, please try again.
|
||||
If this reoccurs, then your database file may be corrupt.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>KeeShare</name>
|
||||
<message>
|
||||
<source>Disabled share</source>
|
||||
<translation>Disabled share</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Import from</source>
|
||||
<translation>Import from</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Export to</source>
|
||||
<translation>Export to</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Synchronize with</source>
|
||||
<translation>Synchronize with</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Disabled share %1</source>
|
||||
<source>Invalid sharing reference</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Import from share %1</source>
|
||||
<source>Inactive share %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Export to share %1</source>
|
||||
<source>Imported from %1</source>
|
||||
<translation type="unfinished">Imported from %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Exported to %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Synchronize with share %1</source>
|
||||
<source>Synchronized with %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Import is disabled in settings</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Export is disabled in settings</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Inactive share</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Imported from</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Exported to</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Synchronized with</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
@ -4939,6 +4979,84 @@ Available commands:
|
||||
<source>Cannot create new group</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Deactivate password key for the database.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Displays debugging information.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Deactivate password key for the database to merge from.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Version %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Build Type: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Revision: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Distribution: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Debugging mode is disabled.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Debugging mode is enabled.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Operating system: %1
|
||||
CPU architecture: %2
|
||||
Kernel: %3 %4</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Auto-Type</source>
|
||||
<translation type="unfinished">Auto-Type</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeeShare (signed and unsigned sharing)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeeShare (only signed sharing)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeeShare (only unsigned sharing)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>YubiKey</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>TouchID</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>None</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enabled extensions:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Cryptographic libraries:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QtIOCompressor</name>
|
||||
|
@ -50,7 +50,7 @@
|
||||
<name>AgentSettingsWidget</name>
|
||||
<message>
|
||||
<source>Enable SSH Agent (requires restart)</source>
|
||||
<translation>Habilitar el Agente SSH (requiere reinicio)</translation>
|
||||
<translation>Habilitar el Agente de SSH (requiere reinicio)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Use OpenSSH for Windows instead of Pageant</source>
|
||||
@ -184,7 +184,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Show a system tray icon</source>
|
||||
<translation>Mostrar icono en la bandeja de del sistema</translation>
|
||||
<translation>Mostrar icono en la bandeja del sistema</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Dark system tray icon</source>
|
||||
@ -204,11 +204,11 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Use entry title to match windows for global Auto-Type</source>
|
||||
<translation>Use título de entrada para acertar ventanas en Auto-Tipeado global.</translation>
|
||||
<translation>Use título de entrada para acertar ventanas en Auto-Escritura global.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Use entry URL to match windows for global Auto-Type</source>
|
||||
<translation>Use URL para acertar ventanas en Auto-Tipedo global</translation>
|
||||
<translation>Use URL para acertar ventanas en Auto-Escritura global</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Always ask before performing Auto-Type</source>
|
||||
@ -340,7 +340,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>The Syntax of your Auto-Type statement is incorrect!</source>
|
||||
<translation>¡La sintaxis de la declaración de su auto-escritura es incorrecta!</translation>
|
||||
<translation>¡La sintaxis de la declaración de su Auto-Escritura es incorrecta!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>This Auto-Type command contains a very long delay. Do you really want to proceed?</source>
|
||||
@ -404,7 +404,7 @@
|
||||
<name>BrowserAccessControlDialog</name>
|
||||
<message>
|
||||
<source>KeePassXC-Browser Confirm Access</source>
|
||||
<translation>KeePassXC-Navegador Confirmar Acceso</translation>
|
||||
<translation>KeePassXC-Browser Confirmar Acceso</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Remember this decision</source>
|
||||
@ -454,7 +454,7 @@ Por favor, seleccione la base de datos correcta para guardar las credenciales.</
|
||||
</message>
|
||||
<message>
|
||||
<source>This is required for accessing your databases with KeePassXC-Browser</source>
|
||||
<translation>Esto es necesario para acceder a las bases de datos con KeePassXC-Navegador</translation>
|
||||
<translation>Esto es necesario para acceder a las bases de datos con KeePassXC-Browser</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enable KeepassXC browser integration</source>
|
||||
@ -611,15 +611,15 @@ Por favor, seleccione la base de datos correcta para guardar las credenciales.</
|
||||
</message>
|
||||
<message>
|
||||
<source>Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Debido al modo aislado de Snap, debes ejecutar un código para permitir la integración con el navegador.<br/>Puedes obtener este código desde %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Please see special instructions for browser extension use below</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Por favor ve las instrucciones especiales para el uso de extensiones del navegador debajo.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2. %3</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>KeePassXC-Browser es necesario para que la integración con el navegador funcione. <br />Descárguelo para %1 y %2. %3</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -697,19 +697,23 @@ Movió %2 claves a datos personalizados.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC: Create a new group</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>KeePassXC: Crear un grupo nuevo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>A request for creating a new group "%1" has been received.
|
||||
Do you want to create this group?
|
||||
</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Una solicitud para crear un nuevo grupo "%1" se ha recibido.
|
||||
¿Quiere crear este grupo?
|
||||
</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Your KeePassXC-Browser settings need to be moved into the database settings.
|
||||
This is necessary to maintain your current browser connections.
|
||||
Would you like to migrate your existing settings now?</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Sus configuraciones de KeePassXC-Browser necesitan moverse a las configuraciones de base de datos.
|
||||
Es necesario para mantener sus conexiones presentes del navegador.
|
||||
¿Le gustaría migrar sus configuraciones existentes ahora?</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -873,7 +877,7 @@ Would you like to migrate your existing settings now?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Key not transformed. This is a bug, please report it to the developers!</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Llave no está transformada. Esto es un bug, por favor, ¡informe sobre él a los desarrolladores!</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -1006,7 +1010,7 @@ Considere generar un nuevo archivo llave.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Move KeePassHTTP attributes to KeePassXC-Browser &custom data</source>
|
||||
<translation>Mueva los atributos de KeePassHTTP a los datos &personalizados de KeePassXC-Browser</translation>
|
||||
<translation>Mover los atributos de KeePassHTTP a los datos &personalizados de KeePassXC-Browser</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Stored keys</source>
|
||||
@ -1631,7 +1635,7 @@ Disable safe saves and try again?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Shared group...</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Grupo compartido...</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -2076,15 +2080,15 @@ Disable safe saves and try again?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>The export container %1 is already referenced.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>El contenedor de exportación %1 ya es referenciado.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The import container %1 is already imported.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>El contenedor de importación %1 ya es importado.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The container %1 imported and export by different groups.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>El contenedor %1 se importa y se exporta por grupos diferentes.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -2928,7 +2932,7 @@ Esta migración es en único sentido. No podrá abrir la base de datos importada
|
||||
</message>
|
||||
<message>
|
||||
<source>Auto-type association window or sequence missing</source>
|
||||
<translation>Falta de secuencia o ventana de Asociación de auto-tipeado</translation>
|
||||
<translation>Falta de secuencia o ventana de asociación de Auto-Escritura</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Invalid bool value</source>
|
||||
@ -3155,19 +3159,19 @@ Linea %2, columna %3</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Disabled share %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Deshabilitada cuota %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Import from share %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Importar de cuota %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Export to share %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Exportar a cuota %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Synchronize with share %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Sincronizar con cuota %1</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -3518,7 +3522,7 @@ Le recomendamos que utilice la AppImage disponible en nuestra página de descarg
|
||||
</message>
|
||||
<message>
|
||||
<source>Perform &Auto-Type</source>
|
||||
<translation>Relizar &Auto-Escritura</translation>
|
||||
<translation>Realizar &Auto-Escritura</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Open &URL</source>
|
||||
@ -4205,7 +4209,7 @@ Espere algunos errores y problemas menores, esta versión no está destinada par
|
||||
</message>
|
||||
<message>
|
||||
<source>Path of the entry to add.</source>
|
||||
<translation>Camino de la entrada para añadir.</translation>
|
||||
<translation>Ruta de la entrada para añadir.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy an entry's password to the clipboard.</source>
|
||||
@ -4214,7 +4218,7 @@ Espere algunos errores y problemas menores, esta versión no está destinada par
|
||||
<message>
|
||||
<source>Path of the entry to clip.</source>
|
||||
<comment>clip = copy to clipboard</comment>
|
||||
<translation>Camino de la entrada para copiar.</translation>
|
||||
<translation>Ruta de la entrada para copiar.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Timeout in seconds before clearing the clipboard.</source>
|
||||
@ -4234,7 +4238,7 @@ Espere algunos errores y problemas menores, esta versión no está destinada par
|
||||
</message>
|
||||
<message>
|
||||
<source>Path of the entry to edit.</source>
|
||||
<translation>Camino de la entrada para editar.</translation>
|
||||
<translation>Ruta de la entrada para editar.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Estimate the entropy of a password.</source>
|
||||
@ -4805,7 +4809,7 @@ Comandos disponibles:
|
||||
</message>
|
||||
<message>
|
||||
<source>Path of the entry to remove.</source>
|
||||
<translation>Camino de la entrada a quitar.</translation>
|
||||
<translation>Ruta de la entrada a quitar.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Existing single-instance lock file is invalid. Launching new instance.</source>
|
||||
@ -4857,7 +4861,7 @@ Comandos disponibles:
|
||||
</message>
|
||||
<message>
|
||||
<source>Cannot create new group</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>No se puede crear el nuevo grupo</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -5133,7 +5137,7 @@ Comandos disponibles:
|
||||
</message>
|
||||
<message>
|
||||
<source>Signer:</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Firmante:</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -5256,27 +5260,27 @@ Comandos disponibles:
|
||||
</message>
|
||||
<message>
|
||||
<source>Multiple import source path to %1 in %2</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Ruta de origen de importación múltiple a %1 en %2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Conflicting export target path %1 in %2</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Ruta de destino de exportación contradictoria %1 en %2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not embed signature: Could not open file to write (%1)</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>No se puede incrustar la firma: no se puede abrir el archivo para escribir (%1)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not embed signature: Could not write file (%1)</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>No se puede incrustar la firma: no se puede escribir el archivo (%1)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not embed database: Could not open file to write (%1)</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>No se puede incrustar la base de datos: no se puede abrir el archivo para escribir (%1)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not embed database: Could not write file (%1)</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>No se puede incrustar la base de datos: no se puede escribir el archivo (%1)</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
@ -611,15 +611,15 @@ Valitse oikea tietokanta tietueen tallentamiseksi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Snap:in hiekkalaatikon takia sinun täytyy suorittaa komentosarja jotta voit aktivoida selainintegraation.<br />Voit ladata komentosarjan osoitteesta %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Please see special instructions for browser extension use below</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Katso yksityiskohtaisemmat ohjeet selainlaajennuksen käyttöön alta</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2. %3</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>KeePassXC-Browser tarvitaan selainintegraation toimimista varten.<br />Dataa se seuraaville selaimille: %1 ja %2. %3</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -695,19 +695,22 @@ Siirrettiin %2 avainta mukautettuihin tietoihin.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC: Create a new group</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>KeePassXC: Luo uusi ryhmä</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>A request for creating a new group "%1" has been received.
|
||||
Do you want to create this group?
|
||||
</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Vastaanotettiin pyyntö luoda uusi ryhmä "%1".
|
||||
Haluatko varmasti luoda tämän ryhmän?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Your KeePassXC-Browser settings need to be moved into the database settings.
|
||||
This is necessary to maintain your current browser connections.
|
||||
Would you like to migrate your existing settings now?</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>KeePassXC-Browser:in asetukset täytyy siirtää tietokannan asetuksiin.
|
||||
Tämä on välttämätöntä, jotta yhteys selainlaajennukseen säilyy muuttumattomana.
|
||||
Haluat siirtää asetukset nyt?</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -871,7 +874,7 @@ Would you like to migrate your existing settings now?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Key not transformed. This is a bug, please report it to the developers!</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Avainmuunnosta ei voitu suorittaa. Ole hyvä ja ilmoita tästä virheestä sovelluksen kehittäjille.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -1630,7 +1633,7 @@ Ota turvallinen tallennus pois käytöstä ja yritä uudelleen?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Shared group...</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Jaettu ryhmä...</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -2075,15 +2078,15 @@ Ota turvallinen tallennus pois käytöstä ja yritä uudelleen?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The export container %1 is already referenced.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Vientisäiliöön %1 on jo viitattu.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The import container %1 is already imported.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Tuontisäiliö %1 on jo tuotu.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The container %1 imported and export by different groups.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Säiliö %1 on tuotu ja viety eri ryhmien perusteella.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -3154,19 +3157,19 @@ Rivi %2, sarake %3</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Disabled share %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Jako %1 otettu pois käytöstä</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Import from share %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Tuo jaosta %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Export to share %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Vie jaosta %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Synchronize with share %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Synkronoi jaon %1 kanssa</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -4855,7 +4858,7 @@ Käytettävissä olevat komennot:
|
||||
</message>
|
||||
<message>
|
||||
<source>Cannot create new group</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Uutta ryhmää ei voitu luoda</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -5131,7 +5134,7 @@ Käytettävissä olevat komennot:
|
||||
</message>
|
||||
<message>
|
||||
<source>Signer:</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Allekirjoittaja:</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -5250,31 +5253,31 @@ Käytettävissä olevat komennot:
|
||||
</message>
|
||||
<message>
|
||||
<source>Do you want to trust %1 with the fingerprint of %2 from %3?</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Haluatko luottaa kohteeseen %1 sormenjäljellä %2, joka on peräisin kohteesta %3? {1 ?} {2 ?}</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Multiple import source path to %1 in %2</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Useampi lähde kohteeseen %1 tuonnissa %2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Conflicting export target path %1 in %2</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Ristiriita viennin %2 kohdepolussa %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not embed signature: Could not open file to write (%1)</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Allekirjoitusta ei voitu sisällyttää: Tiedostoa ei voitu avata kirjoitusta varten (%1)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not embed signature: Could not write file (%1)</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Allekirjoitusta ei voitu sisällyttää: Tiedostoon kirjoitus epäonnistui (%1)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not embed database: Could not open file to write (%1)</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Tietokantaa ei voitu sisällyttää: Tiedostoa ei voitu avata kirjoitusta varten (%1)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not embed database: Could not write file (%1)</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Tietokantaa ei voitu sisällyttää: Tiedostoon kirjoitus epäonnistui (%1)</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
@ -615,11 +615,11 @@ Veuillez sélectionner la base de donnée souhaitée pour enregistrer les identi
|
||||
</message>
|
||||
<message>
|
||||
<source>Please see special instructions for browser extension use below</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Veuillez regarder les instructions spéciales pour l'extension du navigateur utilisé ci-dessous</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2. %3</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>KeePassXC-Browser est nécessaire pour que l'intégration au navigateur fonctionne. <br />Téléchargez-le pour %1 et%2. %3</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -696,13 +696,15 @@ Moved %2 keys to custom data.</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC: Create a new group</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>KeePassXC : Créer un nouveau groupe</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>A request for creating a new group "%1" has been received.
|
||||
Do you want to create this group?
|
||||
</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Une demande de création pour un nouveau groupe "%1" a été reçue.
|
||||
Voulez-vous créer ce groupe ?
|
||||
</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Your KeePassXC-Browser settings need to be moved into the database settings.
|
||||
@ -1628,7 +1630,7 @@ Désactiver les enregistrements sécurisés et ressayer ?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Shared group...</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Groupe partagé ...</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -2033,7 +2035,7 @@ Désactiver les enregistrements sécurisés et ressayer ?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Your KeePassXC version does not support sharing your container type. Please use %1.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Votre version de KeePassXC ne supporte pas le partage de ce type de conteneur. Veuillez utiliser %1.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Database sharing is disabled</source>
|
||||
@ -2073,15 +2075,15 @@ Désactiver les enregistrements sécurisés et ressayer ?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The export container %1 is already referenced.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Le conteneur d'export %1 est déjà référencé.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The import container %1 is already imported.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Le conteneur d'import %1 est déjà importé.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The container %1 imported and export by different groups.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Le conteneur %1 est importé et exporté par des groupes différents.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -3151,19 +3153,19 @@ Ligne %2, colonne %3</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Disabled share %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Partage %1 désactivé</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Import from share %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Importer du partage %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Export to share %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Exporter vers le partage %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Synchronize with share %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Synchroniser avec le partage %1</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -4685,7 +4687,7 @@ Commandes disponibles :
|
||||
</message>
|
||||
<message>
|
||||
<source>Successfully recycled entry %1.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Entrée %1 recyclée avec succès.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Successfully deleted entry %1.</source>
|
||||
@ -4783,7 +4785,7 @@ Commandes disponibles :
|
||||
</message>
|
||||
<message>
|
||||
<source>Insert password to encrypt database (Press enter to leave blank): </source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Introduire le mot de passe pour chiffrer la base de données (Presser retour pour laisser vide) :</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Creating KeyFile %1 failed: %2</source>
|
||||
@ -4851,7 +4853,7 @@ Commandes disponibles :
|
||||
</message>
|
||||
<message>
|
||||
<source>Cannot create new group</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Impossible de créer de nouveau groupe</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -4943,7 +4945,7 @@ Commandes disponibles :
|
||||
</message>
|
||||
<message>
|
||||
<source>exclude term from results</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>exclure le terme des résultats</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>match term exactly</source>
|
||||
@ -4951,7 +4953,7 @@ Commandes disponibles :
|
||||
</message>
|
||||
<message>
|
||||
<source>use regex in term</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>utiliser les expressions régulières dans le terminal</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Fields</source>
|
||||
@ -5107,7 +5109,7 @@ Commandes disponibles :
|
||||
</message>
|
||||
<message>
|
||||
<source>KeeShare key file</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>fichier-clé KeeShare</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>All files</source>
|
||||
@ -5134,7 +5136,7 @@ Commandes disponibles :
|
||||
<name>ShareObserver</name>
|
||||
<message>
|
||||
<source>Import from container without signature</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Importer depuis le conteneur sans signature</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>We cannot verify the source of the shared container because it is not signed. Do you really want to import from %1?</source>
|
||||
@ -5142,7 +5144,7 @@ Commandes disponibles :
|
||||
</message>
|
||||
<message>
|
||||
<source>Import from container with certificate</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Importer depuis le conteneur avec certificat</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Not this time</source>
|
||||
@ -5234,15 +5236,15 @@ Commandes disponibles :
|
||||
</message>
|
||||
<message>
|
||||
<source>Export to %1 failed (%2)</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Échec de l'export vers %1 (%2)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Export to %1 successful (%2)</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Réussite de l'export vers %1 (%2)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Export to %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Exporter vers %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Do you want to trust %1 with the fingerprint of %2 from %3?</source>
|
||||
|
@ -611,15 +611,15 @@ Válassza ki a helyes adatbázist a hitelesítő adatok mentéséhez.</translati
|
||||
</message>
|
||||
<message>
|
||||
<source>Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>A Snap homokozó miatt egy parancsfájlt kell futtatni a böngészőintegráció engedélyezéséhez.<br />Ezt innen szerezheti be: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Please see special instructions for browser extension use below</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Olvassa el a böngészőkiegészítő használatáról szóló különleges utasításokat alább</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2. %3</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>A böngészőintegráció működéséhez a KeePassXC-böngészőre van szükség. <br />Letölthető ezen böngészőkre: %1 és %2. %3</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -695,19 +695,22 @@ Moved %2 keys to custom data.</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC: Create a new group</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>KeePassXC: Új csoport létrehozása</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>A request for creating a new group "%1" has been received.
|
||||
Do you want to create this group?
|
||||
</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Az új „%1” csoport létrehozási kérése fogadva.
|
||||
Biztos, hogy létrehozza ezt a csoportot?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Your KeePassXC-Browser settings need to be moved into the database settings.
|
||||
This is necessary to maintain your current browser connections.
|
||||
Would you like to migrate your existing settings now?</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>A KeePassXC-Browser beállításait át kell helyezni az adatbázis-beállításokba.
|
||||
Ez szükséges a jelenlegi böngészőkapcsolatok fenntartásához.
|
||||
Biztos, hogy migrálja most a meglévő beállításokat?</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -871,7 +874,7 @@ Would you like to migrate your existing settings now?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Key not transformed. This is a bug, please report it to the developers!</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>A kulcs nincs átalakítva. Ez egy hiba, jelezze a fejlesztőknek!</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -1531,7 +1534,7 @@ Egyesíti a módosításokat?</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<source>Delete entry(s)?</source>
|
||||
<translation><numerusform>Törli az bejegyzést?</numerusform><numerusform>Törli az bejegyzéseket?</numerusform></translation>
|
||||
<translation><numerusform>Törli a bejegyzést?</numerusform><numerusform>Törli a bejegyzéseket?</numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<source>Move entry(s) to recycle bin?</source>
|
||||
@ -1601,11 +1604,11 @@ Letiltható a biztonságos mentés és úgy megkísérelhető a mentés?</transl
|
||||
</message>
|
||||
<message>
|
||||
<source>Replace references to entry?</source>
|
||||
<translation>Lecserélhető a bejegyzésre való hivatkozás?</translation>
|
||||
<translation>Lecseréli a bejegyzésre mutató hivatkozásokat?</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<source>Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway?</source>
|
||||
<translation><numerusform>A(z) „%1” bejegyzésnek van %2 hivatkozása. Felül lehet írni a hivatkozást az értékekkel, vagy legyen átugorva, ill. legyen mindenképpen törölve?</numerusform><numerusform>A(z) „%1” bejegyzésnek van %2 hivatkozása. Felül lehet írni a hivatkozásokat az értékekkel, vagy legyenek átugorva, ill. legyenek mindenképpen törölve?</numerusform></translation>
|
||||
<translation><numerusform>A(z) „%1” bejegyzésnek van %2 hivatkozása. Felülírja a hivatkozásokat az értékekkel, átugorja a bejegyzést, vagy törli mindenképp?</numerusform><numerusform>A(z) „%1” bejegyzésnek van %2 hivatkozása. Felülírja a hivatkozásokat az értékekkel, átugorja a bejegyzést, vagy törli mindenképp?</numerusform></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Delete group</source>
|
||||
@ -1613,11 +1616,11 @@ Letiltható a biztonságos mentés és úgy megkísérelhető a mentés?</transl
|
||||
</message>
|
||||
<message>
|
||||
<source>Move group to recycle bin?</source>
|
||||
<translation>Legyen a csoport áthelyezve a kukába?</translation>
|
||||
<translation>Áthelyezi a csoportot a kukába?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Do you really want to move the group "%1" to the recycle bin?</source>
|
||||
<translation>Valóban legyen a(z) „%1” csoport áthelyezve a kukába?</translation>
|
||||
<translation>Valóban áthelyezi a(z) „%1” csoportok a kukába?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Successfully merged the database files.</source>
|
||||
@ -1629,7 +1632,7 @@ Letiltható a biztonságos mentés és úgy megkísérelhető a mentés?</transl
|
||||
</message>
|
||||
<message>
|
||||
<source>Shared group...</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Megosztott csoport…</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -1798,7 +1801,7 @@ Letiltható a biztonságos mentés és úgy megkísérelhető a mentés?</transl
|
||||
</message>
|
||||
<message>
|
||||
<source>Inherit default Auto-Type sequence from the &group</source>
|
||||
<translation>Az alapértelmezett automatikus beírási sorrend öröklése a cso&porttól</translation>
|
||||
<translation>Az alapértelmezett automatikus beírási sorrend öröklése a &csoporttól</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>&Use custom Auto-Type sequence:</source>
|
||||
@ -2074,15 +2077,15 @@ Letiltható a biztonságos mentés és úgy megkísérelhető a mentés?</transl
|
||||
</message>
|
||||
<message>
|
||||
<source>The export container %1 is already referenced.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>A(z) %1 exportálása konténerre már van hivatkozás.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The import container %1 is already imported.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>A(z) %1 importálási konténer már be lett importálva.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The container %1 imported and export by different groups.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>A(z) %1 konténer importálva, és exportálás különböző csoportoknak.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -3153,19 +3156,19 @@ Line %2, column %3</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Disabled share %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>%1 megosztás letiltva</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Import from share %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Importálás a(z) %1 megosztásból</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Export to share %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Exportálás a(z) %1 megosztásba</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Synchronize with share %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Szinkronizálás a(z) %1 megosztásssal</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -3285,11 +3288,11 @@ Message: %2</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>E&ntries</source>
|
||||
<translation>Be&jegyzések</translation>
|
||||
<translation>&Bejegyzések</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>&Groups</source>
|
||||
<translation>Cso&portok</translation>
|
||||
<translation>&Csoportok</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>&Tools</source>
|
||||
@ -4852,7 +4855,7 @@ Elérhető parancsok:
|
||||
</message>
|
||||
<message>
|
||||
<source>Cannot create new group</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Nem hozható létre új csoport</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -5128,7 +5131,7 @@ Elérhető parancsok:
|
||||
</message>
|
||||
<message>
|
||||
<source>Signer:</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Aláíró:</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -5251,27 +5254,27 @@ Elérhető parancsok:
|
||||
</message>
|
||||
<message>
|
||||
<source>Multiple import source path to %1 in %2</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Több importálási forrásútvonal ehhez: %1, itt: %2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Conflicting export target path %1 in %2</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Ütköző %1 exportálási célútvonal itt: %2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not embed signature: Could not open file to write (%1)</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Az aláírás nem ágyazható be: A fájl nem nyitható meg írásra (%1)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not embed signature: Could not write file (%1)</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Az aláírás nem ágyazható be: A fájl nem írható (%1)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not embed database: Could not open file to write (%1)</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Az adatbázis nem ágyazható be: A fájl nem nyitható meg írásra (%1)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not embed database: Could not write file (%1)</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Az adatbázis nem ágyazható be: A fájl nem írható (%1)</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
@ -180,7 +180,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Minimize instead of app exit</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>sembunyikan jendela ke baki sistem</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show a system tray icon</source>
|
||||
@ -614,7 +614,7 @@ Please select the correct database for saving credentials.</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Please see special instructions for browser extension use below</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Lihat instruksi untuk penggunaan browser extension</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2. %3</source>
|
||||
|
@ -611,15 +611,15 @@ Please select the correct database for saving credentials.</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Snap によってサンドボックス化されているため、ブラウザー統合を有効にするにはスクリプトを実行する必要があります。<br />スクリプトは次の場所から入手できます: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Please see special instructions for browser extension use below</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>ブラウザー拡張機能を使用するための次の手順を参照してください</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2. %3</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>ブラウザー統合の動作には KeePassXC-Browser が必要です。<br />KeePassXC-Browser は %1 用と %2 用の2種類あります。%3</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -676,11 +676,11 @@ Do you want to overwrite it?</source>
|
||||
<source>Successfully converted attributes from %1 entry(s).
|
||||
Moved %2 keys to custom data.</source>
|
||||
<translation>%1 個のエントリーから属性を正常に変換しました。
|
||||
%2 個のキーをカスタムデータに移行しました。</translation>
|
||||
%2 個のキーをカスタムデータに移動しました。</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<source>Successfully moved %n keys to custom data.</source>
|
||||
<translation><numerusform>%n 個のキーを正常にカスタムデータに移行しました。</numerusform></translation>
|
||||
<translation><numerusform>%n 個のキーを正常にカスタムデータに移動しました。</numerusform></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC: No entry with KeePassHTTP attributes found!</source>
|
||||
@ -696,19 +696,23 @@ Moved %2 keys to custom data.</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC: Create a new group</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>KeePassXC: 新しいグループを作成</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>A request for creating a new group "%1" has been received.
|
||||
Do you want to create this group?
|
||||
</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>新しいグループ "%1" の作成要求を受け取りました。
|
||||
このグループを作成しますか?
|
||||
</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Your KeePassXC-Browser settings need to be moved into the database settings.
|
||||
This is necessary to maintain your current browser connections.
|
||||
Would you like to migrate your existing settings now?</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>KeePassXC-Browser の設定をデータベース設定内に移動する必要があります。
|
||||
これはブラウザーとの接続を維持するのに必要です。
|
||||
既存の設定を移動しますか?</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -872,7 +876,7 @@ Would you like to migrate your existing settings now?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Key not transformed. This is a bug, please report it to the developers!</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>キーは変換されません。これはバグなので、開発者への報告をお願いします。</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -1005,7 +1009,7 @@ Please consider generating a new key file.</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Move KeePassHTTP attributes to KeePassXC-Browser &custom data</source>
|
||||
<translation>KeePassHTTP の属性を KeePassXC-Browser のカスタムデータに移行する(&C)</translation>
|
||||
<translation>KeePassHTTP の属性を KeePassXC-Browser のカスタムデータに移動する(&C)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Stored keys</source>
|
||||
@ -1631,7 +1635,7 @@ Disable safe saves and try again?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Shared group...</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>共有グループ...</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -2076,11 +2080,11 @@ Disable safe saves and try again?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>The export container %1 is already referenced.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>エクスポートするコンテナ %1 は既に参照されています。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The import container %1 is already imported.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>インポートするコンテナ %1 は既にインポートされています。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The container %1 imported and export by different groups.</source>
|
||||
@ -4856,7 +4860,7 @@ Available commands:
|
||||
</message>
|
||||
<message>
|
||||
<source>Cannot create new group</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>新しいグループを作成できません</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -5132,7 +5136,7 @@ Available commands:
|
||||
</message>
|
||||
<message>
|
||||
<source>Signer:</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>署名者:</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -5263,19 +5267,19 @@ Available commands:
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not embed signature: Could not open file to write (%1)</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>署名を埋め込めませんでした: ファイルを書き込み用に開くことができません (%1)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not embed signature: Could not write file (%1)</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>署名を埋め込めませんでした: ファイルに書き込むことができません (%1)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not embed database: Could not open file to write (%1)</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>データベースを埋め込めませんでした: ファイルを書き込み用に開くことができません (%1)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not embed database: Could not write file (%1)</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>データベースを埋め込めませんでした: ファイルに書き込むことができません (%1)</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -693,7 +693,7 @@ Moved %2 keys to custom data.</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC: Create a new group</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>KeePassXC: Lag en ny gruppe</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>A request for creating a new group "%1" has been received.
|
||||
@ -803,7 +803,7 @@ Would you like to migrate your existing settings now?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>column %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>kolonne %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error(s) detected in CSV file!</source>
|
||||
@ -852,7 +852,7 @@ Would you like to migrate your existing settings now?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to open file %1.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Kan ikke åpne filen %1.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error while reading the database: %1</source>
|
||||
@ -860,7 +860,7 @@ Would you like to migrate your existing settings now?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not save, database has no file name.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Kunne ikke lagre, databasen har ingen filnavn.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>File cannot be written as it is opened in read-only mode.</source>
|
||||
@ -959,7 +959,7 @@ Vurder å opprette en ny nøkkelfil.</translation>
|
||||
<name>DatabaseSettingsDialog</name>
|
||||
<message>
|
||||
<source>Advanced Settings</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Avanserte Innstillinger</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>General</source>
|
||||
@ -1056,7 +1056,7 @@ This may prevent connection to the browser plugin.</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Forget all site-specific settings on entries</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Glem alle side-spesifikke innstillinger og oppføringer</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Do you really want forget all site-specific settings on every entry?
|
||||
@ -1294,7 +1294,7 @@ Dersom du beholder dette antallet så kan databasen være for lett å knekke!</t
|
||||
</message>
|
||||
<message>
|
||||
<source>Breadcrumb</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Brødsmule</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Type</source>
|
||||
@ -1306,11 +1306,11 @@ Dersom du beholder dette antallet så kan databasen være for lett å knekke!</t
|
||||
</message>
|
||||
<message>
|
||||
<source>Last Signer</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Siste Signatur</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Certificates</source>
|
||||
<translation>Sertifikat</translation>
|
||||
<translation>Sertifikater</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source> > </source>
|
||||
@ -1355,11 +1355,11 @@ Are you sure you want to continue without a password?</source>
|
||||
<name>DatabaseSettingsWidgetMetaDataSimple</name>
|
||||
<message>
|
||||
<source>Database Name:</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Databasenavn:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Description:</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Beskrivelse:</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -2043,11 +2043,11 @@ Deaktivere sikker lagring og prøve igjen?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Select import source</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Velg kilde for importering</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Select export target</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Velg eksporteringsmål</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Select import/export file</source>
|
||||
@ -2153,7 +2153,7 @@ Deaktivere sikker lagring og prøve igjen?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Select Image(s)</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Velg Bilde(-r)</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<source>Successfully loaded %1 of %n icon(s)</source>
|
||||
@ -2382,7 +2382,7 @@ Dette kan føre til feil for de berørte programtilleggene.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Created</source>
|
||||
<translation>Oppretta</translation>
|
||||
<translation>Opprettet</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Modified</source>
|
||||
@ -2494,7 +2494,7 @@ Dette kan føre til feil for de berørte programtilleggene.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Share</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Del</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -3122,19 +3122,19 @@ Line %2, column %3</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Import from</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Importer fra</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Export to</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Eksporter til</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Synchronize with</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Synkroniser med</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Disabled share %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Deaktiver deling %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Import from share %1</source>
|
||||
@ -3153,7 +3153,7 @@ Line %2, column %3</source>
|
||||
<name>KeyComponentWidget</name>
|
||||
<message>
|
||||
<source>Key Component</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Nøkkelkomponent</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Key Component Description</source>
|
||||
@ -3170,7 +3170,7 @@ Line %2, column %3</source>
|
||||
<message>
|
||||
<source>Add %1</source>
|
||||
<comment>Add a key component</comment>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Legg til %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Change %1</source>
|
||||
@ -3200,7 +3200,7 @@ Line %2, column %3</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Key File</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Nøkkelfil</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source><p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p></source>
|
||||
@ -3477,7 +3477,7 @@ Vi anbefaler at du bruker det AppImage som er tilgjengelig på nedlastingssiden.
|
||||
</message>
|
||||
<message>
|
||||
<source>Add a new group</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Legg til ny gruppe</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Change master &key...</source>
|
||||
@ -3636,7 +3636,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
|
||||
</message>
|
||||
<message>
|
||||
<source>Advanced Settings</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Avanserte Innstillinger</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Simple Settings</source>
|
||||
@ -4351,7 +4351,7 @@ Tilgjengelige kommandoer:
|
||||
</message>
|
||||
<message>
|
||||
<source>Created</source>
|
||||
<translation>Oppretta</translation>
|
||||
<translation>Opprettet</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Browser Integration</source>
|
||||
@ -4586,7 +4586,7 @@ Tilgjengelige kommandoer:
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to open file %1.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Kan ikke åpne filen %1.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error while reading the database:
|
||||
@ -4998,7 +4998,7 @@ Tilgjengelige kommandoer:
|
||||
</message>
|
||||
<message>
|
||||
<source>Own certificate</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Egne sertifikat</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Fingerprint:</source>
|
||||
@ -5006,7 +5006,7 @@ Tilgjengelige kommandoer:
|
||||
</message>
|
||||
<message>
|
||||
<source>Certificate:</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Sertifikat</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Signer</source>
|
||||
@ -5030,7 +5030,7 @@ Tilgjengelige kommandoer:
|
||||
</message>
|
||||
<message>
|
||||
<source>Imported certificates</source>
|
||||
<translation>Importerte sertikikat</translation>
|
||||
<translation>Importerte sertifikater</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Trust</source>
|
||||
|
@ -421,7 +421,7 @@
|
||||
<message>
|
||||
<source>%1 has requested access to passwords for the following item(s).
|
||||
Please select whether you want to allow access.</source>
|
||||
<translation>%1 vraagt toegang tot jouw wachtwoorden voor het volgende.
|
||||
<translation>%1 vraagt toegang tot jouw wachtwoorden voor de volgende item(s).
|
||||
Geef aan of je toegang wilt verlenen of niet.</translation>
|
||||
</message>
|
||||
</context>
|
||||
@ -611,15 +611,15 @@ Selecteer de database voor het opslaan van de inloggegevens.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Vanwege de Snap sandboxing, moet je een script uitvoeren waarmee browser integratie mogelijk wordt. <br /> Je kunt dit script vinden op %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Please see special instructions for browser extension use below</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Raadpleeg onderstaand speciale instructies voor gebruik van browserextensie </translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2. %3</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>KeePassXC-Browser is vereist om de integratie van de browser te laten werken. <br /> download het voor %1 en %2. %3</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -696,19 +696,23 @@ Moved %2 keys to custom data.</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC: Create a new group</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>KeePassXC: Een nieuwe groep maken</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>A request for creating a new group "%1" has been received.
|
||||
Do you want to create this group?
|
||||
</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Een aanvraag voor het maken van een nieuwe groep '%1' werd ontvangen.
|
||||
Wil je deze groep maken?
|
||||
</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Your KeePassXC-Browser settings need to be moved into the database settings.
|
||||
This is necessary to maintain your current browser connections.
|
||||
Would you like to migrate your existing settings now?</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>De KeePassXC-Browser instellingen moeten worden verplaatst naar de instellingen-database.
|
||||
Dit is nodig om de huidige browser verbindingen te behouden.
|
||||
Wil je de bestaande instellingen nu migreren?</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -872,7 +876,7 @@ Would you like to migrate your existing settings now?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Key not transformed. This is a bug, please report it to the developers!</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Toets niet getransformeerd. Dit is een bug, rapporteer deze alstublieft aan de ontwikkelaars!</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -1069,7 +1073,7 @@ Hierdoor werkt de verbinding met de browser plugin mogelijk niet meer.</translat
|
||||
<message>
|
||||
<source>Do you really want forget all site-specific settings on every entry?
|
||||
Permissions to access entries will be revoked.</source>
|
||||
<translation>Wilt u echt alle site-specifieke instellingen bij items vergeten? Machtigingen voor toegang zullen worden ingetrokken.</translation>
|
||||
<translation>Wil je echt alle site-specifieke instellingen bij items vergeten? Machtigingen voor toegang zullen worden ingetrokken.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Removing stored permissions…</source>
|
||||
@ -1339,7 +1343,7 @@ Als je dit aantal aanhoudt is het mogelijk heel gemakkelijk om de database te kr
|
||||
</message>
|
||||
<message>
|
||||
<source>You must add at least one encryption key to secure your database!</source>
|
||||
<translation>Je moet minstens één coderingssleutel aan uw database toevoegen om deze te beveiligen!</translation>
|
||||
<translation>Je moet minstens één coderingssleutel aan de database toevoegen om deze te beveiligen!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>No password set</source>
|
||||
@ -1527,7 +1531,7 @@ Wil je de wijzigingen samenvoegen?</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<source>Do you really want to delete %n entry(s) for good?</source>
|
||||
<translation><numerusform>Wilt u echt %n item(s) voorgoed verwijderen?</numerusform><numerusform>Wilt u echt %n item(s) voorgoed verwijderen?</numerusform></translation>
|
||||
<translation><numerusform>Wilt u echt %n item(s) voorgoed verwijderen?</numerusform><numerusform>Wil je echt %n item(s) voorgoed verwijderen?</numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<source>Delete entry(s)?</source>
|
||||
@ -1605,7 +1609,7 @@ Veilig opslaan afschakelen en opnieuw proberen?</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<source>Entry "%1" has %2 reference(s). Do you want to overwrite references with values, skip this entry, or delete anyway?</source>
|
||||
<translation><numerusform>Vermelding "%1" heeft %2 reference(s). Wilt u verwijzingen vervangen door waarden, dit bericht overslaan of verwijderen toch?</numerusform><numerusform>Item "%1" heeft %2 referentie(s). Wilt u verwijzingen vervangen door waarden, dit bericht overslaan of toch verwijderen ?</numerusform></translation>
|
||||
<translation><numerusform>Vermelding "%1" heeft %2 reference(s). Wilt u verwijzingen vervangen door waarden, dit bericht overslaan of verwijderen toch?</numerusform><numerusform>Item "%1" heeft %2 referentie(s). Wil je de verwijzingen vervangen door waarden, dit bericht overslaan, of toch verwijderen ?</numerusform></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Delete group</source>
|
||||
@ -1617,7 +1621,7 @@ Veilig opslaan afschakelen en opnieuw proberen?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Do you really want to move the group "%1" to the recycle bin?</source>
|
||||
<translation>Wilt u echt de groep '%1' naar de prullenbak verplaatsen?</translation>
|
||||
<translation>Wil je echt de groep '%1' naar de prullenbak verplaatsen?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Successfully merged the database files.</source>
|
||||
@ -1629,7 +1633,7 @@ Veilig opslaan afschakelen en opnieuw proberen?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Shared group...</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Gedeelde groep...</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -2034,7 +2038,7 @@ Veilig opslaan afschakelen en opnieuw proberen?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Your KeePassXC version does not support sharing your container type. Please use %1.</source>
|
||||
<translation>Uw KeePassXC-versie biedt geen ondersteuning voor het delen van uw Containertype. Gebruik %1.</translation>
|
||||
<translation>Deze KeePassXC-versie biedt geen ondersteuning voor het delen van jouw container type. Gebruik %1.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Database sharing is disabled</source>
|
||||
@ -2074,15 +2078,15 @@ Veilig opslaan afschakelen en opnieuw proberen?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The export container %1 is already referenced.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Er wordt al verwezen naar export container %1.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The import container %1 is already imported.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Import container %1 is al geïmporteerd.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The container %1 imported and export by different groups.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>De container %1 is geïmporteerd en geëxporteerd door verschillende groepen.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -3151,19 +3155,19 @@ Lijn %2, kolom %3</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Disabled share %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Delen uitgeschakeld %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Import from share %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Geïmporteerd van %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Export to share %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Ge-exporteerd naar %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Synchronize with share %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Synchroniseren met %1</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -3423,7 +3427,7 @@ Bericht: %2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Please touch the button on your YubiKey!</source>
|
||||
<translation>Druk de knop op uw YubiKey!</translation>
|
||||
<translation>Druk op de knop van je YubiKey!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>WARNING: You are using an unstable build of KeePassXC!
|
||||
@ -3554,7 +3558,7 @@ Wij raden je aan om de AppImage te gebruiken welke beschikbaar is op onze downlo
|
||||
<message>
|
||||
<source>NOTE: You are using a pre-release version of KeePassXC!
|
||||
Expect some bugs and minor issues, this version is not meant for production use.</source>
|
||||
<translation>Opmerking: U gebruikt een pre-release versie van KeePassXC!
|
||||
<translation>Opmerking: Je gebruikt een pre-release versie van KeePassXC!
|
||||
Verwacht een aantal bugs en kleine problemen, deze versie is niet bedoeld voor productiedoeleinden.</translation>
|
||||
</message>
|
||||
<message>
|
||||
@ -3567,7 +3571,7 @@ Verwacht een aantal bugs en kleine problemen, deze versie is niet bedoeld voor p
|
||||
</message>
|
||||
<message>
|
||||
<source>You can always check for updates manually from the application menu.</source>
|
||||
<translation>U kunt altijd handmatig controleren op updates vanuit het programmamenu.</translation>
|
||||
<translation>Je kunt altijd handmatig controleren of er updates zijn vanuit het programmamenu.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -4851,7 +4855,7 @@ Beschikbare opdrachten:
|
||||
</message>
|
||||
<message>
|
||||
<source>Cannot create new group</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Kon nieuwe groep niet maken</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -5123,11 +5127,11 @@ Beschikbare opdrachten:
|
||||
</message>
|
||||
<message>
|
||||
<source>The exported certificate is not the same as the one in use. Do you want to export the current certificate?</source>
|
||||
<translation>Het geëxporteerde certificaat is niet hetzelfde als die in gebruik is. Wilt u het huidige certificaat exporteren?</translation>
|
||||
<translation>Het geëxporteerde certificaat is niet hetzelfde als die in gebruik is. Wil je het huidige certificaat exporteren?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Signer:</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Ondertekenaar:</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -5246,31 +5250,31 @@ Beschikbare opdrachten:
|
||||
</message>
|
||||
<message>
|
||||
<source>Do you want to trust %1 with the fingerprint of %2 from %3?</source>
|
||||
<translation>Wilt u %1 met de vingerafdruk van %2 vanaf %3 vertrouwen? {1 ?} {2 ?} </translation>
|
||||
<translation>Wil je %1 met de vingerafdruk van %2 vanaf %3 vertrouwen? {1 ?} {2 ?} </translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Multiple import source path to %1 in %2</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Meerdere import bronpaden naar %1 in %2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Conflicting export target path %1 in %2</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Conflicterende exporteerdoelpad %1 in %2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not embed signature: Could not open file to write (%1)</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Kon handtekening niet insluiten: Kan bestand niet openen om naar te schrijven (%1)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not embed signature: Could not write file (%1)</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Kon handtekening niet insluiten: Kan niet schrijven naar bestand (%1)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not embed database: Could not open file to write (%1)</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Kon database niet insluiten: Kan bestand niet openen om naar te schrijven (%1) </translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not embed database: Could not write file (%1)</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Kon database niet insluiten: Kan niet schrijven naar bestand (%1)</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -5301,7 +5305,7 @@ Beschikbare opdrachten:
|
||||
<message>
|
||||
<source>NOTE: These TOTP settings are custom and may not work with other authenticators.</source>
|
||||
<comment>TOTP QR code dialog warning</comment>
|
||||
<translation>Let op: deze TOTP-instellingen zijn op maat en werken mogelijk niet met andere authenticators.</translation>
|
||||
<translation>Let op: deze TOTP-instellingen zijn applicatie specifiek en werken mogelijk niet met andere authenticators.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>There was an error creating the QR code.</source>
|
||||
|
@ -611,15 +611,15 @@ Wybierz właściwą bazę danych do zapisania danych uwierzytelniających.</tran
|
||||
</message>
|
||||
<message>
|
||||
<source>Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Ze względu na sandboxing Snap należy uruchomić skrypt, aby umożliwić integrację przeglądarki.<br />Możesz uzyskać ten skrypt z %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Please see special instructions for browser extension use below</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Zobacz poniżej specjalne instrukcje dotyczące używania rozszerzenia przeglądarki</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2. %3</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>KeePassXC-Browser jest potrzebny do integracji przeglądarki. <br />Pobierz go dla %1 i %2. %3</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -696,19 +696,23 @@ Przeniesiono %2 klucze do niestandardowych danych.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC: Create a new group</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>KeePassXC: Utwórz nową grupę</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>A request for creating a new group "%1" has been received.
|
||||
Do you want to create this group?
|
||||
</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Otrzymano żądanie utworzenia nowej grupy "%1".
|
||||
Czy chcesz stworzyć tę grupę?
|
||||
</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Your KeePassXC-Browser settings need to be moved into the database settings.
|
||||
This is necessary to maintain your current browser connections.
|
||||
Would you like to migrate your existing settings now?</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Twoje ustawienia KeePassXC-Browser należy przenieść do ustawień bazy danych.
|
||||
Jest to konieczne, aby utrzymać bieżące połączenia przeglądarki.
|
||||
Czy chcesz teraz migrować istniejące ustawienia?</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -872,7 +876,7 @@ Would you like to migrate your existing settings now?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Key not transformed. This is a bug, please report it to the developers!</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Klucz nie został przekształcony. To jest błąd, zgłoś go deweloperom!</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -1631,7 +1635,7 @@ Wyłączyć bezpieczne zapisywanie i spróbować ponownie?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Shared group...</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Grupa współdzielona...</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -2076,15 +2080,15 @@ Wyłączyć bezpieczne zapisywanie i spróbować ponownie?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The export container %1 is already referenced.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Odwołanie do kontenera eksportu %1 już istnieje.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The import container %1 is already imported.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Kontener importu %1 jest już zaimportowany.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The container %1 imported and export by different groups.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Kontener %1 importowany i eksportowany przez różne grupy.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -3157,19 +3161,19 @@ Wiersz %2, kolumna %3</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Disabled share %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Wyłączony udział %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Import from share %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Importuj z udziału %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Export to share %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Eksportuj do udziału %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Synchronize with share %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Synchronizuj z udziałem %1</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -4858,7 +4862,7 @@ Dostępne polecenia:
|
||||
</message>
|
||||
<message>
|
||||
<source>Cannot create new group</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Nie można utworzyć nowej grupy</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -5134,7 +5138,7 @@ Dostępne polecenia:
|
||||
</message>
|
||||
<message>
|
||||
<source>Signer:</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Podpisujący:</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -5257,27 +5261,27 @@ Dostępne polecenia:
|
||||
</message>
|
||||
<message>
|
||||
<source>Multiple import source path to %1 in %2</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Wiele ścieżek źródłowych importu do %1 w %2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Conflicting export target path %1 in %2</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Sprzeczna ścieżka docelowa eksportu %1 w %2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not embed signature: Could not open file to write (%1)</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Nie można osadzić podpisu: Nie można otworzyć pliku do zapisu (%1)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not embed signature: Could not write file (%1)</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Nie można osadzić podpisu: Nie można zapisać pliku (%1)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not embed database: Could not open file to write (%1)</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Nie można osadzić bazy danych: Nie można otworzyć pliku do zapisu (%1)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not embed database: Could not write file (%1)</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Nie można osadzić bazy danych: nie można zapisać pliku (%1)</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
@ -611,15 +611,15 @@ Selecione a base de dados correta para guardar as credenciais.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Devido a 'Snap sandboxing', tem que executar um script para ativar a integração com o navegador.<br />Pode obter este script em %1.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Please see special instructions for browser extension use below</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Por favor consulte as instruções para a utilização da extensão abaixo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2. %3</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Necessita do KeePassXC-Browser para que a integração funcione corretamente.<br />Pode descarregar para %1 e para %2. %3</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -696,19 +696,23 @@ Moved %2 keys to custom data.</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC: Create a new group</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>KeePassXC: criar um novo grupo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>A request for creating a new group "%1" has been received.
|
||||
Do you want to create this group?
|
||||
</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Foi recebido um pedido para a criação do grupo "%1".
|
||||
Quer criar este grupo?
|
||||
</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Your KeePassXC-Browser settings need to be moved into the database settings.
|
||||
This is necessary to maintain your current browser connections.
|
||||
Would you like to migrate your existing settings now?</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Tem que mover as suas definições do KeePassXC-Browser para as definições da base de dados.
|
||||
Este procedimento é necessário para manter as ligações existentes.
|
||||
Quer migrar as definições agora?</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -872,7 +876,7 @@ Would you like to migrate your existing settings now?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Key not transformed. This is a bug, please report it to the developers!</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Chave não transformada. Isto é um erro e deve ser reportado aos programadores!</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -1631,7 +1635,7 @@ Desativar salvaguardas e tentar novamente?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Shared group...</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Grupo partilhado...</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -2077,11 +2081,11 @@ Por favor utilize %1.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The export container %1 is already referenced.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>O contentor de exportação %1 já está referenciado.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The import container %1 is already imported.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>O contentor de importação %1 já está referenciado.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The container %1 imported and export by different groups.</source>
|
||||
@ -3156,19 +3160,19 @@ Linha %2, coluna %3</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Disabled share %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Desativar partilha %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Import from share %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Importar da partilha %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Export to share %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Exportar para a partilha %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Synchronize with share %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Sincronizar com a partilha %1</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -4858,7 +4862,7 @@ Comandos disponíveis:
|
||||
</message>
|
||||
<message>
|
||||
<source>Cannot create new group</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Não foi possível criar o novo grupo</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -5134,7 +5138,7 @@ Comandos disponíveis:
|
||||
</message>
|
||||
<message>
|
||||
<source>Signer:</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Signatário:</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -5257,27 +5261,27 @@ Comandos disponíveis:
|
||||
</message>
|
||||
<message>
|
||||
<source>Multiple import source path to %1 in %2</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Diversos caminhos de importação para %1 em %2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Conflicting export target path %1 in %2</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Conflito no caminho de exportação para %1 em %2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not embed signature: Could not open file to write (%1)</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Assinatura não incorporada. Não foi possível abrir o ficheiro para escrita (%1)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not embed signature: Could not write file (%1)</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Assinatura não incorporada. Não foi possível escrever no ficheiro (%1)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not embed database: Could not open file to write (%1)</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Base de dados não incorporada. Não foi possível abrir o ficheiro para escrita (%1)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not embed database: Could not write file (%1)</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Base de dados não incorporada. Não foi possível escrever no ficheiro (%1)</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
@ -611,15 +611,15 @@ Por favor, selecione o banco de dados correto para salvar as credenciais.</trans
|
||||
</message>
|
||||
<message>
|
||||
<source>Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Devido ao sandbox do Snap, você deve executar um script para ativar a integração do navegador.<br />Você pode obter este script de %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Please see special instructions for browser extension use below</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Por favor, veja as instruções especiais para o uso da extensão do navegador abaixo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2. %3</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>O KeePassXC-Browser é necessário para que a integração do navegador funcione. <br />Faça o download para %1 e %2. %3</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -695,19 +695,23 @@ Movido %2 chaves para dados personalizados.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC: Create a new group</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>KeePassXC: Crie um novo grupo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>A request for creating a new group "%1" has been received.
|
||||
Do you want to create this group?
|
||||
</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Um pedido para criar um novo grupo "%1" foi recebido.
|
||||
Você quer criar este grupo?
|
||||
</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Your KeePassXC-Browser settings need to be moved into the database settings.
|
||||
This is necessary to maintain your current browser connections.
|
||||
Would you like to migrate your existing settings now?</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>As configurações do seu navegador KeePassXC precisam ser movidas para as configurações do banco de dados.
|
||||
Isso é necessário para manter as conexões atuais do navegador.
|
||||
Gostaria de migrar suas configurações existentes agora?</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -813,7 +817,7 @@ Would you like to migrate your existing settings now?</source>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<source>[%n more message(s) skipped]</source>
|
||||
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
|
||||
<translation><numerusform>[%n mais mensagem(ns) ignoradas]</numerusform><numerusform>[%n mais mensagem(ns) ignoradas]</numerusform></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>CSV import: writer has errors:
|
||||
@ -871,7 +875,7 @@ Would you like to migrate your existing settings now?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Key not transformed. This is a bug, please report it to the developers!</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Chave não transformada. Este é um bug, por favor denuncie para os desenvolvedores!</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -999,11 +1003,11 @@ Por favor, considere-se gerar um novo arquivo de chave.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Forg&et all site-specific settings on entries</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Esq&uecer todas as configurações específicas do site nas entradas</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Move KeePassHTTP attributes to KeePassXC-Browser &custom data</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Mover os atributos do KeePassHTTP para o KeePassXC-Browser &dados personalizados</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Stored keys</source>
|
||||
@ -1068,7 +1072,8 @@ Isso pode impedir a conexão com o plugin do navegador.</translation>
|
||||
<message>
|
||||
<source>Do you really want forget all site-specific settings on every entry?
|
||||
Permissions to access entries will be revoked.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Você realmente quer esquecer todas as configurações específicas do site em cada entrada?
|
||||
Permissões para acessar entradas serão revogadas.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Removing stored permissions…</source>
|
||||
@ -1084,7 +1089,7 @@ Permissions to access entries will be revoked.</source>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<source>Successfully removed permissions from %n entry(s).</source>
|
||||
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
|
||||
<translation><numerusform>Permissões removidas com sucesso de %n entrada(s).</numerusform><numerusform>Permissões removidas com sucesso de %n entrada(s).</numerusform></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC: No entry with permissions found!</source>
|
||||
@ -1101,7 +1106,8 @@ Permissions to access entries will be revoked.</source>
|
||||
<message>
|
||||
<source>Do you really want to move all legacy browser integration data to the latest standard?
|
||||
This is necessary to maintain compatibility with the browser plugin.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Você realmente deseja mover todos os dados de integração do navegador herdados para o padrão mais recente?
|
||||
Isso é necessário para manter a compatibilidade com o plugin do navegador.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -1160,7 +1166,7 @@ This is necessary to maintain compatibility with the browser plugin.</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Higher values offer more protection, but opening the database will take longer.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Valores mais altos oferecem mais proteção, mas a abertura do banco de dados levará mais tempo.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Database format:</source>
|
||||
@ -1313,7 +1319,7 @@ Se você manter este número, seu banco de dados pode ser facilmente crackeado!<
|
||||
</message>
|
||||
<message>
|
||||
<source>Last Signer</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Último Signatário</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Certificates</source>
|
||||
@ -1566,7 +1572,8 @@ Salvar alterações?</translation>
|
||||
<message>
|
||||
<source>Could not open the new database file while attempting to autoreload.
|
||||
Error: %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Não foi possível abrir o novo arquivo de banco de dados ao tentar executar o carregamento automático.
|
||||
Erro: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Disable safe saves?</source>
|
||||
@ -1581,7 +1588,8 @@ Deseja desabilitar salvamento seguro e tentar novamente?</translation>
|
||||
<message>
|
||||
<source>Writing the database failed.
|
||||
%1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Escrevendo o banco de dados falhou.
|
||||
%1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Passwords</source>
|
||||
@ -1625,7 +1633,7 @@ Deseja desabilitar salvamento seguro e tentar novamente?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Shared group...</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Grupo compartilhado...</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -2168,7 +2176,7 @@ Deseja desabilitar salvamento seguro e tentar novamente?</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<source>Successfully loaded %1 of %n icon(s)</source>
|
||||
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
|
||||
<translation><numerusform>Carregado com sucesso %1 de %n ícone(s)</numerusform><numerusform>Carregado com sucesso %1 de %n ícone(s)</numerusform></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>No icons were loaded</source>
|
||||
@ -3124,7 +3132,7 @@ Linha %2, coluna %3</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>unable to seek to content position</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>incapaz de buscar a posição de conteúdo</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -3147,19 +3155,19 @@ Linha %2, coluna %3</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Disabled share %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Desabilitar compartilhamento %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Import from share %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Importar do compartilhamento %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Export to share %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Exportar para compartilhamento %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Synchronize with share %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Sincronizar com compartilhamento %1</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -3178,7 +3186,7 @@ Linha %2, coluna %3</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Key Component set, click to change or remove</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Componente Chave definido, clique para alterar ou remover</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Add %1</source>
|
||||
@ -3615,11 +3623,11 @@ Espere alguns bugs e problemas menores, esta versão não é para uso em produç
|
||||
</message>
|
||||
<message>
|
||||
<source>Changed deleted objects</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Objetos excluídos alterados</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Adding missing icon %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Adicionando ícone ausente %1</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -3805,7 +3813,7 @@ Espere alguns bugs e problemas menores, esta versão não é para uso em produç
|
||||
</message>
|
||||
<message>
|
||||
<source><p>A password is the primary method for securing your database.</p><p>Good passwords are long and unique. KeePassXC can generate one for you.</p></source>
|
||||
<translation type="unfinished"/>
|
||||
<translation><p>Uma senha é o principal método para proteger seu banco de dados.</p><p>Boas senhas são longas e únicas. KeePassXC pode gerar uma para você.</p></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Passwords do not match.</source>
|
||||
@ -4447,7 +4455,7 @@ Comandos disponíveis:
|
||||
</message>
|
||||
<message>
|
||||
<source>Entry's password copied to the clipboard!</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Entrada da senha copiada para a área de transferência!</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<source>Clearing the clipboard in %1 second(s)...</source>
|
||||
@ -4646,11 +4654,11 @@ Comandos disponíveis:
|
||||
</message>
|
||||
<message>
|
||||
<source>Exclude similar looking characters</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Excluir caracteres parecidos</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Include characters from every selected group</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Incluir caracteres de cada grupo selecionado</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Recursively list the elements of the group.</source>
|
||||
@ -4741,7 +4749,7 @@ Comandos disponíveis:
|
||||
</message>
|
||||
<message>
|
||||
<source>Message encryption failed.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Criptografia de mensagens falhou.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>No groups found</source>
|
||||
@ -4753,7 +4761,7 @@ Comandos disponíveis:
|
||||
</message>
|
||||
<message>
|
||||
<source>File %1 already exists.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Arquivo %1 já existe.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Loading the key file failed</source>
|
||||
@ -4841,7 +4849,7 @@ Comandos disponíveis:
|
||||
</message>
|
||||
<message>
|
||||
<source>Cannot create new group</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Não é possível criar um novo grupo</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -4906,11 +4914,11 @@ Comandos disponíveis:
|
||||
</message>
|
||||
<message>
|
||||
<source>Restricted lifetime is not supported by the agent (check options).</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Vida útil limitada não é suportado pelo agente (verificar opções).</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>A confirmation request is not supported by the agent (check options).</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Uma solicitação de confirmação não é suportado pelo agente (verificar opções).</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -4921,7 +4929,7 @@ Comandos disponíveis:
|
||||
</message>
|
||||
<message>
|
||||
<source>Search terms are as follows: [modifiers][field:]["]term["]</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Termos de pesquisa são as seguintes: [modifiers][field:]["]term["]</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Every search term must match (ie, logical AND)</source>
|
||||
@ -5024,7 +5032,7 @@ Comandos disponíveis:
|
||||
</message>
|
||||
<message>
|
||||
<source>Signer</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Signatário</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Key:</source>
|
||||
@ -5093,11 +5101,11 @@ Comandos disponíveis:
|
||||
<message>
|
||||
<source>key.share</source>
|
||||
<comment>Filetype for KeeShare key</comment>
|
||||
<translation type="unfinished"/>
|
||||
<translation>key.share</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeeShare key file</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Arquivo chave KeeShare</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>All files</source>
|
||||
@ -5117,7 +5125,7 @@ Comandos disponíveis:
|
||||
</message>
|
||||
<message>
|
||||
<source>Signer:</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Signatário:</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -5152,11 +5160,11 @@ Comandos disponíveis:
|
||||
</message>
|
||||
<message>
|
||||
<source>Import from %1 failed (%2)</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Importação de %1 falhou (%2)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Import from %1 successful (%2)</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Importado de %1 com sucesso (%2)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Imported from %1</source>
|
||||
@ -5444,11 +5452,11 @@ Comandos disponíveis:
|
||||
</message>
|
||||
<message>
|
||||
<source>YubiKey Challenge-Response</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>YubiKey Desafio-Resposta</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source><p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p></source>
|
||||
<translation type="unfinished"/>
|
||||
<translation><p>Se você possui uma <a href="https://www.yubico.com/">YubiKey</a>, você pode usá-la para segurança adicional.</p><p>A YubiKey requer que um de seus slots seja programado como <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Desafio-Resposta</a>.</p></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>No YubiKey detected, please ensure it's plugged in.</source>
|
||||
|
@ -54,7 +54,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Use OpenSSH for Windows instead of Pageant</source>
|
||||
<translation>Utilizar OpeSSH for Windows em vez de Pageant</translation>
|
||||
<translation>Utilizar OpenSSH for Windows em vez de Pageant</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -120,7 +120,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Load previous databases on startup</source>
|
||||
<translation>Ao iniciar, carregar as últimas base de dados utilizadas</translation>
|
||||
<translation>Ao iniciar, carregar últimas base de dados utilizadas</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Minimize window at application startup</source>
|
||||
@ -512,12 +512,12 @@ Selecione a base de dados correta para guardar as credenciais.</translation>
|
||||
<message>
|
||||
<source>Sort &matching credentials by title</source>
|
||||
<extracomment>Credentials mean login data requested via browser extension</extracomment>
|
||||
<translation>Ordenar credenciais coi&ncidentes por título</translation>
|
||||
<translation>Ordenar por título as credenciais coi&ncidentes</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Sort matching credentials by &username</source>
|
||||
<extracomment>Credentials mean login data requested via browser extension</extracomment>
|
||||
<translation>Ordenar credenciais coincidentes por nome de &utilizador</translation>
|
||||
<translation>Ordenar por nome de &utilizador as credenciais coincidentes</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Advanced</source>
|
||||
@ -611,15 +611,15 @@ Selecione a base de dados correta para guardar as credenciais.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Devido a 'Snap sandboxing', tem que executar um script para ativar a integração com o navegador.<br />Pode obter este script em %1.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Please see special instructions for browser extension use below</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Por favor consulte as instruções para a utilização da extensão abaixo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2. %3</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Necessita de KeePassXC-Browser para que a integração funcione corretamente.<br />Pode descarregar para %1 e %2. %3</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -696,19 +696,23 @@ Moved %2 keys to custom data.</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC: Create a new group</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>KeePassXC: Criar um novo grupo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>A request for creating a new group "%1" has been received.
|
||||
Do you want to create this group?
|
||||
</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Foi recebido um pedido para a criação do grupo "%1".
|
||||
Deseja criar este grupo?
|
||||
</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Your KeePassXC-Browser settings need to be moved into the database settings.
|
||||
This is necessary to maintain your current browser connections.
|
||||
Would you like to migrate your existing settings now?</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Tem que mover as suas definições KeePassXC-Browser para as definições da base de dados.
|
||||
Este procedimento é necessário para manter as ligações existentes.
|
||||
Gostaria de migrar agora as definições?</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -872,7 +876,7 @@ Would you like to migrate your existing settings now?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Key not transformed. This is a bug, please report it to the developers!</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Chave não transformada. Isto é um erro e deve ser reportado aos programadores!</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -1631,7 +1635,7 @@ Desativar salvaguardas e tentar novamente?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Shared group...</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Grupo partilhado...</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -2077,15 +2081,15 @@ Por favor utilize %1.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The export container %1 is already referenced.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>O contentor de exportação %1 já está referenciado.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The import container %1 is already imported.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>O contentor de importação %1 já está referenciado.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The container %1 imported and export by different groups.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Erro ao exportar. A partilha %1 está a ser importada por outro grupo.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -2869,7 +2873,7 @@ Esta é uma migração unidirecional. Não será possível abrir a base de dados
|
||||
</message>
|
||||
<message>
|
||||
<source>Invalid group icon number</source>
|
||||
<translation>Número inválido de ícone de grupo</translation>
|
||||
<translation>Número inválido no ícone de grupo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Invalid EnableAutoType value</source>
|
||||
@ -3017,7 +3021,7 @@ Linha %2, coluna %3</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Invalid transform seed size</source>
|
||||
<translation>Tamanho inválido da semente de transformação</translation>
|
||||
<translation>Tamanho inválido na semente de transformação</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Invalid number of transform rounds</source>
|
||||
@ -3156,19 +3160,19 @@ Linha %2, coluna %3</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Disabled share %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Desativar partilha %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Import from share %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Importar da partilha %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Export to share %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Exportar para a partilha %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Synchronize with share %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Sincronizar com a partilha %1</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -3639,7 +3643,7 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes
|
||||
<name>NewDatabaseWizard</name>
|
||||
<message>
|
||||
<source>Create a new KeePassXC database...</source>
|
||||
<translation>A criar uma nova base de dados do KeePassXC...</translation>
|
||||
<translation>Criar uma nova base de dados do KeePassXC...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Root</source>
|
||||
@ -3659,7 +3663,7 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes
|
||||
</message>
|
||||
<message>
|
||||
<source>Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings.</source>
|
||||
<translation>Aqui pode ajustar as definições de cifra da sua base de dados. Não se preocupe porque pode sempre reverter as alterações nas definições.</translation>
|
||||
<translation>Aqui pode ajustar as definições de cifra da sua base de dados. Não se preocupe porque, a qualquer momento, poderá alterar esta opção nas definições da base de dados.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Advanced Settings</source>
|
||||
@ -3678,7 +3682,7 @@ Pode encontrar erros graves e esta versão não deve ser utilizada em ambientes
|
||||
</message>
|
||||
<message>
|
||||
<source>Here you can adjust the database encryption settings. Don't worry, you can change them later in the database settings.</source>
|
||||
<translation>Aqui pode ajustar as definições de cifra da sua base de dados. Não se preocupe porque pode sempre reverter as alterações nas definições.</translation>
|
||||
<translation>Aqui pode ajustar as definições de cifra da sua base de dados. Não se preocupe porque, a qualquer momento, poderá alterar esta opção nas definições da base de dados.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -4858,7 +4862,7 @@ Comandos disponíveis:
|
||||
</message>
|
||||
<message>
|
||||
<source>Cannot create new group</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Não foi possível criar o novo grupo</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -5110,7 +5114,7 @@ Comandos disponíveis:
|
||||
<message>
|
||||
<source>key.share</source>
|
||||
<comment>Filetype for KeeShare key</comment>
|
||||
<translation>partilha da chave</translation>
|
||||
<translation>chave.partilha</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeeShare key file</source>
|
||||
@ -5134,7 +5138,7 @@ Comandos disponíveis:
|
||||
</message>
|
||||
<message>
|
||||
<source>Signer:</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Signatário:</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -5233,7 +5237,7 @@ Comandos disponíveis:
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not write export container</source>
|
||||
<translation>Não foi possível escrever contentor de exportação</translation>
|
||||
<translation>Não foi possível escrever o contentor de exportação</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unexpected export error occurred</source>
|
||||
@ -5257,27 +5261,27 @@ Comandos disponíveis:
|
||||
</message>
|
||||
<message>
|
||||
<source>Multiple import source path to %1 in %2</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Diversos caminhos de importação para %1 em %2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Conflicting export target path %1 in %2</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Conflito no caminho de exportação para %1 em %2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not embed signature: Could not open file to write (%1)</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Assinatura não incorporada. Não foi possível abrir o ficheiro para escrita (%1)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not embed signature: Could not write file (%1)</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Assinatura não incorporada. Não foi possível escrever no ficheiro (%1)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not embed database: Could not open file to write (%1)</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Base de dados não incorporada. Não foi possível abrir o ficheiro para escrita (%1)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not embed database: Could not write file (%1)</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Base de dados não incorporada. Não foi possível escrever no ficheiro (%1)</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
@ -176,7 +176,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Hide toolbar (icons)</source>
|
||||
<translation>Скрыть панель инструментов (иконки)</translation>
|
||||
<translation>Скрывать панель инструментов (значки)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Minimize instead of app exit</source>
|
||||
@ -611,15 +611,15 @@ Please select the correct database for saving credentials.</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Из-за того, что Snap - это песочница, Вы должны запустить скрипт, чтобы разрешить браузерную интеграцию.<br />Вы можете получить этот скрипт с %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Please see special instructions for browser extension use below</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Пожалуйста, смотрите особые инструкции по использованию расширения браузера ниже</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2. %3</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>KeePassXC-Browser необходим для работы интеграции браузера. <br />Скачайте его для %1 и %2. %3</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -696,19 +696,23 @@ Moved %2 keys to custom data.</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC: Create a new group</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>KeePassXC: Создать новую группу</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>A request for creating a new group "%1" has been received.
|
||||
Do you want to create this group?
|
||||
</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Был получен запрос для создания новой группы "%1".
|
||||
Вы хотите создать эту группу?
|
||||
</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Your KeePassXC-Browser settings need to be moved into the database settings.
|
||||
This is necessary to maintain your current browser connections.
|
||||
Would you like to migrate your existing settings now?</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Нужно переместить Ваши настройки KeePassXC-Browser в настройки базы данных.
|
||||
Это необходимо, чтобы поддерживать Ваши текущие соединения браузера.
|
||||
Желаете ли Вы мигрировать Ваши существующие настройки сейчас?</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -871,7 +875,7 @@ Would you like to migrate your existing settings now?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Key not transformed. This is a bug, please report it to the developers!</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Ключ не преобразован. Это ошибка, пожалуйста, сообщите о нём разработчикам!</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -1629,7 +1633,7 @@ Disable safe saves and try again?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Shared group...</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Общая группа...</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -2074,15 +2078,15 @@ Disable safe saves and try again?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>The export container %1 is already referenced.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>На контейнер экспорта %1 уже есть ссылка.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The import container %1 is already imported.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Контейнер импорта %1 уже импортирован.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The container %1 imported and export by different groups.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Контейнер %1 импортируется и экспортируется разными группами.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -2160,7 +2164,7 @@ Disable safe saves and try again?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Custom icon successfully downloaded</source>
|
||||
<translation>Пользовательская иконка успешно загружена</translation>
|
||||
<translation>Пользовательский значок успешно загружен</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Hint: You can enable DuckDuckGo as a fallback under Tools>Settings>Security</source>
|
||||
@ -2172,7 +2176,7 @@ Disable safe saves and try again?</source>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<source>Successfully loaded %1 of %n icon(s)</source>
|
||||
<translation><numerusform>Успешно загружено %1 из %n иконки</numerusform><numerusform>Успешно загружено %1 из %n иконок</numerusform><numerusform>Успешно загружено %1 из %n иконок</numerusform><numerusform>Успешно загружено %1 из %n иконки(ок)</numerusform></translation>
|
||||
<translation><numerusform>Успешно загружен %1 из %n значка</numerusform><numerusform>Успешно загружены %1 из %n значков</numerusform><numerusform>Успешно загружены %1 из %n значков</numerusform><numerusform>Успешно загружены %1 из %n значков</numerusform></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>No icons were loaded</source>
|
||||
@ -2180,15 +2184,15 @@ Disable safe saves and try again?</source>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<source>%n icon(s) already exist in the database</source>
|
||||
<translation><numerusform>%n иконка уже существует в базе данных</numerusform><numerusform>%n иконки уже существуют в базе данных</numerusform><numerusform>%n иконок уже существуют в базе данных</numerusform><numerusform>%n иконка(ок) уже существует(ют) в базе данных</numerusform></translation>
|
||||
<translation><numerusform>%n значок уже существует в базе данных</numerusform><numerusform>%n значка уже существуют в базе данных</numerusform><numerusform>%n значков уже существуют в базе данных</numerusform><numerusform>%n значков уже существуют в базе данных</numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<source>The following icon(s) failed:</source>
|
||||
<translation><numerusform>Следующие иконки не удалось:</numerusform><numerusform>Следующие иконки не удалось:</numerusform><numerusform>Следующие иконки не удалось:</numerusform><numerusform>Следующие иконки не удалось:</numerusform></translation>
|
||||
<translation><numerusform>Следующий значок потерпел неудачу:</numerusform><numerusform>Следующие значки потерпели неудачу:</numerusform><numerusform>Следующие значки потерпели неудачу:</numerusform><numerusform>Следующие значки потерпели неудачу:</numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<source>This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it?</source>
|
||||
<translation><numerusform>Эта иконка используется %n записью и будет замещена иконкой по умолчанию. Вы уверены, что хотите удалить её?</numerusform><numerusform>Эта иконка используется %n записями и будет замещена иконкой по умолчанию. Вы уверены, что хотите удалить её?</numerusform><numerusform>Эта иконка используется %n записями и будет замещена иконкой по умолчанию. Вы уверены, что хотите удалить её?</numerusform><numerusform>Эта иконка используется %n записью(ями) и будет замещена иконкой по умолчанию. Вы уверены, что хотите удалить её?</numerusform></translation>
|
||||
<translation><numerusform>Этот значок используется %n записью и будет замещён значком по умолчанию. Вы уверены, что хотите удалить его?</numerusform><numerusform>Этот значок используется %n записями и будет замещён значком по умолчанию. Вы уверены, что хотите удалить его?</numerusform><numerusform>Этот значок используется %n записями и будет замещён значком по умолчанию. Вы уверены, что хотите удалить его?</numerusform><numerusform>Этот значок используется %n записями и будет замещён значком по умолчанию. Вы уверены, что хотите удалить его?</numerusform></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -3154,19 +3158,19 @@ Line %2, column %3</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Disabled share %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Отключённая часть %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Import from share %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Импортировать из части %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Export to share %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Экспортировать в часть %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Synchronize with share %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Синхронизировать с частью %1</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -3629,7 +3633,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
|
||||
</message>
|
||||
<message>
|
||||
<source>Adding missing icon %1</source>
|
||||
<translation>Добавление отсутствующей иконки %1</translation>
|
||||
<translation>Добавление отсутствующего значка %1</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -4855,7 +4859,7 @@ Available commands:
|
||||
</message>
|
||||
<message>
|
||||
<source>Cannot create new group</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Не удаётся создать новую группу</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -5131,7 +5135,7 @@ Available commands:
|
||||
</message>
|
||||
<message>
|
||||
<source>Signer:</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Подписавшийся:</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -5254,27 +5258,27 @@ Available commands:
|
||||
</message>
|
||||
<message>
|
||||
<source>Multiple import source path to %1 in %2</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Множественный путь источника импорта к %1 в %2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Conflicting export target path %1 in %2</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Конфликтный путь цели экспорта %1 в %2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not embed signature: Could not open file to write (%1)</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Не удалось встроить подпись: Не удалось открыть файл для записи (%1)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not embed signature: Could not write file (%1)</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Не удалось встроить подпись: Не удалось записать файл (%1)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not embed database: Could not open file to write (%1)</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Не удалось встроить базу данных: Не удалось открыть файл для записи (%1)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not embed database: Could not write file (%1)</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Не удалось встроить базу данных: Не удалось записать файл (%1)</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -39,7 +39,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Project Maintainers:</source>
|
||||
<translation>Projekt Ansvariga:</translation>
|
||||
<translation>Projekt ansvariga:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Special thanks from the KeePassXC team go to debfx for creating the original KeePassX.</source>
|
||||
@ -93,7 +93,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Follow style</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Följ stil</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -116,7 +116,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Remember last key files and security dongles</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Kom ihåg senaste nyckel-fil och säkerhets-enhet</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Load previous databases on startup</source>
|
||||
@ -132,7 +132,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Safely save database files (may be incompatible with Dropbox, etc)</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Spara databasfiler säkert (kan vara inkompatibelt med Dropbox, etc)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Backup database file before saving</source>
|
||||
@ -168,7 +168,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Hide the entry preview panel</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Göm post förhandsvisningspanelen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>General</source>
|
||||
@ -176,11 +176,11 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Hide toolbar (icons)</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Göm verktygsfält (ikonerna)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Minimize instead of app exit</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Minimera istället för att avsluta</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show a system tray icon</source>
|
||||
@ -200,7 +200,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Auto-Type</source>
|
||||
<translation>Autoskriv</translation>
|
||||
<translation>Auto-skriv</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Use entry title to match windows for global Auto-Type</source>
|
||||
@ -220,7 +220,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Auto-Type typing delay</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Auto-skriv fördröjning</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source> ms</source>
|
||||
@ -229,23 +229,23 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Auto-Type start delay</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Auto-skriv start fördröjning</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Check for updates at application startup</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Leta efter uppdateringar vid start</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Include pre-releases when checking for updates</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Inkludera förhandsversioner vid sökning efter uppdateringar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Movable toolbar</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Rörligt verktygsfält</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Button style</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Knapp-stil</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -273,7 +273,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Forget TouchID after inactivity of</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Glöm TouchID efter inaktivitet i</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Convenience</source>
|
||||
@ -285,7 +285,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Forget TouchID when session is locked or lid is closed</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Glöm TouchID när sessionen låses eller locket stängs</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Lock databases after minimizing the window</source>
|
||||
@ -293,7 +293,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Re-lock previously locked database after performing Auto-Type</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Lås tidigare låst databas efter att ha utfört Auto-skriv</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Don't require password repeat when it is visible</source>
|
||||
@ -309,7 +309,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Hide passwords in the entry preview panel</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Göm lösenord i förhandsgranskningsrutan</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Hide entry notes by default</source>
|
||||
@ -321,7 +321,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Use DuckDuckGo as fallback for downloading website icons</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Använd DuckDuckGo som alternativ vid nedladdning av webbplatsikoner</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -429,7 +429,7 @@ Vill du tillåta det?</translation>
|
||||
<name>BrowserEntrySaveDialog</name>
|
||||
<message>
|
||||
<source>KeePassXC-Browser Save Entry</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>KeePassXC-Browser spara post</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Ok</source>
|
||||
@ -442,7 +442,8 @@ Vill du tillåta det?</translation>
|
||||
<message>
|
||||
<source>You have multiple databases open.
|
||||
Please select the correct database for saving credentials.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Du ha flera databaser öppna.
|
||||
Välj databas för att spara uppgifter.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -539,7 +540,7 @@ Please select the correct database for saving credentials.</source>
|
||||
<message>
|
||||
<source>Searc&h in all opened databases for matching credentials</source>
|
||||
<extracomment>Credentials mean login data requested via browser extension</extracomment>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Sök i alla öppna databaser efter matchande uppgifter</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Automatically creating or updating string fields is not supported.</source>
|
||||
@ -547,7 +548,7 @@ Please select the correct database for saving credentials.</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>&Return advanced string fields which start with "KPH: "</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Returnera avancerade text-fält som börjar med "KPH: "</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
|
||||
@ -873,7 +874,7 @@ Would you like to migrate your existing settings now?</source>
|
||||
<name>DatabaseOpenDialog</name>
|
||||
<message>
|
||||
<source>Unlock Database - KeePassXC</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Lås upp databas - KeePassXC</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -969,7 +970,7 @@ Please consider generating a new key file.</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Master Key</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Huvud-lösenord</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Encryption Settings</source>
|
||||
@ -1029,7 +1030,7 @@ This may prevent connection to the browser plugin.</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Disconnect all browsers</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Koppla från alla webbläsare</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Do you really want to disconnect all browsers?
|
||||
@ -1131,7 +1132,7 @@ This is necessary to maintain compatibility with the browser plugin.</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Decryption Time:</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Dektypterings-tid:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>?? s</source>
|
||||
@ -1512,7 +1513,7 @@ Do you want to merge your changes?</source>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<source>Delete entry(s)?</source>
|
||||
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
|
||||
<translation><numerusform>Ta bort post?</numerusform><numerusform>Ta bort poster?</numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<source>Move entry(s) to recycle bin?</source>
|
||||
@ -1606,7 +1607,7 @@ Disable safe saves and try again?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Shared group...</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Delad grupp...</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -1884,7 +1885,7 @@ Disable safe saves and try again?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Public key</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Publik nyckel</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Add key to agent when database is opened/unlocked</source>
|
||||
@ -2097,7 +2098,7 @@ Disable safe saves and try again?</source>
|
||||
<name>EditWidgetIcons</name>
|
||||
<message>
|
||||
<source>&Use default icon</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Använd standard ikon</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Use custo&m icon</source>
|
||||
@ -3109,15 +3110,15 @@ Line %2, column %3</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Import from</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Importera från</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Export to</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Exportera till</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Synchronize with</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Synkronisera med</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Disabled share %1</source>
|
||||
@ -3187,7 +3188,7 @@ Line %2, column %3</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Key File</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Nyckel-fil</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source><p>You can add a key file containing random bytes for additional security.</p><p>You must keep it secret and never lose it or you will be locked out!</p></source>
|
||||
@ -3250,7 +3251,7 @@ Message: %2</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>E&ntries</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Poster</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>&Groups</source>
|
||||
@ -3441,11 +3442,11 @@ We recommend you use the AppImage available on our downloads page.</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>&New entry</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Ny post</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Add a new entry</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Lägg till ny post</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>&Edit entry</source>
|
||||
|
@ -50,7 +50,7 @@
|
||||
<name>AgentSettingsWidget</name>
|
||||
<message>
|
||||
<source>Enable SSH Agent (requires restart)</source>
|
||||
<translation>SSH Aracısını etkinleştir (yeniden başlatma gerektirir)</translation>
|
||||
<translation>SSH İstemcisini etkinleştir (yeniden başlatma gerektirir)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Use OpenSSH for Windows instead of Pageant</source>
|
||||
@ -93,7 +93,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Follow style</source>
|
||||
<translation>Takip tarzı</translation>
|
||||
<translation>Takip tipi</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -245,7 +245,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Button style</source>
|
||||
<translation>Düğme tarzı</translation>
|
||||
<translation>Düğme tipi</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -367,7 +367,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Default sequence</source>
|
||||
<translation>Varsayılan sıra</translation>
|
||||
<translation>Öntanımlı sıra</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -491,7 +491,7 @@ Lütfen kimlik bilgilerini kaydetmek için doğru veritabanını seç.</translat
|
||||
</message>
|
||||
<message>
|
||||
<source>Re&quest to unlock the database if it is locked</source>
|
||||
<translation>Eğer kilitliyse veri tabanını açmayı is&te</translation>
|
||||
<translation>Eğer kilitliyse veritabanının kilidini açma is&teği</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Only entries with the same scheme (http://, https://, ...) are returned.</source>
|
||||
@ -535,7 +535,7 @@ Lütfen kimlik bilgilerini kaydetmek için doğru veritabanını seç.</translat
|
||||
</message>
|
||||
<message>
|
||||
<source>Only the selected database has to be connected with a client.</source>
|
||||
<translation>Yalnızca seçilen veri tabanı istemciyle bağlanmış olmalıdır.</translation>
|
||||
<translation>Yalnızca seçilen veritabanı istemciyle bağlanmış olmalıdır.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Searc&h in all opened databases for matching credentials</source>
|
||||
@ -611,15 +611,15 @@ Lütfen kimlik bilgilerini kaydetmek için doğru veritabanını seç.</translat
|
||||
</message>
|
||||
<message>
|
||||
<source>Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Snap sanal alanı nedeniyle, tarayıcı bütünleşmesini etkinleştirmek için bir komut dosyası çalıştırmalısınız.<br />Bu betiği %1 adresinden edinebilirsiniz.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Please see special instructions for browser extension use below</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Lütfen aşağıdaki tarayıcı uzantısı kullanımına ilişkin özel talimatlara bakın</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2. %3</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Tarayıcı bütünleşmesinin çalışması için KeePassXC-Tarayıcı gereklidir. <br />%1 ve %2 için indirin. %3</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -696,19 +696,23 @@ Moved %2 keys to custom data.</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC: Create a new group</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>KeePassXC: Yeni bir küme oluştur</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>A request for creating a new group "%1" has been received.
|
||||
Do you want to create this group?
|
||||
</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>"%1" adlı yeni bir küme oluşturma isteği alındı.
|
||||
Bu kümeyi oluşturmak ister misiniz?
|
||||
</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Your KeePassXC-Browser settings need to be moved into the database settings.
|
||||
This is necessary to maintain your current browser connections.
|
||||
Would you like to migrate your existing settings now?</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>KeePassXC-Tarayıcı ayarlarınızın veritabanı ayarlarına taşınması gerekir.
|
||||
Bu, mevcut tarayıcı bağlantılarınızı korumak için gereklidir.
|
||||
Mevcut ayarlarınızı şimdi taşımak ister misiniz?</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -872,7 +876,7 @@ Would you like to migrate your existing settings now?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Key not transformed. This is a bug, please report it to the developers!</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Anahtar dönüştürülmedi. Bu bir hatadır, lütfen geliştiricilere bildirin!</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -997,7 +1001,7 @@ Lütfen yeni bir anahtar dosyası oluşturmayı düşünün.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>&Disconnect all browsers</source>
|
||||
<translation>&Tüm tarayıcıları kapatın</translation>
|
||||
<translation>&Tüm tarayıcıların bağlantısını kes</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Forg&et all site-specific settings on entries</source>
|
||||
@ -1039,13 +1043,13 @@ Bu işlem, tarayıcı eklentisine bağlantıyı engelleyebilir.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Disconnect all browsers</source>
|
||||
<translation>Tüm tarayıcıları kapatın</translation>
|
||||
<translation>Tüm tarayıcıların bağlantısını kes</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Do you really want to disconnect all browsers?
|
||||
This may prevent connection to the browser plugin.</source>
|
||||
<translation>Tüm tarayıcıların bağlantısını kesmek istiyor musunuz?
|
||||
Bu işlem, tarayıcı eklentisine bağlantıyı engelleyebilir.</translation>
|
||||
Bu işlem, tarayıcı eklentisi bağlantısını engelleyebilir.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC: No keys found</source>
|
||||
@ -1095,7 +1099,7 @@ Girişlere erişim izinleri iptal edilecek.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The active database does not contain an entry with permissions.</source>
|
||||
<translation>Etkin veritabanı izinleri olan bir girdi içermiyor.</translation>
|
||||
<translation>Etkin veritabanı, izinleri olan bir girdi içermiyor.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Move KeePassHTTP attributes to custom data</source>
|
||||
@ -1254,15 +1258,15 @@ Eğer bu sayı ile devam ederseniz, veritabanınız çok kolay çözülerek kır
|
||||
<name>DatabaseSettingsWidgetGeneral</name>
|
||||
<message>
|
||||
<source>Database Meta Data</source>
|
||||
<translation>Veritabanı Meta Verileri</translation>
|
||||
<translation>Veritabanı Üst Veri</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Database name:</source>
|
||||
<translation>Veri tabanı adı:</translation>
|
||||
<translation>Veritabanı adı:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Database description:</source>
|
||||
<translation>Veri tabanı ayrıntısı:</translation>
|
||||
<translation>Veritabanı açıklaması:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Default username:</source>
|
||||
@ -1379,7 +1383,7 @@ Parola olmadan devam etmek istediğinize emin misiniz?</translation>
|
||||
<name>DatabaseTabWidget</name>
|
||||
<message>
|
||||
<source>KeePass 2 Database</source>
|
||||
<translation>KeePass 2 Veri Tabanı</translation>
|
||||
<translation>KeePass 2 Veritabanı</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>All files</source>
|
||||
@ -1387,7 +1391,7 @@ Parola olmadan devam etmek istediğinize emin misiniz?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Open database</source>
|
||||
<translation>Veri tabanı aç</translation>
|
||||
<translation>Veritabanı aç</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>CSV file</source>
|
||||
@ -1395,19 +1399,19 @@ Parola olmadan devam etmek istediğinize emin misiniz?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Merge database</source>
|
||||
<translation>Veri tabanı birleştir</translation>
|
||||
<translation>Veritabanını birleştir</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Open KeePass 1 database</source>
|
||||
<translation>KeePass 1 veri tabanı aç</translation>
|
||||
<translation>KeePass 1 veritabanı aç</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePass 1 database</source>
|
||||
<translation>KeePass 1 veri tabanı</translation>
|
||||
<translation>KeePass 1 veritabanı</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Export database to CSV file</source>
|
||||
<translation>Veri tabanını CSV dosyasına dışa aktar</translation>
|
||||
<translation>Veritabanını CSV dosyasına dışa aktar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Writing the CSV file failed.</source>
|
||||
@ -1487,11 +1491,11 @@ Bu kesinlikle bir hatadır, lütfen geliştiricilere bildirin.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>No current database.</source>
|
||||
<translation>Geçerli veri tabanı yok.</translation>
|
||||
<translation>Geçerli veritabanı yok.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>No source database, nothing to do.</source>
|
||||
<translation>Kaynak veri tabanı yok, yapılacak bir şey yok.</translation>
|
||||
<translation>Kaynak veritabanı yok, yapılacak bir şey yok.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Search Results (%1)</source>
|
||||
@ -1507,7 +1511,7 @@ Bu kesinlikle bir hatadır, lütfen geliştiricilere bildirin.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The database file has changed. Do you want to load the changes?</source>
|
||||
<translation>Veri tabanı dosyası değiştirildi. Değişiklikleri yüklemek ister misiniz?</translation>
|
||||
<translation>Veritabanı dosyası değiştirildi. Değişiklikleri yüklemek ister misiniz?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Merge Request</source>
|
||||
@ -1586,7 +1590,7 @@ Güvenli kaydetme devre dışı bırakılsın ve tekrar denensin mi?</translatio
|
||||
<message>
|
||||
<source>Writing the database failed.
|
||||
%1</source>
|
||||
<translation>Veritabanını yazma başarısız
|
||||
<translation>Veritabanına yazma başarısız
|
||||
%1</translation>
|
||||
</message>
|
||||
<message>
|
||||
@ -1631,7 +1635,7 @@ Güvenli kaydetme devre dışı bırakılsın ve tekrar denensin mi?</translatio
|
||||
</message>
|
||||
<message>
|
||||
<source>Shared group...</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Paylaşılan küme...</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -1662,7 +1666,7 @@ Güvenli kaydetme devre dışı bırakılsın ve tekrar denensin mi?</translatio
|
||||
</message>
|
||||
<message>
|
||||
<source>SSH Agent</source>
|
||||
<translation>SSH Aracısı</translation>
|
||||
<translation>SSH İstemcisi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>n/a</source>
|
||||
@ -1893,7 +1897,7 @@ Güvenli kaydetme devre dışı bırakılsın ve tekrar denensin mi?</translatio
|
||||
</message>
|
||||
<message>
|
||||
<source>Remove key from agent after</source>
|
||||
<translation>Sonra ajandan anahtarı kaldır</translation>
|
||||
<translation>Anahtarı istemciden sonra kaldır</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source> seconds</source>
|
||||
@ -1905,7 +1909,7 @@ Güvenli kaydetme devre dışı bırakılsın ve tekrar denensin mi?</translatio
|
||||
</message>
|
||||
<message>
|
||||
<source>Remove key from agent when database is closed/locked</source>
|
||||
<translation>Veritabanı kapalı/kilitliyken ajandan anahtarı kaldır</translation>
|
||||
<translation>Veritabanı kapalı/kilitliyken istemciden anahtarı kaldır</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Public key</source>
|
||||
@ -1913,7 +1917,7 @@ Güvenli kaydetme devre dışı bırakılsın ve tekrar denensin mi?</translatio
|
||||
</message>
|
||||
<message>
|
||||
<source>Add key to agent when database is opened/unlocked</source>
|
||||
<translation>Veritabanı kapalı/kilitliyken ajana anahtarı ekle</translation>
|
||||
<translation>Veritabanı kapalı/kilitliyken istemciye anahtar ekle</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Comment</source>
|
||||
@ -2076,15 +2080,15 @@ Güvenli kaydetme devre dışı bırakılsın ve tekrar denensin mi?</translatio
|
||||
</message>
|
||||
<message>
|
||||
<source>The export container %1 is already referenced.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>%1 dışa aktarma kapsayıcı zaten referans alındı.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The import container %1 is already imported.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>%1 içe aktarma kapsayıcı zaten içe aktarıldı</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The container %1 imported and export by different groups.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>%1 kapsayıcı, farklı kümelere göre içe ve dışa aktarıldı.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -2190,7 +2194,7 @@ Güvenli kaydetme devre dışı bırakılsın ve tekrar denensin mi?</translatio
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<source>This icon is used by %n entry(s), and will be replaced by the default icon. Are you sure you want to delete it?</source>
|
||||
<translation><numerusform>Bu simge %n girişi tarafından kullanılır ve varsayılan simge ile değiştirilir. Silmek istediğinize emin misiniz?</numerusform><numerusform>Bu simge %n girişi tarafından kullanılır ve varsayılan simge ile değiştirilir. Silmek istediğinize emin misiniz?</numerusform></translation>
|
||||
<translation><numerusform>Bu simge %n girişi tarafından kullanılır ve öntanımlı simge ile değiştirilir. Silmek istediğinize emin misiniz?</numerusform><numerusform>Bu simge %n girişi tarafından kullanılır ve öntanımlı simge ile değiştirilir. Silmek istediğinize emin misiniz?</numerusform></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -2449,7 +2453,7 @@ Bu etkilenen eklentilerin bozulmasına neden olabilir.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Expiration</source>
|
||||
<translation>Geçerlilik</translation>
|
||||
<translation>Süre bitimi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>URL</source>
|
||||
@ -2594,7 +2598,7 @@ Bu etkilenen eklentilerin bozulmasına neden olabilir.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Wrong key or database file is corrupt.</source>
|
||||
<translation>Yanlış anahtar veya veri tabanı dosyası bozuk.</translation>
|
||||
<translation>Yanlış anahtar veya veritabanı dosyası bozuk.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>missing database headers</source>
|
||||
@ -2632,7 +2636,7 @@ Bu etkilenen eklentilerin bozulmasına neden olabilir.</translation>
|
||||
<name>Kdbx4Reader</name>
|
||||
<message>
|
||||
<source>missing database headers</source>
|
||||
<translation>eksik veri tabanı başlıkları</translation>
|
||||
<translation>eksik veritabanı başlıkları</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to calculate master key</source>
|
||||
@ -2648,7 +2652,7 @@ Bu etkilenen eklentilerin bozulmasına neden olabilir.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Wrong key or database file is corrupt. (HMAC mismatch)</source>
|
||||
<translation>Yanlış anahtar veya veri tabanı dosyası bozuk. (HMAC uyuşmuyor)</translation>
|
||||
<translation>Yanlış anahtar veya veritabanı dosyası bozuk. (HMAC uyuşmuyor)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unknown cipher</source>
|
||||
@ -2812,21 +2816,21 @@ Bu etkilenen eklentilerin bozulmasına neden olabilir.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Not a KeePass database.</source>
|
||||
<translation>KeePass veri tabanı değil.</translation>
|
||||
<translation>KeePass veritabanı değil.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The selected file is an old KeePass 1 database (.kdb).
|
||||
|
||||
You can import it by clicking on Database > 'Import KeePass 1 database...'.
|
||||
This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version.</source>
|
||||
<translation>Seçilen dosya eski bir KeePass1 veri tabanıdır (.kdb).
|
||||
<translation>Seçilen dosya eski bir KeePass1 veritabanıdır (.kdb).
|
||||
|
||||
Veri tabanı > 'KeePass1 veri tabanı içe aktar...'a tıklayarak içe aktarabilirsiniz.
|
||||
Bu tek yönlü bir yer değiştirmedir. İçe aktarılan veri tabanını eski KeePassX 0.4 sürümüyle açamayacaksınız.</translation>
|
||||
Veritabanı > 'KeePass1 veritabanı içe aktar...' üzerine tıklayarak içe aktarabilirsiniz.
|
||||
Bu tek yönlü bir yer değiştirmedir. İçe aktarılan veritabanını eski KeePassX 0.4 sürümüyle açamayacaksınız.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unsupported KeePass 2 database version.</source>
|
||||
<translation>Desteklenmeyen KeePass 2 veri tabanı sürümü.</translation>
|
||||
<translation>Desteklenmeyen KeePass 2 veritabanı sürümü.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Invalid cipher uuid length: %1 (length=%2)</source>
|
||||
@ -2853,7 +2857,7 @@ Bu tek yönlü bir yer değiştirmedir. İçe aktarılan veri tabanını eski Ke
|
||||
</message>
|
||||
<message>
|
||||
<source>Missing icon uuid or data</source>
|
||||
<translation>Simge uuid'si veya verisi eksik</translation>
|
||||
<translation>Simge UUID'si veya verisi eksik</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Missing custom data key or value</source>
|
||||
@ -2885,15 +2889,15 @@ Bu tek yönlü bir yer değiştirmedir. İçe aktarılan veri tabanını eski Ke
|
||||
</message>
|
||||
<message>
|
||||
<source>Null DeleteObject uuid</source>
|
||||
<translation>Boş "DeleteObject" "uuid"</translation>
|
||||
<translation>Boş "DeleteObject" UUID</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Missing DeletedObject uuid or time</source>
|
||||
<translation>Hatalı "DeleteObject" evrensel benzersiz tanımlayıcı "uuid" veya zamanı</translation>
|
||||
<translation>DeletedObject UUID veya zaman eksik</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Null entry uuid</source>
|
||||
<translation>Boş evrensel benzersiz tanımlayıcı "uuid" girdisi</translation>
|
||||
<translation>Boş UUID girdisi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Invalid entry icon number</source>
|
||||
@ -2905,12 +2909,11 @@ Bu tek yönlü bir yer değiştirmedir. İçe aktarılan veri tabanını eski Ke
|
||||
</message>
|
||||
<message>
|
||||
<source>No entry uuid found</source>
|
||||
<translation>
|
||||
Evrensel benzersiz tanımlayıcı "uuid" girdisi bulunamadı</translation>
|
||||
<translation>UUID girdisi bulunamadı</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>History element with different uuid</source>
|
||||
<translation>Farklı evrensel benzersiz tanımlayıcı "uuid" ile geçmiş öğesi</translation>
|
||||
<translation>Farklı UUID ile tarih elemanı</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Duplicate custom attribute found</source>
|
||||
@ -2954,7 +2957,7 @@ Evrensel benzersiz tanımlayıcı "uuid" girdisi bulunamadı</translat
|
||||
</message>
|
||||
<message>
|
||||
<source>Invalid uuid value</source>
|
||||
<translation>Geçersiz Evrensel Benzersiz Tanımlayıcı "uuid" değeri</translation>
|
||||
<translation>Geçersiz UUID değeri</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to decompress binary</source>
|
||||
@ -2974,11 +2977,11 @@ Satır %2, sütun %3</translation>
|
||||
<name>KeePass1OpenWidget</name>
|
||||
<message>
|
||||
<source>Import KeePass1 database</source>
|
||||
<translation>KeePass1 veri tabanı içe aktar</translation>
|
||||
<translation>KeePass1 veritabanı içe aktar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to open the database.</source>
|
||||
<translation>Veri tabanı açılamıyor.</translation>
|
||||
<translation>Veritabanı açılamıyor.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -2989,7 +2992,7 @@ Satır %2, sütun %3</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Not a KeePass database.</source>
|
||||
<translation>KeePass veri tabanı değil.</translation>
|
||||
<translation>KeePass veritabanı değil.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unsupported encryption algorithm.</source>
|
||||
@ -2997,7 +3000,7 @@ Satır %2, sütun %3</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unsupported KeePass database version.</source>
|
||||
<translation>Desteklenmeyen KeePass veri tabanı sürümü.</translation>
|
||||
<translation>Desteklenmeyen KeePass veritabanı sürümü.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to read encryption IV</source>
|
||||
@ -3038,7 +3041,7 @@ Satır %2, sütun %3</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Wrong key or database file is corrupt.</source>
|
||||
<translation>Yanlış anahtar veya veri tabanı dosyası bozuk.</translation>
|
||||
<translation>Yanlış anahtar veya veritabanı dosyası bozuk.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Key transformation failed</source>
|
||||
@ -3157,19 +3160,19 @@ Satır %2, sütun %3</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Disabled share %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Paylaşım devre dışı %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Import from share %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>%1 paylaşımından içe aktar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Export to share %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>%1 paylaşımına aktar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Synchronize with share %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>%1 paylaşımına eşitle</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -3255,7 +3258,7 @@ Message: %2</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>All files</source>
|
||||
<translation>Bütün dosyalar</translation>
|
||||
<translation>Tüm dosyalar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Create Key File...</source>
|
||||
@ -3278,11 +3281,11 @@ Message: %2</source>
|
||||
<name>MainWindow</name>
|
||||
<message>
|
||||
<source>&Database</source>
|
||||
<translation>&Veri tabanı</translation>
|
||||
<translation>&Veritabanı</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>&Recent databases</source>
|
||||
<translation>&Son veri tabanları</translation>
|
||||
<translation>&Son veritabanları</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>&Help</source>
|
||||
@ -3310,15 +3313,15 @@ Message: %2</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>&Open database...</source>
|
||||
<translation>&Veri tabanı aç...</translation>
|
||||
<translation>&Veritabanı aç...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>&Save database</source>
|
||||
<translation>Veri tabanını k&aydet</translation>
|
||||
<translation>Veritabanını k&aydet</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>&Close database</source>
|
||||
<translation>Veri tabanını &kapat</translation>
|
||||
<translation>Veritabanını &kapat</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>&Delete entry</source>
|
||||
@ -3334,11 +3337,11 @@ Message: %2</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Sa&ve database as...</source>
|
||||
<translation>Veri tabanını farklı ka&ydet...</translation>
|
||||
<translation>Veritabanını farklı ka&ydet...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Database settings</source>
|
||||
<translation>Veri tabnı ayarları</translation>
|
||||
<translation>Veritabanı ayarları</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>&Clone entry</source>
|
||||
@ -3362,11 +3365,11 @@ Message: %2</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Password Generator</source>
|
||||
<translation>Parola Oluşturucu</translation>
|
||||
<translation>Parola oluşturucu</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>&Lock databases</source>
|
||||
<translation>Veri tabanlarını &kilitle</translation>
|
||||
<translation>Veritabanlarını &kilitle</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>&Title</source>
|
||||
@ -3476,7 +3479,7 @@ Keepassxc indirme sayfasında mevcut Appımage kullanmanızı öneririz.</transl
|
||||
</message>
|
||||
<message>
|
||||
<source>&Merge from database...</source>
|
||||
<translation>Veritabanından &birleştir ...</translation>
|
||||
<translation>Veritabanından &birleştir...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Merge from another KDBX database</source>
|
||||
@ -3516,7 +3519,7 @@ Keepassxc indirme sayfasında mevcut Appımage kullanmanızı öneririz.</transl
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy &password</source>
|
||||
<translation>Kopyala &parola</translation>
|
||||
<translation>&Parolayı kopyala</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Perform &Auto-Type</source>
|
||||
@ -3593,7 +3596,7 @@ Bazı hatalar ve küçük sorunlar olabilir, bu sürüm şu an dağıtımda değ
|
||||
</message>
|
||||
<message>
|
||||
<source>older entry merged from database "%1"</source>
|
||||
<translation>eski giriş "%1" veritabanından birleştirildi</translation>
|
||||
<translation>eski giriş "%1" veritabanıyla birleştirildi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Adding backup for older target %1 [%2]</source>
|
||||
@ -3668,7 +3671,7 @@ Bazı hatalar ve küçük sorunlar olabilir, bu sürüm şu an dağıtımda değ
|
||||
</message>
|
||||
<message>
|
||||
<source>Simple Settings</source>
|
||||
<translation>Temel Ayarlar</translation>
|
||||
<translation>Basit Ayarlar</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -4159,15 +4162,15 @@ Bazı hatalar ve küçük sorunlar olabilir, bu sürüm şu an dağıtımda değ
|
||||
</message>
|
||||
<message>
|
||||
<source>Add a new entry to a database.</source>
|
||||
<translation>Veri tabanına yeni girdi ekle.</translation>
|
||||
<translation>Veritabanına yeni girdi ekle.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Path of the database.</source>
|
||||
<translation>Veri tabanının yolu.</translation>
|
||||
<translation>Veritabanının yolu.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Key file of the database.</source>
|
||||
<translation>Veri tabanının anahtar dosyası.</translation>
|
||||
<translation>Veritabanının anahtar dosyası.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>path</source>
|
||||
@ -4252,11 +4255,11 @@ Bazı hatalar ve küçük sorunlar olabilir, bu sürüm şu an dağıtımda değ
|
||||
</message>
|
||||
<message>
|
||||
<source>Extract and print the content of a database.</source>
|
||||
<translation>Veri tabanının içeriğini çıkar ve yazdır.</translation>
|
||||
<translation>Veritabanının içeriğini çıkar ve yazdır.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Path of the database to extract.</source>
|
||||
<translation>Veri tabanının çıkarılacağı yol.</translation>
|
||||
<translation>Veritabanının çıkarılacağı yol.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Insert password to unlock %1: </source>
|
||||
@ -4328,7 +4331,7 @@ Kullanılabilir komutlar:
|
||||
</message>
|
||||
<message>
|
||||
<source>Names of the attributes to show. This option can be specified more than once, with each attribute shown one-per-line in the given order. If no attributes are specified, a summary of the default attributes is given.</source>
|
||||
<translation>Gösterilecek özniteliklerin isimleri. Bu seçenek, her bir özniteliğin verilen sıraya göre bir satırda gösterilmesiyle birden fazla kez belirtilebilir. Eğer hiçbir öznitelik belirtilmediyse, varsayılan özniteliklerin bir özeti verilir.</translation>
|
||||
<translation>Gösterilecek özniteliklerin isimleri. Bu seçenek, her bir özniteliğin verilen sıraya göre bir satırda gösterilmesiyle birden fazla kez belirtilebilir. Eğer hiçbir öznitelik belirtilmediyse, öntanımlı özniteliklerin bir özeti verilir.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>attribute</source>
|
||||
@ -4340,7 +4343,7 @@ Kullanılabilir komutlar:
|
||||
</message>
|
||||
<message>
|
||||
<source>NULL device</source>
|
||||
<translation>NULL aygıtı</translation>
|
||||
<translation>Geçersiz aygıt</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>error reading from device</source>
|
||||
@ -4400,7 +4403,7 @@ Kullanılabilir komutlar:
|
||||
</message>
|
||||
<message>
|
||||
<source>SSH Agent</source>
|
||||
<translation>SSH Aracısı</translation>
|
||||
<translation>SSH İstemcisi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Generate a new random diceware passphrase.</source>
|
||||
@ -4414,11 +4417,11 @@ Kullanılabilir komutlar:
|
||||
<source>Wordlist for the diceware generator.
|
||||
[Default: EFF English]</source>
|
||||
<translation>Diceware oluşturucu için Kelime Listesi.
|
||||
[Varsayılan: EFF İngilizce]</translation>
|
||||
[Öntanımlı: EFF İngilizce]</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Generate a new random password.</source>
|
||||
<translation>Yeni bir karışık şifre oluştur.</translation>
|
||||
<translation>Yeni bir karışık parola oluştur.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Invalid value for password length %1.</source>
|
||||
@ -4495,7 +4498,7 @@ Kullanılabilir komutlar:
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter new password for entry: </source>
|
||||
<translation>Girdi için yeni şifre girin: </translation>
|
||||
<translation>Girdi için yeni parola gir: </translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Writing the database failed: %1</source>
|
||||
@ -4759,7 +4762,7 @@ Kullanılabilir komutlar:
|
||||
</message>
|
||||
<message>
|
||||
<source>Message encryption failed.</source>
|
||||
<translation>Mesaj şifreleme başarısız.</translation>
|
||||
<translation>İleti şifreleme başarısız.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>No groups found</source>
|
||||
@ -4859,7 +4862,7 @@ Kullanılabilir komutlar:
|
||||
</message>
|
||||
<message>
|
||||
<source>Cannot create new group</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Yeni küme oluşturulamıyor</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -5119,7 +5122,7 @@ Kullanılabilir komutlar:
|
||||
</message>
|
||||
<message>
|
||||
<source>All files</source>
|
||||
<translation>Bütün dosyalar</translation>
|
||||
<translation>Tüm dosyalar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Select path</source>
|
||||
@ -5135,7 +5138,7 @@ Kullanılabilir komutlar:
|
||||
</message>
|
||||
<message>
|
||||
<source>Signer:</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>İmzalayan:</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -5258,27 +5261,27 @@ Kullanılabilir komutlar:
|
||||
</message>
|
||||
<message>
|
||||
<source>Multiple import source path to %1 in %2</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>%2 içinde %1'e çoklu içe aktarma kaynak yolu</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Conflicting export target path %1 in %2</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Çakışan aktarma hedef yolu %1 %2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not embed signature: Could not open file to write (%1)</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>İmza gömülemedi: Yazılacak dosya açılamadı (%1)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not embed signature: Could not write file (%1)</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>İmza gömülemedi: Dosya yazılamadı (%1)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not embed database: Could not open file to write (%1)</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Veritabanı gömülemedi: Yazılacak dosya açılamadı (%1)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not embed database: Could not write file (%1)</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Veritabanı gömülemedi: dosya yazılamadı (%1)</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -5332,7 +5335,7 @@ Kullanılabilir komutlar:
|
||||
</message>
|
||||
<message>
|
||||
<source>Default RFC 6238 token settings</source>
|
||||
<translation>Varsayılan RFC 6238 anahtar ayarları</translation>
|
||||
<translation>Öntanımlı RFC 6238 anahtar ayarları</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Steam token settings</source>
|
||||
@ -5427,7 +5430,7 @@ Kullanılabilir komutlar:
|
||||
<name>WelcomeWidget</name>
|
||||
<message>
|
||||
<source>Start storing your passwords securely in a KeePassXC database</source>
|
||||
<translation>Parolalarınızı KeePassXC veri tabanında güvenle depolamaya başlayın</translation>
|
||||
<translation>Parolalarınızı KeePassXC veritabanında güvenle depolamaya başlayın</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Create new database</source>
|
||||
@ -5462,11 +5465,11 @@ Kullanılabilir komutlar:
|
||||
</message>
|
||||
<message>
|
||||
<source>YubiKey Challenge-Response</source>
|
||||
<translation>YubiKey Challenge-Response</translation>
|
||||
<translation>YubiKey Karşılama Yanıtı</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source><p>If you own a <a href="https://www.yubico.com/">YubiKey</a>, you can use it for additional security.</p><p>The YubiKey requires one of its slots to be programmed as <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p></source>
|
||||
<translation><p>Eğer bir <a href="https://www.yubico.com/">YubiKey</a>sahibiyseniz ek güvenlik için kullanabilirsiniz.</p><p>YubiKey, yuvalarından birinin programlanması gerekir <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Challenge-Response</a>.</p></translation>
|
||||
<translation><p>Eğer bir <a href="https://www.yubico.com/">YubiKey</a> sahibiyseniz ek güvenlik için kullanabilirsiniz.</p><p>YubiKey yuvalarından birinin programlanması gerekir <a href="https://www.yubico.com/products/services-software/personalization-tools/challenge-response/">HMAC-SHA1 Karşılama-Yanıtı</a>.</p></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>No YubiKey detected, please ensure it's plugged in.</source>
|
||||
|
@ -611,15 +611,15 @@ Please select the correct database for saving credentials.</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Через заходи безпеки у Snap Вам необхідно виконати сценарій для сполучення з переглядачем. <br />Ви можете знайти файл сценарію у %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Please see special instructions for browser extension use below</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Нижче Ви можете знайти інструкції для використання додатку для браузера</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2. %3</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Для сполучення з переглядачем необхідний KeePassXC-Browser. <br />Завантажте його для %1 та %2. %3</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -696,19 +696,23 @@ Moved %2 keys to custom data.</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC: Create a new group</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>KeePassXC: Створити нову групу</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>A request for creating a new group "%1" has been received.
|
||||
Do you want to create this group?
|
||||
</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Отримано запит для створення нової групи "%1".
|
||||
Ви хочете створити цю групу?
|
||||
</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Your KeePassXC-Browser settings need to be moved into the database settings.
|
||||
This is necessary to maintain your current browser connections.
|
||||
Would you like to migrate your existing settings now?</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Ваші параметри KeePassXC-Переглядача мають бути переміщені до параметрів сховища.
|
||||
Це необхідно для підтримання сполучень з Вашим поточним переглядачем.
|
||||
Бажаєте перемістити параметри зараз?</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -872,7 +876,7 @@ Would you like to migrate your existing settings now?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Key not transformed. This is a bug, please report it to the developers!</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Ключ не перетворено через ваду в програмі. Будь ласка, повідомте про це розробникам!</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -1631,7 +1635,7 @@ Disable safe saves and try again?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Shared group...</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Спільна група...</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -2076,15 +2080,15 @@ Disable safe saves and try again?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>The export container %1 is already referenced.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>На експортну оболонку %1 вже існує посилання.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The import container %1 is already imported.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Оболонку %1 вже імпортовано.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The container %1 imported and export by different groups.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Оболонку %1 імпортують та експортують різні групи.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -3157,19 +3161,19 @@ Line %2, column %3</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Disabled share %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Вимкнутий спільний ресурс %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Import from share %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Імпортувати зі спільного ресурсу %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Export to share %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Експортувати до спільного ресурсу %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Synchronize with share %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Узгодити зі спільним ресурсом %1</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -4858,7 +4862,7 @@ Available commands:
|
||||
</message>
|
||||
<message>
|
||||
<source>Cannot create new group</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Неможливо створити нову групу</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -5134,7 +5138,7 @@ Available commands:
|
||||
</message>
|
||||
<message>
|
||||
<source>Signer:</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Підписувач:</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -5253,31 +5257,31 @@ Available commands:
|
||||
</message>
|
||||
<message>
|
||||
<source>Do you want to trust %1 with the fingerprint of %2 from %3?</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Довірити %1, що має відбиток %2 з %3? {1 ?} {2 ?}</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Multiple import source path to %1 in %2</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Шлях до %1 має декілька джерел імпорту в %2.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Conflicting export target path %1 in %2</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Суперечливий шлях для експорту %1 у %2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not embed signature: Could not open file to write (%1)</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Неможливо вкласти підпис: неможливо відкрити файл для запису (%1)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not embed signature: Could not write file (%1)</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Неможливо вкласти підпис: неможливо записати файл (%1)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not embed database: Could not open file to write (%1)</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Неможливо вкласти сховище: неможливо відкрити файл для запису (%1)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not embed database: Could not write file (%1)</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Неможливо вкласти сховище: неможливо записати файл (%1)</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
@ -611,15 +611,15 @@ Please select the correct database for saving credentials.</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>由于快照沙盒,必须运行脚本才能启用浏览器集成。<br />您可以从 %1 获取此脚本</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Please see special instructions for browser extension use below</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>请参阅下面的浏览器扩展使用的特殊说明</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2. %3</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>浏览器集成需要KeePassXC-Browser才能工作。<br />下载%1 和 %2. %3</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -696,19 +696,22 @@ Moved %2 keys to custom data.</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC: Create a new group</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>keepassxc: 创建新群组</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>A request for creating a new group "%1" has been received.
|
||||
Do you want to create this group?
|
||||
</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>已收到创建新群组 "%1" 的请求。
|
||||
是否要创建此群组?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Your KeePassXC-Browser settings need to be moved into the database settings.
|
||||
This is necessary to maintain your current browser connections.
|
||||
Would you like to migrate your existing settings now?</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>您的keepassxc浏览器设置需要移动到数据库设置中。
|
||||
这是保持当前浏览器连接所必需的。
|
||||
是否要立即迁移现有设置?</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -872,7 +875,7 @@ Would you like to migrate your existing settings now?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Key not transformed. This is a bug, please report it to the developers!</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>密钥未转换。这是一个bug,请报告给开发者!</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -1630,7 +1633,7 @@ Disable safe saves and try again?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Shared group...</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>共享群组...</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -2075,15 +2078,15 @@ Disable safe saves and try again?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>The export container %1 is already referenced.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>导出容器 %1 已被引用。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The import container %1 is already imported.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>导入容器 %1 已导入。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The container %1 imported and export by different groups.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>容器 %1 由不同的群组导入和导出。</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -3151,19 +3154,19 @@ Line %2, column %3</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Disabled share %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>已禁用共享 %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Import from share %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>从共享 %1 导入</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Export to share %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>导出到共享 %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Synchronize with share %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>与共享 %1 同步</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -4853,7 +4856,7 @@ Available commands:
|
||||
</message>
|
||||
<message>
|
||||
<source>Cannot create new group</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>无法创建新群组</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -5129,7 +5132,7 @@ Available commands:
|
||||
</message>
|
||||
<message>
|
||||
<source>Signer:</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>签名:</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -5252,27 +5255,27 @@ Available commands:
|
||||
</message>
|
||||
<message>
|
||||
<source>Multiple import source path to %1 in %2</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>多个导入源路径到 %1 in %2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Conflicting export target path %1 in %2</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>冲突的导出目标路径 %1 in %2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not embed signature: Could not open file to write (%1)</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>无法嵌入签名:无法打开要写入的文件 (%1)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not embed signature: Could not write file (%1)</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>无法嵌入签名:无法写入文件 (%1)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not embed database: Could not open file to write (%1)</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>无法嵌入数据库:无法打开要写入的文件 (%1)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not embed database: Could not write file (%1)</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>无法嵌入数据库:无法写入文件 (%1)</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
@ -1,5 +1,5 @@
|
||||
name: keepassxc
|
||||
version: 2.4.0
|
||||
version: 2.4.1
|
||||
grade: stable
|
||||
summary: Community-driven port of the Windows application “KeePass Password Safe”
|
||||
description: |
|
||||
@ -9,6 +9,12 @@ description: |
|
||||
confinement: strict
|
||||
base: core18
|
||||
|
||||
plugs:
|
||||
icon-themes: # fix mouse cursor theme
|
||||
interface: content
|
||||
target: $SNAP/data-dir/icons
|
||||
default-provider: gtk-common-themes
|
||||
|
||||
apps:
|
||||
keepassxc:
|
||||
command: desktop-launch keepassxc
|
||||
@ -67,6 +73,7 @@ parts:
|
||||
- libquazip5-1
|
||||
- libusb-1.0-0
|
||||
- qtwayland5
|
||||
- qt5-style-plugins # for mouse cursor theme fix
|
||||
override-build: |
|
||||
snapcraftctl build
|
||||
sed -i 's|Icon=keepassxc|Icon=${SNAP}/usr/share/icons/hicolor/256x256/apps/keepassxc.png|g' $SNAPCRAFT_PART_INSTALL/usr/share/applications/org.keepassxc.KeePassXC.desktop
|
||||
|
@ -195,6 +195,7 @@ add_feature_info(SSHAgent WITH_XC_SSHAGENT "SSH agent integration compatible wit
|
||||
add_feature_info(KeeShare WITH_XC_KEESHARE "Sharing integration with KeeShare")
|
||||
add_feature_info(KeeShare-Secure WITH_XC_KEESHARE_SECURE "Sharing integration with KeeShare with secure sources")
|
||||
add_feature_info(YubiKey WITH_XC_YUBIKEY "YubiKey HMAC-SHA1 challenge-response")
|
||||
add_feature_info(UpdateCheck WITH_XC_UPDATECHECK "Automatic update checking")
|
||||
if(APPLE)
|
||||
add_feature_info(TouchID WITH_XC_TOUCHID "TouchID integration")
|
||||
endif()
|
||||
@ -293,6 +294,9 @@ if(APPLE)
|
||||
target_link_libraries(keepassx_core "-framework LocalAuthentication")
|
||||
endif()
|
||||
endif()
|
||||
if(HAIKU)
|
||||
target_link_libraries(keepassx_core network)
|
||||
endif()
|
||||
if(UNIX AND NOT APPLE)
|
||||
target_link_libraries(keepassx_core Qt5::DBus)
|
||||
endif()
|
||||
|
@ -214,7 +214,7 @@ void AutoType::executeAutoTypeActions(const Entry* entry, QWidget* hideWindow, c
|
||||
|
||||
if (hideWindow) {
|
||||
#if defined(Q_OS_MACOS)
|
||||
m_plugin->raiseLastActiveWindow();
|
||||
m_plugin->hideOwnWindow();
|
||||
#else
|
||||
hideWindow->showMinimized();
|
||||
#endif
|
||||
|
@ -43,7 +43,7 @@ public:
|
||||
virtual AutoTypeExecutor* createExecutor() = 0;
|
||||
|
||||
#if defined(Q_OS_MACOS)
|
||||
virtual bool raiseLastActiveWindow() = 0;
|
||||
virtual bool hideOwnWindow() = 0;
|
||||
virtual bool raiseOwnWindow() = 0;
|
||||
#endif
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
if(WITH_XC_AUTOTYPE)
|
||||
if(UNIX AND NOT APPLE)
|
||||
if(UNIX AND NOT APPLE AND NOT HAIKU)
|
||||
find_package(X11)
|
||||
find_package(Qt5X11Extras 5.2)
|
||||
if(PRINT_SUMMARY)
|
||||
|
@ -165,9 +165,9 @@ bool AutoTypePlatformMac::raiseWindow(WId pid)
|
||||
//
|
||||
// Activate last active window
|
||||
//
|
||||
bool AutoTypePlatformMac::raiseLastActiveWindow()
|
||||
bool AutoTypePlatformMac::hideOwnWindow()
|
||||
{
|
||||
return macUtils()->raiseLastActiveWindow();
|
||||
return macUtils()->hideOwnWindow();
|
||||
}
|
||||
|
||||
//
|
||||
|
@ -44,7 +44,7 @@ public:
|
||||
bool raiseWindow(WId pid) override;
|
||||
AutoTypeExecutor* createExecutor() override;
|
||||
|
||||
bool raiseLastActiveWindow() override;
|
||||
bool hideOwnWindow() override;
|
||||
bool raiseOwnWindow() override;
|
||||
|
||||
void sendChar(const QChar& ch, bool isKeyDown);
|
||||
|
@ -111,7 +111,7 @@ bool AutoTypePlatformTest::raiseWindow(WId window)
|
||||
}
|
||||
|
||||
#if defined(Q_OS_MACOS)
|
||||
bool AutoTypePlatformTest::raiseLastActiveWindow()
|
||||
bool AutoTypePlatformTest::hideOwnWindow()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
@ -44,7 +44,7 @@ public:
|
||||
AutoTypeExecutor* createExecutor() override;
|
||||
|
||||
#if defined(Q_OS_MACOS)
|
||||
bool raiseLastActiveWindow() override;
|
||||
bool hideOwnWindow() override;
|
||||
bool raiseOwnWindow() override;
|
||||
#endif
|
||||
|
||||
|
@ -47,7 +47,7 @@ BrowserOptionDialog::BrowserOptionDialog(QWidget* parent)
|
||||
tr("KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2. %3")
|
||||
.arg("<a href=\"https://addons.mozilla.org/en-US/firefox/addon/keepassxc-browser/\">Firefox</a>",
|
||||
"<a href=\"https://chrome.google.com/webstore/detail/keepassxc-browser/oboonakemofpalcgghocfoadofidjkkk\">"
|
||||
"Google Chrome / Chromium / Vivaldi</a>",
|
||||
"Google Chrome / Chromium / Vivaldi / Brave</a>",
|
||||
snapInstructions));
|
||||
// clang-format on
|
||||
|
||||
@ -75,9 +75,11 @@ BrowserOptionDialog::BrowserOptionDialog(QWidget* parent)
|
||||
connect(m_ui->customProxyLocationBrowseButton, SIGNAL(clicked()), this, SLOT(showProxyLocationFileDialog()));
|
||||
|
||||
#ifdef Q_OS_WIN
|
||||
// Brave uses Chrome's registry settings
|
||||
m_ui->braveSupport->setHidden(true);
|
||||
// Vivaldi uses Chrome's registry settings
|
||||
m_ui->vivaldiSupport->setHidden(true);
|
||||
m_ui->chromeSupport->setText("Chrome and Vivaldi");
|
||||
m_ui->chromeSupport->setText("Chrome, Vivaldi, and Brave");
|
||||
// Tor Browser uses Firefox's registry settings
|
||||
m_ui->torBrowserSupport->setHidden(true);
|
||||
m_ui->firefoxSupport->setText("Firefox and Tor Browser");
|
||||
@ -122,6 +124,7 @@ void BrowserOptionDialog::loadSettings()
|
||||
m_ui->chromiumSupport->setChecked(settings->chromiumSupport());
|
||||
m_ui->firefoxSupport->setChecked(settings->firefoxSupport());
|
||||
#ifndef Q_OS_WIN
|
||||
m_ui->braveSupport->setChecked(settings->braveSupport());
|
||||
m_ui->vivaldiSupport->setChecked(settings->vivaldiSupport());
|
||||
m_ui->torBrowserSupport->setChecked(settings->torBrowserSupport());
|
||||
#endif
|
||||
@ -183,6 +186,7 @@ void BrowserOptionDialog::saveSettings()
|
||||
settings->setChromiumSupport(m_ui->chromiumSupport->isChecked());
|
||||
settings->setFirefoxSupport(m_ui->firefoxSupport->isChecked());
|
||||
#ifndef Q_OS_WIN
|
||||
settings->setBraveSupport(m_ui->braveSupport->isChecked());
|
||||
settings->setVivaldiSupport(m_ui->vivaldiSupport->isChecked());
|
||||
settings->setTorBrowserSupport(m_ui->torBrowserSupport->isChecked());
|
||||
#endif
|
||||
|
@ -150,6 +150,16 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="2">
|
||||
<widget class="QCheckBox" name="braveSupport">
|
||||
<property name="text">
|
||||
<string>&Brave</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
|
@ -238,6 +238,17 @@ void BrowserSettings::setVivaldiSupport(bool enabled)
|
||||
HostInstaller::SupportedBrowsers::VIVALDI, enabled, supportBrowserProxy(), customProxyLocation());
|
||||
}
|
||||
|
||||
bool BrowserSettings::braveSupport()
|
||||
{
|
||||
return m_hostInstaller.checkIfInstalled(HostInstaller::SupportedBrowsers::BRAVE);
|
||||
}
|
||||
|
||||
void BrowserSettings::setBraveSupport(bool enabled)
|
||||
{
|
||||
m_hostInstaller.installBrowser(
|
||||
HostInstaller::SupportedBrowsers::BRAVE, enabled, supportBrowserProxy(), customProxyLocation());
|
||||
}
|
||||
|
||||
bool BrowserSettings::torBrowserSupport()
|
||||
{
|
||||
return m_hostInstaller.checkIfInstalled(HostInstaller::SupportedBrowsers::TOR_BROWSER);
|
||||
|
@ -72,6 +72,8 @@ public:
|
||||
void setFirefoxSupport(bool enabled);
|
||||
bool vivaldiSupport();
|
||||
void setVivaldiSupport(bool enabled);
|
||||
bool braveSupport();
|
||||
void setBraveSupport(bool enabled);
|
||||
bool torBrowserSupport();
|
||||
void setTorBrowserSupport(bool enabled);
|
||||
|
||||
|
@ -39,12 +39,14 @@ HostInstaller::HostInstaller()
|
||||
, TARGET_DIR_FIREFOX("/Library/Application Support/Mozilla/NativeMessagingHosts")
|
||||
, TARGET_DIR_VIVALDI("/Library/Application Support/Vivaldi/NativeMessagingHosts")
|
||||
, TARGET_DIR_TOR_BROWSER("/Library/Application Support/TorBrowser-Data/Browser/Mozilla/NativeMessagingHosts")
|
||||
, TARGET_DIR_BRAVE("/Library/Application Support/BraveSoftware/Brave-Browser/NativeMessagingHosts")
|
||||
#elif defined(Q_OS_LINUX)
|
||||
, TARGET_DIR_CHROME("/.config/google-chrome/NativeMessagingHosts")
|
||||
, TARGET_DIR_CHROMIUM("/.config/chromium/NativeMessagingHosts")
|
||||
, TARGET_DIR_FIREFOX("/.mozilla/native-messaging-hosts")
|
||||
, TARGET_DIR_VIVALDI("/.config/vivaldi/NativeMessagingHosts")
|
||||
, TARGET_DIR_TOR_BROWSER("/.tor-browser/app/Browser/TorBrowser/Data/Browser/.mozilla/native-messaging-hosts")
|
||||
, TARGET_DIR_BRAVE("/.config/BraveSoftware/Brave-Browser/NativeMessagingHosts")
|
||||
#elif defined(Q_OS_WIN)
|
||||
// clang-format off
|
||||
, TARGET_DIR_CHROME("HKEY_CURRENT_USER\\Software\\Google\\Chrome\\NativeMessagingHosts\\org.keepassxc.keepassxc_browser")
|
||||
@ -53,6 +55,7 @@ HostInstaller::HostInstaller()
|
||||
, TARGET_DIR_FIREFOX("HKEY_CURRENT_USER\\Software\\Mozilla\\NativeMessagingHosts\\org.keepassxc.keepassxc_browser")
|
||||
, TARGET_DIR_VIVALDI(TARGET_DIR_CHROME)
|
||||
, TARGET_DIR_TOR_BROWSER(TARGET_DIR_FIREFOX)
|
||||
, TARGET_DIR_BRAVE(TARGET_DIR_CHROME)
|
||||
#endif
|
||||
{
|
||||
}
|
||||
@ -140,7 +143,8 @@ void HostInstaller::installBrowser(SupportedBrowsers browser,
|
||||
*/
|
||||
void HostInstaller::updateBinaryPaths(const bool& proxy, const QString& location)
|
||||
{
|
||||
for (int i = 0; i < 4; ++i) {
|
||||
// Where 6 is the number of entries in the SupportedBrowsers enum declared in HostInstaller.h
|
||||
for (int i = 0; i < 6; ++i) {
|
||||
if (checkIfInstalled(static_cast<SupportedBrowsers>(i))) {
|
||||
installBrowser(static_cast<SupportedBrowsers>(i), true, proxy, location);
|
||||
}
|
||||
@ -166,6 +170,8 @@ QString HostInstaller::getTargetPath(SupportedBrowsers browser) const
|
||||
return TARGET_DIR_VIVALDI;
|
||||
case SupportedBrowsers::TOR_BROWSER:
|
||||
return TARGET_DIR_TOR_BROWSER;
|
||||
case SupportedBrowsers::BRAVE:
|
||||
return TARGET_DIR_BRAVE;
|
||||
default:
|
||||
return QString();
|
||||
}
|
||||
@ -188,9 +194,11 @@ QString HostInstaller::getBrowserName(SupportedBrowsers browser) const
|
||||
case SupportedBrowsers::FIREFOX:
|
||||
return "firefox";
|
||||
case SupportedBrowsers::VIVALDI:
|
||||
return "vivaldi";
|
||||
return "vivaldi";
|
||||
case SupportedBrowsers::TOR_BROWSER:
|
||||
return "tor-browser";
|
||||
case SupportedBrowsers::BRAVE:
|
||||
return "brave";
|
||||
default:
|
||||
return QString();
|
||||
}
|
||||
|
@ -34,7 +34,8 @@ public:
|
||||
CHROMIUM = 1,
|
||||
FIREFOX = 2,
|
||||
VIVALDI = 3,
|
||||
TOR_BROWSER = 4
|
||||
TOR_BROWSER = 4,
|
||||
BRAVE = 5
|
||||
};
|
||||
|
||||
public:
|
||||
@ -66,6 +67,7 @@ private:
|
||||
const QString TARGET_DIR_FIREFOX;
|
||||
const QString TARGET_DIR_VIVALDI;
|
||||
const QString TARGET_DIR_TOR_BROWSER;
|
||||
const QString TARGET_DIR_BRAVE;
|
||||
};
|
||||
|
||||
#endif // HOSTINSTALLER_H
|
||||
|
@ -50,6 +50,7 @@ int Add::execute(const QStringList& arguments)
|
||||
parser.addPositionalArgument("database", QObject::tr("Path of the database."));
|
||||
parser.addOption(Command::QuietOption);
|
||||
parser.addOption(Command::KeyFileOption);
|
||||
parser.addOption(Command::NoPasswordOption);
|
||||
|
||||
QCommandLineOption username(QStringList() << "u"
|
||||
<< "username",
|
||||
@ -91,6 +92,7 @@ int Add::execute(const QStringList& arguments)
|
||||
const QString& entryPath = args.at(1);
|
||||
|
||||
auto db = Utils::unlockDatabase(databasePath,
|
||||
!parser.isSet(Command::NoPasswordOption),
|
||||
parser.value(Command::KeyFileOption),
|
||||
parser.isSet(Command::QuietOption) ? Utils::DEVNULL : Utils::STDOUT,
|
||||
Utils::STDERR);
|
||||
|
@ -94,5 +94,4 @@ endif()
|
||||
|
||||
if(APPLE OR UNIX)
|
||||
install(FILES keepassxc-cli.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1/)
|
||||
execute_process(COMMAND mandb -q)
|
||||
endif()
|
||||
|
@ -49,6 +49,7 @@ int Clip::execute(const QStringList& arguments)
|
||||
parser.addPositionalArgument("database", QObject::tr("Path of the database."));
|
||||
parser.addOption(Command::QuietOption);
|
||||
parser.addOption(Command::KeyFileOption);
|
||||
parser.addOption(Command::NoPasswordOption);
|
||||
|
||||
QCommandLineOption totp(QStringList() << "t"
|
||||
<< "totp",
|
||||
@ -67,6 +68,7 @@ int Clip::execute(const QStringList& arguments)
|
||||
}
|
||||
|
||||
auto db = Utils::unlockDatabase(args.at(0),
|
||||
!parser.isSet(Command::NoPasswordOption),
|
||||
parser.value(Command::KeyFileOption),
|
||||
parser.isSet(Command::QuietOption) ? Utils::DEVNULL : Utils::STDOUT,
|
||||
Utils::STDERR);
|
||||
|
@ -46,6 +46,10 @@ const QCommandLineOption Command::KeyFileOption = QCommandLineOption(QStringList
|
||||
QObject::tr("Key file of the database."),
|
||||
QObject::tr("path"));
|
||||
|
||||
const QCommandLineOption Command::NoPasswordOption =
|
||||
QCommandLineOption(QStringList() << "no-password",
|
||||
QObject::tr("Deactivate password key for the database."));
|
||||
|
||||
QMap<QString, Command*> commands;
|
||||
|
||||
Command::~Command()
|
||||
|
@ -40,6 +40,7 @@ public:
|
||||
|
||||
static const QCommandLineOption QuietOption;
|
||||
static const QCommandLineOption KeyFileOption;
|
||||
static const QCommandLineOption NoPasswordOption;
|
||||
};
|
||||
|
||||
#endif // KEEPASSXC_COMMAND_H
|
||||
|
@ -49,6 +49,7 @@ int Edit::execute(const QStringList& arguments)
|
||||
parser.addPositionalArgument("database", QObject::tr("Path of the database."));
|
||||
parser.addOption(Command::QuietOption);
|
||||
parser.addOption(Command::KeyFileOption);
|
||||
parser.addOption(Command::NoPasswordOption);
|
||||
|
||||
QCommandLineOption username(QStringList() << "u"
|
||||
<< "username",
|
||||
@ -95,6 +96,7 @@ int Edit::execute(const QStringList& arguments)
|
||||
const QString& entryPath = args.at(1);
|
||||
|
||||
auto db = Utils::unlockDatabase(databasePath,
|
||||
!parser.isSet(Command::NoPasswordOption),
|
||||
parser.value(Command::KeyFileOption),
|
||||
parser.isSet(Command::QuietOption) ? Utils::DEVNULL : Utils::STDOUT,
|
||||
Utils::STDERR);
|
||||
|
@ -51,6 +51,7 @@ int Extract::execute(const QStringList& arguments)
|
||||
parser.addPositionalArgument("database", QObject::tr("Path of the database to extract."));
|
||||
parser.addOption(Command::QuietOption);
|
||||
parser.addOption(Command::KeyFileOption);
|
||||
parser.addOption(Command::NoPasswordOption);
|
||||
parser.addHelpOption();
|
||||
parser.process(arguments);
|
||||
|
||||
@ -59,17 +60,19 @@ int Extract::execute(const QStringList& arguments)
|
||||
errorTextStream << parser.helpText().replace("keepassxc-cli", "keepassxc-cli extract");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
if (!parser.isSet(Command::QuietOption)) {
|
||||
outputTextStream << QObject::tr("Insert password to unlock %1: ").arg(args.at(0)) << flush;
|
||||
}
|
||||
|
||||
|
||||
auto compositeKey = QSharedPointer<CompositeKey>::create();
|
||||
|
||||
QString line = Utils::getPassword(parser.isSet(Command::QuietOption) ? Utils::DEVNULL : Utils::STDOUT);
|
||||
auto passwordKey = QSharedPointer<PasswordKey>::create();
|
||||
passwordKey->setPassword(line);
|
||||
compositeKey->addKey(passwordKey);
|
||||
if (!parser.isSet(Command::NoPasswordOption)) {
|
||||
if (!parser.isSet(Command::QuietOption)) {
|
||||
outputTextStream << QObject::tr("Insert password to unlock %1: ").arg(args.at(0)) << flush;
|
||||
}
|
||||
|
||||
QString line = Utils::getPassword(parser.isSet(Command::QuietOption) ? Utils::DEVNULL : Utils::STDOUT);
|
||||
auto passwordKey = QSharedPointer<PasswordKey>::create();
|
||||
passwordKey->setPassword(line);
|
||||
compositeKey->addKey(passwordKey);
|
||||
}
|
||||
|
||||
QString keyFilePath = parser.value(Command::KeyFileOption);
|
||||
if (!keyFilePath.isEmpty()) {
|
||||
|
@ -48,6 +48,7 @@ int List::execute(const QStringList& arguments)
|
||||
parser.addPositionalArgument("group", QObject::tr("Path of the group to list. Default is /"), "[group]");
|
||||
parser.addOption(Command::QuietOption);
|
||||
parser.addOption(Command::KeyFileOption);
|
||||
parser.addOption(Command::NoPasswordOption);
|
||||
|
||||
QCommandLineOption recursiveOption(QStringList() << "R"
|
||||
<< "recursive",
|
||||
@ -65,6 +66,7 @@ int List::execute(const QStringList& arguments)
|
||||
bool recursive = parser.isSet(recursiveOption);
|
||||
|
||||
auto db = Utils::unlockDatabase(args.at(0),
|
||||
!parser.isSet(Command::NoPasswordOption),
|
||||
parser.value(Command::KeyFileOption),
|
||||
parser.isSet(Command::QuietOption) ? Utils::DEVNULL : Utils::STDOUT,
|
||||
Utils::STDERR);
|
||||
|
@ -50,6 +50,7 @@ int Locate::execute(const QStringList& arguments)
|
||||
parser.addPositionalArgument("term", QObject::tr("Search term."));
|
||||
parser.addOption(Command::QuietOption);
|
||||
parser.addOption(Command::KeyFileOption);
|
||||
parser.addOption(Command::NoPasswordOption);
|
||||
parser.addHelpOption();
|
||||
parser.process(arguments);
|
||||
|
||||
@ -60,6 +61,7 @@ int Locate::execute(const QStringList& arguments)
|
||||
}
|
||||
|
||||
auto db = Utils::unlockDatabase(args.at(0),
|
||||
!parser.isSet(Command::NoPasswordOption),
|
||||
parser.value(Command::KeyFileOption),
|
||||
parser.isSet(Command::QuietOption) ? Utils::DEVNULL : Utils::STDOUT,
|
||||
Utils::STDERR);
|
||||
|
@ -52,6 +52,7 @@ int Merge::execute(const QStringList& arguments)
|
||||
QObject::tr("Use the same credentials for both database files."));
|
||||
parser.addOption(samePasswordOption);
|
||||
parser.addOption(Command::KeyFileOption);
|
||||
parser.addOption(Command::NoPasswordOption);
|
||||
|
||||
QCommandLineOption keyFileFromOption(QStringList() << "f"
|
||||
<< "key-file-from",
|
||||
@ -59,6 +60,10 @@ int Merge::execute(const QStringList& arguments)
|
||||
QObject::tr("path"));
|
||||
parser.addOption(keyFileFromOption);
|
||||
|
||||
QCommandLineOption noPasswordFromOption(QStringList() << "no-password-from",
|
||||
QObject::tr("Deactivate password key for the database to merge from."));
|
||||
parser.addOption(noPasswordFromOption);
|
||||
|
||||
parser.addHelpOption();
|
||||
parser.process(arguments);
|
||||
|
||||
@ -69,6 +74,7 @@ int Merge::execute(const QStringList& arguments)
|
||||
}
|
||||
|
||||
auto db1 = Utils::unlockDatabase(args.at(0),
|
||||
!parser.isSet(Command::NoPasswordOption),
|
||||
parser.value(Command::KeyFileOption),
|
||||
parser.isSet(Command::QuietOption) ? Utils::DEVNULL : Utils::STDOUT,
|
||||
Utils::STDERR);
|
||||
@ -79,6 +85,7 @@ int Merge::execute(const QStringList& arguments)
|
||||
QSharedPointer<Database> db2;
|
||||
if (!parser.isSet("same-credentials")) {
|
||||
db2 = Utils::unlockDatabase(args.at(1),
|
||||
!parser.isSet(noPasswordFromOption),
|
||||
parser.value(keyFileFromOption),
|
||||
parser.isSet(Command::QuietOption) ? Utils::DEVNULL : Utils::STDOUT,
|
||||
Utils::STDERR);
|
||||
|
@ -51,6 +51,7 @@ int Remove::execute(const QStringList& arguments)
|
||||
parser.addPositionalArgument("database", QObject::tr("Path of the database."));
|
||||
parser.addOption(Command::QuietOption);
|
||||
parser.addOption(Command::KeyFileOption);
|
||||
parser.addOption(Command::NoPasswordOption);
|
||||
parser.addPositionalArgument("entry", QObject::tr("Path of the entry to remove."));
|
||||
parser.addHelpOption();
|
||||
parser.process(arguments);
|
||||
@ -62,6 +63,7 @@ int Remove::execute(const QStringList& arguments)
|
||||
}
|
||||
|
||||
auto db = Utils::unlockDatabase(args.at(0),
|
||||
!parser.isSet(Command::NoPasswordOption),
|
||||
parser.value(Command::KeyFileOption),
|
||||
parser.isSet(Command::QuietOption) ? Utils::DEVNULL : Utils::STDOUT,
|
||||
Utils::STDERR);
|
||||
|
@ -48,6 +48,8 @@ int Show::execute(const QStringList& arguments)
|
||||
parser.addPositionalArgument("database", QObject::tr("Path of the database."));
|
||||
parser.addOption(Command::QuietOption);
|
||||
parser.addOption(Command::KeyFileOption);
|
||||
parser.addOption(Command::NoPasswordOption);
|
||||
|
||||
QCommandLineOption totp(QStringList() << "t"
|
||||
<< "totp",
|
||||
QObject::tr("Show the entry's current TOTP."));
|
||||
@ -72,6 +74,7 @@ int Show::execute(const QStringList& arguments)
|
||||
}
|
||||
|
||||
auto db = Utils::unlockDatabase(args.at(0),
|
||||
!parser.isSet(Command::NoPasswordOption),
|
||||
parser.value(Command::KeyFileOption),
|
||||
parser.isSet(Command::QuietOption) ? Utils::DEVNULL : Utils::STDOUT,
|
||||
Utils::STDERR);
|
||||
|
@ -98,6 +98,7 @@ namespace Utils
|
||||
} // namespace Test
|
||||
|
||||
QSharedPointer<Database> unlockDatabase(const QString& databaseFilename,
|
||||
const bool isPasswordProtected,
|
||||
const QString& keyFilename,
|
||||
FILE* outputDescriptor,
|
||||
FILE* errorDescriptor)
|
||||
@ -106,12 +107,13 @@ namespace Utils
|
||||
TextStream out(outputDescriptor);
|
||||
TextStream err(errorDescriptor);
|
||||
|
||||
out << QObject::tr("Insert password to unlock %1: ").arg(databaseFilename) << flush;
|
||||
|
||||
QString line = Utils::getPassword(outputDescriptor);
|
||||
auto passwordKey = QSharedPointer<PasswordKey>::create();
|
||||
passwordKey->setPassword(line);
|
||||
compositeKey->addKey(passwordKey);
|
||||
if (isPasswordProtected) {
|
||||
out << QObject::tr("Insert password to unlock %1: ").arg(databaseFilename) << flush;
|
||||
QString line = Utils::getPassword(outputDescriptor);
|
||||
auto passwordKey = QSharedPointer<PasswordKey>::create();
|
||||
passwordKey->setPassword(line);
|
||||
compositeKey->addKey(passwordKey);
|
||||
}
|
||||
|
||||
if (!keyFilename.isEmpty()) {
|
||||
auto fileKey = QSharedPointer<FileKey>::create();
|
||||
|
@ -36,6 +36,7 @@ namespace Utils
|
||||
QString getPassword(FILE* outputDescriptor = STDOUT);
|
||||
int clipText(const QString& text);
|
||||
QSharedPointer<Database> unlockDatabase(const QString& databaseFilename,
|
||||
const bool isPasswordProtected = true,
|
||||
const QString& keyFilename = {},
|
||||
FILE* outputDescriptor = STDOUT,
|
||||
FILE* errorDescriptor = STDERR);
|
||||
|
@ -56,9 +56,15 @@ Shows the title, username, password, URL and notes of a database entry. Can also
|
||||
|
||||
.SS "General options"
|
||||
|
||||
.IP "--debug-info"
|
||||
Displays debugging information.
|
||||
|
||||
.IP "-k, --key-file <path>"
|
||||
Specifies a path to a key file for unlocking the database. In a merge operation this option is used to specify the key file path for the first database.
|
||||
|
||||
.IP "--no-password"
|
||||
Deactivate password key for the database.
|
||||
|
||||
.IP "-q, --quiet <path>"
|
||||
Silence password prompt and other secondary outputs.
|
||||
|
||||
@ -66,7 +72,7 @@ Silence password prompt and other secondary outputs.
|
||||
Displays help information.
|
||||
|
||||
.IP "-v, --version"
|
||||
Shows the program version.
|
||||
Displays the program version.
|
||||
|
||||
|
||||
.SS "Merge options"
|
||||
@ -74,6 +80,9 @@ Shows the program version.
|
||||
.IP "-f, --key-file-from <path>"
|
||||
Path of the key file for the second database.
|
||||
|
||||
.IP "--no-password-from"
|
||||
Deactivate password key for the database to merge from.
|
||||
|
||||
.IP "-s, --same-credentials"
|
||||
Use the same credentials for unlocking both database.
|
||||
|
||||
|
@ -26,6 +26,7 @@
|
||||
|
||||
#include "config-keepassx.h"
|
||||
#include "core/Bootstrap.h"
|
||||
#include "core/Tools.h"
|
||||
#include "crypto/Crypto.h"
|
||||
|
||||
#if defined(WITH_ASAN) && defined(WITH_LSAN)
|
||||
@ -60,6 +61,9 @@ int main(int argc, char** argv)
|
||||
|
||||
parser.addPositionalArgument("command", QObject::tr("Name of the command to execute."));
|
||||
|
||||
QCommandLineOption debugInfoOption(QStringList() << "debug-info",
|
||||
QObject::tr("Displays debugging information."));
|
||||
parser.addOption(debugInfoOption);
|
||||
parser.addHelpOption();
|
||||
parser.addVersionOption();
|
||||
// TODO : use the setOptionsAfterPositionalArgumentsMode (Qt 5.6) function
|
||||
@ -72,6 +76,10 @@ int main(int argc, char** argv)
|
||||
// Switch to parser.showVersion() when available (QT 5.4).
|
||||
out << KEEPASSXC_VERSION << endl;
|
||||
return EXIT_SUCCESS;
|
||||
} else if (parser.isSet(debugInfoOption)) {
|
||||
QString debugInfo = Tools::debugInfo().append("\n").append(Crypto::debugInfo());
|
||||
out << debugInfo << endl;
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
parser.showHelp();
|
||||
}
|
||||
|
@ -20,6 +20,7 @@
|
||||
#cmakedefine WITH_XC_KEESHARE
|
||||
#cmakedefine WITH_XC_KEESHARE_INSECURE
|
||||
#cmakedefine WITH_XC_KEESHARE_SECURE
|
||||
#cmakedefine WITH_XC_UPDATECHECK
|
||||
#cmakedefine WITH_XC_TOUCHID
|
||||
|
||||
#cmakedefine KEEPASSXC_BUILD_TYPE "@KEEPASSXC_BUILD_TYPE@"
|
||||
|
@ -112,6 +112,10 @@ namespace Bootstrap
|
||||
mainWindow.openDatabase(filename);
|
||||
}
|
||||
}
|
||||
auto lastActiveFile = config()->get("LastActiveDatabase").toString();
|
||||
if (!lastActiveFile.isEmpty()) {
|
||||
mainWindow.openDatabase(lastActiveFile);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -30,6 +30,7 @@ QDateTime Clock::currentDateTime()
|
||||
|
||||
uint Clock::currentSecondsSinceEpoch()
|
||||
{
|
||||
// TODO: change to toSecsSinceEpoch() when min Qt >= 5.8
|
||||
return instance().currentDateTimeImpl().toTime_t();
|
||||
}
|
||||
|
||||
|
@ -222,6 +222,7 @@ bool Database::save(const QString& filePath, QString* error, bool atomic, bool b
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
if (error) {
|
||||
*error = saveFile.errorString();
|
||||
}
|
||||
@ -241,27 +242,34 @@ bool Database::save(const QString& filePath, QString* error, bool atomic, bool b
|
||||
|
||||
// Delete the original db and move the temp file in place
|
||||
QFile::remove(filePath);
|
||||
#ifdef Q_OS_LINUX
|
||||
// workaround to make this workaround work, see: https://bugreports.qt.io/browse/QTBUG-64008
|
||||
if (tempFile.copy(filePath)) {
|
||||
// successfully saved database file
|
||||
return true;
|
||||
}
|
||||
#else
|
||||
if (tempFile.rename(filePath)) {
|
||||
// successfully saved database file
|
||||
|
||||
// Note: call into the QFile rename instead of QTemporaryFile
|
||||
// due to an undocumented difference in how the function handles
|
||||
// errors. This prevents errors when saving across file systems.
|
||||
if (tempFile.QFile::rename(filePath)) {
|
||||
// successfully saved the database
|
||||
tempFile.setAutoRemove(false);
|
||||
setFilePath(filePath);
|
||||
return true;
|
||||
} else if (!backup || !restoreDatabase(filePath)) {
|
||||
// Failed to copy new database in place, and
|
||||
// failed to restore from backup or backups disabled
|
||||
tempFile.setAutoRemove(false);
|
||||
if (error) {
|
||||
*error = tr("%1\nBackup database located at %2").arg(tempFile.errorString(), tempFile.fileName());
|
||||
}
|
||||
markAsModified();
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
if (error) {
|
||||
*error = tempFile.errorString();
|
||||
}
|
||||
}
|
||||
|
||||
// Saving failed
|
||||
markAsModified();
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -320,6 +328,28 @@ bool Database::backupDatabase(const QString& filePath)
|
||||
return QFile::copy(filePath, backupFilePath);
|
||||
}
|
||||
|
||||
/**
|
||||
* Restores the database file from the backup file with
|
||||
* name <filename>.old.<extension> to filePath. This will
|
||||
* overwrite the existing file!
|
||||
*
|
||||
* @param filePath Path to the file to restore
|
||||
* @return true on success
|
||||
*/
|
||||
bool Database::restoreDatabase(const QString& filePath)
|
||||
{
|
||||
static auto re = QRegularExpression("^(.*?)(\\.[^.]+)?$");
|
||||
|
||||
auto match = re.match(filePath);
|
||||
auto backupFilePath = match.captured(1) + ".old" + match.captured(2);
|
||||
// Only try to restore if the backup file actually exists
|
||||
if (QFile::exists(backupFilePath)) {
|
||||
QFile::remove(filePath);
|
||||
return QFile::copy(backupFilePath, filePath);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool Database::isReadOnly() const
|
||||
{
|
||||
return m_data.isReadOnly;
|
||||
@ -388,11 +418,31 @@ const Metadata* Database::metadata() const
|
||||
return m_metadata;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the original file path that was provided for
|
||||
* this database. This path may not exist, may contain
|
||||
* unresolved symlinks, or have malformed slashes.
|
||||
*
|
||||
* @return original file path
|
||||
*/
|
||||
QString Database::filePath() const
|
||||
{
|
||||
return m_data.filePath;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the canonical file path of this databases'
|
||||
* set file path. This returns an empty string if the
|
||||
* file does not exist or cannot be resolved.
|
||||
*
|
||||
* @return canonical file path
|
||||
*/
|
||||
QString Database::canonicalFilePath() const
|
||||
{
|
||||
QFileInfo fileInfo(m_data.filePath);
|
||||
return fileInfo.canonicalFilePath();
|
||||
}
|
||||
|
||||
void Database::setFilePath(const QString& filePath)
|
||||
{
|
||||
if (filePath == m_data.filePath) {
|
||||
|
@ -82,6 +82,7 @@ public:
|
||||
|
||||
QUuid uuid() const;
|
||||
QString filePath() const;
|
||||
QString canonicalFilePath() const;
|
||||
void setFilePath(const QString& filePath);
|
||||
|
||||
Metadata* metadata();
|
||||
@ -171,6 +172,7 @@ private:
|
||||
|
||||
bool writeDatabase(QIODevice* device, QString* error = nullptr);
|
||||
bool backupDatabase(const QString& filePath);
|
||||
bool restoreDatabase(const QString& filePath);
|
||||
|
||||
Metadata* const m_metadata;
|
||||
DatabaseData m_data;
|
||||
|
@ -120,9 +120,9 @@ BulkFileWatcher::BulkFileWatcher(QObject* parent)
|
||||
{
|
||||
connect(&m_fileWatcher, SIGNAL(fileChanged(QString)), SLOT(handleFileChanged(QString)));
|
||||
connect(&m_fileWatcher, SIGNAL(directoryChanged(QString)), SLOT(handleDirectoryChanged(QString)));
|
||||
connect(&m_fileWatchUnblockTimer, SIGNAL(timeout()), this, SLOT(observeFileChanges()));
|
||||
connect(&m_watchedFilesIgnoreTimer, SIGNAL(timeout()), this, SLOT(observeFileChanges()));
|
||||
connect(&m_pendingSignalsTimer, SIGNAL(timeout()), this, SLOT(emitSignals()));
|
||||
m_fileWatchUnblockTimer.setSingleShot(true);
|
||||
m_watchedFilesIgnoreTimer.setSingleShot(true);
|
||||
m_pendingSignalsTimer.setSingleShot(true);
|
||||
}
|
||||
|
||||
@ -135,7 +135,7 @@ void BulkFileWatcher::clear()
|
||||
}
|
||||
m_watchedPaths.clear();
|
||||
m_watchedFilesInDirectory.clear();
|
||||
m_ignoreFilesChangess.clear();
|
||||
m_watchedFilesIgnored.clear();
|
||||
}
|
||||
|
||||
void BulkFileWatcher::removePath(const QString& path)
|
||||
@ -166,7 +166,7 @@ void BulkFileWatcher::addPath(const QString& path)
|
||||
const bool directorySuccess = m_fileWatcher.addPath(directoryPath);
|
||||
m_watchedPaths[directoryPath] = directorySuccess;
|
||||
}
|
||||
m_watchedFilesInDirectory[directoryPath][filePath] = info.exists();
|
||||
m_watchedFilesInDirectory[directoryPath][filePath] = info.exists() ? info.lastModified().toMSecsSinceEpoch() : 0;
|
||||
}
|
||||
|
||||
void BulkFileWatcher::handleFileChanged(const QString& path)
|
||||
@ -174,13 +174,15 @@ void BulkFileWatcher::handleFileChanged(const QString& path)
|
||||
const QFileInfo info(path);
|
||||
const QString filePath = info.absoluteFilePath();
|
||||
const QString directoryPath = info.absolutePath();
|
||||
const QMap<QString, bool>& watchedFiles = m_watchedFilesInDirectory[directoryPath];
|
||||
const bool created = !watchedFiles[filePath] && info.exists();
|
||||
const bool deleted = watchedFiles[filePath] && !info.exists();
|
||||
const bool changed = !created && !deleted;
|
||||
const QMap<QString, qint64>& watchedFiles = m_watchedFilesInDirectory[directoryPath];
|
||||
const qint64 lastModificationTime = info.lastModified().toMSecsSinceEpoch();
|
||||
const bool created = watchedFiles[filePath] == 0 && info.exists();
|
||||
const bool deleted = watchedFiles[filePath] != 0 && !info.exists();
|
||||
const bool changed = !created && !deleted && lastModificationTime != watchedFiles[filePath];
|
||||
|
||||
addPath(path);
|
||||
|
||||
if (m_ignoreFilesChangess[info.canonicalFilePath()] > Clock::currentDateTimeUtc()) {
|
||||
if (m_watchedFilesIgnored[info.canonicalFilePath()] > Clock::currentDateTimeUtc()) {
|
||||
// changes are blocked
|
||||
return;
|
||||
}
|
||||
@ -203,35 +205,36 @@ void BulkFileWatcher::handleDirectoryChanged(const QString& path)
|
||||
qDebug("Directory changed %s", qPrintable(path));
|
||||
const QFileInfo directoryInfo(path);
|
||||
const QString directoryPath = directoryInfo.absoluteFilePath();
|
||||
QMap<QString, bool>& watchedFiles = m_watchedFilesInDirectory[directoryPath];
|
||||
QMap<QString, qint64>& watchedFiles = m_watchedFilesInDirectory[directoryPath];
|
||||
for (const QString& filename : watchedFiles.keys()) {
|
||||
const QFileInfo fileInfo(filename);
|
||||
const QString filePath = fileInfo.absoluteFilePath();
|
||||
const bool existed = watchedFiles[filePath];
|
||||
if (!fileInfo.exists() && existed) {
|
||||
qDebug("Remove watch file %s", qPrintable(filePath));
|
||||
const qint64 previousModificationTime = watchedFiles[filePath];
|
||||
const qint64 lastModificationTime = fileInfo.lastModified().toMSecsSinceEpoch();
|
||||
if (!fileInfo.exists() && previousModificationTime != 0) {
|
||||
qDebug("Remove watch file %s", qPrintable(fileInfo.absoluteFilePath()));
|
||||
m_fileWatcher.removePath(filePath);
|
||||
m_watchedPaths.remove(filePath);
|
||||
watchedFiles.remove(filePath);
|
||||
scheduleSignal(Removed, filePath);
|
||||
}
|
||||
if (!existed && fileInfo.exists()) {
|
||||
qDebug("Add watch file %s", qPrintable(filePath));
|
||||
if (previousModificationTime == 0 && fileInfo.exists()) {
|
||||
qDebug("Add watch file %s", qPrintable(fileInfo.absoluteFilePath()));
|
||||
if (!m_watchedPaths.value(filePath)) {
|
||||
const bool success = m_fileWatcher.addPath(filePath);
|
||||
m_watchedPaths[filePath] = success;
|
||||
watchedFiles[filePath] = fileInfo.exists();
|
||||
watchedFiles[filePath] = lastModificationTime;
|
||||
}
|
||||
scheduleSignal(Created, filePath);
|
||||
}
|
||||
if (existed && fileInfo.exists()) {
|
||||
if (fileInfo.exists() && previousModificationTime != lastModificationTime) {
|
||||
// this case is handled using
|
||||
qDebug("Refresh watch file %s", qPrintable(fileInfo.absoluteFilePath()));
|
||||
m_fileWatcher.removePath(fileInfo.absolutePath());
|
||||
m_fileWatcher.addPath(fileInfo.absolutePath());
|
||||
scheduleSignal(Updated, filePath);
|
||||
}
|
||||
m_watchedFilesInDirectory[directoryPath][filePath] = fileInfo.exists();
|
||||
m_watchedFilesInDirectory[directoryPath][filePath] = fileInfo.exists() ? lastModificationTime : 0;
|
||||
}
|
||||
}
|
||||
|
||||
@ -242,13 +245,16 @@ void BulkFileWatcher::emitSignals()
|
||||
for (const auto& path : queued.keys()) {
|
||||
const auto& signal = queued[path];
|
||||
if (signal.last() == Removed) {
|
||||
qDebug("Emit %s removed", qPrintable(path));
|
||||
emit fileRemoved(path);
|
||||
continue;
|
||||
}
|
||||
if (signal.first() == Created) {
|
||||
qDebug("Emit %s created", qPrintable(path));
|
||||
emit fileCreated(path);
|
||||
continue;
|
||||
}
|
||||
qDebug("Emit %s changed", qPrintable(path));
|
||||
emit fileChanged(path);
|
||||
}
|
||||
}
|
||||
@ -268,7 +274,7 @@ void BulkFileWatcher::scheduleSignal(Signal signal, const QString& path)
|
||||
void BulkFileWatcher::ignoreFileChanges(const QString& path)
|
||||
{
|
||||
const QFileInfo info(path);
|
||||
m_ignoreFilesChangess[info.canonicalFilePath()] = Clock::currentDateTimeUtc().addMSecs(FileChangeDelay);
|
||||
m_watchedFilesIgnored[info.canonicalFilePath()] = Clock::currentDateTimeUtc().addMSecs(FileChangeDelay);
|
||||
}
|
||||
|
||||
void BulkFileWatcher::observeFileChanges(bool delayed)
|
||||
@ -278,19 +284,19 @@ void BulkFileWatcher::observeFileChanges(bool delayed)
|
||||
timeout = TimerResolution;
|
||||
} else {
|
||||
const QDateTime current = Clock::currentDateTimeUtc();
|
||||
for (const QString& key : m_ignoreFilesChangess.keys()) {
|
||||
if (m_ignoreFilesChangess[key] < current) {
|
||||
for (const QString& key : m_watchedFilesIgnored.keys()) {
|
||||
if (m_watchedFilesIgnored[key] < current) {
|
||||
// We assume that there was no concurrent change of the database
|
||||
// during our block - so no need to reimport
|
||||
qDebug("Remove block from %s", qPrintable(key));
|
||||
m_ignoreFilesChangess.remove(key);
|
||||
m_watchedFilesIgnored.remove(key);
|
||||
continue;
|
||||
}
|
||||
qDebug("Keep block from %s", qPrintable(key));
|
||||
timeout = static_cast<int>(current.msecsTo(m_ignoreFilesChangess[key]));
|
||||
timeout = qMin(timeout, static_cast<int>(current.msecsTo(m_watchedFilesIgnored[key])));
|
||||
}
|
||||
}
|
||||
if (timeout > 0 && !m_fileWatchUnblockTimer.isActive()) {
|
||||
m_fileWatchUnblockTimer.start(timeout);
|
||||
if (timeout > 0 && !m_watchedFilesIgnoreTimer.isActive()) {
|
||||
m_watchedFilesIgnoreTimer.start(timeout);
|
||||
}
|
||||
}
|
||||
|
@ -93,11 +93,11 @@ private:
|
||||
|
||||
private:
|
||||
QMap<QString, bool> m_watchedPaths;
|
||||
QMap<QString, QDateTime> m_ignoreFilesChangess;
|
||||
QMap<QString, QDateTime> m_watchedFilesIgnored;
|
||||
QFileSystemWatcher m_fileWatcher;
|
||||
QMap<QString, QMap<QString, bool>> m_watchedFilesInDirectory;
|
||||
QMap<QString, QMap<QString, qint64>> m_watchedFilesInDirectory;
|
||||
// needed for Import/Export-References to prevent update after self-write
|
||||
QTimer m_fileWatchUnblockTimer;
|
||||
QTimer m_watchedFilesIgnoreTimer;
|
||||
// needed to tolerate multiple signals for same event
|
||||
QTimer m_pendingSignalsTimer;
|
||||
QMap<QString, QList<Signal>> m_pendingSignals;
|
||||
|
@ -618,8 +618,8 @@ Merger::ChangeList Merger::mergeMetadata(const MergeContext& context)
|
||||
|
||||
const auto keys = sourceMetadata->customIcons().keys();
|
||||
for (QUuid customIconId : keys) {
|
||||
QImage customIcon = sourceMetadata->customIcon(customIconId);
|
||||
if (!targetMetadata->containsCustomIcon(customIconId)) {
|
||||
QImage customIcon = sourceMetadata->customIcon(customIconId);
|
||||
targetMetadata->addCustomIcon(customIconId, customIcon);
|
||||
changes << tr("Adding missing icon %1").arg(QString::fromLatin1(customIconId.toRfc4122().toHex()));
|
||||
}
|
||||
|
@ -382,10 +382,12 @@ void Metadata::addCustomIcon(const QUuid& uuid, const QImage& icon)
|
||||
Q_ASSERT(!uuid.isNull());
|
||||
Q_ASSERT(!m_customIcons.contains(uuid));
|
||||
|
||||
m_customIcons.insert(uuid, icon);
|
||||
m_customIcons[uuid] = icon;
|
||||
// reset cache in case there is also an icon with that uuid
|
||||
m_customIconCacheKeys[uuid] = QPixmapCache::Key();
|
||||
m_customIconScaledCacheKeys[uuid] = QPixmapCache::Key();
|
||||
// remove all uuids to prevent duplicates in release mode
|
||||
m_customIconsOrder.removeAll(uuid);
|
||||
m_customIconsOrder.append(uuid);
|
||||
// Associate image hash to uuid
|
||||
QByteArray hash = hashImage(icon);
|
||||
|
@ -18,6 +18,8 @@
|
||||
*/
|
||||
|
||||
#include "Tools.h"
|
||||
|
||||
#include "config-keepassx.h"
|
||||
#include "core/Config.h"
|
||||
#include "core/Translator.h"
|
||||
|
||||
@ -28,8 +30,10 @@
|
||||
#include <QLocale>
|
||||
#include <QRegularExpression>
|
||||
#include <QStringList>
|
||||
#include <QSysInfo>
|
||||
#include <QUuid>
|
||||
#include <cctype>
|
||||
#include "git-info.h"
|
||||
|
||||
#ifdef Q_OS_WIN
|
||||
#include <windows.h> // for Sleep()
|
||||
@ -41,6 +45,78 @@
|
||||
|
||||
namespace Tools
|
||||
{
|
||||
QString debugInfo()
|
||||
{
|
||||
QString debugInfo = "KeePassXC - ";
|
||||
debugInfo.append(QObject::tr("Version %1").arg(KEEPASSXC_VERSION).append("\n"));
|
||||
#ifndef KEEPASSXC_BUILD_TYPE_RELEASE
|
||||
debugInfo.append(QObject::tr("Build Type: %1").arg(KEEPASSXC_BUILD_TYPE).append("\n"));
|
||||
#endif
|
||||
|
||||
QString commitHash;
|
||||
if (!QString(GIT_HEAD).isEmpty()) {
|
||||
commitHash = GIT_HEAD;
|
||||
}
|
||||
if (!commitHash.isEmpty()) {
|
||||
debugInfo.append(QObject::tr("Revision: %1").arg(commitHash.left(7)).append("\n"));
|
||||
}
|
||||
|
||||
#ifdef KEEPASSXC_DIST
|
||||
debugInfo.append(QObject::tr("Distribution: %1").arg(KEEPASSXC_DIST_TYPE).append("\n"));
|
||||
#endif
|
||||
|
||||
// Qt related debugging information.
|
||||
debugInfo.append("\n");
|
||||
debugInfo.append("Qt ").append(QString::fromLocal8Bit(qVersion())).append("\n");
|
||||
#ifdef QT_NO_DEBUG
|
||||
debugInfo.append(QObject::tr("Debugging mode is disabled.").append("\n"));
|
||||
#else
|
||||
debugInfo.append(QObject::tr("Debugging mode is enabled.").append("\n"));
|
||||
#endif
|
||||
debugInfo.append("\n");
|
||||
|
||||
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0)
|
||||
debugInfo.append(QObject::tr("Operating system: %1\nCPU architecture: %2\nKernel: %3 %4")
|
||||
.arg(QSysInfo::prettyProductName(),
|
||||
QSysInfo::currentCpuArchitecture(),
|
||||
QSysInfo::kernelType(),
|
||||
QSysInfo::kernelVersion()));
|
||||
|
||||
debugInfo.append("\n\n");
|
||||
#endif
|
||||
|
||||
QString extensions;
|
||||
#ifdef WITH_XC_AUTOTYPE
|
||||
extensions += "\n- " + QObject::tr("Auto-Type");
|
||||
#endif
|
||||
#ifdef WITH_XC_BROWSER
|
||||
extensions += "\n- " + QObject::tr("Browser Integration");
|
||||
#endif
|
||||
#ifdef WITH_XC_SSHAGENT
|
||||
extensions += "\n- " + QObject::tr("SSH Agent");
|
||||
#endif
|
||||
#if defined(WITH_XC_KEESHARE_SECURE) && defined(WITH_XC_KEESHARE_INSECURE)
|
||||
extensions += "\n- " + QObject::tr("KeeShare (signed and unsigned sharing)");
|
||||
#elif defined(WITH_XC_KEESHARE_SECURE)
|
||||
extensions += "\n- " + QObject::tr("KeeShare (only signed sharing)");
|
||||
#elif defined(WITH_XC_KEESHARE_INSECURE)
|
||||
extensions += "\n- " + QObject::tr("KeeShare (only unsigned sharing)");
|
||||
#endif
|
||||
#ifdef WITH_XC_YUBIKEY
|
||||
extensions += "\n- " + QObject::tr("YubiKey");
|
||||
#endif
|
||||
#ifdef WITH_XC_TOUCHID
|
||||
extensions += "\n- " + QObject::tr("TouchID");
|
||||
#endif
|
||||
|
||||
if (extensions.isEmpty())
|
||||
extensions = " " + QObject::tr("None");
|
||||
|
||||
debugInfo.append(QObject::tr("Enabled extensions:").append(extensions).append("\n"));
|
||||
return debugInfo;
|
||||
}
|
||||
|
||||
QString humanReadableFileSize(qint64 bytes, quint32 precision)
|
||||
{
|
||||
constexpr auto kibibyte = 1024;
|
||||
@ -129,7 +205,7 @@ namespace Tools
|
||||
|
||||
bool isBase64(const QByteArray& ba)
|
||||
{
|
||||
constexpr auto pattern = R"(^(?:[a-z0-9+]{4})*(?:[a-z0-9+]{3}=|[a-z0-9+]{2}==)?$)";
|
||||
constexpr auto pattern = R"(^(?:[a-z0-9+/]{4})*(?:[a-z0-9+/]{3}=|[a-z0-9+/]{2}==)?$)";
|
||||
QRegExp regexp(pattern, Qt::CaseInsensitive, QRegExp::RegExp2);
|
||||
|
||||
QString base64 = QString::fromLatin1(ba.constData(), ba.size());
|
||||
|
@ -32,6 +32,7 @@ class QRegularExpression;
|
||||
|
||||
namespace Tools
|
||||
{
|
||||
QString debugInfo();
|
||||
QString humanReadableFileSize(qint64 bytes, quint32 precision = 2);
|
||||
bool readFromDevice(QIODevice* device, QByteArray& data, int size = 16384);
|
||||
bool readAllFromDevice(QIODevice* device, QByteArray& data);
|
||||
|
@ -25,7 +25,7 @@
|
||||
#include "crypto/CryptoHash.h"
|
||||
#include "crypto/SymmetricCipher.h"
|
||||
|
||||
bool Crypto::m_initalized(false);
|
||||
bool Crypto::m_initialized(false);
|
||||
QString Crypto::m_errorStr;
|
||||
QString Crypto::m_backendVersion;
|
||||
|
||||
@ -35,8 +35,8 @@ Crypto::Crypto()
|
||||
|
||||
bool Crypto::init()
|
||||
{
|
||||
if (m_initalized) {
|
||||
qWarning("Crypto::init: already initalized");
|
||||
if (m_initialized) {
|
||||
qWarning("Crypto::init: already initialized");
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -48,19 +48,19 @@ bool Crypto::init()
|
||||
}
|
||||
|
||||
// has to be set before testing Crypto classes
|
||||
m_initalized = true;
|
||||
m_initialized = true;
|
||||
|
||||
if (!backendSelfTest() || !selfTest()) {
|
||||
m_initalized = false;
|
||||
m_initialized = false;
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Crypto::initalized()
|
||||
bool Crypto::initialized()
|
||||
{
|
||||
return m_initalized;
|
||||
return m_initialized;
|
||||
}
|
||||
|
||||
QString Crypto::errorString()
|
||||
@ -68,9 +68,13 @@ QString Crypto::errorString()
|
||||
return m_errorStr;
|
||||
}
|
||||
|
||||
QString Crypto::backendVersion()
|
||||
QString Crypto::debugInfo()
|
||||
{
|
||||
return QString("libgcrypt ").append(m_backendVersion);
|
||||
Q_ASSERT(Crypto::initialized());
|
||||
|
||||
QString debugInfo = QObject::tr("Cryptographic libraries:").append("\n");
|
||||
debugInfo.append(" libgcrypt ").append(m_backendVersion).append("\n");
|
||||
return debugInfo;
|
||||
}
|
||||
|
||||
bool Crypto::backendSelfTest()
|
||||
|
@ -24,10 +24,10 @@ class Crypto
|
||||
{
|
||||
public:
|
||||
static bool init();
|
||||
static bool initalized();
|
||||
static bool initialized();
|
||||
static bool backendSelfTest();
|
||||
static QString errorString();
|
||||
static QString backendVersion();
|
||||
static QString debugInfo();
|
||||
|
||||
private:
|
||||
Crypto();
|
||||
@ -42,7 +42,7 @@ private:
|
||||
static bool testSalsa20();
|
||||
static bool testChaCha20();
|
||||
|
||||
static bool m_initalized;
|
||||
static bool m_initialized;
|
||||
static QString m_errorStr;
|
||||
static QString m_backendVersion;
|
||||
};
|
||||
|
@ -33,7 +33,7 @@ CryptoHash::CryptoHash(Algorithm algo, bool hmac)
|
||||
{
|
||||
Q_D(CryptoHash);
|
||||
|
||||
Q_ASSERT(Crypto::initalized());
|
||||
Q_ASSERT(Crypto::initialized());
|
||||
|
||||
int algoGcrypt = -1;
|
||||
unsigned int flagsGcrypt = GCRY_MD_FLAG_SECURE;
|
||||
|
@ -93,7 +93,7 @@ Random::Random(RandomBackend* backend)
|
||||
|
||||
void RandomBackendGcrypt::randomize(void* data, int len)
|
||||
{
|
||||
Q_ASSERT(Crypto::initalized());
|
||||
Q_ASSERT(Crypto::initialized());
|
||||
|
||||
gcry_randomize(data, len, GCRY_STRONG_RANDOM);
|
||||
}
|
||||
|
@ -90,7 +90,7 @@ void SymmetricCipherGcrypt::setError(const gcry_error_t& err)
|
||||
|
||||
bool SymmetricCipherGcrypt::init()
|
||||
{
|
||||
Q_ASSERT(Crypto::initalized());
|
||||
Q_ASSERT(Crypto::initialized());
|
||||
|
||||
gcry_error_t error;
|
||||
|
||||
|
@ -8,7 +8,7 @@
|
||||
#endif
|
||||
#include <sys/types.h>
|
||||
|
||||
#ifdef _WIN32
|
||||
#if defined(_WIN32) || defined(__HAIKU__)
|
||||
#include <stdint.h>
|
||||
|
||||
typedef uint32_t u_int32_t;
|
||||
|
@ -78,7 +78,8 @@ bool Kdbx3Reader::readDatabaseImpl(QIODevice* device,
|
||||
QByteArray realStart = cipherStream.read(32);
|
||||
|
||||
if (realStart != m_streamStartBytes) {
|
||||
raiseError(tr("Wrong key or database file is corrupt."));
|
||||
raiseError(tr("Invalid credentials were provided, please try again.\n"
|
||||
"If this reoccurs, then your database file may be corrupt."));
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -71,7 +71,8 @@ bool Kdbx4Reader::readDatabaseImpl(QIODevice* device,
|
||||
// clang-format off
|
||||
QByteArray hmacKey = KeePass2::hmacKey(m_masterSeed, db->transformedMasterKey());
|
||||
if (headerHmac != CryptoHash::hmac(headerData, HmacBlockStream::getHmacKey(UINT64_MAX, hmacKey), CryptoHash::Sha256)) {
|
||||
raiseError(tr("Wrong key or database file is corrupt. (HMAC mismatch)"));
|
||||
raiseError(tr("Invalid credentials were provided, please try again.\n"
|
||||
"If this reoccurs, then your database file may be corrupt.") + " " + tr("(HMAC mismatch)"));
|
||||
return false;
|
||||
}
|
||||
HmacBlockStream hmacStream(device, hmacKey);
|
||||
|
@ -1028,10 +1028,8 @@ bool KdbxXmlReader::readBool()
|
||||
|
||||
QDateTime KdbxXmlReader::readDateTime()
|
||||
{
|
||||
static QRegularExpression b64regex("^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$");
|
||||
QString str = readString();
|
||||
|
||||
if (b64regex.match(str).hasMatch()) {
|
||||
if (Tools::isBase64(str.toLatin1())) {
|
||||
QByteArray secsBytes = QByteArray::fromBase64(str.toUtf8()).leftJustified(8, '\0', true).left(8);
|
||||
qint64 secs = Endian::bytesToSizedInt<quint64>(secsBytes, KeePass2::BYTEORDER);
|
||||
return QDateTime(QDate(1, 1, 1), QTime(0, 0, 0, 0), Qt::UTC).addSecs(secs);
|
||||
|
@ -372,7 +372,8 @@ KeePass1Reader::testKeys(const QString& password, const QByteArray& keyfileData,
|
||||
}
|
||||
|
||||
if (!cipherStream) {
|
||||
raiseError(tr("Wrong key or database file is corrupt."));
|
||||
raiseError(tr("Invalid credentials were provided, please try again.\n"
|
||||
"If this reoccurs, then your database file may be corrupt."));
|
||||
}
|
||||
|
||||
return cipherStream.take();
|
||||
|
@ -21,11 +21,11 @@
|
||||
|
||||
#include "config-keepassx.h"
|
||||
#include "core/FilePath.h"
|
||||
#include "core/Tools.h"
|
||||
#include "crypto/Crypto.h"
|
||||
#include "git-info.h"
|
||||
|
||||
#include <QClipboard>
|
||||
#include <QSysInfo>
|
||||
|
||||
|
||||
static const QString aboutMaintainers = R"(
|
||||
<p><ul>
|
||||
@ -175,67 +175,7 @@ AboutDialog::AboutDialog(QWidget* parent)
|
||||
|
||||
m_ui->iconLabel->setPixmap(filePath()->applicationIcon().pixmap(48));
|
||||
|
||||
QString commitHash;
|
||||
if (!QString(GIT_HEAD).isEmpty()) {
|
||||
commitHash = GIT_HEAD;
|
||||
}
|
||||
|
||||
QString debugInfo = "KeePassXC - ";
|
||||
debugInfo.append(tr("Version %1").arg(KEEPASSXC_VERSION).append("\n"));
|
||||
#ifndef KEEPASSXC_BUILD_TYPE_RELEASE
|
||||
debugInfo.append(tr("Build Type: %1").arg(KEEPASSXC_BUILD_TYPE).append("\n"));
|
||||
#endif
|
||||
if (!commitHash.isEmpty()) {
|
||||
debugInfo.append(tr("Revision: %1").arg(commitHash.left(7)).append("\n"));
|
||||
}
|
||||
|
||||
#ifdef KEEPASSXC_DIST
|
||||
debugInfo.append(tr("Distribution: %1").arg(KEEPASSXC_DIST_TYPE).append("\n"));
|
||||
#endif
|
||||
|
||||
debugInfo.append("\n").append(
|
||||
QString("%1\n- Qt %2\n- %3\n\n")
|
||||
.arg(tr("Libraries:"), QString::fromLocal8Bit(qVersion()), Crypto::backendVersion()));
|
||||
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0)
|
||||
debugInfo.append(tr("Operating system: %1\nCPU architecture: %2\nKernel: %3 %4")
|
||||
.arg(QSysInfo::prettyProductName(),
|
||||
QSysInfo::currentCpuArchitecture(),
|
||||
QSysInfo::kernelType(),
|
||||
QSysInfo::kernelVersion()));
|
||||
|
||||
debugInfo.append("\n\n");
|
||||
#endif
|
||||
|
||||
QString extensions;
|
||||
#ifdef WITH_XC_AUTOTYPE
|
||||
extensions += "\n- " + tr("Auto-Type");
|
||||
#endif
|
||||
#ifdef WITH_XC_BROWSER
|
||||
extensions += "\n- " + tr("Browser Integration");
|
||||
#endif
|
||||
#ifdef WITH_XC_SSHAGENT
|
||||
extensions += "\n- " + tr("SSH Agent");
|
||||
#endif
|
||||
#if defined(WITH_XC_KEESHARE_SECURE) && defined(WITH_XC_KEESHARE_INSECURE)
|
||||
extensions += "\n- " + tr("KeeShare (signed and unsigned sharing)");
|
||||
#elif defined(WITH_XC_KEESHARE_SECURE)
|
||||
extensions += "\n- " + tr("KeeShare (only signed sharing)");
|
||||
#elif defined(WITH_XC_KEESHARE_INSECURE)
|
||||
extensions += "\n- " + tr("KeeShare (only unsigned sharing)");
|
||||
#endif
|
||||
#ifdef WITH_XC_YUBIKEY
|
||||
extensions += "\n- " + tr("YubiKey");
|
||||
#endif
|
||||
#ifdef WITH_XC_TOUCHID
|
||||
extensions += "\n- " + tr("TouchID");
|
||||
#endif
|
||||
|
||||
if (extensions.isEmpty())
|
||||
extensions = " " + tr("None");
|
||||
|
||||
debugInfo.append(tr("Enabled extensions:").append(extensions));
|
||||
|
||||
QString debugInfo = Tools::debugInfo().append("\n").append(Crypto::debugInfo());
|
||||
m_ui->debugInfo->setPlainText(debugInfo);
|
||||
|
||||
m_ui->maintainers->setText(aboutMaintainers);
|
||||
|
@ -81,7 +81,8 @@ ApplicationSettingsWidget::ApplicationSettingsWidget(QWidget* parent)
|
||||
// clang-format off
|
||||
connect(m_generalUi->autoSaveAfterEveryChangeCheckBox, SIGNAL(toggled(bool)), SLOT(autoSaveToggled(bool)));
|
||||
connect(m_generalUi->systrayShowCheckBox, SIGNAL(toggled(bool)), SLOT(systrayToggled(bool)));
|
||||
connect(m_generalUi->toolbarHideCheckBox, SIGNAL(toggled(bool)), SLOT(enableToolbarSettings(bool)));
|
||||
connect(m_generalUi->toolbarHideCheckBox, SIGNAL(toggled(bool)), SLOT(toolbarSettingsToggled(bool)));
|
||||
connect(m_generalUi->rememberLastDatabasesCheckBox, SIGNAL(toggled(bool)), SLOT(rememberDatabasesToggled(bool)));
|
||||
|
||||
connect(m_secUi->clearClipboardCheckBox, SIGNAL(toggled(bool)),
|
||||
m_secUi->clearClipboardSpinBox, SLOT(setEnabled(bool)));
|
||||
@ -91,8 +92,15 @@ ApplicationSettingsWidget::ApplicationSettingsWidget(QWidget* parent)
|
||||
m_secUi->touchIDResetSpinBox, SLOT(setEnabled(bool)));
|
||||
// clang-format on
|
||||
|
||||
#ifndef WITH_XC_NETWORKING
|
||||
#ifdef WITH_XC_UPDATECHECK
|
||||
connect(m_generalUi->checkForUpdatesOnStartupCheckBox, SIGNAL(toggled(bool)), SLOT(checkUpdatesToggled(bool)));
|
||||
#else
|
||||
m_generalUi->checkForUpdatesOnStartupCheckBox->setVisible(false);
|
||||
m_generalUi->checkForUpdatesIncludeBetasCheckBox->setVisible(false);
|
||||
m_generalUi->checkUpdatesSpacer->changeSize(0,0, QSizePolicy::Fixed, QSizePolicy::Fixed);
|
||||
#endif
|
||||
|
||||
#ifndef WITH_XC_NETWORKING
|
||||
m_secUi->privacy->setVisible(false);
|
||||
#endif
|
||||
|
||||
@ -294,11 +302,13 @@ void ApplicationSettingsWidget::saveSettings()
|
||||
|
||||
// Security: clear storage if related settings are disabled
|
||||
if (!config()->get("RememberLastDatabases").toBool()) {
|
||||
config()->set("LastDatabases", QVariant());
|
||||
config()->set("LastDatabases", {});
|
||||
config()->set("OpenPreviousDatabasesOnStartup", {});
|
||||
config()->set("LastActiveDatabase", {});
|
||||
}
|
||||
|
||||
if (!config()->get("RememberLastKeyFiles").toBool()) {
|
||||
config()->set("LastKeyFiles", QVariant());
|
||||
config()->set("LastKeyFiles", {});
|
||||
config()->set("LastDir", "");
|
||||
}
|
||||
|
||||
@ -330,9 +340,25 @@ void ApplicationSettingsWidget::systrayToggled(bool checked)
|
||||
m_generalUi->systrayMinimizeToTrayCheckBox->setEnabled(checked);
|
||||
}
|
||||
|
||||
void ApplicationSettingsWidget::enableToolbarSettings(bool checked)
|
||||
void ApplicationSettingsWidget::toolbarSettingsToggled(bool checked)
|
||||
{
|
||||
m_generalUi->toolbarMovableCheckBox->setEnabled(!checked);
|
||||
m_generalUi->toolButtonStyleComboBox->setEnabled(!checked);
|
||||
m_generalUi->toolButtonStyleLabel->setEnabled(!checked);
|
||||
}
|
||||
|
||||
void ApplicationSettingsWidget::rememberDatabasesToggled(bool checked)
|
||||
{
|
||||
if (!checked) {
|
||||
m_generalUi->rememberLastKeyFilesCheckBox->setChecked(false);
|
||||
m_generalUi->openPreviousDatabasesOnStartupCheckBox->setChecked(false);
|
||||
}
|
||||
|
||||
m_generalUi->rememberLastKeyFilesCheckBox->setEnabled(checked);
|
||||
m_generalUi->openPreviousDatabasesOnStartupCheckBox->setEnabled(checked);
|
||||
}
|
||||
|
||||
void ApplicationSettingsWidget::checkUpdatesToggled(bool checked)
|
||||
{
|
||||
m_generalUi->checkForUpdatesIncludeBetasCheckBox->setEnabled(checked);
|
||||
}
|
||||
|
@ -55,7 +55,9 @@ private slots:
|
||||
void reject();
|
||||
void autoSaveToggled(bool checked);
|
||||
void systrayToggled(bool checked);
|
||||
void enableToolbarSettings(bool checked);
|
||||
void toolbarSettingsToggled(bool checked);
|
||||
void rememberDatabasesToggled(bool checked);
|
||||
void checkUpdatesToggled(bool checked);
|
||||
|
||||
private:
|
||||
QWidget* const m_secWidget;
|
||||
|
@ -49,33 +49,6 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="rememberLastDatabasesCheckBox">
|
||||
<property name="text">
|
||||
<string>Remember last databases</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="rememberLastKeyFilesCheckBox">
|
||||
<property name="text">
|
||||
<string>Remember last key files and security dongles</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="openPreviousDatabasesOnStartupCheckBox">
|
||||
<property name="text">
|
||||
<string>Load previous databases on startup</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="systrayMinimizeOnStartup">
|
||||
<property name="text">
|
||||
@ -84,12 +57,124 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="checkForUpdatesOnStartupCheckBox">
|
||||
<widget class="QCheckBox" name="rememberLastDatabasesCheckBox">
|
||||
<property name="text">
|
||||
<string>Check for updates at application startup</string>
|
||||
<string>Remember previously used databases</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="rememberDbSubLayout_2">
|
||||
<property name="spacing">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="sizeConstraint">
|
||||
<enum>QLayout::SetMaximumSize</enum>
|
||||
</property>
|
||||
<item>
|
||||
<spacer name="toolbarMovableSpacer_3">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::Fixed</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="openPreviousDatabasesOnStartupCheckBox">
|
||||
<property name="text">
|
||||
<string>Load previously open databases on startup</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="rememberDbSubLayout">
|
||||
<property name="spacing">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="sizeConstraint">
|
||||
<enum>QLayout::SetMaximumSize</enum>
|
||||
</property>
|
||||
<item>
|
||||
<spacer name="toolbarMovableSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::Fixed</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="rememberLastKeyFilesCheckBox">
|
||||
<property name="text">
|
||||
<string>Remember database key files and security dongles</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="checkForUpdatesOnStartupCheckBox">
|
||||
<property name="text">
|
||||
<string>Check for updates at application startup once per week</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="checkUpdatesSubLayout">
|
||||
<property name="spacing">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<spacer name="checkUpdatesSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::Fixed</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="checkForUpdatesIncludeBetasCheckBox">
|
||||
<property name="text">
|
||||
<string>Include beta releases when checking for updates</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
@ -186,13 +271,6 @@
|
||||
<string>General</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_7">
|
||||
<item>
|
||||
<widget class="QCheckBox" name="checkForUpdatesIncludeBetasCheckBox">
|
||||
<property name="text">
|
||||
<string>Include pre-releases when checking for updates</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="toolbarHideCheckBox">
|
||||
<property name="text">
|
||||
@ -218,7 +296,7 @@
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<width>20</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
@ -245,7 +323,7 @@
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="toolButtonStyleLayout">
|
||||
<property name="spacing">
|
||||
<number>15</number>
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<spacer name="toolButtonStyleSpacer">
|
||||
@ -257,7 +335,7 @@
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<width>20</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
@ -274,8 +352,11 @@
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">margin-right: 5px</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Button style</string>
|
||||
<string>Button style:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@ -326,7 +407,7 @@
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<width>20</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
@ -377,7 +458,7 @@
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<width>20</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
@ -407,18 +488,18 @@
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="languageLabelLayout_2">
|
||||
<property name="spacing">
|
||||
<number>15</number>
|
||||
<number>8</number>
|
||||
</property>
|
||||
<item alignment="Qt::AlignRight">
|
||||
<widget class="QLabel" name="languageLabel_2">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Language</string>
|
||||
<string>Language:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@ -432,6 +513,13 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="languageLabel_3">
|
||||
<property name="text">
|
||||
<string>(restart program to activate)</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
|
@ -45,7 +45,6 @@ DatabaseOpenWidget::DatabaseOpenWidget(QWidget* parent)
|
||||
m_ui->setupUi(this);
|
||||
|
||||
m_ui->messageWidget->setHidden(true);
|
||||
m_ui->checkPassword->setChecked(true);
|
||||
|
||||
QFont font = m_ui->labelHeadline->font();
|
||||
font.setBold(true);
|
||||
@ -159,7 +158,7 @@ void DatabaseOpenWidget::clearForms()
|
||||
m_ui->editPassword->setText("");
|
||||
m_ui->comboKeyFile->clear();
|
||||
m_ui->comboKeyFile->setEditText("");
|
||||
m_ui->checkPassword->setChecked(true);
|
||||
m_ui->checkPassword->setChecked(false);
|
||||
m_ui->checkKeyFile->setChecked(false);
|
||||
m_ui->checkChallengeResponse->setChecked(false);
|
||||
m_ui->checkTouchID->setChecked(false);
|
||||
@ -174,13 +173,8 @@ QSharedPointer<Database> DatabaseOpenWidget::database()
|
||||
|
||||
void DatabaseOpenWidget::enterKey(const QString& pw, const QString& keyFile)
|
||||
{
|
||||
if (!pw.isEmpty()) {
|
||||
m_ui->editPassword->setText(pw);
|
||||
}
|
||||
if (!keyFile.isEmpty()) {
|
||||
m_ui->comboKeyFile->setEditText(keyFile);
|
||||
}
|
||||
|
||||
m_ui->editPassword->setText(pw);
|
||||
m_ui->comboKeyFile->setEditText(keyFile);
|
||||
openDatabase();
|
||||
}
|
||||
|
||||
@ -191,9 +185,7 @@ void DatabaseOpenWidget::openDatabase()
|
||||
return;
|
||||
}
|
||||
|
||||
if (!m_ui->editPassword->isPasswordVisible()) {
|
||||
m_ui->editPassword->setShowPassword(false);
|
||||
}
|
||||
m_ui->editPassword->setShowPassword(false);
|
||||
QCoreApplication::processEvents();
|
||||
|
||||
m_db.reset(new Database());
|
||||
@ -202,8 +194,7 @@ void DatabaseOpenWidget::openDatabase()
|
||||
bool ok = m_db->open(m_filename, masterKey, &error, false);
|
||||
QApplication::restoreOverrideCursor();
|
||||
if (!ok) {
|
||||
m_ui->messageWidget->showMessage(tr("Unable to open the database:\n%1").arg(error),
|
||||
MessageWidget::MessageType::Error);
|
||||
m_ui->messageWidget->showMessage(error, MessageWidget::MessageType::Error);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -231,7 +222,7 @@ void DatabaseOpenWidget::openDatabase()
|
||||
}
|
||||
emit dialogFinished(true);
|
||||
} else {
|
||||
m_ui->messageWidget->showMessage(tr("Unable to open the database:\n%1").arg(error), MessageWidget::Error);
|
||||
m_ui->messageWidget->showMessage(error, MessageWidget::Error);
|
||||
m_ui->editPassword->setText("");
|
||||
|
||||
#ifdef WITH_XC_TOUCHID
|
||||
@ -276,7 +267,7 @@ QSharedPointer<CompositeKey> DatabaseOpenWidget::databaseKey()
|
||||
QString keyFilename = m_ui->comboKeyFile->currentText();
|
||||
QString errorMsg;
|
||||
if (!key->load(keyFilename, &errorMsg)) {
|
||||
m_ui->messageWidget->showMessage(tr("Can't open key file:\n%1").arg(errorMsg), MessageWidget::Error);
|
||||
m_ui->messageWidget->showMessage(tr("Failed to open key file: %1").arg(errorMsg), MessageWidget::Error);
|
||||
return {};
|
||||
}
|
||||
if (key->type() != FileKey::Hashed && !config()->get("Messages/NoLegacyKeyFileWarning").toBool()) {
|
||||
@ -339,17 +330,20 @@ void DatabaseOpenWidget::reject()
|
||||
|
||||
void DatabaseOpenWidget::activatePassword()
|
||||
{
|
||||
m_ui->checkPassword->setChecked(true);
|
||||
bool hasPassword = !m_ui->editPassword->text().isEmpty();
|
||||
m_ui->checkPassword->setChecked(hasPassword);
|
||||
}
|
||||
|
||||
void DatabaseOpenWidget::activateKeyFile()
|
||||
{
|
||||
m_ui->checkKeyFile->setChecked(true);
|
||||
bool hasKeyFile = !m_ui->comboKeyFile->lineEdit()->text().isEmpty();
|
||||
m_ui->checkKeyFile->setChecked(hasKeyFile);
|
||||
}
|
||||
|
||||
void DatabaseOpenWidget::activateChallengeResponse()
|
||||
{
|
||||
m_ui->checkChallengeResponse->setChecked(true);
|
||||
bool hasCR = m_ui->comboChallengeResponse->currentData().toInt() != -1;
|
||||
m_ui->checkChallengeResponse->setChecked(hasCR);
|
||||
}
|
||||
|
||||
void DatabaseOpenWidget::browseKeyFile()
|
||||
@ -372,6 +366,7 @@ void DatabaseOpenWidget::pollYubikey()
|
||||
m_ui->checkChallengeResponse->setChecked(false);
|
||||
m_ui->comboChallengeResponse->setEnabled(false);
|
||||
m_ui->comboChallengeResponse->clear();
|
||||
m_ui->comboChallengeResponse->addItem(tr("Select slot..."), -1);
|
||||
m_ui->yubikeyProgress->setVisible(true);
|
||||
|
||||
// YubiKey init is slow, detect asynchronously to not block the UI
|
||||
@ -388,6 +383,7 @@ void DatabaseOpenWidget::yubikeyDetected(int slot, bool blocking)
|
||||
QHash<QString, QVariant> lastChallengeResponse = config()->get("LastChallengeResponse").toHash();
|
||||
if (lastChallengeResponse.contains(m_filename)) {
|
||||
m_ui->checkChallengeResponse->setChecked(true);
|
||||
m_ui->comboChallengeResponse->setCurrentIndex(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -137,25 +137,29 @@ void DatabaseTabWidget::openDatabase()
|
||||
* database has been opened already.
|
||||
*
|
||||
* @param filePath database file path
|
||||
* @param password optional, password to unlock database
|
||||
* @param inBackground optional, don't focus tab after opening
|
||||
* @param password optional, password to unlock database
|
||||
* @param keyfile optional, path to keyfile to unlock database
|
||||
*
|
||||
*/
|
||||
void DatabaseTabWidget::addDatabaseTab(const QString& filePath, bool inBackground, const QString& password)
|
||||
void DatabaseTabWidget::addDatabaseTab(const QString& filePath,
|
||||
bool inBackground,
|
||||
const QString& password,
|
||||
const QString& keyfile)
|
||||
{
|
||||
QFileInfo fileInfo(filePath);
|
||||
QString canonicalFilePath = fileInfo.canonicalFilePath();
|
||||
if (canonicalFilePath.isEmpty()) {
|
||||
emit messageGlobal(tr("The database file does not exist or is not accessible."), MessageWidget::Error);
|
||||
emit messageGlobal(tr("Failed to open %1. It either does not exist or is not accessible.").arg(filePath),
|
||||
MessageWidget::Error);
|
||||
return;
|
||||
}
|
||||
|
||||
for (int i = 0, c = count(); i < c; ++i) {
|
||||
auto* dbWidget = databaseWidgetFromIndex(i);
|
||||
Q_ASSERT(dbWidget);
|
||||
if (dbWidget && dbWidget->database()->filePath() == canonicalFilePath) {
|
||||
if (!password.isEmpty()) {
|
||||
dbWidget->performUnlockDatabase(password);
|
||||
}
|
||||
if (dbWidget && dbWidget->database()->canonicalFilePath() == canonicalFilePath) {
|
||||
dbWidget->performUnlockDatabase(password, keyfile);
|
||||
if (!inBackground) {
|
||||
// switch to existing tab if file is already open
|
||||
setCurrentIndex(indexOf(dbWidget));
|
||||
@ -166,9 +170,7 @@ void DatabaseTabWidget::addDatabaseTab(const QString& filePath, bool inBackgroun
|
||||
|
||||
auto* dbWidget = new DatabaseWidget(QSharedPointer<Database>::create(filePath), this);
|
||||
addDatabaseTab(dbWidget, inBackground);
|
||||
if (!password.isEmpty()) {
|
||||
dbWidget->performUnlockDatabase(password);
|
||||
}
|
||||
dbWidget->performUnlockDatabase(password, keyfile);
|
||||
updateLastDatabases(filePath);
|
||||
}
|
||||
|
||||
|
@ -48,7 +48,10 @@ public:
|
||||
bool hasLockableDatabases() const;
|
||||
|
||||
public slots:
|
||||
void addDatabaseTab(const QString& filePath, bool inBackground = false, const QString& password = {});
|
||||
void addDatabaseTab(const QString& filePath,
|
||||
bool inBackground = false,
|
||||
const QString& password = {},
|
||||
const QString& keyfile = {});
|
||||
void addDatabaseTab(DatabaseWidget* dbWidget, bool inBackground = false);
|
||||
bool closeDatabaseTab(int index);
|
||||
bool closeDatabaseTab(DatabaseWidget* dbWidget);
|
||||
|
@ -78,9 +78,7 @@ DatabaseWidget::DatabaseWidget(QSharedPointer<Database> db, QWidget* parent)
|
||||
, m_previewView(new EntryPreviewWidget(this))
|
||||
, m_previewSplitter(new QSplitter(m_mainWidget))
|
||||
, m_searchingLabel(new QLabel(this))
|
||||
#ifdef WITH_XC_KEESHARE
|
||||
, m_shareLabel(new QLabel(this))
|
||||
#endif
|
||||
, m_csvImportWizard(new CsvImportWizard(this))
|
||||
, m_editEntryWidget(new EditEntryWidget(this))
|
||||
, m_editGroupWidget(new EditGroupWidget(this))
|
||||
@ -89,6 +87,7 @@ DatabaseWidget::DatabaseWidget(QSharedPointer<Database> db, QWidget* parent)
|
||||
, m_databaseOpenWidget(new DatabaseOpenWidget(this))
|
||||
, m_keepass1OpenWidget(new KeePass1OpenWidget(this))
|
||||
, m_groupView(new GroupView(m_db.data(), m_mainSplitter))
|
||||
, m_saveAttempts(0)
|
||||
, m_fileWatcher(new DelayingFileWatcher(this))
|
||||
{
|
||||
m_messageWidget->setHidden(true);
|
||||
@ -260,12 +259,11 @@ bool DatabaseWidget::isSearchActive() const
|
||||
bool DatabaseWidget::isEditWidgetModified() const
|
||||
{
|
||||
if (currentWidget() == m_editEntryWidget) {
|
||||
return m_editEntryWidget->hasBeenModified();
|
||||
} else {
|
||||
// other edit widget don't have a hasBeenModified() method yet
|
||||
// assume that they already have been modified
|
||||
return true;
|
||||
return m_editEntryWidget->isModified();
|
||||
} else if (currentWidget() == m_editGroupWidget) {
|
||||
return m_editGroupWidget->isModified();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
QList<int> DatabaseWidget::mainSplitterSizes() const
|
||||
@ -859,6 +857,7 @@ void DatabaseWidget::loadDatabase(bool accepted)
|
||||
replaceDatabase(openWidget->database());
|
||||
switchToMainView();
|
||||
m_fileWatcher->restart();
|
||||
m_saveAttempts = 0;
|
||||
emit databaseUnlocked();
|
||||
} else {
|
||||
m_fileWatcher->stop();
|
||||
@ -1112,7 +1111,9 @@ void DatabaseWidget::search(const QString& searchtext)
|
||||
}
|
||||
|
||||
m_searchingLabel->setVisible(true);
|
||||
#ifdef WITH_XC_KEESHARE
|
||||
m_shareLabel->setVisible(false);
|
||||
#endif
|
||||
|
||||
emit searchModeActivated();
|
||||
}
|
||||
@ -1245,7 +1246,7 @@ bool DatabaseWidget::lock()
|
||||
|
||||
clipboard()->clearCopiedText();
|
||||
|
||||
if (currentMode() == DatabaseWidget::Mode::EditMode) {
|
||||
if (isEditWidgetModified()) {
|
||||
auto result = MessageBox::question(this,
|
||||
tr("Lock Database?"),
|
||||
tr("You are editing an entry. Discard changes and lock anyway?"),
|
||||
@ -1510,7 +1511,7 @@ EntryView* DatabaseWidget::entryView()
|
||||
* @param attempt current save attempt or -1 to disable attempts
|
||||
* @return true on success
|
||||
*/
|
||||
bool DatabaseWidget::save(int attempt)
|
||||
bool DatabaseWidget::save()
|
||||
{
|
||||
// Never allow saving a locked database; it causes corruption
|
||||
Q_ASSERT(!isLocked());
|
||||
@ -1525,6 +1526,8 @@ bool DatabaseWidget::save(int attempt)
|
||||
}
|
||||
|
||||
blockAutoReload(true);
|
||||
++m_saveAttempts;
|
||||
|
||||
// TODO: Make this async, but lock out the database widget to prevent re-entrance
|
||||
bool useAtomicSaves = config()->get("UseAtomicSaves", true).toBool();
|
||||
QString errorMessage;
|
||||
@ -1532,14 +1535,11 @@ bool DatabaseWidget::save(int attempt)
|
||||
blockAutoReload(false);
|
||||
|
||||
if (ok) {
|
||||
m_saveAttempts = 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
if (attempt >= 0 && attempt <= 2) {
|
||||
return save(attempt + 1);
|
||||
}
|
||||
|
||||
if (attempt > 2 && useAtomicSaves) {
|
||||
if (m_saveAttempts > 2 && useAtomicSaves) {
|
||||
// Saving failed 3 times, issue a warning and attempt to resolve
|
||||
auto result = MessageBox::question(this,
|
||||
tr("Disable safe saves?"),
|
||||
@ -1550,11 +1550,15 @@ bool DatabaseWidget::save(int attempt)
|
||||
MessageBox::Disable);
|
||||
if (result == MessageBox::Disable) {
|
||||
config()->set("UseAtomicSaves", false);
|
||||
return save(attempt + 1);
|
||||
return save();
|
||||
}
|
||||
}
|
||||
|
||||
showMessage(tr("Writing the database failed.\n%1").arg(errorMessage), MessageWidget::Error);
|
||||
showMessage(tr("Writing the database failed: %1").arg(errorMessage),
|
||||
MessageWidget::Error,
|
||||
true,
|
||||
MessageWidget::LongAutoHideTimeout);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -1583,8 +1587,9 @@ bool DatabaseWidget::saveAs()
|
||||
// Ensure we don't recurse back into this function
|
||||
m_db->setReadOnly(false);
|
||||
m_db->setFilePath(newFilePath);
|
||||
m_saveAttempts = 0;
|
||||
|
||||
if (!save(-1)) {
|
||||
if (!save()) {
|
||||
// Failed to save, try again
|
||||
continue;
|
||||
}
|
||||
|
@ -144,7 +144,7 @@ signals:
|
||||
|
||||
public slots:
|
||||
bool lock();
|
||||
bool save(int attempt = 0);
|
||||
bool save();
|
||||
bool saveAs();
|
||||
|
||||
void replaceDatabase(QSharedPointer<Database> db);
|
||||
@ -235,9 +235,7 @@ private:
|
||||
QPointer<EntryPreviewWidget> m_previewView;
|
||||
QPointer<QSplitter> m_previewSplitter;
|
||||
QPointer<QLabel> m_searchingLabel;
|
||||
#ifdef WITH_XC_KEESHARE
|
||||
QPointer<QLabel> m_shareLabel;
|
||||
#endif
|
||||
QPointer<CsvImportWizard> m_csvImportWizard;
|
||||
QPointer<EditEntryWidget> m_editEntryWidget;
|
||||
QPointer<EditGroupWidget> m_editGroupWidget;
|
||||
@ -255,6 +253,8 @@ private:
|
||||
QUuid m_groupBeforeLock;
|
||||
QUuid m_entryBeforeLock;
|
||||
|
||||
int m_saveAttempts;
|
||||
|
||||
// Search state
|
||||
EntrySearcher* m_EntrySearcher;
|
||||
QString m_lastSearchText;
|
||||
|
@ -30,6 +30,7 @@ EditWidget::EditWidget(QWidget* parent)
|
||||
{
|
||||
m_ui->setupUi(this);
|
||||
setReadOnly(false);
|
||||
setModified(false);
|
||||
|
||||
m_ui->messageWidget->setHidden(true);
|
||||
|
||||
@ -43,6 +44,7 @@ EditWidget::EditWidget(QWidget* parent)
|
||||
|
||||
connect(m_ui->buttonBox, SIGNAL(accepted()), SIGNAL(accepted()));
|
||||
connect(m_ui->buttonBox, SIGNAL(rejected()), SIGNAL(rejected()));
|
||||
connect(m_ui->buttonBox, SIGNAL(clicked(QAbstractButton*)), SLOT(buttonClicked(QAbstractButton*)));
|
||||
}
|
||||
|
||||
EditWidget::~EditWidget()
|
||||
@ -106,9 +108,6 @@ void EditWidget::setReadOnly(bool readOnly)
|
||||
m_ui->buttonBox->setStandardButtons(QDialogButtonBox::Close);
|
||||
} else {
|
||||
m_ui->buttonBox->setStandardButtons(QDialogButtonBox::Ok | QDialogButtonBox::Cancel | QDialogButtonBox::Apply);
|
||||
// Find and connect the apply button
|
||||
QPushButton* applyButton = m_ui->buttonBox->button(QDialogButtonBox::Apply);
|
||||
connect(applyButton, SIGNAL(clicked()), SIGNAL(apply()));
|
||||
}
|
||||
}
|
||||
|
||||
@ -117,6 +116,17 @@ bool EditWidget::readOnly() const
|
||||
return m_readOnly;
|
||||
}
|
||||
|
||||
void EditWidget::setModified(bool state)
|
||||
{
|
||||
m_modified = state;
|
||||
enableApplyButton(state);
|
||||
}
|
||||
|
||||
bool EditWidget::isModified() const
|
||||
{
|
||||
return m_modified;
|
||||
}
|
||||
|
||||
void EditWidget::enableApplyButton(bool enabled)
|
||||
{
|
||||
QPushButton* applyButton = m_ui->buttonBox->button(QDialogButtonBox::Apply);
|
||||
@ -125,6 +135,27 @@ void EditWidget::enableApplyButton(bool enabled)
|
||||
}
|
||||
}
|
||||
|
||||
void EditWidget::showApplyButton(bool state)
|
||||
{
|
||||
if (!m_readOnly) {
|
||||
auto buttons = m_ui->buttonBox->standardButtons();
|
||||
if (state) {
|
||||
buttons |= QDialogButtonBox::Apply;
|
||||
} else {
|
||||
buttons &= ~QDialogButtonBox::Apply;
|
||||
}
|
||||
m_ui->buttonBox->setStandardButtons(buttons);
|
||||
}
|
||||
}
|
||||
|
||||
void EditWidget::buttonClicked(QAbstractButton* button)
|
||||
{
|
||||
auto stdButton = m_ui->buttonBox->standardButton(button);
|
||||
if (stdButton == QDialogButtonBox::Apply) {
|
||||
emit apply();
|
||||
}
|
||||
}
|
||||
|
||||
void EditWidget::showMessage(const QString& text, MessageWidget::MessageType type)
|
||||
{
|
||||
// Show error messages for a longer time to make sure the user can read them
|
||||
|
@ -49,6 +49,8 @@ public:
|
||||
void setReadOnly(bool readOnly);
|
||||
bool readOnly() const;
|
||||
void enableApplyButton(bool enabled);
|
||||
void showApplyButton(bool state);
|
||||
virtual bool isModified() const;
|
||||
|
||||
signals:
|
||||
void apply();
|
||||
@ -58,10 +60,13 @@ signals:
|
||||
protected slots:
|
||||
void showMessage(const QString& text, MessageWidget::MessageType type);
|
||||
void hideMessage();
|
||||
void setModified(bool state = true);
|
||||
void buttonClicked(QAbstractButton* button);
|
||||
|
||||
private:
|
||||
const QScopedPointer<Ui::EditWidget> m_ui;
|
||||
bool m_readOnly;
|
||||
bool m_modified;
|
||||
|
||||
Q_DISABLE_COPY(EditWidget)
|
||||
};
|
||||
|
@ -41,7 +41,7 @@
|
||||
#include "keys/FileKey.h"
|
||||
#include "keys/PasswordKey.h"
|
||||
|
||||
#ifdef WITH_XC_NETWORKING
|
||||
#ifdef WITH_XC_UPDATECHECK
|
||||
#include "gui/MessageBox.h"
|
||||
#include "gui/UpdateCheckDialog.h"
|
||||
#include "updatecheck/UpdateChecker.h"
|
||||
@ -253,9 +253,9 @@ MainWindow::MainWindow()
|
||||
new QShortcut(Qt::CTRL + Qt::SHIFT + Qt::Key_M, this, SLOT(hideWindow()));
|
||||
// Control database tabs
|
||||
new QShortcut(Qt::CTRL + Qt::Key_Tab, this, SLOT(selectNextDatabaseTab()));
|
||||
new QShortcut(Qt::CTRL + Qt::Key_PageUp, this, SLOT(selectNextDatabaseTab()));
|
||||
new QShortcut(Qt::CTRL + Qt::Key_PageDown, this, SLOT(selectNextDatabaseTab()));
|
||||
new QShortcut(Qt::CTRL + Qt::SHIFT + Qt::Key_Tab, this, SLOT(selectPreviousDatabaseTab()));
|
||||
new QShortcut(Qt::CTRL + Qt::Key_PageDown, this, SLOT(selectPreviousDatabaseTab()));
|
||||
new QShortcut(Qt::CTRL + Qt::Key_PageUp, this, SLOT(selectPreviousDatabaseTab()));
|
||||
// Toggle password and username visibility in entry view
|
||||
new QShortcut(Qt::CTRL + Qt::SHIFT + Qt::Key_C, this, SLOT(togglePasswordsHidden()));
|
||||
new QShortcut(Qt::CTRL + Qt::SHIFT + Qt::Key_B, this, SLOT(toggleUsernamesHidden()));
|
||||
@ -372,12 +372,12 @@ MainWindow::MainWindow()
|
||||
setUnifiedTitleAndToolBarOnMac(true);
|
||||
#endif
|
||||
|
||||
#ifdef WITH_XC_NETWORKING
|
||||
#ifdef WITH_XC_UPDATECHECK
|
||||
connect(m_ui->actionCheckForUpdates, SIGNAL(triggered()), SLOT(showUpdateCheckDialog()));
|
||||
connect(UpdateChecker::instance(),
|
||||
SIGNAL(updateCheckFinished(bool, QString, bool)),
|
||||
SLOT(hasUpdateAvailable(bool, QString, bool)));
|
||||
QTimer::singleShot(3000, this, SLOT(showUpdateCheckStartup()));
|
||||
QTimer::singleShot(500, this, SLOT(showUpdateCheckStartup()));
|
||||
#else
|
||||
m_ui->actionCheckForUpdates->setVisible(false);
|
||||
#endif
|
||||
@ -391,8 +391,10 @@ MainWindow::MainWindow()
|
||||
|
||||
connect(m_ui->tabWidget, SIGNAL(messageDismissGlobal()), this, SLOT(hideGlobalMessage()));
|
||||
|
||||
#ifndef Q_OS_HAIKU
|
||||
m_screenLockListener = new ScreenLockListener(this);
|
||||
connect(m_screenLockListener, SIGNAL(screenLocked()), SLOT(handleScreenLock()));
|
||||
#endif
|
||||
|
||||
updateTrayIcon();
|
||||
|
||||
@ -494,28 +496,9 @@ void MainWindow::clearLastDatabases()
|
||||
}
|
||||
}
|
||||
|
||||
void MainWindow::openDatabase(const QString& filePath, const QString& pw, const QString& keyFile)
|
||||
void MainWindow::openDatabase(const QString& filePath, const QString& password, const QString& keyfile)
|
||||
{
|
||||
if (pw.isEmpty() && keyFile.isEmpty()) {
|
||||
m_ui->tabWidget->addDatabaseTab(filePath);
|
||||
return;
|
||||
}
|
||||
|
||||
auto db = QSharedPointer<Database>::create();
|
||||
auto key = QSharedPointer<CompositeKey>::create();
|
||||
if (!pw.isEmpty()) {
|
||||
key->addKey(QSharedPointer<PasswordKey>::create(pw));
|
||||
}
|
||||
if (!keyFile.isEmpty()) {
|
||||
auto fileKey = QSharedPointer<FileKey>::create();
|
||||
fileKey->load(keyFile);
|
||||
key->addKey(fileKey);
|
||||
}
|
||||
if (db->open(filePath, key, nullptr, false)) {
|
||||
auto* dbWidget = new DatabaseWidget(db, this);
|
||||
m_ui->tabWidget->addDatabaseTab(dbWidget);
|
||||
dbWidget->switchToMainView(true);
|
||||
}
|
||||
m_ui->tabWidget->addDatabaseTab(filePath, false, password, keyfile);
|
||||
}
|
||||
|
||||
void MainWindow::setMenuActionState(DatabaseWidget::Mode mode)
|
||||
@ -687,7 +670,7 @@ void MainWindow::showAboutDialog()
|
||||
|
||||
void MainWindow::showUpdateCheckStartup()
|
||||
{
|
||||
#ifdef WITH_XC_NETWORKING
|
||||
#ifdef WITH_XC_UPDATECHECK
|
||||
if (!config()->get("UpdateCheckMessageShown", false).toBool()) {
|
||||
auto result =
|
||||
MessageBox::question(this,
|
||||
@ -710,7 +693,7 @@ void MainWindow::showUpdateCheckStartup()
|
||||
|
||||
void MainWindow::hasUpdateAvailable(bool hasUpdate, const QString& version, bool isManuallyRequested)
|
||||
{
|
||||
#ifdef WITH_XC_NETWORKING
|
||||
#ifdef WITH_XC_UPDATECHECK
|
||||
if (hasUpdate && !isManuallyRequested) {
|
||||
auto* updateCheckDialog = new UpdateCheckDialog(this);
|
||||
updateCheckDialog->showUpdateCheckResponse(hasUpdate, version);
|
||||
@ -725,7 +708,7 @@ void MainWindow::hasUpdateAvailable(bool hasUpdate, const QString& version, bool
|
||||
|
||||
void MainWindow::showUpdateCheckDialog()
|
||||
{
|
||||
#ifdef WITH_XC_NETWORKING
|
||||
#ifdef WITH_XC_UPDATECHECK
|
||||
updateCheck()->checkForUpdates(true);
|
||||
auto* updateCheckDialog = new UpdateCheckDialog(this);
|
||||
updateCheckDialog->show();
|
||||
@ -920,24 +903,27 @@ void MainWindow::saveWindowInformation()
|
||||
|
||||
bool MainWindow::saveLastDatabases()
|
||||
{
|
||||
bool accept;
|
||||
m_openDatabases.clear();
|
||||
bool openPreviousDatabasesOnStartup = config()->get("OpenPreviousDatabasesOnStartup").toBool();
|
||||
if (config()->get("OpenPreviousDatabasesOnStartup").toBool()) {
|
||||
auto currentDbWidget = m_ui->tabWidget->currentDatabaseWidget();
|
||||
if (currentDbWidget) {
|
||||
config()->set("LastActiveDatabase", currentDbWidget->database()->filePath());
|
||||
} else {
|
||||
config()->set("LastActiveDatabase", {});
|
||||
}
|
||||
|
||||
if (openPreviousDatabasesOnStartup) {
|
||||
connect(
|
||||
m_ui->tabWidget, SIGNAL(databaseClosed(const QString&)), this, SLOT(rememberOpenDatabases(const QString&)));
|
||||
QStringList openDatabases;
|
||||
for (int i=0; i < m_ui->tabWidget->count(); ++i) {
|
||||
auto dbWidget = m_ui->tabWidget->databaseWidgetFromIndex(i);
|
||||
openDatabases.append(dbWidget->database()->filePath());
|
||||
}
|
||||
|
||||
config()->set("LastOpenedDatabases", openDatabases);
|
||||
} else {
|
||||
config()->set("LastActiveDatabase", {});
|
||||
config()->set("LastOpenedDatabases", {});
|
||||
}
|
||||
|
||||
accept = m_ui->tabWidget->closeAllDatabaseTabs();
|
||||
|
||||
if (openPreviousDatabasesOnStartup) {
|
||||
disconnect(
|
||||
m_ui->tabWidget, SIGNAL(databaseClosed(const QString&)), this, SLOT(rememberOpenDatabases(const QString&)));
|
||||
config()->set("LastOpenedDatabases", m_openDatabases);
|
||||
}
|
||||
|
||||
return accept;
|
||||
return m_ui->tabWidget->closeAllDatabaseTabs();
|
||||
}
|
||||
|
||||
void MainWindow::updateTrayIcon()
|
||||
@ -1002,11 +988,6 @@ void MainWindow::setShortcut(QAction* action, QKeySequence::StandardKey standard
|
||||
}
|
||||
}
|
||||
|
||||
void MainWindow::rememberOpenDatabases(const QString& filePath)
|
||||
{
|
||||
m_openDatabases.prepend(filePath);
|
||||
}
|
||||
|
||||
void MainWindow::applySettingsChanges()
|
||||
{
|
||||
int timeout = config()->get("security/lockdatabaseidlesec").toInt() * 1000;
|
||||
|
@ -56,7 +56,7 @@ public:
|
||||
};
|
||||
|
||||
public slots:
|
||||
void openDatabase(const QString& filePath, const QString& pw = {}, const QString& keyFile = {});
|
||||
void openDatabase(const QString& filePath, const QString& password = {}, const QString& keyfile = {});
|
||||
void appExit();
|
||||
void displayGlobalMessage(const QString& text,
|
||||
MessageWidget::MessageType type,
|
||||
@ -105,7 +105,6 @@ private slots:
|
||||
void updateCopyAttributesMenu();
|
||||
void showEntryContextMenu(const QPoint& globalPos);
|
||||
void showGroupContextMenu(const QPoint& globalPos);
|
||||
void rememberOpenDatabases(const QString& filePath);
|
||||
void applySettingsChanges();
|
||||
void trayIconTriggered(QSystemTrayIcon::ActivationReason reason);
|
||||
void lockDatabasesAfterInactivity();
|
||||
@ -137,7 +136,6 @@ private:
|
||||
QAction* m_searchWidgetAction;
|
||||
QActionGroup* m_lastDatabasesActions;
|
||||
QActionGroup* m_copyAdditionalAttributeActions;
|
||||
QStringList m_openDatabases;
|
||||
InactivityTimer* m_inactivityTimer;
|
||||
InactivityTimer* m_touchIDinactivityTimer;
|
||||
int m_countDefaultAttributes;
|
||||
|
@ -23,6 +23,7 @@
|
||||
#include <QUrl>
|
||||
|
||||
const int MessageWidget::DefaultAutoHideTimeout = 6000;
|
||||
const int MessageWidget::LongAutoHideTimeout = 15000;
|
||||
const int MessageWidget::DisableAutoHide = -1;
|
||||
|
||||
MessageWidget::MessageWidget(QWidget* parent)
|
||||
|
@ -33,6 +33,7 @@ public:
|
||||
int autoHideTimeout() const;
|
||||
|
||||
static const int DefaultAutoHideTimeout;
|
||||
static const int LongAutoHideTimeout;
|
||||
static const int DisableAutoHide;
|
||||
|
||||
signals:
|
||||
|
@ -1,5 +1,4 @@
|
||||
/*
|
||||
* Copyright (C) 2016 Jonathan White <support@dmapps.us>
|
||||
* Copyright (C) 2017 KeePassXC Team <team@keepassxc.org>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
@ -97,6 +96,13 @@ bool SearchWidget::eventFilter(QObject* obj, QEvent* event)
|
||||
if (keyEvent->key() == Qt::Key_Escape) {
|
||||
emit escapePressed();
|
||||
return true;
|
||||
} else if (keyEvent->matches(QKeySequence::Copy)) {
|
||||
// If Control+C is pressed in the search edit when no text
|
||||
// is selected, copy the password of the current entry.
|
||||
if (!m_ui->searchEdit->hasSelectedText()) {
|
||||
emit copyPressed();
|
||||
return true;
|
||||
}
|
||||
} else if (keyEvent->matches(QKeySequence::MoveToNextLine)) {
|
||||
if (m_ui->searchEdit->cursorPosition() == m_ui->searchEdit->text().length()) {
|
||||
// If down is pressed at EOL, move the focus to the entry view
|
||||
|
@ -77,11 +77,8 @@ void DatabaseSettingsWidgetMasterKey::load(QSharedPointer<Database> db)
|
||||
// database has no key, we are about to add a new one
|
||||
m_passwordEditWidget->changeVisiblePage(KeyComponentWidget::Page::Edit);
|
||||
m_passwordEditWidget->setPasswordVisible(true);
|
||||
m_isDirty = true;
|
||||
return;
|
||||
}
|
||||
|
||||
bool isDirty = false;
|
||||
bool hasAdditionalKeys = false;
|
||||
for (const auto& key : m_db->key()->keys()) {
|
||||
if (key->uuid() == PasswordKey::UUID) {
|
||||
@ -103,7 +100,11 @@ void DatabaseSettingsWidgetMasterKey::load(QSharedPointer<Database> db)
|
||||
|
||||
setAdditionalKeyOptionsVisible(hasAdditionalKeys);
|
||||
|
||||
m_isDirty = isDirty;
|
||||
connect(m_passwordEditWidget->findChild<QPushButton*>("removeButton"), SIGNAL(clicked()), SLOT(markDirty()));
|
||||
connect(m_keyFileEditWidget->findChild<QPushButton*>("removeButton"), SIGNAL(clicked()), SLOT(markDirty()));
|
||||
#ifdef WITH_XC_YUBIKEY
|
||||
connect(m_yubiKeyEditWidget->findChild<QPushButton*>("removeButton"), SIGNAL(clicked()), SLOT(markDirty()));
|
||||
#endif
|
||||
}
|
||||
|
||||
void DatabaseSettingsWidgetMasterKey::initialize()
|
||||
|
@ -198,11 +198,18 @@ void EditEntryWidget::setupIcon()
|
||||
connect(this, SIGNAL(rejected()), m_iconsWidget, SLOT(abortRequests()));
|
||||
}
|
||||
|
||||
void EditEntryWidget::openAutotypeHelp()
|
||||
{
|
||||
QDesktopServices::openUrl(QUrl("https://github.com/keepassxreboot/keepassxc/wiki/Autotype-Custom-Sequence"));
|
||||
}
|
||||
|
||||
void EditEntryWidget::setupAutoType()
|
||||
{
|
||||
m_autoTypeUi->setupUi(m_autoTypeWidget);
|
||||
addPage(tr("Auto-Type"), FilePath::instance()->icon("actions", "key-enter"), m_autoTypeWidget);
|
||||
|
||||
m_autoTypeUi->openHelpButton->setIcon(filePath()->icon("actions", "system-help"));
|
||||
|
||||
m_autoTypeDefaultSequenceGroup->addButton(m_autoTypeUi->inheritSequenceButton);
|
||||
m_autoTypeDefaultSequenceGroup->addButton(m_autoTypeUi->customSequenceButton);
|
||||
m_autoTypeAssocModel->setAutoTypeAssociations(m_autoTypeAssoc);
|
||||
@ -213,6 +220,9 @@ void EditEntryWidget::setupAutoType()
|
||||
connect(m_autoTypeUi->enableButton, SIGNAL(toggled(bool)), SLOT(updateAutoTypeEnabled()));
|
||||
connect(m_autoTypeUi->customSequenceButton, SIGNAL(toggled(bool)),
|
||||
m_autoTypeUi->sequenceEdit, SLOT(setEnabled(bool)));
|
||||
connect(m_autoTypeUi->customSequenceButton, SIGNAL(toggled(bool)),
|
||||
m_autoTypeUi->openHelpButton, SLOT(setEnabled(bool)));
|
||||
connect(m_autoTypeUi->openHelpButton, SIGNAL(clicked()), SLOT(openAutotypeHelp()));
|
||||
connect(m_autoTypeUi->customWindowSequenceButton, SIGNAL(toggled(bool)),
|
||||
m_autoTypeUi->windowSequenceEdit, SLOT(setEnabled(bool)));
|
||||
connect(m_autoTypeUi->assocAddButton, SIGNAL(clicked()), SLOT(insertAutoTypeAssoc()));
|
||||
@ -266,55 +276,54 @@ void EditEntryWidget::setupHistory()
|
||||
void EditEntryWidget::setupEntryUpdate()
|
||||
{
|
||||
// Entry tab
|
||||
connect(m_mainUi->titleEdit, SIGNAL(textChanged(QString)), this, SLOT(setUnsavedChanges()));
|
||||
connect(m_mainUi->usernameEdit, SIGNAL(textChanged(QString)), this, SLOT(setUnsavedChanges()));
|
||||
connect(m_mainUi->passwordEdit, SIGNAL(textChanged(QString)), this, SLOT(setUnsavedChanges()));
|
||||
connect(m_mainUi->passwordRepeatEdit, SIGNAL(textChanged(QString)), this, SLOT(setUnsavedChanges()));
|
||||
connect(m_mainUi->urlEdit, SIGNAL(textChanged(QString)), this, SLOT(setUnsavedChanges()));
|
||||
connect(m_mainUi->titleEdit, SIGNAL(textChanged(QString)), this, SLOT(setModified()));
|
||||
connect(m_mainUi->usernameEdit, SIGNAL(textChanged(QString)), this, SLOT(setModified()));
|
||||
connect(m_mainUi->passwordEdit, SIGNAL(textChanged(QString)), this, SLOT(setModified()));
|
||||
connect(m_mainUi->passwordRepeatEdit, SIGNAL(textChanged(QString)), this, SLOT(setModified()));
|
||||
connect(m_mainUi->urlEdit, SIGNAL(textChanged(QString)), this, SLOT(setModified()));
|
||||
#ifdef WITH_XC_NETWORKING
|
||||
connect(m_mainUi->urlEdit, SIGNAL(textChanged(QString)), this, SLOT(updateFaviconButtonEnable(QString)));
|
||||
#endif
|
||||
connect(m_mainUi->expireCheck, SIGNAL(stateChanged(int)), this, SLOT(setUnsavedChanges()));
|
||||
connect(m_mainUi->notesEnabled, SIGNAL(stateChanged(int)), this, SLOT(setUnsavedChanges()));
|
||||
connect(m_mainUi->expireDatePicker, SIGNAL(dateTimeChanged(QDateTime)), this, SLOT(setUnsavedChanges()));
|
||||
connect(m_mainUi->notesEdit, SIGNAL(textChanged()), this, SLOT(setUnsavedChanges()));
|
||||
connect(m_mainUi->expireCheck, SIGNAL(stateChanged(int)), this, SLOT(setModified()));
|
||||
connect(m_mainUi->notesEnabled, SIGNAL(stateChanged(int)), this, SLOT(setModified()));
|
||||
connect(m_mainUi->expireDatePicker, SIGNAL(dateTimeChanged(QDateTime)), this, SLOT(setModified()));
|
||||
connect(m_mainUi->notesEdit, SIGNAL(textChanged()), this, SLOT(setModified()));
|
||||
|
||||
// Advanced tab
|
||||
connect(m_advancedUi->attributesEdit, SIGNAL(textChanged()), this, SLOT(setUnsavedChanges()));
|
||||
connect(m_advancedUi->protectAttributeButton, SIGNAL(stateChanged(int)), this, SLOT(setUnsavedChanges()));
|
||||
connect(m_advancedUi->fgColorCheckBox, SIGNAL(stateChanged(int)), this, SLOT(setUnsavedChanges()));
|
||||
connect(m_advancedUi->bgColorCheckBox, SIGNAL(stateChanged(int)), this, SLOT(setUnsavedChanges()));
|
||||
connect(m_advancedUi->attachmentsWidget, SIGNAL(widgetUpdated()), this, SLOT(setUnsavedChanges()));
|
||||
connect(m_advancedUi->attributesEdit, SIGNAL(textChanged()), this, SLOT(setModified()));
|
||||
connect(m_advancedUi->protectAttributeButton, SIGNAL(stateChanged(int)), this, SLOT(setModified()));
|
||||
connect(m_advancedUi->fgColorCheckBox, SIGNAL(stateChanged(int)), this, SLOT(setModified()));
|
||||
connect(m_advancedUi->bgColorCheckBox, SIGNAL(stateChanged(int)), this, SLOT(setModified()));
|
||||
connect(m_advancedUi->attachmentsWidget, SIGNAL(widgetUpdated()), this, SLOT(setModified()));
|
||||
|
||||
// Icon tab
|
||||
connect(m_iconsWidget, SIGNAL(widgetUpdated()), this, SLOT(setUnsavedChanges()));
|
||||
connect(m_iconsWidget, SIGNAL(widgetUpdated()), this, SLOT(setModified()));
|
||||
|
||||
// Auto-Type tab
|
||||
connect(m_autoTypeUi->enableButton, SIGNAL(stateChanged(int)), this, SLOT(setUnsavedChanges()));
|
||||
connect(m_autoTypeUi->customWindowSequenceButton, SIGNAL(stateChanged(int)), this, SLOT(setUnsavedChanges()));
|
||||
connect(m_autoTypeUi->inheritSequenceButton, SIGNAL(toggled(bool)), this, SLOT(setUnsavedChanges()));
|
||||
connect(m_autoTypeUi->customSequenceButton, SIGNAL(toggled(bool)), this, SLOT(setUnsavedChanges()));
|
||||
connect(m_autoTypeUi->windowSequenceEdit, SIGNAL(textChanged(QString)), this, SLOT(setUnsavedChanges()));
|
||||
connect(m_autoTypeUi->sequenceEdit, SIGNAL(textChanged(QString)), this, SLOT(setUnsavedChanges()));
|
||||
connect(m_autoTypeUi->windowTitleCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(setUnsavedChanges()));
|
||||
connect(m_autoTypeUi->windowTitleCombo, SIGNAL(editTextChanged(QString)), this, SLOT(setUnsavedChanges()));
|
||||
connect(m_autoTypeUi->enableButton, SIGNAL(stateChanged(int)), this, SLOT(setModified()));
|
||||
connect(m_autoTypeUi->customWindowSequenceButton, SIGNAL(stateChanged(int)), this, SLOT(setModified()));
|
||||
connect(m_autoTypeUi->inheritSequenceButton, SIGNAL(toggled(bool)), this, SLOT(setModified()));
|
||||
connect(m_autoTypeUi->customSequenceButton, SIGNAL(toggled(bool)), this, SLOT(setModified()));
|
||||
connect(m_autoTypeUi->windowSequenceEdit, SIGNAL(textChanged(QString)), this, SLOT(setModified()));
|
||||
connect(m_autoTypeUi->sequenceEdit, SIGNAL(textChanged(QString)), this, SLOT(setModified()));
|
||||
connect(m_autoTypeUi->windowTitleCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(setModified()));
|
||||
connect(m_autoTypeUi->windowTitleCombo, SIGNAL(editTextChanged(QString)), this, SLOT(setModified()));
|
||||
|
||||
// Properties and History tabs don't need extra connections
|
||||
|
||||
#ifdef WITH_XC_SSHAGENT
|
||||
// SSH Agent tab
|
||||
if (config()->get("SSHAgent", false).toBool()) {
|
||||
connect(m_sshAgentUi->attachmentRadioButton, SIGNAL(toggled(bool)), this, SLOT(setUnsavedChanges()));
|
||||
connect(m_sshAgentUi->externalFileRadioButton, SIGNAL(toggled(bool)), this, SLOT(setUnsavedChanges()));
|
||||
connect(m_sshAgentUi->attachmentComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(setUnsavedChanges()));
|
||||
connect(m_sshAgentUi->attachmentComboBox, SIGNAL(editTextChanged(QString)), this, SLOT(setUnsavedChanges()));
|
||||
connect(m_sshAgentUi->externalFileEdit, SIGNAL(textChanged(QString)), this, SLOT(setUnsavedChanges()));
|
||||
connect(m_sshAgentUi->addKeyToAgentCheckBox, SIGNAL(stateChanged(int)), this, SLOT(setUnsavedChanges()));
|
||||
connect(m_sshAgentUi->removeKeyFromAgentCheckBox, SIGNAL(stateChanged(int)), this, SLOT(setUnsavedChanges()));
|
||||
connect(
|
||||
m_sshAgentUi->requireUserConfirmationCheckBox, SIGNAL(stateChanged(int)), this, SLOT(setUnsavedChanges()));
|
||||
connect(m_sshAgentUi->lifetimeCheckBox, SIGNAL(stateChanged(int)), this, SLOT(setUnsavedChanges()));
|
||||
connect(m_sshAgentUi->lifetimeSpinBox, SIGNAL(valueChanged(int)), this, SLOT(setUnsavedChanges()));
|
||||
connect(m_sshAgentUi->attachmentRadioButton, SIGNAL(toggled(bool)), this, SLOT(setModified()));
|
||||
connect(m_sshAgentUi->externalFileRadioButton, SIGNAL(toggled(bool)), this, SLOT(setModified()));
|
||||
connect(m_sshAgentUi->attachmentComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(setModified()));
|
||||
connect(m_sshAgentUi->attachmentComboBox, SIGNAL(editTextChanged(QString)), this, SLOT(setModified()));
|
||||
connect(m_sshAgentUi->externalFileEdit, SIGNAL(textChanged(QString)), this, SLOT(setModified()));
|
||||
connect(m_sshAgentUi->addKeyToAgentCheckBox, SIGNAL(stateChanged(int)), this, SLOT(setModified()));
|
||||
connect(m_sshAgentUi->removeKeyFromAgentCheckBox, SIGNAL(stateChanged(int)), this, SLOT(setModified()));
|
||||
connect(m_sshAgentUi->requireUserConfirmationCheckBox, SIGNAL(stateChanged(int)), this, SLOT(setModified()));
|
||||
connect(m_sshAgentUi->lifetimeCheckBox, SIGNAL(stateChanged(int)), this, SLOT(setModified()));
|
||||
connect(m_sshAgentUi->lifetimeSpinBox, SIGNAL(valueChanged(int)), this, SLOT(setModified()));
|
||||
}
|
||||
#endif
|
||||
}
|
||||
@ -588,15 +597,14 @@ void EditEntryWidget::addKeyToAgent()
|
||||
m_sshAgentUi->commentTextLabel->setText(key.comment());
|
||||
m_sshAgentUi->publicKeyEdit->document()->setPlainText(key.publicKey());
|
||||
|
||||
int lifetime = 0;
|
||||
bool confirm = m_sshAgentUi->requireUserConfirmationCheckBox->isChecked();
|
||||
KeeAgentSettings settings;
|
||||
|
||||
if (m_sshAgentUi->lifetimeCheckBox->isChecked()) {
|
||||
lifetime = m_sshAgentUi->lifetimeSpinBox->value();
|
||||
}
|
||||
settings.setRemoveAtDatabaseClose(m_sshAgentUi->removeKeyFromAgentCheckBox->isChecked());
|
||||
settings.setUseConfirmConstraintWhenAdding(m_sshAgentUi->requireUserConfirmationCheckBox->isChecked());
|
||||
settings.setUseLifetimeConstraintWhenAdding(m_sshAgentUi->lifetimeCheckBox->isChecked());
|
||||
settings.setLifetimeConstraintDuration(m_sshAgentUi->lifetimeSpinBox->value());
|
||||
|
||||
if (!SSHAgent::instance()->addIdentity(
|
||||
key, m_sshAgentUi->removeKeyFromAgentCheckBox->isChecked(), static_cast<quint32>(lifetime), confirm)) {
|
||||
if (!SSHAgent::instance()->addIdentity(key, settings)) {
|
||||
showMessage(SSHAgent::instance()->errorString(), MessageWidget::Error);
|
||||
return;
|
||||
}
|
||||
@ -693,8 +701,10 @@ void EditEntryWidget::loadEntry(Entry* entry,
|
||||
setCurrentPage(0);
|
||||
setPageHidden(m_historyWidget, m_history || m_entry->historyItems().count() < 1);
|
||||
|
||||
// Force the user to Save/Apply/Discard new entries
|
||||
setUnsavedChanges(m_create);
|
||||
// Force the user to Save/Discard new entries
|
||||
showApplyButton(!m_create);
|
||||
|
||||
setModified(false);
|
||||
}
|
||||
|
||||
void EditEntryWidget::setForms(Entry* entry, bool restore)
|
||||
@ -871,7 +881,6 @@ bool EditEntryWidget::commitEntry()
|
||||
}
|
||||
|
||||
updateEntryData(m_entry);
|
||||
setUnsavedChanges(false);
|
||||
|
||||
if (!m_create) {
|
||||
m_entry->endUpdate();
|
||||
@ -886,6 +895,7 @@ bool EditEntryWidget::commitEntry()
|
||||
m_historyModel->setEntries(m_entry->historyItems());
|
||||
|
||||
showMessage(tr("Entry updated successfully."), MessageWidget::Positive);
|
||||
setModified(false);
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -958,7 +968,7 @@ void EditEntryWidget::cancel()
|
||||
m_entry->setIcon(Entry::DefaultIconNumber);
|
||||
}
|
||||
|
||||
if (!m_saved) {
|
||||
if (isModified()) {
|
||||
auto result = MessageBox::question(this,
|
||||
QString(),
|
||||
tr("Entry has unsaved changes"),
|
||||
@ -970,19 +980,26 @@ void EditEntryWidget::cancel()
|
||||
}
|
||||
if (result == MessageBox::Save) {
|
||||
commitEntry();
|
||||
m_saved = true;
|
||||
setModified(false);
|
||||
}
|
||||
}
|
||||
|
||||
clear();
|
||||
|
||||
emit editFinished(m_saved);
|
||||
emit editFinished(!isModified());
|
||||
}
|
||||
|
||||
void EditEntryWidget::clear()
|
||||
{
|
||||
m_entry = nullptr;
|
||||
m_db.reset();
|
||||
|
||||
m_mainUi->titleEdit->setText("");
|
||||
m_mainUi->passwordEdit->setText("");
|
||||
m_mainUi->passwordRepeatEdit->setText("");
|
||||
m_mainUi->urlEdit->setText("");
|
||||
m_mainUi->notesEdit->clear();
|
||||
|
||||
m_entryAttributes->clear();
|
||||
m_advancedUi->attachmentsWidget->clearAttachments();
|
||||
m_autoTypeAssoc->clear();
|
||||
@ -991,22 +1008,6 @@ void EditEntryWidget::clear()
|
||||
hideMessage();
|
||||
}
|
||||
|
||||
bool EditEntryWidget::hasBeenModified() const
|
||||
{
|
||||
// entry has been modified if a history item is to be deleted
|
||||
if (!m_historyModel->deletedEntries().isEmpty()) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// check if updating the entry would modify it
|
||||
auto* entry = new Entry();
|
||||
entry->copyDataFrom(m_entry.data());
|
||||
|
||||
entry->beginUpdate();
|
||||
updateEntryData(entry);
|
||||
return entry->endUpdate();
|
||||
}
|
||||
|
||||
void EditEntryWidget::togglePasswordGeneratorButton(bool checked)
|
||||
{
|
||||
if (checked) {
|
||||
@ -1053,7 +1054,7 @@ void EditEntryWidget::insertAttribute()
|
||||
m_advancedUi->attributesView->setCurrentIndex(index);
|
||||
m_advancedUi->attributesView->edit(index);
|
||||
|
||||
setUnsavedChanges(true);
|
||||
setModified(true);
|
||||
}
|
||||
|
||||
void EditEntryWidget::editCurrentAttribute()
|
||||
@ -1064,7 +1065,7 @@ void EditEntryWidget::editCurrentAttribute()
|
||||
|
||||
if (index.isValid()) {
|
||||
m_advancedUi->attributesView->edit(index);
|
||||
setUnsavedChanges(true);
|
||||
setModified(true);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1084,7 +1085,7 @@ void EditEntryWidget::removeCurrentAttribute()
|
||||
|
||||
if (result == MessageBox::Remove) {
|
||||
m_entryAttributes->remove(m_attributesModel->keyByIndex(index));
|
||||
setUnsavedChanges(true);
|
||||
setModified(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1185,6 +1186,7 @@ void EditEntryWidget::updateAutoTypeEnabled()
|
||||
m_autoTypeUi->inheritSequenceButton->setEnabled(!m_history && autoTypeEnabled);
|
||||
m_autoTypeUi->customSequenceButton->setEnabled(!m_history && autoTypeEnabled);
|
||||
m_autoTypeUi->sequenceEdit->setEnabled(autoTypeEnabled && m_autoTypeUi->customSequenceButton->isChecked());
|
||||
m_autoTypeUi->openHelpButton->setEnabled(autoTypeEnabled && m_autoTypeUi->customSequenceButton->isChecked());
|
||||
|
||||
m_autoTypeUi->assocView->setEnabled(autoTypeEnabled);
|
||||
m_autoTypeUi->assocAddButton->setEnabled(!m_history);
|
||||
@ -1205,7 +1207,7 @@ void EditEntryWidget::insertAutoTypeAssoc()
|
||||
m_autoTypeUi->assocView->setCurrentIndex(newIndex);
|
||||
loadCurrentAssoc(newIndex);
|
||||
m_autoTypeUi->windowTitleCombo->setFocus();
|
||||
setUnsavedChanges(true);
|
||||
setModified(true);
|
||||
}
|
||||
|
||||
void EditEntryWidget::removeAutoTypeAssoc()
|
||||
@ -1214,7 +1216,7 @@ void EditEntryWidget::removeAutoTypeAssoc()
|
||||
|
||||
if (currentIndex.isValid()) {
|
||||
m_autoTypeAssoc->remove(currentIndex.row());
|
||||
setUnsavedChanges(true);
|
||||
setModified(true);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1277,7 +1279,7 @@ void EditEntryWidget::restoreHistoryEntry()
|
||||
QModelIndex index = m_sortModel->mapToSource(m_historyUi->historyView->currentIndex());
|
||||
if (index.isValid()) {
|
||||
setForms(m_historyModel->entryFromIndex(index), true);
|
||||
setUnsavedChanges(true);
|
||||
setModified(true);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1291,7 +1293,7 @@ void EditEntryWidget::deleteHistoryEntry()
|
||||
} else {
|
||||
m_historyUi->deleteAllButton->setEnabled(false);
|
||||
}
|
||||
setUnsavedChanges(true);
|
||||
setModified(true);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1299,7 +1301,7 @@ void EditEntryWidget::deleteAllHistoryEntries()
|
||||
{
|
||||
m_historyModel->deleteAll();
|
||||
m_historyUi->deleteAllButton->setEnabled(m_historyModel->rowCount() > 0);
|
||||
setUnsavedChanges(true);
|
||||
setModified(true);
|
||||
}
|
||||
|
||||
QMenu* EditEntryWidget::createPresetsMenu()
|
||||
@ -1352,12 +1354,6 @@ void EditEntryWidget::pickColor()
|
||||
QColor newColor = QColorDialog::getColor(oldColor);
|
||||
if (newColor.isValid()) {
|
||||
setupColorButton(isForeground, newColor);
|
||||
setUnsavedChanges(true);
|
||||
setModified(true);
|
||||
}
|
||||
}
|
||||
|
||||
void EditEntryWidget::setUnsavedChanges(bool hasUnsaved)
|
||||
{
|
||||
m_saved = !hasUnsaved;
|
||||
enableApplyButton(hasUnsaved);
|
||||
}
|
||||
|
@ -68,7 +68,6 @@ public:
|
||||
|
||||
QString entryTitle() const;
|
||||
void clear();
|
||||
bool hasBeenModified() const;
|
||||
|
||||
signals:
|
||||
void editFinished(bool accepted);
|
||||
@ -90,6 +89,7 @@ private slots:
|
||||
void protectCurrentAttribute(bool state);
|
||||
void revealCurrentAttribute();
|
||||
void updateAutoTypeEnabled();
|
||||
void openAutotypeHelp();
|
||||
void insertAutoTypeAssoc();
|
||||
void removeAutoTypeAssoc();
|
||||
void loadCurrentAssoc(const QModelIndex& current);
|
||||
@ -105,7 +105,6 @@ private slots:
|
||||
void useExpiryPreset(QAction* action);
|
||||
void toggleHideNotes(bool visible);
|
||||
void pickColor();
|
||||
void setUnsavedChanges(bool hasUnsaved = true);
|
||||
#ifdef WITH_XC_SSHAGENT
|
||||
void updateSSHAgent();
|
||||
void updateSSHAgentAttachment();
|
||||
@ -147,7 +146,6 @@ private:
|
||||
|
||||
bool m_create;
|
||||
bool m_history;
|
||||
bool m_saved;
|
||||
#ifdef WITH_XC_SSHAGENT
|
||||
bool m_sshAgentEnabled;
|
||||
KeeAgentSettings m_sshAgentSettings;
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user