diff --git a/.gitattributes b/.gitattributes
index 9f713b466..9d1ecabf4 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -1,6 +1,7 @@
src/version.h.cmake export-subst
.gitattributes export-ignore
.gitignore export-ignore
+.github export-ignore
.travis.yml export-ignore
.tx export-ignore
snapcraft.yaml export-ignore
diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md
index 01b8d6137..67b0e1746 100644
--- a/.github/CONTRIBUTING.md
+++ b/.github/CONTRIBUTING.md
@@ -1,31 +1,32 @@
-# Contributing to KeePassX Reboot
+# Contributing to KeePassXC
:+1::tada: First off, thanks for taking the time to contribute! :tada::+1:
-The following is a set of guidelines for contributing to KeePassX Reboot on GitHub.
+The following is a set of guidelines for contributing to KeePassXC on GitHub.
These are just guidelines, not rules. Use your best judgment, and feel free to propose changes to this document in a pull request.
-#### Table Of Contents
+#### Table of contents
[What should I know before I get started?](#what-should-i-know-before-i-get-started)
* [Open Source Contribution Policy](#open-source-contribution-policy)
-[How Can I Contribute?](#how-can-i-contribute)
- * [Feature Requests](#feature-requests)
- * [Bug Reports](#bug-reports)
- * [Your First Code Contribution](#your-first-code-contribution)
- * [Pull Requests](#pull-requests)
+[How can I contribute?](#how-can-i-contribute)
+ * [Feature requests](#feature-requests)
+ * [Bug reports](#bug-reports)
+ * [Discuss with the team](#discuss-with-the-team)
+ * [Your first code contribution](#your-first-code-contribution)
+ * [Pull requests](#pull-requests)
* [Translations](#translations)
[Styleguides](#styleguides)
- * [Git Branch Strategy](#git_branch_strategy)
- * [Git Commit Messages](#git-commit-messages)
- * [Coding Styleguide](#coding-styleguide)
+ * [Git branch strategy](#git-branch-strategy)
+ * [Git commit messages](#git-commit-messages)
+ * [Coding styleguide](#coding-styleguide)
## What should I know before I get started?
### Open Source Contribution Policy
-[Version 0.3, 2015–11–18](https://medium.com/@jmaynard/a-contribution-policy-for-open-source-that-works-bfc4600c9d83#.i9ntbhmad)
+**Source**: [Version 0.3, 2015–11–18](https://medium.com/@jmaynard/a-contribution-policy-for-open-source-that-works-bfc4600c9d83#.i9ntbhmad)
#### Policy
@@ -49,35 +50,35 @@ If we reject your contribution, it means only that we do not consider it suitabl
* 0.3, 2011–11–19: Added “irrevocably” to “we can use” and changed “it” to “your contribution” in the “if rejected” section. Thanks to Patrick Maupin.
-## How Can I Contribute?
-### Feature Requests
+## How can I contribute?
+### Feature requests
-We're always looking for suggestions to improve our application. If you have a suggestion for improving an existing feature, or would like to suggest a completely new feature for KeePassX Reboot, please use the Issues section or our [Google Groups](https://groups.google.com/forum/#!forum/keepassx-reboot) forum.
+We're always looking for suggestions to improve our application. If you have a suggestion to improve an existing feature, or would like to suggest a completely new feature for KeePassXC, please use the [issue tracker on GitHub][issues-section]. For more general discussion, try using our [Google Groups][google-groups] forum.
-### Bug Reports
+### Bug reports
-Our software isn't always perfect, but we strive to always improve our work. You may file bug reports in the Issues section.
+Our software isn't always perfect, but we strive to always improve our work. You may file bug reports in the issue tracker.
-Before submitting a Bug Report, check if the problem has already been reported. Please refrain from opening a duplicate issue. If you want to highlight a deficiency on an existing issue, simply add a comment.
+Before submitting a bug report, check if the problem has already been reported. Please refrain from opening a duplicate issue. If you want to add further information to an existing issue, simply add a comment on that issue.
-### Discuss with the Team
+### Discuss with the team
-You can talk to the KeePassX Reboot Team about Bugs, new feature, Issue and PullRequests at our [Google Groups](https://groups.google.com/forum/#!forum/keepassx-reboot) forum
+As with feature requests, you can talk to the KeePassXC team about bugs, new features, other issues and pull requests on the dedicated issue tracker, using the [Google Groups][google-groups] forum, or in the IRC channel on Freenode (`#keepassxc-dev` on `irc.freenode.net`, or use a [webchat link](https://webchat.freenode.net/?channels=%23keepassxc-dev)).
-### Your First Code Contribution
+### Your first code contribution
-Unsure where to begin contributing to KeePassX Reboot? You can start by looking through these `beginner` and `help-wanted` issues:
+Unsure where to begin contributing to KeePassXC? You can start by looking through these `beginner` and `help-wanted` issues:
-* [Beginner issues][beginner] - issues which should only require a few lines of code, and a test or two.
-* [Help wanted issues][help-wanted] - issues which should be a bit more involved than `beginner` issues.
+* [Beginner issues][beginner] – issues which should only require a few lines of code, and a test or two.
+* ['Help wanted' issues][help-wanted] – issues which should be a bit more involved than `beginner` issues.
-Both issue lists are sorted by total number of comments. While not perfect, number of comments is a reasonable proxy for impact a given change will have.
+Both issue lists are sorted by total number of comments. While not perfect, looking at the number of comments on an issue can give a general idea of how much an impact a given change will have.
-### Pull Requests
+### Pull requests
Along with our desire to hear your feedback and suggestions, we're also interested in accepting direct assistance in the form of code.
-All pull requests must comply with the above requirements and with the [Styleguides](#styleguides).
+All pull requests must comply with the above requirements and with the [styleguides](#styleguides).
### Translations
@@ -86,19 +87,20 @@ Please join an existing language team or request a new one if there is none.
## Styleguides
-### Git Branch Strategy
+### Git branch strategy
The Branch Strategy is based on [git-flow-lite](http://nvie.com/posts/a-successful-git-branching-model/).
-* **master** -> always points to the last release published
-* **develop** -> points to the next planned release, tested and reviewed code
-* **feature/**[name] -> points to brand new feature in codebase, candidate for merge into develop (subject to rebase)
+* **master** – points to the latest public release
+* **develop** – points to the development of the next release, contains tested and reviewed code
+* **feature/**[name] – points to a branch with a new feature, one which is candidate for merge into develop (subject to rebase)
+* **hotfix/**[id]-[description] – points to a branch with a fix for a particular issue ID
-### Git Commit Messages
+### Git commit messages
* Use the present tense ("Add feature" not "Added feature")
-* Use the imperative mood ("Move cursor to..." not "Moves cursor to...")
+* Use the imperative mood ("Move cursor to…" not "Moves cursor to…")
* Limit the first line to 72 characters or less
* Reference issues and pull requests liberally
* When only changing documentation, include `[ci skip]` in the commit description
@@ -114,21 +116,21 @@ The Branch Strategy is based on [git-flow-lite](http://nvie.com/posts/a-successf
* :lock: `:lock:` when dealing with security
-### Coding Styleguide
+### Coding styleguide
This project follows the [Qt Coding Style](https://wiki.qt.io/Qt_Coding_Style). All submissions are expected to follow this style.
-In particular Code must follow the following specific rules:
+In particular, code must stick to the following rules:
-#### Naming Convention
+#### Naming convention
`lowerCamelCase`
-For names made of only one word, the fist letter is lowercase.
-For names made of multiple concatenated words, the first letter is lowercase and each subsequent concatenated word is capitalized.
+For names made of only one word, the first letter should be lowercase.
+For names made of multiple concatenated words, the first letter of the whole is lowercase, and the first letter of each subsequent word is capitalized.
#### Indention
-For C++ files (.cpp .h): 4 spaces
-For Qt-UI files (.ui): 2 spaces
+For **C++ files** (*.cpp .h*): 4 spaces
+For **Qt-UI files** (*.ui*): 2 spaces
#### Pointers
```c
@@ -165,9 +167,8 @@ Use prefix: `m_*`
Example: `m_variable`
-#### GUI Widget names
-Widget names must be related to the desired program behaviour.
-Preferably end the name with the Widget Classname
+#### GUI widget names
+Widget names must be related to the desired program behavior, and preferably end with the widget's classname.
Example: ``
@@ -175,3 +176,5 @@ Example: ``
[beginner]:https://github.com/keepassxreboot/keepassx/issues?q=is%3Aopen+is%3Aissue+label%3Abeginner+label%3A%22help+wanted%22+sort%3Acomments-desc
[help-wanted]:https://github.com/keepassxreboot/keepassx/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22+sort%3Acomments-desc
+[issues-section]:https://github.com/keepassxreboot/keepassxc/issues
+[google-groups]:https://groups.google.com/forum/#!forum/keepassx-reboot
diff --git a/AppImage-Recipe.sh b/AppImage-Recipe.sh
index 9575f077b..dc30cb696 100755
--- a/AppImage-Recipe.sh
+++ b/AppImage-Recipe.sh
@@ -39,26 +39,54 @@ mkdir -p $APP.AppDir
wget -q https://github.com/probonopd/AppImages/raw/master/functions.sh -O ./functions.sh
. ./functions.sh
+LIB_DIR=./usr/lib
+if [ -d ./usr/lib/x86_64-linux-gnu ]; then
+ LIB_DIR=./usr/lib/x86_64-linux-gnu
+fi
+
cd $APP.AppDir
cp -a ../../bin-release/* .
-mv ./usr/local/* ./usr
-rmdir ./usr/local
-patch_strings_in_file /usr/local ./
+cp -a ./usr/local/* ./usr
+rm -R ./usr/local
+rmdir ./opt 2> /dev/null
+patch_strings_in_file /usr/local ././
patch_strings_in_file /usr ./
+# bundle Qt platform plugins and themes
+QXCB_PLUGIN="$(find /usr/lib -name 'libqxcb.so' 2> /dev/null)"
+if [ "$QXCB_PLUGIN" == "" ]; then
+ QXCB_PLUGIN="$(find /opt/qt*/plugins -name 'libqxcb.so' 2> /dev/null)"
+fi
+QT_PLUGIN_PATH="$(dirname $(dirname $QXCB_PLUGIN))"
+mkdir -p ".${QT_PLUGIN_PATH}/platforms"
+cp "$QXCB_PLUGIN" ".${QT_PLUGIN_PATH}/platforms/"
+
get_apprun
copy_deps
delete_blacklisted
+# remove dbus and systemd libs as they are not blacklisted
+find . -name libdbus-1.so.3 -exec rm {} \;
+find . -name libsystemd.so.0 -exec rm {} \;
+
get_desktop
get_icon
+cat << EOF > ./usr/bin/keepassxc_env
+#!/usr/bin/env bash
+#export QT_QPA_PLATFORMTHEME=gtk2
+export LD_LIBRARY_PATH="../opt/qt58/lib:\${LD_LIBRARY_PATH}"
+export QT_PLUGIN_PATH="..${QT_PLUGIN_PATH}"
+exec keepassxc "\$@"
+EOF
+chmod +x ./usr/bin/keepassxc_env
+sed -i 's/Exec=keepassxc/Exec=keepassxc_env/' keepassxc.desktop
get_desktopintegration $LOWERAPP
GLIBC_NEEDED=$(glibc_needed)
cd ..
-generate_appimage
+generate_type2_appimage
mv ../out/*.AppImage ..
rmdir ../out > /dev/null 2>&1
diff --git a/CHANGELOG b/CHANGELOG
index 9051703cb..24ed5ea73 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,13 @@
+2.1.1 (2017-02-06)
+=========================
+
+- Enabled HTTP plugin build; plugin is disabled by default and limited to localhost [#147]
+- Escape HTML in dialog boxes [#247]
+- Corrected crashes in favicon download and password generator [#233, #226]
+- Increase font size of password meter [#228]
+- Fixed compatibility with Qt 5.8 [#211]
+- Use consistent button heights in password generator [#229]
+
2.1.0 (2017-01-22)
=========================
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 3914049e1..3b5df29b1 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -38,8 +38,8 @@ option(WITH_XC_AUTOTYPE "Include Autotype." OFF)
option(WITH_XC_HTTP "Include KeePassHTTP." OFF)
option(WITH_XC_YUBIKEY "Include Yubikey support." OFF)
-set(KEEPASSXC_VERSION "2.1.0")
-set(KEEPASSXC_VERSION_NUM "2.1.0")
+set(KEEPASSXC_VERSION "2.1.1")
+set(KEEPASSXC_VERSION_NUM "2.1.1")
if("${CMAKE_C_COMPILER}" MATCHES "clang$" OR "${CMAKE_C_COMPILER_ID}" STREQUAL "Clang")
set(CMAKE_COMPILER_IS_CLANG 1)
@@ -172,9 +172,13 @@ set(CMAKE_AUTOMOC ON)
# Make sure we don't enable asserts there.
set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_NONE QT_NO_DEBUG)
+find_package(LibGPGError REQUIRED)
+
find_package(Gcrypt 1.6.0 REQUIRED)
-find_package(LibMicroHTTPD REQUIRED)
+if (WITH_XC_HTTP)
+ find_package(LibMicroHTTPD REQUIRED)
+endif(WITH_XC_HTTP)
find_package(ZLIB REQUIRED)
diff --git a/Dockerfile b/Dockerfile
index 3aee19e3c..9623b60dd 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -14,21 +14,41 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
-FROM ubuntu:16.04
+FROM ubuntu:14.04
-RUN set -x && apt-get update
RUN set -x \
+ && apt-get update \
+ && apt-get install --yes software-properties-common
+
+RUN set -x \
+ && add-apt-repository --yes ppa:beineri/opt-qt58-trusty
+
+RUN set -x \
+ && apt-get update \
&& apt-get install --yes \
+ g++ \
cmake \
libgcrypt20-dev \
- qtbase5-dev \
- qttools5-dev-tools \
+ qt58base \
+ qt58tools \
+ qt58x11extras \
libmicrohttpd-dev \
- libqt5x11extras5-dev \
libxi-dev \
libxtst-dev \
- zlib1g-dev
+ zlib1g-dev \
+ wget \
+ file \
+ fuse \
+ python
+RUN set -x \
+ && apt-get install --yes mesa-common-dev
+
VOLUME /keepassxc/src
VOLUME /keepassxc/out
WORKDIR /keepassxc
+
+ENV CMAKE_PREFIX_PATH=/opt/qt58/lib/cmake
+ENV LD_LIBRARY_PATH=/opt/qt58/lib
+RUN set -x \
+ && echo /opt/qt58/lib > /etc/ld.so.conf.d/qt58.conf
diff --git a/README.md b/README.md
index 7da76d6f0..e892f1b01 100644
--- a/README.md
+++ b/README.md
@@ -3,57 +3,63 @@
[![Travis Build Status](https://travis-ci.org/keepassxreboot/keepassxc.svg?branch=develop)](https://travis-ci.org/keepassxreboot/keepassxc) [![Coverage Status](https://coveralls.io/repos/github/keepassxreboot/keepassxc/badge.svg)](https://coveralls.io/github/keepassxreboot/keepassxc)
## About
-
-Fork of [KeePassX](https://www.keepassx.org/) that [aims to incorporate stalled Pull Requests, features, and bug fixes that are not being incorporated into the main KeePassX baseline](https://github.com/keepassxreboot/keepassx/issues/43).
+KeePassXC is a fork of [KeePassX](https://www.keepassx.org/) that [aims to incorporate stalled pull requests, features, and bug fixes that have never made it into the main KeePassX repository](https://github.com/keepassxreboot/keepassx/issues/43).
-#### Additional Reboot Features
- - keepasshttp support for use with [PassIFox](https://addons.mozilla.org/en-us/firefox/addon/passifox/) for Mozilla Firefox and [chromeIPass](https://chrome.google.com/webstore/detail/chromeipass/ompiailgknfdndiefoaoiligalphfdae) for Google Chrome.
+## Additional features compared to KeePassX
+- Autotype on all three major platforms (Linux, Windows, OS X)
+- Stand-alone password generator
+- Password strength meter
+- Use website's favicons as entry icons
+- Merging of databases
+- Automatic reload when the database changed on disk
+- KeePassHTTP support for use with [PassIFox](https://addons.mozilla.org/en-us/firefox/addon/passifox/) in Mozilla Firefox and [chromeIPass](https://chrome.google.com/webstore/detail/chromeipass/ompiailgknfdndiefoaoiligalphfdae) in Google Chrome or Chromium.
-KeePassHttp implementation has been forked from jdachtera's repository, which in turn was based on code from code with Francois Ferrand's [keepassx-http](https://gitorious.org/keepassx/keepassx-http/source/master) repository.
-
-This is a rebuild from [denk-mal's keepasshttp](https://github.com/denk-mal/keepassx.git) that brings it forward to Qt5 and KeePassX v2.x.
+For a full list of features and changes, read the [CHANGELOG](CHANGELOG) document.
+### Note about KeePassHTTP
+KeePassHTTP is not a highly secure protocol and has certain flaw which allow an attacker to decrypt your passwords when they manage to intercept communication between a KeePassHTTP server and PassIFox/chromeIPass over a network connection (see [here](https://github.com/pfn/keepasshttp/issues/258) and [here](https://github.com/keepassxreboot/keepassxc/issues/147)). KeePassXC therefore strictly limits communication between itself and the browser plugin to your local computer. As long as your computer is not compromised, your passwords are fairly safe that way, but still use it at your own risk!
### Installation
+Pre-compiled binaries can be found on the [downloads page](https://keepassxc.org/download). Additionally, individual Linux distributions may ship their own versions, so please check out your distribution's package list to see if KeePassXC is available.
-Right now KeePassXC does not have a precompiled executable or an installation package.
-So you must install it from its source code.
+### Building KeePassXC yourself
-**More detailed instructions are available in the INSTALL file or at the [Wiki page](https://github.com/keepassxreboot/keepassx/wiki/Install-Instruction-from-Source).**
+*More detailed instructions are available in the INSTALL file or on the [Wiki page](https://github.com/keepassxreboot/keepassx/wiki/Install-Instruction-from-Source).*
-First you must download the KeePassXC source code as ZIP file or with Git.
+First, you must download the KeePassXC [source tarball](https://keepassxc.org/download#source) or check out the latest version from our [Git repository](https://github.com/keepassxreboot/keepassxc).
-Generally you can build and install KeePassXC with the following commands from a Terminal in the KeePassXC folder
-```
-mkdir build
-cd build
-cmake -DWITH_TESTS=OFF ..
-make
-sudo make install
-```
-
-
-### Clone Repository
-
-Clone the repository to a suitable location where you can extend and build this project.
+To clone the project from Git, `cd` to a suitable location and run
```bash
git clone https://github.com/keepassxreboot/keepassxc.git
```
-**Note:** This will clone the entire contents of the repository at the HEAD revision.
+This will clone the entire contents of the repository and check out the current `develop` branch.
-To update the project from within the project's folder you can run the following command:
+To update the project from within the project's folder, you can run the following command:
```bash
git pull
```
+Once you have downloaded the source code, you can `cd` into the source code directory and build and install KeePassXC with
+
+```
+mkdir build
+cd build
+cmake -DWITH_TESTS=OFF ..
+make -j8
+sudo make install
+```
+
+To enable autotype, add `-DWITH_XC_AUTOTYPE=ON` to the `cmake` command. KeePassHTTP support is compiled in by adding `-DWITH_XC_HTTP=ON`. If these options are not specified, KeePassXC will be built without these plugins.
+
### Contributing
-We're always looking for suggestions to improve our application. If you have a suggestion for improving an existing feature,
-or would like to suggest a completely new feature for KeePassX Reboot, please use the [Issues](https://github.com/keepassxreboot/keepassxc/issues) section or our [Google Groups](https://groups.google.com/forum/#!forum/keepassx-reboot) forum.
+We are always looking for suggestions how to improve our application. If you find any bugs or have an idea for a new feature, please let us know by opening a report in our [issue tracker](https://github.com/keepassxreboot/keepassxc/issues) on GitHub or write to our [Google Groups](https://groups.google.com/forum/#!forum/keepassx-reboot) forum.
-Please review the [CONTRIBUTING](.github/CONTRIBUTING.md) document for further information.
+You can of course also directly contribute your own code. We are happy to accept your pull requests.
+
+Please read the [CONTRIBUTING](.github/CONTRIBUTING.md) document for further information.
diff --git a/cmake/FindLibGPGError.cmake b/cmake/FindLibGPGError.cmake
new file mode 100644
index 000000000..fe9ef9123
--- /dev/null
+++ b/cmake/FindLibGPGError.cmake
@@ -0,0 +1,9 @@
+
+find_path(GPGERROR_INCLUDE_DIR gpg-error.h)
+
+find_library(GPGERROR_LIBRARIES gpg-error)
+
+mark_as_advanced(GPGERROR_LIBRARIES GPGERROR_INCLUDE_DIR)
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(LibGPGError DEFAULT_MSG GPGERROR_LIBRARIES GPGERROR_INCLUDE_DIR)
diff --git a/make_release.sh b/make_release.sh
deleted file mode 100755
index 19c661b38..000000000
--- a/make_release.sh
+++ /dev/null
@@ -1,350 +0,0 @@
-#!/usr/bin/env bash
-#
-# KeePassXC Release Preparation Helper
-# Copyright (C) 2017 KeePassXC team
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 2 or (at your option)
-# version 3 of the License.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see .
-
-echo -e "\e[1m\e[32mKeePassXC\e[0m Release Preparation Helper"
-echo -e "Copyright (C) 2017 KeePassXC Team \n"
-
-
-# default values
-RELEASE_NAME=""
-APP_NAME="KeePassXC"
-APP_NAME_LOWER="keepassxc"
-SRC_DIR="."
-GPG_KEY="CFB4C2166397D0D2"
-GPG_GIT_KEY=""
-OUTPUT_DIR="release"
-BRANCH=""
-RELEASE_BRANCH="master"
-TAG_NAME=""
-BUILD_SOURCES=false
-DOCKER_IMAGE=""
-DOCKER_CONTAINER_NAME="${APP_NAME_LOWER}-build-container"
-CMAKE_OPTIONS=""
-COMPILER="g++"
-MAKE_OPTIONS="-j8"
-BUILD_PLUGINS="autotype"
-INSTALL_PREFIX="/usr/local"
-
-ORIG_BRANCH="$(git rev-parse --abbrev-ref HEAD 2> /dev/null)"
-ORIG_CWD="$(pwd)"
-
-
-# helper functions
-printUsage() {
- echo -e "\e[1mUsage:\e[0m $(basename $0) [options]"
- cat << EOF
-
-Options:
- -v, --version Release version number or name (required)
- -a, --app-name Application name (default: '${APP_NAME}')
- -s, --source-dir Source directory (default: '${SRC_DIR}')
- -k, --gpg-key GPG key used to sign the release tarball
- (default: '${GPG_KEY}')
- -g, --gpg-git-key GPG key used to sign the merge commit and release tag,
- leave empty to let Git choose your default key
- (default: '${GPG_GIT_KEY}')
- -o, --output-dir Output directory where to build the release
- (default: '${OUTPUT_DIR}')
- --develop-branch Development branch to merge from (default: 'release/VERSION')
- --release-branch Target release branch to merge to (default: '${RELEASE_BRANCH}')
- -t, --tag-name Override release tag name (defaults to version number)
- -b, --build Build sources after exporting release
- -d, --docker-image Use the specified Docker image to compile the application.
- The image must have all required build dependencies installed.
- This option has no effect if --build is not set.
- --container-name Docker container name (default: '${DOCKER_CONTAINER_NAME}')
- The container must not exist already
- -c, --cmake-options Additional CMake options for compiling the sources
- --compiler Compiler to use (default: '${COMPILER}')
- -m, --make-options Make options for compiling sources (default: '${MAKE_OPTIONS}')
- -i, --install-prefix Install prefix (default: '${INSTALL_PREFIX}')
- -p, --plugins Space-separated list of plugins to build
- (default: ${BUILD_PLUGINS})
- -h, --help Show this help
-
-EOF
-}
-
-logInfo() {
- echo -e "\e[1m[ \e[34mINFO\e[39m ]\e[0m $1"
-}
-
-logError() {
- echo -e "\e[1m[ \e[31mERROR\e[39m ]\e[0m $1" >&2
-}
-
-exitError() {
- logError "$1"
- if [ "" != "$ORIG_BRANCH" ]; then
- git checkout "$ORIG_BRANCH" > /dev/null 2>&1
- fi
- cd "$ORIG_CWD"
- exit 1
-}
-
-
-# parse command line options
-while [ $# -ge 1 ]; do
- arg="$1"
-
- case "$arg" in
- -a|--app-name)
- APP_NAME="$2"
- shift ;;
-
- -s|--source-dir)
- SRC_DIR"$2"
- shift ;;
-
- -v|--version)
- RELEASE_NAME="$2"
- shift ;;
-
- -k|--gpg-key)
- GPG_KEY="$2"
- shift ;;
-
- -g|--gpg-git-key)
- GPG_GIT_KEY="$2"
- shift ;;
-
- -o|--output-dir)
- OUTPUT_DIR="$2"
- shift ;;
-
- --develop-branch)
- BRANCH="$2"
- shift ;;
-
- --release-branch)
- RELEASE_BRANCH="$2"
- shift ;;
-
- -t|--tag-name)
- TAG_NAME="$2"
- shift ;;
-
- -b|--build)
- BUILD_SOURCES=true ;;
-
- -d|--docker-image)
- DOCKER_IMAGE="$2"
- shift ;;
-
- --container-name)
- DOCKER_CONTAINER_NAME="$2"
- shift ;;
-
- -c|--cmake-options)
- CMAKE_OPTIONS="$2"
- shift ;;
-
- -m|--make-options)
- MAKE_OPTIONS="$2"
- shift ;;
-
- --compiler)
- COMPILER="$2"
- shift ;;
-
- -p|--plugins)
- BUILD_PLUGINS="$2"
- shift ;;
-
- -h|--help)
- printUsage
- exit ;;
-
- *)
- logError "Unknown option '$arg'\n"
- printUsage
- exit 1 ;;
- esac
- shift
-done
-
-
-if [ "" == "$RELEASE_NAME" ]; then
- logError "Missing arguments, --version is required!\n"
- printUsage
- exit 1
-fi
-
-if [ "" == "$TAG_NAME" ]; then
- TAG_NAME="$RELEASE_NAME"
-fi
-if [ "" == "$BRANCH" ]; then
- BRANCH="release/${RELEASE_NAME}"
-fi
-APP_NAME_LOWER="$(echo "$APP_NAME" | tr '[:upper:]' '[:lower:]')"
-APP_NAME_UPPER="$(echo "$APP_NAME" | tr '[:lower:]' '[:upper:]')"
-
-SRC_DIR="$(realpath "$SRC_DIR")"
-OUTPUT_DIR="$(realpath "$OUTPUT_DIR")"
-if [ ! -d "$SRC_DIR" ]; then
- exitError "Source directory '${SRC_DIR}' does not exist!"
-fi
-
-logInfo "Changing to source directory..."
-cd "${SRC_DIR}"
-
-logInfo "Performing basic checks..."
-
-if [ -e "$OUTPUT_DIR" ]; then
- exitError "Output directory '$OUTPUT_DIR' already exists. Please choose a different location!"
-fi
-
-if [ ! -d .git ] || [ ! -f CHANGELOG ]; then
- exitError "Source directory is not a valid Git repository!"
-fi
-
-git tag | grep -q "$RELEASE_NAME"
-if [ $? -eq 0 ]; then
- exitError "Release '$RELEASE_NAME' already exists!"
-fi
-
-git diff-index --quiet HEAD --
-if [ $? -ne 0 ]; then
- exitError "Current working tree is not clean! Please commit or unstage any changes."
-fi
-
-git checkout "$BRANCH" > /dev/null 2>&1
-if [ $? -ne 0 ]; then
- exitError "Source branch '$BRANCH' does not exist!"
-fi
-
-grep -q "${APP_NAME_UPPER}_VERSION \"${RELEASE_NAME}\"" CMakeLists.txt
-if [ $? -ne 0 ]; then
- exitError "${APP_NAME_UPPER}_VERSION version not updated to '${RELEASE_NAME}' in CMakeLists.txt!"
-fi
-
-grep -q "${APP_NAME_UPPER}_VERSION_NUM \"${RELEASE_NAME}\"" CMakeLists.txt
-if [ $? -ne 0 ]; then
- exitError "${APP_NAME_UPPER}_VERSION_NUM version not updated to '${RELEASE_NAME}' in CMakeLists.txt!"
-fi
-
-if [ ! -f CHANGELOG ]; then
- exitError "No CHANGELOG file found!"
-fi
-
-grep -qPzo "${RELEASE_NAME} \(\d{4}-\d{2}-\d{2}\)\n=+\n" CHANGELOG
-if [ $? -ne 0 ]; then
- exitError "CHANGELOG does not contain any information about the '${RELEASE_NAME}' release!"
-fi
-
-git checkout "$RELEASE_BRANCH" > /dev/null 2>&1
-if [ $? -ne 0 ]; then
- exitError "Release branch '$RELEASE_BRANCH' does not exist!"
-fi
-
-logInfo "All checks pass, getting our hands dirty now!"
-
-logInfo "Merging '${BRANCH}' into '${RELEASE_BRANCH}'..."
-
-CHANGELOG=$(grep -Pzo "(?<=${RELEASE_NAME} \(\d{4}-\d{2}-\d{2}\)\n)=+\n\n(?:.|\n)+?\n(?=\n)" \
- CHANGELOG | grep -Pzo '(?<=\n\n)(.|\n)+' | tr -d \\0)
-COMMIT_MSG="Release ${RELEASE_NAME}"
-
-git merge "$BRANCH" --no-ff -m "$COMMIT_MSG" -m "${CHANGELOG}" "$BRANCH" -S"$GPG_GIT_KEY"
-
-logInfo "Creating tag '${RELEASE_NAME}'..."
-if [ "" == "$GPG_GIT_KEY" ]; then
- git tag -a "$RELEASE_NAME" -m "$COMMIT_MSG" -m "${CHANGELOG}" -s
-else
- git tag -a "$RELEASE_NAME" -m "$COMMIT_MSG" -m "${CHANGELOG}" -s -u "$GPG_GIT_KEY"
-fi
-
-logInfo "Merge done, creating target directory..."
-mkdir -p "$OUTPUT_DIR"
-
-if [ $? -ne 0 ]; then
- exitError "Failed to create output directory!"
-fi
-
-logInfo "Creating source tarball..."
-TARBALL_NAME="${APP_NAME_LOWER}-${RELEASE_NAME}-src.tar.bz2"
-git archive --format=tar "$RELEASE_BRANCH" --prefix="${APP_NAME_LOWER}-${RELEASE_NAME}/" \
- | bzip2 -9 > "${OUTPUT_DIR}/${TARBALL_NAME}"
-
-
-if $BUILD_SOURCES; then
- logInfo "Creating build directory..."
- mkdir -p "${OUTPUT_DIR}/build-release"
- mkdir -p "${OUTPUT_DIR}/bin-release"
- cd "${OUTPUT_DIR}/build-release"
-
- logInfo "Configuring sources..."
- for p in $BUILD_PLUGINS; do
- CMAKE_OPTIONS="${CMAKE_OPTIONS} -DWITH_XC_$(echo $p | tr '[:lower:]' '[:upper:]')=On"
- done
-
- if [ "$COMPILER" == "g++" ]; then
- export CC=gcc
- elif [ "$COMPILER" == "clang++" ]; then
- export CC=clang
- fi
- export CXX="$COMPILER"
-
- if [ "" == "$DOCKER_IMAGE" ]; then
- cmake -DCMAKE_BUILD_TYPE=Release -DWITH_TESTS=Off $CMAKE_OPTIONS \
- -DCMAKE_INSTALL_PREFIX="${INSTALL_PREFIX}" "$SRC_DIR"
-
- logInfo "Compiling sources..."
- make $MAKE_OPTIONS
-
- logInfo "Installing to bin dir..."
- make DESTDIR="${OUTPUT_DIR}/bin-release" install/strip
- else
- logInfo "Launching Docker container to compile sources..."
-
- docker run --name "$DOCKER_CONTAINER_NAME" --rm \
- -e "CC=${CC}" -e "CXX=${CXX}" \
- -v "$(realpath "$SRC_DIR"):/keepassxc/src:ro" \
- -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 \
- -DCMAKE_INSTALL_PREFIX=\"${INSTALL_PREFIX}\" /keepassxc/src && \
- make $MAKE_OPTIONS && make DESTDIR=/keepassxc/out/bin-release install/strip"
-
- logInfo "Build finished, Docker container terminated."
- fi
-
- logInfo "Creating AppImage..."
- ${SRC_DIR}/AppImage-Recipe.sh "$APP_NAME" "$RELEASE_NAME"
-
- cd ..
- logInfo "Signing source tarball..."
- gpg --output "${TARBALL_NAME}.sig" --armor --local-user "$GPG_KEY" --detach-sig "$TARBALL_NAME"
-
- logInfo "Signing AppImage..."
- APPIMAGE_NAME="${APP_NAME}-${RELEASE_NAME}-x86_64.AppImage"
- gpg --output "${APPIMAGE_NAME}.sig" --armor --local-user "$GPG_KEY" --detach-sig "$APPIMAGE_NAME"
-
- logInfo "Creating digests..."
- sha256sum "$TARBALL_NAME" > "${TARBALL_NAME}.DIGEST"
- sha256sum "$APPIMAGE_NAME" > "${APPIMAGE_NAME}.DIGEST"
-fi
-
-logInfo "Leaving source directory..."
-cd "$ORIG_CWD"
-git checkout "$ORIG_BRANCH" > /dev/null 2>&1
-
-logInfo "All done!"
-logInfo "Please merge the release branch back into the develop branch now and then push your changes."
-logInfo "Don't forget to also push the tags using \e[1mgit push --tags\e[0m."
diff --git a/release-tool b/release-tool
new file mode 100755
index 000000000..7bc54cda0
--- /dev/null
+++ b/release-tool
@@ -0,0 +1,682 @@
+#!/usr/bin/env bash
+#
+# KeePassXC Release Preparation Helper
+# Copyright (C) 2017 KeePassXC team
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 2 or (at your option)
+# version 3 of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+
+echo -e "\e[1m\e[32mKeePassXC\e[0m Release Preparation Helper"
+echo -e "Copyright (C) 2017 KeePassXC Team \n"
+
+
+# -----------------------------------------------------------------------
+# global default values
+# -----------------------------------------------------------------------
+RELEASE_NAME=""
+APP_NAME="KeePassXC"
+SRC_DIR="."
+GPG_KEY="CFB4C2166397D0D2"
+GPG_GIT_KEY=""
+OUTPUT_DIR="release"
+SOURCE_BRANCH=""
+TARGET_BRANCH="master"
+TAG_NAME=""
+DOCKER_IMAGE=""
+DOCKER_CONTAINER_NAME="keepassxc-build-container"
+CMAKE_OPTIONS=""
+COMPILER="g++"
+MAKE_OPTIONS="-j8"
+BUILD_PLUGINS="autotype"
+INSTALL_PREFIX="/usr/local"
+BUILD_SOURCE_TARBALL=true
+ORIG_BRANCH=""
+ORIG_CWD="$(pwd)"
+
+# -----------------------------------------------------------------------
+# helper functions
+# -----------------------------------------------------------------------
+printUsage() {
+ local cmd
+ if [ "" == "$1" ] || [ "help" == "$1" ]; then
+ cmd="COMMAND"
+ elif [ "merge" == "$1" ] || [ "build" == "$1" ] || [ "sign" == "$1" ]; then
+ cmd="$1"
+ else
+ logError "Unknown command: '$1'\n"
+ cmd="COMMAND"
+ fi
+
+ echo -e "\e[1mUsage:\e[0m $(basename $0) $cmd [options]"
+
+ if [ "COMMAND" == "$cmd" ]; then
+ cat << EOF
+
+Commands:
+ merge Merge release branch into main branch and create release tags
+ build Build and package binary release from sources
+ sign Sign previously compiled release packages
+ help Show help for the given command
+EOF
+ elif [ "merge" == "$cmd" ]; then
+ cat << EOF
+
+Merge release branch into main branch and create release tags
+
+Options:
+ -v, --version Release version number or name (required)
+ -a, --app-name Application name (default: '${APP_NAME}')
+ -s, --source-dir Source directory (default: '${SRC_DIR}')
+ -g, --gpg-key GPG key used to sign the merge commit and release tag,
+ leave empty to let Git choose your default key
+ (default: '${GPG_GIT_KEY}')
+ -r, --release-branch Source release branch to merge from (default: 'release/VERSION')
+ --target-branch Target branch to merge to (default: '${TARGET_BRANCH}')
+ -t, --tag-name Override release tag name (defaults to version number)
+ -h, --help Show this help
+EOF
+ elif [ "build" == "$cmd" ]; then
+ cat << EOF
+
+Build and package binary release from sources
+
+Options:
+ -v, --version Release version number or name (required)
+ -a, --app-name Application name (default: '${APP_NAME}')
+ -s, --source-dir Source directory (default: '${SRC_DIR}')
+ -o, --output-dir Output directory where to build the release
+ (default: '${OUTPUT_DIR}')
+ -t, --tag-name Release tag to check out (defaults to version number)
+ -b, --build Build sources after exporting release
+ -d, --docker-image Use the specified Docker image to compile the application.
+ The image must have all required build dependencies installed.
+ This option has no effect if --build is not set.
+ --container-name Docker container name (default: '${DOCKER_CONTAINER_NAME}')
+ The container must not exist already
+ -c, --cmake-options Additional CMake options for compiling the sources
+ --compiler Compiler to use (default: '${COMPILER}')
+ -m, --make-options Make options for compiling sources (default: '${MAKE_OPTIONS}')
+ -i, --install-prefix Install prefix (default: '${INSTALL_PREFIX}')
+ -p, --plugins Space-separated list of plugins to build
+ (default: ${BUILD_PLUGINS})
+ -n, --no-source-tarball Don't build source tarball
+ -h, --help Show this help
+EOF
+ elif [ "sign" == "$cmd" ]; then
+ cat << EOF
+
+Sign previously compiled release packages
+
+Options:
+ -f, --files Files to sign (required)
+ -g, --gpg-key GPG key used to sign the files (default: '${GPG_KEY}')
+ -h, --help Show this help
+EOF
+ fi
+}
+
+logInfo() {
+ echo -e "\e[1m[ \e[34mINFO\e[39m ]\e[0m $1"
+}
+
+logError() {
+ echo -e "\e[1m[ \e[31mERROR\e[39m ]\e[0m $1" >&2
+}
+
+init() {
+ ORIG_CWD="$(pwd)"
+ cd "$SRC_DIR" > /dev/null 2>&1
+ ORIG_BRANCH="$(git rev-parse --abbrev-ref HEAD 2> /dev/null)"
+ cd "$ORIG_CWD"
+}
+
+cleanup() {
+ logInfo "Checking out original branch..."
+ if [ "" != "$ORIG_BRANCH" ]; then
+ git checkout "$ORIG_BRANCH" > /dev/null 2>&1
+ fi
+ logInfo "Leaving source directory..."
+ cd "$ORIG_CWD"
+}
+
+exitError() {
+ logError "$1"
+ cleanup
+ exit 1
+}
+
+exitTrap() {
+ exitError "Existing upon user request..."
+}
+
+checkSourceDirExists() {
+ if [ ! -d "$SRC_DIR" ]; then
+ exitError "Source directory '${SRC_DIR}' does not exist!"
+ fi
+}
+
+checkOutputDirDoesNotExist() {
+ if [ -e "$OUTPUT_DIR" ]; then
+ exitError "Output directory '$OUTPUT_DIR' already exists. Please choose a different location!"
+ fi
+}
+
+checkGitRepository() {
+ if [ ! -d .git ] || [ ! -f CHANGELOG ]; then
+ exitError "Source directory is not a valid Git repository!"
+ fi
+}
+
+checkTagExists() {
+ git tag | grep -q "$TAG_NAME"
+ if [ $? -ne 0 ]; then
+ exitError "Tag '${TAG_NAME}' does not exist!"
+ fi
+}
+
+checkReleaseDoesNotExist() {
+ git tag | grep -q "$TAG_NAME"
+ if [ $? -eq 0 ]; then
+ exitError "Release '$RELEASE_NAME' (tag: '$TAG_NAME') already exists!"
+ fi
+}
+
+checkWorkingTreeClean() {
+ git diff-index --quiet HEAD --
+ if [ $? -ne 0 ]; then
+ exitError "Current working tree is not clean! Please commit or unstage any changes."
+ fi
+}
+
+checkSourceBranchExists() {
+ git rev-parse "$SOURCE_BRANCH" > /dev/null 2>&1
+ if [ $? -ne 0 ]; then
+ exitError "Source branch '$SOURCE_BRANCH' does not exist!"
+ fi
+}
+
+checkTargetBranchExists() {
+ git rev-parse "$TARGET_BRANCH" > /dev/null 2>&1
+ if [ $? -ne 0 ]; then
+ exitError "Target branch '$TARGET_BRANCH' does not exist!"
+ fi
+}
+
+checkVersionInCMake() {
+ local app_name_upper="$(echo "$APP_NAME" | tr '[:lower:]' '[:upper:]')"
+
+ grep -q "${app_name_upper}_VERSION \"${RELEASE_NAME}\"" CMakeLists.txt
+ if [ $? -ne 0 ]; then
+ exitError "${app_name_upper}_VERSION version not updated to '${RELEASE_NAME}' in CMakeLists.txt!"
+ fi
+
+ grep -q "${app_name_upper}_VERSION_NUM \"${RELEASE_NAME}\"" CMakeLists.txt
+ if [ $? -ne 0 ]; then
+ exitError "${app_name_upper}_VERSION_NUM version not updated to '${RELEASE_NAME}' in CMakeLists.txt!"
+ fi
+}
+
+checkChangeLog() {
+ if [ ! -f CHANGELOG ]; then
+ exitError "No CHANGELOG file found!"
+ fi
+
+ grep -qPzo "${RELEASE_NAME} \(\d{4}-\d{2}-\d{2}\)\n=+\n" CHANGELOG
+ if [ $? -ne 0 ]; then
+ exitError "CHANGELOG does not contain any information about the '${RELEASE_NAME}' release!"
+ fi
+}
+
+checkTransifexCommandExists() {
+ command -v tx > /dev/null
+ if [ 0 -ne $? ]; then
+ exitError "Transifex tool 'tx' not installed! Please install it using 'pip install transifex-client'"
+ fi
+}
+
+# re-implement realpath for OS X (thanks mschrag)
+# https://superuser.com/questions/205127/
+if $(command -v realpath > /dev/null); then
+ realpath() {
+ pushd . > /dev/null
+ if [ -d "$1" ]; then
+ cd "$1"
+ dirs -l +0
+ else
+ cd "$(dirname "$1")"
+ cur_dir=$(dirs -l +0)
+
+ if [ "$cur_dir" == "/" ]; then
+ echo "$cur_dir$(basename "$1")"
+ else
+ echo "$cur_dir/$(basename "$1")"
+ fi
+ fi
+ popd > /dev/null
+ }
+fi
+
+
+trap exitTrap SIGINT SIGTERM
+
+
+# -----------------------------------------------------------------------
+# merge command
+# -----------------------------------------------------------------------
+merge() {
+ while [ $# -ge 1 ]; do
+ local arg="$1"
+ case "$arg" in
+ -v|--version)
+ RELEASE_NAME="$2"
+ shift ;;
+
+ -a|--app-name)
+ APP_NAME="$2"
+ shift ;;
+
+ -s|--source-dir)
+ SRC_DIR="$2"
+ shift ;;
+
+ -g|--gpg-key)
+ GPG_GIT_KEY="$2"
+ shift ;;
+
+ -r|--release-branch)
+ SOURCE_BRANCH="$2"
+ shift ;;
+
+ --target-branch)
+ TARGET_BRANCH="$2"
+ shift ;;
+
+ -t|--tag-name)
+ TAG_NAME="$2"
+ shift ;;
+
+ -h|--help)
+ printUsage "merge"
+ exit ;;
+
+ *)
+ logError "Unknown option '$arg'\n"
+ printUsage "merge"
+ exit 1 ;;
+ esac
+ shift
+ done
+
+ if [ "" == "$RELEASE_NAME" ]; then
+ logError "Missing arguments, --version is required!\n"
+ printUsage "merge"
+ exit 1
+ fi
+
+ if [ "" == "$TAG_NAME" ]; then
+ TAG_NAME="$RELEASE_NAME"
+ fi
+
+ if [ "" == "$SOURCE_BRANCH" ]; then
+ SOURCE_BRANCH="release/${RELEASE_NAME}"
+ fi
+
+ init
+
+ SRC_DIR="$(realpath "$SRC_DIR")"
+
+ logInfo "Performing basic checks..."
+
+ checkSourceDirExists
+
+ logInfo "Changing to source directory..."
+ cd "${SRC_DIR}"
+
+ checkTransifexCommandExists
+ checkGitRepository
+ checkReleaseDoesNotExist
+ checkWorkingTreeClean
+ checkSourceBranchExists
+ checkTargetBranchExists
+ checkVersionInCMake
+ checkChangeLog
+
+ logInfo "All checks pass, getting our hands dirty now!"
+
+ logInfo "Checking out source branch..."
+ git checkout "$SOURCE_BRANCH"
+
+ logInfo "Updating language files..."
+ ./share/translations/update.sh
+ if [ 0 -ne $? ]; then
+ exitError "Updating translations failed!"
+ fi
+ git diff-index --quiet HEAD --
+ if [ $? -ne 0 ]; then
+ git add ./share/translations/*
+ logInfo "Committing changes..."
+ if [ "" == "$GPG_GIT_KEY" ]; then
+ git commit -m "Update translations"
+ else
+ git commit -m "Update translations" -S"$GPG_GIT_KEY"
+ fi
+ fi
+
+ logInfo "Checking out target branch '${TARGET_BRANCH}'..."
+ git checkout "$TARGET_BRANCH"
+
+ logInfo "Merging '${SOURCE_BRANCH}' into '${TARGET_BRANCH}'..."
+
+ CHANGELOG=$(grep -Pzo "(?<=${RELEASE_NAME} \(\d{4}-\d{2}-\d{2}\)\n)=+\n\n?(?:.|\n)+?\n(?=\n)" \
+ CHANGELOG | grep -Pzo '(?<=\n\n)(.|\n)+' | tr -d \\0)
+ COMMIT_MSG="Release ${RELEASE_NAME}"
+
+ git merge "$SOURCE_BRANCH" --no-ff -m "$COMMIT_MSG" -m "${CHANGELOG}" "$SOURCE_BRANCH" -S"$GPG_GIT_KEY"
+
+ logInfo "Creating tag '${TAG_NAME}'..."
+ if [ "" == "$GPG_GIT_KEY" ]; then
+ git tag -a "$TAG_NAME" -m "$COMMIT_MSG" -m "${CHANGELOG}" -s
+ else
+ git tag -a "$TAG_NAME" -m "$COMMIT_MSG" -m "${CHANGELOG}" -s -u "$GPG_GIT_KEY"
+ fi
+
+ cleanup
+
+ logInfo "All done!"
+ logInfo "Please merge the release branch back into the develop branch now and then push your changes."
+ logInfo "Don't forget to also push the tags using \e[1mgit push --tags\e[0m."
+}
+
+# -----------------------------------------------------------------------
+# build command
+# -----------------------------------------------------------------------
+build() {
+ while [ $# -ge 1 ]; do
+ local arg="$1"
+ case "$arg" in
+ -v|--version)
+ RELEASE_NAME="$2"
+ shift ;;
+
+ -a|--app-name)
+ APP_NAME="$2"
+ shift ;;
+
+ -s|--source-dir)
+ SRC_DIR="$2"
+ shift ;;
+
+ -o|--output-dir)
+ OUTPUT_DIR="$2"
+ shift ;;
+
+ -t|--tag-name)
+ TAG_NAME="$2"
+ shift ;;
+
+ -d|--docker-image)
+ DOCKER_IMAGE="$2"
+ shift ;;
+
+ --container-name)
+ DOCKER_CONTAINER_NAME="$2"
+ shift ;;
+
+ -c|--cmake-options)
+ CMAKE_OPTIONS="$2"
+ shift ;;
+
+ --compiler)
+ COMPILER="$2"
+ shift ;;
+
+ -m|--make-options)
+ MAKE_OPTIONS="$2"
+ shift ;;
+
+ -i|--install-prefix)
+ INSTALL_PREFIX="$2"
+ shift ;;
+
+ -p|--plugins)
+ BUILD_PLUGINS="$2"
+ shift ;;
+
+ -n|--no-source-tarball)
+ BUILD_SOURCE_TARBALL=false ;;
+
+ -h|--help)
+ printUsage "build"
+ exit ;;
+
+ *)
+ logError "Unknown option '$arg'\n"
+ printUsage "build"
+ exit 1 ;;
+ esac
+ shift
+ done
+
+ if [ "" == "$RELEASE_NAME" ]; then
+ logError "Missing arguments, --version is required!\n"
+ printUsage "build"
+ exit 1
+ fi
+
+ if [ "" == "$TAG_NAME" ]; then
+ TAG_NAME="$RELEASE_NAME"
+ fi
+
+ init
+
+ SRC_DIR="$(realpath "$SRC_DIR")"
+ OUTPUT_DIR="$(realpath "$OUTPUT_DIR")"
+
+ logInfo "Performing basic checks..."
+
+ checkSourceDirExists
+
+ logInfo "Changing to source directory..."
+ cd "${SRC_DIR}"
+
+ checkTagExists
+ checkGitRepository
+ checkWorkingTreeClean
+ checkOutputDirDoesNotExist
+
+ logInfo "All checks pass, getting our hands dirty now!"
+
+ logInfo "Checking out release tag '${TAG_NAME}'..."
+ git checkout "$TAG_NAME"
+
+ logInfo "Creating output directory..."
+ mkdir -p "$OUTPUT_DIR"
+
+ if [ $? -ne 0 ]; then
+ exitError "Failed to create output directory!"
+ fi
+
+ if $BUILD_SOURCE_TARBALL; then
+ logInfo "Creating source tarball..."
+ local app_name_lower="$(echo "$APP_NAME" | tr '[:upper:]' '[:lower:]')"
+ TARBALL_NAME="${app_name_lower}-${RELEASE_NAME}-src.tar.xz"
+ git archive --format=tar "$TAG_NAME" --prefix="${app_name_lower}-${RELEASE_NAME}/" \
+ | xz -6 > "${OUTPUT_DIR}/${TARBALL_NAME}"
+ fi
+
+ logInfo "Creating build directory..."
+ mkdir -p "${OUTPUT_DIR}/build-release"
+ cd "${OUTPUT_DIR}/build-release"
+
+ logInfo "Configuring sources..."
+ for p in $BUILD_PLUGINS; do
+ CMAKE_OPTIONS="${CMAKE_OPTIONS} -DWITH_XC_$(echo $p | tr '[:lower:]' '[:upper:]')=On"
+ done
+
+ if [ "$COMPILER" == "g++" ]; then
+ export CC=gcc
+ elif [ "$COMPILER" == "clang++" ]; then
+ export CC=clang
+ fi
+ export CXX="$COMPILER"
+
+ if [ "" == "$DOCKER_IMAGE" ]; then
+ if [ "$(uname -s)" == "Darwin" ]; then
+ # Building on OS X
+ local qt_vers="$(ls /usr/local/Cellar/qt5 2> /dev/null | sort -r | head -n1)"
+ if [ "" == "$qt_vers" ]; then
+ exitError "Couldn't find Qt5! Please make sure it is available in '/usr/local/Cellar/qt5'."
+ fi
+ export MACOSX_DEPLOYMENT_TARGET=10.7
+
+ logInfo "Configuring build..."
+ cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="${INSTALL_PREFIX}" \
+ -DCMAKE_OSX_ARCHITECTURES=x86_64 -DWITH_CXX11=OFF \
+ -DCMAKE_PREFIX_PATH="/usr/local/Cellar/qt5/${qt_vers}/lib/cmake" \
+ -DQT_BINARY_DIR="/usr/local/Cellar/qt5/${qt_vers}/bin" $CMAKE_OPTIONS "$SRC_DIR"
+
+ logInfo "Compiling and packaging sources..."
+ make $MAKE_OPTIONS package
+
+ mv "./${APP_NAME}-${RELEASE_NAME}.dmg" ../
+ elif [ "$(uname -o)" == "Msys" ]; then
+ # Building on Windows with Msys
+ logInfo "Configuring build..."
+ cmake -DCMAKE_BUILD_TYPE=Release -DWITH_TESTS=Off -G"MSYS Makefiles" \
+ -DCMAKE_INSTALL_PREFIX="${INSTALL_PREFIX}" $CMAKE_OPTIONS "$SRC_DIR"
+
+ logInfo "Compiling and packaging sources..."
+ make $MAKE_OPTIONS package
+
+ mv "./${APP_NAME}-${RELEASE_NAME}-"*.{exe,zip} ../
+ else
+ mkdir -p "${OUTPUT_DIR}/bin-release"
+
+ # Building on Linux without Docker container
+ logInfo "Configuring build..."
+ cmake -DCMAKE_BUILD_TYPE=Release -DWITH_TESTS=Off $CMAKE_OPTIONS \
+ -DCMAKE_INSTALL_PREFIX="${INSTALL_PREFIX}" "$SRC_DIR"
+
+ logInfo "Compiling sources..."
+ make $MAKE_OPTIONS
+
+ logInfo "Installing to bin dir..."
+ make DESTDIR="${OUTPUT_DIR}/bin-release" install/strip
+
+ logInfo "Creating AppImage..."
+ ${SRC_DIR}/AppImage-Recipe.sh "$APP_NAME" "$RELEASE_NAME"
+ fi
+ else
+ mkdir -p "${OUTPUT_DIR}/bin-release"
+
+ logInfo "Launching Docker container to compile sources..."
+
+ docker run --name "$DOCKER_CONTAINER_NAME" --rm \
+ --cap-add SYS_ADMIN --device /dev/fuse \
+ -e "CC=${CC}" -e "CXX=${CXX}" \
+ -v "$(realpath "$SRC_DIR"):/keepassxc/src:ro" \
+ -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 \
+ -DCMAKE_INSTALL_PREFIX=\"${INSTALL_PREFIX}\" /keepassxc/src && \
+ make $MAKE_OPTIONS && make DESTDIR=/keepassxc/out/bin-release install/strip && \
+ /keepassxc/src/AppImage-Recipe.sh "$APP_NAME" "$RELEASE_NAME""
+
+ if [ 0 -ne $? ]; then
+ exitError "Docker build failed!"
+ fi
+
+ logInfo "Build finished, Docker container terminated."
+ fi
+
+ cleanup
+
+ logInfo "All done!"
+}
+
+
+# -----------------------------------------------------------------------
+# sign command
+# -----------------------------------------------------------------------
+sign() {
+ SIGN_FILES=()
+
+ while [ $# -ge 1 ]; do
+ local arg="$1"
+ case "$arg" in
+ -f|--files)
+ while [ "${2:0:1}" != "-" ] && [ $# -ge 2 ]; do
+ SIGN_FILES+=("$2")
+ shift
+ done ;;
+
+ -g|--gpg-key)
+ GPG_KEY="$2"
+ shift ;;
+
+ -h|--help)
+ printUsage "sign"
+ exit ;;
+
+ *)
+ logError "Unknown option '$arg'\n"
+ printUsage "sign"
+ exit 1 ;;
+ esac
+ shift
+ done
+
+ if [ -z "$SIGN_FILES" ]; then
+ logError "Missing arguments, --files is required!\n"
+ printUsage "sign"
+ exit 1
+ fi
+
+ for f in "${SIGN_FILES[@]}"; do
+ if [ ! -f "$f" ]; then
+ exitError "File '${f}' does not exist!"
+ fi
+
+ logInfo "Signing file '${f}'..."
+ gpg --output "${f}.sig" --armor --local-user "$GPG_KEY" --detach-sig "$f"
+
+ if [ 0 -ne $? ]; then
+ exitError "Signing failed!"
+ fi
+
+ logInfo "Creating digest for file '${f}'..."
+ sha256sum "$f" > "${f}.DIGEST"
+ done
+
+ logInfo "All done!"
+}
+
+
+# -----------------------------------------------------------------------
+# parse global command line
+# -----------------------------------------------------------------------
+MODE="$1"
+shift
+if [ "" == "$MODE" ]; then
+ logError "Missing arguments!\n"
+ printUsage
+ exit 1
+elif [ "help" == "$MODE" ]; then
+ printUsage "$1"
+ exit
+elif [ "merge" == "$MODE" ] || [ "build" == "$MODE" ] || [ "sign" == "$MODE" ]; then
+ $MODE "$@"
+else
+ printUsage "$MODE"
+fi
diff --git a/share/translations/keepassx_cs.ts b/share/translations/keepassx_cs.ts
index 3a85ff723..b0e4ca8f9 100644
--- a/share/translations/keepassx_cs.ts
+++ b/share/translations/keepassx_cs.ts
@@ -1,14 +1,6 @@
-
+AboutDialog
-
-
- O KeePassX
-
-
-
- KeePassX je šířeno za podmínek licence GNU General Public License (GPL) verze 2 a (případně) 3.
- Revize
@@ -17,17 +9,56 @@
S použitím:
+
+
+ O aplikaci KeePassXC
+
+
+
+ KeePassXC je šířeno pod GNU obecnou veřejnou licencí (GPL) verze 2 a (případně) 3.
+
+
+
+ Rozšíření:
+
+
+
+
+ AccessControlDialog
+
+
+ Zapamatovat si toto rozhodnutí
+
+
+
+ Povolit
+
+
+
+ Zamítnout
+
+
+
+ %1 si vyžádalo přístup k heslům u následujících položek.
+Umožnit přístup? ()
+
+
+
+ Potvrzení přístupu KeePassXC HTTP
+ AutoType
-
-
- Automatické vyplňování – KeePassX
- Nedaří se nalézt položku, která by se shodovala s titulkem okna:
+
+
+ Automatické vyplňování – KeePassXC
+ AutoTypeAssociationsModel
@@ -46,14 +77,14 @@
AutoTypeSelectDialog
-
-
- Automatické vyplňování – KeePassX
- Vyberte položku, kterou se bude automaticky vyplňovat:
+
+
+ Automatické vyplňování – KeePassXC
+ ChangeMasterKeyWidget
@@ -319,16 +350,6 @@ Uložit změny?
zamčeno
-
-
- Pro databázi, kterou se pokoušíte otevřít, existuje zámek úprav (stejnojmenný
-.lock soubor). To znamená, že je nejspíš už otevřená v jiném okně KeePassX
-(v případě sdíleného úložiště, třeba i na jiném počítači). Pokud tomu tak není,
-je zámek nejspíš pozůstatkem předchozího neočekávaného ukončení aplikace
-a je možné ho smazat. V každém případě, dotčenou databázi je možné otevřít
- i tak, ale pouze pro čtení. Chcete?
- Uzamknout databázi
@@ -372,14 +393,24 @@ Přesto zavřít a zahodit změny?
Zápis do CSV souboru se nezdařil.
-
- Databáze, kterou se pokoušíte uložit, je uzamčena jinou instancí KeePassX.
-Přesto uložit?
+
+ Nepodařilo se otevřít databázi.
-
-
+
+ Databáze kterou se pokoušíte otevřít je právě používaná jinou instancí KeePassXC.
+Chcete ji přesto otevřít? Případně je možné databázi otevřít pouze pro čtení.
+
+
+
+ Sloučit databáze
+
+
+
+ Databáze kterou se pokoušíte uložit je právě používaná jinou instancí KeePassXC.
+Chcete ji přesto uložit?
@@ -420,10 +451,6 @@ Přesto uložit?
Opravdu chcete nenávratně smazat skupinu „%1“?
-
-
- Stávající skupina
- Chyba
@@ -434,11 +461,71 @@ Přesto uložit?
-
+ Přesunout položku do koše?
-
+ Opravdu si přejete přesunout položku "%1" do koše?
+
+
+
+ Hledání…
+
+
+
+ Aktuálně žádná databáze.
+
+
+
+ Není zvolena zdrojová databáze, není co dělat.
+
+
+
+ Výsledky vyhledávání (%1)
+
+
+
+ Žádné výsledky
+
+
+
+ Spustit příkaz?
+
+
+
+ Opravdu chcete spustit následující příkaz?<br><br>%1<br>
+
+
+
+ Zapamatovat si pro příště
+
+
+
+ Požadavek na automatické opětovné načtení
+
+
+
+ Soubor s databází byl změněn. Přejete si načíst změny?
+
+
+
+ Požadavek na sloučení
+
+
+
+ Soubor s databází byl mezitím změněn a vaše změny nejsou uložené. Přejete si vaše změny sloučit?
+
+
+
+ Automatické opětovné načtení se nezdařilo
+
+
+
+ Nepodařilo se zpracovat nebo odemknout nový soubor s databází během pokusu o její opětovné načtení.
+
+
+
+ Nepodařilo se otevřít nový soubor s databází během pokusu o její opětovné načtení.
@@ -629,10 +716,6 @@ Přesto uložit?
Zopakování hesla:
-
-
- Tvoř
- URL adresa:
@@ -750,17 +833,25 @@ Přesto uložit?
Ikonu nelze smazat!
-
-
- Ikonu není možné smazat. Je používána %n položkou.Ikonu není možné smazat. Je používána %n položkami.Ikonu není možné smazat. Ještě jí používá %n položek.
-
-
+ Chyba
-
-
+
+ Stáhnout favicon
+
+
+
+ Favicon se nepodařilo stáhnout.
+
+
+
+ Nepodařilo se načíst ikonu
+
+
+
+ Ikonu nelze smazat. Ještě ji používá %1 položek.
@@ -782,6 +873,13 @@ Přesto uložit?
Univerzálně jedinečný identifikátor:
+
+ Entry
+
+
+ - Klon
+
+EntryAttributesModel
@@ -834,6 +932,61 @@ Přesto uložit?
Koš
+
+ HttpPasswordGeneratorWidget
+
+
+ Délka:
+
+
+
+ Typy znaků
+
+
+
+ Velká písmena
+
+
+
+ A-Z
+
+
+
+ Malá písmena
+
+
+
+ a-z
+
+
+
+ Čísla
+
+
+
+ 0-9
+
+
+
+ Zvláštní znaky
+
+
+
+ /*_& ...
+
+
+
+ Vyloučit podobné znaky
+
+
+
+ Heslo musí obsahovat znak z každé skupiny
+
+
+
+ Přijmout
+
+KeePass1OpenWidget
@@ -877,7 +1030,7 @@ Přesto uložit?
-
+ Byl zadán chybný klíč, nebo je poškozen databázový soubor.
@@ -916,8 +1069,8 @@ Jedná se o jednosměrný převod. Databázi, vzniklou z importu, nepůjde otev
Při ověřování šifrovacích funkcí byl zjištěn fatální nedostatek.
-
- KeePassX – chyba
+
+ KeePassXC – chyba
@@ -926,102 +1079,14 @@ Jedná se o jednosměrný převod. Databázi, vzniklou z importu, nepůjde otev
Databáze
-
-
- Nedávno otevřené databáze
-
-
-
- Nápověda
-
-
-
- Položky
-
-
-
- Zkopírovat atribut do schránky
-
-
-
- Skupiny
-
-
-
- Zobrazit
-
-
-
- Ukončit aplikaci
-
-
-
- O aplikaci
- Otevřít databázi
-
-
- Uložit databázi
-
-
-
- Zavřít databázi
-
-
-
- Nová databáze
-
-
-
- Přidat novou položku
-
-
-
- Zobrazit/upravit položku
-
-
-
- Smazat položku
-
-
-
- Přidat novou skupinu
-
-
-
- Upravit skupinu
-
-
-
- Smazat skupinu
-
-
-
- Uložit databázi jako
-
-
-
- Změnit hlavní klíč
- Nastavení databáze
-
-
- Importovat databázi aplikace KeePass verze 1
-
-
-
- Klonovat položku
-
-
-
- Najít
- Zkopírovat uživatelské jméno do schránky
@@ -1034,30 +1099,6 @@ Jedná se o jednosměrný převod. Databázi, vzniklou z importu, nepůjde otev
Nastavení
-
-
- Provést automatické vyplnění
-
-
-
- Otevřít URL adresu
-
-
-
- Uzamknout databáze
-
-
-
- Titulek
-
-
-
- URL adresa
-
-
-
- Poznámky
- Zobrazit lištu nástrojů
@@ -1074,22 +1115,6 @@ Jedná se o jednosměrný převod. Databázi, vzniklou z importu, nepůjde otev
Nástroje
-
-
- Zkopírovat uživatelské jméno
-
-
-
- Zkopírovat heslo
-
-
-
- Exportovat do CSV souboru
-
-
-
- Opravit databázi
- Databáze ve formátu KeePass 2
@@ -1110,6 +1135,265 @@ Jedná se o jednosměrný převod. Databázi, vzniklou z importu, nepůjde otev
Zápis do databáze se nezdařil.
+
+
+ Nedávno otevřené databáze
+
+
+
+ Nápověda
+
+
+
+ Položky
+
+
+
+ Zkopí&rovat atribut do schránky
+
+
+
+ Skupniny
+
+
+
+ Zobrazit
+
+
+
+ Ukončit
+
+
+
+ O &aplikaci
+
+
+
+ &Otevřít databázi
+
+
+
+ Uložit databázi
+
+
+
+ Zavřít databázi
+
+
+
+ &Nová databáze
+
+
+
+ Sloučit s databází KeePassX
+
+
+
+ Přid&at novou položku
+
+
+
+ Zobrazit/Upra&vit položku
+
+
+
+ Smazat položku
+
+
+
+ Přid&at novou skupinu
+
+
+
+ Upravit skupinu
+
+
+
+ Smazat skupinu
+
+
+
+ Uložit databázi jako
+
+
+
+ Z&měnit hlavní klíč
+
+
+
+ Nastavení &databáze
+
+
+
+ &Importovat databázi ve formátu KeePass 1
+
+
+
+ Klonovat položku
+
+
+
+ Najít
+
+
+
+ Zkopírovat &uživatelské jméno
+
+
+
+ Zkopírovat heslo
+
+
+
+ Na&stavení
+
+
+
+ &Provést automatické vyplnění
+
+
+
+ &Otevřít URL adresu
+
+
+
+ Uzamknout databázi
+
+
+
+ Nadpis
+
+
+
+ &URL adresa
+
+
+
+ Poz&námky
+
+
+
+ &Exportovat do CSV souboru
+
+
+
+ O&pravit databázi
+
+
+
+ Generátor hesel
+
+
+
+ OptionDialog
+
+
+ Dialog
+
+
+
+ Obecné
+
+
+
+ Z&obrazit oznámení když jsou požadovány přihlašovací údaje
+
+
+
+ V%rátit pouze položky, které nejlépe odpovídají dané
+URL adrese namísto položek pro celou doménu
+
+
+
+ &Odpovídající schémata URL adres
+Jsou vráceny pouze položky se stejným schématem (http://, https://, ftp://, atp.)
+
+
+
+ Seřadit odpovídající položky dle &uživatelského jména
+
+
+
+ Z právě otevřené databáze od&ebrat veškeré sdílené šifrovací klíče
+
+
+
+ Z právě otevřené databáze odebrat veškerá uložená oprávnění
+
+
+
+ Generátor hesel
+
+
+
+ Pokročilé
+
+
+
+ Následující zapněte pouze pokud víte, co děláte!
+
+
+
+ Vždy umožnit přístup k veškerým položkám
+
+
+
+ Vždy umožnit akt&ualizovat položky
+
+
+
+ Vy&hledat odpovídající položky ve všech otevřených databázích
+
+
+
+ Je třeba, aby ke klientovi byly připojené pouze vybrané databáze!
+
+
+
+ V&rátit také pokročilé textové řetězce které začínají na „KPH:“
+
+
+
+ Automatická vytváření nebo aktualizace nejsou u textových kolonek podporované!
+
+
+
+ HTTP port:
+
+
+
+ Výchozí port: 19455
+
+
+
+ Vyžádat odemknutí zamčené databáze
+
+
+
+ Seřadit odpovídající položky dle názvu
+
+
+
+ Zapnout protokol KeePassXC HTTP
+Toto je zapotřebí pro přístup do databáze z ChromeIPass nebo PassIFox
+
+
+
+ Na tomto portu bude KeePassXC očekávat spojení na adrese 127.0.0.1
+
+
+
+ S oprávněními uživatele není možné navázat na porty, pro které je třeba oprávnění správce systému
+
+
+
+ Není možné navázat na porty s číslem nižším, než 1024!
+Náhradně bude použit port 19455.
+ PasswordGeneratorWidget
@@ -1117,10 +1401,6 @@ Jedná se o jednosměrný převod. Databázi, vzniklou z importu, nepůjde otev
Heslo:
-
-
- Délka:
- Typy znaků
@@ -1145,71 +1425,72 @@ Jedná se o jednosměrný převod. Databázi, vzniklou z importu, nepůjde otev
Vynechat podobně vypadající znaky (předejití záměně)
-
-
- Zajistit, aby heslo obsahovalo znaky ze všech zvolených skupin znaků
- Přijmout
-
-
- QCommandLineParser
-
- Zobrazí informace o verzi.
+
+ %p%
-
- Zobrazí tuto nápovědu.
+
+ odolnost
-
- Neznámá předvolba %1.
+
+ náhodnost
-
- Neznámé předvolby: %1.
+
+ Dé&lka:
-
- Chybějící hodnota, následující za %1.
+
+ Použít znaky ze všech skupin
-
- Neočekávaná hodnota, následující za %1.
+
+ Vytvořit
-
- [předvolby]
+
+ Zavřít
-
- Použití: %1
+
+ Použít
-
- Předvolby:
+
+ Náhodnost: %1 bit
-
- Argumenty:
+
+ Odolnost hesla: %1
+
+
+
+ Velmi nízká
+
+
+
+ Slabá
+
+
+
+ Dobrá
+
+
+
+ Skvělá
- QSaveFile
+ QObject
-
- Do stávajícího souboru %1 nelze zapisovat
-
-
-
- Zápis byl zrušen aplikací
-
-
-
- Zápis nebylo možné zcela dokončit. Nedostatek volného místa?
+
+ Http
@@ -1249,20 +1530,111 @@ Jedná se o jednosměrný převod. Databázi, vzniklou z importu, nepůjde otev
SearchWidget
-
- Najít:
+
+ Rozlišovat velikost písmen
-
- Rozlišovat malá/velká písmena
+
+ Hledat
-
- Stávající skupina
+
+ Najít
-
- Kořenová skupina
+
+ Vyčistit
+
+
+
+ Service
+
+
+ Už existuje sdílený šifrovací klíč s názvem „%1“.
+Přejete si ho přepsat?
+
+
+
+ Přejete si aktualizovat informaci v %1 – %2?
+
+
+
+ Právě otevřená databáze je uzamčená!
+Buď jí odemkněte, nebo vyberte jinou, odemčenou.
+
+
+
+ Z nastavení KeePassX/Http bylo úspěšně odebráno %1 šifrování-%2.
+
+
+
+ V nastavení KeePassHttp nebyly nalezeny žádné sdílené šifrovací klíče.
+
+
+
+ Právě otevřená databáze neobsahuje žádnou položku nastavení KeePassHttp.
+
+
+
+ Odstraňuji uložená oprávnění...
+
+
+
+ Přerušit
+
+
+
+ Oprávnění %1 %2 úspěšně odebrána.
+
+
+
+ Právě otevřená databáze neobsahuje položku s oprávněními.
+
+
+
+ KeePassXC: nový požadavek na přiřazení klíče
+
+
+
+ Pokud jste obdrželi požadavek na přiřazení pro výše uvedený klíč.
+Pokud chcete umožnit přístup do KeePassXC databáze, dejte jí
+jedinečný název pro její identifikaci a potvrďte ho.
+
+
+
+ KeePassXC: Přepsat stávající klíč?
+
+
+
+ KeePassXC: Aktualizovat položku
+
+
+
+ KeePassXC: Databáze uzamčena!
+
+
+
+ KeePassXC: Odebrány klíče z databáze
+
+
+
+ KeePassXC: Klíče nebyly nalezeny
+
+
+
+ KeePassXC: Nastavení nejsou k dispozici!
+
+
+
+ KeePassXC: Odebraná oprávnění
+
+
+
+ KeePassXC: Nebyla nalezena položka s oprávněními!
@@ -1286,10 +1658,6 @@ Jedná se o jednosměrný převod. Databázi, vzniklou z importu, nepůjde otev
Pamatovat si nedávno otevřené databáze
-
-
- Při spuštění aplikace otevřít minule otevřené databáze
- Před ukončením aplikace automaticky uložit případné změny
@@ -1300,7 +1668,7 @@ Jedná se o jednosměrný převod. Databázi, vzniklou z importu, nepůjde otev
- Po zkopírování údaje do schránky automaticky minimalizovat okno KeePassX (do popředí se tak dostane okno, do kterého se zkopírovaný údaj bude vkládat)
+ Po zkopírování údaje do schránky automaticky minimalizovat
@@ -1331,12 +1699,20 @@ Jedná se o jednosměrný převod. Databázi, vzniklou z importu, nepůjde otev
Pamatovat si nedávno otevřené soubory s klíči
-
-
+
+ Při spuštění aplikace načíst minule otevřené databáze
-
-
+
+ V okamžiku zásahu do databáze zvenčí ji načíst znovu
+
+
+
+ Namísto zavření minimalizovat okno aplikace do oznamovací oblasti systémového panelu
+
+
+
+ Spouštět aplikaci s minimalizovaným oknem
@@ -1361,6 +1737,14 @@ Jedná se o jednosměrný převod. Databázi, vzniklou z importu, nepůjde otev
Před provedením automatického vyplnění se vždy dotázat
+
+
+ Při minimalizaci okna uzamknout databáze
+
+
+
+ Pokud jsou zobrazená, nevyžadovat zopakování hesel
+ UnlockDatabaseWidget
@@ -1378,14 +1762,6 @@ Jedná se o jednosměrný převod. Databázi, vzniklou z importu, nepůjde otev
main
-
-
- KeePassX – správce hesel, fungující napříč rozličnými operačními systémy
-
-
-
- který soubor s databází hesel (*.kdbx) otevřít
- umístění souboru s vlastními nastaveními
@@ -1394,5 +1770,17 @@ Jedná se o jednosměrný převod. Databázi, vzniklou z importu, nepůjde otev
soubor s klíčem k databázi
+
+
+ názvy databází s hesly (*.kdbx) které otevřít ()()
+
+
+
+ KeePassXC – aplikace pro správu hesel, fungující na vícero operačních systémech
+
+
+
+ načíst heslo k databázi ze standardního vstupu
+
\ No newline at end of file
diff --git a/share/translations/keepassx_de.ts b/share/translations/keepassx_de.ts
index 2742de484..20bd5daeb 100644
--- a/share/translations/keepassx_de.ts
+++ b/share/translations/keepassx_de.ts
@@ -1,14 +1,6 @@
-
+AboutDialog
-
-
- Über KeePassX
-
-
-
- KeePassX steht unter der GNU General Public License (GPL) version 2 (version 3).
- Überarbeitung
@@ -17,17 +9,56 @@
In Benutzung:
+
+
+ Über KeePassXC
+
+
+
+ KeePassXC steht unter der GNU General Public License (GPL) version 2 (version 3).
+
+
+
+ Erweiterungen:
+
+
+
+
+ AccessControlDialog
+
+
+ Diese Entscheidung merken
+
+
+
+ Erlauben
+
+
+
+ Ablehnen
+
+
+
+ %1 hat Zugriff auf Passwörter für folgende Element(e) angefordert.
+Bitte wählen Sie, ob Sie den Zugriff erlauben möchten.
+
+
+
+ KeePassXC HTTP Erlaube Zugriff
+ AutoType
-
-
- Auto-Type - KeePassX
- Konnte keinen Eintrag finden, welcher mit dem Fenstertitel übereinstimmt:
+
+
+ Auto-Type - KeePassXC
+ AutoTypeAssociationsModel
@@ -46,14 +77,14 @@
AutoTypeSelectDialog
-
-
- Auto-Type - KeePassX
- Wählen Sie einen Eintrag für Auto-Type:
+
+
+ Auto-Type - KeePassXC
+ ChangeMasterKeyWidget
@@ -318,11 +349,6 @@ Save changes?
gesperrt
-
-
- Die Datenbank, die geöffnet werden soll, ist aktuell von einer anderen Instanz von KeePassX blockiert. Soll sie dennoch geöffnet werden? Andererseits wird die Datenbank schreibgeschützt geöffnet.
- Datenbank sperren
@@ -366,14 +392,24 @@ Discard changes and close anyway?
Die CSV Datei konnte nicht gespeichert werden.
-
- Die Datenbank, die gespeichert werden soll, ist von einer anderen Instanz von KeePassX blockiert.
-Soll sie dennoch gespeichert werden?
+
+ Öffnen der Datenbank ist nicht möglich.
-
-
+
+ Die Datenbank, die geöffnet werden soll, ist aktuell von einer anderen Instanz von KeePassXC blockiert.
+Soll sie dennoch geöffnet werden? Alternativ wird die Datenbank schreibgeschützt geöffnet.
+
+
+
+ Datenbank zusammenführen
+
+
+
+ Die Datenbank, die gespeichert werden soll, ist von einer anderen Instanz von KeePassXC blockiert.
+Soll sie dennoch gespeichert werden?
@@ -414,10 +450,6 @@ Soll sie dennoch gespeichert werden?
Wollen Sie die Gruppe "%1" wirklich löschen?
-
-
- Aktuelle Gruppe
- Fehler
@@ -428,11 +460,71 @@ Soll sie dennoch gespeichert werden?
-
+ Eintrag in den Papierkorb verschieben?
-
+ Möchten Sie wirklich Eintrag "%1" in den Papierkorb verschieben?
+
+
+
+ Am suchen...
+
+
+
+ Keine aktuelle Datenbank
+
+
+
+ Keine Quelldatenbank, es gibt nichts zu tun.
+
+
+
+ Suchergebnisse (%1)
+
+
+
+ Keine Ergebnisse
+
+
+
+ Befehl ausführen?
+
+
+
+ Den folgenden Befehl wirklich ausführen?<br><br>%1<br>
+
+
+
+ Meine Auswahl merken
+
+
+
+ Autoreload Anfrage
+
+
+
+ Die Datenbank wurde verändert. Möchten Sie die Änderungen laden?
+
+
+
+ Zusammenführ-Anfrage
+
+
+
+ Die Datenbank wurde verändert und Sie haben ungespeicherte Änderungen. Möchten Sie Ihre Änderungen zusammenfügen?
+
+
+
+ Autoreload fehlgeschlagen
+
+
+
+ Kann Datenbank nicht durchsuchen oder entsperren während dem Autoreload-Versuch dieser Datenbank.
+
+
+
+ Kann die Datenbank nicht öffnen während dem Versuch, diese Datenbank automatisch neu zu laden.
@@ -622,10 +714,6 @@ Soll sie dennoch gespeichert werden?
Wiederholen:
-
-
- Gen.
- URL:
@@ -743,17 +831,25 @@ Soll sie dennoch gespeichert werden?
Symbol kann nicht gelöscht werden!
-
-
- Symbol kann nicht gelöscht werden. Es wird von %n Eintrag verwendet.Symbol kann nicht gelöscht werden. Es wird von %n Einträgen verwendet.
-
-
+ Fehler
-
-
+
+ Favicon herunterladen
+
+
+
+ Abrufen des Favicons nicht möglich
+
+
+
+ Icon kann nicht gelesen werden
+
+
+
+ Symbol kann nicht gelöscht werden. Es wird noch von %1 Einträgen verwendet.
@@ -775,6 +871,13 @@ Soll sie dennoch gespeichert werden?
Uuid:
+
+ Entry
+
+
+ - Klone
+
+EntryAttributesModel
@@ -827,6 +930,61 @@ Soll sie dennoch gespeichert werden?
Papierkorb
+
+ HttpPasswordGeneratorWidget
+
+
+ Länge:
+
+
+
+ Zeichenarten
+
+
+
+ Großbuchstaben
+
+
+
+ A-Z
+
+
+
+ Kleinbuchstaben
+
+
+
+ a-z
+
+
+
+ Zahlen
+
+
+
+ 0-9
+
+
+
+ Sonderzeichen
+
+
+
+ /*_& ...
+
+
+
+ Gleich aussehende Zeichen ausschließen
+
+
+
+ Sicherstellen, dass das Passwort Zeichen aus allen Gruppen enthält.
+
+
+
+ Akzeptieren
+
+KeePass1OpenWidget
@@ -870,7 +1028,7 @@ Soll sie dennoch gespeichert werden?
-
+ Falscher Schlüssel oder die Datenbank ist beschädigt.
@@ -909,8 +1067,8 @@ Dieser Vorgang ist nur in eine Richtung möglich. Die importierte Datenbank kann
Fataler Fehler beim Testen der kryptografischen Funktionen.
-
- KeePassX - Fehler
+
+ KeePassXC - Fehler
@@ -919,102 +1077,14 @@ Dieser Vorgang ist nur in eine Richtung möglich. Die importierte Datenbank kann
Datenbank
-
-
- Aktuelle Datenbanken
-
-
-
- Hilfe
-
-
-
- Einträge
-
-
-
- Eingenschaft in die Zwischenablage kopieren
-
-
-
- Gruppen
-
-
-
- Ansicht
-
-
-
- Beenden
-
-
-
- Über
- Datenbank öffnen
-
-
- Datenbank speichern
-
-
-
- Datenbank schließen
-
-
-
- Neue Datenbank
-
-
-
- Neuen Eintrag hinzufügen
-
-
-
- Eintrag anzeigen/bearbeiten
-
-
-
- Eintrag löschen
-
-
-
- Neue Gruppe hinzufügen
-
-
-
- Gruppe bearbeiten
-
-
-
- Gruppe löschen
-
-
-
- Datenbank speichern als
-
-
-
- Hauptschlüssel ändern
- Datenbankeinstellungen
-
-
- KeePass 1 Datenbank importieren
-
-
-
- Eintrag klonen
-
-
-
- Suchen
- Benutzername in die Zwischenablage kopieren
@@ -1027,30 +1097,6 @@ Dieser Vorgang ist nur in eine Richtung möglich. Die importierte Datenbank kann
Einstellungen
-
-
- Auto-Type ausführen
-
-
-
- URL öffnen
-
-
-
- Datenbank sperren
-
-
-
- Titel
-
-
-
- URL
-
-
-
- Notizen
- Symbolleiste anzeigen
@@ -1067,22 +1113,6 @@ Dieser Vorgang ist nur in eine Richtung möglich. Die importierte Datenbank kann
Tools
-
-
- Benutzername kopieren
-
-
-
- Passwort kopieren
-
-
-
- Als CSV Datei exportieren
-
-
-
- Datenbank reparieren
- KeePass 2 Datenbank
@@ -1103,6 +1133,265 @@ Dieser Vorgang ist nur in eine Richtung möglich. Die importierte Datenbank kann
Schreiben der Datenbank fehlgeschlagen.
+
+
+ &Letzte Datenbanken
+
+
+
+ Hi&lfe
+
+
+
+ Ei&nträge
+
+
+
+ Eigenschaft in &Zwischenablage kopieren
+
+
+
+ &Gruppen
+
+
+
+ &Ansicht
+
+
+
+ &Beenden
+
+
+
+ &Über
+
+
+
+ &Öffne Datenbank
+
+
+
+ Datenbank &speichern
+
+
+
+ &Datenbank schließen
+
+
+
+ &Neue Datenbank
+
+
+
+ Von KeePassX-Datenbank zusammenführen
+
+
+
+ Neuen Eintrag &hinzufügen
+
+
+
+ Eintrag &anzeigen/bearbeiten
+
+
+
+ Eintrag &löschen
+
+
+
+ &Neue Gruppe hinzufügen
+
+
+
+ Gruppe b&earbeiten
+
+
+
+ Gruppe &löschen
+
+
+
+ Datenbank s&peichern als
+
+
+
+ &Hauptschlüssel ändern
+
+
+
+ &Datenbankeinstellungen
+
+
+
+ &KeePass 1 Datenbank importieren
+
+
+
+ Eintrag &klonen
+
+
+
+ &Suchen
+
+
+
+ &Benutzername kopieren
+
+
+
+ Passwort kop&ieren
+
+
+
+ &Einstellungen
+
+
+
+ &Auto-Type ausführen
+
+
+
+ URL &öffnen
+
+
+
+ Datenbank &sperren
+
+
+
+ &Titel
+
+
+
+ &URL
+
+
+
+ &Notizen
+
+
+
+ Als CSV Datei &exportieren
+
+
+
+ Datenbank re&parieren
+
+
+
+ Passwortgenerator
+
+
+
+ OptionDialog
+
+
+ Dialog
+
+
+
+ Allgemein
+
+
+
+ Zeig&e eine Benachrichtigung, wenn Anmeldedaten angefordert werden.
+
+
+
+ Zeige nur die passendsten Einträge für eine URL, statt
+alle Einträge der ganzen Domäne.
+
+
+
+ Passendes URL Schema
+Nur Einträge mit dem gleichen Schema (hhtp://, https://, ftp://, ...) werden angezeigt
+
+
+
+ Sortiere gefundene Einträge nach &Benutzername
+
+
+
+ Entferne alle freigegebenen Chiffrierschlüssel aus der aktiven Datenbank
+
+
+
+ Entferne alle gespeicherten Berechtigungen von Einträgen in der aktiven Datenbank
+
+
+
+ Passwortgenerator
+
+
+
+ Fortgeschritten
+
+
+
+ Aktivieren Sie das Nachfolgende nur dann, wenn Sie sich sicher sind, was sie tun!
+
+
+
+ &Zugriff auf Einträge immer erlauben
+
+
+
+ &Aktualisierung von Einträgen immer erlauben
+
+
+
+ Suche in allen offenen Datenbanken nach übereinstimmenden Einträgen
+
+
+
+ Nur die ausgewählte Datenbank muss mit dem Client verbunden sein.
+
+
+
+ Zeige auch erweiterte Zeichenfelder, welche mit "KPH: " beginnen
+
+
+
+ Automatisches Erstellen und Aktualisieren von Zeichenfeldern wird nicht unterstützt!
+
+
+
+ HTTP Port:
+
+
+
+ Standard Port:19455
+
+
+
+ Verlange Entsperrung, wenn die Datenbank gesperrt ist.
+
+
+
+ Sortiere gefundene Einträge nach Titel
+
+
+
+ Aktiviere KeePassXC HTTP Protokoll
+Dies wird benötigt um von ChromeIPass oder PassIFox auf Deine Datenbank zu zugreifen
+
+
+
+ KeePassXC überwacht diesen Port auf 127.0..0.1
+
+
+
+ Kann nicht zu privilegierte Ports verbinden
+
+
+
+ Kann nicht zu privilegierten Ports unter 1024 verbinden!
+Benutze Standardport 19455.
+ PasswordGeneratorWidget
@@ -1110,10 +1399,6 @@ Dieser Vorgang ist nur in eine Richtung möglich. Die importierte Datenbank kann
Passwort:
-
-
- Länge:
- Zeichenarten
@@ -1138,71 +1423,72 @@ Dieser Vorgang ist nur in eine Richtung möglich. Die importierte Datenbank kann
Gleich aussehende Zeichen ausschließen
-
-
- Sicher stellen, dass das Passwort Zeichen aller Gruppen enthält
- Akzeptieren
-
-
- QCommandLineParser
-
- Versionsinformationen anzeigen.
+
+ %p%
-
- Zeigt diese Hilfe an.
+
+ Stärke
-
- Unbekannte Option '%1'.
+
+ Entropie
-
- Unbekannte Optionen: '%1'.
+
+ &Länge:
-
- Fehlender Wert nach '%1'.
+
+ Zeichen aus allen Gruppen wählen
-
- Unerwarteter Wert nach '%1'.
+
+ Generiere
-
- [Optionen]
+
+ Schließen
-
- Verwendung: %1
+
+ Anwenden
-
- Optionen:
+
+ Entropie: %1 bit
-
- Argumente:
+
+ Passwort Qualität: %1
+
+
+
+ Schlecht
+
+
+
+ Schwach
+
+
+
+ Gut
+
+
+
+ Exzellent
- QSaveFile
+ QObject
-
- Bestehende Datei(en) %1 ist nicht schreibbar
-
-
-
- Schreiben von der Applikation abgebrochen
-
-
-
- Unvollständiger Schreibvorgang. Partition voll?
+
+ Http
@@ -1242,20 +1528,112 @@ Dieser Vorgang ist nur in eine Richtung möglich. Die importierte Datenbank kann
SearchWidget
-
- Suchen nach:
+
+ Groß- /Kleinschreibung beachten
-
- Groß-/Kleinschreibung unterscheiden
+
+ Suche
-
- Aktuelle Gruppe
+
+ Suchen
-
- Root-Gruppe
+
+ löschen
+
+
+
+ Service
+
+
+ Ein freigegebener Chiffrierschlüssel mit dem Namen "%1" existiert schon.
+Willst Du ihn überschreiben?
+
+
+
+ Möchten Sie wirklich die Informationen in %1 - %2 aktualisieren?
+
+
+
+ Die aktive Datenbank ist gesperrt!
+Bitte entsperren Sie die markierte Datenbank oder wählen Sie eine andere, die entsperrt ist.
+
+
+
+ %1 Verschlüsselungs-%2 erfolgreich von KeePassX/Http Einstellungen entfernt.
+
+
+
+ Kein freigegebener Chiffrierschlüssel in den KeePassHttp-Einstellungen gefunden.
+
+
+
+ Die aktive Datenbank enthält keinen Eintrag für KeePassHttp Einstellungen.
+
+
+
+ Gespeicherte Berechtigungen werden gelöscht...
+
+
+
+ Abbrechen
+
+
+
+ Berechtigungen wurden von %1 %2 erfolgreich gelöscht.
+
+
+
+ The aktive Datenbank enthält keinen Eintrag mit Zugangsdaten.
+
+
+
+ KeePassXC: Neue Schlüsselverbindungsanfrage
+
+
+
+ Sie haben eine Verbindungsanfrage für den obigen Schlüssel
+erhalten. Wenn Sie den Zugriff auf Ihre KeePassXC-Datenbank
+erlauben möchten, geben Sie der Verbindungen einen eindeutigen
+Namen und akzeptieren Sie.
+
+
+
+ KeePassXC: Bestehenden Schlüssel überschreiben?
+
+
+
+ KeePassXC: Eintrag aktualisiert
+
+
+
+ KeePassXC: Datenbank gesperrt!
+
+
+
+ KeePassXC: Entfernte Schlüssel von der Datenbank
+
+
+
+ KeePassXC: Kein Schlüssel gefunden
+
+
+
+ KeePassXC: Einstellung nicht verfügbar!
+
+
+
+ KeePassXC: Entfernte Zugangsdaten
+
+
+
+ KeePassXC: Kein Eintrag mit Zugangsdaten gefunden!
@@ -1279,10 +1657,6 @@ Dieser Vorgang ist nur in eine Richtung möglich. Die importierte Datenbank kann
Letzte Datenbank merken
-
-
- Letzte Datenbank beim Starten öffnen
- Automatisch speichern beim Schließen
@@ -1324,12 +1698,20 @@ Dieser Vorgang ist nur in eine Richtung möglich. Die importierte Datenbank kann
Letzte Schlüsseldateien merken
-
- Fenster zu Taskleistensymbol minimieren statt Programm beenden
+
+ Letzte Datenbank beim Starten laden
-
- Fenster zu Taskleistensymbol minimieren wenn Programm started
+
+ Datenbank nach externer Modifikation automatisch neu laden.
+
+
+
+ Fenster zur Taskleiste minimieren statt das Programm zu beenden
+
+
+
+ Fenster beim Programmstart minimieren
@@ -1354,6 +1736,14 @@ Dieser Vorgang ist nur in eine Richtung möglich. Die importierte Datenbank kann
Immer vor einem Auto-type fragen
+
+
+ Datenbank sperren nach dem Minimieren des Fensters
+
+
+
+ Keine erneute Eingabe verlangen wenn Passwort sichtbar.
+ UnlockDatabaseWidget
@@ -1371,14 +1761,6 @@ Dieser Vorgang ist nur in eine Richtung möglich. Die importierte Datenbank kann
main
-
-
- KeePassX - plattformübergreifender Passwortmanager
-
-
-
- Dateiname für die zu öffnende Passwortdatenbank (*.kdbx)
- Pfad zu einer benutzerdefinierten Konfigurationsdatei
@@ -1387,5 +1769,17 @@ Dieser Vorgang ist nur in eine Richtung möglich. Die importierte Datenbank kann
Schlüsseldatei der Datenbank
+
+
+ Dateiname(n) der zu öffnenden Passwortdatenbank(en) (*.kdbx)
+
+
+
+ KeePassXC - plattformübergreifender Passwortmanager
+
+
+
+ passwort der datenbank von stdin lesen
+
\ No newline at end of file
diff --git a/share/translations/keepassx_en.ts b/share/translations/keepassx_en.ts
index bbf574b47..d55617134 100644
--- a/share/translations/keepassx_en.ts
+++ b/share/translations/keepassx_en.ts
@@ -19,6 +19,11 @@
+
+
+
+ AccessControlDialog
@@ -475,6 +480,46 @@ Do you want to save it anyway?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ EditEntryWidget
@@ -669,10 +714,6 @@ Do you want to save it anyway?
-
-
-
-
@@ -830,6 +871,13 @@ Do you want to save it anyway?
+
+ Entry
+
+
+
+
+EntryAttributesModel
@@ -1226,6 +1274,10 @@ This is a one-way migration. You won't be able to open the imported databas
+
+
+
+ OptionDialog
@@ -1299,14 +1351,6 @@ Only entries with the same scheme (http://, https://, ftp://, ...) are returned<
-
-
-
-
-
-
-
-
@@ -1315,11 +1359,6 @@ Only entries with the same scheme (http://, https://, ftp://, ...) are returned<
-
-
-
-
@@ -1328,6 +1367,24 @@ This is required for accessing your databases from ChromeIPass or PassIFoxSort &matching entries by title
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PasswordGeneratorWidget
@@ -1335,10 +1392,6 @@ This is required for accessing your databases from ChromeIPass or PassIFoxPassword:
-
-
-
-
@@ -1364,11 +1417,63 @@ This is required for accessing your databases from ChromeIPass or PassIFox
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -1415,16 +1520,20 @@ This is required for accessing your databases from ChromeIPass or PassIFox
SearchWidget
-
-
-
-
-
+
+
+
+
+
+
+
+
+
@@ -1536,10 +1645,6 @@ give it a unique name to identify and accept it.
-
-
-
-
@@ -1581,11 +1686,19 @@ give it a unique name to identify and accept it.
-
+
-
+
+
+
+
+
+
+
+
+
@@ -1615,6 +1728,10 @@ give it a unique name to identify and accept it.
+
+
+
+ UnlockDatabaseWidget
diff --git a/share/translations/keepassx_lt.ts b/share/translations/keepassx_lt.ts
index 41aa94df7..824101c51 100644
--- a/share/translations/keepassx_lt.ts
+++ b/share/translations/keepassx_lt.ts
@@ -1,14 +1,6 @@
-
+AboutDialog
-
-
- Apie KeePassX
-
-
-
- KeePassX yra platinama GNU Bendrosios Viešosios Licencijos (GPL) versijos 2 arba (jūsų pasirinkimu) versijos 3 sąlygomis.
- Poversijis
@@ -17,17 +9,56 @@
Naudojama:
+
+
+ Apie KeePassXC
+
+
+
+ KeePassXC yra platinama GNU Bendrosios Viešosios Licencijos (GPL) versijos 2 arba (jūsų pasirinkimu) versijos 3 sąlygomis.
+
+
+
+ Plėtiniai:
+
+
+
+
+ AccessControlDialog
+
+
+ Prisiminti šį sprendimą
+
+
+
+ Leisti
+
+
+
+ Atmesti
+
+
+
+ %1 užklausė prieigos prie slaptažodžių šiam elementui(-ams).
+Pasirinkite, ar norite leisti prieigą.
+
+
+
+ KeePassXC HTTP prieigos patvirtinimas
+ AutoType
-
-
- Automatinis rinkimas - KeePassX
- Nepavyko rasti įrašo, kuris atitiktų lango antraštę:
+
+
+ Automatinis rinkimas - KeePassXC
+ AutoTypeAssociationsModel
@@ -46,14 +77,14 @@
AutoTypeSelectDialog
-
-
- Automatinis rinkimas - KeePassX
- Pasirinkite įrašą automatiniam rinkimui:
+
+
+ Automatinis rinkimas - KeePassXC
+ ChangeMasterKeyWidget
@@ -319,12 +350,6 @@ Save changes?
užrakinta
-
-
- Duomenų bazė, kurią bandote atverti, yra užrakinta kito KeePassX egzemplioriaus.
-Ar vis tiek norite ją atverti? Kitu atveju duomenų bazė bus atverta tik skaitymui.
- Užrakinti duomenų bazę
@@ -368,14 +393,24 @@ Vis tiek atmesti pakeitimus ir užverti?
CSV failo įrašymas nepavyko.
-
- Duomenų bazė, kurią bandote įrašyti yra užrakinta kito KeePassX programos egzemplioriaus.
-Ar vis tiek norite ją įrašyti?
+
+ Nepavyko atverti duomenų bazės.
-
-
+
+ Duomenų bazė, kurią bandote atverti, yra užrakinta kito KeePassXC egzemplioriaus.
+Ar vis tiek norite ją atverti? Tokiu atveju duomenų bazė bus atverta tik skaitymui.
+
+
+
+ Sulieti duomenų bazę
+
+
+
+ Duomenų bazė, kurią bandote įrašyti yra užrakinta kito KeePassXC programos egzemplioriaus.
+Ar vis tiek norite ją įrašyti?
@@ -416,10 +451,6 @@ Ar vis tiek norite ją įrašyti?
Ar tikrai norite ištrinti grupę "%1"?
-
-
- Esama grupė
- Klaida
@@ -430,11 +461,71 @@ Ar vis tiek norite ją įrašyti?
-
+ Perkelti įrašą į šiukšlinę?
-
+ Ar tikrai norite perkelti įrašą "%1" į šiukšlinę?
+
+
+
+ Ieškoma...
+
+
+
+ Nėra esamos duomenų bazės.
+
+
+
+ Nėra šaltinio duomenų bazės, nėra ką atlikti.
+
+
+
+ Paieškos rezultatai (%1)
+
+
+
+ Nėra rezultatų
+
+
+
+ Vykdyti komandą?
+
+
+
+ Ar tikrai norite vykdyti šią komandą?<br><br>%1<br>
+
+
+
+ Prisiminti mano pasirinkimą
+
+
+
+ Automatinio įkėlimo iš naujo užklausa
+
+
+
+ Duomenų bazės failas pasikeitė. Ar norite įkelti pakeitimus?
+
+
+
+ Suliejimo užklausa
+
+
+
+ Duomenų bazės failas pasikeitė ir jūs turite neįrašytų pakeitimų. Ar norite sulieti savo pakeitimus?
+
+
+
+ Automatinis įkėlimas iš naujo nepavyko
+
+
+
+ Nepavyko išanalizuoti ar atrakinti naujos duomenų bazės failo, bandant automatiškai iš naujo įkelti šią duomenų bazę.
+
+
+
+ Nepavyko atverti naujos duomenų bazės failo, bandant automatiškai iš naujo įkelti šią duomenų bazę.
@@ -625,10 +716,6 @@ Ar vis tiek norite ją įrašyti?
Pakartokite:
-
-
- Kurti
- URL:
@@ -746,17 +833,25 @@ Ar vis tiek norite ją įrašyti?
Nepavyksta ištrinti piktogramos!
-
-
- Nepavyksta ištrinti piktogramos. Vis dar naudojama %n elemento.Nepavyksta ištrinti piktogramos. Vis dar naudojama %n elementų.Nepavyksta ištrinti piktogramos. Vis dar naudojama %n elementų.
-
-
+ Klaida
-
-
+
+ Atsisiųsti svetainės piktogramą
+
+
+
+ Nepavyko gauti svetainės piktogramos.
+
+
+
+ Nepavyksta perskaityti piktogramos
+
+
+
+ Nepavyksta ištrinti piktogramos. Vis dar naudojama %1 elementų.
@@ -778,6 +873,13 @@ Ar vis tiek norite ją įrašyti?
Uuid:
+
+ Entry
+
+
+ - Dublikatas
+
+EntryAttributesModel
@@ -830,6 +932,61 @@ Ar vis tiek norite ją įrašyti?
Šiukšlinė
+
+ HttpPasswordGeneratorWidget
+
+
+ Ilgis:
+
+
+
+ Simbolių tipai
+
+
+
+ Viršutinio registro raidės
+
+
+
+ A-Z
+
+
+
+ Apatinio registro raidės
+
+
+
+ a-z
+
+
+
+ Skaičiai
+
+
+
+ 0-9
+
+
+
+ Specialūs simboliai
+
+
+
+ /*_& ...
+
+
+
+ Pašalinti panašiai atrodančius simbolius
+
+
+
+ Užtikrinti, kad slaptažodyje būtų simboliai iš kiekvienos grupės
+
+
+
+ Priimti
+
+KeePass1OpenWidget
@@ -873,7 +1030,7 @@ Ar vis tiek norite ją įrašyti?
-
+ Neteisingas raktas arba duomenų bazės failas yra pažeistas.
@@ -912,8 +1069,8 @@ Tai yra vienakryptis perkėlimas. Jūs negalėsite atverti importuotos duomenų
Lemtingoji klaida, testuojant šifravimo funkcijas.
-
- KeePassX - Klaida
+
+ KeePassXC - Klaida
@@ -922,102 +1079,14 @@ Tai yra vienakryptis perkėlimas. Jūs negalėsite atverti importuotos duomenų
Duomenų bazė
-
-
- Paskiausios duomenų bazės
-
-
-
- Pagalba
-
-
-
- Įrašai
-
-
-
- Kopijuoti požymį į iškarpinę
-
-
-
- Grupės
-
-
-
- Rodinys
-
-
-
- Baigti
-
-
-
- Apie
- Atverti duomenų bazę
-
-
- Įrašyti duomenų bazę
-
-
-
- Užverti duomenų bazę
-
-
-
- Nauja duomenų bazė
-
-
-
- Pridėti naują įrašą
-
-
-
- Žiūrėti/Keisti įrašą
-
-
-
- Ištrinti įrašą
-
-
-
- Pridėti naują grupę
-
-
-
- Keisti grupę
-
-
-
- Ištrinti grupę
-
-
-
- Įrašyti duomenų bazę kaip
-
-
-
- Pakeisti pagrindinį raktą
- Duomenų bazės nustatymai
-
-
- Importuoti KeePass 1 duomenų bazę
-
-
-
- Dublikuoti įrašą
-
-
-
- Rasti
- Kopijuoti naudotojo vardą į iškarpinę
@@ -1030,30 +1099,6 @@ Tai yra vienakryptis perkėlimas. Jūs negalėsite atverti importuotos duomenų
Nustatymai
-
-
- Atlikti automatinį rinkimą
-
-
-
- Atverti URL
-
-
-
- Užrakinti duomenų bazes
-
-
-
- Antraštė
-
-
-
- URL
-
-
-
- Pastabos
- Rodyti įrankių juostą
@@ -1070,22 +1115,6 @@ Tai yra vienakryptis perkėlimas. Jūs negalėsite atverti importuotos duomenų
Įrankiai
-
-
- Kopijuoti naudotojo vardą
-
-
-
- Kopijuoti slaptažodį
-
-
-
- Eksportuoti į CSV failą
-
-
-
- Taisyti duomenų bazę
- KeePass 2 duomenų bazė
@@ -1106,6 +1135,265 @@ Tai yra vienakryptis perkėlimas. Jūs negalėsite atverti importuotos duomenų
Duomenų bazės rašymas nepavyko.
+
+
+ &Paskiausiai naudotos duomenų bazės
+
+
+
+ Pa&galba
+
+
+
+ Į&rašai
+
+
+
+ Kopijuoti &požymį į iškarpinę
+
+
+
+ &Grupės
+
+
+
+ R&odinys
+
+
+
+ &Baigti
+
+
+
+ &Apie
+
+
+
+ &Atverti duomenų bazę
+
+
+
+ Į&rašyti duomenų bazę
+
+
+
+ &Užverti duomenų bazę
+
+
+
+ &Nauja duomenų bazė
+
+
+
+ Sulieti su KeePassX duomenų baze
+
+
+
+ &Pridėti naują įrašą
+
+
+
+ &Rodyti/Taisyti įrašą
+
+
+
+ &Ištrinti įrašą
+
+
+
+ &Pridėti naują grupę
+
+
+
+ &Taisyti grupę
+
+
+
+ &Ištrinti grupę
+
+
+
+ Įraš&yti duomenų bazę kaip
+
+
+
+ Pakeisti &pagrindinį raktą
+
+
+
+ &Duomenų bazės nustatymai
+
+
+
+ &Importuoti KeePass 1 duomenų bazę
+
+
+
+ &Dublikuoti įrašą
+
+
+
+ &Rasti
+
+
+
+ Kopijuoti &naudotojo vardą
+
+
+
+ Kopijuoti &slaptažodį
+
+
+
+ &Nustatymai
+
+
+
+ &Atlikti automatinį rinkimą
+
+
+
+ Atverti &URL
+
+
+
+ &Užrakinti duomenų bazes
+
+
+
+ &Antraštė
+
+
+
+ &URL
+
+
+
+ &Pastabos
+
+
+
+ &Eksportuoti į CSV failą
+
+
+
+ Pa&taisyti duomenų bazę
+
+
+
+ Slaptažodžių generatorius
+
+
+
+ OptionDialog
+
+
+ Dialogas
+
+
+
+ Bendra
+
+
+
+ R&odyti pranešimą, kai reikalaujama prisijungimo duomenų
+
+
+
+ &Vietoj visų įrašų, skirtų visai sričiai,
+grąžinti tik geriausiai atitinkančius įrašus, skirtus URL
+
+
+
+ &Atitikti URL schemas
+Bus grąžinami įrašai tik su ta pačia schema (http://, https://, ftp://, ...)
+
+
+
+ Rikiuoti atitinkančius įrašus pagal na&udotojo vardą
+
+
+
+ Ša&linti iš aktyvios duomenų bazės visus bendrinamus šifravimo raktus
+
+
+
+ Šal&inti iš įrašų aktyvioje duomenų bazėje visus saugomus leidimus
+
+
+
+ Slaptažodžių generatorius
+
+
+
+ Išplėstiniai
+
+
+
+ Aktyvuokite tai tik tuo atveju, jeigu žinote ką darote!
+
+
+
+ Visada leisti &prieigą prie įrašų
+
+
+
+ Visada leisti įrašų at&naujinimą
+
+
+
+ Ieš&koti atitinkančių įrašų visose atvertose duomenų bazėse
+
+
+
+ Su klientu turi būti sujungta tik pasirinkta duomenų bazė!
+
+
+
+ &Taip pat grąžinti ir išplėstines eilutes, kurios prasideda "KPH: "
+
+
+
+ Šiems eilutės laukams automatiniai kūrimai ir atnaujinimai neprieinami!
+
+
+
+ HTTP prievadas:
+
+
+
+ Numatytasis prievadas: 19455
+
+
+
+ Už&klausti atrakinti duomenų bazę, jeigu ji yra užrakinta
+
+
+
+ Rikiuoti atitinkančius įrašus pagal &antraštę
+
+
+
+ Įjungti KeepassXC HTTP protokolą
+Tai reikalinga, norint prie savo duomenų bazių gauti prieigą iš ChromeIPass ar PassIFox
+
+
+
+ KeePassXC klausysis šio prievado ties 127.0.0.1
+
+
+
+ Nepavyksta susieti su privilegijuotais prievadais
+
+
+
+ Nepavyksta susieti su privilegijuotais prievadais žemiau 1024!
+Naudojamas numatytasis prievadas 19455.
+ PasswordGeneratorWidget
@@ -1113,10 +1401,6 @@ Tai yra vienakryptis perkėlimas. Jūs negalėsite atverti importuotos duomenų
Slaptažodis:
-
-
- Ilgis:
- Simbolių tipai
@@ -1141,71 +1425,72 @@ Tai yra vienakryptis perkėlimas. Jūs negalėsite atverti importuotos duomenų
Pašalinti panašiai atrodančius simbolius
-
-
- Užtikrinti, kad slaptažodyje yra simboliai iš kiekvienos grupės
- Priimti
-
-
- QCommandLineParser
-
- Rodo versijos informaciją.
+
+ %p%
-
- Rodo šią pagalbą.
+
+ stiprumas
-
- Nežinoma parinktis "%1".
+
+ entropija
-
- Nežinomos parinktys: %1.
+
+ &Ilgis:
-
- Trūksta reikšmės po "%1".
+
+ Parinkti simbolius iš kiekvienos grupės
-
- Netikėta reikšmė po "%1".
+
+ Generuoti
-
- [parinktys]
+
+ Užverti
-
- Naudojimas: %1
+
+ Taikyti
-
- Parinktys:
+
+ Entropija: %1 bit
-
- Argumentai:
+
+ Slaptažodžio kokybė: %1
+
+
+
+ Blogas
+
+
+
+ Silpnas
+
+
+
+ Geras
+
+
+
+ Puikus
- QSaveFile
+ QObject
-
- Esamas failas %1 nėra įrašomas
-
-
-
- Programa atšaukė įrašymą
-
-
-
- Dalinis įrašymas. Pilnas skaidinys?
+
+ Http
@@ -1245,20 +1530,112 @@ Tai yra vienakryptis perkėlimas. Jūs negalėsite atverti importuotos duomenų
SearchWidget
-
- Rasti:
+
+ Skirti raidžių dydį
-
- Skiriant raidžių registrą
+
+ Ieškoti
-
- Esama grupė
+
+ Rasti
-
- Šakninė grupė
+
+ Išvalyti
+
+
+
+ Service
+
+
+ Bendrinamas šifravimo raktas, pavadinimu "%1" jau yra.
+Ar norite jį perrašyti?
+
+
+
+ Ar norite atnaujinti informaciją ties %1 - %2?
+
+
+
+ Aktyvi duomenų bazė yra užrakinta!
+Prašome atrakinti pasirinktą duomenų bazę arba pasirinkti kitą, kuri būtų atrakinta.
+
+
+
+ Sėkmingai pašalinta %1 šifravimo-%2 iš KeePassX/Http nustatymų.
+
+
+
+ KeePassHttp nustatymuose nerasta jokių bendrinamų šifravimo raktų.
+
+
+
+ Aktyvioje duomenų bazėje nėra KeePassHttp nustatymų įrašo.
+
+
+
+ Šalinami saugomi leidimai...
+
+
+
+ Nutraukti
+
+
+
+ Leidimai sėkmingai pašalinti iš %1 %2.
+
+
+
+ Aktyvioje duomenų bazėje nėra įrašo su leidimais.
+
+
+
+ KeePassXC: Naujo rakto susiejimo užklausa
+
+
+
+ Jūs gavote susiejimo užklausą aukščiau esančiam raktui.
+Jei norite leisti jam gauti prieigą prie savo KeePassXC
+duomenų bazės, suteikite jam unikalų pavadinimą, kad atpažintumėte
+ir priimtumėte jį.
+
+
+
+ KeePassXC: Perrašyti esamą raktą?
+
+
+
+ KeePassXC: Atnaujinti įrašą
+
+
+
+ KeePassXC: Duomenų bazė užrakinta!
+
+
+
+ KeePassXC: Pašalinti raktai iš duomenų bazės
+
+
+
+ KeePassXC: Raktų nerasta
+
+
+
+ KeePassXC: Nustatymai neprieinami!
+
+
+
+ KeePassXC: Pašalinti leidimai
+
+
+
+ KeePassXC: Nerasta jokių įrašų su leidimais!
@@ -1282,10 +1659,6 @@ Tai yra vienakryptis perkėlimas. Jūs negalėsite atverti importuotos duomenų
Prisiminti paskutines duomenų bazes
-
-
- Paleidžiant programą, atverti ankstesnes duomenų bazes
- Išeinant, automatiškai įrašyti
@@ -1327,12 +1700,20 @@ Tai yra vienakryptis perkėlimas. Jūs negalėsite atverti importuotos duomenų
Prisiminti paskutinius rakto failus
-
-
+
+ Paleidžiant programą, įkelti ankstesnes duomenų bazes
-
-
+
+ Išoriškai modifikavus duomenų bazę, automatiškai įkelti ją iš naujo
+
+
+
+ Neužverti lango, bet vietoj to, suskleisti jį į sistemos dėklą
+
+
+
+ Paleidus programą, suskleisti langą
@@ -1357,6 +1738,14 @@ Tai yra vienakryptis perkėlimas. Jūs negalėsite atverti importuotos duomenų
Visuomet klausti prieš atliekant automatinį rinkimą
+
+
+ Suskleidus langą, užrakinti duomenų bazes
+
+
+
+ Nereikalauti pakartoti slaptažodį, kai šis yra matomas
+ UnlockDatabaseWidget
@@ -1374,14 +1763,6 @@ Tai yra vienakryptis perkėlimas. Jūs negalėsite atverti importuotos duomenų
main
-
-
- KeePassX - daugiaplatformė slaptažodžių tvarkytuvė
-
-
-
- norimos atverti slaptažodžių duomenų bazės failo pavadinimas (*.kdbx)
- kelias į tinkintą konfigūracijos failą
@@ -1390,5 +1771,17 @@ Tai yra vienakryptis perkėlimas. Jūs negalėsite atverti importuotos duomenų
duomenų bazės rakto failas
+
+
+ norimos atverti slaptažodžių duomenų bazės(-ių) failo pavadinimas(-ai) (*.kdbx)
+
+
+
+ KeePassXC - daugiaplatformė slaptažodžių tvarkytuvė
+
+
+
+ nuskaityti duomenų bazės slaptažodį iš stdin
+
\ No newline at end of file
diff --git a/share/translations/keepassx_pt_BR.ts b/share/translations/keepassx_pt_BR.ts
index 07400920e..22acf42be 100644
--- a/share/translations/keepassx_pt_BR.ts
+++ b/share/translations/keepassx_pt_BR.ts
@@ -1,14 +1,6 @@
-
+AboutDialog
-
-
- Sobre KeePassX
-
-
-
- KeePassX é distribuído nos termos da Licença Pública Geral (GPL), versão 2 ou (à sua escolha) versão 3, do GNU.
- Revisão
@@ -17,17 +9,56 @@
Usando:
+
+
+ Sobre KeePassXC
+
+
+
+ KeePassXC é distribuído nos termos da Licença Pública Geral (GPL), versão 2 ou (à sua escolha) versão 3, do GNU.
+
+
+
+ Extensões:
+
+
+
+
+ AccessControlDialog
+
+
+ Lembrar esta escolha
+
+
+
+ Permitir
+
+
+
+ Negar
+
+
+
+ %1 solicitou acesso a senhas para o(s) seguinte(s) iten(s).
+Selecione se deseja permitir o acesso.
+
+
+
+ KeePassXC HTTP Confirmar Acesso
+ AutoType
-
-
- Auto-Digitação - KeePassX
- Não foi possível localizar uma entrada que corresponda ao título da janela:
+
+
+ Auto-Digitação - KeePassXC
+ AutoTypeAssociationsModel
@@ -46,14 +77,14 @@
AutoTypeSelectDialog
-
-
- Auto-Digitação - KeePassX
- Escolha uma entrada para Auto-Digitar:
+
+
+ Auto-Digitação - KeePassXC
+ ChangeMasterKeyWidget
@@ -319,12 +350,6 @@ Salvar alterações?
trancado
-
-
- O banco de dados que você está tentando abrir está bloqueado por outra instância do KeePassX.
-Você quer abri-lo de qualquer forma? Alternativamente, o banco de dados é aberto como somente leitura.
- Trancar Banco de Dados
@@ -368,14 +393,24 @@ Descartar alterações e fechar mesmo assim?
Falha ao gravar arquivo CSV.
-
- O banco de dados que você está tentando salvar como está travado por uma outra instância de KeePassX.
-Você deseja salvá-lo mesmo assim?
+
+ Não foi possível abrir o banco de dados.
-
-
+
+ A base de dados que você está tentando abrir está bloqueada por outra instância de KeePassXC.
+Mesmo assim deseja abrir? Alternativamente, a base de dados é aberta somente para leitura.
+
+
+
+ Juntar banco de dados
+
+
+
+ A base de dados que você está tentando abrir está bloqueada por outra instância de KeePassXC.
+Mesmo assim deseja salvá-la?
@@ -416,10 +451,6 @@ Você deseja salvá-lo mesmo assim?
Você realmente quer apagar o grupo "%1" para sempre?
-
-
- Grupo atual
- Erro
@@ -430,11 +461,71 @@ Você deseja salvá-lo mesmo assim?
-
+ Mover entrada para a lixeira?
-
+ Pretende realmente mover a entrada "%1" para a lixeira?
+
+
+
+ Pesquisando...
+
+
+
+ Nenhuma base de dados atual.
+
+
+
+ Nenhuma base de dados de origem, nada a fazer.
+
+
+
+ Resultados da Pesquisa (%1)
+
+
+
+ Sem Resultados
+
+
+
+ Executar comando?
+
+
+
+ Você quer realmente executar o comando seguinte?<br><br>%1<br>
+
+
+
+ Lembrar minha escolha
+
+
+
+ Recarregar Automaticamente Pedido
+
+
+
+ A base de dados foi alterada. Deseja carregar as alterações?
+
+
+
+ Juntar Pedido
+
+
+
+ A base de dados foi alterada e tem alterações não gravadas. Deseja juntar as suas alterações?
+
+
+
+ Carregamento Automático Falhou
+
+
+
+ Não foi possível analisar ou desbloquear o novo arquivo da base de dados ao tentar recarregar automaticamente essa base de dados.
+
+
+
+ Não foi possível abrir a nova base de dados ao tentar recarregar automaticamente essa base de dados.
@@ -625,10 +716,6 @@ Você deseja salvá-lo mesmo assim?
Repetir:
-
-
- Gerar
- URL:
@@ -746,17 +833,25 @@ Você deseja salvá-lo mesmo assim?
Não é possível apagar o ícone!
-
-
- Não é possível apagar o ícone. Ainda usado por %n item.Não é possível apagar o ícone. Ainda usado por %n itens.
-
-
+ Erro
-
-
+
+ Baixar favicon
+
+
+
+ Não foi possível obter favicon.
+
+
+
+ Não foi possível ler ícone
+
+
+
+ Não é possível apagar ícone. Ainda usado por %1 itens.
@@ -778,6 +873,13 @@ Você deseja salvá-lo mesmo assim?
Uuid:
+
+ Entry
+
+
+ - Clone
+
+EntryAttributesModel
@@ -830,6 +932,61 @@ Você deseja salvá-lo mesmo assim?
Lixeira
+
+ HttpPasswordGeneratorWidget
+
+
+ Comprimento:
+
+
+
+ Tipo de Caracteres
+
+
+
+ Letras Maiúsculas
+
+
+
+ A-Z
+
+
+
+ Letras Minúsculas
+
+
+
+ a-z
+
+
+
+ Números
+
+
+
+ 0-9
+
+
+
+ Caracteres Especiais
+
+
+
+ /*_& ...
+
+
+
+ Excluir caracteres semelhantes
+
+
+
+ Verificar se a senha contém caracteres de todos os grupos
+
+
+
+ Aceitar
+
+KeePass1OpenWidget
@@ -873,7 +1030,7 @@ Você deseja salvá-lo mesmo assim?
-
+ Chave errada ou base de dados corrompida.
@@ -912,8 +1069,8 @@ Esta é uma migração de uma via. Você não poderá abrir o banco de dados imp
Erro fatal enquanto testava as funções criptográficas.
-
- KeePassX - Erro
+
+ KeePassXC - Erro
@@ -922,102 +1079,14 @@ Esta é uma migração de uma via. Você não poderá abrir o banco de dados imp
Banco de Dados
-
-
- Bancos de dados recentes
-
-
-
- Ajuda
-
-
-
- Entradas
-
-
-
- Copiar atributo para a área de transferência
-
-
-
- Grupos
-
-
-
- Ver
-
-
-
- Sair
-
-
-
- Sobre
- Abrir banco de dados
-
-
- Salvar banco de dados
-
-
-
- Fechar banco de dados
-
-
-
- Novo banco de dados
-
-
-
- Adicionar nova entrada
-
-
-
- Ver/Editar entrada
-
-
-
- Excluir entrada
-
-
-
- Adicionar novo grupo
-
-
-
- Editar grupo
-
-
-
- Excluir grupo
-
-
-
- Salvar banco de dados como
-
-
-
- Alterar chave-mestra
- Configurações do Banco de Dados
-
-
- Importar banco de dados KeePass1
-
-
-
- Clonar entrada
-
-
-
- Localizar
- Copiar nome de usuário para área de transferência
@@ -1030,30 +1099,6 @@ Esta é uma migração de uma via. Você não poderá abrir o banco de dados imp
Configurações
-
-
- Realizar Auto-Digitação
-
-
-
- Abrir URL
-
-
-
- Trancar bancos de dados
-
-
-
- Título
-
-
-
- URL
-
-
-
- Notas
- Mostrar barra de ferramentas
@@ -1070,22 +1115,6 @@ Esta é uma migração de uma via. Você não poderá abrir o banco de dados imp
Ferramentas
-
-
- Copiar nome de usuário
-
-
-
- Copiar senha
-
-
-
- Exportar para arquivo CSV
-
-
-
- Reparar banco de dados
- Banco de dados Keepass 2
@@ -1106,6 +1135,265 @@ Esta é uma migração de uma via. Você não poderá abrir o banco de dados imp
Escrita do banco de dados falhou.
+
+
+ &Bancos de dados recentes
+
+
+
+ &Ajuda
+
+
+
+ E&ntradas
+
+
+
+ Copiar at&ributo para área de transferência
+
+
+
+ &Grupos
+
+
+
+ &Ver
+
+
+
+ &Sair
+
+
+
+ &Sobre
+
+
+
+ &Abrir base de dados
+
+
+
+ &Salvar base de dados
+
+
+
+ &Fechar base de dados
+
+
+
+ &Nova base de dados
+
+
+
+ Juntar base de dados a partir de KeePassX
+
+
+
+ &Adicionar nova entrada
+
+
+
+ &Ver/Editar entrada
+
+
+
+ &Apagar entrada
+
+
+
+ &Adicionar novo grupo
+
+
+
+ &Editar grupo
+
+
+
+ &Apagar grupo
+
+
+
+ Sal&var base de dados como
+
+
+
+ Alterar chave &mestra
+
+
+
+ &Definições da base de dados
+
+
+
+ &Importar base de dados KeePass 1
+
+
+
+ &Clonar entrada
+
+
+
+ &Encontrar
+
+
+
+ Copiar nome de &usuário
+
+
+
+ Cop&iar senha
+
+
+
+ &Configurações
+
+
+
+ &Executar escrita automática
+
+
+
+ &Abrir URL
+
+
+
+ &Trancar base de dados
+
+
+
+ &Título
+
+
+
+ &URL
+
+
+
+ &Notas
+
+
+
+ &Exportar para arquivo CSV
+
+
+
+ Re¶r banco de dados
+
+
+
+ Gerador de Senha
+
+
+
+ OptionDialog
+
+
+ Diálogo
+
+
+
+ Geral
+
+
+
+ M&ostrar uma notificação quando as credenciais forem solicitadas
+
+
+
+ &Mostrar apenas as melhores entradas correspondentes para um URL em vez de
+todas as entradas para o domínio completo
+
+
+
+ &Esquemas de URL coincidentes
+Somente entradas com o mesmo esquema (http://, https://, ftp://, ...) são mostradas
+
+
+
+ Ordenar entradas coincidentes por nome de &usuário
+
+
+
+ R&emover todas as chaves criptografadas compartilhadas da base de dados ativa
+
+
+
+ R&emover todas as permissões armazenadas de entradas na base de dados ativa
+
+
+
+ Gerador de senha
+
+
+
+ Avançado
+
+
+
+ Ativar apenas os seguintes, se souber o que está fazendo!
+
+
+
+ Permitir sempre &acesso as entradas
+
+
+
+ Permitir sempre &atualizar as entradas
+
+
+
+ Procurar em todas as base de dados abertas por entradas semel&hantes
+
+
+
+ Somente a base de dados selecionada tem que ser conectada com um cliente!
+
+
+
+ &Mostrar também campos avançados que começam com "KPH: "
+
+
+
+ Criação automática ou atualizações não são suportadas para os valores dos campos!
+
+
+
+ Porta HTTP:
+
+
+
+ Porta padrão: 19455
+
+
+
+ Pe&dir para desbloquear a base de dados se estiver bloqueada
+
+
+
+ Ordenar &entradas por título
+
+
+
+ Habilitar KeepassXC protocolo HTTP
+Isso é necessário para acessar os seus bancos de dados de ChromeIPass ou de PassIFox
+
+
+
+ KeePassXC irá escutar esta porta em 127.0.0.1
+
+
+
+ Não é possível ligar a portas privilegiadas
+
+
+
+ Não é possível ligar a portas privilegiadas abaixo de 1024!
+Usando porta padrão 19455.
+ PasswordGeneratorWidget
@@ -1113,10 +1401,6 @@ Esta é uma migração de uma via. Você não poderá abrir o banco de dados imp
Senha:
-
-
- Tamanho:
- Tipos de Caracteres
@@ -1141,71 +1425,72 @@ Esta é uma migração de uma via. Você não poderá abrir o banco de dados imp
Excluir caracteres similares
-
-
- Assegurar que a senha contenha caracteres de todos os grupos
- Aceitar
-
-
- QCommandLineParser
-
- Mostrar informações da versão.
+
+ %p%
-
- Mostrar esta ajuda.
+
+ força
-
- Opção desconhecida '%1'.
+
+ entropia
-
- Opções desconhecidas: %1.
+
+ &Tamanho:
-
- Falta valor após '%1'.
+
+ Selecione caracteres de todos os grupos
-
- Valor inesperado após '%1'.
+
+ Gerar
-
- [opções]
+
+ Fechar
-
- Utilização: %1
+
+ Aplicar
-
- Opções:
+
+ Entropia: %1 bit
-
- Argumentos:
+
+ Qualidade da senha: %1
+
+
+
+ Pobre
+
+
+
+ Fraco
+
+
+
+ Bom
+
+
+
+ Excelente
- QSaveFile
+ QObject
-
- O arquivo existente %1 não é gravável
-
-
-
- Escrita cancelada pelo aplicativo
-
-
-
- Escrita parcial. Partição cheia?
+
+ Http
@@ -1245,20 +1530,111 @@ Esta é uma migração de uma via. Você não poderá abrir o banco de dados imp
SearchWidget
-
- Localizar:
-
-
-
+
Diferenciar maiúsculas e minúsculas
-
- Grupo atual
+
+ Pesquisar
-
- Grupo Raiz
+
+ Localizar
+
+
+
+ Limpar
+
+
+
+ Service
+
+
+ Já existe uma chave de criptografia compartilhada com o nome "%1".
+Deseja substituí-la?
+
+
+
+ Deseja atualizar as informações em %1 - %2?
+
+
+
+ A base de dados ativa está bloqueada!
+Desbloqueie base de dados selecionada ou escolha outra que esteja desbloqueada.
+
+
+
+ Removido com sucesso %1 criptografia-%2 do KeePassX/Http Configurações.
+
+
+
+ Nenhuma chave de criptografia compartilhada encontrada nas Configurações do KeePassHttp.
+
+
+
+ A base de dados ativa não contém uma entrada de Configurações KeePassHttp.
+
+
+
+ Removendo permissões armazenadas...
+
+
+
+ Cancelar
+
+
+
+ Foram removidas com êxito as permissões de %1 %2.
+
+
+
+ A base de dados ativa não contém uma entrada com permissões.
+
+
+
+ KeePassXC: Nova associação de chaves requisitada
+
+
+
+ Recebeu uma solicitação de associação para a chave acima.
+Se quiser permitir o acesso a sua base de dados KeePassXC
+dar-lhe um nome único para identificá-lo e aceitá-lo.
+
+
+
+ KeePassXC: Substituir chave existente?
+
+
+
+ KeePassXC: Atualizar entrada
+
+
+
+ KeePassXC: Banco de dados bloqueado!
+
+
+
+ KeePassXC: Chaves removidas do banco de dados
+
+
+
+ KeePassXC: Nenhuma chave localizada
+
+
+
+ KeePassXC: Configurações não disponíveis!
+
+
+
+ KeePassXC: Permissões removidas
+
+
+
+ KeePassXC: Nenhuma entrada com permissões localizada!
@@ -1282,10 +1658,6 @@ Esta é uma migração de uma via. Você não poderá abrir o banco de dados imp
Lembrar dos últimos bancos de dados
-
-
- Abrir bancos de dados anteriores na inicialização
- Salvar automaticamente ao sair
@@ -1327,12 +1699,20 @@ Esta é uma migração de uma via. Você não poderá abrir o banco de dados imp
Lembrar dos últimos arquivos-chave
-
-
+
+ Abrir bancos de dados anteriores na inicialização
-
-
+
+ Automaticamente recarregar o banco de dados quando houver modificações externas
+
+
+
+ Ocultar janela na bandeja de sistema em vez de sair do programa
+
+
+
+ Iniciar programa com janela minimizada
@@ -1357,6 +1737,14 @@ Esta é uma migração de uma via. Você não poderá abrir o banco de dados imp
Sempre perguntar antes de realizar auto-digitação
+
+
+ Bloquear bancos de dados após minimizar a janela
+
+
+
+ Quando a senha for visível não pedir para repeti-la
+ UnlockDatabaseWidget
@@ -1374,14 +1762,6 @@ Esta é uma migração de uma via. Você não poderá abrir o banco de dados imp
main
-
-
- KeePassX - gerenciador de senhas multiplataforma
-
-
-
- nome de arquivo do banco de dados de senhas a ser aberto (*.kdbx)
- caminho para um arquivo de configuração personalizado
@@ -1390,5 +1770,17 @@ Esta é uma migração de uma via. Você não poderá abrir o banco de dados imp
arquivo-chave do banco de dados
+
+
+ nome(s) de arquivo(s) do banco de dados de senhas a ser aberto (*.kdbx)
+
+
+
+ KeePassXC - gerenciador de senhas multiplataforma
+
+
+
+ ler a senha do banco de dados da entrada padrão
+
\ No newline at end of file
diff --git a/share/translations/keepassx_ru.ts b/share/translations/keepassx_ru.ts
index 733d64c85..f3321c9b3 100644
--- a/share/translations/keepassx_ru.ts
+++ b/share/translations/keepassx_ru.ts
@@ -1,14 +1,6 @@
-
+AboutDialog
-
-
- О KeePassX
-
-
-
- KeePassX распространяется на условиях Стандартной общественной лицензии GNU (GPL) версии 2 или (на ваше усмотрение) версии 3.
- Ревизия
@@ -17,17 +9,55 @@
С помощью:
+
+
+ О KeePassXC
+
+
+
+ KeePassXC распространяется на условиях Стандартной общественной лицензии GNU (GPL) версии 2 или (на ваше усмотрение) версии 3.
+
+
+
+ Расширения:
+
+
+
+
+ AccessControlDialog
+
+
+ Запомнить это решение
+
+
+
+ Разрешить
+
+
+
+ Запретить
+
+
+
+ %1 запросил доступ к паролям для следующего элемента(ов). Выберете, хотите ли вы разрешить доступ.
+
+
+
+ Подтверждение доступа KeePassXC HTTP
+ AutoType
-
-
- Автоввод — KeePassX
- Невозможно найти запись, соответствующую заголовку окна:
+
+
+ Автоввод — KeePassXC
+ AutoTypeAssociationsModel
@@ -46,14 +76,14 @@
AutoTypeSelectDialog
-
-
- Автоввод — KeePassX
- Выберите запись для автоввода:
+
+
+ Автоввод — KeePassXC
+ ChangeMasterKeyWidget
@@ -187,7 +217,7 @@
-
+ Хранилище открылось. Больше нечего делать.
@@ -319,11 +349,6 @@ Save changes?
заблокировано
-
-
- Хранилище, которое Вы хотите открыть, заблокировано другой запущенной копией KeePassX. Всё равно открыть? В качестве альтернативы хранилище будет открыто в режиме для чтения.
- Заблокировать хранилище
@@ -367,14 +392,24 @@ Discard changes and close anyway?
Не удалось записать CSV файл.
-
- Данное хранилище заблокировано другой запущенной копией KeePassX.
-Вы уверены, что хотите продолжить сохранение?
+
+ Не удаётся открыть хранилище.
-
-
+
+ Хранилище, которое Вы хотите открыть, заблокировано другой запущенной копией KeePassXC.
+Всё равно открыть? В качестве альтернативы хранилище будет открыто в режиме для чтения.
+
+
+
+ Объединить хранилище
+
+
+
+ Хранилище, которые вы пытаетесь сохранить, заблокировано другим экземпляром KeePassXC.
+Хотите сохранить во всех случаях?
@@ -415,10 +450,6 @@ Do you want to save it anyway?
Вы действительно хотите навсегда удалить группу «%1»?
-
-
- Текущая группа
- Ошибка
@@ -429,11 +460,71 @@ Do you want to save it anyway?
-
+ Переместить запись в корзину?
-
+ Действительно переместить запись "%1" в корзину?
+
+
+
+ Поиск...
+
+
+
+ Нет текущего хранилища.
+
+
+
+ Нет исходного хранилища, нечего обрабатывать.
+
+
+
+ Результаты поиска (%1)
+
+
+
+ Нет результатов
+
+
+
+ Выполнить комманду?
+
+
+
+ Вы действительно хотите выполнить следующую команду?<br><br>%1<br>
+
+
+
+ Запомнить выбор
+
+
+
+ Запрос на автоматическую загрузку
+
+
+
+ Хранилище было изменено. Вы хотите загрузить изменения?
+
+
+
+ Запрос на слияние
+
+
+
+ Файл хранилища был изменён, а так же присутствуют несохранённые изменения. Вы хотите объеденить изменения?
+
+
+
+ Ошибка автоматической загрузки
+
+
+
+ Не удаётся разобрать или разблокировать новый файл хранилища при попытке автоматической загрузки этого хранилища.
+
+
+
+ Не удаётся открыть новый файл хранилища при попытке автоматической загрузки этого файла.
@@ -624,10 +715,6 @@ Do you want to save it anyway?
Пароль ещё раз:
-
-
- Генеральный.
- URL:
@@ -745,17 +832,25 @@ Do you want to save it anyway?
Не могу удалить значок!
-
-
- Не могу удалить иконку, %n запись всё ещё использует её.Не могу удалить иконку, %n записи всё ещё использует её.Не могу удалить иконку, %n записей всё ещё использует её.Не могу удалить значок, %n записей всё ещё использует его.
-
-
+ Ошибка
-
-
+
+ Скачать значок сайта
+
+
+
+ Не удалось получить значок сайта
+
+
+
+ Не могу прочитать значок
+
+
+
+ Не удается удалить значок, она продолжает использоваться %1 записями.
@@ -777,6 +872,13 @@ Do you want to save it anyway?
Uuid:
+
+ Entry
+
+
+ - Колинировать
+
+EntryAttributesModel
@@ -829,6 +931,61 @@ Do you want to save it anyway?
Корзина
+
+ HttpPasswordGeneratorWidget
+
+
+ Длина:
+
+
+
+ Виды символов
+
+
+
+ Заглавные буквы
+
+
+
+ A-Z
+
+
+
+ Строчные буквы
+
+
+
+ a-z
+
+
+
+ Цифры
+
+
+
+ 0-9
+
+
+
+ Особые символы
+
+
+
+ /*_& ...
+
+
+
+ Исключить выглядящие похожие символы
+
+
+
+ Убедитесь, что пароль содержит символы всех видов
+
+
+
+ Принять
+
+KeePass1OpenWidget
@@ -872,7 +1029,7 @@ Do you want to save it anyway?
-
+ Неверный ключ или файл хранилища повреждён.
@@ -911,8 +1068,8 @@ This is a one-way migration. You won't be able to open the imported databas
Неисправимая ошибка в процессе тестирования криптографических функций.
-
- KeePassX — Ошибка
+
+ KeePassXC — Ошибка
@@ -921,102 +1078,14 @@ This is a one-way migration. You won't be able to open the imported databas
Хранилище
-
-
- Недавние хранилища
-
-
-
- Помощь
-
-
-
- Записи
-
-
-
- Скопировать атрибут в буфер обмена
-
-
-
- Группы
-
-
-
- Вид
-
-
-
- Выход
-
-
-
- О программе
- Открыть хранилище
-
-
- Сохранить хранилище
-
-
-
- Закрыть хранилище
-
-
-
- Новое хранилище
-
-
-
- Добавить новую запись
-
-
-
- Посмотреть/редактировать запись
-
-
-
- Удалить запись
-
-
-
- Добавить новую группу
-
-
-
- Редактировать группу
-
-
-
- Удалить группу
-
-
-
- Сохранить хранилище как
-
-
-
- Сменить мастер-пароль
- Параметры хранилища
-
-
- Импортировать хранилище KeePass 1
-
-
-
- Клонировать запись
-
-
-
- Найти
- Скопировать имя пользователя в буфер обмена
@@ -1029,30 +1098,6 @@ This is a one-way migration. You won't be able to open the imported databas
Настройки
-
-
- Произвести автоввод
-
-
-
- Открыть URL
-
-
-
- Заблокировать хранилище
-
-
-
- Заголовок
-
-
-
- URL
-
-
-
- Примечания
- Показать панель инструментов
@@ -1069,25 +1114,9 @@ This is a one-way migration. You won't be able to open the imported databas
Инструменты
-
-
- Скопировать имя пользователя
-
-
-
- Скопировать пароль
-
-
-
- Экспортировать в файл CSV
-
-
-
- Восстановление хранилища
-
-
+ Хранилище KeePass 2
@@ -1103,7 +1132,265 @@ This is a one-way migration. You won't be able to open the imported databas
-
+ Не удалось записать хранилище.
+
+
+
+ Недавние хранилища
+
+
+
+ Помощь
+
+
+
+ &Записи
+
+
+
+ Скопировать атрибут в буфер обмена
+
+
+
+ Группы
+
+
+
+ Вид
+
+
+
+ Выход
+
+
+
+ О программе
+
+
+
+ Открыть хранилище
+
+
+
+ Сохранить хранилище
+
+
+
+ Закрыть хранилище
+
+
+
+ Новое хранилище
+
+
+
+ Объединить из хранилища KeePassX
+
+
+
+ Добавить новую запись
+
+
+
+ Посмотреть/редактировать запись
+
+
+
+ Удалить запись
+
+
+
+ Добавить новую группу
+
+
+
+ Редактировать группу
+
+
+
+ Удалить группу
+
+
+
+ Сохранить хранилище как
+
+
+
+ Изменить мастер-пароль
+
+
+
+ Параметры хранилища
+
+
+
+ Импортировать хранилище KeePass 1
+
+
+
+ Клонировать запись
+
+
+
+ Найти
+
+
+
+ Скопировать имя пользователя
+
+
+
+ Скопировать пароль
+
+
+
+ Настройки
+
+
+
+ Произвести автоввод
+
+
+
+ Открыть URL
+
+
+
+ Заблокировать хранилище
+
+
+
+ Заголовок
+
+
+
+ URL
+
+
+
+ Примечания
+
+
+
+ Экспортировать в файл CSV
+
+
+
+ Восстановление хранилища
+
+
+
+ Генератор паролей
+
+
+
+ OptionDialog
+
+
+ Диалог
+
+
+
+ Общие
+
+
+
+ Показывать уведомление при запросе данных для входа
+
+
+
+ Возвращать только наиболее совпавшие с URL записи, а не все записи для домена
+
+
+
+ Совпадение со схемой URL
+Возвращать только записи с соответствующей схемой (http://, https://, ftp://, ...)
+
+
+
+ Сортировать совпавшие записи по &имени пользователя
+
+
+
+ Удалить все общие ключи шифрования из активного хранилища
+
+
+
+ Удалить все сохраненные права доступа из активного хранилища
+
+
+
+ Генератор паролей
+
+
+
+ Расширенные
+
+
+
+ Включайте эти настройки только если знаете что делаете!
+
+
+
+ Всегда разрешать доступ к записям
+
+
+
+ Всегда разрешать обновление записей
+
+
+
+ Искать соответствующие записи по всем открытым хранилищам
+
+
+
+ Только выбранное хранилище должно быть соединено с клиентом!
+
+
+
+ Возвращать дополнительные строковые поля, начинающиеся с "KPH: "
+
+
+
+ Автоматическое создание или обновление не поддерживается строковыми полями!
+
+
+
+ Порт HTTP:
+
+
+
+ Порт по умолчанию: 19455
+
+
+
+ Запрашивать разблокировку хранилища, если оно заблокировано
+
+
+
+ Сортировать совпавшие записи по названию
+
+
+
+ Включить протокол KeepassXC HTTP
+Это требуется для доступа к хранилищам из ChromeIPass или PassIFox
+
+
+
+ KeePassXC будет слушать указнный порт на 127.0.0.1
+
+
+
+ Не удается выполнить привязку к привилегированным портам
+
+
+
+ Не удается привязать к привилегированные порты ниже 1024!
+Используется порт по умолчанию 19455.
@@ -1112,10 +1399,6 @@ This is a one-way migration. You won't be able to open the imported databas
Пароль:
-
-
- Длина:
- Виды символов
@@ -1140,71 +1423,72 @@ This is a one-way migration. You won't be able to open the imported databas
Исключить похожие символы
-
-
- Убедитесь, что пароль содержит символы всех видов
- Принять
-
-
- QCommandLineParser
-
- Показывает информацию о версии.
+
+ %p%
-
- Показывает эту справку.
+
+ надёжность
-
- Неизвестная опция «%1».
+
+ энтропия
-
- Неизвестные опции %1.
+
+ Длина:
-
- Пропущено значение после «%1».
+
+ Выберете символы из каждой группы
-
- Непредвиденное значение после «%1».
+
+ Генерировать
-
- [опции]
+
+ Закрыть
-
- Использование: %1
+
+ Применить
-
- Опции:
+
+ Энтропия: %1 бит
-
- Аргументы:
+
+ Качество пароля: %1
+
+
+
+ Плохой
+
+
+
+ Слабый
+
+
+
+ Хороший
+
+
+
+ Отличный
- QSaveFile
+ QObject
-
- Существующий файл %1 непригоден для записи
-
-
-
- Запись отменена приложением
-
-
-
- Частичная запись. Раздел переполнен?
+
+ Http
@@ -1244,20 +1528,110 @@ This is a one-way migration. You won't be able to open the imported databas
SearchWidget
-
- Найти:
-
-
-
+
Чувствительно к регистру
-
- Текущая группа
+
+ Поиск
-
- Корневая группа
+
+ Найти
+
+
+
+ Очистить
+
+
+
+ Service
+
+
+ Общий ключ шифрования с именем "%1" уже существует.
+Вы хотите его перезаписать?
+
+
+
+ Вы хотите обновить информацию в %1 - %2?
+
+
+
+ Активное хранилище заблокировано!
+Разблокируйте выбранное хранилище или выберите другое, незаблокированное.
+
+
+
+ Успешно удалено %1 шифрование-%2 из настроек KeePassXC/Http.
+
+
+
+ Не найдено общих ключей шифрования в настройках KeePassHttp.
+
+
+
+ Активное хранилизе не содержит записей настроек KeePassHttp.
+
+
+
+ Удаляются сохранённые права доступа...
+
+
+
+ Отмена
+
+
+
+ Права доступа из %1 %2 успешно удалены.
+
+
+
+ Активное хранилище не содержит записей с назначенными правами доступа.
+
+
+
+ KeePassXC: Запрос на ассоциацию нового ключа
+
+
+
+ Вы получили запрос на ассоциацию указанного ключа.
+Если вы хотите разрешить доступ к вашему хранилищу KeePassXC, дайте ему уникальное имя и примите запрос.
+
+
+
+ KeePassXC: Перезаписать существующий ключ?
+
+
+
+ KeePassXC: Обновить запись
+
+
+
+ KeePassXC: Хранилище заблокировано!
+
+
+
+ KeePassXC: Ключи удалены из хранилища
+
+
+
+ KeePassXC: Ключи не найдены
+
+
+
+ KeePassXC% Настройки недоступны!
+
+
+
+ KeePassXC: Права доступа удалены
+
+
+
+ KeePassXC: Не найдено записей с назначенными правами доступа!
@@ -1281,10 +1655,6 @@ This is a one-way migration. You won't be able to open the imported databas
Помнить последнее хранилище
-
-
- Открывать предыдущее хранилище при запуске
- Автоматически сохранять при выходе
@@ -1326,12 +1696,20 @@ This is a one-way migration. You won't be able to open the imported databas
Запоминать последние файл-ключи
-
-
+
+ Открывать предыдущие хранилища при запуске
-
-
+
+ Автоматически перечитывать хранилище при его изменении внешними приложениями
+
+
+
+ Прятать окно в системный лоток вместо выхода
+
+
+
+ Сворачивать окно при запуске приложения
@@ -1356,6 +1734,14 @@ This is a one-way migration. You won't be able to open the imported databas
Всегда спрашивать перед тем, как производить автоввод
+
+
+ Заблокировать хранилище при сворачивании окна
+
+
+
+ Не требовать поворный ввод пароля когда он показывается
+ UnlockDatabaseWidget
@@ -1373,14 +1759,6 @@ This is a one-way migration. You won't be able to open the imported databas
main
-
-
- KeePassX — кросс-платформенный менеджер паролей
-
-
-
- имя файла открываемого хранилища паролей (*.kdbx)
- путь к своему файлу настроек
@@ -1389,5 +1767,17 @@ This is a one-way migration. You won't be able to open the imported databas
файл-ключ хранилища
+
+
+ имена(имя) файлов хранилищ(а) для открытия (*.kdbx)
+
+
+
+ KeePassXC — кросс-платформенный менеджер паролей
+
+
+
+ читать пароли хранилища из стандартного ввода "stdin"
+
\ No newline at end of file
diff --git a/share/windows/installer-header.bmp b/share/windows/installer-header.bmp
new file mode 100644
index 000000000..f9e17cae7
Binary files /dev/null and b/share/windows/installer-header.bmp differ
diff --git a/share/windows/installer-wizard.bmp b/share/windows/installer-wizard.bmp
new file mode 100644
index 000000000..76d04518f
Binary files /dev/null and b/share/windows/installer-wizard.bmp differ
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 30332c71e..8c3948842 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -218,6 +218,7 @@ target_link_libraries(${PROGNAME}
Qt5::Widgets
Qt5::Network
${GCRYPT_LIBRARIES}
+ ${GPGERROR_LIBRARIES}
${ZLIB_LIBRARIES})
set_target_properties(${PROGNAME} PROPERTIES ENABLE_EXPORTS ON)
@@ -257,9 +258,25 @@ if(APPLE)
endif()
if(MINGW)
- set(CPACK_GENERATOR "ZIP")
+ string(REPLACE "AMD" "Win" OUTPUT_FILE_POSTFIX "${CMAKE_HOST_SYSTEM_PROCESSOR}")
+ set(CPACK_GENERATOR "ZIP;NSIS")
set(CPACK_STRIP_FILES ON)
- set(CPACK_PACKAGE_FILE_NAME "${PROGNAME}-${KEEPASSXC_VERSION_NUM}")
+ set(CPACK_PACKAGE_FILE_NAME "${PROGNAME}-${KEEPASSXC_VERSION}-${OUTPUT_FILE_POSTFIX}")
+ set(CPACK_PACKAGE_INSTALL_DIRECTORY ${PROGNAME})
+ set(CPACK_PACKAGE_VERSION ${KEEPASSXC_VERSION})
+ set(CPACK_PACKAGE_VENDOR "${PROGNAME} Team")
+ string(REGEX REPLACE "/" "\\\\\\\\" CPACK_PACKAGE_ICON "${CMAKE_SOURCE_DIR}/share/windows/installer-header.bmp")
+ set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/LICENSE.GPL-2")
+ set(CPACK_NSIS_MUI_ICON "${CMAKE_SOURCE_DIR}/share/windows/keepassxc.ico")
+ set(CPACK_NSIS_MUI_UNIICON "${CPACK_NSIS_MUI_ICON}")
+ set(CPACK_NSIS_INSTALLED_ICON_NAME "\\\\${PROGNAME}.exe")
+ string(REGEX REPLACE "/" "\\\\\\\\" CPACK_NSIS_MUI_WELCOMEFINISHPAGE_BITMAP "${CMAKE_SOURCE_DIR}/share/windows/installer-wizard.bmp")
+ set(CPACK_NSIS_MUI_UNWELCOMEFINISHPAGE_BITMAP "${CPACK_NSIS_MUI_WELCOMEFINISHPAGE_BITMAP}")
+ set(CPACK_NSIS_CREATE_ICONS_EXTRA "CreateShortCut '$SMPROGRAMS\\\\$STARTMENU_FOLDER\\\\${PROGNAME}.lnk' '$INSTDIR\\\\${PROGNAME}.exe'")
+ set(CPACK_NSIS_DELETE_ICONS_EXTRA "Delete '$SMPROGRAMS\\\\$START_MENU\\\\${PROGNAME}.lnk'")
+ set(CPACK_NSIS_URL_INFO_ABOUT "https://keepassxc.org")
+ set(CPACK_NSIS_PACKAGE_NAME "${PROGNAME} v${KEEPASSXC_VERSION}")
+ set(CPACK_NSIS_MUI_FINISHPAGE_RUN "../${PROGNAME}.exe")
include(CPack)
install(CODE "
@@ -267,5 +284,9 @@ if(MINGW)
" COMPONENT Runtime)
include(DeployQt4)
- install_qt4_executable(${PROGNAME}.exe "qjpeg;qgif;qico;qtaccessiblewidgets")
+ install_qt4_executable(${PROGNAME}.exe)
+ add_custom_command(TARGET ${PROGNAME} POST_BUILD
+ COMMAND ${CMAKE_COMMAND} -E copy_if_different ${Qt5Core_DIR}/../../../share/qt5/plugins/platforms/qwindows$<$:d>.dll
+ $)
+ install(FILES $/qwindows$<$:d>.dll DESTINATION "platforms")
endif()
diff --git a/src/autotype/mac/AutoTypeMac.cpp b/src/autotype/mac/AutoTypeMac.cpp
index 90563a23a..e55c336cb 100644
--- a/src/autotype/mac/AutoTypeMac.cpp
+++ b/src/autotype/mac/AutoTypeMac.cpp
@@ -98,7 +98,9 @@ QString AutoTypePlatformMac::activeWindowTitle()
if (windowLayer(window) == 0) {
// First toplevel window in list (front to back order)
title = windowTitle(window);
- break;
+ if (!title.isEmpty()) {
+ break;
+ }
}
}
diff --git a/src/core/Entry.cpp b/src/core/Entry.cpp
index b2b06e7c8..46e2670ac 100644
--- a/src/core/Entry.cpp
+++ b/src/core/Entry.cpp
@@ -353,6 +353,12 @@ void Entry::setTitle(const QString& title)
void Entry::setUrl(const QString& url)
{
+ bool remove = url != m_attributes->value(EntryAttributes::URLKey) &&
+ (m_attributes->value(EntryAttributes::RememberCmdExecAttr) == "1" ||
+ m_attributes->value(EntryAttributes::RememberCmdExecAttr) == "0");
+ if (remove) {
+ m_attributes->remove(EntryAttributes::RememberCmdExecAttr);
+ }
m_attributes->set(EntryAttributes::URLKey, url, m_attributes->isProtected(EntryAttributes::URLKey));
}
@@ -508,7 +514,8 @@ Entry* Entry::clone(CloneFlags flags) const
entry->m_data.timeInfo.setLocationChanged(now);
}
-
+ if (flags & CloneRenameTitle)
+ entry->setTitle(entry->title() + tr(" - Clone"));
return entry;
}
diff --git a/src/core/Entry.h b/src/core/Entry.h
index 66b9362a6..ae60b596c 100644
--- a/src/core/Entry.h
+++ b/src/core/Entry.h
@@ -115,7 +115,8 @@ public:
CloneNoFlags = 0,
CloneNewUuid = 1, // generate a random uuid for the clone
CloneResetTimeInfo = 2, // set all TimeInfo attributes to the current time
- CloneIncludeHistory = 4 // clone the history items
+ CloneIncludeHistory = 4, // clone the history items
+ CloneRenameTitle = 8 // add "-Clone" after the original title
};
Q_DECLARE_FLAGS(CloneFlags, CloneFlag)
diff --git a/src/core/EntryAttributes.cpp b/src/core/EntryAttributes.cpp
index 195a8f14a..b633cae32 100644
--- a/src/core/EntryAttributes.cpp
+++ b/src/core/EntryAttributes.cpp
@@ -24,6 +24,7 @@ const QString EntryAttributes::URLKey = "URL";
const QString EntryAttributes::NotesKey = "Notes";
const QStringList EntryAttributes::DefaultAttributes(QStringList() << TitleKey << UserNameKey
<< PasswordKey << URLKey << NotesKey);
+const QString EntryAttributes::RememberCmdExecAttr = "_EXEC_CMD";
EntryAttributes::EntryAttributes(QObject* parent)
: QObject(parent)
diff --git a/src/core/EntryAttributes.h b/src/core/EntryAttributes.h
index 1c0ddaaeb..211b6d483 100644
--- a/src/core/EntryAttributes.h
+++ b/src/core/EntryAttributes.h
@@ -52,6 +52,7 @@ public:
static const QString URLKey;
static const QString NotesKey;
static const QStringList DefaultAttributes;
+ static const QString RememberCmdExecAttr;
static bool isDefaultAttribute(const QString& key);
Q_SIGNALS:
diff --git a/src/core/EntrySearcher.cpp b/src/core/EntrySearcher.cpp
index c0360a36c..01e152e2a 100644
--- a/src/core/EntrySearcher.cpp
+++ b/src/core/EntrySearcher.cpp
@@ -42,7 +42,11 @@ QList EntrySearcher::searchEntries(const QString& searchTerm, const Grou
const QList children = group->children();
for (Group* childGroup : children) {
if (childGroup->searchingEnabled() != Group::Disable) {
- searchResult.append(searchEntries(searchTerm, childGroup, caseSensitivity));
+ if (matchGroup(searchTerm, childGroup, caseSensitivity)) {
+ searchResult.append(childGroup->entriesRecursive());
+ } else {
+ searchResult.append(searchEntries(searchTerm, childGroup, caseSensitivity));
+ }
}
}
@@ -69,3 +73,21 @@ bool EntrySearcher::wordMatch(const QString& word, Entry* entry, Qt::CaseSensiti
entry->url().contains(word, caseSensitivity) ||
entry->notes().contains(word, caseSensitivity);
}
+
+bool EntrySearcher::matchGroup(const QString& searchTerm, const Group* group, Qt::CaseSensitivity caseSensitivity)
+{
+ const QStringList wordList = searchTerm.split(QRegExp("\\s"), QString::SkipEmptyParts);
+ for (const QString& word : wordList) {
+ if (!wordMatch(word, group, caseSensitivity)) {
+ return false;
+ }
+ }
+
+ return true;
+}
+
+bool EntrySearcher::wordMatch(const QString& word, const Group* group, Qt::CaseSensitivity caseSensitivity)
+{
+ return group->name().contains(word, caseSensitivity) ||
+ group->notes().contains(word, caseSensitivity);
+}
diff --git a/src/core/EntrySearcher.h b/src/core/EntrySearcher.h
index c7075dc9b..4e8d4eabe 100644
--- a/src/core/EntrySearcher.h
+++ b/src/core/EntrySearcher.h
@@ -33,6 +33,8 @@ private:
QList searchEntries(const QString& searchTerm, const Group* group, Qt::CaseSensitivity caseSensitivity);
QList matchEntry(const QString& searchTerm, Entry* entry, Qt::CaseSensitivity caseSensitivity);
bool wordMatch(const QString& word, Entry* entry, Qt::CaseSensitivity caseSensitivity);
+ bool matchGroup(const QString& searchTerm, const Group* group, Qt::CaseSensitivity caseSensitivity);
+ bool wordMatch(const QString& word, const Group* group, Qt::CaseSensitivity caseSensitivity);
};
#endif // KEEPASSX_ENTRYSEARCHER_H
diff --git a/src/format/KeePass2XmlReader.cpp b/src/format/KeePass2XmlReader.cpp
index dfb03bd06..dca387b19 100644
--- a/src/format/KeePass2XmlReader.cpp
+++ b/src/format/KeePass2XmlReader.cpp
@@ -388,7 +388,7 @@ void KeePass2XmlReader::parseBinaries()
QString id = attr.value("ID").toString();
QByteArray data;
- if (attr.value("Compressed").compare("True", Qt::CaseInsensitive) == 0) {
+ if (attr.value("Compressed").compare(QLatin1String("True"), Qt::CaseInsensitive) == 0) {
data = readCompressedBinary();
}
else {
diff --git a/src/gui/Application.cpp b/src/gui/Application.cpp
index d982f22ca..26d9d2283 100644
--- a/src/gui/Application.cpp
+++ b/src/gui/Application.cpp
@@ -17,12 +17,20 @@
*/
#include "Application.h"
+#include "MainWindow.h"
#include
#include
+#include
#include "autotype/AutoType.h"
+#if defined(Q_OS_UNIX)
+#include
+#include
+#include
+#endif
+
#if defined(Q_OS_UNIX) && !defined(Q_OS_OSX)
class XcbEventFilter : public QAbstractNativeEventFilter
{
@@ -65,12 +73,18 @@ public:
Application::Application(int& argc, char** argv)
: QApplication(argc, argv)
, m_mainWindow(nullptr)
+#ifdef Q_OS_UNIX
+ , m_unixSignalNotifier(nullptr)
+#endif
{
#if defined(Q_OS_UNIX) && !defined(Q_OS_OSX)
installNativeEventFilter(new XcbEventFilter());
#elif defined(Q_OS_WIN)
installNativeEventFilter(new WinEventFilter());
#endif
+#if defined(Q_OS_UNIX)
+ registerUnixSignals();
+#endif
}
void Application::setMainWindow(QWidget* mainWindow)
@@ -98,3 +112,57 @@ bool Application::event(QEvent* event)
return QApplication::event(event);
}
+
+#if defined(Q_OS_UNIX)
+int Application::unixSignalSocket[2];
+
+void Application::registerUnixSignals()
+{
+ int result = ::socketpair(AF_UNIX, SOCK_STREAM, 0, unixSignalSocket);
+ Q_ASSERT(0 == result);
+ if (0 != result) {
+ // do not register handles when socket creation failed, otherwise
+ // application will be unresponsive to signals such as SIGINT or SIGTERM
+ return;
+ }
+
+ QVector const handledSignals = { SIGQUIT, SIGINT, SIGTERM, SIGHUP };
+ for (auto s: handledSignals) {
+ struct sigaction sigAction;
+
+ sigAction.sa_handler = handleUnixSignal;
+ sigemptyset(&sigAction.sa_mask);
+ sigAction.sa_flags = 0 | SA_RESTART;
+ sigaction(s, &sigAction, nullptr);
+ }
+
+ m_unixSignalNotifier = new QSocketNotifier(unixSignalSocket[1], QSocketNotifier::Read, this);
+ connect(m_unixSignalNotifier, SIGNAL(activated(int)), this, SLOT(quitBySignal()));
+}
+
+void Application::handleUnixSignal(int sig)
+{
+ switch (sig) {
+ case SIGQUIT:
+ case SIGINT:
+ case SIGTERM:
+ {
+ char buf = 0;
+ ::write(unixSignalSocket[0], &buf, sizeof(buf));
+ return;
+ }
+ case SIGHUP:
+ return;
+ }
+}
+
+void Application::quitBySignal()
+{
+ m_unixSignalNotifier->setEnabled(false);
+ char buf;
+ ::read(unixSignalSocket[1], &buf, sizeof(buf));
+
+ if (nullptr != m_mainWindow)
+ static_cast(m_mainWindow)->appExit();
+}
+#endif
diff --git a/src/gui/Application.h b/src/gui/Application.h
index 149b61ddf..9bfe4d549 100644
--- a/src/gui/Application.h
+++ b/src/gui/Application.h
@@ -21,6 +21,8 @@
#include
+class QSocketNotifier;
+
class Application : public QApplication
{
Q_OBJECT
@@ -34,8 +36,23 @@ public:
Q_SIGNALS:
void openFile(const QString& filename);
+private Q_SLOTS:
+#if defined(Q_OS_UNIX)
+ void quitBySignal();
+#endif
+
private:
QWidget* m_mainWindow;
+
+#if defined(Q_OS_UNIX)
+ /**
+ * Register Unix signals such as SIGINT and SIGTERM for clean shutdown.
+ */
+ void registerUnixSignals();
+ QSocketNotifier* m_unixSignalNotifier;
+ static void handleUnixSignal(int sig);
+ static int unixSignalSocket[2];
+#endif
};
#endif // KEEPASSX_APPLICATION_H
diff --git a/src/gui/DatabaseTabWidget.cpp b/src/gui/DatabaseTabWidget.cpp
index af6907001..fed4535bb 100644
--- a/src/gui/DatabaseTabWidget.cpp
+++ b/src/gui/DatabaseTabWidget.cpp
@@ -246,7 +246,7 @@ bool DatabaseTabWidget::closeDatabase(Database* db)
QMessageBox::StandardButton result =
MessageBox::question(
this, tr("Close?"),
- tr("\"%1\" is in edit mode.\nDiscard changes and close anyway?").arg(dbName),
+ tr("\"%1\" is in edit mode.\nDiscard changes and close anyway?").arg(dbName.toHtmlEscaped()),
QMessageBox::Discard | QMessageBox::Cancel, QMessageBox::Cancel);
if (result == QMessageBox::Cancel) {
return false;
@@ -262,7 +262,7 @@ bool DatabaseTabWidget::closeDatabase(Database* db)
QMessageBox::StandardButton result =
MessageBox::question(
this, tr("Save changes?"),
- tr("\"%1\" was modified.\nSave changes?").arg(dbName),
+ tr("\"%1\" was modified.\nSave changes?").arg(dbName.toHtmlEscaped()),
QMessageBox::Yes | QMessageBox::Discard | QMessageBox::Cancel, QMessageBox::Yes);
if (result == QMessageBox::Yes) {
if (!saveDatabase(db)) {
diff --git a/src/gui/DatabaseWidget.cpp b/src/gui/DatabaseWidget.cpp
index 985374c49..4a1298deb 100644
--- a/src/gui/DatabaseWidget.cpp
+++ b/src/gui/DatabaseWidget.cpp
@@ -19,6 +19,7 @@
#include
#include
+#include
#include
#include
#include
@@ -312,8 +313,10 @@ void DatabaseWidget::cloneEntry()
return;
}
- Entry* entry = currentEntry->clone(Entry::CloneNewUuid | Entry::CloneResetTimeInfo);
+ Entry* entry = currentEntry->clone(Entry::CloneNewUuid | Entry::CloneResetTimeInfo | Entry::CloneRenameTitle);
entry->setGroup(currentEntry->group());
+ if (isInSearchMode())
+ search(m_lastSearchText);
m_entryView->setFocus();
m_entryView->setCurrentEntry(entry);
}
@@ -341,7 +344,7 @@ void DatabaseWidget::deleteEntries()
result = MessageBox::question(
this, tr("Delete entry?"),
tr("Do you really want to delete the entry \"%1\" for good?")
- .arg(selectedEntries.first()->title()),
+ .arg(selectedEntries.first()->title().toHtmlEscaped()),
QMessageBox::Yes | QMessageBox::No);
}
else {
@@ -365,7 +368,7 @@ void DatabaseWidget::deleteEntries()
result = MessageBox::question(
this, tr("Move entry to recycle bin?"),
tr("Do you really want to move entry \"%1\" to the recycle bin?")
- .arg(selectedEntries.first()->title()),
+ .arg(selectedEntries.first()->title().toHtmlEscaped()),
QMessageBox::Yes | QMessageBox::No);
}
else {
@@ -494,8 +497,46 @@ void DatabaseWidget::openUrlForEntry(Entry* entry)
}
if (urlString.startsWith("cmd://")) {
+ // check if decision to execute command was stored
+ if (entry->attributes()->hasKey(EntryAttributes::RememberCmdExecAttr)) {
+ if (entry->attributes()->value(EntryAttributes::RememberCmdExecAttr) == "1") {
+ QProcess::startDetached(urlString.mid(6));
+ }
+ return;
+ }
+
+ // otherwise ask user
if (urlString.length() > 6) {
- QProcess::startDetached(urlString.mid(6));
+ QString cmdTruncated = urlString.mid(6);
+ if (cmdTruncated.length() > 400)
+ cmdTruncated = cmdTruncated.left(400) + " […]";
+ QMessageBox msgbox(QMessageBox::Icon::Question,
+ tr("Execute command?"),
+ tr("Do you really want to execute the following command?