Release 2.2.1

- Corrected multiple snap issues [#934, #1011]
- Corrected multiple custom icon issues [#708, #719, #994]
- Corrected multiple Yubikey issues [#880]
- Fixed single instance preventing load on occasion [#997]
- Keep entry history when merging databases [#970]
- Prevent data loss if passwords were mismatched [#1007]
- Fixed crash after merge [#941]
- Added configurable auto-type default delay [#703]
- Unlock database dialog window comes to front [#663]
- Translation and compiling fixes
This commit is contained in:
Jonathan White 2017-10-01 11:01:17 -04:00
commit 2bce9c8add
No known key found for this signature in database
GPG Key ID: 440FC65F2E0C6E01
81 changed files with 14531 additions and 7109 deletions

View File

@ -1,6 +1,8 @@
language: cpp
sudo: required
dist: trusty
# FIXME : remove when (https://github.com/google/sanitizers/issues/837) is resolved.
group: deprecated-2017Q3
services: [docker]
os:

View File

@ -72,7 +72,7 @@ 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 LD_LIBRARY_PATH="..$(dirname ${QT_PLUGIN_PATH})/lib:\${LD_LIBRARY_PATH}"
export QT_PLUGIN_PATH="..${QT_PLUGIN_PATH}"
# unset XDG_DATA_DIRS to make tray icon work in Ubuntu Unity

View File

@ -1,3 +1,17 @@
2.2.1 (2017-10-01)
=========================
- Corrected multiple snap issues [#934, #1011]
- Corrected multiple custom icon issues [#708, #719, #994]
- Corrected multiple Yubikey issues [#880]
- Fixed single instance preventing load on occasion [#997]
- Keep entry history when merging databases [#970]
- Prevent data loss if passwords were mismatched [#1007]
- Fixed crash after merge [#941]
- Added configurable auto-type default delay [#703]
- Unlock database dialog window comes to front [#663]
- Translation and compiling fixes
2.2.0 (2017-06-23)
=========================

View File

@ -22,7 +22,7 @@ endif()
project(KeePassXC)
cmake_minimum_required(VERSION 2.8.12)
cmake_minimum_required(VERSION 3.1.0)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
@ -49,7 +49,7 @@ set(CMAKE_AUTOUIC ON)
set(KEEPASSXC_VERSION_MAJOR "2")
set(KEEPASSXC_VERSION_MINOR "2")
set(KEEPASSXC_VERSION_PATCH "0")
set(KEEPASSXC_VERSION_PATCH "1")
set(KEEPASSXC_VERSION "${KEEPASSXC_VERSION_MAJOR}.${KEEPASSXC_VERSION_MINOR}.${KEEPASSXC_VERSION_PATCH}")
if("${CMAKE_C_COMPILER}" MATCHES "clang$" OR "${CMAKE_C_COMPILER_ID}" STREQUAL "Clang")
@ -225,6 +225,8 @@ find_package(Gcrypt 1.6.0 REQUIRED)
find_package(ZLIB REQUIRED)
set(CMAKE_REQUIRED_INCLUDES ${ZLIB_INCLUDE_DIR})
check_cxx_source_compiles("
#include <zlib.h>

View File

@ -21,7 +21,13 @@ RUN set -x \
&& apt-get install --yes software-properties-common
RUN set -x \
&& add-apt-repository --yes ppa:beineri/opt-qt58-trusty
&& add-apt-repository ppa:george-edison55/cmake-3.x
ENV QT_VERSION=qt59
RUN set -x \
&& add-apt-repository --yes ppa:beineri/opt-${QT_VERSION}-trusty
RUN set -x \
&& apt-get update \
@ -29,9 +35,9 @@ RUN set -x \
g++ \
cmake \
libgcrypt20-dev \
qt58base \
qt58tools \
qt58x11extras \
${QT_VERSION}base \
${QT_VERSION}tools \
${QT_VERSION}x11extras \
libxi-dev \
libxtst-dev \
zlib1g-dev \
@ -50,7 +56,7 @@ VOLUME /keepassxc/src
VOLUME /keepassxc/out
WORKDIR /keepassxc
ENV CMAKE_PREFIX_PATH=/opt/qt58/lib/cmake
ENV LD_LIBRARY_PATH=/opt/qt58/lib
ENV CMAKE_PREFIX_PATH=/opt/${QT_VERSION}/lib/cmake
ENV LD_LIBRARY_PATH=/opt/${QT_VERSION}/lib
RUN set -x \
&& echo /opt/qt58/lib > /etc/ld.so.conf.d/qt58.conf
&& echo /opt/${QT_VERSION}/lib > /etc/ld.so.conf.d/${QT_VERSION}.conf

201
LICENSE.APACHE-2.0 Normal file
View File

@ -0,0 +1,201 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "{}"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright {yyyy} {name of copyright owner}
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

View File

@ -525,8 +525,7 @@ build() {
done
init
performChecks
checkWorkingTreeClean
OUTPUT_DIR="$(realpath "$OUTPUT_DIR")"

File diff suppressed because it is too large Load Diff

View File

@ -3,129 +3,94 @@
<name>AboutDialog</name>
<message>
<source>About KeePassXC</source>
<translation type="unfinished"/>
<translation>Om KeePassXC</translation>
</message>
<message>
<source>About</source>
<translation>Om</translation>
</message>
<message>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Report bugs at: &lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/issues&quot;&gt;&lt;span style=&quot;text-decoration: underline; color:#0000ff;&quot;&gt;https://github.com&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"/>
</message>
<message>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"/>
</message>
<message>
<source>&lt;html&gt;&lt;head&gt;&lt;style&gt;li {font-size: 10pt}&lt;/style&gt;&lt;/head&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;Project Maintainers:&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;droidmonkey&lt;/li&gt;&lt;li&gt;phoerious&lt;/li&gt;&lt;li&gt;TheZ3ro&lt;/li&gt;&lt;li&gt;louib&lt;/li&gt;&lt;li&gt;Weslly&lt;/li&gt;&lt;li&gt;debfx (KeePassX)&lt;/li&gt;&lt;/ul&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"/>
</message>
<message>
<source>Contributors</source>
<translation type="unfinished"/>
</message>
<message>
<source>&lt;html&gt;&lt;body&gt;
&lt;p style=&quot;font-size:x-large; font-weight:600;&quot;&gt;Code:&lt;/p&gt;
&lt;ul&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;debfx (KeePassX)&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;BlueIce (KeePassX)&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;droidmonkey&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;phoerious&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;TheZ3ro&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;louib&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;weslly&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;keithbennett (KeePassHTTP)&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;Typz (KeePassHTTP)&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;denk-mal (KeePassHTTP)&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;kylemanna (YubiKey)&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;seatedscribe (CSV Importer)&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;pgalves (Inline Messages)&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;font-size:x-large; font-weight:600;&quot;&gt;Translations:&lt;/p&gt;
&lt;ul&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Chinese:&lt;/span&gt; Biggulu, ligyxy, BestSteve&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Czech:&lt;/span&gt; pavelb, JosefVitu&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Dutch:&lt;/span&gt; Vistaus, KnooL, apie&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Finnish:&lt;/span&gt; MawKKe&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;French:&lt;/span&gt; Scrat15, frgnca, gilbsgilbs, gtalbot, iannick, kyodev, logut&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;German:&lt;/span&gt; Calyrx, DavidHamburg, antsas, codejunky, jensrutschmann, montilo, omnisome4, origin_de, pcrcoding, phoerious, rgloor, vlenzer&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Greek:&lt;/span&gt; nplatis&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Italian:&lt;/span&gt; TheZ3ro, FranzMari, Mte90, tosky&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Kazakh:&lt;/span&gt; sotrud_nik&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Lithuanian:&lt;/span&gt; Moo&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Polish:&lt;/span&gt; konradmb, mrerexx&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Portuguese: &lt;/span&gt;vitor895, weslly, American_Jesus, mihai.ile&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Russian:&lt;/span&gt; vsvyatski, KekcuHa, wkill95&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Spanish:&lt;/span&gt; EdwardNavarro, antifaz, piegope, pquin, vsvyatski&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Swedish:&lt;/span&gt; henziger&lt;/li&gt;
&lt;/ul&gt;
&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"/>
</message>
<message>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;&lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/graphs/contributors&quot;&gt;&lt;span style=&quot; font-size:10pt; text-decoration: underline; color:#0000ff;&quot;&gt;See Contributions on GitHub&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"/>
<translation>Bidragsydere</translation>
</message>
<message>
<source>Debug Info</source>
<translation type="unfinished"/>
</message>
<message>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Include the following information whenever you report a bug:&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"/>
<translation>Fejlsøgningsinformation</translation>
</message>
<message>
<source>Copy to clipboard</source>
<translation type="unfinished"/>
<translation>Kopier til udklipsholder</translation>
</message>
<message>
<source>Version %1
</source>
<translation type="unfinished"/>
<translation>Version %1
</translation>
</message>
<message>
<source>Revision: %1</source>
<translation type="unfinished"/>
<translation>Revision: %1</translation>
</message>
<message>
<source>Libraries:</source>
<translation type="unfinished"/>
<translation>Biblioteker:</translation>
</message>
<message>
<source>Operating system: %1
CPU architecture: %2
Kernel: %3 %4</source>
<translation type="unfinished"/>
<translation>Operativsystem: %1
CPU-arkitektur: %2
Kerne: %3 %4</translation>
</message>
<message>
<source>Enabled extensions:</source>
<translation type="unfinished"/>
<translation>Aktiverede udvidelser:</translation>
</message>
<message>
<source>Report bugs at: &lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/issues&quot; style=&quot;text-decoration: underline;&quot;&gt;https://github.com&lt;/a&gt;</source>
<translation>Rapportér fejl : &lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/issues&quot; style=&quot;text-decoration: underline;&quot;&gt;https://github.com&lt;/a&gt;</translation>
</message>
<message>
<source>KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3.</source>
<translation>KeePassXC distribueres under betingelserne i GNU General Public License (GPL) version 2 eller (efter eget valg) version 3.</translation>
</message>
<message>
<source>Project Maintainers:</source>
<translation>Projektet vedligeholdes af:</translation>
</message>
<message>
<source>&lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/graphs/contributors&quot;&gt;See Contributions on GitHub&lt;/a&gt;</source>
<translation>&lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/graphs/contributors&quot;&gt;Se bidrag på GitHub&lt;/a&gt;</translation>
</message>
<message>
<source>Include the following information whenever you report a bug:</source>
<translation>Inkludér følgende information når du indrapporterer en fejl:</translation>
</message>
</context>
<context>
<name>AccessControlDialog</name>
<message>
<source>Remember this decision</source>
<translation type="unfinished"/>
<translation>Husk dette valg</translation>
</message>
<message>
<source>Allow</source>
<translation type="unfinished"/>
<translation>Tillad</translation>
</message>
<message>
<source>Deny</source>
<translation type="unfinished"/>
<translation>Afvis</translation>
</message>
<message>
<source>%1 has requested access to passwords for the following item(s).
Please select whether you want to allow access.</source>
<translation type="unfinished"/>
<translation>%1 har forespurgt adgang til kodeord tilhørende disse element(er).
Vælg venligst hvorvidt du vil tillade denne adgang.</translation>
</message>
<message>
<source>KeePassXC HTTP Confirm Access</source>
<translation type="unfinished"/>
<translation>KeePassXC HTTP Bekræft Adgang</translation>
</message>
</context>
<context>
@ -136,7 +101,7 @@ Please select whether you want to allow access.</source>
</message>
<message>
<source>Auto-Type - KeePassXC</source>
<translation type="unfinished"/>
<translation>Auto-Indsæt - KeePassXC</translation>
</message>
</context>
<context>
@ -162,7 +127,7 @@ Please select whether you want to allow access.</source>
</message>
<message>
<source>Auto-Type - KeePassXC</source>
<translation type="unfinished"/>
<translation>Auto-Indsæt - KeePassXC</translation>
</message>
</context>
<context>
@ -231,57 +196,57 @@ Please select whether you want to allow access.</source>
</message>
<message>
<source>Refresh</source>
<translation type="unfinished"/>
<translation>Genopfrisk</translation>
</message>
<message>
<source>Empty password</source>
<translation type="unfinished"/>
<translation>Tomt kodeord</translation>
</message>
<message>
<source>Changing master key failed: no YubiKey inserted.</source>
<translation type="unfinished"/>
<translation>Kunne ikke skifte hovednøgle: ingen YubiKey indsat.</translation>
</message>
</context>
<context>
<name>CloneDialog</name>
<message>
<source>Clone Options</source>
<translation type="unfinished"/>
</message>
<message>
<source>Append &apos; - Copy&apos; to title</source>
<translation type="unfinished"/>
<translation>Kloningsindstillinger</translation>
</message>
<message>
<source>Replace username and password with references</source>
<translation type="unfinished"/>
<translation>Udskift brugernavn og kodeord med referencer</translation>
</message>
<message>
<source>Copy history</source>
<translation type="unfinished"/>
<translation>Kopier historik</translation>
</message>
<message>
<source>Append &apos; - Clone&apos; to title</source>
<translation>Tilføj &apos; - Clone&apos; til titel</translation>
</message>
</context>
<context>
<name>CsvImportWidget</name>
<message>
<source>Import CSV fields</source>
<translation type="unfinished"/>
<translation>Importér CSV-felter</translation>
</message>
<message>
<source>filename</source>
<translation type="unfinished"/>
<translation>filnavn</translation>
</message>
<message>
<source>size, rows, columns</source>
<translation type="unfinished"/>
<translation>størrelse, rækker, kolonner</translation>
</message>
<message>
<source>Encoding</source>
<translation type="unfinished"/>
<translation>Encoding</translation>
</message>
<message>
<source>Codec</source>
<translation type="unfinished"/>
<translation>Codec</translation>
</message>
<message>
<source>Text is qualified by</source>
@ -289,11 +254,11 @@ Please select whether you want to allow access.</source>
</message>
<message>
<source>Fields are separated by</source>
<translation type="unfinished"/>
<translation>Felter separeres med</translation>
</message>
<message>
<source>Comments start with</source>
<translation type="unfinished"/>
<translation>Kommentarer starter med</translation>
</message>
<message>
<source>First record has field names</source>
@ -309,39 +274,39 @@ Please select whether you want to allow access.</source>
</message>
<message>
<source>Preview</source>
<translation type="unfinished"/>
<translation>Forhåndsvisning</translation>
</message>
<message>
<source>Column layout</source>
<translation type="unfinished"/>
<translation>Kolonnelayout</translation>
</message>
<message>
<source>Not present in CSV file</source>
<translation type="unfinished"/>
<translation>Ikke til stede i CSV-fil</translation>
</message>
<message>
<source>Empty fieldname </source>
<translation type="unfinished"/>
<translation>Tomt feltnavn</translation>
</message>
<message>
<source>column </source>
<translation type="unfinished"/>
<translation>kolonne</translation>
</message>
<message>
<source>Imported from CSV file</source>
<translation type="unfinished"/>
<translation>Importeret fra CSV-fil</translation>
</message>
<message>
<source>Original data: </source>
<translation type="unfinished"/>
<translation>Original data:</translation>
</message>
<message>
<source>Error(s) detected in CSV file !</source>
<translation type="unfinished"/>
<translation>Fejl detekteret i CSV-fil !</translation>
</message>
<message>
<source> more messages skipped]</source>
<translation type="unfinished"/>
<translation>flere beskeder blev sprunget over]</translation>
</message>
<message>
<source>Error</source>
@ -357,7 +322,7 @@ Please select whether you want to allow access.</source>
<name>CsvImportWizard</name>
<message>
<source>Import CSV file</source>
<translation type="unfinished"/>
<translation>Importér CSV-fil</translation>
</message>
<message>
<source>Error</source>
@ -372,15 +337,15 @@ Please select whether you want to allow access.</source>
<name>CsvParserModel</name>
<message>
<source> byte, </source>
<translation type="unfinished"/>
<translation>byte,</translation>
</message>
<message>
<source> rows, </source>
<translation type="unfinished"/>
<translation>rækker,</translation>
</message>
<message>
<source> columns</source>
<translation type="unfinished"/>
<translation>kolonner</translation>
</message>
</context>
<context>
@ -423,7 +388,7 @@ Please select whether you want to allow access.</source>
</message>
<message>
<source>Refresh</source>
<translation type="unfinished"/>
<translation>Genopfrisk</translation>
</message>
<message>
<source>Challenge Response:</source>
@ -503,19 +468,19 @@ Du kan gemme den nu.</translation>
</message>
<message>
<source>Use recycle bin</source>
<translation type="unfinished"/>
<translation>Brug papirkurv</translation>
</message>
<message>
<source>AES: 256 Bit (default)</source>
<translation type="unfinished"/>
<translation>AES: 256 Bit (standard)</translation>
</message>
<message>
<source>Twofish: 256 Bit</source>
<translation type="unfinished"/>
<translation>Twofish: 256 Bit</translation>
</message>
<message>
<source>Algorithm:</source>
<translation type="unfinished"/>
<translation>Algoritme:</translation>
</message>
</context>
<context>
@ -630,38 +595,41 @@ Kassér ændringer og luk alligevel?</translation>
</message>
<message>
<source>Merge database</source>
<translation type="unfinished"/>
<translation>Flet database</translation>
</message>
<message>
<source>The database you are trying to save as is locked by another instance of KeePassXC.
Do you want to save it anyway?</source>
<translation type="unfinished"/>
<translation>Databasen som du prøver at gemme er låst af en anden instans af KeePassXC.
Ønsker du alligevel at gemme den?</translation>
</message>
<message>
<source>Passwords</source>
<translation type="unfinished"/>
<translation>Kodeord</translation>
</message>
<message>
<source>Database already opened</source>
<translation type="unfinished"/>
<translation>Database er allerede åben</translation>
</message>
<message>
<source>The database you are trying to open is locked by another instance of KeePassXC.
Do you want to open it anyway?</source>
<translation type="unfinished"/>
<translation>Databasen som du prøver at gemme er låst af en anden instans af KeePassXC.
Ønsker du alligevel at åbne den?</translation>
</message>
<message>
<source>Open read-only</source>
<translation type="unfinished"/>
<translation>Åbn skrivebeskyttet</translation>
</message>
<message>
<source>File opened in read only mode.</source>
<translation type="unfinished"/>
<translation>Fil åbnet i skrivebeskyttet tilstand</translation>
</message>
<message>
<source>Open CSV file</source>
<translation type="unfinished"/>
<translation>Åbn CSV-fil</translation>
</message>
</context>
<context>
@ -708,7 +676,7 @@ Do you want to open it anyway?</source>
</message>
<message>
<source>Move entry to recycle bin?</source>
<translation type="unfinished"/>
<translation>Flyt post til papirkurven?</translation>
</message>
<message>
<source>Do you really want to move entry &quot;%1&quot; to the recycle bin?</source>
@ -716,7 +684,7 @@ Do you want to open it anyway?</source>
</message>
<message>
<source>Searching...</source>
<translation type="unfinished"/>
<translation>Søger...</translation>
</message>
<message>
<source>No current database.</source>
@ -1091,10 +1059,6 @@ Do you want to open it anyway?</source>
<source>Select Image</source>
<translation>Vælg Billede</translation>
</message>
<message>
<source>Error</source>
<translation>Fejl</translation>
</message>
<message>
<source>Download favicon</source>
<translation type="unfinished"/>
@ -1123,6 +1087,14 @@ Do you want to open it anyway?</source>
<source>This icon is used by %1 entries, and will be replaced by the default icon. Are you sure you want to delete it?</source>
<translation type="unfinished"/>
</message>
<message>
<source>Hint: You can enable Google as a fallback under Tools&gt;Settings&gt;Security</source>
<translation type="unfinished"/>
</message>
<message>
<source>Custom icon already exists</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>EditWidgetProperties</name>
@ -1330,17 +1302,14 @@ Do you want to open it anyway?</source>
<translation>Kan ikke beregne hovednøgle</translation>
</message>
<message>
<source>The selected file is an old KeePass 1 database (.kdb).
You can import it by clicking on Database &gt; 'Import KeePass 1 database'.
This is a one-way migration. You won&apos;t be able to open the imported database with the old KeePassX 0.4 version.</source>
<translation>Den valgte fil er en gammel KeePass 1 databasefil (.kdb).
Du kan importere den ved at klikke Database &gt; &apos;Importér KeePass 1 database&apos;.
Dette er en envejs konvertering. Du vil ikke være i stand til at åbne den importerede database med den gamle KeePassX 0.4 version.</translation>
<source>Unable to issue challenge-response.</source>
<translation type="unfinished"/>
</message>
<message>
<source>Unable to issue challenge-response.</source>
<source>The selected file is an old KeePass 1 database (.kdb).
You can import it by clicking on Database &gt; 'Import KeePass 1 database...'.
This is a one-way migration. You won&apos;t be able to open the imported database with the old KeePassX 0.4 version.</source>
<translation type="unfinished"/>
</message>
</context>
@ -1362,6 +1331,10 @@ Dette er en envejs konvertering. Du vil ikke være i stand til at åbne den impo
<source>Another instance of KeePassXC is already running.</source>
<translation type="unfinished"/>
</message>
<message>
<source>Existing single-instance lock file is invalid. Launching new instance.</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>MainWindow</name>
@ -1417,10 +1390,6 @@ Dette er en envejs konvertering. Du vil ikke være i stand til at åbne den impo
<source>&amp;Recent databases</source>
<translation type="unfinished"/>
</message>
<message>
<source>He&amp;lp</source>
<translation type="unfinished"/>
</message>
<message>
<source>E&amp;ntries</source>
<translation type="unfinished"/>
@ -1445,10 +1414,6 @@ Dette er en envejs konvertering. Du vil ikke være i stand til at åbne den impo
<source>&amp;About</source>
<translation type="unfinished"/>
</message>
<message>
<source>&amp;Open database</source>
<translation type="unfinished"/>
</message>
<message>
<source>&amp;Save database</source>
<translation type="unfinished"/>
@ -1489,14 +1454,6 @@ Dette er en envejs konvertering. Du vil ikke være i stand til at åbne den impo
<source>&amp;Delete group</source>
<translation type="unfinished"/>
</message>
<message>
<source>Sa&amp;ve database as</source>
<translation type="unfinished"/>
</message>
<message>
<source>Change &amp;master key</source>
<translation type="unfinished"/>
</message>
<message>
<source>&amp;Database settings</source>
<translation type="unfinished"/>
@ -1509,10 +1466,6 @@ Dette er en envejs konvertering. Du vil ikke være i stand til at åbne den impo
<source>Timed one-time password</source>
<translation type="unfinished"/>
</message>
<message>
<source>Setup TOTP</source>
<translation type="unfinished"/>
</message>
<message>
<source>Copy &amp;TOTP</source>
<translation type="unfinished"/>
@ -1561,14 +1514,6 @@ Dette er en envejs konvertering. Du vil ikke være i stand til at åbne den impo
<source>&amp;Notes</source>
<translation type="unfinished"/>
</message>
<message>
<source>&amp;Export to CSV file</source>
<translation type="unfinished"/>
</message>
<message>
<source>Re&amp;pair database</source>
<translation type="unfinished"/>
</message>
<message>
<source>Password Generator</source>
<translation type="unfinished"/>
@ -1589,14 +1534,6 @@ Dette er en envejs konvertering. Du vil ikke være i stand til at åbne den impo
<source>&amp;Tools</source>
<translation type="unfinished"/>
</message>
<message>
<source>Import KeePass 1 database</source>
<translation>Importér KeePass 1 database</translation>
</message>
<message>
<source>Import CSV file</source>
<translation type="unfinished"/>
</message>
<message>
<source>Empty recycle bin</source>
<translation type="unfinished"/>
@ -1613,6 +1550,42 @@ Dette er en envejs konvertering. Du vil ikke være i stand til at åbne den impo
<source>Please touch the button on your YubiKey!</source>
<translation type="unfinished"/>
</message>
<message>
<source>&amp;Help</source>
<translation type="unfinished"/>
</message>
<message>
<source>&amp;Open database...</source>
<translation type="unfinished"/>
</message>
<message>
<source>Sa&amp;ve database as...</source>
<translation type="unfinished"/>
</message>
<message>
<source>Change &amp;master key...</source>
<translation type="unfinished"/>
</message>
<message>
<source>&amp;Export to CSV file...</source>
<translation type="unfinished"/>
</message>
<message>
<source>Import KeePass 1 database...</source>
<translation type="unfinished"/>
</message>
<message>
<source>Import CSV file...</source>
<translation type="unfinished"/>
</message>
<message>
<source>Re&amp;pair database...</source>
<translation type="unfinished"/>
</message>
<message>
<source>Set up TOTP...</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>OptionDialog</name>
@ -2159,6 +2132,18 @@ give it a unique name to identify and accept it.</source>
<source>Always ask before performing Auto-Type</source>
<translation type="unfinished"/>
</message>
<message>
<source>Auto-Type delay</source>
<translation type="unfinished"/>
</message>
<message>
<source> ms</source>
<translation type="unfinished"/>
</message>
<message>
<source>Start only a single instance of KeePassXC</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>SettingsWidgetSecurity</name>
@ -2198,6 +2183,14 @@ give it a unique name to identify and accept it.</source>
<source>Lock databases when session is locked or lid is closed</source>
<translation type="unfinished"/>
</message>
<message>
<source>Privacy</source>
<translation type="unfinished"/>
</message>
<message>
<source>Use Google as fallback for downloading website icons</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>SetupTotpDialog</name>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -11,73 +11,14 @@
<source>About</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Report bugs at: &lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/issues&quot;&gt;&lt;span style=&quot;text-decoration: underline; color:#0000ff;&quot;&gt;https://github.com&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;html&gt;&lt;head&gt;&lt;style&gt;li {font-size: 10pt}&lt;/style&gt;&lt;/head&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;Project Maintainers:&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;droidmonkey&lt;/li&gt;&lt;li&gt;phoerious&lt;/li&gt;&lt;li&gt;TheZ3ro&lt;/li&gt;&lt;li&gt;louib&lt;/li&gt;&lt;li&gt;Weslly&lt;/li&gt;&lt;li&gt;debfx (KeePassX)&lt;/li&gt;&lt;/ul&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Contributors</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;html&gt;&lt;body&gt;
&lt;p style=&quot;font-size:x-large; font-weight:600;&quot;&gt;Code:&lt;/p&gt;
&lt;ul&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;debfx (KeePassX)&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;BlueIce (KeePassX)&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;droidmonkey&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;phoerious&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;TheZ3ro&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;louib&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;weslly&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;keithbennett (KeePassHTTP)&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;Typz (KeePassHTTP)&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;denk-mal (KeePassHTTP)&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;kylemanna (YubiKey)&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;seatedscribe (CSV Importer)&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;pgalves (Inline Messages)&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;font-size:x-large; font-weight:600;&quot;&gt;Translations:&lt;/p&gt;
&lt;ul&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Chinese:&lt;/span&gt; Biggulu, ligyxy, BestSteve&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Czech:&lt;/span&gt; pavelb, JosefVitu&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Dutch:&lt;/span&gt; Vistaus, KnooL, apie&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Finnish:&lt;/span&gt; MawKKe&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;French:&lt;/span&gt; Scrat15, frgnca, gilbsgilbs, gtalbot, iannick, kyodev, logut&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;German:&lt;/span&gt; Calyrx, DavidHamburg, antsas, codejunky, jensrutschmann, montilo, omnisome4, origin_de, pcrcoding, phoerious, rgloor, vlenzer&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Greek:&lt;/span&gt; nplatis&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Italian:&lt;/span&gt; TheZ3ro, FranzMari, Mte90, tosky&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Kazakh:&lt;/span&gt; sotrud_nik&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Lithuanian:&lt;/span&gt; Moo&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Polish:&lt;/span&gt; konradmb, mrerexx&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Portuguese: &lt;/span&gt;vitor895, weslly, American_Jesus, mihai.ile&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Russian:&lt;/span&gt; vsvyatski, KekcuHa, wkill95&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Spanish:&lt;/span&gt; EdwardNavarro, antifaz, piegope, pquin, vsvyatski&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Swedish:&lt;/span&gt; henziger&lt;/li&gt;
&lt;/ul&gt;
&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;&lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/graphs/contributors&quot;&gt;&lt;span style=&quot; font-size:10pt; text-decoration: underline; color:#0000ff;&quot;&gt;See Contributions on GitHub&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Debug Info</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Include the following information whenever you report a bug:&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Copy to clipboard</source>
<translation type="unfinished"></translation>
@ -105,6 +46,26 @@ Kernel: %3 %4</source>
<source>Enabled extensions:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Report bugs at: &lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/issues&quot; style=&quot;text-decoration: underline;&quot;&gt;https://github.com&lt;/a&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Project Maintainers:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/graphs/contributors&quot;&gt;See Contributions on GitHub&lt;/a&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Include the following information whenever you report a bug:</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>AccessControlDialog</name>
@ -249,10 +210,6 @@ Please select whether you want to allow access.</source>
<source>Clone Options</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Append &apos; - Copy&apos; to title</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Replace username and password with references</source>
<translation type="unfinished"></translation>
@ -261,6 +218,10 @@ Please select whether you want to allow access.</source>
<source>Copy history</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Append &apos; - Clone&apos; to title</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>CsvImportWidget</name>
@ -1094,10 +1055,6 @@ Do you want to open it anyway?</source>
<source>Select Image</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Download favicon</source>
<translation type="unfinished"></translation>
@ -1126,6 +1083,14 @@ Do you want to open it anyway?</source>
<source>This icon is used by %1 entries, and will be replaced by the default icon. Are you sure you want to delete it?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Hint: You can enable Google as a fallback under Tools&gt;Settings&gt;Security</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Custom icon already exists</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>EditWidgetProperties</name>
@ -1333,14 +1298,14 @@ Do you want to open it anyway?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The selected file is an old KeePass 1 database (.kdb).
You can import it by clicking on Database &gt; &apos;Import KeePass 1 database&apos;.
This is a one-way migration. You won&apos;t be able to open the imported database with the old KeePassX 0.4 version.</source>
<source>Unable to issue challenge-response.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Unable to issue challenge-response.</source>
<source>The selected file is an old KeePass 1 database (.kdb).
You can import it by clicking on Database &gt; &apos;Import KeePass 1 database...&apos;.
This is a one-way migration. You won&apos;t be able to open the imported database with the old KeePassX 0.4 version.</source>
<translation type="unfinished"></translation>
</message>
</context>
@ -1362,6 +1327,10 @@ This is a one-way migration. You won&apos;t be able to open the imported databas
<source>Another instance of KeePassXC is already running.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Existing single-instance lock file is invalid. Launching new instance.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MainWindow</name>
@ -1417,10 +1386,6 @@ This is a one-way migration. You won&apos;t be able to open the imported databas
<source>&amp;Recent databases</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>He&amp;lp</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>E&amp;ntries</source>
<translation type="unfinished"></translation>
@ -1445,10 +1410,6 @@ This is a one-way migration. You won&apos;t be able to open the imported databas
<source>&amp;About</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Open database</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Save database</source>
<translation type="unfinished"></translation>
@ -1489,14 +1450,6 @@ This is a one-way migration. You won&apos;t be able to open the imported databas
<source>&amp;Delete group</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Sa&amp;ve database as</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Change &amp;master key</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Database settings</source>
<translation type="unfinished"></translation>
@ -1509,10 +1462,6 @@ This is a one-way migration. You won&apos;t be able to open the imported databas
<source>Timed one-time password</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Setup TOTP</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Copy &amp;TOTP</source>
<translation type="unfinished"></translation>
@ -1561,14 +1510,6 @@ This is a one-way migration. You won&apos;t be able to open the imported databas
<source>&amp;Notes</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Export to CSV file</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Re&amp;pair database</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Password Generator</source>
<translation type="unfinished"></translation>
@ -1589,14 +1530,6 @@ This is a one-way migration. You won&apos;t be able to open the imported databas
<source>&amp;Tools</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Import KeePass 1 database</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Import CSV file</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Empty recycle bin</source>
<translation type="unfinished"></translation>
@ -1613,6 +1546,42 @@ This is a one-way migration. You won&apos;t be able to open the imported databas
<source>Please touch the button on your YubiKey!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Help</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Open database...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Sa&amp;ve database as...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Change &amp;master key...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Export to CSV file...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Import KeePass 1 database...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Import CSV file...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Re&amp;pair database...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Set up TOTP...</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>OptionDialog</name>
@ -2159,6 +2128,18 @@ give it a unique name to identify and accept it.</source>
<source>Always ask before performing Auto-Type</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Auto-Type delay</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> ms</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Start only a single instance of KeePassXC</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SettingsWidgetSecurity</name>
@ -2198,6 +2179,14 @@ give it a unique name to identify and accept it.</source>
<source>Lock databases when session is locked or lid is closed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Privacy</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Use Google as fallback for downloading website icons</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SetupTotpDialog</name>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -9,73 +9,14 @@
<source>About</source>
<translation type="unfinished"/>
</message>
<message>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Report bugs at: &lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/issues&quot;&gt;&lt;span style=&quot;text-decoration: underline; color:#0000ff;&quot;&gt;https://github.com&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"/>
</message>
<message>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"/>
</message>
<message>
<source>&lt;html&gt;&lt;head&gt;&lt;style&gt;li {font-size: 10pt}&lt;/style&gt;&lt;/head&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;Project Maintainers:&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;droidmonkey&lt;/li&gt;&lt;li&gt;phoerious&lt;/li&gt;&lt;li&gt;TheZ3ro&lt;/li&gt;&lt;li&gt;louib&lt;/li&gt;&lt;li&gt;Weslly&lt;/li&gt;&lt;li&gt;debfx (KeePassX)&lt;/li&gt;&lt;/ul&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"/>
</message>
<message>
<source>Contributors</source>
<translation type="unfinished"/>
</message>
<message>
<source>&lt;html&gt;&lt;body&gt;
&lt;p style=&quot;font-size:x-large; font-weight:600;&quot;&gt;Code:&lt;/p&gt;
&lt;ul&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;debfx (KeePassX)&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;BlueIce (KeePassX)&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;droidmonkey&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;phoerious&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;TheZ3ro&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;louib&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;weslly&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;keithbennett (KeePassHTTP)&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;Typz (KeePassHTTP)&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;denk-mal (KeePassHTTP)&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;kylemanna (YubiKey)&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;seatedscribe (CSV Importer)&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;pgalves (Inline Messages)&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;font-size:x-large; font-weight:600;&quot;&gt;Translations:&lt;/p&gt;
&lt;ul&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Chinese:&lt;/span&gt; Biggulu, ligyxy, BestSteve&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Czech:&lt;/span&gt; pavelb, JosefVitu&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Dutch:&lt;/span&gt; Vistaus, KnooL, apie&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Finnish:&lt;/span&gt; MawKKe&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;French:&lt;/span&gt; Scrat15, frgnca, gilbsgilbs, gtalbot, iannick, kyodev, logut&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;German:&lt;/span&gt; Calyrx, DavidHamburg, antsas, codejunky, jensrutschmann, montilo, omnisome4, origin_de, pcrcoding, phoerious, rgloor, vlenzer&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Greek:&lt;/span&gt; nplatis&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Italian:&lt;/span&gt; TheZ3ro, FranzMari, Mte90, tosky&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Kazakh:&lt;/span&gt; sotrud_nik&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Lithuanian:&lt;/span&gt; Moo&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Polish:&lt;/span&gt; konradmb, mrerexx&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Portuguese: &lt;/span&gt;vitor895, weslly, American_Jesus, mihai.ile&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Russian:&lt;/span&gt; vsvyatski, KekcuHa, wkill95&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Spanish:&lt;/span&gt; EdwardNavarro, antifaz, piegope, pquin, vsvyatski&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Swedish:&lt;/span&gt; henziger&lt;/li&gt;
&lt;/ul&gt;
&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"/>
</message>
<message>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;&lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/graphs/contributors&quot;&gt;&lt;span style=&quot; font-size:10pt; text-decoration: underline; color:#0000ff;&quot;&gt;See Contributions on GitHub&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"/>
</message>
<message>
<source>Debug Info</source>
<translation type="unfinished"/>
</message>
<message>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Include the following information whenever you report a bug:&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"/>
</message>
<message>
<source>Copy to clipboard</source>
<translation type="unfinished"/>
@ -103,6 +44,26 @@ Kernel: %3 %4</source>
<source>Enabled extensions:</source>
<translation type="unfinished"/>
</message>
<message>
<source>Report bugs at: &lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/issues&quot; style=&quot;text-decoration: underline;&quot;&gt;https://github.com&lt;/a&gt;</source>
<translation type="unfinished"/>
</message>
<message>
<source>KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3.</source>
<translation type="unfinished"/>
</message>
<message>
<source>Project Maintainers:</source>
<translation type="unfinished"/>
</message>
<message>
<source>&lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/graphs/contributors&quot;&gt;See Contributions on GitHub&lt;/a&gt;</source>
<translation type="unfinished"/>
</message>
<message>
<source>Include the following information whenever you report a bug:</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>AccessControlDialog</name>
@ -248,10 +209,6 @@ Please select whether you want to allow access.</source>
<source>Clone Options</source>
<translation type="unfinished"/>
</message>
<message>
<source>Append &apos; - Copy&apos; to title</source>
<translation type="unfinished"/>
</message>
<message>
<source>Replace username and password with references</source>
<translation type="unfinished"/>
@ -260,6 +217,10 @@ Please select whether you want to allow access.</source>
<source>Copy history</source>
<translation type="unfinished"/>
</message>
<message>
<source>Append &apos; - Clone&apos; to title</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>CsvImportWidget</name>
@ -1092,10 +1053,6 @@ Do you want to open it anyway?</source>
<source>Select Image</source>
<translation>Суретті таңдау</translation>
</message>
<message>
<source>Error</source>
<translation>Қате</translation>
</message>
<message>
<source>Download favicon</source>
<translation type="unfinished"/>
@ -1124,6 +1081,14 @@ Do you want to open it anyway?</source>
<source>This icon is used by %1 entries, and will be replaced by the default icon. Are you sure you want to delete it?</source>
<translation type="unfinished"/>
</message>
<message>
<source>Hint: You can enable Google as a fallback under Tools&gt;Settings&gt;Security</source>
<translation type="unfinished"/>
</message>
<message>
<source>Custom icon already exists</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>EditWidgetProperties</name>
@ -1331,17 +1296,14 @@ Do you want to open it anyway?</source>
<translation>Басты парольді есептеу мүмкін емес</translation>
</message>
<message>
<source>The selected file is an old KeePass 1 database (.kdb).
You can import it by clicking on Database &gt; 'Import KeePass 1 database'.
This is a one-way migration. You won&apos;t be able to open the imported database with the old KeePassX 0.4 version.</source>
<translation>Таңдалған файл ескі KeePass 1 дерекқоры (.kdb) болып табылады.
Оны Дерекқор &gt; &apos;KeePass 1 дерекқорын импорттау&apos; арқылы импорттай аласыз.
Бұл - бір жақты миграция. Одан кейін сіз импортталған дерекқорды ескі KeePassX 0.4 нұсқасымен аша алмайтын боласыз.</translation>
<source>Unable to issue challenge-response.</source>
<translation type="unfinished"/>
</message>
<message>
<source>Unable to issue challenge-response.</source>
<source>The selected file is an old KeePass 1 database (.kdb).
You can import it by clicking on Database &gt; 'Import KeePass 1 database...'.
This is a one-way migration. You won&apos;t be able to open the imported database with the old KeePassX 0.4 version.</source>
<translation type="unfinished"/>
</message>
</context>
@ -1363,6 +1325,10 @@ This is a one-way migration. You won&apos;t be able to open the imported databas
<source>Another instance of KeePassXC is already running.</source>
<translation type="unfinished"/>
</message>
<message>
<source>Existing single-instance lock file is invalid. Launching new instance.</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>MainWindow</name>
@ -1418,10 +1384,6 @@ This is a one-way migration. You won&apos;t be able to open the imported databas
<source>&amp;Recent databases</source>
<translation type="unfinished"/>
</message>
<message>
<source>He&amp;lp</source>
<translation type="unfinished"/>
</message>
<message>
<source>E&amp;ntries</source>
<translation type="unfinished"/>
@ -1446,10 +1408,6 @@ This is a one-way migration. You won&apos;t be able to open the imported databas
<source>&amp;About</source>
<translation type="unfinished"/>
</message>
<message>
<source>&amp;Open database</source>
<translation type="unfinished"/>
</message>
<message>
<source>&amp;Save database</source>
<translation type="unfinished"/>
@ -1490,14 +1448,6 @@ This is a one-way migration. You won&apos;t be able to open the imported databas
<source>&amp;Delete group</source>
<translation type="unfinished"/>
</message>
<message>
<source>Sa&amp;ve database as</source>
<translation type="unfinished"/>
</message>
<message>
<source>Change &amp;master key</source>
<translation type="unfinished"/>
</message>
<message>
<source>&amp;Database settings</source>
<translation type="unfinished"/>
@ -1510,10 +1460,6 @@ This is a one-way migration. You won&apos;t be able to open the imported databas
<source>Timed one-time password</source>
<translation type="unfinished"/>
</message>
<message>
<source>Setup TOTP</source>
<translation type="unfinished"/>
</message>
<message>
<source>Copy &amp;TOTP</source>
<translation type="unfinished"/>
@ -1562,14 +1508,6 @@ This is a one-way migration. You won&apos;t be able to open the imported databas
<source>&amp;Notes</source>
<translation type="unfinished"/>
</message>
<message>
<source>&amp;Export to CSV file</source>
<translation type="unfinished"/>
</message>
<message>
<source>Re&amp;pair database</source>
<translation type="unfinished"/>
</message>
<message>
<source>Password Generator</source>
<translation type="unfinished"/>
@ -1590,14 +1528,6 @@ This is a one-way migration. You won&apos;t be able to open the imported databas
<source>&amp;Tools</source>
<translation type="unfinished"/>
</message>
<message>
<source>Import KeePass 1 database</source>
<translation type="unfinished"/>
</message>
<message>
<source>Import CSV file</source>
<translation type="unfinished"/>
</message>
<message>
<source>Empty recycle bin</source>
<translation type="unfinished"/>
@ -1614,6 +1544,42 @@ This is a one-way migration. You won&apos;t be able to open the imported databas
<source>Please touch the button on your YubiKey!</source>
<translation type="unfinished"/>
</message>
<message>
<source>&amp;Help</source>
<translation type="unfinished"/>
</message>
<message>
<source>&amp;Open database...</source>
<translation type="unfinished"/>
</message>
<message>
<source>Sa&amp;ve database as...</source>
<translation type="unfinished"/>
</message>
<message>
<source>Change &amp;master key...</source>
<translation type="unfinished"/>
</message>
<message>
<source>&amp;Export to CSV file...</source>
<translation type="unfinished"/>
</message>
<message>
<source>Import KeePass 1 database...</source>
<translation type="unfinished"/>
</message>
<message>
<source>Import CSV file...</source>
<translation type="unfinished"/>
</message>
<message>
<source>Re&amp;pair database...</source>
<translation type="unfinished"/>
</message>
<message>
<source>Set up TOTP...</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>OptionDialog</name>
@ -2160,6 +2126,18 @@ give it a unique name to identify and accept it.</source>
<source>Always ask before performing Auto-Type</source>
<translation type="unfinished"/>
</message>
<message>
<source>Auto-Type delay</source>
<translation type="unfinished"/>
</message>
<message>
<source> ms</source>
<translation type="unfinished"/>
</message>
<message>
<source>Start only a single instance of KeePassXC</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>SettingsWidgetSecurity</name>
@ -2199,6 +2177,14 @@ give it a unique name to identify and accept it.</source>
<source>Lock databases when session is locked or lid is closed</source>
<translation type="unfinished"/>
</message>
<message>
<source>Privacy</source>
<translation type="unfinished"/>
</message>
<message>
<source>Use Google as fallback for downloading website icons</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>SetupTotpDialog</name>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -9,73 +9,14 @@
<source>About</source>
<translation>Over</translation>
</message>
<message>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Report bugs at: &lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/issues&quot;&gt;&lt;span style=&quot;text-decoration: underline; color:#0000ff;&quot;&gt;https://github.com&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"/>
</message>
<message>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"/>
</message>
<message>
<source>&lt;html&gt;&lt;head&gt;&lt;style&gt;li {font-size: 10pt}&lt;/style&gt;&lt;/head&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;Project Maintainers:&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;droidmonkey&lt;/li&gt;&lt;li&gt;phoerious&lt;/li&gt;&lt;li&gt;TheZ3ro&lt;/li&gt;&lt;li&gt;louib&lt;/li&gt;&lt;li&gt;Weslly&lt;/li&gt;&lt;li&gt;debfx (KeePassX)&lt;/li&gt;&lt;/ul&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"/>
</message>
<message>
<source>Contributors</source>
<translation type="unfinished"/>
</message>
<message>
<source>&lt;html&gt;&lt;body&gt;
&lt;p style=&quot;font-size:x-large; font-weight:600;&quot;&gt;Code:&lt;/p&gt;
&lt;ul&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;debfx (KeePassX)&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;BlueIce (KeePassX)&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;droidmonkey&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;phoerious&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;TheZ3ro&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;louib&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;weslly&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;keithbennett (KeePassHTTP)&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;Typz (KeePassHTTP)&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;denk-mal (KeePassHTTP)&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;kylemanna (YubiKey)&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;seatedscribe (CSV Importer)&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;pgalves (Inline Messages)&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;font-size:x-large; font-weight:600;&quot;&gt;Translations:&lt;/p&gt;
&lt;ul&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Chinese:&lt;/span&gt; Biggulu, ligyxy, BestSteve&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Czech:&lt;/span&gt; pavelb, JosefVitu&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Dutch:&lt;/span&gt; Vistaus, KnooL, apie&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Finnish:&lt;/span&gt; MawKKe&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;French:&lt;/span&gt; Scrat15, frgnca, gilbsgilbs, gtalbot, iannick, kyodev, logut&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;German:&lt;/span&gt; Calyrx, DavidHamburg, antsas, codejunky, jensrutschmann, montilo, omnisome4, origin_de, pcrcoding, phoerious, rgloor, vlenzer&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Greek:&lt;/span&gt; nplatis&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Italian:&lt;/span&gt; TheZ3ro, FranzMari, Mte90, tosky&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Kazakh:&lt;/span&gt; sotrud_nik&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Lithuanian:&lt;/span&gt; Moo&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Polish:&lt;/span&gt; konradmb, mrerexx&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Portuguese: &lt;/span&gt;vitor895, weslly, American_Jesus, mihai.ile&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Russian:&lt;/span&gt; vsvyatski, KekcuHa, wkill95&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Spanish:&lt;/span&gt; EdwardNavarro, antifaz, piegope, pquin, vsvyatski&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Swedish:&lt;/span&gt; henziger&lt;/li&gt;
&lt;/ul&gt;
&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"/>
</message>
<message>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;&lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/graphs/contributors&quot;&gt;&lt;span style=&quot; font-size:10pt; text-decoration: underline; color:#0000ff;&quot;&gt;See Contributions on GitHub&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"/>
</message>
<message>
<source>Debug Info</source>
<translation type="unfinished"/>
</message>
<message>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Include the following information whenever you report a bug:&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"/>
</message>
<message>
<source>Copy to clipboard</source>
<translation type="unfinished"/>
@ -103,6 +44,26 @@ Kernel: %3 %4</source>
<source>Enabled extensions:</source>
<translation type="unfinished"/>
</message>
<message>
<source>Report bugs at: &lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/issues&quot; style=&quot;text-decoration: underline;&quot;&gt;https://github.com&lt;/a&gt;</source>
<translation type="unfinished"/>
</message>
<message>
<source>KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3.</source>
<translation>KeePassXC wordt verspreid onder de voorwaarden van de GNU General Public License (GPL) versie 2 of (als u wenst) versie 3.</translation>
</message>
<message>
<source>Project Maintainers:</source>
<translation type="unfinished"/>
</message>
<message>
<source>&lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/graphs/contributors&quot;&gt;See Contributions on GitHub&lt;/a&gt;</source>
<translation type="unfinished"/>
</message>
<message>
<source>Include the following information whenever you report a bug:</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>AccessControlDialog</name>
@ -249,10 +210,6 @@ Geef aan of u toegang wilt toestaan of niet.</translation>
<source>Clone Options</source>
<translation type="unfinished"/>
</message>
<message>
<source>Append &apos; - Copy&apos; to title</source>
<translation type="unfinished"/>
</message>
<message>
<source>Replace username and password with references</source>
<translation type="unfinished"/>
@ -261,6 +218,10 @@ Geef aan of u toegang wilt toestaan of niet.</translation>
<source>Copy history</source>
<translation type="unfinished"/>
</message>
<message>
<source>Append &apos; - Clone&apos; to title</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>CsvImportWidget</name>
@ -1095,10 +1056,6 @@ Wilt u toch doorgaan met openen?</translation>
<source>Select Image</source>
<translation>Kies afbeelding</translation>
</message>
<message>
<source>Error</source>
<translation>Fout</translation>
</message>
<message>
<source>Download favicon</source>
<translation>Favicon downloaden</translation>
@ -1127,6 +1084,14 @@ Wilt u toch doorgaan met openen?</translation>
<source>This icon is used by %1 entries, and will be replaced by the default icon. Are you sure you want to delete it?</source>
<translation type="unfinished"/>
</message>
<message>
<source>Hint: You can enable Google as a fallback under Tools&gt;Settings&gt;Security</source>
<translation type="unfinished"/>
</message>
<message>
<source>Custom icon already exists</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>EditWidgetProperties</name>
@ -1334,17 +1299,14 @@ Wilt u toch doorgaan met openen?</translation>
<translation>Niet mogelijk om hoofdsleutel te berekenen</translation>
</message>
<message>
<source>The selected file is an old KeePass 1 database (.kdb).
You can import it by clicking on Database &gt; 'Import KeePass 1 database'.
This is a one-way migration. You won&apos;t be able to open the imported database with the old KeePassX 0.4 version.</source>
<translation>Het gekozen bestand is een oude KeePass 1 database (.kdb).
U kunt het importeren door te klikken op Database &gt; &apos;KeePass 1 database importeren&apos;.
Deze actie is niet omkeerbaar. U kunt de geimporteerde database niet meer openen met KeePassX 0.4.</translation>
<source>Unable to issue challenge-response.</source>
<translation type="unfinished"/>
</message>
<message>
<source>Unable to issue challenge-response.</source>
<source>The selected file is an old KeePass 1 database (.kdb).
You can import it by clicking on Database &gt; 'Import KeePass 1 database...'.
This is a one-way migration. You won&apos;t be able to open the imported database with the old KeePassX 0.4 version.</source>
<translation type="unfinished"/>
</message>
</context>
@ -1366,6 +1328,10 @@ Deze actie is niet omkeerbaar. U kunt de geimporteerde database niet meer openen
<source>Another instance of KeePassXC is already running.</source>
<translation type="unfinished"/>
</message>
<message>
<source>Existing single-instance lock file is invalid. Launching new instance.</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>MainWindow</name>
@ -1421,10 +1387,6 @@ Deze actie is niet omkeerbaar. U kunt de geimporteerde database niet meer openen
<source>&amp;Recent databases</source>
<translation>&amp;Recente databases</translation>
</message>
<message>
<source>He&amp;lp</source>
<translation>He&amp;lp</translation>
</message>
<message>
<source>E&amp;ntries</source>
<translation>Items</translation>
@ -1449,10 +1411,6 @@ Deze actie is niet omkeerbaar. U kunt de geimporteerde database niet meer openen
<source>&amp;About</source>
<translation>&amp;Over</translation>
</message>
<message>
<source>&amp;Open database</source>
<translation>&amp;Open database</translation>
</message>
<message>
<source>&amp;Save database</source>
<translation>&amp;Sla database op</translation>
@ -1493,14 +1451,6 @@ Deze actie is niet omkeerbaar. U kunt de geimporteerde database niet meer openen
<source>&amp;Delete group</source>
<translation>&amp;Verwijder groep</translation>
</message>
<message>
<source>Sa&amp;ve database as</source>
<translation>Database opslaan als</translation>
</message>
<message>
<source>Change &amp;master key</source>
<translation>Wijzig &amp;hoofdsleutel</translation>
</message>
<message>
<source>&amp;Database settings</source>
<translation>&amp;Database-instellingen</translation>
@ -1513,10 +1463,6 @@ Deze actie is niet omkeerbaar. U kunt de geimporteerde database niet meer openen
<source>Timed one-time password</source>
<translation type="unfinished"/>
</message>
<message>
<source>Setup TOTP</source>
<translation type="unfinished"/>
</message>
<message>
<source>Copy &amp;TOTP</source>
<translation type="unfinished"/>
@ -1565,14 +1511,6 @@ Deze actie is niet omkeerbaar. U kunt de geimporteerde database niet meer openen
<source>&amp;Notes</source>
<translation>&amp;Opmerkingen</translation>
</message>
<message>
<source>&amp;Export to CSV file</source>
<translation>&amp;Naar CSV-bestand exporteren</translation>
</message>
<message>
<source>Re&amp;pair database</source>
<translation>Database repareren</translation>
</message>
<message>
<source>Password Generator</source>
<translation>Wachtwoord generator</translation>
@ -1593,14 +1531,6 @@ Deze actie is niet omkeerbaar. U kunt de geimporteerde database niet meer openen
<source>&amp;Tools</source>
<translation type="unfinished"/>
</message>
<message>
<source>Import KeePass 1 database</source>
<translation>Importeer Keepass 1-database</translation>
</message>
<message>
<source>Import CSV file</source>
<translation type="unfinished"/>
</message>
<message>
<source>Empty recycle bin</source>
<translation type="unfinished"/>
@ -1617,6 +1547,42 @@ Deze actie is niet omkeerbaar. U kunt de geimporteerde database niet meer openen
<source>Please touch the button on your YubiKey!</source>
<translation type="unfinished"/>
</message>
<message>
<source>&amp;Help</source>
<translation type="unfinished"/>
</message>
<message>
<source>&amp;Open database...</source>
<translation type="unfinished"/>
</message>
<message>
<source>Sa&amp;ve database as...</source>
<translation type="unfinished"/>
</message>
<message>
<source>Change &amp;master key...</source>
<translation type="unfinished"/>
</message>
<message>
<source>&amp;Export to CSV file...</source>
<translation type="unfinished"/>
</message>
<message>
<source>Import KeePass 1 database...</source>
<translation type="unfinished"/>
</message>
<message>
<source>Import CSV file...</source>
<translation type="unfinished"/>
</message>
<message>
<source>Re&amp;pair database...</source>
<translation type="unfinished"/>
</message>
<message>
<source>Set up TOTP...</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>OptionDialog</name>
@ -2167,6 +2133,18 @@ Geef het een unieke identificerende naam en accepteer de associate wanneer je de
<source>Always ask before performing Auto-Type</source>
<translation type="unfinished"/>
</message>
<message>
<source>Auto-Type delay</source>
<translation type="unfinished"/>
</message>
<message>
<source> ms</source>
<translation type="unfinished"/>
</message>
<message>
<source>Start only a single instance of KeePassXC</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>SettingsWidgetSecurity</name>
@ -2206,6 +2184,14 @@ Geef het een unieke identificerende naam en accepteer de associate wanneer je de
<source>Lock databases when session is locked or lid is closed</source>
<translation type="unfinished"/>
</message>
<message>
<source>Privacy</source>
<translation type="unfinished"/>
</message>
<message>
<source>Use Google as fallback for downloading website icons</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>SetupTotpDialog</name>

File diff suppressed because it is too large Load Diff

View File

@ -9,99 +9,63 @@
<source>About</source>
<translation>Sobre</translation>
</message>
<message>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Report bugs at: &lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/issues&quot;&gt;&lt;span style=&quot;text-decoration: underline; color:#0000ff;&quot;&gt;https://github.com&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"/>
</message>
<message>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"/>
</message>
<message>
<source>&lt;html&gt;&lt;head&gt;&lt;style&gt;li {font-size: 10pt}&lt;/style&gt;&lt;/head&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;Project Maintainers:&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;droidmonkey&lt;/li&gt;&lt;li&gt;phoerious&lt;/li&gt;&lt;li&gt;TheZ3ro&lt;/li&gt;&lt;li&gt;louib&lt;/li&gt;&lt;li&gt;Weslly&lt;/li&gt;&lt;li&gt;debfx (KeePassX)&lt;/li&gt;&lt;/ul&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"/>
</message>
<message>
<source>Contributors</source>
<translation type="unfinished"/>
</message>
<message>
<source>&lt;html&gt;&lt;body&gt;
&lt;p style=&quot;font-size:x-large; font-weight:600;&quot;&gt;Code:&lt;/p&gt;
&lt;ul&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;debfx (KeePassX)&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;BlueIce (KeePassX)&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;droidmonkey&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;phoerious&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;TheZ3ro&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;louib&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;weslly&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;keithbennett (KeePassHTTP)&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;Typz (KeePassHTTP)&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;denk-mal (KeePassHTTP)&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;kylemanna (YubiKey)&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;seatedscribe (CSV Importer)&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;pgalves (Inline Messages)&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;font-size:x-large; font-weight:600;&quot;&gt;Translations:&lt;/p&gt;
&lt;ul&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Chinese:&lt;/span&gt; Biggulu, ligyxy, BestSteve&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Czech:&lt;/span&gt; pavelb, JosefVitu&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Dutch:&lt;/span&gt; Vistaus, KnooL, apie&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Finnish:&lt;/span&gt; MawKKe&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;French:&lt;/span&gt; Scrat15, frgnca, gilbsgilbs, gtalbot, iannick, kyodev, logut&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;German:&lt;/span&gt; Calyrx, DavidHamburg, antsas, codejunky, jensrutschmann, montilo, omnisome4, origin_de, pcrcoding, phoerious, rgloor, vlenzer&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Greek:&lt;/span&gt; nplatis&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Italian:&lt;/span&gt; TheZ3ro, FranzMari, Mte90, tosky&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Kazakh:&lt;/span&gt; sotrud_nik&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Lithuanian:&lt;/span&gt; Moo&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Polish:&lt;/span&gt; konradmb, mrerexx&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Portuguese: &lt;/span&gt;vitor895, weslly, American_Jesus, mihai.ile&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Russian:&lt;/span&gt; vsvyatski, KekcuHa, wkill95&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Spanish:&lt;/span&gt; EdwardNavarro, antifaz, piegope, pquin, vsvyatski&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Swedish:&lt;/span&gt; henziger&lt;/li&gt;
&lt;/ul&gt;
&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"/>
</message>
<message>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;&lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/graphs/contributors&quot;&gt;&lt;span style=&quot; font-size:10pt; text-decoration: underline; color:#0000ff;&quot;&gt;See Contributions on GitHub&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"/>
<translation>Colaboradores</translation>
</message>
<message>
<source>Debug Info</source>
<translation type="unfinished"/>
</message>
<message>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Include the following information whenever you report a bug:&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"/>
<translation>Informações de Depuração</translation>
</message>
<message>
<source>Copy to clipboard</source>
<translation type="unfinished"/>
<translation>Copiar para a área de transferência</translation>
</message>
<message>
<source>Version %1
</source>
<translation type="unfinished"/>
<translation>Versão %1
</translation>
</message>
<message>
<source>Revision: %1</source>
<translation type="unfinished"/>
<translation>Revisão: %1</translation>
</message>
<message>
<source>Libraries:</source>
<translation type="unfinished"/>
<translation>Bibliotecas:</translation>
</message>
<message>
<source>Operating system: %1
CPU architecture: %2
Kernel: %3 %4</source>
<translation type="unfinished"/>
<translation>Sistema operacional: %1
Arquitetura da CPU: %2
Kernel: %3 %4</translation>
</message>
<message>
<source>Enabled extensions:</source>
<translation type="unfinished"/>
<translation>Extensões habilitadas:</translation>
</message>
<message>
<source>Report bugs at: &lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/issues&quot; style=&quot;text-decoration: underline;&quot;&gt;https://github.com&lt;/a&gt;</source>
<translation>Reporte erros em: &lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/issues&quot; style=&quot;text-decoration: underline;&quot;&gt;https://github.com&lt;/a&gt;</translation>
</message>
<message>
<source>KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3.</source>
<translation>KeePassXC é distribuído nos termos da Licença Pública Geral (GPL), versão 2 ou (à sua escolha) versão 3, do GNU.</translation>
</message>
<message>
<source>Project Maintainers:</source>
<translation>Mantedores do Projeto:</translation>
</message>
<message>
<source>&lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/graphs/contributors&quot;&gt;See Contributions on GitHub&lt;/a&gt;</source>
<translation>&lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/graphs/contributors&quot;&gt;Ver Colaborações no GitHub&lt;/a&gt;</translation>
</message>
<message>
<source>Include the following information whenever you report a bug:</source>
<translation>Inclua as informações abaixo quando reportar um erro:</translation>
</message>
</context>
<context>
@ -232,11 +196,11 @@ Selecione se deseja permitir o acesso.</translation>
</message>
<message>
<source>Refresh</source>
<translation type="unfinished"/>
<translation>Atualizar</translation>
</message>
<message>
<source>Empty password</source>
<translation type="unfinished"/>
<translation>Senha vazia</translation>
</message>
<message>
<source>Changing master key failed: no YubiKey inserted.</source>
@ -247,18 +211,18 @@ Selecione se deseja permitir o acesso.</translation>
<name>CloneDialog</name>
<message>
<source>Clone Options</source>
<translation type="unfinished"/>
</message>
<message>
<source>Append &apos; - Copy&apos; to title</source>
<translation type="unfinished"/>
<translation>Opções de Clonagem</translation>
</message>
<message>
<source>Replace username and password with references</source>
<translation type="unfinished"/>
<translation>Substituir o usuário e senha com referências</translation>
</message>
<message>
<source>Copy history</source>
<translation>Copiar histórico</translation>
</message>
<message>
<source>Append &apos; - Clone&apos; to title</source>
<translation type="unfinished"/>
</message>
</context>
@ -266,23 +230,23 @@ Selecione se deseja permitir o acesso.</translation>
<name>CsvImportWidget</name>
<message>
<source>Import CSV fields</source>
<translation type="unfinished"/>
<translation>Importar campos CSV</translation>
</message>
<message>
<source>filename</source>
<translation type="unfinished"/>
<translation>nome do arquivo</translation>
</message>
<message>
<source>size, rows, columns</source>
<translation type="unfinished"/>
<translation>tamanho, linhas, colunas</translation>
</message>
<message>
<source>Encoding</source>
<translation type="unfinished"/>
<translation>Codificação</translation>
</message>
<message>
<source>Codec</source>
<translation type="unfinished"/>
<translation>Codec</translation>
</message>
<message>
<source>Text is qualified by</source>
@ -310,7 +274,7 @@ Selecione se deseja permitir o acesso.</translation>
</message>
<message>
<source>Preview</source>
<translation type="unfinished"/>
<translation>Visualização</translation>
</message>
<message>
<source>Column layout</source>
@ -326,7 +290,7 @@ Selecione se deseja permitir o acesso.</translation>
</message>
<message>
<source>column </source>
<translation type="unfinished"/>
<translation>coluna</translation>
</message>
<message>
<source>Imported from CSV file</source>
@ -334,7 +298,7 @@ Selecione se deseja permitir o acesso.</translation>
</message>
<message>
<source>Original data: </source>
<translation type="unfinished"/>
<translation>Dados originais:</translation>
</message>
<message>
<source>Error(s) detected in CSV file !</source>
@ -358,7 +322,7 @@ Selecione se deseja permitir o acesso.</translation>
<name>CsvImportWizard</name>
<message>
<source>Import CSV file</source>
<translation type="unfinished"/>
<translation>Importar arquivo CSV</translation>
</message>
<message>
<source>Error</source>
@ -381,7 +345,7 @@ Selecione se deseja permitir o acesso.</translation>
</message>
<message>
<source> columns</source>
<translation type="unfinished"/>
<translation>colunas</translation>
</message>
</context>
<context>
@ -424,7 +388,7 @@ Selecione se deseja permitir o acesso.</translation>
</message>
<message>
<source>Refresh</source>
<translation type="unfinished"/>
<translation>Atualizar</translation>
</message>
<message>
<source>Challenge Response:</source>
@ -772,7 +736,7 @@ Mesmo assim deseja salvá-la?</translation>
</message>
<message>
<source>Empty recycle bin?</source>
<translation type="unfinished"/>
<translation>Esvaziar lixeira?</translation>
</message>
<message>
<source>Are you sure you want to permanently delete everything from your recycle bin?</source>
@ -904,15 +868,15 @@ Mesmo assim deseja salvá-la?</translation>
</message>
<message>
<source>Edit Name</source>
<translation type="unfinished"/>
<translation>Editar Nome</translation>
</message>
<message>
<source>Protect</source>
<translation type="unfinished"/>
<translation>Proteger</translation>
</message>
<message>
<source>Reveal</source>
<translation type="unfinished"/>
<translation>Revelar</translation>
</message>
</context>
<context>
@ -951,7 +915,7 @@ Mesmo assim deseja salvá-la?</translation>
</message>
<message>
<source>Window Associations</source>
<translation type="unfinished"/>
<translation>Associações de Janela</translation>
</message>
</context>
<context>
@ -1096,10 +1060,6 @@ Mesmo assim deseja salvá-la?</translation>
<source>Select Image</source>
<translation>Selecionar imagem</translation>
</message>
<message>
<source>Error</source>
<translation>Erro</translation>
</message>
<message>
<source>Download favicon</source>
<translation>Baixar favicon</translation>
@ -1122,12 +1082,20 @@ Mesmo assim deseja salvá-la?</translation>
</message>
<message>
<source>Confirm Delete</source>
<translation type="unfinished"/>
<translation>Confirmar Exclusão</translation>
</message>
<message>
<source>This icon is used by %1 entries, and will be replaced by the default icon. Are you sure you want to delete it?</source>
<translation type="unfinished"/>
</message>
<message>
<source>Hint: You can enable Google as a fallback under Tools&gt;Settings&gt;Security</source>
<translation type="unfinished"/>
</message>
<message>
<source>Custom icon already exists</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>EditWidgetProperties</name>
@ -1202,7 +1170,7 @@ Mesmo assim deseja salvá-la?</translation>
<message>
<source>Ref: </source>
<comment>Reference abbreviation</comment>
<translation type="unfinished"/>
<translation>Ref:</translation>
</message>
</context>
<context>
@ -1267,11 +1235,11 @@ Mesmo assim deseja salvá-la?</translation>
<name>KMessageWidget</name>
<message>
<source>&amp;Close</source>
<translation type="unfinished"/>
<translation>Fe&amp;char</translation>
</message>
<message>
<source>Close message</source>
<translation type="unfinished"/>
<translation>Fechar mensagem</translation>
</message>
</context>
<context>
@ -1335,17 +1303,14 @@ Mesmo assim deseja salvá-la?</translation>
<translation>Não foi possível calcular a chave mestre</translation>
</message>
<message>
<source>The selected file is an old KeePass 1 database (.kdb).
You can import it by clicking on Database &gt; 'Import KeePass 1 database'.
This is a one-way migration. You won&apos;t be able to open the imported database with the old KeePassX 0.4 version.</source>
<translation>O arquivo selecionado é um banco de dados antigo do KeePass 1 (.kdb).
Você pode importá-lo clicando em Banco de Dados &gt; &apos;Importar banco de dados KeePass 1&apos;.
Esta é uma migração de uma via. Você não poderá abrir o banco de dados importado com a versão antiga do KeePassX 0.4.</translation>
<source>Unable to issue challenge-response.</source>
<translation type="unfinished"/>
</message>
<message>
<source>Unable to issue challenge-response.</source>
<source>The selected file is an old KeePass 1 database (.kdb).
You can import it by clicking on Database &gt; 'Import KeePass 1 database...'.
This is a one-way migration. You won&apos;t be able to open the imported database with the old KeePassX 0.4 version.</source>
<translation type="unfinished"/>
</message>
</context>
@ -1367,6 +1332,10 @@ Esta é uma migração de uma via. Você não poderá abrir o banco de dados imp
<source>Another instance of KeePassXC is already running.</source>
<translation type="unfinished"/>
</message>
<message>
<source>Existing single-instance lock file is invalid. Launching new instance.</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>MainWindow</name>
@ -1422,10 +1391,6 @@ Esta é uma migração de uma via. Você não poderá abrir o banco de dados imp
<source>&amp;Recent databases</source>
<translation>&amp;Bancos de dados recentes</translation>
</message>
<message>
<source>He&amp;lp</source>
<translation>&amp;Ajuda</translation>
</message>
<message>
<source>E&amp;ntries</source>
<translation>E&amp;ntradas</translation>
@ -1450,10 +1415,6 @@ Esta é uma migração de uma via. Você não poderá abrir o banco de dados imp
<source>&amp;About</source>
<translation>&amp;Sobre</translation>
</message>
<message>
<source>&amp;Open database</source>
<translation>&amp;Abrir base de dados</translation>
</message>
<message>
<source>&amp;Save database</source>
<translation>&amp;Salvar base de dados</translation>
@ -1494,14 +1455,6 @@ Esta é uma migração de uma via. Você não poderá abrir o banco de dados imp
<source>&amp;Delete group</source>
<translation>&amp;Apagar grupo</translation>
</message>
<message>
<source>Sa&amp;ve database as</source>
<translation>Sal&amp;var base de dados como</translation>
</message>
<message>
<source>Change &amp;master key</source>
<translation>Alterar chave &amp;mestra</translation>
</message>
<message>
<source>&amp;Database settings</source>
<translation>&amp;Definições da base de dados</translation>
@ -1512,19 +1465,15 @@ Esta é uma migração de uma via. Você não poderá abrir o banco de dados imp
</message>
<message>
<source>Timed one-time password</source>
<translation type="unfinished"/>
</message>
<message>
<source>Setup TOTP</source>
<translation type="unfinished"/>
<translation>Senha temporária de uso único</translation>
</message>
<message>
<source>Copy &amp;TOTP</source>
<translation type="unfinished"/>
<translation>Copiar &amp;TOTP</translation>
</message>
<message>
<source>Show TOTP</source>
<translation type="unfinished"/>
<translation>Mostrar TOTP</translation>
</message>
<message>
<source>&amp;Find</source>
@ -1566,45 +1515,29 @@ Esta é uma migração de uma via. Você não poderá abrir o banco de dados imp
<source>&amp;Notes</source>
<translation>&amp;Notas</translation>
</message>
<message>
<source>&amp;Export to CSV file</source>
<translation>&amp;Exportar para arquivo CSV</translation>
</message>
<message>
<source>Re&amp;pair database</source>
<translation>Re&amp;parar banco de dados</translation>
</message>
<message>
<source>Password Generator</source>
<translation>Gerador de Senha</translation>
</message>
<message>
<source>Clear history</source>
<translation type="unfinished"/>
<translation>Limpar histórico</translation>
</message>
<message>
<source>&amp;Database</source>
<translation type="unfinished"/>
<translation>Banco de &amp;dados</translation>
</message>
<message>
<source>Import</source>
<translation type="unfinished"/>
<translation>Importar</translation>
</message>
<message>
<source>&amp;Tools</source>
<translation type="unfinished"/>
</message>
<message>
<source>Import KeePass 1 database</source>
<translation>Importar banco de dados KeePass1</translation>
</message>
<message>
<source>Import CSV file</source>
<translation type="unfinished"/>
<translation>&amp;Ferramentas</translation>
</message>
<message>
<source>Empty recycle bin</source>
<translation type="unfinished"/>
<translation>Esvaziar lixeira</translation>
</message>
<message>
<source>Access error for config file %1</source>
@ -1612,12 +1545,48 @@ Esta é uma migração de uma via. Você não poderá abrir o banco de dados imp
</message>
<message>
<source>Quit KeePassXC</source>
<translation type="unfinished"/>
<translation>Fechar KeePassXC</translation>
</message>
<message>
<source>Please touch the button on your YubiKey!</source>
<translation type="unfinished"/>
</message>
<message>
<source>&amp;Help</source>
<translation type="unfinished"/>
</message>
<message>
<source>&amp;Open database...</source>
<translation type="unfinished"/>
</message>
<message>
<source>Sa&amp;ve database as...</source>
<translation type="unfinished"/>
</message>
<message>
<source>Change &amp;master key...</source>
<translation type="unfinished"/>
</message>
<message>
<source>&amp;Export to CSV file...</source>
<translation type="unfinished"/>
</message>
<message>
<source>Import KeePass 1 database...</source>
<translation type="unfinished"/>
</message>
<message>
<source>Import CSV file...</source>
<translation type="unfinished"/>
</message>
<message>
<source>Re&amp;pair database...</source>
<translation type="unfinished"/>
</message>
<message>
<source>Set up TOTP...</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>OptionDialog</name>
@ -1705,7 +1674,7 @@ Usando porta padrão 19455.</translation>
</message>
<message>
<source>Enable KeePassHTTP server</source>
<translation type="unfinished"/>
<translation>Habilitar servidor KeePassHTTP</translation>
</message>
<message>
<source>Only returns the best matches for a specific URL instead of all entries for the whole domain.</source>
@ -1837,23 +1806,23 @@ Change them only if you know what you are doing.</source>
</message>
<message>
<source>Passphrase</source>
<translation type="unfinished"/>
<translation>Senha</translation>
</message>
<message>
<source>Wordlist:</source>
<translation type="unfinished"/>
<translation>Lista de palavras:</translation>
</message>
<message>
<source>Word Count:</source>
<translation type="unfinished"/>
<translation>Número de Palavras:</translation>
</message>
<message>
<source>Word Separator:</source>
<translation type="unfinished"/>
<translation>Separador de Palavras:</translation>
</message>
<message>
<source>Copy</source>
<translation type="unfinished"/>
<translation>Copiar</translation>
</message>
</context>
<context>
@ -1909,7 +1878,7 @@ Change them only if you know what you are doing.</source>
</message>
<message>
<source>Browser Integration</source>
<translation type="unfinished"/>
<translation>Integração com o Navegador</translation>
</message>
<message>
<source>YubiKey[%1] Challenge Response - Slot %2 - %3</source>
@ -1917,11 +1886,11 @@ Change them only if you know what you are doing.</source>
</message>
<message>
<source>Press</source>
<translation type="unfinished"/>
<translation>Aperte</translation>
</message>
<message>
<source>Passive</source>
<translation type="unfinished"/>
<translation>Passivo</translation>
</message>
</context>
<context>
@ -1974,11 +1943,11 @@ Change them only if you know what you are doing.</source>
</message>
<message>
<source>Search...</source>
<translation type="unfinished"/>
<translation>Buscar...</translation>
</message>
<message>
<source>Limit search to selected group</source>
<translation type="unfinished"/>
<translation>Limitar busca ao grupo selecionado</translation>
</message>
</context>
<context>
@ -2147,7 +2116,7 @@ dar-lhe um nome único para identificá-lo e aceitá-lo.</translation>
</message>
<message>
<source>Basic Settings</source>
<translation type="unfinished"/>
<translation>Configurações Básicas</translation>
</message>
<message>
<source>Remember last key files and security dongles</source>
@ -2169,6 +2138,18 @@ dar-lhe um nome único para identificá-lo e aceitá-lo.</translation>
<source>Always ask before performing Auto-Type</source>
<translation type="unfinished"/>
</message>
<message>
<source>Auto-Type delay</source>
<translation type="unfinished"/>
</message>
<message>
<source> ms</source>
<translation>ms</translation>
</message>
<message>
<source>Start only a single instance of KeePassXC</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>SettingsWidgetSecurity</name>
@ -2202,46 +2183,54 @@ dar-lhe um nome único para identificá-lo e aceitá-lo.</translation>
</message>
<message>
<source>Convenience</source>
<translation type="unfinished"/>
<translation>Conveniência</translation>
</message>
<message>
<source>Lock databases when session is locked or lid is closed</source>
<translation type="unfinished"/>
</message>
<message>
<source>Privacy</source>
<translation>Privacidade</translation>
</message>
<message>
<source>Use Google as fallback for downloading website icons</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>SetupTotpDialog</name>
<message>
<source>Setup TOTP</source>
<translation type="unfinished"/>
<translation>Configurar TOTP</translation>
</message>
<message>
<source>Key:</source>
<translation type="unfinished"/>
<translation>Chave:</translation>
</message>
<message>
<source>Use custom settings</source>
<translation type="unfinished"/>
<translation>Usar configurações personalizadas</translation>
</message>
<message>
<source>Note: Change these settings only if you know what you are doing.</source>
<translation type="unfinished"/>
<translation>Nota: Altere estas configurações apenas se souber o que está fazendo.</translation>
</message>
<message>
<source>Time step:</source>
<translation type="unfinished"/>
<translation>Período de tempo:</translation>
</message>
<message>
<source>8 digits</source>
<translation type="unfinished"/>
<translation>8 dígitos</translation>
</message>
<message>
<source>6 digits</source>
<translation type="unfinished"/>
<translation>6 dígitos</translation>
</message>
<message>
<source>Code size:</source>
<translation type="unfinished"/>
<translation>Tamanho do código:</translation>
</message>
<message>
<source> sec</source>
@ -2252,23 +2241,23 @@ dar-lhe um nome único para identificá-lo e aceitá-lo.</translation>
<name>TotpDialog</name>
<message>
<source>Timed Password</source>
<translation type="unfinished"/>
<translation>Senha Temporária</translation>
</message>
<message>
<source>000000</source>
<translation type="unfinished"/>
<translation>000000</translation>
</message>
<message>
<source>Copy</source>
<translation type="unfinished"/>
<translation>Copiar</translation>
</message>
<message>
<source>Expires in</source>
<translation type="unfinished"/>
<translation>Expira em</translation>
</message>
<message>
<source>seconds</source>
<translation type="unfinished"/>
<translation>segundos</translation>
</message>
</context>
<context>
@ -2282,7 +2271,7 @@ dar-lhe um nome único para identificá-lo e aceitá-lo.</translation>
<name>WelcomeWidget</name>
<message>
<source>Welcome to KeePassXC</source>
<translation type="unfinished"/>
<translation>Bem vindo ao KeePassXC</translation>
</message>
<message>
<source>Start storing your passwords securely in a KeePassXC database</source>
@ -2290,19 +2279,19 @@ dar-lhe um nome único para identificá-lo e aceitá-lo.</translation>
</message>
<message>
<source>Create new database</source>
<translation type="unfinished"/>
<translation>Criar novo banco de dados</translation>
</message>
<message>
<source>Open existing database</source>
<translation type="unfinished"/>
<translation>Abrir banco de dados existente</translation>
</message>
<message>
<source>Import from KeePass 1</source>
<translation type="unfinished"/>
<translation>Importar do KeePass 1</translation>
</message>
<message>
<source>Import from CSV</source>
<translation type="unfinished"/>
<translation>Importar arquivo CSV</translation>
</message>
<message>
<source>Recent databases</source>
@ -2337,7 +2326,7 @@ dar-lhe um nome único para identificá-lo e aceitá-lo.</translation>
</message>
<message>
<source>Path of the database.</source>
<translation type="unfinished"/>
<translation>Caminho do banco de dados</translation>
</message>
<message>
<source>Use a GUI prompt unlocking the database.</source>
@ -2353,15 +2342,15 @@ dar-lhe um nome único para identificá-lo e aceitá-lo.</translation>
</message>
<message>
<source>Path of the database to extract.</source>
<translation type="unfinished"/>
<translation>Caminho do banco de dados para extração.</translation>
</message>
<message>
<source>Name of the command to execute.</source>
<translation type="unfinished"/>
<translation>Nome do comando para executar.</translation>
</message>
<message>
<source>List database entries.</source>
<translation type="unfinished"/>
<translation>Listar entradas do banco de dados.</translation>
</message>
<message>
<source>Path of the group to list. Default is /</source>
@ -2373,7 +2362,7 @@ dar-lhe um nome único para identificá-lo e aceitá-lo.</translation>
</message>
<message>
<source>Merge two databases.</source>
<translation type="unfinished"/>
<translation>Juntar dois bancos de dados.</translation>
</message>
<message>
<source>Path of the database to merge into.</source>
@ -2389,11 +2378,11 @@ dar-lhe um nome único para identificá-lo e aceitá-lo.</translation>
</message>
<message>
<source>Show a password.</source>
<translation type="unfinished"/>
<translation>Mostrar uma senha.</translation>
</message>
<message>
<source>Name of the entry to show.</source>
<translation type="unfinished"/>
<translation>Nome da entrada para mostrar.</translation>
</message>
</context>
</TS>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -9,73 +9,14 @@
<source>About</source>
<translation>O programu</translation>
</message>
<message>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Report bugs at: &lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/issues&quot;&gt;&lt;span style=&quot;text-decoration: underline; color:#0000ff;&quot;&gt;https://github.com&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"/>
</message>
<message>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"/>
</message>
<message>
<source>&lt;html&gt;&lt;head&gt;&lt;style&gt;li {font-size: 10pt}&lt;/style&gt;&lt;/head&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;Project Maintainers:&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;droidmonkey&lt;/li&gt;&lt;li&gt;phoerious&lt;/li&gt;&lt;li&gt;TheZ3ro&lt;/li&gt;&lt;li&gt;louib&lt;/li&gt;&lt;li&gt;Weslly&lt;/li&gt;&lt;li&gt;debfx (KeePassX)&lt;/li&gt;&lt;/ul&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"/>
</message>
<message>
<source>Contributors</source>
<translation type="unfinished"/>
</message>
<message>
<source>&lt;html&gt;&lt;body&gt;
&lt;p style=&quot;font-size:x-large; font-weight:600;&quot;&gt;Code:&lt;/p&gt;
&lt;ul&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;debfx (KeePassX)&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;BlueIce (KeePassX)&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;droidmonkey&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;phoerious&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;TheZ3ro&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;louib&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;weslly&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;keithbennett (KeePassHTTP)&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;Typz (KeePassHTTP)&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;denk-mal (KeePassHTTP)&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;kylemanna (YubiKey)&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;seatedscribe (CSV Importer)&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;pgalves (Inline Messages)&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;font-size:x-large; font-weight:600;&quot;&gt;Translations:&lt;/p&gt;
&lt;ul&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Chinese:&lt;/span&gt; Biggulu, ligyxy, BestSteve&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Czech:&lt;/span&gt; pavelb, JosefVitu&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Dutch:&lt;/span&gt; Vistaus, KnooL, apie&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Finnish:&lt;/span&gt; MawKKe&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;French:&lt;/span&gt; Scrat15, frgnca, gilbsgilbs, gtalbot, iannick, kyodev, logut&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;German:&lt;/span&gt; Calyrx, DavidHamburg, antsas, codejunky, jensrutschmann, montilo, omnisome4, origin_de, pcrcoding, phoerious, rgloor, vlenzer&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Greek:&lt;/span&gt; nplatis&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Italian:&lt;/span&gt; TheZ3ro, FranzMari, Mte90, tosky&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Kazakh:&lt;/span&gt; sotrud_nik&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Lithuanian:&lt;/span&gt; Moo&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Polish:&lt;/span&gt; konradmb, mrerexx&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Portuguese: &lt;/span&gt;vitor895, weslly, American_Jesus, mihai.ile&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Russian:&lt;/span&gt; vsvyatski, KekcuHa, wkill95&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Spanish:&lt;/span&gt; EdwardNavarro, antifaz, piegope, pquin, vsvyatski&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Swedish:&lt;/span&gt; henziger&lt;/li&gt;
&lt;/ul&gt;
&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"/>
</message>
<message>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;&lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/graphs/contributors&quot;&gt;&lt;span style=&quot; font-size:10pt; text-decoration: underline; color:#0000ff;&quot;&gt;See Contributions on GitHub&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"/>
</message>
<message>
<source>Debug Info</source>
<translation type="unfinished"/>
</message>
<message>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Include the following information whenever you report a bug:&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"/>
</message>
<message>
<source>Copy to clipboard</source>
<translation type="unfinished"/>
@ -103,6 +44,26 @@ Kernel: %3 %4</source>
<source>Enabled extensions:</source>
<translation type="unfinished"/>
</message>
<message>
<source>Report bugs at: &lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/issues&quot; style=&quot;text-decoration: underline;&quot;&gt;https://github.com&lt;/a&gt;</source>
<translation type="unfinished"/>
</message>
<message>
<source>KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3.</source>
<translation type="unfinished"/>
</message>
<message>
<source>Project Maintainers:</source>
<translation type="unfinished"/>
</message>
<message>
<source>&lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/graphs/contributors&quot;&gt;See Contributions on GitHub&lt;/a&gt;</source>
<translation type="unfinished"/>
</message>
<message>
<source>Include the following information whenever you report a bug:</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>AccessControlDialog</name>
@ -248,10 +209,6 @@ Please select whether you want to allow access.</source>
<source>Clone Options</source>
<translation type="unfinished"/>
</message>
<message>
<source>Append &apos; - Copy&apos; to title</source>
<translation type="unfinished"/>
</message>
<message>
<source>Replace username and password with references</source>
<translation type="unfinished"/>
@ -260,6 +217,10 @@ Please select whether you want to allow access.</source>
<source>Copy history</source>
<translation type="unfinished"/>
</message>
<message>
<source>Append &apos; - Clone&apos; to title</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>CsvImportWidget</name>
@ -1090,10 +1051,6 @@ Do you want to open it anyway?</source>
<source>Select Image</source>
<translation>Izberi sliko</translation>
</message>
<message>
<source>Error</source>
<translation>Napaka</translation>
</message>
<message>
<source>Download favicon</source>
<translation type="unfinished"/>
@ -1122,6 +1079,14 @@ Do you want to open it anyway?</source>
<source>This icon is used by %1 entries, and will be replaced by the default icon. Are you sure you want to delete it?</source>
<translation type="unfinished"/>
</message>
<message>
<source>Hint: You can enable Google as a fallback under Tools&gt;Settings&gt;Security</source>
<translation type="unfinished"/>
</message>
<message>
<source>Custom icon already exists</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>EditWidgetProperties</name>
@ -1329,14 +1294,14 @@ Do you want to open it anyway?</source>
<translation>Izračun glavnega ključa ni uspel</translation>
</message>
<message>
<source>The selected file is an old KeePass 1 database (.kdb).
You can import it by clicking on Database &gt; 'Import KeePass 1 database'.
This is a one-way migration. You won&apos;t be able to open the imported database with the old KeePassX 0.4 version.</source>
<source>Unable to issue challenge-response.</source>
<translation type="unfinished"/>
</message>
<message>
<source>Unable to issue challenge-response.</source>
<source>The selected file is an old KeePass 1 database (.kdb).
You can import it by clicking on Database &gt; 'Import KeePass 1 database...'.
This is a one-way migration. You won&apos;t be able to open the imported database with the old KeePassX 0.4 version.</source>
<translation type="unfinished"/>
</message>
</context>
@ -1358,6 +1323,10 @@ This is a one-way migration. You won&apos;t be able to open the imported databas
<source>Another instance of KeePassXC is already running.</source>
<translation type="unfinished"/>
</message>
<message>
<source>Existing single-instance lock file is invalid. Launching new instance.</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>MainWindow</name>
@ -1413,10 +1382,6 @@ This is a one-way migration. You won&apos;t be able to open the imported databas
<source>&amp;Recent databases</source>
<translation type="unfinished"/>
</message>
<message>
<source>He&amp;lp</source>
<translation type="unfinished"/>
</message>
<message>
<source>E&amp;ntries</source>
<translation type="unfinished"/>
@ -1441,10 +1406,6 @@ This is a one-way migration. You won&apos;t be able to open the imported databas
<source>&amp;About</source>
<translation type="unfinished"/>
</message>
<message>
<source>&amp;Open database</source>
<translation type="unfinished"/>
</message>
<message>
<source>&amp;Save database</source>
<translation type="unfinished"/>
@ -1485,14 +1446,6 @@ This is a one-way migration. You won&apos;t be able to open the imported databas
<source>&amp;Delete group</source>
<translation type="unfinished"/>
</message>
<message>
<source>Sa&amp;ve database as</source>
<translation type="unfinished"/>
</message>
<message>
<source>Change &amp;master key</source>
<translation type="unfinished"/>
</message>
<message>
<source>&amp;Database settings</source>
<translation type="unfinished"/>
@ -1505,10 +1458,6 @@ This is a one-way migration. You won&apos;t be able to open the imported databas
<source>Timed one-time password</source>
<translation type="unfinished"/>
</message>
<message>
<source>Setup TOTP</source>
<translation type="unfinished"/>
</message>
<message>
<source>Copy &amp;TOTP</source>
<translation type="unfinished"/>
@ -1557,14 +1506,6 @@ This is a one-way migration. You won&apos;t be able to open the imported databas
<source>&amp;Notes</source>
<translation type="unfinished"/>
</message>
<message>
<source>&amp;Export to CSV file</source>
<translation type="unfinished"/>
</message>
<message>
<source>Re&amp;pair database</source>
<translation type="unfinished"/>
</message>
<message>
<source>Password Generator</source>
<translation type="unfinished"/>
@ -1585,14 +1526,6 @@ This is a one-way migration. You won&apos;t be able to open the imported databas
<source>&amp;Tools</source>
<translation type="unfinished"/>
</message>
<message>
<source>Import KeePass 1 database</source>
<translation>Uvozi KeePass 1 podatkovno bazo</translation>
</message>
<message>
<source>Import CSV file</source>
<translation type="unfinished"/>
</message>
<message>
<source>Empty recycle bin</source>
<translation type="unfinished"/>
@ -1609,6 +1542,42 @@ This is a one-way migration. You won&apos;t be able to open the imported databas
<source>Please touch the button on your YubiKey!</source>
<translation type="unfinished"/>
</message>
<message>
<source>&amp;Help</source>
<translation type="unfinished"/>
</message>
<message>
<source>&amp;Open database...</source>
<translation type="unfinished"/>
</message>
<message>
<source>Sa&amp;ve database as...</source>
<translation type="unfinished"/>
</message>
<message>
<source>Change &amp;master key...</source>
<translation type="unfinished"/>
</message>
<message>
<source>&amp;Export to CSV file...</source>
<translation type="unfinished"/>
</message>
<message>
<source>Import KeePass 1 database...</source>
<translation type="unfinished"/>
</message>
<message>
<source>Import CSV file...</source>
<translation type="unfinished"/>
</message>
<message>
<source>Re&amp;pair database...</source>
<translation type="unfinished"/>
</message>
<message>
<source>Set up TOTP...</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>OptionDialog</name>
@ -2155,6 +2124,18 @@ give it a unique name to identify and accept it.</source>
<source>Always ask before performing Auto-Type</source>
<translation type="unfinished"/>
</message>
<message>
<source>Auto-Type delay</source>
<translation type="unfinished"/>
</message>
<message>
<source> ms</source>
<translation type="unfinished"/>
</message>
<message>
<source>Start only a single instance of KeePassXC</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>SettingsWidgetSecurity</name>
@ -2194,6 +2175,14 @@ give it a unique name to identify and accept it.</source>
<source>Lock databases when session is locked or lid is closed</source>
<translation type="unfinished"/>
</message>
<message>
<source>Privacy</source>
<translation type="unfinished"/>
</message>
<message>
<source>Use Google as fallback for downloading website icons</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>SetupTotpDialog</name>

View File

@ -9,73 +9,14 @@
<source>About</source>
<translation>Om</translation>
</message>
<message>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Report bugs at: &lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/issues&quot;&gt;&lt;span style=&quot;text-decoration: underline; color:#0000ff;&quot;&gt;https://github.com&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"/>
</message>
<message>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"/>
</message>
<message>
<source>&lt;html&gt;&lt;head&gt;&lt;style&gt;li {font-size: 10pt}&lt;/style&gt;&lt;/head&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;Project Maintainers:&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;droidmonkey&lt;/li&gt;&lt;li&gt;phoerious&lt;/li&gt;&lt;li&gt;TheZ3ro&lt;/li&gt;&lt;li&gt;louib&lt;/li&gt;&lt;li&gt;Weslly&lt;/li&gt;&lt;li&gt;debfx (KeePassX)&lt;/li&gt;&lt;/ul&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"/>
</message>
<message>
<source>Contributors</source>
<translation type="unfinished"/>
</message>
<message>
<source>&lt;html&gt;&lt;body&gt;
&lt;p style=&quot;font-size:x-large; font-weight:600;&quot;&gt;Code:&lt;/p&gt;
&lt;ul&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;debfx (KeePassX)&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;BlueIce (KeePassX)&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;droidmonkey&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;phoerious&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;TheZ3ro&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;louib&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;weslly&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;keithbennett (KeePassHTTP)&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;Typz (KeePassHTTP)&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;denk-mal (KeePassHTTP)&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;kylemanna (YubiKey)&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;seatedscribe (CSV Importer)&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;pgalves (Inline Messages)&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;font-size:x-large; font-weight:600;&quot;&gt;Translations:&lt;/p&gt;
&lt;ul&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Chinese:&lt;/span&gt; Biggulu, ligyxy, BestSteve&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Czech:&lt;/span&gt; pavelb, JosefVitu&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Dutch:&lt;/span&gt; Vistaus, KnooL, apie&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Finnish:&lt;/span&gt; MawKKe&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;French:&lt;/span&gt; Scrat15, frgnca, gilbsgilbs, gtalbot, iannick, kyodev, logut&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;German:&lt;/span&gt; Calyrx, DavidHamburg, antsas, codejunky, jensrutschmann, montilo, omnisome4, origin_de, pcrcoding, phoerious, rgloor, vlenzer&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Greek:&lt;/span&gt; nplatis&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Italian:&lt;/span&gt; TheZ3ro, FranzMari, Mte90, tosky&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Kazakh:&lt;/span&gt; sotrud_nik&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Lithuanian:&lt;/span&gt; Moo&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Polish:&lt;/span&gt; konradmb, mrerexx&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Portuguese: &lt;/span&gt;vitor895, weslly, American_Jesus, mihai.ile&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Russian:&lt;/span&gt; vsvyatski, KekcuHa, wkill95&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Spanish:&lt;/span&gt; EdwardNavarro, antifaz, piegope, pquin, vsvyatski&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Swedish:&lt;/span&gt; henziger&lt;/li&gt;
&lt;/ul&gt;
&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"/>
</message>
<message>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;&lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/graphs/contributors&quot;&gt;&lt;span style=&quot; font-size:10pt; text-decoration: underline; color:#0000ff;&quot;&gt;See Contributions on GitHub&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"/>
</message>
<message>
<source>Debug Info</source>
<translation type="unfinished"/>
</message>
<message>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Include the following information whenever you report a bug:&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"/>
</message>
<message>
<source>Copy to clipboard</source>
<translation type="unfinished"/>
@ -103,6 +44,26 @@ Kernel: %3 %4</source>
<source>Enabled extensions:</source>
<translation type="unfinished"/>
</message>
<message>
<source>Report bugs at: &lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/issues&quot; style=&quot;text-decoration: underline;&quot;&gt;https://github.com&lt;/a&gt;</source>
<translation type="unfinished"/>
</message>
<message>
<source>KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3.</source>
<translation>KeePassXC distribueras enligt villkoren i GNU General Public License (GPL) version 2 eller (om du vill) version 3.</translation>
</message>
<message>
<source>Project Maintainers:</source>
<translation type="unfinished"/>
</message>
<message>
<source>&lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/graphs/contributors&quot;&gt;See Contributions on GitHub&lt;/a&gt;</source>
<translation type="unfinished"/>
</message>
<message>
<source>Include the following information whenever you report a bug:</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>AccessControlDialog</name>
@ -112,11 +73,11 @@ Kernel: %3 %4</source>
</message>
<message>
<source>Allow</source>
<translation type="unfinished"/>
<translation>Tillåt</translation>
</message>
<message>
<source>Deny</source>
<translation type="unfinished"/>
<translation>Neka</translation>
</message>
<message>
<source>%1 has requested access to passwords for the following item(s).
@ -231,7 +192,7 @@ Please select whether you want to allow access.</source>
</message>
<message>
<source>Refresh</source>
<translation type="unfinished"/>
<translation>Uppdatera</translation>
</message>
<message>
<source>Empty password</source>
@ -248,10 +209,6 @@ Please select whether you want to allow access.</source>
<source>Clone Options</source>
<translation type="unfinished"/>
</message>
<message>
<source>Append &apos; - Copy&apos; to title</source>
<translation type="unfinished"/>
</message>
<message>
<source>Replace username and password with references</source>
<translation type="unfinished"/>
@ -260,6 +217,10 @@ Please select whether you want to allow access.</source>
<source>Copy history</source>
<translation type="unfinished"/>
</message>
<message>
<source>Append &apos; - Clone&apos; to title</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>CsvImportWidget</name>
@ -269,7 +230,7 @@ Please select whether you want to allow access.</source>
</message>
<message>
<source>filename</source>
<translation type="unfinished"/>
<translation>filnamn</translation>
</message>
<message>
<source>size, rows, columns</source>
@ -309,7 +270,7 @@ Please select whether you want to allow access.</source>
</message>
<message>
<source>Preview</source>
<translation type="unfinished"/>
<translation>Förhandsgranska</translation>
</message>
<message>
<source>Column layout</source>
@ -325,7 +286,7 @@ Please select whether you want to allow access.</source>
</message>
<message>
<source>column </source>
<translation type="unfinished"/>
<translation>kolumn</translation>
</message>
<message>
<source>Imported from CSV file</source>
@ -380,7 +341,7 @@ Please select whether you want to allow access.</source>
</message>
<message>
<source> columns</source>
<translation type="unfinished"/>
<translation> kolumner</translation>
</message>
</context>
<context>
@ -423,7 +384,7 @@ Please select whether you want to allow access.</source>
</message>
<message>
<source>Refresh</source>
<translation type="unfinished"/>
<translation>Uppdatera</translation>
</message>
<message>
<source>Challenge Response:</source>
@ -610,7 +571,7 @@ I annat fall försvinner ändringarna.</translation>
<source>&quot;%1&quot; is in edit mode.
Discard changes and close anyway?</source>
<translation>&quot;%1&quot; är i redigeringsläge.
Kasta ändringarna och stäng endå?</translation>
Kasta ändringarna och stäng ändå?</translation>
</message>
<message>
<source>Export database to CSV file</source>
@ -1092,10 +1053,6 @@ Do you want to open it anyway?</source>
<source>Select Image</source>
<translation>Välj bild</translation>
</message>
<message>
<source>Error</source>
<translation>Fel</translation>
</message>
<message>
<source>Download favicon</source>
<translation type="unfinished"/>
@ -1124,6 +1081,14 @@ Do you want to open it anyway?</source>
<source>This icon is used by %1 entries, and will be replaced by the default icon. Are you sure you want to delete it?</source>
<translation type="unfinished"/>
</message>
<message>
<source>Hint: You can enable Google as a fallback under Tools&gt;Settings&gt;Security</source>
<translation type="unfinished"/>
</message>
<message>
<source>Custom icon already exists</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>EditWidgetProperties</name>
@ -1331,17 +1296,14 @@ Do you want to open it anyway?</source>
<translation>Kunde inte räkna nu master-nyckeln</translation>
</message>
<message>
<source>The selected file is an old KeePass 1 database (.kdb).
You can import it by clicking on Database &gt; 'Import KeePass 1 database'.
This is a one-way migration. You won&apos;t be able to open the imported database with the old KeePassX 0.4 version.</source>
<translation>Den valda filen är en gammal KeePass 1 databas (.kdb)
Du kan importera den genom att klicka Databas &gt; Importera KeePass 1 databas.
Detta är en envägsmigration. Du kan inte spara en databas som KeePass1 databas. Det som används i KeePassX 0.4.</translation>
<source>Unable to issue challenge-response.</source>
<translation type="unfinished"/>
</message>
<message>
<source>Unable to issue challenge-response.</source>
<source>The selected file is an old KeePass 1 database (.kdb).
You can import it by clicking on Database &gt; 'Import KeePass 1 database...'.
This is a one-way migration. You won&apos;t be able to open the imported database with the old KeePassX 0.4 version.</source>
<translation type="unfinished"/>
</message>
</context>
@ -1363,6 +1325,10 @@ Detta är en envägsmigration. Du kan inte spara en databas som KeePass1 databas
<source>Another instance of KeePassXC is already running.</source>
<translation type="unfinished"/>
</message>
<message>
<source>Existing single-instance lock file is invalid. Launching new instance.</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>MainWindow</name>
@ -1418,10 +1384,6 @@ Detta är en envägsmigration. Du kan inte spara en databas som KeePass1 databas
<source>&amp;Recent databases</source>
<translation type="unfinished"/>
</message>
<message>
<source>He&amp;lp</source>
<translation type="unfinished"/>
</message>
<message>
<source>E&amp;ntries</source>
<translation type="unfinished"/>
@ -1446,10 +1408,6 @@ Detta är en envägsmigration. Du kan inte spara en databas som KeePass1 databas
<source>&amp;About</source>
<translation type="unfinished"/>
</message>
<message>
<source>&amp;Open database</source>
<translation type="unfinished"/>
</message>
<message>
<source>&amp;Save database</source>
<translation type="unfinished"/>
@ -1490,14 +1448,6 @@ Detta är en envägsmigration. Du kan inte spara en databas som KeePass1 databas
<source>&amp;Delete group</source>
<translation type="unfinished"/>
</message>
<message>
<source>Sa&amp;ve database as</source>
<translation type="unfinished"/>
</message>
<message>
<source>Change &amp;master key</source>
<translation type="unfinished"/>
</message>
<message>
<source>&amp;Database settings</source>
<translation type="unfinished"/>
@ -1510,10 +1460,6 @@ Detta är en envägsmigration. Du kan inte spara en databas som KeePass1 databas
<source>Timed one-time password</source>
<translation type="unfinished"/>
</message>
<message>
<source>Setup TOTP</source>
<translation type="unfinished"/>
</message>
<message>
<source>Copy &amp;TOTP</source>
<translation type="unfinished"/>
@ -1562,21 +1508,13 @@ Detta är en envägsmigration. Du kan inte spara en databas som KeePass1 databas
<source>&amp;Notes</source>
<translation type="unfinished"/>
</message>
<message>
<source>&amp;Export to CSV file</source>
<translation type="unfinished"/>
</message>
<message>
<source>Re&amp;pair database</source>
<translation type="unfinished"/>
</message>
<message>
<source>Password Generator</source>
<translation type="unfinished"/>
</message>
<message>
<source>Clear history</source>
<translation type="unfinished"/>
<translation>Töm historiken</translation>
</message>
<message>
<source>&amp;Database</source>
@ -1584,20 +1522,12 @@ Detta är en envägsmigration. Du kan inte spara en databas som KeePass1 databas
</message>
<message>
<source>Import</source>
<translation type="unfinished"/>
<translation>Importera</translation>
</message>
<message>
<source>&amp;Tools</source>
<translation type="unfinished"/>
</message>
<message>
<source>Import KeePass 1 database</source>
<translation>Importera KeePass1 databas</translation>
</message>
<message>
<source>Import CSV file</source>
<translation type="unfinished"/>
</message>
<message>
<source>Empty recycle bin</source>
<translation type="unfinished"/>
@ -1614,6 +1544,42 @@ Detta är en envägsmigration. Du kan inte spara en databas som KeePass1 databas
<source>Please touch the button on your YubiKey!</source>
<translation type="unfinished"/>
</message>
<message>
<source>&amp;Help</source>
<translation type="unfinished"/>
</message>
<message>
<source>&amp;Open database...</source>
<translation type="unfinished"/>
</message>
<message>
<source>Sa&amp;ve database as...</source>
<translation type="unfinished"/>
</message>
<message>
<source>Change &amp;master key...</source>
<translation type="unfinished"/>
</message>
<message>
<source>&amp;Export to CSV file...</source>
<translation type="unfinished"/>
</message>
<message>
<source>Import KeePass 1 database...</source>
<translation type="unfinished"/>
</message>
<message>
<source>Import CSV file...</source>
<translation>Importera CSV fil...</translation>
</message>
<message>
<source>Re&amp;pair database...</source>
<translation type="unfinished"/>
</message>
<message>
<source>Set up TOTP...</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>OptionDialog</name>
@ -1792,7 +1758,7 @@ Change them only if you know what you are doing.</source>
</message>
<message>
<source>Close</source>
<translation type="unfinished"/>
<translation>Stäng</translation>
</message>
<message>
<source>Apply</source>
@ -1848,7 +1814,7 @@ Change them only if you know what you are doing.</source>
</message>
<message>
<source>Copy</source>
<translation type="unfinished"/>
<translation>Kopiera</translation>
</message>
</context>
<context>
@ -1965,7 +1931,7 @@ Change them only if you know what you are doing.</source>
</message>
<message>
<source>Clear</source>
<translation type="unfinished"/>
<translation>Rensa</translation>
</message>
<message>
<source>Search...</source>
@ -2010,7 +1976,7 @@ Please unlock the selected database or choose another one which is unlocked.</so
</message>
<message>
<source>Abort</source>
<translation type="unfinished"/>
<translation>Avbryt</translation>
</message>
<message>
<source>Successfully removed permissions from %1 %2.</source>
@ -2160,6 +2126,18 @@ give it a unique name to identify and accept it.</source>
<source>Always ask before performing Auto-Type</source>
<translation type="unfinished"/>
</message>
<message>
<source>Auto-Type delay</source>
<translation type="unfinished"/>
</message>
<message>
<source> ms</source>
<translation type="unfinished"/>
</message>
<message>
<source>Start only a single instance of KeePassXC</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>SettingsWidgetSecurity</name>
@ -2199,6 +2177,14 @@ give it a unique name to identify and accept it.</source>
<source>Lock databases when session is locked or lid is closed</source>
<translation type="unfinished"/>
</message>
<message>
<source>Privacy</source>
<translation type="unfinished"/>
</message>
<message>
<source>Use Google as fallback for downloading website icons</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>SetupTotpDialog</name>
@ -2251,7 +2237,7 @@ give it a unique name to identify and accept it.</source>
</message>
<message>
<source>Copy</source>
<translation type="unfinished"/>
<translation>Kopiera</translation>
</message>
<message>
<source>Expires in</source>
@ -2281,11 +2267,11 @@ give it a unique name to identify and accept it.</source>
</message>
<message>
<source>Create new database</source>
<translation type="unfinished"/>
<translation>Skapa ny databas</translation>
</message>
<message>
<source>Open existing database</source>
<translation type="unfinished"/>
<translation>Öppna befintlig databas</translation>
</message>
<message>
<source>Import from KeePass 1</source>
@ -2293,7 +2279,7 @@ give it a unique name to identify and accept it.</source>
</message>
<message>
<source>Import from CSV</source>
<translation type="unfinished"/>
<translation>Importera från CSV</translation>
</message>
<message>
<source>Recent databases</source>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,17 +1,64 @@
#!/bin/sh
#!/usr/bin/env bash
#
# Copyright (C) 2017 KeePassXC Team <team@keepassxc.org>
#
# 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 <http://www.gnu.org/licenses/>.
#
BASEDIR=$(dirname $0)
BASEDIR="$(dirname $0)"
cd $BASEDIR/../..
PUSH=true
PULL=true
UPDATE=true
echo Updating source file
lupdate-qt5 -no-ui-lines -disable-heuristic similartext -locations none -no-obsolete src -ts share/translations/keepassx_en.ts
lupdate-qt5 -no-ui-lines -disable-heuristic similartext -locations none -pluralonly src -ts share/translations/keepassx_en_plurals.ts
if [ "$1" == "push" ]; then
PULL=false
elif [ "$1" == "pull" ]; then
PUSH=false
UPDATE=false
elif [ "$1" == "update" ]; then
PUSH=false
PULL=false
elif [ "$1" != "" ]; then
echo "Unknown command '${1}'"
echo "Usage: $(basename $0) [update|pull|push]"
exit 1
fi
echo
echo Pushing English translation file to Transifex
tx push -s
cd "${BASEDIR}/../.."
echo
echo Pulling translations from Transifex
tx pull -af --minimum-perc=40
if $UPDATE; then
echo "Updating source files..."
LUPDATE=lupdate-qt5
command -v $LUPDATE > /dev/null
if [ $? -ne 0 ]; then
LUPDATE=lupdate
fi
$LUPDATE -no-ui-lines -disable-heuristic similartext -locations none -no-obsolete src -ts share/translations/keepassx_en.ts
$LUPDATE -no-ui-lines -disable-heuristic similartext -locations none -pluralonly src -ts share/translations/keepassx_en_plurals.ts
echo
fi
if $PUSH; then
echo "Pushing English source files to Transifex..."
tx push -s
echo
fi
if $PULL; then
echo "Pulling translations from Transifex..."
tx pull -af --minimum-perc=40
echo
fi

View File

@ -1,13 +0,0 @@
[Desktop Entry]
Name=KeePassXC
GenericName=Community Password Manager
GenericName[de]=Passwortverwaltung
GenericName[es]=Gestor de contraseñas
GenericName[fr]=Gestionnaire de mot de passe
GenericName[ru]=менеджер паролей
Exec=keepassxc %f
Icon=${SNAP}/share/icons/hicolor/256x256/apps/keepassxc.png
Terminal=false
Type=Application
Categories=Qt;Utility;
MimeType=application/x-keepass2;

View File

@ -1,5 +1,5 @@
name: keepassxc
version: 2.2.0
version: 2.2.1
grade: stable
summary: community driven port of the windows application “Keepass Password Safe”
description: |
@ -11,7 +11,11 @@ confinement: strict
apps:
keepassxc:
command: desktop-launch keepassxc
plugs: [unity7, x11, opengl, gsettings, home, network, network-bind, removable-media]
plugs: [unity7, x11, opengl, gsettings, home, network, network-bind, removable-media, raw-usb]
desktop: share/applications/keepassxc.desktop
cli:
command: keepassxc-cli
plugs: [gsettings, home, removable-media, raw-usb]
parts:
keepassxc:
@ -36,8 +40,9 @@ parts:
- libyubikey-dev
- libykpers-1-dev
after: [desktop-qt5]
# Redefine desktop-qt5 stage packages to work with Ubuntu 17.04
desktop-qt5:
# Redefine stage packages to work with Ubuntu 17.04
stage-packages:
- libxkbcommon0
- ttf-ubuntu-font-family
@ -48,3 +53,12 @@ parts:
- libgdk-pixbuf2.0-0
- libqt5svg5 # for loading icon themes which are svg
- locales-all
# Overcome limitation in snapd to support URL loading (CTRL+U)
snapd-xdg-open:
source: https://github.com/ubuntu-core/snapd-xdg-open.git
plugin: dump
organize:
data/xdg-open: bin/xdg-open
stage-packages:
- dbus

View File

@ -317,7 +317,7 @@ bool AutoType::parseActions(const QString& sequence, const Entry* entry, QList<A
{
QString tmpl;
bool inTmpl = false;
m_autoTypeDelay = 0;
m_autoTypeDelay = config()->get("AutoTypeDelay").toInt();
for (const QChar& ch : sequence) {

View File

@ -499,14 +499,12 @@ void AutoTypeExecutorMac::execChar(AutoTypeChar* action)
{
m_platform->sendChar(action->character, true);
m_platform->sendChar(action->character, false);
usleep(25 * 1000);
}
void AutoTypeExecutorMac::execKey(AutoTypeKey* action)
{
m_platform->sendKey(action->key, true);
m_platform->sendKey(action->key, false);
usleep(25 * 1000);
}
void AutoTypeExecutorMac::execClearField(AutoTypeClearField* action = nullptr)

View File

@ -522,14 +522,12 @@ void AutoTypeExecutorWin::execChar(AutoTypeChar* action)
{
m_platform->sendChar(action->character, true);
m_platform->sendChar(action->character, false);
::Sleep(25);
}
void AutoTypeExecutorWin::execKey(AutoTypeKey* action)
{
m_platform->sendKey(action->key, true);
m_platform->sendKey(action->key, false);
::Sleep(25);
}
void AutoTypeExecutorWin::execClearField(AutoTypeClearField* action = nullptr)

View File

@ -641,21 +641,13 @@ int AutoTypePlatformX11::AddKeysym(KeySym keysym)
* If input focus is specified explicitly, select the window
* before send event to the window.
*/
void AutoTypePlatformX11::SendEvent(XKeyEvent* event, int event_type)
void AutoTypePlatformX11::SendKeyEvent(unsigned keycode, bool press)
{
XSync(event->display, False);
XSync(m_dpy, False);
int (*oldHandler) (Display*, XErrorEvent*) = XSetErrorHandler(MyErrorHandler);
event->type = event_type;
Bool press;
if (event->type == KeyPress) {
press = True;
}
else {
press = False;
}
XTestFakeKeyEvent(event->display, event->keycode, press, 0);
XFlush(event->display);
XTestFakeKeyEvent(m_dpy, keycode, press, 0);
XFlush(m_dpy);
XSetErrorHandler(oldHandler);
}
@ -664,17 +656,12 @@ void AutoTypePlatformX11::SendEvent(XKeyEvent* event, int event_type)
* Send a modifier press/release event for all modifiers
* which are set in the mask variable.
*/
void AutoTypePlatformX11::SendModifier(XKeyEvent *event, unsigned int mask, int event_type)
void AutoTypePlatformX11::SendModifiers(unsigned int mask, bool press)
{
int mod_index;
for (mod_index = ShiftMapIndex; mod_index <= Mod5MapIndex; mod_index ++) {
if (mask & (1 << mod_index)) {
event->keycode = m_modifier_keycode[mod_index];
SendEvent(event, event_type);
if (event_type == KeyPress)
event->state |= (1 << mod_index);
else
event->state &= (1 << mod_index);
SendKeyEvent(m_modifier_keycode[mod_index], press);
}
}
}
@ -729,43 +716,15 @@ bool AutoTypePlatformX11::keysymModifiers(KeySym keysym, int keycode, unsigned i
* window to simulate keyboard. If modifiers (shift, control, etc)
* are set ON, many events will be sent.
*/
void AutoTypePlatformX11::SendKeyPressedEvent(KeySym keysym)
void AutoTypePlatformX11::SendKey(KeySym keysym, unsigned int modifiers)
{
SendKey(keysym,true);
SendKey(keysym,false);
}
void AutoTypePlatformX11::SendKey(KeySym keysym, bool isKeyDown)
{
Window cur_focus;
int revert_to;
XKeyEvent event;
int keycode;
if (keysym == NoSymbol) {
qWarning("No such key: keysym=0x%lX", keysym);
return;
}
XGetInputFocus(m_dpy, &cur_focus, &revert_to);
event.display = m_dpy;
event.window = cur_focus;
event.root = m_rootWindow;
event.subwindow = None;
event.time = CurrentTime;
event.x = 1;
event.y = 1;
event.x_root = 1;
event.y_root = 1;
event.same_screen = True;
Window root, child;
int root_x, root_y, x, y;
unsigned int wanted_mask = 0;
unsigned int original_mask;
XQueryPointer(m_dpy, event.root, &root, &child, &root_x, &root_y, &x, &y, &original_mask);
int keycode;
unsigned int wanted_mask;
/* determine keycode and mask for the given keysym */
keycode = GetKeycode(keysym, &wanted_mask);
@ -773,8 +732,14 @@ void AutoTypePlatformX11::SendKey(KeySym keysym, bool isKeyDown)
qWarning("Unable to get valid keycode for key: keysym=0x%lX", keysym);
return;
}
wanted_mask |= modifiers;
event.state = original_mask;
Window root, child;
int root_x, root_y, x, y;
unsigned int original_mask;
XSync(m_dpy, False);
XQueryPointer(m_dpy, m_rootWindow, &root, &child, &root_x, &root_y, &x, &y, &original_mask);
// modifiers that need to be pressed but aren't
unsigned int press_mask = wanted_mask & ~original_mask;
@ -785,47 +750,52 @@ void AutoTypePlatformX11::SendKey(KeySym keysym, bool isKeyDown)
// modifiers we need to release before sending the keycode
unsigned int release_mask = 0;
// check every release_check_mask individually if it affects the keysym we would generate
// if it doesn't we probably don't need to release it
for (int mod_index = ShiftMapIndex; mod_index <= Mod5MapIndex; mod_index ++) {
if (release_check_mask & (1 << mod_index)) {
unsigned int mods_rtrn;
KeySym keysym_rtrn;
XkbTranslateKeyCode(m_xkb, keycode, wanted_mask | (1 << mod_index), &mods_rtrn, &keysym_rtrn);
if (!modifiers) {
// check every release_check_mask individually if it affects the keysym we would generate
// if it doesn't we probably don't need to release it
for (int mod_index = ShiftMapIndex; mod_index <= Mod5MapIndex; mod_index ++) {
if (release_check_mask & (1 << mod_index)) {
unsigned int mods_rtrn;
KeySym keysym_rtrn;
XkbTranslateKeyCode(m_xkb, keycode, wanted_mask | (1 << mod_index), &mods_rtrn, &keysym_rtrn);
if (keysym_rtrn != keysym) {
release_mask |= (1 << mod_index);
if (keysym_rtrn != keysym) {
release_mask |= (1 << mod_index);
}
}
}
}
// finally check if the combination of pressed modifiers that we chose to ignore affects the keysym
unsigned int mods_rtrn;
KeySym keysym_rtrn;
XkbTranslateKeyCode(m_xkb, keycode, wanted_mask | (release_check_mask & ~release_mask), &mods_rtrn, &keysym_rtrn);
if (keysym_rtrn != keysym) {
// oh well, release all the modifiers we don't want
// finally check if the combination of pressed modifiers that we chose to ignore affects the keysym
unsigned int mods_rtrn;
KeySym keysym_rtrn;
XkbTranslateKeyCode(m_xkb, keycode, wanted_mask | (release_check_mask & ~release_mask), &mods_rtrn, &keysym_rtrn);
if (keysym_rtrn != keysym) {
// oh well, release all the modifiers we don't want
release_mask = release_check_mask;
}
} else {
release_mask = release_check_mask;
}
/* release all modifiers */
SendModifier(&event, release_mask, KeyRelease);
SendModifier(&event, press_mask, KeyPress);
/* press and release key */
event.keycode = keycode;
if (isKeyDown) {
SendEvent(&event, KeyPress);
} else {
SendEvent(&event, KeyRelease);
/* set modifiers mask */
if ((release_mask | press_mask) & LockMask) {
SendModifiers(LockMask, true);
SendModifiers(LockMask, false);
}
SendModifiers(release_mask & ~LockMask, false);
SendModifiers(press_mask & ~LockMask, true);
/* release the modifiers */
SendModifier(&event, press_mask, KeyRelease);
/* press and release release key */
SendKeyEvent(keycode, true);
SendKeyEvent(keycode, false);
/* restore the old keyboard mask */
SendModifier(&event, release_mask, KeyPress);
/* restore previous modifiers mask */
SendModifiers(press_mask & ~LockMask, false);
SendModifiers(release_mask & ~LockMask, true);
if ((release_mask | press_mask) & LockMask) {
SendModifiers(LockMask, true);
SendModifiers(LockMask, false);
}
}
int AutoTypePlatformX11::MyErrorHandler(Display* my_dpy, XErrorEvent* event)
@ -848,14 +818,12 @@ AutoTypeExecutorX11::AutoTypeExecutorX11(AutoTypePlatformX11* platform)
void AutoTypeExecutorX11::execChar(AutoTypeChar* action)
{
m_platform->SendKeyPressedEvent(m_platform->charToKeySym(action->character));
Tools::wait(25);
m_platform->SendKey(m_platform->charToKeySym(action->character));
}
void AutoTypeExecutorX11::execKey(AutoTypeKey* action)
{
m_platform->SendKeyPressedEvent(m_platform->keyToKeySym(action->key));
Tools::wait(25);
m_platform->SendKey(m_platform->keyToKeySym(action->key));
}
void AutoTypeExecutorX11::execClearField(AutoTypeClearField* action = nullptr)
@ -866,19 +834,13 @@ void AutoTypeExecutorX11::execClearField(AutoTypeClearField* action = nullptr)
ts.tv_sec = 0;
ts.tv_nsec = 25 * 1000 * 1000;
m_platform->SendKey(m_platform->keyToKeySym(Qt::Key_Control), true);
m_platform->SendKeyPressedEvent(m_platform->keyToKeySym(Qt::Key_Home));
m_platform->SendKey(m_platform->keyToKeySym(Qt::Key_Control), false);
m_platform->SendKey(m_platform->keyToKeySym(Qt::Key_Home), static_cast<unsigned int>(ControlMask));
nanosleep(&ts, nullptr);
m_platform->SendKey(m_platform->keyToKeySym(Qt::Key_Control), true);
m_platform->SendKey(m_platform->keyToKeySym(Qt::Key_Shift), true);
m_platform->SendKeyPressedEvent(m_platform->keyToKeySym(Qt::Key_End));
m_platform->SendKey(m_platform->keyToKeySym(Qt::Key_Shift), false);
m_platform->SendKey(m_platform->keyToKeySym(Qt::Key_Control), false);
m_platform->SendKey(m_platform->keyToKeySym(Qt::Key_End), static_cast<unsigned int>(ControlMask | ShiftMask));
nanosleep(&ts, nullptr);
m_platform->SendKeyPressedEvent(m_platform->keyToKeySym(Qt::Key_Backspace));
m_platform->SendKey(m_platform->keyToKeySym(Qt::Key_Backspace));
nanosleep(&ts, nullptr);
}

View File

@ -58,8 +58,7 @@ public:
KeySym charToKeySym(const QChar& ch);
KeySym keyToKeySym(Qt::Key key);
void SendKeyPressedEvent(KeySym keysym);
void SendKey(KeySym keysym, bool isKeyDown);
void SendKey(KeySym keysym, unsigned int modifiers = 0);
signals:
void globalShortcutTriggered();
@ -80,8 +79,8 @@ private:
bool isRemapKeycodeValid();
int AddKeysym(KeySym keysym);
void AddModifier(KeySym keysym);
void SendEvent(XKeyEvent* event, int event_type);
void SendModifier(XKeyEvent *event, unsigned int mask, int event_type);
void SendKeyEvent(unsigned keycode, bool press);
void SendModifiers(unsigned int mask, bool press);
int GetKeycode(KeySym keysym, unsigned int *mask);
bool keysymModifiers(KeySym keysym, int keycode, unsigned int *mask);

View File

@ -107,6 +107,7 @@ void Config::init(const QString& fileName)
{
m_settings.reset(new QSettings(fileName, QSettings::IniFormat));
m_defaults.insert("SingleInstance", true);
m_defaults.insert("RememberLastDatabases", true);
m_defaults.insert("RememberLastKeyFiles", true);
m_defaults.insert("OpenPreviousDatabasesOnStartup", true);
@ -118,8 +119,9 @@ void Config::init(const QString& fileName)
m_defaults.insert("MinimizeOnCopy", false);
m_defaults.insert("UseGroupIconOnEntryCreation", false);
m_defaults.insert("AutoTypeEntryTitleMatch", true);
m_defaults.insert("AutoTypeDelay", 25);
m_defaults.insert("UseGroupIconOnEntryCreation", true);
m_defaults.insert("IgnoreGroupExpansion", false);
m_defaults.insert("IgnoreGroupExpansion", true);
m_defaults.insert("security/clearclipboard", true);
m_defaults.insert("security/clearclipboardtimeout", 10);
m_defaults.insert("security/lockdatabaseidle", false);
@ -129,6 +131,7 @@ void Config::init(const QString& fileName)
m_defaults.insert("security/passwordsrepeat", false);
m_defaults.insert("security/passwordscleartext", false);
m_defaults.insert("security/autotypeask", true);
m_defaults.insert("security/IconDownloadFallbackToGoogle", false);
m_defaults.insert("GUI/Language", "system");
m_defaults.insert("GUI/ShowTrayIcon", false);
m_defaults.insert("GUI/MinimizeToTray", false);

View File

@ -17,6 +17,8 @@
*/
#include "Entry.h"
#include "config-keepassx.h"
#include "core/Database.h"
#include "core/DatabaseIcons.h"
#include "core/Group.h"
@ -237,6 +239,11 @@ QString Entry::url() const
return m_attributes->value(EntryAttributes::URLKey);
}
QString Entry::webUrl() const
{
return resolveUrl(m_attributes->value(EntryAttributes::URLKey));
}
QString Entry::username() const
{
return m_attributes->value(EntryAttributes::UserNameKey);
@ -720,6 +727,13 @@ const Database* Entry::database() const
}
}
QString Entry::maskPasswordPlaceholders(const QString &str) const
{
QString result = str;
result.replace(QRegExp("(\\{PASSWORD\\})", Qt::CaseInsensitive, QRegExp::RegExp2), "******");
return result;
}
QString Entry::resolveMultiplePlaceholders(const QString& str) const
{
QString result = str;
@ -784,3 +798,31 @@ QString Entry::resolvePlaceholder(const QString& str) const
return result;
}
QString Entry::resolveUrl(const QString& url) const
{
#ifdef WITH_XC_HTTP
QString newUrl = url;
if (!url.contains("://")) {
// URL doesn't have a protocol, add https by default
newUrl.prepend("https://");
}
QUrl tempUrl = QUrl(newUrl);
if (tempUrl.isValid()) {
if (tempUrl.scheme() == "cmd") {
// URL is a cmd, hopefully the second argument is an URL
QStringList cmd = newUrl.split(" ");
if (cmd.size() > 1) {
return resolveUrl(cmd[1].remove("'").remove("\""));
}
} else if (tempUrl.scheme() == "http" || tempUrl.scheme() == "https") {
// URL is nice
return tempUrl.url();
}
}
#else
Q_UNUSED(url);
#endif
return QString("");
}

View File

@ -78,6 +78,7 @@ public:
const AutoTypeAssociations* autoTypeAssociations() const;
QString title() const;
QString url() const;
QString webUrl() const;
QString username() const;
QString password() const;
QString notes() const;
@ -141,8 +142,10 @@ public:
*/
Entry* clone(CloneFlags flags) const;
void copyDataFrom(const Entry* other);
QString maskPasswordPlaceholders(const QString& str) const;
QString resolveMultiplePlaceholders(const QString& str) const;
QString resolvePlaceholder(const QString& str) const;
QString resolveUrl(const QString& url) const;
/**
* Call before and after set*() methods to create a history item

View File

@ -667,7 +667,7 @@ void Group::merge(const Group* other)
for (Entry* entry : dbEntries) {
// entries are searched by uuid
if (!findEntryByUuid(entry->uuid())) {
entry->clone(Entry::CloneNoFlags)->setGroup(this);
entry->clone(Entry::CloneIncludeHistory)->setGroup(this);
} else {
resolveConflict(findEntryByUuid(entry->uuid()), entry);
}
@ -891,11 +891,11 @@ void Group::resolveConflict(Entry* existingEntry, Entry* otherEntry)
case KeepBoth:
// if one entry is newer, create a clone and add it to the group
if (timeExisting > timeOther) {
clonedEntry = otherEntry->clone(Entry::CloneNoFlags);
clonedEntry = otherEntry->clone(Entry::CloneIncludeHistory);
clonedEntry->setGroup(this);
markOlderEntry(clonedEntry);
} else if (timeExisting < timeOther) {
clonedEntry = otherEntry->clone(Entry::CloneNoFlags);
clonedEntry = otherEntry->clone(Entry::CloneIncludeHistory);
clonedEntry->setGroup(this);
markOlderEntry(existingEntry);
}
@ -904,7 +904,8 @@ void Group::resolveConflict(Entry* existingEntry, Entry* otherEntry)
if (timeExisting < timeOther) {
// only if other entry is newer, replace existing one
removeEntry(existingEntry);
addEntry(otherEntry->clone(Entry::CloneNoFlags));
clonedEntry = otherEntry->clone(Entry::CloneIncludeHistory);
clonedEntry->setGroup(this);
}
break;

View File

@ -15,6 +15,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <QtCore/QCryptographicHash>
#include "Metadata.h"
#include "core/Entry.h"
@ -390,6 +391,9 @@ void Metadata::addCustomIcon(const Uuid& uuid, const QImage& icon)
m_customIconCacheKeys[uuid] = QPixmapCache::Key();
m_customIconScaledCacheKeys[uuid] = QPixmapCache::Key();
m_customIconsOrder.append(uuid);
// Associate image hash to uuid
QByteArray hash = hashImage(icon);
m_customIconsHashes[hash] = uuid;
Q_ASSERT(m_customIcons.count() == m_customIconsOrder.count());
emit modified();
}
@ -415,6 +419,12 @@ void Metadata::removeCustomIcon(const Uuid& uuid)
Q_ASSERT(!uuid.isNull());
Q_ASSERT(m_customIcons.contains(uuid));
// Remove hash record only if this is the same uuid
QByteArray hash = hashImage(m_customIcons[uuid]);
if (m_customIconsHashes.contains(hash) && m_customIconsHashes[hash] == uuid) {
m_customIconsHashes.remove(hash);
}
m_customIcons.remove(uuid);
QPixmapCache::remove(m_customIconCacheKeys.value(uuid));
m_customIconCacheKeys.remove(uuid);
@ -425,6 +435,12 @@ void Metadata::removeCustomIcon(const Uuid& uuid)
emit modified();
}
Uuid Metadata::findCustomIcon(const QImage &candidate)
{
QByteArray hash = hashImage(candidate);
return m_customIconsHashes.value(hash, Uuid());
}
void Metadata::copyCustomIcons(const QSet<Uuid>& iconList, const Metadata* otherMetadata)
{
for (const Uuid& uuid : iconList) {
@ -436,6 +452,12 @@ void Metadata::copyCustomIcons(const QSet<Uuid>& iconList, const Metadata* other
}
}
QByteArray Metadata::hashImage(const QImage& image)
{
auto data = QByteArray((char*)image.bits(), image.byteCount());
return QCryptographicHash::hash(data, QCryptographicHash::Md5);
}
void Metadata::setRecycleBinEnabled(bool value)
{
set(m_data.recycleBinEnabled, value);

View File

@ -122,6 +122,7 @@ public:
void addCustomIconScaled(const Uuid& uuid, const QImage& icon);
void removeCustomIcon(const Uuid& uuid);
void copyCustomIcons(const QSet<Uuid>& iconList, const Metadata* otherMetadata);
Uuid findCustomIcon(const QImage& candidate);
void setRecycleBinEnabled(bool value);
void setRecycleBin(Group* group);
void setRecycleBinChanged(const QDateTime& value);
@ -154,12 +155,15 @@ private:
template <class P, class V> bool set(P& property, const V& value);
template <class P, class V> bool set(P& property, const V& value, QDateTime& dateTime);
QByteArray hashImage(const QImage& image);
MetadataData m_data;
QHash<Uuid, QImage> m_customIcons;
mutable QHash<Uuid, QPixmapCache::Key> m_customIconCacheKeys;
mutable QHash<Uuid, QPixmapCache::Key> m_customIconScaledCacheKeys;
QList<Uuid> m_customIconsOrder;
QHash<QByteArray, Uuid> m_customIconsHashes;
QPointer<Group> m_recycleBin;
QDateTime m_recycleBinChanged;

View File

@ -73,7 +73,7 @@ Database* KeePass2Reader::readDatabase(QIODevice* device, const CompositeKey& ke
quint32 signature2 = Endian::readUInt32(m_headerStream, KeePass2::BYTEORDER, &ok);
if (ok && signature2 == KeePass1::SIGNATURE_2) {
raiseError(tr("The selected file is an old KeePass 1 database (.kdb).\n\n"
"You can import it by clicking on Database > 'Import KeePass 1 database'.\n"
"You can import it by clicking on Database > 'Import KeePass 1 database...'.\n"
"This is a one-way migration. You won't be able to open the imported "
"database with the old KeePassX 0.4 version."));
return nullptr;

View File

@ -2,30 +2,10 @@
<ui version="4.0">
<class>AboutDialog</class>
<widget class="QDialog" name="AboutDialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>450</width>
<height>450</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>450</width>
<height>450</height>
</size>
</property>
<property name="windowTitle">
<string>About KeePassXC</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<layout class="QVBoxLayout" name="verticalLayout_2" stretch="0,1,0">
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="topMargin">
@ -71,7 +51,7 @@
</font>
</property>
<property name="text">
<string notr="true">&lt;span style=&quot;font-size: 24pt&quot;&gt; KeePassXC v${VERSION}&lt;/span&gt;</string>
<string notr="true">&lt;span style=&quot;font-size: 20pt&quot;&gt; KeePassXC ${VERSION}&lt;/span&gt;</string>
</property>
<property name="margin">
<number>0</number>
@ -102,7 +82,7 @@
</sizepolicy>
</property>
<property name="text">
<string notr="true">&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Website: &lt;a href=&quot;https://keepassxc.org/&quot;&gt;&lt;span style=&quot;text-decoration: underline; color:#0000ff;&quot;&gt;https://keepassxc.org&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
<string notr="true">Website: &lt;a href=&quot;https://keepassxc.org/&quot; style=&quot;text-decoration: underline&quot;&gt;https://keepassxc.org&lt;/a&gt;</string>
</property>
<property name="openExternalLinks">
<bool>true</bool>
@ -112,7 +92,7 @@
<item>
<widget class="QLabel" name="label_5">
<property name="text">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Report bugs at: &lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/issues&quot;&gt;&lt;span style=&quot;text-decoration: underline; color:#0000ff;&quot;&gt;https://github.com&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
<string>Report bugs at: &lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/issues&quot; style=&quot;text-decoration: underline;&quot;&gt;https://github.com&lt;/a&gt;</string>
</property>
<property name="openExternalLinks">
<bool>true</bool>
@ -138,13 +118,13 @@
<item>
<widget class="QLabel" name="label_3">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
<string>KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3.</string>
</property>
<property name="wordWrap">
<bool>true</bool>
@ -167,6 +147,13 @@
</property>
</spacer>
</item>
<item>
<widget class="QLabel" name="label_7">
<property name="text">
<string>Project Maintainers:</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_4">
<property name="sizePolicy">
@ -176,7 +163,14 @@
</sizepolicy>
</property>
<property name="text">
<string>&lt;html&gt;&lt;head&gt;&lt;style&gt;li {font-size: 10pt}&lt;/style&gt;&lt;/head&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;Project Maintainers:&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;droidmonkey&lt;/li&gt;&lt;li&gt;phoerious&lt;/li&gt;&lt;li&gt;TheZ3ro&lt;/li&gt;&lt;li&gt;louib&lt;/li&gt;&lt;li&gt;Weslly&lt;/li&gt;&lt;li&gt;debfx (KeePassX)&lt;/li&gt;&lt;/ul&gt;&lt;/body&gt;&lt;/html&gt;</string>
<string notr="true">&lt;ul&gt;
&lt;li&gt;droidmonkey&lt;/li&gt;
&lt;li&gt;phoerious&lt;/li&gt;
&lt;li&gt;TheZ3ro&lt;/li&gt;
&lt;li&gt;louib&lt;/li&gt;
&lt;li&gt;Weslly&lt;/li&gt;
&lt;li&gt;debfx (KeePassX)&lt;/li&gt;
&lt;/ul&gt;</string>
</property>
</widget>
</item>
@ -201,51 +195,90 @@
</attribute>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QTextEdit" name="contributors">
<property name="html">
<string>&lt;html&gt;&lt;body&gt;
&lt;p style=&quot;font-size:x-large; font-weight:600;&quot;&gt;Code:&lt;/p&gt;
&lt;ul&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;debfx (KeePassX)&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;BlueIce (KeePassX)&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;droidmonkey&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;phoerious&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;TheZ3ro&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;louib&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;weslly&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;keithbennett (KeePassHTTP)&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;Typz (KeePassHTTP)&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;denk-mal (KeePassHTTP)&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;kylemanna (YubiKey)&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;seatedscribe (CSV Importer)&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;pgalves (Inline Messages)&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;font-size:x-large; font-weight:600;&quot;&gt;Translations:&lt;/p&gt;
&lt;ul&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Chinese:&lt;/span&gt; Biggulu, ligyxy, BestSteve&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Czech:&lt;/span&gt; pavelb, JosefVitu&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Dutch:&lt;/span&gt; Vistaus, KnooL, apie&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Finnish:&lt;/span&gt; MawKKe&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;French:&lt;/span&gt; Scrat15, frgnca, gilbsgilbs, gtalbot, iannick, kyodev, logut&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;German:&lt;/span&gt; Calyrx, DavidHamburg, antsas, codejunky, jensrutschmann, montilo, omnisome4, origin_de, pcrcoding, phoerious, rgloor, vlenzer&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Greek:&lt;/span&gt; nplatis&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Italian:&lt;/span&gt; TheZ3ro, FranzMari, Mte90, tosky&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Kazakh:&lt;/span&gt; sotrud_nik&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Lithuanian:&lt;/span&gt; Moo&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Polish:&lt;/span&gt; konradmb, mrerexx&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Portuguese: &lt;/span&gt;vitor895, weslly, American_Jesus, mihai.ile&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Russian:&lt;/span&gt; vsvyatski, KekcuHa, wkill95&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Spanish:&lt;/span&gt; EdwardNavarro, antifaz, piegope, pquin, vsvyatski&lt;/li&gt;
&lt;li style=&quot;font-size:10pt&quot;&gt;&lt;span style=&quot;font-weight:600;&quot;&gt;Swedish:&lt;/span&gt; henziger&lt;/li&gt;
&lt;/ul&gt;
&lt;/body&gt;&lt;/html&gt;</string>
<widget class="QScrollArea" name="scrollArea">
<property name="widgetResizable">
<bool>true</bool>
</property>
<widget class="QWidget" name="scrollAreaWidgetContents">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>591</width>
<height>760</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_5">
<item>
<widget class="QLabel" name="contributors">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="cursor">
<cursorShape>IBeamCursor</cursorShape>
</property>
<property name="text">
<string notr="true">&lt;h2&gt;Code:&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;debfx (KeePassX) &lt;/li&gt;
&lt;li&gt;BlueIce (KeePassX) &lt;/li&gt;
&lt;li&gt;droidmonkey &lt;/li&gt;
&lt;li&gt;phoerious &lt;/li&gt;
&lt;li&gt;TheZ3ro &lt;/li&gt;
&lt;li&gt;louib &lt;/li&gt;
&lt;li &gt;weslly &lt;/li&gt;
&lt;li&gt;keithbennett (KeePassHTTP) &lt;/li&gt;
&lt;li&gt;Typz (KeePassHTTP) &lt;/li&gt;
&lt;li&gt;denk-mal (KeePassHTTP) &lt;/li&gt;
&lt;li&gt;kylemanna (YubiKey) &lt;/li&gt;
&lt;li&gt;seatedscribe (CSV Importer) &lt;/li&gt;
&lt;li&gt;pgalves (Inline Messages) &lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Translations:&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Chinese:&lt;/b&gt; Biggulu, ligyxy, BestSteve &lt;/li&gt;
&lt;li&gt;&lt;b&gt;Czech:&lt;/b&gt; pavelb, JosefVitu &lt;/li&gt;
&lt;li&gt;&lt;b&gt;Dutch:&lt;/b&gt; Vistaus, KnooL, apie &lt;/li&gt;
&lt;li&gt;&lt;b&gt;Finnish:&lt;/b&gt; MawKKe &lt;/li&gt;
&lt;li&gt;&lt;b&gt;French:&lt;/b&gt; Scrat15, frgnca, gilbsgilbs, gtalbot, iannick, kyodev, logut &lt;/li&gt;
&lt;li&gt;&lt;b&gt;German:&lt;/b&gt; Calyrx, DavidHamburg, antsas, codejunky, jensrutschmann, montilo, omnisome4, origin_de, pcrcoding, phoerious, rgloor, vlenzer &lt;/li&gt;
&lt;li&gt;&lt;b&gt;Greek:&lt;/b&gt; nplatis &lt;/li&gt;
&lt;li&gt;&lt;b&gt;Italian:&lt;/b&gt; TheZ3ro, FranzMari, Mte90, tosky &lt;/li&gt;
&lt;li&gt;&lt;b&gt;Kazakh:&lt;/b&gt; sotrud_nik &lt;/li&gt;
&lt;li&gt;&lt;b&gt;Lithuanian:&lt;/b&gt; Moo &lt;/li&gt;
&lt;li&gt;&lt;b&gt;Polish:&lt;/b&gt; konradmb, mrerexx &lt;/li&gt;
&lt;li&gt;&lt;b&gt;Portuguese: &lt;/b&gt;vitor895, weslly, American_Jesus, mihai.ile &lt;/li&gt;
&lt;li&gt;&lt;b&gt;Russian:&lt;/b&gt; vsvyatski, KekcuHa, wkill95 &lt;/li&gt;
&lt;li&gt;&lt;b&gt;Spanish:&lt;/b&gt; EdwardNavarro, antifaz, piegope, pquin, vsvyatski &lt;/li&gt;
&lt;li&gt;&lt;b&gt;Swedish:&lt;/b&gt; henziger &lt;/li&gt;
&lt;/ul&gt;</string>
</property>
<property name="textFormat">
<enum>Qt::RichText</enum>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
<property name="textInteractionFlags">
<set>Qt::TextBrowserInteraction</set>
</property>
</widget>
</item>
</layout>
</widget>
</widget>
</item>
<item>
<widget class="QLabel" name="label_6">
<property name="text">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;&lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/graphs/contributors&quot;&gt;&lt;span style=&quot; font-size:10pt; text-decoration: underline; color:#0000ff;&quot;&gt;See Contributions on GitHub&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
<string>&lt;a href=&quot;https://github.com/keepassxreboot/keepassxc/graphs/contributors&quot;&gt;See Contributions on GitHub&lt;/a&gt;</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="openExternalLinks">
<bool>true</bool>
@ -268,21 +301,21 @@
</sizepolicy>
</property>
<property name="text">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Include the following information whenever you report a bug:&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
<string>Include the following information whenever you report a bug:</string>
</property>
</widget>
</item>
<item>
<widget class="QPlainTextEdit" name="debugInfo">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
<property name="plainText">
<string notr="true"/>
</property>
<property name="textInteractionFlags">
<set>Qt::TextBrowserInteraction</set>
</property>
</widget>
</item>
<item>

View File

@ -19,6 +19,7 @@
#include "Application.h"
#include "MainWindow.h"
#include "core/Config.h"
#include <QAbstractNativeEventFilter>
#include <QFileOpenEvent>
@ -80,8 +81,8 @@ Application::Application(int& argc, char** argv)
#ifdef Q_OS_UNIX
, m_unixSignalNotifier(nullptr)
#endif
, alreadyRunning(false)
, lock(nullptr)
, m_alreadyRunning(false)
, m_lockFile(nullptr)
{
#if defined(Q_OS_UNIX) && !defined(Q_OS_OSX)
installNativeEventFilter(new XcbEventFilter());
@ -98,50 +99,72 @@ Application::Application(int& argc, char** argv)
}
QString identifier = "keepassxc";
if (!userName.isEmpty()) {
identifier.append("-");
identifier.append(userName);
identifier += "-" + userName;
}
#ifdef QT_DEBUG
// In DEBUG mode don't interfere with Release instances
identifier += "-DEBUG";
#endif
QString socketName = identifier + ".socket";
QString lockName = identifier + ".lock";
// According to documentation we should use RuntimeLocation on *nixes, but even Qt doesn't respect
// this and creates sockets in TempLocation, so let's be consistent.
lock = new QLockFile(QStandardPaths::writableLocation(QStandardPaths::TempLocation) + "/" + lockName);
lock->setStaleLockTime(0);
lock->tryLock();
switch (lock->error()) {
m_lockFile = new QLockFile(QStandardPaths::writableLocation(QStandardPaths::TempLocation) + "/" + lockName);
m_lockFile->setStaleLockTime(0);
m_lockFile->tryLock();
switch (m_lockFile->error()) {
case QLockFile::NoError:
server.setSocketOptions(QLocalServer::UserAccessOption);
server.listen(socketName);
connect(&server, SIGNAL(newConnection()), this, SIGNAL(anotherInstanceStarted()));
// No existing lock was found, start listener
m_lockServer.setSocketOptions(QLocalServer::UserAccessOption);
m_lockServer.listen(socketName);
connect(&m_lockServer, SIGNAL(newConnection()), this, SIGNAL(anotherInstanceStarted()));
break;
case QLockFile::LockFailedError: {
alreadyRunning = true;
// notify the other instance
// try several times, in case the other instance is still starting up
QLocalSocket client;
for (int i = 0; i < 3; i++) {
client.connectToServer(socketName);
if (client.waitForConnected(150)) {
client.abort();
break;
if (config()->get("SingleInstance").toBool()) {
// Attempt to connect to the existing instance
QLocalSocket client;
for (int i = 0; i < 3; i++) {
client.connectToServer(socketName);
if (client.waitForConnected(150)) {
// Connection succeeded, this will raise the existing window if minimized
client.abort();
m_alreadyRunning = true;
break;
}
}
if (!m_alreadyRunning) {
// If we get here then the original instance is likely dead
qWarning() << QCoreApplication::translate("Main",
"Existing single-instance lock file is invalid. Launching new instance.")
.toUtf8().constData();
// forceably reset the lock file
m_lockFile->removeStaleLockFile();
m_lockFile->tryLock();
// start the listen server
m_lockServer.setSocketOptions(QLocalServer::UserAccessOption);
m_lockServer.listen(socketName);
connect(&m_lockServer, SIGNAL(newConnection()), this, SIGNAL(anotherInstanceStarted()));
}
}
break;
}
default:
qWarning() << QCoreApplication::translate("Main",
"The lock file could not be created. Single-instance mode disabled.")
.toUtf8().constData();
"The lock file could not be created. Single-instance mode disabled.")
.toUtf8().constData();
}
}
Application::~Application()
{
server.close();
if (lock) {
lock->unlock();
delete lock;
m_lockServer.close();
if (m_lockFile) {
m_lockFile->unlock();
delete m_lockFile;
}
}
@ -232,6 +255,10 @@ void Application::quitBySignal()
bool Application::isAlreadyRunning() const
{
return alreadyRunning;
#ifdef QT_DEBUG
// In DEBUG mode we can run unlimited instances
return false;
#endif
return config()->get("SingleInstance").toBool() && m_alreadyRunning;
}

View File

@ -60,9 +60,9 @@ private:
static void handleUnixSignal(int sig);
static int unixSignalSocket[2];
#endif
bool alreadyRunning;
QLockFile* lock;
QLocalServer server;
bool m_alreadyRunning;
QLockFile* m_lockFile;
QLocalServer m_lockServer;
};
#endif // KEEPASSX_APPLICATION_H

View File

@ -19,7 +19,7 @@
<item>
<widget class="QCheckBox" name="titleClone">
<property name="text">
<string>Append ' - Copy' to title</string>
<string>Append ' - Clone' to title</string>
</property>
<property name="checked">
<bool>true</bool>

View File

@ -119,6 +119,18 @@ void DatabaseOpenWidget::load(const QString& filename)
m_ui->editPassword->setFocus();
}
void DatabaseOpenWidget::clearForms()
{
m_ui->editPassword->clear();
m_ui->comboKeyFile->clear();
m_ui->checkPassword->setChecked(false);
m_ui->checkKeyFile->setChecked(false);
m_ui->checkChallengeResponse->setChecked(false);
m_ui->buttonTogglePassword->setChecked(false);
m_db = nullptr;
}
Database* DatabaseOpenWidget::database()
{
return m_db;

View File

@ -39,6 +39,7 @@ public:
explicit DatabaseOpenWidget(QWidget* parent = nullptr);
~DatabaseOpenWidget();
void load(const QString& filename);
void clearForms();
void enterKey(const QString& pw, const QString& keyFile);
Database* database();

View File

@ -363,6 +363,8 @@ bool DatabaseTabWidget::saveDatabase(Database* db)
emit messageDismissTab();
return true;
} else {
dbStruct.modified = true;
updateTabName(db);
emit messageTab(tr("Writing the database failed.").append("\n").append(errorMessage),
MessageWidget::Error);
return false;

View File

@ -813,6 +813,7 @@ void DatabaseWidget::mergeDatabase(bool accepted)
m_db->merge(srcDb);
}
m_databaseOpenMergeWidget->clearForms();
setCurrentWidget(m_mainWidget);
emit databaseMerged(m_db);
}
@ -918,6 +919,7 @@ void DatabaseWidget::switchToImportCsv(const QString& fileName)
void DatabaseWidget::switchToOpenMergeDatabase(const QString& fileName)
{
m_databaseOpenMergeWidget->clearForms();
m_databaseOpenMergeWidget->load(fileName);
setCurrentWidget(m_databaseOpenMergeWidget);
}

View File

@ -36,6 +36,7 @@ EditWidget::EditWidget(QWidget* parent)
headerLabelFont.setBold(true);
headerLabelFont.setPointSize(headerLabelFont.pointSize() + 2);
headlineLabel()->setFont(headerLabelFont);
headlineLabel()->setTextFormat(Qt::PlainText);
connect(m_ui->categoryList, SIGNAL(categoryChanged(int)),
m_ui->stackedWidget, SLOT(setCurrentIndex(int)));

View File

@ -23,6 +23,7 @@
#include <QMessageBox>
#include <QFileDialog>
#include "core/Config.h"
#include "core/Group.h"
#include "core/Metadata.h"
#include "core/Tools.h"
@ -67,7 +68,7 @@ EditWidgetIcons::EditWidgetIcons(QWidget* parent)
this, SLOT(updateWidgetsDefaultIcons(bool)));
connect(m_ui->customIconsRadio, SIGNAL(toggled(bool)),
this, SLOT(updateWidgetsCustomIcons(bool)));
connect(m_ui->addButton, SIGNAL(clicked()), SLOT(addCustomIcon()));
connect(m_ui->addButton, SIGNAL(clicked()), SLOT(addCustomIconFromFile()));
connect(m_ui->deleteButton, SIGNAL(clicked()), SLOT(removeCustomIcon()));
connect(m_ui->faviconButton, SIGNAL(clicked()), SLOT(downloadFavicon()));
@ -184,15 +185,7 @@ void EditWidgetIcons::fetchFavicon(const QUrl& url)
image.loadFromData(response->collectedData());
if (!image.isNull()) {
//Set the image
Uuid uuid = Uuid::random();
m_database->metadata()->addCustomIcon(uuid, image.scaled(16, 16));
m_customIconModel->setIcons(m_database->metadata()->customIconsScaledPixmaps(),
m_database->metadata()->customIconsOrder());
QModelIndex index = m_customIconModel->indexFromUuid(uuid);
m_ui->customIconsView->setCurrentIndex(index);
m_ui->customIconsRadio->setChecked(true);
addCustomIcon(image);
resetFaviconDownload();
} else {
fetchFaviconFromGoogle(url.host());
@ -222,8 +215,18 @@ void EditWidgetIcons::fetchFavicon(const QUrl& url)
}
m_httpClient->setConnectingTimeOut(5000, [this]() {
resetFaviconDownload();
MessageBox::warning(this, tr("Error"), tr("Unable to fetch favicon."));
QUrl tempurl = QUrl(m_url);
if (tempurl.scheme() == "http") {
resetFaviconDownload();
emit messageEditEntry(tr("Unable to fetch favicon.") + "\n" +
tr("Hint: You can enable Google as a fallback under Tools>Settings>Security"),
MessageWidget::Error);
} else {
tempurl.setScheme("http");
m_url = tempurl.url();
tempurl.setPath("/favicon.ico");
fetchFavicon(tempurl);
}
});
m_ui->faviconButton->setDisabled(true);
@ -231,13 +234,15 @@ void EditWidgetIcons::fetchFavicon(const QUrl& url)
void EditWidgetIcons::fetchFaviconFromGoogle(const QString& domain)
{
if (m_fallbackToGoogle) {
if (config()->get("security/IconDownloadFallbackToGoogle", false).toBool() && m_fallbackToGoogle) {
resetFaviconDownload();
m_fallbackToGoogle = false;
fetchFavicon(QUrl("http://www.google.com/s2/favicons?domain=" + domain));
QUrl faviconUrl = QUrl("https://www.google.com/s2/favicons");
faviconUrl.setQuery("domain=" + QUrl::toPercentEncoding(domain));
fetchFavicon(faviconUrl);
} else {
resetFaviconDownload();
MessageBox::warning(this, tr("Error"), tr("Unable to fetch favicon."));
emit messageEditEntry(tr("Unable to fetch favicon."), MessageWidget::Error);
}
}
@ -258,7 +263,7 @@ void EditWidgetIcons::resetFaviconDownload(bool clearRedirect)
}
#endif
void EditWidgetIcons::addCustomIcon()
void EditWidgetIcons::addCustomIconFromFile()
{
if (m_database) {
QString filter = QString("%1 (%2);;%3 (*)").arg(tr("Images"),
@ -267,22 +272,41 @@ void EditWidgetIcons::addCustomIcon()
QString filename = QFileDialog::getOpenFileName(
this, tr("Select Image"), "", filter);
if (!filename.isEmpty()) {
QImage image(filename);
if (!image.isNull()) {
Uuid uuid = Uuid::random();
m_database->metadata()->addCustomIcon(uuid, image.scaled(16, 16));
m_customIconModel->setIcons(m_database->metadata()->customIconsScaledPixmaps(),
m_database->metadata()->customIconsOrder());
QModelIndex index = m_customIconModel->indexFromUuid(uuid);
m_ui->customIconsView->setCurrentIndex(index);
}
else {
auto icon = QImage(filename);
if (!icon.isNull()) {
addCustomIcon(QImage(filename));
} else {
emit messageEditEntry(tr("Can't read icon"), MessageWidget::Error);
}
}
}
}
void EditWidgetIcons::addCustomIcon(const QImage &icon)
{
if (m_database) {
Uuid uuid = m_database->metadata()->findCustomIcon(icon);
if (uuid.isNull()) {
uuid = Uuid::random();
// Don't add an icon larger than 128x128, but retain original size if smaller
if (icon.width() > 128 || icon.height() > 128) {
m_database->metadata()->addCustomIcon(uuid, icon.scaled(128, 128));
} else {
m_database->metadata()->addCustomIcon(uuid, icon);
}
m_customIconModel->setIcons(m_database->metadata()->customIconsScaledPixmaps(),
m_database->metadata()->customIconsOrder());
} else {
emit messageEditEntry(tr("Custom icon already exists"), MessageWidget::Information);
}
// Select the new or existing icon
QModelIndex index = m_customIconModel->indexFromUuid(uuid);
m_ui->customIconsView->setCurrentIndex(index);
}
}
void EditWidgetIcons::removeCustomIcon()
{
if (m_database) {

View File

@ -78,7 +78,8 @@ private slots:
void fetchFaviconFromGoogle(const QString& domain);
void resetFaviconDownload(bool clearRedirect = true);
#endif
void addCustomIcon();
void addCustomIconFromFile();
void addCustomIcon(const QImage& icon);
void removeCustomIcon();
void updateWidgetsDefaultIcons(bool checked);
void updateWidgetsCustomIcons(bool checked);

View File

@ -240,8 +240,10 @@ MainWindow::MainWindow()
SLOT(databaseStatusChanged(DatabaseWidget*)));
connect(m_ui->stackedWidget, SIGNAL(currentChanged(int)), SLOT(setMenuActionState()));
connect(m_ui->stackedWidget, SIGNAL(currentChanged(int)), SLOT(updateWindowTitle()));
connect(m_ui->settingsWidget, SIGNAL(editFinished(bool)), SLOT(switchToDatabases()));
connect(m_ui->settingsWidget, SIGNAL(accepted()), SLOT(applySettingsChanges()));
connect(m_ui->settingsWidget, SIGNAL(apply()), SLOT(applySettingsChanges()));
connect(m_ui->settingsWidget, SIGNAL(accepted()), SLOT(switchToDatabases()));
connect(m_ui->settingsWidget, SIGNAL(rejected()), SLOT(switchToDatabases()));
connect(m_ui->actionDatabaseNew, SIGNAL(triggered()), m_ui->tabWidget,
SLOT(newDatabase()));
@ -550,8 +552,14 @@ void MainWindow::updateWindowTitle()
QString customWindowTitlePart;
int stackedWidgetIndex = m_ui->stackedWidget->currentIndex();
int tabWidgetIndex = m_ui->tabWidget->currentIndex();
bool isModified = m_ui->tabWidget->isModified(tabWidgetIndex);
if (stackedWidgetIndex == DatabaseTabScreen && tabWidgetIndex != -1) {
customWindowTitlePart = m_ui->tabWidget->tabText(tabWidgetIndex);
if (isModified) {
// remove asterisk '*' from title
customWindowTitlePart.remove(customWindowTitlePart.size() - 1, 1);
}
if (m_ui->tabWidget->readOnly(tabWidgetIndex)) {
customWindowTitlePart.append(QString(" [%1]").arg(tr("read-only")));
}
@ -563,7 +571,7 @@ void MainWindow::updateWindowTitle()
if (customWindowTitlePart.isEmpty()) {
windowTitle = BaseWindowTitle;
} else {
windowTitle = QString("%1 - %2").arg(customWindowTitlePart, BaseWindowTitle);
windowTitle = QString("%1[*] - %2").arg(customWindowTitlePart, BaseWindowTitle);
}
if (customWindowTitlePart.isEmpty() || stackedWidgetIndex == 1) {
@ -572,7 +580,7 @@ void MainWindow::updateWindowTitle()
setWindowFilePath(m_ui->tabWidget->databasePath(tabWidgetIndex));
}
setWindowModified(m_ui->tabWidget->isModified(tabWidgetIndex));
setWindowModified(isModified);
setWindowTitle(windowTitle);
}

View File

@ -200,7 +200,7 @@
</widget>
<widget class="QMenu" name="menuHelp">
<property name="title">
<string>He&amp;lp</string>
<string>&amp;Help</string>
</property>
<addaction name="actionAbout"/>
</widget>
@ -309,7 +309,7 @@
</action>
<action name="actionDatabaseOpen">
<property name="text">
<string>&amp;Open database</string>
<string>&amp;Open database...</string>
</property>
</action>
<action name="actionDatabaseSave">
@ -391,7 +391,7 @@
<bool>false</bool>
</property>
<property name="text">
<string>Sa&amp;ve database as</string>
<string>Sa&amp;ve database as...</string>
</property>
</action>
<action name="actionChangeMasterKey">
@ -399,7 +399,7 @@
<bool>false</bool>
</property>
<property name="text">
<string>Change &amp;master key</string>
<string>Change &amp;master key...</string>
</property>
</action>
<action name="actionChangeDatabaseSettings">
@ -517,22 +517,22 @@
<bool>false</bool>
</property>
<property name="text">
<string>&amp;Export to CSV file</string>
<string>&amp;Export to CSV file...</string>
</property>
</action>
<action name="actionImportKeePass1">
<property name="text">
<string>Import KeePass 1 database</string>
<string>Import KeePass 1 database...</string>
</property>
</action>
<action name="actionImportCsv">
<property name="text">
<string>Import CSV file</string>
<string>Import CSV file...</string>
</property>
</action>
<action name="actionRepairDatabase">
<property name="text">
<string>Re&amp;pair database</string>
<string>Re&amp;pair database...</string>
</property>
</action>
<action name="actionEntryTotp">
@ -542,7 +542,7 @@
</action>
<action name="actionEntrySetupTotp">
<property name="text">
<string>Setup TOTP</string>
<string>Set up TOTP...</string>
</property>
</action>
<action name="actionEntryCopyTotp">

View File

@ -2,32 +2,12 @@
<ui version="4.0">
<class>PasswordGeneratorWidget</class>
<widget class="QWidget" name="PasswordGeneratorWidget">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>575</width>
<height>305</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>284</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>16777215</height>
</size>
</property>
<property name="windowTitle">
<string/>
</property>
@ -188,17 +168,11 @@ QProgressBar::chunk {
<item>
<widget class="QTabWidget" name="tabWidget">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="tabPosition">
<enum>QTabWidget::North</enum>
</property>
@ -225,12 +199,6 @@ QProgressBar::chunk {
<layout class="QHBoxLayout" name="alphabetLayout" stretch="0,0,0,0,1,0">
<item>
<widget class="QToolButton" name="checkBoxUpper">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="MinimumExpanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
@ -256,12 +224,6 @@ QProgressBar::chunk {
</item>
<item>
<widget class="QToolButton" name="checkBoxLower">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="MinimumExpanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
@ -287,12 +249,6 @@ QProgressBar::chunk {
</item>
<item>
<widget class="QToolButton" name="checkBoxNumbers">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="MinimumExpanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
@ -318,12 +274,6 @@ QProgressBar::chunk {
</item>
<item>
<widget class="QToolButton" name="checkBoxSpecialChars">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="MinimumExpanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
@ -349,12 +299,6 @@ QProgressBar::chunk {
</item>
<item>
<widget class="QToolButton" name="checkBoxExtASCII">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="MinimumExpanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
@ -578,7 +522,7 @@ QProgressBar::chunk {
<item row="2" column="1">
<widget class="QLineEdit" name="editWordSeparator">
<property name="text">
<string> </string>
<string/>
</property>
</widget>
</item>

View File

@ -20,6 +20,7 @@
#include "ui_SettingsWidgetGeneral.h"
#include "ui_SettingsWidgetSecurity.h"
#include "config-keepassx.h"
#include "autotype/AutoType.h"
#include "core/Config.h"
#include "core/Translator.h"
@ -68,6 +69,7 @@ SettingsWidget::SettingsWidget(QWidget* parent)
}
connect(this, SIGNAL(accepted()), SLOT(saveSettings()));
connect(this, SIGNAL(apply()), SLOT(saveSettings()));
connect(this, SIGNAL(rejected()), SLOT(reject()));
connect(m_generalUi->autoSaveAfterEveryChangeCheckBox, SIGNAL(toggled(bool)),
@ -79,6 +81,10 @@ SettingsWidget::SettingsWidget(QWidget* parent)
m_secUi->clearClipboardSpinBox, SLOT(setEnabled(bool)));
connect(m_secUi->lockDatabaseIdleCheckBox, SIGNAL(toggled(bool)),
m_secUi->lockDatabaseIdleSpinBox, SLOT(setEnabled(bool)));
#ifndef WITH_XC_HTTP
m_secUi->privacy->setVisible(false);
#endif
}
SettingsWidget::~SettingsWidget()
@ -101,6 +107,10 @@ void SettingsWidget::loadSettings()
tr("Access error for config file %1").arg(config()->getFileName()), MessageWidget::Error);
}
#ifdef QT_DEBUG
m_generalUi->singleInstanceCheckBox->setEnabled(false);
#endif
m_generalUi->singleInstanceCheckBox->setChecked(config()->get("SingleInstance").toBool());
m_generalUi->rememberLastDatabasesCheckBox->setChecked(config()->get("RememberLastDatabases").toBool());
m_generalUi->rememberLastKeyFilesCheckBox->setChecked(config()->get("RememberLastKeyFiles").toBool());
m_generalUi->openPreviousDatabasesOnStartupCheckBox->setChecked(
@ -135,6 +145,7 @@ void SettingsWidget::loadSettings()
if (m_globalAutoTypeKey > 0 && m_globalAutoTypeModifiers > 0) {
m_generalUi->autoTypeShortcutWidget->setShortcut(m_globalAutoTypeKey, m_globalAutoTypeModifiers);
}
m_generalUi->autoTypeDelaySpinBox->setValue(config()->get("AutoTypeDelay").toInt());
}
@ -145,6 +156,7 @@ void SettingsWidget::loadSettings()
m_secUi->lockDatabaseIdleSpinBox->setValue(config()->get("security/lockdatabaseidlesec").toInt());
m_secUi->lockDatabaseMinimizeCheckBox->setChecked(config()->get("security/lockdatabaseminimize").toBool());
m_secUi->lockDatabaseOnScreenLockCheckBox->setChecked(config()->get("security/lockdatabasescreenlock").toBool());
m_secUi->lockDatabaseOnScreenLockCheckBox->setChecked(config()->get("security/IconDownloadFallbackToGoogle").toBool());
m_secUi->passwordCleartextCheckBox->setChecked(config()->get("security/passwordscleartext").toBool());
m_secUi->passwordRepeatCheckBox->setChecked(config()->get("security/passwordsrepeat").toBool());
@ -168,6 +180,7 @@ void SettingsWidget::saveSettings()
return;
}
config()->set("SingleInstance", m_generalUi->singleInstanceCheckBox->isChecked());
config()->set("RememberLastDatabases", m_generalUi->rememberLastDatabasesCheckBox->isChecked());
config()->set("RememberLastKeyFiles", m_generalUi->rememberLastKeyFilesCheckBox->isChecked());
config()->set("OpenPreviousDatabasesOnStartup",
@ -198,6 +211,7 @@ void SettingsWidget::saveSettings()
config()->set("GlobalAutoTypeKey", m_generalUi->autoTypeShortcutWidget->key());
config()->set("GlobalAutoTypeModifiers",
static_cast<int>(m_generalUi->autoTypeShortcutWidget->modifiers()));
config()->set("AutoTypeDelay", m_generalUi->autoTypeDelaySpinBox->value());
}
config()->set("security/clearclipboard", m_secUi->clearClipboardCheckBox->isChecked());
config()->set("security/clearclipboardtimeout", m_secUi->clearClipboardSpinBox->value());
@ -206,15 +220,23 @@ void SettingsWidget::saveSettings()
config()->set("security/lockdatabaseidlesec", m_secUi->lockDatabaseIdleSpinBox->value());
config()->set("security/lockdatabaseminimize", m_secUi->lockDatabaseMinimizeCheckBox->isChecked());
config()->set("security/lockdatabasescreenlock", m_secUi->lockDatabaseOnScreenLockCheckBox->isChecked());
config()->set("security/IconDownloadFallbackToGoogle", m_secUi->fallbackToGoogle->isChecked());
config()->set("security/passwordscleartext", m_secUi->passwordCleartextCheckBox->isChecked());
config()->set("security/passwordsrepeat", m_secUi->passwordRepeatCheckBox->isChecked());
// Security: clear storage if related settings are disabled
if (!config()->get("RememberLastDatabases").toBool()) {
config()->set("LastDatabases", QVariant());
}
if (!config()->get("RememberLastKeyFiles").toBool()) {
config()->set("LastKeyFiles", QVariant());
}
for (const ExtraPage& page: asConst(m_extraPages)) {
page.saveSettings();
}
emit editFinished(true);
}
void SettingsWidget::reject()
@ -224,7 +246,6 @@ void SettingsWidget::reject()
autoType()->registerGlobalShortcut(m_globalAutoTypeKey, m_globalAutoTypeModifiers);
}
emit editFinished(false);
}
void SettingsWidget::enableAutoSaveOnExit(bool checked)

View File

@ -46,9 +46,6 @@ public:
void addSettingsPage(ISettingsPage * page);
void loadSettings();
signals:
void editFinished(bool accepted);
private slots:
void saveSettings();
void reject();

View File

@ -33,6 +33,16 @@
<string>Basic Settings</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QCheckBox" name="singleInstanceCheckBox">
<property name="text">
<string>Start only a single instance of KeePassXC</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="rememberLastDatabasesCheckBox">
<property name="text">
@ -318,27 +328,18 @@
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="spacing">
<number>15</number>
<layout class="QFormLayout" name="formLayout_2">
<property name="topMargin">
<number>10</number>
</property>
<item alignment="Qt::AlignRight">
<widget class="QLabel" name="autoTypeShortcutLabel">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<item row="1" column="0">
<widget class="QLabel" name="autoTypeShortcutLabel_2">
<property name="text">
<string>Global Auto-Type shortcut</string>
</property>
<property name="alignment">
<set>Qt::AlignLeading</set>
</property>
</widget>
</item>
<item>
<item row="1" column="1">
<widget class="ShortcutWidget" name="autoTypeShortcutWidget">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
@ -348,6 +349,35 @@
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="autoTypeDelayLabel_2">
<property name="text">
<string>Auto-Type delay</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QSpinBox" name="autoTypeDelaySpinBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="suffix">
<string> ms</string>
</property>
<property name="prefix">
<string/>
</property>
<property name="maximum">
<number>999</number>
</property>
<property name="value">
<number>25</number>
</property>
</widget>
</item>
</layout>
</item>
<item>

View File

@ -139,6 +139,22 @@
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="privacy">
<property name="title">
<string>Privacy</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<widget class="QCheckBox" name="fallbackToGoogle">
<property name="text">
<string>Use Google as fallback for downloading website icons</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<spacer name="verticalSpacer_2">
<property name="orientation">

View File

@ -26,6 +26,7 @@ UnlockDatabaseDialog::UnlockDatabaseDialog(QWidget* parent)
: QDialog(parent)
, m_view(new UnlockDatabaseWidget(this))
{
setWindowFlags(windowFlags() | Qt::WindowStaysOnTopHint);
connect(m_view, SIGNAL(editFinished(bool)), this, SLOT(complete(bool)));
}

View File

@ -26,14 +26,3 @@ UnlockDatabaseWidget::UnlockDatabaseWidget(QWidget* parent)
{
m_ui->labelHeadline->setText(tr("Unlock database"));
}
void UnlockDatabaseWidget::clearForms()
{
m_ui->editPassword->clear();
m_ui->comboKeyFile->clear();
m_ui->checkPassword->setChecked(false);
m_ui->checkKeyFile->setChecked(false);
m_ui->checkChallengeResponse->setChecked(false);
m_ui->buttonTogglePassword->setChecked(false);
m_db = nullptr;
}

View File

@ -26,7 +26,6 @@ class UnlockDatabaseWidget : public DatabaseOpenWidget
public:
explicit UnlockDatabaseWidget(QWidget* parent = nullptr);
void clearForms();
};
#endif // KEEPASSX_UNLOCKDATABASEWIDGET_H

View File

@ -280,15 +280,15 @@ void EditEntryWidget::loadEntry(Entry* entry, bool create, bool history, const Q
m_history = history;
if (history) {
setHeadline(QString("%1 > %2").arg(parentName.toHtmlEscaped(), tr("Entry history")));
setHeadline(QString("%1 > %2").arg(parentName, tr("Entry history")));
}
else {
if (create) {
setHeadline(QString("%1 > %2").arg(parentName.toHtmlEscaped(), tr("Add entry")));
setHeadline(QString("%1 > %2").arg(parentName, tr("Add entry")));
}
else {
setHeadline(QString("%1 > %2 > %3").arg(parentName.toHtmlEscaped(),
entry->title().toHtmlEscaped(), tr("Edit entry")));
setHeadline(QString("%1 > %2 > %3").arg(parentName,
entry->title(), tr("Edit entry")));
}
}
@ -363,7 +363,7 @@ void EditEntryWidget::setForms(const Entry* entry, bool restore)
IconStruct iconStruct;
iconStruct.uuid = entry->iconUuid();
iconStruct.number = entry->iconNumber();
m_iconsWidget->load(entry->uuid(), m_database, iconStruct, entry->url());
m_iconsWidget->load(entry->uuid(), m_database, iconStruct, entry->webUrl());
connect(m_mainUi->urlEdit, SIGNAL(textChanged(QString)), m_iconsWidget, SLOT(setUrl(QString)));
m_autoTypeUi->enableButton->setChecked(entry->autoTypeEnabled());
@ -429,6 +429,7 @@ void EditEntryWidget::saveEntry()
// must stand before beginUpdate()
// we don't want to create a new history item, if only the history has changed
m_entry->removeHistoryItems(m_historyModel->deletedEntries());
m_historyModel->clearDeletedEntries();
m_autoTypeAssoc->removeEmpty();
@ -445,6 +446,12 @@ void EditEntryWidget::saveEntry()
void EditEntryWidget::acceptEntry()
{
// Check if passwords are mismatched first to prevent saving
if (!passwordsEqual()) {
showMessage(tr("Different passwords supplied."), MessageWidget::Error);
return;
}
saveEntry();
clear();
emit editFinished(true);
@ -912,8 +919,7 @@ void EditEntryWidget::deleteHistoryEntry()
m_historyModel->deleteIndex(index);
if (m_historyModel->rowCount() > 0) {
m_historyUi->deleteAllButton->setEnabled(true);
}
else {
} else {
m_historyUi->deleteAllButton->setEnabled(false);
}
}

View File

@ -2,20 +2,6 @@
<ui version="4.0">
<class>EditEntryWidgetMain</class>
<widget class="QWidget" name="EditEntryWidgetMain">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>692</width>
<height>323</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<layout class="QGridLayout" name="gridLayout_3">
<property name="topMargin">
<number>0</number>
@ -34,20 +20,7 @@
</widget>
</item>
<item row="4" column="1">
<widget class="PasswordGeneratorWidget" name="passwordGenerator" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
</widget>
<widget class="PasswordGeneratorWidget" name="passwordGenerator" native="true"/>
</item>
<item row="2" column="0" alignment="Qt::AlignRight">
<widget class="QLabel" name="passwordLabel">

View File

@ -115,6 +115,11 @@ void EntryHistoryModel::clear()
endResetModel();
}
void EntryHistoryModel::clearDeletedEntries()
{
m_deletedHistoryEntries.clear();
}
QList<Entry*> EntryHistoryModel::deletedEntries()
{
return m_deletedHistoryEntries;

View File

@ -37,6 +37,7 @@ public:
void setEntries(const QList<Entry*>& entries);
void clear();
void clearDeletedEntries();
QList<Entry*> deletedEntries();
void deleteIndex(QModelIndex index);
void deleteAll();

View File

@ -151,7 +151,8 @@ QVariant EntryModel::data(const QModelIndex& index, int role) const
}
return result;
case Url:
result = entry->resolveMultiplePlaceholders(entry->url());
result = entry->maskPasswordPlaceholders(entry->url());
result = entry->resolveMultiplePlaceholders(result);
if (attr->isReference(EntryAttributes::URLKey)) {
result.prepend(tr("Ref: ","Reference abbreviation"));
}

View File

@ -203,7 +203,7 @@ QList<Entry*> Service::searchEntries(Database* db, const QString& hostname)
const auto results = EntrySearcher().search(hostname, rootGroup, Qt::CaseInsensitive);
for (Entry* entry: results) {
QString title = entry->title();
QString url = entry->url();
QString url = entry->webUrl();
//Filter to match hostname in Title and Url fields
if ( (!title.isEmpty() && hostname.contains(title))

View File

@ -50,7 +50,7 @@ QByteArray YkChallengeResponseKey::rawKey() const
*/
bool YkChallengeResponseKey::challenge(const QByteArray& challenge)
{
return this->challenge(challenge, 1);
return this->challenge(challenge, 2);
}
bool YkChallengeResponseKey::challenge(const QByteArray& challenge, unsigned retries)
@ -70,8 +70,8 @@ bool YkChallengeResponseKey::challenge(const QByteArray& challenge, unsigned ret
QEventLoop loop;
QFutureWatcher<YubiKey::ChallengeResult> watcher;
watcher.setFuture(future);
connect(&watcher, SIGNAL(finished()), &loop, SLOT(quit()));
watcher.setFuture(future);
loop.exec();
if (m_blocking) {

View File

@ -154,7 +154,7 @@ YubiKey::ChallengeResult YubiKey::challenge(int slot, bool mayBlock, const QByte
QByteArray paddedChallenge = challenge;
// ensure that YubiKey::init() succeeded
if (m_yk == NULL) {
if (!init()) {
m_mutex.unlock();
return ERROR;
}

View File

@ -57,13 +57,11 @@ int main(int argc, char** argv)
// don't set organizationName as that changes the return value of
// QStandardPaths::writableLocation(QDesktopServices::DataLocation)
#ifndef QT_DEBUG
if (app.isAlreadyRunning()) {
qWarning() << QCoreApplication::translate("Main", "Another instance of KeePassXC is already running.").toUtf8().constData();
return 0;
}
#endif
QApplication::setQuitOnLastWindowClosed(false);
if (!Crypto::init()) {

View File

@ -98,7 +98,7 @@ set(TEST_LIBRARIES
set(testsupport_SOURCES modeltest.cpp FailDevice.cpp)
add_library(testsupport STATIC ${testsupport_SOURCES})
target_link_libraries(testsupport ${MHD_LIBRARIES} Qt5::Core Qt5::Concurrent Qt5::Widgets Qt5::Test)
target_link_libraries(testsupport Qt5::Core Qt5::Concurrent Qt5::Widgets Qt5::Test)
if(YUBIKEY_FOUND)
set(TEST_LIBRARIES ${TEST_LIBRARIES} ${YUBIKEY_LIBRARIES})

View File

@ -268,6 +268,17 @@ void TestGui::testEditEntry()
QCOMPARE(attrTextEdit->toPlainText(), attrText);
editEntryWidget->setCurrentPage(0);
// Test mismatch passwords
QLineEdit* passwordEdit = editEntryWidget->findChild<QLineEdit*>("passwordEdit");
QString originalPassword = passwordEdit->text();
passwordEdit->setText("newpass");
QTest::mouseClick(editEntryWidgetButtonBox->button(QDialogButtonBox::Ok), Qt::LeftButton);
MessageWidget* messageWiget = editEntryWidget->findChild<MessageWidget*>("messageWidget");
QTRY_VERIFY(messageWiget->isVisible());
QCOMPARE(m_dbWidget->currentMode(), DatabaseWidget::EditMode);
QCOMPARE(passwordEdit->text(), QString("newpass"));
passwordEdit->setText(originalPassword);
// Save the edit (press OK)
QTest::mouseClick(editEntryWidgetButtonBox->button(QDialogButtonBox::Ok), Qt::LeftButton);